diff --git a/.cirrus.star b/.cirrus.star index 36233872d1e50..e9bb672b95936 100644 --- a/.cirrus.star +++ b/.cirrus.star @@ -7,7 +7,7 @@ https://github.com/bazelbuild/starlark/blob/master/spec.md See also .cirrus.yml and src/tools/ci/README """ -load("cirrus", "env", "fs") +load("cirrus", "env", "fs", "re", "yaml") def main(): @@ -18,19 +18,36 @@ def main(): 1) the contents of .cirrus.yml - 2) if defined, the contents of the file referenced by the, repository + 2) computed environment variables + + 3) if defined, the contents of the file referenced by the, repository level, REPO_CI_CONFIG_GIT_URL variable (see https://cirrus-ci.org/guide/programming-tasks/#fs for the accepted format) - 3) .cirrus.tasks.yml + 4) .cirrus.tasks.yml """ output = "" # 1) is evaluated implicitly + # Add 2) + additional_env = compute_environment_vars() + env_fmt = """ +### +# Computed environment variables start here +### +{0} +### +# Computed environment variables end here +### +""" + output += env_fmt.format(yaml.dumps({'env': additional_env})) + + + # Add 3) repo_config_url = env.get("REPO_CI_CONFIG_GIT_URL") if repo_config_url != None: print("loading additional configuration from \"{}\"".format(repo_config_url)) @@ -38,12 +55,75 @@ def main(): else: output += "\n# REPO_CI_CONFIG_URL was not set\n" - # Add 3) + + # Add 4) output += config_from(".cirrus.tasks.yml") + return output +def compute_environment_vars(): + cenv = {} + + ### + # Some tasks are manually triggered by default because they might use too + # many resources for users of free Cirrus credits, but they can be + # triggered automatically by naming them in an environment variable e.g. + # REPO_CI_AUTOMATIC_TRIGGER_TASKS="task_name other_task" under "Repository + # Settings" on Cirrus CI's website. + + default_manual_trigger_tasks = ['mingw', 'netbsd', 'openbsd'] + + repo_ci_automatic_trigger_tasks = env.get('REPO_CI_AUTOMATIC_TRIGGER_TASKS', '') + for task in default_manual_trigger_tasks: + name = 'CI_TRIGGER_TYPE_' + task.upper() + if repo_ci_automatic_trigger_tasks.find(task) != -1: + value = 'automatic' + else: + value = 'manual' + cenv[name] = value + ### + + ### + # Parse "ci-os-only:" tag in commit message and set + # CI_{$OS}_ENABLED variable for each OS + + # We want to disable SanityCheck if testing just a specific OS. This + # shortens push-wait-for-ci cycle time a bit when debugging operating + # system specific failures. Just treating it as an OS in that case + # suffices. + + operating_systems = [ + 'compilerwarnings', + 'freebsd', + 'linux', + 'macos', + 'mingw', + 'netbsd', + 'openbsd', + 'sanitycheck', + 'windows', + ] + commit_message = env.get('CIRRUS_CHANGE_MESSAGE') + match_re = r"(^|.*\n)ci-os-only: ([^\n]+)($|\n.*)" + + # re.match() returns an array with a tuple of (matched-string, match_1, ...) + m = re.match(match_re, commit_message) + if m and len(m) > 0: + os_only = m[0][2] + os_only_list = re.split(r'[, ]+', os_only) + else: + os_only_list = operating_systems + + for os in operating_systems: + os_enabled = os in os_only_list + cenv['CI_{0}_ENABLED'.format(os.upper())] = os_enabled + ### + + return cenv + + def config_from(config_src): """return contents of config file `config_src`, surrounded by markers indicating start / end of the included file diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index 86a1fa9bbdbad..d84875168bb64 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -72,7 +72,7 @@ task: # push-wait-for-ci cycle time a bit when debugging operating system specific # failures. Uses skip instead of only_if, as cirrus otherwise warns about # only_if conditions not matching. - skip: $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:.*' + skip: $CI_SANITYCHECK_ENABLED == false env: CPUS: 4 @@ -167,7 +167,7 @@ task: <<: *freebsd_task_template depends_on: SanityCheck - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*freebsd.*' + only_if: $CI_FREEBSD_ENABLED sysinfo_script: | id @@ -239,7 +239,6 @@ task: task: depends_on: SanityCheck - trigger_type: manual env: # Below are experimentally derived to be a decent choice. @@ -257,7 +256,9 @@ task: matrix: - name: NetBSD - Meson - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*netbsd.*' + # See REPO_CI_AUTOMATIC_TRIGGER_TASKS in .cirrus.star + trigger_type: $CI_TRIGGER_TYPE_NETBSD + only_if: $CI_NETBSD_ENABLED env: OS_NAME: netbsd IMAGE_FAMILY: pg-ci-netbsd-postgres @@ -274,7 +275,9 @@ task: <<: *netbsd_task_template - name: OpenBSD - Meson - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*openbsd.*' + # See REPO_CI_AUTOMATIC_TRIGGER_TASKS in .cirrus.star + trigger_type: $CI_TRIGGER_TYPE_OPENBSD + only_if: $CI_OPENBSD_ENABLED env: OS_NAME: openbsd IMAGE_FAMILY: pg-ci-openbsd-postgres @@ -322,7 +325,7 @@ task: build EOF - build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS}' + build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET}' upload_caches: ccache test_world_script: | @@ -414,7 +417,7 @@ task: <<: *linux_task_template depends_on: SanityCheck - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*' + only_if: $CI_LINUX_ENABLED ccache_cache: folder: ${CCACHE_DIR} @@ -471,6 +474,7 @@ task: --enable-cassert --enable-injection-points --enable-debug \ --enable-tap-tests --enable-nls \ --with-segsize-blocks=6 \ + --with-libnuma \ --with-liburing \ \ ${LINUX_CONFIGURE_FEATURES} \ @@ -523,11 +527,21 @@ task: -Dllvm=disabled \ --pkg-config-path /usr/lib/i386-linux-gnu/pkgconfig/ \ -DPERL=perl5.36-i386-linux-gnu \ + -Dlibnuma=disabled \ build-32 EOF - build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET}' - build_32_script: su postgres -c 'ninja -C build-32 -j${BUILD_JOBS} ${MBUILD_TARGET}' + build_script: | + su postgres <<-EOF + ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET} + ninja -C build -t missingdeps + EOF + + build_32_script: | + su postgres <<-EOF + ninja -C build-32 -j${BUILD_JOBS} ${MBUILD_TARGET} + ninja -C build -t missingdeps + EOF upload_caches: ccache @@ -602,7 +616,7 @@ task: <<: *macos_task_template depends_on: SanityCheck - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*(macos|darwin|osx).*' + only_if: $CI_MACOS_ENABLED sysinfo_script: | id @@ -708,7 +722,7 @@ task: <<: *windows_task_template depends_on: SanityCheck - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*' + only_if: $CI_WINDOWS_ENABLED setup_additional_packages_script: | REM choco install -y --no-progress ... @@ -719,14 +733,14 @@ task: echo 127.0.0.3 pg-loadbalancetest >> c:\Windows\System32\Drivers\etc\hosts type c:\Windows\System32\Drivers\etc\hosts - # Use /DEBUG:FASTLINK to avoid high memory usage during linking configure_script: | vcvarsall x64 - meson setup --backend ninja --buildtype debug -Dc_link_args=/DEBUG:FASTLINK -Dcassert=true -Dinjection_points=true -Db_pch=true -Dextra_lib_dirs=c:\openssl\1.1\lib -Dextra_include_dirs=c:\openssl\1.1\include -DTAR=%TAR% build + meson setup --backend ninja --buildtype debug -Dcassert=true -Dinjection_points=true -Db_pch=true -Dextra_lib_dirs=c:\openssl\1.1\lib -Dextra_include_dirs=c:\openssl\1.1\include -DTAR=%TAR% build build_script: | vcvarsall x64 ninja -C build %MBUILD_TARGET% + ninja -C build -t missingdeps check_world_script: | vcvarsall x64 @@ -743,13 +757,11 @@ task: << : *WINDOWS_ENVIRONMENT_BASE name: Windows - Server 2019, MinGW64 - Meson - # due to resource constraints we don't run this task by default for now - trigger_type: manual - # worth using only_if despite being manual, otherwise this task will show up - # when e.g. ci-os-only: linux is used. - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*mingw.*' - # otherwise it'll be sorted before other tasks + # See REPO_CI_AUTOMATIC_TRIGGER_TASKS in .cirrus.star. + trigger_type: $CI_TRIGGER_TYPE_MINGW + depends_on: SanityCheck + only_if: $CI_MINGW_ENABLED env: TEST_JOBS: 4 # higher concurrency causes occasional failures @@ -803,10 +815,9 @@ task: # To limit unnecessary work only run this once the SanityCheck # succeeds. This is particularly important for this task as we intentionally - # use always: to continue after failures. Task that did not run count as a - # success, so we need to recheck SanityChecks's condition here ... + # use always: to continue after failures. depends_on: SanityCheck - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' + only_if: $CI_COMPILERWARNINGS_ENABLED env: CPUS: 4 @@ -926,14 +937,11 @@ task: # - Don't use ccache, the files are uncacheable, polluting ccache's # cache # - Use -fmax-errors, as particularly cpluspluscheck can be very verbose - # - XXX have to disable ICU to avoid errors: - # https://postgr.es/m/20220323002024.f2g6tivduzrktgfa%40alap3.anarazel.de ### always: headers_headerscheck_script: | time ./configure \ ${LINUX_CONFIGURE_FEATURES} \ - --without-icu \ --quiet \ CC="gcc" CXX"=g++" CLANG="clang-16" make -s -j${BUILD_JOBS} clean diff --git a/.cirrus.yml b/.cirrus.yml index 33c6e481d746a..3f75852e84ecb 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -10,12 +10,20 @@ # # 1) the contents of this file # -# 2) if defined, the contents of the file referenced by the, repository +# 2) computed environment variables +# +# Used to enable/disable tasks based on the execution environment. See +# .cirrus.star: compute_environment_vars() +# +# 3) if defined, the contents of the file referenced by the, repository # level, REPO_CI_CONFIG_GIT_URL variable (see # https://cirrus-ci.org/guide/programming-tasks/#fs for the accepted # format) # -# 3) .cirrus.tasks.yml +# This allows running tasks in a different execution environment than the +# default, e.g. to have sufficient resources for cfbot. +# +# 4) .cirrus.tasks.yml # # This composition is done by .cirrus.star diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index e2190a562840e..f83e2fc658664 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -14,6 +14,27 @@ # # $ git log --pretty=format:"%H # %cd%n# %s" $PGINDENTGITHASH -1 --date=iso +1d1612aec7688139e1a5506df1366b4b6a69605d # 2025-07-29 09:10:41 -0400 +# Run pgindent. + +73873805fb3627cb23937c750fa83ffd8f16fc6c # 2025-07-25 16:36:44 -0400 +# Run pgindent on the changes of the previous patch. + +9e345415bcd3c4358350b89edfd710469b8bfaf9 # 2025-07-01 15:23:07 +0200 +# Fix indentation in pg_numa code + +b27644bade0348d0dafd3036c47880a349fe9332 # 2025-06-15 13:04:24 -0400 +# Sync typedefs.list with the buildfarm. + +4672b6223910687b2aab075bcd2dd54ce90d5171 # 2025-06-01 14:55:24 -0400 +# Run pgindent on the previous commit. + +918e7287ed20eb1fe280ab6c4056ccf94dcd53a8 # 2025-04-30 19:18:30 +1200 +# Fix broken indentation + +e1a8b1ad587112e67fdc5aa7b388631dde4dbdda # 2025-04-04 09:38:22 -0500 +# Re-pgindent pg_largeobject.c after commit 0d6c477664. + 796bdda484c838313959f65e2b700f14ac7c0e66 # 2025-03-18 09:02:36 -0400 # Fix indentation again. diff --git a/.gitattributes b/.gitattributes index 8df6b75e653b8..4e26bbfb14552 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,8 +12,8 @@ *.xsl whitespace=space-before-tab,trailing-space,tab-in-indent # Avoid confusing ASCII underlines with leftover merge conflict markers -README conflict-marker-size=32 -README.* conflict-marker-size=32 +README conflict-marker-size=48 +README.* conflict-marker-size=48 # Certain data files that contain special whitespace, and other special cases *.data -whitespace diff --git a/COPYRIGHT b/COPYRIGHT index be2d694b03854..3b79b1b4ca0db 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,5 +1,5 @@ PostgreSQL Database Management System -(formerly known as Postgres, then as Postgres95) +(also known as Postgres, formerly known as Postgres95) Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group diff --git a/config/c-compiler.m4 b/config/c-compiler.m4 index e9e54470e667b..da40bd6a64755 100644 --- a/config/c-compiler.m4 +++ b/config/c-compiler.m4 @@ -581,6 +581,44 @@ fi undefine([Ac_cachevar])dnl ])# PGAC_SSE42_CRC32_INTRINSICS +# PGAC_AVX512_PCLMUL_INTRINSICS +# --------------------------- +# Check if the compiler supports AVX-512 carryless multiplication +# and three-way exclusive-or instructions used for computing CRC. +# AVX-512F is assumed to be supported if the above are. +# +# If the intrinsics are supported, sets pgac_avx512_pclmul_intrinsics. +AC_DEFUN([PGAC_AVX512_PCLMUL_INTRINSICS], +[define([Ac_cachevar], [AS_TR_SH([pgac_cv_avx512_pclmul_intrinsics])])dnl +AC_CACHE_CHECK([for _mm512_clmulepi64_epi128], [Ac_cachevar], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + __m512i x; + __m512i y; + + #if defined(__has_attribute) && __has_attribute (target) + __attribute__((target("vpclmulqdq,avx512vl"))) + #endif + static int avx512_pclmul_test(void) + { + __m128i z; + + x = _mm512_xor_si512(_mm512_zextsi128_si512(_mm_cvtsi32_si128(0)), x); + y = _mm512_clmulepi64_epi128(x, y, 0); + z = _mm_ternarylogic_epi64( + _mm512_castsi512_si128(y), + _mm512_extracti32x4_epi32(y, 1), + _mm512_extracti32x4_epi32(y, 2), + 0x96); + return _mm_crc32_u64(0, _mm_extract_epi64(z, 0)); + }], + [return avx512_pclmul_test();])], + [Ac_cachevar=yes], + [Ac_cachevar=no])]) +if test x"$Ac_cachevar" = x"yes"; then + pgac_avx512_pclmul_intrinsics=yes +fi +undefine([Ac_cachevar])dnl +])# PGAC_AVX512_PCLMUL_INTRINSICS # PGAC_ARMV8_CRC32C_INTRINSICS # ---------------------------- diff --git a/config/config.guess b/config/config.guess index f6d217a49f8f4..48a684601bd23 100644 --- a/config/config.guess +++ b/config/config.guess @@ -4,7 +4,7 @@ # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2024-01-01' +timestamp='2024-07-27' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -123,7 +123,7 @@ set_cc_for_build() { dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" - for driver in cc gcc c89 c99 ; do + for driver in cc gcc c17 c99 c89 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break @@ -634,7 +634,8 @@ EOF sed 's/^ //' << EOF > "$dummy.c" #include - main() + int + main () { if (!__power_pc()) exit(1); @@ -718,7 +719,8 @@ EOF #include #include - int main () + int + main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); @@ -1621,6 +1623,7 @@ cat > "$dummy.c" <&2 exit 1 ;; - kfreebsd*-gnu*- | kopensolaris*-gnu*-) + kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-) ;; vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; @@ -1864,6 +2245,8 @@ case $kernel-$os-$obj in ;; os2-emx-) ;; + rtmk-nova-) + ;; *-eabi*- | *-gnueabi*-) ;; none--*) @@ -1890,7 +2273,7 @@ case $vendor in *-riscix*) vendor=acorn ;; - *-sunos*) + *-sunos* | *-solaris*) vendor=sun ;; *-cnk* | *-aix*) diff --git a/config/llvm.m4 b/config/llvm.m4 index fa4bedd9370fc..9d6fe8199e364 100644 --- a/config/llvm.m4 +++ b/config/llvm.m4 @@ -4,7 +4,7 @@ # ----------------- # # Look for the LLVM installation, check that it's new enough, set the -# corresponding LLVM_{CFLAGS,CXXFLAGS,BINPATH} and LDFLAGS +# corresponding LLVM_{CFLAGS,CXXFLAGS,BINPATH,LIBS} # variables. Also verify that CLANG is available, to transform C # into bitcode. # @@ -55,7 +55,7 @@ AC_DEFUN([PGAC_LLVM_SUPPORT], for pgac_option in `$LLVM_CONFIG --ldflags`; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LLVM_LIBS="$LLVM_LIBS $pgac_option";; esac done diff --git a/config/prep_buildtree b/config/prep_buildtree index a0eabd3dee288..e148535ac112e 100644 --- a/config/prep_buildtree +++ b/config/prep_buildtree @@ -22,18 +22,14 @@ sourcetree=`cd $1 && pwd` buildtree=`cd ${2:-'.'} && pwd` -# We must not auto-create the subdirectories holding built documentation. -# If we did, it would interfere with installation of prebuilt docs from -# the source tree, if a VPATH build is done from a distribution tarball. -# See bug #5595. -for item in `find "$sourcetree" -type d \( \( -name CVS -prune \) -o \( -name .git -prune \) -o -print \) | grep -v "$sourcetree/doc/src/sgml/\+"`; do +for item in `find "$sourcetree"/config "$sourcetree"/contrib "$sourcetree"/doc "$sourcetree"/src -type d -print`; do subdir=`expr "$item" : "$sourcetree\(.*\)"` if test ! -d "$buildtree/$subdir"; then mkdir -p "$buildtree/$subdir" || exit 1 fi done -for item in `find "$sourcetree" -name Makefile -print -o -name GNUmakefile -print | grep -v "$sourcetree/doc/src/sgml/images/"`; do +for item in "$sourcetree"/Makefile `find "$sourcetree"/config "$sourcetree"/contrib "$sourcetree"/doc "$sourcetree"/src -name Makefile -print -o -name GNUmakefile -print`; do filename=`expr "$item" : "$sourcetree\(.*\)"` if test ! -f "${item}.in"; then if cmp "$item" "$buildtree/$filename" >/dev/null 2>&1; then : ; else diff --git a/config/programs.m4 b/config/programs.m4 index 0a07feb37ccfb..e57fe4907b844 100644 --- a/config/programs.m4 +++ b/config/programs.m4 @@ -284,11 +284,28 @@ AC_DEFUN([PGAC_CHECK_STRIP], AC_DEFUN([PGAC_CHECK_LIBCURL], [ + # libcurl compiler/linker flags are kept separate from the global flags, so + # they have to be added back temporarily for the following tests. + pgac_save_CPPFLAGS=$CPPFLAGS + pgac_save_LDFLAGS=$LDFLAGS + pgac_save_LIBS=$LIBS + + CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" + LDFLAGS="$LDFLAGS $LIBCURL_LDFLAGS" + AC_CHECK_HEADER(curl/curl.h, [], [AC_MSG_ERROR([header file is required for --with-libcurl])]) - AC_CHECK_LIB(curl, curl_multi_init, [], + + # LIBCURL_LDLIBS is determined here. Like the compiler flags, it should not + # pollute the global LIBS setting. + AC_CHECK_LIB(curl, curl_multi_init, [ + AC_DEFINE([HAVE_LIBCURL], [1], [Define to 1 if you have the `curl' library (-lcurl).]) + AC_SUBST(LIBCURL_LDLIBS, -lcurl) + ], [AC_MSG_ERROR([library 'curl' does not provide curl_multi_init])]) + LIBS="$LIBCURL_LDLIBS $LIBS" + # Check to see whether the current platform supports threadsafe Curl # initialization. AC_CACHE_CHECK([for curl_global_init thread safety], [pgac_cv__libcurl_threadsafe_init], @@ -338,4 +355,8 @@ AC_DEFUN([PGAC_CHECK_LIBCURL], *** lookups. Rebuild libcurl with the AsynchDNS feature enabled in order *** to use it with libpq.]) fi + + CPPFLAGS=$pgac_save_CPPFLAGS + LDFLAGS=$pgac_save_LDFLAGS + LIBS=$pgac_save_LIBS ])# PGAC_CHECK_LIBCURL diff --git a/configure b/configure index 3d0e701c74513..39c68161ceced 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PostgreSQL 18devel. +# Generated by GNU Autoconf 2.69 for PostgreSQL 19devel. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='18devel' -PACKAGE_STRING='PostgreSQL 18devel' +PACKAGE_VERSION='19devel' +PACKAGE_STRING='PostgreSQL 19devel' PACKAGE_BUGREPORT='pgsql-bugs@lists.postgresql.org' PACKAGE_URL='https://www.postgresql.org/' @@ -655,6 +655,7 @@ UUID_LIBS LDAP_LIBS_BE LDAP_LIBS_FE with_ssl +LIBCURL_LDLIBS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC @@ -708,6 +709,11 @@ XML2_LIBS XML2_CFLAGS XML2_CONFIG with_libxml +LIBNUMA_LIBS +LIBNUMA_CFLAGS +with_libnuma +LIBCURL_LDFLAGS +LIBCURL_CPPFLAGS LIBCURL_LIBS LIBCURL_CFLAGS with_libcurl @@ -872,6 +878,7 @@ with_liburing with_uuid with_ossp_uuid with_libcurl +with_libnuma with_libxml with_libxslt with_system_tzdata @@ -906,6 +913,8 @@ LIBURING_CFLAGS LIBURING_LIBS LIBCURL_CFLAGS LIBCURL_LIBS +LIBNUMA_CFLAGS +LIBNUMA_LIBS XML2_CONFIG XML2_CFLAGS XML2_LIBS @@ -1459,7 +1468,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PostgreSQL 18devel to adapt to many kinds of systems. +\`configure' configures PostgreSQL 19devel to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1524,7 +1533,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 18devel:";; + short | recursive ) echo "Configuration of PostgreSQL 19devel:";; esac cat <<\_ACEOF @@ -1588,6 +1597,7 @@ Optional Packages: --with-uuid=LIB build contrib/uuid-ossp using LIB (bsd,e2fs,ossp) --with-ossp-uuid obsolete spelling of --with-uuid=ossp --with-libcurl build with libcurl support + --with-libnuma build with libnuma support --with-libxml build with XML support --with-libxslt use XSLT support when building contrib/xml2 --with-system-tzdata=DIR @@ -1629,6 +1639,10 @@ Some influential environment variables: C compiler flags for LIBCURL, overriding pkg-config LIBCURL_LIBS linker flags for LIBCURL, overriding pkg-config + LIBNUMA_CFLAGS + C compiler flags for LIBNUMA, overriding pkg-config + LIBNUMA_LIBS + linker flags for LIBNUMA, overriding pkg-config XML2_CONFIG path to xml2-config utility XML2_CFLAGS C compiler flags for XML2, overriding pkg-config XML2_LIBS linker flags for XML2, overriding pkg-config @@ -1710,7 +1724,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 18devel +PostgreSQL configure 19devel generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2463,7 +2477,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PostgreSQL $as_me 18devel, which was +It was created by PostgreSQL $as_me 19devel, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4461,190 +4475,49 @@ 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : + +# Detect option needed for C11 +# loosely modeled after code in later Autoconf versions +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C11" >&5 +$as_echo_n "checking for $CC option to accept ISO C11... " >&6; } + +if ${pgac_cv_prog_cc_c11+:} false; then : $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + pgac_cv_prog_cc_c11=no +pgac_save_CC=$CC +for pgac_arg in '' '-std=gnu11' '-std=c11'; do + CC="$pgac_save_CC $pgac_arg" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -#include -#include - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" #endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} _ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg +if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv_prog_cc_c11=$pgac_arg fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test x"$pgac_cv_prog_cc_c11" != x"no" && break done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - +CC=$pgac_save_CC fi - -# Error out if the compiler does not support C99, as the codebase -# relies on that. -if test "$ac_cv_prog_cc_c99" = no; then - as_fn_error $? "C compiler \"$CC\" does not support C99" "$LINENO" 5 +if test x"$pgac_cv_prog_cc_c11" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } + as_fn_error $? "C compiler \"$CC\" does not support C11" "$LINENO" 5 +elif test x"$pgac_cv_prog_cc_c11" = x""; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_cc_c11" >&5 +$as_echo "$pgac_cv_prog_cc_c11" >&6; } + CC="$CC $pgac_cv_prog_cc_c11" fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -4906,7 +4779,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check if it's Intel's compiler, which (usually) pretends to be gcc, # but has idiosyncrasies of its own. We assume icc will define # __INTEL_COMPILER regardless of CFLAGS. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5180,7 +5052,7 @@ fi for pgac_option in `$LLVM_CONFIG --ldflags`; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LLVM_LIBS="$LLVM_LIBS $pgac_option";; esac done @@ -9042,19 +8914,27 @@ $as_echo "yes" >&6; } fi - # We only care about -I, -D, and -L switches; - # note that -lcurl will be added by PGAC_CHECK_LIBCURL below. + # Curl's flags are kept separate from the standard CPPFLAGS/LDFLAGS. We use + # them only for libpq-oauth. + LIBCURL_CPPFLAGS= + LIBCURL_LDFLAGS= + + # We only care about -I, -D, and -L switches. Note that -lcurl will be added + # to LIBCURL_LDLIBS by PGAC_CHECK_LIBCURL, below. for pgac_option in $LIBCURL_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) LIBCURL_CPPFLAGS="$LIBCURL_CPPFLAGS $pgac_option";; esac done for pgac_option in $LIBCURL_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBCURL_LDFLAGS="$LIBCURL_LDFLAGS $pgac_option";; esac done + + + # OAuth requires python for testing if test "$with_python" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** OAuth support tests require --with-python to run" >&5 @@ -9063,6 +8943,182 @@ $as_echo "$as_me: WARNING: *** OAuth support tests require --with-python to run" fi +# +# libnuma +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with libnuma support" >&5 +$as_echo_n "checking whether to build with libnuma support... " >&6; } + + + +# Check whether --with-libnuma was given. +if test "${with_libnuma+set}" = set; then : + withval=$with_libnuma; + case $withval in + yes) + +$as_echo "#define USE_LIBNUMA 1" >>confdefs.h + + ;; + no) + : + ;; + *) + as_fn_error $? "no argument expected for --with-libnuma option" "$LINENO" 5 + ;; + esac + +else + with_libnuma=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_libnuma" >&5 +$as_echo "$with_libnuma" >&6; } + + +if test "$with_libnuma" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5 +$as_echo_n "checking for numa_available in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_available+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_available (); +int +main () +{ +return numa_available (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_numa_numa_available=yes +else + ac_cv_lib_numa_numa_available=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5 +$as_echo "$ac_cv_lib_numa_numa_available" >&6; } +if test "x$ac_cv_lib_numa_numa_available" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNUMA 1 +_ACEOF + + LIBS="-lnuma $LIBS" + +else + as_fn_error $? "library 'libnuma' is required for NUMA support" "$LINENO" 5 +fi + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa" >&5 +$as_echo_n "checking for numa... " >&6; } + +if test -n "$LIBNUMA_CFLAGS"; then + pkg_cv_LIBNUMA_CFLAGS="$LIBNUMA_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"numa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "numa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNUMA_CFLAGS=`$PKG_CONFIG --cflags "numa" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBNUMA_LIBS"; then + pkg_cv_LIBNUMA_LIBS="$LIBNUMA_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"numa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "numa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNUMA_LIBS=`$PKG_CONFIG --libs "numa" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBNUMA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "numa" 2>&1` + else + LIBNUMA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "numa" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBNUMA_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (numa) were not met: + +$LIBNUMA_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBNUMA_CFLAGS +and LIBNUMA_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBNUMA_CFLAGS +and LIBNUMA_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + LIBNUMA_CFLAGS=$pkg_cv_LIBNUMA_CFLAGS + LIBNUMA_LIBS=$pkg_cv_LIBNUMA_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +fi + # # XML # @@ -9238,12 +9294,12 @@ fi # Note the user could also set XML2_CFLAGS/XML2_LIBS directly for pgac_option in $XML2_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) INCLUDES="$INCLUDES $pgac_option";; esac done for pgac_option in $XML2_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBDIRS="$LIBDIRS $pgac_option";; esac done fi @@ -9468,12 +9524,12 @@ fi # note that -llz4 will be added by AC_CHECK_LIB below. for pgac_option in $LZ4_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) INCLUDES="$INCLUDES $pgac_option";; esac done for pgac_option in $LZ4_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBDIRS="$LIBDIRS $pgac_option";; esac done fi @@ -9609,12 +9665,12 @@ fi # note that -lzstd will be added by AC_CHECK_LIB below. for pgac_option in $ZSTD_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) INCLUDES="$INCLUDES $pgac_option";; esac done for pgac_option in $ZSTD_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBDIRS="$LIBDIRS $pgac_option";; esac done fi @@ -12517,11 +12573,17 @@ fi fi -# XXX libcurl must link after libgssapi_krb5 on FreeBSD to avoid segfaults -# during gss_acquire_cred(). This is possibly related to Curl's Heimdal -# dependency on that platform? if test "$with_libcurl" = yes ; then + # libcurl compiler/linker flags are kept separate from the global flags, so + # they have to be added back temporarily for the following tests. + pgac_save_CPPFLAGS=$CPPFLAGS + pgac_save_LDFLAGS=$LDFLAGS + pgac_save_LIBS=$LIBS + + CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" + LDFLAGS="$LDFLAGS $LIBCURL_LDFLAGS" + ac_fn_c_check_header_mongrel "$LINENO" "curl/curl.h" "ac_cv_header_curl_curl_h" "$ac_includes_default" if test "x$ac_cv_header_curl_curl_h" = xyes; then : @@ -12530,6 +12592,9 @@ else fi + + # LIBCURL_LDLIBS is determined here. Like the compiler flags, it should not + # pollute the global LIBS setting. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_multi_init in -lcurl" >&5 $as_echo_n "checking for curl_multi_init in -lcurl... " >&6; } if ${ac_cv_lib_curl_curl_multi_init+:} false; then : @@ -12567,17 +12632,20 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curl_curl_multi_init" >&5 $as_echo "$ac_cv_lib_curl_curl_multi_init" >&6; } if test "x$ac_cv_lib_curl_curl_multi_init" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBCURL 1 -_ACEOF - LIBS="-lcurl $LIBS" + +$as_echo "#define HAVE_LIBCURL 1" >>confdefs.h + + LIBCURL_LDLIBS=-lcurl + else as_fn_error $? "library 'curl' does not provide curl_multi_init" "$LINENO" 5 fi + LIBS="$LIBCURL_LDLIBS $LIBS" + # Check to see whether the current platform supports threadsafe Curl # initialization. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_global_init thread safety" >&5 @@ -12681,6 +12749,10 @@ $as_echo "$pgac_cv__libcurl_async_dns" >&6; } *** to use it with libpq." "$LINENO" 5 fi + CPPFLAGS=$pgac_save_CPPFLAGS + LDFLAGS=$pgac_save_LDFLAGS + LIBS=$pgac_save_LIBS + fi if test "$with_gssapi" = yes ; then @@ -12931,7 +13003,7 @@ fi done # Function introduced in OpenSSL 1.1.1, not in LibreSSL. - for ac_func in X509_get_signature_info SSL_CTX_set_num_tickets + for ac_func in X509_get_signature_info SSL_CTX_set_num_tickets SSL_CTX_set_keylog_callback do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -13101,6 +13173,23 @@ fi fi +if test "$with_liburing" = yes; then + _LIBS="$LIBS" + LIBS="$LIBURING_LIBS $LIBS" + for ac_func in io_uring_queue_init_mem +do : + ac_fn_c_check_func "$LINENO" "io_uring_queue_init_mem" "ac_cv_func_io_uring_queue_init_mem" +if test "x$ac_cv_func_io_uring_queue_init_mem" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_IO_URING_QUEUE_INIT_MEM 1 +_ACEOF + +fi +done + + LIBS="$_LIBS" +fi + if test "$with_lz4" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LZ4_compress_default in -llz4" >&5 $as_echo_n "checking for LZ4_compress_default in -llz4... " >&6; } @@ -14329,6 +14418,13 @@ done fi +if test "$with_libcurl" = yes ; then + # Error out early if this platform can't support libpq-oauth. + if test "$ac_cv_header_sys_event_h" != yes -a "$ac_cv_header_sys_epoll_h" != yes; then + as_fn_error $? "client-side OAuth is not supported on this platform" "$LINENO" 5 + fi +fi + ## ## Types, structures, compiler characteristics ## @@ -15401,7 +15497,7 @@ fi LIBS_including_readline="$LIBS" LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` -for ac_func in backtrace_symbols copyfile copy_file_range elf_aux_info getauxval getifaddrs getpeerucred inet_pton kqueue localeconv_l mbstowcs_l memset_s posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l +for ac_func in backtrace_symbols copyfile copy_file_range elf_aux_info getauxval getifaddrs getpeerucred inet_pton kqueue localeconv_l mbstowcs_l posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -15927,6 +16023,16 @@ fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRSEP $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 @@ -15967,6 +16073,19 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRCHRNUL $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "memset_s" "ac_cv_have_decl_memset_s" "#define __STDC_WANT_LIB_EXT1__ 1 +#include +" +if test "x$ac_cv_have_decl_memset_s" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MEMSET_S $ac_have_decl +_ACEOF + # This is probably only present on macOS, but may as well check always ac_fn_c_check_decl "$LINENO" "F_FULLFSYNC" "ac_cv_have_decl_F_FULLFSYNC" "#include @@ -16099,6 +16218,19 @@ esac 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" @@ -16384,7 +16516,7 @@ fi if test "$with_icu" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$ICU_CFLAGS $CPPFLAGS" + CPPFLAGS="$CPPFLAGS $ICU_CFLAGS" # Verify we have ICU's header files ac_fn_c_check_header_mongrel "$LINENO" "unicode/ucol.h" "ac_cv_header_unicode_ucol_h" "$ac_includes_default" @@ -17291,7 +17423,7 @@ $as_echo "#define HAVE_GCC__ATOMIC_INT64_CAS 1" >>confdefs.h fi -# Check for x86 cpuid instruction +# Check for __get_cpuid() and __cpuid() { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __get_cpuid" >&5 $as_echo_n "checking for __get_cpuid... " >&6; } if ${pgac_cv__get_cpuid+:} false; then : @@ -17324,77 +17456,79 @@ if test x"$pgac_cv__get_cpuid" = x"yes"; then $as_echo "#define HAVE__GET_CPUID 1" >>confdefs.h -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __get_cpuid_count" >&5 -$as_echo_n "checking for __get_cpuid_count... " >&6; } -if ${pgac_cv__get_cpuid_count+:} false; then : +else + # __cpuid() + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cpuid" >&5 +$as_echo_n "checking for __cpuid... " >&6; } +if ${pgac_cv__cpuid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include int main () { unsigned int exx[4] = {0, 0, 0, 0}; - __get_cpuid_count(7, 0, &exx[0], &exx[1], &exx[2], &exx[3]); + __cpuid(exx, 1); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - pgac_cv__get_cpuid_count="yes" + pgac_cv__cpuid="yes" else - pgac_cv__get_cpuid_count="no" + pgac_cv__cpuid="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__get_cpuid_count" >&5 -$as_echo "$pgac_cv__get_cpuid_count" >&6; } -if test x"$pgac_cv__get_cpuid_count" = x"yes"; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__cpuid" >&5 +$as_echo "$pgac_cv__cpuid" >&6; } + if test x"$pgac_cv__cpuid" = x"yes"; then -$as_echo "#define HAVE__GET_CPUID_COUNT 1" >>confdefs.h +$as_echo "#define HAVE__CPUID 1" >>confdefs.h + fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cpuid" >&5 -$as_echo_n "checking for __cpuid... " >&6; } -if ${pgac_cv__cpuid+:} false; then : +# Check for __get_cpuid_count() and __cpuidex() in a similar fashion. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __get_cpuid_count" >&5 +$as_echo_n "checking for __get_cpuid_count... " >&6; } +if ${pgac_cv__get_cpuid_count+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include int main () { unsigned int exx[4] = {0, 0, 0, 0}; - __get_cpuid(exx[0], 1); + __get_cpuid_count(7, 0, &exx[0], &exx[1], &exx[2], &exx[3]); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - pgac_cv__cpuid="yes" + pgac_cv__get_cpuid_count="yes" else - pgac_cv__cpuid="no" + pgac_cv__get_cpuid_count="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__cpuid" >&5 -$as_echo "$pgac_cv__cpuid" >&6; } -if test x"$pgac_cv__cpuid" = x"yes"; then - -$as_echo "#define HAVE__CPUID 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__get_cpuid_count" >&5 +$as_echo "$pgac_cv__get_cpuid_count" >&6; } +if test x"$pgac_cv__get_cpuid_count" = x"yes"; then -fi +$as_echo "#define HAVE__GET_CPUID_COUNT 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cpuidex" >&5 +else + # __cpuidex() + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cpuidex" >&5 $as_echo_n "checking for __cpuidex... " >&6; } if ${pgac_cv__cpuidex+:} false; then : $as_echo_n "(cached) " >&6 @@ -17406,7 +17540,7 @@ int main () { unsigned int exx[4] = {0, 0, 0, 0}; - __get_cpuidex(exx[0], 7, 0); + __cpuidex(exx, 7, 0); ; return 0; @@ -17422,10 +17556,11 @@ rm -f core conftest.err conftest.$ac_objext \ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__cpuidex" >&5 $as_echo "$pgac_cv__cpuidex" >&6; } -if test x"$pgac_cv__cpuidex" = x"yes"; then + if test x"$pgac_cv__cpuidex" = x"yes"; then $as_echo "#define HAVE__CPUIDEX 1" >>confdefs.h + fi fi # Check for XSAVE intrinsics @@ -17841,17 +17976,21 @@ fi # Select CRC-32C implementation. # -# If we are targeting a processor that has Intel SSE 4.2 instructions, we can -# use the special CRC instructions for calculating CRC-32C. If we're not -# targeting such a processor, but we can nevertheless produce code that uses -# the SSE intrinsics, compile both implementations and select which one to use -# at runtime, depending on whether SSE 4.2 is supported by the processor we're -# running on. +# There are three methods of calculating CRC, in order of increasing +# performance: +# +# 1. The fallback using a lookup table, called slicing-by-8 +# 2. CRC-32C instructions (found in e.g. Intel SSE 4.2 and ARMv8 CRC Extension) +# 3. Algorithms using carryless multiplication instructions +# (e.g. Intel PCLMUL and Arm PMULL) +# +# If we can produce code (via function attributes or additional compiler +# flags) that uses #2 (and possibly #3), we compile all implementations +# and select which one to use at runtime, depending on what is supported +# by the processor we're running on. # -# Similarly, if we are targeting an ARM processor that has the CRC -# instructions that are part of the ARMv8 CRC Extension, use them. And if -# we're not targeting such a processor, but can nevertheless produce code that -# uses the CRC instructions, compile both, and select at runtime. +# If we are targeting a processor that has #2, we can use that without +# runtime selection. # # Note that we do not use __attribute__((target("..."))) for the ARM CRC # instructions because until clang 16, using the ARM intrinsics still requires @@ -17902,7 +18041,7 @@ if test x"$USE_SSE42_CRC32C" = x"1"; then $as_echo "#define USE_SSE42_CRC32C 1" >>confdefs.h - PG_CRC32C_OBJS="pg_crc32c_sse42.o" + PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sse42_choose.o" { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE 4.2" >&5 $as_echo "SSE 4.2" >&6; } else @@ -17951,6 +18090,72 @@ $as_echo "slicing-by-8" >&6; } fi +# Check for carryless multiplication intrinsics to do vectorized CRC calculations. +# +if test x"$host_cpu" = x"x86_64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mm512_clmulepi64_epi128" >&5 +$as_echo_n "checking for _mm512_clmulepi64_epi128... " >&6; } +if ${pgac_cv_avx512_pclmul_intrinsics+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + __m512i x; + __m512i y; + + #if defined(__has_attribute) && __has_attribute (target) + __attribute__((target("vpclmulqdq,avx512vl"))) + #endif + static int avx512_pclmul_test(void) + { + __m128i z; + + x = _mm512_xor_si512(_mm512_zextsi128_si512(_mm_cvtsi32_si128(0)), x); + y = _mm512_clmulepi64_epi128(x, y, 0); + z = _mm_ternarylogic_epi64( + _mm512_castsi512_si128(y), + _mm512_extracti32x4_epi32(y, 1), + _mm512_extracti32x4_epi32(y, 2), + 0x96); + return _mm_crc32_u64(0, _mm_extract_epi64(z, 0)); + } +int +main () +{ +return avx512_pclmul_test(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv_avx512_pclmul_intrinsics=yes +else + pgac_cv_avx512_pclmul_intrinsics=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_avx512_pclmul_intrinsics" >&5 +$as_echo "$pgac_cv_avx512_pclmul_intrinsics" >&6; } +if test x"$pgac_cv_avx512_pclmul_intrinsics" = x"yes"; then + pgac_avx512_pclmul_intrinsics=yes +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for vectorized CRC-32C" >&5 +$as_echo_n "checking for vectorized CRC-32C... " >&6; } +if test x"$pgac_avx512_pclmul_intrinsics" = x"yes"; then + +$as_echo "#define USE_AVX512_CRC32C_WITH_RUNTIME_CHECK 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: AVX-512 with runtime check" >&5 +$as_echo "AVX-512 with runtime check" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi # Select semaphore implementation type. if test "$PORTNAME" != "win32"; then @@ -18532,7 +18737,7 @@ Use --without-tcl to disable building PL/Tcl." "$LINENO" 5 fi # now that we have TCL_INCLUDE_SPEC, we can check for ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" + CPPFLAGS="$CPPFLAGS $TCL_INCLUDE_SPEC" ac_fn_c_check_header_mongrel "$LINENO" "tcl.h" "ac_cv_header_tcl_h" "$ac_includes_default" if test "x$ac_cv_header_tcl_h" = xyes; then : @@ -18601,7 +18806,7 @@ fi # check for if test "$with_python" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$python_includespec $CPPFLAGS" + CPPFLAGS="$CPPFLAGS $python_includespec" ac_fn_c_check_header_mongrel "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes; then : @@ -19742,7 +19947,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PostgreSQL $as_me 18devel, which was +This file was extended by PostgreSQL $as_me 19devel, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19813,7 +20018,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -PostgreSQL config.status 18devel +PostgreSQL config.status 19devel configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 47a287926bc5d..066e3976c0aac 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Read the Autoconf manual for details. dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [18devel], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) +AC_INIT([PostgreSQL], [19devel], [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 @@ -364,14 +364,33 @@ pgac_cc_list="gcc cc" pgac_cxx_list="g++ c++" AC_PROG_CC([$pgac_cc_list]) -AC_PROG_CC_C99() -# Error out if the compiler does not support C99, as the codebase -# relies on that. -if test "$ac_cv_prog_cc_c99" = no; then - AC_MSG_ERROR([C compiler "$CC" does not support C99]) +# Detect option needed for C11 +# loosely modeled after code in later Autoconf versions +AC_MSG_CHECKING([for $CC option to accept ISO C11]) +AC_CACHE_VAL([pgac_cv_prog_cc_c11], +[pgac_cv_prog_cc_c11=no +pgac_save_CC=$CC +for pgac_arg in '' '-std=gnu11' '-std=c11'; do + CC="$pgac_save_CC $pgac_arg" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif]])], [[pgac_cv_prog_cc_c11=$pgac_arg]]) + test x"$pgac_cv_prog_cc_c11" != x"no" && break +done +CC=$pgac_save_CC]) + +if test x"$pgac_cv_prog_cc_c11" = x"no"; then + AC_MSG_RESULT([unsupported]) + AC_MSG_ERROR([C compiler "$CC" does not support C11]) +elif test x"$pgac_cv_prog_cc_c11" = x""; then + AC_MSG_RESULT([none needed]) +else + AC_MSG_RESULT([$pgac_cv_prog_cc_c11]) + CC="$CC $pgac_cv_prog_cc_c11" fi + AC_PROG_CXX([$pgac_cxx_list]) # Check if it's Intel's compiler, which (usually) pretends to be gcc, @@ -1033,19 +1052,27 @@ if test "$with_libcurl" = yes ; then # to explicitly set TLS 1.3 ciphersuites). PKG_CHECK_MODULES(LIBCURL, [libcurl >= 7.61.0]) - # We only care about -I, -D, and -L switches; - # note that -lcurl will be added by PGAC_CHECK_LIBCURL below. + # Curl's flags are kept separate from the standard CPPFLAGS/LDFLAGS. We use + # them only for libpq-oauth. + LIBCURL_CPPFLAGS= + LIBCURL_LDFLAGS= + + # We only care about -I, -D, and -L switches. Note that -lcurl will be added + # to LIBCURL_LDLIBS by PGAC_CHECK_LIBCURL, below. for pgac_option in $LIBCURL_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) LIBCURL_CPPFLAGS="$LIBCURL_CPPFLAGS $pgac_option";; esac done for pgac_option in $LIBCURL_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBCURL_LDFLAGS="$LIBCURL_LDFLAGS $pgac_option";; esac done + AC_SUBST(LIBCURL_CPPFLAGS) + AC_SUBST(LIBCURL_LDFLAGS) + # OAuth requires python for testing if test "$with_python" != yes; then AC_MSG_WARN([*** OAuth support tests require --with-python to run]) @@ -1053,6 +1080,20 @@ if test "$with_libcurl" = yes ; then fi +# +# libnuma +# +AC_MSG_CHECKING([whether to build with libnuma support]) +PGAC_ARG_BOOL(with, libnuma, no, [build with libnuma support], + [AC_DEFINE([USE_LIBNUMA], 1, [Define to build with NUMA support. (--with-libnuma)])]) +AC_MSG_RESULT([$with_libnuma]) +AC_SUBST(with_libnuma) + +if test "$with_libnuma" = yes ; then + AC_CHECK_LIB(numa, numa_available, [], [AC_MSG_ERROR([library 'libnuma' is required for NUMA support])]) + PKG_CHECK_MODULES(LIBNUMA, numa) +fi + # # XML # @@ -1081,12 +1122,12 @@ if test "$with_libxml" = yes ; then # Note the user could also set XML2_CFLAGS/XML2_LIBS directly for pgac_option in $XML2_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) INCLUDES="$INCLUDES $pgac_option";; esac done for pgac_option in $XML2_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBDIRS="$LIBDIRS $pgac_option";; esac done fi @@ -1130,12 +1171,12 @@ if test "$with_lz4" = yes; then # note that -llz4 will be added by AC_CHECK_LIB below. for pgac_option in $LZ4_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) INCLUDES="$INCLUDES $pgac_option";; esac done for pgac_option in $LZ4_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBDIRS="$LIBDIRS $pgac_option";; esac done fi @@ -1155,12 +1196,12 @@ if test "$with_zstd" = yes; then # note that -lzstd will be added by AC_CHECK_LIB below. for pgac_option in $ZSTD_CFLAGS; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) INCLUDES="$INCLUDES $pgac_option";; esac done for pgac_option in $ZSTD_LIBS; do case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; + -L*) LIBDIRS="$LIBDIRS $pgac_option";; esac done fi @@ -1340,9 +1381,6 @@ failure. It is possible the compiler isn't looking in the proper directory. Use --without-zlib to disable zlib support.])]) fi -# XXX libcurl must link after libgssapi_krb5 on FreeBSD to avoid segfaults -# during gss_acquire_cred(). This is possibly related to Curl's Heimdal -# dependency on that platform? if test "$with_libcurl" = yes ; then PGAC_CHECK_LIBCURL fi @@ -1382,7 +1420,7 @@ if test "$with_ssl" = openssl ; then # Function introduced in OpenSSL 1.0.2, not in LibreSSL. AC_CHECK_FUNCS([SSL_CTX_set_cert_cb]) # Function introduced in OpenSSL 1.1.1, not in LibreSSL. - AC_CHECK_FUNCS([X509_get_signature_info SSL_CTX_set_num_tickets]) + AC_CHECK_FUNCS([X509_get_signature_info SSL_CTX_set_num_tickets SSL_CTX_set_keylog_callback]) AC_DEFINE([USE_OPENSSL], 1, [Define to 1 to build with OpenSSL support. (--with-ssl=openssl)]) elif test "$with_ssl" != no ; then AC_MSG_ERROR([--with-ssl must specify openssl]) @@ -1401,6 +1439,13 @@ if test "$with_libxslt" = yes ; then AC_CHECK_LIB(xslt, xsltCleanupGlobals, [], [AC_MSG_ERROR([library 'xslt' is required for XSLT support])]) fi +if test "$with_liburing" = yes; then + _LIBS="$LIBS" + LIBS="$LIBURING_LIBS $LIBS" + AC_CHECK_FUNCS([io_uring_queue_init_mem]) + LIBS="$_LIBS" +fi + if test "$with_lz4" = yes ; then AC_CHECK_LIB(lz4, LZ4_compress_default, [], [AC_MSG_ERROR([library 'lz4' is required for LZ4 support])]) fi @@ -1640,6 +1685,13 @@ if test "$PORTNAME" = "win32" ; then AC_CHECK_HEADERS(crtdefs.h) fi +if test "$with_libcurl" = yes ; then + # Error out early if this platform can't support libpq-oauth. + if test "$ac_cv_header_sys_event_h" != yes -a "$ac_cv_header_sys_epoll_h" != yes; then + AC_MSG_ERROR([client-side OAuth is not supported on this platform]) + fi +fi + ## ## Types, structures, compiler characteristics ## @@ -1766,7 +1818,6 @@ AC_CHECK_FUNCS(m4_normalize([ kqueue localeconv_l mbstowcs_l - memset_s posix_fallocate ppoll pthread_is_threaded_np @@ -1805,13 +1856,15 @@ AC_CHECK_DECLS(posix_fadvise, [], [], [#include ]) ]) # fi AC_CHECK_DECLS(fdatasync, [], [], [#include ]) -AC_CHECK_DECLS([strlcat, strlcpy, strnlen, strsep]) +AC_CHECK_DECLS([strlcat, strlcpy, strnlen, strsep, timingsafe_bcmp]) # We can't use AC_CHECK_FUNCS to detect these functions, because it # won't handle deployment target restrictions on macOS AC_CHECK_DECLS([preadv], [], [], [#include ]) AC_CHECK_DECLS([pwritev], [], [], [#include ]) AC_CHECK_DECLS([strchrnul], [], [], [#include ]) +AC_CHECK_DECLS([memset_s], [], [], [#define __STDC_WANT_LIB_EXT1__ 1 +#include ]) # This is probably only present on macOS, but may as well check always AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include ]) @@ -1826,6 +1879,7 @@ AC_REPLACE_FUNCS(m4_normalize([ strlcpy strnlen strsep + timingsafe_bcmp ])) AC_REPLACE_FUNCS(pthread_barrier_wait) @@ -1909,7 +1963,7 @@ fi if test "$with_icu" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$ICU_CFLAGS $CPPFLAGS" + CPPFLAGS="$CPPFLAGS $ICU_CFLAGS" # Verify we have ICU's header files AC_CHECK_HEADER(unicode/ucol.h, [], @@ -2009,7 +2063,7 @@ PGAC_HAVE_GCC__ATOMIC_INT32_CAS PGAC_HAVE_GCC__ATOMIC_INT64_CAS -# Check for x86 cpuid instruction +# Check for __get_cpuid() and __cpuid() AC_CACHE_CHECK([for __get_cpuid], [pgac_cv__get_cpuid], [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [[unsigned int exx[4] = {0, 0, 0, 0}; @@ -2019,8 +2073,21 @@ AC_CACHE_CHECK([for __get_cpuid], [pgac_cv__get_cpuid], [pgac_cv__get_cpuid="no"])]) if test x"$pgac_cv__get_cpuid" = x"yes"; then AC_DEFINE(HAVE__GET_CPUID, 1, [Define to 1 if you have __get_cpuid.]) +else + # __cpuid() + AC_CACHE_CHECK([for __cpuid], [pgac_cv__cpuid], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [[unsigned int exx[4] = {0, 0, 0, 0}; + __cpuid(exx, 1); + ]])], + [pgac_cv__cpuid="yes"], + [pgac_cv__cpuid="no"])]) + if test x"$pgac_cv__cpuid" = x"yes"; then + AC_DEFINE(HAVE__CPUID, 1, [Define to 1 if you have __cpuid.]) + fi fi +# Check for __get_cpuid_count() and __cpuidex() in a similar fashion. AC_CACHE_CHECK([for __get_cpuid_count], [pgac_cv__get_cpuid_count], [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [[unsigned int exx[4] = {0, 0, 0, 0}; @@ -2030,28 +2097,18 @@ AC_CACHE_CHECK([for __get_cpuid_count], [pgac_cv__get_cpuid_count], [pgac_cv__get_cpuid_count="no"])]) if test x"$pgac_cv__get_cpuid_count" = x"yes"; then AC_DEFINE(HAVE__GET_CPUID_COUNT, 1, [Define to 1 if you have __get_cpuid_count.]) -fi - -AC_CACHE_CHECK([for __cpuid], [pgac_cv__cpuid], -[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], - [[unsigned int exx[4] = {0, 0, 0, 0}; - __get_cpuid(exx[0], 1); - ]])], - [pgac_cv__cpuid="yes"], - [pgac_cv__cpuid="no"])]) -if test x"$pgac_cv__cpuid" = x"yes"; then - AC_DEFINE(HAVE__CPUID, 1, [Define to 1 if you have __cpuid.]) -fi - -AC_CACHE_CHECK([for __cpuidex], [pgac_cv__cpuidex], -[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], - [[unsigned int exx[4] = {0, 0, 0, 0}; - __get_cpuidex(exx[0], 7, 0); - ]])], - [pgac_cv__cpuidex="yes"], - [pgac_cv__cpuidex="no"])]) -if test x"$pgac_cv__cpuidex" = x"yes"; then - AC_DEFINE(HAVE__CPUIDEX, 1, [Define to 1 if you have __cpuidex.]) +else + # __cpuidex() + AC_CACHE_CHECK([for __cpuidex], [pgac_cv__cpuidex], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [[unsigned int exx[4] = {0, 0, 0, 0}; + __cpuidex(exx, 7, 0); + ]])], + [pgac_cv__cpuidex="yes"], + [pgac_cv__cpuidex="no"])]) + if test x"$pgac_cv__cpuidex" = x"yes"; then + AC_DEFINE(HAVE__CPUIDEX, 1, [Define to 1 if you have __cpuidex.]) + fi fi # Check for XSAVE intrinsics @@ -2115,17 +2172,21 @@ AC_SUBST(CFLAGS_CRC) # Select CRC-32C implementation. # -# If we are targeting a processor that has Intel SSE 4.2 instructions, we can -# use the special CRC instructions for calculating CRC-32C. If we're not -# targeting such a processor, but we can nevertheless produce code that uses -# the SSE intrinsics, compile both implementations and select which one to use -# at runtime, depending on whether SSE 4.2 is supported by the processor we're -# running on. +# There are three methods of calculating CRC, in order of increasing +# performance: +# +# 1. The fallback using a lookup table, called slicing-by-8 +# 2. CRC-32C instructions (found in e.g. Intel SSE 4.2 and ARMv8 CRC Extension) +# 3. Algorithms using carryless multiplication instructions +# (e.g. Intel PCLMUL and Arm PMULL) # -# Similarly, if we are targeting an ARM processor that has the CRC -# instructions that are part of the ARMv8 CRC Extension, use them. And if -# we're not targeting such a processor, but can nevertheless produce code that -# uses the CRC instructions, compile both, and select at runtime. +# If we can produce code (via function attributes or additional compiler +# flags) that uses #2 (and possibly #3), we compile all implementations +# and select which one to use at runtime, depending on what is supported +# by the processor we're running on. +# +# If we are targeting a processor that has #2, we can use that without +# runtime selection. # # Note that we do not use __attribute__((target("..."))) for the ARM CRC # instructions because until clang 16, using the ARM intrinsics still requires @@ -2173,7 +2234,7 @@ fi AC_MSG_CHECKING([which CRC-32C implementation to use]) if test x"$USE_SSE42_CRC32C" = x"1"; then AC_DEFINE(USE_SSE42_CRC32C, 1, [Define to 1 use Intel SSE 4.2 CRC instructions.]) - PG_CRC32C_OBJS="pg_crc32c_sse42.o" + PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sse42_choose.o" AC_MSG_RESULT(SSE 4.2) else if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then @@ -2206,6 +2267,19 @@ else fi AC_SUBST(PG_CRC32C_OBJS) +# Check for carryless multiplication intrinsics to do vectorized CRC calculations. +# +if test x"$host_cpu" = x"x86_64"; then + PGAC_AVX512_PCLMUL_INTRINSICS() +fi + +AC_MSG_CHECKING([for vectorized CRC-32C]) +if test x"$pgac_avx512_pclmul_intrinsics" = x"yes"; then + AC_DEFINE(USE_AVX512_CRC32C_WITH_RUNTIME_CHECK, 1, [Define to 1 to use AVX-512 CRC algorithms with a runtime check.]) + AC_MSG_RESULT(AVX-512 with runtime check) +else + AC_MSG_RESULT(none) +fi # Select semaphore implementation type. if test "$PORTNAME" != "win32"; then @@ -2292,7 +2366,7 @@ Use --without-tcl to disable building PL/Tcl.]) fi # now that we have TCL_INCLUDE_SPEC, we can check for ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" + CPPFLAGS="$CPPFLAGS $TCL_INCLUDE_SPEC" AC_CHECK_HEADER(tcl.h, [], [AC_MSG_ERROR([header file is required for Tcl])]) CPPFLAGS=$ac_save_CPPFLAGS fi @@ -2329,7 +2403,7 @@ fi # check for if test "$with_python" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$python_includespec $CPPFLAGS" + CPPFLAGS="$CPPFLAGS $python_includespec" AC_CHECK_HEADER(Python.h, [], [AC_MSG_ERROR([header file is required for Python])]) CPPFLAGS=$ac_save_CPPFLAGS fi diff --git a/contrib/amcheck/expected/check_btree.out b/contrib/amcheck/expected/check_btree.out index c6f4b16c55615..6558f2c5a4ff4 100644 --- a/contrib/amcheck/expected/check_btree.out +++ b/contrib/amcheck/expected/check_btree.out @@ -60,6 +60,14 @@ SELECT bt_index_parent_check('bttest_a_brin_idx'); ERROR: expected "btree" index as targets for verification DETAIL: Relation "bttest_a_brin_idx" is a brin index. ROLLBACK; +-- verify partitioned indexes are rejected (error) +BEGIN; +CREATE TABLE bttest_partitioned (a int, b int) PARTITION BY list (a); +CREATE INDEX bttest_btree_partitioned_idx ON bttest_partitioned USING btree (b); +SELECT bt_index_parent_check('bttest_btree_partitioned_idx'); +ERROR: expected index as targets for verification +DETAIL: This operation is not supported for partitioned indexes. +ROLLBACK; -- normal check outside of xact SELECT bt_index_check('bttest_a_idx'); bt_index_check diff --git a/contrib/amcheck/expected/check_gin.out b/contrib/amcheck/expected/check_gin.out index b4f0b110747c3..8dd01ced8d15f 100644 --- a/contrib/amcheck/expected/check_gin.out +++ b/contrib/amcheck/expected/check_gin.out @@ -76,3 +76,15 @@ SELECT gin_index_check('gin_check_jsonb_idx'); -- cleanup DROP TABLE gin_check_jsonb; +-- Test GIN multicolumn index +CREATE TABLE "gin_check_multicolumn"(a text[], b text[]); +INSERT INTO gin_check_multicolumn (a,b) values ('{a,c,e}','{b,d,f}'); +CREATE INDEX "gin_check_multicolumn_idx" on gin_check_multicolumn USING GIN(a,b); +SELECT gin_index_check('gin_check_multicolumn_idx'); + gin_index_check +----------------- + +(1 row) + +-- cleanup +DROP TABLE gin_check_multicolumn; diff --git a/contrib/amcheck/meson.build b/contrib/amcheck/meson.build index b33e8c9b062fe..1f0c347ed5413 100644 --- a/contrib/amcheck/meson.build +++ b/contrib/amcheck/meson.build @@ -49,6 +49,7 @@ tests += { 't/003_cic_2pc.pl', 't/004_verify_nbtree_unique.pl', 't/005_pitr.pl', + 't/006_verify_gin.pl', ], }, } diff --git a/contrib/amcheck/sql/check_btree.sql b/contrib/amcheck/sql/check_btree.sql index 0793dbfeebd82..171f7f691ec60 100644 --- a/contrib/amcheck/sql/check_btree.sql +++ b/contrib/amcheck/sql/check_btree.sql @@ -52,6 +52,13 @@ CREATE INDEX bttest_a_brin_idx ON bttest_a USING brin(id); SELECT bt_index_parent_check('bttest_a_brin_idx'); ROLLBACK; +-- verify partitioned indexes are rejected (error) +BEGIN; +CREATE TABLE bttest_partitioned (a int, b int) PARTITION BY list (a); +CREATE INDEX bttest_btree_partitioned_idx ON bttest_partitioned USING btree (b); +SELECT bt_index_parent_check('bttest_btree_partitioned_idx'); +ROLLBACK; + -- normal check outside of xact SELECT bt_index_check('bttest_a_idx'); -- more expansive tests diff --git a/contrib/amcheck/sql/check_gin.sql b/contrib/amcheck/sql/check_gin.sql index 66f42c34311db..11caed3d6a81b 100644 --- a/contrib/amcheck/sql/check_gin.sql +++ b/contrib/amcheck/sql/check_gin.sql @@ -50,3 +50,13 @@ SELECT gin_index_check('gin_check_jsonb_idx'); -- cleanup DROP TABLE gin_check_jsonb; + +-- Test GIN multicolumn index +CREATE TABLE "gin_check_multicolumn"(a text[], b text[]); +INSERT INTO gin_check_multicolumn (a,b) values ('{a,c,e}','{b,d,f}'); +CREATE INDEX "gin_check_multicolumn_idx" on gin_check_multicolumn USING GIN(a,b); + +SELECT gin_index_check('gin_check_multicolumn_idx'); + +-- cleanup +DROP TABLE gin_check_multicolumn; diff --git a/contrib/amcheck/t/006_verify_gin.pl b/contrib/amcheck/t/006_verify_gin.pl new file mode 100644 index 0000000000000..5be0bee32183f --- /dev/null +++ b/contrib/amcheck/t/006_verify_gin.pl @@ -0,0 +1,293 @@ + +# Copyright (c) 2021-2025, PostgreSQL Global Development Group + +use strict; +use warnings FATAL => 'all'; + +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; + +use Test::More; + +my $node; +my $blksize; + +# to get the split fast, we want tuples to be as large as possible, but the same time we don't want them to be toasted. +my $filler_size = 1900; + +# +# Test set-up +# +$node = PostgreSQL::Test::Cluster->new('test'); +$node->init(no_data_checksums => 1); +$node->append_conf('postgresql.conf', 'autovacuum=off'); +$node->start; +$blksize = int($node->safe_psql('postgres', 'SHOW block_size;')); +$node->safe_psql('postgres', q(CREATE EXTENSION amcheck)); +$node->safe_psql( + 'postgres', q( + CREATE OR REPLACE FUNCTION random_string( INT ) RETURNS text AS $$ + SELECT string_agg(substring('0123456789abcdefghijklmnopqrstuvwxyz', ceil(random() * 36)::integer, 1), '') from generate_series(1, $1); + $$ LANGUAGE SQL;)); + +# Tests +invalid_entry_order_leaf_page_test(); +invalid_entry_order_inner_page_test(); +invalid_entry_columns_order_test(); +inconsistent_with_parent_key__parent_key_corrupted_test(); +inconsistent_with_parent_key__child_key_corrupted_test(); +inconsistent_with_parent_key__parent_key_corrupted_posting_tree_test(); + +sub invalid_entry_order_leaf_page_test +{ + my $relname = "test"; + my $indexname = "test_gin_idx"; + + $node->safe_psql( + 'postgres', qq( + DROP TABLE IF EXISTS $relname; + CREATE TABLE $relname (a text[]); + INSERT INTO $relname (a) VALUES ('{aaaaa,bbbbb}'); + CREATE INDEX $indexname ON $relname USING gin (a); + )); + my $relpath = relation_filepath($indexname); + + $node->stop; + + my $blkno = 1; # root + + # produce wrong order by replacing aaaaa with ccccc + string_replace_block($relpath, 'aaaaa', 'ccccc', $blkno); + + $node->start; + + my ($result, $stdout, $stderr) = + $node->psql('postgres', qq(SELECT gin_index_check('$indexname'))); + my $expected = + "index \"$indexname\" has wrong tuple order on entry tree page, block 1, offset 2, rightlink 4294967295"; + like($stderr, qr/$expected/); +} + +sub invalid_entry_order_inner_page_test +{ + my $relname = "test"; + my $indexname = "test_gin_idx"; + + # to break the order in the inner page we need at least 3 items (rightmost key in the inner level is not checked for the order) + # so fill table until we have 2 splits + $node->safe_psql( + 'postgres', qq( + DROP TABLE IF EXISTS $relname; + CREATE TABLE $relname (a text[]); + INSERT INTO $relname (a) VALUES (('{' || 'pppppppppp' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'qqqqqqqqqq' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'rrrrrrrrrr' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'ssssssssss' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'tttttttttt' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'uuuuuuuuuu' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'vvvvvvvvvv' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'wwwwwwwwww' || random_string($filler_size) ||'}')::text[]); + CREATE INDEX $indexname ON $relname USING gin (a); + )); + my $relpath = relation_filepath($indexname); + + $node->stop; + + my $blkno = 1; # root + + # we have rrrrrrrrr... and tttttttttt... as keys in the root, so produce wrong order by replacing rrrrrrrrrr.... + string_replace_block($relpath, 'rrrrrrrrrr', 'zzzzzzzzzz', $blkno); + + $node->start; + + my ($result, $stdout, $stderr) = + $node->psql('postgres', qq(SELECT gin_index_check('$indexname'))); + my $expected = + "index \"$indexname\" has wrong tuple order on entry tree page, block 1, offset 2, rightlink 4294967295"; + like($stderr, qr/$expected/); +} + +sub invalid_entry_columns_order_test +{ + my $relname = "test"; + my $indexname = "test_gin_idx"; + + $node->safe_psql( + 'postgres', qq( + DROP TABLE IF EXISTS $relname; + CREATE TABLE $relname (a text[],b text[]); + INSERT INTO $relname (a,b) VALUES ('{aaa}','{bbb}'); + CREATE INDEX $indexname ON $relname USING gin (a,b); + )); + my $relpath = relation_filepath($indexname); + + $node->stop; + + my $blkno = 1; # root + + # mess column numbers + # root items order before: (1,aaa), (2,bbb) + # root items order after: (2,aaa), (1,bbb) + my $attrno_1 = pack('s', 1); + my $attrno_2 = pack('s', 2); + + my $find = qr/($attrno_1)(.)(aaa)/s; + my $replace = $attrno_2 . '$2$3'; + string_replace_block($relpath, $find, $replace, $blkno); + + $find = qr/($attrno_2)(.)(bbb)/s; + $replace = $attrno_1 . '$2$3'; + string_replace_block($relpath, $find, $replace, $blkno); + + $node->start; + + my ($result, $stdout, $stderr) = + $node->psql('postgres', qq(SELECT gin_index_check('$indexname'))); + my $expected = + "index \"$indexname\" has wrong tuple order on entry tree page, block 1, offset 2, rightlink 4294967295"; + like($stderr, qr/$expected/); +} + +sub inconsistent_with_parent_key__parent_key_corrupted_test +{ + my $relname = "test"; + my $indexname = "test_gin_idx"; + + # fill the table until we have a split + $node->safe_psql( + 'postgres', qq( + DROP TABLE IF EXISTS $relname; + CREATE TABLE $relname (a text[]); + INSERT INTO $relname (a) VALUES (('{' || 'llllllllll' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'mmmmmmmmmm' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'nnnnnnnnnn' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'xxxxxxxxxx' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'yyyyyyyyyy' || random_string($filler_size) ||'}')::text[]); + CREATE INDEX $indexname ON $relname USING gin (a); + )); + my $relpath = relation_filepath($indexname); + + $node->stop; + + my $blkno = 1; # root + + # we have nnnnnnnnnn... as parent key in the root, so replace it with something smaller then child's keys + string_replace_block($relpath, 'nnnnnnnnnn', 'aaaaaaaaaa', $blkno); + + $node->start; + + my ($result, $stdout, $stderr) = + $node->psql('postgres', qq(SELECT gin_index_check('$indexname'))); + my $expected = + "index \"$indexname\" has inconsistent records on page 3 offset 3"; + like($stderr, qr/$expected/); +} + +sub inconsistent_with_parent_key__child_key_corrupted_test +{ + my $relname = "test"; + my $indexname = "test_gin_idx"; + + # fill the table until we have a split + $node->safe_psql( + 'postgres', qq( + DROP TABLE IF EXISTS $relname; + CREATE TABLE $relname (a text[]); + INSERT INTO $relname (a) VALUES (('{' || 'llllllllll' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'mmmmmmmmmm' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'nnnnnnnnnn' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'xxxxxxxxxx' || random_string($filler_size) ||'}')::text[]); + INSERT INTO $relname (a) VALUES (('{' || 'yyyyyyyyyy' || random_string($filler_size) ||'}')::text[]); + CREATE INDEX $indexname ON $relname USING gin (a); + )); + my $relpath = relation_filepath($indexname); + + $node->stop; + + my $blkno = 3; # leaf + + # we have nnnnnnnnnn... as parent key in the root, so replace child key with something bigger + string_replace_block($relpath, 'nnnnnnnnnn', 'pppppppppp', $blkno); + + $node->start; + + my ($result, $stdout, $stderr) = + $node->psql('postgres', qq(SELECT gin_index_check('$indexname'))); + my $expected = + "index \"$indexname\" has inconsistent records on page 3 offset 3"; + like($stderr, qr/$expected/); +} + +sub inconsistent_with_parent_key__parent_key_corrupted_posting_tree_test +{ + my $relname = "test"; + my $indexname = "test_gin_idx"; + + $node->safe_psql( + 'postgres', qq( + DROP TABLE IF EXISTS $relname; + CREATE TABLE $relname (a text[]); + INSERT INTO $relname (a) select ('{aaaaa}') from generate_series(1,10000); + CREATE INDEX $indexname ON $relname USING gin (a); + )); + my $relpath = relation_filepath($indexname); + + $node->stop; + + my $blkno = 2; # posting tree root + + # we have a posting tree for 'aaaaa' key with the root at 2nd block + # and two leaf pages 3 and 4. replace 4th page's high key with (1,1) + # so that there are tid's in leaf page that are larger then the new high key. + my $find = pack('S*', 0, 4, 0) . '....'; + my $replace = pack('S*', 0, 4, 0, 1, 1); + string_replace_block($relpath, $find, $replace, $blkno); + + $node->start; + + my ($result, $stdout, $stderr) = + $node->psql('postgres', qq(SELECT gin_index_check('$indexname'))); + my $expected = + "index \"$indexname\": tid exceeds parent's high key in postingTree leaf on block 4"; + like($stderr, qr/$expected/); +} + + +# Returns the filesystem path for the named relation. +sub relation_filepath +{ + my ($relname) = @_; + + my $pgdata = $node->data_dir; + my $rel = $node->safe_psql('postgres', + qq(SELECT pg_relation_filepath('$relname'))); + die "path not found for relation $relname" unless defined $rel; + return "$pgdata/$rel"; +} + +# substitute pattern 'find' with 'replace' within the block with number 'blkno' in the file 'filename' +sub string_replace_block +{ + my ($filename, $find, $replace, $blkno) = @_; + + my $fh; + open($fh, '+<', $filename) or BAIL_OUT("open failed: $!"); + binmode $fh; + + my $offset = $blkno * $blksize; + my $buffer; + + sysseek($fh, $offset, 0) or BAIL_OUT("seek failed: $!"); + sysread($fh, $buffer, $blksize) or BAIL_OUT("read failed: $!"); + + $buffer =~ s/$find/'"' . $replace . '"'/gee; + + sysseek($fh, $offset, 0) or BAIL_OUT("seek failed: $!"); + syswrite($fh, $buffer) or BAIL_OUT("write failed: $!"); + + close($fh) or BAIL_OUT("close failed: $!"); + + return; +} + +done_testing(); diff --git a/contrib/amcheck/verify_common.c b/contrib/amcheck/verify_common.c index d095e62ce551f..a31ce06ed99a3 100644 --- a/contrib/amcheck/verify_common.c +++ b/contrib/amcheck/verify_common.c @@ -18,11 +18,13 @@ #include "verify_common.h" #include "catalog/index.h" #include "catalog/pg_am.h" +#include "commands/defrem.h" #include "commands/tablecmds.h" #include "utils/guc.h" #include "utils/syscache.h" static bool amcheck_index_mainfork_expected(Relation rel); +static bool index_checkable(Relation rel, Oid am_id); /* @@ -155,23 +157,21 @@ amcheck_lock_relation_and_check(Oid indrelid, * callable by non-superusers. If granted, it's useful to be able to check a * whole cluster. */ -bool +static bool index_checkable(Relation rel, Oid am_id) { - if (rel->rd_rel->relkind != RELKIND_INDEX || - rel->rd_rel->relam != am_id) - { - HeapTuple amtup; - HeapTuple amtuprel; + if (rel->rd_rel->relkind != RELKIND_INDEX) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("expected index as targets for verification"), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); - amtup = SearchSysCache1(AMOID, ObjectIdGetDatum(am_id)); - amtuprel = SearchSysCache1(AMOID, ObjectIdGetDatum(rel->rd_rel->relam)); + if (rel->rd_rel->relam != am_id) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("expected \"%s\" index as targets for verification", NameStr(((Form_pg_am) GETSTRUCT(amtup))->amname)), + errmsg("expected \"%s\" index as targets for verification", get_am_name(am_id)), errdetail("Relation \"%s\" is a %s index.", - RelationGetRelationName(rel), NameStr(((Form_pg_am) GETSTRUCT(amtuprel))->amname)))); - } + RelationGetRelationName(rel), get_am_name(rel->rd_rel->relam)))); if (RELATION_IS_OTHER_TEMP(rel)) ereport(ERROR, @@ -182,7 +182,7 @@ index_checkable(Relation rel, Oid am_id) if (!rel->rd_index->indisvalid) ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot check index \"%s\"", RelationGetRelationName(rel)), errdetail("Index is not valid."))); diff --git a/contrib/amcheck/verify_common.h b/contrib/amcheck/verify_common.h index b2565bfbbab80..3f4c57f963d6b 100644 --- a/contrib/amcheck/verify_common.h +++ b/contrib/amcheck/verify_common.h @@ -16,8 +16,7 @@ #include "utils/relcache.h" #include "miscadmin.h" -/* Typedefs for callback functions for amcheck_lock_relation */ -typedef void (*IndexCheckableCallback) (Relation index); +/* Typedef for callback function for amcheck_lock_relation_and_check */ typedef void (*IndexDoCheckCallback) (Relation rel, Relation heaprel, void *state, @@ -27,5 +26,3 @@ extern void amcheck_lock_relation_and_check(Oid indrelid, Oid am_id, IndexDoCheckCallback check, LOCKMODE lockmode, void *state); - -extern bool index_checkable(Relation rel, Oid am_id); diff --git a/contrib/amcheck/verify_gin.c b/contrib/amcheck/verify_gin.c index b752448e7983f..c615d950736f6 100644 --- a/contrib/amcheck/verify_gin.c +++ b/contrib/amcheck/verify_gin.c @@ -38,7 +38,6 @@ typedef struct GinScanItem int depth; IndexTuple parenttup; BlockNumber parentblk; - XLogRecPtr parentlsn; BlockNumber blkno; struct GinScanItem *next; } GinScanItem; @@ -346,7 +345,7 @@ gin_check_posting_tree_parent_keys_consistency(Relation rel, BlockNumber posting * Check if this tuple is consistent with the downlink in the * parent. */ - if (stack->parentblk != InvalidBlockNumber && i == maxoff && + if (i == maxoff && ItemPointerIsValid(&stack->parentkey) && ItemPointerCompare(&stack->parentkey, &posting_item->key) < 0) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), @@ -359,14 +358,10 @@ gin_check_posting_tree_parent_keys_consistency(Relation rel, BlockNumber posting ptr->depth = stack->depth + 1; /* - * Set rightmost parent key to invalid iterm pointer. Its - * value is 'Infinity' and not explicitly stored. + * The rightmost parent key is always invalid item pointer. + * Its value is 'Infinity' and not explicitly stored. */ - if (rightlink == InvalidBlockNumber) - ItemPointerSetInvalid(&ptr->parentkey); - else - ptr->parentkey = posting_item->key; - + ptr->parentkey = posting_item->key; ptr->parentblk = stack->blkno; ptr->blkno = BlockIdGetBlockNumber(&posting_item->child_blkno); ptr->next = stack->next; @@ -421,7 +416,6 @@ gin_check_parent_keys_consistency(Relation rel, stack->depth = 0; stack->parenttup = NULL; stack->parentblk = InvalidBlockNumber; - stack->parentlsn = InvalidXLogRecPtr; stack->blkno = GIN_ROOT_BLKNO; while (stack) @@ -432,7 +426,6 @@ gin_check_parent_keys_consistency(Relation rel, OffsetNumber i, maxoff, prev_attnum; - XLogRecPtr lsn; IndexTuple prev_tuple; BlockNumber rightlink; @@ -442,7 +435,6 @@ gin_check_parent_keys_consistency(Relation rel, RBM_NORMAL, strategy); LockBuffer(buffer, GIN_SHARE); page = (Page) BufferGetPage(buffer); - lsn = BufferGetLSNAtomic(buffer); maxoff = PageGetMaxOffsetNumber(page); rightlink = GinPageGetOpaque(page)->rightlink; @@ -463,17 +455,18 @@ gin_check_parent_keys_consistency(Relation rel, Datum parent_key = gintuple_get_key(&state, stack->parenttup, &parent_key_category); + OffsetNumber parent_key_attnum = gintuple_get_attrnum(&state, stack->parenttup); ItemId iid = PageGetItemIdCareful(rel, stack->blkno, page, maxoff); IndexTuple idxtuple = (IndexTuple) PageGetItem(page, iid); - OffsetNumber attnum = gintuple_get_attrnum(&state, idxtuple); + OffsetNumber page_max_key_attnum = gintuple_get_attrnum(&state, idxtuple); GinNullCategory page_max_key_category; Datum page_max_key = gintuple_get_key(&state, idxtuple, &page_max_key_category); if (rightlink != InvalidBlockNumber && - ginCompareEntries(&state, attnum, page_max_key, - page_max_key_category, parent_key, - parent_key_category) > 0) + ginCompareAttEntries(&state, page_max_key_attnum, page_max_key, + page_max_key_category, parent_key_attnum, + parent_key, parent_key_category) < 0) { /* split page detected, install right link to the stack */ GinScanItem *ptr; @@ -484,7 +477,6 @@ gin_check_parent_keys_consistency(Relation rel, ptr->depth = stack->depth; ptr->parenttup = CopyIndexTuple(stack->parenttup); ptr->parentblk = stack->parentblk; - ptr->parentlsn = stack->parentlsn; ptr->blkno = rightlink; ptr->next = stack->next; stack->next = ptr; @@ -513,9 +505,7 @@ gin_check_parent_keys_consistency(Relation rel, { ItemId iid = PageGetItemIdCareful(rel, stack->blkno, page, i); IndexTuple idxtuple = (IndexTuple) PageGetItem(page, iid); - OffsetNumber attnum = gintuple_get_attrnum(&state, idxtuple); - GinNullCategory prev_key_category; - Datum prev_key; + OffsetNumber current_attnum = gintuple_get_attrnum(&state, idxtuple); GinNullCategory current_key_category; Datum current_key; @@ -528,20 +518,24 @@ gin_check_parent_keys_consistency(Relation rel, current_key = gintuple_get_key(&state, idxtuple, ¤t_key_category); /* - * First block is metadata, skip order check. Also, never check - * for high key on rightmost page, as this key is not really - * stored explicitly. + * Compare the entry to the preceding one. + * + * Don't check for high key on the rightmost inner page, as this + * key is not really stored explicitly. * - * Also make sure to not compare entries for different attnums, - * which may be stored on the same page. + * The entries may be for different attributes, so make sure to + * use ginCompareAttEntries for comparison. */ - if (i != FirstOffsetNumber && attnum == prev_attnum && stack->blkno != GIN_ROOT_BLKNO && - !(i == maxoff && rightlink == InvalidBlockNumber)) + if ((i != FirstOffsetNumber) && + !(i == maxoff && rightlink == InvalidBlockNumber && !GinPageIsLeaf(page))) { + Datum prev_key; + GinNullCategory prev_key_category; + prev_key = gintuple_get_key(&state, prev_tuple, &prev_key_category); - if (ginCompareEntries(&state, attnum, prev_key, - prev_key_category, current_key, - current_key_category) >= 0) + if (ginCompareAttEntries(&state, prev_attnum, prev_key, + prev_key_category, current_attnum, + current_key, current_key_category) >= 0) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("index \"%s\" has wrong tuple order on entry tree page, block %u, offset %u, rightlink %u", @@ -556,13 +550,14 @@ gin_check_parent_keys_consistency(Relation rel, i == maxoff) { GinNullCategory parent_key_category; + OffsetNumber parent_key_attnum = gintuple_get_attrnum(&state, stack->parenttup); Datum parent_key = gintuple_get_key(&state, stack->parenttup, &parent_key_category); - if (ginCompareEntries(&state, attnum, current_key, - current_key_category, parent_key, - parent_key_category) > 0) + if (ginCompareAttEntries(&state, current_attnum, current_key, + current_key_category, parent_key_attnum, + parent_key, parent_key_category) > 0) { /* * There was a discrepancy between parent and child @@ -581,17 +576,18 @@ gin_check_parent_keys_consistency(Relation rel, stack->blkno, stack->parentblk); else { + parent_key_attnum = gintuple_get_attrnum(&state, stack->parenttup); parent_key = gintuple_get_key(&state, stack->parenttup, &parent_key_category); /* * Check if it is properly adjusted. If succeed, - * procced to the next key. + * proceed to the next key. */ - if (ginCompareEntries(&state, attnum, current_key, - current_key_category, parent_key, - parent_key_category) > 0) + if (ginCompareAttEntries(&state, current_attnum, current_key, + current_key_category, parent_key_attnum, + parent_key, parent_key_category) > 0) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("index \"%s\" has inconsistent records on page %u offset %u", @@ -608,13 +604,12 @@ gin_check_parent_keys_consistency(Relation rel, ptr = (GinScanItem *) palloc(sizeof(GinScanItem)); ptr->depth = stack->depth + 1; /* last tuple in layer has no high key */ - if (i != maxoff && !GinPageGetOpaque(page)->rightlink) - ptr->parenttup = CopyIndexTuple(idxtuple); - else + if (i == maxoff && rightlink == InvalidBlockNumber) ptr->parenttup = NULL; + else + ptr->parenttup = CopyIndexTuple(idxtuple); ptr->parentblk = stack->blkno; ptr->blkno = GinGetDownlink(idxtuple); - ptr->parentlsn = lsn; ptr->next = stack->next; stack->next = ptr; } @@ -644,7 +639,7 @@ gin_check_parent_keys_consistency(Relation rel, } prev_tuple = CopyIndexTuple(idxtuple); - prev_attnum = attnum; + prev_attnum = current_attnum; } LockBuffer(buffer, GIN_UNLOCK); @@ -700,18 +695,18 @@ check_index_page(Relation rel, Buffer buffer, BlockNumber blockNo) if (!GinPageIsLeaf(page)) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), - errmsg("index \"%s\" has deleted internal page %d", + errmsg("index \"%s\" has deleted internal page %u", RelationGetRelationName(rel), blockNo))); if (PageGetMaxOffsetNumber(page) > InvalidOffsetNumber) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), - errmsg("index \"%s\" has deleted page %d with tuples", + errmsg("index \"%s\" has deleted page %u with tuples", RelationGetRelationName(rel), blockNo))); } else if (PageGetMaxOffsetNumber(page) > MaxIndexTuplesPerPage) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), - errmsg("index \"%s\" has page %d with exceeding count of tuples", + errmsg("index \"%s\" has page %u with exceeding count of tuples", RelationGetRelationName(rel), blockNo))); } @@ -749,7 +744,7 @@ gin_refind_parent(Relation rel, BlockNumber parentblkno, ItemId p_iid = PageGetItemIdCareful(rel, parentblkno, parentpage, o); IndexTuple itup = (IndexTuple) PageGetItem(parentpage, p_iid); - if (ItemPointerGetBlockNumber(&(itup->t_tid)) == childblkno) + if (GinGetDownlink(itup) == childblkno) { /* Found it! Make copy and return it */ result = CopyIndexTuple(itup); diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 1970fc8620aeb..4963e9245cb54 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -460,7 +460,7 @@ verify_heapam(PG_FUNCTION_ARGS) else { /* - * It would not be safe to naively use use batchmode, as + * It would not be safe to naively use batchmode, as * heapcheck_read_stream_next_unskippable takes locks. It shouldn't be * too hard to convert though. */ @@ -853,8 +853,6 @@ verify_heapam(PG_FUNCTION_ARGS) break; } - /* Ensure that the stream is completely read */ - Assert(read_stream_next_buffer(stream, NULL) == InvalidBuffer); read_stream_end(stream); if (vmbuffer != InvalidBuffer) @@ -1944,7 +1942,7 @@ check_tuple(HeapCheckContext *ctx, bool *xmin_commit_status_ok, if (RelationGetDescr(ctx->rel)->natts < ctx->natts) { report_corruption(ctx, - psprintf("number of attributes %u exceeds maximum expected for table %u", + psprintf("number of attributes %u exceeds maximum %u expected for table", ctx->natts, RelationGetDescr(ctx->rel)->natts)); return; diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index f11c43a0ed797..0949c88983ac2 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -913,7 +913,7 @@ bt_report_duplicate(BtreeCheckState *state, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("index uniqueness is violated for index \"%s\"", RelationGetRelationName(state->rel)), - errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%X.", + errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%08X.", itid, pposting, nitid, pnposting, htid, nhtid, LSN_FORMAT_ARGS(state->targetlsn)))); } @@ -1058,7 +1058,7 @@ bt_leftmost_ignoring_half_dead(BtreeCheckState *state, (errcode(ERRCODE_NO_DATA), errmsg_internal("harmless interrupted page deletion detected in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Block=%u right block=%u page lsn=%X/%X.", + errdetail_internal("Block=%u right block=%u page lsn=%X/%08X.", reached, reached_from, LSN_FORMAT_ARGS(pagelsn)))); @@ -1283,7 +1283,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("wrong number of high key index tuple attributes in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%X.", + errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%08X.", state->targetblock, BTreeTupleGetNAtts(itup, state->rel), P_ISLEAF(topaque) ? "heap" : "index", @@ -1332,7 +1332,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("index tuple size does not equal lp_len in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%X.", + errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%08X.", state->targetblock, offset, tupsize, ItemIdGetLength(itemid), LSN_FORMAT_ARGS(state->targetlsn)), @@ -1356,7 +1356,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("wrong number of index tuple attributes in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%X.", + errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%08X.", itid, BTreeTupleGetNAtts(itup, state->rel), P_ISLEAF(topaque) ? "heap" : "index", @@ -1406,7 +1406,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("could not find tuple using search from root page in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%X.", + errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%08X.", itid, htid, LSN_FORMAT_ARGS(state->targetlsn)))); } @@ -1435,7 +1435,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg_internal("posting list contains misplaced TID in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%X.", + errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%08X.", itid, i, LSN_FORMAT_ARGS(state->targetlsn)))); } @@ -1488,7 +1488,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("index row size %zu exceeds maximum for index \"%s\"", tupsize, RelationGetRelationName(state->rel)), - errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.", + errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.", itid, P_ISLEAF(topaque) ? "heap" : "index", htid, @@ -1595,7 +1595,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("high key invariant violated for index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.", + errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.", itid, P_ISLEAF(topaque) ? "heap" : "index", htid, @@ -1641,9 +1641,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("item order invariant violated for index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Lower index tid=%s (points to %s tid=%s) " - "higher index tid=%s (points to %s tid=%s) " - "page lsn=%X/%X.", + errdetail_internal("Lower index tid=%s (points to %s tid=%s) higher index tid=%s (points to %s tid=%s) page lsn=%X/%08X.", itid, P_ISLEAF(topaque) ? "heap" : "index", htid, @@ -1760,7 +1758,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("cross page item order invariant violated for index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%X.", + errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%08X.", state->targetblock, offset, LSN_FORMAT_ARGS(state->targetlsn)))); } @@ -1813,7 +1811,7 @@ bt_target_page_check(BtreeCheckState *state) (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("right block of leaf block is non-leaf for index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Block=%u page lsn=%X/%X.", + errdetail_internal("Block=%u page lsn=%X/%08X.", state->targetblock, LSN_FORMAT_ARGS(state->targetlsn)))); @@ -2237,7 +2235,7 @@ bt_child_highkey_check(BtreeCheckState *state, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("the first child of leftmost target page is not leftmost of its level in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", + errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.", state->targetblock, blkno, LSN_FORMAT_ARGS(state->targetlsn)))); @@ -2323,7 +2321,7 @@ bt_child_highkey_check(BtreeCheckState *state, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("child high key is greater than rightmost pivot key on target level in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", + errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.", state->targetblock, blkno, LSN_FORMAT_ARGS(state->targetlsn)))); pivotkey_offset = P_HIKEY; @@ -2353,7 +2351,7 @@ bt_child_highkey_check(BtreeCheckState *state, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("can't find left sibling high key in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", + errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.", state->targetblock, blkno, LSN_FORMAT_ARGS(state->targetlsn)))); itup = state->lowkey; @@ -2365,7 +2363,7 @@ bt_child_highkey_check(BtreeCheckState *state, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("mismatch between parent key and child high key in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", + errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.", state->targetblock, blkno, LSN_FORMAT_ARGS(state->targetlsn)))); } @@ -2505,7 +2503,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("downlink to deleted page found in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%X.", + errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%08X.", state->targetblock, childblock, LSN_FORMAT_ARGS(state->targetlsn)))); @@ -2546,7 +2544,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("down-link lower bound invariant violated for index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%X.", + errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%08X.", state->targetblock, childblock, offset, LSN_FORMAT_ARGS(state->targetlsn)))); } @@ -2616,7 +2614,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, (errcode(ERRCODE_NO_DATA), errmsg_internal("harmless interrupted page split detected in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.", + errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%08X.", blkno, opaque->btpo_level, opaque->btpo_prev, LSN_FORMAT_ARGS(pagelsn)))); @@ -2638,7 +2636,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("leaf index block lacks downlink in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Block=%u page lsn=%X/%X.", + errdetail_internal("Block=%u page lsn=%X/%08X.", blkno, LSN_FORMAT_ARGS(pagelsn)))); @@ -2704,7 +2702,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg_internal("downlink to deleted leaf page found in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%X.", + errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%08X.", blkno, childblk, LSN_FORMAT_ARGS(pagelsn)))); @@ -2730,7 +2728,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("internal index block lacks downlink in index \"%s\"", RelationGetRelationName(state->rel)), - errdetail_internal("Block=%u level=%u page lsn=%X/%X.", + errdetail_internal("Block=%u level=%u page lsn=%X/%08X.", blkno, opaque->btpo_level, LSN_FORMAT_ARGS(pagelsn)))); } diff --git a/contrib/auto_explain/Makefile b/contrib/auto_explain/Makefile index efd127d3cae64..94ab28e7c06b9 100644 --- a/contrib/auto_explain/Makefile +++ b/contrib/auto_explain/Makefile @@ -6,6 +6,8 @@ OBJS = \ auto_explain.o PGFILEDESC = "auto_explain - logging facility for execution plans" +REGRESS = alter_reset + TAP_TESTS = 1 ifdef USE_PGXS diff --git a/contrib/auto_explain/auto_explain.c b/contrib/auto_explain/auto_explain.c index cd6625020a730..1f4badb492840 100644 --- a/contrib/auto_explain/auto_explain.c +++ b/contrib/auto_explain/auto_explain.c @@ -81,7 +81,7 @@ static ExecutorRun_hook_type prev_ExecutorRun = NULL; static ExecutorFinish_hook_type prev_ExecutorFinish = NULL; static ExecutorEnd_hook_type prev_ExecutorEnd = NULL; -static bool explain_ExecutorStart(QueryDesc *queryDesc, int eflags); +static void explain_ExecutorStart(QueryDesc *queryDesc, int eflags); static void explain_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count); @@ -261,11 +261,9 @@ _PG_init(void) /* * ExecutorStart hook: start up logging if needed */ -static bool +static void explain_ExecutorStart(QueryDesc *queryDesc, int eflags) { - bool plan_valid; - /* * At the beginning of each top-level statement, decide whether we'll * sample this statement. If nested-statement explaining is enabled, @@ -301,13 +299,9 @@ explain_ExecutorStart(QueryDesc *queryDesc, int eflags) } if (prev_ExecutorStart) - plan_valid = prev_ExecutorStart(queryDesc, eflags); + prev_ExecutorStart(queryDesc, eflags); else - plan_valid = standard_ExecutorStart(queryDesc, eflags); - - /* The plan may have become invalid during standard_ExecutorStart() */ - if (!plan_valid) - return false; + standard_ExecutorStart(queryDesc, eflags); if (auto_explain_enabled()) { @@ -325,8 +319,6 @@ explain_ExecutorStart(QueryDesc *queryDesc, int eflags) MemoryContextSwitchTo(oldcxt); } } - - return true; } /* diff --git a/contrib/auto_explain/expected/alter_reset.out b/contrib/auto_explain/expected/alter_reset.out new file mode 100644 index 0000000000000..ec355189806ae --- /dev/null +++ b/contrib/auto_explain/expected/alter_reset.out @@ -0,0 +1,19 @@ +-- +-- This tests resetting unknown custom GUCs with reserved prefixes. There's +-- nothing specific to auto_explain; this is just a convenient place to put +-- this test. +-- +SELECT current_database() AS datname \gset +CREATE ROLE regress_ae_role; +ALTER DATABASE :"datname" SET auto_explain.bogus = 1; +ALTER ROLE regress_ae_role SET auto_explain.bogus = 1; +ALTER ROLE regress_ae_role IN DATABASE :"datname" SET auto_explain.bogus = 1; +ALTER SYSTEM SET auto_explain.bogus = 1; +LOAD 'auto_explain'; +WARNING: invalid configuration parameter name "auto_explain.bogus", removing it +DETAIL: "auto_explain" is now a reserved prefix. +ALTER DATABASE :"datname" RESET auto_explain.bogus; +ALTER ROLE regress_ae_role RESET auto_explain.bogus; +ALTER ROLE regress_ae_role IN DATABASE :"datname" RESET auto_explain.bogus; +ALTER SYSTEM RESET auto_explain.bogus; +DROP ROLE regress_ae_role; diff --git a/contrib/auto_explain/meson.build b/contrib/auto_explain/meson.build index 92dc9df6f7cac..a9b45cc235f12 100644 --- a/contrib/auto_explain/meson.build +++ b/contrib/auto_explain/meson.build @@ -20,6 +20,11 @@ tests += { 'name': 'auto_explain', 'sd': meson.current_source_dir(), 'bd': meson.current_build_dir(), + 'regress': { + 'sql': [ + 'alter_reset', + ], + }, 'tap': { 'tests': [ 't/001_auto_explain.pl', diff --git a/contrib/auto_explain/sql/alter_reset.sql b/contrib/auto_explain/sql/alter_reset.sql new file mode 100644 index 0000000000000..bf621454ec24a --- /dev/null +++ b/contrib/auto_explain/sql/alter_reset.sql @@ -0,0 +1,22 @@ +-- +-- This tests resetting unknown custom GUCs with reserved prefixes. There's +-- nothing specific to auto_explain; this is just a convenient place to put +-- this test. +-- + +SELECT current_database() AS datname \gset +CREATE ROLE regress_ae_role; + +ALTER DATABASE :"datname" SET auto_explain.bogus = 1; +ALTER ROLE regress_ae_role SET auto_explain.bogus = 1; +ALTER ROLE regress_ae_role IN DATABASE :"datname" SET auto_explain.bogus = 1; +ALTER SYSTEM SET auto_explain.bogus = 1; + +LOAD 'auto_explain'; + +ALTER DATABASE :"datname" RESET auto_explain.bogus; +ALTER ROLE regress_ae_role RESET auto_explain.bogus; +ALTER ROLE regress_ae_role IN DATABASE :"datname" RESET auto_explain.bogus; +ALTER SYSTEM RESET auto_explain.bogus; + +DROP ROLE regress_ae_role; diff --git a/contrib/basebackup_to_shell/meson.build b/contrib/basebackup_to_shell/meson.build index 8c88242456e80..8a4f170c5f829 100644 --- a/contrib/basebackup_to_shell/meson.build +++ b/contrib/basebackup_to_shell/meson.build @@ -24,7 +24,7 @@ tests += { 'tests': [ 't/001_basic.pl', ], - 'env': {'GZIP_PROGRAM': gzip.found() ? gzip.path() : '', - 'TAR': tar.found() ? tar.path() : '' }, + 'env': {'GZIP_PROGRAM': gzip.found() ? gzip.full_path() : '', + 'TAR': tar.found() ? tar.full_path() : '' }, }, } diff --git a/contrib/basic_archive/basic_archive.c b/contrib/basic_archive/basic_archive.c index 4a8b8c7ac29c1..8fc633d2cbf62 100644 --- a/contrib/basic_archive/basic_archive.c +++ b/contrib/basic_archive/basic_archive.c @@ -65,7 +65,7 @@ void _PG_init(void) { DefineCustomStringVariable("basic_archive.archive_directory", - gettext_noop("Archive file destination directory."), + "Archive file destination directory.", NULL, &archive_directory, "", diff --git a/contrib/bool_plperl/expected/bool_plperl.out b/contrib/bool_plperl/expected/bool_plperl.out index 187df8db96f9e..183dc07b3fbc3 100644 --- a/contrib/bool_plperl/expected/bool_plperl.out +++ b/contrib/bool_plperl/expected/bool_plperl.out @@ -104,9 +104,9 @@ SELECT spi_test(); DROP EXTENSION plperl CASCADE; NOTICE: drop cascades to 6 other objects -DETAIL: drop cascades to function spi_test() -drop cascades to extension bool_plperl +DETAIL: drop cascades to extension bool_plperl drop cascades to function perl2int(integer) drop cascades to function perl2text(text) drop cascades to function perl2undef() drop cascades to function bool2perl(boolean,boolean,boolean) +drop cascades to function spi_test() diff --git a/contrib/bool_plperl/expected/bool_plperlu.out b/contrib/bool_plperl/expected/bool_plperlu.out index 8337d337e992e..1496bbafac8e0 100644 --- a/contrib/bool_plperl/expected/bool_plperlu.out +++ b/contrib/bool_plperl/expected/bool_plperlu.out @@ -104,9 +104,9 @@ SELECT spi_test(); DROP EXTENSION plperlu CASCADE; NOTICE: drop cascades to 6 other objects -DETAIL: drop cascades to function spi_test() -drop cascades to extension bool_plperlu +DETAIL: drop cascades to extension bool_plperlu drop cascades to function perl2int(integer) drop cascades to function perl2text(text) drop cascades to function perl2undef() drop cascades to function bool2perl(boolean,boolean,boolean) +drop cascades to function spi_test() diff --git a/contrib/btree_gin/Makefile b/contrib/btree_gin/Makefile index 0a15811516819..ad054598db6c9 100644 --- a/contrib/btree_gin/Makefile +++ b/contrib/btree_gin/Makefile @@ -7,7 +7,7 @@ OBJS = \ EXTENSION = btree_gin DATA = btree_gin--1.0.sql btree_gin--1.0--1.1.sql btree_gin--1.1--1.2.sql \ - btree_gin--1.2--1.3.sql + btree_gin--1.2--1.3.sql btree_gin--1.3--1.4.sql PGFILEDESC = "btree_gin - B-tree equivalent GIN operator classes" REGRESS = install_btree_gin int2 int4 int8 float4 float8 money oid \ diff --git a/contrib/btree_gin/btree_gin--1.3--1.4.sql b/contrib/btree_gin/btree_gin--1.3--1.4.sql new file mode 100644 index 0000000000000..61b5dcbede6c5 --- /dev/null +++ b/contrib/btree_gin/btree_gin--1.3--1.4.sql @@ -0,0 +1,151 @@ +/* contrib/btree_gin/btree_gin--1.3--1.4.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION btree_gin UPDATE TO '1.4'" to load this file. \quit + +-- +-- Cross-type operator support is new in 1.4. We only need to worry +-- about this for cross-type operators that exist in core. +-- +-- Because the opclass extractQuery and consistent methods don't directly +-- get any information about the datatype of the RHS value, we have to +-- encode that in the operator strategy numbers. The strategy numbers +-- are the operator's normal btree strategy (1-5) plus 16 times a code +-- for the RHS datatype. +-- + +ALTER OPERATOR FAMILY int2_ops USING gin +ADD + -- Code 1: RHS is int4 + OPERATOR 0x11 < (int2, int4), + OPERATOR 0x12 <= (int2, int4), + OPERATOR 0x13 = (int2, int4), + OPERATOR 0x14 >= (int2, int4), + OPERATOR 0x15 > (int2, int4), + -- Code 2: RHS is int8 + OPERATOR 0x21 < (int2, int8), + OPERATOR 0x22 <= (int2, int8), + OPERATOR 0x23 = (int2, int8), + OPERATOR 0x24 >= (int2, int8), + OPERATOR 0x25 > (int2, int8) +; + +ALTER OPERATOR FAMILY int4_ops USING gin +ADD + -- Code 1: RHS is int2 + OPERATOR 0x11 < (int4, int2), + OPERATOR 0x12 <= (int4, int2), + OPERATOR 0x13 = (int4, int2), + OPERATOR 0x14 >= (int4, int2), + OPERATOR 0x15 > (int4, int2), + -- Code 2: RHS is int8 + OPERATOR 0x21 < (int4, int8), + OPERATOR 0x22 <= (int4, int8), + OPERATOR 0x23 = (int4, int8), + OPERATOR 0x24 >= (int4, int8), + OPERATOR 0x25 > (int4, int8) +; + +ALTER OPERATOR FAMILY int8_ops USING gin +ADD + -- Code 1: RHS is int2 + OPERATOR 0x11 < (int8, int2), + OPERATOR 0x12 <= (int8, int2), + OPERATOR 0x13 = (int8, int2), + OPERATOR 0x14 >= (int8, int2), + OPERATOR 0x15 > (int8, int2), + -- Code 2: RHS is int4 + OPERATOR 0x21 < (int8, int4), + OPERATOR 0x22 <= (int8, int4), + OPERATOR 0x23 = (int8, int4), + OPERATOR 0x24 >= (int8, int4), + OPERATOR 0x25 > (int8, int4) +; + +ALTER OPERATOR FAMILY float4_ops USING gin +ADD + -- Code 1: RHS is float8 + OPERATOR 0x11 < (float4, float8), + OPERATOR 0x12 <= (float4, float8), + OPERATOR 0x13 = (float4, float8), + OPERATOR 0x14 >= (float4, float8), + OPERATOR 0x15 > (float4, float8) +; + +ALTER OPERATOR FAMILY float8_ops USING gin +ADD + -- Code 1: RHS is float4 + OPERATOR 0x11 < (float8, float4), + OPERATOR 0x12 <= (float8, float4), + OPERATOR 0x13 = (float8, float4), + OPERATOR 0x14 >= (float8, float4), + OPERATOR 0x15 > (float8, float4) +; + +ALTER OPERATOR FAMILY text_ops USING gin +ADD + -- Code 1: RHS is name + OPERATOR 0x11 < (text, name), + OPERATOR 0x12 <= (text, name), + OPERATOR 0x13 = (text, name), + OPERATOR 0x14 >= (text, name), + OPERATOR 0x15 > (text, name) +; + +ALTER OPERATOR FAMILY name_ops USING gin +ADD + -- Code 1: RHS is text + OPERATOR 0x11 < (name, text), + OPERATOR 0x12 <= (name, text), + OPERATOR 0x13 = (name, text), + OPERATOR 0x14 >= (name, text), + OPERATOR 0x15 > (name, text) +; + +ALTER OPERATOR FAMILY date_ops USING gin +ADD + -- Code 1: RHS is timestamp + OPERATOR 0x11 < (date, timestamp), + OPERATOR 0x12 <= (date, timestamp), + OPERATOR 0x13 = (date, timestamp), + OPERATOR 0x14 >= (date, timestamp), + OPERATOR 0x15 > (date, timestamp), + -- Code 2: RHS is timestamptz + OPERATOR 0x21 < (date, timestamptz), + OPERATOR 0x22 <= (date, timestamptz), + OPERATOR 0x23 = (date, timestamptz), + OPERATOR 0x24 >= (date, timestamptz), + OPERATOR 0x25 > (date, timestamptz) +; + +ALTER OPERATOR FAMILY timestamp_ops USING gin +ADD + -- Code 1: RHS is date + OPERATOR 0x11 < (timestamp, date), + OPERATOR 0x12 <= (timestamp, date), + OPERATOR 0x13 = (timestamp, date), + OPERATOR 0x14 >= (timestamp, date), + OPERATOR 0x15 > (timestamp, date), + -- Code 2: RHS is timestamptz + OPERATOR 0x21 < (timestamp, timestamptz), + OPERATOR 0x22 <= (timestamp, timestamptz), + OPERATOR 0x23 = (timestamp, timestamptz), + OPERATOR 0x24 >= (timestamp, timestamptz), + OPERATOR 0x25 > (timestamp, timestamptz) +; + +ALTER OPERATOR FAMILY timestamptz_ops USING gin +ADD + -- Code 1: RHS is date + OPERATOR 0x11 < (timestamptz, date), + OPERATOR 0x12 <= (timestamptz, date), + OPERATOR 0x13 = (timestamptz, date), + OPERATOR 0x14 >= (timestamptz, date), + OPERATOR 0x15 > (timestamptz, date), + -- Code 2: RHS is timestamp + OPERATOR 0x21 < (timestamptz, timestamp), + OPERATOR 0x22 <= (timestamptz, timestamp), + OPERATOR 0x23 = (timestamptz, timestamp), + OPERATOR 0x24 >= (timestamptz, timestamp), + OPERATOR 0x25 > (timestamptz, timestamp) +; diff --git a/contrib/btree_gin/btree_gin.c b/contrib/btree_gin/btree_gin.c index 98663cb86117e..8c477d17e22ce 100644 --- a/contrib/btree_gin/btree_gin.c +++ b/contrib/btree_gin/btree_gin.c @@ -6,6 +6,7 @@ #include #include "access/stratnum.h" +#include "mb/pg_wchar.h" #include "utils/builtins.h" #include "utils/date.h" #include "utils/float.h" @@ -13,20 +14,36 @@ #include "utils/numeric.h" #include "utils/timestamp.h" #include "utils/uuid.h" +#include "varatt.h" PG_MODULE_MAGIC_EXT( .name = "btree_gin", .version = PG_VERSION ); +/* + * Our opclasses use the same strategy numbers as btree (1-5) for same-type + * comparison operators. For cross-type comparison operators, the + * low 4 bits of our strategy numbers are the btree strategy number, + * and the upper bits are a code for the right-hand-side data type. + */ +#define BTGIN_GET_BTREE_STRATEGY(strat) ((strat) & 0x0F) +#define BTGIN_GET_RHS_TYPE_CODE(strat) ((strat) >> 4) + +/* extra data passed from gin_btree_extract_query to gin_btree_compare_prefix */ typedef struct QueryInfo { - StrategyNumber strategy; - Datum datum; - bool is_varlena; - Datum (*typecmp) (FunctionCallInfo); + StrategyNumber strategy; /* operator strategy number */ + Datum orig_datum; /* original query (comparison) datum */ + Datum entry_datum; /* datum we reported as the entry value */ + PGFunction typecmp; /* appropriate btree comparison function */ } QueryInfo; +typedef Datum (*btree_gin_convert_function) (Datum input); + +typedef Datum (*btree_gin_leftmost_function) (void); + + /*** GIN support functions shared by all datatypes ***/ static Datum @@ -36,6 +53,7 @@ gin_btree_extract_value(FunctionCallInfo fcinfo, bool is_varlena) int32 *nentries = (int32 *) PG_GETARG_POINTER(1); Datum *entries = (Datum *) palloc(sizeof(Datum)); + /* Ensure that values stored in the index are not toasted */ if (is_varlena) datum = PointerGetDatum(PG_DETOAST_DATUM(datum)); entries[0] = datum; @@ -44,19 +62,12 @@ gin_btree_extract_value(FunctionCallInfo fcinfo, bool is_varlena) PG_RETURN_POINTER(entries); } -/* - * For BTGreaterEqualStrategyNumber, BTGreaterStrategyNumber, and - * BTEqualStrategyNumber we want to start the index scan at the - * supplied query datum, and work forward. For BTLessStrategyNumber - * and BTLessEqualStrategyNumber, we need to start at the leftmost - * key, and work forward until the supplied query datum (which must be - * sent along inside the QueryInfo structure). - */ static Datum gin_btree_extract_query(FunctionCallInfo fcinfo, - bool is_varlena, - Datum (*leftmostvalue) (void), - Datum (*typecmp) (FunctionCallInfo)) + btree_gin_leftmost_function leftmostvalue, + const bool *rhs_is_varlena, + const btree_gin_convert_function *cvt_fns, + const PGFunction *cmp_fns) { Datum datum = PG_GETARG_DATUM(0); int32 *nentries = (int32 *) PG_GETARG_POINTER(1); @@ -65,21 +76,40 @@ gin_btree_extract_query(FunctionCallInfo fcinfo, Pointer **extra_data = (Pointer **) PG_GETARG_POINTER(4); Datum *entries = (Datum *) palloc(sizeof(Datum)); QueryInfo *data = (QueryInfo *) palloc(sizeof(QueryInfo)); - bool *ptr_partialmatch; + bool *ptr_partialmatch = (bool *) palloc(sizeof(bool)); + int btree_strat, + rhs_code; + + /* + * Extract the btree strategy code and the RHS data type code from the + * given strategy number. + */ + btree_strat = BTGIN_GET_BTREE_STRATEGY(strategy); + rhs_code = BTGIN_GET_RHS_TYPE_CODE(strategy); + /* + * Detoast the comparison datum. This isn't necessary for correctness, + * but it can save repeat detoastings within the comparison function. + */ + if (rhs_is_varlena[rhs_code]) + datum = PointerGetDatum(PG_DETOAST_DATUM(datum)); + + /* Prep single comparison key with possible partial-match flag */ *nentries = 1; - ptr_partialmatch = *partialmatch = (bool *) palloc(sizeof(bool)); + *partialmatch = ptr_partialmatch; *ptr_partialmatch = false; - if (is_varlena) - datum = PointerGetDatum(PG_DETOAST_DATUM(datum)); - data->strategy = strategy; - data->datum = datum; - data->is_varlena = is_varlena; - data->typecmp = typecmp; - *extra_data = (Pointer *) palloc(sizeof(Pointer)); - **extra_data = (Pointer) data; - switch (strategy) + /* + * For BTGreaterEqualStrategyNumber, BTGreaterStrategyNumber, and + * BTEqualStrategyNumber we want to start the index scan at the supplied + * query datum, and work forward. For BTLessStrategyNumber and + * BTLessEqualStrategyNumber, we need to start at the leftmost key, and + * work forward until the supplied query datum (which we'll send along + * inside the QueryInfo structure). Use partial match rules except for + * BTEqualStrategyNumber without a conversion function. (If there is a + * conversion function, comparison to the entry value is not trustworthy.) + */ + switch (btree_strat) { case BTLessStrategyNumber: case BTLessEqualStrategyNumber: @@ -91,75 +121,106 @@ gin_btree_extract_query(FunctionCallInfo fcinfo, *ptr_partialmatch = true; /* FALLTHROUGH */ case BTEqualStrategyNumber: - entries[0] = datum; + /* If we have a conversion function, apply it */ + if (cvt_fns && cvt_fns[rhs_code]) + { + entries[0] = (*cvt_fns[rhs_code]) (datum); + *ptr_partialmatch = true; + } + else + entries[0] = datum; break; default: elog(ERROR, "unrecognized strategy number: %d", strategy); } + /* Fill "extra" data */ + data->strategy = strategy; + data->orig_datum = datum; + data->entry_datum = entries[0]; + data->typecmp = cmp_fns[rhs_code]; + *extra_data = (Pointer *) palloc(sizeof(Pointer)); + **extra_data = (Pointer) data; + PG_RETURN_POINTER(entries); } -/* - * Datum a is a value from extract_query method and for BTLess* - * strategy it is a left-most value. So, use original datum from QueryInfo - * to decide to stop scanning or not. Datum b is always from index. - */ static Datum gin_btree_compare_prefix(FunctionCallInfo fcinfo) { - Datum a = PG_GETARG_DATUM(0); - Datum b = PG_GETARG_DATUM(1); + Datum partial_key PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_DATUM(0); + Datum key = PG_GETARG_DATUM(1); QueryInfo *data = (QueryInfo *) PG_GETARG_POINTER(3); int32 res, cmp; + /* + * partial_key is only an approximation to the real comparison value, + * especially if it's a leftmost value. We can get an accurate answer by + * doing a possibly-cross-type comparison to the real comparison value. + * (Note that partial_key and key are of the indexed datatype while + * orig_datum is of the query operator's RHS datatype.) + * + * But just to be sure that things are what we expect, let's assert that + * partial_key is indeed what gin_btree_extract_query reported, so that + * we'll notice if anyone ever changes the core code in a way that breaks + * our assumptions. + */ + Assert(partial_key == data->entry_datum); + cmp = DatumGetInt32(CallerFInfoFunctionCall2(data->typecmp, fcinfo->flinfo, PG_GET_COLLATION(), - (data->strategy == BTLessStrategyNumber || - data->strategy == BTLessEqualStrategyNumber) - ? data->datum : a, - b)); + data->orig_datum, + key)); - switch (data->strategy) + /* + * Convert the comparison result to the correct thing for the search + * operator strategy. When dealing with cross-type comparisons, an + * imprecise entry datum could lead GIN to start the scan just before the + * first possible match, so we must continue the scan if the current index + * entry doesn't satisfy the search condition for >= and > cases. But if + * that happens in an = search we can stop, because an imprecise entry + * datum means that the search value is unrepresentable in the indexed + * data type, so that there will be no exact matches. + */ + switch (BTGIN_GET_BTREE_STRATEGY(data->strategy)) { case BTLessStrategyNumber: /* If original datum > indexed one then return match */ if (cmp > 0) res = 0; else - res = 1; + res = 1; /* end scan */ break; case BTLessEqualStrategyNumber: - /* The same except equality */ + /* If original datum >= indexed one then return match */ if (cmp >= 0) res = 0; else - res = 1; + res = 1; /* end scan */ break; case BTEqualStrategyNumber: - if (cmp != 0) - res = 1; - else + /* If original datum = indexed one then return match */ + /* See above about why we can end scan when cmp < 0 */ + if (cmp == 0) res = 0; + else + res = 1; /* end scan */ break; case BTGreaterEqualStrategyNumber: /* If original datum <= indexed one then return match */ if (cmp <= 0) res = 0; else - res = 1; + res = -1; /* keep scanning */ break; case BTGreaterStrategyNumber: - /* If original datum <= indexed one then return match */ - /* If original datum == indexed one then continue scan */ + /* If original datum < indexed one then return match */ if (cmp < 0) res = 0; - else if (cmp == 0) - res = -1; else - res = 1; + res = -1; /* keep scanning */ break; default: elog(ERROR, "unrecognized strategy number: %d", @@ -182,19 +243,20 @@ gin_btree_consistent(PG_FUNCTION_ARGS) /*** GIN_SUPPORT macro defines the datatype specific functions ***/ -#define GIN_SUPPORT(type, is_varlena, leftmostvalue, typecmp) \ +#define GIN_SUPPORT(type, leftmostvalue, is_varlena, cvtfns, cmpfns) \ PG_FUNCTION_INFO_V1(gin_extract_value_##type); \ Datum \ gin_extract_value_##type(PG_FUNCTION_ARGS) \ { \ - return gin_btree_extract_value(fcinfo, is_varlena); \ + return gin_btree_extract_value(fcinfo, is_varlena[0]); \ } \ PG_FUNCTION_INFO_V1(gin_extract_query_##type); \ Datum \ gin_extract_query_##type(PG_FUNCTION_ARGS) \ { \ return gin_btree_extract_query(fcinfo, \ - is_varlena, leftmostvalue, typecmp); \ + leftmostvalue, is_varlena, \ + cvtfns, cmpfns); \ } \ PG_FUNCTION_INFO_V1(gin_compare_prefix_##type); \ Datum \ @@ -206,13 +268,66 @@ gin_compare_prefix_##type(PG_FUNCTION_ARGS) \ /*** Datatype specifications ***/ +/* Function to produce the least possible value of the indexed datatype */ static Datum leftmostvalue_int2(void) { return Int16GetDatum(SHRT_MIN); } -GIN_SUPPORT(int2, false, leftmostvalue_int2, btint2cmp) +/* + * For cross-type support, we must provide conversion functions that produce + * a Datum of the indexed datatype, since GIN requires the "entry" datums to + * be of that type. If an exact conversion is not possible, produce a value + * that will lead GIN to find the first index entry that is greater than + * or equal to the actual comparison value. (But rounding down is OK, so + * sometimes we might find an index entry that's just less than the + * comparison value.) + * + * For integer values, it's sufficient to clamp the input to be in-range. + * + * Note: for out-of-range input values, we could in theory detect that the + * search condition matches all or none of the index, and avoid a useless + * index descent in the latter case. Such searches are probably rare though, + * so we don't contort this code enough to do that. + */ +static Datum +cvt_int4_int2(Datum input) +{ + int32 val = DatumGetInt32(input); + + val = Max(val, SHRT_MIN); + val = Min(val, SHRT_MAX); + return Int16GetDatum((int16) val); +} + +static Datum +cvt_int8_int2(Datum input) +{ + int64 val = DatumGetInt64(input); + + val = Max(val, SHRT_MIN); + val = Min(val, SHRT_MAX); + return Int16GetDatum((int16) val); +} + +/* + * RHS-type-is-varlena flags, conversion and comparison function arrays, + * indexed by high bits of the operator strategy number. A NULL in the + * conversion function array indicates that no conversion is needed, which + * will always be the case for the zero'th entry. Note that the cross-type + * comparison functions should be the ones with the indexed datatype second. + */ +static const bool int2_rhs_is_varlena[] = +{false, false, false}; + +static const btree_gin_convert_function int2_cvt_fns[] = +{NULL, cvt_int4_int2, cvt_int8_int2}; + +static const PGFunction int2_cmp_fns[] = +{btint2cmp, btint42cmp, btint82cmp}; + +GIN_SUPPORT(int2, leftmostvalue_int2, int2_rhs_is_varlena, int2_cvt_fns, int2_cmp_fns) static Datum leftmostvalue_int4(void) @@ -220,7 +335,34 @@ leftmostvalue_int4(void) return Int32GetDatum(INT_MIN); } -GIN_SUPPORT(int4, false, leftmostvalue_int4, btint4cmp) +static Datum +cvt_int2_int4(Datum input) +{ + int16 val = DatumGetInt16(input); + + return Int32GetDatum((int32) val); +} + +static Datum +cvt_int8_int4(Datum input) +{ + int64 val = DatumGetInt64(input); + + val = Max(val, INT_MIN); + val = Min(val, INT_MAX); + return Int32GetDatum((int32) val); +} + +static const bool int4_rhs_is_varlena[] = +{false, false, false}; + +static const btree_gin_convert_function int4_cvt_fns[] = +{NULL, cvt_int2_int4, cvt_int8_int4}; + +static const PGFunction int4_cmp_fns[] = +{btint4cmp, btint24cmp, btint84cmp}; + +GIN_SUPPORT(int4, leftmostvalue_int4, int4_rhs_is_varlena, int4_cvt_fns, int4_cmp_fns) static Datum leftmostvalue_int8(void) @@ -228,7 +370,32 @@ leftmostvalue_int8(void) return Int64GetDatum(PG_INT64_MIN); } -GIN_SUPPORT(int8, false, leftmostvalue_int8, btint8cmp) +static Datum +cvt_int2_int8(Datum input) +{ + int16 val = DatumGetInt16(input); + + return Int64GetDatum((int64) val); +} + +static Datum +cvt_int4_int8(Datum input) +{ + int32 val = DatumGetInt32(input); + + return Int64GetDatum((int64) val); +} + +static const bool int8_rhs_is_varlena[] = +{false, false, false}; + +static const btree_gin_convert_function int8_cvt_fns[] = +{NULL, cvt_int2_int8, cvt_int4_int8}; + +static const PGFunction int8_cmp_fns[] = +{btint8cmp, btint28cmp, btint48cmp}; + +GIN_SUPPORT(int8, leftmostvalue_int8, int8_rhs_is_varlena, int8_cvt_fns, int8_cmp_fns) static Datum leftmostvalue_float4(void) @@ -236,7 +403,34 @@ leftmostvalue_float4(void) return Float4GetDatum(-get_float4_infinity()); } -GIN_SUPPORT(float4, false, leftmostvalue_float4, btfloat4cmp) +static Datum +cvt_float8_float4(Datum input) +{ + float8 val = DatumGetFloat8(input); + float4 result; + + /* + * Assume that ordinary C conversion will produce a usable result. + * (Compare dtof(), which raises error conditions that we don't need.) + * Note that for inputs that aren't exactly representable as float4, it + * doesn't matter whether the conversion rounds up or down. That might + * cause us to scan a few index entries that we'll reject as not matching, + * but we won't miss any that should match. + */ + result = (float4) val; + return Float4GetDatum(result); +} + +static const bool float4_rhs_is_varlena[] = +{false, false}; + +static const btree_gin_convert_function float4_cvt_fns[] = +{NULL, cvt_float8_float4}; + +static const PGFunction float4_cmp_fns[] = +{btfloat4cmp, btfloat84cmp}; + +GIN_SUPPORT(float4, leftmostvalue_float4, float4_rhs_is_varlena, float4_cvt_fns, float4_cmp_fns) static Datum leftmostvalue_float8(void) @@ -244,7 +438,24 @@ leftmostvalue_float8(void) return Float8GetDatum(-get_float8_infinity()); } -GIN_SUPPORT(float8, false, leftmostvalue_float8, btfloat8cmp) +static Datum +cvt_float4_float8(Datum input) +{ + float4 val = DatumGetFloat4(input); + + return Float8GetDatum((float8) val); +} + +static const bool float8_rhs_is_varlena[] = +{false, false}; + +static const btree_gin_convert_function float8_cvt_fns[] = +{NULL, cvt_float4_float8}; + +static const PGFunction float8_cmp_fns[] = +{btfloat8cmp, btfloat48cmp}; + +GIN_SUPPORT(float8, leftmostvalue_float8, float8_rhs_is_varlena, float8_cvt_fns, float8_cmp_fns) static Datum leftmostvalue_money(void) @@ -252,7 +463,13 @@ leftmostvalue_money(void) return Int64GetDatum(PG_INT64_MIN); } -GIN_SUPPORT(money, false, leftmostvalue_money, cash_cmp) +static const bool money_rhs_is_varlena[] = +{false}; + +static const PGFunction money_cmp_fns[] = +{cash_cmp}; + +GIN_SUPPORT(money, leftmostvalue_money, money_rhs_is_varlena, NULL, money_cmp_fns) static Datum leftmostvalue_oid(void) @@ -260,7 +477,13 @@ leftmostvalue_oid(void) return ObjectIdGetDatum(0); } -GIN_SUPPORT(oid, false, leftmostvalue_oid, btoidcmp) +static const bool oid_rhs_is_varlena[] = +{false}; + +static const PGFunction oid_cmp_fns[] = +{btoidcmp}; + +GIN_SUPPORT(oid, leftmostvalue_oid, oid_rhs_is_varlena, NULL, oid_cmp_fns) static Datum leftmostvalue_timestamp(void) @@ -268,9 +491,75 @@ leftmostvalue_timestamp(void) return TimestampGetDatum(DT_NOBEGIN); } -GIN_SUPPORT(timestamp, false, leftmostvalue_timestamp, timestamp_cmp) +static Datum +cvt_date_timestamp(Datum input) +{ + DateADT val = DatumGetDateADT(input); + Timestamp result; + int overflow; -GIN_SUPPORT(timestamptz, false, leftmostvalue_timestamp, timestamp_cmp) + result = date2timestamp_opt_overflow(val, &overflow); + /* We can ignore the overflow result, since result is useful as-is */ + return TimestampGetDatum(result); +} + +static Datum +cvt_timestamptz_timestamp(Datum input) +{ + TimestampTz val = DatumGetTimestampTz(input); + Timestamp result; + int overflow; + + result = timestamptz2timestamp_opt_overflow(val, &overflow); + /* We can ignore the overflow result, since result is useful as-is */ + return TimestampGetDatum(result); +} + +static const bool timestamp_rhs_is_varlena[] = +{false, false, false}; + +static const btree_gin_convert_function timestamp_cvt_fns[] = +{NULL, cvt_date_timestamp, cvt_timestamptz_timestamp}; + +static const PGFunction timestamp_cmp_fns[] = +{timestamp_cmp, date_cmp_timestamp, timestamptz_cmp_timestamp}; + +GIN_SUPPORT(timestamp, leftmostvalue_timestamp, timestamp_rhs_is_varlena, timestamp_cvt_fns, timestamp_cmp_fns) + +static Datum +cvt_date_timestamptz(Datum input) +{ + DateADT val = DatumGetDateADT(input); + TimestampTz result; + int overflow; + + result = date2timestamptz_opt_overflow(val, &overflow); + /* We can ignore the overflow result, since result is useful as-is */ + return TimestampTzGetDatum(result); +} + +static Datum +cvt_timestamp_timestamptz(Datum input) +{ + Timestamp val = DatumGetTimestamp(input); + TimestampTz result; + int overflow; + + result = timestamp2timestamptz_opt_overflow(val, &overflow); + /* We can ignore the overflow result, since result is useful as-is */ + return TimestampTzGetDatum(result); +} + +static const bool timestamptz_rhs_is_varlena[] = +{false, false, false}; + +static const btree_gin_convert_function timestamptz_cvt_fns[] = +{NULL, cvt_date_timestamptz, cvt_timestamp_timestamptz}; + +static const PGFunction timestamptz_cmp_fns[] = +{timestamp_cmp, date_cmp_timestamptz, timestamp_cmp_timestamptz}; + +GIN_SUPPORT(timestamptz, leftmostvalue_timestamp, timestamptz_rhs_is_varlena, timestamptz_cvt_fns, timestamptz_cmp_fns) static Datum leftmostvalue_time(void) @@ -278,7 +567,13 @@ leftmostvalue_time(void) return TimeADTGetDatum(0); } -GIN_SUPPORT(time, false, leftmostvalue_time, time_cmp) +static const bool time_rhs_is_varlena[] = +{false}; + +static const PGFunction time_cmp_fns[] = +{time_cmp}; + +GIN_SUPPORT(time, leftmostvalue_time, time_rhs_is_varlena, NULL, time_cmp_fns) static Datum leftmostvalue_timetz(void) @@ -291,7 +586,13 @@ leftmostvalue_timetz(void) return TimeTzADTPGetDatum(v); } -GIN_SUPPORT(timetz, false, leftmostvalue_timetz, timetz_cmp) +static const bool timetz_rhs_is_varlena[] = +{false}; + +static const PGFunction timetz_cmp_fns[] = +{timetz_cmp}; + +GIN_SUPPORT(timetz, leftmostvalue_timetz, timetz_rhs_is_varlena, NULL, timetz_cmp_fns) static Datum leftmostvalue_date(void) @@ -299,7 +600,40 @@ leftmostvalue_date(void) return DateADTGetDatum(DATEVAL_NOBEGIN); } -GIN_SUPPORT(date, false, leftmostvalue_date, date_cmp) +static Datum +cvt_timestamp_date(Datum input) +{ + Timestamp val = DatumGetTimestamp(input); + DateADT result; + int overflow; + + result = timestamp2date_opt_overflow(val, &overflow); + /* We can ignore the overflow result, since result is useful as-is */ + return DateADTGetDatum(result); +} + +static Datum +cvt_timestamptz_date(Datum input) +{ + TimestampTz val = DatumGetTimestampTz(input); + DateADT result; + int overflow; + + result = timestamptz2date_opt_overflow(val, &overflow); + /* We can ignore the overflow result, since result is useful as-is */ + return DateADTGetDatum(result); +} + +static const bool date_rhs_is_varlena[] = +{false, false, false}; + +static const btree_gin_convert_function date_cvt_fns[] = +{NULL, cvt_timestamp_date, cvt_timestamptz_date}; + +static const PGFunction date_cmp_fns[] = +{date_cmp, timestamp_cmp_date, timestamptz_cmp_date}; + +GIN_SUPPORT(date, leftmostvalue_date, date_rhs_is_varlena, date_cvt_fns, date_cmp_fns) static Datum leftmostvalue_interval(void) @@ -311,7 +645,13 @@ leftmostvalue_interval(void) return IntervalPGetDatum(v); } -GIN_SUPPORT(interval, false, leftmostvalue_interval, interval_cmp) +static const bool interval_rhs_is_varlena[] = +{false}; + +static const PGFunction interval_cmp_fns[] = +{interval_cmp}; + +GIN_SUPPORT(interval, leftmostvalue_interval, interval_rhs_is_varlena, NULL, interval_cmp_fns) static Datum leftmostvalue_macaddr(void) @@ -321,7 +661,13 @@ leftmostvalue_macaddr(void) return MacaddrPGetDatum(v); } -GIN_SUPPORT(macaddr, false, leftmostvalue_macaddr, macaddr_cmp) +static const bool macaddr_rhs_is_varlena[] = +{false}; + +static const PGFunction macaddr_cmp_fns[] = +{macaddr_cmp}; + +GIN_SUPPORT(macaddr, leftmostvalue_macaddr, macaddr_rhs_is_varlena, NULL, macaddr_cmp_fns) static Datum leftmostvalue_macaddr8(void) @@ -331,7 +677,13 @@ leftmostvalue_macaddr8(void) return Macaddr8PGetDatum(v); } -GIN_SUPPORT(macaddr8, false, leftmostvalue_macaddr8, macaddr8_cmp) +static const bool macaddr8_rhs_is_varlena[] = +{false}; + +static const PGFunction macaddr8_cmp_fns[] = +{macaddr8_cmp}; + +GIN_SUPPORT(macaddr8, leftmostvalue_macaddr8, macaddr8_rhs_is_varlena, NULL, macaddr8_cmp_fns) static Datum leftmostvalue_inet(void) @@ -339,9 +691,21 @@ leftmostvalue_inet(void) return DirectFunctionCall1(inet_in, CStringGetDatum("0.0.0.0/0")); } -GIN_SUPPORT(inet, true, leftmostvalue_inet, network_cmp) +static const bool inet_rhs_is_varlena[] = +{true}; + +static const PGFunction inet_cmp_fns[] = +{network_cmp}; + +GIN_SUPPORT(inet, leftmostvalue_inet, inet_rhs_is_varlena, NULL, inet_cmp_fns) -GIN_SUPPORT(cidr, true, leftmostvalue_inet, network_cmp) +static const bool cidr_rhs_is_varlena[] = +{true}; + +static const PGFunction cidr_cmp_fns[] = +{network_cmp}; + +GIN_SUPPORT(cidr, leftmostvalue_inet, cidr_rhs_is_varlena, NULL, cidr_cmp_fns) static Datum leftmostvalue_text(void) @@ -349,9 +713,32 @@ leftmostvalue_text(void) return PointerGetDatum(cstring_to_text_with_len("", 0)); } -GIN_SUPPORT(text, true, leftmostvalue_text, bttextcmp) +static Datum +cvt_name_text(Datum input) +{ + Name val = DatumGetName(input); + + return PointerGetDatum(cstring_to_text(NameStr(*val))); +} -GIN_SUPPORT(bpchar, true, leftmostvalue_text, bpcharcmp) +static const bool text_rhs_is_varlena[] = +{true, false}; + +static const btree_gin_convert_function text_cvt_fns[] = +{NULL, cvt_name_text}; + +static const PGFunction text_cmp_fns[] = +{bttextcmp, btnametextcmp}; + +GIN_SUPPORT(text, leftmostvalue_text, text_rhs_is_varlena, text_cvt_fns, text_cmp_fns) + +static const bool bpchar_rhs_is_varlena[] = +{true}; + +static const PGFunction bpchar_cmp_fns[] = +{bpcharcmp}; + +GIN_SUPPORT(bpchar, leftmostvalue_text, bpchar_rhs_is_varlena, NULL, bpchar_cmp_fns) static Datum leftmostvalue_char(void) @@ -359,9 +746,21 @@ leftmostvalue_char(void) return CharGetDatum(0); } -GIN_SUPPORT(char, false, leftmostvalue_char, btcharcmp) +static const bool char_rhs_is_varlena[] = +{false}; -GIN_SUPPORT(bytea, true, leftmostvalue_text, byteacmp) +static const PGFunction char_cmp_fns[] = +{btcharcmp}; + +GIN_SUPPORT(char, leftmostvalue_char, char_rhs_is_varlena, NULL, char_cmp_fns) + +static const bool bytea_rhs_is_varlena[] = +{true}; + +static const PGFunction bytea_cmp_fns[] = +{byteacmp}; + +GIN_SUPPORT(bytea, leftmostvalue_text, bytea_rhs_is_varlena, NULL, bytea_cmp_fns) static Datum leftmostvalue_bit(void) @@ -372,7 +771,13 @@ leftmostvalue_bit(void) Int32GetDatum(-1)); } -GIN_SUPPORT(bit, true, leftmostvalue_bit, bitcmp) +static const bool bit_rhs_is_varlena[] = +{true}; + +static const PGFunction bit_cmp_fns[] = +{bitcmp}; + +GIN_SUPPORT(bit, leftmostvalue_bit, bit_rhs_is_varlena, NULL, bit_cmp_fns) static Datum leftmostvalue_varbit(void) @@ -383,7 +788,13 @@ leftmostvalue_varbit(void) Int32GetDatum(-1)); } -GIN_SUPPORT(varbit, true, leftmostvalue_varbit, bitcmp) +static const bool varbit_rhs_is_varlena[] = +{true}; + +static const PGFunction varbit_cmp_fns[] = +{bitcmp}; + +GIN_SUPPORT(varbit, leftmostvalue_varbit, varbit_rhs_is_varlena, NULL, varbit_cmp_fns) /* * Numeric type hasn't a real left-most value, so we use PointerGetDatum(NULL) @@ -428,7 +839,13 @@ leftmostvalue_numeric(void) return PointerGetDatum(NULL); } -GIN_SUPPORT(numeric, true, leftmostvalue_numeric, gin_numeric_cmp) +static const bool numeric_rhs_is_varlena[] = +{true}; + +static const PGFunction numeric_cmp_fns[] = +{gin_numeric_cmp}; + +GIN_SUPPORT(numeric, leftmostvalue_numeric, numeric_rhs_is_varlena, NULL, numeric_cmp_fns) /* * Use a similar trick to that used for numeric for enums, since we don't @@ -477,7 +894,13 @@ leftmostvalue_enum(void) return ObjectIdGetDatum(InvalidOid); } -GIN_SUPPORT(anyenum, false, leftmostvalue_enum, gin_enum_cmp) +static const bool enum_rhs_is_varlena[] = +{false}; + +static const PGFunction enum_cmp_fns[] = +{gin_enum_cmp}; + +GIN_SUPPORT(anyenum, leftmostvalue_enum, enum_rhs_is_varlena, NULL, enum_cmp_fns) static Datum leftmostvalue_uuid(void) @@ -491,7 +914,13 @@ leftmostvalue_uuid(void) return UUIDPGetDatum(retval); } -GIN_SUPPORT(uuid, false, leftmostvalue_uuid, uuid_cmp) +static const bool uuid_rhs_is_varlena[] = +{false}; + +static const PGFunction uuid_cmp_fns[] = +{uuid_cmp}; + +GIN_SUPPORT(uuid, leftmostvalue_uuid, uuid_rhs_is_varlena, NULL, uuid_cmp_fns) static Datum leftmostvalue_name(void) @@ -501,7 +930,37 @@ leftmostvalue_name(void) return NameGetDatum(result); } -GIN_SUPPORT(name, false, leftmostvalue_name, btnamecmp) +static Datum +cvt_text_name(Datum input) +{ + text *val = DatumGetTextPP(input); + NameData *result = (NameData *) palloc0(NAMEDATALEN); + int len = VARSIZE_ANY_EXHDR(val); + + /* + * Truncate oversize input. We're assuming this will produce a result + * considered less than the original. That could be a bad assumption in + * some collations, but fortunately an index on "name" is generally going + * to use C collation. + */ + if (len >= NAMEDATALEN) + len = pg_mbcliplen(VARDATA_ANY(val), len, NAMEDATALEN - 1); + + memcpy(NameStr(*result), VARDATA_ANY(val), len); + + return NameGetDatum(result); +} + +static const bool name_rhs_is_varlena[] = +{false, true}; + +static const btree_gin_convert_function name_cvt_fns[] = +{NULL, cvt_text_name}; + +static const PGFunction name_cmp_fns[] = +{btnamecmp, bttextnamecmp}; + +GIN_SUPPORT(name, leftmostvalue_name, name_rhs_is_varlena, name_cvt_fns, name_cmp_fns) static Datum leftmostvalue_bool(void) @@ -509,4 +968,10 @@ leftmostvalue_bool(void) return BoolGetDatum(false); } -GIN_SUPPORT(bool, false, leftmostvalue_bool, btboolcmp) +static const bool bool_rhs_is_varlena[] = +{false}; + +static const PGFunction bool_cmp_fns[] = +{btboolcmp}; + +GIN_SUPPORT(bool, leftmostvalue_bool, bool_rhs_is_varlena, NULL, bool_cmp_fns) diff --git a/contrib/btree_gin/btree_gin.control b/contrib/btree_gin/btree_gin.control index 67d0c997d8d26..0c77c81727117 100644 --- a/contrib/btree_gin/btree_gin.control +++ b/contrib/btree_gin/btree_gin.control @@ -1,6 +1,6 @@ # btree_gin extension comment = 'support for indexing common datatypes in GIN' -default_version = '1.3' +default_version = '1.4' module_pathname = '$libdir/btree_gin' relocatable = true trusted = true diff --git a/contrib/btree_gin/expected/date.out b/contrib/btree_gin/expected/date.out index 40dfa308cf753..e69c1da2000f2 100644 --- a/contrib/btree_gin/expected/date.out +++ b/contrib/btree_gin/expected/date.out @@ -49,3 +49,365 @@ SELECT * FROM test_date WHERE i>'2004-10-26'::date ORDER BY i; 10-28-2004 (2 rows) +explain (costs off) +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamp ORDER BY i; + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_date + Recheck Cond: (i < 'Tue Oct 26 00:00:00 2004'::timestamp without time zone) + -> Bitmap Index Scan on idx_date + Index Cond: (i < 'Tue Oct 26 00:00:00 2004'::timestamp without time zone) +(6 rows) + +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamp ORDER BY i; + i +------------ + 10-23-2004 + 10-24-2004 + 10-25-2004 +(3 rows) + +SELECT * FROM test_date WHERE i<='2004-10-26'::timestamp ORDER BY i; + i +------------ + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 +(4 rows) + +SELECT * FROM test_date WHERE i='2004-10-26'::timestamp ORDER BY i; + i +------------ + 10-26-2004 +(1 row) + +SELECT * FROM test_date WHERE i>='2004-10-26'::timestamp ORDER BY i; + i +------------ + 10-26-2004 + 10-27-2004 + 10-28-2004 +(3 rows) + +SELECT * FROM test_date WHERE i>'2004-10-26'::timestamp ORDER BY i; + i +------------ + 10-27-2004 + 10-28-2004 +(2 rows) + +explain (costs off) +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamptz ORDER BY i; + QUERY PLAN +------------------------------------------------------------------------------------------ + Sort + Sort Key: i + -> Bitmap Heap Scan on test_date + Recheck Cond: (i < 'Tue Oct 26 00:00:00 2004 PDT'::timestamp with time zone) + -> Bitmap Index Scan on idx_date + Index Cond: (i < 'Tue Oct 26 00:00:00 2004 PDT'::timestamp with time zone) +(6 rows) + +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamptz ORDER BY i; + i +------------ + 10-23-2004 + 10-24-2004 + 10-25-2004 +(3 rows) + +SELECT * FROM test_date WHERE i<='2004-10-26'::timestamptz ORDER BY i; + i +------------ + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 +(4 rows) + +SELECT * FROM test_date WHERE i='2004-10-26'::timestamptz ORDER BY i; + i +------------ + 10-26-2004 +(1 row) + +SELECT * FROM test_date WHERE i>='2004-10-26'::timestamptz ORDER BY i; + i +------------ + 10-26-2004 + 10-27-2004 + 10-28-2004 +(3 rows) + +SELECT * FROM test_date WHERE i>'2004-10-26'::timestamptz ORDER BY i; + i +------------ + 10-27-2004 + 10-28-2004 +(2 rows) + +-- Check endpoint and out-of-range cases +INSERT INTO test_date VALUES ('-infinity'), ('infinity'); +SELECT gin_clean_pending_list('idx_date'); + gin_clean_pending_list +------------------------ + 1 +(1 row) + +SELECT * FROM test_date WHERE i<'-infinity'::timestamp ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_date WHERE i<='-infinity'::timestamp ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_date WHERE i='-infinity'::timestamp ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_date WHERE i>='-infinity'::timestamp ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(8 rows) + +SELECT * FROM test_date WHERE i>'-infinity'::timestamp ORDER BY i; + i +------------ + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(7 rows) + +SELECT * FROM test_date WHERE i<'infinity'::timestamp ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 +(7 rows) + +SELECT * FROM test_date WHERE i<='infinity'::timestamp ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(8 rows) + +SELECT * FROM test_date WHERE i='infinity'::timestamp ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_date WHERE i>='infinity'::timestamp ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_date WHERE i>'infinity'::timestamp ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_date WHERE i<'-infinity'::timestamptz ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_date WHERE i<='-infinity'::timestamptz ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_date WHERE i='-infinity'::timestamptz ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_date WHERE i>='-infinity'::timestamptz ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(8 rows) + +SELECT * FROM test_date WHERE i>'-infinity'::timestamptz ORDER BY i; + i +------------ + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(7 rows) + +SELECT * FROM test_date WHERE i<'infinity'::timestamptz ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 +(7 rows) + +SELECT * FROM test_date WHERE i<='infinity'::timestamptz ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(8 rows) + +SELECT * FROM test_date WHERE i='infinity'::timestamptz ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_date WHERE i>='infinity'::timestamptz ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_date WHERE i>'infinity'::timestamptz ORDER BY i; + i +--- +(0 rows) + +-- Check rounding cases +-- '2004-10-25 00:00:01' rounds to '2004-10-25' for date. +-- '2004-10-25 23:59:59' also rounds to '2004-10-25', +-- so it's the same case as '2004-10-25 00:00:01' +SELECT * FROM test_date WHERE i < '2004-10-25 00:00:01'::timestamp ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 +(4 rows) + +SELECT * FROM test_date WHERE i <= '2004-10-25 00:00:01'::timestamp ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 +(4 rows) + +SELECT * FROM test_date WHERE i = '2004-10-25 00:00:01'::timestamp ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_date WHERE i > '2004-10-25 00:00:01'::timestamp ORDER BY i; + i +------------ + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(4 rows) + +SELECT * FROM test_date WHERE i >= '2004-10-25 00:00:01'::timestamp ORDER BY i; + i +------------ + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(4 rows) + +SELECT * FROM test_date WHERE i < '2004-10-25 00:00:01'::timestamptz ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 +(4 rows) + +SELECT * FROM test_date WHERE i <= '2004-10-25 00:00:01'::timestamptz ORDER BY i; + i +------------ + -infinity + 10-23-2004 + 10-24-2004 + 10-25-2004 +(4 rows) + +SELECT * FROM test_date WHERE i = '2004-10-25 00:00:01'::timestamptz ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_date WHERE i > '2004-10-25 00:00:01'::timestamptz ORDER BY i; + i +------------ + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(4 rows) + +SELECT * FROM test_date WHERE i >= '2004-10-25 00:00:01'::timestamptz ORDER BY i; + i +------------ + 10-26-2004 + 10-27-2004 + 10-28-2004 + infinity +(4 rows) + diff --git a/contrib/btree_gin/expected/float4.out b/contrib/btree_gin/expected/float4.out index 7b9134fcd4bdc..c8bb04e59be9b 100644 --- a/contrib/btree_gin/expected/float4.out +++ b/contrib/btree_gin/expected/float4.out @@ -42,3 +42,324 @@ SELECT * FROM test_float4 WHERE i>1::float4 ORDER BY i; 3 (2 rows) +explain (costs off) +SELECT * FROM test_float4 WHERE i<1::float8 ORDER BY i; + QUERY PLAN +------------------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_float4 + Recheck Cond: (i < '1'::double precision) + -> Bitmap Index Scan on idx_float4 + Index Cond: (i < '1'::double precision) +(6 rows) + +SELECT * FROM test_float4 WHERE i<1::float8 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_float4 WHERE i<=1::float8 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_float4 WHERE i=1::float8 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_float4 WHERE i>=1::float8 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_float4 WHERE i>1::float8 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + +-- Check endpoint and out-of-range cases +INSERT INTO test_float4 VALUES ('NaN'), ('Inf'), ('-Inf'); +SELECT gin_clean_pending_list('idx_float4'); + gin_clean_pending_list +------------------------ + 1 +(1 row) + +SELECT * FROM test_float4 WHERE i<'-Inf'::float8 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_float4 WHERE i<='-Inf'::float8 ORDER BY i; + i +----------- + -Infinity +(1 row) + +SELECT * FROM test_float4 WHERE i='-Inf'::float8 ORDER BY i; + i +----------- + -Infinity +(1 row) + +SELECT * FROM test_float4 WHERE i>='-Inf'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 + Infinity + NaN +(9 rows) + +SELECT * FROM test_float4 WHERE i>'-Inf'::float8 ORDER BY i; + i +---------- + -2 + -1 + 0 + 1 + 2 + 3 + Infinity + NaN +(8 rows) + +SELECT * FROM test_float4 WHERE i<'Inf'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 +(7 rows) + +SELECT * FROM test_float4 WHERE i<='Inf'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 + Infinity +(8 rows) + +SELECT * FROM test_float4 WHERE i='Inf'::float8 ORDER BY i; + i +---------- + Infinity +(1 row) + +SELECT * FROM test_float4 WHERE i>='Inf'::float8 ORDER BY i; + i +---------- + Infinity + NaN +(2 rows) + +SELECT * FROM test_float4 WHERE i>'Inf'::float8 ORDER BY i; + i +----- + NaN +(1 row) + +SELECT * FROM test_float4 WHERE i<'1e300'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 +(7 rows) + +SELECT * FROM test_float4 WHERE i<='1e300'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 +(7 rows) + +SELECT * FROM test_float4 WHERE i='1e300'::float8 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_float4 WHERE i>='1e300'::float8 ORDER BY i; + i +---------- + Infinity + NaN +(2 rows) + +SELECT * FROM test_float4 WHERE i>'1e300'::float8 ORDER BY i; + i +---------- + Infinity + NaN +(2 rows) + +SELECT * FROM test_float4 WHERE i<'NaN'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 + Infinity +(8 rows) + +SELECT * FROM test_float4 WHERE i<='NaN'::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 + 1 + 2 + 3 + Infinity + NaN +(9 rows) + +SELECT * FROM test_float4 WHERE i='NaN'::float8 ORDER BY i; + i +----- + NaN +(1 row) + +SELECT * FROM test_float4 WHERE i>='NaN'::float8 ORDER BY i; + i +----- + NaN +(1 row) + +SELECT * FROM test_float4 WHERE i>'NaN'::float8 ORDER BY i; + i +--- +(0 rows) + +-- Check rounding cases +-- 1e-300 rounds to 0 for float4 but not for float8 +SELECT * FROM test_float4 WHERE i < -1e-300::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 +(3 rows) + +SELECT * FROM test_float4 WHERE i <= -1e-300::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 +(3 rows) + +SELECT * FROM test_float4 WHERE i = -1e-300::float8 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_float4 WHERE i > -1e-300::float8 ORDER BY i; + i +---------- + 0 + 1 + 2 + 3 + Infinity + NaN +(6 rows) + +SELECT * FROM test_float4 WHERE i >= -1e-300::float8 ORDER BY i; + i +---------- + 0 + 1 + 2 + 3 + Infinity + NaN +(6 rows) + +SELECT * FROM test_float4 WHERE i < 1e-300::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 +(4 rows) + +SELECT * FROM test_float4 WHERE i <= 1e-300::float8 ORDER BY i; + i +----------- + -Infinity + -2 + -1 + 0 +(4 rows) + +SELECT * FROM test_float4 WHERE i = 1e-300::float8 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_float4 WHERE i > 1e-300::float8 ORDER BY i; + i +---------- + 1 + 2 + 3 + Infinity + NaN +(5 rows) + +SELECT * FROM test_float4 WHERE i >= 1e-300::float8 ORDER BY i; + i +---------- + 1 + 2 + 3 + Infinity + NaN +(5 rows) + diff --git a/contrib/btree_gin/expected/float8.out b/contrib/btree_gin/expected/float8.out index a41d4f9f6bb05..b2877dfa3c1c2 100644 --- a/contrib/btree_gin/expected/float8.out +++ b/contrib/btree_gin/expected/float8.out @@ -42,3 +42,53 @@ SELECT * FROM test_float8 WHERE i>1::float8 ORDER BY i; 3 (2 rows) +explain (costs off) +SELECT * FROM test_float8 WHERE i<1::float4 ORDER BY i; + QUERY PLAN +--------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_float8 + Recheck Cond: (i < '1'::real) + -> Bitmap Index Scan on idx_float8 + Index Cond: (i < '1'::real) +(6 rows) + +SELECT * FROM test_float8 WHERE i<1::float4 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_float8 WHERE i<=1::float4 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_float8 WHERE i=1::float4 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_float8 WHERE i>=1::float4 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_float8 WHERE i>1::float4 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + diff --git a/contrib/btree_gin/expected/int2.out b/contrib/btree_gin/expected/int2.out index 20d66a1b05545..bcfa68f671a25 100644 --- a/contrib/btree_gin/expected/int2.out +++ b/contrib/btree_gin/expected/int2.out @@ -42,3 +42,193 @@ SELECT * FROM test_int2 WHERE i>1::int2 ORDER BY i; 3 (2 rows) +explain (costs off) +SELECT * FROM test_int2 WHERE i<1::int4 ORDER BY i; + QUERY PLAN +------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_int2 + Recheck Cond: (i < 1) + -> Bitmap Index Scan on idx_int2 + Index Cond: (i < 1) +(6 rows) + +SELECT * FROM test_int2 WHERE i<1::int4 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_int2 WHERE i<=1::int4 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_int2 WHERE i=1::int4 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_int2 WHERE i>=1::int4 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_int2 WHERE i>1::int4 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + +explain (costs off) +SELECT * FROM test_int2 WHERE i<1::int8 ORDER BY i; + QUERY PLAN +--------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_int2 + Recheck Cond: (i < '1'::bigint) + -> Bitmap Index Scan on idx_int2 + Index Cond: (i < '1'::bigint) +(6 rows) + +SELECT * FROM test_int2 WHERE i<1::int8 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_int2 WHERE i<=1::int8 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_int2 WHERE i=1::int8 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_int2 WHERE i>=1::int8 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_int2 WHERE i>1::int8 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + +-- Check endpoint and out-of-range cases +INSERT INTO test_int2 VALUES ((-32768)::int2),(32767); +SELECT gin_clean_pending_list('idx_int2'); + gin_clean_pending_list +------------------------ + 1 +(1 row) + +SELECT * FROM test_int2 WHERE i<(-32769)::int4 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_int2 WHERE i<=(-32769)::int4 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_int2 WHERE i=(-32769)::int4 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_int2 WHERE i>=(-32769)::int4 ORDER BY i; + i +-------- + -32768 + -2 + -1 + 0 + 1 + 2 + 3 + 32767 +(8 rows) + +SELECT * FROM test_int2 WHERE i>(-32769)::int4 ORDER BY i; + i +-------- + -32768 + -2 + -1 + 0 + 1 + 2 + 3 + 32767 +(8 rows) + +SELECT * FROM test_int2 WHERE i<32768::int4 ORDER BY i; + i +-------- + -32768 + -2 + -1 + 0 + 1 + 2 + 3 + 32767 +(8 rows) + +SELECT * FROM test_int2 WHERE i<=32768::int4 ORDER BY i; + i +-------- + -32768 + -2 + -1 + 0 + 1 + 2 + 3 + 32767 +(8 rows) + +SELECT * FROM test_int2 WHERE i=32768::int4 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_int2 WHERE i>=32768::int4 ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_int2 WHERE i>32768::int4 ORDER BY i; + i +--- +(0 rows) + diff --git a/contrib/btree_gin/expected/int4.out b/contrib/btree_gin/expected/int4.out index 0f0122c6f5e03..e62791e18bdc2 100644 --- a/contrib/btree_gin/expected/int4.out +++ b/contrib/btree_gin/expected/int4.out @@ -42,3 +42,103 @@ SELECT * FROM test_int4 WHERE i>1::int4 ORDER BY i; 3 (2 rows) +explain (costs off) +SELECT * FROM test_int4 WHERE i<1::int2 ORDER BY i; + QUERY PLAN +----------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_int4 + Recheck Cond: (i < '1'::smallint) + -> Bitmap Index Scan on idx_int4 + Index Cond: (i < '1'::smallint) +(6 rows) + +SELECT * FROM test_int4 WHERE i<1::int2 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_int4 WHERE i<=1::int2 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_int4 WHERE i=1::int2 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_int4 WHERE i>=1::int2 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_int4 WHERE i>1::int2 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + +explain (costs off) +SELECT * FROM test_int4 WHERE i<1::int8 ORDER BY i; + QUERY PLAN +--------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_int4 + Recheck Cond: (i < '1'::bigint) + -> Bitmap Index Scan on idx_int4 + Index Cond: (i < '1'::bigint) +(6 rows) + +SELECT * FROM test_int4 WHERE i<1::int8 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_int4 WHERE i<=1::int8 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_int4 WHERE i=1::int8 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_int4 WHERE i>=1::int8 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_int4 WHERE i>1::int8 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + diff --git a/contrib/btree_gin/expected/int8.out b/contrib/btree_gin/expected/int8.out index 307e19e7a056d..c9aceb9d357c6 100644 --- a/contrib/btree_gin/expected/int8.out +++ b/contrib/btree_gin/expected/int8.out @@ -42,3 +42,103 @@ SELECT * FROM test_int8 WHERE i>1::int8 ORDER BY i; 3 (2 rows) +explain (costs off) +SELECT * FROM test_int8 WHERE i<1::int2 ORDER BY i; + QUERY PLAN +----------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_int8 + Recheck Cond: (i < '1'::smallint) + -> Bitmap Index Scan on idx_int8 + Index Cond: (i < '1'::smallint) +(6 rows) + +SELECT * FROM test_int8 WHERE i<1::int2 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_int8 WHERE i<=1::int2 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_int8 WHERE i=1::int2 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_int8 WHERE i>=1::int2 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_int8 WHERE i>1::int2 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + +explain (costs off) +SELECT * FROM test_int8 WHERE i<1::int4 ORDER BY i; + QUERY PLAN +------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_int8 + Recheck Cond: (i < 1) + -> Bitmap Index Scan on idx_int8 + Index Cond: (i < 1) +(6 rows) + +SELECT * FROM test_int8 WHERE i<1::int4 ORDER BY i; + i +---- + -2 + -1 + 0 +(3 rows) + +SELECT * FROM test_int8 WHERE i<=1::int4 ORDER BY i; + i +---- + -2 + -1 + 0 + 1 +(4 rows) + +SELECT * FROM test_int8 WHERE i=1::int4 ORDER BY i; + i +--- + 1 +(1 row) + +SELECT * FROM test_int8 WHERE i>=1::int4 ORDER BY i; + i +--- + 1 + 2 + 3 +(3 rows) + +SELECT * FROM test_int8 WHERE i>1::int4 ORDER BY i; + i +--- + 2 + 3 +(2 rows) + diff --git a/contrib/btree_gin/expected/name.out b/contrib/btree_gin/expected/name.out index 174de6576f0f0..3a30f62519c67 100644 --- a/contrib/btree_gin/expected/name.out +++ b/contrib/btree_gin/expected/name.out @@ -95,3 +95,62 @@ EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>'abc' ORDER BY i; Index Cond: (i > 'abc'::name) (6 rows) +explain (costs off) +SELECT * FROM test_name WHERE i<'abc'::text ORDER BY i; + QUERY PLAN +--------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_name + Recheck Cond: (i < 'abc'::text) + -> Bitmap Index Scan on idx_name + Index Cond: (i < 'abc'::text) +(6 rows) + +SELECT * FROM test_name WHERE i<'abc'::text ORDER BY i; + i +----- + a + ab + abb +(3 rows) + +SELECT * FROM test_name WHERE i<='abc'::text ORDER BY i; + i +----- + a + ab + abb + abc +(4 rows) + +SELECT * FROM test_name WHERE i='abc'::text ORDER BY i; + i +----- + abc +(1 row) + +SELECT * FROM test_name WHERE i>='abc'::text ORDER BY i; + i +----- + abc + axy + xyz +(3 rows) + +SELECT * FROM test_name WHERE i>'abc'::text ORDER BY i; + i +----- + axy + xyz +(2 rows) + +SELECT * FROM test_name WHERE i<=repeat('abc', 100) ORDER BY i; + i +----- + a + ab + abb + abc +(4 rows) + diff --git a/contrib/btree_gin/expected/text.out b/contrib/btree_gin/expected/text.out index 3e31ad744d6aa..7f52f3db7b38e 100644 --- a/contrib/btree_gin/expected/text.out +++ b/contrib/btree_gin/expected/text.out @@ -42,3 +42,53 @@ SELECT * FROM test_text WHERE i>'abc' ORDER BY i; xyz (2 rows) +explain (costs off) +SELECT * FROM test_text WHERE i<'abc'::name COLLATE "default" ORDER BY i; + QUERY PLAN +--------------------------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_text + Recheck Cond: (i < 'abc'::name COLLATE "default") + -> Bitmap Index Scan on idx_text + Index Cond: (i < 'abc'::name COLLATE "default") +(6 rows) + +SELECT * FROM test_text WHERE i<'abc'::name COLLATE "default" ORDER BY i; + i +----- + a + ab + abb +(3 rows) + +SELECT * FROM test_text WHERE i<='abc'::name COLLATE "default" ORDER BY i; + i +----- + a + ab + abb + abc +(4 rows) + +SELECT * FROM test_text WHERE i='abc'::name COLLATE "default" ORDER BY i; + i +----- + abc +(1 row) + +SELECT * FROM test_text WHERE i>='abc'::name COLLATE "default" ORDER BY i; + i +----- + abc + axy + xyz +(3 rows) + +SELECT * FROM test_text WHERE i>'abc'::name COLLATE "default" ORDER BY i; + i +----- + axy + xyz +(2 rows) + diff --git a/contrib/btree_gin/expected/timestamp.out b/contrib/btree_gin/expected/timestamp.out index a236cdc94a9d2..b7565285e68ba 100644 --- a/contrib/btree_gin/expected/timestamp.out +++ b/contrib/btree_gin/expected/timestamp.out @@ -7,8 +7,8 @@ INSERT INTO test_timestamp VALUES ( '2004-10-26 04:55:08' ), ( '2004-10-26 05:55:08' ), ( '2004-10-26 08:55:08' ), - ( '2004-10-26 09:55:08' ), - ( '2004-10-26 10:55:08' ) + ( '2004-10-27 09:55:08' ), + ( '2004-10-27 10:55:08' ) ; CREATE INDEX idx_timestamp ON test_timestamp USING gin (i); SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i; @@ -38,14 +38,308 @@ SELECT * FROM test_timestamp WHERE i>='2004-10-26 08:55:08'::timestamp ORDER BY i -------------------------- Tue Oct 26 08:55:08 2004 - Tue Oct 26 09:55:08 2004 - Tue Oct 26 10:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 (3 rows) SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i; i -------------------------- - Tue Oct 26 09:55:08 2004 - Tue Oct 26 10:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 (2 rows) +explain (costs off) +SELECT * FROM test_timestamp WHERE i<'2004-10-27'::date ORDER BY i; + QUERY PLAN +---------------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_timestamp + Recheck Cond: (i < '10-27-2004'::date) + -> Bitmap Index Scan on idx_timestamp + Index Cond: (i < '10-27-2004'::date) +(6 rows) + +SELECT * FROM test_timestamp WHERE i<'2004-10-27'::date ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 +(4 rows) + +SELECT * FROM test_timestamp WHERE i<='2004-10-27'::date ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 +(4 rows) + +SELECT * FROM test_timestamp WHERE i='2004-10-27'::date ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_timestamp WHERE i>='2004-10-27'::date ORDER BY i; + i +-------------------------- + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 +(2 rows) + +SELECT * FROM test_timestamp WHERE i>'2004-10-27'::date ORDER BY i; + i +-------------------------- + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 +(2 rows) + +explain (costs off) +SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamptz ORDER BY i; + QUERY PLAN +------------------------------------------------------------------------------------------ + Sort + Sort Key: i + -> Bitmap Heap Scan on test_timestamp + Recheck Cond: (i < 'Tue Oct 26 08:55:08 2004 PDT'::timestamp with time zone) + -> Bitmap Index Scan on idx_timestamp + Index Cond: (i < 'Tue Oct 26 08:55:08 2004 PDT'::timestamp with time zone) +(6 rows) + +SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamptz ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 +(3 rows) + +SELECT * FROM test_timestamp WHERE i<='2004-10-26 08:55:08'::timestamptz ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 +(4 rows) + +SELECT * FROM test_timestamp WHERE i='2004-10-26 08:55:08'::timestamptz ORDER BY i; + i +-------------------------- + Tue Oct 26 08:55:08 2004 +(1 row) + +SELECT * FROM test_timestamp WHERE i>='2004-10-26 08:55:08'::timestamptz ORDER BY i; + i +-------------------------- + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 +(3 rows) + +SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i; + i +-------------------------- + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 +(2 rows) + +-- Check endpoint and out-of-range cases +INSERT INTO test_timestamp VALUES ('-infinity'), ('infinity'); +SELECT gin_clean_pending_list('idx_timestamp'); + gin_clean_pending_list +------------------------ + 1 +(1 row) + +SELECT * FROM test_timestamp WHERE i<'-infinity'::date ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_timestamp WHERE i<='-infinity'::date ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i='-infinity'::date ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>='-infinity'::date ORDER BY i; + i +-------------------------- + -infinity + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(8 rows) + +SELECT * FROM test_timestamp WHERE i>'-infinity'::date ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(7 rows) + +SELECT * FROM test_timestamp WHERE i<'infinity'::date ORDER BY i; + i +-------------------------- + -infinity + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 +(7 rows) + +SELECT * FROM test_timestamp WHERE i<='infinity'::date ORDER BY i; + i +-------------------------- + -infinity + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(8 rows) + +SELECT * FROM test_timestamp WHERE i='infinity'::date ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>='infinity'::date ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>'infinity'::date ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_timestamp WHERE i<'-infinity'::timestamptz ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_timestamp WHERE i<='-infinity'::timestamptz ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i='-infinity'::timestamptz ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>='-infinity'::timestamptz ORDER BY i; + i +-------------------------- + -infinity + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(8 rows) + +SELECT * FROM test_timestamp WHERE i>'-infinity'::timestamptz ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(7 rows) + +SELECT * FROM test_timestamp WHERE i<'infinity'::timestamptz ORDER BY i; + i +-------------------------- + -infinity + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 +(7 rows) + +SELECT * FROM test_timestamp WHERE i<='infinity'::timestamptz ORDER BY i; + i +-------------------------- + -infinity + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(8 rows) + +SELECT * FROM test_timestamp WHERE i='infinity'::timestamptz ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>='infinity'::timestamptz ORDER BY i; + i +---------- + infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>'infinity'::timestamptz ORDER BY i; + i +--- +(0 rows) + +-- This PST timestamptz will underflow if converted to timestamp +SELECT * FROM test_timestamp WHERE i<='4714-11-23 17:00 BC'::timestamptz ORDER BY i; + i +----------- + -infinity +(1 row) + +SELECT * FROM test_timestamp WHERE i>'4714-11-23 17:00 BC'::timestamptz ORDER BY i; + i +-------------------------- + Tue Oct 26 03:55:08 2004 + Tue Oct 26 04:55:08 2004 + Tue Oct 26 05:55:08 2004 + Tue Oct 26 08:55:08 2004 + Wed Oct 27 09:55:08 2004 + Wed Oct 27 10:55:08 2004 + infinity +(7 rows) + diff --git a/contrib/btree_gin/expected/timestamptz.out b/contrib/btree_gin/expected/timestamptz.out index d53963d2a04b8..0dada0b662cbb 100644 --- a/contrib/btree_gin/expected/timestamptz.out +++ b/contrib/btree_gin/expected/timestamptz.out @@ -7,8 +7,8 @@ INSERT INTO test_timestamptz VALUES ( '2004-10-26 04:55:08' ), ( '2004-10-26 05:55:08' ), ( '2004-10-26 08:55:08' ), - ( '2004-10-26 09:55:08' ), - ( '2004-10-26 10:55:08' ) + ( '2004-10-27 09:55:08' ), + ( '2004-10-27 10:55:08' ) ; CREATE INDEX idx_timestamptz ON test_timestamptz USING gin (i); SELECT * FROM test_timestamptz WHERE i<'2004-10-26 08:55:08'::timestamptz ORDER BY i; @@ -38,14 +38,113 @@ SELECT * FROM test_timestamptz WHERE i>='2004-10-26 08:55:08'::timestamptz ORDER i ------------------------------ Tue Oct 26 08:55:08 2004 PDT - Tue Oct 26 09:55:08 2004 PDT - Tue Oct 26 10:55:08 2004 PDT + Wed Oct 27 09:55:08 2004 PDT + Wed Oct 27 10:55:08 2004 PDT (3 rows) SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i; i ------------------------------ - Tue Oct 26 09:55:08 2004 PDT - Tue Oct 26 10:55:08 2004 PDT + Wed Oct 27 09:55:08 2004 PDT + Wed Oct 27 10:55:08 2004 PDT +(2 rows) + +explain (costs off) +SELECT * FROM test_timestamptz WHERE i<'2004-10-27'::date ORDER BY i; + QUERY PLAN +---------------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_timestamptz + Recheck Cond: (i < '10-27-2004'::date) + -> Bitmap Index Scan on idx_timestamptz + Index Cond: (i < '10-27-2004'::date) +(6 rows) + +SELECT * FROM test_timestamptz WHERE i<'2004-10-27'::date ORDER BY i; + i +------------------------------ + Tue Oct 26 03:55:08 2004 PDT + Tue Oct 26 04:55:08 2004 PDT + Tue Oct 26 05:55:08 2004 PDT + Tue Oct 26 08:55:08 2004 PDT +(4 rows) + +SELECT * FROM test_timestamptz WHERE i<='2004-10-27'::date ORDER BY i; + i +------------------------------ + Tue Oct 26 03:55:08 2004 PDT + Tue Oct 26 04:55:08 2004 PDT + Tue Oct 26 05:55:08 2004 PDT + Tue Oct 26 08:55:08 2004 PDT +(4 rows) + +SELECT * FROM test_timestamptz WHERE i='2004-10-27'::date ORDER BY i; + i +--- +(0 rows) + +SELECT * FROM test_timestamptz WHERE i>='2004-10-27'::date ORDER BY i; + i +------------------------------ + Wed Oct 27 09:55:08 2004 PDT + Wed Oct 27 10:55:08 2004 PDT +(2 rows) + +SELECT * FROM test_timestamptz WHERE i>'2004-10-27'::date ORDER BY i; + i +------------------------------ + Wed Oct 27 09:55:08 2004 PDT + Wed Oct 27 10:55:08 2004 PDT +(2 rows) + +explain (costs off) +SELECT * FROM test_timestamptz WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i; + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_timestamptz + Recheck Cond: (i < 'Tue Oct 26 08:55:08 2004'::timestamp without time zone) + -> Bitmap Index Scan on idx_timestamptz + Index Cond: (i < 'Tue Oct 26 08:55:08 2004'::timestamp without time zone) +(6 rows) + +SELECT * FROM test_timestamptz WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i; + i +------------------------------ + Tue Oct 26 03:55:08 2004 PDT + Tue Oct 26 04:55:08 2004 PDT + Tue Oct 26 05:55:08 2004 PDT +(3 rows) + +SELECT * FROM test_timestamptz WHERE i<='2004-10-26 08:55:08'::timestamp ORDER BY i; + i +------------------------------ + Tue Oct 26 03:55:08 2004 PDT + Tue Oct 26 04:55:08 2004 PDT + Tue Oct 26 05:55:08 2004 PDT + Tue Oct 26 08:55:08 2004 PDT +(4 rows) + +SELECT * FROM test_timestamptz WHERE i='2004-10-26 08:55:08'::timestamp ORDER BY i; + i +------------------------------ + Tue Oct 26 08:55:08 2004 PDT +(1 row) + +SELECT * FROM test_timestamptz WHERE i>='2004-10-26 08:55:08'::timestamp ORDER BY i; + i +------------------------------ + Tue Oct 26 08:55:08 2004 PDT + Wed Oct 27 09:55:08 2004 PDT + Wed Oct 27 10:55:08 2004 PDT +(3 rows) + +SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i; + i +------------------------------ + Wed Oct 27 09:55:08 2004 PDT + Wed Oct 27 10:55:08 2004 PDT (2 rows) diff --git a/contrib/btree_gin/meson.build b/contrib/btree_gin/meson.build index b2749f6e66951..ece0a716973ce 100644 --- a/contrib/btree_gin/meson.build +++ b/contrib/btree_gin/meson.build @@ -22,6 +22,7 @@ install_data( 'btree_gin--1.0--1.1.sql', 'btree_gin--1.1--1.2.sql', 'btree_gin--1.2--1.3.sql', + 'btree_gin--1.3--1.4.sql', kwargs: contrib_data_args, ) diff --git a/contrib/btree_gin/sql/date.sql b/contrib/btree_gin/sql/date.sql index 35086f6b81b9b..006f6f528b835 100644 --- a/contrib/btree_gin/sql/date.sql +++ b/contrib/btree_gin/sql/date.sql @@ -20,3 +20,67 @@ SELECT * FROM test_date WHERE i<='2004-10-26'::date ORDER BY i; SELECT * FROM test_date WHERE i='2004-10-26'::date ORDER BY i; SELECT * FROM test_date WHERE i>='2004-10-26'::date ORDER BY i; SELECT * FROM test_date WHERE i>'2004-10-26'::date ORDER BY i; + +explain (costs off) +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamp ORDER BY i; + +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i<='2004-10-26'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i='2004-10-26'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i>='2004-10-26'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i>'2004-10-26'::timestamp ORDER BY i; + +explain (costs off) +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamptz ORDER BY i; + +SELECT * FROM test_date WHERE i<'2004-10-26'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i<='2004-10-26'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i='2004-10-26'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i>='2004-10-26'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i>'2004-10-26'::timestamptz ORDER BY i; + +-- Check endpoint and out-of-range cases + +INSERT INTO test_date VALUES ('-infinity'), ('infinity'); +SELECT gin_clean_pending_list('idx_date'); + +SELECT * FROM test_date WHERE i<'-infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i<='-infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i='-infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i>='-infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i>'-infinity'::timestamp ORDER BY i; + +SELECT * FROM test_date WHERE i<'infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i<='infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i='infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i>='infinity'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i>'infinity'::timestamp ORDER BY i; + +SELECT * FROM test_date WHERE i<'-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i<='-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i='-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i>='-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i>'-infinity'::timestamptz ORDER BY i; + +SELECT * FROM test_date WHERE i<'infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i<='infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i='infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i>='infinity'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i>'infinity'::timestamptz ORDER BY i; + +-- Check rounding cases +-- '2004-10-25 00:00:01' rounds to '2004-10-25' for date. +-- '2004-10-25 23:59:59' also rounds to '2004-10-25', +-- so it's the same case as '2004-10-25 00:00:01' + +SELECT * FROM test_date WHERE i < '2004-10-25 00:00:01'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i <= '2004-10-25 00:00:01'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i = '2004-10-25 00:00:01'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i > '2004-10-25 00:00:01'::timestamp ORDER BY i; +SELECT * FROM test_date WHERE i >= '2004-10-25 00:00:01'::timestamp ORDER BY i; + +SELECT * FROM test_date WHERE i < '2004-10-25 00:00:01'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i <= '2004-10-25 00:00:01'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i = '2004-10-25 00:00:01'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i > '2004-10-25 00:00:01'::timestamptz ORDER BY i; +SELECT * FROM test_date WHERE i >= '2004-10-25 00:00:01'::timestamptz ORDER BY i; diff --git a/contrib/btree_gin/sql/float4.sql b/contrib/btree_gin/sql/float4.sql index 759778ad3c3b4..0707ed6518fa2 100644 --- a/contrib/btree_gin/sql/float4.sql +++ b/contrib/btree_gin/sql/float4.sql @@ -13,3 +13,56 @@ SELECT * FROM test_float4 WHERE i<=1::float4 ORDER BY i; SELECT * FROM test_float4 WHERE i=1::float4 ORDER BY i; SELECT * FROM test_float4 WHERE i>=1::float4 ORDER BY i; SELECT * FROM test_float4 WHERE i>1::float4 ORDER BY i; + +explain (costs off) +SELECT * FROM test_float4 WHERE i<1::float8 ORDER BY i; + +SELECT * FROM test_float4 WHERE i<1::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i<=1::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i=1::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>=1::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>1::float8 ORDER BY i; + +-- Check endpoint and out-of-range cases + +INSERT INTO test_float4 VALUES ('NaN'), ('Inf'), ('-Inf'); +SELECT gin_clean_pending_list('idx_float4'); + +SELECT * FROM test_float4 WHERE i<'-Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i<='-Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i='-Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>='-Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>'-Inf'::float8 ORDER BY i; + +SELECT * FROM test_float4 WHERE i<'Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i<='Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i='Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>='Inf'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>'Inf'::float8 ORDER BY i; + +SELECT * FROM test_float4 WHERE i<'1e300'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i<='1e300'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i='1e300'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>='1e300'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>'1e300'::float8 ORDER BY i; + +SELECT * FROM test_float4 WHERE i<'NaN'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i<='NaN'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i='NaN'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>='NaN'::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i>'NaN'::float8 ORDER BY i; + +-- Check rounding cases +-- 1e-300 rounds to 0 for float4 but not for float8 + +SELECT * FROM test_float4 WHERE i < -1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i <= -1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i = -1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i > -1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i >= -1e-300::float8 ORDER BY i; + +SELECT * FROM test_float4 WHERE i < 1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i <= 1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i = 1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i > 1e-300::float8 ORDER BY i; +SELECT * FROM test_float4 WHERE i >= 1e-300::float8 ORDER BY i; diff --git a/contrib/btree_gin/sql/float8.sql b/contrib/btree_gin/sql/float8.sql index b046ac4e6c4bb..5f393147082b1 100644 --- a/contrib/btree_gin/sql/float8.sql +++ b/contrib/btree_gin/sql/float8.sql @@ -13,3 +13,12 @@ SELECT * FROM test_float8 WHERE i<=1::float8 ORDER BY i; SELECT * FROM test_float8 WHERE i=1::float8 ORDER BY i; SELECT * FROM test_float8 WHERE i>=1::float8 ORDER BY i; SELECT * FROM test_float8 WHERE i>1::float8 ORDER BY i; + +explain (costs off) +SELECT * FROM test_float8 WHERE i<1::float4 ORDER BY i; + +SELECT * FROM test_float8 WHERE i<1::float4 ORDER BY i; +SELECT * FROM test_float8 WHERE i<=1::float4 ORDER BY i; +SELECT * FROM test_float8 WHERE i=1::float4 ORDER BY i; +SELECT * FROM test_float8 WHERE i>=1::float4 ORDER BY i; +SELECT * FROM test_float8 WHERE i>1::float4 ORDER BY i; diff --git a/contrib/btree_gin/sql/int2.sql b/contrib/btree_gin/sql/int2.sql index f06f11702f54e..959e0f6cfde01 100644 --- a/contrib/btree_gin/sql/int2.sql +++ b/contrib/btree_gin/sql/int2.sql @@ -13,3 +13,38 @@ SELECT * FROM test_int2 WHERE i<=1::int2 ORDER BY i; SELECT * FROM test_int2 WHERE i=1::int2 ORDER BY i; SELECT * FROM test_int2 WHERE i>=1::int2 ORDER BY i; SELECT * FROM test_int2 WHERE i>1::int2 ORDER BY i; + +explain (costs off) +SELECT * FROM test_int2 WHERE i<1::int4 ORDER BY i; + +SELECT * FROM test_int2 WHERE i<1::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i<=1::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i=1::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i>=1::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i>1::int4 ORDER BY i; + +explain (costs off) +SELECT * FROM test_int2 WHERE i<1::int8 ORDER BY i; + +SELECT * FROM test_int2 WHERE i<1::int8 ORDER BY i; +SELECT * FROM test_int2 WHERE i<=1::int8 ORDER BY i; +SELECT * FROM test_int2 WHERE i=1::int8 ORDER BY i; +SELECT * FROM test_int2 WHERE i>=1::int8 ORDER BY i; +SELECT * FROM test_int2 WHERE i>1::int8 ORDER BY i; + +-- Check endpoint and out-of-range cases + +INSERT INTO test_int2 VALUES ((-32768)::int2),(32767); +SELECT gin_clean_pending_list('idx_int2'); + +SELECT * FROM test_int2 WHERE i<(-32769)::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i<=(-32769)::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i=(-32769)::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i>=(-32769)::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i>(-32769)::int4 ORDER BY i; + +SELECT * FROM test_int2 WHERE i<32768::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i<=32768::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i=32768::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i>=32768::int4 ORDER BY i; +SELECT * FROM test_int2 WHERE i>32768::int4 ORDER BY i; diff --git a/contrib/btree_gin/sql/int4.sql b/contrib/btree_gin/sql/int4.sql index 6499c29630722..9a45530b63ad7 100644 --- a/contrib/btree_gin/sql/int4.sql +++ b/contrib/btree_gin/sql/int4.sql @@ -13,3 +13,21 @@ SELECT * FROM test_int4 WHERE i<=1::int4 ORDER BY i; SELECT * FROM test_int4 WHERE i=1::int4 ORDER BY i; SELECT * FROM test_int4 WHERE i>=1::int4 ORDER BY i; SELECT * FROM test_int4 WHERE i>1::int4 ORDER BY i; + +explain (costs off) +SELECT * FROM test_int4 WHERE i<1::int2 ORDER BY i; + +SELECT * FROM test_int4 WHERE i<1::int2 ORDER BY i; +SELECT * FROM test_int4 WHERE i<=1::int2 ORDER BY i; +SELECT * FROM test_int4 WHERE i=1::int2 ORDER BY i; +SELECT * FROM test_int4 WHERE i>=1::int2 ORDER BY i; +SELECT * FROM test_int4 WHERE i>1::int2 ORDER BY i; + +explain (costs off) +SELECT * FROM test_int4 WHERE i<1::int8 ORDER BY i; + +SELECT * FROM test_int4 WHERE i<1::int8 ORDER BY i; +SELECT * FROM test_int4 WHERE i<=1::int8 ORDER BY i; +SELECT * FROM test_int4 WHERE i=1::int8 ORDER BY i; +SELECT * FROM test_int4 WHERE i>=1::int8 ORDER BY i; +SELECT * FROM test_int4 WHERE i>1::int8 ORDER BY i; diff --git a/contrib/btree_gin/sql/int8.sql b/contrib/btree_gin/sql/int8.sql index 4d9c2871814c4..b31f27c69b90a 100644 --- a/contrib/btree_gin/sql/int8.sql +++ b/contrib/btree_gin/sql/int8.sql @@ -13,3 +13,21 @@ SELECT * FROM test_int8 WHERE i<=1::int8 ORDER BY i; SELECT * FROM test_int8 WHERE i=1::int8 ORDER BY i; SELECT * FROM test_int8 WHERE i>=1::int8 ORDER BY i; SELECT * FROM test_int8 WHERE i>1::int8 ORDER BY i; + +explain (costs off) +SELECT * FROM test_int8 WHERE i<1::int2 ORDER BY i; + +SELECT * FROM test_int8 WHERE i<1::int2 ORDER BY i; +SELECT * FROM test_int8 WHERE i<=1::int2 ORDER BY i; +SELECT * FROM test_int8 WHERE i=1::int2 ORDER BY i; +SELECT * FROM test_int8 WHERE i>=1::int2 ORDER BY i; +SELECT * FROM test_int8 WHERE i>1::int2 ORDER BY i; + +explain (costs off) +SELECT * FROM test_int8 WHERE i<1::int4 ORDER BY i; + +SELECT * FROM test_int8 WHERE i<1::int4 ORDER BY i; +SELECT * FROM test_int8 WHERE i<=1::int4 ORDER BY i; +SELECT * FROM test_int8 WHERE i=1::int4 ORDER BY i; +SELECT * FROM test_int8 WHERE i>=1::int4 ORDER BY i; +SELECT * FROM test_int8 WHERE i>1::int4 ORDER BY i; diff --git a/contrib/btree_gin/sql/name.sql b/contrib/btree_gin/sql/name.sql index c11580cdf9609..551d928940746 100644 --- a/contrib/btree_gin/sql/name.sql +++ b/contrib/btree_gin/sql/name.sql @@ -19,3 +19,14 @@ EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i<='abc' ORDER BY i; EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i='abc' ORDER BY i; EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>='abc' ORDER BY i; EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>'abc' ORDER BY i; + +explain (costs off) +SELECT * FROM test_name WHERE i<'abc'::text ORDER BY i; + +SELECT * FROM test_name WHERE i<'abc'::text ORDER BY i; +SELECT * FROM test_name WHERE i<='abc'::text ORDER BY i; +SELECT * FROM test_name WHERE i='abc'::text ORDER BY i; +SELECT * FROM test_name WHERE i>='abc'::text ORDER BY i; +SELECT * FROM test_name WHERE i>'abc'::text ORDER BY i; + +SELECT * FROM test_name WHERE i<=repeat('abc', 100) ORDER BY i; diff --git a/contrib/btree_gin/sql/text.sql b/contrib/btree_gin/sql/text.sql index d5b3b39898988..978b21376fd85 100644 --- a/contrib/btree_gin/sql/text.sql +++ b/contrib/btree_gin/sql/text.sql @@ -13,3 +13,12 @@ SELECT * FROM test_text WHERE i<='abc' ORDER BY i; SELECT * FROM test_text WHERE i='abc' ORDER BY i; SELECT * FROM test_text WHERE i>='abc' ORDER BY i; SELECT * FROM test_text WHERE i>'abc' ORDER BY i; + +explain (costs off) +SELECT * FROM test_text WHERE i<'abc'::name COLLATE "default" ORDER BY i; + +SELECT * FROM test_text WHERE i<'abc'::name COLLATE "default" ORDER BY i; +SELECT * FROM test_text WHERE i<='abc'::name COLLATE "default" ORDER BY i; +SELECT * FROM test_text WHERE i='abc'::name COLLATE "default" ORDER BY i; +SELECT * FROM test_text WHERE i>='abc'::name COLLATE "default" ORDER BY i; +SELECT * FROM test_text WHERE i>'abc'::name COLLATE "default" ORDER BY i; diff --git a/contrib/btree_gin/sql/timestamp.sql b/contrib/btree_gin/sql/timestamp.sql index 56727e81c4aff..1ee4edb5ea4d2 100644 --- a/contrib/btree_gin/sql/timestamp.sql +++ b/contrib/btree_gin/sql/timestamp.sql @@ -9,8 +9,8 @@ INSERT INTO test_timestamp VALUES ( '2004-10-26 04:55:08' ), ( '2004-10-26 05:55:08' ), ( '2004-10-26 08:55:08' ), - ( '2004-10-26 09:55:08' ), - ( '2004-10-26 10:55:08' ) + ( '2004-10-27 09:55:08' ), + ( '2004-10-27 10:55:08' ) ; CREATE INDEX idx_timestamp ON test_timestamp USING gin (i); @@ -20,3 +20,54 @@ SELECT * FROM test_timestamp WHERE i<='2004-10-26 08:55:08'::timestamp ORDER BY SELECT * FROM test_timestamp WHERE i='2004-10-26 08:55:08'::timestamp ORDER BY i; SELECT * FROM test_timestamp WHERE i>='2004-10-26 08:55:08'::timestamp ORDER BY i; SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i; + +explain (costs off) +SELECT * FROM test_timestamp WHERE i<'2004-10-27'::date ORDER BY i; + +SELECT * FROM test_timestamp WHERE i<'2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i<='2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i='2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i>='2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'2004-10-27'::date ORDER BY i; + +explain (costs off) +SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamptz ORDER BY i; + +SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i<='2004-10-26 08:55:08'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i='2004-10-26 08:55:08'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>='2004-10-26 08:55:08'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i; + +-- Check endpoint and out-of-range cases + +INSERT INTO test_timestamp VALUES ('-infinity'), ('infinity'); +SELECT gin_clean_pending_list('idx_timestamp'); + +SELECT * FROM test_timestamp WHERE i<'-infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i<='-infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i='-infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i>='-infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'-infinity'::date ORDER BY i; + +SELECT * FROM test_timestamp WHERE i<'infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i<='infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i='infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i>='infinity'::date ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'infinity'::date ORDER BY i; + +SELECT * FROM test_timestamp WHERE i<'-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i<='-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i='-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>='-infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'-infinity'::timestamptz ORDER BY i; + +SELECT * FROM test_timestamp WHERE i<'infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i<='infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i='infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>='infinity'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'infinity'::timestamptz ORDER BY i; + +-- This PST timestamptz will underflow if converted to timestamp +SELECT * FROM test_timestamp WHERE i<='4714-11-23 17:00 BC'::timestamptz ORDER BY i; +SELECT * FROM test_timestamp WHERE i>'4714-11-23 17:00 BC'::timestamptz ORDER BY i; diff --git a/contrib/btree_gin/sql/timestamptz.sql b/contrib/btree_gin/sql/timestamptz.sql index e6cfdb1b07447..40d2d7ed329d2 100644 --- a/contrib/btree_gin/sql/timestamptz.sql +++ b/contrib/btree_gin/sql/timestamptz.sql @@ -9,8 +9,8 @@ INSERT INTO test_timestamptz VALUES ( '2004-10-26 04:55:08' ), ( '2004-10-26 05:55:08' ), ( '2004-10-26 08:55:08' ), - ( '2004-10-26 09:55:08' ), - ( '2004-10-26 10:55:08' ) + ( '2004-10-27 09:55:08' ), + ( '2004-10-27 10:55:08' ) ; CREATE INDEX idx_timestamptz ON test_timestamptz USING gin (i); @@ -20,3 +20,21 @@ SELECT * FROM test_timestamptz WHERE i<='2004-10-26 08:55:08'::timestamptz ORDER SELECT * FROM test_timestamptz WHERE i='2004-10-26 08:55:08'::timestamptz ORDER BY i; SELECT * FROM test_timestamptz WHERE i>='2004-10-26 08:55:08'::timestamptz ORDER BY i; SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i; + +explain (costs off) +SELECT * FROM test_timestamptz WHERE i<'2004-10-27'::date ORDER BY i; + +SELECT * FROM test_timestamptz WHERE i<'2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamptz WHERE i<='2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamptz WHERE i='2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamptz WHERE i>='2004-10-27'::date ORDER BY i; +SELECT * FROM test_timestamptz WHERE i>'2004-10-27'::date ORDER BY i; + +explain (costs off) +SELECT * FROM test_timestamptz WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i; + +SELECT * FROM test_timestamptz WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i; +SELECT * FROM test_timestamptz WHERE i<='2004-10-26 08:55:08'::timestamp ORDER BY i; +SELECT * FROM test_timestamptz WHERE i='2004-10-26 08:55:08'::timestamp ORDER BY i; +SELECT * FROM test_timestamptz WHERE i>='2004-10-26 08:55:08'::timestamp ORDER BY i; +SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i; diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c index f346b956fa921..0df2ae20d8b21 100644 --- a/contrib/btree_gist/btree_bit.c +++ b/contrib/btree_gist/btree_bit.c @@ -6,18 +6,18 @@ #include "btree_gist.h" #include "btree_utils_var.h" #include "utils/fmgrprotos.h" +#include "utils/sortsupport.h" #include "utils/varbit.h" - -/* -** Bit ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_bit_compress); PG_FUNCTION_INFO_V1(gbt_bit_union); PG_FUNCTION_INFO_V1(gbt_bit_picksplit); PG_FUNCTION_INFO_V1(gbt_bit_consistent); PG_FUNCTION_INFO_V1(gbt_bit_penalty); PG_FUNCTION_INFO_V1(gbt_bit_same); +PG_FUNCTION_INFO_V1(gbt_bit_sortsupport); +PG_FUNCTION_INFO_V1(gbt_varbit_sortsupport); /* define for comparison */ @@ -121,7 +121,7 @@ static const gbtree_vinfo tinfo = /************************************************** - * Bit ops + * GiST support functions **************************************************/ Datum @@ -161,8 +161,6 @@ gbt_bit_consistent(PG_FUNCTION_ARGS) PG_RETURN_BOOL(retval); } - - Datum gbt_bit_union(PG_FUNCTION_ARGS) { @@ -173,7 +171,6 @@ gbt_bit_union(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_bit_picksplit(PG_FUNCTION_ARGS) { @@ -196,7 +193,6 @@ gbt_bit_same(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - Datum gbt_bit_penalty(PG_FUNCTION_ARGS) { @@ -207,3 +203,46 @@ gbt_bit_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } + +static int +gbt_bit_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + GBT_VARKEY *key1 = PG_DETOAST_DATUM(x); + GBT_VARKEY *key2 = PG_DETOAST_DATUM(y); + + GBT_VARKEY_R arg1 = gbt_var_key_readable(key1); + GBT_VARKEY_R arg2 = gbt_var_key_readable(key2); + Datum result; + + /* for leaf items we expect lower == upper, so only compare lower */ + result = DirectFunctionCall2(byteacmp, + PointerGetDatum(arg1.lower), + PointerGetDatum(arg2.lower)); + + GBT_FREE_IF_COPY(key1, x); + GBT_FREE_IF_COPY(key2, y); + + return DatumGetInt32(result); +} + +Datum +gbt_bit_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bit_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} + +Datum +gbt_varbit_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bit_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_bool.c b/contrib/btree_gist/btree_bool.c index adb724e16ac61..344f059c78fde 100644 --- a/contrib/btree_gist/btree_bool.c +++ b/contrib/btree_gist/btree_bool.c @@ -5,6 +5,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct boolkey { @@ -12,9 +14,7 @@ typedef struct boolkey bool upper; } boolKEY; -/* -** bool ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_bool_compress); PG_FUNCTION_INFO_V1(gbt_bool_fetch); PG_FUNCTION_INFO_V1(gbt_bool_union); @@ -22,6 +22,7 @@ PG_FUNCTION_INFO_V1(gbt_bool_picksplit); PG_FUNCTION_INFO_V1(gbt_bool_consistent); PG_FUNCTION_INFO_V1(gbt_bool_penalty); PG_FUNCTION_INFO_V1(gbt_bool_same); +PG_FUNCTION_INFO_V1(gbt_bool_sortsupport); static bool gbt_boolgt(const void *a, const void *b, FmgrInfo *flinfo) @@ -82,10 +83,9 @@ static const gbtree_ninfo tinfo = /************************************************** - * bool ops + * GiST support functions **************************************************/ - Datum gbt_bool_compress(PG_FUNCTION_ARGS) { @@ -124,7 +124,6 @@ gbt_bool_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_bool_union(PG_FUNCTION_ARGS) { @@ -135,7 +134,6 @@ gbt_bool_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_bool_penalty(PG_FUNCTION_ARGS) { @@ -166,3 +164,24 @@ gbt_bool_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_bool_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + boolKEY *arg1 = (boolKEY *) DatumGetPointer(x); + boolKEY *arg2 = (boolKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return (int32) arg1->lower - (int32) arg2->lower; +} + +Datum +gbt_bool_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bool_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_bytea.c b/contrib/btree_gist/btree_bytea.c index 5eacb8c59a05e..26f8710fad5c6 100644 --- a/contrib/btree_gist/btree_bytea.c +++ b/contrib/btree_gist/btree_bytea.c @@ -6,17 +6,16 @@ #include "btree_gist.h" #include "btree_utils_var.h" #include "utils/fmgrprotos.h" +#include "utils/sortsupport.h" - -/* -** Bytea ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_bytea_compress); PG_FUNCTION_INFO_V1(gbt_bytea_union); PG_FUNCTION_INFO_V1(gbt_bytea_picksplit); PG_FUNCTION_INFO_V1(gbt_bytea_consistent); PG_FUNCTION_INFO_V1(gbt_bytea_penalty); PG_FUNCTION_INFO_V1(gbt_bytea_same); +PG_FUNCTION_INFO_V1(gbt_bytea_sortsupport); /* define for comparison */ @@ -69,7 +68,6 @@ gbt_byteacmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo) PointerGetDatum(b))); } - static const gbtree_vinfo tinfo = { gbt_t_bytea, @@ -86,10 +84,9 @@ static const gbtree_vinfo tinfo = /************************************************** - * Text ops + * GiST support functions **************************************************/ - Datum gbt_bytea_compress(PG_FUNCTION_ARGS) { @@ -98,8 +95,6 @@ gbt_bytea_compress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_compress(entry, &tinfo)); } - - Datum gbt_bytea_consistent(PG_FUNCTION_ARGS) { @@ -121,8 +116,6 @@ gbt_bytea_consistent(PG_FUNCTION_ARGS) PG_RETURN_BOOL(retval); } - - Datum gbt_bytea_union(PG_FUNCTION_ARGS) { @@ -133,7 +126,6 @@ gbt_bytea_union(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_bytea_picksplit(PG_FUNCTION_ARGS) { @@ -156,7 +148,6 @@ gbt_bytea_same(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - Datum gbt_bytea_penalty(PG_FUNCTION_ARGS) { @@ -167,3 +158,35 @@ gbt_bytea_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } + +static int +gbt_bytea_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + GBT_VARKEY *key1 = PG_DETOAST_DATUM(x); + GBT_VARKEY *key2 = PG_DETOAST_DATUM(y); + + GBT_VARKEY_R xkey = gbt_var_key_readable(key1); + GBT_VARKEY_R ykey = gbt_var_key_readable(key2); + Datum result; + + /* for leaf items we expect lower == upper, so only compare lower */ + result = DirectFunctionCall2(byteacmp, + PointerGetDatum(xkey.lower), + PointerGetDatum(ykey.lower)); + + GBT_FREE_IF_COPY(key1, x); + GBT_FREE_IF_COPY(key2, y); + + return DatumGetInt32(result); +} + +Datum +gbt_bytea_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bytea_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c index c18c34c8b83b2..282d5c5731fef 100644 --- a/contrib/btree_gist/btree_cash.c +++ b/contrib/btree_gist/btree_cash.c @@ -7,6 +7,8 @@ #include "btree_utils_num.h" #include "common/int.h" #include "utils/cash.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct { @@ -14,9 +16,7 @@ typedef struct Cash upper; } cashKEY; -/* -** Cash ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_cash_compress); PG_FUNCTION_INFO_V1(gbt_cash_fetch); PG_FUNCTION_INFO_V1(gbt_cash_union); @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_cash_consistent); PG_FUNCTION_INFO_V1(gbt_cash_distance); PG_FUNCTION_INFO_V1(gbt_cash_penalty); PG_FUNCTION_INFO_V1(gbt_cash_same); +PG_FUNCTION_INFO_V1(gbt_cash_sortsupport); static bool gbt_cashgt(const void *a, const void *b, FmgrInfo *flinfo) @@ -111,11 +112,11 @@ cash_dist(PG_FUNCTION_ARGS) PG_RETURN_CASH(ra); } + /************************************************** - * Cash ops + * GiST support functions **************************************************/ - Datum gbt_cash_compress(PG_FUNCTION_ARGS) { @@ -155,7 +156,6 @@ gbt_cash_consistent(PG_FUNCTION_ARGS) fcinfo->flinfo)); } - Datum gbt_cash_distance(PG_FUNCTION_ARGS) { @@ -173,7 +173,6 @@ gbt_cash_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_cash_union(PG_FUNCTION_ARGS) { @@ -184,7 +183,6 @@ gbt_cash_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_cash_penalty(PG_FUNCTION_ARGS) { @@ -215,3 +213,29 @@ gbt_cash_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_cash_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + cashKEY *arg1 = (cashKEY *) DatumGetPointer(x); + cashKEY *arg2 = (cashKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + if (arg1->lower > arg2->lower) + return 1; + else if (arg1->lower < arg2->lower) + return -1; + else + return 0; +} + +Datum +gbt_cash_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_cash_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c index 7a4a9d7a8539e..1f1a3f32b56a9 100644 --- a/contrib/btree_gist/btree_date.c +++ b/contrib/btree_gist/btree_date.c @@ -7,6 +7,8 @@ #include "btree_utils_num.h" #include "utils/fmgrprotos.h" #include "utils/date.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct { @@ -14,9 +16,7 @@ typedef struct DateADT upper; } dateKEY; -/* -** date ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_date_compress); PG_FUNCTION_INFO_V1(gbt_date_fetch); PG_FUNCTION_INFO_V1(gbt_date_union); @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_date_consistent); PG_FUNCTION_INFO_V1(gbt_date_distance); PG_FUNCTION_INFO_V1(gbt_date_penalty); PG_FUNCTION_INFO_V1(gbt_date_same); +PG_FUNCTION_INFO_V1(gbt_date_sortsupport); static bool gbt_dategt(const void *a, const void *b, FmgrInfo *flinfo) @@ -128,11 +129,9 @@ date_dist(PG_FUNCTION_ARGS) /************************************************** - * date ops + * GiST support functions **************************************************/ - - Datum gbt_date_compress(PG_FUNCTION_ARGS) { @@ -172,7 +171,6 @@ gbt_date_consistent(PG_FUNCTION_ARGS) fcinfo->flinfo)); } - Datum gbt_date_distance(PG_FUNCTION_ARGS) { @@ -190,7 +188,6 @@ gbt_date_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_date_union(PG_FUNCTION_ARGS) { @@ -201,7 +198,6 @@ gbt_date_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_date_penalty(PG_FUNCTION_ARGS) { @@ -238,7 +234,6 @@ gbt_date_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - Datum gbt_date_picksplit(PG_FUNCTION_ARGS) { @@ -257,3 +252,26 @@ gbt_date_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_date_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + dateKEY *akey = (dateKEY *) DatumGetPointer(x); + dateKEY *bkey = (dateKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(DirectFunctionCall2(date_cmp, + DateADTGetDatum(akey->lower), + DateADTGetDatum(bkey->lower))); +} + +Datum +gbt_date_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_date_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_enum.c b/contrib/btree_gist/btree_enum.c index 05d02e704a0d5..8f1ffff46965f 100644 --- a/contrib/btree_gist/btree_enum.c +++ b/contrib/btree_gist/btree_enum.c @@ -7,6 +7,9 @@ #include "btree_utils_num.h" #include "fmgr.h" #include "utils/fmgrprotos.h" +#include "utils/fmgroids.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" /* enums are really Oids, so we just use the same structure */ @@ -16,9 +19,7 @@ typedef struct Oid upper; } oidKEY; -/* -** enum ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_enum_compress); PG_FUNCTION_INFO_V1(gbt_enum_fetch); PG_FUNCTION_INFO_V1(gbt_enum_union); @@ -26,6 +27,7 @@ PG_FUNCTION_INFO_V1(gbt_enum_picksplit); PG_FUNCTION_INFO_V1(gbt_enum_consistent); PG_FUNCTION_INFO_V1(gbt_enum_penalty); PG_FUNCTION_INFO_V1(gbt_enum_same); +PG_FUNCTION_INFO_V1(gbt_enum_sortsupport); static bool @@ -99,10 +101,9 @@ static const gbtree_ninfo tinfo = /************************************************** - * Enum ops + * GiST support functions **************************************************/ - Datum gbt_enum_compress(PG_FUNCTION_ARGS) { @@ -152,7 +153,6 @@ gbt_enum_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_enum_penalty(PG_FUNCTION_ARGS) { @@ -183,3 +183,39 @@ gbt_enum_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_enum_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + oidKEY *arg1 = (oidKEY *) DatumGetPointer(x); + oidKEY *arg2 = (oidKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(CallerFInfoFunctionCall2(enum_cmp, + ssup->ssup_extra, + InvalidOid, + ObjectIdGetDatum(arg1->lower), + ObjectIdGetDatum(arg2->lower))); +} + +Datum +gbt_enum_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + FmgrInfo *flinfo; + + ssup->comparator = gbt_enum_ssup_cmp; + + /* + * Since gbt_enum_ssup_cmp() uses enum_cmp() like the rest of the + * comparison functions, it also needs to pass flinfo when calling it. The + * caller to a SortSupport comparison function doesn't provide an FmgrInfo + * struct, so look it up now, save it in ssup_extra and use it in + * gbt_enum_ssup_cmp() later. + */ + flinfo = MemoryContextAlloc(ssup->ssup_cxt, sizeof(FmgrInfo)); + fmgr_info_cxt(F_ENUM_CMP, flinfo, ssup->ssup_cxt); + ssup->ssup_extra = flinfo; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c index d138aa94bf2de..d9c859835dacc 100644 --- a/contrib/btree_gist/btree_float4.c +++ b/contrib/btree_gist/btree_float4.c @@ -6,6 +6,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" #include "utils/float.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct float4key { @@ -13,9 +15,7 @@ typedef struct float4key float4 upper; } float4KEY; -/* -** float4 ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_float4_compress); PG_FUNCTION_INFO_V1(gbt_float4_fetch); PG_FUNCTION_INFO_V1(gbt_float4_union); @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_float4_consistent); PG_FUNCTION_INFO_V1(gbt_float4_distance); PG_FUNCTION_INFO_V1(gbt_float4_penalty); PG_FUNCTION_INFO_V1(gbt_float4_same); +PG_FUNCTION_INFO_V1(gbt_float4_sortsupport); static bool gbt_float4gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -107,10 +108,9 @@ float4_dist(PG_FUNCTION_ARGS) /************************************************** - * float4 ops + * GiST support functions **************************************************/ - Datum gbt_float4_compress(PG_FUNCTION_ARGS) { @@ -150,7 +150,6 @@ gbt_float4_consistent(PG_FUNCTION_ARGS) fcinfo->flinfo)); } - Datum gbt_float4_distance(PG_FUNCTION_ARGS) { @@ -168,7 +167,6 @@ gbt_float4_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_float4_union(PG_FUNCTION_ARGS) { @@ -179,7 +177,6 @@ gbt_float4_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_float4_penalty(PG_FUNCTION_ARGS) { @@ -210,3 +207,24 @@ gbt_float4_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_float4_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + float4KEY *arg1 = (float4KEY *) DatumGetPointer(x); + float4KEY *arg2 = (float4KEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return float4_cmp_internal(arg1->lower, arg2->lower); +} + +Datum +gbt_float4_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_float4_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c index a74cd200529fa..567beede178ad 100644 --- a/contrib/btree_gist/btree_float8.c +++ b/contrib/btree_gist/btree_float8.c @@ -6,6 +6,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" #include "utils/float.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct float8key { @@ -13,9 +15,7 @@ typedef struct float8key float8 upper; } float8KEY; -/* -** float8 ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_float8_compress); PG_FUNCTION_INFO_V1(gbt_float8_fetch); PG_FUNCTION_INFO_V1(gbt_float8_union); @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_float8_consistent); PG_FUNCTION_INFO_V1(gbt_float8_distance); PG_FUNCTION_INFO_V1(gbt_float8_penalty); PG_FUNCTION_INFO_V1(gbt_float8_same); +PG_FUNCTION_INFO_V1(gbt_float8_sortsupport); static bool @@ -113,11 +114,11 @@ float8_dist(PG_FUNCTION_ARGS) PG_RETURN_FLOAT8(fabs(r)); } + /************************************************** - * float8 ops + * GiST support functions **************************************************/ - Datum gbt_float8_compress(PG_FUNCTION_ARGS) { @@ -157,7 +158,6 @@ gbt_float8_consistent(PG_FUNCTION_ARGS) fcinfo->flinfo)); } - Datum gbt_float8_distance(PG_FUNCTION_ARGS) { @@ -175,7 +175,6 @@ gbt_float8_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_float8_union(PG_FUNCTION_ARGS) { @@ -186,7 +185,6 @@ gbt_float8_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_float8_penalty(PG_FUNCTION_ARGS) { @@ -217,3 +215,24 @@ gbt_float8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_float8_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + float8KEY *arg1 = (float8KEY *) DatumGetPointer(x); + float8KEY *arg2 = (float8KEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return float8_cmp_internal(arg1->lower, arg2->lower); +} + +Datum +gbt_float8_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_float8_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_gist--1.7--1.8.sql b/contrib/btree_gist/btree_gist--1.7--1.8.sql index 4ff9c43a8ebe5..22316dc3f566c 100644 --- a/contrib/btree_gist/btree_gist--1.7--1.8.sql +++ b/contrib/btree_gist/btree_gist--1.7--1.8.sql @@ -3,85 +3,282 @@ -- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.8'" to load this file. \quit -CREATE FUNCTION gist_stratnum_btree(int) +-- Add sortsupport functions + +CREATE FUNCTION gbt_bit_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_varbit_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_bool_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_bytea_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_cash_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_date_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_enum_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_float4_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_float8_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_inet_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_int2_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_int4_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_int8_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_intv_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_macaddr_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_macad8_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_numeric_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_oid_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_text_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_bpchar_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_time_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_ts_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +CREATE FUNCTION gbt_uuid_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD + FUNCTION 11 (bit, bit) gbt_bit_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD + FUNCTION 11 (varbit, varbit) gbt_varbit_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_bool_ops USING gist ADD + FUNCTION 11 (bool, bool) gbt_bool_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD + FUNCTION 11 (bytea, bytea) gbt_bytea_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD + FUNCTION 11 (money, money) gbt_cash_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_date_ops USING gist ADD + FUNCTION 11 (date, date) gbt_date_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_enum_ops USING gist ADD + FUNCTION 11 (anyenum, anyenum) gbt_enum_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD + FUNCTION 11 (float4, float4) gbt_float4_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD + FUNCTION 11 (float8, float8) gbt_float8_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD + FUNCTION 11 (inet, inet) gbt_inet_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD + FUNCTION 11 (cidr, cidr) gbt_inet_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD + FUNCTION 11 (int2, int2) gbt_int2_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD + FUNCTION 11 (int4, int4) gbt_int4_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD + FUNCTION 11 (int8, int8) gbt_int8_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD + FUNCTION 11 (interval, interval) gbt_intv_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD + FUNCTION 11 (macaddr, macaddr) gbt_macaddr_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_macaddr8_ops USING gist ADD + FUNCTION 11 (macaddr8, macaddr8) gbt_macad8_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD + FUNCTION 11 (numeric, numeric) gbt_numeric_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD + FUNCTION 11 (oid, oid) gbt_oid_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_text_ops USING gist ADD + FUNCTION 11 (text, text) gbt_text_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD + FUNCTION 11 (bpchar, bpchar) gbt_bpchar_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_time_ops USING gist ADD + FUNCTION 11 (time, time) gbt_time_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD + FUNCTION 11 (timetz, timetz) gbt_time_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD + FUNCTION 11 (timestamp, timestamp) gbt_ts_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD + FUNCTION 11 (timestamptz, timestamptz) gbt_ts_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_uuid_ops USING gist ADD + FUNCTION 11 (uuid, uuid) gbt_uuid_sortsupport (internal) ; + +-- Add translate_cmptype functions + +CREATE FUNCTION gist_translate_cmptype_btree(int) RETURNS smallint AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_time_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_date_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_text_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_uuid_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_macaddr8_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_enum_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; ALTER OPERATOR FAMILY gist_bool_ops USING gist ADD - FUNCTION 12 ("any", "any") gist_stratnum_btree (int) ; + FUNCTION 12 ("any", "any") gist_translate_cmptype_btree (int) ; diff --git a/contrib/btree_gist/btree_gist.c b/contrib/btree_gist/btree_gist.c index 280ce808456b9..39fcbdad334f0 100644 --- a/contrib/btree_gist/btree_gist.c +++ b/contrib/btree_gist/btree_gist.c @@ -15,7 +15,7 @@ PG_MODULE_MAGIC_EXT( PG_FUNCTION_INFO_V1(gbt_decompress); PG_FUNCTION_INFO_V1(gbtreekey_in); PG_FUNCTION_INFO_V1(gbtreekey_out); -PG_FUNCTION_INFO_V1(gist_stratnum_btree); +PG_FUNCTION_INFO_V1(gist_translate_cmptype_btree); /************************************************** * In/Out for keys @@ -62,7 +62,7 @@ gbt_decompress(PG_FUNCTION_ARGS) * Returns the btree number for supported operators, otherwise invalid. */ Datum -gist_stratnum_btree(PG_FUNCTION_ARGS) +gist_translate_cmptype_btree(PG_FUNCTION_ARGS) { CompareType cmptype = PG_GETARG_INT32(0); diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c index 4cffd34909179..52bf3e2446e95 100644 --- a/contrib/btree_gist/btree_inet.c +++ b/contrib/btree_gist/btree_inet.c @@ -7,6 +7,8 @@ #include "btree_utils_num.h" #include "catalog/pg_type.h" #include "utils/builtins.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct inetkey { @@ -14,15 +16,14 @@ typedef struct inetkey double upper; } inetKEY; -/* -** inet ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_inet_compress); PG_FUNCTION_INFO_V1(gbt_inet_union); PG_FUNCTION_INFO_V1(gbt_inet_picksplit); PG_FUNCTION_INFO_V1(gbt_inet_consistent); PG_FUNCTION_INFO_V1(gbt_inet_penalty); PG_FUNCTION_INFO_V1(gbt_inet_same); +PG_FUNCTION_INFO_V1(gbt_inet_sortsupport); static bool @@ -85,10 +86,9 @@ static const gbtree_ninfo tinfo = /************************************************** - * inet ops + * GiST support functions **************************************************/ - Datum gbt_inet_compress(PG_FUNCTION_ARGS) { @@ -114,7 +114,6 @@ gbt_inet_compress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(retval); } - Datum gbt_inet_consistent(PG_FUNCTION_ARGS) { @@ -142,7 +141,6 @@ gbt_inet_consistent(PG_FUNCTION_ARGS) &strategy, GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_inet_union(PG_FUNCTION_ARGS) { @@ -153,7 +151,6 @@ gbt_inet_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_inet_penalty(PG_FUNCTION_ARGS) { @@ -184,3 +181,29 @@ gbt_inet_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_inet_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + inetKEY *arg1 = (inetKEY *) DatumGetPointer(x); + inetKEY *arg2 = (inetKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + if (arg1->lower < arg2->lower) + return -1; + else if (arg1->lower > arg2->lower) + return 1; + else + return 0; +} + +Datum +gbt_inet_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_inet_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c index 1751a6c055d89..faf456997bbf1 100644 --- a/contrib/btree_gist/btree_int2.c +++ b/contrib/btree_gist/btree_int2.c @@ -6,6 +6,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" #include "common/int.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct int16key { @@ -13,9 +15,7 @@ typedef struct int16key int16 upper; } int16KEY; -/* -** int16 ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_int2_compress); PG_FUNCTION_INFO_V1(gbt_int2_fetch); PG_FUNCTION_INFO_V1(gbt_int2_union); @@ -24,6 +24,8 @@ PG_FUNCTION_INFO_V1(gbt_int2_consistent); PG_FUNCTION_INFO_V1(gbt_int2_distance); PG_FUNCTION_INFO_V1(gbt_int2_penalty); PG_FUNCTION_INFO_V1(gbt_int2_same); +PG_FUNCTION_INFO_V1(gbt_int2_sortsupport); + static bool gbt_int2gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -112,10 +114,9 @@ int2_dist(PG_FUNCTION_ARGS) /************************************************** - * int16 ops + * GiST support functions **************************************************/ - Datum gbt_int2_compress(PG_FUNCTION_ARGS) { @@ -154,7 +155,6 @@ gbt_int2_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_int2_distance(PG_FUNCTION_ARGS) { @@ -172,7 +172,6 @@ gbt_int2_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_int2_union(PG_FUNCTION_ARGS) { @@ -183,7 +182,6 @@ gbt_int2_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_int2_penalty(PG_FUNCTION_ARGS) { @@ -214,3 +212,27 @@ gbt_int2_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_int2_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + int16KEY *arg1 = (int16KEY *) DatumGetPointer(x); + int16KEY *arg2 = (int16KEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + if (arg1->lower < arg2->lower) + return -1; + else if (arg1->lower > arg2->lower) + return 1; + else + return 0; +} + +Datum +gbt_int2_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_int2_ssup_cmp; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c index 90d183be6e82b..0bdb9e58c5601 100644 --- a/contrib/btree_gist/btree_int4.c +++ b/contrib/btree_gist/btree_int4.c @@ -2,10 +2,11 @@ * contrib/btree_gist/btree_int4.c */ #include "postgres.h" - #include "btree_gist.h" #include "btree_utils_num.h" #include "common/int.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct int32key { @@ -13,9 +14,7 @@ typedef struct int32key int32 upper; } int32KEY; -/* -** int32 ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_int4_compress); PG_FUNCTION_INFO_V1(gbt_int4_fetch); PG_FUNCTION_INFO_V1(gbt_int4_union); @@ -24,7 +23,7 @@ PG_FUNCTION_INFO_V1(gbt_int4_consistent); PG_FUNCTION_INFO_V1(gbt_int4_distance); PG_FUNCTION_INFO_V1(gbt_int4_penalty); PG_FUNCTION_INFO_V1(gbt_int4_same); - +PG_FUNCTION_INFO_V1(gbt_int4_sortsupport); static bool gbt_int4gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -113,10 +112,9 @@ int4_dist(PG_FUNCTION_ARGS) /************************************************** - * int32 ops + * GiST support functions **************************************************/ - Datum gbt_int4_compress(PG_FUNCTION_ARGS) { @@ -155,7 +153,6 @@ gbt_int4_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_int4_distance(PG_FUNCTION_ARGS) { @@ -173,7 +170,6 @@ gbt_int4_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_int4_union(PG_FUNCTION_ARGS) { @@ -184,7 +180,6 @@ gbt_int4_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_int4_penalty(PG_FUNCTION_ARGS) { @@ -215,3 +210,27 @@ gbt_int4_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_int4_ssup_cmp(Datum a, Datum b, SortSupport ssup) +{ + int32KEY *ia = (int32KEY *) DatumGetPointer(a); + int32KEY *ib = (int32KEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper, so only compare lower */ + if (ia->lower < ib->lower) + return -1; + else if (ia->lower > ib->lower) + return 1; + else + return 0; +} + +Datum +gbt_int4_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_int4_ssup_cmp; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c index 661cf8189fc54..a9a7b56927847 100644 --- a/contrib/btree_gist/btree_int8.c +++ b/contrib/btree_gist/btree_int8.c @@ -6,6 +6,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" #include "common/int.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct int64key { @@ -13,9 +15,7 @@ typedef struct int64key int64 upper; } int64KEY; -/* -** int64 ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_int8_compress); PG_FUNCTION_INFO_V1(gbt_int8_fetch); PG_FUNCTION_INFO_V1(gbt_int8_union); @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_int8_consistent); PG_FUNCTION_INFO_V1(gbt_int8_distance); PG_FUNCTION_INFO_V1(gbt_int8_penalty); PG_FUNCTION_INFO_V1(gbt_int8_same); +PG_FUNCTION_INFO_V1(gbt_int8_sortsupport); static bool @@ -113,10 +114,9 @@ int8_dist(PG_FUNCTION_ARGS) /************************************************** - * int64 ops + * GiST support functions **************************************************/ - Datum gbt_int8_compress(PG_FUNCTION_ARGS) { @@ -155,7 +155,6 @@ gbt_int8_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_int8_distance(PG_FUNCTION_ARGS) { @@ -173,7 +172,6 @@ gbt_int8_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_int8_union(PG_FUNCTION_ARGS) { @@ -184,7 +182,6 @@ gbt_int8_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_int8_penalty(PG_FUNCTION_ARGS) { @@ -215,3 +212,28 @@ gbt_int8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_int8_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + int64KEY *arg1 = (int64KEY *) DatumGetPointer(x); + int64KEY *arg2 = (int64KEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + if (arg1->lower < arg2->lower) + return -1; + else if (arg1->lower > arg2->lower) + return 1; + else + return 0; + +} + +Datum +gbt_int8_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_int8_ssup_cmp; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c index 8f99a4169652b..19eefc60cde3f 100644 --- a/contrib/btree_gist/btree_interval.c +++ b/contrib/btree_gist/btree_interval.c @@ -6,6 +6,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" #include "utils/fmgrprotos.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" #include "utils/timestamp.h" typedef struct @@ -14,10 +16,7 @@ typedef struct upper; } intvKEY; - -/* -** Interval ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_intv_compress); PG_FUNCTION_INFO_V1(gbt_intv_fetch); PG_FUNCTION_INFO_V1(gbt_intv_decompress); @@ -27,6 +26,7 @@ PG_FUNCTION_INFO_V1(gbt_intv_consistent); PG_FUNCTION_INFO_V1(gbt_intv_distance); PG_FUNCTION_INFO_V1(gbt_intv_penalty); PG_FUNCTION_INFO_V1(gbt_intv_same); +PG_FUNCTION_INFO_V1(gbt_intv_sortsupport); static bool @@ -137,10 +137,9 @@ interval_dist(PG_FUNCTION_ARGS) /************************************************** - * interval ops + * GiST support functions **************************************************/ - Datum gbt_intv_compress(PG_FUNCTION_ARGS) { @@ -295,3 +294,26 @@ gbt_intv_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_intv_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + intvKEY *arg1 = (intvKEY *) DatumGetPointer(x); + intvKEY *arg2 = (intvKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(DirectFunctionCall2(interval_cmp, + IntervalPGetDatum(&arg1->lower), + IntervalPGetDatum(&arg2->lower))); +} + +Datum +gbt_intv_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_intv_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c index 558cfa2172fe7..c444a709853a7 100644 --- a/contrib/btree_gist/btree_macaddr.c +++ b/contrib/btree_gist/btree_macaddr.c @@ -7,6 +7,8 @@ #include "btree_utils_num.h" #include "utils/fmgrprotos.h" #include "utils/inet.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct { @@ -15,9 +17,7 @@ typedef struct char pad[4]; /* make struct size = sizeof(gbtreekey16) */ } macKEY; -/* -** OID ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_macad_compress); PG_FUNCTION_INFO_V1(gbt_macad_fetch); PG_FUNCTION_INFO_V1(gbt_macad_union); @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_macad_picksplit); PG_FUNCTION_INFO_V1(gbt_macad_consistent); PG_FUNCTION_INFO_V1(gbt_macad_penalty); PG_FUNCTION_INFO_V1(gbt_macad_same); +PG_FUNCTION_INFO_V1(gbt_macaddr_sortsupport); static bool @@ -88,11 +89,9 @@ static const gbtree_ninfo tinfo = /************************************************** - * macaddr ops + * GiST support functions **************************************************/ - - static uint64 mac_2_uint64(macaddr *m) { @@ -105,8 +104,6 @@ mac_2_uint64(macaddr *m) return res; } - - Datum gbt_macad_compress(PG_FUNCTION_ARGS) { @@ -194,3 +191,26 @@ gbt_macad_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_macaddr_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + macKEY *arg1 = (macKEY *) DatumGetPointer(x); + macKEY *arg2 = (macKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(DirectFunctionCall2(macaddr_cmp, + MacaddrPGetDatum(&arg1->lower), + MacaddrPGetDatum(&arg2->lower))); +} + +Datum +gbt_macaddr_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_macaddr_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_macaddr8.c b/contrib/btree_gist/btree_macaddr8.c index 5d0c5509f5169..6d9837d90a340 100644 --- a/contrib/btree_gist/btree_macaddr8.c +++ b/contrib/btree_gist/btree_macaddr8.c @@ -7,6 +7,8 @@ #include "btree_utils_num.h" #include "utils/fmgrprotos.h" #include "utils/inet.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct { @@ -15,9 +17,7 @@ typedef struct /* make struct size = sizeof(gbtreekey16) */ } mac8KEY; -/* -** OID ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_macad8_compress); PG_FUNCTION_INFO_V1(gbt_macad8_fetch); PG_FUNCTION_INFO_V1(gbt_macad8_union); @@ -25,7 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_macad8_picksplit); PG_FUNCTION_INFO_V1(gbt_macad8_consistent); PG_FUNCTION_INFO_V1(gbt_macad8_penalty); PG_FUNCTION_INFO_V1(gbt_macad8_same); - +PG_FUNCTION_INFO_V1(gbt_macad8_sortsupport); static bool gbt_macad8gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -88,11 +88,9 @@ static const gbtree_ninfo tinfo = /************************************************** - * macaddr ops + * GiST support functions **************************************************/ - - static uint64 mac8_2_uint64(macaddr8 *m) { @@ -105,8 +103,6 @@ mac8_2_uint64(macaddr8 *m) return res; } - - Datum gbt_macad8_compress(PG_FUNCTION_ARGS) { @@ -145,7 +141,6 @@ gbt_macad8_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_macad8_union(PG_FUNCTION_ARGS) { @@ -156,7 +151,6 @@ gbt_macad8_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_macad8_penalty(PG_FUNCTION_ARGS) { @@ -194,3 +188,26 @@ gbt_macad8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_macaddr8_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + mac8KEY *arg1 = (mac8KEY *) DatumGetPointer(x); + mac8KEY *arg2 = (mac8KEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(DirectFunctionCall2(macaddr8_cmp, + Macaddr8PGetDatum(&arg1->lower), + Macaddr8PGetDatum(&arg2->lower))); +} + +Datum +gbt_macad8_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_macaddr8_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c index d533648a295a8..052f27b07949e 100644 --- a/contrib/btree_gist/btree_numeric.c +++ b/contrib/btree_gist/btree_numeric.c @@ -11,16 +11,16 @@ #include "utils/builtins.h" #include "utils/numeric.h" #include "utils/rel.h" +#include "utils/sortsupport.h" -/* -** Bytea ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_numeric_compress); PG_FUNCTION_INFO_V1(gbt_numeric_union); PG_FUNCTION_INFO_V1(gbt_numeric_picksplit); PG_FUNCTION_INFO_V1(gbt_numeric_consistent); PG_FUNCTION_INFO_V1(gbt_numeric_penalty); PG_FUNCTION_INFO_V1(gbt_numeric_same); +PG_FUNCTION_INFO_V1(gbt_numeric_sortsupport); /* define for comparison */ @@ -90,10 +90,9 @@ static const gbtree_vinfo tinfo = /************************************************** - * Text ops + * GiST support functions **************************************************/ - Datum gbt_numeric_compress(PG_FUNCTION_ARGS) { @@ -102,8 +101,6 @@ gbt_numeric_compress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_compress(entry, &tinfo)); } - - Datum gbt_numeric_consistent(PG_FUNCTION_ARGS) { @@ -125,8 +122,6 @@ gbt_numeric_consistent(PG_FUNCTION_ARGS) PG_RETURN_BOOL(retval); } - - Datum gbt_numeric_union(PG_FUNCTION_ARGS) { @@ -137,7 +132,6 @@ gbt_numeric_union(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_numeric_same(PG_FUNCTION_ARGS) { @@ -149,7 +143,6 @@ gbt_numeric_same(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - Datum gbt_numeric_penalty(PG_FUNCTION_ARGS) { @@ -199,7 +192,7 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS) *result = 0.0; - if (DirectFunctionCall2(numeric_gt, NumericGetDatum(ds), NumericGetDatum(nul))) + if (DatumGetBool(DirectFunctionCall2(numeric_gt, NumericGetDatum(ds), NumericGetDatum(nul)))) { *result += FLT_MIN; os = DatumGetNumeric(DirectFunctionCall2(numeric_div, @@ -215,8 +208,6 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - - Datum gbt_numeric_picksplit(PG_FUNCTION_ARGS) { @@ -227,3 +218,35 @@ gbt_numeric_picksplit(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(v); } + +static int +gbt_numeric_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + GBT_VARKEY *key1 = PG_DETOAST_DATUM(x); + GBT_VARKEY *key2 = PG_DETOAST_DATUM(y); + + GBT_VARKEY_R arg1 = gbt_var_key_readable(key1); + GBT_VARKEY_R arg2 = gbt_var_key_readable(key2); + Datum result; + + /* for leaf items we expect lower == upper, so only compare lower */ + result = DirectFunctionCall2(numeric_cmp, + PointerGetDatum(arg1.lower), + PointerGetDatum(arg2.lower)); + + GBT_FREE_IF_COPY(key1, x); + GBT_FREE_IF_COPY(key2, y); + + return DatumGetInt32(result); +} + +Datum +gbt_numeric_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_numeric_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c index d1976f4f0910d..b8f2f661076c6 100644 --- a/contrib/btree_gist/btree_oid.c +++ b/contrib/btree_gist/btree_oid.c @@ -5,6 +5,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct { @@ -12,9 +14,7 @@ typedef struct Oid upper; } oidKEY; -/* -** OID ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_oid_compress); PG_FUNCTION_INFO_V1(gbt_oid_fetch); PG_FUNCTION_INFO_V1(gbt_oid_union); @@ -23,6 +23,7 @@ PG_FUNCTION_INFO_V1(gbt_oid_consistent); PG_FUNCTION_INFO_V1(gbt_oid_distance); PG_FUNCTION_INFO_V1(gbt_oid_penalty); PG_FUNCTION_INFO_V1(gbt_oid_same); +PG_FUNCTION_INFO_V1(gbt_oid_sortsupport); static bool @@ -113,10 +114,9 @@ oid_dist(PG_FUNCTION_ARGS) /************************************************** - * Oid ops + * GiST support functions **************************************************/ - Datum gbt_oid_compress(PG_FUNCTION_ARGS) { @@ -155,7 +155,6 @@ gbt_oid_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_oid_distance(PG_FUNCTION_ARGS) { @@ -173,7 +172,6 @@ gbt_oid_distance(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_oid_union(PG_FUNCTION_ARGS) { @@ -184,7 +182,6 @@ gbt_oid_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_oid_penalty(PG_FUNCTION_ARGS) { @@ -215,3 +212,29 @@ gbt_oid_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_oid_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + oidKEY *arg1 = (oidKEY *) DatumGetPointer(x); + oidKEY *arg2 = (oidKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + if (arg1->lower > arg2->lower) + return 1; + else if (arg1->lower < arg2->lower) + return -1; + else + return 0; +} + +Datum +gbt_oid_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_oid_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c index 8f80f54240f8f..ddee42504a192 100644 --- a/contrib/btree_gist/btree_text.c +++ b/contrib/btree_gist/btree_text.c @@ -7,10 +7,9 @@ #include "btree_utils_var.h" #include "mb/pg_wchar.h" #include "utils/fmgrprotos.h" +#include "utils/sortsupport.h" -/* -** Text ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_text_compress); PG_FUNCTION_INFO_V1(gbt_bpchar_compress); PG_FUNCTION_INFO_V1(gbt_text_union); @@ -19,6 +18,8 @@ PG_FUNCTION_INFO_V1(gbt_text_consistent); PG_FUNCTION_INFO_V1(gbt_bpchar_consistent); PG_FUNCTION_INFO_V1(gbt_text_penalty); PG_FUNCTION_INFO_V1(gbt_text_same); +PG_FUNCTION_INFO_V1(gbt_text_sortsupport); +PG_FUNCTION_INFO_V1(gbt_bpchar_sortsupport); /* define for comparison */ @@ -163,10 +164,9 @@ static gbtree_vinfo bptinfo = /************************************************** - * Text ops + * GiST support functions **************************************************/ - Datum gbt_text_compress(PG_FUNCTION_ARGS) { @@ -187,8 +187,6 @@ gbt_bpchar_compress(PG_FUNCTION_ARGS) return gbt_text_compress(fcinfo); } - - Datum gbt_text_consistent(PG_FUNCTION_ARGS) { @@ -216,7 +214,6 @@ gbt_text_consistent(PG_FUNCTION_ARGS) PG_RETURN_BOOL(retval); } - Datum gbt_bpchar_consistent(PG_FUNCTION_ARGS) { @@ -243,7 +240,6 @@ gbt_bpchar_consistent(PG_FUNCTION_ARGS) PG_RETURN_BOOL(retval); } - Datum gbt_text_union(PG_FUNCTION_ARGS) { @@ -254,7 +250,6 @@ gbt_text_union(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo)); } - Datum gbt_text_picksplit(PG_FUNCTION_ARGS) { @@ -277,7 +272,6 @@ gbt_text_same(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - Datum gbt_text_penalty(PG_FUNCTION_ARGS) { @@ -288,3 +282,69 @@ gbt_text_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } + +static int +gbt_text_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + GBT_VARKEY *key1 = PG_DETOAST_DATUM(x); + GBT_VARKEY *key2 = PG_DETOAST_DATUM(y); + + GBT_VARKEY_R arg1 = gbt_var_key_readable(key1); + GBT_VARKEY_R arg2 = gbt_var_key_readable(key2); + Datum result; + + /* for leaf items we expect lower == upper, so only compare lower */ + result = DirectFunctionCall2Coll(bttextcmp, + ssup->ssup_collation, + PointerGetDatum(arg1.lower), + PointerGetDatum(arg2.lower)); + + GBT_FREE_IF_COPY(key1, x); + GBT_FREE_IF_COPY(key2, y); + + return DatumGetInt32(result); +} + +Datum +gbt_text_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_text_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} + +static int +gbt_bpchar_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + GBT_VARKEY *key1 = PG_DETOAST_DATUM(x); + GBT_VARKEY *key2 = PG_DETOAST_DATUM(y); + + GBT_VARKEY_R arg1 = gbt_var_key_readable(key1); + GBT_VARKEY_R arg2 = gbt_var_key_readable(key2); + Datum result; + + /* for leaf items we expect lower == upper, so only compare lower */ + result = DirectFunctionCall2Coll(bpcharcmp, + ssup->ssup_collation, + PointerGetDatum(arg1.lower), + PointerGetDatum(arg2.lower)); + + GBT_FREE_IF_COPY(key1, x); + GBT_FREE_IF_COPY(key2, y); + + return DatumGetInt32(result); +} + +Datum +gbt_bpchar_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bpchar_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c index 2f7859340f641..9483846c4738b 100644 --- a/contrib/btree_gist/btree_time.c +++ b/contrib/btree_gist/btree_time.c @@ -7,6 +7,8 @@ #include "btree_utils_num.h" #include "utils/fmgrprotos.h" #include "utils/date.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" #include "utils/timestamp.h" typedef struct @@ -15,9 +17,7 @@ typedef struct TimeADT upper; } timeKEY; -/* -** time ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_time_compress); PG_FUNCTION_INFO_V1(gbt_timetz_compress); PG_FUNCTION_INFO_V1(gbt_time_fetch); @@ -28,13 +28,8 @@ PG_FUNCTION_INFO_V1(gbt_time_distance); PG_FUNCTION_INFO_V1(gbt_timetz_consistent); PG_FUNCTION_INFO_V1(gbt_time_penalty); PG_FUNCTION_INFO_V1(gbt_time_same); - - -#ifdef USE_FLOAT8_BYVAL -#define TimeADTGetDatumFast(X) TimeADTGetDatum(X) -#else -#define TimeADTGetDatumFast(X) PointerGetDatum(&(X)) -#endif +PG_FUNCTION_INFO_V1(gbt_time_sortsupport); +PG_FUNCTION_INFO_V1(gbt_timetz_sortsupport); static bool @@ -44,8 +39,8 @@ gbt_timegt(const void *a, const void *b, FmgrInfo *flinfo) const TimeADT *bb = (const TimeADT *) b; return DatumGetBool(DirectFunctionCall2(time_gt, - TimeADTGetDatumFast(*aa), - TimeADTGetDatumFast(*bb))); + TimeADTGetDatum(*aa), + TimeADTGetDatum(*bb))); } static bool @@ -55,8 +50,8 @@ gbt_timege(const void *a, const void *b, FmgrInfo *flinfo) const TimeADT *bb = (const TimeADT *) b; return DatumGetBool(DirectFunctionCall2(time_ge, - TimeADTGetDatumFast(*aa), - TimeADTGetDatumFast(*bb))); + TimeADTGetDatum(*aa), + TimeADTGetDatum(*bb))); } static bool @@ -66,8 +61,8 @@ gbt_timeeq(const void *a, const void *b, FmgrInfo *flinfo) const TimeADT *bb = (const TimeADT *) b; return DatumGetBool(DirectFunctionCall2(time_eq, - TimeADTGetDatumFast(*aa), - TimeADTGetDatumFast(*bb))); + TimeADTGetDatum(*aa), + TimeADTGetDatum(*bb))); } static bool @@ -77,8 +72,8 @@ gbt_timele(const void *a, const void *b, FmgrInfo *flinfo) const TimeADT *bb = (const TimeADT *) b; return DatumGetBool(DirectFunctionCall2(time_le, - TimeADTGetDatumFast(*aa), - TimeADTGetDatumFast(*bb))); + TimeADTGetDatum(*aa), + TimeADTGetDatum(*bb))); } static bool @@ -88,12 +83,10 @@ gbt_timelt(const void *a, const void *b, FmgrInfo *flinfo) const TimeADT *bb = (const TimeADT *) b; return DatumGetBool(DirectFunctionCall2(time_lt, - TimeADTGetDatumFast(*aa), - TimeADTGetDatumFast(*bb))); + TimeADTGetDatum(*aa), + TimeADTGetDatum(*bb))); } - - static int gbt_timekey_cmp(const void *a, const void *b, FmgrInfo *flinfo) { @@ -101,9 +94,9 @@ gbt_timekey_cmp(const void *a, const void *b, FmgrInfo *flinfo) timeKEY *ib = (timeKEY *) (((const Nsrt *) b)->t); int res; - res = DatumGetInt32(DirectFunctionCall2(time_cmp, TimeADTGetDatumFast(ia->lower), TimeADTGetDatumFast(ib->lower))); + res = DatumGetInt32(DirectFunctionCall2(time_cmp, TimeADTGetDatum(ia->lower), TimeADTGetDatum(ib->lower))); if (res == 0) - return DatumGetInt32(DirectFunctionCall2(time_cmp, TimeADTGetDatumFast(ia->upper), TimeADTGetDatumFast(ib->upper))); + return DatumGetInt32(DirectFunctionCall2(time_cmp, TimeADTGetDatum(ia->upper), TimeADTGetDatum(ib->upper))); return res; } @@ -116,8 +109,8 @@ gbt_time_dist(const void *a, const void *b, FmgrInfo *flinfo) Interval *i; i = DatumGetIntervalP(DirectFunctionCall2(time_mi_time, - TimeADTGetDatumFast(*aa), - TimeADTGetDatumFast(*bb))); + TimeADTGetDatum(*aa), + TimeADTGetDatum(*bb))); return fabs(INTERVAL_TO_SEC(i)); } @@ -150,11 +143,9 @@ time_dist(PG_FUNCTION_ARGS) /************************************************** - * time ops + * GiST support functions **************************************************/ - - Datum gbt_time_compress(PG_FUNCTION_ARGS) { @@ -163,7 +154,6 @@ gbt_time_compress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo)); } - Datum gbt_timetz_compress(PG_FUNCTION_ARGS) { @@ -262,7 +252,6 @@ gbt_timetz_consistent(PG_FUNCTION_ARGS) GIST_LEAF(entry), &tinfo, fcinfo->flinfo)); } - Datum gbt_time_union(PG_FUNCTION_ARGS) { @@ -273,7 +262,6 @@ gbt_time_union(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_union(out, entryvec, &tinfo, fcinfo->flinfo)); } - Datum gbt_time_penalty(PG_FUNCTION_ARGS) { @@ -285,14 +273,14 @@ gbt_time_penalty(PG_FUNCTION_ARGS) double res2; intr = DatumGetIntervalP(DirectFunctionCall2(time_mi_time, - TimeADTGetDatumFast(newentry->upper), - TimeADTGetDatumFast(origentry->upper))); + TimeADTGetDatum(newentry->upper), + TimeADTGetDatum(origentry->upper))); res = INTERVAL_TO_SEC(intr); res = Max(res, 0); intr = DatumGetIntervalP(DirectFunctionCall2(time_mi_time, - TimeADTGetDatumFast(origentry->lower), - TimeADTGetDatumFast(newentry->lower))); + TimeADTGetDatum(origentry->lower), + TimeADTGetDatum(newentry->lower))); res2 = INTERVAL_TO_SEC(intr); res2 = Max(res2, 0); @@ -303,8 +291,8 @@ gbt_time_penalty(PG_FUNCTION_ARGS) if (res > 0) { intr = DatumGetIntervalP(DirectFunctionCall2(time_mi_time, - TimeADTGetDatumFast(origentry->upper), - TimeADTGetDatumFast(origentry->lower))); + TimeADTGetDatum(origentry->upper), + TimeADTGetDatum(origentry->lower))); *result += FLT_MIN; *result += (float) (res / (res + INTERVAL_TO_SEC(intr))); *result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1)); @@ -313,7 +301,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } - Datum gbt_time_picksplit(PG_FUNCTION_ARGS) { @@ -332,3 +319,26 @@ gbt_time_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_timekey_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + timeKEY *arg1 = (timeKEY *) DatumGetPointer(x); + timeKEY *arg2 = (timeKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(DirectFunctionCall2(time_cmp, + TimeADTGetDatum(arg1->lower), + TimeADTGetDatum(arg2->lower))); +} + +Datum +gbt_time_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_timekey_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index 9e0d979dda989..b7bbae2f4d6fb 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -10,6 +10,8 @@ #include "utils/fmgrprotos.h" #include "utils/timestamp.h" #include "utils/float.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" typedef struct { @@ -17,9 +19,7 @@ typedef struct Timestamp upper; } tsKEY; -/* -** timestamp ops -*/ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_ts_compress); PG_FUNCTION_INFO_V1(gbt_tstz_compress); PG_FUNCTION_INFO_V1(gbt_ts_fetch); @@ -31,14 +31,10 @@ PG_FUNCTION_INFO_V1(gbt_tstz_consistent); PG_FUNCTION_INFO_V1(gbt_tstz_distance); PG_FUNCTION_INFO_V1(gbt_ts_penalty); PG_FUNCTION_INFO_V1(gbt_ts_same); +PG_FUNCTION_INFO_V1(gbt_ts_sortsupport); -#ifdef USE_FLOAT8_BYVAL -#define TimestampGetDatumFast(X) TimestampGetDatum(X) -#else -#define TimestampGetDatumFast(X) PointerGetDatum(&(X)) -#endif - +/* define for comparison */ static bool gbt_tsgt(const void *a, const void *b, FmgrInfo *flinfo) @@ -47,8 +43,8 @@ gbt_tsgt(const void *a, const void *b, FmgrInfo *flinfo) const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_gt, - TimestampGetDatumFast(*aa), - TimestampGetDatumFast(*bb))); + TimestampGetDatum(*aa), + TimestampGetDatum(*bb))); } static bool @@ -58,8 +54,8 @@ gbt_tsge(const void *a, const void *b, FmgrInfo *flinfo) const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_ge, - TimestampGetDatumFast(*aa), - TimestampGetDatumFast(*bb))); + TimestampGetDatum(*aa), + TimestampGetDatum(*bb))); } static bool @@ -69,8 +65,8 @@ gbt_tseq(const void *a, const void *b, FmgrInfo *flinfo) const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_eq, - TimestampGetDatumFast(*aa), - TimestampGetDatumFast(*bb))); + TimestampGetDatum(*aa), + TimestampGetDatum(*bb))); } static bool @@ -80,8 +76,8 @@ gbt_tsle(const void *a, const void *b, FmgrInfo *flinfo) const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_le, - TimestampGetDatumFast(*aa), - TimestampGetDatumFast(*bb))); + TimestampGetDatum(*aa), + TimestampGetDatum(*bb))); } static bool @@ -91,11 +87,10 @@ gbt_tslt(const void *a, const void *b, FmgrInfo *flinfo) const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_lt, - TimestampGetDatumFast(*aa), - TimestampGetDatumFast(*bb))); + TimestampGetDatum(*aa), + TimestampGetDatum(*bb))); } - static int gbt_tskey_cmp(const void *a, const void *b, FmgrInfo *flinfo) { @@ -103,9 +98,9 @@ gbt_tskey_cmp(const void *a, const void *b, FmgrInfo *flinfo) tsKEY *ib = (tsKEY *) (((const Nsrt *) b)->t); int res; - res = DatumGetInt32(DirectFunctionCall2(timestamp_cmp, TimestampGetDatumFast(ia->lower), TimestampGetDatumFast(ib->lower))); + res = DatumGetInt32(DirectFunctionCall2(timestamp_cmp, TimestampGetDatum(ia->lower), TimestampGetDatum(ib->lower))); if (res == 0) - return DatumGetInt32(DirectFunctionCall2(timestamp_cmp, TimestampGetDatumFast(ia->upper), TimestampGetDatumFast(ib->upper))); + return DatumGetInt32(DirectFunctionCall2(timestamp_cmp, TimestampGetDatum(ia->upper), TimestampGetDatum(ib->upper))); return res; } @@ -121,12 +116,11 @@ gbt_ts_dist(const void *a, const void *b, FmgrInfo *flinfo) return get_float8_infinity(); i = DatumGetIntervalP(DirectFunctionCall2(timestamp_mi, - TimestampGetDatumFast(*aa), - TimestampGetDatumFast(*bb))); + TimestampGetDatum(*aa), + TimestampGetDatum(*bb))); return fabs(INTERVAL_TO_SEC(i)); } - static const gbtree_ninfo tinfo = { gbt_t_ts, @@ -190,12 +184,10 @@ tstz_dist(PG_FUNCTION_ARGS) PG_RETURN_INTERVAL_P(abs_interval(r)); } - /************************************************** - * timestamp ops + * GiST support functions **************************************************/ - static inline Timestamp tstz_to_ts_gmt(TimestampTz ts) { @@ -212,7 +204,6 @@ gbt_ts_compress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo)); } - Datum gbt_tstz_compress(PG_FUNCTION_ARGS) { @@ -398,3 +389,26 @@ gbt_ts_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_ts_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + tsKEY *arg1 = (tsKEY *) DatumGetPointer(x); + tsKEY *arg2 = (tsKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return DatumGetInt32(DirectFunctionCall2(timestamp_cmp, + TimestampGetDatum(arg1->lower), + TimestampGetDatum(arg2->lower))); +} + +Datum +gbt_ts_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_ts_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c index 346ee837d75f4..446fa930b92c4 100644 --- a/contrib/btree_gist/btree_utils_num.c +++ b/contrib/btree_gist/btree_utils_num.c @@ -119,38 +119,38 @@ gbt_num_fetch(GISTENTRY *entry, const gbtree_ninfo *tinfo) switch (tinfo->t) { case gbt_t_bool: - datum = BoolGetDatum(*(bool *) entry->key); + datum = BoolGetDatum(*(bool *) DatumGetPointer(entry->key)); break; case gbt_t_int2: - datum = Int16GetDatum(*(int16 *) entry->key); + datum = Int16GetDatum(*(int16 *) DatumGetPointer(entry->key)); break; case gbt_t_int4: - datum = Int32GetDatum(*(int32 *) entry->key); + datum = Int32GetDatum(*(int32 *) DatumGetPointer(entry->key)); break; case gbt_t_int8: - datum = Int64GetDatum(*(int64 *) entry->key); + datum = Int64GetDatum(*(int64 *) DatumGetPointer(entry->key)); break; case gbt_t_oid: case gbt_t_enum: - datum = ObjectIdGetDatum(*(Oid *) entry->key); + datum = ObjectIdGetDatum(*(Oid *) DatumGetPointer(entry->key)); break; case gbt_t_float4: - datum = Float4GetDatum(*(float4 *) entry->key); + datum = Float4GetDatum(*(float4 *) DatumGetPointer(entry->key)); break; case gbt_t_float8: - datum = Float8GetDatum(*(float8 *) entry->key); + datum = Float8GetDatum(*(float8 *) DatumGetPointer(entry->key)); break; case gbt_t_date: - datum = DateADTGetDatum(*(DateADT *) entry->key); + datum = DateADTGetDatum(*(DateADT *) DatumGetPointer(entry->key)); break; case gbt_t_time: - datum = TimeADTGetDatum(*(TimeADT *) entry->key); + datum = TimeADTGetDatum(*(TimeADT *) DatumGetPointer(entry->key)); break; case gbt_t_ts: - datum = TimestampGetDatum(*(Timestamp *) entry->key); + datum = TimestampGetDatum(*(Timestamp *) DatumGetPointer(entry->key)); break; case gbt_t_cash: - datum = CashGetDatum(*(Cash *) entry->key); + datum = CashGetDatum(*(Cash *) DatumGetPointer(entry->key)); break; default: datum = entry->key; diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c index d9df2356cd1e4..fb466e5aa32ba 100644 --- a/contrib/btree_gist/btree_utils_var.c +++ b/contrib/btree_gist/btree_utils_var.c @@ -11,6 +11,7 @@ #include "btree_utils_var.h" #include "mb/pg_wchar.h" #include "utils/rel.h" +#include "varatt.h" /* used for key sorting */ typedef struct diff --git a/contrib/btree_gist/btree_utils_var.h b/contrib/btree_gist/btree_utils_var.h index 9302d41ced68f..75ad33d24fcd1 100644 --- a/contrib/btree_gist/btree_utils_var.h +++ b/contrib/btree_gist/btree_utils_var.h @@ -41,7 +41,17 @@ typedef struct GBT_VARKEY *(*f_l2n) (GBT_VARKEY *, FmgrInfo *flinfo); /* convert leaf to node */ } gbtree_vinfo; - +/* + * Free ptr1 in case its a copy of ptr2. + * + * This is adapted from varlena's PG_FREE_IF_COPY, though doesn't require + * fcinfo access. + */ +#define GBT_FREE_IF_COPY(ptr1, ptr2) \ + do { \ + if ((Pointer) (ptr1) != DatumGetPointer(ptr2)) \ + pfree(ptr1); \ + } while (0) extern GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY *k); diff --git a/contrib/btree_gist/btree_uuid.c b/contrib/btree_gist/btree_uuid.c index f4c5c6e58929e..07f304f39f14c 100644 --- a/contrib/btree_gist/btree_uuid.c +++ b/contrib/btree_gist/btree_uuid.c @@ -6,6 +6,8 @@ #include "btree_gist.h" #include "btree_utils_num.h" #include "port/pg_bswap.h" +#include "utils/rel.h" +#include "utils/sortsupport.h" #include "utils/uuid.h" typedef struct @@ -15,9 +17,7 @@ typedef struct } uuidKEY; -/* - * UUID ops - */ +/* GiST support functions */ PG_FUNCTION_INFO_V1(gbt_uuid_compress); PG_FUNCTION_INFO_V1(gbt_uuid_fetch); PG_FUNCTION_INFO_V1(gbt_uuid_union); @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_uuid_picksplit); PG_FUNCTION_INFO_V1(gbt_uuid_consistent); PG_FUNCTION_INFO_V1(gbt_uuid_penalty); PG_FUNCTION_INFO_V1(gbt_uuid_same); +PG_FUNCTION_INFO_V1(gbt_uuid_sortsupport); static int @@ -93,10 +94,9 @@ static const gbtree_ninfo tinfo = /************************************************** - * uuid ops + * GiST support functions **************************************************/ - Datum gbt_uuid_compress(PG_FUNCTION_ARGS) { @@ -233,3 +233,24 @@ gbt_uuid_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_uuid_ssup_cmp(Datum x, Datum y, SortSupport ssup) +{ + uuidKEY *arg1 = (uuidKEY *) DatumGetPointer(x); + uuidKEY *arg2 = (uuidKEY *) DatumGetPointer(y); + + /* for leaf items we expect lower == upper, so only compare lower */ + return uuid_internal_cmp(&arg1->lower, &arg2->lower); +} + +Datum +gbt_uuid_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_uuid_ssup_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/expected/enum.out b/contrib/btree_gist/expected/enum.out index c4b769dd4b77c..5782f43883859 100644 --- a/contrib/btree_gist/expected/enum.out +++ b/contrib/btree_gist/expected/enum.out @@ -1,5 +1,8 @@ -- enum check -create type rainbow as enum ('r','o','y','g','b','i','v'); +create type rainbow as enum ('r','o','g','b','i','v'); +-- enum values added later take some different codepaths internally, +-- so make sure we have coverage for those too +alter type rainbow add value 'y' before 'g'; CREATE TABLE enumtmp (a rainbow); \copy enumtmp from 'data/enum.data' SET enable_seqscan=on; diff --git a/contrib/btree_gist/expected/stratnum.out b/contrib/btree_gist/expected/stratnum.out index dd0edaf4a2062..8222b66153833 100644 --- a/contrib/btree_gist/expected/stratnum.out +++ b/contrib/btree_gist/expected/stratnum.out @@ -1,13 +1,13 @@ --- test stratnum support func -SELECT gist_stratnum_btree(7); - gist_stratnum_btree ---------------------- - 0 +-- test stratnum translation support func +SELECT gist_translate_cmptype_btree(7); + gist_translate_cmptype_btree +------------------------------ + 0 (1 row) -SELECT gist_stratnum_btree(3); - gist_stratnum_btree ---------------------- - 3 +SELECT gist_translate_cmptype_btree(3); + gist_translate_cmptype_btree +------------------------------ + 3 (1 row) diff --git a/contrib/btree_gist/sql/enum.sql b/contrib/btree_gist/sql/enum.sql index 476211e97952c..d662cb6322102 100644 --- a/contrib/btree_gist/sql/enum.sql +++ b/contrib/btree_gist/sql/enum.sql @@ -1,6 +1,10 @@ -- enum check -create type rainbow as enum ('r','o','y','g','b','i','v'); +create type rainbow as enum ('r','o','g','b','i','v'); + +-- enum values added later take some different codepaths internally, +-- so make sure we have coverage for those too +alter type rainbow add value 'y' before 'g'; CREATE TABLE enumtmp (a rainbow); diff --git a/contrib/btree_gist/sql/stratnum.sql b/contrib/btree_gist/sql/stratnum.sql index 75adddad84925..da8bbf883b0cc 100644 --- a/contrib/btree_gist/sql/stratnum.sql +++ b/contrib/btree_gist/sql/stratnum.sql @@ -1,3 +1,3 @@ --- test stratnum support func -SELECT gist_stratnum_btree(7); -SELECT gist_stratnum_btree(3); +-- test stratnum translation support func +SELECT gist_translate_cmptype_btree(7); +SELECT gist_translate_cmptype_btree(3); diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index c2e695e364e93..0cf4c27f2e967 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -101,11 +101,11 @@ static void materializeQueryResult(FunctionCallInfo fcinfo, const char *conname, const char *sql, bool fail); -static PGresult *storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const char *sql); -static void storeRow(volatile storeInfo *sinfo, PGresult *res, bool first); +static PGresult *storeQueryResult(storeInfo *sinfo, PGconn *conn, const char *sql); +static void storeRow(storeInfo *sinfo, PGresult *res, bool first); static remoteConn *getConnectionByName(const char *name); static HTAB *createConnHash(void); -static void createNewConnection(const char *name, remoteConn *rconn); +static remoteConn *createNewConnection(const char *name); static void deleteConnection(const char *name); static char **get_pkey_attnames(Relation rel, int16 *indnkeyatts); static char **get_text_array_contents(ArrayType *array, int *numitems); @@ -119,7 +119,8 @@ static Relation get_rel_from_relname(text *relname_text, LOCKMODE lockmode, AclM static char *generate_relation_name(Relation rel); static void dblink_connstr_check(const char *connstr); static bool dblink_connstr_has_pw(const char *connstr); -static void dblink_security_check(PGconn *conn, remoteConn *rconn, const char *connstr); +static void dblink_security_check(PGconn *conn, const char *connname, + const char *connstr); static void dblink_res_error(PGconn *conn, const char *conname, PGresult *res, bool fail, const char *fmt,...) pg_attribute_printf(5, 6); static char *get_connect_string(const char *servername); @@ -147,29 +148,27 @@ static uint32 dblink_we_get_conn = 0; static uint32 dblink_we_get_result = 0; /* - * Following is list that holds multiple remote connections. + * Following is hash that holds multiple remote connections. * Calling convention of each dblink function changes to accept - * connection name as the first parameter. The connection list is + * connection name as the first parameter. The connection hash is * much like ecpg e.g. a mapping between a name and a PGconn object. + * + * To avoid potentially leaking a PGconn object in case of out-of-memory + * errors, we first create the hash entry, then open the PGconn. + * Hence, a hash entry whose rconn.conn pointer is NULL must be + * understood as a leftover from a failed create; it should be ignored + * by lookup operations, and silently replaced by create operations. */ typedef struct remoteConnHashEnt { char name[NAMEDATALEN]; - remoteConn *rconn; + remoteConn rconn; } remoteConnHashEnt; /* initial number of connection hashes */ #define NUMCONN 16 -static char * -xpstrdup(const char *in) -{ - if (in == NULL) - return NULL; - return pstrdup(in); -} - pg_noreturn static void dblink_res_internalerror(PGconn *conn, PGresult *res, const char *p2) { @@ -233,7 +232,11 @@ dblink_get_conn(char *conname_or_str, errmsg("could not establish connection"), errdetail_internal("%s", msg))); } - dblink_security_check(conn, rconn, connstr); + + PQsetNoticeReceiver(conn, libpqsrv_notice_receiver, + "received message via remote connection"); + + dblink_security_check(conn, NULL, connstr); if (PQclientEncoding(conn) != GetDatabaseEncoding()) PQsetClientEncoding(conn, GetDatabaseEncodingName()); freeconn = true; @@ -296,15 +299,6 @@ dblink_connect(PG_FUNCTION_ARGS) else if (PG_NARGS() == 1) conname_or_str = text_to_cstring(PG_GETARG_TEXT_PP(0)); - if (connname) - { - rconn = (remoteConn *) MemoryContextAlloc(TopMemoryContext, - sizeof(remoteConn)); - rconn->conn = NULL; - rconn->openCursorCount = 0; - rconn->newXactForCursor = false; - } - /* first check for valid foreign data server */ connstr = get_connect_string(conname_or_str); if (connstr == NULL) @@ -317,6 +311,13 @@ dblink_connect(PG_FUNCTION_ARGS) if (dblink_we_connect == 0) dblink_we_connect = WaitEventExtensionNew("DblinkConnect"); + /* if we need a hashtable entry, make that first, since it might fail */ + if (connname) + { + rconn = createNewConnection(connname); + Assert(rconn->conn == NULL); + } + /* OK to make connection */ conn = libpqsrv_connect(connstr, dblink_we_connect); @@ -324,8 +325,8 @@ dblink_connect(PG_FUNCTION_ARGS) { msg = pchomp(PQerrorMessage(conn)); libpqsrv_disconnect(conn); - if (rconn) - pfree(rconn); + if (connname) + deleteConnection(connname); ereport(ERROR, (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), @@ -333,17 +334,20 @@ dblink_connect(PG_FUNCTION_ARGS) errdetail_internal("%s", msg))); } + PQsetNoticeReceiver(conn, libpqsrv_notice_receiver, + "received message via remote connection"); + /* check password actually used if not superuser */ - dblink_security_check(conn, rconn, connstr); + dblink_security_check(conn, connname, connstr); /* attempt to set client encoding to match server encoding, if needed */ if (PQclientEncoding(conn) != GetDatabaseEncoding()) PQsetClientEncoding(conn, GetDatabaseEncodingName()); + /* all OK, save away the conn */ if (connname) { rconn->conn = conn; - createNewConnection(connname, rconn); } else { @@ -383,10 +387,7 @@ dblink_disconnect(PG_FUNCTION_ARGS) libpqsrv_disconnect(conn); if (rconn) - { deleteConnection(conname); - pfree(rconn); - } else pconn->conn = NULL; @@ -861,131 +862,123 @@ static void materializeResult(FunctionCallInfo fcinfo, PGconn *conn, PGresult *res) { ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + TupleDesc tupdesc; + bool is_sql_cmd; + int ntuples; + int nfields; /* prepTuplestoreResult must have been called previously */ Assert(rsinfo->returnMode == SFRM_Materialize); - PG_TRY(); + if (PQresultStatus(res) == PGRES_COMMAND_OK) { - TupleDesc tupdesc; - bool is_sql_cmd; - int ntuples; - int nfields; + is_sql_cmd = true; - if (PQresultStatus(res) == PGRES_COMMAND_OK) - { - is_sql_cmd = true; + /* + * need a tuple descriptor representing one TEXT column to return the + * command status string as our result tuple + */ + tupdesc = CreateTemplateTupleDesc(1); + TupleDescInitEntry(tupdesc, (AttrNumber) 1, "status", + TEXTOID, -1, 0); + ntuples = 1; + nfields = 1; + } + else + { + Assert(PQresultStatus(res) == PGRES_TUPLES_OK); - /* - * need a tuple descriptor representing one TEXT column to return - * the command status string as our result tuple - */ - tupdesc = CreateTemplateTupleDesc(1); - TupleDescInitEntry(tupdesc, (AttrNumber) 1, "status", - TEXTOID, -1, 0); - ntuples = 1; - nfields = 1; - } - else - { - Assert(PQresultStatus(res) == PGRES_TUPLES_OK); + is_sql_cmd = false; - is_sql_cmd = false; + /* get a tuple descriptor for our result type */ + switch (get_call_result_type(fcinfo, NULL, &tupdesc)) + { + case TYPEFUNC_COMPOSITE: + /* success */ + break; + case TYPEFUNC_RECORD: + /* failed to determine actual type of RECORD */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("function returning record called in context " + "that cannot accept type record"))); + break; + default: + /* result type isn't composite */ + elog(ERROR, "return type must be a row type"); + break; + } - /* get a tuple descriptor for our result type */ - switch (get_call_result_type(fcinfo, NULL, &tupdesc)) - { - case TYPEFUNC_COMPOSITE: - /* success */ - break; - case TYPEFUNC_RECORD: - /* failed to determine actual type of RECORD */ - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("function returning record called in context " - "that cannot accept type record"))); - break; - default: - /* result type isn't composite */ - elog(ERROR, "return type must be a row type"); - break; - } + /* make sure we have a persistent copy of the tupdesc */ + tupdesc = CreateTupleDescCopy(tupdesc); + ntuples = PQntuples(res); + nfields = PQnfields(res); + } - /* make sure we have a persistent copy of the tupdesc */ - tupdesc = CreateTupleDescCopy(tupdesc); - ntuples = PQntuples(res); - nfields = PQnfields(res); - } + /* + * check result and tuple descriptor have the same number of columns + */ + if (nfields != tupdesc->natts) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("remote query result rowtype does not match " + "the specified FROM clause rowtype"))); - /* - * check result and tuple descriptor have the same number of columns - */ - if (nfields != tupdesc->natts) - ereport(ERROR, - (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("remote query result rowtype does not match " - "the specified FROM clause rowtype"))); + if (ntuples > 0) + { + AttInMetadata *attinmeta; + int nestlevel = -1; + Tuplestorestate *tupstore; + MemoryContext oldcontext; + int row; + char **values; - if (ntuples > 0) - { - AttInMetadata *attinmeta; - int nestlevel = -1; - Tuplestorestate *tupstore; - MemoryContext oldcontext; - int row; - char **values; + attinmeta = TupleDescGetAttInMetadata(tupdesc); - attinmeta = TupleDescGetAttInMetadata(tupdesc); + /* Set GUCs to ensure we read GUC-sensitive data types correctly */ + if (!is_sql_cmd) + nestlevel = applyRemoteGucs(conn); - /* Set GUCs to ensure we read GUC-sensitive data types correctly */ - if (!is_sql_cmd) - nestlevel = applyRemoteGucs(conn); + oldcontext = MemoryContextSwitchTo(rsinfo->econtext->ecxt_per_query_memory); + tupstore = tuplestore_begin_heap(true, false, work_mem); + rsinfo->setResult = tupstore; + rsinfo->setDesc = tupdesc; + MemoryContextSwitchTo(oldcontext); - oldcontext = MemoryContextSwitchTo(rsinfo->econtext->ecxt_per_query_memory); - tupstore = tuplestore_begin_heap(true, false, work_mem); - rsinfo->setResult = tupstore; - rsinfo->setDesc = tupdesc; - MemoryContextSwitchTo(oldcontext); + values = palloc_array(char *, nfields); - values = palloc_array(char *, nfields); + /* put all tuples into the tuplestore */ + for (row = 0; row < ntuples; row++) + { + HeapTuple tuple; - /* put all tuples into the tuplestore */ - for (row = 0; row < ntuples; row++) + if (!is_sql_cmd) { - HeapTuple tuple; + int i; - if (!is_sql_cmd) - { - int i; - - for (i = 0; i < nfields; i++) - { - if (PQgetisnull(res, row, i)) - values[i] = NULL; - else - values[i] = PQgetvalue(res, row, i); - } - } - else + for (i = 0; i < nfields; i++) { - values[0] = PQcmdStatus(res); + if (PQgetisnull(res, row, i)) + values[i] = NULL; + else + values[i] = PQgetvalue(res, row, i); } - - /* build the tuple and put it into the tuplestore. */ - tuple = BuildTupleFromCStrings(attinmeta, values); - tuplestore_puttuple(tupstore, tuple); + } + else + { + values[0] = PQcmdStatus(res); } - /* clean up GUC settings, if we changed any */ - restoreLocalGucs(nestlevel); + /* build the tuple and put it into the tuplestore. */ + tuple = BuildTupleFromCStrings(attinmeta, values); + tuplestore_puttuple(tupstore, tuple); } + + /* clean up GUC settings, if we changed any */ + restoreLocalGucs(nestlevel); } - PG_FINALLY(); - { - /* be sure to release the libpq result */ - PQclear(res); - } - PG_END_TRY(); + + PQclear(res); } /* @@ -1004,16 +997,17 @@ materializeQueryResult(FunctionCallInfo fcinfo, bool fail) { ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; - PGresult *volatile res = NULL; - volatile storeInfo sinfo = {0}; /* prepTuplestoreResult must have been called previously */ Assert(rsinfo->returnMode == SFRM_Materialize); - sinfo.fcinfo = fcinfo; - + /* Use a PG_TRY block to ensure we pump libpq dry of results */ PG_TRY(); { + storeInfo sinfo = {0}; + PGresult *res; + + sinfo.fcinfo = fcinfo; /* Create short-lived memory context for data conversions */ sinfo.tmpcontext = AllocSetContextCreate(CurrentMemoryContext, "dblink temporary context", @@ -1026,14 +1020,7 @@ materializeQueryResult(FunctionCallInfo fcinfo, (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK)) { - /* - * dblink_res_error will clear the passed PGresult, so we need - * this ugly dance to avoid doing so twice during error exit - */ - PGresult *res1 = res; - - res = NULL; - dblink_res_error(conn, conname, res1, fail, + dblink_res_error(conn, conname, res, fail, "while executing query"); /* if fail isn't set, we'll return an empty query result */ } @@ -1072,7 +1059,6 @@ materializeQueryResult(FunctionCallInfo fcinfo, tuplestore_puttuple(tupstore, tuple); PQclear(res); - res = NULL; } else { @@ -1081,26 +1067,20 @@ materializeQueryResult(FunctionCallInfo fcinfo, Assert(rsinfo->setResult != NULL); PQclear(res); - res = NULL; } /* clean up data conversion short-lived memory context */ if (sinfo.tmpcontext != NULL) MemoryContextDelete(sinfo.tmpcontext); - sinfo.tmpcontext = NULL; PQclear(sinfo.last_res); - sinfo.last_res = NULL; PQclear(sinfo.cur_res); - sinfo.cur_res = NULL; } PG_CATCH(); { - /* be sure to release any libpq result we collected */ - PQclear(res); - PQclear(sinfo.last_res); - PQclear(sinfo.cur_res); - /* and clear out any pending data in libpq */ + PGresult *res; + + /* be sure to clear out any pending data in libpq */ while ((res = libpqsrv_get_result(conn, dblink_we_get_result)) != NULL) PQclear(res); @@ -1113,7 +1093,7 @@ materializeQueryResult(FunctionCallInfo fcinfo, * Execute query, and send any result rows to sinfo->tuplestore. */ static PGresult * -storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const char *sql) +storeQueryResult(storeInfo *sinfo, PGconn *conn, const char *sql) { bool first = true; int nestlevel = -1; @@ -1181,7 +1161,7 @@ storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const char *sql) * (in this case the PGresult might contain either zero or one row). */ static void -storeRow(volatile storeInfo *sinfo, PGresult *res, bool first) +storeRow(storeInfo *sinfo, PGresult *res, bool first) { int nfields = PQnfields(res); HeapTuple tuple; @@ -1304,6 +1284,9 @@ dblink_get_connections(PG_FUNCTION_ARGS) hash_seq_init(&status, remoteConnHash); while ((hentry = (remoteConnHashEnt *) hash_seq_search(&status)) != NULL) { + /* ignore it if it's not an open connection */ + if (hentry->rconn.conn == NULL) + continue; /* stash away current value */ astate = accumArrayResult(astate, CStringGetTextDatum(hentry->name), @@ -2539,8 +2522,8 @@ getConnectionByName(const char *name) hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key, HASH_FIND, NULL); - if (hentry) - return hentry->rconn; + if (hentry && hentry->rconn.conn != NULL) + return &hentry->rconn; return NULL; } @@ -2557,8 +2540,8 @@ createConnHash(void) HASH_ELEM | HASH_STRINGS); } -static void -createNewConnection(const char *name, remoteConn *rconn) +static remoteConn * +createNewConnection(const char *name) { remoteConnHashEnt *hentry; bool found; @@ -2572,17 +2555,15 @@ createNewConnection(const char *name, remoteConn *rconn) hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key, HASH_ENTER, &found); - if (found) - { - libpqsrv_disconnect(rconn->conn); - pfree(rconn); - + if (found && hentry->rconn.conn != NULL) ereport(ERROR, (errcode(ERRCODE_DUPLICATE_OBJECT), errmsg("duplicate connection name"))); - } - hentry->rconn = rconn; + /* New, or reusable, so initialize the rconn struct to zeroes */ + memset(&hentry->rconn, 0, sizeof(remoteConn)); + + return &hentry->rconn; } static void @@ -2662,7 +2643,7 @@ dblink_connstr_has_required_scram_options(const char *connstr) PQconninfoFree(options); } - has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort->has_scram_keys; + has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort != NULL && MyProcPort->has_scram_keys; return (has_scram_keys && has_require_auth); } @@ -2671,9 +2652,12 @@ dblink_connstr_has_required_scram_options(const char *connstr) * We need to make sure that the connection made used credentials * which were provided by the user, so check what credentials were * used to connect and then make sure that they came from the user. + * + * On failure, we close "conn" and also delete the hashtable entry + * identified by "connname" (if that's not NULL). */ static void -dblink_security_check(PGconn *conn, remoteConn *rconn, const char *connstr) +dblink_security_check(PGconn *conn, const char *connname, const char *connstr) { /* Superuser bypasses security check */ if (superuser()) @@ -2692,7 +2676,7 @@ dblink_security_check(PGconn *conn, remoteConn *rconn, const char *connstr) * only added if UseScramPassthrough is set, and the user is not allowed * to add the SCRAM keys on fdw and user mapping options. */ - if (MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr)) + if (MyProcPort != NULL && MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr)) return; #ifdef ENABLE_GSS @@ -2703,8 +2687,8 @@ dblink_security_check(PGconn *conn, remoteConn *rconn, const char *connstr) /* Otherwise, fail out */ libpqsrv_disconnect(conn); - if (rconn) - pfree(rconn); + if (connname) + deleteConnection(connname); ereport(ERROR, (errcode(ERRCODE_S_R_E_PROHIBITED_SQL_STATEMENT_ATTEMPTED), @@ -2765,7 +2749,7 @@ dblink_connstr_check(const char *connstr) if (dblink_connstr_has_pw(connstr)) return; - if (MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr)) + if (MyProcPort != NULL && MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr)) return; #ifdef ENABLE_GSS @@ -2782,10 +2766,13 @@ dblink_connstr_check(const char *connstr) /* * Report an error received from the remote server * - * res: the received error result (will be freed) + * res: the received error result * fail: true for ERROR ereport, false for NOTICE * fmt and following args: sprintf-style format and values for errcontext; * the resulting string should be worded like "while " + * + * If "res" is not NULL, it'll be PQclear'ed here (unless we throw error, + * in which case memory context cleanup will clear it eventually). */ static void dblink_res_error(PGconn *conn, const char *conname, PGresult *res, @@ -2793,15 +2780,11 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res, { int level; char *pg_diag_sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); - char *pg_diag_message_primary = PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY); - char *pg_diag_message_detail = PQresultErrorField(res, PG_DIAG_MESSAGE_DETAIL); - char *pg_diag_message_hint = PQresultErrorField(res, PG_DIAG_MESSAGE_HINT); - char *pg_diag_context = PQresultErrorField(res, PG_DIAG_CONTEXT); + char *message_primary = PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY); + char *message_detail = PQresultErrorField(res, PG_DIAG_MESSAGE_DETAIL); + char *message_hint = PQresultErrorField(res, PG_DIAG_MESSAGE_HINT); + char *message_context = PQresultErrorField(res, PG_DIAG_CONTEXT); int sqlstate; - char *message_primary; - char *message_detail; - char *message_hint; - char *message_context; va_list ap; char dblink_context_msg[512]; @@ -2819,11 +2802,6 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res, else sqlstate = ERRCODE_CONNECTION_FAILURE; - message_primary = xpstrdup(pg_diag_message_primary); - message_detail = xpstrdup(pg_diag_message_detail); - message_hint = xpstrdup(pg_diag_message_hint); - message_context = xpstrdup(pg_diag_context); - /* * If we don't get a message from the PGresult, try the PGconn. This is * needed because for connection-level failures, PQgetResult may just @@ -2832,14 +2810,6 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res, if (message_primary == NULL) message_primary = pchomp(PQerrorMessage(conn)); - /* - * Now that we've copied all the data we need out of the PGresult, it's - * safe to free it. We must do this to avoid PGresult leakage. We're - * leaking all the strings too, but those are in palloc'd memory that will - * get cleaned up eventually. - */ - PQclear(res); - /* * Format the basic errcontext string. Below, we'll add on something * about the connection name. That's a violation of the translatability @@ -2864,6 +2834,7 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res, dblink_context_msg, conname)) : (errcontext("%s on unnamed dblink connection", dblink_context_msg)))); + PQclear(res); } /* @@ -2925,7 +2896,7 @@ get_connect_string(const char *servername) * the user overwrites these options we can ereport on * dblink_connstr_check and dblink_security_check. */ - if (MyProcPort->has_scram_keys && UseScramPassthrough(foreign_server, user_mapping)) + if (MyProcPort != NULL && MyProcPort->has_scram_keys && UseScramPassthrough(foreign_server, user_mapping)) appendSCRAMKeysInfo(&buf); foreach(cell, fdw->options) @@ -3094,6 +3065,13 @@ is_valid_dblink_option(const PQconninfoOption *options, const char *option, if (strcmp(opt->keyword, "client_encoding") == 0) return false; + /* + * Disallow OAuth options for now, since the builtin flow communicates on + * stderr by default and can't cache tokens yet. + */ + if (strncmp(opt->keyword, "oauth_", strlen("oauth_")) == 0) + return false; + /* * If the option is "user" or marked secure, it should be specified only * in USER MAPPING. Others should be specified only in SERVER. @@ -3211,7 +3189,7 @@ appendSCRAMKeysInfo(StringInfo buf) len = pg_b64_enc_len(sizeof(MyProcPort->scram_ClientKey)); /* don't forget the zero-terminator */ client_key = palloc0(len + 1); - encoded_len = pg_b64_encode((const char *) MyProcPort->scram_ClientKey, + encoded_len = pg_b64_encode(MyProcPort->scram_ClientKey, sizeof(MyProcPort->scram_ClientKey), client_key, len); if (encoded_len < 0) @@ -3220,7 +3198,7 @@ appendSCRAMKeysInfo(StringInfo buf) len = pg_b64_enc_len(sizeof(MyProcPort->scram_ServerKey)); /* don't forget the zero-terminator */ server_key = palloc0(len + 1); - encoded_len = pg_b64_encode((const char *) MyProcPort->scram_ServerKey, + encoded_len = pg_b64_encode(MyProcPort->scram_ServerKey, sizeof(MyProcPort->scram_ServerKey), server_key, len); if (encoded_len < 0) @@ -3228,7 +3206,7 @@ appendSCRAMKeysInfo(StringInfo buf) appendStringInfo(buf, "scram_client_key='%s' ", client_key); appendStringInfo(buf, "scram_server_key='%s' ", server_key); - appendStringInfo(buf, "require_auth='scram-sha-256' "); + appendStringInfoString(buf, "require_auth='scram-sha-256' "); pfree(client_key); pfree(server_key); diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out index 7809f58d96b5f..c70c79574fd1d 100644 --- a/contrib/dblink/expected/dblink.out +++ b/contrib/dblink/expected/dblink.out @@ -898,6 +898,17 @@ CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (server 'localhost'); -- fail, can't specify server here ERROR: invalid option "server" CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (user :'USER'); +-- OAuth options are not allowed in either context +ALTER SERVER fdtest OPTIONS (ADD oauth_issuer 'https://example.com'); +ERROR: invalid option "oauth_issuer" +ALTER SERVER fdtest OPTIONS (ADD oauth_client_id 'myID'); +ERROR: invalid option "oauth_client_id" +ALTER USER MAPPING FOR public SERVER fdtest + OPTIONS (ADD oauth_issuer 'https://example.com'); +ERROR: invalid option "oauth_issuer" +ALTER USER MAPPING FOR public SERVER fdtest + OPTIONS (ADD oauth_client_id 'myID'); +ERROR: invalid option "oauth_client_id" GRANT USAGE ON FOREIGN SERVER fdtest TO regress_dblink_user; GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO regress_dblink_user; SET SESSION AUTHORIZATION regress_dblink_user; diff --git a/contrib/dblink/meson.build b/contrib/dblink/meson.build index dfd8eb6877e90..a19ce6cf4b924 100644 --- a/contrib/dblink/meson.build +++ b/contrib/dblink/meson.build @@ -34,7 +34,7 @@ tests += { 'sql': [ 'dblink', ], - 'regress_args': ['--dlpath', meson.build_root() / 'src/test/regress'], + 'regress_args': ['--dlpath', meson.project_build_root() / 'src/test/regress'], }, 'tap': { 'tests': [ diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.sql index 7870ce5d5a43d..365b21036e854 100644 --- a/contrib/dblink/sql/dblink.sql +++ b/contrib/dblink/sql/dblink.sql @@ -469,6 +469,14 @@ CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (server 'localhost'); -- fail, can't specify server here CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (user :'USER'); +-- OAuth options are not allowed in either context +ALTER SERVER fdtest OPTIONS (ADD oauth_issuer 'https://example.com'); +ALTER SERVER fdtest OPTIONS (ADD oauth_client_id 'myID'); +ALTER USER MAPPING FOR public SERVER fdtest + OPTIONS (ADD oauth_issuer 'https://example.com'); +ALTER USER MAPPING FOR public SERVER fdtest + OPTIONS (ADD oauth_client_id 'myID'); + GRANT USAGE ON FOREIGN SERVER fdtest TO regress_dblink_user; GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO regress_dblink_user; diff --git a/contrib/dblink/t/001_auth_scram.pl b/contrib/dblink/t/001_auth_scram.pl index b35d02b660f51..ef3dea6c5ad19 100644 --- a/contrib/dblink/t/001_auth_scram.pl +++ b/contrib/dblink/t/001_auth_scram.pl @@ -251,4 +251,3 @@ sub setup_table } done_testing(); - diff --git a/contrib/file_fdw/expected/file_fdw.out b/contrib/file_fdw/expected/file_fdw.out index df8d43b374989..246e3d3e566fc 100644 --- a/contrib/file_fdw/expected/file_fdw.out +++ b/contrib/file_fdw/expected/file_fdw.out @@ -48,6 +48,10 @@ SET ROLE regress_file_fdw_superuser; CREATE USER MAPPING FOR regress_file_fdw_superuser SERVER file_server; CREATE USER MAPPING FOR regress_no_priv_user SERVER file_server; -- validator tests +CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (foo 'bar'); -- ERROR +ERROR: invalid option "foo" +CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS ("a=b" 'true'); -- ERROR +ERROR: invalid option name "a=b": must not contain "=" CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'xml'); -- ERROR ERROR: COPY format "xml" not recognized CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', quote ':'); -- ERROR diff --git a/contrib/file_fdw/sql/file_fdw.sql b/contrib/file_fdw/sql/file_fdw.sql index 2cdbe7a8a4c52..1a397ad4bd150 100644 --- a/contrib/file_fdw/sql/file_fdw.sql +++ b/contrib/file_fdw/sql/file_fdw.sql @@ -55,6 +55,8 @@ CREATE USER MAPPING FOR regress_file_fdw_superuser SERVER file_server; CREATE USER MAPPING FOR regress_no_priv_user SERVER file_server; -- validator tests +CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (foo 'bar'); -- ERROR +CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS ("a=b" 'true'); -- ERROR CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'xml'); -- ERROR CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', quote ':'); -- ERROR CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape ':'); -- ERROR diff --git a/contrib/hstore/hstore_gin.c b/contrib/hstore/hstore_gin.c index 766c00bb6a735..2e5fa115924ba 100644 --- a/contrib/hstore/hstore_gin.c +++ b/contrib/hstore/hstore_gin.c @@ -127,7 +127,7 @@ gin_extract_hstore_query(PG_FUNCTION_ARGS) /* Nulls in the array are ignored, cf hstoreArrayToPairs */ if (key_nulls[i]) continue; - item = makeitem(VARDATA(key_datums[i]), VARSIZE(key_datums[i]) - VARHDRSZ, KEYFLAG); + item = makeitem(VARDATA(DatumGetPointer(key_datums[i])), VARSIZE(DatumGetPointer(key_datums[i])) - VARHDRSZ, KEYFLAG); entries[j++] = PointerGetDatum(item); } diff --git a/contrib/hstore/hstore_gist.c b/contrib/hstore/hstore_gist.c index a3b08af385016..69515dc3d3fbd 100644 --- a/contrib/hstore/hstore_gist.c +++ b/contrib/hstore/hstore_gist.c @@ -576,7 +576,7 @@ ghstore_consistent(PG_FUNCTION_ARGS) if (key_nulls[i]) continue; - crc = crc32_sz(VARDATA(key_datums[i]), VARSIZE(key_datums[i]) - VARHDRSZ); + crc = crc32_sz(VARDATA(DatumGetPointer(key_datums[i])), VARSIZE(DatumGetPointer(key_datums[i])) - VARHDRSZ); if (!(GETBIT(sign, HASHVAL(crc, siglen)))) res = false; } @@ -599,7 +599,7 @@ ghstore_consistent(PG_FUNCTION_ARGS) if (key_nulls[i]) continue; - crc = crc32_sz(VARDATA(key_datums[i]), VARSIZE(key_datums[i]) - VARHDRSZ); + crc = crc32_sz(VARDATA(DatumGetPointer(key_datums[i])), VARSIZE(DatumGetPointer(key_datums[i])) - VARHDRSZ); if (GETBIT(sign, HASHVAL(crc, siglen))) res = true; } diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c index 4f867e4bd1f1c..9c53877c4a582 100644 --- a/contrib/hstore/hstore_io.c +++ b/contrib/hstore/hstore_io.c @@ -684,22 +684,22 @@ hstore_from_arrays(PG_FUNCTION_ARGS) if (!value_nulls || value_nulls[i]) { - pairs[i].key = VARDATA(key_datums[i]); + pairs[i].key = VARDATA(DatumGetPointer(key_datums[i])); pairs[i].val = NULL; pairs[i].keylen = - hstoreCheckKeyLen(VARSIZE(key_datums[i]) - VARHDRSZ); + hstoreCheckKeyLen(VARSIZE(DatumGetPointer(key_datums[i])) - VARHDRSZ); pairs[i].vallen = 4; pairs[i].isnull = true; pairs[i].needfree = false; } else { - pairs[i].key = VARDATA(key_datums[i]); - pairs[i].val = VARDATA(value_datums[i]); + pairs[i].key = VARDATA(DatumGetPointer(key_datums[i])); + pairs[i].val = VARDATA(DatumGetPointer(value_datums[i])); pairs[i].keylen = - hstoreCheckKeyLen(VARSIZE(key_datums[i]) - VARHDRSZ); + hstoreCheckKeyLen(VARSIZE(DatumGetPointer(key_datums[i])) - VARHDRSZ); pairs[i].vallen = - hstoreCheckValLen(VARSIZE(value_datums[i]) - VARHDRSZ); + hstoreCheckValLen(VARSIZE(DatumGetPointer(value_datums[i])) - VARHDRSZ); pairs[i].isnull = false; pairs[i].needfree = false; } @@ -778,22 +778,22 @@ hstore_from_array(PG_FUNCTION_ARGS) if (in_nulls[i * 2 + 1]) { - pairs[i].key = VARDATA(in_datums[i * 2]); + pairs[i].key = VARDATA(DatumGetPointer(in_datums[i * 2])); pairs[i].val = NULL; pairs[i].keylen = - hstoreCheckKeyLen(VARSIZE(in_datums[i * 2]) - VARHDRSZ); + hstoreCheckKeyLen(VARSIZE(DatumGetPointer(in_datums[i * 2])) - VARHDRSZ); pairs[i].vallen = 4; pairs[i].isnull = true; pairs[i].needfree = false; } else { - pairs[i].key = VARDATA(in_datums[i * 2]); - pairs[i].val = VARDATA(in_datums[i * 2 + 1]); + pairs[i].key = VARDATA(DatumGetPointer(in_datums[i * 2])); + pairs[i].val = VARDATA(DatumGetPointer(in_datums[i * 2 + 1])); pairs[i].keylen = - hstoreCheckKeyLen(VARSIZE(in_datums[i * 2]) - VARHDRSZ); + hstoreCheckKeyLen(VARSIZE(DatumGetPointer(in_datums[i * 2])) - VARHDRSZ); pairs[i].vallen = - hstoreCheckValLen(VARSIZE(in_datums[i * 2 + 1]) - VARHDRSZ); + hstoreCheckValLen(VARSIZE(DatumGetPointer(in_datums[i * 2 + 1])) - VARHDRSZ); pairs[i].isnull = false; pairs[i].needfree = false; } diff --git a/contrib/hstore/hstore_op.c b/contrib/hstore/hstore_op.c index 5e57eceffc817..bcba75f925808 100644 --- a/contrib/hstore/hstore_op.c +++ b/contrib/hstore/hstore_op.c @@ -107,8 +107,8 @@ hstoreArrayToPairs(ArrayType *a, int *npairs) { if (!key_nulls[i]) { - key_pairs[j].key = VARDATA(key_datums[i]); - key_pairs[j].keylen = VARSIZE(key_datums[i]) - VARHDRSZ; + key_pairs[j].key = VARDATA(DatumGetPointer(key_datums[i])); + key_pairs[j].keylen = VARSIZE(DatumGetPointer(key_datums[i])) - VARHDRSZ; key_pairs[j].val = NULL; key_pairs[j].vallen = 0; key_pairs[j].needfree = 0; diff --git a/contrib/hstore_plpython/hstore_plpython.c b/contrib/hstore_plpython/hstore_plpython.c index 8812fb3f3e445..e2bfc6da38e18 100644 --- a/contrib/hstore_plpython/hstore_plpython.c +++ b/contrib/hstore_plpython/hstore_plpython.c @@ -3,7 +3,7 @@ #include "fmgr.h" #include "hstore/hstore.h" #include "plpy_typeio.h" -#include "plpython.h" +#include "plpy_util.h" PG_MODULE_MAGIC_EXT( .name = "hstore_plpython", diff --git a/contrib/intarray/_int_op.c b/contrib/intarray/_int_op.c index ba6d0a99995ed..a706e353c6f94 100644 --- a/contrib/intarray/_int_op.c +++ b/contrib/intarray/_int_op.c @@ -108,7 +108,7 @@ _int_overlap(PG_FUNCTION_ARGS) CHECKARRVALID(a); CHECKARRVALID(b); if (ARRISEMPTY(a) || ARRISEMPTY(b)) - return false; + PG_RETURN_BOOL(false); SORT(a); SORT(b); diff --git a/contrib/intarray/_int_selfuncs.c b/contrib/intarray/_int_selfuncs.c index 6c3b7ace146aa..9bf6448624254 100644 --- a/contrib/intarray/_int_selfuncs.c +++ b/contrib/intarray/_int_selfuncs.c @@ -177,7 +177,7 @@ _int_matchsel(PG_FUNCTION_ARGS) if (query->size == 0) { ReleaseVariableStats(vardata); - return (Selectivity) 0.0; + PG_RETURN_FLOAT8(0.0); } /* diff --git a/contrib/intarray/expected/_int.out b/contrib/intarray/expected/_int.out index b39ab82d43d50..d0e68d0447fb7 100644 --- a/contrib/intarray/expected/_int.out +++ b/contrib/intarray/expected/_int.out @@ -492,6 +492,12 @@ SELECT count(*) from test__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + SET enable_seqscan = off; -- not all of these would use index by default CREATE INDEX text_idx on test__int using gist ( a gist__int_ops ); SELECT count(*) from test__int WHERE a && '{23,50}'; @@ -566,6 +572,12 @@ SELECT count(*) from test__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + INSERT INTO test__int SELECT array(SELECT x FROM generate_series(1, 1001) x); -- should fail ERROR: input array is too big (199 maximum allowed, 1001 current), use gist__intbig_ops opclass instead DROP INDEX text_idx; @@ -648,6 +660,12 @@ SELECT count(*) from test__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gist (a gist__intbig_ops(siglen = 0)); ERROR: value 0 out of bounds for option "siglen" @@ -728,6 +746,12 @@ SELECT count(*) from test__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gist ( a gist__intbig_ops ); SELECT count(*) from test__int WHERE a && '{23,50}'; @@ -802,6 +826,12 @@ SELECT count(*) from test__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gin ( a gin__int_ops ); SELECT count(*) from test__int WHERE a && '{23,50}'; @@ -876,6 +906,12 @@ SELECT count(*) from test__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + DROP INDEX text_idx; -- Repeat the same queries with an extended data set. The data set is the -- same that we used before, except that each element in the array is @@ -968,4 +1004,10 @@ SELECT count(*) from more__int WHERE a @@ '!20 & !21'; 6344 (1 row) +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; + count +------- + 12 +(1 row) + RESET enable_seqscan; diff --git a/contrib/intarray/sql/_int.sql b/contrib/intarray/sql/_int.sql index 2d4ed1c9ae24f..5668ab4070453 100644 --- a/contrib/intarray/sql/_int.sql +++ b/contrib/intarray/sql/_int.sql @@ -107,6 +107,7 @@ SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from test__int WHERE a @@ '20 | !21'; SELECT count(*) from test__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; SET enable_seqscan = off; -- not all of these would use index by default @@ -124,6 +125,7 @@ SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from test__int WHERE a @@ '20 | !21'; SELECT count(*) from test__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; INSERT INTO test__int SELECT array(SELECT x FROM generate_series(1, 1001) x); -- should fail @@ -144,6 +146,7 @@ SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from test__int WHERE a @@ '20 | !21'; SELECT count(*) from test__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gist (a gist__intbig_ops(siglen = 0)); @@ -162,6 +165,7 @@ SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from test__int WHERE a @@ '20 | !21'; SELECT count(*) from test__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gist ( a gist__intbig_ops ); @@ -178,6 +182,7 @@ SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from test__int WHERE a @@ '20 | !21'; SELECT count(*) from test__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gin ( a gin__int_ops ); @@ -194,6 +199,7 @@ SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from test__int WHERE a @@ '20 | !21'; SELECT count(*) from test__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; DROP INDEX text_idx; @@ -229,6 +235,7 @@ SELECT count(*) from more__int WHERE a @> '{20,23}' or a @> '{50,68}'; SELECT count(*) from more__int WHERE a @@ '(20&23)|(50&68)'; SELECT count(*) from more__int WHERE a @@ '20 | !21'; SELECT count(*) from more__int WHERE a @@ '!20 & !21'; +SELECT count(*) from test__int WHERE a @@ '!2733 & (2738 | 254)'; RESET enable_seqscan; diff --git a/contrib/isn/isn.c b/contrib/isn/isn.c index 038c8ed4db7bd..1880c91844e90 100644 --- a/contrib/isn/isn.c +++ b/contrib/isn/isn.c @@ -726,7 +726,7 @@ string2ean(const char *str, struct Node *escontext, ean13 *result, if (type != INVALID) goto eaninvalid; type = ISSN; - *aux1++ = toupper((unsigned char) *aux2); + *aux1++ = pg_ascii_toupper((unsigned char) *aux2); length++; } else if (length == 9 && (digit || *aux2 == 'X' || *aux2 == 'x') && last) @@ -736,7 +736,7 @@ string2ean(const char *str, struct Node *escontext, ean13 *result, goto eaninvalid; if (type == INVALID) type = ISBN; /* ISMN must start with 'M' */ - *aux1++ = toupper((unsigned char) *aux2); + *aux1++ = pg_ascii_toupper((unsigned char) *aux2); length++; } else if (length == 11 && digit && last) diff --git a/contrib/jsonb_plpython/jsonb_plpython.c b/contrib/jsonb_plpython/jsonb_plpython.c index 680445a006fb1..9383615abbfa3 100644 --- a/contrib/jsonb_plpython/jsonb_plpython.c +++ b/contrib/jsonb_plpython/jsonb_plpython.c @@ -2,7 +2,7 @@ #include "plpy_elog.h" #include "plpy_typeio.h" -#include "plpython.h" +#include "plpy_util.h" #include "utils/fmgrprotos.h" #include "utils/jsonb.h" #include "utils/numeric.h" diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c index 286ad24fbe847..30d516e60bc21 100644 --- a/contrib/ltree/_ltree_gist.c +++ b/contrib/ltree/_ltree_gist.c @@ -84,7 +84,7 @@ _ltree_compress(PG_FUNCTION_ARGS) entry->rel, entry->page, entry->offset, false); } - else if (!LTG_ISALLTRUE(entry->key)) + else if (!LTG_ISALLTRUE(DatumGetPointer(entry->key))) { int32 i; ltree_gist *key; diff --git a/contrib/ltree_plpython/ltree_plpython.c b/contrib/ltree_plpython/ltree_plpython.c index ba5926b8be678..0493aeb2423cc 100644 --- a/contrib/ltree_plpython/ltree_plpython.c +++ b/contrib/ltree_plpython/ltree_plpython.c @@ -2,7 +2,7 @@ #include "fmgr.h" #include "ltree/ltree.h" -#include "plpython.h" +#include "plpy_util.h" PG_MODULE_MAGIC_EXT( .name = "ltree_plpython", diff --git a/contrib/pageinspect/btreefuncs.c b/contrib/pageinspect/btreefuncs.c index 294821231fc3b..4e2e8891cddfd 100644 --- a/contrib/pageinspect/btreefuncs.c +++ b/contrib/pageinspect/btreefuncs.c @@ -506,7 +506,7 @@ bt_page_print_tuples(ua_page_items *uargs) j = 0; memset(nulls, 0, sizeof(nulls)); - values[j++] = DatumGetInt16(offset); + values[j++] = Int16GetDatum(offset); values[j++] = ItemPointerGetDatum(&itup->t_tid); values[j++] = Int32GetDatum((int) IndexTupleSize(itup)); values[j++] = BoolGetDatum(IndexTupleHasNulls(itup)); diff --git a/contrib/pageinspect/expected/gist.out b/contrib/pageinspect/expected/gist.out index 2b1d54a627949..8502f9efb4190 100644 --- a/contrib/pageinspect/expected/gist.out +++ b/contrib/pageinspect/expected/gist.out @@ -5,21 +5,21 @@ CREATE UNLOGGED TABLE test_gist AS SELECT point(i,i) p, i::text t FROM CREATE INDEX test_gist_idx ON test_gist USING gist (p); -- Page 0 is the root, the rest are leaf pages SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 0)); - lsn | nsn | rightlink | flags ------+-----+------------+------- - 0/1 | 0/0 | 4294967295 | {} + lsn | nsn | rightlink | flags +------------+------------+------------+------- + 0/00000001 | 0/00000000 | 4294967295 | {} (1 row) SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 1)); - lsn | nsn | rightlink | flags ------+-----+------------+-------- - 0/1 | 0/0 | 4294967295 | {leaf} + lsn | nsn | rightlink | flags +------------+------------+------------+-------- + 0/00000001 | 0/00000000 | 4294967295 | {leaf} (1 row) SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2)); - lsn | nsn | rightlink | flags ------+-----+-----------+-------- - 0/1 | 0/0 | 1 | {leaf} + lsn | nsn | rightlink | flags +------------+------------+-----------+-------- + 0/00000001 | 0/00000000 | 1 | {leaf} (1 row) SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx'); diff --git a/contrib/pageinspect/expected/page.out b/contrib/pageinspect/expected/page.out index e42fd9747fd1c..fcf19c5ca5a50 100644 --- a/contrib/pageinspect/expected/page.out +++ b/contrib/pageinspect/expected/page.out @@ -265,9 +265,9 @@ SELECT fsm_page_contents(decode(repeat('00', :block_size), 'hex')); (1 row) SELECT page_header(decode(repeat('00', :block_size), 'hex')); - page_header ------------------------ - (0/0,0,0,0,0,0,0,0,0) + page_header +------------------------------ + (0/00000000,0,0,0,0,0,0,0,0) (1 row) SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1); diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c index 7b16e2a1ef33c..1b299374890b0 100644 --- a/contrib/pageinspect/gistfuncs.c +++ b/contrib/pageinspect/gistfuncs.c @@ -174,7 +174,7 @@ gist_page_items_bytea(PG_FUNCTION_ARGS) memset(nulls, 0, sizeof(nulls)); - values[0] = DatumGetInt16(offset); + values[0] = Int16GetDatum(offset); values[1] = ItemPointerGetDatum(&itup->t_tid); values[2] = Int32GetDatum((int) IndexTupleSize(itup)); @@ -281,7 +281,7 @@ gist_page_items(PG_FUNCTION_ARGS) memset(nulls, 0, sizeof(nulls)); - values[0] = DatumGetInt16(offset); + values[0] = Int16GetDatum(offset); values[1] = ItemPointerGetDatum(&itup->t_tid); values[2] = Int32GetDatum((int) IndexTupleSize(itup)); values[3] = BoolGetDatum(ItemIdIsDead(id)); diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c index aa8e1bd6df4a6..c13f07655c441 100644 --- a/contrib/pageinspect/heapfuncs.c +++ b/contrib/pageinspect/heapfuncs.c @@ -212,11 +212,8 @@ heap_page_items(PG_FUNCTION_ARGS) lp_offset + lp_len <= raw_page_size) { HeapTupleHeader tuphdr; - bytea *tuple_data_bytea; - int tuple_data_len; /* Extract information from the tuple header */ - tuphdr = (HeapTupleHeader) PageGetItem(page, id); values[4] = UInt32GetDatum(HeapTupleHeaderGetRawXmin(tuphdr)); @@ -228,44 +225,56 @@ heap_page_items(PG_FUNCTION_ARGS) values[9] = UInt32GetDatum(tuphdr->t_infomask); values[10] = UInt8GetDatum(tuphdr->t_hoff); - /* Copy raw tuple data into bytea attribute */ - tuple_data_len = lp_len - tuphdr->t_hoff; - tuple_data_bytea = (bytea *) palloc(tuple_data_len + VARHDRSZ); - SET_VARSIZE(tuple_data_bytea, tuple_data_len + VARHDRSZ); - memcpy(VARDATA(tuple_data_bytea), (char *) tuphdr + tuphdr->t_hoff, - tuple_data_len); - values[13] = PointerGetDatum(tuple_data_bytea); - /* * We already checked that the item is completely within the raw * page passed to us, with the length given in the line pointer. - * Let's check that t_hoff doesn't point over lp_len, before using - * it to access t_bits and oid. + * But t_hoff could be out of range, so check it before relying on + * it to fetch additional info. */ if (tuphdr->t_hoff >= SizeofHeapTupleHeader && tuphdr->t_hoff <= lp_len && tuphdr->t_hoff == MAXALIGN(tuphdr->t_hoff)) { + int tuple_data_len; + bytea *tuple_data_bytea; + + /* Copy null bitmask and OID, if present */ if (tuphdr->t_infomask & HEAP_HASNULL) { - int bits_len; - - bits_len = - BITMAPLEN(HeapTupleHeaderGetNatts(tuphdr)) * BITS_PER_BYTE; - values[11] = CStringGetTextDatum(bits_to_text(tuphdr->t_bits, bits_len)); + int bitmaplen; + + bitmaplen = BITMAPLEN(HeapTupleHeaderGetNatts(tuphdr)); + /* better range-check the attribute count, too */ + if (bitmaplen <= tuphdr->t_hoff - SizeofHeapTupleHeader) + values[11] = + CStringGetTextDatum(bits_to_text(tuphdr->t_bits, + bitmaplen * BITS_PER_BYTE)); + else + nulls[11] = true; } else nulls[11] = true; if (tuphdr->t_infomask & HEAP_HASOID_OLD) - values[12] = HeapTupleHeaderGetOidOld(tuphdr); + values[12] = ObjectIdGetDatum(HeapTupleHeaderGetOidOld(tuphdr)); else nulls[12] = true; + + /* Copy raw tuple data into bytea attribute */ + tuple_data_len = lp_len - tuphdr->t_hoff; + tuple_data_bytea = (bytea *) palloc(tuple_data_len + VARHDRSZ); + SET_VARSIZE(tuple_data_bytea, tuple_data_len + VARHDRSZ); + if (tuple_data_len > 0) + memcpy(VARDATA(tuple_data_bytea), + (char *) tuphdr + tuphdr->t_hoff, + tuple_data_len); + values[13] = PointerGetDatum(tuple_data_bytea); } else { nulls[11] = true; nulls[12] = true; + nulls[13] = true; } } else diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index 0d57123aa2669..aef442b5db30a 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -282,7 +282,7 @@ page_header(PG_FUNCTION_ARGS) { char lsnchar[64]; - snprintf(lsnchar, sizeof(lsnchar), "%X/%X", LSN_FORMAT_ARGS(lsn)); + snprintf(lsnchar, sizeof(lsnchar), "%X/%08X", LSN_FORMAT_ARGS(lsn)); values[0] = CStringGetTextDatum(lsnchar); } else diff --git a/contrib/pg_buffercache/Makefile b/contrib/pg_buffercache/Makefile index eae65ead9e502..5f748543e2ea2 100644 --- a/contrib/pg_buffercache/Makefile +++ b/contrib/pg_buffercache/Makefile @@ -8,10 +8,11 @@ OBJS = \ EXTENSION = pg_buffercache DATA = pg_buffercache--1.2.sql pg_buffercache--1.2--1.3.sql \ pg_buffercache--1.1--1.2.sql pg_buffercache--1.0--1.1.sql \ - pg_buffercache--1.3--1.4.sql pg_buffercache--1.4--1.5.sql + pg_buffercache--1.3--1.4.sql pg_buffercache--1.4--1.5.sql \ + pg_buffercache--1.5--1.6.sql PGFILEDESC = "pg_buffercache - monitoring of shared buffer cache in real-time" -REGRESS = pg_buffercache +REGRESS = pg_buffercache pg_buffercache_numa ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/contrib/pg_buffercache/expected/pg_buffercache.out b/contrib/pg_buffercache/expected/pg_buffercache.out index b745dc69eaecf..9a9216dc7b1bf 100644 --- a/contrib/pg_buffercache/expected/pg_buffercache.out +++ b/contrib/pg_buffercache/expected/pg_buffercache.out @@ -55,3 +55,67 @@ SELECT count(*) > 0 FROM pg_buffercache_usage_counts(); t (1 row) +RESET role; +------ +---- Test pg_buffercache_evict* functions +------ +CREATE ROLE regress_buffercache_normal; +SET ROLE regress_buffercache_normal; +-- These should fail because they need to be called as SUPERUSER +SELECT * FROM pg_buffercache_evict(1); +ERROR: must be superuser to use pg_buffercache_evict() +SELECT * FROM pg_buffercache_evict_relation(1); +ERROR: must be superuser to use pg_buffercache_evict_relation() +SELECT * FROM pg_buffercache_evict_all(); +ERROR: must be superuser to use pg_buffercache_evict_all() +RESET ROLE; +-- These should return nothing, because these are STRICT functions +SELECT * FROM pg_buffercache_evict(NULL); + buffer_evicted | buffer_flushed +----------------+---------------- + | +(1 row) + +SELECT * FROM pg_buffercache_evict_relation(NULL); + buffers_evicted | buffers_flushed | buffers_skipped +-----------------+-----------------+----------------- + | | +(1 row) + +-- These should fail because they are not called by valid range of buffers +-- Number of the shared buffers are limited by max integer +SELECT 2147483647 max_buffers \gset +SELECT * FROM pg_buffercache_evict(-1); +ERROR: bad buffer ID: -1 +SELECT * FROM pg_buffercache_evict(0); +ERROR: bad buffer ID: 0 +SELECT * FROM pg_buffercache_evict(:max_buffers); +ERROR: bad buffer ID: 2147483647 +-- This should fail because pg_buffercache_evict_relation() doesn't accept +-- local relations +CREATE TEMP TABLE temp_pg_buffercache(); +SELECT * FROM pg_buffercache_evict_relation('temp_pg_buffercache'); +ERROR: relation uses local buffers, pg_buffercache_evict_relation() is intended to be used for shared buffers only +DROP TABLE temp_pg_buffercache; +-- These shouldn't fail +SELECT buffer_evicted IS NOT NULL FROM pg_buffercache_evict(1); + ?column? +---------- + t +(1 row) + +SELECT buffers_evicted IS NOT NULL FROM pg_buffercache_evict_all(); + ?column? +---------- + t +(1 row) + +CREATE TABLE shared_pg_buffercache(); +SELECT buffers_evicted IS NOT NULL FROM pg_buffercache_evict_relation('shared_pg_buffercache'); + ?column? +---------- + t +(1 row) + +DROP TABLE shared_pg_buffercache; +DROP ROLE regress_buffercache_normal; diff --git a/contrib/pg_buffercache/expected/pg_buffercache_numa.out b/contrib/pg_buffercache/expected/pg_buffercache_numa.out new file mode 100644 index 0000000000000..a10b331a55261 --- /dev/null +++ b/contrib/pg_buffercache/expected/pg_buffercache_numa.out @@ -0,0 +1,29 @@ +SELECT NOT(pg_numa_available()) AS skip_test \gset +\if :skip_test +\quit +\endif +-- We expect at least one entry for each buffer +select count(*) >= (select setting::bigint + from pg_settings + where name = 'shared_buffers') +from pg_buffercache_numa; + ?column? +---------- + t +(1 row) + +-- Check that the functions / views can't be accessed by default. To avoid +-- having to create a dedicated user, use the pg_database_owner pseudo-role. +SET ROLE pg_database_owner; +SELECT count(*) > 0 FROM pg_buffercache_numa; +ERROR: permission denied for view pg_buffercache_numa +RESET role; +-- Check that pg_monitor is allowed to query view / function +SET ROLE pg_monitor; +SELECT count(*) > 0 FROM pg_buffercache_numa; + ?column? +---------- + t +(1 row) + +RESET role; diff --git a/contrib/pg_buffercache/expected/pg_buffercache_numa_1.out b/contrib/pg_buffercache/expected/pg_buffercache_numa_1.out new file mode 100644 index 0000000000000..6dd6824b4e4f3 --- /dev/null +++ b/contrib/pg_buffercache/expected/pg_buffercache_numa_1.out @@ -0,0 +1,3 @@ +SELECT NOT(pg_numa_available()) AS skip_test \gset +\if :skip_test +\quit diff --git a/contrib/pg_buffercache/meson.build b/contrib/pg_buffercache/meson.build index 12d1fe487172f..7cd039a1df9cb 100644 --- a/contrib/pg_buffercache/meson.build +++ b/contrib/pg_buffercache/meson.build @@ -23,6 +23,7 @@ install_data( 'pg_buffercache--1.2.sql', 'pg_buffercache--1.3--1.4.sql', 'pg_buffercache--1.4--1.5.sql', + 'pg_buffercache--1.5--1.6.sql', 'pg_buffercache.control', kwargs: contrib_data_args, ) @@ -34,6 +35,7 @@ tests += { 'regress': { 'sql': [ 'pg_buffercache', + 'pg_buffercache_numa', ], }, } diff --git a/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql b/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql new file mode 100644 index 0000000000000..458f054a69179 --- /dev/null +++ b/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql @@ -0,0 +1,46 @@ +/* contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION pg_buffercache UPDATE TO '1.6'" to load this file. \quit + +-- Register the new functions. +CREATE OR REPLACE FUNCTION pg_buffercache_numa_pages() +RETURNS SETOF RECORD +AS 'MODULE_PATHNAME', 'pg_buffercache_numa_pages' +LANGUAGE C PARALLEL SAFE; + +-- Create a view for convenient access. +CREATE VIEW pg_buffercache_numa AS + SELECT P.* FROM pg_buffercache_numa_pages() AS P + (bufferid integer, os_page_num bigint, numa_node integer); + +-- Don't want these to be available to public. +REVOKE ALL ON FUNCTION pg_buffercache_numa_pages() FROM PUBLIC; +REVOKE ALL ON pg_buffercache_numa FROM PUBLIC; + +GRANT EXECUTE ON FUNCTION pg_buffercache_numa_pages() TO pg_monitor; +GRANT SELECT ON pg_buffercache_numa TO pg_monitor; + + +DROP FUNCTION pg_buffercache_evict(integer); +CREATE FUNCTION pg_buffercache_evict( + IN int, + OUT buffer_evicted boolean, + OUT buffer_flushed boolean) +AS 'MODULE_PATHNAME', 'pg_buffercache_evict' +LANGUAGE C PARALLEL SAFE VOLATILE STRICT; + +CREATE FUNCTION pg_buffercache_evict_relation( + IN regclass, + OUT buffers_evicted int4, + OUT buffers_flushed int4, + OUT buffers_skipped int4) +AS 'MODULE_PATHNAME', 'pg_buffercache_evict_relation' +LANGUAGE C PARALLEL SAFE VOLATILE STRICT; + +CREATE FUNCTION pg_buffercache_evict_all( + OUT buffers_evicted int4, + OUT buffers_flushed int4, + OUT buffers_skipped int4) +AS 'MODULE_PATHNAME', 'pg_buffercache_evict_all' +LANGUAGE C PARALLEL SAFE VOLATILE; diff --git a/contrib/pg_buffercache/pg_buffercache.control b/contrib/pg_buffercache/pg_buffercache.control index 5ee875f77dd90..b030ba3a6faba 100644 --- a/contrib/pg_buffercache/pg_buffercache.control +++ b/contrib/pg_buffercache/pg_buffercache.control @@ -1,5 +1,5 @@ # pg_buffercache extension comment = 'examine the shared buffer cache' -default_version = '1.5' +default_version = '1.6' module_pathname = '$libdir/pg_buffercache' relocatable = true diff --git a/contrib/pg_buffercache/pg_buffercache_pages.c b/contrib/pg_buffercache/pg_buffercache_pages.c index 62602af1775f3..3df04c98959e1 100644 --- a/contrib/pg_buffercache/pg_buffercache_pages.c +++ b/contrib/pg_buffercache/pg_buffercache_pages.c @@ -9,16 +9,24 @@ #include "postgres.h" #include "access/htup_details.h" +#include "access/relation.h" #include "catalog/pg_type.h" #include "funcapi.h" +#include "port/pg_numa.h" #include "storage/buf_internals.h" #include "storage/bufmgr.h" +#include "utils/rel.h" #define NUM_BUFFERCACHE_PAGES_MIN_ELEM 8 #define NUM_BUFFERCACHE_PAGES_ELEM 9 #define NUM_BUFFERCACHE_SUMMARY_ELEM 5 #define NUM_BUFFERCACHE_USAGE_COUNTS_ELEM 4 +#define NUM_BUFFERCACHE_EVICT_ELEM 2 +#define NUM_BUFFERCACHE_EVICT_RELATION_ELEM 3 +#define NUM_BUFFERCACHE_EVICT_ALL_ELEM 3 + +#define NUM_BUFFERCACHE_NUMA_ELEM 3 PG_MODULE_MAGIC_EXT( .name = "pg_buffercache", @@ -58,15 +66,45 @@ typedef struct BufferCachePagesRec *record; } BufferCachePagesContext; +/* + * Record structure holding the to be exposed cache data. + */ +typedef struct +{ + uint32 bufferid; + int64 page_num; + int32 numa_node; +} BufferCacheNumaRec; + +/* + * Function context for data persisting over repeated calls. + */ +typedef struct +{ + TupleDesc tupdesc; + int buffers_per_page; + int pages_per_buffer; + int os_page_size; + BufferCacheNumaRec *record; +} BufferCacheNumaContext; + /* * Function returning data from the shared buffer cache - buffer number, * relation node/tablespace/database/blocknum and dirty indicator. */ PG_FUNCTION_INFO_V1(pg_buffercache_pages); +PG_FUNCTION_INFO_V1(pg_buffercache_numa_pages); PG_FUNCTION_INFO_V1(pg_buffercache_summary); PG_FUNCTION_INFO_V1(pg_buffercache_usage_counts); PG_FUNCTION_INFO_V1(pg_buffercache_evict); +PG_FUNCTION_INFO_V1(pg_buffercache_evict_relation); +PG_FUNCTION_INFO_V1(pg_buffercache_evict_all); + + +/* Only need to touch memory once per backend process lifetime */ +static bool firstNumaTouch = true; + Datum pg_buffercache_pages(PG_FUNCTION_ARGS) @@ -156,6 +194,8 @@ pg_buffercache_pages(PG_FUNCTION_ARGS) BufferDesc *bufHdr; uint32 buf_state; + CHECK_FOR_INTERRUPTS(); + bufHdr = GetBufferDescriptor(i); /* Lock each buffer header before inspecting. */ buf_state = LockBufHdr(bufHdr); @@ -246,6 +286,259 @@ pg_buffercache_pages(PG_FUNCTION_ARGS) SRF_RETURN_DONE(funcctx); } +/* + * Inquire about NUMA memory mappings for shared buffers. + * + * Returns NUMA node ID for each memory page used by the buffer. Buffers may + * be smaller or larger than OS memory pages. For each buffer we return one + * entry for each memory page used by the buffer (if the buffer is smaller, + * it only uses a part of one memory page). + * + * We expect both sizes (for buffers and memory pages) to be a power-of-2, so + * one is always a multiple of the other. + * + * In order to get reliable results we also need to touch memory pages, so + * that the inquiry about NUMA memory node doesn't return -2 (which indicates + * unmapped/unallocated pages). + */ +Datum +pg_buffercache_numa_pages(PG_FUNCTION_ARGS) +{ + FuncCallContext *funcctx; + MemoryContext oldcontext; + BufferCacheNumaContext *fctx; /* User function context. */ + TupleDesc tupledesc; + TupleDesc expected_tupledesc; + HeapTuple tuple; + Datum result; + + if (SRF_IS_FIRSTCALL()) + { + int i, + idx; + Size os_page_size; + void **os_page_ptrs; + int *os_page_status; + uint64 os_page_count; + int pages_per_buffer; + int max_entries; + char *startptr, + *endptr; + + if (pg_numa_init() == -1) + elog(ERROR, "libnuma initialization failed or NUMA is not supported on this platform"); + + /* + * The database block size and OS memory page size are unlikely to be + * the same. The block size is 1-32KB, the memory page size depends on + * platform. On x86 it's usually 4KB, on ARM it's 4KB or 64KB, but + * there are also features like THP etc. Moreover, we don't quite know + * how the pages and buffers "align" in memory - the buffers may be + * shifted in some way, using more memory pages than necessary. + * + * So we need to be careful about mapping buffers to memory pages. We + * calculate the maximum number of pages a buffer might use, so that + * we allocate enough space for the entries. And then we count the + * actual number of entries as we scan the buffers. + * + * This information is needed before calling move_pages() for NUMA + * node id inquiry. + */ + os_page_size = pg_get_shmem_pagesize(); + + /* + * The pages and block size is expected to be 2^k, so one divides the + * other (we don't know in which direction). This does not say + * anything about relative alignment of pages/buffers. + */ + Assert((os_page_size % BLCKSZ == 0) || (BLCKSZ % os_page_size == 0)); + + /* + * How many addresses we are going to query? Simply get the page for + * the first buffer, and first page after the last buffer, and count + * the pages from that. + */ + startptr = (char *) TYPEALIGN_DOWN(os_page_size, + BufferGetBlock(1)); + endptr = (char *) TYPEALIGN(os_page_size, + (char *) BufferGetBlock(NBuffers) + BLCKSZ); + os_page_count = (endptr - startptr) / os_page_size; + + /* Used to determine the NUMA node for all OS pages at once */ + os_page_ptrs = palloc0(sizeof(void *) * os_page_count); + os_page_status = palloc(sizeof(uint64) * os_page_count); + + /* Fill pointers for all the memory pages. */ + idx = 0; + for (char *ptr = startptr; ptr < endptr; ptr += os_page_size) + { + os_page_ptrs[idx++] = ptr; + + /* Only need to touch memory once per backend process lifetime */ + if (firstNumaTouch) + pg_numa_touch_mem_if_required(ptr); + } + + Assert(idx == os_page_count); + + elog(DEBUG1, "NUMA: NBuffers=%d os_page_count=" UINT64_FORMAT " " + "os_page_size=%zu", NBuffers, os_page_count, os_page_size); + + /* + * If we ever get 0xff back from kernel inquiry, then we probably have + * bug in our buffers to OS page mapping code here. + */ + memset(os_page_status, 0xff, sizeof(int) * os_page_count); + + /* Query NUMA status for all the pointers */ + if (pg_numa_query_pages(0, os_page_count, os_page_ptrs, os_page_status) == -1) + elog(ERROR, "failed NUMA pages inquiry: %m"); + + /* Initialize the multi-call context, load entries about buffers */ + + funcctx = SRF_FIRSTCALL_INIT(); + + /* Switch context when allocating stuff to be used in later calls */ + oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); + + /* Create a user function context for cross-call persistence */ + fctx = (BufferCacheNumaContext *) palloc(sizeof(BufferCacheNumaContext)); + + if (get_call_result_type(fcinfo, NULL, &expected_tupledesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + + if (expected_tupledesc->natts != NUM_BUFFERCACHE_NUMA_ELEM) + elog(ERROR, "incorrect number of output arguments"); + + /* Construct a tuple descriptor for the result rows. */ + tupledesc = CreateTemplateTupleDesc(expected_tupledesc->natts); + TupleDescInitEntry(tupledesc, (AttrNumber) 1, "bufferid", + INT4OID, -1, 0); + TupleDescInitEntry(tupledesc, (AttrNumber) 2, "os_page_num", + INT8OID, -1, 0); + TupleDescInitEntry(tupledesc, (AttrNumber) 3, "numa_node", + INT4OID, -1, 0); + + fctx->tupdesc = BlessTupleDesc(tupledesc); + + /* + * Each buffer needs at least one entry, but it might be offset in + * some way, and use one extra entry. So we allocate space for the + * maximum number of entries we might need, and then count the exact + * number as we're walking buffers. That way we can do it in one pass, + * without reallocating memory. + */ + pages_per_buffer = Max(1, BLCKSZ / os_page_size) + 1; + max_entries = NBuffers * pages_per_buffer; + + /* Allocate entries for BufferCachePagesRec records. */ + fctx->record = (BufferCacheNumaRec *) + MemoryContextAllocHuge(CurrentMemoryContext, + sizeof(BufferCacheNumaRec) * max_entries); + + /* Return to original context when allocating transient memory */ + MemoryContextSwitchTo(oldcontext); + + if (firstNumaTouch) + elog(DEBUG1, "NUMA: page-faulting the buffercache for proper NUMA readouts"); + + /* + * Scan through all the buffers, saving the relevant fields in the + * fctx->record structure. + * + * We don't hold the partition locks, so we don't get a consistent + * snapshot across all buffers, but we do grab the buffer header + * locks, so the information of each buffer is self-consistent. + * + * This loop touches and stores addresses into os_page_ptrs[] as input + * to one big move_pages(2) inquiry system call. Basically we ask for + * all memory pages for NBuffers. + */ + startptr = (char *) TYPEALIGN_DOWN(os_page_size, (char *) BufferGetBlock(1)); + idx = 0; + for (i = 0; i < NBuffers; i++) + { + char *buffptr = (char *) BufferGetBlock(i + 1); + BufferDesc *bufHdr; + uint32 buf_state; + uint32 bufferid; + int32 page_num; + char *startptr_buff, + *endptr_buff; + + CHECK_FOR_INTERRUPTS(); + + bufHdr = GetBufferDescriptor(i); + + /* Lock each buffer header before inspecting. */ + buf_state = LockBufHdr(bufHdr); + bufferid = BufferDescriptorGetBuffer(bufHdr); + UnlockBufHdr(bufHdr, buf_state); + + /* start of the first page of this buffer */ + startptr_buff = (char *) TYPEALIGN_DOWN(os_page_size, buffptr); + + /* end of the buffer (no need to align to memory page) */ + endptr_buff = buffptr + BLCKSZ; + + Assert(startptr_buff < endptr_buff); + + /* calculate ID of the first page for this buffer */ + page_num = (startptr_buff - startptr) / os_page_size; + + /* Add an entry for each OS page overlapping with this buffer. */ + for (char *ptr = startptr_buff; ptr < endptr_buff; ptr += os_page_size) + { + fctx->record[idx].bufferid = bufferid; + fctx->record[idx].page_num = page_num; + fctx->record[idx].numa_node = os_page_status[page_num]; + + /* advance to the next entry/page */ + ++idx; + ++page_num; + } + } + + Assert((idx >= os_page_count) && (idx <= max_entries)); + + /* Set max calls and remember the user function context. */ + funcctx->max_calls = idx; + funcctx->user_fctx = fctx; + + /* Remember this backend touched the pages */ + firstNumaTouch = false; + } + + funcctx = SRF_PERCALL_SETUP(); + + /* Get the saved state */ + fctx = funcctx->user_fctx; + + if (funcctx->call_cntr < funcctx->max_calls) + { + uint32 i = funcctx->call_cntr; + Datum values[NUM_BUFFERCACHE_NUMA_ELEM]; + bool nulls[NUM_BUFFERCACHE_NUMA_ELEM]; + + values[0] = Int32GetDatum(fctx->record[i].bufferid); + nulls[0] = false; + + values[1] = Int64GetDatum(fctx->record[i].page_num); + nulls[1] = false; + + values[2] = Int32GetDatum(fctx->record[i].numa_node); + nulls[2] = false; + + /* Build and return the tuple. */ + tuple = heap_form_tuple(fctx->tupdesc, values, nulls); + result = HeapTupleGetDatum(tuple); + + SRF_RETURN_NEXT(funcctx, result); + } + else + SRF_RETURN_DONE(funcctx); +} + Datum pg_buffercache_summary(PG_FUNCTION_ARGS) { @@ -269,6 +562,8 @@ pg_buffercache_summary(PG_FUNCTION_ARGS) BufferDesc *bufHdr; uint32 buf_state; + CHECK_FOR_INTERRUPTS(); + /* * This function summarizes the state of all headers. Locking the * buffer headers wouldn't provide an improved result as the state of @@ -329,6 +624,8 @@ pg_buffercache_usage_counts(PG_FUNCTION_ARGS) uint32 buf_state = pg_atomic_read_u32(&bufHdr->state); int usage_count; + CHECK_FOR_INTERRUPTS(); + usage_count = BUF_STATE_GET_USAGECOUNT(buf_state); usage_counts[usage_count]++; @@ -352,21 +649,131 @@ pg_buffercache_usage_counts(PG_FUNCTION_ARGS) return (Datum) 0; } +/* + * Helper function to check if the user has superuser privileges. + */ +static void +pg_buffercache_superuser_check(char *func_name) +{ + if (!superuser()) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be superuser to use %s()", + func_name))); +} + /* * Try to evict a shared buffer. */ Datum pg_buffercache_evict(PG_FUNCTION_ARGS) { + Datum result; + TupleDesc tupledesc; + HeapTuple tuple; + Datum values[NUM_BUFFERCACHE_EVICT_ELEM]; + bool nulls[NUM_BUFFERCACHE_EVICT_ELEM] = {0}; + Buffer buf = PG_GETARG_INT32(0); + bool buffer_flushed; - if (!superuser()) - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("must be superuser to use pg_buffercache_evict function"))); + if (get_call_result_type(fcinfo, NULL, &tupledesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + + pg_buffercache_superuser_check("pg_buffercache_evict"); if (buf < 1 || buf > NBuffers) elog(ERROR, "bad buffer ID: %d", buf); - PG_RETURN_BOOL(EvictUnpinnedBuffer(buf)); + values[0] = BoolGetDatum(EvictUnpinnedBuffer(buf, &buffer_flushed)); + values[1] = BoolGetDatum(buffer_flushed); + + tuple = heap_form_tuple(tupledesc, values, nulls); + result = HeapTupleGetDatum(tuple); + + PG_RETURN_DATUM(result); +} + +/* + * Try to evict specified relation. + */ +Datum +pg_buffercache_evict_relation(PG_FUNCTION_ARGS) +{ + Datum result; + TupleDesc tupledesc; + HeapTuple tuple; + Datum values[NUM_BUFFERCACHE_EVICT_RELATION_ELEM]; + bool nulls[NUM_BUFFERCACHE_EVICT_RELATION_ELEM] = {0}; + + Oid relOid; + Relation rel; + + int32 buffers_evicted = 0; + int32 buffers_flushed = 0; + int32 buffers_skipped = 0; + + if (get_call_result_type(fcinfo, NULL, &tupledesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + + pg_buffercache_superuser_check("pg_buffercache_evict_relation"); + + relOid = PG_GETARG_OID(0); + + rel = relation_open(relOid, AccessShareLock); + + if (RelationUsesLocalBuffers(rel)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("relation uses local buffers, %s() is intended to be used for shared buffers only", + "pg_buffercache_evict_relation"))); + + EvictRelUnpinnedBuffers(rel, &buffers_evicted, &buffers_flushed, + &buffers_skipped); + + relation_close(rel, AccessShareLock); + + values[0] = Int32GetDatum(buffers_evicted); + values[1] = Int32GetDatum(buffers_flushed); + values[2] = Int32GetDatum(buffers_skipped); + + tuple = heap_form_tuple(tupledesc, values, nulls); + result = HeapTupleGetDatum(tuple); + + PG_RETURN_DATUM(result); +} + + +/* + * Try to evict all shared buffers. + */ +Datum +pg_buffercache_evict_all(PG_FUNCTION_ARGS) +{ + Datum result; + TupleDesc tupledesc; + HeapTuple tuple; + Datum values[NUM_BUFFERCACHE_EVICT_ALL_ELEM]; + bool nulls[NUM_BUFFERCACHE_EVICT_ALL_ELEM] = {0}; + + int32 buffers_evicted = 0; + int32 buffers_flushed = 0; + int32 buffers_skipped = 0; + + if (get_call_result_type(fcinfo, NULL, &tupledesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + + pg_buffercache_superuser_check("pg_buffercache_evict_all"); + + EvictAllUnpinnedBuffers(&buffers_evicted, &buffers_flushed, + &buffers_skipped); + + values[0] = Int32GetDatum(buffers_evicted); + values[1] = Int32GetDatum(buffers_flushed); + values[2] = Int32GetDatum(buffers_skipped); + + tuple = heap_form_tuple(tupledesc, values, nulls); + result = HeapTupleGetDatum(tuple); + + PG_RETURN_DATUM(result); } diff --git a/contrib/pg_buffercache/sql/pg_buffercache.sql b/contrib/pg_buffercache/sql/pg_buffercache.sql index 944fbb1beaef0..47cca1907c74b 100644 --- a/contrib/pg_buffercache/sql/pg_buffercache.sql +++ b/contrib/pg_buffercache/sql/pg_buffercache.sql @@ -26,3 +26,45 @@ SET ROLE pg_monitor; SELECT count(*) > 0 FROM pg_buffercache; SELECT buffers_used + buffers_unused > 0 FROM pg_buffercache_summary(); SELECT count(*) > 0 FROM pg_buffercache_usage_counts(); +RESET role; + + +------ +---- Test pg_buffercache_evict* functions +------ + +CREATE ROLE regress_buffercache_normal; +SET ROLE regress_buffercache_normal; + +-- These should fail because they need to be called as SUPERUSER +SELECT * FROM pg_buffercache_evict(1); +SELECT * FROM pg_buffercache_evict_relation(1); +SELECT * FROM pg_buffercache_evict_all(); + +RESET ROLE; + +-- These should return nothing, because these are STRICT functions +SELECT * FROM pg_buffercache_evict(NULL); +SELECT * FROM pg_buffercache_evict_relation(NULL); + +-- These should fail because they are not called by valid range of buffers +-- Number of the shared buffers are limited by max integer +SELECT 2147483647 max_buffers \gset +SELECT * FROM pg_buffercache_evict(-1); +SELECT * FROM pg_buffercache_evict(0); +SELECT * FROM pg_buffercache_evict(:max_buffers); + +-- This should fail because pg_buffercache_evict_relation() doesn't accept +-- local relations +CREATE TEMP TABLE temp_pg_buffercache(); +SELECT * FROM pg_buffercache_evict_relation('temp_pg_buffercache'); +DROP TABLE temp_pg_buffercache; + +-- These shouldn't fail +SELECT buffer_evicted IS NOT NULL FROM pg_buffercache_evict(1); +SELECT buffers_evicted IS NOT NULL FROM pg_buffercache_evict_all(); +CREATE TABLE shared_pg_buffercache(); +SELECT buffers_evicted IS NOT NULL FROM pg_buffercache_evict_relation('shared_pg_buffercache'); +DROP TABLE shared_pg_buffercache; + +DROP ROLE regress_buffercache_normal; diff --git a/contrib/pg_buffercache/sql/pg_buffercache_numa.sql b/contrib/pg_buffercache/sql/pg_buffercache_numa.sql new file mode 100644 index 0000000000000..837f3d64e21bc --- /dev/null +++ b/contrib/pg_buffercache/sql/pg_buffercache_numa.sql @@ -0,0 +1,21 @@ +SELECT NOT(pg_numa_available()) AS skip_test \gset +\if :skip_test +\quit +\endif + +-- We expect at least one entry for each buffer +select count(*) >= (select setting::bigint + from pg_settings + where name = 'shared_buffers') +from pg_buffercache_numa; + +-- Check that the functions / views can't be accessed by default. To avoid +-- having to create a dedicated user, use the pg_database_owner pseudo-role. +SET ROLE pg_database_owner; +SELECT count(*) > 0 FROM pg_buffercache_numa; +RESET role; + +-- Check that pg_monitor is allowed to query view / function +SET ROLE pg_monitor; +SELECT count(*) > 0 FROM pg_buffercache_numa; +RESET role; diff --git a/contrib/pg_overexplain/expected/pg_overexplain.out b/contrib/pg_overexplain/expected/pg_overexplain.out index 28252dbff6c0d..6de02323d7cfc 100644 --- a/contrib/pg_overexplain/expected/pg_overexplain.out +++ b/contrib/pg_overexplain/expected/pg_overexplain.out @@ -37,7 +37,7 @@ EXPLAIN (DEBUG) SELECT 1; Subplans Needing Rewind: none Relation OIDs: none Executor Parameter Types: none - Parse Location: 16 for 8 bytes + Parse Location: 0 to end (11 rows) EXPLAIN (RANGE_TABLE) SELECT 1; @@ -123,7 +123,7 @@ $$); RTI 1 (relation, inherited, in-from-clause): Eref: vegetables (id, name, genus) Relation: vegetables - Relation Kind: parititioned_table + Relation Kind: partitioned_table Relation Lock Mode: AccessShareLock Permission Info Index: 1 RTI 2 (group): @@ -250,7 +250,7 @@ $$); true + vegetables (id, name, genus) + vegetables + - parititioned_table + + partitioned_table + AccessShareLock + 1 + false + @@ -436,7 +436,7 @@ $$); Subplans Needing Rewind: none Relation OIDs: NNN... Executor Parameter Types: 23 - Parse Location: 75 for 62 bytes + Parse Location: 0 to end (47 rows) RESET enable_hashjoin; @@ -454,7 +454,7 @@ SELECT * FROM vegetables WHERE genus = 'daucus'; RTI 1 (relation, inherited, in-from-clause): Eref: vegetables (id, name, genus) Relation: vegetables - Relation Kind: parititioned_table + Relation Kind: partitioned_table Relation Lock Mode: AccessShareLock Permission Info Index: 1 RTI 2 (relation, in-from-clause): @@ -478,7 +478,7 @@ INSERT INTO vegetables (name, genus) VALUES ('broccoflower', 'brassica'); RTI 1 (relation): Eref: vegetables (id, name, genus) Relation: vegetables - Relation Kind: parititioned_table + Relation Kind: partitioned_table Relation Lock Mode: RowExclusiveLock Permission Info Index: 1 RTI 2 (result): diff --git a/contrib/pg_overexplain/pg_overexplain.c b/contrib/pg_overexplain/pg_overexplain.c index afc34ad5f2f18..de824566f8c90 100644 --- a/contrib/pg_overexplain/pg_overexplain.c +++ b/contrib/pg_overexplain/pg_overexplain.c @@ -54,7 +54,7 @@ static void overexplain_alias(const char *qlabel, Alias *alias, ExplainState *es); static void overexplain_bitmapset(const char *qlabel, Bitmapset *bms, ExplainState *es); -static void overexplain_intlist(const char *qlabel, List *intlist, +static void overexplain_intlist(const char *qlabel, List *list, ExplainState *es); static int es_extension_id; @@ -277,7 +277,7 @@ overexplain_per_plan_hook(PlannedStmt *plannedstmt, * Print out various details from the PlannedStmt that wouldn't otherwise * be displayed. * - * We don't try to print everything here. Information that would be displyed + * We don't try to print everything here. Information that would be displayed * anyway doesn't need to be printed again here, and things with lots of * substructure probably should be printed via separate options, or not at all. */ @@ -292,7 +292,7 @@ overexplain_debug(PlannedStmt *plannedstmt, ExplainState *es) if (es->format == EXPLAIN_FORMAT_TEXT) { ExplainIndentText(es); - appendStringInfo(es->str, "PlannedStmt:\n"); + appendStringInfoString(es->str, "PlannedStmt:\n"); es->indent++; } @@ -329,19 +329,19 @@ overexplain_debug(PlannedStmt *plannedstmt, ExplainState *es) /* Print various properties as a comma-separated list of flags. */ initStringInfo(&flags); if (plannedstmt->hasReturning) - appendStringInfo(&flags, ", hasReturning"); + appendStringInfoString(&flags, ", hasReturning"); if (plannedstmt->hasModifyingCTE) - appendStringInfo(&flags, ", hasModifyingCTE"); + appendStringInfoString(&flags, ", hasModifyingCTE"); if (plannedstmt->canSetTag) - appendStringInfo(&flags, ", canSetTag"); + appendStringInfoString(&flags, ", canSetTag"); if (plannedstmt->transientPlan) - appendStringInfo(&flags, ", transientPlan"); + appendStringInfoString(&flags, ", transientPlan"); if (plannedstmt->dependsOnRole) - appendStringInfo(&flags, ", dependsOnRole"); + appendStringInfoString(&flags, ", dependsOnRole"); if (plannedstmt->parallelModeNeeded) - appendStringInfo(&flags, ", parallelModeNeeded"); + appendStringInfoString(&flags, ", parallelModeNeeded"); if (flags.len == 0) - appendStringInfo(&flags, ", none"); + appendStringInfoString(&flags, ", none"); ExplainPropertyText("Flags", flags.data + 2, es); /* Various lists of integers. */ @@ -517,10 +517,10 @@ overexplain_range_table(PlannedStmt *plannedstmt, ExplainState *es) relkind = "foreign_table"; break; case RELKIND_PARTITIONED_TABLE: - relkind = "parititioned_table"; + relkind = "partitioned_table"; break; case RELKIND_PARTITIONED_INDEX: - relkind = "parititioned_index"; + relkind = "partitioned_index"; break; case '\0': relkind = NULL; @@ -632,7 +632,7 @@ overexplain_range_table(PlannedStmt *plannedstmt, ExplainState *es) } /* - * add_rte_to_flat_rtable will clear coltypes, coltypemods, and + * add_rte_to_flat_rtable will clear coltypes, coltypmods, and * colcollations, so skip those fields. * * If this is an ephemeral named relation, print out ENR-related @@ -675,7 +675,7 @@ overexplain_range_table(PlannedStmt *plannedstmt, ExplainState *es) * Emit a text property describing the contents of an Alias. * * Column lists can be quite long here, so perhaps we should have an option - * to limit the display length by # of columsn or # of characters, but for + * to limit the display length by # of column or # of characters, but for * now, just display everything. */ static void @@ -763,7 +763,7 @@ overexplain_intlist(const char *qlabel, List *list, ExplainState *es) } else { - appendStringInfo(&buf, " not an integer list"); + appendStringInfoString(&buf, " not an integer list"); Assert(false); } diff --git a/contrib/pg_prewarm/Makefile b/contrib/pg_prewarm/Makefile index 9cfde8c4e4fad..617ac8e09b2d8 100644 --- a/contrib/pg_prewarm/Makefile +++ b/contrib/pg_prewarm/Makefile @@ -10,6 +10,8 @@ EXTENSION = pg_prewarm DATA = pg_prewarm--1.1--1.2.sql pg_prewarm--1.1.sql pg_prewarm--1.0--1.1.sql PGFILEDESC = "pg_prewarm - preload relation data into system buffer cache" +REGRESS = pg_prewarm + TAP_TESTS = 1 ifdef USE_PGXS diff --git a/contrib/pg_prewarm/autoprewarm.c b/contrib/pg_prewarm/autoprewarm.c index 73485a2323cfb..c01b9c7e6a4d6 100644 --- a/contrib/pg_prewarm/autoprewarm.c +++ b/contrib/pg_prewarm/autoprewarm.c @@ -41,6 +41,7 @@ #include "storage/latch.h" #include "storage/lwlock.h" #include "storage/procsignal.h" +#include "storage/read_stream.h" #include "storage/smgr.h" #include "tcop/tcopprot.h" #include "utils/guc.h" @@ -75,6 +76,28 @@ typedef struct AutoPrewarmSharedState int prewarmed_blocks; } AutoPrewarmSharedState; +/* + * Private data passed through the read stream API for our use in the + * callback. + */ +typedef struct AutoPrewarmReadStreamData +{ + /* The array of records containing the blocks we should prewarm. */ + BlockInfoRecord *block_info; + + /* + * pos is the read stream callback's index into block_info. Because the + * read stream may read ahead, pos is likely to be ahead of the index in + * the main loop in autoprewarm_database_main(). + */ + int pos; + Oid tablespace; + RelFileNumber filenumber; + ForkNumber forknum; + BlockNumber nblocks; +} AutoPrewarmReadStreamData; + + PGDLLEXPORT void autoprewarm_main(Datum main_arg); PGDLLEXPORT void autoprewarm_database_main(Datum main_arg); @@ -422,6 +445,54 @@ apw_load_buffers(void) apw_state->prewarmed_blocks, num_elements))); } +/* + * Return the next block number of a specific relation and fork to read + * according to the array of BlockInfoRecord. + */ +static BlockNumber +apw_read_stream_next_block(ReadStream *stream, + void *callback_private_data, + void *per_buffer_data) +{ + AutoPrewarmReadStreamData *p = callback_private_data; + + CHECK_FOR_INTERRUPTS(); + + while (p->pos < apw_state->prewarm_stop_idx) + { + BlockInfoRecord blk = p->block_info[p->pos]; + + if (!have_free_buffer()) + { + p->pos = apw_state->prewarm_stop_idx; + return InvalidBlockNumber; + } + + if (blk.tablespace != p->tablespace) + return InvalidBlockNumber; + + if (blk.filenumber != p->filenumber) + return InvalidBlockNumber; + + if (blk.forknum != p->forknum) + return InvalidBlockNumber; + + p->pos++; + + /* + * Check whether blocknum is valid and within fork file size. + * Fast-forward through any invalid blocks. We want p->pos to reflect + * the location of the next relation or fork before ending the stream. + */ + if (blk.blocknum >= p->nblocks) + continue; + + return blk.blocknum; + } + + return InvalidBlockNumber; +} + /* * Prewarm all blocks for one database (and possibly also global objects, if * those got grouped with this database). @@ -429,11 +500,9 @@ apw_load_buffers(void) void autoprewarm_database_main(Datum main_arg) { - int pos; BlockInfoRecord *block_info; - Relation rel = NULL; - BlockNumber nblocks = 0; - BlockInfoRecord *old_blk = NULL; + int i; + BlockInfoRecord blk; dsm_segment *seg; /* Establish signal handlers; once that's done, unblock signals. */ @@ -449,108 +518,142 @@ autoprewarm_database_main(Datum main_arg) errmsg("could not map dynamic shared memory segment"))); BackgroundWorkerInitializeConnectionByOid(apw_state->database, InvalidOid, 0); block_info = (BlockInfoRecord *) dsm_segment_address(seg); - pos = apw_state->prewarm_start_idx; + + i = apw_state->prewarm_start_idx; + blk = block_info[i]; /* * Loop until we run out of blocks to prewarm or until we run out of free * buffers. */ - while (pos < apw_state->prewarm_stop_idx && have_free_buffer()) + while (i < apw_state->prewarm_stop_idx && have_free_buffer()) { - BlockInfoRecord *blk = &block_info[pos++]; - Buffer buf; - - CHECK_FOR_INTERRUPTS(); + Oid tablespace = blk.tablespace; + RelFileNumber filenumber = blk.filenumber; + Oid reloid; + Relation rel; /* - * Quit if we've reached records for another database. If previous - * blocks are of some global objects, then continue pre-warming. + * All blocks between prewarm_start_idx and prewarm_stop_idx should + * belong either to global objects or the same database. */ - if (old_blk != NULL && old_blk->database != blk->database && - old_blk->database != 0) - break; + Assert(blk.database == apw_state->database || blk.database == 0); - /* - * As soon as we encounter a block of a new relation, close the old - * relation. Note that rel will be NULL if try_relation_open failed - * previously; in that case, there is nothing to close. - */ - if (old_blk != NULL && old_blk->filenumber != blk->filenumber && - rel != NULL) - { - relation_close(rel, AccessShareLock); - rel = NULL; - CommitTransactionCommand(); - } + StartTransactionCommand(); - /* - * Try to open each new relation, but only once, when we first - * encounter it. If it's been dropped, skip the associated blocks. - */ - if (old_blk == NULL || old_blk->filenumber != blk->filenumber) + reloid = RelidByRelfilenumber(blk.tablespace, blk.filenumber); + if (!OidIsValid(reloid) || + (rel = try_relation_open(reloid, AccessShareLock)) == NULL) { - Oid reloid; + /* We failed to open the relation, so there is nothing to close. */ + CommitTransactionCommand(); - Assert(rel == NULL); - StartTransactionCommand(); - reloid = RelidByRelfilenumber(blk->tablespace, blk->filenumber); - if (OidIsValid(reloid)) - rel = try_relation_open(reloid, AccessShareLock); + /* + * Fast-forward to the next relation. We want to skip all of the + * other records referencing this relation since we know we can't + * open it. That way, we avoid repeatedly trying and failing to + * open the same relation. + */ + for (; i < apw_state->prewarm_stop_idx; i++) + { + blk = block_info[i]; + if (blk.tablespace != tablespace || + blk.filenumber != filenumber) + break; + } - if (!rel) - CommitTransactionCommand(); - } - if (!rel) - { - old_blk = blk; + /* Time to try and open our newfound relation */ continue; } - /* Once per fork, check for fork existence and size. */ - if (old_blk == NULL || - old_blk->filenumber != blk->filenumber || - old_blk->forknum != blk->forknum) + /* + * We have a relation; now let's loop until we find a valid fork of + * the relation or we run out of free buffers. Once we've read from + * all valid forks or run out of options, we'll close the relation and + * move on. + */ + while (i < apw_state->prewarm_stop_idx && + blk.tablespace == tablespace && + blk.filenumber == filenumber && + have_free_buffer()) { + ForkNumber forknum = blk.forknum; + BlockNumber nblocks; + struct AutoPrewarmReadStreamData p; + ReadStream *stream; + Buffer buf; + /* * smgrexists is not safe for illegal forknum, hence check whether * the passed forknum is valid before using it in smgrexists. */ - if (blk->forknum > InvalidForkNumber && - blk->forknum <= MAX_FORKNUM && - smgrexists(RelationGetSmgr(rel), blk->forknum)) - nblocks = RelationGetNumberOfBlocksInFork(rel, blk->forknum); - else - nblocks = 0; - } + if (blk.forknum <= InvalidForkNumber || + blk.forknum > MAX_FORKNUM || + !smgrexists(RelationGetSmgr(rel), blk.forknum)) + { + /* + * Fast-forward to the next fork. We want to skip all of the + * other records referencing this fork since we already know + * it's not valid. + */ + for (; i < apw_state->prewarm_stop_idx; i++) + { + blk = block_info[i]; + if (blk.tablespace != tablespace || + blk.filenumber != filenumber || + blk.forknum != forknum) + break; + } + + /* Time to check if this newfound fork is valid */ + continue; + } - /* Check whether blocknum is valid and within fork file size. */ - if (blk->blocknum >= nblocks) - { - /* Move to next forknum. */ - old_blk = blk; - continue; - } + nblocks = RelationGetNumberOfBlocksInFork(rel, blk.forknum); - /* Prewarm buffer. */ - buf = ReadBufferExtended(rel, blk->forknum, blk->blocknum, RBM_NORMAL, - NULL); - if (BufferIsValid(buf)) - { - apw_state->prewarmed_blocks++; - ReleaseBuffer(buf); - } + p = (struct AutoPrewarmReadStreamData) + { + .block_info = block_info, + .pos = i, + .tablespace = tablespace, + .filenumber = filenumber, + .forknum = forknum, + .nblocks = nblocks, + }; + + stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE | + READ_STREAM_DEFAULT | + READ_STREAM_USE_BATCHING, + NULL, + rel, + p.forknum, + apw_read_stream_next_block, + &p, + 0); - old_blk = blk; - } + /* + * Loop until we've prewarmed all the blocks from this fork. The + * read stream callback will check that we still have free buffers + * before requesting each block from the read stream API. + */ + while ((buf = read_stream_next_buffer(stream, NULL)) != InvalidBuffer) + { + apw_state->prewarmed_blocks++; + ReleaseBuffer(buf); + } - dsm_detach(seg); + read_stream_end(stream); + + /* Advance i past all the blocks just prewarmed. */ + i = p.pos; + blk = block_info[i]; + } - /* Release lock on previous relation. */ - if (rel) - { relation_close(rel, AccessShareLock); CommitTransactionCommand(); } + + dsm_detach(seg); } /* @@ -590,8 +693,15 @@ apw_dump_now(bool is_bgworker, bool dump_unlogged) return 0; } - block_info_array = - (BlockInfoRecord *) palloc(sizeof(BlockInfoRecord) * NBuffers); + /* + * With sufficiently large shared_buffers, allocation will exceed 1GB, so + * allow for a huge allocation to prevent outright failure. + * + * (In the future, it might be a good idea to redesign this to use a more + * memory-efficient data structure.) + */ + block_info_array = (BlockInfoRecord *) + palloc_extended((sizeof(BlockInfoRecord) * NBuffers), MCXT_ALLOC_HUGE); for (num_blocks = 0, i = 0; i < NBuffers; i++) { diff --git a/contrib/pg_prewarm/expected/pg_prewarm.out b/contrib/pg_prewarm/expected/pg_prewarm.out new file mode 100644 index 0000000000000..94e4fa1a9d237 --- /dev/null +++ b/contrib/pg_prewarm/expected/pg_prewarm.out @@ -0,0 +1,10 @@ +-- Test pg_prewarm extension +CREATE EXTENSION pg_prewarm; +-- pg_prewarm() should fail if the target relation has no storage. +CREATE TABLE test (c1 int) PARTITION BY RANGE (c1); +SELECT pg_prewarm('test', 'buffer'); +ERROR: relation "test" does not have storage +DETAIL: This operation is not supported for partitioned tables. +-- Cleanup +DROP TABLE test; +DROP EXTENSION pg_prewarm; diff --git a/contrib/pg_prewarm/meson.build b/contrib/pg_prewarm/meson.build index 82b9851303ce3..f24c47ef6a533 100644 --- a/contrib/pg_prewarm/meson.build +++ b/contrib/pg_prewarm/meson.build @@ -29,6 +29,11 @@ tests += { 'name': 'pg_prewarm', 'sd': meson.current_source_dir(), 'bd': meson.current_build_dir(), + 'regress': { + 'sql': [ + 'pg_prewarm', + ], + }, 'tap': { 'tests': [ 't/001_basic.pl', diff --git a/contrib/pg_prewarm/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c index c0efb530c4e5f..b968933ea8b6c 100644 --- a/contrib/pg_prewarm/pg_prewarm.c +++ b/contrib/pg_prewarm/pg_prewarm.c @@ -112,6 +112,14 @@ pg_prewarm(PG_FUNCTION_ARGS) if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, get_relkind_objtype(rel->rd_rel->relkind), get_rel_name(relOid)); + /* Check that the relation has storage. */ + if (!RELKIND_HAS_STORAGE(rel->rd_rel->relkind)) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("relation \"%s\" does not have storage", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); + /* Check that the fork exists. */ if (!smgrexists(RelationGetSmgr(rel), forkNumber)) ereport(ERROR, @@ -202,7 +210,8 @@ pg_prewarm(PG_FUNCTION_ARGS) * It is safe to use batchmode as block_range_read_stream_cb takes no * locks. */ - stream = read_stream_begin_relation(READ_STREAM_FULL | + stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE | + READ_STREAM_FULL | READ_STREAM_USE_BATCHING, NULL, rel, diff --git a/contrib/pg_prewarm/sql/pg_prewarm.sql b/contrib/pg_prewarm/sql/pg_prewarm.sql new file mode 100644 index 0000000000000..c76f2c7916436 --- /dev/null +++ b/contrib/pg_prewarm/sql/pg_prewarm.sql @@ -0,0 +1,10 @@ +-- Test pg_prewarm extension +CREATE EXTENSION pg_prewarm; + +-- pg_prewarm() should fail if the target relation has no storage. +CREATE TABLE test (c1 int) PARTITION BY RANGE (c1); +SELECT pg_prewarm('test', 'buffer'); + +-- Cleanup +DROP TABLE test; +DROP EXTENSION pg_prewarm; diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index b2bd8794d2a14..fe0478ac55266 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -7,6 +7,7 @@ OBJS = \ EXTENSION = pg_stat_statements DATA = pg_stat_statements--1.4.sql \ + pg_stat_statements--1.12--1.13.sql \ pg_stat_statements--1.11--1.12.sql pg_stat_statements--1.10--1.11.sql \ pg_stat_statements--1.9--1.10.sql pg_stat_statements--1.8--1.9.sql \ pg_stat_statements--1.7--1.8.sql pg_stat_statements--1.6--1.7.sql \ @@ -20,7 +21,7 @@ LDFLAGS_SL += $(filter -lm, $(LIBS)) REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/pg_stat_statements/pg_stat_statements.conf REGRESS = select dml cursors utility level_tracking planning \ user_activity wal entry_timestamp privileges extended \ - parallel cleanup oldextversions squashing + parallel plancache cleanup oldextversions squashing # Disabled because these tests require "shared_preload_libraries=pg_stat_statements", # which typical installcheck users do not have (e.g. buildfarm clients). NO_INSTALLCHECK = 1 diff --git a/contrib/pg_stat_statements/expected/cursors.out b/contrib/pg_stat_statements/expected/cursors.out index 0fc4b2c098d0e..6afb48ace9220 100644 --- a/contrib/pg_stat_statements/expected/cursors.out +++ b/contrib/pg_stat_statements/expected/cursors.out @@ -57,8 +57,8 @@ SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; 1 | 0 | COMMIT 1 | 0 | DECLARE cursor_stats_1 CURSOR WITH HOLD FOR SELECT $1 1 | 0 | DECLARE cursor_stats_2 CURSOR WITH HOLD FOR SELECT $1 - 1 | 1 | FETCH 1 IN cursor_stats_1 - 1 | 1 | FETCH 1 IN cursor_stats_2 + 1 | 1 | FETCH $1 IN cursor_stats_1 + 1 | 1 | FETCH $1 IN cursor_stats_2 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (9 rows) @@ -68,3 +68,140 @@ SELECT pg_stat_statements_reset() IS NOT NULL AS t; t (1 row) +-- Normalization of FETCH statements +BEGIN; +DECLARE pgss_cursor CURSOR FOR SELECT FROM generate_series(1, 10); +-- implicit directions +FETCH pgss_cursor; +-- +(1 row) + +FETCH 1 pgss_cursor; +-- +(1 row) + +FETCH 2 pgss_cursor; +-- +(2 rows) + +FETCH -1 pgss_cursor; +-- +(1 row) + +-- explicit NEXT +FETCH NEXT pgss_cursor; +-- +(1 row) + +-- explicit PRIOR +FETCH PRIOR pgss_cursor; +-- +(1 row) + +-- explicit FIRST +FETCH FIRST pgss_cursor; +-- +(1 row) + +-- explicit LAST +FETCH LAST pgss_cursor; +-- +(1 row) + +-- explicit ABSOLUTE +FETCH ABSOLUTE 1 pgss_cursor; +-- +(1 row) + +FETCH ABSOLUTE 2 pgss_cursor; +-- +(1 row) + +FETCH ABSOLUTE -1 pgss_cursor; +-- +(1 row) + +-- explicit RELATIVE +FETCH RELATIVE 1 pgss_cursor; +-- +(0 rows) + +FETCH RELATIVE 2 pgss_cursor; +-- +(0 rows) + +FETCH RELATIVE -1 pgss_cursor; +-- +(1 row) + +-- explicit FORWARD +FETCH ALL pgss_cursor; +-- +(0 rows) + +-- explicit FORWARD ALL +FETCH FORWARD ALL pgss_cursor; +-- +(0 rows) + +-- explicit FETCH FORWARD +FETCH FORWARD pgss_cursor; +-- +(0 rows) + +FETCH FORWARD 1 pgss_cursor; +-- +(0 rows) + +FETCH FORWARD 2 pgss_cursor; +-- +(0 rows) + +FETCH FORWARD -1 pgss_cursor; +-- +(1 row) + +-- explicit FETCH BACKWARD +FETCH BACKWARD pgss_cursor; +-- +(1 row) + +FETCH BACKWARD 1 pgss_cursor; +-- +(1 row) + +FETCH BACKWARD 2 pgss_cursor; +-- +(2 rows) + +FETCH BACKWARD -1 pgss_cursor; +-- +(1 row) + +-- explicit BACKWARD ALL +FETCH BACKWARD ALL pgss_cursor; +-- +(6 rows) + +COMMIT; +SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; + calls | query +-------+-------------------------------------------------------------------- + 1 | BEGIN + 1 | COMMIT + 1 | DECLARE pgss_cursor CURSOR FOR SELECT FROM generate_series($1, $2) + 3 | FETCH ABSOLUTE $1 pgss_cursor + 1 | FETCH ALL pgss_cursor + 1 | FETCH BACKWARD ALL pgss_cursor + 4 | FETCH BACKWARD pgss_cursor + 1 | FETCH FIRST pgss_cursor + 1 | FETCH FORWARD ALL pgss_cursor + 4 | FETCH FORWARD pgss_cursor + 1 | FETCH LAST pgss_cursor + 1 | FETCH NEXT pgss_cursor + 1 | FETCH PRIOR pgss_cursor + 3 | FETCH RELATIVE $1 pgss_cursor + 4 | FETCH pgss_cursor + 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t +(16 rows) + diff --git a/contrib/pg_stat_statements/expected/extended.out b/contrib/pg_stat_statements/expected/extended.out index 04a05943372b9..1bfd0c1ca242f 100644 --- a/contrib/pg_stat_statements/expected/extended.out +++ b/contrib/pg_stat_statements/expected/extended.out @@ -68,3 +68,97 @@ SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (4 rows) +-- Various parameter numbering patterns +-- Unique query IDs with parameter numbers switched. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT WHERE ($1::int, 7) IN ((8, $2::int), ($3::int, 9)) \bind '1' '2' '3' \g +-- +(0 rows) + +SELECT WHERE ($2::int, 10) IN ((11, $3::int), ($1::int, 12)) \bind '1' '2' '3' \g +-- +(0 rows) + +SELECT WHERE $1::int IN ($2::int, $3::int) \bind '1' '2' '3' \g +-- +(0 rows) + +SELECT WHERE $2::int IN ($3::int, $1::int) \bind '1' '2' '3' \g +-- +(0 rows) + +SELECT WHERE $3::int IN ($1::int, $2::int) \bind '1' '2' '3' \g +-- +(0 rows) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +--------------------------------------------------------------+------- + SELECT WHERE $1::int IN ($2 /*, ... */) | 1 + SELECT WHERE $1::int IN ($2 /*, ... */) | 1 + SELECT WHERE $1::int IN ($2 /*, ... */) | 1 + SELECT WHERE ($1::int, $4) IN (($5, $2::int), ($3::int, $6)) | 1 + SELECT WHERE ($2::int, $4) IN (($5, $3::int), ($1::int, $6)) | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(6 rows) + +-- Two groups of two queries with the same query ID. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT WHERE '1'::int IN ($1::int, '2'::int) \bind '1' \g +-- +(1 row) + +SELECT WHERE '4'::int IN ($1::int, '5'::int) \bind '2' \g +-- +(0 rows) + +SELECT WHERE $2::int IN ($1::int, '1'::int) \bind '1' '2' \g +-- +(0 rows) + +SELECT WHERE $2::int IN ($1::int, '2'::int) \bind '3' '4' \g +-- +(0 rows) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------+------- + SELECT WHERE $1::int IN ($2 /*, ... */) | 2 + SELECT WHERE $1::int IN ($2 /*, ... */) | 2 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) + +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +-- no squashable list, the parameters id's are kept as-is +SELECT WHERE $3 = $1 AND $2 = $4 \bind 1 2 1 2 \g +-- +(1 row) + +-- squashable list, so the parameter IDs will be re-assigned +SELECT WHERE 1 IN (1, 2, 3) AND $3 = $1 AND $2 = $4 \bind 1 2 1 2 \g +-- +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +------------------------------------------------------------+------- + SELECT WHERE $1 IN ($2 /*, ... */) AND $3 = $4 AND $5 = $6 | 1 + SELECT WHERE $3 = $1 AND $2 = $4 | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) + diff --git a/contrib/pg_stat_statements/expected/level_tracking.out b/contrib/pg_stat_statements/expected/level_tracking.out index 03bea14d5da09..8e8388dd5cb1f 100644 --- a/contrib/pg_stat_statements/expected/level_tracking.out +++ b/contrib/pg_stat_statements/expected/level_tracking.out @@ -206,37 +206,37 @@ EXPLAIN (COSTS OFF) SELECT 1 UNION SELECT 2; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+-------------------------------------------------------------------- - f | 1 | DELETE FROM stats_track_tab + toplevel | calls | query +----------+-------+--------------------------------------------------------------------- t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2) + f | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2); t | 1 | EXPLAIN (COSTS OFF) (TABLE test_table) + f | 1 | EXPLAIN (COSTS OFF) (TABLE test_table); t | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)) + f | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)); t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab + f | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab; t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)) - t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + + f | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)); + t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) + f | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); t | 1 | EXPLAIN (COSTS OFF) SELECT $1 t | 1 | EXPLAIN (COSTS OFF) SELECT $1 UNION SELECT $2 + f | 1 | EXPLAIN (COSTS OFF) SELECT $1 UNION SELECT $2; + f | 1 | EXPLAIN (COSTS OFF) SELECT $1; t | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab + f | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab; t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2 + f | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2; t | 1 | EXPLAIN (COSTS OFF) VALUES ($1) - f | 1 | INSERT INTO stats_track_tab VALUES (($1)) - f | 1 | MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - f | 1 | SELECT $1 - f | 1 | SELECT $1 UNION SELECT $2 - f | 1 | SELECT $1, $2 + f | 1 | EXPLAIN (COSTS OFF) VALUES ($1); t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - f | 1 | TABLE stats_track_tab - f | 1 | TABLE test_table - f | 1 | UPDATE stats_track_tab SET x = $1 WHERE x = $2 - f | 1 | VALUES ($1) - f | 1 | VALUES ($1, $2) (23 rows) -- EXPLAIN - top-level tracking. @@ -405,20 +405,20 @@ EXPLAIN (COSTS OFF) SELECT 1, 2 UNION SELECT 3, 4\; EXPLAIN (COSTS OFF) (SELECT SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+----------------------------------------------------------------- - f | 1 | (SELECT $1, $2, $3) UNION SELECT $4, $5, $6 + toplevel | calls | query +----------+-------+--------------------------------------------------------------------------------------------------------------------- t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) UNION SELECT $4, $5, $6 + f | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3); EXPLAIN (COSTS OFF) (SELECT 1, 2, 3, 4); t | 1 | EXPLAIN (COSTS OFF) (SELECT $1, $2, $3, $4) + f | 1 | EXPLAIN (COSTS OFF) (SELECT 1, 2, 3); EXPLAIN (COSTS OFF) (SELECT $1, $2, $3, $4); t | 1 | EXPLAIN (COSTS OFF) SELECT $1 t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 UNION SELECT $3, $4 - f | 1 | SELECT $1 - f | 1 | SELECT $1, $2 - f | 1 | SELECT $1, $2 UNION SELECT $3, $4 - f | 1 | SELECT $1, $2, $3 - f | 1 | SELECT $1, $2, $3, $4 + f | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2 UNION SELECT $3, $4; EXPLAIN (COSTS OFF) (SELECT 1, 2, 3) UNION SELECT 3, 4, 5; + f | 1 | EXPLAIN (COSTS OFF) SELECT $1; EXPLAIN (COSTS OFF) SELECT 1, 2; + f | 1 | EXPLAIN (COSTS OFF) SELECT 1, 2 UNION SELECT 3, 4; EXPLAIN (COSTS OFF) (SELECT $1, $2, $3) UNION SELECT $4, $5, $6; + f | 1 | EXPLAIN (COSTS OFF) SELECT 1; EXPLAIN (COSTS OFF) SELECT $1, $2; t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (13 rows) @@ -494,29 +494,29 @@ EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ((1))\; EXPLAIN (COSTS OF SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+-------------------------------------------------------------------- - f | 1 | DELETE FROM stats_track_tab - f | 1 | DELETE FROM stats_track_tab WHERE x = $1 + toplevel | calls | query +----------+-------+---------------------------------------------------------------------------------------------------------------------------------- t | 1 | EXPLAIN (COSTS OFF) (TABLE test_table) t | 1 | EXPLAIN (COSTS OFF) (VALUES ($1, $2)) t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab t | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = $1 + f | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab; EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = $1; + f | 1 | EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab; EXPLAIN (COSTS OFF) DELETE FROM stats_track_tab WHERE x = 1; t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ($1), ($2) t | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)) + f | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (($1)); EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES (1), (2); + f | 1 | EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ((1)); EXPLAIN (COSTS OFF) INSERT INTO stats_track_tab VALUES ($1), ($2); t | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab + f | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab; EXPLAIN (COSTS OFF) (TABLE test_table); + f | 1 | EXPLAIN (COSTS OFF) TABLE stats_track_tab; EXPLAIN (COSTS OFF) (TABLE test_table); t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 t | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2 + f | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1 WHERE x = $2; EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1; + f | 1 | EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = 1 WHERE x = 1; EXPLAIN (COSTS OFF) UPDATE stats_track_tab SET x = $1; t | 1 | EXPLAIN (COSTS OFF) VALUES ($1) - f | 1 | INSERT INTO stats_track_tab VALUES ($1), ($2) - f | 1 | INSERT INTO stats_track_tab VALUES (($1)) + f | 1 | EXPLAIN (COSTS OFF) VALUES ($1); EXPLAIN (COSTS OFF) (VALUES (1, 2)); + f | 1 | EXPLAIN (COSTS OFF) VALUES (1); EXPLAIN (COSTS OFF) (VALUES ($1, $2)); t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - f | 1 | TABLE stats_track_tab - f | 1 | TABLE test_table - f | 1 | UPDATE stats_track_tab SET x = $1 - f | 1 | UPDATE stats_track_tab SET x = $1 WHERE x = $2 - f | 1 | VALUES ($1) - f | 1 | VALUES ($1, $2) (21 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -547,18 +547,21 @@ EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------- - t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id+ - | | WHEN MATCHED THEN UPDATE SET x = id + + toplevel | calls | query +----------+-------+------------------------------------------------------------------------------------------------ + t | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) + f | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); EXPLAIN (COSTS OFF) SELECT 1, 2, 3, 4, 5; + f | 1 | EXPLAIN (COSTS OFF) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series(1, 10) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); EXPLAIN (COSTS OFF) SELECT $1, $2, $3, $4, $5; t | 1 | EXPLAIN (COSTS OFF) SELECT $1, $2, $3, $4, $5 - f | 1 | MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($1, $2) id) ON x = id+ - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - f | 1 | SELECT $1, $2, $3, $4, $5 t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (5 rows) @@ -786,29 +789,29 @@ EXPLAIN (COSTS OFF) WITH a AS (select 4) SELECT 1 UNION SELECT 2; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------------------ + toplevel | calls | query +----------+-------+------------------------------------------------------------------------------------------- t | 1 | EXPLAIN (COSTS OFF) (WITH a AS (SELECT $1) (SELECT $2, $3)) + f | 1 | EXPLAIN (COSTS OFF) (WITH a AS (SELECT $1) (SELECT $2, $3)); t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) DELETE FROM stats_track_tab + f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) DELETE FROM stats_track_tab; t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) INSERT INTO stats_track_tab VALUES (($2)) - t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + + f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) INSERT INTO stats_track_tab VALUES (($2)); + t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) + f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) MERGE INTO stats_track_tab + + | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id); t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) SELECT $2 + f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) SELECT $2; t | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) UPDATE stats_track_tab SET x = $2 WHERE x = $3 + f | 1 | EXPLAIN (COSTS OFF) WITH a AS (SELECT $1) UPDATE stats_track_tab SET x = $2 WHERE x = $3; t | 1 | EXPLAIN (COSTS OFF) WITH a AS (select $1) SELECT $2 UNION SELECT $3 + f | 1 | EXPLAIN (COSTS OFF) WITH a AS (select $1) SELECT $2 UNION SELECT $3; t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - f | 1 | WITH a AS (SELECT $1) (SELECT $2, $3) - f | 1 | WITH a AS (SELECT $1) DELETE FROM stats_track_tab - f | 1 | WITH a AS (SELECT $1) INSERT INTO stats_track_tab VALUES (($2)) - f | 1 | WITH a AS (SELECT $1) MERGE INTO stats_track_tab + - | | USING (SELECT id FROM generate_series($2, $3) id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) - f | 1 | WITH a AS (SELECT $1) SELECT $2 - f | 1 | WITH a AS (SELECT $1) UPDATE stats_track_tab SET x = $2 WHERE x = $3 - f | 1 | WITH a AS (select $1) SELECT $2 UNION SELECT $3 (15 rows) -- EXPLAIN with CTEs - top-level tracking @@ -918,13 +921,14 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+------------------------------------------------------------------------------ - t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) + + toplevel | calls | query +----------+-------+------------------------------------------------------------------------------- + t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) + | | DECLARE foocur CURSOR FOR SELECT * FROM stats_track_tab + f | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) + + | | DECLARE foocur CURSOR FOR SELECT * FROM stats_track_tab; t | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT $1 - f | 1 | SELECT $1 - f | 1 | SELECT * FROM stats_track_tab + f | 1 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT $1; t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (5 rows) @@ -1047,10 +1051,10 @@ SELECT toplevel, calls, query FROM pg_stat_statements toplevel | calls | query ----------+-------+----------------------------------------------------------------- t | 1 | CREATE TEMPORARY TABLE pgss_ctas_1 AS SELECT $1 + f | 1 | CREATE TEMPORARY TABLE pgss_ctas_1 AS SELECT $1; t | 1 | CREATE TEMPORARY TABLE pgss_ctas_2 AS EXECUTE test_prepare_pgss - f | 1 | SELECT $1 + f | 1 | PREPARE test_prepare_pgss AS select generate_series($1, $2) t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - f | 1 | select generate_series($1, $2) (5 rows) -- CREATE TABLE AS, top-level tracking. @@ -1088,10 +1092,10 @@ EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT 1; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------------------- + toplevel | calls | query +----------+-------+---------------------------------------------------------------------------- t | 1 | EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT $1 - f | 1 | SELECT $1 + f | 1 | EXPLAIN (COSTS OFF) CREATE TEMPORARY TABLE pgss_explain_ctas AS SELECT $1; t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (3 rows) @@ -1136,14 +1140,14 @@ CLOSE foocur; COMMIT; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------- + toplevel | calls | query +----------+-------+---------------------------------------------------------- t | 1 | BEGIN t | 1 | CLOSE foocur t | 1 | COMMIT t | 1 | DECLARE FOOCUR CURSOR FOR SELECT * from stats_track_tab - t | 1 | FETCH FORWARD 1 FROM foocur - f | 1 | SELECT * from stats_track_tab + f | 1 | DECLARE FOOCUR CURSOR FOR SELECT * from stats_track_tab; + t | 1 | FETCH FORWARD $1 FROM foocur t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (7 rows) @@ -1172,7 +1176,7 @@ SELECT toplevel, calls, query FROM pg_stat_statements t | 1 | CLOSE foocur t | 1 | COMMIT t | 1 | DECLARE FOOCUR CURSOR FOR SELECT * FROM stats_track_tab - t | 1 | FETCH FORWARD 1 FROM foocur + t | 1 | FETCH FORWARD $1 FROM foocur t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (6 rows) @@ -1203,25 +1207,25 @@ COPY (DELETE FROM stats_track_tab WHERE x = 2 RETURNING x) TO stdout; 2 SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; - toplevel | calls | query -----------+-------+--------------------------------------------------------------------------- + toplevel | calls | query +----------+-------+----------------------------------------------------------------------------- + f | 1 | COPY (DELETE FROM stats_track_tab WHERE x = $1 RETURNING x) TO stdout t | 1 | COPY (DELETE FROM stats_track_tab WHERE x = 2 RETURNING x) TO stdout + f | 1 | COPY (INSERT INTO stats_track_tab (x) VALUES ($1) RETURNING x) TO stdout t | 1 | COPY (INSERT INTO stats_track_tab (x) VALUES (1) RETURNING x) TO stdout - t | 1 | COPY (MERGE INTO stats_track_tab USING (SELECT 1 id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + + f | 1 | COPY (MERGE INTO stats_track_tab USING (SELECT $1 id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) RETURNING x) TO stdout + t | 1 | COPY (MERGE INTO stats_track_tab USING (SELECT 1 id) ON x = id + + | | WHEN MATCHED THEN UPDATE SET x = id + | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) RETURNING x) TO stdout + f | 1 | COPY (SELECT $1 UNION SELECT $2) TO stdout + f | 1 | COPY (SELECT $1) TO stdout t | 1 | COPY (SELECT 1 UNION SELECT 2) TO stdout t | 1 | COPY (SELECT 1) TO stdout + f | 1 | COPY (UPDATE stats_track_tab SET x = $1 WHERE x = $2 RETURNING x) TO stdout t | 1 | COPY (UPDATE stats_track_tab SET x = 2 WHERE x = 1 RETURNING x) TO stdout - f | 1 | DELETE FROM stats_track_tab WHERE x = $1 RETURNING x - f | 1 | INSERT INTO stats_track_tab (x) VALUES ($1) RETURNING x - f | 1 | MERGE INTO stats_track_tab USING (SELECT $1 id) ON x = id + - | | WHEN MATCHED THEN UPDATE SET x = id + - | | WHEN NOT MATCHED THEN INSERT (x) VALUES (id) RETURNING x - f | 1 | SELECT $1 - f | 1 | SELECT $1 UNION SELECT $2 t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t - f | 1 | UPDATE stats_track_tab SET x = $1 WHERE x = $2 RETURNING x (13 rows) -- COPY - top-level tracking. @@ -1319,6 +1323,57 @@ SELECT toplevel, calls, query FROM pg_stat_statements t | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (4 rows) +-- DO block --- multiple inner queries with separators +SET pg_stat_statements.track = 'all'; +SET pg_stat_statements.track_utility = TRUE; +CREATE TABLE pgss_do_util_tab_1 (a int); +CREATE TABLE pgss_do_util_tab_2 (a int); +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +DO $$ +DECLARE BEGIN + EXECUTE 'CREATE TABLE pgss_do_table (id INT); DROP TABLE pgss_do_table'; + EXECUTE 'SELECT a FROM pgss_do_util_tab_1; SELECT a FROM pgss_do_util_tab_2'; +END $$; +SELECT toplevel, calls, rows, query FROM pg_stat_statements + WHERE toplevel IS FALSE + ORDER BY query COLLATE "C"; + toplevel | calls | rows | query +----------+-------+------+------------------------------------- + f | 1 | 0 | CREATE TABLE pgss_do_table (id INT) + f | 1 | 0 | DROP TABLE pgss_do_table + f | 1 | 0 | SELECT a FROM pgss_do_util_tab_1 + f | 1 | 0 | SELECT a FROM pgss_do_util_tab_2 +(4 rows) + +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +-- Note the extra semicolon at the end of the query. +DO $$ +DECLARE BEGIN + EXECUTE 'CREATE TABLE pgss_do_table (id INT); DROP TABLE pgss_do_table;'; + EXECUTE 'SELECT a FROM pgss_do_util_tab_1; SELECT a FROM pgss_do_util_tab_2;'; +END $$; +SELECT toplevel, calls, rows, query FROM pg_stat_statements + WHERE toplevel IS FALSE + ORDER BY query COLLATE "C"; + toplevel | calls | rows | query +----------+-------+------+------------------------------------- + f | 1 | 0 | CREATE TABLE pgss_do_table (id INT) + f | 1 | 0 | DROP TABLE pgss_do_table + f | 1 | 0 | SELECT a FROM pgss_do_util_tab_1 + f | 1 | 0 | SELECT a FROM pgss_do_util_tab_2 +(4 rows) + +DROP TABLE pgss_do_util_tab_1, pgss_do_util_tab_2; -- PL/pgSQL function - top-level tracking. SET pg_stat_statements.track = 'top'; SET pg_stat_statements.track_utility = FALSE; diff --git a/contrib/pg_stat_statements/expected/oldextversions.out b/contrib/pg_stat_statements/expected/oldextversions.out index de679b19711ab..726383a99d7c1 100644 --- a/contrib/pg_stat_statements/expected/oldextversions.out +++ b/contrib/pg_stat_statements/expected/oldextversions.out @@ -407,4 +407,71 @@ SELECT count(*) > 0 AS has_data FROM pg_stat_statements; t (1 row) +-- New functions and views for pg_stat_statements in 1.13 +AlTER EXTENSION pg_stat_statements UPDATE TO '1.13'; +\d pg_stat_statements + View "public.pg_stat_statements" + Column | Type | Collation | Nullable | Default +----------------------------+--------------------------+-----------+----------+--------- + userid | oid | | | + dbid | oid | | | + toplevel | boolean | | | + queryid | bigint | | | + query | text | | | + plans | bigint | | | + total_plan_time | double precision | | | + min_plan_time | double precision | | | + max_plan_time | double precision | | | + mean_plan_time | double precision | | | + stddev_plan_time | double precision | | | + calls | bigint | | | + total_exec_time | double precision | | | + min_exec_time | double precision | | | + max_exec_time | double precision | | | + mean_exec_time | double precision | | | + stddev_exec_time | double precision | | | + rows | bigint | | | + shared_blks_hit | bigint | | | + shared_blks_read | bigint | | | + shared_blks_dirtied | bigint | | | + shared_blks_written | bigint | | | + local_blks_hit | bigint | | | + local_blks_read | bigint | | | + local_blks_dirtied | bigint | | | + local_blks_written | bigint | | | + temp_blks_read | bigint | | | + temp_blks_written | bigint | | | + shared_blk_read_time | double precision | | | + shared_blk_write_time | double precision | | | + local_blk_read_time | double precision | | | + local_blk_write_time | double precision | | | + temp_blk_read_time | double precision | | | + temp_blk_write_time | double precision | | | + wal_records | bigint | | | + wal_fpi | bigint | | | + wal_bytes | numeric | | | + wal_buffers_full | bigint | | | + jit_functions | bigint | | | + jit_generation_time | double precision | | | + jit_inlining_count | bigint | | | + jit_inlining_time | double precision | | | + jit_optimization_count | bigint | | | + jit_optimization_time | double precision | | | + jit_emission_count | bigint | | | + jit_emission_time | double precision | | | + jit_deform_count | bigint | | | + jit_deform_time | double precision | | | + parallel_workers_to_launch | bigint | | | + parallel_workers_launched | bigint | | | + generic_plan_calls | bigint | | | + custom_plan_calls | bigint | | | + stats_since | timestamp with time zone | | | + minmax_stats_since | timestamp with time zone | | | + +SELECT count(*) > 0 AS has_data FROM pg_stat_statements; + has_data +---------- + t +(1 row) + DROP EXTENSION pg_stat_statements; diff --git a/contrib/pg_stat_statements/expected/plancache.out b/contrib/pg_stat_statements/expected/plancache.out new file mode 100644 index 0000000000000..e152de9f55130 --- /dev/null +++ b/contrib/pg_stat_statements/expected/plancache.out @@ -0,0 +1,224 @@ +-- +-- Tests with plan cache +-- +-- Setup +CREATE OR REPLACE FUNCTION select_one_func(int) RETURNS VOID AS $$ +DECLARE + ret INT; +BEGIN + SELECT $1 INTO ret; +END; +$$ LANGUAGE plpgsql; +CREATE OR REPLACE PROCEDURE select_one_proc(int) AS $$ +DECLARE + ret INT; +BEGIN + SELECT $1 INTO ret; +END; +$$ LANGUAGE plpgsql; +-- Prepared statements +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +PREPARE p1 AS SELECT $1 AS a; +SET plan_cache_mode TO force_generic_plan; +EXECUTE p1(1); + a +--- + 1 +(1 row) + +SET plan_cache_mode TO force_custom_plan; +EXECUTE p1(1); + a +--- + 1 +(1 row) + +SELECT calls, generic_plan_calls, custom_plan_calls, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; + calls | generic_plan_calls | custom_plan_calls | query +-------+--------------------+-------------------+---------------------------------------------------- + 2 | 1 | 1 | PREPARE p1 AS SELECT $1 AS a + 1 | 0 | 0 | SELECT pg_stat_statements_reset() IS NOT NULL AS t + 2 | 0 | 0 | SET plan_cache_mode TO $1 +(3 rows) + +DEALLOCATE p1; +-- Extended query protocol +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT $1 AS a \parse p1 +SET plan_cache_mode TO force_generic_plan; +\bind_named p1 1 +; + a +--- + 1 +(1 row) + +SET plan_cache_mode TO force_custom_plan; +\bind_named p1 1 +; + a +--- + 1 +(1 row) + +SELECT calls, generic_plan_calls, custom_plan_calls, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; + calls | generic_plan_calls | custom_plan_calls | query +-------+--------------------+-------------------+---------------------------------------------------- + 2 | 1 | 1 | SELECT $1 AS a + 1 | 0 | 0 | SELECT pg_stat_statements_reset() IS NOT NULL AS t + 2 | 0 | 0 | SET plan_cache_mode TO $1 +(3 rows) + +\close_prepared p1 +-- EXPLAIN [ANALYZE] EXECUTE +SET pg_stat_statements.track = 'all'; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +PREPARE p1 AS SELECT $1; +SET plan_cache_mode TO force_generic_plan; +EXPLAIN (COSTS OFF) EXECUTE p1(1); + QUERY PLAN +------------ + Result +(1 row) + +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) EXECUTE p1(1); + QUERY PLAN +----------------------------------- + Result (actual rows=1.00 loops=1) +(1 row) + +SET plan_cache_mode TO force_custom_plan; +EXPLAIN (COSTS OFF) EXECUTE p1(1); + QUERY PLAN +------------ + Result +(1 row) + +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) EXECUTE p1(1); + QUERY PLAN +----------------------------------- + Result (actual rows=1.00 loops=1) +(1 row) + +SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; + calls | generic_plan_calls | custom_plan_calls | toplevel | query +-------+--------------------+-------------------+----------+---------------------------------------------------------------------------------- + 2 | 0 | 0 | t | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) EXECUTE p1(1) + 2 | 0 | 0 | t | EXPLAIN (COSTS OFF) EXECUTE p1(1) + 4 | 2 | 2 | f | PREPARE p1 AS SELECT $1 + 1 | 0 | 0 | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t + 2 | 0 | 0 | t | SET plan_cache_mode TO $1 +(5 rows) + +RESET pg_stat_statements.track; +DEALLOCATE p1; +-- Functions/procedures +SET pg_stat_statements.track = 'all'; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SET plan_cache_mode TO force_generic_plan; +SELECT select_one_func(1); + select_one_func +----------------- + +(1 row) + +CALL select_one_proc(1); +SET plan_cache_mode TO force_custom_plan; +SELECT select_one_func(1); + select_one_func +----------------- + +(1 row) + +CALL select_one_proc(1); +SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; + calls | generic_plan_calls | custom_plan_calls | toplevel | query +-------+--------------------+-------------------+----------+---------------------------------------------------- + 2 | 0 | 0 | t | CALL select_one_proc($1) + 4 | 2 | 2 | f | SELECT $1 + 1 | 0 | 0 | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t + 2 | 0 | 0 | t | SELECT select_one_func($1) + 2 | 0 | 0 | t | SET plan_cache_mode TO $1 +(5 rows) + +-- +-- EXPLAIN [ANALYZE] EXECUTE + functions/procedures +-- +SET pg_stat_statements.track = 'all'; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SET plan_cache_mode TO force_generic_plan; +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func(1); + QUERY PLAN +----------------------------------- + Result (actual rows=1.00 loops=1) +(1 row) + +EXPLAIN (COSTS OFF) SELECT select_one_func(1); + QUERY PLAN +------------ + Result +(1 row) + +CALL select_one_proc(1); +SET plan_cache_mode TO force_custom_plan; +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func(1); + QUERY PLAN +----------------------------------- + Result (actual rows=1.00 loops=1) +(1 row) + +EXPLAIN (COSTS OFF) SELECT select_one_func(1); + QUERY PLAN +------------ + Result +(1 row) + +CALL select_one_proc(1); +SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements + ORDER BY query COLLATE "C", toplevel; + calls | generic_plan_calls | custom_plan_calls | toplevel | query +-------+--------------------+-------------------+----------+------------------------------------------------------------------------------------------------ + 2 | 0 | 0 | t | CALL select_one_proc($1) + 2 | 0 | 0 | t | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func($1) + 4 | 0 | 0 | f | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func($1); + 2 | 0 | 0 | t | EXPLAIN (COSTS OFF) SELECT select_one_func($1) + 4 | 2 | 2 | f | SELECT $1 + 1 | 0 | 0 | t | SELECT pg_stat_statements_reset() IS NOT NULL AS t + 2 | 0 | 0 | t | SET plan_cache_mode TO $1 +(7 rows) + +RESET pg_stat_statements.track; +-- +-- Cleanup +-- +DROP FUNCTION select_one_func(int); +DROP PROCEDURE select_one_proc(int); diff --git a/contrib/pg_stat_statements/expected/planning.out b/contrib/pg_stat_statements/expected/planning.out index 3ee1928cbe94a..9effd11fdc859 100644 --- a/contrib/pg_stat_statements/expected/planning.out +++ b/contrib/pg_stat_statements/expected/planning.out @@ -58,7 +58,7 @@ SELECT 42; (1 row) SELECT plans, calls, rows, query FROM pg_stat_statements - WHERE query NOT LIKE 'SELECT COUNT%' ORDER BY query COLLATE "C"; + WHERE query NOT LIKE 'PREPARE%' ORDER BY query COLLATE "C"; plans | calls | rows | query -------+-------+------+---------------------------------------------------------- 0 | 1 | 0 | ALTER TABLE stats_plan_test ADD COLUMN x int @@ -72,10 +72,10 @@ SELECT plans, calls, rows, query FROM pg_stat_statements -- for the prepared statement we expect at least one replan, but cache -- invalidations could force more SELECT plans >= 2 AND plans <= calls AS plans_ok, calls, rows, query FROM pg_stat_statements - WHERE query LIKE 'SELECT COUNT%' ORDER BY query COLLATE "C"; - plans_ok | calls | rows | query -----------+-------+------+-------------------------------------- - t | 4 | 4 | SELECT COUNT(*) FROM stats_plan_test + WHERE query LIKE 'PREPARE%' ORDER BY query COLLATE "C"; + plans_ok | calls | rows | query +----------+-------+------+------------------------------------------------------- + t | 4 | 4 | PREPARE prep1 AS SELECT COUNT(*) FROM stats_plan_test (1 row) -- Cleanup diff --git a/contrib/pg_stat_statements/expected/select.out b/contrib/pg_stat_statements/expected/select.out index 09476a7b699e9..75c896f388512 100644 --- a/contrib/pg_stat_statements/expected/select.out +++ b/contrib/pg_stat_statements/expected/select.out @@ -208,6 +208,7 @@ DEALLOCATE pgss_test; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; calls | rows | query -------+------+------------------------------------------------------------------------------ + 1 | 1 | PREPARE pgss_test (int) AS SELECT $1, $2 LIMIT $3 4 | 4 | SELECT $1 + | | -- but this one will appear + | | AS "text" @@ -221,7 +222,6 @@ SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; 2 | 2 | SELECT $1 AS "int" ORDER BY 1 1 | 2 | SELECT $1 AS i UNION SELECT $2 ORDER BY i 1 | 1 | SELECT $1 || $2 - 1 | 1 | SELECT $1, $2 LIMIT $3 2 | 2 | SELECT DISTINCT $1 AS "int" 0 | 0 | SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C" 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t @@ -238,6 +238,65 @@ SELECT pg_stat_statements_reset() IS NOT NULL AS t; t (1 row) +-- normalization of constants and parameters, with constant locations +-- recorded one or more times. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT WHERE '1' IN ('1'::int, '3'::int::text); +-- +(1 row) + +SELECT WHERE (1, 2) IN ((1, 2), (2, 3)); +-- +(1 row) + +SELECT WHERE (3, 4) IN ((5, 6), (8, 7)); +-- +(0 rows) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +------------------------------------------------------------------------+------- + SELECT WHERE $1 IN ($2::int, $3::int::text) | 1 + SELECT WHERE ($1, $2) IN (($3, $4), ($5, $6)) | 2 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C" | 0 +(4 rows) + +-- with the last element being an explicit function call with an argument, ensure +-- the normalization of the squashing interval is correct. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT WHERE 1 IN (1, int4(1), int4(2)); +-- +(1 row) + +SELECT WHERE 1 = ANY (ARRAY[1, int4(1), int4(2)]); +-- +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +------------------------------------------------------------------------+------- + SELECT WHERE $1 IN ($2 /*, ... */) | 2 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C" | 0 +(3 rows) + -- -- queries with locking clauses -- diff --git a/contrib/pg_stat_statements/expected/squashing.out b/contrib/pg_stat_statements/expected/squashing.out index 7b138af098c9f..f952f47ef7be1 100644 --- a/contrib/pg_stat_statements/expected/squashing.out +++ b/contrib/pg_stat_statements/expected/squashing.out @@ -2,9 +2,11 @@ -- Const squashing functionality -- CREATE EXTENSION pg_stat_statements; +-- +-- Simple Lists +-- CREATE TABLE test_squash (id int, data int); --- IN queries --- Normal scenario, too many simple constants for an IN query +-- single element will not be squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- @@ -16,42 +18,150 @@ SELECT * FROM test_squash WHERE id IN (1); ----+------ (0 rows) +SELECT ARRAY[1]; + array +------- + {1} +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------+------- + SELECT * FROM test_squash WHERE id IN ($1) | 1 + SELECT ARRAY[$1] | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) + +-- more than 1 element in a list will be squashed +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + SELECT * FROM test_squash WHERE id IN (1, 2, 3); id | data ----+------ (0 rows) +SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5); + id | data +----+------ +(0 rows) + +SELECT ARRAY[1, 2, 3]; + array +--------- + {1,2,3} +(1 row) + +SELECT ARRAY[1, 2, 3, 4]; + array +----------- + {1,2,3,4} +(1 row) + +SELECT ARRAY[1, 2, 3, 4, 5]; + array +------------- + {1,2,3,4,5} +(1 row) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls -------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | 1 - SELECT * FROM test_squash WHERE id IN ($1) | 1 + SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | 3 + SELECT ARRAY[$1 /*, ... */] | 3 SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (3 rows) -SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9); +-- built-in functions will be squashed +-- the IN and ARRAY forms of this statement will have the same queryId +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT WHERE 1 IN (1, int4(1), int4(2), 2); +-- +(1 row) + +SELECT WHERE 1 = ANY (ARRAY[1, int4(1), int4(2), 2]); +-- +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------+------- + SELECT WHERE $1 IN ($2 /*, ... */) | 2 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(2 rows) + +-- external parameters will be squashed +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT * FROM test_squash WHERE id IN ($1, $2, $3, $4, $5) \bind 1 2 3 4 5 +; id | data ----+------ (0 rows) -SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); +SELECT * FROM test_squash WHERE id::text = ANY(ARRAY[$1, $2, $3, $4, $5]) \bind 1 2 3 4 5 +; id | data ----+------ (0 rows) -SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------------------------+------- + SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | 1 + SELECT * FROM test_squash WHERE id::text = ANY(ARRAY[$1 /*, ... */]) | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) + +-- prepared statements will also be squashed +-- the IN and ARRAY forms of this statement will have the same queryId +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +PREPARE p1(int, int, int, int, int) AS +SELECT * FROM test_squash WHERE id IN ($1, $2, $3, $4, $5); +EXECUTE p1(1, 2, 3, 4, 5); id | data ----+------ (0 rows) +DEALLOCATE p1; +PREPARE p1(int, int, int, int, int) AS +SELECT * FROM test_squash WHERE id = ANY(ARRAY[$1, $2, $3, $4, $5]); +EXECUTE p1(1, 2, 3, 4, 5); + id | data +----+------ +(0 rows) + +DEALLOCATE p1; SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -------------------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | 4 - SELECT * FROM test_squash WHERE id IN ($1) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 - SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C" | 1 -(4 rows) + query | calls +-------------------------------------------------------+------- + DEALLOCATE $1 | 2 + PREPARE p1(int, int, int, int, int) AS +| 2 + SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) | + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) -- More conditions in the query SELECT pg_stat_statements_reset() IS NOT NULL AS t; @@ -75,10 +185,25 @@ SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) AND da ----+------ (0 rows) +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9]) AND data = 2; + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) AND data = 2; + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) AND data = 2; + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls ---------------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) AND data = $2 | 3 + SELECT * FROM test_squash WHERE id IN ($1 /*, ... */) AND data = $2 | 6 SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) @@ -107,24 +232,46 @@ SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) ----+------ (0 rows) +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9]) + AND data = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9]); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) + AND data = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) + AND data = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls -------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */)+| 3 + SELECT * FROM test_squash WHERE id IN ($1 /*, ... */)+| 6 AND data IN ($2 /*, ... */) | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) --- No constants simplification for OpExpr SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- t (1 row) --- In the following two queries the operator expressions (+) and (@) have --- different oppno, and will be given different query_id if squashed, even though --- the normalized query will be the same +-- No constants squashing for OpExpr +-- The IN and ARRAY forms of this statement will have the same queryId +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + SELECT * FROM test_squash WHERE id IN (1 + 1, 2 + 2, 3 + 3, 4 + 4, 5 + 5, 6 + 6, 7 + 7, 8 + 8, 9 + 9); id | data @@ -137,19 +284,35 @@ SELECT * FROM test_squash WHERE id IN ----+------ (0 rows) +SELECT * FROM test_squash WHERE id = ANY(ARRAY + [1 + 1, 2 + 2, 3 + 3, 4 + 4, 5 + 5, 6 + 6, 7 + 7, 8 + 8, 9 + 9]); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY(ARRAY + [@ '-1', @ '-2', @ '-3', @ '-4', @ '-5', @ '-6', @ '-7', @ '-8', @ '-9']); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls ----------------------------------------------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN +| 1 + SELECT * FROM test_squash WHERE id IN +| 2 ($1 + $2, $3 + $4, $5 + $6, $7 + $8, $9 + $10, $11 + $12, $13 + $14, $15 + $16, $17 + $18) | - SELECT * FROM test_squash WHERE id IN +| 1 + SELECT * FROM test_squash WHERE id IN +| 2 (@ $1, @ $2, @ $3, @ $4, @ $5, @ $6, @ $7, @ $8, @ $9) | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (3 rows) +-- -- FuncExpr +-- -- Verify multiple type representation end up with the same query_id CREATE TABLE test_float (data float); +-- The casted ARRAY expressions will have the same queryId as the IN clause +-- form of the query SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- @@ -181,12 +344,38 @@ SELECT data FROM test_float WHERE data IN (1.0, 1.0); ------ (0 rows) +SELECT data FROM test_float WHERE data = ANY(ARRAY['1'::double precision, '2'::double precision]); + data +------ +(0 rows) + +SELECT data FROM test_float WHERE data = ANY(ARRAY[1.0::double precision, 1.0::double precision]); + data +------ +(0 rows) + +SELECT data FROM test_float WHERE data = ANY(ARRAY[1, 2]); + data +------ +(0 rows) + +SELECT data FROM test_float WHERE data = ANY(ARRAY[1, '2']); + data +------ +(0 rows) + +SELECT data FROM test_float WHERE data = ANY(ARRAY['1', 2]); + data +------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls ------------------------------------------------------------+------- - SELECT data FROM test_float WHERE data IN ($1 /*, ... */) | 5 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +--------------------------------------------------------------------+------- + SELECT data FROM test_float WHERE data = ANY(ARRAY[$1 /*, ... */]) | 3 + SELECT data FROM test_float WHERE data IN ($1 /*, ... */) | 7 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) -- Numeric type, implicit cast is squashed CREATE TABLE test_squash_numeric (id int, data numeric(5, 2)); @@ -201,12 +390,18 @@ SELECT * FROM test_squash_numeric WHERE data IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ----+------ (0 rows) +SELECT * FROM test_squash_numeric WHERE data = ANY(ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls ------------------------------------------------------------------+------- - SELECT * FROM test_squash_numeric WHERE data IN ($1 /*, ... */) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +--------------------------------------------------------------------------+------- + SELECT * FROM test_squash_numeric WHERE data = ANY(ARRAY[$1 /*, ... */]) | 1 + SELECT * FROM test_squash_numeric WHERE data IN ($1 /*, ... */) | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) -- Bigint, implicit cast is squashed CREATE TABLE test_squash_bigint (id int, data bigint); @@ -221,14 +416,20 @@ SELECT * FROM test_squash_bigint WHERE data IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1 ----+------ (0 rows) +SELECT * FROM test_squash_bigint WHERE data = ANY(ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------------------+------- - SELECT * FROM test_squash_bigint WHERE data IN ($1 /*, ... */) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 -(2 rows) + query | calls +-------------------------------------------------------------------------+------- + SELECT * FROM test_squash_bigint WHERE data = ANY(ARRAY[$1 /*, ... */]) | 1 + SELECT * FROM test_squash_bigint WHERE data IN ($1 /*, ... */) | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) --- Bigint, explicit cast is not squashed +-- Bigint, explicit cast is squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- @@ -242,15 +443,22 @@ SELECT * FROM test_squash_bigint WHERE data IN ----+------ (0 rows) +SELECT * FROM test_squash_bigint WHERE data = ANY(ARRAY[ + 1::bigint, 2::bigint, 3::bigint, 4::bigint, 5::bigint, 6::bigint, + 7::bigint, 8::bigint, 9::bigint, 10::bigint, 11::bigint]); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls ----------------------------------------------------+------- - SELECT * FROM test_squash_bigint WHERE data IN +| 1 - ($1 /*, ... */::bigint) | + SELECT * FROM test_squash_bigint WHERE data IN +| 2 + ($1 /*, ... */) | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) --- Bigint, long tokens with parenthesis +-- Bigint, long tokens with parenthesis, will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- @@ -264,44 +472,47 @@ SELECT * FROM test_squash_bigint WHERE id IN ----+------ (0 rows) +SELECT * FROM test_squash_bigint WHERE id = ANY(ARRAY[ + abs(100), abs(200), abs(300), abs(400), abs(500), abs(600), abs(700), + abs(800), abs(900), abs(1000), ((abs(1100)))]); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls -------------------------------------------------------------------------+------- - SELECT * FROM test_squash_bigint WHERE id IN +| 1 + SELECT * FROM test_squash_bigint WHERE id IN +| 2 (abs($1), abs($2), abs($3), abs($4), abs($5), abs($6), abs($7),+| abs($8), abs($9), abs($10), ((abs($11)))) | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) --- CoerceViaIO, SubLink instead of a Const -CREATE TABLE test_squash_jsonb (id int, data jsonb); +-- Multiple FuncExpr's. Will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- t (1 row) -SELECT * FROM test_squash_jsonb WHERE data IN - ((SELECT '"1"')::jsonb, (SELECT '"2"')::jsonb, (SELECT '"3"')::jsonb, - (SELECT '"4"')::jsonb, (SELECT '"5"')::jsonb, (SELECT '"6"')::jsonb, - (SELECT '"7"')::jsonb, (SELECT '"8"')::jsonb, (SELECT '"9"')::jsonb, - (SELECT '"10"')::jsonb); - id | data -----+------ -(0 rows) +SELECT WHERE 1 IN (1::int::bigint::int, 2::int::bigint::int); +-- +(1 row) + +SELECT WHERE 1 = ANY(ARRAY[1::int::bigint::int, 2::int::bigint::int]); +-- +(1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -----------------------------------------------------------------------+------- - SELECT * FROM test_squash_jsonb WHERE data IN +| 1 - ((SELECT $1)::jsonb, (SELECT $2)::jsonb, (SELECT $3)::jsonb,+| - (SELECT $4)::jsonb, (SELECT $5)::jsonb, (SELECT $6)::jsonb,+| - (SELECT $7)::jsonb, (SELECT $8)::jsonb, (SELECT $9)::jsonb,+| - (SELECT $10)::jsonb) | - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 + query | calls +----------------------------------------------------+------- + SELECT WHERE $1 IN ($2 /*, ... */) | 2 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) +-- -- CoerceViaIO +-- -- Create some dummy type to force CoerceViaIO CREATE TYPE casttesttype; CREATE FUNCTION casttesttype_in(cstring) @@ -349,15 +560,25 @@ SELECT * FROM test_squash_cast WHERE data IN ----+------ (0 rows) +SELECT * FROM test_squash_cast WHERE data = ANY (ARRAY + [1::int4::casttesttype, 2::int4::casttesttype, 3::int4::casttesttype, + 4::int4::casttesttype, 5::int4::casttesttype, 6::int4::casttesttype, + 7::int4::casttesttype, 8::int4::casttesttype, 9::int4::casttesttype, + 10::int4::casttesttype, 11::int4::casttesttype]); + id | data +----+------ +(0 rows) + SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls ----------------------------------------------------+------- - SELECT * FROM test_squash_cast WHERE data IN +| 1 - ($1 /*, ... */::int4::casttesttype) | + SELECT * FROM test_squash_cast WHERE data IN +| 2 + ($1 /*, ... */) | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) -- Some casting expression are simplified to Const +CREATE TABLE test_squash_jsonb (id int, data jsonb); SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- @@ -366,8 +587,16 @@ SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash_jsonb WHERE data IN (('"1"')::jsonb, ('"2"')::jsonb, ('"3"')::jsonb, ('"4"')::jsonb, - ( '"5"')::jsonb, ( '"6"')::jsonb, ( '"7"')::jsonb, ( '"8"')::jsonb, - ( '"9"')::jsonb, ( '"10"')::jsonb); + ('"5"')::jsonb, ('"6"')::jsonb, ('"7"')::jsonb, ('"8"')::jsonb, + ('"9"')::jsonb, ('"10"')::jsonb); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash_jsonb WHERE data = ANY (ARRAY + [('"1"')::jsonb, ('"2"')::jsonb, ('"3"')::jsonb, ('"4"')::jsonb, + ('"5"')::jsonb, ('"6"')::jsonb, ('"7"')::jsonb, ('"8"')::jsonb, + ('"9"')::jsonb, ('"10"')::jsonb]); id | data ----+------ (0 rows) @@ -375,28 +604,152 @@ SELECT * FROM test_squash_jsonb WHERE data IN SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls ----------------------------------------------------+------- - SELECT * FROM test_squash_jsonb WHERE data IN +| 1 - (($1 /*, ... */)::jsonb) | + SELECT * FROM test_squash_jsonb WHERE data IN +| 2 + ($1 /*, ... */) | SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) +-- CoerceViaIO, SubLink instead of a Const. Will not squash +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT * FROM test_squash_jsonb WHERE data IN + ((SELECT '"1"')::jsonb, (SELECT '"2"')::jsonb, (SELECT '"3"')::jsonb, + (SELECT '"4"')::jsonb, (SELECT '"5"')::jsonb, (SELECT '"6"')::jsonb, + (SELECT '"7"')::jsonb, (SELECT '"8"')::jsonb, (SELECT '"9"')::jsonb, + (SELECT '"10"')::jsonb); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash_jsonb WHERE data = ANY(ARRAY + [(SELECT '"1"')::jsonb, (SELECT '"2"')::jsonb, (SELECT '"3"')::jsonb, + (SELECT '"4"')::jsonb, (SELECT '"5"')::jsonb, (SELECT '"6"')::jsonb, + (SELECT '"7"')::jsonb, (SELECT '"8"')::jsonb, (SELECT '"9"')::jsonb, + (SELECT '"10"')::jsonb]); + id | data +----+------ +(0 rows) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------------------------+------- + SELECT * FROM test_squash_jsonb WHERE data IN +| 2 + ((SELECT $1)::jsonb, (SELECT $2)::jsonb, (SELECT $3)::jsonb,+| + (SELECT $4)::jsonb, (SELECT $5)::jsonb, (SELECT $6)::jsonb,+| + (SELECT $7)::jsonb, (SELECT $8)::jsonb, (SELECT $9)::jsonb,+| + (SELECT $10)::jsonb) | + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(2 rows) + +-- Multiple CoerceViaIO are squashed +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +SELECT WHERE 1 IN (1::text::int::text::int, 1::text::int::text::int); +-- +(1 row) + +SELECT WHERE 1 = ANY(ARRAY[1::text::int::text::int, 1::text::int::text::int]); +-- +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------+------- + SELECT WHERE $1 IN ($2 /*, ... */) | 2 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(2 rows) + +-- -- RelabelType +-- SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- t (1 row) -SELECT * FROM test_squash WHERE id IN (1::oid, 2::oid, 3::oid, 4::oid, 5::oid, 6::oid, 7::oid, 8::oid, 9::oid); +-- However many layers of RelabelType there are, the list will be squashable. +SELECT * FROM test_squash WHERE id IN + (1::oid, 2::oid, 3::oid, 4::oid, 5::oid, 6::oid, 7::oid, 8::oid, 9::oid); + id | data +----+------ +(0 rows) + +SELECT ARRAY[1::oid, 2::oid, 3::oid, 4::oid, 5::oid, 6::oid, 7::oid, 8::oid, 9::oid]; + array +--------------------- + {1,2,3,4,5,6,7,8,9} +(1 row) + +SELECT * FROM test_squash WHERE id IN (1::oid, 2::oid::int::oid); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY(ARRAY[1::oid, 2::oid::int::oid]); + id | data +----+------ +(0 rows) + +-- RelabelType together with CoerceViaIO is also squashable +SELECT * FROM test_squash WHERE id = ANY(ARRAY[1::oid::text::int::oid, 2::oid::int::oid]); + id | data +----+------ +(0 rows) + +SELECT * FROM test_squash WHERE id = ANY(ARRAY[1::text::int::oid, 2::oid::int::oid]); id | data ----+------ (0 rows) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - query | calls -------------------------------------------------------------+------- - SELECT * FROM test_squash WHERE id IN ($1 /*, ... */::oid) | 1 - SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 + query | calls +----------------------------------------------------+------- + SELECT * FROM test_squash WHERE id IN +| 5 + ($1 /*, ... */) | + SELECT ARRAY[$1 /*, ... */] | 1 + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 +(3 rows) + +-- +-- edge cases +-- +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +-- for nested arrays, only constants are squashed +SELECT ARRAY[ + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + ]; + array +----------------------------------------------------------------------------------------------- + {{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10}} +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------+------- + SELECT ARRAY[ +| 1 + ARRAY[$1 /*, ... */], +| + ARRAY[$2 /*, ... */], +| + ARRAY[$3 /*, ... */], +| + ARRAY[$4 /*, ... */] +| + ] | + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 (2 rows) -- Test constants evaluation in a CTE, which was causing issues in the past @@ -409,23 +762,59 @@ FROM cte; -------- (0 rows) --- Simple array would be squashed as well SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- t (1 row) -SELECT ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - array ------------------------- - {1,2,3,4,5,6,7,8,9,10} +-- Rewritten as an OpExpr, so it will not be squashed +select where '1' IN ('1'::int, '2'::int::text); +-- +(1 row) + +-- Rewritten as an ArrayExpr, so it will be squashed +select where '1' IN ('1'::int, '2'::int); +-- +(1 row) + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + query | calls +----------------------------------------------------+------- + SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 + select where $1 IN ($2 /*, ... */) | 1 + select where $1 IN ($2::int, $3::int::text) | 1 +(3 rows) + +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + t +--- + t +(1 row) + +-- Both of these queries will be rewritten as an ArrayExpr, so they +-- will be squashed, and have a similar queryId +select where '1' IN ('1'::int::text, '2'::int::text); +-- +(1 row) + +select where '1' = ANY (array['1'::int::text, '2'::int::text]); +-- (1 row) SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; query | calls ----------------------------------------------------+------- - SELECT ARRAY[$1 /*, ... */] | 1 SELECT pg_stat_statements_reset() IS NOT NULL AS t | 1 + select where $1 IN ($2 /*, ... */) | 2 (2 rows) +-- +-- cleanup +-- +DROP TABLE test_squash; +DROP TABLE test_float; +DROP TABLE test_squash_numeric; +DROP TABLE test_squash_bigint; +DROP TABLE test_squash_cast CASCADE; +DROP TABLE test_squash_jsonb; diff --git a/contrib/pg_stat_statements/expected/utility.out b/contrib/pg_stat_statements/expected/utility.out index aa4f0f7e62805..e4d6564ea5b5a 100644 --- a/contrib/pg_stat_statements/expected/utility.out +++ b/contrib/pg_stat_statements/expected/utility.out @@ -540,7 +540,7 @@ SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; -------+------+---------------------------------------------------- 2 | 0 | DEALLOCATE $1 2 | 0 | DEALLOCATE ALL - 2 | 2 | SELECT $1 AS a + 2 | 2 | PREPARE stat_select AS SELECT $1 AS a 1 | 1 | SELECT $1 as a 1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (5 rows) @@ -702,7 +702,7 @@ SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; 1 | 13 | CREATE MATERIALIZED VIEW pgss_matv AS SELECT * FROM pgss_ctas 1 | 10 | CREATE TABLE pgss_ctas AS SELECT a, $1 b FROM generate_series($2, $3) a 1 | 0 | DECLARE pgss_cursor CURSOR FOR SELECT * FROM pgss_matv - 1 | 5 | FETCH FORWARD 5 pgss_cursor + 1 | 5 | FETCH FORWARD $1 pgss_cursor 1 | 7 | FETCH FORWARD ALL pgss_cursor 1 | 1 | FETCH NEXT pgss_cursor 1 | 13 | REFRESH MATERIALIZED VIEW pgss_matv diff --git a/contrib/pg_stat_statements/meson.build b/contrib/pg_stat_statements/meson.build index 01a6cbdcf6139..7b8bfbb1de78c 100644 --- a/contrib/pg_stat_statements/meson.build +++ b/contrib/pg_stat_statements/meson.build @@ -21,6 +21,7 @@ contrib_targets += pg_stat_statements install_data( 'pg_stat_statements.control', 'pg_stat_statements--1.4.sql', + 'pg_stat_statements--1.12--1.13.sql', 'pg_stat_statements--1.11--1.12.sql', 'pg_stat_statements--1.10--1.11.sql', 'pg_stat_statements--1.9--1.10.sql', @@ -54,6 +55,7 @@ tests += { 'privileges', 'extended', 'parallel', + 'plancache', 'cleanup', 'oldextversions', 'squashing', diff --git a/contrib/pg_stat_statements/pg_stat_statements--1.12--1.13.sql b/contrib/pg_stat_statements/pg_stat_statements--1.12--1.13.sql new file mode 100644 index 0000000000000..2f0eaf14ec34d --- /dev/null +++ b/contrib/pg_stat_statements/pg_stat_statements--1.12--1.13.sql @@ -0,0 +1,78 @@ +/* contrib/pg_stat_statements/pg_stat_statements--1.12--1.13.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION pg_stat_statements UPDATE TO '1.13'" to load this file. \quit + +/* First we have to remove them from the extension */ +ALTER EXTENSION pg_stat_statements DROP VIEW pg_stat_statements; +ALTER EXTENSION pg_stat_statements DROP FUNCTION pg_stat_statements(boolean); + +/* Then we can drop them */ +DROP VIEW pg_stat_statements; +DROP FUNCTION pg_stat_statements(boolean); + +/* Now redefine */ +CREATE FUNCTION pg_stat_statements(IN showtext boolean, + OUT userid oid, + OUT dbid oid, + OUT toplevel bool, + OUT queryid bigint, + OUT query text, + OUT plans int8, + OUT total_plan_time float8, + OUT min_plan_time float8, + OUT max_plan_time float8, + OUT mean_plan_time float8, + OUT stddev_plan_time float8, + OUT calls int8, + OUT total_exec_time float8, + OUT min_exec_time float8, + OUT max_exec_time float8, + OUT mean_exec_time float8, + OUT stddev_exec_time float8, + OUT rows int8, + OUT shared_blks_hit int8, + OUT shared_blks_read int8, + OUT shared_blks_dirtied int8, + OUT shared_blks_written int8, + OUT local_blks_hit int8, + OUT local_blks_read int8, + OUT local_blks_dirtied int8, + OUT local_blks_written int8, + OUT temp_blks_read int8, + OUT temp_blks_written int8, + OUT shared_blk_read_time float8, + OUT shared_blk_write_time float8, + OUT local_blk_read_time float8, + OUT local_blk_write_time float8, + OUT temp_blk_read_time float8, + OUT temp_blk_write_time float8, + OUT wal_records int8, + OUT wal_fpi int8, + OUT wal_bytes numeric, + OUT wal_buffers_full int8, + OUT jit_functions int8, + OUT jit_generation_time float8, + OUT jit_inlining_count int8, + OUT jit_inlining_time float8, + OUT jit_optimization_count int8, + OUT jit_optimization_time float8, + OUT jit_emission_count int8, + OUT jit_emission_time float8, + OUT jit_deform_count int8, + OUT jit_deform_time float8, + OUT parallel_workers_to_launch int8, + OUT parallel_workers_launched int8, + OUT generic_plan_calls int8, + OUT custom_plan_calls int8, + OUT stats_since timestamp with time zone, + OUT minmax_stats_since timestamp with time zone +) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_stat_statements_1_13' +LANGUAGE C STRICT VOLATILE PARALLEL SAFE; + +CREATE VIEW pg_stat_statements AS + SELECT * FROM pg_stat_statements(true); + +GRANT SELECT ON pg_stat_statements TO PUBLIC; diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 9778407cba30b..1cb368c8590ba 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -85,7 +85,7 @@ PG_MODULE_MAGIC_EXT( #define PGSS_TEXT_FILE PG_STAT_TMP_DIR "/pgss_query_texts.stat" /* Magic number identifying the stats file format */ -static const uint32 PGSS_FILE_HEADER = 0x20220408; +static const uint32 PGSS_FILE_HEADER = 0x20250731; /* PostgreSQL major version number, changes in which invalidate all entries */ static const uint32 PGSS_PG_MAJOR_VERSION = PG_VERSION_NUM / 100; @@ -114,6 +114,7 @@ typedef enum pgssVersion PGSS_V1_10, PGSS_V1_11, PGSS_V1_12, + PGSS_V1_13, } pgssVersion; typedef enum pgssStoreKind @@ -144,7 +145,7 @@ typedef struct pgssHashKey { Oid userid; /* user OID */ Oid dbid; /* database OID */ - uint64 queryid; /* query identifier */ + int64 queryid; /* query identifier */ bool toplevel; /* query executed at top level */ } pgssHashKey; @@ -210,6 +211,8 @@ typedef struct Counters * to be launched */ int64 parallel_workers_launched; /* # of parallel workers actually * launched */ + int64 generic_plan_calls; /* number of calls using a generic plan */ + int64 custom_plan_calls; /* number of calls using a custom plan */ } Counters; /* @@ -323,6 +326,7 @@ PG_FUNCTION_INFO_V1(pg_stat_statements_1_9); PG_FUNCTION_INFO_V1(pg_stat_statements_1_10); PG_FUNCTION_INFO_V1(pg_stat_statements_1_11); PG_FUNCTION_INFO_V1(pg_stat_statements_1_12); +PG_FUNCTION_INFO_V1(pg_stat_statements_1_13); PG_FUNCTION_INFO_V1(pg_stat_statements); PG_FUNCTION_INFO_V1(pg_stat_statements_info); @@ -335,7 +339,7 @@ static PlannedStmt *pgss_planner(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams); -static bool pgss_ExecutorStart(QueryDesc *queryDesc, int eflags); +static void pgss_ExecutorStart(QueryDesc *queryDesc, int eflags); static void pgss_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count); @@ -346,7 +350,7 @@ static void pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); -static void pgss_store(const char *query, uint64 queryId, +static void pgss_store(const char *query, int64 queryId, int query_location, int query_len, pgssStoreKind kind, double total_time, uint64 rows, @@ -355,7 +359,8 @@ static void pgss_store(const char *query, uint64 queryId, const struct JitInstrumentation *jitusage, JumbleState *jstate, int parallel_workers_to_launch, - int parallel_workers_launched); + int parallel_workers_launched, + PlannedStmtOrigin planOrigin); static void pg_stat_statements_internal(FunctionCallInfo fcinfo, pgssVersion api_version, bool showtext); @@ -370,7 +375,7 @@ static char *qtext_fetch(Size query_offset, int query_len, char *buffer, Size buffer_size); static bool need_gc_qtexts(void); static void gc_qtexts(void); -static TimestampTz entry_reset(Oid userid, Oid dbid, uint64 queryid, bool minmax_only); +static TimestampTz entry_reset(Oid userid, Oid dbid, int64 queryid, bool minmax_only); static char *generate_normalized_query(JumbleState *jstate, const char *query, int query_loc, int *query_len_p); static void fill_in_constant_lengths(JumbleState *jstate, const char *query, @@ -852,7 +857,7 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate) { if (pgss_track_utility && IsA(query->utilityStmt, ExecuteStmt)) { - query->queryId = UINT64CONST(0); + query->queryId = INT64CONST(0); return; } } @@ -877,7 +882,8 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate) NULL, jstate, 0, - 0); + 0, + PLAN_STMT_UNKNOWN); } /* @@ -899,7 +905,7 @@ pgss_planner(Query *parse, */ if (pgss_enabled(nesting_level) && pgss_track_planning && query_string - && parse->queryId != UINT64CONST(0)) + && parse->queryId != INT64CONST(0)) { instr_time start; instr_time duration; @@ -957,7 +963,8 @@ pgss_planner(Query *parse, NULL, NULL, 0, - 0); + 0, + result->planOrigin); } else { @@ -989,26 +996,20 @@ pgss_planner(Query *parse, /* * ExecutorStart hook: start up tracking if needed */ -static bool +static void pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) { - bool plan_valid; - if (prev_ExecutorStart) - plan_valid = prev_ExecutorStart(queryDesc, eflags); + prev_ExecutorStart(queryDesc, eflags); else - plan_valid = standard_ExecutorStart(queryDesc, eflags); - - /* The plan may have become invalid during standard_ExecutorStart() */ - if (!plan_valid) - return false; + standard_ExecutorStart(queryDesc, eflags); /* * If query has queryId zero, don't track it. This prevents double * counting of optimizable statements that are directly contained in * utility statements. */ - if (pgss_enabled(nesting_level) && queryDesc->plannedstmt->queryId != UINT64CONST(0)) + if (pgss_enabled(nesting_level) && queryDesc->plannedstmt->queryId != INT64CONST(0)) { /* * Set up to track total elapsed time in ExecutorRun. Make sure the @@ -1024,8 +1025,6 @@ pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) MemoryContextSwitchTo(oldcxt); } } - - return true; } /* @@ -1076,9 +1075,9 @@ pgss_ExecutorFinish(QueryDesc *queryDesc) static void pgss_ExecutorEnd(QueryDesc *queryDesc) { - uint64 queryId = queryDesc->plannedstmt->queryId; + int64 queryId = queryDesc->plannedstmt->queryId; - if (queryId != UINT64CONST(0) && queryDesc->totaltime && + if (queryId != INT64CONST(0) && queryDesc->totaltime && pgss_enabled(nesting_level)) { /* @@ -1099,7 +1098,8 @@ pgss_ExecutorEnd(QueryDesc *queryDesc) queryDesc->estate->es_jit ? &queryDesc->estate->es_jit->instr : NULL, NULL, queryDesc->estate->es_parallel_workers_to_launch, - queryDesc->estate->es_parallel_workers_launched); + queryDesc->estate->es_parallel_workers_launched, + queryDesc->plannedstmt->planOrigin); } if (prev_ExecutorEnd) @@ -1119,7 +1119,7 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, DestReceiver *dest, QueryCompletion *qc) { Node *parsetree = pstmt->utilityStmt; - uint64 saved_queryId = pstmt->queryId; + int64 saved_queryId = pstmt->queryId; int saved_stmt_location = pstmt->stmt_location; int saved_stmt_len = pstmt->stmt_len; bool enabled = pgss_track_utility && pgss_enabled(nesting_level); @@ -1139,7 +1139,7 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, * only. */ if (enabled) - pstmt->queryId = UINT64CONST(0); + pstmt->queryId = INT64CONST(0); /* * If it's an EXECUTE statement, we don't track it and don't increment the @@ -1232,7 +1232,8 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, NULL, NULL, 0, - 0); + 0, + pstmt->planOrigin); } else { @@ -1286,7 +1287,7 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, * for the arrays in the Counters field. */ static void -pgss_store(const char *query, uint64 queryId, +pgss_store(const char *query, int64 queryId, int query_location, int query_len, pgssStoreKind kind, double total_time, uint64 rows, @@ -1295,7 +1296,8 @@ pgss_store(const char *query, uint64 queryId, const struct JitInstrumentation *jitusage, JumbleState *jstate, int parallel_workers_to_launch, - int parallel_workers_launched) + int parallel_workers_launched, + PlannedStmtOrigin planOrigin) { pgssHashKey key; pgssEntry *entry; @@ -1312,7 +1314,7 @@ pgss_store(const char *query, uint64 queryId, * Nothing to do if compute_query_id isn't enabled and no other module * computed a query identifier. */ - if (queryId == UINT64CONST(0)) + if (queryId == INT64CONST(0)) return; /* @@ -1503,6 +1505,12 @@ pgss_store(const char *query, uint64 queryId, entry->counters.parallel_workers_to_launch += parallel_workers_to_launch; entry->counters.parallel_workers_launched += parallel_workers_launched; + /* plan cache counters */ + if (planOrigin == PLAN_STMT_CACHE_GENERIC) + entry->counters.generic_plan_calls++; + else if (planOrigin == PLAN_STMT_CACHE_CUSTOM) + entry->counters.custom_plan_calls++; + SpinLockRelease(&entry->mutex); } @@ -1522,11 +1530,11 @@ pg_stat_statements_reset_1_7(PG_FUNCTION_ARGS) { Oid userid; Oid dbid; - uint64 queryid; + int64 queryid; userid = PG_GETARG_OID(0); dbid = PG_GETARG_OID(1); - queryid = (uint64) PG_GETARG_INT64(2); + queryid = PG_GETARG_INT64(2); entry_reset(userid, dbid, queryid, false); @@ -1538,12 +1546,12 @@ pg_stat_statements_reset_1_11(PG_FUNCTION_ARGS) { Oid userid; Oid dbid; - uint64 queryid; + int64 queryid; bool minmax_only; userid = PG_GETARG_OID(0); dbid = PG_GETARG_OID(1); - queryid = (uint64) PG_GETARG_INT64(2); + queryid = PG_GETARG_INT64(2); minmax_only = PG_GETARG_BOOL(3); PG_RETURN_TIMESTAMPTZ(entry_reset(userid, dbid, queryid, minmax_only)); @@ -1570,7 +1578,8 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) #define PG_STAT_STATEMENTS_COLS_V1_10 43 #define PG_STAT_STATEMENTS_COLS_V1_11 49 #define PG_STAT_STATEMENTS_COLS_V1_12 52 -#define PG_STAT_STATEMENTS_COLS 52 /* maximum of above */ +#define PG_STAT_STATEMENTS_COLS_V1_13 54 +#define PG_STAT_STATEMENTS_COLS 54 /* maximum of above */ /* * Retrieve statement statistics. @@ -1582,6 +1591,16 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) * expected API version is identified by embedding it in the C name of the * function. Unfortunately we weren't bright enough to do that for 1.1. */ +Datum +pg_stat_statements_1_13(PG_FUNCTION_ARGS) +{ + bool showtext = PG_GETARG_BOOL(0); + + pg_stat_statements_internal(fcinfo, PGSS_V1_13, showtext); + + return (Datum) 0; +} + Datum pg_stat_statements_1_12(PG_FUNCTION_ARGS) { @@ -1740,6 +1759,10 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, if (api_version != PGSS_V1_12) elog(ERROR, "incorrect number of output arguments"); break; + case PG_STAT_STATEMENTS_COLS_V1_13: + if (api_version != PGSS_V1_13) + elog(ERROR, "incorrect number of output arguments"); + break; default: elog(ERROR, "incorrect number of output arguments"); } @@ -1992,6 +2015,11 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, values[i++] = Int64GetDatumFast(tmp.parallel_workers_to_launch); values[i++] = Int64GetDatumFast(tmp.parallel_workers_launched); } + if (api_version >= PGSS_V1_13) + { + values[i++] = Int64GetDatumFast(tmp.generic_plan_calls); + values[i++] = Int64GetDatumFast(tmp.custom_plan_calls); + } if (api_version >= PGSS_V1_11) { values[i++] = TimestampTzGetDatum(stats_since); @@ -2007,6 +2035,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, api_version == PGSS_V1_10 ? PG_STAT_STATEMENTS_COLS_V1_10 : api_version == PGSS_V1_11 ? PG_STAT_STATEMENTS_COLS_V1_11 : api_version == PGSS_V1_12 ? PG_STAT_STATEMENTS_COLS_V1_12 : + api_version == PGSS_V1_13 ? PG_STAT_STATEMENTS_COLS_V1_13 : -1 /* fail if you forget to update this assert */ )); tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls); @@ -2679,13 +2708,13 @@ if (e) { \ * Reset entries corresponding to parameters passed. */ static TimestampTz -entry_reset(Oid userid, Oid dbid, uint64 queryid, bool minmax_only) +entry_reset(Oid userid, Oid dbid, int64 queryid, bool minmax_only) { HASH_SEQ_STATUS hash_seq; pgssEntry *entry; FILE *qfile; - long num_entries; - long num_remove = 0; + int64 num_entries; + int64 num_remove = 0; pgssHashKey key; TimestampTz stats_reset; @@ -2699,7 +2728,7 @@ entry_reset(Oid userid, Oid dbid, uint64 queryid, bool minmax_only) stats_reset = GetCurrentTimestamp(); - if (userid != 0 && dbid != 0 && queryid != UINT64CONST(0)) + if (userid != 0 && dbid != 0 && queryid != INT64CONST(0)) { /* If all the parameters are available, use the fast path. */ memset(&key, 0, sizeof(pgssHashKey)); @@ -2722,7 +2751,7 @@ entry_reset(Oid userid, Oid dbid, uint64 queryid, bool minmax_only) SINGLE_ENTRY_RESET(entry); } - else if (userid != 0 || dbid != 0 || queryid != UINT64CONST(0)) + else if (userid != 0 || dbid != 0 || queryid != INT64CONST(0)) { /* Reset entries corresponding to valid parameters. */ hash_seq_init(&hash_seq, pgss_hash); @@ -2818,17 +2847,13 @@ generate_normalized_query(JumbleState *jstate, const char *query, { char *norm_query; int query_len = *query_len_p; - int i, - norm_query_buflen, /* Space allowed for norm_query */ + int norm_query_buflen, /* Space allowed for norm_query */ len_to_wrt, /* Length (in bytes) to write */ quer_loc = 0, /* Source query byte location */ n_quer_loc = 0, /* Normalized query byte location */ last_off = 0, /* Offset from start for previous tok */ last_tok_len = 0; /* Length (in bytes) of that tok */ - bool in_squashed = false; /* in a run of squashed consts? */ - int skipped_constants = 0; /* Position adjustment of later - * constants after squashed ones */ - + int num_constants_replaced = 0; /* * Get constants' lengths (core system only gives us locations). Note @@ -2842,20 +2867,27 @@ generate_normalized_query(JumbleState *jstate, const char *query, * certainly isn't more than 11 bytes, even if n reaches INT_MAX. We * could refine that limit based on the max value of n for the current * query, but it hardly seems worth any extra effort to do so. - * - * Note this also gives enough room for the commented-out ", ..." list - * syntax used by constant squashing. */ norm_query_buflen = query_len + jstate->clocations_count * 10; /* Allocate result buffer */ norm_query = palloc(norm_query_buflen + 1); - for (i = 0; i < jstate->clocations_count; i++) + for (int i = 0; i < jstate->clocations_count; i++) { int off, /* Offset from start for cur tok */ tok_len; /* Length (in bytes) of that tok */ + /* + * If we have an external param at this location, but no lists are + * being squashed across the query, then we skip here; this will make + * us print the characters found in the original query that represent + * the parameter in the next iteration (or after the loop is done), + * which is a bit odd but seems to work okay in most cases. + */ + if (jstate->clocations[i].extern_param && !jstate->has_squashed_lists) + continue; + off = jstate->clocations[i].location; /* Adjust recorded location if we're dealing with partial string */ @@ -2866,67 +2898,24 @@ generate_normalized_query(JumbleState *jstate, const char *query, if (tok_len < 0) continue; /* ignore any duplicates */ + /* Copy next chunk (what precedes the next constant) */ + len_to_wrt = off - last_off; + len_to_wrt -= last_tok_len; + Assert(len_to_wrt >= 0); + memcpy(norm_query + n_quer_loc, query + quer_loc, len_to_wrt); + n_quer_loc += len_to_wrt; + /* - * What to do next depends on whether we're squashing constant lists, - * and whether we're already in a run of such constants. + * And insert a param symbol in place of the constant token; and, if + * we have a squashable list, insert a placeholder comment starting + * from the list's second value. */ - if (!jstate->clocations[i].squashed) - { - /* - * This location corresponds to a constant not to be squashed. - * Print what comes before the constant ... - */ - len_to_wrt = off - last_off; - len_to_wrt -= last_tok_len; - - Assert(len_to_wrt >= 0); - - memcpy(norm_query + n_quer_loc, query + quer_loc, len_to_wrt); - n_quer_loc += len_to_wrt; - - /* ... and then a param symbol replacing the constant itself */ - n_quer_loc += sprintf(norm_query + n_quer_loc, "$%d", - i + 1 + jstate->highest_extern_param_id - skipped_constants); + n_quer_loc += sprintf(norm_query + n_quer_loc, "$%d%s", + num_constants_replaced + 1 + jstate->highest_extern_param_id, + jstate->clocations[i].squashed ? " /*, ... */" : ""); + num_constants_replaced++; - /* In case previous constants were merged away, stop doing that */ - in_squashed = false; - } - else if (!in_squashed) - { - /* - * This location is the start position of a run of constants to be - * squashed, so we need to print the representation of starting a - * group of stashed constants. - * - * Print what comes before the constant ... - */ - len_to_wrt = off - last_off; - len_to_wrt -= last_tok_len; - Assert(len_to_wrt >= 0); - Assert(i + 1 < jstate->clocations_count); - Assert(jstate->clocations[i + 1].squashed); - memcpy(norm_query + n_quer_loc, query + quer_loc, len_to_wrt); - n_quer_loc += len_to_wrt; - - /* ... and then start a run of squashed constants */ - n_quer_loc += sprintf(norm_query + n_quer_loc, "$%d /*, ... */", - i + 1 + jstate->highest_extern_param_id - skipped_constants); - - /* The next location will match the block below, to end the run */ - in_squashed = true; - - skipped_constants++; - } - else - { - /* - * The second location of a run of squashable elements; this - * indicates its end. - */ - in_squashed = false; - } - - /* Otherwise the constant is squashed away -- move forward */ + /* move forward */ quer_loc = off + tok_len; last_off = off; last_tok_len = tok_len; @@ -3017,6 +3006,9 @@ fill_in_constant_lengths(JumbleState *jstate, const char *query, Assert(loc >= 0); + if (locs[i].squashed) + continue; /* squashable list, ignore */ + if (loc <= last_loc) continue; /* Duplicate constant, ignore */ diff --git a/contrib/pg_stat_statements/pg_stat_statements.control b/contrib/pg_stat_statements/pg_stat_statements.control index d45ebc12e3605..2eee0ceffa894 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.control +++ b/contrib/pg_stat_statements/pg_stat_statements.control @@ -1,5 +1,5 @@ # pg_stat_statements extension comment = 'track planning and execution statistics of all SQL statements executed' -default_version = '1.12' +default_version = '1.13' module_pathname = '$libdir/pg_stat_statements' relocatable = true diff --git a/contrib/pg_stat_statements/sql/cursors.sql b/contrib/pg_stat_statements/sql/cursors.sql index 61738ac470e82..78bb42284331f 100644 --- a/contrib/pg_stat_statements/sql/cursors.sql +++ b/contrib/pg_stat_statements/sql/cursors.sql @@ -28,3 +28,46 @@ COMMIT; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; SELECT pg_stat_statements_reset() IS NOT NULL AS t; + +-- Normalization of FETCH statements +BEGIN; +DECLARE pgss_cursor CURSOR FOR SELECT FROM generate_series(1, 10); +-- implicit directions +FETCH pgss_cursor; +FETCH 1 pgss_cursor; +FETCH 2 pgss_cursor; +FETCH -1 pgss_cursor; +-- explicit NEXT +FETCH NEXT pgss_cursor; +-- explicit PRIOR +FETCH PRIOR pgss_cursor; +-- explicit FIRST +FETCH FIRST pgss_cursor; +-- explicit LAST +FETCH LAST pgss_cursor; +-- explicit ABSOLUTE +FETCH ABSOLUTE 1 pgss_cursor; +FETCH ABSOLUTE 2 pgss_cursor; +FETCH ABSOLUTE -1 pgss_cursor; +-- explicit RELATIVE +FETCH RELATIVE 1 pgss_cursor; +FETCH RELATIVE 2 pgss_cursor; +FETCH RELATIVE -1 pgss_cursor; +-- explicit FORWARD +FETCH ALL pgss_cursor; +-- explicit FORWARD ALL +FETCH FORWARD ALL pgss_cursor; +-- explicit FETCH FORWARD +FETCH FORWARD pgss_cursor; +FETCH FORWARD 1 pgss_cursor; +FETCH FORWARD 2 pgss_cursor; +FETCH FORWARD -1 pgss_cursor; +-- explicit FETCH BACKWARD +FETCH BACKWARD pgss_cursor; +FETCH BACKWARD 1 pgss_cursor; +FETCH BACKWARD 2 pgss_cursor; +FETCH BACKWARD -1 pgss_cursor; +-- explicit BACKWARD ALL +FETCH BACKWARD ALL pgss_cursor; +COMMIT; +SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; diff --git a/contrib/pg_stat_statements/sql/extended.sql b/contrib/pg_stat_statements/sql/extended.sql index 1af0711020c41..9a6518e2f0487 100644 --- a/contrib/pg_stat_statements/sql/extended.sql +++ b/contrib/pg_stat_statements/sql/extended.sql @@ -19,3 +19,28 @@ SELECT $1 \bind 'unnamed_val1' \g \bind_named stmt1 'stmt1_val1' \g SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- Various parameter numbering patterns +-- Unique query IDs with parameter numbers switched. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT WHERE ($1::int, 7) IN ((8, $2::int), ($3::int, 9)) \bind '1' '2' '3' \g +SELECT WHERE ($2::int, 10) IN ((11, $3::int), ($1::int, 12)) \bind '1' '2' '3' \g +SELECT WHERE $1::int IN ($2::int, $3::int) \bind '1' '2' '3' \g +SELECT WHERE $2::int IN ($3::int, $1::int) \bind '1' '2' '3' \g +SELECT WHERE $3::int IN ($1::int, $2::int) \bind '1' '2' '3' \g +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +-- Two groups of two queries with the same query ID. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT WHERE '1'::int IN ($1::int, '2'::int) \bind '1' \g +SELECT WHERE '4'::int IN ($1::int, '5'::int) \bind '2' \g +SELECT WHERE $2::int IN ($1::int, '1'::int) \bind '1' '2' \g +SELECT WHERE $2::int IN ($1::int, '2'::int) \bind '3' '4' \g +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; + +-- no squashable list, the parameters id's are kept as-is +SELECT WHERE $3 = $1 AND $2 = $4 \bind 1 2 1 2 \g +-- squashable list, so the parameter IDs will be re-assigned +SELECT WHERE 1 IN (1, 2, 3) AND $3 = $1 AND $2 = $4 \bind 1 2 1 2 \g + +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; diff --git a/contrib/pg_stat_statements/sql/level_tracking.sql b/contrib/pg_stat_statements/sql/level_tracking.sql index 6b81230f18691..86f007e85524a 100644 --- a/contrib/pg_stat_statements/sql/level_tracking.sql +++ b/contrib/pg_stat_statements/sql/level_tracking.sql @@ -334,6 +334,32 @@ END; $$; SELECT toplevel, calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", toplevel; +-- DO block --- multiple inner queries with separators +SET pg_stat_statements.track = 'all'; +SET pg_stat_statements.track_utility = TRUE; +CREATE TABLE pgss_do_util_tab_1 (a int); +CREATE TABLE pgss_do_util_tab_2 (a int); +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +DO $$ +DECLARE BEGIN + EXECUTE 'CREATE TABLE pgss_do_table (id INT); DROP TABLE pgss_do_table'; + EXECUTE 'SELECT a FROM pgss_do_util_tab_1; SELECT a FROM pgss_do_util_tab_2'; +END $$; +SELECT toplevel, calls, rows, query FROM pg_stat_statements + WHERE toplevel IS FALSE + ORDER BY query COLLATE "C"; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +-- Note the extra semicolon at the end of the query. +DO $$ +DECLARE BEGIN + EXECUTE 'CREATE TABLE pgss_do_table (id INT); DROP TABLE pgss_do_table;'; + EXECUTE 'SELECT a FROM pgss_do_util_tab_1; SELECT a FROM pgss_do_util_tab_2;'; +END $$; +SELECT toplevel, calls, rows, query FROM pg_stat_statements + WHERE toplevel IS FALSE + ORDER BY query COLLATE "C"; +DROP TABLE pgss_do_util_tab_1, pgss_do_util_tab_2; + -- PL/pgSQL function - top-level tracking. SET pg_stat_statements.track = 'top'; SET pg_stat_statements.track_utility = FALSE; diff --git a/contrib/pg_stat_statements/sql/oldextversions.sql b/contrib/pg_stat_statements/sql/oldextversions.sql index 13b8ca28586d1..e416efe9ffbee 100644 --- a/contrib/pg_stat_statements/sql/oldextversions.sql +++ b/contrib/pg_stat_statements/sql/oldextversions.sql @@ -63,4 +63,9 @@ AlTER EXTENSION pg_stat_statements UPDATE TO '1.12'; \d pg_stat_statements SELECT count(*) > 0 AS has_data FROM pg_stat_statements; +-- New functions and views for pg_stat_statements in 1.13 +AlTER EXTENSION pg_stat_statements UPDATE TO '1.13'; +\d pg_stat_statements +SELECT count(*) > 0 AS has_data FROM pg_stat_statements; + DROP EXTENSION pg_stat_statements; diff --git a/contrib/pg_stat_statements/sql/plancache.sql b/contrib/pg_stat_statements/sql/plancache.sql new file mode 100644 index 0000000000000..160ced7add368 --- /dev/null +++ b/contrib/pg_stat_statements/sql/plancache.sql @@ -0,0 +1,94 @@ +-- +-- Tests with plan cache +-- + +-- Setup +CREATE OR REPLACE FUNCTION select_one_func(int) RETURNS VOID AS $$ +DECLARE + ret INT; +BEGIN + SELECT $1 INTO ret; +END; +$$ LANGUAGE plpgsql; +CREATE OR REPLACE PROCEDURE select_one_proc(int) AS $$ +DECLARE + ret INT; +BEGIN + SELECT $1 INTO ret; +END; +$$ LANGUAGE plpgsql; + +-- Prepared statements +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +PREPARE p1 AS SELECT $1 AS a; +SET plan_cache_mode TO force_generic_plan; +EXECUTE p1(1); +SET plan_cache_mode TO force_custom_plan; +EXECUTE p1(1); +SELECT calls, generic_plan_calls, custom_plan_calls, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; +DEALLOCATE p1; + +-- Extended query protocol +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT $1 AS a \parse p1 +SET plan_cache_mode TO force_generic_plan; +\bind_named p1 1 +; +SET plan_cache_mode TO force_custom_plan; +\bind_named p1 1 +; +SELECT calls, generic_plan_calls, custom_plan_calls, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; +\close_prepared p1 + +-- EXPLAIN [ANALYZE] EXECUTE +SET pg_stat_statements.track = 'all'; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +PREPARE p1 AS SELECT $1; +SET plan_cache_mode TO force_generic_plan; +EXPLAIN (COSTS OFF) EXECUTE p1(1); +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) EXECUTE p1(1); +SET plan_cache_mode TO force_custom_plan; +EXPLAIN (COSTS OFF) EXECUTE p1(1); +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) EXECUTE p1(1); +SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; +RESET pg_stat_statements.track; +DEALLOCATE p1; + +-- Functions/procedures +SET pg_stat_statements.track = 'all'; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SET plan_cache_mode TO force_generic_plan; +SELECT select_one_func(1); +CALL select_one_proc(1); +SET plan_cache_mode TO force_custom_plan; +SELECT select_one_func(1); +CALL select_one_proc(1); +SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements + ORDER BY query COLLATE "C"; + +-- +-- EXPLAIN [ANALYZE] EXECUTE + functions/procedures +-- +SET pg_stat_statements.track = 'all'; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SET plan_cache_mode TO force_generic_plan; +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func(1); +EXPLAIN (COSTS OFF) SELECT select_one_func(1); +CALL select_one_proc(1); +SET plan_cache_mode TO force_custom_plan; +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF) SELECT select_one_func(1); +EXPLAIN (COSTS OFF) SELECT select_one_func(1); +CALL select_one_proc(1); +SELECT calls, generic_plan_calls, custom_plan_calls, toplevel, query FROM pg_stat_statements + ORDER BY query COLLATE "C", toplevel; + +RESET pg_stat_statements.track; + +-- +-- Cleanup +-- +DROP FUNCTION select_one_func(int); +DROP PROCEDURE select_one_proc(int); diff --git a/contrib/pg_stat_statements/sql/planning.sql b/contrib/pg_stat_statements/sql/planning.sql index 9cfe206b3b049..46f5d9b951c45 100644 --- a/contrib/pg_stat_statements/sql/planning.sql +++ b/contrib/pg_stat_statements/sql/planning.sql @@ -20,11 +20,11 @@ SELECT 42; SELECT 42; SELECT 42; SELECT plans, calls, rows, query FROM pg_stat_statements - WHERE query NOT LIKE 'SELECT COUNT%' ORDER BY query COLLATE "C"; + WHERE query NOT LIKE 'PREPARE%' ORDER BY query COLLATE "C"; -- for the prepared statement we expect at least one replan, but cache -- invalidations could force more SELECT plans >= 2 AND plans <= calls AS plans_ok, calls, rows, query FROM pg_stat_statements - WHERE query LIKE 'SELECT COUNT%' ORDER BY query COLLATE "C"; + WHERE query LIKE 'PREPARE%' ORDER BY query COLLATE "C"; -- Cleanup DROP TABLE stats_plan_test; diff --git a/contrib/pg_stat_statements/sql/select.sql b/contrib/pg_stat_statements/sql/select.sql index c5e0b84ee5bf5..11662cde08c92 100644 --- a/contrib/pg_stat_statements/sql/select.sql +++ b/contrib/pg_stat_statements/sql/select.sql @@ -79,6 +79,22 @@ DEALLOCATE pgss_test; SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C"; SELECT pg_stat_statements_reset() IS NOT NULL AS t; +-- normalization of constants and parameters, with constant locations +-- recorded one or more times. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT WHERE '1' IN ('1'::int, '3'::int::text); +SELECT WHERE (1, 2) IN ((1, 2), (2, 3)); +SELECT WHERE (3, 4) IN ((5, 6), (8, 7)); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- with the last element being an explicit function call with an argument, ensure +-- the normalization of the squashing interval is correct. +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT WHERE 1 IN (1, int4(1), int4(2)); +SELECT WHERE 1 = ANY (ARRAY[1, int4(1), int4(2)]); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + -- -- queries with locking clauses -- diff --git a/contrib/pg_stat_statements/sql/squashing.sql b/contrib/pg_stat_statements/sql/squashing.sql index 908be81ff2b7d..53138d125a92c 100644 --- a/contrib/pg_stat_statements/sql/squashing.sql +++ b/contrib/pg_stat_statements/sql/squashing.sql @@ -3,101 +3,160 @@ -- CREATE EXTENSION pg_stat_statements; -CREATE TABLE test_squash (id int, data int); +-- +-- Simple Lists +-- --- IN queries +CREATE TABLE test_squash (id int, data int); --- Normal scenario, too many simple constants for an IN query +-- single element will not be squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash WHERE id IN (1); +SELECT ARRAY[1]; +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- more than 1 element in a list will be squashed +SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash WHERE id IN (1, 2, 3); +SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4); +SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5); +SELECT ARRAY[1, 2, 3]; +SELECT ARRAY[1, 2, 3, 4]; +SELECT ARRAY[1, 2, 3, 4, 5]; SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; -SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9); -SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); -SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); +-- built-in functions will be squashed +-- the IN and ARRAY forms of this statement will have the same queryId +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT WHERE 1 IN (1, int4(1), int4(2), 2); +SELECT WHERE 1 = ANY (ARRAY[1, int4(1), int4(2), 2]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; --- More conditions in the query +-- external parameters will be squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT * FROM test_squash WHERE id IN ($1, $2, $3, $4, $5) \bind 1 2 3 4 5 +; +SELECT * FROM test_squash WHERE id::text = ANY(ARRAY[$1, $2, $3, $4, $5]) \bind 1 2 3 4 5 +; +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +-- prepared statements will also be squashed +-- the IN and ARRAY forms of this statement will have the same queryId +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +PREPARE p1(int, int, int, int, int) AS +SELECT * FROM test_squash WHERE id IN ($1, $2, $3, $4, $5); +EXECUTE p1(1, 2, 3, 4, 5); +DEALLOCATE p1; +PREPARE p1(int, int, int, int, int) AS +SELECT * FROM test_squash WHERE id = ANY(ARRAY[$1, $2, $3, $4, $5]); +EXECUTE p1(1, 2, 3, 4, 5); +DEALLOCATE p1; +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- More conditions in the query +SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9) AND data = 2; SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) AND data = 2; SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) AND data = 2; +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9]) AND data = 2; +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) AND data = 2; +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) AND data = 2; SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; -- Multiple squashed intervals SELECT pg_stat_statements_reset() IS NOT NULL AS t; - SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9) AND data IN (1, 2, 3, 4, 5, 6, 7, 8, 9); SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) AND data IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); SELECT * FROM test_squash WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) AND data IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9]) + AND data = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9]); +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) + AND data = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); +SELECT * FROM test_squash WHERE id = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) + AND data = ANY (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; - --- No constants simplification for OpExpr SELECT pg_stat_statements_reset() IS NOT NULL AS t; --- In the following two queries the operator expressions (+) and (@) have --- different oppno, and will be given different query_id if squashed, even though --- the normalized query will be the same +-- No constants squashing for OpExpr +-- The IN and ARRAY forms of this statement will have the same queryId +SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash WHERE id IN (1 + 1, 2 + 2, 3 + 3, 4 + 4, 5 + 5, 6 + 6, 7 + 7, 8 + 8, 9 + 9); SELECT * FROM test_squash WHERE id IN (@ '-1', @ '-2', @ '-3', @ '-4', @ '-5', @ '-6', @ '-7', @ '-8', @ '-9'); +SELECT * FROM test_squash WHERE id = ANY(ARRAY + [1 + 1, 2 + 2, 3 + 3, 4 + 4, 5 + 5, 6 + 6, 7 + 7, 8 + 8, 9 + 9]); +SELECT * FROM test_squash WHERE id = ANY(ARRAY + [@ '-1', @ '-2', @ '-3', @ '-4', @ '-5', @ '-6', @ '-7', @ '-8', @ '-9']); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +-- -- FuncExpr +-- -- Verify multiple type representation end up with the same query_id CREATE TABLE test_float (data float); +-- The casted ARRAY expressions will have the same queryId as the IN clause +-- form of the query SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT data FROM test_float WHERE data IN (1, 2); SELECT data FROM test_float WHERE data IN (1, '2'); SELECT data FROM test_float WHERE data IN ('1', 2); SELECT data FROM test_float WHERE data IN ('1', '2'); SELECT data FROM test_float WHERE data IN (1.0, 1.0); +SELECT data FROM test_float WHERE data = ANY(ARRAY['1'::double precision, '2'::double precision]); +SELECT data FROM test_float WHERE data = ANY(ARRAY[1.0::double precision, 1.0::double precision]); +SELECT data FROM test_float WHERE data = ANY(ARRAY[1, 2]); +SELECT data FROM test_float WHERE data = ANY(ARRAY[1, '2']); +SELECT data FROM test_float WHERE data = ANY(ARRAY['1', 2]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; -- Numeric type, implicit cast is squashed CREATE TABLE test_squash_numeric (id int, data numeric(5, 2)); SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash_numeric WHERE data IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); +SELECT * FROM test_squash_numeric WHERE data = ANY(ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; -- Bigint, implicit cast is squashed CREATE TABLE test_squash_bigint (id int, data bigint); SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash_bigint WHERE data IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); +SELECT * FROM test_squash_bigint WHERE data = ANY(ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; --- Bigint, explicit cast is not squashed +-- Bigint, explicit cast is squashed SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash_bigint WHERE data IN (1::bigint, 2::bigint, 3::bigint, 4::bigint, 5::bigint, 6::bigint, 7::bigint, 8::bigint, 9::bigint, 10::bigint, 11::bigint); +SELECT * FROM test_squash_bigint WHERE data = ANY(ARRAY[ + 1::bigint, 2::bigint, 3::bigint, 4::bigint, 5::bigint, 6::bigint, + 7::bigint, 8::bigint, 9::bigint, 10::bigint, 11::bigint]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; --- Bigint, long tokens with parenthesis +-- Bigint, long tokens with parenthesis, will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash_bigint WHERE id IN (abs(100), abs(200), abs(300), abs(400), abs(500), abs(600), abs(700), abs(800), abs(900), abs(1000), ((abs(1100)))); +SELECT * FROM test_squash_bigint WHERE id = ANY(ARRAY[ + abs(100), abs(200), abs(300), abs(400), abs(500), abs(600), abs(700), + abs(800), abs(900), abs(1000), ((abs(1100)))]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; --- CoerceViaIO, SubLink instead of a Const -CREATE TABLE test_squash_jsonb (id int, data jsonb); +-- Multiple FuncExpr's. Will not squash SELECT pg_stat_statements_reset() IS NOT NULL AS t; -SELECT * FROM test_squash_jsonb WHERE data IN - ((SELECT '"1"')::jsonb, (SELECT '"2"')::jsonb, (SELECT '"3"')::jsonb, - (SELECT '"4"')::jsonb, (SELECT '"5"')::jsonb, (SELECT '"6"')::jsonb, - (SELECT '"7"')::jsonb, (SELECT '"8"')::jsonb, (SELECT '"9"')::jsonb, - (SELECT '"10"')::jsonb); +SELECT WHERE 1 IN (1::int::bigint::int, 2::int::bigint::int); +SELECT WHERE 1 = ANY(ARRAY[1::int::bigint::int, 2::int::bigint::int]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +-- -- CoerceViaIO +-- -- Create some dummy type to force CoerceViaIO CREATE TYPE casttesttype; @@ -141,19 +200,74 @@ SELECT * FROM test_squash_cast WHERE data IN 4::int4::casttesttype, 5::int4::casttesttype, 6::int4::casttesttype, 7::int4::casttesttype, 8::int4::casttesttype, 9::int4::casttesttype, 10::int4::casttesttype, 11::int4::casttesttype); +SELECT * FROM test_squash_cast WHERE data = ANY (ARRAY + [1::int4::casttesttype, 2::int4::casttesttype, 3::int4::casttesttype, + 4::int4::casttesttype, 5::int4::casttesttype, 6::int4::casttesttype, + 7::int4::casttesttype, 8::int4::casttesttype, 9::int4::casttesttype, + 10::int4::casttesttype, 11::int4::casttesttype]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; -- Some casting expression are simplified to Const +CREATE TABLE test_squash_jsonb (id int, data jsonb); SELECT pg_stat_statements_reset() IS NOT NULL AS t; SELECT * FROM test_squash_jsonb WHERE data IN (('"1"')::jsonb, ('"2"')::jsonb, ('"3"')::jsonb, ('"4"')::jsonb, - ( '"5"')::jsonb, ( '"6"')::jsonb, ( '"7"')::jsonb, ( '"8"')::jsonb, - ( '"9"')::jsonb, ( '"10"')::jsonb); + ('"5"')::jsonb, ('"6"')::jsonb, ('"7"')::jsonb, ('"8"')::jsonb, + ('"9"')::jsonb, ('"10"')::jsonb); +SELECT * FROM test_squash_jsonb WHERE data = ANY (ARRAY + [('"1"')::jsonb, ('"2"')::jsonb, ('"3"')::jsonb, ('"4"')::jsonb, + ('"5"')::jsonb, ('"6"')::jsonb, ('"7"')::jsonb, ('"8"')::jsonb, + ('"9"')::jsonb, ('"10"')::jsonb]); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +-- CoerceViaIO, SubLink instead of a Const. Will not squash +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT * FROM test_squash_jsonb WHERE data IN + ((SELECT '"1"')::jsonb, (SELECT '"2"')::jsonb, (SELECT '"3"')::jsonb, + (SELECT '"4"')::jsonb, (SELECT '"5"')::jsonb, (SELECT '"6"')::jsonb, + (SELECT '"7"')::jsonb, (SELECT '"8"')::jsonb, (SELECT '"9"')::jsonb, + (SELECT '"10"')::jsonb); +SELECT * FROM test_squash_jsonb WHERE data = ANY(ARRAY + [(SELECT '"1"')::jsonb, (SELECT '"2"')::jsonb, (SELECT '"3"')::jsonb, + (SELECT '"4"')::jsonb, (SELECT '"5"')::jsonb, (SELECT '"6"')::jsonb, + (SELECT '"7"')::jsonb, (SELECT '"8"')::jsonb, (SELECT '"9"')::jsonb, + (SELECT '"10"')::jsonb]); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- Multiple CoerceViaIO are squashed +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +SELECT WHERE 1 IN (1::text::int::text::int, 1::text::int::text::int); +SELECT WHERE 1 = ANY(ARRAY[1::text::int::text::int, 1::text::int::text::int]); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- -- RelabelType +-- + +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +-- However many layers of RelabelType there are, the list will be squashable. +SELECT * FROM test_squash WHERE id IN + (1::oid, 2::oid, 3::oid, 4::oid, 5::oid, 6::oid, 7::oid, 8::oid, 9::oid); +SELECT ARRAY[1::oid, 2::oid, 3::oid, 4::oid, 5::oid, 6::oid, 7::oid, 8::oid, 9::oid]; +SELECT * FROM test_squash WHERE id IN (1::oid, 2::oid::int::oid); +SELECT * FROM test_squash WHERE id = ANY(ARRAY[1::oid, 2::oid::int::oid]); +-- RelabelType together with CoerceViaIO is also squashable +SELECT * FROM test_squash WHERE id = ANY(ARRAY[1::oid::text::int::oid, 2::oid::int::oid]); +SELECT * FROM test_squash WHERE id = ANY(ARRAY[1::text::int::oid, 2::oid::int::oid]); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- +-- edge cases +-- + SELECT pg_stat_statements_reset() IS NOT NULL AS t; -SELECT * FROM test_squash WHERE id IN (1::oid, 2::oid, 3::oid, 4::oid, 5::oid, 6::oid, 7::oid, 8::oid, 9::oid); +-- for nested arrays, only constants are squashed +SELECT ARRAY[ + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + ]; SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; -- Test constants evaluation in a CTE, which was causing issues in the past @@ -163,8 +277,26 @@ WITH cte AS ( SELECT ARRAY['a', 'b', 'c', const::varchar] AS result FROM cte; --- Simple array would be squashed as well SELECT pg_stat_statements_reset() IS NOT NULL AS t; -SELECT ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; +-- Rewritten as an OpExpr, so it will not be squashed +select where '1' IN ('1'::int, '2'::int::text); +-- Rewritten as an ArrayExpr, so it will be squashed +select where '1' IN ('1'::int, '2'::int); SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; +SELECT pg_stat_statements_reset() IS NOT NULL AS t; +-- Both of these queries will be rewritten as an ArrayExpr, so they +-- will be squashed, and have a similar queryId +select where '1' IN ('1'::int::text, '2'::int::text); +select where '1' = ANY (array['1'::int::text, '2'::int::text]); +SELECT query, calls FROM pg_stat_statements ORDER BY query COLLATE "C"; + +-- +-- cleanup +-- +DROP TABLE test_squash; +DROP TABLE test_float; +DROP TABLE test_squash_numeric; +DROP TABLE test_squash_bigint; +DROP TABLE test_squash_cast CASCADE; +DROP TABLE test_squash_jsonb; diff --git a/contrib/pg_trgm/expected/pg_trgm.out b/contrib/pg_trgm/expected/pg_trgm.out index 0b70d9de25624..04da98170ab15 100644 --- a/contrib/pg_trgm/expected/pg_trgm.out +++ b/contrib/pg_trgm/expected/pg_trgm.out @@ -4693,6 +4693,23 @@ select count(*) from test_trgm where t like '%99%' and t like '%qw%'; 19 (1 row) +explain (costs off) +select count(*) from test_trgm where t %> '' and t %> '%qwerty%'; + QUERY PLAN +------------------------------------------------------------------------- + Aggregate + -> Bitmap Heap Scan on test_trgm + Recheck Cond: ((t %> ''::text) AND (t %> '%qwerty%'::text)) + -> Bitmap Index Scan on trgm_idx + Index Cond: ((t %> ''::text) AND (t %> '%qwerty%'::text)) +(5 rows) + +select count(*) from test_trgm where t %> '' and t %> '%qwerty%'; + count +------- + 0 +(1 row) + -- ensure that pending-list items are handled correctly, too create temp table t_test_trgm(t text COLLATE "C"); create index t_trgm_idx on t_test_trgm using gin (t gin_trgm_ops); @@ -4731,6 +4748,23 @@ select count(*) from t_test_trgm where t like '%99%' and t like '%qw%'; 1 (1 row) +explain (costs off) +select count(*) from t_test_trgm where t %> '' and t %> '%qwerty%'; + QUERY PLAN +------------------------------------------------------------------------- + Aggregate + -> Bitmap Heap Scan on t_test_trgm + Recheck Cond: ((t %> ''::text) AND (t %> '%qwerty%'::text)) + -> Bitmap Index Scan on t_trgm_idx + Index Cond: ((t %> ''::text) AND (t %> '%qwerty%'::text)) +(5 rows) + +select count(*) from t_test_trgm where t %> '' and t %> '%qwerty%'; + count +------- + 0 +(1 row) + -- run the same queries with sequential scan to check the results set enable_bitmapscan=off; set enable_seqscan=on; @@ -4746,6 +4780,12 @@ select count(*) from test_trgm where t like '%99%' and t like '%qw%'; 19 (1 row) +select count(*) from test_trgm where t %> '' and t %> '%qwerty%'; + count +------- + 0 +(1 row) + select count(*) from t_test_trgm where t like '%99%' and t like '%qwerty%'; count ------- @@ -4758,6 +4798,12 @@ select count(*) from t_test_trgm where t like '%99%' and t like '%qw%'; 1 (1 row) +select count(*) from t_test_trgm where t %> '' and t %> '%qwerty%'; + count +------- + 0 +(1 row) + reset enable_bitmapscan; create table test2(t text COLLATE "C"); insert into test2 values ('abcdef'); diff --git a/contrib/pg_trgm/sql/pg_trgm.sql b/contrib/pg_trgm/sql/pg_trgm.sql index 340c9891899f0..44debced6d581 100644 --- a/contrib/pg_trgm/sql/pg_trgm.sql +++ b/contrib/pg_trgm/sql/pg_trgm.sql @@ -80,6 +80,9 @@ select count(*) from test_trgm where t like '%99%' and t like '%qwerty%'; explain (costs off) select count(*) from test_trgm where t like '%99%' and t like '%qw%'; select count(*) from test_trgm where t like '%99%' and t like '%qw%'; +explain (costs off) +select count(*) from test_trgm where t %> '' and t %> '%qwerty%'; +select count(*) from test_trgm where t %> '' and t %> '%qwerty%'; -- ensure that pending-list items are handled correctly, too create temp table t_test_trgm(t text COLLATE "C"); create index t_trgm_idx on t_test_trgm using gin (t gin_trgm_ops); @@ -90,14 +93,19 @@ select count(*) from t_test_trgm where t like '%99%' and t like '%qwerty%'; explain (costs off) select count(*) from t_test_trgm where t like '%99%' and t like '%qw%'; select count(*) from t_test_trgm where t like '%99%' and t like '%qw%'; +explain (costs off) +select count(*) from t_test_trgm where t %> '' and t %> '%qwerty%'; +select count(*) from t_test_trgm where t %> '' and t %> '%qwerty%'; -- run the same queries with sequential scan to check the results set enable_bitmapscan=off; set enable_seqscan=on; select count(*) from test_trgm where t like '%99%' and t like '%qwerty%'; select count(*) from test_trgm where t like '%99%' and t like '%qw%'; +select count(*) from test_trgm where t %> '' and t %> '%qwerty%'; select count(*) from t_test_trgm where t like '%99%' and t like '%qwerty%'; select count(*) from t_test_trgm where t like '%99%' and t like '%qw%'; +select count(*) from t_test_trgm where t %> '' and t %> '%qwerty%'; reset enable_bitmapscan; create table test2(t text COLLATE "C"); diff --git a/contrib/pg_walinspect/expected/pg_walinspect.out b/contrib/pg_walinspect/expected/pg_walinspect.out index c010eed8c5d6e..f955ff5d3c52a 100644 --- a/contrib/pg_walinspect/expected/pg_walinspect.out +++ b/contrib/pg_walinspect/expected/pg_walinspect.out @@ -19,14 +19,14 @@ INSERT INTO sample_tbl SELECT * FROM generate_series(3, 4); -- =================================================================== -- Invalid input LSN. SELECT * FROM pg_get_wal_record_info('0/0'); -ERROR: could not read WAL at LSN 0/0 +ERROR: could not read WAL at LSN 0/00000000 -- Invalid start LSN. SELECT * FROM pg_get_wal_records_info('0/0', :'wal_lsn1'); -ERROR: could not read WAL at LSN 0/0 +ERROR: could not read WAL at LSN 0/00000000 SELECT * FROM pg_get_wal_stats('0/0', :'wal_lsn1'); -ERROR: could not read WAL at LSN 0/0 +ERROR: could not read WAL at LSN 0/00000000 SELECT * FROM pg_get_wal_block_info('0/0', :'wal_lsn1'); -ERROR: could not read WAL at LSN 0/0 +ERROR: could not read WAL at LSN 0/00000000 -- Start LSN > End LSN. SELECT * FROM pg_get_wal_records_info(:'wal_lsn2', :'wal_lsn1'); ERROR: WAL start LSN must be less than end LSN diff --git a/contrib/pg_walinspect/pg_walinspect.c b/contrib/pg_walinspect/pg_walinspect.c index 64745564cc249..0398ad82cec90 100644 --- a/contrib/pg_walinspect/pg_walinspect.c +++ b/contrib/pg_walinspect/pg_walinspect.c @@ -105,7 +105,7 @@ InitXLogReaderState(XLogRecPtr lsn) if (lsn < XLOG_BLCKSZ) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not read WAL at LSN %X/%X", + errmsg("could not read WAL at LSN %X/%08X", LSN_FORMAT_ARGS(lsn)))); private_data = (ReadLocalXLogPageNoWaitPrivate *) @@ -128,8 +128,8 @@ InitXLogReaderState(XLogRecPtr lsn) if (XLogRecPtrIsInvalid(first_valid_record)) ereport(ERROR, - (errmsg("could not find a valid record after %X/%X", - LSN_FORMAT_ARGS(lsn)))); + errmsg("could not find a valid record after %X/%08X", + LSN_FORMAT_ARGS(lsn))); return xlogreader; } @@ -168,12 +168,12 @@ ReadNextXLogRecord(XLogReaderState *xlogreader) if (errormsg) ereport(ERROR, (errcode_for_file_access(), - errmsg("could not read WAL at %X/%X: %s", + errmsg("could not read WAL at %X/%08X: %s", LSN_FORMAT_ARGS(xlogreader->EndRecPtr), errormsg))); else ereport(ERROR, (errcode_for_file_access(), - errmsg("could not read WAL at %X/%X", + errmsg("could not read WAL at %X/%08X", LSN_FORMAT_ARGS(xlogreader->EndRecPtr)))); } @@ -479,7 +479,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("WAL input LSN must be less than current LSN"), - errdetail("Current WAL LSN on the database system is at %X/%X.", + errdetail("Current WAL LSN on the database system is at %X/%08X.", LSN_FORMAT_ARGS(curr_lsn)))); /* Build a tuple descriptor for our result type. */ @@ -491,7 +491,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS) if (!ReadNextXLogRecord(xlogreader)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not read WAL at %X/%X", + errmsg("could not read WAL at %X/%08X", LSN_FORMAT_ARGS(xlogreader->EndRecPtr)))); GetWALRecordInfo(xlogreader, values, nulls, PG_GET_WAL_RECORD_INFO_COLS); @@ -521,7 +521,7 @@ ValidateInputLSNs(XLogRecPtr start_lsn, XLogRecPtr *end_lsn) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("WAL start LSN must be less than current LSN"), - errdetail("Current WAL LSN on the database system is at %X/%X.", + errdetail("Current WAL LSN on the database system is at %X/%08X.", LSN_FORMAT_ARGS(curr_lsn)))); if (start_lsn > *end_lsn) @@ -827,7 +827,7 @@ pg_get_wal_records_info_till_end_of_wal(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("WAL start LSN must be less than current LSN"), - errdetail("Current WAL LSN on the database system is at %X/%X.", + errdetail("Current WAL LSN on the database system is at %X/%08X.", LSN_FORMAT_ARGS(end_lsn)))); GetWALRecordsInfo(fcinfo, start_lsn, end_lsn); @@ -846,7 +846,7 @@ pg_get_wal_stats_till_end_of_wal(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("WAL start LSN must be less than current LSN"), - errdetail("Current WAL LSN on the database system is at %X/%X.", + errdetail("Current WAL LSN on the database system is at %X/%08X.", LSN_FORMAT_ARGS(end_lsn)))); GetWalStats(fcinfo, start_lsn, end_lsn, stats_per_record); diff --git a/contrib/pgcrypto/Makefile b/contrib/pgcrypto/Makefile index 11c4455dd059e..69afa3750116c 100644 --- a/contrib/pgcrypto/Makefile +++ b/contrib/pgcrypto/Makefile @@ -11,6 +11,7 @@ OBJS = \ crypt-des.o \ crypt-gensalt.o \ crypt-md5.o \ + crypt-sha.o \ mbuf.o \ openssl.o \ pgcrypto.o \ @@ -43,7 +44,7 @@ REGRESS = init md5 sha1 hmac-md5 hmac-sha1 blowfish rijndael \ sha2 des 3des cast5 \ crypt-des crypt-md5 crypt-blowfish crypt-xdes \ pgp-armor pgp-decrypt pgp-encrypt pgp-encrypt-md5 $(CF_PGP_TESTS) \ - pgp-pubkey-decrypt pgp-pubkey-encrypt pgp-info + pgp-pubkey-decrypt pgp-pubkey-encrypt pgp-info crypt-shacrypt ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/contrib/pgcrypto/crypt-gensalt.c b/contrib/pgcrypto/crypt-gensalt.c index 740f3612532b0..7149dce02d5fe 100644 --- a/contrib/pgcrypto/crypt-gensalt.c +++ b/contrib/pgcrypto/crypt-gensalt.c @@ -185,3 +185,85 @@ _crypt_gensalt_blowfish_rn(unsigned long count, return output; } + +/* + * Helper for _crypt_gensalt_sha256_rn and _crypt_gensalt_sha512_rn + */ +static char * +_crypt_gensalt_sha(unsigned long count, + const char *input, int size, char *output, int output_size) +{ + char *s_ptr = output; + unsigned int result_bufsize = PX_SHACRYPT_SALT_BUF_LEN; + int rc; + + /* output buffer must be allocated with PX_MAX_SALT_LEN bytes */ + if (PX_MAX_SALT_LEN < result_bufsize) + ereport(ERROR, + errcode(ERRCODE_SYNTAX_ERROR), + errmsg("invalid size of salt")); + + /* + * Care must be taken to not exceed the buffer size allocated for the + * input character buffer. + */ + if ((PX_SHACRYPT_SALT_MAX_LEN != size) || (output_size < size)) + ereport(ERROR, + errcode(ERRCODE_INTERNAL_ERROR), + errmsg("invalid length of salt buffer")); + + /* Skip magic bytes, set by callers */ + s_ptr += 3; + if ((rc = pg_snprintf(s_ptr, 18, "rounds=%lu$", count)) <= 0) + ereport(ERROR, + errcode(ERRCODE_INTERNAL_ERROR), + errmsg("cannot format salt string")); + + /* s_ptr should now be positioned at the start of the salt string */ + s_ptr += rc; + + /* + * Normalize salt string + * + * size of input buffer was checked above to not exceed + * PX_SHACRYPT_SALT_LEN_MAX. + */ + for (int i = 0; i < size; i++) + { + *s_ptr = _crypt_itoa64[input[i] & 0x3f]; + s_ptr++; + } + + /* We're done */ + return output; +} + +/* gen_list->gen function for sha512 */ +char * +_crypt_gensalt_sha512_rn(unsigned long count, + char const *input, int size, + char *output, int output_size) +{ + memset(output, 0, output_size); + /* set magic byte for sha512crypt */ + output[0] = '$'; + output[1] = '6'; + output[2] = '$'; + + return _crypt_gensalt_sha(count, input, size, output, output_size); +} + +/* gen_list->gen function for sha256 */ +char * +_crypt_gensalt_sha256_rn(unsigned long count, + const char *input, int size, + char *output, int output_size) +{ + memset(output, 0, output_size); + /* set magic byte for sha256crypt */ + output[0] = '$'; + output[1] = '5'; + output[2] = '$'; + + return _crypt_gensalt_sha(count, input, size, output, output_size); +} diff --git a/contrib/pgcrypto/crypt-sha.c b/contrib/pgcrypto/crypt-sha.c new file mode 100644 index 0000000000000..7ec21771a83b7 --- /dev/null +++ b/contrib/pgcrypto/crypt-sha.c @@ -0,0 +1,642 @@ +/* + * contrib/pgcrypto/crypt-sha.c + * + * This implements shacrypt password hash functions and follows the + * public available reference implementation from + * + * https://www.akkadia.org/drepper/SHA-crypt.txt + * + * This code is public domain. + * + * Please see the inline comments for details about the algorithm. + * + * Basically the following code implements password hashing with sha256 and + * sha512 digest via OpenSSL. Additionally, an extended salt generation (see + * crypt-gensalt.c for details) is provided, which generates a salt suitable + * for either sha256crypt and sha512crypt password hash generation. + * + * Official identifiers for suitable password hashes used in salts are + * 5 : sha256crypt and + * 6 : sha512crypt + * + * The hashing code below supports and uses salt length up to 16 bytes. Longer + * input is possible, but any additional byte of the input is disregarded. + * gen_salt(), when called with a sha256crypt or sha512crypt identifier will + * always generate a 16 byte long salt string. + * + * Output is compatible with any sha256crypt and sha512crypt output + * generated by e.g. OpenSSL or libc crypt(). + * + * The described algorithm uses default computing rounds of 5000. Currently, + * even when no specific rounds specification is used, we always explicitly + * print out the rounds option flag with the final hash password string. + * + * The length of the specific password hash (without magic bytes and salt + * string) is: + * + * sha256crypt: 43 bytes and + * sha512crypt: 86 bytes. + * + * Overall hashed password length is: + * + * sha256crypt: 80 bytes and + * sha512crypt: 123 bytes + * + */ +#include "postgres.h" + +#include "common/string.h" +#include "mb/pg_wchar.h" +#include "miscadmin.h" + +#include "px-crypt.h" +#include "px.h" + +typedef enum +{ + PGCRYPTO_SHA256CRYPT = 0, + PGCRYPTO_SHA512CRYPT = 1, + PGCRYPTO_SHA_UNKOWN +} PGCRYPTO_SHA_t; + +static const char _crypt_itoa64[64 + 1] = +"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +/* + * Modern UNIX password, based on SHA crypt hashes + */ +char * +px_crypt_shacrypt(const char *pw, const char *salt, char *passwd, unsigned dstlen) +{ + static const char rounds_prefix[] = "rounds="; + static const char *magic_bytes[2] = {"$5$", "$6$"}; + + /* Used to create the password hash string */ + StringInfo out_buf = NULL; + + PGCRYPTO_SHA_t type = PGCRYPTO_SHA_UNKOWN; + PX_MD *digestA = NULL; + PX_MD *digestB = NULL; + int err; + + const char *dec_salt_binary; /* pointer into the real salt string */ + StringInfo decoded_salt = NULL; /* decoded salt string */ + unsigned char sha_buf[PX_SHACRYPT_DIGEST_MAX_LEN]; + + /* temporary buffer for digests */ + unsigned char sha_buf_tmp[PX_SHACRYPT_DIGEST_MAX_LEN]; + char rounds_custom = 0; + char *p_bytes = NULL; + char *s_bytes = NULL; + char *cp = NULL; + const char *fp = NULL; /* intermediate pointer within salt string */ + const char *ep = NULL; /* holds pointer to the end of the salt string */ + size_t buf_size = 0; /* buffer size for sha256crypt/sha512crypt */ + unsigned int block; /* number of bytes processed */ + uint32 rounds = PX_SHACRYPT_ROUNDS_DEFAULT; + unsigned int len, + salt_len = 0; + + /* Sanity checks */ + if (!passwd) + return NULL; + + if (pw == NULL) + elog(ERROR, "null value for password rejected"); + + if (salt == NULL) + elog(ERROR, "null value for salt rejected"); + + /* + * Make sure result buffers are large enough. + */ + if (dstlen < PX_SHACRYPT_BUF_LEN) + elog(ERROR, "insufficient result buffer size to encrypt password"); + + /* Init result buffer */ + out_buf = makeStringInfoExt(PX_SHACRYPT_BUF_LEN); + decoded_salt = makeStringInfoExt(PX_SHACRYPT_SALT_MAX_LEN); + + /* Init contents of buffers properly */ + memset(&sha_buf, '\0', sizeof(sha_buf)); + memset(&sha_buf_tmp, '\0', sizeof(sha_buf_tmp)); + + /* + * Decode the salt string. We need to know how many rounds and which + * digest we have to use to hash the password. + */ + len = strlen(pw); + dec_salt_binary = salt; + + /* + * Analyze and prepare the salt string + * + * The magic string should be specified in the first three bytes of the + * salt string. Do some sanity checks first. + */ + if (strlen(dec_salt_binary) < 3) + ereport(ERROR, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid salt")); + + /* + * Check format of magic bytes. These should define either 5=sha256crypt + * or 6=sha512crypt in the second byte, enclosed by ascii dollar signs. + */ + if ((dec_salt_binary[0] != '$') || (dec_salt_binary[2] != '$')) + ereport(ERROR, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid format of salt"), + errhint("magic byte format for shacrypt is either \"$5$\" or \"$6$\"")); + + /* + * Check magic byte for supported shacrypt digest. + * + * We're just interested in the very first 3 bytes of the salt string, + * since this defines the digest length to use. + */ + if (strncmp(dec_salt_binary, magic_bytes[0], strlen(magic_bytes[0])) == 0) + { + type = PGCRYPTO_SHA256CRYPT; + dec_salt_binary += strlen(magic_bytes[0]); + } + else if (strncmp(dec_salt_binary, magic_bytes[1], strlen(magic_bytes[1])) == 0) + { + type = PGCRYPTO_SHA512CRYPT; + dec_salt_binary += strlen(magic_bytes[1]); + } + + /* + * dec_salt_binary pointer is positioned after the magic bytes now + * + * We extract any options in the following code branch. The only optional + * setting we need to take care of is the "rounds" option. Note that the + * salt generator already checked for invalid settings before, but we need + * to do it here again to protect against injection of wrong values when + * called without the generator. + * + * If there is any garbage added after the magic byte and the options/salt + * string, we don't treat this special: This is just absorbed as part of + * the salt with up to PX_SHACRYPT_SALT_LEN_MAX. + * + * Unknown magic byte is handled further below. + */ + if (strncmp(dec_salt_binary, + rounds_prefix, sizeof(rounds_prefix) - 1) == 0) + { + const char *num = dec_salt_binary + sizeof(rounds_prefix) - 1; + char *endp; + int srounds = strtoint(num, &endp, 10); + + if (*endp != '$') + ereport(ERROR, + errcode(ERRCODE_SYNTAX_ERROR), + errmsg("could not parse salt options")); + + dec_salt_binary = endp + 1; + + /* + * We violate supported lower or upper bound of rounds, but in this + * case we change this value to the supported lower or upper value. We + * don't do this silently and print a NOTICE in such a case. + * + * Note that a salt string generated with gen_salt() would never + * generated such a salt string, since it would error out. + * + * But Drepper's upstream reference implementation supports this when + * passing the salt string directly, so we maintain compatibility. + */ + if (srounds > PX_SHACRYPT_ROUNDS_MAX) + { + ereport(NOTICE, + errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("rounds=%d exceeds maximum supported value (%d), using %d instead", + srounds, PX_SHACRYPT_ROUNDS_MAX, + PX_SHACRYPT_ROUNDS_MAX)); + srounds = PX_SHACRYPT_ROUNDS_MAX; + } + else if (srounds < PX_SHACRYPT_ROUNDS_MIN) + { + ereport(NOTICE, + errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("rounds=%d is below supported value (%d), using %d instead", + srounds, PX_SHACRYPT_ROUNDS_MIN, + PX_SHACRYPT_ROUNDS_MIN)); + srounds = PX_SHACRYPT_ROUNDS_MIN; + } + + rounds = (uint32) srounds; + rounds_custom = 1; + } + + /* + * Choose the correct digest length and add the magic bytes to the result + * buffer. Also handle possible invalid magic byte we've extracted above. + */ + switch (type) + { + case PGCRYPTO_SHA256CRYPT: + { + /* Two PX_MD objects required */ + err = px_find_digest("sha256", &digestA); + if (err) + goto error; + + err = px_find_digest("sha256", &digestB); + if (err) + goto error; + + /* digest buffer length is 32 for sha256 */ + buf_size = 32; + + appendStringInfoString(out_buf, magic_bytes[0]); + break; + } + + case PGCRYPTO_SHA512CRYPT: + { + /* Two PX_MD objects required */ + err = px_find_digest("sha512", &digestA); + if (err) + goto error; + + err = px_find_digest("sha512", &digestB); + if (err) + goto error; + + buf_size = PX_SHACRYPT_DIGEST_MAX_LEN; + + appendStringInfoString(out_buf, magic_bytes[1]); + break; + } + + case PGCRYPTO_SHA_UNKOWN: + elog(ERROR, "unknown crypt identifier \"%c\"", salt[1]); + } + + if (rounds_custom > 0) + appendStringInfo(out_buf, "rounds=%u$", rounds); + + /* + * We need the real decoded salt string from salt input, this is every + * character before the last '$' in the preamble. Append every compatible + * character up to PX_SHACRYPT_SALT_MAX_LEN to the result buffer. Note + * that depending on the input, there might be no '$' marker after the + * salt, when there is no password hash attached at the end. + * + * We try hard to recognize mistakes, but since we might get an input + * string which might also have the password hash after the salt string + * section we give up as soon we reach the end of the input or if there + * are any bytes consumed for the salt string until we reach the first '$' + * marker thereafter. + */ + for (ep = dec_salt_binary; + *ep && ep < (dec_salt_binary + PX_SHACRYPT_SALT_MAX_LEN); + ep++) + { + /* + * Filter out any string which shouldn't be here. + * + * First check for accidentally embedded magic strings here. We don't + * support '$' in salt strings anyways and seeing a magic byte trying + * to identify shacrypt hashes might indicate that something went + * wrong when generating this salt string. Note that we later check + * for non-supported literals anyways, but any '$' here confuses us at + * this point. + */ + fp = strstr(dec_salt_binary, magic_bytes[0]); + if (fp != NULL) + elog(ERROR, "bogus magic byte found in salt string"); + + fp = strstr(dec_salt_binary, magic_bytes[1]); + if (fp != NULL) + elog(ERROR, "bogus magic byte found in salt string"); + + /* + * This looks very strict, but we assume the caller did something + * wrong when we see a "rounds=" option here. + */ + fp = strstr(dec_salt_binary, rounds_prefix); + if (fp != NULL) + elog(ERROR, "invalid rounds option specified in salt string"); + + if (*ep != '$') + { + if (strchr(_crypt_itoa64, *ep) != NULL) + appendStringInfoCharMacro(decoded_salt, *ep); + else + ereport(ERROR, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid character in salt string: \"%.*s\"", + pg_mblen(ep), ep)); + } + else + { + /* + * We encountered a '$' marker. Check if we already absorbed some + * bytes from input. If true, we are optimistic and terminate at + * this stage. If not, we try further. + * + * If we already consumed enough bytes for the salt string, + * everything that is after this marker is considered to be part + * of an optionally specified password hash and ignored. + */ + if (decoded_salt->len > 0) + break; + } + } + + salt_len = decoded_salt->len; + appendStringInfoString(out_buf, decoded_salt->data); + elog(DEBUG1, "using salt \"%s\", salt len = %d, rounds = %u", + decoded_salt->data, decoded_salt->len, rounds); + + /* + * Sanity check: at this point the salt string buffer must not exceed + * expected size. + */ + if (out_buf->len > (3 + 17 * rounds_custom + salt_len)) + elog(ERROR, "unexpected length of salt string"); + + /*- + * 1. Start digest A + * 2. Add the password string to digest A + * 3. Add the salt to digest A + */ + px_md_update(digestA, (const unsigned char *) pw, len); + px_md_update(digestA, (const unsigned char *) decoded_salt->data, salt_len); + + /*- + * 4. Create digest B + * 5. Add password to digest B + * 6. Add the salt string to digest B + * 7. Add the password again to digest B + * 8. Finalize digest B + */ + px_md_update(digestB, (const unsigned char *) pw, len); + px_md_update(digestB, (const unsigned char *) dec_salt_binary, salt_len); + px_md_update(digestB, (const unsigned char *) pw, len); + px_md_finish(digestB, sha_buf); + + /* + * 9. For each block (excluding the NULL byte), add digest B to digest A. + */ + for (block = len; block > buf_size; block -= buf_size) + px_md_update(digestA, sha_buf, buf_size); + + /*- + * 10. For the remaining N bytes of the password string, add the first N + * bytes of digest B to A. + */ + px_md_update(digestA, sha_buf, block); + + /*- + * 11. For each bit of the binary representation of the length of the + * password string up to and including the highest 1-digit, starting from + * to lowest bit position (numeric value 1) + * + * a) for a 1-digit add digest B (sha_buf) to digest A + * b) for a 0-digit add the password string + */ + block = len; + while (block) + { + px_md_update(digestA, + (block & 1) ? sha_buf : (const unsigned char *) pw, + (block & 1) ? buf_size : len); + + /* right shift to next byte */ + block >>= 1; + } + + /* 12. Finalize digest A */ + px_md_finish(digestA, sha_buf); + + /* 13. Start digest DP */ + px_md_reset(digestB); + + /*- + * 14 Add every byte of the password string (excluding trailing NULL) + * to the digest DP + */ + for (block = len; block > 0; block--) + px_md_update(digestB, (const unsigned char *) pw, len); + + /* 15. Finalize digest DP */ + px_md_finish(digestB, sha_buf_tmp); + + /*- + * 16. produce byte sequence P with same length as password. + * a) for each block of 32 or 64 bytes of length of the password + * string the entire digest DP is used + * b) for the remaining N (up to 31 or 63) bytes use the + * first N bytes of digest DP + */ + if ((p_bytes = palloc0(len)) == NULL) + { + goto error; + } + + /* N step of 16, copy over the bytes from password */ + for (cp = p_bytes, block = len; block > buf_size; block -= buf_size, cp += buf_size) + memcpy(cp, sha_buf_tmp, buf_size); + memcpy(cp, sha_buf_tmp, block); + + /* + * 17. Start digest DS + */ + px_md_reset(digestB); + + /*- + * 18. Repeat the following 16+A[0] times, where A[0] represents the first + * byte in digest A interpreted as an 8-bit unsigned value + * add the salt to digest DS + */ + for (block = 16 + sha_buf[0]; block > 0; block--) + px_md_update(digestB, (const unsigned char *) dec_salt_binary, salt_len); + + /* + * 19. Finalize digest DS + */ + px_md_finish(digestB, sha_buf_tmp); + + /*- + * 20. Produce byte sequence S of the same length as the salt string where + * + * a) for each block of 32 or 64 bytes of length of the salt string the + * entire digest DS is used + * + * b) for the remaining N (up to 31 or 63) bytes use the first N + * bytes of digest DS + */ + if ((s_bytes = palloc0(salt_len)) == NULL) + goto error; + + for (cp = s_bytes, block = salt_len; block > buf_size; block -= buf_size, cp += buf_size) + memcpy(cp, sha_buf_tmp, buf_size); + memcpy(cp, sha_buf_tmp, block); + + /* Make sure we don't leave something important behind */ + px_memset(&sha_buf_tmp, 0, sizeof sha_buf); + + /*- + * 21. Repeat a loop according to the number specified in the rounds= + * specification in the salt (or the default value if none is + * present). Each round is numbered, starting with 0 and up to N-1. + * + * The loop uses a digest as input. In the first round it is the + * digest produced in step 12. In the latter steps it is the digest + * produced in step 21.h of the previous round. The following text + * uses the notation "digest A/B" to describe this behavior. + */ + for (block = 0; block < rounds; block++) + { + /* + * Make it possible to abort in case large values for "rounds" are + * specified. + */ + CHECK_FOR_INTERRUPTS(); + + /* a) start digest B */ + px_md_reset(digestB); + + /*- + * b) for odd round numbers add the byte sequence P to digest B + * c) for even round numbers add digest A/B + */ + px_md_update(digestB, + (block & 1) ? (const unsigned char *) p_bytes : sha_buf, + (block & 1) ? len : buf_size); + + /* d) for all round numbers not divisible by 3 add the byte sequence S */ + if ((block % 3) != 0) + px_md_update(digestB, (const unsigned char *) s_bytes, salt_len); + + /* e) for all round numbers not divisible by 7 add the byte sequence P */ + if ((block % 7) != 0) + px_md_update(digestB, (const unsigned char *) p_bytes, len); + + /*- + * f) for odd round numbers add digest A/C + * g) for even round numbers add the byte sequence P + */ + px_md_update(digestB, + (block & 1) ? sha_buf : (const unsigned char *) p_bytes, + (block & 1) ? buf_size : len); + + /* h) finish digest C. */ + px_md_finish(digestB, sha_buf); + } + + px_md_free(digestA); + px_md_free(digestB); + + digestA = NULL; + digestB = NULL; + + pfree(s_bytes); + pfree(p_bytes); + + s_bytes = NULL; + p_bytes = NULL; + + /* prepare final result buffer */ + appendStringInfoCharMacro(out_buf, '$'); + +#define b64_from_24bit(B2, B1, B0, N) \ + do { \ + unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ + int i = (N); \ + while (i-- > 0) \ + { \ + appendStringInfoCharMacro(out_buf, _crypt_itoa64[w & 0x3f]); \ + w >>= 6; \ + } \ + } while (0) + + switch (type) + { + case PGCRYPTO_SHA256CRYPT: + { + b64_from_24bit(sha_buf[0], sha_buf[10], sha_buf[20], 4); + b64_from_24bit(sha_buf[21], sha_buf[1], sha_buf[11], 4); + b64_from_24bit(sha_buf[12], sha_buf[22], sha_buf[2], 4); + b64_from_24bit(sha_buf[3], sha_buf[13], sha_buf[23], 4); + b64_from_24bit(sha_buf[24], sha_buf[4], sha_buf[14], 4); + b64_from_24bit(sha_buf[15], sha_buf[25], sha_buf[5], 4); + b64_from_24bit(sha_buf[6], sha_buf[16], sha_buf[26], 4); + b64_from_24bit(sha_buf[27], sha_buf[7], sha_buf[17], 4); + b64_from_24bit(sha_buf[18], sha_buf[28], sha_buf[8], 4); + b64_from_24bit(sha_buf[9], sha_buf[19], sha_buf[29], 4); + b64_from_24bit(0, sha_buf[31], sha_buf[30], 3); + + break; + } + + case PGCRYPTO_SHA512CRYPT: + { + b64_from_24bit(sha_buf[0], sha_buf[21], sha_buf[42], 4); + b64_from_24bit(sha_buf[22], sha_buf[43], sha_buf[1], 4); + b64_from_24bit(sha_buf[44], sha_buf[2], sha_buf[23], 4); + b64_from_24bit(sha_buf[3], sha_buf[24], sha_buf[45], 4); + b64_from_24bit(sha_buf[25], sha_buf[46], sha_buf[4], 4); + b64_from_24bit(sha_buf[47], sha_buf[5], sha_buf[26], 4); + b64_from_24bit(sha_buf[6], sha_buf[27], sha_buf[48], 4); + b64_from_24bit(sha_buf[28], sha_buf[49], sha_buf[7], 4); + b64_from_24bit(sha_buf[50], sha_buf[8], sha_buf[29], 4); + b64_from_24bit(sha_buf[9], sha_buf[30], sha_buf[51], 4); + b64_from_24bit(sha_buf[31], sha_buf[52], sha_buf[10], 4); + b64_from_24bit(sha_buf[53], sha_buf[11], sha_buf[32], 4); + b64_from_24bit(sha_buf[12], sha_buf[33], sha_buf[54], 4); + b64_from_24bit(sha_buf[34], sha_buf[55], sha_buf[13], 4); + b64_from_24bit(sha_buf[56], sha_buf[14], sha_buf[35], 4); + b64_from_24bit(sha_buf[15], sha_buf[36], sha_buf[57], 4); + b64_from_24bit(sha_buf[37], sha_buf[58], sha_buf[16], 4); + b64_from_24bit(sha_buf[59], sha_buf[17], sha_buf[38], 4); + b64_from_24bit(sha_buf[18], sha_buf[39], sha_buf[60], 4); + b64_from_24bit(sha_buf[40], sha_buf[61], sha_buf[19], 4); + b64_from_24bit(sha_buf[62], sha_buf[20], sha_buf[41], 4); + b64_from_24bit(0, 0, sha_buf[63], 2); + + break; + } + + case PGCRYPTO_SHA_UNKOWN: + /* we shouldn't land here ... */ + elog(ERROR, "unsupported digest length"); + } + + /* + * Copy over result to specified buffer. + * + * The passwd character buffer should have at least PX_SHACRYPT_BUF_LEN + * allocated, since we checked above if dstlen is smaller than + * PX_SHACRYPT_BUF_LEN (which also includes the NULL byte). + * + * In that case we would have failed above already. + */ + memcpy(passwd, out_buf->data, out_buf->len); + + /* make sure nothing important is left behind */ + px_memset(&sha_buf, 0, sizeof sha_buf); + destroyStringInfo(out_buf); + destroyStringInfo(decoded_salt); + + /* ...and we're done */ + return passwd; + +error: + if (digestA != NULL) + px_md_free(digestA); + + if (digestB != NULL) + px_md_free(digestB); + + destroyStringInfo(out_buf); + destroyStringInfo(decoded_salt); + + ereport(ERROR, + errcode(ERRCODE_INTERNAL_ERROR), + errmsg("cannot create encrypted password")); + return NULL; /* keep compiler quiet */ +} diff --git a/contrib/pgcrypto/expected/crypt-shacrypt.out b/contrib/pgcrypto/expected/crypt-shacrypt.out new file mode 100644 index 0000000000000..f3b76d5e9136c --- /dev/null +++ b/contrib/pgcrypto/expected/crypt-shacrypt.out @@ -0,0 +1,196 @@ +-- +-- crypt() and gensalt: sha256crypt, sha512crypt +-- +-- $5$ is sha256crypt +SELECT crypt('', '$5$Szzz0yzz'); + crypt +--------------------------------------------------------- + $5$Szzz0yzz$cA.ZFZKqblRYjdsbrWtVTYa/qSwPQnt2uh0LBtyYAAD +(1 row) + +SELECT crypt('foox', '$5$Szzz0yzz'); + crypt +--------------------------------------------------------- + $5$Szzz0yzz$7hI0rUWkO2QdBkzamh.vP.MIPlbZiwSvu2smhSi6064 +(1 row) + +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); +-- generate a salt for sha256crypt, default rounds +UPDATE ctest SET salt = gen_salt('sha256crypt'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + worked +-------- + t +(1 row) + +-- generate a salt for sha256crypt, rounds 9999 +UPDATE ctest SET salt = gen_salt('sha256crypt', 9999); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + worked +-------- + t +(1 row) + +-- should fail, below supported minimum rounds value +UPDATE ctest SET salt = gen_salt('sha256crypt', 10); +ERROR: gen_salt: Incorrect number of rounds +-- should fail, exceeds supported maximum rounds value +UPDATE ctest SET salt = gen_salt('sha256crypt', 1000000000); +ERROR: gen_salt: Incorrect number of rounds +TRUNCATE ctest; +-- $6$ is sha512crypt +SELECT crypt('', '$6$Szzz0yzz'); + crypt +---------------------------------------------------------------------------------------------------- + $6$Szzz0yzz$EGj.JLAovFyAtCJx3YD1DXD1yTXoO9gv4qgLyHBsJJ1lkpnLB8ZPHekm1qXjJCOBc/8thCuHpxNN8Y5xzRYU5. +(1 row) + +SELECT crypt('foox', '$6$Szzz0yzz'); + crypt +---------------------------------------------------------------------------------------------------- + $6$Szzz0yzz$KqDw1Y8kze.VFapkvTc9Y5fbqzltjeRz1aPGC/pkHRhFQZ2aM6PmZpXQjcD7AOH88Bq0CSD.VlmymQzcBMEUl0 +(1 row) + +INSERT INTO ctest VALUES ('password', '', ''); +-- generate a salt for sha512crypt, default rounds +UPDATE ctest SET salt = gen_salt('sha512crypt'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + worked +-------- + t +(1 row) + +-- generate a salt for sha512crypt, rounds 9999 +UPDATE ctest SET salt = gen_salt('sha512crypt', 9999); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + worked +-------- + t +(1 row) + +-- should fail, below supported minimum rounds value +UPDATE ctest SET salt = gen_salt('sha512crypt', 10); +ERROR: gen_salt: Incorrect number of rounds +-- should fail, exceeds supported maximum rounds value +UPDATE ctest SET salt = gen_salt('sha512crypt', 1000000000); +ERROR: gen_salt: Incorrect number of rounds +-- Extended tests taken from public domain code at +-- https://www.akkadia.org/drepper/SHA-crypt.txt +-- +-- We adapt the tests defined there to make sure we are compatible with the reference +-- implementation. +-- This tests sha256crypt (magic byte $5$ with salt and rounds) +SELECT crypt('Hello world!', '$5$saltstring') + = '$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5' AS result; + result +-------- + t +(1 row) + +SELECT crypt('Hello world!', '$5$rounds=10000$saltstringsaltstring') + = '$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2.opqey6IcA' AS result; + result +-------- + t +(1 row) + +SELECT crypt('This is just a test', '$5$rounds=5000$toolongsaltstring') + = '$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8mGRcvxa5' AS result; + result +-------- + t +(1 row) + + SELECT crypt('a very much longer text to encrypt. This one even stretches over more' + 'than one line.', '$5$rounds=1400$anotherlongsaltstring') + = '$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12oP84Bnq1' AS result; + result +-------- + t +(1 row) + +SELECT crypt('we have a short salt string but not a short password', '$5$rounds=77777$short') + = '$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/' AS result; + result +-------- + t +(1 row) + +SELECT crypt('a short string', '$5$rounds=123456$asaltof16chars..') + = '$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/cZKmF/wJvD' AS result; + result +-------- + t +(1 row) + +SELECT crypt('the minimum number is still observed', '$5$rounds=10$roundstoolow') + = '$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL972bIC' AS result; +NOTICE: rounds=10 is below supported value (1000), using 1000 instead + result +-------- + t +(1 row) + +-- The following tests sha512crypt (magic byte $6$ with salt and rounds) +SELECT crypt('Hello world!', '$6$saltstring') + = '$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJuesI68u4OTLiBFdcbYEdFCoEOfaS35inz1' AS result; + result +-------- + t +(1 row) + +SELECT crypt('Hello world!', '$6$rounds=10000$saltstringsaltstring') + = '$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sbHbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v.' AS result; + result +-------- + t +(1 row) + +SELECT crypt('This is just a test', '$6$rounds=5000$toolongsaltstring') + = '$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQzQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0' AS result; + result +-------- + t +(1 row) + +SELECT crypt('a very much longer text to encrypt. This one even stretches over more' + 'than one line.', '$6$rounds=1400$anotherlongsaltstring') + = '$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wPvMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1' AS result; + result +-------- + t +(1 row) + +SELECT crypt('we have a short salt string but not a short password', '$6$rounds=77777$short') + = '$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0gge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0' AS result; + result +-------- + t +(1 row) + +SELECT crypt('a short string', '$6$rounds=123456$asaltof16chars..') + = '$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwcelCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1' AS result; + result +-------- + t +(1 row) + +SELECT crypt('the minimum number is still observed', '$6$rounds=10$roundstoolow') + = '$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1xhLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX.' AS result; +NOTICE: rounds=10 is below supported value (1000), using 1000 instead + result +-------- + t +(1 row) + +-- cleanup +DROP TABLE ctest; diff --git a/contrib/pgcrypto/meson.build b/contrib/pgcrypto/meson.build index 7a4e8e76d64c2..7d5ef9b6d3231 100644 --- a/contrib/pgcrypto/meson.build +++ b/contrib/pgcrypto/meson.build @@ -9,6 +9,7 @@ pgcrypto_sources = files( 'crypt-des.c', 'crypt-gensalt.c', 'crypt-md5.c', + 'crypt-sha.c', 'mbuf.c', 'pgcrypto.c', 'pgp-armor.c', @@ -52,6 +53,7 @@ pgcrypto_regress = [ 'pgp-pubkey-decrypt', 'pgp-pubkey-encrypt', 'pgp-info', + 'crypt-shacrypt' ] pgcrypto_openssl_sources = files( diff --git a/contrib/pgcrypto/px-crypt.c b/contrib/pgcrypto/px-crypt.c index 96ce9384aff43..d7729eec9bcae 100644 --- a/contrib/pgcrypto/px-crypt.c +++ b/contrib/pgcrypto/px-crypt.c @@ -67,6 +67,16 @@ run_crypt_bf(const char *psw, const char *salt, return res; } +static char * +run_crypt_sha(const char *psw, const char *salt, + char *buf, unsigned len) +{ + char *res; + + res = px_crypt_shacrypt(psw, salt, buf, len); + return res; +} + struct px_crypt_algo { char *id; @@ -81,6 +91,8 @@ static const struct px_crypt_algo {"$2x$", 4, run_crypt_bf}, {"$2$", 3, NULL}, /* N/A */ {"$1$", 3, run_crypt_md5}, + {"$5$", 3, run_crypt_sha}, + {"$6$", 3, run_crypt_sha}, {"_", 1, run_crypt_des}, {"", 0, run_crypt_des}, {NULL, 0, NULL} @@ -127,6 +139,16 @@ static struct generator gen_list[] = { {"md5", _crypt_gensalt_md5_rn, 6, 0, 0, 0}, {"xdes", _crypt_gensalt_extended_rn, 3, PX_XDES_ROUNDS, 1, 0xFFFFFF}, {"bf", _crypt_gensalt_blowfish_rn, 16, PX_BF_ROUNDS, 4, 31}, + { + "sha256crypt", _crypt_gensalt_sha256_rn, + PX_SHACRYPT_SALT_MAX_LEN, PX_SHACRYPT_ROUNDS_DEFAULT, + PX_SHACRYPT_ROUNDS_MIN, PX_SHACRYPT_ROUNDS_MAX + }, + { + "sha512crypt", _crypt_gensalt_sha512_rn, + PX_SHACRYPT_SALT_MAX_LEN, PX_SHACRYPT_ROUNDS_DEFAULT, + PX_SHACRYPT_ROUNDS_MIN, PX_SHACRYPT_ROUNDS_MAX + }, {NULL, NULL, 0, 0, 0, 0} }; diff --git a/contrib/pgcrypto/px-crypt.h b/contrib/pgcrypto/px-crypt.h index 54de806965530..bb03cf5592ad0 100644 --- a/contrib/pgcrypto/px-crypt.h +++ b/contrib/pgcrypto/px-crypt.h @@ -45,6 +45,30 @@ /* default for blowfish salt */ #define PX_BF_ROUNDS 6 +/* Maximum salt string length of shacrypt. */ +#define PX_SHACRYPT_SALT_MAX_LEN 16 + +/* SHA buffer length */ +#define PX_SHACRYPT_DIGEST_MAX_LEN 64 + +/* calculated buffer size of a buffer to store a shacrypt salt string */ +#define PX_SHACRYPT_SALT_BUF_LEN (3 + 7 + 10 + PX_SHACRYPT_SALT_MAX_LEN + 1) + +/* + * calculated buffer size of a buffer to store complete result of a shacrypt + * digest including salt + */ +#define PX_SHACRYPT_BUF_LEN (PX_SHACRYPT_SALT_BUF_LEN + 86 + 1) + +/* Default number of rounds of shacrypt if not explicitly specified. */ +#define PX_SHACRYPT_ROUNDS_DEFAULT 5000 + +/* Minimum number of rounds of shacrypt. */ +#define PX_SHACRYPT_ROUNDS_MIN 1000 + +/* Maximum number of rounds of shacrypt. */ +#define PX_SHACRYPT_ROUNDS_MAX 999999999 + /* * main interface */ @@ -64,6 +88,10 @@ char *_crypt_gensalt_md5_rn(unsigned long count, const char *input, int size, char *output, int output_size); char *_crypt_gensalt_blowfish_rn(unsigned long count, const char *input, int size, char *output, int output_size); +char *_crypt_gensalt_sha256_rn(unsigned long count, + const char *input, int size, char *output, int output_size); +char *_crypt_gensalt_sha512_rn(unsigned long count, + const char *input, int size, char *output, int output_size); /* disable 'extended DES crypt' */ /* #define DISABLE_XDES */ @@ -79,4 +107,7 @@ char *px_crypt_des(const char *key, const char *setting); char *px_crypt_md5(const char *pw, const char *salt, char *passwd, unsigned dstlen); +/* crypt-sha.c */ +char *px_crypt_shacrypt(const char *pw, const char *salt, char *passwd, unsigned dstlen); + #endif /* _PX_CRYPT_H */ diff --git a/contrib/pgcrypto/sql/crypt-shacrypt.sql b/contrib/pgcrypto/sql/crypt-shacrypt.sql new file mode 100644 index 0000000000000..3ee826f61aa6c --- /dev/null +++ b/contrib/pgcrypto/sql/crypt-shacrypt.sql @@ -0,0 +1,99 @@ +-- +-- crypt() and gensalt: sha256crypt, sha512crypt +-- + +-- $5$ is sha256crypt +SELECT crypt('', '$5$Szzz0yzz'); + +SELECT crypt('foox', '$5$Szzz0yzz'); + +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); + +-- generate a salt for sha256crypt, default rounds +UPDATE ctest SET salt = gen_salt('sha256crypt'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +-- generate a salt for sha256crypt, rounds 9999 +UPDATE ctest SET salt = gen_salt('sha256crypt', 9999); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +-- should fail, below supported minimum rounds value +UPDATE ctest SET salt = gen_salt('sha256crypt', 10); + +-- should fail, exceeds supported maximum rounds value +UPDATE ctest SET salt = gen_salt('sha256crypt', 1000000000); + +TRUNCATE ctest; + +-- $6$ is sha512crypt +SELECT crypt('', '$6$Szzz0yzz'); + +SELECT crypt('foox', '$6$Szzz0yzz'); + +INSERT INTO ctest VALUES ('password', '', ''); + +-- generate a salt for sha512crypt, default rounds +UPDATE ctest SET salt = gen_salt('sha512crypt'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +-- generate a salt for sha512crypt, rounds 9999 +UPDATE ctest SET salt = gen_salt('sha512crypt', 9999); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +-- should fail, below supported minimum rounds value +UPDATE ctest SET salt = gen_salt('sha512crypt', 10); + +-- should fail, exceeds supported maximum rounds value +UPDATE ctest SET salt = gen_salt('sha512crypt', 1000000000); + +-- Extended tests taken from public domain code at +-- https://www.akkadia.org/drepper/SHA-crypt.txt +-- +-- We adapt the tests defined there to make sure we are compatible with the reference +-- implementation. + +-- This tests sha256crypt (magic byte $5$ with salt and rounds) +SELECT crypt('Hello world!', '$5$saltstring') + = '$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5' AS result; +SELECT crypt('Hello world!', '$5$rounds=10000$saltstringsaltstring') + = '$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2.opqey6IcA' AS result; +SELECT crypt('This is just a test', '$5$rounds=5000$toolongsaltstring') + = '$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8mGRcvxa5' AS result; + SELECT crypt('a very much longer text to encrypt. This one even stretches over more' + 'than one line.', '$5$rounds=1400$anotherlongsaltstring') + = '$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12oP84Bnq1' AS result; +SELECT crypt('we have a short salt string but not a short password', '$5$rounds=77777$short') + = '$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/' AS result; +SELECT crypt('a short string', '$5$rounds=123456$asaltof16chars..') + = '$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/cZKmF/wJvD' AS result; +SELECT crypt('the minimum number is still observed', '$5$rounds=10$roundstoolow') + = '$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL972bIC' AS result; + +-- The following tests sha512crypt (magic byte $6$ with salt and rounds) +SELECT crypt('Hello world!', '$6$saltstring') + = '$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJuesI68u4OTLiBFdcbYEdFCoEOfaS35inz1' AS result; +SELECT crypt('Hello world!', '$6$rounds=10000$saltstringsaltstring') + = '$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sbHbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v.' AS result; +SELECT crypt('This is just a test', '$6$rounds=5000$toolongsaltstring') + = '$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQzQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0' AS result; +SELECT crypt('a very much longer text to encrypt. This one even stretches over more' + 'than one line.', '$6$rounds=1400$anotherlongsaltstring') + = '$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wPvMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1' AS result; +SELECT crypt('we have a short salt string but not a short password', '$6$rounds=77777$short') + = '$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0gge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0' AS result; +SELECT crypt('a short string', '$6$rounds=123456$asaltof16chars..') + = '$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwcelCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1' AS result; +SELECT crypt('the minimum number is still observed', '$6$rounds=10$roundstoolow') + = '$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1xhLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX.' AS result; + +-- cleanup +DROP TABLE ctest; diff --git a/contrib/pgrowlocks/pgrowlocks.c b/contrib/pgrowlocks/pgrowlocks.c index b75d80fa7a9c2..f88269332b6be 100644 --- a/contrib/pgrowlocks/pgrowlocks.c +++ b/contrib/pgrowlocks/pgrowlocks.c @@ -141,8 +141,8 @@ pgrowlocks(PG_FUNCTION_ARGS) */ if (htsu == TM_BeingModified) { - values[Atnum_tid] = (char *) DirectFunctionCall1(tidout, - PointerGetDatum(&tuple->t_self)); + values[Atnum_tid] = DatumGetCString(DirectFunctionCall1(tidout, + PointerGetDatum(&tuple->t_self))); values[Atnum_xmax] = palloc(NCHARS * sizeof(char)); snprintf(values[Atnum_xmax], NCHARS, "%u", xmax); diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 9fa7f7e95cd1f..4fbb6c182b82c 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -142,6 +142,8 @@ static void do_sql_command_begin(PGconn *conn, const char *sql); static void do_sql_command_end(PGconn *conn, const char *sql, bool consume_input); static void begin_remote_xact(ConnCacheEntry *entry); +static void pgfdw_report_internal(int elevel, PGresult *res, PGconn *conn, + const char *sql); static void pgfdw_xact_callback(XactEvent event, void *arg); static void pgfdw_subxact_callback(SubXactEvent event, SubTransactionId mySubid, @@ -462,7 +464,7 @@ pgfdw_security_check(const char **keywords, const char **values, UserMapping *us * assume that UseScramPassthrough is also true since SCRAM options are * only set when UseScramPassthrough is enabled. */ - if (MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values)) + if (MyProcPort != NULL && MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values)) return; ereport(ERROR, @@ -568,7 +570,7 @@ connect_pg_server(ForeignServer *server, UserMapping *user) n++; /* Add required SCRAM pass-through connection options if it's enabled. */ - if (MyProcPort->has_scram_keys && UseScramPassthrough(server, user)) + if (MyProcPort != NULL && MyProcPort->has_scram_keys && UseScramPassthrough(server, user)) { int len; int encoded_len; @@ -577,7 +579,7 @@ connect_pg_server(ForeignServer *server, UserMapping *user) len = pg_b64_enc_len(sizeof(MyProcPort->scram_ClientKey)); /* don't forget the zero-terminator */ values[n] = palloc0(len + 1); - encoded_len = pg_b64_encode((const char *) MyProcPort->scram_ClientKey, + encoded_len = pg_b64_encode(MyProcPort->scram_ClientKey, sizeof(MyProcPort->scram_ClientKey), (char *) values[n], len); if (encoded_len < 0) @@ -588,7 +590,7 @@ connect_pg_server(ForeignServer *server, UserMapping *user) len = pg_b64_enc_len(sizeof(MyProcPort->scram_ServerKey)); /* don't forget the zero-terminator */ values[n] = palloc0(len + 1); - encoded_len = pg_b64_encode((const char *) MyProcPort->scram_ServerKey, + encoded_len = pg_b64_encode(MyProcPort->scram_ServerKey, sizeof(MyProcPort->scram_ServerKey), (char *) values[n], len); if (encoded_len < 0) @@ -625,6 +627,9 @@ connect_pg_server(ForeignServer *server, UserMapping *user) server->servername), errdetail_internal("%s", pchomp(PQerrorMessage(conn))))); + PQsetNoticeReceiver(conn, libpqsrv_notice_receiver, + "received message via remote connection"); + /* Perform post-connection security checks. */ pgfdw_security_check(keywords, values, user, conn); @@ -743,7 +748,7 @@ check_conn_params(const char **keywords, const char **values, UserMapping *user) * assume that UseScramPassthrough is also true since SCRAM options are * only set when UseScramPassthrough is enabled. */ - if (MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values)) + if (MyProcPort != NULL && MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values)) return; ereport(ERROR, @@ -812,7 +817,7 @@ static void do_sql_command_begin(PGconn *conn, const char *sql) { if (!PQsendQuery(conn, sql)) - pgfdw_report_error(ERROR, NULL, conn, false, sql); + pgfdw_report_error(NULL, conn, sql); } static void @@ -827,10 +832,10 @@ do_sql_command_end(PGconn *conn, const char *sql, bool consume_input) * would be large compared to the overhead of PQconsumeInput.) */ if (consume_input && !PQconsumeInput(conn)) - pgfdw_report_error(ERROR, NULL, conn, false, sql); + pgfdw_report_error(NULL, conn, sql); res = pgfdw_get_result(conn); if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, conn, true, sql); + pgfdw_report_error(res, conn, sql); PQclear(res); } @@ -963,63 +968,73 @@ pgfdw_get_result(PGconn *conn) /* * Report an error we got from the remote server. * - * elevel: error level to use (typically ERROR, but might be less) - * res: PGresult containing the error + * Callers should use pgfdw_report_error() to throw an error, or use + * pgfdw_report() for lesser message levels. (We make this distinction + * so that pgfdw_report_error() can be marked noreturn.) + * + * res: PGresult containing the error (might be NULL) * conn: connection we did the query on - * clear: if true, PQclear the result (otherwise caller will handle it) * sql: NULL, or text of remote command we tried to execute * + * If "res" is not NULL, it'll be PQclear'ed here (unless we throw error, + * in which case memory context cleanup will clear it eventually). + * * Note: callers that choose not to throw ERROR for a remote error are * responsible for making sure that the associated ConnCacheEntry gets * marked with have_error = true. */ void -pgfdw_report_error(int elevel, PGresult *res, PGconn *conn, - bool clear, const char *sql) +pgfdw_report_error(PGresult *res, PGconn *conn, const char *sql) { - /* If requested, PGresult must be released before leaving this function. */ - PG_TRY(); - { - char *diag_sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); - char *message_primary = PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY); - char *message_detail = PQresultErrorField(res, PG_DIAG_MESSAGE_DETAIL); - char *message_hint = PQresultErrorField(res, PG_DIAG_MESSAGE_HINT); - char *message_context = PQresultErrorField(res, PG_DIAG_CONTEXT); - int sqlstate; - - if (diag_sqlstate) - sqlstate = MAKE_SQLSTATE(diag_sqlstate[0], - diag_sqlstate[1], - diag_sqlstate[2], - diag_sqlstate[3], - diag_sqlstate[4]); - else - sqlstate = ERRCODE_CONNECTION_FAILURE; + pgfdw_report_internal(ERROR, res, conn, sql); + pg_unreachable(); +} - /* - * If we don't get a message from the PGresult, try the PGconn. This - * is needed because for connection-level failures, PQgetResult may - * just return NULL, not a PGresult at all. - */ - if (message_primary == NULL) - message_primary = pchomp(PQerrorMessage(conn)); - - ereport(elevel, - (errcode(sqlstate), - (message_primary != NULL && message_primary[0] != '\0') ? - errmsg_internal("%s", message_primary) : - errmsg("could not obtain message string for remote error"), - message_detail ? errdetail_internal("%s", message_detail) : 0, - message_hint ? errhint("%s", message_hint) : 0, - message_context ? errcontext("%s", message_context) : 0, - sql ? errcontext("remote SQL command: %s", sql) : 0)); - } - PG_FINALLY(); - { - if (clear) - PQclear(res); - } - PG_END_TRY(); +void +pgfdw_report(int elevel, PGresult *res, PGconn *conn, const char *sql) +{ + Assert(elevel < ERROR); /* use pgfdw_report_error for that */ + pgfdw_report_internal(elevel, res, conn, sql); +} + +static void +pgfdw_report_internal(int elevel, PGresult *res, PGconn *conn, + const char *sql) +{ + char *diag_sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); + char *message_primary = PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY); + char *message_detail = PQresultErrorField(res, PG_DIAG_MESSAGE_DETAIL); + char *message_hint = PQresultErrorField(res, PG_DIAG_MESSAGE_HINT); + char *message_context = PQresultErrorField(res, PG_DIAG_CONTEXT); + int sqlstate; + + if (diag_sqlstate) + sqlstate = MAKE_SQLSTATE(diag_sqlstate[0], + diag_sqlstate[1], + diag_sqlstate[2], + diag_sqlstate[3], + diag_sqlstate[4]); + else + sqlstate = ERRCODE_CONNECTION_FAILURE; + + /* + * If we don't get a message from the PGresult, try the PGconn. This is + * needed because for connection-level failures, PQgetResult may just + * return NULL, not a PGresult at all. + */ + if (message_primary == NULL) + message_primary = pchomp(PQerrorMessage(conn)); + + ereport(elevel, + (errcode(sqlstate), + (message_primary != NULL && message_primary[0] != '\0') ? + errmsg_internal("%s", message_primary) : + errmsg("could not obtain message string for remote error"), + message_detail ? errdetail_internal("%s", message_detail) : 0, + message_hint ? errhint("%s", message_hint) : 0, + message_context ? errcontext("%s", message_context) : 0, + sql ? errcontext("remote SQL command: %s", sql) : 0)); + PQclear(res); } /* @@ -1542,7 +1557,7 @@ pgfdw_exec_cleanup_query_begin(PGconn *conn, const char *query) */ if (!PQsendQuery(conn, query)) { - pgfdw_report_error(WARNING, NULL, conn, false, query); + pgfdw_report(WARNING, NULL, conn, query); return false; } @@ -1567,7 +1582,7 @@ pgfdw_exec_cleanup_query_end(PGconn *conn, const char *query, */ if (consume_input && !PQconsumeInput(conn)) { - pgfdw_report_error(WARNING, NULL, conn, false, query); + pgfdw_report(WARNING, NULL, conn, query); return false; } @@ -1579,7 +1594,7 @@ pgfdw_exec_cleanup_query_end(PGconn *conn, const char *query, (errmsg("could not get query result due to timeout"), errcontext("remote SQL command: %s", query))); else - pgfdw_report_error(WARNING, NULL, conn, false, query); + pgfdw_report(WARNING, NULL, conn, query); return false; } @@ -1587,7 +1602,7 @@ pgfdw_exec_cleanup_query_end(PGconn *conn, const char *query, /* Issue a warning if not successful. */ if (PQresultStatus(result) != PGRES_COMMAND_OK) { - pgfdw_report_error(WARNING, result, conn, true, query); + pgfdw_report(WARNING, result, conn, query); return ignore_errors; } PQclear(result); @@ -1615,103 +1630,90 @@ pgfdw_get_cleanup_result(PGconn *conn, TimestampTz endtime, PGresult **result, bool *timed_out) { - volatile bool failed = false; - PGresult *volatile last_res = NULL; + bool failed = false; + PGresult *last_res = NULL; + int canceldelta = RETRY_CANCEL_TIMEOUT * 2; *result = NULL; *timed_out = false; - - /* In what follows, do not leak any PGresults on an error. */ - PG_TRY(); + for (;;) { - int canceldelta = RETRY_CANCEL_TIMEOUT * 2; + PGresult *res; - for (;;) + while (PQisBusy(conn)) { - PGresult *res; + int wc; + TimestampTz now = GetCurrentTimestamp(); + long cur_timeout; - while (PQisBusy(conn)) + /* If timeout has expired, give up. */ + if (now >= endtime) { - int wc; - TimestampTz now = GetCurrentTimestamp(); - long cur_timeout; - - /* If timeout has expired, give up. */ - if (now >= endtime) - { - *timed_out = true; - failed = true; - goto exit; - } + *timed_out = true; + failed = true; + goto exit; + } - /* If we need to re-issue the cancel request, do that. */ - if (now >= retrycanceltime) - { - /* We ignore failure to issue the repeated request. */ - (void) libpqsrv_cancel(conn, endtime); + /* If we need to re-issue the cancel request, do that. */ + if (now >= retrycanceltime) + { + /* We ignore failure to issue the repeated request. */ + (void) libpqsrv_cancel(conn, endtime); - /* Recompute "now" in case that took measurable time. */ - now = GetCurrentTimestamp(); + /* Recompute "now" in case that took measurable time. */ + now = GetCurrentTimestamp(); - /* Adjust re-cancel timeout in increasing steps. */ - retrycanceltime = TimestampTzPlusMilliseconds(now, - canceldelta); - canceldelta += canceldelta; - } + /* Adjust re-cancel timeout in increasing steps. */ + retrycanceltime = TimestampTzPlusMilliseconds(now, + canceldelta); + canceldelta += canceldelta; + } - /* If timeout has expired, give up, else get sleep time. */ - cur_timeout = TimestampDifferenceMilliseconds(now, - Min(endtime, - retrycanceltime)); - if (cur_timeout <= 0) - { - *timed_out = true; - failed = true; - goto exit; - } + /* If timeout has expired, give up, else get sleep time. */ + cur_timeout = TimestampDifferenceMilliseconds(now, + Min(endtime, + retrycanceltime)); + if (cur_timeout <= 0) + { + *timed_out = true; + failed = true; + goto exit; + } - /* first time, allocate or get the custom wait event */ - if (pgfdw_we_cleanup_result == 0) - pgfdw_we_cleanup_result = WaitEventExtensionNew("PostgresFdwCleanupResult"); + /* first time, allocate or get the custom wait event */ + if (pgfdw_we_cleanup_result == 0) + pgfdw_we_cleanup_result = WaitEventExtensionNew("PostgresFdwCleanupResult"); - /* Sleep until there's something to do */ - wc = WaitLatchOrSocket(MyLatch, - WL_LATCH_SET | WL_SOCKET_READABLE | - WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, - PQsocket(conn), - cur_timeout, pgfdw_we_cleanup_result); - ResetLatch(MyLatch); + /* Sleep until there's something to do */ + wc = WaitLatchOrSocket(MyLatch, + WL_LATCH_SET | WL_SOCKET_READABLE | + WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, + PQsocket(conn), + cur_timeout, pgfdw_we_cleanup_result); + ResetLatch(MyLatch); - CHECK_FOR_INTERRUPTS(); + CHECK_FOR_INTERRUPTS(); - /* Data available in socket? */ - if (wc & WL_SOCKET_READABLE) + /* Data available in socket? */ + if (wc & WL_SOCKET_READABLE) + { + if (!PQconsumeInput(conn)) { - if (!PQconsumeInput(conn)) - { - /* connection trouble */ - failed = true; - goto exit; - } + /* connection trouble */ + failed = true; + goto exit; } } + } - res = PQgetResult(conn); - if (res == NULL) - break; /* query is complete */ + res = PQgetResult(conn); + if (res == NULL) + break; /* query is complete */ - PQclear(last_res); - last_res = res; - } -exit: ; - } - PG_CATCH(); - { PQclear(last_res); - PG_RE_THROW(); + last_res = res; } - PG_END_TRY(); - +exit: if (failed) PQclear(last_res); else @@ -2557,7 +2559,7 @@ pgfdw_has_required_scram_options(const char **keywords, const char **values) } } - has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort->has_scram_keys; + has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort != NULL && MyProcPort->has_scram_keys; return (has_scram_keys && has_require_auth); } diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index 6e7dc3d2df982..e5b5e1a5f51a5 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -39,6 +39,7 @@ #include "catalog/pg_aggregate.h" #include "catalog/pg_authid.h" #include "catalog/pg_collation.h" +#include "catalog/pg_database.h" #include "catalog/pg_namespace.h" #include "catalog/pg_operator.h" #include "catalog/pg_opfamily.h" @@ -160,6 +161,7 @@ static void deparseDistinctExpr(DistinctExpr *node, deparse_expr_cxt *context); static void deparseScalarArrayOpExpr(ScalarArrayOpExpr *node, deparse_expr_cxt *context); static void deparseRelabelType(RelabelType *node, deparse_expr_cxt *context); +static void deparseArrayCoerceExpr(ArrayCoerceExpr *node, deparse_expr_cxt *context); static void deparseBoolExpr(BoolExpr *node, deparse_expr_cxt *context); static void deparseNullTest(NullTest *node, deparse_expr_cxt *context); static void deparseCaseExpr(CaseExpr *node, deparse_expr_cxt *context); @@ -455,6 +457,11 @@ foreign_expr_walker(Node *node, AuthIdRelationId, fpinfo)) return false; break; + case REGDATABASEOID: + if (!is_shippable(DatumGetObjectId(c->constvalue), + DatabaseRelationId, fpinfo)) + return false; + break; } } @@ -696,6 +703,34 @@ foreign_expr_walker(Node *node, state = FDW_COLLATE_UNSAFE; } break; + case T_ArrayCoerceExpr: + { + ArrayCoerceExpr *e = (ArrayCoerceExpr *) node; + + /* + * Recurse to input subexpression. + */ + if (!foreign_expr_walker((Node *) e->arg, + glob_cxt, &inner_cxt, case_arg_cxt)) + return false; + + /* + * T_ArrayCoerceExpr must not introduce a collation not + * derived from an input foreign Var (same logic as for a + * function). + */ + collation = e->resultcollid; + if (collation == InvalidOid) + state = FDW_COLLATE_NONE; + else if (inner_cxt.state == FDW_COLLATE_SAFE && + collation == inner_cxt.collation) + state = FDW_COLLATE_SAFE; + else if (collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; + else + state = FDW_COLLATE_UNSAFE; + } + break; case T_BoolExpr: { BoolExpr *b = (BoolExpr *) node; @@ -2913,6 +2948,9 @@ deparseExpr(Expr *node, deparse_expr_cxt *context) case T_RelabelType: deparseRelabelType((RelabelType *) node, context); break; + case T_ArrayCoerceExpr: + deparseArrayCoerceExpr((ArrayCoerceExpr *) node, context); + break; case T_BoolExpr: deparseBoolExpr((BoolExpr *) node, context); break; @@ -3501,6 +3539,24 @@ deparseRelabelType(RelabelType *node, deparse_expr_cxt *context) node->resulttypmod)); } +/* + * Deparse an ArrayCoerceExpr (array-type conversion) node. + */ +static void +deparseArrayCoerceExpr(ArrayCoerceExpr *node, deparse_expr_cxt *context) +{ + deparseExpr(node->arg, context); + + /* + * No difference how to deparse explicit cast, but if we omit implicit + * cast in the query, it'll be more user-friendly + */ + if (node->coerceformat != COERCE_IMPLICIT_CAST) + appendStringInfo(context->buf, "::%s", + deparse_type_name(node->resulttype, + node->resulttypmod)); +} + /* * Deparse a BoolExpr node. */ @@ -3969,17 +4025,17 @@ appendOrderByClause(List *pathkeys, bool has_final_sort, appendStringInfoString(buf, ", "); /* - * Lookup the operator corresponding to the strategy in the opclass. - * The datatype used by the opfamily is not necessarily the same as - * the expression type (for array types for example). + * Lookup the operator corresponding to the compare type in the + * opclass. The datatype used by the opfamily is not necessarily the + * same as the expression type (for array types for example). */ - oprid = get_opfamily_member(pathkey->pk_opfamily, - em->em_datatype, - em->em_datatype, - pathkey->pk_strategy); + oprid = get_opfamily_member_for_cmptype(pathkey->pk_opfamily, + em->em_datatype, + em->em_datatype, + pathkey->pk_cmptype); if (!OidIsValid(oprid)) elog(ERROR, "missing operator %d(%u,%u) in opfamily %u", - pathkey->pk_strategy, em->em_datatype, em->em_datatype, + pathkey->pk_cmptype, em->em_datatype, em->em_datatype, pathkey->pk_opfamily); deparseExpr(em_expr, context); diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index d1acee5a5fa51..d3323b04676ca 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -196,6 +196,17 @@ ALTER USER MAPPING FOR public SERVER testserver1 -- permitted to check validation. ALTER USER MAPPING FOR public SERVER testserver1 OPTIONS (ADD sslkey 'value', ADD sslcert 'value'); +-- OAuth options are not allowed in either context +ALTER SERVER testserver1 OPTIONS (ADD oauth_issuer 'https://example.com'); +ERROR: invalid option "oauth_issuer" +ALTER SERVER testserver1 OPTIONS (ADD oauth_client_id 'myID'); +ERROR: invalid option "oauth_client_id" +ALTER USER MAPPING FOR public SERVER testserver1 + OPTIONS (ADD oauth_issuer 'https://example.com'); +ERROR: invalid option "oauth_issuer" +ALTER USER MAPPING FOR public SERVER testserver1 + OPTIONS (ADD oauth_client_id 'myID'); +ERROR: invalid option "oauth_client_id" ALTER FOREIGN TABLE ft1 OPTIONS (schema_name 'S 1', table_name 'T 1'); ALTER FOREIGN TABLE ft2 OPTIONS (schema_name 'S 1', table_name 'T 1'); ALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1'); @@ -699,12 +710,12 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1; -- Op Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = (- "C 1"))) (3 rows) -EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------- +EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c3 IS NOT NULL) IS DISTINCT FROM (c3 IS NOT NULL); -- DistinctExpr + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 Output: c1, c2, c3, c4, c5, c6, c7, c8 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((("C 1" IS NOT NULL) IS DISTINCT FROM ("C 1" IS NOT NULL))) + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (((c3 IS NOT NULL) IS DISTINCT FROM (c3 IS NOT NULL))) (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr @@ -1169,6 +1180,27 @@ SELECT * FROM ft1 WHERE CASE c3 COLLATE "C" WHEN c6 THEN true ELSE c3 < 'bar' EN Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" (4 rows) +-- Test array type conversion pushdown +SET plan_cache_mode = force_generic_plan; +PREPARE s(varchar[]) AS SELECT count(*) FROM ft2 WHERE c6 = ANY ($1); +EXPLAIN (VERBOSE, COSTS OFF) +EXECUTE s(ARRAY['1','2']); + QUERY PLAN +--------------------------------------------------------------------------------------------- + Foreign Scan + Output: (count(*)) + Relations: Aggregate on (public.ft2) + Remote SQL: SELECT count(*) FROM "S 1"."T 1" WHERE ((c6 = ANY ($1::character varying[]))) +(4 rows) + +EXECUTE s(ARRAY['1','2']); + count +------- + 200 +(1 row) + +DEALLOCATE s; +RESET plan_cache_mode; -- a regconfig constant referring to this text search configuration -- is initially unshippable CREATE TEXT SEARCH CONFIGURATION public.custom_search @@ -2554,6 +2586,70 @@ SELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = f 96 | 6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6 | 6 | foo | 96 | 6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 (10 rows) +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM ft1, ft4, ft5, local_tbl WHERE ft1.c1 = ft4.c1 AND ft1.c1 = ft5.c1 + AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft5.c1 < 100 FOR UPDATE; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + LockRows + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft4.c1, ft4.c2, ft4.c3, ft5.c1, ft5.c2, ft5.c3, local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.*, ft4.*, ft5.*, local_tbl.ctid + -> Merge Join + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft4.c1, ft4.c2, ft4.c3, ft5.c1, ft5.c2, ft5.c3, local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.*, ft4.*, ft5.*, local_tbl.ctid + Merge Cond: (local_tbl.c1 = ft1.c2) + -> Index Scan using local_tbl_pkey on public.local_tbl + Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, local_tbl.ctid + -> Sort + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft4.c1, ft4.c2, ft4.c3, ft4.*, ft5.c1, ft5.c2, ft5.c3, ft5.* + Sort Key: ft1.c2 + -> Foreign Scan + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft4.c1, ft4.c2, ft4.c3, ft4.*, ft5.c1, ft5.c2, ft5.c3, ft5.* + Relations: ((public.ft1) INNER JOIN (public.ft4)) INNER JOIN (public.ft5) + Remote SQL: SELECT r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8, CASE WHEN (r1.*)::text IS NOT NULL THEN ROW(r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8) END, r2.c1, r2.c2, r2.c3, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2.c1, r2.c2, r2.c3) END, r3.c1, r3.c2, r3.c3, CASE WHEN (r3.*)::text IS NOT NULL THEN ROW(r3.c1, r3.c2, r3.c3) END FROM (("S 1"."T 1" r1 INNER JOIN "S 1"."T 3" r2 ON (((r1."C 1" = r2.c1)) AND ((r1."C 1" < 100)))) INNER JOIN "S 1"."T 4" r3 ON (((r1."C 1" = r3.c1)) AND ((r3.c1 < 100)))) FOR UPDATE OF r1 FOR UPDATE OF r2 FOR UPDATE OF r3 + -> Merge Join + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft4.c1, ft4.c2, ft4.c3, ft4.*, ft5.c1, ft5.c2, ft5.c3, ft5.* + Merge Cond: (ft1.c1 = ft5.c1) + -> Merge Join + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft4.c1, ft4.c2, ft4.c3, ft4.* + Merge Cond: (ft1.c1 = ft4.c1) + -> Sort + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* + Sort Key: ft1.c1 + -> Foreign Scan on public.ft1 + Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 100)) FOR UPDATE + -> Sort + Output: ft4.c1, ft4.c2, ft4.c3, ft4.* + Sort Key: ft4.c1 + -> Foreign Scan on public.ft4 + Output: ft4.c1, ft4.c2, ft4.c3, ft4.* + Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 3" FOR UPDATE + -> Sort + Output: ft5.c1, ft5.c2, ft5.c3, ft5.* + Sort Key: ft5.c1 + -> Foreign Scan on public.ft5 + Output: ft5.c1, ft5.c2, ft5.c3, ft5.* + Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 4" WHERE ((c1 < 100)) FOR UPDATE +(38 rows) + +SELECT * FROM ft1, ft4, ft5, local_tbl WHERE ft1.c1 = ft4.c1 AND ft1.c1 = ft5.c1 + AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft5.c1 < 100 FOR UPDATE; + c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c1 | c2 | c3 | c1 | c2 | c3 +----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+--------+----+----+--------+----+----+------ + 12 | 2 | 00012 | Tue Jan 13 00:00:00 1970 PST | Tue Jan 13 00:00:00 1970 | 2 | 2 | foo | 12 | 13 | AAA012 | 12 | 13 | AAA012 | 2 | 2 | 0002 + 42 | 2 | 00042 | Thu Feb 12 00:00:00 1970 PST | Thu Feb 12 00:00:00 1970 | 2 | 2 | foo | 42 | 43 | AAA042 | 42 | 43 | AAA042 | 2 | 2 | 0002 + 72 | 2 | 00072 | Sat Mar 14 00:00:00 1970 PST | Sat Mar 14 00:00:00 1970 | 2 | 2 | foo | 72 | 73 | AAA072 | 72 | 73 | | 2 | 2 | 0002 + 24 | 4 | 00024 | Sun Jan 25 00:00:00 1970 PST | Sun Jan 25 00:00:00 1970 | 4 | 4 | foo | 24 | 25 | AAA024 | 24 | 25 | AAA024 | 4 | 4 | 0004 + 54 | 4 | 00054 | Tue Feb 24 00:00:00 1970 PST | Tue Feb 24 00:00:00 1970 | 4 | 4 | foo | 54 | 55 | AAA054 | 54 | 55 | | 4 | 4 | 0004 + 84 | 4 | 00084 | Thu Mar 26 00:00:00 1970 PST | Thu Mar 26 00:00:00 1970 | 4 | 4 | foo | 84 | 85 | AAA084 | 84 | 85 | AAA084 | 4 | 4 | 0004 + 96 | 6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6 | 6 | foo | 96 | 97 | AAA096 | 96 | 97 | AAA096 | 6 | 6 | 0006 + 36 | 6 | 00036 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6 | 6 | foo | 36 | 37 | AAA036 | 36 | 37 | | 6 | 6 | 0006 + 66 | 6 | 00066 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6 | 6 | foo | 66 | 67 | AAA066 | 66 | 67 | AAA066 | 6 | 6 | 0006 + 6 | 6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 + 48 | 8 | 00048 | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8 | 8 | foo | 48 | 49 | AAA048 | 48 | 49 | AAA048 | 8 | 8 | 0008 + 18 | 8 | 00018 | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8 | 8 | foo | 18 | 19 | AAA018 | 18 | 19 | | 8 | 8 | 0008 + 78 | 8 | 00078 | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8 | 8 | foo | 78 | 79 | AAA078 | 78 | 79 | AAA078 | 8 | 8 | 0008 +(13 rows) + RESET enable_nestloop; RESET enable_hashjoin; -- test that add_paths_with_pathkeys_for_rel() arranges for the epq_path to @@ -8137,6 +8233,119 @@ DELETE FROM rem1; -- can't be pushed down (5 rows) DROP TRIGGER trig_row_after_delete ON rem1; +-- We are allowed to create transition-table triggers on both kinds of +-- inheritance even if they contain foreign tables as children, but currently +-- collecting transition tuples from such foreign tables is not supported. +CREATE TABLE local_tbl (a text, b int); +CREATE FOREIGN TABLE foreign_tbl (a text, b int) + SERVER loopback OPTIONS (table_name 'local_tbl'); +INSERT INTO foreign_tbl VALUES ('AAA', 42); +-- Test case for partition hierarchy +CREATE TABLE parent_tbl (a text, b int) PARTITION BY LIST (a); +ALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES IN ('AAA'); +CREATE TRIGGER parent_tbl_insert_trig + AFTER INSERT ON parent_tbl REFERENCING NEW TABLE AS new_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +CREATE TRIGGER parent_tbl_update_trig + AFTER UPDATE ON parent_tbl REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +CREATE TRIGGER parent_tbl_delete_trig + AFTER DELETE ON parent_tbl REFERENCING OLD TABLE AS old_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +INSERT INTO parent_tbl VALUES ('AAA', 42); +ERROR: cannot collect transition tuples from child foreign tables +COPY parent_tbl (a, b) FROM stdin; +ERROR: cannot collect transition tuples from child foreign tables +CONTEXT: COPY parent_tbl, line 1: "AAA 42" +ALTER SERVER loopback OPTIONS (ADD batch_size '10'); +INSERT INTO parent_tbl VALUES ('AAA', 42); +ERROR: cannot collect transition tuples from child foreign tables +COPY parent_tbl (a, b) FROM stdin; +ERROR: cannot collect transition tuples from child foreign tables +CONTEXT: COPY parent_tbl, line 1: "AAA 42" +ALTER SERVER loopback OPTIONS (DROP batch_size); +EXPLAIN (VERBOSE, COSTS OFF) +UPDATE parent_tbl SET b = b + 1; + QUERY PLAN +------------------------------------------------------------------------------------------------ + Update on public.parent_tbl + Foreign Update on public.foreign_tbl parent_tbl_1 + Remote SQL: UPDATE public.local_tbl SET b = $2 WHERE ctid = $1 + -> Foreign Scan on public.foreign_tbl parent_tbl_1 + Output: (parent_tbl_1.b + 1), parent_tbl_1.tableoid, parent_tbl_1.ctid, parent_tbl_1.* + Remote SQL: SELECT a, b, ctid FROM public.local_tbl FOR UPDATE +(6 rows) + +UPDATE parent_tbl SET b = b + 1; +ERROR: cannot collect transition tuples from child foreign tables +EXPLAIN (VERBOSE, COSTS OFF) +DELETE FROM parent_tbl; + QUERY PLAN +------------------------------------------------------------------ + Delete on public.parent_tbl + Foreign Delete on public.foreign_tbl parent_tbl_1 + Remote SQL: DELETE FROM public.local_tbl WHERE ctid = $1 + -> Foreign Scan on public.foreign_tbl parent_tbl_1 + Output: parent_tbl_1.tableoid, parent_tbl_1.ctid + Remote SQL: SELECT ctid FROM public.local_tbl FOR UPDATE +(6 rows) + +DELETE FROM parent_tbl; +ERROR: cannot collect transition tuples from child foreign tables +ALTER TABLE parent_tbl DETACH PARTITION foreign_tbl; +DROP TABLE parent_tbl; +-- Test case for non-partition hierarchy +CREATE TABLE parent_tbl (a text, b int); +ALTER FOREIGN TABLE foreign_tbl INHERIT parent_tbl; +CREATE TRIGGER parent_tbl_update_trig + AFTER UPDATE ON parent_tbl REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +CREATE TRIGGER parent_tbl_delete_trig + AFTER DELETE ON parent_tbl REFERENCING OLD TABLE AS old_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +EXPLAIN (VERBOSE, COSTS OFF) +UPDATE parent_tbl SET b = b + 1; + QUERY PLAN +------------------------------------------------------------------------------------------------------ + Update on public.parent_tbl + Update on public.parent_tbl parent_tbl_1 + Foreign Update on public.foreign_tbl parent_tbl_2 + Remote SQL: UPDATE public.local_tbl SET b = $2 WHERE ctid = $1 + -> Result + Output: (parent_tbl.b + 1), parent_tbl.tableoid, parent_tbl.ctid, (NULL::record) + -> Append + -> Seq Scan on public.parent_tbl parent_tbl_1 + Output: parent_tbl_1.b, parent_tbl_1.tableoid, parent_tbl_1.ctid, NULL::record + -> Foreign Scan on public.foreign_tbl parent_tbl_2 + Output: parent_tbl_2.b, parent_tbl_2.tableoid, parent_tbl_2.ctid, parent_tbl_2.* + Remote SQL: SELECT a, b, ctid FROM public.local_tbl FOR UPDATE +(12 rows) + +UPDATE parent_tbl SET b = b + 1; +ERROR: cannot collect transition tuples from child foreign tables +EXPLAIN (VERBOSE, COSTS OFF) +DELETE FROM parent_tbl; + QUERY PLAN +------------------------------------------------------------------------ + Delete on public.parent_tbl + Delete on public.parent_tbl parent_tbl_1 + Foreign Delete on public.foreign_tbl parent_tbl_2 + Remote SQL: DELETE FROM public.local_tbl WHERE ctid = $1 + -> Append + -> Seq Scan on public.parent_tbl parent_tbl_1 + Output: parent_tbl_1.tableoid, parent_tbl_1.ctid + -> Foreign Scan on public.foreign_tbl parent_tbl_2 + Output: parent_tbl_2.tableoid, parent_tbl_2.ctid + Remote SQL: SELECT ctid FROM public.local_tbl FOR UPDATE +(10 rows) + +DELETE FROM parent_tbl; +ERROR: cannot collect transition tuples from child foreign tables +ALTER FOREIGN TABLE foreign_tbl NO INHERIT parent_tbl; +DROP TABLE parent_tbl; +-- Cleanup +DROP FOREIGN TABLE foreign_tbl; +DROP TABLE local_tbl; -- =================================================================== -- test inheritance features -- =================================================================== @@ -12440,7 +12649,7 @@ ALTER SERVER loopback2 OPTIONS (DROP parallel_abort); -- =================================================================== CREATE TABLE analyze_table (id int, a text, b bigint); CREATE FOREIGN TABLE analyze_ftable (id int, a text, b bigint) - SERVER loopback OPTIONS (table_name 'analyze_rtable1'); + SERVER loopback OPTIONS (table_name 'analyze_table'); INSERT INTO analyze_table (SELECT x FROM generate_series(1,1000) x); ANALYZE analyze_table; SET default_statistics_target = 10; @@ -12448,15 +12657,15 @@ ANALYZE analyze_table; ALTER SERVER loopback OPTIONS (analyze_sampling 'invalid'); ERROR: invalid value for string option "analyze_sampling": invalid ALTER SERVER loopback OPTIONS (analyze_sampling 'auto'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'system'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'bernoulli'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'random'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'off'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; -- cleanup DROP FOREIGN TABLE analyze_ftable; DROP TABLE analyze_table; diff --git a/contrib/postgres_fdw/meson.build b/contrib/postgres_fdw/meson.build index 8b29be24deeb7..5c11bc6496fa8 100644 --- a/contrib/postgres_fdw/meson.build +++ b/contrib/postgres_fdw/meson.build @@ -39,7 +39,7 @@ tests += { 'postgres_fdw', 'query_cancel', ], - 'regress_args': ['--dlpath', meson.build_root() / 'src/test/regress'], + 'regress_args': ['--dlpath', meson.project_build_root() / 'src/test/regress'], }, 'tap': { 'tests': [ diff --git a/contrib/postgres_fdw/option.c b/contrib/postgres_fdw/option.c index d0766f007d2f9..04788b7e8b35f 100644 --- a/contrib/postgres_fdw/option.c +++ b/contrib/postgres_fdw/option.c @@ -21,6 +21,7 @@ #include "libpq/libpq-be.h" #include "postgres_fdw.h" #include "utils/guc.h" +#include "utils/memutils.h" #include "utils/varlena.h" /* @@ -39,12 +40,6 @@ typedef struct PgFdwOption */ static PgFdwOption *postgres_fdw_options; -/* - * Valid options for libpq. - * Allocated and filled in InitPgFdwOptions. - */ -static PQconninfoOption *libpq_options; - /* * GUC parameters */ @@ -239,6 +234,7 @@ static void InitPgFdwOptions(void) { int num_libpq_opts; + PQconninfoOption *libpq_options; PQconninfoOption *lopt; PgFdwOption *popt; @@ -307,8 +303,8 @@ InitPgFdwOptions(void) * Get list of valid libpq options. * * To avoid unnecessary work, we get the list once and use it throughout - * the lifetime of this backend process. We don't need to care about - * memory context issues, because PQconndefaults allocates with malloc. + * the lifetime of this backend process. Hence, we'll allocate it in + * TopMemoryContext. */ libpq_options = PQconndefaults(); if (!libpq_options) /* assume reason for failure is OOM */ @@ -325,19 +321,11 @@ InitPgFdwOptions(void) /* * Construct an array which consists of all valid options for * postgres_fdw, by appending FDW-specific options to libpq options. - * - * We use plain malloc here to allocate postgres_fdw_options because it - * lives as long as the backend process does. Besides, keeping - * libpq_options in memory allows us to avoid copying every keyword - * string. */ postgres_fdw_options = (PgFdwOption *) - malloc(sizeof(PgFdwOption) * num_libpq_opts + - sizeof(non_libpq_options)); - if (postgres_fdw_options == NULL) - ereport(ERROR, - (errcode(ERRCODE_FDW_OUT_OF_MEMORY), - errmsg("out of memory"))); + MemoryContextAlloc(TopMemoryContext, + sizeof(PgFdwOption) * num_libpq_opts + + sizeof(non_libpq_options)); popt = postgres_fdw_options; for (lopt = libpq_options; lopt->keyword; lopt++) @@ -348,8 +336,15 @@ InitPgFdwOptions(void) strcmp(lopt->keyword, "client_encoding") == 0) continue; - /* We don't have to copy keyword string, as described above. */ - popt->keyword = lopt->keyword; + /* + * Disallow OAuth options for now, since the builtin flow communicates + * on stderr by default and can't cache tokens yet. + */ + if (strncmp(lopt->keyword, "oauth_", strlen("oauth_")) == 0) + continue; + + popt->keyword = MemoryContextStrdup(TopMemoryContext, + lopt->keyword); /* * "user" and any secret options are allowed only on user mappings. @@ -364,6 +359,9 @@ InitPgFdwOptions(void) popt++; } + /* Done with libpq's output structure. */ + PQconninfoFree(libpq_options); + /* Append FDW-specific options and dummy terminator. */ memcpy(popt, non_libpq_options, sizeof(non_libpq_options)); } @@ -524,7 +522,7 @@ process_pgfdw_appname(const char *appname) appendStringInfoString(&buf, application_name); break; case 'c': - appendStringInfo(&buf, INT64_HEX_FORMAT ".%x", MyStartTime, MyProcPid); + appendStringInfo(&buf, "%" PRIx64 ".%x", MyStartTime, MyProcPid); break; case 'C': appendStringInfoString(&buf, cluster_name); diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index ac14c06c71518..456b267f70b5b 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -444,7 +444,7 @@ static void adjust_foreign_grouping_path_cost(PlannerInfo *root, double retrieved_rows, double width, double limit_tuples, - int *disabled_nodes, + int *p_disabled_nodes, Cost *p_startup_cost, Cost *p_run_cost); static bool ec_member_matches_foreign(PlannerInfo *root, RelOptInfo *rel, @@ -999,7 +999,7 @@ get_useful_pathkeys_for_relation(PlannerInfo *root, RelOptInfo *rel) /* Looks like we can generate a pathkey, so let's do it. */ pathkey = make_canonical_pathkey(root, cur_ec, linitial_oid(cur_ec->ec_opfamilies), - BTLessStrategyNumber, + COMPARE_LT, false); useful_pathkeys_list = lappend(useful_pathkeys_list, list_make1(pathkey)); @@ -1702,13 +1702,9 @@ postgresReScanForeignScan(ForeignScanState *node) return; } - /* - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. - */ res = pgfdw_exec_query(fsstate->conn, sql, fsstate->conn_state); if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, fsstate->conn, true, sql); + pgfdw_report_error(res, fsstate->conn, sql); PQclear(res); /* Now force a fresh FETCH. */ @@ -3489,6 +3485,13 @@ estimate_path_cost_size(PlannerInfo *root, { Assert(foreignrel->reloptkind == RELOPT_UPPER_REL && fpinfo->stage == UPPERREL_GROUP_AGG); + + /* + * We can only get here when this function is called from + * add_foreign_ordered_paths() or add_foreign_final_paths(); + * in which cases, the passed-in fpextra should not be NULL. + */ + Assert(fpextra); adjust_foreign_grouping_path_cost(root, pathkeys, retrieved_rows, width, fpextra->limit_tuples, @@ -3601,41 +3604,32 @@ get_remote_estimate(const char *sql, PGconn *conn, double *rows, int *width, Cost *startup_cost, Cost *total_cost) { - PGresult *volatile res = NULL; - - /* PGresult must be released before leaving this function. */ - PG_TRY(); - { - char *line; - char *p; - int n; + PGresult *res; + char *line; + char *p; + int n; - /* - * Execute EXPLAIN remotely. - */ - res = pgfdw_exec_query(conn, sql, NULL); - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, sql); + /* + * Execute EXPLAIN remotely. + */ + res = pgfdw_exec_query(conn, sql, NULL); + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, sql); - /* - * Extract cost numbers for topmost plan node. Note we search for a - * left paren from the end of the line to avoid being confused by - * other uses of parentheses. - */ - line = PQgetvalue(res, 0, 0); - p = strrchr(line, '('); - if (p == NULL) - elog(ERROR, "could not interpret EXPLAIN output: \"%s\"", line); - n = sscanf(p, "(cost=%lf..%lf rows=%lf width=%d)", - startup_cost, total_cost, rows, width); - if (n != 4) - elog(ERROR, "could not interpret EXPLAIN output: \"%s\"", line); - } - PG_FINALLY(); - { - PQclear(res); - } - PG_END_TRY(); + /* + * Extract cost numbers for topmost plan node. Note we search for a left + * paren from the end of the line to avoid being confused by other uses of + * parentheses. + */ + line = PQgetvalue(res, 0, 0); + p = strrchr(line, '('); + if (p == NULL) + elog(ERROR, "could not interpret EXPLAIN output: \"%s\"", line); + n = sscanf(p, "(cost=%lf..%lf rows=%lf width=%d)", + startup_cost, total_cost, rows, width); + if (n != 4) + elog(ERROR, "could not interpret EXPLAIN output: \"%s\"", line); + PQclear(res); } /* @@ -3775,17 +3769,14 @@ create_cursor(ForeignScanState *node) */ if (!PQsendQueryParams(conn, buf.data, numParams, NULL, values, NULL, NULL, 0)) - pgfdw_report_error(ERROR, NULL, conn, false, buf.data); + pgfdw_report_error(NULL, conn, buf.data); /* * Get the result, and check for success. - * - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. */ res = pgfdw_get_result(conn); if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, conn, true, fsstate->query); + pgfdw_report_error(res, conn, fsstate->query); PQclear(res); /* Mark the cursor as created, and show no tuples have been retrieved */ @@ -3807,7 +3798,10 @@ static void fetch_more_data(ForeignScanState *node) { PgFdwScanState *fsstate = (PgFdwScanState *) node->fdw_state; - PGresult *volatile res = NULL; + PGconn *conn = fsstate->conn; + PGresult *res; + int numrows; + int i; MemoryContext oldcontext; /* @@ -3818,74 +3812,63 @@ fetch_more_data(ForeignScanState *node) MemoryContextReset(fsstate->batch_cxt); oldcontext = MemoryContextSwitchTo(fsstate->batch_cxt); - /* PGresult must be released before leaving this function. */ - PG_TRY(); + if (fsstate->async_capable) { - PGconn *conn = fsstate->conn; - int numrows; - int i; + Assert(fsstate->conn_state->pendingAreq); - if (fsstate->async_capable) - { - Assert(fsstate->conn_state->pendingAreq); + /* + * The query was already sent by an earlier call to + * fetch_more_data_begin. So now we just fetch the result. + */ + res = pgfdw_get_result(conn); + /* On error, report the original query, not the FETCH. */ + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, fsstate->query); - /* - * The query was already sent by an earlier call to - * fetch_more_data_begin. So now we just fetch the result. - */ - res = pgfdw_get_result(conn); - /* On error, report the original query, not the FETCH. */ - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, fsstate->query); + /* Reset per-connection state */ + fsstate->conn_state->pendingAreq = NULL; + } + else + { + char sql[64]; - /* Reset per-connection state */ - fsstate->conn_state->pendingAreq = NULL; - } - else - { - char sql[64]; + /* This is a regular synchronous fetch. */ + snprintf(sql, sizeof(sql), "FETCH %d FROM c%u", + fsstate->fetch_size, fsstate->cursor_number); - /* This is a regular synchronous fetch. */ - snprintf(sql, sizeof(sql), "FETCH %d FROM c%u", - fsstate->fetch_size, fsstate->cursor_number); + res = pgfdw_exec_query(conn, sql, fsstate->conn_state); + /* On error, report the original query, not the FETCH. */ + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, fsstate->query); + } - res = pgfdw_exec_query(conn, sql, fsstate->conn_state); - /* On error, report the original query, not the FETCH. */ - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, fsstate->query); - } + /* Convert the data into HeapTuples */ + numrows = PQntuples(res); + fsstate->tuples = (HeapTuple *) palloc0(numrows * sizeof(HeapTuple)); + fsstate->num_tuples = numrows; + fsstate->next_tuple = 0; - /* Convert the data into HeapTuples */ - numrows = PQntuples(res); - fsstate->tuples = (HeapTuple *) palloc0(numrows * sizeof(HeapTuple)); - fsstate->num_tuples = numrows; - fsstate->next_tuple = 0; + for (i = 0; i < numrows; i++) + { + Assert(IsA(node->ss.ps.plan, ForeignScan)); - for (i = 0; i < numrows; i++) - { - Assert(IsA(node->ss.ps.plan, ForeignScan)); - - fsstate->tuples[i] = - make_tuple_from_result_row(res, i, - fsstate->rel, - fsstate->attinmeta, - fsstate->retrieved_attrs, - node, - fsstate->temp_cxt); - } + fsstate->tuples[i] = + make_tuple_from_result_row(res, i, + fsstate->rel, + fsstate->attinmeta, + fsstate->retrieved_attrs, + node, + fsstate->temp_cxt); + } - /* Update fetch_ct_2 */ - if (fsstate->fetch_ct_2 < 2) - fsstate->fetch_ct_2++; + /* Update fetch_ct_2 */ + if (fsstate->fetch_ct_2 < 2) + fsstate->fetch_ct_2++; - /* Must be EOF if we didn't get as many tuples as we asked for. */ - fsstate->eof_reached = (numrows < fsstate->fetch_size); - } - PG_FINALLY(); - { - PQclear(res); - } - PG_END_TRY(); + /* Must be EOF if we didn't get as many tuples as we asked for. */ + fsstate->eof_reached = (numrows < fsstate->fetch_size); + + PQclear(res); MemoryContextSwitchTo(oldcontext); } @@ -3959,14 +3942,9 @@ close_cursor(PGconn *conn, unsigned int cursor_number, PGresult *res; snprintf(sql, sizeof(sql), "CLOSE c%u", cursor_number); - - /* - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. - */ res = pgfdw_exec_query(conn, sql, conn_state); if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, conn, true, sql); + pgfdw_report_error(res, conn, sql); PQclear(res); } @@ -4174,18 +4152,15 @@ execute_foreign_modify(EState *estate, NULL, NULL, 0)) - pgfdw_report_error(ERROR, NULL, fmstate->conn, false, fmstate->query); + pgfdw_report_error(NULL, fmstate->conn, fmstate->query); /* * Get the result, and check for success. - * - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. */ res = pgfdw_get_result(fmstate->conn); if (PQresultStatus(res) != (fmstate->has_returning ? PGRES_TUPLES_OK : PGRES_COMMAND_OK)) - pgfdw_report_error(ERROR, res, fmstate->conn, true, fmstate->query); + pgfdw_report_error(res, fmstate->conn, fmstate->query); /* Check number of rows affected, and fetch RETURNING tuple if any */ if (fmstate->has_returning) @@ -4244,17 +4219,14 @@ prepare_foreign_modify(PgFdwModifyState *fmstate) fmstate->query, 0, NULL)) - pgfdw_report_error(ERROR, NULL, fmstate->conn, false, fmstate->query); + pgfdw_report_error(NULL, fmstate->conn, fmstate->query); /* * Get the result, and check for success. - * - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. */ res = pgfdw_get_result(fmstate->conn); if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, fmstate->conn, true, fmstate->query); + pgfdw_report_error(res, fmstate->conn, fmstate->query); PQclear(res); /* This action shows that the prepare has been done. */ @@ -4345,37 +4317,25 @@ convert_prep_stmt_params(PgFdwModifyState *fmstate, /* * store_returning_result * Store the result of a RETURNING clause - * - * On error, be sure to release the PGresult on the way out. Callers do not - * have PG_TRY blocks to ensure this happens. */ static void store_returning_result(PgFdwModifyState *fmstate, TupleTableSlot *slot, PGresult *res) { - PG_TRY(); - { - HeapTuple newtup; + HeapTuple newtup; - newtup = make_tuple_from_result_row(res, 0, - fmstate->rel, - fmstate->attinmeta, - fmstate->retrieved_attrs, - NULL, - fmstate->temp_cxt); + newtup = make_tuple_from_result_row(res, 0, + fmstate->rel, + fmstate->attinmeta, + fmstate->retrieved_attrs, + NULL, + fmstate->temp_cxt); - /* - * The returning slot will not necessarily be suitable to store - * heaptuples directly, so allow for conversion. - */ - ExecForceStoreHeapTuple(newtup, slot, true); - } - PG_CATCH(); - { - PQclear(res); - PG_RE_THROW(); - } - PG_END_TRY(); + /* + * The returning slot will not necessarily be suitable to store heaptuples + * directly, so allow for conversion. + */ + ExecForceStoreHeapTuple(newtup, slot, true); } /* @@ -4411,14 +4371,9 @@ deallocate_query(PgFdwModifyState *fmstate) return; snprintf(sql, sizeof(sql), "DEALLOCATE %s", fmstate->p_name); - - /* - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. - */ res = pgfdw_exec_query(fmstate->conn, sql, fmstate->conn_state); if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, fmstate->conn, true, sql); + pgfdw_report_error(res, fmstate->conn, sql); PQclear(res); pfree(fmstate->p_name); fmstate->p_name = NULL; @@ -4586,20 +4541,24 @@ execute_dml_stmt(ForeignScanState *node) */ if (!PQsendQueryParams(dmstate->conn, dmstate->query, numParams, NULL, values, NULL, NULL, 0)) - pgfdw_report_error(ERROR, NULL, dmstate->conn, false, dmstate->query); + pgfdw_report_error(NULL, dmstate->conn, dmstate->query); /* * Get the result, and check for success. - * - * We don't use a PG_TRY block here, so be careful not to throw error - * without releasing the PGresult. */ dmstate->result = pgfdw_get_result(dmstate->conn); if (PQresultStatus(dmstate->result) != (dmstate->has_returning ? PGRES_TUPLES_OK : PGRES_COMMAND_OK)) - pgfdw_report_error(ERROR, dmstate->result, dmstate->conn, true, + pgfdw_report_error(dmstate->result, dmstate->conn, dmstate->query); + /* + * The result potentially needs to survive across multiple executor row + * cycles, so move it to the context where the dmstate is. + */ + dmstate->result = libpqsrv_PGresultSetParent(dmstate->result, + GetMemoryChunkContext(dmstate)); + /* Get the number of rows affected. */ if (dmstate->has_returning) dmstate->num_tuples = PQntuples(dmstate->result); @@ -4641,30 +4600,16 @@ get_returning_data(ForeignScanState *node) } else { - /* - * On error, be sure to release the PGresult on the way out. Callers - * do not have PG_TRY blocks to ensure this happens. - */ - PG_TRY(); - { - HeapTuple newtup; - - newtup = make_tuple_from_result_row(dmstate->result, - dmstate->next_tuple, - dmstate->rel, - dmstate->attinmeta, - dmstate->retrieved_attrs, - node, - dmstate->temp_cxt); - ExecStoreHeapTuple(newtup, slot, false); - } - PG_CATCH(); - { - PQclear(dmstate->result); - PG_RE_THROW(); - } - PG_END_TRY(); + HeapTuple newtup; + newtup = make_tuple_from_result_row(dmstate->result, + dmstate->next_tuple, + dmstate->rel, + dmstate->attinmeta, + dmstate->retrieved_attrs, + node, + dmstate->temp_cxt); + ExecStoreHeapTuple(newtup, slot, false); /* Get the updated/deleted tuple. */ if (dmstate->rel) resultSlot = slot; @@ -4950,7 +4895,7 @@ postgresAnalyzeForeignTable(Relation relation, UserMapping *user; PGconn *conn; StringInfoData sql; - PGresult *volatile res = NULL; + PGresult *res; /* Return the row-analysis function pointer */ *func = postgresAcquireSampleRowsFunc; @@ -4976,22 +4921,14 @@ postgresAnalyzeForeignTable(Relation relation, initStringInfo(&sql); deparseAnalyzeSizeSql(&sql, relation); - /* In what follows, do not risk leaking any PGresults. */ - PG_TRY(); - { - res = pgfdw_exec_query(conn, sql.data, NULL); - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, sql.data); + res = pgfdw_exec_query(conn, sql.data, NULL); + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, sql.data); - if (PQntuples(res) != 1 || PQnfields(res) != 1) - elog(ERROR, "unexpected result from deparseAnalyzeSizeSql query"); - *totalpages = strtoul(PQgetvalue(res, 0, 0), NULL, 10); - } - PG_FINALLY(); - { - PQclear(res); - } - PG_END_TRY(); + if (PQntuples(res) != 1 || PQnfields(res) != 1) + elog(ERROR, "unexpected result from deparseAnalyzeSizeSql query"); + *totalpages = strtoul(PQgetvalue(res, 0, 0), NULL, 10); + PQclear(res); ReleaseConnection(conn); @@ -5012,9 +4949,9 @@ postgresGetAnalyzeInfoForForeignTable(Relation relation, bool *can_tablesample) UserMapping *user; PGconn *conn; StringInfoData sql; - PGresult *volatile res = NULL; - volatile double reltuples = -1; - volatile char relkind = 0; + PGresult *res; + double reltuples; + char relkind; /* assume the remote relation does not support TABLESAMPLE */ *can_tablesample = false; @@ -5033,24 +4970,15 @@ postgresGetAnalyzeInfoForForeignTable(Relation relation, bool *can_tablesample) initStringInfo(&sql); deparseAnalyzeInfoSql(&sql, relation); - /* In what follows, do not risk leaking any PGresults. */ - PG_TRY(); - { - res = pgfdw_exec_query(conn, sql.data, NULL); - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, sql.data); + res = pgfdw_exec_query(conn, sql.data, NULL); + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, sql.data); - if (PQntuples(res) != 1 || PQnfields(res) != 2) - elog(ERROR, "unexpected result from deparseAnalyzeInfoSql query"); - reltuples = strtod(PQgetvalue(res, 0, 0), NULL); - relkind = *(PQgetvalue(res, 0, 1)); - } - PG_FINALLY(); - { - if (res) - PQclear(res); - } - PG_END_TRY(); + if (PQntuples(res) != 1 || PQnfields(res) != 2) + elog(ERROR, "unexpected result from deparseAnalyzeInfoSql query"); + reltuples = strtod(PQgetvalue(res, 0, 0), NULL); + relkind = *(PQgetvalue(res, 0, 1)); + PQclear(res); ReleaseConnection(conn); @@ -5090,10 +5018,12 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel, int server_version_num; PgFdwSamplingMethod method = ANALYZE_SAMPLE_AUTO; /* auto is default */ double sample_frac = -1.0; - double reltuples; + double reltuples = -1.0; unsigned int cursor_number; StringInfoData sql; - PGresult *volatile res = NULL; + PGresult *res; + char fetch_sql[64]; + int fetch_size; ListCell *lc; /* Initialize workspace state */ @@ -5270,91 +5200,76 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel, deparseAnalyzeSql(&sql, relation, method, sample_frac, &astate.retrieved_attrs); - /* In what follows, do not risk leaking any PGresults. */ - PG_TRY(); - { - char fetch_sql[64]; - int fetch_size; - - res = pgfdw_exec_query(conn, sql.data, NULL); - if (PQresultStatus(res) != PGRES_COMMAND_OK) - pgfdw_report_error(ERROR, res, conn, false, sql.data); - PQclear(res); - res = NULL; + res = pgfdw_exec_query(conn, sql.data, NULL); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + pgfdw_report_error(res, conn, sql.data); + PQclear(res); - /* - * Determine the fetch size. The default is arbitrary, but shouldn't - * be enormous. - */ - fetch_size = 100; - foreach(lc, server->options) - { - DefElem *def = (DefElem *) lfirst(lc); + /* + * Determine the fetch size. The default is arbitrary, but shouldn't be + * enormous. + */ + fetch_size = 100; + foreach(lc, server->options) + { + DefElem *def = (DefElem *) lfirst(lc); - if (strcmp(def->defname, "fetch_size") == 0) - { - (void) parse_int(defGetString(def), &fetch_size, 0, NULL); - break; - } - } - foreach(lc, table->options) + if (strcmp(def->defname, "fetch_size") == 0) { - DefElem *def = (DefElem *) lfirst(lc); - - if (strcmp(def->defname, "fetch_size") == 0) - { - (void) parse_int(defGetString(def), &fetch_size, 0, NULL); - break; - } + (void) parse_int(defGetString(def), &fetch_size, 0, NULL); + break; } + } + foreach(lc, table->options) + { + DefElem *def = (DefElem *) lfirst(lc); - /* Construct command to fetch rows from remote. */ - snprintf(fetch_sql, sizeof(fetch_sql), "FETCH %d FROM c%u", - fetch_size, cursor_number); - - /* Retrieve and process rows a batch at a time. */ - for (;;) + if (strcmp(def->defname, "fetch_size") == 0) { - int numrows; - int i; + (void) parse_int(defGetString(def), &fetch_size, 0, NULL); + break; + } + } - /* Allow users to cancel long query */ - CHECK_FOR_INTERRUPTS(); + /* Construct command to fetch rows from remote. */ + snprintf(fetch_sql, sizeof(fetch_sql), "FETCH %d FROM c%u", + fetch_size, cursor_number); - /* - * XXX possible future improvement: if rowstoskip is large, we - * could issue a MOVE rather than physically fetching the rows, - * then just adjust rowstoskip and samplerows appropriately. - */ + /* Retrieve and process rows a batch at a time. */ + for (;;) + { + int numrows; + int i; - /* Fetch some rows */ - res = pgfdw_exec_query(conn, fetch_sql, NULL); - /* On error, report the original query, not the FETCH. */ - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, sql.data); + /* Allow users to cancel long query */ + CHECK_FOR_INTERRUPTS(); - /* Process whatever we got. */ - numrows = PQntuples(res); - for (i = 0; i < numrows; i++) - analyze_row_processor(res, i, &astate); + /* + * XXX possible future improvement: if rowstoskip is large, we could + * issue a MOVE rather than physically fetching the rows, then just + * adjust rowstoskip and samplerows appropriately. + */ - PQclear(res); - res = NULL; + /* Fetch some rows */ + res = pgfdw_exec_query(conn, fetch_sql, NULL); + /* On error, report the original query, not the FETCH. */ + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, sql.data); - /* Must be EOF if we didn't get all the rows requested. */ - if (numrows < fetch_size) - break; - } + /* Process whatever we got. */ + numrows = PQntuples(res); + for (i = 0; i < numrows; i++) + analyze_row_processor(res, i, &astate); - /* Close the cursor, just to be tidy. */ - close_cursor(conn, cursor_number, NULL); - } - PG_CATCH(); - { PQclear(res); - PG_RE_THROW(); + + /* Must be EOF if we didn't get all the rows requested. */ + if (numrows < fetch_size) + break; } - PG_END_TRY(); + + /* Close the cursor, just to be tidy. */ + close_cursor(conn, cursor_number, NULL); ReleaseConnection(conn); @@ -5466,7 +5381,7 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid) UserMapping *mapping; PGconn *conn; StringInfoData buf; - PGresult *volatile res = NULL; + PGresult *res; int numrows, i; ListCell *lc; @@ -5505,243 +5420,231 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid) /* Create workspace for strings */ initStringInfo(&buf); - /* In what follows, do not risk leaking any PGresults. */ - PG_TRY(); - { - /* Check that the schema really exists */ - appendStringInfoString(&buf, "SELECT 1 FROM pg_catalog.pg_namespace WHERE nspname = "); - deparseStringLiteral(&buf, stmt->remote_schema); + /* Check that the schema really exists */ + appendStringInfoString(&buf, "SELECT 1 FROM pg_catalog.pg_namespace WHERE nspname = "); + deparseStringLiteral(&buf, stmt->remote_schema); - res = pgfdw_exec_query(conn, buf.data, NULL); - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, buf.data); + res = pgfdw_exec_query(conn, buf.data, NULL); + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, buf.data); - if (PQntuples(res) != 1) - ereport(ERROR, - (errcode(ERRCODE_FDW_SCHEMA_NOT_FOUND), - errmsg("schema \"%s\" is not present on foreign server \"%s\"", - stmt->remote_schema, server->servername))); + if (PQntuples(res) != 1) + ereport(ERROR, + (errcode(ERRCODE_FDW_SCHEMA_NOT_FOUND), + errmsg("schema \"%s\" is not present on foreign server \"%s\"", + stmt->remote_schema, server->servername))); - PQclear(res); - res = NULL; - resetStringInfo(&buf); + PQclear(res); + resetStringInfo(&buf); - /* - * Fetch all table data from this schema, possibly restricted by - * EXCEPT or LIMIT TO. (We don't actually need to pay any attention - * to EXCEPT/LIMIT TO here, because the core code will filter the - * statements we return according to those lists anyway. But it - * should save a few cycles to not process excluded tables in the - * first place.) - * - * Import table data for partitions only when they are explicitly - * specified in LIMIT TO clause. Otherwise ignore them and only - * include the definitions of the root partitioned tables to allow - * access to the complete remote data set locally in the schema - * imported. - * - * Note: because we run the connection with search_path restricted to - * pg_catalog, the format_type() and pg_get_expr() outputs will always - * include a schema name for types/functions in other schemas, which - * is what we want. - */ + /* + * Fetch all table data from this schema, possibly restricted by EXCEPT or + * LIMIT TO. (We don't actually need to pay any attention to EXCEPT/LIMIT + * TO here, because the core code will filter the statements we return + * according to those lists anyway. But it should save a few cycles to + * not process excluded tables in the first place.) + * + * Import table data for partitions only when they are explicitly + * specified in LIMIT TO clause. Otherwise ignore them and only include + * the definitions of the root partitioned tables to allow access to the + * complete remote data set locally in the schema imported. + * + * Note: because we run the connection with search_path restricted to + * pg_catalog, the format_type() and pg_get_expr() outputs will always + * include a schema name for types/functions in other schemas, which is + * what we want. + */ + appendStringInfoString(&buf, + "SELECT relname, " + " attname, " + " format_type(atttypid, atttypmod), " + " attnotnull, " + " pg_get_expr(adbin, adrelid), "); + + /* Generated columns are supported since Postgres 12 */ + if (PQserverVersion(conn) >= 120000) appendStringInfoString(&buf, - "SELECT relname, " - " attname, " - " format_type(atttypid, atttypmod), " - " attnotnull, " - " pg_get_expr(adbin, adrelid), "); - - /* Generated columns are supported since Postgres 12 */ - if (PQserverVersion(conn) >= 120000) - appendStringInfoString(&buf, - " attgenerated, "); - else - appendStringInfoString(&buf, - " NULL, "); - - if (import_collate) - appendStringInfoString(&buf, - " collname, " - " collnsp.nspname "); - else - appendStringInfoString(&buf, - " NULL, NULL "); - + " attgenerated, "); + else appendStringInfoString(&buf, - "FROM pg_class c " - " JOIN pg_namespace n ON " - " relnamespace = n.oid " - " LEFT JOIN pg_attribute a ON " - " attrelid = c.oid AND attnum > 0 " - " AND NOT attisdropped " - " LEFT JOIN pg_attrdef ad ON " - " adrelid = c.oid AND adnum = attnum "); - - if (import_collate) - appendStringInfoString(&buf, - " LEFT JOIN pg_collation coll ON " - " coll.oid = attcollation " - " LEFT JOIN pg_namespace collnsp ON " - " collnsp.oid = collnamespace "); + " NULL, "); + if (import_collate) appendStringInfoString(&buf, - "WHERE c.relkind IN (" - CppAsString2(RELKIND_RELATION) "," - CppAsString2(RELKIND_VIEW) "," - CppAsString2(RELKIND_FOREIGN_TABLE) "," - CppAsString2(RELKIND_MATVIEW) "," - CppAsString2(RELKIND_PARTITIONED_TABLE) ") " - " AND n.nspname = "); - deparseStringLiteral(&buf, stmt->remote_schema); - - /* Partitions are supported since Postgres 10 */ - if (PQserverVersion(conn) >= 100000 && - stmt->list_type != FDW_IMPORT_SCHEMA_LIMIT_TO) - appendStringInfoString(&buf, " AND NOT c.relispartition "); - - /* Apply restrictions for LIMIT TO and EXCEPT */ - if (stmt->list_type == FDW_IMPORT_SCHEMA_LIMIT_TO || - stmt->list_type == FDW_IMPORT_SCHEMA_EXCEPT) + " collname, " + " collnsp.nspname "); + else + appendStringInfoString(&buf, + " NULL, NULL "); + + appendStringInfoString(&buf, + "FROM pg_class c " + " JOIN pg_namespace n ON " + " relnamespace = n.oid " + " LEFT JOIN pg_attribute a ON " + " attrelid = c.oid AND attnum > 0 " + " AND NOT attisdropped " + " LEFT JOIN pg_attrdef ad ON " + " adrelid = c.oid AND adnum = attnum "); + + if (import_collate) + appendStringInfoString(&buf, + " LEFT JOIN pg_collation coll ON " + " coll.oid = attcollation " + " LEFT JOIN pg_namespace collnsp ON " + " collnsp.oid = collnamespace "); + + appendStringInfoString(&buf, + "WHERE c.relkind IN (" + CppAsString2(RELKIND_RELATION) "," + CppAsString2(RELKIND_VIEW) "," + CppAsString2(RELKIND_FOREIGN_TABLE) "," + CppAsString2(RELKIND_MATVIEW) "," + CppAsString2(RELKIND_PARTITIONED_TABLE) ") " + " AND n.nspname = "); + deparseStringLiteral(&buf, stmt->remote_schema); + + /* Partitions are supported since Postgres 10 */ + if (PQserverVersion(conn) >= 100000 && + stmt->list_type != FDW_IMPORT_SCHEMA_LIMIT_TO) + appendStringInfoString(&buf, " AND NOT c.relispartition "); + + /* Apply restrictions for LIMIT TO and EXCEPT */ + if (stmt->list_type == FDW_IMPORT_SCHEMA_LIMIT_TO || + stmt->list_type == FDW_IMPORT_SCHEMA_EXCEPT) + { + bool first_item = true; + + appendStringInfoString(&buf, " AND c.relname "); + if (stmt->list_type == FDW_IMPORT_SCHEMA_EXCEPT) + appendStringInfoString(&buf, "NOT "); + appendStringInfoString(&buf, "IN ("); + + /* Append list of table names within IN clause */ + foreach(lc, stmt->table_list) { - bool first_item = true; + RangeVar *rv = (RangeVar *) lfirst(lc); - appendStringInfoString(&buf, " AND c.relname "); - if (stmt->list_type == FDW_IMPORT_SCHEMA_EXCEPT) - appendStringInfoString(&buf, "NOT "); - appendStringInfoString(&buf, "IN ("); + if (first_item) + first_item = false; + else + appendStringInfoString(&buf, ", "); + deparseStringLiteral(&buf, rv->relname); + } + appendStringInfoChar(&buf, ')'); + } - /* Append list of table names within IN clause */ - foreach(lc, stmt->table_list) - { - RangeVar *rv = (RangeVar *) lfirst(lc); + /* Append ORDER BY at the end of query to ensure output ordering */ + appendStringInfoString(&buf, " ORDER BY c.relname, a.attnum"); - if (first_item) - first_item = false; - else - appendStringInfoString(&buf, ", "); - deparseStringLiteral(&buf, rv->relname); - } - appendStringInfoChar(&buf, ')'); - } + /* Fetch the data */ + res = pgfdw_exec_query(conn, buf.data, NULL); + if (PQresultStatus(res) != PGRES_TUPLES_OK) + pgfdw_report_error(res, conn, buf.data); - /* Append ORDER BY at the end of query to ensure output ordering */ - appendStringInfoString(&buf, " ORDER BY c.relname, a.attnum"); + /* Process results */ + numrows = PQntuples(res); + /* note: incrementation of i happens in inner loop's while() test */ + for (i = 0; i < numrows;) + { + char *tablename = PQgetvalue(res, i, 0); + bool first_item = true; - /* Fetch the data */ - res = pgfdw_exec_query(conn, buf.data, NULL); - if (PQresultStatus(res) != PGRES_TUPLES_OK) - pgfdw_report_error(ERROR, res, conn, false, buf.data); + resetStringInfo(&buf); + appendStringInfo(&buf, "CREATE FOREIGN TABLE %s (\n", + quote_identifier(tablename)); - /* Process results */ - numrows = PQntuples(res); - /* note: incrementation of i happens in inner loop's while() test */ - for (i = 0; i < numrows;) + /* Scan all rows for this table */ + do { - char *tablename = PQgetvalue(res, i, 0); - bool first_item = true; + char *attname; + char *typename; + char *attnotnull; + char *attgenerated; + char *attdefault; + char *collname; + char *collnamespace; + + /* If table has no columns, we'll see nulls here */ + if (PQgetisnull(res, i, 1)) + continue; - resetStringInfo(&buf); - appendStringInfo(&buf, "CREATE FOREIGN TABLE %s (\n", - quote_identifier(tablename)); + attname = PQgetvalue(res, i, 1); + typename = PQgetvalue(res, i, 2); + attnotnull = PQgetvalue(res, i, 3); + attdefault = PQgetisnull(res, i, 4) ? NULL : + PQgetvalue(res, i, 4); + attgenerated = PQgetisnull(res, i, 5) ? NULL : + PQgetvalue(res, i, 5); + collname = PQgetisnull(res, i, 6) ? NULL : + PQgetvalue(res, i, 6); + collnamespace = PQgetisnull(res, i, 7) ? NULL : + PQgetvalue(res, i, 7); + + if (first_item) + first_item = false; + else + appendStringInfoString(&buf, ",\n"); - /* Scan all rows for this table */ - do - { - char *attname; - char *typename; - char *attnotnull; - char *attgenerated; - char *attdefault; - char *collname; - char *collnamespace; - - /* If table has no columns, we'll see nulls here */ - if (PQgetisnull(res, i, 1)) - continue; + /* Print column name and type */ + appendStringInfo(&buf, " %s %s", + quote_identifier(attname), + typename); - attname = PQgetvalue(res, i, 1); - typename = PQgetvalue(res, i, 2); - attnotnull = PQgetvalue(res, i, 3); - attdefault = PQgetisnull(res, i, 4) ? NULL : - PQgetvalue(res, i, 4); - attgenerated = PQgetisnull(res, i, 5) ? NULL : - PQgetvalue(res, i, 5); - collname = PQgetisnull(res, i, 6) ? NULL : - PQgetvalue(res, i, 6); - collnamespace = PQgetisnull(res, i, 7) ? NULL : - PQgetvalue(res, i, 7); - - if (first_item) - first_item = false; - else - appendStringInfoString(&buf, ",\n"); + /* + * Add column_name option so that renaming the foreign table's + * column doesn't break the association to the underlying column. + */ + appendStringInfoString(&buf, " OPTIONS (column_name "); + deparseStringLiteral(&buf, attname); + appendStringInfoChar(&buf, ')'); - /* Print column name and type */ - appendStringInfo(&buf, " %s %s", - quote_identifier(attname), - typename); + /* Add COLLATE if needed */ + if (import_collate && collname != NULL && collnamespace != NULL) + appendStringInfo(&buf, " COLLATE %s.%s", + quote_identifier(collnamespace), + quote_identifier(collname)); - /* - * Add column_name option so that renaming the foreign table's - * column doesn't break the association to the underlying - * column. - */ - appendStringInfoString(&buf, " OPTIONS (column_name "); - deparseStringLiteral(&buf, attname); - appendStringInfoChar(&buf, ')'); - - /* Add COLLATE if needed */ - if (import_collate && collname != NULL && collnamespace != NULL) - appendStringInfo(&buf, " COLLATE %s.%s", - quote_identifier(collnamespace), - quote_identifier(collname)); - - /* Add DEFAULT if needed */ - if (import_default && attdefault != NULL && - (!attgenerated || !attgenerated[0])) - appendStringInfo(&buf, " DEFAULT %s", attdefault); - - /* Add GENERATED if needed */ - if (import_generated && attgenerated != NULL && - attgenerated[0] == ATTRIBUTE_GENERATED_STORED) - { - Assert(attdefault != NULL); - appendStringInfo(&buf, - " GENERATED ALWAYS AS (%s) STORED", - attdefault); - } + /* Add DEFAULT if needed */ + if (import_default && attdefault != NULL && + (!attgenerated || !attgenerated[0])) + appendStringInfo(&buf, " DEFAULT %s", attdefault); - /* Add NOT NULL if needed */ - if (import_not_null && attnotnull[0] == 't') - appendStringInfoString(&buf, " NOT NULL"); + /* Add GENERATED if needed */ + if (import_generated && attgenerated != NULL && + attgenerated[0] == ATTRIBUTE_GENERATED_STORED) + { + Assert(attdefault != NULL); + appendStringInfo(&buf, + " GENERATED ALWAYS AS (%s) STORED", + attdefault); } - while (++i < numrows && - strcmp(PQgetvalue(res, i, 0), tablename) == 0); - /* - * Add server name and table-level options. We specify remote - * schema and table name as options (the latter to ensure that - * renaming the foreign table doesn't break the association). - */ - appendStringInfo(&buf, "\n) SERVER %s\nOPTIONS (", - quote_identifier(server->servername)); + /* Add NOT NULL if needed */ + if (import_not_null && attnotnull[0] == 't') + appendStringInfoString(&buf, " NOT NULL"); + } + while (++i < numrows && + strcmp(PQgetvalue(res, i, 0), tablename) == 0); + + /* + * Add server name and table-level options. We specify remote schema + * and table name as options (the latter to ensure that renaming the + * foreign table doesn't break the association). + */ + appendStringInfo(&buf, "\n) SERVER %s\nOPTIONS (", + quote_identifier(server->servername)); - appendStringInfoString(&buf, "schema_name "); - deparseStringLiteral(&buf, stmt->remote_schema); - appendStringInfoString(&buf, ", table_name "); - deparseStringLiteral(&buf, tablename); + appendStringInfoString(&buf, "schema_name "); + deparseStringLiteral(&buf, stmt->remote_schema); + appendStringInfoString(&buf, ", table_name "); + deparseStringLiteral(&buf, tablename); - appendStringInfoString(&buf, ");"); + appendStringInfoString(&buf, ");"); - commands = lappend(commands, pstrdup(buf.data)); - } - } - PG_FINALLY(); - { - PQclear(res); + commands = lappend(commands, pstrdup(buf.data)); } - PG_END_TRY(); + PQclear(res); ReleaseConnection(conn); @@ -7409,7 +7312,7 @@ postgresForeignAsyncNotify(AsyncRequest *areq) /* On error, report the original query, not the FETCH. */ if (!PQconsumeInput(fsstate->conn)) - pgfdw_report_error(ERROR, NULL, fsstate->conn, false, fsstate->query); + pgfdw_report_error(NULL, fsstate->conn, fsstate->query); fetch_more_data(node); @@ -7508,7 +7411,7 @@ fetch_more_data_begin(AsyncRequest *areq) fsstate->fetch_size, fsstate->cursor_number); if (!PQsendQuery(fsstate->conn, sql)) - pgfdw_report_error(ERROR, NULL, fsstate->conn, false, fsstate->query); + pgfdw_report_error(NULL, fsstate->conn, fsstate->query); /* Remember that the request is in process */ fsstate->conn_state->pendingAreq = areq; @@ -7847,14 +7750,13 @@ conversion_error_callback(void *arg) EquivalenceMember * find_em_for_rel(PlannerInfo *root, EquivalenceClass *ec, RelOptInfo *rel) { - ListCell *lc; - PgFdwRelationInfo *fpinfo = (PgFdwRelationInfo *) rel->fdw_private; + EquivalenceMemberIterator it; + EquivalenceMember *em; - foreach(lc, ec->ec_members) + setup_eclass_member_iterator(&it, ec, rel->relids); + while ((em = eclass_member_iterator_next(&it)) != NULL) { - EquivalenceMember *em = (EquivalenceMember *) lfirst(lc); - /* * Note we require !bms_is_empty, else we'd accept constant * expressions which are not suitable for the purpose. @@ -7908,7 +7810,10 @@ find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec, while (expr && IsA(expr, RelabelType)) expr = ((RelabelType *) expr)->arg; - /* Locate an EquivalenceClass member matching this expr, if any */ + /* + * Locate an EquivalenceClass member matching this expr, if any. + * Ignore child members. + */ foreach(lc2, ec->ec_members) { EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2); @@ -7918,9 +7823,8 @@ find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec, if (em->em_is_const) continue; - /* Ignore child members */ - if (em->em_is_child) - continue; + /* Child members should not exist in ec_members */ + Assert(!em->em_is_child); /* Match if same expression (after stripping relabel) */ em_expr = em->em_expr; diff --git a/contrib/postgres_fdw/postgres_fdw.h b/contrib/postgres_fdw/postgres_fdw.h index 81358f3bde7df..e69735298d78f 100644 --- a/contrib/postgres_fdw/postgres_fdw.h +++ b/contrib/postgres_fdw/postgres_fdw.h @@ -15,7 +15,7 @@ #include "foreign/foreign.h" #include "lib/stringinfo.h" -#include "libpq-fe.h" +#include "libpq/libpq-be-fe.h" #include "nodes/execnodes.h" #include "nodes/pathnodes.h" #include "utils/relcache.h" @@ -166,8 +166,10 @@ extern void do_sql_command(PGconn *conn, const char *sql); extern PGresult *pgfdw_get_result(PGconn *conn); extern PGresult *pgfdw_exec_query(PGconn *conn, const char *query, PgFdwConnState *state); -extern void pgfdw_report_error(int elevel, PGresult *res, PGconn *conn, - bool clear, const char *sql); +pg_noreturn extern void pgfdw_report_error(PGresult *res, PGconn *conn, + const char *sql); +extern void pgfdw_report(int elevel, PGresult *res, PGconn *conn, + const char *sql); /* in option.c */ extern int ExtractConnectionOptions(List *defelems, diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index ea6287b03fd93..2c609e060b7c8 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -213,6 +213,14 @@ ALTER USER MAPPING FOR public SERVER testserver1 ALTER USER MAPPING FOR public SERVER testserver1 OPTIONS (ADD sslkey 'value', ADD sslcert 'value'); +-- OAuth options are not allowed in either context +ALTER SERVER testserver1 OPTIONS (ADD oauth_issuer 'https://example.com'); +ALTER SERVER testserver1 OPTIONS (ADD oauth_client_id 'myID'); +ALTER USER MAPPING FOR public SERVER testserver1 + OPTIONS (ADD oauth_issuer 'https://example.com'); +ALTER USER MAPPING FOR public SERVER testserver1 + OPTIONS (ADD oauth_client_id 'myID'); + ALTER FOREIGN TABLE ft1 OPTIONS (schema_name 'S 1', table_name 'T 1'); ALTER FOREIGN TABLE ft2 OPTIONS (schema_name 'S 1', table_name 'T 1'); ALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1'); @@ -344,7 +352,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c3 IS NULL; -- Nu EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c3 IS NOT NULL; -- NullTest EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1; -- OpExpr(l) -EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr +EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c3 IS NOT NULL) IS DISTINCT FROM (c3 IS NOT NULL); -- DistinctExpr EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\bar'; -- check special chars @@ -450,6 +458,15 @@ SELECT * FROM ft1 WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE CASE c3 COLLATE "C" WHEN c6 THEN true ELSE c3 < 'bar' END; +-- Test array type conversion pushdown +SET plan_cache_mode = force_generic_plan; +PREPARE s(varchar[]) AS SELECT count(*) FROM ft2 WHERE c6 = ANY ($1); +EXPLAIN (VERBOSE, COSTS OFF) +EXECUTE s(ARRAY['1','2']); +EXECUTE s(ARRAY['1','2']); +DEALLOCATE s; +RESET plan_cache_mode; + -- a regconfig constant referring to this text search configuration -- is initially unshippable CREATE TEXT SEARCH CONFIGURATION public.custom_search @@ -707,6 +724,11 @@ SELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = f AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE; SELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1 AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE; +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM ft1, ft4, ft5, local_tbl WHERE ft1.c1 = ft4.c1 AND ft1.c1 = ft5.c1 + AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft5.c1 < 100 FOR UPDATE; +SELECT * FROM ft1, ft4, ft5, local_tbl WHERE ft1.c1 = ft4.c1 AND ft1.c1 = ft5.c1 + AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft5.c1 < 100 FOR UPDATE; RESET enable_nestloop; RESET enable_hashjoin; @@ -2259,6 +2281,84 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can't be pushed down DROP TRIGGER trig_row_after_delete ON rem1; + +-- We are allowed to create transition-table triggers on both kinds of +-- inheritance even if they contain foreign tables as children, but currently +-- collecting transition tuples from such foreign tables is not supported. + +CREATE TABLE local_tbl (a text, b int); +CREATE FOREIGN TABLE foreign_tbl (a text, b int) + SERVER loopback OPTIONS (table_name 'local_tbl'); + +INSERT INTO foreign_tbl VALUES ('AAA', 42); + +-- Test case for partition hierarchy +CREATE TABLE parent_tbl (a text, b int) PARTITION BY LIST (a); +ALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES IN ('AAA'); + +CREATE TRIGGER parent_tbl_insert_trig + AFTER INSERT ON parent_tbl REFERENCING NEW TABLE AS new_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +CREATE TRIGGER parent_tbl_update_trig + AFTER UPDATE ON parent_tbl REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +CREATE TRIGGER parent_tbl_delete_trig + AFTER DELETE ON parent_tbl REFERENCING OLD TABLE AS old_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); + +INSERT INTO parent_tbl VALUES ('AAA', 42); + +COPY parent_tbl (a, b) FROM stdin; +AAA 42 +\. + +ALTER SERVER loopback OPTIONS (ADD batch_size '10'); + +INSERT INTO parent_tbl VALUES ('AAA', 42); + +COPY parent_tbl (a, b) FROM stdin; +AAA 42 +\. + +ALTER SERVER loopback OPTIONS (DROP batch_size); + +EXPLAIN (VERBOSE, COSTS OFF) +UPDATE parent_tbl SET b = b + 1; +UPDATE parent_tbl SET b = b + 1; + +EXPLAIN (VERBOSE, COSTS OFF) +DELETE FROM parent_tbl; +DELETE FROM parent_tbl; + +ALTER TABLE parent_tbl DETACH PARTITION foreign_tbl; +DROP TABLE parent_tbl; + +-- Test case for non-partition hierarchy +CREATE TABLE parent_tbl (a text, b int); +ALTER FOREIGN TABLE foreign_tbl INHERIT parent_tbl; + +CREATE TRIGGER parent_tbl_update_trig + AFTER UPDATE ON parent_tbl REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); +CREATE TRIGGER parent_tbl_delete_trig + AFTER DELETE ON parent_tbl REFERENCING OLD TABLE AS old_table + FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); + +EXPLAIN (VERBOSE, COSTS OFF) +UPDATE parent_tbl SET b = b + 1; +UPDATE parent_tbl SET b = b + 1; + +EXPLAIN (VERBOSE, COSTS OFF) +DELETE FROM parent_tbl; +DELETE FROM parent_tbl; + +ALTER FOREIGN TABLE foreign_tbl NO INHERIT parent_tbl; +DROP TABLE parent_tbl; + +-- Cleanup +DROP FOREIGN TABLE foreign_tbl; +DROP TABLE local_tbl; + -- =================================================================== -- test inheritance features -- =================================================================== @@ -4265,7 +4365,7 @@ ALTER SERVER loopback2 OPTIONS (DROP parallel_abort); CREATE TABLE analyze_table (id int, a text, b bigint); CREATE FOREIGN TABLE analyze_ftable (id int, a text, b bigint) - SERVER loopback OPTIONS (table_name 'analyze_rtable1'); + SERVER loopback OPTIONS (table_name 'analyze_table'); INSERT INTO analyze_table (SELECT x FROM generate_series(1,1000) x); ANALYZE analyze_table; @@ -4276,19 +4376,19 @@ ANALYZE analyze_table; ALTER SERVER loopback OPTIONS (analyze_sampling 'invalid'); ALTER SERVER loopback OPTIONS (analyze_sampling 'auto'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'system'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'bernoulli'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'random'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; ALTER SERVER loopback OPTIONS (SET analyze_sampling 'off'); -ANALYZE analyze_table; +ANALYZE analyze_ftable; -- cleanup DROP FOREIGN TABLE analyze_ftable; diff --git a/contrib/postgres_fdw/t/001_auth_scram.pl b/contrib/postgres_fdw/t/001_auth_scram.pl index ba178246eb7a1..b94a6a6293bad 100644 --- a/contrib/postgres_fdw/t/001_auth_scram.pl +++ b/contrib/postgres_fdw/t/001_auth_scram.pl @@ -3,7 +3,7 @@ # Test SCRAM authentication when opening a new connection with a foreign # server. # -# The test is executed by testing the SCRAM authentifcation on a looplback +# The test is executed by testing the SCRAM authentifcation on a loopback # connection on the same server and with different servers. use strict; diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c index 151cbb954b9a1..b5de2a5e1be3f 100644 --- a/contrib/seg/seg.c +++ b/contrib/seg/seg.c @@ -417,7 +417,7 @@ gseg_same(PG_FUNCTION_ARGS) { bool *result = (bool *) PG_GETARG_POINTER(2); - if (DirectFunctionCall2(seg_same, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1))) + if (DatumGetBool(DirectFunctionCall2(seg_same, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1)))) *result = true; else *result = false; @@ -470,7 +470,7 @@ gseg_leaf_consistent(Datum key, Datum query, StrategyNumber strategy) retval = DirectFunctionCall2(seg_contained, key, query); break; default: - retval = false; + retval = BoolGetDatum(false); } PG_RETURN_DATUM(retval); diff --git a/contrib/sepgsql/database.c b/contrib/sepgsql/database.c index 6eeb429a28c08..c4ed646436990 100644 --- a/contrib/sepgsql/database.c +++ b/contrib/sepgsql/database.c @@ -16,7 +16,6 @@ #include "access/table.h" #include "catalog/dependency.h" #include "catalog/pg_database.h" -#include "commands/dbcommands.h" #include "commands/seclabel.h" #include "sepgsql.h" #include "utils/builtins.h" diff --git a/contrib/sepgsql/label.c b/contrib/sepgsql/label.c index 996ce174454dc..a37d89a3f1cc0 100644 --- a/contrib/sepgsql/label.c +++ b/contrib/sepgsql/label.c @@ -23,7 +23,6 @@ #include "catalog/pg_database.h" #include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" -#include "commands/dbcommands.h" #include "commands/seclabel.h" #include "libpq/auth.h" #include "libpq/libpq-be.h" diff --git a/contrib/sepgsql/t/001_sepgsql.pl b/contrib/sepgsql/t/001_sepgsql.pl index cd00e4963dba9..f5e4645e4e6d0 100644 --- a/contrib/sepgsql/t/001_sepgsql.pl +++ b/contrib/sepgsql/t/001_sepgsql.pl @@ -1,5 +1,5 @@ -# Copyright (c) 2024, PostgreSQL Global Development Group +# Copyright (c) 2024-2025, PostgreSQL Global Development Group use strict; use warnings FATAL => 'all'; diff --git a/contrib/sepgsql/uavc.c b/contrib/sepgsql/uavc.c index 65ea8e7946a6e..d9ccbc38bc538 100644 --- a/contrib/sepgsql/uavc.c +++ b/contrib/sepgsql/uavc.c @@ -66,8 +66,8 @@ static char *avc_unlabeled; /* system 'unlabeled' label */ static uint32 sepgsql_avc_hash(const char *scontext, const char *tcontext, uint16 tclass) { - return hash_any((const unsigned char *) scontext, strlen(scontext)) - ^ hash_any((const unsigned char *) tcontext, strlen(tcontext)) + return hash_bytes((const unsigned char *) scontext, strlen(scontext)) + ^ hash_bytes((const unsigned char *) tcontext, strlen(tcontext)) ^ tclass; } diff --git a/contrib/spi/.gitignore b/contrib/spi/.gitignore new file mode 100644 index 0000000000000..5dcb3ff972350 --- /dev/null +++ b/contrib/spi/.gitignore @@ -0,0 +1,4 @@ +# Generated subdirectories +/log/ +/results/ +/tmp_check/ diff --git a/contrib/spi/Makefile b/contrib/spi/Makefile index c9c34ff38895b..7ccbef8c9265e 100644 --- a/contrib/spi/Makefile +++ b/contrib/spi/Makefile @@ -10,6 +10,8 @@ DATA = autoinc--1.0.sql \ refint--1.0.sql PGFILEDESC = "spi - examples of using SPI and triggers" +REGRESS = autoinc refint + DOCS = $(addsuffix .example, $(MODULES)) # this is needed for the regression tests; diff --git a/contrib/spi/expected/autoinc.out b/contrib/spi/expected/autoinc.out new file mode 100644 index 0000000000000..07ae8ad1f2b65 --- /dev/null +++ b/contrib/spi/expected/autoinc.out @@ -0,0 +1,50 @@ +CREATE EXTENSION autoinc; +create sequence aitest_seq increment 10 start 0 minvalue 0; +create table aitest ( + price_id int4, + price_val int4, + price_on int4 +); +create trigger aiserial + before insert or update on aitest + for each row + execute procedure + autoinc (price_on, aitest_seq); +insert into aitest values (1, 1, null); +insert into aitest values (2, 2, 0); +insert into aitest values (3, 3, 1); +select * from aitest; + price_id | price_val | price_on +----------+-----------+---------- + 1 | 1 | 10 + 2 | 2 | 20 + 3 | 3 | 1 +(3 rows) + +update aitest set price_on = 11; +select * from aitest; + price_id | price_val | price_on +----------+-----------+---------- + 1 | 1 | 11 + 2 | 2 | 11 + 3 | 3 | 11 +(3 rows) + +update aitest set price_on = 0; +select * from aitest; + price_id | price_val | price_on +----------+-----------+---------- + 1 | 1 | 30 + 2 | 2 | 40 + 3 | 3 | 50 +(3 rows) + +update aitest set price_on = null; +select * from aitest; + price_id | price_val | price_on +----------+-----------+---------- + 1 | 1 | 60 + 2 | 2 | 70 + 3 | 3 | 80 +(3 rows) + diff --git a/contrib/spi/expected/refint.out b/contrib/spi/expected/refint.out new file mode 100644 index 0000000000000..796336032174e --- /dev/null +++ b/contrib/spi/expected/refint.out @@ -0,0 +1,113 @@ +CREATE EXTENSION refint; +create table pkeys (pkey1 int4 not null, pkey2 text not null); +create table fkeys (fkey1 int4, fkey2 text, fkey3 int); +create table fkeys2 (fkey21 int4, fkey22 text, pkey23 int not null); +create index fkeys_i on fkeys (fkey1, fkey2); +create index fkeys2_i on fkeys2 (fkey21, fkey22); +create index fkeys2p_i on fkeys2 (pkey23); +insert into pkeys values (10, '1'); +insert into pkeys values (20, '2'); +insert into pkeys values (30, '3'); +insert into pkeys values (40, '4'); +insert into pkeys values (50, '5'); +insert into pkeys values (60, '6'); +create unique index pkeys_i on pkeys (pkey1, pkey2); +-- +-- For fkeys: +-- (fkey1, fkey2) --> pkeys (pkey1, pkey2) +-- (fkey3) --> fkeys2 (pkey23) +-- +create trigger check_fkeys_pkey_exist + after insert or update on fkeys + for each row + execute function + check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2'); +create trigger check_fkeys_pkey2_exist + after insert or update on fkeys + for each row + execute function check_primary_key ('fkey3', 'fkeys2', 'pkey23'); +-- +-- For fkeys2: +-- (fkey21, fkey22) --> pkeys (pkey1, pkey2) +-- +create trigger check_fkeys2_pkey_exist + after insert or update on fkeys2 + for each row + execute procedure + check_primary_key ('fkey21', 'fkey22', 'pkeys', 'pkey1', 'pkey2'); +-- +-- For pkeys: +-- ON DELETE/UPDATE (pkey1, pkey2) CASCADE: +-- fkeys (fkey1, fkey2) and fkeys2 (fkey21, fkey22) +-- +create trigger check_pkeys_fkey_cascade + after delete or update on pkeys + for each row + execute procedure + check_foreign_key (2, 'cascade', 'pkey1', 'pkey2', + 'fkeys', 'fkey1', 'fkey2', 'fkeys2', 'fkey21', 'fkey22'); +-- +-- For fkeys2: +-- ON DELETE/UPDATE (pkey23) RESTRICT: +-- fkeys (fkey3) +-- +create trigger check_fkeys2_fkey_restrict + after delete or update on fkeys2 + for each row + execute procedure check_foreign_key (1, 'restrict', 'pkey23', 'fkeys', 'fkey3'); +insert into fkeys2 values (10, '1', 1); +insert into fkeys2 values (30, '3', 2); +insert into fkeys2 values (40, '4', 5); +insert into fkeys2 values (50, '5', 3); +-- no key in pkeys +insert into fkeys2 values (70, '5', 3); +ERROR: tuple references non-existent key +DETAIL: Trigger "check_fkeys2_pkey_exist" found tuple referencing non-existent key in "pkeys". +insert into fkeys values (10, '1', 2); +insert into fkeys values (30, '3', 3); +insert into fkeys values (40, '4', 2); +insert into fkeys values (50, '5', 2); +-- no key in pkeys +insert into fkeys values (70, '5', 1); +ERROR: tuple references non-existent key +DETAIL: Trigger "check_fkeys_pkey_exist" found tuple referencing non-existent key in "pkeys". +-- no key in fkeys2 +insert into fkeys values (60, '6', 4); +ERROR: tuple references non-existent key +DETAIL: Trigger "check_fkeys_pkey2_exist" found tuple referencing non-existent key in "fkeys2". +delete from pkeys where pkey1 = 30 and pkey2 = '3'; +NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted +ERROR: "check_fkeys2_fkey_restrict": tuple is referenced in "fkeys" +CONTEXT: SQL statement "delete from fkeys2 where fkey21 = $1 and fkey22 = $2 " +delete from pkeys where pkey1 = 40 and pkey2 = '4'; +NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted +NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys2 are deleted +update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 50 and pkey2 = '5'; +NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are updated +NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys2 are updated +update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 10 and pkey2 = '1'; +ERROR: duplicate key value violates unique constraint "pkeys_i" +DETAIL: Key (pkey1, pkey2)=(7, 70) already exists. +SELECT trigger_name, event_manipulation, event_object_schema, event_object_table, + action_order, action_condition, action_orientation, action_timing, + action_reference_old_table, action_reference_new_table + FROM information_schema.triggers + WHERE event_object_table in ('pkeys', 'fkeys', 'fkeys2') + ORDER BY trigger_name COLLATE "C", 2; + trigger_name | event_manipulation | event_object_schema | event_object_table | action_order | action_condition | action_orientation | action_timing | action_reference_old_table | action_reference_new_table +----------------------------+--------------------+---------------------+--------------------+--------------+------------------+--------------------+---------------+----------------------------+---------------------------- + check_fkeys2_fkey_restrict | DELETE | public | fkeys2 | 1 | | ROW | AFTER | | + check_fkeys2_fkey_restrict | UPDATE | public | fkeys2 | 1 | | ROW | AFTER | | + check_fkeys2_pkey_exist | INSERT | public | fkeys2 | 1 | | ROW | AFTER | | + check_fkeys2_pkey_exist | UPDATE | public | fkeys2 | 2 | | ROW | AFTER | | + check_fkeys_pkey2_exist | INSERT | public | fkeys | 1 | | ROW | AFTER | | + check_fkeys_pkey2_exist | UPDATE | public | fkeys | 1 | | ROW | AFTER | | + check_fkeys_pkey_exist | INSERT | public | fkeys | 2 | | ROW | AFTER | | + check_fkeys_pkey_exist | UPDATE | public | fkeys | 2 | | ROW | AFTER | | + check_pkeys_fkey_cascade | DELETE | public | pkeys | 1 | | ROW | AFTER | | + check_pkeys_fkey_cascade | UPDATE | public | pkeys | 1 | | ROW | AFTER | | +(10 rows) + +DROP TABLE pkeys; +DROP TABLE fkeys; +DROP TABLE fkeys2; diff --git a/contrib/spi/meson.build b/contrib/spi/meson.build index eeab1ab210b69..3832a91019a43 100644 --- a/contrib/spi/meson.build +++ b/contrib/spi/meson.build @@ -107,3 +107,15 @@ install_data('refint.control', 'refint--1.0.sql', install_data('refint.example', kwargs: contrib_doc_args, ) + +tests += { + 'name': 'spi', + 'sd': meson.current_source_dir(), + 'bd': meson.current_build_dir(), + 'regress': { + 'sql': [ + 'autoinc', + 'refint', + ], + }, +} diff --git a/contrib/spi/refint.c b/contrib/spi/refint.c index d954f5c838f19..89898cad7b0d7 100644 --- a/contrib/spi/refint.c +++ b/contrib/spi/refint.c @@ -84,6 +84,10 @@ check_primary_key(PG_FUNCTION_ARGS) /* internal error */ elog(ERROR, "check_primary_key: must be fired for row"); + if (!TRIGGER_FIRED_AFTER(trigdata->tg_event)) + /* internal error */ + elog(ERROR, "check_primary_key: must be fired by AFTER trigger"); + /* If INSERTion then must check Tuple to being inserted */ if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event)) tuple = trigdata->tg_trigtuple; @@ -287,6 +291,10 @@ check_foreign_key(PG_FUNCTION_ARGS) /* internal error */ elog(ERROR, "check_foreign_key: cannot process INSERT events"); + if (!TRIGGER_FIRED_AFTER(trigdata->tg_event)) + /* internal error */ + elog(ERROR, "check_foreign_key: must be fired by AFTER trigger"); + /* Have to check tg_trigtuple - tuple being deleted */ trigtuple = trigdata->tg_trigtuple; @@ -313,7 +321,7 @@ check_foreign_key(PG_FUNCTION_ARGS) if (nrefs < 1) /* internal error */ elog(ERROR, "check_foreign_key: %d (< 1) number of references specified", nrefs); - action = tolower((unsigned char) *(args[1])); + action = pg_ascii_tolower((unsigned char) *(args[1])); if (action != 'r' && action != 'c' && action != 's') /* internal error */ elog(ERROR, "check_foreign_key: invalid action %s", args[1]); @@ -338,10 +346,10 @@ check_foreign_key(PG_FUNCTION_ARGS) kvals = (Datum *) palloc(nkeys * sizeof(Datum)); /* - * Construct ident string as TriggerName $ TriggeredRelationId and try to - * find prepared execution plan(s). + * Construct ident string as TriggerName $ TriggeredRelationId $ + * OperationType and try to find prepared execution plan(s). */ - snprintf(ident, sizeof(ident), "%s$%u", trigger->tgname, rel->rd_id); + snprintf(ident, sizeof(ident), "%s$%u$%c", trigger->tgname, rel->rd_id, is_update ? 'U' : 'D'); plan = find_plan(ident, &FPlans, &nFPlans); /* if there is no plan(s) then allocate argtypes for preparation */ @@ -573,8 +581,6 @@ check_foreign_key(PG_FUNCTION_ARGS) relname = args[0]; - snprintf(ident, sizeof(ident), "%s$%u", trigger->tgname, rel->rd_id); - plan = find_plan(ident, &FPlans, &nFPlans); ret = SPI_execp(plan->splan[r], kvals, NULL, tcount); /* we have no NULLs - so we pass ^^^^ here */ @@ -596,9 +602,15 @@ check_foreign_key(PG_FUNCTION_ARGS) else { #ifdef REFINT_VERBOSE + const char *operation; + + if (action == 'c') + operation = is_update ? "updated" : "deleted"; + else + operation = "set to null"; + elog(NOTICE, "%s: " UINT64_FORMAT " tuple(s) of %s are %s", - trigger->tgname, SPI_processed, relname, - (action == 'c') ? "deleted" : "set to null"); + trigger->tgname, SPI_processed, relname, operation); #endif } args += nkeys + 1; /* to the next relation */ diff --git a/contrib/spi/sql/autoinc.sql b/contrib/spi/sql/autoinc.sql new file mode 100644 index 0000000000000..b240dcdc082f7 --- /dev/null +++ b/contrib/spi/sql/autoinc.sql @@ -0,0 +1,33 @@ +CREATE EXTENSION autoinc; + +create sequence aitest_seq increment 10 start 0 minvalue 0; + +create table aitest ( + price_id int4, + price_val int4, + price_on int4 +); + +create trigger aiserial + before insert or update on aitest + for each row + execute procedure + autoinc (price_on, aitest_seq); + +insert into aitest values (1, 1, null); +insert into aitest values (2, 2, 0); +insert into aitest values (3, 3, 1); + +select * from aitest; + +update aitest set price_on = 11; + +select * from aitest; + +update aitest set price_on = 0; + +select * from aitest; + +update aitest set price_on = null; + +select * from aitest; diff --git a/contrib/spi/sql/refint.sql b/contrib/spi/sql/refint.sql new file mode 100644 index 0000000000000..63458127917ba --- /dev/null +++ b/contrib/spi/sql/refint.sql @@ -0,0 +1,97 @@ +CREATE EXTENSION refint; + +create table pkeys (pkey1 int4 not null, pkey2 text not null); +create table fkeys (fkey1 int4, fkey2 text, fkey3 int); +create table fkeys2 (fkey21 int4, fkey22 text, pkey23 int not null); + +create index fkeys_i on fkeys (fkey1, fkey2); +create index fkeys2_i on fkeys2 (fkey21, fkey22); +create index fkeys2p_i on fkeys2 (pkey23); + +insert into pkeys values (10, '1'); +insert into pkeys values (20, '2'); +insert into pkeys values (30, '3'); +insert into pkeys values (40, '4'); +insert into pkeys values (50, '5'); +insert into pkeys values (60, '6'); +create unique index pkeys_i on pkeys (pkey1, pkey2); + +-- +-- For fkeys: +-- (fkey1, fkey2) --> pkeys (pkey1, pkey2) +-- (fkey3) --> fkeys2 (pkey23) +-- +create trigger check_fkeys_pkey_exist + after insert or update on fkeys + for each row + execute function + check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2'); + +create trigger check_fkeys_pkey2_exist + after insert or update on fkeys + for each row + execute function check_primary_key ('fkey3', 'fkeys2', 'pkey23'); + +-- +-- For fkeys2: +-- (fkey21, fkey22) --> pkeys (pkey1, pkey2) +-- +create trigger check_fkeys2_pkey_exist + after insert or update on fkeys2 + for each row + execute procedure + check_primary_key ('fkey21', 'fkey22', 'pkeys', 'pkey1', 'pkey2'); + +-- +-- For pkeys: +-- ON DELETE/UPDATE (pkey1, pkey2) CASCADE: +-- fkeys (fkey1, fkey2) and fkeys2 (fkey21, fkey22) +-- +create trigger check_pkeys_fkey_cascade + after delete or update on pkeys + for each row + execute procedure + check_foreign_key (2, 'cascade', 'pkey1', 'pkey2', + 'fkeys', 'fkey1', 'fkey2', 'fkeys2', 'fkey21', 'fkey22'); + +-- +-- For fkeys2: +-- ON DELETE/UPDATE (pkey23) RESTRICT: +-- fkeys (fkey3) +-- +create trigger check_fkeys2_fkey_restrict + after delete or update on fkeys2 + for each row + execute procedure check_foreign_key (1, 'restrict', 'pkey23', 'fkeys', 'fkey3'); + +insert into fkeys2 values (10, '1', 1); +insert into fkeys2 values (30, '3', 2); +insert into fkeys2 values (40, '4', 5); +insert into fkeys2 values (50, '5', 3); +-- no key in pkeys +insert into fkeys2 values (70, '5', 3); + +insert into fkeys values (10, '1', 2); +insert into fkeys values (30, '3', 3); +insert into fkeys values (40, '4', 2); +insert into fkeys values (50, '5', 2); +-- no key in pkeys +insert into fkeys values (70, '5', 1); +-- no key in fkeys2 +insert into fkeys values (60, '6', 4); + +delete from pkeys where pkey1 = 30 and pkey2 = '3'; +delete from pkeys where pkey1 = 40 and pkey2 = '4'; +update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 50 and pkey2 = '5'; +update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 10 and pkey2 = '1'; + +SELECT trigger_name, event_manipulation, event_object_schema, event_object_table, + action_order, action_condition, action_orientation, action_timing, + action_reference_old_table, action_reference_new_table + FROM information_schema.triggers + WHERE event_object_table in ('pkeys', 'fkeys', 'fkeys2') + ORDER BY trigger_name COLLATE "C", 2; + +DROP TABLE pkeys; +DROP TABLE fkeys; +DROP TABLE fkeys2; diff --git a/contrib/test_decoding/Makefile b/contrib/test_decoding/Makefile index a4ba1a509aec2..02e961f4d3144 100644 --- a/contrib/test_decoding/Makefile +++ b/contrib/test_decoding/Makefile @@ -9,7 +9,7 @@ REGRESS = ddl xact rewrite toast permissions decoding_in_xact \ ISOLATION = mxact delayed_startup ondisk_startup concurrent_ddl_dml \ oldest_xmin snapshot_transfer subxact_without_top concurrent_stream \ twophase_snapshot slot_creation_error catalog_change_snapshot \ - skip_snapshot_restore + skip_snapshot_restore invalidation_distribution REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf ISOLATION_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf diff --git a/contrib/test_decoding/expected/invalidation_distribution.out b/contrib/test_decoding/expected/invalidation_distribution.out new file mode 100644 index 0000000000000..ae53b1e61de3e --- /dev/null +++ b/contrib/test_decoding/expected/invalidation_distribution.out @@ -0,0 +1,41 @@ +Parsed test spec with 3 sessions + +starting permutation: s1_insert_tbl1 s1_begin s1_insert_tbl1 s2_alter_pub_add_tbl s1_commit s1_insert_tbl1 s2_get_binary_changes +step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); +step s1_begin: BEGIN; +step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); +step s2_alter_pub_add_tbl: ALTER PUBLICATION pub ADD TABLE tbl1; +step s1_commit: COMMIT; +step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); +step s2_get_binary_changes: SELECT count(data) FROM pg_logical_slot_get_binary_changes('isolation_slot', NULL, NULL, 'proto_version', '4', 'publication_names', 'pub') WHERE get_byte(data, 0) = 73; +count +----- + 1 +(1 row) + +?column? +-------- +stop +(1 row) + + +starting permutation: s1_begin s1_insert_tbl1 s3_begin s3_insert_tbl1 s2_alter_pub_add_tbl s1_insert_tbl1 s1_commit s3_commit s2_get_binary_changes +step s1_begin: BEGIN; +step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); +step s3_begin: BEGIN; +step s3_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (2, 2); +step s2_alter_pub_add_tbl: ALTER PUBLICATION pub ADD TABLE tbl1; +step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); +step s1_commit: COMMIT; +step s3_commit: COMMIT; +step s2_get_binary_changes: SELECT count(data) FROM pg_logical_slot_get_binary_changes('isolation_slot', NULL, NULL, 'proto_version', '4', 'publication_names', 'pub') WHERE get_byte(data, 0) = 73; +count +----- + 1 +(1 row) + +?column? +-------- +stop +(1 row) + diff --git a/contrib/test_decoding/expected/oldest_xmin.out b/contrib/test_decoding/expected/oldest_xmin.out index dd6053f9c1f4b..57268b38d3322 100644 --- a/contrib/test_decoding/expected/oldest_xmin.out +++ b/contrib/test_decoding/expected/oldest_xmin.out @@ -38,3 +38,44 @@ COMMIT stop (1 row) + +starting permutation: s0_begin s0_getxid s1_begin s1_insert s0_alter s0_commit s0_checkpoint s0_advance_slot s0_advance_slot s1_commit s0_vacuum s0_get_changes +step s0_begin: BEGIN; +step s0_getxid: SELECT pg_current_xact_id() IS NULL; +?column? +-------- +f +(1 row) + +step s1_begin: BEGIN; +step s1_insert: INSERT INTO harvest VALUES ((1, 2, 3)); +step s0_alter: ALTER TYPE basket DROP ATTRIBUTE mangos; +step s0_commit: COMMIT; +step s0_checkpoint: CHECKPOINT; +step s0_advance_slot: SELECT slot_name FROM pg_replication_slot_advance('isolation_slot', pg_current_wal_lsn()); +slot_name +-------------- +isolation_slot +(1 row) + +step s0_advance_slot: SELECT slot_name FROM pg_replication_slot_advance('isolation_slot', pg_current_wal_lsn()); +slot_name +-------------- +isolation_slot +(1 row) + +step s1_commit: COMMIT; +step s0_vacuum: VACUUM pg_attribute; +step s0_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); +data +------------------------------------------------------ +BEGIN +table public.harvest: INSERT: fruits[basket]:'(1,2,3)' +COMMIT +(3 rows) + +?column? +-------- +stop +(1 row) + diff --git a/contrib/test_decoding/meson.build b/contrib/test_decoding/meson.build index 54d65d3f30f8a..25f6b8a90826b 100644 --- a/contrib/test_decoding/meson.build +++ b/contrib/test_decoding/meson.build @@ -63,6 +63,7 @@ tests += { 'twophase_snapshot', 'slot_creation_error', 'skip_snapshot_restore', + 'invalidation_distribution', ], 'regress_args': [ '--temp-config', files('logical.conf'), diff --git a/contrib/test_decoding/specs/invalidation_distribution.spec b/contrib/test_decoding/specs/invalidation_distribution.spec new file mode 100644 index 0000000000000..67d41969ac1d6 --- /dev/null +++ b/contrib/test_decoding/specs/invalidation_distribution.spec @@ -0,0 +1,43 @@ +# Test that catalog cache invalidation messages are distributed to ongoing +# transactions, ensuring they can access the updated catalog content after +# processing these messages. +setup +{ + SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'pgoutput'); + CREATE TABLE tbl1(val1 integer, val2 integer); + CREATE PUBLICATION pub; +} + +teardown +{ + DROP TABLE tbl1; + DROP PUBLICATION pub; + SELECT 'stop' FROM pg_drop_replication_slot('isolation_slot'); +} + +session "s1" +setup { SET synchronous_commit=on; } + +step "s1_begin" { BEGIN; } +step "s1_insert_tbl1" { INSERT INTO tbl1 (val1, val2) VALUES (1, 1); } +step "s1_commit" { COMMIT; } + +session "s2" +setup { SET synchronous_commit=on; } + +step "s2_alter_pub_add_tbl" { ALTER PUBLICATION pub ADD TABLE tbl1; } +step "s2_get_binary_changes" { SELECT count(data) FROM pg_logical_slot_get_binary_changes('isolation_slot', NULL, NULL, 'proto_version', '4', 'publication_names', 'pub') WHERE get_byte(data, 0) = 73; } + +session "s3" +setup { SET synchronous_commit=on; } +step "s3_begin" { BEGIN; } +step "s3_insert_tbl1" { INSERT INTO tbl1 (val1, val2) VALUES (2, 2); } +step "s3_commit" { COMMIT; } + +# Expect to get one insert change. LOGICAL_REP_MSG_INSERT = 'I' +permutation "s1_insert_tbl1" "s1_begin" "s1_insert_tbl1" "s2_alter_pub_add_tbl" "s1_commit" "s1_insert_tbl1" "s2_get_binary_changes" + +# Expect to get one insert change with LOGICAL_REP_MSG_INSERT = 'I' from +# the second "s1_insert_tbl1" executed after adding the table tbl1 to the +# publication in "s2_alter_pub_add_tbl". +permutation "s1_begin" "s1_insert_tbl1" "s3_begin" "s3_insert_tbl1" "s2_alter_pub_add_tbl" "s1_insert_tbl1" "s1_commit" "s3_commit" "s2_get_binary_changes" diff --git a/contrib/test_decoding/specs/oldest_xmin.spec b/contrib/test_decoding/specs/oldest_xmin.spec index 88bd30f5ff76c..7f2fe3d7ed776 100644 --- a/contrib/test_decoding/specs/oldest_xmin.spec +++ b/contrib/test_decoding/specs/oldest_xmin.spec @@ -25,6 +25,7 @@ step "s0_commit" { COMMIT; } step "s0_checkpoint" { CHECKPOINT; } step "s0_vacuum" { VACUUM pg_attribute; } step "s0_get_changes" { SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); } +step "s0_advance_slot" { SELECT slot_name FROM pg_replication_slot_advance('isolation_slot', pg_current_wal_lsn()); } session "s1" setup { SET synchronous_commit=on; } @@ -40,3 +41,7 @@ step "s1_commit" { COMMIT; } # will be removed (xmax set) before T1 commits. That is, interlocking doesn't # forbid modifying catalog after someone read it (and didn't commit yet). permutation "s0_begin" "s0_getxid" "s1_begin" "s1_insert" "s0_alter" "s0_commit" "s0_checkpoint" "s0_get_changes" "s0_get_changes" "s1_commit" "s0_vacuum" "s0_get_changes" + +# Perform the same testing process as described above, but use advance_slot to +# forces xmin advancement during fast forward decoding. +permutation "s0_begin" "s0_getxid" "s1_begin" "s1_insert" "s0_alter" "s0_commit" "s0_checkpoint" "s0_advance_slot" "s0_advance_slot" "s1_commit" "s0_vacuum" "s0_get_changes" diff --git a/contrib/test_decoding/test_decoding.c b/contrib/test_decoding/test_decoding.c index bb495563200c3..f671a7d4b3125 100644 --- a/contrib/test_decoding/test_decoding.c +++ b/contrib/test_decoding/test_decoding.c @@ -581,7 +581,7 @@ tuple_to_stringinfo(StringInfo s, TupleDesc tupdesc, HeapTuple tuple, bool skip_ /* print data */ if (isnull) appendStringInfoString(s, "null"); - else if (typisvarlena && VARATT_IS_EXTERNAL_ONDISK(origval)) + else if (typisvarlena && VARATT_IS_EXTERNAL_ONDISK(DatumGetPointer(origval))) appendStringInfoString(s, "unchanged-toast-datum"); else if (!typisvarlena) print_literal(s, typid, diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c index 23d3f332dbaa7..4ac291c8251f7 100644 --- a/contrib/xml2/xpath.c +++ b/contrib/xml2/xpath.c @@ -51,8 +51,8 @@ static text *pgxml_result_to_text(xmlXPathObjectPtr res, xmlChar *toptag, static xmlChar *pgxml_texttoxmlchar(text *textstring); -static xmlXPathObjectPtr pgxml_xpath(text *document, xmlChar *xpath, - xpath_workspace *workspace); +static xpath_workspace *pgxml_xpath(text *document, xmlChar *xpath, + PgXmlErrorContext *xmlerrcxt); static void cleanup_workspace(xpath_workspace *workspace); @@ -88,19 +88,41 @@ Datum xml_encode_special_chars(PG_FUNCTION_ARGS) { text *tin = PG_GETARG_TEXT_PP(0); - text *tout; - xmlChar *ts, - *tt; + text *volatile tout = NULL; + xmlChar *volatile tt = NULL; + PgXmlErrorContext *xmlerrcxt; + + xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); + + PG_TRY(); + { + xmlChar *ts; - ts = pgxml_texttoxmlchar(tin); + ts = pgxml_texttoxmlchar(tin); + + tt = xmlEncodeSpecialChars(NULL, ts); + if (tt == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate xmlChar"); + pfree(ts); + + tout = cstring_to_text((char *) tt); + } + PG_CATCH(); + { + if (tt != NULL) + xmlFree(tt); - tt = xmlEncodeSpecialChars(NULL, ts); + pg_xml_done(xmlerrcxt, true); - pfree(ts); + PG_RE_THROW(); + } + PG_END_TRY(); - tout = cstring_to_text((char *) tt); + if (tt != NULL) + xmlFree(tt); - xmlFree(tt); + pg_xml_done(xmlerrcxt, false); PG_RETURN_TEXT_P(tout); } @@ -122,62 +144,89 @@ pgxmlNodeSetToText(xmlNodeSetPtr nodeset, xmlChar *septagname, xmlChar *plainsep) { - xmlBufferPtr buf; - xmlChar *result; - int i; + volatile xmlBufferPtr buf = NULL; + xmlChar *volatile result = NULL; + PgXmlErrorContext *xmlerrcxt; - buf = xmlBufferCreate(); + /* spin up some error handling */ + xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); - if ((toptagname != NULL) && (xmlStrlen(toptagname) > 0)) - { - xmlBufferWriteChar(buf, "<"); - xmlBufferWriteCHAR(buf, toptagname); - xmlBufferWriteChar(buf, ">"); - } - if (nodeset != NULL) + PG_TRY(); { - for (i = 0; i < nodeset->nodeNr; i++) - { - if (plainsep != NULL) - { - xmlBufferWriteCHAR(buf, - xmlXPathCastNodeToString(nodeset->nodeTab[i])); + buf = xmlBufferCreate(); - /* If this isn't the last entry, write the plain sep. */ - if (i < (nodeset->nodeNr) - 1) - xmlBufferWriteChar(buf, (char *) plainsep); - } - else + if (buf == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate xmlBuffer"); + + if ((toptagname != NULL) && (xmlStrlen(toptagname) > 0)) + { + xmlBufferWriteChar(buf, "<"); + xmlBufferWriteCHAR(buf, toptagname); + xmlBufferWriteChar(buf, ">"); + } + if (nodeset != NULL) + { + for (int i = 0; i < nodeset->nodeNr; i++) { - if ((septagname != NULL) && (xmlStrlen(septagname) > 0)) + if (plainsep != NULL) { - xmlBufferWriteChar(buf, "<"); - xmlBufferWriteCHAR(buf, septagname); - xmlBufferWriteChar(buf, ">"); - } - xmlNodeDump(buf, - nodeset->nodeTab[i]->doc, - nodeset->nodeTab[i], - 1, 0); + xmlBufferWriteCHAR(buf, + xmlXPathCastNodeToString(nodeset->nodeTab[i])); - if ((septagname != NULL) && (xmlStrlen(septagname) > 0)) + /* If this isn't the last entry, write the plain sep. */ + if (i < (nodeset->nodeNr) - 1) + xmlBufferWriteChar(buf, (char *) plainsep); + } + else { - xmlBufferWriteChar(buf, ""); + if ((septagname != NULL) && (xmlStrlen(septagname) > 0)) + { + xmlBufferWriteChar(buf, "<"); + xmlBufferWriteCHAR(buf, septagname); + xmlBufferWriteChar(buf, ">"); + } + xmlNodeDump(buf, + nodeset->nodeTab[i]->doc, + nodeset->nodeTab[i], + 1, 0); + + if ((septagname != NULL) && (xmlStrlen(septagname) > 0)) + { + xmlBufferWriteChar(buf, ""); + } } } } - } - if ((toptagname != NULL) && (xmlStrlen(toptagname) > 0)) + if ((toptagname != NULL) && (xmlStrlen(toptagname) > 0)) + { + xmlBufferWriteChar(buf, ""); + } + + result = xmlStrdup(xmlBufferContent(buf)); + if (result == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate result"); + } + PG_CATCH(); { - xmlBufferWriteChar(buf, ""); + if (buf) + xmlBufferFree(buf); + + pg_xml_done(xmlerrcxt, true); + + PG_RE_THROW(); } - result = xmlStrdup(buf->content); + PG_END_TRY(); + xmlBufferFree(buf); + pg_xml_done(xmlerrcxt, false); + return result; } @@ -207,17 +256,30 @@ xpath_nodeset(PG_FUNCTION_ARGS) xmlChar *toptag = pgxml_texttoxmlchar(PG_GETARG_TEXT_PP(2)); xmlChar *septag = pgxml_texttoxmlchar(PG_GETARG_TEXT_PP(3)); xmlChar *xpath; - text *xpres; - xmlXPathObjectPtr res; - xpath_workspace workspace; + text *volatile xpres = NULL; + xpath_workspace *volatile workspace = NULL; + PgXmlErrorContext *xmlerrcxt; xpath = pgxml_texttoxmlchar(xpathsupp); + xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY); - res = pgxml_xpath(document, xpath, &workspace); + PG_TRY(); + { + workspace = pgxml_xpath(document, xpath, xmlerrcxt); + xpres = pgxml_result_to_text(workspace->res, toptag, septag, NULL); + } + PG_CATCH(); + { + if (workspace) + cleanup_workspace(workspace); - xpres = pgxml_result_to_text(res, toptag, septag, NULL); + pg_xml_done(xmlerrcxt, true); + PG_RE_THROW(); + } + PG_END_TRY(); - cleanup_workspace(&workspace); + cleanup_workspace(workspace); + pg_xml_done(xmlerrcxt, false); pfree(xpath); @@ -239,17 +301,30 @@ xpath_list(PG_FUNCTION_ARGS) text *xpathsupp = PG_GETARG_TEXT_PP(1); /* XPath expression */ xmlChar *plainsep = pgxml_texttoxmlchar(PG_GETARG_TEXT_PP(2)); xmlChar *xpath; - text *xpres; - xmlXPathObjectPtr res; - xpath_workspace workspace; + text *volatile xpres = NULL; + xpath_workspace *volatile workspace = NULL; + PgXmlErrorContext *xmlerrcxt; xpath = pgxml_texttoxmlchar(xpathsupp); + xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY); - res = pgxml_xpath(document, xpath, &workspace); + PG_TRY(); + { + workspace = pgxml_xpath(document, xpath, xmlerrcxt); + xpres = pgxml_result_to_text(workspace->res, NULL, NULL, plainsep); + } + PG_CATCH(); + { + if (workspace) + cleanup_workspace(workspace); - xpres = pgxml_result_to_text(res, NULL, NULL, plainsep); + pg_xml_done(xmlerrcxt, true); + PG_RE_THROW(); + } + PG_END_TRY(); - cleanup_workspace(&workspace); + cleanup_workspace(workspace); + pg_xml_done(xmlerrcxt, false); pfree(xpath); @@ -268,9 +343,9 @@ xpath_string(PG_FUNCTION_ARGS) text *xpathsupp = PG_GETARG_TEXT_PP(1); /* XPath expression */ xmlChar *xpath; int32 pathsize; - text *xpres; - xmlXPathObjectPtr res; - xpath_workspace workspace; + text *volatile xpres = NULL; + xpath_workspace *volatile workspace = NULL; + PgXmlErrorContext *xmlerrcxt; pathsize = VARSIZE_ANY_EXHDR(xpathsupp); @@ -286,11 +361,25 @@ xpath_string(PG_FUNCTION_ARGS) xpath[pathsize + 7] = ')'; xpath[pathsize + 8] = '\0'; - res = pgxml_xpath(document, xpath, &workspace); + xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY); + + PG_TRY(); + { + workspace = pgxml_xpath(document, xpath, xmlerrcxt); + xpres = pgxml_result_to_text(workspace->res, NULL, NULL, NULL); + } + PG_CATCH(); + { + if (workspace) + cleanup_workspace(workspace); - xpres = pgxml_result_to_text(res, NULL, NULL, NULL); + pg_xml_done(xmlerrcxt, true); + PG_RE_THROW(); + } + PG_END_TRY(); - cleanup_workspace(&workspace); + cleanup_workspace(workspace); + pg_xml_done(xmlerrcxt, false); pfree(xpath); @@ -308,24 +397,38 @@ xpath_number(PG_FUNCTION_ARGS) text *document = PG_GETARG_TEXT_PP(0); text *xpathsupp = PG_GETARG_TEXT_PP(1); /* XPath expression */ xmlChar *xpath; - float4 fRes; - xmlXPathObjectPtr res; - xpath_workspace workspace; + volatile float4 fRes = 0.0; + volatile bool isNull = false; + xpath_workspace *volatile workspace = NULL; + PgXmlErrorContext *xmlerrcxt; xpath = pgxml_texttoxmlchar(xpathsupp); + xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY); - res = pgxml_xpath(document, xpath, &workspace); - - pfree(xpath); + PG_TRY(); + { + workspace = pgxml_xpath(document, xpath, xmlerrcxt); + pfree(xpath); - if (res == NULL) - PG_RETURN_NULL(); + if (workspace->res == NULL) + isNull = true; + else + fRes = xmlXPathCastToNumber(workspace->res); + } + PG_CATCH(); + { + if (workspace) + cleanup_workspace(workspace); - fRes = xmlXPathCastToNumber(res); + pg_xml_done(xmlerrcxt, true); + PG_RE_THROW(); + } + PG_END_TRY(); - cleanup_workspace(&workspace); + cleanup_workspace(workspace); + pg_xml_done(xmlerrcxt, false); - if (xmlXPathIsNaN(fRes)) + if (isNull || xmlXPathIsNaN(fRes)) PG_RETURN_NULL(); PG_RETURN_FLOAT4(fRes); @@ -340,22 +443,35 @@ xpath_bool(PG_FUNCTION_ARGS) text *document = PG_GETARG_TEXT_PP(0); text *xpathsupp = PG_GETARG_TEXT_PP(1); /* XPath expression */ xmlChar *xpath; - int bRes; - xmlXPathObjectPtr res; - xpath_workspace workspace; + volatile int bRes = 0; + xpath_workspace *volatile workspace = NULL; + PgXmlErrorContext *xmlerrcxt; xpath = pgxml_texttoxmlchar(xpathsupp); + xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY); - res = pgxml_xpath(document, xpath, &workspace); - - pfree(xpath); + PG_TRY(); + { + workspace = pgxml_xpath(document, xpath, xmlerrcxt); + pfree(xpath); - if (res == NULL) - PG_RETURN_BOOL(false); + if (workspace->res == NULL) + bRes = 0; + else + bRes = xmlXPathCastToBoolean(workspace->res); + } + PG_CATCH(); + { + if (workspace) + cleanup_workspace(workspace); - bRes = xmlXPathCastToBoolean(res); + pg_xml_done(xmlerrcxt, true); + PG_RE_THROW(); + } + PG_END_TRY(); - cleanup_workspace(&workspace); + cleanup_workspace(workspace); + pg_xml_done(xmlerrcxt, false); PG_RETURN_BOOL(bRes); } @@ -364,57 +480,39 @@ xpath_bool(PG_FUNCTION_ARGS) /* Core function to evaluate XPath query */ -static xmlXPathObjectPtr -pgxml_xpath(text *document, xmlChar *xpath, xpath_workspace *workspace) +static xpath_workspace * +pgxml_xpath(text *document, xmlChar *xpath, PgXmlErrorContext *xmlerrcxt) { int32 docsize = VARSIZE_ANY_EXHDR(document); - PgXmlErrorContext *xmlerrcxt; xmlXPathCompExprPtr comppath; + xpath_workspace *workspace = (xpath_workspace *) + palloc0(sizeof(xpath_workspace)); workspace->doctree = NULL; workspace->ctxt = NULL; workspace->res = NULL; - xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY); - - PG_TRY(); + workspace->doctree = xmlReadMemory((char *) VARDATA_ANY(document), + docsize, NULL, NULL, + XML_PARSE_NOENT); + if (workspace->doctree != NULL) { - workspace->doctree = xmlReadMemory((char *) VARDATA_ANY(document), - docsize, NULL, NULL, - XML_PARSE_NOENT); - if (workspace->doctree != NULL) - { - workspace->ctxt = xmlXPathNewContext(workspace->doctree); - workspace->ctxt->node = xmlDocGetRootElement(workspace->doctree); - - /* compile the path */ - comppath = xmlXPathCtxtCompile(workspace->ctxt, xpath); - if (comppath == NULL) - xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_ARGUMENT_FOR_XQUERY, - "XPath Syntax Error"); + workspace->ctxt = xmlXPathNewContext(workspace->doctree); + workspace->ctxt->node = xmlDocGetRootElement(workspace->doctree); - /* Now evaluate the path expression. */ - workspace->res = xmlXPathCompiledEval(comppath, workspace->ctxt); + /* compile the path */ + comppath = xmlXPathCtxtCompile(workspace->ctxt, xpath); + if (comppath == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_ARGUMENT_FOR_XQUERY, + "XPath Syntax Error"); - xmlXPathFreeCompExpr(comppath); - } - } - PG_CATCH(); - { - cleanup_workspace(workspace); - - pg_xml_done(xmlerrcxt, true); + /* Now evaluate the path expression. */ + workspace->res = xmlXPathCompiledEval(comppath, workspace->ctxt); - PG_RE_THROW(); + xmlXPathFreeCompExpr(comppath); } - PG_END_TRY(); - if (workspace->res == NULL) - cleanup_workspace(workspace); - - pg_xml_done(xmlerrcxt, false); - - return workspace->res; + return workspace; } /* Clean up after processing the result of pgxml_xpath() */ @@ -438,35 +536,60 @@ pgxml_result_to_text(xmlXPathObjectPtr res, xmlChar *septag, xmlChar *plainsep) { - xmlChar *xpresstr; - text *xpres; + xmlChar *volatile xpresstr = NULL; + text *volatile xpres = NULL; + PgXmlErrorContext *xmlerrcxt; if (res == NULL) return NULL; - switch (res->type) - { - case XPATH_NODESET: - xpresstr = pgxmlNodeSetToText(res->nodesetval, - toptag, - septag, plainsep); - break; + /* spin some error handling */ + xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); - case XPATH_STRING: - xpresstr = xmlStrdup(res->stringval); - break; + PG_TRY(); + { + switch (res->type) + { + case XPATH_NODESET: + xpresstr = pgxmlNodeSetToText(res->nodesetval, + toptag, + septag, plainsep); + break; + + case XPATH_STRING: + xpresstr = xmlStrdup(res->stringval); + if (xpresstr == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate result"); + break; + + default: + elog(NOTICE, "unsupported XQuery result: %d", res->type); + xpresstr = xmlStrdup((const xmlChar *) ""); + if (xpresstr == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate result"); + } - default: - elog(NOTICE, "unsupported XQuery result: %d", res->type); - xpresstr = xmlStrdup((const xmlChar *) ""); + /* Now convert this result back to text */ + xpres = cstring_to_text((char *) xpresstr); } + PG_CATCH(); + { + if (xpresstr != NULL) + xmlFree(xpresstr); - /* Now convert this result back to text */ - xpres = cstring_to_text((char *) xpresstr); + pg_xml_done(xmlerrcxt, true); + + PG_RE_THROW(); + } + PG_END_TRY(); /* Free various storage */ xmlFree(xpresstr); + pg_xml_done(xmlerrcxt, false); + return xpres; } @@ -648,11 +771,16 @@ xpath_table(PG_FUNCTION_ARGS) for (j = 0; j < numpaths; j++) { ctxt = xmlXPathNewContext(doctree); + if (ctxt == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, + ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate XPath context"); + ctxt->node = xmlDocGetRootElement(doctree); /* compile the path */ comppath = xmlXPathCtxtCompile(ctxt, xpaths[j]); - if (comppath == NULL) + if (comppath == NULL || pg_xml_error_occurred(xmlerrcxt)) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_ARGUMENT_FOR_XQUERY, "XPath Syntax Error"); @@ -671,6 +799,10 @@ xpath_table(PG_FUNCTION_ARGS) rownr < res->nodesetval->nodeNr) { resstr = xmlXPathCastNodeToString(res->nodesetval->nodeTab[rownr]); + if (resstr == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, + ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate result"); had_values = true; } else @@ -680,11 +812,19 @@ xpath_table(PG_FUNCTION_ARGS) case XPATH_STRING: resstr = xmlStrdup(res->stringval); + if (resstr == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, + ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate result"); break; default: elog(NOTICE, "unsupported XQuery result: %d", res->type); resstr = xmlStrdup((const xmlChar *) ""); + if (resstr == NULL || pg_xml_error_occurred(xmlerrcxt)) + xml_ereport(xmlerrcxt, + ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate result"); } /* diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c index b720d89f754ae..53550c7dc2406 100644 --- a/contrib/xml2/xslt_proc.c +++ b/contrib/xml2/xslt_proc.c @@ -48,7 +48,7 @@ xslt_process(PG_FUNCTION_ARGS) text *doct = PG_GETARG_TEXT_PP(0); text *ssheet = PG_GETARG_TEXT_PP(1); - text *result; + text *volatile result = NULL; text *paramstr; const char **params; PgXmlErrorContext *xmlerrcxt; @@ -58,8 +58,7 @@ xslt_process(PG_FUNCTION_ARGS) volatile xsltSecurityPrefsPtr xslt_sec_prefs = NULL; volatile xsltTransformContextPtr xslt_ctxt = NULL; volatile int resstat = -1; - xmlChar *resstr = NULL; - int reslen = 0; + xmlChar *volatile resstr = NULL; if (fcinfo->nargs == 3) { @@ -80,13 +79,14 @@ xslt_process(PG_FUNCTION_ARGS) { xmlDocPtr ssdoc; bool xslt_sec_prefs_error; + int reslen = 0; /* Parse document */ doctree = xmlReadMemory((char *) VARDATA_ANY(doct), VARSIZE_ANY_EXHDR(doct), NULL, NULL, XML_PARSE_NOENT); - if (doctree == NULL) + if (doctree == NULL || pg_xml_error_occurred(xmlerrcxt)) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_DOCUMENT, "error parsing XML document"); @@ -95,14 +95,14 @@ xslt_process(PG_FUNCTION_ARGS) VARSIZE_ANY_EXHDR(ssheet), NULL, NULL, XML_PARSE_NOENT); - if (ssdoc == NULL) + if (ssdoc == NULL || pg_xml_error_occurred(xmlerrcxt)) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_DOCUMENT, "error parsing stylesheet as XML document"); /* After this call we need not free ssdoc separately */ stylesheet = xsltParseStylesheetDoc(ssdoc); - if (stylesheet == NULL) + if (stylesheet == NULL || pg_xml_error_occurred(xmlerrcxt)) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_ARGUMENT_FOR_XQUERY, "failed to parse stylesheet"); @@ -137,11 +137,15 @@ xslt_process(PG_FUNCTION_ARGS) restree = xsltApplyStylesheetUser(stylesheet, doctree, params, NULL, NULL, xslt_ctxt); - if (restree == NULL) + if (restree == NULL || pg_xml_error_occurred(xmlerrcxt)) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_ARGUMENT_FOR_XQUERY, "failed to apply stylesheet"); - resstat = xsltSaveResultToString(&resstr, &reslen, restree, stylesheet); + resstat = xsltSaveResultToString((xmlChar **) &resstr, &reslen, + restree, stylesheet); + + if (resstat >= 0) + result = cstring_to_text_with_len((char *) resstr, reslen); } PG_CATCH(); { @@ -155,6 +159,8 @@ xslt_process(PG_FUNCTION_ARGS) xsltFreeStylesheet(stylesheet); if (doctree != NULL) xmlFreeDoc(doctree); + if (resstr != NULL) + xmlFree(resstr); xsltCleanupGlobals(); pg_xml_done(xmlerrcxt, true); @@ -170,17 +176,15 @@ xslt_process(PG_FUNCTION_ARGS) xmlFreeDoc(doctree); xsltCleanupGlobals(); + if (resstr) + xmlFree(resstr); + pg_xml_done(xmlerrcxt, false); /* XXX this is pretty dubious, really ought to throw error instead */ if (resstat < 0) PG_RETURN_NULL(); - result = cstring_to_text_with_len((char *) resstr, reslen); - - if (resstr) - xmlFree(resstr); - PG_RETURN_TEXT_P(result); #else /* !USE_LIBXSLT */ diff --git a/doc/src/sgml/README.non-ASCII b/doc/src/sgml/README.non-ASCII index 9c21e02e8f220..e9065a33ad6f2 100644 --- a/doc/src/sgml/README.non-ASCII +++ b/doc/src/sgml/README.non-ASCII @@ -22,13 +22,14 @@ others only support Latin-1 characters. Specifically, the PDF rendering engine can only display Latin-1 characters; non-Latin-1 Unicode characters are displayed as "###". -Therefore, in the SGML files, we only use Latin-1 characters. We -typically encode these characters as HTML entities, e.g., Álvaro. -It is also possible to safely represent Latin-1 characters in UTF8 -encoding for all output formats. +Therefore, in the SGML files, we can only use Latin-1 characters. We +can use UTF8 representations of Latin-1 characters, or HTML entities of +Latin-1 characters, e.g., Álvaro. Do not use UTF numeric character escapes (&#nnn;). +When building the PDF docs, problem characters will appear as warnings. + HTML entities official: http://www.w3.org/TR/html4/sgml/entities.html one page: http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html diff --git a/doc/src/sgml/amcheck.sgml b/doc/src/sgml/amcheck.sgml index 98f836e15e79e..0aff0a6c8c6fc 100644 --- a/doc/src/sgml/amcheck.sgml +++ b/doc/src/sgml/amcheck.sgml @@ -201,7 +201,7 @@ ORDER BY c.relpages DESC LIMIT 10; gin_index_check tests that its target GIN index has consistent parent-child tuples relations (no parent tuples - require tuple adjustement) and page graph respects balanced-tree + require tuple adjustment) and page graph respects balanced-tree invariants (internal pages reference only leaf page or only internal pages). @@ -278,8 +278,8 @@ SET client_min_messages = DEBUG1; TOAST table. - This option is known to be slow. Also, if the toast table or its - index is corrupt, checking it against toast values could conceivably + This option is known to be slow. Also, if the TOAST table or its + index is corrupt, checking it against TOAST values could conceivably crash the server, although in many cases this would just produce an error. diff --git a/doc/src/sgml/backup.sgml b/doc/src/sgml/backup.sgml index 25b8904baf7cd..5f7489afbd165 100644 --- a/doc/src/sgml/backup.sgml +++ b/doc/src/sgml/backup.sgml @@ -991,7 +991,7 @@ SELECT pg_backup_start(label => 'label', fast => false); usually preferable as it minimizes the impact on the running system. If you want to start the backup as soon as possible, pass true as the second parameter to pg_backup_start and it will - request an immediate checkpoint, which will finish as fast as possible using + request a fast checkpoint, which will finish as fast as possible using as much I/O as possible. diff --git a/doc/src/sgml/bki.sgml b/doc/src/sgml/bki.sgml index 3cd5bee7ffaf4..53a982bf60d29 100644 --- a/doc/src/sgml/bki.sgml +++ b/doc/src/sgml/bki.sgml @@ -1042,7 +1042,7 @@ $ perl rewrite_dat_with_prokind.pl pg_proc.dat - Define indexes and toast tables. + Define indexes and TOAST tables. diff --git a/doc/src/sgml/btree-gist.sgml b/doc/src/sgml/btree-gist.sgml index 31e7c78aaef49..a4c1b99be1faf 100644 --- a/doc/src/sgml/btree-gist.sgml +++ b/doc/src/sgml/btree-gist.sgml @@ -52,6 +52,13 @@ oid, and money. + + By default btree_gist builds GiST index with + sortsupport in sorted mode. This usually results in + much faster index built speed. It is still possible to revert to buffered built strategy + by using the buffering parameter when creating the index. + + This module is considered trusted, that is, it can be installed by non-superusers who have CREATE privilege diff --git a/doc/src/sgml/btree.sgml b/doc/src/sgml/btree.sgml index 2b3997988cff0..027361f20bbed 100644 --- a/doc/src/sgml/btree.sgml +++ b/doc/src/sgml/btree.sgml @@ -207,7 +207,7 @@ As shown in , btree defines - one required and four optional support functions. The five + one required and five optional support functions. The six user-defined methods are: @@ -583,6 +583,35 @@ options(relopts local_relopts *) returns + + skipsupport + + + Optionally, a btree operator family may provide a skip + support function, registered under support function number 6. + These functions give the B-tree code a way to iterate through every + possible value that can be represented by an operator class's underlying + input type, in key space order. This is used by the core code when it + applies the skip scan optimization. The APIs involved in this are + defined in src/include/utils/skipsupport.h. + + + Operator classes that do not provide a skip support function are still + eligible to use skip scan. The core code can still use its fallback + strategy, though that might be suboptimal for some discrete types. It + usually doesn't make sense (and may not even be feasible) for operator + classes on continuous types to provide a skip support function. + + + It is not sensible for an operator family to register a cross-type + skipsupport function, and attempting to do so will + result in an error. This is because determining the next indexable value + must happen by incrementing a value copied from an index tuple. The + values generated must all be of the same underlying data type (the + skipped index column's opclass input type). + + + diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index fb05063555153..da8a78825809f 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1260,7 +1260,7 @@ attnotnull bool - This column has a not-null constraint. + This column has a (possibly invalid) not-null constraint. @@ -1582,7 +1582,7 @@ rolpassword text - Password (possibly encrypted); null if none. The format depends + Encrypted password; null if none. The format depends on the form of encryption used. @@ -1627,11 +1627,6 @@ SCRAM-SHA-256$<iteration count>:&l ServerKey are in Base64 encoded format. This format is the same as that specified by RFC 5803. - - - A password that does not follow either of those formats is assumed to be - unencrypted. - @@ -1956,7 +1951,7 @@ SCRAM-SHA-256$<iteration count>:&l The OID of the data type that corresponds to this table's row type, - if any; zero for indexes, sequences, and toast tables, which have + if any; zero for indexes, sequences, and TOAST tables, which have no pg_type entry @@ -2620,7 +2615,6 @@ SCRAM-SHA-256$<iteration count>:&l Is the constraint enforced? - Currently, can be false only for CHECK constraints @@ -2630,7 +2624,6 @@ SCRAM-SHA-256$<iteration count>:&l Has the constraint been validated? - Currently, can be false only for foreign keys and CHECK constraints @@ -3165,7 +3158,7 @@ SCRAM-SHA-256$<iteration count>:&l datcollate text - LC_COLLATE for this database + LC_COLLATE for this database (ignored unless datlocprovider is c) @@ -3361,7 +3354,8 @@ SCRAM-SHA-256$<iteration count>:&l S = sequence, f = function, T = type, - n = schema + n = schema, + L = large object @@ -7977,7 +7971,7 @@ SCRAM-SHA-256$<iteration count>:&l Finish LSN of the transaction whose changes are to be skipped, if a valid - LSN; otherwise 0/0. + LSN; otherwise 0/0000000. @@ -8088,6 +8082,18 @@ SCRAM-SHA-256$<iteration count>:&l + + + subretaindeadtuples bool + + + If true, the detection of is + enabled and the information (e.g., dead tuples, commit timestamps, and + origins) on the subscriber that is useful for conflict detection is + retained. + + + subconninfo text diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml index 5a0e97f6f3158..59b27c3c370e2 100644 --- a/doc/src/sgml/charset.sgml +++ b/doc/src/sgml/charset.sgml @@ -100,7 +100,7 @@ initdb --locale=sv_SE LC_COLLATE - String sort order + String sort order (ignored unless the provider is libc) LC_CTYPE diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 832b616a7bbff..51b95ed04f399 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -1003,8 +1003,9 @@ local db1,db2,@demodbs all md5 the remainder of the field is treated as a regular expression. (See for details of PostgreSQL's regular expression syntax.) The regular - expression can include a single capture, or parenthesized subexpression, - which can then be referenced in the database-username + expression can include a single capture, or parenthesized subexpression. + The portion of the system user name that matched the capture can then + be referenced in the database-username field as \1 (backslash-one). This allows the mapping of multiple user names in a single line, which is particularly useful for simple syntax substitutions. For example, these entries @@ -1022,12 +1023,11 @@ mymap /^(.*)@otherdomain\.com$ guest If the database-username field starts with a slash (/), the remainder of the field is treated - as a regular expression (see - for details of PostgreSQL's regular - expression syntax). It is not possible to use \1 - to use a capture from regular expression on - system-username for a regular expression - on database-username. + as a regular expression. + When the database-username field is a regular + expression, it is not possible to use \1 within it to + refer to a capture from the system-username + field. diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index fea683cb49ce0..0a4b3e55ba5ed 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -140,7 +140,7 @@ An example of what this file might look like is: # This is a comment -log_connections = yes +log_connections = all log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB @@ -337,7 +337,7 @@ UPDATE pg_settings SET setting = reset_val WHERE name = 'configuration_parameter command-line parameter, or its equivalent variation. For example, -postgres -c log_connections=yes --log-destination='syslog' +postgres -c log_connections=all --log-destination='syslog' Settings provided in this way override those set via postgresql.conf or ALTER SYSTEM, @@ -1155,6 +1155,22 @@ include_dir 'conf.d' + + md5_password_warnings (boolean) + + md5_password_warnings configuration parameter + + + + + Controls whether a WARNING about MD5 password + deprecation is produced when a CREATE ROLE or + ALTER ROLE statement sets an MD5-encrypted password. + The default value is on. + + + + krb_server_keyfile (string) @@ -2347,6 +2363,44 @@ include_dir 'conf.d' + + file_copy_method (enum) + + file_copy_method configuration parameter + + + + + Specifies the method used to copy files. + Possible values are COPY (default) and + CLONE (if operating support is available). + + + + This parameter affects: + + + + + CREATE DATABASE ... STRATEGY=FILE_COPY + + + + + ALTER DATABASE ... SET TABLESPACE ... + + + + + + CLONE uses the copy_file_range() + (Linux, FreeBSD) or copyfile + (macOS) system calls, giving the kernel the opportunity to share disk + blocks or push work down to lower layers on some file systems. + + + + max_notify_queue_pages (integer) @@ -2379,8 +2433,9 @@ include_dir 'conf.d' Sets the maximum number of open files each server subprocess is - allowed to open simultaneously, in addition to the files already open - in postmaster. The default is one thousand files. + allowed to open simultaneously; files already opened in the + postmaster are not counted toward this limit. The default is one + thousand files. If the kernel is enforcing @@ -2724,6 +2779,7 @@ include_dir 'conf.d' + The default is worker. This parameter can only be set at server start. @@ -2732,7 +2788,7 @@ include_dir 'conf.d' - io_workers (int) + io_workers (integer) io_workers configuration parameter @@ -2838,7 +2894,8 @@ include_dir 'conf.d' Sets the maximum number of parallel workers that can be started by a single utility command. Currently, the parallel utility commands that support the use of parallel workers are - CREATE INDEX when building a B-tree or BRIN index, + CREATE INDEX when building a B-tree, + GIN, or BRIN index, and VACUUM without FULL option. Parallel workers are taken from the pool of processes established by , limited @@ -3342,8 +3399,9 @@ include_dir 'conf.d' This parameter enables compression of WAL using the specified compression method. When enabled, the PostgreSQL - server compresses full page images written to WAL when - is on or during a base backup. + server compresses full page images written to WAL (e.g. when + is on, during a base backup, + etc.). A compressed page image will be decompressed during WAL replay. The supported methods are pglz, lz4 (if PostgreSQL @@ -4473,7 +4531,6 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows max_replication_slots (integer) max_replication_slots configuration parameter - in a sending server @@ -4562,10 +4619,12 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows - Invalidate replication slots that have remained idle longer than this - duration. If this value is specified without units, it is taken as - minutes. A value of zero (the default) disables the idle timeout - invalidation mechanism. This parameter can only be set in the + Invalidate replication slots that have remained inactive (not used by + a replication connection) + for longer than this duration. + If this value is specified without units, it is taken as seconds. + A value of zero (the default) disables the idle timeout + invalidation mechanism. This parameter can only be set in the postgresql.conf file or on the server command line. @@ -4907,6 +4966,8 @@ ANY num_sync ( num_sync ( num_sync ( + enable_self_join_elimination (boolean) enable_self_join_elimination configuration parameter @@ -7474,12 +7534,12 @@ local0.* /var/log/postgresql setup_durations Logs the time spent establishing the connection and setting up the - backend at the time the connection is ready to execute its first - query. The log message includes the total setup duration, starting - from the postmaster accepting the incoming connection and ending - when the connection is ready for query. It also includes the time - it took to fork the new backend and the time it took to - authenticate the user. + backend until the connection is ready to execute its first + query. The log message includes three durations: the total + setup duration (starting from the postmaster accepting the + incoming connection and ending when the connection is ready + for query), the time it took to fork the new backend, and + the time it took to authenticate the user. @@ -7689,6 +7749,12 @@ local0.* /var/log/postgresql Remote host name or IP address yes + + %L + Local address (the IP address on the server that the + client connected to) + yes + %b Backend type @@ -7864,10 +7930,10 @@ log_line_prefix = '%m [%p] %q%u@%d/%a ' - - log_lock_failure (boolean) + + log_lock_failures (boolean) - log_lock_failure configuration parameter + log_lock_failures configuration parameter @@ -8075,22 +8141,6 @@ log_line_prefix = '%m [%p] %q%u@%d/%a ' - - md5_password_warnings (boolean) - - md5_password_warnings configuration parameter - - - - - Controls whether a WARNING about MD5 password - deprecation is produced when a CREATE ROLE or - ALTER ROLE statement sets an MD5-encrypted password. - The default value is on. - - - - @@ -8557,7 +8607,8 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; timing information is displayed in pg_stat_progress_vacuum, pg_stat_progress_analyze, - in the output of when the + in the output of and + when the VERBOSE option is used, and by autovacuum for auto-vacuums and auto-analyzes when is set. @@ -9295,7 +9346,8 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; vacuum_truncate (boolean) - vacuum_truncate configuration parameter + vacuum_truncate + configuration parameter @@ -9499,7 +9551,8 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; vacuum_max_eager_freeze_failure_rate (floating point) - vacuum_max_eager_freeze_failure_rate configuration parameter + vacuum_max_eager_freeze_failure_rate + configuration parameter @@ -9513,8 +9566,8 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; - Note that when eager scanning is enabled, successful page freezes do - not count against the cap on eager freeze failures. Successful page + Note that when eager scanning is enabled, only freeze failures + count against the cap, not successful freezing. Successful page freezes are capped internally at 20% of the all-visible but not all-frozen pages in the relation. Capping successful page freezes helps amortize the overhead across multiple normal vacuums and limits the @@ -10987,16 +11040,17 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' (Use pg_config --sharedir to find out the name of this directory.) For example: -extension_control_path = '/usr/local/share/postgresql/extension:/home/my_project/share/extension:$system' +extension_control_path = '/usr/local/share/postgresql:/home/my_project/share:$system' or, in a Windows environment: -extension_control_path = 'C:\tools\postgresql\extension;H:\my_project\share\extension;$system' +extension_control_path = 'C:\tools\postgresql;H:\my_project\share;$system' - Note that the path elements should typically end in - extension if the normal installation layouts are - followed. (The value for $system already includes - the extension suffix.) + Note that the specified paths elements are expected to have a + subdirectory extension which will contain the + .control and .sql files; the + extension suffix is automatically appended to + each path element. @@ -11021,7 +11075,7 @@ extension_control_path = 'C:\tools\postgresql\extension;H:\my_project\share\exte linkend="guc-dynamic-library-path"/> to a correspondent location, for example, -extension_control_path = '/usr/local/share/postgresql/extension:$system' +extension_control_path = '/usr/local/share/postgresql:$system' dynamic_library_path = '/usr/local/lib/postgresql:$libdir' diff --git a/doc/src/sgml/contrib-spi.sgml b/doc/src/sgml/contrib-spi.sgml index e7cae4e38dcce..6fa9479d1b992 100644 --- a/doc/src/sgml/contrib-spi.sgml +++ b/doc/src/sgml/contrib-spi.sgml @@ -36,7 +36,7 @@ check_primary_key() checks the referencing table. - To use, create a BEFORE INSERT OR UPDATE trigger using this + To use, create an AFTER INSERT OR UPDATE trigger using this function on a table referencing another table. Specify as the trigger arguments: the referencing table's column name(s) which form the foreign key, the referenced table name, and the column names in the referenced table @@ -46,7 +46,7 @@ check_foreign_key() checks the referenced table. - To use, create a BEFORE DELETE OR UPDATE trigger using this + To use, create an AFTER DELETE OR UPDATE trigger using this function on a table referenced by other table(s). Specify as the trigger arguments: the number of referencing tables for which the function has to perform checking, the action if a referencing key is found @@ -60,6 +60,16 @@ unique index. + + Note that if these triggers are executed from + another BEFORE trigger, they can fail unexpectedly. For + example, if a user inserts row1 and then the BEFORE + trigger inserts row2 and calls a trigger with the + check_foreign_key(), + the check_foreign_key() + function will not see row1 and will fail. + + There are examples in refint.example. @@ -71,10 +81,12 @@ autoinc() is a trigger that stores the next value of a sequence into an integer field. This has some overlap with the - built-in serial column feature, but it is not the same: - autoinc() will override attempts to substitute a - different field value during inserts, and optionally it can be - used to increment the field during updates, too. + built-in serial column feature, but it is not the same. + The trigger will replace the field's value only if that value is + initially zero or null (after the action of the SQL statement that + inserted or updated the row). Also, if the sequence's next value is + zero, nextval() will be called a second time in + order to obtain a non-zero value. diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 09309ba0390b7..b81d89e260809 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -117,7 +117,7 @@ double precision - float8 + float, float8 double precision floating-point number (8 bytes) @@ -2054,8 +2054,6 @@ MINUTE TO SECOND Time Input - - Example @@ -4737,6 +4735,10 @@ INSERT INTO mytable VALUES(-1); -- fails regconfig + + regdatabase + + regdictionary @@ -4878,6 +4880,13 @@ SELECT * FROM pg_attribute english + + regdatabase + pg_database + database name + template1 + + regdictionary pg_ts_dict @@ -5049,8 +5058,8 @@ WHERE ... be dropped without first removing the default expression. The alternative of nextval('my_seq'::text) does not create a dependency. - (regrole is an exception to this property. Constants of this - type are not allowed in stored expressions.) + (regdatabase and regrole are exceptions to this + property. Constants of these types are not allowed in stored expressions.) @@ -5110,7 +5119,7 @@ WHERE ... +(pg_lsn,numeric) and -(pg_lsn,numeric) operators, respectively. Note that the calculated LSN should be in the range of pg_lsn type, - i.e., between 0/0 and + i.e., between 0/00000000 and FFFFFFFF/FFFFFFFF. @@ -5234,8 +5243,8 @@ WHERE ...
Pseudo-Types - - + + Name diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index cdb1a07e9d3bf..65bc070d2e5fa 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -419,6 +419,16 @@ CREATE TABLE people ( tableoid. + + + A virtual generated column cannot have a user-defined type, and the + generation expression of a virtual generated column must not reference + user-defined functions or types, that is, it can only use built-in + functions or types. This applies also indirectly, such as for functions + or types that underlie operators or casts. (This restriction does not + exist for stored generated columns.) + + A generated column cannot have a column default or an identity definition. @@ -1764,9 +1774,6 @@ ALTER TABLE products ALTER COLUMN product_no SET NOT NULL; ALTER TABLE products DROP CONSTRAINT some_name; - (If you are dealing with a generated constraint name like $2, - don't forget that you'll need to double-quote it to make it a valid - identifier.) @@ -2226,8 +2233,9 @@ REVOKE ALL ON accounts FROM PUBLIC; Allows VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, - REINDEX, and LOCK TABLE on a - relation. + REINDEX, LOCK TABLE, + and database object statistics manipulation functions + (see ) on a relation. @@ -5075,7 +5083,13 @@ EXPLAIN SELECT count(*) FROM measurement WHERE logdate >= DATE '2008-01-01'; It is possible to determine the number of partitions which were removed during this phase by observing the Subplans Removed property in the - EXPLAIN output. + EXPLAIN output. The query planner obtains locks for + all partitions which are part of the plan. However, when the executor + uses a cached plan, locks are only obtained on the partitions which + remain after partition pruning done during the initialization phase of + execution, i.e., the ones shown in the EXPLAIN + output and not the ones referred to by the + Subplans Removed property. diff --git a/doc/src/sgml/docguide.sgml b/doc/src/sgml/docguide.sgml index db4bcce56eac6..7b61b4841aa03 100644 --- a/doc/src/sgml/docguide.sgml +++ b/doc/src/sgml/docguide.sgml @@ -60,9 +60,7 @@ maintained by the OASIS group. The official DocBook site has good introductory and reference documentation and - a complete O'Reilly book for your online reading pleasure. The - - NewbieDoc Docbook Guide is very helpful for beginners. + a complete O'Reilly book for your online reading pleasure. The FreeBSD Documentation Project also uses DocBook and has some good information, including a number of style guidelines that might be diff --git a/doc/src/sgml/extend.sgml b/doc/src/sgml/extend.sgml index 64f8e133caeb3..63c5ec6d1eb99 100644 --- a/doc/src/sgml/extend.sgml +++ b/doc/src/sgml/extend.sgml @@ -674,7 +674,7 @@ RETURNS anycompatible AS ... The directory containing the extension's SQL script file(s). Unless an absolute path is given, the name is relative to - the installation's SHAREDIR directory. By default, + the directory where the control file was found. By default, the script files are looked for in the same directory where the control file was found. @@ -1344,8 +1344,8 @@ SELECT * FROM pg_extension_update_paths('extension_namesearch_path; do not trust the path provided by CREATE/ALTER EXTENSION to be secure. Best practice is to temporarily - set search_path to 'pg_catalog, - pg_temp' and insert references to the extension's + set search_path to pg_catalog, + pg_temp and insert references to the extension's installation schema explicitly where needed. (This practice might also be helpful for creating views.) Examples can be found in the contrib modules in @@ -1809,10 +1809,36 @@ include $(PGXS) setting PG_CONFIG to point to its pg_config program, either within the makefile or on the make command line. - You can also select a separate installation directory for your extension - by setting the make variable prefix - on the make command line. (But this will then require - additional setup to get the server to find the extension there.) + + + + You can select a separate directory prefix in which to install your + extension's files, by setting the make variable + prefix when executing make install + like so: + +make install prefix=/usr/local/postgresql + + This will install the extension control and SQL files into + /usr/local/postgresql/share and the shared modules into + /usr/local/postgresql/lib. If the prefix does not + include the strings postgres or + pgsql, such as + +make install prefix=/usr/local/extras + + then postgresql will be appended to the directory + names, installing the control and SQL files into + /usr/local/extras/share/postgresql/extension and the + shared modules into /usr/local/extras/lib/postgresql. + Either way, you'll need to set and to enable the + PostgreSQL server to find the files: + +extension_control_path = '/usr/local/extras/share/postgresql:$system' +dynamic_library_path = '/usr/local/extras/lib/postgresql:$libdir' + diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index fef9584f908ec..ac66fcbdb5727 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -17,7 +17,10 @@ - + + +%allfiles_func; + @@ -180,7 +183,7 @@ - + diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml deleted file mode 100644 index 2488e9ba99825..0000000000000 --- a/doc/src/sgml/func.sgml +++ /dev/null @@ -1,31988 +0,0 @@ - - - - Functions and Operators - - - function - - - - operator - - - - PostgreSQL provides a large number of - functions and operators for the built-in data types. This chapter - describes most of them, although additional special-purpose functions - appear in relevant sections of the manual. Users can also - define their own functions and operators, as described in - . The - psql commands \df and - \do can be used to list all - available functions and operators, respectively. - - - - The notation used throughout this chapter to describe the argument and - result data types of a function or operator is like this: - -repeat ( text, integer ) text - - which says that the function repeat takes one text and - one integer argument and returns a result of type text. The right arrow - is also used to indicate the result of an example, thus: - -repeat('Pg', 4) PgPgPgPg - - - - - If you are concerned about portability then note that most of - the functions and operators described in this chapter, with the - exception of the most trivial arithmetic and comparison operators - and some explicitly marked functions, are not specified by the - SQL standard. Some of this extended functionality - is present in other SQL database management - systems, and in many cases this functionality is compatible and - consistent between the various implementations. - - - - - Logical Operators - - - operator - logical - - - - Boolean - operators - operators, logical - - - - The usual logical operators are available: - - - AND (operator) - - - - OR (operator) - - - - NOT (operator) - - - - conjunction - - - - disjunction - - - - negation - - - -boolean AND boolean boolean -boolean OR boolean boolean -NOT boolean boolean - - - SQL uses a three-valued logic system with true, - false, and null, which represents unknown. - Observe the following truth tables: - - - - - - a - b - a AND b - a OR b - - - - - - TRUE - TRUE - TRUE - TRUE - - - - TRUE - FALSE - FALSE - TRUE - - - - TRUE - NULL - NULL - TRUE - - - - FALSE - FALSE - FALSE - FALSE - - - - FALSE - NULL - FALSE - NULL - - - - NULL - NULL - NULL - NULL - - - - - - - - - - a - NOT a - - - - - - TRUE - FALSE - - - - FALSE - TRUE - - - - NULL - NULL - - - - - - - - The operators AND and OR are - commutative, that is, you can switch the left and right operands - without affecting the result. (However, it is not guaranteed that - the left operand is evaluated before the right operand. See for more information about the - order of evaluation of subexpressions.) - - - - - Comparison Functions and Operators - - - comparison - operators - - - - The usual comparison operators are available, as shown in . - - -
- Comparison Operators - - - - Operator - Description - - - - - - - datatype < datatype - boolean - - Less than - - - - - datatype > datatype - boolean - - Greater than - - - - - datatype <= datatype - boolean - - Less than or equal to - - - - - datatype >= datatype - boolean - - Greater than or equal to - - - - - datatype = datatype - boolean - - Equal - - - - - datatype <> datatype - boolean - - Not equal - - - - - datatype != datatype - boolean - - Not equal - - - -
- - - - <> is the standard SQL notation for not - equal. != is an alias, which is converted - to <> at a very early stage of parsing. - Hence, it is not possible to implement != - and <> operators that do different things. - - - - - These comparison operators are available for all built-in data types - that have a natural ordering, including numeric, string, and date/time - types. In addition, arrays, composite types, and ranges can be compared - if their component data types are comparable. - - - - It is usually possible to compare values of related data - types as well; for example integer > - bigint will work. Some cases of this sort are implemented - directly by cross-type comparison operators, but if no - such operator is available, the parser will coerce the less-general type - to the more-general type and apply the latter's comparison operator. - - - - As shown above, all comparison operators are binary operators that - return values of type boolean. Thus, expressions like - 1 < 2 < 3 are not valid (because there is - no < operator to compare a Boolean value with - 3). Use the BETWEEN predicates - shown below to perform range tests. - - - - There are also some comparison predicates, as shown in . These behave much like - operators, but have special syntax mandated by the SQL standard. - - - - Comparison Predicates - - - - - Predicate - - - Description - - - Example(s) - - - - - - - - datatype BETWEEN datatype AND datatype - boolean - - - Between (inclusive of the range endpoints). - - - 2 BETWEEN 1 AND 3 - t - - - 2 BETWEEN 3 AND 1 - f - - - - - - datatype NOT BETWEEN datatype AND datatype - boolean - - - Not between (the negation of BETWEEN). - - - 2 NOT BETWEEN 1 AND 3 - f - - - - - - datatype BETWEEN SYMMETRIC datatype AND datatype - boolean - - - Between, after sorting the two endpoint values. - - - 2 BETWEEN SYMMETRIC 3 AND 1 - t - - - - - - datatype NOT BETWEEN SYMMETRIC datatype AND datatype - boolean - - - Not between, after sorting the two endpoint values. - - - 2 NOT BETWEEN SYMMETRIC 3 AND 1 - f - - - - - - datatype IS DISTINCT FROM datatype - boolean - - - Not equal, treating null as a comparable value. - - - 1 IS DISTINCT FROM NULL - t (rather than NULL) - - - NULL IS DISTINCT FROM NULL - f (rather than NULL) - - - - - - datatype IS NOT DISTINCT FROM datatype - boolean - - - Equal, treating null as a comparable value. - - - 1 IS NOT DISTINCT FROM NULL - f (rather than NULL) - - - NULL IS NOT DISTINCT FROM NULL - t (rather than NULL) - - - - - - datatype IS NULL - boolean - - - Test whether value is null. - - - 1.5 IS NULL - f - - - - - - datatype IS NOT NULL - boolean - - - Test whether value is not null. - - - 'null' IS NOT NULL - t - - - - - - datatype ISNULL - boolean - - - Test whether value is null (nonstandard syntax). - - - - - - datatype NOTNULL - boolean - - - Test whether value is not null (nonstandard syntax). - - - - - - boolean IS TRUE - boolean - - - Test whether boolean expression yields true. - - - true IS TRUE - t - - - NULL::boolean IS TRUE - f (rather than NULL) - - - - - - boolean IS NOT TRUE - boolean - - - Test whether boolean expression yields false or unknown. - - - true IS NOT TRUE - f - - - NULL::boolean IS NOT TRUE - t (rather than NULL) - - - - - - boolean IS FALSE - boolean - - - Test whether boolean expression yields false. - - - true IS FALSE - f - - - NULL::boolean IS FALSE - f (rather than NULL) - - - - - - boolean IS NOT FALSE - boolean - - - Test whether boolean expression yields true or unknown. - - - true IS NOT FALSE - t - - - NULL::boolean IS NOT FALSE - t (rather than NULL) - - - - - - boolean IS UNKNOWN - boolean - - - Test whether boolean expression yields unknown. - - - true IS UNKNOWN - f - - - NULL::boolean IS UNKNOWN - t (rather than NULL) - - - - - - boolean IS NOT UNKNOWN - boolean - - - Test whether boolean expression yields true or false. - - - true IS NOT UNKNOWN - t - - - NULL::boolean IS NOT UNKNOWN - f (rather than NULL) - - - - -
- - - - BETWEEN - - - BETWEEN SYMMETRIC - - The BETWEEN predicate simplifies range tests: - -a BETWEEN x AND y - - is equivalent to - -a >= x AND a <= y - - Notice that BETWEEN treats the endpoint values as included - in the range. - BETWEEN SYMMETRIC is like BETWEEN - except there is no requirement that the argument to the left of - AND be less than or equal to the argument on the right. - If it is not, those two arguments are automatically swapped, so that - a nonempty range is always implied. - - - - The various variants of BETWEEN are implemented in - terms of the ordinary comparison operators, and therefore will work for - any data type(s) that can be compared. - - - - - The use of AND in the BETWEEN - syntax creates an ambiguity with the use of AND as a - logical operator. To resolve this, only a limited set of expression - types are allowed as the second argument of a BETWEEN - clause. If you need to write a more complex sub-expression - in BETWEEN, write parentheses around the - sub-expression. - - - - - - IS DISTINCT FROM - - - IS NOT DISTINCT FROM - - Ordinary comparison operators yield null (signifying unknown), - not true or false, when either input is null. For example, - 7 = NULL yields null, as does 7 <> NULL. When - this behavior is not suitable, use the - IS NOT DISTINCT FROM predicates: - -a IS DISTINCT FROM b -a IS NOT DISTINCT FROM b - - For non-null inputs, IS DISTINCT FROM is - the same as the <> operator. However, if both - inputs are null it returns false, and if only one input is - null it returns true. Similarly, IS NOT DISTINCT - FROM is identical to = for non-null - inputs, but it returns true when both inputs are null, and false when only - one input is null. Thus, these predicates effectively act as though null - were a normal data value, rather than unknown. - - - - - IS NULL - - - IS NOT NULL - - - ISNULL - - - NOTNULL - - To check whether a value is or is not null, use the predicates: - -expression IS NULL -expression IS NOT NULL - - or the equivalent, but nonstandard, predicates: - -expression ISNULL -expression NOTNULL - - null valuecomparing - - - - Do not write - expression = NULL - because NULL is not equal to - NULL. (The null value represents an unknown value, - and it is not known whether two unknown values are equal.) - - - - - Some applications might expect that - expression = NULL - returns true if expression evaluates to - the null value. It is highly recommended that these applications - be modified to comply with the SQL standard. However, if that - cannot be done the - configuration variable is available. If it is enabled, - PostgreSQL will convert x = - NULL clauses to x IS NULL. - - - - - If the expression is row-valued, then - IS NULL is true when the row expression itself is null - or when all the row's fields are null, while - IS NOT NULL is true when the row expression itself is non-null - and all the row's fields are non-null. Because of this behavior, - IS NULL and IS NOT NULL do not always return - inverse results for row-valued expressions; in particular, a row-valued - expression that contains both null and non-null fields will return false - for both tests. For example: - - -SELECT ROW(1,2.5,'this is a test') = ROW(1, 3, 'not the same'); - -SELECT ROW(table.*) IS NULL FROM table; -- detect all-null rows - -SELECT ROW(table.*) IS NOT NULL FROM table; -- detect all-non-null rows - -SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in rows - - - In some cases, it may be preferable to - write row IS DISTINCT FROM NULL - or row IS NOT DISTINCT FROM NULL, - which will simply check whether the overall row value is null without any - additional tests on the row fields. - - - - - IS TRUE - - - IS NOT TRUE - - - IS FALSE - - - IS NOT FALSE - - - IS UNKNOWN - - - IS NOT UNKNOWN - - Boolean values can also be tested using the predicates - -boolean_expression IS TRUE -boolean_expression IS NOT TRUE -boolean_expression IS FALSE -boolean_expression IS NOT FALSE -boolean_expression IS UNKNOWN -boolean_expression IS NOT UNKNOWN - - These will always return true or false, never a null value, even when the - operand is null. - A null input is treated as the logical value unknown. - Notice that IS UNKNOWN and IS NOT UNKNOWN are - effectively the same as IS NULL and - IS NOT NULL, respectively, except that the input - expression must be of Boolean type. - - - - Some comparison-related functions are also available, as shown in . - - - - Comparison Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - num_nonnulls - - num_nonnulls ( VARIADIC "any" ) - integer - - - Returns the number of non-null arguments. - - - num_nonnulls(1, NULL, 2) - 2 - - - - - - num_nulls - - num_nulls ( VARIADIC "any" ) - integer - - - Returns the number of null arguments. - - - num_nulls(1, NULL, 2) - 1 - - - - -
- - - - - Mathematical Functions and Operators - - - Mathematical operators are provided for many - PostgreSQL types. For types without - standard mathematical conventions - (e.g., date/time types) we - describe the actual behavior in subsequent sections. - - - - shows the mathematical - operators that are available for the standard numeric types. - Unless otherwise noted, operators shown as - accepting numeric_type are available for all - the types smallint, integer, - bigint, numeric, real, - and double precision. - Operators shown as accepting integral_type - are available for the types smallint, integer, - and bigint. - Except where noted, each form of an operator returns the same data type - as its argument(s). Calls involving multiple argument data types, such - as integer + numeric, - are resolved by using the type appearing later in these lists. - - - - Mathematical Operators - - - - - - Operator - - - Description - - - Example(s) - - - - - - - - numeric_type + numeric_type - numeric_type - - - Addition - - - 2 + 3 - 5 - - - - - - + numeric_type - numeric_type - - - Unary plus (no operation) - - - + 3.5 - 3.5 - - - - - - numeric_type - numeric_type - numeric_type - - - Subtraction - - - 2 - 3 - -1 - - - - - - - numeric_type - numeric_type - - - Negation - - - - (-4) - 4 - - - - - - numeric_type * numeric_type - numeric_type - - - Multiplication - - - 2 * 3 - 6 - - - - - - numeric_type / numeric_type - numeric_type - - - Division (for integral types, division truncates the result towards - zero) - - - 5.0 / 2 - 2.5000000000000000 - - - 5 / 2 - 2 - - - (-5) / 2 - -2 - - - - - - numeric_type % numeric_type - numeric_type - - - Modulo (remainder); available for smallint, - integer, bigint, and numeric - - - 5 % 4 - 1 - - - - - - numeric ^ numeric - numeric - - - double precision ^ double precision - double precision - - - Exponentiation - - - 2 ^ 3 - 8 - - - Unlike typical mathematical practice, multiple uses of - ^ will associate left to right by default: - - - 2 ^ 3 ^ 3 - 512 - - - 2 ^ (3 ^ 3) - 134217728 - - - - - - |/ double precision - double precision - - - Square root - - - |/ 25.0 - 5 - - - - - - ||/ double precision - double precision - - - Cube root - - - ||/ 64.0 - 4 - - - - - - @ numeric_type - numeric_type - - - Absolute value - - - @ -5.0 - 5.0 - - - - - - integral_type & integral_type - integral_type - - - Bitwise AND - - - 91 & 15 - 11 - - - - - - integral_type | integral_type - integral_type - - - Bitwise OR - - - 32 | 3 - 35 - - - - - - integral_type # integral_type - integral_type - - - Bitwise exclusive OR - - - 17 # 5 - 20 - - - - - - ~ integral_type - integral_type - - - Bitwise NOT - - - ~1 - -2 - - - - - - integral_type << integer - integral_type - - - Bitwise shift left - - - 1 << 4 - 16 - - - - - - integral_type >> integer - integral_type - - - Bitwise shift right - - - 8 >> 2 - 2 - - - - - -
- - - shows the available - mathematical functions. - Many of these functions are provided in multiple forms with different - argument types. - Except where noted, any given form of a function returns the same - data type as its argument(s); cross-type cases are resolved in the - same way as explained above for operators. - The functions working with double precision data are mostly - implemented on top of the host system's C library; accuracy and behavior in - boundary cases can therefore vary depending on the host system. - - - - Mathematical Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - abs - - abs ( numeric_type ) - numeric_type - - - Absolute value - - - abs(-17.4) - 17.4 - - - - - - - cbrt - - cbrt ( double precision ) - double precision - - - Cube root - - - cbrt(64.0) - 4 - - - - - - - ceil - - ceil ( numeric ) - numeric - - - ceil ( double precision ) - double precision - - - Nearest integer greater than or equal to argument - - - ceil(42.2) - 43 - - - ceil(-42.8) - -42 - - - - - - - ceiling - - ceiling ( numeric ) - numeric - - - ceiling ( double precision ) - double precision - - - Nearest integer greater than or equal to argument (same - as ceil) - - - ceiling(95.3) - 96 - - - - - - - degrees - - degrees ( double precision ) - double precision - - - Converts radians to degrees - - - degrees(0.5) - 28.64788975654116 - - - - - - - div - - div ( y numeric, - x numeric ) - numeric - - - Integer quotient of y/x - (truncates towards zero) - - - div(9, 4) - 2 - - - - - - - erf - - erf ( double precision ) - double precision - - - Error function - - - erf(1.0) - 0.8427007929497149 - - - - - - - erfc - - erfc ( double precision ) - double precision - - - Complementary error function (1 - erf(x), without - loss of precision for large inputs) - - - erfc(1.0) - 0.15729920705028513 - - - - - - - exp - - exp ( numeric ) - numeric - - - exp ( double precision ) - double precision - - - Exponential (e raised to the given power) - - - exp(1.0) - 2.7182818284590452 - - - - - - - factorial - - factorial ( bigint ) - numeric - - - Factorial - - - factorial(5) - 120 - - - - - - - floor - - floor ( numeric ) - numeric - - - floor ( double precision ) - double precision - - - Nearest integer less than or equal to argument - - - floor(42.8) - 42 - - - floor(-42.8) - -43 - - - - - - - gamma - - gamma ( double precision ) - double precision - - - Gamma function - - - gamma(0.5) - 1.772453850905516 - - - gamma(6) - 120 - - - - - - - gcd - - gcd ( numeric_type, numeric_type ) - numeric_type - - - Greatest common divisor (the largest positive number that divides both - inputs with no remainder); returns 0 if both inputs - are zero; available for integer, bigint, - and numeric - - - gcd(1071, 462) - 21 - - - - - - - lcm - - lcm ( numeric_type, numeric_type ) - numeric_type - - - Least common multiple (the smallest strictly positive number that is - an integral multiple of both inputs); returns 0 if - either input is zero; available for integer, - bigint, and numeric - - - lcm(1071, 462) - 23562 - - - - - - - lgamma - - lgamma ( double precision ) - double precision - - - Natural logarithm of the absolute value of the gamma function - - - lgamma(1000) - 5905.220423209181 - - - - - - - ln - - ln ( numeric ) - numeric - - - ln ( double precision ) - double precision - - - Natural logarithm - - - ln(2.0) - 0.6931471805599453 - - - - - - - log - - log ( numeric ) - numeric - - - log ( double precision ) - double precision - - - Base 10 logarithm - - - log(100) - 2 - - - - - - - log10 - - log10 ( numeric ) - numeric - - - log10 ( double precision ) - double precision - - - Base 10 logarithm (same as log) - - - log10(1000) - 3 - - - - - - log ( b numeric, - x numeric ) - numeric - - - Logarithm of x to base b - - - log(2.0, 64.0) - 6.0000000000000000 - - - - - - - min_scale - - min_scale ( numeric ) - integer - - - Minimum scale (number of fractional decimal digits) needed - to represent the supplied value precisely - - - min_scale(8.4100) - 2 - - - - - - - mod - - mod ( y numeric_type, - x numeric_type ) - numeric_type - - - Remainder of y/x; - available for smallint, integer, - bigint, and numeric - - - mod(9, 4) - 1 - - - - - - - pi - - pi ( ) - double precision - - - Approximate value of π - - - pi() - 3.141592653589793 - - - - - - - power - - power ( a numeric, - b numeric ) - numeric - - - power ( a double precision, - b double precision ) - double precision - - - a raised to the power of b - - - power(9, 3) - 729 - - - - - - - radians - - radians ( double precision ) - double precision - - - Converts degrees to radians - - - radians(45.0) - 0.7853981633974483 - - - - - - - round - - round ( numeric ) - numeric - - - round ( double precision ) - double precision - - - Rounds to nearest integer. For numeric, ties are - broken by rounding away from zero. For double precision, - the tie-breaking behavior is platform dependent, but - round to nearest even is the most common rule. - - - round(42.4) - 42 - - - - - - round ( v numeric, s integer ) - numeric - - - Rounds v to s decimal - places. Ties are broken by rounding away from zero. - - - round(42.4382, 2) - 42.44 - - - round(1234.56, -1) - 1230 - - - - - - - scale - - scale ( numeric ) - integer - - - Scale of the argument (the number of decimal digits in the fractional part) - - - scale(8.4100) - 4 - - - - - - - sign - - sign ( numeric ) - numeric - - - sign ( double precision ) - double precision - - - Sign of the argument (-1, 0, or +1) - - - sign(-8.4) - -1 - - - - - - - sqrt - - sqrt ( numeric ) - numeric - - - sqrt ( double precision ) - double precision - - - Square root - - - sqrt(2) - 1.4142135623730951 - - - - - - - trim_scale - - trim_scale ( numeric ) - numeric - - - Reduces the value's scale (number of fractional decimal digits) by - removing trailing zeroes - - - trim_scale(8.4100) - 8.41 - - - - - - - trunc - - trunc ( numeric ) - numeric - - - trunc ( double precision ) - double precision - - - Truncates to integer (towards zero) - - - trunc(42.8) - 42 - - - trunc(-42.8) - -42 - - - - - - trunc ( v numeric, s integer ) - numeric - - - Truncates v to s - decimal places - - - trunc(42.4382, 2) - 42.43 - - - - - - - width_bucket - - width_bucket ( operand numeric, low numeric, high numeric, count integer ) - integer - - - width_bucket ( operand double precision, low double precision, high double precision, count integer ) - integer - - - Returns the number of the bucket in - which operand falls in a histogram - having count equal-width buckets spanning the - range low to high. - Returns 0 - or count+1 for an input - outside that range. - - - width_bucket(5.35, 0.024, 10.06, 5) - 3 - - - - - - width_bucket ( operand anycompatible, thresholds anycompatiblearray ) - integer - - - Returns the number of the bucket in - which operand falls given an array listing the - lower bounds of the buckets. Returns 0 for an - input less than the first lower - bound. operand and the array elements can be - of any type having standard comparison operators. - The thresholds array must be - sorted, smallest first, or unexpected results will be - obtained. - - - width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]) - 2 - - - - -
- - - shows functions for - generating random numbers. - - - - Random Functions - - - - - - Function - - - Description - - - Example(s) - - - - - - - - - random - - random ( ) - double precision - - - Returns a random value in the range 0.0 <= x < 1.0 - - - random() - 0.897124072839091 - - - - - - - random - - random ( min integer, max integer ) - integer - - - random ( min bigint, max bigint ) - bigint - - - random ( min numeric, max numeric ) - numeric - - - Returns a random value in the range - min <= x <= max. - For type numeric, the result will have the same number of - fractional decimal digits as min or - max, whichever has more. - - - random(1, 10) - 7 - - - random(-0.499, 0.499) - 0.347 - - - - - - - random_normal - - - random_normal ( - mean double precision - , stddev double precision ) - double precision - - - Returns a random value from the normal distribution with the given - parameters; mean defaults to 0.0 - and stddev defaults to 1.0 - - - random_normal(0.0, 1.0) - 0.051285419 - - - - - - - setseed - - setseed ( double precision ) - void - - - Sets the seed for subsequent random() and - random_normal() calls; - argument must be between -1.0 and 1.0, inclusive - - - setseed(0.12345) - - - - -
- - - The random() and random_normal() - functions listed in use a - deterministic pseudo-random number generator. - It is fast but not suitable for cryptographic - applications; see the module for a more - secure alternative. - If setseed() is called, the series of results of - subsequent calls to these functions in the current session - can be repeated by re-issuing setseed() with the same - argument. - Without any prior setseed() call in the same - session, the first call to any of these functions obtains a seed - from a platform-dependent source of random bits. - - - - shows the - available trigonometric functions. Each of these functions comes in - two variants, one that measures angles in radians and one that - measures angles in degrees. - - - - Trigonometric Functions - - - - - - Function - - - Description - - - Example(s) - - - - - - - - - acos - - acos ( double precision ) - double precision - - - Inverse cosine, result in radians - - - acos(1) - 0 - - - - - - - acosd - - acosd ( double precision ) - double precision - - - Inverse cosine, result in degrees - - - acosd(0.5) - 60 - - - - - - - asin - - asin ( double precision ) - double precision - - - Inverse sine, result in radians - - - asin(1) - 1.5707963267948966 - - - - - - - asind - - asind ( double precision ) - double precision - - - Inverse sine, result in degrees - - - asind(0.5) - 30 - - - - - - - atan - - atan ( double precision ) - double precision - - - Inverse tangent, result in radians - - - atan(1) - 0.7853981633974483 - - - - - - - atand - - atand ( double precision ) - double precision - - - Inverse tangent, result in degrees - - - atand(1) - 45 - - - - - - - atan2 - - atan2 ( y double precision, - x double precision ) - double precision - - - Inverse tangent of - y/x, - result in radians - - - atan2(1, 0) - 1.5707963267948966 - - - - - - - atan2d - - atan2d ( y double precision, - x double precision ) - double precision - - - Inverse tangent of - y/x, - result in degrees - - - atan2d(1, 0) - 90 - - - - - - - cos - - cos ( double precision ) - double precision - - - Cosine, argument in radians - - - cos(0) - 1 - - - - - - - cosd - - cosd ( double precision ) - double precision - - - Cosine, argument in degrees - - - cosd(60) - 0.5 - - - - - - - cot - - cot ( double precision ) - double precision - - - Cotangent, argument in radians - - - cot(0.5) - 1.830487721712452 - - - - - - - cotd - - cotd ( double precision ) - double precision - - - Cotangent, argument in degrees - - - cotd(45) - 1 - - - - - - - sin - - sin ( double precision ) - double precision - - - Sine, argument in radians - - - sin(1) - 0.8414709848078965 - - - - - - - sind - - sind ( double precision ) - double precision - - - Sine, argument in degrees - - - sind(30) - 0.5 - - - - - - - tan - - tan ( double precision ) - double precision - - - Tangent, argument in radians - - - tan(1) - 1.5574077246549023 - - - - - - - tand - - tand ( double precision ) - double precision - - - Tangent, argument in degrees - - - tand(45) - 1 - - - - -
- - - - Another way to work with angles measured in degrees is to use the unit - transformation functions radians() - and degrees() shown earlier. - However, using the degree-based trigonometric functions is preferred, - as that way avoids round-off error for special cases such - as sind(30). - - - - - shows the - available hyperbolic functions. - - - - Hyperbolic Functions - - - - - - Function - - - Description - - - Example(s) - - - - - - - - - sinh - - sinh ( double precision ) - double precision - - - Hyperbolic sine - - - sinh(1) - 1.1752011936438014 - - - - - - - cosh - - cosh ( double precision ) - double precision - - - Hyperbolic cosine - - - cosh(0) - 1 - - - - - - - tanh - - tanh ( double precision ) - double precision - - - Hyperbolic tangent - - - tanh(1) - 0.7615941559557649 - - - - - - - asinh - - asinh ( double precision ) - double precision - - - Inverse hyperbolic sine - - - asinh(1) - 0.881373587019543 - - - - - - - acosh - - acosh ( double precision ) - double precision - - - Inverse hyperbolic cosine - - - acosh(1) - 0 - - - - - - - atanh - - atanh ( double precision ) - double precision - - - Inverse hyperbolic tangent - - - atanh(0.5) - 0.5493061443340548 - - - - -
- -
- - - - String Functions and Operators - - - This section describes functions and operators for examining and - manipulating string values. Strings in this context include values - of the types character, character varying, - and text. Except where noted, these functions and operators - are declared to accept and return type text. They will - interchangeably accept character varying arguments. - Values of type character will be converted - to text before the function or operator is applied, resulting - in stripping any trailing spaces in the character value. - - - - SQL defines some string functions that use - key words, rather than commas, to separate - arguments. Details are in - . - PostgreSQL also provides versions of these functions - that use the regular function invocation syntax - (see ). - - - - - The string concatenation operator (||) will accept - non-string input, so long as at least one input is of string type, as shown - in . For other cases, inserting an - explicit coercion to text can be used to have non-string input - accepted. - - - - - <acronym>SQL</acronym> String Functions and Operators - - - - - Function/Operator - - - Description - - - Example(s) - - - - - - - - - character string - concatenation - - text || text - text - - - Concatenates the two strings. - - - 'Post' || 'greSQL' - PostgreSQL - - - - - - text || anynonarray - text - - - anynonarray || text - text - - - Converts the non-string input to text, then concatenates the two - strings. (The non-string input cannot be of an array type, because - that would create ambiguity with the array || - operators. If you want to concatenate an array's text equivalent, - cast it to text explicitly.) - - - 'Value: ' || 42 - Value: 42 - - - - - - - btrim - - btrim ( string text - , characters text ) - text - - - Removes the longest string containing only characters - in characters (a space by default) - from the start and end of string. - - - btrim('xyxtrimyyx', 'xyz') - trim - - - - - - - normalized - - - Unicode normalization - - text IS NOT form NORMALIZED - boolean - - - Checks whether the string is in the specified Unicode normalization - form. The optional form key word specifies the - form: NFC (the default), NFD, - NFKC, or NFKD. This expression can - only be used when the server encoding is UTF8. Note - that checking for normalization using this expression is often faster - than normalizing possibly already normalized strings. - - - U&'\0061\0308bc' IS NFD NORMALIZED - t - - - - - - - bit_length - - bit_length ( text ) - integer - - - Returns number of bits in the string (8 - times the octet_length). - - - bit_length('jose') - 32 - - - - - - - char_length - - - character string - length - - - length - of a character string - character string, length - - char_length ( text ) - integer - - - - character_length - - character_length ( text ) - integer - - - Returns number of characters in the string. - - - char_length('josé') - 4 - - - - - - - lower - - lower ( text ) - text - - - Converts the string to all lower case, according to the rules of the - database's locale. - - - lower('TOM') - tom - - - - - - - lpad - - lpad ( string text, - length integer - , fill text ) - text - - - Extends the string to length - length by prepending the characters - fill (a space by default). If the - string is already longer than - length then it is truncated (on the right). - - - lpad('hi', 5, 'xy') - xyxhi - - - - - - - ltrim - - ltrim ( string text - , characters text ) - text - - - Removes the longest string containing only characters in - characters (a space by default) from the start of - string. - - - ltrim('zzzytest', 'xyz') - test - - - - - - - normalize - - - Unicode normalization - - normalize ( text - , form ) - text - - - Converts the string to the specified Unicode - normalization form. The optional form key word - specifies the form: NFC (the default), - NFD, NFKC, or - NFKD. This function can only be used when the - server encoding is UTF8. - - - normalize(U&'\0061\0308bc', NFC) - U&'\00E4bc' - - - - - - - octet_length - - octet_length ( text ) - integer - - - Returns number of bytes in the string. - - - octet_length('josé') - 5 (if server encoding is UTF8) - - - - - - - octet_length - - octet_length ( character ) - integer - - - Returns number of bytes in the string. Since this version of the - function accepts type character directly, it will not - strip trailing spaces. - - - octet_length('abc '::character(4)) - 4 - - - - - - - overlay - - overlay ( string text PLACING newsubstring text FROM start integer FOR count integer ) - text - - - Replaces the substring of string that starts at - the start'th character and extends - for count characters - with newsubstring. - If count is omitted, it defaults to the length - of newsubstring. - - - overlay('Txxxxas' placing 'hom' from 2 for 4) - Thomas - - - - - - - position - - position ( substring text IN string text ) - integer - - - Returns first starting index of the specified - substring within - string, or zero if it's not present. - - - position('om' in 'Thomas') - 3 - - - - - - - rpad - - rpad ( string text, - length integer - , fill text ) - text - - - Extends the string to length - length by appending the characters - fill (a space by default). If the - string is already longer than - length then it is truncated. - - - rpad('hi', 5, 'xy') - hixyx - - - - - - - rtrim - - rtrim ( string text - , characters text ) - text - - - Removes the longest string containing only characters in - characters (a space by default) from the end of - string. - - - rtrim('testxxzx', 'xyz') - test - - - - - - - substring - - substring ( string text FROM start integer FOR count integer ) - text - - - Extracts the substring of string starting at - the start'th character if that is specified, - and stopping after count characters if that is - specified. Provide at least one of start - and count. - - - substring('Thomas' from 2 for 3) - hom - - - substring('Thomas' from 3) - omas - - - substring('Thomas' for 2) - Th - - - - - - substring ( string text FROM pattern text ) - text - - - Extracts the first substring matching POSIX regular expression; see - . - - - substring('Thomas' from '...$') - mas - - - - - - substring ( string text SIMILAR pattern text ESCAPE escape text ) - text - - - substring ( string text FROM pattern text FOR escape text ) - text - - - Extracts the first substring matching SQL regular expression; - see . The first form has - been specified since SQL:2003; the second form was only in SQL:1999 - and should be considered obsolete. - - - substring('Thomas' similar '%#"o_a#"_' escape '#') - oma - - - - - - - trim - - trim ( LEADING | TRAILING | BOTH - characters text FROM - string text ) - text - - - Removes the longest string containing only characters in - characters (a space by default) from the - start, end, or both ends (BOTH is the default) - of string. - - - trim(both 'xyz' from 'yxTomxx') - Tom - - - - - - trim ( LEADING | TRAILING | BOTH FROM - string text , - characters text ) - text - - - This is a non-standard syntax for trim(). - - - trim(both from 'yxTomxx', 'xyz') - Tom - - - - - - - unicode_assigned - - unicode_assigned ( text ) - boolean - - - Returns true if all characters in the string are - assigned Unicode codepoints; false otherwise. This - function can only be used when the server encoding is - UTF8. - - - - - - - upper - - upper ( text ) - text - - - Converts the string to all upper case, according to the rules of the - database's locale. - - - upper('tom') - TOM - - - - -
- - - Additional string manipulation functions and operators are available - and are listed in . (Some of - these are used internally to implement - the SQL-standard string functions listed in - .) - There are also pattern-matching operators, which are described in - , and operators for full-text - search, which are described in . - - - - Other String Functions and Operators - - - - - Function/Operator - - - Description - - - Example(s) - - - - - - - - - character string - prefix test - - text ^@ text - boolean - - - Returns true if the first string starts with the second string - (equivalent to the starts_with() function). - - - 'alphabet' ^@ 'alph' - t - - - - - - - ascii - - ascii ( text ) - integer - - - Returns the numeric code of the first character of the argument. - In UTF8 encoding, returns the Unicode code point - of the character. In other multibyte encodings, the argument must - be an ASCII character. - - - ascii('x') - 120 - - - - - - - chr - - chr ( integer ) - text - - - Returns the character with the given code. In UTF8 - encoding the argument is treated as a Unicode code point. In other - multibyte encodings the argument must designate - an ASCII character. chr(0) is - disallowed because text data types cannot store that character. - - - chr(65) - A - - - - - - - concat - - concat ( val1 "any" - , val2 "any" , ... ) - text - - - Concatenates the text representations of all the arguments. - NULL arguments are ignored. - - - concat('abcde', 2, NULL, 22) - abcde222 - - - - - - - concat_ws - - concat_ws ( sep text, - val1 "any" - , val2 "any" , ... ) - text - - - Concatenates all but the first argument, with separators. The first - argument is used as the separator string, and should not be NULL. - Other NULL arguments are ignored. - - - concat_ws(',', 'abcde', 2, NULL, 22) - abcde,2,22 - - - - - - - format - - format ( formatstr text - , formatarg "any" , ... ) - text - - - Formats arguments according to a format string; - see . - This function is similar to the C function sprintf. - - - format('Hello %s, %1$s', 'World') - Hello World, World - - - - - - - initcap - - initcap ( text ) - text - - - Converts the first letter of each word to upper case and the - rest to lower case. Words are sequences of alphanumeric - characters separated by non-alphanumeric characters. - - - initcap('hi THOMAS') - Hi Thomas - - - - - - - casefold - - casefold ( text ) - text - - - Performs case folding of the input string according to the collation. - Case folding is similar to case conversion, but the purpose of case - folding is to facilitate case-insensitive matching of strings, - whereas the purpose of case conversion is to convert to a particular - cased form. This function can only be used when the server encoding - is UTF8. - - - Ordinarily, case folding simply converts to lowercase, but there may - be exceptions depending on the collation. For instance, some - characters have more than two lowercase variants, or fold to uppercase. - - - Case folding may change the length of the string. For instance, in - the PG_UNICODE_FAST collation, ß - (U+00DF) folds to ss. - - - casefold can be used for Unicode Default Caseless - Matching. It does not always preserve the normalized form of the - input string (see ). - - - The libc provider doesn't support case folding, so - casefold is identical to . - - - - - - - left - - left ( string text, - n integer ) - text - - - Returns first n characters in the - string, or when n is negative, returns - all but last |n| characters. - - - left('abcde', 2) - ab - - - - - - - length - - length ( text ) - integer - - - Returns the number of characters in the string. - - - length('jose') - 4 - - - - - - - md5 - - md5 ( text ) - text - - - Computes the MD5 hash of - the argument, with the result written in hexadecimal. - - - md5('abc') - 900150983cd24fb0&zwsp;d6963f7d28e17f72 - - - - - - - parse_ident - - parse_ident ( qualified_identifier text - , strict_mode boolean DEFAULT true ) - text[] - - - Splits qualified_identifier into an array of - identifiers, removing any quoting of individual identifiers. By - default, extra characters after the last identifier are considered an - error; but if the second parameter is false, then such - extra characters are ignored. (This behavior is useful for parsing - names for objects like functions.) Note that this function does not - truncate over-length identifiers. If you want truncation you can cast - the result to name[]. - - - parse_ident('"SomeSchema".someTable') - {SomeSchema,sometable} - - - - - - - pg_client_encoding - - pg_client_encoding ( ) - name - - - Returns current client encoding name. - - - pg_client_encoding() - UTF8 - - - - - - - quote_ident - - quote_ident ( text ) - text - - - Returns the given string suitably quoted to be used as an identifier - in an SQL statement string. - Quotes are added only if necessary (i.e., if the string contains - non-identifier characters or would be case-folded). - Embedded quotes are properly doubled. - See also . - - - quote_ident('Foo bar') - "Foo bar" - - - - - - - quote_literal - - quote_literal ( text ) - text - - - Returns the given string suitably quoted to be used as a string literal - in an SQL statement string. - Embedded single-quotes and backslashes are properly doubled. - Note that quote_literal returns null on null - input; if the argument might be null, - quote_nullable is often more suitable. - See also . - - - quote_literal(E'O\'Reilly') - 'O''Reilly' - - - - - - quote_literal ( anyelement ) - text - - - Converts the given value to text and then quotes it as a literal. - Embedded single-quotes and backslashes are properly doubled. - - - quote_literal(42.5) - '42.5' - - - - - - - quote_nullable - - quote_nullable ( text ) - text - - - Returns the given string suitably quoted to be used as a string literal - in an SQL statement string; or, if the argument - is null, returns NULL. - Embedded single-quotes and backslashes are properly doubled. - See also . - - - quote_nullable(NULL) - NULL - - - - - - quote_nullable ( anyelement ) - text - - - Converts the given value to text and then quotes it as a literal; - or, if the argument is null, returns NULL. - Embedded single-quotes and backslashes are properly doubled. - - - quote_nullable(42.5) - '42.5' - - - - - - - regexp_count - - regexp_count ( string text, pattern text - , start integer - , flags text ) - integer - - - Returns the number of times the POSIX regular - expression pattern matches in - the string; see - . - - - regexp_count('123456789012', '\d\d\d', 2) - 3 - - - - - - - regexp_instr - - regexp_instr ( string text, pattern text - , start integer - , N integer - , endoption integer - , flags text - , subexpr integer ) - integer - - - Returns the position within string where - the N'th match of the POSIX regular - expression pattern occurs, or zero if there is - no such match; see . - - - regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i') - 3 - - - regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i', 2) - 5 - - - - - - - regexp_like - - regexp_like ( string text, pattern text - , flags text ) - boolean - - - Checks whether a match of the POSIX regular - expression pattern occurs - within string; see - . - - - regexp_like('Hello World', 'world$', 'i') - t - - - - - - - regexp_match - - regexp_match ( string text, pattern text , flags text ) - text[] - - - Returns substrings within the first match of the POSIX regular - expression pattern to - the string; see - . - - - regexp_match('foobarbequebaz', '(bar)(beque)') - {bar,beque} - - - - - - - regexp_matches - - regexp_matches ( string text, pattern text , flags text ) - setof text[] - - - Returns substrings within the first match of the POSIX regular - expression pattern to - the string, or substrings within all - such matches if the g flag is used; - see . - - - regexp_matches('foobarbequebaz', 'ba.', 'g') - - - {bar} - {baz} - - - - - - - - regexp_replace - - regexp_replace ( string text, pattern text, replacement text - , flags text ) - text - - - Replaces the substring that is the first match to the POSIX - regular expression pattern, or all such - matches if the g flag is used; see - . - - - regexp_replace('Thomas', '.[mN]a.', 'M') - ThM - - - - - - regexp_replace ( string text, pattern text, replacement text, - start integer - , N integer - , flags text ) - text - - - Replaces the substring that is the N'th - match to the POSIX regular expression pattern, - or all such matches if N is zero, with the - search beginning at the start'th character - of string. If N is - omitted, it defaults to 1. See - . - - - regexp_replace('Thomas', '.', 'X', 3, 2) - ThoXas - - - regexp_replace(string=>'hello world', pattern=>'l', replacement=>'XX', start=>1, "N"=>2) - helXXo world - - - - - - - regexp_split_to_array - - regexp_split_to_array ( string text, pattern text , flags text ) - text[] - - - Splits string using a POSIX regular - expression as the delimiter, producing an array of results; see - . - - - regexp_split_to_array('hello world', '\s+') - {hello,world} - - - - - - - regexp_split_to_table - - regexp_split_to_table ( string text, pattern text , flags text ) - setof text - - - Splits string using a POSIX regular - expression as the delimiter, producing a set of results; see - . - - - regexp_split_to_table('hello world', '\s+') - - - hello - world - - - - - - - - regexp_substr - - regexp_substr ( string text, pattern text - , start integer - , N integer - , flags text - , subexpr integer ) - text - - - Returns the substring within string that - matches the N'th occurrence of the POSIX - regular expression pattern, - or NULL if there is no such match; see - . - - - regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i') - CDEF - - - regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i', 2) - EF - - - - - - - repeat - - repeat ( string text, number integer ) - text - - - Repeats string the specified - number of times. - - - repeat('Pg', 4) - PgPgPgPg - - - - - - - replace - - replace ( string text, - from text, - to text ) - text - - - Replaces all occurrences in string of - substring from with - substring to. - - - replace('abcdefabcdef', 'cd', 'XX') - abXXefabXXef - - - - - - - reverse - - reverse ( text ) - text - - - Reverses the order of the characters in the string. - - - reverse('abcde') - edcba - - - - - - - right - - right ( string text, - n integer ) - text - - - Returns last n characters in the string, - or when n is negative, returns all but - first |n| characters. - - - right('abcde', 2) - de - - - - - - - split_part - - split_part ( string text, - delimiter text, - n integer ) - text - - - Splits string at occurrences - of delimiter and returns - the n'th field (counting from one), - or when n is negative, returns - the |n|'th-from-last field. - - - split_part('abc~@~def~@~ghi', '~@~', 2) - def - - - split_part('abc,def,ghi,jkl', ',', -2) - ghi - - - - - - - starts_with - - starts_with ( string text, prefix text ) - boolean - - - Returns true if string starts - with prefix. - - - starts_with('alphabet', 'alph') - t - - - - - - - string_to_array - - string_to_array ( string text, delimiter text , null_string text ) - text[] - - - Splits the string at occurrences - of delimiter and forms the resulting fields - into a text array. - If delimiter is NULL, - each character in the string will become a - separate element in the array. - If delimiter is an empty string, then - the string is treated as a single field. - If null_string is supplied and is - not NULL, fields matching that string are - replaced by NULL. - See also array_to_string. - - - string_to_array('xx~~yy~~zz', '~~', 'yy') - {xx,NULL,zz} - - - - - - - string_to_table - - string_to_table ( string text, delimiter text , null_string text ) - setof text - - - Splits the string at occurrences - of delimiter and returns the resulting fields - as a set of text rows. - If delimiter is NULL, - each character in the string will become a - separate row of the result. - If delimiter is an empty string, then - the string is treated as a single field. - If null_string is supplied and is - not NULL, fields matching that string are - replaced by NULL. - - - string_to_table('xx~^~yy~^~zz', '~^~', 'yy') - - - xx - NULL - zz - - - - - - - - strpos - - strpos ( string text, substring text ) - integer - - - Returns first starting index of the specified substring - within string, or zero if it's not present. - (Same as position(substring in - string), but note the reversed - argument order.) - - - strpos('high', 'ig') - 2 - - - - - - - substr - - substr ( string text, start integer , count integer ) - text - - - Extracts the substring of string starting at - the start'th character, - and extending for count characters if that is - specified. (Same - as substring(string - from start - for count).) - - - substr('alphabet', 3) - phabet - - - substr('alphabet', 3, 2) - ph - - - - - - - to_ascii - - to_ascii ( string text ) - text - - - to_ascii ( string text, - encoding name ) - text - - - to_ascii ( string text, - encoding integer ) - text - - - Converts string to ASCII - from another encoding, which may be identified by name or number. - If encoding is omitted the database encoding - is assumed (which in practice is the only useful case). - The conversion consists primarily of dropping accents. - Conversion is only supported - from LATIN1, LATIN2, - LATIN9, and WIN1250 encodings. - (See the module for another, more flexible - solution.) - - - to_ascii('Karél') - Karel - - - - - - - to_bin - - to_bin ( integer ) - text - - - to_bin ( bigint ) - text - - - Converts the number to its equivalent two's complement binary - representation. - - - to_bin(2147483647) - 1111111111111111111111111111111 - - - to_bin(-1234) - 11111111111111111111101100101110 - - - - - - - to_hex - - to_hex ( integer ) - text - - - to_hex ( bigint ) - text - - - Converts the number to its equivalent two's complement hexadecimal - representation. - - - to_hex(2147483647) - 7fffffff - - - to_hex(-1234) - fffffb2e - - - - - - - to_oct - - to_oct ( integer ) - text - - - to_oct ( bigint ) - text - - - Converts the number to its equivalent two's complement octal - representation. - - - to_oct(2147483647) - 17777777777 - - - to_oct(-1234) - 37777775456 - - - - - - - translate - - translate ( string text, - from text, - to text ) - text - - - Replaces each character in string that - matches a character in the from set with the - corresponding character in the to - set. If from is longer than - to, occurrences of the extra characters in - from are deleted. - - - translate('12345', '143', 'ax') - a2x5 - - - - - - - unistr - - unistr ( text ) - text - - - Evaluate escaped Unicode characters in the argument. Unicode characters - can be specified as - \XXXX (4 hexadecimal - digits), \+XXXXXX (6 - hexadecimal digits), - \uXXXX (4 hexadecimal - digits), or \UXXXXXXXX - (8 hexadecimal digits). To specify a backslash, write two - backslashes. All other characters are taken literally. - - - - If the server encoding is not UTF-8, the Unicode code point identified - by one of these escape sequences is converted to the actual server - encoding; an error is reported if that's not possible. - - - - This function provides a (non-standard) alternative to string - constants with Unicode escapes (see ). - - - - unistr('d\0061t\+000061') - data - - - unistr('d\u0061t\U00000061') - data - - - - - -
- - - The concat, concat_ws and - format functions are variadic, so it is possible to - pass the values to be concatenated or formatted as an array marked with - the VARIADIC keyword (see ). The array's elements are - treated as if they were separate ordinary arguments to the function. - If the variadic array argument is NULL, concat - and concat_ws return NULL, but - format treats a NULL as a zero-element array. - - - - See also the aggregate function string_agg in - , and the functions for - converting between strings and the bytea type in - . - - - - <function>format</function> - - - format - - - - The function format produces output formatted according to - a format string, in a style similar to the C function - sprintf. - - - - -format(formatstr text , formatarg "any" , ... ) - - formatstr is a format string that specifies how the - result should be formatted. Text in the format string is copied - directly to the result, except where format specifiers are - used. Format specifiers act as placeholders in the string, defining how - subsequent function arguments should be formatted and inserted into the - result. Each formatarg argument is converted to text - according to the usual output rules for its data type, and then formatted - and inserted into the result string according to the format specifier(s). - - - - Format specifiers are introduced by a % character and have - the form - -%[position][flags][width]type - - where the component fields are: - - - - position (optional) - - - A string of the form n$ where - n is the index of the argument to print. - Index 1 means the first argument after - formatstr. If the position is - omitted, the default is to use the next argument in sequence. - - - - - - flags (optional) - - - Additional options controlling how the format specifier's output is - formatted. Currently the only supported flag is a minus sign - (-) which will cause the format specifier's output to be - left-justified. This has no effect unless the width - field is also specified. - - - - - - width (optional) - - - Specifies the minimum number of characters to use to - display the format specifier's output. The output is padded on the - left or right (depending on the - flag) with spaces as - needed to fill the width. A too-small width does not cause - truncation of the output, but is simply ignored. The width may be - specified using any of the following: a positive integer; an - asterisk (*) to use the next function argument as the - width; or a string of the form *n$ to - use the nth function argument as the width. - - - - If the width comes from a function argument, that argument is - consumed before the argument that is used for the format specifier's - value. If the width argument is negative, the result is left - aligned (as if the - flag had been specified) within a - field of length abs(width). - - - - - - type (required) - - - The type of format conversion to use to produce the format - specifier's output. The following types are supported: - - - - s formats the argument value as a simple - string. A null value is treated as an empty string. - - - - - I treats the argument value as an SQL - identifier, double-quoting it if necessary. - It is an error for the value to be null (equivalent to - quote_ident). - - - - - L quotes the argument value as an SQL literal. - A null value is displayed as the string NULL, without - quotes (equivalent to quote_nullable). - - - - - - - - - - - In addition to the format specifiers described above, the special sequence - %% may be used to output a literal % character. - - - - Here are some examples of the basic format conversions: - - -SELECT format('Hello %s', 'World'); -Result: Hello World - -SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); -Result: Testing one, two, three, % - -SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); -Result: INSERT INTO "Foo bar" VALUES('O''Reilly') - -SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); -Result: INSERT INTO locations VALUES('C:\Program Files') - - - - - Here are examples using width fields - and the - flag: - - -SELECT format('|%10s|', 'foo'); -Result: | foo| - -SELECT format('|%-10s|', 'foo'); -Result: |foo | - -SELECT format('|%*s|', 10, 'foo'); -Result: | foo| - -SELECT format('|%*s|', -10, 'foo'); -Result: |foo | - -SELECT format('|%-*s|', 10, 'foo'); -Result: |foo | - -SELECT format('|%-*s|', -10, 'foo'); -Result: |foo | - - - - - These examples show use of position fields: - - -SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); -Result: Testing three, two, one - -SELECT format('|%*2$s|', 'foo', 10, 'bar'); -Result: | bar| - -SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); -Result: | foo| - - - - - Unlike the standard C function sprintf, - PostgreSQL's format function allows format - specifiers with and without position fields to be mixed - in the same format string. A format specifier without a - position field always uses the next argument after the - last argument consumed. - In addition, the format function does not require all - function arguments to be used in the format string. - For example: - - -SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); -Result: Testing three, two, three - - - - - The %I and %L format specifiers are particularly - useful for safely constructing dynamic SQL statements. See - . - - - -
- - - - Binary String Functions and Operators - - - binary data - functions - - - - This section describes functions and operators for examining and - manipulating binary strings, that is values of type bytea. - Many of these are equivalent, in purpose and syntax, to the - text-string functions described in the previous section. - - - - SQL defines some string functions that use - key words, rather than commas, to separate - arguments. Details are in - . - PostgreSQL also provides versions of these functions - that use the regular function invocation syntax - (see ). - - - - <acronym>SQL</acronym> Binary String Functions and Operators - - - - - Function/Operator - - - Description - - - Example(s) - - - - - - - - - binary string - concatenation - - bytea || bytea - bytea - - - Concatenates the two binary strings. - - - '\x123456'::bytea || '\x789a00bcde'::bytea - \x123456789a00bcde - - - - - - - bit_length - - bit_length ( bytea ) - integer - - - Returns number of bits in the binary string (8 - times the octet_length). - - - bit_length('\x123456'::bytea) - 24 - - - - - - - btrim - - btrim ( bytes bytea, - bytesremoved bytea ) - bytea - - - Removes the longest string containing only bytes appearing in - bytesremoved from the start and end of - bytes. - - - btrim('\x1234567890'::bytea, '\x9012'::bytea) - \x345678 - - - - - - - ltrim - - ltrim ( bytes bytea, - bytesremoved bytea ) - bytea - - - Removes the longest string containing only bytes appearing in - bytesremoved from the start of - bytes. - - - ltrim('\x1234567890'::bytea, '\x9012'::bytea) - \x34567890 - - - - - - - octet_length - - octet_length ( bytea ) - integer - - - Returns number of bytes in the binary string. - - - octet_length('\x123456'::bytea) - 3 - - - - - - - overlay - - overlay ( bytes bytea PLACING newsubstring bytea FROM start integer FOR count integer ) - bytea - - - Replaces the substring of bytes that starts at - the start'th byte and extends - for count bytes - with newsubstring. - If count is omitted, it defaults to the length - of newsubstring. - - - overlay('\x1234567890'::bytea placing '\002\003'::bytea from 2 for 3) - \x12020390 - - - - - - - position - - position ( substring bytea IN bytes bytea ) - integer - - - Returns first starting index of the specified - substring within - bytes, or zero if it's not present. - - - position('\x5678'::bytea in '\x1234567890'::bytea) - 3 - - - - - - - rtrim - - rtrim ( bytes bytea, - bytesremoved bytea ) - bytea - - - Removes the longest string containing only bytes appearing in - bytesremoved from the end of - bytes. - - - rtrim('\x1234567890'::bytea, '\x9012'::bytea) - \x12345678 - - - - - - - substring - - substring ( bytes bytea FROM start integer FOR count integer ) - bytea - - - Extracts the substring of bytes starting at - the start'th byte if that is specified, - and stopping after count bytes if that is - specified. Provide at least one of start - and count. - - - substring('\x1234567890'::bytea from 3 for 2) - \x5678 - - - - - - - trim - - trim ( LEADING | TRAILING | BOTH - bytesremoved bytea FROM - bytes bytea ) - bytea - - - Removes the longest string containing only bytes appearing in - bytesremoved from the start, - end, or both ends (BOTH is the default) - of bytes. - - - trim('\x9012'::bytea from '\x1234567890'::bytea) - \x345678 - - - - - - trim ( LEADING | TRAILING | BOTH FROM - bytes bytea, - bytesremoved bytea ) - bytea - - - This is a non-standard syntax for trim(). - - - trim(both from '\x1234567890'::bytea, '\x9012'::bytea) - \x345678 - - - - -
- - - Additional binary string manipulation functions are available and - are listed in . Some - of them are used internally to implement the - SQL-standard string functions listed in . - - - - Other Binary String Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - bit_count - - - popcount - bit_count - - bit_count ( bytes bytea ) - bigint - - - Returns the number of bits set in the binary string (also known as - popcount). - - - bit_count('\x1234567890'::bytea) - 15 - - - - - - - crc32 - - crc32 ( bytea ) - bigint - - - Computes the CRC-32 value of the binary string. - - - crc32('abc'::bytea) - 891568578 - - - - - - - crc32c - - crc32c ( bytea ) - bigint - - - Computes the CRC-32C value of the binary string. - - - crc32c('abc'::bytea) - 910901175 - - - - - - - get_bit - - get_bit ( bytes bytea, - n bigint ) - integer - - - Extracts n'th bit - from binary string. - - - get_bit('\x1234567890'::bytea, 30) - 1 - - - - - - - get_byte - - get_byte ( bytes bytea, - n integer ) - integer - - - Extracts n'th byte - from binary string. - - - get_byte('\x1234567890'::bytea, 4) - 144 - - - - - - - length - - - binary string - length - - - length - of a binary string - binary strings, length - - length ( bytea ) - integer - - - Returns the number of bytes in the binary string. - - - length('\x1234567890'::bytea) - 5 - - - - - - length ( bytes bytea, - encoding name ) - integer - - - Returns the number of characters in the binary string, assuming - that it is text in the given encoding. - - - length('jose'::bytea, 'UTF8') - 4 - - - - - - - md5 - - md5 ( bytea ) - text - - - Computes the MD5 hash of - the binary string, with the result written in hexadecimal. - - - md5('Th\000omas'::bytea) - 8ab2d3c9689aaf18&zwsp;b4958c334c82d8b1 - - - - - - - reverse - - reverse ( bytea ) - bytea - - - Reverses the order of the bytes in the binary string. - - - reverse('\xabcd'::bytea) - \xcdab - - - - - - - set_bit - - set_bit ( bytes bytea, - n bigint, - newvalue integer ) - bytea - - - Sets n'th bit in - binary string to newvalue. - - - set_bit('\x1234567890'::bytea, 30, 0) - \x1234563890 - - - - - - - set_byte - - set_byte ( bytes bytea, - n integer, - newvalue integer ) - bytea - - - Sets n'th byte in - binary string to newvalue. - - - set_byte('\x1234567890'::bytea, 4, 64) - \x1234567840 - - - - - - - sha224 - - sha224 ( bytea ) - bytea - - - Computes the SHA-224 hash - of the binary string. - - - sha224('abc'::bytea) - \x23097d223405d8228642a477bda2&zwsp;55b32aadbce4bda0b3f7e36c9da7 - - - - - - - sha256 - - sha256 ( bytea ) - bytea - - - Computes the SHA-256 hash - of the binary string. - - - sha256('abc'::bytea) - \xba7816bf8f01cfea414140de5dae2223&zwsp;b00361a396177a9cb410ff61f20015ad - - - - - - - sha384 - - sha384 ( bytea ) - bytea - - - Computes the SHA-384 hash - of the binary string. - - - sha384('abc'::bytea) - \xcb00753f45a35e8bb5a03d699ac65007&zwsp;272c32ab0eded1631a8b605a43ff5bed&zwsp;8086072ba1e7cc2358baeca134c825a7 - - - - - - - sha512 - - sha512 ( bytea ) - bytea - - - Computes the SHA-512 hash - of the binary string. - - - sha512('abc'::bytea) - \xddaf35a193617abacc417349ae204131&zwsp;12e6fa4e89a97ea20a9eeee64b55d39a&zwsp;2192992a274fc1a836ba3c23a3feebbd&zwsp;454d4423643ce80e2a9ac94fa54ca49f - - - - - - - substr - - substr ( bytes bytea, start integer , count integer ) - bytea - - - Extracts the substring of bytes starting at - the start'th byte, - and extending for count bytes if that is - specified. (Same - as substring(bytes - from start - for count).) - - - substr('\x1234567890'::bytea, 3, 2) - \x5678 - - - - -
- - - Functions get_byte and set_byte - number the first byte of a binary string as byte 0. - Functions get_bit and set_bit - number bits from the right within each byte; for example bit 0 is the least - significant bit of the first byte, and bit 15 is the most significant bit - of the second byte. - - - - For historical reasons, the function md5 - returns a hex-encoded value of type text whereas the SHA-2 - functions return type bytea. Use the functions - encode - and decode to - convert between the two. For example write encode(sha256('abc'), - 'hex') to get a hex-encoded text representation, - or decode(md5('abc'), 'hex') to get - a bytea value. - - - - - character string - converting to binary string - - - binary string - converting to character string - - Functions for converting strings between different character sets - (encodings), and for representing arbitrary binary data in textual - form, are shown in - . For these - functions, an argument or result of type text is expressed - in the database's default encoding, while arguments or results of - type bytea are in an encoding named by another argument. - - - - Text/Binary String Conversion Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - convert - - convert ( bytes bytea, - src_encoding name, - dest_encoding name ) - bytea - - - Converts a binary string representing text in - encoding src_encoding - to a binary string in encoding dest_encoding - (see for - available conversions). - - - convert('text_in_utf8', 'UTF8', 'LATIN1') - \x746578745f696e5f75746638 - - - - - - - convert_from - - convert_from ( bytes bytea, - src_encoding name ) - text - - - Converts a binary string representing text in - encoding src_encoding - to text in the database encoding - (see for - available conversions). - - - convert_from('text_in_utf8', 'UTF8') - text_in_utf8 - - - - - - - convert_to - - convert_to ( string text, - dest_encoding name ) - bytea - - - Converts a text string (in the database encoding) to a - binary string encoded in encoding dest_encoding - (see for - available conversions). - - - convert_to('some_text', 'UTF8') - \x736f6d655f74657874 - - - - - - - encode - - encode ( bytes bytea, - format text ) - text - - - Encodes binary data into a textual representation; supported - format values are: - base64, - escape, - hex. - - - encode('123\000\001', 'base64') - MTIzAAE= - - - - - - - decode - - decode ( string text, - format text ) - bytea - - - Decodes binary data from a textual representation; supported - format values are the same as - for encode. - - - decode('MTIzAAE=', 'base64') - \x3132330001 - - - - -
- - - The encode and decode - functions support the following textual formats: - - - - base64 - - base64 format - - - - The base64 format is that - of RFC - 2045 Section 6.8. As per the RFC, encoded lines are - broken at 76 characters. However instead of the MIME CRLF - end-of-line marker, only a newline is used for end-of-line. - The decode function ignores carriage-return, - newline, space, and tab characters. Otherwise, an error is - raised when decode is supplied invalid - base64 data — including when trailing padding is incorrect. - - - - - - escape - - escape format - - - - The escape format converts zero bytes and - bytes with the high bit set into octal escape sequences - (\nnn), and it doubles - backslashes. Other byte values are represented literally. - The decode function will raise an error if a - backslash is not followed by either a second backslash or three - octal digits; it accepts other byte values unchanged. - - - - - - hex - - hex format - - - - The hex format represents each 4 bits of - data as one hexadecimal digit, 0 - through f, writing the higher-order digit of - each byte first. The encode function outputs - the a-f hex digits in lower - case. Because the smallest unit of data is 8 bits, there are - always an even number of characters returned - by encode. - The decode function - accepts the a-f characters in - either upper or lower case. An error is raised - when decode is given invalid hex data - — including when given an odd number of characters. - - - - - - - - In addition, it is possible to cast integral values to and from type - bytea. Casting an integer to bytea produces - 2, 4, or 8 bytes, depending on the width of the integer type. The result - is the two's complement representation of the integer, with the most - significant byte first. Some examples: - -1234::smallint::bytea \x04d2 -cast(1234 as bytea) \x000004d2 -cast(-1234 as bytea) \xfffffb2e -'\x8000'::bytea::smallint -32768 -'\x8000'::bytea::integer 32768 - - Casting a bytea to an integer will raise an error if the - length of the bytea exceeds the width of the integer type. - - - - See also the aggregate function string_agg in - and the large object functions - in . - -
- - - - Bit String Functions and Operators - - - bit strings - functions - - - - This section describes functions and operators for examining and - manipulating bit strings, that is values of the types - bit and bit varying. (While only - type bit is mentioned in these tables, values of - type bit varying can be used interchangeably.) - Bit strings support the usual comparison operators shown in - , as well as the - operators shown in . - - - - Bit String Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - bit || bit - bit - - - Concatenation - - - B'10001' || B'011' - 10001011 - - - - - - bit & bit - bit - - - Bitwise AND (inputs must be of equal length) - - - B'10001' & B'01101' - 00001 - - - - - - bit | bit - bit - - - Bitwise OR (inputs must be of equal length) - - - B'10001' | B'01101' - 11101 - - - - - - bit # bit - bit - - - Bitwise exclusive OR (inputs must be of equal length) - - - B'10001' # B'01101' - 11100 - - - - - - ~ bit - bit - - - Bitwise NOT - - - ~ B'10001' - 01110 - - - - - - bit << integer - bit - - - Bitwise shift left - (string length is preserved) - - - B'10001' << 3 - 01000 - - - - - - bit >> integer - bit - - - Bitwise shift right - (string length is preserved) - - - B'10001' >> 2 - 00100 - - - - -
- - - Some of the functions available for binary strings are also available - for bit strings, as shown in . - - - - Bit String Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - bit_count - - bit_count ( bit ) - bigint - - - Returns the number of bits set in the bit string (also known as - popcount). - - - bit_count(B'10111') - 4 - - - - - - - bit_length - - bit_length ( bit ) - integer - - - Returns number of bits in the bit string. - - - bit_length(B'10111') - 5 - - - - - - - length - - - bit string - length - - length ( bit ) - integer - - - Returns number of bits in the bit string. - - - length(B'10111') - 5 - - - - - - - octet_length - - octet_length ( bit ) - integer - - - Returns number of bytes in the bit string. - - - octet_length(B'1011111011') - 2 - - - - - - - overlay - - overlay ( bits bit PLACING newsubstring bit FROM start integer FOR count integer ) - bit - - - Replaces the substring of bits that starts at - the start'th bit and extends - for count bits - with newsubstring. - If count is omitted, it defaults to the length - of newsubstring. - - - overlay(B'01010101010101010' placing B'11111' from 2 for 3) - 0111110101010101010 - - - - - - - position - - position ( substring bit IN bits bit ) - integer - - - Returns first starting index of the specified substring - within bits, or zero if it's not present. - - - position(B'010' in B'000001101011') - 8 - - - - - - - substring - - substring ( bits bit FROM start integer FOR count integer ) - bit - - - Extracts the substring of bits starting at - the start'th bit if that is specified, - and stopping after count bits if that is - specified. Provide at least one of start - and count. - - - substring(B'110010111111' from 3 for 2) - 00 - - - - - - - get_bit - - get_bit ( bits bit, - n integer ) - integer - - - Extracts n'th bit - from bit string; the first (leftmost) bit is bit 0. - - - get_bit(B'101010101010101010', 6) - 1 - - - - - - - set_bit - - set_bit ( bits bit, - n integer, - newvalue integer ) - bit - - - Sets n'th bit in - bit string to newvalue; - the first (leftmost) bit is bit 0. - - - set_bit(B'101010101010101010', 6, 0) - 101010001010101010 - - - - -
- - - In addition, it is possible to cast integral values to and from type - bit. - Casting an integer to bit(n) copies the rightmost - n bits. Casting an integer to a bit string width wider - than the integer itself will sign-extend on the left. - Some examples: - -44::bit(10) 0000101100 -44::bit(3) 100 -cast(-44 as bit(12)) 111111010100 -'1110'::bit(4)::integer 14 - - Note that casting to just bit means casting to - bit(1), and so will deliver only the least significant - bit of the integer. - -
- - - - Pattern Matching - - - pattern matching - - - - There are three separate approaches to pattern matching provided - by PostgreSQL: the traditional - SQL LIKE operator, the - more recent SIMILAR TO operator (added in - SQL:1999), and POSIX-style regular - expressions. Aside from the basic does this string match - this pattern? operators, functions are available to extract - or replace matching substrings and to split a string at matching - locations. - - - - - If you have pattern matching needs that go beyond this, - consider writing a user-defined function in Perl or Tcl. - - - - - - While most regular-expression searches can be executed very quickly, - regular expressions can be contrived that take arbitrary amounts of - time and memory to process. Be wary of accepting regular-expression - search patterns from hostile sources. If you must do so, it is - advisable to impose a statement timeout. - - - - Searches using SIMILAR TO patterns have the same - security hazards, since SIMILAR TO provides many - of the same capabilities as POSIX-style regular - expressions. - - - - LIKE searches, being much simpler than the other - two options, are safer to use with possibly-hostile pattern sources. - - - - - SIMILAR TO and POSIX-style regular - expressions do not support nondeterministic collations. If required, use - LIKE or apply a different collation to the expression - to work around this limitation. - - - - <function>LIKE</function> - - - LIKE - - - -string LIKE pattern ESCAPE escape-character -string NOT LIKE pattern ESCAPE escape-character - - - - The LIKE expression returns true if the - string matches the supplied - pattern. (As - expected, the NOT LIKE expression returns - false if LIKE returns true, and vice versa. - An equivalent expression is - NOT (string LIKE - pattern).) - - - - If pattern does not contain percent - signs or underscores, then the pattern only represents the string - itself; in that case LIKE acts like the - equals operator. An underscore (_) in - pattern stands for (matches) any single - character; a percent sign (%) matches any sequence - of zero or more characters. - - - - Some examples: - -'abc' LIKE 'abc' true -'abc' LIKE 'a%' true -'abc' LIKE '_b_' true -'abc' LIKE 'c' false - - - - - LIKE pattern matching supports nondeterministic - collations (see ), such as - case-insensitive collations or collations that, say, ignore punctuation. - So with a case-insensitive collation, one could have: - -'AbC' LIKE 'abc' COLLATE case_insensitive true -'AbC' LIKE 'a%' COLLATE case_insensitive true - - With collations that ignore certain characters or in general that consider - strings of different lengths equal, the semantics can become a bit more - complicated. Consider these examples: - -'.foo.' LIKE 'foo' COLLATE ign_punct true -'.foo.' LIKE 'f_o' COLLATE ign_punct true -'.foo.' LIKE '_oo' COLLATE ign_punct false - - The way the matching works is that the pattern is partitioned into - sequences of wildcards and non-wildcard strings (wildcards being - _ and %). For example, the pattern - f_o is partitioned into f, _, o, the - pattern _oo is partitioned into _, - oo. The input string matches the pattern if it can be - partitioned in such a way that the wildcards match one character or any - number of characters respectively and the non-wildcard partitions are - equal under the applicable collation. So for example, '.foo.' - LIKE 'f_o' COLLATE ign_punct is true because one can partition - .foo. into .f, o, o., and then - '.f' = 'f' COLLATE ign_punct, 'o' - matches the _ wildcard, and 'o.' = 'o' COLLATE - ign_punct. But '.foo.' LIKE '_oo' COLLATE - ign_punct is false because .foo. cannot be - partitioned in a way that the first character is any character and the - rest of the string compares equal to oo. (Note that - the single-character wildcard always matches exactly one character, - independent of the collation. So in this example, the - _ would match ., but then the rest - of the input string won't match the rest of the pattern.) - - - - LIKE pattern matching always covers the entire - string. Therefore, if it's desired to match a sequence anywhere within - a string, the pattern must start and end with a percent sign. - - - - To match a literal underscore or percent sign without matching - other characters, the respective character in - pattern must be - preceded by the escape character. The default escape - character is the backslash but a different one can be selected by - using the ESCAPE clause. To match the escape - character itself, write two escape characters. - - - - - If you have turned off, - any backslashes you write in literal string constants will need to be - doubled. See for more information. - - - - - It's also possible to select no escape character by writing - ESCAPE ''. This effectively disables the - escape mechanism, which makes it impossible to turn off the - special meaning of underscore and percent signs in the pattern. - - - - According to the SQL standard, omitting ESCAPE - means there is no escape character (rather than defaulting to a - backslash), and a zero-length ESCAPE value is - disallowed. PostgreSQL's behavior in - this regard is therefore slightly nonstandard. - - - - The key word ILIKE can be used instead of - LIKE to make the match case-insensitive according to the - active locale. (But this does not support nondeterministic collations.) - This is not in the SQL standard but is a - PostgreSQL extension. - - - - The operator ~~ is equivalent to - LIKE, and ~~* corresponds to - ILIKE. There are also - !~~ and !~~* operators that - represent NOT LIKE and NOT - ILIKE, respectively. All of these operators are - PostgreSQL-specific. You may see these - operator names in EXPLAIN output and similar - places, since the parser actually translates LIKE - et al. to these operators. - - - - The phrases LIKE, ILIKE, - NOT LIKE, and NOT ILIKE are - generally treated as operators - in PostgreSQL syntax; for example they can - be used in expression - operator ANY - (subquery) constructs, although - an ESCAPE clause cannot be included there. In some - obscure cases it may be necessary to use the underlying operator names - instead. - - - - Also see the starts-with operator ^@ and the - corresponding starts_with() function, which are - useful in cases where simply matching the beginning of a string is - needed. - - - - - - <function>SIMILAR TO</function> Regular Expressions - - - regular expression - - - - - SIMILAR TO - - - substring - - - -string SIMILAR TO pattern ESCAPE escape-character -string NOT SIMILAR TO pattern ESCAPE escape-character - - - - The SIMILAR TO operator returns true or - false depending on whether its pattern matches the given string. - It is similar to LIKE, except that it - interprets the pattern using the SQL standard's definition of a - regular expression. SQL regular expressions are a curious cross - between LIKE notation and common (POSIX) regular - expression notation. - - - - Like LIKE, the SIMILAR TO - operator succeeds only if its pattern matches the entire string; - this is unlike common regular expression behavior where the pattern - can match any part of the string. - Also like - LIKE, SIMILAR TO uses - _ and % as wildcard characters denoting - any single character and any string, respectively (these are - comparable to . and .* in POSIX regular - expressions). - - - - In addition to these facilities borrowed from LIKE, - SIMILAR TO supports these pattern-matching - metacharacters borrowed from POSIX regular expressions: - - - - - | denotes alternation (either of two alternatives). - - - - - * denotes repetition of the previous item zero - or more times. - - - - - + denotes repetition of the previous item one - or more times. - - - - - ? denotes repetition of the previous item zero - or one time. - - - - - {m} denotes repetition - of the previous item exactly m times. - - - - - {m,} denotes repetition - of the previous item m or more times. - - - - - {m,n} - denotes repetition of the previous item at least m and - not more than n times. - - - - - Parentheses () can be used to group items into - a single logical item. - - - - - A bracket expression [...] specifies a character - class, just as in POSIX regular expressions. - - - - - Notice that the period (.) is not a metacharacter - for SIMILAR TO. - - - - As with LIKE, a backslash disables the special - meaning of any of these metacharacters. A different escape character - can be specified with ESCAPE, or the escape - capability can be disabled by writing ESCAPE ''. - - - - According to the SQL standard, omitting ESCAPE - means there is no escape character (rather than defaulting to a - backslash), and a zero-length ESCAPE value is - disallowed. PostgreSQL's behavior in - this regard is therefore slightly nonstandard. - - - - Another nonstandard extension is that following the escape character - with a letter or digit provides access to the escape sequences - defined for POSIX regular expressions; see - , - , and - below. - - - - Some examples: - -'abc' SIMILAR TO 'abc' true -'abc' SIMILAR TO 'a' false -'abc' SIMILAR TO '%(b|d)%' true -'abc' SIMILAR TO '(b|c)%' false -'-abc-' SIMILAR TO '%\mabc\M%' true -'xabcy' SIMILAR TO '%\mabc\M%' false - - - - - The substring function with three parameters - provides extraction of a substring that matches an SQL - regular expression pattern. The function can be written according - to standard SQL syntax: - -substring(string similar pattern escape escape-character) - - or using the now obsolete SQL:1999 syntax: - -substring(string from pattern for escape-character) - - or as a plain three-argument function: - -substring(string, pattern, escape-character) - - As with SIMILAR TO, the - specified pattern must match the entire data string, or else the - function fails and returns null. To indicate the part of the - pattern for which the matching data sub-string is of interest, - the pattern should contain - two occurrences of the escape character followed by a double quote - ("). - The text matching the portion of the pattern - between these separators is returned when the match is successful. - - - - The escape-double-quote separators actually - divide substring's pattern into three independent - regular expressions; for example, a vertical bar (|) - in any of the three sections affects only that section. Also, the first - and third of these regular expressions are defined to match the smallest - possible amount of text, not the largest, when there is any ambiguity - about how much of the data string matches which pattern. (In POSIX - parlance, the first and third regular expressions are forced to be - non-greedy.) - - - - As an extension to the SQL standard, PostgreSQL - allows there to be just one escape-double-quote separator, in which case - the third regular expression is taken as empty; or no separators, in which - case the first and third regular expressions are taken as empty. - - - - Some examples, with #" delimiting the return string: - -substring('foobar' similar '%#"o_b#"%' escape '#') oob -substring('foobar' similar '#"o_b#"%' escape '#') NULL - - - - - - <acronym>POSIX</acronym> Regular Expressions - - - regular expression - pattern matching - - - substring - - - regexp_count - - - regexp_instr - - - regexp_like - - - regexp_match - - - regexp_matches - - - regexp_replace - - - regexp_split_to_table - - - regexp_split_to_array - - - regexp_substr - - - - lists the available - operators for pattern matching using POSIX regular expressions. - - - - Regular Expression Match Operators - - - - - - Operator - - - Description - - - Example(s) - - - - - - - - text ~ text - boolean - - - String matches regular expression, case sensitively - - - 'thomas' ~ 't.*ma' - t - - - - - - text ~* text - boolean - - - String matches regular expression, case-insensitively - - - 'thomas' ~* 'T.*ma' - t - - - - - - text !~ text - boolean - - - String does not match regular expression, case sensitively - - - 'thomas' !~ 't.*max' - t - - - - - - text !~* text - boolean - - - String does not match regular expression, case-insensitively - - - 'thomas' !~* 'T.*ma' - f - - - - -
- - - POSIX regular expressions provide a more - powerful means for pattern matching than the LIKE and - SIMILAR TO operators. - Many Unix tools such as egrep, - sed, or awk use a pattern - matching language that is similar to the one described here. - - - - A regular expression is a character sequence that is an - abbreviated definition of a set of strings (a regular - set). A string is said to match a regular expression - if it is a member of the regular set described by the regular - expression. As with LIKE, pattern characters - match string characters exactly unless they are special characters - in the regular expression language — but regular expressions use - different special characters than LIKE does. - Unlike LIKE patterns, a - regular expression is allowed to match anywhere within a string, unless - the regular expression is explicitly anchored to the beginning or - end of the string. - - - - Some examples: - -'abcd' ~ 'bc' true -'abcd' ~ 'a.c' true — dot matches any character -'abcd' ~ 'a.*d' true — * repeats the preceding pattern item -'abcd' ~ '(b|x)' true — | means OR, parentheses group -'abcd' ~ '^a' true — ^ anchors to start of string -'abcd' ~ '^(b|c)' false — would match except for anchoring - - - - - The POSIX pattern language is described in much - greater detail below. - - - - The substring function with two parameters, - substring(string from - pattern), provides extraction of a - substring - that matches a POSIX regular expression pattern. It returns null if - there is no match, otherwise the first portion of the text that matched the - pattern. But if the pattern contains any parentheses, the portion - of the text that matched the first parenthesized subexpression (the - one whose left parenthesis comes first) is - returned. You can put parentheses around the whole expression - if you want to use parentheses within it without triggering this - exception. If you need parentheses in the pattern before the - subexpression you want to extract, see the non-capturing parentheses - described below. - - - - Some examples: - -substring('foobar' from 'o.b') oob -substring('foobar' from 'o(.)b') o - - - - - The regexp_count function counts the number of - places where a POSIX regular expression pattern matches a string. - It has the syntax - regexp_count(string, - pattern - , start - , flags - ). - pattern is searched for - in string, normally from the beginning of - the string, but if the start parameter is - provided then beginning from that character index. - The flags parameter is an optional text - string containing zero or more single-letter flags that change the - function's behavior. For example, including i in - flags specifies case-insensitive matching. - Supported flags are described in - . - - - - Some examples: - -regexp_count('ABCABCAXYaxy', 'A.') 3 -regexp_count('ABCABCAXYaxy', 'A.', 1, 'i') 4 - - - - - The regexp_instr function returns the starting or - ending position of the N'th match of a - POSIX regular expression pattern to a string, or zero if there is no - such match. It has the syntax - regexp_instr(string, - pattern - , start - , N - , endoption - , flags - , subexpr - ). - pattern is searched for - in string, normally from the beginning of - the string, but if the start parameter is - provided then beginning from that character index. - If N is specified - then the N'th match of the pattern - is located, otherwise the first match is located. - If the endoption parameter is omitted or - specified as zero, the function returns the position of the first - character of the match. Otherwise, endoption - must be one, and the function returns the position of the character - following the match. - The flags parameter is an optional text - string containing zero or more single-letter flags that change the - function's behavior. Supported flags are described - in . - For a pattern containing parenthesized - subexpressions, subexpr is an integer - indicating which subexpression is of interest: the result identifies - the position of the substring matching that subexpression. - Subexpressions are numbered in the order of their leading parentheses. - When subexpr is omitted or zero, the result - identifies the position of the whole match regardless of - parenthesized subexpressions. - - - - Some examples: - -regexp_instr('number of your street, town zip, FR', '[^,]+', 1, 2) - 23 -regexp_instr(string=>'ABCDEFGHI', pattern=>'(c..)(...)', start=>1, "N"=>1, endoption=>0, flags=>'i', subexpr=>2) - 6 - - - - - The regexp_like function checks whether a match - of a POSIX regular expression pattern occurs within a string, - returning boolean true or false. It has the syntax - regexp_like(string, - pattern - , flags ). - The flags parameter is an optional text - string containing zero or more single-letter flags that change the - function's behavior. Supported flags are described - in . - This function has the same results as the ~ - operator if no flags are specified. If only the i - flag is specified, it has the same results as - the ~* operator. - - - - Some examples: - -regexp_like('Hello World', 'world') false -regexp_like('Hello World', 'world', 'i') true - - - - - The regexp_match function returns a text array of - matching substring(s) within the first match of a POSIX - regular expression pattern to a string. It has the syntax - regexp_match(string, - pattern , flags ). - If there is no match, the result is NULL. - If a match is found, and the pattern contains no - parenthesized subexpressions, then the result is a single-element text - array containing the substring matching the whole pattern. - If a match is found, and the pattern contains - parenthesized subexpressions, then the result is a text array - whose n'th element is the substring matching - the n'th parenthesized subexpression of - the pattern (not counting non-capturing - parentheses; see below for details). - The flags parameter is an optional text string - containing zero or more single-letter flags that change the function's - behavior. Supported flags are described - in . - - - - Some examples: - -SELECT regexp_match('foobarbequebaz', 'bar.*que'); - regexp_match --------------- - {barbeque} -(1 row) - -SELECT regexp_match('foobarbequebaz', '(bar)(beque)'); - regexp_match --------------- - {bar,beque} -(1 row) - - - - - - In the common case where you just want the whole matching substring - or NULL for no match, the best solution is to - use regexp_substr(). - However, regexp_substr() only exists - in PostgreSQL version 15 and up. When - working in older versions, you can extract the first element - of regexp_match()'s result, for example: - -SELECT (regexp_match('foobarbequebaz', 'bar.*que'))[1]; - regexp_match --------------- - barbeque -(1 row) - - - - - - The regexp_matches function returns a set of text arrays - of matching substring(s) within matches of a POSIX regular - expression pattern to a string. It has the same syntax as - regexp_match. - This function returns no rows if there is no match, one row if there is - a match and the g flag is not given, or N - rows if there are N matches and the g flag - is given. Each returned row is a text array containing the whole - matched substring or the substrings matching parenthesized - subexpressions of the pattern, just as described above - for regexp_match. - regexp_matches accepts all the flags shown - in , plus - the g flag which commands it to return all matches, not - just the first one. - - - - Some examples: - -SELECT regexp_matches('foo', 'not there'); - regexp_matches ----------------- -(0 rows) - -SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); - regexp_matches ----------------- - {bar,beque} - {bazil,barf} -(2 rows) - - - - - - In most cases regexp_matches() should be used with - the g flag, since if you only want the first match, it's - easier and more efficient to use regexp_match(). - However, regexp_match() only exists - in PostgreSQL version 10 and up. When working in older - versions, a common trick is to place a regexp_matches() - call in a sub-select, for example: - -SELECT col1, (SELECT regexp_matches(col2, '(bar)(beque)')) FROM tab; - - This produces a text array if there's a match, or NULL if - not, the same as regexp_match() would do. Without the - sub-select, this query would produce no output at all for table rows - without a match, which is typically not the desired behavior. - - - - - The regexp_replace function provides substitution of - new text for substrings that match POSIX regular expression patterns. - It has the syntax - regexp_replace(string, - pattern, replacement - , flags ) - or - regexp_replace(string, - pattern, replacement, - start - , N - , flags ). - The source string is returned unchanged if - there is no match to the pattern. If there is a - match, the string is returned with the - replacement string substituted for the matching - substring. The replacement string can contain - \n, where n is 1 - through 9, to indicate that the source substring matching the - n'th parenthesized subexpression of the pattern should be - inserted, and it can contain \& to indicate that the - substring matching the entire pattern should be inserted. Write - \\ if you need to put a literal backslash in the replacement - text. - pattern is searched for - in string, normally from the beginning of - the string, but if the start parameter is - provided then beginning from that character index. - By default, only the first match of the pattern is replaced. - If N is specified and is greater than zero, - then the N'th match of the pattern - is replaced. - If the g flag is given, or - if N is specified and is zero, then all - matches at or after the start position are - replaced. (The g flag is ignored - when N is specified.) - The flags parameter is an optional text - string containing zero or more single-letter flags that change the - function's behavior. Supported flags (though - not g) are - described in . - - - - Some examples: - -regexp_replace('foobarbaz', 'b..', 'X') - fooXbaz -regexp_replace('foobarbaz', 'b..', 'X', 'g') - fooXX -regexp_replace('foobarbaz', 'b(..)', 'X\1Y', 'g') - fooXarYXazY -regexp_replace('A PostgreSQL function', 'a|e|i|o|u', 'X', 1, 0, 'i') - X PXstgrXSQL fXnctXXn -regexp_replace(string=>'A PostgreSQL function', pattern=>'a|e|i|o|u', replacement=>'X', start=>1, "N"=>3, flags=>'i') - A PostgrXSQL function - - - - - The regexp_split_to_table function splits a string using a POSIX - regular expression pattern as a delimiter. It has the syntax - regexp_split_to_table(string, pattern - , flags ). - If there is no match to the pattern, the function returns the - string. If there is at least one match, for each match it returns - the text from the end of the last match (or the beginning of the string) - to the beginning of the match. When there are no more matches, it - returns the text from the end of the last match to the end of the string. - The flags parameter is an optional text string containing - zero or more single-letter flags that change the function's behavior. - regexp_split_to_table supports the flags described in - . - - - - The regexp_split_to_array function behaves the same as - regexp_split_to_table, except that regexp_split_to_array - returns its result as an array of text. It has the syntax - regexp_split_to_array(string, pattern - , flags ). - The parameters are the same as for regexp_split_to_table. - - - - Some examples: - -SELECT foo FROM regexp_split_to_table('the quick brown fox jumps over the lazy dog', '\s+') AS foo; - foo -------- - the - quick - brown - fox - jumps - over - the - lazy - dog -(9 rows) - -SELECT regexp_split_to_array('the quick brown fox jumps over the lazy dog', '\s+'); - regexp_split_to_array ------------------------------------------------ - {the,quick,brown,fox,jumps,over,the,lazy,dog} -(1 row) - -SELECT foo FROM regexp_split_to_table('the quick brown fox', '\s*') AS foo; - foo ------ - t - h - e - q - u - i - c - k - b - r - o - w - n - f - o - x -(16 rows) - - - - - As the last example demonstrates, the regexp split functions ignore - zero-length matches that occur at the start or end of the string - or immediately after a previous match. This is contrary to the strict - definition of regexp matching that is implemented by - the other regexp functions, but is usually the most convenient behavior - in practice. Other software systems such as Perl use similar definitions. - - - - The regexp_substr function returns the substring - that matches a POSIX regular expression pattern, - or NULL if there is no match. It has the syntax - regexp_substr(string, - pattern - , start - , N - , flags - , subexpr - ). - pattern is searched for - in string, normally from the beginning of - the string, but if the start parameter is - provided then beginning from that character index. - If N is specified - then the N'th match of the pattern - is returned, otherwise the first match is returned. - The flags parameter is an optional text - string containing zero or more single-letter flags that change the - function's behavior. Supported flags are described - in . - For a pattern containing parenthesized - subexpressions, subexpr is an integer - indicating which subexpression is of interest: the result is the - substring matching that subexpression. - Subexpressions are numbered in the order of their leading parentheses. - When subexpr is omitted or zero, the result - is the whole match regardless of parenthesized subexpressions. - - - - Some examples: - -regexp_substr('number of your street, town zip, FR', '[^,]+', 1, 2) - town zip -regexp_substr('ABCDEFGHI', '(c..)(...)', 1, 1, 'i', 2) - FGH - - - - - - - Regular Expression Details - - - PostgreSQL's regular expressions are implemented - using a software package written by Henry Spencer. Much of - the description of regular expressions below is copied verbatim from his - manual. - - - - Regular expressions (REs), as defined in - POSIX 1003.2, come in two forms: - extended REs or EREs - (roughly those of egrep), and - basic REs or BREs - (roughly those of ed). - PostgreSQL supports both forms, and - also implements some extensions - that are not in the POSIX standard, but have become widely used - due to their availability in programming languages such as Perl and Tcl. - REs using these non-POSIX extensions are called - advanced REs or AREs - in this documentation. AREs are almost an exact superset of EREs, - but BREs have several notational incompatibilities (as well as being - much more limited). - We first describe the ARE and ERE forms, noting features that apply - only to AREs, and then describe how BREs differ. - - - - - PostgreSQL always initially presumes that a regular - expression follows the ARE rules. However, the more limited ERE or - BRE rules can be chosen by prepending an embedded option - to the RE pattern, as described in . - This can be useful for compatibility with applications that expect - exactly the POSIX 1003.2 rules. - - - - - A regular expression is defined as one or more - branches, separated by - |. It matches anything that matches one of the - branches. - - - - A branch is zero or more quantified atoms or - constraints, concatenated. - It matches a match for the first, followed by a match for the second, etc.; - an empty branch matches the empty string. - - - - A quantified atom is an atom possibly followed - by a single quantifier. - Without a quantifier, it matches a match for the atom. - With a quantifier, it can match some number of matches of the atom. - An atom can be any of the possibilities - shown in . - The possible quantifiers and their meanings are shown in - . - - - - A constraint matches an empty string, but matches only when - specific conditions are met. A constraint can be used where an atom - could be used, except it cannot be followed by a quantifier. - The simple constraints are shown in - ; - some more constraints are described later. - - - - - Regular Expression Atoms - - - - - Atom - Description - - - - - - (re) - (where re is any regular expression) - matches a match for - re, with the match noted for possible reporting - - - - (?:re) - as above, but the match is not noted for reporting - (a non-capturing set of parentheses) - (AREs only) - - - - . - matches any single character - - - - [chars] - a bracket expression, - matching any one of the chars (see - for more detail) - - - - \k - (where k is a non-alphanumeric character) - matches that character taken as an ordinary character, - e.g., \\ matches a backslash character - - - - \c - where c is alphanumeric - (possibly followed by other characters) - is an escape, see - (AREs only; in EREs and BREs, this matches c) - - - - { - when followed by a character other than a digit, - matches the left-brace character {; - when followed by a digit, it is the beginning of a - bound (see below) - - - - x - where x is a single character with no other - significance, matches that character - - - -
- - - An RE cannot end with a backslash (\). - - - - - If you have turned off, - any backslashes you write in literal string constants will need to be - doubled. See for more information. - - - - - Regular Expression Quantifiers - - - - - Quantifier - Matches - - - - - - * - a sequence of 0 or more matches of the atom - - - - + - a sequence of 1 or more matches of the atom - - - - ? - a sequence of 0 or 1 matches of the atom - - - - {m} - a sequence of exactly m matches of the atom - - - - {m,} - a sequence of m or more matches of the atom - - - - - {m,n} - a sequence of m through n - (inclusive) matches of the atom; m cannot exceed - n - - - - *? - non-greedy version of * - - - - +? - non-greedy version of + - - - - ?? - non-greedy version of ? - - - - {m}? - non-greedy version of {m} - - - - {m,}? - non-greedy version of {m,} - - - - - {m,n}? - non-greedy version of {m,n} - - - -
- - - The forms using {...} - are known as bounds. - The numbers m and n within a bound are - unsigned decimal integers with permissible values from 0 to 255 inclusive. - - - - Non-greedy quantifiers (available in AREs only) match the - same possibilities as their corresponding normal (greedy) - counterparts, but prefer the smallest number rather than the largest - number of matches. - See for more detail. - - - - - A quantifier cannot immediately follow another quantifier, e.g., - ** is invalid. - A quantifier cannot - begin an expression or subexpression or follow - ^ or |. - - - - - Regular Expression Constraints - - - - - Constraint - Description - - - - - - ^ - matches at the beginning of the string - - - - $ - matches at the end of the string - - - - (?=re) - positive lookahead matches at any point - where a substring matching re begins - (AREs only) - - - - (?!re) - negative lookahead matches at any point - where no substring matching re begins - (AREs only) - - - - (?<=re) - positive lookbehind matches at any point - where a substring matching re ends - (AREs only) - - - - (?<!re) - negative lookbehind matches at any point - where no substring matching re ends - (AREs only) - - - -
- - - Lookahead and lookbehind constraints cannot contain back - references (see ), - and all parentheses within them are considered non-capturing. - -
- - - Bracket Expressions - - - A bracket expression is a list of - characters enclosed in []. It normally matches - any single character from the list (but see below). If the list - begins with ^, it matches any single character - not from the rest of the list. - If two characters - in the list are separated by -, this is - shorthand for the full range of characters between those two - (inclusive) in the collating sequence, - e.g., [0-9] in ASCII matches - any decimal digit. It is illegal for two ranges to share an - endpoint, e.g., a-c-e. Ranges are very - collating-sequence-dependent, so portable programs should avoid - relying on them. - - - - To include a literal ] in the list, make it the - first character (after ^, if that is used). To - include a literal -, make it the first or last - character, or the second endpoint of a range. To use a literal - - as the first endpoint of a range, enclose it - in [. and .] to make it a - collating element (see below). With the exception of these characters, - some combinations using [ - (see next paragraphs), and escapes (AREs only), all other special - characters lose their special significance within a bracket expression. - In particular, \ is not special when following - ERE or BRE rules, though it is special (as introducing an escape) - in AREs. - - - - Within a bracket expression, a collating element (a character, a - multiple-character sequence that collates as if it were a single - character, or a collating-sequence name for either) enclosed in - [. and .] stands for the - sequence of characters of that collating element. The sequence is - treated as a single element of the bracket expression's list. This - allows a bracket - expression containing a multiple-character collating element to - match more than one character, e.g., if the collating sequence - includes a ch collating element, then the RE - [[.ch.]]*c matches the first five characters of - chchcc. - - - - - PostgreSQL currently does not support multi-character collating - elements. This information describes possible future behavior. - - - - - Within a bracket expression, a collating element enclosed in - [= and =] is an equivalence - class, standing for the sequences of characters of all collating - elements equivalent to that one, including itself. (If there are - no other equivalent collating elements, the treatment is as if the - enclosing delimiters were [. and - .].) For example, if o and - ^ are the members of an equivalence class, then - [[=o=]], [[=^=]], and - [o^] are all synonymous. An equivalence class - cannot be an endpoint of a range. - - - - Within a bracket expression, the name of a character class - enclosed in [: and :] stands - for the list of all characters belonging to that class. A character - class cannot be used as an endpoint of a range. - The POSIX standard defines these character class - names: - alnum (letters and numeric digits), - alpha (letters), - blank (space and tab), - cntrl (control characters), - digit (numeric digits), - graph (printable characters except space), - lower (lower-case letters), - print (printable characters including space), - punct (punctuation), - space (any white space), - upper (upper-case letters), - and xdigit (hexadecimal digits). - The behavior of these standard character classes is generally - consistent across platforms for characters in the 7-bit ASCII set. - Whether a given non-ASCII character is considered to belong to one - of these classes depends on the collation - that is used for the regular-expression function or operator - (see ), or by default on the - database's LC_CTYPE locale setting (see - ). The classification of non-ASCII - characters can vary across platforms even in similarly-named - locales. (But the C locale never considers any - non-ASCII characters to belong to any of these classes.) - In addition to these standard character - classes, PostgreSQL defines - the word character class, which is the same as - alnum plus the underscore (_) - character, and - the ascii character class, which contains exactly - the 7-bit ASCII set. - - - - There are two special cases of bracket expressions: the bracket - expressions [[:<:]] and - [[:>:]] are constraints, - matching empty strings at the beginning - and end of a word respectively. A word is defined as a sequence - of word characters that is neither preceded nor followed by word - characters. A word character is any character belonging to the - word character class, that is, any letter, digit, - or underscore. This is an extension, compatible with but not - specified by POSIX 1003.2, and should be used with - caution in software intended to be portable to other systems. - The constraint escapes described below are usually preferable; they - are no more standard, but are easier to type. - - - - - Regular Expression Escapes - - - Escapes are special sequences beginning with \ - followed by an alphanumeric character. Escapes come in several varieties: - character entry, class shorthands, constraint escapes, and back references. - A \ followed by an alphanumeric character but not constituting - a valid escape is illegal in AREs. - In EREs, there are no escapes: outside a bracket expression, - a \ followed by an alphanumeric character merely stands for - that character as an ordinary character, and inside a bracket expression, - \ is an ordinary character. - (The latter is the one actual incompatibility between EREs and AREs.) - - - - Character-entry escapes exist to make it easier to specify - non-printing and other inconvenient characters in REs. They are - shown in . - - - - Class-shorthand escapes provide shorthands for certain - commonly-used character classes. They are - shown in . - - - - A constraint escape is a constraint, - matching the empty string if specific conditions are met, - written as an escape. They are - shown in . - - - - A back reference (\n) matches the - same string matched by the previous parenthesized subexpression specified - by the number n - (see ). For example, - ([bc])\1 matches bb or cc - but not bc or cb. - The subexpression must entirely precede the back reference in the RE. - Subexpressions are numbered in the order of their leading parentheses. - Non-capturing parentheses do not define subexpressions. - The back reference considers only the string characters matched by the - referenced subexpression, not any constraints contained in it. For - example, (^\d)\1 will match 22. - - - - Regular Expression Character-Entry Escapes - - - - - Escape - Description - - - - - - \a - alert (bell) character, as in C - - - - \b - backspace, as in C - - - - \B - synonym for backslash (\) to help reduce the need for backslash - doubling - - - - \cX - (where X is any character) the character whose - low-order 5 bits are the same as those of - X, and whose other bits are all zero - - - - \e - the character whose collating-sequence name - is ESC, - or failing that, the character with octal value 033 - - - - \f - form feed, as in C - - - - \n - newline, as in C - - - - \r - carriage return, as in C - - - - \t - horizontal tab, as in C - - - - \uwxyz - (where wxyz is exactly four hexadecimal digits) - the character whose hexadecimal value is - 0xwxyz - - - - - \Ustuvwxyz - (where stuvwxyz is exactly eight hexadecimal - digits) - the character whose hexadecimal value is - 0xstuvwxyz - - - - - \v - vertical tab, as in C - - - - \xhhh - (where hhh is any sequence of hexadecimal - digits) - the character whose hexadecimal value is - 0xhhh - (a single character no matter how many hexadecimal digits are used) - - - - - \0 - the character whose value is 0 (the null byte) - - - - \xy - (where xy is exactly two octal digits, - and is not a back reference) - the character whose octal value is - 0xy - - - - \xyz - (where xyz is exactly three octal digits, - and is not a back reference) - the character whose octal value is - 0xyz - - - -
- - - Hexadecimal digits are 0-9, - a-f, and A-F. - Octal digits are 0-7. - - - - Numeric character-entry escapes specifying values outside the ASCII range - (0–127) have meanings dependent on the database encoding. When the - encoding is UTF-8, escape values are equivalent to Unicode code points, - for example \u1234 means the character U+1234. - For other multibyte encodings, character-entry escapes usually just - specify the concatenation of the byte values for the character. If the - escape value does not correspond to any legal character in the database - encoding, no error will be raised, but it will never match any data. - - - - The character-entry escapes are always taken as ordinary characters. - For example, \135 is ] in ASCII, but - \135 does not terminate a bracket expression. - - - - Regular Expression Class-Shorthand Escapes - - - - - Escape - Description - - - - - - \d - matches any digit, like - [[:digit:]] - - - - \s - matches any whitespace character, like - [[:space:]] - - - - \w - matches any word character, like - [[:word:]] - - - - \D - matches any non-digit, like - [^[:digit:]] - - - - \S - matches any non-whitespace character, like - [^[:space:]] - - - - \W - matches any non-word character, like - [^[:word:]] - - - -
- - - The class-shorthand escapes also work within bracket expressions, - although the definitions shown above are not quite syntactically - valid in that context. - For example, [a-c\d] is equivalent to - [a-c[:digit:]]. - - - - Regular Expression Constraint Escapes - - - - - Escape - Description - - - - - - \A - matches only at the beginning of the string - (see for how this differs from - ^) - - - - \m - matches only at the beginning of a word - - - - \M - matches only at the end of a word - - - - \y - matches only at the beginning or end of a word - - - - \Y - matches only at a point that is not the beginning or end of a - word - - - - \Z - matches only at the end of the string - (see for how this differs from - $) - - - -
- - - A word is defined as in the specification of - [[:<:]] and [[:>:]] above. - Constraint escapes are illegal within bracket expressions. - - - - Regular Expression Back References - - - - - Escape - Description - - - - - - \m - (where m is a nonzero digit) - a back reference to the m'th subexpression - - - - \mnn - (where m is a nonzero digit, and - nn is some more digits, and the decimal value - mnn is not greater than the number of closing capturing - parentheses seen so far) - a back reference to the mnn'th subexpression - - - -
- - - - There is an inherent ambiguity between octal character-entry - escapes and back references, which is resolved by the following heuristics, - as hinted at above. - A leading zero always indicates an octal escape. - A single non-zero digit, not followed by another digit, - is always taken as a back reference. - A multi-digit sequence not starting with a zero is taken as a back - reference if it comes after a suitable subexpression - (i.e., the number is in the legal range for a back reference), - and otherwise is taken as octal. - - -
- - - Regular Expression Metasyntax - - - In addition to the main syntax described above, there are some special - forms and miscellaneous syntactic facilities available. - - - - An RE can begin with one of two special director prefixes. - If an RE begins with ***:, - the rest of the RE is taken as an ARE. (This normally has no effect in - PostgreSQL, since REs are assumed to be AREs; - but it does have an effect if ERE or BRE mode had been specified by - the flags parameter to a regex function.) - If an RE begins with ***=, - the rest of the RE is taken to be a literal string, - with all characters considered ordinary characters. - - - - An ARE can begin with embedded options: - a sequence (?xyz) - (where xyz is one or more alphabetic characters) - specifies options affecting the rest of the RE. - These options override any previously determined options — - in particular, they can override the case-sensitivity behavior implied by - a regex operator, or the flags parameter to a regex - function. - The available option letters are - shown in . - Note that these same option letters are used in the flags - parameters of regex functions. - - - - ARE Embedded-Option Letters - - - - - Option - Description - - - - - - b - rest of RE is a BRE - - - - c - case-sensitive matching (overrides operator type) - - - - e - rest of RE is an ERE - - - - i - case-insensitive matching (see - ) (overrides operator type) - - - - m - historical synonym for n - - - - n - newline-sensitive matching (see - ) - - - - p - partial newline-sensitive matching (see - ) - - - - q - rest of RE is a literal (quoted) string, all ordinary - characters - - - - s - non-newline-sensitive matching (default) - - - - t - tight syntax (default; see below) - - - - w - inverse partial newline-sensitive (weird) matching - (see ) - - - - x - expanded syntax (see below) - - - -
- - - Embedded options take effect at the ) terminating the sequence. - They can appear only at the start of an ARE (after the - ***: director if any). - - - - In addition to the usual (tight) RE syntax, in which all - characters are significant, there is an expanded syntax, - available by specifying the embedded x option. - In the expanded syntax, - white-space characters in the RE are ignored, as are - all characters between a # - and the following newline (or the end of the RE). This - permits paragraphing and commenting a complex RE. - There are three exceptions to that basic rule: - - - - - a white-space character or # preceded by \ is - retained - - - - - white space or # within a bracket expression is retained - - - - - white space and comments cannot appear within multi-character symbols, - such as (?: - - - - - For this purpose, white-space characters are blank, tab, newline, and - any character that belongs to the space character class. - - - - Finally, in an ARE, outside bracket expressions, the sequence - (?#ttt) - (where ttt is any text not containing a )) - is a comment, completely ignored. - Again, this is not allowed between the characters of - multi-character symbols, like (?:. - Such comments are more a historical artifact than a useful facility, - and their use is deprecated; use the expanded syntax instead. - - - - None of these metasyntax extensions is available if - an initial ***= director - has specified that the user's input be treated as a literal string - rather than as an RE. - -
- - - Regular Expression Matching Rules - - - In the event that an RE could match more than one substring of a given - string, the RE matches the one starting earliest in the string. - If the RE could match more than one substring starting at that point, - either the longest possible match or the shortest possible match will - be taken, depending on whether the RE is greedy or - non-greedy. - - - - Whether an RE is greedy or not is determined by the following rules: - - - - Most atoms, and all constraints, have no greediness attribute (because - they cannot match variable amounts of text anyway). - - - - - Adding parentheses around an RE does not change its greediness. - - - - - A quantified atom with a fixed-repetition quantifier - ({m} - or - {m}?) - has the same greediness (possibly none) as the atom itself. - - - - - A quantified atom with other normal quantifiers (including - {m,n} - with m equal to n) - is greedy (prefers longest match). - - - - - A quantified atom with a non-greedy quantifier (including - {m,n}? - with m equal to n) - is non-greedy (prefers shortest match). - - - - - A branch — that is, an RE that has no top-level - | operator — has the same greediness as the first - quantified atom in it that has a greediness attribute. - - - - - An RE consisting of two or more branches connected by the - | operator is always greedy. - - - - - - - The above rules associate greediness attributes not only with individual - quantified atoms, but with branches and entire REs that contain quantified - atoms. What that means is that the matching is done in such a way that - the branch, or whole RE, matches the longest or shortest possible - substring as a whole. Once the length of the entire match - is determined, the part of it that matches any particular subexpression - is determined on the basis of the greediness attribute of that - subexpression, with subexpressions starting earlier in the RE taking - priority over ones starting later. - - - - An example of what this means: - -SELECT SUBSTRING('XY1234Z', 'Y*([0-9]{1,3})'); -Result: 123 -SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})'); -Result: 1 - - In the first case, the RE as a whole is greedy because Y* - is greedy. It can match beginning at the Y, and it matches - the longest possible string starting there, i.e., Y123. - The output is the parenthesized part of that, or 123. - In the second case, the RE as a whole is non-greedy because Y*? - is non-greedy. It can match beginning at the Y, and it matches - the shortest possible string starting there, i.e., Y1. - The subexpression [0-9]{1,3} is greedy but it cannot change - the decision as to the overall match length; so it is forced to match - just 1. - - - - In short, when an RE contains both greedy and non-greedy subexpressions, - the total match length is either as long as possible or as short as - possible, according to the attribute assigned to the whole RE. The - attributes assigned to the subexpressions only affect how much of that - match they are allowed to eat relative to each other. - - - - The quantifiers {1,1} and {1,1}? - can be used to force greediness or non-greediness, respectively, - on a subexpression or a whole RE. - This is useful when you need the whole RE to have a greediness attribute - different from what's deduced from its elements. As an example, - suppose that we are trying to separate a string containing some digits - into the digits and the parts before and after them. We might try to - do that like this: - -SELECT regexp_match('abc01234xyz', '(.*)(\d+)(.*)'); -Result: {abc0123,4,xyz} - - That didn't work: the first .* is greedy so - it eats as much as it can, leaving the \d+ to - match at the last possible place, the last digit. We might try to fix - that by making it non-greedy: - -SELECT regexp_match('abc01234xyz', '(.*?)(\d+)(.*)'); -Result: {abc,0,""} - - That didn't work either, because now the RE as a whole is non-greedy - and so it ends the overall match as soon as possible. We can get what - we want by forcing the RE as a whole to be greedy: - -SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); -Result: {abc,01234,xyz} - - Controlling the RE's overall greediness separately from its components' - greediness allows great flexibility in handling variable-length patterns. - - - - When deciding what is a longer or shorter match, - match lengths are measured in characters, not collating elements. - An empty string is considered longer than no match at all. - For example: - bb* - matches the three middle characters of abbbc; - (week|wee)(night|knights) - matches all ten characters of weeknights; - when (.*).* - is matched against abc the parenthesized subexpression - matches all three characters; and when - (a*)* is matched against bc - both the whole RE and the parenthesized - subexpression match an empty string. - - - - If case-independent matching is specified, - the effect is much as if all case distinctions had vanished from the - alphabet. - When an alphabetic that exists in multiple cases appears as an - ordinary character outside a bracket expression, it is effectively - transformed into a bracket expression containing both cases, - e.g., x becomes [xX]. - When it appears inside a bracket expression, all case counterparts - of it are added to the bracket expression, e.g., - [x] becomes [xX] - and [^x] becomes [^xX]. - - - - If newline-sensitive matching is specified, . - and bracket expressions using ^ - will never match the newline character - (so that matches will not cross lines unless the RE - explicitly includes a newline) - and ^ and $ - will match the empty string after and before a newline - respectively, in addition to matching at beginning and end of string - respectively. - But the ARE escapes \A and \Z - continue to match beginning or end of string only. - Also, the character class shorthands \D - and \W will match a newline regardless of this mode. - (Before PostgreSQL 14, they did not match - newlines when in newline-sensitive mode. - Write [^[:digit:]] - or [^[:word:]] to get the old behavior.) - - - - If partial newline-sensitive matching is specified, - this affects . and bracket expressions - as with newline-sensitive matching, but not ^ - and $. - - - - If inverse partial newline-sensitive matching is specified, - this affects ^ and $ - as with newline-sensitive matching, but not . - and bracket expressions. - This isn't very useful but is provided for symmetry. - - - - - Limits and Compatibility - - - No particular limit is imposed on the length of REs in this - implementation. However, - programs intended to be highly portable should not employ REs longer - than 256 bytes, - as a POSIX-compliant implementation can refuse to accept such REs. - - - - The only feature of AREs that is actually incompatible with - POSIX EREs is that \ does not lose its special - significance inside bracket expressions. - All other ARE features use syntax which is illegal or has - undefined or unspecified effects in POSIX EREs; - the *** syntax of directors likewise is outside the POSIX - syntax for both BREs and EREs. - - - - Many of the ARE extensions are borrowed from Perl, but some have - been changed to clean them up, and a few Perl extensions are not present. - Incompatibilities of note include \b, \B, - the lack of special treatment for a trailing newline, - the addition of complemented bracket expressions to the things - affected by newline-sensitive matching, - the restrictions on parentheses and back references in lookahead/lookbehind - constraints, and the longest/shortest-match (rather than first-match) - matching semantics. - - - - - Basic Regular Expressions - - - BREs differ from EREs in several respects. - In BREs, |, +, and ? - are ordinary characters and there is no equivalent - for their functionality. - The delimiters for bounds are - \{ and \}, - with { and } - by themselves ordinary characters. - The parentheses for nested subexpressions are - \( and \), - with ( and ) by themselves ordinary characters. - ^ is an ordinary character except at the beginning of the - RE or the beginning of a parenthesized subexpression, - $ is an ordinary character except at the end of the - RE or the end of a parenthesized subexpression, - and * is an ordinary character if it appears at the beginning - of the RE or the beginning of a parenthesized subexpression - (after a possible leading ^). - Finally, single-digit back references are available, and - \< and \> - are synonyms for - [[:<:]] and [[:>:]] - respectively; no other escapes are available in BREs. - - - - - - - Differences from SQL Standard and XQuery - - - LIKE_REGEX - - - - OCCURRENCES_REGEX - - - - POSITION_REGEX - - - - SUBSTRING_REGEX - - - - TRANSLATE_REGEX - - - - XQuery regular expressions - - - - Since SQL:2008, the SQL standard includes regular expression operators - and functions that performs pattern - matching according to the XQuery regular expression - standard: - - LIKE_REGEX - OCCURRENCES_REGEX - POSITION_REGEX - SUBSTRING_REGEX - TRANSLATE_REGEX - - PostgreSQL does not currently implement these - operators and functions. You can get approximately equivalent - functionality in each case as shown in . (Various optional clauses on - both sides have been omitted in this table.) - - - - Regular Expression Functions Equivalencies - - - - - SQL standard - PostgreSQL - - - - - - string LIKE_REGEX pattern - regexp_like(string, pattern) or string ~ pattern - - - - OCCURRENCES_REGEX(pattern IN string) - regexp_count(string, pattern) - - - - POSITION_REGEX(pattern IN string) - regexp_instr(string, pattern) - - - - SUBSTRING_REGEX(pattern IN string) - regexp_substr(string, pattern) - - - - TRANSLATE_REGEX(pattern IN string WITH replacement) - regexp_replace(string, pattern, replacement) - - - -
- - - Regular expression functions similar to those provided by PostgreSQL are - also available in a number of other SQL implementations, whereas the - SQL-standard functions are not as widely implemented. Some of the - details of the regular expression syntax will likely differ in each - implementation. - - - - The SQL-standard operators and functions use XQuery regular expressions, - which are quite close to the ARE syntax described above. - Notable differences between the existing POSIX-based - regular-expression feature and XQuery regular expressions include: - - - - - XQuery character class subtraction is not supported. An example of - this feature is using the following to match only English - consonants: [a-z-[aeiou]]. - - - - - XQuery character class shorthands \c, - \C, \i, - and \I are not supported. - - - - - XQuery character class elements - using \p{UnicodeProperty} or the - inverse \P{UnicodeProperty} are not supported. - - - - - POSIX interprets character classes such as \w - (see ) - according to the prevailing locale (which you can control by - attaching a COLLATE clause to the operator or - function). XQuery specifies these classes by reference to Unicode - character properties, so equivalent behavior is obtained only with - a locale that follows the Unicode rules. - - - - - The SQL standard (not XQuery itself) attempts to cater for more - variants of newline than POSIX does. The - newline-sensitive matching options described above consider only - ASCII NL (\n) to be a newline, but SQL would have - us treat CR (\r), CRLF (\r\n) - (a Windows-style newline), and some Unicode-only characters like - LINE SEPARATOR (U+2028) as newlines as well. - Notably, . and \s should - count \r\n as one character not two according to - SQL. - - - - - Of the character-entry escapes described in - , - XQuery supports only \n, \r, - and \t. - - - - - XQuery does not support - the [:name:] syntax - for character classes within bracket expressions. - - - - - XQuery does not have lookahead or lookbehind constraints, - nor any of the constraint escapes described in - . - - - - - The metasyntax forms described in - do not exist in XQuery. - - - - - The regular expression flag letters defined by XQuery are - related to but not the same as the option letters for POSIX - (). While the - i and q options behave the - same, others do not: - - - - XQuery's s (allow dot to match newline) - and m (allow ^ - and $ to match at newlines) flags provide - access to the same behaviors as - POSIX's n, p - and w flags, but they - do not match the behavior of - POSIX's s and m flags. - Note in particular that dot-matches-newline is the default - behavior in POSIX but not XQuery. - - - - - XQuery's x (ignore whitespace in pattern) flag - is noticeably different from POSIX's expanded-mode flag. - POSIX's x flag also - allows # to begin a comment in the pattern, - and POSIX will not ignore a whitespace character after a - backslash. - - - - - - - - -
-
-
- - - - Data Type Formatting Functions - - - formatting - - - - The PostgreSQL formatting functions - provide a powerful set of tools for converting various data types - (date/time, integer, floating point, numeric) to formatted strings - and for converting from formatted strings to specific data types. - lists them. - These functions all follow a common calling convention: the first - argument is the value to be formatted and the second argument is a - template that defines the output or input format. - - - - Formatting Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - to_char - - to_char ( timestamp, text ) - text - - - to_char ( timestamp with time zone, text ) - text - - - Converts time stamp to string according to the given format. - - - to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') - 05:31:12 - - - - - - to_char ( interval, text ) - text - - - Converts interval to string according to the given format. - - - to_char(interval '15h 2m 12s', 'HH24:MI:SS') - 15:02:12 - - - - - - to_char ( numeric_type, text ) - text - - - Converts number to string according to the given format; available - for integer, bigint, numeric, - real, double precision. - - - to_char(125, '999') - 125 - - - to_char(125.8::real, '999D9') - 125.8 - - - to_char(-125.8, '999D99S') - 125.80- - - - - - - - to_date - - to_date ( text, text ) - date - - - Converts string to date according to the given format. - - - to_date('05 Dec 2000', 'DD Mon YYYY') - 2000-12-05 - - - - - - - to_number - - to_number ( text, text ) - numeric - - - Converts string to numeric according to the given format. - - - to_number('12,454.8-', '99G999D9S') - -12454.8 - - - - - - - to_timestamp - - to_timestamp ( text, text ) - timestamp with time zone - - - Converts string to time stamp according to the given format. - (See also to_timestamp(double precision) in - .) - - - to_timestamp('05 Dec 2000', 'DD Mon YYYY') - 2000-12-05 00:00:00-05 - - - - -
- - - - to_timestamp and to_date - exist to handle input formats that cannot be converted by - simple casting. For most standard date/time formats, simply casting the - source string to the required data type works, and is much easier. - Similarly, to_number is unnecessary for standard numeric - representations. - - - - - In a to_char output template string, there are certain - patterns that are recognized and replaced with appropriately-formatted - data based on the given value. Any text that is not a template pattern is - simply copied verbatim. Similarly, in an input template string (for the - other functions), template patterns identify the values to be supplied by - the input data string. If there are characters in the template string - that are not template patterns, the corresponding characters in the input - data string are simply skipped over (whether or not they are equal to the - template string characters). - - - - shows the - template patterns available for formatting date and time values. - - - - Template Patterns for Date/Time Formatting - - - - Pattern - Description - - - - - HH - hour of day (01–12) - - - HH12 - hour of day (01–12) - - - HH24 - hour of day (00–23) - - - MI - minute (00–59) - - - SS - second (00–59) - - - MS - millisecond (000–999) - - - US - microsecond (000000–999999) - - - FF1 - tenth of second (0–9) - - - FF2 - hundredth of second (00–99) - - - FF3 - millisecond (000–999) - - - FF4 - tenth of a millisecond (0000–9999) - - - FF5 - hundredth of a millisecond (00000–99999) - - - FF6 - microsecond (000000–999999) - - - SSSS, SSSSS - seconds past midnight (0–86399) - - - AM, am, - PM or pm - meridiem indicator (without periods) - - - A.M., a.m., - P.M. or p.m. - meridiem indicator (with periods) - - - Y,YYY - year (4 or more digits) with comma - - - YYYY - year (4 or more digits) - - - YYY - last 3 digits of year - - - YY - last 2 digits of year - - - Y - last digit of year - - - IYYY - ISO 8601 week-numbering year (4 or more digits) - - - IYY - last 3 digits of ISO 8601 week-numbering year - - - IY - last 2 digits of ISO 8601 week-numbering year - - - I - last digit of ISO 8601 week-numbering year - - - BC, bc, - AD or ad - era indicator (without periods) - - - B.C., b.c., - A.D. or a.d. - era indicator (with periods) - - - MONTH - full upper case month name (blank-padded to 9 chars) - - - Month - full capitalized month name (blank-padded to 9 chars) - - - month - full lower case month name (blank-padded to 9 chars) - - - MON - abbreviated upper case month name (3 chars in English, localized lengths vary) - - - Mon - abbreviated capitalized month name (3 chars in English, localized lengths vary) - - - mon - abbreviated lower case month name (3 chars in English, localized lengths vary) - - - MM - month number (01–12) - - - DAY - full upper case day name (blank-padded to 9 chars) - - - Day - full capitalized day name (blank-padded to 9 chars) - - - day - full lower case day name (blank-padded to 9 chars) - - - DY - abbreviated upper case day name (3 chars in English, localized lengths vary) - - - Dy - abbreviated capitalized day name (3 chars in English, localized lengths vary) - - - dy - abbreviated lower case day name (3 chars in English, localized lengths vary) - - - DDD - day of year (001–366) - - - IDDD - day of ISO 8601 week-numbering year (001–371; day 1 of the year is Monday of the first ISO week) - - - DD - day of month (01–31) - - - D - day of the week, Sunday (1) to Saturday (7) - - - ID - ISO 8601 day of the week, Monday (1) to Sunday (7) - - - W - week of month (1–5) (the first week starts on the first day of the month) - - - WW - week number of year (1–53) (the first week starts on the first day of the year) - - - IW - week number of ISO 8601 week-numbering year (01–53; the first Thursday of the year is in week 1) - - - CC - century (2 digits) (the twenty-first century starts on 2001-01-01) - - - J - Julian Date (integer days since November 24, 4714 BC at local - midnight; see ) - - - Q - quarter - - - RM - month in upper case Roman numerals (I–XII; I=January) - - - rm - month in lower case Roman numerals (i–xii; i=January) - - - TZ - upper case time-zone abbreviation - - - tz - lower case time-zone abbreviation - - - TZH - time-zone hours - - - TZM - time-zone minutes - - - OF - time-zone offset from UTC (HH - or HH:MM) - - - -
- - - Modifiers can be applied to any template pattern to alter its - behavior. For example, FMMonth - is the Month pattern with the - FM modifier. - shows the - modifier patterns for date/time formatting. - - - - Template Pattern Modifiers for Date/Time Formatting - - - - Modifier - Description - Example - - - - - FM prefix - fill mode (suppress leading zeroes and padding blanks) - FMMonth - - - TH suffix - upper case ordinal number suffix - DDTH, e.g., 12TH - - - th suffix - lower case ordinal number suffix - DDth, e.g., 12th - - - FX prefix - fixed format global option (see usage notes) - FX Month DD Day - - - TM prefix - translation mode (use localized day and month names based on - ) - TMMonth - - - SP suffix - spell mode (not implemented) - DDSP - - - -
- - - Usage notes for date/time formatting: - - - - - FM suppresses leading zeroes and trailing blanks - that would otherwise be added to make the output of a pattern be - fixed-width. In PostgreSQL, - FM modifies only the next specification, while in - Oracle FM affects all subsequent - specifications, and repeated FM modifiers - toggle fill mode on and off. - - - - - - TM suppresses trailing blanks whether or - not FM is specified. - - - - - - to_timestamp and to_date - ignore letter case in the input; so for - example MON, Mon, - and mon all accept the same strings. When using - the TM modifier, case-folding is done according to - the rules of the function's input collation (see - ). - - - - - - to_timestamp and to_date - skip multiple blank spaces at the beginning of the input string and - around date and time values unless the FX option is used. For example, - to_timestamp(' 2000    JUN', 'YYYY MON') and - to_timestamp('2000 - JUN', 'YYYY-MON') work, but - to_timestamp('2000    JUN', 'FXYYYY MON') returns an error - because to_timestamp expects only a single space. - FX must be specified as the first item in - the template. - - - - - - A separator (a space or non-letter/non-digit character) in the template string of - to_timestamp and to_date - matches any single separator in the input string or is skipped, - unless the FX option is used. - For example, to_timestamp('2000JUN', 'YYYY///MON') and - to_timestamp('2000/JUN', 'YYYY MON') work, but - to_timestamp('2000//JUN', 'YYYY/MON') - returns an error because the number of separators in the input string - exceeds the number of separators in the template. - - - If FX is specified, a separator in the template string - matches exactly one character in the input string. But note that the - input string character is not required to be the same as the separator from the template string. - For example, to_timestamp('2000/JUN', 'FXYYYY MON') - works, but to_timestamp('2000/JUN', 'FXYYYY  MON') - returns an error because the second space in the template string consumes - the letter J from the input string. - - - - - - A TZH template pattern can match a signed number. - Without the FX option, minus signs may be ambiguous, - and could be interpreted as a separator. - This ambiguity is resolved as follows: If the number of separators before - TZH in the template string is less than the number of - separators before the minus sign in the input string, the minus sign - is interpreted as part of TZH. - Otherwise, the minus sign is considered to be a separator between values. - For example, to_timestamp('2000 -10', 'YYYY TZH') matches - -10 to TZH, but - to_timestamp('2000 -10', 'YYYY  TZH') - matches 10 to TZH. - - - - - - Ordinary text is allowed in to_char - templates and will be output literally. You can put a substring - in double quotes to force it to be interpreted as literal text - even if it contains template patterns. For example, in - '"Hello Year "YYYY', the YYYY - will be replaced by the year data, but the single Y in Year - will not be. - In to_date, to_number, - and to_timestamp, literal text and double-quoted - strings result in skipping the number of characters contained in the - string; for example "XX" skips two input characters - (whether or not they are XX). - - - - Prior to PostgreSQL 12, it was possible to - skip arbitrary text in the input string using non-letter or non-digit - characters. For example, - to_timestamp('2000y6m1d', 'yyyy-MM-DD') used to - work. Now you can only use letter characters for this purpose. For example, - to_timestamp('2000y6m1d', 'yyyytMMtDDt') and - to_timestamp('2000y6m1d', 'yyyy"y"MM"m"DD"d"') - skip y, m, and - d. - - - - - - - If you want to have a double quote in the output you must - precede it with a backslash, for example '\"YYYY - Month\"'. - Backslashes are not otherwise special outside of double-quoted - strings. Within a double-quoted string, a backslash causes the - next character to be taken literally, whatever it is (but this - has no special effect unless the next character is a double quote - or another backslash). - - - - - - In to_timestamp and to_date, - if the year format specification is less than four digits, e.g., - YYY, and the supplied year is less than four digits, - the year will be adjusted to be nearest to the year 2020, e.g., - 95 becomes 1995. - - - - - - In to_timestamp and to_date, - negative years are treated as signifying BC. If you write both a - negative year and an explicit BC field, you get AD - again. An input of year zero is treated as 1 BC. - - - - - - In to_timestamp and to_date, - the YYYY conversion has a restriction when - processing years with more than 4 digits. You must - use some non-digit character or template after YYYY, - otherwise the year is always interpreted as 4 digits. For example - (with the year 20000): - to_date('200001130', 'YYYYMMDD') will be - interpreted as a 4-digit year; instead use a non-digit - separator after the year, like - to_date('20000-1130', 'YYYY-MMDD') or - to_date('20000Nov30', 'YYYYMonDD'). - - - - - - In to_timestamp and to_date, - the CC (century) field is accepted but ignored - if there is a YYY, YYYY or - Y,YYY field. If CC is used with - YY or Y then the result is - computed as that year in the specified century. If the century is - specified but the year is not, the first year of the century - is assumed. - - - - - - In to_timestamp and to_date, - weekday names or numbers (DAY, D, - and related field types) are accepted but are ignored for purposes of - computing the result. The same is true for quarter - (Q) fields. - - - - - - In to_timestamp and to_date, - an ISO 8601 week-numbering date (as distinct from a Gregorian date) - can be specified in one of two ways: - - - - Year, week number, and weekday: for - example to_date('2006-42-4', 'IYYY-IW-ID') - returns the date 2006-10-19. - If you omit the weekday it is assumed to be 1 (Monday). - - - - - Year and day of year: for example to_date('2006-291', - 'IYYY-IDDD') also returns 2006-10-19. - - - - - - Attempting to enter a date using a mixture of ISO 8601 week-numbering - fields and Gregorian date fields is nonsensical, and will cause an - error. In the context of an ISO 8601 week-numbering year, the - concept of a month or day of month has no - meaning. In the context of a Gregorian year, the ISO week has no - meaning. - - - - While to_date will reject a mixture of - Gregorian and ISO week-numbering date - fields, to_char will not, since output format - specifications like YYYY-MM-DD (IYYY-IDDD) can be - useful. But avoid writing something like IYYY-MM-DD; - that would yield surprising results near the start of the year. - (See for more - information.) - - - - - - - In to_timestamp, millisecond - (MS) or microsecond (US) - fields are used as the - seconds digits after the decimal point. For example - to_timestamp('12.3', 'SS.MS') is not 3 milliseconds, - but 300, because the conversion treats it as 12 + 0.3 seconds. - So, for the format SS.MS, the input values - 12.3, 12.30, - and 12.300 specify the - same number of milliseconds. To get three milliseconds, one must write - 12.003, which the conversion treats as - 12 + 0.003 = 12.003 seconds. - - - - Here is a more - complex example: - to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US') - is 15 hours, 12 minutes, and 2 seconds + 20 milliseconds + - 1230 microseconds = 2.021230 seconds. - - - - - - to_char(..., 'ID')'s day of the week numbering - matches the extract(isodow from ...) function, but - to_char(..., 'D')'s does not match - extract(dow from ...)'s day numbering. - - - - - - to_char(interval) formats HH and - HH12 as shown on a 12-hour clock, for example zero hours - and 36 hours both output as 12, while HH24 - outputs the full hour value, which can exceed 23 in - an interval value. - - - - - - - - shows the - template patterns available for formatting numeric values. - - - - Template Patterns for Numeric Formatting - - - - Pattern - Description - - - - - 9 - digit position (can be dropped if insignificant) - - - 0 - digit position (will not be dropped, even if insignificant) - - - . (period) - decimal point - - - , (comma) - group (thousands) separator - - - PR - negative value in angle brackets - - - S - sign anchored to number (uses locale) - - - L - currency symbol (uses locale) - - - D - decimal point (uses locale) - - - G - group separator (uses locale) - - - MI - minus sign in specified position (if number < 0) - - - PL - plus sign in specified position (if number > 0) - - - SG - plus/minus sign in specified position - - - RN or rn - Roman numeral (values between 1 and 3999) - - - TH or th - ordinal number suffix - - - V - shift specified number of digits (see notes) - - - EEEE - exponent for scientific notation - - - -
- - - Usage notes for numeric formatting: - - - - - 0 specifies a digit position that will always be printed, - even if it contains a leading/trailing zero. 9 also - specifies a digit position, but if it is a leading zero then it will - be replaced by a space, while if it is a trailing zero and fill mode - is specified then it will be deleted. (For to_number(), - these two pattern characters are equivalent.) - - - - - - If the format provides fewer fractional digits than the number being - formatted, to_char() will round the number to - the specified number of fractional digits. - - - - - - The pattern characters S, L, D, - and G represent the sign, currency symbol, decimal point, - and thousands separator characters defined by the current locale - (see - and ). The pattern characters period - and comma represent those exact characters, with the meanings of - decimal point and thousands separator, regardless of locale. - - - - - - If no explicit provision is made for a sign - in to_char()'s pattern, one column will be reserved for - the sign, and it will be anchored to (appear just left of) the - number. If S appears just left of some 9's, - it will likewise be anchored to the number. - - - - - - A sign formatted using SG, PL, or - MI is not anchored to - the number; for example, - to_char(-12, 'MI9999') produces '-  12' - but to_char(-12, 'S9999') produces '  -12'. - (The Oracle implementation does not allow the use of - MI before 9, but rather - requires that 9 precede - MI.) - - - - - - TH does not convert values less than zero - and does not convert fractional numbers. - - - - - - PL, SG, and - TH are PostgreSQL - extensions. - - - - - - In to_number, if non-data template patterns such - as L or TH are used, the - corresponding number of input characters are skipped, whether or not - they match the template pattern, unless they are data characters - (that is, digits, sign, decimal point, or comma). For - example, TH would skip two non-data characters. - - - - - - V with to_char - multiplies the input values by - 10^n, where - n is the number of digits following - V. V with - to_number divides in a similar manner. - The V can be thought of as marking the position - of an implicit decimal point in the input or output string. - to_char and to_number - do not support the use of - V combined with a decimal point - (e.g., 99.9V99 is not allowed). - - - - - - EEEE (scientific notation) cannot be used in - combination with any of the other formatting patterns or - modifiers other than digit and decimal point patterns, and must be at the end of the format string - (e.g., 9.99EEEE is a valid pattern). - - - - - - In to_number(), the RN - pattern converts Roman numerals (in standard form) to numbers. - Input is case-insensitive, so RN - and rn are equivalent. RN - cannot be used in combination with any other formatting patterns or - modifiers except FM, which is applicable only - in to_char() and is ignored - in to_number(). - - - - - - - Certain modifiers can be applied to any template pattern to alter its - behavior. For example, FM99.99 - is the 99.99 pattern with the - FM modifier. - shows the - modifier patterns for numeric formatting. - - - - Template Pattern Modifiers for Numeric Formatting - - - - Modifier - Description - Example - - - - - FM prefix - fill mode (suppress trailing zeroes and padding blanks) - FM99.99 - - - TH suffix - upper case ordinal number suffix - 999TH - - - th suffix - lower case ordinal number suffix - 999th - - - -
- - - shows some - examples of the use of the to_char function. - - - - <function>to_char</function> Examples - - - - Expression - Result - - - - - to_char(current_timestamp, 'Day, DD  HH12:MI:SS') - 'Tuesday  , 06  05:39:18' - - - to_char(current_timestamp, 'FMDay, FMDD  HH12:MI:SS') - 'Tuesday, 6  05:39:18' - - - to_char(current_timestamp AT TIME ZONE - 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS"Z"') - '2022-12-06T05:39:18Z', - ISO 8601 extended format - - - to_char(-0.1, '99.99') - '  -.10' - - - to_char(-0.1, 'FM9.99') - '-.1' - - - to_char(-0.1, 'FM90.99') - '-0.1' - - - to_char(0.1, '0.9') - ' 0.1' - - - to_char(12, '9990999.9') - '    0012.0' - - - to_char(12, 'FM9990999.9') - '0012.' - - - to_char(485, '999') - ' 485' - - - to_char(-485, '999') - '-485' - - - to_char(485, '9 9 9') - ' 4 8 5' - - - to_char(1485, '9,999') - ' 1,485' - - - to_char(1485, '9G999') - ' 1 485' - - - to_char(148.5, '999.999') - ' 148.500' - - - to_char(148.5, 'FM999.999') - '148.5' - - - to_char(148.5, 'FM999.990') - '148.500' - - - to_char(148.5, '999D999') - ' 148,500' - - - to_char(3148.5, '9G999D999') - ' 3 148,500' - - - to_char(-485, '999S') - '485-' - - - to_char(-485, '999MI') - '485-' - - - to_char(485, '999MI') - '485 ' - - - to_char(485, 'FM999MI') - '485' - - - to_char(485, 'PL999') - '+485' - - - to_char(485, 'SG999') - '+485' - - - to_char(-485, 'SG999') - '-485' - - - to_char(-485, '9SG99') - '4-85' - - - to_char(-485, '999PR') - '<485>' - - - to_char(485, 'L999') - 'DM 485' - - - to_char(485, 'RN') - '        CDLXXXV' - - - to_char(485, 'FMRN') - 'CDLXXXV' - - - to_char(5.2, 'FMRN') - 'V' - - - to_char(482, '999th') - ' 482nd' - - - to_char(485, '"Good number:"999') - 'Good number: 485' - - - to_char(485.8, '"Pre:"999" Post:" .999') - 'Pre: 485 Post: .800' - - - to_char(12, '99V999') - ' 12000' - - - to_char(12.4, '99V999') - ' 12400' - - - to_char(12.45, '99V9') - ' 125' - - - to_char(0.0004859, '9.99EEEE') - ' 4.86e-04' - - - -
- -
- - - - Date/Time Functions and Operators - - - shows the available - functions for date/time value processing, with details appearing in - the following subsections. illustrates the behaviors of - the basic arithmetic operators (+, - *, etc.). For formatting functions, refer to - . You should be familiar with - the background information on date/time data types from . - - - - In addition, the usual comparison operators shown in - are available for the - date/time types. Dates and timestamps (with or without time zone) are - all comparable, while times (with or without time zone) and intervals - can only be compared to other values of the same data type. When - comparing a timestamp without time zone to a timestamp with time zone, - the former value is assumed to be given in the time zone specified by - the configuration parameter, and is - rotated to UTC for comparison to the latter value (which is already - in UTC internally). Similarly, a date value is assumed to represent - midnight in the TimeZone zone when comparing it - to a timestamp. - - - - All the functions and operators described below that take time or timestamp - inputs actually come in two variants: one that takes time with time zone or timestamp - with time zone, and one that takes time without time zone or timestamp without time zone. - For brevity, these variants are not shown separately. Also, the - + and * operators come in commutative pairs (for - example both date + integer - and integer + date); we show - only one of each such pair. - - - - Date/Time Operators - - - - - - Operator - - - Description - - - Example(s) - - - - - - - - date + integer - date - - - Add a number of days to a date - - - date '2001-09-28' + 7 - 2001-10-05 - - - - - - date + interval - timestamp - - - Add an interval to a date - - - date '2001-09-28' + interval '1 hour' - 2001-09-28 01:00:00 - - - - - - date + time - timestamp - - - Add a time-of-day to a date - - - date '2001-09-28' + time '03:00' - 2001-09-28 03:00:00 - - - - - - interval + interval - interval - - - Add intervals - - - interval '1 day' + interval '1 hour' - 1 day 01:00:00 - - - - - - timestamp + interval - timestamp - - - Add an interval to a timestamp - - - timestamp '2001-09-28 01:00' + interval '23 hours' - 2001-09-29 00:00:00 - - - - - - time + interval - time - - - Add an interval to a time - - - time '01:00' + interval '3 hours' - 04:00:00 - - - - - - - interval - interval - - - Negate an interval - - - - interval '23 hours' - -23:00:00 - - - - - - date - date - integer - - - Subtract dates, producing the number of days elapsed - - - date '2001-10-01' - date '2001-09-28' - 3 - - - - - - date - integer - date - - - Subtract a number of days from a date - - - date '2001-10-01' - 7 - 2001-09-24 - - - - - - date - interval - timestamp - - - Subtract an interval from a date - - - date '2001-09-28' - interval '1 hour' - 2001-09-27 23:00:00 - - - - - - time - time - interval - - - Subtract times - - - time '05:00' - time '03:00' - 02:00:00 - - - - - - time - interval - time - - - Subtract an interval from a time - - - time '05:00' - interval '2 hours' - 03:00:00 - - - - - - timestamp - interval - timestamp - - - Subtract an interval from a timestamp - - - timestamp '2001-09-28 23:00' - interval '23 hours' - 2001-09-28 00:00:00 - - - - - - interval - interval - interval - - - Subtract intervals - - - interval '1 day' - interval '1 hour' - 1 day -01:00:00 - - - - - - timestamp - timestamp - interval - - - Subtract timestamps (converting 24-hour intervals into days, - similarly to justify_hours()) - - - timestamp '2001-09-29 03:00' - timestamp '2001-07-27 12:00' - 63 days 15:00:00 - - - - - - interval * double precision - interval - - - Multiply an interval by a scalar - - - interval '1 second' * 900 - 00:15:00 - - - interval '1 day' * 21 - 21 days - - - interval '1 hour' * 3.5 - 03:30:00 - - - - - - interval / double precision - interval - - - Divide an interval by a scalar - - - interval '1 hour' / 1.5 - 00:40:00 - - - - -
- - - Date/Time Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - age - - age ( timestamp, timestamp ) - interval - - - Subtract arguments, producing a symbolic result that - uses years and months, rather than just days - - - age(timestamp '2001-04-10', timestamp '1957-06-13') - 43 years 9 mons 27 days - - - - - - age ( timestamp ) - interval - - - Subtract argument from current_date (at midnight) - - - age(timestamp '1957-06-13') - 62 years 6 mons 10 days - - - - - - - clock_timestamp - - clock_timestamp ( ) - timestamp with time zone - - - Current date and time (changes during statement execution); - see - - - clock_timestamp() - 2019-12-23 14:39:53.662522-05 - - - - - - - current_date - - current_date - date - - - Current date; see - - - current_date - 2019-12-23 - - - - - - - current_time - - current_time - time with time zone - - - Current time of day; see - - - current_time - 14:39:53.662522-05 - - - - - - current_time ( integer ) - time with time zone - - - Current time of day, with limited precision; - see - - - current_time(2) - 14:39:53.66-05 - - - - - - - current_timestamp - - current_timestamp - timestamp with time zone - - - Current date and time (start of current transaction); - see - - - current_timestamp - 2019-12-23 14:39:53.662522-05 - - - - - - current_timestamp ( integer ) - timestamp with time zone - - - Current date and time (start of current transaction), with limited precision; - see - - - current_timestamp(0) - 2019-12-23 14:39:53-05 - - - - - - - date_add - - date_add ( timestamp with time zone, interval , text ) - timestamp with time zone - - - Add an interval to a timestamp with time - zone, computing times of day and daylight-savings adjustments - according to the time zone named by the third argument, or the - current setting if that is omitted. - The form with two arguments is equivalent to the timestamp with - time zone + interval operator. - - - date_add('2021-10-31 00:00:00+02'::timestamptz, '1 day'::interval, 'Europe/Warsaw') - 2021-10-31 23:00:00+00 - - - - - - date_bin ( interval, timestamp, timestamp ) - timestamp - - - Bin input into specified interval aligned with specified origin; see - - - date_bin('15 minutes', timestamp '2001-02-16 20:38:40', timestamp '2001-02-16 20:05:00') - 2001-02-16 20:35:00 - - - - - - - date_part - - date_part ( text, timestamp ) - double precision - - - Get timestamp subfield (equivalent to extract); - see - - - date_part('hour', timestamp '2001-02-16 20:38:40') - 20 - - - - - - date_part ( text, interval ) - double precision - - - Get interval subfield (equivalent to extract); - see - - - date_part('month', interval '2 years 3 months') - 3 - - - - - - - date_subtract - - date_subtract ( timestamp with time zone, interval , text ) - timestamp with time zone - - - Subtract an interval from a timestamp with time - zone, computing times of day and daylight-savings adjustments - according to the time zone named by the third argument, or the - current setting if that is omitted. - The form with two arguments is equivalent to the timestamp with - time zone - interval operator. - - - date_subtract('2021-11-01 00:00:00+01'::timestamptz, '1 day'::interval, 'Europe/Warsaw') - 2021-10-30 22:00:00+00 - - - - - - - date_trunc - - date_trunc ( text, timestamp ) - timestamp - - - Truncate to specified precision; see - - - date_trunc('hour', timestamp '2001-02-16 20:38:40') - 2001-02-16 20:00:00 - - - - - - date_trunc ( text, timestamp with time zone, text ) - timestamp with time zone - - - Truncate to specified precision in the specified time zone; see - - - - date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney') - 2001-02-16 13:00:00+00 - - - - - - date_trunc ( text, interval ) - interval - - - Truncate to specified precision; see - - - - date_trunc('hour', interval '2 days 3 hours 40 minutes') - 2 days 03:00:00 - - - - - - - extract - - extract ( field from timestamp ) - numeric - - - Get timestamp subfield; see - - - extract(hour from timestamp '2001-02-16 20:38:40') - 20 - - - - - - extract ( field from interval ) - numeric - - - Get interval subfield; see - - - extract(month from interval '2 years 3 months') - 3 - - - - - - - isfinite - - isfinite ( date ) - boolean - - - Test for finite date (not +/-infinity) - - - isfinite(date '2001-02-16') - true - - - - - - isfinite ( timestamp ) - boolean - - - Test for finite timestamp (not +/-infinity) - - - isfinite(timestamp 'infinity') - false - - - - - - isfinite ( interval ) - boolean - - - Test for finite interval (not +/-infinity) - - - isfinite(interval '4 hours') - true - - - - - - - justify_days - - justify_days ( interval ) - interval - - - Adjust interval, converting 30-day time periods to months - - - justify_days(interval '1 year 65 days') - 1 year 2 mons 5 days - - - - - - - justify_hours - - justify_hours ( interval ) - interval - - - Adjust interval, converting 24-hour time periods to days - - - justify_hours(interval '50 hours 10 minutes') - 2 days 02:10:00 - - - - - - - justify_interval - - justify_interval ( interval ) - interval - - - Adjust interval using justify_days - and justify_hours, with additional sign - adjustments - - - justify_interval(interval '1 mon -1 hour') - 29 days 23:00:00 - - - - - - - localtime - - localtime - time - - - Current time of day; - see - - - localtime - 14:39:53.662522 - - - - - - localtime ( integer ) - time - - - Current time of day, with limited precision; - see - - - localtime(0) - 14:39:53 - - - - - - - localtimestamp - - localtimestamp - timestamp - - - Current date and time (start of current transaction); - see - - - localtimestamp - 2019-12-23 14:39:53.662522 - - - - - - localtimestamp ( integer ) - timestamp - - - Current date and time (start of current - transaction), with limited precision; - see - - - localtimestamp(2) - 2019-12-23 14:39:53.66 - - - - - - - make_date - - make_date ( year int, - month int, - day int ) - date - - - Create date from year, month and day fields - (negative years signify BC) - - - make_date(2013, 7, 15) - 2013-07-15 - - - - - - make_interval - - make_interval ( years int - , months int - , weeks int - , days int - , hours int - , mins int - , secs double precision - ) - interval - - - Create interval from years, months, weeks, days, hours, minutes and - seconds fields, each of which can default to zero - - - make_interval(days => 10) - 10 days - - - - - - - make_time - - make_time ( hour int, - min int, - sec double precision ) - time - - - Create time from hour, minute and seconds fields - - - make_time(8, 15, 23.5) - 08:15:23.5 - - - - - - - make_timestamp - - make_timestamp ( year int, - month int, - day int, - hour int, - min int, - sec double precision ) - timestamp - - - Create timestamp from year, month, day, hour, minute and seconds fields - (negative years signify BC) - - - make_timestamp(2013, 7, 15, 8, 15, 23.5) - 2013-07-15 08:15:23.5 - - - - - - - make_timestamptz - - make_timestamptz ( year int, - month int, - day int, - hour int, - min int, - sec double precision - , timezone text ) - timestamp with time zone - - - Create timestamp with time zone from year, month, day, hour, minute - and seconds fields (negative years signify BC). - If timezone is not - specified, the current time zone is used; the examples assume the - session time zone is Europe/London - - - make_timestamptz(2013, 7, 15, 8, 15, 23.5) - 2013-07-15 08:15:23.5+01 - - - make_timestamptz(2013, 7, 15, 8, 15, 23.5, 'America/New_York') - 2013-07-15 13:15:23.5+01 - - - - - - - now - - now ( ) - timestamp with time zone - - - Current date and time (start of current transaction); - see - - - now() - 2019-12-23 14:39:53.662522-05 - - - - - - - statement_timestamp - - statement_timestamp ( ) - timestamp with time zone - - - Current date and time (start of current statement); - see - - - statement_timestamp() - 2019-12-23 14:39:53.662522-05 - - - - - - - timeofday - - timeofday ( ) - text - - - Current date and time - (like clock_timestamp, but as a text string); - see - - - timeofday() - Mon Dec 23 14:39:53.662522 2019 EST - - - - - - - transaction_timestamp - - transaction_timestamp ( ) - timestamp with time zone - - - Current date and time (start of current transaction); - see - - - transaction_timestamp() - 2019-12-23 14:39:53.662522-05 - - - - - - - to_timestamp - - to_timestamp ( double precision ) - timestamp with time zone - - - Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to - timestamp with time zone - - - to_timestamp(1284352323) - 2010-09-13 04:32:03+00 - - - - -
- - - - OVERLAPS - - In addition to these functions, the SQL OVERLAPS operator is - supported: - -(start1, end1) OVERLAPS (start2, end2) -(start1, length1) OVERLAPS (start2, length2) - - This expression yields true when two time periods (defined by their - endpoints) overlap, false when they do not overlap. The endpoints - can be specified as pairs of dates, times, or time stamps; or as - a date, time, or time stamp followed by an interval. When a pair - of values is provided, either the start or the end can be written - first; OVERLAPS automatically takes the earlier value - of the pair as the start. Each time period is considered to - represent the half-open interval start <= - time < end, unless - start and end are equal in which case it - represents that single time instant. This means for instance that two - time periods with only an endpoint in common do not overlap. - - - -SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS - (DATE '2001-10-30', DATE '2002-10-30'); -Result: true -SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS - (DATE '2001-10-30', DATE '2002-10-30'); -Result: false -SELECT (DATE '2001-10-29', DATE '2001-10-30') OVERLAPS - (DATE '2001-10-30', DATE '2001-10-31'); -Result: false -SELECT (DATE '2001-10-30', DATE '2001-10-30') OVERLAPS - (DATE '2001-10-30', DATE '2001-10-31'); -Result: true - - - - When adding an interval value to (or subtracting an - interval value from) a timestamp - or timestamp with time zone value, the months, days, and - microseconds fields of the interval value are handled in turn. - First, a nonzero months field advances or decrements the date of the - timestamp by the indicated number of months, keeping the day of month the - same unless it would be past the end of the new month, in which case the - last day of that month is used. (For example, March 31 plus 1 month - becomes April 30, but March 31 plus 2 months becomes May 31.) - Then the days field advances or decrements the date of the timestamp by - the indicated number of days. In both these steps the local time of day - is kept the same. Finally, if there is a nonzero microseconds field, it - is added or subtracted literally. - When doing arithmetic on a timestamp with time zone value in - a time zone that recognizes DST, this means that adding or subtracting - (say) interval '1 day' does not necessarily have the - same result as adding or subtracting interval '24 - hours'. - For example, with the session time zone set - to America/Denver: - -SELECT timestamp with time zone '2005-04-02 12:00:00-07' + interval '1 day'; -Result: 2005-04-03 12:00:00-06 -SELECT timestamp with time zone '2005-04-02 12:00:00-07' + interval '24 hours'; -Result: 2005-04-03 13:00:00-06 - - This happens because an hour was skipped due to a change in daylight saving - time at 2005-04-03 02:00:00 in time zone - America/Denver. - - - - Note there can be ambiguity in the months field returned by - age because different months have different numbers of - days. PostgreSQL's approach uses the month from the - earlier of the two dates when calculating partial months. For example, - age('2004-06-01', '2004-04-30') uses April to yield - 1 mon 1 day, while using May would yield 1 mon 2 - days because May has 31 days, while April has only 30. - - - - Subtraction of dates and timestamps can also be complex. One conceptually - simple way to perform subtraction is to convert each value to a number - of seconds using EXTRACT(EPOCH FROM ...), then subtract the - results; this produces the - number of seconds between the two values. This will adjust - for the number of days in each month, timezone changes, and daylight - saving time adjustments. Subtraction of date or timestamp - values with the - operator - returns the number of days (24-hours) and hours/minutes/seconds - between the values, making the same adjustments. The age - function returns years, months, days, and hours/minutes/seconds, - performing field-by-field subtraction and then adjusting for negative - field values. The following queries illustrate the differences in these - approaches. The sample results were produced with timezone - = 'US/Eastern'; there is a daylight saving time change between the - two dates used: - - - -SELECT EXTRACT(EPOCH FROM timestamptz '2013-07-01 12:00:00') - - EXTRACT(EPOCH FROM timestamptz '2013-03-01 12:00:00'); -Result: 10537200.000000 -SELECT (EXTRACT(EPOCH FROM timestamptz '2013-07-01 12:00:00') - - EXTRACT(EPOCH FROM timestamptz '2013-03-01 12:00:00')) - / 60 / 60 / 24; -Result: 121.9583333333333333 -SELECT timestamptz '2013-07-01 12:00:00' - timestamptz '2013-03-01 12:00:00'; -Result: 121 days 23:00:00 -SELECT age(timestamptz '2013-07-01 12:00:00', timestamptz '2013-03-01 12:00:00'); -Result: 4 mons - - - - <function>EXTRACT</function>, <function>date_part</function> - - - date_part - - - extract - - - -EXTRACT(field FROM source) - - - - The extract function retrieves subfields - such as year or hour from date/time values. - source must be a value expression of - type timestamp, date, time, - or interval. (Timestamps and times can be with or - without time zone.) - field is an identifier or - string that selects what field to extract from the source value. - Not all fields are valid for every input data type; for example, fields - smaller than a day cannot be extracted from a date, while - fields of a day or more cannot be extracted from a time. - The extract function returns values of type - numeric. - - - - The following are valid field names: - - - - - century - - - The century; for interval values, the year field - divided by 100 - - - -SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); -Result: 20 -SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 21 -SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -Result: 1 -SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -Result: -1 -SELECT EXTRACT(CENTURY FROM INTERVAL '2001 years'); -Result: 20 - - - - - - day - - - The day of the month (1–31); for interval - values, the number of days - - - -SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 16 -SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); -Result: 40 - - - - - - - decade - - - The year field divided by 10 - - - -SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 200 - - - - - - dow - - - The day of the week as Sunday (0) to - Saturday (6) - - - -SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 5 - - - Note that extract's day of the week numbering - differs from that of the to_char(..., - 'D') function. - - - - - - - doy - - - The day of the year (1–365/366) - - - -SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 47 - - - - - - epoch - - - For timestamp with time zone values, the - number of seconds since 1970-01-01 00:00:00 UTC (negative for - timestamps before that); - for date and timestamp values, the - nominal number of seconds since 1970-01-01 00:00:00, - without regard to timezone or daylight-savings rules; - for interval values, the total number - of seconds in the interval - - - -SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); -Result: 982384720.120000 -SELECT EXTRACT(EPOCH FROM TIMESTAMP '2001-02-16 20:38:40.12'); -Result: 982355920.120000 -SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); -Result: 442800.000000 - - - - You can convert an epoch value back to a timestamp with time zone - with to_timestamp: - - -SELECT to_timestamp(982384720.12); -Result: 2001-02-17 04:38:40.12+00 - - - - Beware that applying to_timestamp to an epoch - extracted from a date or timestamp value - could produce a misleading result: the result will effectively - assume that the original value had been given in UTC, which might - not be the case. - - - - - - hour - - - The hour field (0–23 in timestamps, unrestricted in - intervals) - - - -SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 20 - - - - - - isodow - - - The day of the week as Monday (1) to - Sunday (7) - - - -SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); -Result: 7 - - - This is identical to dow except for Sunday. This - matches the ISO 8601 day of the week numbering. - - - - - - - isoyear - - - The ISO 8601 week-numbering year that the date - falls in - - - -SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); -Result: 2005 -SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); -Result: 2006 - - - - Each ISO 8601 week-numbering year begins with the - Monday of the week containing the 4th of January, so in early - January or late December the ISO year may be - different from the Gregorian year. See the week - field for more information. - - - - - - julian - - - The Julian Date corresponding to the - date or timestamp. Timestamps - that are not local midnight result in a fractional value. See - for more information. - - - -SELECT EXTRACT(JULIAN FROM DATE '2006-01-01'); -Result: 2453737 -SELECT EXTRACT(JULIAN FROM TIMESTAMP '2006-01-01 12:00'); -Result: 2453737.50000000000000000000 - - - - - - microseconds - - - The seconds field, including fractional parts, multiplied by 1 - 000 000; note that this includes full seconds - - - -SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); -Result: 28500000 - - - - - - millennium - - - The millennium; for interval values, the year field - divided by 1000 - - - -SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 3 -SELECT EXTRACT(MILLENNIUM FROM INTERVAL '2001 years'); -Result: 2 - - - - Years in the 1900s are in the second millennium. - The third millennium started January 1, 2001. - - - - - - milliseconds - - - The seconds field, including fractional parts, multiplied by - 1000. Note that this includes full seconds. - - - -SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); -Result: 28500.000 - - - - - - minute - - - The minutes field (0–59) - - - -SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 38 - - - - - - month - - - The number of the month within the year (1–12); - for interval values, the number of months modulo 12 - (0–11) - - - -SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 2 -SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months'); -Result: 3 -SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); -Result: 1 - - - - - - quarter - - - The quarter of the year (1–4) that the date is in; - for interval values, the month field divided by 3 - plus 1 - - - -SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 1 -SELECT EXTRACT(QUARTER FROM INTERVAL '1 year 6 months'); -Result: 3 - - - - - - second - - - The seconds field, including any fractional seconds - - - -SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 40.000000 -SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); -Result: 28.500000 - - - - - timezone - - - The time zone offset from UTC, measured in seconds. Positive values - correspond to time zones east of UTC, negative values to - zones west of UTC. (Technically, - PostgreSQL does not use UTC because - leap seconds are not handled.) - - - - - - timezone_hour - - - The hour component of the time zone offset - - - - - - timezone_minute - - - The minute component of the time zone offset - - - - - - week - - - The number of the ISO 8601 week-numbering week of - the year. By definition, ISO weeks start on Mondays and the first - week of a year contains January 4 of that year. In other words, the - first Thursday of a year is in week 1 of that year. - - - In the ISO week-numbering system, it is possible for early-January - dates to be part of the 52nd or 53rd week of the previous year, and for - late-December dates to be part of the first week of the next year. - For example, 2005-01-01 is part of the 53rd week of year - 2004, and 2006-01-01 is part of the 52nd week of year - 2005, while 2012-12-31 is part of the first week of 2013. - It's recommended to use the isoyear field together with - week to get consistent results. - - - - For interval values, the week field is simply the number - of integral days divided by 7. - - - -SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 7 -SELECT EXTRACT(WEEK FROM INTERVAL '13 days 24 hours'); -Result: 1 - - - - - - year - - - The year field. Keep in mind there is no 0 AD, so subtracting - BC years from AD years should be done with care. - - - -SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); -Result: 2001 - - - - - - - - - When processing an interval value, - the extract function produces field values that - match the interpretation used by the interval output function. This - can produce surprising results if one starts with a non-normalized - interval representation, for example: - -SELECT INTERVAL '80 minutes'; -Result: 01:20:00 -SELECT EXTRACT(MINUTES FROM INTERVAL '80 minutes'); -Result: 20 - - - - - - When the input value is +/-Infinity, extract returns - +/-Infinity for monotonically-increasing fields (epoch, - julian, year, isoyear, - decade, century, and millennium - for timestamp inputs; epoch, hour, - day, year, decade, - century, and millennium for - interval inputs). - For other fields, NULL is returned. PostgreSQL - versions before 9.6 returned zero for all cases of infinite input. - - - - - The extract function is primarily intended - for computational processing. For formatting date/time values for - display, see . - - - - The date_part function is modeled on the traditional - Ingres equivalent to the - SQL-standard function extract: - -date_part('field', source) - - Note that here the field parameter needs to - be a string value, not a name. The valid field names for - date_part are the same as for - extract. - For historical reasons, the date_part function - returns values of type double precision. This can result in - a loss of precision in certain uses. Using extract - is recommended instead. - - - -SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); -Result: 16 -SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); -Result: 4 - - - - - - <function>date_trunc</function> - - - date_trunc - - - - The function date_trunc is conceptually - similar to the trunc function for numbers. - - - - -date_trunc(field, source , time_zone ) - - source is a value expression of type - timestamp, timestamp with time zone, - or interval. - (Values of type date and - time are cast automatically to timestamp or - interval, respectively.) - field selects to which precision to - truncate the input value. The return value is likewise of type - timestamp, timestamp with time zone, - or interval, - and it has all fields that are less significant than the - selected one set to zero (or one, for day and month). - - - - Valid values for field are: - - microseconds - milliseconds - second - minute - hour - day - week - month - quarter - year - decade - century - millennium - - - - - When the input value is of type timestamp with time zone, - the truncation is performed with respect to a particular time zone; - for example, truncation to day produces a value that - is midnight in that zone. By default, truncation is done with respect - to the current setting, but the - optional time_zone argument can be provided - to specify a different time zone. The time zone name can be specified - in any of the ways described in . - - - - A time zone cannot be specified when processing timestamp without - time zone or interval inputs. These are always - taken at face value. - - - - Examples (assuming the local time zone is America/New_York): - -SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); -Result: 2001-02-16 20:00:00 -SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); -Result: 2001-01-01 00:00:00 -SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00'); -Result: 2001-02-16 00:00:00-05 -SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00', 'Australia/Sydney'); -Result: 2001-02-16 08:00:00-05 -SELECT date_trunc('hour', INTERVAL '3 days 02:47:33'); -Result: 3 days 02:00:00 - - - - - - <function>date_bin</function> - - - date_bin - - - - The function date_bin bins the input - timestamp into the specified interval (the stride) - aligned with a specified origin. - - - - -date_bin(stride, source, origin) - - source is a value expression of type - timestamp or timestamp with time zone. (Values - of type date are cast automatically to - timestamp.) stride is a value - expression of type interval. The return value is likewise - of type timestamp or timestamp with time zone, - and it marks the beginning of the bin into which the - source is placed. - - - - Examples: - -SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); -Result: 2020-02-11 15:30:00 -SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01 00:02:30'); -Result: 2020-02-11 15:32:30 - - - - - In the case of full units (1 minute, 1 hour, etc.), it gives the same result as - the analogous date_trunc call, but the difference is - that date_bin can truncate to an arbitrary interval. - - - - The stride interval must be greater than zero and - cannot contain units of month or larger. - - - - - <literal>AT TIME ZONE and AT LOCAL</literal> - - - time zone - conversion - - - - AT TIME ZONE - - - - AT LOCAL - - - - The AT TIME ZONE operator converts time - stamp without time zone to/from - time stamp with time zone, and - time with time zone values to different time - zones. shows its - variants. - - - - <literal>AT TIME ZONE</literal> and <literal>AT LOCAL</literal> Variants - - - - - Operator - - - Description - - - Example(s) - - - - - - - - timestamp without time zone AT TIME ZONE zone - timestamp with time zone - - - Converts given time stamp without time zone to - time stamp with time zone, assuming the given - value is in the named time zone. - - - timestamp '2001-02-16 20:38:40' at time zone 'America/Denver' - 2001-02-17 03:38:40+00 - - - - - - timestamp without time zone AT LOCAL - timestamp with time zone - - - Converts given time stamp without time zone to - time stamp with the session's - TimeZone value as time zone. - - - timestamp '2001-02-16 20:38:40' at local - 2001-02-17 03:38:40+00 - - - - - - timestamp with time zone AT TIME ZONE zone - timestamp without time zone - - - Converts given time stamp with time zone to - time stamp without time zone, as the time would - appear in that zone. - - - timestamp with time zone '2001-02-16 20:38:40-05' at time zone 'America/Denver' - 2001-02-16 18:38:40 - - - - - - timestamp with time zone AT LOCAL - timestamp without time zone - - - Converts given time stamp with time zone to - time stamp without time zone, as the time would - appear with the session's TimeZone value as time zone. - - - timestamp with time zone '2001-02-16 20:38:40-05' at local - 2001-02-16 18:38:40 - - - - - - time with time zone AT TIME ZONE zone - time with time zone - - - Converts given time with time zone to a new time - zone. Since no date is supplied, this uses the currently active UTC - offset for the named destination zone. - - - time with time zone '05:34:17-05' at time zone 'UTC' - 10:34:17+00 - - - - - - time with time zone AT LOCAL - time with time zone - - - Converts given time with time zone to a new time - zone. Since no date is supplied, this uses the currently active UTC - offset for the session's TimeZone value. - - - Assuming the session's TimeZone is set to UTC: - - - time with time zone '05:34:17-05' at local - 10:34:17+00 - - - - -
- - - In these expressions, the desired time zone zone can be - specified either as a text value (e.g., 'America/Los_Angeles') - or as an interval (e.g., INTERVAL '-08:00'). - In the text case, a time zone name can be specified in any of the ways - described in . - The interval case is only useful for zones that have fixed offsets from - UTC, so it is not very common in practice. - - - - The syntax AT LOCAL may be used as shorthand for - AT TIME ZONE local, where - local is the session's - TimeZone value. - - - - Examples (assuming the current setting - is America/Los_Angeles): - -SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'America/Denver'; -Result: 2001-02-16 19:38:40-08 -SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'America/Denver'; -Result: 2001-02-16 18:38:40 -SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'Asia/Tokyo' AT TIME ZONE 'America/Chicago'; -Result: 2001-02-16 05:38:40 -SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT LOCAL; -Result: 2001-02-16 17:38:40 -SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '+05'; -Result: 2001-02-16 20:38:40 -SELECT TIME WITH TIME ZONE '20:38:40-05' AT LOCAL; -Result: 17:38:40 - - The first example adds a time zone to a value that lacks it, and - displays the value using the current TimeZone - setting. The second example shifts the time stamp with time zone value - to the specified time zone, and returns the value without a time zone. - This allows storage and display of values different from the current - TimeZone setting. The third example converts - Tokyo time to Chicago time. The fourth example shifts the time stamp - with time zone value to the time zone currently specified by the - TimeZone setting and returns the value without a - time zone. The fifth example demonstrates that the sign in a POSIX-style - time zone specification has the opposite meaning of the sign in an - ISO-8601 datetime literal, as described in - and . - - - - The sixth example is a cautionary tale. Due to the fact that there is no - date associated with the input value, the conversion is made using the - current date of the session. Therefore, this static example may show a wrong - result depending on the time of the year it is viewed because - 'America/Los_Angeles' observes Daylight Savings Time. - - - - The function timezone(zone, - timestamp) is equivalent to the SQL-conforming construct - timestamp AT TIME ZONE - zone. - - - - The function timezone(zone, - time) is equivalent to the SQL-conforming construct - time AT TIME ZONE - zone. - - - - The function timezone(timestamp) - is equivalent to the SQL-conforming construct timestamp - AT LOCAL. - - - - The function timezone(time) - is equivalent to the SQL-conforming construct time - AT LOCAL. - -
- - - Current Date/Time - - - date - current - - - - time - current - - - - PostgreSQL provides a number of functions - that return values related to the current date and time. These - SQL-standard functions all return values based on the start time of - the current transaction: - -CURRENT_DATE -CURRENT_TIME -CURRENT_TIMESTAMP -CURRENT_TIME(precision) -CURRENT_TIMESTAMP(precision) -LOCALTIME -LOCALTIMESTAMP -LOCALTIME(precision) -LOCALTIMESTAMP(precision) - - - - - CURRENT_TIME and - CURRENT_TIMESTAMP deliver values with time zone; - LOCALTIME and - LOCALTIMESTAMP deliver values without time zone. - - - - CURRENT_TIME, - CURRENT_TIMESTAMP, - LOCALTIME, and - LOCALTIMESTAMP - can optionally take - a precision parameter, which causes the result to be rounded - to that many fractional digits in the seconds field. Without a precision parameter, - the result is given to the full available precision. - - - - Some examples: - -SELECT CURRENT_TIME; -Result: 14:39:53.662522-05 -SELECT CURRENT_DATE; -Result: 2019-12-23 -SELECT CURRENT_TIMESTAMP; -Result: 2019-12-23 14:39:53.662522-05 -SELECT CURRENT_TIMESTAMP(2); -Result: 2019-12-23 14:39:53.66-05 -SELECT LOCALTIMESTAMP; -Result: 2019-12-23 14:39:53.662522 - - - - - Since these functions return - the start time of the current transaction, their values do not - change during the transaction. This is considered a feature: - the intent is to allow a single transaction to have a consistent - notion of the current time, so that multiple - modifications within the same transaction bear the same - time stamp. - - - - - Other database systems might advance these values more - frequently. - - - - - PostgreSQL also provides functions that - return the start time of the current statement, as well as the actual - current time at the instant the function is called. The complete list - of non-SQL-standard time functions is: - -transaction_timestamp() -statement_timestamp() -clock_timestamp() -timeofday() -now() - - - - - transaction_timestamp() is equivalent to - CURRENT_TIMESTAMP, but is named to clearly reflect - what it returns. - statement_timestamp() returns the start time of the current - statement (more specifically, the time of receipt of the latest command - message from the client). - statement_timestamp() and transaction_timestamp() - return the same value during the first command of a transaction, but might - differ during subsequent commands. - clock_timestamp() returns the actual current time, and - therefore its value changes even within a single SQL command. - timeofday() is a historical - PostgreSQL function. Like - clock_timestamp(), it returns the actual current time, - but as a formatted text string rather than a timestamp - with time zone value. - now() is a traditional PostgreSQL - equivalent to transaction_timestamp(). - - - - All the date/time data types also accept the special literal value - now to specify the current date and time (again, - interpreted as the transaction start time). Thus, - the following three all return the same result: - -SELECT CURRENT_TIMESTAMP; -SELECT now(); -SELECT TIMESTAMP 'now'; -- but see tip below - - - - - - Do not use the third form when specifying a value to be evaluated later, - for example in a DEFAULT clause for a table column. - The system will convert now - to a timestamp as soon as the constant is parsed, so that when - the default value is needed, - the time of the table creation would be used! The first two - forms will not be evaluated until the default value is used, - because they are function calls. Thus they will give the desired - behavior of defaulting to the time of row insertion. - (See also .) - - - - - - Delaying Execution - - - pg_sleep - - - pg_sleep_for - - - pg_sleep_until - - - sleep - - - delay - - - - The following functions are available to delay execution of the server - process: - -pg_sleep ( double precision ) -pg_sleep_for ( interval ) -pg_sleep_until ( timestamp with time zone ) - - - pg_sleep makes the current session's process - sleep until the given number of seconds have - elapsed. Fractional-second delays can be specified. - pg_sleep_for is a convenience function to - allow the sleep time to be specified as an interval. - pg_sleep_until is a convenience function for when - a specific wake-up time is desired. - For example: - - -SELECT pg_sleep(1.5); -SELECT pg_sleep_for('5 minutes'); -SELECT pg_sleep_until('tomorrow 03:00'); - - - - - - The effective resolution of the sleep interval is platform-specific; - 0.01 seconds is a common value. The sleep delay will be at least as long - as specified. It might be longer depending on factors such as server load. - In particular, pg_sleep_until is not guaranteed to - wake up exactly at the specified time, but it will not wake up any earlier. - - - - - - Make sure that your session does not hold more locks than necessary - when calling pg_sleep or its variants. Otherwise - other sessions might have to wait for your sleeping process, slowing down - the entire system. - - - - -
- - - - Enum Support Functions - - - For enum types (described in ), - there are several functions that allow cleaner programming without - hard-coding particular values of an enum type. - These are listed in . The examples - assume an enum type created as: - - -CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple'); - - - - - - Enum Support Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - enum_first - - enum_first ( anyenum ) - anyenum - - - Returns the first value of the input enum type. - - - enum_first(null::rainbow) - red - - - - - - enum_last - - enum_last ( anyenum ) - anyenum - - - Returns the last value of the input enum type. - - - enum_last(null::rainbow) - purple - - - - - - enum_range - - enum_range ( anyenum ) - anyarray - - - Returns all values of the input enum type in an ordered array. - - - enum_range(null::rainbow) - {red,orange,yellow,&zwsp;green,blue,purple} - - - - - enum_range ( anyenum, anyenum ) - anyarray - - - Returns the range between the two given enum values, as an ordered - array. The values must be from the same enum type. If the first - parameter is null, the result will start with the first value of - the enum type. - If the second parameter is null, the result will end with the last - value of the enum type. - - - enum_range('orange'::rainbow, 'green'::rainbow) - {orange,yellow,green} - - - enum_range(NULL, 'green'::rainbow) - {red,orange,&zwsp;yellow,green} - - - enum_range('orange'::rainbow, NULL) - {orange,yellow,green,&zwsp;blue,purple} - - - - -
- - - Notice that except for the two-argument form of enum_range, - these functions disregard the specific value passed to them; they care - only about its declared data type. Either null or a specific value of - the type can be passed, with the same result. It is more common to - apply these functions to a table column or function argument than to - a hardwired type name as used in the examples. - -
- - - Geometric Functions and Operators - - - The geometric types point, box, - lseg, line, path, - polygon, and circle have a large set of - native support functions and operators, shown in , , and . - - - - Geometric Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - geometric_type + point - geometric_type - - - Adds the coordinates of the second point to those of each - point of the first argument, thus performing translation. - Available for point, box, path, - circle. - - - box '(1,1),(0,0)' + point '(2,0)' - (3,1),(2,0) - - - - - - path + path - path - - - Concatenates two open paths (returns NULL if either path is closed). - - - path '[(0,0),(1,1)]' + path '[(2,2),(3,3),(4,4)]' - [(0,0),(1,1),(2,2),(3,3),(4,4)] - - - - - - geometric_type - point - geometric_type - - - Subtracts the coordinates of the second point from those - of each point of the first argument, thus performing translation. - Available for point, box, path, - circle. - - - box '(1,1),(0,0)' - point '(2,0)' - (-1,1),(-2,0) - - - - - - geometric_type * point - geometric_type - - - Multiplies each point of the first argument by the second - point (treating a point as being a complex number - represented by real and imaginary parts, and performing standard - complex multiplication). If one interprets - the second point as a vector, this is equivalent to - scaling the object's size and distance from the origin by the length - of the vector, and rotating it counterclockwise around the origin by - the vector's angle from the x axis. - Available for point, box,Rotating a - box with these operators only moves its corner points: the box is - still considered to have sides parallel to the axes. Hence the box's - size is not preserved, as a true rotation would do. - path, circle. - - - path '((0,0),(1,0),(1,1))' * point '(3.0,0)' - ((0,0),(3,0),(3,3)) - - - path '((0,0),(1,0),(1,1))' * point(cosd(45), sind(45)) - ((0,0),&zwsp;(0.7071067811865475,0.7071067811865475),&zwsp;(0,1.414213562373095)) - - - - - - geometric_type / point - geometric_type - - - Divides each point of the first argument by the second - point (treating a point as being a complex number - represented by real and imaginary parts, and performing standard - complex division). If one interprets - the second point as a vector, this is equivalent to - scaling the object's size and distance from the origin down by the - length of the vector, and rotating it clockwise around the origin by - the vector's angle from the x axis. - Available for point, box, path, - circle. - - - path '((0,0),(1,0),(1,1))' / point '(2.0,0)' - ((0,0),(0.5,0),(0.5,0.5)) - - - path '((0,0),(1,0),(1,1))' / point(cosd(45), sind(45)) - ((0,0),&zwsp;(0.7071067811865476,-0.7071067811865476),&zwsp;(1.4142135623730951,0)) - - - - - - @-@ geometric_type - double precision - - - Computes the total length. - Available for lseg, path. - - - @-@ path '[(0,0),(1,0),(1,1)]' - 2 - - - - - - @@ geometric_type - point - - - Computes the center point. - Available for box, lseg, - polygon, circle. - - - @@ box '(2,2),(0,0)' - (1,1) - - - - - - # geometric_type - integer - - - Returns the number of points. - Available for path, polygon. - - - # path '((1,0),(0,1),(-1,0))' - 3 - - - - - - geometric_type # geometric_type - point - - - Computes the point of intersection, or NULL if there is none. - Available for lseg, line. - - - lseg '[(0,0),(1,1)]' # lseg '[(1,0),(0,1)]' - (0.5,0.5) - - - - - - box # box - box - - - Computes the intersection of two boxes, or NULL if there is none. - - - box '(2,2),(-1,-1)' # box '(1,1),(-2,-2)' - (1,1),(-1,-1) - - - - - - geometric_type ## geometric_type - point - - - Computes the closest point to the first object on the second object. - Available for these pairs of types: - (point, box), - (point, lseg), - (point, line), - (lseg, box), - (lseg, lseg), - (line, lseg). - - - point '(0,0)' ## lseg '[(2,0),(0,2)]' - (1,1) - - - - - - geometric_type <-> geometric_type - double precision - - - Computes the distance between the objects. - Available for all seven geometric types, for all combinations - of point with another geometric type, and for - these additional pairs of types: - (box, lseg), - (lseg, line), - (polygon, circle) - (and the commutator cases). - - - circle '<(0,0),1>' <-> circle '<(5,0),1>' - 3 - - - - - - geometric_type @> geometric_type - boolean - - - Does first object contain second? - Available for these pairs of types: - (box, point), - (box, box), - (path, point), - (polygon, point), - (polygon, polygon), - (circle, point), - (circle, circle). - - - circle '<(0,0),2>' @> point '(1,1)' - t - - - - - - geometric_type <@ geometric_type - boolean - - - Is first object contained in or on second? - Available for these pairs of types: - (point, box), - (point, lseg), - (point, line), - (point, path), - (point, polygon), - (point, circle), - (box, box), - (lseg, box), - (lseg, line), - (polygon, polygon), - (circle, circle). - - - point '(1,1)' <@ circle '<(0,0),2>' - t - - - - - - geometric_type && geometric_type - boolean - - - Do these objects overlap? (One point in common makes this true.) - Available for box, polygon, - circle. - - - box '(1,1),(0,0)' && box '(2,2),(0,0)' - t - - - - - - geometric_type << geometric_type - boolean - - - Is first object strictly left of second? - Available for point, box, - polygon, circle. - - - circle '<(0,0),1>' << circle '<(5,0),1>' - t - - - - - - geometric_type >> geometric_type - boolean - - - Is first object strictly right of second? - Available for point, box, - polygon, circle. - - - circle '<(5,0),1>' >> circle '<(0,0),1>' - t - - - - - - geometric_type &< geometric_type - boolean - - - Does first object not extend to the right of second? - Available for box, polygon, - circle. - - - box '(1,1),(0,0)' &< box '(2,2),(0,0)' - t - - - - - - geometric_type &> geometric_type - boolean - - - Does first object not extend to the left of second? - Available for box, polygon, - circle. - - - box '(3,3),(0,0)' &> box '(2,2),(0,0)' - t - - - - - - geometric_type <<| geometric_type - boolean - - - Is first object strictly below second? - Available for point, box, polygon, - circle. - - - box '(3,3),(0,0)' <<| box '(5,5),(3,4)' - t - - - - - - geometric_type |>> geometric_type - boolean - - - Is first object strictly above second? - Available for point, box, polygon, - circle. - - - box '(5,5),(3,4)' |>> box '(3,3),(0,0)' - t - - - - - - geometric_type &<| geometric_type - boolean - - - Does first object not extend above second? - Available for box, polygon, - circle. - - - box '(1,1),(0,0)' &<| box '(2,2),(0,0)' - t - - - - - - geometric_type |&> geometric_type - boolean - - - Does first object not extend below second? - Available for box, polygon, - circle. - - - box '(3,3),(0,0)' |&> box '(2,2),(0,0)' - t - - - - - - box <^ box - boolean - - - Is first object below second (allows edges to touch)? - - - box '((1,1),(0,0))' <^ box '((2,2),(1,1))' - t - - - - - - box >^ box - boolean - - - Is first object above second (allows edges to touch)? - - - box '((2,2),(1,1))' >^ box '((1,1),(0,0))' - t - - - - - - geometric_type ?# geometric_type - boolean - - - Do these objects intersect? - Available for these pairs of types: - (box, box), - (lseg, box), - (lseg, lseg), - (lseg, line), - (line, box), - (line, line), - (path, path). - - - lseg '[(-1,0),(1,0)]' ?# box '(2,2),(-2,-2)' - t - - - - - - ?- line - boolean - - - ?- lseg - boolean - - - Is line horizontal? - - - ?- lseg '[(-1,0),(1,0)]' - t - - - - - - point ?- point - boolean - - - Are points horizontally aligned (that is, have same y coordinate)? - - - point '(1,0)' ?- point '(0,0)' - t - - - - - - ?| line - boolean - - - ?| lseg - boolean - - - Is line vertical? - - - ?| lseg '[(-1,0),(1,0)]' - f - - - - - - point ?| point - boolean - - - Are points vertically aligned (that is, have same x coordinate)? - - - point '(0,1)' ?| point '(0,0)' - t - - - - - - line ?-| line - boolean - - - lseg ?-| lseg - boolean - - - Are lines perpendicular? - - - lseg '[(0,0),(0,1)]' ?-| lseg '[(0,0),(1,0)]' - t - - - - - - line ?|| line - boolean - - - lseg ?|| lseg - boolean - - - Are lines parallel? - - - lseg '[(-1,0),(1,0)]' ?|| lseg '[(-1,2),(1,2)]' - t - - - - - - geometric_type ~= geometric_type - boolean - - - Are these objects the same? - Available for point, box, - polygon, circle. - - - polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' - t - - - - -
- - - - Note that the same as operator, ~=, - represents the usual notion of equality for the point, - box, polygon, and circle types. - Some of the geometric types also have an = operator, but - = compares for equal areas only. - The other scalar comparison operators (<= and so - on), where available for these types, likewise compare areas. - - - - - - Before PostgreSQL 14, the point - is strictly below/above comparison operators point - <<| point and point - |>> point were respectively - called <^ and >^. These - names are still available, but are deprecated and will eventually be - removed. - - - - - Geometric Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - area - - area ( geometric_type ) - double precision - - - Computes area. - Available for box, path, circle. - A path input must be closed, else NULL is returned. - Also, if the path is self-intersecting, the result may be - meaningless. - - - area(box '(2,2),(0,0)') - 4 - - - - - - - center - - center ( geometric_type ) - point - - - Computes center point. - Available for box, circle. - - - center(box '(1,2),(0,0)') - (0.5,1) - - - - - - - diagonal - - diagonal ( box ) - lseg - - - Extracts box's diagonal as a line segment - (same as lseg(box)). - - - diagonal(box '(1,2),(0,0)') - [(1,2),(0,0)] - - - - - - - diameter - - diameter ( circle ) - double precision - - - Computes diameter of circle. - - - diameter(circle '<(0,0),2>') - 4 - - - - - - - height - - height ( box ) - double precision - - - Computes vertical size of box. - - - height(box '(1,2),(0,0)') - 2 - - - - - - - isclosed - - isclosed ( path ) - boolean - - - Is path closed? - - - isclosed(path '((0,0),(1,1),(2,0))') - t - - - - - - - isopen - - isopen ( path ) - boolean - - - Is path open? - - - isopen(path '[(0,0),(1,1),(2,0)]') - t - - - - - - - length - - length ( geometric_type ) - double precision - - - Computes the total length. - Available for lseg, path. - - - length(path '((-1,0),(1,0))') - 4 - - - - - - - npoints - - npoints ( geometric_type ) - integer - - - Returns the number of points. - Available for path, polygon. - - - npoints(path '[(0,0),(1,1),(2,0)]') - 3 - - - - - - - pclose - - pclose ( path ) - path - - - Converts path to closed form. - - - pclose(path '[(0,0),(1,1),(2,0)]') - ((0,0),(1,1),(2,0)) - - - - - - - popen - - popen ( path ) - path - - - Converts path to open form. - - - popen(path '((0,0),(1,1),(2,0))') - [(0,0),(1,1),(2,0)] - - - - - - - radius - - radius ( circle ) - double precision - - - Computes radius of circle. - - - radius(circle '<(0,0),2>') - 2 - - - - - - - slope - - slope ( point, point ) - double precision - - - Computes slope of a line drawn through the two points. - - - slope(point '(0,0)', point '(2,1)') - 0.5 - - - - - - - width - - width ( box ) - double precision - - - Computes horizontal size of box. - - - width(box '(1,2),(0,0)') - 1 - - - - -
- - - Geometric Type Conversion Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - box - - box ( circle ) - box - - - Computes box inscribed within the circle. - - - box(circle '<(0,0),2>') - (1.414213562373095,1.414213562373095),&zwsp;(-1.414213562373095,-1.414213562373095) - - - - - - box ( point ) - box - - - Converts point to empty box. - - - box(point '(1,0)') - (1,0),(1,0) - - - - - - box ( point, point ) - box - - - Converts any two corner points to box. - - - box(point '(0,1)', point '(1,0)') - (1,1),(0,0) - - - - - - box ( polygon ) - box - - - Computes bounding box of polygon. - - - box(polygon '((0,0),(1,1),(2,0))') - (2,1),(0,0) - - - - - - - bound_box - - bound_box ( box, box ) - box - - - Computes bounding box of two boxes. - - - bound_box(box '(1,1),(0,0)', box '(4,4),(3,3)') - (4,4),(0,0) - - - - - - - circle - - circle ( box ) - circle - - - Computes smallest circle enclosing box. - - - circle(box '(1,1),(0,0)') - <(0.5,0.5),0.7071067811865476> - - - - - - circle ( point, double precision ) - circle - - - Constructs circle from center and radius. - - - circle(point '(0,0)', 2.0) - <(0,0),2> - - - - - - circle ( polygon ) - circle - - - Converts polygon to circle. The circle's center is the mean of the - positions of the polygon's points, and the radius is the average - distance of the polygon's points from that center. - - - circle(polygon '((0,0),(1,3),(2,0))') - <(1,1),1.6094757082487299> - - - - - - - line - - line ( point, point ) - line - - - Converts two points to the line through them. - - - line(point '(-1,0)', point '(1,0)') - {0,-1,0} - - - - - - - lseg - - lseg ( box ) - lseg - - - Extracts box's diagonal as a line segment. - - - lseg(box '(1,0),(-1,0)') - [(1,0),(-1,0)] - - - - - - lseg ( point, point ) - lseg - - - Constructs line segment from two endpoints. - - - lseg(point '(-1,0)', point '(1,0)') - [(-1,0),(1,0)] - - - - - - - path - - path ( polygon ) - path - - - Converts polygon to a closed path with the same list of points. - - - path(polygon '((0,0),(1,1),(2,0))') - ((0,0),(1,1),(2,0)) - - - - - - - point - - point ( double precision, double precision ) - point - - - Constructs point from its coordinates. - - - point(23.4, -44.5) - (23.4,-44.5) - - - - - - point ( box ) - point - - - Computes center of box. - - - point(box '(1,0),(-1,0)') - (0,0) - - - - - - point ( circle ) - point - - - Computes center of circle. - - - point(circle '<(0,0),2>') - (0,0) - - - - - - point ( lseg ) - point - - - Computes center of line segment. - - - point(lseg '[(-1,0),(1,0)]') - (0,0) - - - - - - point ( polygon ) - point - - - Computes center of polygon (the mean of the - positions of the polygon's points). - - - point(polygon '((0,0),(1,1),(2,0))') - (1,0.3333333333333333) - - - - - - - polygon - - polygon ( box ) - polygon - - - Converts box to a 4-point polygon. - - - polygon(box '(1,1),(0,0)') - ((0,0),(0,1),(1,1),(1,0)) - - - - - - polygon ( circle ) - polygon - - - Converts circle to a 12-point polygon. - - - polygon(circle '<(0,0),2>') - ((-2,0),&zwsp;(-1.7320508075688774,0.9999999999999999),&zwsp;(-1.0000000000000002,1.7320508075688772),&zwsp;(-1.2246063538223773e-16,2),&zwsp;(0.9999999999999996,1.7320508075688774),&zwsp;(1.732050807568877,1.0000000000000007),&zwsp;(2,2.4492127076447545e-16),&zwsp;(1.7320508075688776,-0.9999999999999994),&zwsp;(1.0000000000000009,-1.7320508075688767),&zwsp;(3.673819061467132e-16,-2),&zwsp;(-0.9999999999999987,-1.732050807568878),&zwsp;(-1.7320508075688767,-1.0000000000000009)) - - - - - - polygon ( integer, circle ) - polygon - - - Converts circle to an n-point polygon. - - - polygon(4, circle '<(3,0),1>') - ((2,0),&zwsp;(3,1),&zwsp;(4,1.2246063538223773e-16),&zwsp;(3,-1)) - - - - - - polygon ( path ) - polygon - - - Converts closed path to a polygon with the same list of points. - - - polygon(path '((0,0),(1,1),(2,0))') - ((0,0),(1,1),(2,0)) - - - - - -
- - - It is possible to access the two component numbers of a point - as though the point were an array with indexes 0 and 1. For example, if - t.p is a point column then - SELECT p[0] FROM t retrieves the X coordinate and - UPDATE t SET p[1] = ... changes the Y coordinate. - In the same way, a value of type box or lseg can be treated - as an array of two point values. - - -
- - - - Network Address Functions and Operators - - - The IP network address types, cidr and inet, - support the usual comparison operators shown in - - as well as the specialized operators and functions shown in - and - . - - - - Any cidr value can be cast to inet implicitly; - therefore, the operators and functions shown below as operating on - inet also work on cidr values. (Where there are - separate functions for inet and cidr, it is - because the behavior should be different for the two cases.) - Also, it is permitted to cast an inet value - to cidr. When this is done, any bits to the right of the - netmask are silently zeroed to create a valid cidr value. - - - - IP Address Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - inet << inet - boolean - - - Is subnet strictly contained by subnet? - This operator, and the next four, test for subnet inclusion. They - consider only the network parts of the two addresses (ignoring any - bits to the right of the netmasks) and determine whether one network - is identical to or a subnet of the other. - - - inet '192.168.1.5' << inet '192.168.1/24' - t - - - inet '192.168.0.5' << inet '192.168.1/24' - f - - - inet '192.168.1/24' << inet '192.168.1/24' - f - - - - - - inet <<= inet - boolean - - - Is subnet contained by or equal to subnet? - - - inet '192.168.1/24' <<= inet '192.168.1/24' - t - - - - - - inet >> inet - boolean - - - Does subnet strictly contain subnet? - - - inet '192.168.1/24' >> inet '192.168.1.5' - t - - - - - - inet >>= inet - boolean - - - Does subnet contain or equal subnet? - - - inet '192.168.1/24' >>= inet '192.168.1/24' - t - - - - - - inet && inet - boolean - - - Does either subnet contain or equal the other? - - - inet '192.168.1/24' && inet '192.168.1.80/28' - t - - - inet '192.168.1/24' && inet '192.168.2.0/28' - f - - - - - - ~ inet - inet - - - Computes bitwise NOT. - - - ~ inet '192.168.1.6' - 63.87.254.249 - - - - - - inet & inet - inet - - - Computes bitwise AND. - - - inet '192.168.1.6' & inet '0.0.0.255' - 0.0.0.6 - - - - - - inet | inet - inet - - - Computes bitwise OR. - - - inet '192.168.1.6' | inet '0.0.0.255' - 192.168.1.255 - - - - - - inet + bigint - inet - - - Adds an offset to an address. - - - inet '192.168.1.6' + 25 - 192.168.1.31 - - - - - - bigint + inet - inet - - - Adds an offset to an address. - - - 200 + inet '::ffff:fff0:1' - ::ffff:255.240.0.201 - - - - - - inet - bigint - inet - - - Subtracts an offset from an address. - - - inet '192.168.1.43' - 36 - 192.168.1.7 - - - - - - inet - inet - bigint - - - Computes the difference of two addresses. - - - inet '192.168.1.43' - inet '192.168.1.19' - 24 - - - inet '::1' - inet '::ffff:1' - -4294901760 - - - - -
- - - IP Address Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - abbrev - - abbrev ( inet ) - text - - - Creates an abbreviated display format as text. - (The result is the same as the inet output function - produces; it is abbreviated only in comparison to the - result of an explicit cast to text, which for historical - reasons will never suppress the netmask part.) - - - abbrev(inet '10.1.0.0/32') - 10.1.0.0 - - - - - - abbrev ( cidr ) - text - - - Creates an abbreviated display format as text. - (The abbreviation consists of dropping all-zero octets to the right - of the netmask; more examples are in - .) - - - abbrev(cidr '10.1.0.0/16') - 10.1/16 - - - - - - - broadcast - - broadcast ( inet ) - inet - - - Computes the broadcast address for the address's network. - - - broadcast(inet '192.168.1.5/24') - 192.168.1.255/24 - - - - - - - family - - family ( inet ) - integer - - - Returns the address's family: 4 for IPv4, - 6 for IPv6. - - - family(inet '::1') - 6 - - - - - - - host - - host ( inet ) - text - - - Returns the IP address as text, ignoring the netmask. - - - host(inet '192.168.1.0/24') - 192.168.1.0 - - - - - - - hostmask - - hostmask ( inet ) - inet - - - Computes the host mask for the address's network. - - - hostmask(inet '192.168.23.20/30') - 0.0.0.3 - - - - - - - inet_merge - - inet_merge ( inet, inet ) - cidr - - - Computes the smallest network that includes both of the given networks. - - - inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24') - 192.168.0.0/22 - - - - - - - inet_same_family - - inet_same_family ( inet, inet ) - boolean - - - Tests whether the addresses belong to the same IP family. - - - inet_same_family(inet '192.168.1.5/24', inet '::1') - f - - - - - - - masklen - - masklen ( inet ) - integer - - - Returns the netmask length in bits. - - - masklen(inet '192.168.1.5/24') - 24 - - - - - - - netmask - - netmask ( inet ) - inet - - - Computes the network mask for the address's network. - - - netmask(inet '192.168.1.5/24') - 255.255.255.0 - - - - - - - network - - network ( inet ) - cidr - - - Returns the network part of the address, zeroing out - whatever is to the right of the netmask. - (This is equivalent to casting the value to cidr.) - - - network(inet '192.168.1.5/24') - 192.168.1.0/24 - - - - - - - set_masklen - - set_masklen ( inet, integer ) - inet - - - Sets the netmask length for an inet value. - The address part does not change. - - - set_masklen(inet '192.168.1.5/24', 16) - 192.168.1.5/16 - - - - - - set_masklen ( cidr, integer ) - cidr - - - Sets the netmask length for a cidr value. - Address bits to the right of the new netmask are set to zero. - - - set_masklen(cidr '192.168.1.0/24', 16) - 192.168.0.0/16 - - - - - - - text - - text ( inet ) - text - - - Returns the unabbreviated IP address and netmask length as text. - (This has the same result as an explicit cast to text.) - - - text(inet '192.168.1.5') - 192.168.1.5/32 - - - - -
- - - - The abbrev, host, - and text functions are primarily intended to offer - alternative display formats for IP addresses. - - - - - The MAC address types, macaddr and macaddr8, - support the usual comparison operators shown in - - as well as the specialized functions shown in - . - In addition, they support the bitwise logical operators - ~, & and | - (NOT, AND and OR), just as shown above for IP addresses. - - - - MAC Address Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - trunc - - trunc ( macaddr ) - macaddr - - - Sets the last 3 bytes of the address to zero. The remaining prefix - can be associated with a particular manufacturer (using data not - included in PostgreSQL). - - - trunc(macaddr '12:34:56:78:90:ab') - 12:34:56:00:00:00 - - - - - - trunc ( macaddr8 ) - macaddr8 - - - Sets the last 5 bytes of the address to zero. The remaining prefix - can be associated with a particular manufacturer (using data not - included in PostgreSQL). - - - trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') - 12:34:56:00:00:00:00:00 - - - - - - - macaddr8_set7bit - - macaddr8_set7bit ( macaddr8 ) - macaddr8 - - - Sets the 7th bit of the address to one, creating what is known as - modified EUI-64, for inclusion in an IPv6 address. - - - macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef') - 02:34:56:ff:fe:ab:cd:ef - - - - -
- -
- - - - Text Search Functions and Operators - - - full text search - functions and operators - - - - text search - functions and operators - - - - , - and - - summarize the functions and operators that are provided - for full text searching. See for a detailed - explanation of PostgreSQL's text search - facility. - - - - Text Search Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - tsvector @@ tsquery - boolean - - - tsquery @@ tsvector - boolean - - - Does tsvector match tsquery? - (The arguments can be given in either order.) - - - to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat') - t - - - - - - text @@ tsquery - boolean - - - Does text string, after implicit invocation - of to_tsvector(), match tsquery? - - - 'fat cats ate rats' @@ to_tsquery('cat & rat') - t - - - - - - tsvector || tsvector - tsvector - - - Concatenates two tsvectors. If both inputs contain - lexeme positions, the second input's positions are adjusted - accordingly. - - - 'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector - 'a':1 'b':2,5 'c':3 'd':4 - - - - - - tsquery && tsquery - tsquery - - - ANDs two tsquerys together, producing a query that - matches documents that match both input queries. - - - 'fat | rat'::tsquery && 'cat'::tsquery - ( 'fat' | 'rat' ) & 'cat' - - - - - - tsquery || tsquery - tsquery - - - ORs two tsquerys together, producing a query that - matches documents that match either input query. - - - 'fat | rat'::tsquery || 'cat'::tsquery - 'fat' | 'rat' | 'cat' - - - - - - !! tsquery - tsquery - - - Negates a tsquery, producing a query that matches - documents that do not match the input query. - - - !! 'cat'::tsquery - !'cat' - - - - - - tsquery <-> tsquery - tsquery - - - Constructs a phrase query, which matches if the two input queries - match at successive lexemes. - - - to_tsquery('fat') <-> to_tsquery('rat') - 'fat' <-> 'rat' - - - - - - tsquery @> tsquery - boolean - - - Does first tsquery contain the second? (This considers - only whether all the lexemes appearing in one query appear in the - other, ignoring the combining operators.) - - - 'cat'::tsquery @> 'cat & rat'::tsquery - f - - - - - - tsquery <@ tsquery - boolean - - - Is first tsquery contained in the second? (This - considers only whether all the lexemes appearing in one query appear - in the other, ignoring the combining operators.) - - - 'cat'::tsquery <@ 'cat & rat'::tsquery - t - - - 'cat'::tsquery <@ '!cat & rat'::tsquery - t - - - - -
- - - In addition to these specialized operators, the usual comparison - operators shown in are - available for types tsvector and tsquery. - These are not very - useful for text searching but allow, for example, unique indexes to be - built on columns of these types. - - - - Text Search Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - array_to_tsvector - - array_to_tsvector ( text[] ) - tsvector - - - Converts an array of text strings to a tsvector. - The given strings are used as lexemes as-is, without further - processing. Array elements must not be empty strings - or NULL. - - - array_to_tsvector('{fat,cat,rat}'::text[]) - 'cat' 'fat' 'rat' - - - - - - - get_current_ts_config - - get_current_ts_config ( ) - regconfig - - - Returns the OID of the current default text search configuration - (as set by ). - - - get_current_ts_config() - english - - - - - - - length - - length ( tsvector ) - integer - - - Returns the number of lexemes in the tsvector. - - - length('fat:2,4 cat:3 rat:5A'::tsvector) - 3 - - - - - - - numnode - - numnode ( tsquery ) - integer - - - Returns the number of lexemes plus operators in - the tsquery. - - - numnode('(fat & rat) | cat'::tsquery) - 5 - - - - - - - plainto_tsquery - - plainto_tsquery ( - config regconfig, - query text ) - tsquery - - - Converts text to a tsquery, normalizing words according to - the specified or default configuration. Any punctuation in the string - is ignored (it does not determine query operators). The resulting - query matches documents containing all non-stopwords in the text. - - - plainto_tsquery('english', 'The Fat Rats') - 'fat' & 'rat' - - - - - - - phraseto_tsquery - - phraseto_tsquery ( - config regconfig, - query text ) - tsquery - - - Converts text to a tsquery, normalizing words according to - the specified or default configuration. Any punctuation in the string - is ignored (it does not determine query operators). The resulting - query matches phrases containing all non-stopwords in the text. - - - phraseto_tsquery('english', 'The Fat Rats') - 'fat' <-> 'rat' - - - phraseto_tsquery('english', 'The Cat and Rats') - 'cat' <2> 'rat' - - - - - - - websearch_to_tsquery - - websearch_to_tsquery ( - config regconfig, - query text ) - tsquery - - - Converts text to a tsquery, normalizing words according - to the specified or default configuration. Quoted word sequences are - converted to phrase tests. The word or is understood - as producing an OR operator, and a dash produces a NOT operator; - other punctuation is ignored. - This approximates the behavior of some common web search tools. - - - websearch_to_tsquery('english', '"fat rat" or cat dog') - 'fat' <-> 'rat' | 'cat' & 'dog' - - - - - - - querytree - - querytree ( tsquery ) - text - - - Produces a representation of the indexable portion of - a tsquery. A result that is empty or - just T indicates a non-indexable query. - - - querytree('foo & ! bar'::tsquery) - 'foo' - - - - - - - setweight - - setweight ( vector tsvector, weight "char" ) - tsvector - - - Assigns the specified weight to each element - of the vector. - - - setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A') - 'cat':3A 'fat':2A,4A 'rat':5A - - - - - - - setweight - setweight for specific lexeme(s) - - setweight ( vector tsvector, weight "char", lexemes text[] ) - tsvector - - - Assigns the specified weight to elements - of the vector that are listed - in lexemes. - The strings in lexemes are taken as lexemes - as-is, without further processing. Strings that do not match any - lexeme in vector are ignored. - - - setweight('fat:2,4 cat:3 rat:5,6B'::tsvector, 'A', '{cat,rat}') - 'cat':3A 'fat':2,4 'rat':5A,6A - - - - - - - strip - - strip ( tsvector ) - tsvector - - - Removes positions and weights from the tsvector. - - - strip('fat:2,4 cat:3 rat:5A'::tsvector) - 'cat' 'fat' 'rat' - - - - - - - to_tsquery - - to_tsquery ( - config regconfig, - query text ) - tsquery - - - Converts text to a tsquery, normalizing words according to - the specified or default configuration. The words must be combined - by valid tsquery operators. - - - to_tsquery('english', 'The & Fat & Rats') - 'fat' & 'rat' - - - - - - - to_tsvector - - to_tsvector ( - config regconfig, - document text ) - tsvector - - - Converts text to a tsvector, normalizing words according - to the specified or default configuration. Position information is - included in the result. - - - to_tsvector('english', 'The Fat Rats') - 'fat':2 'rat':3 - - - - - - to_tsvector ( - config regconfig, - document json ) - tsvector - - - to_tsvector ( - config regconfig, - document jsonb ) - tsvector - - - Converts each string value in the JSON document to - a tsvector, normalizing words according to the specified - or default configuration. The results are then concatenated in - document order to produce the output. Position information is - generated as though one stopword exists between each pair of string - values. (Beware that document order of the fields of a - JSON object is implementation-dependent when the input - is jsonb; observe the difference in the examples.) - - - to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::json) - 'dog':5 'fat':2 'rat':3 - - - to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::jsonb) - 'dog':1 'fat':4 'rat':5 - - - - - - - json_to_tsvector - - json_to_tsvector ( - config regconfig, - document json, - filter jsonb ) - tsvector - - - - jsonb_to_tsvector - - jsonb_to_tsvector ( - config regconfig, - document jsonb, - filter jsonb ) - tsvector - - - Selects each item in the JSON document that is requested by - the filter and converts each one to - a tsvector, normalizing words according to the specified - or default configuration. The results are then concatenated in - document order to produce the output. Position information is - generated as though one stopword exists between each pair of selected - items. (Beware that document order of the fields of a - JSON object is implementation-dependent when the input - is jsonb.) - The filter must be a jsonb - array containing zero or more of these keywords: - "string" (to include all string values), - "numeric" (to include all numeric values), - "boolean" (to include all boolean values), - "key" (to include all keys), or - "all" (to include all the above). - As a special case, the filter can also be a - simple JSON value that is one of these keywords. - - - json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]') - '123':5 'fat':2 'rat':3 - - - json_to_tsvector('english', '{"cat": "The Fat Rats", "dog": 123}'::json, '"all"') - '123':9 'cat':1 'dog':7 'fat':4 'rat':5 - - - - - - - ts_delete - - ts_delete ( vector tsvector, lexeme text ) - tsvector - - - Removes any occurrence of the given lexeme - from the vector. - The lexeme string is treated as a lexeme as-is, - without further processing. - - - ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat') - 'cat':3 'rat':5A - - - - - - ts_delete ( vector tsvector, lexemes text[] ) - tsvector - - - Removes any occurrences of the lexemes - in lexemes - from the vector. - The strings in lexemes are taken as lexemes - as-is, without further processing. Strings that do not match any - lexeme in vector are ignored. - - - ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat']) - 'cat':3 - - - - - - - ts_filter - - ts_filter ( vector tsvector, weights "char"[] ) - tsvector - - - Selects only elements with the given weights - from the vector. - - - ts_filter('fat:2,4 cat:3b,7c rat:5A'::tsvector, '{a,b}') - 'cat':3B 'rat':5A - - - - - - - ts_headline - - ts_headline ( - config regconfig, - document text, - query tsquery - , options text ) - text - - - Displays, in an abbreviated form, the match(es) for - the query in - the document, which must be raw text not - a tsvector. Words in the document are normalized - according to the specified or default configuration before matching to - the query. Use of this function is discussed in - , which also describes the - available options. - - - ts_headline('The fat cat ate the rat.', 'cat') - The fat <b>cat</b> ate the rat. - - - - - - ts_headline ( - config regconfig, - document json, - query tsquery - , options text ) - text - - - ts_headline ( - config regconfig, - document jsonb, - query tsquery - , options text ) - text - - - Displays, in an abbreviated form, match(es) for - the query that occur in string values - within the JSON document. - See for more details. - - - ts_headline('{"cat":"raining cats and dogs"}'::jsonb, 'cat') - {"cat": "raining <b>cats</b> and dogs"} - - - - - - - ts_rank - - ts_rank ( - weights real[], - vector tsvector, - query tsquery - , normalization integer ) - real - - - Computes a score showing how well - the vector matches - the query. See - for details. - - - ts_rank(to_tsvector('raining cats and dogs'), 'cat') - 0.06079271 - - - - - - - ts_rank_cd - - ts_rank_cd ( - weights real[], - vector tsvector, - query tsquery - , normalization integer ) - real - - - Computes a score showing how well - the vector matches - the query, using a cover density - algorithm. See for details. - - - ts_rank_cd(to_tsvector('raining cats and dogs'), 'cat') - 0.1 - - - - - - - ts_rewrite - - ts_rewrite ( query tsquery, - target tsquery, - substitute tsquery ) - tsquery - - - Replaces occurrences of target - with substitute - within the query. - See for details. - - - ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery) - 'b' & ( 'foo' | 'bar' ) - - - - - - ts_rewrite ( query tsquery, - select text ) - tsquery - - - Replaces portions of the query according to - target(s) and substitute(s) obtained by executing - a SELECT command. - See for details. - - - SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases') - 'b' & ( 'foo' | 'bar' ) - - - - - - - tsquery_phrase - - tsquery_phrase ( query1 tsquery, query2 tsquery ) - tsquery - - - Constructs a phrase query that searches - for matches of query1 - and query2 at successive lexemes (same - as <-> operator). - - - tsquery_phrase(to_tsquery('fat'), to_tsquery('cat')) - 'fat' <-> 'cat' - - - - - - tsquery_phrase ( query1 tsquery, query2 tsquery, distance integer ) - tsquery - - - Constructs a phrase query that searches - for matches of query1 and - query2 that occur exactly - distance lexemes apart. - - - tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10) - 'fat' <10> 'cat' - - - - - - - tsvector_to_array - - tsvector_to_array ( tsvector ) - text[] - - - Converts a tsvector to an array of lexemes. - - - tsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector) - {cat,fat,rat} - - - - - - - unnest - for tsvector - - unnest ( tsvector ) - setof record - ( lexeme text, - positions smallint[], - weights text ) - - - Expands a tsvector into a set of rows, one per lexeme. - - - select * from unnest('cat:3 fat:2,4 rat:5A'::tsvector) - - - lexeme | positions | weights ---------+-----------+--------- - cat | {3} | {D} - fat | {2,4} | {D,D} - rat | {5} | {A} - - - - - -
- - - - All the text search functions that accept an optional regconfig - argument will use the configuration specified by - - when that argument is omitted. - - - - - The functions in - - are listed separately because they are not usually used in everyday text - searching operations. They are primarily helpful for development and - debugging of new text search configurations. - - - - Text Search Debugging Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - ts_debug - - ts_debug ( - config regconfig, - document text ) - setof record - ( alias text, - description text, - token text, - dictionaries regdictionary[], - dictionary regdictionary, - lexemes text[] ) - - - Extracts and normalizes tokens from - the document according to the specified or - default text search configuration, and returns information about how - each token was processed. - See for details. - - - ts_debug('english', 'The Brightest supernovaes') - (asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) ... - - - - - - - ts_lexize - - ts_lexize ( dict regdictionary, token text ) - text[] - - - Returns an array of replacement lexemes if the input token is known to - the dictionary, or an empty array if the token is known to the - dictionary but it is a stop word, or NULL if it is not a known word. - See for details. - - - ts_lexize('english_stem', 'stars') - {star} - - - - - - - ts_parse - - ts_parse ( parser_name text, - document text ) - setof record - ( tokid integer, - token text ) - - - Extracts tokens from the document using the - named parser. - See for details. - - - ts_parse('default', 'foo - bar') - (1,foo) ... - - - - - - ts_parse ( parser_oid oid, - document text ) - setof record - ( tokid integer, - token text ) - - - Extracts tokens from the document using a - parser specified by OID. - See for details. - - - ts_parse(3722, 'foo - bar') - (1,foo) ... - - - - - - - ts_token_type - - ts_token_type ( parser_name text ) - setof record - ( tokid integer, - alias text, - description text ) - - - Returns a table that describes each type of token the named parser can - recognize. - See for details. - - - ts_token_type('default') - (1,asciiword,"Word, all ASCII") ... - - - - - - ts_token_type ( parser_oid oid ) - setof record - ( tokid integer, - alias text, - description text ) - - - Returns a table that describes each type of token a parser specified - by OID can recognize. - See for details. - - - ts_token_type(3722) - (1,asciiword,"Word, all ASCII") ... - - - - - - - ts_stat - - ts_stat ( sqlquery text - , weights text ) - setof record - ( word text, - ndoc integer, - nentry integer ) - - - Executes the sqlquery, which must return a - single tsvector column, and returns statistics about each - distinct lexeme contained in the data. - See for details. - - - ts_stat('SELECT vector FROM apod') - (foo,10,15) ... - - - - -
- -
- - - UUID Functions - - - UUID - generating - - - - gen_random_uuid - - - - uuidv4 - - - - uuidv7 - - - - uuid_extract_timestamp - - - - uuid_extract_version - - - - shows the PostgreSQL - functions that can be used to generate UUIDs. - - - - <acronym>UUID</acronym> Generation Functions - - - - - - Function - - - Description - - - Example(s) - - - - - - - - - - gen_random_uuid - uuid - - - uuidv4 - uuid - - - Generate a version 4 (random) UUID. - - - gen_random_uuid() - 5b30857f-0bfa-48b5-ac0b-5c64e28078d1 - - - uuidv4() - b42410ee-132f-42ee-9e4f-09a6485c95b8 - - - - - - - uuidv7 - ( shift interval ) - uuid - - - Generate a version 7 (time-ordered) UUID. The timestamp is computed using UNIX timestamp - with millisecond precision + sub-millisecond timestamp + random. The optional parameter - shift will shift the computed timestamp by the given interval. - - - uuidv7() - 019535d9-3df7-79fb-b466-fa907fa17f9e - - - - - -
- - - - The module provides additional functions that - implement other standard algorithms for generating UUIDs. - - - - - shows the PostgreSQL - functions that can be used to extract information from UUIDs. - - - - <acronym>UUID</acronym> Extraction Functions - - - - - - Function - - - Description - - - Example(s) - - - - - - - - - - uuid_extract_timestamp - ( uuid ) - timestamp with time zone - - - Extracts a timestamp with time zone from UUID - version 1 and 7. For other versions, this function returns null. Note that - the extracted timestamp is not necessarily exactly equal to the time the - UUID was generated; this depends on the implementation that generated the - UUID. - - - uuid_extract_timestamp('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) - 2025-02-23 21:46:24.503-05 - - - - - - - uuid_extract_version - ( uuid ) - smallint - - - Extracts the version from a UUID of the variant described by - RFC 9562. For - other variants, this function returns null. For example, for a UUID - generated by gen_random_uuid, this function will - return 4. - - - uuid_extract_version('41db1265-8bc1-4ab3-992f-&zwsp;885799a4af1d'::uuid) - 4 - - - uuid_extract_version('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) - 7 - - - - - -
- - - PostgreSQL also provides the usual comparison - operators shown in for - UUIDs. - - - See for details on the data type - uuid in PostgreSQL. - -
- - - - XML Functions - - - XML Functions - - - - The functions and function-like expressions described in this - section operate on values of type xml. See for information about the xml - type. The function-like expressions xmlparse - and xmlserialize for converting to and from - type xml are documented there, not in this section. - - - - Use of most of these functions - requires PostgreSQL to have been built - with configure --with-libxml. - - - - Producing XML Content - - - A set of functions and function-like expressions is available for - producing XML content from SQL data. As such, they are - particularly suitable for formatting query results into XML - documents for processing in client applications. - - - - <literal>xmltext</literal> - - - xmltext - - - -xmltext ( text ) xml - - - - The function xmltext returns an XML value with a single - text node containing the input argument as its content. Predefined entities - like ampersand (), left and right angle brackets - (]]>), and quotation marks () - are escaped. - - - - Example: -'); - xmltext -------------------------- - < foo & bar > -]]> - - - - - <literal>xmlcomment</literal> - - - xmlcomment - - - -xmlcomment ( text ) xml - - - - The function xmlcomment creates an XML value - containing an XML comment with the specified text as content. - The text cannot contain -- or end with a - -, otherwise the resulting construct - would not be a valid XML comment. - If the argument is null, the result is null. - - - - Example: - -]]> - - - - - <literal>xmlconcat</literal> - - - xmlconcat - - - -xmlconcat ( xml , ... ) xml - - - - The function xmlconcat concatenates a list - of individual XML values to create a single value containing an - XML content fragment. Null values are omitted; the result is - only null if there are no nonnull arguments. - - - - Example: -', 'foo'); - - xmlconcat ----------------------- - foo -]]> - - - - XML declarations, if present, are combined as follows. If all - argument values have the same XML version declaration, that - version is used in the result, else no version is used. If all - argument values have the standalone declaration value - yes, then that value is used in the result. If - all argument values have a standalone declaration value and at - least one is no, then that is used in the result. - Else the result will have no standalone declaration. If the - result is determined to require a standalone declaration but no - version declaration, a version declaration with version 1.0 will - be used because XML requires an XML declaration to contain a - version declaration. Encoding declarations are ignored and - removed in all cases. - - - - Example: -', ''); - - xmlconcat ------------------------------------ - -]]> - - - - - <literal>xmlelement</literal> - - - xmlelement - - - -xmlelement ( NAME name , XMLATTRIBUTES ( attvalue AS attname , ... ) , content , ... ) xml - - - - The xmlelement expression produces an XML - element with the given name, attributes, and content. - The name - and attname items shown in the syntax are - simple identifiers, not values. The attvalue - and content items are expressions, which can - yield any PostgreSQL data type. The - argument(s) within XMLATTRIBUTES generate attributes - of the XML element; the content value(s) are - concatenated to form its content. - - - - Examples: - - -SELECT xmlelement(name foo, xmlattributes('xyz' as bar)); - - xmlelement ------------------- - - -SELECT xmlelement(name foo, xmlattributes(current_date as bar), 'cont', 'ent'); - - xmlelement -------------------------------------- - content -]]> - - - - Element and attribute names that are not valid XML names are - escaped by replacing the offending characters by the sequence - _xHHHH_, where - HHHH is the character's Unicode - codepoint in hexadecimal notation. For example: - -]]> - - - - An explicit attribute name need not be specified if the attribute - value is a column reference, in which case the column's name will - be used as the attribute name by default. In other cases, the - attribute must be given an explicit name. So this example is - valid: - -CREATE TABLE test (a xml, b xml); -SELECT xmlelement(name test, xmlattributes(a, b)) FROM test; - - But these are not: - -SELECT xmlelement(name test, xmlattributes('constant'), a, b) FROM test; -SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test; - - - - - Element content, if specified, will be formatted according to - its data type. If the content is itself of type xml, - complex XML documents can be constructed. For example: - -]]> - - Content of other types will be formatted into valid XML character - data. This means in particular that the characters <, >, - and & will be converted to entities. Binary data (data type - bytea) will be represented in base64 or hex - encoding, depending on the setting of the configuration parameter - . The particular behavior for - individual data types is expected to evolve in order to align the - PostgreSQL mappings with those specified in SQL:2006 and later, - as discussed in . - - - - - <literal>xmlforest</literal> - - - xmlforest - - - -xmlforest ( content AS name , ... ) xml - - - - The xmlforest expression produces an XML - forest (sequence) of elements using the given names and content. - As for xmlelement, - each name must be a simple identifier, while - the content expressions can have any data - type. - - - - Examples: - -SELECT xmlforest('abc' AS foo, 123 AS bar); - - xmlforest ------------------------------- - <foo>abc</foo><bar>123</bar> - - -SELECT xmlforest(table_name, column_name) -FROM information_schema.columns -WHERE table_schema = 'pg_catalog'; - - xmlforest -------------------------------------&zwsp;----------------------------------- - <table_name>pg_authid</table_name>&zwsp;<column_name>rolname</column_name> - <table_name>pg_authid</table_name>&zwsp;<column_name>rolsuper</column_name> - ... - - - As seen in the second example, the element name can be omitted if - the content value is a column reference, in which case the column - name is used by default. Otherwise, a name must be specified. - - - - Element names that are not valid XML names are escaped as shown - for xmlelement above. Similarly, content - data is escaped to make valid XML content, unless it is already - of type xml. - - - - Note that XML forests are not valid XML documents if they consist - of more than one element, so it might be useful to wrap - xmlforest expressions in - xmlelement. - - - - - <literal>xmlpi</literal> - - - xmlpi - - - -xmlpi ( NAME name , content ) xml - - - - The xmlpi expression creates an XML - processing instruction. - As for xmlelement, - the name must be a simple identifier, while - the content expression can have any data type. - The content, if present, must not contain the - character sequence ?>. - - - - Example: - -]]> - - - - - <literal>xmlroot</literal> - - - xmlroot - - - -xmlroot ( xml, VERSION {text|NO VALUE} , STANDALONE {YES|NO|NO VALUE} ) xml - - - - The xmlroot expression alters the properties - of the root node of an XML value. If a version is specified, - it replaces the value in the root node's version declaration; if a - standalone setting is specified, it replaces the value in the - root node's standalone declaration. - - - -abc'), - version '1.0', standalone yes); - - xmlroot ----------------------------------------- - - abc -]]> - - - - - <literal>xmlagg</literal> - - - xmlagg - - - -xmlagg ( xml ) xml - - - - The function xmlagg is, unlike the other - functions described here, an aggregate function. It concatenates the - input values to the aggregate function call, - much like xmlconcat does, except that concatenation - occurs across rows rather than across expressions in a single row. - See for additional information - about aggregate functions. - - - - Example: -abc'); -INSERT INTO test VALUES (2, ''); -SELECT xmlagg(x) FROM test; - xmlagg ----------------------- - abc -]]> - - - - To determine the order of the concatenation, an ORDER BY - clause may be added to the aggregate call as described in - . For example: - -abc -]]> - - - - The following non-standard approach used to be recommended - in previous versions, and may still be useful in specific - cases: - -abc -]]> - - - - - - XML Predicates - - - The expressions described in this section check properties - of xml values. - - - - <literal>IS DOCUMENT</literal> - - - IS DOCUMENT - - - -xml IS DOCUMENT boolean - - - - The expression IS DOCUMENT returns true if the - argument XML value is a proper XML document, false if it is not - (that is, it is a content fragment), or null if the argument is - null. See about the difference - between documents and content fragments. - - - - - <literal>IS NOT DOCUMENT</literal> - - - IS NOT DOCUMENT - - - -xml IS NOT DOCUMENT boolean - - - - The expression IS NOT DOCUMENT returns false if the - argument XML value is a proper XML document, true if it is not (that is, - it is a content fragment), or null if the argument is null. - - - - - <literal>XMLEXISTS</literal> - - - XMLEXISTS - - - -XMLEXISTS ( text PASSING BY {REF|VALUE} xml BY {REF|VALUE} ) boolean - - - - The function xmlexists evaluates an XPath 1.0 - expression (the first argument), with the passed XML value as its context - item. The function returns false if the result of that evaluation - yields an empty node-set, true if it yields any other value. The - function returns null if any argument is null. A nonnull value - passed as the context item must be an XML document, not a content - fragment or any non-XML value. - - - - Example: - TorontoOttawa'); - - xmlexists ------------- - t -(1 row) -]]> - - - - The BY REF and BY VALUE clauses - are accepted in PostgreSQL, but are ignored, - as discussed in . - - - - In the SQL standard, the xmlexists function - evaluates an expression in the XML Query language, - but PostgreSQL allows only an XPath 1.0 - expression, as discussed in - . - - - - - <literal>xml_is_well_formed</literal> - - - xml_is_well_formed - - - - xml_is_well_formed_document - - - - xml_is_well_formed_content - - - -xml_is_well_formed ( text ) boolean -xml_is_well_formed_document ( text ) boolean -xml_is_well_formed_content ( text ) boolean - - - - These functions check whether a text string represents - well-formed XML, returning a Boolean result. - xml_is_well_formed_document checks for a well-formed - document, while xml_is_well_formed_content checks - for well-formed content. xml_is_well_formed does - the former if the configuration - parameter is set to DOCUMENT, or the latter if it is set to - CONTENT. This means that - xml_is_well_formed is useful for seeing whether - a simple cast to type xml will succeed, whereas the other two - functions are useful for seeing whether the corresponding variants of - XMLPARSE will succeed. - - - - Examples: - -'); - xml_is_well_formed --------------------- - f -(1 row) - -SELECT xml_is_well_formed(''); - xml_is_well_formed --------------------- - t -(1 row) - -SET xmloption TO CONTENT; -SELECT xml_is_well_formed('abc'); - xml_is_well_formed --------------------- - t -(1 row) - -SELECT xml_is_well_formed_document('bar'); - xml_is_well_formed_document ------------------------------ - t -(1 row) - -SELECT xml_is_well_formed_document('bar'); - xml_is_well_formed_document ------------------------------ - f -(1 row) -]]> - - The last example shows that the checks include whether - namespaces are correctly matched. - - - - - - Processing XML - - - To process values of data type xml, PostgreSQL offers - the functions xpath and - xpath_exists, which evaluate XPath 1.0 - expressions, and the XMLTABLE - table function. - - - - <literal>xpath</literal> - - - XPath - - - -xpath ( xpath text, xml xml , nsarray text[] ) xml[] - - - - The function xpath evaluates the XPath 1.0 - expression xpath (given as text) - against the XML value - xml. It returns an array of XML values - corresponding to the node-set produced by the XPath expression. - If the XPath expression returns a scalar value rather than a node-set, - a single-element array is returned. - - - - The second argument must be a well formed XML document. In particular, - it must have a single root node element. - - - - The optional third argument of the function is an array of namespace - mappings. This array should be a two-dimensional text array with - the length of the second axis being equal to 2 (i.e., it should be an - array of arrays, each of which consists of exactly 2 elements). - The first element of each array entry is the namespace name (alias), the - second the namespace URI. It is not required that aliases provided in - this array be the same as those being used in the XML document itself (in - other words, both in the XML document and in the xpath - function context, aliases are local). - - - - Example: -test', - ARRAY[ARRAY['my', 'http://example.com']]); - - xpath --------- - {test} -(1 row) -]]> - - - - To deal with default (anonymous) namespaces, do something like this: -test', - ARRAY[ARRAY['mydefns', 'http://example.com']]); - - xpath --------- - {test} -(1 row) -]]> - - - - - <literal>xpath_exists</literal> - - - xpath_exists - - - -xpath_exists ( xpath text, xml xml , nsarray text[] ) boolean - - - - The function xpath_exists is a specialized form - of the xpath function. Instead of returning the - individual XML values that satisfy the XPath 1.0 expression, this function - returns a Boolean indicating whether the query was satisfied or not - (specifically, whether it produced any value other than an empty node-set). - This function is equivalent to the XMLEXISTS predicate, - except that it also offers support for a namespace mapping argument. - - - - Example: -test', - ARRAY[ARRAY['my', 'http://example.com']]); - - xpath_exists --------------- - t -(1 row) -]]> - - - - - <literal>xmltable</literal> - - - xmltable - - - - table function - XMLTABLE - - - -XMLTABLE ( - XMLNAMESPACES ( namespace_uri AS namespace_name , ... ), - row_expression PASSING BY {REF|VALUE} document_expression BY {REF|VALUE} - COLUMNS name { type PATH column_expression DEFAULT default_expression NOT NULL | NULL - | FOR ORDINALITY } - , ... -) setof record - - - - The xmltable expression produces a table based - on an XML value, an XPath filter to extract rows, and a - set of column definitions. - Although it syntactically resembles a function, it can only appear - as a table in a query's FROM clause. - - - - The optional XMLNAMESPACES clause gives a - comma-separated list of namespace definitions, where - each namespace_uri is a text - expression and each namespace_name is a simple - identifier. It specifies the XML namespaces used in the document and - their aliases. A default namespace specification is not currently - supported. - - - - The required row_expression argument is an - XPath 1.0 expression (given as text) that is evaluated, - passing the XML value document_expression as - its context item, to obtain a set of XML nodes. These nodes are what - xmltable transforms into output rows. No rows - will be produced if the document_expression - is null, nor if the row_expression produces - an empty node-set or any value other than a node-set. - - - - document_expression provides the context - item for the row_expression. It must be a - well-formed XML document; fragments/forests are not accepted. - The BY REF and BY VALUE clauses - are accepted but ignored, as discussed in - . - - - - In the SQL standard, the xmltable function - evaluates expressions in the XML Query language, - but PostgreSQL allows only XPath 1.0 - expressions, as discussed in - . - - - - The required COLUMNS clause specifies the - column(s) that will be produced in the output table. - See the syntax summary above for the format. - A name is required for each column, as is a data type - (unless FOR ORDINALITY is specified, in which case - type integer is implicit). The path, default and - nullability clauses are optional. - - - - A column marked FOR ORDINALITY will be populated - with row numbers, starting with 1, in the order of nodes retrieved from - the row_expression's result node-set. - At most one column may be marked FOR ORDINALITY. - - - - - XPath 1.0 does not specify an order for nodes in a node-set, so code - that relies on a particular order of the results will be - implementation-dependent. Details can be found in - . - - - - - The column_expression for a column is an - XPath 1.0 expression that is evaluated for each row, with the current - node from the row_expression result as its - context item, to find the value of the column. If - no column_expression is given, then the - column name is used as an implicit path. - - - - If a column's XPath expression returns a non-XML value (which is limited - to string, boolean, or double in XPath 1.0) and the column has a - PostgreSQL type other than xml, the column will be set - as if by assigning the value's string representation to the PostgreSQL - type. (If the value is a boolean, its string representation is taken - to be 1 or 0 if the output - column's type category is numeric, otherwise true or - false.) - - - - If a column's XPath expression returns a non-empty set of XML nodes - and the column's PostgreSQL type is xml, the column will - be assigned the expression result exactly, if it is of document or - content form. - - - A result containing more than one element node at the top level, or - non-whitespace text outside of an element, is an example of content form. - An XPath result can be of neither form, for example if it returns an - attribute node selected from the element that contains it. Such a result - will be put into content form with each such disallowed node replaced by - its string value, as defined for the XPath 1.0 - string function. - - - - - - A non-XML result assigned to an xml output column produces - content, a single text node with the string value of the result. - An XML result assigned to a column of any other type may not have more than - one node, or an error is raised. If there is exactly one node, the column - will be set as if by assigning the node's string - value (as defined for the XPath 1.0 string function) - to the PostgreSQL type. - - - - The string value of an XML element is the concatenation, in document order, - of all text nodes contained in that element and its descendants. The string - value of an element with no descendant text nodes is an - empty string (not NULL). - Any xsi:nil attributes are ignored. - Note that the whitespace-only text() node between two non-text - elements is preserved, and that leading whitespace on a text() - node is not flattened. - The XPath 1.0 string function may be consulted for the - rules defining the string value of other XML node types and non-XML values. - - - - The conversion rules presented here are not exactly those of the SQL - standard, as discussed in . - - - - If the path expression returns an empty node-set - (typically, when it does not match) - for a given row, the column will be set to NULL, unless - a default_expression is specified; then the - value resulting from evaluating that expression is used. - - - - A default_expression, rather than being - evaluated immediately when xmltable is called, - is evaluated each time a default is needed for the column. - If the expression qualifies as stable or immutable, the repeat - evaluation may be skipped. - This means that you can usefully use volatile functions like - nextval in - default_expression. - - - - Columns may be marked NOT NULL. If the - column_expression for a NOT - NULL column does not match anything and there is - no DEFAULT or - the default_expression also evaluates to null, - an error is reported. - - - - Examples: - - - AU - Australia - - - JP - Japan - Shinzo Abe - 145935 - - - SG - Singapore - 697 - - -$$ AS data; - -SELECT xmltable.* - FROM xmldata, - XMLTABLE('//ROWS/ROW' - PASSING data - COLUMNS id int PATH '@id', - ordinality FOR ORDINALITY, - "COUNTRY_NAME" text, - country_id text PATH 'COUNTRY_ID', - size_sq_km float PATH 'SIZE[@unit = "sq_km"]', - size_other text PATH - 'concat(SIZE[@unit!="sq_km"], " ", SIZE[@unit!="sq_km"]/@unit)', - premier_name text PATH 'PREMIER_NAME' DEFAULT 'not specified'); - - id | ordinality | COUNTRY_NAME | country_id | size_sq_km | size_other | premier_name -----+------------+--------------+------------+------------+--------------+--------------- - 1 | 1 | Australia | AU | | | not specified - 5 | 2 | Japan | JP | | 145935 sq_mi | Shinzo Abe - 6 | 3 | Singapore | SG | 697 | | not specified -]]> - - The following example shows concatenation of multiple text() nodes, - usage of the column name as XPath filter, and the treatment of whitespace, - XML comments and processing instructions: - - - Hello2a2 bbbxxxCC - -$$ AS data; - -SELECT xmltable.* - FROM xmlelements, XMLTABLE('/root' PASSING data COLUMNS element text); - element -------------------------- - Hello2a2 bbbxxxCC -]]> - - - - The following example illustrates how - the XMLNAMESPACES clause can be used to specify - a list of namespaces - used in the XML document as well as in the XPath expressions: - - - - - -'::xml) -) -SELECT xmltable.* - FROM XMLTABLE(XMLNAMESPACES('http://example.com/myns' AS x, - 'http://example.com/b' AS "B"), - '/x:example/x:item' - PASSING (SELECT data FROM xmldata) - COLUMNS foo int PATH '@foo', - bar int PATH '@B:bar'); - foo | bar ------+----- - 1 | 2 - 3 | 4 - 4 | 5 -(3 rows) -]]> - - - - - - Mapping Tables to XML - - - XML export - - - - The following functions map the contents of relational tables to - XML values. They can be thought of as XML export functionality: - -table_to_xml ( table regclass, nulls boolean, - tableforest boolean, targetns text ) xml -query_to_xml ( query text, nulls boolean, - tableforest boolean, targetns text ) xml -cursor_to_xml ( cursor refcursor, count integer, nulls boolean, - tableforest boolean, targetns text ) xml - - - - - table_to_xml maps the content of the named - table, passed as parameter table. The - regclass type accepts strings identifying tables using the - usual notation, including optional schema qualification and - double quotes (see for details). - query_to_xml executes the - query whose text is passed as parameter - query and maps the result set. - cursor_to_xml fetches the indicated number of - rows from the cursor specified by the parameter - cursor. This variant is recommended if - large tables have to be mapped, because the result value is built - up in memory by each function. - - - - If tableforest is false, then the resulting - XML document looks like this: - - - data - data - - - - ... - - - ... - -]]> - - If tableforest is true, the result is an - XML content fragment that looks like this: - - data - data - - - - ... - - -... -]]> - - If no table name is available, that is, when mapping a query or a - cursor, the string table is used in the first - format, row in the second format. - - - - The choice between these formats is up to the user. The first - format is a proper XML document, which will be important in many - applications. The second format tends to be more useful in the - cursor_to_xml function if the result values are to be - reassembled into one document later on. The functions for - producing XML content discussed above, in particular - xmlelement, can be used to alter the results - to taste. - - - - The data values are mapped in the same way as described for the - function xmlelement above. - - - - The parameter nulls determines whether null - values should be included in the output. If true, null values in - columns are represented as: - -]]> - where xsi is the XML namespace prefix for XML - Schema Instance. An appropriate namespace declaration will be - added to the result value. If false, columns containing null - values are simply omitted from the output. - - - - The parameter targetns specifies the - desired XML namespace of the result. If no particular namespace - is wanted, an empty string should be passed. - - - - The following functions return XML Schema documents describing the - mappings performed by the corresponding functions above: - -table_to_xmlschema ( table regclass, nulls boolean, - tableforest boolean, targetns text ) xml -query_to_xmlschema ( query text, nulls boolean, - tableforest boolean, targetns text ) xml -cursor_to_xmlschema ( cursor refcursor, nulls boolean, - tableforest boolean, targetns text ) xml - - It is essential that the same parameters are passed in order to - obtain matching XML data mappings and XML Schema documents. - - - - The following functions produce XML data mappings and the - corresponding XML Schema in one document (or forest), linked - together. They can be useful where self-contained and - self-describing results are wanted: - -table_to_xml_and_xmlschema ( table regclass, nulls boolean, - tableforest boolean, targetns text ) xml -query_to_xml_and_xmlschema ( query text, nulls boolean, - tableforest boolean, targetns text ) xml - - - - - In addition, the following functions are available to produce - analogous mappings of entire schemas or the entire current - database: - -schema_to_xml ( schema name, nulls boolean, - tableforest boolean, targetns text ) xml -schema_to_xmlschema ( schema name, nulls boolean, - tableforest boolean, targetns text ) xml -schema_to_xml_and_xmlschema ( schema name, nulls boolean, - tableforest boolean, targetns text ) xml - -database_to_xml ( nulls boolean, - tableforest boolean, targetns text ) xml -database_to_xmlschema ( nulls boolean, - tableforest boolean, targetns text ) xml -database_to_xml_and_xmlschema ( nulls boolean, - tableforest boolean, targetns text ) xml - - - These functions ignore tables that are not readable by the current user. - The database-wide functions additionally ignore schemas that the current - user does not have USAGE (lookup) privilege for. - - - - Note that these potentially produce a lot of data, which needs to - be built up in memory. When requesting content mappings of large - schemas or databases, it might be worthwhile to consider mapping the - tables separately instead, possibly even through a cursor. - - - - The result of a schema content mapping looks like this: - - - -table1-mapping - -table2-mapping - -... - -]]> - - where the format of a table mapping depends on the - tableforest parameter as explained above. - - - - The result of a database content mapping looks like this: - - - - - ... - - - - ... - - -... - -]]> - - where the schema mapping is as above. - - - - As an example of using the output produced by these functions, - shows an XSLT stylesheet that - converts the output of - table_to_xml_and_xmlschema to an HTML - document containing a tabular rendition of the table data. In a - similar manner, the results from these functions can be - converted into other XML-based formats. - - - - XSLT Stylesheet for Converting SQL/XML Output to HTML - - - - - - - - - - - - - <xsl:value-of select="name(current())"/> - - - - - - - - - - - - - - - - -
- - -
- -
-]]>
-
-
-
- - - JSON Functions and Operators - - - JSON - functions and operators - - - SQL/JSON - functions and expressions - - - - This section describes: - - - - - functions and operators for processing and creating JSON data - - - - - the SQL/JSON path language - - - - - the SQL/JSON query functions - - - - - - - To provide native support for JSON data types within the SQL environment, - PostgreSQL implements the - SQL/JSON data model. - This model comprises sequences of items. Each item can hold SQL scalar - values, with an additional SQL/JSON null value, and composite data structures - that use JSON arrays and objects. The model is a formalization of the implied - data model in the JSON specification - RFC 7159. - - - - SQL/JSON allows you to handle JSON data alongside regular SQL data, - with transaction support, including: - - - - - Uploading JSON data into the database and storing it in - regular SQL columns as character or binary strings. - - - - - Generating JSON objects and arrays from relational data. - - - - - Querying JSON data using SQL/JSON query functions and - SQL/JSON path language expressions. - - - - - - - To learn more about the SQL/JSON standard, see - . For details on JSON types - supported in PostgreSQL, - see . - - - - Processing and Creating JSON Data - - - shows the operators that - are available for use with JSON data types (see ). - In addition, the usual comparison operators shown in are available for - jsonb, though not for json. The comparison - operators follow the ordering rules for B-tree operations outlined in - . - See also for the aggregate - function json_agg which aggregates record - values as JSON, the aggregate function - json_object_agg which aggregates pairs of values - into a JSON object, and their jsonb equivalents, - jsonb_agg and jsonb_object_agg. - - - - <type>json</type> and <type>jsonb</type> Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - json -> integer - json - - - jsonb -> integer - jsonb - - - Extracts n'th element of JSON array - (array elements are indexed from zero, but negative integers count - from the end). - - - '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> 2 - {"c":"baz"} - - - '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> -3 - {"a":"foo"} - - - - - - json -> text - json - - - jsonb -> text - jsonb - - - Extracts JSON object field with the given key. - - - '{"a": {"b":"foo"}}'::json -> 'a' - {"b":"foo"} - - - - - - json ->> integer - text - - - jsonb ->> integer - text - - - Extracts n'th element of JSON array, - as text. - - - '[1,2,3]'::json ->> 2 - 3 - - - - - - json ->> text - text - - - jsonb ->> text - text - - - Extracts JSON object field with the given key, as text. - - - '{"a":1,"b":2}'::json ->> 'b' - 2 - - - - - - json #> text[] - json - - - jsonb #> text[] - jsonb - - - Extracts JSON sub-object at the specified path, where path elements - can be either field keys or array indexes. - - - '{"a": {"b": ["foo","bar"]}}'::json #> '{a,b,1}' - "bar" - - - - - - json #>> text[] - text - - - jsonb #>> text[] - text - - - Extracts JSON sub-object at the specified path as text. - - - '{"a": {"b": ["foo","bar"]}}'::json #>> '{a,b,1}' - bar - - - - -
- - - - The field/element/path extraction operators return NULL, rather than - failing, if the JSON input does not have the right structure to match - the request; for example if no such key or array element exists. - - - - - Some further operators exist only for jsonb, as shown - in . - - describes how these operators can be used to effectively search indexed - jsonb data. - - - - Additional <type>jsonb</type> Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - jsonb @> jsonb - boolean - - - Does the first JSON value contain the second? - (See for details about containment.) - - - '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb - t - - - - - - jsonb <@ jsonb - boolean - - - Is the first JSON value contained in the second? - - - '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb - t - - - - - - jsonb ? text - boolean - - - Does the text string exist as a top-level key or array element within - the JSON value? - - - '{"a":1, "b":2}'::jsonb ? 'b' - t - - - '["a", "b", "c"]'::jsonb ? 'b' - t - - - - - - jsonb ?| text[] - boolean - - - Do any of the strings in the text array exist as top-level keys or - array elements? - - - '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] - t - - - - - - jsonb ?& text[] - boolean - - - Do all of the strings in the text array exist as top-level keys or - array elements? - - - '["a", "b", "c"]'::jsonb ?& array['a', 'b'] - t - - - - - - jsonb || jsonb - jsonb - - - Concatenates two jsonb values. - Concatenating two arrays generates an array containing all the - elements of each input. Concatenating two objects generates an - object containing the union of their - keys, taking the second object's value when there are duplicate keys. - All other cases are treated by converting a non-array input into a - single-element array, and then proceeding as for two arrays. - Does not operate recursively: only the top-level array or object - structure is merged. - - - '["a", "b"]'::jsonb || '["a", "d"]'::jsonb - ["a", "b", "a", "d"] - - - '{"a": "b"}'::jsonb || '{"c": "d"}'::jsonb - {"a": "b", "c": "d"} - - - '[1, 2]'::jsonb || '3'::jsonb - [1, 2, 3] - - - '{"a": "b"}'::jsonb || '42'::jsonb - [{"a": "b"}, 42] - - - To append an array to another array as a single entry, wrap it - in an additional layer of array, for example: - - - '[1, 2]'::jsonb || jsonb_build_array('[3, 4]'::jsonb) - [1, 2, [3, 4]] - - - - - - jsonb - text - jsonb - - - Deletes a key (and its value) from a JSON object, or matching string - value(s) from a JSON array. - - - '{"a": "b", "c": "d"}'::jsonb - 'a' - {"c": "d"} - - - '["a", "b", "c", "b"]'::jsonb - 'b' - ["a", "c"] - - - - - - jsonb - text[] - jsonb - - - Deletes all matching keys or array elements from the left operand. - - - '{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[] - {} - - - - - - jsonb - integer - jsonb - - - Deletes the array element with specified index (negative - integers count from the end). Throws an error if JSON value - is not an array. - - - '["a", "b"]'::jsonb - 1 - ["a"] - - - - - - jsonb #- text[] - jsonb - - - Deletes the field or array element at the specified path, where path - elements can be either field keys or array indexes. - - - '["a", {"b":1}]'::jsonb #- '{1,b}' - ["a", {}] - - - - - - jsonb @? jsonpath - boolean - - - Does JSON path return any item for the specified JSON value? - (This is useful only with SQL-standard JSON path expressions, not - predicate check - expressions, since those always return a value.) - - - '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] ? (@ > 2)' - t - - - - - - jsonb @@ jsonpath - boolean - - - Returns the result of a JSON path predicate check for the - specified JSON value. - (This is useful only - with predicate - check expressions, not SQL-standard JSON path expressions, - since it will return NULL if the path result is - not a single boolean value.) - - - '{"a":[1,2,3,4,5]}'::jsonb @@ '$.a[*] > 2' - t - - - - -
- - - - The jsonpath operators @? - and @@ suppress the following errors: missing object - field or array element, unexpected JSON item type, datetime and numeric - errors. The jsonpath-related functions described below can - also be told to suppress these types of errors. This behavior might be - helpful when searching JSON document collections of varying structure. - - - - - shows the functions that are - available for constructing json and jsonb values. - Some functions in this table have a RETURNING clause, - which specifies the data type returned. It must be one of json, - jsonb, bytea, a character string type (text, - char, or varchar), or a type - that can be cast to json. - By default, the json type is returned. - - - - JSON Creation Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - to_json - - to_json ( anyelement ) - json - - - - to_jsonb - - to_jsonb ( anyelement ) - jsonb - - - Converts any SQL value to json or jsonb. - Arrays and composites are converted recursively to arrays and - objects (multidimensional arrays become arrays of arrays in JSON). - Otherwise, if there is a cast from the SQL data type - to json, the cast function will be used to perform the - conversion; - - For example, the extension has a cast - from hstore to json, so that - hstore values converted via the JSON creation functions - will be represented as JSON objects, not as primitive string values. - - - otherwise, a scalar JSON value is produced. For any scalar other than - a number, a Boolean, or a null value, the text representation will be - used, with escaping as necessary to make it a valid JSON string value. - - - to_json('Fred said "Hi."'::text) - "Fred said \"Hi.\"" - - - to_jsonb(row(42, 'Fred said "Hi."'::text)) - {"f1": 42, "f2": "Fred said \"Hi.\""} - - - - - - - array_to_json - - array_to_json ( anyarray , boolean ) - json - - - Converts an SQL array to a JSON array. The behavior is the same - as to_json except that line feeds will be added - between top-level array elements if the optional boolean parameter is - true. - - - array_to_json('{{1,5},{99,100}}'::int[]) - [[1,5],[99,100]] - - - - - - - json_array - json_array ( - { value_expression FORMAT JSON } , ... - { NULL | ABSENT } ON NULL - RETURNING data_type FORMAT JSON ENCODING UTF8 ) - - - json_array ( - query_expression - RETURNING data_type FORMAT JSON ENCODING UTF8 ) - - - Constructs a JSON array from either a series of - value_expression parameters or from the results - of query_expression, - which must be a SELECT query returning a single column. If - ABSENT ON NULL is specified, NULL values are ignored. - This is always the case if a - query_expression is used. - - - json_array(1,true,json '{"a":null}') - [1, true, {"a":null}] - - - json_array(SELECT * FROM (VALUES(1),(2)) t) - [1, 2] - - - - - - - row_to_json - - row_to_json ( record , boolean ) - json - - - Converts an SQL composite value to a JSON object. The behavior is the - same as to_json except that line feeds will be - added between top-level elements if the optional boolean parameter is - true. - - - row_to_json(row(1,'foo')) - {"f1":1,"f2":"foo"} - - - - - - - json_build_array - - json_build_array ( VARIADIC "any" ) - json - - - - jsonb_build_array - - jsonb_build_array ( VARIADIC "any" ) - jsonb - - - Builds a possibly-heterogeneously-typed JSON array out of a variadic - argument list. Each argument is converted as - per to_json or to_jsonb. - - - json_build_array(1, 2, 'foo', 4, 5) - [1, 2, "foo", 4, 5] - - - - - - - json_build_object - - json_build_object ( VARIADIC "any" ) - json - - - - jsonb_build_object - - jsonb_build_object ( VARIADIC "any" ) - jsonb - - - Builds a JSON object out of a variadic argument list. By convention, - the argument list consists of alternating keys and values. Key - arguments are coerced to text; value arguments are converted as - per to_json or to_jsonb. - - - json_build_object('foo', 1, 2, row(3,'bar')) - {"foo" : 1, "2" : {"f1":3,"f2":"bar"}} - - - - - - json_object - json_object ( - { key_expression { VALUE | ':' } - value_expression FORMAT JSON ENCODING UTF8 }, ... - { NULL | ABSENT } ON NULL - { WITH | WITHOUT } UNIQUE KEYS - RETURNING data_type FORMAT JSON ENCODING UTF8 ) - - - Constructs a JSON object of all the key/value pairs given, - or an empty object if none are given. - key_expression is a scalar expression - defining the JSON key, which is - converted to the text type. - It cannot be NULL nor can it - belong to a type that has a cast to the json type. - If WITH UNIQUE KEYS is specified, there must not - be any duplicate key_expression. - Any pair for which the value_expression - evaluates to NULL is omitted from the output - if ABSENT ON NULL is specified; - if NULL ON NULL is specified or the clause - omitted, the key is included with value NULL. - - - json_object('code' VALUE 'P123', 'title': 'Jaws') - {"code" : "P123", "title" : "Jaws"} - - - - - - - json_object - - json_object ( text[] ) - json - - - - jsonb_object - - jsonb_object ( text[] ) - jsonb - - - Builds a JSON object out of a text array. The array must have either - exactly one dimension with an even number of members, in which case - they are taken as alternating key/value pairs, or two dimensions - such that each inner array has exactly two elements, which - are taken as a key/value pair. All values are converted to JSON - strings. - - - json_object('{a, 1, b, "def", c, 3.5}') - {"a" : "1", "b" : "def", "c" : "3.5"} - - json_object('{{a, 1}, {b, "def"}, {c, 3.5}}') - {"a" : "1", "b" : "def", "c" : "3.5"} - - - - - - json_object ( keys text[], values text[] ) - json - - - jsonb_object ( keys text[], values text[] ) - jsonb - - - This form of json_object takes keys and values - pairwise from separate text arrays. Otherwise it is identical to - the one-argument form. - - - json_object('{a,b}', '{1,2}') - {"a": "1", "b": "2"} - - - - - - json constructor - json ( - expression - FORMAT JSON ENCODING UTF8 - { WITH | WITHOUT } UNIQUE KEYS ) - json - - - Converts a given expression specified as text or - bytea string (in UTF8 encoding) into a JSON - value. If expression is NULL, an - SQL null value is returned. - If WITH UNIQUE is specified, the - expression must not contain any duplicate - object keys. - - - json('{"a":123, "b":[true,"foo"], "a":"bar"}') - {"a":123, "b":[true,"foo"], "a":"bar"} - - - - - - - json_scalar - json_scalar ( expression ) - - - Converts a given SQL scalar value into a JSON scalar value. - If the input is NULL, an SQL null is returned. If - the input is number or a boolean value, a corresponding JSON number - or boolean value is returned. For any other value, a JSON string is - returned. - - - json_scalar(123.45) - 123.45 - - - json_scalar(CURRENT_TIMESTAMP) - "2022-05-10T10:51:04.62128-04:00" - - - - - - json_serialize ( - expression FORMAT JSON ENCODING UTF8 - RETURNING data_type FORMAT JSON ENCODING UTF8 ) - - - Converts an SQL/JSON expression into a character or binary string. The - expression can be of any JSON type, any - character string type, or bytea in UTF8 encoding. - The returned type used in RETURNING can be any - character string type or bytea. The default is - text. - - - json_serialize('{ "a" : 1 } ' RETURNING bytea) - \x7b20226122203a2031207d20 - - - - -
- - - details SQL/JSON - facilities for testing JSON. - - - - SQL/JSON Testing Functions - - - - - Function signature - - - Description - - - Example(s) - - - - - - - IS JSON - expression IS NOT JSON - { VALUE | SCALAR | ARRAY | OBJECT } - { WITH | WITHOUT } UNIQUE KEYS - - - This predicate tests whether expression can be - parsed as JSON, possibly of a specified type. - If SCALAR or ARRAY or - OBJECT is specified, the - test is whether or not the JSON is of that particular type. If - WITH UNIQUE KEYS is specified, then any object in the - expression is also tested to see if it - has duplicate keys. - - - -SELECT js, - js IS JSON "json?", - js IS JSON SCALAR "scalar?", - js IS JSON OBJECT "object?", - js IS JSON ARRAY "array?" -FROM (VALUES - ('123'), ('"abc"'), ('{"a": "b"}'), ('[1,2]'),('abc')) foo(js); - js | json? | scalar? | object? | array? -------------+-------+---------+---------+-------- - 123 | t | t | f | f - "abc" | t | t | f | f - {"a": "b"} | t | f | t | f - [1,2] | t | f | f | t - abc | f | f | f | f - - - - -SELECT js, - js IS JSON OBJECT "object?", - js IS JSON ARRAY "array?", - js IS JSON ARRAY WITH UNIQUE KEYS "array w. UK?", - js IS JSON ARRAY WITHOUT UNIQUE KEYS "array w/o UK?" -FROM (VALUES ('[{"a":"1"}, - {"b":"2","b":"3"}]')) foo(js); --[ RECORD 1 ]-+-------------------- -js | [{"a":"1"}, + - | {"b":"2","b":"3"}] -object? | f -array? | t -array w. UK? | f -array w/o UK? | t - - - - - -
- - - shows the functions that - are available for processing json and jsonb values. - - - - JSON Processing Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - json_array_elements - - json_array_elements ( json ) - setof json - - - - jsonb_array_elements - - jsonb_array_elements ( jsonb ) - setof jsonb - - - Expands the top-level JSON array into a set of JSON values. - - - select * from json_array_elements('[1,true, [2,false]]') - - - value ------------ - 1 - true - [2,false] - - - - - - - - json_array_elements_text - - json_array_elements_text ( json ) - setof text - - - - jsonb_array_elements_text - - jsonb_array_elements_text ( jsonb ) - setof text - - - Expands the top-level JSON array into a set of text values. - - - select * from json_array_elements_text('["foo", "bar"]') - - - value ------------ - foo - bar - - - - - - - - json_array_length - - json_array_length ( json ) - integer - - - - jsonb_array_length - - jsonb_array_length ( jsonb ) - integer - - - Returns the number of elements in the top-level JSON array. - - - json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]') - 5 - - - jsonb_array_length('[]') - 0 - - - - - - - json_each - - json_each ( json ) - setof record - ( key text, - value json ) - - - - jsonb_each - - jsonb_each ( jsonb ) - setof record - ( key text, - value jsonb ) - - - Expands the top-level JSON object into a set of key/value pairs. - - - select * from json_each('{"a":"foo", "b":"bar"}') - - - key | value ------+------- - a | "foo" - b | "bar" - - - - - - - - json_each_text - - json_each_text ( json ) - setof record - ( key text, - value text ) - - - - jsonb_each_text - - jsonb_each_text ( jsonb ) - setof record - ( key text, - value text ) - - - Expands the top-level JSON object into a set of key/value pairs. - The returned values will be of - type text. - - - select * from json_each_text('{"a":"foo", "b":"bar"}') - - - key | value ------+------- - a | foo - b | bar - - - - - - - - json_extract_path - - json_extract_path ( from_json json, VARIADIC path_elems text[] ) - json - - - - jsonb_extract_path - - jsonb_extract_path ( from_json jsonb, VARIADIC path_elems text[] ) - jsonb - - - Extracts JSON sub-object at the specified path. - (This is functionally equivalent to the #> - operator, but writing the path out as a variadic list can be more - convenient in some cases.) - - - json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}', 'f4', 'f6') - "foo" - - - - - - - json_extract_path_text - - json_extract_path_text ( from_json json, VARIADIC path_elems text[] ) - text - - - - jsonb_extract_path_text - - jsonb_extract_path_text ( from_json jsonb, VARIADIC path_elems text[] ) - text - - - Extracts JSON sub-object at the specified path as text. - (This is functionally equivalent to the #>> - operator.) - - - json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}', 'f4', 'f6') - foo - - - - - - - json_object_keys - - json_object_keys ( json ) - setof text - - - - jsonb_object_keys - - jsonb_object_keys ( jsonb ) - setof text - - - Returns the set of keys in the top-level JSON object. - - - select * from json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') - - - json_object_keys ------------------- - f1 - f2 - - - - - - - - json_populate_record - - json_populate_record ( base anyelement, from_json json ) - anyelement - - - - jsonb_populate_record - - jsonb_populate_record ( base anyelement, from_json jsonb ) - anyelement - - - Expands the top-level JSON object to a row having the composite type - of the base argument. The JSON object - is scanned for fields whose names match column names of the output row - type, and their values are inserted into those columns of the output. - (Fields that do not correspond to any output column name are ignored.) - In typical use, the value of base is just - NULL, which means that any output columns that do - not match any object field will be filled with nulls. However, - if base isn't NULL then - the values it contains will be used for unmatched columns. - - - To convert a JSON value to the SQL type of an output column, the - following rules are applied in sequence: - - - - A JSON null value is converted to an SQL null in all cases. - - - - - If the output column is of type json - or jsonb, the JSON value is just reproduced exactly. - - - - - If the output column is a composite (row) type, and the JSON value - is a JSON object, the fields of the object are converted to columns - of the output row type by recursive application of these rules. - - - - - Likewise, if the output column is an array type and the JSON value - is a JSON array, the elements of the JSON array are converted to - elements of the output array by recursive application of these - rules. - - - - - Otherwise, if the JSON value is a string, the contents of the - string are fed to the input conversion function for the column's - data type. - - - - - Otherwise, the ordinary text representation of the JSON value is - fed to the input conversion function for the column's data type. - - - - - - While the example below uses a constant JSON value, typical use would - be to reference a json or jsonb column - laterally from another table in the query's FROM - clause. Writing json_populate_record in - the FROM clause is good practice, since all of the - extracted columns are available for use without duplicate function - calls. - - - create type subrowtype as (d int, e text); - create type myrowtype as (a int, b text[], c subrowtype); - - - select * from json_populate_record(null::myrowtype, - '{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "a b c"}, "x": "foo"}') - - - a | b | c ----+-----------+------------- - 1 | {2,"a b"} | (4,"a b c") - - - - - - - - jsonb_populate_record_valid - - jsonb_populate_record_valid ( base anyelement, from_json json ) - boolean - - - Function for testing jsonb_populate_record. Returns - true if the input jsonb_populate_record - would finish without an error for the given input JSON object; that is, it's - valid input, false otherwise. - - - create type jsb_char2 as (a char(2)); - - - select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aaa"}'); - - - jsonb_populate_record_valid ------------------------------ - f -(1 row) - - - select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aaa"}') q; - - -ERROR: value too long for type character(2) - - select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aa"}'); - - - jsonb_populate_record_valid ------------------------------ - t -(1 row) - - - select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aa"}') q; - - - a ----- - aa -(1 row) - - - - - - - - json_populate_recordset - - json_populate_recordset ( base anyelement, from_json json ) - setof anyelement - - - - jsonb_populate_recordset - - jsonb_populate_recordset ( base anyelement, from_json jsonb ) - setof anyelement - - - Expands the top-level JSON array of objects to a set of rows having - the composite type of the base argument. - Each element of the JSON array is processed as described above - for json[b]_populate_record. - - - create type twoints as (a int, b int); - - - select * from json_populate_recordset(null::twoints, '[{"a":1,"b":2}, {"a":3,"b":4}]') - - - a | b ----+--- - 1 | 2 - 3 | 4 - - - - - - - - json_to_record - - json_to_record ( json ) - record - - - - jsonb_to_record - - jsonb_to_record ( jsonb ) - record - - - Expands the top-level JSON object to a row having the composite type - defined by an AS clause. (As with all functions - returning record, the calling query must explicitly - define the structure of the record with an AS - clause.) The output record is filled from fields of the JSON object, - in the same way as described above - for json[b]_populate_record. Since there is no - input record value, unmatched columns are always filled with nulls. - - - create type myrowtype as (a int, b text); - - - select * from json_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int, b text, c int[], d text, r myrowtype) - - - a | b | c | d | r ----+---------+---------+---+--------------- - 1 | [1,2,3] | {1,2,3} | | (123,"a b c") - - - - - - - - json_to_recordset - - json_to_recordset ( json ) - setof record - - - - jsonb_to_recordset - - jsonb_to_recordset ( jsonb ) - setof record - - - Expands the top-level JSON array of objects to a set of rows having - the composite type defined by an AS clause. (As - with all functions returning record, the calling query - must explicitly define the structure of the record with - an AS clause.) Each element of the JSON array is - processed as described above - for json[b]_populate_record. - - - select * from json_to_recordset('[{"a":1,"b":"foo"}, {"a":"2","c":"bar"}]') as x(a int, b text) - - - a | b ----+----- - 1 | foo - 2 | - - - - - - - - jsonb_set - - jsonb_set ( target jsonb, path text[], new_value jsonb , create_if_missing boolean ) - jsonb - - - Returns target - with the item designated by path - replaced by new_value, or with - new_value added if - create_if_missing is true (which is the - default) and the item designated by path - does not exist. - All earlier steps in the path must exist, or - the target is returned unchanged. - As with the path oriented operators, negative integers that - appear in the path count from the end - of JSON arrays. - If the last path step is an array index that is out of range, - and create_if_missing is true, the new - value is added at the beginning of the array if the index is negative, - or at the end of the array if it is positive. - - - jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}', '[2,3,4]', false) - [{"f1": [2, 3, 4], "f2": null}, 2, null, 3] - - - jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}', '[2,3,4]') - [{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2] - - - - - - - jsonb_set_lax - - jsonb_set_lax ( target jsonb, path text[], new_value jsonb , create_if_missing boolean , null_value_treatment text ) - jsonb - - - If new_value is not NULL, - behaves identically to jsonb_set. Otherwise behaves - according to the value - of null_value_treatment which must be one - of 'raise_exception', - 'use_json_null', 'delete_key', or - 'return_target'. The default is - 'use_json_null'. - - - jsonb_set_lax('[{"f1":1,"f2":null},2,null,3]', '{0,f1}', null) - [{"f1": null, "f2": null}, 2, null, 3] - - - jsonb_set_lax('[{"f1":99,"f2":null},2]', '{0,f3}', null, true, 'return_target') - [{"f1": 99, "f2": null}, 2] - - - - - - - jsonb_insert - - jsonb_insert ( target jsonb, path text[], new_value jsonb , insert_after boolean ) - jsonb - - - Returns target - with new_value inserted. If the item - designated by the path is an array - element, new_value will be inserted before - that item if insert_after is false (which - is the default), or after it - if insert_after is true. If the item - designated by the path is an object - field, new_value will be inserted only if - the object does not already contain that key. - All earlier steps in the path must exist, or - the target is returned unchanged. - As with the path oriented operators, negative integers that - appear in the path count from the end - of JSON arrays. - If the last path step is an array index that is out of range, the new - value is added at the beginning of the array if the index is negative, - or at the end of the array if it is positive. - - - jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"') - {"a": [0, "new_value", 1, 2]} - - - jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"', true) - {"a": [0, 1, "new_value", 2]} - - - - - - - json_strip_nulls - - json_strip_nulls ( target json ,strip_in_arrays boolean ) - json - - - - jsonb_strip_nulls - - jsonb_strip_nulls ( target jsonb ,strip_in_arrays boolean ) - jsonb - - - Deletes all object fields that have null values from the given JSON - value, recursively. - If strip_in_arrays is true (the default is false), - null array elements are also stripped. - Otherwise they are not stripped. Bare null values are never stripped. - - - json_strip_nulls('[{"f1":1, "f2":null}, 2, null, 3]') - [{"f1":1},2,null,3] - - - jsonb_strip_nulls('[1,2,null,3,4]', true); - [1,2,3,4] - - - - - - - - jsonb_path_exists - - jsonb_path_exists ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - boolean - - - Checks whether the JSON path returns any item for the specified JSON - value. - (This is useful only with SQL-standard JSON path expressions, not - predicate check - expressions, since those always return a value.) - If the vars argument is specified, it must - be a JSON object, and its fields provide named values to be - substituted into the jsonpath expression. - If the silent argument is specified and - is true, the function suppresses the same errors - as the @? and @@ operators do. - - - jsonb_path_exists('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') - t - - - - - - - jsonb_path_match - - jsonb_path_match ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - boolean - - - Returns the SQL boolean result of a JSON path predicate check - for the specified JSON value. - (This is useful only - with predicate - check expressions, not SQL-standard JSON path expressions, - since it will either fail or return NULL if the - path result is not a single boolean value.) - The optional vars - and silent arguments act the same as - for jsonb_path_exists. - - - jsonb_path_match('{"a":[1,2,3,4,5]}', 'exists($.a[*] ? (@ >= $min && @ <= $max))', '{"min":2, "max":4}') - t - - - - - - - jsonb_path_query - - jsonb_path_query ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - setof jsonb - - - Returns all JSON items returned by the JSON path for the specified - JSON value. - For SQL-standard JSON path expressions it returns the JSON - values selected from target. - For predicate - check expressions it returns the result of the predicate - check: true, false, - or null. - The optional vars - and silent arguments act the same as - for jsonb_path_exists. - - - select * from jsonb_path_query('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') - - - jsonb_path_query ------------------- - 2 - 3 - 4 - - - - - - - - jsonb_path_query_array - - jsonb_path_query_array ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - jsonb - - - Returns all JSON items returned by the JSON path for the specified - JSON value, as a JSON array. - The parameters are the same as - for jsonb_path_query. - - - jsonb_path_query_array('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') - [2, 3, 4] - - - - - - - jsonb_path_query_first - - jsonb_path_query_first ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - jsonb - - - Returns the first JSON item returned by the JSON path for the - specified JSON value, or NULL if there are no - results. - The parameters are the same as - for jsonb_path_query. - - - jsonb_path_query_first('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') - 2 - - - - - - - jsonb_path_exists_tz - - jsonb_path_exists_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - boolean - - - - jsonb_path_match_tz - - jsonb_path_match_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - boolean - - - - jsonb_path_query_tz - - jsonb_path_query_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - setof jsonb - - - - jsonb_path_query_array_tz - - jsonb_path_query_array_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - jsonb - - - - jsonb_path_query_first_tz - - jsonb_path_query_first_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) - jsonb - - - These functions act like their counterparts described above without - the _tz suffix, except that these functions support - comparisons of date/time values that require timezone-aware - conversions. The example below requires interpretation of the - date-only value 2015-08-02 as a timestamp with time - zone, so the result depends on the current - setting. Due to this dependency, these - functions are marked as stable, which means these functions cannot be - used in indexes. Their counterparts are immutable, and so can be used - in indexes; but they will throw errors if asked to make such - comparisons. - - - jsonb_path_exists_tz('["2015-08-01 12:00:00-05"]', '$[*] ? (@.datetime() < "2015-08-02".datetime())') - t - - - - - - - jsonb_pretty - - jsonb_pretty ( jsonb ) - text - - - Converts the given JSON value to pretty-printed, indented text. - - - jsonb_pretty('[{"f1":1,"f2":null}, 2]') - - -[ - { - "f1": 1, - "f2": null - }, - 2 -] - - - - - - - - json_typeof - - json_typeof ( json ) - text - - - - jsonb_typeof - - jsonb_typeof ( jsonb ) - text - - - Returns the type of the top-level JSON value as a text string. - Possible types are - object, array, - string, number, - boolean, and null. - (The null result should not be confused - with an SQL NULL; see the examples.) - - - json_typeof('-123.4') - number - - - json_typeof('null'::json) - null - - - json_typeof(NULL::json) IS NULL - t - - - - -
-
- - - The SQL/JSON Path Language - - - SQL/JSON path language - - - - SQL/JSON path expressions specify item(s) to be retrieved - from a JSON value, similarly to XPath expressions used - for access to XML content. In PostgreSQL, - path expressions are implemented as the jsonpath - data type and can use any elements described in - . - - - - JSON query functions and operators - pass the provided path expression to the path engine - for evaluation. If the expression matches the queried JSON data, - the corresponding JSON item, or set of items, is returned. - If there is no match, the result will be NULL, - false, or an error, depending on the function. - Path expressions are written in the SQL/JSON path language - and can include arithmetic expressions and functions. - - - - A path expression consists of a sequence of elements allowed - by the jsonpath data type. - The path expression is normally evaluated from left to right, but - you can use parentheses to change the order of operations. - If the evaluation is successful, a sequence of JSON items is produced, - and the evaluation result is returned to the JSON query function - that completes the specified computation. - - - - To refer to the JSON value being queried (the - context item), use the $ variable - in the path expression. The first element of a path must always - be $. It can be followed by one or more - accessor operators, - which go down the JSON structure level by level to retrieve sub-items - of the context item. Each accessor operator acts on the - result(s) of the previous evaluation step, producing zero, one, or more - output items from each input item. - - - - For example, suppose you have some JSON data from a GPS tracker that you - would like to parse, such as: - -SELECT '{ - "track": { - "segments": [ - { - "location": [ 47.763, 13.4034 ], - "start time": "2018-10-14 10:05:14", - "HR": 73 - }, - { - "location": [ 47.706, 13.2635 ], - "start time": "2018-10-14 10:39:21", - "HR": 135 - } - ] - } -}' AS json \gset - - (The above example can be copied-and-pasted - into psql to set things up for the following - examples. Then psql will - expand :'json' into a suitably-quoted string - constant containing the JSON value.) - - - - To retrieve the available track segments, you need to use the - .key accessor - operator to descend through surrounding JSON objects, for example: - -=> select jsonb_path_query(:'json', '$.track.segments'); - jsonb_path_query ------------------------------------------------------------&zwsp;-----------------------------------------------------------&zwsp;--------------------------------------------- - [{"HR": 73, "location": [47.763, 13.4034], "start time": "2018-10-14 10:05:14"}, {"HR": 135, "location": [47.706, 13.2635], "start time": "2018-10-14 10:39:21"}] - - - - - To retrieve the contents of an array, you typically use the - [*] operator. - The following example will return the location coordinates for all - the available track segments: - -=> select jsonb_path_query(:'json', '$.track.segments[*].location'); - jsonb_path_query -------------------- - [47.763, 13.4034] - [47.706, 13.2635] - - Here we started with the whole JSON input value ($), - then the .track accessor selected the JSON object - associated with the "track" object key, then - the .segments accessor selected the JSON array - associated with the "segments" key within that - object, then the [*] accessor selected each element - of that array (producing a series of items), then - the .location accessor selected the JSON array - associated with the "location" key within each of - those objects. In this example, each of those objects had - a "location" key; but if any of them did not, - the .location accessor would have simply produced no - output for that input item. - - - - To return the coordinates of the first segment only, you can - specify the corresponding subscript in the [] - accessor operator. Recall that JSON array indexes are 0-relative: - -=> select jsonb_path_query(:'json', '$.track.segments[0].location'); - jsonb_path_query -------------------- - [47.763, 13.4034] - - - - - The result of each path evaluation step can be processed - by one or more of the jsonpath operators and methods - listed in . - Each method name must be preceded by a dot. For example, - you can get the size of an array: - -=> select jsonb_path_query(:'json', '$.track.segments.size()'); - jsonb_path_query ------------------- - 2 - - More examples of using jsonpath operators - and methods within path expressions appear below in - . - - - - A path can also contain - filter expressions that work similarly to the - WHERE clause in SQL. A filter expression begins with - a question mark and provides a condition in parentheses: - - -? (condition) - - - - - Filter expressions must be written just after the path evaluation step - to which they should apply. The result of that step is filtered to include - only those items that satisfy the provided condition. SQL/JSON defines - three-valued logic, so the condition can - produce true, false, - or unknown. The unknown value - plays the same role as SQL NULL and can be tested - for with the is unknown predicate. Further path - evaluation steps use only those items for which the filter expression - returned true. - - - - The functions and operators that can be used in filter expressions are - listed in . Within a - filter expression, the @ variable denotes the value - being considered (i.e., one result of the preceding path step). You can - write accessor operators after @ to retrieve component - items. - - - - For example, suppose you would like to retrieve all heart rate values higher - than 130. You can achieve this as follows: - -=> select jsonb_path_query(:'json', '$.track.segments[*].HR ? (@ > 130)'); - jsonb_path_query ------------------- - 135 - - - - - To get the start times of segments with such values, you have to - filter out irrelevant segments before selecting the start times, so the - filter expression is applied to the previous step, and the path used - in the condition is different: - -=> select jsonb_path_query(:'json', '$.track.segments[*] ? (@.HR > 130)."start time"'); - jsonb_path_query ------------------------ - "2018-10-14 10:39:21" - - - - - You can use several filter expressions in sequence, if required. - The following example selects start times of all segments that - contain locations with relevant coordinates and high heart rate values: - -=> select jsonb_path_query(:'json', '$.track.segments[*] ? (@.location[1] < 13.4) ? (@.HR > 130)."start time"'); - jsonb_path_query ------------------------ - "2018-10-14 10:39:21" - - - - - Using filter expressions at different nesting levels is also allowed. - The following example first filters all segments by location, and then - returns high heart rate values for these segments, if available: - -=> select jsonb_path_query(:'json', '$.track.segments[*] ? (@.location[1] < 13.4).HR ? (@ > 130)'); - jsonb_path_query ------------------- - 135 - - - - - You can also nest filter expressions within each other. - This example returns the size of the track if it contains any - segments with high heart rate values, or an empty sequence otherwise: - -=> select jsonb_path_query(:'json', '$.track ? (exists(@.segments[*] ? (@.HR > 130))).segments.size()'); - jsonb_path_query ------------------- - 2 - - - - - Deviations from the SQL Standard - - PostgreSQL's implementation of the SQL/JSON path - language has the following deviations from the SQL/JSON standard. - - - - Boolean Predicate Check Expressions - - As an extension to the SQL standard, - a PostgreSQL path expression can be a - Boolean predicate, whereas the SQL standard allows predicates only within - filters. While SQL-standard path expressions return the relevant - element(s) of the queried JSON value, predicate check expressions - return the single three-valued jsonb result of the - predicate: true, - false, or null. - For example, we could write this SQL-standard filter expression: - -=> select jsonb_path_query(:'json', '$.track.segments ?(@[*].HR > 130)'); - jsonb_path_query ------------------------------------------------------------&zwsp;---------------------- - {"HR": 135, "location": [47.706, 13.2635], "start time": "2018-10-14 10:39:21"} - - The similar predicate check expression simply - returns true, indicating that a match exists: - -=> select jsonb_path_query(:'json', '$.track.segments[*].HR > 130'); - jsonb_path_query ------------------- - true - - - - - - Predicate check expressions are required in the - @@ operator (and the - jsonb_path_match function), and should not be used - with the @? operator (or the - jsonb_path_exists function). - - - - - - Regular Expression Interpretation - - There are minor differences in the interpretation of regular - expression patterns used in like_regex filters, as - described in . - - - - - - Strict and Lax Modes - - When you query JSON data, the path expression may not match the - actual JSON data structure. An attempt to access a non-existent - member of an object or element of an array is defined as a - structural error. SQL/JSON path expressions have two modes - of handling structural errors: - - - - - - lax (default) — the path engine implicitly adapts - the queried data to the specified path. - Any structural errors that cannot be fixed as described below - are suppressed, producing no match. - - - - - strict — if a structural error occurs, an error is raised. - - - - - - Lax mode facilitates matching of a JSON document and path - expression when the JSON data does not conform to the expected schema. - If an operand does not match the requirements of a particular operation, - it can be automatically wrapped as an SQL/JSON array, or unwrapped by - converting its elements into an SQL/JSON sequence before performing - the operation. Also, comparison operators automatically unwrap their - operands in lax mode, so you can compare SQL/JSON arrays - out-of-the-box. An array of size 1 is considered equal to its sole element. - Automatic unwrapping is not performed when: - - - - The path expression contains type() or - size() methods that return the type - and the number of elements in the array, respectively. - - - - - The queried JSON data contain nested arrays. In this case, only - the outermost array is unwrapped, while all the inner arrays - remain unchanged. Thus, implicit unwrapping can only go one - level down within each path evaluation step. - - - - - - - For example, when querying the GPS data listed above, you can - abstract from the fact that it stores an array of segments - when using lax mode: - -=> select jsonb_path_query(:'json', 'lax $.track.segments.location'); - jsonb_path_query -------------------- - [47.763, 13.4034] - [47.706, 13.2635] - - - - - In strict mode, the specified path must exactly match the structure of - the queried JSON document, so using this path - expression will cause an error: - -=> select jsonb_path_query(:'json', 'strict $.track.segments.location'); -ERROR: jsonpath member accessor can only be applied to an object - - To get the same result as in lax mode, you have to explicitly unwrap the - segments array: - -=> select jsonb_path_query(:'json', 'strict $.track.segments[*].location'); - jsonb_path_query -------------------- - [47.763, 13.4034] - [47.706, 13.2635] - - - - - The unwrapping behavior of lax mode can lead to surprising results. For - instance, the following query using the .** accessor - selects every HR value twice: - -=> select jsonb_path_query(:'json', 'lax $.**.HR'); - jsonb_path_query ------------------- - 73 - 135 - 73 - 135 - - This happens because the .** accessor selects both - the segments array and each of its elements, while - the .HR accessor automatically unwraps arrays when - using lax mode. To avoid surprising results, we recommend using - the .** accessor only in strict mode. The - following query selects each HR value just once: - -=> select jsonb_path_query(:'json', 'strict $.**.HR'); - jsonb_path_query ------------------- - 73 - 135 - - - - - The unwrapping of arrays can also lead to unexpected results. Consider this - example, which selects all the location arrays: - -=> select jsonb_path_query(:'json', 'lax $.track.segments[*].location'); - jsonb_path_query -------------------- - [47.763, 13.4034] - [47.706, 13.2635] -(2 rows) - - As expected it returns the full arrays. But applying a filter expression - causes the arrays to be unwrapped to evaluate each item, returning only the - items that match the expression: - -=> select jsonb_path_query(:'json', 'lax $.track.segments[*].location ?(@[*] > 15)'); - jsonb_path_query ------------------- - 47.763 - 47.706 -(2 rows) - - This despite the fact that the full arrays are selected by the path - expression. Use strict mode to restore selecting the arrays: - -=> select jsonb_path_query(:'json', 'strict $.track.segments[*].location ?(@[*] > 15)'); - jsonb_path_query -------------------- - [47.763, 13.4034] - [47.706, 13.2635] -(2 rows) - - - - - - SQL/JSON Path Operators and Methods - - - shows the operators and - methods available in jsonpath. Note that while the unary - operators and methods can be applied to multiple values resulting from a - preceding path step, the binary operators (addition etc.) can only be - applied to single values. In lax mode, methods applied to an array will be - executed for each value in the array. The exceptions are - .type() and .size(), which apply to - the array itself. - - - - <type>jsonpath</type> Operators and Methods - - - - - Operator/Method - - - Description - - - Example(s) - - - - - - - - number + number - number - - - Addition - - - jsonb_path_query('[2]', '$[0] + 3') - 5 - - - - - - + number - number - - - Unary plus (no operation); unlike addition, this can iterate over - multiple values - - - jsonb_path_query_array('{"x": [2,3,4]}', '+ $.x') - [2, 3, 4] - - - - - - number - number - number - - - Subtraction - - - jsonb_path_query('[2]', '7 - $[0]') - 5 - - - - - - - number - number - - - Negation; unlike subtraction, this can iterate over - multiple values - - - jsonb_path_query_array('{"x": [2,3,4]}', '- $.x') - [-2, -3, -4] - - - - - - number * number - number - - - Multiplication - - - jsonb_path_query('[4]', '2 * $[0]') - 8 - - - - - - number / number - number - - - Division - - - jsonb_path_query('[8.5]', '$[0] / 2') - 4.2500000000000000 - - - - - - number % number - number - - - Modulo (remainder) - - - jsonb_path_query('[32]', '$[0] % 10') - 2 - - - - - - value . type() - string - - - Type of the JSON item (see json_typeof) - - - jsonb_path_query_array('[1, "2", {}]', '$[*].type()') - ["number", "string", "object"] - - - - - - value . size() - number - - - Size of the JSON item (number of array elements, or 1 if not an - array) - - - jsonb_path_query('{"m": [11, 15]}', '$.m.size()') - 2 - - - - - - value . boolean() - boolean - - - Boolean value converted from a JSON boolean, number, or string - - - jsonb_path_query_array('[1, "yes", false]', '$[*].boolean()') - [true, true, false] - - - - - - value . string() - string - - - String value converted from a JSON boolean, number, string, or - datetime - - - jsonb_path_query_array('[1.23, "xyz", false]', '$[*].string()') - ["1.23", "xyz", "false"] - - - jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().string()') - "2023-08-15T12:34:56" - - - - - - value . double() - number - - - Approximate floating-point number converted from a JSON number or - string - - - jsonb_path_query('{"len": "1.9"}', '$.len.double() * 2') - 3.8 - - - - - - number . ceiling() - number - - - Nearest integer greater than or equal to the given number - - - jsonb_path_query('{"h": 1.3}', '$.h.ceiling()') - 2 - - - - - - number . floor() - number - - - Nearest integer less than or equal to the given number - - - jsonb_path_query('{"h": 1.7}', '$.h.floor()') - 1 - - - - - - number . abs() - number - - - Absolute value of the given number - - - jsonb_path_query('{"z": -0.3}', '$.z.abs()') - 0.3 - - - - - - value . bigint() - bigint - - - Big integer value converted from a JSON number or string - - - jsonb_path_query('{"len": "9876543219"}', '$.len.bigint()') - 9876543219 - - - - - - value . decimal( [ precision [ , scale ] ] ) - decimal - - - Rounded decimal value converted from a JSON number or string - (precision and scale must be - integer values) - - - jsonb_path_query('1234.5678', '$.decimal(6, 2)') - 1234.57 - - - - - - value . integer() - integer - - - Integer value converted from a JSON number or string - - - jsonb_path_query('{"len": "12345"}', '$.len.integer()') - 12345 - - - - - - value . number() - numeric - - - Numeric value converted from a JSON number or string - - - jsonb_path_query('{"len": "123.45"}', '$.len.number()') - 123.45 - - - - - - string . datetime() - datetime_type - (see note) - - - Date/time value converted from a string - - - jsonb_path_query('["2015-8-1", "2015-08-12"]', '$[*] ? (@.datetime() < "2015-08-2".datetime())') - "2015-8-1" - - - - - - string . datetime(template) - datetime_type - (see note) - - - Date/time value converted from a string using the - specified to_timestamp template - - - jsonb_path_query_array('["12:30", "18:40"]', '$[*].datetime("HH24:MI")') - ["12:30:00", "18:40:00"] - - - - - - string . date() - date - - - Date value converted from a string - - - jsonb_path_query('"2023-08-15"', '$.date()') - "2023-08-15" - - - - - - string . time() - time without time zone - - - Time without time zone value converted from a string - - - jsonb_path_query('"12:34:56"', '$.time()') - "12:34:56" - - - - - - string . time(precision) - time without time zone - - - Time without time zone value converted from a string, with fractional - seconds adjusted to the given precision - - - jsonb_path_query('"12:34:56.789"', '$.time(2)') - "12:34:56.79" - - - - - - string . time_tz() - time with time zone - - - Time with time zone value converted from a string - - - jsonb_path_query('"12:34:56 +05:30"', '$.time_tz()') - "12:34:56+05:30" - - - - - - string . time_tz(precision) - time with time zone - - - Time with time zone value converted from a string, with fractional - seconds adjusted to the given precision - - - jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2)') - "12:34:56.79+05:30" - - - - - - string . timestamp() - timestamp without time zone - - - Timestamp without time zone value converted from a string - - - jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp()') - "2023-08-15T12:34:56" - - - - - - string . timestamp(precision) - timestamp without time zone - - - Timestamp without time zone value converted from a string, with - fractional seconds adjusted to the given precision - - - jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2)') - "2023-08-15T12:34:56.79" - - - - - - string . timestamp_tz() - timestamp with time zone - - - Timestamp with time zone value converted from a string - - - jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()') - "2023-08-15T12:34:56+05:30" - - - - - - string . timestamp_tz(precision) - timestamp with time zone - - - Timestamp with time zone value converted from a string, with fractional - seconds adjusted to the given precision - - - jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2)') - "2023-08-15T12:34:56.79+05:30" - - - - - - object . keyvalue() - array - - - The object's key-value pairs, represented as an array of objects - containing three fields: "key", - "value", and "id"; - "id" is a unique identifier of the object the - key-value pair belongs to - - - jsonb_path_query_array('{"x": "20", "y": 32}', '$.keyvalue()') - [{"id": 0, "key": "x", "value": "20"}, {"id": 0, "key": "y", "value": 32}] - - - - -
- - - - The result type of the datetime() and - datetime(template) - methods can be date, timetz, time, - timestamptz, or timestamp. - Both methods determine their result type dynamically. - - - The datetime() method sequentially tries to - match its input string to the ISO formats - for date, timetz, time, - timestamptz, and timestamp. It stops on - the first matching format and emits the corresponding data type. - - - The datetime(template) - method determines the result type according to the fields used in the - provided template string. - - - The datetime() and - datetime(template) methods - use the same parsing rules as the to_timestamp SQL - function does (see ), with three - exceptions. First, these methods don't allow unmatched template - patterns. Second, only the following separators are allowed in the - template string: minus sign, period, solidus (slash), comma, apostrophe, - semicolon, colon and space. Third, separators in the template string - must exactly match the input string. - - - If different date/time types need to be compared, an implicit cast is - applied. A date value can be cast to timestamp - or timestamptz, timestamp can be cast to - timestamptz, and time to timetz. - However, all but the first of these conversions depend on the current - setting, and thus can only be performed - within timezone-aware jsonpath functions. Similarly, other - date/time-related methods that convert strings to date/time types - also do this casting, which may involve the current - setting. Therefore, these conversions can - also only be performed within timezone-aware jsonpath - functions. - - - - - shows the available - filter expression elements. - - - - <type>jsonpath</type> Filter Expression Elements - - - - - Predicate/Value - - - Description - - - Example(s) - - - - - - - - value == value - boolean - - - Equality comparison (this, and the other comparison operators, work on - all JSON scalar values) - - - jsonb_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == 1)') - [1, 1] - - - jsonb_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == "a")') - ["a"] - - - - - - value != value - boolean - - - value <> value - boolean - - - Non-equality comparison - - - jsonb_path_query_array('[1, 2, 1, 3]', '$[*] ? (@ != 1)') - [2, 3] - - - jsonb_path_query_array('["a", "b", "c"]', '$[*] ? (@ <> "b")') - ["a", "c"] - - - - - - value < value - boolean - - - Less-than comparison - - - jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ < 2)') - [1] - - - - - - value <= value - boolean - - - Less-than-or-equal-to comparison - - - jsonb_path_query_array('["a", "b", "c"]', '$[*] ? (@ <= "b")') - ["a", "b"] - - - - - - value > value - boolean - - - Greater-than comparison - - - jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ > 2)') - [3] - - - - - - value >= value - boolean - - - Greater-than-or-equal-to comparison - - - jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ >= 2)') - [2, 3] - - - - - - true - boolean - - - JSON constant true - - - jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == true)') - {"name": "Chris", "parent": true} - - - - - - false - boolean - - - JSON constant false - - - jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == false)') - {"name": "John", "parent": false} - - - - - - null - value - - - JSON constant null (note that, unlike in SQL, - comparison to null works normally) - - - jsonb_path_query('[{"name": "Mary", "job": null}, {"name": "Michael", "job": "driver"}]', '$[*] ? (@.job == null) .name') - "Mary" - - - - - - boolean && boolean - boolean - - - Boolean AND - - - jsonb_path_query('[1, 3, 7]', '$[*] ? (@ > 1 && @ < 5)') - 3 - - - - - - boolean || boolean - boolean - - - Boolean OR - - - jsonb_path_query('[1, 3, 7]', '$[*] ? (@ < 1 || @ > 5)') - 7 - - - - - - ! boolean - boolean - - - Boolean NOT - - - jsonb_path_query('[1, 3, 7]', '$[*] ? (!(@ < 5))') - 7 - - - - - - boolean is unknown - boolean - - - Tests whether a Boolean condition is unknown. - - - jsonb_path_query('[-1, 2, 7, "foo"]', '$[*] ? ((@ > 0) is unknown)') - "foo" - - - - - - string like_regex string flag string - boolean - - - Tests whether the first operand matches the regular expression - given by the second operand, optionally with modifications - described by a string of flag characters (see - ). - - - jsonb_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c")') - ["abc", "abdacb"] - - - jsonb_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c" flag "i")') - ["abc", "aBdC", "abdacb"] - - - - - - string starts with string - boolean - - - Tests whether the second operand is an initial substring of the first - operand. - - - jsonb_path_query('["John Smith", "Mary Stone", "Bob Johnson"]', '$[*] ? (@ starts with "John")') - "John Smith" - - - - - - exists ( path_expression ) - boolean - - - Tests whether a path expression matches at least one SQL/JSON item. - Returns unknown if the path expression would result - in an error; the second example uses this to avoid a no-such-key error - in strict mode. - - - jsonb_path_query('{"x": [1, 2], "y": [2, 4]}', 'strict $.* ? (exists (@ ? (@[*] > 2)))') - [2, 4] - - - jsonb_path_query_array('{"value": 41}', 'strict $ ? (exists (@.name)) .name') - [] - - - - -
- -
- - - SQL/JSON Regular Expressions - - - LIKE_REGEX - in SQL/JSON - - - - SQL/JSON path expressions allow matching text to a regular expression - with the like_regex filter. For example, the - following SQL/JSON path query would case-insensitively match all - strings in an array that start with an English vowel: - -$[*] ? (@ like_regex "^[aeiou]" flag "i") - - - - - The optional flag string may include one or more of - the characters - i for case-insensitive match, - m to allow ^ - and $ to match at newlines, - s to allow . to match a newline, - and q to quote the whole pattern (reducing the - behavior to a simple substring match). - - - - The SQL/JSON standard borrows its definition for regular expressions - from the LIKE_REGEX operator, which in turn uses the - XQuery standard. PostgreSQL does not currently support the - LIKE_REGEX operator. Therefore, - the like_regex filter is implemented using the - POSIX regular expression engine described in - . This leads to various minor - discrepancies from standard SQL/JSON behavior, which are cataloged in - . - Note, however, that the flag-letter incompatibilities described there - do not apply to SQL/JSON, as it translates the XQuery flag letters to - match what the POSIX engine expects. - - - - Keep in mind that the pattern argument of like_regex - is a JSON path string literal, written according to the rules given in - . This means in particular that any - backslashes you want to use in the regular expression must be doubled. - For example, to match string values of the root document that contain - only digits: - -$.* ? (@ like_regex "^\\d+$") - - - -
- - - SQL/JSON Query Functions - - SQL/JSON functions JSON_EXISTS(), - JSON_QUERY(), and JSON_VALUE() - described in can be used - to query JSON documents. Each of these functions apply a - path_expression (an SQL/JSON path query) to a - context_item (the document). See - for more details on what - the path_expression can contain. The - path_expression can also reference variables, - whose values are specified with their respective names in the - PASSING clause that is supported by each function. - context_item can be a jsonb value - or a character string that can be successfully cast to jsonb. - - - - SQL/JSON Query Functions - - - - - Function signature - - - Description - - - Example(s) - - - - - - - json_exists - -JSON_EXISTS ( -context_item, path_expression - PASSING { value AS varname } , ... -{ TRUE | FALSE | UNKNOWN | ERROR } ON ERROR ) boolean - - - - - - Returns true if the SQL/JSON path_expression - applied to the context_item yields any - items, false otherwise. - - - - - The ON ERROR clause specifies the behavior if - an error occurs during path_expression - evaluation. Specifying ERROR will cause an error to - be thrown with the appropriate message. Other options include - returning boolean values FALSE or - TRUE or the value UNKNOWN which - is actually an SQL NULL. The default when no ON ERROR - clause is specified is to return the boolean value - FALSE. - - - - - Examples: - - - JSON_EXISTS(jsonb '{"key1": [1,2,3]}', 'strict $.key1[*] ? (@ > $x)' PASSING 2 AS x) - t - - - JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'lax $.a[5]' ERROR ON ERROR) - f - - - JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'strict $.a[5]' ERROR ON ERROR) - - -ERROR: jsonpath array subscript is out of bounds - - - - - - json_query - -JSON_QUERY ( -context_item, path_expression - PASSING { value AS varname } , ... - RETURNING data_type FORMAT JSON ENCODING UTF8 - { WITHOUT | WITH { CONDITIONAL | UNCONDITIONAL } } ARRAY WRAPPER - { KEEP | OMIT } QUOTES ON SCALAR STRING - { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON EMPTY - { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON ERROR ) jsonb - - - - - - Returns the result of applying the SQL/JSON - path_expression to the - context_item. - - - - - By default, the result is returned as a value of type jsonb, - though the RETURNING clause can be used to return - as some other type to which it can be successfully coerced. - - - - - If the path expression may return multiple values, it might be necessary - to wrap those values using the WITH WRAPPER clause to - make it a valid JSON string, because the default behavior is to not wrap - them, as if WITHOUT WRAPPER were specified. The - WITH WRAPPER clause is by default taken to mean - WITH UNCONDITIONAL WRAPPER, which means that even a - single result value will be wrapped. To apply the wrapper only when - multiple values are present, specify WITH CONDITIONAL WRAPPER. - Getting multiple values in result will be treated as an error if - WITHOUT WRAPPER is specified. - - - - - If the result is a scalar string, by default, the returned value will - be surrounded by quotes, making it a valid JSON value. It can be made - explicit by specifying KEEP QUOTES. Conversely, - quotes can be omitted by specifying OMIT QUOTES. - To ensure that the result is a valid JSON value, OMIT QUOTES - cannot be specified when WITH WRAPPER is also - specified. - - - - - The ON EMPTY clause specifies the behavior if - evaluating path_expression yields an empty - set. The ON ERROR clause specifies the behavior - if an error occurs when evaluating path_expression, - when coercing the result value to the RETURNING type, - or when evaluating the ON EMPTY expression if the - path_expression evaluation returns an empty - set. - - - - - For both ON EMPTY and ON ERROR, - specifying ERROR will cause an error to be thrown with - the appropriate message. Other options include returning an SQL NULL, an - empty array (EMPTY ARRAY), - an empty object (EMPTY OBJECT), or a user-specified - expression (DEFAULT expression) - that can be coerced to jsonb or the type specified in RETURNING. - The default when ON EMPTY or ON ERROR - is not specified is to return an SQL NULL value. - - - - - Examples: - - - JSON_QUERY(jsonb '[1,[2,3],null]', 'lax $[*][$off]' PASSING 1 AS off WITH CONDITIONAL WRAPPER) - 3 - - - JSON_QUERY(jsonb '{"a": "[1, 2]"}', 'lax $.a' OMIT QUOTES) - [1, 2] - - - JSON_QUERY(jsonb '{"a": "[1, 2]"}', 'lax $.a' RETURNING int[] OMIT QUOTES ERROR ON ERROR) - - -ERROR: malformed array literal: "[1, 2]" -DETAIL: Missing "]" after array dimensions. - - - - - - - json_value - -JSON_VALUE ( -context_item, path_expression - PASSING { value AS varname } , ... - RETURNING data_type - { ERROR | NULL | DEFAULT expression } ON EMPTY - { ERROR | NULL | DEFAULT expression } ON ERROR ) text - - - - - - Returns the result of applying the SQL/JSON - path_expression to the - context_item. - - - - - Only use JSON_VALUE() if the extracted value is - expected to be a single SQL/JSON scalar item; - getting multiple values will be treated as an error. If you expect that - extracted value might be an object or an array, use the - JSON_QUERY function instead. - - - - - By default, the result, which must be a single scalar value, is - returned as a value of type text, though the - RETURNING clause can be used to return as some - other type to which it can be successfully coerced. - - - - - The ON ERROR and ON EMPTY - clauses have similar semantics as mentioned in the description of - JSON_QUERY, except the set of values returned in - lieu of throwing an error is different. - - - - - Note that scalar strings returned by JSON_VALUE - always have their quotes removed, equivalent to specifying - OMIT QUOTES in JSON_QUERY. - - - - - Examples: - - - JSON_VALUE(jsonb '"123.45"', '$' RETURNING float) - 123.45 - - - JSON_VALUE(jsonb '"03:04 2015-02-01"', '$.datetime("HH24:MI YYYY-MM-DD")' RETURNING date) - 2015-02-01 - - - JSON_VALUE(jsonb '[1,2]', 'strict $[$off]' PASSING 1 as off) - 2 - - - JSON_VALUE(jsonb '[1,2]', 'strict $[*]' DEFAULT 9 ON ERROR) - 9 - - - - - -
- - - The context_item expression is converted to - jsonb by an implicit cast if the expression is not already of - type jsonb. Note, however, that any parsing errors that occur - during that conversion are thrown unconditionally, that is, are not - handled according to the (specified or implicit) ON ERROR - clause. - - - - - JSON_VALUE() returns an SQL NULL if - path_expression returns a JSON - null, whereas JSON_QUERY() returns - the JSON null as is. - - -
- - - JSON_TABLE - - json_table - - - - JSON_TABLE is an SQL/JSON function which - queries JSON data - and presents the results as a relational view, which can be accessed as a - regular SQL table. You can use JSON_TABLE inside - the FROM clause of a SELECT, - UPDATE, or DELETE and as data source - in a MERGE statement. - - - - Taking JSON data as input, JSON_TABLE uses a JSON path - expression to extract a part of the provided data to use as a - row pattern for the constructed view. Each SQL/JSON - value given by the row pattern serves as source for a separate row in the - constructed view. - - - - To split the row pattern into columns, JSON_TABLE - provides the COLUMNS clause that defines the - schema of the created view. For each column, a separate JSON path expression - can be specified to be evaluated against the row pattern to get an SQL/JSON - value that will become the value for the specified column in a given output - row. - - - - JSON data stored at a nested level of the row pattern can be extracted using - the NESTED PATH clause. Each - NESTED PATH clause can be used to generate one or more - columns using the data from a nested level of the row pattern. Those - columns can be specified using a COLUMNS clause that - looks similar to the top-level COLUMNS clause. Rows constructed from - NESTED COLUMNS are called child rows and are joined - against the row constructed from the columns specified in the parent - COLUMNS clause to get the row in the final view. Child - columns themselves may contain a NESTED PATH - specification thus allowing to extract data located at arbitrary nesting - levels. Columns produced by multiple NESTED PATHs at the - same level are considered to be siblings of each - other and their rows after joining with the parent row are combined using - UNION. - - - - The rows produced by JSON_TABLE are laterally - joined to the row that generated them, so you do not have to explicitly join - the constructed view with the original table holding JSON - data. - - - - The syntax is: - - - -JSON_TABLE ( - context_item, path_expression AS json_path_name PASSING { value AS varname } , ... - COLUMNS ( json_table_column , ... ) - { ERROR | EMPTY ARRAY} ON ERROR -) - - -where json_table_column is: - - name FOR ORDINALITY - | name type - FORMAT JSON ENCODING UTF8 - PATH path_expression - { WITHOUT | WITH { CONDITIONAL | UNCONDITIONAL } } ARRAY WRAPPER - { KEEP | OMIT } QUOTES ON SCALAR STRING - { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON EMPTY - { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON ERROR - | name type EXISTS PATH path_expression - { ERROR | TRUE | FALSE | UNKNOWN } ON ERROR - | NESTED PATH path_expression AS json_path_name COLUMNS ( json_table_column , ... ) - - - - Each syntax element is described below in more detail. - - - - - - context_item, path_expression AS json_path_name PASSING { value AS varname } , ... - - - - The context_item specifies the input document - to query, the path_expression is an SQL/JSON - path expression defining the query, and json_path_name - is an optional name for the path_expression. - The optional PASSING clause provides data values for - the variables mentioned in the path_expression. - The result of the input data evaluation using the aforementioned elements - is called the row pattern, which is used as the - source for row values in the constructed view. - - - - - - - COLUMNS ( json_table_column , ... ) - - - - - The COLUMNS clause defining the schema of the - constructed view. In this clause, you can specify each column to be - filled with an SQL/JSON value obtained by applying a JSON path expression - against the row pattern. json_table_column has - the following variants: - - - - - - name FOR ORDINALITY - - - - Adds an ordinality column that provides sequential row numbering starting - from 1. Each NESTED PATH (see below) gets its own - counter for any nested ordinality columns. - - - - - - - name type - FORMAT JSON ENCODING UTF8 - PATH path_expression - - - - Inserts an SQL/JSON value obtained by applying - path_expression against the row pattern into - the view's output row after coercing it to specified - type. - - - Specifying FORMAT JSON makes it explicit that you - expect the value to be a valid json object. It only - makes sense to specify FORMAT JSON if - type is one of bpchar, - bytea, character varying, name, - json, jsonb, text, or a domain over - these types. - - - Optionally, you can specify WRAPPER and - QUOTES clauses to format the output. Note that - specifying OMIT QUOTES overrides - FORMAT JSON if also specified, because unquoted - literals do not constitute valid json values. - - - Optionally, you can use ON EMPTY and - ON ERROR clauses to specify whether to throw the error - or return the specified value when the result of JSON path evaluation is - empty and when an error occurs during JSON path evaluation or when - coercing the SQL/JSON value to the specified type, respectively. The - default for both is to return a NULL value. - - - - This clause is internally turned into and has the same semantics as - JSON_VALUE or JSON_QUERY. - The latter if the specified type is not a scalar type or if either of - FORMAT JSON, WRAPPER, or - QUOTES clause is present. - - - - - - - - name type - EXISTS PATH path_expression - - - - Inserts a boolean value obtained by applying - path_expression against the row pattern - into the view's output row after coercing it to specified - type. - - - The value corresponds to whether applying the PATH - expression to the row pattern yields any values. - - - The specified type should have a cast from the - boolean type. - - - Optionally, you can use ON ERROR to specify whether to - throw the error or return the specified value when an error occurs during - JSON path evaluation or when coercing SQL/JSON value to the specified - type. The default is to return a boolean value - FALSE. - - - - This clause is internally turned into and has the same semantics as - JSON_EXISTS. - - - - - - - - NESTED PATH path_expression AS json_path_name - COLUMNS ( json_table_column , ... ) - - - - - Extracts SQL/JSON values from nested levels of the row pattern, - generates one or more columns as defined by the COLUMNS - subclause, and inserts the extracted SQL/JSON values into those - columns. The json_table_column - expression in the COLUMNS subclause uses the same - syntax as in the parent COLUMNS clause. - - - - The NESTED PATH syntax is recursive, - so you can go down multiple nested levels by specifying several - NESTED PATH subclauses within each other. - It allows to unnest the hierarchy of JSON objects and arrays - in a single function invocation rather than chaining several - JSON_TABLE expressions in an SQL statement. - - - - - - - - In each variant of json_table_column described - above, if the PATH clause is omitted, path expression - $.name is used, where - name is the provided column name. - - - - - - - - - AS json_path_name - - - - - The optional json_path_name serves as an - identifier of the provided path_expression. - The name must be unique and distinct from the column names. - - - - - - - { ERROR | EMPTY } ON ERROR - - - - - The optional ON ERROR can be used to specify how to - handle errors when evaluating the top-level - path_expression. Use ERROR - if you want the errors to be thrown and EMPTY to - return an empty table, that is, a table containing 0 rows. Note that - this clause does not affect the errors that occur when evaluating - columns, for which the behavior depends on whether the - ON ERROR clause is specified against a given column. - - - - - - Examples - - - In the examples that follow, the following table containing JSON data - will be used: - - -CREATE TABLE my_films ( js jsonb ); - -INSERT INTO my_films VALUES ( -'{ "favorites" : [ - { "kind" : "comedy", "films" : [ - { "title" : "Bananas", - "director" : "Woody Allen"}, - { "title" : "The Dinner Game", - "director" : "Francis Veber" } ] }, - { "kind" : "horror", "films" : [ - { "title" : "Psycho", - "director" : "Alfred Hitchcock" } ] }, - { "kind" : "thriller", "films" : [ - { "title" : "Vertigo", - "director" : "Alfred Hitchcock" } ] }, - { "kind" : "drama", "films" : [ - { "title" : "Yojimbo", - "director" : "Akira Kurosawa" } ] } - ] }'); - - - - - The following query shows how to use JSON_TABLE to - turn the JSON objects in the my_films table - to a view containing columns for the keys kind, - title, and director contained in - the original JSON along with an ordinality column: - - -SELECT jt.* FROM - my_films, - JSON_TABLE (js, '$.favorites[*]' COLUMNS ( - id FOR ORDINALITY, - kind text PATH '$.kind', - title text PATH '$.films[*].title' WITH WRAPPER, - director text PATH '$.films[*].director' WITH WRAPPER)) AS jt; - - - - id | kind | title | director -----+----------+--------------------------------+---------------------------------- - 1 | comedy | ["Bananas", "The Dinner Game"] | ["Woody Allen", "Francis Veber"] - 2 | horror | ["Psycho"] | ["Alfred Hitchcock"] - 3 | thriller | ["Vertigo"] | ["Alfred Hitchcock"] - 4 | drama | ["Yojimbo"] | ["Akira Kurosawa"] -(4 rows) - - - - - The following is a modified version of the above query to show the - usage of PASSING arguments in the filter specified in - the top-level JSON path expression and the various options for the - individual columns: - - -SELECT jt.* FROM - my_films, - JSON_TABLE (js, '$.favorites[*] ? (@.films[*].director == $filter)' - PASSING 'Alfred Hitchcock' AS filter - COLUMNS ( - id FOR ORDINALITY, - kind text PATH '$.kind', - title text FORMAT JSON PATH '$.films[*].title' OMIT QUOTES, - director text PATH '$.films[*].director' KEEP QUOTES)) AS jt; - - - - id | kind | title | director -----+----------+---------+-------------------- - 1 | horror | Psycho | "Alfred Hitchcock" - 2 | thriller | Vertigo | "Alfred Hitchcock" -(2 rows) - - - - - The following is a modified version of the above query to show the usage - of NESTED PATH for populating title and director - columns, illustrating how they are joined to the parent columns id and - kind: - - -SELECT jt.* FROM - my_films, - JSON_TABLE ( js, '$.favorites[*] ? (@.films[*].director == $filter)' - PASSING 'Alfred Hitchcock' AS filter - COLUMNS ( - id FOR ORDINALITY, - kind text PATH '$.kind', - NESTED PATH '$.films[*]' COLUMNS ( - title text FORMAT JSON PATH '$.title' OMIT QUOTES, - director text PATH '$.director' KEEP QUOTES))) AS jt; - - - - id | kind | title | director -----+----------+---------+-------------------- - 1 | horror | Psycho | "Alfred Hitchcock" - 2 | thriller | Vertigo | "Alfred Hitchcock" -(2 rows) - - - - - - The following is the same query but without the filter in the root - path: - - -SELECT jt.* FROM - my_films, - JSON_TABLE ( js, '$.favorites[*]' - COLUMNS ( - id FOR ORDINALITY, - kind text PATH '$.kind', - NESTED PATH '$.films[*]' COLUMNS ( - title text FORMAT JSON PATH '$.title' OMIT QUOTES, - director text PATH '$.director' KEEP QUOTES))) AS jt; - - - - id | kind | title | director -----+----------+-----------------+-------------------- - 1 | comedy | Bananas | "Woody Allen" - 1 | comedy | The Dinner Game | "Francis Veber" - 2 | horror | Psycho | "Alfred Hitchcock" - 3 | thriller | Vertigo | "Alfred Hitchcock" - 4 | drama | Yojimbo | "Akira Kurosawa" -(5 rows) - - - - - - The following shows another query using a different JSON - object as input. It shows the UNION "sibling join" between - NESTED paths $.movies[*] and - $.books[*] and also the usage of - FOR ORDINALITY column at NESTED - levels (columns movie_id, book_id, - and author_id): - - -SELECT * FROM JSON_TABLE ( -'{"favorites": - [{"movies": - [{"name": "One", "director": "John Doe"}, - {"name": "Two", "director": "Don Joe"}], - "books": - [{"name": "Mystery", "authors": [{"name": "Brown Dan"}]}, - {"name": "Wonder", "authors": [{"name": "Jun Murakami"}, {"name":"Craig Doe"}]}] -}]}'::json, '$.favorites[*]' -COLUMNS ( - user_id FOR ORDINALITY, - NESTED '$.movies[*]' - COLUMNS ( - movie_id FOR ORDINALITY, - mname text PATH '$.name', - director text), - NESTED '$.books[*]' - COLUMNS ( - book_id FOR ORDINALITY, - bname text PATH '$.name', - NESTED '$.authors[*]' - COLUMNS ( - author_id FOR ORDINALITY, - author_name text PATH '$.name')))); - - - - user_id | movie_id | mname | director | book_id | bname | author_id | author_name ----------+----------+-------+----------+---------+---------+-----------+-------------- - 1 | 1 | One | John Doe | | | | - 1 | 2 | Two | Don Joe | | | | - 1 | | | | 1 | Mystery | 1 | Brown Dan - 1 | | | | 2 | Wonder | 1 | Jun Murakami - 1 | | | | 2 | Wonder | 2 | Craig Doe -(5 rows) - - - - -
- - - Sequence Manipulation Functions - - - sequence - - - - This section describes functions for operating on sequence - objects, also called sequence generators or just sequences. - Sequence objects are special single-row tables created with . - Sequence objects are commonly used to generate unique identifiers - for rows of a table. The sequence functions, listed in , provide simple, multiuser-safe - methods for obtaining successive sequence values from sequence - objects. - - - - Sequence Functions - - - - - Function - - - Description - - - - - - - - - nextval - - nextval ( regclass ) - bigint - - - Advances the sequence object to its next value and returns that value. - This is done atomically: even if multiple sessions - execute nextval concurrently, each will safely - receive a distinct sequence value. - If the sequence object has been created with default parameters, - successive nextval calls will return successive - values beginning with 1. Other behaviors can be obtained by using - appropriate parameters in the - command. - - - This function requires USAGE - or UPDATE privilege on the sequence. - - - - - - - setval - - setval ( regclass, bigint , boolean ) - bigint - - - Sets the sequence object's current value, and optionally - its is_called flag. The two-parameter - form sets the sequence's last_value field to the - specified value and sets its is_called field to - true, meaning that the next - nextval will advance the sequence before - returning a value. The value that will be reported - by currval is also set to the specified value. - In the three-parameter form, is_called can be set - to either true - or false. true has the same - effect as the two-parameter form. If it is set - to false, the next nextval - will return exactly the specified value, and sequence advancement - commences with the following nextval. - Furthermore, the value reported by currval is not - changed in this case. For example, - -SELECT setval('myseq', 42); Next nextval will return 43 -SELECT setval('myseq', 42, true); Same as above -SELECT setval('myseq', 42, false); Next nextval will return 42 - - The result returned by setval is just the value of its - second argument. - - - This function requires UPDATE privilege on the - sequence. - - - - - - - currval - - currval ( regclass ) - bigint - - - Returns the value most recently obtained - by nextval for this sequence in the current - session. (An error is reported if nextval has - never been called for this sequence in this session.) Because this is - returning a session-local value, it gives a predictable answer whether - or not other sessions have executed nextval since - the current session did. - - - This function requires USAGE - or SELECT privilege on the sequence. - - - - - - - lastval - - lastval () - bigint - - - Returns the value most recently returned by - nextval in the current session. This function is - identical to currval, except that instead - of taking the sequence name as an argument it refers to whichever - sequence nextval was most recently applied to - in the current session. It is an error to call - lastval if nextval - has not yet been called in the current session. - - - This function requires USAGE - or SELECT privilege on the last used sequence. - - - - -
- - - - To avoid blocking concurrent transactions that obtain numbers from - the same sequence, the value obtained by nextval - is not reclaimed for re-use if the calling transaction later aborts. - This means that transaction aborts or database crashes can result in - gaps in the sequence of assigned values. That can happen without a - transaction abort, too. For example an INSERT with - an ON CONFLICT clause will compute the to-be-inserted - tuple, including doing any required nextval - calls, before detecting any conflict that would cause it to follow - the ON CONFLICT rule instead. - Thus, PostgreSQL sequence - objects cannot be used to obtain gapless - sequences. - - - - Likewise, sequence state changes made by setval - are immediately visible to other transactions, and are not undone if - the calling transaction rolls back. - - - - If the database cluster crashes before committing a transaction - containing a nextval - or setval call, the sequence state change might - not have made its way to persistent storage, so that it is uncertain - whether the sequence will have its original or updated state after the - cluster restarts. This is harmless for usage of the sequence within - the database, since other effects of uncommitted transactions will not - be visible either. However, if you wish to use a sequence value for - persistent outside-the-database purposes, make sure that the - nextval call has been committed before doing so. - - - - - The sequence to be operated on by a sequence function is specified by - a regclass argument, which is simply the OID of the sequence in the - pg_class system catalog. You do not have to look up the - OID by hand, however, since the regclass data type's input - converter will do the work for you. See - for details. - -
- - - - Conditional Expressions - - - CASE - - - - conditional expression - - - - This section describes the SQL-compliant conditional expressions - available in PostgreSQL. - - - - - If your needs go beyond the capabilities of these conditional - expressions, you might want to consider writing a server-side function - in a more expressive programming language. - - - - - - Although COALESCE, GREATEST, and - LEAST are syntactically similar to functions, they are - not ordinary functions, and thus cannot be used with explicit - VARIADIC array arguments. - - - - - <literal>CASE</literal> - - - The SQL CASE expression is a - generic conditional expression, similar to if/else statements in - other programming languages: - - -CASE WHEN condition THEN result - WHEN ... - ELSE result -END - - - CASE clauses can be used wherever - an expression is valid. Each condition is an - expression that returns a boolean result. If the condition's - result is true, the value of the CASE expression is the - result that follows the condition, and the - remainder of the CASE expression is not processed. If the - condition's result is not true, any subsequent WHEN clauses - are examined in the same manner. If no WHEN - condition yields true, the value of the - CASE expression is the result of the - ELSE clause. If the ELSE clause is - omitted and no condition is true, the result is null. - - - - An example: - -SELECT * FROM test; - - a ---- - 1 - 2 - 3 - - -SELECT a, - CASE WHEN a=1 THEN 'one' - WHEN a=2 THEN 'two' - ELSE 'other' - END - FROM test; - - a | case ----+------- - 1 | one - 2 | two - 3 | other - - - - - The data types of all the result - expressions must be convertible to a single output type. - See for more details. - - - - There is a simple form of CASE expression - that is a variant of the general form above: - - -CASE expression - WHEN value THEN result - WHEN ... - ELSE result -END - - - The first - expression is computed, then compared to - each of the value expressions in the - WHEN clauses until one is found that is equal to it. If - no match is found, the result of the - ELSE clause (or a null value) is returned. This is similar - to the switch statement in C. - - - - The example above can be written using the simple - CASE syntax: - -SELECT a, - CASE a WHEN 1 THEN 'one' - WHEN 2 THEN 'two' - ELSE 'other' - END - FROM test; - - a | case ----+------- - 1 | one - 2 | two - 3 | other - - - - - A CASE expression does not evaluate any subexpressions - that are not needed to determine the result. For example, this is a - possible way of avoiding a division-by-zero failure: - -SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; - - - - - - As described in , there are various - situations in which subexpressions of an expression are evaluated at - different times, so that the principle that CASE - evaluates only necessary subexpressions is not ironclad. For - example a constant 1/0 subexpression will usually result in - a division-by-zero failure at planning time, even if it's within - a CASE arm that would never be entered at run time. - - - - - - <literal>COALESCE</literal> - - - COALESCE - - - - NVL - - - - IFNULL - - - -COALESCE(value , ...) - - - - The COALESCE function returns the first of its - arguments that is not null. Null is returned only if all arguments - are null. It is often used to substitute a default value for - null values when data is retrieved for display, for example: - -SELECT COALESCE(description, short_description, '(none)') ... - - This returns description if it is not null, otherwise - short_description if it is not null, otherwise (none). - - - - The arguments must all be convertible to a common data type, which - will be the type of the result (see - for details). - - - - Like a CASE expression, COALESCE only - evaluates the arguments that are needed to determine the result; - that is, arguments to the right of the first non-null argument are - not evaluated. This SQL-standard function provides capabilities similar - to NVL and IFNULL, which are used in some other - database systems. - - - - - <literal>NULLIF</literal> - - - NULLIF - - - -NULLIF(value1, value2) - - - - The NULLIF function returns a null value if - value1 equals value2; - otherwise it returns value1. - This can be used to perform the inverse operation of the - COALESCE example given above: - -SELECT NULLIF(value, '(none)') ... - - In this example, if value is (none), - null is returned, otherwise the value of value - is returned. - - - - The two arguments must be of comparable types. - To be specific, they are compared exactly as if you had - written value1 - = value2, so there must be a - suitable = operator available. - - - - The result has the same type as the first argument — but there is - a subtlety. What is actually returned is the first argument of the - implied = operator, and in some cases that will have - been promoted to match the second argument's type. For - example, NULLIF(1, 2.2) yields numeric, - because there is no integer = - numeric operator, - only numeric = numeric. - - - - - - <literal>GREATEST</literal> and <literal>LEAST</literal> - - - GREATEST - - - LEAST - - - -GREATEST(value , ...) - - -LEAST(value , ...) - - - - The GREATEST and LEAST functions select the - largest or smallest value from a list of any number of expressions. - The expressions must all be convertible to a common data type, which - will be the type of the result - (see for details). - - - - NULL values in the argument list are ignored. The result will be NULL - only if all the expressions evaluate to NULL. (This is a deviation from - the SQL standard. According to the standard, the return value is NULL if - any argument is NULL. Some other databases behave this way.) - - - - - - Array Functions and Operators - - - shows the specialized operators - available for array types. - In addition to those, the usual comparison operators shown in are available for - arrays. The comparison operators compare the array contents - element-by-element, using the default B-tree comparison function for - the element data type, and sort based on the first difference. - In multidimensional arrays the elements are visited in row-major order - (last subscript varies most rapidly). - If the contents of two arrays are equal but the dimensionality is - different, the first difference in the dimensionality information - determines the sort order. - - - - Array Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - anyarray @> anyarray - boolean - - - Does the first array contain the second, that is, does each element - appearing in the second array equal some element of the first array? - (Duplicates are not treated specially, - thus ARRAY[1] and ARRAY[1,1] are - each considered to contain the other.) - - - ARRAY[1,4,3] @> ARRAY[3,1,3] - t - - - - - - anyarray <@ anyarray - boolean - - - Is the first array contained by the second? - - - ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] - t - - - - - - anyarray && anyarray - boolean - - - Do the arrays overlap, that is, have any elements in common? - - - ARRAY[1,4,3] && ARRAY[2,1] - t - - - - - - anycompatiblearray || anycompatiblearray - anycompatiblearray - - - Concatenates the two arrays. Concatenating a null or empty array is a - no-op; otherwise the arrays must have the same number of dimensions - (as illustrated by the first example) or differ in number of - dimensions by one (as illustrated by the second). - If the arrays are not of identical element types, they will be coerced - to a common type (see ). - - - ARRAY[1,2,3] || ARRAY[4,5,6,7] - {1,2,3,4,5,6,7} - - - ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9.9]] - {{1,2,3},{4,5,6},{7,8,9.9}} - - - - - - anycompatible || anycompatiblearray - anycompatiblearray - - - Concatenates an element onto the front of an array (which must be - empty or one-dimensional). - - - 3 || ARRAY[4,5,6] - {3,4,5,6} - - - - - - anycompatiblearray || anycompatible - anycompatiblearray - - - Concatenates an element onto the end of an array (which must be - empty or one-dimensional). - - - ARRAY[4,5,6] || 7 - {4,5,6,7} - - - - -
- - - See for more details about array operator - behavior. See for more details about - which operators support indexed operations. - - - - shows the functions - available for use with array types. See - for more information and examples of the use of these functions. - - - - Array Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - array_append - - array_append ( anycompatiblearray, anycompatible ) - anycompatiblearray - - - Appends an element to the end of an array (same as - the anycompatiblearray || anycompatible - operator). - - - array_append(ARRAY[1,2], 3) - {1,2,3} - - - - - - - array_cat - - array_cat ( anycompatiblearray, anycompatiblearray ) - anycompatiblearray - - - Concatenates two arrays (same as - the anycompatiblearray || anycompatiblearray - operator). - - - array_cat(ARRAY[1,2,3], ARRAY[4,5]) - {1,2,3,4,5} - - - - - - - array_dims - - array_dims ( anyarray ) - text - - - Returns a text representation of the array's dimensions. - - - array_dims(ARRAY[[1,2,3], [4,5,6]]) - [1:2][1:3] - - - - - - - array_fill - - array_fill ( anyelement, integer[] - , integer[] ) - anyarray - - - Returns an array filled with copies of the given value, having - dimensions of the lengths specified by the second argument. - The optional third argument supplies lower-bound values for each - dimension (which default to all 1). - - - array_fill(11, ARRAY[2,3]) - {{11,11,11},{11,11,11}} - - - array_fill(7, ARRAY[3], ARRAY[2]) - [2:4]={7,7,7} - - - - - - - array_length - - array_length ( anyarray, integer ) - integer - - - Returns the length of the requested array dimension. - (Produces NULL instead of 0 for empty or missing array dimensions.) - - - array_length(array[1,2,3], 1) - 3 - - - array_length(array[]::int[], 1) - NULL - - - array_length(array['text'], 2) - NULL - - - - - - - array_lower - - array_lower ( anyarray, integer ) - integer - - - Returns the lower bound of the requested array dimension. - - - array_lower('[0:2]={1,2,3}'::integer[], 1) - 0 - - - - - - - array_ndims - - array_ndims ( anyarray ) - integer - - - Returns the number of dimensions of the array. - - - array_ndims(ARRAY[[1,2,3], [4,5,6]]) - 2 - - - - - - - array_position - - array_position ( anycompatiblearray, anycompatible , integer ) - integer - - - Returns the subscript of the first occurrence of the second argument - in the array, or NULL if it's not present. - If the third argument is given, the search begins at that subscript. - The array must be one-dimensional. - Comparisons are done using IS NOT DISTINCT FROM - semantics, so it is possible to search for NULL. - - - array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') - 2 - - - - - - - array_positions - - array_positions ( anycompatiblearray, anycompatible ) - integer[] - - - Returns an array of the subscripts of all occurrences of the second - argument in the array given as first argument. - The array must be one-dimensional. - Comparisons are done using IS NOT DISTINCT FROM - semantics, so it is possible to search for NULL. - NULL is returned only if the array - is NULL; if the value is not found in the array, an - empty array is returned. - - - array_positions(ARRAY['A','A','B','A'], 'A') - {1,2,4} - - - - - - - array_prepend - - array_prepend ( anycompatible, anycompatiblearray ) - anycompatiblearray - - - Prepends an element to the beginning of an array (same as - the anycompatible || anycompatiblearray - operator). - - - array_prepend(1, ARRAY[2,3]) - {1,2,3} - - - - - - - array_remove - - array_remove ( anycompatiblearray, anycompatible ) - anycompatiblearray - - - Removes all elements equal to the given value from the array. - The array must be one-dimensional. - Comparisons are done using IS NOT DISTINCT FROM - semantics, so it is possible to remove NULLs. - - - array_remove(ARRAY[1,2,3,2], 2) - {1,3} - - - - - - - array_replace - - array_replace ( anycompatiblearray, anycompatible, anycompatible ) - anycompatiblearray - - - Replaces each array element equal to the second argument with the - third argument. - - - array_replace(ARRAY[1,2,5,4], 5, 3) - {1,2,3,4} - - - - - - - array_reverse - - array_reverse ( anyarray ) - anyarray - - - Reverses the first dimension of the array. - - - array_reverse(ARRAY[[1,2],[3,4],[5,6]]) - {{5,6},{3,4},{1,2}} - - - - - - - array_sample - - array_sample ( array anyarray, n integer ) - anyarray - - - Returns an array of n items randomly selected - from array. n may not - exceed the length of array's first dimension. - If array is multi-dimensional, - an item is a slice having a given first subscript. - - - array_sample(ARRAY[1,2,3,4,5,6], 3) - {2,6,1} - - - array_sample(ARRAY[[1,2],[3,4],[5,6]], 2) - {{5,6},{1,2}} - - - - - - - array_shuffle - - array_shuffle ( anyarray ) - anyarray - - - Randomly shuffles the first dimension of the array. - - - array_shuffle(ARRAY[[1,2],[3,4],[5,6]]) - {{5,6},{1,2},{3,4}} - - - - - - - array_sort - - array_sort ( - array anyarray - , descending boolean - , nulls_first boolean - ) - anyarray - - - Sorts the first dimension of the array. - The sort order is determined by the default sort ordering of the - array's element type; however, if the element type is collatable, - the collation to use can be specified by adding - a COLLATE clause to - the array argument. - - - If descending is true then sort in - descending order, otherwise ascending order. If omitted, the - default is ascending order. - If nulls_first is true then nulls appear - before non-null values, otherwise nulls appear after non-null - values. - If omitted, nulls_first is taken to have - the same value as descending. - - - array_sort(ARRAY[[2,4],[2,1],[6,5]]) - {{2,1},{2,4},{6,5}} - - - - - - - array_to_string - - array_to_string ( array anyarray, delimiter text , null_string text ) - text - - - Converts each array element to its text representation, and - concatenates those separated by - the delimiter string. - If null_string is given and is - not NULL, then NULL array - entries are represented by that string; otherwise, they are omitted. - See also string_to_array. - - - array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') - 1,2,3,*,5 - - - - - - - array_upper - - array_upper ( anyarray, integer ) - integer - - - Returns the upper bound of the requested array dimension. - - - array_upper(ARRAY[1,8,3,7], 1) - 4 - - - - - - - cardinality - - cardinality ( anyarray ) - integer - - - Returns the total number of elements in the array, or 0 if the array - is empty. - - - cardinality(ARRAY[[1,2],[3,4]]) - 4 - - - - - - - trim_array - - trim_array ( array anyarray, n integer ) - anyarray - - - Trims an array by removing the last n elements. - If the array is multidimensional, only the first dimension is trimmed. - - - trim_array(ARRAY[1,2,3,4,5,6], 2) - {1,2,3,4} - - - - - - - unnest - - unnest ( anyarray ) - setof anyelement - - - Expands an array into a set of rows. - The array's elements are read out in storage order. - - - unnest(ARRAY[1,2]) - - - 1 - 2 - - - - unnest(ARRAY[['foo','bar'],['baz','quux']]) - - - foo - bar - baz - quux - - - - - - - unnest ( anyarray, anyarray , ... ) - setof anyelement, anyelement [, ... ] - - - Expands multiple arrays (possibly of different data types) into a set of - rows. If the arrays are not all the same length then the shorter ones - are padded with NULLs. This form is only allowed - in a query's FROM clause; see . - - - select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b) - - - a | b ----+----- - 1 | foo - 2 | bar - | baz - - - - - -
- - - See also about the aggregate - function array_agg for use with arrays. - -
- - - Range/Multirange Functions and Operators - - - See for an overview of range types. - - - - shows the specialized operators - available for range types. - shows the specialized operators - available for multirange types. - In addition to those, the usual comparison operators shown in - are available for range - and multirange types. The comparison operators order first by the range lower - bounds, and only if those are equal do they compare the upper bounds. The - multirange operators compare each range until one is unequal. This - does not usually result in a useful overall ordering, but the operators are - provided to allow unique indexes to be constructed on ranges. - - - - Range Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - anyrange @> anyrange - boolean - - - Does the first range contain the second? - - - int4range(2,4) @> int4range(2,3) - t - - - - - - anyrange @> anyelement - boolean - - - Does the range contain the element? - - - '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp - t - - - - - - anyrange <@ anyrange - boolean - - - Is the first range contained by the second? - - - int4range(2,4) <@ int4range(1,7) - t - - - - - - anyelement <@ anyrange - boolean - - - Is the element contained in the range? - - - 42 <@ int4range(1,7) - f - - - - - - anyrange && anyrange - boolean - - - Do the ranges overlap, that is, have any elements in common? - - - int8range(3,7) && int8range(4,12) - t - - - - - - anyrange << anyrange - boolean - - - Is the first range strictly left of the second? - - - int8range(1,10) << int8range(100,110) - t - - - - - - anyrange >> anyrange - boolean - - - Is the first range strictly right of the second? - - - int8range(50,60) >> int8range(20,30) - t - - - - - - anyrange &< anyrange - boolean - - - Does the first range not extend to the right of the second? - - - int8range(1,20) &< int8range(18,20) - t - - - - - - anyrange &> anyrange - boolean - - - Does the first range not extend to the left of the second? - - - int8range(7,20) &> int8range(5,10) - t - - - - - - anyrange -|- anyrange - boolean - - - Are the ranges adjacent? - - - numrange(1.1,2.2) -|- numrange(2.2,3.3) - t - - - - - - anyrange + anyrange - anyrange - - - Computes the union of the ranges. The ranges must overlap or be - adjacent, so that the union is a single range (but - see range_merge()). - - - numrange(5,15) + numrange(10,20) - [5,20) - - - - - - anyrange * anyrange - anyrange - - - Computes the intersection of the ranges. - - - int8range(5,15) * int8range(10,20) - [10,15) - - - - - - anyrange - anyrange - anyrange - - - Computes the difference of the ranges. The second range must not be - contained in the first in such a way that the difference would not be - a single range. - - - int8range(5,15) - int8range(10,20) - [5,10) - - - - -
- - - Multirange Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - anymultirange @> anymultirange - boolean - - - Does the first multirange contain the second? - - - '{[2,4)}'::int4multirange @> '{[2,3)}'::int4multirange - t - - - - - - anymultirange @> anyrange - boolean - - - Does the multirange contain the range? - - - '{[2,4)}'::int4multirange @> int4range(2,3) - t - - - - - - anymultirange @> anyelement - boolean - - - Does the multirange contain the element? - - - '{[2011-01-01,2011-03-01)}'::tsmultirange @> '2011-01-10'::timestamp - t - - - - - - anyrange @> anymultirange - boolean - - - Does the range contain the multirange? - - - '[2,4)'::int4range @> '{[2,3)}'::int4multirange - t - - - - - - anymultirange <@ anymultirange - boolean - - - Is the first multirange contained by the second? - - - '{[2,4)}'::int4multirange <@ '{[1,7)}'::int4multirange - t - - - - - - anymultirange <@ anyrange - boolean - - - Is the multirange contained by the range? - - - '{[2,4)}'::int4multirange <@ int4range(1,7) - t - - - - - - anyrange <@ anymultirange - boolean - - - Is the range contained by the multirange? - - - int4range(2,4) <@ '{[1,7)}'::int4multirange - t - - - - - - anyelement <@ anymultirange - boolean - - - Is the element contained by the multirange? - - - 4 <@ '{[1,7)}'::int4multirange - t - - - - - - anymultirange && anymultirange - boolean - - - Do the multiranges overlap, that is, have any elements in common? - - - '{[3,7)}'::int8multirange && '{[4,12)}'::int8multirange - t - - - - - - anymultirange && anyrange - boolean - - - Does the multirange overlap the range? - - - '{[3,7)}'::int8multirange && int8range(4,12) - t - - - - - - anyrange && anymultirange - boolean - - - Does the range overlap the multirange? - - - int8range(3,7) && '{[4,12)}'::int8multirange - t - - - - - - anymultirange << anymultirange - boolean - - - Is the first multirange strictly left of the second? - - - '{[1,10)}'::int8multirange << '{[100,110)}'::int8multirange - t - - - - - - anymultirange << anyrange - boolean - - - Is the multirange strictly left of the range? - - - '{[1,10)}'::int8multirange << int8range(100,110) - t - - - - - - anyrange << anymultirange - boolean - - - Is the range strictly left of the multirange? - - - int8range(1,10) << '{[100,110)}'::int8multirange - t - - - - - - anymultirange >> anymultirange - boolean - - - Is the first multirange strictly right of the second? - - - '{[50,60)}'::int8multirange >> '{[20,30)}'::int8multirange - t - - - - - - anymultirange >> anyrange - boolean - - - Is the multirange strictly right of the range? - - - '{[50,60)}'::int8multirange >> int8range(20,30) - t - - - - - - anyrange >> anymultirange - boolean - - - Is the range strictly right of the multirange? - - - int8range(50,60) >> '{[20,30)}'::int8multirange - t - - - - - - anymultirange &< anymultirange - boolean - - - Does the first multirange not extend to the right of the second? - - - '{[1,20)}'::int8multirange &< '{[18,20)}'::int8multirange - t - - - - - - anymultirange &< anyrange - boolean - - - Does the multirange not extend to the right of the range? - - - '{[1,20)}'::int8multirange &< int8range(18,20) - t - - - - - - anyrange &< anymultirange - boolean - - - Does the range not extend to the right of the multirange? - - - int8range(1,20) &< '{[18,20)}'::int8multirange - t - - - - - - anymultirange &> anymultirange - boolean - - - Does the first multirange not extend to the left of the second? - - - '{[7,20)}'::int8multirange &> '{[5,10)}'::int8multirange - t - - - - - - anymultirange &> anyrange - boolean - - - Does the multirange not extend to the left of the range? - - - '{[7,20)}'::int8multirange &> int8range(5,10) - t - - - - - - anyrange &> anymultirange - boolean - - - Does the range not extend to the left of the multirange? - - - int8range(7,20) &> '{[5,10)}'::int8multirange - t - - - - - - anymultirange -|- anymultirange - boolean - - - Are the multiranges adjacent? - - - '{[1.1,2.2)}'::nummultirange -|- '{[2.2,3.3)}'::nummultirange - t - - - - - - anymultirange -|- anyrange - boolean - - - Is the multirange adjacent to the range? - - - '{[1.1,2.2)}'::nummultirange -|- numrange(2.2,3.3) - t - - - - - - anyrange -|- anymultirange - boolean - - - Is the range adjacent to the multirange? - - - numrange(1.1,2.2) -|- '{[2.2,3.3)}'::nummultirange - t - - - - - - anymultirange + anymultirange - anymultirange - - - Computes the union of the multiranges. The multiranges need not overlap - or be adjacent. - - - '{[5,10)}'::nummultirange + '{[15,20)}'::nummultirange - {[5,10), [15,20)} - - - - - - anymultirange * anymultirange - anymultirange - - - Computes the intersection of the multiranges. - - - '{[5,15)}'::int8multirange * '{[10,20)}'::int8multirange - {[10,15)} - - - - - - anymultirange - anymultirange - anymultirange - - - Computes the difference of the multiranges. - - - '{[5,20)}'::int8multirange - '{[10,15)}'::int8multirange - {[5,10), [15,20)} - - - - -
- - - The left-of/right-of/adjacent operators always return false when an empty - range or multirange is involved; that is, an empty range is not considered to - be either before or after any other range. - - - - Elsewhere empty ranges and multiranges are treated as the additive identity: - anything unioned with an empty value is itself. Anything minus an empty - value is itself. An empty multirange has exactly the same points as an empty - range. Every range contains the empty range. Every multirange contains as many - empty ranges as you like. - - - - The range union and difference operators will fail if the resulting range would - need to contain two disjoint sub-ranges, as such a range cannot be - represented. There are separate operators for union and difference that take - multirange parameters and return a multirange, and they do not fail even if - their arguments are disjoint. So if you need a union or difference operation - for ranges that may be disjoint, you can avoid errors by first casting your - ranges to multiranges. - - - - shows the functions - available for use with range types. - shows the functions - available for use with multirange types. - - - - Range Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - lower - - lower ( anyrange ) - anyelement - - - Extracts the lower bound of the range (NULL if the - range is empty or has no lower bound). - - - lower(numrange(1.1,2.2)) - 1.1 - - - - - - - upper - - upper ( anyrange ) - anyelement - - - Extracts the upper bound of the range (NULL if the - range is empty or has no upper bound). - - - upper(numrange(1.1,2.2)) - 2.2 - - - - - - - isempty - - isempty ( anyrange ) - boolean - - - Is the range empty? - - - isempty(numrange(1.1,2.2)) - f - - - - - - - lower_inc - - lower_inc ( anyrange ) - boolean - - - Is the range's lower bound inclusive? - - - lower_inc(numrange(1.1,2.2)) - t - - - - - - - upper_inc - - upper_inc ( anyrange ) - boolean - - - Is the range's upper bound inclusive? - - - upper_inc(numrange(1.1,2.2)) - f - - - - - - - lower_inf - - lower_inf ( anyrange ) - boolean - - - Does the range have no lower bound? (A lower bound of - -Infinity returns false.) - - - lower_inf('(,)'::daterange) - t - - - - - - - upper_inf - - upper_inf ( anyrange ) - boolean - - - Does the range have no upper bound? (An upper bound of - Infinity returns false.) - - - upper_inf('(,)'::daterange) - t - - - - - - - range_merge - - range_merge ( anyrange, anyrange ) - anyrange - - - Computes the smallest range that includes both of the given ranges. - - - range_merge('[1,2)'::int4range, '[3,4)'::int4range) - [1,4) - - - - -
- - - Multirange Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - lower - - lower ( anymultirange ) - anyelement - - - Extracts the lower bound of the multirange (NULL if the - multirange is empty or has no lower bound). - - - lower('{[1.1,2.2)}'::nummultirange) - 1.1 - - - - - - - upper - - upper ( anymultirange ) - anyelement - - - Extracts the upper bound of the multirange (NULL if the - multirange is empty or has no upper bound). - - - upper('{[1.1,2.2)}'::nummultirange) - 2.2 - - - - - - - isempty - - isempty ( anymultirange ) - boolean - - - Is the multirange empty? - - - isempty('{[1.1,2.2)}'::nummultirange) - f - - - - - - - lower_inc - - lower_inc ( anymultirange ) - boolean - - - Is the multirange's lower bound inclusive? - - - lower_inc('{[1.1,2.2)}'::nummultirange) - t - - - - - - - upper_inc - - upper_inc ( anymultirange ) - boolean - - - Is the multirange's upper bound inclusive? - - - upper_inc('{[1.1,2.2)}'::nummultirange) - f - - - - - - - lower_inf - - lower_inf ( anymultirange ) - boolean - - - Does the multirange have no lower bound? (A lower bound of - -Infinity returns false.) - - - lower_inf('{(,)}'::datemultirange) - t - - - - - - - upper_inf - - upper_inf ( anymultirange ) - boolean - - - Does the multirange have no upper bound? (An upper bound of - Infinity returns false.) - - - upper_inf('{(,)}'::datemultirange) - t - - - - - - - range_merge - - range_merge ( anymultirange ) - anyrange - - - Computes the smallest range that includes the entire multirange. - - - range_merge('{[1,2), [3,4)}'::int4multirange) - [1,4) - - - - - - - multirange (function) - - multirange ( anyrange ) - anymultirange - - - Returns a multirange containing just the given range. - - - multirange('[1,2)'::int4range) - {[1,2)} - - - - - - - unnest - for multirange - - unnest ( anymultirange ) - setof anyrange - - - Expands a multirange into a set of ranges in ascending order. - - - unnest('{[1,2), [3,4)}'::int4multirange) - - - [1,2) - [3,4) - - - - - -
- - - The lower_inc, upper_inc, - lower_inf, and upper_inf - functions all return false for an empty range or multirange. - -
- - - Aggregate Functions - - - aggregate function - built-in - - - - Aggregate functions compute a single result - from a set of input values. The built-in general-purpose aggregate - functions are listed in - while statistical aggregates are in . - The built-in within-group ordered-set aggregate functions - are listed in - while the built-in within-group hypothetical-set ones are in . Grouping operations, - which are closely related to aggregate functions, are listed in - . - The special syntax considerations for aggregate - functions are explained in . - Consult for additional introductory - information. - - - - Aggregate functions that support Partial Mode - are eligible to participate in various optimizations, such as parallel - aggregation. - - - - While all aggregates below accept an optional - ORDER BY clause (as outlined in ), the clause has only been added to - aggregates whose output is affected by ordering. - - - - General-Purpose Aggregate Functions - - - - - - - Function - - - Description - - Partial Mode - - - - - - - - any_value - - any_value ( anyelement ) - same as input type - - - Returns an arbitrary value from the non-null input values. - - Yes - - - - - - array_agg - - array_agg ( anynonarray ORDER BY input_sort_columns ) - anyarray - - - Collects all the input values, including nulls, into an array. - - Yes - - - - - array_agg ( anyarray ORDER BY input_sort_columns ) - anyarray - - - Concatenates all the input arrays into an array of one higher - dimension. (The inputs must all have the same dimensionality, and - cannot be empty or null.) - - Yes - - - - - - average - - - avg - - avg ( smallint ) - numeric - - - avg ( integer ) - numeric - - - avg ( bigint ) - numeric - - - avg ( numeric ) - numeric - - - avg ( real ) - double precision - - - avg ( double precision ) - double precision - - - avg ( interval ) - interval - - - Computes the average (arithmetic mean) of all the non-null input - values. - - Yes - - - - - - bit_and - - bit_and ( smallint ) - smallint - - - bit_and ( integer ) - integer - - - bit_and ( bigint ) - bigint - - - bit_and ( bit ) - bit - - - Computes the bitwise AND of all non-null input values. - - Yes - - - - - - bit_or - - bit_or ( smallint ) - smallint - - - bit_or ( integer ) - integer - - - bit_or ( bigint ) - bigint - - - bit_or ( bit ) - bit - - - Computes the bitwise OR of all non-null input values. - - Yes - - - - - - bit_xor - - bit_xor ( smallint ) - smallint - - - bit_xor ( integer ) - integer - - - bit_xor ( bigint ) - bigint - - - bit_xor ( bit ) - bit - - - Computes the bitwise exclusive OR of all non-null input values. - Can be useful as a checksum for an unordered set of values. - - Yes - - - - - - bool_and - - bool_and ( boolean ) - boolean - - - Returns true if all non-null input values are true, otherwise false. - - Yes - - - - - - bool_or - - bool_or ( boolean ) - boolean - - - Returns true if any non-null input value is true, otherwise false. - - Yes - - - - - - count - - count ( * ) - bigint - - - Computes the number of input rows. - - Yes - - - - - count ( "any" ) - bigint - - - Computes the number of input rows in which the input value is not - null. - - Yes - - - - - - every - - every ( boolean ) - boolean - - - This is the SQL standard's equivalent to bool_and. - - Yes - - - - - - json_agg - - json_agg ( anyelement ORDER BY input_sort_columns ) - json - - - - jsonb_agg - - jsonb_agg ( anyelement ORDER BY input_sort_columns ) - jsonb - - - Collects all the input values, including nulls, into a JSON array. - Values are converted to JSON as per to_json - or to_jsonb. - - No - - - - - - json_agg_strict - - json_agg_strict ( anyelement ) - json - - - - jsonb_agg_strict - - jsonb_agg_strict ( anyelement ) - jsonb - - - Collects all the input values, skipping nulls, into a JSON array. - Values are converted to JSON as per to_json - or to_jsonb. - - No - - - - - json_arrayagg - json_arrayagg ( - value_expression - ORDER BY sort_expression - { NULL | ABSENT } ON NULL - RETURNING data_type FORMAT JSON ENCODING UTF8 ) - - - Behaves in the same way as json_array - but as an aggregate function so it only takes one - value_expression parameter. - If ABSENT ON NULL is specified, any NULL - values are omitted. - If ORDER BY is specified, the elements will - appear in the array in that order rather than in the input order. - - - SELECT json_arrayagg(v) FROM (VALUES(2),(1)) t(v) - [2, 1] - - No - - - - - json_objectagg - json_objectagg ( - { key_expression { VALUE | ':' } value_expression } - { NULL | ABSENT } ON NULL - { WITH | WITHOUT } UNIQUE KEYS - RETURNING data_type FORMAT JSON ENCODING UTF8 ) - - - Behaves like json_object, but as an - aggregate function, so it only takes one - key_expression and one - value_expression parameter. - - - SELECT json_objectagg(k:v) FROM (VALUES ('a'::text,current_date),('b',current_date + 1)) AS t(k,v) - { "a" : "2022-05-10", "b" : "2022-05-11" } - - No - - - - - - json_object_agg - - json_object_agg ( key - "any", value - "any" - ORDER BY input_sort_columns ) - json - - - - jsonb_object_agg - - jsonb_object_agg ( key - "any", value - "any" - ORDER BY input_sort_columns ) - jsonb - - - Collects all the key/value pairs into a JSON object. Key arguments - are coerced to text; value arguments are converted as per - to_json or to_jsonb. - Values can be null, but keys cannot. - - No - - - - - - json_object_agg_strict - - json_object_agg_strict ( - key "any", - value "any" ) - json - - - - jsonb_object_agg_strict - - jsonb_object_agg_strict ( - key "any", - value "any" ) - jsonb - - - Collects all the key/value pairs into a JSON object. Key arguments - are coerced to text; value arguments are converted as per - to_json or to_jsonb. - The key can not be null. If the - value is null then the entry is skipped, - - No - - - - - - json_object_agg_unique - - json_object_agg_unique ( - key "any", - value "any" ) - json - - - - jsonb_object_agg_unique - - jsonb_object_agg_unique ( - key "any", - value "any" ) - jsonb - - - Collects all the key/value pairs into a JSON object. Key arguments - are coerced to text; value arguments are converted as per - to_json or to_jsonb. - Values can be null, but keys cannot. - If there is a duplicate key an error is thrown. - - No - - - - - - json_object_agg_unique_strict - - json_object_agg_unique_strict ( - key "any", - value "any" ) - json - - - - jsonb_object_agg_unique_strict - - jsonb_object_agg_unique_strict ( - key "any", - value "any" ) - jsonb - - - Collects all the key/value pairs into a JSON object. Key arguments - are coerced to text; value arguments are converted as per - to_json or to_jsonb. - The key can not be null. If the - value is null then the entry is skipped. - If there is a duplicate key an error is thrown. - - No - - - - - - max - - max ( see text ) - same as input type - - - Computes the maximum of the non-null input - values. Available for any numeric, string, date/time, or enum type, - as well as bytea, inet, interval, - money, oid, pg_lsn, - tid, xid8, - and also arrays and composite types containing sortable data types. - - Yes - - - - - - min - - min ( see text ) - same as input type - - - Computes the minimum of the non-null input - values. Available for any numeric, string, date/time, or enum type, - as well as bytea, inet, interval, - money, oid, pg_lsn, - tid, xid8, - and also arrays and composite types containing sortable data types. - - Yes - - - - - - range_agg - - range_agg ( value - anyrange ) - anymultirange - - - range_agg ( value - anymultirange ) - anymultirange - - - Computes the union of the non-null input values. - - No - - - - - - range_intersect_agg - - range_intersect_agg ( value - anyrange ) - anyrange - - - range_intersect_agg ( value - anymultirange ) - anymultirange - - - Computes the intersection of the non-null input values. - - No - - - - - - string_agg - - string_agg ( value - text, delimiter text ) - text - - - string_agg ( value - bytea, delimiter bytea - ORDER BY input_sort_columns ) - bytea - - - Concatenates the non-null input values into a string. Each value - after the first is preceded by the - corresponding delimiter (if it's not null). - - Yes - - - - - - sum - - sum ( smallint ) - bigint - - - sum ( integer ) - bigint - - - sum ( bigint ) - numeric - - - sum ( numeric ) - numeric - - - sum ( real ) - real - - - sum ( double precision ) - double precision - - - sum ( interval ) - interval - - - sum ( money ) - money - - - Computes the sum of the non-null input values. - - Yes - - - - - - xmlagg - - xmlagg ( xml ORDER BY input_sort_columns ) - xml - - - Concatenates the non-null XML input values (see - ). - - No - - - -
- - - It should be noted that except for count, - these functions return a null value when no rows are selected. In - particular, sum of no rows returns null, not - zero as one might expect, and array_agg - returns null rather than an empty array when there are no input - rows. The coalesce function can be used to - substitute zero or an empty array for null when necessary. - - - - The aggregate functions array_agg, - json_agg, jsonb_agg, - json_agg_strict, jsonb_agg_strict, - json_object_agg, jsonb_object_agg, - json_object_agg_strict, jsonb_object_agg_strict, - json_object_agg_unique, jsonb_object_agg_unique, - json_object_agg_unique_strict, - jsonb_object_agg_unique_strict, - string_agg, - and xmlagg, as well as similar user-defined - aggregate functions, produce meaningfully different result values - depending on the order of the input values. This ordering is - unspecified by default, but can be controlled by writing an - ORDER BY clause within the aggregate call, as shown in - . - Alternatively, supplying the input values from a sorted subquery - will usually work. For example: - - - - Beware that this approach can fail if the outer query level contains - additional processing, such as a join, because that might cause the - subquery's output to be reordered before the aggregate is computed. - - - - - ANY - - - SOME - - - The boolean aggregates bool_and and - bool_or correspond to the standard SQL aggregates - every and any or - some. - PostgreSQL - supports every, but not any - or some, because there is an ambiguity built into - the standard syntax: - -SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...; - - Here ANY can be considered either as introducing - a subquery, or as being an aggregate function, if the subquery - returns one row with a Boolean value. - Thus the standard name cannot be given to these aggregates. - - - - - - Users accustomed to working with other SQL database management - systems might be disappointed by the performance of the - count aggregate when it is applied to the - entire table. A query like: - -SELECT count(*) FROM sometable; - - will require effort proportional to the size of the table: - PostgreSQL will need to scan either the - entire table or the entirety of an index that includes all rows in - the table. - - - - - shows - aggregate functions typically used in statistical analysis. - (These are separated out merely to avoid cluttering the listing - of more-commonly-used aggregates.) Functions shown as - accepting numeric_type are available for all - the types smallint, integer, - bigint, numeric, real, - and double precision. - Where the description mentions - N, it means the - number of input rows for which all the input expressions are non-null. - In all cases, null is returned if the computation is meaningless, - for example when N is zero. - - - - statistics - - - linear regression - - - - Aggregate Functions for Statistics - - - - - - - Function - - - Description - - Partial Mode - - - - - - - - correlation - - - corr - - corr ( Y double precision, X double precision ) - double precision - - - Computes the correlation coefficient. - - Yes - - - - - - covariance - population - - - covar_pop - - covar_pop ( Y double precision, X double precision ) - double precision - - - Computes the population covariance. - - Yes - - - - - - covariance - sample - - - covar_samp - - covar_samp ( Y double precision, X double precision ) - double precision - - - Computes the sample covariance. - - Yes - - - - - - regr_avgx - - regr_avgx ( Y double precision, X double precision ) - double precision - - - Computes the average of the independent variable, - sum(X)/N. - - Yes - - - - - - regr_avgy - - regr_avgy ( Y double precision, X double precision ) - double precision - - - Computes the average of the dependent variable, - sum(Y)/N. - - Yes - - - - - - regr_count - - regr_count ( Y double precision, X double precision ) - bigint - - - Computes the number of rows in which both inputs are non-null. - - Yes - - - - - - regression intercept - - - regr_intercept - - regr_intercept ( Y double precision, X double precision ) - double precision - - - Computes the y-intercept of the least-squares-fit linear equation - determined by the - (X, Y) pairs. - - Yes - - - - - - regr_r2 - - regr_r2 ( Y double precision, X double precision ) - double precision - - - Computes the square of the correlation coefficient. - - Yes - - - - - - regression slope - - - regr_slope - - regr_slope ( Y double precision, X double precision ) - double precision - - - Computes the slope of the least-squares-fit linear equation determined - by the (X, Y) - pairs. - - Yes - - - - - - regr_sxx - - regr_sxx ( Y double precision, X double precision ) - double precision - - - Computes the sum of squares of the independent - variable, - sum(X^2) - sum(X)^2/N. - - Yes - - - - - - regr_sxy - - regr_sxy ( Y double precision, X double precision ) - double precision - - - Computes the sum of products of independent times - dependent variables, - sum(X*Y) - sum(X) * sum(Y)/N. - - Yes - - - - - - regr_syy - - regr_syy ( Y double precision, X double precision ) - double precision - - - Computes the sum of squares of the dependent - variable, - sum(Y^2) - sum(Y)^2/N. - - Yes - - - - - - standard deviation - - - stddev - - stddev ( numeric_type ) - double precision - for real or double precision, - otherwise numeric - - - This is a historical alias for stddev_samp. - - Yes - - - - - - standard deviation - population - - - stddev_pop - - stddev_pop ( numeric_type ) - double precision - for real or double precision, - otherwise numeric - - - Computes the population standard deviation of the input values. - - Yes - - - - - - standard deviation - sample - - - stddev_samp - - stddev_samp ( numeric_type ) - double precision - for real or double precision, - otherwise numeric - - - Computes the sample standard deviation of the input values. - - Yes - - - - - - variance - - variance ( numeric_type ) - double precision - for real or double precision, - otherwise numeric - - - This is a historical alias for var_samp. - - Yes - - - - - - variance - population - - - var_pop - - var_pop ( numeric_type ) - double precision - for real or double precision, - otherwise numeric - - - Computes the population variance of the input values (square of the - population standard deviation). - - Yes - - - - - - variance - sample - - - var_samp - - var_samp ( numeric_type ) - double precision - for real or double precision, - otherwise numeric - - - Computes the sample variance of the input values (square of the sample - standard deviation). - - Yes - - - -
- - - shows some - aggregate functions that use the ordered-set aggregate - syntax. These functions are sometimes referred to as inverse - distribution functions. Their aggregated input is introduced by - ORDER BY, and they may also take a direct - argument that is not aggregated, but is computed only once. - All these functions ignore null values in their aggregated input. - For those that take a fraction parameter, the - fraction value must be between 0 and 1; an error is thrown if not. - However, a null fraction value simply produces a - null result. - - - - ordered-set aggregate - built-in - - - inverse distribution - - - - Ordered-Set Aggregate Functions - - - - - - - Function - - - Description - - Partial Mode - - - - - - - - mode - statistical - - mode () WITHIN GROUP ( ORDER BY anyelement ) - anyelement - - - Computes the mode, the most frequent - value of the aggregated argument (arbitrarily choosing the first one - if there are multiple equally-frequent values). The aggregated - argument must be of a sortable type. - - No - - - - - - percentile - continuous - - percentile_cont ( fraction double precision ) WITHIN GROUP ( ORDER BY double precision ) - double precision - - - percentile_cont ( fraction double precision ) WITHIN GROUP ( ORDER BY interval ) - interval - - - Computes the continuous percentile, a value - corresponding to the specified fraction - within the ordered set of aggregated argument values. This will - interpolate between adjacent input items if needed. - - No - - - - - percentile_cont ( fractions double precision[] ) WITHIN GROUP ( ORDER BY double precision ) - double precision[] - - - percentile_cont ( fractions double precision[] ) WITHIN GROUP ( ORDER BY interval ) - interval[] - - - Computes multiple continuous percentiles. The result is an array of - the same dimensions as the fractions - parameter, with each non-null element replaced by the (possibly - interpolated) value corresponding to that percentile. - - No - - - - - - percentile - discrete - - percentile_disc ( fraction double precision ) WITHIN GROUP ( ORDER BY anyelement ) - anyelement - - - Computes the discrete percentile, the first - value within the ordered set of aggregated argument values whose - position in the ordering equals or exceeds the - specified fraction. The aggregated - argument must be of a sortable type. - - No - - - - - percentile_disc ( fractions double precision[] ) WITHIN GROUP ( ORDER BY anyelement ) - anyarray - - - Computes multiple discrete percentiles. The result is an array of the - same dimensions as the fractions parameter, - with each non-null element replaced by the input value corresponding - to that percentile. - The aggregated argument must be of a sortable type. - - No - - - -
- - - hypothetical-set aggregate - built-in - - - - Each of the hypothetical-set aggregates listed in - is associated with a - window function of the same name defined in - . In each case, the aggregate's result - is the value that the associated window function would have - returned for the hypothetical row constructed from - args, if such a row had been added to the sorted - group of rows represented by the sorted_args. - For each of these functions, the list of direct arguments - given in args must match the number and types of - the aggregated arguments given in sorted_args. - Unlike most built-in aggregates, these aggregates are not strict, that is - they do not drop input rows containing nulls. Null values sort according - to the rule specified in the ORDER BY clause. - - - - Hypothetical-Set Aggregate Functions - - - - - - - Function - - - Description - - Partial Mode - - - - - - - - rank - hypothetical - - rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) - bigint - - - Computes the rank of the hypothetical row, with gaps; that is, the row - number of the first row in its peer group. - - No - - - - - - dense_rank - hypothetical - - dense_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) - bigint - - - Computes the rank of the hypothetical row, without gaps; this function - effectively counts peer groups. - - No - - - - - - percent_rank - hypothetical - - percent_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) - double precision - - - Computes the relative rank of the hypothetical row, that is - (rank - 1) / (total rows - 1). - The value thus ranges from 0 to 1 inclusive. - - No - - - - - - cume_dist - hypothetical - - cume_dist ( args ) WITHIN GROUP ( ORDER BY sorted_args ) - double precision - - - Computes the cumulative distribution, that is (number of rows - preceding or peers with hypothetical row) / (total rows). The value - thus ranges from 1/N to 1. - - No - - - -
- - - Grouping Operations - - - - - Function - - - Description - - - - - - - - - GROUPING - - GROUPING ( group_by_expression(s) ) - integer - - - Returns a bit mask indicating which GROUP BY - expressions are not included in the current grouping set. - Bits are assigned with the rightmost argument corresponding to the - least-significant bit; each bit is 0 if the corresponding expression - is included in the grouping criteria of the grouping set generating - the current result row, and 1 if it is not included. - - - - -
- - - The grouping operations shown in - are used in conjunction with - grouping sets (see ) to distinguish - result rows. The arguments to the GROUPING function - are not actually evaluated, but they must exactly match expressions given - in the GROUP BY clause of the associated query level. - For example: - -=> SELECT * FROM items_sold; - make | model | sales --------+-------+------- - Foo | GT | 10 - Foo | Tour | 20 - Bar | City | 15 - Bar | Sport | 5 -(4 rows) - -=> SELECT make, model, GROUPING(make,model), sum(sales) FROM items_sold GROUP BY ROLLUP(make,model); - make | model | grouping | sum --------+-------+----------+----- - Foo | GT | 0 | 10 - Foo | Tour | 0 | 20 - Bar | City | 0 | 15 - Bar | Sport | 0 | 5 - Foo | | 1 | 30 - Bar | | 1 | 20 - | | 3 | 50 -(7 rows) - - Here, the grouping value 0 in the - first four rows shows that those have been grouped normally, over both the - grouping columns. The value 1 indicates - that model was not grouped by in the next-to-last two - rows, and the value 3 indicates that - neither make nor model was grouped - by in the last row (which therefore is an aggregate over all the input - rows). - - -
- - - Window Functions - - - window function - built-in - - - - Window functions provide the ability to perform - calculations across sets of rows that are related to the current query - row. See for an introduction to this - feature, and for syntax - details. - - - - The built-in window functions are listed in - . Note that these functions - must be invoked using window function syntax, i.e., an - OVER clause is required. - - - - In addition to these functions, any built-in or user-defined - ordinary aggregate (i.e., not ordered-set or hypothetical-set aggregates) - can be used as a window function; see - for a list of the built-in aggregates. - Aggregate functions act as window functions only when an OVER - clause follows the call; otherwise they act as plain aggregates - and return a single row for the entire set. - - - - General-Purpose Window Functions - - - - - Function - - - Description - - - - - - - - - row_number - - row_number () - bigint - - - Returns the number of the current row within its partition, counting - from 1. - - - - - - - rank - - rank () - bigint - - - Returns the rank of the current row, with gaps; that is, - the row_number of the first row in its peer - group. - - - - - - - dense_rank - - dense_rank () - bigint - - - Returns the rank of the current row, without gaps; this function - effectively counts peer groups. - - - - - - - percent_rank - - percent_rank () - double precision - - - Returns the relative rank of the current row, that is - (rank - 1) / (total partition rows - 1). - The value thus ranges from 0 to 1 inclusive. - - - - - - - cume_dist - - cume_dist () - double precision - - - Returns the cumulative distribution, that is (number of partition rows - preceding or peers with current row) / (total partition rows). - The value thus ranges from 1/N to 1. - - - - - - - ntile - - ntile ( num_buckets integer ) - integer - - - Returns an integer ranging from 1 to the argument value, dividing the - partition as equally as possible. - - - - - - - lag - - lag ( value anycompatible - , offset integer - , default anycompatible ) - anycompatible - - - Returns value evaluated at - the row that is offset - rows before the current row within the partition; if there is no such - row, instead returns default - (which must be of a type compatible with - value). - Both offset and - default are evaluated - with respect to the current row. If omitted, - offset defaults to 1 and - default to NULL. - - - - - - - lead - - lead ( value anycompatible - , offset integer - , default anycompatible ) - anycompatible - - - Returns value evaluated at - the row that is offset - rows after the current row within the partition; if there is no such - row, instead returns default - (which must be of a type compatible with - value). - Both offset and - default are evaluated - with respect to the current row. If omitted, - offset defaults to 1 and - default to NULL. - - - - - - - first_value - - first_value ( value anyelement ) - anyelement - - - Returns value evaluated - at the row that is the first row of the window frame. - - - - - - - last_value - - last_value ( value anyelement ) - anyelement - - - Returns value evaluated - at the row that is the last row of the window frame. - - - - - - - nth_value - - nth_value ( value anyelement, n integer ) - anyelement - - - Returns value evaluated - at the row that is the n'th - row of the window frame (counting from 1); - returns NULL if there is no such row. - - - - -
- - - All of the functions listed in - depend on the sort ordering - specified by the ORDER BY clause of the associated window - definition. Rows that are not distinct when considering only the - ORDER BY columns are said to be peers. - The four ranking functions (including cume_dist) are - defined so that they give the same answer for all rows of a peer group. - - - - Note that first_value, last_value, and - nth_value consider only the rows within the window - frame, which by default contains the rows from the start of the - partition through the last peer of the current row. This is - likely to give unhelpful results for last_value and - sometimes also nth_value. You can redefine the frame by - adding a suitable frame specification (RANGE, - ROWS or GROUPS) to - the OVER clause. - See for more information - about frame specifications. - - - - When an aggregate function is used as a window function, it aggregates - over the rows within the current row's window frame. - An aggregate used with ORDER BY and the default window frame - definition produces a running sum type of behavior, which may or - may not be what's wanted. To obtain - aggregation over the whole partition, omit ORDER BY or use - ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. - Other frame specifications can be used to obtain other effects. - - - - - The SQL standard defines a RESPECT NULLS or - IGNORE NULLS option for lead, lag, - first_value, last_value, and - nth_value. This is not implemented in - PostgreSQL: the behavior is always the - same as the standard's default, namely RESPECT NULLS. - Likewise, the standard's FROM FIRST or FROM LAST - option for nth_value is not implemented: only the - default FROM FIRST behavior is supported. (You can achieve - the result of FROM LAST by reversing the ORDER BY - ordering.) - - - -
- - - Merge Support Functions - - - MERGE - RETURNING - - - - PostgreSQL includes one merge support function - that may be used in the RETURNING list of a - command to identify the action taken for each - row; see . - - - - Merge Support Functions - - - - - - Function - - - Description - - - - - - - - - merge_action - - merge_action ( ) - text - - - Returns the merge action command executed for the current row. This - will be 'INSERT', 'UPDATE', or - 'DELETE'. - - - - -
- - - Example: - 0 THEN - UPDATE SET in_stock = true, quantity = s.quantity - WHEN MATCHED THEN - UPDATE SET in_stock = false, quantity = 0 - WHEN NOT MATCHED THEN - INSERT (product_id, in_stock, quantity) - VALUES (s.product_id, true, s.quantity) - RETURNING merge_action(), p.*; - - merge_action | product_id | in_stock | quantity ---------------+------------+----------+---------- - UPDATE | 1001 | t | 50 - UPDATE | 1002 | f | 0 - INSERT | 1003 | t | 10 -]]> - - - - Note that this function can only be used in the RETURNING - list of a MERGE command. It is an error to use it in any - other part of a query. - - -
- - - Subquery Expressions - - - EXISTS - - - - IN - - - - NOT IN - - - - ANY - - - - ALL - - - - SOME - - - - subquery - - - - This section describes the SQL-compliant subquery - expressions available in PostgreSQL. - All of the expression forms documented in this section return - Boolean (true/false) results. - - - - <literal>EXISTS</literal> - - -EXISTS (subquery) - - - - The argument of EXISTS is an arbitrary SELECT statement, - or subquery. The - subquery is evaluated to determine whether it returns any rows. - If it returns at least one row, the result of EXISTS is - true; if the subquery returns no rows, the result of EXISTS - is false. - - - - The subquery can refer to variables from the surrounding query, - which will act as constants during any one evaluation of the subquery. - - - - The subquery will generally only be executed long enough to determine - whether at least one row is returned, not all the way to completion. - It is unwise to write a subquery that has side effects (such as - calling sequence functions); whether the side effects occur - might be unpredictable. - - - - Since the result depends only on whether any rows are returned, - and not on the contents of those rows, the output list of the - subquery is normally unimportant. A common coding convention is - to write all EXISTS tests in the form - EXISTS(SELECT 1 WHERE ...). There are exceptions to - this rule however, such as subqueries that use INTERSECT. - - - - This simple example is like an inner join on col2, but - it produces at most one output row for each tab1 row, - even if there are several matching tab2 rows: - -SELECT col1 -FROM tab1 -WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); - - - - - - <literal>IN</literal> - - -expression IN (subquery) - - - - The right-hand side is a parenthesized - subquery, which must return exactly one column. The left-hand expression - is evaluated and compared to each row of the subquery result. - The result of IN is true if any equal subquery row is found. - The result is false if no equal row is found (including the - case where the subquery returns no rows). - - - - Note that if the left-hand expression yields null, or if there are - no equal right-hand values and at least one right-hand row yields - null, the result of the IN construct will be null, not false. - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - As with EXISTS, it's unwise to assume that the subquery will - be evaluated completely. - - - -row_constructor IN (subquery) - - - - The left-hand side of this form of IN is a row constructor, - as described in . - The right-hand side is a parenthesized - subquery, which must return exactly as many columns as there are - expressions in the left-hand row. The left-hand expressions are - evaluated and compared row-wise to each row of the subquery result. - The result of IN is true if any equal subquery row is found. - The result is false if no equal row is found (including the - case where the subquery returns no rows). - - - - As usual, null values in the rows are combined per - the normal rules of SQL Boolean expressions. Two rows are considered - equal if all their corresponding members are non-null and equal; the rows - are unequal if any corresponding members are non-null and unequal; - otherwise the result of that row comparison is unknown (null). - If all the per-row results are either unequal or null, with at least one - null, then the result of IN is null. - - - - - <literal>NOT IN</literal> - - -expression NOT IN (subquery) - - - - The right-hand side is a parenthesized - subquery, which must return exactly one column. The left-hand expression - is evaluated and compared to each row of the subquery result. - The result of NOT IN is true if only unequal subquery rows - are found (including the case where the subquery returns no rows). - The result is false if any equal row is found. - - - - Note that if the left-hand expression yields null, or if there are - no equal right-hand values and at least one right-hand row yields - null, the result of the NOT IN construct will be null, not true. - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - As with EXISTS, it's unwise to assume that the subquery will - be evaluated completely. - - - -row_constructor NOT IN (subquery) - - - - The left-hand side of this form of NOT IN is a row constructor, - as described in . - The right-hand side is a parenthesized - subquery, which must return exactly as many columns as there are - expressions in the left-hand row. The left-hand expressions are - evaluated and compared row-wise to each row of the subquery result. - The result of NOT IN is true if only unequal subquery rows - are found (including the case where the subquery returns no rows). - The result is false if any equal row is found. - - - - As usual, null values in the rows are combined per - the normal rules of SQL Boolean expressions. Two rows are considered - equal if all their corresponding members are non-null and equal; the rows - are unequal if any corresponding members are non-null and unequal; - otherwise the result of that row comparison is unknown (null). - If all the per-row results are either unequal or null, with at least one - null, then the result of NOT IN is null. - - - - - <literal>ANY</literal>/<literal>SOME</literal> - - -expression operator ANY (subquery) -expression operator SOME (subquery) - - - - The right-hand side is a parenthesized - subquery, which must return exactly one column. The left-hand expression - is evaluated and compared to each row of the subquery result using the - given operator, which must yield a Boolean - result. - The result of ANY is true if any true result is obtained. - The result is false if no true result is found (including the - case where the subquery returns no rows). - - - - SOME is a synonym for ANY. - IN is equivalent to = ANY. - - - - Note that if there are no successes and at least one right-hand row yields - null for the operator's result, the result of the ANY construct - will be null, not false. - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - As with EXISTS, it's unwise to assume that the subquery will - be evaluated completely. - - - -row_constructor operator ANY (subquery) -row_constructor operator SOME (subquery) - - - - The left-hand side of this form of ANY is a row constructor, - as described in . - The right-hand side is a parenthesized - subquery, which must return exactly as many columns as there are - expressions in the left-hand row. The left-hand expressions are - evaluated and compared row-wise to each row of the subquery result, - using the given operator. - The result of ANY is true if the comparison - returns true for any subquery row. - The result is false if the comparison returns false for every - subquery row (including the case where the subquery returns no - rows). - The result is NULL if no comparison with a subquery row returns true, - and at least one comparison returns NULL. - - - - See for details about the meaning - of a row constructor comparison. - - - - - <literal>ALL</literal> - - -expression operator ALL (subquery) - - - - The right-hand side is a parenthesized - subquery, which must return exactly one column. The left-hand expression - is evaluated and compared to each row of the subquery result using the - given operator, which must yield a Boolean - result. - The result of ALL is true if all rows yield true - (including the case where the subquery returns no rows). - The result is false if any false result is found. - The result is NULL if no comparison with a subquery row returns false, - and at least one comparison returns NULL. - - - - NOT IN is equivalent to <> ALL. - - - - As with EXISTS, it's unwise to assume that the subquery will - be evaluated completely. - - - -row_constructor operator ALL (subquery) - - - - The left-hand side of this form of ALL is a row constructor, - as described in . - The right-hand side is a parenthesized - subquery, which must return exactly as many columns as there are - expressions in the left-hand row. The left-hand expressions are - evaluated and compared row-wise to each row of the subquery result, - using the given operator. - The result of ALL is true if the comparison - returns true for all subquery rows (including the - case where the subquery returns no rows). - The result is false if the comparison returns false for any - subquery row. - The result is NULL if no comparison with a subquery row returns false, - and at least one comparison returns NULL. - - - - See for details about the meaning - of a row constructor comparison. - - - - - Single-Row Comparison - - - comparison - subquery result row - - - -row_constructor operator (subquery) - - - - The left-hand side is a row constructor, - as described in . - The right-hand side is a parenthesized subquery, which must return exactly - as many columns as there are expressions in the left-hand row. Furthermore, - the subquery cannot return more than one row. (If it returns zero rows, - the result is taken to be null.) The left-hand side is evaluated and - compared row-wise to the single subquery result row. - - - - See for details about the meaning - of a row constructor comparison. - - - - - - - Row and Array Comparisons - - - IN - - - - NOT IN - - - - ANY - - - - ALL - - - - SOME - - - - composite type - comparison - - - - row-wise comparison - - - - comparison - composite type - - - - comparison - row constructor - - - - IS DISTINCT FROM - - - - IS NOT DISTINCT FROM - - - - This section describes several specialized constructs for making - multiple comparisons between groups of values. These forms are - syntactically related to the subquery forms of the previous section, - but do not involve subqueries. - The forms involving array subexpressions are - PostgreSQL extensions; the rest are - SQL-compliant. - All of the expression forms documented in this section return - Boolean (true/false) results. - - - - <literal>IN</literal> - - -expression IN (value , ...) - - - - The right-hand side is a parenthesized list - of expressions. The result is true if the left-hand expression's - result is equal to any of the right-hand expressions. This is a shorthand - notation for - - -expression = value1 -OR -expression = value2 -OR -... - - - - - Note that if the left-hand expression yields null, or if there are - no equal right-hand values and at least one right-hand expression yields - null, the result of the IN construct will be null, not false. - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - - <literal>NOT IN</literal> - - -expression NOT IN (value , ...) - - - - The right-hand side is a parenthesized list - of expressions. The result is true if the left-hand expression's - result is unequal to all of the right-hand expressions. This is a shorthand - notation for - - -expression <> value1 -AND -expression <> value2 -AND -... - - - - - Note that if the left-hand expression yields null, or if there are - no equal right-hand values and at least one right-hand expression yields - null, the result of the NOT IN construct will be null, not true - as one might naively expect. - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - - x NOT IN y is equivalent to NOT (x IN y) in all - cases. However, null values are much more likely to trip up the novice when - working with NOT IN than when working with IN. - It is best to express your condition positively if possible. - - - - - - <literal>ANY</literal>/<literal>SOME</literal> (array) - - -expression operator ANY (array expression) -expression operator SOME (array expression) - - - - The right-hand side is a parenthesized expression, which must yield an - array value. - The left-hand expression - is evaluated and compared to each element of the array using the - given operator, which must yield a Boolean - result. - The result of ANY is true if any true result is obtained. - The result is false if no true result is found (including the - case where the array has zero elements). - - - - If the array expression yields a null array, the result of - ANY will be null. If the left-hand expression yields null, - the result of ANY is ordinarily null (though a non-strict - comparison operator could possibly yield a different result). - Also, if the right-hand array contains any null elements and no true - comparison result is obtained, the result of ANY - will be null, not false (again, assuming a strict comparison operator). - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - SOME is a synonym for ANY. - - - - - <literal>ALL</literal> (array) - - -expression operator ALL (array expression) - - - - The right-hand side is a parenthesized expression, which must yield an - array value. - The left-hand expression - is evaluated and compared to each element of the array using the - given operator, which must yield a Boolean - result. - The result of ALL is true if all comparisons yield true - (including the case where the array has zero elements). - The result is false if any false result is found. - - - - If the array expression yields a null array, the result of - ALL will be null. If the left-hand expression yields null, - the result of ALL is ordinarily null (though a non-strict - comparison operator could possibly yield a different result). - Also, if the right-hand array contains any null elements and no false - comparison result is obtained, the result of ALL - will be null, not true (again, assuming a strict comparison operator). - This is in accordance with SQL's normal rules for Boolean combinations - of null values. - - - - - Row Constructor Comparison - - -row_constructor operator row_constructor - - - - Each side is a row constructor, - as described in . - The two row constructors must have the same number of fields. - The given operator is applied to each pair - of corresponding fields. (Since the fields could be of different - types, this means that a different specific operator could be selected - for each pair.) - All the selected operators must be members of some B-tree operator - class, or be the negator of an = member of a B-tree - operator class, meaning that row constructor comparison is only - possible when the operator is - =, - <>, - <, - <=, - >, or - >=, - or has semantics similar to one of these. - - - - The = and <> cases work slightly differently - from the others. Two rows are considered - equal if all their corresponding members are non-null and equal; the rows - are unequal if any corresponding members are non-null and unequal; - otherwise the result of the row comparison is unknown (null). - - - - For the <, <=, > and - >= cases, the row elements are compared left-to-right, - stopping as soon as an unequal or null pair of elements is found. - If either of this pair of elements is null, the result of the - row comparison is unknown (null); otherwise comparison of this pair - of elements determines the result. For example, - ROW(1,2,NULL) < ROW(1,3,0) - yields true, not null, because the third pair of elements are not - considered. - - - -row_constructor IS DISTINCT FROM row_constructor - - - - This construct is similar to a <> row comparison, - but it does not yield null for null inputs. Instead, any null value is - considered unequal to (distinct from) any non-null value, and any two - nulls are considered equal (not distinct). Thus the result will - either be true or false, never null. - - - -row_constructor IS NOT DISTINCT FROM row_constructor - - - - This construct is similar to a = row comparison, - but it does not yield null for null inputs. Instead, any null value is - considered unequal to (distinct from) any non-null value, and any two - nulls are considered equal (not distinct). Thus the result will always - be either true or false, never null. - - - - - - Composite Type Comparison - - -record operator record - - - - The SQL specification requires row-wise comparison to return NULL if the - result depends on comparing two NULL values or a NULL and a non-NULL. - PostgreSQL does this only when comparing the - results of two row constructors (as in - ) or comparing a row constructor - to the output of a subquery (as in ). - In other contexts where two composite-type values are compared, two - NULL field values are considered equal, and a NULL is considered larger - than a non-NULL. This is necessary in order to have consistent sorting - and indexing behavior for composite types. - - - - Each side is evaluated and they are compared row-wise. Composite type - comparisons are allowed when the operator is - =, - <>, - <, - <=, - > or - >=, - or has semantics similar to one of these. (To be specific, an operator - can be a row comparison operator if it is a member of a B-tree operator - class, or is the negator of the = member of a B-tree operator - class.) The default behavior of the above operators is the same as for - IS [ NOT ] DISTINCT FROM for row constructors (see - ). - - - - To support matching of rows which include elements without a default - B-tree operator class, the following operators are defined for composite - type comparison: - *=, - *<>, - *<, - *<=, - *>, and - *>=. - These operators compare the internal binary representation of the two - rows. Two rows might have a different binary representation even - though comparisons of the two rows with the equality operator is true. - The ordering of rows under these comparison operators is deterministic - but not otherwise meaningful. These operators are used internally - for materialized views and might be useful for other specialized - purposes such as replication and B-Tree deduplication (see ). They are not intended to be - generally useful for writing queries, though. - - - - - - Set Returning Functions - - - set returning functions - functions - - - - This section describes functions that possibly return more than one row. - The most widely used functions in this class are series generating - functions, as detailed in and - . Other, more specialized - set-returning functions are described elsewhere in this manual. - See for ways to combine multiple - set-returning functions. - - - - Series Generating Functions - - - - - Function - - - Description - - - - - - - - - generate_series - - generate_series ( start integer, stop integer , step integer ) - setof integer - - - generate_series ( start bigint, stop bigint , step bigint ) - setof bigint - - - generate_series ( start numeric, stop numeric , step numeric ) - setof numeric - - - Generates a series of values from start - to stop, with a step size - of step. step - defaults to 1. - - - - - - generate_series ( start timestamp, stop timestamp, step interval ) - setof timestamp - - - generate_series ( start timestamp with time zone, stop timestamp with time zone, step interval , timezone text ) - setof timestamp with time zone - - - Generates a series of values from start - to stop, with a step size - of step. - In the timezone-aware form, times of day and daylight-savings - adjustments are computed according to the time zone named by - the timezone argument, or the current - setting if that is omitted. - - - - -
- - - When step is positive, zero rows are returned if - start is greater than stop. - Conversely, when step is negative, zero rows are - returned if start is less than stop. - Zero rows are also returned if any input is NULL. - It is an error - for step to be zero. Some examples follow: - -SELECT * FROM generate_series(2,4); - generate_series ------------------ - 2 - 3 - 4 -(3 rows) - -SELECT * FROM generate_series(5,1,-2); - generate_series ------------------ - 5 - 3 - 1 -(3 rows) - -SELECT * FROM generate_series(4,3); - generate_series ------------------ -(0 rows) - -SELECT generate_series(1.1, 4, 1.3); - generate_series ------------------ - 1.1 - 2.4 - 3.7 -(3 rows) - --- this example relies on the date-plus-integer operator: -SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a); - dates ------------- - 2004-02-05 - 2004-02-12 - 2004-02-19 -(3 rows) - -SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, - '2008-03-04 12:00', '10 hours'); - generate_series ---------------------- - 2008-03-01 00:00:00 - 2008-03-01 10:00:00 - 2008-03-01 20:00:00 - 2008-03-02 06:00:00 - 2008-03-02 16:00:00 - 2008-03-03 02:00:00 - 2008-03-03 12:00:00 - 2008-03-03 22:00:00 - 2008-03-04 08:00:00 -(9 rows) - --- this example assumes that TimeZone is set to UTC; note the DST transition: -SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz, - '2001-11-01 00:00 -05:00'::timestamptz, - '1 day'::interval, 'America/New_York'); - generate_series ------------------------- - 2001-10-22 04:00:00+00 - 2001-10-23 04:00:00+00 - 2001-10-24 04:00:00+00 - 2001-10-25 04:00:00+00 - 2001-10-26 04:00:00+00 - 2001-10-27 04:00:00+00 - 2001-10-28 04:00:00+00 - 2001-10-29 05:00:00+00 - 2001-10-30 05:00:00+00 - 2001-10-31 05:00:00+00 - 2001-11-01 05:00:00+00 -(11 rows) - - - - - Subscript Generating Functions - - - - - Function - - - Description - - - - - - - - - generate_subscripts - - generate_subscripts ( array anyarray, dim integer ) - setof integer - - - Generates a series comprising the valid subscripts of - the dim'th dimension of the given array. - - - - - - generate_subscripts ( array anyarray, dim integer, reverse boolean ) - setof integer - - - Generates a series comprising the valid subscripts of - the dim'th dimension of the given array. - When reverse is true, returns the series in - reverse order. - - - - -
- - - generate_subscripts is a convenience function that generates - the set of valid subscripts for the specified dimension of the given - array. - Zero rows are returned for arrays that do not have the requested dimension, - or if any input is NULL. - Some examples follow: - --- basic usage: -SELECT generate_subscripts('{NULL,1,NULL,2}'::int[], 1) AS s; - s ---- - 1 - 2 - 3 - 4 -(4 rows) - --- presenting an array, the subscript and the subscripted --- value requires a subquery: -SELECT * FROM arrays; - a --------------------- - {-1,-2} - {100,200,300} -(2 rows) - -SELECT a AS array, s AS subscript, a[s] AS value -FROM (SELECT generate_subscripts(a, 1) AS s, a FROM arrays) foo; - array | subscript | value ----------------+-----------+------- - {-1,-2} | 1 | -1 - {-1,-2} | 2 | -2 - {100,200,300} | 1 | 100 - {100,200,300} | 2 | 200 - {100,200,300} | 3 | 300 -(5 rows) - --- unnest a 2D array: -CREATE OR REPLACE FUNCTION unnest2(anyarray) -RETURNS SETOF anyelement AS $$ -select $1[i][j] - from generate_subscripts($1,1) g1(i), - generate_subscripts($1,2) g2(j); -$$ LANGUAGE sql IMMUTABLE; -CREATE FUNCTION -SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]); - unnest2 ---------- - 1 - 2 - 3 - 4 -(4 rows) - - - - - ordinality - - - - When a function in the FROM clause is suffixed - by WITH ORDINALITY, a bigint column is - appended to the function's output column(s), which starts from 1 and - increments by 1 for each row of the function's output. - This is most useful in the case of set returning - functions such as unnest(). - - --- set returning function WITH ORDINALITY: -SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); - ls | n ------------------+---- - pg_serial | 1 - pg_twophase | 2 - postmaster.opts | 3 - pg_notify | 4 - postgresql.conf | 5 - pg_tblspc | 6 - logfile | 7 - base | 8 - postmaster.pid | 9 - pg_ident.conf | 10 - global | 11 - pg_xact | 12 - pg_snapshots | 13 - pg_multixact | 14 - PG_VERSION | 15 - pg_wal | 16 - pg_hba.conf | 17 - pg_stat_tmp | 18 - pg_subtrans | 19 -(19 rows) - - - -
- - - System Information Functions and Operators - - - The functions described in this section are used to obtain various - information about a PostgreSQL installation. - - - - Session Information Functions - - - shows several - functions that extract session and system information. - - - - In addition to the functions listed in this section, there are a number of - functions related to the statistics system that also provide system - information. See for more - information. - - - - Session Information Functions - - - - - Function - - - Description - - - - - - - - - current_catalog - - current_catalog - name - - - - current_database - - current_database () - name - - - Returns the name of the current database. (Databases are - called catalogs in the SQL standard, - so current_catalog is the standard's - spelling.) - - - - - - - current_query - - current_query () - text - - - Returns the text of the currently executing query, as submitted - by the client (which might contain more than one statement). - - - - - - - current_role - - current_role - name - - - This is equivalent to current_user. - - - - - - - current_schema - - - schema - current - - current_schema - name - - - current_schema () - name - - - Returns the name of the schema that is first in the search path (or a - null value if the search path is empty). This is the schema that will - be used for any tables or other named objects that are created without - specifying a target schema. - - - - - - - current_schemas - - - search path - current - - current_schemas ( include_implicit boolean ) - name[] - - - Returns an array of the names of all schemas presently in the - effective search path, in their priority order. (Items in the current - setting that do not correspond to - existing, searchable schemas are omitted.) If the Boolean argument - is true, then implicitly-searched system schemas - such as pg_catalog are included in the result. - - - - - - - current_user - - - user - current - - current_user - name - - - Returns the user name of the current execution context. - - - - - - - inet_client_addr - - inet_client_addr () - inet - - - Returns the IP address of the current client, - or NULL if the current connection is via a - Unix-domain socket. - - - - - - - inet_client_port - - inet_client_port () - integer - - - Returns the IP port number of the current client, - or NULL if the current connection is via a - Unix-domain socket. - - - - - - - inet_server_addr - - inet_server_addr () - inet - - - Returns the IP address on which the server accepted the current - connection, - or NULL if the current connection is via a - Unix-domain socket. - - - - - - - inet_server_port - - inet_server_port () - integer - - - Returns the IP port number on which the server accepted the current - connection, - or NULL if the current connection is via a - Unix-domain socket. - - - - - - - pg_backend_pid - - pg_backend_pid () - integer - - - Returns the process ID of the server process attached to the current - session. - - - - - - - pg_blocking_pids - - pg_blocking_pids ( integer ) - integer[] - - - Returns an array of the process ID(s) of the sessions that are - blocking the server process with the specified process ID from - acquiring a lock, or an empty array if there is no such server process - or it is not blocked. - - - One server process blocks another if it either holds a lock that - conflicts with the blocked process's lock request (hard block), or is - waiting for a lock that would conflict with the blocked process's lock - request and is ahead of it in the wait queue (soft block). When using - parallel queries the result always lists client-visible process IDs - (that is, pg_backend_pid results) even if the - actual lock is held or awaited by a child worker process. As a result - of that, there may be duplicated PIDs in the result. Also note that - when a prepared transaction holds a conflicting lock, it will be - represented by a zero process ID. - - - Frequent calls to this function could have some impact on database - performance, because it needs exclusive access to the lock manager's - shared state for a short time. - - - - - - - pg_conf_load_time - - pg_conf_load_time () - timestamp with time zone - - - Returns the time when the server configuration files were last loaded. - If the current session was alive at the time, this will be the time - when the session itself re-read the configuration files (so the - reading will vary a little in different sessions). Otherwise it is - the time when the postmaster process re-read the configuration files. - - - - - - - pg_current_logfile - - - Logging - pg_current_logfile function - - - current_logfiles - and the pg_current_logfile function - - - Logging - current_logfiles file and the pg_current_logfile - function - - pg_current_logfile ( text ) - text - - - Returns the path name of the log file currently in use by the logging - collector. The path includes the - directory and the individual log file name. The result - is NULL if the logging collector is disabled. - When multiple log files exist, each in a different - format, pg_current_logfile without an argument - returns the path of the file having the first format found in the - ordered list: stderr, - csvlog, jsonlog. - NULL is returned if no log file has any of these - formats. - To request information about a specific log file format, supply - either csvlog, jsonlog or - stderr as the - value of the optional parameter. The result is NULL - if the log format requested is not configured in - . - The result reflects the contents of - the current_logfiles file. - - - This function is restricted to superusers and roles with privileges of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_get_loaded_modules - - pg_get_loaded_modules () - setof record - ( module_name text, - version text, - file_name text ) - - - Returns a list of the loadable modules that are loaded into the - current server session. The module_name - and version fields are NULL unless the - module author supplied values for them using - the PG_MODULE_MAGIC_EXT macro. - The file_name field gives the file - name of the module (shared library). - - - - - - - pg_my_temp_schema - - pg_my_temp_schema () - oid - - - Returns the OID of the current session's temporary schema, or zero if - it has none (because it has not created any temporary tables). - - - - - - - pg_is_other_temp_schema - - pg_is_other_temp_schema ( oid ) - boolean - - - Returns true if the given OID is the OID of another session's - temporary schema. (This can be useful, for example, to exclude other - sessions' temporary tables from a catalog display.) - - - - - - - pg_jit_available - - pg_jit_available () - boolean - - - Returns true if a JIT compiler extension is - available (see ) and the - configuration parameter is set to - on. - - - - - - - pg_listening_channels - - pg_listening_channels () - setof text - - - Returns the set of names of asynchronous notification channels that - the current session is listening to. - - - - - - - pg_notification_queue_usage - - pg_notification_queue_usage () - double precision - - - Returns the fraction (0–1) of the asynchronous notification - queue's maximum size that is currently occupied by notifications that - are waiting to be processed. - See and - for more information. - - - - - - - pg_postmaster_start_time - - pg_postmaster_start_time () - timestamp with time zone - - - Returns the time when the server started. - - - - - - - pg_safe_snapshot_blocking_pids - - pg_safe_snapshot_blocking_pids ( integer ) - integer[] - - - Returns an array of the process ID(s) of the sessions that are blocking - the server process with the specified process ID from acquiring a safe - snapshot, or an empty array if there is no such server process or it - is not blocked. - - - A session running a SERIALIZABLE transaction blocks - a SERIALIZABLE READ ONLY DEFERRABLE transaction - from acquiring a snapshot until the latter determines that it is safe - to avoid taking any predicate locks. See - for more information about - serializable and deferrable transactions. - - - Frequent calls to this function could have some impact on database - performance, because it needs access to the predicate lock manager's - shared state for a short time. - - - - - - - pg_trigger_depth - - pg_trigger_depth () - integer - - - Returns the current nesting level - of PostgreSQL triggers (0 if not called, - directly or indirectly, from inside a trigger). - - - - - - - session_user - - session_user - name - - - Returns the session user's name. - - - - - - - system_user - - system_user - text - - - Returns the authentication method and the identity (if any) that the - user presented during the authentication cycle before they were - assigned a database role. It is represented as - auth_method:identity or - NULL if the user has not been authenticated (for - example if Trust authentication has - been used). - - - - - - - user - - user - name - - - This is equivalent to current_user. - - - - -
- - - - current_catalog, - current_role, - current_schema, - current_user, - session_user, - and user have special syntactic status - in SQL: they must be called without trailing - parentheses. In PostgreSQL, parentheses can optionally be used with - current_schema, but not with the others. - - - - - The session_user is normally the user who initiated - the current database connection; but superusers can change this setting - with . - The current_user is the user identifier - that is applicable for permission checking. Normally it is equal - to the session user, but it can be changed with - . - It also changes during the execution of - functions with the attribute SECURITY DEFINER. - In Unix parlance, the session user is the real user and - the current user is the effective user. - current_role and user are - synonyms for current_user. (The SQL standard draws - a distinction between current_role - and current_user, but PostgreSQL - does not, since it unifies users and roles into a single kind of entity.) - - -
- - - Access Privilege Inquiry Functions - - - privilege - querying - - - - lists functions that - allow querying object access privileges programmatically. - (See for more information about - privileges.) - In these functions, the user whose privileges are being inquired about - can be specified by name or by OID - (pg_authid.oid), or if - the name is given as public then the privileges of the - PUBLIC pseudo-role are checked. Also, the user - argument can be omitted entirely, in which case - the current_user is assumed. - The object that is being inquired about can be specified either by name or - by OID, too. When specifying by name, a schema name can be included if - relevant. - The access privilege of interest is specified by a text string, which must - evaluate to one of the appropriate privilege keywords for the object's type - (e.g., SELECT). Optionally, WITH GRANT - OPTION can be added to a privilege type to test whether the - privilege is held with grant option. Also, multiple privilege types can be - listed separated by commas, in which case the result will be true if any of - the listed privileges is held. (Case of the privilege string is not - significant, and extra whitespace is allowed between but not within - privilege names.) - Some examples: - -SELECT has_table_privilege('myschema.mytable', 'select'); -SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION'); - - - - - Access Privilege Inquiry Functions - - - - - Function - - - Description - - - - - - - - - has_any_column_privilege - - has_any_column_privilege ( - user name or oid, - table text or oid, - privilege text ) - boolean - - - Does user have privilege for any column of table? - This succeeds either if the privilege is held for the whole table, or - if there is a column-level grant of the privilege for at least one - column. - Allowable privilege types are - SELECT, INSERT, - UPDATE, and REFERENCES. - - - - - - - has_column_privilege - - has_column_privilege ( - user name or oid, - table text or oid, - column text or smallint, - privilege text ) - boolean - - - Does user have privilege for the specified table column? - This succeeds either if the privilege is held for the whole table, or - if there is a column-level grant of the privilege for the column. - The column can be specified by name or by attribute number - (pg_attribute.attnum). - Allowable privilege types are - SELECT, INSERT, - UPDATE, and REFERENCES. - - - - - - - has_database_privilege - - has_database_privilege ( - user name or oid, - database text or oid, - privilege text ) - boolean - - - Does user have privilege for database? - Allowable privilege types are - CREATE, - CONNECT, - TEMPORARY, and - TEMP (which is equivalent to - TEMPORARY). - - - - - - - has_foreign_data_wrapper_privilege - - has_foreign_data_wrapper_privilege ( - user name or oid, - fdw text or oid, - privilege text ) - boolean - - - Does user have privilege for foreign-data wrapper? - The only allowable privilege type is USAGE. - - - - - - - has_function_privilege - - has_function_privilege ( - user name or oid, - function text or oid, - privilege text ) - boolean - - - Does user have privilege for function? - The only allowable privilege type is EXECUTE. - - - When specifying a function by name rather than by OID, the allowed - input is the same as for the regprocedure data type (see - ). - An example is: - -SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); - - - - - - - - has_language_privilege - - has_language_privilege ( - user name or oid, - language text or oid, - privilege text ) - boolean - - - Does user have privilege for language? - The only allowable privilege type is USAGE. - - - - - - - has_largeobject_privilege - - has_largeobject_privilege ( - user name or oid, - largeobject oid, - privilege text ) - boolean - - - Does user have privilege for large object? - Allowable privilege types are - SELECT and UPDATE. - - - - - - - has_parameter_privilege - - has_parameter_privilege ( - user name or oid, - parameter text, - privilege text ) - boolean - - - Does user have privilege for configuration parameter? - The parameter name is case-insensitive. - Allowable privilege types are SET - and ALTER SYSTEM. - - - - - - - has_schema_privilege - - has_schema_privilege ( - user name or oid, - schema text or oid, - privilege text ) - boolean - - - Does user have privilege for schema? - Allowable privilege types are - CREATE and - USAGE. - - - - - - - has_sequence_privilege - - has_sequence_privilege ( - user name or oid, - sequence text or oid, - privilege text ) - boolean - - - Does user have privilege for sequence? - Allowable privilege types are - USAGE, - SELECT, and - UPDATE. - - - - - - - has_server_privilege - - has_server_privilege ( - user name or oid, - server text or oid, - privilege text ) - boolean - - - Does user have privilege for foreign server? - The only allowable privilege type is USAGE. - - - - - - - has_table_privilege - - has_table_privilege ( - user name or oid, - table text or oid, - privilege text ) - boolean - - - Does user have privilege for table? - Allowable privilege types - are SELECT, INSERT, - UPDATE, DELETE, - TRUNCATE, REFERENCES, - TRIGGER, and MAINTAIN. - - - - - - - has_tablespace_privilege - - has_tablespace_privilege ( - user name or oid, - tablespace text or oid, - privilege text ) - boolean - - - Does user have privilege for tablespace? - The only allowable privilege type is CREATE. - - - - - - - has_type_privilege - - has_type_privilege ( - user name or oid, - type text or oid, - privilege text ) - boolean - - - Does user have privilege for data type? - The only allowable privilege type is USAGE. - When specifying a type by name rather than by OID, the allowed input - is the same as for the regtype data type (see - ). - - - - - - - pg_has_role - - pg_has_role ( - user name or oid, - role text or oid, - privilege text ) - boolean - - - Does user have privilege for role? - Allowable privilege types are - MEMBER, USAGE, - and SET. - MEMBER denotes direct or indirect membership in - the role without regard to what specific privileges may be conferred. - USAGE denotes whether the privileges of the role - are immediately available without doing SET ROLE, - while SET denotes whether it is possible to change - to the role using the SET ROLE command. - WITH ADMIN OPTION or WITH GRANT - OPTION can be added to any of these privilege types to - test whether the ADMIN privilege is held (all - six spellings test the same thing). - This function does not allow the special case of - setting user to public, - because the PUBLIC pseudo-role can never be a member of real roles. - - - - - - - row_security_active - - row_security_active ( - table text or oid ) - boolean - - - Is row-level security active for the specified table in the context of - the current user and current environment? - - - - -
- - - shows the operators - available for the aclitem type, which is the catalog - representation of access privileges. See - for information about how to read access privilege values. - - - - <type>aclitem</type> Operators - - - - - Operator - - - Description - - - Example(s) - - - - - - - - - aclitemeq - - aclitem = aclitem - boolean - - - Are aclitems equal? (Notice that - type aclitem lacks the usual set of comparison - operators; it has only equality. In turn, aclitem - arrays can only be compared for equality.) - - - 'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem - f - - - - - - - aclcontains - - aclitem[] @> aclitem - boolean - - - Does array contain the specified privileges? (This is true if there - is an array entry that matches the aclitem's grantee and - grantor, and has at least the specified set of privileges.) - - - '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem - t - - - - - - aclitem[] ~ aclitem - boolean - - - This is a deprecated alias for @>. - - - '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitem - t - - - - -
- - - shows some additional - functions to manage the aclitem type. - - - - <type>aclitem</type> Functions - - - - - Function - - - Description - - - - - - - - - acldefault - - acldefault ( - type "char", - ownerId oid ) - aclitem[] - - - Constructs an aclitem array holding the default access - privileges for an object of type type belonging - to the role with OID ownerId. This represents - the access privileges that will be assumed when an object's - ACL entry is null. (The default access privileges - are described in .) - The type parameter must be one of - 'c' for COLUMN, - 'r' for TABLE and table-like objects, - 's' for SEQUENCE, - 'd' for DATABASE, - 'f' for FUNCTION or PROCEDURE, - 'l' for LANGUAGE, - 'L' for LARGE OBJECT, - 'n' for SCHEMA, - 'p' for PARAMETER, - 't' for TABLESPACE, - 'F' for FOREIGN DATA WRAPPER, - 'S' for FOREIGN SERVER, - or - 'T' for TYPE or DOMAIN. - - - - - - - aclexplode - - aclexplode ( aclitem[] ) - setof record - ( grantor oid, - grantee oid, - privilege_type text, - is_grantable boolean ) - - - Returns the aclitem array as a set of rows. - If the grantee is the pseudo-role PUBLIC, it is represented by zero in - the grantee column. Each granted privilege is - represented as SELECT, INSERT, - etc (see for a full list). - Note that each privilege is broken out as a separate row, so - only one keyword appears in the privilege_type - column. - - - - - - - makeaclitem - - makeaclitem ( - grantee oid, - grantor oid, - privileges text, - is_grantable boolean ) - aclitem - - - Constructs an aclitem with the given properties. - privileges is a comma-separated list of - privilege names such as SELECT, - INSERT, etc, all of which are set in the - result. (Case of the privilege string is not significant, and - extra whitespace is allowed between but not within privilege - names.) - - - - -
- -
- - - Schema Visibility Inquiry Functions - - - shows functions that - determine whether a certain object is visible in the - current schema search path. - For example, a table is said to be visible if its - containing schema is in the search path and no table of the same - name appears earlier in the search path. This is equivalent to the - statement that the table can be referenced by name without explicit - schema qualification. Thus, to list the names of all visible tables: - -SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); - - For functions and operators, an object in the search path is said to be - visible if there is no object of the same name and argument data - type(s) earlier in the path. For operator classes and families, - both the name and the associated index access method are considered. - - - - search path - object visibility - - - - Schema Visibility Inquiry Functions - - - - - Function - - - Description - - - - - - - - - pg_collation_is_visible - - pg_collation_is_visible ( collation oid ) - boolean - - - Is collation visible in search path? - - - - - - - pg_conversion_is_visible - - pg_conversion_is_visible ( conversion oid ) - boolean - - - Is conversion visible in search path? - - - - - - - pg_function_is_visible - - pg_function_is_visible ( function oid ) - boolean - - - Is function visible in search path? - (This also works for procedures and aggregates.) - - - - - - - pg_opclass_is_visible - - pg_opclass_is_visible ( opclass oid ) - boolean - - - Is operator class visible in search path? - - - - - - - pg_operator_is_visible - - pg_operator_is_visible ( operator oid ) - boolean - - - Is operator visible in search path? - - - - - - - pg_opfamily_is_visible - - pg_opfamily_is_visible ( opclass oid ) - boolean - - - Is operator family visible in search path? - - - - - - - pg_statistics_obj_is_visible - - pg_statistics_obj_is_visible ( stat oid ) - boolean - - - Is statistics object visible in search path? - - - - - - - pg_table_is_visible - - pg_table_is_visible ( table oid ) - boolean - - - Is table visible in search path? - (This works for all types of relations, including views, materialized - views, indexes, sequences and foreign tables.) - - - - - - - pg_ts_config_is_visible - - pg_ts_config_is_visible ( config oid ) - boolean - - - Is text search configuration visible in search path? - - - - - - - pg_ts_dict_is_visible - - pg_ts_dict_is_visible ( dict oid ) - boolean - - - Is text search dictionary visible in search path? - - - - - - - pg_ts_parser_is_visible - - pg_ts_parser_is_visible ( parser oid ) - boolean - - - Is text search parser visible in search path? - - - - - - - pg_ts_template_is_visible - - pg_ts_template_is_visible ( template oid ) - boolean - - - Is text search template visible in search path? - - - - - - - pg_type_is_visible - - pg_type_is_visible ( type oid ) - boolean - - - Is type (or domain) visible in search path? - - - - -
- - - All these functions require object OIDs to identify the object to be - checked. If you want to test an object by name, it is convenient to use - the OID alias types (regclass, regtype, - regprocedure, regoperator, regconfig, - or regdictionary), - for example: - -SELECT pg_type_is_visible('myschema.widget'::regtype); - - Note that it would not make much sense to test a non-schema-qualified - type name in this way — if the name can be recognized at all, it must be visible. - - -
- - - System Catalog Information Functions - - - lists functions that - extract information from the system catalogs. - - - - System Catalog Information Functions - - - - - Function - - - Description - - - - - - - - - format_type - - format_type ( type oid, typemod integer ) - text - - - Returns the SQL name for a data type that is identified by its type - OID and possibly a type modifier. Pass NULL for the type modifier if - no specific modifier is known. - - - - - - - pg_basetype - - pg_basetype ( regtype ) - regtype - - - Returns the OID of the base type of a domain identified by its - type OID. If the argument is the OID of a non-domain type, - returns the argument as-is. Returns NULL if the argument is - not a valid type OID. If there's a chain of domain dependencies, - it will recurse until finding the base type. - - - Assuming CREATE DOMAIN mytext AS text: - - - pg_basetype('mytext'::regtype) - text - - - - - - - pg_char_to_encoding - - pg_char_to_encoding ( encoding name ) - integer - - - Converts the supplied encoding name into an integer representing the - internal identifier used in some system catalog tables. - Returns -1 if an unknown encoding name is provided. - - - - - - - pg_encoding_to_char - - pg_encoding_to_char ( encoding integer ) - name - - - Converts the integer used as the internal identifier of an encoding in some - system catalog tables into a human-readable string. - Returns an empty string if an invalid encoding number is provided. - - - - - - - pg_get_catalog_foreign_keys - - pg_get_catalog_foreign_keys () - setof record - ( fktable regclass, - fkcols text[], - pktable regclass, - pkcols text[], - is_array boolean, - is_opt boolean ) - - - Returns a set of records describing the foreign key relationships - that exist within the PostgreSQL system - catalogs. - The fktable column contains the name of the - referencing catalog, and the fkcols column - contains the name(s) of the referencing column(s). Similarly, - the pktable column contains the name of the - referenced catalog, and the pkcols column - contains the name(s) of the referenced column(s). - If is_array is true, the last referencing - column is an array, each of whose elements should match some entry - in the referenced catalog. - If is_opt is true, the referencing column(s) - are allowed to contain zeroes instead of a valid reference. - - - - - - - pg_get_constraintdef - - pg_get_constraintdef ( constraint oid , pretty boolean ) - text - - - Reconstructs the creating command for a constraint. - (This is a decompiled reconstruction, not the original text - of the command.) - - - - - - - pg_get_expr - - pg_get_expr ( expr pg_node_tree, relation oid , pretty boolean ) - text - - - Decompiles the internal form of an expression stored in the system - catalogs, such as the default value for a column. If the expression - might contain Vars, specify the OID of the relation they refer to as - the second parameter; if no Vars are expected, passing zero is - sufficient. - - - - - - - pg_get_functiondef - - pg_get_functiondef ( func oid ) - text - - - Reconstructs the creating command for a function or procedure. - (This is a decompiled reconstruction, not the original text - of the command.) - The result is a complete CREATE OR REPLACE FUNCTION - or CREATE OR REPLACE PROCEDURE statement. - - - - - - - pg_get_function_arguments - - pg_get_function_arguments ( func oid ) - text - - - Reconstructs the argument list of a function or procedure, in the form - it would need to appear in within CREATE FUNCTION - (including default values). - - - - - - - pg_get_function_identity_arguments - - pg_get_function_identity_arguments ( func oid ) - text - - - Reconstructs the argument list necessary to identify a function or - procedure, in the form it would need to appear in within commands such - as ALTER FUNCTION. This form omits default values. - - - - - - - pg_get_function_result - - pg_get_function_result ( func oid ) - text - - - Reconstructs the RETURNS clause of a function, in - the form it would need to appear in within CREATE - FUNCTION. Returns NULL for a procedure. - - - - - - - pg_get_indexdef - - pg_get_indexdef ( index oid , column integer, pretty boolean ) - text - - - Reconstructs the creating command for an index. - (This is a decompiled reconstruction, not the original text - of the command.) If column is supplied and is - not zero, only the definition of that column is reconstructed. - - - - - - - pg_get_keywords - - pg_get_keywords () - setof record - ( word text, - catcode "char", - barelabel boolean, - catdesc text, - baredesc text ) - - - Returns a set of records describing the SQL keywords recognized by the - server. The word column contains the - keyword. The catcode column contains a - category code: U for an unreserved - keyword, C for a keyword that can be a column - name, T for a keyword that can be a type or - function name, or R for a fully reserved keyword. - The barelabel column - contains true if the keyword can be used as - a bare column label in SELECT lists, - or false if it can only be used - after AS. - The catdesc column contains a - possibly-localized string describing the keyword's category. - The baredesc column contains a - possibly-localized string describing the keyword's column label status. - - - - - - - pg_get_partkeydef - - pg_get_partkeydef ( table oid ) - text - - - Reconstructs the definition of a partitioned table's partition - key, in the form it would have in the PARTITION - BY clause of CREATE TABLE. - (This is a decompiled reconstruction, not the original text - of the command.) - - - - - - - pg_get_ruledef - - pg_get_ruledef ( rule oid , pretty boolean ) - text - - - Reconstructs the creating command for a rule. - (This is a decompiled reconstruction, not the original text - of the command.) - - - - - - - pg_get_serial_sequence - - pg_get_serial_sequence ( table text, column text ) - text - - - Returns the name of the sequence associated with a column, - or NULL if no sequence is associated with the column. - If the column is an identity column, the associated sequence is the - sequence internally created for that column. - For columns created using one of the serial types - (serial, smallserial, bigserial), - it is the sequence created for that serial column definition. - In the latter case, the association can be modified or removed - with ALTER SEQUENCE OWNED BY. - (This function probably should have been - called pg_get_owned_sequence; its current name - reflects the fact that it has historically been used with serial-type - columns.) The first parameter is a table name with optional - schema, and the second parameter is a column name. Because the first - parameter potentially contains both schema and table names, it is - parsed per usual SQL rules, meaning it is lower-cased by default. - The second parameter, being just a column name, is treated literally - and so has its case preserved. The result is suitably formatted - for passing to the sequence functions (see - ). - - - A typical use is in reading the current value of the sequence for an - identity or serial column, for example: - -SELECT currval(pg_get_serial_sequence('sometable', 'id')); - - - - - - - - pg_get_statisticsobjdef - - pg_get_statisticsobjdef ( statobj oid ) - text - - - Reconstructs the creating command for an extended statistics object. - (This is a decompiled reconstruction, not the original text - of the command.) - - - - - - - pg_get_triggerdef - -pg_get_triggerdef ( trigger oid , pretty boolean ) - text - - - Reconstructs the creating command for a trigger. - (This is a decompiled reconstruction, not the original text - of the command.) - - - - - - - pg_get_userbyid - - pg_get_userbyid ( role oid ) - name - - - Returns a role's name given its OID. - - - - - - - pg_get_viewdef - - pg_get_viewdef ( view oid , pretty boolean ) - text - - - Reconstructs the underlying SELECT command for a - view or materialized view. (This is a decompiled reconstruction, not - the original text of the command.) - - - - - - pg_get_viewdef ( view oid, wrap_column integer ) - text - - - Reconstructs the underlying SELECT command for a - view or materialized view. (This is a decompiled reconstruction, not - the original text of the command.) In this form of the function, - pretty-printing is always enabled, and long lines are wrapped to try - to keep them shorter than the specified number of columns. - - - - - - pg_get_viewdef ( view text , pretty boolean ) - text - - - Reconstructs the underlying SELECT command for a - view or materialized view, working from a textual name for the view - rather than its OID. (This is deprecated; use the OID variant - instead.) - - - - - - - pg_index_column_has_property - - pg_index_column_has_property ( index regclass, column integer, property text ) - boolean - - - Tests whether an index column has the named property. - Common index column properties are listed in - . - (Note that extension access methods can define additional property - names for their indexes.) - NULL is returned if the property name is not known - or does not apply to the particular object, or if the OID or column - number does not identify a valid object. - - - - - - - pg_index_has_property - - pg_index_has_property ( index regclass, property text ) - boolean - - - Tests whether an index has the named property. - Common index properties are listed in - . - (Note that extension access methods can define additional property - names for their indexes.) - NULL is returned if the property name is not known - or does not apply to the particular object, or if the OID does not - identify a valid object. - - - - - - - pg_indexam_has_property - - pg_indexam_has_property ( am oid, property text ) - boolean - - - Tests whether an index access method has the named property. - Access method properties are listed in - . - NULL is returned if the property name is not known - or does not apply to the particular object, or if the OID does not - identify a valid object. - - - - - - - pg_options_to_table - - pg_options_to_table ( options_array text[] ) - setof record - ( option_name text, - option_value text ) - - - Returns the set of storage options represented by a value from - pg_class.reloptions or - pg_attribute.attoptions. - - - - - - - pg_settings_get_flags - - pg_settings_get_flags ( guc text ) - text[] - - - Returns an array of the flags associated with the given GUC, or - NULL if it does not exist. The result is - an empty array if the GUC exists but there are no flags to show. - Only the most useful flags listed in - are exposed. - - - - - - - pg_tablespace_databases - - pg_tablespace_databases ( tablespace oid ) - setof oid - - - Returns the set of OIDs of databases that have objects stored in the - specified tablespace. If this function returns any rows, the - tablespace is not empty and cannot be dropped. To identify the specific - objects populating the tablespace, you will need to connect to the - database(s) identified by pg_tablespace_databases - and query their pg_class catalogs. - - - - - - - pg_tablespace_location - - pg_tablespace_location ( tablespace oid ) - text - - - Returns the file system path that this tablespace is located in. - - - - - - - pg_typeof - - pg_typeof ( "any" ) - regtype - - - Returns the OID of the data type of the value that is passed to it. - This can be helpful for troubleshooting or dynamically constructing - SQL queries. The function is declared as - returning regtype, which is an OID alias type (see - ); this means that it is the same as an - OID for comparison purposes but displays as a type name. - - - pg_typeof(33) - integer - - - - - - - COLLATION FOR - - COLLATION FOR ( "any" ) - text - - - Returns the name of the collation of the value that is passed to it. - The value is quoted and schema-qualified if necessary. If no - collation was derived for the argument expression, - then NULL is returned. If the argument is not of a - collatable data type, then an error is raised. - - - collation for ('foo'::text) - "default" - - - collation for ('foo' COLLATE "de_DE") - "de_DE" - - - - - - - to_regclass - - to_regclass ( text ) - regclass - - - Translates a textual relation name to its OID. A similar result is - obtained by casting the string to type regclass (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found. - - - - - - - to_regcollation - - to_regcollation ( text ) - regcollation - - - Translates a textual collation name to its OID. A similar result is - obtained by casting the string to type regcollation (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found. - - - - - - - to_regnamespace - - to_regnamespace ( text ) - regnamespace - - - Translates a textual schema name to its OID. A similar result is - obtained by casting the string to type regnamespace (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found. - - - - - - - to_regoper - - to_regoper ( text ) - regoper - - - Translates a textual operator name to its OID. A similar result is - obtained by casting the string to type regoper (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found or is ambiguous. - - - - - - - to_regoperator - - to_regoperator ( text ) - regoperator - - - Translates a textual operator name (with parameter types) to its OID. A similar result is - obtained by casting the string to type regoperator (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found. - - - - - - - to_regproc - - to_regproc ( text ) - regproc - - - Translates a textual function or procedure name to its OID. A similar result is - obtained by casting the string to type regproc (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found or is ambiguous. - - - - - - - to_regprocedure - - to_regprocedure ( text ) - regprocedure - - - Translates a textual function or procedure name (with argument types) to its OID. A similar result is - obtained by casting the string to type regprocedure (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found. - - - - - - - to_regrole - - to_regrole ( text ) - regrole - - - Translates a textual role name to its OID. A similar result is - obtained by casting the string to type regrole (see - ); however, this function will return - NULL rather than throwing an error if the name is - not found. - - - - - - - to_regtype - - to_regtype ( text ) - regtype - - - Parses a string of text, extracts a potential type name from it, - and translates that name into a type OID. A syntax error in the - string will result in an error; but if the string is a - syntactically valid type name that happens not to be found in the - catalogs, the result is NULL. A similar result - is obtained by casting the string to type regtype - (see ), except that that will throw - error for name not found. - - - - - - - to_regtypemod - - to_regtypemod ( text ) - integer - - - Parses a string of text, extracts a potential type name from it, - and translates its type modifier, if any. A syntax error in the - string will result in an error; but if the string is a - syntactically valid type name that happens not to be found in the - catalogs, the result is NULL. The result is - -1 if no type modifier is present. - - - to_regtypemod can be combined with - to produce appropriate inputs for - , allowing a string representing a - type name to be canonicalized. - - - format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)')) - character varying(32) - - - - -
- - - Most of the functions that reconstruct (decompile) database objects - have an optional pretty flag, which - if true causes the result to - be pretty-printed. Pretty-printing suppresses unnecessary - parentheses and adds whitespace for legibility. - The pretty-printed format is more readable, but the default format - is more likely to be interpreted the same way by future versions of - PostgreSQL; so avoid using pretty-printed output - for dump purposes. Passing false for - the pretty parameter yields the same result as - omitting the parameter. - - - - Index Column Properties - - - NameDescription - - - - asc - Does the column sort in ascending order on a forward scan? - - - - desc - Does the column sort in descending order on a forward scan? - - - - nulls_first - Does the column sort with nulls first on a forward scan? - - - - nulls_last - Does the column sort with nulls last on a forward scan? - - - - orderable - Does the column possess any defined sort ordering? - - - - distance_orderable - Can the column be scanned in order by a distance - operator, for example ORDER BY col <-> constant ? - - - - returnable - Can the column value be returned by an index-only scan? - - - - search_array - Does the column natively support col = ANY(array) - searches? - - - - search_nulls - Does the column support IS NULL and - IS NOT NULL searches? - - - - -
- - - Index Properties - - - NameDescription - - - - clusterable - Can the index be used in a CLUSTER command? - - - - index_scan - Does the index support plain (non-bitmap) scans? - - - - bitmap_scan - Does the index support bitmap scans? - - - - backward_scan - Can the scan direction be changed in mid-scan (to - support FETCH BACKWARD on a cursor without - needing materialization)? - - - - -
- - - Index Access Method Properties - - - NameDescription - - - - can_order - Does the access method support ASC, - DESC and related keywords in - CREATE INDEX? - - - - can_unique - Does the access method support unique indexes? - - - - can_multi_col - Does the access method support indexes with multiple columns? - - - - can_exclude - Does the access method support exclusion constraints? - - - - can_include - Does the access method support the INCLUDE - clause of CREATE INDEX? - - - - -
- - - GUC Flags - - - FlagDescription - - - - EXPLAIN - Parameters with this flag are included in - EXPLAIN (SETTINGS) commands. - - - - NO_SHOW_ALL - Parameters with this flag are excluded from - SHOW ALL commands. - - - - NO_RESET - Parameters with this flag do not support - RESET commands. - - - - NO_RESET_ALL - Parameters with this flag are excluded from - RESET ALL commands. - - - - NOT_IN_SAMPLE - Parameters with this flag are not included in - postgresql.conf by default. - - - - RUNTIME_COMPUTED - Parameters with this flag are runtime-computed ones. - - - - -
- -
- - - Object Information and Addressing Functions - - - lists functions related to - database object identification and addressing. - - - - Object Information and Addressing Functions - - - - - Function - - - Description - - - - - - - - - pg_get_acl - - pg_get_acl ( classid oid, objid oid, objsubid integer ) - aclitem[] - - - Returns the ACL for a database object, specified - by catalog OID, object OID and sub-object ID. This function returns - NULL values for undefined objects. - - - - - - - pg_describe_object - - pg_describe_object ( classid oid, objid oid, objsubid integer ) - text - - - Returns a textual description of a database object identified by - catalog OID, object OID, and sub-object ID (such as a column number - within a table; the sub-object ID is zero when referring to a whole - object). This description is intended to be human-readable, and might - be translated, depending on server configuration. This is especially - useful to determine the identity of an object referenced in the - pg_depend catalog. This function returns - NULL values for undefined objects. - - - - - - - pg_identify_object - - pg_identify_object ( classid oid, objid oid, objsubid integer ) - record - ( type text, - schema text, - name text, - identity text ) - - - Returns a row containing enough information to uniquely identify the - database object specified by catalog OID, object OID and sub-object - ID. - This information is intended to be machine-readable, and is never - translated. - type identifies the type of database object; - schema is the schema name that the object - belongs in, or NULL for object types that do not - belong to schemas; - name is the name of the object, quoted if - necessary, if the name (along with schema name, if pertinent) is - sufficient to uniquely identify the object, - otherwise NULL; - identity is the complete object identity, with - the precise format depending on object type, and each name within the - format being schema-qualified and quoted as necessary. Undefined - objects are identified with NULL values. - - - - - - - pg_identify_object_as_address - - pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) - record - ( type text, - object_names text[], - object_args text[] ) - - - Returns a row containing enough information to uniquely identify the - database object specified by catalog OID, object OID and sub-object - ID. - The returned information is independent of the current server, that - is, it could be used to identify an identically named object in - another server. - type identifies the type of database object; - object_names and - object_args - are text arrays that together form a reference to the object. - These three values can be passed - to pg_get_object_address to obtain the internal - address of the object. - - - - - - - pg_get_object_address - - pg_get_object_address ( type text, object_names text[], object_args text[] ) - record - ( classid oid, - objid oid, - objsubid integer ) - - - Returns a row containing enough information to uniquely identify the - database object specified by a type code and object name and argument - arrays. - The returned values are the ones that would be used in system catalogs - such as pg_depend; they can be passed to - other system functions such as pg_describe_object - or pg_identify_object. - classid is the OID of the system catalog - containing the object; - objid is the OID of the object itself, and - objsubid is the sub-object ID, or zero if none. - This function is the inverse - of pg_identify_object_as_address. - Undefined objects are identified with NULL values. - - - - -
- - - pg_get_acl is useful for retrieving and inspecting - the privileges associated with database objects without looking at - specific catalogs. For example, to retrieve all the granted privileges - on objects in the current database: - -postgres=# SELECT - (pg_identify_object(s.classid,s.objid,s.objsubid)).*, - pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl -FROM pg_catalog.pg_shdepend AS s -JOIN pg_catalog.pg_database AS d - ON d.datname = current_database() AND - d.oid = s.dbid -JOIN pg_catalog.pg_authid AS a - ON a.oid = s.refobjid AND - s.refclassid = 'pg_authid'::regclass -WHERE s.deptype = 'a'; --[ RECORD 1 ]----------------------------------------- -type | table -schema | public -name | testtab -identity | public.testtab -acl | {postgres=arwdDxtm/postgres,foo=r/postgres} - - - -
- - - Comment Information Functions - - - comment - about database objects - - - - The functions shown in - extract comments previously stored with the - command. A null value is returned if no - comment could be found for the specified parameters. - - - - Comment Information Functions - - - - - Function - - - Description - - - - - - - - - col_description - - col_description ( table oid, column integer ) - text - - - Returns the comment for a table column, which is specified by the OID - of its table and its column number. - (obj_description cannot be used for table - columns, since columns do not have OIDs of their own.) - - - - - - - obj_description - - obj_description ( object oid, catalog name ) - text - - - Returns the comment for a database object specified by its OID and the - name of the containing system catalog. For - example, obj_description(123456, 'pg_class') would - retrieve the comment for the table with OID 123456. - - - - - - obj_description ( object oid ) - text - - - Returns the comment for a database object specified by its OID alone. - This is deprecated since there is no guarantee - that OIDs are unique across different system catalogs; therefore, the - wrong comment might be returned. - - - - - - - shobj_description - - shobj_description ( object oid, catalog name ) - text - - - Returns the comment for a shared database object specified by its OID - and the name of the containing system catalog. This is just - like obj_description except that it is used for - retrieving comments on shared objects (that is, databases, roles, and - tablespaces). Some system catalogs are global to all databases within - each cluster, and the descriptions for objects in them are stored - globally as well. - - - - -
- -
- - - Data Validity Checking Functions - - - The functions shown in - can be helpful for checking validity of proposed input data. - - - - Data Validity Checking Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - pg_input_is_valid - - pg_input_is_valid ( - string text, - type text - ) - boolean - - - Tests whether the given string is valid - input for the specified data type, returning true or false. - - - This function will only work as desired if the data type's input - function has been updated to report invalid input as - a soft error. Otherwise, invalid input will abort - the transaction, just as if the string had been cast to the type - directly. - - - pg_input_is_valid('42', 'integer') - t - - - pg_input_is_valid('42000000000', 'integer') - f - - - pg_input_is_valid('1234.567', 'numeric(7,4)') - f - - - - - - pg_input_error_info - - pg_input_error_info ( - string text, - type text - ) - record - ( message text, - detail text, - hint text, - sql_error_code text ) - - - Tests whether the given string is valid - input for the specified data type; if not, return the details of - the error that would have been thrown. If the input is valid, the - results are NULL. The inputs are the same as - for pg_input_is_valid. - - - This function will only work as desired if the data type's input - function has been updated to report invalid input as - a soft error. Otherwise, invalid input will abort - the transaction, just as if the string had been cast to the type - directly. - - - SELECT * FROM pg_input_error_info('42000000000', 'integer') - - - message | detail | hint | sql_error_code -------------------------------------------------------+--------+------+---------------- - value "42000000000" is out of range for type integer | | | 22003 - - - - - -
- -
- - - Transaction ID and Snapshot Information Functions - - - The functions shown in - provide server transaction information in an exportable form. The main - use of these functions is to determine which transactions were committed - between two snapshots. - - - - Transaction ID and Snapshot Information Functions - - - - - Function - - - Description - - - - - - - - - age - - age ( xid ) - integer - - - Returns the number of transactions between the supplied - transaction id and the current transaction counter. - - - - - - - mxid_age - - mxid_age ( xid ) - integer - - - Returns the number of multixacts IDs between the supplied - multixact ID and the current multixacts counter. - - - - - - - pg_current_xact_id - - pg_current_xact_id () - xid8 - - - Returns the current transaction's ID. It will assign a new one if the - current transaction does not have one already (because it has not - performed any database updates); see for details. If executed in a - subtransaction, this will return the top-level transaction ID; - see for details. - - - - - - - pg_current_xact_id_if_assigned - - pg_current_xact_id_if_assigned () - xid8 - - - Returns the current transaction's ID, or NULL if no - ID is assigned yet. (It's best to use this variant if the transaction - might otherwise be read-only, to avoid unnecessary consumption of an - XID.) - If executed in a subtransaction, this will return the top-level - transaction ID. - - - - - - - pg_xact_status - - pg_xact_status ( xid8 ) - text - - - Reports the commit status of a recent transaction. - The result is one of in progress, - committed, or aborted, - provided that the transaction is recent enough that the system retains - the commit status of that transaction. - If it is old enough that no references to the transaction survive in - the system and the commit status information has been discarded, the - result is NULL. - Applications might use this function, for example, to determine - whether their transaction committed or aborted after the application - and database server become disconnected while - a COMMIT is in progress. - Note that prepared transactions are reported as in - progress; applications must check pg_prepared_xacts - if they need to determine whether a transaction ID belongs to a - prepared transaction. - - - - - - - pg_current_snapshot - - pg_current_snapshot () - pg_snapshot - - - Returns a current snapshot, a data structure - showing which transaction IDs are now in-progress. - Only top-level transaction IDs are included in the snapshot; - subtransaction IDs are not shown; see - for details. - - - - - - - pg_snapshot_xip - - pg_snapshot_xip ( pg_snapshot ) - setof xid8 - - - Returns the set of in-progress transaction IDs contained in a snapshot. - - - - - - - pg_snapshot_xmax - - pg_snapshot_xmax ( pg_snapshot ) - xid8 - - - Returns the xmax of a snapshot. - - - - - - - pg_snapshot_xmin - - pg_snapshot_xmin ( pg_snapshot ) - xid8 - - - Returns the xmin of a snapshot. - - - - - - - pg_visible_in_snapshot - - pg_visible_in_snapshot ( xid8, pg_snapshot ) - boolean - - - Is the given transaction ID visible according - to this snapshot (that is, was it completed before the snapshot was - taken)? Note that this function will not give the correct answer for - a subtransaction ID (subxid); see for - details. - - - - -
- - - The internal transaction ID type xid is 32 bits wide and - wraps around every 4 billion transactions. However, - the functions shown in , except - age and mxid_age, use a - 64-bit type xid8 that does not wrap around during the life - of an installation and can be converted to xid by casting if - required; see for details. - The data type pg_snapshot stores information about - transaction ID visibility at a particular moment in time. Its components - are described in . - pg_snapshot's textual representation is - xmin:xmax:xip_list. - For example 10:20:10,14,15 means - xmin=10, xmax=20, xip_list=10, 14, 15. - - - - Snapshot Components - - - - Name - Description - - - - - - xmin - - Lowest transaction ID that was still active. All transaction IDs - less than xmin are either committed and visible, - or rolled back and dead. - - - - - xmax - - One past the highest completed transaction ID. All transaction IDs - greater than or equal to xmax had not yet - completed as of the time of the snapshot, and thus are invisible. - - - - - xip_list - - Transactions in progress at the time of the snapshot. A transaction - ID that is xmin <= X < - xmax and not in this list was already completed at the time - of the snapshot, and thus is either visible or dead according to its - commit status. This list does not include the transaction IDs of - subtransactions (subxids). - - - - -
- - - In releases of PostgreSQL before 13 there was - no xid8 type, so variants of these functions were provided - that used bigint to represent a 64-bit XID, with a - correspondingly distinct snapshot data type txid_snapshot. - These older functions have txid in their names. They - are still supported for backward compatibility, but may be removed from a - future release. See . - - - - Deprecated Transaction ID and Snapshot Information Functions - - - - - Function - - - Description - - - - - - - - - - txid_current - - txid_current () - bigint - - - See pg_current_xact_id(). - - - - - - - txid_current_if_assigned - - txid_current_if_assigned () - bigint - - - See pg_current_xact_id_if_assigned(). - - - - - - - txid_current_snapshot - - txid_current_snapshot () - txid_snapshot - - - See pg_current_snapshot(). - - - - - - - txid_snapshot_xip - - txid_snapshot_xip ( txid_snapshot ) - setof bigint - - - See pg_snapshot_xip(). - - - - - - - txid_snapshot_xmax - - txid_snapshot_xmax ( txid_snapshot ) - bigint - - - See pg_snapshot_xmax(). - - - - - - - txid_snapshot_xmin - - txid_snapshot_xmin ( txid_snapshot ) - bigint - - - See pg_snapshot_xmin(). - - - - - - - txid_visible_in_snapshot - - txid_visible_in_snapshot ( bigint, txid_snapshot ) - boolean - - - See pg_visible_in_snapshot(). - - - - - - - txid_status - - txid_status ( bigint ) - text - - - See pg_xact_status(). - - - - -
- -
- - - Committed Transaction Information Functions - - - The functions shown in - provide information about when past transactions were committed. - They only provide useful data when the - configuration option is - enabled, and only for transactions that were committed after it was - enabled. Commit timestamp information is routinely removed during - vacuum. - - - - Committed Transaction Information Functions - - - - - Function - - - Description - - - - - - - - - pg_xact_commit_timestamp - - pg_xact_commit_timestamp ( xid ) - timestamp with time zone - - - Returns the commit timestamp of a transaction. - - - - - - - pg_xact_commit_timestamp_origin - - pg_xact_commit_timestamp_origin ( xid ) - record - ( timestamp timestamp with time zone, - roident oid) - - - Returns the commit timestamp and replication origin of a transaction. - - - - - - - pg_last_committed_xact - - pg_last_committed_xact () - record - ( xid xid, - timestamp timestamp with time zone, - roident oid ) - - - Returns the transaction ID, commit timestamp and replication origin - of the latest committed transaction. - - - - -
- -
- - - Control Data Functions - - - The functions shown in - print information initialized during initdb, such - as the catalog version. They also show information about write-ahead - logging and checkpoint processing. This information is cluster-wide, - not specific to any one database. These functions provide most of the same - information, from the same source, as the - application. - - - - Control Data Functions - - - - - Function - - - Description - - - - - - - - - pg_control_checkpoint - - pg_control_checkpoint () - record - - - Returns information about current checkpoint state, as shown in - . - - - - - - - pg_control_system - - pg_control_system () - record - - - Returns information about current control file state, as shown in - . - - - - - - - pg_control_init - - pg_control_init () - record - - - Returns information about cluster initialization state, as shown in - . - - - - - - - pg_control_recovery - - pg_control_recovery () - record - - - Returns information about recovery state, as shown in - . - - - - -
- - - <function>pg_control_checkpoint</function> Output Columns - - - - Column Name - Data Type - - - - - - - checkpoint_lsn - pg_lsn - - - - redo_lsn - pg_lsn - - - - redo_wal_file - text - - - - timeline_id - integer - - - - prev_timeline_id - integer - - - - full_page_writes - boolean - - - - next_xid - text - - - - next_oid - oid - - - - next_multixact_id - xid - - - - next_multi_offset - xid - - - - oldest_xid - xid - - - - oldest_xid_dbid - oid - - - - oldest_active_xid - xid - - - - oldest_multi_xid - xid - - - - oldest_multi_dbid - oid - - - - oldest_commit_ts_xid - xid - - - - newest_commit_ts_xid - xid - - - - checkpoint_time - timestamp with time zone - - - - -
- - - <function>pg_control_system</function> Output Columns - - - - Column Name - Data Type - - - - - - - pg_control_version - integer - - - - catalog_version_no - integer - - - - system_identifier - bigint - - - - pg_control_last_modified - timestamp with time zone - - - - -
- - - <function>pg_control_init</function> Output Columns - - - - Column Name - Data Type - - - - - - - max_data_alignment - integer - - - - database_block_size - integer - - - - blocks_per_segment - integer - - - - wal_block_size - integer - - - - bytes_per_wal_segment - integer - - - - max_identifier_length - integer - - - - max_index_columns - integer - - - - max_toast_chunk_size - integer - - - - large_object_chunk_size - integer - - - - float8_pass_by_value - boolean - - - - data_page_checksum_version - integer - - - - default_char_signedness - boolean - - - - -
- - - <function>pg_control_recovery</function> Output Columns - - - - Column Name - Data Type - - - - - - - min_recovery_end_lsn - pg_lsn - - - - min_recovery_end_timeline - integer - - - - backup_start_lsn - pg_lsn - - - - backup_end_lsn - pg_lsn - - - - end_of_backup_record_required - boolean - - - - -
- -
- - - Version Information Functions - - - The functions shown in - print version information. - - - - Version Information Functions - - - - - Function - - - Description - - - - - - - - - version - - version () - text - - - Returns a string describing the PostgreSQL - server's version. You can also get this information from - , or for a machine-readable - version use . Software - developers should use server_version_num (available - since 8.2) or instead of - parsing the text version. - - - - - - - unicode_version - - unicode_version () - text - - - Returns a string representing the version of Unicode used by - PostgreSQL. - - - - - - icu_unicode_version - - icu_unicode_version () - text - - - Returns a string representing the version of Unicode used by ICU, if - the server was built with ICU support; otherwise returns - NULL - - - -
- -
- - - WAL Summarization Information Functions - - - The functions shown in - print information about the status of WAL summarization. - See . - - - - WAL Summarization Information Functions - - - - - Function - - - Description - - - - - - - - - pg_available_wal_summaries - - pg_available_wal_summaries () - setof record - ( tli bigint, - start_lsn pg_lsn, - end_lsn pg_lsn ) - - - Returns information about the WAL summary files present in the - data directory, under pg_wal/summaries. - One row will be returned per WAL summary file. Each file summarizes - WAL on the indicated TLI within the indicated LSN range. This function - might be useful to determine whether enough WAL summaries are present - on the server to take an incremental backup based on some prior - backup whose start LSN is known. - - - - - - - pg_wal_summary_contents - - pg_wal_summary_contents ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn ) - setof record - ( relfilenode oid, - reltablespace oid, - reldatabase oid, - relforknumber smallint, - relblocknumber bigint, - is_limit_block boolean ) - - - Returns one information about the contents of a single WAL summary file - identified by TLI and starting and ending LSNs. Each row with - is_limit_block false indicates that the block - identified by the remaining output columns was modified by at least - one WAL record within the range of records summarized by this file. - Each row with is_limit_block true indicates either - that (a) the relation fork was truncated to the length given by - relblocknumber within the relevant range of WAL - records or (b) that the relation fork was created or dropped within - the relevant range of WAL records; in such cases, - relblocknumber will be zero. - - - - - - - pg_get_wal_summarizer_state - - pg_get_wal_summarizer_state () - record - ( summarized_tli bigint, - summarized_lsn pg_lsn, - pending_lsn pg_lsn, - summarizer_pid int ) - - - Returns information about the progress of the WAL summarizer. If the - WAL summarizer has never run since the instance was started, then - summarized_tli and summarized_lsn - will be 0 and 0/0 respectively; - otherwise, they will be the TLI and ending LSN of the last WAL summary - file written to disk. If the WAL summarizer is currently running, - pending_lsn will be the ending LSN of the last - record that it has consumed, which must always be greater than or - equal to summarized_lsn; if the WAL summarizer is - not running, it will be equal to summarized_lsn. - summarizer_pid is the PID of the WAL summarizer - process, if it is running, and otherwise NULL. - - - As a special exception, the WAL summarizer will refuse to generate - WAL summary files if run on WAL generated under - wal_level=minimal, since such summaries would be - unsafe to use as the basis for an incremental backup. In this case, - the fields above will continue to advance as if summaries were being - generated, but nothing will be written to disk. Once the summarizer - reaches WAL generated while wal_level was set - to replica or higher, it will resume writing - summaries to disk. - - - - -
- -
- -
- - - System Administration Functions - - - The functions described in this section are used to control and - monitor a PostgreSQL installation. - - - - Configuration Settings Functions - - - SET - - - - SHOW - - - - configuration - of the server - functions - - - - shows the functions - available to query and alter run-time configuration parameters. - - - - Configuration Settings Functions - - - - - Function - - - Description - - - Example(s) - - - - - - - - - current_setting - - current_setting ( setting_name text , missing_ok boolean ) - text - - - Returns the current value of the - setting setting_name. If there is no such - setting, current_setting throws an error - unless missing_ok is supplied and - is true (in which case NULL is returned). - This function corresponds to - the SQL command . - - - current_setting('datestyle') - ISO, MDY - - - - - - - set_config - - set_config ( - setting_name text, - new_value text, - is_local boolean ) - text - - - Sets the parameter setting_name - to new_value, and returns that value. - If is_local is true, the new - value will only apply during the current transaction. If you want the - new value to apply for the rest of the current session, - use false instead. This function corresponds to - the SQL command . - - - set_config('log_statement_stats', 'off', false) - off - - - - -
- -
- - - Server Signaling Functions - - - signal - backend processes - - - - The functions shown in send control signals to - other server processes. Use of these functions is restricted to - superusers by default but access may be granted to others using - GRANT, with noted exceptions. - - - - Each of these functions returns true if - the signal was successfully sent and false - if sending the signal failed. - - - - Server Signaling Functions - - - - - Function - - - Description - - - - - - - - - pg_cancel_backend - - pg_cancel_backend ( pid integer ) - boolean - - - Cancels the current query of the session whose backend process has the - specified process ID. This is also allowed if the - calling role is a member of the role whose backend is being canceled or - the calling role has privileges of pg_signal_backend, - however only superusers can cancel superuser backends. - As an exception, roles with privileges of - pg_signal_autovacuum_worker are permitted to - cancel autovacuum worker processes, which are otherwise considered - superuser backends. - - - - - - - pg_log_backend_memory_contexts - - pg_log_backend_memory_contexts ( pid integer ) - boolean - - - Requests to log the memory contexts of the backend with the - specified process ID. This function can send the request to - backends and auxiliary processes except logger. These memory contexts - will be logged at - LOG message level. They will appear in - the server log based on the log configuration set - (see for more information), - but will not be sent to the client regardless of - . - - - - - - - pg_reload_conf - - pg_reload_conf () - boolean - - - Causes all processes of the PostgreSQL - server to reload their configuration files. (This is initiated by - sending a SIGHUP signal to the postmaster - process, which in turn sends SIGHUP to each - of its children.) You can use the - pg_file_settings, - pg_hba_file_rules and - pg_ident_file_mappings views - to check the configuration files for possible errors, before reloading. - - - - - - - pg_rotate_logfile - - pg_rotate_logfile () - boolean - - - Signals the log-file manager to switch to a new output file - immediately. This works only when the built-in log collector is - running, since otherwise there is no log-file manager subprocess. - - - - - - - pg_terminate_backend - - pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) - boolean - - - Terminates the session whose backend process has the - specified process ID. This is also allowed if the calling role - is a member of the role whose backend is being terminated or the - calling role has privileges of pg_signal_backend, - however only superusers can terminate superuser backends. - As an exception, roles with privileges of - pg_signal_autovacuum_worker are permitted to - terminate autovacuum worker processes, which are otherwise considered - superuser backends. - - - If timeout is not specified or zero, this - function returns true whether the process actually - terminates or not, indicating only that the sending of the signal was - successful. If the timeout is specified (in - milliseconds) and greater than zero, the function waits until the - process is actually terminated or until the given time has passed. If - the process is terminated, the function - returns true. On timeout, a warning is emitted and - false is returned. - - - - -
- - - pg_cancel_backend and pg_terminate_backend - send signals (SIGINT or SIGTERM - respectively) to backend processes identified by process ID. - The process ID of an active backend can be found from - the pid column of the - pg_stat_activity view, or by listing the - postgres processes on the server (using - ps on Unix or the Task - Manager on Windows). - The role of an active backend can be found from the - usename column of the - pg_stat_activity view. - - - - pg_log_backend_memory_contexts can be used - to log the memory contexts of a backend process. For example: - -postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid()); - pg_log_backend_memory_contexts --------------------------------- - t -(1 row) - -One message for each memory context will be logged. For example: - -LOG: logging memory contexts of PID 10377 -STATEMENT: SELECT pg_log_backend_memory_contexts(pg_backend_pid()); -LOG: level: 0; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used -LOG: level: 1; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used -LOG: level: 1; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used -LOG: level: 1; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used -LOG: level: 1; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used -LOG: level: 1; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used -LOG: level: 1; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used -LOG: level: 1; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used -... -LOG: level: 1; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used -LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used - - If there are more than 100 child contexts under the same parent, the first - 100 child contexts are logged, along with a summary of the remaining contexts. - Note that frequent calls to this function could incur significant overhead, - because it may generate a large number of log messages. - - -
- - - Backup Control Functions - - - backup - - - - The functions shown in assist in making on-line backups. - These functions cannot be executed during recovery (except - pg_backup_start, - pg_backup_stop, - and pg_wal_lsn_diff). - - - - For details about proper usage of these functions, see - . - - - - Backup Control Functions - - - - - Function - - - Description - - - - - - - - - pg_create_restore_point - - pg_create_restore_point ( name text ) - pg_lsn - - - Creates a named marker record in the write-ahead log that can later be - used as a recovery target, and returns the corresponding write-ahead - log location. The given name can then be used with - to specify the point up to - which recovery will proceed. Avoid creating multiple restore points - with the same name, since recovery will stop at the first one whose - name matches the recovery target. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_current_wal_flush_lsn - - pg_current_wal_flush_lsn () - pg_lsn - - - Returns the current write-ahead log flush location (see notes below). - - - - - - - pg_current_wal_insert_lsn - - pg_current_wal_insert_lsn () - pg_lsn - - - Returns the current write-ahead log insert location (see notes below). - - - - - - - pg_current_wal_lsn - - pg_current_wal_lsn () - pg_lsn - - - Returns the current write-ahead log write location (see notes below). - - - - - - - pg_backup_start - - pg_backup_start ( - label text - , fast boolean - ) - pg_lsn - - - Prepares the server to begin an on-line backup. The only required - parameter is an arbitrary user-defined label for the backup. - (Typically this would be the name under which the backup dump file - will be stored.) - If the optional second parameter is given as true, - it specifies executing pg_backup_start as quickly - as possible. This forces an immediate checkpoint which will cause a - spike in I/O operations, slowing any concurrently executing queries. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_backup_stop - - pg_backup_stop ( - wait_for_archive boolean - ) - record - ( lsn pg_lsn, - labelfile text, - spcmapfile text ) - - - Finishes performing an on-line backup. The desired contents of the - backup label file and the tablespace map file are returned as part of - the result of the function and must be written to files in the - backup area. These files must not be written to the live data directory - (doing so will cause PostgreSQL to fail to restart in the event of a - crash). - - - There is an optional parameter of type boolean. - If false, the function will return immediately after the backup is - completed, without waiting for WAL to be archived. This behavior is - only useful with backup software that independently monitors WAL - archiving. Otherwise, WAL required to make the backup consistent might - be missing and make the backup useless. By default or when this - parameter is true, pg_backup_stop will wait for - WAL to be archived when archiving is enabled. (On a standby, this - means that it will wait only when archive_mode = - always. If write activity on the primary is low, - it may be useful to run pg_switch_wal on the - primary in order to trigger an immediate segment switch.) - - - When executed on a primary, this function also creates a backup - history file in the write-ahead log archive area. The history file - includes the label given to pg_backup_start, the - starting and ending write-ahead log locations for the backup, and the - starting and ending times of the backup. After recording the ending - location, the current write-ahead log insertion point is automatically - advanced to the next write-ahead log file, so that the ending - write-ahead log file can be archived immediately to complete the - backup. - - - The result of the function is a single record. - The lsn column holds the backup's ending - write-ahead log location (which again can be ignored). The second - column returns the contents of the backup label file, and the third - column returns the contents of the tablespace map file. These must be - stored as part of the backup and are required as part of the restore - process. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_switch_wal - - pg_switch_wal () - pg_lsn - - - Forces the server to switch to a new write-ahead log file, which - allows the current file to be archived (assuming you are using - continuous archiving). The result is the ending write-ahead log - location plus 1 within the just-completed write-ahead log file. If - there has been no write-ahead log activity since the last write-ahead - log switch, pg_switch_wal does nothing and - returns the start location of the write-ahead log file currently in - use. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_walfile_name - - pg_walfile_name ( lsn pg_lsn ) - text - - - Converts a write-ahead log location to the name of the WAL file - holding that location. - - - - - - - pg_walfile_name_offset - - pg_walfile_name_offset ( lsn pg_lsn ) - record - ( file_name text, - file_offset integer ) - - - Converts a write-ahead log location to a WAL file name and byte offset - within that file. - - - - - - - pg_split_walfile_name - - pg_split_walfile_name ( file_name text ) - record - ( segment_number numeric, - timeline_id bigint ) - - - Extracts the sequence number and timeline ID from a WAL file - name. - - - - - - - pg_wal_lsn_diff - - pg_wal_lsn_diff ( lsn1 pg_lsn, lsn2 pg_lsn ) - numeric - - - Calculates the difference in bytes (lsn1 - lsn2) between two write-ahead log - locations. This can be used - with pg_stat_replication or some of the - functions shown in to - get the replication lag. - - - - -
- - - pg_current_wal_lsn displays the current write-ahead - log write location in the same format used by the above functions. - Similarly, pg_current_wal_insert_lsn displays the - current write-ahead log insertion location - and pg_current_wal_flush_lsn displays the current - write-ahead log flush location. The insertion location is - the logical end of the write-ahead log at any instant, - while the write location is the end of what has actually been written out - from the server's internal buffers, and the flush location is the last - location known to be written to durable storage. The write location is the - end of what can be examined from outside the server, and is usually what - you want if you are interested in archiving partially-complete write-ahead - log files. The insertion and flush locations are made available primarily - for server debugging purposes. These are all read-only operations and do - not require superuser permissions. - - - - You can use pg_walfile_name_offset to extract the - corresponding write-ahead log file name and byte offset from - a pg_lsn value. For example: - -postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn); - file_name | file_offset ---------------------------+------------- - 00000001000000000000000D | 4039624 -(1 row) - - Similarly, pg_walfile_name extracts just the write-ahead log file name. - - - - pg_split_walfile_name is useful to compute a - LSN from a file offset and WAL file name, for example: - -postgres=# \set file_name '000000010000000100C000AB' -postgres=# \set offset 256 -postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset AS lsn - FROM pg_split_walfile_name(:'file_name') pd, - pg_show_all_settings() ps - WHERE ps.name = 'wal_segment_size'; - lsn ---------------- - C001/AB000100 -(1 row) - - - -
- - - Recovery Control Functions - - - The functions shown in provide information - about the current status of a standby server. - These functions may be executed both during recovery and in normal running. - - - - Recovery Information Functions - - - - - Function - - - Description - - - - - - - - - pg_is_in_recovery - - pg_is_in_recovery () - boolean - - - Returns true if recovery is still in progress. - - - - - - - pg_last_wal_receive_lsn - - pg_last_wal_receive_lsn () - pg_lsn - - - Returns the last write-ahead log location that has been received and - synced to disk by streaming replication. While streaming replication - is in progress this will increase monotonically. If recovery has - completed then this will remain static at the location of the last WAL - record received and synced to disk during recovery. If streaming - replication is disabled, or if it has not yet started, the function - returns NULL. - - - - - - - pg_last_wal_replay_lsn - - pg_last_wal_replay_lsn () - pg_lsn - - - Returns the last write-ahead log location that has been replayed - during recovery. If recovery is still in progress this will increase - monotonically. If recovery has completed then this will remain - static at the location of the last WAL record applied during recovery. - When the server has been started normally without recovery, the - function returns NULL. - - - - - - - pg_last_xact_replay_timestamp - - pg_last_xact_replay_timestamp () - timestamp with time zone - - - Returns the time stamp of the last transaction replayed during - recovery. This is the time at which the commit or abort WAL record - for that transaction was generated on the primary. If no transactions - have been replayed during recovery, the function - returns NULL. Otherwise, if recovery is still in - progress this will increase monotonically. If recovery has completed - then this will remain static at the time of the last transaction - applied during recovery. When the server has been started normally - without recovery, the function returns NULL. - - - - - - - pg_get_wal_resource_managers - - pg_get_wal_resource_managers () - setof record - ( rm_id integer, - rm_name text, - rm_builtin boolean ) - - - Returns the currently-loaded WAL resource managers in the system. The - column rm_builtin indicates whether it's a - built-in resource manager, or a custom resource manager loaded by an - extension. - - - - -
- - - The functions shown in control the progress of recovery. - These functions may be executed only during recovery. - - - - Recovery Control Functions - - - - - Function - - - Description - - - - - - - - - pg_is_wal_replay_paused - - pg_is_wal_replay_paused () - boolean - - - Returns true if recovery pause is requested. - - - - - - - pg_get_wal_replay_pause_state - - pg_get_wal_replay_pause_state () - text - - - Returns recovery pause state. The return values are - not paused if pause is not requested, - pause requested if pause is requested but recovery is - not yet paused, and paused if the recovery is - actually paused. - - - - - - - pg_promote - - pg_promote ( wait boolean DEFAULT true, wait_seconds integer DEFAULT 60 ) - boolean - - - Promotes a standby server to primary status. - With wait set to true (the - default), the function waits until promotion is completed - or wait_seconds seconds have passed, and - returns true if promotion is successful - and false otherwise. - If wait is set to false, the - function returns true immediately after sending a - SIGUSR1 signal to the postmaster to trigger - promotion. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_wal_replay_pause - - pg_wal_replay_pause () - void - - - Request to pause recovery. A request doesn't mean that recovery stops - right away. If you want a guarantee that recovery is actually paused, - you need to check for the recovery pause state returned by - pg_get_wal_replay_pause_state(). Note that - pg_is_wal_replay_paused() returns whether a request - is made. While recovery is paused, no further database changes are applied. - If hot standby is active, all new queries will see the same consistent - snapshot of the database, and no further query conflicts will be generated - until recovery is resumed. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_wal_replay_resume - - pg_wal_replay_resume () - void - - - Restarts recovery if it was paused. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - -
- - - pg_wal_replay_pause and - pg_wal_replay_resume cannot be executed while - a promotion is ongoing. If a promotion is triggered while recovery - is paused, the paused state ends and promotion continues. - - - - If streaming replication is disabled, the paused state may continue - indefinitely without a problem. If streaming replication is in - progress then WAL records will continue to be received, which will - eventually fill available disk space, depending upon the duration of - the pause, the rate of WAL generation and available disk space. - - -
- - - Snapshot Synchronization Functions - - - PostgreSQL allows database sessions to synchronize their - snapshots. A snapshot determines which data is visible to the - transaction that is using the snapshot. Synchronized snapshots are - necessary when two or more sessions need to see identical content in the - database. If two sessions just start their transactions independently, - there is always a possibility that some third transaction commits - between the executions of the two START TRANSACTION commands, - so that one session sees the effects of that transaction and the other - does not. - - - - To solve this problem, PostgreSQL allows a transaction to - export the snapshot it is using. As long as the exporting - transaction remains open, other transactions can import its - snapshot, and thereby be guaranteed that they see exactly the same view - of the database that the first transaction sees. But note that any - database changes made by any one of these transactions remain invisible - to the other transactions, as is usual for changes made by uncommitted - transactions. So the transactions are synchronized with respect to - pre-existing data, but act normally for changes they make themselves. - - - - Snapshots are exported with the pg_export_snapshot function, - shown in , and - imported with the command. - - - - Snapshot Synchronization Functions - - - - - Function - - - Description - - - - - - - - - pg_export_snapshot - - pg_export_snapshot () - text - - - Saves the transaction's current snapshot and returns - a text string identifying the snapshot. This string must - be passed (outside the database) to clients that want to import the - snapshot. The snapshot is available for import only until the end of - the transaction that exported it. - - - A transaction can export more than one snapshot, if needed. Note that - doing so is only useful in READ COMMITTED - transactions, since in REPEATABLE READ and higher - isolation levels, transactions use the same snapshot throughout their - lifetime. Once a transaction has exported any snapshots, it cannot be - prepared with . - - - - - - pg_log_standby_snapshot - - pg_log_standby_snapshot () - pg_lsn - - - Take a snapshot of running transactions and write it to WAL, without - having to wait for bgwriter or checkpointer to log one. This is useful - for logical decoding on standby, as logical slot creation has to wait - until such a record is replayed on the standby. - - - - -
- -
- - - Replication Management Functions - - - The functions shown - in are for - controlling and interacting with replication features. - See , - , and - - for information about the underlying features. - Use of functions for replication origin is only allowed to the - superuser by default, but may be allowed to other users by using the - GRANT command. - Use of functions for replication slots is restricted to superusers - and users having REPLICATION privilege. - - - - Many of these functions have equivalent commands in the replication - protocol; see . - - - - The functions described in - , - , and - - are also relevant for replication. - - - - Replication Management Functions - - - - - Function - - - Description - - - - - - - - - pg_create_physical_replication_slot - - pg_create_physical_replication_slot ( slot_name name , immediately_reserve boolean, temporary boolean ) - record - ( slot_name name, - lsn pg_lsn ) - - - Creates a new physical replication slot named - slot_name. The optional second parameter, - when true, specifies that the LSN for this - replication slot be reserved immediately; otherwise - the LSN is reserved on first connection from a streaming - replication client. Streaming changes from a physical slot is only - possible with the streaming-replication protocol — - see . The optional third - parameter, temporary, when set to true, specifies that - the slot should not be permanently stored to disk and is only meant - for use by the current session. Temporary slots are also - released upon any error. This function corresponds - to the replication protocol command CREATE_REPLICATION_SLOT - ... PHYSICAL. - - - - - - - pg_drop_replication_slot - - pg_drop_replication_slot ( slot_name name ) - void - - - Drops the physical or logical replication slot - named slot_name. Same as replication protocol - command DROP_REPLICATION_SLOT. - - - - - - - pg_create_logical_replication_slot - - pg_create_logical_replication_slot ( slot_name name, plugin name , temporary boolean, twophase boolean, failover boolean ) - record - ( slot_name name, - lsn pg_lsn ) - - - Creates a new logical (decoding) replication slot named - slot_name using the output plugin - plugin. The optional third - parameter, temporary, when set to true, specifies that - the slot should not be permanently stored to disk and is only meant - for use by the current session. Temporary slots are also - released upon any error. The optional fourth parameter, - twophase, when set to true, specifies - that the decoding of prepared transactions is enabled for this - slot. The optional fifth parameter, - failover, when set to true, - specifies that this slot is enabled to be synced to the - standbys so that logical replication can be resumed after - failover. A call to this function has the same effect as - the replication protocol command - CREATE_REPLICATION_SLOT ... LOGICAL. - - - - - - - pg_copy_physical_replication_slot - - pg_copy_physical_replication_slot ( src_slot_name name, dst_slot_name name , temporary boolean ) - record - ( slot_name name, - lsn pg_lsn ) - - - Copies an existing physical replication slot named src_slot_name - to a physical replication slot named dst_slot_name. - The copied physical slot starts to reserve WAL from the same LSN as the - source slot. - temporary is optional. If temporary - is omitted, the same value as the source slot is used. - - - - - - - pg_copy_logical_replication_slot - - pg_copy_logical_replication_slot ( src_slot_name name, dst_slot_name name , temporary boolean , plugin name ) - record - ( slot_name name, - lsn pg_lsn ) - - - Copies an existing logical replication slot - named src_slot_name to a logical replication - slot named dst_slot_name, optionally changing - the output plugin and persistence. The copied logical slot starts - from the same LSN as the source logical slot. Both - temporary and plugin are - optional; if they are omitted, the values of the source slot are used. - The failover option of the source logical slot - is not copied and is set to false by default. This - is to avoid the risk of being unable to continue logical replication - after failover to standby where the slot is being synchronized. - - - - - - - pg_logical_slot_get_changes - - pg_logical_slot_get_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) - setof record - ( lsn pg_lsn, - xid xid, - data text ) - - - Returns changes in the slot slot_name, starting - from the point from which changes have been consumed last. If - upto_lsn - and upto_nchanges are NULL, - logical decoding will continue until end of WAL. If - upto_lsn is non-NULL, decoding will include only - those transactions which commit prior to the specified LSN. If - upto_nchanges is non-NULL, decoding will - stop when the number of rows produced by decoding exceeds - the specified value. Note, however, that the actual number of - rows returned may be larger, since this limit is only checked after - adding the rows produced when decoding each new transaction commit. - If the specified slot is a logical failover slot then the function will - not return until all physical slots specified in - synchronized_standby_slots - have confirmed WAL receipt. - - - - - - - pg_logical_slot_peek_changes - - pg_logical_slot_peek_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) - setof record - ( lsn pg_lsn, - xid xid, - data text ) - - - Behaves just like - the pg_logical_slot_get_changes() function, - except that changes are not consumed; that is, they will be returned - again on future calls. - - - - - - - pg_logical_slot_get_binary_changes - - pg_logical_slot_get_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) - setof record - ( lsn pg_lsn, - xid xid, - data bytea ) - - - Behaves just like - the pg_logical_slot_get_changes() function, - except that changes are returned as bytea. - - - - - - - pg_logical_slot_peek_binary_changes - - pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) - setof record - ( lsn pg_lsn, - xid xid, - data bytea ) - - - Behaves just like - the pg_logical_slot_peek_changes() function, - except that changes are returned as bytea. - - - - - - - pg_replication_slot_advance - - pg_replication_slot_advance ( slot_name name, upto_lsn pg_lsn ) - record - ( slot_name name, - end_lsn pg_lsn ) - - - Advances the current confirmed position of a replication slot named - slot_name. The slot will not be moved backwards, - and it will not be moved beyond the current insert location. Returns - the name of the slot and the actual position that it was advanced to. - The updated slot position information is written out at the next - checkpoint if any advancing is done. So in the event of a crash, the - slot may return to an earlier position. If the specified slot is a - logical failover slot then the function will not return until all - physical slots specified in - synchronized_standby_slots - have confirmed WAL receipt. - - - - - - - pg_replication_origin_create - - pg_replication_origin_create ( node_name text ) - oid - - - Creates a replication origin with the given external - name, and returns the internal ID assigned to it. - - - - - - - pg_replication_origin_drop - - pg_replication_origin_drop ( node_name text ) - void - - - Deletes a previously-created replication origin, including any - associated replay progress. - - - - - - - pg_replication_origin_oid - - pg_replication_origin_oid ( node_name text ) - oid - - - Looks up a replication origin by name and returns the internal ID. If - no such replication origin is found, NULL is - returned. - - - - - - - pg_replication_origin_session_setup - - pg_replication_origin_session_setup ( node_name text ) - void - - - Marks the current session as replaying from the given - origin, allowing replay progress to be tracked. - Can only be used if no origin is currently selected. - Use pg_replication_origin_session_reset to undo. - - - - - - - pg_replication_origin_session_reset - - pg_replication_origin_session_reset () - void - - - Cancels the effects - of pg_replication_origin_session_setup(). - - - - - - - pg_replication_origin_session_is_setup - - pg_replication_origin_session_is_setup () - boolean - - - Returns true if a replication origin has been selected in the - current session. - - - - - - - pg_replication_origin_session_progress - - pg_replication_origin_session_progress ( flush boolean ) - pg_lsn - - - Returns the replay location for the replication origin selected in - the current session. The parameter flush - determines whether the corresponding local transaction will be - guaranteed to have been flushed to disk or not. - - - - - - - pg_replication_origin_xact_setup - - pg_replication_origin_xact_setup ( origin_lsn pg_lsn, origin_timestamp timestamp with time zone ) - void - - - Marks the current transaction as replaying a transaction that has - committed at the given LSN and timestamp. Can - only be called when a replication origin has been selected - using pg_replication_origin_session_setup. - - - - - - - pg_replication_origin_xact_reset - - pg_replication_origin_xact_reset () - void - - - Cancels the effects of - pg_replication_origin_xact_setup(). - - - - - - - pg_replication_origin_advance - - pg_replication_origin_advance ( node_name text, lsn pg_lsn ) - void - - - Sets replication progress for the given node to the given - location. This is primarily useful for setting up the initial - location, or setting a new location after configuration changes and - similar. Be aware that careless use of this function can lead to - inconsistently replicated data. - - - - - - - pg_replication_origin_progress - - pg_replication_origin_progress ( node_name text, flush boolean ) - pg_lsn - - - Returns the replay location for the given replication origin. The - parameter flush determines whether the - corresponding local transaction will be guaranteed to have been - flushed to disk or not. - - - - - - - pg_logical_emit_message - - pg_logical_emit_message ( transactional boolean, prefix text, content text , flush boolean DEFAULT false ) - pg_lsn - - - pg_logical_emit_message ( transactional boolean, prefix text, content bytea , flush boolean DEFAULT false ) - pg_lsn - - - Emits a logical decoding message. This can be used to pass generic - messages to logical decoding plugins through - WAL. The transactional parameter specifies if - the message should be part of the current transaction, or if it should - be written immediately and decoded as soon as the logical decoder - reads the record. The prefix parameter is a - textual prefix that can be used by logical decoding plugins to easily - recognize messages that are interesting for them. - The content parameter is the content of the - message, given either in text or binary form. - The flush parameter (default set to - false) controls if the message is immediately - flushed to WAL or not. flush has no effect - with transactional, as the message's WAL - record is flushed along with its transaction. - - - - - - - pg_sync_replication_slots - - pg_sync_replication_slots () - void - - - Synchronize the logical failover replication slots from the primary - server to the standby server. This function can only be executed on the - standby server. Temporary synced slots, if any, cannot be used for - logical decoding and must be dropped after promotion. See - for details. - Note that this function cannot be executed if - - sync_replication_slots is enabled and the slotsync - worker is already running to perform the synchronization of slots. - - - - - If, after executing the function, - - hot_standby_feedback is disabled on - the standby or the physical slot configured in - - primary_slot_name is - removed, then it is possible that the necessary rows of the - synchronized slot will be removed by the VACUUM process on the primary - server, resulting in the synchronized slot becoming invalidated. - - - - - - - -
- -
- - - Database Object Management Functions - - - The functions shown in calculate - the disk space usage of database objects, or assist in presentation - or understanding of usage results. bigint results - are measured in bytes. If an OID that does - not represent an existing object is passed to one of these - functions, NULL is returned. - - - - Database Object Size Functions - - - - - Function - - - Description - - - - - - - - - pg_column_size - - pg_column_size ( "any" ) - integer - - - Shows the number of bytes used to store any individual data value. If - applied directly to a table column value, this reflects any - compression that was done. - - - - - - - pg_column_compression - - pg_column_compression ( "any" ) - text - - - Shows the compression algorithm that was used to compress - an individual variable-length value. Returns NULL - if the value is not compressed. - - - - - - - pg_column_toast_chunk_id - - pg_column_toast_chunk_id ( "any" ) - oid - - - Shows the chunk_id of an on-disk - TOASTed value. Returns NULL - if the value is un-TOASTed or not on-disk. See - for more information about - TOAST. - - - - - - - pg_database_size - - pg_database_size ( name ) - bigint - - - pg_database_size ( oid ) - bigint - - - Computes the total disk space used by the database with the specified - name or OID. To use this function, you must - have CONNECT privilege on the specified database - (which is granted by default) or have privileges of - the pg_read_all_stats role. - - - - - - - pg_indexes_size - - pg_indexes_size ( regclass ) - bigint - - - Computes the total disk space used by indexes attached to the - specified table. - - - - - - - pg_relation_size - - pg_relation_size ( relation regclass , fork text ) - bigint - - - Computes the disk space used by one fork of the - specified relation. (Note that for most purposes it is more - convenient to use the higher-level - functions pg_total_relation_size - or pg_table_size, which sum the sizes of all - forks.) With one argument, this returns the size of the main data - fork of the relation. The second argument can be provided to specify - which fork to examine: - - - - main returns the size of the main - data fork of the relation. - - - - - fsm returns the size of the Free Space Map - (see ) associated with the relation. - - - - - vm returns the size of the Visibility Map - (see ) associated with the relation. - - - - - init returns the size of the initialization - fork, if any, associated with the relation. - - - - - - - - - - pg_size_bytes - - pg_size_bytes ( text ) - bigint - - - Converts a size in human-readable format (as returned - by pg_size_pretty) into bytes. Valid units are - bytes, B, kB, - MB, GB, TB, - and PB. - - - - - - - pg_size_pretty - - pg_size_pretty ( bigint ) - text - - - pg_size_pretty ( numeric ) - text - - - Converts a size in bytes into a more easily human-readable format with - size units (bytes, kB, MB, GB, TB, or PB as appropriate). Note that the - units are powers of 2 rather than powers of 10, so 1kB is 1024 bytes, - 1MB is 10242 = 1048576 bytes, and so on. - - - - - - - pg_table_size - - pg_table_size ( regclass ) - bigint - - - Computes the disk space used by the specified table, excluding indexes - (but including its TOAST table if any, free space map, and visibility - map). - - - - - - - pg_tablespace_size - - pg_tablespace_size ( name ) - bigint - - - pg_tablespace_size ( oid ) - bigint - - - Computes the total disk space used in the tablespace with the - specified name or OID. To use this function, you must - have CREATE privilege on the specified tablespace - or have privileges of the pg_read_all_stats role, - unless it is the default tablespace for the current database. - - - - - - - pg_total_relation_size - - pg_total_relation_size ( regclass ) - bigint - - - Computes the total disk space used by the specified table, including - all indexes and TOAST data. The result is - equivalent to pg_table_size - + pg_indexes_size. - - - - -
- - - The functions above that operate on tables or indexes accept a - regclass argument, which is simply the OID of the table or index - in the pg_class system catalog. You do not have to look up - the OID by hand, however, since the regclass data type's input - converter will do the work for you. See - for details. - - - - The functions shown in assist - in identifying the specific disk files associated with database objects. - - - - Database Object Location Functions - - - - - Function - - - Description - - - - - - - - - pg_relation_filenode - - pg_relation_filenode ( relation regclass ) - oid - - - Returns the filenode number currently assigned to the - specified relation. The filenode is the base component of the file - name(s) used for the relation (see - for more information). - For most relations the result is the same as - pg_class.relfilenode, - but for certain system catalogs relfilenode - is zero and this function must be used to get the correct value. The - function returns NULL if passed a relation that does not have storage, - such as a view. - - - - - - - pg_relation_filepath - - pg_relation_filepath ( relation regclass ) - text - - - Returns the entire file path name (relative to the database cluster's - data directory, PGDATA) of the relation. - - - - - - - pg_filenode_relation - - pg_filenode_relation ( tablespace oid, filenode oid ) - regclass - - - Returns a relation's OID given the tablespace OID and filenode it is - stored under. This is essentially the inverse mapping of - pg_relation_filepath. For a relation in the - database's default tablespace, the tablespace can be specified as zero. - Returns NULL if no relation in the current database - is associated with the given values. - - - - -
- - - lists functions used to manage - collations. - - - - Collation Management Functions - - - - - Function - - - Description - - - - - - - - - pg_collation_actual_version - - pg_collation_actual_version ( oid ) - text - - - Returns the actual version of the collation object as it is currently - installed in the operating system. If this is different from the - value in - pg_collation.collversion, - then objects depending on the collation might need to be rebuilt. See - also . - - - - - - - pg_database_collation_actual_version - - pg_database_collation_actual_version ( oid ) - text - - - Returns the actual version of the database's collation as it is currently - installed in the operating system. If this is different from the - value in - pg_database.datcollversion, - then objects depending on the collation might need to be rebuilt. See - also . - - - - - - - pg_import_system_collations - - pg_import_system_collations ( schema regnamespace ) - integer - - - Adds collations to the system - catalog pg_collation based on all the locales - it finds in the operating system. This is - what initdb uses; see - for more details. If additional - locales are installed into the operating system later on, this - function can be run again to add collations for the new locales. - Locales that match existing entries - in pg_collation will be skipped. (But - collation objects based on locales that are no longer present in the - operating system are not removed by this function.) - The schema parameter would typically - be pg_catalog, but that is not a requirement; the - collations could be installed into some other schema as well. The - function returns the number of new collation objects it created. - Use of this function is restricted to superusers. - - - - -
- - - lists functions used to - manipulate statistics. - These functions cannot be executed during recovery. - - - Changes made by these statistics manipulation functions are likely to be - overwritten by autovacuum (or manual - VACUUM or ANALYZE) and should be - considered temporary. - - - - - - Database Object Statistics Manipulation Functions - - - - - Function - - - Description - - - - - - - - - pg_restore_relation_stats - - pg_restore_relation_stats ( - VARIADIC kwargs "any" ) - boolean - - - Updates table-level statistics. Ordinarily, these statistics are - collected automatically or updated as a part of or , so it's not - necessary to call this function. However, it is useful after a - restore to enable the optimizer to choose better plans if - ANALYZE has not been run yet. - - - The tracked statistics may change from version to version, so - arguments are passed as pairs of argname - and argvalue in the form: - - SELECT pg_restore_relation_stats( - 'arg1name', 'arg1value'::arg1type, - 'arg2name', 'arg2value'::arg2type, - 'arg3name', 'arg3value'::arg3type); - - - - For example, to set the relpages and - reltuples values for the table - mytable: - - SELECT pg_restore_relation_stats( - 'schemaname', 'myschema', - 'relname', 'mytable', - 'relpages', 173::integer, - 'reltuples', 10000::real); - - - - The arguments schemaname and - relname are required, and specify the table. Other - arguments are the names and values of statistics corresponding to - certain columns in pg_class. - The currently-supported relation statistics are - relpages with a value of type - integer, reltuples with a value of - type real, relallvisible with a value - of type integer, and relallfrozen - with a value of type integer. - - - Additionally, this function accepts argument name - version of type integer, which - specifies the server version from which the statistics originated. - This is anticipated to be helpful in porting statistics from older - versions of PostgreSQL. - - - Minor errors are reported as a WARNING and - ignored, and remaining statistics will still be restored. If all - specified statistics are successfully restored, returns - true, otherwise false. - - - The caller must have the MAINTAIN privilege on the - table or be the owner of the database. - - - - - - - - - pg_clear_relation_stats - - pg_clear_relation_stats ( schemaname text, relname text ) - void - - - Clears table-level statistics for the given relation, as though the - table was newly created. - - - The caller must have the MAINTAIN privilege on the - table or be the owner of the database. - - - - - - - - pg_restore_attribute_stats - - pg_restore_attribute_stats ( - VARIADIC kwargs "any" ) - boolean - - - Creates or updates column-level statistics. Ordinarily, these - statistics are collected automatically or updated as a part of or , so it's not - necessary to call this function. However, it is useful after a - restore to enable the optimizer to choose better plans if - ANALYZE has not been run yet. - - - The tracked statistics may change from version to version, so - arguments are passed as pairs of argname - and argvalue in the form: - - SELECT pg_restore_attribute_stats( - 'arg1name', 'arg1value'::arg1type, - 'arg2name', 'arg2value'::arg2type, - 'arg3name', 'arg3value'::arg3type); - - - - For example, to set the avg_width and - null_frac values for the attribute - col1 of the table - mytable: - - SELECT pg_restore_attribute_stats( - 'schemaname', 'myschema', - 'relname', 'mytable', - 'attname', 'col1', - 'inherited', false, - 'avg_width', 125::integer, - 'null_frac', 0.5::real); - - - - The required arguments are schemaname and - relname with a value of type text - which specify the table; either attname with a - value of type text or attnum with a - value of type smallint, which specifies the column; and - inherited, which specifies whether the statistics - include values from child tables. Other arguments are the names and - values of statistics corresponding to columns in pg_stats. - - - Additionally, this function accepts argument name - version of type integer, which - specifies the server version from which the statistics originated. - This is anticipated to be helpful in porting statistics from older - versions of PostgreSQL. - - - Minor errors are reported as a WARNING and - ignored, and remaining statistics will still be restored. If all - specified statistics are successfully restored, returns - true, otherwise false. - - - The caller must have the MAINTAIN privilege on the - table or be the owner of the database. - - - - - - - - - pg_clear_attribute_stats - - pg_clear_attribute_stats ( - schemaname text, - relname text, - attname text, - inherited boolean ) - void - - - Clears column-level statistics for the given relation and - attribute, as though the table was newly created. - - - The caller must have the MAINTAIN privilege on - the table or be the owner of the database. - - - - - -
- - - lists functions that provide - information about the structure of partitioned tables. - - - - Partitioning Information Functions - - - - - Function - - - Description - - - - - - - - - pg_partition_tree - - pg_partition_tree ( regclass ) - setof record - ( relid regclass, - parentrelid regclass, - isleaf boolean, - level integer ) - - - Lists the tables or indexes in the partition tree of the - given partitioned table or partitioned index, with one row for each - partition. Information provided includes the OID of the partition, - the OID of its immediate parent, a boolean value telling if the - partition is a leaf, and an integer telling its level in the hierarchy. - The level value is 0 for the input table or index, 1 for its - immediate child partitions, 2 for their partitions, and so on. - Returns no rows if the relation does not exist or is not a partition - or partitioned table. - - - - - - - pg_partition_ancestors - - pg_partition_ancestors ( regclass ) - setof regclass - - - Lists the ancestor relations of the given partition, - including the relation itself. Returns no rows if the relation - does not exist or is not a partition or partitioned table. - - - - - - - pg_partition_root - - pg_partition_root ( regclass ) - regclass - - - Returns the top-most parent of the partition tree to which the given - relation belongs. Returns NULL if the relation - does not exist or is not a partition or partitioned table. - - - - -
- - - For example, to check the total size of the data contained in a - partitioned table measurement, one could use the - following query: - -SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size - FROM pg_partition_tree('measurement'); - - - -
- - - Index Maintenance Functions - - - shows the functions - available for index maintenance tasks. (Note that these maintenance - tasks are normally done automatically by autovacuum; use of these - functions is only required in special cases.) - These functions cannot be executed during recovery. - Use of these functions is restricted to superusers and the owner - of the given index. - - - - Index Maintenance Functions - - - - - Function - - - Description - - - - - - - - - brin_summarize_new_values - - brin_summarize_new_values ( index regclass ) - integer - - - Scans the specified BRIN index to find page ranges in the base table - that are not currently summarized by the index; for any such range it - creates a new summary index tuple by scanning those table pages. - Returns the number of new page range summaries that were inserted - into the index. - - - - - - - brin_summarize_range - - brin_summarize_range ( index regclass, blockNumber bigint ) - integer - - - Summarizes the page range covering the given block, if not already - summarized. This is - like brin_summarize_new_values except that it - only processes the page range that covers the given table block number. - - - - - - - brin_desummarize_range - - brin_desummarize_range ( index regclass, blockNumber bigint ) - void - - - Removes the BRIN index tuple that summarizes the page range covering - the given table block, if there is one. - - - - - - - gin_clean_pending_list - - gin_clean_pending_list ( index regclass ) - bigint - - - Cleans up the pending list of the specified GIN index - by moving entries in it, in bulk, to the main GIN data structure. - Returns the number of pages removed from the pending list. - If the argument is a GIN index built with - the fastupdate option disabled, no cleanup happens - and the result is zero, because the index doesn't have a pending list. - See and - for details about the pending list and fastupdate - option. - - - - -
- -
- - - Generic File Access Functions - - - The functions shown in provide native access to - files on the machine hosting the server. Only files within the - database cluster directory and the log_directory can be - accessed, unless the user is a superuser or is granted the role - pg_read_server_files. Use a relative path for files in - the cluster directory, and a path matching the log_directory - configuration setting for log files. - - - - Note that granting users the EXECUTE privilege on - pg_read_file(), or related functions, allows them the - ability to read any file on the server that the database server process can - read; these functions bypass all in-database privilege checks. This means - that, for example, a user with such access is able to read the contents of - the pg_authid table where authentication - information is stored, as well as read any table data in the database. - Therefore, granting access to these functions should be carefully - considered. - - - - When granting privilege on these functions, note that the table entries - showing optional parameters are mostly implemented as several physical - functions with different parameter lists. Privilege must be granted - separately on each such function, if it is to be - used. psql's \df command - can be useful to check what the actual function signatures are. - - - - Some of these functions take an optional missing_ok - parameter, which specifies the behavior when the file or directory does - not exist. If true, the function - returns NULL or an empty result set, as appropriate. - If false, an error is raised. (Failure conditions - other than file not found are reported as errors in any - case.) The default is false. - - - - Generic File Access Functions - - - - - Function - - - Description - - - - - - - - - pg_ls_dir - - pg_ls_dir ( dirname text , missing_ok boolean, include_dot_dirs boolean ) - setof text - - - Returns the names of all files (and directories and other special - files) in the specified - directory. The include_dot_dirs parameter - indicates whether . and .. are to be - included in the result set; the default is to exclude them. Including - them can be useful when missing_ok - is true, to distinguish an empty directory from a - non-existent directory. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_ls_logdir - - pg_ls_logdir () - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's log directory. Filenames beginning with - a dot, directories, and other special files are excluded. - - - This function is restricted to superusers and roles with privileges of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_ls_waldir - - pg_ls_waldir () - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's write-ahead log (WAL) directory. - Filenames beginning with a dot, directories, and other special files - are excluded. - - - This function is restricted to superusers and roles with privileges of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_ls_logicalmapdir - - pg_ls_logicalmapdir () - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's pg_logical/mappings - directory. Filenames beginning with a dot, directories, and other - special files are excluded. - - - This function is restricted to superusers and members of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_ls_logicalsnapdir - - pg_ls_logicalsnapdir () - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's pg_logical/snapshots - directory. Filenames beginning with a dot, directories, and other - special files are excluded. - - - This function is restricted to superusers and members of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_ls_replslotdir - - pg_ls_replslotdir ( slot_name text ) - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's pg_replslot/slot_name - directory, where slot_name is the name of the - replication slot provided as input of the function. Filenames beginning - with a dot, directories, and other special files are excluded. - - - This function is restricted to superusers and members of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_ls_summariesdir - - pg_ls_summariesdir () - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's WAL summaries directory - (pg_wal/summaries). Filenames beginning - with a dot, directories, and other special files are excluded. - - - This function is restricted to superusers and members of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_ls_archive_statusdir - - pg_ls_archive_statusdir () - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the server's WAL archive status directory - (pg_wal/archive_status). Filenames beginning - with a dot, directories, and other special files are excluded. - - - This function is restricted to superusers and members of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - - pg_ls_tmpdir - - pg_ls_tmpdir ( tablespace oid ) - setof record - ( name text, - size bigint, - modification timestamp with time zone ) - - - Returns the name, size, and last modification time (mtime) of each - ordinary file in the temporary file directory for the - specified tablespace. - If tablespace is not provided, - the pg_default tablespace is examined. Filenames - beginning with a dot, directories, and other special files are - excluded. - - - This function is restricted to superusers and members of - the pg_monitor role by default, but other users can - be granted EXECUTE to run the function. - - - - - - - pg_read_file - - pg_read_file ( filename text , offset bigint, length bigint , missing_ok boolean ) - text - - - Returns all or part of a text file, starting at the - given byte offset, returning at - most length bytes (less if the end of file is - reached first). If offset is negative, it is - relative to the end of the file. If offset - and length are omitted, the entire file is - returned. The bytes read from the file are interpreted as a string in - the database's encoding; an error is thrown if they are not valid in - that encoding. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - - - pg_read_binary_file - - pg_read_binary_file ( filename text , offset bigint, length bigint , missing_ok boolean ) - bytea - - - Returns all or part of a file. This function is identical to - pg_read_file except that it can read arbitrary - binary data, returning the result as bytea - not text; accordingly, no encoding checks are performed. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - In combination with the convert_from function, - this function can be used to read a text file in a specified encoding - and convert to the database's encoding: - -SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); - - - - - - - - pg_stat_file - - pg_stat_file ( filename text , missing_ok boolean ) - record - ( size bigint, - access timestamp with time zone, - modification timestamp with time zone, - change timestamp with time zone, - creation timestamp with time zone, - isdir boolean ) - - - Returns a record containing the file's size, last access time stamp, - last modification time stamp, last file status change time stamp (Unix - platforms only), file creation time stamp (Windows only), and a flag - indicating if it is a directory. - - - This function is restricted to superusers by default, but other users - can be granted EXECUTE to run the function. - - - - - -
- -
- - - Advisory Lock Functions - - - The functions shown in - manage advisory locks. For details about proper use of these functions, - see . - - - - All these functions are intended to be used to lock application-defined - resources, which can be identified either by a single 64-bit key value or - two 32-bit key values (note that these two key spaces do not overlap). - If another session already holds a conflicting lock on the same resource - identifier, the functions will either wait until the resource becomes - available, or return a false result, as appropriate for - the function. - Locks can be either shared or exclusive: a shared lock does not conflict - with other shared locks on the same resource, only with exclusive locks. - Locks can be taken at session level (so that they are held until released - or the session ends) or at transaction level (so that they are held until - the current transaction ends; there is no provision for manual release). - Multiple session-level lock requests stack, so that if the same resource - identifier is locked three times there must then be three unlock requests - to release the resource in advance of session end. - - - - Advisory Lock Functions - - - - - Function - - - Description - - - - - - - - - pg_advisory_lock - - pg_advisory_lock ( key bigint ) - void - - - pg_advisory_lock ( key1 integer, key2 integer ) - void - - - Obtains an exclusive session-level advisory lock, waiting if necessary. - - - - - - - pg_advisory_lock_shared - - pg_advisory_lock_shared ( key bigint ) - void - - - pg_advisory_lock_shared ( key1 integer, key2 integer ) - void - - - Obtains a shared session-level advisory lock, waiting if necessary. - - - - - - - pg_advisory_unlock - - pg_advisory_unlock ( key bigint ) - boolean - - - pg_advisory_unlock ( key1 integer, key2 integer ) - boolean - - - Releases a previously-acquired exclusive session-level advisory lock. - Returns true if the lock is successfully released. - If the lock was not held, false is returned, and in - addition, an SQL warning will be reported by the server. - - - - - - - pg_advisory_unlock_all - - pg_advisory_unlock_all () - void - - - Releases all session-level advisory locks held by the current session. - (This function is implicitly invoked at session end, even if the - client disconnects ungracefully.) - - - - - - - pg_advisory_unlock_shared - - pg_advisory_unlock_shared ( key bigint ) - boolean - - - pg_advisory_unlock_shared ( key1 integer, key2 integer ) - boolean - - - Releases a previously-acquired shared session-level advisory lock. - Returns true if the lock is successfully released. - If the lock was not held, false is returned, and in - addition, an SQL warning will be reported by the server. - - - - - - - pg_advisory_xact_lock - - pg_advisory_xact_lock ( key bigint ) - void - - - pg_advisory_xact_lock ( key1 integer, key2 integer ) - void - - - Obtains an exclusive transaction-level advisory lock, waiting if - necessary. - - - - - - - pg_advisory_xact_lock_shared - - pg_advisory_xact_lock_shared ( key bigint ) - void - - - pg_advisory_xact_lock_shared ( key1 integer, key2 integer ) - void - - - Obtains a shared transaction-level advisory lock, waiting if - necessary. - - - - - - - pg_try_advisory_lock - - pg_try_advisory_lock ( key bigint ) - boolean - - - pg_try_advisory_lock ( key1 integer, key2 integer ) - boolean - - - Obtains an exclusive session-level advisory lock if available. - This will either obtain the lock immediately and - return true, or return false - without waiting if the lock cannot be acquired immediately. - - - - - - - pg_try_advisory_lock_shared - - pg_try_advisory_lock_shared ( key bigint ) - boolean - - - pg_try_advisory_lock_shared ( key1 integer, key2 integer ) - boolean - - - Obtains a shared session-level advisory lock if available. - This will either obtain the lock immediately and - return true, or return false - without waiting if the lock cannot be acquired immediately. - - - - - - - pg_try_advisory_xact_lock - - pg_try_advisory_xact_lock ( key bigint ) - boolean - - - pg_try_advisory_xact_lock ( key1 integer, key2 integer ) - boolean - - - Obtains an exclusive transaction-level advisory lock if available. - This will either obtain the lock immediately and - return true, or return false - without waiting if the lock cannot be acquired immediately. - - - - - - - pg_try_advisory_xact_lock_shared - - pg_try_advisory_xact_lock_shared ( key bigint ) - boolean - - - pg_try_advisory_xact_lock_shared ( key1 integer, key2 integer ) - boolean - - - Obtains a shared transaction-level advisory lock if available. - This will either obtain the lock immediately and - return true, or return false - without waiting if the lock cannot be acquired immediately. - - - - -
- -
- -
- - - Trigger Functions - - - While many uses of triggers involve user-written trigger functions, - PostgreSQL provides a few built-in trigger - functions that can be used directly in user-defined triggers. These - are summarized in . - (Additional built-in trigger functions exist, which implement foreign - key constraints and deferred index constraints. Those are not documented - here since users need not use them directly.) - - - - For more information about creating triggers, see - . - - - - Built-In Trigger Functions - - - - - Function - - - Description - - - Example Usage - - - - - - - - - suppress_redundant_updates_trigger - - suppress_redundant_updates_trigger ( ) - trigger - - - Suppresses do-nothing update operations. See below for details. - - - CREATE TRIGGER ... suppress_redundant_updates_trigger() - - - - - - - tsvector_update_trigger - - tsvector_update_trigger ( ) - trigger - - - Automatically updates a tsvector column from associated - plain-text document column(s). The text search configuration to use - is specified by name as a trigger argument. See - for details. - - - CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body) - - - - - - - tsvector_update_trigger_column - - tsvector_update_trigger_column ( ) - trigger - - - Automatically updates a tsvector column from associated - plain-text document column(s). The text search configuration to use - is taken from a regconfig column of the table. See - for details. - - - CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, tsconfigcol, title, body) - - - - -
- - - The suppress_redundant_updates_trigger function, - when applied as a row-level BEFORE UPDATE trigger, - will prevent any update that does not actually change the data in the - row from taking place. This overrides the normal behavior which always - performs a physical row update - regardless of whether or not the data has changed. (This normal behavior - makes updates run faster, since no checking is required, and is also - useful in certain cases.) - - - - Ideally, you should avoid running updates that don't actually - change the data in the record. Redundant updates can cost considerable - unnecessary time, especially if there are lots of indexes to alter, - and space in dead rows that will eventually have to be vacuumed. - However, detecting such situations in client code is not - always easy, or even possible, and writing expressions to detect - them can be error-prone. An alternative is to use - suppress_redundant_updates_trigger, which will skip - updates that don't change the data. You should use this with care, - however. The trigger takes a small but non-trivial time for each record, - so if most of the records affected by updates do actually change, - use of this trigger will make updates run slower on average. - - - - The suppress_redundant_updates_trigger function can be - added to a table like this: - -CREATE TRIGGER z_min_update -BEFORE UPDATE ON tablename -FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); - - In most cases, you need to fire this trigger last for each row, so that - it does not override other triggers that might wish to alter the row. - Bearing in mind that triggers fire in name order, you would therefore - choose a trigger name that comes after the name of any other trigger - you might have on the table. (Hence the z prefix in the - example.) - -
- - - Event Trigger Functions - - - PostgreSQL provides these helper functions - to retrieve information from event triggers. - - - - For more information about event triggers, - see . - - - - Capturing Changes at Command End - - - pg_event_trigger_ddl_commands - - - -pg_event_trigger_ddl_commands () setof record - - - - pg_event_trigger_ddl_commands returns a list of - DDL commands executed by each user action, - when invoked in a function attached to a - ddl_command_end event trigger. If called in any other - context, an error is raised. - pg_event_trigger_ddl_commands returns one row for each - base command executed; some commands that are a single SQL sentence - may return more than one row. This function returns the following - columns: - - - - - - Name - Type - Description - - - - - - classid - oid - OID of catalog the object belongs in - - - objid - oid - OID of the object itself - - - objsubid - integer - Sub-object ID (e.g., attribute number for a column) - - - command_tag - text - Command tag - - - object_type - text - Type of the object - - - schema_name - text - - Name of the schema the object belongs in, if any; otherwise NULL. - No quoting is applied. - - - - object_identity - text - - Text rendering of the object identity, schema-qualified. Each - identifier included in the identity is quoted if necessary. - - - - in_extension - boolean - True if the command is part of an extension script - - - command - pg_ddl_command - - A complete representation of the command, in internal format. - This cannot be output directly, but it can be passed to other - functions to obtain different pieces of information about the - command. - - - - - - - - - - Processing Objects Dropped by a DDL Command - - - pg_event_trigger_dropped_objects - - - -pg_event_trigger_dropped_objects () setof record - - - - pg_event_trigger_dropped_objects returns a list of all objects - dropped by the command in whose sql_drop event it is called. - If called in any other context, an error is raised. - This function returns the following columns: - - - - - - Name - Type - Description - - - - - - classid - oid - OID of catalog the object belonged in - - - objid - oid - OID of the object itself - - - objsubid - integer - Sub-object ID (e.g., attribute number for a column) - - - original - boolean - True if this was one of the root object(s) of the deletion - - - normal - boolean - - True if there was a normal dependency relationship - in the dependency graph leading to this object - - - - is_temporary - boolean - - True if this was a temporary object - - - - object_type - text - Type of the object - - - schema_name - text - - Name of the schema the object belonged in, if any; otherwise NULL. - No quoting is applied. - - - - object_name - text - - Name of the object, if the combination of schema and name can be - used as a unique identifier for the object; otherwise NULL. - No quoting is applied, and name is never schema-qualified. - - - - object_identity - text - - Text rendering of the object identity, schema-qualified. Each - identifier included in the identity is quoted if necessary. - - - - address_names - text[] - - An array that, together with object_type and - address_args, can be used by - the pg_get_object_address function to - recreate the object address in a remote server containing an - identically named object of the same kind. - - - - address_args - text[] - - Complement for address_names - - - - - - - - - The pg_event_trigger_dropped_objects function can be used - in an event trigger like this: - -CREATE FUNCTION test_event_trigger_for_drops() - RETURNS event_trigger LANGUAGE plpgsql AS $$ -DECLARE - obj record; -BEGIN - FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() - LOOP - RAISE NOTICE '% dropped object: % %.% %', - tg_tag, - obj.object_type, - obj.schema_name, - obj.object_name, - obj.object_identity; - END LOOP; -END; -$$; -CREATE EVENT TRIGGER test_event_trigger_for_drops - ON sql_drop - EXECUTE FUNCTION test_event_trigger_for_drops(); - - - - - - Handling a Table Rewrite Event - - - The functions shown in - - provide information about a table for which a - table_rewrite event has just been called. - If called in any other context, an error is raised. - - - - Table Rewrite Information Functions - - - - - Function - - - Description - - - - - - - - - pg_event_trigger_table_rewrite_oid - - pg_event_trigger_table_rewrite_oid () - oid - - - Returns the OID of the table about to be rewritten. - - - - - - - pg_event_trigger_table_rewrite_reason - - pg_event_trigger_table_rewrite_reason () - integer - - - Returns a code explaining the reason(s) for rewriting. The value is - a bitmap built from the following values: 1 - (the table has changed its persistence), 2 - (default value of a column has changed), 4 - (a column has a new data type) and 8 - (the table access method has changed). - - - - -
- - - These functions can be used in an event trigger like this: - -CREATE FUNCTION test_event_trigger_table_rewrite_oid() - RETURNS event_trigger - LANGUAGE plpgsql AS -$$ -BEGIN - RAISE NOTICE 'rewriting table % for reason %', - pg_event_trigger_table_rewrite_oid()::regclass, - pg_event_trigger_table_rewrite_reason(); -END; -$$; - -CREATE EVENT TRIGGER test_table_rewrite_oid - ON table_rewrite - EXECUTE FUNCTION test_event_trigger_table_rewrite_oid(); - - -
-
- - - Statistics Information Functions - - - function - statistics - - - - PostgreSQL provides a function to inspect complex - statistics defined using the CREATE STATISTICS command. - - - - Inspecting MCV Lists - - - pg_mcv_list_items - - - -pg_mcv_list_items ( pg_mcv_list ) setof record - - - - pg_mcv_list_items returns a set of records describing - all items stored in a multi-column MCV list. It - returns the following columns: - - - - - - Name - Type - Description - - - - - - index - integer - index of the item in the MCV list - - - values - text[] - values stored in the MCV item - - - nulls - boolean[] - flags identifying NULL values - - - frequency - double precision - frequency of this MCV item - - - base_frequency - double precision - base frequency of this MCV item - - - - - - - - The pg_mcv_list_items function can be used like this: - - -SELECT m.* FROM pg_statistic_ext join pg_statistic_ext_data on (oid = stxoid), - pg_mcv_list_items(stxdmcv) m WHERE stxname = 'stts'; - - - Values of the pg_mcv_list type can be obtained only from the - pg_statistic_ext_data.stxdmcv - column. - - - - - - diff --git a/doc/src/sgml/func/allfiles.sgml b/doc/src/sgml/func/allfiles.sgml new file mode 100644 index 0000000000000..ce11ef1d5d8ed --- /dev/null +++ b/doc/src/sgml/func/allfiles.sgml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/src/sgml/func/func-admin.sgml b/doc/src/sgml/func/func-admin.sgml new file mode 100644 index 0000000000000..57ff333159f00 --- /dev/null +++ b/doc/src/sgml/func/func-admin.sgml @@ -0,0 +1,2963 @@ + + System Administration Functions + + + The functions described in this section are used to control and + monitor a PostgreSQL installation. + + + + Configuration Settings Functions + + + SET + + + + SHOW + + + + configuration + of the server + functions + + + + shows the functions + available to query and alter run-time configuration parameters. + + + + Configuration Settings Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + current_setting + + current_setting ( setting_name text , missing_ok boolean ) + text + + + Returns the current value of the + setting setting_name. If there is no such + setting, current_setting throws an error + unless missing_ok is supplied and + is true (in which case NULL is returned). + This function corresponds to + the SQL command . + + + current_setting('datestyle') + ISO, MDY + + + + + + + set_config + + set_config ( + setting_name text, + new_value text, + is_local boolean ) + text + + + Sets the parameter setting_name + to new_value, and returns that value. + If is_local is true, the new + value will only apply during the current transaction. If you want the + new value to apply for the rest of the current session, + use false instead. This function corresponds to + the SQL command . + + + set_config accepts the NULL value for + new_value, but as settings cannot be null, it + is interpreted as a request to reset the setting to its default value. + + + set_config('log_statement_stats', 'off', false) + off + + + + +
+ +
+ + + Server Signaling Functions + + + signal + backend processes + + + + The functions shown in send control signals to + other server processes. Use of these functions is restricted to + superusers by default but access may be granted to others using + GRANT, with noted exceptions. + + + + Each of these functions returns true if + the signal was successfully sent and false + if sending the signal failed. + + + + Server Signaling Functions + + + + + Function + + + Description + + + + + + + + + pg_cancel_backend + + pg_cancel_backend ( pid integer ) + boolean + + + Cancels the current query of the session whose backend process has the + specified process ID. This is also allowed if the + calling role is a member of the role whose backend is being canceled or + the calling role has privileges of pg_signal_backend, + however only superusers can cancel superuser backends. + As an exception, roles with privileges of + pg_signal_autovacuum_worker are permitted to + cancel autovacuum worker processes, which are otherwise considered + superuser backends. + + + + + + + pg_log_backend_memory_contexts + + pg_log_backend_memory_contexts ( pid integer ) + boolean + + + Requests to log the memory contexts of the backend with the + specified process ID. This function can send the request to + backends and auxiliary processes except logger. These memory contexts + will be logged at + LOG message level. They will appear in + the server log based on the log configuration set + (see for more information), + but will not be sent to the client regardless of + . + + + + + + + pg_reload_conf + + pg_reload_conf () + boolean + + + Causes all processes of the PostgreSQL + server to reload their configuration files. (This is initiated by + sending a SIGHUP signal to the postmaster + process, which in turn sends SIGHUP to each + of its children.) You can use the + pg_file_settings, + pg_hba_file_rules and + pg_ident_file_mappings views + to check the configuration files for possible errors, before reloading. + + + + + + + pg_rotate_logfile + + pg_rotate_logfile () + boolean + + + Signals the log-file manager to switch to a new output file + immediately. This works only when the built-in log collector is + running, since otherwise there is no log-file manager subprocess. + + + + + + + pg_terminate_backend + + pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) + boolean + + + Terminates the session whose backend process has the + specified process ID. This is also allowed if the calling role + is a member of the role whose backend is being terminated or the + calling role has privileges of pg_signal_backend, + however only superusers can terminate superuser backends. + As an exception, roles with privileges of + pg_signal_autovacuum_worker are permitted to + terminate autovacuum worker processes, which are otherwise considered + superuser backends. + + + If timeout is not specified or zero, this + function returns true whether the process actually + terminates or not, indicating only that the sending of the signal was + successful. If the timeout is specified (in + milliseconds) and greater than zero, the function waits until the + process is actually terminated or until the given time has passed. If + the process is terminated, the function + returns true. On timeout, a warning is emitted and + false is returned. + + + + +
+ + + pg_cancel_backend and pg_terminate_backend + send signals (SIGINT or SIGTERM + respectively) to backend processes identified by process ID. + The process ID of an active backend can be found from + the pid column of the + pg_stat_activity view, or by listing the + postgres processes on the server (using + ps on Unix or the Task + Manager on Windows). + The role of an active backend can be found from the + usename column of the + pg_stat_activity view. + + + + pg_log_backend_memory_contexts can be used + to log the memory contexts of a backend process. For example: + +postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid()); + pg_log_backend_memory_contexts +-------------------------------- + t +(1 row) + +One message for each memory context will be logged. For example: + +LOG: logging memory contexts of PID 10377 +STATEMENT: SELECT pg_log_backend_memory_contexts(pg_backend_pid()); +LOG: level: 1; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used +LOG: level: 2; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used +LOG: level: 2; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used +LOG: level: 2; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used +LOG: level: 2; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used +LOG: level: 2; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used +LOG: level: 2; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used +LOG: level: 2; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used +... +LOG: level: 2; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used +LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used + + If there are more than 100 child contexts under the same parent, the first + 100 child contexts are logged, along with a summary of the remaining contexts. + Note that frequent calls to this function could incur significant overhead, + because it may generate a large number of log messages. + + +
+ + + Backup Control Functions + + + backup + + + + The functions shown in assist in making on-line backups. + These functions cannot be executed during recovery (except + pg_backup_start, + pg_backup_stop, + and pg_wal_lsn_diff). + + + + For details about proper usage of these functions, see + . + + + + Backup Control Functions + + + + + Function + + + Description + + + + + + + + + pg_create_restore_point + + pg_create_restore_point ( name text ) + pg_lsn + + + Creates a named marker record in the write-ahead log that can later be + used as a recovery target, and returns the corresponding write-ahead + log location. The given name can then be used with + to specify the point up to + which recovery will proceed. Avoid creating multiple restore points + with the same name, since recovery will stop at the first one whose + name matches the recovery target. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_current_wal_flush_lsn + + pg_current_wal_flush_lsn () + pg_lsn + + + Returns the current write-ahead log flush location (see notes below). + + + + + + + pg_current_wal_insert_lsn + + pg_current_wal_insert_lsn () + pg_lsn + + + Returns the current write-ahead log insert location (see notes below). + + + + + + + pg_current_wal_lsn + + pg_current_wal_lsn () + pg_lsn + + + Returns the current write-ahead log write location (see notes below). + + + + + + + pg_backup_start + + pg_backup_start ( + label text + , fast boolean + ) + pg_lsn + + + Prepares the server to begin an on-line backup. The only required + parameter is an arbitrary user-defined label for the backup. + (Typically this would be the name under which the backup dump file + will be stored.) + If the optional second parameter is given as true, + it specifies executing pg_backup_start as quickly + as possible. This forces a fast checkpoint which will cause a + spike in I/O operations, slowing any concurrently executing queries. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_backup_stop + + pg_backup_stop ( + wait_for_archive boolean + ) + record + ( lsn pg_lsn, + labelfile text, + spcmapfile text ) + + + Finishes performing an on-line backup. The desired contents of the + backup label file and the tablespace map file are returned as part of + the result of the function and must be written to files in the + backup area. These files must not be written to the live data directory + (doing so will cause PostgreSQL to fail to restart in the event of a + crash). + + + There is an optional parameter of type boolean. + If false, the function will return immediately after the backup is + completed, without waiting for WAL to be archived. This behavior is + only useful with backup software that independently monitors WAL + archiving. Otherwise, WAL required to make the backup consistent might + be missing and make the backup useless. By default or when this + parameter is true, pg_backup_stop will wait for + WAL to be archived when archiving is enabled. (On a standby, this + means that it will wait only when archive_mode = + always. If write activity on the primary is low, + it may be useful to run pg_switch_wal on the + primary in order to trigger an immediate segment switch.) + + + When executed on a primary, this function also creates a backup + history file in the write-ahead log archive area. The history file + includes the label given to pg_backup_start, the + starting and ending write-ahead log locations for the backup, and the + starting and ending times of the backup. After recording the ending + location, the current write-ahead log insertion point is automatically + advanced to the next write-ahead log file, so that the ending + write-ahead log file can be archived immediately to complete the + backup. + + + The result of the function is a single record. + The lsn column holds the backup's ending + write-ahead log location (which again can be ignored). The second + column returns the contents of the backup label file, and the third + column returns the contents of the tablespace map file. These must be + stored as part of the backup and are required as part of the restore + process. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_switch_wal + + pg_switch_wal () + pg_lsn + + + Forces the server to switch to a new write-ahead log file, which + allows the current file to be archived (assuming you are using + continuous archiving). The result is the ending write-ahead log + location plus 1 within the just-completed write-ahead log file. If + there has been no write-ahead log activity since the last write-ahead + log switch, pg_switch_wal does nothing and + returns the start location of the write-ahead log file currently in + use. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_walfile_name + + pg_walfile_name ( lsn pg_lsn ) + text + + + Converts a write-ahead log location to the name of the WAL file + holding that location. + + + + + + + pg_walfile_name_offset + + pg_walfile_name_offset ( lsn pg_lsn ) + record + ( file_name text, + file_offset integer ) + + + Converts a write-ahead log location to a WAL file name and byte offset + within that file. + + + + + + + pg_split_walfile_name + + pg_split_walfile_name ( file_name text ) + record + ( segment_number numeric, + timeline_id bigint ) + + + Extracts the sequence number and timeline ID from a WAL file + name. + + + + + + + pg_wal_lsn_diff + + pg_wal_lsn_diff ( lsn1 pg_lsn, lsn2 pg_lsn ) + numeric + + + Calculates the difference in bytes (lsn1 - lsn2) between two write-ahead log + locations. This can be used + with pg_stat_replication or some of the + functions shown in to + get the replication lag. + + + + +
+ + + pg_current_wal_lsn displays the current write-ahead + log write location in the same format used by the above functions. + Similarly, pg_current_wal_insert_lsn displays the + current write-ahead log insertion location + and pg_current_wal_flush_lsn displays the current + write-ahead log flush location. The insertion location is + the logical end of the write-ahead log at any instant, + while the write location is the end of what has actually been written out + from the server's internal buffers, and the flush location is the last + location known to be written to durable storage. The write location is the + end of what can be examined from outside the server, and is usually what + you want if you are interested in archiving partially-complete write-ahead + log files. The insertion and flush locations are made available primarily + for server debugging purposes. These are all read-only operations and do + not require superuser permissions. + + + + You can use pg_walfile_name_offset to extract the + corresponding write-ahead log file name and byte offset from + a pg_lsn value. For example: + +postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn); + file_name | file_offset +--------------------------+------------- + 00000001000000000000000D | 4039624 +(1 row) + + Similarly, pg_walfile_name extracts just the write-ahead log file name. + + + + pg_split_walfile_name is useful to compute a + LSN from a file offset and WAL file name, for example: + +postgres=# \set file_name '000000010000000100C000AB' +postgres=# \set offset 256 +postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset AS lsn + FROM pg_split_walfile_name(:'file_name') pd, + pg_show_all_settings() ps + WHERE ps.name = 'wal_segment_size'; + lsn +--------------- + C001/AB000100 +(1 row) + + + +
+ + + Recovery Control Functions + + + The functions shown in provide information + about the current status of a standby server. + These functions may be executed both during recovery and in normal running. + + + + Recovery Information Functions + + + + + Function + + + Description + + + + + + + + + pg_is_in_recovery + + pg_is_in_recovery () + boolean + + + Returns true if recovery is still in progress. + + + + + + + pg_last_wal_receive_lsn + + pg_last_wal_receive_lsn () + pg_lsn + + + Returns the last write-ahead log location that has been received and + synced to disk by streaming replication. While streaming replication + is in progress this will increase monotonically. If recovery has + completed then this will remain static at the location of the last WAL + record received and synced to disk during recovery. If streaming + replication is disabled, or if it has not yet started, the function + returns NULL. + + + + + + + pg_last_wal_replay_lsn + + pg_last_wal_replay_lsn () + pg_lsn + + + Returns the last write-ahead log location that has been replayed + during recovery. If recovery is still in progress this will increase + monotonically. If recovery has completed then this will remain + static at the location of the last WAL record applied during recovery. + When the server has been started normally without recovery, the + function returns NULL. + + + + + + + pg_last_xact_replay_timestamp + + pg_last_xact_replay_timestamp () + timestamp with time zone + + + Returns the time stamp of the last transaction replayed during + recovery. This is the time at which the commit or abort WAL record + for that transaction was generated on the primary. If no transactions + have been replayed during recovery, the function + returns NULL. Otherwise, if recovery is still in + progress this will increase monotonically. If recovery has completed + then this will remain static at the time of the last transaction + applied during recovery. When the server has been started normally + without recovery, the function returns NULL. + + + + + + + pg_get_wal_resource_managers + + pg_get_wal_resource_managers () + setof record + ( rm_id integer, + rm_name text, + rm_builtin boolean ) + + + Returns the currently-loaded WAL resource managers in the system. The + column rm_builtin indicates whether it's a + built-in resource manager, or a custom resource manager loaded by an + extension. + + + + +
+ + + The functions shown in control the progress of recovery. + These functions may be executed only during recovery. + + + + Recovery Control Functions + + + + + Function + + + Description + + + + + + + + + pg_is_wal_replay_paused + + pg_is_wal_replay_paused () + boolean + + + Returns true if recovery pause is requested. + + + + + + + pg_get_wal_replay_pause_state + + pg_get_wal_replay_pause_state () + text + + + Returns recovery pause state. The return values are + not paused if pause is not requested, + pause requested if pause is requested but recovery is + not yet paused, and paused if the recovery is + actually paused. + + + + + + + pg_promote + + pg_promote ( wait boolean DEFAULT true, wait_seconds integer DEFAULT 60 ) + boolean + + + Promotes a standby server to primary status. + With wait set to true (the + default), the function waits until promotion is completed + or wait_seconds seconds have passed, and + returns true if promotion is successful + and false otherwise. + If wait is set to false, the + function returns true immediately after sending a + SIGUSR1 signal to the postmaster to trigger + promotion. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_wal_replay_pause + + pg_wal_replay_pause () + void + + + Request to pause recovery. A request doesn't mean that recovery stops + right away. If you want a guarantee that recovery is actually paused, + you need to check for the recovery pause state returned by + pg_get_wal_replay_pause_state(). Note that + pg_is_wal_replay_paused() returns whether a request + is made. While recovery is paused, no further database changes are applied. + If hot standby is active, all new queries will see the same consistent + snapshot of the database, and no further query conflicts will be generated + until recovery is resumed. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_wal_replay_resume + + pg_wal_replay_resume () + void + + + Restarts recovery if it was paused. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + +
+ + + pg_wal_replay_pause and + pg_wal_replay_resume cannot be executed while + a promotion is ongoing. If a promotion is triggered while recovery + is paused, the paused state ends and promotion continues. + + + + If streaming replication is disabled, the paused state may continue + indefinitely without a problem. If streaming replication is in + progress then WAL records will continue to be received, which will + eventually fill available disk space, depending upon the duration of + the pause, the rate of WAL generation and available disk space. + + +
+ + + Snapshot Synchronization Functions + + + PostgreSQL allows database sessions to synchronize their + snapshots. A snapshot determines which data is visible to the + transaction that is using the snapshot. Synchronized snapshots are + necessary when two or more sessions need to see identical content in the + database. If two sessions just start their transactions independently, + there is always a possibility that some third transaction commits + between the executions of the two START TRANSACTION commands, + so that one session sees the effects of that transaction and the other + does not. + + + + To solve this problem, PostgreSQL allows a transaction to + export the snapshot it is using. As long as the exporting + transaction remains open, other transactions can import its + snapshot, and thereby be guaranteed that they see exactly the same view + of the database that the first transaction sees. But note that any + database changes made by any one of these transactions remain invisible + to the other transactions, as is usual for changes made by uncommitted + transactions. So the transactions are synchronized with respect to + pre-existing data, but act normally for changes they make themselves. + + + + Snapshots are exported with the pg_export_snapshot function, + shown in , and + imported with the command. + + + + Snapshot Synchronization Functions + + + + + Function + + + Description + + + + + + + + + pg_export_snapshot + + pg_export_snapshot () + text + + + Saves the transaction's current snapshot and returns + a text string identifying the snapshot. This string must + be passed (outside the database) to clients that want to import the + snapshot. The snapshot is available for import only until the end of + the transaction that exported it. + + + A transaction can export more than one snapshot, if needed. Note that + doing so is only useful in READ COMMITTED + transactions, since in REPEATABLE READ and higher + isolation levels, transactions use the same snapshot throughout their + lifetime. Once a transaction has exported any snapshots, it cannot be + prepared with . + + + + + + pg_log_standby_snapshot + + pg_log_standby_snapshot () + pg_lsn + + + Take a snapshot of running transactions and write it to WAL, without + having to wait for bgwriter or checkpointer to log one. This is useful + for logical decoding on standby, as logical slot creation has to wait + until such a record is replayed on the standby. + + + + +
+ +
+ + + Replication Management Functions + + + The functions shown + in are for + controlling and interacting with replication features. + See , + , and + + for information about the underlying features. + Use of functions for replication origin is only allowed to the + superuser by default, but may be allowed to other users by using the + GRANT command. + Use of functions for replication slots is restricted to superusers + and users having REPLICATION privilege. + + + + Many of these functions have equivalent commands in the replication + protocol; see . + + + + The functions described in + , + , and + + are also relevant for replication. + + + + Replication Management Functions + + + + + Function + + + Description + + + + + + + + + pg_create_physical_replication_slot + + pg_create_physical_replication_slot ( slot_name name , immediately_reserve boolean, temporary boolean ) + record + ( slot_name name, + lsn pg_lsn ) + + + Creates a new physical replication slot named + slot_name. The name cannot be + pg_conflict_detection as it is reserved for the + conflict detection slot. The optional second parameter, + when true, specifies that the LSN for this + replication slot be reserved immediately; otherwise + the LSN is reserved on first connection from a streaming + replication client. Streaming changes from a physical slot is only + possible with the streaming-replication protocol — + see . The optional third + parameter, temporary, when set to true, specifies that + the slot should not be permanently stored to disk and is only meant + for use by the current session. Temporary slots are also + released upon any error. This function corresponds + to the replication protocol command CREATE_REPLICATION_SLOT + ... PHYSICAL. + + + + + + + pg_drop_replication_slot + + pg_drop_replication_slot ( slot_name name ) + void + + + Drops the physical or logical replication slot + named slot_name. Same as replication protocol + command DROP_REPLICATION_SLOT. + + + + + + + pg_create_logical_replication_slot + + pg_create_logical_replication_slot ( slot_name name, plugin name , temporary boolean, twophase boolean, failover boolean ) + record + ( slot_name name, + lsn pg_lsn ) + + + Creates a new logical (decoding) replication slot named + slot_name using the output plugin + plugin. The name cannot be + pg_conflict_detection as it is reserved for + the conflict detection slot. The optional third + parameter, temporary, when set to true, specifies that + the slot should not be permanently stored to disk and is only meant + for use by the current session. Temporary slots are also + released upon any error. The optional fourth parameter, + twophase, when set to true, specifies + that the decoding of prepared transactions is enabled for this + slot. The optional fifth parameter, + failover, when set to true, + specifies that this slot is enabled to be synced to the + standbys so that logical replication can be resumed after + failover. A call to this function has the same effect as + the replication protocol command + CREATE_REPLICATION_SLOT ... LOGICAL. + + + + + + + pg_copy_physical_replication_slot + + pg_copy_physical_replication_slot ( src_slot_name name, dst_slot_name name , temporary boolean ) + record + ( slot_name name, + lsn pg_lsn ) + + + Copies an existing physical replication slot named src_slot_name + to a physical replication slot named dst_slot_name. + The new slot name cannot be pg_conflict_detection, + as it is reserved for the conflict detection. + The copied physical slot starts to reserve WAL from the same LSN as the + source slot. + temporary is optional. If temporary + is omitted, the same value as the source slot is used. Copy of an + invalidated slot is not allowed. + + + + + + + pg_copy_logical_replication_slot + + pg_copy_logical_replication_slot ( src_slot_name name, dst_slot_name name , temporary boolean , plugin name ) + record + ( slot_name name, + lsn pg_lsn ) + + + Copies an existing logical replication slot + named src_slot_name to a logical replication + slot named dst_slot_name, optionally changing + the output plugin and persistence. The new slot name cannot be + pg_conflict_detection as it is reserved for + the conflict detection. The copied logical slot starts from the same + LSN as the source logical slot. Both + temporary and plugin are + optional; if they are omitted, the values of the source slot are used. + The failover option of the source logical slot + is not copied and is set to false by default. This + is to avoid the risk of being unable to continue logical replication + after failover to standby where the slot is being synchronized. Copy of + an invalidated slot is not allowed. + + + + + + + pg_logical_slot_get_changes + + pg_logical_slot_get_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) + setof record + ( lsn pg_lsn, + xid xid, + data text ) + + + Returns changes in the slot slot_name, starting + from the point from which changes have been consumed last. If + upto_lsn + and upto_nchanges are NULL, + logical decoding will continue until end of WAL. If + upto_lsn is non-NULL, decoding will include only + those transactions which commit prior to the specified LSN. If + upto_nchanges is non-NULL, decoding will + stop when the number of rows produced by decoding exceeds + the specified value. Note, however, that the actual number of + rows returned may be larger, since this limit is only checked after + adding the rows produced when decoding each new transaction commit. + If the specified slot is a logical failover slot then the function will + not return until all physical slots specified in + synchronized_standby_slots + have confirmed WAL receipt. + + + + + + + pg_logical_slot_peek_changes + + pg_logical_slot_peek_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) + setof record + ( lsn pg_lsn, + xid xid, + data text ) + + + Behaves just like + the pg_logical_slot_get_changes() function, + except that changes are not consumed; that is, they will be returned + again on future calls. + + + + + + + pg_logical_slot_get_binary_changes + + pg_logical_slot_get_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) + setof record + ( lsn pg_lsn, + xid xid, + data bytea ) + + + Behaves just like + the pg_logical_slot_get_changes() function, + except that changes are returned as bytea. + + + + + + + pg_logical_slot_peek_binary_changes + + pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) + setof record + ( lsn pg_lsn, + xid xid, + data bytea ) + + + Behaves just like + the pg_logical_slot_peek_changes() function, + except that changes are returned as bytea. + + + + + + + pg_replication_slot_advance + + pg_replication_slot_advance ( slot_name name, upto_lsn pg_lsn ) + record + ( slot_name name, + end_lsn pg_lsn ) + + + Advances the current confirmed position of a replication slot named + slot_name. The slot will not be moved backwards, + and it will not be moved beyond the current insert location. Returns + the name of the slot and the actual position that it was advanced to. + The updated slot position information is written out at the next + checkpoint if any advancing is done. So in the event of a crash, the + slot may return to an earlier position. If the specified slot is a + logical failover slot then the function will not return until all + physical slots specified in + synchronized_standby_slots + have confirmed WAL receipt. + + + + + + + pg_replication_origin_create + + pg_replication_origin_create ( node_name text ) + oid + + + Creates a replication origin with the given external + name, and returns the internal ID assigned to it. + The name must be no longer than 512 bytes. + + + + + + + pg_replication_origin_drop + + pg_replication_origin_drop ( node_name text ) + void + + + Deletes a previously-created replication origin, including any + associated replay progress. + + + + + + + pg_replication_origin_oid + + pg_replication_origin_oid ( node_name text ) + oid + + + Looks up a replication origin by name and returns the internal ID. If + no such replication origin is found, NULL is + returned. + + + + + + + pg_replication_origin_session_setup + + pg_replication_origin_session_setup ( node_name text ) + void + + + Marks the current session as replaying from the given + origin, allowing replay progress to be tracked. + Can only be used if no origin is currently selected. + Use pg_replication_origin_session_reset to undo. + + + + + + + pg_replication_origin_session_reset + + pg_replication_origin_session_reset () + void + + + Cancels the effects + of pg_replication_origin_session_setup(). + + + + + + + pg_replication_origin_session_is_setup + + pg_replication_origin_session_is_setup () + boolean + + + Returns true if a replication origin has been selected in the + current session. + + + + + + + pg_replication_origin_session_progress + + pg_replication_origin_session_progress ( flush boolean ) + pg_lsn + + + Returns the replay location for the replication origin selected in + the current session. The parameter flush + determines whether the corresponding local transaction will be + guaranteed to have been flushed to disk or not. + + + + + + + pg_replication_origin_xact_setup + + pg_replication_origin_xact_setup ( origin_lsn pg_lsn, origin_timestamp timestamp with time zone ) + void + + + Marks the current transaction as replaying a transaction that has + committed at the given LSN and timestamp. Can + only be called when a replication origin has been selected + using pg_replication_origin_session_setup. + + + + + + + pg_replication_origin_xact_reset + + pg_replication_origin_xact_reset () + void + + + Cancels the effects of + pg_replication_origin_xact_setup(). + + + + + + + pg_replication_origin_advance + + pg_replication_origin_advance ( node_name text, lsn pg_lsn ) + void + + + Sets replication progress for the given node to the given + location. This is primarily useful for setting up the initial + location, or setting a new location after configuration changes and + similar. Be aware that careless use of this function can lead to + inconsistently replicated data. + + + + + + + pg_replication_origin_progress + + pg_replication_origin_progress ( node_name text, flush boolean ) + pg_lsn + + + Returns the replay location for the given replication origin. The + parameter flush determines whether the + corresponding local transaction will be guaranteed to have been + flushed to disk or not. + + + + + + + pg_logical_emit_message + + pg_logical_emit_message ( transactional boolean, prefix text, content text , flush boolean DEFAULT false ) + pg_lsn + + + pg_logical_emit_message ( transactional boolean, prefix text, content bytea , flush boolean DEFAULT false ) + pg_lsn + + + Emits a logical decoding message. This can be used to pass generic + messages to logical decoding plugins through + WAL. The transactional parameter specifies if + the message should be part of the current transaction, or if it should + be written immediately and decoded as soon as the logical decoder + reads the record. The prefix parameter is a + textual prefix that can be used by logical decoding plugins to easily + recognize messages that are interesting for them. + The content parameter is the content of the + message, given either in text or binary form. + The flush parameter (default set to + false) controls if the message is immediately + flushed to WAL or not. flush has no effect + with transactional, as the message's WAL + record is flushed along with its transaction. + + + + + + + pg_sync_replication_slots + + pg_sync_replication_slots () + void + + + Synchronize the logical failover replication slots from the primary + server to the standby server. This function can only be executed on the + standby server. Temporary synced slots, if any, cannot be used for + logical decoding and must be dropped after promotion. See + for details. + Note that this function is primarily intended for testing and + debugging purposes and should be used with caution. Additionally, + this function cannot be executed if + + sync_replication_slots is enabled and the slotsync + worker is already running to perform the synchronization of slots. + + + + + If, after executing the function, + + hot_standby_feedback is disabled on + the standby or the physical slot configured in + + primary_slot_name is + removed, then it is possible that the necessary rows of the + synchronized slot will be removed by the VACUUM process on the primary + server, resulting in the synchronized slot becoming invalidated. + + + + + + + +
+ +
+ + + Database Object Management Functions + + + The functions shown in calculate + the disk space usage of database objects, or assist in presentation + or understanding of usage results. bigint results + are measured in bytes. If an OID that does + not represent an existing object is passed to one of these + functions, NULL is returned. + + + + Database Object Size Functions + + + + + Function + + + Description + + + + + + + + + pg_column_size + + pg_column_size ( "any" ) + integer + + + Shows the number of bytes used to store any individual data value. If + applied directly to a table column value, this reflects any + compression that was done. + + + + + + + pg_column_compression + + pg_column_compression ( "any" ) + text + + + Shows the compression algorithm that was used to compress + an individual variable-length value. Returns NULL + if the value is not compressed. + + + + + + + pg_column_toast_chunk_id + + pg_column_toast_chunk_id ( "any" ) + oid + + + Shows the chunk_id of an on-disk + TOASTed value. Returns NULL + if the value is un-TOASTed or not on-disk. See + for more information about + TOAST. + + + + + + + pg_database_size + + pg_database_size ( name ) + bigint + + + pg_database_size ( oid ) + bigint + + + Computes the total disk space used by the database with the specified + name or OID. To use this function, you must + have CONNECT privilege on the specified database + (which is granted by default) or have privileges of + the pg_read_all_stats role. + + + + + + + pg_indexes_size + + pg_indexes_size ( regclass ) + bigint + + + Computes the total disk space used by indexes attached to the + specified table. + + + + + + + pg_relation_size + + pg_relation_size ( relation regclass , fork text ) + bigint + + + Computes the disk space used by one fork of the + specified relation. (Note that for most purposes it is more + convenient to use the higher-level + functions pg_total_relation_size + or pg_table_size, which sum the sizes of all + forks.) With one argument, this returns the size of the main data + fork of the relation. The second argument can be provided to specify + which fork to examine: + + + + main returns the size of the main + data fork of the relation. + + + + + fsm returns the size of the Free Space Map + (see ) associated with the relation. + + + + + vm returns the size of the Visibility Map + (see ) associated with the relation. + + + + + init returns the size of the initialization + fork, if any, associated with the relation. + + + + + + + + + + pg_size_bytes + + pg_size_bytes ( text ) + bigint + + + Converts a size in human-readable format (as returned + by pg_size_pretty) into bytes. Valid units are + bytes, B, kB, + MB, GB, TB, + and PB. + + + + + + + pg_size_pretty + + pg_size_pretty ( bigint ) + text + + + pg_size_pretty ( numeric ) + text + + + Converts a size in bytes into a more easily human-readable format with + size units (bytes, kB, MB, GB, TB, or PB as appropriate). Note that the + units are powers of 2 rather than powers of 10, so 1kB is 1024 bytes, + 1MB is 10242 = 1048576 bytes, and so on. + + + + + + + pg_table_size + + pg_table_size ( regclass ) + bigint + + + Computes the disk space used by the specified table, excluding indexes + (but including its TOAST table if any, free space map, and visibility + map). + + + + + + + pg_tablespace_size + + pg_tablespace_size ( name ) + bigint + + + pg_tablespace_size ( oid ) + bigint + + + Computes the total disk space used in the tablespace with the + specified name or OID. To use this function, you must + have CREATE privilege on the specified tablespace + or have privileges of the pg_read_all_stats role, + unless it is the default tablespace for the current database. + + + + + + + pg_total_relation_size + + pg_total_relation_size ( regclass ) + bigint + + + Computes the total disk space used by the specified table, including + all indexes and TOAST data. The result is + equivalent to pg_table_size + + pg_indexes_size. + + + + +
+ + + The functions above that operate on tables or indexes accept a + regclass argument, which is simply the OID of the table or index + in the pg_class system catalog. You do not have to look up + the OID by hand, however, since the regclass data type's input + converter will do the work for you. See + for details. + + + + The functions shown in assist + in identifying the specific disk files associated with database objects. + + + + Database Object Location Functions + + + + + Function + + + Description + + + + + + + + + pg_relation_filenode + + pg_relation_filenode ( relation regclass ) + oid + + + Returns the filenode number currently assigned to the + specified relation. The filenode is the base component of the file + name(s) used for the relation (see + for more information). + For most relations the result is the same as + pg_class.relfilenode, + but for certain system catalogs relfilenode + is zero and this function must be used to get the correct value. The + function returns NULL if passed a relation that does not have storage, + such as a view. + + + + + + + pg_relation_filepath + + pg_relation_filepath ( relation regclass ) + text + + + Returns the entire file path name (relative to the database cluster's + data directory, PGDATA) of the relation. + + + + + + + pg_filenode_relation + + pg_filenode_relation ( tablespace oid, filenode oid ) + regclass + + + Returns a relation's OID given the tablespace OID and filenode it is + stored under. This is essentially the inverse mapping of + pg_relation_filepath. For a relation in the + database's default tablespace, the tablespace can be specified as zero. + Returns NULL if no relation in the current database + is associated with the given values, or if dealing with a temporary + relation. + + + + +
+ + + lists functions used to manage + collations. + + + + Collation Management Functions + + + + + Function + + + Description + + + + + + + + + pg_collation_actual_version + + pg_collation_actual_version ( oid ) + text + + + Returns the actual version of the collation object as it is currently + installed in the operating system. If this is different from the + value in + pg_collation.collversion, + then objects depending on the collation might need to be rebuilt. See + also . + + + + + + + pg_database_collation_actual_version + + pg_database_collation_actual_version ( oid ) + text + + + Returns the actual version of the database's collation as it is currently + installed in the operating system. If this is different from the + value in + pg_database.datcollversion, + then objects depending on the collation might need to be rebuilt. See + also . + + + + + + + pg_import_system_collations + + pg_import_system_collations ( schema regnamespace ) + integer + + + Adds collations to the system + catalog pg_collation based on all the locales + it finds in the operating system. This is + what initdb uses; see + for more details. If additional + locales are installed into the operating system later on, this + function can be run again to add collations for the new locales. + Locales that match existing entries + in pg_collation will be skipped. (But + collation objects based on locales that are no longer present in the + operating system are not removed by this function.) + The schema parameter would typically + be pg_catalog, but that is not a requirement; the + collations could be installed into some other schema as well. The + function returns the number of new collation objects it created. + Use of this function is restricted to superusers. + + + + +
+ + + lists functions used to + manipulate statistics. + These functions cannot be executed during recovery. + + + Changes made by these statistics manipulation functions are likely to be + overwritten by autovacuum (or manual + VACUUM or ANALYZE) and should be + considered temporary. + + + + + + Database Object Statistics Manipulation Functions + + + + + Function + + + Description + + + + + + + + + pg_restore_relation_stats + + pg_restore_relation_stats ( + VARIADIC kwargs "any" ) + boolean + + + Updates table-level statistics. Ordinarily, these statistics are + collected automatically or updated as a part of or , so it's not + necessary to call this function. However, it is useful after a + restore to enable the optimizer to choose better plans if + ANALYZE has not been run yet. + + + The tracked statistics may change from version to version, so + arguments are passed as pairs of argname + and argvalue in the form: + +SELECT pg_restore_relation_stats( + 'arg1name', 'arg1value'::arg1type, + 'arg2name', 'arg2value'::arg2type, + 'arg3name', 'arg3value'::arg3type); + + + + For example, to set the relpages and + reltuples values for the table + mytable: + +SELECT pg_restore_relation_stats( + 'schemaname', 'myschema', + 'relname', 'mytable', + 'relpages', 173::integer, + 'reltuples', 10000::real); + + + + The arguments schemaname and + relname are required, and specify the table. Other + arguments are the names and values of statistics corresponding to + certain columns in pg_class. + The currently-supported relation statistics are + relpages with a value of type + integer, reltuples with a value of + type real, relallvisible with a value + of type integer, and relallfrozen + with a value of type integer. + + + Additionally, this function accepts argument name + version of type integer, which + specifies the server version from which the statistics originated. + This is anticipated to be helpful in porting statistics from older + versions of PostgreSQL. + + + Minor errors are reported as a WARNING and + ignored, and remaining statistics will still be restored. If all + specified statistics are successfully restored, returns + true, otherwise false. + + + The caller must have the MAINTAIN privilege on the + table or be the owner of the database. + + + + + + + + + pg_clear_relation_stats + + pg_clear_relation_stats ( schemaname text, relname text ) + void + + + Clears table-level statistics for the given relation, as though the + table was newly created. + + + The caller must have the MAINTAIN privilege on the + table or be the owner of the database. + + + + + + + + pg_restore_attribute_stats + + pg_restore_attribute_stats ( + VARIADIC kwargs "any" ) + boolean + + + Creates or updates column-level statistics. Ordinarily, these + statistics are collected automatically or updated as a part of or , so it's not + necessary to call this function. However, it is useful after a + restore to enable the optimizer to choose better plans if + ANALYZE has not been run yet. + + + The tracked statistics may change from version to version, so + arguments are passed as pairs of argname + and argvalue in the form: + +SELECT pg_restore_attribute_stats( + 'arg1name', 'arg1value'::arg1type, + 'arg2name', 'arg2value'::arg2type, + 'arg3name', 'arg3value'::arg3type); + + + + For example, to set the avg_width and + null_frac values for the attribute + col1 of the table + mytable: + +SELECT pg_restore_attribute_stats( + 'schemaname', 'myschema', + 'relname', 'mytable', + 'attname', 'col1', + 'inherited', false, + 'avg_width', 125::integer, + 'null_frac', 0.5::real); + + + + The required arguments are schemaname and + relname with a value of type text + which specify the table; either attname with a + value of type text or attnum with a + value of type smallint, which specifies the column; and + inherited, which specifies whether the statistics + include values from child tables. Other arguments are the names and + values of statistics corresponding to columns in pg_stats. + + + Additionally, this function accepts argument name + version of type integer, which + specifies the server version from which the statistics originated. + This is anticipated to be helpful in porting statistics from older + versions of PostgreSQL. + + + Minor errors are reported as a WARNING and + ignored, and remaining statistics will still be restored. If all + specified statistics are successfully restored, returns + true, otherwise false. + + + The caller must have the MAINTAIN privilege on the + table or be the owner of the database. + + + + + + + + + pg_clear_attribute_stats + + pg_clear_attribute_stats ( + schemaname text, + relname text, + attname text, + inherited boolean ) + void + + + Clears column-level statistics for the given relation and + attribute, as though the table was newly created. + + + The caller must have the MAINTAIN privilege on + the table or be the owner of the database. + + + + + +
+ + + lists functions that provide + information about the structure of partitioned tables. + + + + Partitioning Information Functions + + + + + Function + + + Description + + + + + + + + + pg_partition_tree + + pg_partition_tree ( regclass ) + setof record + ( relid regclass, + parentrelid regclass, + isleaf boolean, + level integer ) + + + Lists the tables or indexes in the partition tree of the + given partitioned table or partitioned index, with one row for each + partition. Information provided includes the OID of the partition, + the OID of its immediate parent, a boolean value telling if the + partition is a leaf, and an integer telling its level in the hierarchy. + The level value is 0 for the input table or index, 1 for its + immediate child partitions, 2 for their partitions, and so on. + Returns no rows if the relation does not exist or is not a partition + or partitioned table. + + + + + + + pg_partition_ancestors + + pg_partition_ancestors ( regclass ) + setof regclass + + + Lists the ancestor relations of the given partition, + including the relation itself. Returns no rows if the relation + does not exist or is not a partition or partitioned table. + + + + + + + pg_partition_root + + pg_partition_root ( regclass ) + regclass + + + Returns the top-most parent of the partition tree to which the given + relation belongs. Returns NULL if the relation + does not exist or is not a partition or partitioned table. + + + + +
+ + + For example, to check the total size of the data contained in a + partitioned table measurement, one could use the + following query: + +SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size + FROM pg_partition_tree('measurement'); + + + +
+ + + Index Maintenance Functions + + + shows the functions + available for index maintenance tasks. (Note that these maintenance + tasks are normally done automatically by autovacuum; use of these + functions is only required in special cases.) + These functions cannot be executed during recovery. + Use of these functions is restricted to superusers and the owner + of the given index. + + + + Index Maintenance Functions + + + + + Function + + + Description + + + + + + + + + brin_summarize_new_values + + brin_summarize_new_values ( index regclass ) + integer + + + Scans the specified BRIN index to find page ranges in the base table + that are not currently summarized by the index; for any such range it + creates a new summary index tuple by scanning those table pages. + Returns the number of new page range summaries that were inserted + into the index. + + + + + + + brin_summarize_range + + brin_summarize_range ( index regclass, blockNumber bigint ) + integer + + + Summarizes the page range covering the given block, if not already + summarized. This is + like brin_summarize_new_values except that it + only processes the page range that covers the given table block number. + + + + + + + brin_desummarize_range + + brin_desummarize_range ( index regclass, blockNumber bigint ) + void + + + Removes the BRIN index tuple that summarizes the page range covering + the given table block, if there is one. + + + + + + + gin_clean_pending_list + + gin_clean_pending_list ( index regclass ) + bigint + + + Cleans up the pending list of the specified GIN index + by moving entries in it, in bulk, to the main GIN data structure. + Returns the number of pages removed from the pending list. + If the argument is a GIN index built with + the fastupdate option disabled, no cleanup happens + and the result is zero, because the index doesn't have a pending list. + See and + for details about the pending list and fastupdate + option. + + + + +
+ +
+ + + Generic File Access Functions + + + The functions shown in provide native access to + files on the machine hosting the server. Only files within the + database cluster directory and the log_directory can be + accessed, unless the user is a superuser or is granted the role + pg_read_server_files. Use a relative path for files in + the cluster directory, and a path matching the log_directory + configuration setting for log files. + + + + Note that granting users the EXECUTE privilege on + pg_read_file(), or related functions, allows them the + ability to read any file on the server that the database server process can + read; these functions bypass all in-database privilege checks. This means + that, for example, a user with such access is able to read the contents of + the pg_authid table where authentication + information is stored, as well as read any table data in the database. + Therefore, granting access to these functions should be carefully + considered. + + + + When granting privilege on these functions, note that the table entries + showing optional parameters are mostly implemented as several physical + functions with different parameter lists. Privilege must be granted + separately on each such function, if it is to be + used. psql's \df command + can be useful to check what the actual function signatures are. + + + + Some of these functions take an optional missing_ok + parameter, which specifies the behavior when the file or directory does + not exist. If true, the function + returns NULL or an empty result set, as appropriate. + If false, an error is raised. (Failure conditions + other than file not found are reported as errors in any + case.) The default is false. + + + + Generic File Access Functions + + + + + Function + + + Description + + + + + + + + + pg_ls_dir + + pg_ls_dir ( dirname text , missing_ok boolean, include_dot_dirs boolean ) + setof text + + + Returns the names of all files (and directories and other special + files) in the specified + directory. The include_dot_dirs parameter + indicates whether . and .. are to be + included in the result set; the default is to exclude them. Including + them can be useful when missing_ok + is true, to distinguish an empty directory from a + non-existent directory. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_ls_logdir + + pg_ls_logdir () + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's log directory. Filenames beginning with + a dot, directories, and other special files are excluded. + + + This function is restricted to superusers and roles with privileges of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_ls_waldir + + pg_ls_waldir () + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's write-ahead log (WAL) directory. + Filenames beginning with a dot, directories, and other special files + are excluded. + + + This function is restricted to superusers and roles with privileges of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_ls_logicalmapdir + + pg_ls_logicalmapdir () + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's pg_logical/mappings + directory. Filenames beginning with a dot, directories, and other + special files are excluded. + + + This function is restricted to superusers and members of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_ls_logicalsnapdir + + pg_ls_logicalsnapdir () + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's pg_logical/snapshots + directory. Filenames beginning with a dot, directories, and other + special files are excluded. + + + This function is restricted to superusers and members of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_ls_replslotdir + + pg_ls_replslotdir ( slot_name text ) + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's pg_replslot/slot_name + directory, where slot_name is the name of the + replication slot provided as input of the function. Filenames beginning + with a dot, directories, and other special files are excluded. + + + This function is restricted to superusers and members of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_ls_summariesdir + + pg_ls_summariesdir () + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's WAL summaries directory + (pg_wal/summaries). Filenames beginning + with a dot, directories, and other special files are excluded. + + + This function is restricted to superusers and members of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_ls_archive_statusdir + + pg_ls_archive_statusdir () + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the server's WAL archive status directory + (pg_wal/archive_status). Filenames beginning + with a dot, directories, and other special files are excluded. + + + This function is restricted to superusers and members of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + + pg_ls_tmpdir + + pg_ls_tmpdir ( tablespace oid ) + setof record + ( name text, + size bigint, + modification timestamp with time zone ) + + + Returns the name, size, and last modification time (mtime) of each + ordinary file in the temporary file directory for the + specified tablespace. + If tablespace is not provided, + the pg_default tablespace is examined. Filenames + beginning with a dot, directories, and other special files are + excluded. + + + This function is restricted to superusers and members of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_read_file + + pg_read_file ( filename text , offset bigint, length bigint , missing_ok boolean ) + text + + + Returns all or part of a text file, starting at the + given byte offset, returning at + most length bytes (less if the end of file is + reached first). If offset is negative, it is + relative to the end of the file. If offset + and length are omitted, the entire file is + returned. The bytes read from the file are interpreted as a string in + the database's encoding; an error is thrown if they are not valid in + that encoding. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + + + pg_read_binary_file + + pg_read_binary_file ( filename text , offset bigint, length bigint , missing_ok boolean ) + bytea + + + Returns all or part of a file. This function is identical to + pg_read_file except that it can read arbitrary + binary data, returning the result as bytea + not text; accordingly, no encoding checks are performed. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + In combination with the convert_from function, + this function can be used to read a text file in a specified encoding + and convert to the database's encoding: + +SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); + + + + + + + + pg_stat_file + + pg_stat_file ( filename text , missing_ok boolean ) + record + ( size bigint, + access timestamp with time zone, + modification timestamp with time zone, + change timestamp with time zone, + creation timestamp with time zone, + isdir boolean ) + + + Returns a record containing the file's size, last access time stamp, + last modification time stamp, last file status change time stamp (Unix + platforms only), file creation time stamp (Windows only), and a flag + indicating if it is a directory. + + + This function is restricted to superusers by default, but other users + can be granted EXECUTE to run the function. + + + + + +
+ +
+ + + Advisory Lock Functions + + + The functions shown in + manage advisory locks. For details about proper use of these functions, + see . + + + + All these functions are intended to be used to lock application-defined + resources, which can be identified either by a single 64-bit key value or + two 32-bit key values (note that these two key spaces do not overlap). + If another session already holds a conflicting lock on the same resource + identifier, the functions will either wait until the resource becomes + available, or return a false result, as appropriate for + the function. + Locks can be either shared or exclusive: a shared lock does not conflict + with other shared locks on the same resource, only with exclusive locks. + Locks can be taken at session level (so that they are held until released + or the session ends) or at transaction level (so that they are held until + the current transaction ends; there is no provision for manual release). + Multiple session-level lock requests stack, so that if the same resource + identifier is locked three times there must then be three unlock requests + to release the resource in advance of session end. + + + + Advisory Lock Functions + + + + + Function + + + Description + + + + + + + + + pg_advisory_lock + + pg_advisory_lock ( key bigint ) + void + + + pg_advisory_lock ( key1 integer, key2 integer ) + void + + + Obtains an exclusive session-level advisory lock, waiting if necessary. + + + + + + + pg_advisory_lock_shared + + pg_advisory_lock_shared ( key bigint ) + void + + + pg_advisory_lock_shared ( key1 integer, key2 integer ) + void + + + Obtains a shared session-level advisory lock, waiting if necessary. + + + + + + + pg_advisory_unlock + + pg_advisory_unlock ( key bigint ) + boolean + + + pg_advisory_unlock ( key1 integer, key2 integer ) + boolean + + + Releases a previously-acquired exclusive session-level advisory lock. + Returns true if the lock is successfully released. + If the lock was not held, false is returned, and in + addition, an SQL warning will be reported by the server. + + + + + + + pg_advisory_unlock_all + + pg_advisory_unlock_all () + void + + + Releases all session-level advisory locks held by the current session. + (This function is implicitly invoked at session end, even if the + client disconnects ungracefully.) + + + + + + + pg_advisory_unlock_shared + + pg_advisory_unlock_shared ( key bigint ) + boolean + + + pg_advisory_unlock_shared ( key1 integer, key2 integer ) + boolean + + + Releases a previously-acquired shared session-level advisory lock. + Returns true if the lock is successfully released. + If the lock was not held, false is returned, and in + addition, an SQL warning will be reported by the server. + + + + + + + pg_advisory_xact_lock + + pg_advisory_xact_lock ( key bigint ) + void + + + pg_advisory_xact_lock ( key1 integer, key2 integer ) + void + + + Obtains an exclusive transaction-level advisory lock, waiting if + necessary. + + + + + + + pg_advisory_xact_lock_shared + + pg_advisory_xact_lock_shared ( key bigint ) + void + + + pg_advisory_xact_lock_shared ( key1 integer, key2 integer ) + void + + + Obtains a shared transaction-level advisory lock, waiting if + necessary. + + + + + + + pg_try_advisory_lock + + pg_try_advisory_lock ( key bigint ) + boolean + + + pg_try_advisory_lock ( key1 integer, key2 integer ) + boolean + + + Obtains an exclusive session-level advisory lock if available. + This will either obtain the lock immediately and + return true, or return false + without waiting if the lock cannot be acquired immediately. + + + + + + + pg_try_advisory_lock_shared + + pg_try_advisory_lock_shared ( key bigint ) + boolean + + + pg_try_advisory_lock_shared ( key1 integer, key2 integer ) + boolean + + + Obtains a shared session-level advisory lock if available. + This will either obtain the lock immediately and + return true, or return false + without waiting if the lock cannot be acquired immediately. + + + + + + + pg_try_advisory_xact_lock + + pg_try_advisory_xact_lock ( key bigint ) + boolean + + + pg_try_advisory_xact_lock ( key1 integer, key2 integer ) + boolean + + + Obtains an exclusive transaction-level advisory lock if available. + This will either obtain the lock immediately and + return true, or return false + without waiting if the lock cannot be acquired immediately. + + + + + + + pg_try_advisory_xact_lock_shared + + pg_try_advisory_xact_lock_shared ( key bigint ) + boolean + + + pg_try_advisory_xact_lock_shared ( key1 integer, key2 integer ) + boolean + + + Obtains a shared transaction-level advisory lock if available. + This will either obtain the lock immediately and + return true, or return false + without waiting if the lock cannot be acquired immediately. + + + + +
+ +
+ +
diff --git a/doc/src/sgml/func/func-aggregate.sgml b/doc/src/sgml/func/func-aggregate.sgml new file mode 100644 index 0000000000000..f50b692516b62 --- /dev/null +++ b/doc/src/sgml/func/func-aggregate.sgml @@ -0,0 +1,1418 @@ + + Aggregate Functions + + + aggregate function + built-in + + + + Aggregate functions compute a single result + from a set of input values. The built-in general-purpose aggregate + functions are listed in + while statistical aggregates are in . + The built-in within-group ordered-set aggregate functions + are listed in + while the built-in within-group hypothetical-set ones are in . Grouping operations, + which are closely related to aggregate functions, are listed in + . + The special syntax considerations for aggregate + functions are explained in . + Consult for additional introductory + information. + + + + Aggregate functions that support Partial Mode + are eligible to participate in various optimizations, such as parallel + aggregation. + + + + While all aggregates below accept an optional + ORDER BY clause (as outlined in ), the clause has only been added to + aggregates whose output is affected by ordering. + + + + General-Purpose Aggregate Functions + + + + + + + Function + + + Description + + Partial Mode + + + + + + + + any_value + + any_value ( anyelement ) + same as input type + + + Returns an arbitrary value from the non-null input values. + + Yes + + + + + + array_agg + + array_agg ( anynonarray ORDER BY input_sort_columns ) + anyarray + + + Collects all the input values, including nulls, into an array. + + Yes + + + + + array_agg ( anyarray ORDER BY input_sort_columns ) + anyarray + + + Concatenates all the input arrays into an array of one higher + dimension. (The inputs must all have the same dimensionality, and + cannot be empty or null.) + + Yes + + + + + + average + + + avg + + avg ( smallint ) + numeric + + + avg ( integer ) + numeric + + + avg ( bigint ) + numeric + + + avg ( numeric ) + numeric + + + avg ( real ) + double precision + + + avg ( double precision ) + double precision + + + avg ( interval ) + interval + + + Computes the average (arithmetic mean) of all the non-null input + values. + + Yes + + + + + + bit_and + + bit_and ( smallint ) + smallint + + + bit_and ( integer ) + integer + + + bit_and ( bigint ) + bigint + + + bit_and ( bit ) + bit + + + Computes the bitwise AND of all non-null input values. + + Yes + + + + + + bit_or + + bit_or ( smallint ) + smallint + + + bit_or ( integer ) + integer + + + bit_or ( bigint ) + bigint + + + bit_or ( bit ) + bit + + + Computes the bitwise OR of all non-null input values. + + Yes + + + + + + bit_xor + + bit_xor ( smallint ) + smallint + + + bit_xor ( integer ) + integer + + + bit_xor ( bigint ) + bigint + + + bit_xor ( bit ) + bit + + + Computes the bitwise exclusive OR of all non-null input values. + Can be useful as a checksum for an unordered set of values. + + Yes + + + + + + bool_and + + bool_and ( boolean ) + boolean + + + Returns true if all non-null input values are true, otherwise false. + + Yes + + + + + + bool_or + + bool_or ( boolean ) + boolean + + + Returns true if any non-null input value is true, otherwise false. + + Yes + + + + + + count + + count ( * ) + bigint + + + Computes the number of input rows. + + Yes + + + + + count ( "any" ) + bigint + + + Computes the number of input rows in which the input value is not + null. + + Yes + + + + + + every + + every ( boolean ) + boolean + + + This is the SQL standard's equivalent to bool_and. + + Yes + + + + + + json_agg + + json_agg ( anyelement ORDER BY input_sort_columns ) + json + + + + jsonb_agg + + jsonb_agg ( anyelement ORDER BY input_sort_columns ) + jsonb + + + Collects all the input values, including nulls, into a JSON array. + Values are converted to JSON as per to_json + or to_jsonb. + + No + + + + + + json_agg_strict + + json_agg_strict ( anyelement ) + json + + + + jsonb_agg_strict + + jsonb_agg_strict ( anyelement ) + jsonb + + + Collects all the input values, skipping nulls, into a JSON array. + Values are converted to JSON as per to_json + or to_jsonb. + + No + + + + + json_arrayagg + json_arrayagg ( + value_expression + ORDER BY sort_expression + { NULL | ABSENT } ON NULL + RETURNING data_type FORMAT JSON ENCODING UTF8 ) + + + Behaves in the same way as json_array + but as an aggregate function so it only takes one + value_expression parameter. + If ABSENT ON NULL is specified, any NULL + values are omitted. + If ORDER BY is specified, the elements will + appear in the array in that order rather than in the input order. + + + SELECT json_arrayagg(v) FROM (VALUES(2),(1)) t(v) + [2, 1] + + No + + + + + json_objectagg + json_objectagg ( + { key_expression { VALUE | ':' } value_expression } + { NULL | ABSENT } ON NULL + { WITH | WITHOUT } UNIQUE KEYS + RETURNING data_type FORMAT JSON ENCODING UTF8 ) + + + Behaves like json_object, but as an + aggregate function, so it only takes one + key_expression and one + value_expression parameter. + + + SELECT json_objectagg(k:v) FROM (VALUES ('a'::text,current_date),('b',current_date + 1)) AS t(k,v) + { "a" : "2022-05-10", "b" : "2022-05-11" } + + No + + + + + + json_object_agg + + json_object_agg ( key + "any", value + "any" + ORDER BY input_sort_columns ) + json + + + + jsonb_object_agg + + jsonb_object_agg ( key + "any", value + "any" + ORDER BY input_sort_columns ) + jsonb + + + Collects all the key/value pairs into a JSON object. Key arguments + are coerced to text; value arguments are converted as per + to_json or to_jsonb. + Values can be null, but keys cannot. + + No + + + + + + json_object_agg_strict + + json_object_agg_strict ( + key "any", + value "any" ) + json + + + + jsonb_object_agg_strict + + jsonb_object_agg_strict ( + key "any", + value "any" ) + jsonb + + + Collects all the key/value pairs into a JSON object. Key arguments + are coerced to text; value arguments are converted as per + to_json or to_jsonb. + The key can not be null. If the + value is null then the entry is skipped, + + No + + + + + + json_object_agg_unique + + json_object_agg_unique ( + key "any", + value "any" ) + json + + + + jsonb_object_agg_unique + + jsonb_object_agg_unique ( + key "any", + value "any" ) + jsonb + + + Collects all the key/value pairs into a JSON object. Key arguments + are coerced to text; value arguments are converted as per + to_json or to_jsonb. + Values can be null, but keys cannot. + If there is a duplicate key an error is thrown. + + No + + + + + + json_object_agg_unique_strict + + json_object_agg_unique_strict ( + key "any", + value "any" ) + json + + + + jsonb_object_agg_unique_strict + + jsonb_object_agg_unique_strict ( + key "any", + value "any" ) + jsonb + + + Collects all the key/value pairs into a JSON object. Key arguments + are coerced to text; value arguments are converted as per + to_json or to_jsonb. + The key can not be null. If the + value is null then the entry is skipped. + If there is a duplicate key an error is thrown. + + No + + + + + + max + + max ( see text ) + same as input type + + + Computes the maximum of the non-null input + values. Available for any numeric, string, date/time, or enum type, + as well as bytea, inet, interval, + money, oid, pg_lsn, + tid, xid8, + and also arrays and composite types containing sortable data types. + + Yes + + + + + + min + + min ( see text ) + same as input type + + + Computes the minimum of the non-null input + values. Available for any numeric, string, date/time, or enum type, + as well as bytea, inet, interval, + money, oid, pg_lsn, + tid, xid8, + and also arrays and composite types containing sortable data types. + + Yes + + + + + + range_agg + + range_agg ( value + anyrange ) + anymultirange + + + range_agg ( value + anymultirange ) + anymultirange + + + Computes the union of the non-null input values. + + No + + + + + + range_intersect_agg + + range_intersect_agg ( value + anyrange ) + anyrange + + + range_intersect_agg ( value + anymultirange ) + anymultirange + + + Computes the intersection of the non-null input values. + + No + + + + + + string_agg + + string_agg ( value + text, delimiter text ) + text + + + string_agg ( value + bytea, delimiter bytea + ORDER BY input_sort_columns ) + bytea + + + Concatenates the non-null input values into a string. Each value + after the first is preceded by the + corresponding delimiter (if it's not null). + + Yes + + + + + + sum + + sum ( smallint ) + bigint + + + sum ( integer ) + bigint + + + sum ( bigint ) + numeric + + + sum ( numeric ) + numeric + + + sum ( real ) + real + + + sum ( double precision ) + double precision + + + sum ( interval ) + interval + + + sum ( money ) + money + + + Computes the sum of the non-null input values. + + Yes + + + + + + xmlagg + + xmlagg ( xml ORDER BY input_sort_columns ) + xml + + + Concatenates the non-null XML input values (see + ). + + No + + + +
+ + + It should be noted that except for count, + these functions return a null value when no rows are selected. In + particular, sum of no rows returns null, not + zero as one might expect, and array_agg + returns null rather than an empty array when there are no input + rows. The coalesce function can be used to + substitute zero or an empty array for null when necessary. + + + + The aggregate functions array_agg, + json_agg, jsonb_agg, + json_agg_strict, jsonb_agg_strict, + json_object_agg, jsonb_object_agg, + json_object_agg_strict, jsonb_object_agg_strict, + json_object_agg_unique, jsonb_object_agg_unique, + json_object_agg_unique_strict, + jsonb_object_agg_unique_strict, + string_agg, + and xmlagg, as well as similar user-defined + aggregate functions, produce meaningfully different result values + depending on the order of the input values. This ordering is + unspecified by default, but can be controlled by writing an + ORDER BY clause within the aggregate call, as shown in + . + Alternatively, supplying the input values from a sorted subquery + will usually work. For example: + + + + Beware that this approach can fail if the outer query level contains + additional processing, such as a join, because that might cause the + subquery's output to be reordered before the aggregate is computed. + + + + + ANY + + + SOME + + + The boolean aggregates bool_and and + bool_or correspond to the standard SQL aggregates + every and any or + some. + PostgreSQL + supports every, but not any + or some, because there is an ambiguity built into + the standard syntax: + +SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...; + + Here ANY can be considered either as introducing + a subquery, or as being an aggregate function, if the subquery + returns one row with a Boolean value. + Thus the standard name cannot be given to these aggregates. + + + + + + Users accustomed to working with other SQL database management + systems might be disappointed by the performance of the + count aggregate when it is applied to the + entire table. A query like: + +SELECT count(*) FROM sometable; + + will require effort proportional to the size of the table: + PostgreSQL will need to scan either the + entire table or the entirety of an index that includes all rows in + the table. + + + + + shows + aggregate functions typically used in statistical analysis. + (These are separated out merely to avoid cluttering the listing + of more-commonly-used aggregates.) Functions shown as + accepting numeric_type are available for all + the types smallint, integer, + bigint, numeric, real, + and double precision. + Where the description mentions + N, it means the + number of input rows for which all the input expressions are non-null. + In all cases, null is returned if the computation is meaningless, + for example when N is zero. + + + + statistics + + + linear regression + + + + Aggregate Functions for Statistics + + + + + + + Function + + + Description + + Partial Mode + + + + + + + + correlation + + + corr + + corr ( Y double precision, X double precision ) + double precision + + + Computes the correlation coefficient. + + Yes + + + + + + covariance + population + + + covar_pop + + covar_pop ( Y double precision, X double precision ) + double precision + + + Computes the population covariance. + + Yes + + + + + + covariance + sample + + + covar_samp + + covar_samp ( Y double precision, X double precision ) + double precision + + + Computes the sample covariance. + + Yes + + + + + + regr_avgx + + regr_avgx ( Y double precision, X double precision ) + double precision + + + Computes the average of the independent variable, + sum(X)/N. + + Yes + + + + + + regr_avgy + + regr_avgy ( Y double precision, X double precision ) + double precision + + + Computes the average of the dependent variable, + sum(Y)/N. + + Yes + + + + + + regr_count + + regr_count ( Y double precision, X double precision ) + bigint + + + Computes the number of rows in which both inputs are non-null. + + Yes + + + + + + regression intercept + + + regr_intercept + + regr_intercept ( Y double precision, X double precision ) + double precision + + + Computes the y-intercept of the least-squares-fit linear equation + determined by the + (X, Y) pairs. + + Yes + + + + + + regr_r2 + + regr_r2 ( Y double precision, X double precision ) + double precision + + + Computes the square of the correlation coefficient. + + Yes + + + + + + regression slope + + + regr_slope + + regr_slope ( Y double precision, X double precision ) + double precision + + + Computes the slope of the least-squares-fit linear equation determined + by the (X, Y) + pairs. + + Yes + + + + + + regr_sxx + + regr_sxx ( Y double precision, X double precision ) + double precision + + + Computes the sum of squares of the independent + variable, + sum(X^2) - sum(X)^2/N. + + Yes + + + + + + regr_sxy + + regr_sxy ( Y double precision, X double precision ) + double precision + + + Computes the sum of products of independent times + dependent variables, + sum(X*Y) - sum(X) * sum(Y)/N. + + Yes + + + + + + regr_syy + + regr_syy ( Y double precision, X double precision ) + double precision + + + Computes the sum of squares of the dependent + variable, + sum(Y^2) - sum(Y)^2/N. + + Yes + + + + + + standard deviation + + + stddev + + stddev ( numeric_type ) + double precision + for real or double precision, + otherwise numeric + + + This is a historical alias for stddev_samp. + + Yes + + + + + + standard deviation + population + + + stddev_pop + + stddev_pop ( numeric_type ) + double precision + for real or double precision, + otherwise numeric + + + Computes the population standard deviation of the input values. + + Yes + + + + + + standard deviation + sample + + + stddev_samp + + stddev_samp ( numeric_type ) + double precision + for real or double precision, + otherwise numeric + + + Computes the sample standard deviation of the input values. + + Yes + + + + + + variance + + variance ( numeric_type ) + double precision + for real or double precision, + otherwise numeric + + + This is a historical alias for var_samp. + + Yes + + + + + + variance + population + + + var_pop + + var_pop ( numeric_type ) + double precision + for real or double precision, + otherwise numeric + + + Computes the population variance of the input values (square of the + population standard deviation). + + Yes + + + + + + variance + sample + + + var_samp + + var_samp ( numeric_type ) + double precision + for real or double precision, + otherwise numeric + + + Computes the sample variance of the input values (square of the sample + standard deviation). + + Yes + + + +
+ + + shows some + aggregate functions that use the ordered-set aggregate + syntax. These functions are sometimes referred to as inverse + distribution functions. Their aggregated input is introduced by + ORDER BY, and they may also take a direct + argument that is not aggregated, but is computed only once. + All these functions ignore null values in their aggregated input. + For those that take a fraction parameter, the + fraction value must be between 0 and 1; an error is thrown if not. + However, a null fraction value simply produces a + null result. + + + + ordered-set aggregate + built-in + + + inverse distribution + + + + Ordered-Set Aggregate Functions + + + + + + + Function + + + Description + + Partial Mode + + + + + + + + mode + statistical + + mode () WITHIN GROUP ( ORDER BY anyelement ) + anyelement + + + Computes the mode, the most frequent + value of the aggregated argument (arbitrarily choosing the first one + if there are multiple equally-frequent values). The aggregated + argument must be of a sortable type. + + No + + + + + + percentile + continuous + + percentile_cont ( fraction double precision ) WITHIN GROUP ( ORDER BY double precision ) + double precision + + + percentile_cont ( fraction double precision ) WITHIN GROUP ( ORDER BY interval ) + interval + + + Computes the continuous percentile, a value + corresponding to the specified fraction + within the ordered set of aggregated argument values. This will + interpolate between adjacent input items if needed. + + No + + + + + percentile_cont ( fractions double precision[] ) WITHIN GROUP ( ORDER BY double precision ) + double precision[] + + + percentile_cont ( fractions double precision[] ) WITHIN GROUP ( ORDER BY interval ) + interval[] + + + Computes multiple continuous percentiles. The result is an array of + the same dimensions as the fractions + parameter, with each non-null element replaced by the (possibly + interpolated) value corresponding to that percentile. + + No + + + + + + percentile + discrete + + percentile_disc ( fraction double precision ) WITHIN GROUP ( ORDER BY anyelement ) + anyelement + + + Computes the discrete percentile, the first + value within the ordered set of aggregated argument values whose + position in the ordering equals or exceeds the + specified fraction. The aggregated + argument must be of a sortable type. + + No + + + + + percentile_disc ( fractions double precision[] ) WITHIN GROUP ( ORDER BY anyelement ) + anyarray + + + Computes multiple discrete percentiles. The result is an array of the + same dimensions as the fractions parameter, + with each non-null element replaced by the input value corresponding + to that percentile. + The aggregated argument must be of a sortable type. + + No + + + +
+ + + hypothetical-set aggregate + built-in + + + + Each of the hypothetical-set aggregates listed in + is associated with a + window function of the same name defined in + . In each case, the aggregate's result + is the value that the associated window function would have + returned for the hypothetical row constructed from + args, if such a row had been added to the sorted + group of rows represented by the sorted_args. + For each of these functions, the list of direct arguments + given in args must match the number and types of + the aggregated arguments given in sorted_args. + Unlike most built-in aggregates, these aggregates are not strict, that is + they do not drop input rows containing nulls. Null values sort according + to the rule specified in the ORDER BY clause. + + + + Hypothetical-Set Aggregate Functions + + + + + + + Function + + + Description + + Partial Mode + + + + + + + + rank + hypothetical + + rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) + bigint + + + Computes the rank of the hypothetical row, with gaps; that is, the row + number of the first row in its peer group. + + No + + + + + + dense_rank + hypothetical + + dense_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) + bigint + + + Computes the rank of the hypothetical row, without gaps; this function + effectively counts peer groups. + + No + + + + + + percent_rank + hypothetical + + percent_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) + double precision + + + Computes the relative rank of the hypothetical row, that is + (rank - 1) / (total rows - 1). + The value thus ranges from 0 to 1 inclusive. + + No + + + + + + cume_dist + hypothetical + + cume_dist ( args ) WITHIN GROUP ( ORDER BY sorted_args ) + double precision + + + Computes the cumulative distribution, that is (number of rows + preceding or peers with hypothetical row) / (total rows). The value + thus ranges from 1/N to 1. + + No + + + +
+ + + Grouping Operations + + + + + Function + + + Description + + + + + + + + + GROUPING + + GROUPING ( group_by_expression(s) ) + integer + + + Returns a bit mask indicating which GROUP BY + expressions are not included in the current grouping set. + Bits are assigned with the rightmost argument corresponding to the + least-significant bit; each bit is 0 if the corresponding expression + is included in the grouping criteria of the grouping set generating + the current result row, and 1 if it is not included. + + + + +
+ + + The grouping operations shown in + are used in conjunction with + grouping sets (see ) to distinguish + result rows. The arguments to the GROUPING function + are not actually evaluated, but they must exactly match expressions given + in the GROUP BY clause of the associated query level. + For example: + +=> SELECT * FROM items_sold; + make | model | sales +-------+-------+------- + Foo | GT | 10 + Foo | Tour | 20 + Bar | City | 15 + Bar | Sport | 5 +(4 rows) + +=> SELECT make, model, GROUPING(make,model), sum(sales) FROM items_sold GROUP BY ROLLUP(make,model); + make | model | grouping | sum +-------+-------+----------+----- + Foo | GT | 0 | 10 + Foo | Tour | 0 | 20 + Bar | City | 0 | 15 + Bar | Sport | 0 | 5 + Foo | | 1 | 30 + Bar | | 1 | 20 + | | 3 | 50 +(7 rows) + + Here, the grouping value 0 in the + first four rows shows that those have been grouped normally, over both the + grouping columns. The value 1 indicates + that model was not grouped by in the next-to-last two + rows, and the value 3 indicates that + neither make nor model was grouped + by in the last row (which therefore is an aggregate over all the input + rows). + + +
diff --git a/doc/src/sgml/func/func-array.sgml b/doc/src/sgml/func/func-array.sgml new file mode 100644 index 0000000000000..97e4865a5f7d2 --- /dev/null +++ b/doc/src/sgml/func/func-array.sgml @@ -0,0 +1,646 @@ + + Array Functions and Operators + + + shows the specialized operators + available for array types. + In addition to those, the usual comparison operators shown in are available for + arrays. The comparison operators compare the array contents + element-by-element, using the default B-tree comparison function for + the element data type, and sort based on the first difference. + In multidimensional arrays the elements are visited in row-major order + (last subscript varies most rapidly). + If the contents of two arrays are equal but the dimensionality is + different, the first difference in the dimensionality information + determines the sort order. + + + + Array Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + anyarray @> anyarray + boolean + + + Does the first array contain the second, that is, does each element + appearing in the second array equal some element of the first array? + (Duplicates are not treated specially, + thus ARRAY[1] and ARRAY[1,1] are + each considered to contain the other.) + + + ARRAY[1,4,3] @> ARRAY[3,1,3] + t + + + + + + anyarray <@ anyarray + boolean + + + Is the first array contained by the second? + + + ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] + t + + + + + + anyarray && anyarray + boolean + + + Do the arrays overlap, that is, have any elements in common? + + + ARRAY[1,4,3] && ARRAY[2,1] + t + + + + + + anycompatiblearray || anycompatiblearray + anycompatiblearray + + + Concatenates the two arrays. Concatenating a null or empty array is a + no-op; otherwise the arrays must have the same number of dimensions + (as illustrated by the first example) or differ in number of + dimensions by one (as illustrated by the second). + If the arrays are not of identical element types, they will be coerced + to a common type (see ). + + + ARRAY[1,2,3] || ARRAY[4,5,6,7] + {1,2,3,4,5,6,7} + + + ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9.9]] + {{1,2,3},{4,5,6},{7,8,9.9}} + + + + + + anycompatible || anycompatiblearray + anycompatiblearray + + + Concatenates an element onto the front of an array (which must be + empty or one-dimensional). + + + 3 || ARRAY[4,5,6] + {3,4,5,6} + + + + + + anycompatiblearray || anycompatible + anycompatiblearray + + + Concatenates an element onto the end of an array (which must be + empty or one-dimensional). + + + ARRAY[4,5,6] || 7 + {4,5,6,7} + + + + +
+ + + See for more details about array operator + behavior. See for more details about + which operators support indexed operations. + + + + shows the functions + available for use with array types. See + for more information and examples of the use of these functions. + + + + Array Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + array_append + + array_append ( anycompatiblearray, anycompatible ) + anycompatiblearray + + + Appends an element to the end of an array (same as + the anycompatiblearray || anycompatible + operator). + + + array_append(ARRAY[1,2], 3) + {1,2,3} + + + + + + + array_cat + + array_cat ( anycompatiblearray, anycompatiblearray ) + anycompatiblearray + + + Concatenates two arrays (same as + the anycompatiblearray || anycompatiblearray + operator). + + + array_cat(ARRAY[1,2,3], ARRAY[4,5]) + {1,2,3,4,5} + + + + + + + array_dims + + array_dims ( anyarray ) + text + + + Returns a text representation of the array's dimensions. + + + array_dims(ARRAY[[1,2,3], [4,5,6]]) + [1:2][1:3] + + + + + + + array_fill + + array_fill ( anyelement, integer[] + , integer[] ) + anyarray + + + Returns an array filled with copies of the given value, having + dimensions of the lengths specified by the second argument. + The optional third argument supplies lower-bound values for each + dimension (which default to all 1). + + + array_fill(11, ARRAY[2,3]) + {{11,11,11},{11,11,11}} + + + array_fill(7, ARRAY[3], ARRAY[2]) + [2:4]={7,7,7} + + + + + + + array_length + + array_length ( anyarray, integer ) + integer + + + Returns the length of the requested array dimension. + (Produces NULL instead of 0 for empty or missing array dimensions.) + + + array_length(array[1,2,3], 1) + 3 + + + array_length(array[]::int[], 1) + NULL + + + array_length(array['text'], 2) + NULL + + + + + + + array_lower + + array_lower ( anyarray, integer ) + integer + + + Returns the lower bound of the requested array dimension. + + + array_lower('[0:2]={1,2,3}'::integer[], 1) + 0 + + + + + + + array_ndims + + array_ndims ( anyarray ) + integer + + + Returns the number of dimensions of the array. + + + array_ndims(ARRAY[[1,2,3], [4,5,6]]) + 2 + + + + + + + array_position + + array_position ( anycompatiblearray, anycompatible , integer ) + integer + + + Returns the subscript of the first occurrence of the second argument + in the array, or NULL if it's not present. + If the third argument is given, the search begins at that subscript. + The array must be one-dimensional. + Comparisons are done using IS NOT DISTINCT FROM + semantics, so it is possible to search for NULL. + + + array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') + 2 + + + + + + + array_positions + + array_positions ( anycompatiblearray, anycompatible ) + integer[] + + + Returns an array of the subscripts of all occurrences of the second + argument in the array given as first argument. + The array must be one-dimensional. + Comparisons are done using IS NOT DISTINCT FROM + semantics, so it is possible to search for NULL. + NULL is returned only if the array + is NULL; if the value is not found in the array, an + empty array is returned. + + + array_positions(ARRAY['A','A','B','A'], 'A') + {1,2,4} + + + + + + + array_prepend + + array_prepend ( anycompatible, anycompatiblearray ) + anycompatiblearray + + + Prepends an element to the beginning of an array (same as + the anycompatible || anycompatiblearray + operator). + + + array_prepend(1, ARRAY[2,3]) + {1,2,3} + + + + + + + array_remove + + array_remove ( anycompatiblearray, anycompatible ) + anycompatiblearray + + + Removes all elements equal to the given value from the array. + The array must be one-dimensional. + Comparisons are done using IS NOT DISTINCT FROM + semantics, so it is possible to remove NULLs. + + + array_remove(ARRAY[1,2,3,2], 2) + {1,3} + + + + + + + array_replace + + array_replace ( anycompatiblearray, anycompatible, anycompatible ) + anycompatiblearray + + + Replaces each array element equal to the second argument with the + third argument. + + + array_replace(ARRAY[1,2,5,4], 5, 3) + {1,2,3,4} + + + + + + + array_reverse + + array_reverse ( anyarray ) + anyarray + + + Reverses the first dimension of the array. + + + array_reverse(ARRAY[[1,2],[3,4],[5,6]]) + {{5,6},{3,4},{1,2}} + + + + + + + array_sample + + array_sample ( array anyarray, n integer ) + anyarray + + + Returns an array of n items randomly selected + from array. n may not + exceed the length of array's first dimension. + If array is multi-dimensional, + an item is a slice having a given first subscript. + + + array_sample(ARRAY[1,2,3,4,5,6], 3) + {2,6,1} + + + array_sample(ARRAY[[1,2],[3,4],[5,6]], 2) + {{5,6},{1,2}} + + + + + + + array_shuffle + + array_shuffle ( anyarray ) + anyarray + + + Randomly shuffles the first dimension of the array. + + + array_shuffle(ARRAY[[1,2],[3,4],[5,6]]) + {{5,6},{1,2},{3,4}} + + + + + + + array_sort + + array_sort ( + array anyarray + , descending boolean + , nulls_first boolean + ) + anyarray + + + Sorts the first dimension of the array. + The sort order is determined by the default sort ordering of the + array's element type; however, if the element type is collatable, + the collation to use can be specified by adding + a COLLATE clause to + the array argument. + + + If descending is true then sort in + descending order, otherwise ascending order. If omitted, the + default is ascending order. + If nulls_first is true then nulls appear + before non-null values, otherwise nulls appear after non-null + values. + If omitted, nulls_first is taken to have + the same value as descending. + + + array_sort(ARRAY[[2,4],[2,1],[6,5]]) + {{2,1},{2,4},{6,5}} + + + + + + + array_to_string + + array_to_string ( array anyarray, delimiter text , null_string text ) + text + + + Converts each array element to its text representation, and + concatenates those separated by + the delimiter string. + If null_string is given and is + not NULL, then NULL array + entries are represented by that string; otherwise, they are omitted. + See also string_to_array. + + + array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') + 1,2,3,*,5 + + + + + + + array_upper + + array_upper ( anyarray, integer ) + integer + + + Returns the upper bound of the requested array dimension. + + + array_upper(ARRAY[1,8,3,7], 1) + 4 + + + + + + + cardinality + + cardinality ( anyarray ) + integer + + + Returns the total number of elements in the array, or 0 if the array + is empty. + + + cardinality(ARRAY[[1,2],[3,4]]) + 4 + + + + + + + trim_array + + trim_array ( array anyarray, n integer ) + anyarray + + + Trims an array by removing the last n elements. + If the array is multidimensional, only the first dimension is trimmed. + + + trim_array(ARRAY[1,2,3,4,5,6], 2) + {1,2,3,4} + + + + + + + unnest + + unnest ( anyarray ) + setof anyelement + + + Expands an array into a set of rows. + The array's elements are read out in storage order. + + + unnest(ARRAY[1,2]) + + + 1 + 2 + + + + unnest(ARRAY[['foo','bar'],['baz','quux']]) + + + foo + bar + baz + quux + + + + + + + unnest ( anyarray, anyarray , ... ) + setof anyelement, anyelement [, ... ] + + + Expands multiple arrays (possibly of different data types) into a set of + rows. If the arrays are not all the same length then the shorter ones + are padded with NULLs. This form is only allowed + in a query's FROM clause; see . + + + select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b) + + + a | b +---+----- + 1 | foo + 2 | bar + | baz + + + + + +
+ + + See also about the aggregate + function array_agg for use with arrays. + +
diff --git a/doc/src/sgml/func/func-binarystring.sgml b/doc/src/sgml/func/func-binarystring.sgml new file mode 100644 index 0000000000000..78814ee0685eb --- /dev/null +++ b/doc/src/sgml/func/func-binarystring.sgml @@ -0,0 +1,854 @@ + + Binary String Functions and Operators + + + binary data + functions + + + + This section describes functions and operators for examining and + manipulating binary strings, that is values of type bytea. + Many of these are equivalent, in purpose and syntax, to the + text-string functions described in the previous section. + + + + SQL defines some string functions that use + key words, rather than commas, to separate + arguments. Details are in + . + PostgreSQL also provides versions of these functions + that use the regular function invocation syntax + (see ). + + + + <acronym>SQL</acronym> Binary String Functions and Operators + + + + + Function/Operator + + + Description + + + Example(s) + + + + + + + + + binary string + concatenation + + bytea || bytea + bytea + + + Concatenates the two binary strings. + + + '\x123456'::bytea || '\x789a00bcde'::bytea + \x123456789a00bcde + + + + + + + bit_length + + bit_length ( bytea ) + integer + + + Returns number of bits in the binary string (8 + times the octet_length). + + + bit_length('\x123456'::bytea) + 24 + + + + + + + btrim + + btrim ( bytes bytea, + bytesremoved bytea ) + bytea + + + Removes the longest string containing only bytes appearing in + bytesremoved from the start and end of + bytes. + + + btrim('\x1234567890'::bytea, '\x9012'::bytea) + \x345678 + + + + + + + ltrim + + ltrim ( bytes bytea, + bytesremoved bytea ) + bytea + + + Removes the longest string containing only bytes appearing in + bytesremoved from the start of + bytes. + + + ltrim('\x1234567890'::bytea, '\x9012'::bytea) + \x34567890 + + + + + + + octet_length + + octet_length ( bytea ) + integer + + + Returns number of bytes in the binary string. + + + octet_length('\x123456'::bytea) + 3 + + + + + + + overlay + + overlay ( bytes bytea PLACING newsubstring bytea FROM start integer FOR count integer ) + bytea + + + Replaces the substring of bytes that starts at + the start'th byte and extends + for count bytes + with newsubstring. + If count is omitted, it defaults to the length + of newsubstring. + + + overlay('\x1234567890'::bytea placing '\002\003'::bytea from 2 for 3) + \x12020390 + + + + + + + position + + position ( substring bytea IN bytes bytea ) + integer + + + Returns first starting index of the specified + substring within + bytes, or zero if it's not present. + + + position('\x5678'::bytea in '\x1234567890'::bytea) + 3 + + + + + + + rtrim + + rtrim ( bytes bytea, + bytesremoved bytea ) + bytea + + + Removes the longest string containing only bytes appearing in + bytesremoved from the end of + bytes. + + + rtrim('\x1234567890'::bytea, '\x9012'::bytea) + \x12345678 + + + + + + + substring + + substring ( bytes bytea FROM start integer FOR count integer ) + bytea + + + Extracts the substring of bytes starting at + the start'th byte if that is specified, + and stopping after count bytes if that is + specified. Provide at least one of start + and count. + + + substring('\x1234567890'::bytea from 3 for 2) + \x5678 + + + + + + + trim + + trim ( LEADING | TRAILING | BOTH + bytesremoved bytea FROM + bytes bytea ) + bytea + + + Removes the longest string containing only bytes appearing in + bytesremoved from the start, + end, or both ends (BOTH is the default) + of bytes. + + + trim('\x9012'::bytea from '\x1234567890'::bytea) + \x345678 + + + + + + trim ( LEADING | TRAILING | BOTH FROM + bytes bytea, + bytesremoved bytea ) + bytea + + + This is a non-standard syntax for trim(). + + + trim(both from '\x1234567890'::bytea, '\x9012'::bytea) + \x345678 + + + + +
+ + + Additional binary string manipulation functions are available and + are listed in . Some + of them are used internally to implement the + SQL-standard string functions listed in . + + + + Other Binary String Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + bit_count + + + popcount + bit_count + + bit_count ( bytes bytea ) + bigint + + + Returns the number of bits set in the binary string (also known as + popcount). + + + bit_count('\x1234567890'::bytea) + 15 + + + + + + + crc32 + + crc32 ( bytea ) + bigint + + + Computes the CRC-32 value of the binary string. + + + crc32('abc'::bytea) + 891568578 + + + + + + + crc32c + + crc32c ( bytea ) + bigint + + + Computes the CRC-32C value of the binary string. + + + crc32c('abc'::bytea) + 910901175 + + + + + + + get_bit + + get_bit ( bytes bytea, + n bigint ) + integer + + + Extracts n'th bit + from binary string. + + + get_bit('\x1234567890'::bytea, 30) + 1 + + + + + + + get_byte + + get_byte ( bytes bytea, + n integer ) + integer + + + Extracts n'th byte + from binary string. + + + get_byte('\x1234567890'::bytea, 4) + 144 + + + + + + + length + + + binary string + length + + + length + of a binary string + binary strings, length + + length ( bytea ) + integer + + + Returns the number of bytes in the binary string. + + + length('\x1234567890'::bytea) + 5 + + + + + + length ( bytes bytea, + encoding name ) + integer + + + Returns the number of characters in the binary string, assuming + that it is text in the given encoding. + + + length('jose'::bytea, 'UTF8') + 4 + + + + + + + md5 + + md5 ( bytea ) + text + + + Computes the MD5 hash of + the binary string, with the result written in hexadecimal. + + + md5('Th\000omas'::bytea) + 8ab2d3c9689aaf18&zwsp;b4958c334c82d8b1 + + + + + + + reverse + + reverse ( bytea ) + bytea + + + Reverses the order of the bytes in the binary string. + + + reverse('\xabcd'::bytea) + \xcdab + + + + + + + set_bit + + set_bit ( bytes bytea, + n bigint, + newvalue integer ) + bytea + + + Sets n'th bit in + binary string to newvalue. + + + set_bit('\x1234567890'::bytea, 30, 0) + \x1234563890 + + + + + + + set_byte + + set_byte ( bytes bytea, + n integer, + newvalue integer ) + bytea + + + Sets n'th byte in + binary string to newvalue. + + + set_byte('\x1234567890'::bytea, 4, 64) + \x1234567840 + + + + + + + sha224 + + sha224 ( bytea ) + bytea + + + Computes the SHA-224 hash + of the binary string. + + + sha224('abc'::bytea) + \x23097d223405d8228642a477bda2&zwsp;55b32aadbce4bda0b3f7e36c9da7 + + + + + + + sha256 + + sha256 ( bytea ) + bytea + + + Computes the SHA-256 hash + of the binary string. + + + sha256('abc'::bytea) + \xba7816bf8f01cfea414140de5dae2223&zwsp;b00361a396177a9cb410ff61f20015ad + + + + + + + sha384 + + sha384 ( bytea ) + bytea + + + Computes the SHA-384 hash + of the binary string. + + + sha384('abc'::bytea) + \xcb00753f45a35e8bb5a03d699ac65007&zwsp;272c32ab0eded1631a8b605a43ff5bed&zwsp;8086072ba1e7cc2358baeca134c825a7 + + + + + + + sha512 + + sha512 ( bytea ) + bytea + + + Computes the SHA-512 hash + of the binary string. + + + sha512('abc'::bytea) + \xddaf35a193617abacc417349ae204131&zwsp;12e6fa4e89a97ea20a9eeee64b55d39a&zwsp;2192992a274fc1a836ba3c23a3feebbd&zwsp;454d4423643ce80e2a9ac94fa54ca49f + + + + + + + substr + + substr ( bytes bytea, start integer , count integer ) + bytea + + + Extracts the substring of bytes starting at + the start'th byte, + and extending for count bytes if that is + specified. (Same + as substring(bytes + from start + for count).) + + + substr('\x1234567890'::bytea, 3, 2) + \x5678 + + + + +
+ + + Functions get_byte and set_byte + number the first byte of a binary string as byte 0. + Functions get_bit and set_bit + number bits from the right within each byte; for example bit 0 is the least + significant bit of the first byte, and bit 15 is the most significant bit + of the second byte. + + + + For historical reasons, the function md5 + returns a hex-encoded value of type text whereas the SHA-2 + functions return type bytea. Use the functions + encode + and decode to + convert between the two. For example write encode(sha256('abc'), + 'hex') to get a hex-encoded text representation, + or decode(md5('abc'), 'hex') to get + a bytea value. + + + + + character string + converting to binary string + + + binary string + converting to character string + + Functions for converting strings between different character sets + (encodings), and for representing arbitrary binary data in textual + form, are shown in + . For these + functions, an argument or result of type text is expressed + in the database's default encoding, while arguments or results of + type bytea are in an encoding named by another argument. + + + + Text/Binary String Conversion Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + convert + + convert ( bytes bytea, + src_encoding name, + dest_encoding name ) + bytea + + + Converts a binary string representing text in + encoding src_encoding + to a binary string in encoding dest_encoding + (see for + available conversions). + + + convert('text_in_utf8', 'UTF8', 'LATIN1') + \x746578745f696e5f75746638 + + + + + + + convert_from + + convert_from ( bytes bytea, + src_encoding name ) + text + + + Converts a binary string representing text in + encoding src_encoding + to text in the database encoding + (see for + available conversions). + + + convert_from('text_in_utf8', 'UTF8') + text_in_utf8 + + + + + + + convert_to + + convert_to ( string text, + dest_encoding name ) + bytea + + + Converts a text string (in the database encoding) to a + binary string encoded in encoding dest_encoding + (see for + available conversions). + + + convert_to('some_text', 'UTF8') + \x736f6d655f74657874 + + + + + + + encode + + encode ( bytes bytea, + format text ) + text + + + Encodes binary data into a textual representation; supported + format values are: + base64, + escape, + hex. + + + encode('123\000\001', 'base64') + MTIzAAE= + + + + + + + decode + + decode ( string text, + format text ) + bytea + + + Decodes binary data from a textual representation; supported + format values are the same as + for encode. + + + decode('MTIzAAE=', 'base64') + \x3132330001 + + + + +
+ + + The encode and decode + functions support the following textual formats: + + + + base64 + + base64 format + + + + The base64 format is that + of RFC + 2045 Section 6.8. As per the RFC, encoded lines are + broken at 76 characters. However instead of the MIME CRLF + end-of-line marker, only a newline is used for end-of-line. + The decode function ignores carriage-return, + newline, space, and tab characters. Otherwise, an error is + raised when decode is supplied invalid + base64 data — including when trailing padding is incorrect. + + + + + + escape + + escape format + + + + The escape format converts zero bytes and + bytes with the high bit set into octal escape sequences + (\nnn), and it doubles + backslashes. Other byte values are represented literally. + The decode function will raise an error if a + backslash is not followed by either a second backslash or three + octal digits; it accepts other byte values unchanged. + + + + + + hex + + hex format + + + + The hex format represents each 4 bits of + data as one hexadecimal digit, 0 + through f, writing the higher-order digit of + each byte first. The encode function outputs + the a-f hex digits in lower + case. Because the smallest unit of data is 8 bits, there are + always an even number of characters returned + by encode. + The decode function + accepts the a-f characters in + either upper or lower case. An error is raised + when decode is given invalid hex data + — including when given an odd number of characters. + + + + + + + + In addition, it is possible to cast integral values to and from type + bytea. Casting an integer to bytea produces + 2, 4, or 8 bytes, depending on the width of the integer type. The result + is the two's complement representation of the integer, with the most + significant byte first. Some examples: + +1234::smallint::bytea \x04d2 +cast(1234 as bytea) \x000004d2 +cast(-1234 as bytea) \xfffffb2e +'\x8000'::bytea::smallint -32768 +'\x8000'::bytea::integer 32768 + + Casting a bytea to an integer will raise an error if the + length of the bytea exceeds the width of the integer type. + + + + See also the aggregate function string_agg in + and the large object functions + in . + +
diff --git a/doc/src/sgml/func/func-bitstring.sgml b/doc/src/sgml/func/func-bitstring.sgml new file mode 100644 index 0000000000000..f03dd63afcc6a --- /dev/null +++ b/doc/src/sgml/func/func-bitstring.sgml @@ -0,0 +1,358 @@ + + Bit String Functions and Operators + + + bit strings + functions + + + + This section describes functions and operators for examining and + manipulating bit strings, that is values of the types + bit and bit varying. (While only + type bit is mentioned in these tables, values of + type bit varying can be used interchangeably.) + Bit strings support the usual comparison operators shown in + , as well as the + operators shown in . + + + + Bit String Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + bit || bit + bit + + + Concatenation + + + B'10001' || B'011' + 10001011 + + + + + + bit & bit + bit + + + Bitwise AND (inputs must be of equal length) + + + B'10001' & B'01101' + 00001 + + + + + + bit | bit + bit + + + Bitwise OR (inputs must be of equal length) + + + B'10001' | B'01101' + 11101 + + + + + + bit # bit + bit + + + Bitwise exclusive OR (inputs must be of equal length) + + + B'10001' # B'01101' + 11100 + + + + + + ~ bit + bit + + + Bitwise NOT + + + ~ B'10001' + 01110 + + + + + + bit << integer + bit + + + Bitwise shift left + (string length is preserved) + + + B'10001' << 3 + 01000 + + + + + + bit >> integer + bit + + + Bitwise shift right + (string length is preserved) + + + B'10001' >> 2 + 00100 + + + + +
+ + + Some of the functions available for binary strings are also available + for bit strings, as shown in . + + + + Bit String Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + bit_count + + bit_count ( bit ) + bigint + + + Returns the number of bits set in the bit string (also known as + popcount). + + + bit_count(B'10111') + 4 + + + + + + + bit_length + + bit_length ( bit ) + integer + + + Returns number of bits in the bit string. + + + bit_length(B'10111') + 5 + + + + + + + length + + + bit string + length + + length ( bit ) + integer + + + Returns number of bits in the bit string. + + + length(B'10111') + 5 + + + + + + + octet_length + + octet_length ( bit ) + integer + + + Returns number of bytes in the bit string. + + + octet_length(B'1011111011') + 2 + + + + + + + overlay + + overlay ( bits bit PLACING newsubstring bit FROM start integer FOR count integer ) + bit + + + Replaces the substring of bits that starts at + the start'th bit and extends + for count bits + with newsubstring. + If count is omitted, it defaults to the length + of newsubstring. + + + overlay(B'01010101010101010' placing B'11111' from 2 for 3) + 0111110101010101010 + + + + + + + position + + position ( substring bit IN bits bit ) + integer + + + Returns first starting index of the specified substring + within bits, or zero if it's not present. + + + position(B'010' in B'000001101011') + 8 + + + + + + + substring + + substring ( bits bit FROM start integer FOR count integer ) + bit + + + Extracts the substring of bits starting at + the start'th bit if that is specified, + and stopping after count bits if that is + specified. Provide at least one of start + and count. + + + substring(B'110010111111' from 3 for 2) + 00 + + + + + + + get_bit + + get_bit ( bits bit, + n integer ) + integer + + + Extracts n'th bit + from bit string; the first (leftmost) bit is bit 0. + + + get_bit(B'101010101010101010', 6) + 1 + + + + + + + set_bit + + set_bit ( bits bit, + n integer, + newvalue integer ) + bit + + + Sets n'th bit in + bit string to newvalue; + the first (leftmost) bit is bit 0. + + + set_bit(B'101010101010101010', 6, 0) + 101010001010101010 + + + + +
+ + + In addition, it is possible to cast integral values to and from type + bit. + Casting an integer to bit(n) copies the rightmost + n bits. Casting an integer to a bit string width wider + than the integer itself will sign-extend on the left. + Some examples: + +44::bit(10) 0000101100 +44::bit(3) 100 +cast(-44 as bit(12)) 111111010100 +'1110'::bit(4)::integer 14 + + Note that casting to just bit means casting to + bit(1), and so will deliver only the least significant + bit of the integer. + +
diff --git a/doc/src/sgml/func/func-comparison.sgml b/doc/src/sgml/func/func-comparison.sgml new file mode 100644 index 0000000000000..c1205983f8bac --- /dev/null +++ b/doc/src/sgml/func/func-comparison.sgml @@ -0,0 +1,638 @@ + + Comparison Functions and Operators + + + comparison + operators + + + + The usual comparison operators are available, as shown in . + + + + Comparison Operators + + + + Operator + Description + + + + + + + datatype < datatype + boolean + + Less than + + + + + datatype > datatype + boolean + + Greater than + + + + + datatype <= datatype + boolean + + Less than or equal to + + + + + datatype >= datatype + boolean + + Greater than or equal to + + + + + datatype = datatype + boolean + + Equal + + + + + datatype <> datatype + boolean + + Not equal + + + + + datatype != datatype + boolean + + Not equal + + + +
+ + + + <> is the standard SQL notation for not + equal. != is an alias, which is converted + to <> at a very early stage of parsing. + Hence, it is not possible to implement != + and <> operators that do different things. + + + + + These comparison operators are available for all built-in data types + that have a natural ordering, including numeric, string, and date/time + types. In addition, arrays, composite types, and ranges can be compared + if their component data types are comparable. + + + + It is usually possible to compare values of related data + types as well; for example integer > + bigint will work. Some cases of this sort are implemented + directly by cross-type comparison operators, but if no + such operator is available, the parser will coerce the less-general type + to the more-general type and apply the latter's comparison operator. + + + + As shown above, all comparison operators are binary operators that + return values of type boolean. Thus, expressions like + 1 < 2 < 3 are not valid (because there is + no < operator to compare a Boolean value with + 3). Use the BETWEEN predicates + shown below to perform range tests. + + + + There are also some comparison predicates, as shown in . These behave much like + operators, but have special syntax mandated by the SQL standard. + + + + Comparison Predicates + + + + + Predicate + + + Description + + + Example(s) + + + + + + + + datatype BETWEEN datatype AND datatype + boolean + + + Between (inclusive of the range endpoints). + + + 2 BETWEEN 1 AND 3 + t + + + 2 BETWEEN 3 AND 1 + f + + + + + + datatype NOT BETWEEN datatype AND datatype + boolean + + + Not between (the negation of BETWEEN). + + + 2 NOT BETWEEN 1 AND 3 + f + + + + + + datatype BETWEEN SYMMETRIC datatype AND datatype + boolean + + + Between, after sorting the two endpoint values. + + + 2 BETWEEN SYMMETRIC 3 AND 1 + t + + + + + + datatype NOT BETWEEN SYMMETRIC datatype AND datatype + boolean + + + Not between, after sorting the two endpoint values. + + + 2 NOT BETWEEN SYMMETRIC 3 AND 1 + f + + + + + + datatype IS DISTINCT FROM datatype + boolean + + + Not equal, treating null as a comparable value. + + + 1 IS DISTINCT FROM NULL + t (rather than NULL) + + + NULL IS DISTINCT FROM NULL + f (rather than NULL) + + + + + + datatype IS NOT DISTINCT FROM datatype + boolean + + + Equal, treating null as a comparable value. + + + 1 IS NOT DISTINCT FROM NULL + f (rather than NULL) + + + NULL IS NOT DISTINCT FROM NULL + t (rather than NULL) + + + + + + datatype IS NULL + boolean + + + Test whether value is null. + + + 1.5 IS NULL + f + + + + + + datatype IS NOT NULL + boolean + + + Test whether value is not null. + + + 'null' IS NOT NULL + t + + + + + + datatype ISNULL + boolean + + + Test whether value is null (nonstandard syntax). + + + + + + datatype NOTNULL + boolean + + + Test whether value is not null (nonstandard syntax). + + + + + + boolean IS TRUE + boolean + + + Test whether boolean expression yields true. + + + true IS TRUE + t + + + NULL::boolean IS TRUE + f (rather than NULL) + + + + + + boolean IS NOT TRUE + boolean + + + Test whether boolean expression yields false or unknown. + + + true IS NOT TRUE + f + + + NULL::boolean IS NOT TRUE + t (rather than NULL) + + + + + + boolean IS FALSE + boolean + + + Test whether boolean expression yields false. + + + true IS FALSE + f + + + NULL::boolean IS FALSE + f (rather than NULL) + + + + + + boolean IS NOT FALSE + boolean + + + Test whether boolean expression yields true or unknown. + + + true IS NOT FALSE + t + + + NULL::boolean IS NOT FALSE + t (rather than NULL) + + + + + + boolean IS UNKNOWN + boolean + + + Test whether boolean expression yields unknown. + + + true IS UNKNOWN + f + + + NULL::boolean IS UNKNOWN + t (rather than NULL) + + + + + + boolean IS NOT UNKNOWN + boolean + + + Test whether boolean expression yields true or false. + + + true IS NOT UNKNOWN + t + + + NULL::boolean IS NOT UNKNOWN + f (rather than NULL) + + + + +
+ + + + BETWEEN + + + BETWEEN SYMMETRIC + + The BETWEEN predicate simplifies range tests: + +a BETWEEN x AND y + + is equivalent to + +a >= x AND a <= y + + Notice that BETWEEN treats the endpoint values as included + in the range. + BETWEEN SYMMETRIC is like BETWEEN + except there is no requirement that the argument to the left of + AND be less than or equal to the argument on the right. + If it is not, those two arguments are automatically swapped, so that + a nonempty range is always implied. + + + + The various variants of BETWEEN are implemented in + terms of the ordinary comparison operators, and therefore will work for + any data type(s) that can be compared. + + + + + The use of AND in the BETWEEN + syntax creates an ambiguity with the use of AND as a + logical operator. To resolve this, only a limited set of expression + types are allowed as the second argument of a BETWEEN + clause. If you need to write a more complex sub-expression + in BETWEEN, write parentheses around the + sub-expression. + + + + + + IS DISTINCT FROM + + + IS NOT DISTINCT FROM + + Ordinary comparison operators yield null (signifying unknown), + not true or false, when either input is null. For example, + 7 = NULL yields null, as does 7 <> NULL. When + this behavior is not suitable, use the + IS NOT DISTINCT FROM predicates: + +a IS DISTINCT FROM b +a IS NOT DISTINCT FROM b + + For non-null inputs, IS DISTINCT FROM is + the same as the <> operator. However, if both + inputs are null it returns false, and if only one input is + null it returns true. Similarly, IS NOT DISTINCT + FROM is identical to = for non-null + inputs, but it returns true when both inputs are null, and false when only + one input is null. Thus, these predicates effectively act as though null + were a normal data value, rather than unknown. + + + + + IS NULL + + + IS NOT NULL + + + ISNULL + + + NOTNULL + + To check whether a value is or is not null, use the predicates: + +expression IS NULL +expression IS NOT NULL + + or the equivalent, but nonstandard, predicates: + +expression ISNULL +expression NOTNULL + + null valuecomparing + + + + Do not write + expression = NULL + because NULL is not equal to + NULL. (The null value represents an unknown value, + and it is not known whether two unknown values are equal.) + + + + + Some applications might expect that + expression = NULL + returns true if expression evaluates to + the null value. It is highly recommended that these applications + be modified to comply with the SQL standard. However, if that + cannot be done the + configuration variable is available. If it is enabled, + PostgreSQL will convert x = + NULL clauses to x IS NULL. + + + + + If the expression is row-valued, then + IS NULL is true when the row expression itself is null + or when all the row's fields are null, while + IS NOT NULL is true when the row expression itself is non-null + and all the row's fields are non-null. Because of this behavior, + IS NULL and IS NOT NULL do not always return + inverse results for row-valued expressions; in particular, a row-valued + expression that contains both null and non-null fields will return false + for both tests. For example: + + +SELECT ROW(1,2.5,'this is a test') = ROW(1, 3, 'not the same'); + +SELECT ROW(table.*) IS NULL FROM table; -- detect all-null rows + +SELECT ROW(table.*) IS NOT NULL FROM table; -- detect all-non-null rows + +SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in rows + + + In some cases, it may be preferable to + write row IS DISTINCT FROM NULL + or row IS NOT DISTINCT FROM NULL, + which will simply check whether the overall row value is null without any + additional tests on the row fields. + + + + + IS TRUE + + + IS NOT TRUE + + + IS FALSE + + + IS NOT FALSE + + + IS UNKNOWN + + + IS NOT UNKNOWN + + Boolean values can also be tested using the predicates + +boolean_expression IS TRUE +boolean_expression IS NOT TRUE +boolean_expression IS FALSE +boolean_expression IS NOT FALSE +boolean_expression IS UNKNOWN +boolean_expression IS NOT UNKNOWN + + These will always return true or false, never a null value, even when the + operand is null. + A null input is treated as the logical value unknown. + Notice that IS UNKNOWN and IS NOT UNKNOWN are + effectively the same as IS NULL and + IS NOT NULL, respectively, except that the input + expression must be of Boolean type. + + + + Some comparison-related functions are also available, as shown in . + + + + Comparison Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + num_nonnulls + + num_nonnulls ( VARIADIC "any" ) + integer + + + Returns the number of non-null arguments. + + + num_nonnulls(1, NULL, 2) + 2 + + + + + + num_nulls + + num_nulls ( VARIADIC "any" ) + integer + + + Returns the number of null arguments. + + + num_nulls(1, NULL, 2) + 1 + + + + +
+ +
diff --git a/doc/src/sgml/func/func-comparisons.sgml b/doc/src/sgml/func/func-comparisons.sgml new file mode 100644 index 0000000000000..6a6e0bd401920 --- /dev/null +++ b/doc/src/sgml/func/func-comparisons.sgml @@ -0,0 +1,336 @@ + + Row and Array Comparisons + + + IN + + + + NOT IN + + + + ANY + + + + ALL + + + + SOME + + + + composite type + comparison + + + + row-wise comparison + + + + comparison + composite type + + + + comparison + row constructor + + + + IS DISTINCT FROM + + + + IS NOT DISTINCT FROM + + + + This section describes several specialized constructs for making + multiple comparisons between groups of values. These forms are + syntactically related to the subquery forms of the previous section, + but do not involve subqueries. + The forms involving array subexpressions are + PostgreSQL extensions; the rest are + SQL-compliant. + All of the expression forms documented in this section return + Boolean (true/false) results. + + + + <literal>IN</literal> + + +expression IN (value , ...) + + + + The right-hand side is a parenthesized list + of expressions. The result is true if the left-hand expression's + result is equal to any of the right-hand expressions. This is a shorthand + notation for + + +expression = value1 +OR +expression = value2 +OR +... + + + + + Note that if the left-hand expression yields null, or if there are + no equal right-hand values and at least one right-hand expression yields + null, the result of the IN construct will be null, not false. + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + + <literal>NOT IN</literal> + + +expression NOT IN (value , ...) + + + + The right-hand side is a parenthesized list + of expressions. The result is true if the left-hand expression's + result is unequal to all of the right-hand expressions. This is a shorthand + notation for + + +expression <> value1 +AND +expression <> value2 +AND +... + + + + + Note that if the left-hand expression yields null, or if there are + no equal right-hand values and at least one right-hand expression yields + null, the result of the NOT IN construct will be null, not true + as one might naively expect. + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + + x NOT IN y is equivalent to NOT (x IN y) in all + cases. However, null values are much more likely to trip up the novice when + working with NOT IN than when working with IN. + It is best to express your condition positively if possible. + + + + + + <literal>ANY</literal>/<literal>SOME</literal> (array) + + +expression operator ANY (array expression) +expression operator SOME (array expression) + + + + The right-hand side is a parenthesized expression, which must yield an + array value. + The left-hand expression + is evaluated and compared to each element of the array using the + given operator, which must yield a Boolean + result. + The result of ANY is true if any true result is obtained. + The result is false if no true result is found (including the + case where the array has zero elements). + + + + If the array expression yields a null array, the result of + ANY will be null. If the left-hand expression yields null, + the result of ANY is ordinarily null (though a non-strict + comparison operator could possibly yield a different result). + Also, if the right-hand array contains any null elements and no true + comparison result is obtained, the result of ANY + will be null, not false (again, assuming a strict comparison operator). + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + SOME is a synonym for ANY. + + + + + <literal>ALL</literal> (array) + + +expression operator ALL (array expression) + + + + The right-hand side is a parenthesized expression, which must yield an + array value. + The left-hand expression + is evaluated and compared to each element of the array using the + given operator, which must yield a Boolean + result. + The result of ALL is true if all comparisons yield true + (including the case where the array has zero elements). + The result is false if any false result is found. + + + + If the array expression yields a null array, the result of + ALL will be null. If the left-hand expression yields null, + the result of ALL is ordinarily null (though a non-strict + comparison operator could possibly yield a different result). + Also, if the right-hand array contains any null elements and no false + comparison result is obtained, the result of ALL + will be null, not true (again, assuming a strict comparison operator). + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + + Row Constructor Comparison + + +row_constructor operator row_constructor + + + + Each side is a row constructor, + as described in . + The two row constructors must have the same number of fields. + The given operator is applied to each pair + of corresponding fields. (Since the fields could be of different + types, this means that a different specific operator could be selected + for each pair.) + All the selected operators must be members of some B-tree operator + class, or be the negator of an = member of a B-tree + operator class, meaning that row constructor comparison is only + possible when the operator is + =, + <>, + <, + <=, + >, or + >=, + or has semantics similar to one of these. + + + + The = and <> cases work slightly differently + from the others. Two rows are considered + equal if all their corresponding members are non-null and equal; the rows + are unequal if any corresponding members are non-null and unequal; + otherwise the result of the row comparison is unknown (null). + + + + For the <, <=, > and + >= cases, the row elements are compared left-to-right, + stopping as soon as an unequal or null pair of elements is found. + If either of this pair of elements is null, the result of the + row comparison is unknown (null); otherwise comparison of this pair + of elements determines the result. For example, + ROW(1,2,NULL) < ROW(1,3,0) + yields true, not null, because the third pair of elements are not + considered. + + + +row_constructor IS DISTINCT FROM row_constructor + + + + This construct is similar to a <> row comparison, + but it does not yield null for null inputs. Instead, any null value is + considered unequal to (distinct from) any non-null value, and any two + nulls are considered equal (not distinct). Thus the result will + either be true or false, never null. + + + +row_constructor IS NOT DISTINCT FROM row_constructor + + + + This construct is similar to a = row comparison, + but it does not yield null for null inputs. Instead, any null value is + considered unequal to (distinct from) any non-null value, and any two + nulls are considered equal (not distinct). Thus the result will always + be either true or false, never null. + + + + + + Composite Type Comparison + + +record operator record + + + + The SQL specification requires row-wise comparison to return NULL if the + result depends on comparing two NULL values or a NULL and a non-NULL. + PostgreSQL does this only when comparing the + results of two row constructors (as in + ) or comparing a row constructor + to the output of a subquery (as in ). + In other contexts where two composite-type values are compared, two + NULL field values are considered equal, and a NULL is considered larger + than a non-NULL. This is necessary in order to have consistent sorting + and indexing behavior for composite types. + + + + Each side is evaluated and they are compared row-wise. Composite type + comparisons are allowed when the operator is + =, + <>, + <, + <=, + > or + >=, + or has semantics similar to one of these. (To be specific, an operator + can be a row comparison operator if it is a member of a B-tree operator + class, or is the negator of the = member of a B-tree operator + class.) The default behavior of the above operators is the same as for + IS [ NOT ] DISTINCT FROM for row constructors (see + ). + + + + To support matching of rows which include elements without a default + B-tree operator class, the following operators are defined for composite + type comparison: + *=, + *<>, + *<, + *<=, + *>, and + *>=. + These operators compare the internal binary representation of the two + rows. Two rows might have a different binary representation even + though comparisons of the two rows with the equality operator is true. + The ordering of rows under these comparison operators is deterministic + but not otherwise meaningful. These operators are used internally + for materialized views and might be useful for other specialized + purposes such as replication and B-Tree deduplication (see ). They are not intended to be + generally useful for writing queries, though. + + + diff --git a/doc/src/sgml/func/func-conditional.sgml b/doc/src/sgml/func/func-conditional.sgml new file mode 100644 index 0000000000000..7ca53dbf1ab03 --- /dev/null +++ b/doc/src/sgml/func/func-conditional.sgml @@ -0,0 +1,283 @@ + + Conditional Expressions + + + CASE + + + + conditional expression + + + + This section describes the SQL-compliant conditional expressions + available in PostgreSQL. + + + + + If your needs go beyond the capabilities of these conditional + expressions, you might want to consider writing a server-side function + in a more expressive programming language. + + + + + + Although COALESCE, GREATEST, and + LEAST are syntactically similar to functions, they are + not ordinary functions, and thus cannot be used with explicit + VARIADIC array arguments. + + + + + <literal>CASE</literal> + + + The SQL CASE expression is a + generic conditional expression, similar to if/else statements in + other programming languages: + + +CASE WHEN condition THEN result + WHEN ... + ELSE result +END + + + CASE clauses can be used wherever + an expression is valid. Each condition is an + expression that returns a boolean result. If the condition's + result is true, the value of the CASE expression is the + result that follows the condition, and the + remainder of the CASE expression is not processed. If the + condition's result is not true, any subsequent WHEN clauses + are examined in the same manner. If no WHEN + condition yields true, the value of the + CASE expression is the result of the + ELSE clause. If the ELSE clause is + omitted and no condition is true, the result is null. + + + + An example: + +SELECT * FROM test; + + a +--- + 1 + 2 + 3 + + +SELECT a, + CASE WHEN a=1 THEN 'one' + WHEN a=2 THEN 'two' + ELSE 'other' + END + FROM test; + + a | case +---+------- + 1 | one + 2 | two + 3 | other + + + + + The data types of all the result + expressions must be convertible to a single output type. + See for more details. + + + + There is a simple form of CASE expression + that is a variant of the general form above: + + +CASE expression + WHEN value THEN result + WHEN ... + ELSE result +END + + + The first + expression is computed, then compared to + each of the value expressions in the + WHEN clauses until one is found that is equal to it. If + no match is found, the result of the + ELSE clause (or a null value) is returned. This is similar + to the switch statement in C. + + + + The example above can be written using the simple + CASE syntax: + +SELECT a, + CASE a WHEN 1 THEN 'one' + WHEN 2 THEN 'two' + ELSE 'other' + END + FROM test; + + a | case +---+------- + 1 | one + 2 | two + 3 | other + + + + + A CASE expression does not evaluate any subexpressions + that are not needed to determine the result. For example, this is a + possible way of avoiding a division-by-zero failure: + +SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; + + + + + + As described in , there are various + situations in which subexpressions of an expression are evaluated at + different times, so that the principle that CASE + evaluates only necessary subexpressions is not ironclad. For + example a constant 1/0 subexpression will usually result in + a division-by-zero failure at planning time, even if it's within + a CASE arm that would never be entered at run time. + + + + + + <literal>COALESCE</literal> + + + COALESCE + + + + NVL + + + + IFNULL + + + +COALESCE(value , ...) + + + + The COALESCE function returns the first of its + arguments that is not null. Null is returned only if all arguments + are null. It is often used to substitute a default value for + null values when data is retrieved for display, for example: + +SELECT COALESCE(description, short_description, '(none)') ... + + This returns description if it is not null, otherwise + short_description if it is not null, otherwise (none). + + + + The arguments must all be convertible to a common data type, which + will be the type of the result (see + for details). + + + + Like a CASE expression, COALESCE only + evaluates the arguments that are needed to determine the result; + that is, arguments to the right of the first non-null argument are + not evaluated. This SQL-standard function provides capabilities similar + to NVL and IFNULL, which are used in some other + database systems. + + + + + <literal>NULLIF</literal> + + + NULLIF + + + +NULLIF(value1, value2) + + + + The NULLIF function returns a null value if + value1 equals value2; + otherwise it returns value1. + This can be used to perform the inverse operation of the + COALESCE example given above: + +SELECT NULLIF(value, '(none)') ... + + In this example, if value is (none), + null is returned, otherwise the value of value + is returned. + + + + The two arguments must be of comparable types. + To be specific, they are compared exactly as if you had + written value1 + = value2, so there must be a + suitable = operator available. + + + + The result has the same type as the first argument — but there is + a subtlety. What is actually returned is the first argument of the + implied = operator, and in some cases that will have + been promoted to match the second argument's type. For + example, NULLIF(1, 2.2) yields numeric, + because there is no integer = + numeric operator, + only numeric = numeric. + + + + + + <literal>GREATEST</literal> and <literal>LEAST</literal> + + + GREATEST + + + LEAST + + + +GREATEST(value , ...) + + +LEAST(value , ...) + + + + The GREATEST and LEAST functions select the + largest or smallest value from a list of any number of expressions. + The expressions must all be convertible to a common data type, which + will be the type of the result + (see for details). + + + + NULL values in the argument list are ignored. The result will be NULL + only if all the expressions evaluate to NULL. (This is a deviation from + the SQL standard. According to the standard, the return value is NULL if + any argument is NULL. Some other databases behave this way.) + + + diff --git a/doc/src/sgml/func/func-datetime.sgml b/doc/src/sgml/func/func-datetime.sgml new file mode 100644 index 0000000000000..482fe45f42ebc --- /dev/null +++ b/doc/src/sgml/func/func-datetime.sgml @@ -0,0 +1,2200 @@ + + Date/Time Functions and Operators + + + shows the available + functions for date/time value processing, with details appearing in + the following subsections. illustrates the behaviors of + the basic arithmetic operators (+, + *, etc.). For formatting functions, refer to + . You should be familiar with + the background information on date/time data types from . + + + + In addition, the usual comparison operators shown in + are available for the + date/time types. Dates and timestamps (with or without time zone) are + all comparable, while times (with or without time zone) and intervals + can only be compared to other values of the same data type. When + comparing a timestamp without time zone to a timestamp with time zone, + the former value is assumed to be given in the time zone specified by + the configuration parameter, and is + rotated to UTC for comparison to the latter value (which is already + in UTC internally). Similarly, a date value is assumed to represent + midnight in the TimeZone zone when comparing it + to a timestamp. + + + + All the functions and operators described below that take time or timestamp + inputs actually come in two variants: one that takes time with time zone or timestamp + with time zone, and one that takes time without time zone or timestamp without time zone. + For brevity, these variants are not shown separately. Also, the + + and * operators come in commutative pairs (for + example both date + integer + and integer + date); we show + only one of each such pair. + + + + Date/Time Operators + + + + + + Operator + + + Description + + + Example(s) + + + + + + + + date + integer + date + + + Add a number of days to a date + + + date '2001-09-28' + 7 + 2001-10-05 + + + + + + date + interval + timestamp + + + Add an interval to a date + + + date '2001-09-28' + interval '1 hour' + 2001-09-28 01:00:00 + + + + + + date + time + timestamp + + + Add a time-of-day to a date + + + date '2001-09-28' + time '03:00' + 2001-09-28 03:00:00 + + + + + + interval + interval + interval + + + Add intervals + + + interval '1 day' + interval '1 hour' + 1 day 01:00:00 + + + + + + timestamp + interval + timestamp + + + Add an interval to a timestamp + + + timestamp '2001-09-28 01:00' + interval '23 hours' + 2001-09-29 00:00:00 + + + + + + time + interval + time + + + Add an interval to a time + + + time '01:00' + interval '3 hours' + 04:00:00 + + + + + + - interval + interval + + + Negate an interval + + + - interval '23 hours' + -23:00:00 + + + + + + date - date + integer + + + Subtract dates, producing the number of days elapsed + + + date '2001-10-01' - date '2001-09-28' + 3 + + + + + + date - integer + date + + + Subtract a number of days from a date + + + date '2001-10-01' - 7 + 2001-09-24 + + + + + + date - interval + timestamp + + + Subtract an interval from a date + + + date '2001-09-28' - interval '1 hour' + 2001-09-27 23:00:00 + + + + + + time - time + interval + + + Subtract times + + + time '05:00' - time '03:00' + 02:00:00 + + + + + + time - interval + time + + + Subtract an interval from a time + + + time '05:00' - interval '2 hours' + 03:00:00 + + + + + + timestamp - interval + timestamp + + + Subtract an interval from a timestamp + + + timestamp '2001-09-28 23:00' - interval '23 hours' + 2001-09-28 00:00:00 + + + + + + interval - interval + interval + + + Subtract intervals + + + interval '1 day' - interval '1 hour' + 1 day -01:00:00 + + + + + + timestamp - timestamp + interval + + + Subtract timestamps (converting 24-hour intervals into days, + similarly to justify_hours()) + + + timestamp '2001-09-29 03:00' - timestamp '2001-07-27 12:00' + 63 days 15:00:00 + + + + + + interval * double precision + interval + + + Multiply an interval by a scalar + + + interval '1 second' * 900 + 00:15:00 + + + interval '1 day' * 21 + 21 days + + + interval '1 hour' * 3.5 + 03:30:00 + + + + + + interval / double precision + interval + + + Divide an interval by a scalar + + + interval '1 hour' / 1.5 + 00:40:00 + + + + +
+ + + Date/Time Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + age + + age ( timestamp, timestamp ) + interval + + + Subtract arguments, producing a symbolic result that + uses years and months, rather than just days + + + age(timestamp '2001-04-10', timestamp '1957-06-13') + 43 years 9 mons 27 days + + + + + + age ( timestamp ) + interval + + + Subtract argument from current_date (at midnight) + + + age(timestamp '1957-06-13') + 62 years 6 mons 10 days + + + + + + + clock_timestamp + + clock_timestamp ( ) + timestamp with time zone + + + Current date and time (changes during statement execution); + see + + + clock_timestamp() + 2019-12-23 14:39:53.662522-05 + + + + + + + current_date + + current_date + date + + + Current date; see + + + current_date + 2019-12-23 + + + + + + + current_time + + current_time + time with time zone + + + Current time of day; see + + + current_time + 14:39:53.662522-05 + + + + + + current_time ( integer ) + time with time zone + + + Current time of day, with limited precision; + see + + + current_time(2) + 14:39:53.66-05 + + + + + + + current_timestamp + + current_timestamp + timestamp with time zone + + + Current date and time (start of current transaction); + see + + + current_timestamp + 2019-12-23 14:39:53.662522-05 + + + + + + current_timestamp ( integer ) + timestamp with time zone + + + Current date and time (start of current transaction), with limited precision; + see + + + current_timestamp(0) + 2019-12-23 14:39:53-05 + + + + + + + date_add + + date_add ( timestamp with time zone, interval , text ) + timestamp with time zone + + + Add an interval to a timestamp with time + zone, computing times of day and daylight-savings adjustments + according to the time zone named by the third argument, or the + current setting if that is omitted. + The form with two arguments is equivalent to the timestamp with + time zone + interval operator. + + + date_add('2021-10-31 00:00:00+02'::timestamptz, '1 day'::interval, 'Europe/Warsaw') + 2021-10-31 23:00:00+00 + + + + + + date_bin ( interval, timestamp, timestamp ) + timestamp + + + Bin input into specified interval aligned with specified origin; see + + + date_bin('15 minutes', timestamp '2001-02-16 20:38:40', timestamp '2001-02-16 20:05:00') + 2001-02-16 20:35:00 + + + + + + + date_part + + date_part ( text, timestamp ) + double precision + + + Get timestamp subfield (equivalent to extract); + see + + + date_part('hour', timestamp '2001-02-16 20:38:40') + 20 + + + + + + date_part ( text, interval ) + double precision + + + Get interval subfield (equivalent to extract); + see + + + date_part('month', interval '2 years 3 months') + 3 + + + + + + + date_subtract + + date_subtract ( timestamp with time zone, interval , text ) + timestamp with time zone + + + Subtract an interval from a timestamp with time + zone, computing times of day and daylight-savings adjustments + according to the time zone named by the third argument, or the + current setting if that is omitted. + The form with two arguments is equivalent to the timestamp with + time zone - interval operator. + + + date_subtract('2021-11-01 00:00:00+01'::timestamptz, '1 day'::interval, 'Europe/Warsaw') + 2021-10-30 22:00:00+00 + + + + + + + date_trunc + + date_trunc ( text, timestamp ) + timestamp + + + Truncate to specified precision; see + + + date_trunc('hour', timestamp '2001-02-16 20:38:40') + 2001-02-16 20:00:00 + + + + + + date_trunc ( text, timestamp with time zone, text ) + timestamp with time zone + + + Truncate to specified precision in the specified time zone; see + + + + date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney') + 2001-02-16 13:00:00+00 + + + + + + date_trunc ( text, interval ) + interval + + + Truncate to specified precision; see + + + + date_trunc('hour', interval '2 days 3 hours 40 minutes') + 2 days 03:00:00 + + + + + + + extract + + extract ( field from timestamp ) + numeric + + + Get timestamp subfield; see + + + extract(hour from timestamp '2001-02-16 20:38:40') + 20 + + + + + + extract ( field from interval ) + numeric + + + Get interval subfield; see + + + extract(month from interval '2 years 3 months') + 3 + + + + + + + isfinite + + isfinite ( date ) + boolean + + + Test for finite date (not +/-infinity) + + + isfinite(date '2001-02-16') + true + + + + + + isfinite ( timestamp ) + boolean + + + Test for finite timestamp (not +/-infinity) + + + isfinite(timestamp 'infinity') + false + + + + + + isfinite ( interval ) + boolean + + + Test for finite interval (not +/-infinity) + + + isfinite(interval '4 hours') + true + + + + + + + justify_days + + justify_days ( interval ) + interval + + + Adjust interval, converting 30-day time periods to months + + + justify_days(interval '1 year 65 days') + 1 year 2 mons 5 days + + + + + + + justify_hours + + justify_hours ( interval ) + interval + + + Adjust interval, converting 24-hour time periods to days + + + justify_hours(interval '50 hours 10 minutes') + 2 days 02:10:00 + + + + + + + justify_interval + + justify_interval ( interval ) + interval + + + Adjust interval using justify_days + and justify_hours, with additional sign + adjustments + + + justify_interval(interval '1 mon -1 hour') + 29 days 23:00:00 + + + + + + + localtime + + localtime + time + + + Current time of day; + see + + + localtime + 14:39:53.662522 + + + + + + localtime ( integer ) + time + + + Current time of day, with limited precision; + see + + + localtime(0) + 14:39:53 + + + + + + + localtimestamp + + localtimestamp + timestamp + + + Current date and time (start of current transaction); + see + + + localtimestamp + 2019-12-23 14:39:53.662522 + + + + + + localtimestamp ( integer ) + timestamp + + + Current date and time (start of current + transaction), with limited precision; + see + + + localtimestamp(2) + 2019-12-23 14:39:53.66 + + + + + + + make_date + + make_date ( year int, + month int, + day int ) + date + + + Create date from year, month and day fields + (negative years signify BC) + + + make_date(2013, 7, 15) + 2013-07-15 + + + + + + make_interval + + make_interval ( years int + , months int + , weeks int + , days int + , hours int + , mins int + , secs double precision + ) + interval + + + Create interval from years, months, weeks, days, hours, minutes and + seconds fields, each of which can default to zero + + + make_interval(days => 10) + 10 days + + + + + + + make_time + + make_time ( hour int, + min int, + sec double precision ) + time + + + Create time from hour, minute and seconds fields + + + make_time(8, 15, 23.5) + 08:15:23.5 + + + + + + + make_timestamp + + make_timestamp ( year int, + month int, + day int, + hour int, + min int, + sec double precision ) + timestamp + + + Create timestamp from year, month, day, hour, minute and seconds fields + (negative years signify BC) + + + make_timestamp(2013, 7, 15, 8, 15, 23.5) + 2013-07-15 08:15:23.5 + + + + + + + make_timestamptz + + make_timestamptz ( year int, + month int, + day int, + hour int, + min int, + sec double precision + , timezone text ) + timestamp with time zone + + + Create timestamp with time zone from year, month, day, hour, minute + and seconds fields (negative years signify BC). + If timezone is not + specified, the current time zone is used; the examples assume the + session time zone is Europe/London + + + make_timestamptz(2013, 7, 15, 8, 15, 23.5) + 2013-07-15 08:15:23.5+01 + + + make_timestamptz(2013, 7, 15, 8, 15, 23.5, 'America/New_York') + 2013-07-15 13:15:23.5+01 + + + + + + + now + + now ( ) + timestamp with time zone + + + Current date and time (start of current transaction); + see + + + now() + 2019-12-23 14:39:53.662522-05 + + + + + + + statement_timestamp + + statement_timestamp ( ) + timestamp with time zone + + + Current date and time (start of current statement); + see + + + statement_timestamp() + 2019-12-23 14:39:53.662522-05 + + + + + + + timeofday + + timeofday ( ) + text + + + Current date and time + (like clock_timestamp, but as a text string); + see + + + timeofday() + Mon Dec 23 14:39:53.662522 2019 EST + + + + + + + transaction_timestamp + + transaction_timestamp ( ) + timestamp with time zone + + + Current date and time (start of current transaction); + see + + + transaction_timestamp() + 2019-12-23 14:39:53.662522-05 + + + + + + + to_timestamp + + to_timestamp ( double precision ) + timestamp with time zone + + + Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to + timestamp with time zone + + + to_timestamp(1284352323) + 2010-09-13 04:32:03+00 + + + + +
+ + + + OVERLAPS + + In addition to these functions, the SQL OVERLAPS operator is + supported: + +(start1, end1) OVERLAPS (start2, end2) +(start1, length1) OVERLAPS (start2, length2) + + This expression yields true when two time periods (defined by their + endpoints) overlap, false when they do not overlap. The endpoints + can be specified as pairs of dates, times, or time stamps; or as + a date, time, or time stamp followed by an interval. When a pair + of values is provided, either the start or the end can be written + first; OVERLAPS automatically takes the earlier value + of the pair as the start. Each time period is considered to + represent the half-open interval start <= + time < end, unless + start and end are equal in which case it + represents that single time instant. This means for instance that two + time periods with only an endpoint in common do not overlap. + + + +SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS + (DATE '2001-10-30', DATE '2002-10-30'); +Result: true +SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS + (DATE '2001-10-30', DATE '2002-10-30'); +Result: false +SELECT (DATE '2001-10-29', DATE '2001-10-30') OVERLAPS + (DATE '2001-10-30', DATE '2001-10-31'); +Result: false +SELECT (DATE '2001-10-30', DATE '2001-10-30') OVERLAPS + (DATE '2001-10-30', DATE '2001-10-31'); +Result: true + + + + When adding an interval value to (or subtracting an + interval value from) a timestamp + or timestamp with time zone value, the months, days, and + microseconds fields of the interval value are handled in turn. + First, a nonzero months field advances or decrements the date of the + timestamp by the indicated number of months, keeping the day of month the + same unless it would be past the end of the new month, in which case the + last day of that month is used. (For example, March 31 plus 1 month + becomes April 30, but March 31 plus 2 months becomes May 31.) + Then the days field advances or decrements the date of the timestamp by + the indicated number of days. In both these steps the local time of day + is kept the same. Finally, if there is a nonzero microseconds field, it + is added or subtracted literally. + When doing arithmetic on a timestamp with time zone value in + a time zone that recognizes DST, this means that adding or subtracting + (say) interval '1 day' does not necessarily have the + same result as adding or subtracting interval '24 + hours'. + For example, with the session time zone set + to America/Denver: + +SELECT timestamp with time zone '2005-04-02 12:00:00-07' + interval '1 day'; +Result: 2005-04-03 12:00:00-06 +SELECT timestamp with time zone '2005-04-02 12:00:00-07' + interval '24 hours'; +Result: 2005-04-03 13:00:00-06 + + This happens because an hour was skipped due to a change in daylight saving + time at 2005-04-03 02:00:00 in time zone + America/Denver. + + + + Note there can be ambiguity in the months field returned by + age because different months have different numbers of + days. PostgreSQL's approach uses the month from the + earlier of the two dates when calculating partial months. For example, + age('2004-06-01', '2004-04-30') uses April to yield + 1 mon 1 day, while using May would yield 1 mon 2 + days because May has 31 days, while April has only 30. + + + + Subtraction of dates and timestamps can also be complex. One conceptually + simple way to perform subtraction is to convert each value to a number + of seconds using EXTRACT(EPOCH FROM ...), then subtract the + results; this produces the + number of seconds between the two values. This will adjust + for the number of days in each month, timezone changes, and daylight + saving time adjustments. Subtraction of date or timestamp + values with the - operator + returns the number of days (24-hours) and hours/minutes/seconds + between the values, making the same adjustments. The age + function returns years, months, days, and hours/minutes/seconds, + performing field-by-field subtraction and then adjusting for negative + field values. The following queries illustrate the differences in these + approaches. The sample results were produced with timezone + = 'US/Eastern'; there is a daylight saving time change between the + two dates used: + + + +SELECT EXTRACT(EPOCH FROM timestamptz '2013-07-01 12:00:00') - + EXTRACT(EPOCH FROM timestamptz '2013-03-01 12:00:00'); +Result: 10537200.000000 +SELECT (EXTRACT(EPOCH FROM timestamptz '2013-07-01 12:00:00') - + EXTRACT(EPOCH FROM timestamptz '2013-03-01 12:00:00')) + / 60 / 60 / 24; +Result: 121.9583333333333333 +SELECT timestamptz '2013-07-01 12:00:00' - timestamptz '2013-03-01 12:00:00'; +Result: 121 days 23:00:00 +SELECT age(timestamptz '2013-07-01 12:00:00', timestamptz '2013-03-01 12:00:00'); +Result: 4 mons + + + + <function>EXTRACT</function>, <function>date_part</function> + + + date_part + + + extract + + + +EXTRACT(field FROM source) + + + + The extract function retrieves subfields + such as year or hour from date/time values. + source must be a value expression of + type timestamp, date, time, + or interval. (Timestamps and times can be with or + without time zone.) + field is an identifier or + string that selects what field to extract from the source value. + Not all fields are valid for every input data type; for example, fields + smaller than a day cannot be extracted from a date, while + fields of a day or more cannot be extracted from a time. + The extract function returns values of type + numeric. + + + + The following are valid field names: + + + + + century + + + The century; for interval values, the year field + divided by 100 + + + +SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); +Result: 20 +SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 21 +SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); +Result: 1 +SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); +Result: -1 +SELECT EXTRACT(CENTURY FROM INTERVAL '2001 years'); +Result: 20 + + + + + + day + + + The day of the month (1–31); for interval + values, the number of days + + + +SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 16 +SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); +Result: 40 + + + + + + + decade + + + The year field divided by 10 + + + +SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 200 + + + + + + dow + + + The day of the week as Sunday (0) to + Saturday (6) + + + +SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 5 + + + Note that extract's day of the week numbering + differs from that of the to_char(..., + 'D') function. + + + + + + + doy + + + The day of the year (1–365/366) + + + +SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 47 + + + + + + epoch + + + For timestamp with time zone values, the + number of seconds since 1970-01-01 00:00:00 UTC (negative for + timestamps before that); + for date and timestamp values, the + nominal number of seconds since 1970-01-01 00:00:00, + without regard to timezone or daylight-savings rules; + for interval values, the total number + of seconds in the interval + + + +SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); +Result: 982384720.120000 +SELECT EXTRACT(EPOCH FROM TIMESTAMP '2001-02-16 20:38:40.12'); +Result: 982355920.120000 +SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); +Result: 442800.000000 + + + + You can convert an epoch value back to a timestamp with time zone + with to_timestamp: + + +SELECT to_timestamp(982384720.12); +Result: 2001-02-17 04:38:40.12+00 + + + + Beware that applying to_timestamp to an epoch + extracted from a date or timestamp value + could produce a misleading result: the result will effectively + assume that the original value had been given in UTC, which might + not be the case. + + + + + + hour + + + The hour field (0–23 in timestamps, unrestricted in + intervals) + + + +SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 20 + + + + + + isodow + + + The day of the week as Monday (1) to + Sunday (7) + + + +SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); +Result: 7 + + + This is identical to dow except for Sunday. This + matches the ISO 8601 day of the week numbering. + + + + + + + isoyear + + + The ISO 8601 week-numbering year that the date + falls in + + + +SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); +Result: 2005 +SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); +Result: 2006 + + + + Each ISO 8601 week-numbering year begins with the + Monday of the week containing the 4th of January, so in early + January or late December the ISO year may be + different from the Gregorian year. See the week + field for more information. + + + + + + julian + + + The Julian Date corresponding to the + date or timestamp. Timestamps + that are not local midnight result in a fractional value. See + for more information. + + + +SELECT EXTRACT(JULIAN FROM DATE '2006-01-01'); +Result: 2453737 +SELECT EXTRACT(JULIAN FROM TIMESTAMP '2006-01-01 12:00'); +Result: 2453737.50000000000000000000 + + + + + + microseconds + + + The seconds field, including fractional parts, multiplied by 1 + 000 000; note that this includes full seconds + + + +SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); +Result: 28500000 + + + + + + millennium + + + The millennium; for interval values, the year field + divided by 1000 + + + +SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 3 +SELECT EXTRACT(MILLENNIUM FROM INTERVAL '2001 years'); +Result: 2 + + + + Years in the 1900s are in the second millennium. + The third millennium started January 1, 2001. + + + + + + milliseconds + + + The seconds field, including fractional parts, multiplied by + 1000. Note that this includes full seconds. + + + +SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); +Result: 28500.000 + + + + + + minute + + + The minutes field (0–59) + + + +SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 38 + + + + + + month + + + The number of the month within the year (1–12); + for interval values, the number of months modulo 12 + (0–11) + + + +SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 2 +SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months'); +Result: 3 +SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); +Result: 1 + + + + + + quarter + + + The quarter of the year (1–4) that the date is in; + for interval values, the month field divided by 3 + plus 1 + + + +SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 1 +SELECT EXTRACT(QUARTER FROM INTERVAL '1 year 6 months'); +Result: 3 + + + + + + second + + + The seconds field, including any fractional seconds + + + +SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 40.000000 +SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); +Result: 28.500000 + + + + + timezone + + + The time zone offset from UTC, measured in seconds. Positive values + correspond to time zones east of UTC, negative values to + zones west of UTC. (Technically, + PostgreSQL does not use UTC because + leap seconds are not handled.) + + + + + + timezone_hour + + + The hour component of the time zone offset + + + + + + timezone_minute + + + The minute component of the time zone offset + + + + + + week + + + The number of the ISO 8601 week-numbering week of + the year. By definition, ISO weeks start on Mondays and the first + week of a year contains January 4 of that year. In other words, the + first Thursday of a year is in week 1 of that year. + + + In the ISO week-numbering system, it is possible for early-January + dates to be part of the 52nd or 53rd week of the previous year, and for + late-December dates to be part of the first week of the next year. + For example, 2005-01-01 is part of the 53rd week of year + 2004, and 2006-01-01 is part of the 52nd week of year + 2005, while 2012-12-31 is part of the first week of 2013. + It's recommended to use the isoyear field together with + week to get consistent results. + + + + For interval values, the week field is simply the number + of integral days divided by 7. + + + +SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 7 +SELECT EXTRACT(WEEK FROM INTERVAL '13 days 24 hours'); +Result: 1 + + + + + + year + + + The year field. Keep in mind there is no 0 AD, so subtracting + BC years from AD years should be done with care. + + + +SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); +Result: 2001 + + + + + + + + + When processing an interval value, + the extract function produces field values that + match the interpretation used by the interval output function. This + can produce surprising results if one starts with a non-normalized + interval representation, for example: + +SELECT INTERVAL '80 minutes'; +Result: 01:20:00 +SELECT EXTRACT(MINUTES FROM INTERVAL '80 minutes'); +Result: 20 + + + + + + When the input value is +/-Infinity, extract returns + +/-Infinity for monotonically-increasing fields (epoch, + julian, year, isoyear, + decade, century, and millennium + for timestamp inputs; epoch, hour, + day, year, decade, + century, and millennium for + interval inputs). + For other fields, NULL is returned. PostgreSQL + versions before 9.6 returned zero for all cases of infinite input. + + + + + The extract function is primarily intended + for computational processing. For formatting date/time values for + display, see . + + + + The date_part function is modeled on the traditional + Ingres equivalent to the + SQL-standard function extract: + +date_part('field', source) + + Note that here the field parameter needs to + be a string value, not a name. The valid field names for + date_part are the same as for + extract. + For historical reasons, the date_part function + returns values of type double precision. This can result in + a loss of precision in certain uses. Using extract + is recommended instead. + + + +SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); +Result: 16 +SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); +Result: 4 + + + + + + <function>date_trunc</function> + + + date_trunc + + + + The function date_trunc is conceptually + similar to the trunc function for numbers. + + + + +date_trunc(field, source , time_zone ) + + source is a value expression of type + timestamp, timestamp with time zone, + or interval. + (Values of type date and + time are cast automatically to timestamp or + interval, respectively.) + field selects to which precision to + truncate the input value. The return value is likewise of type + timestamp, timestamp with time zone, + or interval, + and it has all fields that are less significant than the + selected one set to zero (or one, for day and month). + + + + Valid values for field are: + + microseconds + milliseconds + second + minute + hour + day + week + month + quarter + year + decade + century + millennium + + + + + When the input value is of type timestamp with time zone, + the truncation is performed with respect to a particular time zone; + for example, truncation to day produces a value that + is midnight in that zone. By default, truncation is done with respect + to the current setting, but the + optional time_zone argument can be provided + to specify a different time zone. The time zone name can be specified + in any of the ways described in . + + + + A time zone cannot be specified when processing timestamp without + time zone or interval inputs. These are always + taken at face value. + + + + Examples (assuming the local time zone is America/New_York): + +SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); +Result: 2001-02-16 20:00:00 +SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); +Result: 2001-01-01 00:00:00 +SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00'); +Result: 2001-02-16 00:00:00-05 +SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00', 'Australia/Sydney'); +Result: 2001-02-16 08:00:00-05 +SELECT date_trunc('hour', INTERVAL '3 days 02:47:33'); +Result: 3 days 02:00:00 + + + + + + <function>date_bin</function> + + + date_bin + + + + The function date_bin bins the input + timestamp into the specified interval (the stride) + aligned with a specified origin. + + + + +date_bin(stride, source, origin) + + source is a value expression of type + timestamp or timestamp with time zone. (Values + of type date are cast automatically to + timestamp.) stride is a value + expression of type interval. The return value is likewise + of type timestamp or timestamp with time zone, + and it marks the beginning of the bin into which the + source is placed. + + + + Examples: + +SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); +Result: 2020-02-11 15:30:00 +SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01 00:02:30'); +Result: 2020-02-11 15:32:30 + + + + + In the case of full units (1 minute, 1 hour, etc.), it gives the same result as + the analogous date_trunc call, but the difference is + that date_bin can truncate to an arbitrary interval. + + + + The stride interval must be greater than zero and + cannot contain units of month or larger. + + + + + <literal>AT TIME ZONE</literal> and <literal>AT LOCAL</literal> + + + time zone + conversion + + + + AT TIME ZONE + + + + AT LOCAL + + + + The AT TIME ZONE operator converts time + stamp without time zone to/from + time stamp with time zone, and + time with time zone values to different time + zones. shows its + variants. + + + + <literal>AT TIME ZONE</literal> and <literal>AT LOCAL</literal> Variants + + + + + Operator + + + Description + + + Example(s) + + + + + + + + timestamp without time zone AT TIME ZONE zone + timestamp with time zone + + + Converts given time stamp without time zone to + time stamp with time zone, assuming the given + value is in the named time zone. + + + timestamp '2001-02-16 20:38:40' at time zone 'America/Denver' + 2001-02-17 03:38:40+00 + + + + + + timestamp without time zone AT LOCAL + timestamp with time zone + + + Converts given time stamp without time zone to + time stamp with the session's + TimeZone value as time zone. + + + timestamp '2001-02-16 20:38:40' at local + 2001-02-17 03:38:40+00 + + + + + + timestamp with time zone AT TIME ZONE zone + timestamp without time zone + + + Converts given time stamp with time zone to + time stamp without time zone, as the time would + appear in that zone. + + + timestamp with time zone '2001-02-16 20:38:40-05' at time zone 'America/Denver' + 2001-02-16 18:38:40 + + + + + + timestamp with time zone AT LOCAL + timestamp without time zone + + + Converts given time stamp with time zone to + time stamp without time zone, as the time would + appear with the session's TimeZone value as time zone. + + + timestamp with time zone '2001-02-16 20:38:40-05' at local + 2001-02-16 18:38:40 + + + + + + time with time zone AT TIME ZONE zone + time with time zone + + + Converts given time with time zone to a new time + zone. Since no date is supplied, this uses the currently active UTC + offset for the named destination zone. + + + time with time zone '05:34:17-05' at time zone 'UTC' + 10:34:17+00 + + + + + + time with time zone AT LOCAL + time with time zone + + + Converts given time with time zone to a new time + zone. Since no date is supplied, this uses the currently active UTC + offset for the session's TimeZone value. + + + Assuming the session's TimeZone is set to UTC: + + + time with time zone '05:34:17-05' at local + 10:34:17+00 + + + + +
+ + + In these expressions, the desired time zone zone can be + specified either as a text value (e.g., 'America/Los_Angeles') + or as an interval (e.g., INTERVAL '-08:00'). + In the text case, a time zone name can be specified in any of the ways + described in . + The interval case is only useful for zones that have fixed offsets from + UTC, so it is not very common in practice. + + + + The syntax AT LOCAL may be used as shorthand for + AT TIME ZONE local, where + local is the session's + TimeZone value. + + + + Examples (assuming the current setting + is America/Los_Angeles): + +SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'America/Denver'; +Result: 2001-02-16 19:38:40-08 +SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'America/Denver'; +Result: 2001-02-16 18:38:40 +SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'Asia/Tokyo' AT TIME ZONE 'America/Chicago'; +Result: 2001-02-16 05:38:40 +SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT LOCAL; +Result: 2001-02-16 17:38:40 +SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '+05'; +Result: 2001-02-16 20:38:40 +SELECT TIME WITH TIME ZONE '20:38:40-05' AT LOCAL; +Result: 17:38:40 + + The first example adds a time zone to a value that lacks it, and + displays the value using the current TimeZone + setting. The second example shifts the time stamp with time zone value + to the specified time zone, and returns the value without a time zone. + This allows storage and display of values different from the current + TimeZone setting. The third example converts + Tokyo time to Chicago time. The fourth example shifts the time stamp + with time zone value to the time zone currently specified by the + TimeZone setting and returns the value without a + time zone. The fifth example demonstrates that the sign in a POSIX-style + time zone specification has the opposite meaning of the sign in an + ISO-8601 datetime literal, as described in + and . + + + + The sixth example is a cautionary tale. Due to the fact that there is no + date associated with the input value, the conversion is made using the + current date of the session. Therefore, this static example may show a wrong + result depending on the time of the year it is viewed because + 'America/Los_Angeles' observes Daylight Savings Time. + + + + The function timezone(zone, + timestamp) is equivalent to the SQL-conforming construct + timestamp AT TIME ZONE + zone. + + + + The function timezone(zone, + time) is equivalent to the SQL-conforming construct + time AT TIME ZONE + zone. + + + + The function timezone(timestamp) + is equivalent to the SQL-conforming construct timestamp + AT LOCAL. + + + + The function timezone(time) + is equivalent to the SQL-conforming construct time + AT LOCAL. + +
+ + + Current Date/Time + + + date + current + + + + time + current + + + + PostgreSQL provides a number of functions + that return values related to the current date and time. These + SQL-standard functions all return values based on the start time of + the current transaction: + +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_TIME(precision) +CURRENT_TIMESTAMP(precision) +LOCALTIME +LOCALTIMESTAMP +LOCALTIME(precision) +LOCALTIMESTAMP(precision) + + + + + CURRENT_TIME and + CURRENT_TIMESTAMP deliver values with time zone; + LOCALTIME and + LOCALTIMESTAMP deliver values without time zone. + + + + CURRENT_TIME, + CURRENT_TIMESTAMP, + LOCALTIME, and + LOCALTIMESTAMP + can optionally take + a precision parameter, which causes the result to be rounded + to that many fractional digits in the seconds field. Without a precision parameter, + the result is given to the full available precision. + + + + Some examples: + +SELECT CURRENT_TIME; +Result: 14:39:53.662522-05 +SELECT CURRENT_DATE; +Result: 2019-12-23 +SELECT CURRENT_TIMESTAMP; +Result: 2019-12-23 14:39:53.662522-05 +SELECT CURRENT_TIMESTAMP(2); +Result: 2019-12-23 14:39:53.66-05 +SELECT LOCALTIMESTAMP; +Result: 2019-12-23 14:39:53.662522 + + + + + Since these functions return + the start time of the current transaction, their values do not + change during the transaction. This is considered a feature: + the intent is to allow a single transaction to have a consistent + notion of the current time, so that multiple + modifications within the same transaction bear the same + time stamp. + + + + + Other database systems might advance these values more + frequently. + + + + + PostgreSQL also provides functions that + return the start time of the current statement, as well as the actual + current time at the instant the function is called. The complete list + of non-SQL-standard time functions is: + +transaction_timestamp() +statement_timestamp() +clock_timestamp() +timeofday() +now() + + + + + transaction_timestamp() is equivalent to + CURRENT_TIMESTAMP, but is named to clearly reflect + what it returns. + statement_timestamp() returns the start time of the current + statement (more specifically, the time of receipt of the latest command + message from the client). + statement_timestamp() and transaction_timestamp() + return the same value during the first statement of a transaction, but might + differ during subsequent statements. + clock_timestamp() returns the actual current time, and + therefore its value changes even within a single SQL statement. + timeofday() is a historical + PostgreSQL function. Like + clock_timestamp(), it returns the actual current time, + but as a formatted text string rather than a timestamp + with time zone value. + now() is a traditional PostgreSQL + equivalent to transaction_timestamp(). + + + + All the date/time data types also accept the special literal value + now to specify the current date and time (again, + interpreted as the transaction start time). Thus, + the following three all return the same result: + +SELECT CURRENT_TIMESTAMP; +SELECT now(); +SELECT TIMESTAMP 'now'; -- but see tip below + + + + + + Do not use the third form when specifying a value to be evaluated later, + for example in a DEFAULT clause for a table column. + The system will convert now + to a timestamp as soon as the constant is parsed, so that when + the default value is needed, + the time of the table creation would be used! The first two + forms will not be evaluated until the default value is used, + because they are function calls. Thus they will give the desired + behavior of defaulting to the time of row insertion. + (See also .) + + + + + + Delaying Execution + + + pg_sleep + + + pg_sleep_for + + + pg_sleep_until + + + sleep + + + delay + + + + The following functions are available to delay execution of the server + process: + +pg_sleep ( double precision ) +pg_sleep_for ( interval ) +pg_sleep_until ( timestamp with time zone ) + + + pg_sleep makes the current session's process + sleep until the given number of seconds have + elapsed. Fractional-second delays can be specified. + pg_sleep_for is a convenience function to + allow the sleep time to be specified as an interval. + pg_sleep_until is a convenience function for when + a specific wake-up time is desired. + For example: + + +SELECT pg_sleep(1.5); +SELECT pg_sleep_for('5 minutes'); +SELECT pg_sleep_until('tomorrow 03:00'); + + + + + + The effective resolution of the sleep interval is platform-specific; + 0.01 seconds is a common value. The sleep delay will be at least as long + as specified. It might be longer depending on factors such as server load. + In particular, pg_sleep_until is not guaranteed to + wake up exactly at the specified time, but it will not wake up any earlier. + + + + + + Make sure that your session does not hold more locks than necessary + when calling pg_sleep or its variants. Otherwise + other sessions might have to wait for your sleeping process, slowing down + the entire system. + + + + +
diff --git a/doc/src/sgml/func/func-enum.sgml b/doc/src/sgml/func/func-enum.sgml new file mode 100644 index 0000000000000..6227afe4057ba --- /dev/null +++ b/doc/src/sgml/func/func-enum.sgml @@ -0,0 +1,121 @@ + + Enum Support Functions + + + For enum types (described in ), + there are several functions that allow cleaner programming without + hard-coding particular values of an enum type. + These are listed in . The examples + assume an enum type created as: + + +CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple'); + + + + + + Enum Support Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + enum_first + + enum_first ( anyenum ) + anyenum + + + Returns the first value of the input enum type. + + + enum_first(null::rainbow) + red + + + + + + enum_last + + enum_last ( anyenum ) + anyenum + + + Returns the last value of the input enum type. + + + enum_last(null::rainbow) + purple + + + + + + enum_range + + enum_range ( anyenum ) + anyarray + + + Returns all values of the input enum type in an ordered array. + + + enum_range(null::rainbow) + {red,orange,yellow,&zwsp;green,blue,purple} + + + + + enum_range ( anyenum, anyenum ) + anyarray + + + Returns the range between the two given enum values, as an ordered + array. The values must be from the same enum type. If the first + parameter is null, the result will start with the first value of + the enum type. + If the second parameter is null, the result will end with the last + value of the enum type. + + + enum_range('orange'::rainbow, 'green'::rainbow) + {orange,yellow,green} + + + enum_range(NULL, 'green'::rainbow) + {red,orange,&zwsp;yellow,green} + + + enum_range('orange'::rainbow, NULL) + {orange,yellow,green,&zwsp;blue,purple} + + + + +
+ + + Notice that except for the two-argument form of enum_range, + these functions disregard the specific value passed to them; they care + only about its declared data type. Either null or a specific value of + the type can be passed, with the same result. It is more common to + apply these functions to a table column or function argument than to + a hardwired type name as used in the examples. + +
diff --git a/doc/src/sgml/func/func-event-triggers.sgml b/doc/src/sgml/func/func-event-triggers.sgml new file mode 100644 index 0000000000000..9f3f51e9f5133 --- /dev/null +++ b/doc/src/sgml/func/func-event-triggers.sgml @@ -0,0 +1,332 @@ + + Event Trigger Functions + + + PostgreSQL provides these helper functions + to retrieve information from event triggers. + + + + For more information about event triggers, + see . + + + + Capturing Changes at Command End + + + pg_event_trigger_ddl_commands + + + +pg_event_trigger_ddl_commands () setof record + + + + pg_event_trigger_ddl_commands returns a list of + DDL commands executed by each user action, + when invoked in a function attached to a + ddl_command_end event trigger. If called in any other + context, an error is raised. + pg_event_trigger_ddl_commands returns one row for each + base command executed; some commands that are a single SQL sentence + may return more than one row. This function returns the following + columns: + + + + + + Name + Type + Description + + + + + + classid + oid + OID of catalog the object belongs in + + + objid + oid + OID of the object itself + + + objsubid + integer + Sub-object ID (e.g., attribute number for a column) + + + command_tag + text + Command tag + + + object_type + text + Type of the object + + + schema_name + text + + Name of the schema the object belongs in, if any; otherwise NULL. + No quoting is applied. + + + + object_identity + text + + Text rendering of the object identity, schema-qualified. Each + identifier included in the identity is quoted if necessary. + + + + in_extension + boolean + True if the command is part of an extension script + + + command + pg_ddl_command + + A complete representation of the command, in internal format. + This cannot be output directly, but it can be passed to other + functions to obtain different pieces of information about the + command. + + + + + + + + + + Processing Objects Dropped by a DDL Command + + + pg_event_trigger_dropped_objects + + + +pg_event_trigger_dropped_objects () setof record + + + + pg_event_trigger_dropped_objects returns a list of all objects + dropped by the command in whose sql_drop event it is called. + If called in any other context, an error is raised. + This function returns the following columns: + + + + + + Name + Type + Description + + + + + + classid + oid + OID of catalog the object belonged in + + + objid + oid + OID of the object itself + + + objsubid + integer + Sub-object ID (e.g., attribute number for a column) + + + original + boolean + True if this was one of the root object(s) of the deletion + + + normal + boolean + + True if there was a normal dependency relationship + in the dependency graph leading to this object + + + + is_temporary + boolean + + True if this was a temporary object + + + + object_type + text + Type of the object + + + schema_name + text + + Name of the schema the object belonged in, if any; otherwise NULL. + No quoting is applied. + + + + object_name + text + + Name of the object, if the combination of schema and name can be + used as a unique identifier for the object; otherwise NULL. + No quoting is applied, and name is never schema-qualified. + + + + object_identity + text + + Text rendering of the object identity, schema-qualified. Each + identifier included in the identity is quoted if necessary. + + + + address_names + text[] + + An array that, together with object_type and + address_args, can be used by + the pg_get_object_address function to + recreate the object address in a remote server containing an + identically named object of the same kind. + + + + address_args + text[] + + Complement for address_names + + + + + + + + + The pg_event_trigger_dropped_objects function can be used + in an event trigger like this: + +CREATE FUNCTION test_event_trigger_for_drops() + RETURNS event_trigger LANGUAGE plpgsql AS $$ +DECLARE + obj record; +BEGIN + FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() + LOOP + RAISE NOTICE '% dropped object: % %.% %', + tg_tag, + obj.object_type, + obj.schema_name, + obj.object_name, + obj.object_identity; + END LOOP; +END; +$$; +CREATE EVENT TRIGGER test_event_trigger_for_drops + ON sql_drop + EXECUTE FUNCTION test_event_trigger_for_drops(); + + + + + + Handling a Table Rewrite Event + + + The functions shown in + + provide information about a table for which a + table_rewrite event has just been called. + If called in any other context, an error is raised. + + + + Table Rewrite Information Functions + + + + + Function + + + Description + + + + + + + + + pg_event_trigger_table_rewrite_oid + + pg_event_trigger_table_rewrite_oid () + oid + + + Returns the OID of the table about to be rewritten. + + + + + + + pg_event_trigger_table_rewrite_reason + + pg_event_trigger_table_rewrite_reason () + integer + + + Returns a code explaining the reason(s) for rewriting. The value is + a bitmap built from the following values: 1 + (the table has changed its persistence), 2 + (default value of a column has changed), 4 + (a column has a new data type) and 8 + (the table access method has changed). + + + + +
+ + + These functions can be used in an event trigger like this: + +CREATE FUNCTION test_event_trigger_table_rewrite_oid() + RETURNS event_trigger + LANGUAGE plpgsql AS +$$ +BEGIN + RAISE NOTICE 'rewriting table % for reason %', + pg_event_trigger_table_rewrite_oid()::regclass, + pg_event_trigger_table_rewrite_reason(); +END; +$$; + +CREATE EVENT TRIGGER test_table_rewrite_oid + ON table_rewrite + EXECUTE FUNCTION test_event_trigger_table_rewrite_oid(); + + +
+
diff --git a/doc/src/sgml/func/func-formatting.sgml b/doc/src/sgml/func/func-formatting.sgml new file mode 100644 index 0000000000000..df05e5c167691 --- /dev/null +++ b/doc/src/sgml/func/func-formatting.sgml @@ -0,0 +1,1197 @@ + + Data Type Formatting Functions + + + formatting + + + + The PostgreSQL formatting functions + provide a powerful set of tools for converting various data types + (date/time, integer, floating point, numeric) to formatted strings + and for converting from formatted strings to specific data types. + lists them. + These functions all follow a common calling convention: the first + argument is the value to be formatted and the second argument is a + template that defines the output or input format. + + + + Formatting Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + to_char + + to_char ( timestamp, text ) + text + + + to_char ( timestamp with time zone, text ) + text + + + Converts time stamp to string according to the given format. + + + to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') + 05:31:12 + + + + + + to_char ( interval, text ) + text + + + Converts interval to string according to the given format. + + + to_char(interval '15h 2m 12s', 'HH24:MI:SS') + 15:02:12 + + + + + + to_char ( numeric_type, text ) + text + + + Converts number to string according to the given format; available + for integer, bigint, numeric, + real, double precision. + + + to_char(125, '999') + 125 + + + to_char(125.8::real, '999D9') + 125.8 + + + to_char(-125.8, '999D99S') + 125.80- + + + + + + + to_date + + to_date ( text, text ) + date + + + Converts string to date according to the given format. + + + to_date('05 Dec 2000', 'DD Mon YYYY') + 2000-12-05 + + + + + + + to_number + + to_number ( text, text ) + numeric + + + Converts string to numeric according to the given format. + + + to_number('12,454.8-', '99G999D9S') + -12454.8 + + + + + + + to_timestamp + + to_timestamp ( text, text ) + timestamp with time zone + + + Converts string to time stamp according to the given format. + (See also to_timestamp(double precision) in + .) + + + to_timestamp('05 Dec 2000', 'DD Mon YYYY') + 2000-12-05 00:00:00-05 + + + + +
+ + + + to_timestamp and to_date + exist to handle input formats that cannot be converted by + simple casting. For most standard date/time formats, simply casting the + source string to the required data type works, and is much easier. + Similarly, to_number is unnecessary for standard numeric + representations. + + + + + In a to_char output template string, there are certain + patterns that are recognized and replaced with appropriately-formatted + data based on the given value. Any text that is not a template pattern is + simply copied verbatim. Similarly, in an input template string (for the + other functions), template patterns identify the values to be supplied by + the input data string. If there are characters in the template string + that are not template patterns, the corresponding characters in the input + data string are simply skipped over (whether or not they are equal to the + template string characters). + + + + shows the + template patterns available for formatting date and time values. + + + + Template Patterns for Date/Time Formatting + + + + + + Pattern + Description + + + + + HH + hour of day (01–12) + + + HH12 + hour of day (01–12) + + + HH24 + hour of day (00–23) + + + MI + minute (00–59) + + + SS + second (00–59) + + + MS + millisecond (000–999) + + + US + microsecond (000000–999999) + + + FF1 + tenth of second (0–9) + + + FF2 + hundredth of second (00–99) + + + FF3 + millisecond (000–999) + + + FF4 + tenth of a millisecond (0000–9999) + + + FF5 + hundredth of a millisecond (00000–99999) + + + FF6 + microsecond (000000–999999) + + + SSSS, SSSSS + seconds past midnight (0–86399) + + + AM, am, + PM or pm + meridiem indicator (without periods) + + + A.M., a.m., + P.M. or p.m. + meridiem indicator (with periods) + + + Y,YYY + year (4 or more digits) with comma + + + YYYY + year (4 or more digits) + + + YYY + last 3 digits of year + + + YY + last 2 digits of year + + + Y + last digit of year + + + IYYY + ISO 8601 week-numbering year (4 or more digits) + + + IYY + last 3 digits of ISO 8601 week-numbering year + + + IY + last 2 digits of ISO 8601 week-numbering year + + + I + last digit of ISO 8601 week-numbering year + + + BC, bc, + AD or ad + era indicator (without periods) + + + B.C., b.c., + A.D. or a.d. + era indicator (with periods) + + + MONTH + full upper case month name (blank-padded to 9 chars) + + + Month + full capitalized month name (blank-padded to 9 chars) + + + month + full lower case month name (blank-padded to 9 chars) + + + MON + abbreviated upper case month name (3 chars in English, localized lengths vary) + + + Mon + abbreviated capitalized month name (3 chars in English, localized lengths vary) + + + mon + abbreviated lower case month name (3 chars in English, localized lengths vary) + + + MM + month number (01–12) + + + DAY + full upper case day name (blank-padded to 9 chars) + + + Day + full capitalized day name (blank-padded to 9 chars) + + + day + full lower case day name (blank-padded to 9 chars) + + + DY + abbreviated upper case day name (3 chars in English, localized lengths vary) + + + Dy + abbreviated capitalized day name (3 chars in English, localized lengths vary) + + + dy + abbreviated lower case day name (3 chars in English, localized lengths vary) + + + DDD + day of year (001–366) + + + IDDD + day of ISO 8601 week-numbering year (001–371; day 1 of the year is Monday of the first ISO week) + + + DD + day of month (01–31) + + + D + day of the week, Sunday (1) to Saturday (7) + + + ID + ISO 8601 day of the week, Monday (1) to Sunday (7) + + + W + week of month (1–5) (the first week starts on the first day of the month) + + + WW + week number of year (1–53) (the first week starts on the first day of the year) + + + IW + week number of ISO 8601 week-numbering year (01–53; the first Thursday of the year is in week 1) + + + CC + century (2 digits) (the twenty-first century starts on 2001-01-01) + + + J + Julian Date (integer days since November 24, 4714 BC at local + midnight; see ) + + + Q + quarter + + + RM + month in upper case Roman numerals (I–XII; I=January) + + + rm + month in lower case Roman numerals (i–xii; i=January) + + + TZ + upper case time-zone abbreviation + + + tz + lower case time-zone abbreviation + + + TZH + time-zone hours + + + TZM + time-zone minutes + + + OF + time-zone offset from UTC (HH + or HH:MM) + + + +
+ + + Modifiers can be applied to any template pattern to alter its + behavior. For example, FMMonth + is the Month pattern with the + FM modifier. + shows the + modifier patterns for date/time formatting. + + + + Template Pattern Modifiers for Date/Time Formatting + + + + Modifier + Description + Example + + + + + FM prefix + fill mode (suppress leading zeroes and padding blanks) + FMMonth + + + TH suffix + upper case ordinal number suffix + DDTH, e.g., 12TH + + + th suffix + lower case ordinal number suffix + DDth, e.g., 12th + + + FX prefix + fixed format global option (see usage notes) + FX Month DD Day + + + TM prefix + translation mode (use localized day and month names based on + ) + TMMonth + + + SP suffix + spell mode (not implemented) + DDSP + + + +
+ + + Usage notes for date/time formatting: + + + + + FM suppresses leading zeroes and trailing blanks + that would otherwise be added to make the output of a pattern be + fixed-width. In PostgreSQL, + FM modifies only the next specification, while in + Oracle FM affects all subsequent + specifications, and repeated FM modifiers + toggle fill mode on and off. + + + + + + TM suppresses trailing blanks whether or + not FM is specified. + + + + + + to_timestamp and to_date + ignore letter case in the input; so for + example MON, Mon, + and mon all accept the same strings. When using + the TM modifier, case-folding is done according to + the rules of the function's input collation (see + ). + + + + + + to_timestamp and to_date + skip multiple blank spaces at the beginning of the input string and + around date and time values unless the FX option is used. For example, + to_timestamp(' 2000    JUN', 'YYYY MON') and + to_timestamp('2000 - JUN', 'YYYY-MON') work, but + to_timestamp('2000    JUN', 'FXYYYY MON') returns an error + because to_timestamp expects only a single space. + FX must be specified as the first item in + the template. + + + + + + A separator (a space or non-letter/non-digit character) in the template string of + to_timestamp and to_date + matches any single separator in the input string or is skipped, + unless the FX option is used. + For example, to_timestamp('2000JUN', 'YYYY///MON') and + to_timestamp('2000/JUN', 'YYYY MON') work, but + to_timestamp('2000//JUN', 'YYYY/MON') + returns an error because the number of separators in the input string + exceeds the number of separators in the template. + + + If FX is specified, a separator in the template string + matches exactly one character in the input string. But note that the + input string character is not required to be the same as the separator from the template string. + For example, to_timestamp('2000/JUN', 'FXYYYY MON') + works, but to_timestamp('2000/JUN', 'FXYYYY  MON') + returns an error because the second space in the template string consumes + the letter J from the input string. + + + + + + A TZH template pattern can match a signed number. + Without the FX option, minus signs may be ambiguous, + and could be interpreted as a separator. + This ambiguity is resolved as follows: If the number of separators before + TZH in the template string is less than the number of + separators before the minus sign in the input string, the minus sign + is interpreted as part of TZH. + Otherwise, the minus sign is considered to be a separator between values. + For example, to_timestamp('2000 -10', 'YYYY TZH') matches + -10 to TZH, but + to_timestamp('2000 -10', 'YYYY  TZH') + matches 10 to TZH. + + + + + + Ordinary text is allowed in to_char + templates and will be output literally. You can put a substring + in double quotes to force it to be interpreted as literal text + even if it contains template patterns. For example, in + '"Hello Year "YYYY', the YYYY + will be replaced by the year data, but the single Y in Year + will not be. + In to_date, to_number, + and to_timestamp, literal text and double-quoted + strings result in skipping the number of characters contained in the + string; for example "XX" skips two input characters + (whether or not they are XX). + + + + Prior to PostgreSQL 12, it was possible to + skip arbitrary text in the input string using non-letter or non-digit + characters. For example, + to_timestamp('2000y6m1d', 'yyyy-MM-DD') used to + work. Now you can only use letter characters for this purpose. For example, + to_timestamp('2000y6m1d', 'yyyytMMtDDt') and + to_timestamp('2000y6m1d', 'yyyy"y"MM"m"DD"d"') + skip y, m, and + d. + + + + + + + If you want to have a double quote in the output you must + precede it with a backslash, for example '\"YYYY + Month\"'. + Backslashes are not otherwise special outside of double-quoted + strings. Within a double-quoted string, a backslash causes the + next character to be taken literally, whatever it is (but this + has no special effect unless the next character is a double quote + or another backslash). + + + + + + In to_timestamp and to_date, + if the year format specification is less than four digits, e.g., + YYY, and the supplied year is less than four digits, + the year will be adjusted to be nearest to the year 2020, e.g., + 95 becomes 1995. + + + + + + In to_timestamp and to_date, + negative years are treated as signifying BC. If you write both a + negative year and an explicit BC field, you get AD + again. An input of year zero is treated as 1 BC. + + + + + + In to_timestamp and to_date, + the YYYY conversion has a restriction when + processing years with more than 4 digits. You must + use some non-digit character or template after YYYY, + otherwise the year is always interpreted as 4 digits. For example + (with the year 20000): + to_date('200001130', 'YYYYMMDD') will be + interpreted as a 4-digit year; instead use a non-digit + separator after the year, like + to_date('20000-1130', 'YYYY-MMDD') or + to_date('20000Nov30', 'YYYYMonDD'). + + + + + + In to_timestamp and to_date, + the CC (century) field is accepted but ignored + if there is a YYY, YYYY or + Y,YYY field. If CC is used with + YY or Y then the result is + computed as that year in the specified century. If the century is + specified but the year is not, the first year of the century + is assumed. + + + + + + In to_timestamp and to_date, + weekday names or numbers (DAY, D, + and related field types) are accepted but are ignored for purposes of + computing the result. The same is true for quarter + (Q) fields. + + + + + + In to_timestamp and to_date, + an ISO 8601 week-numbering date (as distinct from a Gregorian date) + can be specified in one of two ways: + + + + Year, week number, and weekday: for + example to_date('2006-42-4', 'IYYY-IW-ID') + returns the date 2006-10-19. + If you omit the weekday it is assumed to be 1 (Monday). + + + + + Year and day of year: for example to_date('2006-291', + 'IYYY-IDDD') also returns 2006-10-19. + + + + + + Attempting to enter a date using a mixture of ISO 8601 week-numbering + fields and Gregorian date fields is nonsensical, and will cause an + error. In the context of an ISO 8601 week-numbering year, the + concept of a month or day of month has no + meaning. In the context of a Gregorian year, the ISO week has no + meaning. + + + + While to_date will reject a mixture of + Gregorian and ISO week-numbering date + fields, to_char will not, since output format + specifications like YYYY-MM-DD (IYYY-IDDD) can be + useful. But avoid writing something like IYYY-MM-DD; + that would yield surprising results near the start of the year. + (See for more + information.) + + + + + + + In to_timestamp, millisecond + (MS) or microsecond (US) + fields are used as the + seconds digits after the decimal point. For example + to_timestamp('12.3', 'SS.MS') is not 3 milliseconds, + but 300, because the conversion treats it as 12 + 0.3 seconds. + So, for the format SS.MS, the input values + 12.3, 12.30, + and 12.300 specify the + same number of milliseconds. To get three milliseconds, one must write + 12.003, which the conversion treats as + 12 + 0.003 = 12.003 seconds. + + + + Here is a more + complex example: + to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US') + is 15 hours, 12 minutes, and 2 seconds + 20 milliseconds + + 1230 microseconds = 2.021230 seconds. + + + + + + to_char(..., 'ID')'s day of the week numbering + matches the extract(isodow from ...) function, but + to_char(..., 'D')'s does not match + extract(dow from ...)'s day numbering. + + + + + + to_char(interval) formats HH and + HH12 as shown on a 12-hour clock, for example zero hours + and 36 hours both output as 12, while HH24 + outputs the full hour value, which can exceed 23 in + an interval value. + + + + + + + + shows the + template patterns available for formatting numeric values. + + + + Template Patterns for Numeric Formatting + + + + + + Pattern + Description + + + + + 9 + digit position (can be dropped if insignificant) + + + 0 + digit position (will not be dropped, even if insignificant) + + + . (period) + decimal point + + + , (comma) + group (thousands) separator + + + PR + negative value in angle brackets + + + S + sign anchored to number (uses locale) + + + L + currency symbol (uses locale) + + + D + decimal point (uses locale) + + + G + group separator (uses locale) + + + MI + minus sign in specified position (if number < 0) + + + PL + plus sign in specified position (if number > 0) + + + SG + plus/minus sign in specified position + + + RN or rn + Roman numeral (values between 1 and 3999) + + + TH or th + ordinal number suffix + + + V + shift specified number of digits (see notes) + + + EEEE + exponent for scientific notation + + + +
+ + + Usage notes for numeric formatting: + + + + + 0 specifies a digit position that will always be printed, + even if it contains a leading/trailing zero. 9 also + specifies a digit position, but if it is a leading zero then it will + be replaced by a space, while if it is a trailing zero and fill mode + is specified then it will be deleted. (For to_number(), + these two pattern characters are equivalent.) + + + + + + If the format provides fewer fractional digits than the number being + formatted, to_char() will round the number to + the specified number of fractional digits. + + + + + + The pattern characters S, L, D, + and G represent the sign, currency symbol, decimal point, + and thousands separator characters defined by the current locale + (see + and ). The pattern characters period + and comma represent those exact characters, with the meanings of + decimal point and thousands separator, regardless of locale. + + + + + + If no explicit provision is made for a sign + in to_char()'s pattern, one column will be reserved for + the sign, and it will be anchored to (appear just left of) the + number. If S appears just left of some 9's, + it will likewise be anchored to the number. + + + + + + A sign formatted using SG, PL, or + MI is not anchored to + the number; for example, + to_char(-12, 'MI9999') produces '-  12' + but to_char(-12, 'S9999') produces '  -12'. + (The Oracle implementation does not allow the use of + MI before 9, but rather + requires that 9 precede + MI.) + + + + + + TH does not convert values less than zero + and does not convert fractional numbers. + + + + + + PL, SG, and + TH are PostgreSQL + extensions. + + + + + + In to_number, if non-data template patterns such + as L or TH are used, the + corresponding number of input characters are skipped, whether or not + they match the template pattern, unless they are data characters + (that is, digits, sign, decimal point, or comma). For + example, TH would skip two non-data characters. + + + + + + V with to_char + multiplies the input values by + 10^n, where + n is the number of digits following + V. V with + to_number divides in a similar manner. + The V can be thought of as marking the position + of an implicit decimal point in the input or output string. + to_char and to_number + do not support the use of + V combined with a decimal point + (e.g., 99.9V99 is not allowed). + + + + + + EEEE (scientific notation) cannot be used in + combination with any of the other formatting patterns or + modifiers other than digit and decimal point patterns, and must be at the end of the format string + (e.g., 9.99EEEE is a valid pattern). + + + + + + In to_number(), the RN + pattern converts Roman numerals (in standard form) to numbers. + Input is case-insensitive, so RN + and rn are equivalent. RN + cannot be used in combination with any other formatting patterns or + modifiers except FM, which is applicable only + in to_char() and is ignored + in to_number(). + + + + + + + Certain modifiers can be applied to any template pattern to alter its + behavior. For example, FM99.99 + is the 99.99 pattern with the + FM modifier. + shows the + modifier patterns for numeric formatting. + + + + Template Pattern Modifiers for Numeric Formatting + + + + Modifier + Description + Example + + + + + FM prefix + fill mode (suppress trailing zeroes and padding blanks) + FM99.99 + + + TH suffix + upper case ordinal number suffix + 999TH + + + th suffix + lower case ordinal number suffix + 999th + + + +
+ + + shows some + examples of the use of the to_char function. + + + + <function>to_char</function> Examples + + + + Expression + Result + + + + + to_char(current_timestamp, 'Day, DD  HH12:MI:SS') + 'Tuesday  , 06  05:39:18' + + + to_char(current_timestamp, 'FMDay, FMDD  HH12:MI:SS') + 'Tuesday, 6  05:39:18' + + + to_char(current_timestamp AT TIME ZONE + 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS"Z"') + '2022-12-06T05:39:18Z', + ISO 8601 extended format + + + to_char(-0.1, '99.99') + '  -.10' + + + to_char(-0.1, 'FM9.99') + '-.1' + + + to_char(-0.1, 'FM90.99') + '-0.1' + + + to_char(0.1, '0.9') + ' 0.1' + + + to_char(12, '9990999.9') + '    0012.0' + + + to_char(12, 'FM9990999.9') + '0012.' + + + to_char(485, '999') + ' 485' + + + to_char(-485, '999') + '-485' + + + to_char(485, '9 9 9') + ' 4 8 5' + + + to_char(1485, '9,999') + ' 1,485' + + + to_char(1485, '9G999') + ' 1 485' + + + to_char(148.5, '999.999') + ' 148.500' + + + to_char(148.5, 'FM999.999') + '148.5' + + + to_char(148.5, 'FM999.990') + '148.500' + + + to_char(148.5, '999D999') + ' 148,500' + + + to_char(3148.5, '9G999D999') + ' 3 148,500' + + + to_char(-485, '999S') + '485-' + + + to_char(-485, '999MI') + '485-' + + + to_char(485, '999MI') + '485 ' + + + to_char(485, 'FM999MI') + '485' + + + to_char(485, 'PL999') + '+485' + + + to_char(485, 'SG999') + '+485' + + + to_char(-485, 'SG999') + '-485' + + + to_char(-485, '9SG99') + '4-85' + + + to_char(-485, '999PR') + '<485>' + + + to_char(485, 'L999') + 'DM 485' + + + to_char(485, 'RN') + '        CDLXXXV' + + + to_char(485, 'FMRN') + 'CDLXXXV' + + + to_char(5.2, 'FMRN') + 'V' + + + to_char(482, '999th') + ' 482nd' + + + to_char(485, '"Good number:"999') + 'Good number: 485' + + + to_char(485.8, '"Pre:"999" Post:" .999') + 'Pre: 485 Post: .800' + + + to_char(12, '99V999') + ' 12000' + + + to_char(12.4, '99V999') + ' 12400' + + + to_char(12.45, '99V9') + ' 125' + + + to_char(0.0004859, '9.99EEEE') + ' 4.86e-04' + + + +
+ +
diff --git a/doc/src/sgml/func/func-geometry.sgml b/doc/src/sgml/func/func-geometry.sgml new file mode 100644 index 0000000000000..ba203af3bd289 --- /dev/null +++ b/doc/src/sgml/func/func-geometry.sgml @@ -0,0 +1,1261 @@ + + Geometric Functions and Operators + + + The geometric types point, box, + lseg, line, path, + polygon, and circle have a large set of + native support functions and operators, shown in , , and . + + + + Geometric Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + geometric_type + point + geometric_type + + + Adds the coordinates of the second point to those of each + point of the first argument, thus performing translation. + Available for point, box, path, + circle. + + + box '(1,1),(0,0)' + point '(2,0)' + (3,1),(2,0) + + + + + + path + path + path + + + Concatenates two open paths (returns NULL if either path is closed). + + + path '[(0,0),(1,1)]' + path '[(2,2),(3,3),(4,4)]' + [(0,0),(1,1),(2,2),(3,3),(4,4)] + + + + + + geometric_type - point + geometric_type + + + Subtracts the coordinates of the second point from those + of each point of the first argument, thus performing translation. + Available for point, box, path, + circle. + + + box '(1,1),(0,0)' - point '(2,0)' + (-1,1),(-2,0) + + + + + + geometric_type * point + geometric_type + + + Multiplies each point of the first argument by the second + point (treating a point as being a complex number + represented by real and imaginary parts, and performing standard + complex multiplication). If one interprets + the second point as a vector, this is equivalent to + scaling the object's size and distance from the origin by the length + of the vector, and rotating it counterclockwise around the origin by + the vector's angle from the x axis. + Available for point, box,Rotating a + box with these operators only moves its corner points: the box is + still considered to have sides parallel to the axes. Hence the box's + size is not preserved, as a true rotation would do. + path, circle. + + + path '((0,0),(1,0),(1,1))' * point '(3.0,0)' + ((0,0),(3,0),(3,3)) + + + path '((0,0),(1,0),(1,1))' * point(cosd(45), sind(45)) + ((0,0),&zwsp;(0.7071067811865475,0.7071067811865475),&zwsp;(0,1.414213562373095)) + + + + + + geometric_type / point + geometric_type + + + Divides each point of the first argument by the second + point (treating a point as being a complex number + represented by real and imaginary parts, and performing standard + complex division). If one interprets + the second point as a vector, this is equivalent to + scaling the object's size and distance from the origin down by the + length of the vector, and rotating it clockwise around the origin by + the vector's angle from the x axis. + Available for point, box, path, + circle. + + + path '((0,0),(1,0),(1,1))' / point '(2.0,0)' + ((0,0),(0.5,0),(0.5,0.5)) + + + path '((0,0),(1,0),(1,1))' / point(cosd(45), sind(45)) + ((0,0),&zwsp;(0.7071067811865476,-0.7071067811865476),&zwsp;(1.4142135623730951,0)) + + + + + + @-@ geometric_type + double precision + + + Computes the total length. + Available for lseg, path. + + + @-@ path '[(0,0),(1,0),(1,1)]' + 2 + + + + + + @@ geometric_type + point + + + Computes the center point. + Available for box, lseg, + polygon, circle. + + + @@ box '(2,2),(0,0)' + (1,1) + + + + + + # geometric_type + integer + + + Returns the number of points. + Available for path, polygon. + + + # path '((1,0),(0,1),(-1,0))' + 3 + + + + + + geometric_type # geometric_type + point + + + Computes the point of intersection, or NULL if there is none. + Available for lseg, line. + + + lseg '[(0,0),(1,1)]' # lseg '[(1,0),(0,1)]' + (0.5,0.5) + + + + + + box # box + box + + + Computes the intersection of two boxes, or NULL if there is none. + + + box '(2,2),(-1,-1)' # box '(1,1),(-2,-2)' + (1,1),(-1,-1) + + + + + + geometric_type ## geometric_type + point + + + Computes the closest point to the first object on the second object. + Available for these pairs of types: + (point, box), + (point, lseg), + (point, line), + (lseg, box), + (lseg, lseg), + (line, lseg). + + + point '(0,0)' ## lseg '[(2,0),(0,2)]' + (1,1) + + + + + + geometric_type <-> geometric_type + double precision + + + Computes the distance between the objects. + Available for all seven geometric types, for all combinations + of point with another geometric type, and for + these additional pairs of types: + (box, lseg), + (lseg, line), + (polygon, circle) + (and the commutator cases). + + + circle '<(0,0),1>' <-> circle '<(5,0),1>' + 3 + + + + + + geometric_type @> geometric_type + boolean + + + Does first object contain second? + Available for these pairs of types: + (box, point), + (box, box), + (path, point), + (polygon, point), + (polygon, polygon), + (circle, point), + (circle, circle). + + + circle '<(0,0),2>' @> point '(1,1)' + t + + + + + + geometric_type <@ geometric_type + boolean + + + Is first object contained in or on second? + Available for these pairs of types: + (point, box), + (point, lseg), + (point, line), + (point, path), + (point, polygon), + (point, circle), + (box, box), + (lseg, box), + (lseg, line), + (polygon, polygon), + (circle, circle). + + + point '(1,1)' <@ circle '<(0,0),2>' + t + + + + + + geometric_type && geometric_type + boolean + + + Do these objects overlap? (One point in common makes this true.) + Available for box, polygon, + circle. + + + box '(1,1),(0,0)' && box '(2,2),(0,0)' + t + + + + + + geometric_type << geometric_type + boolean + + + Is first object strictly left of second? + Available for point, box, + polygon, circle. + + + circle '<(0,0),1>' << circle '<(5,0),1>' + t + + + + + + geometric_type >> geometric_type + boolean + + + Is first object strictly right of second? + Available for point, box, + polygon, circle. + + + circle '<(5,0),1>' >> circle '<(0,0),1>' + t + + + + + + geometric_type &< geometric_type + boolean + + + Does first object not extend to the right of second? + Available for box, polygon, + circle. + + + box '(1,1),(0,0)' &< box '(2,2),(0,0)' + t + + + + + + geometric_type &> geometric_type + boolean + + + Does first object not extend to the left of second? + Available for box, polygon, + circle. + + + box '(3,3),(0,0)' &> box '(2,2),(0,0)' + t + + + + + + geometric_type <<| geometric_type + boolean + + + Is first object strictly below second? + Available for point, box, polygon, + circle. + + + box '(3,3),(0,0)' <<| box '(5,5),(3,4)' + t + + + + + + geometric_type |>> geometric_type + boolean + + + Is first object strictly above second? + Available for point, box, polygon, + circle. + + + box '(5,5),(3,4)' |>> box '(3,3),(0,0)' + t + + + + + + geometric_type &<| geometric_type + boolean + + + Does first object not extend above second? + Available for box, polygon, + circle. + + + box '(1,1),(0,0)' &<| box '(2,2),(0,0)' + t + + + + + + geometric_type |&> geometric_type + boolean + + + Does first object not extend below second? + Available for box, polygon, + circle. + + + box '(3,3),(0,0)' |&> box '(2,2),(0,0)' + t + + + + + + box <^ box + boolean + + + Is first object below second (allows edges to touch)? + + + box '((1,1),(0,0))' <^ box '((2,2),(1,1))' + t + + + + + + box >^ box + boolean + + + Is first object above second (allows edges to touch)? + + + box '((2,2),(1,1))' >^ box '((1,1),(0,0))' + t + + + + + + geometric_type ?# geometric_type + boolean + + + Do these objects intersect? + Available for these pairs of types: + (box, box), + (lseg, box), + (lseg, lseg), + (lseg, line), + (line, box), + (line, line), + (path, path). + + + lseg '[(-1,0),(1,0)]' ?# box '(2,2),(-2,-2)' + t + + + + + + ?- line + boolean + + + ?- lseg + boolean + + + Is line horizontal? + + + ?- lseg '[(-1,0),(1,0)]' + t + + + + + + point ?- point + boolean + + + Are points horizontally aligned (that is, have same y coordinate)? + + + point '(1,0)' ?- point '(0,0)' + t + + + + + + ?| line + boolean + + + ?| lseg + boolean + + + Is line vertical? + + + ?| lseg '[(-1,0),(1,0)]' + f + + + + + + point ?| point + boolean + + + Are points vertically aligned (that is, have same x coordinate)? + + + point '(0,1)' ?| point '(0,0)' + t + + + + + + line ?-| line + boolean + + + lseg ?-| lseg + boolean + + + Are lines perpendicular? + + + lseg '[(0,0),(0,1)]' ?-| lseg '[(0,0),(1,0)]' + t + + + + + + line ?|| line + boolean + + + lseg ?|| lseg + boolean + + + Are lines parallel? + + + lseg '[(-1,0),(1,0)]' ?|| lseg '[(-1,2),(1,2)]' + t + + + + + + geometric_type ~= geometric_type + boolean + + + Are these objects the same? + Available for point, box, + polygon, circle. + + + polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' + t + + + + +
+ + + + Note that the same as operator, ~=, + represents the usual notion of equality for the point, + box, polygon, and circle types. + Some of the geometric types also have an = operator, but + = compares for equal areas only. + The other scalar comparison operators (<= and so + on), where available for these types, likewise compare areas. + + + + + + Before PostgreSQL 14, the point + is strictly below/above comparison operators point + <<| point and point + |>> point were respectively + called <^ and >^. These + names are still available, but are deprecated and will eventually be + removed. + + + + + Geometric Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + area + + area ( geometric_type ) + double precision + + + Computes area. + Available for box, path, circle. + A path input must be closed, else NULL is returned. + Also, if the path is self-intersecting, the result may be + meaningless. + + + area(box '(2,2),(0,0)') + 4 + + + + + + + center + + center ( geometric_type ) + point + + + Computes center point. + Available for box, circle. + + + center(box '(1,2),(0,0)') + (0.5,1) + + + + + + + diagonal + + diagonal ( box ) + lseg + + + Extracts box's diagonal as a line segment + (same as lseg(box)). + + + diagonal(box '(1,2),(0,0)') + [(1,2),(0,0)] + + + + + + + diameter + + diameter ( circle ) + double precision + + + Computes diameter of circle. + + + diameter(circle '<(0,0),2>') + 4 + + + + + + + height + + height ( box ) + double precision + + + Computes vertical size of box. + + + height(box '(1,2),(0,0)') + 2 + + + + + + + isclosed + + isclosed ( path ) + boolean + + + Is path closed? + + + isclosed(path '((0,0),(1,1),(2,0))') + t + + + + + + + isopen + + isopen ( path ) + boolean + + + Is path open? + + + isopen(path '[(0,0),(1,1),(2,0)]') + t + + + + + + + length + + length ( geometric_type ) + double precision + + + Computes the total length. + Available for lseg, path. + + + length(path '((-1,0),(1,0))') + 4 + + + + + + + npoints + + npoints ( geometric_type ) + integer + + + Returns the number of points. + Available for path, polygon. + + + npoints(path '[(0,0),(1,1),(2,0)]') + 3 + + + + + + + pclose + + pclose ( path ) + path + + + Converts path to closed form. + + + pclose(path '[(0,0),(1,1),(2,0)]') + ((0,0),(1,1),(2,0)) + + + + + + + popen + + popen ( path ) + path + + + Converts path to open form. + + + popen(path '((0,0),(1,1),(2,0))') + [(0,0),(1,1),(2,0)] + + + + + + + radius + + radius ( circle ) + double precision + + + Computes radius of circle. + + + radius(circle '<(0,0),2>') + 2 + + + + + + + slope + + slope ( point, point ) + double precision + + + Computes slope of a line drawn through the two points. + + + slope(point '(0,0)', point '(2,1)') + 0.5 + + + + + + + width + + width ( box ) + double precision + + + Computes horizontal size of box. + + + width(box '(1,2),(0,0)') + 1 + + + + +
+ + + Geometric Type Conversion Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + box + + box ( circle ) + box + + + Computes box inscribed within the circle. + + + box(circle '<(0,0),2>') + (1.414213562373095,1.414213562373095),&zwsp;(-1.414213562373095,-1.414213562373095) + + + + + + box ( point ) + box + + + Converts point to empty box. + + + box(point '(1,0)') + (1,0),(1,0) + + + + + + box ( point, point ) + box + + + Converts any two corner points to box. + + + box(point '(0,1)', point '(1,0)') + (1,1),(0,0) + + + + + + box ( polygon ) + box + + + Computes bounding box of polygon. + + + box(polygon '((0,0),(1,1),(2,0))') + (2,1),(0,0) + + + + + + + bound_box + + bound_box ( box, box ) + box + + + Computes bounding box of two boxes. + + + bound_box(box '(1,1),(0,0)', box '(4,4),(3,3)') + (4,4),(0,0) + + + + + + + circle + + circle ( box ) + circle + + + Computes smallest circle enclosing box. + + + circle(box '(1,1),(0,0)') + <(0.5,0.5),0.7071067811865476> + + + + + + circle ( point, double precision ) + circle + + + Constructs circle from center and radius. + + + circle(point '(0,0)', 2.0) + <(0,0),2> + + + + + + circle ( polygon ) + circle + + + Converts polygon to circle. The circle's center is the mean of the + positions of the polygon's points, and the radius is the average + distance of the polygon's points from that center. + + + circle(polygon '((0,0),(1,3),(2,0))') + <(1,1),1.6094757082487299> + + + + + + + line + + line ( point, point ) + line + + + Converts two points to the line through them. + + + line(point '(-1,0)', point '(1,0)') + {0,-1,0} + + + + + + + lseg + + lseg ( box ) + lseg + + + Extracts box's diagonal as a line segment. + + + lseg(box '(1,0),(-1,0)') + [(1,0),(-1,0)] + + + + + + lseg ( point, point ) + lseg + + + Constructs line segment from two endpoints. + + + lseg(point '(-1,0)', point '(1,0)') + [(-1,0),(1,0)] + + + + + + + path + + path ( polygon ) + path + + + Converts polygon to a closed path with the same list of points. + + + path(polygon '((0,0),(1,1),(2,0))') + ((0,0),(1,1),(2,0)) + + + + + + + point + + point ( double precision, double precision ) + point + + + Constructs point from its coordinates. + + + point(23.4, -44.5) + (23.4,-44.5) + + + + + + point ( box ) + point + + + Computes center of box. + + + point(box '(1,0),(-1,0)') + (0,0) + + + + + + point ( circle ) + point + + + Computes center of circle. + + + point(circle '<(0,0),2>') + (0,0) + + + + + + point ( lseg ) + point + + + Computes center of line segment. + + + point(lseg '[(-1,0),(1,0)]') + (0,0) + + + + + + point ( polygon ) + point + + + Computes center of polygon (the mean of the + positions of the polygon's points). + + + point(polygon '((0,0),(1,1),(2,0))') + (1,0.3333333333333333) + + + + + + + polygon + + polygon ( box ) + polygon + + + Converts box to a 4-point polygon. + + + polygon(box '(1,1),(0,0)') + ((0,0),(0,1),(1,1),(1,0)) + + + + + + polygon ( circle ) + polygon + + + Converts circle to a 12-point polygon. + + + polygon(circle '<(0,0),2>') + ((-2,0),&zwsp;(-1.7320508075688774,0.9999999999999999),&zwsp;(-1.0000000000000002,1.7320508075688772),&zwsp;(-1.2246063538223773e-16,2),&zwsp;(0.9999999999999996,1.7320508075688774),&zwsp;(1.732050807568877,1.0000000000000007),&zwsp;(2,2.4492127076447545e-16),&zwsp;(1.7320508075688776,-0.9999999999999994),&zwsp;(1.0000000000000009,-1.7320508075688767),&zwsp;(3.673819061467132e-16,-2),&zwsp;(-0.9999999999999987,-1.732050807568878),&zwsp;(-1.7320508075688767,-1.0000000000000009)) + + + + + + polygon ( integer, circle ) + polygon + + + Converts circle to an n-point polygon. + + + polygon(4, circle '<(3,0),1>') + ((2,0),&zwsp;(3,1),&zwsp;(4,1.2246063538223773e-16),&zwsp;(3,-1)) + + + + + + polygon ( path ) + polygon + + + Converts closed path to a polygon with the same list of points. + + + polygon(path '((0,0),(1,1),(2,0))') + ((0,0),(1,1),(2,0)) + + + + + +
+ + + It is possible to access the two component numbers of a point + as though the point were an array with indexes 0 and 1. For example, if + t.p is a point column then + SELECT p[0] FROM t retrieves the X coordinate and + UPDATE t SET p[1] = ... changes the Y coordinate. + In the same way, a value of type box or lseg can be treated + as an array of two point values. + + +
diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml new file mode 100644 index 0000000000000..c393832d94c64 --- /dev/null +++ b/doc/src/sgml/func/func-info.sgml @@ -0,0 +1,3800 @@ + + System Information Functions and Operators + + + The functions described in this section are used to obtain various + information about a PostgreSQL installation. + + + + Session Information Functions + + + shows several + functions that extract session and system information. + + + + In addition to the functions listed in this section, there are a number of + functions related to the statistics system that also provide system + information. See for more + information. + + + + Session Information Functions + + + + + Function + + + Description + + + + + + + + + current_catalog + + current_catalog + name + + + + current_database + + current_database () + name + + + Returns the name of the current database. (Databases are + called catalogs in the SQL standard, + so current_catalog is the standard's + spelling.) + + + + + + + current_query + + current_query () + text + + + Returns the text of the currently executing query, as submitted + by the client (which might contain more than one statement). + + + + + + + current_role + + current_role + name + + + This is equivalent to current_user. + + + + + + + current_schema + + + schema + current + + current_schema + name + + + current_schema () + name + + + Returns the name of the schema that is first in the search path (or a + null value if the search path is empty). This is the schema that will + be used for any tables or other named objects that are created without + specifying a target schema. + + + + + + + current_schemas + + + search path + current + + current_schemas ( include_implicit boolean ) + name[] + + + Returns an array of the names of all schemas presently in the + effective search path, in their priority order. (Items in the current + setting that do not correspond to + existing, searchable schemas are omitted.) If the Boolean argument + is true, then implicitly-searched system schemas + such as pg_catalog are included in the result. + + + + + + + current_user + + + user + current + + current_user + name + + + Returns the user name of the current execution context. + + + + + + + inet_client_addr + + inet_client_addr () + inet + + + Returns the IP address of the current client, + or NULL if the current connection is via a + Unix-domain socket. + + + + + + + inet_client_port + + inet_client_port () + integer + + + Returns the IP port number of the current client, + or NULL if the current connection is via a + Unix-domain socket. + + + + + + + inet_server_addr + + inet_server_addr () + inet + + + Returns the IP address on which the server accepted the current + connection, + or NULL if the current connection is via a + Unix-domain socket. + + + + + + + inet_server_port + + inet_server_port () + integer + + + Returns the IP port number on which the server accepted the current + connection, + or NULL if the current connection is via a + Unix-domain socket. + + + + + + + pg_backend_pid + + pg_backend_pid () + integer + + + Returns the process ID of the server process attached to the current + session. + + + + + + + pg_blocking_pids + + pg_blocking_pids ( integer ) + integer[] + + + Returns an array of the process ID(s) of the sessions that are + blocking the server process with the specified process ID from + acquiring a lock, or an empty array if there is no such server process + or it is not blocked. + + + One server process blocks another if it either holds a lock that + conflicts with the blocked process's lock request (hard block), or is + waiting for a lock that would conflict with the blocked process's lock + request and is ahead of it in the wait queue (soft block). When using + parallel queries the result always lists client-visible process IDs + (that is, pg_backend_pid results) even if the + actual lock is held or awaited by a child worker process. As a result + of that, there may be duplicated PIDs in the result. Also note that + when a prepared transaction holds a conflicting lock, it will be + represented by a zero process ID. + + + Frequent calls to this function could have some impact on database + performance, because it needs exclusive access to the lock manager's + shared state for a short time. + + + + + + + pg_conf_load_time + + pg_conf_load_time () + timestamp with time zone + + + Returns the time when the server configuration files were last loaded. + If the current session was alive at the time, this will be the time + when the session itself re-read the configuration files (so the + reading will vary a little in different sessions). Otherwise it is + the time when the postmaster process re-read the configuration files. + + + + + + + pg_current_logfile + + + Logging + pg_current_logfile function + + + current_logfiles + and the pg_current_logfile function + + + Logging + current_logfiles file and the pg_current_logfile + function + + pg_current_logfile ( text ) + text + + + Returns the path name of the log file currently in use by the logging + collector. The path includes the + directory and the individual log file name. The result + is NULL if the logging collector is disabled. + When multiple log files exist, each in a different + format, pg_current_logfile without an argument + returns the path of the file having the first format found in the + ordered list: stderr, + csvlog, jsonlog. + NULL is returned if no log file has any of these + formats. + To request information about a specific log file format, supply + either csvlog, jsonlog or + stderr as the + value of the optional parameter. The result is NULL + if the log format requested is not configured in + . + The result reflects the contents of + the current_logfiles file. + + + This function is restricted to superusers and roles with privileges of + the pg_monitor role by default, but other users can + be granted EXECUTE to run the function. + + + + + + + pg_get_loaded_modules + + pg_get_loaded_modules () + setof record + ( module_name text, + version text, + file_name text ) + + + Returns a list of the loadable modules that are loaded into the + current server session. The module_name + and version fields are NULL unless the + module author supplied values for them using + the PG_MODULE_MAGIC_EXT macro. + The file_name field gives the file + name of the module (shared library). + + + + + + + pg_my_temp_schema + + pg_my_temp_schema () + oid + + + Returns the OID of the current session's temporary schema, or zero if + it has none (because it has not created any temporary tables). + + + + + + + pg_is_other_temp_schema + + pg_is_other_temp_schema ( oid ) + boolean + + + Returns true if the given OID is the OID of another session's + temporary schema. (This can be useful, for example, to exclude other + sessions' temporary tables from a catalog display.) + + + + + + + pg_jit_available + + pg_jit_available () + boolean + + + Returns true if a JIT compiler extension is + available (see ) and the + configuration parameter is set to + on. + + + + + + + pg_numa_available + + pg_numa_available () + boolean + + + Returns true if the server has been compiled with NUMA support. + + + + + + + pg_listening_channels + + pg_listening_channels () + setof text + + + Returns the set of names of asynchronous notification channels that + the current session is listening to. + + + + + + + pg_notification_queue_usage + + pg_notification_queue_usage () + double precision + + + Returns the fraction (0–1) of the asynchronous notification + queue's maximum size that is currently occupied by notifications that + are waiting to be processed. + See and + for more information. + + + + + + + pg_postmaster_start_time + + pg_postmaster_start_time () + timestamp with time zone + + + Returns the time when the server started. + + + + + + + pg_safe_snapshot_blocking_pids + + pg_safe_snapshot_blocking_pids ( integer ) + integer[] + + + Returns an array of the process ID(s) of the sessions that are blocking + the server process with the specified process ID from acquiring a safe + snapshot, or an empty array if there is no such server process or it + is not blocked. + + + A session running a SERIALIZABLE transaction blocks + a SERIALIZABLE READ ONLY DEFERRABLE transaction + from acquiring a snapshot until the latter determines that it is safe + to avoid taking any predicate locks. See + for more information about + serializable and deferrable transactions. + + + Frequent calls to this function could have some impact on database + performance, because it needs access to the predicate lock manager's + shared state for a short time. + + + + + + + pg_trigger_depth + + pg_trigger_depth () + integer + + + Returns the current nesting level + of PostgreSQL triggers (0 if not called, + directly or indirectly, from inside a trigger). + + + + + + + session_user + + session_user + name + + + Returns the session user's name. + + + + + + + system_user + + system_user + text + + + Returns the authentication method and the identity (if any) that the + user presented during the authentication cycle before they were + assigned a database role. It is represented as + auth_method:identity or + NULL if the user has not been authenticated (for + example if Trust authentication has + been used). + + + + + + + user + + user + name + + + This is equivalent to current_user. + + + + +
+ + + + current_catalog, + current_role, + current_schema, + current_user, + session_user, + and user have special syntactic status + in SQL: they must be called without trailing + parentheses. In PostgreSQL, parentheses can optionally be used with + current_schema, but not with the others. + + + + + The session_user is normally the user who initiated + the current database connection; but superusers can change this setting + with . + The current_user is the user identifier + that is applicable for permission checking. Normally it is equal + to the session user, but it can be changed with + . + It also changes during the execution of + functions with the attribute SECURITY DEFINER. + In Unix parlance, the session user is the real user and + the current user is the effective user. + current_role and user are + synonyms for current_user. (The SQL standard draws + a distinction between current_role + and current_user, but PostgreSQL + does not, since it unifies users and roles into a single kind of entity.) + + +
+ + + Access Privilege Inquiry Functions + + + privilege + querying + + + + lists functions that + allow querying object access privileges programmatically. + (See for more information about + privileges.) + In these functions, the user whose privileges are being inquired about + can be specified by name or by OID + (pg_authid.oid), or if + the name is given as public then the privileges of the + PUBLIC pseudo-role are checked. Also, the user + argument can be omitted entirely, in which case + the current_user is assumed. + The object that is being inquired about can be specified either by name or + by OID, too. When specifying by name, a schema name can be included if + relevant. + The access privilege of interest is specified by a text string, which must + evaluate to one of the appropriate privilege keywords for the object's type + (e.g., SELECT). Optionally, WITH GRANT + OPTION can be added to a privilege type to test whether the + privilege is held with grant option. Also, multiple privilege types can be + listed separated by commas, in which case the result will be true if any of + the listed privileges is held. (Case of the privilege string is not + significant, and extra whitespace is allowed between but not within + privilege names.) + Some examples: + +SELECT has_table_privilege('myschema.mytable', 'select'); +SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION'); + + + + + Access Privilege Inquiry Functions + + + + + Function + + + Description + + + + + + + + + has_any_column_privilege + + has_any_column_privilege ( + user name or oid, + table text or oid, + privilege text ) + boolean + + + Does user have privilege for any column of table? + This succeeds either if the privilege is held for the whole table, or + if there is a column-level grant of the privilege for at least one + column. + Allowable privilege types are + SELECT, INSERT, + UPDATE, and REFERENCES. + + + + + + + has_column_privilege + + has_column_privilege ( + user name or oid, + table text or oid, + column text or smallint, + privilege text ) + boolean + + + Does user have privilege for the specified table column? + This succeeds either if the privilege is held for the whole table, or + if there is a column-level grant of the privilege for the column. + The column can be specified by name or by attribute number + (pg_attribute.attnum). + Allowable privilege types are + SELECT, INSERT, + UPDATE, and REFERENCES. + + + + + + + has_database_privilege + + has_database_privilege ( + user name or oid, + database text or oid, + privilege text ) + boolean + + + Does user have privilege for database? + Allowable privilege types are + CREATE, + CONNECT, + TEMPORARY, and + TEMP (which is equivalent to + TEMPORARY). + + + + + + + has_foreign_data_wrapper_privilege + + has_foreign_data_wrapper_privilege ( + user name or oid, + fdw text or oid, + privilege text ) + boolean + + + Does user have privilege for foreign-data wrapper? + The only allowable privilege type is USAGE. + + + + + + + has_function_privilege + + has_function_privilege ( + user name or oid, + function text or oid, + privilege text ) + boolean + + + Does user have privilege for function? + The only allowable privilege type is EXECUTE. + + + When specifying a function by name rather than by OID, the allowed + input is the same as for the regprocedure data type (see + ). + An example is: + +SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); + + + + + + + + has_language_privilege + + has_language_privilege ( + user name or oid, + language text or oid, + privilege text ) + boolean + + + Does user have privilege for language? + The only allowable privilege type is USAGE. + + + + + + + has_largeobject_privilege + + has_largeobject_privilege ( + user name or oid, + largeobject oid, + privilege text ) + boolean + + + Does user have privilege for large object? + Allowable privilege types are + SELECT and UPDATE. + + + + + + + has_parameter_privilege + + has_parameter_privilege ( + user name or oid, + parameter text, + privilege text ) + boolean + + + Does user have privilege for configuration parameter? + The parameter name is case-insensitive. + Allowable privilege types are SET + and ALTER SYSTEM. + + + + + + + has_schema_privilege + + has_schema_privilege ( + user name or oid, + schema text or oid, + privilege text ) + boolean + + + Does user have privilege for schema? + Allowable privilege types are + CREATE and + USAGE. + + + + + + + has_sequence_privilege + + has_sequence_privilege ( + user name or oid, + sequence text or oid, + privilege text ) + boolean + + + Does user have privilege for sequence? + Allowable privilege types are + USAGE, + SELECT, and + UPDATE. + + + + + + + has_server_privilege + + has_server_privilege ( + user name or oid, + server text or oid, + privilege text ) + boolean + + + Does user have privilege for foreign server? + The only allowable privilege type is USAGE. + + + + + + + has_table_privilege + + has_table_privilege ( + user name or oid, + table text or oid, + privilege text ) + boolean + + + Does user have privilege for table? + Allowable privilege types + are SELECT, INSERT, + UPDATE, DELETE, + TRUNCATE, REFERENCES, + TRIGGER, and MAINTAIN. + + + + + + + has_tablespace_privilege + + has_tablespace_privilege ( + user name or oid, + tablespace text or oid, + privilege text ) + boolean + + + Does user have privilege for tablespace? + The only allowable privilege type is CREATE. + + + + + + + has_type_privilege + + has_type_privilege ( + user name or oid, + type text or oid, + privilege text ) + boolean + + + Does user have privilege for data type? + The only allowable privilege type is USAGE. + When specifying a type by name rather than by OID, the allowed input + is the same as for the regtype data type (see + ). + + + + + + + pg_has_role + + pg_has_role ( + user name or oid, + role text or oid, + privilege text ) + boolean + + + Does user have privilege for role? + Allowable privilege types are + MEMBER, USAGE, + and SET. + MEMBER denotes direct or indirect membership in + the role without regard to what specific privileges may be conferred. + USAGE denotes whether the privileges of the role + are immediately available without doing SET ROLE, + while SET denotes whether it is possible to change + to the role using the SET ROLE command. + WITH ADMIN OPTION or WITH GRANT + OPTION can be added to any of these privilege types to + test whether the ADMIN privilege is held (all + six spellings test the same thing). + This function does not allow the special case of + setting user to public, + because the PUBLIC pseudo-role can never be a member of real roles. + + + + + + + row_security_active + + row_security_active ( + table text or oid ) + boolean + + + Is row-level security active for the specified table in the context of + the current user and current environment? + + + + +
+ + + shows the operators + available for the aclitem type, which is the catalog + representation of access privileges. See + for information about how to read access privilege values. + + + + <type>aclitem</type> Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + + aclitemeq + + aclitem = aclitem + boolean + + + Are aclitems equal? (Notice that + type aclitem lacks the usual set of comparison + operators; it has only equality. In turn, aclitem + arrays can only be compared for equality.) + + + 'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem + f + + + + + + + aclcontains + + aclitem[] @> aclitem + boolean + + + Does array contain the specified privileges? (This is true if there + is an array entry that matches the aclitem's grantee and + grantor, and has at least the specified set of privileges.) + + + '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem + t + + + + + + aclitem[] ~ aclitem + boolean + + + This is a deprecated alias for @>. + + + '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitem + t + + + + +
+ + + shows some additional + functions to manage the aclitem type. + + + + <type>aclitem</type> Functions + + + + + Function + + + Description + + + + + + + + + acldefault + + acldefault ( + type "char", + ownerId oid ) + aclitem[] + + + Constructs an aclitem array holding the default access + privileges for an object of type type belonging + to the role with OID ownerId. This represents + the access privileges that will be assumed when an object's + ACL entry is null. (The default access privileges + are described in .) + The type parameter must be one of + 'c' for COLUMN, + 'r' for TABLE and table-like objects, + 's' for SEQUENCE, + 'd' for DATABASE, + 'f' for FUNCTION or PROCEDURE, + 'l' for LANGUAGE, + 'L' for LARGE OBJECT, + 'n' for SCHEMA, + 'p' for PARAMETER, + 't' for TABLESPACE, + 'F' for FOREIGN DATA WRAPPER, + 'S' for FOREIGN SERVER, + or + 'T' for TYPE or DOMAIN. + + + + + + + aclexplode + + aclexplode ( aclitem[] ) + setof record + ( grantor oid, + grantee oid, + privilege_type text, + is_grantable boolean ) + + + Returns the aclitem array as a set of rows. + If the grantee is the pseudo-role PUBLIC, it is represented by zero in + the grantee column. Each granted privilege is + represented as SELECT, INSERT, + etc (see for a full list). + Note that each privilege is broken out as a separate row, so + only one keyword appears in the privilege_type + column. + + + + + + + makeaclitem + + makeaclitem ( + grantee oid, + grantor oid, + privileges text, + is_grantable boolean ) + aclitem + + + Constructs an aclitem with the given properties. + privileges is a comma-separated list of + privilege names such as SELECT, + INSERT, etc, all of which are set in the + result. (Case of the privilege string is not significant, and + extra whitespace is allowed between but not within privilege + names.) + + + + +
+ +
+ + + Schema Visibility Inquiry Functions + + + shows functions that + determine whether a certain object is visible in the + current schema search path. + For example, a table is said to be visible if its + containing schema is in the search path and no table of the same + name appears earlier in the search path. This is equivalent to the + statement that the table can be referenced by name without explicit + schema qualification. Thus, to list the names of all visible tables: + +SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); + + For functions and operators, an object in the search path is said to be + visible if there is no object of the same name and argument data + type(s) earlier in the path. For operator classes and families, + both the name and the associated index access method are considered. + + + + search path + object visibility + + + + Schema Visibility Inquiry Functions + + + + + Function + + + Description + + + + + + + + + pg_collation_is_visible + + pg_collation_is_visible ( collation oid ) + boolean + + + Is collation visible in search path? + + + + + + + pg_conversion_is_visible + + pg_conversion_is_visible ( conversion oid ) + boolean + + + Is conversion visible in search path? + + + + + + + pg_function_is_visible + + pg_function_is_visible ( function oid ) + boolean + + + Is function visible in search path? + (This also works for procedures and aggregates.) + + + + + + + pg_opclass_is_visible + + pg_opclass_is_visible ( opclass oid ) + boolean + + + Is operator class visible in search path? + + + + + + + pg_operator_is_visible + + pg_operator_is_visible ( operator oid ) + boolean + + + Is operator visible in search path? + + + + + + + pg_opfamily_is_visible + + pg_opfamily_is_visible ( opclass oid ) + boolean + + + Is operator family visible in search path? + + + + + + + pg_statistics_obj_is_visible + + pg_statistics_obj_is_visible ( stat oid ) + boolean + + + Is statistics object visible in search path? + + + + + + + pg_table_is_visible + + pg_table_is_visible ( table oid ) + boolean + + + Is table visible in search path? + (This works for all types of relations, including views, materialized + views, indexes, sequences and foreign tables.) + + + + + + + pg_ts_config_is_visible + + pg_ts_config_is_visible ( config oid ) + boolean + + + Is text search configuration visible in search path? + + + + + + + pg_ts_dict_is_visible + + pg_ts_dict_is_visible ( dict oid ) + boolean + + + Is text search dictionary visible in search path? + + + + + + + pg_ts_parser_is_visible + + pg_ts_parser_is_visible ( parser oid ) + boolean + + + Is text search parser visible in search path? + + + + + + + pg_ts_template_is_visible + + pg_ts_template_is_visible ( template oid ) + boolean + + + Is text search template visible in search path? + + + + + + + pg_type_is_visible + + pg_type_is_visible ( type oid ) + boolean + + + Is type (or domain) visible in search path? + + + + +
+ + + All these functions require object OIDs to identify the object to be + checked. If you want to test an object by name, it is convenient to use + the OID alias types (regclass, regtype, + regprocedure, regoperator, regconfig, + or regdictionary), + for example: + +SELECT pg_type_is_visible('myschema.widget'::regtype); + + Note that it would not make much sense to test a non-schema-qualified + type name in this way — if the name can be recognized at all, it must be visible. + + +
+ + + System Catalog Information Functions + + + lists functions that + extract information from the system catalogs. + + + + System Catalog Information Functions + + + + + Function + + + Description + + + + + + + + + format_type + + format_type ( type oid, typemod integer ) + text + + + Returns the SQL name for a data type that is identified by its type + OID and possibly a type modifier. Pass NULL for the type modifier if + no specific modifier is known. + + + + + + + pg_basetype + + pg_basetype ( regtype ) + regtype + + + Returns the OID of the base type of a domain identified by its + type OID. If the argument is the OID of a non-domain type, + returns the argument as-is. Returns NULL if the argument is + not a valid type OID. If there's a chain of domain dependencies, + it will recurse until finding the base type. + + + Assuming CREATE DOMAIN mytext AS text: + + + pg_basetype('mytext'::regtype) + text + + + + + + + pg_char_to_encoding + + pg_char_to_encoding ( encoding name ) + integer + + + Converts the supplied encoding name into an integer representing the + internal identifier used in some system catalog tables. + Returns -1 if an unknown encoding name is provided. + + + + + + + pg_encoding_to_char + + pg_encoding_to_char ( encoding integer ) + name + + + Converts the integer used as the internal identifier of an encoding in some + system catalog tables into a human-readable string. + Returns an empty string if an invalid encoding number is provided. + + + + + + + pg_get_catalog_foreign_keys + + pg_get_catalog_foreign_keys () + setof record + ( fktable regclass, + fkcols text[], + pktable regclass, + pkcols text[], + is_array boolean, + is_opt boolean ) + + + Returns a set of records describing the foreign key relationships + that exist within the PostgreSQL system + catalogs. + The fktable column contains the name of the + referencing catalog, and the fkcols column + contains the name(s) of the referencing column(s). Similarly, + the pktable column contains the name of the + referenced catalog, and the pkcols column + contains the name(s) of the referenced column(s). + If is_array is true, the last referencing + column is an array, each of whose elements should match some entry + in the referenced catalog. + If is_opt is true, the referencing column(s) + are allowed to contain zeroes instead of a valid reference. + + + + + + + pg_get_constraintdef + + pg_get_constraintdef ( constraint oid , pretty boolean ) + text + + + Reconstructs the creating command for a constraint. + (This is a decompiled reconstruction, not the original text + of the command.) + + + + + + + pg_get_expr + + pg_get_expr ( expr pg_node_tree, relation oid , pretty boolean ) + text + + + Decompiles the internal form of an expression stored in the system + catalogs, such as the default value for a column. If the expression + might contain Vars, specify the OID of the relation they refer to as + the second parameter; if no Vars are expected, passing zero is + sufficient. + + + + + + + pg_get_functiondef + + pg_get_functiondef ( func oid ) + text + + + Reconstructs the creating command for a function or procedure. + (This is a decompiled reconstruction, not the original text + of the command.) + The result is a complete CREATE OR REPLACE FUNCTION + or CREATE OR REPLACE PROCEDURE statement. + + + + + + + pg_get_function_arguments + + pg_get_function_arguments ( func oid ) + text + + + Reconstructs the argument list of a function or procedure, in the form + it would need to appear in within CREATE FUNCTION + (including default values). + + + + + + + pg_get_function_identity_arguments + + pg_get_function_identity_arguments ( func oid ) + text + + + Reconstructs the argument list necessary to identify a function or + procedure, in the form it would need to appear in within commands such + as ALTER FUNCTION. This form omits default values. + + + + + + + pg_get_function_result + + pg_get_function_result ( func oid ) + text + + + Reconstructs the RETURNS clause of a function, in + the form it would need to appear in within CREATE + FUNCTION. Returns NULL for a procedure. + + + + + + + pg_get_indexdef + + pg_get_indexdef ( index oid , column integer, pretty boolean ) + text + + + Reconstructs the creating command for an index. + (This is a decompiled reconstruction, not the original text + of the command.) If column is supplied and is + not zero, only the definition of that column is reconstructed. + + + + + + + pg_get_keywords + + pg_get_keywords () + setof record + ( word text, + catcode "char", + barelabel boolean, + catdesc text, + baredesc text ) + + + Returns a set of records describing the SQL keywords recognized by the + server. The word column contains the + keyword. The catcode column contains a + category code: U for an unreserved + keyword, C for a keyword that can be a column + name, T for a keyword that can be a type or + function name, or R for a fully reserved keyword. + The barelabel column + contains true if the keyword can be used as + a bare column label in SELECT lists, + or false if it can only be used + after AS. + The catdesc column contains a + possibly-localized string describing the keyword's category. + The baredesc column contains a + possibly-localized string describing the keyword's column label status. + + + + + + + pg_get_partkeydef + + pg_get_partkeydef ( table oid ) + text + + + Reconstructs the definition of a partitioned table's partition + key, in the form it would have in the PARTITION + BY clause of CREATE TABLE. + (This is a decompiled reconstruction, not the original text + of the command.) + + + + + + + pg_get_ruledef + + pg_get_ruledef ( rule oid , pretty boolean ) + text + + + Reconstructs the creating command for a rule. + (This is a decompiled reconstruction, not the original text + of the command.) + + + + + + + pg_get_serial_sequence + + pg_get_serial_sequence ( table text, column text ) + text + + + Returns the name of the sequence associated with a column, + or NULL if no sequence is associated with the column. + If the column is an identity column, the associated sequence is the + sequence internally created for that column. + For columns created using one of the serial types + (serial, smallserial, bigserial), + it is the sequence created for that serial column definition. + In the latter case, the association can be modified or removed + with ALTER SEQUENCE OWNED BY. + (This function probably should have been + called pg_get_owned_sequence; its current name + reflects the fact that it has historically been used with serial-type + columns.) The first parameter is a table name with optional + schema, and the second parameter is a column name. Because the first + parameter potentially contains both schema and table names, it is + parsed per usual SQL rules, meaning it is lower-cased by default. + The second parameter, being just a column name, is treated literally + and so has its case preserved. The result is suitably formatted + for passing to the sequence functions (see + ). + + + A typical use is in reading the current value of the sequence for an + identity or serial column, for example: + +SELECT currval(pg_get_serial_sequence('sometable', 'id')); + + + + + + + + pg_get_statisticsobjdef + + pg_get_statisticsobjdef ( statobj oid ) + text + + + Reconstructs the creating command for an extended statistics object. + (This is a decompiled reconstruction, not the original text + of the command.) + + + + + + + pg_get_triggerdef + +pg_get_triggerdef ( trigger oid , pretty boolean ) + text + + + Reconstructs the creating command for a trigger. + (This is a decompiled reconstruction, not the original text + of the command.) + + + + + + + pg_get_userbyid + + pg_get_userbyid ( role oid ) + name + + + Returns a role's name given its OID. + + + + + + + pg_get_viewdef + + pg_get_viewdef ( view oid , pretty boolean ) + text + + + Reconstructs the underlying SELECT command for a + view or materialized view. (This is a decompiled reconstruction, not + the original text of the command.) + + + + + + pg_get_viewdef ( view oid, wrap_column integer ) + text + + + Reconstructs the underlying SELECT command for a + view or materialized view. (This is a decompiled reconstruction, not + the original text of the command.) In this form of the function, + pretty-printing is always enabled, and long lines are wrapped to try + to keep them shorter than the specified number of columns. + + + + + + pg_get_viewdef ( view text , pretty boolean ) + text + + + Reconstructs the underlying SELECT command for a + view or materialized view, working from a textual name for the view + rather than its OID. (This is deprecated; use the OID variant + instead.) + + + + + + + pg_index_column_has_property + + pg_index_column_has_property ( index regclass, column integer, property text ) + boolean + + + Tests whether an index column has the named property. + Common index column properties are listed in + . + (Note that extension access methods can define additional property + names for their indexes.) + NULL is returned if the property name is not known + or does not apply to the particular object, or if the OID or column + number does not identify a valid object. + + + + + + + pg_index_has_property + + pg_index_has_property ( index regclass, property text ) + boolean + + + Tests whether an index has the named property. + Common index properties are listed in + . + (Note that extension access methods can define additional property + names for their indexes.) + NULL is returned if the property name is not known + or does not apply to the particular object, or if the OID does not + identify a valid object. + + + + + + + pg_indexam_has_property + + pg_indexam_has_property ( am oid, property text ) + boolean + + + Tests whether an index access method has the named property. + Access method properties are listed in + . + NULL is returned if the property name is not known + or does not apply to the particular object, or if the OID does not + identify a valid object. + + + + + + + pg_options_to_table + + pg_options_to_table ( options_array text[] ) + setof record + ( option_name text, + option_value text ) + + + Returns the set of storage options represented by a value from + pg_class.reloptions or + pg_attribute.attoptions. + + + + + + + pg_settings_get_flags + + pg_settings_get_flags ( guc text ) + text[] + + + Returns an array of the flags associated with the given GUC, or + NULL if it does not exist. The result is + an empty array if the GUC exists but there are no flags to show. + Only the most useful flags listed in + are exposed. + + + + + + + pg_tablespace_databases + + pg_tablespace_databases ( tablespace oid ) + setof oid + + + Returns the set of OIDs of databases that have objects stored in the + specified tablespace. If this function returns any rows, the + tablespace is not empty and cannot be dropped. To identify the specific + objects populating the tablespace, you will need to connect to the + database(s) identified by pg_tablespace_databases + and query their pg_class catalogs. + + + + + + + pg_tablespace_location + + pg_tablespace_location ( tablespace oid ) + text + + + Returns the file system path that this tablespace is located in. + + + + + + + pg_typeof + + pg_typeof ( "any" ) + regtype + + + Returns the OID of the data type of the value that is passed to it. + This can be helpful for troubleshooting or dynamically constructing + SQL queries. The function is declared as + returning regtype, which is an OID alias type (see + ); this means that it is the same as an + OID for comparison purposes but displays as a type name. + + + pg_typeof(33) + integer + + + + + + + COLLATION FOR + + COLLATION FOR ( "any" ) + text + + + Returns the name of the collation of the value that is passed to it. + The value is quoted and schema-qualified if necessary. If no + collation was derived for the argument expression, + then NULL is returned. If the argument is not of a + collatable data type, then an error is raised. + + + collation for ('foo'::text) + "default" + + + collation for ('foo' COLLATE "de_DE") + "de_DE" + + + + + + + to_regclass + + to_regclass ( text ) + regclass + + + Translates a textual relation name to its OID. A similar result is + obtained by casting the string to type regclass (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regdatabase + + to_regdatabase ( text ) + regdatabase + + + Translates a textual database name to its OID. A similar result is + obtained by casting the string to type regdatabase (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regcollation + + to_regcollation ( text ) + regcollation + + + Translates a textual collation name to its OID. A similar result is + obtained by casting the string to type regcollation (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regnamespace + + to_regnamespace ( text ) + regnamespace + + + Translates a textual schema name to its OID. A similar result is + obtained by casting the string to type regnamespace (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regoper + + to_regoper ( text ) + regoper + + + Translates a textual operator name to its OID. A similar result is + obtained by casting the string to type regoper (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found or is ambiguous. + + + + + + + to_regoperator + + to_regoperator ( text ) + regoperator + + + Translates a textual operator name (with parameter types) to its OID. A similar result is + obtained by casting the string to type regoperator (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regproc + + to_regproc ( text ) + regproc + + + Translates a textual function or procedure name to its OID. A similar result is + obtained by casting the string to type regproc (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found or is ambiguous. + + + + + + + to_regprocedure + + to_regprocedure ( text ) + regprocedure + + + Translates a textual function or procedure name (with argument types) to its OID. A similar result is + obtained by casting the string to type regprocedure (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regrole + + to_regrole ( text ) + regrole + + + Translates a textual role name to its OID. A similar result is + obtained by casting the string to type regrole (see + ); however, this function will return + NULL rather than throwing an error if the name is + not found. + + + + + + + to_regtype + + to_regtype ( text ) + regtype + + + Parses a string of text, extracts a potential type name from it, + and translates that name into a type OID. A syntax error in the + string will result in an error; but if the string is a + syntactically valid type name that happens not to be found in the + catalogs, the result is NULL. A similar result + is obtained by casting the string to type regtype + (see ), except that that will throw + error for name not found. + + + + + + + to_regtypemod + + to_regtypemod ( text ) + integer + + + Parses a string of text, extracts a potential type name from it, + and translates its type modifier, if any. A syntax error in the + string will result in an error; but if the string is a + syntactically valid type name that happens not to be found in the + catalogs, the result is NULL. The result is + -1 if no type modifier is present. + + + to_regtypemod can be combined with + to produce appropriate inputs for + , allowing a string representing a + type name to be canonicalized. + + + format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)')) + character varying(32) + + + + +
+ + + Most of the functions that reconstruct (decompile) database objects + have an optional pretty flag, which + if true causes the result to + be pretty-printed. Pretty-printing suppresses unnecessary + parentheses and adds whitespace for legibility. + The pretty-printed format is more readable, but the default format + is more likely to be interpreted the same way by future versions of + PostgreSQL; so avoid using pretty-printed output + for dump purposes. Passing false for + the pretty parameter yields the same result as + omitting the parameter. + + + + Index Column Properties + + + + + NameDescription + + + + asc + Does the column sort in ascending order on a forward scan? + + + + desc + Does the column sort in descending order on a forward scan? + + + + nulls_first + Does the column sort with nulls first on a forward scan? + + + + nulls_last + Does the column sort with nulls last on a forward scan? + + + + orderable + Does the column possess any defined sort ordering? + + + + distance_orderable + Can the column be scanned in order by a distance + operator, for example ORDER BY col <-> constant ? + + + + returnable + Can the column value be returned by an index-only scan? + + + + search_array + Does the column natively support col = ANY(array) + searches? + + + + search_nulls + Does the column support IS NULL and + IS NOT NULL searches? + + + + +
+ + + Index Properties + + + + + NameDescription + + + + clusterable + Can the index be used in a CLUSTER command? + + + + index_scan + Does the index support plain (non-bitmap) scans? + + + + bitmap_scan + Does the index support bitmap scans? + + + + backward_scan + Can the scan direction be changed in mid-scan (to + support FETCH BACKWARD on a cursor without + needing materialization)? + + + + +
+ + + Index Access Method Properties + + + + + NameDescription + + + + can_order + Does the access method support ASC, + DESC and related keywords in + CREATE INDEX? + + + + can_unique + Does the access method support unique indexes? + + + + can_multi_col + Does the access method support indexes with multiple columns? + + + + can_exclude + Does the access method support exclusion constraints? + + + + can_include + Does the access method support the INCLUDE + clause of CREATE INDEX? + + + + +
+ + + GUC Flags + + + + + FlagDescription + + + + EXPLAIN + Parameters with this flag are included in + EXPLAIN (SETTINGS) commands. + + + + NO_SHOW_ALL + Parameters with this flag are excluded from + SHOW ALL commands. + + + + NO_RESET + Parameters with this flag do not support + RESET commands. + + + + NO_RESET_ALL + Parameters with this flag are excluded from + RESET ALL commands. + + + + NOT_IN_SAMPLE + Parameters with this flag are not included in + postgresql.conf by default. + + + + RUNTIME_COMPUTED + Parameters with this flag are runtime-computed ones. + + + + +
+ +
+ + + Object Information and Addressing Functions + + + lists functions related to + database object identification and addressing. + + + + Object Information and Addressing Functions + + + + + Function + + + Description + + + + + + + + + pg_get_acl + + pg_get_acl ( classid oid, objid oid, objsubid integer ) + aclitem[] + + + Returns the ACL for a database object, specified + by catalog OID, object OID and sub-object ID. This function returns + NULL values for undefined objects. + + + + + + + pg_describe_object + + pg_describe_object ( classid oid, objid oid, objsubid integer ) + text + + + Returns a textual description of a database object identified by + catalog OID, object OID, and sub-object ID (such as a column number + within a table; the sub-object ID is zero when referring to a whole + object). This description is intended to be human-readable, and might + be translated, depending on server configuration. This is especially + useful to determine the identity of an object referenced in the + pg_depend catalog. This function returns + NULL values for undefined objects. + + + + + + + pg_identify_object + + pg_identify_object ( classid oid, objid oid, objsubid integer ) + record + ( type text, + schema text, + name text, + identity text ) + + + Returns a row containing enough information to uniquely identify the + database object specified by catalog OID, object OID and sub-object + ID. + This information is intended to be machine-readable, and is never + translated. + type identifies the type of database object; + schema is the schema name that the object + belongs in, or NULL for object types that do not + belong to schemas; + name is the name of the object, quoted if + necessary, if the name (along with schema name, if pertinent) is + sufficient to uniquely identify the object, + otherwise NULL; + identity is the complete object identity, with + the precise format depending on object type, and each name within the + format being schema-qualified and quoted as necessary. Undefined + objects are identified with NULL values. + + + + + + + pg_identify_object_as_address + + pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) + record + ( type text, + object_names text[], + object_args text[] ) + + + Returns a row containing enough information to uniquely identify the + database object specified by catalog OID, object OID and sub-object + ID. + The returned information is independent of the current server, that + is, it could be used to identify an identically named object in + another server. + type identifies the type of database object; + object_names and + object_args + are text arrays that together form a reference to the object. + These three values can be passed + to pg_get_object_address to obtain the internal + address of the object. + + + + + + + pg_get_object_address + + pg_get_object_address ( type text, object_names text[], object_args text[] ) + record + ( classid oid, + objid oid, + objsubid integer ) + + + Returns a row containing enough information to uniquely identify the + database object specified by a type code and object name and argument + arrays. + The returned values are the ones that would be used in system catalogs + such as pg_depend; they can be passed to + other system functions such as pg_describe_object + or pg_identify_object. + classid is the OID of the system catalog + containing the object; + objid is the OID of the object itself, and + objsubid is the sub-object ID, or zero if none. + This function is the inverse + of pg_identify_object_as_address. + Undefined objects are identified with NULL values. + + + + +
+ + + pg_get_acl is useful for retrieving and inspecting + the privileges associated with database objects without looking at + specific catalogs. For example, to retrieve all the granted privileges + on objects in the current database: + +postgres=# SELECT + (pg_identify_object(s.classid,s.objid,s.objsubid)).*, + pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl +FROM pg_catalog.pg_shdepend AS s +JOIN pg_catalog.pg_database AS d + ON d.datname = current_database() AND + d.oid = s.dbid +JOIN pg_catalog.pg_authid AS a + ON a.oid = s.refobjid AND + s.refclassid = 'pg_authid'::regclass +WHERE s.deptype = 'a'; +-[ RECORD 1 ]----------------------------------------- +type | table +schema | public +name | testtab +identity | public.testtab +acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + + +
+ + + Comment Information Functions + + + comment + about database objects + + + + The functions shown in + extract comments previously stored with the + command. A null value is returned if no + comment could be found for the specified parameters. + + + + Comment Information Functions + + + + + Function + + + Description + + + + + + + + + col_description + + col_description ( table oid, column integer ) + text + + + Returns the comment for a table column, which is specified by the OID + of its table and its column number. + (obj_description cannot be used for table + columns, since columns do not have OIDs of their own.) + + + + + + + obj_description + + obj_description ( object oid, catalog name ) + text + + + Returns the comment for a database object specified by its OID and the + name of the containing system catalog. For + example, obj_description(123456, 'pg_class') would + retrieve the comment for the table with OID 123456. + + + + + + obj_description ( object oid ) + text + + + Returns the comment for a database object specified by its OID alone. + This is deprecated since there is no guarantee + that OIDs are unique across different system catalogs; therefore, the + wrong comment might be returned. + + + + + + + shobj_description + + shobj_description ( object oid, catalog name ) + text + + + Returns the comment for a shared database object specified by its OID + and the name of the containing system catalog. This is just + like obj_description except that it is used for + retrieving comments on shared objects (that is, databases, roles, and + tablespaces). Some system catalogs are global to all databases within + each cluster, and the descriptions for objects in them are stored + globally as well. + + + + +
+ +
+ + + Data Validity Checking Functions + + + The functions shown in + can be helpful for checking validity of proposed input data. + + + + Data Validity Checking Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + pg_input_is_valid + + pg_input_is_valid ( + string text, + type text + ) + boolean + + + Tests whether the given string is valid + input for the specified data type, returning true or false. + + + This function will only work as desired if the data type's input + function has been updated to report invalid input as + a soft error. Otherwise, invalid input will abort + the transaction, just as if the string had been cast to the type + directly. + + + pg_input_is_valid('42', 'integer') + t + + + pg_input_is_valid('42000000000', 'integer') + f + + + pg_input_is_valid('1234.567', 'numeric(7,4)') + f + + + + + + pg_input_error_info + + pg_input_error_info ( + string text, + type text + ) + record + ( message text, + detail text, + hint text, + sql_error_code text ) + + + Tests whether the given string is valid + input for the specified data type; if not, return the details of + the error that would have been thrown. If the input is valid, the + results are NULL. The inputs are the same as + for pg_input_is_valid. + + + This function will only work as desired if the data type's input + function has been updated to report invalid input as + a soft error. Otherwise, invalid input will abort + the transaction, just as if the string had been cast to the type + directly. + + + SELECT * FROM pg_input_error_info('42000000000', 'integer') + + + message | detail | hint | sql_error_code +------------------------------------------------------+--------+------+---------------- + value "42000000000" is out of range for type integer | | | 22003 + + + + + +
+ +
+ + + Transaction ID and Snapshot Information Functions + + + The functions shown in + provide server transaction information in an exportable form. The main + use of these functions is to determine which transactions were committed + between two snapshots. + + + + Transaction ID and Snapshot Information Functions + + + + + Function + + + Description + + + + + + + + + age + + age ( xid ) + integer + + + Returns the number of transactions between the supplied + transaction id and the current transaction counter. + + + + + + + mxid_age + + mxid_age ( xid ) + integer + + + Returns the number of multixacts IDs between the supplied + multixact ID and the current multixacts counter. + + + + + + + pg_current_xact_id + + pg_current_xact_id () + xid8 + + + Returns the current transaction's ID. It will assign a new one if the + current transaction does not have one already (because it has not + performed any database updates); see for details. If executed in a + subtransaction, this will return the top-level transaction ID; + see for details. + + + + + + + pg_current_xact_id_if_assigned + + pg_current_xact_id_if_assigned () + xid8 + + + Returns the current transaction's ID, or NULL if no + ID is assigned yet. (It's best to use this variant if the transaction + might otherwise be read-only, to avoid unnecessary consumption of an + XID.) + If executed in a subtransaction, this will return the top-level + transaction ID. + + + + + + + pg_xact_status + + pg_xact_status ( xid8 ) + text + + + Reports the commit status of a recent transaction. + The result is one of in progress, + committed, or aborted, + provided that the transaction is recent enough that the system retains + the commit status of that transaction. + If it is old enough that no references to the transaction survive in + the system and the commit status information has been discarded, the + result is NULL. + Applications might use this function, for example, to determine + whether their transaction committed or aborted after the application + and database server become disconnected while + a COMMIT is in progress. + Note that prepared transactions are reported as in + progress; applications must check pg_prepared_xacts + if they need to determine whether a transaction ID belongs to a + prepared transaction. + + + + + + + pg_current_snapshot + + pg_current_snapshot () + pg_snapshot + + + Returns a current snapshot, a data structure + showing which transaction IDs are now in-progress. + Only top-level transaction IDs are included in the snapshot; + subtransaction IDs are not shown; see + for details. + + + + + + + pg_snapshot_xip + + pg_snapshot_xip ( pg_snapshot ) + setof xid8 + + + Returns the set of in-progress transaction IDs contained in a snapshot. + + + + + + + pg_snapshot_xmax + + pg_snapshot_xmax ( pg_snapshot ) + xid8 + + + Returns the xmax of a snapshot. + + + + + + + pg_snapshot_xmin + + pg_snapshot_xmin ( pg_snapshot ) + xid8 + + + Returns the xmin of a snapshot. + + + + + + + pg_visible_in_snapshot + + pg_visible_in_snapshot ( xid8, pg_snapshot ) + boolean + + + Is the given transaction ID visible according + to this snapshot (that is, was it completed before the snapshot was + taken)? Note that this function will not give the correct answer for + a subtransaction ID (subxid); see for + details. + + + + + + + pg_get_multixact_members + + pg_get_multixact_members ( multixid xid ) + setof record + ( xid xid, + mode text ) + + + Returns the transaction ID and lock mode for each member of the + specified multixact ID. The lock modes forupd, + fornokeyupd, sh, and + keysh correspond to the row-level locks + FOR UPDATE, FOR NO KEY UPDATE, + FOR SHARE, and FOR KEY SHARE, + respectively, as described in . Two + additional modes are specific to multixacts: + nokeyupd, used by updates that do not modify key + columns, and upd, used by updates or deletes that + modify key columns. + + + + +
+ + + The internal transaction ID type xid is 32 bits wide and + wraps around every 4 billion transactions. However, + the functions shown in , except + age, mxid_age, and + pg_get_multixact_members, use a + 64-bit type xid8 that does not wrap around during the life + of an installation and can be converted to xid by casting if + required; see for details. + The data type pg_snapshot stores information about + transaction ID visibility at a particular moment in time. Its components + are described in . + pg_snapshot's textual representation is + xmin:xmax:xip_list. + For example 10:20:10,14,15 means + xmin=10, xmax=20, xip_list=10, 14, 15. + + + + Snapshot Components + + + + + + Name + Description + + + + + + xmin + + Lowest transaction ID that was still active. All transaction IDs + less than xmin are either committed and visible, + or rolled back and dead. + + + + + xmax + + One past the highest completed transaction ID. All transaction IDs + greater than or equal to xmax had not yet + completed as of the time of the snapshot, and thus are invisible. + + + + + xip_list + + Transactions in progress at the time of the snapshot. A transaction + ID that is xmin <= X < + xmax and not in this list was already completed at the time + of the snapshot, and thus is either visible or dead according to its + commit status. This list does not include the transaction IDs of + subtransactions (subxids). + + + + +
+ + + In releases of PostgreSQL before 13 there was + no xid8 type, so variants of these functions were provided + that used bigint to represent a 64-bit XID, with a + correspondingly distinct snapshot data type txid_snapshot. + These older functions have txid in their names. They + are still supported for backward compatibility, but may be removed from a + future release. See . + + + + Deprecated Transaction ID and Snapshot Information Functions + + + + + Function + + + Description + + + + + + + + + + txid_current + + txid_current () + bigint + + + See pg_current_xact_id(). + + + + + + + txid_current_if_assigned + + txid_current_if_assigned () + bigint + + + See pg_current_xact_id_if_assigned(). + + + + + + + txid_current_snapshot + + txid_current_snapshot () + txid_snapshot + + + See pg_current_snapshot(). + + + + + + + txid_snapshot_xip + + txid_snapshot_xip ( txid_snapshot ) + setof bigint + + + See pg_snapshot_xip(). + + + + + + + txid_snapshot_xmax + + txid_snapshot_xmax ( txid_snapshot ) + bigint + + + See pg_snapshot_xmax(). + + + + + + + txid_snapshot_xmin + + txid_snapshot_xmin ( txid_snapshot ) + bigint + + + See pg_snapshot_xmin(). + + + + + + + txid_visible_in_snapshot + + txid_visible_in_snapshot ( bigint, txid_snapshot ) + boolean + + + See pg_visible_in_snapshot(). + + + + + + + txid_status + + txid_status ( bigint ) + text + + + See pg_xact_status(). + + + + +
+ +
+ + + Committed Transaction Information Functions + + + The functions shown in + provide information about when past transactions were committed. + They only provide useful data when the + configuration option is + enabled, and only for transactions that were committed after it was + enabled. Commit timestamp information is routinely removed during + vacuum. + + + + Committed Transaction Information Functions + + + + + Function + + + Description + + + + + + + + + pg_xact_commit_timestamp + + pg_xact_commit_timestamp ( xid ) + timestamp with time zone + + + Returns the commit timestamp of a transaction. + + + + + + + pg_xact_commit_timestamp_origin + + pg_xact_commit_timestamp_origin ( xid ) + record + ( timestamp timestamp with time zone, + roident oid) + + + Returns the commit timestamp and replication origin of a transaction. + + + + + + + pg_last_committed_xact + + pg_last_committed_xact () + record + ( xid xid, + timestamp timestamp with time zone, + roident oid ) + + + Returns the transaction ID, commit timestamp and replication origin + of the latest committed transaction. + + + + +
+ +
+ + + Control Data Functions + + + The functions shown in + print information initialized during initdb, such + as the catalog version. They also show information about write-ahead + logging and checkpoint processing. This information is cluster-wide, + not specific to any one database. These functions provide most of the same + information, from the same source, as the + application. + + + + Control Data Functions + + + + + Function + + + Description + + + + + + + + + pg_control_checkpoint + + pg_control_checkpoint () + record + + + Returns information about current checkpoint state, as shown in + . + + + + + + + pg_control_system + + pg_control_system () + record + + + Returns information about current control file state, as shown in + . + + + + + + + pg_control_init + + pg_control_init () + record + + + Returns information about cluster initialization state, as shown in + . + + + + + + + pg_control_recovery + + pg_control_recovery () + record + + + Returns information about recovery state, as shown in + . + + + + +
+ + + <function>pg_control_checkpoint</function> Output Columns + + + + Column Name + Data Type + + + + + + + checkpoint_lsn + pg_lsn + + + + redo_lsn + pg_lsn + + + + redo_wal_file + text + + + + timeline_id + integer + + + + prev_timeline_id + integer + + + + full_page_writes + boolean + + + + next_xid + text + + + + next_oid + oid + + + + next_multixact_id + xid + + + + next_multi_offset + xid + + + + oldest_xid + xid + + + + oldest_xid_dbid + oid + + + + oldest_active_xid + xid + + + + oldest_multi_xid + xid + + + + oldest_multi_dbid + oid + + + + oldest_commit_ts_xid + xid + + + + newest_commit_ts_xid + xid + + + + checkpoint_time + timestamp with time zone + + + + +
+ + + <function>pg_control_system</function> Output Columns + + + + Column Name + Data Type + + + + + + + pg_control_version + integer + + + + catalog_version_no + integer + + + + system_identifier + bigint + + + + pg_control_last_modified + timestamp with time zone + + + + +
+ + + <function>pg_control_init</function> Output Columns + + + + Column Name + Data Type + + + + + + + max_data_alignment + integer + + + + database_block_size + integer + + + + blocks_per_segment + integer + + + + wal_block_size + integer + + + + bytes_per_wal_segment + integer + + + + max_identifier_length + integer + + + + max_index_columns + integer + + + + max_toast_chunk_size + integer + + + + large_object_chunk_size + integer + + + + float8_pass_by_value + boolean + + + + data_page_checksum_version + integer + + + + default_char_signedness + boolean + + + + +
+ + + <function>pg_control_recovery</function> Output Columns + + + + Column Name + Data Type + + + + + + + min_recovery_end_lsn + pg_lsn + + + + min_recovery_end_timeline + integer + + + + backup_start_lsn + pg_lsn + + + + backup_end_lsn + pg_lsn + + + + end_of_backup_record_required + boolean + + + + +
+ +
+ + + Version Information Functions + + + The functions shown in + print version information. + + + + Version Information Functions + + + + + Function + + + Description + + + + + + + + + version + + version () + text + + + Returns a string describing the PostgreSQL + server's version. You can also get this information from + , or for a machine-readable + version use . Software + developers should use server_version_num (available + since 8.2) or instead of + parsing the text version. + + + + + + + unicode_version + + unicode_version () + text + + + Returns a string representing the version of Unicode used by + PostgreSQL. + + + + + + icu_unicode_version + + icu_unicode_version () + text + + + Returns a string representing the version of Unicode used by ICU, if + the server was built with ICU support; otherwise returns + NULL + + + +
+ +
+ + + WAL Summarization Information Functions + + + The functions shown in + print information about the status of WAL summarization. + See . + + + + WAL Summarization Information Functions + + + + + Function + + + Description + + + + + + + + + pg_available_wal_summaries + + pg_available_wal_summaries () + setof record + ( tli bigint, + start_lsn pg_lsn, + end_lsn pg_lsn ) + + + Returns information about the WAL summary files present in the + data directory, under pg_wal/summaries. + One row will be returned per WAL summary file. Each file summarizes + WAL on the indicated TLI within the indicated LSN range. This function + might be useful to determine whether enough WAL summaries are present + on the server to take an incremental backup based on some prior + backup whose start LSN is known. + + + + + + + pg_wal_summary_contents + + pg_wal_summary_contents ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn ) + setof record + ( relfilenode oid, + reltablespace oid, + reldatabase oid, + relforknumber smallint, + relblocknumber bigint, + is_limit_block boolean ) + + + Returns one information about the contents of a single WAL summary file + identified by TLI and starting and ending LSNs. Each row with + is_limit_block false indicates that the block + identified by the remaining output columns was modified by at least + one WAL record within the range of records summarized by this file. + Each row with is_limit_block true indicates either + that (a) the relation fork was truncated to the length given by + relblocknumber within the relevant range of WAL + records or (b) that the relation fork was created or dropped within + the relevant range of WAL records; in such cases, + relblocknumber will be zero. + + + + + + + pg_get_wal_summarizer_state + + pg_get_wal_summarizer_state () + record + ( summarized_tli bigint, + summarized_lsn pg_lsn, + pending_lsn pg_lsn, + summarizer_pid int ) + + + Returns information about the progress of the WAL summarizer. If the + WAL summarizer has never run since the instance was started, then + summarized_tli and summarized_lsn + will be 0 and 0/00000000 respectively; + otherwise, they will be the TLI and ending LSN of the last WAL summary + file written to disk. If the WAL summarizer is currently running, + pending_lsn will be the ending LSN of the last + record that it has consumed, which must always be greater than or + equal to summarized_lsn; if the WAL summarizer is + not running, it will be equal to summarized_lsn. + summarizer_pid is the PID of the WAL summarizer + process, if it is running, and otherwise NULL. + + + As a special exception, the WAL summarizer will refuse to generate + WAL summary files if run on WAL generated under + wal_level=minimal, since such summaries would be + unsafe to use as the basis for an incremental backup. In this case, + the fields above will continue to advance as if summaries were being + generated, but nothing will be written to disk. Once the summarizer + reaches WAL generated while wal_level was set + to replica or higher, it will resume writing + summaries to disk. + + + + +
+ +
+ +
diff --git a/doc/src/sgml/func/func-json.sgml b/doc/src/sgml/func/func-json.sgml new file mode 100644 index 0000000000000..91f98a345d445 --- /dev/null +++ b/doc/src/sgml/func/func-json.sgml @@ -0,0 +1,3945 @@ + + JSON Functions and Operators + + + JSON + functions and operators + + + SQL/JSON + functions and expressions + + + + This section describes: + + + + + functions and operators for processing and creating JSON data + + + + + the SQL/JSON path language + + + + + the SQL/JSON query functions + + + + + + + To provide native support for JSON data types within the SQL environment, + PostgreSQL implements the + SQL/JSON data model. + This model comprises sequences of items. Each item can hold SQL scalar + values, with an additional SQL/JSON null value, and composite data structures + that use JSON arrays and objects. The model is a formalization of the implied + data model in the JSON specification + RFC 7159. + + + + SQL/JSON allows you to handle JSON data alongside regular SQL data, + with transaction support, including: + + + + + Uploading JSON data into the database and storing it in + regular SQL columns as character or binary strings. + + + + + Generating JSON objects and arrays from relational data. + + + + + Querying JSON data using SQL/JSON query functions and + SQL/JSON path language expressions. + + + + + + + To learn more about the SQL/JSON standard, see + . For details on JSON types + supported in PostgreSQL, + see . + + + + Processing and Creating JSON Data + + + shows the operators that + are available for use with JSON data types (see ). + In addition, the usual comparison operators shown in are available for + jsonb, though not for json. The comparison + operators follow the ordering rules for B-tree operations outlined in + . + See also for the aggregate + function json_agg which aggregates record + values as JSON, the aggregate function + json_object_agg which aggregates pairs of values + into a JSON object, and their jsonb equivalents, + jsonb_agg and jsonb_object_agg. + + + + <type>json</type> and <type>jsonb</type> Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + json -> integer + json + + + jsonb -> integer + jsonb + + + Extracts n'th element of JSON array + (array elements are indexed from zero, but negative integers count + from the end). + + + '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> 2 + {"c":"baz"} + + + '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> -3 + {"a":"foo"} + + + + + + json -> text + json + + + jsonb -> text + jsonb + + + Extracts JSON object field with the given key. + + + '{"a": {"b":"foo"}}'::json -> 'a' + {"b":"foo"} + + + + + + json ->> integer + text + + + jsonb ->> integer + text + + + Extracts n'th element of JSON array, + as text. + + + '[1,2,3]'::json ->> 2 + 3 + + + + + + json ->> text + text + + + jsonb ->> text + text + + + Extracts JSON object field with the given key, as text. + + + '{"a":1,"b":2}'::json ->> 'b' + 2 + + + + + + json #> text[] + json + + + jsonb #> text[] + jsonb + + + Extracts JSON sub-object at the specified path, where path elements + can be either field keys or array indexes. + + + '{"a": {"b": ["foo","bar"]}}'::json #> '{a,b,1}' + "bar" + + + + + + json #>> text[] + text + + + jsonb #>> text[] + text + + + Extracts JSON sub-object at the specified path as text. + + + '{"a": {"b": ["foo","bar"]}}'::json #>> '{a,b,1}' + bar + + + + +
+ + + + The field/element/path extraction operators return NULL, rather than + failing, if the JSON input does not have the right structure to match + the request; for example if no such key or array element exists. + + + + + Some further operators exist only for jsonb, as shown + in . + + describes how these operators can be used to effectively search indexed + jsonb data. + + + + Additional <type>jsonb</type> Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + jsonb @> jsonb + boolean + + + Does the first JSON value contain the second? + (See for details about containment.) + + + '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb + t + + + + + + jsonb <@ jsonb + boolean + + + Is the first JSON value contained in the second? + + + '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb + t + + + + + + jsonb ? text + boolean + + + Does the text string exist as a top-level key or array element within + the JSON value? + + + '{"a":1, "b":2}'::jsonb ? 'b' + t + + + '["a", "b", "c"]'::jsonb ? 'b' + t + + + + + + jsonb ?| text[] + boolean + + + Do any of the strings in the text array exist as top-level keys or + array elements? + + + '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] + t + + + + + + jsonb ?& text[] + boolean + + + Do all of the strings in the text array exist as top-level keys or + array elements? + + + '["a", "b", "c"]'::jsonb ?& array['a', 'b'] + t + + + + + + jsonb || jsonb + jsonb + + + Concatenates two jsonb values. + Concatenating two arrays generates an array containing all the + elements of each input. Concatenating two objects generates an + object containing the union of their + keys, taking the second object's value when there are duplicate keys. + All other cases are treated by converting a non-array input into a + single-element array, and then proceeding as for two arrays. + Does not operate recursively: only the top-level array or object + structure is merged. + + + '["a", "b"]'::jsonb || '["a", "d"]'::jsonb + ["a", "b", "a", "d"] + + + '{"a": "b"}'::jsonb || '{"c": "d"}'::jsonb + {"a": "b", "c": "d"} + + + '[1, 2]'::jsonb || '3'::jsonb + [1, 2, 3] + + + '{"a": "b"}'::jsonb || '42'::jsonb + [{"a": "b"}, 42] + + + To append an array to another array as a single entry, wrap it + in an additional layer of array, for example: + + + '[1, 2]'::jsonb || jsonb_build_array('[3, 4]'::jsonb) + [1, 2, [3, 4]] + + + + + + jsonb - text + jsonb + + + Deletes a key (and its value) from a JSON object, or matching string + value(s) from a JSON array. + + + '{"a": "b", "c": "d"}'::jsonb - 'a' + {"c": "d"} + + + '["a", "b", "c", "b"]'::jsonb - 'b' + ["a", "c"] + + + + + + jsonb - text[] + jsonb + + + Deletes all matching keys or array elements from the left operand. + + + '{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[] + {} + + + + + + jsonb - integer + jsonb + + + Deletes the array element with specified index (negative + integers count from the end). Throws an error if JSON value + is not an array. + + + '["a", "b"]'::jsonb - 1 + ["a"] + + + + + + jsonb #- text[] + jsonb + + + Deletes the field or array element at the specified path, where path + elements can be either field keys or array indexes. + + + '["a", {"b":1}]'::jsonb #- '{1,b}' + ["a", {}] + + + + + + jsonb @? jsonpath + boolean + + + Does JSON path return any item for the specified JSON value? + (This is useful only with SQL-standard JSON path expressions, not + predicate check + expressions, since those always return a value.) + + + '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] ? (@ > 2)' + t + + + + + + jsonb @@ jsonpath + boolean + + + Returns the result of a JSON path predicate check for the + specified JSON value. + (This is useful only + with predicate + check expressions, not SQL-standard JSON path expressions, + since it will return NULL if the path result is + not a single boolean value.) + + + '{"a":[1,2,3,4,5]}'::jsonb @@ '$.a[*] > 2' + t + + + + +
+ + + + The jsonpath operators @? + and @@ suppress the following errors: missing object + field or array element, unexpected JSON item type, datetime and numeric + errors. The jsonpath-related functions described below can + also be told to suppress these types of errors. This behavior might be + helpful when searching JSON document collections of varying structure. + + + + + shows the functions that are + available for constructing json and jsonb values. + Some functions in this table have a RETURNING clause, + which specifies the data type returned. It must be one of json, + jsonb, bytea, a character string type (text, + char, or varchar), or a type + that can be cast to json. + By default, the json type is returned. + + + + JSON Creation Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + to_json + + to_json ( anyelement ) + json + + + + to_jsonb + + to_jsonb ( anyelement ) + jsonb + + + Converts any SQL value to json or jsonb. + Arrays and composites are converted recursively to arrays and + objects (multidimensional arrays become arrays of arrays in JSON). + Otherwise, if there is a cast from the SQL data type + to json, the cast function will be used to perform the + conversion; + + For example, the extension has a cast + from hstore to json, so that + hstore values converted via the JSON creation functions + will be represented as JSON objects, not as primitive string values. + + + otherwise, a scalar JSON value is produced. For any scalar other than + a number, a Boolean, or a null value, the text representation will be + used, with escaping as necessary to make it a valid JSON string value. + + + to_json('Fred said "Hi."'::text) + "Fred said \"Hi.\"" + + + to_jsonb(row(42, 'Fred said "Hi."'::text)) + {"f1": 42, "f2": "Fred said \"Hi.\""} + + + + + + + array_to_json + + array_to_json ( anyarray , boolean ) + json + + + Converts an SQL array to a JSON array. The behavior is the same + as to_json except that line feeds will be added + between top-level array elements if the optional boolean parameter is + true. + + + array_to_json('{{1,5},{99,100}}'::int[]) + [[1,5],[99,100]] + + + + + + + json_array + json_array ( + { value_expression FORMAT JSON } , ... + { NULL | ABSENT } ON NULL + RETURNING data_type FORMAT JSON ENCODING UTF8 ) + + + json_array ( + query_expression + RETURNING data_type FORMAT JSON ENCODING UTF8 ) + + + Constructs a JSON array from either a series of + value_expression parameters or from the results + of query_expression, + which must be a SELECT query returning a single column. If + ABSENT ON NULL is specified, NULL values are ignored. + This is always the case if a + query_expression is used. + + + json_array(1,true,json '{"a":null}') + [1, true, {"a":null}] + + + json_array(SELECT * FROM (VALUES(1),(2)) t) + [1, 2] + + + + + + + row_to_json + + row_to_json ( record , boolean ) + json + + + Converts an SQL composite value to a JSON object. The behavior is the + same as to_json except that line feeds will be + added between top-level elements if the optional boolean parameter is + true. + + + row_to_json(row(1,'foo')) + {"f1":1,"f2":"foo"} + + + + + + + json_build_array + + json_build_array ( VARIADIC "any" ) + json + + + + jsonb_build_array + + jsonb_build_array ( VARIADIC "any" ) + jsonb + + + Builds a possibly-heterogeneously-typed JSON array out of a variadic + argument list. Each argument is converted as + per to_json or to_jsonb. + + + json_build_array(1, 2, 'foo', 4, 5) + [1, 2, "foo", 4, 5] + + + + + + + json_build_object + + json_build_object ( VARIADIC "any" ) + json + + + + jsonb_build_object + + jsonb_build_object ( VARIADIC "any" ) + jsonb + + + Builds a JSON object out of a variadic argument list. By convention, + the argument list consists of alternating keys and values. Key + arguments are coerced to text; value arguments are converted as + per to_json or to_jsonb. + + + json_build_object('foo', 1, 2, row(3,'bar')) + {"foo" : 1, "2" : {"f1":3,"f2":"bar"}} + + + + + + json_object + json_object ( + { key_expression { VALUE | ':' } + value_expression FORMAT JSON ENCODING UTF8 }, ... + { NULL | ABSENT } ON NULL + { WITH | WITHOUT } UNIQUE KEYS + RETURNING data_type FORMAT JSON ENCODING UTF8 ) + + + Constructs a JSON object of all the key/value pairs given, + or an empty object if none are given. + key_expression is a scalar expression + defining the JSON key, which is + converted to the text type. + It cannot be NULL nor can it + belong to a type that has a cast to the json type. + If WITH UNIQUE KEYS is specified, there must not + be any duplicate key_expression. + Any pair for which the value_expression + evaluates to NULL is omitted from the output + if ABSENT ON NULL is specified; + if NULL ON NULL is specified or the clause + omitted, the key is included with value NULL. + + + json_object('code' VALUE 'P123', 'title': 'Jaws') + {"code" : "P123", "title" : "Jaws"} + + + + + + + json_object + + json_object ( text[] ) + json + + + + jsonb_object + + jsonb_object ( text[] ) + jsonb + + + Builds a JSON object out of a text array. The array must have either + exactly one dimension with an even number of members, in which case + they are taken as alternating key/value pairs, or two dimensions + such that each inner array has exactly two elements, which + are taken as a key/value pair. All values are converted to JSON + strings. + + + json_object('{a, 1, b, "def", c, 3.5}') + {"a" : "1", "b" : "def", "c" : "3.5"} + + json_object('{{a, 1}, {b, "def"}, {c, 3.5}}') + {"a" : "1", "b" : "def", "c" : "3.5"} + + + + + + json_object ( keys text[], values text[] ) + json + + + jsonb_object ( keys text[], values text[] ) + jsonb + + + This form of json_object takes keys and values + pairwise from separate text arrays. Otherwise it is identical to + the one-argument form. + + + json_object('{a,b}', '{1,2}') + {"a": "1", "b": "2"} + + + + + + json constructor + json ( + expression + FORMAT JSON ENCODING UTF8 + { WITH | WITHOUT } UNIQUE KEYS ) + json + + + Converts a given expression specified as text or + bytea string (in UTF8 encoding) into a JSON + value. If expression is NULL, an + SQL null value is returned. + If WITH UNIQUE is specified, the + expression must not contain any duplicate + object keys. + + + json('{"a":123, "b":[true,"foo"], "a":"bar"}') + {"a":123, "b":[true,"foo"], "a":"bar"} + + + + + + + json_scalar + json_scalar ( expression ) + + + Converts a given SQL scalar value into a JSON scalar value. + If the input is NULL, an SQL null is returned. If + the input is number or a boolean value, a corresponding JSON number + or boolean value is returned. For any other value, a JSON string is + returned. + + + json_scalar(123.45) + 123.45 + + + json_scalar(CURRENT_TIMESTAMP) + "2022-05-10T10:51:04.62128-04:00" + + + + + + json_serialize ( + expression FORMAT JSON ENCODING UTF8 + RETURNING data_type FORMAT JSON ENCODING UTF8 ) + + + Converts an SQL/JSON expression into a character or binary string. The + expression can be of any JSON type, any + character string type, or bytea in UTF8 encoding. + The returned type used in RETURNING can be any + character string type or bytea. The default is + text. + + + json_serialize('{ "a" : 1 } ' RETURNING bytea) + \x7b20226122203a2031207d20 + + + + +
+ + + details SQL/JSON + facilities for testing JSON. + + + + SQL/JSON Testing Functions + + + + + Function signature + + + Description + + + Example(s) + + + + + + + IS JSON + expression IS NOT JSON + { VALUE | SCALAR | ARRAY | OBJECT } + { WITH | WITHOUT } UNIQUE KEYS + + + This predicate tests whether expression can be + parsed as JSON, possibly of a specified type. + If SCALAR or ARRAY or + OBJECT is specified, the + test is whether or not the JSON is of that particular type. If + WITH UNIQUE KEYS is specified, then any object in the + expression is also tested to see if it + has duplicate keys. + + + +SELECT js, + js IS JSON "json?", + js IS JSON SCALAR "scalar?", + js IS JSON OBJECT "object?", + js IS JSON ARRAY "array?" +FROM (VALUES + ('123'), ('"abc"'), ('{"a": "b"}'), ('[1,2]'),('abc')) foo(js); + js | json? | scalar? | object? | array? +------------+-------+---------+---------+-------- + 123 | t | t | f | f + "abc" | t | t | f | f + {"a": "b"} | t | f | t | f + [1,2] | t | f | f | t + abc | f | f | f | f + + + + +SELECT js, + js IS JSON OBJECT "object?", + js IS JSON ARRAY "array?", + js IS JSON ARRAY WITH UNIQUE KEYS "array w. UK?", + js IS JSON ARRAY WITHOUT UNIQUE KEYS "array w/o UK?" +FROM (VALUES ('[{"a":"1"}, + {"b":"2","b":"3"}]')) foo(js); +-[ RECORD 1 ]-+-------------------- +js | [{"a":"1"}, + + | {"b":"2","b":"3"}] +object? | f +array? | t +array w. UK? | f +array w/o UK? | t + + + + + +
+ + + shows the functions that + are available for processing json and jsonb values. + + + + JSON Processing Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + json_array_elements + + json_array_elements ( json ) + setof json + + + + jsonb_array_elements + + jsonb_array_elements ( jsonb ) + setof jsonb + + + Expands the top-level JSON array into a set of JSON values. + + + select * from json_array_elements('[1,true, [2,false]]') + + + value +----------- + 1 + true + [2,false] + + + + + + + + json_array_elements_text + + json_array_elements_text ( json ) + setof text + + + + jsonb_array_elements_text + + jsonb_array_elements_text ( jsonb ) + setof text + + + Expands the top-level JSON array into a set of text values. + + + select * from json_array_elements_text('["foo", "bar"]') + + + value +----------- + foo + bar + + + + + + + + json_array_length + + json_array_length ( json ) + integer + + + + jsonb_array_length + + jsonb_array_length ( jsonb ) + integer + + + Returns the number of elements in the top-level JSON array. + + + json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]') + 5 + + + jsonb_array_length('[]') + 0 + + + + + + + json_each + + json_each ( json ) + setof record + ( key text, + value json ) + + + + jsonb_each + + jsonb_each ( jsonb ) + setof record + ( key text, + value jsonb ) + + + Expands the top-level JSON object into a set of key/value pairs. + + + select * from json_each('{"a":"foo", "b":"bar"}') + + + key | value +-----+------- + a | "foo" + b | "bar" + + + + + + + + json_each_text + + json_each_text ( json ) + setof record + ( key text, + value text ) + + + + jsonb_each_text + + jsonb_each_text ( jsonb ) + setof record + ( key text, + value text ) + + + Expands the top-level JSON object into a set of key/value pairs. + The returned values will be of + type text. + + + select * from json_each_text('{"a":"foo", "b":"bar"}') + + + key | value +-----+------- + a | foo + b | bar + + + + + + + + json_extract_path + + json_extract_path ( from_json json, VARIADIC path_elems text[] ) + json + + + + jsonb_extract_path + + jsonb_extract_path ( from_json jsonb, VARIADIC path_elems text[] ) + jsonb + + + Extracts JSON sub-object at the specified path. + (This is functionally equivalent to the #> + operator, but writing the path out as a variadic list can be more + convenient in some cases.) + + + json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}', 'f4', 'f6') + "foo" + + + + + + + json_extract_path_text + + json_extract_path_text ( from_json json, VARIADIC path_elems text[] ) + text + + + + jsonb_extract_path_text + + jsonb_extract_path_text ( from_json jsonb, VARIADIC path_elems text[] ) + text + + + Extracts JSON sub-object at the specified path as text. + (This is functionally equivalent to the #>> + operator.) + + + json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}', 'f4', 'f6') + foo + + + + + + + json_object_keys + + json_object_keys ( json ) + setof text + + + + jsonb_object_keys + + jsonb_object_keys ( jsonb ) + setof text + + + Returns the set of keys in the top-level JSON object. + + + select * from json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') + + + json_object_keys +------------------ + f1 + f2 + + + + + + + + json_populate_record + + json_populate_record ( base anyelement, from_json json ) + anyelement + + + + jsonb_populate_record + + jsonb_populate_record ( base anyelement, from_json jsonb ) + anyelement + + + Expands the top-level JSON object to a row having the composite type + of the base argument. The JSON object + is scanned for fields whose names match column names of the output row + type, and their values are inserted into those columns of the output. + (Fields that do not correspond to any output column name are ignored.) + In typical use, the value of base is just + NULL, which means that any output columns that do + not match any object field will be filled with nulls. However, + if base isn't NULL then + the values it contains will be used for unmatched columns. + + + To convert a JSON value to the SQL type of an output column, the + following rules are applied in sequence: + + + + A JSON null value is converted to an SQL null in all cases. + + + + + If the output column is of type json + or jsonb, the JSON value is just reproduced exactly. + + + + + If the output column is a composite (row) type, and the JSON value + is a JSON object, the fields of the object are converted to columns + of the output row type by recursive application of these rules. + + + + + Likewise, if the output column is an array type and the JSON value + is a JSON array, the elements of the JSON array are converted to + elements of the output array by recursive application of these + rules. + + + + + Otherwise, if the JSON value is a string, the contents of the + string are fed to the input conversion function for the column's + data type. + + + + + Otherwise, the ordinary text representation of the JSON value is + fed to the input conversion function for the column's data type. + + + + + + While the example below uses a constant JSON value, typical use would + be to reference a json or jsonb column + laterally from another table in the query's FROM + clause. Writing json_populate_record in + the FROM clause is good practice, since all of the + extracted columns are available for use without duplicate function + calls. + + + create type subrowtype as (d int, e text); + create type myrowtype as (a int, b text[], c subrowtype); + + + select * from json_populate_record(null::myrowtype, + '{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "a b c"}, "x": "foo"}') + + + a | b | c +---+-----------+------------- + 1 | {2,"a b"} | (4,"a b c") + + + + + + + + jsonb_populate_record_valid + + jsonb_populate_record_valid ( base anyelement, from_json json ) + boolean + + + Function for testing jsonb_populate_record. Returns + true if the input jsonb_populate_record + would finish without an error for the given input JSON object; that is, it's + valid input, false otherwise. + + + create type jsb_char2 as (a char(2)); + + + select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aaa"}'); + + + jsonb_populate_record_valid +----------------------------- + f +(1 row) + + + select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aaa"}') q; + + +ERROR: value too long for type character(2) + + select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aa"}'); + + + jsonb_populate_record_valid +----------------------------- + t +(1 row) + + + select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aa"}') q; + + + a +---- + aa +(1 row) + + + + + + + + json_populate_recordset + + json_populate_recordset ( base anyelement, from_json json ) + setof anyelement + + + + jsonb_populate_recordset + + jsonb_populate_recordset ( base anyelement, from_json jsonb ) + setof anyelement + + + Expands the top-level JSON array of objects to a set of rows having + the composite type of the base argument. + Each element of the JSON array is processed as described above + for json[b]_populate_record. + + + create type twoints as (a int, b int); + + + select * from json_populate_recordset(null::twoints, '[{"a":1,"b":2}, {"a":3,"b":4}]') + + + a | b +---+--- + 1 | 2 + 3 | 4 + + + + + + + + json_to_record + + json_to_record ( json ) + record + + + + jsonb_to_record + + jsonb_to_record ( jsonb ) + record + + + Expands the top-level JSON object to a row having the composite type + defined by an AS clause. (As with all functions + returning record, the calling query must explicitly + define the structure of the record with an AS + clause.) The output record is filled from fields of the JSON object, + in the same way as described above + for json[b]_populate_record. Since there is no + input record value, unmatched columns are always filled with nulls. + + + create type myrowtype as (a int, b text); + + + select * from json_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int, b text, c int[], d text, r myrowtype) + + + a | b | c | d | r +---+---------+---------+---+--------------- + 1 | [1,2,3] | {1,2,3} | | (123,"a b c") + + + + + + + + json_to_recordset + + json_to_recordset ( json ) + setof record + + + + jsonb_to_recordset + + jsonb_to_recordset ( jsonb ) + setof record + + + Expands the top-level JSON array of objects to a set of rows having + the composite type defined by an AS clause. (As + with all functions returning record, the calling query + must explicitly define the structure of the record with + an AS clause.) Each element of the JSON array is + processed as described above + for json[b]_populate_record. + + + select * from json_to_recordset('[{"a":1,"b":"foo"}, {"a":"2","c":"bar"}]') as x(a int, b text) + + + a | b +---+----- + 1 | foo + 2 | + + + + + + + + jsonb_set + + jsonb_set ( target jsonb, path text[], new_value jsonb , create_if_missing boolean ) + jsonb + + + Returns target + with the item designated by path + replaced by new_value, or with + new_value added if + create_if_missing is true (which is the + default) and the item designated by path + does not exist. + All earlier steps in the path must exist, or + the target is returned unchanged. + As with the path oriented operators, negative integers that + appear in the path count from the end + of JSON arrays. + If the last path step is an array index that is out of range, + and create_if_missing is true, the new + value is added at the beginning of the array if the index is negative, + or at the end of the array if it is positive. + + + jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}', '[2,3,4]', false) + [{"f1": [2, 3, 4], "f2": null}, 2, null, 3] + + + jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}', '[2,3,4]') + [{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2] + + + + + + + jsonb_set_lax + + jsonb_set_lax ( target jsonb, path text[], new_value jsonb , create_if_missing boolean , null_value_treatment text ) + jsonb + + + If new_value is not NULL, + behaves identically to jsonb_set. Otherwise behaves + according to the value + of null_value_treatment which must be one + of 'raise_exception', + 'use_json_null', 'delete_key', or + 'return_target'. The default is + 'use_json_null'. + + + jsonb_set_lax('[{"f1":1,"f2":null},2,null,3]', '{0,f1}', null) + [{"f1": null, "f2": null}, 2, null, 3] + + + jsonb_set_lax('[{"f1":99,"f2":null},2]', '{0,f3}', null, true, 'return_target') + [{"f1": 99, "f2": null}, 2] + + + + + + + jsonb_insert + + jsonb_insert ( target jsonb, path text[], new_value jsonb , insert_after boolean ) + jsonb + + + Returns target + with new_value inserted. If the item + designated by the path is an array + element, new_value will be inserted before + that item if insert_after is false (which + is the default), or after it + if insert_after is true. If the item + designated by the path is an object + field, new_value will be inserted only if + the object does not already contain that key. + All earlier steps in the path must exist, or + the target is returned unchanged. + As with the path oriented operators, negative integers that + appear in the path count from the end + of JSON arrays. + If the last path step is an array index that is out of range, the new + value is added at the beginning of the array if the index is negative, + or at the end of the array if it is positive. + + + jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"') + {"a": [0, "new_value", 1, 2]} + + + jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"', true) + {"a": [0, 1, "new_value", 2]} + + + + + + + json_strip_nulls + + json_strip_nulls ( target json ,strip_in_arrays boolean ) + json + + + + jsonb_strip_nulls + + jsonb_strip_nulls ( target jsonb ,strip_in_arrays boolean ) + jsonb + + + Deletes all object fields that have null values from the given JSON + value, recursively. + If strip_in_arrays is true (the default is false), + null array elements are also stripped. + Otherwise they are not stripped. Bare null values are never stripped. + + + json_strip_nulls('[{"f1":1, "f2":null}, 2, null, 3]') + [{"f1":1},2,null,3] + + + jsonb_strip_nulls('[1,2,null,3,4]', true); + [1,2,3,4] + + + + + + + + jsonb_path_exists + + jsonb_path_exists ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + boolean + + + Checks whether the JSON path returns any item for the specified JSON + value. + (This is useful only with SQL-standard JSON path expressions, not + predicate check + expressions, since those always return a value.) + If the vars argument is specified, it must + be a JSON object, and its fields provide named values to be + substituted into the jsonpath expression. + If the silent argument is specified and + is true, the function suppresses the same errors + as the @? and @@ operators do. + + + jsonb_path_exists('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') + t + + + + + + + jsonb_path_match + + jsonb_path_match ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + boolean + + + Returns the SQL boolean result of a JSON path predicate check + for the specified JSON value. + (This is useful only + with predicate + check expressions, not SQL-standard JSON path expressions, + since it will either fail or return NULL if the + path result is not a single boolean value.) + The optional vars + and silent arguments act the same as + for jsonb_path_exists. + + + jsonb_path_match('{"a":[1,2,3,4,5]}', 'exists($.a[*] ? (@ >= $min && @ <= $max))', '{"min":2, "max":4}') + t + + + + + + + jsonb_path_query + + jsonb_path_query ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + setof jsonb + + + Returns all JSON items returned by the JSON path for the specified + JSON value. + For SQL-standard JSON path expressions it returns the JSON + values selected from target. + For predicate + check expressions it returns the result of the predicate + check: true, false, + or null. + The optional vars + and silent arguments act the same as + for jsonb_path_exists. + + + select * from jsonb_path_query('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') + + + jsonb_path_query +------------------ + 2 + 3 + 4 + + + + + + + + jsonb_path_query_array + + jsonb_path_query_array ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + jsonb + + + Returns all JSON items returned by the JSON path for the specified + JSON value, as a JSON array. + The parameters are the same as + for jsonb_path_query. + + + jsonb_path_query_array('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') + [2, 3, 4] + + + + + + + jsonb_path_query_first + + jsonb_path_query_first ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + jsonb + + + Returns the first JSON item returned by the JSON path for the + specified JSON value, or NULL if there are no + results. + The parameters are the same as + for jsonb_path_query. + + + jsonb_path_query_first('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') + 2 + + + + + + + jsonb_path_exists_tz + + jsonb_path_exists_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + boolean + + + + jsonb_path_match_tz + + jsonb_path_match_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + boolean + + + + jsonb_path_query_tz + + jsonb_path_query_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + setof jsonb + + + + jsonb_path_query_array_tz + + jsonb_path_query_array_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + jsonb + + + + jsonb_path_query_first_tz + + jsonb_path_query_first_tz ( target jsonb, path jsonpath , vars jsonb , silent boolean ) + jsonb + + + These functions act like their counterparts described above without + the _tz suffix, except that these functions support + comparisons of date/time values that require timezone-aware + conversions. The example below requires interpretation of the + date-only value 2015-08-02 as a timestamp with time + zone, so the result depends on the current + setting. Due to this dependency, these + functions are marked as stable, which means these functions cannot be + used in indexes. Their counterparts are immutable, and so can be used + in indexes; but they will throw errors if asked to make such + comparisons. + + + jsonb_path_exists_tz('["2015-08-01 12:00:00-05"]', '$[*] ? (@.datetime() < "2015-08-02".datetime())') + t + + + + + + + jsonb_pretty + + jsonb_pretty ( jsonb ) + text + + + Converts the given JSON value to pretty-printed, indented text. + + + jsonb_pretty('[{"f1":1,"f2":null}, 2]') + + +[ + { + "f1": 1, + "f2": null + }, + 2 +] + + + + + + + + json_typeof + + json_typeof ( json ) + text + + + + jsonb_typeof + + jsonb_typeof ( jsonb ) + text + + + Returns the type of the top-level JSON value as a text string. + Possible types are + object, array, + string, number, + boolean, and null. + (The null result should not be confused + with an SQL NULL; see the examples.) + + + json_typeof('-123.4') + number + + + json_typeof('null'::json) + null + + + json_typeof(NULL::json) IS NULL + t + + + + +
+
+ + + The SQL/JSON Path Language + + + SQL/JSON path language + + + + SQL/JSON path expressions specify item(s) to be retrieved + from a JSON value, similarly to XPath expressions used + for access to XML content. In PostgreSQL, + path expressions are implemented as the jsonpath + data type and can use any elements described in + . + + + + JSON query functions and operators + pass the provided path expression to the path engine + for evaluation. If the expression matches the queried JSON data, + the corresponding JSON item, or set of items, is returned. + If there is no match, the result will be NULL, + false, or an error, depending on the function. + Path expressions are written in the SQL/JSON path language + and can include arithmetic expressions and functions. + + + + A path expression consists of a sequence of elements allowed + by the jsonpath data type. + The path expression is normally evaluated from left to right, but + you can use parentheses to change the order of operations. + If the evaluation is successful, a sequence of JSON items is produced, + and the evaluation result is returned to the JSON query function + that completes the specified computation. + + + + To refer to the JSON value being queried (the + context item), use the $ variable + in the path expression. The first element of a path must always + be $. It can be followed by one or more + accessor operators, + which go down the JSON structure level by level to retrieve sub-items + of the context item. Each accessor operator acts on the + result(s) of the previous evaluation step, producing zero, one, or more + output items from each input item. + + + + For example, suppose you have some JSON data from a GPS tracker that you + would like to parse, such as: + +SELECT '{ + "track": { + "segments": [ + { + "location": [ 47.763, 13.4034 ], + "start time": "2018-10-14 10:05:14", + "HR": 73 + }, + { + "location": [ 47.706, 13.2635 ], + "start time": "2018-10-14 10:39:21", + "HR": 135 + } + ] + } +}' AS json \gset + + (The above example can be copied-and-pasted + into psql to set things up for the following + examples. Then psql will + expand :'json' into a suitably-quoted string + constant containing the JSON value.) + + + + To retrieve the available track segments, you need to use the + .key accessor + operator to descend through surrounding JSON objects, for example: + +=> select jsonb_path_query(:'json', '$.track.segments'); + jsonb_path_query +-----------------------------------------------------------&zwsp;-----------------------------------------------------------&zwsp;--------------------------------------------- + [{"HR": 73, "location": [47.763, 13.4034], "start time": "2018-10-14 10:05:14"}, {"HR": 135, "location": [47.706, 13.2635], "start time": "2018-10-14 10:39:21"}] + + + + + To retrieve the contents of an array, you typically use the + [*] operator. + The following example will return the location coordinates for all + the available track segments: + +=> select jsonb_path_query(:'json', '$.track.segments[*].location'); + jsonb_path_query +------------------- + [47.763, 13.4034] + [47.706, 13.2635] + + Here we started with the whole JSON input value ($), + then the .track accessor selected the JSON object + associated with the "track" object key, then + the .segments accessor selected the JSON array + associated with the "segments" key within that + object, then the [*] accessor selected each element + of that array (producing a series of items), then + the .location accessor selected the JSON array + associated with the "location" key within each of + those objects. In this example, each of those objects had + a "location" key; but if any of them did not, + the .location accessor would have simply produced no + output for that input item. + + + + To return the coordinates of the first segment only, you can + specify the corresponding subscript in the [] + accessor operator. Recall that JSON array indexes are 0-relative: + +=> select jsonb_path_query(:'json', '$.track.segments[0].location'); + jsonb_path_query +------------------- + [47.763, 13.4034] + + + + + The result of each path evaluation step can be processed + by one or more of the jsonpath operators and methods + listed in . + Each method name must be preceded by a dot. For example, + you can get the size of an array: + +=> select jsonb_path_query(:'json', '$.track.segments.size()'); + jsonb_path_query +------------------ + 2 + + More examples of using jsonpath operators + and methods within path expressions appear below in + . + + + + A path can also contain + filter expressions that work similarly to the + WHERE clause in SQL. A filter expression begins with + a question mark and provides a condition in parentheses: + + +? (condition) + + + + + Filter expressions must be written just after the path evaluation step + to which they should apply. The result of that step is filtered to include + only those items that satisfy the provided condition. SQL/JSON defines + three-valued logic, so the condition can + produce true, false, + or unknown. The unknown value + plays the same role as SQL NULL and can be tested + for with the is unknown predicate. Further path + evaluation steps use only those items for which the filter expression + returned true. + + + + The functions and operators that can be used in filter expressions are + listed in . Within a + filter expression, the @ variable denotes the value + being considered (i.e., one result of the preceding path step). You can + write accessor operators after @ to retrieve component + items. + + + + For example, suppose you would like to retrieve all heart rate values higher + than 130. You can achieve this as follows: + +=> select jsonb_path_query(:'json', '$.track.segments[*].HR ? (@ > 130)'); + jsonb_path_query +------------------ + 135 + + + + + To get the start times of segments with such values, you have to + filter out irrelevant segments before selecting the start times, so the + filter expression is applied to the previous step, and the path used + in the condition is different: + +=> select jsonb_path_query(:'json', '$.track.segments[*] ? (@.HR > 130)."start time"'); + jsonb_path_query +----------------------- + "2018-10-14 10:39:21" + + + + + You can use several filter expressions in sequence, if required. + The following example selects start times of all segments that + contain locations with relevant coordinates and high heart rate values: + +=> select jsonb_path_query(:'json', '$.track.segments[*] ? (@.location[1] < 13.4) ? (@.HR > 130)."start time"'); + jsonb_path_query +----------------------- + "2018-10-14 10:39:21" + + + + + Using filter expressions at different nesting levels is also allowed. + The following example first filters all segments by location, and then + returns high heart rate values for these segments, if available: + +=> select jsonb_path_query(:'json', '$.track.segments[*] ? (@.location[1] < 13.4).HR ? (@ > 130)'); + jsonb_path_query +------------------ + 135 + + + + + You can also nest filter expressions within each other. + This example returns the size of the track if it contains any + segments with high heart rate values, or an empty sequence otherwise: + +=> select jsonb_path_query(:'json', '$.track ? (exists(@.segments[*] ? (@.HR > 130))).segments.size()'); + jsonb_path_query +------------------ + 2 + + + + + Deviations from the SQL Standard + + PostgreSQL's implementation of the SQL/JSON path + language has the following deviations from the SQL/JSON standard. + + + + Boolean Predicate Check Expressions + + As an extension to the SQL standard, + a PostgreSQL path expression can be a + Boolean predicate, whereas the SQL standard allows predicates only within + filters. While SQL-standard path expressions return the relevant + element(s) of the queried JSON value, predicate check expressions + return the single three-valued jsonb result of the + predicate: true, + false, or null. + For example, we could write this SQL-standard filter expression: + +=> select jsonb_path_query(:'json', '$.track.segments ?(@[*].HR > 130)'); + jsonb_path_query +-----------------------------------------------------------&zwsp;---------------------- + {"HR": 135, "location": [47.706, 13.2635], "start time": "2018-10-14 10:39:21"} + + The similar predicate check expression simply + returns true, indicating that a match exists: + +=> select jsonb_path_query(:'json', '$.track.segments[*].HR > 130'); + jsonb_path_query +------------------ + true + + + + + + Predicate check expressions are required in the + @@ operator (and the + jsonb_path_match function), and should not be used + with the @? operator (or the + jsonb_path_exists function). + + + + + + Regular Expression Interpretation + + There are minor differences in the interpretation of regular + expression patterns used in like_regex filters, as + described in . + + + + + + Strict and Lax Modes + + When you query JSON data, the path expression may not match the + actual JSON data structure. An attempt to access a non-existent + member of an object or element of an array is defined as a + structural error. SQL/JSON path expressions have two modes + of handling structural errors: + + + + + + lax (default) — the path engine implicitly adapts + the queried data to the specified path. + Any structural errors that cannot be fixed as described below + are suppressed, producing no match. + + + + + strict — if a structural error occurs, an error is raised. + + + + + + Lax mode facilitates matching of a JSON document and path + expression when the JSON data does not conform to the expected schema. + If an operand does not match the requirements of a particular operation, + it can be automatically wrapped as an SQL/JSON array, or unwrapped by + converting its elements into an SQL/JSON sequence before performing + the operation. Also, comparison operators automatically unwrap their + operands in lax mode, so you can compare SQL/JSON arrays + out-of-the-box. An array of size 1 is considered equal to its sole element. + Automatic unwrapping is not performed when: + + + + The path expression contains type() or + size() methods that return the type + and the number of elements in the array, respectively. + + + + + The queried JSON data contain nested arrays. In this case, only + the outermost array is unwrapped, while all the inner arrays + remain unchanged. Thus, implicit unwrapping can only go one + level down within each path evaluation step. + + + + + + + For example, when querying the GPS data listed above, you can + abstract from the fact that it stores an array of segments + when using lax mode: + +=> select jsonb_path_query(:'json', 'lax $.track.segments.location'); + jsonb_path_query +------------------- + [47.763, 13.4034] + [47.706, 13.2635] + + + + + In strict mode, the specified path must exactly match the structure of + the queried JSON document, so using this path + expression will cause an error: + +=> select jsonb_path_query(:'json', 'strict $.track.segments.location'); +ERROR: jsonpath member accessor can only be applied to an object + + To get the same result as in lax mode, you have to explicitly unwrap the + segments array: + +=> select jsonb_path_query(:'json', 'strict $.track.segments[*].location'); + jsonb_path_query +------------------- + [47.763, 13.4034] + [47.706, 13.2635] + + + + + The unwrapping behavior of lax mode can lead to surprising results. For + instance, the following query using the .** accessor + selects every HR value twice: + +=> select jsonb_path_query(:'json', 'lax $.**.HR'); + jsonb_path_query +------------------ + 73 + 135 + 73 + 135 + + This happens because the .** accessor selects both + the segments array and each of its elements, while + the .HR accessor automatically unwraps arrays when + using lax mode. To avoid surprising results, we recommend using + the .** accessor only in strict mode. The + following query selects each HR value just once: + +=> select jsonb_path_query(:'json', 'strict $.**.HR'); + jsonb_path_query +------------------ + 73 + 135 + + + + + The unwrapping of arrays can also lead to unexpected results. Consider this + example, which selects all the location arrays: + +=> select jsonb_path_query(:'json', 'lax $.track.segments[*].location'); + jsonb_path_query +------------------- + [47.763, 13.4034] + [47.706, 13.2635] +(2 rows) + + As expected it returns the full arrays. But applying a filter expression + causes the arrays to be unwrapped to evaluate each item, returning only the + items that match the expression: + +=> select jsonb_path_query(:'json', 'lax $.track.segments[*].location ?(@[*] > 15)'); + jsonb_path_query +------------------ + 47.763 + 47.706 +(2 rows) + + This despite the fact that the full arrays are selected by the path + expression. Use strict mode to restore selecting the arrays: + +=> select jsonb_path_query(:'json', 'strict $.track.segments[*].location ?(@[*] > 15)'); + jsonb_path_query +------------------- + [47.763, 13.4034] + [47.706, 13.2635] +(2 rows) + + + + + + SQL/JSON Path Operators and Methods + + + shows the operators and + methods available in jsonpath. Note that while the unary + operators and methods can be applied to multiple values resulting from a + preceding path step, the binary operators (addition etc.) can only be + applied to single values. In lax mode, methods applied to an array will be + executed for each value in the array. The exceptions are + .type() and .size(), which apply to + the array itself. + + + + <type>jsonpath</type> Operators and Methods + + + + + Operator/Method + + + Description + + + Example(s) + + + + + + + + number + number + number + + + Addition + + + jsonb_path_query('[2]', '$[0] + 3') + 5 + + + + + + + number + number + + + Unary plus (no operation); unlike addition, this can iterate over + multiple values + + + jsonb_path_query_array('{"x": [2,3,4]}', '+ $.x') + [2, 3, 4] + + + + + + number - number + number + + + Subtraction + + + jsonb_path_query('[2]', '7 - $[0]') + 5 + + + + + + - number + number + + + Negation; unlike subtraction, this can iterate over + multiple values + + + jsonb_path_query_array('{"x": [2,3,4]}', '- $.x') + [-2, -3, -4] + + + + + + number * number + number + + + Multiplication + + + jsonb_path_query('[4]', '2 * $[0]') + 8 + + + + + + number / number + number + + + Division + + + jsonb_path_query('[8.5]', '$[0] / 2') + 4.2500000000000000 + + + + + + number % number + number + + + Modulo (remainder) + + + jsonb_path_query('[32]', '$[0] % 10') + 2 + + + + + + value . type() + string + + + Type of the JSON item (see json_typeof) + + + jsonb_path_query_array('[1, "2", {}]', '$[*].type()') + ["number", "string", "object"] + + + + + + value . size() + number + + + Size of the JSON item (number of array elements, or 1 if not an + array) + + + jsonb_path_query('{"m": [11, 15]}', '$.m.size()') + 2 + + + + + + value . boolean() + boolean + + + Boolean value converted from a JSON boolean, number, or string + + + jsonb_path_query_array('[1, "yes", false]', '$[*].boolean()') + [true, true, false] + + + + + + value . string() + string + + + String value converted from a JSON boolean, number, string, or + datetime + + + jsonb_path_query_array('[1.23, "xyz", false]', '$[*].string()') + ["1.23", "xyz", "false"] + + + jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().string()') + "2023-08-15T12:34:56" + + + + + + value . double() + number + + + Approximate floating-point number converted from a JSON number or + string + + + jsonb_path_query('{"len": "1.9"}', '$.len.double() * 2') + 3.8 + + + + + + number . ceiling() + number + + + Nearest integer greater than or equal to the given number + + + jsonb_path_query('{"h": 1.3}', '$.h.ceiling()') + 2 + + + + + + number . floor() + number + + + Nearest integer less than or equal to the given number + + + jsonb_path_query('{"h": 1.7}', '$.h.floor()') + 1 + + + + + + number . abs() + number + + + Absolute value of the given number + + + jsonb_path_query('{"z": -0.3}', '$.z.abs()') + 0.3 + + + + + + value . bigint() + bigint + + + Big integer value converted from a JSON number or string + + + jsonb_path_query('{"len": "9876543219"}', '$.len.bigint()') + 9876543219 + + + + + + value . decimal( [ precision [ , scale ] ] ) + decimal + + + Rounded decimal value converted from a JSON number or string + (precision and scale must be + integer values) + + + jsonb_path_query('1234.5678', '$.decimal(6, 2)') + 1234.57 + + + + + + value . integer() + integer + + + Integer value converted from a JSON number or string + + + jsonb_path_query('{"len": "12345"}', '$.len.integer()') + 12345 + + + + + + value . number() + numeric + + + Numeric value converted from a JSON number or string + + + jsonb_path_query('{"len": "123.45"}', '$.len.number()') + 123.45 + + + + + + string . datetime() + datetime_type + (see note) + + + Date/time value converted from a string + + + jsonb_path_query('["2015-8-1", "2015-08-12"]', '$[*] ? (@.datetime() < "2015-08-2".datetime())') + "2015-8-1" + + + + + + string . datetime(template) + datetime_type + (see note) + + + Date/time value converted from a string using the + specified to_timestamp template + + + jsonb_path_query_array('["12:30", "18:40"]', '$[*].datetime("HH24:MI")') + ["12:30:00", "18:40:00"] + + + + + + string . date() + date + + + Date value converted from a string + + + jsonb_path_query('"2023-08-15"', '$.date()') + "2023-08-15" + + + + + + string . time() + time without time zone + + + Time without time zone value converted from a string + + + jsonb_path_query('"12:34:56"', '$.time()') + "12:34:56" + + + + + + string . time(precision) + time without time zone + + + Time without time zone value converted from a string, with fractional + seconds adjusted to the given precision + + + jsonb_path_query('"12:34:56.789"', '$.time(2)') + "12:34:56.79" + + + + + + string . time_tz() + time with time zone + + + Time with time zone value converted from a string + + + jsonb_path_query('"12:34:56 +05:30"', '$.time_tz()') + "12:34:56+05:30" + + + + + + string . time_tz(precision) + time with time zone + + + Time with time zone value converted from a string, with fractional + seconds adjusted to the given precision + + + jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2)') + "12:34:56.79+05:30" + + + + + + string . timestamp() + timestamp without time zone + + + Timestamp without time zone value converted from a string + + + jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp()') + "2023-08-15T12:34:56" + + + + + + string . timestamp(precision) + timestamp without time zone + + + Timestamp without time zone value converted from a string, with + fractional seconds adjusted to the given precision + + + jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2)') + "2023-08-15T12:34:56.79" + + + + + + string . timestamp_tz() + timestamp with time zone + + + Timestamp with time zone value converted from a string + + + jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()') + "2023-08-15T12:34:56+05:30" + + + + + + string . timestamp_tz(precision) + timestamp with time zone + + + Timestamp with time zone value converted from a string, with fractional + seconds adjusted to the given precision + + + jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2)') + "2023-08-15T12:34:56.79+05:30" + + + + + + object . keyvalue() + array + + + The object's key-value pairs, represented as an array of objects + containing three fields: "key", + "value", and "id"; + "id" is a unique identifier of the object the + key-value pair belongs to + + + jsonb_path_query_array('{"x": "20", "y": 32}', '$.keyvalue()') + [{"id": 0, "key": "x", "value": "20"}, {"id": 0, "key": "y", "value": 32}] + + + + +
+ + + + The result type of the datetime() and + datetime(template) + methods can be date, timetz, time, + timestamptz, or timestamp. + Both methods determine their result type dynamically. + + + The datetime() method sequentially tries to + match its input string to the ISO formats + for date, timetz, time, + timestamptz, and timestamp. It stops on + the first matching format and emits the corresponding data type. + + + The datetime(template) + method determines the result type according to the fields used in the + provided template string. + + + The datetime() and + datetime(template) methods + use the same parsing rules as the to_timestamp SQL + function does (see ), with three + exceptions. First, these methods don't allow unmatched template + patterns. Second, only the following separators are allowed in the + template string: minus sign, period, solidus (slash), comma, apostrophe, + semicolon, colon and space. Third, separators in the template string + must exactly match the input string. + + + If different date/time types need to be compared, an implicit cast is + applied. A date value can be cast to timestamp + or timestamptz, timestamp can be cast to + timestamptz, and time to timetz. + However, all but the first of these conversions depend on the current + setting, and thus can only be performed + within timezone-aware jsonpath functions. Similarly, other + date/time-related methods that convert strings to date/time types + also do this casting, which may involve the current + setting. Therefore, these conversions can + also only be performed within timezone-aware jsonpath + functions. + + + + + shows the available + filter expression elements. + + + + <type>jsonpath</type> Filter Expression Elements + + + + + Predicate/Value + + + Description + + + Example(s) + + + + + + + + value == value + boolean + + + Equality comparison (this, and the other comparison operators, work on + all JSON scalar values) + + + jsonb_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == 1)') + [1, 1] + + + jsonb_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == "a")') + ["a"] + + + + + + value != value + boolean + + + value <> value + boolean + + + Non-equality comparison + + + jsonb_path_query_array('[1, 2, 1, 3]', '$[*] ? (@ != 1)') + [2, 3] + + + jsonb_path_query_array('["a", "b", "c"]', '$[*] ? (@ <> "b")') + ["a", "c"] + + + + + + value < value + boolean + + + Less-than comparison + + + jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ < 2)') + [1] + + + + + + value <= value + boolean + + + Less-than-or-equal-to comparison + + + jsonb_path_query_array('["a", "b", "c"]', '$[*] ? (@ <= "b")') + ["a", "b"] + + + + + + value > value + boolean + + + Greater-than comparison + + + jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ > 2)') + [3] + + + + + + value >= value + boolean + + + Greater-than-or-equal-to comparison + + + jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ >= 2)') + [2, 3] + + + + + + true + boolean + + + JSON constant true + + + jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == true)') + {"name": "Chris", "parent": true} + + + + + + false + boolean + + + JSON constant false + + + jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == false)') + {"name": "John", "parent": false} + + + + + + null + value + + + JSON constant null (note that, unlike in SQL, + comparison to null works normally) + + + jsonb_path_query('[{"name": "Mary", "job": null}, {"name": "Michael", "job": "driver"}]', '$[*] ? (@.job == null) .name') + "Mary" + + + + + + boolean && boolean + boolean + + + Boolean AND + + + jsonb_path_query('[1, 3, 7]', '$[*] ? (@ > 1 && @ < 5)') + 3 + + + + + + boolean || boolean + boolean + + + Boolean OR + + + jsonb_path_query('[1, 3, 7]', '$[*] ? (@ < 1 || @ > 5)') + 7 + + + + + + ! boolean + boolean + + + Boolean NOT + + + jsonb_path_query('[1, 3, 7]', '$[*] ? (!(@ < 5))') + 7 + + + + + + boolean is unknown + boolean + + + Tests whether a Boolean condition is unknown. + + + jsonb_path_query('[-1, 2, 7, "foo"]', '$[*] ? ((@ > 0) is unknown)') + "foo" + + + + + + string like_regex string flag string + boolean + + + Tests whether the first operand matches the regular expression + given by the second operand, optionally with modifications + described by a string of flag characters (see + ). + + + jsonb_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c")') + ["abc", "abdacb"] + + + jsonb_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c" flag "i")') + ["abc", "aBdC", "abdacb"] + + + + + + string starts with string + boolean + + + Tests whether the second operand is an initial substring of the first + operand. + + + jsonb_path_query('["John Smith", "Mary Stone", "Bob Johnson"]', '$[*] ? (@ starts with "John")') + "John Smith" + + + + + + exists ( path_expression ) + boolean + + + Tests whether a path expression matches at least one SQL/JSON item. + Returns unknown if the path expression would result + in an error; the second example uses this to avoid a no-such-key error + in strict mode. + + + jsonb_path_query('{"x": [1, 2], "y": [2, 4]}', 'strict $.* ? (exists (@ ? (@[*] > 2)))') + [2, 4] + + + jsonb_path_query_array('{"value": 41}', 'strict $ ? (exists (@.name)) .name') + [] + + + + +
+ +
+ + + SQL/JSON Regular Expressions + + + LIKE_REGEX + in SQL/JSON + + + + SQL/JSON path expressions allow matching text to a regular expression + with the like_regex filter. For example, the + following SQL/JSON path query would case-insensitively match all + strings in an array that start with an English vowel: + +$[*] ? (@ like_regex "^[aeiou]" flag "i") + + + + + The optional flag string may include one or more of + the characters + i for case-insensitive match, + m to allow ^ + and $ to match at newlines, + s to allow . to match a newline, + and q to quote the whole pattern (reducing the + behavior to a simple substring match). + + + + The SQL/JSON standard borrows its definition for regular expressions + from the LIKE_REGEX operator, which in turn uses the + XQuery standard. PostgreSQL does not currently support the + LIKE_REGEX operator. Therefore, + the like_regex filter is implemented using the + POSIX regular expression engine described in + . This leads to various minor + discrepancies from standard SQL/JSON behavior, which are cataloged in + . + Note, however, that the flag-letter incompatibilities described there + do not apply to SQL/JSON, as it translates the XQuery flag letters to + match what the POSIX engine expects. + + + + Keep in mind that the pattern argument of like_regex + is a JSON path string literal, written according to the rules given in + . This means in particular that any + backslashes you want to use in the regular expression must be doubled. + For example, to match string values of the root document that contain + only digits: + +$.* ? (@ like_regex "^\\d+$") + + + +
+ + + SQL/JSON Query Functions + + SQL/JSON functions JSON_EXISTS(), + JSON_QUERY(), and JSON_VALUE() + described in can be used + to query JSON documents. Each of these functions apply a + path_expression (an SQL/JSON path query) to a + context_item (the document). See + for more details on what + the path_expression can contain. The + path_expression can also reference variables, + whose values are specified with their respective names in the + PASSING clause that is supported by each function. + context_item can be a jsonb value + or a character string that can be successfully cast to jsonb. + + + + SQL/JSON Query Functions + + + + + Function signature + + + Description + + + Example(s) + + + + + + + json_exists + +JSON_EXISTS ( +context_item, path_expression + PASSING { value AS varname } , ... +{ TRUE | FALSE | UNKNOWN | ERROR } ON ERROR ) boolean + + + + + + Returns true if the SQL/JSON path_expression + applied to the context_item yields any + items, false otherwise. + + + + + The ON ERROR clause specifies the behavior if + an error occurs during path_expression + evaluation. Specifying ERROR will cause an error to + be thrown with the appropriate message. Other options include + returning boolean values FALSE or + TRUE or the value UNKNOWN which + is actually an SQL NULL. The default when no ON ERROR + clause is specified is to return the boolean value + FALSE. + + + + + Examples: + + + JSON_EXISTS(jsonb '{"key1": [1,2,3]}', 'strict $.key1[*] ? (@ > $x)' PASSING 2 AS x) + t + + + JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'lax $.a[5]' ERROR ON ERROR) + f + + + JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'strict $.a[5]' ERROR ON ERROR) + + +ERROR: jsonpath array subscript is out of bounds + + + + + + json_query + +JSON_QUERY ( +context_item, path_expression + PASSING { value AS varname } , ... + RETURNING data_type FORMAT JSON ENCODING UTF8 + { WITHOUT | WITH { CONDITIONAL | UNCONDITIONAL } } ARRAY WRAPPER + { KEEP | OMIT } QUOTES ON SCALAR STRING + { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON EMPTY + { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON ERROR ) jsonb + + + + + + Returns the result of applying the SQL/JSON + path_expression to the + context_item. + + + + + By default, the result is returned as a value of type jsonb, + though the RETURNING clause can be used to return + as some other type to which it can be successfully coerced. + + + + + If the path expression may return multiple values, it might be necessary + to wrap those values using the WITH WRAPPER clause to + make it a valid JSON string, because the default behavior is to not wrap + them, as if WITHOUT WRAPPER were specified. The + WITH WRAPPER clause is by default taken to mean + WITH UNCONDITIONAL WRAPPER, which means that even a + single result value will be wrapped. To apply the wrapper only when + multiple values are present, specify WITH CONDITIONAL WRAPPER. + Getting multiple values in result will be treated as an error if + WITHOUT WRAPPER is specified. + + + + + If the result is a scalar string, by default, the returned value will + be surrounded by quotes, making it a valid JSON value. It can be made + explicit by specifying KEEP QUOTES. Conversely, + quotes can be omitted by specifying OMIT QUOTES. + To ensure that the result is a valid JSON value, OMIT QUOTES + cannot be specified when WITH WRAPPER is also + specified. + + + + + The ON EMPTY clause specifies the behavior if + evaluating path_expression yields an empty + set. The ON ERROR clause specifies the behavior + if an error occurs when evaluating path_expression, + when coercing the result value to the RETURNING type, + or when evaluating the ON EMPTY expression if the + path_expression evaluation returns an empty + set. + + + + + For both ON EMPTY and ON ERROR, + specifying ERROR will cause an error to be thrown with + the appropriate message. Other options include returning an SQL NULL, an + empty array (EMPTY ARRAY), + an empty object (EMPTY OBJECT), or a user-specified + expression (DEFAULT expression) + that can be coerced to jsonb or the type specified in RETURNING. + The default when ON EMPTY or ON ERROR + is not specified is to return an SQL NULL value. + + + + + Examples: + + + JSON_QUERY(jsonb '[1,[2,3],null]', 'lax $[*][$off]' PASSING 1 AS off WITH CONDITIONAL WRAPPER) + 3 + + + JSON_QUERY(jsonb '{"a": "[1, 2]"}', 'lax $.a' OMIT QUOTES) + [1, 2] + + + JSON_QUERY(jsonb '{"a": "[1, 2]"}', 'lax $.a' RETURNING int[] OMIT QUOTES ERROR ON ERROR) + + +ERROR: malformed array literal: "[1, 2]" +DETAIL: Missing "]" after array dimensions. + + + + + + + json_value + +JSON_VALUE ( +context_item, path_expression + PASSING { value AS varname } , ... + RETURNING data_type + { ERROR | NULL | DEFAULT expression } ON EMPTY + { ERROR | NULL | DEFAULT expression } ON ERROR ) text + + + + + + Returns the result of applying the SQL/JSON + path_expression to the + context_item. + + + + + Only use JSON_VALUE() if the extracted value is + expected to be a single SQL/JSON scalar item; + getting multiple values will be treated as an error. If you expect that + extracted value might be an object or an array, use the + JSON_QUERY function instead. + + + + + By default, the result, which must be a single scalar value, is + returned as a value of type text, though the + RETURNING clause can be used to return as some + other type to which it can be successfully coerced. + + + + + The ON ERROR and ON EMPTY + clauses have similar semantics as mentioned in the description of + JSON_QUERY, except the set of values returned in + lieu of throwing an error is different. + + + + + Note that scalar strings returned by JSON_VALUE + always have their quotes removed, equivalent to specifying + OMIT QUOTES in JSON_QUERY. + + + + + Examples: + + + JSON_VALUE(jsonb '"123.45"', '$' RETURNING float) + 123.45 + + + JSON_VALUE(jsonb '"03:04 2015-02-01"', '$.datetime("HH24:MI YYYY-MM-DD")' RETURNING date) + 2015-02-01 + + + JSON_VALUE(jsonb '[1,2]', 'strict $[$off]' PASSING 1 as off) + 2 + + + JSON_VALUE(jsonb '[1,2]', 'strict $[*]' DEFAULT 9 ON ERROR) + 9 + + + + + +
+ + + The context_item expression is converted to + jsonb by an implicit cast if the expression is not already of + type jsonb. Note, however, that any parsing errors that occur + during that conversion are thrown unconditionally, that is, are not + handled according to the (specified or implicit) ON ERROR + clause. + + + + + JSON_VALUE() returns an SQL NULL if + path_expression returns a JSON + null, whereas JSON_QUERY() returns + the JSON null as is. + + +
+ + + JSON_TABLE + + json_table + + + + JSON_TABLE is an SQL/JSON function which + queries JSON data + and presents the results as a relational view, which can be accessed as a + regular SQL table. You can use JSON_TABLE inside + the FROM clause of a SELECT, + UPDATE, or DELETE and as data source + in a MERGE statement. + + + + Taking JSON data as input, JSON_TABLE uses a JSON path + expression to extract a part of the provided data to use as a + row pattern for the constructed view. Each SQL/JSON + value given by the row pattern serves as source for a separate row in the + constructed view. + + + + To split the row pattern into columns, JSON_TABLE + provides the COLUMNS clause that defines the + schema of the created view. For each column, a separate JSON path expression + can be specified to be evaluated against the row pattern to get an SQL/JSON + value that will become the value for the specified column in a given output + row. + + + + JSON data stored at a nested level of the row pattern can be extracted using + the NESTED PATH clause. Each + NESTED PATH clause can be used to generate one or more + columns using the data from a nested level of the row pattern. Those + columns can be specified using a COLUMNS clause that + looks similar to the top-level COLUMNS clause. Rows constructed from + NESTED COLUMNS are called child rows and are joined + against the row constructed from the columns specified in the parent + COLUMNS clause to get the row in the final view. Child + columns themselves may contain a NESTED PATH + specification thus allowing to extract data located at arbitrary nesting + levels. Columns produced by multiple NESTED PATHs at the + same level are considered to be siblings of each + other and their rows after joining with the parent row are combined using + UNION. + + + + The rows produced by JSON_TABLE are laterally + joined to the row that generated them, so you do not have to explicitly join + the constructed view with the original table holding JSON + data. + + + + The syntax is: + + + +JSON_TABLE ( + context_item, path_expression AS json_path_name PASSING { value AS varname } , ... + COLUMNS ( json_table_column , ... ) + { ERROR | EMPTY ARRAY} ON ERROR +) + + +where json_table_column is: + + name FOR ORDINALITY + | name type + FORMAT JSON ENCODING UTF8 + PATH path_expression + { WITHOUT | WITH { CONDITIONAL | UNCONDITIONAL } } ARRAY WRAPPER + { KEEP | OMIT } QUOTES ON SCALAR STRING + { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON EMPTY + { ERROR | NULL | EMPTY { ARRAY | OBJECT } | DEFAULT expression } ON ERROR + | name type EXISTS PATH path_expression + { ERROR | TRUE | FALSE | UNKNOWN } ON ERROR + | NESTED PATH path_expression AS json_path_name COLUMNS ( json_table_column , ... ) + + + + Each syntax element is described below in more detail. + + + + + + context_item, path_expression AS json_path_name PASSING { value AS varname } , ... + + + + The context_item specifies the input document + to query, the path_expression is an SQL/JSON + path expression defining the query, and json_path_name + is an optional name for the path_expression. + The optional PASSING clause provides data values for + the variables mentioned in the path_expression. + The result of the input data evaluation using the aforementioned elements + is called the row pattern, which is used as the + source for row values in the constructed view. + + + + + + + COLUMNS ( json_table_column , ... ) + + + + + The COLUMNS clause defining the schema of the + constructed view. In this clause, you can specify each column to be + filled with an SQL/JSON value obtained by applying a JSON path expression + against the row pattern. json_table_column has + the following variants: + + + + + + name FOR ORDINALITY + + + + Adds an ordinality column that provides sequential row numbering starting + from 1. Each NESTED PATH (see below) gets its own + counter for any nested ordinality columns. + + + + + + + name type + FORMAT JSON ENCODING UTF8 + PATH path_expression + + + + Inserts an SQL/JSON value obtained by applying + path_expression against the row pattern into + the view's output row after coercing it to specified + type. + + + Specifying FORMAT JSON makes it explicit that you + expect the value to be a valid json object. It only + makes sense to specify FORMAT JSON if + type is one of bpchar, + bytea, character varying, name, + json, jsonb, text, or a domain over + these types. + + + Optionally, you can specify WRAPPER and + QUOTES clauses to format the output. Note that + specifying OMIT QUOTES overrides + FORMAT JSON if also specified, because unquoted + literals do not constitute valid json values. + + + Optionally, you can use ON EMPTY and + ON ERROR clauses to specify whether to throw the error + or return the specified value when the result of JSON path evaluation is + empty and when an error occurs during JSON path evaluation or when + coercing the SQL/JSON value to the specified type, respectively. The + default for both is to return a NULL value. + + + + This clause is internally turned into and has the same semantics as + JSON_VALUE or JSON_QUERY. + The latter if the specified type is not a scalar type or if either of + FORMAT JSON, WRAPPER, or + QUOTES clause is present. + + + + + + + + name type + EXISTS PATH path_expression + + + + Inserts a boolean value obtained by applying + path_expression against the row pattern + into the view's output row after coercing it to specified + type. + + + The value corresponds to whether applying the PATH + expression to the row pattern yields any values. + + + The specified type should have a cast from the + boolean type. + + + Optionally, you can use ON ERROR to specify whether to + throw the error or return the specified value when an error occurs during + JSON path evaluation or when coercing SQL/JSON value to the specified + type. The default is to return a boolean value + FALSE. + + + + This clause is internally turned into and has the same semantics as + JSON_EXISTS. + + + + + + + + NESTED PATH path_expression AS json_path_name + COLUMNS ( json_table_column , ... ) + + + + + Extracts SQL/JSON values from nested levels of the row pattern, + generates one or more columns as defined by the COLUMNS + subclause, and inserts the extracted SQL/JSON values into those + columns. The json_table_column + expression in the COLUMNS subclause uses the same + syntax as in the parent COLUMNS clause. + + + + The NESTED PATH syntax is recursive, + so you can go down multiple nested levels by specifying several + NESTED PATH subclauses within each other. + It allows to unnest the hierarchy of JSON objects and arrays + in a single function invocation rather than chaining several + JSON_TABLE expressions in an SQL statement. + + + + + + + + In each variant of json_table_column described + above, if the PATH clause is omitted, path expression + $.name is used, where + name is the provided column name. + + + + + + + + + AS json_path_name + + + + + The optional json_path_name serves as an + identifier of the provided path_expression. + The name must be unique and distinct from the column names. + + + + + + + { ERROR | EMPTY } ON ERROR + + + + + The optional ON ERROR can be used to specify how to + handle errors when evaluating the top-level + path_expression. Use ERROR + if you want the errors to be thrown and EMPTY to + return an empty table, that is, a table containing 0 rows. Note that + this clause does not affect the errors that occur when evaluating + columns, for which the behavior depends on whether the + ON ERROR clause is specified against a given column. + + + + + + Examples + + + In the examples that follow, the following table containing JSON data + will be used: + + +CREATE TABLE my_films ( js jsonb ); + +INSERT INTO my_films VALUES ( +'{ "favorites" : [ + { "kind" : "comedy", "films" : [ + { "title" : "Bananas", + "director" : "Woody Allen"}, + { "title" : "The Dinner Game", + "director" : "Francis Veber" } ] }, + { "kind" : "horror", "films" : [ + { "title" : "Psycho", + "director" : "Alfred Hitchcock" } ] }, + { "kind" : "thriller", "films" : [ + { "title" : "Vertigo", + "director" : "Alfred Hitchcock" } ] }, + { "kind" : "drama", "films" : [ + { "title" : "Yojimbo", + "director" : "Akira Kurosawa" } ] } + ] }'); + + + + + The following query shows how to use JSON_TABLE to + turn the JSON objects in the my_films table + to a view containing columns for the keys kind, + title, and director contained in + the original JSON along with an ordinality column: + + +SELECT jt.* FROM + my_films, + JSON_TABLE (js, '$.favorites[*]' COLUMNS ( + id FOR ORDINALITY, + kind text PATH '$.kind', + title text PATH '$.films[*].title' WITH WRAPPER, + director text PATH '$.films[*].director' WITH WRAPPER)) AS jt; + + + + id | kind | title | director +----+----------+--------------------------------+---------------------------------- + 1 | comedy | ["Bananas", "The Dinner Game"] | ["Woody Allen", "Francis Veber"] + 2 | horror | ["Psycho"] | ["Alfred Hitchcock"] + 3 | thriller | ["Vertigo"] | ["Alfred Hitchcock"] + 4 | drama | ["Yojimbo"] | ["Akira Kurosawa"] +(4 rows) + + + + + The following is a modified version of the above query to show the + usage of PASSING arguments in the filter specified in + the top-level JSON path expression and the various options for the + individual columns: + + +SELECT jt.* FROM + my_films, + JSON_TABLE (js, '$.favorites[*] ? (@.films[*].director == $filter)' + PASSING 'Alfred Hitchcock' AS filter + COLUMNS ( + id FOR ORDINALITY, + kind text PATH '$.kind', + title text FORMAT JSON PATH '$.films[*].title' OMIT QUOTES, + director text PATH '$.films[*].director' KEEP QUOTES)) AS jt; + + + + id | kind | title | director +----+----------+---------+-------------------- + 1 | horror | Psycho | "Alfred Hitchcock" + 2 | thriller | Vertigo | "Alfred Hitchcock" +(2 rows) + + + + + The following is a modified version of the above query to show the usage + of NESTED PATH for populating title and director + columns, illustrating how they are joined to the parent columns id and + kind: + + +SELECT jt.* FROM + my_films, + JSON_TABLE ( js, '$.favorites[*] ? (@.films[*].director == $filter)' + PASSING 'Alfred Hitchcock' AS filter + COLUMNS ( + id FOR ORDINALITY, + kind text PATH '$.kind', + NESTED PATH '$.films[*]' COLUMNS ( + title text FORMAT JSON PATH '$.title' OMIT QUOTES, + director text PATH '$.director' KEEP QUOTES))) AS jt; + + + + id | kind | title | director +----+----------+---------+-------------------- + 1 | horror | Psycho | "Alfred Hitchcock" + 2 | thriller | Vertigo | "Alfred Hitchcock" +(2 rows) + + + + + + The following is the same query but without the filter in the root + path: + + +SELECT jt.* FROM + my_films, + JSON_TABLE ( js, '$.favorites[*]' + COLUMNS ( + id FOR ORDINALITY, + kind text PATH '$.kind', + NESTED PATH '$.films[*]' COLUMNS ( + title text FORMAT JSON PATH '$.title' OMIT QUOTES, + director text PATH '$.director' KEEP QUOTES))) AS jt; + + + + id | kind | title | director +----+----------+-----------------+-------------------- + 1 | comedy | Bananas | "Woody Allen" + 1 | comedy | The Dinner Game | "Francis Veber" + 2 | horror | Psycho | "Alfred Hitchcock" + 3 | thriller | Vertigo | "Alfred Hitchcock" + 4 | drama | Yojimbo | "Akira Kurosawa" +(5 rows) + + + + + + The following shows another query using a different JSON + object as input. It shows the UNION "sibling join" between + NESTED paths $.movies[*] and + $.books[*] and also the usage of + FOR ORDINALITY column at NESTED + levels (columns movie_id, book_id, + and author_id): + + +SELECT * FROM JSON_TABLE ( +'{"favorites": + [{"movies": + [{"name": "One", "director": "John Doe"}, + {"name": "Two", "director": "Don Joe"}], + "books": + [{"name": "Mystery", "authors": [{"name": "Brown Dan"}]}, + {"name": "Wonder", "authors": [{"name": "Jun Murakami"}, {"name":"Craig Doe"}]}] +}]}'::json, '$.favorites[*]' +COLUMNS ( + user_id FOR ORDINALITY, + NESTED '$.movies[*]' + COLUMNS ( + movie_id FOR ORDINALITY, + mname text PATH '$.name', + director text), + NESTED '$.books[*]' + COLUMNS ( + book_id FOR ORDINALITY, + bname text PATH '$.name', + NESTED '$.authors[*]' + COLUMNS ( + author_id FOR ORDINALITY, + author_name text PATH '$.name')))); + + + + user_id | movie_id | mname | director | book_id | bname | author_id | author_name +---------+----------+-------+----------+---------+---------+-----------+-------------- + 1 | 1 | One | John Doe | | | | + 1 | 2 | Two | Don Joe | | | | + 1 | | | | 1 | Mystery | 1 | Brown Dan + 1 | | | | 2 | Wonder | 1 | Jun Murakami + 1 | | | | 2 | Wonder | 2 | Craig Doe +(5 rows) + + + + +
diff --git a/doc/src/sgml/func/func-logical.sgml b/doc/src/sgml/func/func-logical.sgml new file mode 100644 index 0000000000000..65e50e65a8117 --- /dev/null +++ b/doc/src/sgml/func/func-logical.sgml @@ -0,0 +1,146 @@ + + Logical Operators + + + operator + logical + + + + Boolean + operators + operators, logical + + + + The usual logical operators are available: + + + AND (operator) + + + + OR (operator) + + + + NOT (operator) + + + + conjunction + + + + disjunction + + + + negation + + + +boolean AND boolean boolean +boolean OR boolean boolean +NOT boolean boolean + + + SQL uses a three-valued logic system with true, + false, and null, which represents unknown. + Observe the following truth tables: + + + + + + a + b + a AND b + a OR b + + + + + + TRUE + TRUE + TRUE + TRUE + + + + TRUE + FALSE + FALSE + TRUE + + + + TRUE + NULL + NULL + TRUE + + + + FALSE + FALSE + FALSE + FALSE + + + + FALSE + NULL + FALSE + NULL + + + + NULL + NULL + NULL + NULL + + + + + + + + + + a + NOT a + + + + + + TRUE + FALSE + + + + FALSE + TRUE + + + + NULL + NULL + + + + + + + + The operators AND and OR are + commutative, that is, you can switch the left and right operands + without affecting the result. (However, it is not guaranteed that + the left operand is evaluated before the right operand. See for more information about the + order of evaluation of subexpressions.) + + diff --git a/doc/src/sgml/func/func-matching.sgml b/doc/src/sgml/func/func-matching.sgml new file mode 100644 index 0000000000000..ebe0b22c8f60f --- /dev/null +++ b/doc/src/sgml/func/func-matching.sgml @@ -0,0 +1,2487 @@ + + Pattern Matching + + + pattern matching + + + + There are three separate approaches to pattern matching provided + by PostgreSQL: the traditional + SQL LIKE operator, the + more recent SIMILAR TO operator (added in + SQL:1999), and POSIX-style regular + expressions. Aside from the basic does this string match + this pattern? operators, functions are available to extract + or replace matching substrings and to split a string at matching + locations. + + + + + If you have pattern matching needs that go beyond this, + consider writing a user-defined function in Perl or Tcl. + + + + + + While most regular-expression searches can be executed very quickly, + regular expressions can be contrived that take arbitrary amounts of + time and memory to process. Be wary of accepting regular-expression + search patterns from hostile sources. If you must do so, it is + advisable to impose a statement timeout. + + + + Searches using SIMILAR TO patterns have the same + security hazards, since SIMILAR TO provides many + of the same capabilities as POSIX-style regular + expressions. + + + + LIKE searches, being much simpler than the other + two options, are safer to use with possibly-hostile pattern sources. + + + + + SIMILAR TO and POSIX-style regular + expressions do not support nondeterministic collations. If required, use + LIKE or apply a different collation to the expression + to work around this limitation. + + + + <function>LIKE</function> + + + LIKE + + + +string LIKE pattern ESCAPE escape-character +string NOT LIKE pattern ESCAPE escape-character + + + + The LIKE expression returns true if the + string matches the supplied + pattern. (As + expected, the NOT LIKE expression returns + false if LIKE returns true, and vice versa. + An equivalent expression is + NOT (string LIKE + pattern).) + + + + If pattern does not contain percent + signs or underscores, then the pattern only represents the string + itself; in that case LIKE acts like the + equals operator. An underscore (_) in + pattern stands for (matches) any single + character; a percent sign (%) matches any sequence + of zero or more characters. + + + + Some examples: + +'abc' LIKE 'abc' true +'abc' LIKE 'a%' true +'abc' LIKE '_b_' true +'abc' LIKE 'c' false + + + + + LIKE pattern matching supports nondeterministic + collations (see ), such as + case-insensitive collations or collations that, say, ignore punctuation. + So with a case-insensitive collation, one could have: + +'AbC' LIKE 'abc' COLLATE case_insensitive true +'AbC' LIKE 'a%' COLLATE case_insensitive true + + With collations that ignore certain characters or in general that consider + strings of different lengths equal, the semantics can become a bit more + complicated. Consider these examples: + +'.foo.' LIKE 'foo' COLLATE ign_punct true +'.foo.' LIKE 'f_o' COLLATE ign_punct true +'.foo.' LIKE '_oo' COLLATE ign_punct false + + The way the matching works is that the pattern is partitioned into + sequences of wildcards and non-wildcard strings (wildcards being + _ and %). For example, the pattern + f_o is partitioned into f, _, o, the + pattern _oo is partitioned into _, + oo. The input string matches the pattern if it can be + partitioned in such a way that the wildcards match one character or any + number of characters respectively and the non-wildcard partitions are + equal under the applicable collation. So for example, '.foo.' + LIKE 'f_o' COLLATE ign_punct is true because one can partition + .foo. into .f, o, o., and then + '.f' = 'f' COLLATE ign_punct, 'o' + matches the _ wildcard, and 'o.' = 'o' COLLATE + ign_punct. But '.foo.' LIKE '_oo' COLLATE + ign_punct is false because .foo. cannot be + partitioned in a way that the first character is any character and the + rest of the string compares equal to oo. (Note that + the single-character wildcard always matches exactly one character, + independent of the collation. So in this example, the + _ would match ., but then the rest + of the input string won't match the rest of the pattern.) + + + + LIKE pattern matching always covers the entire + string. Therefore, if it's desired to match a sequence anywhere within + a string, the pattern must start and end with a percent sign. + + + + To match a literal underscore or percent sign without matching + other characters, the respective character in + pattern must be + preceded by the escape character. The default escape + character is the backslash but a different one can be selected by + using the ESCAPE clause. To match the escape + character itself, write two escape characters. + + + + + If you have turned off, + any backslashes you write in literal string constants will need to be + doubled. See for more information. + + + + + It's also possible to select no escape character by writing + ESCAPE ''. This effectively disables the + escape mechanism, which makes it impossible to turn off the + special meaning of underscore and percent signs in the pattern. + + + + According to the SQL standard, omitting ESCAPE + means there is no escape character (rather than defaulting to a + backslash), and a zero-length ESCAPE value is + disallowed. PostgreSQL's behavior in + this regard is therefore slightly nonstandard. + + + + The key word ILIKE can be used instead of + LIKE to make the match case-insensitive according to the + active locale. (But this does not support nondeterministic collations.) + This is not in the SQL standard but is a + PostgreSQL extension. + + + + The operator ~~ is equivalent to + LIKE, and ~~* corresponds to + ILIKE. There are also + !~~ and !~~* operators that + represent NOT LIKE and NOT + ILIKE, respectively. All of these operators are + PostgreSQL-specific. You may see these + operator names in EXPLAIN output and similar + places, since the parser actually translates LIKE + et al. to these operators. + + + + The phrases LIKE, ILIKE, + NOT LIKE, and NOT ILIKE are + generally treated as operators + in PostgreSQL syntax; for example they can + be used in expression + operator ANY + (subquery) constructs, although + an ESCAPE clause cannot be included there. In some + obscure cases it may be necessary to use the underlying operator names + instead. + + + + Also see the starts-with operator ^@ and the + corresponding starts_with() function, which are + useful in cases where simply matching the beginning of a string is + needed. + + + + + + <function>SIMILAR TO</function> Regular Expressions + + + regular expression + + + + + SIMILAR TO + + + substring + + + +string SIMILAR TO pattern ESCAPE escape-character +string NOT SIMILAR TO pattern ESCAPE escape-character + + + + The SIMILAR TO operator returns true or + false depending on whether its pattern matches the given string. + It is similar to LIKE, except that it + interprets the pattern using the SQL standard's definition of a + regular expression. SQL regular expressions are a curious cross + between LIKE notation and common (POSIX) regular + expression notation. + + + + Like LIKE, the SIMILAR TO + operator succeeds only if its pattern matches the entire string; + this is unlike common regular expression behavior where the pattern + can match any part of the string. + Also like + LIKE, SIMILAR TO uses + _ and % as wildcard characters denoting + any single character and any string, respectively (these are + comparable to . and .* in POSIX regular + expressions). + + + + In addition to these facilities borrowed from LIKE, + SIMILAR TO supports these pattern-matching + metacharacters borrowed from POSIX regular expressions: + + + + + | denotes alternation (either of two alternatives). + + + + + * denotes repetition of the previous item zero + or more times. + + + + + + denotes repetition of the previous item one + or more times. + + + + + ? denotes repetition of the previous item zero + or one time. + + + + + {m} denotes repetition + of the previous item exactly m times. + + + + + {m,} denotes repetition + of the previous item m or more times. + + + + + {m,n} + denotes repetition of the previous item at least m and + not more than n times. + + + + + Parentheses () can be used to group items into + a single logical item. + + + + + A bracket expression [...] specifies a character + class, just as in POSIX regular expressions. + + + + + Notice that the period (.) is not a metacharacter + for SIMILAR TO. + + + + As with LIKE, a backslash disables the special + meaning of any of these metacharacters. A different escape character + can be specified with ESCAPE, or the escape + capability can be disabled by writing ESCAPE ''. + + + + According to the SQL standard, omitting ESCAPE + means there is no escape character (rather than defaulting to a + backslash), and a zero-length ESCAPE value is + disallowed. PostgreSQL's behavior in + this regard is therefore slightly nonstandard. + + + + Another nonstandard extension is that following the escape character + with a letter or digit provides access to the escape sequences + defined for POSIX regular expressions; see + , + , and + below. + + + + Some examples: + +'abc' SIMILAR TO 'abc' true +'abc' SIMILAR TO 'a' false +'abc' SIMILAR TO '%(b|d)%' true +'abc' SIMILAR TO '(b|c)%' false +'-abc-' SIMILAR TO '%\mabc\M%' true +'xabcy' SIMILAR TO '%\mabc\M%' false + + + + + The substring function with three parameters + provides extraction of a substring that matches an SQL + regular expression pattern. The function can be written according + to standard SQL syntax: + +substring(string similar pattern escape escape-character) + + or using the now obsolete SQL:1999 syntax: + +substring(string from pattern for escape-character) + + or as a plain three-argument function: + +substring(string, pattern, escape-character) + + As with SIMILAR TO, the + specified pattern must match the entire data string, or else the + function fails and returns null. To indicate the part of the + pattern for which the matching data sub-string is of interest, + the pattern should contain + two occurrences of the escape character followed by a double quote + ("). + The text matching the portion of the pattern + between these separators is returned when the match is successful. + + + + The escape-double-quote separators actually + divide substring's pattern into three independent + regular expressions; for example, a vertical bar (|) + in any of the three sections affects only that section. Also, the first + and third of these regular expressions are defined to match the smallest + possible amount of text, not the largest, when there is any ambiguity + about how much of the data string matches which pattern. (In POSIX + parlance, the first and third regular expressions are forced to be + non-greedy.) + + + + As an extension to the SQL standard, PostgreSQL + allows there to be just one escape-double-quote separator, in which case + the third regular expression is taken as empty; or no separators, in which + case the first and third regular expressions are taken as empty. + + + + Some examples, with #" delimiting the return string: + +substring('foobar' similar '%#"o_b#"%' escape '#') oob +substring('foobar' similar '#"o_b#"%' escape '#') NULL + + + + + + <acronym>POSIX</acronym> Regular Expressions + + + regular expression + pattern matching + + + substring + + + regexp_count + + + regexp_instr + + + regexp_like + + + regexp_match + + + regexp_matches + + + regexp_replace + + + regexp_split_to_table + + + regexp_split_to_array + + + regexp_substr + + + + lists the available + operators for pattern matching using POSIX regular expressions. + + + + Regular Expression Match Operators + + + + + + Operator + + + Description + + + Example(s) + + + + + + + + text ~ text + boolean + + + String matches regular expression, case sensitively + + + 'thomas' ~ 't.*ma' + t + + + + + + text ~* text + boolean + + + String matches regular expression, case-insensitively + + + 'thomas' ~* 'T.*ma' + t + + + + + + text !~ text + boolean + + + String does not match regular expression, case sensitively + + + 'thomas' !~ 't.*max' + t + + + + + + text !~* text + boolean + + + String does not match regular expression, case-insensitively + + + 'thomas' !~* 'T.*ma' + f + + + + +
+ + + POSIX regular expressions provide a more + powerful means for pattern matching than the LIKE and + SIMILAR TO operators. + Many Unix tools such as egrep, + sed, or awk use a pattern + matching language that is similar to the one described here. + + + + A regular expression is a character sequence that is an + abbreviated definition of a set of strings (a regular + set). A string is said to match a regular expression + if it is a member of the regular set described by the regular + expression. As with LIKE, pattern characters + match string characters exactly unless they are special characters + in the regular expression language — but regular expressions use + different special characters than LIKE does. + Unlike LIKE patterns, a + regular expression is allowed to match anywhere within a string, unless + the regular expression is explicitly anchored to the beginning or + end of the string. + + + + Some examples: + +'abcd' ~ 'bc' true +'abcd' ~ 'a.c' true — dot matches any character +'abcd' ~ 'a.*d' true — * repeats the preceding pattern item +'abcd' ~ '(b|x)' true — | means OR, parentheses group +'abcd' ~ '^a' true — ^ anchors to start of string +'abcd' ~ '^(b|c)' false — would match except for anchoring + + + + + The POSIX pattern language is described in much + greater detail below. + + + + The substring function with two parameters, + substring(string from + pattern), provides extraction of a + substring + that matches a POSIX regular expression pattern. It returns null if + there is no match, otherwise the first portion of the text that matched the + pattern. But if the pattern contains any parentheses, the portion + of the text that matched the first parenthesized subexpression (the + one whose left parenthesis comes first) is + returned. You can put parentheses around the whole expression + if you want to use parentheses within it without triggering this + exception. If you need parentheses in the pattern before the + subexpression you want to extract, see the non-capturing parentheses + described below. + + + + Some examples: + +substring('foobar' from 'o.b') oob +substring('foobar' from 'o(.)b') o + + + + + The regexp_count function counts the number of + places where a POSIX regular expression pattern matches a string. + It has the syntax + regexp_count(string, + pattern + , start + , flags + ). + pattern is searched for + in string, normally from the beginning of + the string, but if the start parameter is + provided then beginning from that character index. + The flags parameter is an optional text + string containing zero or more single-letter flags that change the + function's behavior. For example, including i in + flags specifies case-insensitive matching. + Supported flags are described in + . + + + + Some examples: + +regexp_count('ABCABCAXYaxy', 'A.') 3 +regexp_count('ABCABCAXYaxy', 'A.', 1, 'i') 4 + + + + + The regexp_instr function returns the starting or + ending position of the N'th match of a + POSIX regular expression pattern to a string, or zero if there is no + such match. It has the syntax + regexp_instr(string, + pattern + , start + , N + , endoption + , flags + , subexpr + ). + pattern is searched for + in string, normally from the beginning of + the string, but if the start parameter is + provided then beginning from that character index. + If N is specified + then the N'th match of the pattern + is located, otherwise the first match is located. + If the endoption parameter is omitted or + specified as zero, the function returns the position of the first + character of the match. Otherwise, endoption + must be one, and the function returns the position of the character + following the match. + The flags parameter is an optional text + string containing zero or more single-letter flags that change the + function's behavior. Supported flags are described + in . + For a pattern containing parenthesized + subexpressions, subexpr is an integer + indicating which subexpression is of interest: the result identifies + the position of the substring matching that subexpression. + Subexpressions are numbered in the order of their leading parentheses. + When subexpr is omitted or zero, the result + identifies the position of the whole match regardless of + parenthesized subexpressions. + + + + Some examples: + +regexp_instr('number of your street, town zip, FR', '[^,]+', 1, 2) + 23 +regexp_instr(string=>'ABCDEFGHI', pattern=>'(c..)(...)', start=>1, "N"=>1, endoption=>0, flags=>'i', subexpr=>2) + 6 + + + + + The regexp_like function checks whether a match + of a POSIX regular expression pattern occurs within a string, + returning boolean true or false. It has the syntax + regexp_like(string, + pattern + , flags ). + The flags parameter is an optional text + string containing zero or more single-letter flags that change the + function's behavior. Supported flags are described + in . + This function has the same results as the ~ + operator if no flags are specified. If only the i + flag is specified, it has the same results as + the ~* operator. + + + + Some examples: + +regexp_like('Hello World', 'world') false +regexp_like('Hello World', 'world', 'i') true + + + + + The regexp_match function returns a text array of + matching substring(s) within the first match of a POSIX + regular expression pattern to a string. It has the syntax + regexp_match(string, + pattern , flags ). + If there is no match, the result is NULL. + If a match is found, and the pattern contains no + parenthesized subexpressions, then the result is a single-element text + array containing the substring matching the whole pattern. + If a match is found, and the pattern contains + parenthesized subexpressions, then the result is a text array + whose n'th element is the substring matching + the n'th parenthesized subexpression of + the pattern (not counting non-capturing + parentheses; see below for details). + The flags parameter is an optional text string + containing zero or more single-letter flags that change the function's + behavior. Supported flags are described + in . + + + + Some examples: + +SELECT regexp_match('foobarbequebaz', 'bar.*que'); + regexp_match +-------------- + {barbeque} +(1 row) + +SELECT regexp_match('foobarbequebaz', '(bar)(beque)'); + regexp_match +-------------- + {bar,beque} +(1 row) + + + + + + In the common case where you just want the whole matching substring + or NULL for no match, the best solution is to + use regexp_substr(). + However, regexp_substr() only exists + in PostgreSQL version 15 and up. When + working in older versions, you can extract the first element + of regexp_match()'s result, for example: + +SELECT (regexp_match('foobarbequebaz', 'bar.*que'))[1]; + regexp_match +-------------- + barbeque +(1 row) + + + + + + The regexp_matches function returns a set of text arrays + of matching substring(s) within matches of a POSIX regular + expression pattern to a string. It has the same syntax as + regexp_match. + This function returns no rows if there is no match, one row if there is + a match and the g flag is not given, or N + rows if there are N matches and the g flag + is given. Each returned row is a text array containing the whole + matched substring or the substrings matching parenthesized + subexpressions of the pattern, just as described above + for regexp_match. + regexp_matches accepts all the flags shown + in , plus + the g flag which commands it to return all matches, not + just the first one. + + + + Some examples: + +SELECT regexp_matches('foo', 'not there'); + regexp_matches +---------------- +(0 rows) + +SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); + regexp_matches +---------------- + {bar,beque} + {bazil,barf} +(2 rows) + + + + + + In most cases regexp_matches() should be used with + the g flag, since if you only want the first match, it's + easier and more efficient to use regexp_match(). + However, regexp_match() only exists + in PostgreSQL version 10 and up. When working in older + versions, a common trick is to place a regexp_matches() + call in a sub-select, for example: + +SELECT col1, (SELECT regexp_matches(col2, '(bar)(beque)')) FROM tab; + + This produces a text array if there's a match, or NULL if + not, the same as regexp_match() would do. Without the + sub-select, this query would produce no output at all for table rows + without a match, which is typically not the desired behavior. + + + + + The regexp_replace function provides substitution of + new text for substrings that match POSIX regular expression patterns. + It has the syntax + regexp_replace(string, + pattern, replacement + , flags ) + or + regexp_replace(string, + pattern, replacement, + start + , N + , flags ). + The source string is returned unchanged if + there is no match to the pattern. If there is a + match, the string is returned with the + replacement string substituted for the matching + substring. The replacement string can contain + \n, where n is 1 + through 9, to indicate that the source substring matching the + n'th parenthesized subexpression of the pattern should be + inserted, and it can contain \& to indicate that the + substring matching the entire pattern should be inserted. Write + \\ if you need to put a literal backslash in the replacement + text. + pattern is searched for + in string, normally from the beginning of + the string, but if the start parameter is + provided then beginning from that character index. + By default, only the first match of the pattern is replaced. + If N is specified and is greater than zero, + then the N'th match of the pattern + is replaced. + If the g flag is given, or + if N is specified and is zero, then all + matches at or after the start position are + replaced. (The g flag is ignored + when N is specified.) + The flags parameter is an optional text + string containing zero or more single-letter flags that change the + function's behavior. Supported flags (though + not g) are + described in . + + + + Some examples: + +regexp_replace('foobarbaz', 'b..', 'X') + fooXbaz +regexp_replace('foobarbaz', 'b..', 'X', 'g') + fooXX +regexp_replace('foobarbaz', 'b(..)', 'X\1Y', 'g') + fooXarYXazY +regexp_replace('A PostgreSQL function', 'a|e|i|o|u', 'X', 1, 0, 'i') + X PXstgrXSQL fXnctXXn +regexp_replace(string=>'A PostgreSQL function', pattern=>'a|e|i|o|u', replacement=>'X', start=>1, "N"=>3, flags=>'i') + A PostgrXSQL function + + + + + The regexp_split_to_table function splits a string using a POSIX + regular expression pattern as a delimiter. It has the syntax + regexp_split_to_table(string, pattern + , flags ). + If there is no match to the pattern, the function returns the + string. If there is at least one match, for each match it returns + the text from the end of the last match (or the beginning of the string) + to the beginning of the match. When there are no more matches, it + returns the text from the end of the last match to the end of the string. + The flags parameter is an optional text string containing + zero or more single-letter flags that change the function's behavior. + regexp_split_to_table supports the flags described in + . + + + + The regexp_split_to_array function behaves the same as + regexp_split_to_table, except that regexp_split_to_array + returns its result as an array of text. It has the syntax + regexp_split_to_array(string, pattern + , flags ). + The parameters are the same as for regexp_split_to_table. + + + + Some examples: + +SELECT foo FROM regexp_split_to_table('the quick brown fox jumps over the lazy dog', '\s+') AS foo; + foo +------- + the + quick + brown + fox + jumps + over + the + lazy + dog +(9 rows) + +SELECT regexp_split_to_array('the quick brown fox jumps over the lazy dog', '\s+'); + regexp_split_to_array +----------------------------------------------- + {the,quick,brown,fox,jumps,over,the,lazy,dog} +(1 row) + +SELECT foo FROM regexp_split_to_table('the quick brown fox', '\s*') AS foo; + foo +----- + t + h + e + q + u + i + c + k + b + r + o + w + n + f + o + x +(16 rows) + + + + + As the last example demonstrates, the regexp split functions ignore + zero-length matches that occur at the start or end of the string + or immediately after a previous match. This is contrary to the strict + definition of regexp matching that is implemented by + the other regexp functions, but is usually the most convenient behavior + in practice. Other software systems such as Perl use similar definitions. + + + + The regexp_substr function returns the substring + that matches a POSIX regular expression pattern, + or NULL if there is no match. It has the syntax + regexp_substr(string, + pattern + , start + , N + , flags + , subexpr + ). + pattern is searched for + in string, normally from the beginning of + the string, but if the start parameter is + provided then beginning from that character index. + If N is specified + then the N'th match of the pattern + is returned, otherwise the first match is returned. + The flags parameter is an optional text + string containing zero or more single-letter flags that change the + function's behavior. Supported flags are described + in . + For a pattern containing parenthesized + subexpressions, subexpr is an integer + indicating which subexpression is of interest: the result is the + substring matching that subexpression. + Subexpressions are numbered in the order of their leading parentheses. + When subexpr is omitted or zero, the result + is the whole match regardless of parenthesized subexpressions. + + + + Some examples: + +regexp_substr('number of your street, town zip, FR', '[^,]+', 1, 2) + town zip +regexp_substr('ABCDEFGHI', '(c..)(...)', 1, 1, 'i', 2) + FGH + + + + + + + Regular Expression Details + + + PostgreSQL's regular expressions are implemented + using a software package written by Henry Spencer. Much of + the description of regular expressions below is copied verbatim from his + manual. + + + + Regular expressions (REs), as defined in + POSIX 1003.2, come in two forms: + extended REs or EREs + (roughly those of egrep), and + basic REs or BREs + (roughly those of ed). + PostgreSQL supports both forms, and + also implements some extensions + that are not in the POSIX standard, but have become widely used + due to their availability in programming languages such as Perl and Tcl. + REs using these non-POSIX extensions are called + advanced REs or AREs + in this documentation. AREs are almost an exact superset of EREs, + but BREs have several notational incompatibilities (as well as being + much more limited). + We first describe the ARE and ERE forms, noting features that apply + only to AREs, and then describe how BREs differ. + + + + + PostgreSQL always initially presumes that a regular + expression follows the ARE rules. However, the more limited ERE or + BRE rules can be chosen by prepending an embedded option + to the RE pattern, as described in . + This can be useful for compatibility with applications that expect + exactly the POSIX 1003.2 rules. + + + + + A regular expression is defined as one or more + branches, separated by + |. It matches anything that matches one of the + branches. + + + + A branch is zero or more quantified atoms or + constraints, concatenated. + It matches a match for the first, followed by a match for the second, etc.; + an empty branch matches the empty string. + + + + A quantified atom is an atom possibly followed + by a single quantifier. + Without a quantifier, it matches a match for the atom. + With a quantifier, it can match some number of matches of the atom. + An atom can be any of the possibilities + shown in . + The possible quantifiers and their meanings are shown in + . + + + + A constraint matches an empty string, but matches only when + specific conditions are met. A constraint can be used where an atom + could be used, except it cannot be followed by a quantifier. + The simple constraints are shown in + ; + some more constraints are described later. + + + + + Regular Expression Atoms + + + + + + + Atom + Description + + + + + + (re) + (where re is any regular expression) + matches a match for + re, with the match noted for possible reporting + + + + (?:re) + as above, but the match is not noted for reporting + (a non-capturing set of parentheses) + (AREs only) + + + + . + matches any single character + + + + [chars] + a bracket expression, + matching any one of the chars (see + for more detail) + + + + \k + (where k is a non-alphanumeric character) + matches that character taken as an ordinary character, + e.g., \\ matches a backslash character + + + + \c + where c is alphanumeric + (possibly followed by other characters) + is an escape, see + (AREs only; in EREs and BREs, this matches c) + + + + { + when followed by a character other than a digit, + matches the left-brace character {; + when followed by a digit, it is the beginning of a + bound (see below) + + + + x + where x is a single character with no other + significance, matches that character + + + +
+ + + An RE cannot end with a backslash (\). + + + + + If you have turned off, + any backslashes you write in literal string constants will need to be + doubled. See for more information. + + + + + Regular Expression Quantifiers + + + + + + + Quantifier + Matches + + + + + + * + a sequence of 0 or more matches of the atom + + + + + + a sequence of 1 or more matches of the atom + + + + ? + a sequence of 0 or 1 matches of the atom + + + + {m} + a sequence of exactly m matches of the atom + + + + {m,} + a sequence of m or more matches of the atom + + + + + {m,n} + a sequence of m through n + (inclusive) matches of the atom; m cannot exceed + n + + + + *? + non-greedy version of * + + + + +? + non-greedy version of + + + + + ?? + non-greedy version of ? + + + + {m}? + non-greedy version of {m} + + + + {m,}? + non-greedy version of {m,} + + + + + {m,n}? + non-greedy version of {m,n} + + + +
+ + + The forms using {...} + are known as bounds. + The numbers m and n within a bound are + unsigned decimal integers with permissible values from 0 to 255 inclusive. + + + + Non-greedy quantifiers (available in AREs only) match the + same possibilities as their corresponding normal (greedy) + counterparts, but prefer the smallest number rather than the largest + number of matches. + See for more detail. + + + + + A quantifier cannot immediately follow another quantifier, e.g., + ** is invalid. + A quantifier cannot + begin an expression or subexpression or follow + ^ or |. + + + + + Regular Expression Constraints + + + + + + + Constraint + Description + + + + + + ^ + matches at the beginning of the string + + + + $ + matches at the end of the string + + + + (?=re) + positive lookahead matches at any point + where a substring matching re begins + (AREs only) + + + + (?!re) + negative lookahead matches at any point + where no substring matching re begins + (AREs only) + + + + (?<=re) + positive lookbehind matches at any point + where a substring matching re ends + (AREs only) + + + + (?<!re) + negative lookbehind matches at any point + where no substring matching re ends + (AREs only) + + + +
+ + + Lookahead and lookbehind constraints cannot contain back + references (see ), + and all parentheses within them are considered non-capturing. + +
+ + + Bracket Expressions + + + A bracket expression is a list of + characters enclosed in []. It normally matches + any single character from the list (but see below). If the list + begins with ^, it matches any single character + not from the rest of the list. + If two characters + in the list are separated by -, this is + shorthand for the full range of characters between those two + (inclusive) in the collating sequence, + e.g., [0-9] in ASCII matches + any decimal digit. It is illegal for two ranges to share an + endpoint, e.g., a-c-e. Ranges are very + collating-sequence-dependent, so portable programs should avoid + relying on them. + + + + To include a literal ] in the list, make it the + first character (after ^, if that is used). To + include a literal -, make it the first or last + character, or the second endpoint of a range. To use a literal + - as the first endpoint of a range, enclose it + in [. and .] to make it a + collating element (see below). With the exception of these characters, + some combinations using [ + (see next paragraphs), and escapes (AREs only), all other special + characters lose their special significance within a bracket expression. + In particular, \ is not special when following + ERE or BRE rules, though it is special (as introducing an escape) + in AREs. + + + + Within a bracket expression, a collating element (a character, a + multiple-character sequence that collates as if it were a single + character, or a collating-sequence name for either) enclosed in + [. and .] stands for the + sequence of characters of that collating element. The sequence is + treated as a single element of the bracket expression's list. This + allows a bracket + expression containing a multiple-character collating element to + match more than one character, e.g., if the collating sequence + includes a ch collating element, then the RE + [[.ch.]]*c matches the first five characters of + chchcc. + + + + + PostgreSQL currently does not support multi-character collating + elements. This information describes possible future behavior. + + + + + Within a bracket expression, a collating element enclosed in + [= and =] is an equivalence + class, standing for the sequences of characters of all collating + elements equivalent to that one, including itself. (If there are + no other equivalent collating elements, the treatment is as if the + enclosing delimiters were [. and + .].) For example, if o and + ^ are the members of an equivalence class, then + [[=o=]], [[=^=]], and + [o^] are all synonymous. An equivalence class + cannot be an endpoint of a range. + + + + Within a bracket expression, the name of a character class + enclosed in [: and :] stands + for the list of all characters belonging to that class. A character + class cannot be used as an endpoint of a range. + The POSIX standard defines these character class + names: + alnum (letters and numeric digits), + alpha (letters), + blank (space and tab), + cntrl (control characters), + digit (numeric digits), + graph (printable characters except space), + lower (lower-case letters), + print (printable characters including space), + punct (punctuation), + space (any white space), + upper (upper-case letters), + and xdigit (hexadecimal digits). + The behavior of these standard character classes is generally + consistent across platforms for characters in the 7-bit ASCII set. + Whether a given non-ASCII character is considered to belong to one + of these classes depends on the collation + that is used for the regular-expression function or operator + (see ), or by default on the + database's LC_CTYPE locale setting (see + ). The classification of non-ASCII + characters can vary across platforms even in similarly-named + locales. (But the C locale never considers any + non-ASCII characters to belong to any of these classes.) + In addition to these standard character + classes, PostgreSQL defines + the word character class, which is the same as + alnum plus the underscore (_) + character, and + the ascii character class, which contains exactly + the 7-bit ASCII set. + + + + There are two special cases of bracket expressions: the bracket + expressions [[:<:]] and + [[:>:]] are constraints, + matching empty strings at the beginning + and end of a word respectively. A word is defined as a sequence + of word characters that is neither preceded nor followed by word + characters. A word character is any character belonging to the + word character class, that is, any letter, digit, + or underscore. This is an extension, compatible with but not + specified by POSIX 1003.2, and should be used with + caution in software intended to be portable to other systems. + The constraint escapes described below are usually preferable; they + are no more standard, but are easier to type. + + + + + Regular Expression Escapes + + + Escapes are special sequences beginning with \ + followed by an alphanumeric character. Escapes come in several varieties: + character entry, class shorthands, constraint escapes, and back references. + A \ followed by an alphanumeric character but not constituting + a valid escape is illegal in AREs. + In EREs, there are no escapes: outside a bracket expression, + a \ followed by an alphanumeric character merely stands for + that character as an ordinary character, and inside a bracket expression, + \ is an ordinary character. + (The latter is the one actual incompatibility between EREs and AREs.) + + + + Character-entry escapes exist to make it easier to specify + non-printing and other inconvenient characters in REs. They are + shown in . + + + + Class-shorthand escapes provide shorthands for certain + commonly-used character classes. They are + shown in . + + + + A constraint escape is a constraint, + matching the empty string if specific conditions are met, + written as an escape. They are + shown in . + + + + A back reference (\n) matches the + same string matched by the previous parenthesized subexpression specified + by the number n + (see ). For example, + ([bc])\1 matches bb or cc + but not bc or cb. + The subexpression must entirely precede the back reference in the RE. + Subexpressions are numbered in the order of their leading parentheses. + Non-capturing parentheses do not define subexpressions. + The back reference considers only the string characters matched by the + referenced subexpression, not any constraints contained in it. For + example, (^\d)\1 will match 22. + + + + Regular Expression Character-Entry Escapes + + + + + + + Escape + Description + + + + + + \a + alert (bell) character, as in C + + + + \b + backspace, as in C + + + + \B + synonym for backslash (\) to help reduce the need for backslash + doubling + + + + \cX + (where X is any character) the character whose + low-order 5 bits are the same as those of + X, and whose other bits are all zero + + + + \e + the character whose collating-sequence name + is ESC, + or failing that, the character with octal value 033 + + + + \f + form feed, as in C + + + + \n + newline, as in C + + + + \r + carriage return, as in C + + + + \t + horizontal tab, as in C + + + + \uwxyz + (where wxyz is exactly four hexadecimal digits) + the character whose hexadecimal value is + 0xwxyz + + + + + \Ustuvwxyz + (where stuvwxyz is exactly eight hexadecimal + digits) + the character whose hexadecimal value is + 0xstuvwxyz + + + + + \v + vertical tab, as in C + + + + \xhhh + (where hhh is any sequence of hexadecimal + digits) + the character whose hexadecimal value is + 0xhhh + (a single character no matter how many hexadecimal digits are used) + + + + + \0 + the character whose value is 0 (the null byte) + + + + \xy + (where xy is exactly two octal digits, + and is not a back reference) + the character whose octal value is + 0xy + + + + \xyz + (where xyz is exactly three octal digits, + and is not a back reference) + the character whose octal value is + 0xyz + + + +
+ + + Hexadecimal digits are 0-9, + a-f, and A-F. + Octal digits are 0-7. + + + + Numeric character-entry escapes specifying values outside the ASCII range + (0–127) have meanings dependent on the database encoding. When the + encoding is UTF-8, escape values are equivalent to Unicode code points, + for example \u1234 means the character U+1234. + For other multibyte encodings, character-entry escapes usually just + specify the concatenation of the byte values for the character. If the + escape value does not correspond to any legal character in the database + encoding, no error will be raised, but it will never match any data. + + + + The character-entry escapes are always taken as ordinary characters. + For example, \135 is ] in ASCII, but + \135 does not terminate a bracket expression. + + + + Regular Expression Class-Shorthand Escapes + + + + + + + Escape + Description + + + + + + \d + matches any digit, like + [[:digit:]] + + + + \s + matches any whitespace character, like + [[:space:]] + + + + \w + matches any word character, like + [[:word:]] + + + + \D + matches any non-digit, like + [^[:digit:]] + + + + \S + matches any non-whitespace character, like + [^[:space:]] + + + + \W + matches any non-word character, like + [^[:word:]] + + + +
+ + + The class-shorthand escapes also work within bracket expressions, + although the definitions shown above are not quite syntactically + valid in that context. + For example, [a-c\d] is equivalent to + [a-c[:digit:]]. + + + + Regular Expression Constraint Escapes + + + + + + + Escape + Description + + + + + + \A + matches only at the beginning of the string + (see for how this differs from + ^) + + + + \m + matches only at the beginning of a word + + + + \M + matches only at the end of a word + + + + \y + matches only at the beginning or end of a word + + + + \Y + matches only at a point that is not the beginning or end of a + word + + + + \Z + matches only at the end of the string + (see for how this differs from + $) + + + +
+ + + A word is defined as in the specification of + [[:<:]] and [[:>:]] above. + Constraint escapes are illegal within bracket expressions. + + + + Regular Expression Back References + + + + + + + Escape + Description + + + + + + \m + (where m is a nonzero digit) + a back reference to the m'th subexpression + + + + \mnn + (where m is a nonzero digit, and + nn is some more digits, and the decimal value + mnn is not greater than the number of closing capturing + parentheses seen so far) + a back reference to the mnn'th subexpression + + + +
+ + + + There is an inherent ambiguity between octal character-entry + escapes and back references, which is resolved by the following heuristics, + as hinted at above. + A leading zero always indicates an octal escape. + A single non-zero digit, not followed by another digit, + is always taken as a back reference. + A multi-digit sequence not starting with a zero is taken as a back + reference if it comes after a suitable subexpression + (i.e., the number is in the legal range for a back reference), + and otherwise is taken as octal. + + +
+ + + Regular Expression Metasyntax + + + In addition to the main syntax described above, there are some special + forms and miscellaneous syntactic facilities available. + + + + An RE can begin with one of two special director prefixes. + If an RE begins with ***:, + the rest of the RE is taken as an ARE. (This normally has no effect in + PostgreSQL, since REs are assumed to be AREs; + but it does have an effect if ERE or BRE mode had been specified by + the flags parameter to a regex function.) + If an RE begins with ***=, + the rest of the RE is taken to be a literal string, + with all characters considered ordinary characters. + + + + An ARE can begin with embedded options: + a sequence (?xyz) + (where xyz is one or more alphabetic characters) + specifies options affecting the rest of the RE. + These options override any previously determined options — + in particular, they can override the case-sensitivity behavior implied by + a regex operator, or the flags parameter to a regex + function. + The available option letters are + shown in . + Note that these same option letters are used in the flags + parameters of regex functions. + + + + ARE Embedded-Option Letters + + + + + + + Option + Description + + + + + + b + rest of RE is a BRE + + + + c + case-sensitive matching (overrides operator type) + + + + e + rest of RE is an ERE + + + + i + case-insensitive matching (see + ) (overrides operator type) + + + + m + historical synonym for n + + + + n + newline-sensitive matching (see + ) + + + + p + partial newline-sensitive matching (see + ) + + + + q + rest of RE is a literal (quoted) string, all ordinary + characters + + + + s + non-newline-sensitive matching (default) + + + + t + tight syntax (default; see below) + + + + w + inverse partial newline-sensitive (weird) matching + (see ) + + + + x + expanded syntax (see below) + + + +
+ + + Embedded options take effect at the ) terminating the sequence. + They can appear only at the start of an ARE (after the + ***: director if any). + + + + In addition to the usual (tight) RE syntax, in which all + characters are significant, there is an expanded syntax, + available by specifying the embedded x option. + In the expanded syntax, + white-space characters in the RE are ignored, as are + all characters between a # + and the following newline (or the end of the RE). This + permits paragraphing and commenting a complex RE. + There are three exceptions to that basic rule: + + + + + a white-space character or # preceded by \ is + retained + + + + + white space or # within a bracket expression is retained + + + + + white space and comments cannot appear within multi-character symbols, + such as (?: + + + + + For this purpose, white-space characters are blank, tab, newline, and + any character that belongs to the space character class. + + + + Finally, in an ARE, outside bracket expressions, the sequence + (?#ttt) + (where ttt is any text not containing a )) + is a comment, completely ignored. + Again, this is not allowed between the characters of + multi-character symbols, like (?:. + Such comments are more a historical artifact than a useful facility, + and their use is deprecated; use the expanded syntax instead. + + + + None of these metasyntax extensions is available if + an initial ***= director + has specified that the user's input be treated as a literal string + rather than as an RE. + +
+ + + Regular Expression Matching Rules + + + In the event that an RE could match more than one substring of a given + string, the RE matches the one starting earliest in the string. + If the RE could match more than one substring starting at that point, + either the longest possible match or the shortest possible match will + be taken, depending on whether the RE is greedy or + non-greedy. + + + + Whether an RE is greedy or not is determined by the following rules: + + + + Most atoms, and all constraints, have no greediness attribute (because + they cannot match variable amounts of text anyway). + + + + + Adding parentheses around an RE does not change its greediness. + + + + + A quantified atom with a fixed-repetition quantifier + ({m} + or + {m}?) + has the same greediness (possibly none) as the atom itself. + + + + + A quantified atom with other normal quantifiers (including + {m,n} + with m equal to n) + is greedy (prefers longest match). + + + + + A quantified atom with a non-greedy quantifier (including + {m,n}? + with m equal to n) + is non-greedy (prefers shortest match). + + + + + A branch — that is, an RE that has no top-level + | operator — has the same greediness as the first + quantified atom in it that has a greediness attribute. + + + + + An RE consisting of two or more branches connected by the + | operator is always greedy. + + + + + + + The above rules associate greediness attributes not only with individual + quantified atoms, but with branches and entire REs that contain quantified + atoms. What that means is that the matching is done in such a way that + the branch, or whole RE, matches the longest or shortest possible + substring as a whole. Once the length of the entire match + is determined, the part of it that matches any particular subexpression + is determined on the basis of the greediness attribute of that + subexpression, with subexpressions starting earlier in the RE taking + priority over ones starting later. + + + + An example of what this means: + +SELECT SUBSTRING('XY1234Z', 'Y*([0-9]{1,3})'); +Result: 123 +SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})'); +Result: 1 + + In the first case, the RE as a whole is greedy because Y* + is greedy. It can match beginning at the Y, and it matches + the longest possible string starting there, i.e., Y123. + The output is the parenthesized part of that, or 123. + In the second case, the RE as a whole is non-greedy because Y*? + is non-greedy. It can match beginning at the Y, and it matches + the shortest possible string starting there, i.e., Y1. + The subexpression [0-9]{1,3} is greedy but it cannot change + the decision as to the overall match length; so it is forced to match + just 1. + + + + In short, when an RE contains both greedy and non-greedy subexpressions, + the total match length is either as long as possible or as short as + possible, according to the attribute assigned to the whole RE. The + attributes assigned to the subexpressions only affect how much of that + match they are allowed to eat relative to each other. + + + + The quantifiers {1,1} and {1,1}? + can be used to force greediness or non-greediness, respectively, + on a subexpression or a whole RE. + This is useful when you need the whole RE to have a greediness attribute + different from what's deduced from its elements. As an example, + suppose that we are trying to separate a string containing some digits + into the digits and the parts before and after them. We might try to + do that like this: + +SELECT regexp_match('abc01234xyz', '(.*)(\d+)(.*)'); +Result: {abc0123,4,xyz} + + That didn't work: the first .* is greedy so + it eats as much as it can, leaving the \d+ to + match at the last possible place, the last digit. We might try to fix + that by making it non-greedy: + +SELECT regexp_match('abc01234xyz', '(.*?)(\d+)(.*)'); +Result: {abc,0,""} + + That didn't work either, because now the RE as a whole is non-greedy + and so it ends the overall match as soon as possible. We can get what + we want by forcing the RE as a whole to be greedy: + +SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); +Result: {abc,01234,xyz} + + Controlling the RE's overall greediness separately from its components' + greediness allows great flexibility in handling variable-length patterns. + + + + When deciding what is a longer or shorter match, + match lengths are measured in characters, not collating elements. + An empty string is considered longer than no match at all. + For example: + bb* + matches the three middle characters of abbbc; + (week|wee)(night|knights) + matches all ten characters of weeknights; + when (.*).* + is matched against abc the parenthesized subexpression + matches all three characters; and when + (a*)* is matched against bc + both the whole RE and the parenthesized + subexpression match an empty string. + + + + If case-independent matching is specified, + the effect is much as if all case distinctions had vanished from the + alphabet. + When an alphabetic that exists in multiple cases appears as an + ordinary character outside a bracket expression, it is effectively + transformed into a bracket expression containing both cases, + e.g., x becomes [xX]. + When it appears inside a bracket expression, all case counterparts + of it are added to the bracket expression, e.g., + [x] becomes [xX] + and [^x] becomes [^xX]. + + + + If newline-sensitive matching is specified, . + and bracket expressions using ^ + will never match the newline character + (so that matches will not cross lines unless the RE + explicitly includes a newline) + and ^ and $ + will match the empty string after and before a newline + respectively, in addition to matching at beginning and end of string + respectively. + But the ARE escapes \A and \Z + continue to match beginning or end of string only. + Also, the character class shorthands \D + and \W will match a newline regardless of this mode. + (Before PostgreSQL 14, they did not match + newlines when in newline-sensitive mode. + Write [^[:digit:]] + or [^[:word:]] to get the old behavior.) + + + + If partial newline-sensitive matching is specified, + this affects . and bracket expressions + as with newline-sensitive matching, but not ^ + and $. + + + + If inverse partial newline-sensitive matching is specified, + this affects ^ and $ + as with newline-sensitive matching, but not . + and bracket expressions. + This isn't very useful but is provided for symmetry. + + + + + Limits and Compatibility + + + No particular limit is imposed on the length of REs in this + implementation. However, + programs intended to be highly portable should not employ REs longer + than 256 bytes, + as a POSIX-compliant implementation can refuse to accept such REs. + + + + The only feature of AREs that is actually incompatible with + POSIX EREs is that \ does not lose its special + significance inside bracket expressions. + All other ARE features use syntax which is illegal or has + undefined or unspecified effects in POSIX EREs; + the *** syntax of directors likewise is outside the POSIX + syntax for both BREs and EREs. + + + + Many of the ARE extensions are borrowed from Perl, but some have + been changed to clean them up, and a few Perl extensions are not present. + Incompatibilities of note include \b, \B, + the lack of special treatment for a trailing newline, + the addition of complemented bracket expressions to the things + affected by newline-sensitive matching, + the restrictions on parentheses and back references in lookahead/lookbehind + constraints, and the longest/shortest-match (rather than first-match) + matching semantics. + + + + + Basic Regular Expressions + + + BREs differ from EREs in several respects. + In BREs, |, +, and ? + are ordinary characters and there is no equivalent + for their functionality. + The delimiters for bounds are + \{ and \}, + with { and } + by themselves ordinary characters. + The parentheses for nested subexpressions are + \( and \), + with ( and ) by themselves ordinary characters. + ^ is an ordinary character except at the beginning of the + RE or the beginning of a parenthesized subexpression, + $ is an ordinary character except at the end of the + RE or the end of a parenthesized subexpression, + and * is an ordinary character if it appears at the beginning + of the RE or the beginning of a parenthesized subexpression + (after a possible leading ^). + Finally, single-digit back references are available, and + \< and \> + are synonyms for + [[:<:]] and [[:>:]] + respectively; no other escapes are available in BREs. + + + + + + + Differences from SQL Standard and XQuery + + + LIKE_REGEX + + + + OCCURRENCES_REGEX + + + + POSITION_REGEX + + + + SUBSTRING_REGEX + + + + TRANSLATE_REGEX + + + + XQuery regular expressions + + + + Since SQL:2008, the SQL standard includes regular expression operators + and functions that performs pattern + matching according to the XQuery regular expression + standard: + + LIKE_REGEX + OCCURRENCES_REGEX + POSITION_REGEX + SUBSTRING_REGEX + TRANSLATE_REGEX + + PostgreSQL does not currently implement these + operators and functions. You can get approximately equivalent + functionality in each case as shown in . (Various optional clauses on + both sides have been omitted in this table.) + + + + Regular Expression Functions Equivalencies + + + + + SQL standard + PostgreSQL + + + + + + string LIKE_REGEX pattern + regexp_like(string, pattern) or string ~ pattern + + + + OCCURRENCES_REGEX(pattern IN string) + regexp_count(string, pattern) + + + + POSITION_REGEX(pattern IN string) + regexp_instr(string, pattern) + + + + SUBSTRING_REGEX(pattern IN string) + regexp_substr(string, pattern) + + + + TRANSLATE_REGEX(pattern IN string WITH replacement) + regexp_replace(string, pattern, replacement) + + + +
+ + + Regular expression functions similar to those provided by PostgreSQL are + also available in a number of other SQL implementations, whereas the + SQL-standard functions are not as widely implemented. Some of the + details of the regular expression syntax will likely differ in each + implementation. + + + + The SQL-standard operators and functions use XQuery regular expressions, + which are quite close to the ARE syntax described above. + Notable differences between the existing POSIX-based + regular-expression feature and XQuery regular expressions include: + + + + + XQuery character class subtraction is not supported. An example of + this feature is using the following to match only English + consonants: [a-z-[aeiou]]. + + + + + XQuery character class shorthands \c, + \C, \i, + and \I are not supported. + + + + + XQuery character class elements + using \p{UnicodeProperty} or the + inverse \P{UnicodeProperty} are not supported. + + + + + POSIX interprets character classes such as \w + (see ) + according to the prevailing locale (which you can control by + attaching a COLLATE clause to the operator or + function). XQuery specifies these classes by reference to Unicode + character properties, so equivalent behavior is obtained only with + a locale that follows the Unicode rules. + + + + + The SQL standard (not XQuery itself) attempts to cater for more + variants of newline than POSIX does. The + newline-sensitive matching options described above consider only + ASCII NL (\n) to be a newline, but SQL would have + us treat CR (\r), CRLF (\r\n) + (a Windows-style newline), and some Unicode-only characters like + LINE SEPARATOR (U+2028) as newlines as well. + Notably, . and \s should + count \r\n as one character not two according to + SQL. + + + + + Of the character-entry escapes described in + , + XQuery supports only \n, \r, + and \t. + + + + + XQuery does not support + the [:name:] syntax + for character classes within bracket expressions. + + + + + XQuery does not have lookahead or lookbehind constraints, + nor any of the constraint escapes described in + . + + + + + The metasyntax forms described in + do not exist in XQuery. + + + + + The regular expression flag letters defined by XQuery are + related to but not the same as the option letters for POSIX + (). While the + i and q options behave the + same, others do not: + + + + XQuery's s (allow dot to match newline) + and m (allow ^ + and $ to match at newlines) flags provide + access to the same behaviors as + POSIX's n, p + and w flags, but they + do not match the behavior of + POSIX's s and m flags. + Note in particular that dot-matches-newline is the default + behavior in POSIX but not XQuery. + + + + + XQuery's x (ignore whitespace in pattern) flag + is noticeably different from POSIX's expanded-mode flag. + POSIX's x flag also + allows # to begin a comment in the pattern, + and POSIX will not ignore a whitespace character after a + backslash. + + + + + + + + +
+
+
diff --git a/doc/src/sgml/func/func-math.sgml b/doc/src/sgml/func/func-math.sgml new file mode 100644 index 0000000000000..7528dc4cea4b9 --- /dev/null +++ b/doc/src/sgml/func/func-math.sgml @@ -0,0 +1,1615 @@ + + Mathematical Functions and Operators + + + Mathematical operators are provided for many + PostgreSQL types. For types without + standard mathematical conventions + (e.g., date/time types) we + describe the actual behavior in subsequent sections. + + + + shows the mathematical + operators that are available for the standard numeric types. + Unless otherwise noted, operators shown as + accepting numeric_type are available for all + the types smallint, integer, + bigint, numeric, real, + and double precision. + Operators shown as accepting integral_type + are available for the types smallint, integer, + and bigint. + Except where noted, each form of an operator returns the same data type + as its argument(s). Calls involving multiple argument data types, such + as integer + numeric, + are resolved by using the type appearing later in these lists. + + + + Mathematical Operators + + + + + + Operator + + + Description + + + Example(s) + + + + + + + + numeric_type + numeric_type + numeric_type + + + Addition + + + 2 + 3 + 5 + + + + + + + numeric_type + numeric_type + + + Unary plus (no operation) + + + + 3.5 + 3.5 + + + + + + numeric_type - numeric_type + numeric_type + + + Subtraction + + + 2 - 3 + -1 + + + + + + - numeric_type + numeric_type + + + Negation + + + - (-4) + 4 + + + + + + numeric_type * numeric_type + numeric_type + + + Multiplication + + + 2 * 3 + 6 + + + + + + numeric_type / numeric_type + numeric_type + + + Division (for integral types, division truncates the result towards + zero) + + + 5.0 / 2 + 2.5000000000000000 + + + 5 / 2 + 2 + + + (-5) / 2 + -2 + + + + + + numeric_type % numeric_type + numeric_type + + + Modulo (remainder); available for smallint, + integer, bigint, and numeric + + + 5 % 4 + 1 + + + + + + numeric ^ numeric + numeric + + + double precision ^ double precision + double precision + + + Exponentiation + + + 2 ^ 3 + 8 + + + Unlike typical mathematical practice, multiple uses of + ^ will associate left to right by default: + + + 2 ^ 3 ^ 3 + 512 + + + 2 ^ (3 ^ 3) + 134217728 + + + + + + |/ double precision + double precision + + + Square root + + + |/ 25.0 + 5 + + + + + + ||/ double precision + double precision + + + Cube root + + + ||/ 64.0 + 4 + + + + + + @ numeric_type + numeric_type + + + Absolute value + + + @ -5.0 + 5.0 + + + + + + integral_type & integral_type + integral_type + + + Bitwise AND + + + 91 & 15 + 11 + + + + + + integral_type | integral_type + integral_type + + + Bitwise OR + + + 32 | 3 + 35 + + + + + + integral_type # integral_type + integral_type + + + Bitwise exclusive OR + + + 17 # 5 + 20 + + + + + + ~ integral_type + integral_type + + + Bitwise NOT + + + ~1 + -2 + + + + + + integral_type << integer + integral_type + + + Bitwise shift left + + + 1 << 4 + 16 + + + + + + integral_type >> integer + integral_type + + + Bitwise shift right + + + 8 >> 2 + 2 + + + + + +
+ + + shows the available + mathematical functions. + Many of these functions are provided in multiple forms with different + argument types. + Except where noted, any given form of a function returns the same + data type as its argument(s); cross-type cases are resolved in the + same way as explained above for operators. + The functions working with double precision data are mostly + implemented on top of the host system's C library; accuracy and behavior in + boundary cases can therefore vary depending on the host system. + + + + Mathematical Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + abs + + abs ( numeric_type ) + numeric_type + + + Absolute value + + + abs(-17.4) + 17.4 + + + + + + + cbrt + + cbrt ( double precision ) + double precision + + + Cube root + + + cbrt(64.0) + 4 + + + + + + + ceil + + ceil ( numeric ) + numeric + + + ceil ( double precision ) + double precision + + + Nearest integer greater than or equal to argument + + + ceil(42.2) + 43 + + + ceil(-42.8) + -42 + + + + + + + ceiling + + ceiling ( numeric ) + numeric + + + ceiling ( double precision ) + double precision + + + Nearest integer greater than or equal to argument (same + as ceil) + + + ceiling(95.3) + 96 + + + + + + + degrees + + degrees ( double precision ) + double precision + + + Converts radians to degrees + + + degrees(0.5) + 28.64788975654116 + + + + + + + div + + div ( y numeric, + x numeric ) + numeric + + + Integer quotient of y/x + (truncates towards zero) + + + div(9, 4) + 2 + + + + + + + erf + + erf ( double precision ) + double precision + + + Error function + + + erf(1.0) + 0.8427007929497149 + + + + + + + erfc + + erfc ( double precision ) + double precision + + + Complementary error function (1 - erf(x), without + loss of precision for large inputs) + + + erfc(1.0) + 0.15729920705028513 + + + + + + + exp + + exp ( numeric ) + numeric + + + exp ( double precision ) + double precision + + + Exponential (e raised to the given power) + + + exp(1.0) + 2.7182818284590452 + + + + + + + factorial + + factorial ( bigint ) + numeric + + + Factorial + + + factorial(5) + 120 + + + + + + + floor + + floor ( numeric ) + numeric + + + floor ( double precision ) + double precision + + + Nearest integer less than or equal to argument + + + floor(42.8) + 42 + + + floor(-42.8) + -43 + + + + + + + gamma + + gamma ( double precision ) + double precision + + + Gamma function + + + gamma(0.5) + 1.772453850905516 + + + gamma(6) + 120 + + + + + + + gcd + + gcd ( numeric_type, numeric_type ) + numeric_type + + + Greatest common divisor (the largest positive number that divides both + inputs with no remainder); returns 0 if both inputs + are zero; available for integer, bigint, + and numeric + + + gcd(1071, 462) + 21 + + + + + + + lcm + + lcm ( numeric_type, numeric_type ) + numeric_type + + + Least common multiple (the smallest strictly positive number that is + an integral multiple of both inputs); returns 0 if + either input is zero; available for integer, + bigint, and numeric + + + lcm(1071, 462) + 23562 + + + + + + + lgamma + + lgamma ( double precision ) + double precision + + + Natural logarithm of the absolute value of the gamma function + + + lgamma(1000) + 5905.220423209181 + + + + + + + ln + + ln ( numeric ) + numeric + + + ln ( double precision ) + double precision + + + Natural logarithm + + + ln(2.0) + 0.6931471805599453 + + + + + + + log + + log ( numeric ) + numeric + + + log ( double precision ) + double precision + + + Base 10 logarithm + + + log(100) + 2 + + + + + + + log10 + + log10 ( numeric ) + numeric + + + log10 ( double precision ) + double precision + + + Base 10 logarithm (same as log) + + + log10(1000) + 3 + + + + + + log ( b numeric, + x numeric ) + numeric + + + Logarithm of x to base b + + + log(2.0, 64.0) + 6.0000000000000000 + + + + + + + min_scale + + min_scale ( numeric ) + integer + + + Minimum scale (number of fractional decimal digits) needed + to represent the supplied value precisely + + + min_scale(8.4100) + 2 + + + + + + + mod + + mod ( y numeric_type, + x numeric_type ) + numeric_type + + + Remainder of y/x; + available for smallint, integer, + bigint, and numeric + + + mod(9, 4) + 1 + + + + + + + pi + + pi ( ) + double precision + + + Approximate value of π + + + pi() + 3.141592653589793 + + + + + + + power + + power ( a numeric, + b numeric ) + numeric + + + power ( a double precision, + b double precision ) + double precision + + + a raised to the power of b + + + power(9, 3) + 729 + + + + + + + radians + + radians ( double precision ) + double precision + + + Converts degrees to radians + + + radians(45.0) + 0.7853981633974483 + + + + + + + round + + round ( numeric ) + numeric + + + round ( double precision ) + double precision + + + Rounds to nearest integer. For numeric, ties are + broken by rounding away from zero. For double precision, + the tie-breaking behavior is platform dependent, but + round to nearest even is the most common rule. + + + round(42.4) + 42 + + + + + + round ( v numeric, s integer ) + numeric + + + Rounds v to s decimal + places. Ties are broken by rounding away from zero. + + + round(42.4382, 2) + 42.44 + + + round(1234.56, -1) + 1230 + + + + + + + scale + + scale ( numeric ) + integer + + + Scale of the argument (the number of decimal digits in the fractional part) + + + scale(8.4100) + 4 + + + + + + + sign + + sign ( numeric ) + numeric + + + sign ( double precision ) + double precision + + + Sign of the argument (-1, 0, or +1) + + + sign(-8.4) + -1 + + + + + + + sqrt + + sqrt ( numeric ) + numeric + + + sqrt ( double precision ) + double precision + + + Square root + + + sqrt(2) + 1.4142135623730951 + + + + + + + trim_scale + + trim_scale ( numeric ) + numeric + + + Reduces the value's scale (number of fractional decimal digits) by + removing trailing zeroes + + + trim_scale(8.4100) + 8.41 + + + + + + + trunc + + trunc ( numeric ) + numeric + + + trunc ( double precision ) + double precision + + + Truncates to integer (towards zero) + + + trunc(42.8) + 42 + + + trunc(-42.8) + -42 + + + + + + trunc ( v numeric, s integer ) + numeric + + + Truncates v to s + decimal places + + + trunc(42.4382, 2) + 42.43 + + + + + + + width_bucket + + width_bucket ( operand numeric, low numeric, high numeric, count integer ) + integer + + + width_bucket ( operand double precision, low double precision, high double precision, count integer ) + integer + + + Returns the number of the bucket in + which operand falls in a histogram + having count equal-width buckets spanning the + range low to high. + The buckets have inclusive lower bounds and exclusive upper bounds. + Returns 0 for an input less + than low, + or count+1 for an input + greater than or equal to high. + If low > high, + the behavior is mirror-reversed, with bucket 1 + now being the one just below low, and the + inclusive bounds now being on the upper side. + + + width_bucket(5.35, 0.024, 10.06, 5) + 3 + + + width_bucket(9, 10, 0, 10) + 2 + + + + + + width_bucket ( operand anycompatible, thresholds anycompatiblearray ) + integer + + + Returns the number of the bucket in + which operand falls given an array listing the + inclusive lower bounds of the buckets. + Returns 0 for an input less than the first lower + bound. operand and the array elements can be + of any type having standard comparison operators. + The thresholds array must be + sorted, smallest first, or unexpected results will be + obtained. + + + width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]) + 2 + + + + +
+ + + shows functions for + generating random numbers. + + + + Random Functions + + + + + + Function + + + Description + + + Example(s) + + + + + + + + + random + + random ( ) + double precision + + + Returns a random value in the range 0.0 <= x < 1.0 + + + random() + 0.897124072839091 + + + + + + + random + + random ( min integer, max integer ) + integer + + + random ( min bigint, max bigint ) + bigint + + + random ( min numeric, max numeric ) + numeric + + + Returns a random value in the range + min <= x <= max. + For type numeric, the result will have the same number of + fractional decimal digits as min or + max, whichever has more. + + + random(1, 10) + 7 + + + random(-0.499, 0.499) + 0.347 + + + + + + + random_normal + + + random_normal ( + mean double precision + , stddev double precision ) + double precision + + + Returns a random value from the normal distribution with the given + parameters; mean defaults to 0.0 + and stddev defaults to 1.0 + + + random_normal(0.0, 1.0) + 0.051285419 + + + + + + + setseed + + setseed ( double precision ) + void + + + Sets the seed for subsequent random() and + random_normal() calls; + argument must be between -1.0 and 1.0, inclusive + + + setseed(0.12345) + + + + +
+ + + The random() and random_normal() + functions listed in use a + deterministic pseudo-random number generator. + It is fast but not suitable for cryptographic + applications; see the module for a more + secure alternative. + If setseed() is called, the series of results of + subsequent calls to these functions in the current session + can be repeated by re-issuing setseed() with the same + argument. + Without any prior setseed() call in the same + session, the first call to any of these functions obtains a seed + from a platform-dependent source of random bits. + + + + shows the + available trigonometric functions. Each of these functions comes in + two variants, one that measures angles in radians and one that + measures angles in degrees. + + + + Trigonometric Functions + + + + + + Function + + + Description + + + Example(s) + + + + + + + + + acos + + acos ( double precision ) + double precision + + + Inverse cosine, result in radians + + + acos(1) + 0 + + + + + + + acosd + + acosd ( double precision ) + double precision + + + Inverse cosine, result in degrees + + + acosd(0.5) + 60 + + + + + + + asin + + asin ( double precision ) + double precision + + + Inverse sine, result in radians + + + asin(1) + 1.5707963267948966 + + + + + + + asind + + asind ( double precision ) + double precision + + + Inverse sine, result in degrees + + + asind(0.5) + 30 + + + + + + + atan + + atan ( double precision ) + double precision + + + Inverse tangent, result in radians + + + atan(1) + 0.7853981633974483 + + + + + + + atand + + atand ( double precision ) + double precision + + + Inverse tangent, result in degrees + + + atand(1) + 45 + + + + + + + atan2 + + atan2 ( y double precision, + x double precision ) + double precision + + + Inverse tangent of + y/x, + result in radians + + + atan2(1, 0) + 1.5707963267948966 + + + + + + + atan2d + + atan2d ( y double precision, + x double precision ) + double precision + + + Inverse tangent of + y/x, + result in degrees + + + atan2d(1, 0) + 90 + + + + + + + cos + + cos ( double precision ) + double precision + + + Cosine, argument in radians + + + cos(0) + 1 + + + + + + + cosd + + cosd ( double precision ) + double precision + + + Cosine, argument in degrees + + + cosd(60) + 0.5 + + + + + + + cot + + cot ( double precision ) + double precision + + + Cotangent, argument in radians + + + cot(0.5) + 1.830487721712452 + + + + + + + cotd + + cotd ( double precision ) + double precision + + + Cotangent, argument in degrees + + + cotd(45) + 1 + + + + + + + sin + + sin ( double precision ) + double precision + + + Sine, argument in radians + + + sin(1) + 0.8414709848078965 + + + + + + + sind + + sind ( double precision ) + double precision + + + Sine, argument in degrees + + + sind(30) + 0.5 + + + + + + + tan + + tan ( double precision ) + double precision + + + Tangent, argument in radians + + + tan(1) + 1.5574077246549023 + + + + + + + tand + + tand ( double precision ) + double precision + + + Tangent, argument in degrees + + + tand(45) + 1 + + + + +
+ + + + Another way to work with angles measured in degrees is to use the unit + transformation functions radians() + and degrees() shown earlier. + However, using the degree-based trigonometric functions is preferred, + as that way avoids round-off error for special cases such + as sind(30). + + + + + shows the + available hyperbolic functions. + + + + Hyperbolic Functions + + + + + + Function + + + Description + + + Example(s) + + + + + + + + + sinh + + sinh ( double precision ) + double precision + + + Hyperbolic sine + + + sinh(1) + 1.1752011936438014 + + + + + + + cosh + + cosh ( double precision ) + double precision + + + Hyperbolic cosine + + + cosh(0) + 1 + + + + + + + tanh + + tanh ( double precision ) + double precision + + + Hyperbolic tangent + + + tanh(1) + 0.7615941559557649 + + + + + + + asinh + + asinh ( double precision ) + double precision + + + Inverse hyperbolic sine + + + asinh(1) + 0.881373587019543 + + + + + + + acosh + + acosh ( double precision ) + double precision + + + Inverse hyperbolic cosine + + + acosh(1) + 0 + + + + + + + atanh + + atanh ( double precision ) + double precision + + + Inverse hyperbolic tangent + + + atanh(0.5) + 0.5493061443340548 + + + + +
+ +
diff --git a/doc/src/sgml/func/func-merge-support.sgml b/doc/src/sgml/func/func-merge-support.sgml new file mode 100644 index 0000000000000..7f084271c13ae --- /dev/null +++ b/doc/src/sgml/func/func-merge-support.sgml @@ -0,0 +1,78 @@ + + Merge Support Functions + + + MERGE + RETURNING + + + + PostgreSQL includes one merge support function + that may be used in the RETURNING list of a + command to identify the action taken for each + row; see . + + + + Merge Support Functions + + + + + + Function + + + Description + + + + + + + + + merge_action + + merge_action ( ) + text + + + Returns the merge action command executed for the current row. This + will be 'INSERT', 'UPDATE', or + 'DELETE'. + + + + +
+ + + Example: + 0 THEN + UPDATE SET in_stock = true, quantity = s.quantity + WHEN MATCHED THEN + UPDATE SET in_stock = false, quantity = 0 + WHEN NOT MATCHED THEN + INSERT (product_id, in_stock, quantity) + VALUES (s.product_id, true, s.quantity) + RETURNING merge_action(), p.*; + + merge_action | product_id | in_stock | quantity +--------------+------------+----------+---------- + UPDATE | 1001 | t | 50 + UPDATE | 1002 | f | 0 + INSERT | 1003 | t | 10 +]]> + + + + Note that this function can only be used in the RETURNING + list of a MERGE command. It is an error to use it in any + other part of a query. + + +
diff --git a/doc/src/sgml/func/func-net.sgml b/doc/src/sgml/func/func-net.sgml new file mode 100644 index 0000000000000..1361a44c19767 --- /dev/null +++ b/doc/src/sgml/func/func-net.sgml @@ -0,0 +1,592 @@ + + Network Address Functions and Operators + + + The IP network address types, cidr and inet, + support the usual comparison operators shown in + + as well as the specialized operators and functions shown in + and + . + + + + Any cidr value can be cast to inet implicitly; + therefore, the operators and functions shown below as operating on + inet also work on cidr values. (Where there are + separate functions for inet and cidr, it is + because the behavior should be different for the two cases.) + Also, it is permitted to cast an inet value + to cidr. When this is done, any bits to the right of the + netmask are silently zeroed to create a valid cidr value. + + + + IP Address Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + inet << inet + boolean + + + Is subnet strictly contained by subnet? + This operator, and the next four, test for subnet inclusion. They + consider only the network parts of the two addresses (ignoring any + bits to the right of the netmasks) and determine whether one network + is identical to or a subnet of the other. + + + inet '192.168.1.5' << inet '192.168.1/24' + t + + + inet '192.168.0.5' << inet '192.168.1/24' + f + + + inet '192.168.1/24' << inet '192.168.1/24' + f + + + + + + inet <<= inet + boolean + + + Is subnet contained by or equal to subnet? + + + inet '192.168.1/24' <<= inet '192.168.1/24' + t + + + + + + inet >> inet + boolean + + + Does subnet strictly contain subnet? + + + inet '192.168.1/24' >> inet '192.168.1.5' + t + + + + + + inet >>= inet + boolean + + + Does subnet contain or equal subnet? + + + inet '192.168.1/24' >>= inet '192.168.1/24' + t + + + + + + inet && inet + boolean + + + Does either subnet contain or equal the other? + + + inet '192.168.1/24' && inet '192.168.1.80/28' + t + + + inet '192.168.1/24' && inet '192.168.2.0/28' + f + + + + + + ~ inet + inet + + + Computes bitwise NOT. + + + ~ inet '192.168.1.6' + 63.87.254.249 + + + + + + inet & inet + inet + + + Computes bitwise AND. + + + inet '192.168.1.6' & inet '0.0.0.255' + 0.0.0.6 + + + + + + inet | inet + inet + + + Computes bitwise OR. + + + inet '192.168.1.6' | inet '0.0.0.255' + 192.168.1.255 + + + + + + inet + bigint + inet + + + Adds an offset to an address. + + + inet '192.168.1.6' + 25 + 192.168.1.31 + + + + + + bigint + inet + inet + + + Adds an offset to an address. + + + 200 + inet '::ffff:fff0:1' + ::ffff:255.240.0.201 + + + + + + inet - bigint + inet + + + Subtracts an offset from an address. + + + inet '192.168.1.43' - 36 + 192.168.1.7 + + + + + + inet - inet + bigint + + + Computes the difference of two addresses. + + + inet '192.168.1.43' - inet '192.168.1.19' + 24 + + + inet '::1' - inet '::ffff:1' + -4294901760 + + + + +
+ + + IP Address Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + abbrev + + abbrev ( inet ) + text + + + Creates an abbreviated display format as text. + (The result is the same as the inet output function + produces; it is abbreviated only in comparison to the + result of an explicit cast to text, which for historical + reasons will never suppress the netmask part.) + + + abbrev(inet '10.1.0.0/32') + 10.1.0.0 + + + + + + abbrev ( cidr ) + text + + + Creates an abbreviated display format as text. + (The abbreviation consists of dropping all-zero octets to the right + of the netmask; more examples are in + .) + + + abbrev(cidr '10.1.0.0/16') + 10.1/16 + + + + + + + broadcast + + broadcast ( inet ) + inet + + + Computes the broadcast address for the address's network. + + + broadcast(inet '192.168.1.5/24') + 192.168.1.255/24 + + + + + + + family + + family ( inet ) + integer + + + Returns the address's family: 4 for IPv4, + 6 for IPv6. + + + family(inet '::1') + 6 + + + + + + + host + + host ( inet ) + text + + + Returns the IP address as text, ignoring the netmask. + + + host(inet '192.168.1.0/24') + 192.168.1.0 + + + + + + + hostmask + + hostmask ( inet ) + inet + + + Computes the host mask for the address's network. + + + hostmask(inet '192.168.23.20/30') + 0.0.0.3 + + + + + + + inet_merge + + inet_merge ( inet, inet ) + cidr + + + Computes the smallest network that includes both of the given networks. + + + inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24') + 192.168.0.0/22 + + + + + + + inet_same_family + + inet_same_family ( inet, inet ) + boolean + + + Tests whether the addresses belong to the same IP family. + + + inet_same_family(inet '192.168.1.5/24', inet '::1') + f + + + + + + + masklen + + masklen ( inet ) + integer + + + Returns the netmask length in bits. + + + masklen(inet '192.168.1.5/24') + 24 + + + + + + + netmask + + netmask ( inet ) + inet + + + Computes the network mask for the address's network. + + + netmask(inet '192.168.1.5/24') + 255.255.255.0 + + + + + + + network + + network ( inet ) + cidr + + + Returns the network part of the address, zeroing out + whatever is to the right of the netmask. + (This is equivalent to casting the value to cidr.) + + + network(inet '192.168.1.5/24') + 192.168.1.0/24 + + + + + + + set_masklen + + set_masklen ( inet, integer ) + inet + + + Sets the netmask length for an inet value. + The address part does not change. + + + set_masklen(inet '192.168.1.5/24', 16) + 192.168.1.5/16 + + + + + + set_masklen ( cidr, integer ) + cidr + + + Sets the netmask length for a cidr value. + Address bits to the right of the new netmask are set to zero. + + + set_masklen(cidr '192.168.1.0/24', 16) + 192.168.0.0/16 + + + + + + + text + + text ( inet ) + text + + + Returns the unabbreviated IP address and netmask length as text. + (This has the same result as an explicit cast to text.) + + + text(inet '192.168.1.5') + 192.168.1.5/32 + + + + +
+ + + + The abbrev, host, + and text functions are primarily intended to offer + alternative display formats for IP addresses. + + + + + The MAC address types, macaddr and macaddr8, + support the usual comparison operators shown in + + as well as the specialized functions shown in + . + In addition, they support the bitwise logical operators + ~, & and | + (NOT, AND and OR), just as shown above for IP addresses. + + + + MAC Address Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + trunc + + trunc ( macaddr ) + macaddr + + + Sets the last 3 bytes of the address to zero. The remaining prefix + can be associated with a particular manufacturer (using data not + included in PostgreSQL). + + + trunc(macaddr '12:34:56:78:90:ab') + 12:34:56:00:00:00 + + + + + + trunc ( macaddr8 ) + macaddr8 + + + Sets the last 5 bytes of the address to zero. The remaining prefix + can be associated with a particular manufacturer (using data not + included in PostgreSQL). + + + trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') + 12:34:56:00:00:00:00:00 + + + + + + + macaddr8_set7bit + + macaddr8_set7bit ( macaddr8 ) + macaddr8 + + + Sets the 7th bit of the address to one, creating what is known as + modified EUI-64, for inclusion in an IPv6 address. + + + macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef') + 02:34:56:ff:fe:ab:cd:ef + + + + +
+ +
diff --git a/doc/src/sgml/func/func-range.sgml b/doc/src/sgml/func/func-range.sgml new file mode 100644 index 0000000000000..2dc40348a57f4 --- /dev/null +++ b/doc/src/sgml/func/func-range.sgml @@ -0,0 +1,1053 @@ + + Range/Multirange Functions and Operators + + + See for an overview of range types. + + + + shows the specialized operators + available for range types. + shows the specialized operators + available for multirange types. + In addition to those, the usual comparison operators shown in + are available for range + and multirange types. The comparison operators order first by the range lower + bounds, and only if those are equal do they compare the upper bounds. The + multirange operators compare each range until one is unequal. This + does not usually result in a useful overall ordering, but the operators are + provided to allow unique indexes to be constructed on ranges. + + + + Range Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + anyrange @> anyrange + boolean + + + Does the first range contain the second? + + + int4range(2,4) @> int4range(2,3) + t + + + + + + anyrange @> anyelement + boolean + + + Does the range contain the element? + + + '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp + t + + + + + + anyrange <@ anyrange + boolean + + + Is the first range contained by the second? + + + int4range(2,4) <@ int4range(1,7) + t + + + + + + anyelement <@ anyrange + boolean + + + Is the element contained in the range? + + + 42 <@ int4range(1,7) + f + + + + + + anyrange && anyrange + boolean + + + Do the ranges overlap, that is, have any elements in common? + + + int8range(3,7) && int8range(4,12) + t + + + + + + anyrange << anyrange + boolean + + + Is the first range strictly left of the second? + + + int8range(1,10) << int8range(100,110) + t + + + + + + anyrange >> anyrange + boolean + + + Is the first range strictly right of the second? + + + int8range(50,60) >> int8range(20,30) + t + + + + + + anyrange &< anyrange + boolean + + + Does the first range not extend to the right of the second? + + + int8range(1,20) &< int8range(18,20) + t + + + + + + anyrange &> anyrange + boolean + + + Does the first range not extend to the left of the second? + + + int8range(7,20) &> int8range(5,10) + t + + + + + + anyrange -|- anyrange + boolean + + + Are the ranges adjacent? + + + numrange(1.1,2.2) -|- numrange(2.2,3.3) + t + + + + + + anyrange + anyrange + anyrange + + + Computes the union of the ranges. The ranges must overlap or be + adjacent, so that the union is a single range (but + see range_merge()). + + + numrange(5,15) + numrange(10,20) + [5,20) + + + + + + anyrange * anyrange + anyrange + + + Computes the intersection of the ranges. + + + int8range(5,15) * int8range(10,20) + [10,15) + + + + + + anyrange - anyrange + anyrange + + + Computes the difference of the ranges. The second range must not be + contained in the first in such a way that the difference would not be + a single range. + + + int8range(5,15) - int8range(10,20) + [5,10) + + + + +
+ + + Multirange Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + anymultirange @> anymultirange + boolean + + + Does the first multirange contain the second? + + + '{[2,4)}'::int4multirange @> '{[2,3)}'::int4multirange + t + + + + + + anymultirange @> anyrange + boolean + + + Does the multirange contain the range? + + + '{[2,4)}'::int4multirange @> int4range(2,3) + t + + + + + + anymultirange @> anyelement + boolean + + + Does the multirange contain the element? + + + '{[2011-01-01,2011-03-01)}'::tsmultirange @> '2011-01-10'::timestamp + t + + + + + + anyrange @> anymultirange + boolean + + + Does the range contain the multirange? + + + '[2,4)'::int4range @> '{[2,3)}'::int4multirange + t + + + + + + anymultirange <@ anymultirange + boolean + + + Is the first multirange contained by the second? + + + '{[2,4)}'::int4multirange <@ '{[1,7)}'::int4multirange + t + + + + + + anymultirange <@ anyrange + boolean + + + Is the multirange contained by the range? + + + '{[2,4)}'::int4multirange <@ int4range(1,7) + t + + + + + + anyrange <@ anymultirange + boolean + + + Is the range contained by the multirange? + + + int4range(2,4) <@ '{[1,7)}'::int4multirange + t + + + + + + anyelement <@ anymultirange + boolean + + + Is the element contained by the multirange? + + + 4 <@ '{[1,7)}'::int4multirange + t + + + + + + anymultirange && anymultirange + boolean + + + Do the multiranges overlap, that is, have any elements in common? + + + '{[3,7)}'::int8multirange && '{[4,12)}'::int8multirange + t + + + + + + anymultirange && anyrange + boolean + + + Does the multirange overlap the range? + + + '{[3,7)}'::int8multirange && int8range(4,12) + t + + + + + + anyrange && anymultirange + boolean + + + Does the range overlap the multirange? + + + int8range(3,7) && '{[4,12)}'::int8multirange + t + + + + + + anymultirange << anymultirange + boolean + + + Is the first multirange strictly left of the second? + + + '{[1,10)}'::int8multirange << '{[100,110)}'::int8multirange + t + + + + + + anymultirange << anyrange + boolean + + + Is the multirange strictly left of the range? + + + '{[1,10)}'::int8multirange << int8range(100,110) + t + + + + + + anyrange << anymultirange + boolean + + + Is the range strictly left of the multirange? + + + int8range(1,10) << '{[100,110)}'::int8multirange + t + + + + + + anymultirange >> anymultirange + boolean + + + Is the first multirange strictly right of the second? + + + '{[50,60)}'::int8multirange >> '{[20,30)}'::int8multirange + t + + + + + + anymultirange >> anyrange + boolean + + + Is the multirange strictly right of the range? + + + '{[50,60)}'::int8multirange >> int8range(20,30) + t + + + + + + anyrange >> anymultirange + boolean + + + Is the range strictly right of the multirange? + + + int8range(50,60) >> '{[20,30)}'::int8multirange + t + + + + + + anymultirange &< anymultirange + boolean + + + Does the first multirange not extend to the right of the second? + + + '{[1,20)}'::int8multirange &< '{[18,20)}'::int8multirange + t + + + + + + anymultirange &< anyrange + boolean + + + Does the multirange not extend to the right of the range? + + + '{[1,20)}'::int8multirange &< int8range(18,20) + t + + + + + + anyrange &< anymultirange + boolean + + + Does the range not extend to the right of the multirange? + + + int8range(1,20) &< '{[18,20)}'::int8multirange + t + + + + + + anymultirange &> anymultirange + boolean + + + Does the first multirange not extend to the left of the second? + + + '{[7,20)}'::int8multirange &> '{[5,10)}'::int8multirange + t + + + + + + anymultirange &> anyrange + boolean + + + Does the multirange not extend to the left of the range? + + + '{[7,20)}'::int8multirange &> int8range(5,10) + t + + + + + + anyrange &> anymultirange + boolean + + + Does the range not extend to the left of the multirange? + + + int8range(7,20) &> '{[5,10)}'::int8multirange + t + + + + + + anymultirange -|- anymultirange + boolean + + + Are the multiranges adjacent? + + + '{[1.1,2.2)}'::nummultirange -|- '{[2.2,3.3)}'::nummultirange + t + + + + + + anymultirange -|- anyrange + boolean + + + Is the multirange adjacent to the range? + + + '{[1.1,2.2)}'::nummultirange -|- numrange(2.2,3.3) + t + + + + + + anyrange -|- anymultirange + boolean + + + Is the range adjacent to the multirange? + + + numrange(1.1,2.2) -|- '{[2.2,3.3)}'::nummultirange + t + + + + + + anymultirange + anymultirange + anymultirange + + + Computes the union of the multiranges. The multiranges need not overlap + or be adjacent. + + + '{[5,10)}'::nummultirange + '{[15,20)}'::nummultirange + {[5,10), [15,20)} + + + + + + anymultirange * anymultirange + anymultirange + + + Computes the intersection of the multiranges. + + + '{[5,15)}'::int8multirange * '{[10,20)}'::int8multirange + {[10,15)} + + + + + + anymultirange - anymultirange + anymultirange + + + Computes the difference of the multiranges. + + + '{[5,20)}'::int8multirange - '{[10,15)}'::int8multirange + {[5,10), [15,20)} + + + + +
+ + + The left-of/right-of/adjacent operators always return false when an empty + range or multirange is involved; that is, an empty range is not considered to + be either before or after any other range. + + + + Elsewhere empty ranges and multiranges are treated as the additive identity: + anything unioned with an empty value is itself. Anything minus an empty + value is itself. An empty multirange has exactly the same points as an empty + range. Every range contains the empty range. Every multirange contains as many + empty ranges as you like. + + + + The range union and difference operators will fail if the resulting range would + need to contain two disjoint sub-ranges, as such a range cannot be + represented. There are separate operators for union and difference that take + multirange parameters and return a multirange, and they do not fail even if + their arguments are disjoint. So if you need a union or difference operation + for ranges that may be disjoint, you can avoid errors by first casting your + ranges to multiranges. + + + + shows the functions + available for use with range types. + shows the functions + available for use with multirange types. + + + + Range Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + lower + + lower ( anyrange ) + anyelement + + + Extracts the lower bound of the range (NULL if the + range is empty or has no lower bound). + + + lower(numrange(1.1,2.2)) + 1.1 + + + + + + + upper + + upper ( anyrange ) + anyelement + + + Extracts the upper bound of the range (NULL if the + range is empty or has no upper bound). + + + upper(numrange(1.1,2.2)) + 2.2 + + + + + + + isempty + + isempty ( anyrange ) + boolean + + + Is the range empty? + + + isempty(numrange(1.1,2.2)) + f + + + + + + + lower_inc + + lower_inc ( anyrange ) + boolean + + + Is the range's lower bound inclusive? + + + lower_inc(numrange(1.1,2.2)) + t + + + + + + + upper_inc + + upper_inc ( anyrange ) + boolean + + + Is the range's upper bound inclusive? + + + upper_inc(numrange(1.1,2.2)) + f + + + + + + + lower_inf + + lower_inf ( anyrange ) + boolean + + + Does the range have no lower bound? (A lower bound of + -Infinity returns false.) + + + lower_inf('(,)'::daterange) + t + + + + + + + upper_inf + + upper_inf ( anyrange ) + boolean + + + Does the range have no upper bound? (An upper bound of + Infinity returns false.) + + + upper_inf('(,)'::daterange) + t + + + + + + + range_merge + + range_merge ( anyrange, anyrange ) + anyrange + + + Computes the smallest range that includes both of the given ranges. + + + range_merge('[1,2)'::int4range, '[3,4)'::int4range) + [1,4) + + + + +
+ + + Multirange Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + lower + + lower ( anymultirange ) + anyelement + + + Extracts the lower bound of the multirange (NULL if the + multirange is empty or has no lower bound). + + + lower('{[1.1,2.2)}'::nummultirange) + 1.1 + + + + + + + upper + + upper ( anymultirange ) + anyelement + + + Extracts the upper bound of the multirange (NULL if the + multirange is empty or has no upper bound). + + + upper('{[1.1,2.2)}'::nummultirange) + 2.2 + + + + + + + isempty + + isempty ( anymultirange ) + boolean + + + Is the multirange empty? + + + isempty('{[1.1,2.2)}'::nummultirange) + f + + + + + + + lower_inc + + lower_inc ( anymultirange ) + boolean + + + Is the multirange's lower bound inclusive? + + + lower_inc('{[1.1,2.2)}'::nummultirange) + t + + + + + + + upper_inc + + upper_inc ( anymultirange ) + boolean + + + Is the multirange's upper bound inclusive? + + + upper_inc('{[1.1,2.2)}'::nummultirange) + f + + + + + + + lower_inf + + lower_inf ( anymultirange ) + boolean + + + Does the multirange have no lower bound? (A lower bound of + -Infinity returns false.) + + + lower_inf('{(,)}'::datemultirange) + t + + + + + + + upper_inf + + upper_inf ( anymultirange ) + boolean + + + Does the multirange have no upper bound? (An upper bound of + Infinity returns false.) + + + upper_inf('{(,)}'::datemultirange) + t + + + + + + + range_merge + + range_merge ( anymultirange ) + anyrange + + + Computes the smallest range that includes the entire multirange. + + + range_merge('{[1,2), [3,4)}'::int4multirange) + [1,4) + + + + + + + multirange (function) + + multirange ( anyrange ) + anymultirange + + + Returns a multirange containing just the given range. + + + multirange('[1,2)'::int4range) + {[1,2)} + + + + + + + unnest + for multirange + + unnest ( anymultirange ) + setof anyrange + + + Expands a multirange into a set of ranges in ascending order. + + + unnest('{[1,2), [3,4)}'::int4multirange) + + + [1,2) + [3,4) + + + + + +
+ + + The lower_inc, upper_inc, + lower_inf, and upper_inf + functions all return false for an empty range or multirange. + +
diff --git a/doc/src/sgml/func/func-sequence.sgml b/doc/src/sgml/func/func-sequence.sgml new file mode 100644 index 0000000000000..e9f5b4e8e6b27 --- /dev/null +++ b/doc/src/sgml/func/func-sequence.sgml @@ -0,0 +1,195 @@ + + Sequence Manipulation Functions + + + sequence + + + + This section describes functions for operating on sequence + objects, also called sequence generators or just sequences. + Sequence objects are special single-row tables created with . + Sequence objects are commonly used to generate unique identifiers + for rows of a table. The sequence functions, listed in , provide simple, multiuser-safe + methods for obtaining successive sequence values from sequence + objects. + + + + Sequence Functions + + + + + Function + + + Description + + + + + + + + + nextval + + nextval ( regclass ) + bigint + + + Advances the sequence object to its next value and returns that value. + This is done atomically: even if multiple sessions + execute nextval concurrently, each will safely + receive a distinct sequence value. + If the sequence object has been created with default parameters, + successive nextval calls will return successive + values beginning with 1. Other behaviors can be obtained by using + appropriate parameters in the + command. + + + This function requires USAGE + or UPDATE privilege on the sequence. + + + + + + + setval + + setval ( regclass, bigint , boolean ) + bigint + + + Sets the sequence object's current value, and optionally + its is_called flag. The two-parameter + form sets the sequence's last_value field to the + specified value and sets its is_called field to + true, meaning that the next + nextval will advance the sequence before + returning a value. The value that will be reported + by currval is also set to the specified value. + In the three-parameter form, is_called can be set + to either true + or false. true has the same + effect as the two-parameter form. If it is set + to false, the next nextval + will return exactly the specified value, and sequence advancement + commences with the following nextval. + Furthermore, the value reported by currval is not + changed in this case. For example, + +SELECT setval('myseq', 42); Next nextval will return 43 +SELECT setval('myseq', 42, true); Same as above +SELECT setval('myseq', 42, false); Next nextval will return 42 + + The result returned by setval is just the value of its + second argument. + + + This function requires UPDATE privilege on the + sequence. + + + + + + + currval + + currval ( regclass ) + bigint + + + Returns the value most recently obtained + by nextval for this sequence in the current + session. (An error is reported if nextval has + never been called for this sequence in this session.) Because this is + returning a session-local value, it gives a predictable answer whether + or not other sessions have executed nextval since + the current session did. + + + This function requires USAGE + or SELECT privilege on the sequence. + + + + + + + lastval + + lastval () + bigint + + + Returns the value most recently returned by + nextval in the current session. This function is + identical to currval, except that instead + of taking the sequence name as an argument it refers to whichever + sequence nextval was most recently applied to + in the current session. It is an error to call + lastval if nextval + has not yet been called in the current session. + + + This function requires USAGE + or SELECT privilege on the last used sequence. + + + + +
+ + + + To avoid blocking concurrent transactions that obtain numbers from + the same sequence, the value obtained by nextval + is not reclaimed for re-use if the calling transaction later aborts. + This means that transaction aborts or database crashes can result in + gaps in the sequence of assigned values. That can happen without a + transaction abort, too. For example an INSERT with + an ON CONFLICT clause will compute the to-be-inserted + tuple, including doing any required nextval + calls, before detecting any conflict that would cause it to follow + the ON CONFLICT rule instead. + Thus, PostgreSQL sequence + objects cannot be used to obtain gapless + sequences. + + + + Likewise, sequence state changes made by setval + are immediately visible to other transactions, and are not undone if + the calling transaction rolls back. + + + + If the database cluster crashes before committing a transaction + containing a nextval + or setval call, the sequence state change might + not have made its way to persistent storage, so that it is uncertain + whether the sequence will have its original or updated state after the + cluster restarts. This is harmless for usage of the sequence within + the database, since other effects of uncommitted transactions will not + be visible either. However, if you wish to use a sequence value for + persistent outside-the-database purposes, make sure that the + nextval call has been committed before doing so. + + + + + The sequence to be operated on by a sequence function is specified by + a regclass argument, which is simply the OID of the sequence in the + pg_class system catalog. You do not have to look up the + OID by hand, however, since the regclass data type's input + converter will do the work for you. See + for details. + +
diff --git a/doc/src/sgml/func/func-srf.sgml b/doc/src/sgml/func/func-srf.sgml new file mode 100644 index 0000000000000..eafc961c9f909 --- /dev/null +++ b/doc/src/sgml/func/func-srf.sgml @@ -0,0 +1,306 @@ + + Set Returning Functions + + + set returning functions + functions + + + + This section describes functions that possibly return more than one row. + The most widely used functions in this class are series generating + functions, as detailed in and + . Other, more specialized + set-returning functions are described elsewhere in this manual. + See for ways to combine multiple + set-returning functions. + + + + Series Generating Functions + + + + + Function + + + Description + + + + + + + + + generate_series + + generate_series ( start integer, stop integer , step integer ) + setof integer + + + generate_series ( start bigint, stop bigint , step bigint ) + setof bigint + + + generate_series ( start numeric, stop numeric , step numeric ) + setof numeric + + + Generates a series of values from start + to stop, with a step size + of step. step + defaults to 1. + + + + + + generate_series ( start timestamp, stop timestamp, step interval ) + setof timestamp + + + generate_series ( start timestamp with time zone, stop timestamp with time zone, step interval , timezone text ) + setof timestamp with time zone + + + Generates a series of values from start + to stop, with a step size + of step. + In the timezone-aware form, times of day and daylight-savings + adjustments are computed according to the time zone named by + the timezone argument, or the current + setting if that is omitted. + + + + +
+ + + When step is positive, zero rows are returned if + start is greater than stop. + Conversely, when step is negative, zero rows are + returned if start is less than stop. + Zero rows are also returned if any input is NULL. + It is an error + for step to be zero. Some examples follow: + +SELECT * FROM generate_series(2,4); + generate_series +----------------- + 2 + 3 + 4 +(3 rows) + +SELECT * FROM generate_series(5,1,-2); + generate_series +----------------- + 5 + 3 + 1 +(3 rows) + +SELECT * FROM generate_series(4,3); + generate_series +----------------- +(0 rows) + +SELECT generate_series(1.1, 4, 1.3); + generate_series +----------------- + 1.1 + 2.4 + 3.7 +(3 rows) + +-- this example relies on the date-plus-integer operator: +SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a); + dates +------------ + 2004-02-05 + 2004-02-12 + 2004-02-19 +(3 rows) + +SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, + '2008-03-04 12:00', '10 hours'); + generate_series +--------------------- + 2008-03-01 00:00:00 + 2008-03-01 10:00:00 + 2008-03-01 20:00:00 + 2008-03-02 06:00:00 + 2008-03-02 16:00:00 + 2008-03-03 02:00:00 + 2008-03-03 12:00:00 + 2008-03-03 22:00:00 + 2008-03-04 08:00:00 +(9 rows) + +-- this example assumes that TimeZone is set to UTC; note the DST transition: +SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz, + '2001-11-01 00:00 -05:00'::timestamptz, + '1 day'::interval, 'America/New_York'); + generate_series +------------------------ + 2001-10-22 04:00:00+00 + 2001-10-23 04:00:00+00 + 2001-10-24 04:00:00+00 + 2001-10-25 04:00:00+00 + 2001-10-26 04:00:00+00 + 2001-10-27 04:00:00+00 + 2001-10-28 04:00:00+00 + 2001-10-29 05:00:00+00 + 2001-10-30 05:00:00+00 + 2001-10-31 05:00:00+00 + 2001-11-01 05:00:00+00 +(11 rows) + + + + + Subscript Generating Functions + + + + + Function + + + Description + + + + + + + + + generate_subscripts + + generate_subscripts ( array anyarray, dim integer ) + setof integer + + + Generates a series comprising the valid subscripts of + the dim'th dimension of the given array. + + + + + + generate_subscripts ( array anyarray, dim integer, reverse boolean ) + setof integer + + + Generates a series comprising the valid subscripts of + the dim'th dimension of the given array. + When reverse is true, returns the series in + reverse order. + + + + +
+ + + generate_subscripts is a convenience function that generates + the set of valid subscripts for the specified dimension of the given + array. + Zero rows are returned for arrays that do not have the requested dimension, + or if any input is NULL. + Some examples follow: + +-- basic usage: +SELECT generate_subscripts('{NULL,1,NULL,2}'::int[], 1) AS s; + s +--- + 1 + 2 + 3 + 4 +(4 rows) + +-- presenting an array, the subscript and the subscripted +-- value requires a subquery: +SELECT * FROM arrays; + a +-------------------- + {-1,-2} + {100,200,300} +(2 rows) + +SELECT a AS array, s AS subscript, a[s] AS value +FROM (SELECT generate_subscripts(a, 1) AS s, a FROM arrays) foo; + array | subscript | value +---------------+-----------+------- + {-1,-2} | 1 | -1 + {-1,-2} | 2 | -2 + {100,200,300} | 1 | 100 + {100,200,300} | 2 | 200 + {100,200,300} | 3 | 300 +(5 rows) + +-- unnest a 2D array: +CREATE OR REPLACE FUNCTION unnest2(anyarray) +RETURNS SETOF anyelement AS $$ +select $1[i][j] + from generate_subscripts($1,1) g1(i), + generate_subscripts($1,2) g2(j); +$$ LANGUAGE sql IMMUTABLE; +CREATE FUNCTION +SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]); + unnest2 +--------- + 1 + 2 + 3 + 4 +(4 rows) + + + + + ordinality + + + + When a function in the FROM clause is suffixed + by WITH ORDINALITY, a bigint column is + appended to the function's output column(s), which starts from 1 and + increments by 1 for each row of the function's output. + This is most useful in the case of set returning + functions such as unnest(). + + +-- set returning function WITH ORDINALITY: +SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); + ls | n +-----------------+---- + pg_serial | 1 + pg_twophase | 2 + postmaster.opts | 3 + pg_notify | 4 + postgresql.conf | 5 + pg_tblspc | 6 + logfile | 7 + base | 8 + postmaster.pid | 9 + pg_ident.conf | 10 + global | 11 + pg_xact | 12 + pg_snapshots | 13 + pg_multixact | 14 + PG_VERSION | 15 + pg_wal | 16 + pg_hba.conf | 17 + pg_stat_tmp | 18 + pg_subtrans | 19 +(19 rows) + + + +
diff --git a/doc/src/sgml/func/func-statistics.sgml b/doc/src/sgml/func/func-statistics.sgml new file mode 100644 index 0000000000000..22dee263cc2a0 --- /dev/null +++ b/doc/src/sgml/func/func-statistics.sgml @@ -0,0 +1,85 @@ + + Statistics Information Functions + + + function + statistics + + + + PostgreSQL provides a function to inspect complex + statistics defined using the CREATE STATISTICS command. + + + + Inspecting MCV Lists + + + pg_mcv_list_items + + + +pg_mcv_list_items ( pg_mcv_list ) setof record + + + + pg_mcv_list_items returns a set of records describing + all items stored in a multi-column MCV list. It + returns the following columns: + + + + + + Name + Type + Description + + + + + + index + integer + index of the item in the MCV list + + + values + text[] + values stored in the MCV item + + + nulls + boolean[] + flags identifying NULL values + + + frequency + double precision + frequency of this MCV item + + + base_frequency + double precision + base frequency of this MCV item + + + + + + + + The pg_mcv_list_items function can be used like this: + + +SELECT m.* FROM pg_statistic_ext join pg_statistic_ext_data on (oid = stxoid), + pg_mcv_list_items(stxdmcv) m WHERE stxname = 'stts'; + + + Values of the pg_mcv_list type can be obtained only from the + pg_statistic_ext_data.stxdmcv + column. + + + + diff --git a/doc/src/sgml/func/func-string.sgml b/doc/src/sgml/func/func-string.sgml new file mode 100644 index 0000000000000..01cc94c234e62 --- /dev/null +++ b/doc/src/sgml/func/func-string.sgml @@ -0,0 +1,1827 @@ + + String Functions and Operators + + + This section describes functions and operators for examining and + manipulating string values. Strings in this context include values + of the types character, character varying, + and text. Except where noted, these functions and operators + are declared to accept and return type text. They will + interchangeably accept character varying arguments. + Values of type character will be converted + to text before the function or operator is applied, resulting + in stripping any trailing spaces in the character value. + + + + SQL defines some string functions that use + key words, rather than commas, to separate + arguments. Details are in + . + PostgreSQL also provides versions of these functions + that use the regular function invocation syntax + (see ). + + + + + The string concatenation operator (||) will accept + non-string input, so long as at least one input is of string type, as shown + in . For other cases, inserting an + explicit coercion to text can be used to have non-string input + accepted. + + + + + <acronym>SQL</acronym> String Functions and Operators + + + + + Function/Operator + + + Description + + + Example(s) + + + + + + + + + character string + concatenation + + text || text + text + + + Concatenates the two strings. + + + 'Post' || 'greSQL' + PostgreSQL + + + + + + text || anynonarray + text + + + anynonarray || text + text + + + Converts the non-string input to text, then concatenates the two + strings. (The non-string input cannot be of an array type, because + that would create ambiguity with the array || + operators. If you want to concatenate an array's text equivalent, + cast it to text explicitly.) + + + 'Value: ' || 42 + Value: 42 + + + + + + + btrim + + btrim ( string text + , characters text ) + text + + + Removes the longest string containing only characters + in characters (a space by default) + from the start and end of string. + + + btrim('xyxtrimyyx', 'xyz') + trim + + + + + + + normalized + + + Unicode normalization + + text IS NOT form NORMALIZED + boolean + + + Checks whether the string is in the specified Unicode normalization + form. The optional form key word specifies the + form: NFC (the default), NFD, + NFKC, or NFKD. This expression can + only be used when the server encoding is UTF8. Note + that checking for normalization using this expression is often faster + than normalizing possibly already normalized strings. + + + U&'\0061\0308bc' IS NFD NORMALIZED + t + + + + + + + bit_length + + bit_length ( text ) + integer + + + Returns number of bits in the string (8 + times the octet_length). + + + bit_length('jose') + 32 + + + + + + + char_length + + + character string + length + + + length + of a character string + character string, length + + char_length ( text ) + integer + + + + character_length + + character_length ( text ) + integer + + + Returns number of characters in the string. + + + char_length('josé') + 4 + + + + + + + lower + + lower ( text ) + text + + + Converts the string to all lower case, according to the rules of the + database's locale. + + + lower('TOM') + tom + + + + + + + lpad + + lpad ( string text, + length integer + , fill text ) + text + + + Extends the string to length + length by prepending the characters + fill (a space by default). If the + string is already longer than + length then it is truncated (on the right). + + + lpad('hi', 5, 'xy') + xyxhi + + + + + + + ltrim + + ltrim ( string text + , characters text ) + text + + + Removes the longest string containing only characters in + characters (a space by default) from the start of + string. + + + ltrim('zzzytest', 'xyz') + test + + + + + + + normalize + + + Unicode normalization + + normalize ( text + , form ) + text + + + Converts the string to the specified Unicode + normalization form. The optional form key word + specifies the form: NFC (the default), + NFD, NFKC, or + NFKD. This function can only be used when the + server encoding is UTF8. + + + normalize(U&'\0061\0308bc', NFC) + U&'\00E4bc' + + + + + + + octet_length + + octet_length ( text ) + integer + + + Returns number of bytes in the string. + + + octet_length('josé') + 5 (if server encoding is UTF8) + + + + + + + octet_length + + octet_length ( character ) + integer + + + Returns number of bytes in the string. Since this version of the + function accepts type character directly, it will not + strip trailing spaces. + + + octet_length('abc '::character(4)) + 4 + + + + + + + overlay + + overlay ( string text PLACING newsubstring text FROM start integer FOR count integer ) + text + + + Replaces the substring of string that starts at + the start'th character and extends + for count characters + with newsubstring. + If count is omitted, it defaults to the length + of newsubstring. + + + overlay('Txxxxas' placing 'hom' from 2 for 4) + Thomas + + + + + + + position + + position ( substring text IN string text ) + integer + + + Returns first starting index of the specified + substring within + string, or zero if it's not present. + + + position('om' in 'Thomas') + 3 + + + + + + + rpad + + rpad ( string text, + length integer + , fill text ) + text + + + Extends the string to length + length by appending the characters + fill (a space by default). If the + string is already longer than + length then it is truncated. + + + rpad('hi', 5, 'xy') + hixyx + + + + + + + rtrim + + rtrim ( string text + , characters text ) + text + + + Removes the longest string containing only characters in + characters (a space by default) from the end of + string. + + + rtrim('testxxzx', 'xyz') + test + + + + + + + substring + + substring ( string text FROM start integer FOR count integer ) + text + + + Extracts the substring of string starting at + the start'th character if that is specified, + and stopping after count characters if that is + specified. Provide at least one of start + and count. + + + substring('Thomas' from 2 for 3) + hom + + + substring('Thomas' from 3) + omas + + + substring('Thomas' for 2) + Th + + + + + + substring ( string text FROM pattern text ) + text + + + Extracts the first substring matching POSIX regular expression; see + . + + + substring('Thomas' from '...$') + mas + + + + + + substring ( string text SIMILAR pattern text ESCAPE escape text ) + text + + + substring ( string text FROM pattern text FOR escape text ) + text + + + Extracts the first substring matching SQL regular expression; + see . The first form has + been specified since SQL:2003; the second form was only in SQL:1999 + and should be considered obsolete. + + + substring('Thomas' similar '%#"o_a#"_' escape '#') + oma + + + + + + + trim + + trim ( LEADING | TRAILING | BOTH + characters text FROM + string text ) + text + + + Removes the longest string containing only characters in + characters (a space by default) from the + start, end, or both ends (BOTH is the default) + of string. + + + trim(both 'xyz' from 'yxTomxx') + Tom + + + + + + trim ( LEADING | TRAILING | BOTH FROM + string text , + characters text ) + text + + + This is a non-standard syntax for trim(). + + + trim(both from 'yxTomxx', 'xyz') + Tom + + + + + + + unicode_assigned + + unicode_assigned ( text ) + boolean + + + Returns true if all characters in the string are + assigned Unicode codepoints; false otherwise. This + function can only be used when the server encoding is + UTF8. + + + + + + + upper + + upper ( text ) + text + + + Converts the string to all upper case, according to the rules of the + database's locale. + + + upper('tom') + TOM + + + + +
+ + + Additional string manipulation functions and operators are available + and are listed in . (Some of + these are used internally to implement + the SQL-standard string functions listed in + .) + There are also pattern-matching operators, which are described in + , and operators for full-text + search, which are described in . + + + + Other String Functions and Operators + + + + + Function/Operator + + + Description + + + Example(s) + + + + + + + + + character string + prefix test + + text ^@ text + boolean + + + Returns true if the first string starts with the second string + (equivalent to the starts_with() function). + + + 'alphabet' ^@ 'alph' + t + + + + + + + ascii + + ascii ( text ) + integer + + + Returns the numeric code of the first character of the argument. + In UTF8 encoding, returns the Unicode code point + of the character. In other multibyte encodings, the argument must + be an ASCII character. + + + ascii('x') + 120 + + + + + + + chr + + chr ( integer ) + text + + + Returns the character with the given code. In UTF8 + encoding the argument is treated as a Unicode code point. In other + multibyte encodings the argument must designate + an ASCII character. chr(0) is + disallowed because text data types cannot store that character. + + + chr(65) + A + + + + + + + concat + + concat ( val1 "any" + , val2 "any" , ... ) + text + + + Concatenates the text representations of all the arguments. + NULL arguments are ignored. + + + concat('abcde', 2, NULL, 22) + abcde222 + + + + + + + concat_ws + + concat_ws ( sep text, + val1 "any" + , val2 "any" , ... ) + text + + + Concatenates all but the first argument, with separators. The first + argument is used as the separator string, and should not be NULL. + Other NULL arguments are ignored. + + + concat_ws(',', 'abcde', 2, NULL, 22) + abcde,2,22 + + + + + + + format + + format ( formatstr text + , formatarg "any" , ... ) + text + + + Formats arguments according to a format string; + see . + This function is similar to the C function sprintf. + + + format('Hello %s, %1$s', 'World') + Hello World, World + + + + + + + initcap + + initcap ( text ) + text + + + Converts the first letter of each word to upper case (or title case + if the letter is a digraph and locale is ICU or + builtin PG_UNICODE_FAST) + and the rest to lower case. When using the libc or + builtin locale provider, words are sequences of + alphanumeric characters separated by non-alphanumeric characters; + when using the ICU locale provider, words are separated according to + u_strToTitle ICU function. + + + This function is primarily used for convenient + display, and the specific result should not be relied upon because of + the differences between locale providers and between different + ICU versions. If specific word boundary rules are desired, + it is recommended to write a custom function. + + + initcap('hi THOMAS') + Hi Thomas + + + + + + + casefold + + casefold ( text ) + text + + + Performs case folding of the input string according to the collation. + Case folding is similar to case conversion, but the purpose of case + folding is to facilitate case-insensitive matching of strings, + whereas the purpose of case conversion is to convert to a particular + cased form. This function can only be used when the server encoding + is UTF8. + + + Ordinarily, case folding simply converts to lowercase, but there may + be exceptions depending on the collation. For instance, some + characters have more than two lowercase variants, or fold to uppercase. + + + Case folding may change the length of the string. For instance, in + the PG_UNICODE_FAST collation, ß + (U+00DF) folds to ss. + + + casefold can be used for Unicode Default Caseless + Matching. It does not always preserve the normalized form of the + input string (see ). + + + The libc provider doesn't support case folding, so + casefold is identical to . + + + + + + + left + + left ( string text, + n integer ) + text + + + Returns first n characters in the + string, or when n is negative, returns + all but last |n| characters. + + + left('abcde', 2) + ab + + + + + + + length + + length ( text ) + integer + + + Returns the number of characters in the string. + + + length('jose') + 4 + + + + + + + md5 + + md5 ( text ) + text + + + Computes the MD5 hash of + the argument, with the result written in hexadecimal. + + + md5('abc') + 900150983cd24fb0&zwsp;d6963f7d28e17f72 + + + + + + + parse_ident + + parse_ident ( qualified_identifier text + , strict_mode boolean DEFAULT true ) + text[] + + + Splits qualified_identifier into an array of + identifiers, removing any quoting of individual identifiers. By + default, extra characters after the last identifier are considered an + error; but if the second parameter is false, then such + extra characters are ignored. (This behavior is useful for parsing + names for objects like functions.) Note that this function does not + truncate over-length identifiers. If you want truncation you can cast + the result to name[]. + + + parse_ident('"SomeSchema".someTable') + {SomeSchema,sometable} + + + + + + + pg_client_encoding + + pg_client_encoding ( ) + name + + + Returns current client encoding name. + + + pg_client_encoding() + UTF8 + + + + + + + quote_ident + + quote_ident ( text ) + text + + + Returns the given string suitably quoted to be used as an identifier + in an SQL statement string. + Quotes are added only if necessary (i.e., if the string contains + non-identifier characters or would be case-folded). + Embedded quotes are properly doubled. + See also . + + + quote_ident('Foo bar') + "Foo bar" + + + + + + + quote_literal + + quote_literal ( text ) + text + + + Returns the given string suitably quoted to be used as a string literal + in an SQL statement string. + Embedded single-quotes and backslashes are properly doubled. + Note that quote_literal returns null on null + input; if the argument might be null, + quote_nullable is often more suitable. + See also . + + + quote_literal(E'O\'Reilly') + 'O''Reilly' + + + + + + quote_literal ( anyelement ) + text + + + Converts the given value to text and then quotes it as a literal. + Embedded single-quotes and backslashes are properly doubled. + + + quote_literal(42.5) + '42.5' + + + + + + + quote_nullable + + quote_nullable ( text ) + text + + + Returns the given string suitably quoted to be used as a string literal + in an SQL statement string; or, if the argument + is null, returns NULL. + Embedded single-quotes and backslashes are properly doubled. + See also . + + + quote_nullable(NULL) + NULL + + + + + + quote_nullable ( anyelement ) + text + + + Converts the given value to text and then quotes it as a literal; + or, if the argument is null, returns NULL. + Embedded single-quotes and backslashes are properly doubled. + + + quote_nullable(42.5) + '42.5' + + + + + + + regexp_count + + regexp_count ( string text, pattern text + , start integer + , flags text ) + integer + + + Returns the number of times the POSIX regular + expression pattern matches in + the string; see + . + + + regexp_count('123456789012', '\d\d\d', 2) + 3 + + + + + + + regexp_instr + + regexp_instr ( string text, pattern text + , start integer + , N integer + , endoption integer + , flags text + , subexpr integer ) + integer + + + Returns the position within string where + the N'th match of the POSIX regular + expression pattern occurs, or zero if there is + no such match; see . + + + regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i') + 3 + + + regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i', 2) + 5 + + + + + + + regexp_like + + regexp_like ( string text, pattern text + , flags text ) + boolean + + + Checks whether a match of the POSIX regular + expression pattern occurs + within string; see + . + + + regexp_like('Hello World', 'world$', 'i') + t + + + + + + + regexp_match + + regexp_match ( string text, pattern text , flags text ) + text[] + + + Returns substrings within the first match of the POSIX regular + expression pattern to + the string; see + . + + + regexp_match('foobarbequebaz', '(bar)(beque)') + {bar,beque} + + + + + + + regexp_matches + + regexp_matches ( string text, pattern text , flags text ) + setof text[] + + + Returns substrings within the first match of the POSIX regular + expression pattern to + the string, or substrings within all + such matches if the g flag is used; + see . + + + regexp_matches('foobarbequebaz', 'ba.', 'g') + + + {bar} + {baz} + + + + + + + + regexp_replace + + regexp_replace ( string text, pattern text, replacement text + , flags text ) + text + + + Replaces the substring that is the first match to the POSIX + regular expression pattern, or all such + matches if the g flag is used; see + . + + + regexp_replace('Thomas', '.[mN]a.', 'M') + ThM + + + + + + regexp_replace ( string text, pattern text, replacement text, + start integer + , N integer + , flags text ) + text + + + Replaces the substring that is the N'th + match to the POSIX regular expression pattern, + or all such matches if N is zero, with the + search beginning at the start'th character + of string. If N is + omitted, it defaults to 1. See + . + + + regexp_replace('Thomas', '.', 'X', 3, 2) + ThoXas + + + regexp_replace(string=>'hello world', pattern=>'l', replacement=>'XX', start=>1, "N"=>2) + helXXo world + + + + + + + regexp_split_to_array + + regexp_split_to_array ( string text, pattern text , flags text ) + text[] + + + Splits string using a POSIX regular + expression as the delimiter, producing an array of results; see + . + + + regexp_split_to_array('hello world', '\s+') + {hello,world} + + + + + + + regexp_split_to_table + + regexp_split_to_table ( string text, pattern text , flags text ) + setof text + + + Splits string using a POSIX regular + expression as the delimiter, producing a set of results; see + . + + + regexp_split_to_table('hello world', '\s+') + + + hello + world + + + + + + + + regexp_substr + + regexp_substr ( string text, pattern text + , start integer + , N integer + , flags text + , subexpr integer ) + text + + + Returns the substring within string that + matches the N'th occurrence of the POSIX + regular expression pattern, + or NULL if there is no such match; see + . + + + regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i') + CDEF + + + regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i', 2) + EF + + + + + + + repeat + + repeat ( string text, number integer ) + text + + + Repeats string the specified + number of times. + + + repeat('Pg', 4) + PgPgPgPg + + + + + + + replace + + replace ( string text, + from text, + to text ) + text + + + Replaces all occurrences in string of + substring from with + substring to. + + + replace('abcdefabcdef', 'cd', 'XX') + abXXefabXXef + + + + + + + reverse + + reverse ( text ) + text + + + Reverses the order of the characters in the string. + + + reverse('abcde') + edcba + + + + + + + right + + right ( string text, + n integer ) + text + + + Returns last n characters in the string, + or when n is negative, returns all but + first |n| characters. + + + right('abcde', 2) + de + + + + + + + split_part + + split_part ( string text, + delimiter text, + n integer ) + text + + + Splits string at occurrences + of delimiter and returns + the n'th field (counting from one), + or when n is negative, returns + the |n|'th-from-last field. + + + split_part('abc~@~def~@~ghi', '~@~', 2) + def + + + split_part('abc,def,ghi,jkl', ',', -2) + ghi + + + + + + + starts_with + + starts_with ( string text, prefix text ) + boolean + + + Returns true if string starts + with prefix. + + + starts_with('alphabet', 'alph') + t + + + + + + + string_to_array + + string_to_array ( string text, delimiter text , null_string text ) + text[] + + + Splits the string at occurrences + of delimiter and forms the resulting fields + into a text array. + If delimiter is NULL, + each character in the string will become a + separate element in the array. + If delimiter is an empty string, then + the string is treated as a single field. + If null_string is supplied and is + not NULL, fields matching that string are + replaced by NULL. + See also array_to_string. + + + string_to_array('xx~~yy~~zz', '~~', 'yy') + {xx,NULL,zz} + + + + + + + string_to_table + + string_to_table ( string text, delimiter text , null_string text ) + setof text + + + Splits the string at occurrences + of delimiter and returns the resulting fields + as a set of text rows. + If delimiter is NULL, + each character in the string will become a + separate row of the result. + If delimiter is an empty string, then + the string is treated as a single field. + If null_string is supplied and is + not NULL, fields matching that string are + replaced by NULL. + + + string_to_table('xx~^~yy~^~zz', '~^~', 'yy') + + + xx + NULL + zz + + + + + + + + strpos + + strpos ( string text, substring text ) + integer + + + Returns first starting index of the specified substring + within string, or zero if it's not present. + (Same as position(substring in + string), but note the reversed + argument order.) + + + strpos('high', 'ig') + 2 + + + + + + + substr + + substr ( string text, start integer , count integer ) + text + + + Extracts the substring of string starting at + the start'th character, + and extending for count characters if that is + specified. (Same + as substring(string + from start + for count).) + + + substr('alphabet', 3) + phabet + + + substr('alphabet', 3, 2) + ph + + + + + + + to_ascii + + to_ascii ( string text ) + text + + + to_ascii ( string text, + encoding name ) + text + + + to_ascii ( string text, + encoding integer ) + text + + + Converts string to ASCII + from another encoding, which may be identified by name or number. + If encoding is omitted the database encoding + is assumed (which in practice is the only useful case). + The conversion consists primarily of dropping accents. + Conversion is only supported + from LATIN1, LATIN2, + LATIN9, and WIN1250 encodings. + (See the module for another, more flexible + solution.) + + + to_ascii('Karél') + Karel + + + + + + + to_bin + + to_bin ( integer ) + text + + + to_bin ( bigint ) + text + + + Converts the number to its equivalent two's complement binary + representation. + + + to_bin(2147483647) + 1111111111111111111111111111111 + + + to_bin(-1234) + 11111111111111111111101100101110 + + + + + + + to_hex + + to_hex ( integer ) + text + + + to_hex ( bigint ) + text + + + Converts the number to its equivalent two's complement hexadecimal + representation. + + + to_hex(2147483647) + 7fffffff + + + to_hex(-1234) + fffffb2e + + + + + + + to_oct + + to_oct ( integer ) + text + + + to_oct ( bigint ) + text + + + Converts the number to its equivalent two's complement octal + representation. + + + to_oct(2147483647) + 17777777777 + + + to_oct(-1234) + 37777775456 + + + + + + + translate + + translate ( string text, + from text, + to text ) + text + + + Replaces each character in string that + matches a character in the from set with the + corresponding character in the to + set. If from is longer than + to, occurrences of the extra characters in + from are deleted. + + + translate('12345', '143', 'ax') + a2x5 + + + + + + + unistr + + unistr ( text ) + text + + + Evaluate escaped Unicode characters in the argument. Unicode characters + can be specified as + \XXXX (4 hexadecimal + digits), \+XXXXXX (6 + hexadecimal digits), + \uXXXX (4 hexadecimal + digits), or \UXXXXXXXX + (8 hexadecimal digits). To specify a backslash, write two + backslashes. All other characters are taken literally. + + + + If the server encoding is not UTF-8, the Unicode code point identified + by one of these escape sequences is converted to the actual server + encoding; an error is reported if that's not possible. + + + + This function provides a (non-standard) alternative to string + constants with Unicode escapes (see ). + + + + unistr('d\0061t\+000061') + data + + + unistr('d\u0061t\U00000061') + data + + + + + +
+ + + The concat, concat_ws and + format functions are variadic, so it is possible to + pass the values to be concatenated or formatted as an array marked with + the VARIADIC keyword (see ). The array's elements are + treated as if they were separate ordinary arguments to the function. + If the variadic array argument is NULL, concat + and concat_ws return NULL, but + format treats a NULL as a zero-element array. + + + + See also the aggregate function string_agg in + , and the functions for + converting between strings and the bytea type in + . + + + + <function>format</function> + + + format + + + + The function format produces output formatted according to + a format string, in a style similar to the C function + sprintf. + + + + +format(formatstr text , formatarg "any" , ... ) + + formatstr is a format string that specifies how the + result should be formatted. Text in the format string is copied + directly to the result, except where format specifiers are + used. Format specifiers act as placeholders in the string, defining how + subsequent function arguments should be formatted and inserted into the + result. Each formatarg argument is converted to text + according to the usual output rules for its data type, and then formatted + and inserted into the result string according to the format specifier(s). + + + + Format specifiers are introduced by a % character and have + the form + +%[position][flags][width]type + + where the component fields are: + + + + position (optional) + + + A string of the form n$ where + n is the index of the argument to print. + Index 1 means the first argument after + formatstr. If the position is + omitted, the default is to use the next argument in sequence. + + + + + + flags (optional) + + + Additional options controlling how the format specifier's output is + formatted. Currently the only supported flag is a minus sign + (-) which will cause the format specifier's output to be + left-justified. This has no effect unless the width + field is also specified. + + + + + + width (optional) + + + Specifies the minimum number of characters to use to + display the format specifier's output. The output is padded on the + left or right (depending on the - flag) with spaces as + needed to fill the width. A too-small width does not cause + truncation of the output, but is simply ignored. The width may be + specified using any of the following: a positive integer; an + asterisk (*) to use the next function argument as the + width; or a string of the form *n$ to + use the nth function argument as the width. + + + + If the width comes from a function argument, that argument is + consumed before the argument that is used for the format specifier's + value. If the width argument is negative, the result is left + aligned (as if the - flag had been specified) within a + field of length abs(width). + + + + + + type (required) + + + The type of format conversion to use to produce the format + specifier's output. The following types are supported: + + + + s formats the argument value as a simple + string. A null value is treated as an empty string. + + + + + I treats the argument value as an SQL + identifier, double-quoting it if necessary. + It is an error for the value to be null (equivalent to + quote_ident). + + + + + L quotes the argument value as an SQL literal. + A null value is displayed as the string NULL, without + quotes (equivalent to quote_nullable). + + + + + + + + + + + In addition to the format specifiers described above, the special sequence + %% may be used to output a literal % character. + + + + Here are some examples of the basic format conversions: + + +SELECT format('Hello %s', 'World'); +Result: Hello World + +SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); +Result: Testing one, two, three, % + +SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); +Result: INSERT INTO "Foo bar" VALUES('O''Reilly') + +SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); +Result: INSERT INTO locations VALUES('C:\Program Files') + + + + + Here are examples using width fields + and the - flag: + + +SELECT format('|%10s|', 'foo'); +Result: | foo| + +SELECT format('|%-10s|', 'foo'); +Result: |foo | + +SELECT format('|%*s|', 10, 'foo'); +Result: | foo| + +SELECT format('|%*s|', -10, 'foo'); +Result: |foo | + +SELECT format('|%-*s|', 10, 'foo'); +Result: |foo | + +SELECT format('|%-*s|', -10, 'foo'); +Result: |foo | + + + + + These examples show use of position fields: + + +SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); +Result: Testing three, two, one + +SELECT format('|%*2$s|', 'foo', 10, 'bar'); +Result: | bar| + +SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); +Result: | foo| + + + + + Unlike the standard C function sprintf, + PostgreSQL's format function allows format + specifiers with and without position fields to be mixed + in the same format string. A format specifier without a + position field always uses the next argument after the + last argument consumed. + In addition, the format function does not require all + function arguments to be used in the format string. + For example: + + +SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); +Result: Testing three, two, three + + + + + The %I and %L format specifiers are particularly + useful for safely constructing dynamic SQL statements. See + . + + + +
diff --git a/doc/src/sgml/func/func-subquery.sgml b/doc/src/sgml/func/func-subquery.sgml new file mode 100644 index 0000000000000..a9f2b12e48c66 --- /dev/null +++ b/doc/src/sgml/func/func-subquery.sgml @@ -0,0 +1,349 @@ + + Subquery Expressions + + + EXISTS + + + + IN + + + + NOT IN + + + + ANY + + + + ALL + + + + SOME + + + + subquery + + + + This section describes the SQL-compliant subquery + expressions available in PostgreSQL. + All of the expression forms documented in this section return + Boolean (true/false) results. + + + + <literal>EXISTS</literal> + + +EXISTS (subquery) + + + + The argument of EXISTS is an arbitrary SELECT statement, + or subquery. The + subquery is evaluated to determine whether it returns any rows. + If it returns at least one row, the result of EXISTS is + true; if the subquery returns no rows, the result of EXISTS + is false. + + + + The subquery can refer to variables from the surrounding query, + which will act as constants during any one evaluation of the subquery. + + + + The subquery will generally only be executed long enough to determine + whether at least one row is returned, not all the way to completion. + It is unwise to write a subquery that has side effects (such as + calling sequence functions); whether the side effects occur + might be unpredictable. + + + + Since the result depends only on whether any rows are returned, + and not on the contents of those rows, the output list of the + subquery is normally unimportant. A common coding convention is + to write all EXISTS tests in the form + EXISTS(SELECT 1 WHERE ...). There are exceptions to + this rule however, such as subqueries that use INTERSECT. + + + + This simple example is like an inner join on col2, but + it produces at most one output row for each tab1 row, + even if there are several matching tab2 rows: + +SELECT col1 +FROM tab1 +WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + + + + + + <literal>IN</literal> + + +expression IN (subquery) + + + + The right-hand side is a parenthesized + subquery, which must return exactly one column. The left-hand expression + is evaluated and compared to each row of the subquery result. + The result of IN is true if any equal subquery row is found. + The result is false if no equal row is found (including the + case where the subquery returns no rows). + + + + Note that if the left-hand expression yields null, or if there are + no equal right-hand values and at least one right-hand row yields + null, the result of the IN construct will be null, not false. + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + As with EXISTS, it's unwise to assume that the subquery will + be evaluated completely. + + + +row_constructor IN (subquery) + + + + The left-hand side of this form of IN is a row constructor, + as described in . + The right-hand side is a parenthesized + subquery, which must return exactly as many columns as there are + expressions in the left-hand row. The left-hand expressions are + evaluated and compared row-wise to each row of the subquery result. + The result of IN is true if any equal subquery row is found. + The result is false if no equal row is found (including the + case where the subquery returns no rows). + + + + As usual, null values in the rows are combined per + the normal rules of SQL Boolean expressions. Two rows are considered + equal if all their corresponding members are non-null and equal; the rows + are unequal if any corresponding members are non-null and unequal; + otherwise the result of that row comparison is unknown (null). + If all the per-row results are either unequal or null, with at least one + null, then the result of IN is null. + + + + + <literal>NOT IN</literal> + + +expression NOT IN (subquery) + + + + The right-hand side is a parenthesized + subquery, which must return exactly one column. The left-hand expression + is evaluated and compared to each row of the subquery result. + The result of NOT IN is true if only unequal subquery rows + are found (including the case where the subquery returns no rows). + The result is false if any equal row is found. + + + + Note that if the left-hand expression yields null, or if there are + no equal right-hand values and at least one right-hand row yields + null, the result of the NOT IN construct will be null, not true. + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + As with EXISTS, it's unwise to assume that the subquery will + be evaluated completely. + + + +row_constructor NOT IN (subquery) + + + + The left-hand side of this form of NOT IN is a row constructor, + as described in . + The right-hand side is a parenthesized + subquery, which must return exactly as many columns as there are + expressions in the left-hand row. The left-hand expressions are + evaluated and compared row-wise to each row of the subquery result. + The result of NOT IN is true if only unequal subquery rows + are found (including the case where the subquery returns no rows). + The result is false if any equal row is found. + + + + As usual, null values in the rows are combined per + the normal rules of SQL Boolean expressions. Two rows are considered + equal if all their corresponding members are non-null and equal; the rows + are unequal if any corresponding members are non-null and unequal; + otherwise the result of that row comparison is unknown (null). + If all the per-row results are either unequal or null, with at least one + null, then the result of NOT IN is null. + + + + + <literal>ANY</literal>/<literal>SOME</literal> + + +expression operator ANY (subquery) +expression operator SOME (subquery) + + + + The right-hand side is a parenthesized + subquery, which must return exactly one column. The left-hand expression + is evaluated and compared to each row of the subquery result using the + given operator, which must yield a Boolean + result. + The result of ANY is true if any true result is obtained. + The result is false if no true result is found (including the + case where the subquery returns no rows). + + + + SOME is a synonym for ANY. + IN is equivalent to = ANY. + + + + Note that if there are no successes and at least one right-hand row yields + null for the operator's result, the result of the ANY construct + will be null, not false. + This is in accordance with SQL's normal rules for Boolean combinations + of null values. + + + + As with EXISTS, it's unwise to assume that the subquery will + be evaluated completely. + + + +row_constructor operator ANY (subquery) +row_constructor operator SOME (subquery) + + + + The left-hand side of this form of ANY is a row constructor, + as described in . + The right-hand side is a parenthesized + subquery, which must return exactly as many columns as there are + expressions in the left-hand row. The left-hand expressions are + evaluated and compared row-wise to each row of the subquery result, + using the given operator. + The result of ANY is true if the comparison + returns true for any subquery row. + The result is false if the comparison returns false for every + subquery row (including the case where the subquery returns no + rows). + The result is NULL if no comparison with a subquery row returns true, + and at least one comparison returns NULL. + + + + See for details about the meaning + of a row constructor comparison. + + + + + <literal>ALL</literal> + + +expression operator ALL (subquery) + + + + The right-hand side is a parenthesized + subquery, which must return exactly one column. The left-hand expression + is evaluated and compared to each row of the subquery result using the + given operator, which must yield a Boolean + result. + The result of ALL is true if all rows yield true + (including the case where the subquery returns no rows). + The result is false if any false result is found. + The result is NULL if no comparison with a subquery row returns false, + and at least one comparison returns NULL. + + + + NOT IN is equivalent to <> ALL. + + + + As with EXISTS, it's unwise to assume that the subquery will + be evaluated completely. + + + +row_constructor operator ALL (subquery) + + + + The left-hand side of this form of ALL is a row constructor, + as described in . + The right-hand side is a parenthesized + subquery, which must return exactly as many columns as there are + expressions in the left-hand row. The left-hand expressions are + evaluated and compared row-wise to each row of the subquery result, + using the given operator. + The result of ALL is true if the comparison + returns true for all subquery rows (including the + case where the subquery returns no rows). + The result is false if the comparison returns false for any + subquery row. + The result is NULL if no comparison with a subquery row returns false, + and at least one comparison returns NULL. + + + + See for details about the meaning + of a row constructor comparison. + + + + + Single-Row Comparison + + + comparison + subquery result row + + + +row_constructor operator (subquery) + + + + The left-hand side is a row constructor, + as described in . + The right-hand side is a parenthesized subquery, which must return exactly + as many columns as there are expressions in the left-hand row. Furthermore, + the subquery cannot return more than one row. (If it returns zero rows, + the result is taken to be null.) The left-hand side is evaluated and + compared row-wise to the single subquery result row. + + + + See for details about the meaning + of a row constructor comparison. + + + diff --git a/doc/src/sgml/func/func-textsearch.sgml b/doc/src/sgml/func/func-textsearch.sgml new file mode 100644 index 0000000000000..a06a58f14983a --- /dev/null +++ b/doc/src/sgml/func/func-textsearch.sgml @@ -0,0 +1,1046 @@ + + Text Search Functions and Operators + + + full text search + functions and operators + + + + text search + functions and operators + + + + , + and + + summarize the functions and operators that are provided + for full text searching. See for a detailed + explanation of PostgreSQL's text search + facility. + + + + Text Search Operators + + + + + Operator + + + Description + + + Example(s) + + + + + + + + tsvector @@ tsquery + boolean + + + tsquery @@ tsvector + boolean + + + Does tsvector match tsquery? + (The arguments can be given in either order.) + + + to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat') + t + + + + + + text @@ tsquery + boolean + + + Does text string, after implicit invocation + of to_tsvector(), match tsquery? + + + 'fat cats ate rats' @@ to_tsquery('cat & rat') + t + + + + + + tsvector || tsvector + tsvector + + + Concatenates two tsvectors. If both inputs contain + lexeme positions, the second input's positions are adjusted + accordingly. + + + 'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector + 'a':1 'b':2,5 'c':3 'd':4 + + + + + + tsquery && tsquery + tsquery + + + ANDs two tsquerys together, producing a query that + matches documents that match both input queries. + + + 'fat | rat'::tsquery && 'cat'::tsquery + ( 'fat' | 'rat' ) & 'cat' + + + + + + tsquery || tsquery + tsquery + + + ORs two tsquerys together, producing a query that + matches documents that match either input query. + + + 'fat | rat'::tsquery || 'cat'::tsquery + 'fat' | 'rat' | 'cat' + + + + + + !! tsquery + tsquery + + + Negates a tsquery, producing a query that matches + documents that do not match the input query. + + + !! 'cat'::tsquery + !'cat' + + + + + + tsquery <-> tsquery + tsquery + + + Constructs a phrase query, which matches if the two input queries + match at successive lexemes. + + + to_tsquery('fat') <-> to_tsquery('rat') + 'fat' <-> 'rat' + + + + + + tsquery @> tsquery + boolean + + + Does first tsquery contain the second? (This considers + only whether all the lexemes appearing in one query appear in the + other, ignoring the combining operators.) + + + 'cat'::tsquery @> 'cat & rat'::tsquery + f + + + + + + tsquery <@ tsquery + boolean + + + Is first tsquery contained in the second? (This + considers only whether all the lexemes appearing in one query appear + in the other, ignoring the combining operators.) + + + 'cat'::tsquery <@ 'cat & rat'::tsquery + t + + + 'cat'::tsquery <@ '!cat & rat'::tsquery + t + + + + +
+ + + In addition to these specialized operators, the usual comparison + operators shown in are + available for types tsvector and tsquery. + These are not very + useful for text searching but allow, for example, unique indexes to be + built on columns of these types. + + + + Text Search Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + array_to_tsvector + + array_to_tsvector ( text[] ) + tsvector + + + Converts an array of text strings to a tsvector. + The given strings are used as lexemes as-is, without further + processing. Array elements must not be empty strings + or NULL. + + + array_to_tsvector('{fat,cat,rat}'::text[]) + 'cat' 'fat' 'rat' + + + + + + + get_current_ts_config + + get_current_ts_config ( ) + regconfig + + + Returns the OID of the current default text search configuration + (as set by ). + + + get_current_ts_config() + english + + + + + + + length + + length ( tsvector ) + integer + + + Returns the number of lexemes in the tsvector. + + + length('fat:2,4 cat:3 rat:5A'::tsvector) + 3 + + + + + + + numnode + + numnode ( tsquery ) + integer + + + Returns the number of lexemes plus operators in + the tsquery. + + + numnode('(fat & rat) | cat'::tsquery) + 5 + + + + + + + plainto_tsquery + + plainto_tsquery ( + config regconfig, + query text ) + tsquery + + + Converts text to a tsquery, normalizing words according to + the specified or default configuration. Any punctuation in the string + is ignored (it does not determine query operators). The resulting + query matches documents containing all non-stopwords in the text. + + + plainto_tsquery('english', 'The Fat Rats') + 'fat' & 'rat' + + + + + + + phraseto_tsquery + + phraseto_tsquery ( + config regconfig, + query text ) + tsquery + + + Converts text to a tsquery, normalizing words according to + the specified or default configuration. Any punctuation in the string + is ignored (it does not determine query operators). The resulting + query matches phrases containing all non-stopwords in the text. + + + phraseto_tsquery('english', 'The Fat Rats') + 'fat' <-> 'rat' + + + phraseto_tsquery('english', 'The Cat and Rats') + 'cat' <2> 'rat' + + + + + + + websearch_to_tsquery + + websearch_to_tsquery ( + config regconfig, + query text ) + tsquery + + + Converts text to a tsquery, normalizing words according + to the specified or default configuration. Quoted word sequences are + converted to phrase tests. The word or is understood + as producing an OR operator, and a dash produces a NOT operator; + other punctuation is ignored. + This approximates the behavior of some common web search tools. + + + websearch_to_tsquery('english', '"fat rat" or cat dog') + 'fat' <-> 'rat' | 'cat' & 'dog' + + + + + + + querytree + + querytree ( tsquery ) + text + + + Produces a representation of the indexable portion of + a tsquery. A result that is empty or + just T indicates a non-indexable query. + + + querytree('foo & ! bar'::tsquery) + 'foo' + + + + + + + setweight + + setweight ( vector tsvector, weight "char" ) + tsvector + + + Assigns the specified weight to each element + of the vector. + + + setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A') + 'cat':3A 'fat':2A,4A 'rat':5A + + + + + + + setweight + setweight for specific lexeme(s) + + setweight ( vector tsvector, weight "char", lexemes text[] ) + tsvector + + + Assigns the specified weight to elements + of the vector that are listed + in lexemes. + The strings in lexemes are taken as lexemes + as-is, without further processing. Strings that do not match any + lexeme in vector are ignored. + + + setweight('fat:2,4 cat:3 rat:5,6B'::tsvector, 'A', '{cat,rat}') + 'cat':3A 'fat':2,4 'rat':5A,6A + + + + + + + strip + + strip ( tsvector ) + tsvector + + + Removes positions and weights from the tsvector. + + + strip('fat:2,4 cat:3 rat:5A'::tsvector) + 'cat' 'fat' 'rat' + + + + + + + to_tsquery + + to_tsquery ( + config regconfig, + query text ) + tsquery + + + Converts text to a tsquery, normalizing words according to + the specified or default configuration. The words must be combined + by valid tsquery operators. + + + to_tsquery('english', 'The & Fat & Rats') + 'fat' & 'rat' + + + + + + + to_tsvector + + to_tsvector ( + config regconfig, + document text ) + tsvector + + + Converts text to a tsvector, normalizing words according + to the specified or default configuration. Position information is + included in the result. + + + to_tsvector('english', 'The Fat Rats') + 'fat':2 'rat':3 + + + + + + to_tsvector ( + config regconfig, + document json ) + tsvector + + + to_tsvector ( + config regconfig, + document jsonb ) + tsvector + + + Converts each string value in the JSON document to + a tsvector, normalizing words according to the specified + or default configuration. The results are then concatenated in + document order to produce the output. Position information is + generated as though one stopword exists between each pair of string + values. (Beware that document order of the fields of a + JSON object is implementation-dependent when the input + is jsonb; observe the difference in the examples.) + + + to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::json) + 'dog':5 'fat':2 'rat':3 + + + to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::jsonb) + 'dog':1 'fat':4 'rat':5 + + + + + + + json_to_tsvector + + json_to_tsvector ( + config regconfig, + document json, + filter jsonb ) + tsvector + + + + jsonb_to_tsvector + + jsonb_to_tsvector ( + config regconfig, + document jsonb, + filter jsonb ) + tsvector + + + Selects each item in the JSON document that is requested by + the filter and converts each one to + a tsvector, normalizing words according to the specified + or default configuration. The results are then concatenated in + document order to produce the output. Position information is + generated as though one stopword exists between each pair of selected + items. (Beware that document order of the fields of a + JSON object is implementation-dependent when the input + is jsonb.) + The filter must be a jsonb + array containing zero or more of these keywords: + "string" (to include all string values), + "numeric" (to include all numeric values), + "boolean" (to include all boolean values), + "key" (to include all keys), or + "all" (to include all the above). + As a special case, the filter can also be a + simple JSON value that is one of these keywords. + + + json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]') + '123':5 'fat':2 'rat':3 + + + json_to_tsvector('english', '{"cat": "The Fat Rats", "dog": 123}'::json, '"all"') + '123':9 'cat':1 'dog':7 'fat':4 'rat':5 + + + + + + + ts_delete + + ts_delete ( vector tsvector, lexeme text ) + tsvector + + + Removes any occurrence of the given lexeme + from the vector. + The lexeme string is treated as a lexeme as-is, + without further processing. + + + ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat') + 'cat':3 'rat':5A + + + + + + ts_delete ( vector tsvector, lexemes text[] ) + tsvector + + + Removes any occurrences of the lexemes + in lexemes + from the vector. + The strings in lexemes are taken as lexemes + as-is, without further processing. Strings that do not match any + lexeme in vector are ignored. + + + ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat']) + 'cat':3 + + + + + + + ts_filter + + ts_filter ( vector tsvector, weights "char"[] ) + tsvector + + + Selects only elements with the given weights + from the vector. + + + ts_filter('fat:2,4 cat:3b,7c rat:5A'::tsvector, '{a,b}') + 'cat':3B 'rat':5A + + + + + + + ts_headline + + ts_headline ( + config regconfig, + document text, + query tsquery + , options text ) + text + + + Displays, in an abbreviated form, the match(es) for + the query in + the document, which must be raw text not + a tsvector. Words in the document are normalized + according to the specified or default configuration before matching to + the query. Use of this function is discussed in + , which also describes the + available options. + + + ts_headline('The fat cat ate the rat.', 'cat') + The fat <b>cat</b> ate the rat. + + + + + + ts_headline ( + config regconfig, + document json, + query tsquery + , options text ) + text + + + ts_headline ( + config regconfig, + document jsonb, + query tsquery + , options text ) + text + + + Displays, in an abbreviated form, match(es) for + the query that occur in string values + within the JSON document. + See for more details. + + + ts_headline('{"cat":"raining cats and dogs"}'::jsonb, 'cat') + {"cat": "raining <b>cats</b> and dogs"} + + + + + + + ts_rank + + ts_rank ( + weights real[], + vector tsvector, + query tsquery + , normalization integer ) + real + + + Computes a score showing how well + the vector matches + the query. See + for details. + + + ts_rank(to_tsvector('raining cats and dogs'), 'cat') + 0.06079271 + + + + + + + ts_rank_cd + + ts_rank_cd ( + weights real[], + vector tsvector, + query tsquery + , normalization integer ) + real + + + Computes a score showing how well + the vector matches + the query, using a cover density + algorithm. See for details. + + + ts_rank_cd(to_tsvector('raining cats and dogs'), 'cat') + 0.1 + + + + + + + ts_rewrite + + ts_rewrite ( query tsquery, + target tsquery, + substitute tsquery ) + tsquery + + + Replaces occurrences of target + with substitute + within the query. + See for details. + + + ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery) + 'b' & ( 'foo' | 'bar' ) + + + + + + ts_rewrite ( query tsquery, + select text ) + tsquery + + + Replaces portions of the query according to + target(s) and substitute(s) obtained by executing + a SELECT command. + See for details. + + + SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases') + 'b' & ( 'foo' | 'bar' ) + + + + + + + tsquery_phrase + + tsquery_phrase ( query1 tsquery, query2 tsquery ) + tsquery + + + Constructs a phrase query that searches + for matches of query1 + and query2 at successive lexemes (same + as <-> operator). + + + tsquery_phrase(to_tsquery('fat'), to_tsquery('cat')) + 'fat' <-> 'cat' + + + + + + tsquery_phrase ( query1 tsquery, query2 tsquery, distance integer ) + tsquery + + + Constructs a phrase query that searches + for matches of query1 and + query2 that occur exactly + distance lexemes apart. + + + tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10) + 'fat' <10> 'cat' + + + + + + + tsvector_to_array + + tsvector_to_array ( tsvector ) + text[] + + + Converts a tsvector to an array of lexemes. + + + tsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector) + {cat,fat,rat} + + + + + + + unnest + for tsvector + + unnest ( tsvector ) + setof record + ( lexeme text, + positions smallint[], + weights text ) + + + Expands a tsvector into a set of rows, one per lexeme. + + + select * from unnest('cat:3 fat:2,4 rat:5A'::tsvector) + + + lexeme | positions | weights +--------+-----------+--------- + cat | {3} | {D} + fat | {2,4} | {D,D} + rat | {5} | {A} + + + + + +
+ + + + All the text search functions that accept an optional regconfig + argument will use the configuration specified by + + when that argument is omitted. + + + + + The functions in + + are listed separately because they are not usually used in everyday text + searching operations. They are primarily helpful for development and + debugging of new text search configurations. + + + + Text Search Debugging Functions + + + + + Function + + + Description + + + Example(s) + + + + + + + + + ts_debug + + ts_debug ( + config regconfig, + document text ) + setof record + ( alias text, + description text, + token text, + dictionaries regdictionary[], + dictionary regdictionary, + lexemes text[] ) + + + Extracts and normalizes tokens from + the document according to the specified or + default text search configuration, and returns information about how + each token was processed. + See for details. + + + ts_debug('english', 'The Brightest supernovaes') + (asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) ... + + + + + + + ts_lexize + + ts_lexize ( dict regdictionary, token text ) + text[] + + + Returns an array of replacement lexemes if the input token is known to + the dictionary, or an empty array if the token is known to the + dictionary but it is a stop word, or NULL if it is not a known word. + See for details. + + + ts_lexize('english_stem', 'stars') + {star} + + + + + + + ts_parse + + ts_parse ( parser_name text, + document text ) + setof record + ( tokid integer, + token text ) + + + Extracts tokens from the document using the + named parser. + See for details. + + + ts_parse('default', 'foo - bar') + (1,foo) ... + + + + + + ts_parse ( parser_oid oid, + document text ) + setof record + ( tokid integer, + token text ) + + + Extracts tokens from the document using a + parser specified by OID. + See for details. + + + ts_parse(3722, 'foo - bar') + (1,foo) ... + + + + + + + ts_token_type + + ts_token_type ( parser_name text ) + setof record + ( tokid integer, + alias text, + description text ) + + + Returns a table that describes each type of token the named parser can + recognize. + See for details. + + + ts_token_type('default') + (1,asciiword,"Word, all ASCII") ... + + + + + + ts_token_type ( parser_oid oid ) + setof record + ( tokid integer, + alias text, + description text ) + + + Returns a table that describes each type of token a parser specified + by OID can recognize. + See for details. + + + ts_token_type(3722) + (1,asciiword,"Word, all ASCII") ... + + + + + + + ts_stat + + ts_stat ( sqlquery text + , weights text ) + setof record + ( word text, + ndoc integer, + nentry integer ) + + + Executes the sqlquery, which must return a + single tsvector column, and returns statistics about each + distinct lexeme contained in the data. + See for details. + + + ts_stat('SELECT vector FROM apod') + (foo,10,15) ... + + + + +
+ +
diff --git a/doc/src/sgml/func/func-trigger.sgml b/doc/src/sgml/func/func-trigger.sgml new file mode 100644 index 0000000000000..94b40adbdb84a --- /dev/null +++ b/doc/src/sgml/func/func-trigger.sgml @@ -0,0 +1,135 @@ + + Trigger Functions + + + While many uses of triggers involve user-written trigger functions, + PostgreSQL provides a few built-in trigger + functions that can be used directly in user-defined triggers. These + are summarized in . + (Additional built-in trigger functions exist, which implement foreign + key constraints and deferred index constraints. Those are not documented + here since users need not use them directly.) + + + + For more information about creating triggers, see + . + + + + Built-In Trigger Functions + + + + + Function + + + Description + + + Example Usage + + + + + + + + + suppress_redundant_updates_trigger + + suppress_redundant_updates_trigger ( ) + trigger + + + Suppresses do-nothing update operations. See below for details. + + + CREATE TRIGGER ... suppress_redundant_updates_trigger() + + + + + + + tsvector_update_trigger + + tsvector_update_trigger ( ) + trigger + + + Automatically updates a tsvector column from associated + plain-text document column(s). The text search configuration to use + is specified by name as a trigger argument. See + for details. + + + CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body) + + + + + + + tsvector_update_trigger_column + + tsvector_update_trigger_column ( ) + trigger + + + Automatically updates a tsvector column from associated + plain-text document column(s). The text search configuration to use + is taken from a regconfig column of the table. See + for details. + + + CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, tsconfigcol, title, body) + + + + +
+ + + The suppress_redundant_updates_trigger function, + when applied as a row-level BEFORE UPDATE trigger, + will prevent any update that does not actually change the data in the + row from taking place. This overrides the normal behavior which always + performs a physical row update + regardless of whether or not the data has changed. (This normal behavior + makes updates run faster, since no checking is required, and is also + useful in certain cases.) + + + + Ideally, you should avoid running updates that don't actually + change the data in the record. Redundant updates can cost considerable + unnecessary time, especially if there are lots of indexes to alter, + and space in dead rows that will eventually have to be vacuumed. + However, detecting such situations in client code is not + always easy, or even possible, and writing expressions to detect + them can be error-prone. An alternative is to use + suppress_redundant_updates_trigger, which will skip + updates that don't change the data. You should use this with care, + however. The trigger takes a small but non-trivial time for each record, + so if most of the records affected by updates do actually change, + use of this trigger will make updates run slower on average. + + + + The suppress_redundant_updates_trigger function can be + added to a table like this: + +CREATE TRIGGER z_min_update +BEFORE UPDATE ON tablename +FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); + + In most cases, you need to fire this trigger last for each row, so that + it does not override other triggers that might wish to alter the row. + Bearing in mind that triggers fire in name order, you would therefore + choose a trigger name that comes after the name of any other trigger + you might have on the table. (Hence the z prefix in the + example.) + +
diff --git a/doc/src/sgml/func/func-uuid.sgml b/doc/src/sgml/func/func-uuid.sgml new file mode 100644 index 0000000000000..65c5ddec6b7dc --- /dev/null +++ b/doc/src/sgml/func/func-uuid.sgml @@ -0,0 +1,188 @@ + + UUID Functions + + + UUID + generating + + + + gen_random_uuid + + + + uuidv4 + + + + uuidv7 + + + + uuid_extract_timestamp + + + + uuid_extract_version + + + + shows the PostgreSQL + functions that can be used to generate UUIDs. + + + + <acronym>UUID</acronym> Generation Functions + + + + + + Function + + + Description + + + Example(s) + + + + + + + + + + gen_random_uuid + uuid + + + uuidv4 + uuid + + + Generate a version 4 (random) UUID. + + + gen_random_uuid() + 5b30857f-0bfa-48b5-ac0b-5c64e28078d1 + + + uuidv4() + b42410ee-132f-42ee-9e4f-09a6485c95b8 + + + + + + + uuidv7 + ( shift interval ) + uuid + + + Generate a version 7 (time-ordered) UUID. The timestamp is computed using UNIX timestamp + with millisecond precision + sub-millisecond timestamp + random. The optional parameter + shift will shift the computed timestamp by the given interval. + + + uuidv7() + 019535d9-3df7-79fb-b466-fa907fa17f9e + + + + + +
+ + + + The module provides additional functions that + implement other standard algorithms for generating UUIDs. + + + + + shows the PostgreSQL + functions that can be used to extract information from UUIDs. + + + + <acronym>UUID</acronym> Extraction Functions + + + + + + Function + + + Description + + + Example(s) + + + + + + + + + + uuid_extract_timestamp + ( uuid ) + timestamp with time zone + + + Extracts a timestamp with time zone from UUID + version 1 and 7. For other versions, this function returns null. Note that + the extracted timestamp is not necessarily exactly equal to the time the + UUID was generated; this depends on the implementation that generated the + UUID. + + + uuid_extract_timestamp('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) + 2025-02-23 21:46:24.503-05 + + + + + + + uuid_extract_version + ( uuid ) + smallint + + + Extracts the version from a UUID of the variant described by + RFC 9562. For + other variants, this function returns null. For example, for a UUID + generated by gen_random_uuid, this function will + return 4. + + + uuid_extract_version('41db1265-8bc1-4ab3-992f-&zwsp;885799a4af1d'::uuid) + 4 + + + uuid_extract_version('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) + 7 + + + + + +
+ + + PostgreSQL also provides the usual comparison + operators shown in for + UUIDs. + + + See for details on the data type + uuid in PostgreSQL. + +
diff --git a/doc/src/sgml/func/func-window.sgml b/doc/src/sgml/func/func-window.sgml new file mode 100644 index 0000000000000..cce0165b9526e --- /dev/null +++ b/doc/src/sgml/func/func-window.sgml @@ -0,0 +1,284 @@ + + Window Functions + + + window function + built-in + + + + Window functions provide the ability to perform + calculations across sets of rows that are related to the current query + row. See for an introduction to this + feature, and for syntax + details. + + + + The built-in window functions are listed in + . Note that these functions + must be invoked using window function syntax, i.e., an + OVER clause is required. + + + + In addition to these functions, any built-in or user-defined + ordinary aggregate (i.e., not ordered-set or hypothetical-set aggregates) + can be used as a window function; see + for a list of the built-in aggregates. + Aggregate functions act as window functions only when an OVER + clause follows the call; otherwise they act as plain aggregates + and return a single row for the entire set. + + + + General-Purpose Window Functions + + + + + Function + + + Description + + + + + + + + + row_number + + row_number () + bigint + + + Returns the number of the current row within its partition, counting + from 1. + + + + + + + rank + + rank () + bigint + + + Returns the rank of the current row, with gaps; that is, + the row_number of the first row in its peer + group. + + + + + + + dense_rank + + dense_rank () + bigint + + + Returns the rank of the current row, without gaps; this function + effectively counts peer groups. + + + + + + + percent_rank + + percent_rank () + double precision + + + Returns the relative rank of the current row, that is + (rank - 1) / (total partition rows - 1). + The value thus ranges from 0 to 1 inclusive. + + + + + + + cume_dist + + cume_dist () + double precision + + + Returns the cumulative distribution, that is (number of partition rows + preceding or peers with current row) / (total partition rows). + The value thus ranges from 1/N to 1. + + + + + + + ntile + + ntile ( num_buckets integer ) + integer + + + Returns an integer ranging from 1 to the argument value, dividing the + partition as equally as possible. + + + + + + + lag + + lag ( value anycompatible + , offset integer + , default anycompatible ) + anycompatible + + + Returns value evaluated at + the row that is offset + rows before the current row within the partition; if there is no such + row, instead returns default + (which must be of a type compatible with + value). + Both offset and + default are evaluated + with respect to the current row. If omitted, + offset defaults to 1 and + default to NULL. + + + + + + + lead + + lead ( value anycompatible + , offset integer + , default anycompatible ) + anycompatible + + + Returns value evaluated at + the row that is offset + rows after the current row within the partition; if there is no such + row, instead returns default + (which must be of a type compatible with + value). + Both offset and + default are evaluated + with respect to the current row. If omitted, + offset defaults to 1 and + default to NULL. + + + + + + + first_value + + first_value ( value anyelement ) + anyelement + + + Returns value evaluated + at the row that is the first row of the window frame. + + + + + + + last_value + + last_value ( value anyelement ) + anyelement + + + Returns value evaluated + at the row that is the last row of the window frame. + + + + + + + nth_value + + nth_value ( value anyelement, n integer ) + anyelement + + + Returns value evaluated + at the row that is the n'th + row of the window frame (counting from 1); + returns NULL if there is no such row. + + + + +
+ + + All of the functions listed in + depend on the sort ordering + specified by the ORDER BY clause of the associated window + definition. Rows that are not distinct when considering only the + ORDER BY columns are said to be peers. + The four ranking functions (including cume_dist) are + defined so that they give the same answer for all rows of a peer group. + + + + Note that first_value, last_value, and + nth_value consider only the rows within the window + frame, which by default contains the rows from the start of the + partition through the last peer of the current row. This is + likely to give unhelpful results for last_value and + sometimes also nth_value. You can redefine the frame by + adding a suitable frame specification (RANGE, + ROWS or GROUPS) to + the OVER clause. + See for more information + about frame specifications. + + + + When an aggregate function is used as a window function, it aggregates + over the rows within the current row's window frame. + An aggregate used with ORDER BY and the default window frame + definition produces a running sum type of behavior, which may or + may not be what's wanted. To obtain + aggregation over the whole partition, omit ORDER BY or use + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. + Other frame specifications can be used to obtain other effects. + + + + + The SQL standard defines a RESPECT NULLS or + IGNORE NULLS option for lead, lag, + first_value, last_value, and + nth_value. This is not implemented in + PostgreSQL: the behavior is always the + same as the standard's default, namely RESPECT NULLS. + Likewise, the standard's FROM FIRST or FROM LAST + option for nth_value is not implemented: only the + default FROM FIRST behavior is supported. (You can achieve + the result of FROM LAST by reversing the ORDER BY + ordering.) + + + +
diff --git a/doc/src/sgml/func/func-xml.sgml b/doc/src/sgml/func/func-xml.sgml new file mode 100644 index 0000000000000..21f34467a4f8a --- /dev/null +++ b/doc/src/sgml/func/func-xml.sgml @@ -0,0 +1,1283 @@ + + + XML Functions + + + XML Functions + + + + The functions and function-like expressions described in this + section operate on values of type xml. See for information about the xml + type. The function-like expressions xmlparse + and xmlserialize for converting to and from + type xml are documented there, not in this section. + + + + Use of most of these functions + requires PostgreSQL to have been built + with configure --with-libxml. + + + + Producing XML Content + + + A set of functions and function-like expressions is available for + producing XML content from SQL data. As such, they are + particularly suitable for formatting query results into XML + documents for processing in client applications. + + + + <literal>xmltext</literal> + + + xmltext + + + +xmltext ( text ) xml + + + + The function xmltext returns an XML value with a single + text node containing the input argument as its content. Predefined entities + like ampersand (), left and right angle brackets + (]]>), and quotation marks () + are escaped. + + + + Example: +'); + xmltext +------------------------- + < foo & bar > +]]> + + + + + <literal>xmlcomment</literal> + + + xmlcomment + + + +xmlcomment ( text ) xml + + + + The function xmlcomment creates an XML value + containing an XML comment with the specified text as content. + The text cannot contain -- or end with a + -, otherwise the resulting construct + would not be a valid XML comment. + If the argument is null, the result is null. + + + + Example: + +]]> + + + + + <literal>xmlconcat</literal> + + + xmlconcat + + + +xmlconcat ( xml , ... ) xml + + + + The function xmlconcat concatenates a list + of individual XML values to create a single value containing an + XML content fragment. Null values are omitted; the result is + only null if there are no nonnull arguments. + + + + Example: +', 'foo'); + + xmlconcat +---------------------- + foo +]]> + + + + XML declarations, if present, are combined as follows. If all + argument values have the same XML version declaration, that + version is used in the result, else no version is used. If all + argument values have the standalone declaration value + yes, then that value is used in the result. If + all argument values have a standalone declaration value and at + least one is no, then that is used in the result. + Else the result will have no standalone declaration. If the + result is determined to require a standalone declaration but no + version declaration, a version declaration with version 1.0 will + be used because XML requires an XML declaration to contain a + version declaration. Encoding declarations are ignored and + removed in all cases. + + + + Example: +', ''); + + xmlconcat +----------------------------------- + +]]> + + + + + <literal>xmlelement</literal> + + + xmlelement + + + +xmlelement ( NAME name , XMLATTRIBUTES ( attvalue AS attname , ... ) , content , ... ) xml + + + + The xmlelement expression produces an XML + element with the given name, attributes, and content. + The name + and attname items shown in the syntax are + simple identifiers, not values. The attvalue + and content items are expressions, which can + yield any PostgreSQL data type. The + argument(s) within XMLATTRIBUTES generate attributes + of the XML element; the content value(s) are + concatenated to form its content. + + + + Examples: + + +SELECT xmlelement(name foo, xmlattributes('xyz' as bar)); + + xmlelement +------------------ + + +SELECT xmlelement(name foo, xmlattributes(current_date as bar), 'cont', 'ent'); + + xmlelement +------------------------------------- + content +]]> + + + + Element and attribute names that are not valid XML names are + escaped by replacing the offending characters by the sequence + _xHHHH_, where + HHHH is the character's Unicode + codepoint in hexadecimal notation. For example: + +]]> + + + + An explicit attribute name need not be specified if the attribute + value is a column reference, in which case the column's name will + be used as the attribute name by default. In other cases, the + attribute must be given an explicit name. So this example is + valid: + +CREATE TABLE test (a xml, b xml); +SELECT xmlelement(name test, xmlattributes(a, b)) FROM test; + + But these are not: + +SELECT xmlelement(name test, xmlattributes('constant'), a, b) FROM test; +SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test; + + + + + Element content, if specified, will be formatted according to + its data type. If the content is itself of type xml, + complex XML documents can be constructed. For example: + +]]> + + Content of other types will be formatted into valid XML character + data. This means in particular that the characters <, >, + and & will be converted to entities. Binary data (data type + bytea) will be represented in base64 or hex + encoding, depending on the setting of the configuration parameter + . The particular behavior for + individual data types is expected to evolve in order to align the + PostgreSQL mappings with those specified in SQL:2006 and later, + as discussed in . + + + + + <literal>xmlforest</literal> + + + xmlforest + + + +xmlforest ( content AS name , ... ) xml + + + + The xmlforest expression produces an XML + forest (sequence) of elements using the given names and content. + As for xmlelement, + each name must be a simple identifier, while + the content expressions can have any data + type. + + + + Examples: + +SELECT xmlforest('abc' AS foo, 123 AS bar); + + xmlforest +------------------------------ + <foo>abc</foo><bar>123</bar> + + +SELECT xmlforest(table_name, column_name) +FROM information_schema.columns +WHERE table_schema = 'pg_catalog'; + + xmlforest +------------------------------------&zwsp;----------------------------------- + <table_name>pg_authid</table_name>&zwsp;<column_name>rolname</column_name> + <table_name>pg_authid</table_name>&zwsp;<column_name>rolsuper</column_name> + ... + + + As seen in the second example, the element name can be omitted if + the content value is a column reference, in which case the column + name is used by default. Otherwise, a name must be specified. + + + + Element names that are not valid XML names are escaped as shown + for xmlelement above. Similarly, content + data is escaped to make valid XML content, unless it is already + of type xml. + + + + Note that XML forests are not valid XML documents if they consist + of more than one element, so it might be useful to wrap + xmlforest expressions in + xmlelement. + + + + + <literal>xmlpi</literal> + + + xmlpi + + + +xmlpi ( NAME name , content ) xml + + + + The xmlpi expression creates an XML + processing instruction. + As for xmlelement, + the name must be a simple identifier, while + the content expression can have any data type. + The content, if present, must not contain the + character sequence ?>. + + + + Example: + +]]> + + + + + <literal>xmlroot</literal> + + + xmlroot + + + +xmlroot ( xml, VERSION {text|NO VALUE} , STANDALONE {YES|NO|NO VALUE} ) xml + + + + The xmlroot expression alters the properties + of the root node of an XML value. If a version is specified, + it replaces the value in the root node's version declaration; if a + standalone setting is specified, it replaces the value in the + root node's standalone declaration. + + + +abc'), + version '1.0', standalone yes); + + xmlroot +---------------------------------------- + + abc +]]> + + + + + <literal>xmlagg</literal> + + + xmlagg + + + +xmlagg ( xml ) xml + + + + The function xmlagg is, unlike the other + functions described here, an aggregate function. It concatenates the + input values to the aggregate function call, + much like xmlconcat does, except that concatenation + occurs across rows rather than across expressions in a single row. + See for additional information + about aggregate functions. + + + + Example: +abc'); +INSERT INTO test VALUES (2, ''); +SELECT xmlagg(x) FROM test; + xmlagg +---------------------- + abc +]]> + + + + To determine the order of the concatenation, an ORDER BY + clause may be added to the aggregate call as described in + . For example: + +abc +]]> + + + + The following non-standard approach used to be recommended + in previous versions, and may still be useful in specific + cases: + +abc +]]> + + + + + + XML Predicates + + + The expressions described in this section check properties + of xml values. + + + + <literal>IS DOCUMENT</literal> + + + IS DOCUMENT + + + +xml IS DOCUMENT boolean + + + + The expression IS DOCUMENT returns true if the + argument XML value is a proper XML document, false if it is not + (that is, it is a content fragment), or null if the argument is + null. See about the difference + between documents and content fragments. + + + + + <literal>IS NOT DOCUMENT</literal> + + + IS NOT DOCUMENT + + + +xml IS NOT DOCUMENT boolean + + + + The expression IS NOT DOCUMENT returns false if the + argument XML value is a proper XML document, true if it is not (that is, + it is a content fragment), or null if the argument is null. + + + + + <literal>XMLEXISTS</literal> + + + XMLEXISTS + + + +XMLEXISTS ( text PASSING BY {REF|VALUE} xml BY {REF|VALUE} ) boolean + + + + The function xmlexists evaluates an XPath 1.0 + expression (the first argument), with the passed XML value as its context + item. The function returns false if the result of that evaluation + yields an empty node-set, true if it yields any other value. The + function returns null if any argument is null. A nonnull value + passed as the context item must be an XML document, not a content + fragment or any non-XML value. + + + + Example: + TorontoOttawa'); + + xmlexists +------------ + t +(1 row) +]]> + + + + The BY REF and BY VALUE clauses + are accepted in PostgreSQL, but are ignored, + as discussed in . + + + + In the SQL standard, the xmlexists function + evaluates an expression in the XML Query language, + but PostgreSQL allows only an XPath 1.0 + expression, as discussed in + . + + + + + <literal>xml_is_well_formed</literal> + + + xml_is_well_formed + + + + xml_is_well_formed_document + + + + xml_is_well_formed_content + + + +xml_is_well_formed ( text ) boolean +xml_is_well_formed_document ( text ) boolean +xml_is_well_formed_content ( text ) boolean + + + + These functions check whether a text string represents + well-formed XML, returning a Boolean result. + xml_is_well_formed_document checks for a well-formed + document, while xml_is_well_formed_content checks + for well-formed content. xml_is_well_formed does + the former if the configuration + parameter is set to DOCUMENT, or the latter if it is set to + CONTENT. This means that + xml_is_well_formed is useful for seeing whether + a simple cast to type xml will succeed, whereas the other two + functions are useful for seeing whether the corresponding variants of + XMLPARSE will succeed. + + + + Examples: + +'); + xml_is_well_formed +-------------------- + f +(1 row) + +SELECT xml_is_well_formed(''); + xml_is_well_formed +-------------------- + t +(1 row) + +SET xmloption TO CONTENT; +SELECT xml_is_well_formed('abc'); + xml_is_well_formed +-------------------- + t +(1 row) + +SELECT xml_is_well_formed_document('bar'); + xml_is_well_formed_document +----------------------------- + t +(1 row) + +SELECT xml_is_well_formed_document('bar'); + xml_is_well_formed_document +----------------------------- + f +(1 row) +]]> + + The last example shows that the checks include whether + namespaces are correctly matched. + + + + + + Processing XML + + + To process values of data type xml, PostgreSQL offers + the functions xpath and + xpath_exists, which evaluate XPath 1.0 + expressions, and the XMLTABLE + table function. + + + + <literal>xpath</literal> + + + XPath + + + +xpath ( xpath text, xml xml , nsarray text[] ) xml[] + + + + The function xpath evaluates the XPath 1.0 + expression xpath (given as text) + against the XML value + xml. It returns an array of XML values + corresponding to the node-set produced by the XPath expression. + If the XPath expression returns a scalar value rather than a node-set, + a single-element array is returned. + + + + The second argument must be a well formed XML document. In particular, + it must have a single root node element. + + + + The optional third argument of the function is an array of namespace + mappings. This array should be a two-dimensional text array with + the length of the second axis being equal to 2 (i.e., it should be an + array of arrays, each of which consists of exactly 2 elements). + The first element of each array entry is the namespace name (alias), the + second the namespace URI. It is not required that aliases provided in + this array be the same as those being used in the XML document itself (in + other words, both in the XML document and in the xpath + function context, aliases are local). + + + + Example: +test', + ARRAY[ARRAY['my', 'http://example.com']]); + + xpath +-------- + {test} +(1 row) +]]> + + + + To deal with default (anonymous) namespaces, do something like this: +test', + ARRAY[ARRAY['mydefns', 'http://example.com']]); + + xpath +-------- + {test} +(1 row) +]]> + + + + + <literal>xpath_exists</literal> + + + xpath_exists + + + +xpath_exists ( xpath text, xml xml , nsarray text[] ) boolean + + + + The function xpath_exists is a specialized form + of the xpath function. Instead of returning the + individual XML values that satisfy the XPath 1.0 expression, this function + returns a Boolean indicating whether the query was satisfied or not + (specifically, whether it produced any value other than an empty node-set). + This function is equivalent to the XMLEXISTS predicate, + except that it also offers support for a namespace mapping argument. + + + + Example: +test', + ARRAY[ARRAY['my', 'http://example.com']]); + + xpath_exists +-------------- + t +(1 row) +]]> + + + + + <literal>xmltable</literal> + + + xmltable + + + + table function + XMLTABLE + + + +XMLTABLE ( + XMLNAMESPACES ( namespace_uri AS namespace_name , ... ), + row_expression PASSING BY {REF|VALUE} document_expression BY {REF|VALUE} + COLUMNS name { type PATH column_expression DEFAULT default_expression NOT NULL | NULL + | FOR ORDINALITY } + , ... +) setof record + + + + The xmltable expression produces a table based + on an XML value, an XPath filter to extract rows, and a + set of column definitions. + Although it syntactically resembles a function, it can only appear + as a table in a query's FROM clause. + + + + The optional XMLNAMESPACES clause gives a + comma-separated list of namespace definitions, where + each namespace_uri is a text + expression and each namespace_name is a simple + identifier. It specifies the XML namespaces used in the document and + their aliases. A default namespace specification is not currently + supported. + + + + The required row_expression argument is an + XPath 1.0 expression (given as text) that is evaluated, + passing the XML value document_expression as + its context item, to obtain a set of XML nodes. These nodes are what + xmltable transforms into output rows. No rows + will be produced if the document_expression + is null, nor if the row_expression produces + an empty node-set or any value other than a node-set. + + + + document_expression provides the context + item for the row_expression. It must be a + well-formed XML document; fragments/forests are not accepted. + The BY REF and BY VALUE clauses + are accepted but ignored, as discussed in + . + + + + In the SQL standard, the xmltable function + evaluates expressions in the XML Query language, + but PostgreSQL allows only XPath 1.0 + expressions, as discussed in + . + + + + The required COLUMNS clause specifies the + column(s) that will be produced in the output table. + See the syntax summary above for the format. + A name is required for each column, as is a data type + (unless FOR ORDINALITY is specified, in which case + type integer is implicit). The path, default and + nullability clauses are optional. + + + + A column marked FOR ORDINALITY will be populated + with row numbers, starting with 1, in the order of nodes retrieved from + the row_expression's result node-set. + At most one column may be marked FOR ORDINALITY. + + + + + XPath 1.0 does not specify an order for nodes in a node-set, so code + that relies on a particular order of the results will be + implementation-dependent. Details can be found in + . + + + + + The column_expression for a column is an + XPath 1.0 expression that is evaluated for each row, with the current + node from the row_expression result as its + context item, to find the value of the column. If + no column_expression is given, then the + column name is used as an implicit path. + + + + If a column's XPath expression returns a non-XML value (which is limited + to string, boolean, or double in XPath 1.0) and the column has a + PostgreSQL type other than xml, the column will be set + as if by assigning the value's string representation to the PostgreSQL + type. (If the value is a boolean, its string representation is taken + to be 1 or 0 if the output + column's type category is numeric, otherwise true or + false.) + + + + If a column's XPath expression returns a non-empty set of XML nodes + and the column's PostgreSQL type is xml, the column will + be assigned the expression result exactly, if it is of document or + content form. + + + A result containing more than one element node at the top level, or + non-whitespace text outside of an element, is an example of content form. + An XPath result can be of neither form, for example if it returns an + attribute node selected from the element that contains it. Such a result + will be put into content form with each such disallowed node replaced by + its string value, as defined for the XPath 1.0 + string function. + + + + + + A non-XML result assigned to an xml output column produces + content, a single text node with the string value of the result. + An XML result assigned to a column of any other type may not have more than + one node, or an error is raised. If there is exactly one node, the column + will be set as if by assigning the node's string + value (as defined for the XPath 1.0 string function) + to the PostgreSQL type. + + + + The string value of an XML element is the concatenation, in document order, + of all text nodes contained in that element and its descendants. The string + value of an element with no descendant text nodes is an + empty string (not NULL). + Any xsi:nil attributes are ignored. + Note that the whitespace-only text() node between two non-text + elements is preserved, and that leading whitespace on a text() + node is not flattened. + The XPath 1.0 string function may be consulted for the + rules defining the string value of other XML node types and non-XML values. + + + + The conversion rules presented here are not exactly those of the SQL + standard, as discussed in . + + + + If the path expression returns an empty node-set + (typically, when it does not match) + for a given row, the column will be set to NULL, unless + a default_expression is specified; then the + value resulting from evaluating that expression is used. + + + + A default_expression, rather than being + evaluated immediately when xmltable is called, + is evaluated each time a default is needed for the column. + If the expression qualifies as stable or immutable, the repeat + evaluation may be skipped. + This means that you can usefully use volatile functions like + nextval in + default_expression. + + + + Columns may be marked NOT NULL. If the + column_expression for a NOT + NULL column does not match anything and there is + no DEFAULT or + the default_expression also evaluates to null, + an error is reported. + + + + Examples: + + + AU + Australia + + + JP + Japan + Shinzo Abe + 145935 + + + SG + Singapore + 697 + + +$$ AS data; + +SELECT xmltable.* + FROM xmldata, + XMLTABLE('//ROWS/ROW' + PASSING data + COLUMNS id int PATH '@id', + ordinality FOR ORDINALITY, + "COUNTRY_NAME" text, + country_id text PATH 'COUNTRY_ID', + size_sq_km float PATH 'SIZE[@unit = "sq_km"]', + size_other text PATH + 'concat(SIZE[@unit!="sq_km"], " ", SIZE[@unit!="sq_km"]/@unit)', + premier_name text PATH 'PREMIER_NAME' DEFAULT 'not specified'); + + id | ordinality | COUNTRY_NAME | country_id | size_sq_km | size_other | premier_name +----+------------+--------------+------------+------------+--------------+--------------- + 1 | 1 | Australia | AU | | | not specified + 5 | 2 | Japan | JP | | 145935 sq_mi | Shinzo Abe + 6 | 3 | Singapore | SG | 697 | | not specified +]]> + + The following example shows concatenation of multiple text() nodes, + usage of the column name as XPath filter, and the treatment of whitespace, + XML comments and processing instructions: + + + Hello2a2 bbbxxxCC + +$$ AS data; + +SELECT xmltable.* + FROM xmlelements, XMLTABLE('/root' PASSING data COLUMNS element text); + element +------------------------- + Hello2a2 bbbxxxCC +]]> + + + + The following example illustrates how + the XMLNAMESPACES clause can be used to specify + a list of namespaces + used in the XML document as well as in the XPath expressions: + + + + + +'::xml) +) +SELECT xmltable.* + FROM XMLTABLE(XMLNAMESPACES('http://example.com/myns' AS x, + 'http://example.com/b' AS "B"), + '/x:example/x:item' + PASSING (SELECT data FROM xmldata) + COLUMNS foo int PATH '@foo', + bar int PATH '@B:bar'); + foo | bar +-----+----- + 1 | 2 + 3 | 4 + 4 | 5 +(3 rows) +]]> + + + + + + Mapping Tables to XML + + + XML export + + + + The following functions map the contents of relational tables to + XML values. They can be thought of as XML export functionality: + +table_to_xml ( table regclass, nulls boolean, + tableforest boolean, targetns text ) xml +query_to_xml ( query text, nulls boolean, + tableforest boolean, targetns text ) xml +cursor_to_xml ( cursor refcursor, count integer, nulls boolean, + tableforest boolean, targetns text ) xml + + + + + table_to_xml maps the content of the named + table, passed as parameter table. The + regclass type accepts strings identifying tables using the + usual notation, including optional schema qualification and + double quotes (see for details). + query_to_xml executes the + query whose text is passed as parameter + query and maps the result set. + cursor_to_xml fetches the indicated number of + rows from the cursor specified by the parameter + cursor. This variant is recommended if + large tables have to be mapped, because the result value is built + up in memory by each function. + + + + If tableforest is false, then the resulting + XML document looks like this: + + + data + data + + + + ... + + + ... + +]]> + + If tableforest is true, the result is an + XML content fragment that looks like this: + + data + data + + + + ... + + +... +]]> + + If no table name is available, that is, when mapping a query or a + cursor, the string table is used in the first + format, row in the second format. + + + + The choice between these formats is up to the user. The first + format is a proper XML document, which will be important in many + applications. The second format tends to be more useful in the + cursor_to_xml function if the result values are to be + reassembled into one document later on. The functions for + producing XML content discussed above, in particular + xmlelement, can be used to alter the results + to taste. + + + + The data values are mapped in the same way as described for the + function xmlelement above. + + + + The parameter nulls determines whether null + values should be included in the output. If true, null values in + columns are represented as: + +]]> + where xsi is the XML namespace prefix for XML + Schema Instance. An appropriate namespace declaration will be + added to the result value. If false, columns containing null + values are simply omitted from the output. + + + + The parameter targetns specifies the + desired XML namespace of the result. If no particular namespace + is wanted, an empty string should be passed. + + + + The following functions return XML Schema documents describing the + mappings performed by the corresponding functions above: + +table_to_xmlschema ( table regclass, nulls boolean, + tableforest boolean, targetns text ) xml +query_to_xmlschema ( query text, nulls boolean, + tableforest boolean, targetns text ) xml +cursor_to_xmlschema ( cursor refcursor, nulls boolean, + tableforest boolean, targetns text ) xml + + It is essential that the same parameters are passed in order to + obtain matching XML data mappings and XML Schema documents. + + + + The following functions produce XML data mappings and the + corresponding XML Schema in one document (or forest), linked + together. They can be useful where self-contained and + self-describing results are wanted: + +table_to_xml_and_xmlschema ( table regclass, nulls boolean, + tableforest boolean, targetns text ) xml +query_to_xml_and_xmlschema ( query text, nulls boolean, + tableforest boolean, targetns text ) xml + + + + + In addition, the following functions are available to produce + analogous mappings of entire schemas or the entire current + database: + +schema_to_xml ( schema name, nulls boolean, + tableforest boolean, targetns text ) xml +schema_to_xmlschema ( schema name, nulls boolean, + tableforest boolean, targetns text ) xml +schema_to_xml_and_xmlschema ( schema name, nulls boolean, + tableforest boolean, targetns text ) xml + +database_to_xml ( nulls boolean, + tableforest boolean, targetns text ) xml +database_to_xmlschema ( nulls boolean, + tableforest boolean, targetns text ) xml +database_to_xml_and_xmlschema ( nulls boolean, + tableforest boolean, targetns text ) xml + + + These functions ignore tables that are not readable by the current user. + The database-wide functions additionally ignore schemas that the current + user does not have USAGE (lookup) privilege for. + + + + Note that these potentially produce a lot of data, which needs to + be built up in memory. When requesting content mappings of large + schemas or databases, it might be worthwhile to consider mapping the + tables separately instead, possibly even through a cursor. + + + + The result of a schema content mapping looks like this: + + + +table1-mapping + +table2-mapping + +... + +]]> + + where the format of a table mapping depends on the + tableforest parameter as explained above. + + + + The result of a database content mapping looks like this: + + + + + ... + + + + ... + + +... + +]]> + + where the schema mapping is as above. + + + + As an example of using the output produced by these functions, + shows an XSLT stylesheet that + converts the output of + table_to_xml_and_xmlschema to an HTML + document containing a tabular rendition of the table data. In a + similar manner, the results from these functions can be + converted into other XML-based formats. + + + + XSLT Stylesheet for Converting SQL/XML Output to HTML + + + + + + + + + + + + + <xsl:value-of select="name(current())"/> + + + + + + + + + + + + + + + + +
+ + +
+ +
+]]>
+
+
+
diff --git a/doc/src/sgml/func/func.sgml b/doc/src/sgml/func/func.sgml new file mode 100644 index 0000000000000..f351ef53f63d4 --- /dev/null +++ b/doc/src/sgml/func/func.sgml @@ -0,0 +1,84 @@ + + + + Functions and Operators + + + function + + + + operator + + + + PostgreSQL provides a large number of + functions and operators for the built-in data types. This chapter + describes most of them, although additional special-purpose functions + appear in relevant sections of the manual. Users can also + define their own functions and operators, as described in + . The + psql commands \df and + \do can be used to list all + available functions and operators, respectively. + + + + The notation used throughout this chapter to describe the argument and + result data types of a function or operator is like this: + +repeat ( text, integer ) text + + which says that the function repeat takes one text and + one integer argument and returns a result of type text. The right arrow + is also used to indicate the result of an example, thus: + +repeat('Pg', 4) PgPgPgPg + + + + + If you are concerned about portability then note that most of + the functions and operators described in this chapter, with the + exception of the most trivial arithmetic and comparison operators + and some explicitly marked functions, are not specified by the + SQL standard. Some of this extended functionality + is present in other SQL database management + systems, and in many cases this functionality is compatible and + consistent between the various implementations. + + + +&func-logical; +&func-comparison; +&func-math; +&func-string; +&func-binarystring; +&func-bitstring; +&func-matching; +&func-formatting; +&func-datetime; +&func-enum; +&func-geometry; +&func-net; +&func-textsearch; +&func-uuid; +&func-xml; +&func-json; +&func-sequence; +&func-conditional; +&func-array; +&func-range; +&func-aggregate; +&func-window; +&func-merge-support; +&func-subquery; +&func-comparisons; +&func-srf; +&func-info; +&func-admin; +&func-trigger; +&func-event-triggers; +&func-statistics; + + diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml index 46e87e01324dd..82410b1fbdfa1 100644 --- a/doc/src/sgml/gin.sgml +++ b/doc/src/sgml/gin.sgml @@ -394,7 +394,11 @@ Pointer extra_data)
- Compare a partial-match query key to an index key. Returns an integer + Compare a partial-match query key to an index key. + partial_key is a query key that was returned + by extractQuery with an indication that it + requires partial match, and key is an index entry. + Returns an integer whose sign indicates the result: less than zero means the index key does not match the query, but the index scan should continue; zero means that the index key does match the query; greater than zero diff --git a/doc/src/sgml/gist.sgml b/doc/src/sgml/gist.sgml index a373a8aa4b2fc..ee86e17005520 100644 --- a/doc/src/sgml/gist.sgml +++ b/doc/src/sgml/gist.sgml @@ -1170,7 +1170,7 @@ my_sortsupport(PG_FUNCTION_ARGS)
- stratnum + translate_cmptype Given a CompareType value from @@ -1188,12 +1188,23 @@ my_sortsupport(PG_FUNCTION_ARGS) non-WITHOUT OVERLAPS part(s) of an index constraint. + + This support function corresponds to the index access method callback + function amtranslatecmptype (see ). The + amtranslatecmptype callback function for + GiST indexes merely calls down to the + translate_cmptype support function of the + respective operator family, since the GiST index access method has no + fixed strategy numbers itself. + + The SQL declaration of the function must look like this: -CREATE OR REPLACE FUNCTION my_stratnum(integer) +CREATE OR REPLACE FUNCTION my_translate_cmptype(integer) RETURNS smallint AS 'MODULE_PATHNAME' LANGUAGE C STRICT; @@ -1202,7 +1213,7 @@ LANGUAGE C STRICT; And the operator family registration must look like this: ALTER OPERATOR FAMILY my_opfamily USING gist ADD - FUNCTION 12 ("any", "any") my_stratnum(int); + FUNCTION 12 ("any", "any") my_translate_cmptype(int); @@ -1210,10 +1221,10 @@ ALTER OPERATOR FAMILY my_opfamily USING gist ADD The matching code in the C module could then follow this skeleton: -PG_FUNCTION_INFO_V1(my_stratnum); +PG_FUNCTION_INFO_V1(my_translate_cmptype); Datum -my_stratnum(PG_FUNCTION_ARGS) +my_translate_cmptype(PG_FUNCTION_ARGS) { CompareType cmptype = PG_GETARG_INT32(0); StrategyNumber ret = InvalidStrategy; @@ -1232,11 +1243,11 @@ my_stratnum(PG_FUNCTION_ARGS) One translation function is provided by PostgreSQL: - gist_stratnum_common is for operator classes that + gist_translate_cmptype_common is for operator classes that use the RT*StrategyNumber constants. The btree_gist extension defines a second translation function, - gist_stratnum_btree, for operator classes that use + gist_translate_cmptype_btree, for operator classes that use the BT*StrategyNumber constants. diff --git a/doc/src/sgml/glossary.sgml b/doc/src/sgml/glossary.sgml index b88cac598e901..8651f0cdb9198 100644 --- a/doc/src/sgml/glossary.sgml +++ b/doc/src/sgml/glossary.sgml @@ -1419,11 +1419,15 @@ Relation - The generic term for all objects in a - database - that have a name and a list of - attributes - defined in a specific order. + Mathematically, a relation is a set of + tuples; + this is the sense meant in the term "relational database". + + + + In PostgreSQL, "relation" is commonly used to + mean an SQL object + that has a name and a list of attributes defined in a specific order. Tables, sequences, views, @@ -1431,15 +1435,14 @@ materialized views, composite types, and indexes are all relations. + A relation in this sense is a container or a descriptor for a set of tuples. + - More generically, a relation is a set of tuples; for example, - the result of a query is also a relation. - - - In PostgreSQL, - Class is an archaic synonym for - relation. + Class is an alternative but archaic term. + The system catalog + pg_class + holds an entry for each PostgreSQL relation. diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index acf3ac0601d23..b47d8b4106efb 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -1535,7 +1535,8 @@ synchronous_standby_names = 'ANY 2 (s1, s2, s3)' When the parameter is set to true on a standby server, it will begin accepting connections once the recovery has - brought the system to a consistent state. All such connections are + brought the system to a consistent state and be ready for hot standby. + All such connections are strictly read-only; not even temporary tables may be written. @@ -1974,9 +1975,12 @@ LOG: database system is ready to accept read-only connections Consistency information is recorded once per checkpoint on the primary. It is not possible to enable hot standby when reading WAL written during a period when wal_level was not set to - replica or logical on the primary. Reaching - a consistent state can also be delayed in the presence of both of these - conditions: + replica or logical on the primary. + Even after reaching a consistent state, the recovery snapshot may not + be ready for hot standby if both of the following conditions are met, + delaying accepting read-only connections. To enable hot standby, + long-lived write transactions with more than 64 subtransactions + need to be closed on the primary. diff --git a/doc/src/sgml/history.sgml b/doc/src/sgml/history.sgml index 856c9b01ded85..8bfa1db670d7a 100644 --- a/doc/src/sgml/history.sgml +++ b/doc/src/sgml/history.sgml @@ -203,11 +203,10 @@ - Many people continue to refer to - PostgreSQL as Postgres - (now rarely in all capital letters) because of tradition or because - it is easier to pronounce. This usage is widely accepted as a - nickname or alias. + Postgres is still considered an official + project name, both because of tradition and because people find it + easier to pronounce Postgres than + PostgreSQL. diff --git a/doc/src/sgml/indexam.sgml b/doc/src/sgml/indexam.sgml index 768b77aa0d2ba..63d7e376f195e 100644 --- a/doc/src/sgml/indexam.sgml +++ b/doc/src/sgml/indexam.sgml @@ -147,7 +147,7 @@ typedef struct IndexAmRoutine ambuild_function ambuild; ambuildempty_function ambuildempty; aminsert_function aminsert; - aminsertcleanup_function aminsertcleanup; + aminsertcleanup_function aminsertcleanup; /* can be NULL */ ambulkdelete_function ambulkdelete; amvacuumcleanup_function amvacuumcleanup; amcanreturn_function amcanreturn; /* can be NULL */ @@ -835,7 +835,8 @@ amrestrpos (IndexScanDesc scan); Size -amestimateparallelscan (int nkeys, +amestimateparallelscan (Relation indexRelation, + int nkeys, int norderbys); Estimate and return the number of bytes of dynamic shared memory which @@ -894,7 +895,7 @@ amtranslatestrategy (StrategyNumber strategy, Oid opfamily, Oid opcintype); StrategyNumber amtranslatecmptype (CompareType cmptype, Oid opfamily, Oid opcintype); - These functions, if implemented, will be called by the planer and executor + These functions, if implemented, will be called by the planner and executor to convert between fixed CompareType values and the specific strategy numbers used by the access method. These functions can be implemented by access methods that implement functionality similar to the diff --git a/doc/src/sgml/indices.sgml b/doc/src/sgml/indices.sgml index 6d731e0701fdd..9c4f76abf0dcd 100644 --- a/doc/src/sgml/indices.sgml +++ b/doc/src/sgml/indices.sgml @@ -460,20 +460,56 @@ CREATE INDEX test2_mm_idx ON test2 (major, minor); efficient when there are constraints on the leading (leftmost) columns. The exact rule is that equality constraints on leading columns, plus any inequality constraints on the first column that does not have an - equality constraint, will be used to limit the portion of the index + equality constraint, will always be used to limit the portion of the index that is scanned. Constraints on columns to the right of these columns - are checked in the index, so they save visits to the table proper, but - they do not reduce the portion of the index that has to be scanned. + are checked in the index, so they'll always save visits to the table + proper, but they do not necessarily reduce the portion of the index that + has to be scanned. If a B-tree index scan can apply the skip scan + optimization effectively, it will apply every column constraint when + navigating through the index via repeated index searches. This can reduce + the portion of the index that has to be read, even though one or more + columns (prior to the least significant index column from the query + predicate) lacks a conventional equality constraint. Skip scan works by + generating a dynamic equality constraint internally, that matches every + possible value in an index column (though only given a column that lacks + an equality constraint that comes from the query predicate, and only when + the generated constraint can be used in conjunction with a later column + constraint from the query predicate). + + + + For example, given an index on (x, y), and a query + condition WHERE y = 7700, a B-tree index scan might be + able to apply the skip scan optimization. This generally happens when the + query planner expects that repeated WHERE x = N AND y = 7700 + searches for every possible value of N (or for every + x value that is actually stored in the index) is the + fastest possible approach, given the available indexes on the table. This + approach is generally only taken when there are so few distinct + x values that the planner expects the scan to skip over + most of the index (because most of its leaf pages cannot possibly contain + relevant tuples). If there are many distinct x values, + then the entire index will have to be scanned, so in most cases the planner + will prefer a sequential table scan over using the index. + + + + The skip scan optimization can also be applied selectively, during B-tree + scans that have at least some useful constraints from the query predicate. For example, given an index on (a, b, c) and a query condition WHERE a = 5 AND b >= 42 AND c < 77, - the index would have to be scanned from the first entry with - a = 5 and b = 42 up through the last entry with - a = 5. Index entries with c >= 77 would be - skipped, but they'd still have to be scanned through. - This index could in principle be used for queries that have constraints - on b and/or c with no constraint on a - — but the entire index would have to be scanned, so in most cases - the planner would prefer a sequential table scan over using the index. + the index might have to be scanned from the first entry with + a = 5 and b = 42 up through the last + entry with a = 5. Index entries with + c >= 77 will never need to be filtered at the table + level, but it may or may not be profitable to skip over them within the + index. When skipping takes place, the scan starts a new index search to + reposition itself from the end of the current a = 5 and + b = N grouping (i.e. from the position in the index + where the first tuple a = 5 AND b = N AND c >= 77 + appears), to the start of the next such grouping (i.e. the position in the + index where the first tuple a = 5 AND b = N + 1 + appears). @@ -669,9 +705,13 @@ CREATE INDEX test3_desc_index ON test3 (id DESC NULLS LAST); multicolumn index on (x, y). This index would typically be more efficient than index combination for queries involving both columns, but as discussed in , it - would be almost useless for queries involving only y, so it - should not be the only index. A combination of the multicolumn index - and a separate index on y would serve reasonably well. For + would be less useful for queries involving only y. Just + how useful will depend on how effective the B-tree index skip scan + optimization is; if x has no more than several hundred + distinct values, skip scan will make searches for specific + y values execute reasonably efficiently. A combination + of a multicolumn index on (x, y) and a separate index on + y might also serve reasonably well. For queries involving only x, the multicolumn index could be used, though it would be larger and hence slower than an index on x alone. The last alternative is to create all three diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index cc28f04133071..a4ad80a678211 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -65,16 +65,15 @@ - The minimum required version of Meson is 0.54. + The minimum required version of Meson is 0.57.2. - You need an ISO/ANSI C compiler (at least - C99-compliant). Recent - versions of GCC are recommended, but - PostgreSQL is known to build using a wide variety + You need a C compiler that supports at least C11. Recent versions of + GCC are recommended, but + PostgreSQL is known to build using a variety of compilers from different vendors. @@ -241,7 +240,7 @@ language, you need a Python installation with the header files and the sysconfig module. The minimum - required version is Python 3.2. + supported version is Python 3.6.8. @@ -313,6 +312,14 @@ + + + You need Curl to build an optional module + which implements the OAuth Device + Authorization flow for client applications. + + + You need LZ4, if you want to support @@ -1156,6 +1163,17 @@ build-postgresql: + + + + + Build with libnuma support for basic NUMA support. + Only supported on platforms for which the libnuma + library is implemented. + + + + @@ -2645,6 +2663,17 @@ ninja install + + + + + Build with libnuma support for basic NUMA support. + Only supported on platforms for which the libnuma + library is implemented. The default for this option is auto. + + + + @@ -2739,7 +2768,7 @@ ninja install - + Setting this option allows you to override the value of all @@ -3817,17 +3846,13 @@ make: *** [postgres] Error 1 Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite. 32-bit PostgreSQL builds are possible with - Visual Studio 2015 to + Visual Studio 2019 to Visual Studio 2022, as well as standalone Windows SDK releases 10 and above. 64-bit PostgreSQL builds are supported with Microsoft Windows SDK version 10 and above or - Visual Studio 2015 and above. + Visual Studio 2019 and above. - + <application>libpq</application> — C Library @@ -378,7 +378,7 @@ PostgresPollingStatusType PQconnectPoll(PGconn *conn); At any time during connection, the status of the connection can be checked by calling . If this call returns CONNECTION_BAD, then the - connection procedure has failed; if the call returns CONNECTION_OK, then the + connection procedure has failed; if the call returns CONNECTION_OK, then the connection is ready. Both of these states are equally detectable from the return value of PQconnectPoll, described above. Other states might also occur during (and only during) an asynchronous connection procedure. These @@ -1918,6 +1918,30 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname + + sslkeylogfile + + + This parameter specifies the location where libpq + will log keys used in this SSL context. This is useful for debugging + PostgreSQL protocol interactions or client + connections using network inspection tools like + Wireshark. This parameter is ignored if an + SSL connection is not made, or if LibreSSL + is used (LibreSSL does not support key + logging). Keys are logged using the NSS + format. + + + Key logging will expose potentially sensitive information in the + keylog file. Keylog files should be handled with the same care as + files. + + + + + + sslpassword @@ -1932,7 +1956,7 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname Enter PEM pass phrase: prompt that OpenSSL will emit by default when an encrypted client certificate key is provided to - libpq. + libpq. If the key is not encrypted this parameter is ignored. The parameter @@ -2018,7 +2042,7 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname The special value system may be specified instead, in - which case the system's trusted CA roots will be loaded. The exact + which case the trusted CA roots from the SSL implementation will be loaded. The exact locations of these root certificates differ by SSL implementation and platform. For OpenSSL in particular, the locations may be further modified by the SSL_CERT_DIR @@ -2162,6 +2186,54 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname + + min_protocol_version + + + Specifies the minimum protocol version to allow for the connection. + The default is to allow any version of the + PostgreSQL protocol supported by libpq, + which currently means 3.0. If the server + does not support at least this protocol version the connection will be + closed. + + + + The current supported values are + 3.0, 3.2, + and latest. The latest value is + equivalent to the latest protocol version supported by the libpq + version being used, which is currently 3.2. + + + + + + max_protocol_version + + + Specifies the protocol version to request from the server. + The default is to use version 3.0 of the + PostgreSQL protocol, unless the connection + string specifies a feature that relies on a higher protocol version, + in which case the latest version supported by libpq is used. If the + server does not support the protocol version requested by the client, + the connection is automatically downgraded to a lower minor protocol + version that the server supports. After the connection attempt has + completed you can use to + find out which exact protocol version was negotiated. + + + + The current supported values are + 3.0, 3.2, + and latest. The latest value is + equivalent to the latest protocol version supported by the libpq + version being used, which is currently 3.2. + + + + krbsrvname @@ -2248,6 +2320,19 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname + + servicefile + + + This option specifies the name of the per-user connection service file + (see ). + Defaults to ~/.pg_service.conf, or + %APPDATA%\postgresql\.pg_service.conf on + Microsoft Windows. + + + + target_session_attrs @@ -2668,26 +2753,6 @@ char *PQport(const PGconn *conn); - - PQservicePQservice - - - - Returns the service of the active connection. - - -char *PQservice(const PGconn *conn); - - - - - returns NULL if the - conn argument is NULL. - Otherwise, if there was no service provided, it returns an empty string. - - - - PQttyPQtty @@ -2739,14 +2804,14 @@ ConnStatusType PQstatus(const PGconn *conn); The status can be one of a number of values. However, only two of these are seen outside of an asynchronous connection procedure: - CONNECTION_OK and - CONNECTION_BAD. A good connection to the database - has the status CONNECTION_OK. A failed + CONNECTION_OK and + CONNECTION_BAD. A good connection to the database + has the status CONNECTION_OK. A failed connection attempt is signaled by status - CONNECTION_BAD. Ordinarily, an OK status will + CONNECTION_BAD. Ordinarily, an OK status will remain so until , but a communications failure might result in the status changing to - CONNECTION_BAD prematurely. In that case the + CONNECTION_BAD prematurely. In that case the application could try to recover by calling . @@ -5262,7 +5327,7 @@ unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length); , , , - + , , and respectively. @@ -6556,7 +6621,7 @@ PostgresPollingStatusType PQcancelPoll(PGcancelConn *cancelConn); checked by calling . If this call returns CONNECTION_BAD, then the cancel procedure has failed; if the call returns - CONNECTION_OK, then cancel request was + CONNECTION_OK, then cancel request was successfully dispatched. Both of these states are equally detectable from the return value of PQcancelPoll, described above. @@ -6678,15 +6743,15 @@ ConnStatusType PQcancelStatus(const PGcancelConn *cancelConn); The status can be one of a number of values. However, only three of these are seen outside of an asynchronous cancel procedure: - CONNECTION_ALLOCATED, - CONNECTION_OK and - CONNECTION_BAD. The initial state of a + CONNECTION_ALLOCATED, + CONNECTION_OK and + CONNECTION_BAD. The initial state of a PGcancelConn that's successfully created using - is CONNECTION_ALLOCATED. + is CONNECTION_ALLOCATED. A cancel request that was successfully dispatched - has the status CONNECTION_OK. A failed + has the status CONNECTION_OK. A failed cancel attempt is signaled by status - CONNECTION_BAD. An OK status will + CONNECTION_BAD. An OK status will remain so until or is called. @@ -8211,7 +8276,7 @@ size_t PQresultMemorySize(const PGresult *res); - Return the version of libpq that is being used. + Return the version of libpq that is being used. int PQlibVersion(void); @@ -8462,7 +8527,7 @@ typedef struct evtInfo pointer should be cast to a PGEventRegister *. This structure contains a PGconn that should be in the - CONNECTION_OK status; guaranteed if one calls + CONNECTION_OK status; guaranteed if one calls right after obtaining a good PGconn. When returning a failure code, all cleanup must be performed as no PGEVT_CONNDESTROY @@ -9088,12 +9153,8 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) PGSERVICEFILE - PGSERVICEFILE specifies the name of the per-user - connection service file - (see ). - Defaults to ~/.pg_service.conf, or - %APPDATA%\postgresql\.pg_service.conf on - Microsoft Windows. + PGSERVICEFILE behaves the same as the + connection parameter. @@ -9329,6 +9390,26 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) linkend="libpq-connect-load-balance-hosts"/> connection parameter. + + + + + PGMINPROTOCOLVERSION + + PGMINPROTOCOLVERSION behaves the same as the connection parameter. + + + + + + + PGMAXPROTOCOLVERSION + + PGMAXPROTOCOLVERSION behaves the same as the connection parameter. + + @@ -9504,7 +9585,8 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) On Microsoft Windows, it is named %APPDATA%\postgresql\.pg_service.conf (where %APPDATA% refers to the Application Data subdirectory - in the user's profile). A different file name can be specified by + in the user's profile). A different file name can be specified using the + servicefile key word in a libpq connection string or by setting the environment variable PGSERVICEFILE. The system-wide file is named pg_service.conf. By default it is sought in the etc directory @@ -10134,15 +10216,20 @@ void PQinitSSL(int do_ssl); OAuth Support - libpq implements support for the OAuth v2 Device Authorization client flow, + libpq implements support for the OAuth v2 Device Authorization client flow, documented in RFC 8628, - which it will attempt to use by default if the server + as an optional module. See the + installation documentation for information on how to enable support + for Device Authorization as a builtin flow. + + + When support is enabled and the optional module installed, libpq + will use the builtin flow by default if the server requests a bearer token during authentication. This flow can be utilized even if the system running the client application does not have a usable web browser, for example when - running a client via SSH. Client applications may implement their own flows - instead; see . + running a client via SSH. The builtin flow will, by default, print a URL to visit and a user code to @@ -10159,6 +10246,11 @@ Visit https://example.com/device and enter the code: ABCD-EFGH they match expectations, before continuing. Permissions should not be given to untrusted third parties. + + Client applications may implement their own flows to customize interaction + and integration with applications. See + for more information on how add a custom flow to libpq. + For an OAuth client flow to be usable, the connection string must at minimum contain and @@ -10274,7 +10366,9 @@ typedef struct _PGpromptOAuthDevice - The OAuth Device Authorization flow included in libpq + The OAuth Device Authorization flow which + can be included + in libpq requires the end user to visit a URL with a browser, then enter a code which permits libpq to connect to the server on their behalf. The default prompt simply prints the @@ -10286,7 +10380,8 @@ typedef struct _PGpromptOAuthDevice This callback is only invoked during the builtin device authorization flow. If the application installs a custom OAuth - flow, this authdata type will not be used. + flow, or libpq was not built with + support for the builtin flow, this authdata type will not be used. If a non-NULL verification_uri_complete is @@ -10308,8 +10403,9 @@ typedef struct _PGpromptOAuthDevice - Replaces the entire OAuth flow with a custom implementation. The hook - should either directly return a Bearer token for the current + Adds a custom implementation of a flow, replacing the builtin flow if + it is installed. + The hook should either directly return a Bearer token for the current user/issuer/scope combination, if one is available without blocking, or else set up an asynchronous callback to retrieve one. diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml index f288c049a5c9a..9ccd5ec500601 100644 --- a/doc/src/sgml/logical-replication.sgml +++ b/doc/src/sgml/logical-replication.sgml @@ -363,34 +363,25 @@ Create some test tables on the publisher. -test_pub=# CREATE TABLE t1(a int, b text, PRIMARY KEY(a)); -CREATE TABLE -test_pub=# CREATE TABLE t2(c int, d text, PRIMARY KEY(c)); -CREATE TABLE -test_pub=# CREATE TABLE t3(e int, f text, PRIMARY KEY(e)); -CREATE TABLE +/* pub # */ CREATE TABLE t1(a int, b text, PRIMARY KEY(a)); +/* pub # */ CREATE TABLE t2(c int, d text, PRIMARY KEY(c)); +/* pub # */ CREATE TABLE t3(e int, f text, PRIMARY KEY(e)); Create the same tables on the subscriber. -test_sub=# CREATE TABLE t1(a int, b text, PRIMARY KEY(a)); -CREATE TABLE -test_sub=# CREATE TABLE t2(c int, d text, PRIMARY KEY(c)); -CREATE TABLE -test_sub=# CREATE TABLE t3(e int, f text, PRIMARY KEY(e)); -CREATE TABLE +/* sub # */ CREATE TABLE t1(a int, b text, PRIMARY KEY(a)); +/* sub # */ CREATE TABLE t2(c int, d text, PRIMARY KEY(c)); +/* sub # */ CREATE TABLE t3(e int, f text, PRIMARY KEY(e)); Insert data to the tables at the publisher side. -test_pub=# INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three'); -INSERT 0 3 -test_pub=# INSERT INTO t2 VALUES (1, 'A'), (2, 'B'), (3, 'C'); -INSERT 0 3 -test_pub=# INSERT INTO t3 VALUES (1, 'i'), (2, 'ii'), (3, 'iii'); -INSERT 0 3 +/* pub # */ INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three'); +/* pub # */ INSERT INTO t2 VALUES (1, 'A'), (2, 'B'), (3, 'C'); +/* pub # */ INSERT INTO t3 VALUES (1, 'i'), (2, 'ii'), (3, 'iii'); @@ -399,41 +390,34 @@ INSERT 0 3 publish operations. The publication pub3b has a row filter (see ). - -test_pub=# CREATE PUBLICATION pub1 FOR TABLE t1; -CREATE PUBLICATION -test_pub=# CREATE PUBLICATION pub2 FOR TABLE t2 WITH (publish = 'truncate'); -CREATE PUBLICATION -test_pub=# CREATE PUBLICATION pub3a FOR TABLE t3 WITH (publish = 'truncate'); -CREATE PUBLICATION -test_pub=# CREATE PUBLICATION pub3b FOR TABLE t3 WHERE (e > 5); -CREATE PUBLICATION - + 5); +]]> Create subscriptions for the publications. The subscription sub3 subscribes to both pub3a and pub3b. All subscriptions will copy initial data by default. -test_sub=# CREATE SUBSCRIPTION sub1 -test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=sub1' -test_sub-# PUBLICATION pub1; -CREATE SUBSCRIPTION -test_sub=# CREATE SUBSCRIPTION sub2 -test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=sub2' -test_sub-# PUBLICATION pub2; -CREATE SUBSCRIPTION -test_sub=# CREATE SUBSCRIPTION sub3 -test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=sub3' -test_sub-# PUBLICATION pub3a, pub3b; -CREATE SUBSCRIPTION +/* sub # */ CREATE SUBSCRIPTION sub1 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=sub1' +/* sub - */ PUBLICATION pub1; +/* sub # */ CREATE SUBSCRIPTION sub2 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=sub2' +/* sub - */ PUBLICATION pub2; +/* sub # */ CREATE SUBSCRIPTION sub3 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=sub3' +/* sub - */ PUBLICATION pub3a, pub3b; Observe that initial table data is copied, regardless of the publish operation of the publication. -test_sub=# SELECT * FROM t1; +/* sub # */ SELECT * FROM t1; a | b ---+------- 1 | one @@ -441,7 +425,7 @@ test_sub=# SELECT * FROM t1; 3 | three (3 rows) -test_sub=# SELECT * FROM t2; +/* sub # */ SELECT * FROM t2; c | d ---+--- 1 | A @@ -456,7 +440,7 @@ test_sub=# SELECT * FROM t2; it means the copied table t3 contains all rows even when they do not match the row filter of publication pub3b. -test_sub=# SELECT * FROM t3; +/* sub # */ SELECT * FROM t3; e | f ---+----- 1 | i @@ -468,18 +452,15 @@ test_sub=# SELECT * FROM t3; Insert more data to the tables at the publisher side. -test_pub=# INSERT INTO t1 VALUES (4, 'four'), (5, 'five'), (6, 'six'); -INSERT 0 3 -test_pub=# INSERT INTO t2 VALUES (4, 'D'), (5, 'E'), (6, 'F'); -INSERT 0 3 -test_pub=# INSERT INTO t3 VALUES (4, 'iv'), (5, 'v'), (6, 'vi'); -INSERT 0 3 +/* pub # */ INSERT INTO t1 VALUES (4, 'four'), (5, 'five'), (6, 'six'); +/* pub # */ INSERT INTO t2 VALUES (4, 'D'), (5, 'E'), (6, 'F'); +/* pub # */ INSERT INTO t3 VALUES (4, 'iv'), (5, 'v'), (6, 'vi'); Now the publisher side data looks like: -test_pub=# SELECT * FROM t1; +/* pub # */ SELECT * FROM t1; a | b ---+------- 1 | one @@ -490,7 +471,7 @@ test_pub=# SELECT * FROM t1; 6 | six (6 rows) -test_pub=# SELECT * FROM t2; +/* pub # */ SELECT * FROM t2; c | d ---+--- 1 | A @@ -501,7 +482,7 @@ test_pub=# SELECT * FROM t2; 6 | F (6 rows) -test_pub=# SELECT * FROM t3; +/* pub # */ SELECT * FROM t3; e | f ---+----- 1 | i @@ -521,7 +502,7 @@ test_pub=# SELECT * FROM t3; only replicate data that matches the row filter of pub3b. Now the subscriber side data looks like: -test_sub=# SELECT * FROM t1; +/* sub # */ SELECT * FROM t1; a | b ---+------- 1 | one @@ -532,7 +513,7 @@ test_sub=# SELECT * FROM t1; 6 | six (6 rows) -test_sub=# SELECT * FROM t2; +/* sub # */ SELECT * FROM t2; c | d ---+--- 1 | A @@ -540,7 +521,7 @@ test_sub=# SELECT * FROM t2; 3 | C (3 rows) -test_sub=# SELECT * FROM t3; +/* sub # */ SELECT * FROM t3; e | f ---+----- 1 | i @@ -561,14 +542,13 @@ test_sub=# SELECT * FROM t3; it manually before the subscription can be activated. The steps to create the slot and activate the subscription are shown in the following examples. These examples specify the standard logical decoding output plugin - (pgoutput), which is what the built-in logical - replication uses. + (), + which is what the built-in logical replication uses. First, create a publication for the examples to use. -test_pub=# CREATE PUBLICATION pub1 FOR ALL TABLES; -CREATE PUBLICATION +/* pub # */ CREATE PUBLICATION pub1 FOR ALL TABLES; Example 1: Where the subscription says connect = false @@ -579,13 +559,12 @@ CREATE PUBLICATION Create the subscription. -test_sub=# CREATE SUBSCRIPTION sub1 -test_sub-# CONNECTION 'host=localhost dbname=test_pub' -test_sub-# PUBLICATION pub1 -test_sub-# WITH (connect=false); +/* sub # */ CREATE SUBSCRIPTION sub1 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub' +/* sub - */ PUBLICATION pub1 +/* sub - */ WITH (connect=false); WARNING: subscription was created, but is not connected HINT: To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription. -CREATE SUBSCRIPTION @@ -594,10 +573,10 @@ CREATE SUBSCRIPTION specified during CREATE SUBSCRIPTION, the name of the slot to create is same as the subscription name, e.g. "sub1". -test_pub=# SELECT * FROM pg_create_logical_replication_slot('sub1', 'pgoutput'); +/* pub # */ SELECT * FROM pg_create_logical_replication_slot('sub1', 'pgoutput'); slot_name | lsn ------------+----------- - sub1 | 0/19404D0 +-----------+------------ + sub1 | 0/019404D0 (1 row) @@ -606,10 +585,8 @@ test_pub=# SELECT * FROM pg_create_logical_replication_slot('sub1', 'pgoutput'); On the subscriber, complete the activation of the subscription. After this the tables of pub1 will start replicating. -test_sub=# ALTER SUBSCRIPTION sub1 ENABLE; -ALTER SUBSCRIPTION -test_sub=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* sub # */ ALTER SUBSCRIPTION sub1 ENABLE; +/* sub # */ ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION; @@ -625,13 +602,12 @@ ALTER SUBSCRIPTION Create the subscription. -test_sub=# CREATE SUBSCRIPTION sub1 -test_sub-# CONNECTION 'host=localhost dbname=test_pub' -test_sub-# PUBLICATION pub1 -test_sub-# WITH (connect=false, slot_name='myslot'); +/* sub # */ CREATE SUBSCRIPTION sub1 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub' +/* sub - */ PUBLICATION pub1 +/* sub - */ WITH (connect=false, slot_name='myslot'); WARNING: subscription was created, but is not connected HINT: To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription. -CREATE SUBSCRIPTION @@ -639,10 +615,10 @@ CREATE SUBSCRIPTION On the publisher, manually create a slot using the same name that was specified during CREATE SUBSCRIPTION, e.g. "myslot". -test_pub=# SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput'); +/* pub # */ SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput'); slot_name | lsn ------------+----------- - myslot | 0/19059A0 +-----------+------------ + myslot | 0/019059A0 (1 row) @@ -651,10 +627,8 @@ test_pub=# SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput' On the subscriber, the remaining subscription activation steps are the same as before. -test_sub=# ALTER SUBSCRIPTION sub1 ENABLE; -ALTER SUBSCRIPTION -test_sub=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* sub # */ ALTER SUBSCRIPTION sub1 ENABLE; +/* sub # */ ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION; @@ -669,21 +643,20 @@ ALTER SUBSCRIPTION enabled = false, and create_slot = false are also needed. -test_sub=# CREATE SUBSCRIPTION sub1 -test_sub-# CONNECTION 'host=localhost dbname=test_pub' -test_sub-# PUBLICATION pub1 -test_sub-# WITH (slot_name=NONE, enabled=false, create_slot=false); -CREATE SUBSCRIPTION +/* sub # */ CREATE SUBSCRIPTION sub1 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub' +/* sub - */ PUBLICATION pub1 +/* sub - */ WITH (slot_name=NONE, enabled=false, create_slot=false); On the publisher, manually create a slot using any name, e.g. "myslot". -test_pub=# SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput'); +/* pub # */ SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput'); slot_name | lsn ------------+----------- - myslot | 0/1905930 +-----------+------------ + myslot | 0/01905930 (1 row) @@ -692,18 +665,15 @@ test_pub=# SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput' On the subscriber, associate the subscription with the slot name just created. -test_sub=# ALTER SUBSCRIPTION sub1 SET (slot_name='myslot'); -ALTER SUBSCRIPTION +/* sub # */ ALTER SUBSCRIPTION sub1 SET (slot_name='myslot'); The remaining subscription activation steps are same as before. -test_sub=# ALTER SUBSCRIPTION sub1 ENABLE; -ALTER SUBSCRIPTION -test_sub=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* sub # */ ALTER SUBSCRIPTION sub1 ENABLE; +/* sub # */ ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION; @@ -739,8 +709,8 @@ ALTER SUBSCRIPTION - To confirm that the standby server is indeed ready for failover, follow these - steps to verify that all necessary logical replication slots have been + To confirm that the standby server is indeed ready for failover for a given subscriber, follow these + steps to verify that all the logical replication slots required by that subscriber have been synchronized to the standby server: @@ -752,7 +722,7 @@ ALTER SUBSCRIPTION will return the relevant replication slots associated with the failover-enabled subscriptions. -test_sub=# SELECT +/* sub # */ SELECT array_agg(quote_literal(s.subslotname)) AS slots FROM pg_subscription s WHERE s.subfailover AND @@ -775,7 +745,7 @@ test_sub=# SELECT as they will either be dropped or re-created on the new primary server in those cases. -test_sub=# SELECT +/* sub # */ SELECT array_agg(quote_literal(slot_name)) AS slots FROM ( @@ -794,7 +764,7 @@ test_sub=# SELECT Check that the logical replication slots identified above exist on the standby server and are ready for failover. -test_standby=# SELECT slot_name, (synced AND NOT temporary AND NOT conflicting) AS failover_ready +/* standby # */ SELECT slot_name, (synced AND NOT temporary AND invalidation_reason IS NULL) AS failover_ready FROM pg_replication_slots WHERE slot_name IN ('sub1','sub2','sub3', 'pg_16394_sync_16385_7394666715149055164'); @@ -812,10 +782,42 @@ test_standby=# SELECT slot_name, (synced AND NOT temporary AND NOT conflicting) If all the slots are present on the standby server and the result (failover_ready) of the above SQL query is true, then - existing subscriptions can continue subscribing to publications now on the - new primary server. + existing subscriptions can continue subscribing to publications on the new + primary server. + + + + The first two steps in the above procedure are meant for a + PostgreSQL subscriber. It is recommended to run + these steps on each subscriber node, that will be served by the designated + standby after failover, to obtain the complete list of replication + slots. This list can then be verified in Step 3 to ensure failover readiness. + Non-PostgreSQL subscribers, on the other hand, may + use their own methods to identify the replication slots used by their + respective subscriptions. + + In some cases, such as during a planned failover, it is necessary to confirm + that all subscribers, whether PostgreSQL or + non-PostgreSQL, will be able to continue + replication after failover to a given standby server. In such cases, use the + following SQL, instead of performing the first two steps above, to identify + which replication slots on the primary need to be synced to the standby that + is intended for promotion. This query returns the relevant replication slots + associated with all the failover-enabled subscriptions. + + + + +/* primary # */ SELECT array_agg(quote_literal(r.slot_name)) AS slots + FROM pg_replication_slots r + WHERE r.failover AND NOT r.temporary; + slots +------- + {'sub1','sub2','sub3', 'pg_16394_sync_16385_7394666715149055164'} +(1 row) + @@ -1024,12 +1026,9 @@ test_standby=# SELECT slot_name, (synced AND NOT temporary AND NOT conflicting) Create some tables to be used in the following examples. -test_pub=# CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); -CREATE TABLE -test_pub=# CREATE TABLE t2(d int, e int, f int, PRIMARY KEY(d)); -CREATE TABLE -test_pub=# CREATE TABLE t3(g int, h int, i int, PRIMARY KEY(g)); -CREATE TABLE +/* pub # */ CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); +/* pub # */ CREATE TABLE t2(d int, e int, f int, PRIMARY KEY(d)); +/* pub # */ CREATE TABLE t3(g int, h int, i int, PRIMARY KEY(g)); @@ -1038,43 +1037,40 @@ CREATE TABLE p2 has two tables. Table t1 has no row filter, and table t2 has a row filter. Publication p3 has two tables, and both of them have a row filter. - -test_pub=# CREATE PUBLICATION p1 FOR TABLE t1 WHERE (a > 5 AND c = 'NSW'); -CREATE PUBLICATION -test_pub=# CREATE PUBLICATION p2 FOR TABLE t1, t2 WHERE (e = 99); -CREATE PUBLICATION -test_pub=# CREATE PUBLICATION p3 FOR TABLE t2 WHERE (d = 10), t3 WHERE (g = 10); -CREATE PUBLICATION - + 5 AND c = 'NSW'); +/* pub # */ CREATE PUBLICATION p2 FOR TABLE t1, t2 WHERE (e = 99); +/* pub # */ CREATE PUBLICATION p3 FOR TABLE t2 WHERE (d = 10), t3 WHERE (g = 10); +]]> psql can be used to show the row filter expressions (if defined) for each publication. - -test_pub=# \dRp+ - Publication p1 - Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root -----------+------------+---------+---------+---------+-----------+---------- - postgres | f | t | t | t | t | f + 5) AND (c = 'NSW'::text)) - Publication p2 - Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root -----------+------------+---------+---------+---------+-----------+---------- - postgres | f | t | t | t | t | f + Publication p2 + Owner | All tables | Inserts | Updates | Deletes | Truncates | Generated columns | Via root +----------+------------+---------+---------+---------+-----------+-------------------+---------- + postgres | f | t | t | t | t | none | f Tables: "public.t1" "public.t2" WHERE (e = 99) - Publication p3 - Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root -----------+------------+---------+---------+---------+-----------+---------- - postgres | f | t | t | t | t | f + Publication p3 + Owner | All tables | Inserts | Updates | Deletes | Truncates | Generated columns | Via root +----------+------------+---------+---------+---------+-----------+-------------------+---------- + postgres | f | t | t | t | t | none | f Tables: "public.t2" WHERE (d = 10) "public.t3" WHERE (g = 10) - +]]> psql can be used to show the row filter expressions (if @@ -1082,8 +1078,8 @@ Tables: of two publications, but has a row filter only in p1. See that table t2 is a member of two publications, and has a different row filter in each of them. - -test_pub=# \d t1 + 5) AND (c = 'NSW'::text)) "p2" -test_pub=# \d t2 +/* pub # */ \d t2 Table "public.t2" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- @@ -1109,7 +1105,7 @@ Publications: "p2" WHERE (e = 99) "p3" WHERE (d = 10) -test_pub=# \d t3 +/* pub # */ \d t3 Table "public.t3" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- @@ -1120,43 +1116,33 @@ Indexes: "t3_pkey" PRIMARY KEY, btree (g) Publications: "p3" WHERE (g = 10) - +]]> On the subscriber node, create a table t1 with the same definition as the one on the publisher, and also create the subscription s1 that subscribes to the publication p1. -test_sub=# CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); -CREATE TABLE -test_sub=# CREATE SUBSCRIPTION s1 -test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=s1' -test_sub-# PUBLICATION p1; -CREATE SUBSCRIPTION +/* sub # */ CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); +/* sub # */ CREATE SUBSCRIPTION s1 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s1' +/* sub - */ PUBLICATION p1; Insert some rows. Only the rows satisfying the t1 WHERE clause of publication p1 are replicated. -test_pub=# INSERT INTO t1 VALUES (2, 102, 'NSW'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (3, 103, 'QLD'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (4, 104, 'VIC'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (5, 105, 'ACT'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (6, 106, 'NSW'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (7, 107, 'NT'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (8, 108, 'QLD'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES (9, 109, 'NSW'); -INSERT 0 1 - -test_pub=# SELECT * FROM t1; +/* pub # */ INSERT INTO t1 VALUES (2, 102, 'NSW'); +/* pub # */ INSERT INTO t1 VALUES (3, 103, 'QLD'); +/* pub # */ INSERT INTO t1 VALUES (4, 104, 'VIC'); +/* pub # */ INSERT INTO t1 VALUES (5, 105, 'ACT'); +/* pub # */ INSERT INTO t1 VALUES (6, 106, 'NSW'); +/* pub # */ INSERT INTO t1 VALUES (7, 107, 'NT'); +/* pub # */ INSERT INTO t1 VALUES (8, 108, 'QLD'); +/* pub # */ INSERT INTO t1 VALUES (9, 109, 'NSW'); + +/* pub # */ SELECT * FROM t1; a | b | c ---+-----+----- 2 | 102 | NSW @@ -1170,7 +1156,7 @@ test_pub=# SELECT * FROM t1; (8 rows) -test_sub=# SELECT * FROM t1; +/* sub # */ SELECT * FROM t1; a | b | c ---+-----+----- 6 | 106 | NSW @@ -1184,10 +1170,9 @@ test_sub=# SELECT * FROM t1; p1. The UPDATE replicates the change as normal. -test_pub=# UPDATE t1 SET b = 999 WHERE a = 6; -UPDATE 1 +/* pub # */ UPDATE t1 SET b = 999 WHERE a = 6; -test_pub=# SELECT * FROM t1; +/* pub # */ SELECT * FROM t1; a | b | c ---+-----+----- 2 | 102 | NSW @@ -1201,7 +1186,7 @@ test_pub=# SELECT * FROM t1; (8 rows) -test_sub=# SELECT * FROM t1; +/* sub # */ SELECT * FROM t1; a | b | c ---+-----+----- 9 | 109 | NSW @@ -1216,10 +1201,9 @@ test_sub=# SELECT * FROM t1; transformed into an INSERT and the change is replicated. See the new row on the subscriber. -test_pub=# UPDATE t1 SET a = 555 WHERE a = 2; -UPDATE 1 +/* pub # */ UPDATE t1 SET a = 555 WHERE a = 2; -test_pub=# SELECT * FROM t1; +/* pub # */ SELECT * FROM t1; a | b | c -----+-----+----- 3 | 103 | QLD @@ -1233,7 +1217,7 @@ test_pub=# SELECT * FROM t1; (8 rows) -test_sub=# SELECT * FROM t1; +/* sub # */ SELECT * FROM t1; a | b | c -----+-----+----- 9 | 109 | NSW @@ -1249,10 +1233,9 @@ test_sub=# SELECT * FROM t1; transformed into a DELETE and the change is replicated. See that the row is removed from the subscriber. -test_pub=# UPDATE t1 SET c = 'VIC' WHERE a = 9; -UPDATE 1 +/* pub # */ UPDATE t1 SET c = 'VIC' WHERE a = 9; -test_pub=# SELECT * FROM t1; +/* pub # */ SELECT * FROM t1; a | b | c -----+-----+----- 3 | 103 | QLD @@ -1266,7 +1249,7 @@ test_pub=# SELECT * FROM t1; (8 rows) -test_sub=# SELECT * FROM t1; +/* sub # */ SELECT * FROM t1; a | b | c -----+-----+----- 6 | 999 | NSW @@ -1284,17 +1267,13 @@ test_sub=# SELECT * FROM t1; Create a partitioned table on the publisher. -test_pub=# CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); -CREATE TABLE -test_pub=# CREATE TABLE child PARTITION OF parent DEFAULT; -CREATE TABLE +/* pub # */ CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); +/* pub # */ CREATE TABLE child PARTITION OF parent DEFAULT; Create the same tables on the subscriber. -test_sub=# CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); -CREATE TABLE -test_sub=# CREATE TABLE child PARTITION OF parent DEFAULT; -CREATE TABLE +/* sub # */ CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); +/* sub # */ CREATE TABLE child PARTITION OF parent DEFAULT; @@ -1302,16 +1281,14 @@ CREATE TABLE publication parameter publish_via_partition_root is set as true. There are row filters defined on both the partitioned table (parent), and on the partition (child). - -test_pub=# CREATE PUBLICATION p4 FOR TABLE parent WHERE (a < 5), child WHERE (a >= 5) -test_pub-# WITH (publish_via_partition_root=true); -CREATE PUBLICATION - - -test_sub=# CREATE SUBSCRIPTION s4 -test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=s4' -test_sub-# PUBLICATION p4; -CREATE SUBSCRIPTION += 5) +/* pub - */ WITH (publish_via_partition_root=true); +]]> + +/* sub # */ CREATE SUBSCRIPTION s4 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s4' +/* sub - */ PUBLICATION p4; @@ -1320,12 +1297,10 @@ CREATE SUBSCRIPTION parent (because publish_via_partition_root is true). -test_pub=# INSERT INTO parent VALUES (2), (4), (6); -INSERT 0 3 -test_pub=# INSERT INTO child VALUES (3), (5), (7); -INSERT 0 3 +/* pub # */ INSERT INTO parent VALUES (2), (4), (6); +/* pub # */ INSERT INTO child VALUES (3), (5), (7); -test_pub=# SELECT * FROM parent ORDER BY a; +/* pub # */ SELECT * FROM parent ORDER BY a; a --- 2 @@ -1337,7 +1312,7 @@ test_pub=# SELECT * FROM parent ORDER BY a; (6 rows) -test_sub=# SELECT * FROM parent ORDER BY a; +/* sub # */ SELECT * FROM parent ORDER BY a; a --- 2 @@ -1350,16 +1325,13 @@ test_sub=# SELECT * FROM parent ORDER BY a; Repeat the same test, but with a different value for publish_via_partition_root. The publication parameter publish_via_partition_root is set as false. A row filter is defined on the partition (child). += 5) +/* pub - */ WITH (publish_via_partition_root=false); +]]> -test_pub=# DROP PUBLICATION p4; -DROP PUBLICATION -test_pub=# CREATE PUBLICATION p4 FOR TABLE parent, child WHERE (a >= 5) -test_pub-# WITH (publish_via_partition_root=false); -CREATE PUBLICATION - - -test_sub=# ALTER SUBSCRIPTION s4 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* sub # */ ALTER SUBSCRIPTION s4 REFRESH PUBLICATION; @@ -1367,14 +1339,11 @@ ALTER SUBSCRIPTION row filter of child (because publish_via_partition_root is false). -test_pub=# TRUNCATE parent; -TRUNCATE TABLE -test_pub=# INSERT INTO parent VALUES (2), (4), (6); -INSERT 0 3 -test_pub=# INSERT INTO child VALUES (3), (5), (7); -INSERT 0 3 +/* pub # */ TRUNCATE parent; +/* pub # */ INSERT INTO parent VALUES (2), (4), (6); +/* pub # */ INSERT INTO child VALUES (3), (5), (7); -test_pub=# SELECT * FROM parent ORDER BY a; +/* pub # */ SELECT * FROM parent ORDER BY a; a --- 2 @@ -1386,7 +1355,7 @@ test_pub=# SELECT * FROM parent ORDER BY a; (6 rows) -test_sub=# SELECT * FROM child ORDER BY a; +/* sub # */ SELECT * FROM child ORDER BY a; a --- 5 @@ -1505,8 +1474,7 @@ test_sub=# SELECT * FROM child ORDER BY a; Create a table t1 to be used in the following example. -test_pub=# CREATE TABLE t1(id int, a text, b text, c text, d text, e text, PRIMARY KEY(id)); -CREATE TABLE +/* pub # */ CREATE TABLE t1(id int, a text, b text, c text, d text, e text, PRIMARY KEY(id)); @@ -1515,19 +1483,18 @@ CREATE TABLE replicated. Notice that the order of column names in the column list does not matter. -test_pub=# CREATE PUBLICATION p1 FOR TABLE t1 (id, b, a, d); -CREATE PUBLICATION +/* pub # */ CREATE PUBLICATION p1 FOR TABLE t1 (id, b, a, d); psql can be used to show the column lists (if defined) for each publication. -test_pub=# \dRp+ - Publication p1 - Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root -----------+------------+---------+---------+---------+-----------+---------- - postgres | f | t | t | t | t | f +/* pub # */ \dRp+ + Publication p1 + Owner | All tables | Inserts | Updates | Deletes | Truncates | Generated columns | Via root +----------+------------+---------+---------+---------+-----------+-------------------+---------- + postgres | f | t | t | t | t | none | f Tables: "public.t1" (id, a, b, d) @@ -1536,7 +1503,7 @@ Tables: psql can be used to show the column lists (if defined) for each table. -test_pub=# \d t1 +/* pub # */ \d t1 Table "public.t1" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- @@ -1559,24 +1526,19 @@ Publications: s1 that subscribes to the publication p1. -test_sub=# CREATE TABLE t1(id int, b text, a text, d text, PRIMARY KEY(id)); -CREATE TABLE -test_sub=# CREATE SUBSCRIPTION s1 -test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=s1' -test_sub-# PUBLICATION p1; -CREATE SUBSCRIPTION +/* sub # */ CREATE TABLE t1(id int, b text, a text, d text, PRIMARY KEY(id)); +/* sub # */ CREATE SUBSCRIPTION s1 +/* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s1' +/* sub - */ PUBLICATION p1; On the publisher node, insert some rows to table t1. -test_pub=# INSERT INTO t1 VALUES(1, 'a-1', 'b-1', 'c-1', 'd-1', 'e-1'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES(2, 'a-2', 'b-2', 'c-2', 'd-2', 'e-2'); -INSERT 0 1 -test_pub=# INSERT INTO t1 VALUES(3, 'a-3', 'b-3', 'c-3', 'd-3', 'e-3'); -INSERT 0 1 -test_pub=# SELECT * FROM t1 ORDER BY id; +/* pub # */ INSERT INTO t1 VALUES(1, 'a-1', 'b-1', 'c-1', 'd-1', 'e-1'); +/* pub # */ INSERT INTO t1 VALUES(2, 'a-2', 'b-2', 'c-2', 'd-2', 'e-2'); +/* pub # */ INSERT INTO t1 VALUES(3, 'a-3', 'b-3', 'c-3', 'd-3', 'e-3'); +/* pub # */ SELECT * FROM t1 ORDER BY id; id | a | b | c | d | e ----+-----+-----+-----+-----+----- 1 | a-1 | b-1 | c-1 | d-1 | e-1 @@ -1589,7 +1551,7 @@ test_pub=# SELECT * FROM t1 ORDER BY id; Only data from the column list of publication p1 is replicated. -test_sub=# SELECT * FROM t1 ORDER BY id; +/* sub # */ SELECT * FROM t1 ORDER BY id; id | b | a | d ----+-----+-----+----- 1 | b-1 | a-1 | d-1 @@ -1617,13 +1579,10 @@ test_sub=# SELECT * FROM t1 ORDER BY id; For example, note below that subscriber table generated column value comes from the subscriber column's calculation. -test_pub=# CREATE TABLE tab_gen_to_gen (a int, b int GENERATED ALWAYS AS (a + 1) STORED); -CREATE TABLE -test_pub=# INSERT INTO tab_gen_to_gen VALUES (1),(2),(3); -INSERT 0 3 -test_pub=# CREATE PUBLICATION pub1 FOR TABLE tab_gen_to_gen; -CREATE PUBLICATION -test_pub=# SELECT * FROM tab_gen_to_gen; +/* pub # */ CREATE TABLE tab_gen_to_gen (a int, b int GENERATED ALWAYS AS (a + 1) STORED); +/* pub # */ INSERT INTO tab_gen_to_gen VALUES (1),(2),(3); +/* pub # */ CREATE PUBLICATION pub1 FOR TABLE tab_gen_to_gen; +/* pub # */ SELECT * FROM tab_gen_to_gen; a | b ---+--- 1 | 2 @@ -1631,11 +1590,9 @@ test_pub=# SELECT * FROM tab_gen_to_gen; 3 | 4 (3 rows) -test_sub=# CREATE TABLE tab_gen_to_gen (a int, b int GENERATED ALWAYS AS (a * 100) STORED); -CREATE TABLE -test_sub=# CREATE SUBSCRIPTION sub1 CONNECTION 'dbname=test_pub' PUBLICATION pub1; -CREATE SUBSCRIPTION -test_sub=# SELECT * from tab_gen_to_gen; +/* sub # */ CREATE TABLE tab_gen_to_gen (a int, b int GENERATED ALWAYS AS (a * 100) STORED); +/* sub # */ CREATE SUBSCRIPTION sub1 CONNECTION 'dbname=test_pub' PUBLICATION pub1; +/* sub # */ SELECT * from tab_gen_to_gen; a | b ---+---- 1 | 100 @@ -1847,11 +1804,27 @@ test_sub=# SELECT * from tab_gen_to_gen; + + update_deleted + + + The tuple to be updated was concurrently deleted by another origin. The + update will simply be skipped in this scenario. Note that this conflict + can only be detected when + track_commit_timestamp + and retain_dead_tuples + are enabled. Note that if a tuple cannot be found due to the table being + truncated, only a update_missing conflict will + arise. Additionally, if the tuple was deleted by the same origin, an + update_missing conflict will arise. + + + update_missing - The tuple to be updated was not found. The update will simply be + The row to be updated was not found. The update will simply be skipped in this scenario. @@ -1872,7 +1845,7 @@ test_sub=# SELECT * from tab_gen_to_gen; delete_missing - The tuple to be deleted was not found. The delete will simply be + The row to be deleted was not found. The delete will simply be skipped in this scenario. @@ -1906,8 +1879,8 @@ DETAIL: detailed_explanation. where detail_values is one of: Key (column_name , ...)=(column_value , ...) - existing local tuple (column_name , ...)=(column_value , ...) - remote tuple (column_name , ...)=(column_value , ...) + existing local row (column_name , ...)=(column_value , ...) + remote row (column_name , ...)=(column_value , ...) replica identity {(column_name , ...)=(column_value , ...) | full (column_name , ...)=(column_value , ...)} @@ -1941,32 +1914,32 @@ DETAIL: detailed_explanation. detailed_explanation includes the origin, transaction ID, and commit timestamp of the transaction that - modified the existing local tuple, if available. + modified the existing local row, if available. The Key section includes the key values of the local - tuple that violated a unique constraint for + row that violated a unique constraint for insert_exists, update_exists or multiple_unique_conflicts conflicts. - The existing local tuple section includes the local - tuple if its origin differs from the remote tuple for + The existing local row section includes the local + row if its origin differs from the remote row for update_origin_differs or delete_origin_differs - conflicts, or if the key value conflicts with the remote tuple for + conflicts, or if the key value conflicts with the remote row for insert_exists, update_exists or multiple_unique_conflicts conflicts. - The remote tuple section includes the new tuple from + The remote row section includes the new row from the remote insert or update operation that caused the conflict. Note that - for an update operation, the column value of the new tuple will be null + for an update operation, the column value of the new row will be null if the value is unchanged and toasted. @@ -1974,7 +1947,7 @@ DETAIL: detailed_explanation. The replica identity section includes the replica identity key values that were used to search for the existing local - tuple to be updated or deleted. This may include the full tuple value + row to be updated or deleted. This may include the full row value if the local relation is marked with REPLICA IDENTITY FULL. @@ -1982,7 +1955,7 @@ DETAIL: detailed_explanation. column_name is the column name. - For existing local tuple, remote tuple, + For existing local row, remote row, and replica identity full cases, column names are logged only if the user lacks the privilege to access all columns of the table. If column names are present, they appear in the same order @@ -2039,16 +2012,16 @@ DETAIL: detailed_explanation. ERROR: conflict detected on relation "public.test": conflict=insert_exists DETAIL: Key already exists in unique index "t_pkey", which was modified locally in transaction 740 at 2024-06-26 10:47:04.727375+08. -Key (c)=(1); existing local tuple (1, 'local'); remote tuple (1, 'remote'). -CONTEXT: processing remote data for replication origin "pg_16395" during "INSERT" for replication target relation "public.test" in transaction 725 finished at 0/14C0378 +Key (c)=(1); existing local row (1, 'local'); remote row (1, 'remote'). +CONTEXT: processing remote data for replication origin "pg_16395" during "INSERT" for replication target relation "public.test" in transaction 725 finished at 0/014C0378 The LSN of the transaction that contains the change violating the constraint and - the replication origin name can be found from the server log (LSN 0/14C0378 and + the replication origin name can be found from the server log (LSN 0/014C0378 and replication origin pg_16395 in the above case). The transaction that produced the conflict can be skipped by using ALTER SUBSCRIPTION ... SKIP with the finish LSN - (i.e., LSN 0/14C0378). The finish LSN could be an LSN at which the transaction + (i.e., LSN 0/014C0378). The finish LSN could be an LSN at which the transaction is committed or prepared on the publisher. Alternatively, the transaction can also be skipped by calling the pg_replication_origin_advance() function. @@ -2059,7 +2032,7 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER disable_on_error option. Then, you can use pg_replication_origin_advance() function with the node_name (i.e., pg_16395) - and the next LSN of the finish LSN (i.e., 0/14C0379). The current position of + and the next LSN of the finish LSN (i.e., 0/014C0379). The current position of origins can be seen in the pg_replication_origin_status system view. Please note that skipping the whole transaction includes skipping changes that @@ -2200,8 +2173,8 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER implemented by walsender and apply processes. The walsender process starts logical decoding (described in ) of the WAL and loads the standard - logical decoding output plugin (pgoutput). The plugin - transforms the changes read + logical decoding output plugin (). + The plugin transforms the changes read from WAL to the logical replication protocol (see ) and filters the data according to the publication specification. The data is then continuously @@ -2439,6 +2412,12 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER the subscriber, plus some reserve for table synchronization. + + max_replication_slots + must be set to at least 1 when retain_dead_tuples + is enabled for any subscription. + + max_logical_replication_workers must be set to at least the number of subscriptions (for leader apply @@ -2488,7 +2467,7 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER - Prepare for publisher upgrades + Prepare for Publisher Upgrades pg_upgrade attempts to migrate logical @@ -2560,7 +2539,7 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER - Prepare for subscriber upgrades + Prepare for Subscriber Upgrades Setup the @@ -2575,6 +2554,22 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER dependencies on clusters before version 17.0 will silently be ignored. + + + Commit timestamps and origin data are not preserved during the upgrade. + As a result, even if + retain_dead_tuples + is enabled, the upgraded subscriber may be unable to detect conflicts or + log relevant commit timestamps and origins when applying changes from the + publisher occurred before the upgrade. Additionally, immediately after the + upgrade, the vacuum may remove the deleted rows that are required for + conflict detection. This can affect the changes that were not replicated + before the upgrade. To ensure consistent conflict tracking, users should + ensure that all potentially conflicting changes are replicated to the + subscriber before initiating the upgrade. + + + There are some prerequisites for pg_upgrade to be able to upgrade the subscriptions. If these are not met an error @@ -2606,11 +2601,21 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER subscriptions present in the old cluster. + + + If there are subscriptions with retain_dead_tuples enabled, the reserved + replication slot pg_conflict_detection + must not exist on the new cluster. Additionally, the + wal_level on the + new cluster must be set to replica or + logical. + + - Upgrading logical replication clusters + Upgrading Logical Replication Clusters While upgrading a subscriber, write operations can be performed in the @@ -2674,7 +2679,7 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER - Steps to upgrade a two-node logical replication cluster + Steps to Upgrade a Two-node Logical Replication Cluster Let's say publisher is in node1 and subscriber is in node2. The subscriber node2 has @@ -2690,8 +2695,7 @@ CONTEXT: processing remote data for replication origin "pg_16395" during "INSER ALTER SUBSCRIPTION ... DISABLE, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 DISABLE; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 DISABLE; @@ -2780,8 +2784,7 @@ pg_ctl -D /opt/PostgreSQL/data2_upgraded start -l logfile and now, e.g.: -node2=# CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); -CREATE TABLE +/* node2 # */ CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); @@ -2793,8 +2796,7 @@ CREATE TABLE ALTER SUBSCRIPTION ... ENABLE, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 ENABLE; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 ENABLE; @@ -2805,8 +2807,7 @@ ALTER SUBSCRIPTION ALTER SUBSCRIPTION ... REFRESH PUBLICATION, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 REFRESH PUBLICATION; @@ -2822,7 +2823,7 @@ ALTER SUBSCRIPTION - Steps to upgrade a cascaded logical replication cluster + Steps to Upgrade a Cascaded Logical Replication Cluster Let's say we have a cascaded logical replication setup node1->node2->node3. @@ -2844,8 +2845,7 @@ ALTER SUBSCRIPTION ALTER SUBSCRIPTION ... DISABLE, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 DISABLE; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 DISABLE; @@ -2896,8 +2896,7 @@ pg_ctl -D /opt/PostgreSQL/data1_upgraded start -l logfile ALTER SUBSCRIPTION ... DISABLE, e.g.: -node3=# ALTER SUBSCRIPTION sub1_node2_node3 DISABLE; -ALTER SUBSCRIPTION +/* node3 # */ ALTER SUBSCRIPTION sub1_node2_node3 DISABLE; @@ -2948,8 +2947,7 @@ pg_ctl -D /opt/PostgreSQL/data2_upgraded start -l logfile and now, e.g.: -node2=# CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); -CREATE TABLE +/* node2 # */ CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); @@ -2961,8 +2959,7 @@ CREATE TABLE ALTER SUBSCRIPTION ... ENABLE, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 ENABLE; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 ENABLE; @@ -2973,8 +2970,7 @@ ALTER SUBSCRIPTION ALTER SUBSCRIPTION ... REFRESH PUBLICATION, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 REFRESH PUBLICATION; @@ -3025,8 +3021,7 @@ pg_ctl -D /opt/PostgreSQL/data3_upgraded start -l logfile and now, e.g.: -node3=# CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); -CREATE TABLE +/* node3 # */ CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); @@ -3038,8 +3033,7 @@ CREATE TABLE ALTER SUBSCRIPTION ... ENABLE, e.g.: -node3=# ALTER SUBSCRIPTION sub1_node2_node3 ENABLE; -ALTER SUBSCRIPTION +/* node3 # */ ALTER SUBSCRIPTION sub1_node2_node3 ENABLE; @@ -3050,8 +3044,7 @@ ALTER SUBSCRIPTION ALTER SUBSCRIPTION ... REFRESH PUBLICATION, e.g.: -node3=# ALTER SUBSCRIPTION sub1_node2_node3 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* node3 # */ ALTER SUBSCRIPTION sub1_node2_node3 REFRESH PUBLICATION; @@ -3059,7 +3052,7 @@ ALTER SUBSCRIPTION - Steps to upgrade a two-node circular logical replication cluster + Steps to Upgrade a Two-node Circular Logical Replication Cluster Let's say we have a circular logical replication setup node1->node2 and @@ -3082,8 +3075,7 @@ ALTER SUBSCRIPTION ALTER SUBSCRIPTION ... DISABLE, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 DISABLE; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 DISABLE; @@ -3134,8 +3126,7 @@ pg_ctl -D /opt/PostgreSQL/data1_upgraded start -l logfile ALTER SUBSCRIPTION ... ENABLE, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 ENABLE; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 ENABLE; @@ -3146,8 +3137,7 @@ ALTER SUBSCRIPTION node2 between and now, e.g.: -node1=# CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); -CREATE TABLE +/* node1 # */ CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); @@ -3160,8 +3150,7 @@ CREATE TABLE ALTER SUBSCRIPTION ... REFRESH PUBLICATION, e.g.: -node1=# ALTER SUBSCRIPTION sub1_node2_node1 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* node1 # */ ALTER SUBSCRIPTION sub1_node2_node1 REFRESH PUBLICATION; @@ -3173,8 +3162,7 @@ ALTER SUBSCRIPTION ALTER SUBSCRIPTION ... DISABLE, e.g.: -node1=# ALTER SUBSCRIPTION sub1_node2_node1 DISABLE; -ALTER SUBSCRIPTION +/* node1 # */ ALTER SUBSCRIPTION sub1_node2_node1 DISABLE; @@ -3225,8 +3213,7 @@ pg_ctl -D /opt/PostgreSQL/data2_upgraded start -l logfile ALTER SUBSCRIPTION ... ENABLE, e.g.: -node1=# ALTER SUBSCRIPTION sub1_node2_node1 ENABLE; -ALTER SUBSCRIPTION +/* node1 # */ ALTER SUBSCRIPTION sub1_node2_node1 ENABLE; @@ -3237,8 +3224,7 @@ ALTER SUBSCRIPTION the upgraded node1 between and now, e.g.: -node2=# CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); -CREATE TABLE +/* node2 # */ CREATE TABLE distributors (did integer PRIMARY KEY, name varchar(40)); @@ -3250,8 +3236,7 @@ CREATE TABLE ALTER SUBSCRIPTION ... REFRESH PUBLICATION, e.g.: -node2=# ALTER SUBSCRIPTION sub1_node1_node2 REFRESH PUBLICATION; -ALTER SUBSCRIPTION +/* node2 # */ ALTER SUBSCRIPTION sub1_node1_node2 REFRESH PUBLICATION; diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 1c4ae38f1b992..b803a819cf1f2 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -57,14 +57,14 @@ postgres=# -- Create a slot named 'regression_slot' using the output plugin 'test_decoding' postgres=# SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding', false, true); slot_name | lsn ------------------+----------- - regression_slot | 0/16B1970 +-----------------+------------ + regression_slot | 0/016B1970 (1 row) postgres=# SELECT slot_name, plugin, slot_type, database, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots; slot_name | plugin | slot_type | database | active | restart_lsn | confirmed_flush_lsn ------------------+---------------+-----------+----------+--------+-------------+----------------- - regression_slot | test_decoding | logical | postgres | f | 0/16A4408 | 0/16A4440 +-----------------+---------------+-----------+----------+--------+-------------+--------------------- + regression_slot | test_decoding | logical | postgres | f | 0/016A4408 | 0/016A4440 (1 row) postgres=# -- There are no changes to see yet @@ -78,10 +78,10 @@ CREATE TABLE postgres=# -- DDL isn't replicated, so all you'll see is the transaction postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-------+-------------- - 0/BA2DA58 | 10297 | BEGIN 10297 - 0/BA5A5A0 | 10297 | COMMIT 10297 + lsn | xid | data +------------+-------+-------------- + 0/0BA2DA58 | 10297 | BEGIN 10297 + 0/0BA5A5A0 | 10297 | COMMIT 10297 (2 rows) postgres=# -- Once changes are read, they're consumed and not emitted @@ -97,41 +97,41 @@ postgres=*# INSERT INTO data(data) VALUES('2'); postgres=*# COMMIT; postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-------+--------------------------------------------------------- - 0/BA5A688 | 10298 | BEGIN 10298 - 0/BA5A6F0 | 10298 | table public.data: INSERT: id[integer]:1 data[text]:'1' - 0/BA5A7F8 | 10298 | table public.data: INSERT: id[integer]:2 data[text]:'2' - 0/BA5A8A8 | 10298 | COMMIT 10298 + lsn | xid | data +------------+-------+--------------------------------------------------------- + 0/0BA5A688 | 10298 | BEGIN 10298 + 0/0BA5A6F0 | 10298 | table public.data: INSERT: id[integer]:1 data[text]:'1' + 0/0BA5A7F8 | 10298 | table public.data: INSERT: id[integer]:2 data[text]:'2' + 0/0BA5A8A8 | 10298 | COMMIT 10298 (4 rows) postgres=# INSERT INTO data(data) VALUES('3'); postgres=# -- You can also peek ahead in the change stream without consuming changes postgres=# SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-------+--------------------------------------------------------- - 0/BA5A8E0 | 10299 | BEGIN 10299 - 0/BA5A8E0 | 10299 | table public.data: INSERT: id[integer]:3 data[text]:'3' - 0/BA5A990 | 10299 | COMMIT 10299 + lsn | xid | data +------------+-------+--------------------------------------------------------- + 0/0BA5A8E0 | 10299 | BEGIN 10299 + 0/0BA5A8E0 | 10299 | table public.data: INSERT: id[integer]:3 data[text]:'3' + 0/0BA5A990 | 10299 | COMMIT 10299 (3 rows) postgres=# -- The next call to pg_logical_slot_peek_changes() returns the same changes again postgres=# SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-------+--------------------------------------------------------- - 0/BA5A8E0 | 10299 | BEGIN 10299 - 0/BA5A8E0 | 10299 | table public.data: INSERT: id[integer]:3 data[text]:'3' - 0/BA5A990 | 10299 | COMMIT 10299 + lsn | xid | data +------------+-------+--------------------------------------------------------- + 0/0BA5A8E0 | 10299 | BEGIN 10299 + 0/0BA5A8E0 | 10299 | table public.data: INSERT: id[integer]:3 data[text]:'3' + 0/0BA5A990 | 10299 | COMMIT 10299 (3 rows) postgres=# -- options can be passed to output plugin, to influence the formatting postgres=# SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-timestamp', 'on'); - lsn | xid | data ------------+-------+--------------------------------------------------------- - 0/BA5A8E0 | 10299 | BEGIN 10299 - 0/BA5A8E0 | 10299 | table public.data: INSERT: id[integer]:3 data[text]:'3' - 0/BA5A990 | 10299 | COMMIT 10299 (at 2017-05-10 12:07:21.272494-04) + lsn | xid | data +------------+-------+--------------------------------------------------------- + 0/0BA5A8E0 | 10299 | BEGIN 10299 + 0/0BA5A8E0 | 10299 | table public.data: INSERT: id[integer]:3 data[text]:'3' + 0/0BA5A990 | 10299 | COMMIT 10299 (at 2017-05-10 12:07:21.272494-04) (3 rows) postgres=# -- Remember to destroy a slot you no longer need to stop it consuming @@ -169,7 +169,7 @@ COMMIT 693 $ pg_recvlogical -d postgres --slot=test --drop-slot Example 2: -$ pg_recvlogical -d postgres --slot=test --create-slot --two-phase +$ pg_recvlogical -d postgres --slot=test --create-slot --enable-two-phase $ pg_recvlogical -d postgres --slot=test --start -f - ControlZ $ psql -d postgres -c "BEGIN;INSERT INTO data(data) VALUES('5');PREPARE TRANSACTION 'test';" @@ -200,18 +200,18 @@ postgres=*# INSERT INTO data(data) VALUES('5'); postgres=*# PREPARE TRANSACTION 'test_prepared1'; postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-----+--------------------------------------------------------- - 0/1689DC0 | 529 | BEGIN 529 - 0/1689DC0 | 529 | table public.data: INSERT: id[integer]:3 data[text]:'5' - 0/1689FC0 | 529 | PREPARE TRANSACTION 'test_prepared1', txid 529 + lsn | xid | data +------------+-----+--------------------------------------------------------- + 0/01689DC0 | 529 | BEGIN 529 + 0/01689DC0 | 529 | table public.data: INSERT: id[integer]:3 data[text]:'5' + 0/01689FC0 | 529 | PREPARE TRANSACTION 'test_prepared1', txid 529 (3 rows) postgres=# COMMIT PREPARED 'test_prepared1'; postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-----+-------------------------------------------- - 0/168A060 | 529 | COMMIT PREPARED 'test_prepared1', txid 529 + lsn | xid | data +------------+-----+-------------------------------------------- + 0/0168A060 | 529 | COMMIT PREPARED 'test_prepared1', txid 529 (4 row) postgres=#-- you can also rollback a prepared transaction @@ -219,18 +219,18 @@ postgres=# BEGIN; postgres=*# INSERT INTO data(data) VALUES('6'); postgres=*# PREPARE TRANSACTION 'test_prepared2'; postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-----+--------------------------------------------------------- - 0/168A180 | 530 | BEGIN 530 - 0/168A1E8 | 530 | table public.data: INSERT: id[integer]:4 data[text]:'6' - 0/168A430 | 530 | PREPARE TRANSACTION 'test_prepared2', txid 530 + lsn | xid | data +------------+-----+--------------------------------------------------------- + 0/0168A180 | 530 | BEGIN 530 + 0/0168A1E8 | 530 | table public.data: INSERT: id[integer]:4 data[text]:'6' + 0/0168A430 | 530 | PREPARE TRANSACTION 'test_prepared2', txid 530 (3 rows) postgres=# ROLLBACK PREPARED 'test_prepared2'; postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NULL); - lsn | xid | data ------------+-----+---------------------------------------------- - 0/168A4B8 | 530 | ROLLBACK PREPARED 'test_prepared2', txid 530 + lsn | xid | data +------------+-----+---------------------------------------------- + 0/0168A4B8 | 530 | ROLLBACK PREPARED 'test_prepared2', txid 530 (1 row) @@ -290,7 +290,7 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU A logical slot will emit each change just once in normal operation. The current position of each slot is persisted only at checkpoint, so in - the case of a crash the slot may return to an earlier LSN, which will + the case of a crash the slot might return to an earlier LSN, which will then cause recent changes to be sent again when the server restarts. Logical decoding clients are responsible for avoiding ill effects from handling the same message more than once. Clients may wish to record @@ -370,10 +370,10 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU pg_create_logical_replication_slot, or by using the failover option of - CREATE SUBSCRIPTION during slot creation, and then calling - - pg_sync_replication_slots - on the standby. By setting + CREATE SUBSCRIPTION during slot creation. + Additionally, enabling + sync_replication_slots on the standby + is required. By enabling sync_replication_slots on the standby, the failover slots can be synchronized periodically in the slotsync worker. For the synchronization to work, it is mandatory to @@ -398,6 +398,52 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU receiving the WAL up to the latest flushed position on the primary server. + + + While enabling + sync_replication_slots allows for automatic + periodic synchronization of failover slots, they can also be manually + synchronized using the + pg_sync_replication_slots function on the standby. + However, this function is primarily intended for testing and debugging and + should be used with caution. Unlike automatic synchronization, it does not + include cyclic retries, making it more prone to synchronization failures, + particularly during initial sync scenarios where the required WAL files + or catalog rows for the slot might have already been removed or are at risk + of being removed on the standby. In contrast, automatic synchronization + via sync_replication_slots provides continuous slot + updates, enabling seamless failover and supporting high availability. + Therefore, it is the recommended method for synchronizing slots. + + + + + When slot synchronization is configured as recommended, + and the initial synchronization is performed either automatically or + manually via pg_sync_replication_slots, the standby + can persist the synchronized slot only if the following condition is met: + The logical replication slot on the primary must retain WALs and system + catalog rows that are still available on the standby. This ensures data + integrity and allows logical replication to continue smoothly after + promotion. + If the required WALs or catalog rows have already been purged from the + standby, the slot will not be persisted to avoid data loss. In such + cases, the following log message may appear: + +LOG: could not synchronize replication slot "failover_slot" +DETAIL: Synchronization could lead to data loss, because the remote slot needs WAL at LSN 0/03003F28 and catalog xmin 754, but the standby has LSN 0/03003F28 and catalog xmin 756. + + If the logical replication slot is actively used by a consumer, no + manual intervention is needed; the slot will advance automatically, + and synchronization will resume in the next cycle. However, if no + consumer is configured, it is advisable to manually advance the slot + on the primary using + pg_logical_slot_get_changes or + + pg_logical_slot_get_binary_changes, + allowing synchronization to proceed. + + The ability to resume logical replication after failover depends upon the pg_replication_slots.synced @@ -455,9 +501,8 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU using the slot's contents without losing any changes. - Creation of a snapshot is not always possible. In particular, it will - fail when connected to a hot standby. Applications that do not require - snapshot export may suppress it with the NOEXPORT_SNAPSHOT + Applications that do not require + snapshot export may suppress it with the SNAPSHOT 'nothing' option. @@ -529,6 +574,170 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU Logical Decoding Output Plugins + + + PostgreSQL provides two logical decoding + output plugins, and + . You can also develop custom output plugins + (see for details). + + + + pgoutput — Standard Logical Decoding Output Plugin + + + pgoutput + + + + pgoutput is the standard logical decoding output + plugin provided by PostgreSQL. + It's used for the built-in + logical replication. + + + + Options + + + + proto_version (integer) + + + Specifies the protocol version. + Currently versions 1, 2, + 3, and 4 are supported. A valid + version is required. + + + Version 2 is supported on server version 14 + and above, and is required when streaming + is set to on to stream large in-progress + transactions. + + + Version 3 is supported on server version 15 + and above, and is required when two_phase + is enabled to stream two-phase commits. + + + Version 4 is supported on server version 16 + and above, and is required when streaming + is set to parallel to stream large in-progress + transactions to be applied in parallel. + + + + + + publication_names (string) + + + A comma-separated list of publication names to subscribe to. + The individual publication names are treated + as standard objects names and can be quoted the same as needed. + At least one publication name is required. + + + + + + binary (boolean) + + + Enables binary transfer mode. Binary mode is faster + than the text mode but slightly less robust. + The default is off. + + + + + + messages (boolean) + + + Enables sending the messages that are written by + pg_logical_emit_message. + The default is off. + + + + + + streaming (enum) + + + Enables streaming of in-progress transactions. Valid values are + off (the default), on and + parallel. + + + When set to off, pgoutput + fully decodes a transaction before sending it as a whole. + This mode works with any protocol version. + + + When set to on, pgoutput + streams large in-progress transactions. + This requires protocol version 2 or higher. + + + When set to parallel, pgoutput + streams large in-progress transactions and also sends + extra information in some messages to support parallel processing. + This requires protocol version 4 or higher. + + + + + + two_phase (boolean) + + + Enables sending two-phase transactions. + Minimum protocol version 3 is required to turn it on. + The default is off. + + + + + + origin (enum) + + + Specifies whether to send changes by their origin. Possible values are + none to only send the changes that have no origin + associated, or any + to send the changes regardless of their origin. This can be used + to avoid loops (infinite replication of the same data) among + replication nodes. + The default is any. + + + + + + + + + Notes + + + pgoutput produces binary output, + so functions expecting textual data ( + pg_logical_slot_peek_changes and + pg_logical_slot_get_changes) + cannot be used with it. Use + pg_logical_slot_peek_binary_changes or + pg_logical_slot_get_binary_changes + instead. + + + + + + + Writing Logical Decoding Output Plugins An example output plugin can be found in the @@ -898,7 +1107,6 @@ typedef void (*LogicalDecodeMessageCB) (struct LogicalDecodingContext *ctx, callback might also error out due to simultaneous rollback of this very same transaction. In that case, the logical decoding of this aborted transaction is stopped gracefully. - The prefix is arbitrary null-terminated prefix which can be used for identifying interesting messages for the current plugin. And finally the message parameter holds @@ -1368,7 +1576,7 @@ commit_prepared_cb(...); <-- commit of the prepared transaction currently used for decoded changes) is selected and streamed. However, in some cases we still have to spill to disk even if streaming is enabled because we exceed the memory threshold but still have not decoded the - complete tuple e.g., only decoded toast table insert but not the main table + complete tuple e.g., only decoded TOAST table insert but not the main table insert. diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 600e4b3f2f3b8..e7a9f58c01582 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -779,7 +779,10 @@ HINT: Execute a database-wide VACUUM in that database. careful aging management, storage cleanup, and wraparound handling. There is a separate storage area which holds the list of members in each multixact, which also uses a 32-bit counter and which must also - be managed. + be managed. The system function + pg_get_multixact_members() described in + can be used to examine the + transaction IDs associated with a multixact ID. diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index a6d67d2fbaa1e..3f4a27a736e27 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -168,6 +168,11 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser of the current command being executed by any server process. + + The parameter enables + monitoring of cost-based vacuum delay. + + The parameter controls whether cumulative statistics are collected about table and index accesses. @@ -1156,7 +1161,7 @@ description | Waiting for a newly initialized WAL file to reach durable storage Extensions can add Extension, - InjectionPoint. and LWLock events + InjectionPoint, and LWLock events to the lists shown in and . In some cases, the name of an LWLock assigned by an extension will not be @@ -2218,6 +2223,17 @@ description | Waiting for a newly initialized WAL file to reach durable storage
+ + + confl_update_deleted bigint + + + Number of times the tuple to be updated was concurrently deleted by + another source during the application of changes. See + for details about this conflict. + + + confl_update_missing bigint @@ -3975,6 +3991,7 @@ description | Waiting for a newly initialized WAL file to reach durable storage Estimated number of rows inserted since this table was last vacuumed + (not counting VACUUM FULL) @@ -4062,6 +4079,8 @@ description | Waiting for a newly initialized WAL file to reach durable storage Total time this table has been manually vacuumed, in milliseconds + (not counting VACUUM FULL). + (This includes the time spent sleeping due to cost-based delays.) @@ -4071,7 +4090,8 @@ description | Waiting for a newly initialized WAL file to reach durable storage Total time this table has been vacuumed by the autovacuum daemon, - in milliseconds + in milliseconds. (This includes the time spent sleeping due to + cost-based delays.) @@ -4080,7 +4100,8 @@ description | Waiting for a newly initialized WAL file to reach durable storage total_analyze_time double precision - Total time this table has been manually analyzed, in milliseconds + Total time this table has been manually analyzed, in milliseconds. + (This includes the time spent sleeping due to cost-based delays.) @@ -4090,7 +4111,8 @@ description | Waiting for a newly initialized WAL file to reach durable storage Total time this table has been analyzed by the autovacuum daemon, - in milliseconds + in milliseconds. (This includes the time spent sleeping due to + cost-based delays.) @@ -4263,7 +4285,10 @@ description | Waiting for a newly initialized WAL file to reach durable storage column_name = value2 ... construct, though only when the optimizer transforms the construct into an equivalent - multi-valued array representation. + multi-valued array representation. Similarly, when B-tree index scans use + the skip scan optimization, an index search is performed each time the + scan is repositioned to the next index leaf page that might have matching + tuples (see ). @@ -6766,6 +6791,16 @@ FROM pg_stat_get_backend_idset() AS backendid; advances when the phase is streaming database files. + + + + backup_type text + + + Backup type. Either full or + incremental. + + diff --git a/doc/src/sgml/pageinspect.sgml b/doc/src/sgml/pageinspect.sgml index 487c5d758ffbf..f5014787c783b 100644 --- a/doc/src/sgml/pageinspect.sgml +++ b/doc/src/sgml/pageinspect.sgml @@ -73,9 +73,9 @@ passed as argument. For example: test=# SELECT * FROM page_header(get_raw_page('pg_class', 0)); - lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid ------------+----------+--------+-------+-------+---------+----------+---------+----------- - 0/24A1B50 | 0 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0 + lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid +------------+----------+--------+-------+-------+---------+----------+---------+----------- + 0/024A1B50 | 0 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0 The returned columns correspond to the fields in the PageHeaderData struct. @@ -741,9 +741,9 @@ test=# SELECT first_tid, nbytes, tids[0:5] AS some_tids For example: test=# SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2)); - lsn | nsn | rightlink | flags ------+-----+-----------+-------- - 0/1 | 0/0 | 1 | {leaf} + lsn | nsn | rightlink | flags +------------+------------+-----------+-------- + 0/0B5FE088 | 0/00000000 | 1 | {leaf} (1 row) diff --git a/doc/src/sgml/perform.sgml b/doc/src/sgml/perform.sgml index 387baac7e8c20..106583fb2965d 100644 --- a/doc/src/sgml/perform.sgml +++ b/doc/src/sgml/perform.sgml @@ -860,6 +860,38 @@ EXPLAIN ANALYZE SELECT * FROM tenk1 WHERE thousand IN (1, 2, 3, 4); tenk1_thous_tenthous index leaf page. + + The Index Searches line is also useful with B-tree index + scans that apply the skip scan optimization to + more efficiently traverse through an index: + +EXPLAIN ANALYZE SELECT four, unique1 FROM tenk1 WHERE four BETWEEN 1 AND 3 AND unique1 = 42; + QUERY PLAN +-------------------------------------------------------------------&zwsp;--------------------------------------------------------------- + Index Only Scan using tenk1_four_unique1_idx on tenk1 (cost=0.29..6.90 rows=1 width=8) (actual time=0.006..0.007 rows=1.00 loops=1) + Index Cond: ((four >= 1) AND (four <= 3) AND (unique1 = 42)) + Heap Fetches: 0 + Index Searches: 3 + Buffers: shared hit=7 + Planning Time: 0.029 ms + Execution Time: 0.012 ms + + + Here we see an Index-Only Scan node using + tenk1_four_unique1_idx, a multi-column index on the + tenk1 table's four and + unique1 columns. The scan performs 3 searches + that each read a single index leaf page: + four = 1 AND unique1 = 42, + four = 2 AND unique1 = 42, and + four = 3 AND unique1 = 42. This index + is generally a good target for skip scan, since, as discussed in + , its leading column (the + four column) contains only 4 distinct values, + while its second/final column (the unique1 + column) contains many distinct values. + + Another type of extra information is the number of rows removed by a filter condition: diff --git a/doc/src/sgml/pgbuffercache.sgml b/doc/src/sgml/pgbuffercache.sgml index 802a5112d77d7..eeb85a0e04908 100644 --- a/doc/src/sgml/pgbuffercache.sgml +++ b/doc/src/sgml/pgbuffercache.sgml @@ -19,20 +19,40 @@ pg_buffercache_pages + + pg_buffercache_numa + + pg_buffercache_summary + + pg_buffercache_usage_counts + + pg_buffercache_evict + + pg_buffercache_evict_relation + + + + pg_buffercache_evict_all + + This module provides the pg_buffercache_pages() - function (wrapped in the pg_buffercache view), - the pg_buffercache_summary() function, the - pg_buffercache_usage_counts() function and - the pg_buffercache_evict() function. + function (wrapped in the pg_buffercache view), the + pg_buffercache_numa_pages() function (wrapped in the + pg_buffercache_numa view), the + pg_buffercache_summary() function, the + pg_buffercache_usage_counts() function, the + pg_buffercache_evict() function, the + pg_buffercache_evict_relation() function and the + pg_buffercache_evict_all() function. @@ -42,6 +62,15 @@ convenient use. + + The pg_buffercache_numa_pages() function provides + NUMA node mappings for shared buffer entries. This + information is not part of pg_buffercache_pages() + itself, as it is much slower to retrieve. + The pg_buffercache_numa view wraps the function for + convenient use. + + The pg_buffercache_summary() function returns a single row summarizing the state of the shared buffer cache. @@ -65,6 +94,19 @@ function is restricted to superusers only. + + The pg_buffercache_evict_relation() function allows all + unpinned shared buffers in the relation to be evicted from the buffer pool + given a relation identifier. Use of this function is restricted to + superusers only. + + + + The pg_buffercache_evict_all() function allows all + unpinned shared buffers to be evicted in the buffer pool. Use of this + function is restricted to superusers only. + + The <structname>pg_buffercache</structname> View @@ -200,6 +242,78 @@ + + The <structname>pg_buffercache_numa</structname> View + + + The definitions of the columns exposed by the view are shown in . + + + + <structname>pg_buffercache_numa</structname> Columns + + + + + Column Type + + + Description + + + + + + + + bufferid integer + + + ID, in the range 1..shared_buffers + + + + + + os_page_num bigint + + + number of OS memory page for this buffer + + + + + + numa_node int + + + ID of NUMA node + + + + + +
+ + + As NUMA node ID inquiry for each page requires memory pages + to be paged-in, the first execution of this function can take a noticeable + amount of time. In all the cases (first execution or not), retrieving this + information is costly and querying the view at a high frequency is not recommended. + + + + + When determining the NUMA node, the view touches + all memory pages for the shared memory segment. This will force + allocation of the shared memory, if it wasn't allocated already, + and the memory may get allocated in a single NUMA + node (depending on system configuration). + + + +
+ The <function>pg_buffercache_summary()</function> Function @@ -369,11 +483,49 @@ The pg_buffercache_evict() function takes a buffer identifier, as shown in the bufferid column of - the pg_buffercache view. It returns true on success, - and false if the buffer wasn't valid, if it couldn't be evicted because it - was pinned, or if it became dirty again after an attempt to write it out. - The result is immediately out of date upon return, as the buffer might - become valid again at any time due to concurrent activity. The function is + the pg_buffercache view. It returns information + about whether the buffer was evicted and flushed. The buffer_evicted + column is true on success, and false if the buffer wasn't valid, if it + couldn't be evicted because it was pinned, or if it became dirty again + after an attempt to write it out. The buffer_flushed column is true if the + buffer was flushed. This does not necessarily mean that buffer was flushed + by us, it might be flushed by someone else. The result is immediately out + of date upon return, as the buffer might become valid again at any time due + to concurrent activity. The function is intended for developer testing + only. + + + + + The <structname>pg_buffercache_evict_relation()</structname> Function + + The pg_buffercache_evict_relation() function is very + similar to the pg_buffercache_evict() function. The + difference is that the pg_buffercache_evict_relation() + takes a relation identifier instead of buffer identifier. It tries to + evict all buffers for all forks in that relation. + + It returns the number of evicted buffers, flushed buffers and the number of + buffers that could not be evicted. Flushed buffers haven't necessarily + been flushed by us, they might have been flushed by someone else. The + result is immediately out of date upon return, as buffers might immediately + be read back in due to concurrent activity. The function is intended for + developer testing only. + + + + + The <structname>pg_buffercache_evict_all()</structname> Function + + The pg_buffercache_evict_all() function is very + similar to the pg_buffercache_evict() function. The + difference is, the pg_buffercache_evict_all() function + does not take an argument; instead it tries to evict all buffers in the + buffer pool. It returns the number of evicted buffers, flushed buffers and + the number of buffers that could not be evicted. Flushed buffers haven't + necessarily been flushed by us, they might have been flushed by someone + else. The result is immediately out of date upon return, as buffers might + immediately be read back in due to concurrent activity. The function is intended for developer testing only. diff --git a/doc/src/sgml/pgcrypto.sgml b/doc/src/sgml/pgcrypto.sgml index f87668dfaede1..bc5c74ad017fa 100644 --- a/doc/src/sgml/pgcrypto.sgml +++ b/doc/src/sgml/pgcrypto.sgml @@ -146,6 +146,12 @@ hmac(data bytea, key bytea, type text) returns bytea Supported Algorithms for <function>crypt()</function> + + + + + + Algorithm @@ -189,6 +195,29 @@ hmac(data bytea, key bytea, type text) returns bytea 13 Original UNIX crypt + + sha256crypt + unlimited + yes + up to 32 + 80 + Adapted from publicly available reference implementation + Unix crypt using SHA-256 and SHA-512 + + + + + sha512crypt + unlimited + yes + up to 32 + 123 + Adapted from publicly available reference implementation + Unix crypt using SHA-256 and SHA-512 + + + +
@@ -245,7 +274,9 @@ gen_salt(type text [, iter_count integer ]) returns text The type parameter specifies the hashing algorithm. The accepted types are: des, xdes, - md5 and bf. + md5, bf, sha256crypt and + sha512crypt. The last two, sha256crypt and + sha512crypt are modern SHA-2 based password hashes. @@ -284,6 +315,12 @@ gen_salt(type text [, iter_count integer ]) returns text 4 31 + + sha256crypt, sha512crypt + 5000 + 1000 + 999999999 + @@ -313,6 +350,14 @@ gen_salt(type text [, iter_count integer ]) returns text gen_salt. + + The default iter_count for sha256crypt and + sha512crypt of 5000 is considered too low for modern + hardware, but can be adjusted to generate stronger password hashes. + Otherwise both hashes, sha256crypt and sha512crypt are + considered safe. + + Hash Algorithm Speeds diff --git a/doc/src/sgml/pglogicalinspect.sgml b/doc/src/sgml/pglogicalinspect.sgml index 4b111f961133b..1c1a9d14e510a 100644 --- a/doc/src/sgml/pglogicalinspect.sgml +++ b/doc/src/sgml/pglogicalinspect.sgml @@ -95,7 +95,7 @@ two_phase_at | 0/40796AF8 initial_xmin_horizon | 0 building_full_snapshot | f in_slot_creation | f -last_serialized_snapshot | 0/0 +last_serialized_snapshot | 0/00000000 next_phase_at | 0 committed_count | 0 committed_xip | @@ -114,7 +114,7 @@ two_phase_at | 0/40796AF8 initial_xmin_horizon | 0 building_full_snapshot | f in_slot_creation | f -last_serialized_snapshot | 0/0 +last_serialized_snapshot | 0/00000000 next_phase_at | 0 committed_count | 0 committed_xip | diff --git a/doc/src/sgml/pgoverexplain.sgml b/doc/src/sgml/pgoverexplain.sgml index 21930fbd3bd76..377ddc8139ecf 100644 --- a/doc/src/sgml/pgoverexplain.sgml +++ b/doc/src/sgml/pgoverexplain.sgml @@ -8,7 +8,7 @@ - The pg_overexplain extends EXPLAIN + The pg_overexplain module extends EXPLAIN with new options that provide additional output. It is mostly intended to assist with debugging of and development of the planner, rather than for general use. Since this module displays internal details of planner data @@ -17,6 +17,21 @@ often as) those data structures change. + + To use it, simply load it into the server. You can load it into an + individual session: + + +LOAD 'pg_overexplain'; + + + You can also preload it into some or all sessions by including + pg_overexplain in + or + in + postgresql.conf. + + EXPLAIN (DEBUG) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index 7baa07dcdbf7f..d753de5836efb 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -554,6 +554,24 @@ + + + generic_plan_calls bigint + + + Number of times the statement has been executed using a generic plan + + + + + + custom_plan_calls bigint + + + Number of times the statement has been executed using a custom plan + + + stats_since timestamp with time zone diff --git a/doc/src/sgml/pgstattuple.sgml b/doc/src/sgml/pgstattuple.sgml index 4071da4ed941a..c747a5818ab7d 100644 --- a/doc/src/sgml/pgstattuple.sgml +++ b/doc/src/sgml/pgstattuple.sgml @@ -270,6 +270,15 @@ leaf_fragmentation | 0 page than is accounted for by internal_pages + leaf_pages + empty_pages + deleted_pages, because it also includes the index's metapage. + avg_leaf_density is the fraction of the index size that + is taken up by user data. Since indexes have a default fillfactor of 90, + this should be around 90 for newly built indexes of non-negligible size, + but usually deteriorates over time. + leaf_fragmentation represents a measure of disorder. + A higher leaf_fragmentation indicates that the + physical order of the index leaf pages increasingly deviates from their + logical order. This can have a significant impact if a large part + of the index is read from disk. diff --git a/doc/src/sgml/pgwalinspect.sgml b/doc/src/sgml/pgwalinspect.sgml index 3a8121c70f1f1..79c3ead40bc71 100644 --- a/doc/src/sgml/pgwalinspect.sgml +++ b/doc/src/sgml/pgwalinspect.sgml @@ -73,9 +73,9 @@ postgres=# SELECT * FROM pg_get_wal_record_info('0/E419E28'); -[ RECORD 1 ]----+------------------------------------------------- -start_lsn | 0/E419E28 -end_lsn | 0/E419E68 -prev_lsn | 0/E419D78 +start_lsn | 0/0E419E28 +end_lsn | 0/0E419E68 +prev_lsn | 0/0E419D78 xid | 0 resource_manager | Heap2 record_type | VACUUM @@ -146,9 +146,9 @@ block_ref | postgres=# SELECT * FROM pg_get_wal_block_info('0/1230278', '0/12302B8'); -[ RECORD 1 ]-----+----------------------------------- -start_lsn | 0/1230278 -end_lsn | 0/12302B8 -prev_lsn | 0/122FD40 +start_lsn | 0/01230278 +end_lsn | 0/012302B8 +prev_lsn | 0/0122FD40 block_id | 0 reltablespace | 1663 reldatabase | 1 diff --git a/doc/src/sgml/plpython.sgml b/doc/src/sgml/plpython.sgml index bee817ea822a2..27c4467ba7da3 100644 --- a/doc/src/sgml/plpython.sgml +++ b/doc/src/sgml/plpython.sgml @@ -1,6 +1,6 @@ - + PL/Python — Python Procedural Language PL/Python @@ -662,6 +662,14 @@ $$ LANGUAGE plpython3u; in PL/Python + + PL/Python can be used to define trigger + functions. + PostgreSQL requires that a function that is to + be called as a trigger must be declared as a function with no arguments and + a return type of trigger. + + When a function is used as a trigger, the dictionary TD contains trigger-related values: @@ -769,6 +777,74 @@ $$ LANGUAGE plpython3u; + + Event Trigger Functions + + + event trigger + in PL/Python + + + + PL/Python can be used to define event triggers + (see also ). + PostgreSQL requires that a function that is to + be called as an event trigger must be declared as a function with no + arguments and a return type of event_trigger. + + + + When a function is used as an event trigger, the dictionary + TD contains trigger-related values: + + + + TD["event"] + + + The event the trigger was fired for, as a string, for example + ddl_command_start. + + + + + + TD["tag"] + + + The command tag for which the trigger was fired, as a string, for + example DROP TABLE. + + + + + + + + shows an example of an + event trigger function in PL/Python. + + + + A <application>PL/Python</application> Event Trigger Function + + + This example trigger simply raises a NOTICE message + each time a supported command is executed. + + + +CREATE OR REPLACE FUNCTION pysnitch() RETURNS event_trigger +LANGUAGE plpython3u +AS $$ + plpy.notice("TD[event] => " + TD["event"] + " ; TD[tag] => " + TD["tag"]); +$$; + +CREATE EVENT TRIGGER pysnitch ON ddl_command_start EXECUTE FUNCTION pysnitch(); + + + + Database Access diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 04d8e7d21af9c..b5395604fb8b7 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -18,22 +18,10 @@ - This document describes version 3.0 of the protocol, implemented in - PostgreSQL 7.4 and later. For descriptions - of the earlier protocol versions, see previous releases of the - PostgreSQL documentation. A single server - can support multiple protocol versions. The initial startup-request - message tells the server which protocol version the client is attempting to - use. If the major version requested by the client is not supported by - the server, the connection will be rejected (for example, this would occur - if the client requested protocol version 4.0, which does not exist as of - this writing). If the minor version requested by the client is not - supported by the server (e.g., the client requests version 3.1, but the - server supports only 3.0), the server may either reject the connection or - may respond with a NegotiateProtocolVersion message containing the highest - minor protocol version which it supports. The client may then choose either - to continue with the connection using the specified protocol version or - to abort the connection. + This document describes version 3.2 of the protocol, introduced in + PostgreSQL version 18. The server and the libpq + client library are backwards compatible with protocol version 3.0, + implemented in PostgreSQL 7.4 and later. @@ -199,6 +187,90 @@ server versions; the text format is usually the more portable choice. + + + Protocol Versions + + + The current, latest version of the protocol is version 3.2. However, for + backwards compatibility with old server versions and middleware that don't + support the version negotiation yet, libpq still uses protocol version 3.0 + by default. + + + + A single server can support multiple protocol versions. The initial + startup-request message tells the server which protocol version the client + is attempting to use. If the major version requested by the client is not + supported by the server, the connection will be rejected (for example, + this would occur if the client requested protocol version 4.0, which does + not exist as of this writing). If the minor version requested by the + client is not supported by the server (e.g., the client requests version + 3.2, but the server supports only 3.0), the server may either reject the + connection or may respond with a NegotiateProtocolVersion message + containing the highest minor protocol version which it supports. The + client may then choose either to continue with the connection using the + specified protocol version or to abort the connection. + + + + The protocol negotiation was introduced in + PostgreSQL version 9.3.21. Earlier versions + would reject the connection if the client requested a minor version that + was not supported by the server. + + + + shows the currently supported + protocol versions. + + +
+ Protocol Versions + + + + + Version + Supported by + Description + + + + + + 3.2 + PostgreSQL 18 and later + Current latest version. The secret key used in query + cancellation was enlarged from 4 bytes to a variable length field. The + BackendKeyData message was changed to accommodate that, and the CancelRequest + message was redefined to have a variable length payload. + + + + 3.1 + - + Reserved. Version 3.1 has not been used by any PostgreSQL + version, but it was skipped because old versions of the popular + pgbouncer application had a bug in the protocol negotiation which made + it incorrectly claim that it supported version 3.1. + + + + 3.0 + PostgreSQL 7.4 and later + + + 2.0 + up to PostgreSQL 13 + See previous releases of + the PostgreSQL documentation for + details + + + +
+ @@ -413,8 +485,14 @@ this message indicates the highest supported minor version. This message will also be sent if the client requested unsupported protocol options (i.e., beginning with _pq_.) in the - startup packet. This message will be followed by an ErrorResponse or - a message indicating the success or failure of authentication. + startup packet. + + + After this message, the authentication will continue using the version + indicated by the server. If the client does not support the older + version, it should immediately close the connection. If the server + does not send this message, it supports the client's requested + protocol version and all the protocol options. @@ -459,6 +537,11 @@ The frontend should not respond to this message, but should continue listening for a ReadyForQuery message. + + The PostgreSQL server will always send this + message, but some third party backend implementations of the protocol + that don't support query cancellation are known not to. + @@ -808,6 +891,16 @@ SELCT 1/0; Errors detected at semantic analysis or later, such as a misspelled table or column name, do not have this effect. + + + Lastly, note that all the statements within the Query message will + observe the same value of statement_timestamp(), + since that timestamp is updated only upon receipt of the Query + message. This will result in them all observing the same + value of transaction_timestamp() as well, + except in cases where the query string ends a previously-started + transaction and begins a new one. + @@ -2147,6 +2240,8 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" The name of the slot to create. Must be a valid replication slot name (see ). + The name cannot be pg_conflict_detection as it + is reserved for the conflict detection. @@ -2460,8 +2555,8 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" - - XLogData (B) + + WALData (B) @@ -2509,11 +2604,11 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" - A single WAL record is never split across two XLogData messages. + A single WAL record is never split across two WALData messages. When a WAL record crosses a WAL page boundary, and is therefore already split using continuation records, it can be split at the page boundary. In other words, the first main WAL record and its - continuation records can be sent in different XLogData messages. + continuation records can be sent in different WALData messages. @@ -2565,6 +2660,65 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" + + + Primary status update (B) + + + + Byte1('s') + + + Identifies the message as a primary status update. + + + + + + Int64 + + + The latest WAL write position on the server. + + + + + + Int64 + + + The oldest transaction ID that is currently in the commit phase on + the server, along with its epoch. The most significant 32 bits are + the epoch. The least significant 32 bits are the transaction ID. + If no transactions are active on the server, this number will be + the next transaction ID to be assigned. + + + + + + Int64 + + + The next transaction ID to be assigned on the server, along with + its epoch. The most significant 32 bits are the epoch. The least + significant 32 bits are the transaction ID. + + + + + + Int64 + + + The server's system clock at the time of transmission, as + microseconds since midnight on 2000-01-01. + + + + + + @@ -2709,6 +2863,33 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" + + + Request primary status update (F) + + + + Byte1('p') + + + Identifies the message as a request for a primary status update. + + + + + + Int64 + + + The client's system clock at the time of transmission, as + microseconds since midnight on 2000-01-01. + + + + + + + @@ -2774,7 +2955,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" The name of an option passed to the slot's logical decoding output - plugin. See for + plugin. See for options that are accepted by the standard (pgoutput) plugin. @@ -3342,128 +3523,15 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" the physical streaming replication protocol. - - PostgreSQL logical decoding supports output - plugins. pgoutput is the standard one used for - the built-in logical replication. - - Logical Streaming Replication Parameters - Using the START_REPLICATION command, - pgoutput accepts the following options: - - - - - proto_version - - - - Protocol version. Currently versions 1, 2, - 3, and 4 are supported. A valid - version is required. - - - Version 2 is supported only for server version 14 - and above, and it allows streaming of large in-progress transactions. - - - Version 3 is supported only for server version 15 - and above, and it allows streaming of two-phase commits. - - - Version 4 is supported only for server version 16 - and above, and it allows streams of large in-progress transactions to - be applied in parallel. - - - - - - - publication_names - - - - Comma-separated list of publication names for which to subscribe - (receive changes). The individual publication names are treated - as standard objects names and can be quoted the same as needed. - At least one publication name is required. - - - - - - - binary - - - - Boolean option to use binary transfer mode. Binary mode is faster - than the text mode but slightly less robust. - - - - - - - messages - - - - Boolean option to enable sending the messages that are written - by pg_logical_emit_message. - - - - - - - streaming - - - - Boolean option to enable streaming of in-progress transactions. - It accepts an additional value "parallel" to enable sending extra - information with some messages to be used for parallelisation. - Minimum protocol version 2 is required to turn it on. Minimum protocol - version 4 is required for the "parallel" option. - - - - - - - two_phase - - - - Boolean option to enable two-phase transactions. Minimum protocol - version 3 is required to turn it on. - - - - - - - origin - - - - Option to send changes by their origin. Possible values are - none to only send the changes that have no origin - associated, or any - to send the changes regardless of their origin. This can be used - to avoid loops (infinite replication of the same data) among - replication nodes. - - - - - + The START_REPLICATION command can pass + options to the logical decoding output plugin associated + with the specified replication slot. + See for options + that are accepted by the standard (pgoutput) plugin. @@ -3624,10 +3692,10 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" indicate that it can be sent by a frontend (F), a backend (B), or both (F & B). Notice that although each message includes a byte count at the beginning, - the message format is defined so that the message end can be found without - reference to the byte count. This aids validity checking. (The CopyData - message is an exception, because it forms part of a data stream; the contents - of any individual CopyData message cannot be interpretable on their own.) + most messages are defined so that the message end can be found without + reference to the byte count. This is for historical reasons, as the + original, now-obsolete protocol version 2 did not have an explicit length + field. It also aids validity checking though. @@ -4043,7 +4111,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" - Int32(12) + Int32 Length of message contents in bytes, including self. @@ -4061,14 +4129,29 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" - Int32 + Byten - The secret key of this backend. + The secret key of this backend. This field extends to the end of the + message, indicated by the length field. + + + The minimum and maximum key length are 4 and 256 bytes, respectively. The + PostgreSQL server only sends keys up to + 32 bytes, but the larger maximum size allows for future server + versions, as well as connection poolers and other middleware, to use + longer keys. One possible use case is augmenting the server's key + with extra information. Middleware is therefore also encouraged to + not use up all of the bytes, in case multiple middleware + applications are layered on top of each other, each of which may + wrap the key with extra data. + + Before protocol version 3.2, the secret key was always 4 bytes long. + @@ -4274,14 +4357,18 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" - Int32 + Byten - The secret key for the target backend. + The secret key for the target backend. This field extends to the end of the + message, indicated by the length field. The maximum key length is 256 bytes. + + Before protocol version 3.2, the secret key was always 4 bytes long. + @@ -5984,13 +6071,14 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" - Int32(196608) + Int32 The protocol version number. The most significant 16 bits are - the major version number (3 for the protocol described here). - The least significant 16 bits are the minor version number - (0 for the protocol described here). + the major version number. The least significant 16 bits are the minor + version number. As an example protocol version 3.2 is represented as + 196610 in decimal or more clearly as + 0x00030002 in hexadecimal. @@ -7195,8 +7283,8 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" Int64 (XLogRecPtr) - The LSN of the abort. This field is available since protocol version - 4. + The LSN of the abort operation, present only when streaming is set to parallel. + This field is available since protocol version 4. @@ -7205,9 +7293,9 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" Int64 (TimestampTz) - Abort timestamp of the transaction. The value is in number - of microseconds since PostgreSQL epoch (2000-01-01). This field is - available since protocol version 4. + Abort timestamp of the transaction, present only when streaming is set to + parallel. The value is in number of microseconds since PostgreSQL epoch (2000-01-01). + This field is available since protocol version 4. diff --git a/doc/src/sgml/query.sgml b/doc/src/sgml/query.sgml index 59962d6e85633..b190f28d41ea6 100644 --- a/doc/src/sgml/query.sgml +++ b/doc/src/sgml/query.sgml @@ -264,8 +264,18 @@ COPY weather FROM '/home/user/weather.txt'; where the file name for the source file must be available on the machine running the backend process, not the client, since the backend process - reads the file directly. You can read more about the - COPY command in . + reads the file directly. The data inserted above into the weather table + could also be inserted from a file containing (values are separated by a + tab character): + + +San Francisco 46 50 0.25 1994-11-27 +San Francisco 43 57 0.0 1994-11-29 +Hayward 37 54 \N 1994-11-29 + + + You can read more about the COPY command in + . @@ -671,7 +681,7 @@ SELECT max(temp_lo) FROM weather; we might try: -SELECT city FROM weather WHERE temp_lo = max(temp_lo); WRONG +SELECT city FROM weather WHERE temp_lo = max(temp_lo); -- WRONG but this will not work since the aggregate diff --git a/doc/src/sgml/ref/alter_database.sgml b/doc/src/sgml/ref/alter_database.sgml index 2479c41e8d635..1fc051e11a311 100644 --- a/doc/src/sgml/ref/alter_database.sgml +++ b/doc/src/sgml/ref/alter_database.sgml @@ -82,7 +82,8 @@ ALTER DATABASE name RESET ALL default tablespace to the new tablespace. The new default tablespace must be empty for this database, and no one can be connected to the database. Tables and indexes in non-default tablespaces are - unaffected. + unaffected. The method used to copy files to the new tablespace + is affected by the setting. diff --git a/doc/src/sgml/ref/alter_default_privileges.sgml b/doc/src/sgml/ref/alter_default_privileges.sgml index 89aacec4fab84..6acd0f1df914c 100644 --- a/doc/src/sgml/ref/alter_default_privileges.sgml +++ b/doc/src/sgml/ref/alter_default_privileges.sgml @@ -51,6 +51,11 @@ GRANT { { USAGE | CREATE } ON SCHEMAS TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] +GRANT { { SELECT | UPDATE } + [, ...] | ALL [ PRIVILEGES ] } + ON LARGE OBJECTS + TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] + REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN } [, ...] | ALL [ PRIVILEGES ] } @@ -83,6 +88,13 @@ REVOKE [ GRANT OPTION FOR ] ON SCHEMAS FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] + +REVOKE [ GRANT OPTION FOR ] + { { SELECT | UPDATE } + [, ...] | ALL [ PRIVILEGES ] } + ON LARGE OBJECTS + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ] @@ -117,8 +129,8 @@ REVOKE [ GRANT OPTION FOR ] Currently, only the privileges for schemas, tables (including views and foreign - tables), sequences, functions, and types (including domains) can be - altered. For this command, functions include aggregates and procedures. + tables), sequences, functions, types (including domains), and large objects + can be altered. For this command, functions include aggregates and procedures. The words FUNCTIONS and ROUTINES are equivalent in this command. (ROUTINES is preferred going forward as the standard term for functions and procedures taken @@ -161,7 +173,8 @@ REVOKE [ GRANT OPTION FOR ] If IN SCHEMA is omitted, the global default privileges are altered. IN SCHEMA is not allowed when setting privileges - for schemas, since schemas can't be nested. + for schemas and large objects, since schemas can't be nested and + large objects don't belong to a schema. diff --git a/doc/src/sgml/ref/alter_subscription.sgml b/doc/src/sgml/ref/alter_subscription.sgml index fdc648d007f1c..d48cdc76bd34d 100644 --- a/doc/src/sgml/ref/alter_subscription.sgml +++ b/doc/src/sgml/ref/alter_subscription.sgml @@ -235,8 +235,9 @@ ALTER SUBSCRIPTION name RENAME TO < password_required, run_as_owner, origin, - failover, and - two_phase. + failover, + two_phase, and + retain_dead_tuples. Only a superuser can set password_required = false. @@ -261,8 +262,9 @@ ALTER SUBSCRIPTION name RENAME TO < - The failover - and two_phase + The failover, + two_phase, and + retain_dead_tuples parameters can only be altered when the subscription is disabled. @@ -285,6 +287,14 @@ ALTER SUBSCRIPTION name RENAME TO < option is changed from true to false, the publisher will replicate the transactions again when they are committed. + + + If the retain_dead_tuples + option is altered to false and no other subscription + has this option enabled, the replication slot named + pg_conflict_detection, created to retain + dead tuples for conflict detection, will be dropped. + diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 11d1bc7dbe192..8867da6c69307 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -58,7 +58,7 @@ ALTER TABLE [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET COMPRESSION compression_method ADD table_constraint [ NOT VALID ] ADD table_constraint_using_index - ALTER CONSTRAINT constraint_name [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ALTER CONSTRAINT constraint_name [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ ENFORCED | NOT ENFORCED ] ALTER CONSTRAINT constraint_name [ INHERIT | NO INHERIT ] VALIDATE CONSTRAINT constraint_name DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] @@ -210,6 +210,8 @@ WITH ( MODULUS numeric_literal, REM When this form is used, the column's statistics are removed, so running ANALYZE on the table afterwards is recommended. + For a virtual generated column, ANALYZE + is not necessary because such columns never have statistics. @@ -240,9 +242,12 @@ WITH ( MODULUS numeric_literal, REM provided none of the records in the table contain a NULL value for the column. Ordinarily this is checked during the ALTER TABLE by scanning the - entire table; however, if a valid CHECK constraint is - found which proves no NULL can exist, then the - table scan is skipped. + entire table, unless NOT VALID is specified; + however, if a valid CHECK constraint exists + (and is not dropped in the same command) which proves no + NULL can exist, then the table scan is skipped. + If a column has an invalid not-null constraint, + SET NOT NULL validates it. @@ -268,6 +273,15 @@ WITH ( MODULUS numeric_literal, REM in a stored generated column is rewritten and all the future changes will apply the new generation expression. + + + When this form is used on a stored generated column, its statistics + are removed, so running + ANALYZE + on the table afterwards is recommended. + For a virtual generated column, ANALYZE + is not necessary because such columns never have statistics. + @@ -458,8 +472,8 @@ WITH ( MODULUS numeric_literal, REM This form adds a new constraint to a table using the same constraint syntax as CREATE TABLE, plus the option NOT - VALID, which is currently only allowed for foreign key - and CHECK constraints. + VALID, which is currently only allowed for foreign-key, + CHECK, and not-null constraints. @@ -467,7 +481,7 @@ WITH ( MODULUS numeric_literal, REM existing rows in the table satisfy the new constraint. But if the NOT VALID option is used, this potentially-lengthy scan is skipped. The constraint will still be - enforced against subsequent inserts or updates (that is, they'll fail + applied against subsequent inserts or updates (that is, they'll fail unless there is a matching row in the referenced table, in the case of foreign keys, or they'll fail unless the new row matches the specified check condition). But the @@ -586,10 +600,11 @@ WITH ( MODULUS numeric_literal, REM VALIDATE CONSTRAINT - This form validates a foreign key or check constraint that was + This form validates a foreign key, check, or not-null constraint that was previously created as NOT VALID, by scanning the table to ensure there are no rows for which the constraint is not - satisfied. Nothing happens if the constraint is already marked valid. + satisfied. If the constraint was set to NOT ENFORCED, an error is thrown. + Nothing happens if the constraint is already marked valid. (See below for an explanation of the usefulness of this command.) @@ -849,7 +864,7 @@ WITH ( MODULUS numeric_literal, REM SHARE UPDATE EXCLUSIVE lock will be taken for - fillfactor, toast and autovacuum storage parameters, as well as the + fillfactor, TOAST and autovacuum storage parameters, as well as the planner parameter parallel_workers. @@ -1433,32 +1448,41 @@ WITH ( MODULUS numeric_literal, REM Adding a column with a volatile DEFAULT - (e.g., clock_timestamp()), a generated column - (e.g., GENERATED BY DEFAULT AS IDENTITY), a domain - data type with constraints will require the entire table and its - indexes to be rewritten, as will changing the type of an existing - column. As an exception, when changing the type of an existing column, + (e.g., clock_timestamp()), a stored generated column, + an identity column, or a column with a domain data type that has + constraints will cause the entire table and its indexes to be rewritten. + Adding a virtual generated column never requires a rewrite. + + + + Changing the type of an existing column will normally cause the entire table + and its indexes to be rewritten. + As an exception, when changing the type of an existing column, if the USING clause does not change the column contents and the old type is either binary coercible to the new type or an unconstrained domain over the new type, a table rewrite is not - needed. However, indexes must always be rebuilt unless the system + needed. However, indexes will still be rebuilt unless the system can verify that the new index would be logically equivalent to the existing one. For example, if the collation for a column has been changed, an index rebuild is required because the new sort order might be different. However, in the absence of a collation change, a column can be changed from text to varchar (or vice versa) without rebuilding the indexes - because these data types sort identically. Table and/or index + because these data types sort identically. + + + + Table and/or index rebuilds may take a significant amount of time for a large table, and will temporarily require as much as double the disk space. - Adding an enforced CHECK or NOT NULL + Adding a CHECK or NOT NULL constraint requires scanning the table to verify that existing rows meet the constraint, but does not require a table rewrite. If a CHECK - constraint is added as NOT ENFORCED, the validation will - not be performed. + constraint is added as NOT ENFORCED, no verification will + be performed. @@ -1473,7 +1497,7 @@ WITH ( MODULUS numeric_literal, REM - Scanning a large table to verify a new foreign key or check constraint + Scanning a large table to verify new foreign-key, check, or not-null constraints can take a long time, and other updates to the table are locked out until the ALTER TABLE ADD CONSTRAINT command is committed. The main purpose of the NOT VALID diff --git a/doc/src/sgml/ref/checkpoint.sgml b/doc/src/sgml/ref/checkpoint.sgml index db011a47d0458..cd981cf2cab9f 100644 --- a/doc/src/sgml/ref/checkpoint.sgml +++ b/doc/src/sgml/ref/checkpoint.sgml @@ -21,7 +21,12 @@ PostgreSQL documentation -CHECKPOINT +CHECKPOINT [ ( option [, ...] ) ] + +where option can be one of: + + FLUSH_UNLOGGED [ boolean ] + MODE { FAST | SPREAD } @@ -37,14 +42,24 @@ CHECKPOINT - The CHECKPOINT command forces an immediate + By default, the CHECKPOINT command forces a fast checkpoint when the command is issued, without waiting for a regular checkpoint scheduled by the system (controlled by the settings in ). + To request the checkpoint be spread over a longer interval, set the + MODE option to SPREAD. CHECKPOINT is not intended for use during normal operation. + + The server may consolidate concurrently requested checkpoints. Such + consolidated requests will contain a combined set of options. For example, + if one session requests a fast checkpoint and another requests a spread + checkpoint, the server may combine those requests and perform one fast + checkpoint. + + If executed during recovery, the CHECKPOINT command will force a restartpoint (see ) @@ -58,6 +73,55 @@ CHECKPOINT + + Parameters + + + + FLUSH_UNLOGGED + + + Normally, CHECKPOINT does not flush dirty buffers of + unlogged relations. This option, which is disabled by default, enables + flushing unlogged relations to disk. + + + + + + MODE + + + When set to FAST, which is the default, the requested + checkpoint will be completed as fast as possible, which may result in a + significantly higher rate of I/O during the checkpoint. + + + MODE can also be set to SPREAD to + request the checkpoint be spread over a longer interval (controlled via + the settings in ), like a + regular checkpoint scheduled by the system. This can reduce the rate of + I/O during the checkpoint. + + + + + + boolean + + + Specifies whether the selected option should be turned on or off. + You can write TRUE, ON, or + 1 to enable the option, and FALSE, + OFF, or 0 to disable it. The + boolean value can also + be omitted, in which case TRUE is assumed. + + + + + + Compatibility diff --git a/doc/src/sgml/ref/clusterdb.sgml b/doc/src/sgml/ref/clusterdb.sgml index d3145318b361f..0d2051bf6f188 100644 --- a/doc/src/sgml/ref/clusterdb.sgml +++ b/doc/src/sgml/ref/clusterdb.sgml @@ -248,9 +248,8 @@ PostgreSQL documentation - Specifies the name of the database to connect to to discover which - databases should be clustered, - when / is used. + When the / is used, connect + to this database to gather the list of databases to cluster. If not specified, the postgres database will be used, or if that does not exist, template1 will be used. This can be a connection diff --git a/doc/src/sgml/ref/copy.sgml b/doc/src/sgml/ref/copy.sgml index df093da97c5ed..c2d1fbc1fbe94 100644 --- a/doc/src/sgml/ref/copy.sgml +++ b/doc/src/sgml/ref/copy.sgml @@ -37,7 +37,7 @@ COPY { table_name [ ( delimiter_character' NULL 'null_string' DEFAULT 'default_string' - HEADER [ boolean | MATCH ] + HEADER [ boolean | integer | MATCH ] QUOTE 'quote_character' ESCAPE 'escape_character' FORCE_QUOTE { ( column_name [, ...] ) | * } @@ -212,6 +212,15 @@ COPY { table_name [ ( + + integer + + + Specifies a non-negative integer value passed to the selected option. + + + + FORMAT @@ -303,16 +312,25 @@ COPY { table_name [ ( HEADER - Specifies that the file contains a header line with the names of each - column in the file. On output, the first line contains the column - names from the table. On input, the first line is discarded when this - option is set to true (or equivalent Boolean value). - If this option is set to MATCH, the number and names - of the columns in the header line must match the actual column names of - the table, in order; otherwise an error is raised. + On output, if this option is set to true + (or an equivalent Boolean value), the first line of the output will + contain the column names from the table. + Integer values 0 and 1 are + accepted as Boolean values, but other integers are not allowed for + COPY TO commands. + + + On input, if this option is set to true + (or an equivalent Boolean value), the first line of the input is + discarded. If set to a non-negative integer, that number of + lines are discarded. If set to MATCH, the first line + is discarded, and it must contain column names that exactly match the + table's columns, in both number and order; otherwise, an error is raised. + The MATCH value is only valid for + COPY FROM commands. + + This option is not allowed when using binary format. - The MATCH option is only valid for COPY - FROM commands. @@ -520,16 +538,16 @@ COPY count Notes - COPY TO can be used only with plain - tables, not views, and does not copy rows from child tables - or child partitions. For example, COPY table TO copies - the same rows as SELECT * FROM ONLY table. - The syntax COPY (SELECT * FROM table) TO ... can be used to - dump all of the rows in an inheritance hierarchy, partitioned table, - or view. + COPY TO can be used with plain + tables and populated materialized views. + For example, + COPY table + TO copies the same rows as + SELECT * FROM ONLY table. + However it doesn't directly support other relation types, + such as partitioned tables, inheritance child tables, or views. + To copy all rows from such relations, use COPY (SELECT * FROM + table) TO. @@ -677,7 +695,7 @@ COPY count backward compatibility. However, psql uses \. to terminate a COPY FROM STDIN operation (that is, reading - in-line COPY data in a SQL script). In that + in-line COPY data in an SQL script). In that context the rule is needed to be able to end the operation before the end of the script. @@ -844,7 +862,7 @@ COPY count is not normally treated as special when reading CSV data. An exception is that psql will terminate a COPY FROM STDIN operation (that is, reading - in-line COPY data in a SQL script) at a line containing + in-line COPY data in an SQL script) at a line containing only \., whether it is text or CSV mode. diff --git a/doc/src/sgml/ref/create_database.sgml b/doc/src/sgml/ref/create_database.sgml index a4b052ba08b77..3544b15efdafa 100644 --- a/doc/src/sgml/ref/create_database.sgml +++ b/doc/src/sgml/ref/create_database.sgml @@ -138,7 +138,9 @@ CREATE DATABASE name log volume substantially, especially if the template database is large, it also forces the system to perform a checkpoint both before and after the creation of the new database. In some situations, this may - have a noticeable negative impact on overall system performance. + have a noticeable negative impact on overall system performance. The + FILE_COPY strategy is affected by the setting. @@ -148,12 +150,12 @@ CREATE DATABASE name Sets the default collation order and character classification in the new database. Collation affects the sort order applied to strings, - e.g., in queries with ORDER BY, as well as the order used in indexes - on text columns. Character classification affects the categorization - of characters, e.g., lower, upper, and digit. Also sets the - associated aspects of the operating system environment, - LC_COLLATE and LC_CTYPE. The - default is the same setting as the template database. See ORDER BY, as well as the + order used in indexes on text columns. Character classification + affects the categorization of characters, e.g., lower, upper, and + digit. Also sets the LC_CTYPE aspect of the + operating system environment. The default is the same setting as the + template database. See and for details. @@ -187,17 +189,16 @@ CREATE DATABASE name lc_collate - Sets LC_COLLATE in the database server's operating - system environment. The default is the setting of if specified, otherwise the same - setting as the template database. See below for additional - restrictions. + If is + libc, sets the default collation order to use in + the new database, overriding the setting . Otherwise, this setting is + ignored. - If is - libc, also sets the default collation order to use - in the new database, overriding the setting . + The default is the setting of + if specified, otherwise the same setting as the template database. + See below for additional restrictions. @@ -206,16 +207,18 @@ CREATE DATABASE name Sets LC_CTYPE in the database server's operating - system environment. The default is the setting of if specified, otherwise the same - setting as the template database. See below for additional - restrictions. + system environment. If is - libc, also sets the default character - classification to use in the new database, overriding the setting - . + libc, sets the default character classification to + use in the new database, overriding the setting . + + + The default is the setting of + if specified, otherwise the same setting as the template database. + See below for additional restrictions. diff --git a/doc/src/sgml/ref/create_domain.sgml b/doc/src/sgml/ref/create_domain.sgml index ce55520348620..c111285a69c6d 100644 --- a/doc/src/sgml/ref/create_domain.sgml +++ b/doc/src/sgml/ref/create_domain.sgml @@ -283,7 +283,8 @@ CREATE TABLE us_snail_addy ( The syntax NOT NULL in this command is a PostgreSQL extension. (A standard-conforming - way to write the same would be CHECK (VALUE IS NOT + way to write the same for non-composite data types would be + CHECK (VALUE IS NOT NULL). However, per , such constraints are best avoided in practice anyway.) The NULL constraint is a diff --git a/doc/src/sgml/ref/create_foreign_table.sgml b/doc/src/sgml/ref/create_foreign_table.sgml index d08834ac9d291..009fa46532bbe 100644 --- a/doc/src/sgml/ref/create_foreign_table.sgml +++ b/doc/src/sgml/ref/create_foreign_table.sgml @@ -232,7 +232,7 @@ WITH ( MODULUS numeric_literal, REM INCLUDING COMMENTS - Comments for the copied columns, constraints, and indexes will be + Comments for the copied columns and constraints will be copied. The default behavior is to exclude comments, resulting in the copied columns and constraints in the new table having no comments. diff --git a/doc/src/sgml/ref/create_index.sgml b/doc/src/sgml/ref/create_index.sgml index 208389e80060b..b9c679c41e8db 100644 --- a/doc/src/sgml/ref/create_index.sgml +++ b/doc/src/sgml/ref/create_index.sgml @@ -387,9 +387,13 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] The optional WITH clause specifies storage - parameters for the index. Each index method has its own set of allowed - storage parameters. The B-tree, hash, GiST and SP-GiST index methods all - accept this parameter: + parameters for the index. Each index method has its own set + of allowed storage parameters. + + + + The B-tree, hash, GiST and SP-GiST index methods all accept this + parameter: @@ -401,7 +405,7 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] - The fillfactor for an index is a percentage that determines how full + Controls how full the index method will try to pack index pages. For B-trees, leaf pages are filled to this percentage during initial index builds, and also when extending the index at the right (adding new largest key values). @@ -488,7 +492,7 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] - Determines whether the buffered build technique described in + Controls whether the buffered build technique described in is used to build the index. With OFF buffering is disabled, with ON it is enabled, and with AUTO it is initially disabled, @@ -503,7 +507,7 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] - GIN indexes accept different parameters: + GIN indexes accept these parameters: @@ -515,8 +519,8 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] - This setting controls usage of the fast update technique described in - . It is a Boolean parameter: + Controls usage of the fast update technique described in + . ON enables fast update, OFF disables it. The default is ON. @@ -525,8 +529,9 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] Turning fastupdate off via ALTER INDEX prevents future insertions from going into the list of pending index entries, - but does not in itself flush previous entries. You might want to - VACUUM the table or call gin_clean_pending_list + but does not in itself flush existing entries. You might want to + VACUUM the table or call + the gin_clean_pending_list function afterward to ensure the pending list is emptied. @@ -544,7 +549,8 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] - Custom parameter. + Overrides the global setting of + for this index. This value is specified in kilobytes. @@ -552,7 +558,7 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] - BRIN indexes accept different parameters: + BRIN indexes accept these parameters: @@ -580,8 +586,8 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] Defines whether a summarization run is queued for the previous page - range whenever an insertion is detected on the next one. - See for more details. + range whenever an insertion is detected on the next one + (see for more details). The default is off. @@ -808,7 +814,7 @@ Indexes: leveraging multiple CPUs in order to process the table rows faster. This feature is known as parallel index build. For index methods that support building indexes - in parallel (currently, B-tree and BRIN), + in parallel (currently, B-tree, GIN, and BRIN), maintenance_work_mem specifies the maximum amount of memory that can be used by each index build operation as a whole, regardless of how many worker processes were started. diff --git a/doc/src/sgml/ref/create_operator.sgml b/doc/src/sgml/ref/create_operator.sgml index 3553d36454185..d2ffb1b2a500f 100644 --- a/doc/src/sgml/ref/create_operator.sgml +++ b/doc/src/sgml/ref/create_operator.sgml @@ -23,7 +23,7 @@ PostgreSQL documentation CREATE OPERATOR name ( {FUNCTION|PROCEDURE} = function_name - [, LEFTARG = left_type ] [, RIGHTARG = right_type ] + [, LEFTARG = left_type ] , RIGHTARG = right_type [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ] [, RESTRICT = res_proc ] [, JOIN = join_proc ] [, HASHES ] [, MERGES ] @@ -88,8 +88,8 @@ CREATE OPERATOR name ( For binary operators, both LEFTARG and - RIGHTARG must be defined. For prefix operators only - RIGHTARG should be defined. + RIGHTARG must be defined. For prefix operators, only + RIGHTARG must be defined. The function_name function must have been previously defined using CREATE FUNCTION and must be defined to accept the correct number diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml index 73f0c8d89fb00..802630f2df116 100644 --- a/doc/src/sgml/ref/create_publication.sgml +++ b/doc/src/sgml/ref/create_publication.sgml @@ -89,10 +89,12 @@ CREATE PUBLICATION name When a column list is specified, only the named columns are replicated. - The column list can contain stored generated columns as well. If no - column list is specified, all table columns (except generated columns) - are replicated through this publication, including any columns added - later. It has no effect on TRUNCATE commands. See + The column list can contain stored generated columns as well. If the + column list is omitted, the publication will replicate all non-generated + columns (including any added in the future) by default. Stored generated + columns can also be replicated if publish_generated_columns + is set to stored. Specifying a column list has no + effect on TRUNCATE commands. See for details about column lists. diff --git a/doc/src/sgml/ref/create_subscription.sgml b/doc/src/sgml/ref/create_subscription.sgml index 57dec28a5df64..247c5bd260410 100644 --- a/doc/src/sgml/ref/create_subscription.sgml +++ b/doc/src/sgml/ref/create_subscription.sgml @@ -169,7 +169,9 @@ CREATE SUBSCRIPTION subscription_name Name of the publisher's replication slot to use. The default is - to use the name of the subscription for the slot name. + to use the name of the subscription for the slot name. The name cannot + be pg_conflict_detection as it is reserved for the + conflict detection. @@ -435,6 +437,90 @@ CREATE SUBSCRIPTION subscription_name + + + retain_dead_tuples (boolean) + + + Specifies whether the information (e.g., dead tuples, commit + timestamps, and origins) required for conflict detection on the + subscriber is retained. The default is false. + If set to true, the detection of + is enabled, and a physical + replication slot named pg_conflict_detection + created on the subscriber to prevent the information for detecting + conflicts from being removed. + + + + Note that the information useful for conflict detection is retained + only after the creation of the slot. You can verify the existence of + this slot by querying pg_replication_slots. + And even if multiple subscriptions on one node enable this option, + only one replication slot will be created. Also, + wal_level must be set to replica + or higher to allow the replication slot to be used. + + + + + Note that the information for conflict detection cannot be purged if + the subscription is disabled; thus, the information will accumulate + until the subscription is enabled. To prevent excessive accumulation, + it is recommended to disable retain_dead_tuples + if the subscription will be inactive for an extended period. + + + + Additionally when enabling retain_dead_tuples for + conflict detection in logical replication, it is important to design the + replication topology to balance data retention requirements with + overall system performance. This option provides minimal performance + overhead when applied appropriately. The following scenarios illustrate + effective usage patterns when enabling this option. + + + + a. Large Tables with Bidirectional Writes: + For large tables subject to concurrent writes on both publisher and + subscriber nodes, publishers can define row filters when creating + publications to segment data. This allows multiple subscriptions + to replicate exclusive subsets of the table in parallel, optimizing + the throughput. + + + + b. Write-Enabled Subscribers: + If a subscriber node is expected to perform write operations, replication + can be structured using multiple publications and subscriptions. By + distributing tables across these publications, the workload is spread among + several apply workers, improving concurrency and reducing contention. + + + + c. Read-Only Subscribers: + In configurations involving single or multiple publisher nodes + performing concurrent write operations, read-only subscriber nodes may + replicate changes without seeing a performance impact if it does index + scan. However, if the subscriber is impacted due to replication lag or + scan performance (say due to sequential scans), it needs to follow one + of the two previous strategies to distribute the workload on the + subscriber. + + + + + This option cannot be enabled if the publisher is a physical standby. + + + + Enabling this option ensures retention of information useful for + conflict detection solely for changes occurring locally on the + publisher. For the changes originating from different origins, + reliable conflict detection cannot be guaranteed. + + + diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index e5c034d724e48..dc000e913c143 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -447,11 +447,6 @@ WITH ( MODULUS numeric_literal, REM the values in the new row, an error will be reported. - - Partitioned tables do not support EXCLUDE constraints; - however, you can define these constraints on individual partitions. - - See for more discussion on table partitioning. @@ -929,6 +924,15 @@ WITH ( MODULUS numeric_literal, REM not other generated columns. Any functions and operators used must be immutable. References to other tables are not allowed. + + + A virtual generated column cannot have a user-defined type, and the + generation expression of a virtual generated column must not reference + user-defined functions or types, that is, it can only use built-in + functions or types. This applies also indirectly, such as for functions + or types that underlie operators or casts. (This restriction does not + exist for stored generated columns.) + @@ -1162,6 +1166,18 @@ WITH ( MODULUS numeric_literal, REM exclusion constraint on a subset of the table; internally this creates a partial index. Note that parentheses are required around the predicate. + + + When establishing an exclusion constraint for a multi-level partition + hierarchy, all the columns in the partition key of the target + partitioned table, as well as those of all its descendant partitioned + tables, must be included in the constraint definition. Additionally, + those columns must be compared using the equality operator. These + restrictions ensure that potentially-conflicting rows will exist in the + same partition. The constraint may also refer to other columns which + are not a part of any partition key, which can be compared using any + appropriate operator. + @@ -1409,7 +1425,7 @@ WITH ( MODULUS numeric_literal, REM - This is currently only supported for CHECK + This is currently only supported for foreign key and CHECK constraints. @@ -1687,7 +1703,8 @@ WITH ( MODULUS numeric_literal, REM vacuum_truncate, toast.vacuum_truncate (boolean) - vacuum_truncate storage parameter + vacuum_truncate + storage parameter diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml index 982ab6f3ee450..0d8d463479bc1 100644 --- a/doc/src/sgml/ref/create_trigger.sgml +++ b/doc/src/sgml/ref/create_trigger.sgml @@ -29,7 +29,7 @@ PostgreSQL documentation CREATE [ OR REPLACE ] [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] } ON table_name [ FROM referenced_table_name ] - [ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ] + [ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ] [ ENFORCED ] [ REFERENCING { { OLD | NEW } TABLE [ AS ] transition_relation_name } [ ... ] ] [ FOR [ EACH ] { ROW | STATEMENT } ] [ WHEN ( condition ) ] @@ -197,9 +197,11 @@ CREATE [ OR REPLACE ] [ CONSTRAINT ] TRIGGER name of the rows inserted, deleted, or modified by the current SQL statement. This feature lets the trigger see a global view of what the statement did, not just one row at a time. This option is only allowed for - an AFTER trigger that is not a constraint trigger; also, if - the trigger is an UPDATE trigger, it must not specify - a column_name list. + an AFTER trigger on a plain table (not a foreign table). + The trigger should not be a constraint trigger. Also, if the trigger is + an UPDATE trigger, it must not specify + a column_name list when using + this option. OLD TABLE may only be specified once, and only for a trigger that can fire on UPDATE or DELETE; it creates a transition relation containing the before-images of all rows @@ -321,6 +323,15 @@ UPDATE OF column_name1 [, column_name2 + + ENFORCED + + + This is a noise word. Constraint triggers are always enforced. + + + + REFERENCING diff --git a/doc/src/sgml/ref/createdb.sgml b/doc/src/sgml/ref/createdb.sgml index 5c4e0465ed9da..2ccbe13f39008 100644 --- a/doc/src/sgml/ref/createdb.sgml +++ b/doc/src/sgml/ref/createdb.sgml @@ -136,7 +136,8 @@ PostgreSQL documentation - Specifies the LC_COLLATE setting to be used in this database. + Specifies the LC_COLLATE setting to be used in this database (ignored + unless the locale provider is libc). diff --git a/doc/src/sgml/ref/explain.sgml b/doc/src/sgml/ref/explain.sgml index 9ed1061b7ff20..6dda680aa0de8 100644 --- a/doc/src/sgml/ref/explain.sgml +++ b/doc/src/sgml/ref/explain.sgml @@ -202,9 +202,7 @@ ROLLBACK; The number of blocks shown for an upper-level node includes those used by all its child nodes. In text format, only non-zero values are printed. Buffers information is - included by default when ANALYZE is used but - otherwise is not included by default, but can be enabled using this - option. + automatically included when ANALYZE is used. diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index 2f1f9a42f9044..7613174c18b56 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -543,7 +543,7 @@ PostgreSQL documentation Note that if is used in - conjuction with , some or all of + conjunction with , some or all of the aforementioned files and directories will be synchronized because syncfs processes entire file systems. diff --git a/doc/src/sgml/ref/merge.sgml b/doc/src/sgml/ref/merge.sgml index ecbcd8345d874..c2e181066a4e1 100644 --- a/doc/src/sgml/ref/merge.sgml +++ b/doc/src/sgml/ref/merge.sgml @@ -23,37 +23,37 @@ PostgreSQL documentation [ WITH with_query [, ...] ] MERGE INTO [ ONLY ] target_table_name [ * ] [ [ AS ] target_alias ] -USING data_source ON join_condition -when_clause [...] -[ RETURNING [ WITH ( { OLD | NEW } AS output_alias [, ...] ) ] - { * | output_expression [ [ AS ] output_name ] } [, ...] ] + USING data_source ON join_condition + when_clause [...] + [ RETURNING [ WITH ( { OLD | NEW } AS output_alias [, ...] ) ] + { * | output_expression [ [ AS ] output_name ] } [, ...] ] where data_source is: -{ [ ONLY ] source_table_name [ * ] | ( source_query ) } [ [ AS ] source_alias ] + { [ ONLY ] source_table_name [ * ] | ( source_query ) } [ [ AS ] source_alias ] and when_clause is: -{ WHEN MATCHED [ AND condition ] THEN { merge_update | merge_delete | DO NOTHING } | - WHEN NOT MATCHED BY SOURCE [ AND condition ] THEN { merge_update | merge_delete | DO NOTHING } | - WHEN NOT MATCHED [ BY TARGET ] [ AND condition ] THEN { merge_insert | DO NOTHING } } + { WHEN MATCHED [ AND condition ] THEN { merge_update | merge_delete | DO NOTHING } | + WHEN NOT MATCHED BY SOURCE [ AND condition ] THEN { merge_update | merge_delete | DO NOTHING } | + WHEN NOT MATCHED [ BY TARGET ] [ AND condition ] THEN { merge_insert | DO NOTHING } } and merge_insert is: -INSERT [( column_name [, ...] )] -[ OVERRIDING { SYSTEM | USER } VALUE ] -{ VALUES ( { expression | DEFAULT } [, ...] ) | DEFAULT VALUES } + INSERT [( column_name [, ...] )] + [ OVERRIDING { SYSTEM | USER } VALUE ] + { VALUES ( { expression | DEFAULT } [, ...] ) | DEFAULT VALUES } and merge_update is: -UPDATE SET { column_name = { expression | DEFAULT } | - ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | - ( column_name [, ...] ) = ( sub-SELECT ) - } [, ...] + UPDATE SET { column_name = { expression | DEFAULT } | + ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | + ( column_name [, ...] ) = ( sub-SELECT ) + } [, ...] and merge_delete is: -DELETE + DELETE @@ -106,10 +106,11 @@ DELETE to compute and return value(s) based on each row inserted, updated, or deleted. Any expression using the source or target table's columns, or the merge_action() - function can be computed. When an INSERT or + function can be computed. By default, when an INSERT or UPDATE action is performed, the new values of the target - table's columns are used. When a DELETE is performed, - the old values of the target table's columns are used. The syntax of the + table's columns are used, and when a DELETE is performed, + the old values of the target table's columns are used, but it is also + possible to explicitly request old and new values. The syntax of the RETURNING list is identical to that of the output list of SELECT. diff --git a/doc/src/sgml/ref/pg_amcheck.sgml b/doc/src/sgml/ref/pg_amcheck.sgml index 6bfe28799c4e6..ef2bdfd19ae5d 100644 --- a/doc/src/sgml/ref/pg_amcheck.sgml +++ b/doc/src/sgml/ref/pg_amcheck.sgml @@ -41,7 +41,7 @@ PostgreSQL documentation - Only ordinary and toast table relations, materialized views, sequences, and + Only ordinary and TOAST table relations, materialized views, sequences, and btree indexes are currently supported. Other relation types are silently skipped. @@ -276,7 +276,7 @@ PostgreSQL documentation - By default, if a table is checked, its toast table, if any, will also + By default, if a table is checked, its TOAST table, if any, will also be checked, even if it is not explicitly selected by an option such as --table or --relation. This option suppresses that behavior. @@ -306,9 +306,9 @@ PostgreSQL documentation - By default, whenever a toast pointer is encountered in a table, + By default, whenever a TOAST pointer is encountered in a table, a lookup is performed to ensure that it references apparently-valid - entries in the toast table. These checks can be quite slow, and this + entries in the TOAST table. These checks can be quite slow, and this option can be used to skip them. @@ -368,9 +368,9 @@ PostgreSQL documentation End checking at the specified block number. An error will occur if the table relation being checked has fewer than this number of blocks. This option does not apply to indexes, and is probably only useful when - checking a single table relation. If both a regular table and a toast + checking a single table relation. If both a regular table and a TOAST table are checked, this option will apply to both, but higher-numbered - toast blocks may still be accessed while validating toast pointers, + TOAST blocks may still be accessed while validating TOAST pointers, unless that is suppressed using . diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml index 9659f76042c5b..fecee08b0a536 100644 --- a/doc/src/sgml/ref/pg_basebackup.sgml +++ b/doc/src/sgml/ref/pg_basebackup.sgml @@ -500,8 +500,9 @@ PostgreSQL documentation - Sets checkpoint mode to fast (immediate) or spread (the default) + Sets checkpoint mode to fast or spread (see ). + The default is spread. diff --git a/doc/src/sgml/ref/pg_combinebackup.sgml b/doc/src/sgml/ref/pg_combinebackup.sgml index 55bc46849db58..330a598f7013e 100644 --- a/doc/src/sgml/ref/pg_combinebackup.sgml +++ b/doc/src/sgml/ref/pg_combinebackup.sgml @@ -81,6 +81,35 @@ PostgreSQL documentation + + + + + + Use hard links instead of copying files to the synthetic backup. + Reconstruction of the synthetic backup might be faster (no file copying) + and use less disk space, but care must be taken when using the output + directory, because any modifications to that directory (for example, + starting the server) can also affect the input directories. Likewise, + changes to the input directories (for example, starting the server on + the full backup) could affect the output directory. Thus, this option + is best used when the input directories are only copies that will be + removed after pg_combinebackup has completed. + + + + Requires that the input backups and the output directory are in the + same file system. + + + + If a backup manifest is not available or does not contain checksum of + the right type, hard links will still be created, but the file will be + also read block-by-block for the checksum calculation. + + + + @@ -137,35 +166,6 @@ PostgreSQL documentation - - - - - - Use hard links instead of copying files to the synthetic backup. - Reconstruction of the synthetic backup might be faster (no file copying) - and use less disk space, but care must be taken when using the output - directory, because any modifications to that directory (for example, - starting the server) can also affect the input directories. Likewise, - changes to the input directories (for example, starting the server on - the full backup) could affect the output directory. Thus, this option - is best used when the input directories are only copies that will be - removed after pg_combinebackup has completed. - - - - Requires that the input backups and the output directory are in the - same file system. - - - - If a backup manifest is not available or does not contain checksum of - the right type, hard links will still be created, but the file will be - also read block-by-block for the checksum calculation. - - - - diff --git a/doc/src/sgml/ref/pg_createsubscriber.sgml b/doc/src/sgml/ref/pg_createsubscriber.sgml index 1f0ddd7f9f2c7..bb9cc72576c4a 100644 --- a/doc/src/sgml/ref/pg_createsubscriber.sgml +++ b/doc/src/sgml/ref/pg_createsubscriber.sgml @@ -94,8 +94,11 @@ PostgreSQL documentation Create one subscription per database on the target server. Exceptions are template databases and databases that don't allow connections. - If the database name is not specified in publisher-server, the postgres - database will be used, or if that does not exist, template1 will be used. + To discover the list of all databases, connect to the source server + using the database name specified in the + connection string, or if not specified, the postgres + database will be used, or if that does not exist, template1 + will be used. Automatically generated names for subscriptions, publications, and replication slots are used when this option is specified. This option cannot be used along with , @@ -166,29 +169,6 @@ PostgreSQL documentation - - - - - - Remove all objects of the specified type from specified databases on the - target server. - - - publications: The "all tables" publications established for this - subscriber are always removed; specifying this object type causes all - other publications replicated from the source server to be dropped as - well. - - - The objects selected to be dropped are individually logged and do show - up in a --dry-run. There is no opportunity to affect or stop the - dropping of the selected objects so consider taking a backup of them - using pg_dump. - - - - @@ -249,6 +229,35 @@ PostgreSQL documentation + + + + + Drop all objects of the specified type from specified databases on the + target server. + + + + + + publications: + The FOR ALL TABLES publications established for this + subscriber are always dropped; specifying this object type causes all + other publications replicated from the source server to be dropped as + well. + + + + + + The objects selected to be dropped are individually logged, including during + a . There is no opportunity to affect or stop the + dropping of the selected objects, so consider taking a backup of them + using pg_dump. + + + + diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index bfc1e7b352476..fd4ecf01a0a00 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -18,7 +18,7 @@ PostgreSQL documentation pg_dump - extract a PostgreSQL database into a script file or other archive file + export a PostgreSQL database as an SQL script or to other formats @@ -96,6 +96,18 @@ PostgreSQL documentation light of the limitations listed below. + + + Restoring a dump causes the destination to execute arbitrary code of the + source superusers' choice. Partial dumps and partial restores do not limit + that. If the source superusers are not trusted, the dumped SQL statements + must be inspected before restoring. Non-plain-text dumps can be inspected + by using pg_restore's + option. Note that the client running the dump and restore need not trust + the source or destination superusers. + + + @@ -655,17 +667,6 @@ PostgreSQL documentation - - - - - Dump only the statistics, not the schema (data definitions) or data. - Statistics for tables, materialized views, and indexes are dumped. - - - - - [:detail] @@ -1124,19 +1125,19 @@ PostgreSQL documentation - + - Do not dump security labels. + Do not dump schema (data definitions). - + - Do not dump schema (data definitions). + Do not dump security labels. @@ -1145,7 +1146,7 @@ PostgreSQL documentation - Do not dump statistics. + Do not dump statistics. This is the default. @@ -1232,33 +1233,6 @@ PostgreSQL documentation - - - - - Dump data. This is the default. - - - - - - - - - Dump schema (data definitions). This is the default. - - - - - - - - - Dump statistics. This is the default. - - - - @@ -1290,6 +1264,29 @@ PostgreSQL documentation + + + + + Use the provided string as the psql + \restrict key in the dump output. This can only be + specified for plain-text dumps, i.e., when is + set to plain or the option + is omitted. If no restrict key is specified, + pg_dump will generate a random one as + needed. Keys may contain only alphanumeric characters. + + + This option is primarily intended for testing purposes and other + scenarios that require repeatable output (e.g., comparing dump files). + It is not recommended for general use, as a malicious server with + advance knowledge of the key may be able to inject arbitrary code that + will be executed on the machine that runs + psql with the dump output. + + + + @@ -1315,11 +1312,11 @@ PostgreSQL documentation The data section contains actual table data, large-object - contents, statitistics for tables and materialized views and - sequence values. + contents, sequence values, and statistics for tables, + materialized views, and foreign tables. Post-data items include definitions of indexes, triggers, rules, statistics for indexes, and constraints other than validated check - constraints. + and not-null constraints. Pre-data items include all other data definition items. @@ -1392,6 +1389,26 @@ PostgreSQL documentation + + + + + Dump statistics. + + + + + + + + + Dump only the statistics, not the schema (data definitions) or data. + Statistics for tables, materialized views, foreign tables, + and indexes are dumped. + + + + @@ -1682,14 +1699,14 @@ CREATE DATABASE foo WITH TEMPLATE template0; - By default, pg_dump will include most optimizer - statistics in the resulting dump file. However, some statistics may not be - included, such as those created explicitly with or custom statistics added by an - extension. Therefore, it may be useful to run ANALYZE - after restoring from a dump file to ensure optimal performance; see and for more - information. + If is specified, + pg_dump will include most optimizer statistics in the + resulting dump file. However, some statistics may not be included, such as + those created explicitly with or + custom statistics added by an extension. Therefore, it may be useful to + run ANALYZE after restoring from a dump file to ensure + optimal performance; see and for more information. diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml index 765b30a3a668e..9f639f61db021 100644 --- a/doc/src/sgml/ref/pg_dumpall.sgml +++ b/doc/src/sgml/ref/pg_dumpall.sgml @@ -66,6 +66,16 @@ PostgreSQL documentation linkend="libpq-pgpass"/> for more information. + + + Restoring a dump causes the destination to execute arbitrary code of the + source superusers' choice. Partial dumps and partial restores do not limit + that. If the source superusers are not trusted, the dumped SQL statements + must be inspected before restoring. Note that the client running the dump + and restore need not trust the source or destination superusers. + + + @@ -125,37 +135,6 @@ PostgreSQL documentation - - - - - Specify a filename from which to read patterns for databases excluded - from the dump. The patterns are interpreted according to the same rules - as . - To read from STDIN, use - as the - filename. The option can be specified in - conjunction with for excluding - databases, and can also be specified more than once for multiple filter - files. - - - - The file lists one database pattern per row, with the following format: - -exclude database PATTERN - - - - - Lines starting with # are considered comments and - ignored. Comments can be placed after an object pattern row as well. - Blank lines are also ignored. See - for how to perform quoting in patterns. - - - - - @@ -265,16 +244,6 @@ exclude database PATTERN - - - - - Dump only the statistics, not the schema (data definitions) or data. - Statistics for tables, materialized views, and indexes are dumped. - - - - @@ -364,6 +333,37 @@ exclude database PATTERN + + + + + Specify a filename from which to read patterns for databases excluded + from the dump. The patterns are interpreted according to the same rules + as . + To read from STDIN, use - as the + filename. The option can be specified in + conjunction with for excluding + databases, and can also be specified more than once for multiple filter + files. + + + + The file lists one database pattern per row, with the following format: + +exclude database PATTERN + + + + + Lines starting with # are considered comments and + ignored. Comments can be placed after an object pattern row as well. + Blank lines are also ignored. See + for how to perform quoting in patterns. + + + + + @@ -497,7 +497,7 @@ exclude database PATTERN - Do not dump statistics. + Do not dump statistics. This is the default. @@ -560,33 +560,6 @@ exclude database PATTERN - - - - - Dump data. This is the default. - - - - - - - - - Dump schema (data definitions). This is the default. - - - - - - - - - Dump statistics. This is the default. - - - - @@ -628,6 +601,26 @@ exclude database PATTERN + + + + + Use the provided string as the psql + \restrict key in the dump output. If no restrict + key is specified, pg_dumpall will generate a + random one as needed. Keys may contain only alphanumeric characters. + + + This option is primarily intended for testing purposes and other + scenarios that require repeatable output (e.g., comparing dump files). + It is not recommended for general use, as a malicious server with + advance knowledge of the key may be able to inject arbitrary code that + will be executed on the machine that runs + psql with the dump output. + + + + @@ -642,6 +635,37 @@ exclude database PATTERN + + + + + Dump statistics. + + + + + + + + + Dump only the statistics, not the schema (data definitions) or data. + Statistics for tables, materialized views, foreign tables, + and indexes are dumped. + + + + + + + + + Include sequence data in the dump. This is the default behavior except + when , , or + is specified. + + + + @@ -866,14 +890,14 @@ exclude database PATTERN - By default, pg_dumpall will include most optimizer - statistics in the resulting dump file. However, some statistics may not be - included, such as those created explicitly with or custom statistics added by an - extension. Therefore, it may be useful to run ANALYZE - on each database after restoring from a dump file to ensure optimal - performance. You can also run vacuumdb -a -z to analyze - all databases. + If is specified, + pg_dumpall will include most optimizer statistics in the + resulting dump file. However, some statistics may not be included, such as + those created explicitly with or + custom statistics added by an extension. Therefore, it may be useful to + run ANALYZE on each database after restoring from a dump + file to ensure optimal performance. You can also run vacuumdb -a + -z to analyze all databases. diff --git a/doc/src/sgml/ref/pg_recvlogical.sgml b/doc/src/sgml/ref/pg_recvlogical.sgml index 2946bdae1e5e5..263ebdeeab4a8 100644 --- a/doc/src/sgml/ref/pg_recvlogical.sgml +++ b/doc/src/sgml/ref/pg_recvlogical.sgml @@ -53,6 +53,16 @@ PostgreSQL documentation (ControlC) or SIGTERM signal. + + + When pg_recvlogical receives + a SIGHUP signal, it closes the current output file + and opens a new one using the filename specified by + the option. This allows us to rotate + the output file by first renaming the current file and then sending + a SIGHUP signal to + pg_recvlogical. + @@ -79,8 +89,8 @@ PostgreSQL documentation - The can be specified with - to enable decoding of prepared transactions. + The and + options can be specified with . @@ -165,6 +175,16 @@ PostgreSQL documentation + + + + + Enables the slot to be synchronized to the standbys. This option may + only be specified with . + + + + @@ -290,7 +310,8 @@ PostgreSQL documentation - + + (deprecated) Enables decoding of prepared transactions. This option may only be specified with diff --git a/doc/src/sgml/ref/pg_resetwal.sgml b/doc/src/sgml/ref/pg_resetwal.sgml index dd011d246c166..2c019c2aac6eb 100644 --- a/doc/src/sgml/ref/pg_resetwal.sgml +++ b/doc/src/sgml/ref/pg_resetwal.sgml @@ -171,25 +171,6 @@ PostgreSQL documentation - - - - - Manually set the default char signedness. Possible values are - signed and unsigned. - - - For a database cluster that pg_upgrade upgraded from - a PostgreSQL version before 18, the safe - value would be the default char signedness of the platform - that ran the cluster before that upgrade. For all other - clusters, signed would be the safe value. However, - this option is exclusively for use with pg_upgrade - and should not normally be used manually. - - - - @@ -332,34 +313,6 @@ PostgreSQL documentation - - - - - Set the new WAL segment size, in megabytes. The value must be set to a - power of 2 between 1 and 1024 (megabytes). See the same option of for more information. - - - - This option can also be used to change the WAL segment size of an - existing database cluster, avoiding the need to - re-initdb. - - - - - While pg_resetwal will set the WAL starting address - beyond the latest existing WAL segment file, some segment size changes - can cause previous WAL file names to be reused. It is recommended to - use together with this option to manually set the - WAL starting address if WAL file name overlap will cause problems with - your archiving strategy. - - - - - @@ -402,6 +355,53 @@ PostgreSQL documentation + + + + + + Manually set the default char signedness. Possible values are + signed and unsigned. + + + For a database cluster that pg_upgrade upgraded from + a PostgreSQL version before 18, the safe + value would be the default char signedness of the platform + that ran the cluster before that upgrade. For all other + clusters, signed would be the safe value. However, + this option is exclusively for use with pg_upgrade + and should not normally be used manually. + + + + + + + + + Set the new WAL segment size, in megabytes. The value must be set to a + power of 2 between 1 and 1024 (megabytes). See the same option of for more information. + + + + This option can also be used to change the WAL segment size of an + existing database cluster, avoiding the need to + re-initdb. + + + + + While pg_resetwal will set the WAL starting address + beyond the latest existing WAL segment file, some segment size changes + can cause previous WAL file names to be reused. It is recommended to + use together with this option to manually set the + WAL starting address if WAL file name overlap will cause problems with + your archiving strategy. + + + + diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index c840a807ae90f..a468a38361a13 100644 --- a/doc/src/sgml/ref/pg_restore.sgml +++ b/doc/src/sgml/ref/pg_restore.sgml @@ -68,6 +68,18 @@ PostgreSQL documentation pg_restore will not be able to load the data using COPY statements. + + + + Restoring a dump causes the destination to execute arbitrary code of the + source superusers' choice. Partial dumps and partial restores do not limit + that. If the source superusers are not trusted, the dumped SQL statements + must be inspected before restoring. Non-plain-text dumps can be inspected + by using pg_restore's + option. Note that the client running the dump and restore need not trust + the source or destination superusers. + + @@ -190,86 +202,6 @@ PostgreSQL documentation - - - - - Specify a filename from which to read patterns for objects excluded - or included from restore. The patterns are interpreted according to the - same rules as - / for including objects in schemas, - /for excluding objects in schemas, - / for restoring named functions, - / for restoring named indexes, - / for restoring named tables - or / for restoring triggers. - To read from STDIN, use - as the - filename. The option can be specified in - conjunction with the above listed options for including or excluding - objects, and can also be specified more than once for multiple filter - files. - - - - The file lists one database pattern per row, with the following format: - -{ include | exclude } { function | index | schema | table | trigger } PATTERN - - - - - The first keyword specifies whether the objects matched by the pattern - are to be included or excluded. The second keyword specifies the type - of object to be filtered using the pattern: - - - - function: functions, works like the - / option. This keyword - can only be used with the include keyword. - - - - - index: indexes, works like the - / option. This keyword - can only be used with the include keyword. - - - - - schema: schemas, works like the - / and - / options. - - - - - table: tables, works like the - / option. This keyword - can only be used with the include keyword. - - - - - trigger: triggers, works like the - / option. This keyword - can only be used with the include keyword. - - - - - - - Lines starting with # are considered comments and - ignored. Comments can be placed after an object pattern row as well. - Blank lines are also ignored. See - for how to perform quoting in patterns. - - - - - @@ -600,15 +532,6 @@ PostgreSQL documentation - - - - - Restore only the statistics, not schema (data definitions) or data. - - - - @@ -668,6 +591,86 @@ PostgreSQL documentation + + + + + Specify a filename from which to read patterns for objects excluded + or included from restore. The patterns are interpreted according to the + same rules as + / for including objects in schemas, + / for excluding objects in schemas, + / for restoring named functions, + / for restoring named indexes, + / for restoring named tables + or / for restoring triggers. + To read from STDIN, use - as the + filename. The option can be specified in + conjunction with the above listed options for including or excluding + objects, and can also be specified more than once for multiple filter + files. + + + + The file lists one database pattern per row, with the following format: + +{ include | exclude } { function | index | schema | table | trigger } PATTERN + + + + + The first keyword specifies whether the objects matched by the pattern + are to be included or excluded. The second keyword specifies the type + of object to be filtered using the pattern: + + + + function: functions, works like the + / option. This keyword + can only be used with the include keyword. + + + + + index: indexes, works like the + / option. This keyword + can only be used with the include keyword. + + + + + schema: schemas, works like the + / and + / options. + + + + + table: tables, works like the + / option. This keyword + can only be used with the include keyword. + + + + + trigger: triggers, works like the + / option. This keyword + can only be used with the include keyword. + + + + + + + Lines starting with # are considered comments and + ignored. Comments can be placed after an object pattern row as well. + Blank lines are also ignored. See + for how to perform quoting in patterns. + + + + + @@ -806,28 +809,23 @@ PostgreSQL documentation - + - Dump data. This is the default. + Use the provided string as the psql + \restrict key in the dump output. This can only be + specified for SQL script output, i.e., when the + option is used. If no restrict key is specified, + pg_restore will generate a random one as + needed. Keys may contain only alphanumeric characters. - - - - - - - - Dump schema (data definitions). This is the default. - - - - - - - - Dump statistics. This is the default. + This option is primarily intended for testing purposes and other + scenarios that require repeatable output (e.g., comparing dump files). + It is not recommended for general use, as a malicious server with + advance knowledge of the key may be able to inject arbitrary code that + will be executed on the machine that runs + psql with the dump output. @@ -851,6 +849,25 @@ PostgreSQL documentation + + + + + Output commands to restore statistics, if the archive contains them. + This is the default. + + + + + + + + + Restore only the statistics, not schema (data definitions) or data. + + + + diff --git a/doc/src/sgml/ref/pg_verifybackup.sgml b/doc/src/sgml/ref/pg_verifybackup.sgml index 53341024cd267..61c12975e4ad5 100644 --- a/doc/src/sgml/ref/pg_verifybackup.sgml +++ b/doc/src/sgml/ref/pg_verifybackup.sgml @@ -143,35 +143,6 @@ PostgreSQL documentation - - - - - - Ignore the specified file or directory, which should be expressed - as a relative path name, when comparing the list of data files - actually present in the backup to those listed in the - backup_manifest file. If a directory is - specified, this option affects the entire subtree rooted at that - location. Complaints about extra files, missing files, file size - differences, or checksum mismatches will be suppressed if the - relative path name matches the specified path name. This option - can be specified multiple times. - - - - - - - - - - Use the manifest file at the specified path, rather than one located - in the root of the backup directory. - - - - @@ -211,6 +182,35 @@ PostgreSQL documentation + + + + + + Ignore the specified file or directory, which should be expressed + as a relative path name, when comparing the list of data files + actually present in the backup to those listed in the + backup_manifest file. If a directory is + specified, this option affects the entire subtree rooted at that + location. Complaints about extra files, missing files, file size + differences, or checksum mismatches will be suppressed if the + relative path name matches the specified path name. This option + can be specified multiple times. + + + + + + + + + + Use the manifest file at the specified path, rather than one located + in the root of the backup directory. + + + + diff --git a/doc/src/sgml/ref/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml index a5eb3aa25e02f..afe6a12be4b30 100644 --- a/doc/src/sgml/ref/pgtesttiming.sgml +++ b/doc/src/sgml/ref/pgtesttiming.sgml @@ -30,11 +30,23 @@ PostgreSQL documentation Description - pg_test_timing is a tool to measure the timing overhead - on your system and confirm that the system time never moves backwards. + pg_test_timing is a tool to measure the + timing overhead on your system and confirm that the system time never + moves backwards. It simply reads the system clock over and over again + as fast as it can for a specified length of time, and then prints + statistics about the observed differences in successive clock readings. + + + Smaller (but not zero) differences are better, since they imply both + more-precise clock hardware and less overhead to collect a clock reading. Systems that are slow to collect timing data can give less accurate EXPLAIN ANALYZE results. + + This tool is also helpful to determine if + the track_io_timing configuration parameter is likely + to produce useful results. + @@ -59,6 +71,21 @@ PostgreSQL documentation + + + + + + Specifies the cutoff percentage for the list of exact observed + timing durations (that is, the changes in the system clock value + from one reading to the next). The list will end once the running + percentage total reaches or exceeds this value, except that the + largest observed duration will always be printed. The default + cutoff is 99.99. + + + + @@ -92,205 +119,83 @@ PostgreSQL documentation Interpreting Results - Good results will show most (>90%) individual timing calls take less than - one microsecond. Average per loop overhead will be even lower, below 100 - nanoseconds. This example from an Intel i7-860 system using a TSC clock - source shows excellent performance: - - + The first block of output has four columns, with rows showing a + shifted-by-one log2(ns) histogram of timing durations (that is, the + differences between successive clock readings). This is not the + classic log2(n+1) histogram as it counts zeros separately and then + switches to log2(ns) starting from value 1. - - Note that different units are used for the per loop time than the - histogram. The loop can have resolution within a few nanoseconds (ns), - while the individual timing calls can only resolve down to one microsecond - (us). + The columns are: + + + nanosecond value that is >= the durations in this + bucket + + + percentage of durations in this bucket + + + running-sum percentage of durations in this and previous + buckets + + + count of durations in this bucket + + - - - - Measuring Executor Timing Overhead - - When the query executor is running a statement using - EXPLAIN ANALYZE, individual operations are timed as well - as showing a summary. The overhead of your system can be checked by - counting rows with the psql program: - - -CREATE TABLE t AS SELECT * FROM generate_series(1,100000); -\timing -SELECT COUNT(*) FROM t; -EXPLAIN ANALYZE SELECT COUNT(*) FROM t; - + The second block of output goes into more detail, showing the exact + timing differences observed. For brevity this list is cut off when the + running-sum percentage exceeds the user-selectable cutoff value. + However, the largest observed difference is always shown. - - The i7-860 system measured runs the count query in 9.8 ms while - the EXPLAIN ANALYZE version takes 16.6 ms, each - processing just over 100,000 rows. That 6.8 ms difference means the timing - overhead per row is 68 ns, about twice what pg_test_timing estimated it - would be. Even that relatively small amount of overhead is making the fully - timed count statement take almost 70% longer. On more substantial queries, - the timing overhead would be less problematic. + The example results below show that 99.99% of timing loops took between + 8 and 31 nanoseconds, with the worst case somewhere between 32768 and + 65535 nanoseconds. In the second block, we can see that typical loop + time is 16 nanoseconds, and the readings appear to have full nanosecond + precision. - - - - Changing Time Sources - On some newer Linux systems, it's possible to change the clock source used - to collect timing data at any time. A second example shows the slowdown - possible from switching to the slower acpi_pm time source, on the same - system used for the fast results above: - /sys/devices/system/clocksource/clocksource0/current_clocksource -# pg_test_timing -Per loop time including overhead: 722.92 ns +Testing timing overhead for 3 seconds. +Average loop time including overhead: 16.40 ns Histogram of timing durations: - < us % of total count - 1 27.84870 1155682 - 2 72.05956 2990371 - 4 0.07810 3241 - 8 0.01357 563 - 16 0.00007 3 + <= ns % of total running % count + 0 0.0000 0.0000 0 + 1 0.0000 0.0000 0 + 3 0.0000 0.0000 0 + 7 0.0000 0.0000 0 + 15 4.5452 4.5452 8313178 + 31 95.4527 99.9979 174581501 + 63 0.0001 99.9981 253 + 127 0.0001 99.9982 165 + 255 0.0000 99.9982 35 + 511 0.0000 99.9982 1 + 1023 0.0013 99.9994 2300 + 2047 0.0004 99.9998 690 + 4095 0.0000 99.9998 9 + 8191 0.0000 99.9998 8 + 16383 0.0002 100.0000 337 + 32767 0.0000 100.0000 2 + 65535 0.0000 100.0000 1 + +Observed timing durations up to 99.9900%: + ns % of total running % count + 15 4.5452 4.5452 8313178 + 16 58.3785 62.9237 106773354 + 17 33.6840 96.6078 61607584 + 18 3.1151 99.7229 5697480 + 19 0.2638 99.9867 482570 + 20 0.0093 99.9960 17054 +... + 38051 0.0000 100.0000 1 ]]> - - In this configuration, the sample EXPLAIN ANALYZE above - takes 115.9 ms. That's 1061 ns of timing overhead, again a small multiple - of what's measured directly by this utility. That much timing overhead - means the actual query itself is only taking a tiny fraction of the - accounted for time, most of it is being consumed in overhead instead. In - this configuration, any EXPLAIN ANALYZE totals involving - many timed operations would be inflated significantly by timing overhead. - - - - FreeBSD also allows changing the time source on the fly, and it logs - information about the timer selected during boot: - - -# dmesg | grep "Timecounter" -Timecounter "ACPI-fast" frequency 3579545 Hz quality 900 -Timecounter "i8254" frequency 1193182 Hz quality 0 -Timecounters tick every 10.000 msec -Timecounter "TSC" frequency 2531787134 Hz quality 800 -# sysctl kern.timecounter.hardware=TSC -kern.timecounter.hardware: ACPI-fast -> TSC - - - - - Other systems may only allow setting the time source on boot. On older - Linux systems the "clock" kernel setting is the only way to make this sort - of change. And even on some more recent ones, the only option you'll see - for a clock source is "jiffies". Jiffies are the older Linux software clock - implementation, which can have good resolution when it's backed by fast - enough timing hardware, as in this example: - - - - - - Clock Hardware and Timing Accuracy - - - Collecting accurate timing information is normally done on computers using - hardware clocks with various levels of accuracy. With some hardware the - operating systems can pass the system clock time almost directly to - programs. A system clock can also be derived from a chip that simply - provides timing interrupts, periodic ticks at some known time interval. In - either case, operating system kernels provide a clock source that hides - these details. But the accuracy of that clock source and how quickly it can - return results varies based on the underlying hardware. - - - - Inaccurate time keeping can result in system instability. Test any change - to the clock source very carefully. Operating system defaults are sometimes - made to favor reliability over best accuracy. And if you are using a virtual - machine, look into the recommended time sources compatible with it. Virtual - hardware faces additional difficulties when emulating timers, and there are - often per operating system settings suggested by vendors. - - - - The Time Stamp Counter (TSC) clock source is the most accurate one available - on current generation CPUs. It's the preferred way to track the system time - when it's supported by the operating system and the TSC clock is - reliable. There are several ways that TSC can fail to provide an accurate - timing source, making it unreliable. Older systems can have a TSC clock that - varies based on the CPU temperature, making it unusable for timing. Trying - to use TSC on some older multicore CPUs can give a reported time that's - inconsistent among multiple cores. This can result in the time going - backwards, a problem this program checks for. And even the newest systems - can fail to provide accurate TSC timing with very aggressive power saving - configurations. - - - - Newer operating systems may check for the known TSC problems and switch to a - slower, more stable clock source when they are seen. If your system - supports TSC time but doesn't default to that, it may be disabled for a good - reason. And some operating systems may not detect all the possible problems - correctly, or will allow using TSC even in situations where it's known to be - inaccurate. - - - - The High Precision Event Timer (HPET) is the preferred timer on systems - where it's available and TSC is not accurate. The timer chip itself is - programmable to allow up to 100 nanosecond resolution, but you may not see - that much accuracy in your system clock. - - - - Advanced Configuration and Power Interface (ACPI) provides a Power - Management (PM) Timer, which Linux refers to as the acpi_pm. The clock - derived from acpi_pm will at best provide 300 nanosecond resolution. - - - - Timers used on older PC hardware include the 8254 Programmable Interval - Timer (PIT), the real-time clock (RTC), the Advanced Programmable Interrupt - Controller (APIC) timer, and the Cyclone timer. These timers aim for - millisecond resolution. - - @@ -298,6 +203,8 @@ Histogram of timing durations: + Wiki + discussion about timing diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml index df13365b287dc..356baa912991d 100644 --- a/doc/src/sgml/ref/pgupgrade.sgml +++ b/doc/src/sgml/ref/pgupgrade.sgml @@ -70,6 +70,14 @@ PostgreSQL documentation pg_upgrade supports upgrades from 9.2.X and later to the current major release of PostgreSQL, including snapshot and beta releases. + + + + Upgrading a cluster causes the destination to execute arbitrary code of the + source superusers' choice. Ensure that the source superusers are trusted + before upgrading. + + @@ -145,15 +153,6 @@ PostgreSQL documentation - - - - - Do not restore statistics from the old cluster into the new cluster. - - - - options options @@ -264,50 +263,10 @@ PostgreSQL documentation - - - - Move the data directories from the old cluster to the new cluster. - Then, replace the catalog files with those generated for the new - cluster. This mode can outperform , - , , and - , especially on clusters with many - relations. - - - However, this mode creates many garbage files in the old cluster, which - can prolong the file synchronization step if - is used. Therefore, it is - recommended to use with - . - - - Additionally, once the file transfer step begins, the old cluster will - be destructively modified and therefore will no longer be safe to - start. See for details. - - - - - - method + - When set to fsync, which is the default, - pg_upgrade will recursively open and synchronize all - files in the upgraded cluster's data directory. The search for files - will follow symbolic links for the WAL directory and each configured - tablespace. - - - On Linux, syncfs may be used instead to ask the - operating system to synchronize the whole file systems that contain the - upgraded cluster's data directory, its WAL files, and each tablespace. - See for information - about the caveats to be aware of when using syncfs. - - - This option has no effect when is used. + Do not restore statistics from the old cluster into the new cluster. @@ -365,6 +324,55 @@ PostgreSQL documentation + + + + + Move the data directories from the old cluster to the new cluster. + Then, replace the catalog files with those generated for the new + cluster. This mode can outperform , + , , and + , especially on clusters with many + relations. + + + However, this mode creates many garbage files in the old cluster, which + can prolong the file synchronization step if + is used. Therefore, it is + recommended to use with + . + + + Additionally, once the file transfer step begins, the old cluster will + be destructively modified and therefore will no longer be safe to + start. See for details. + + + + + + method + + + When set to fsync, which is the default, + pg_upgrade will recursively open and synchronize all + files in the upgraded cluster's data directory. The search for files + will follow symbolic links for the WAL directory and each configured + tablespace. + + + On Linux, syncfs may be used instead to ask the + operating system to synchronize the whole file systems that contain the + upgraded cluster's data directory, its WAL files, and each tablespace. + See for information + about the caveats to be aware of when using syncfs. + + + This option has no effect when is used. + + + + @@ -832,18 +840,20 @@ psql --username=postgres --file=script.sql postgres - Because not all statistics are not transferred by - pg_upgrade, you will be instructed to run a command to + Because not all statistics are transferred by + pg_upgrade, you will be instructed to run commands to regenerate that information at the end of the upgrade. You might need to set connection parameters to match your new cluster. - Using vacuumdb --all --analyze-only --missing-stats-only - can efficiently generate such statistics. Alternatively, + First, use vacuumdb --all --analyze-in-stages --missing-stats-only - can be used to generate minimal statistics quickly. For either command, - the use of can speed it up. + to quickly generate minimal optimizer statistics for relations without + any. Then, use vacuumdb --all --analyze-only to ensure + all relations have updated cumulative statistics for triggering vacuum and + analyze. For both commands, the use of can speed + it up. If vacuum_cost_delay is set to a non-zero value, this can be overridden to speed up statistics generation using PGOPTIONS, e.g., PGOPTIONS='-c @@ -1108,7 +1118,8 @@ psql --username=postgres --file=script.sql postgres regproc regprocedure - (regclass, regrole, and regtype can be upgraded.) + (regclass, regdatabase, regrole, and + regtype can be upgraded.) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index f7c8bc16a7fcf..1a339600bc48f 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1067,18 +1067,8 @@ INSERT INTO tbls1 VALUES ($1, $2) \parse stmt1 - - \conninfo - - - Outputs information about the current database connection, - including TLS-related information if TLS is in use. - - - - - - \close prepared_statement_name + + \close_prepared prepared_statement_name @@ -1091,7 +1081,7 @@ INSERT INTO tbls1 VALUES ($1, $2) \parse stmt1 Example: SELECT $1 \parse stmt1 -\close stmt1 +\close_prepared stmt1 @@ -1106,6 +1096,25 @@ SELECT $1 \parse stmt1 + + \conninfo + + + Outputs information about the current database connection, + including SSL-related information if SSL is in use. + + + Note that the Client User field shows + the user at the time of connection, while the + Superuser field indicates whether + the current user (in the current execution context) has + superuser privileges. These users are usually the same, but they can + differ, for example, if the current user was changed with the + SET ROLE command. + + + + \copy { table [ ( column_list ) ] } from @@ -3542,6 +3551,24 @@ SELECT $1 \parse stmt1 + + \restrict restrict_key + + + Enter "restricted" mode with the provided key. In this mode, the only + allowed meta-command is \unrestrict, to exit + restricted mode. The key may contain only alphanumeric characters. + + + This command is primarily intended for use in plain-text dumps + generated by pg_dump, + pg_dumpall, and + pg_restore, but it may be useful elsewhere. + + + + + \s [ filename ] @@ -3701,7 +3728,7 @@ testdb=> \setenv LESS -imx4F All queries executed while a pipeline is ongoing use the extended query protocol. Queries are appended to the pipeline when ending with a semicolon. The meta-commands \bind, - \bind_named, \close or + \bind_named, \close_prepared or \parse can be used in an ongoing pipeline. While a pipeline is ongoing, \sendpipeline will append the current query buffer to the pipeline. Other meta-commands like @@ -3733,6 +3760,10 @@ testdb=> \setenv LESS -imx4F See for more details + + COPY is not supported while in pipeline mode. + + Example: @@ -3789,6 +3820,24 @@ SELECT 1 \bind \sendpipeline + + \unrestrict restrict_key + + + Exit "restricted" mode (i.e., where all other meta-commands are + blocked), provided the specified key matches the one given to + \restrict when restricted mode was entered. + + + This command is primarily intended for use in plain-text dumps + generated by pg_dump, + pg_dumpall, and + pg_restore, but it may be useful elsewhere. + + + + + \unset name @@ -3853,7 +3902,7 @@ SELECT 1 \bind \sendpipeline (if given) is reached, or the query no longer returns the minimum number of rows. Wait the specified number of seconds (default 2) between executions. The default wait can be changed with the variable - ). + . For backwards compatibility, seconds can be specified with or without an interval= prefix. @@ -4610,6 +4659,15 @@ bar + + SERVICEFILE + + + The service file name, if applicable. + + + + SHELL_ERROR @@ -4752,9 +4810,10 @@ bar WATCH_INTERVAL - This variable sets the default interval which \watch - waits between executing the query. Specifying an interval in the - command overrides this variable. + This variable sets the default interval, in seconds, which + \watch waits between executing the query. The + default is 2 seconds. Specifying an interval in the command overrides + this variable. diff --git a/doc/src/sgml/ref/reindex.sgml b/doc/src/sgml/ref/reindex.sgml index 5b3c769800e9d..c405539714695 100644 --- a/doc/src/sgml/ref/reindex.sgml +++ b/doc/src/sgml/ref/reindex.sgml @@ -465,14 +465,17 @@ Indexes: If the index marked INVALID is suffixed - ccnew, then it corresponds to the transient + _ccnew, then it corresponds to the transient index created during the concurrent operation, and the recommended recovery method is to drop it using DROP INDEX, then attempt REINDEX CONCURRENTLY again. - If the invalid index is instead suffixed ccold, + If the invalid index is instead suffixed _ccold, it corresponds to the original index which could not be dropped; the recommended recovery method is to just drop said index, since the rebuild proper has been successful. + A nonzero number may be appended to the suffix of the invalid index + names to keep them unique, like _ccnew1, + _ccold2, etc. diff --git a/doc/src/sgml/ref/reindexdb.sgml b/doc/src/sgml/ref/reindexdb.sgml index 98c3333228fb9..abcb041179bb9 100644 --- a/doc/src/sgml/ref/reindexdb.sgml +++ b/doc/src/sgml/ref/reindexdb.sgml @@ -352,9 +352,8 @@ PostgreSQL documentation - Specifies the name of the database to connect to to discover which - databases should be reindexed, - when / is used. + When the / is used, connect + to this database to gather the list of databases to reindex. If not specified, the postgres database will be used, or if that does not exist, template1 will be used. This can be a connection diff --git a/doc/src/sgml/ref/security_label.sgml b/doc/src/sgml/ref/security_label.sgml index e5e5fb483e94e..aa45c0af2487b 100644 --- a/doc/src/sgml/ref/security_label.sgml +++ b/doc/src/sgml/ref/security_label.sgml @@ -84,6 +84,10 @@ SECURITY LABEL [ FOR provider ] ON based on object labels, rather than traditional discretionary access control (DAC) concepts such as users and groups. + + + You must own the database object to use SECURITY LABEL. + diff --git a/doc/src/sgml/ref/update.sgml b/doc/src/sgml/ref/update.sgml index 12ec5ba070939..40cca06394636 100644 --- a/doc/src/sgml/ref/update.sgml +++ b/doc/src/sgml/ref/update.sgml @@ -57,7 +57,8 @@ UPDATE [ ONLY ] table_name [ * ] [ to compute and return value(s) based on each row actually updated. Any expression using the table's columns, and/or columns of other tables mentioned in FROM, can be computed. - The new (post-update) values of the table's columns are used. + By default, the new (post-update) values of the table's columns are used, + but it is also possible to request the old (pre-update) values. The syntax of the RETURNING list is identical to that of the output list of SELECT. diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml index d102f9d48406c..84c76d7350c83 100644 --- a/doc/src/sgml/ref/vacuumdb.sgml +++ b/doc/src/sgml/ref/vacuumdb.sgml @@ -282,14 +282,24 @@ PostgreSQL documentation Only analyze relations that are missing statistics for a column, index - expression, or extended statistics object. This option prevents - vacuumdb from deleting existing statistics - so that the query optimizer's choices do not become transiently worse. + expression, or extended statistics object. When used with + , this option prevents + vacuumdb from temporarily replacing existing + statistics with ones generated with lower statistics targets, thus + avoiding transiently worse query optimizer choices. This option can only be used in conjunction with or . + + Note that requires + SELECT privileges on + pg_statistic + and + pg_statistic_ext_data, + which are restricted to superusers by default. + @@ -395,6 +405,15 @@ PostgreSQL documentation Multiple tables can be vacuumed by writing multiple switches. + + If no tables are specified with the option, + vacuumdb will clean all regular tables + and materialized views in the connected database. + If or + is also specified, + it will analyze all regular tables, partitioned tables, + and materialized views (but not foreign tables). + If you specify columns, you probably have to escape the parentheses @@ -560,9 +579,8 @@ PostgreSQL documentation - Specifies the name of the database to connect to to discover which - databases should be vacuumed, - when / is used. + When the / is used, connect + to this database to gather the list of databases to vacuum. If not specified, the postgres database will be used, or if that does not exist, template1 will be used. This can be a connection diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml index 0e5e8e8f3090c..8838fe7f0225f 100644 --- a/doc/src/sgml/regress.sgml +++ b/doc/src/sgml/regress.sgml @@ -285,75 +285,88 @@ make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance libpq_encryption' - sepgsql + libpq_encryption - Runs the test suite under contrib/sepgsql. This - requires an SELinux environment that is set up in a specific way; see - . + Runs the test src/interfaces/libpq/t/005_negotiate_encryption.pl. + This opens TCP/IP listen sockets. If PG_TEST_EXTRA + also includes kerberos, additional tests that require + an MIT Kerberos installation are enabled. - ssl + load_balance - Runs the test suite under src/test/ssl. This opens TCP/IP listen sockets. + Runs the test src/interfaces/libpq/t/004_load_balance_dns.pl. + This requires editing the system hosts file and + opens TCP/IP listen sockets. - load_balance + oauth - Runs the test src/interfaces/libpq/t/004_load_balance_dns.pl. - This requires editing the system hosts file and - opens TCP/IP listen sockets. + Runs the test suite under src/test/modules/oauth_validator. + This opens TCP/IP listen sockets for a test server running HTTPS. - libpq_encryption + regress_dump_restore - Runs the test src/interfaces/libpq/t/005_negotiate_encryption.pl. - This opens TCP/IP listen sockets. If PG_TEST_EXTRA - also includes kerberos, additional tests that require - an MIT Kerberos installation are enabled. + Runs an additional test suite in + src/bin/pg_upgrade/t/002_pg_upgrade.pl which + cycles the regression database through pg_dump/ + pg_restore. Not enabled by default because it + is resource intensive. - wal_consistency_checking + sepgsql - Uses wal_consistency_checking=all while running - certain tests under src/test/recovery. Not - enabled by default because it is resource intensive. + Runs the test suite under contrib/sepgsql. This + requires an SELinux environment that is set up in a specific way; see + . - xid_wraparound + ssl - Runs the test suite under src/test/modules/xid_wraparound. - Not enabled by default because it is resource intensive. + Runs the test suite under src/test/ssl. This opens TCP/IP listen sockets. - oauth + wal_consistency_checking - Runs the test suite under src/test/modules/oauth_validator. - This opens TCP/IP listen sockets for a test-server running HTTPS. + Uses wal_consistency_checking=all while running + certain tests under src/test/recovery. Not + enabled by default because it is resource intensive. + + + + + + xid_wraparound + + + Runs the test suite under src/test/modules/xid_wraparound. + Not enabled by default because it is resource intensive. diff --git a/doc/src/sgml/release-18.sgml b/doc/src/sgml/release-19.sgml similarity index 62% rename from doc/src/sgml/release-18.sgml rename to doc/src/sgml/release-19.sgml index 4f027a07d1ce9..8d242b5b28141 100644 --- a/doc/src/sgml/release-18.sgml +++ b/doc/src/sgml/release-19.sgml @@ -1,12 +1,12 @@ - + - - Release 18 + + Release 19 Release date: - 2025-??-?? + 2026-??-?? diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index cee577ff8d353..a659d382db95c 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -70,7 +70,7 @@ For new features, add links to the documentation sections. All the active branches have to be edited concurrently when doing that. --> -&release-18; +&release-19; Prior Releases diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 59f39e8992470..0c60bafac635d 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -782,19 +782,19 @@ psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such SEMMNI Maximum number of semaphore identifiers (i.e., sets) - at least ceil(num_os_semaphores / 19) plus room for other applications + at least ceil(num_os_semaphores / 16) plus room for other applications SEMMNS Maximum number of semaphores system-wide - ceil(num_os_semaphores / 19) * 20 plus room for other applications + ceil(num_os_semaphores / 16) * 17 plus room for other applications SEMMSL Maximum number of semaphores per set - at least 20 + at least 17 @@ -841,7 +841,7 @@ psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such (), allowed autovacuum worker process (), allowed WAL sender process (), allowed background - process (), etc., in sets of 19. + process (), etc., in sets of 16. The runtime-computed parameter reports the number of semaphores required. This parameter can be viewed before starting the server with a postgres command like: @@ -851,17 +851,17 @@ $ postgres -D $PGDATA -C num_os_semaphores - Each set of 19 semaphores will - also contain a 20th semaphore which contains a magic + Each set of 16 semaphores will + also contain a 17th semaphore which contains a magic number, to detect collision with semaphore sets used by other applications. The maximum number of semaphores in the system is set by SEMMNS, which consequently must be at least as high as num_os_semaphores plus one extra for - each set of 19 required semaphores (see the formula in ). The parameter SEMMNI determines the limit on the number of semaphore sets that can exist on the system at one time. Hence this parameter must be at - least ceil(num_os_semaphores / 19). + least ceil(num_os_semaphores / 16). Lowering the number of allowed connections is a temporary workaround for failures, which are usually confusingly worded No space @@ -953,10 +953,10 @@ $ postgres -D $PGDATA -C num_os_semaphores The default shared memory settings are usually good enough, unless you have set shared_memory_type to sysv. - You will usually want to increase kern.ipc.semmni + However, you will need to increase kern.ipc.semmni and kern.ipc.semmns, as NetBSD's default settings - for these are uncomfortably small. + for these are unworkably small. @@ -987,11 +987,11 @@ $ postgres -D $PGDATA -C num_os_semaphores The default shared memory settings are usually good enough, unless you have set shared_memory_type to sysv. - You will usually want to + However, you will need to increase kern.seminfo.semmni and kern.seminfo.semmns, as OpenBSD's default settings - for these are uncomfortably small. + for these are unworkably small. @@ -1994,7 +1994,8 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433 sslmode=verify-ca or verify-full and have the appropriate root certificate file installed (). Alternatively the - system CA pool can be used using sslrootcert=system; in + system CA pool, as defined + by the SSL implementation, can be used using sslrootcert=system; in this case, sslmode=verify-full is forced for safety, since it is generally trivial to obtain certificates which are signed by a public CA. diff --git a/doc/src/sgml/sepgsql.sgml b/doc/src/sgml/sepgsql.sgml index 03ed7d1c90d15..0708e48bcd950 100644 --- a/doc/src/sgml/sepgsql.sgml +++ b/doc/src/sgml/sepgsql.sgml @@ -442,7 +442,7 @@ UPDATE t1 SET x = 2, y = func1(y) WHERE z = 100; The default database privilege system allows database superusers to modify system catalogs using DML commands, and reference or modify - toast tables. These operations are prohibited when + TOAST tables. These operations are prohibited when sepgsql is enabled. diff --git a/doc/src/sgml/sources.sgml b/doc/src/sgml/sources.sgml index fa68d4d024a93..261f19b3534b5 100644 --- a/doc/src/sgml/sources.sgml +++ b/doc/src/sgml/sources.sgml @@ -907,12 +907,12 @@ BETTER: unrecognized node type: 42 C Standard Code in PostgreSQL should only rely on language - features available in the C99 standard. That means a conforming - C99 compiler has to be able to compile postgres, at least aside + features available in the C11 standard. That means a conforming + C11 compiler has to be able to compile postgres, at least aside from a few platform dependent pieces. - A few features included in the C99 standard are, at this time, not + A few features included in the C11 standard are, at this time, not permitted to be used in core PostgreSQL code. This currently includes variable length arrays, intermingled declarations and code, // comments, universal @@ -924,13 +924,11 @@ BETTER: unrecognized node type: 42 features can be used, if a fallback is provided. - For example _Static_assert() and + For example typeof() and __builtin_constant_p are currently used, even though they are from newer revisions of the C standard and a GCC extension respectively. If not available - we respectively fall back to using a C99 compatible replacement that - performs the same checks, but emits rather cryptic messages and do not - use __builtin_constant_p. + we do not use them. diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml index 61250799ec076..02ddfda834a2e 100644 --- a/doc/src/sgml/storage.sgml +++ b/doc/src/sgml/storage.sgml @@ -39,6 +39,8 @@ these required items, the cluster configuration files Contents of <varname>PGDATA</varname> + + @@ -743,6 +745,8 @@ There are five parts to each page. Overall Page Layout Page Layout + + diff --git a/doc/src/sgml/stylesheet-fo.xsl b/doc/src/sgml/stylesheet-fo.xsl index e7916a6a88347..aec6de7064a7b 100644 --- a/doc/src/sgml/stylesheet-fo.xsl +++ b/doc/src/sgml/stylesheet-fo.xsl @@ -14,24 +14,11 @@ 3 - - - - - - - - - - - 1.5em +0 +0 @@ -42,6 +29,8 @@ an "Unresolved ID reference found" warning during PDF builds. solid 1pt black + 0.25in + 0.25in 12pt 12pt 6pt @@ -415,5 +404,21 @@ an "Unresolved ID reference found" warning during PDF builds. + + + + + + + + + + + + diff --git a/doc/src/sgml/system-views.sgml b/doc/src/sgml/system-views.sgml index e9a59af8c34bb..4187191ea7413 100644 --- a/doc/src/sgml/system-views.sgml +++ b/doc/src/sgml/system-views.sgml @@ -81,6 +81,11 @@ open cursors + + pg_dsm_registry_allocations + shared memory allocations tracked in the DSM registry + + pg_file_settings summary of configuration file contents @@ -181,6 +186,11 @@ shared memory allocations + + pg_shmem_allocations_numa + NUMA node mappings for shared memory allocations + + pg_stats planner statistics @@ -1081,6 +1091,75 @@ AND c1.path[c2.level] = c2.path[c2.level]; + + <structname>pg_dsm_registry_allocations</structname> + + + pg_dsm_registry_allocations + + + + The pg_dsm_registry_allocations view shows shared + memory allocations tracked in the dynamic shared memory (DSM) registry. + This includes memory allocated by extensions using the mechanisms detailed + in . + + +
+ <structname>pg_dsm_registry_allocations</structname> Columns + + + + + Column Type + + + Description + + + + + + + + name text + + + The name of the allocation in the DSM registry. + + + + + + type text + + + The type of allocation. Possible values are segment, + area, and hash, which correspond + to dynamic shared memory segments, areas, and hash tables, respectively. + + + + + + size int8 + + + Size of the allocation in bytes. NULL for entries of type + area and hash. + + + + +
+ + + By default, the pg_dsm_registry_allocations view + can be read only by superusers or roles with privileges of the + pg_read_all_stats role. + +
+ <structname>pg_file_settings</structname> @@ -2814,21 +2893,18 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx unreserved means that the slot no longer retains the required WAL files and some of them are to be removed at - the next checkpoint. This state can return + the next checkpoint. This typically occurs when + is set to + a non-negative value. This state can return to reserved or extended.
- lost means that some required WAL files have - been removed and this slot is no longer usable. + lost means that this slot is no longer usable. - The last two states are seen only when - is - non-negative. If restart_lsn is NULL, this - field is null.
@@ -2854,6 +2930,17 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx + + + two_phase_at pg_lsn + + + The address (LSN) from which the decoding of prepared + transactions is enabled. NULL for logical slots + where two_phase is false and for physical slots. + + + inactive_since timestamptz @@ -2916,7 +3003,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx idle_timeout means that the slot has remained - idle longer than the configured + inactive longer than the configured duration. @@ -3916,7 +4003,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx passwd text - Password (possibly encrypted); null if none. See + Encrypted password; null if none. See pg_authid for details of how encrypted passwords are stored. @@ -4040,6 +4127,96 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx + + <structname>pg_shmem_allocations_numa</structname> + + + pg_shmem_allocations_numa + + + + The pg_shmem_allocations_numa shows how shared + memory allocations in the server's main shared memory segment are distributed + across NUMA nodes. This includes both memory allocated by + PostgreSQL itself and memory allocated + by extensions using the mechanisms detailed in + . This view will output multiple rows + for each of the shared memory segments provided that they are spread across + multiple NUMA nodes. This view should not be queried by monitoring systems + as it is very slow and may end up allocating shared memory in case it was not + used earlier. + Current limitation for this view is that won't show anonymous shared memory + allocations. + + + + Note that this view does not include memory allocated using the dynamic + shared memory infrastructure. + + + + + When determining the NUMA node, the view touches + all memory pages for the shared memory segment. This will force + allocation of the shared memory, if it wasn't allocated already, + and the memory may get allocated in a single NUMA + node (depending on system configuration). + + + + + <structname>pg_shmem_allocations_numa</structname> Columns + + + + + Column Type + + + Description + + + + + + + + name text + + + The name of the shared memory allocation. + + + + + + numa_node int4 + + + ID of NUMA node + + + + + + size int8 + + + Size of the allocation on this particular NUMA memory node in bytes + + + + + +
+ + + By default, the pg_shmem_allocations_numa view can be + read only by superusers or roles with privileges of the + pg_read_all_stats role. + +
+ <structname>pg_stats</structname> diff --git a/doc/src/sgml/test-decoding.sgml b/doc/src/sgml/test-decoding.sgml index 5d1ae8f4f52e2..7d3d590471a32 100644 --- a/doc/src/sgml/test-decoding.sgml +++ b/doc/src/sgml/test-decoding.sgml @@ -25,16 +25,16 @@ postgres=# SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'include-xids', '0'); - lsn | xid | data ------------+-----+-------------------------------------------------- - 0/16D30F8 | 691 | BEGIN - 0/16D32A0 | 691 | table public.data: INSERT: id[int4]:2 data[text]:'arg' - 0/16D32A0 | 691 | table public.data: INSERT: id[int4]:3 data[text]:'demo' - 0/16D32A0 | 691 | COMMIT - 0/16D32D8 | 692 | BEGIN - 0/16D3398 | 692 | table public.data: DELETE: id[int4]:2 - 0/16D3398 | 692 | table public.data: DELETE: id[int4]:3 - 0/16D3398 | 692 | COMMIT + lsn | xid | data +------------+-----+-------------------------------------------------- + 0/016D30F8 | 691 | BEGIN + 0/016D32A0 | 691 | table public.data: INSERT: id[int4]:2 data[text]:'arg' + 0/016D32A0 | 691 | table public.data: INSERT: id[int4]:3 data[text]:'demo' + 0/016D32A0 | 691 | COMMIT + 0/016D32D8 | 692 | BEGIN + 0/016D3398 | 692 | table public.data: DELETE: id[int4]:2 + 0/016D3398 | 692 | table public.data: DELETE: id[int4]:3 + 0/016D3398 | 692 | COMMIT (8 rows) @@ -45,18 +45,18 @@ postgres=# SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'i postgres[33712]=#* SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'stream-changes', '1'); - lsn | xid | data ------------+-----+-------------------------------------------------- - 0/16B21F8 | 503 | opening a streamed block for transaction TXN 503 - 0/16B21F8 | 503 | streaming change for TXN 503 - 0/16B2300 | 503 | streaming change for TXN 503 - 0/16B2408 | 503 | streaming change for TXN 503 - 0/16BEBA0 | 503 | closing a streamed block for transaction TXN 503 - 0/16B21F8 | 503 | opening a streamed block for transaction TXN 503 - 0/16BECA8 | 503 | streaming change for TXN 503 - 0/16BEDB0 | 503 | streaming change for TXN 503 - 0/16BEEB8 | 503 | streaming change for TXN 503 - 0/16BEBA0 | 503 | closing a streamed block for transaction TXN 503 + lsn | xid | data +------------+-----+-------------------------------------------------- + 0/016B21F8 | 503 | opening a streamed block for transaction TXN 503 + 0/016B21F8 | 503 | streaming change for TXN 503 + 0/016B2300 | 503 | streaming change for TXN 503 + 0/016B2408 | 503 | streaming change for TXN 503 + 0/016BEBA0 | 503 | closing a streamed block for transaction TXN 503 + 0/016B21F8 | 503 | opening a streamed block for transaction TXN 503 + 0/016BECA8 | 503 | streaming change for TXN 503 + 0/016BEDB0 | 503 | streaming change for TXN 503 + 0/016BEEB8 | 503 | streaming change for TXN 503 + 0/016BEBA0 | 503 | closing a streamed block for transaction TXN 503 (10 rows) diff --git a/doc/src/sgml/textsearch.sgml b/doc/src/sgml/textsearch.sgml index d171f8da80116..89928ed182913 100644 --- a/doc/src/sgml/textsearch.sgml +++ b/doc/src/sgml/textsearch.sgml @@ -1342,7 +1342,7 @@ ts_headline( config <b> and </b>, which can be suitable - for HTML output. + for HTML output (but see the warning below). @@ -1354,6 +1354,21 @@ ts_headline( config + + Warning: Cross-site Scripting (XSS) Safety + + The output from ts_headline is not guaranteed to + be safe for direct inclusion in web pages. When + HighlightAll is false (the + default), some simple XML tags are removed from the document, but this + is not guaranteed to remove all HTML markup. Therefore, this does not + provide an effective defense against attacks such as cross-site + scripting (XSS) attacks, when working with untrusted input. To guard + against such attacks, all HTML markup should be removed from the input + document, or an HTML sanitizer should be used on the output. + + + These option names are recognized case-insensitively. You must double-quote string values if they contain spaces or commas. @@ -2225,6 +2240,18 @@ LIMIT 10; Specifically, the only non-alphanumeric characters supported for email user names are period, dash, and underscore. + + + tag does not support all valid tag names as defined by + W3C Recommendation, XML. + Specifically, the only tag names supported are those starting with an + ASCII letter, underscore, or colon, and containing only letters, digits, + hyphens, underscores, periods, and colons. tag also + includes XML comments starting with <!-- and ending + with -->, and XML declarations (but note that this + includes anything starting with <?x and ending with + >). + diff --git a/doc/src/sgml/trigger.sgml b/doc/src/sgml/trigger.sgml index e9214dcf1b1bd..bb1b5faf34e31 100644 --- a/doc/src/sgml/trigger.sgml +++ b/doc/src/sgml/trigger.sgml @@ -129,10 +129,9 @@ In all cases, a trigger is executed as part of the same transaction as the statement that triggered it, so if either the statement or the trigger causes an error, the effects of both will be rolled back. - Also, the trigger will always run in the security context of the role - that executed the statement that caused the trigger to fire, unless - the trigger function is defined as SECURITY DEFINER, - in which case it will run as the function owner. + Also, the trigger will always run as the role that queued the trigger + event, unless the trigger function is marked as SECURITY + DEFINER, in which case it will run as the function owner. diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml index 35d34f224ef9b..f116d0648e559 100644 --- a/doc/src/sgml/xfunc.sgml +++ b/doc/src/sgml/xfunc.sgml @@ -234,21 +234,6 @@ CALL clean_emp(); whereas returning void is a PostgreSQL extension. - - - The entire body of an SQL function is parsed before any of it is - executed. While an SQL function can contain commands that alter - the system catalogs (e.g., CREATE TABLE), the effects - of such commands will not be visible during parse analysis of - later commands in the function. Thus, for example, - CREATE TABLE foo (...); INSERT INTO foo VALUES(...); - will not work as desired if packaged up into a single SQL function, - since foo won't exist yet when the INSERT - command is parsed. It's recommended to use PL/pgSQL - instead of an SQL function in this type of situation. - - - The syntax of the CREATE FUNCTION command requires the function body to be written as a string constant. It is usually @@ -2066,8 +2051,7 @@ PG_MODULE_MAGIC_EXT( - By-value types can only be 1, 2, or 4 bytes in length - (also 8 bytes, if sizeof(Datum) is 8 on your machine). + By-value types can only be 1, 2, 4, or 8 bytes in length. You should be careful to define your types such that they will be the same size (in bytes) on all architectures. For example, the long type is dangerous because it is 4 bytes on some @@ -2180,7 +2164,7 @@ memcpy(destination->data, buffer, 40); it's considered good style to use the macro VARHDRSZ to refer to the size of the overhead for a variable-length type. Also, the length field must be set using the - SET_VARSIZE macro, not by simple assignment. + SET_VARSIZE function, not by simple assignment. @@ -3844,14 +3828,17 @@ uint32 WaitEventExtensionNew(const char *wait_event_name) An injection point with a given name is declared using macro: -INJECTION_POINT(name); +INJECTION_POINT(name, arg); There are a few injection points already declared at strategic points within the server code. After adding a new injection point the code needs to be compiled in order for that injection point to be available in the binary. Add-ins written in C-language can declare injection points in - their own code using the same macro. + their own code using the same macro. The injection point names should use + lower-case characters, with terms separated by + dashes. arg is an optional argument value given to the + callback at run-time. @@ -3861,7 +3848,7 @@ INJECTION_POINT(name); a two-step approach with the following macros: INJECTION_POINT_LOAD(name); -INJECTION_POINT_CACHED(name); +INJECTION_POINT_CACHED(name, arg); Before entering the critical section, @@ -3894,7 +3881,9 @@ extern void InjectionPointAttach(const char *name, InjectionPointCallback: static void -custom_injection_callback(const char *name, const void *private_data) +custom_injection_callback(const char *name, + const void *private_data, + void *arg) { uint32 wait_event_info = WaitEventInjectionPointNew(name); @@ -3923,7 +3912,7 @@ if (IS_INJECTION_POINT_ATTACHED("before-foobar")) local_var = 123; /* also execute the callback */ - INJECTION_POINT_CACHED("before-foobar"); + INJECTION_POINT_CACHED("before-foobar", NULL); } #endif diff --git a/doc/src/sgml/xindex.sgml b/doc/src/sgml/xindex.sgml index 053619624950c..3d315df2f9803 100644 --- a/doc/src/sgml/xindex.sgml +++ b/doc/src/sgml/xindex.sgml @@ -461,6 +461,13 @@ 5
+ + + Return the addresses of C-callable skip support function(s) + (optional) + + 6 + @@ -591,7 +598,7 @@ 11 - stratnum + translate_cmptype translate compare types to strategy numbers used by the operator class (optional) 12 @@ -1062,7 +1069,8 @@ DEFAULT FOR TYPE int8 USING btree FAMILY integer_ops AS FUNCTION 1 btint8cmp(int8, int8) , FUNCTION 2 btint8sortsupport(internal) , FUNCTION 3 in_range(int8, int8, int8, boolean, boolean) , - FUNCTION 4 btequalimage(oid) ; + FUNCTION 4 btequalimage(oid) , + FUNCTION 6 btint8skipsupport(internal) ; CREATE OPERATOR CLASS int4_ops DEFAULT FOR TYPE int4 USING btree FAMILY integer_ops AS @@ -1075,7 +1083,8 @@ DEFAULT FOR TYPE int4 USING btree FAMILY integer_ops AS FUNCTION 1 btint4cmp(int4, int4) , FUNCTION 2 btint4sortsupport(internal) , FUNCTION 3 in_range(int4, int4, int4, boolean, boolean) , - FUNCTION 4 btequalimage(oid) ; + FUNCTION 4 btequalimage(oid) , + FUNCTION 6 btint4skipsupport(internal) ; CREATE OPERATOR CLASS int2_ops DEFAULT FOR TYPE int2 USING btree FAMILY integer_ops AS @@ -1088,7 +1097,8 @@ DEFAULT FOR TYPE int2 USING btree FAMILY integer_ops AS FUNCTION 1 btint2cmp(int2, int2) , FUNCTION 2 btint2sortsupport(internal) , FUNCTION 3 in_range(int2, int2, int2, boolean, boolean) , - FUNCTION 4 btequalimage(oid) ; + FUNCTION 4 btequalimage(oid) , + FUNCTION 6 btint2skipsupport(internal) ; ALTER OPERATOR FAMILY integer_ops USING btree ADD -- cross-type comparisons int8 vs int2 diff --git a/doc/src/sgml/xoper.sgml b/doc/src/sgml/xoper.sgml index 954a90d77d0ed..853b07a9f1489 100644 --- a/doc/src/sgml/xoper.sgml +++ b/doc/src/sgml/xoper.sgml @@ -21,7 +21,7 @@ PostgreSQL supports prefix - and infix operators. Operators can be + and binary (or infix) operators. Operators can be overloaded;overloadingoperators that is, the same operator name can be used for different operators that have different numbers and types of operands. When a query is diff --git a/meson.build b/meson.build index ba7916d149337..ab8101d67b26d 100644 --- a/meson.build +++ b/meson.build @@ -8,13 +8,14 @@ project('postgresql', ['c'], - version: '18devel', + version: '19devel', license: 'PostgreSQL', - # We want < 0.56 for python 3.5 compatibility on old platforms. EPEL for - # RHEL 7 has 0.55. < 0.54 would require replacing some uses of the fs - # module, < 0.53 all uses of fs. So far there's no need to go to >=0.56. - meson_version: '>=0.54', + # We want < 0.62 for python 3.6 compatibility on old platforms. + # RHEL 8 has 0.58. < 0.57 would require various additional + # backward-compatibility conditionals. + # Meson 0.57.0 and 0.57.1 are buggy, therefore >=0.57.2. + meson_version: '>=0.57.2', default_options: [ 'warning_level=1', #-Wall equivalent 'b_pch=false', @@ -107,6 +108,7 @@ os_deps = [] backend_both_deps = [] backend_deps = [] libpq_deps = [] +libpq_oauth_deps = [] pg_sysroot = '' @@ -544,6 +546,33 @@ dir_doc_extension = dir_doc / 'extension' # used, they need to be added to test_c_args as well. ############################################################### +# Do we need an option to enable C11? +c11_test = ''' +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif +''' + +if not cc.compiles(c11_test, name: 'C11') + c11_ok = false + if cc.get_id() == 'msvc' + c11_test_args = ['/std:c11'] + else + c11_test_args = ['-std=gnu11', '-std=c11'] + endif + foreach arg : c11_test_args + if cc.compiles(c11_test, name: 'C11 with @0@'.format(arg), args: [arg]) + c11_ok = true + cflags += arg + break + endif + endforeach + if not c11_ok + error('C compiler does not support C11') + endif +endif + + postgres_inc = [include_directories(postgres_inc_d)] test_lib_d = postgres_lib_d test_c_args = cppflags + cflags @@ -860,13 +889,13 @@ endif ############################################################### libcurlopt = get_option('libcurl') +oauth_flow_supported = false + if not libcurlopt.disabled() # Check for libcurl 7.61.0 or higher (corresponding to RHEL8 and the ability # to explicitly set TLS 1.3 ciphersuites). libcurl = dependency('libcurl', version: '>= 7.61.0', required: libcurlopt) if libcurl.found() - cdata.set('USE_LIBCURL', 1) - # Check to see whether the current platform supports thread-safe Curl # initialization. libcurl_threadsafe_init = false @@ -938,11 +967,48 @@ if not libcurlopt.disabled() endif endif + # Check that the current platform supports our builtin flow. This requires + # libcurl and one of either epoll or kqueue. + oauth_flow_supported = ( + libcurl.found() + and (cc.has_header('sys/event.h', + args: test_c_args, include_directories: postgres_inc) + or cc.has_header('sys/epoll.h', + args: test_c_args, include_directories: postgres_inc)) + ) + + if oauth_flow_supported + cdata.set('USE_LIBCURL', 1) + elif libcurlopt.enabled() + error('client-side OAuth is not supported on this platform') + endif + else libcurl = not_found_dep endif +############################################################### +# Library: libnuma +############################################################### + +libnumaopt = get_option('libnuma') +if not libnumaopt.disabled() + # via pkg-config + libnuma = dependency('numa', required: false) + if not libnuma.found() + libnuma = cc.find_library('numa', required: libnumaopt) + endif + if not cc.has_header('numa.h', dependencies: libnuma, required: libnumaopt) + libnuma = not_found_dep + endif + if libnuma.found() + cdata.set('USE_LIBNUMA', 1) + endif +else + libnuma = not_found_dep +endif + ############################################################### # Library: liburing @@ -952,6 +1018,12 @@ liburingopt = get_option('liburing') liburing = dependency('liburing', required: liburingopt) if liburing.found() cdata.set('USE_LIBURING', 1) + + if cc.has_function('io_uring_queue_init_mem', + dependencies: liburing, args: test_c_args) + cdata.set('HAVE_LIBURING_QUEUE_INIT_MEM', 1) + endif + endif @@ -1167,7 +1239,7 @@ if not perlopt.disabled() if cc.get_id() == 'msvc' # prevent binary mismatch between MSVC built plperl and Strawberry or # msys ucrt perl libraries - perl_v = run_command(perl, '-V').stdout() + perl_v = run_command(perl, '-V', check: false).stdout() if not perl_v.contains('USE_THREAD_SAFE_LOCALE') perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE'] endif @@ -1246,7 +1318,7 @@ pyopt = get_option('plpython') python3_dep = not_found_dep if not pyopt.disabled() pm = import('python') - python3_inst = pm.find_installation(python.path(), required: pyopt) + python3_inst = pm.find_installation(python.full_path(), required: pyopt) if python3_inst.found() python3_dep = python3_inst.dependency(embed: true, required: pyopt) # Remove this check after we depend on Meson >= 1.1.0 @@ -1479,6 +1551,7 @@ if sslopt in ['auto', 'openssl'] # Function introduced in OpenSSL 1.1.1, not in LibreSSL. ['X509_get_signature_info'], ['SSL_CTX_set_num_tickets'], + ['SSL_CTX_set_keylog_callback'], ] are_openssl_funcs_complete = true @@ -1654,49 +1727,6 @@ endif # Compiler tests ############################################################### -# Do we need -std=c99 to compile C99 code? We don't want to add -std=c99 -# unnecessarily, because we optionally rely on newer features. -c99_test = ''' -#include -#include -#include -#include - -struct named_init_test { - int a; - int b; -}; - -extern void structfunc(struct named_init_test); - -int main(int argc, char **argv) -{ - struct named_init_test nit = { - .a = 3, - .b = 5, - }; - - for (int loop_var = 0; loop_var < 3; loop_var++) - { - nit.a += nit.b; - } - - structfunc((struct named_init_test){1, 0}); - - return nit.a != 0; -} -''' - -if not cc.compiles(c99_test, name: 'c99', args: test_c_args) - if cc.compiles(c99_test, name: 'c99 with -std=c99', - args: test_c_args + ['-std=c99']) - test_c_args += '-std=c99' - cflags += '-std=c99' - else - error('C compiler does not support C99') - endif -endif - if host_machine.endian() == 'big' cdata.set('WORDS_BIGENDIAN', 1) endif @@ -1946,10 +1976,7 @@ if cc.links(''' cdata.set('HAVE__BUILTIN_OP_OVERFLOW', 1) endif - -# XXX: The configure.ac check for __cpuid() is broken, we don't copy that -# here. To prevent problems due to two detection methods working, stop -# checking after one. +# Check for __get_cpuid() and __cpuid(). if cc.links(''' #include int main(int arg, char **argv) @@ -2348,17 +2375,21 @@ endif ############################################################### # Select CRC-32C implementation. # -# If we are targeting a processor that has Intel SSE 4.2 instructions, we can -# use the special CRC instructions for calculating CRC-32C. If we're not -# targeting such a processor, but we can nevertheless produce code that uses -# the SSE intrinsics, compile both implementations and select which one to use -# at runtime, depending on whether SSE 4.2 is supported by the processor we're -# running on. +# There are three methods of calculating CRC, in order of increasing +# performance: +# +# 1. The fallback using a lookup table, called slicing-by-8 +# 2. CRC-32C instructions (found in e.g. Intel SSE 4.2 and ARMv8 CRC Extension) +# 3. Algorithms using carryless multiplication instructions +# (e.g. Intel PCLMUL and Arm PMULL) +# +# If we can produce code (via function attributes or additional compiler +# flags) that uses #2 (and possibly #3), we compile all implementations +# and select which one to use at runtime, depending on what is supported +# by the processor we're running on. # -# Similarly, if we are targeting an ARM processor that has the CRC -# instructions that are part of the ARMv8 CRC Extension, use them. And if -# we're not targeting such a processor, but can nevertheless produce code that -# uses the CRC instructions, compile both, and select at runtime. +# If we are targeting a processor that has #2, we can use that without +# runtime selection. # # Note that we do not use __attribute__((target("..."))) for the ARM CRC # instructions because until clang 16, using the ARM intrinsics still requires @@ -2392,7 +2423,7 @@ int main(void) } ''' - if not cc.links(prog, name: '_mm_crc32_u8 and _mm_crc32_u32', + if not cc.links(prog, name: 'SSE 4.2 CRC32C', args: test_c_args) # Do not use Intel SSE 4.2 elif (cc.get_define('__SSE4_2__') != '') @@ -2407,6 +2438,39 @@ int main(void) have_optimized_crc = true endif + # Check if the compiler supports AVX-512 carryless multiplication + # and three-way exclusive-or instructions used for computing CRC. + # AVX-512F is assumed to be supported if the above are. + prog = ''' +#include +__m512i x; +__m512i y; + +#if defined(__has_attribute) && __has_attribute (target) +__attribute__((target("vpclmulqdq,avx512vl"))) +#endif +int main(void) +{ + __m128i z; + + x = _mm512_xor_si512(_mm512_zextsi128_si512(_mm_cvtsi32_si128(0)), x); + y = _mm512_clmulepi64_epi128(x, y, 0); + z = _mm_ternarylogic_epi64( + _mm512_castsi512_si128(y), + _mm512_extracti32x4_epi32(y, 1), + _mm512_extracti32x4_epi32(y, 2), + 0x96); + /* return computed value, to prevent the above being optimized away */ + return _mm_crc32_u64(0, _mm_extract_epi64(z, 0)); +} +''' + + if cc.links(prog, + name: 'AVX-512 CRC32C', + args: test_c_args) + cdata.set('USE_AVX512_CRC32C_WITH_RUNTIME_CHECK', 1) + endif + endif elif host_cpu == 'arm' or host_cpu == 'aarch64' @@ -2569,6 +2633,7 @@ decl_checks = [ ['strlcpy', 'string.h'], ['strnlen', 'string.h'], ['strsep', 'string.h'], + ['timingsafe_bcmp', 'string.h'], ] # Need to check for function declarations for these functions, because @@ -2578,6 +2643,7 @@ decl_checks += [ ['preadv', 'sys/uio.h'], ['pwritev', 'sys/uio.h'], ['strchrnul', 'string.h'], + ['memset_s', 'string.h', '#define __STDC_WANT_LIB_EXT1__ 1'], ] # Check presence of some optional LLVM functions. @@ -2591,21 +2657,23 @@ endif foreach c : decl_checks func = c.get(0) header = c.get(1) - args = c.get(2, {}) + prologue = c.get(2, '') + args = c.get(3, {}) varname = 'HAVE_DECL_' + func.underscorify().to_upper() found = cc.compiles(''' -#include <@0@> +@0@ +#include <@1@> int main() { -#ifndef @1@ - (void) @1@; +#ifndef @2@ + (void) @2@; #endif return 0; } -'''.format(header, func), +'''.format(prologue, header, func), name: 'test whether @0@ is declared'.format(func), # need to add cflags_warn to get at least # -Werror=unguarded-availability-new if applicable @@ -2804,7 +2872,6 @@ func_checks = [ ['kqueue'], ['localeconv_l'], ['mbstowcs_l'], - ['memset_s'], ['mkdtemp'], ['posix_fadvise'], ['posix_fallocate'], @@ -2826,6 +2893,7 @@ func_checks = [ ['strsignal'], ['sync_file_range'], ['syncfs'], + ['timingsafe_bcmp'], ['uselocale'], ['wcstombs_l'], ] @@ -3045,6 +3113,8 @@ gen_export_kwargs = { 'install': false, } +# command to create stamp files on all OSs +stamp_cmd = [python, '-c', 'import sys; open(sys.argv[1], "w")', '@OUTPUT0@'] ### @@ -3066,13 +3136,13 @@ gen_kwlist_cmd = [ ### if host_system == 'windows' - pg_ico = meson.source_root() / 'src' / 'port' / 'win32.ico' + pg_ico = meson.project_source_root() / 'src' / 'port' / 'win32.ico' win32ver_rc = files('src/port/win32ver.rc') rcgen = find_program('src/tools/rcgen', native: true) rcgen_base_args = [ '--srcdir', '@SOURCE_DIR@', - '--builddir', meson.build_root(), + '--builddir', meson.project_build_root(), '--rcout', '@OUTPUT0@', '--out', '@OUTPUT1@', '--input', '@INPUT@', @@ -3081,11 +3151,11 @@ if host_system == 'windows' if cc.get_argument_syntax() == 'msvc' rc = find_program('rc', required: true) - rcgen_base_args += ['--rc', rc.path()] + rcgen_base_args += ['--rc', rc.full_path()] rcgen_outputs = ['@BASENAME@.rc', '@BASENAME@.res'] else windres = find_program('windres', required: true) - rcgen_base_args += ['--windres', windres.path()] + rcgen_base_args += ['--windres', windres.full_path()] rcgen_outputs = ['@BASENAME@.rc', '@BASENAME@.obj'] endif @@ -3162,14 +3232,14 @@ subdir('src/port') frontend_common_code = declare_dependency( compile_args: ['-DFRONTEND'], include_directories: [postgres_inc], - sources: generated_headers, + sources: generated_headers_stamp, dependencies: [os_deps, zlib, zstd, lz4], ) backend_common_code = declare_dependency( compile_args: ['-DBUILDING_DLL'], include_directories: [postgres_inc], - sources: generated_headers, + sources: generated_headers_stamp, dependencies: [os_deps, zlib, zstd], ) @@ -3184,7 +3254,7 @@ shlib_code = declare_dependency( frontend_stlib_code = declare_dependency( include_directories: [postgres_inc], link_with: [common_static, pgport_static], - sources: generated_headers, + sources: generated_headers_stamp, dependencies: [os_deps, libintl], ) @@ -3192,7 +3262,7 @@ frontend_stlib_code = declare_dependency( frontend_shlib_code = declare_dependency( include_directories: [postgres_inc], link_with: [common_shlib, pgport_shlib], - sources: generated_headers, + sources: generated_headers_stamp, dependencies: [shlib_code, os_deps, libintl], ) @@ -3202,7 +3272,7 @@ frontend_shlib_code = declare_dependency( frontend_no_fe_utils_code = declare_dependency( include_directories: [postgres_inc], link_with: [common_static, pgport_static], - sources: generated_headers, + sources: generated_headers_stamp, dependencies: [os_deps, libintl], ) @@ -3212,23 +3282,25 @@ libpq_deps += [ gssapi, ldap_r, - # XXX libcurl must link after libgssapi_krb5 on FreeBSD to avoid segfaults - # during gss_acquire_cred(). This is possibly related to Curl's Heimdal - # dependency on that platform? - libcurl, libintl, ssl, ] +libpq_oauth_deps += [ + thread_dep, + libcurl, +] + subdir('src/interfaces/libpq') -# fe_utils depends on libpq +# fe_utils and libpq-oauth depends on libpq subdir('src/fe_utils') +subdir('src/interfaces/libpq-oauth') # for frontend binaries frontend_code = declare_dependency( include_directories: [postgres_inc], link_with: [fe_utils, common_static, pgport_static], - sources: generated_headers, + sources: generated_headers_stamp, dependencies: [os_deps, libintl], ) @@ -3240,6 +3312,7 @@ backend_both_deps += [ icu_i18n, ldap, libintl, + libnuma, liburing, libxml, lz4, @@ -3257,7 +3330,7 @@ backend_code = declare_dependency( include_directories: [postgres_inc], link_args: ldflags_be, link_with: [], - sources: generated_headers + generated_backend_headers, + sources: generated_backend_headers_stamp, dependencies: os_deps + backend_both_deps + backend_deps, ) @@ -3316,7 +3389,7 @@ foreach t1 : configure_files potentially_conflicting_files += meson.current_build_dir() / t endforeach foreach sub, fnames : generated_sources_ac - sub = meson.build_root() / sub + sub = meson.project_build_root() / sub foreach fname : fnames potentially_conflicting_files += sub / fname endforeach @@ -3382,6 +3455,13 @@ installed_targets = [ ecpg_targets, ] +if oauth_flow_supported + installed_targets += [ + libpq_oauth_so, + libpq_oauth_st, + ] +endif + # all targets that require building code all_built = [ installed_targets, @@ -3416,7 +3496,7 @@ run_target('install-test-files', ############################################################### # DESTDIR for the installation we'll run tests in -test_install_destdir = meson.build_root() / 'tmp_install/' +test_install_destdir = meson.project_build_root() / 'tmp_install/' # DESTDIR + prefix appropriately munged if build_system != 'windows' @@ -3459,7 +3539,7 @@ test('install_test_files', is_parallel: false, suite: ['setup']) -test_result_dir = meson.build_root() / 'testrun' +test_result_dir = meson.project_build_root() / 'testrun' # XXX: pg_regress doesn't assign unique ports on windows. To avoid the @@ -3470,12 +3550,12 @@ testport = 40000 test_env = environment() -test_initdb_template = meson.build_root() / 'tmp_install' / 'initdb-template' +test_initdb_template = meson.project_build_root() / 'tmp_install' / 'initdb-template' test_env.set('PG_REGRESS', pg_regress.full_path()) test_env.set('REGRESS_SHLIB', regress_module.full_path()) test_env.set('INITDB_TEMPLATE', test_initdb_template) # for Cluster.pm's portlock logic -test_env.set('top_builddir', meson.build_root()) +test_env.set('top_builddir', meson.project_build_root()) # Add the temporary installation to the library search path on platforms where # that works (everything but windows, basically). On windows everything @@ -3519,26 +3599,20 @@ sys.exit(sp.returncode) # Test Generation ############################################################### -# When using a meson version understanding exclude_suites, define a -# 'tmp_install' test setup (the default) that excludes tests running against a -# pre-existing install and a 'running' setup that conflicts with creation of -# the temporary installation and tap tests (which don't support running -# against a running server). +# Define a 'tmp_install' test setup (the default) that excludes tests +# running against a pre-existing install and a 'running' setup that +# conflicts with creation of the temporary installation and tap tests +# (which don't support running against a running server). running_suites = [] install_suites = [] -if meson.version().version_compare('>=0.57') - runningcheck = true -else - runningcheck = false -endif testwrap = files('src/tools/testwrap') foreach test_dir : tests testwrap_base = [ testwrap, - '--basedir', meson.build_root(), + '--basedir', meson.project_build_root(), '--srcdir', test_dir['sd'], # Some test suites are not run by default but can be run if selected by the # user via variable PG_TEST_EXTRA. Pass configuration time value of @@ -3628,7 +3702,7 @@ foreach test_dir : tests install_suites += test_group # some tests can't support running against running DB - if runningcheck and t.get('runningcheck', true) + if t.get('runningcheck', true) test(test_group_running / kind, python, args: [ @@ -3655,8 +3729,8 @@ foreach test_dir : tests endif test_command = [ - perl.path(), - '-I', meson.source_root() / 'src/test/perl', + perl.full_path(), + '-I', meson.project_source_root() / 'src/test/perl', '-I', test_dir['sd'], ] @@ -3711,13 +3785,11 @@ foreach test_dir : tests endforeach # directories with tests # repeat condition so meson realizes version dependency -if meson.version().version_compare('>=0.57') - add_test_setup('tmp_install', - is_default: true, - exclude_suites: running_suites) - add_test_setup('running', - exclude_suites: ['setup'] + install_suites) -endif +add_test_setup('tmp_install', + is_default: true, + exclude_suites: running_suites) +add_test_setup('running', + exclude_suites: ['setup'] + install_suites) @@ -3774,7 +3846,7 @@ tar_gz = custom_target('tar.gz', '--format', 'tar.gz', '-9', '--prefix', distdir + '/', - '-o', join_paths(meson.build_root(), '@OUTPUT@'), + '-o', join_paths(meson.project_build_root(), '@OUTPUT@'), pg_git_revision], output: distdir + '.tar.gz', ) @@ -3784,11 +3856,11 @@ if bzip2.found() build_always_stale: true, command: [git, '-C', '@SOURCE_ROOT@', '-c', 'core.autocrlf=false', - '-c', 'tar.tar.bz2.command="@0@" -c'.format(bzip2.path()), + '-c', 'tar.tar.bz2.command="@0@" -c'.format(bzip2.full_path()), 'archive', '--format', 'tar.bz2', '--prefix', distdir + '/', - '-o', join_paths(meson.build_root(), '@OUTPUT@'), + '-o', join_paths(meson.project_build_root(), '@OUTPUT@'), pg_git_revision], output: distdir + '.tar.bz2', ) @@ -3805,10 +3877,7 @@ alias_target('pgdist', [tar_gz, tar_bz2]) # But not if we are in a subproject, in case the parent project wants to # create a dist using the standard Meson command. if not meson.is_subproject() - # We can only pass the identifier perl here when we depend on >= 0.55 - if meson.version().version_compare('>=0.55') - meson.add_dist_script(perl, '-e', 'exit 1') - endif + meson.add_dist_script(perl, '-e', 'exit 1') endif @@ -3817,105 +3886,102 @@ endif # The End, The End, My Friend ############################################################### -if meson.version().version_compare('>=0.57') +summary( + { + 'data block size': '@0@ kB'.format(cdata.get('BLCKSZ') / 1024), + 'WAL block size': '@0@ kB'.format(cdata.get('XLOG_BLCKSZ') / 1024), + 'segment size': get_option('segsize_blocks') != 0 ? + '@0@ blocks'.format(cdata.get('RELSEG_SIZE')) : + '@0@ GB'.format(get_option('segsize')), + }, + section: 'Data layout', +) - summary( - { - 'data block size': '@0@ kB'.format(cdata.get('BLCKSZ') / 1024), - 'WAL block size': '@0@ kB'.format(cdata.get('XLOG_BLCKSZ') / 1024), - 'segment size': get_option('segsize_blocks') != 0 ? - '@0@ blocks'.format(cdata.get('RELSEG_SIZE')) : - '@0@ GB'.format(get_option('segsize')), - }, - section: 'Data layout', - ) +summary( + { + 'host system': '@0@ @1@'.format(host_system, host_cpu), + 'build system': '@0@ @1@'.format(build_machine.system(), + build_machine.cpu_family()), + }, + section: 'System', +) - summary( - { - 'host system': '@0@ @1@'.format(host_system, host_cpu), - 'build system': '@0@ @1@'.format(build_machine.system(), - build_machine.cpu_family()), - }, - section: 'System', - ) +summary( + { + 'linker': '@0@'.format(cc.get_linker_id()), + 'C compiler': '@0@ @1@'.format(cc.get_id(), cc.version()), + }, + section: 'Compiler', +) + +summary( + { + 'CPP FLAGS': ' '.join(cppflags), + 'C FLAGS, functional': ' '.join(cflags), + 'C FLAGS, warnings': ' '.join(cflags_warn), + 'C FLAGS, modules': ' '.join(cflags_mod), + 'C FLAGS, user specified': ' '.join(get_option('c_args')), + 'LD FLAGS': ' '.join(ldflags + get_option('c_link_args')), + }, + section: 'Compiler Flags', +) +if llvm.found() summary( { - 'linker': '@0@'.format(cc.get_linker_id()), - 'C compiler': '@0@ @1@'.format(cc.get_id(), cc.version()), + 'C++ compiler': '@0@ @1@'.format(cpp.get_id(), cpp.version()), }, section: 'Compiler', ) summary( { - 'CPP FLAGS': ' '.join(cppflags), - 'C FLAGS, functional': ' '.join(cflags), - 'C FLAGS, warnings': ' '.join(cflags_warn), - 'C FLAGS, modules': ' '.join(cflags_mod), - 'C FLAGS, user specified': ' '.join(get_option('c_args')), - 'LD FLAGS': ' '.join(ldflags + get_option('c_link_args')), + 'C++ FLAGS, functional': ' '.join(cxxflags), + 'C++ FLAGS, warnings': ' '.join(cxxflags_warn), + 'C++ FLAGS, user specified': ' '.join(get_option('cpp_args')), }, section: 'Compiler Flags', ) +endif - if llvm.found() - summary( - { - 'C++ compiler': '@0@ @1@'.format(cpp.get_id(), cpp.version()), - }, - section: 'Compiler', - ) - - summary( - { - 'C++ FLAGS, functional': ' '.join(cxxflags), - 'C++ FLAGS, warnings': ' '.join(cxxflags_warn), - 'C++ FLAGS, user specified': ' '.join(get_option('cpp_args')), - }, - section: 'Compiler Flags', - ) - endif - - summary( - { - 'bison': '@0@ @1@'.format(bison.full_path(), bison_version), - 'dtrace': dtrace, - 'flex': '@0@ @1@'.format(flex.full_path(), flex_version), - }, - section: 'Programs', - ) - - summary( - { - 'bonjour': bonjour, - 'bsd_auth': bsd_auth, - 'docs': docs_dep, - 'docs_pdf': docs_pdf_dep, - 'gss': gssapi, - 'icu': icu, - 'ldap': ldap, - 'libcurl': libcurl, - 'liburing': liburing, - 'libxml': libxml, - 'libxslt': libxslt, - 'llvm': llvm, - 'lz4': lz4, - 'nls': libintl, - 'openssl': ssl, - 'pam': pam, - 'plperl': [perl_dep, perlversion], - 'plpython': python3_dep, - 'pltcl': tcl_dep, - 'readline': readline, - 'selinux': selinux, - 'systemd': systemd, - 'uuid': uuid, - 'zlib': zlib, - 'zstd': zstd, - }, - section: 'External libraries', - list_sep: ' ', - ) +summary( + { + 'bison': '@0@ @1@'.format(bison.full_path(), bison_version), + 'dtrace': dtrace, + 'flex': '@0@ @1@'.format(flex.full_path(), flex_version), + }, + section: 'Programs', +) -endif +summary( + { + 'bonjour': bonjour, + 'bsd_auth': bsd_auth, + 'docs': docs_dep, + 'docs_pdf': docs_pdf_dep, + 'gss': gssapi, + 'icu': icu, + 'ldap': ldap, + 'libcurl': libcurl, + 'libnuma': libnuma, + 'liburing': liburing, + 'libxml': libxml, + 'libxslt': libxslt, + 'llvm': llvm, + 'lz4': lz4, + 'nls': libintl, + 'openssl': ssl, + 'pam': pam, + 'plperl': [perl_dep, perlversion], + 'plpython': python3_dep, + 'pltcl': tcl_dep, + 'readline': readline, + 'selinux': selinux, + 'systemd': systemd, + 'uuid': uuid, + 'zlib': zlib, + 'zstd': zstd, + }, + section: 'External libraries', + list_sep: ' ', +) diff --git a/meson_options.txt b/meson_options.txt index dd7126da3a73b..06bf5627d3c03 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -106,6 +106,9 @@ option('libcurl', type : 'feature', value: 'auto', option('libedit_preferred', type: 'boolean', value: false, description: 'Prefer BSD Libedit over GNU Readline') +option('libnuma', type: 'feature', value: 'auto', + description: 'NUMA support') + option('liburing', type : 'feature', value: 'auto', description: 'io_uring support, for asynchronous I/O') diff --git a/src/Makefile.global.in b/src/Makefile.global.in index cce29a37ac506..8b1b357beaa04 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -196,6 +196,7 @@ with_gssapi = @with_gssapi@ with_krb_srvnam = @with_krb_srvnam@ with_ldap = @with_ldap@ with_libcurl = @with_libcurl@ +with_libnuma = @with_libnuma@ with_liburing = @with_liburing@ with_libxml = @with_libxml@ with_libxslt = @with_libxslt@ @@ -223,6 +224,9 @@ krb_srvtab = @krb_srvtab@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_LIBS = @ICU_LIBS@ +LIBNUMA_CFLAGS = @LIBNUMA_CFLAGS@ +LIBNUMA_LIBS = @LIBNUMA_LIBS@ + LIBURING_CFLAGS = @LIBURING_CFLAGS@ LIBURING_LIBS = @LIBURING_LIBS@ @@ -250,7 +254,7 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ PG_SYSROOT = @PG_SYSROOT@ -override CPPFLAGS := $(ICU_CFLAGS) $(LIBURING_CFLAGS) $(CPPFLAGS) +override CPPFLAGS += $(ICU_CFLAGS) $(LIBNUMA_CFLAGS) $(LIBURING_CFLAGS) ifdef PGXS override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS) @@ -343,6 +347,9 @@ perl_embed_ldflags = @perl_embed_ldflags@ AWK = @AWK@ LN_S = @LN_S@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ +LIBCURL_LDFLAGS = @LIBCURL_LDFLAGS@ +LIBCURL_LDLIBS = @LIBCURL_LDLIBS@ MSGFMT = @MSGFMT@ MSGFMT_FLAGS = @MSGFMT_FLAGS@ MSGMERGE = @MSGMERGE@ @@ -367,10 +374,10 @@ DOWNLOAD = wget -O $@ --no-use-server-timestamps # Pick a release from here: . Note # that the most recent release listed there is often a pre-release; # don't pick that one, except for testing. -UNICODE_VERSION = 15.1.0 +UNICODE_VERSION = 16.0.0 # Pick a release from here: -CLDR_VERSION = 45 +CLDR_VERSION = 47 # Tree-wide build support diff --git a/src/Makefile.shlib b/src/Makefile.shlib index fa81f6ffdd6d9..3825af5b22872 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -112,7 +112,7 @@ ifeq ($(PORTNAME), darwin) ifneq ($(SO_MAJOR_VERSION), 0) version_link = -compatibility_version $(SO_MAJOR_VERSION) -current_version $(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) endif - LINK.shared = $(COMPILER) -dynamiclib -install_name '$(libdir)/lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX)' $(version_link) $(exported_symbols_list) + LINK.shared = $(COMPILER) -dynamiclib -install_name '$(libdir)/lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX)' $(version_link) shlib = lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX) shlib_major = lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX) else @@ -122,7 +122,7 @@ ifeq ($(PORTNAME), darwin) BUILD.exports = $(AWK) '/^[^\#]/ {printf "_%s\n",$$1}' $< >$@ exports_file = $(SHLIB_EXPORTS:%.txt=%.list) ifneq (,$(exports_file)) - exported_symbols_list = -exported_symbols_list $(exports_file) + LINK.shared += -exported_symbols_list $(exports_file) endif endif diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index 01e1db7f856be..7ff7467e462b0 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -68,7 +68,7 @@ typedef struct BrinShared int scantuplesortstates; /* Query ID, for report in worker processes */ - uint64 queryid; + int64 queryid; /* * workersdonecv is used to monitor the progress of workers. All parallel @@ -1608,7 +1608,7 @@ brin_build_desc(Relation rel) opcInfoFn = index_getprocinfo(rel, keyno + 1, BRIN_PROCNUM_OPCINFO); opcinfo[keyno] = (BrinOpcInfo *) - DatumGetPointer(FunctionCall1(opcInfoFn, attr->atttypid)); + DatumGetPointer(FunctionCall1(opcInfoFn, ObjectIdGetDatum(attr->atttypid))); totalstored += opcinfo[keyno]->oi_nstored; } @@ -2262,7 +2262,7 @@ add_values_to_range(Relation idxRel, BrinDesc *bdesc, BrinMemTuple *dtup, PointerGetDatum(bdesc), PointerGetDatum(bval), values[keyno], - nulls[keyno]); + BoolGetDatum(nulls[keyno])); /* if that returned true, we need to insert the updated tuple */ modified |= DatumGetBool(result); diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index 82b425ce37daa..7c3f7d454fc25 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -540,7 +540,7 @@ brin_bloom_add_value(PG_FUNCTION_ARGS) BrinDesc *bdesc = (BrinDesc *) PG_GETARG_POINTER(0); BrinValues *column = (BrinValues *) PG_GETARG_POINTER(1); Datum newval = PG_GETARG_DATUM(2); - bool isnull PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_DATUM(3); + bool isnull PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_BOOL(3); BloomOptions *opts = (BloomOptions *) PG_GET_OPCLASS_OPTIONS(); Oid colloid = PG_GET_COLLATION(); FmgrInfo *hashFn; diff --git a/src/backend/access/brin/brin_minmax.c b/src/backend/access/brin/brin_minmax.c index d21ab3a668cce..79c5a0aa18578 100644 --- a/src/backend/access/brin/brin_minmax.c +++ b/src/backend/access/brin/brin_minmax.c @@ -66,7 +66,7 @@ brin_minmax_add_value(PG_FUNCTION_ARGS) BrinDesc *bdesc = (BrinDesc *) PG_GETARG_POINTER(0); BrinValues *column = (BrinValues *) PG_GETARG_POINTER(1); Datum newval = PG_GETARG_DATUM(2); - bool isnull PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_DATUM(3); + bool isnull PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_BOOL(3); Oid colloid = PG_GET_COLLATION(); FmgrInfo *cmpFn; Datum compar; @@ -225,8 +225,8 @@ brin_minmax_union(PG_FUNCTION_ARGS) /* Adjust minimum, if B's min is less than A's min */ finfo = minmax_get_strategy_procinfo(bdesc, attno, attr->atttypid, BTLessStrategyNumber); - needsadj = FunctionCall2Coll(finfo, colloid, col_b->bv_values[0], - col_a->bv_values[0]); + needsadj = DatumGetBool(FunctionCall2Coll(finfo, colloid, col_b->bv_values[0], + col_a->bv_values[0])); if (needsadj) { if (!attr->attbyval) @@ -238,8 +238,8 @@ brin_minmax_union(PG_FUNCTION_ARGS) /* Adjust maximum, if B's max is greater than A's max */ finfo = minmax_get_strategy_procinfo(bdesc, attno, attr->atttypid, BTGreaterStrategyNumber); - needsadj = FunctionCall2Coll(finfo, colloid, col_b->bv_values[1], - col_a->bv_values[1]); + needsadj = DatumGetBool(FunctionCall2Coll(finfo, colloid, col_b->bv_values[1], + col_a->bv_values[1])); if (needsadj) { if (!attr->attbyval) diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 0d1507a2a3624..c87f1b9cd7eb2 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -624,7 +624,7 @@ brin_range_serialize(Ranges *range) for (i = 0; i < nvalues; i++) { - len += VARSIZE_ANY(range->values[i]); + len += VARSIZE_ANY(DatumGetPointer(range->values[i])); } } else if (typlen == -2) /* cstring */ @@ -1992,8 +1992,8 @@ brin_minmax_multi_distance_tid(PG_FUNCTION_ARGS) double da1, da2; - ItemPointer pa1 = (ItemPointer) PG_GETARG_DATUM(0); - ItemPointer pa2 = (ItemPointer) PG_GETARG_DATUM(1); + ItemPointer pa1 = (ItemPointer) PG_GETARG_POINTER(0); + ItemPointer pa2 = (ItemPointer) PG_GETARG_POINTER(1); /* * We know the values are range boundaries, but the range may be collapsed @@ -2032,7 +2032,7 @@ brin_minmax_multi_distance_numeric(PG_FUNCTION_ARGS) d = DirectFunctionCall2(numeric_sub, a2, a1); /* a2 - a1 */ - PG_RETURN_FLOAT8(DirectFunctionCall1(numeric_float8, d)); + PG_RETURN_DATUM(DirectFunctionCall1(numeric_float8, d)); } /* @@ -2414,7 +2414,7 @@ brin_minmax_multi_add_value(PG_FUNCTION_ARGS) BrinDesc *bdesc = (BrinDesc *) PG_GETARG_POINTER(0); BrinValues *column = (BrinValues *) PG_GETARG_POINTER(1); Datum newval = PG_GETARG_DATUM(2); - bool isnull PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_DATUM(3); + bool isnull PG_USED_FOR_ASSERTS_ONLY = PG_GETARG_BOOL(3); MinMaxMultiOptions *opts = (MinMaxMultiOptions *) PG_GET_OPCLASS_OPTIONS(); Oid colloid = PG_GET_COLLATION(); bool modified = false; diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 969d1028cae89..1173a6d81b5ed 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -105,7 +105,7 @@ missing_hash(const void *key, Size keysize) { const missing_cache_key *entry = (missing_cache_key *) key; - return hash_bytes((const unsigned char *) entry->value, entry->len); + return hash_bytes((const unsigned char *) DatumGetPointer(entry->value), entry->len); } static int @@ -189,7 +189,7 @@ getmissingattr(TupleDesc tupleDesc, if (att->attlen > 0) key.len = att->attlen; else - key.len = VARSIZE_ANY(attrmiss->am_value); + key.len = VARSIZE_ANY(DatumGetPointer(attrmiss->am_value)); key.value = attrmiss->am_value; entry = hash_search(missing_cache, &key, HASH_ENTER, &found); @@ -901,9 +901,9 @@ expand_tuple(HeapTuple *targetHeapTuple, att->attlen, attrmiss[attnum].am_value); - targetDataLen = att_addlength_pointer(targetDataLen, - att->attlen, - attrmiss[attnum].am_value); + targetDataLen = att_addlength_datum(targetDataLen, + att->attlen, + attrmiss[attnum].am_value); } else { diff --git a/src/backend/access/common/printsimple.c b/src/backend/access/common/printsimple.c index f346ab3e8125b..a09c8fcd3323e 100644 --- a/src/backend/access/common/printsimple.c +++ b/src/backend/access/common/printsimple.c @@ -123,7 +123,7 @@ printsimple(TupleTableSlot *slot, DestReceiver *self) case OIDOID: { - Oid num = ObjectIdGetDatum(value); + Oid num = DatumGetObjectId(value); char str[10]; /* 10 digits */ int len; diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c index 830a3d883aa2e..6d3045e233211 100644 --- a/src/backend/access/common/printtup.c +++ b/src/backend/access/common/printtup.c @@ -350,7 +350,7 @@ printtup(TupleTableSlot *slot, DestReceiver *self) */ if (thisState->typisvarlena) VALGRIND_CHECK_MEM_IS_DEFINED(DatumGetPointer(attr), - VARSIZE_ANY(attr)); + VARSIZE_ANY(DatumGetPointer(attr))); if (thisState->format == 0) { diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index 46c1dce222d10..0af3fea68fa48 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -1164,7 +1164,7 @@ add_local_string_reloption(local_relopts *relopts, const char *name, * but we declare them as Datums to avoid including array.h in reloptions.h. */ Datum -transformRelOptions(Datum oldOptions, List *defList, const char *namspace, +transformRelOptions(Datum oldOptions, List *defList, const char *nameSpace, const char *const validnsps[], bool acceptOidsOff, bool isReset) { Datum result; @@ -1190,8 +1190,8 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, for (i = 0; i < noldoptions; i++) { - char *text_str = VARDATA(oldoptions[i]); - int text_len = VARSIZE(oldoptions[i]) - VARHDRSZ; + char *text_str = VARDATA(DatumGetPointer(oldoptions[i])); + int text_len = VARSIZE(DatumGetPointer(oldoptions[i])) - VARHDRSZ; /* Search for a match in defList */ foreach(cell, defList) @@ -1200,14 +1200,14 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, int kw_len; /* ignore if not in the same namespace */ - if (namspace == NULL) + if (nameSpace == NULL) { if (def->defnamespace != NULL) continue; } else if (def->defnamespace == NULL) continue; - else if (strcmp(def->defnamespace, namspace) != 0) + else if (strcmp(def->defnamespace, nameSpace) != 0) continue; kw_len = strlen(def->defname); @@ -1243,8 +1243,9 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, } else { - text *t; + const char *name; const char *value; + text *t; Size len; /* @@ -1276,14 +1277,14 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, } /* ignore if not in the same namespace */ - if (namspace == NULL) + if (nameSpace == NULL) { if (def->defnamespace != NULL) continue; } else if (def->defnamespace == NULL) continue; - else if (strcmp(def->defnamespace, namspace) != 0) + else if (strcmp(def->defnamespace, nameSpace) != 0) continue; /* @@ -1291,11 +1292,19 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, * have just "name", assume "name=true" is meant. Note: the * namespace is not output. */ + name = def->defname; if (def->arg != NULL) value = defGetString(def); else value = "true"; + /* Insist that name not contain "=", else "a=b=c" is ambiguous */ + if (strchr(name, '=') != NULL) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid option name \"%s\": must not contain \"=\"", + name))); + /* * This is not a great place for this test, but there's no other * convenient place to filter the option out. As WITH (oids = @@ -1303,7 +1312,7 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, * amount of ugly. */ if (acceptOidsOff && def->defnamespace == NULL && - strcmp(def->defname, "oids") == 0) + strcmp(name, "oids") == 0) { if (defGetBoolean(def)) ereport(ERROR, @@ -1313,11 +1322,11 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, continue; } - len = VARHDRSZ + strlen(def->defname) + 1 + strlen(value); + len = VARHDRSZ + strlen(name) + 1 + strlen(value); /* +1 leaves room for sprintf's trailing null */ t = (text *) palloc(len + 1); SET_VARSIZE(t, len); - sprintf(VARDATA(t), "%s=%s", def->defname, value); + sprintf(VARDATA(t), "%s=%s", name, value); astate = accumArrayResult(astate, PointerGetDatum(t), false, TEXTOID, @@ -1447,8 +1456,8 @@ parseRelOptionsInternal(Datum options, bool validate, for (i = 0; i < noptions; i++) { - char *text_str = VARDATA(optiondatums[i]); - int text_len = VARSIZE(optiondatums[i]) - VARHDRSZ; + char *text_str = VARDATA(DatumGetPointer(optiondatums[i])); + int text_len = VARSIZE(DatumGetPointer(optiondatums[i])) - VARHDRSZ; int j; /* Search for a match in reloptions */ diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index 21f2f4af97e3f..926f1e4008abe 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -25,11 +25,11 @@ /* GUC */ int default_toast_compression = TOAST_PGLZ_COMPRESSION; -#define NO_LZ4_SUPPORT() \ +#define NO_COMPRESSION_SUPPORT(method) \ ereport(ERROR, \ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \ - errmsg("compression method lz4 not supported"), \ - errdetail("This functionality requires the server to be built with lz4 support."))) + errmsg("compression method %s not supported", method), \ + errdetail("This functionality requires the server to be built with %s support.", method))) /* * Compress a varlena using PGLZ. @@ -139,7 +139,7 @@ struct varlena * lz4_compress_datum(const struct varlena *value) { #ifndef USE_LZ4 - NO_LZ4_SUPPORT(); + NO_COMPRESSION_SUPPORT("lz4"); return NULL; /* keep compiler quiet */ #else int32 valsize; @@ -182,7 +182,7 @@ struct varlena * lz4_decompress_datum(const struct varlena *value) { #ifndef USE_LZ4 - NO_LZ4_SUPPORT(); + NO_COMPRESSION_SUPPORT("lz4"); return NULL; /* keep compiler quiet */ #else int32 rawsize; @@ -215,7 +215,7 @@ struct varlena * lz4_decompress_datum_slice(const struct varlena *value, int32 slicelength) { #ifndef USE_LZ4 - NO_LZ4_SUPPORT(); + NO_COMPRESSION_SUPPORT("lz4"); return NULL; /* keep compiler quiet */ #else int32 rawsize; @@ -289,7 +289,7 @@ CompressionNameToMethod(const char *compression) else if (strcmp(compression, "lz4") == 0) { #ifndef USE_LZ4 - NO_LZ4_SUPPORT(); + NO_COMPRESSION_SUPPORT("lz4"); #endif return TOAST_LZ4_COMPRESSION; } diff --git a/src/backend/access/common/toast_internals.c b/src/backend/access/common/toast_internals.c index 7d8be8346ce52..a1d0eed8953ba 100644 --- a/src/backend/access/common/toast_internals.c +++ b/src/backend/access/common/toast_internals.c @@ -64,11 +64,11 @@ toast_compress_datum(Datum value, char cmethod) switch (cmethod) { case TOAST_PGLZ_COMPRESSION: - tmp = pglz_compress_datum((const struct varlena *) value); + tmp = pglz_compress_datum((const struct varlena *) DatumGetPointer(value)); cmid = TOAST_PGLZ_COMPRESSION_ID; break; case TOAST_LZ4_COMPRESSION: - tmp = lz4_compress_datum((const struct varlena *) value); + tmp = lz4_compress_datum((const struct varlena *) DatumGetPointer(value)); cmid = TOAST_LZ4_COMPRESSION_ID; break; default: @@ -144,7 +144,7 @@ toast_save_datum(Relation rel, Datum value, int num_indexes; int validIndex; - Assert(!VARATT_IS_EXTERNAL(value)); + Assert(!VARATT_IS_EXTERNAL(dval)); /* * Open the toast relation and its indexes. We can use the index to check diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index ed2195f14b256..568edacb9bdae 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -22,6 +22,7 @@ #include "access/htup_details.h" #include "access/toast_compression.h" #include "access/tupdesc_details.h" +#include "catalog/catalog.h" #include "catalog/pg_collation.h" #include "catalog/pg_type.h" #include "common/hashfn.h" @@ -74,7 +75,16 @@ populate_compact_attribute_internal(Form_pg_attribute src, dst->atthasmissing = src->atthasmissing; dst->attisdropped = src->attisdropped; dst->attgenerated = (src->attgenerated != '\0'); - dst->attnotnull = src->attnotnull; + + /* + * Assign nullability status for this column. Assuming that a constraint + * exists, at this point we don't know if a not-null constraint is valid, + * so we assign UNKNOWN unless the table is a catalog, in which case we + * know it's valid. + */ + dst->attnullability = !src->attnotnull ? ATTNULLABLE_UNRESTRICTED : + IsCatalogRelationOid(src->attrelid) ? ATTNULLABLE_VALID : + ATTNULLABLE_UNKNOWN; switch (src->attalign) { @@ -132,10 +142,17 @@ void verify_compact_attribute(TupleDesc tupdesc, int attnum) { #ifdef USE_ASSERT_CHECKING - CompactAttribute *cattr = &tupdesc->compact_attrs[attnum]; + CompactAttribute cattr; Form_pg_attribute attr = TupleDescAttr(tupdesc, attnum); CompactAttribute tmp; + /* + * Make a temp copy of the TupleDesc's CompactAttribute. This may be a + * shared TupleDesc and the attcacheoff might get changed by another + * backend. + */ + memcpy(&cattr, &tupdesc->compact_attrs[attnum], sizeof(CompactAttribute)); + /* * Populate the temporary CompactAttribute from the corresponding * Form_pg_attribute @@ -144,12 +161,13 @@ verify_compact_attribute(TupleDesc tupdesc, int attnum) /* * Make the attcacheoff match since it's been reset to -1 by - * populate_compact_attribute_internal. + * populate_compact_attribute_internal. Same with attnullability. */ - tmp.attcacheoff = cattr->attcacheoff; + tmp.attcacheoff = cattr.attcacheoff; + tmp.attnullability = cattr.attnullability; /* Check the freshly populated CompactAttribute matches the TupleDesc's */ - Assert(memcmp(&tmp, cattr, sizeof(CompactAttribute)) == 0); + Assert(memcmp(&tmp, &cattr, sizeof(CompactAttribute)) == 0); #endif } @@ -333,8 +351,13 @@ CreateTupleDescCopyConstr(TupleDesc tupdesc) desc->natts * sizeof(FormData_pg_attribute)); for (i = 0; i < desc->natts; i++) + { populate_compact_attribute(desc, i); + TupleDescCompactAttr(desc, i)->attnullability = + TupleDescCompactAttr(tupdesc, i)->attnullability; + } + /* Copy the TupleConstr data structure, if any */ if (constr) { @@ -613,6 +636,24 @@ equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2) return false; if (attr1->attnotnull != attr2->attnotnull) return false; + + /* + * When the column has a not-null constraint, we also need to consider + * its validity aspect, which only manifests in CompactAttribute-> + * attnullability, so verify that. + */ + if (attr1->attnotnull) + { + CompactAttribute *cattr1 = TupleDescCompactAttr(tupdesc1, i); + CompactAttribute *cattr2 = TupleDescCompactAttr(tupdesc2, i); + + Assert(cattr1->attnullability != ATTNULLABLE_UNKNOWN); + Assert((cattr1->attnullability == ATTNULLABLE_UNKNOWN) == + (cattr2->attnullability == ATTNULLABLE_UNKNOWN)); + + if (cattr1->attnullability != cattr2->attnullability) + return false; + } if (attr1->atthasdef != attr2->atthasdef) return false; if (attr1->attidentity != attr2->attidentity) @@ -774,10 +815,10 @@ hashRowType(TupleDesc desc) uint32 s; int i; - s = hash_combine(0, hash_uint32(desc->natts)); - s = hash_combine(s, hash_uint32(desc->tdtypeid)); + s = hash_combine(0, hash_bytes_uint32(desc->natts)); + s = hash_combine(s, hash_bytes_uint32(desc->tdtypeid)); for (i = 0; i < desc->natts; ++i) - s = hash_combine(s, hash_uint32(TupleDescAttr(desc, i)->atttypid)); + s = hash_combine(s, hash_bytes_uint32(TupleDescAttr(desc, i)->atttypid)); return s; } @@ -952,7 +993,7 @@ TupleDescInitBuiltinEntry(TupleDesc desc, case INT8OID: att->attlen = 8; - att->attbyval = FLOAT8PASSBYVAL; + att->attbyval = true; att->attalign = TYPALIGN_DOUBLE; att->attstorage = TYPSTORAGE_PLAIN; att->attcompression = InvalidCompressionMethod; diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index 26a0bdc2063a3..644d484ea53c6 100644 --- a/src/backend/access/gin/ginbtree.c +++ b/src/backend/access/gin/ginbtree.c @@ -685,9 +685,9 @@ ginFinishSplit(GinBtree btree, GinBtreeStack *stack, bool freestack, #ifdef USE_INJECTION_POINTS if (GinPageIsLeaf(BufferGetPage(stack->buffer))) - INJECTION_POINT("gin-leave-leaf-split-incomplete"); + INJECTION_POINT("gin-leave-leaf-split-incomplete", NULL); else - INJECTION_POINT("gin-leave-internal-split-incomplete"); + INJECTION_POINT("gin-leave-internal-split-incomplete", NULL); #endif /* search parent to lock */ @@ -778,7 +778,7 @@ ginFinishSplit(GinBtree btree, GinBtreeStack *stack, bool freestack, static void ginFinishOldSplit(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats, int access) { - INJECTION_POINT("gin-finish-incomplete-split"); + INJECTION_POINT("gin-finish-incomplete-split", NULL); elog(DEBUG1, "finishing incomplete split of block %u in gin index \"%s\"", stack->blkno, RelationGetRelationName(btree->index)); diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index f29ccd3c2d1ff..656299b1b528f 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -1327,6 +1327,8 @@ scanGetItem(IndexScanDesc scan, ItemPointerData advancePast, */ do { + CHECK_FOR_INTERRUPTS(); + ItemPointerSetMin(item); match = true; for (i = 0; i < so->nkeys && match; i++) @@ -1966,8 +1968,6 @@ gingetbitmap(IndexScanDesc scan, TIDBitmap *tbm) for (;;) { - CHECK_FOR_INTERRUPTS(); - if (!scanGetItem(scan, iptr, &iptr, &recheck)) break; diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index e25d817c1955c..e9d4b27427e59 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -167,7 +167,7 @@ typedef struct /* * The sortstate used only within a single worker for the first merge pass - * happenning there. In principle it doesn't need to be part of the build + * happening there. In principle it doesn't need to be part of the build * state and we could pass it around directly, but it's more convenient * this way. And it's part of the build state, after all. */ @@ -180,11 +180,11 @@ static void _gin_begin_parallel(GinBuildState *buildstate, Relation heap, Relati bool isconcurrent, int request); static void _gin_end_parallel(GinLeader *ginleader, GinBuildState *state); static Size _gin_parallel_estimate_shared(Relation heap, Snapshot snapshot); -static double _gin_parallel_heapscan(GinBuildState *buildstate); -static double _gin_parallel_merge(GinBuildState *buildstate); +static double _gin_parallel_heapscan(GinBuildState *state); +static double _gin_parallel_merge(GinBuildState *state); static void _gin_leader_participate_as_worker(GinBuildState *buildstate, Relation heap, Relation index); -static void _gin_parallel_scan_and_build(GinBuildState *buildstate, +static void _gin_parallel_scan_and_build(GinBuildState *state, GinBuildShared *ginshared, Sharedsort *sharedsort, Relation heap, Relation index, @@ -1306,7 +1306,7 @@ GinBufferIsEmpty(GinBuffer *buffer) * Compare if the tuple matches the already accumulated data in the GIN * buffer. Compare scalar fields first, before the actual key. * - * Returns true if the key matches, and the TID belonds to the buffer, or + * Returns true if the key matches, and the TID belongs to the buffer, or * false if the key does not match. */ static bool @@ -1497,7 +1497,7 @@ GinBufferStoreTuple(GinBuffer *buffer, GinTuple *tup) buffer->items = repalloc(buffer->items, (buffer->nitems + tup->nitems) * sizeof(ItemPointerData)); - new = ginMergeItemPointers(&buffer->items[buffer->nfrozen], /* first unfronzen */ + new = ginMergeItemPointers(&buffer->items[buffer->nfrozen], /* first unfrozen */ (buffer->nitems - buffer->nfrozen), /* num of unfrozen */ items, tup->nitems, &nnew); @@ -1531,7 +1531,7 @@ GinBufferReset(GinBuffer *buffer) pfree(DatumGetPointer(buffer->key)); /* - * Not required, but makes it more likely to trigger NULL derefefence if + * Not required, but makes it more likely to trigger NULL dereference if * using the value incorrectly, etc. */ buffer->key = (Datum) 0; @@ -1603,7 +1603,7 @@ GinBufferCanAddKey(GinBuffer *buffer, GinTuple *tup) * * After waiting for all workers to finish, merge the per-worker results into * the complete index. The results from each worker are sorted by block number - * (start of the page range). While combinig the per-worker results we merge + * (start of the page range). While combining the per-worker results we merge * summaries for the same page range, and also fill-in empty summaries for * ranges without any tuples. * @@ -1669,6 +1669,8 @@ _gin_parallel_merge(GinBuildState *state) */ while ((tup = tuplesort_getgintuple(state->bs_sortstate, &tuplen, true)) != NULL) { + MemoryContext oldCtx; + CHECK_FOR_INTERRUPTS(); /* @@ -1685,10 +1687,15 @@ _gin_parallel_merge(GinBuildState *state) */ AssertCheckItemPointers(buffer); + oldCtx = MemoryContextSwitchTo(state->tmpCtx); + ginEntryInsert(&state->ginstate, buffer->attnum, buffer->key, buffer->category, buffer->items, buffer->nitems, &state->buildStats); + MemoryContextSwitchTo(oldCtx); + MemoryContextReset(state->tmpCtx); + /* discard the existing data */ GinBufferReset(buffer); } @@ -1711,10 +1718,15 @@ _gin_parallel_merge(GinBuildState *state) */ AssertCheckItemPointers(buffer); + oldCtx = MemoryContextSwitchTo(state->tmpCtx); + ginEntryInsert(&state->ginstate, buffer->attnum, buffer->key, buffer->category, buffer->items, buffer->nfrozen, &state->buildStats); + MemoryContextSwitchTo(oldCtx); + MemoryContextReset(state->tmpCtx); + /* truncate the data we've just discarded */ GinBufferTrim(buffer); } @@ -2177,7 +2189,10 @@ typedef struct * we simply copy the whole Datum, so that we don't have to care about stuff * like endianess etc. We could make it a little bit smaller, but it's not * worth it - it's a tiny fraction of the data, and we need to MAXALIGN the - * start of the TID list anyway. So we wouldn't save anything. + * start of the TID list anyway. So we wouldn't save anything. (This would + * not be a good idea for the permanent in-index data, since we'd prefer + * that that not depend on sizeof(Datum). But this is just a transient + * representation to use while sorting the data.) * * The TID list is serialized as compressed - it's highly compressible, and * we already have ginCompressPostingList for this purpose. The list may be @@ -2221,7 +2236,7 @@ _gin_build_tuple(OffsetNumber attrnum, unsigned char category, else if (typlen > 0) keylen = typlen; else if (typlen == -1) - keylen = VARSIZE_ANY(key); + keylen = VARSIZE_ANY(DatumGetPointer(key)); else if (typlen == -2) keylen = strlen(DatumGetPointer(key)) + 1; else diff --git a/src/backend/access/gin/ginlogic.c b/src/backend/access/gin/ginlogic.c index 665ff9b9810cd..ff456247cefac 100644 --- a/src/backend/access/gin/ginlogic.c +++ b/src/backend/access/gin/ginlogic.c @@ -140,7 +140,9 @@ shimBoolConsistentFn(GinScanKey key) * every combination is O(n^2), so this is only feasible for a small number of * MAYBE inputs. * - * NB: This function modifies the key->entryRes array! + * NB: This function modifies the key->entryRes array. For now that's okay + * so long as we restore the entry-time contents before returning. This may + * need revisiting if we ever invent multithreaded GIN scans, though. */ static GinTernaryValue shimTriConsistentFn(GinScanKey key) @@ -149,7 +151,7 @@ shimTriConsistentFn(GinScanKey key) int maybeEntries[MAX_MAYBE_ENTRIES]; int i; bool boolResult; - bool recheck = false; + bool recheck; GinTernaryValue curResult; /* @@ -169,8 +171,8 @@ shimTriConsistentFn(GinScanKey key) } /* - * If none of the inputs were MAYBE, so we can just call consistent - * function as is. + * If none of the inputs were MAYBE, we can just call the consistent + * function as-is. */ if (nmaybe == 0) return directBoolConsistentFn(key); @@ -179,6 +181,7 @@ shimTriConsistentFn(GinScanKey key) for (i = 0; i < nmaybe; i++) key->entryRes[maybeEntries[i]] = GIN_FALSE; curResult = directBoolConsistentFn(key); + recheck = key->recheckCurItem; for (;;) { @@ -200,13 +203,20 @@ shimTriConsistentFn(GinScanKey key) recheck |= key->recheckCurItem; if (curResult != boolResult) - return GIN_MAYBE; + { + curResult = GIN_MAYBE; + break; + } } /* TRUE with recheck is taken to mean MAYBE */ if (curResult == GIN_TRUE && recheck) curResult = GIN_MAYBE; + /* We must restore the original state of the entryRes array */ + for (i = 0; i < nmaybe; i++) + key->entryRes[maybeEntries[i]] = GIN_MAYBE; + return curResult; } diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c index c2d1771bd77b5..26081693383c7 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -271,6 +271,7 @@ ginNewScanKey(IndexScanDesc scan) ScanKey scankey = scan->keyData; GinScanOpaque so = (GinScanOpaque) scan->opaque; int i; + int numExcludeOnly; bool hasNullQuery = false; bool attrHasNormalScan[INDEX_MAX_KEYS] = {false}; MemoryContext oldCtx; @@ -393,6 +394,7 @@ ginNewScanKey(IndexScanDesc scan) * excludeOnly scan key must receive a GIN_CAT_EMPTY_QUERY hidden entry * and be set to normal (excludeOnly = false). */ + numExcludeOnly = 0; for (i = 0; i < so->nkeys; i++) { GinScanKey key = &so->keys[i]; @@ -406,6 +408,47 @@ ginNewScanKey(IndexScanDesc scan) ginScanKeyAddHiddenEntry(so, key, GIN_CAT_EMPTY_QUERY); attrHasNormalScan[key->attnum - 1] = true; } + else + numExcludeOnly++; + } + + /* + * If we left any excludeOnly scan keys as-is, move them to the end of the + * scan key array: they must appear after normal key(s). + */ + if (numExcludeOnly > 0) + { + GinScanKey tmpkeys; + int iNormalKey; + int iExcludeOnly; + + /* We'd better have made at least one normal key */ + Assert(numExcludeOnly < so->nkeys); + /* Make a temporary array to hold the re-ordered scan keys */ + tmpkeys = (GinScanKey) palloc(so->nkeys * sizeof(GinScanKeyData)); + /* Re-order the keys ... */ + iNormalKey = 0; + iExcludeOnly = so->nkeys - numExcludeOnly; + for (i = 0; i < so->nkeys; i++) + { + GinScanKey key = &so->keys[i]; + + if (key->excludeOnly) + { + memcpy(tmpkeys + iExcludeOnly, key, sizeof(GinScanKeyData)); + iExcludeOnly++; + } + else + { + memcpy(tmpkeys + iNormalKey, key, sizeof(GinScanKeyData)); + iNormalKey++; + } + } + Assert(iNormalKey == so->nkeys - numExcludeOnly); + Assert(iExcludeOnly == so->nkeys); + /* ... and copy them back to so->keys[] */ + memcpy(so->keys, tmpkeys, so->nkeys * sizeof(GinScanKeyData)); + pfree(tmpkeys); } /* diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 1840f04bfbf53..7b24380c97801 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -1048,12 +1048,19 @@ gistFindCorrectParent(Relation r, GISTInsertStack *child, bool is_build) /* * The page has changed since we looked. During normal operation, every * update of a page changes its LSN, so the LSN we memorized should have - * changed too. During index build, however, we don't WAL-log the changes - * until we have built the index, so the LSN doesn't change. There is no - * concurrent activity during index build, but we might have changed the - * parent ourselves. + * changed too. + * + * During index build, however, we don't WAL-log the changes until we have + * built the index, so the LSN doesn't change. There is no concurrent + * activity during index build, but we might have changed the parent + * ourselves. + * + * We will also get here if child->downlinkoffnum is invalid. That happens + * if 'parent' had been updated by an earlier call to this function on its + * grandchild, which had to move right. */ - Assert(parent->lsn != PageGetLSN(parent->page) || is_build); + Assert(parent->lsn != PageGetLSN(parent->page) || is_build || + child->downlinkoffnum == InvalidOffsetNumber); /* * Scan the page to re-find the downlink. If the page was split, it might diff --git a/src/backend/access/gist/gistproc.c b/src/backend/access/gist/gistproc.c index 392163cb22900..f2ec6cbe2e524 100644 --- a/src/backend/access/gist/gistproc.c +++ b/src/backend/access/gist/gistproc.c @@ -1707,8 +1707,8 @@ gist_bbox_zorder_cmp(Datum a, Datum b, SortSupport ssup) * Abbreviated version of Z-order comparison * * The abbreviated format is a Z-order value computed from the two 32-bit - * floats. If SIZEOF_DATUM == 8, the 64-bit Z-order value fits fully in the - * abbreviated Datum, otherwise use its most significant bits. + * floats. Now that sizeof(Datum) is always 8, the 64-bit Z-order value + * always fits fully in the abbreviated Datum. */ static Datum gist_bbox_zorder_abbrev_convert(Datum original, SortSupport ssup) @@ -1718,11 +1718,7 @@ gist_bbox_zorder_abbrev_convert(Datum original, SortSupport ssup) z = point_zorder_internal(p->x, p->y); -#if SIZEOF_DATUM == 8 - return (Datum) z; -#else - return (Datum) (z >> 32); -#endif + return UInt64GetDatum(z); } /* diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index a6b701943d3de..c0aa7d0222f39 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -1058,11 +1058,11 @@ gistGetFakeLSN(Relation rel) } /* - * This is a stratnum support function for GiST opclasses that use the - * RT*StrategyNumber constants. + * This is a stratnum translation support function for GiST opclasses that use + * the RT*StrategyNumber constants. */ Datum -gist_stratnum_common(PG_FUNCTION_ARGS) +gist_translate_cmptype_common(PG_FUNCTION_ARGS) { CompareType cmptype = PG_GETARG_INT32(0); @@ -1090,9 +1090,9 @@ gist_stratnum_common(PG_FUNCTION_ARGS) /* * Returns the opclass's private stratnum used for the given compare type. * - * Calls the opclass's GIST_STRATNUM_PROC support function, if any, - * and returns the result. - * Returns InvalidStrategy if the function is not defined. + * Calls the opclass's GIST_TRANSLATE_CMPTYPE_PROC support function, if any, + * and returns the result. Returns InvalidStrategy if the function is not + * defined. */ StrategyNumber gisttranslatecmptype(CompareType cmptype, Oid opfamily) @@ -1101,7 +1101,7 @@ gisttranslatecmptype(CompareType cmptype, Oid opfamily) Datum result; /* Check whether the function is provided. */ - funcid = get_opfamily_proc(opfamily, ANYOID, ANYOID, GIST_STRATNUM_PROC); + funcid = get_opfamily_proc(opfamily, ANYOID, ANYOID, GIST_TRANSLATE_CMPTYPE_PROC); if (!OidIsValid(funcid)) return InvalidStrategy; diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index ce9d78d78d650..dca236b6e5735 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -215,7 +215,8 @@ gistvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, * It is safe to use batchmode as block_range_read_stream_cb takes no * locks. */ - stream = read_stream_begin_relation(READ_STREAM_FULL | + stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE | + READ_STREAM_FULL | READ_STREAM_USE_BATCHING, info->strategy, rel, @@ -254,8 +255,6 @@ gistvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, gistvacuumpage(&vstate, buf); } - Assert(read_stream_next_buffer(stream, NULL) == InvalidBuffer); - /* * We have to reset the read stream to use it again. After returning * InvalidBuffer, the read stream API won't invoke our callback again diff --git a/src/backend/access/gist/gistvalidate.c b/src/backend/access/gist/gistvalidate.c index 2a49e6d20f049..2ed6f74fce97b 100644 --- a/src/backend/access/gist/gistvalidate.c +++ b/src/backend/access/gist/gistvalidate.c @@ -138,7 +138,7 @@ gistvalidate(Oid opclassoid) ok = check_amproc_signature(procform->amproc, VOIDOID, true, 1, 1, INTERNALOID); break; - case GIST_STRATNUM_PROC: + case GIST_TRANSLATE_CMPTYPE_PROC: ok = check_amproc_signature(procform->amproc, INT2OID, true, 1, 1, INT4OID) && procform->amproclefttype == ANYOID && @@ -265,7 +265,7 @@ gistvalidate(Oid opclassoid) if (i == GIST_DISTANCE_PROC || i == GIST_FETCH_PROC || i == GIST_COMPRESS_PROC || i == GIST_DECOMPRESS_PROC || i == GIST_OPTIONS_PROC || i == GIST_SORTSUPPORT_PROC || - i == GIST_STRATNUM_PROC) + i == GIST_TRANSLATE_CMPTYPE_PROC) continue; /* optional methods */ ereport(INFO, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), @@ -336,7 +336,7 @@ gistadjustmembers(Oid opfamilyoid, case GIST_FETCH_PROC: case GIST_OPTIONS_PROC: case GIST_SORTSUPPORT_PROC: - case GIST_STRATNUM_PROC: + case GIST_TRANSLATE_CMPTYPE_PROC: /* Optional, so force it to be a soft family dependency */ op->ref_is_hard = false; op->ref_is_family = true; diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index cedaa195cb6fa..7491cc3cb93bc 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -213,6 +213,27 @@ static const int MultiXactStatusLock[MaxMultiXactStatus + 1] = #define TUPLOCK_from_mxstatus(status) \ (MultiXactStatusLock[(status)]) +/* + * Check that we have a valid snapshot if we might need TOAST access. + */ +static inline void +AssertHasSnapshotForToast(Relation rel) +{ +#ifdef USE_ASSERT_CHECKING + + /* bootstrap mode in particular breaks this rule */ + if (!IsNormalProcessingMode()) + return; + + /* if the relation doesn't have a TOAST table, we are good */ + if (!OidIsValid(rel->rd_rel->reltoastrelid)) + return; + + Assert(HaveRegisteredOrActiveSnapshot()); + +#endif /* USE_ASSERT_CHECKING */ +} + /* ---------------------------------------------------------------- * heap support routines * ---------------------------------------------------------------- @@ -314,31 +335,6 @@ bitmapheap_stream_read_next(ReadStream *pgsr, void *private_data, tbmres->blockno >= hscan->rs_nblocks) continue; - /* - * We can skip fetching the heap page if we don't need any fields from - * the heap, the bitmap entries don't need rechecking, and all tuples - * on the page are visible to our transaction. - */ - if (!(sscan->rs_flags & SO_NEED_TUPLES) && - !tbmres->recheck && - VM_ALL_VISIBLE(sscan->rs_rd, tbmres->blockno, &bscan->rs_vmbuffer)) - { - OffsetNumber offsets[TBM_MAX_TUPLES_PER_PAGE]; - int noffsets; - - /* can't be lossy in the skip_fetch case */ - Assert(!tbmres->lossy); - Assert(bscan->rs_empty_tuples_pending >= 0); - - /* - * We throw away the offsets, but this is the easiest way to get a - * count of tuples. - */ - noffsets = tbm_extract_page_tuple(tbmres, offsets, TBM_MAX_TUPLES_PER_PAGE); - bscan->rs_empty_tuples_pending += noffsets; - continue; - } - return tbmres->blockno; } @@ -1124,8 +1120,10 @@ heap_beginscan(Relation relation, Snapshot snapshot, { BitmapHeapScanDesc bscan = palloc(sizeof(BitmapHeapScanDescData)); - bscan->rs_vmbuffer = InvalidBuffer; - bscan->rs_empty_tuples_pending = 0; + /* + * Bitmap Heap scans do not have any fields that a normal Heap Scan + * does not have, so no special initializations required here. + */ scan = (HeapScanDesc) bscan; } else @@ -1145,6 +1143,17 @@ heap_beginscan(Relation relation, Snapshot snapshot, if (!(snapshot && IsMVCCSnapshot(snapshot))) scan->rs_base.rs_flags &= ~SO_ALLOW_PAGEMODE; + /* Check that a historic snapshot is not used for non-catalog tables */ + if (snapshot && + IsHistoricMVCCSnapshot(snapshot) && + !RelationIsAccessibleInLogicalDecoding(relation)) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_TRANSACTION_STATE), + errmsg("cannot query non-catalog table \"%s\" during logical decoding", + RelationGetRelationName(relation)))); + } + /* * For seqscan and sample scans in a serializable transaction, acquire a * predicate lock on the entire relation. This is required not only to @@ -1227,13 +1236,8 @@ heap_beginscan(Relation relation, Snapshot snapshot, } else if (scan->rs_base.rs_flags & SO_TYPE_BITMAPSCAN) { - /* - * Currently we can't trivially use batching, due to the - * VM_ALL_VISIBLE check in bitmapheap_stream_read_next. While that - * could be made safe, we are about to remove the all-visible logic - * from bitmap scans due to its unsoundness. - */ - scan->rs_read_stream = read_stream_begin_relation(READ_STREAM_DEFAULT, + scan->rs_read_stream = read_stream_begin_relation(READ_STREAM_DEFAULT | + READ_STREAM_USE_BATCHING, scan->rs_strategy, scan->rs_base.rs_rd, MAIN_FORKNUM, @@ -1280,23 +1284,10 @@ heap_rescan(TableScanDesc sscan, ScanKey key, bool set_params, scan->rs_cbuf = InvalidBuffer; } - if (scan->rs_base.rs_flags & SO_TYPE_BITMAPSCAN) - { - BitmapHeapScanDesc bscan = (BitmapHeapScanDesc) scan; - - /* - * Reset empty_tuples_pending, a field only used by bitmap heap scan, - * to avoid incorrectly emitting NULL-filled tuples from a previous - * scan on rescan. - */ - bscan->rs_empty_tuples_pending = 0; - - if (BufferIsValid(bscan->rs_vmbuffer)) - { - ReleaseBuffer(bscan->rs_vmbuffer); - bscan->rs_vmbuffer = InvalidBuffer; - } - } + /* + * SO_TYPE_BITMAPSCAN would be cleaned up here, but it does not hold any + * additional data vs a normal HeapScan + */ /* * The read stream is reset on rescan. This must be done before @@ -1325,15 +1316,6 @@ heap_endscan(TableScanDesc sscan) if (BufferIsValid(scan->rs_cbuf)) ReleaseBuffer(scan->rs_cbuf); - if (scan->rs_base.rs_flags & SO_TYPE_BITMAPSCAN) - { - BitmapHeapScanDesc bscan = (BitmapHeapScanDesc) sscan; - - bscan->rs_empty_tuples_pending = 0; - if (BufferIsValid(bscan->rs_vmbuffer)) - ReleaseBuffer(bscan->rs_vmbuffer); - } - /* * Must free the read stream before freeing the BufferAccessStrategy. */ @@ -2116,6 +2098,8 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, Assert(HeapTupleHeaderGetNatts(tup->t_data) <= RelationGetNumberOfAttributes(relation)); + AssertHasSnapshotForToast(relation); + /* * Fill in tuple header fields and toast the tuple if necessary. * @@ -2393,6 +2377,8 @@ heap_multi_insert(Relation relation, TupleTableSlot **slots, int ntuples, /* currently not needed (thus unsupported) for heap_multi_insert() */ Assert(!(options & HEAP_INSERT_NO_LOGICAL)); + AssertHasSnapshotForToast(relation); + needwal = RelationNeedsWAL(relation); saveFreeSpace = RelationGetTargetPageFreeSpace(relation, HEAP_DEFAULT_FILLFACTOR); @@ -2815,6 +2801,8 @@ heap_delete(Relation relation, ItemPointer tid, Assert(ItemPointerIsValid(tid)); + AssertHasSnapshotForToast(relation); + /* * Forbid this during a parallel operation, lest it allocate a combo CID. * Other workers might need that combo CID for visibility checks, and we @@ -3310,6 +3298,8 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, Assert(HeapTupleHeaderGetNatts(newtup->t_data) <= RelationGetNumberOfAttributes(relation)); + AssertHasSnapshotForToast(relation); + /* * Forbid this during a parallel operation, lest it allocate a combo CID. * Other workers might need that combo CID for visibility checks, and we @@ -3354,7 +3344,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, interesting_attrs = bms_add_members(interesting_attrs, id_attrs); block = ItemPointerGetBlockNumber(otid); - INJECTION_POINT("heap_update-before-pin"); + INJECTION_POINT("heap_update-before-pin", NULL); buffer = ReadBuffer(relation, block); page = BufferGetPage(buffer); @@ -5003,7 +4993,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple, case LockWaitError: if (!ConditionalMultiXactIdWait((MultiXactId) xwait, status, infomask, relation, - NULL, log_lock_failure)) + NULL, log_lock_failures)) ereport(ERROR, (errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on row in relation \"%s\"", @@ -5041,7 +5031,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple, } break; case LockWaitError: - if (!ConditionalXactLockTableWait(xwait, log_lock_failure)) + if (!ConditionalXactLockTableWait(xwait, log_lock_failures)) ereport(ERROR, (errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on row in relation \"%s\"", @@ -5306,7 +5296,7 @@ heap_acquire_tuplock(Relation relation, ItemPointer tid, LockTupleMode mode, break; case LockWaitError: - if (!ConditionalLockTupleTuplock(relation, tid, mode, log_lock_failure)) + if (!ConditionalLockTupleTuplock(relation, tid, mode, log_lock_failures)) ereport(ERROR, (errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on row in relation \"%s\"", @@ -6557,9 +6547,17 @@ heap_inplace_update_and_unlock(Relation relation, * [crash] * [recovery restores datfrozenxid w/o relfrozenxid] * - * Like in MarkBufferDirtyHint() subroutine XLogSaveBufferForHint(), copy - * the buffer to the stack before logging. Here, that facilitates a FPI - * of the post-mutation block before we accept other sessions seeing it. + * Mimic MarkBufferDirtyHint() subroutine XLogSaveBufferForHint(). + * Specifically, use DELAY_CHKPT_START, and copy the buffer to the stack. + * The stack copy facilitates a FPI of the post-mutation block before we + * accept other sessions seeing it. DELAY_CHKPT_START allows us to + * XLogInsert() before MarkBufferDirty(). Since XLogSaveBufferForHint() + * can operate under BUFFER_LOCK_SHARED, it can't avoid DELAY_CHKPT_START. + * This function, however, likely could avoid it with the following order + * of operations: MarkBufferDirty(), XLogInsert(), memcpy(). Opt to use + * DELAY_CHKPT_START here, too, as a way to have fewer distinct code + * patterns to analyze. Inplace update isn't so frequent that it should + * pursue the small optimization of skipping DELAY_CHKPT_START. */ Assert((MyProc->delayChkptFlags & DELAY_CHKPT_START) == 0); START_CRIT_SECTION(); diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 24d3765aa201e..cb4bc35c93ed4 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -464,7 +464,7 @@ heapam_tuple_lock(Relation relation, ItemPointer tid, Snapshot snapshot, return TM_WouldBlock; break; case LockWaitError: - if (!ConditionalXactLockTableWait(SnapshotDirty.xmax, log_lock_failure)) + if (!ConditionalXactLockTableWait(SnapshotDirty.xmax, log_lock_failures)) ereport(ERROR, (errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on row in relation \"%s\"", @@ -2137,32 +2137,6 @@ heapam_scan_bitmap_next_tuple(TableScanDesc scan, */ while (hscan->rs_cindex >= hscan->rs_ntuples) { - /* - * Emit empty tuples before advancing to the next block - */ - if (bscan->rs_empty_tuples_pending > 0) - { - /* - * If we don't have to fetch the tuple, just return nulls. - */ - ExecStoreAllNullTuple(slot); - bscan->rs_empty_tuples_pending--; - - /* - * We do not recheck all NULL tuples. Because the streaming read - * API only yields TBMIterateResults for blocks actually fetched - * from the heap, we must unset `recheck` ourselves here to ensure - * correct results. - * - * Our read stream callback accrues a count of empty tuples to - * emit and then emits them after emitting tuples from the next - * fetched block. If no blocks need fetching, we'll emit the - * accrued count at the end of the scan. - */ - *recheck = false; - return true; - } - /* * Returns false if the bitmap is exhausted and there are no further * blocks we need to scan. @@ -2516,24 +2490,8 @@ BitmapHeapScanNextBlock(TableScanDesc scan, if (BufferIsInvalid(hscan->rs_cbuf)) { - if (BufferIsValid(bscan->rs_vmbuffer)) - { - ReleaseBuffer(bscan->rs_vmbuffer); - bscan->rs_vmbuffer = InvalidBuffer; - } - - /* - * The bitmap is exhausted. Now emit any remaining empty tuples. The - * read stream API only returns TBMIterateResults for blocks actually - * fetched from the heap. Our callback will accrue a count of empty - * tuples to emit for all blocks we skipped fetching. So, if we skip - * fetching heap blocks at the end of the relation (or no heap blocks - * are fetched) we need to ensure we emit empty tuples before ending - * the scan. We don't recheck empty tuples so ensure `recheck` is - * unset. - */ - *recheck = false; - return bscan->rs_empty_tuples_pending > 0; + /* the bitmap is exhausted */ + return false; } Assert(per_buffer_data); diff --git a/src/backend/access/heap/heapam_xlog.c b/src/backend/access/heap/heapam_xlog.c index 30f4c2d3c6719..eb4bd3d6ae3a3 100644 --- a/src/backend/access/heap/heapam_xlog.c +++ b/src/backend/access/heap/heapam_xlog.c @@ -438,6 +438,9 @@ heap_xlog_insert(XLogReaderState *record) ItemPointerSetBlockNumber(&target_tid, blkno); ItemPointerSetOffsetNumber(&target_tid, xlrec->offnum); + /* No freezing in the heap_insert() code path */ + Assert(!(xlrec->flags & XLH_INSERT_ALL_FROZEN_SET)); + /* * The visibility map may need to be fixed even if the heap page is * already up-to-date. @@ -508,10 +511,6 @@ heap_xlog_insert(XLogReaderState *record) if (xlrec->flags & XLH_INSERT_ALL_VISIBLE_CLEARED) PageClearAllVisible(page); - /* XLH_INSERT_ALL_FROZEN_SET implies that all tuples are visible */ - if (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET) - PageSetAllVisible(page); - MarkBufferDirty(buffer); } if (BufferIsValid(buffer)) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index f28326bad0951..932701d8420dc 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -140,7 +140,6 @@ #include "access/visibilitymap.h" #include "access/xloginsert.h" #include "catalog/storage.h" -#include "commands/dbcommands.h" #include "commands/progress.h" #include "commands/vacuum.h" #include "common/int.h" @@ -423,7 +422,7 @@ typedef struct LVSavedErrInfo /* non-export function prototypes */ static void lazy_scan_heap(LVRelState *vacrel); static void heap_vacuum_eager_scan_setup(LVRelState *vacrel, - VacuumParams *params); + const VacuumParams params); static BlockNumber heap_vac_scan_next_block(ReadStream *stream, void *callback_private_data, void *per_buffer_data); @@ -431,7 +430,7 @@ static void find_next_unskippable_block(LVRelState *vacrel, bool *skipsallvis); static bool lazy_scan_new_or_empty(LVRelState *vacrel, Buffer buf, BlockNumber blkno, Page page, bool sharelock, Buffer vmbuffer); -static void lazy_scan_prune(LVRelState *vacrel, Buffer buf, +static int lazy_scan_prune(LVRelState *vacrel, Buffer buf, BlockNumber blkno, Page page, Buffer vmbuffer, bool all_visible_according_to_vm, bool *has_lpdead_items, bool *vm_page_frozen); @@ -485,7 +484,7 @@ static void restore_vacuum_error_info(LVRelState *vacrel, * vacuum options or for relfrozenxid/relminmxid advancement. */ static void -heap_vacuum_eager_scan_setup(LVRelState *vacrel, VacuumParams *params) +heap_vacuum_eager_scan_setup(LVRelState *vacrel, const VacuumParams params) { uint32 randseed; BlockNumber allvisible; @@ -504,7 +503,7 @@ heap_vacuum_eager_scan_setup(LVRelState *vacrel, VacuumParams *params) vacrel->eager_scan_remaining_successes = 0; /* If eager scanning is explicitly disabled, just return. */ - if (params->max_eager_freeze_failure_rate == 0) + if (params.max_eager_freeze_failure_rate == 0) return; /* @@ -581,11 +580,11 @@ heap_vacuum_eager_scan_setup(LVRelState *vacrel, VacuumParams *params) vacrel->next_eager_scan_region_start = randseed % EAGER_SCAN_REGION_SIZE; - Assert(params->max_eager_freeze_failure_rate > 0 && - params->max_eager_freeze_failure_rate <= 1); + Assert(params.max_eager_freeze_failure_rate > 0 && + params.max_eager_freeze_failure_rate <= 1); vacrel->eager_scan_max_fails_per_region = - params->max_eager_freeze_failure_rate * + params.max_eager_freeze_failure_rate * EAGER_SCAN_REGION_SIZE; /* @@ -612,7 +611,7 @@ heap_vacuum_eager_scan_setup(LVRelState *vacrel, VacuumParams *params) * and locked the relation. */ void -heap_vacuum_rel(Relation rel, VacuumParams *params, +heap_vacuum_rel(Relation rel, const VacuumParams params, BufferAccessStrategy bstrategy) { LVRelState *vacrel; @@ -634,9 +633,9 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, ErrorContextCallback errcallback; char **indnames = NULL; - verbose = (params->options & VACOPT_VERBOSE) != 0; + verbose = (params.options & VACOPT_VERBOSE) != 0; instrument = (verbose || (AmAutoVacuumWorkerProcess() && - params->log_min_duration >= 0)); + params.log_min_duration >= 0)); if (instrument) { pg_rusage_init(&ru0); @@ -699,9 +698,9 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, * The truncate param allows user to avoid attempting relation truncation, * though it can't force truncation to happen. */ - Assert(params->index_cleanup != VACOPTVALUE_UNSPECIFIED); - Assert(params->truncate != VACOPTVALUE_UNSPECIFIED && - params->truncate != VACOPTVALUE_AUTO); + Assert(params.index_cleanup != VACOPTVALUE_UNSPECIFIED); + Assert(params.truncate != VACOPTVALUE_UNSPECIFIED && + params.truncate != VACOPTVALUE_AUTO); /* * While VacuumFailSafeActive is reset to false before calling this, we @@ -711,14 +710,14 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, vacrel->consider_bypass_optimization = true; vacrel->do_index_vacuuming = true; vacrel->do_index_cleanup = true; - vacrel->do_rel_truncate = (params->truncate != VACOPTVALUE_DISABLED); - if (params->index_cleanup == VACOPTVALUE_DISABLED) + vacrel->do_rel_truncate = (params.truncate != VACOPTVALUE_DISABLED); + if (params.index_cleanup == VACOPTVALUE_DISABLED) { /* Force disable index vacuuming up-front */ vacrel->do_index_vacuuming = false; vacrel->do_index_cleanup = false; } - else if (params->index_cleanup == VACOPTVALUE_ENABLED) + else if (params.index_cleanup == VACOPTVALUE_ENABLED) { /* Force index vacuuming. Note that failsafe can still bypass. */ vacrel->consider_bypass_optimization = false; @@ -726,7 +725,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, else { /* Default/auto, make all decisions dynamically */ - Assert(params->index_cleanup == VACOPTVALUE_AUTO); + Assert(params.index_cleanup == VACOPTVALUE_AUTO); } /* Initialize page counters explicitly (be tidy) */ @@ -757,7 +756,6 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, vacrel->vm_new_visible_pages = 0; vacrel->vm_new_visible_frozen_pages = 0; vacrel->vm_new_frozen_pages = 0; - vacrel->rel_pages = orig_rel_pages = RelationGetNumberOfBlocks(rel); /* * Get cutoffs that determine which deleted tuples are considered DEAD, @@ -776,7 +774,9 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, * to increase the number of dead tuples it can prune away.) */ vacrel->aggressive = vacuum_get_cutoffs(rel, params, &vacrel->cutoffs); + vacrel->rel_pages = orig_rel_pages = RelationGetNumberOfBlocks(rel); vacrel->vistest = GlobalVisTestFor(rel); + /* Initialize state used to track oldest extant XID/MXID */ vacrel->NewRelfrozenXid = vacrel->cutoffs.OldestXmin; vacrel->NewRelminMxid = vacrel->cutoffs.OldestMxact; @@ -788,7 +788,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, */ vacrel->skippedallvis = false; skipwithvm = true; - if (params->options & VACOPT_DISABLE_PAGE_SKIPPING) + if (params.options & VACOPT_DISABLE_PAGE_SKIPPING) { /* * Force aggressive mode, and disable skipping blocks using the @@ -829,7 +829,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, * is already dangerously old.) */ lazy_check_wraparound_failsafe(vacrel); - dead_items_alloc(vacrel, params->nworkers); + dead_items_alloc(vacrel, params.nworkers); /* * Call lazy_scan_heap to perform all required heap pruning, index @@ -946,9 +946,9 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, { TimestampTz endtime = GetCurrentTimestamp(); - if (verbose || params->log_min_duration == 0 || + if (verbose || params.log_min_duration == 0 || TimestampDifferenceExceeds(starttime, endtime, - params->log_min_duration)) + params.log_min_duration)) { long secs_dur; int usecs_dur; @@ -983,10 +983,10 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, * Aggressiveness already reported earlier, in dedicated * VACUUM VERBOSE ereport */ - Assert(!params->is_wraparound); + Assert(!params.is_wraparound); msgfmt = _("finished vacuuming \"%s.%s.%s\": index scans: %d\n"); } - else if (params->is_wraparound) + else if (params.is_wraparound) { /* * While it's possible for a VACUUM to be both is_wraparound @@ -1244,6 +1244,7 @@ lazy_scan_heap(LVRelState *vacrel) Buffer buf; Page page; uint8 blk_info = 0; + int ndeleted = 0; bool has_lpdead_items; void *per_buffer_data = NULL; bool vm_page_frozen = false; @@ -1386,10 +1387,10 @@ lazy_scan_heap(LVRelState *vacrel) * line pointers previously marked LP_DEAD. */ if (got_cleanup_lock) - lazy_scan_prune(vacrel, buf, blkno, page, - vmbuffer, - blk_info & VAC_BLK_ALL_VISIBLE_ACCORDING_TO_VM, - &has_lpdead_items, &vm_page_frozen); + ndeleted = lazy_scan_prune(vacrel, buf, blkno, page, + vmbuffer, + blk_info & VAC_BLK_ALL_VISIBLE_ACCORDING_TO_VM, + &has_lpdead_items, &vm_page_frozen); /* * Count an eagerly scanned page as a failure or a success. @@ -1413,11 +1414,25 @@ lazy_scan_heap(LVRelState *vacrel) if (vm_page_frozen) { - Assert(vacrel->eager_scan_remaining_successes > 0); - vacrel->eager_scan_remaining_successes--; + if (vacrel->eager_scan_remaining_successes > 0) + vacrel->eager_scan_remaining_successes--; if (vacrel->eager_scan_remaining_successes == 0) { + /* + * Report only once that we disabled eager scanning. We + * may eagerly read ahead blocks in excess of the success + * or failure caps before attempting to freeze them, so we + * could reach here even after disabling additional eager + * scanning. + */ + if (vacrel->eager_scan_max_fails_per_region > 0) + ereport(vacrel->verbose ? INFO : DEBUG2, + (errmsg("disabling eager scanning after freezing %u eagerly scanned blocks of relation \"%s.%s.%s\"", + orig_eager_scan_success_limit, + vacrel->dbname, vacrel->relnamespace, + vacrel->relname))); + /* * If we hit our success cap, permanently disable eager * scanning by setting the other eager scan management @@ -1426,19 +1441,10 @@ lazy_scan_heap(LVRelState *vacrel) vacrel->eager_scan_remaining_fails = 0; vacrel->next_eager_scan_region_start = InvalidBlockNumber; vacrel->eager_scan_max_fails_per_region = 0; - - ereport(vacrel->verbose ? INFO : DEBUG2, - (errmsg("disabling eager scanning after freezing %u eagerly scanned blocks of \"%s.%s.%s\"", - orig_eager_scan_success_limit, - vacrel->dbname, vacrel->relnamespace, - vacrel->relname))); } } - else - { - Assert(vacrel->eager_scan_remaining_fails > 0); + else if (vacrel->eager_scan_remaining_fails > 0) vacrel->eager_scan_remaining_fails--; - } } /* @@ -1475,7 +1481,7 @@ lazy_scan_heap(LVRelState *vacrel) * table has indexes. There will only be newly-freed space if we * held the cleanup lock and lazy_scan_prune() was called. */ - if (got_cleanup_lock && vacrel->nindexes == 0 && has_lpdead_items && + if (got_cleanup_lock && vacrel->nindexes == 0 && ndeleted > 0 && blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES) { FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum, @@ -1866,8 +1872,6 @@ lazy_scan_new_or_empty(LVRelState *vacrel, Buffer buf, BlockNumber blkno, */ if (!PageIsAllVisible(page)) { - uint8 old_vmbits; - START_CRIT_SECTION(); /* mark buffer dirty before writing a WAL record */ @@ -1887,24 +1891,16 @@ lazy_scan_new_or_empty(LVRelState *vacrel, Buffer buf, BlockNumber blkno, log_newpage_buffer(buf, true); PageSetAllVisible(page); - old_vmbits = visibilitymap_set(vacrel->rel, blkno, buf, - InvalidXLogRecPtr, - vmbuffer, InvalidTransactionId, - VISIBILITYMAP_ALL_VISIBLE | - VISIBILITYMAP_ALL_FROZEN); + visibilitymap_set(vacrel->rel, blkno, buf, + InvalidXLogRecPtr, + vmbuffer, InvalidTransactionId, + VISIBILITYMAP_ALL_VISIBLE | + VISIBILITYMAP_ALL_FROZEN); END_CRIT_SECTION(); - /* - * If the page wasn't already set all-visible and/or all-frozen in - * the VM, count it as newly set for logging. - */ - if ((old_vmbits & VISIBILITYMAP_ALL_VISIBLE) == 0) - { - vacrel->vm_new_visible_pages++; - vacrel->vm_new_visible_frozen_pages++; - } - else if ((old_vmbits & VISIBILITYMAP_ALL_FROZEN) == 0) - vacrel->vm_new_frozen_pages++; + /* Count the newly all-frozen pages for logging */ + vacrel->vm_new_visible_pages++; + vacrel->vm_new_visible_frozen_pages++; } freespace = PageGetHeapFreeSpace(page); @@ -1940,8 +1936,10 @@ cmpOffsetNumbers(const void *a, const void *b) * *vm_page_frozen is set to true if the page is newly set all-frozen in the * VM. The caller currently only uses this for determining whether an eagerly * scanned page was successfully set all-frozen. + * + * Returns the number of tuples deleted from the page during HOT pruning. */ -static void +static int lazy_scan_prune(LVRelState *vacrel, Buffer buf, BlockNumber blkno, @@ -2212,6 +2210,8 @@ lazy_scan_prune(LVRelState *vacrel, *vm_page_frozen = true; } } + + return presult.ndeleted; } /* @@ -2909,7 +2909,6 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, if (heap_page_is_all_visible(vacrel, buffer, &visibility_cutoff_xid, &all_frozen)) { - uint8 old_vmbits; uint8 flags = VISIBILITYMAP_ALL_VISIBLE; if (all_frozen) @@ -2919,25 +2918,15 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, } PageSetAllVisible(page); - old_vmbits = visibilitymap_set(vacrel->rel, blkno, buffer, - InvalidXLogRecPtr, - vmbuffer, visibility_cutoff_xid, - flags); - - /* - * If the page wasn't already set all-visible and/or all-frozen in the - * VM, count it as newly set for logging. - */ - if ((old_vmbits & VISIBILITYMAP_ALL_VISIBLE) == 0) - { - vacrel->vm_new_visible_pages++; - if (all_frozen) - vacrel->vm_new_visible_frozen_pages++; - } + visibilitymap_set(vacrel->rel, blkno, buffer, + InvalidXLogRecPtr, + vmbuffer, visibility_cutoff_xid, + flags); - else if ((old_vmbits & VISIBILITYMAP_ALL_FROZEN) == 0 && - all_frozen) - vacrel->vm_new_frozen_pages++; + /* Count the newly set VM page for logging */ + vacrel->vm_new_visible_pages++; + if (all_frozen) + vacrel->vm_new_visible_frozen_pages++; } /* Revert to the previous phase information for error traceback */ diff --git a/src/backend/access/heap/visibilitymap.c b/src/backend/access/heap/visibilitymap.c index 745a04ef26e29..8f918e00af7ed 100644 --- a/src/backend/access/heap/visibilitymap.c +++ b/src/backend/access/heap/visibilitymap.c @@ -364,7 +364,7 @@ visibilitymap_get_status(Relation rel, BlockNumber heapBlk, Buffer *vmbuf) { *vmbuf = vm_readbuf(rel, mapBlock, false); if (!BufferIsValid(*vmbuf)) - return false; + return (uint8) 0; } map = PageGetContents(BufferGetPage(*vmbuf)); diff --git a/src/backend/access/index/amapi.c b/src/backend/access/index/amapi.c index d6b8dad4d52c7..60684c5342279 100644 --- a/src/backend/access/index/amapi.c +++ b/src/backend/access/index/amapi.c @@ -42,6 +42,19 @@ GetIndexAmRoutine(Oid amhandler) elog(ERROR, "index access method handler function %u did not return an IndexAmRoutine struct", amhandler); + /* Assert that all required callbacks are present. */ + Assert(routine->ambuild != NULL); + Assert(routine->ambuildempty != NULL); + Assert(routine->aminsert != NULL); + Assert(routine->ambulkdelete != NULL); + Assert(routine->amvacuumcleanup != NULL); + Assert(routine->amcostestimate != NULL); + Assert(routine->amoptions != NULL); + Assert(routine->amvalidate != NULL); + Assert(routine->ambeginscan != NULL); + Assert(routine->amrescan != NULL); + Assert(routine->amendscan != NULL); + return routine; } @@ -120,6 +133,11 @@ IndexAmTranslateStrategy(StrategyNumber strategy, Oid amoid, Oid opfamily, bool CompareType result; IndexAmRoutine *amroutine; + /* shortcut for common case */ + if (amoid == BTREE_AM_OID && + (strategy > InvalidStrategy && strategy <= BTMaxStrategyNumber)) + return (CompareType) strategy; + amroutine = GetIndexAmRoutineByAmId(amoid, false); if (amroutine->amtranslatestrategy) result = amroutine->amtranslatestrategy(strategy, opfamily); @@ -145,6 +163,11 @@ IndexAmTranslateCompareType(CompareType cmptype, Oid amoid, Oid opfamily, bool m StrategyNumber result; IndexAmRoutine *amroutine; + /* shortcut for common case */ + if (amoid == BTREE_AM_OID && + (cmptype > COMPARE_INVALID && cmptype <= COMPARE_GT)) + return (StrategyNumber) cmptype; + amroutine = GetIndexAmRoutineByAmId(amoid, false); if (amroutine->amtranslatecmptype) result = amroutine->amtranslatecmptype(cmptype, opfamily); diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 8f532e14590e7..0cb27af131095 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -851,7 +851,7 @@ systable_inplace_update_begin(Relation relation, if (retries++ > 10000) elog(ERROR, "giving up after too many tries to overwrite row"); - INJECTION_POINT("inplace-before-pin"); + INJECTION_POINT("inplace-before-pin", NULL); scan = systable_beginscan(relation, indexId, indexOK, snapshot, nkeys, unconstify(ScanKeyData *, key)); oldtup = systable_getnext(scan); diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 55ec4c1035274..86d11f4ec791d 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -263,6 +263,16 @@ index_beginscan(Relation heapRelation, Assert(snapshot != InvalidSnapshot); + /* Check that a historic snapshot is not used for non-catalog tables */ + if (IsHistoricMVCCSnapshot(snapshot) && + !RelationIsAccessibleInLogicalDecoding(heapRelation)) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_TRANSACTION_STATE), + errmsg("cannot query non-catalog table \"%s\" during logical decoding", + RelationGetRelationName(heapRelation)))); + } + scan = index_beginscan_internal(indexRelation, nkeys, norderbys, snapshot, NULL, false); /* @@ -489,7 +499,8 @@ index_parallelscan_estimate(Relation indexRelation, int nkeys, int norderbys, if (parallel_aware && indexRelation->rd_indam->amestimateparallelscan != NULL) nbytes = add_size(nbytes, - indexRelation->rd_indam->amestimateparallelscan(nkeys, + indexRelation->rd_indam->amestimateparallelscan(indexRelation, + nkeys, norderbys)); return nbytes; @@ -985,11 +996,6 @@ index_store_float8_orderby_distances(IndexScanDesc scan, Oid *orderByTypes, { if (orderByTypes[i] == FLOAT8OID) { -#ifndef USE_FLOAT8_BYVAL - /* must free any old value to avoid memory leakage */ - if (!scan->xs_orderbynulls[i]) - pfree(DatumGetPointer(scan->xs_orderbyvals[i])); -#endif if (distances && !distances[i].isnull) { scan->xs_orderbyvals[i] = Float8GetDatum(distances[i].value); diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c index 291cb8fc15d95..188c27b4925f7 100644 --- a/src/backend/access/nbtree/nbtcompare.c +++ b/src/backend/access/nbtree/nbtcompare.c @@ -58,6 +58,7 @@ #include #include "utils/fmgrprotos.h" +#include "utils/skipsupport.h" #include "utils/sortsupport.h" #ifdef STRESS_SORT_INT_MIN @@ -78,6 +79,51 @@ btboolcmp(PG_FUNCTION_ARGS) PG_RETURN_INT32((int32) a - (int32) b); } +static Datum +bool_decrement(Relation rel, Datum existing, bool *underflow) +{ + bool bexisting = DatumGetBool(existing); + + if (bexisting == false) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return BoolGetDatum(bexisting - 1); +} + +static Datum +bool_increment(Relation rel, Datum existing, bool *overflow) +{ + bool bexisting = DatumGetBool(existing); + + if (bexisting == true) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return BoolGetDatum(bexisting + 1); +} + +Datum +btboolskipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = bool_decrement; + sksup->increment = bool_increment; + sksup->low_elem = BoolGetDatum(false); + sksup->high_elem = BoolGetDatum(true); + + PG_RETURN_VOID(); +} + Datum btint2cmp(PG_FUNCTION_ARGS) { @@ -105,6 +151,51 @@ btint2sortsupport(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } +static Datum +int2_decrement(Relation rel, Datum existing, bool *underflow) +{ + int16 iexisting = DatumGetInt16(existing); + + if (iexisting == PG_INT16_MIN) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return Int16GetDatum(iexisting - 1); +} + +static Datum +int2_increment(Relation rel, Datum existing, bool *overflow) +{ + int16 iexisting = DatumGetInt16(existing); + + if (iexisting == PG_INT16_MAX) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return Int16GetDatum(iexisting + 1); +} + +Datum +btint2skipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = int2_decrement; + sksup->increment = int2_increment; + sksup->low_elem = Int16GetDatum(PG_INT16_MIN); + sksup->high_elem = Int16GetDatum(PG_INT16_MAX); + + PG_RETURN_VOID(); +} + Datum btint4cmp(PG_FUNCTION_ARGS) { @@ -128,6 +219,51 @@ btint4sortsupport(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } +static Datum +int4_decrement(Relation rel, Datum existing, bool *underflow) +{ + int32 iexisting = DatumGetInt32(existing); + + if (iexisting == PG_INT32_MIN) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return Int32GetDatum(iexisting - 1); +} + +static Datum +int4_increment(Relation rel, Datum existing, bool *overflow) +{ + int32 iexisting = DatumGetInt32(existing); + + if (iexisting == PG_INT32_MAX) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return Int32GetDatum(iexisting + 1); +} + +Datum +btint4skipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = int4_decrement; + sksup->increment = int4_increment; + sksup->low_elem = Int32GetDatum(PG_INT32_MIN); + sksup->high_elem = Int32GetDatum(PG_INT32_MAX); + + PG_RETURN_VOID(); +} + Datum btint8cmp(PG_FUNCTION_ARGS) { @@ -142,32 +278,57 @@ btint8cmp(PG_FUNCTION_ARGS) PG_RETURN_INT32(A_LESS_THAN_B); } -#if SIZEOF_DATUM < 8 -static int -btint8fastcmp(Datum x, Datum y, SortSupport ssup) +Datum +btint8sortsupport(PG_FUNCTION_ARGS) { - int64 a = DatumGetInt64(x); - int64 b = DatumGetInt64(y); + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - if (a > b) - return A_GREATER_THAN_B; - else if (a == b) - return 0; - else - return A_LESS_THAN_B; + ssup->comparator = ssup_datum_signed_cmp; + PG_RETURN_VOID(); +} + +static Datum +int8_decrement(Relation rel, Datum existing, bool *underflow) +{ + int64 iexisting = DatumGetInt64(existing); + + if (iexisting == PG_INT64_MIN) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return Int64GetDatum(iexisting - 1); +} + +static Datum +int8_increment(Relation rel, Datum existing, bool *overflow) +{ + int64 iexisting = DatumGetInt64(existing); + + if (iexisting == PG_INT64_MAX) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return Int64GetDatum(iexisting + 1); } -#endif Datum -btint8sortsupport(PG_FUNCTION_ARGS) +btint8skipsupport(PG_FUNCTION_ARGS) { - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = int8_decrement; + sksup->increment = int8_increment; + sksup->low_elem = Int64GetDatum(PG_INT64_MIN); + sksup->high_elem = Int64GetDatum(PG_INT64_MAX); -#if SIZEOF_DATUM >= 8 - ssup->comparator = ssup_datum_signed_cmp; -#else - ssup->comparator = btint8fastcmp; -#endif PG_RETURN_VOID(); } @@ -292,6 +453,51 @@ btoidsortsupport(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } +static Datum +oid_decrement(Relation rel, Datum existing, bool *underflow) +{ + Oid oexisting = DatumGetObjectId(existing); + + if (oexisting == InvalidOid) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return ObjectIdGetDatum(oexisting - 1); +} + +static Datum +oid_increment(Relation rel, Datum existing, bool *overflow) +{ + Oid oexisting = DatumGetObjectId(existing); + + if (oexisting == OID_MAX) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return ObjectIdGetDatum(oexisting + 1); +} + +Datum +btoidskipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = oid_decrement; + sksup->increment = oid_increment; + sksup->low_elem = ObjectIdGetDatum(InvalidOid); + sksup->high_elem = ObjectIdGetDatum(OID_MAX); + + PG_RETURN_VOID(); +} + Datum btoidvectorcmp(PG_FUNCTION_ARGS) { @@ -325,3 +531,50 @@ btcharcmp(PG_FUNCTION_ARGS) /* Be careful to compare chars as unsigned */ PG_RETURN_INT32((int32) ((uint8) a) - (int32) ((uint8) b)); } + +static Datum +char_decrement(Relation rel, Datum existing, bool *underflow) +{ + uint8 cexisting = DatumGetUInt8(existing); + + if (cexisting == 0) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return CharGetDatum((uint8) cexisting - 1); +} + +static Datum +char_increment(Relation rel, Datum existing, bool *overflow) +{ + uint8 cexisting = DatumGetUInt8(existing); + + if (cexisting == UCHAR_MAX) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return CharGetDatum((uint8) cexisting + 1); +} + +Datum +btcharskipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = char_decrement; + sksup->increment = char_increment; + + /* btcharcmp compares chars as unsigned */ + sksup->low_elem = UInt8GetDatum(0); + sksup->high_elem = UInt8GetDatum(UCHAR_MAX); + + PG_RETURN_VOID(); +} diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index 08884116aecbe..ab0b6946cb031 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -16,6 +16,7 @@ #include "access/nbtree.h" #include "access/nbtxlog.h" +#include "access/tableam.h" #include "access/xloginsert.h" #include "miscadmin.h" #include "utils/rel.h" diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index aa82cede30aa4..be60781fc98ec 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -17,6 +17,7 @@ #include "access/nbtree.h" #include "access/nbtxlog.h" +#include "access/tableam.h" #include "access/transam.h" #include "access/xloginsert.h" #include "common/int.h" diff --git a/src/backend/access/nbtree/nbtpreprocesskeys.c b/src/backend/access/nbtree/nbtpreprocesskeys.c index 38a87af1cc8b8..936b93f157a8b 100644 --- a/src/backend/access/nbtree/nbtpreprocesskeys.c +++ b/src/backend/access/nbtree/nbtpreprocesskeys.c @@ -16,10 +16,13 @@ #include "postgres.h" #include "access/nbtree.h" +#include "access/relscan.h" +#include "common/int.h" #include "lib/qunique.h" #include "utils/array.h" #include "utils/lsyscache.h" #include "utils/memutils.h" +#include "utils/rel.h" typedef struct BTScanKeyPreproc { @@ -45,8 +48,23 @@ static bool _bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey, FmgrInfo *orderproc, BTArrayKeyInfo *array, bool *qual_ok); +static bool _bt_saoparray_shrink(IndexScanDesc scan, ScanKey arraysk, + ScanKey skey, FmgrInfo *orderproc, + BTArrayKeyInfo *array, bool *qual_ok); +static bool _bt_skiparray_shrink(IndexScanDesc scan, ScanKey skey, + BTArrayKeyInfo *array, bool *qual_ok); +static void _bt_skiparray_strat_adjust(IndexScanDesc scan, ScanKey arraysk, + BTArrayKeyInfo *array); +static void _bt_skiparray_strat_decrement(IndexScanDesc scan, ScanKey arraysk, + BTArrayKeyInfo *array); +static void _bt_skiparray_strat_increment(IndexScanDesc scan, ScanKey arraysk, + BTArrayKeyInfo *array); +static void _bt_unmark_keys(IndexScanDesc scan, int *keyDataMap); +static int _bt_reorder_array_cmp(const void *a, const void *b); static ScanKey _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys); static void _bt_preprocess_array_keys_final(IndexScanDesc scan, int *keyDataMap); +static int _bt_num_array_keys(IndexScanDesc scan, Oid *skip_eq_ops_out, + int *numSkipArrayKeys_out); static Datum _bt_find_extreme_element(IndexScanDesc scan, ScanKey skey, Oid elemtype, StrategyNumber strat, Datum *elems, int nelems); @@ -83,12 +101,14 @@ static int _bt_compare_array_elements(const void *a, const void *b, void *arg); * incomplete sets of cross-type operators, we may fail to detect redundant * or contradictory keys, but we can survive that.) * - * The output keys must be sorted by index attribute. Presently we expect + * Required output keys are sorted by index attribute. Presently we expect * (but verify) that the input keys are already so sorted --- this is done * by match_clauses_to_index() in indxpath.c. Some reordering of the keys * within each attribute may be done as a byproduct of the processing here. * That process must leave array scan keys (within an attribute) in the same * order as corresponding entries from the scan's BTArrayKeyInfo array info. + * We might also construct skip array scan keys that weren't present in the + * original input keys; these are also output in standard attribute order. * * The output keys are marked with flags SK_BT_REQFWD and/or SK_BT_REQBKWD * if they must be satisfied in order to continue the scan forward or backward @@ -101,34 +121,47 @@ static int _bt_compare_array_elements(const void *a, const void *b, void *arg); * attributes with "=" keys are marked both SK_BT_REQFWD and SK_BT_REQBKWD. * For the first attribute without an "=" key, any "<" and "<=" keys are * marked SK_BT_REQFWD while any ">" and ">=" keys are marked SK_BT_REQBKWD. - * This can be seen to be correct by considering the above example. Note - * in particular that if there are no keys for a given attribute, the keys for - * subsequent attributes can never be required; for instance "WHERE y = 4" - * requires a full-index scan. + * This can be seen to be correct by considering the above example. * - * If possible, redundant keys are eliminated: we keep only the tightest + * If we never generated skip array scan keys, it would be possible for "gaps" + * to appear that make it unsafe to mark any subsequent input scan keys + * (copied from scan->keyData[]) as required to continue the scan. Prior to + * Postgres 18, a qual like "WHERE y = 4" always resulted in a full scan. + * This qual now becomes "WHERE x = ANY('{every possible x value}') and y = 4" + * on output. In other words, preprocessing now adds a skip array on "x". + * This has the potential to be much more efficient than a full index scan + * (though it behaves like a full scan when there's many distinct "x" values). + * + * Typically, redundant keys are eliminated: we keep only the tightest * >/>= bound and the tightest />= or both - * 4::int AND x > 10::bigint", and we are unable to determine - * which key is more restrictive for lack of a suitable cross-type operator. - * _bt_first will arbitrarily pick one of the keys to do the initial - * positioning with. If it picks x > 4, then the x > 10 condition will fail - * until we reach index entries > 10; but we can't stop the scan just because - * x > 10 is failing. On the other hand, if we are scanning backwards, then - * failure of either key is indeed enough to stop the scan. (In general, when - * inequality keys are present, the initial-positioning code only promises to - * position before the first possible match, not exactly at the first match, - * for a forward scan; or after the last match for a backward scan.) + * we cannot eliminate either key. + * + * When all redundant keys could not be eliminated, we'll output a key array + * that can more or less be treated as if it had no redundant keys. Suppose + * we have "x > 4::int AND x > 10::bigint AND x < 70", and we are unable to + * determine which > key is more restrictive for lack of a suitable cross-type + * operator. We'll arbitrarily pick one of the > keys; the other > key won't + * be marked required. Obviously, the scan will be less efficient if we + * choose x > 4 over x > 10 -- but it can still largely proceed as if there + * was only a single > condition. "x > 10" will be placed at the end of the + * so->keyData[] output array. It'll always be evaluated last, after the keys + * that could be marked required in the usual way (after "x > 4 AND x < 70"). + * This can sometimes result in so->keyData[] keys that aren't even in index + * attribute order (if the qual involves multiple attributes). The scan's + * required keys will still be in attribute order, though, so it can't matter. + * + * This scheme ensures that _bt_first always uses the same set of keys at the + * start of a forwards scan as those _bt_checkkeys uses to determine when to + * end a similar backwards scan (and vice-versa). _bt_advance_array_keys + * depends on this: it expects to be able to reliably predict what the next + * _bt_first call will do by testing whether _bt_checkkeys' routines report + * that the final tuple on the page is past the end of matches for the scan's + * keys with the scan direction flipped. If it is (if continuescan=false), + * then it follows that calling _bt_first will, at a minimum, relocate the + * scan to the very next leaf page (in the current scan direction). * * As a byproduct of this work, we can detect contradictory quals such * as "x = 1 AND x > 2". If we see that, we return so->qual_ok = false, @@ -137,11 +170,20 @@ static int _bt_compare_array_elements(const void *a, const void *b, void *arg); * Again, missing cross-type operators might cause us to fail to prove the * quals contradictory when they really are, but the scan will work correctly. * - * Row comparison keys are currently also treated without any smarts: - * we just transfer them into the preprocessed array without any + * Skip array = keys will even be generated in the presence of "contradictory" + * inequality quals when it'll enable marking later input quals as required. + * We'll merge any such inequalities into the generated skip array by setting + * its array.low_compare or array.high_compare key field. The resulting skip + * array will generate its array elements from a range that's constrained by + * any merged input inequalities (which won't get output in so->keyData[]). + * + * Row comparison keys currently have a couple of notable limitations. + * Right now we just transfer them into the preprocessed array without any * editorialization. We can treat them the same as an ordinary inequality * comparison on the row's first index column, for the purposes of the logic - * about required keys. + * about required keys. Also, we are unable to merge a row comparison key + * into a skip array (only ordinary inequalities are merged). A key that + * comes after a Row comparison key is therefore never marked as required. * * Note: the reason we have to copy the preprocessed scan keys into private * storage is that we are modifying the array based on comparisons of the @@ -158,7 +200,8 @@ _bt_preprocess_keys(IndexScanDesc scan) int numberOfEqualCols; ScanKey inkeys; BTScanKeyPreproc xform[BTMaxStrategyNumber]; - bool test_result; + bool test_result, + redundant_key_kept = false; AttrNumber attno; ScanKey arrayKeyData; int *keyDataMap = NULL; @@ -200,6 +243,14 @@ _bt_preprocess_keys(IndexScanDesc scan) /* Also maintain keyDataMap for remapping so->orderProcs[] later */ keyDataMap = MemoryContextAlloc(so->arrayContext, numberOfKeys * sizeof(int)); + + /* + * Also enlarge output array when it might otherwise not have room for + * a skip array's scan key + */ + if (numberOfKeys > scan->numberOfKeys) + so->keyData = repalloc(so->keyData, + numberOfKeys * sizeof(ScanKeyData)); } else inkeys = scan->keyData; @@ -229,6 +280,7 @@ _bt_preprocess_keys(IndexScanDesc scan) Assert(so->keyData[0].sk_flags & SK_SEARCHARRAY); Assert(so->keyData[0].sk_strategy != BTEqualStrategyNumber || (so->arrayKeys[0].scan_key == 0 && + !(so->keyData[0].sk_flags & SK_BT_SKIP) && OidIsValid(so->orderProcs[0].fn_oid))); } @@ -288,7 +340,8 @@ _bt_preprocess_keys(IndexScanDesc scan) * redundant. Note that this is no less true if the = key is * SEARCHARRAY; the only real difference is that the inequality * key _becomes_ redundant by making _bt_compare_scankey_args - * eliminate the subset of elements that won't need to be matched. + * eliminate the subset of elements that won't need to be matched + * (with SAOP arrays and skip arrays alike). * * If we have a case like "key = 1 AND key > 2", we set qual_ok to * false and abandon further processing. We'll do the same thing @@ -345,11 +398,11 @@ _bt_preprocess_keys(IndexScanDesc scan) return; } /* else discard the redundant non-equality key */ - Assert(!array || array->num_elems > 0); xform[j].inkey = NULL; xform[j].inkeyi = -1; } - /* else, cannot determine redundancy, keep both keys */ + else + redundant_key_kept = true; } /* track number of attrs for which we have "=" keys */ numberOfEqualCols++; @@ -370,6 +423,8 @@ _bt_preprocess_keys(IndexScanDesc scan) else xform[BTLessStrategyNumber - 1].inkey = NULL; } + else + redundant_key_kept = true; } /* try to keep only one of >, >= */ @@ -387,12 +442,19 @@ _bt_preprocess_keys(IndexScanDesc scan) else xform[BTGreaterStrategyNumber - 1].inkey = NULL; } + else + redundant_key_kept = true; } /* * Emit the cleaned-up keys into the so->keyData[] array, and then * mark them if they are required. They are required (possibly * only in one direction) if all attrs before this one had "=". + * + * In practice we'll rarely output non-required scan keys here; + * typically, _bt_preprocess_array_keys has already added "=" keys + * sufficient to form an unbroken series of "=" constraints on all + * attrs prior to the attr from the final scan->keyData[] key. */ for (j = BTMaxStrategyNumber; --j >= 0;) { @@ -422,25 +484,6 @@ _bt_preprocess_keys(IndexScanDesc scan) /* check strategy this key's operator corresponds to */ j = inkey->sk_strategy - 1; - /* if row comparison, push it directly to the output array */ - if (inkey->sk_flags & SK_ROW_HEADER) - { - ScanKey outkey = &so->keyData[new_numberOfKeys++]; - - memcpy(outkey, inkey, sizeof(ScanKeyData)); - if (arrayKeyData) - keyDataMap[new_numberOfKeys - 1] = i; - if (numberOfEqualCols == attno - 1) - _bt_mark_scankey_required(outkey); - - /* - * We don't support RowCompare using equality; such a qual would - * mess up the numberOfEqualCols tracking. - */ - Assert(j != (BTEqualStrategyNumber - 1)); - continue; - } - if (inkey->sk_strategy == BTEqualStrategyNumber && (inkey->sk_flags & SK_SEARCHARRAY)) { @@ -481,6 +524,7 @@ _bt_preprocess_keys(IndexScanDesc scan) Assert(array->scan_key == i); Assert(OidIsValid(orderproc->fn_oid)); + Assert(!(inkey->sk_flags & SK_BT_SKIP)); } else if (xform[j].inkey->sk_flags & SK_SEARCHARRAY) { @@ -489,6 +533,7 @@ _bt_preprocess_keys(IndexScanDesc scan) Assert(array->scan_key == xform[j].inkeyi); Assert(OidIsValid(orderproc->fn_oid)); + Assert(!(xform[j].inkey->sk_flags & SK_BT_SKIP)); } /* @@ -508,8 +553,6 @@ _bt_preprocess_keys(IndexScanDesc scan) /* Have all we need to determine redundancy */ if (test_result) { - Assert(!array || array->num_elems > 0); - /* * New key is more restrictive, and so replaces old key... */ @@ -549,9 +592,8 @@ _bt_preprocess_keys(IndexScanDesc scan) * the new scan key. * * Note: We do things this way around so that our arrays are - * always in the same order as their corresponding scan keys, - * even with incomplete opfamilies. _bt_advance_array_keys - * depends on this. + * always in the same order as their corresponding scan keys. + * _bt_preprocess_array_keys_final expects this. */ ScanKey outkey = &so->keyData[new_numberOfKeys++]; @@ -563,6 +605,7 @@ _bt_preprocess_keys(IndexScanDesc scan) xform[j].inkey = inkey; xform[j].inkeyi = i; xform[j].arrayidx = arrayidx; + redundant_key_kept = true; } } } @@ -578,6 +621,15 @@ _bt_preprocess_keys(IndexScanDesc scan) if (arrayKeyData) _bt_preprocess_array_keys_final(scan, keyDataMap); + /* + * If there are remaining redundant inequality keys, we must make sure + * that each index attribute has no more than one required >/>= key, and + * no more than one required qual_ok) + _bt_unmark_keys(scan, keyDataMap); + /* Could pfree arrayKeyData/keyDataMap now, but not worth the cycles */ } @@ -702,9 +754,12 @@ _bt_fix_scankey_strategy(ScanKey skey, int16 *indoption) * * Depending on the operator type, the key may be required for both scan * directions or just one. Also, if the key is a row comparison header, - * we have to mark its first subsidiary ScanKey as required. (Subsequent - * subsidiary ScanKeys are normally for lower-order columns, and thus - * cannot be required, since they're after the first non-equality scankey.) + * we have to mark the appropriate subsidiary ScanKeys as required. In such + * cases, the first subsidiary key is required, but subsequent ones are + * required only as long as they correspond to successive index columns and + * match the leading column as to sort direction. Otherwise the row + * comparison ordering is different from the index ordering and so we can't + * stop the scan on the basis of those lower-order columns. * * Note: when we set required-key flag bits in a subsidiary scankey, we are * scribbling on a data structure belonging to the index AM's caller, not on @@ -742,12 +797,25 @@ _bt_mark_scankey_required(ScanKey skey) if (skey->sk_flags & SK_ROW_HEADER) { ScanKey subkey = (ScanKey) DatumGetPointer(skey->sk_argument); + AttrNumber attno = skey->sk_attno; /* First subkey should be same column/operator as the header */ - Assert(subkey->sk_flags & SK_ROW_MEMBER); - Assert(subkey->sk_attno == skey->sk_attno); + Assert(subkey->sk_attno == attno); Assert(subkey->sk_strategy == skey->sk_strategy); - subkey->sk_flags |= addflags; + + for (;;) + { + Assert(subkey->sk_flags & SK_ROW_MEMBER); + if (subkey->sk_attno != attno) + break; /* non-adjacent key, so not required */ + if (subkey->sk_strategy != skey->sk_strategy) + break; /* wrong direction, so not required */ + subkey->sk_flags |= addflags; + if (subkey->sk_flags & SK_ROW_END) + break; + subkey++; + attno++; + } } } @@ -803,6 +871,8 @@ _bt_compare_scankey_args(IndexScanDesc scan, ScanKey op, cmp_op; StrategyNumber strat; + Assert(!((leftarg->sk_flags | rightarg->sk_flags) & SK_ROW_MEMBER)); + /* * First, deal with cases where one or both args are NULL. This should * only happen when the scankeys represent IS NULL/NOT NULL conditions. @@ -812,6 +882,22 @@ _bt_compare_scankey_args(IndexScanDesc scan, ScanKey op, bool leftnull, rightnull; + /* Handle skip array comparison with IS NOT NULL scan key */ + if ((leftarg->sk_flags | rightarg->sk_flags) & SK_BT_SKIP) + { + /* Shouldn't generate skip array in presence of IS NULL key */ + Assert(!((leftarg->sk_flags | rightarg->sk_flags) & SK_SEARCHNULL)); + Assert((leftarg->sk_flags | rightarg->sk_flags) & SK_SEARCHNOTNULL); + + /* Skip array will have no NULL element/IS NULL scan key */ + Assert(array->num_elems == -1); + array->null_elem = false; + + /* IS NOT NULL key (could be leftarg or rightarg) now redundant */ + *result = true; + return true; + } + if (leftarg->sk_flags & SK_ISNULL) { Assert(leftarg->sk_flags & (SK_SEARCHNULL | SK_SEARCHNOTNULL)); @@ -861,6 +947,16 @@ _bt_compare_scankey_args(IndexScanDesc scan, ScanKey op, return true; } + /* + * We don't yet know how to determine redundancy when it involves a row + * compare key (barring simple cases involving IS NULL/IS NOT NULL) + */ + if ((leftarg->sk_flags | rightarg->sk_flags) & SK_ROW_HEADER) + { + Assert(!((leftarg->sk_flags | rightarg->sk_flags) & SK_BT_SKIP)); + return false; + } + /* * If either leftarg or rightarg are equality-type array scankeys, we need * specialized handling (since by now we know that IS NULL wasn't used) @@ -885,6 +981,7 @@ _bt_compare_scankey_args(IndexScanDesc scan, ScanKey op, { /* Can't make the comparison */ *result = false; /* suppress compiler warnings */ + Assert(!((leftarg->sk_flags | rightarg->sk_flags) & SK_BT_SKIP)); return false; } @@ -978,24 +1075,56 @@ _bt_compare_scankey_args(IndexScanDesc scan, ScanKey op, * Compare an array scan key to a scalar scan key, eliminating contradictory * array elements such that the scalar scan key becomes redundant. * + * If the opfamily is incomplete we may not be able to determine which + * elements are contradictory. When we return true we'll have validly set + * *qual_ok, guaranteeing that at least the scalar scan key can be considered + * redundant. We return false if the comparison could not be made (caller + * must keep both scan keys when this happens). + * + * Note: it's up to caller to deal with IS [NOT] NULL scan keys, as well as + * row comparison scan keys. We only deal with scalar scan keys. + */ +static bool +_bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey, + FmgrInfo *orderproc, BTArrayKeyInfo *array, + bool *qual_ok) +{ + Assert(arraysk->sk_attno == skey->sk_attno); + Assert(!(arraysk->sk_flags & (SK_ISNULL | SK_ROW_HEADER | SK_ROW_MEMBER))); + Assert((arraysk->sk_flags & SK_SEARCHARRAY) && + arraysk->sk_strategy == BTEqualStrategyNumber); + /* don't expect to have to deal with NULLs/row comparison scan keys */ + Assert(!(skey->sk_flags & (SK_ISNULL | SK_ROW_HEADER | SK_ROW_MEMBER))); + Assert(!(skey->sk_flags & SK_SEARCHARRAY) || + skey->sk_strategy != BTEqualStrategyNumber); + + /* + * Just call the appropriate helper function based on whether it's a SAOP + * array or a skip array. Both helpers will set *qual_ok in passing. + */ + if (array->num_elems != -1) + return _bt_saoparray_shrink(scan, arraysk, skey, orderproc, array, + qual_ok); + else + return _bt_skiparray_shrink(scan, skey, array, qual_ok); +} + +/* + * Preprocessing of SAOP array scan key, used to determine which array + * elements are eliminated as contradictory by a non-array scalar key. + * + * _bt_compare_array_scankey_args helper function. + * * Array elements can be eliminated as contradictory when excluded by some * other operator on the same attribute. For example, with an index scan qual * "WHERE a IN (1, 2, 3) AND a < 2", all array elements except the value "1" * are eliminated, and the < scan key is eliminated as redundant. Cases where * every array element is eliminated by a redundant scalar scan key have an * unsatisfiable qual, which we handle by setting *qual_ok=false for caller. - * - * If the opfamily doesn't supply a complete set of cross-type ORDER procs we - * may not be able to determine which elements are contradictory. If we have - * the required ORDER proc then we return true (and validly set *qual_ok), - * guaranteeing that at least the scalar scan key can be considered redundant. - * We return false if the comparison could not be made (caller must keep both - * scan keys when this happens). */ static bool -_bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey, - FmgrInfo *orderproc, BTArrayKeyInfo *array, - bool *qual_ok) +_bt_saoparray_shrink(IndexScanDesc scan, ScanKey arraysk, ScanKey skey, + FmgrInfo *orderproc, BTArrayKeyInfo *array, bool *qual_ok) { Relation rel = scan->indexRelation; Oid opcintype = rel->rd_opcintype[arraysk->sk_attno - 1]; @@ -1006,14 +1135,8 @@ _bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey FmgrInfo crosstypeproc; FmgrInfo *orderprocp = orderproc; - Assert(arraysk->sk_attno == skey->sk_attno); Assert(array->num_elems > 0); - Assert(!(arraysk->sk_flags & (SK_ISNULL | SK_ROW_HEADER | SK_ROW_MEMBER))); - Assert((arraysk->sk_flags & SK_SEARCHARRAY) && - arraysk->sk_strategy == BTEqualStrategyNumber); - Assert(!(skey->sk_flags & (SK_ISNULL | SK_ROW_HEADER | SK_ROW_MEMBER))); - Assert(!(skey->sk_flags & SK_SEARCHARRAY) || - skey->sk_strategy != BTEqualStrategyNumber); + Assert(!(arraysk->sk_flags & SK_BT_SKIP)); /* * _bt_binsrch_array_skey searches an array for the entry best matching a @@ -1112,6 +1235,548 @@ _bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey return true; } +/* + * Preprocessing of skip array scan key, used to determine redundancy against + * a non-array scalar scan key (must be an inequality). + * + * _bt_compare_array_scankey_args helper function. + * + * Skip arrays work by procedurally generating their elements as needed, so we + * just store the inequality as the skip array's low_compare or high_compare + * (except when there's already a more restrictive low_compare/high_compare). + * The array's final elements are the range of values that still satisfy the + * array's final low_compare and high_compare. + */ +static bool +_bt_skiparray_shrink(IndexScanDesc scan, ScanKey skey, BTArrayKeyInfo *array, + bool *qual_ok) +{ + bool test_result; + + Assert(array->num_elems == -1); + + /* + * Array's index attribute will be constrained by a strict operator/key. + * Array must not "contain a NULL element" (i.e. the scan must not apply + * "IS NULL" qual when it reaches the end of the index that stores NULLs). + */ + array->null_elem = false; + *qual_ok = true; + + /* + * Consider if we should treat caller's scalar scan key as the skip + * array's high_compare or low_compare. + * + * In general the current array element must either be a copy of a value + * taken from an index tuple, or a derivative value generated by opclass's + * skip support function. That way the scan can always safely assume that + * it's okay to use the only-input-opclass-type proc from so->orderProcs[] + * (they can be cross-type with SAOP arrays, but never with skip arrays). + * + * This approach is enabled by MINVAL/MAXVAL sentinel key markings, which + * can be thought of as representing either the lowest or highest matching + * array element (excluding the NULL element, where applicable, though as + * just discussed it isn't applicable to this range skip array anyway). + * Array keys marked MINVAL/MAXVAL never have a valid datum in their + * sk_argument field. The scan directly applies the array's low_compare + * key when it encounters MINVAL in the array key proper (just as it + * applies high_compare when it sees MAXVAL set in the array key proper). + * The scan must never use the array's so->orderProcs[] proc against + * low_compare's/high_compare's sk_argument, either (so->orderProcs[] is + * only intended to be used with rhs datums from the array proper/index). + */ + switch (skey->sk_strategy) + { + case BTLessStrategyNumber: + case BTLessEqualStrategyNumber: + if (array->high_compare) + { + /* replace existing high_compare with caller's key? */ + if (!_bt_compare_scankey_args(scan, array->high_compare, skey, + array->high_compare, NULL, NULL, + &test_result)) + return false; /* can't determine more restrictive key */ + + if (!test_result) + return true; /* no, just discard caller's key */ + + /* yes, replace existing high_compare with caller's key */ + } + + /* caller's key becomes skip array's high_compare */ + array->high_compare = skey; + break; + case BTGreaterEqualStrategyNumber: + case BTGreaterStrategyNumber: + if (array->low_compare) + { + /* replace existing low_compare with caller's key? */ + if (!_bt_compare_scankey_args(scan, array->low_compare, skey, + array->low_compare, NULL, NULL, + &test_result)) + return false; /* can't determine more restrictive key */ + + if (!test_result) + return true; /* no, just discard caller's key */ + + /* yes, replace existing low_compare with caller's key */ + } + + /* caller's key becomes skip array's low_compare */ + array->low_compare = skey; + break; + case BTEqualStrategyNumber: + default: + elog(ERROR, "unrecognized StrategyNumber: %d", + (int) skey->sk_strategy); + break; + } + + return true; +} + +/* + * Applies the opfamily's skip support routine to convert the skip array's > + * low_compare key (if any) into a >= key, and to convert its < high_compare + * key (if any) into a <= key. Decrements the high_compare key's sk_argument, + * and/or increments the low_compare key's sk_argument (also adjusts their + * operator strategies, while changing the operator as appropriate). + * + * This optional optimization reduces the number of descents required within + * _bt_first. Whenever _bt_first is called with a skip array whose current + * array element is the sentinel value MINVAL, using a transformed >= key + * instead of using the original > key makes it safe to include lower-order + * scan keys in the insertion scan key (there must be lower-order scan keys + * after the skip array). We will avoid an extra _bt_first to find the first + * value in the index > sk_argument -- at least when the first real matching + * value in the index happens to be an exact match for the sk_argument value + * that we produced here by incrementing the original input key's sk_argument. + * (Backwards scans derive the same benefit when they encounter the sentinel + * value MAXVAL, by converting the high_compare key from < to <=.) + * + * Note: The transformation is only correct when it cannot allow the scan to + * overlook matching tuples, but we don't have enough semantic information to + * safely make sure that can't happen during scans with cross-type operators. + * That's why we'll never apply the transformation in cross-type scenarios. + * For example, if we attempted to convert "sales_ts > '2024-01-01'::date" + * into "sales_ts >= '2024-01-02'::date" given a "sales_ts" attribute whose + * input opclass is timestamp_ops, the scan would overlook almost all (or all) + * tuples for sales that fell on '2024-01-01'. + * + * Note: We can safely modify array->low_compare/array->high_compare in place + * because they just point to copies of our scan->keyData[] input scan keys + * (namely the copies returned by _bt_preprocess_array_keys to be used as + * input into the standard preprocessing steps in _bt_preprocess_keys). + * Everything will be reset if there's a rescan. + */ +static void +_bt_skiparray_strat_adjust(IndexScanDesc scan, ScanKey arraysk, + BTArrayKeyInfo *array) +{ + BTScanOpaque so = (BTScanOpaque) scan->opaque; + MemoryContext oldContext; + + /* + * Called last among all preprocessing steps, when the skip array's final + * low_compare and high_compare have both been chosen + */ + Assert(arraysk->sk_flags & SK_BT_SKIP); + Assert(array->num_elems == -1 && !array->null_elem && array->sksup); + + oldContext = MemoryContextSwitchTo(so->arrayContext); + + if (array->high_compare && + array->high_compare->sk_strategy == BTLessStrategyNumber) + _bt_skiparray_strat_decrement(scan, arraysk, array); + + if (array->low_compare && + array->low_compare->sk_strategy == BTGreaterStrategyNumber) + _bt_skiparray_strat_increment(scan, arraysk, array); + + MemoryContextSwitchTo(oldContext); +} + +/* + * Convert skip array's > low_compare key into a >= key + */ +static void +_bt_skiparray_strat_decrement(IndexScanDesc scan, ScanKey arraysk, + BTArrayKeyInfo *array) +{ + Relation rel = scan->indexRelation; + Oid opfamily = rel->rd_opfamily[arraysk->sk_attno - 1], + opcintype = rel->rd_opcintype[arraysk->sk_attno - 1], + leop; + RegProcedure cmp_proc; + ScanKey high_compare = array->high_compare; + Datum orig_sk_argument = high_compare->sk_argument, + new_sk_argument; + bool uflow; + + Assert(high_compare->sk_strategy == BTLessStrategyNumber); + + /* + * Only perform the transformation when the operator type matches the + * index attribute's input opclass type + */ + if (high_compare->sk_subtype != opcintype && + high_compare->sk_subtype != InvalidOid) + return; + + /* Decrement, handling underflow by marking the qual unsatisfiable */ + new_sk_argument = array->sksup->decrement(rel, orig_sk_argument, &uflow); + if (uflow) + { + BTScanOpaque so = (BTScanOpaque) scan->opaque; + + so->qual_ok = false; + return; + } + + /* Look up <= operator (might fail) */ + leop = get_opfamily_member(opfamily, opcintype, opcintype, + BTLessEqualStrategyNumber); + if (!OidIsValid(leop)) + return; + cmp_proc = get_opcode(leop); + if (RegProcedureIsValid(cmp_proc)) + { + /* Transform < high_compare key into <= key */ + fmgr_info(cmp_proc, &high_compare->sk_func); + high_compare->sk_argument = new_sk_argument; + high_compare->sk_strategy = BTLessEqualStrategyNumber; + } +} + +/* + * Convert skip array's < low_compare key into a <= key + */ +static void +_bt_skiparray_strat_increment(IndexScanDesc scan, ScanKey arraysk, + BTArrayKeyInfo *array) +{ + Relation rel = scan->indexRelation; + Oid opfamily = rel->rd_opfamily[arraysk->sk_attno - 1], + opcintype = rel->rd_opcintype[arraysk->sk_attno - 1], + geop; + RegProcedure cmp_proc; + ScanKey low_compare = array->low_compare; + Datum orig_sk_argument = low_compare->sk_argument, + new_sk_argument; + bool oflow; + + Assert(low_compare->sk_strategy == BTGreaterStrategyNumber); + + /* + * Only perform the transformation when the operator type matches the + * index attribute's input opclass type + */ + if (low_compare->sk_subtype != opcintype && + low_compare->sk_subtype != InvalidOid) + return; + + /* Increment, handling overflow by marking the qual unsatisfiable */ + new_sk_argument = array->sksup->increment(rel, orig_sk_argument, &oflow); + if (oflow) + { + BTScanOpaque so = (BTScanOpaque) scan->opaque; + + so->qual_ok = false; + return; + } + + /* Look up >= operator (might fail) */ + geop = get_opfamily_member(opfamily, opcintype, opcintype, + BTGreaterEqualStrategyNumber); + if (!OidIsValid(geop)) + return; + cmp_proc = get_opcode(geop); + if (RegProcedureIsValid(cmp_proc)) + { + /* Transform > low_compare key into >= key */ + fmgr_info(cmp_proc, &low_compare->sk_func); + low_compare->sk_argument = new_sk_argument; + low_compare->sk_strategy = BTGreaterEqualStrategyNumber; + } +} + +/* + * _bt_unmark_keys() -- make superfluous required keys nonrequired after all + * + * When _bt_preprocess_keys fails to eliminate one or more redundant keys, it + * calls here to make sure that no index attribute has more than one > or >= + * key marked required, and no more than one required < or <= key. Attributes + * with = keys will always get one = key as their required key. All other + * keys that were initially marked required get "unmarked" here. That way, + * _bt_first and _bt_checkkeys will reliably agree on which keys to use to + * start and/or to end the scan. + * + * We also relocate keys that become/started out nonrequired to the end of + * so->keyData[]. That way, _bt_first and _bt_checkkeys cannot fail to reach + * a required key due to some earlier nonrequired key getting in the way. + * + * Only call here when _bt_compare_scankey_args returned false at least once + * (otherwise, calling here will just waste cycles). + */ +static void +_bt_unmark_keys(IndexScanDesc scan, int *keyDataMap) +{ + BTScanOpaque so = (BTScanOpaque) scan->opaque; + AttrNumber attno; + bool *unmarkikey; + int nunmark, + nunmarked, + nkept, + firsti; + ScanKey keepKeys, + unmarkKeys; + FmgrInfo *keepOrderProcs = NULL, + *unmarkOrderProcs = NULL; + bool haveReqEquals, + haveReqForward, + haveReqBackward; + + /* + * Do an initial pass over so->keyData[] that determines which keys to + * keep as required. We expect so->keyData[] to still be in attribute + * order when we're called (though we don't expect any particular order + * among each attribute's keys). + * + * When both equality and inequality keys remain on a single attribute, we + * *must* make sure that exactly one of the equalities remains required. + * Any requiredness markings that we might leave on later keys/attributes + * are predicated on there being required = keys on all prior columns. + */ + unmarkikey = palloc0(so->numberOfKeys * sizeof(bool)); + nunmark = 0; + + /* Set things up for first key's attribute */ + attno = so->keyData[0].sk_attno; + firsti = 0; + haveReqEquals = false; + haveReqForward = false; + haveReqBackward = false; + for (int i = 0; i < so->numberOfKeys; i++) + { + ScanKey origkey = &so->keyData[i]; + + if (origkey->sk_attno != attno) + { + /* Reset for next attribute */ + attno = origkey->sk_attno; + firsti = i; + + haveReqEquals = false; + haveReqForward = false; + haveReqBackward = false; + } + + /* Equalities get priority over inequalities */ + if (haveReqEquals) + { + /* + * We already found the first "=" key for this attribute. We've + * already decided that all its other keys will be unmarked. + */ + Assert(!(origkey->sk_flags & SK_SEARCHNULL)); + unmarkikey[i] = true; + nunmark++; + continue; + } + else if ((origkey->sk_flags & SK_BT_REQFWD) && + (origkey->sk_flags & SK_BT_REQBKWD)) + { + /* + * Found the first "=" key for attno. All other attno keys will + * be unmarked. + */ + Assert(origkey->sk_strategy == BTEqualStrategyNumber); + + haveReqEquals = true; + for (int j = firsti; j < i; j++) + { + /* Unmark any prior inequality keys on attno after all */ + if (!unmarkikey[j]) + { + unmarkikey[j] = true; + nunmark++; + } + } + continue; + } + + /* Deal with inequalities next */ + if ((origkey->sk_flags & SK_BT_REQFWD) && !haveReqForward) + { + haveReqForward = true; + continue; + } + else if ((origkey->sk_flags & SK_BT_REQBKWD) && !haveReqBackward) + { + haveReqBackward = true; + continue; + } + + /* + * We have either a redundant inequality key that will be unmarked, or + * we have a key that wasn't marked required in the first place + */ + unmarkikey[i] = true; + nunmark++; + } + + /* Should only be called when _bt_compare_scankey_args reported failure */ + Assert(nunmark > 0); + + /* + * Next, allocate temp arrays: one for required keys that'll remain + * required, the other for all remaining keys + */ + unmarkKeys = palloc(nunmark * sizeof(ScanKeyData)); + keepKeys = palloc((so->numberOfKeys - nunmark) * sizeof(ScanKeyData)); + nunmarked = 0; + nkept = 0; + if (so->numArrayKeys) + { + unmarkOrderProcs = palloc(nunmark * sizeof(FmgrInfo)); + keepOrderProcs = palloc((so->numberOfKeys - nunmark) * sizeof(FmgrInfo)); + } + + /* + * Next, copy the contents of so->keyData[] into the appropriate temp + * array. + * + * Scans with = array keys need us to maintain invariants around the order + * of so->orderProcs[] and so->arrayKeys[] relative to so->keyData[]. See + * _bt_preprocess_array_keys_final for a full explanation. + */ + for (int i = 0; i < so->numberOfKeys; i++) + { + ScanKey origkey = &so->keyData[i]; + ScanKey unmark; + + if (!unmarkikey[i]) + { + /* + * Key gets to keep its original requiredness markings. + * + * Key will stay in its original position, unless we're going to + * unmark an earlier key (in which case this key gets moved back). + */ + memcpy(keepKeys + nkept, origkey, sizeof(ScanKeyData)); + + if (so->numArrayKeys) + { + keyDataMap[i] = nkept; + memcpy(keepOrderProcs + nkept, &so->orderProcs[i], + sizeof(FmgrInfo)); + } + + nkept++; + continue; + } + + /* + * Key will be unmarked as needed, and moved to the end of the array, + * next to other keys that will become (or always were) nonrequired + */ + unmark = unmarkKeys + nunmarked; + memcpy(unmark, origkey, sizeof(ScanKeyData)); + + if (so->numArrayKeys) + { + keyDataMap[i] = (so->numberOfKeys - nunmark) + nunmarked; + memcpy(&unmarkOrderProcs[nunmarked], &so->orderProcs[i], + sizeof(FmgrInfo)); + } + + /* + * Preprocessing only generates skip arrays when it knows that they'll + * be the only required = key on the attr. We'll never unmark them. + */ + Assert(!(unmark->sk_flags & SK_BT_SKIP)); + + /* + * Also shouldn't have to unmark an IS NULL or an IS NOT NULL key. + * They aren't cross-type, so an incomplete opfamily can't matter. + */ + Assert(!(unmark->sk_flags & SK_ISNULL) || + !(unmark->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD))); + + /* Clear requiredness flags on redundant key (and on any subkeys) */ + unmark->sk_flags &= ~(SK_BT_REQFWD | SK_BT_REQBKWD); + if (unmark->sk_flags & SK_ROW_HEADER) + { + ScanKey subkey = (ScanKey) DatumGetPointer(unmark->sk_argument); + + Assert(subkey->sk_strategy == unmark->sk_strategy); + for (;;) + { + Assert(subkey->sk_flags & SK_ROW_MEMBER); + subkey->sk_flags &= ~(SK_BT_REQFWD | SK_BT_REQBKWD); + if (subkey->sk_flags & SK_ROW_END) + break; + subkey++; + } + } + + nunmarked++; + } + + /* Copy both temp arrays back into so->keyData[] to reorder */ + Assert(nkept == so->numberOfKeys - nunmark); + Assert(nunmarked == nunmark); + memcpy(so->keyData, keepKeys, sizeof(ScanKeyData) * nkept); + memcpy(so->keyData + nkept, unmarkKeys, sizeof(ScanKeyData) * nunmarked); + + /* Done with temp arrays */ + pfree(unmarkikey); + pfree(keepKeys); + pfree(unmarkKeys); + + /* + * Now copy so->orderProcs[] temp entries needed by scans with = array + * keys back (just like with the so->keyData[] temp arrays) + */ + if (so->numArrayKeys) + { + memcpy(so->orderProcs, keepOrderProcs, sizeof(FmgrInfo) * nkept); + memcpy(so->orderProcs + nkept, unmarkOrderProcs, + sizeof(FmgrInfo) * nunmarked); + + /* Also fix-up array->scan_key references */ + for (int arridx = 0; arridx < so->numArrayKeys; arridx++) + { + BTArrayKeyInfo *array = &so->arrayKeys[arridx]; + + array->scan_key = keyDataMap[array->scan_key]; + } + + /* + * Sort so->arrayKeys[] based on its new BTArrayKeyInfo.scan_key + * offsets, so that its order matches so->keyData[] order as expected + */ + qsort(so->arrayKeys, so->numArrayKeys, sizeof(BTArrayKeyInfo), + _bt_reorder_array_cmp); + + /* Done with temp arrays */ + pfree(unmarkOrderProcs); + pfree(keepOrderProcs); + } +} + +/* + * qsort comparator for reordering so->arrayKeys[] BTArrayKeyInfo entries + */ +static int +_bt_reorder_array_cmp(const void *a, const void *b) +{ + BTArrayKeyInfo *arraya = (BTArrayKeyInfo *) a; + BTArrayKeyInfo *arrayb = (BTArrayKeyInfo *) b; + + return pg_cmp_s32(arraya->scan_key, arrayb->scan_key); +} + /* * _bt_preprocess_array_keys() -- Preprocess SK_SEARCHARRAY scan keys * @@ -1137,6 +1802,12 @@ _bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey * one equality strategy array scan key per index attribute. We'll always be * able to set things up that way when complete opfamilies are used. * + * We're also responsible for generating skip arrays (and their associated + * scan keys) here. This enables skip scan. We do this for index attributes + * that initially lacked an equality condition within scan->keyData[], iff + * doing so allows a later scan key (that was passed to us in scan->keyData[]) + * to be marked required by our _bt_preprocess_keys caller. + * * We set the scan key references from the scan's BTArrayKeyInfo info array to * offsets into the temp modified input array returned to caller. Scans that * have array keys should call _bt_preprocess_array_keys_final when standard @@ -1144,49 +1815,45 @@ _bt_compare_array_scankey_args(IndexScanDesc scan, ScanKey arraysk, ScanKey skey * references into references to the scan's so->keyData[] output scan keys. * * Note: the reason we need to return a temp scan key array, rather than just - * scribbling on scan->keyData, is that callers are permitted to call btrescan - * without supplying a new set of scankey data. + * modifying scan->keyData[], is that callers are permitted to call btrescan + * without supplying a new set of scankey data. Certain other preprocessing + * routines (e.g., _bt_fix_scankey_strategy) _can_ modify scan->keyData[], but + * we can't make that work here because our modifications are non-idempotent. */ static ScanKey _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) { BTScanOpaque so = (BTScanOpaque) scan->opaque; Relation rel = scan->indexRelation; - int numberOfKeys = scan->numberOfKeys; int16 *indoption = rel->rd_indoption; + Oid skip_eq_ops[INDEX_MAX_KEYS]; int numArrayKeys, - output_ikey = 0; + numSkipArrayKeys, + numArrayKeyData; + AttrNumber attno_skip = 1; int origarrayatt = InvalidAttrNumber, origarraykey = -1; Oid origelemtype = InvalidOid; - ScanKey cur; MemoryContext oldContext; ScanKey arrayKeyData; /* modified copy of scan->keyData */ - Assert(numberOfKeys); - - /* Quick check to see if there are any array keys */ - numArrayKeys = 0; - for (int i = 0; i < numberOfKeys; i++) - { - cur = &scan->keyData[i]; - if (cur->sk_flags & SK_SEARCHARRAY) - { - numArrayKeys++; - Assert(!(cur->sk_flags & (SK_ROW_HEADER | SK_SEARCHNULL | SK_SEARCHNOTNULL))); - /* If any arrays are null as a whole, we can quit right now. */ - if (cur->sk_flags & SK_ISNULL) - { - so->qual_ok = false; - return NULL; - } - } - } + /* + * Check the number of input array keys within scan->keyData[] input keys + * (also checks if we should add extra skip arrays based on input keys) + */ + numArrayKeys = _bt_num_array_keys(scan, skip_eq_ops, &numSkipArrayKeys); /* Quit if nothing to do. */ if (numArrayKeys == 0) return NULL; + /* + * Estimated final size of arrayKeyData[] array we'll return to our caller + * is the size of the original scan->keyData[] input array, plus space for + * any additional skip array scan keys we'll need to generate below + */ + numArrayKeyData = scan->numberOfKeys + numSkipArrayKeys; + /* * Make a scan-lifespan context to hold array-associated data, or reset it * if we already have one from a previous rescan cycle. @@ -1201,18 +1868,21 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) oldContext = MemoryContextSwitchTo(so->arrayContext); /* Create output scan keys in the workspace context */ - arrayKeyData = (ScanKey) palloc(numberOfKeys * sizeof(ScanKeyData)); + arrayKeyData = (ScanKey) palloc(numArrayKeyData * sizeof(ScanKeyData)); /* Allocate space for per-array data in the workspace context */ + so->skipScan = (numSkipArrayKeys > 0); so->arrayKeys = (BTArrayKeyInfo *) palloc(numArrayKeys * sizeof(BTArrayKeyInfo)); /* Allocate space for ORDER procs used to help _bt_checkkeys */ - so->orderProcs = (FmgrInfo *) palloc(numberOfKeys * sizeof(FmgrInfo)); + so->orderProcs = (FmgrInfo *) palloc(numArrayKeyData * sizeof(FmgrInfo)); - /* Now process each array key */ numArrayKeys = 0; - for (int input_ikey = 0; input_ikey < numberOfKeys; input_ikey++) + numArrayKeyData = 0; + for (int input_ikey = 0; input_ikey < scan->numberOfKeys; input_ikey++) { + ScanKey inkey = scan->keyData + input_ikey, + cur; FmgrInfo sortproc; FmgrInfo *sortprocp = &sortproc; Oid elemtype; @@ -1225,21 +1895,113 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) Datum *elem_values; bool *elem_nulls; int num_nonnulls; - int j; + + /* set up next output scan key */ + cur = &arrayKeyData[numArrayKeyData]; + + /* Backfill skip arrays for attrs < or <= input key's attr? */ + while (numSkipArrayKeys && attno_skip <= inkey->sk_attno) + { + Oid opfamily = rel->rd_opfamily[attno_skip - 1]; + Oid opcintype = rel->rd_opcintype[attno_skip - 1]; + Oid collation = rel->rd_indcollation[attno_skip - 1]; + Oid eq_op = skip_eq_ops[attno_skip - 1]; + CompactAttribute *attr; + RegProcedure cmp_proc; + + if (!OidIsValid(eq_op)) + { + /* + * Attribute already has an = input key, so don't output a + * skip array for attno_skip. Just copy attribute's = input + * key into arrayKeyData[] once outside this inner loop. + * + * Note: When we get here there must be a later attribute that + * lacks an equality input key, and still needs a skip array + * (if there wasn't then numSkipArrayKeys would be 0 by now). + */ + Assert(attno_skip == inkey->sk_attno); + /* inkey can't be last input key to be marked required: */ + Assert(input_ikey < scan->numberOfKeys - 1); +#if 0 + /* Could be a redundant input scan key, so can't do this: */ + Assert(inkey->sk_strategy == BTEqualStrategyNumber || + (inkey->sk_flags & SK_SEARCHNULL)); +#endif + + attno_skip++; + break; + } + + cmp_proc = get_opcode(eq_op); + if (!RegProcedureIsValid(cmp_proc)) + elog(ERROR, "missing oprcode for skipping equals operator %u", eq_op); + + ScanKeyEntryInitialize(cur, + SK_SEARCHARRAY | SK_BT_SKIP, /* flags */ + attno_skip, /* skipped att number */ + BTEqualStrategyNumber, /* equality strategy */ + InvalidOid, /* opclass input subtype */ + collation, /* index column's collation */ + cmp_proc, /* equality operator's proc */ + (Datum) 0); /* constant */ + + /* Initialize generic BTArrayKeyInfo fields */ + so->arrayKeys[numArrayKeys].scan_key = numArrayKeyData; + so->arrayKeys[numArrayKeys].num_elems = -1; + + /* Initialize skip array specific BTArrayKeyInfo fields */ + attr = TupleDescCompactAttr(RelationGetDescr(rel), attno_skip - 1); + reverse = (indoption[attno_skip - 1] & INDOPTION_DESC) != 0; + so->arrayKeys[numArrayKeys].attlen = attr->attlen; + so->arrayKeys[numArrayKeys].attbyval = attr->attbyval; + so->arrayKeys[numArrayKeys].null_elem = true; /* for now */ + so->arrayKeys[numArrayKeys].sksup = + PrepareSkipSupportFromOpclass(opfamily, opcintype, reverse); + so->arrayKeys[numArrayKeys].low_compare = NULL; /* for now */ + so->arrayKeys[numArrayKeys].high_compare = NULL; /* for now */ + + /* + * We'll need a 3-way ORDER proc. Set that up now. + */ + _bt_setup_array_cmp(scan, cur, opcintype, + &so->orderProcs[numArrayKeyData], NULL); + + numArrayKeys++; + numArrayKeyData++; /* keep this scan key/array */ + + /* set up next output scan key */ + cur = &arrayKeyData[numArrayKeyData]; + + /* remember having output this skip array and scan key */ + numSkipArrayKeys--; + attno_skip++; + } /* * Provisionally copy scan key into arrayKeyData[] array we'll return * to _bt_preprocess_keys caller */ - cur = &arrayKeyData[output_ikey]; - *cur = scan->keyData[input_ikey]; + *cur = *inkey; if (!(cur->sk_flags & SK_SEARCHARRAY)) { - output_ikey++; /* keep this non-array scan key */ + numArrayKeyData++; /* keep this non-array scan key */ continue; } + /* + * Process SAOP array scan key + */ + Assert(!(cur->sk_flags & (SK_ROW_HEADER | SK_SEARCHNULL | SK_SEARCHNOTNULL))); + + /* If array is null as a whole, the scan qual is unsatisfiable */ + if (cur->sk_flags & SK_ISNULL) + { + so->qual_ok = false; + break; + } + /* * Deconstruct the array into elements */ @@ -1257,7 +2019,7 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) * all btree operators are strict. */ num_nonnulls = 0; - for (j = 0; j < num_elems; j++) + for (int j = 0; j < num_elems; j++) { if (!elem_nulls[j]) elem_values[num_nonnulls++] = elem_values[j]; @@ -1295,7 +2057,7 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) _bt_find_extreme_element(scan, cur, elemtype, BTGreaterStrategyNumber, elem_values, num_nonnulls); - output_ikey++; /* keep this transformed scan key */ + numArrayKeyData++; /* keep this transformed scan key */ continue; case BTEqualStrategyNumber: /* proceed with rest of loop */ @@ -1306,7 +2068,7 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) _bt_find_extreme_element(scan, cur, elemtype, BTLessStrategyNumber, elem_values, num_nonnulls); - output_ikey++; /* keep this transformed scan key */ + numArrayKeyData++; /* keep this transformed scan key */ continue; default: elog(ERROR, "unrecognized StrategyNumber: %d", @@ -1323,7 +2085,7 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) * sortproc just points to the same proc used during binary searches. */ _bt_setup_array_cmp(scan, cur, elemtype, - &so->orderProcs[output_ikey], &sortprocp); + &so->orderProcs[numArrayKeyData], &sortprocp); /* * Sort the non-null elements and eliminate any duplicates. We must @@ -1392,23 +2154,24 @@ _bt_preprocess_array_keys(IndexScanDesc scan, int *new_numberOfKeys) origelemtype = elemtype; } - /* - * And set up the BTArrayKeyInfo data. - * - * Note: _bt_preprocess_array_keys_final will fix-up each array's - * scan_key field later on, after so->keyData[] has been finalized. - */ - so->arrayKeys[numArrayKeys].scan_key = output_ikey; + /* Initialize generic BTArrayKeyInfo fields */ + so->arrayKeys[numArrayKeys].scan_key = numArrayKeyData; so->arrayKeys[numArrayKeys].num_elems = num_elems; + + /* Initialize SAOP array specific BTArrayKeyInfo fields */ so->arrayKeys[numArrayKeys].elem_values = elem_values; + so->arrayKeys[numArrayKeys].cur_elem = -1; /* i.e. invalid */ + numArrayKeys++; - output_ikey++; /* keep this scan key/array */ + numArrayKeyData++; /* keep this scan key/array */ } + Assert(numSkipArrayKeys == 0 || !so->qual_ok); + /* Set final number of equality-type array keys */ so->numArrayKeys = numArrayKeys; - /* Set number of scan keys remaining in arrayKeyData[] */ - *new_numberOfKeys = output_ikey; + /* Set number of scan keys in arrayKeyData[] */ + *new_numberOfKeys = numArrayKeyData; MemoryContextSwitchTo(oldContext); @@ -1514,7 +2277,14 @@ _bt_preprocess_array_keys_final(IndexScanDesc scan, int *keyDataMap) { BTArrayKeyInfo *array = &so->arrayKeys[arrayidx]; - Assert(array->num_elems > 0); + /* + * All skip arrays must be marked required, and final column can + * never have a skip array + */ + Assert(array->num_elems > 0 || array->num_elems == -1); + Assert(array->num_elems != -1 || outkey->sk_flags & SK_BT_REQFWD); + Assert(array->num_elems != -1 || + outkey->sk_attno < IndexRelationGetNumberOfKeyAttributes(rel)); if (array->scan_key == input_ikey) { @@ -1550,6 +2320,15 @@ _bt_preprocess_array_keys_final(IndexScanDesc scan, int *keyDataMap) } else { + /* + * Any skip array low_compare and high_compare scan keys + * are now final. Transform the array's > low_compare key + * into a >= key (and < high_compare keys into a <= key). + */ + if (array->num_elems == -1 && array->sksup && + !array->null_elem) + _bt_skiparray_strat_adjust(scan, outkey, array); + /* Match found, so done with this array */ arrayidx++; } @@ -1575,6 +2354,199 @@ _bt_preprocess_array_keys_final(IndexScanDesc scan, int *keyDataMap) so->numArrayKeys, INDEX_MAX_KEYS))); } +/* + * _bt_num_array_keys() -- determine # of BTArrayKeyInfo entries + * + * _bt_preprocess_array_keys helper function. Returns the estimated size of + * the scan's BTArrayKeyInfo array, which is guaranteed to be large enough to + * fit every so->arrayKeys[] entry. + * + * Also sets *numSkipArrayKeys_out to the number of skip arrays caller must + * add to the scan keys it'll output. Caller must add this many skip arrays: + * one array for each of the most significant attributes that lack a = input + * key (IS NULL keys count as = input keys here). The specific attributes + * that need skip arrays are indicated by initializing skip_eq_ops_out[] arg + * 0-based attribute offset to a valid = op strategy Oid. We'll only ever set + * skip_eq_ops_out[] entries to InvalidOid for attributes that already have an + * equality key in scan->keyData[] input keys -- and only when there's some + * later "attribute gap" for us to "fill-in" with a skip array. + * + * We're optimistic about skipping working out: we always add exactly the skip + * arrays needed to maximize the number of input scan keys that can ultimately + * be marked as required to continue the scan (but no more). Given a + * multi-column index on (a, b, c, d), we add skip arrays as follows: + * + * Input keys Output keys (after all preprocessing) + * ---------- ------------------------------------- + * a = 1 a = 1 (no skip arrays) + * b = 42 skip a AND b = 42 + * a = 1 AND b = 42 a = 1 AND b = 42 (no skip arrays) + * a >= 1 AND b = 42 range skip a AND b = 42 + * a = 1 AND b > 42 a = 1 AND b > 42 (no skip arrays) + * a >= 1 AND a <= 3 AND b = 42 range skip a AND b = 42 + * a = 1 AND c <= 27 a = 1 AND skip b AND c <= 27 + * a = 1 AND d >= 1 a = 1 AND skip b AND skip c AND d >= 1 + * a = 1 AND b >= 42 AND d > 1 a = 1 AND range skip b AND skip c AND d > 1 + */ +static int +_bt_num_array_keys(IndexScanDesc scan, Oid *skip_eq_ops_out, + int *numSkipArrayKeys_out) +{ + Relation rel = scan->indexRelation; + AttrNumber attno_skip = 1, + attno_inkey = 1; + bool attno_has_equal = false, + attno_has_rowcompare = false; + int numSAOPArrayKeys, + numSkipArrayKeys, + prev_numSkipArrayKeys; + + Assert(scan->numberOfKeys); + + /* Initial pass over input scan keys counts the number of SAOP arrays */ + numSAOPArrayKeys = 0; + *numSkipArrayKeys_out = prev_numSkipArrayKeys = numSkipArrayKeys = 0; + for (int i = 0; i < scan->numberOfKeys; i++) + { + ScanKey inkey = scan->keyData + i; + + if (inkey->sk_flags & SK_SEARCHARRAY) + numSAOPArrayKeys++; + } + +#ifdef DEBUG_DISABLE_SKIP_SCAN + /* don't attempt to add skip arrays */ + return numSAOPArrayKeys; +#endif + + for (int i = 0;; i++) + { + ScanKey inkey = scan->keyData + i; + + /* + * Backfill skip arrays for any wholly omitted attributes prior to + * attno_inkey + */ + while (attno_skip < attno_inkey) + { + Oid opfamily = rel->rd_opfamily[attno_skip - 1]; + Oid opcintype = rel->rd_opcintype[attno_skip - 1]; + + /* Look up input opclass's equality operator (might fail) */ + skip_eq_ops_out[attno_skip - 1] = + get_opfamily_member(opfamily, opcintype, opcintype, + BTEqualStrategyNumber); + if (!OidIsValid(skip_eq_ops_out[attno_skip - 1])) + { + /* + * Cannot generate a skip array for this or later attributes + * (input opclass lacks an equality strategy operator) + */ + *numSkipArrayKeys_out = prev_numSkipArrayKeys; + return numSAOPArrayKeys + prev_numSkipArrayKeys; + } + + /* plan on adding a backfill skip array for this attribute */ + numSkipArrayKeys++; + attno_skip++; + } + + prev_numSkipArrayKeys = numSkipArrayKeys; + + /* + * Stop once past the final input scan key. We deliberately never add + * a skip array for the last input scan key's attribute -- even when + * there are only inequality keys on that attribute. + */ + if (i == scan->numberOfKeys) + break; + + /* + * Later preprocessing steps cannot merge a RowCompare into a skip + * array, so stop adding skip arrays once we see one. (Note that we + * can backfill skip arrays before a RowCompare, which will allow keys + * up to and including the RowCompare to be marked required.) + * + * Skip arrays work by maintaining a current array element value, + * which anchors lower-order keys via an implied equality constraint. + * This is incompatible with the current nbtree row comparison design, + * which compares all columns together, as an indivisible group. + * Alternative designs that can be used alongside skip arrays are + * possible, but it's not clear that they're really worth pursuing. + * + * A RowCompare qual "(a, b, c) > (10, 'foo', 42)" is equivalent to + * "(a=10 AND b='foo' AND c>42) OR (a=10 AND b>'foo') OR (a>10)". + * Decomposing this RowCompare into these 3 disjuncts allows each + * disjunct to be executed as a separate "single value" index scan. + * That'll give all 3 scans the ability to add skip arrays in the + * usual way (when there are any scalar keys after the RowCompare). + * Under this scheme, a qual "(a, b, c) > (10, 'foo', 42) AND d = 99" + * performs 3 separate scans, each of which can mark keys up to and + * including its "d = 99" key as required to continue the scan. + */ + if (attno_has_rowcompare) + break; + + /* + * Now consider next attno_inkey (or keep going if this is an + * additional scan key against the same attribute) + */ + if (attno_inkey < inkey->sk_attno) + { + /* + * Now add skip array for previous scan key's attribute, though + * only if the attribute has no equality strategy scan keys + */ + if (attno_has_equal) + { + /* Attributes with an = key must have InvalidOid eq_op set */ + skip_eq_ops_out[attno_skip - 1] = InvalidOid; + } + else + { + Oid opfamily = rel->rd_opfamily[attno_skip - 1]; + Oid opcintype = rel->rd_opcintype[attno_skip - 1]; + + /* Look up input opclass's equality operator (might fail) */ + skip_eq_ops_out[attno_skip - 1] = + get_opfamily_member(opfamily, opcintype, opcintype, + BTEqualStrategyNumber); + + if (!OidIsValid(skip_eq_ops_out[attno_skip - 1])) + { + /* + * Input opclass lacks an equality strategy operator, so + * don't generate a skip array that definitely won't work + */ + break; + } + + /* plan on adding a backfill skip array for this attribute */ + numSkipArrayKeys++; + } + + /* Set things up for this new attribute */ + attno_skip++; + attno_inkey = inkey->sk_attno; + attno_has_equal = false; + } + + /* + * Track if this attribute's scan keys include any equality strategy + * scan keys (IS NULL keys count as equality keys here). Also track + * if it has any RowCompare keys. + */ + if (inkey->sk_strategy == BTEqualStrategyNumber || + (inkey->sk_flags & SK_SEARCHNULL)) + attno_has_equal = true; + if (inkey->sk_flags & SK_ROW_HEADER) + attno_has_rowcompare = true; + } + + *numSkipArrayKeys_out = numSkipArrayKeys; + return numSAOPArrayKeys + numSkipArrayKeys; +} + /* * _bt_find_extreme_element() -- get least or greatest array element * diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 4a0bf069f9954..fdff960c13022 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -31,6 +31,7 @@ #include "storage/ipc.h" #include "storage/lmgr.h" #include "storage/read_stream.h" +#include "utils/datum.h" #include "utils/fmgrprotos.h" #include "utils/index_selfuncs.h" #include "utils/memutils.h" @@ -76,14 +77,26 @@ typedef struct BTParallelScanDescData /* * btps_arrElems is used when scans need to schedule another primitive - * index scan. Holds BTArrayKeyInfo.cur_elem offsets for scan keys. + * index scan with one or more SAOP arrays. Holds BTArrayKeyInfo.cur_elem + * offsets for each = scan key associated with a ScalarArrayOp array. */ int btps_arrElems[FLEXIBLE_ARRAY_MEMBER]; + + /* + * Additional space (at the end of the struct) is used when scans need to + * schedule another primitive index scan with one or more skip arrays. + * Holds a flattened datum representation for each = scan key associated + * with a skip array. + */ } BTParallelScanDescData; typedef struct BTParallelScanDescData *BTParallelScanDesc; +static void _bt_parallel_serialize_arrays(Relation rel, BTParallelScanDesc btscan, + BTScanOpaque so); +static void _bt_parallel_restore_arrays(Relation rel, BTParallelScanDesc btscan, + BTScanOpaque so); static void btvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, IndexBulkDeleteCallback callback, void *callback_state, BTCycleId cycleid); @@ -215,6 +228,8 @@ btgettuple(IndexScanDesc scan, ScanDirection dir) BTScanOpaque so = (BTScanOpaque) scan->opaque; bool res; + Assert(scan->heapRelation != NULL); + /* btree indexes are never lossy */ scan->xs_recheck = false; @@ -276,6 +291,8 @@ btgetbitmap(IndexScanDesc scan, TIDBitmap *tbm) int64 ntids = 0; ItemPointer heapTid; + Assert(scan->heapRelation == NULL); + /* Each loop iteration performs another primitive index scan */ do { @@ -336,6 +353,7 @@ btbeginscan(Relation rel, int nkeys, int norderbys) else so->keyData = NULL; + so->skipScan = false; so->needPrimScan = false; so->scanBehind = false; so->oppositeDirCheck = false; @@ -379,6 +397,34 @@ btrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys, BTScanPosInvalidate(so->currPos); } + /* + * We prefer to eagerly drop leaf page pins before btgettuple returns. + * This avoids making VACUUM wait to acquire a cleanup lock on the page. + * + * We cannot safely drop leaf page pins during index-only scans due to a + * race condition involving VACUUM setting pages all-visible in the VM. + * It's also unsafe for plain index scans that use a non-MVCC snapshot. + * + * When we drop pins eagerly, the mechanism that marks so->killedItems[] + * index tuples LP_DEAD has to deal with concurrent TID recycling races. + * The scheme used to detect unsafe TID recycling won't work when scanning + * unlogged relations (since it involves saving an affected page's LSN). + * Opt out of eager pin dropping during unlogged relation scans for now + * (this is preferable to opting out of kill_prior_tuple LP_DEAD setting). + * + * Also opt out of dropping leaf page pins eagerly during bitmap scans. + * Pins cannot be held for more than an instant during bitmap scans either + * way, so we might as well avoid wasting cycles on acquiring page LSNs. + * + * See nbtree/README section on making concurrent TID recycling safe. + * + * Note: so->dropPin should never change across rescans. + */ + so->dropPin = (!scan->xs_want_itup && + IsMVCCSnapshot(scan->xs_snapshot) && + RelationNeedsWAL(scan->indexRelation) && + scan->heapRelation != NULL); + so->markItemIndex = -1; so->needPrimScan = false; so->scanBehind = false; @@ -541,10 +587,167 @@ btrestrpos(IndexScanDesc scan) * btestimateparallelscan -- estimate storage for BTParallelScanDescData */ Size -btestimateparallelscan(int nkeys, int norderbys) +btestimateparallelscan(Relation rel, int nkeys, int norderbys) { - /* Pessimistically assume all input scankeys will be output with arrays */ - return offsetof(BTParallelScanDescData, btps_arrElems) + sizeof(int) * nkeys; + int16 nkeyatts = IndexRelationGetNumberOfKeyAttributes(rel); + Size estnbtreeshared, + genericattrspace; + + /* + * Pessimistically assume that every input scan key will be output with + * its own SAOP array + */ + estnbtreeshared = offsetof(BTParallelScanDescData, btps_arrElems) + + sizeof(int) * nkeys; + + /* Single column indexes cannot possibly use a skip array */ + if (nkeyatts == 1) + return estnbtreeshared; + + /* + * Pessimistically assume that all attributes prior to the least + * significant attribute require a skip array (and an associated key) + */ + genericattrspace = datumEstimateSpace((Datum) 0, false, true, + sizeof(Datum)); + for (int attnum = 1; attnum < nkeyatts; attnum++) + { + CompactAttribute *attr; + + /* + * We make the conservative assumption that every index column will + * also require a skip array. + * + * Every skip array must have space to store its scan key's sk_flags. + */ + estnbtreeshared = add_size(estnbtreeshared, sizeof(int)); + + /* Consider space required to store a datum of opclass input type */ + attr = TupleDescCompactAttr(rel->rd_att, attnum - 1); + if (attr->attbyval) + { + /* This index attribute stores pass-by-value datums */ + Size estfixed = datumEstimateSpace((Datum) 0, false, + true, attr->attlen); + + estnbtreeshared = add_size(estnbtreeshared, estfixed); + continue; + } + + /* + * This index attribute stores pass-by-reference datums. + * + * Assume that serializing this array will use just as much space as a + * pass-by-value datum, in addition to space for the largest possible + * whole index tuple (this is not just a per-datum portion of the + * largest possible tuple because that'd be almost as large anyway). + * + * This is quite conservative, but it's not clear how we could do much + * better. The executor requires an up-front storage request size + * that reliably covers the scan's high watermark memory usage. We + * can't be sure of the real high watermark until the scan is over. + */ + estnbtreeshared = add_size(estnbtreeshared, genericattrspace); + estnbtreeshared = add_size(estnbtreeshared, BTMaxItemSize); + } + + return estnbtreeshared; +} + +/* + * _bt_parallel_serialize_arrays() -- Serialize parallel array state. + * + * Caller must have exclusively locked btscan->btps_lock when called. + */ +static void +_bt_parallel_serialize_arrays(Relation rel, BTParallelScanDesc btscan, + BTScanOpaque so) +{ + char *datumshared; + + /* Space for serialized datums begins immediately after btps_arrElems[] */ + datumshared = ((char *) &btscan->btps_arrElems[so->numArrayKeys]); + for (int i = 0; i < so->numArrayKeys; i++) + { + BTArrayKeyInfo *array = &so->arrayKeys[i]; + ScanKey skey = &so->keyData[array->scan_key]; + + if (array->num_elems != -1) + { + /* Save SAOP array's cur_elem (no need to copy key/datum) */ + Assert(!(skey->sk_flags & SK_BT_SKIP)); + btscan->btps_arrElems[i] = array->cur_elem; + continue; + } + + /* Save all mutable state associated with skip array's key */ + Assert(skey->sk_flags & SK_BT_SKIP); + memcpy(datumshared, &skey->sk_flags, sizeof(int)); + datumshared += sizeof(int); + + if (skey->sk_flags & (SK_BT_MINVAL | SK_BT_MAXVAL)) + { + /* No sk_argument datum to serialize */ + Assert(skey->sk_argument == 0); + continue; + } + + datumSerialize(skey->sk_argument, (skey->sk_flags & SK_ISNULL) != 0, + array->attbyval, array->attlen, &datumshared); + } +} + +/* + * _bt_parallel_restore_arrays() -- Restore serialized parallel array state. + * + * Caller must have exclusively locked btscan->btps_lock when called. + */ +static void +_bt_parallel_restore_arrays(Relation rel, BTParallelScanDesc btscan, + BTScanOpaque so) +{ + char *datumshared; + + /* Space for serialized datums begins immediately after btps_arrElems[] */ + datumshared = ((char *) &btscan->btps_arrElems[so->numArrayKeys]); + for (int i = 0; i < so->numArrayKeys; i++) + { + BTArrayKeyInfo *array = &so->arrayKeys[i]; + ScanKey skey = &so->keyData[array->scan_key]; + bool isnull; + + if (array->num_elems != -1) + { + /* Restore SAOP array using its saved cur_elem */ + Assert(!(skey->sk_flags & SK_BT_SKIP)); + array->cur_elem = btscan->btps_arrElems[i]; + skey->sk_argument = array->elem_values[array->cur_elem]; + continue; + } + + /* Restore skip array by restoring its key directly */ + if (!array->attbyval && skey->sk_argument) + pfree(DatumGetPointer(skey->sk_argument)); + skey->sk_argument = (Datum) 0; + memcpy(&skey->sk_flags, datumshared, sizeof(int)); + datumshared += sizeof(int); + + Assert(skey->sk_flags & SK_BT_SKIP); + + if (skey->sk_flags & (SK_BT_MINVAL | SK_BT_MAXVAL)) + { + /* No sk_argument datum to restore */ + continue; + } + + skey->sk_argument = datumRestore(&datumshared, &isnull); + if (isnull) + { + Assert(skey->sk_argument == 0); + Assert(skey->sk_flags & SK_SEARCHNULL); + Assert(skey->sk_flags & SK_ISNULL); + } + } } /* @@ -613,6 +816,7 @@ bool _bt_parallel_seize(IndexScanDesc scan, BlockNumber *next_scan_page, BlockNumber *last_curr_page, bool first) { + Relation rel = scan->indexRelation; BTScanOpaque so = (BTScanOpaque) scan->opaque; bool exit_loop = false, status = true, @@ -679,14 +883,9 @@ _bt_parallel_seize(IndexScanDesc scan, BlockNumber *next_scan_page, { /* Can start scheduled primitive scan right away, so do so */ btscan->btps_pageStatus = BTPARALLEL_ADVANCING; - for (int i = 0; i < so->numArrayKeys; i++) - { - BTArrayKeyInfo *array = &so->arrayKeys[i]; - ScanKey skey = &so->keyData[array->scan_key]; - array->cur_elem = btscan->btps_arrElems[i]; - skey->sk_argument = array->elem_values[array->cur_elem]; - } + /* Restore scan's array keys from serialized values */ + _bt_parallel_restore_arrays(rel, btscan, so); exit_loop = true; } else @@ -831,6 +1030,7 @@ _bt_parallel_done(IndexScanDesc scan) void _bt_parallel_primscan_schedule(IndexScanDesc scan, BlockNumber curr_page) { + Relation rel = scan->indexRelation; BTScanOpaque so = (BTScanOpaque) scan->opaque; ParallelIndexScanDesc parallel_scan = scan->parallel_scan; BTParallelScanDesc btscan; @@ -849,12 +1049,7 @@ _bt_parallel_primscan_schedule(IndexScanDesc scan, BlockNumber curr_page) btscan->btps_pageStatus = BTPARALLEL_NEED_PRIMSCAN; /* Serialize scan's current array keys */ - for (int i = 0; i < so->numArrayKeys; i++) - { - BTArrayKeyInfo *array = &so->arrayKeys[i]; - - btscan->btps_arrElems[i] = array->cur_elem; - } + _bt_parallel_serialize_arrays(rel, btscan, so); } LWLockRelease(&btscan->btps_lock); } @@ -1069,7 +1264,8 @@ btvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, * It is safe to use batchmode as block_range_read_stream_cb takes no * locks. */ - stream = read_stream_begin_relation(READ_STREAM_FULL | + stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE | + READ_STREAM_FULL | READ_STREAM_USE_BATCHING, info->strategy, rel, @@ -1117,8 +1313,6 @@ btvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, current_block); } - Assert(read_stream_next_buffer(stream, NULL) == InvalidBuffer); - /* * We have to reset the read stream to use it again. After returning * InvalidBuffer, the read stream API won't invoke our callback again diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 3d46fb5df782a..d69798795b43b 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -25,7 +25,7 @@ #include "utils/rel.h" -static void _bt_drop_lock_and_maybe_pin(IndexScanDesc scan, BTScanPos sp); +static inline void _bt_drop_lock_and_maybe_pin(Relation rel, BTScanOpaque so); static Buffer _bt_moveright(Relation rel, Relation heaprel, BTScanInsert key, Buffer buf, bool forupdate, BTStack stack, int access); @@ -57,24 +57,29 @@ static bool _bt_endpoint(IndexScanDesc scan, ScanDirection dir); /* * _bt_drop_lock_and_maybe_pin() * - * Unlock the buffer; and if it is safe to release the pin, do that, too. - * This will prevent vacuum from stalling in a blocked state trying to read a - * page when a cursor is sitting on it. - * - * See nbtree/README section on making concurrent TID recycling safe. + * Unlock so->currPos.buf. If scan is so->dropPin, drop the pin, too. + * Dropping the pin prevents VACUUM from blocking on acquiring a cleanup lock. */ -static void -_bt_drop_lock_and_maybe_pin(IndexScanDesc scan, BTScanPos sp) +static inline void +_bt_drop_lock_and_maybe_pin(Relation rel, BTScanOpaque so) { - _bt_unlockbuf(scan->indexRelation, sp->buf); - - if (IsMVCCSnapshot(scan->xs_snapshot) && - RelationNeedsWAL(scan->indexRelation) && - !scan->xs_want_itup) + if (!so->dropPin) { - ReleaseBuffer(sp->buf); - sp->buf = InvalidBuffer; + /* Just drop the lock (not the pin) */ + _bt_unlockbuf(rel, so->currPos.buf); + return; } + + /* + * Drop both the lock and the pin. + * + * Have to set so->currPos.lsn so that _bt_killitems has a way to detect + * when concurrent heap TID recycling by VACUUM might have taken place. + */ + Assert(RelationNeedsWAL(rel)); + so->currPos.lsn = BufferGetLSNAtomic(so->currPos.buf); + _bt_relbuf(rel, so->currPos.buf); + so->currPos.buf = InvalidBuffer; } /* @@ -866,8 +871,8 @@ _bt_compare(Relation rel, * if backwards scan, the last item) in the tree that satisfies the * qualifications in the scan key. On success exit, data about the * matching tuple(s) on the page has been loaded into so->currPos. We'll - * drop all locks and hold onto a pin on page's buffer, except when - * _bt_drop_lock_and_maybe_pin dropped the pin to avoid blocking VACUUM. + * drop all locks and hold onto a pin on page's buffer, except during + * so->dropPin scans, when we drop both the lock and the pin. * _bt_returnitem sets the next item to return to scan on success exit. * * If there are no matching items in the index, we return false, with no @@ -887,9 +892,9 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) OffsetNumber offnum; BTScanInsertData inskey; ScanKey startKeys[INDEX_MAX_KEYS]; - ScanKeyData notnullkeys[INDEX_MAX_KEYS]; + ScanKeyData notnullkey; int keysz = 0; - StrategyNumber strat_total; + StrategyNumber strat_total = InvalidStrategy; BlockNumber blkno = InvalidBlockNumber, lastcurrblkno; @@ -955,35 +960,54 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) /*---------- * Examine the scan keys to discover where we need to start the scan. + * The selected scan keys (at most one per index column) are remembered by + * storing their addresses into the local startKeys[] array. The final + * startKeys[] entry's strategy is set in strat_total. (Actually, there + * are a couple of cases where we force a less/more restrictive strategy.) * - * We want to identify the keys that can be used as starting boundaries; - * these are =, >, or >= keys for a forward scan or =, <, <= keys for - * a backwards scan. We can use keys for multiple attributes so long as - * the prior attributes had only =, >= (resp. =, <=) keys. Once we accept - * a > or < boundary or find an attribute with no boundary (which can be - * thought of as the same as "> -infinity"), we can't use keys for any - * attributes to its right, because it would break our simplistic notion - * of what initial positioning strategy to use. + * We must use the key that was marked required (in the direction opposite + * our own scan's) during preprocessing. Each index attribute can only + * have one such required key. In general, the keys that we use to find + * an initial position when scanning forwards are the same keys that end + * the scan on the leaf level when scanning backwards (and vice-versa). * * When the scan keys include cross-type operators, _bt_preprocess_keys - * may not be able to eliminate redundant keys; in such cases we will - * arbitrarily pick a usable one for each attribute. This is correct - * but possibly not optimal behavior. (For example, with keys like - * "x >= 4 AND x >= 5" we would elect to scan starting at x=4 when - * x=5 would be more efficient.) Since the situation only arises given - * a poorly-worded query plus an incomplete opfamily, live with it. + * may not be able to eliminate redundant keys; in such cases it will + * arbitrarily pick a usable key for each attribute (and scan direction), + * ensuring that there is no more than one key required in each direction. + * We stop considering further keys once we reach the first nonrequired + * key (which must come after all required keys), so this can't affect us. * - * When both equality and inequality keys appear for a single attribute - * (again, only possible when cross-type operators appear), we *must* - * select one of the equality keys for the starting point, because - * _bt_checkkeys() will stop the scan as soon as an equality qual fails. - * For example, if we have keys like "x >= 4 AND x = 10" and we elect to - * start at x=4, we will fail and stop before reaching x=10. If multiple - * equality quals survive preprocessing, however, it doesn't matter which - * one we use --- by definition, they are either redundant or - * contradictory. + * The required keys that we use as starting boundaries have to be =, >, + * or >= keys for a forward scan or =, <, <= keys for a backwards scan. + * We can use keys for multiple attributes so long as the prior attributes + * had only =, >= (resp. =, <=) keys. These rules are very similar to the + * rules that preprocessing used to determine which keys to mark required. + * We cannot always use every required key as a positioning key, though. + * Skip arrays necessitate independently applying our own rules here. + * Skip arrays are always generally considered = array keys, but we'll + * nevertheless treat them as inequalities at certain points of the scan. + * When that happens, it _might_ have implications for the number of + * required keys that we can safely use for initial positioning purposes. * - * Any regular (not SK_SEARCHNULL) key implies a NOT NULL qualifier. + * For example, a forward scan with a skip array on its leading attribute + * (with no low_compare/high_compare) will have at least two required scan + * keys, but we won't use any of them as boundary keys during the scan's + * initial call here. Our positioning key during the first call here can + * be thought of as representing "> -infinity". Similarly, if such a skip + * array's low_compare is "a > 'foo'", then we position using "a > 'foo'" + * during the scan's initial call here; a lower-order key such as "b = 42" + * can't be used until the "a" array advances beyond MINVAL/low_compare. + * + * On the other hand, if such a skip array's low_compare was "a >= 'foo'", + * then we _can_ use "a >= 'foo' AND b = 42" during the initial call here. + * A subsequent call here might have us use "a = 'fop' AND b = 42". Note + * that we treat = and >= as equivalent when scanning forwards (just as we + * treat = and <= as equivalent when scanning backwards). We effectively + * do the same thing (though with a distinct "a" element/value) each time. + * + * All keys (with the exception of SK_SEARCHNULL keys and SK_BT_SKIP + * array keys whose array is "null_elem=true") imply a NOT NULL qualifier. * If the index stores nulls at the end of the index we'll be starting * from, and we have no boundary key for the column (which means the key * we deduced NOT NULL from is an inequality key that constrains the other @@ -992,41 +1016,38 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) * traversing a lot of null entries at the start of the scan. * * In this loop, row-comparison keys are treated the same as keys on their - * first (leftmost) columns. We'll add on lower-order columns of the row - * comparison below, if possible. + * first (leftmost) columns. We'll add all lower-order columns of the row + * comparison that were marked required during preprocessing below. * - * The selected scan keys (at most one per index column) are remembered by - * storing their addresses into the local startKeys[] array. - * - * _bt_checkkeys/_bt_advance_array_keys decide whether and when to start - * the next primitive index scan (for scans with array keys) based in part - * on an understanding of how it'll enable us to reposition the scan. - * They're directly aware of how we'll sometimes cons up an explicit - * SK_SEARCHNOTNULL key. They'll even end primitive scans by applying a - * symmetric "deduce NOT NULL" rule of their own. This allows top-level - * scans to skip large groups of NULLs through repeated deductions about - * key strictness (for a required inequality key) and whether NULLs in the - * key's index column are stored last or first (relative to non-NULLs). + * _bt_advance_array_keys needs to know exactly how we'll reposition the + * scan (should it opt to schedule another primitive index scan). It is + * critical that primscans only be scheduled when they'll definitely make + * some useful progress. _bt_advance_array_keys does this by calling + * _bt_checkkeys routines that report whether a tuple is past the end of + * matches for the scan's keys (given the scan's current array elements). + * If the page's final tuple is "after the end of matches" for a scan that + * uses the *opposite* scan direction, then it must follow that it's also + * "before the start of matches" for the actual current scan direction. + * It is therefore essential that all of our initial positioning rules are + * symmetric with _bt_checkkeys's corresponding continuescan=false rule. * If you update anything here, _bt_checkkeys/_bt_advance_array_keys might * need to be kept in sync. *---------- */ - strat_total = BTEqualStrategyNumber; if (so->numberOfKeys > 0) { AttrNumber curattr; - ScanKey chosen; + ScanKey bkey; ScanKey impliesNN; ScanKey cur; /* - * chosen is the so-far-chosen key for the current attribute, if any. - * We don't cast the decision in stone until we reach keys for the - * next attribute. + * bkey will be set to the key that preprocessing left behind as the + * boundary key for this attribute, in this scan direction (if any) */ cur = so->keyData; curattr = 1; - chosen = NULL; + bkey = NULL; /* Also remember any scankey that implies a NOT NULL constraint */ impliesNN = NULL; @@ -1039,25 +1060,76 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) { if (i >= so->numberOfKeys || cur->sk_attno != curattr) { + /* Done looking for the curattr boundary key */ + Assert(bkey == NULL || + (bkey->sk_attno == curattr && + (bkey->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)))); + Assert(impliesNN == NULL || + (impliesNN->sk_attno == curattr && + (impliesNN->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)))); + + /* + * If this is a scan key for a skip array whose current + * element is MINVAL, choose low_compare (when scanning + * backwards it'll be MAXVAL, and we'll choose high_compare). + * + * Note: if the array's low_compare key makes 'bkey' NULL, + * then we behave as if the array's first element is -inf, + * except when !array->null_elem implies a usable NOT NULL + * constraint. + */ + if (bkey != NULL && + (bkey->sk_flags & (SK_BT_MINVAL | SK_BT_MAXVAL))) + { + int ikey = bkey - so->keyData; + ScanKey skipequalitykey = bkey; + BTArrayKeyInfo *array = NULL; + + for (int arridx = 0; arridx < so->numArrayKeys; arridx++) + { + array = &so->arrayKeys[arridx]; + if (array->scan_key == ikey) + break; + } + + if (ScanDirectionIsForward(dir)) + { + Assert(!(skipequalitykey->sk_flags & SK_BT_MAXVAL)); + bkey = array->low_compare; + } + else + { + Assert(!(skipequalitykey->sk_flags & SK_BT_MINVAL)); + bkey = array->high_compare; + } + + Assert(bkey == NULL || + bkey->sk_attno == skipequalitykey->sk_attno); + + if (!array->null_elem) + impliesNN = skipequalitykey; + else + Assert(bkey == NULL && impliesNN == NULL); + } + /* - * Done looking at keys for curattr. If we didn't find a - * usable boundary key, see if we can deduce a NOT NULL key. + * If we didn't find a usable boundary key, see if we can + * deduce a NOT NULL key */ - if (chosen == NULL && impliesNN != NULL && + if (bkey == NULL && impliesNN != NULL && ((impliesNN->sk_flags & SK_BT_NULLS_FIRST) ? ScanDirectionIsForward(dir) : ScanDirectionIsBackward(dir))) { - /* Yes, so build the key in notnullkeys[keysz] */ - chosen = ¬nullkeys[keysz]; - ScanKeyEntryInitialize(chosen, + /* Final startKeys[] entry will be deduced NOT NULL key */ + bkey = ¬nullkey; + ScanKeyEntryInitialize(bkey, (SK_SEARCHNOTNULL | SK_ISNULL | (impliesNN->sk_flags & (SK_BT_DESC | SK_BT_NULLS_FIRST))), curattr, - ((impliesNN->sk_flags & SK_BT_NULLS_FIRST) ? - BTGreaterStrategyNumber : - BTLessStrategyNumber), + ScanDirectionIsForward(dir) ? + BTGreaterStrategyNumber : BTLessStrategyNumber, InvalidOid, InvalidOid, InvalidOid, @@ -1065,12 +1137,12 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) } /* - * If we still didn't find a usable boundary key, quit; else - * save the boundary key pointer in startKeys. + * If preprocessing didn't leave a usable boundary key, quit; + * else save the boundary key pointer in startKeys[] */ - if (chosen == NULL) + if (bkey == NULL) break; - startKeys[keysz++] = chosen; + startKeys[keysz++] = bkey; /* * We can only consider adding more boundary keys when the one @@ -1078,30 +1150,67 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) * (during backwards scans we can only do so when the key that * we just added to startKeys[] uses the = or <= strategy) */ - strat_total = chosen->sk_strategy; + strat_total = bkey->sk_strategy; if (strat_total == BTGreaterStrategyNumber || strat_total == BTLessStrategyNumber) break; /* - * Done if that was the last attribute, or if next key is not - * in sequence (implying no boundary key is available for the - * next attribute). + * If the key that we just added to startKeys[] is a skip + * array = key whose current element is marked NEXT or PRIOR, + * make strat_total > or < (and stop adding boundary keys). + * This can only happen with opclasses that lack skip support. + */ + if (bkey->sk_flags & (SK_BT_NEXT | SK_BT_PRIOR)) + { + Assert(bkey->sk_flags & SK_BT_SKIP); + Assert(strat_total == BTEqualStrategyNumber); + + if (ScanDirectionIsForward(dir)) + { + Assert(!(bkey->sk_flags & SK_BT_PRIOR)); + strat_total = BTGreaterStrategyNumber; + } + else + { + Assert(!(bkey->sk_flags & SK_BT_NEXT)); + strat_total = BTLessStrategyNumber; + } + + /* + * We're done. We'll never find an exact = match for a + * NEXT or PRIOR sentinel sk_argument value. There's no + * sense in trying to add more keys to startKeys[]. + */ + break; + } + + /* + * Done if that was the last scan key output by preprocessing. + * Also done if we've now examined all keys marked required. */ if (i >= so->numberOfKeys || - cur->sk_attno != curattr + 1) + !(cur->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD))) break; /* * Reset for next attr. */ + Assert(cur->sk_attno == curattr + 1); curattr = cur->sk_attno; - chosen = NULL; + bkey = NULL; impliesNN = NULL; } /* - * Can we use this key as a starting boundary for this attr? + * If we've located the starting boundary key for curattr, we have + * no interest in curattr's other required key + */ + if (bkey != NULL) + continue; + + /* + * Is this key the starting boundary key for curattr? * * If not, does it imply a NOT NULL constraint? (Because * SK_SEARCHNULL keys are always assigned BTEqualStrategyNumber, @@ -1111,27 +1220,20 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) { case BTLessStrategyNumber: case BTLessEqualStrategyNumber: - if (chosen == NULL) - { - if (ScanDirectionIsBackward(dir)) - chosen = cur; - else - impliesNN = cur; - } + if (ScanDirectionIsBackward(dir)) + bkey = cur; + else if (impliesNN == NULL) + impliesNN = cur; break; case BTEqualStrategyNumber: - /* override any non-equality choice */ - chosen = cur; + bkey = cur; break; case BTGreaterEqualStrategyNumber: case BTGreaterStrategyNumber: - if (chosen == NULL) - { - if (ScanDirectionIsForward(dir)) - chosen = cur; - else - impliesNN = cur; - } + if (ScanDirectionIsForward(dir)) + bkey = cur; + else if (impliesNN == NULL) + impliesNN = cur; break; } } @@ -1157,16 +1259,18 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) Assert(keysz <= INDEX_MAX_KEYS); for (int i = 0; i < keysz; i++) { - ScanKey cur = startKeys[i]; + ScanKey bkey = startKeys[i]; - Assert(cur->sk_attno == i + 1); + Assert(bkey->sk_attno == i + 1); - if (cur->sk_flags & SK_ROW_HEADER) + if (bkey->sk_flags & SK_ROW_HEADER) { /* * Row comparison header: look to the first row member instead */ - ScanKey subkey = (ScanKey) DatumGetPointer(cur->sk_argument); + ScanKey subkey = (ScanKey) DatumGetPointer(bkey->sk_argument); + bool loosen_strat = false, + tighten_strat = false; /* * Cannot be a NULL in the first row member: _bt_preprocess_keys @@ -1174,9 +1278,18 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) * ever getting this far */ Assert(subkey->sk_flags & SK_ROW_MEMBER); - Assert(subkey->sk_attno == cur->sk_attno); + Assert(subkey->sk_attno == bkey->sk_attno); Assert(!(subkey->sk_flags & SK_ISNULL)); + /* + * This is either a > or >= key (during backwards scans it is + * either < or <=) that was marked required during preprocessing. + * Later so->keyData[] keys can't have been marked required, so + * our row compare header key must be the final startKeys[] entry. + */ + Assert(subkey->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)); + Assert(i == keysz - 1); + /* * The member scankeys are already in insertion format (ie, they * have sk_func = 3-way-comparison function) @@ -1184,112 +1297,141 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) memcpy(inskey.scankeys + i, subkey, sizeof(ScanKeyData)); /* - * If the row comparison is the last positioning key we accepted, - * try to add additional keys from the lower-order row members. - * (If we accepted independent conditions on additional index - * columns, we use those instead --- doesn't seem worth trying to - * determine which is more restrictive.) Note that this is OK - * even if the row comparison is of ">" or "<" type, because the - * condition applied to all but the last row member is effectively - * ">=" or "<=", and so the extra keys don't break the positioning - * scheme. But, by the same token, if we aren't able to use all - * the row members, then the part of the row comparison that we - * did use has to be treated as just a ">=" or "<=" condition, and - * so we'd better adjust strat_total accordingly. + * Now look to later row compare members. + * + * If there's an "index attribute gap" between two row compare + * members, the second member won't have been marked required, and + * so can't be used as a starting boundary key here. The part of + * the row comparison that we do still use has to be treated as a + * ">=" or "<=" condition. For example, a qual "(a, c) > (1, 42)" + * with an omitted intervening index attribute "b" will use an + * insertion scan key "a >= 1". Even the first "a = 1" tuple on + * the leaf level might satisfy the row compare qual. + * + * We're able to use a _more_ restrictive strategy when we reach a + * NULL row compare member, since they're always unsatisfiable. + * For example, a qual "(a, b, c) >= (1, NULL, 77)" will use an + * insertion scan key "a > 1". All tuples where "a = 1" cannot + * possibly satisfy the row compare qual, so this is safe. */ - if (i == keysz - 1) + Assert(!(subkey->sk_flags & SK_ROW_END)); + for (;;) { - bool used_all_subkeys = false; + subkey++; + Assert(subkey->sk_flags & SK_ROW_MEMBER); - Assert(!(subkey->sk_flags & SK_ROW_END)); - for (;;) + if (subkey->sk_flags & SK_ISNULL) { - subkey++; - Assert(subkey->sk_flags & SK_ROW_MEMBER); - if (subkey->sk_attno != keysz + 1) - break; /* out-of-sequence, can't use it */ - if (subkey->sk_strategy != cur->sk_strategy) - break; /* wrong direction, can't use it */ - if (subkey->sk_flags & SK_ISNULL) - break; /* can't use null keys */ - Assert(keysz < INDEX_MAX_KEYS); - memcpy(inskey.scankeys + keysz, subkey, - sizeof(ScanKeyData)); - keysz++; - if (subkey->sk_flags & SK_ROW_END) - { - used_all_subkeys = true; - break; - } + /* + * NULL member key, can only use earlier keys. + * + * We deliberately avoid checking if this key is marked + * required. All earlier keys are required, and this key + * is unsatisfiable either way, so we can't miss anything. + */ + tighten_strat = true; + break; } - if (!used_all_subkeys) + + if (!(subkey->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD))) { - switch (strat_total) - { - case BTLessStrategyNumber: - strat_total = BTLessEqualStrategyNumber; - break; - case BTGreaterStrategyNumber: - strat_total = BTGreaterEqualStrategyNumber; - break; - } + /* nonrequired member key, can only use earlier keys */ + loosen_strat = true; + break; } - break; /* done with outer loop */ + + Assert(subkey->sk_attno == keysz + 1); + Assert(subkey->sk_strategy == bkey->sk_strategy); + Assert(keysz < INDEX_MAX_KEYS); + + memcpy(inskey.scankeys + keysz, subkey, + sizeof(ScanKeyData)); + keysz++; + if (subkey->sk_flags & SK_ROW_END) + break; } - } - else - { - /* - * Ordinary comparison key. Transform the search-style scan key - * to an insertion scan key by replacing the sk_func with the - * appropriate btree comparison function. - * - * If scankey operator is not a cross-type comparison, we can use - * the cached comparison function; otherwise gotta look it up in - * the catalogs. (That can't lead to infinite recursion, since no - * indexscan initiated by syscache lookup will use cross-data-type - * operators.) - * - * We support the convention that sk_subtype == InvalidOid means - * the opclass input type; this is a hack to simplify life for - * ScanKeyInit(). - */ - if (cur->sk_subtype == rel->rd_opcintype[i] || - cur->sk_subtype == InvalidOid) + Assert(!(loosen_strat && tighten_strat)); + if (loosen_strat) { - FmgrInfo *procinfo; - - procinfo = index_getprocinfo(rel, cur->sk_attno, BTORDER_PROC); - ScanKeyEntryInitializeWithInfo(inskey.scankeys + i, - cur->sk_flags, - cur->sk_attno, - InvalidStrategy, - cur->sk_subtype, - cur->sk_collation, - procinfo, - cur->sk_argument); + /* Use less restrictive strategy (and fewer member keys) */ + switch (strat_total) + { + case BTLessStrategyNumber: + strat_total = BTLessEqualStrategyNumber; + break; + case BTGreaterStrategyNumber: + strat_total = BTGreaterEqualStrategyNumber; + break; + } } - else + if (tighten_strat) { - RegProcedure cmp_proc; - - cmp_proc = get_opfamily_proc(rel->rd_opfamily[i], - rel->rd_opcintype[i], - cur->sk_subtype, - BTORDER_PROC); - if (!RegProcedureIsValid(cmp_proc)) - elog(ERROR, "missing support function %d(%u,%u) for attribute %d of index \"%s\"", - BTORDER_PROC, rel->rd_opcintype[i], cur->sk_subtype, - cur->sk_attno, RelationGetRelationName(rel)); - ScanKeyEntryInitialize(inskey.scankeys + i, - cur->sk_flags, - cur->sk_attno, - InvalidStrategy, - cur->sk_subtype, - cur->sk_collation, - cmp_proc, - cur->sk_argument); + /* Use more restrictive strategy (and fewer member keys) */ + switch (strat_total) + { + case BTLessEqualStrategyNumber: + strat_total = BTLessStrategyNumber; + break; + case BTGreaterEqualStrategyNumber: + strat_total = BTGreaterStrategyNumber; + break; + } } + + /* done adding to inskey (row comparison keys always come last) */ + break; + } + + /* + * Ordinary comparison key/search-style key. + * + * Transform the search-style scan key to an insertion scan key by + * replacing the sk_func with the appropriate btree 3-way-comparison + * function. + * + * If scankey operator is not a cross-type comparison, we can use the + * cached comparison function; otherwise gotta look it up in the + * catalogs. (That can't lead to infinite recursion, since no + * indexscan initiated by syscache lookup will use cross-data-type + * operators.) + * + * We support the convention that sk_subtype == InvalidOid means the + * opclass input type; this hack simplifies life for ScanKeyInit(). + */ + if (bkey->sk_subtype == rel->rd_opcintype[i] || + bkey->sk_subtype == InvalidOid) + { + FmgrInfo *procinfo; + + procinfo = index_getprocinfo(rel, bkey->sk_attno, BTORDER_PROC); + ScanKeyEntryInitializeWithInfo(inskey.scankeys + i, + bkey->sk_flags, + bkey->sk_attno, + InvalidStrategy, + bkey->sk_subtype, + bkey->sk_collation, + procinfo, + bkey->sk_argument); + } + else + { + RegProcedure cmp_proc; + + cmp_proc = get_opfamily_proc(rel->rd_opfamily[i], + rel->rd_opcintype[i], + bkey->sk_subtype, BTORDER_PROC); + if (!RegProcedureIsValid(cmp_proc)) + elog(ERROR, "missing support function %d(%u,%u) for attribute %d of index \"%s\"", + BTORDER_PROC, rel->rd_opcintype[i], bkey->sk_subtype, + bkey->sk_attno, RelationGetRelationName(rel)); + ScanKeyEntryInitialize(inskey.scankeys + i, + bkey->sk_flags, + bkey->sk_attno, + InvalidStrategy, + bkey->sk_subtype, + bkey->sk_collation, + cmp_proc, + bkey->sk_argument); } } @@ -1378,6 +1520,8 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) if (!BufferIsValid(so->currPos.buf)) { + Assert(!so->needPrimScan); + /* * We only get here if the index is completely empty. Lock relation * because nothing finer to lock exists. Without a buffer lock, it's @@ -1396,7 +1540,6 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) if (!BufferIsValid(so->currPos.buf)) { - Assert(!so->needPrimScan); _bt_parallel_done(scan); return false; } @@ -1519,7 +1662,13 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, so->currPos.currPage = BufferGetBlockNumber(so->currPos.buf); so->currPos.prevPage = opaque->btpo_prev; so->currPos.nextPage = opaque->btpo_next; + /* delay setting so->currPos.lsn until _bt_drop_lock_and_maybe_pin */ + so->currPos.dir = dir; + so->currPos.nextTupleOffset = 0; + /* either moreRight or moreLeft should be set now (may be unset later) */ + Assert(ScanDirectionIsForward(dir) ? so->currPos.moreRight : + so->currPos.moreLeft); Assert(!P_IGNORE(opaque)); Assert(BTScanPosIsPinned(so->currPos)); Assert(!so->needPrimScan); @@ -1535,14 +1684,6 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, so->currPos.currPage); } - /* initialize remaining currPos fields related to current page */ - so->currPos.lsn = BufferGetLSNAtomic(so->currPos.buf); - so->currPos.dir = dir; - so->currPos.nextTupleOffset = 0; - /* either moreLeft or moreRight should be set now (may be unset later) */ - Assert(ScanDirectionIsForward(dir) ? so->currPos.moreRight : - so->currPos.moreLeft); - PredicateLockPage(rel, so->currPos.currPage, scan->xs_snapshot); /* initialize local variables */ @@ -1557,67 +1698,14 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, pstate.finaltup = NULL; pstate.page = page; pstate.firstpage = firstpage; + pstate.forcenonrequired = false; + pstate.startikey = 0; pstate.offnum = InvalidOffsetNumber; pstate.skip = InvalidOffsetNumber; pstate.continuescan = true; /* default assumption */ - pstate.prechecked = false; - pstate.firstmatch = false; pstate.rechecks = 0; pstate.targetdistance = 0; - - /* - * Prechecking the value of the continuescan flag for the last item on the - * page (for backwards scan it will be the first item on a page). If we - * observe it to be true, then it should be true for all other items. This - * allows us to do significant optimizations in the _bt_checkkeys() - * function for all the items on the page. - * - * With the forward scan, we do this check for the last item on the page - * instead of the high key. It's relatively likely that the most - * significant column in the high key will be different from the - * corresponding value from the last item on the page. So checking with - * the last item on the page would give a more precise answer. - * - * We skip this for the first page read by each (primitive) scan, to avoid - * slowing down point queries. They typically don't stand to gain much - * when the optimization can be applied, and are more likely to notice the - * overhead of the precheck. - * - * The optimization is unsafe and must be avoided whenever _bt_checkkeys - * just set a low-order required array's key to the best available match - * for a truncated -inf attribute value from the prior page's high key - * (array element 0 is always the best available match in this scenario). - * It's quite likely that matches for array element 0 begin on this page, - * but the start of matches won't necessarily align with page boundaries. - * When the start of matches is somewhere in the middle of this page, it - * would be wrong to treat page's final non-pivot tuple as representative. - * Doing so might lead us to treat some of the page's earlier tuples as - * being part of a group of tuples thought to satisfy the required keys. - * - * Note: Conversely, in the case where the scan's arrays just advanced - * using the prior page's HIKEY _without_ advancement setting scanBehind, - * the start of matches must be aligned with page boundaries, which makes - * it safe to attempt the optimization here now. It's also safe when the - * prior page's HIKEY simply didn't need to advance any required array. In - * both cases we can safely assume that the _first_ tuple from this page - * must be >= the current set of array keys/equality constraints. And so - * if the final tuple is == those same keys (and also satisfies any - * required < or <= strategy scan keys) during the precheck, we can safely - * assume that this must also be true of all earlier tuples from the page. - */ - if (!pstate.firstpage && !so->scanBehind && minoff < maxoff) - { - ItemId iid; - IndexTuple itup; - - iid = PageGetItemId(page, ScanDirectionIsForward(dir) ? maxoff : minoff); - itup = (IndexTuple) PageGetItem(page, iid); - - /* Call with arrayKeys=false to avoid undesirable side-effects */ - _bt_checkkeys(scan, &pstate, false, itup, indnatts); - pstate.prechecked = pstate.continuescan; - pstate.continuescan = true; /* reset */ - } + pstate.nskipadvances = 0; if (ScanDirectionIsForward(dir)) { @@ -1646,6 +1734,13 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, so->scanBehind = so->oppositeDirCheck = false; /* reset */ } + /* + * Consider pstate.startikey optimization once the ongoing primitive + * index scan has already read at least one page + */ + if (!pstate.firstpage && minoff < maxoff) + _bt_set_startikey(scan, &pstate); + /* load items[] in ascending order */ itemIndex = 0; @@ -1682,6 +1777,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, { Assert(!passes_quals && pstate.continuescan); Assert(offnum < pstate.skip); + Assert(!pstate.forcenonrequired); offnum = pstate.skip; pstate.skip = InvalidOffsetNumber; @@ -1691,7 +1787,6 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, if (passes_quals) { /* tuple passes all scan key conditions */ - pstate.firstmatch = true; if (!BTreeTupleIsPosting(itup)) { /* Remember it */ @@ -1745,8 +1840,13 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, IndexTuple itup = (IndexTuple) PageGetItem(page, iid); int truncatt; + /* Reset arrays, per _bt_set_startikey contract */ + if (pstate.forcenonrequired) + _bt_start_array_keys(scan, dir); + pstate.forcenonrequired = false; + pstate.startikey = 0; /* _bt_set_startikey ignores P_HIKEY */ + truncatt = BTreeTupleGetNAtts(itup, rel); - pstate.prechecked = false; /* precheck didn't cover HIKEY */ _bt_checkkeys(scan, &pstate, arrayKeys, itup, truncatt); } @@ -1785,6 +1885,13 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, so->scanBehind = so->oppositeDirCheck = false; /* reset */ } + /* + * Consider pstate.startikey optimization once the ongoing primitive + * index scan has already read at least one page + */ + if (!pstate.firstpage && minoff < maxoff) + _bt_set_startikey(scan, &pstate); + /* load items[] in descending order */ itemIndex = MaxTIDsPerBTreePage; @@ -1824,9 +1931,31 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, Assert(!BTreeTupleIsPivot(itup)); pstate.offnum = offnum; + if (arrayKeys && offnum == minoff && pstate.forcenonrequired) + { + /* Reset arrays, per _bt_set_startikey contract */ + pstate.forcenonrequired = false; + pstate.startikey = 0; + _bt_start_array_keys(scan, dir); + } passes_quals = _bt_checkkeys(scan, &pstate, arrayKeys, itup, indnatts); + if (arrayKeys && so->scanBehind) + { + /* + * Done scanning this page, but not done with the current + * primscan. + * + * Note: Forward scans don't check this explicitly, since they + * prefer to reuse pstate.skip for this instead. + */ + Assert(!passes_quals && pstate.continuescan); + Assert(!pstate.forcenonrequired); + + break; + } + /* * Check if we need to skip ahead to a later tuple (only possible * when the scan uses array keys) @@ -1835,6 +1964,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, { Assert(!passes_quals && pstate.continuescan); Assert(offnum > pstate.skip); + Assert(!pstate.forcenonrequired); offnum = pstate.skip; pstate.skip = InvalidOffsetNumber; @@ -1844,7 +1974,6 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, if (passes_quals && tuple_alive) { /* tuple passes all scan key conditions */ - pstate.firstmatch = true; if (!BTreeTupleIsPosting(itup)) { /* Remember it */ @@ -1900,6 +2029,20 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, so->currPos.itemIndex = MaxTIDsPerBTreePage - 1; } + /* + * If _bt_set_startikey told us to temporarily treat the scan's keys as + * nonrequired (possible only during scans with array keys), there must be + * no lasting consequences for the scan's array keys. The scan's arrays + * should now have exactly the same elements as they would have had if the + * nonrequired behavior had never been used. (In general, a scan's arrays + * are expected to track its progress through the index's key space.) + * + * We are required (by _bt_set_startikey) to call _bt_checkkeys against + * pstate.finaltup with pstate.forcenonrequired=false to allow the scan's + * arrays to recover. Assert that that step hasn't been missed. + */ + Assert(!pstate.forcenonrequired); + return (so->currPos.firstItem <= so->currPos.lastItem); } @@ -2014,10 +2157,9 @@ _bt_returnitem(IndexScanDesc scan, BTScanOpaque so) * * Wrapper on _bt_readnextpage that performs final steps for the current page. * - * On entry, if so->currPos.buf is valid the buffer is pinned but not locked. - * If there's no pin held, it's because _bt_drop_lock_and_maybe_pin dropped - * the pin eagerly earlier on. The scan must have so->currPos.currPage set to - * a valid block, in any case. + * On entry, so->currPos must be valid. Its buffer will be pinned, though + * never locked. (Actually, when so->dropPin there won't even be a pin held, + * though so->currPos.currPage must still be set to a valid block number.) */ static bool _bt_steppage(IndexScanDesc scan, ScanDirection dir) @@ -2158,12 +2300,14 @@ _bt_readfirstpage(IndexScanDesc scan, OffsetNumber offnum, ScanDirection dir) */ if (_bt_readpage(scan, dir, offnum, true)) { + Relation rel = scan->indexRelation; + /* * _bt_readpage succeeded. Drop the lock (and maybe the pin) on * so->currPos.buf in preparation for btgettuple returning tuples. */ Assert(BTScanPosIsPinned(so->currPos)); - _bt_drop_lock_and_maybe_pin(scan, &so->currPos); + _bt_drop_lock_and_maybe_pin(rel, so); return true; } @@ -2185,9 +2329,12 @@ _bt_readfirstpage(IndexScanDesc scan, OffsetNumber offnum, ScanDirection dir) * previously-saved right link or left link. lastcurrblkno is the page that * was current at the point where the blkno link was saved, which we use to * reason about concurrent page splits/page deletions during backwards scans. + * In the common case where seized=false, blkno is either so->currPos.nextPage + * or so->currPos.prevPage, and lastcurrblkno is so->currPos.currPage. * - * On entry, caller shouldn't hold any locks or pins on any page (we work - * directly off of blkno and lastcurrblkno instead). Parallel scan callers + * On entry, so->currPos shouldn't be locked by caller. so->currPos.buf must + * be InvalidBuffer/unpinned as needed by caller (note that lastcurrblkno + * won't need to be read again in almost all cases). Parallel scan callers * that seized the scan before calling here should pass seized=true; such a * caller's blkno and lastcurrblkno arguments come from the seized scan. * seized=false callers just pass us the blkno/lastcurrblkno taken from their @@ -2201,11 +2348,11 @@ _bt_readfirstpage(IndexScanDesc scan, OffsetNumber offnum, ScanDirection dir) * * On success exit, so->currPos is updated to contain data from the next * interesting page, and we return true. We hold a pin on the buffer on - * success exit, except when _bt_drop_lock_and_maybe_pin decided it was safe - * to eagerly drop the pin (to avoid blocking VACUUM). + * success exit (except during so->dropPin index scans, when we drop the pin + * eagerly to avoid blocking VACUUM). * - * If there are no more matching records in the given direction, we drop all - * locks and pins, invalidate so->currPos, and return false. + * If there are no more matching records in the given direction, we invalidate + * so->currPos (while ensuring it retains no locks or pins), and return false. * * We always release the scan for a parallel scan caller, regardless of * success or failure; we'll call _bt_parallel_release as soon as possible. @@ -2320,7 +2467,7 @@ _bt_readnextpage(IndexScanDesc scan, BlockNumber blkno, */ Assert(so->currPos.currPage == blkno); Assert(BTScanPosIsPinned(so->currPos)); - _bt_drop_lock_and_maybe_pin(scan, &so->currPos); + _bt_drop_lock_and_maybe_pin(rel, so); return true; } diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 3794cc924ad46..8828a7a8f8952 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -44,6 +44,7 @@ #include "access/parallel.h" #include "access/relscan.h" #include "access/table.h" +#include "access/tableam.h" #include "access/xact.h" #include "catalog/index.h" #include "commands/progress.h" @@ -105,7 +106,7 @@ typedef struct BTShared int scantuplesortstates; /* Query ID, for report in worker processes */ - uint64 queryid; + int64 queryid; /* * workersdonecv is used to monitor the progress of workers. All parallel diff --git a/src/backend/access/nbtree/nbtsplitloc.c b/src/backend/access/nbtree/nbtsplitloc.c index e6c9aaa0454dd..b88c396195a42 100644 --- a/src/backend/access/nbtree/nbtsplitloc.c +++ b/src/backend/access/nbtree/nbtsplitloc.c @@ -15,6 +15,7 @@ #include "postgres.h" #include "access/nbtree.h" +#include "access/tableam.h" #include "common/int.h" typedef enum diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index 2aee9bbf67d2e..edfea2acaff66 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -19,19 +19,34 @@ #include "access/nbtree.h" #include "access/reloptions.h" +#include "access/relscan.h" #include "commands/progress.h" #include "miscadmin.h" #include "utils/datum.h" #include "utils/lsyscache.h" +#include "utils/rel.h" + #define LOOK_AHEAD_REQUIRED_RECHECKS 3 #define LOOK_AHEAD_DEFAULT_DISTANCE 5 +#define NSKIPADVANCES_THRESHOLD 3 static inline int32 _bt_compare_array_skey(FmgrInfo *orderproc, Datum tupdatum, bool tupnull, Datum arrdatum, ScanKey cur); -static bool _bt_advance_array_keys_increment(IndexScanDesc scan, ScanDirection dir); -static void _bt_rewind_nonrequired_arrays(IndexScanDesc scan, ScanDirection dir); +static void _bt_binsrch_skiparray_skey(bool cur_elem_trig, ScanDirection dir, + Datum tupdatum, bool tupnull, + BTArrayKeyInfo *array, ScanKey cur, + int32 *set_elem_result); +static void _bt_skiparray_set_element(Relation rel, ScanKey skey, BTArrayKeyInfo *array, + int32 set_elem_result, Datum tupdatum, bool tupnull); +static void _bt_skiparray_set_isnull(Relation rel, ScanKey skey, BTArrayKeyInfo *array); +static void _bt_array_set_low_or_high(Relation rel, ScanKey skey, + BTArrayKeyInfo *array, bool low_not_high); +static bool _bt_array_decrement(Relation rel, ScanKey skey, BTArrayKeyInfo *array); +static bool _bt_array_increment(Relation rel, ScanKey skey, BTArrayKeyInfo *array); +static bool _bt_advance_array_keys_increment(IndexScanDesc scan, ScanDirection dir, + bool *skip_array_set); static bool _bt_tuple_before_array_skeys(IndexScanDesc scan, ScanDirection dir, IndexTuple tuple, TupleDesc tupdesc, int tupnatts, bool readpagetup, int sktrig, bool *scanBehind); @@ -39,18 +54,17 @@ static bool _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, IndexTuple tuple, int tupnatts, TupleDesc tupdesc, int sktrig, bool sktrig_required); #ifdef USE_ASSERT_CHECKING -static bool _bt_verify_arrays_bt_first(IndexScanDesc scan, ScanDirection dir); static bool _bt_verify_keys_with_arraykeys(IndexScanDesc scan); #endif static bool _bt_oppodir_checkkeys(IndexScanDesc scan, ScanDirection dir, IndexTuple finaltup); static bool _bt_check_compare(IndexScanDesc scan, ScanDirection dir, IndexTuple tuple, int tupnatts, TupleDesc tupdesc, - bool advancenonrequired, bool prechecked, bool firstmatch, + bool advancenonrequired, bool forcenonrequired, bool *continuescan, int *ikey); static bool _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, TupleDesc tupdesc, - ScanDirection dir, bool *continuescan); + ScanDirection dir, bool forcenonrequired, bool *continuescan); static void _bt_checkkeys_look_ahead(IndexScanDesc scan, BTReadPageState *pstate, int tupnatts, TupleDesc tupdesc); static int _bt_keep_natts(Relation rel, IndexTuple lastleft, @@ -207,6 +221,7 @@ _bt_compare_array_skey(FmgrInfo *orderproc, int32 result = 0; Assert(cur->sk_strategy == BTEqualStrategyNumber); + Assert(!(cur->sk_flags & (SK_BT_MINVAL | SK_BT_MAXVAL))); if (tupnull) /* NULL tupdatum */ { @@ -283,6 +298,8 @@ _bt_binsrch_array_skey(FmgrInfo *orderproc, Datum arrdatum; Assert(cur->sk_flags & SK_SEARCHARRAY); + Assert(!(cur->sk_flags & SK_BT_SKIP)); + Assert(!(cur->sk_flags & SK_ISNULL)); /* SAOP arrays never have NULLs */ Assert(cur->sk_strategy == BTEqualStrategyNumber); if (cur_elem_trig) @@ -405,6 +422,186 @@ _bt_binsrch_array_skey(FmgrInfo *orderproc, return low_elem; } +/* + * _bt_binsrch_skiparray_skey() -- "Binary search" within a skip array + * + * Does not return an index into the array, since skip arrays don't really + * contain elements (they generate their array elements procedurally instead). + * Our interface matches that of _bt_binsrch_array_skey in every other way. + * + * Sets *set_elem_result just like _bt_binsrch_array_skey would with a true + * array. The value 0 indicates that tupdatum/tupnull is within the range of + * the skip array. We return -1 when tupdatum/tupnull is lower that any value + * within the range of the array, and 1 when it is higher than every value. + * Caller should pass *set_elem_result to _bt_skiparray_set_element to advance + * the array. + * + * cur_elem_trig indicates if array advancement was triggered by this array's + * scan key. We use this to optimize-away comparisons that are known by our + * caller to be unnecessary from context, just like _bt_binsrch_array_skey. + */ +static void +_bt_binsrch_skiparray_skey(bool cur_elem_trig, ScanDirection dir, + Datum tupdatum, bool tupnull, + BTArrayKeyInfo *array, ScanKey cur, + int32 *set_elem_result) +{ + Assert(cur->sk_flags & SK_BT_SKIP); + Assert(cur->sk_flags & SK_SEARCHARRAY); + Assert(cur->sk_flags & SK_BT_REQFWD); + Assert(array->num_elems == -1); + Assert(!ScanDirectionIsNoMovement(dir)); + + if (array->null_elem) + { + Assert(!array->low_compare && !array->high_compare); + + *set_elem_result = 0; + return; + } + + if (tupnull) /* NULL tupdatum */ + { + if (cur->sk_flags & SK_BT_NULLS_FIRST) + *set_elem_result = -1; /* NULL "<" NOT_NULL */ + else + *set_elem_result = 1; /* NULL ">" NOT_NULL */ + return; + } + + /* + * Array inequalities determine whether tupdatum is within the range of + * caller's skip array + */ + *set_elem_result = 0; + if (ScanDirectionIsForward(dir)) + { + /* + * Evaluate low_compare first (unless cur_elem_trig tells us that it + * cannot possibly fail to be satisfied), then evaluate high_compare + */ + if (!cur_elem_trig && array->low_compare && + !DatumGetBool(FunctionCall2Coll(&array->low_compare->sk_func, + array->low_compare->sk_collation, + tupdatum, + array->low_compare->sk_argument))) + *set_elem_result = -1; + else if (array->high_compare && + !DatumGetBool(FunctionCall2Coll(&array->high_compare->sk_func, + array->high_compare->sk_collation, + tupdatum, + array->high_compare->sk_argument))) + *set_elem_result = 1; + } + else + { + /* + * Evaluate high_compare first (unless cur_elem_trig tells us that it + * cannot possibly fail to be satisfied), then evaluate low_compare + */ + if (!cur_elem_trig && array->high_compare && + !DatumGetBool(FunctionCall2Coll(&array->high_compare->sk_func, + array->high_compare->sk_collation, + tupdatum, + array->high_compare->sk_argument))) + *set_elem_result = 1; + else if (array->low_compare && + !DatumGetBool(FunctionCall2Coll(&array->low_compare->sk_func, + array->low_compare->sk_collation, + tupdatum, + array->low_compare->sk_argument))) + *set_elem_result = -1; + } + + /* + * Assert that any keys that were assumed to be satisfied already (due to + * caller passing cur_elem_trig=true) really are satisfied as expected + */ +#ifdef USE_ASSERT_CHECKING + if (cur_elem_trig) + { + if (ScanDirectionIsForward(dir) && array->low_compare) + Assert(DatumGetBool(FunctionCall2Coll(&array->low_compare->sk_func, + array->low_compare->sk_collation, + tupdatum, + array->low_compare->sk_argument))); + + if (ScanDirectionIsBackward(dir) && array->high_compare) + Assert(DatumGetBool(FunctionCall2Coll(&array->high_compare->sk_func, + array->high_compare->sk_collation, + tupdatum, + array->high_compare->sk_argument))); + } +#endif +} + +/* + * _bt_skiparray_set_element() -- Set skip array scan key's sk_argument + * + * Caller passes set_elem_result returned by _bt_binsrch_skiparray_skey for + * caller's tupdatum/tupnull. + * + * We copy tupdatum/tupnull into skey's sk_argument iff set_elem_result == 0. + * Otherwise, we set skey to either the lowest or highest value that's within + * the range of caller's skip array (whichever is the best available match to + * tupdatum/tupnull that is still within the range of the skip array according + * to _bt_binsrch_skiparray_skey/set_elem_result). + */ +static void +_bt_skiparray_set_element(Relation rel, ScanKey skey, BTArrayKeyInfo *array, + int32 set_elem_result, Datum tupdatum, bool tupnull) +{ + Assert(skey->sk_flags & SK_BT_SKIP); + Assert(skey->sk_flags & SK_SEARCHARRAY); + + if (set_elem_result) + { + /* tupdatum/tupnull is out of the range of the skip array */ + Assert(!array->null_elem); + + _bt_array_set_low_or_high(rel, skey, array, set_elem_result < 0); + return; + } + + /* Advance skip array to tupdatum (or tupnull) value */ + if (unlikely(tupnull)) + { + _bt_skiparray_set_isnull(rel, skey, array); + return; + } + + /* Free memory previously allocated for sk_argument if needed */ + if (!array->attbyval && skey->sk_argument) + pfree(DatumGetPointer(skey->sk_argument)); + + /* tupdatum becomes new sk_argument/new current element */ + skey->sk_flags &= ~(SK_SEARCHNULL | SK_ISNULL | + SK_BT_MINVAL | SK_BT_MAXVAL | + SK_BT_NEXT | SK_BT_PRIOR); + skey->sk_argument = datumCopy(tupdatum, array->attbyval, array->attlen); +} + +/* + * _bt_skiparray_set_isnull() -- set skip array scan key to NULL + */ +static void +_bt_skiparray_set_isnull(Relation rel, ScanKey skey, BTArrayKeyInfo *array) +{ + Assert(skey->sk_flags & SK_BT_SKIP); + Assert(skey->sk_flags & SK_SEARCHARRAY); + Assert(array->null_elem && !array->low_compare && !array->high_compare); + + /* Free memory previously allocated for sk_argument if needed */ + if (!array->attbyval && skey->sk_argument) + pfree(DatumGetPointer(skey->sk_argument)); + + /* NULL becomes new sk_argument/new current element */ + skey->sk_argument = (Datum) 0; + skey->sk_flags &= ~(SK_BT_MINVAL | SK_BT_MAXVAL | + SK_BT_NEXT | SK_BT_PRIOR); + skey->sk_flags |= (SK_SEARCHNULL | SK_ISNULL); +} + /* * _bt_start_array_keys() -- Initialize array keys at start of a scan * @@ -414,29 +611,355 @@ _bt_binsrch_array_skey(FmgrInfo *orderproc, void _bt_start_array_keys(IndexScanDesc scan, ScanDirection dir) { + Relation rel = scan->indexRelation; BTScanOpaque so = (BTScanOpaque) scan->opaque; - int i; Assert(so->numArrayKeys); Assert(so->qual_ok); - for (i = 0; i < so->numArrayKeys; i++) + for (int i = 0; i < so->numArrayKeys; i++) { - BTArrayKeyInfo *curArrayKey = &so->arrayKeys[i]; - ScanKey skey = &so->keyData[curArrayKey->scan_key]; + BTArrayKeyInfo *array = &so->arrayKeys[i]; + ScanKey skey = &so->keyData[array->scan_key]; - Assert(curArrayKey->num_elems > 0); Assert(skey->sk_flags & SK_SEARCHARRAY); - if (ScanDirectionIsBackward(dir)) - curArrayKey->cur_elem = curArrayKey->num_elems - 1; - else - curArrayKey->cur_elem = 0; - skey->sk_argument = curArrayKey->elem_values[curArrayKey->cur_elem]; + _bt_array_set_low_or_high(rel, skey, array, + ScanDirectionIsForward(dir)); } so->scanBehind = so->oppositeDirCheck = false; /* reset */ } +/* + * _bt_array_set_low_or_high() -- Set array scan key to lowest/highest element + * + * Caller also passes associated scan key, which will have its argument set to + * the lowest/highest array value in passing. + */ +static void +_bt_array_set_low_or_high(Relation rel, ScanKey skey, BTArrayKeyInfo *array, + bool low_not_high) +{ + Assert(skey->sk_flags & SK_SEARCHARRAY); + + if (array->num_elems != -1) + { + /* set low or high element for SAOP array */ + int set_elem = 0; + + Assert(!(skey->sk_flags & SK_BT_SKIP)); + + if (!low_not_high) + set_elem = array->num_elems - 1; + + /* + * Just copy over array datum (only skip arrays require freeing and + * allocating memory for sk_argument) + */ + array->cur_elem = set_elem; + skey->sk_argument = array->elem_values[set_elem]; + + return; + } + + /* set low or high element for skip array */ + Assert(skey->sk_flags & SK_BT_SKIP); + Assert(array->num_elems == -1); + + /* Free memory previously allocated for sk_argument if needed */ + if (!array->attbyval && skey->sk_argument) + pfree(DatumGetPointer(skey->sk_argument)); + + /* Reset flags */ + skey->sk_argument = (Datum) 0; + skey->sk_flags &= ~(SK_SEARCHNULL | SK_ISNULL | + SK_BT_MINVAL | SK_BT_MAXVAL | + SK_BT_NEXT | SK_BT_PRIOR); + + if (array->null_elem && + (low_not_high == ((skey->sk_flags & SK_BT_NULLS_FIRST) != 0))) + { + /* Requested element (either lowest or highest) has the value NULL */ + skey->sk_flags |= (SK_SEARCHNULL | SK_ISNULL); + } + else if (low_not_high) + { + /* Setting array to lowest element (according to low_compare) */ + skey->sk_flags |= SK_BT_MINVAL; + } + else + { + /* Setting array to highest element (according to high_compare) */ + skey->sk_flags |= SK_BT_MAXVAL; + } +} + +/* + * _bt_array_decrement() -- decrement array scan key's sk_argument + * + * Return value indicates whether caller's array was successfully decremented. + * Cannot decrement an array whose current element is already the first one. + */ +static bool +_bt_array_decrement(Relation rel, ScanKey skey, BTArrayKeyInfo *array) +{ + bool uflow = false; + Datum dec_sk_argument; + + Assert(skey->sk_flags & SK_SEARCHARRAY); + Assert(!(skey->sk_flags & (SK_BT_MAXVAL | SK_BT_NEXT | SK_BT_PRIOR))); + + /* SAOP array? */ + if (array->num_elems != -1) + { + Assert(!(skey->sk_flags & (SK_BT_SKIP | SK_BT_MINVAL | SK_BT_MAXVAL))); + if (array->cur_elem > 0) + { + /* + * Just decrement current element, and assign its datum to skey + * (only skip arrays need us to free existing sk_argument memory) + */ + array->cur_elem--; + skey->sk_argument = array->elem_values[array->cur_elem]; + + /* Successfully decremented array */ + return true; + } + + /* Cannot decrement to before first array element */ + return false; + } + + /* Nope, this is a skip array */ + Assert(skey->sk_flags & SK_BT_SKIP); + + /* + * The sentinel value that represents the minimum value within the range + * of a skip array (often just -inf) is never decrementable + */ + if (skey->sk_flags & SK_BT_MINVAL) + return false; + + /* + * When the current array element is NULL, and the lowest sorting value in + * the index is also NULL, we cannot decrement before first array element + */ + if ((skey->sk_flags & SK_ISNULL) && (skey->sk_flags & SK_BT_NULLS_FIRST)) + return false; + + /* + * Opclasses without skip support "decrement" the scan key's current + * element by setting the PRIOR flag. The true prior value is determined + * by repositioning to the last index tuple < existing sk_argument/current + * array element. Note that this works in the usual way when the scan key + * is already marked ISNULL (i.e. when the current element is NULL). + */ + if (!array->sksup) + { + /* Successfully "decremented" array */ + skey->sk_flags |= SK_BT_PRIOR; + return true; + } + + /* + * Opclasses with skip support directly decrement sk_argument + */ + if (skey->sk_flags & SK_ISNULL) + { + Assert(!(skey->sk_flags & SK_BT_NULLS_FIRST)); + + /* + * Existing sk_argument/array element is NULL (for an IS NULL qual). + * + * "Decrement" from NULL to the high_elem value provided by opclass + * skip support routine. + */ + skey->sk_flags &= ~(SK_SEARCHNULL | SK_ISNULL); + skey->sk_argument = datumCopy(array->sksup->high_elem, + array->attbyval, array->attlen); + return true; + } + + /* + * Ask opclass support routine to provide decremented copy of existing + * non-NULL sk_argument + */ + dec_sk_argument = array->sksup->decrement(rel, skey->sk_argument, &uflow); + if (unlikely(uflow)) + { + /* dec_sk_argument has undefined value (so no pfree) */ + if (array->null_elem && (skey->sk_flags & SK_BT_NULLS_FIRST)) + { + _bt_skiparray_set_isnull(rel, skey, array); + + /* Successfully "decremented" array to NULL */ + return true; + } + + /* Cannot decrement to before first array element */ + return false; + } + + /* + * Successfully decremented sk_argument to a non-NULL value. Make sure + * that the decremented value is still within the range of the array. + */ + if (array->low_compare && + !DatumGetBool(FunctionCall2Coll(&array->low_compare->sk_func, + array->low_compare->sk_collation, + dec_sk_argument, + array->low_compare->sk_argument))) + { + /* Keep existing sk_argument after all */ + if (!array->attbyval) + pfree(DatumGetPointer(dec_sk_argument)); + + /* Cannot decrement to before first array element */ + return false; + } + + /* Accept value returned by opclass decrement callback */ + if (!array->attbyval && skey->sk_argument) + pfree(DatumGetPointer(skey->sk_argument)); + skey->sk_argument = dec_sk_argument; + + /* Successfully decremented array */ + return true; +} + +/* + * _bt_array_increment() -- increment array scan key's sk_argument + * + * Return value indicates whether caller's array was successfully incremented. + * Cannot increment an array whose current element is already the final one. + */ +static bool +_bt_array_increment(Relation rel, ScanKey skey, BTArrayKeyInfo *array) +{ + bool oflow = false; + Datum inc_sk_argument; + + Assert(skey->sk_flags & SK_SEARCHARRAY); + Assert(!(skey->sk_flags & (SK_BT_MINVAL | SK_BT_NEXT | SK_BT_PRIOR))); + + /* SAOP array? */ + if (array->num_elems != -1) + { + Assert(!(skey->sk_flags & (SK_BT_SKIP | SK_BT_MINVAL | SK_BT_MAXVAL))); + if (array->cur_elem < array->num_elems - 1) + { + /* + * Just increment current element, and assign its datum to skey + * (only skip arrays need us to free existing sk_argument memory) + */ + array->cur_elem++; + skey->sk_argument = array->elem_values[array->cur_elem]; + + /* Successfully incremented array */ + return true; + } + + /* Cannot increment past final array element */ + return false; + } + + /* Nope, this is a skip array */ + Assert(skey->sk_flags & SK_BT_SKIP); + + /* + * The sentinel value that represents the maximum value within the range + * of a skip array (often just +inf) is never incrementable + */ + if (skey->sk_flags & SK_BT_MAXVAL) + return false; + + /* + * When the current array element is NULL, and the highest sorting value + * in the index is also NULL, we cannot increment past the final element + */ + if ((skey->sk_flags & SK_ISNULL) && !(skey->sk_flags & SK_BT_NULLS_FIRST)) + return false; + + /* + * Opclasses without skip support "increment" the scan key's current + * element by setting the NEXT flag. The true next value is determined by + * repositioning to the first index tuple > existing sk_argument/current + * array element. Note that this works in the usual way when the scan key + * is already marked ISNULL (i.e. when the current element is NULL). + */ + if (!array->sksup) + { + /* Successfully "incremented" array */ + skey->sk_flags |= SK_BT_NEXT; + return true; + } + + /* + * Opclasses with skip support directly increment sk_argument + */ + if (skey->sk_flags & SK_ISNULL) + { + Assert(skey->sk_flags & SK_BT_NULLS_FIRST); + + /* + * Existing sk_argument/array element is NULL (for an IS NULL qual). + * + * "Increment" from NULL to the low_elem value provided by opclass + * skip support routine. + */ + skey->sk_flags &= ~(SK_SEARCHNULL | SK_ISNULL); + skey->sk_argument = datumCopy(array->sksup->low_elem, + array->attbyval, array->attlen); + return true; + } + + /* + * Ask opclass support routine to provide incremented copy of existing + * non-NULL sk_argument + */ + inc_sk_argument = array->sksup->increment(rel, skey->sk_argument, &oflow); + if (unlikely(oflow)) + { + /* inc_sk_argument has undefined value (so no pfree) */ + if (array->null_elem && !(skey->sk_flags & SK_BT_NULLS_FIRST)) + { + _bt_skiparray_set_isnull(rel, skey, array); + + /* Successfully "incremented" array to NULL */ + return true; + } + + /* Cannot increment past final array element */ + return false; + } + + /* + * Successfully incremented sk_argument to a non-NULL value. Make sure + * that the incremented value is still within the range of the array. + */ + if (array->high_compare && + !DatumGetBool(FunctionCall2Coll(&array->high_compare->sk_func, + array->high_compare->sk_collation, + inc_sk_argument, + array->high_compare->sk_argument))) + { + /* Keep existing sk_argument after all */ + if (!array->attbyval) + pfree(DatumGetPointer(inc_sk_argument)); + + /* Cannot increment past final array element */ + return false; + } + + /* Accept value returned by opclass increment callback */ + if (!array->attbyval && skey->sk_argument) + pfree(DatumGetPointer(skey->sk_argument)); + skey->sk_argument = inc_sk_argument; + + /* Successfully incremented array */ + return true; +} + /* * _bt_advance_array_keys_increment() -- Advance to next set of array elements * @@ -450,8 +973,10 @@ _bt_start_array_keys(IndexScanDesc scan, ScanDirection dir) * advanced (every array remains at its final element for scan direction). */ static bool -_bt_advance_array_keys_increment(IndexScanDesc scan, ScanDirection dir) +_bt_advance_array_keys_increment(IndexScanDesc scan, ScanDirection dir, + bool *skip_array_set) { + Relation rel = scan->indexRelation; BTScanOpaque so = (BTScanOpaque) scan->opaque; /* @@ -461,29 +986,33 @@ _bt_advance_array_keys_increment(IndexScanDesc scan, ScanDirection dir) */ for (int i = so->numArrayKeys - 1; i >= 0; i--) { - BTArrayKeyInfo *curArrayKey = &so->arrayKeys[i]; - ScanKey skey = &so->keyData[curArrayKey->scan_key]; - int cur_elem = curArrayKey->cur_elem; - int num_elems = curArrayKey->num_elems; - bool rolled = false; + BTArrayKeyInfo *array = &so->arrayKeys[i]; + ScanKey skey = &so->keyData[array->scan_key]; - if (ScanDirectionIsForward(dir) && ++cur_elem >= num_elems) + if (array->num_elems == -1) + *skip_array_set = true; + + if (ScanDirectionIsForward(dir)) { - cur_elem = 0; - rolled = true; + if (_bt_array_increment(rel, skey, array)) + return true; } - else if (ScanDirectionIsBackward(dir) && --cur_elem < 0) + else { - cur_elem = num_elems - 1; - rolled = true; + if (_bt_array_decrement(rel, skey, array)) + return true; } - curArrayKey->cur_elem = cur_elem; - skey->sk_argument = curArrayKey->elem_values[cur_elem]; - if (!rolled) - return true; + /* + * Couldn't increment (or decrement) array. Handle array roll over. + * + * Start over at the array's lowest sorting value (or its highest + * value, for backward scans)... + */ + _bt_array_set_low_or_high(rel, skey, array, + ScanDirectionIsForward(dir)); - /* Need to advance next array key, if any */ + /* ...then increment (or decrement) next most significant array */ } /* @@ -506,75 +1035,6 @@ _bt_advance_array_keys_increment(IndexScanDesc scan, ScanDirection dir) return false; } -/* - * _bt_rewind_nonrequired_arrays() -- Rewind non-required arrays - * - * Called when _bt_advance_array_keys decides to start a new primitive index - * scan on the basis of the current scan position being before the position - * that _bt_first is capable of repositioning the scan to by applying an - * inequality operator required in the opposite-to-scan direction only. - * - * Although equality strategy scan keys (for both arrays and non-arrays alike) - * are either marked required in both directions or in neither direction, - * there is a sense in which non-required arrays behave like required arrays. - * With a qual such as "WHERE a IN (100, 200) AND b >= 3 AND c IN (5, 6, 7)", - * the scan key on "c" is non-required, but nevertheless enables positioning - * the scan at the first tuple >= "(100, 3, 5)" on the leaf level during the - * first descent of the tree by _bt_first. Later on, there could also be a - * second descent, that places the scan right before tuples >= "(200, 3, 5)". - * _bt_first must never be allowed to build an insertion scan key whose "c" - * entry is set to a value other than 5, the "c" array's first element/value. - * (Actually, it's the first in the current scan direction. This example uses - * a forward scan.) - * - * Calling here resets the array scan key elements for the scan's non-required - * arrays. This is strictly necessary for correctness in a subset of cases - * involving "required in opposite direction"-triggered primitive index scans. - * Not all callers are at risk of _bt_first using a non-required array like - * this, but advancement always resets the arrays when another primitive scan - * is scheduled, just to keep things simple. Array advancement even makes - * sure to reset non-required arrays during scans that have no inequalities. - * (Advancement still won't call here when there are no inequalities, though - * that's just because it's all handled indirectly instead.) - * - * Note: _bt_verify_arrays_bt_first is called by an assertion to enforce that - * everybody got this right. - */ -static void -_bt_rewind_nonrequired_arrays(IndexScanDesc scan, ScanDirection dir) -{ - BTScanOpaque so = (BTScanOpaque) scan->opaque; - int arrayidx = 0; - - for (int ikey = 0; ikey < so->numberOfKeys; ikey++) - { - ScanKey cur = so->keyData + ikey; - BTArrayKeyInfo *array = NULL; - int first_elem_dir; - - if (!(cur->sk_flags & SK_SEARCHARRAY) || - cur->sk_strategy != BTEqualStrategyNumber) - continue; - - array = &so->arrayKeys[arrayidx++]; - Assert(array->scan_key == ikey); - - if ((cur->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD))) - continue; - - if (ScanDirectionIsForward(dir)) - first_elem_dir = 0; - else - first_elem_dir = array->num_elems - 1; - - if (array->cur_elem != first_elem_dir) - { - array->cur_elem = first_elem_dir; - cur->sk_argument = array->elem_values[first_elem_dir]; - } - } -} - /* * _bt_tuple_before_array_skeys() -- too early to advance required arrays? * @@ -584,7 +1044,7 @@ _bt_rewind_nonrequired_arrays(IndexScanDesc scan, ScanDirection dir) * * readpagetup callers must only call here when _bt_check_compare already set * continuescan=false. We help these callers deal with _bt_check_compare's - * inability to distinguishing between the < and > cases (it uses equality + * inability to distinguish between the < and > cases (it uses equality * operator scan keys, whereas we use 3-way ORDER procs). These callers pass * a _bt_check_compare-set sktrig value that indicates which scan key * triggered the call (!readpagetup callers just pass us sktrig=0 instead). @@ -696,9 +1156,77 @@ _bt_tuple_before_array_skeys(IndexScanDesc scan, ScanDirection dir, tupdatum = index_getattr(tuple, cur->sk_attno, tupdesc, &tupnull); - result = _bt_compare_array_skey(&so->orderProcs[ikey], - tupdatum, tupnull, - cur->sk_argument, cur); + if (likely(!(cur->sk_flags & (SK_BT_MINVAL | SK_BT_MAXVAL)))) + { + /* Scankey has a valid/comparable sk_argument value */ + result = _bt_compare_array_skey(&so->orderProcs[ikey], + tupdatum, tupnull, + cur->sk_argument, cur); + + if (result == 0) + { + /* + * Interpret result in a way that takes NEXT/PRIOR into + * account + */ + if (cur->sk_flags & SK_BT_NEXT) + result = -1; + else if (cur->sk_flags & SK_BT_PRIOR) + result = 1; + + Assert(result == 0 || (cur->sk_flags & SK_BT_SKIP)); + } + } + else + { + BTArrayKeyInfo *array = NULL; + + /* + * Current array element/array = scan key value is a sentinel + * value that represents the lowest (or highest) possible value + * that's still within the range of the array. + * + * Like _bt_first, we only see MINVAL keys during forwards scans + * (and similarly only see MAXVAL keys during backwards scans). + * Even if the scan's direction changes, we'll stop at some higher + * order key before we can ever reach any MAXVAL (or MINVAL) keys. + * (However, unlike _bt_first we _can_ get to keys marked either + * NEXT or PRIOR, regardless of the scan's current direction.) + */ + Assert(ScanDirectionIsForward(dir) ? + !(cur->sk_flags & SK_BT_MAXVAL) : + !(cur->sk_flags & SK_BT_MINVAL)); + + /* + * There are no valid sk_argument values in MINVAL/MAXVAL keys. + * Check if tupdatum is within the range of skip array instead. + */ + for (int arrayidx = 0; arrayidx < so->numArrayKeys; arrayidx++) + { + array = &so->arrayKeys[arrayidx]; + if (array->scan_key == ikey) + break; + } + + _bt_binsrch_skiparray_skey(false, dir, tupdatum, tupnull, + array, cur, &result); + + if (result == 0) + { + /* + * tupdatum satisfies both low_compare and high_compare, so + * it's time to advance the array keys. + * + * Note: It's possible that the skip array will "advance" from + * its MINVAL (or MAXVAL) representation to an alternative, + * logically equivalent representation of the same value: a + * representation where the = key gets a valid datum in its + * sk_argument. This is only possible when low_compare uses + * the >= strategy (or high_compare uses the <= strategy). + */ + return false; + } + } /* * Does this comparison indicate that caller must _not_ advance the @@ -786,8 +1314,6 @@ _bt_start_prim_scan(IndexScanDesc scan, ScanDirection dir) */ if (so->needPrimScan) { - Assert(_bt_verify_arrays_bt_first(scan, dir)); - /* * Flag was set -- must call _bt_first again, which will reset the * scan's needPrimScan flag @@ -834,9 +1360,10 @@ _bt_start_prim_scan(IndexScanDesc scan, ScanDirection dir) * postcondition's <= operator with a >=. In other words, just swap the * precondition with the postcondition.) * - * We also deal with "advancing" non-required arrays here. Callers whose - * sktrig scan key is non-required specify sktrig_required=false. These calls - * are the only exception to the general rule about always advancing the + * We also deal with "advancing" non-required arrays here (or arrays that are + * treated as non-required for the duration of a _bt_readpage call). Callers + * whose sktrig scan key is non-required specify sktrig_required=false. These + * calls are the only exception to the general rule about always advancing the * required array keys (the scan may not even have a required array). These * callers should just pass a NULL pstate (since there is never any question * of stopping the scan). No call to _bt_tuple_before_array_skeys is required @@ -871,11 +1398,13 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, ScanDirection dir = so->currPos.dir; int arrayidx = 0; bool beyond_end_advance = false, + skip_array_advanced = false, has_required_opposite_direction_only = false, all_required_satisfied = true, all_satisfied = true; Assert(!so->needPrimScan && !so->scanBehind && !so->oppositeDirCheck); + Assert(_bt_verify_keys_with_arraykeys(scan)); if (sktrig_required) { @@ -885,17 +1414,6 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, Assert(!_bt_tuple_before_array_skeys(scan, dir, tuple, tupdesc, tupnatts, false, 0, NULL)); - /* - * Required scan key wasn't satisfied, so required arrays will have to - * advance. Invalidate page-level state that tracks whether the - * scan's required-in-opposite-direction-only keys are known to be - * satisfied by page's remaining tuples. - */ - pstate->firstmatch = false; - - /* Shouldn't have to invalidate 'prechecked', though */ - Assert(!pstate->prechecked); - /* * Once we return we'll have a new set of required array keys, so * reset state used by "look ahead" optimization @@ -903,8 +1421,26 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, pstate->rechecks = 0; pstate->targetdistance = 0; } + else if (sktrig < so->numberOfKeys - 1 && + !(so->keyData[so->numberOfKeys - 1].sk_flags & SK_SEARCHARRAY)) + { + int least_sign_ikey = so->numberOfKeys - 1; + bool continuescan; - Assert(_bt_verify_keys_with_arraykeys(scan)); + /* + * Optimization: perform a precheck of the least significant key + * during !sktrig_required calls when it isn't already our sktrig + * (provided the precheck key is not itself an array). + * + * When the precheck works out we'll avoid an expensive binary search + * of sktrig's array (plus any other arrays before least_sign_ikey). + */ + Assert(so->keyData[sktrig].sk_flags & SK_SEARCHARRAY); + if (!_bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, false, + false, &continuescan, + &least_sign_ikey)) + return false; + } for (int ikey = 0; ikey < so->numberOfKeys; ikey++) { @@ -946,8 +1482,6 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, if (cur->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)) { - Assert(sktrig_required); - required = true; if (cur->sk_attno > tupnatts) @@ -1017,18 +1551,9 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, */ if (beyond_end_advance) { - int final_elem_dir; - - if (ScanDirectionIsBackward(dir) || !array) - final_elem_dir = 0; - else - final_elem_dir = array->num_elems - 1; - - if (array && array->cur_elem != final_elem_dir) - { - array->cur_elem = final_elem_dir; - cur->sk_argument = array->elem_values[final_elem_dir]; - } + if (array) + _bt_array_set_low_or_high(rel, cur, array, + ScanDirectionIsBackward(dir)); continue; } @@ -1053,18 +1578,9 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, */ if (!all_required_satisfied || cur->sk_attno > tupnatts) { - int first_elem_dir; - - if (ScanDirectionIsForward(dir) || !array) - first_elem_dir = 0; - else - first_elem_dir = array->num_elems - 1; - - if (array && array->cur_elem != first_elem_dir) - { - array->cur_elem = first_elem_dir; - cur->sk_argument = array->elem_values[first_elem_dir]; - } + if (array) + _bt_array_set_low_or_high(rel, cur, array, + ScanDirectionIsForward(dir)); continue; } @@ -1080,18 +1596,26 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, bool cur_elem_trig = (sktrig_required && ikey == sktrig); /* - * Binary search for closest match that's available from the array + * "Binary search" by checking if tupdatum/tupnull are within the + * range of the skip array */ - set_elem = _bt_binsrch_array_skey(&so->orderProcs[ikey], - cur_elem_trig, dir, - tupdatum, tupnull, array, cur, - &result); + if (array->num_elems == -1) + _bt_binsrch_skiparray_skey(cur_elem_trig, dir, + tupdatum, tupnull, array, cur, + &result); - Assert(set_elem >= 0 && set_elem < array->num_elems); + /* + * Binary search for the closest match from the SAOP array + */ + else + set_elem = _bt_binsrch_array_skey(&so->orderProcs[ikey], + cur_elem_trig, dir, + tupdatum, tupnull, array, cur, + &result); } else { - Assert(sktrig_required && required); + Assert(required); /* * This is a required non-array equality strategy scan key, which @@ -1133,7 +1657,7 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * be eliminated by _bt_preprocess_keys. It won't matter if some of * our "true" array scan keys (or even all of them) are non-required. */ - if (required && + if (sktrig_required && required && ((ScanDirectionIsForward(dir) && result > 0) || (ScanDirectionIsBackward(dir) && result < 0))) beyond_end_advance = true; @@ -1148,7 +1672,7 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * array scan keys are considered interesting.) */ all_satisfied = false; - if (required) + if (sktrig_required && required) all_required_satisfied = false; else { @@ -1163,11 +1687,22 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, } } - /* Advance array keys, even when set_elem isn't an exact match */ - if (array && array->cur_elem != set_elem) + /* Advance array keys, even when we don't have an exact match */ + if (array) { - array->cur_elem = set_elem; - cur->sk_argument = array->elem_values[set_elem]; + if (array->num_elems == -1) + { + /* Skip array's new element is tupdatum (or MINVAL/MAXVAL) */ + _bt_skiparray_set_element(rel, cur, array, result, + tupdatum, tupnull); + skip_array_advanced = true; + } + else if (array->cur_elem != set_elem) + { + /* SAOP array's new element is set_elem datum */ + array->cur_elem = set_elem; + cur->sk_argument = array->elem_values[set_elem]; + } } } @@ -1177,11 +1712,19 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * higher-order arrays (might exhaust all the scan's arrays instead, which * ends the top-level scan). */ - if (beyond_end_advance && !_bt_advance_array_keys_increment(scan, dir)) + if (beyond_end_advance && + !_bt_advance_array_keys_increment(scan, dir, &skip_array_advanced)) goto end_toplevel_scan; Assert(_bt_verify_keys_with_arraykeys(scan)); + /* + * Maintain a page-level count of the number of times the scan's array + * keys advanced in a way that affected at least one skip array + */ + if (sktrig_required && skip_array_advanced) + pstate->nskipadvances++; + /* * Does tuple now satisfy our new qual? Recheck with _bt_check_compare. * @@ -1198,6 +1741,12 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * of any required scan key). All that matters is whether caller's tuple * satisfies the new qual, so it's safe to just skip the _bt_check_compare * recheck when we've already determined that it can only return 'false'. + * + * Note: In practice most scan keys are marked required by preprocessing, + * if necessary by generating a preceding skip array. We nevertheless + * often handle array keys marked required as if they were nonrequired. + * This behavior is requested by our _bt_check_compare caller, though only + * when it is passed "forcenonrequired=true" by _bt_checkkeys. */ if ((sktrig_required && all_required_satisfied) || (!sktrig_required && all_satisfied)) @@ -1208,9 +1757,9 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, Assert(all_required_satisfied); /* Recheck _bt_check_compare on behalf of caller */ - if (_bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, - false, false, false, - &continuescan, &nsktrig) && + if (_bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, false, + !sktrig_required, &continuescan, + &nsktrig) && !so->scanBehind) { /* This tuple satisfies the new qual */ @@ -1333,7 +1882,7 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * keys for one or more truncated attribute values (scan keys required in * _either_ scan direction). * - * There is a chance that _bt_checkkeys (which checks so->scanBehind) will + * There is a chance that _bt_readpage (which checks so->scanBehind) will * find that even the sibling leaf page's finaltup is < the new array * keys. When that happens, our optimistic policy will have incurred a * single extra leaf page access that could have been avoided. @@ -1345,26 +1894,12 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * Being pessimistic would also give some scans with non-required arrays a * perverse advantage over similar scans that use required arrays instead. * - * You can think of this as a speculative bet on what the scan is likely - * to find on the next page. It's not much of a gamble, though, since the - * untruncated prefix of attributes must strictly satisfy the new qual. + * This is similar to our scan-level heuristics, below. They also set + * scanBehind to speculatively continue the primscan onto the next page. */ if (so->scanBehind) { - /* - * Truncated high key -- _bt_scanbehind_checkkeys recheck scheduled. - * - * Remember if recheck needs to call _bt_oppodir_checkkeys for next - * page's finaltup (see below comments about "Handle inequalities - * marked required in the opposite scan direction" for why). - */ - so->oppositeDirCheck = has_required_opposite_direction_only; - - /* - * Make sure that any SAOP arrays that were not marked required by - * preprocessing are reset to their first element for this direction - */ - _bt_rewind_nonrequired_arrays(scan, dir); + /* Truncated high key -- _bt_scanbehind_checkkeys recheck scheduled */ } /* @@ -1404,10 +1939,7 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, */ else if (has_required_opposite_direction_only && pstate->finaltup && unlikely(!_bt_oppodir_checkkeys(scan, dir, pstate->finaltup))) - { - _bt_rewind_nonrequired_arrays(scan, dir); goto new_prim_scan; - } continue_scan: @@ -1431,11 +1963,19 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, if (so->scanBehind) { - /* Optimization: skip by setting "look ahead" mechanism's offnum */ + /* + * Remember if recheck needs to call _bt_oppodir_checkkeys for next + * page's finaltup (see above comments about "Handle inequalities + * marked required in the opposite scan direction" for why). + */ + so->oppositeDirCheck = has_required_opposite_direction_only; + + /* + * skip by setting "look ahead" mechanism's offnum for forwards scans + * (backwards scans check scanBehind flag directly instead) + */ if (ScanDirectionIsForward(dir)) pstate->skip = pstate->maxoff + 1; - else - pstate->skip = pstate->minoff - 1; } /* Caller's tuple doesn't match the new qual */ @@ -1454,22 +1994,35 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * read at least one leaf page before the one we're reading now. This * makes primscan scheduling more efficient when scanning subsets of an * index with many distinct attribute values matching many array elements. - * It encourages fewer, larger primitive scans where that makes sense - * (where index descent costs need to be kept under control). + * It encourages fewer, larger primitive scans where that makes sense. + * This will in turn encourage _bt_readpage to apply the pstate.startikey + * optimization more often. + * + * Also continue the ongoing primitive index scan when it is still on the + * first page if there have been more than NSKIPADVANCES_THRESHOLD calls + * here that each advanced at least one of the scan's skip arrays + * (deliberately ignore advancements that only affected SAOP arrays here). + * A page that cycles through this many skip array elements is quite + * likely to neighbor similar pages, that we'll also need to read. * - * Note: This heuristic isn't as aggressive as you might think. We're + * Note: These heuristics aren't as aggressive as you might think. We're * conservative about allowing a primitive scan to step from the first * leaf page it reads to the page's sibling page (we only allow it on - * first pages whose finaltup strongly suggests that it'll work out). + * first pages whose finaltup strongly suggests that it'll work out, as + * well as first pages that have a large number of skip array advances). * Clearing this first page finaltup hurdle is a strong signal in itself. + * + * Note: The NSKIPADVANCES_THRESHOLD heuristic exists only to avoid + * pathological cases. Specifically, cases where a skip scan should just + * behave like a traditional full index scan, but ends up "skipping" again + * and again, descending to the prior leaf page's direct sibling leaf page + * each time. This misbehavior would otherwise be possible during scans + * that never quite manage to "clear the first page finaltup hurdle". */ - if (!pstate->firstpage) + if (!pstate->firstpage || pstate->nskipadvances > NSKIPADVANCES_THRESHOLD) { /* Schedule a recheck once on the next (or previous) page */ so->scanBehind = true; - so->oppositeDirCheck = has_required_opposite_direction_only; - - _bt_rewind_nonrequired_arrays(scan, dir); /* Continue the current primitive scan after all */ goto continue_scan; @@ -1500,60 +2053,18 @@ _bt_advance_array_keys(IndexScanDesc scan, BTReadPageState *pstate, * This ends the entire top-level scan in the current scan direction. * * Note: The scan's arrays (including any non-required arrays) are now in - * their final positions for the current scan direction. If the scan - * direction happens to change, then the arrays will already be in their - * first positions for what will then be the current scan direction. - */ - pstate->continuescan = false; /* Tell _bt_readpage we're done... */ - so->needPrimScan = false; /* ...and don't call _bt_first again */ - - /* Caller's tuple doesn't match any qual */ - return false; -} - -#ifdef USE_ASSERT_CHECKING -/* - * Verify that the scan's qual state matches what we expect at the point that - * _bt_start_prim_scan is about to start a just-scheduled new primitive scan. - * - * We enforce a rule against non-required array scan keys: they must start out - * with whatever element is the first for the scan's current scan direction. - * See _bt_rewind_nonrequired_arrays comments for an explanation. - */ -static bool -_bt_verify_arrays_bt_first(IndexScanDesc scan, ScanDirection dir) -{ - BTScanOpaque so = (BTScanOpaque) scan->opaque; - int arrayidx = 0; - - for (int ikey = 0; ikey < so->numberOfKeys; ikey++) - { - ScanKey cur = so->keyData + ikey; - BTArrayKeyInfo *array = NULL; - int first_elem_dir; - - if (!(cur->sk_flags & SK_SEARCHARRAY) || - cur->sk_strategy != BTEqualStrategyNumber) - continue; - - array = &so->arrayKeys[arrayidx++]; - - if (((cur->sk_flags & SK_BT_REQFWD) && ScanDirectionIsForward(dir)) || - ((cur->sk_flags & SK_BT_REQBKWD) && ScanDirectionIsBackward(dir))) - continue; - - if (ScanDirectionIsForward(dir)) - first_elem_dir = 0; - else - first_elem_dir = array->num_elems - 1; - - if (array->cur_elem != first_elem_dir) - return false; - } + * their final positions for the current scan direction. If the scan + * direction happens to change, then the arrays will already be in their + * first positions for what will then be the current scan direction. + */ + pstate->continuescan = false; /* Tell _bt_readpage we're done... */ + so->needPrimScan = false; /* ...and don't call _bt_first again */ - return _bt_verify_keys_with_arraykeys(scan); + /* Caller's tuple doesn't match any qual */ + return false; } +#ifdef USE_ASSERT_CHECKING /* * Verify that the scan's "so->keyData[]" scan keys are in agreement with * its array key state @@ -1564,6 +2075,7 @@ _bt_verify_keys_with_arraykeys(IndexScanDesc scan) BTScanOpaque so = (BTScanOpaque) scan->opaque; int last_sk_attno = InvalidAttrNumber, arrayidx = 0; + bool nonrequiredseen = false; if (!so->qual_ok) return false; @@ -1581,13 +2093,22 @@ _bt_verify_keys_with_arraykeys(IndexScanDesc scan) if (array->scan_key != ikey) return false; - if (array->num_elems <= 0) + if (array->num_elems == 0 || array->num_elems < -1) return false; - if (cur->sk_argument != array->elem_values[array->cur_elem]) - return false; - if (last_sk_attno > cur->sk_attno) + if (array->num_elems != -1 && + cur->sk_argument != array->elem_values[array->cur_elem]) return false; + if (cur->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)) + { + if (last_sk_attno > cur->sk_attno) + return false; + if (nonrequiredseen) + return false; + } + else + nonrequiredseen = true; + last_sk_attno = cur->sk_attno; } @@ -1611,17 +2132,14 @@ _bt_verify_keys_with_arraykeys(IndexScanDesc scan) * the page to the right. * * Advances the scan's array keys when necessary for arrayKeys=true callers. - * Caller can avoid all array related side-effects when calling just to do a - * page continuescan precheck -- pass arrayKeys=false for that. Scans without - * any arrays keys must always pass arrayKeys=false. + * Scans without any array keys must always pass arrayKeys=false. * * Also stops and starts primitive index scans for arrayKeys=true callers. * Scans with array keys are required to set up page state that helps us with * this. The page's finaltup tuple (the page high key for a forward scan, or * the page's first non-pivot tuple for a backward scan) must be set in - * pstate.finaltup ahead of the first call here for the page (or possibly the - * first call after an initial continuescan-setting page precheck call). Set - * this to NULL for rightmost page (or the leftmost page for backwards scans). + * pstate.finaltup ahead of the first call here for the page. Set this to + * NULL for rightmost page (or the leftmost page for backwards scans). * * scan: index scan descriptor (containing a search-type scankey) * pstate: page level input and output parameters @@ -1636,42 +2154,46 @@ _bt_checkkeys(IndexScanDesc scan, BTReadPageState *pstate, bool arrayKeys, TupleDesc tupdesc = RelationGetDescr(scan->indexRelation); BTScanOpaque so = (BTScanOpaque) scan->opaque; ScanDirection dir = so->currPos.dir; - int ikey = 0; + int ikey = pstate->startikey; bool res; Assert(BTreeTupleGetNAtts(tuple, scan->indexRelation) == tupnatts); Assert(!so->needPrimScan && !so->scanBehind && !so->oppositeDirCheck); + Assert(arrayKeys || so->numArrayKeys == 0); - res = _bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, - arrayKeys, pstate->prechecked, pstate->firstmatch, - &pstate->continuescan, &ikey); + res = _bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, arrayKeys, + pstate->forcenonrequired, &pstate->continuescan, + &ikey); + /* + * If _bt_check_compare relied on the pstate.startikey optimization, call + * again (in assert-enabled builds) to verify it didn't affect our answer. + * + * Note: we can't do this when !pstate.forcenonrequired, since any arrays + * before pstate.startikey won't have advanced on this page at all. + */ + Assert(!pstate->forcenonrequired || arrayKeys); #ifdef USE_ASSERT_CHECKING - if (!arrayKeys && so->numArrayKeys) - { - /* - * This is a continuescan precheck call for a scan with array keys. - * - * Assert that the scan isn't in danger of becoming confused. - */ - Assert(!so->scanBehind && !so->oppositeDirCheck); - Assert(!pstate->prechecked && !pstate->firstmatch); - Assert(!_bt_tuple_before_array_skeys(scan, dir, tuple, tupdesc, - tupnatts, false, 0, NULL)); - } - if (pstate->prechecked || pstate->firstmatch) + if (pstate->startikey > 0 && !pstate->forcenonrequired) { - bool dcontinuescan; + bool dres, + dcontinuescan; int dikey = 0; + /* Pass arrayKeys=false to avoid array side-effects */ + dres = _bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, false, + pstate->forcenonrequired, &dcontinuescan, + &dikey); + Assert(res == dres); + Assert(pstate->continuescan == dcontinuescan); + /* - * Call relied on continuescan/firstmatch prechecks -- assert that we - * get the same answer without those optimizations + * Should also get the same ikey result. We need a slightly weaker + * assertion during arrayKeys calls, since they might be using an + * array that couldn't be marked required during preprocessing. */ - Assert(res == _bt_check_compare(scan, dir, tuple, tupnatts, tupdesc, - false, false, false, - &dcontinuescan, &dikey)); - Assert(pstate->continuescan == dcontinuescan); + Assert(arrayKeys || ikey == dikey); + Assert(ikey <= dikey); } #endif @@ -1692,6 +2214,7 @@ _bt_checkkeys(IndexScanDesc scan, BTReadPageState *pstate, bool arrayKeys, * It's also possible that the scan is still _before_ the _start_ of * tuples matching the current set of array keys. Check for that first. */ + Assert(!pstate->forcenonrequired); if (_bt_tuple_before_array_skeys(scan, dir, tuple, tupdesc, tupnatts, true, ikey, NULL)) { @@ -1760,11 +2283,27 @@ _bt_scanbehind_checkkeys(IndexScanDesc scan, ScanDirection dir, TupleDesc tupdesc = RelationGetDescr(rel); BTScanOpaque so = (BTScanOpaque) scan->opaque; int nfinaltupatts = BTreeTupleGetNAtts(finaltup, rel); + bool scanBehind; Assert(so->numArrayKeys); if (_bt_tuple_before_array_skeys(scan, dir, finaltup, tupdesc, - nfinaltupatts, false, 0, NULL)) + nfinaltupatts, false, 0, &scanBehind)) + return false; + + /* + * If scanBehind was set, all of the untruncated attribute values from + * finaltup that correspond to an array match the array's current element, + * but there are other keys associated with truncated suffix attributes. + * Array advancement must have incremented the scan's arrays on the + * previous page, resulting in a set of array keys that happen to be an + * exact match for the current page high key's untruncated prefix values. + * + * This page definitely doesn't contain tuples that the scan will need to + * return. The next page may or may not contain relevant tuples. Handle + * this by cutting our losses and starting a new primscan. + */ + if (scanBehind) return false; if (!so->oppositeDirCheck) @@ -1805,8 +2344,9 @@ _bt_oppodir_checkkeys(IndexScanDesc scan, ScanDirection dir, Assert(so->numArrayKeys); - _bt_check_compare(scan, flipped, finaltup, nfinaltupatts, tupdesc, - false, false, false, &continuescan, &ikey); + _bt_check_compare(scan, flipped, finaltup, nfinaltupatts, tupdesc, false, + false, &continuescan, + &ikey); if (!continuescan && so->keyData[ikey].sk_strategy != BTEqualStrategyNumber) return false; @@ -1814,6 +2354,300 @@ _bt_oppodir_checkkeys(IndexScanDesc scan, ScanDirection dir, return true; } +/* + * Determines an offset to the first scan key (an so->keyData[]-wise offset) + * that is _not_ guaranteed to be satisfied by every tuple from pstate.page, + * which is set in pstate.startikey for _bt_checkkeys calls for the page. + * This allows caller to save cycles on comparisons of a prefix of keys while + * reading pstate.page. + * + * Also determines if later calls to _bt_checkkeys (for pstate.page) should be + * forced to treat all required scan keys >= pstate.startikey as nonrequired + * (that is, if they're to be treated as if any SK_BT_REQFWD/SK_BT_REQBKWD + * markings that were set by preprocessing were not set at all, for the + * duration of _bt_checkkeys calls prior to the call for pstate.finaltup). + * This is indicated to caller by setting pstate.forcenonrequired. + * + * Call here at the start of reading a leaf page beyond the first one for the + * primitive index scan. We consider all non-pivot tuples, so it doesn't make + * sense to call here when only a subset of those tuples can ever be read. + * This is also a good idea on performance grounds; not calling here when on + * the first page (first for the current primitive scan) avoids wasting cycles + * during selective point queries. They typically don't stand to gain as much + * when we can set pstate.startikey, and are likely to notice the overhead of + * calling here. (Also, allowing pstate.forcenonrequired to be set on a + * primscan's first page would mislead _bt_advance_array_keys, which expects + * pstate.nskipadvances to be representative of every first page's key space.) + * + * Caller must call _bt_start_array_keys and reset startikey/forcenonrequired + * ahead of the finaltup _bt_checkkeys call when we set forcenonrequired=true. + * This will give _bt_checkkeys the opportunity to call _bt_advance_array_keys + * with sktrig_required=true, restoring the invariant that the scan's required + * arrays always track the scan's progress through the index's key space. + * Caller won't need to do this on the rightmost/leftmost page in the index + * (where pstate.finaltup isn't ever set), since forcenonrequired will never + * be set here in the first place. + */ +void +_bt_set_startikey(IndexScanDesc scan, BTReadPageState *pstate) +{ + BTScanOpaque so = (BTScanOpaque) scan->opaque; + Relation rel = scan->indexRelation; + TupleDesc tupdesc = RelationGetDescr(rel); + ItemId iid; + IndexTuple firsttup, + lasttup; + int startikey = 0, + arrayidx = 0, + firstchangingattnum; + bool start_past_saop_eq = false; + + Assert(!so->scanBehind); + Assert(pstate->minoff < pstate->maxoff); + Assert(!pstate->firstpage); + Assert(pstate->startikey == 0); + Assert(!so->numArrayKeys || pstate->finaltup || + P_RIGHTMOST(BTPageGetOpaque(pstate->page)) || + P_LEFTMOST(BTPageGetOpaque(pstate->page))); + + if (so->numberOfKeys == 0) + return; + + /* minoff is an offset to the lowest non-pivot tuple on the page */ + iid = PageGetItemId(pstate->page, pstate->minoff); + firsttup = (IndexTuple) PageGetItem(pstate->page, iid); + + /* maxoff is an offset to the highest non-pivot tuple on the page */ + iid = PageGetItemId(pstate->page, pstate->maxoff); + lasttup = (IndexTuple) PageGetItem(pstate->page, iid); + + /* Determine the first attribute whose values change on caller's page */ + firstchangingattnum = _bt_keep_natts_fast(rel, firsttup, lasttup); + + for (; startikey < so->numberOfKeys; startikey++) + { + ScanKey key = so->keyData + startikey; + BTArrayKeyInfo *array; + Datum firstdatum, + lastdatum; + bool firstnull, + lastnull; + int32 result; + + /* + * Determine if it's safe to set pstate.startikey to an offset to a + * key that comes after this key, by examining this key + */ + if (!(key->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD))) + { + /* Scan key isn't marked required (corner case) */ + break; /* unsafe */ + } + if (key->sk_flags & SK_ROW_HEADER) + { + /* RowCompare inequalities currently aren't supported */ + break; /* "unsafe" */ + } + if (key->sk_strategy != BTEqualStrategyNumber) + { + /* + * Scalar inequality key. + * + * It's definitely safe for _bt_checkkeys to avoid assessing this + * inequality when the page's first and last non-pivot tuples both + * satisfy the inequality (since the same must also be true of all + * the tuples in between these two). + * + * Unlike the "=" case, it doesn't matter if this attribute has + * more than one distinct value (though it _is_ necessary for any + * and all _prior_ attributes to contain no more than one distinct + * value amongst all of the tuples from pstate.page). + */ + if (key->sk_attno > firstchangingattnum) /* >, not >= */ + break; /* unsafe, preceding attr has multiple + * distinct values */ + + firstdatum = index_getattr(firsttup, key->sk_attno, tupdesc, &firstnull); + lastdatum = index_getattr(lasttup, key->sk_attno, tupdesc, &lastnull); + + if (key->sk_flags & SK_ISNULL) + { + /* IS NOT NULL key */ + Assert(key->sk_flags & SK_SEARCHNOTNULL); + + if (firstnull || lastnull) + break; /* unsafe */ + + /* Safe, IS NOT NULL key satisfied by every tuple */ + continue; + } + + /* Test firsttup */ + if (firstnull || + !DatumGetBool(FunctionCall2Coll(&key->sk_func, + key->sk_collation, firstdatum, + key->sk_argument))) + break; /* unsafe */ + + /* Test lasttup */ + if (lastnull || + !DatumGetBool(FunctionCall2Coll(&key->sk_func, + key->sk_collation, lastdatum, + key->sk_argument))) + break; /* unsafe */ + + /* Safe, scalar inequality satisfied by every tuple */ + continue; + } + + /* Some = key (could be a scalar = key, could be an array = key) */ + Assert(key->sk_strategy == BTEqualStrategyNumber); + + if (!(key->sk_flags & SK_SEARCHARRAY)) + { + /* + * Scalar = key (possibly an IS NULL key). + * + * It is unsafe to set pstate.startikey to an ikey beyond this + * key, unless the = key is satisfied by every possible tuple on + * the page (possible only when attribute has just one distinct + * value among all tuples on the page). + */ + if (key->sk_attno >= firstchangingattnum) + break; /* unsafe, multiple distinct attr values */ + + firstdatum = index_getattr(firsttup, key->sk_attno, tupdesc, + &firstnull); + if (key->sk_flags & SK_ISNULL) + { + /* IS NULL key */ + Assert(key->sk_flags & SK_SEARCHNULL); + + if (!firstnull) + break; /* unsafe */ + + /* Safe, IS NULL key satisfied by every tuple */ + continue; + } + if (firstnull || + !DatumGetBool(FunctionCall2Coll(&key->sk_func, + key->sk_collation, firstdatum, + key->sk_argument))) + break; /* unsafe */ + + /* Safe, scalar = key satisfied by every tuple */ + continue; + } + + /* = array key (could be a SAOP array, could be a skip array) */ + array = &so->arrayKeys[arrayidx++]; + Assert(array->scan_key == startikey); + if (array->num_elems != -1) + { + /* + * SAOP array = key. + * + * Handle this like we handle scalar = keys (though binary search + * for a matching element, to avoid relying on key's sk_argument). + */ + if (key->sk_attno >= firstchangingattnum) + break; /* unsafe, multiple distinct attr values */ + + firstdatum = index_getattr(firsttup, key->sk_attno, tupdesc, + &firstnull); + _bt_binsrch_array_skey(&so->orderProcs[startikey], + false, NoMovementScanDirection, + firstdatum, firstnull, array, key, + &result); + if (result != 0) + break; /* unsafe */ + + /* Safe, SAOP = key satisfied by every tuple */ + start_past_saop_eq = true; + continue; + } + + /* + * Skip array = key + */ + Assert(key->sk_flags & SK_BT_SKIP); + if (array->null_elem) + { + /* + * Non-range skip array = key. + * + * Safe, non-range skip array "satisfied" by every tuple on page + * (safe even when "key->sk_attno > firstchangingattnum"). + */ + continue; + } + + /* + * Range skip array = key. + * + * Handle this like we handle scalar inequality keys (but avoid using + * key's sk_argument directly, as in the SAOP array case). + */ + if (key->sk_attno > firstchangingattnum) /* >, not >= */ + break; /* unsafe, preceding attr has multiple + * distinct values */ + + firstdatum = index_getattr(firsttup, key->sk_attno, tupdesc, &firstnull); + lastdatum = index_getattr(lasttup, key->sk_attno, tupdesc, &lastnull); + + /* Test firsttup */ + _bt_binsrch_skiparray_skey(false, ForwardScanDirection, + firstdatum, firstnull, array, key, + &result); + if (result != 0) + break; /* unsafe */ + + /* Test lasttup */ + _bt_binsrch_skiparray_skey(false, ForwardScanDirection, + lastdatum, lastnull, array, key, + &result); + if (result != 0) + break; /* unsafe */ + + /* Safe, range skip array satisfied by every tuple on page */ + } + + /* + * Use of forcenonrequired is typically undesirable, since it'll force + * _bt_readpage caller to read every tuple on the page -- even though, in + * general, it might well be possible to end the scan on an earlier tuple. + * However, caller must use forcenonrequired when start_past_saop_eq=true, + * since the usual required array behavior might fail to roll over to the + * SAOP array. + * + * We always prefer forcenonrequired=true during scans with skip arrays + * (except on the first page of each primitive index scan), though -- even + * when "startikey == 0". That way, _bt_advance_array_keys's low-order + * key precheck optimization can always be used (unless on the first page + * of the scan). It seems slightly preferable to check more tuples when + * that allows us to do significantly less skip array maintenance. + */ + pstate->forcenonrequired = (start_past_saop_eq || so->skipScan); + pstate->startikey = startikey; + + /* + * _bt_readpage caller is required to call _bt_checkkeys against page's + * finaltup with forcenonrequired=false whenever we initially set + * forcenonrequired=true. That way the scan's arrays will reliably track + * its progress through the index's key space. + * + * We don't expect this when _bt_readpage caller has no finaltup due to + * its page being the rightmost (or the leftmost, during backwards scans). + * When we see that _bt_readpage has no finaltup, back out of everything. + */ + Assert(!pstate->forcenonrequired || so->numArrayKeys); + if (pstate->forcenonrequired && !pstate->finaltup) + { + pstate->forcenonrequired = false; + pstate->startikey = 0; + } +} + /* * Test whether an indextuple satisfies current scan condition. * @@ -1843,19 +2677,27 @@ _bt_oppodir_checkkeys(IndexScanDesc scan, ScanDirection dir, * by the current array key, or if they're truly unsatisfied (that is, if * they're unsatisfied by every possible array key). * - * Though we advance non-required array keys on our own, that shouldn't have - * any lasting consequences for the scan. By definition, non-required arrays - * have no fixed relationship with the scan's progress. (There are delicate - * considerations for non-required arrays when the arrays need to be advanced - * following our setting continuescan to false, but that doesn't concern us.) - * * Pass advancenonrequired=false to avoid all array related side effects. * This allows _bt_advance_array_keys caller to avoid infinite recursion. + * + * Pass forcenonrequired=true to instruct us to treat all keys as nonrequired. + * This is used to make it safe to temporarily stop properly maintaining the + * scan's required arrays. _bt_checkkeys caller (_bt_readpage, actually) + * determines a prefix of keys that must satisfy every possible corresponding + * index attribute value from its page, which is passed to us via *ikey arg + * (this is the first key that might be unsatisfied by tuples on the page). + * Obviously, we won't maintain any array keys from before *ikey, so it's + * quite possible for such arrays to "fall behind" the index's keyspace. + * Caller will need to "catch up" by passing forcenonrequired=true (alongside + * an *ikey=0) once the page's finaltup is reached. + * + * Note: it's safe to pass an *ikey > 0 with forcenonrequired=false, but only + * when caller determines that it won't affect array maintenance. */ static bool _bt_check_compare(IndexScanDesc scan, ScanDirection dir, IndexTuple tuple, int tupnatts, TupleDesc tupdesc, - bool advancenonrequired, bool prechecked, bool firstmatch, + bool advancenonrequired, bool forcenonrequired, bool *continuescan, int *ikey) { BTScanOpaque so = (BTScanOpaque) scan->opaque; @@ -1872,36 +2714,20 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, /* * Check if the key is required in the current scan direction, in the - * opposite scan direction _only_, or in neither direction + * opposite scan direction _only_, or in neither direction (except + * when we're forced to treat all scan keys as nonrequired) */ - if (((key->sk_flags & SK_BT_REQFWD) && ScanDirectionIsForward(dir)) || - ((key->sk_flags & SK_BT_REQBKWD) && ScanDirectionIsBackward(dir))) + if (forcenonrequired) + { + /* treating scan's keys as non-required */ + } + else if (((key->sk_flags & SK_BT_REQFWD) && ScanDirectionIsForward(dir)) || + ((key->sk_flags & SK_BT_REQBKWD) && ScanDirectionIsBackward(dir))) requiredSameDir = true; else if (((key->sk_flags & SK_BT_REQFWD) && ScanDirectionIsBackward(dir)) || ((key->sk_flags & SK_BT_REQBKWD) && ScanDirectionIsForward(dir))) requiredOppositeDirOnly = true; - /* - * If the caller told us the *continuescan flag is known to be true - * for the last item on the page, then we know the keys required for - * the current direction scan should be matched. Otherwise, the - * *continuescan flag would be set for the current item and - * subsequently the last item on the page accordingly. - * - * If the key is required for the opposite direction scan, we can skip - * the check if the caller tells us there was already at least one - * matching item on the page. Also, we require the *continuescan flag - * to be true for the last item on the page to know there are no - * NULLs. - * - * Both cases above work except for the row keys, where NULLs could be - * found in the middle of matching values. - */ - if (prechecked && - (requiredSameDir || (requiredOppositeDirOnly && firstmatch)) && - !(key->sk_flags & SK_ROW_HEADER)) - continue; - if (key->sk_attno > tupnatts) { /* @@ -1914,11 +2740,35 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, continue; } + /* + * A skip array scan key uses one of several sentinel values. We just + * fall back on _bt_tuple_before_array_skeys when we see such a value. + */ + if (key->sk_flags & (SK_BT_MINVAL | SK_BT_MAXVAL | + SK_BT_NEXT | SK_BT_PRIOR)) + { + Assert(key->sk_flags & SK_SEARCHARRAY); + Assert(key->sk_flags & SK_BT_SKIP); + Assert(requiredSameDir || forcenonrequired); + + /* + * Cannot fall back on _bt_tuple_before_array_skeys when we're + * treating the scan's keys as nonrequired, though. Just handle + * this like any other non-required equality-type array key. + */ + if (forcenonrequired) + return _bt_advance_array_keys(scan, NULL, tuple, tupnatts, + tupdesc, *ikey, false); + + *continuescan = false; + return false; + } + /* row-comparison keys need special processing */ if (key->sk_flags & SK_ROW_HEADER) { if (_bt_check_rowcompare(key, tuple, tupnatts, tupdesc, dir, - continuescan)) + forcenonrequired, continuescan)) continue; return false; } @@ -1939,6 +2789,7 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, else { Assert(key->sk_flags & SK_SEARCHNOTNULL); + Assert(!(key->sk_flags & SK_BT_SKIP)); if (!isNull) continue; /* tuple satisfies this qual */ } @@ -1950,15 +2801,37 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, */ if (requiredSameDir) *continuescan = false; + else if (unlikely(key->sk_flags & SK_BT_SKIP)) + { + /* + * If we're treating scan keys as nonrequired, and encounter a + * skip array scan key whose current element is NULL, then it + * must be a non-range skip array. It must be satisfied, so + * there's no need to call _bt_advance_array_keys to check. + */ + Assert(forcenonrequired && *ikey > 0); + continue; + } /* - * In any case, this indextuple doesn't match the qual. + * This indextuple doesn't match the qual. */ return false; } if (isNull) { + /* + * Scalar scan key isn't satisfied by NULL tuple value. + * + * If we're treating scan keys as nonrequired, and key is for a + * skip array, then we must attempt to advance the array to NULL + * (if we're successful then the tuple might match the qual). + */ + if (unlikely(forcenonrequired && key->sk_flags & SK_BT_SKIP)) + return _bt_advance_array_keys(scan, NULL, tuple, tupnatts, + tupdesc, *ikey, false); + if (key->sk_flags & SK_BT_NULLS_FIRST) { /* @@ -1973,7 +2846,7 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, * (_bt_advance_array_keys also relies on this behavior during * forward scans.) */ - if ((key->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)) && + if ((requiredSameDir || requiredOppositeDirOnly) && ScanDirectionIsBackward(dir)) *continuescan = false; } @@ -1991,26 +2864,18 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, * (_bt_advance_array_keys also relies on this behavior during * backward scans.) */ - if ((key->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)) && + if ((requiredSameDir || requiredOppositeDirOnly) && ScanDirectionIsForward(dir)) *continuescan = false; } /* - * In any case, this indextuple doesn't match the qual. + * This indextuple doesn't match the qual. */ return false; } - /* - * Apply the key-checking function, though only if we must. - * - * When a key is required in the opposite-of-scan direction _only_, - * then it must already be satisfied if firstmatch=true indicates that - * an earlier tuple from this same page satisfied it earlier on. - */ - if (!(requiredOppositeDirOnly && firstmatch) && - !DatumGetBool(FunctionCall2Coll(&key->sk_func, key->sk_collation, + if (!DatumGetBool(FunctionCall2Coll(&key->sk_func, key->sk_collation, datum, key->sk_argument))) { /* @@ -2060,7 +2925,8 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir, */ static bool _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, - TupleDesc tupdesc, ScanDirection dir, bool *continuescan) + TupleDesc tupdesc, ScanDirection dir, + bool forcenonrequired, bool *continuescan) { ScanKey subkey = (ScanKey) DatumGetPointer(skey->sk_argument); int32 cmpresult = 0; @@ -2077,6 +2943,31 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, Assert(subkey->sk_flags & SK_ROW_MEMBER); + /* When a NULL row member is compared, the row never matches */ + if (subkey->sk_flags & SK_ISNULL) + { + /* + * Unlike the simple-scankey case, this isn't a disallowed case + * (except when it's the first row element that has the NULL arg). + * But it can never match. If all the earlier row comparison + * columns are required for the scan direction, we can stop the + * scan, because there can't be another tuple that will succeed. + */ + Assert(subkey != (ScanKey) DatumGetPointer(skey->sk_argument)); + subkey--; + if (forcenonrequired) + { + /* treating scan's keys as non-required */ + } + else if ((subkey->sk_flags & SK_BT_REQFWD) && + ScanDirectionIsForward(dir)) + *continuescan = false; + else if ((subkey->sk_flags & SK_BT_REQBKWD) && + ScanDirectionIsBackward(dir)) + *continuescan = false; + return false; + } + if (subkey->sk_attno > tupnatts) { /* @@ -2086,11 +2977,7 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, * attribute passes the qual. */ Assert(BTreeTupleIsPivot(tuple)); - cmpresult = 0; - if (subkey->sk_flags & SK_ROW_END) - break; - subkey++; - continue; + return true; } datum = index_getattr(tuple, @@ -2100,21 +2987,47 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, if (isNull) { - if (subkey->sk_flags & SK_BT_NULLS_FIRST) + int reqflags; + + if (forcenonrequired) + { + /* treating scan's keys as non-required */ + } + else if (subkey->sk_flags & SK_BT_NULLS_FIRST) { /* * Since NULLs are sorted before non-NULLs, we know we have * reached the lower limit of the range of values for this * index attr. On a backward scan, we can stop if this qual - * is one of the "must match" subset. We can stop regardless - * of whether the qual is > or <, so long as it's required, - * because it's not possible for any future tuples to pass. On - * a forward scan, however, we must keep going, because we may - * have initially positioned to the start of the index. - * (_bt_advance_array_keys also relies on this behavior during - * forward scans.) + * is one of the "must match" subset. However, on a forwards + * scan, we must keep going, because we may have initially + * positioned to the start of the index. + * + * All required NULLS FIRST > row members can use NULL tuple + * values to end backwards scans, just like with other values. + * A qual "WHERE (a, b, c) > (9, 42, 'foo')" can terminate a + * backwards scan upon reaching the index's rightmost "a = 9" + * tuple whose "b" column contains a NULL (if not sooner). + * Since "b" is NULLS FIRST, we can treat its NULLs as "<" 42. + */ + reqflags = SK_BT_REQBKWD; + + /* + * When a most significant required NULLS FIRST < row compare + * member sees NULL tuple values during a backwards scan, it + * signals the end of matches for the whole row compare/scan. + * A qual "WHERE (a, b, c) < (9, 42, 'foo')" will terminate a + * backwards scan upon reaching the rightmost tuple whose "a" + * column has a NULL. The "a" NULL value is "<" 9, and yet + * our < row compare will still end the scan. (This isn't + * safe with later/lower-order row members. Notice that it + * can only happen with an "a" NULL some time after the scan + * completely stops needing to use its "b" and "c" members.) */ - if ((subkey->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)) && + if (subkey == (ScanKey) DatumGetPointer(skey->sk_argument)) + reqflags |= SK_BT_REQFWD; /* safe, first row member */ + + if ((subkey->sk_flags & reqflags) && ScanDirectionIsBackward(dir)) *continuescan = false; } @@ -2124,15 +3037,35 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, * Since NULLs are sorted after non-NULLs, we know we have * reached the upper limit of the range of values for this * index attr. On a forward scan, we can stop if this qual is - * one of the "must match" subset. We can stop regardless of - * whether the qual is > or <, so long as it's required, - * because it's not possible for any future tuples to pass. On - * a backward scan, however, we must keep going, because we - * may have initially positioned to the end of the index. - * (_bt_advance_array_keys also relies on this behavior during - * backward scans.) + * one of the "must match" subset. However, on a backward + * scan, we must keep going, because we may have initially + * positioned to the end of the index. + * + * All required NULLS LAST < row members can use NULL tuple + * values to end forwards scans, just like with other values. + * A qual "WHERE (a, b, c) < (9, 42, 'foo')" can terminate a + * forwards scan upon reaching the index's leftmost "a = 9" + * tuple whose "b" column contains a NULL (if not sooner). + * Since "b" is NULLS LAST, we can treat its NULLs as ">" 42. + */ + reqflags = SK_BT_REQFWD; + + /* + * When a most significant required NULLS LAST > row compare + * member sees NULL tuple values during a forwards scan, it + * signals the end of matches for the whole row compare/scan. + * A qual "WHERE (a, b, c) > (9, 42, 'foo')" will terminate a + * forwards scan upon reaching the leftmost tuple whose "a" + * column has a NULL. The "a" NULL value is ">" 9, and yet + * our > row compare will end the scan. (This isn't safe with + * later/lower-order row members. Notice that it can only + * happen with an "a" NULL some time after the scan completely + * stops needing to use its "b" and "c" members.) */ - if ((subkey->sk_flags & (SK_BT_REQFWD | SK_BT_REQBKWD)) && + if (subkey == (ScanKey) DatumGetPointer(skey->sk_argument)) + reqflags |= SK_BT_REQBKWD; /* safe, first row member */ + + if ((subkey->sk_flags & reqflags) && ScanDirectionIsForward(dir)) *continuescan = false; } @@ -2143,26 +3076,6 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, return false; } - if (subkey->sk_flags & SK_ISNULL) - { - /* - * Unlike the simple-scankey case, this isn't a disallowed case - * (except when it's the first row element that has the NULL arg). - * But it can never match. If all the earlier row comparison - * columns are required for the scan direction, we can stop the - * scan, because there can't be another tuple that will succeed. - */ - Assert(subkey != (ScanKey) DatumGetPointer(skey->sk_argument)); - subkey--; - if ((subkey->sk_flags & SK_BT_REQFWD) && - ScanDirectionIsForward(dir)) - *continuescan = false; - else if ((subkey->sk_flags & SK_BT_REQBKWD) && - ScanDirectionIsBackward(dir)) - *continuescan = false; - return false; - } - /* Perform the test --- three-way comparison not bool operator */ cmpresult = DatumGetInt32(FunctionCall2Coll(&subkey->sk_func, subkey->sk_collation, @@ -2207,7 +3120,7 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, break; } - if (!result) + if (!result && !forcenonrequired) { /* * Tuple fails this qual. If it's a required qual for the current @@ -2251,6 +3164,8 @@ _bt_checkkeys_look_ahead(IndexScanDesc scan, BTReadPageState *pstate, OffsetNumber aheadoffnum; IndexTuple ahead; + Assert(!pstate->forcenonrequired); + /* Avoid looking ahead when comparing the page high key */ if (pstate->offnum < pstate->minoff) return; @@ -2319,87 +3234,85 @@ _bt_checkkeys_look_ahead(IndexScanDesc scan, BTReadPageState *pstate, * current page and killed tuples thereon (generally, this should only be * called if so->numKilled > 0). * - * The caller does not have a lock on the page and may or may not have the - * page pinned in a buffer. Note that read-lock is sufficient for setting - * LP_DEAD status (which is only a hint). - * - * We match items by heap TID before assuming they are the right ones to - * delete. We cope with cases where items have moved right due to insertions. - * If an item has moved off the current page due to a split, we'll fail to - * find it and do nothing (this is not an error case --- we assume the item - * will eventually get marked in a future indexscan). - * - * Note that if we hold a pin on the target page continuously from initially - * reading the items until applying this function, VACUUM cannot have deleted - * any items from the page, and so there is no need to search left from the - * recorded offset. (This observation also guarantees that the item is still - * the right one to delete, which might otherwise be questionable since heap - * TIDs can get recycled.) This holds true even if the page has been modified - * by inserts and page splits, so there is no need to consult the LSN. - * - * If the pin was released after reading the page, then we re-read it. If it - * has been modified since we read it (as determined by the LSN), we dare not - * flag any entries because it is possible that the old entry was vacuumed - * away and the TID was re-used by a completely different heap tuple. + * Caller should not have a lock on the so->currPos page, but must hold a + * buffer pin when !so->dropPin. When we return, it still won't be locked. + * It'll continue to hold whatever pins were held before calling here. + * + * We match items by heap TID before assuming they are the right ones to set + * LP_DEAD. If the scan is one that holds a buffer pin on the target page + * continuously from initially reading the items until applying this function + * (if it is a !so->dropPin scan), VACUUM cannot have deleted any items on the + * page, so the page's TIDs can't have been recycled by now. There's no risk + * that we'll confuse a new index tuple that happens to use a recycled TID + * with a now-removed tuple with the same TID (that used to be on this same + * page). We can't rely on that during scans that drop buffer pins eagerly + * (so->dropPin scans), though, so we must condition setting LP_DEAD bits on + * the page LSN having not changed since back when _bt_readpage saw the page. + * We totally give up on setting LP_DEAD bits when the page LSN changed. + * + * We give up much less often during !so->dropPin scans, but it still happens. + * We cope with cases where items have moved right due to insertions. If an + * item has moved off the current page due to a split, we'll fail to find it + * and just give up on it. */ void _bt_killitems(IndexScanDesc scan) { + Relation rel = scan->indexRelation; BTScanOpaque so = (BTScanOpaque) scan->opaque; Page page; BTPageOpaque opaque; OffsetNumber minoff; OffsetNumber maxoff; - int i; int numKilled = so->numKilled; bool killedsomething = false; - bool droppedpin PG_USED_FOR_ASSERTS_ONLY; + Buffer buf; + Assert(numKilled > 0); Assert(BTScanPosIsValid(so->currPos)); + Assert(scan->heapRelation != NULL); /* can't be a bitmap index scan */ - /* - * Always reset the scan state, so we don't look for same items on other - * pages. - */ + /* Always invalidate so->killedItems[] before leaving so->currPos */ so->numKilled = 0; - if (BTScanPosIsPinned(so->currPos)) + if (!so->dropPin) { /* * We have held the pin on this page since we read the index tuples, * so all we need to do is lock it. The pin will have prevented - * re-use of any TID on the page, so there is no need to check the - * LSN. + * concurrent VACUUMs from recycling any of the TIDs on the page. */ - droppedpin = false; - _bt_lockbuf(scan->indexRelation, so->currPos.buf, BT_READ); - - page = BufferGetPage(so->currPos.buf); + Assert(BTScanPosIsPinned(so->currPos)); + buf = so->currPos.buf; + _bt_lockbuf(rel, buf, BT_READ); } else { - Buffer buf; + XLogRecPtr latestlsn; - droppedpin = true; - /* Attempt to re-read the buffer, getting pin and lock. */ - buf = _bt_getbuf(scan->indexRelation, so->currPos.currPage, BT_READ); + Assert(!BTScanPosIsPinned(so->currPos)); + Assert(RelationNeedsWAL(rel)); + buf = _bt_getbuf(rel, so->currPos.currPage, BT_READ); - page = BufferGetPage(buf); - if (BufferGetLSNAtomic(buf) == so->currPos.lsn) - so->currPos.buf = buf; - else + latestlsn = BufferGetLSNAtomic(buf); + Assert(!XLogRecPtrIsInvalid(so->currPos.lsn)); + Assert(so->currPos.lsn <= latestlsn); + if (so->currPos.lsn != latestlsn) { - /* Modified while not pinned means hinting is not safe. */ - _bt_relbuf(scan->indexRelation, buf); + /* Modified, give up on hinting */ + _bt_relbuf(rel, buf); return; } + + /* Unmodified, hinting is safe */ } + page = BufferGetPage(buf); opaque = BTPageGetOpaque(page); minoff = P_FIRSTDATAKEY(opaque); maxoff = PageGetMaxOffsetNumber(page); - for (i = 0; i < numKilled; i++) + for (int i = 0; i < numKilled; i++) { int itemIndex = so->killedItems[i]; BTScanPosItem *kitem = &so->currPos.items[itemIndex]; @@ -2431,7 +3344,7 @@ _bt_killitems(IndexScanDesc scan) * correctness. * * Note that the page may have been modified in almost any way - * since we first read it (in the !droppedpin case), so it's + * since we first read it (in the !so->dropPin case), so it's * possible that this posting list tuple wasn't a posting list * tuple when we first encountered its heap TIDs. */ @@ -2447,7 +3360,7 @@ _bt_killitems(IndexScanDesc scan) * though only in the common case where the page can't * have been concurrently modified */ - Assert(kitem->indexOffset == offnum || !droppedpin); + Assert(kitem->indexOffset == offnum || !so->dropPin); /* * Read-ahead to later kitems here. @@ -2511,10 +3424,13 @@ _bt_killitems(IndexScanDesc scan) if (killedsomething) { opaque->btpo_flags |= BTP_HAS_GARBAGE; - MarkBufferDirtyHint(so->currPos.buf, true); + MarkBufferDirtyHint(buf, true); } - _bt_unlockbuf(scan->indexRelation, so->currPos.buf); + if (!so->dropPin) + _bt_unlockbuf(rel, buf); + else + _bt_relbuf(rel, buf); } diff --git a/src/backend/access/nbtree/nbtvalidate.c b/src/backend/access/nbtree/nbtvalidate.c index dd6f5a15c653e..817ad358f0caa 100644 --- a/src/backend/access/nbtree/nbtvalidate.c +++ b/src/backend/access/nbtree/nbtvalidate.c @@ -106,6 +106,10 @@ btvalidate(Oid opclassoid) case BTOPTIONS_PROC: ok = check_amoptsproc_signature(procform->amproc); break; + case BTSKIPSUPPORT_PROC: + ok = check_amproc_signature(procform->amproc, VOIDOID, true, + 1, 1, INTERNALOID); + break; default: ereport(INFO, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), diff --git a/src/backend/access/rmgrdesc/replorigindesc.c b/src/backend/access/rmgrdesc/replorigindesc.c index 5dd742339969a..35e3af2903ed2 100644 --- a/src/backend/access/rmgrdesc/replorigindesc.c +++ b/src/backend/access/rmgrdesc/replorigindesc.c @@ -29,7 +29,7 @@ replorigin_desc(StringInfo buf, XLogReaderState *record) xlrec = (xl_replorigin_set *) rec; - appendStringInfo(buf, "set %u; lsn %X/%X; force: %d", + appendStringInfo(buf, "set %u; lsn %X/%08X; force: %d", xlrec->node_id, LSN_FORMAT_ARGS(xlrec->remote_lsn), xlrec->force); diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c index 715cc1f7bad66..f0f696855b9af 100644 --- a/src/backend/access/rmgrdesc/xactdesc.c +++ b/src/backend/access/rmgrdesc/xactdesc.c @@ -252,6 +252,8 @@ ParsePrepareRecord(uint8 info, xl_xact_prepare *xlrec, xl_xact_parsed_prepare *p parsed->nsubxacts = xlrec->nsubxacts; parsed->nrels = xlrec->ncommitrels; parsed->nabortrels = xlrec->nabortrels; + parsed->nstats = xlrec->ncommitstats; + parsed->nabortstats = xlrec->nabortstats; parsed->nmsgs = xlrec->ninvalmsgs; strncpy(parsed->twophase_gid, bufptr, xlrec->gidlen); @@ -357,7 +359,7 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN) { - appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s", + appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s", origin_id, LSN_FORMAT_ARGS(parsed.origin_lsn), timestamptz_to_str(parsed.origin_timestamp)); @@ -382,7 +384,7 @@ xact_desc_abort(StringInfo buf, uint8 info, xl_xact_abort *xlrec, RepOriginId or if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN) { - appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s", + appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s", origin_id, LSN_FORMAT_ARGS(parsed.origin_lsn), timestamptz_to_str(parsed.origin_timestamp)); @@ -416,7 +418,7 @@ xact_desc_prepare(StringInfo buf, uint8 info, xl_xact_prepare *xlrec, RepOriginI * way as PrepareRedoAdd(). */ if (origin_id != InvalidRepOriginId) - appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s", + appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s", origin_id, LSN_FORMAT_ARGS(parsed.origin_lsn), timestamptz_to_str(parsed.origin_timestamp)); diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c index 58040f28656fc..cd6c2a2f650a6 100644 --- a/src/backend/access/rmgrdesc/xlogdesc.c +++ b/src/backend/access/rmgrdesc/xlogdesc.c @@ -65,7 +65,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record) { CheckPoint *checkpoint = (CheckPoint *) rec; - appendStringInfo(buf, "redo %X/%X; " + appendStringInfo(buf, "redo %X/%08X; " "tli %u; prev tli %u; fpw %s; wal_level %s; xid %u:%u; oid %u; multi %u; offset %u; " "oldest xid %u in DB %u; oldest multi %u in DB %u; " "oldest/newest commit timestamp xid: %u/%u; " @@ -111,7 +111,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record) XLogRecPtr startpoint; memcpy(&startpoint, rec, sizeof(XLogRecPtr)); - appendStringInfo(buf, "%X/%X", LSN_FORMAT_ARGS(startpoint)); + appendStringInfo(buf, "%X/%08X", LSN_FORMAT_ARGS(startpoint)); } else if (info == XLOG_PARAMETER_CHANGE) { @@ -156,7 +156,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record) xl_overwrite_contrecord xlrec; memcpy(&xlrec, rec, sizeof(xl_overwrite_contrecord)); - appendStringInfo(buf, "lsn %X/%X; time %s", + appendStringInfo(buf, "lsn %X/%08X; time %s", LSN_FORMAT_ARGS(xlrec.overwritten_lsn), timestamptz_to_str(xlrec.overwrite_time)); } diff --git a/src/backend/access/spgist/spgutils.c b/src/backend/access/spgist/spgutils.c index 95fea74e296f8..9b86c016acb37 100644 --- a/src/backend/access/spgist/spgutils.c +++ b/src/backend/access/spgist/spgutils.c @@ -785,7 +785,7 @@ SpGistGetInnerTypeSize(SpGistTypeDesc *att, Datum datum) else if (att->attlen > 0) size = att->attlen; else - size = VARSIZE_ANY(datum); + size = VARSIZE_ANY(DatumGetPointer(datum)); return MAXALIGN(size); } @@ -804,7 +804,7 @@ memcpyInnerDatum(void *target, SpGistTypeDesc *att, Datum datum) } else { - size = (att->attlen > 0) ? att->attlen : VARSIZE_ANY(datum); + size = (att->attlen > 0) ? att->attlen : VARSIZE_ANY(DatumGetPointer(datum)); memcpy(target, DatumGetPointer(datum), size); } } diff --git a/src/backend/access/spgist/spgvacuum.c b/src/backend/access/spgist/spgvacuum.c index b3df2d8907495..2678f7ab7829a 100644 --- a/src/backend/access/spgist/spgvacuum.c +++ b/src/backend/access/spgist/spgvacuum.c @@ -827,7 +827,8 @@ spgvacuumscan(spgBulkDeleteState *bds) * It is safe to use batchmode as block_range_read_stream_cb takes no * locks. */ - stream = read_stream_begin_relation(READ_STREAM_FULL | + stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE | + READ_STREAM_FULL | READ_STREAM_USE_BATCHING, bds->info->strategy, index, @@ -879,8 +880,6 @@ spgvacuumscan(spgBulkDeleteState *bds) spgprocesspending(bds); } - Assert(read_stream_next_buffer(stream, NULL) == InvalidBuffer); - /* * We have to reset the read stream to use it again. After returning * InvalidBuffer, the read stream API won't invoke our callback again diff --git a/src/backend/access/table/toast_helper.c b/src/backend/access/table/toast_helper.c index b60fab0a4d294..11f97d65367d5 100644 --- a/src/backend/access/table/toast_helper.c +++ b/src/backend/access/table/toast_helper.c @@ -330,7 +330,7 @@ toast_delete_external(Relation rel, const Datum *values, const bool *isnull, if (isnull[i]) continue; - else if (VARATT_IS_EXTERNAL_ONDISK(value)) + else if (VARATT_IS_EXTERNAL_ONDISK(DatumGetPointer(value))) toast_delete_datum(rel, value, is_speculative); } } diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index 48f10bec91e12..e80fbe109cf3c 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -110,9 +110,7 @@ static SlruCtlData XactCtlData; #define XactCtl (&XactCtlData) -static int ZeroCLOGPage(int64 pageno, bool writeXlog); static bool CLOGPagePrecedes(int64 page1, int64 page2); -static void WriteZeroPageXlogRec(int64 pageno); static void WriteTruncateXlogRec(int64 pageno, TransactionId oldestXact, Oid oldestXactDb); static void TransactionIdSetPageStatus(TransactionId xid, int nsubxids, @@ -832,41 +830,8 @@ check_transaction_buffers(int *newval, void **extra, GucSource source) void BootStrapCLOG(void) { - int slotno; - LWLock *lock = SimpleLruGetBankLock(XactCtl, 0); - - LWLockAcquire(lock, LW_EXCLUSIVE); - - /* Create and zero the first page of the commit log */ - slotno = ZeroCLOGPage(0, false); - - /* Make sure it's written out */ - SimpleLruWritePage(XactCtl, slotno); - Assert(!XactCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); -} - -/* - * Initialize (or reinitialize) a page of CLOG to zeroes. - * If writeXlog is true, also emit an XLOG record saying we did this. - * - * The page is not actually written, just set up in shared memory. - * The slot number of the new page is returned. - * - * Control lock must be held at entry, and will be held at exit. - */ -static int -ZeroCLOGPage(int64 pageno, bool writeXlog) -{ - int slotno; - - slotno = SimpleLruZeroPage(XactCtl, pageno); - - if (writeXlog) - WriteZeroPageXlogRec(pageno); - - return slotno; + /* Zero the initial page and flush it to disk */ + SimpleLruZeroAndWritePage(XactCtl, 0); } /* @@ -974,8 +939,9 @@ ExtendCLOG(TransactionId newestXact) LWLockAcquire(lock, LW_EXCLUSIVE); - /* Zero the page and make an XLOG entry about it */ - ZeroCLOGPage(pageno, true); + /* Zero the page and make a WAL entry about it */ + SimpleLruZeroPage(XactCtl, pageno); + XLogSimpleInsertInt64(RM_CLOG_ID, CLOG_ZEROPAGE, pageno); LWLockRelease(lock); } @@ -1067,17 +1033,6 @@ CLOGPagePrecedes(int64 page1, int64 page2) } -/* - * Write a ZEROPAGE xlog record - */ -static void -WriteZeroPageXlogRec(int64 pageno) -{ - XLogBeginInsert(); - XLogRegisterData(&pageno, sizeof(pageno)); - (void) XLogInsert(RM_CLOG_ID, CLOG_ZEROPAGE); -} - /* * Write a TRUNCATE xlog record * @@ -1114,19 +1069,9 @@ clog_redo(XLogReaderState *record) if (info == CLOG_ZEROPAGE) { int64 pageno; - int slotno; - LWLock *lock; memcpy(&pageno, XLogRecGetData(record), sizeof(pageno)); - - lock = SimpleLruGetBankLock(XactCtl, pageno); - LWLockAcquire(lock, LW_EXCLUSIVE); - - slotno = ZeroCLOGPage(pageno, false); - SimpleLruWritePage(XactCtl, slotno); - Assert(!XactCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); + SimpleLruZeroAndWritePage(XactCtl, pageno); } else if (info == CLOG_TRUNCATE) { diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 113fae1437ad8..370b38e048b91 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -114,11 +114,9 @@ static void SetXidCommitTsInPage(TransactionId xid, int nsubxids, static void TransactionIdSetCommitTs(TransactionId xid, TimestampTz ts, RepOriginId nodeid, int slotno); static void error_commit_ts_disabled(void); -static int ZeroCommitTsPage(int64 pageno, bool writeXlog); static bool CommitTsPagePrecedes(int64 page1, int64 page2); static void ActivateCommitTs(void); static void DeactivateCommitTs(void); -static void WriteZeroPageXlogRec(int64 pageno); static void WriteTruncateXlogRec(int64 pageno, TransactionId oldestXid); /* @@ -602,28 +600,6 @@ BootStrapCommitTs(void) */ } -/* - * Initialize (or reinitialize) a page of CommitTs to zeroes. - * If writeXlog is true, also emit an XLOG record saying we did this. - * - * The page is not actually written, just set up in shared memory. - * The slot number of the new page is returned. - * - * Control lock must be held at entry, and will be held at exit. - */ -static int -ZeroCommitTsPage(int64 pageno, bool writeXlog) -{ - int slotno; - - slotno = SimpleLruZeroPage(CommitTsCtl, pageno); - - if (writeXlog) - WriteZeroPageXlogRec(pageno); - - return slotno; -} - /* * This must be called ONCE during postmaster or standalone-backend startup, * after StartupXLOG has initialized TransamVariables->nextXid. @@ -707,6 +683,13 @@ ActivateCommitTs(void) TransactionId xid; int64 pageno; + /* + * During bootstrap, we should not register commit timestamps so skip the + * activation in this case. + */ + if (IsBootstrapProcessingMode()) + return; + /* If we've done this already, there's nothing to do */ LWLockAcquire(CommitTsLock, LW_EXCLUSIVE); if (commitTsShared->commitTsActive) @@ -747,16 +730,7 @@ ActivateCommitTs(void) /* Create the current segment file, if necessary */ if (!SimpleLruDoesPhysicalPageExist(CommitTsCtl, pageno)) - { - LWLock *lock = SimpleLruGetBankLock(CommitTsCtl, pageno); - int slotno; - - LWLockAcquire(lock, LW_EXCLUSIVE); - slotno = ZeroCommitTsPage(pageno, false); - SimpleLruWritePage(CommitTsCtl, slotno); - Assert(!CommitTsCtl->shared->page_dirty[slotno]); - LWLockRelease(lock); - } + SimpleLruZeroAndWritePage(CommitTsCtl, pageno); /* Change the activation status in shared memory. */ LWLockAcquire(CommitTsLock, LW_EXCLUSIVE); @@ -867,8 +841,12 @@ ExtendCommitTs(TransactionId newestXact) LWLockAcquire(lock, LW_EXCLUSIVE); - /* Zero the page and make an XLOG entry about it */ - ZeroCommitTsPage(pageno, !InRecovery); + /* Zero the page ... */ + SimpleLruZeroPage(CommitTsCtl, pageno); + + /* and make a WAL entry about that, unless we're in REDO */ + if (!InRecovery) + XLogSimpleInsertInt64(RM_COMMIT_TS_ID, COMMIT_TS_ZEROPAGE, pageno); LWLockRelease(lock); } @@ -982,17 +960,6 @@ CommitTsPagePrecedes(int64 page1, int64 page2) } -/* - * Write a ZEROPAGE xlog record - */ -static void -WriteZeroPageXlogRec(int64 pageno) -{ - XLogBeginInsert(); - XLogRegisterData(&pageno, sizeof(pageno)); - (void) XLogInsert(RM_COMMIT_TS_ID, COMMIT_TS_ZEROPAGE); -} - /* * Write a TRUNCATE xlog record */ @@ -1023,19 +990,9 @@ commit_ts_redo(XLogReaderState *record) if (info == COMMIT_TS_ZEROPAGE) { int64 pageno; - int slotno; - LWLock *lock; memcpy(&pageno, XLogRecGetData(record), sizeof(pageno)); - - lock = SimpleLruGetBankLock(CommitTsCtl, pageno); - LWLockAcquire(lock, LW_EXCLUSIVE); - - slotno = ZeroCommitTsPage(pageno, false); - SimpleLruWritePage(CommitTsCtl, slotno); - Assert(!CommitTsCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); + SimpleLruZeroAndWritePage(CommitTsCtl, pageno); } else if (info == COMMIT_TS_TRUNCATE) { diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 9d25a7df0d320..8bf59d369f848 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -70,16 +70,11 @@ #include "access/multixact.h" #include "access/slru.h" -#include "access/transam.h" #include "access/twophase.h" #include "access/twophase_rmgr.h" -#include "access/xact.h" #include "access/xlog.h" #include "access/xloginsert.h" #include "access/xlogutils.h" -#include "commands/dbcommands.h" -#include "funcapi.h" -#include "lib/ilist.h" #include "miscadmin.h" #include "pg_trace.h" #include "pgstat.h" @@ -87,9 +82,9 @@ #include "storage/pmsignal.h" #include "storage/proc.h" #include "storage/procarray.h" -#include "utils/fmgrprotos.h" #include "utils/guc_hooks.h" #include "utils/injection_point.h" +#include "utils/lsyscache.h" #include "utils/memutils.h" @@ -398,11 +393,7 @@ static int mXactCacheGetById(MultiXactId multi, MultiXactMember **members); static void mXactCachePut(MultiXactId multi, int nmembers, MultiXactMember *members); -static char *mxstatus_to_string(MultiXactStatus status); - /* management of SLRU infrastructure */ -static int ZeroMultiXactOffsetPage(int64 pageno, bool writeXlog); -static int ZeroMultiXactMemberPage(int64 pageno, bool writeXlog); static bool MultiXactOffsetPagePrecedes(int64 page1, int64 page2); static bool MultiXactMemberPagePrecedes(int64 page1, int64 page2); static bool MultiXactOffsetPrecedes(MultiXactOffset offset1, @@ -413,7 +404,6 @@ static bool MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start, uint32 distance); static bool SetOffsetVacuumLimit(bool is_startup); static bool find_multixact_start(MultiXactId multi, MultiXactOffset *result); -static void WriteMZeroPageXlogRec(int64 pageno, uint8 info); static void WriteMTruncateXlogRec(Oid oldestMultiDB, MultiXactId startTruncOff, MultiXactId endTruncOff, @@ -872,7 +862,7 @@ MultiXactIdCreateFromMembers(int nmembers, MultiXactMember *members) */ multi = GetNewMultiXactId(nmembers, &offset); - INJECTION_POINT_CACHED("multixact-create-from-members"); + INJECTION_POINT_CACHED("multixact-create-from-members", NULL); /* Make an XLOG entry describing the new MXID. */ xlrec.mid = multi; @@ -1287,7 +1277,7 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset) * range, in which case an error would be raised. * * In all other cases, the passed multixact must be within the known valid - * range, that is, greater to or equal than oldestMultiXactId, and less than + * range, that is, greater than or equal to oldestMultiXactId, and less than * nextMXact. Otherwise, an error is raised. * * isLockOnly must be set to true if caller is certain that the given multi @@ -1486,7 +1476,7 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, LWLockRelease(lock); CHECK_FOR_INTERRUPTS(); - INJECTION_POINT("multixact-get-members-cv-sleep"); + INJECTION_POINT("multixact-get-members-cv-sleep", NULL); ConditionVariableSleep(&MultiXactState->nextoff_cv, WAIT_EVENT_MULTIXACT_CREATION); @@ -1750,7 +1740,7 @@ mXactCachePut(MultiXactId multi, int nmembers, MultiXactMember *members) } } -static char * +char * mxstatus_to_string(MultiXactStatus status) { switch (status) @@ -1847,7 +1837,7 @@ AtPrepare_MultiXact(void) * Clean up after successful PREPARE TRANSACTION */ void -PostPrepare_MultiXact(TransactionId xid) +PostPrepare_MultiXact(FullTransactionId fxid) { MultiXactId myOldestMember; @@ -1858,7 +1848,7 @@ PostPrepare_MultiXact(TransactionId xid) myOldestMember = OldestMemberMXactId[MyProcNumber]; if (MultiXactIdIsValid(myOldestMember)) { - ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(xid, false); + ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(fxid, false); /* * Even though storing MultiXactId is atomic, acquire lock to make @@ -1896,10 +1886,10 @@ PostPrepare_MultiXact(TransactionId xid) * Recover the state of a prepared transaction at startup */ void -multixact_twophase_recover(TransactionId xid, uint16 info, +multixact_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { - ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(xid, false); + ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(fxid, false); MultiXactId oldestMember; /* @@ -1917,10 +1907,10 @@ multixact_twophase_recover(TransactionId xid, uint16 info, * Similar to AtEOXact_MultiXact but for COMMIT PREPARED */ void -multixact_twophase_postcommit(TransactionId xid, uint16 info, +multixact_twophase_postcommit(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { - ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(xid, true); + ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(fxid, true); Assert(len == sizeof(MultiXactId)); @@ -1932,10 +1922,10 @@ multixact_twophase_postcommit(TransactionId xid, uint16 info, * This is actually just the same as the COMMIT case. */ void -multixact_twophase_postabort(TransactionId xid, uint16 info, +multixact_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { - multixact_twophase_postcommit(xid, info, recdata, len); + multixact_twophase_postcommit(fxid, info, recdata, len); } /* @@ -2033,70 +2023,9 @@ check_multixact_member_buffers(int *newval, void **extra, GucSource source) void BootStrapMultiXact(void) { - int slotno; - LWLock *lock; - - lock = SimpleLruGetBankLock(MultiXactOffsetCtl, 0); - LWLockAcquire(lock, LW_EXCLUSIVE); - - /* Create and zero the first page of the offsets log */ - slotno = ZeroMultiXactOffsetPage(0, false); - - /* Make sure it's written out */ - SimpleLruWritePage(MultiXactOffsetCtl, slotno); - Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); - - lock = SimpleLruGetBankLock(MultiXactMemberCtl, 0); - LWLockAcquire(lock, LW_EXCLUSIVE); - - /* Create and zero the first page of the members log */ - slotno = ZeroMultiXactMemberPage(0, false); - - /* Make sure it's written out */ - SimpleLruWritePage(MultiXactMemberCtl, slotno); - Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); -} - -/* - * Initialize (or reinitialize) a page of MultiXactOffset to zeroes. - * If writeXlog is true, also emit an XLOG record saying we did this. - * - * The page is not actually written, just set up in shared memory. - * The slot number of the new page is returned. - * - * Control lock must be held at entry, and will be held at exit. - */ -static int -ZeroMultiXactOffsetPage(int64 pageno, bool writeXlog) -{ - int slotno; - - slotno = SimpleLruZeroPage(MultiXactOffsetCtl, pageno); - - if (writeXlog) - WriteMZeroPageXlogRec(pageno, XLOG_MULTIXACT_ZERO_OFF_PAGE); - - return slotno; -} - -/* - * Ditto, for MultiXactMember - */ -static int -ZeroMultiXactMemberPage(int64 pageno, bool writeXlog) -{ - int slotno; - - slotno = SimpleLruZeroPage(MultiXactMemberCtl, pageno); - - if (writeXlog) - WriteMZeroPageXlogRec(pageno, XLOG_MULTIXACT_ZERO_MEM_PAGE); - - return slotno; + /* Zero the initial pages and flush them to disk */ + SimpleLruZeroAndWritePage(MultiXactOffsetCtl, 0); + SimpleLruZeroAndWritePage(MultiXactMemberCtl, 0); } /* @@ -2134,7 +2063,7 @@ MaybeExtendOffsetSlru(void) * with creating a new segment file even if the page we're writing is * not the first in it, so this is enough. */ - slotno = ZeroMultiXactOffsetPage(pageno, false); + slotno = SimpleLruZeroPage(MultiXactOffsetCtl, pageno); SimpleLruWritePage(MultiXactOffsetCtl, slotno); } @@ -2568,8 +2497,10 @@ ExtendMultiXactOffset(MultiXactId multi) LWLockAcquire(lock, LW_EXCLUSIVE); - /* Zero the page and make an XLOG entry about it */ - ZeroMultiXactOffsetPage(pageno, true); + /* Zero the page and make a WAL entry about it */ + SimpleLruZeroPage(MultiXactOffsetCtl, pageno); + XLogSimpleInsertInt64(RM_MULTIXACT_ID, XLOG_MULTIXACT_ZERO_OFF_PAGE, + pageno); LWLockRelease(lock); } @@ -2611,8 +2542,10 @@ ExtendMultiXactMember(MultiXactOffset offset, int nmembers) LWLockAcquire(lock, LW_EXCLUSIVE); - /* Zero the page and make an XLOG entry about it */ - ZeroMultiXactMemberPage(pageno, true); + /* Zero the page and make a WAL entry about it */ + SimpleLruZeroPage(MultiXactMemberCtl, pageno); + XLogSimpleInsertInt64(RM_MULTIXACT_ID, + XLOG_MULTIXACT_ZERO_MEM_PAGE, pageno); LWLockRelease(lock); } @@ -2919,31 +2852,43 @@ find_multixact_start(MultiXactId multi, MultiXactOffset *result) } /* - * Determine how many multixacts, and how many multixact members, currently - * exist. Return false if unable to determine. + * GetMultiXactInfo + * + * Returns information about the current MultiXact state, as of: + * multixacts: Number of MultiXacts (nextMultiXactId - oldestMultiXactId) + * members: Number of member entries (nextOffset - oldestOffset) + * oldestMultiXactId: Oldest MultiXact ID still in use + * oldestOffset: Oldest offset still in use + * + * Returns false if unable to determine, the oldest offset being unknown. */ -static bool -ReadMultiXactCounts(uint32 *multixacts, MultiXactOffset *members) +bool +GetMultiXactInfo(uint32 *multixacts, MultiXactOffset *members, + MultiXactId *oldestMultiXactId, MultiXactOffset *oldestOffset) { MultiXactOffset nextOffset; - MultiXactOffset oldestOffset; - MultiXactId oldestMultiXactId; MultiXactId nextMultiXactId; bool oldestOffsetKnown; LWLockAcquire(MultiXactGenLock, LW_SHARED); nextOffset = MultiXactState->nextOffset; - oldestMultiXactId = MultiXactState->oldestMultiXactId; + *oldestMultiXactId = MultiXactState->oldestMultiXactId; nextMultiXactId = MultiXactState->nextMXact; - oldestOffset = MultiXactState->oldestOffset; + *oldestOffset = MultiXactState->oldestOffset; oldestOffsetKnown = MultiXactState->oldestOffsetKnown; LWLockRelease(MultiXactGenLock); if (!oldestOffsetKnown) + { + *members = 0; + *multixacts = 0; + *oldestMultiXactId = InvalidMultiXactId; + *oldestOffset = 0; return false; + } - *members = nextOffset - oldestOffset; - *multixacts = nextMultiXactId - oldestMultiXactId; + *members = nextOffset - *oldestOffset; + *multixacts = nextMultiXactId - *oldestMultiXactId; return true; } @@ -2982,9 +2927,11 @@ MultiXactMemberFreezeThreshold(void) uint32 victim_multixacts; double fraction; int result; + MultiXactId oldestMultiXactId; + MultiXactOffset oldestOffset; /* If we can't determine member space utilization, assume the worst. */ - if (!ReadMultiXactCounts(&multixacts, &members)) + if (!GetMultiXactInfo(&multixacts, &members, &oldestMultiXactId, &oldestOffset)) return 0; /* If member space utilization is low, no special action is required. */ @@ -3347,18 +3294,6 @@ MultiXactOffsetPrecedes(MultiXactOffset offset1, MultiXactOffset offset2) return (diff < 0); } -/* - * Write an xlog record reflecting the zeroing of either a MEMBERs or - * OFFSETs page (info shows which) - */ -static void -WriteMZeroPageXlogRec(int64 pageno, uint8 info) -{ - XLogBeginInsert(); - XLogRegisterData(&pageno, sizeof(pageno)); - (void) XLogInsert(RM_MULTIXACT_ID, info); -} - /* * Write a TRUNCATE xlog record * @@ -3401,36 +3336,16 @@ multixact_redo(XLogReaderState *record) if (info == XLOG_MULTIXACT_ZERO_OFF_PAGE) { int64 pageno; - int slotno; - LWLock *lock; memcpy(&pageno, XLogRecGetData(record), sizeof(pageno)); - - lock = SimpleLruGetBankLock(MultiXactOffsetCtl, pageno); - LWLockAcquire(lock, LW_EXCLUSIVE); - - slotno = ZeroMultiXactOffsetPage(pageno, false); - SimpleLruWritePage(MultiXactOffsetCtl, slotno); - Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); + SimpleLruZeroAndWritePage(MultiXactOffsetCtl, pageno); } else if (info == XLOG_MULTIXACT_ZERO_MEM_PAGE) { int64 pageno; - int slotno; - LWLock *lock; memcpy(&pageno, XLogRecGetData(record), sizeof(pageno)); - - lock = SimpleLruGetBankLock(MultiXactMemberCtl, pageno); - LWLockAcquire(lock, LW_EXCLUSIVE); - - slotno = ZeroMultiXactMemberPage(pageno, false); - SimpleLruWritePage(MultiXactMemberCtl, slotno); - Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); + SimpleLruZeroAndWritePage(MultiXactMemberCtl, pageno); } else if (info == XLOG_MULTIXACT_CREATE_ID) { @@ -3506,68 +3421,6 @@ multixact_redo(XLogReaderState *record) elog(PANIC, "multixact_redo: unknown op code %u", info); } -Datum -pg_get_multixact_members(PG_FUNCTION_ARGS) -{ - typedef struct - { - MultiXactMember *members; - int nmembers; - int iter; - } mxact; - MultiXactId mxid = PG_GETARG_TRANSACTIONID(0); - mxact *multi; - FuncCallContext *funccxt; - - if (mxid < FirstMultiXactId) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid MultiXactId: %u", mxid))); - - if (SRF_IS_FIRSTCALL()) - { - MemoryContext oldcxt; - TupleDesc tupdesc; - - funccxt = SRF_FIRSTCALL_INIT(); - oldcxt = MemoryContextSwitchTo(funccxt->multi_call_memory_ctx); - - multi = palloc(sizeof(mxact)); - /* no need to allow for old values here */ - multi->nmembers = GetMultiXactIdMembers(mxid, &multi->members, false, - false); - multi->iter = 0; - - if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "return type must be a row type"); - funccxt->tuple_desc = tupdesc; - funccxt->attinmeta = TupleDescGetAttInMetadata(tupdesc); - funccxt->user_fctx = multi; - - MemoryContextSwitchTo(oldcxt); - } - - funccxt = SRF_PERCALL_SETUP(); - multi = (mxact *) funccxt->user_fctx; - - while (multi->iter < multi->nmembers) - { - HeapTuple tuple; - char *values[2]; - - values[0] = psprintf("%u", multi->members[multi->iter].xid); - values[1] = mxstatus_to_string(multi->members[multi->iter].status); - - tuple = BuildTupleFromCStrings(funccxt->attinmeta, values); - - multi->iter++; - pfree(values[0]); - SRF_RETURN_NEXT(funccxt, HeapTupleGetDatum(tuple)); - } - - SRF_RETURN_DONE(funccxt); -} - /* * Entrypoint for sync.c to sync offsets files. */ diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index fe56286d9a972..10ec259f38295 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -433,6 +433,31 @@ SimpleLruZeroLSNs(SlruCtl ctl, int slotno) shared->lsn_groups_per_page * sizeof(XLogRecPtr)); } +/* + * This is a convenience wrapper for the common case of zeroing a page and + * immediately flushing it to disk. + * + * Control lock is acquired and released here. + */ +void +SimpleLruZeroAndWritePage(SlruCtl ctl, int64 pageno) +{ + int slotno; + LWLock *lock; + + lock = SimpleLruGetBankLock(ctl, pageno); + LWLockAcquire(lock, LW_EXCLUSIVE); + + /* Create and zero the page */ + slotno = SimpleLruZeroPage(ctl, pageno); + + /* Make sure it's written out */ + SimpleLruWritePage(ctl, slotno); + Assert(!ctl->shared->page_dirty[slotno]); + + LWLockRelease(lock); +} + /* * Wait for any active I/O on a page slot to finish. (This does not * guarantee that new I/O hasn't been started before we return, though. diff --git a/src/backend/access/transam/subtrans.c b/src/backend/access/transam/subtrans.c index 15153618fad16..09aace9e09f0e 100644 --- a/src/backend/access/transam/subtrans.c +++ b/src/backend/access/transam/subtrans.c @@ -74,7 +74,6 @@ static SlruCtlData SubTransCtlData; #define SubTransCtl (&SubTransCtlData) -static int ZeroSUBTRANSPage(int64 pageno); static bool SubTransPagePrecedes(int64 page1, int64 page2); @@ -269,33 +268,8 @@ check_subtrans_buffers(int *newval, void **extra, GucSource source) void BootStrapSUBTRANS(void) { - int slotno; - LWLock *lock = SimpleLruGetBankLock(SubTransCtl, 0); - - LWLockAcquire(lock, LW_EXCLUSIVE); - - /* Create and zero the first page of the subtrans log */ - slotno = ZeroSUBTRANSPage(0); - - /* Make sure it's written out */ - SimpleLruWritePage(SubTransCtl, slotno); - Assert(!SubTransCtl->shared->page_dirty[slotno]); - - LWLockRelease(lock); -} - -/* - * Initialize (or reinitialize) a page of SUBTRANS to zeroes. - * - * The page is not actually written, just set up in shared memory. - * The slot number of the new page is returned. - * - * Control lock must be held at entry, and will be held at exit. - */ -static int -ZeroSUBTRANSPage(int64 pageno) -{ - return SimpleLruZeroPage(SubTransCtl, pageno); + /* Zero the initial page and flush it to disk */ + SimpleLruZeroAndWritePage(SubTransCtl, 0); } /* @@ -335,7 +309,7 @@ StartupSUBTRANS(TransactionId oldestActiveXID) prevlock = lock; } - (void) ZeroSUBTRANSPage(startPage); + (void) SimpleLruZeroPage(SubTransCtl, startPage); if (startPage == endPage) break; @@ -395,7 +369,7 @@ ExtendSUBTRANS(TransactionId newestXact) LWLockAcquire(lock, LW_EXCLUSIVE); /* Zero the page */ - ZeroSUBTRANSPage(pageno); + SimpleLruZeroPage(SubTransCtl, pageno); LWLockRelease(lock); } diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c index a27f27cc037d1..186eb91f60943 100644 --- a/src/backend/access/transam/timeline.c +++ b/src/backend/access/transam/timeline.c @@ -154,7 +154,7 @@ readTimeLineHistory(TimeLineID targetTLI) if (*ptr == '\0' || *ptr == '#') continue; - nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo); + nfields = sscanf(fline, "%u\t%X/%08X", &tli, &switchpoint_hi, &switchpoint_lo); if (nfields < 1) { @@ -399,7 +399,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI, * parent file failed to end with one. */ snprintf(buffer, sizeof(buffer), - "%s%u\t%X/%X\t%s\n", + "%s%u\t%X/%08X\t%s\n", (srcfd < 0) ? "" : "\n", parentTLI, LSN_FORMAT_ARGS(switchpoint), diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 73a80559194e7..7918176fc588e 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -159,7 +159,7 @@ typedef struct GlobalTransactionData */ XLogRecPtr prepare_start_lsn; /* XLOG offset of prepare record start */ XLogRecPtr prepare_end_lsn; /* XLOG offset of prepare record end */ - TransactionId xid; /* The GXACT id */ + FullTransactionId fxid; /* The GXACT full xid */ Oid owner; /* ID of user that executed the xact */ ProcNumber locking_backend; /* backend currently working on the xact */ @@ -197,6 +197,7 @@ static GlobalTransaction MyLockedGxact = NULL; static bool twophaseExitRegistered = false; +static void PrepareRedoRemoveFull(FullTransactionId fxid, bool giveWarning); static void RecordTransactionCommitPrepared(TransactionId xid, int nchildren, TransactionId *children, @@ -216,19 +217,19 @@ static void RecordTransactionAbortPrepared(TransactionId xid, int nstats, xl_xact_stats_item *stats, const char *gid); -static void ProcessRecords(char *bufptr, TransactionId xid, +static void ProcessRecords(char *bufptr, FullTransactionId fxid, const TwoPhaseCallback callbacks[]); static void RemoveGXact(GlobalTransaction gxact); static void XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len); -static char *ProcessTwoPhaseBuffer(TransactionId xid, +static char *ProcessTwoPhaseBuffer(FullTransactionId fxid, XLogRecPtr prepare_start_lsn, bool fromdisk, bool setParent, bool setNextXid); -static void MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, +static void MarkAsPreparingGuts(GlobalTransaction gxact, FullTransactionId fxid, const char *gid, TimestampTz prepared_at, Oid owner, Oid databaseid); -static void RemoveTwoPhaseFile(TransactionId xid, bool giveWarning); -static void RecreateTwoPhaseFile(TransactionId xid, void *content, int len); +static void RemoveTwoPhaseFile(FullTransactionId fxid, bool giveWarning); +static void RecreateTwoPhaseFile(FullTransactionId fxid, void *content, int len); /* * Initialization of shared memory @@ -356,7 +357,7 @@ PostPrepare_Twophase(void) * Reserve the GID for the given transaction. */ GlobalTransaction -MarkAsPreparing(TransactionId xid, const char *gid, +MarkAsPreparing(FullTransactionId fxid, const char *gid, TimestampTz prepared_at, Oid owner, Oid databaseid) { GlobalTransaction gxact; @@ -407,7 +408,7 @@ MarkAsPreparing(TransactionId xid, const char *gid, gxact = TwoPhaseState->freeGXacts; TwoPhaseState->freeGXacts = gxact->next; - MarkAsPreparingGuts(gxact, xid, gid, prepared_at, owner, databaseid); + MarkAsPreparingGuts(gxact, fxid, gid, prepared_at, owner, databaseid); gxact->ondisk = false; @@ -430,11 +431,13 @@ MarkAsPreparing(TransactionId xid, const char *gid, * Note: This function should be called with appropriate locks held. */ static void -MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, const char *gid, - TimestampTz prepared_at, Oid owner, Oid databaseid) +MarkAsPreparingGuts(GlobalTransaction gxact, FullTransactionId fxid, + const char *gid, TimestampTz prepared_at, Oid owner, + Oid databaseid) { PGPROC *proc; int i; + TransactionId xid = XidFromFullTransactionId(fxid); Assert(LWLockHeldByMeInMode(TwoPhaseStateLock, LW_EXCLUSIVE)); @@ -479,7 +482,7 @@ MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, const char *gid, proc->subxidStatus.count = 0; gxact->prepared_at = prepared_at; - gxact->xid = xid; + gxact->fxid = fxid; gxact->owner = owner; gxact->locking_backend = MyProcNumber; gxact->valid = false; @@ -797,12 +800,12 @@ pg_prepared_xact(PG_FUNCTION_ARGS) * caller had better hold it. */ static GlobalTransaction -TwoPhaseGetGXact(TransactionId xid, bool lock_held) +TwoPhaseGetGXact(FullTransactionId fxid, bool lock_held) { GlobalTransaction result = NULL; int i; - static TransactionId cached_xid = InvalidTransactionId; + static FullTransactionId cached_fxid = {InvalidTransactionId}; static GlobalTransaction cached_gxact = NULL; Assert(!lock_held || LWLockHeldByMe(TwoPhaseStateLock)); @@ -811,7 +814,7 @@ TwoPhaseGetGXact(TransactionId xid, bool lock_held) * During a recovery, COMMIT PREPARED, or ABORT PREPARED, we'll be called * repeatedly for the same XID. We can save work with a simple cache. */ - if (xid == cached_xid) + if (FullTransactionIdEquals(fxid, cached_fxid)) return cached_gxact; if (!lock_held) @@ -821,7 +824,7 @@ TwoPhaseGetGXact(TransactionId xid, bool lock_held) { GlobalTransaction gxact = TwoPhaseState->prepXacts[i]; - if (gxact->xid == xid) + if (FullTransactionIdEquals(gxact->fxid, fxid)) { result = gxact; break; @@ -832,9 +835,10 @@ TwoPhaseGetGXact(TransactionId xid, bool lock_held) LWLockRelease(TwoPhaseStateLock); if (result == NULL) /* should not happen */ - elog(ERROR, "failed to find GlobalTransaction for xid %u", xid); + elog(ERROR, "failed to find GlobalTransaction for xid %u", + XidFromFullTransactionId(fxid)); - cached_xid = xid; + cached_fxid = fxid; cached_gxact = result; return result; @@ -881,7 +885,7 @@ TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid, *have_more = true; break; } - result = gxact->xid; + result = XidFromFullTransactionId(gxact->fxid); } } @@ -892,7 +896,7 @@ TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid, /* * TwoPhaseGetDummyProcNumber - * Get the dummy proc number for prepared transaction specified by XID + * Get the dummy proc number for prepared transaction * * Dummy proc numbers are similar to proc numbers of real backends. They * start at MaxBackends, and are unique across all currently active real @@ -900,24 +904,24 @@ TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid, * TwoPhaseStateLock will not be taken, so the caller had better hold it. */ ProcNumber -TwoPhaseGetDummyProcNumber(TransactionId xid, bool lock_held) +TwoPhaseGetDummyProcNumber(FullTransactionId fxid, bool lock_held) { - GlobalTransaction gxact = TwoPhaseGetGXact(xid, lock_held); + GlobalTransaction gxact = TwoPhaseGetGXact(fxid, lock_held); return gxact->pgprocno; } /* * TwoPhaseGetDummyProc - * Get the PGPROC that represents a prepared transaction specified by XID + * Get the PGPROC that represents a prepared transaction * * If lock_held is set to true, TwoPhaseStateLock will not be taken, so the * caller had better hold it. */ PGPROC * -TwoPhaseGetDummyProc(TransactionId xid, bool lock_held) +TwoPhaseGetDummyProc(FullTransactionId fxid, bool lock_held) { - GlobalTransaction gxact = TwoPhaseGetGXact(xid, lock_held); + GlobalTransaction gxact = TwoPhaseGetGXact(fxid, lock_held); return GetPGProcByNumber(gxact->pgprocno); } @@ -942,10 +946,8 @@ AdjustToFullTransactionId(TransactionId xid) } static inline int -TwoPhaseFilePath(char *path, TransactionId xid) +TwoPhaseFilePath(char *path, FullTransactionId fxid) { - FullTransactionId fxid = AdjustToFullTransactionId(xid); - return snprintf(path, MAXPGPATH, TWOPHASE_DIR "/%08X%08X", EpochFromFullTransactionId(fxid), XidFromFullTransactionId(fxid)); @@ -1049,7 +1051,7 @@ void StartPrepare(GlobalTransaction gxact) { PGPROC *proc = GetPGProcByNumber(gxact->pgprocno); - TransactionId xid = gxact->xid; + TransactionId xid = XidFromFullTransactionId(gxact->fxid); TwoPhaseFileHeader hdr; TransactionId *children; RelFileLocator *commitrels; @@ -1181,7 +1183,11 @@ EndPrepare(GlobalTransaction gxact) * starting immediately after the WAL record is inserted could complete * without fsync'ing our state file. (This is essentially the same kind * of race condition as the COMMIT-to-clog-write case that - * RecordTransactionCommit uses DELAY_CHKPT_START for; see notes there.) + * RecordTransactionCommit uses DELAY_CHKPT_IN_COMMIT for; see notes + * there.) Note that DELAY_CHKPT_IN_COMMIT is used to find transactions in + * the critical commit section. We need to know about such transactions + * for conflict detection in logical replication. See + * GetOldestActiveTransactionId(true, false) and its use. * * We save the PREPARE record's location in the gxact for later use by * CheckPointTwoPhase. @@ -1281,10 +1287,11 @@ RegisterTwoPhaseRecord(TwoPhaseRmgrId rmid, uint16 info, * If it looks OK (has a valid magic number and CRC), return the palloc'd * contents of the file, issuing an error when finding corrupted data. If * missing_ok is true, which indicates that missing files can be safely - * ignored, then return NULL. This state can be reached when doing recovery. + * ignored, then return NULL. This state can be reached when doing recovery + * after discarding two-phase files from frozen epochs. */ static char * -ReadTwoPhaseFile(TransactionId xid, bool missing_ok) +ReadTwoPhaseFile(FullTransactionId fxid, bool missing_ok) { char path[MAXPGPATH]; char *buf; @@ -1296,7 +1303,7 @@ ReadTwoPhaseFile(TransactionId xid, bool missing_ok) file_crc; int r; - TwoPhaseFilePath(path, xid); + TwoPhaseFilePath(path, fxid); fd = OpenTransientFile(path, O_RDONLY | PG_BINARY); if (fd < 0) @@ -1426,12 +1433,12 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) if (errormsg) ereport(ERROR, (errcode_for_file_access(), - errmsg("could not read two-phase state from WAL at %X/%X: %s", + errmsg("could not read two-phase state from WAL at %X/%08X: %s", LSN_FORMAT_ARGS(lsn), errormsg))); else ereport(ERROR, (errcode_for_file_access(), - errmsg("could not read two-phase state from WAL at %X/%X", + errmsg("could not read two-phase state from WAL at %X/%08X", LSN_FORMAT_ARGS(lsn)))); } @@ -1439,7 +1446,7 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) (XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != XLOG_XACT_PREPARE) ereport(ERROR, (errcode_for_file_access(), - errmsg("expected two-phase state data is not present in WAL at %X/%X", + errmsg("expected two-phase state data is not present in WAL at %X/%08X", LSN_FORMAT_ARGS(lsn)))); if (len != NULL) @@ -1461,6 +1468,7 @@ StandbyTransactionIdIsPrepared(TransactionId xid) char *buf; TwoPhaseFileHeader *hdr; bool result; + FullTransactionId fxid; Assert(TransactionIdIsValid(xid)); @@ -1468,7 +1476,8 @@ StandbyTransactionIdIsPrepared(TransactionId xid) return false; /* nothing to do */ /* Read and validate file */ - buf = ReadTwoPhaseFile(xid, true); + fxid = AdjustToFullTransactionId(xid); + buf = ReadTwoPhaseFile(fxid, true); if (buf == NULL) return false; @@ -1488,6 +1497,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit) { GlobalTransaction gxact; PGPROC *proc; + FullTransactionId fxid; TransactionId xid; bool ondisk; char *buf; @@ -1509,7 +1519,8 @@ FinishPreparedTransaction(const char *gid, bool isCommit) */ gxact = LockGXact(gid, GetUserId()); proc = GetPGProcByNumber(gxact->pgprocno); - xid = gxact->xid; + fxid = gxact->fxid; + xid = XidFromFullTransactionId(fxid); /* * Read and validate 2PC state data. State data will typically be stored @@ -1517,7 +1528,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit) * to disk if for some reason they have lived for a long time. */ if (gxact->ondisk) - buf = ReadTwoPhaseFile(xid, false); + buf = ReadTwoPhaseFile(fxid, false); else XlogReadTwoPhaseData(gxact->prepare_start_lsn, &buf, NULL); @@ -1636,11 +1647,11 @@ FinishPreparedTransaction(const char *gid, bool isCommit) /* And now do the callbacks */ if (isCommit) - ProcessRecords(bufptr, xid, twophase_postcommit_callbacks); + ProcessRecords(bufptr, fxid, twophase_postcommit_callbacks); else - ProcessRecords(bufptr, xid, twophase_postabort_callbacks); + ProcessRecords(bufptr, fxid, twophase_postabort_callbacks); - PredicateLockTwoPhaseFinish(xid, isCommit); + PredicateLockTwoPhaseFinish(fxid, isCommit); /* * Read this value while holding the two-phase lock, as the on-disk 2PC @@ -1664,7 +1675,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit) * And now we can clean up any files we may have left. */ if (ondisk) - RemoveTwoPhaseFile(xid, true); + RemoveTwoPhaseFile(fxid, true); MyLockedGxact = NULL; @@ -1677,7 +1688,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit) * Scan 2PC state data in memory and call the indicated callbacks for each 2PC record. */ static void -ProcessRecords(char *bufptr, TransactionId xid, +ProcessRecords(char *bufptr, FullTransactionId fxid, const TwoPhaseCallback callbacks[]) { for (;;) @@ -1691,24 +1702,28 @@ ProcessRecords(char *bufptr, TransactionId xid, bufptr += MAXALIGN(sizeof(TwoPhaseRecordOnDisk)); if (callbacks[record->rmid] != NULL) - callbacks[record->rmid] (xid, record->info, bufptr, record->len); + callbacks[record->rmid] (fxid, record->info, bufptr, record->len); bufptr += MAXALIGN(record->len); } } /* - * Remove the 2PC file for the specified XID. + * Remove the 2PC file. * * If giveWarning is false, do not complain about file-not-present; * this is an expected case during WAL replay. + * + * This routine is used at early stages at recovery where future and + * past orphaned files are checked, hence the FullTransactionId to build + * a complete file name fit for the removal. */ static void -RemoveTwoPhaseFile(TransactionId xid, bool giveWarning) +RemoveTwoPhaseFile(FullTransactionId fxid, bool giveWarning) { char path[MAXPGPATH]; - TwoPhaseFilePath(path, xid); + TwoPhaseFilePath(path, fxid); if (unlink(path)) if (errno != ENOENT || giveWarning) ereport(WARNING, @@ -1723,7 +1738,7 @@ RemoveTwoPhaseFile(TransactionId xid, bool giveWarning) * Note: content and len don't include CRC. */ static void -RecreateTwoPhaseFile(TransactionId xid, void *content, int len) +RecreateTwoPhaseFile(FullTransactionId fxid, void *content, int len) { char path[MAXPGPATH]; pg_crc32c statefile_crc; @@ -1734,7 +1749,7 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len) COMP_CRC32C(statefile_crc, content, len); FIN_CRC32C(statefile_crc); - TwoPhaseFilePath(path, xid); + TwoPhaseFilePath(path, fxid); fd = OpenTransientFile(path, O_CREAT | O_TRUNC | O_WRONLY | PG_BINARY); @@ -1846,7 +1861,7 @@ CheckPointTwoPhase(XLogRecPtr redo_horizon) int len; XlogReadTwoPhaseData(gxact->prepare_start_lsn, &buf, &len); - RecreateTwoPhaseFile(gxact->xid, buf, len); + RecreateTwoPhaseFile(gxact->fxid, buf, len); gxact->ondisk = true; gxact->prepare_start_lsn = InvalidXLogRecPtr; gxact->prepare_end_lsn = InvalidXLogRecPtr; @@ -1897,19 +1912,17 @@ restoreTwoPhaseData(void) if (strlen(clde->d_name) == 16 && strspn(clde->d_name, "0123456789ABCDEF") == 16) { - TransactionId xid; FullTransactionId fxid; char *buf; fxid = FullTransactionIdFromU64(strtou64(clde->d_name, NULL, 16)); - xid = XidFromFullTransactionId(fxid); - buf = ProcessTwoPhaseBuffer(xid, InvalidXLogRecPtr, + buf = ProcessTwoPhaseBuffer(fxid, InvalidXLogRecPtr, true, false, false); if (buf == NULL) continue; - PrepareRedoAdd(buf, InvalidXLogRecPtr, + PrepareRedoAdd(fxid, buf, InvalidXLogRecPtr, InvalidXLogRecPtr, InvalidRepOriginId); } } @@ -1968,9 +1981,7 @@ PrescanPreparedTransactions(TransactionId **xids_p, int *nxids_p) Assert(gxact->inredo); - xid = gxact->xid; - - buf = ProcessTwoPhaseBuffer(xid, + buf = ProcessTwoPhaseBuffer(gxact->fxid, gxact->prepare_start_lsn, gxact->ondisk, false, true); @@ -1981,6 +1992,7 @@ PrescanPreparedTransactions(TransactionId **xids_p, int *nxids_p) * OK, we think this file is valid. Incorporate xid into the * running-minimum result. */ + xid = XidFromFullTransactionId(gxact->fxid); if (TransactionIdPrecedes(xid, result)) result = xid; @@ -2036,15 +2048,12 @@ StandbyRecoverPreparedTransactions(void) LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE); for (i = 0; i < TwoPhaseState->numPrepXacts; i++) { - TransactionId xid; char *buf; GlobalTransaction gxact = TwoPhaseState->prepXacts[i]; Assert(gxact->inredo); - xid = gxact->xid; - - buf = ProcessTwoPhaseBuffer(xid, + buf = ProcessTwoPhaseBuffer(gxact->fxid, gxact->prepare_start_lsn, gxact->ondisk, true, false); if (buf != NULL) @@ -2077,16 +2086,14 @@ RecoverPreparedTransactions(void) LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE); for (i = 0; i < TwoPhaseState->numPrepXacts; i++) { - TransactionId xid; char *buf; GlobalTransaction gxact = TwoPhaseState->prepXacts[i]; + FullTransactionId fxid = gxact->fxid; char *bufptr; TwoPhaseFileHeader *hdr; TransactionId *subxids; const char *gid; - xid = gxact->xid; - /* * Reconstruct subtrans state for the transaction --- needed because * pg_subtrans is not preserved over a restart. Note that we are @@ -2096,17 +2103,20 @@ RecoverPreparedTransactions(void) * SubTransSetParent has been set before, if the prepared transaction * generated xid assignment records. */ - buf = ProcessTwoPhaseBuffer(xid, + buf = ProcessTwoPhaseBuffer(gxact->fxid, gxact->prepare_start_lsn, gxact->ondisk, true, false); if (buf == NULL) continue; ereport(LOG, - (errmsg("recovering prepared transaction %u from shared memory", xid))); + (errmsg("recovering prepared transaction %u of epoch %u from shared memory", + XidFromFullTransactionId(gxact->fxid), + EpochFromFullTransactionId(gxact->fxid)))); hdr = (TwoPhaseFileHeader *) buf; - Assert(TransactionIdEquals(hdr->xid, xid)); + Assert(TransactionIdEquals(hdr->xid, + XidFromFullTransactionId(gxact->fxid))); bufptr = buf + MAXALIGN(sizeof(TwoPhaseFileHeader)); gid = (const char *) bufptr; bufptr += MAXALIGN(hdr->gidlen); @@ -2122,7 +2132,7 @@ RecoverPreparedTransactions(void) * Recreate its GXACT and dummy PGPROC. But, check whether it was * added in redo and already has a shmem entry for it. */ - MarkAsPreparingGuts(gxact, xid, gid, + MarkAsPreparingGuts(gxact, gxact->fxid, gid, hdr->prepared_at, hdr->owner, hdr->database); @@ -2137,7 +2147,7 @@ RecoverPreparedTransactions(void) /* * Recover other state (notably locks) using resource managers. */ - ProcessRecords(bufptr, xid, twophase_recover_callbacks); + ProcessRecords(bufptr, fxid, twophase_recover_callbacks); /* * Release locks held by the standby process after we process each @@ -2145,7 +2155,7 @@ RecoverPreparedTransactions(void) * additional locks at any one time. */ if (InHotStandby) - StandbyReleaseLockTree(xid, hdr->nsubxacts, subxids); + StandbyReleaseLockTree(hdr->xid, hdr->nsubxacts, subxids); /* * We're done with recovering this transaction. Clear MyLockedGxact, @@ -2164,7 +2174,7 @@ RecoverPreparedTransactions(void) /* * ProcessTwoPhaseBuffer * - * Given a transaction id, read it either from disk or read it directly + * Given a FullTransactionId, read it either from disk or read it directly * via shmem xlog record pointer using the provided "prepare_start_lsn". * * If setParent is true, set up subtransaction parent linkages. @@ -2173,13 +2183,12 @@ RecoverPreparedTransactions(void) * value scanned. */ static char * -ProcessTwoPhaseBuffer(TransactionId xid, +ProcessTwoPhaseBuffer(FullTransactionId fxid, XLogRecPtr prepare_start_lsn, bool fromdisk, bool setParent, bool setNextXid) { FullTransactionId nextXid = TransamVariables->nextXid; - TransactionId origNextXid = XidFromFullTransactionId(nextXid); TransactionId *subxids; char *buf; TwoPhaseFileHeader *hdr; @@ -2191,41 +2200,46 @@ ProcessTwoPhaseBuffer(TransactionId xid, Assert(prepare_start_lsn != InvalidXLogRecPtr); /* Already processed? */ - if (TransactionIdDidCommit(xid) || TransactionIdDidAbort(xid)) + if (TransactionIdDidCommit(XidFromFullTransactionId(fxid)) || + TransactionIdDidAbort(XidFromFullTransactionId(fxid))) { if (fromdisk) { ereport(WARNING, - (errmsg("removing stale two-phase state file for transaction %u", - xid))); - RemoveTwoPhaseFile(xid, true); + (errmsg("removing stale two-phase state file for transaction %u of epoch %u", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)))); + RemoveTwoPhaseFile(fxid, true); } else { ereport(WARNING, - (errmsg("removing stale two-phase state from memory for transaction %u", - xid))); - PrepareRedoRemove(xid, true); + (errmsg("removing stale two-phase state from memory for transaction %u of epoch %u", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)))); + PrepareRedoRemoveFull(fxid, true); } return NULL; } /* Reject XID if too new */ - if (TransactionIdFollowsOrEquals(xid, origNextXid)) + if (FullTransactionIdFollowsOrEquals(fxid, nextXid)) { if (fromdisk) { ereport(WARNING, - (errmsg("removing future two-phase state file for transaction %u", - xid))); - RemoveTwoPhaseFile(xid, true); + (errmsg("removing future two-phase state file for transaction %u of epoch %u", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)))); + RemoveTwoPhaseFile(fxid, true); } else { ereport(WARNING, - (errmsg("removing future two-phase state from memory for transaction %u", - xid))); - PrepareRedoRemove(xid, true); + (errmsg("removing future two-phase state from memory for transaction %u of epoch %u", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)))); + PrepareRedoRemoveFull(fxid, true); } return NULL; } @@ -2233,7 +2247,7 @@ ProcessTwoPhaseBuffer(TransactionId xid, if (fromdisk) { /* Read and validate file */ - buf = ReadTwoPhaseFile(xid, false); + buf = ReadTwoPhaseFile(fxid, false); } else { @@ -2243,18 +2257,20 @@ ProcessTwoPhaseBuffer(TransactionId xid, /* Deconstruct header */ hdr = (TwoPhaseFileHeader *) buf; - if (!TransactionIdEquals(hdr->xid, xid)) + if (!TransactionIdEquals(hdr->xid, XidFromFullTransactionId(fxid))) { if (fromdisk) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), - errmsg("corrupted two-phase state file for transaction %u", - xid))); + errmsg("corrupted two-phase state file for transaction %u of epoch %u", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)))); else ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), - errmsg("corrupted two-phase state in memory for transaction %u", - xid))); + errmsg("corrupted two-phase state in memory for transaction %u of epoch %u", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)))); } /* @@ -2268,14 +2284,14 @@ ProcessTwoPhaseBuffer(TransactionId xid, { TransactionId subxid = subxids[i]; - Assert(TransactionIdFollows(subxid, xid)); + Assert(TransactionIdFollows(subxid, XidFromFullTransactionId(fxid))); /* update nextXid if needed */ if (setNextXid) AdvanceNextFullTransactionIdPastXid(subxid); if (setParent) - SubTransSetParent(subxid, xid); + SubTransSetParent(subxid, XidFromFullTransactionId(fxid)); } return buf; @@ -2286,7 +2302,7 @@ ProcessTwoPhaseBuffer(TransactionId xid, * RecordTransactionCommitPrepared * * This is basically the same as RecordTransactionCommit (q.v. if you change - * this function): in particular, we must set DELAY_CHKPT_START to avoid a + * this function): in particular, we must set DELAY_CHKPT_IN_COMMIT to avoid a * race condition. * * We know the transaction made at least one XLOG entry (its PREPARE), @@ -2306,7 +2322,7 @@ RecordTransactionCommitPrepared(TransactionId xid, const char *gid) { XLogRecPtr recptr; - TimestampTz committs = GetCurrentTimestamp(); + TimestampTz committs; bool replorigin; /* @@ -2319,8 +2335,24 @@ RecordTransactionCommitPrepared(TransactionId xid, START_CRIT_SECTION(); /* See notes in RecordTransactionCommit */ - Assert((MyProc->delayChkptFlags & DELAY_CHKPT_START) == 0); - MyProc->delayChkptFlags |= DELAY_CHKPT_START; + Assert((MyProc->delayChkptFlags & DELAY_CHKPT_IN_COMMIT) == 0); + MyProc->delayChkptFlags |= DELAY_CHKPT_IN_COMMIT; + + /* + * Ensures the DELAY_CHKPT_IN_COMMIT flag write is globally visible before + * commit time is written. + */ + pg_write_barrier(); + + /* + * Note it is important to set committs value after marking ourselves as + * in the commit critical section (DELAY_CHKPT_IN_COMMIT). This is because + * we want to ensure all transactions that have acquired commit timestamp + * are finished before we allow the logical replication client to advance + * its xid which is used to hold back dead rows for conflict detection. + * See comments atop worker.c. + */ + committs = GetCurrentTimestamp(); /* * Emit the XLOG commit record. Note that we mark 2PC commits as @@ -2369,7 +2401,7 @@ RecordTransactionCommitPrepared(TransactionId xid, TransactionIdCommitTree(xid, nchildren, children); /* Checkpoint can proceed now */ - MyProc->delayChkptFlags &= ~DELAY_CHKPT_START; + MyProc->delayChkptFlags &= ~DELAY_CHKPT_IN_COMMIT; END_CRIT_SECTION(); @@ -2466,8 +2498,9 @@ RecordTransactionAbortPrepared(TransactionId xid, * data, the entry is marked as located on disk. */ void -PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, - XLogRecPtr end_lsn, RepOriginId origin_id) +PrepareRedoAdd(FullTransactionId fxid, char *buf, + XLogRecPtr start_lsn, XLogRecPtr end_lsn, + RepOriginId origin_id) { TwoPhaseFileHeader *hdr = (TwoPhaseFileHeader *) buf; char *bufptr; @@ -2477,6 +2510,13 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, Assert(LWLockHeldByMeInMode(TwoPhaseStateLock, LW_EXCLUSIVE)); Assert(RecoveryInProgress()); + if (!FullTransactionIdIsValid(fxid)) + { + Assert(InRecovery); + fxid = FullTransactionIdFromAllowableAt(TransamVariables->nextXid, + hdr->xid); + } + bufptr = buf + MAXALIGN(sizeof(TwoPhaseFileHeader)); gid = (const char *) bufptr; @@ -2505,14 +2545,15 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, { char path[MAXPGPATH]; - TwoPhaseFilePath(path, hdr->xid); + Assert(InRecovery); + TwoPhaseFilePath(path, fxid); if (access(path, F_OK) == 0) { ereport(reachedConsistency ? ERROR : WARNING, (errmsg("could not recover two-phase state file for transaction %u", hdr->xid), - errdetail("Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk.", + errdetail("Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk.", LSN_FORMAT_ARGS(start_lsn)))); return; } @@ -2536,7 +2577,7 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, gxact->prepared_at = hdr->prepared_at; gxact->prepare_start_lsn = start_lsn; gxact->prepare_end_lsn = end_lsn; - gxact->xid = hdr->xid; + gxact->fxid = fxid; gxact->owner = hdr->owner; gxact->locking_backend = INVALID_PROC_NUMBER; gxact->valid = false; @@ -2555,11 +2596,13 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, false /* backward */ , false /* WAL */ ); } - elog(DEBUG2, "added 2PC data in shared memory for transaction %u", gxact->xid); + elog(DEBUG2, "added 2PC data in shared memory for transaction %u of epoch %u", + XidFromFullTransactionId(gxact->fxid), + EpochFromFullTransactionId(gxact->fxid)); } /* - * PrepareRedoRemove + * PrepareRedoRemoveFull * * Remove the corresponding gxact entry from TwoPhaseState. Also remove * the 2PC file if a prepared transaction was saved via an earlier checkpoint. @@ -2567,8 +2610,8 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, * Caller must hold TwoPhaseStateLock in exclusive mode, because TwoPhaseState * is updated. */ -void -PrepareRedoRemove(TransactionId xid, bool giveWarning) +static void +PrepareRedoRemoveFull(FullTransactionId fxid, bool giveWarning) { GlobalTransaction gxact = NULL; int i; @@ -2581,7 +2624,7 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning) { gxact = TwoPhaseState->prepXacts[i]; - if (gxact->xid == xid) + if (FullTransactionIdEquals(gxact->fxid, fxid)) { Assert(gxact->inredo); found = true; @@ -2598,12 +2641,28 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning) /* * And now we can clean up any files we may have left. */ - elog(DEBUG2, "removing 2PC data for transaction %u", xid); + elog(DEBUG2, "removing 2PC data for transaction %u of epoch %u ", + XidFromFullTransactionId(fxid), + EpochFromFullTransactionId(fxid)); + if (gxact->ondisk) - RemoveTwoPhaseFile(xid, giveWarning); + RemoveTwoPhaseFile(fxid, giveWarning); + RemoveGXact(gxact); } +/* + * Wrapper of PrepareRedoRemoveFull(), for TransactionIds. + */ +void +PrepareRedoRemove(TransactionId xid, bool giveWarning) +{ + FullTransactionId fxid = + FullTransactionIdFromAllowableAt(TransamVariables->nextXid, xid); + + PrepareRedoRemoveFull(fxid, giveWarning); +} + /* * LookupGXact * Check if the prepared transaction with the given GID, lsn and timestamp @@ -2648,7 +2707,7 @@ LookupGXact(const char *gid, XLogRecPtr prepare_end_lsn, * between publisher and subscriber. */ if (gxact->ondisk) - buf = ReadTwoPhaseFile(gxact->xid, false); + buf = ReadTwoPhaseFile(gxact->fxid, false); else { Assert(gxact->prepare_start_lsn); diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index fe895787cb72d..f8c4dada7c93a 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -19,11 +19,11 @@ #include "access/transam.h" #include "access/xact.h" #include "access/xlogutils.h" -#include "commands/dbcommands.h" #include "miscadmin.h" #include "postmaster/autovacuum.h" #include "storage/pmsignal.h" #include "storage/proc.h" +#include "utils/lsyscache.h" #include "utils/syscache.h" diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index b885513f76541..b46e7e9c2a6b0 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -1431,10 +1431,22 @@ RecordTransactionCommit(void) * without holding the ProcArrayLock, since we're the only one * modifying it. This makes checkpoint's determination of which xacts * are delaying the checkpoint a bit fuzzy, but it doesn't matter. + * + * Note, it is important to get the commit timestamp after marking the + * transaction in the commit critical section. See + * RecordTransactionCommitPrepared. */ - Assert((MyProc->delayChkptFlags & DELAY_CHKPT_START) == 0); + Assert((MyProc->delayChkptFlags & DELAY_CHKPT_IN_COMMIT) == 0); START_CRIT_SECTION(); - MyProc->delayChkptFlags |= DELAY_CHKPT_START; + MyProc->delayChkptFlags |= DELAY_CHKPT_IN_COMMIT; + + Assert(xactStopTimestamp == 0); + + /* + * Ensures the DELAY_CHKPT_IN_COMMIT flag write is globally visible + * before commit time is written. + */ + pg_write_barrier(); /* * Insert the commit XLOG record. @@ -1537,7 +1549,7 @@ RecordTransactionCommit(void) */ if (markXidCommitted) { - MyProc->delayChkptFlags &= ~DELAY_CHKPT_START; + MyProc->delayChkptFlags &= ~DELAY_CHKPT_IN_COMMIT; END_CRIT_SECTION(); } @@ -2515,7 +2527,7 @@ static void PrepareTransaction(void) { TransactionState s = CurrentTransactionState; - TransactionId xid = GetCurrentTransactionId(); + FullTransactionId fxid = GetCurrentFullTransactionId(); GlobalTransaction gxact; TimestampTz prepared_at; @@ -2644,7 +2656,7 @@ PrepareTransaction(void) * Reserve the GID for this transaction. This could fail if the requested * GID is invalid or already in use. */ - gxact = MarkAsPreparing(xid, prepareGID, prepared_at, + gxact = MarkAsPreparing(fxid, prepareGID, prepared_at, GetUserId(), MyDatabaseId); prepareGID = NULL; @@ -2694,7 +2706,7 @@ PrepareTransaction(void) * ProcArrayClearTransaction(). Otherwise, a GetLockConflicts() would * conclude "xact already committed or aborted" for our locks. */ - PostPrepare_Locks(xid); + PostPrepare_Locks(fxid); /* * Let others know about no transaction in progress by me. This has to be @@ -2738,9 +2750,9 @@ PrepareTransaction(void) PostPrepare_smgr(); - PostPrepare_MultiXact(xid); + PostPrepare_MultiXact(fxid); - PostPrepare_PredicateLocks(xid); + PostPrepare_PredicateLocks(fxid); ResourceOwnerRelease(TopTransactionResourceOwner, RESOURCE_RELEASE_LOCKS, @@ -6420,7 +6432,8 @@ xact_redo(XLogReaderState *record) * gxact entry. */ LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE); - PrepareRedoAdd(XLogRecGetData(record), + PrepareRedoAdd(InvalidFullTransactionId, + XLogRecGetData(record), record->ReadRecPtr, record->EndRecPtr, XLogRecGetOrigin(record)); diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index fc30a52d496aa..7ffb217915190 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -96,6 +96,7 @@ #include "utils/guc_hooks.h" #include "utils/guc_tables.h" #include "utils/injection_point.h" +#include "utils/pgstat_internal.h" #include "utils/ps_status.h" #include "utils/relmapper.h" #include "utils/snapmgr.h" @@ -454,7 +455,6 @@ typedef struct XLogCtlData /* Protected by info_lck: */ XLogwrtRqst LogwrtRqst; XLogRecPtr RedoRecPtr; /* a recent copy of Insert->RedoRecPtr */ - FullTransactionId ckptFullXid; /* nextXid of latest checkpoint */ XLogRecPtr asyncXactLSN; /* LSN of newest async commit/abort */ XLogRecPtr replicationSlotMinLSN; /* oldest LSN needed by any slot */ @@ -692,7 +692,7 @@ static void InitControlFile(uint64 sysidentifier, uint32 data_checksum_version); static void WriteControlFile(void); static void ReadControlFile(void); static void UpdateControlFile(void); -static char *str_time(pg_time_t tnow); +static char *str_time(pg_time_t tnow, char *buf, size_t bufsize); static int get_sync_bit(int method); @@ -1017,7 +1017,7 @@ XLogInsertRecord(XLogRecData *rdata, oldCxt = MemoryContextSwitchTo(walDebugCxt); initStringInfo(&buf); - appendStringInfo(&buf, "INSERT @ %X/%X: ", LSN_FORMAT_ARGS(EndPos)); + appendStringInfo(&buf, "INSERT @ %X/%08X: ", LSN_FORMAT_ARGS(EndPos)); /* * We have to piece together the WAL record data from the XLogRecData @@ -1081,6 +1081,9 @@ XLogInsertRecord(XLogRecData *rdata, pgWalUsage.wal_bytes += rechdr->xl_tot_len; pgWalUsage.wal_records++; pgWalUsage.wal_fpi += num_fpi; + + /* Required for the flush of pending stats WAL data */ + pgstat_report_fixed = true; } return EndPos; @@ -1538,8 +1541,8 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto) if (upto > reservedUpto) { ereport(LOG, - (errmsg("request to flush past end of generated WAL; request %X/%X, current position %X/%X", - LSN_FORMAT_ARGS(upto), LSN_FORMAT_ARGS(reservedUpto)))); + errmsg("request to flush past end of generated WAL; request %X/%08X, current position %X/%08X", + LSN_FORMAT_ARGS(upto), LSN_FORMAT_ARGS(reservedUpto))); upto = reservedUpto; } @@ -1705,7 +1708,7 @@ GetXLogBuffer(XLogRecPtr ptr, TimeLineID tli) endptr = pg_atomic_read_u64(&XLogCtl->xlblocks[idx]); if (expectedEndPtr != endptr) - elog(PANIC, "could not find WAL buffer for %X/%X", + elog(PANIC, "could not find WAL buffer for %X/%08X", LSN_FORMAT_ARGS(ptr)); } else @@ -1765,7 +1768,7 @@ WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count, inserted = pg_atomic_read_u64(&XLogCtl->logInsertResult); if (startptr + count > inserted) ereport(ERROR, - errmsg("cannot read past end of generated WAL: requested %X/%X, current position %X/%X", + errmsg("cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X", LSN_FORMAT_ARGS(startptr + count), LSN_FORMAT_ARGS(inserted))); @@ -2059,6 +2062,12 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli, bool opportunistic) LWLockRelease(WALWriteLock); pgWalUsage.wal_buffers_full++; TRACE_POSTGRESQL_WAL_BUFFER_WRITE_DIRTY_DONE(); + + /* + * Required for the flush of pending stats WAL data, per + * update of pgWalUsage. + */ + pgstat_report_fixed = true; } /* Re-acquire WALBufMappingLock and retry */ LWLockAcquire(WALBufMappingLock, LW_EXCLUSIVE); @@ -2148,7 +2157,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli, bool opportunistic) #ifdef WAL_DEBUG if (XLOG_DEBUG && npages > 0) { - elog(DEBUG1, "initialized %d pages, up to %X/%X", + elog(DEBUG1, "initialized %d pages, up to %X/%08X", npages, LSN_FORMAT_ARGS(NewPageEndPtr)); } #endif @@ -2213,25 +2222,6 @@ check_wal_segment_size(int *newval, void **extra, GucSource source) return true; } -/* - * GUC check_hook for max_slot_wal_keep_size - * - * We don't allow the value of max_slot_wal_keep_size other than -1 during the - * binary upgrade. See start_postmaster() in pg_upgrade for more details. - */ -bool -check_max_slot_wal_keep_size(int *newval, void **extra, GucSource source) -{ - if (IsBinaryUpgrade && *newval != -1) - { - GUC_check_errdetail("\"%s\" must be set to -1 during binary upgrade mode.", - "max_slot_wal_keep_size"); - return false; - } - - return true; -} - /* * At a checkpoint, how many WAL segments to recycle as preallocated future * XLOG segments? Returns the highest segment that should be preallocated. @@ -2359,7 +2349,7 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible) XLogRecPtr EndPtr = pg_atomic_read_u64(&XLogCtl->xlblocks[curridx]); if (LogwrtResult.Write >= EndPtr) - elog(PANIC, "xlog write request %X/%X is past end of log %X/%X", + elog(PANIC, "xlog write request %X/%08X is past end of log %X/%08X", LSN_FORMAT_ARGS(LogwrtResult.Write), LSN_FORMAT_ARGS(EndPtr)); @@ -2759,7 +2749,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) newMinRecoveryPoint = GetCurrentReplayRecPtr(&newMinRecoveryPointTLI); if (!force && newMinRecoveryPoint < lsn) elog(WARNING, - "xlog min recovery request %X/%X is past current point %X/%X", + "xlog min recovery request %X/%08X is past current point %X/%08X", LSN_FORMAT_ARGS(lsn), LSN_FORMAT_ARGS(newMinRecoveryPoint)); /* update control file */ @@ -2772,9 +2762,9 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) LocalMinRecoveryPointTLI = newMinRecoveryPointTLI; ereport(DEBUG2, - (errmsg_internal("updated min recovery point to %X/%X on timeline %u", - LSN_FORMAT_ARGS(newMinRecoveryPoint), - newMinRecoveryPointTLI))); + errmsg_internal("updated min recovery point to %X/%08X on timeline %u", + LSN_FORMAT_ARGS(newMinRecoveryPoint), + newMinRecoveryPointTLI)); } } LWLockRelease(ControlFileLock); @@ -2812,7 +2802,7 @@ XLogFlush(XLogRecPtr record) #ifdef WAL_DEBUG if (XLOG_DEBUG) - elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X", + elog(LOG, "xlog flush request %X/%08X; write %X/%08X; flush %X/%08X", LSN_FORMAT_ARGS(record), LSN_FORMAT_ARGS(LogwrtResult.Write), LSN_FORMAT_ARGS(LogwrtResult.Flush)); @@ -2945,7 +2935,7 @@ XLogFlush(XLogRecPtr record) */ if (LogwrtResult.Flush < record) elog(ERROR, - "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X", + "xlog flush request %X/%08X is not satisfied --- flushed only to %X/%08X", LSN_FORMAT_ARGS(record), LSN_FORMAT_ARGS(LogwrtResult.Flush)); } @@ -3072,7 +3062,7 @@ XLogBackgroundFlush(void) #ifdef WAL_DEBUG if (XLOG_DEBUG) - elog(LOG, "xlog bg flush request write %X/%X; flush: %X/%X, current is write %X/%X; flush %X/%X", + elog(LOG, "xlog bg flush request write %X/%08X; flush: %X/%08X, current is write %X/%08X; flush %X/%08X", LSN_FORMAT_ARGS(WriteRqst.Write), LSN_FORMAT_ARGS(WriteRqst.Flush), LSN_FORMAT_ARGS(LogwrtResult.Write), @@ -4267,7 +4257,7 @@ WriteControlFile(void) ControlFile->toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE; ControlFile->loblksize = LOBLKSIZE; - ControlFile->float8ByVal = FLOAT8PASSBYVAL; + ControlFile->float8ByVal = true; /* vestigial */ /* * Initialize the default 'char' signedness. @@ -4528,23 +4518,7 @@ ReadControlFile(void) "LOBLKSIZE", (int) LOBLKSIZE), errhint("It looks like you need to recompile or initdb."))); -#ifdef USE_FLOAT8_BYVAL - if (ControlFile->float8ByVal != true) - ereport(FATAL, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("database files are incompatible with server"), - errdetail("The database cluster was initialized without USE_FLOAT8_BYVAL" - " but the server was compiled with USE_FLOAT8_BYVAL."), - errhint("It looks like you need to recompile or initdb."))); -#else - if (ControlFile->float8ByVal != false) - ereport(FATAL, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("database files are incompatible with server"), - errdetail("The database cluster was initialized with USE_FLOAT8_BYVAL" - " but the server was compiled without USE_FLOAT8_BYVAL."), - errhint("It looks like you need to recompile or initdb."))); -#endif + Assert(ControlFile->float8ByVal); /* vestigial, not worth an error msg */ wal_segment_size = ControlFile->xlog_seg_size; @@ -5244,11 +5218,9 @@ BootStrapXLOG(uint32 data_checksum_version) } static char * -str_time(pg_time_t tnow) +str_time(pg_time_t tnow, char *buf, size_t bufsize) { - char *buf = palloc(128); - - pg_strftime(buf, 128, + pg_strftime(buf, bufsize, "%Y-%m-%d %H:%M:%S %Z", pg_localtime(&tnow, log_timezone)); @@ -5491,6 +5463,7 @@ StartupXLOG(void) XLogRecPtr missingContrecPtr; TransactionId oldestActiveXID; bool promoted = false; + char timebuf[128]; /* * We should have an aux process resource owner to use, and we should not @@ -5519,25 +5492,29 @@ StartupXLOG(void) */ ereport(IsPostmasterEnvironment ? LOG : NOTICE, (errmsg("database system was shut down at %s", - str_time(ControlFile->time)))); + str_time(ControlFile->time, + timebuf, sizeof(timebuf))))); break; case DB_SHUTDOWNED_IN_RECOVERY: ereport(LOG, (errmsg("database system was shut down in recovery at %s", - str_time(ControlFile->time)))); + str_time(ControlFile->time, + timebuf, sizeof(timebuf))))); break; case DB_SHUTDOWNING: ereport(LOG, (errmsg("database system shutdown was interrupted; last known up at %s", - str_time(ControlFile->time)))); + str_time(ControlFile->time, + timebuf, sizeof(timebuf))))); break; case DB_IN_CRASH_RECOVERY: ereport(LOG, (errmsg("database system was interrupted while in recovery at %s", - str_time(ControlFile->time)), + str_time(ControlFile->time, + timebuf, sizeof(timebuf))), errhint("This probably means that some data is corrupted and" " you will have to use the last backup for recovery."))); break; @@ -5545,7 +5522,8 @@ StartupXLOG(void) case DB_IN_ARCHIVE_RECOVERY: ereport(LOG, (errmsg("database system was interrupted while in recovery at log time %s", - str_time(ControlFile->checkPointCopy.time)), + str_time(ControlFile->checkPointCopy.time, + timebuf, sizeof(timebuf))), errhint("If this has occurred more than once some data might be corrupted" " and you might need to choose an earlier recovery target."))); break; @@ -5553,7 +5531,8 @@ StartupXLOG(void) case DB_IN_PRODUCTION: ereport(LOG, (errmsg("database system was interrupted; last known up at %s", - str_time(ControlFile->time)))); + str_time(ControlFile->time, + timebuf, sizeof(timebuf))))); break; default: @@ -5626,7 +5605,6 @@ StartupXLOG(void) SetMultiXactIdLimit(checkPoint.oldestMulti, checkPoint.oldestMultiDB, true); SetCommitTsLimit(checkPoint.oldestCommitTsXid, checkPoint.newestCommitTsXid); - XLogCtl->ckptFullXid = checkPoint.nextXid; /* * Clear out any old relcache cache files. This is *necessary* if we do @@ -6196,6 +6174,12 @@ StartupXLOG(void) */ CompleteCommitTsInitialization(); + /* Clean up EndOfWalRecoveryInfo data to appease Valgrind leak checking */ + if (endOfRecoveryInfo->lastPage) + pfree(endOfRecoveryInfo->lastPage); + pfree(endOfRecoveryInfo->recoveryStopReason); + pfree(endOfRecoveryInfo); + /* * All done with end-of-recovery actions. * @@ -6365,7 +6349,7 @@ PerformRecoveryXLogAction(void) else { RequestCheckpoint(CHECKPOINT_END_OF_RECOVERY | - CHECKPOINT_IMMEDIATE | + CHECKPOINT_FAST | CHECKPOINT_WAIT); } @@ -6674,7 +6658,7 @@ ShutdownXLOG(int code, Datum arg) WalSndWaitStopping(); if (RecoveryInProgress()) - CreateRestartPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE); + CreateRestartPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_FAST); else { /* @@ -6686,7 +6670,7 @@ ShutdownXLOG(int code, Datum arg) if (XLogArchivingActive()) RequestXLogSwitch(false); - CreateCheckPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE); + CreateCheckPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_FAST); } } @@ -6702,24 +6686,24 @@ LogCheckpointStart(int flags, bool restartpoint) (errmsg("restartpoint starting:%s%s%s%s%s%s%s%s", (flags & CHECKPOINT_IS_SHUTDOWN) ? " shutdown" : "", (flags & CHECKPOINT_END_OF_RECOVERY) ? " end-of-recovery" : "", - (flags & CHECKPOINT_IMMEDIATE) ? " immediate" : "", + (flags & CHECKPOINT_FAST) ? " fast" : "", (flags & CHECKPOINT_FORCE) ? " force" : "", (flags & CHECKPOINT_WAIT) ? " wait" : "", (flags & CHECKPOINT_CAUSE_XLOG) ? " wal" : "", (flags & CHECKPOINT_CAUSE_TIME) ? " time" : "", - (flags & CHECKPOINT_FLUSH_ALL) ? " flush-all" : ""))); + (flags & CHECKPOINT_FLUSH_UNLOGGED) ? " flush-unlogged" : ""))); else ereport(LOG, /* translator: the placeholders show checkpoint options */ (errmsg("checkpoint starting:%s%s%s%s%s%s%s%s", (flags & CHECKPOINT_IS_SHUTDOWN) ? " shutdown" : "", (flags & CHECKPOINT_END_OF_RECOVERY) ? " end-of-recovery" : "", - (flags & CHECKPOINT_IMMEDIATE) ? " immediate" : "", + (flags & CHECKPOINT_FAST) ? " fast" : "", (flags & CHECKPOINT_FORCE) ? " force" : "", (flags & CHECKPOINT_WAIT) ? " wait" : "", (flags & CHECKPOINT_CAUSE_XLOG) ? " wal" : "", (flags & CHECKPOINT_CAUSE_TIME) ? " time" : "", - (flags & CHECKPOINT_FLUSH_ALL) ? " flush-all" : ""))); + (flags & CHECKPOINT_FLUSH_UNLOGGED) ? " flush-unlogged" : ""))); } /* @@ -6781,7 +6765,7 @@ LogCheckpointEnd(bool restartpoint) "%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", + "estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X", CheckpointStats.ckpt_bufs_written, (double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers, CheckpointStats.ckpt_slru_written, @@ -6805,7 +6789,7 @@ LogCheckpointEnd(bool restartpoint) "%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", + "estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X", CheckpointStats.ckpt_bufs_written, (double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers, CheckpointStats.ckpt_slru_written, @@ -6902,12 +6886,12 @@ update_checkpoint_display(int flags, bool restartpoint, bool reset) * flags is a bitwise OR of the following: * CHECKPOINT_IS_SHUTDOWN: checkpoint is for database shutdown. * CHECKPOINT_END_OF_RECOVERY: checkpoint is for end of WAL recovery. - * CHECKPOINT_IMMEDIATE: finish the checkpoint ASAP, - * ignoring checkpoint_completion_target parameter. + * CHECKPOINT_FAST: finish the checkpoint ASAP, ignoring + * checkpoint_completion_target parameter. * CHECKPOINT_FORCE: force a checkpoint even if no XLOG activity has occurred * since the last one (implied by CHECKPOINT_IS_SHUTDOWN or * CHECKPOINT_END_OF_RECOVERY). - * CHECKPOINT_FLUSH_ALL: also flush buffers of unlogged tables. + * CHECKPOINT_FLUSH_UNLOGGED: also flush buffers of unlogged tables. * * Note: flags contains other bits, of interest here only for logging purposes. * In particular note that this routine is synchronous and does not pay @@ -7002,7 +6986,7 @@ CreateCheckPoint(int flags) * starting snapshot of locks and transactions. */ if (!shutdown && XLogStandbyInfoActive()) - checkPoint.oldestActiveXid = GetOldestActiveTransactionId(); + checkPoint.oldestActiveXid = GetOldestActiveTransactionId(false, true); else checkPoint.oldestActiveXid = InvalidTransactionId; @@ -7316,11 +7300,6 @@ CreateCheckPoint(int flags) UpdateControlFile(); LWLockRelease(ControlFileLock); - /* Update shared-memory copy of checkpoint XID/epoch */ - SpinLockAcquire(&XLogCtl->info_lck); - XLogCtl->ckptFullXid = checkPoint.nextXid; - SpinLockRelease(&XLogCtl->info_lck); - /* * We are now done with critical updates; no need for system panic if we * have trouble while fooling with old log segments. @@ -7358,6 +7337,10 @@ CreateCheckPoint(int flags) if (PriorRedoPtr != InvalidXLogRecPtr) UpdateCheckPointDistanceEstimate(RedoRecPtr - PriorRedoPtr); +#ifdef USE_INJECTION_POINTS + INJECTION_POINT("checkpoint-before-old-wal-removal", NULL); +#endif + /* * Delete old log files, those no longer needed for last checkpoint to * prevent the disk holding the xlog from growing full. @@ -7497,7 +7480,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr, if (!RecoveryInProgress()) elog(ERROR, "can only be used at end of recovery"); if (pagePtr % XLOG_BLCKSZ != 0) - elog(ERROR, "invalid position for missing continuation record %X/%X", + elog(ERROR, "invalid position for missing continuation record %X/%08X", LSN_FORMAT_ARGS(pagePtr)); /* The current WAL insert position should be right after the page header */ @@ -7508,7 +7491,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr, startPos += SizeOfXLogShortPHD; recptr = GetXLogInsertRecPtr(); if (recptr != startPos) - elog(ERROR, "invalid WAL insert position %X/%X for OVERWRITE_CONTRECORD", + elog(ERROR, "invalid WAL insert position %X/%08X for OVERWRITE_CONTRECORD", LSN_FORMAT_ARGS(recptr)); START_CRIT_SECTION(); @@ -7538,7 +7521,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr, /* check that the record was inserted to the right place */ if (ProcLastRecPtr != startPos) - elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%X", + elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%08X", LSN_FORMAT_ARGS(ProcLastRecPtr)); XLogFlush(recptr); @@ -7607,8 +7590,7 @@ RecoveryRestartPoint(const CheckPoint *checkPoint, XLogReaderState *record) if (XLogHaveInvalidPages()) { elog(DEBUG2, - "could not record restart point at %X/%X because there " - "are unresolved references to invalid pages", + "could not record restart point at %X/%08X because there are unresolved references to invalid pages", LSN_FORMAT_ARGS(checkPoint->redo)); return; } @@ -7688,8 +7670,8 @@ CreateRestartPoint(int flags) lastCheckPoint.redo <= ControlFile->checkPointCopy.redo) { ereport(DEBUG2, - (errmsg_internal("skipping restartpoint, already performed at %X/%X", - LSN_FORMAT_ARGS(lastCheckPoint.redo)))); + errmsg_internal("skipping restartpoint, already performed at %X/%08X", + LSN_FORMAT_ARGS(lastCheckPoint.redo))); UpdateMinRecoveryPoint(InvalidXLogRecPtr, true); if (flags & CHECKPOINT_IS_SHUTDOWN) @@ -7742,7 +7724,7 @@ CreateRestartPoint(int flags) * This location needs to be after CheckPointGuts() to ensure that some * work has already happened during this checkpoint. */ - INJECTION_POINT("create-restart-point"); + INJECTION_POINT("create-restart-point", NULL); /* * Remember the prior checkpoint's redo ptr for @@ -7873,10 +7855,10 @@ CreateRestartPoint(int flags) xtime = GetLatestXTime(); ereport((log_checkpoints ? LOG : DEBUG2), - (errmsg("recovery restart point at %X/%X", - LSN_FORMAT_ARGS(lastCheckPoint.redo)), - xtime ? errdetail("Last completed transaction was at log time %s.", - timestamptz_to_str(xtime)) : 0)); + errmsg("recovery restart point at %X/%08X", + LSN_FORMAT_ARGS(lastCheckPoint.redo)), + xtime ? errdetail("Last completed transaction was at log time %s.", + timestamptz_to_str(xtime)) : 0); /* * Finally, execute archive_cleanup_command, if any. @@ -8007,17 +7989,19 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo) XLByteToSeg(recptr, currSegNo, wal_segment_size); segno = currSegNo; - /* - * Calculate how many segments are kept by slots first, adjusting for - * max_slot_wal_keep_size. - */ + /* Calculate how many segments are kept by slots. */ keep = XLogGetReplicationSlotMinimumLSN(); if (keep != InvalidXLogRecPtr && keep < recptr) { XLByteToSeg(keep, segno, wal_segment_size); - /* Cap by max_slot_wal_keep_size ... */ - if (max_slot_wal_keep_size_mb >= 0) + /* + * Account for max_slot_wal_keep_size to avoid keeping more than + * configured. However, don't do that during a binary upgrade: if + * slots were to be invalidated because of this, it would not be + * possible to preserve logical ones during the upgrade. + */ + if (max_slot_wal_keep_size_mb >= 0 && !IsBinaryUpgrade) { uint64 slot_keep_segs; @@ -8137,8 +8121,8 @@ XLogRestorePoint(const char *rpName) RecPtr = XLogInsert(RM_XLOG_ID, XLOG_RESTORE_POINT); ereport(LOG, - (errmsg("restore point \"%s\" created at %X/%X", - rpName, LSN_FORMAT_ARGS(RecPtr)))); + errmsg("restore point \"%s\" created at %X/%08X", + rpName, LSN_FORMAT_ARGS(RecPtr))); return RecPtr; } @@ -8390,11 +8374,6 @@ xlog_redo(XLogReaderState *record) ControlFile->checkPointCopy.nextXid = checkPoint.nextXid; LWLockRelease(ControlFileLock); - /* Update shared-memory copy of checkpoint XID/epoch */ - SpinLockAcquire(&XLogCtl->info_lck); - XLogCtl->ckptFullXid = checkPoint.nextXid; - SpinLockRelease(&XLogCtl->info_lck); - /* * We should've already switched to the new TLI before replaying this * record. @@ -8451,11 +8430,6 @@ xlog_redo(XLogReaderState *record) ControlFile->checkPointCopy.nextXid = checkPoint.nextXid; LWLockRelease(ControlFileLock); - /* Update shared-memory copy of checkpoint XID/epoch */ - SpinLockAcquire(&XLogCtl->info_lck); - XLogCtl->ckptFullXid = checkPoint.nextXid; - SpinLockRelease(&XLogCtl->info_lck); - /* TLI should not change in an on-line checkpoint */ (void) GetCurrentReplayRecPtr(&replayTLI); if (checkPoint.ThisTimeLineID != replayTLI) @@ -8803,9 +8777,8 @@ issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli) * backup state and tablespace map. * * Input parameters are "state" (the backup state), "fast" (if true, we do - * the checkpoint in immediate mode to make it faster), and "tablespaces" - * (if non-NULL, indicates a list of tablespaceinfo structs describing the - * cluster's tablespaces.). + * the checkpoint in fast mode), and "tablespaces" (if non-NULL, indicates a + * list of tablespaceinfo structs describing the cluster's tablespaces.). * * The tablespace map contents are appended to passed-in parameter * tablespace_map and the caller is responsible for including it in the backup @@ -8882,7 +8855,7 @@ do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, * work correctly, it is critical that sessionBackupState is only updated * after this block is over. */ - PG_ENSURE_ERROR_CLEANUP(do_pg_abort_backup, DatumGetBool(true)); + PG_ENSURE_ERROR_CLEANUP(do_pg_abort_backup, BoolGetDatum(true)); { bool gotUniqueStartpoint = false; DIR *tblspcdir; @@ -8933,11 +8906,11 @@ do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, * during recovery means that checkpointer is running, we can use * RequestCheckpoint() to establish a restartpoint. * - * We use CHECKPOINT_IMMEDIATE only if requested by user (via - * passing fast = true). Otherwise this can take awhile. + * We use CHECKPOINT_FAST only if requested by user (via passing + * fast = true). Otherwise this can take awhile. */ RequestCheckpoint(CHECKPOINT_FORCE | CHECKPOINT_WAIT | - (fast ? CHECKPOINT_IMMEDIATE : 0)); + (fast ? CHECKPOINT_FAST : 0)); /* * Now we need to fetch the checkpoint record location, and also @@ -9121,7 +9094,7 @@ do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, state->starttime = (pg_time_t) time(NULL); } - PG_END_ENSURE_ERROR_CLEANUP(do_pg_abort_backup, DatumGetBool(true)); + PG_END_ENSURE_ERROR_CLEANUP(do_pg_abort_backup, BoolGetDatum(true)); state->started_in_recovery = backup_started_in_recovery; @@ -9461,7 +9434,7 @@ register_persistent_abort_backup_handler(void) if (already_done) return; - before_shmem_exit(do_pg_abort_backup, DatumGetBool(false)); + before_shmem_exit(do_pg_abort_backup, BoolGetDatum(false)); already_done = true; } diff --git a/src/backend/access/transam/xlogbackup.c b/src/backend/access/transam/xlogbackup.c index 342590e0a46d3..cda4b38b7d67d 100644 --- a/src/backend/access/transam/xlogbackup.c +++ b/src/backend/access/transam/xlogbackup.c @@ -42,7 +42,7 @@ build_backup_content(BackupState *state, bool ishistoryfile) XLByteToSeg(state->startpoint, startsegno, wal_segment_size); XLogFileName(startxlogfile, state->starttli, startsegno, wal_segment_size); - appendStringInfo(result, "START WAL LOCATION: %X/%X (file %s)\n", + appendStringInfo(result, "START WAL LOCATION: %X/%08X (file %s)\n", LSN_FORMAT_ARGS(state->startpoint), startxlogfile); if (ishistoryfile) @@ -52,11 +52,11 @@ build_backup_content(BackupState *state, bool ishistoryfile) XLByteToSeg(state->stoppoint, stopsegno, wal_segment_size); XLogFileName(stopxlogfile, state->stoptli, stopsegno, wal_segment_size); - appendStringInfo(result, "STOP WAL LOCATION: %X/%X (file %s)\n", + appendStringInfo(result, "STOP WAL LOCATION: %X/%08X (file %s)\n", LSN_FORMAT_ARGS(state->stoppoint), stopxlogfile); } - appendStringInfo(result, "CHECKPOINT LOCATION: %X/%X\n", + appendStringInfo(result, "CHECKPOINT LOCATION: %X/%08X\n", LSN_FORMAT_ARGS(state->checkpointloc)); appendStringInfoString(result, "BACKUP METHOD: streamed\n"); appendStringInfo(result, "BACKUP FROM: %s\n", @@ -81,7 +81,7 @@ build_backup_content(BackupState *state, bool ishistoryfile) Assert(XLogRecPtrIsInvalid(state->istartpoint) == (state->istarttli == 0)); if (!XLogRecPtrIsInvalid(state->istartpoint)) { - appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%X\n", + appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%08X\n", LSN_FORMAT_ARGS(state->istartpoint)); appendStringInfo(result, "INCREMENTAL FROM TLI: %u\n", state->istarttli); diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 5ee9d0b028eae..c7571429e8e97 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -529,6 +529,18 @@ XLogInsert(RmgrId rmid, uint8 info) return EndPos; } +/* + * Simple wrapper to XLogInsert to insert a WAL record with elementary + * contents (only an int64 is supported as value currently). + */ +XLogRecPtr +XLogSimpleInsertInt64(RmgrId rmid, uint8 info, int64 value) +{ + XLogBeginInsert(); + XLogRegisterData(&value, sizeof(value)); + return XLogInsert(rmid, info); +} + /* * Assemble a WAL record from the registered data and buffers into an * XLogRecData chain, ready for insertion with XLogInsertRecord(). diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c index 7735562db01d1..ed3aacabc986e 100644 --- a/src/backend/access/transam/xlogprefetcher.c +++ b/src/backend/access/transam/xlogprefetcher.c @@ -546,7 +546,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn) #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "suppressing all readahead until %X/%X is replayed due to possible TLI change", + "suppressing all readahead until %X/%08X is replayed due to possible TLI change", LSN_FORMAT_ARGS(record->lsn)); #endif @@ -579,7 +579,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn) #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "suppressing prefetch in database %u until %X/%X is replayed due to raw file copy", + "suppressing prefetch in database %u until %X/%08X is replayed due to raw file copy", rlocator.dbOid, LSN_FORMAT_ARGS(record->lsn)); #endif @@ -607,7 +607,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn) #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "suppressing prefetch in relation %u/%u/%u until %X/%X is replayed, which creates the relation", + "suppressing prefetch in relation %u/%u/%u until %X/%08X is replayed, which creates the relation", xlrec->rlocator.spcOid, xlrec->rlocator.dbOid, xlrec->rlocator.relNumber, @@ -630,7 +630,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn) #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, which truncates the relation", + "suppressing prefetch in relation %u/%u/%u from block %u until %X/%08X is replayed, which truncates the relation", xlrec->rlocator.spcOid, xlrec->rlocator.dbOid, xlrec->rlocator.relNumber, @@ -729,7 +729,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn) { #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "suppressing all prefetch in relation %u/%u/%u until %X/%X is replayed, because the relation does not exist on disk", + "suppressing all prefetch in relation %u/%u/%u until %X/%08X is replayed, because the relation does not exist on disk", reln->smgr_rlocator.locator.spcOid, reln->smgr_rlocator.locator.dbOid, reln->smgr_rlocator.locator.relNumber, @@ -750,7 +750,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn) { #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, because the relation is too small", + "suppressing prefetch in relation %u/%u/%u from block %u until %X/%08X is replayed, because the relation is too small", reln->smgr_rlocator.locator.spcOid, reln->smgr_rlocator.locator.dbOid, reln->smgr_rlocator.locator.relNumber, @@ -928,7 +928,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator, { #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (blocks >= %u filtered)", + "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%08X is replayed (blocks >= %u filtered)", rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno, LSN_FORMAT_ARGS(filter->filter_until_replayed), filter->filter_from_block); @@ -944,7 +944,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator, { #ifdef XLOGPREFETCHER_DEBUG_LEVEL elog(XLOGPREFETCHER_DEBUG_LEVEL, - "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (whole database)", + "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%08X is replayed (whole database)", rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno, LSN_FORMAT_ARGS(filter->filter_until_replayed)); #endif diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 2790ade1f91e8..dcc8d4f9c1b0b 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -617,7 +617,7 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking) } else if (targetRecOff < pageHeaderSize) { - report_invalid_record(state, "invalid record offset at %X/%X: expected at least %u, got %u", + report_invalid_record(state, "invalid record offset at %X/%08X: expected at least %u, got %u", LSN_FORMAT_ARGS(RecPtr), pageHeaderSize, targetRecOff); goto err; @@ -626,7 +626,7 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking) if ((((XLogPageHeader) state->readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD) && targetRecOff == pageHeaderSize) { - report_invalid_record(state, "contrecord is requested by %X/%X", + report_invalid_record(state, "contrecord is requested by %X/%08X", LSN_FORMAT_ARGS(RecPtr)); goto err; } @@ -667,7 +667,7 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking) if (total_len < SizeOfXLogRecord) { report_invalid_record(state, - "invalid record length at %X/%X: expected at least %u, got %u", + "invalid record length at %X/%08X: expected at least %u, got %u", LSN_FORMAT_ARGS(RecPtr), (uint32) SizeOfXLogRecord, total_len); goto err; @@ -723,11 +723,12 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking) /* Calculate pointer to beginning of next page */ targetPagePtr += XLOG_BLCKSZ; - /* Wait for the next page to become available */ - readOff = ReadPageInternal(state, targetPagePtr, - Min(total_len - gotlen + SizeOfXLogShortPHD, - XLOG_BLCKSZ)); - + /* + * Read the page header before processing the record data, so we + * can handle the case where the previous record ended as being a + * partial one. + */ + readOff = ReadPageInternal(state, targetPagePtr, SizeOfXLogShortPHD); if (readOff == XLREAD_WOULDBLOCK) return XLREAD_WOULDBLOCK; else if (readOff < 0) @@ -756,7 +757,7 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking) if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD)) { report_invalid_record(state, - "there is no contrecord flag at %X/%X", + "there is no contrecord flag at %X/%08X", LSN_FORMAT_ARGS(RecPtr)); goto err; } @@ -769,13 +770,22 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking) total_len != (pageHeader->xlp_rem_len + gotlen)) { report_invalid_record(state, - "invalid contrecord length %u (expected %lld) at %X/%X", + "invalid contrecord length %u (expected %lld) at %X/%08X", pageHeader->xlp_rem_len, ((long long) total_len) - gotlen, LSN_FORMAT_ARGS(RecPtr)); goto err; } + /* Wait for the next page to become available */ + readOff = ReadPageInternal(state, targetPagePtr, + Min(total_len - gotlen + SizeOfXLogShortPHD, + XLOG_BLCKSZ)); + if (readOff == XLREAD_WOULDBLOCK) + return XLREAD_WOULDBLOCK; + else if (readOff < 0) + goto err; + /* Append the continuation from this page to the buffer */ pageHeaderSize = XLogPageHeaderSize(pageHeader); @@ -1132,7 +1142,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, if (record->xl_tot_len < SizeOfXLogRecord) { report_invalid_record(state, - "invalid record length at %X/%X: expected at least %u, got %u", + "invalid record length at %X/%08X: expected at least %u, got %u", LSN_FORMAT_ARGS(RecPtr), (uint32) SizeOfXLogRecord, record->xl_tot_len); return false; @@ -1140,7 +1150,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, if (!RmgrIdIsValid(record->xl_rmid)) { report_invalid_record(state, - "invalid resource manager ID %u at %X/%X", + "invalid resource manager ID %u at %X/%08X", record->xl_rmid, LSN_FORMAT_ARGS(RecPtr)); return false; } @@ -1153,7 +1163,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, if (!(record->xl_prev < RecPtr)) { report_invalid_record(state, - "record with incorrect prev-link %X/%X at %X/%X", + "record with incorrect prev-link %X/%08X at %X/%08X", LSN_FORMAT_ARGS(record->xl_prev), LSN_FORMAT_ARGS(RecPtr)); return false; @@ -1169,7 +1179,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, if (record->xl_prev != PrevRecPtr) { report_invalid_record(state, - "record with incorrect prev-link %X/%X at %X/%X", + "record with incorrect prev-link %X/%08X at %X/%08X", LSN_FORMAT_ARGS(record->xl_prev), LSN_FORMAT_ARGS(RecPtr)); return false; @@ -1207,7 +1217,7 @@ ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr) if (!EQ_CRC32C(record->xl_crc, crc)) { report_invalid_record(state, - "incorrect resource manager data checksum in record at %X/%X", + "incorrect resource manager data checksum in record at %X/%08X", LSN_FORMAT_ARGS(recptr)); return false; } @@ -1241,7 +1251,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize); report_invalid_record(state, - "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u", + "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u", hdr->xlp_magic, fname, LSN_FORMAT_ARGS(recptr), @@ -1256,7 +1266,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize); report_invalid_record(state, - "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u", + "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u", hdr->xlp_info, fname, LSN_FORMAT_ARGS(recptr), @@ -1298,7 +1308,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, /* hmm, first page of file doesn't have a long header? */ report_invalid_record(state, - "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u", + "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u", hdr->xlp_info, fname, LSN_FORMAT_ARGS(recptr), @@ -1318,7 +1328,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize); report_invalid_record(state, - "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u", + "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u", LSN_FORMAT_ARGS(hdr->xlp_pageaddr), fname, LSN_FORMAT_ARGS(recptr), @@ -1344,7 +1354,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize); report_invalid_record(state, - "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u", + "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u", hdr->xlp_tli, state->latestPageTLI, fname, @@ -1756,7 +1766,7 @@ DecodeXLogRecord(XLogReaderState *state, if (block_id <= decoded->max_block_id) { report_invalid_record(state, - "out-of-order block_id %u at %X/%X", + "out-of-order block_id %u at %X/%08X", block_id, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; @@ -1780,14 +1790,14 @@ DecodeXLogRecord(XLogReaderState *state, if (blk->has_data && blk->data_len == 0) { report_invalid_record(state, - "BKPBLOCK_HAS_DATA set, but no data included at %X/%X", + "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X", LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; } if (!blk->has_data && blk->data_len != 0) { report_invalid_record(state, - "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X", + "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X", (unsigned int) blk->data_len, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; @@ -1823,7 +1833,7 @@ DecodeXLogRecord(XLogReaderState *state, blk->bimg_len == BLCKSZ)) { report_invalid_record(state, - "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X", + "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X", (unsigned int) blk->hole_offset, (unsigned int) blk->hole_length, (unsigned int) blk->bimg_len, @@ -1839,7 +1849,7 @@ DecodeXLogRecord(XLogReaderState *state, (blk->hole_offset != 0 || blk->hole_length != 0)) { report_invalid_record(state, - "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X", + "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X", (unsigned int) blk->hole_offset, (unsigned int) blk->hole_length, LSN_FORMAT_ARGS(state->ReadRecPtr)); @@ -1853,7 +1863,7 @@ DecodeXLogRecord(XLogReaderState *state, blk->bimg_len == BLCKSZ) { report_invalid_record(state, - "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X", + "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X", (unsigned int) blk->bimg_len, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; @@ -1868,7 +1878,7 @@ DecodeXLogRecord(XLogReaderState *state, blk->bimg_len != BLCKSZ) { report_invalid_record(state, - "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X", + "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X", (unsigned int) blk->data_len, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; @@ -1884,7 +1894,7 @@ DecodeXLogRecord(XLogReaderState *state, if (rlocator == NULL) { report_invalid_record(state, - "BKPBLOCK_SAME_REL set but no previous rel at %X/%X", + "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X", LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; } @@ -1896,7 +1906,7 @@ DecodeXLogRecord(XLogReaderState *state, else { report_invalid_record(state, - "invalid block_id %u at %X/%X", + "invalid block_id %u at %X/%08X", block_id, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; } @@ -1963,7 +1973,7 @@ DecodeXLogRecord(XLogReaderState *state, shortdata_err: report_invalid_record(state, - "record with invalid length at %X/%X", + "record with invalid length at %X/%08X", LSN_FORMAT_ARGS(state->ReadRecPtr)); err: *errormsg = state->errormsg_buf; @@ -2073,14 +2083,14 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) !record->record->blocks[block_id].in_use) { report_invalid_record(record, - "could not restore image at %X/%X with invalid block %d specified", + "could not restore image at %X/%08X with invalid block %d specified", LSN_FORMAT_ARGS(record->ReadRecPtr), block_id); return false; } if (!record->record->blocks[block_id].has_image) { - report_invalid_record(record, "could not restore image at %X/%X with invalid state, block %d", + report_invalid_record(record, "could not restore image at %X/%08X with invalid state, block %d", LSN_FORMAT_ARGS(record->ReadRecPtr), block_id); return false; @@ -2107,7 +2117,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) bkpb->bimg_len, BLCKSZ - bkpb->hole_length) <= 0) decomp_success = false; #else - report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d", + report_invalid_record(record, "could not restore image at %X/%08X compressed with %s not supported by build, block %d", LSN_FORMAT_ARGS(record->ReadRecPtr), "LZ4", block_id); @@ -2124,7 +2134,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) if (ZSTD_isError(decomp_result)) decomp_success = false; #else - report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d", + report_invalid_record(record, "could not restore image at %X/%08X compressed with %s not supported by build, block %d", LSN_FORMAT_ARGS(record->ReadRecPtr), "zstd", block_id); @@ -2133,7 +2143,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) } else { - report_invalid_record(record, "could not restore image at %X/%X compressed with unknown method, block %d", + report_invalid_record(record, "could not restore image at %X/%08X compressed with unknown method, block %d", LSN_FORMAT_ARGS(record->ReadRecPtr), block_id); return false; @@ -2141,7 +2151,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) if (!decomp_success) { - report_invalid_record(record, "could not decompress image at %X/%X, block %d", + report_invalid_record(record, "could not decompress image at %X/%08X, block %d", LSN_FORMAT_ARGS(record->ReadRecPtr), block_id); return false; diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 0aa3ab59085ad..f23ec8969c27d 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -291,6 +291,11 @@ static bool backupEndRequired = false; * Consistent state means that the system is internally consistent, all * the WAL has been replayed up to a certain point, and importantly, there * is no trace of later actions on disk. + * + * This flag is used only by the startup process and postmaster. When + * minRecoveryPoint is reached, the startup process sets it to true and + * sends a PMSIGNAL_RECOVERY_CONSISTENT signal to the postmaster, + * which then sets it to true upon receiving the signal. */ bool reachedConsistency = false; @@ -615,10 +620,10 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, * than ControlFile->checkPoint is used. */ ereport(LOG, - (errmsg("starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u", - LSN_FORMAT_ARGS(RedoStartLSN), - LSN_FORMAT_ARGS(CheckPointLoc), - CheckPointTLI))); + errmsg("starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u", + LSN_FORMAT_ARGS(RedoStartLSN), + LSN_FORMAT_ARGS(CheckPointLoc), + CheckPointTLI)); /* * When a backup_label file is present, we want to roll forward from @@ -631,8 +636,8 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint)); wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN); ereport(DEBUG1, - (errmsg_internal("checkpoint record is at %X/%X", - LSN_FORMAT_ARGS(CheckPointLoc)))); + errmsg_internal("checkpoint record is at %X/%08X", + LSN_FORMAT_ARGS(CheckPointLoc))); InRecovery = true; /* force recovery even if SHUTDOWNED */ /* @@ -647,23 +652,23 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, if (!ReadRecord(xlogprefetcher, LOG, false, checkPoint.ThisTimeLineID)) ereport(FATAL, - (errmsg("could not find redo location %X/%X referenced by checkpoint record at %X/%X", - LSN_FORMAT_ARGS(checkPoint.redo), LSN_FORMAT_ARGS(CheckPointLoc)), - errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" - "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" - "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup.", - DataDir, DataDir, DataDir, DataDir))); + errmsg("could not find redo location %X/%08X referenced by checkpoint record at %X/%08X", + LSN_FORMAT_ARGS(checkPoint.redo), LSN_FORMAT_ARGS(CheckPointLoc)), + errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" + "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" + "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup.", + DataDir, DataDir, DataDir, DataDir)); } } else { ereport(FATAL, - (errmsg("could not locate required checkpoint record at %X/%X", - LSN_FORMAT_ARGS(CheckPointLoc)), - errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" - "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" - "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup.", - DataDir, DataDir, DataDir, DataDir))); + errmsg("could not locate required checkpoint record at %X/%08X", + LSN_FORMAT_ARGS(CheckPointLoc)), + errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" + "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" + "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup.", + DataDir, DataDir, DataDir, DataDir)); wasShutdown = false; /* keep compiler quiet */ } @@ -768,8 +773,8 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, */ if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint)) ereport(LOG, - (errmsg("restarting backup recovery with redo LSN %X/%X", - LSN_FORMAT_ARGS(ControlFile->backupStartPoint)))); + errmsg("restarting backup recovery with redo LSN %X/%08X", + LSN_FORMAT_ARGS(ControlFile->backupStartPoint))); /* Get the last valid checkpoint record. */ CheckPointLoc = ControlFile->checkPoint; @@ -781,8 +786,8 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, if (record != NULL) { ereport(DEBUG1, - (errmsg_internal("checkpoint record is at %X/%X", - LSN_FORMAT_ARGS(CheckPointLoc)))); + errmsg_internal("checkpoint record is at %X/%08X", + LSN_FORMAT_ARGS(CheckPointLoc))); } else { @@ -793,8 +798,8 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, * simplify processing around checkpoints. */ ereport(PANIC, - (errmsg("could not locate a valid checkpoint record at %X/%X", - LSN_FORMAT_ARGS(CheckPointLoc)))); + errmsg("could not locate a valid checkpoint record at %X/%08X", + LSN_FORMAT_ARGS(CheckPointLoc))); } memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint)); wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN); @@ -819,8 +824,8 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, recoveryTargetName))); else if (recoveryTarget == RECOVERY_TARGET_LSN) ereport(LOG, - (errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%X\"", - LSN_FORMAT_ARGS(recoveryTargetLSN)))); + errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%08X\"", + LSN_FORMAT_ARGS(recoveryTargetLSN))); else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE) ereport(LOG, (errmsg("starting point-in-time recovery to earliest consistent point"))); @@ -850,7 +855,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, (errmsg("requested timeline %u is not a child of this server's history", recoveryTargetTLI), /* translator: %s is a backup_label file or a pg_control file */ - errdetail("Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X.", + errdetail("Latest checkpoint in file \"%s\" is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X.", haveBackupLabel ? "backup_label" : "pg_control", LSN_FORMAT_ARGS(CheckPointLoc), CheckPointTLI, @@ -865,15 +870,15 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) != ControlFile->minRecoveryPointTLI) ereport(FATAL, - (errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u", - recoveryTargetTLI, - LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint), - ControlFile->minRecoveryPointTLI))); + errmsg("requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u", + recoveryTargetTLI, + LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint), + ControlFile->minRecoveryPointTLI)); ereport(DEBUG1, - (errmsg_internal("redo record is at %X/%X; shutdown %s", - LSN_FORMAT_ARGS(checkPoint.redo), - wasShutdown ? "true" : "false"))); + errmsg_internal("redo record is at %X/%08X; shutdown %s", + LSN_FORMAT_ARGS(checkPoint.redo), + wasShutdown ? "true" : "false")); ereport(DEBUG1, (errmsg_internal("next transaction ID: " UINT64_FORMAT "; next OID: %u", U64FromFullTransactionId(checkPoint.nextXid), @@ -1248,14 +1253,14 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI, * is pretty crude, but we are not expecting any variability in the file * format). */ - if (fscanf(lfp, "START WAL LOCATION: %X/%X (file %08X%16s)%c", + if (fscanf(lfp, "START WAL LOCATION: %X/%08X (file %08X%16s)%c", &hi, &lo, &tli_from_walseg, startxlogfilename, &ch) != 5 || ch != '\n') ereport(FATAL, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("invalid data in file \"%s\"", BACKUP_LABEL_FILE))); RedoStartLSN = ((uint64) hi) << 32 | lo; RedoStartTLI = tli_from_walseg; - if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%X%c", + if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%08X%c", &hi, &lo, &ch) != 3 || ch != '\n') ereport(FATAL, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), @@ -1327,7 +1332,7 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI, tli_from_file, BACKUP_LABEL_FILE))); } - if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%X\n", &hi, &lo) > 0) + if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%08X\n", &hi, &lo) > 0) ereport(FATAL, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("this is an incremental backup, not a data directory"), @@ -1621,6 +1626,7 @@ ShutdownWalRecovery(void) close(readFile); readFile = -1; } + pfree(xlogreader->private_data); XLogReaderFree(xlogreader); XLogPrefetcherFree(xlogprefetcher); @@ -1717,8 +1723,8 @@ PerformWalRecovery(void) if (record->xl_rmid != RM_XLOG_ID || (record->xl_info & ~XLR_INFO_MASK) != XLOG_CHECKPOINT_REDO) ereport(FATAL, - (errmsg("unexpected record type found at redo point %X/%X", - LSN_FORMAT_ARGS(xlogreader->ReadRecPtr)))); + errmsg("unexpected record type found at redo point %X/%08X", + LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))); } else { @@ -1740,8 +1746,8 @@ PerformWalRecovery(void) RmgrStartup(); ereport(LOG, - (errmsg("redo starts at %X/%X", - LSN_FORMAT_ARGS(xlogreader->ReadRecPtr)))); + errmsg("redo starts at %X/%08X", + LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))); /* Prepare to report progress of the redo phase. */ if (!StandbyMode) @@ -1753,7 +1759,7 @@ PerformWalRecovery(void) do { if (!StandbyMode) - ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X", + ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X", LSN_FORMAT_ARGS(xlogreader->ReadRecPtr)); #ifdef WAL_DEBUG @@ -1762,7 +1768,7 @@ PerformWalRecovery(void) StringInfoData buf; initStringInfo(&buf); - appendStringInfo(&buf, "REDO @ %X/%X; LSN %X/%X: ", + appendStringInfo(&buf, "REDO @ %X/%08X; LSN %X/%08X: ", LSN_FORMAT_ARGS(xlogreader->ReadRecPtr), LSN_FORMAT_ARGS(xlogreader->EndRecPtr)); xlog_outrec(&buf, xlogreader); @@ -1875,9 +1881,9 @@ PerformWalRecovery(void) RmgrCleanup(); ereport(LOG, - (errmsg("redo done at %X/%X system usage: %s", - LSN_FORMAT_ARGS(xlogreader->ReadRecPtr), - pg_rusage_show(&ru0)))); + errmsg("redo done at %X/%08X system usage: %s", + LSN_FORMAT_ARGS(xlogreader->ReadRecPtr), + pg_rusage_show(&ru0))); xtime = GetLatestXTime(); if (xtime) ereport(LOG, @@ -2087,7 +2093,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI) memcpy(&xlrec, XLogRecGetData(record), sizeof(xl_overwrite_contrecord)); if (xlrec.overwritten_lsn != record->overwrittenRecPtr) - elog(FATAL, "mismatching overwritten LSN %X/%X -> %X/%X", + elog(FATAL, "mismatching overwritten LSN %X/%08X -> %X/%08X", LSN_FORMAT_ARGS(xlrec.overwritten_lsn), LSN_FORMAT_ARGS(record->overwrittenRecPtr)); @@ -2096,9 +2102,9 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI) missingContrecPtr = InvalidXLogRecPtr; ereport(LOG, - (errmsg("successfully skipped missing contrecord at %X/%X, overwritten at %s", - LSN_FORMAT_ARGS(xlrec.overwritten_lsn), - timestamptz_to_str(xlrec.overwrite_time)))); + errmsg("successfully skipped missing contrecord at %X/%08X, overwritten at %s", + LSN_FORMAT_ARGS(xlrec.overwritten_lsn), + timestamptz_to_str(xlrec.overwrite_time))); /* Verifying the record should only happen once */ record->overwrittenRecPtr = InvalidXLogRecPtr; @@ -2124,7 +2130,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI) backupEndPoint = lsn; } else - elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%X, waiting for %X/%X", + elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%08X, waiting for %X/%08X", LSN_FORMAT_ARGS(startpoint), LSN_FORMAT_ARGS(backupStartPoint)); } } @@ -2219,9 +2225,9 @@ CheckRecoveryConsistency(void) backupEndRequired = false; ereport(LOG, - (errmsg("completed backup recovery with redo LSN %X/%X and end LSN %X/%X", - LSN_FORMAT_ARGS(saveBackupStartPoint), - LSN_FORMAT_ARGS(saveBackupEndPoint)))); + errmsg("completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X", + LSN_FORMAT_ARGS(saveBackupStartPoint), + LSN_FORMAT_ARGS(saveBackupEndPoint))); } /* @@ -2248,9 +2254,10 @@ CheckRecoveryConsistency(void) CheckTablespaceDirectory(); reachedConsistency = true; + SendPostmasterSignal(PMSIGNAL_RECOVERY_CONSISTENT); ereport(LOG, - (errmsg("consistent recovery state reached at %X/%X", - LSN_FORMAT_ARGS(lastReplayedEndRecPtr)))); + errmsg("consistent recovery state reached at %X/%08X", + LSN_FORMAT_ARGS(lastReplayedEndRecPtr))); } /* @@ -2287,7 +2294,7 @@ rm_redo_error_callback(void *arg) xlog_block_info(&buf, record); /* translator: %s is a WAL record description */ - errcontext("WAL redo at %X/%X for %s", + errcontext("WAL redo at %X/%08X for %s", LSN_FORMAT_ARGS(record->ReadRecPtr), buf.data); @@ -2322,7 +2329,7 @@ xlog_outdesc(StringInfo buf, XLogReaderState *record) static void xlog_outrec(StringInfo buf, XLogReaderState *record) { - appendStringInfo(buf, "prev %X/%X; xid %u", + appendStringInfo(buf, "prev %X/%08X; xid %u", LSN_FORMAT_ARGS(XLogRecGetPrev(record)), XLogRecGetXid(record)); @@ -2410,10 +2417,10 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI, TimeLineID prevTLI, lsn < minRecoveryPoint && newTLI > minRecoveryPointTLI) ereport(PANIC, - (errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u", - newTLI, - LSN_FORMAT_ARGS(minRecoveryPoint), - minRecoveryPointTLI))); + errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u", + newTLI, + LSN_FORMAT_ARGS(minRecoveryPoint), + minRecoveryPointTLI)); /* Looks good */ } @@ -2615,8 +2622,8 @@ recoveryStopsBefore(XLogReaderState *record) recoveryStopTime = 0; recoveryStopName[0] = '\0'; ereport(LOG, - (errmsg("recovery stopping before WAL location (LSN) \"%X/%X\"", - LSN_FORMAT_ARGS(recoveryStopLSN)))); + errmsg("recovery stopping before WAL location (LSN) \"%X/%08X\"", + LSN_FORMAT_ARGS(recoveryStopLSN))); return true; } @@ -2783,8 +2790,8 @@ recoveryStopsAfter(XLogReaderState *record) recoveryStopTime = 0; recoveryStopName[0] = '\0'; ereport(LOG, - (errmsg("recovery stopping after WAL location (LSN) \"%X/%X\"", - LSN_FORMAT_ARGS(recoveryStopLSN)))); + errmsg("recovery stopping after WAL location (LSN) \"%X/%08X\"", + LSN_FORMAT_ARGS(recoveryStopLSN))); return true; } @@ -2904,7 +2911,7 @@ getRecoveryStopReason(void) timestamptz_to_str(recoveryStopTime)); else if (recoveryTarget == RECOVERY_TARGET_LSN) snprintf(reason, sizeof(reason), - "%s LSN %X/%X\n", + "%s LSN %X/%08X\n", recoveryStopAfter ? "after" : "before", LSN_FORMAT_ARGS(recoveryStopLSN)); else if (recoveryTarget == RECOVERY_TARGET_NAME) @@ -3207,11 +3214,11 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode, XLogFileName(fname, xlogreader->seg.ws_tli, segno, wal_segment_size); ereport(emode_for_corrupt_record(emode, xlogreader->EndRecPtr), - (errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u", - xlogreader->latestPageTLI, - fname, - LSN_FORMAT_ARGS(xlogreader->latestPagePtr), - offset))); + errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u", + xlogreader->latestPageTLI, + fname, + LSN_FORMAT_ARGS(xlogreader->latestPagePtr), + offset)); record = NULL; } @@ -3423,14 +3430,14 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, errno = save_errno; ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen), (errcode_for_file_access(), - errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: %m", + errmsg("could not read from WAL segment %s, LSN %X/%08X, offset %u: %m", fname, LSN_FORMAT_ARGS(targetPagePtr), readOff))); } else ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen), (errcode(ERRCODE_DATA_CORRUPTED), - errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu", + errmsg("could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu", fname, LSN_FORMAT_ARGS(targetPagePtr), readOff, r, (Size) XLOG_BLCKSZ))); goto next_record_is_invalid; @@ -3712,7 +3719,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, wait_time = wal_retrieve_retry_interval - TimestampDifferenceMilliseconds(last_fail_time, now); - elog(LOG, "waiting for WAL to become available at %X/%X", + elog(LOG, "waiting for WAL to become available at %X/%08X", LSN_FORMAT_ARGS(RecPtr)); /* Do background tasks that might benefit us later. */ @@ -3858,7 +3865,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, tli = tliOfPointInHistory(tliRecPtr, expectedTLEs); if (curFileTLI > 0 && tli < curFileTLI) - elog(ERROR, "according to history file, WAL location %X/%X belongs to timeline %u, but previous recovered WAL file came from timeline %u", + elog(ERROR, "according to history file, WAL location %X/%08X belongs to timeline %u, but previous recovered WAL file came from timeline %u", LSN_FORMAT_ARGS(tliRecPtr), tli, curFileTLI); } @@ -4171,10 +4178,10 @@ rescanLatestTimeLine(TimeLineID replayTLI, XLogRecPtr replayLSN) if (currentTle->end < replayLSN) { ereport(LOG, - (errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X", - newtarget, - replayTLI, - LSN_FORMAT_ARGS(replayLSN)))); + errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%08X", + newtarget, + replayTLI, + LSN_FORMAT_ARGS(replayLSN))); return false; } @@ -4754,7 +4761,7 @@ bool check_primary_slot_name(char **newval, void **extra, GucSource source) { if (*newval && strcmp(*newval, "") != 0 && - !ReplicationSlotValidateName(*newval, WARNING)) + !ReplicationSlotValidateName(*newval, false, WARNING)) return false; return true; @@ -4988,13 +4995,25 @@ check_recovery_target_timeline(char **newval, void **extra, GucSource source) rttg = RECOVERY_TARGET_TIMELINE_LATEST; else { + char *endp; + uint64 timeline; + rttg = RECOVERY_TARGET_TIMELINE_NUMERIC; errno = 0; - strtoul(*newval, NULL, 0); - if (errno == EINVAL || errno == ERANGE) + timeline = strtou64(*newval, &endp, 0); + + if (*endp != '\0' || errno == EINVAL || errno == ERANGE) + { + GUC_check_errdetail("\"%s\" is not a valid number.", + "recovery_target_timeline"); + return false; + } + + if (timeline < 1 || timeline > PG_UINT32_MAX) { - GUC_check_errdetail("\"recovery_target_timeline\" is not a valid number."); + GUC_check_errdetail("\"%s\" must be between %u and %u.", + "recovery_target_timeline", 1, UINT_MAX); return false; } } diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index c389b27f77d47..27ea52fdfee66 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -795,7 +795,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage, list_free_deep(timelineHistory); - elog(DEBUG3, "switched to timeline %u valid until %X/%X", + elog(DEBUG3, "switched to timeline %u valid until %X/%08X", state->currTLI, LSN_FORMAT_ARGS(state->currTLIValidUntil)); } diff --git a/src/backend/backup/backup_manifest.c b/src/backend/backup/backup_manifest.c index 22e2be37c95c3..d05252f383c80 100644 --- a/src/backend/backup/backup_manifest.c +++ b/src/backend/backup/backup_manifest.c @@ -281,7 +281,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr, } AppendToManifest(manifest, - "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }", + "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%08X\", \"End-LSN\": \"%X/%08X\" }", first_wal_range ? "" : ",\n", entry->tli, LSN_FORMAT_ARGS(tl_beginptr), diff --git a/src/backend/backup/basebackup.c b/src/backend/backup/basebackup.c index 891637e3a4495..bb7d90aa5d963 100644 --- a/src/backend/backup/basebackup.c +++ b/src/backend/backup/basebackup.c @@ -1048,7 +1048,7 @@ SendBaseBackup(BaseBackupCmd *cmd, IncrementalBackupInfo *ib) sink = bbsink_zstd_new(sink, &opt.compression_specification); /* Set up progress reporting. */ - sink = bbsink_progress_new(sink, opt.progress); + sink = bbsink_progress_new(sink, opt.progress, opt.incremental); /* * Perform the base backup, but make sure we clean up the bbsink even if @@ -1349,7 +1349,7 @@ sendDir(bbsink *sink, const char *path, int basepathlen, bool sizeonly, snprintf(pathbuf, sizeof(pathbuf), "%s/%s", path, de->d_name); /* Skip pg_control here to back up it last */ - if (strcmp(pathbuf, "./global/pg_control") == 0) + if (strcmp(pathbuf, "./" XLOG_CONTROL_FILE) == 0) continue; if (lstat(pathbuf, &statbuf) != 0) diff --git a/src/backend/backup/basebackup_copy.c b/src/backend/backup/basebackup_copy.c index a284ce318ff7d..eb45d3bcb663b 100644 --- a/src/backend/backup/basebackup_copy.c +++ b/src/backend/backup/basebackup_copy.c @@ -143,7 +143,7 @@ bbsink_copystream_begin_backup(bbsink *sink) buf = palloc(mysink->base.bbs_buffer_length + MAXIMUM_ALIGNOF); mysink->msgbuffer = buf + (MAXIMUM_ALIGNOF - 1); mysink->base.bbs_buffer = buf + MAXIMUM_ALIGNOF; - mysink->msgbuffer[0] = 'd'; /* archive or manifest data */ + mysink->msgbuffer[0] = PqMsg_CopyData; /* archive or manifest data */ /* Tell client the backup start location. */ SendXlogRecPtrResult(state->startptr, state->starttli); @@ -170,7 +170,7 @@ bbsink_copystream_begin_archive(bbsink *sink, const char *archive_name) ti = list_nth(state->tablespaces, state->tablespace_num); pq_beginmessage(&buf, PqMsg_CopyData); - pq_sendbyte(&buf, 'n'); /* New archive */ + pq_sendbyte(&buf, PqBackupMsg_NewArchive); pq_sendstring(&buf, archive_name); pq_sendstring(&buf, ti->path == NULL ? "" : ti->path); pq_endmessage(&buf); @@ -191,7 +191,7 @@ bbsink_copystream_archive_contents(bbsink *sink, size_t len) if (mysink->send_to_client) { /* Add one because we're also sending a leading type byte. */ - pq_putmessage('d', mysink->msgbuffer, len + 1); + pq_putmessage(PqMsg_CopyData, mysink->msgbuffer, len + 1); } /* Consider whether to send a progress report to the client. */ @@ -221,7 +221,7 @@ bbsink_copystream_archive_contents(bbsink *sink, size_t len) mysink->last_progress_report_time = now; pq_beginmessage(&buf, PqMsg_CopyData); - pq_sendbyte(&buf, 'p'); /* Progress report */ + pq_sendbyte(&buf, PqBackupMsg_ProgressReport); pq_sendint64(&buf, state->bytes_done); pq_endmessage(&buf); pq_flush_if_writable(); @@ -247,7 +247,7 @@ bbsink_copystream_end_archive(bbsink *sink) mysink->bytes_done_at_last_time_check = state->bytes_done; mysink->last_progress_report_time = GetCurrentTimestamp(); pq_beginmessage(&buf, PqMsg_CopyData); - pq_sendbyte(&buf, 'p'); /* Progress report */ + pq_sendbyte(&buf, PqBackupMsg_ProgressReport); pq_sendint64(&buf, state->bytes_done); pq_endmessage(&buf); pq_flush_if_writable(); @@ -262,7 +262,7 @@ bbsink_copystream_begin_manifest(bbsink *sink) StringInfoData buf; pq_beginmessage(&buf, PqMsg_CopyData); - pq_sendbyte(&buf, 'm'); /* Manifest */ + pq_sendbyte(&buf, PqBackupMsg_Manifest); pq_endmessage(&buf); } @@ -277,7 +277,7 @@ bbsink_copystream_manifest_contents(bbsink *sink, size_t len) if (mysink->send_to_client) { /* Add one because we're also sending a leading type byte. */ - pq_putmessage('d', mysink->msgbuffer, len + 1); + pq_putmessage(PqMsg_CopyData, mysink->msgbuffer, len + 1); } } @@ -361,7 +361,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli) tstate = begin_tup_output_tupdesc(dest, tupdesc, &TTSOpsVirtual); /* Data row */ - values[0] = CStringGetTextDatum(psprintf("%X/%X", LSN_FORMAT_ARGS(ptr))); + values[0] = CStringGetTextDatum(psprintf("%X/%08X", LSN_FORMAT_ARGS(ptr))); values[1] = Int64GetDatum(tli); do_tup_output(tstate, values, nulls); diff --git a/src/backend/backup/basebackup_incremental.c b/src/backend/backup/basebackup_incremental.c index 28491b1e0ab08..a0d48ff0fefa9 100644 --- a/src/backend/backup/basebackup_incremental.c +++ b/src/backend/backup/basebackup_incremental.c @@ -409,7 +409,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib, if (range->start_lsn < tlep[i]->begin) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X", + errmsg("manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X", range->tli, LSN_FORMAT_ARGS(range->start_lsn), LSN_FORMAT_ARGS(tlep[i]->begin)))); @@ -419,7 +419,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib, if (range->start_lsn != tlep[i]->begin) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X", + errmsg("manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X", range->tli, LSN_FORMAT_ARGS(range->start_lsn), LSN_FORMAT_ARGS(tlep[i]->begin)))); @@ -430,7 +430,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib, if (range->end_lsn > backup_state->startpoint) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X", + errmsg("manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X", range->tli, LSN_FORMAT_ARGS(range->end_lsn), LSN_FORMAT_ARGS(backup_state->startpoint)), @@ -441,7 +441,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib, if (range->end_lsn != tlep[i]->end) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X", + errmsg("manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X", range->tli, LSN_FORMAT_ARGS(range->end_lsn), LSN_FORMAT_ARGS(tlep[i]->end)))); @@ -522,18 +522,18 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib, if (XLogRecPtrIsInvalid(tli_missing_lsn)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist", + errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist", tle->tli, LSN_FORMAT_ARGS(tli_start_lsn), LSN_FORMAT_ARGS(tli_end_lsn)))); else ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete", + errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete", tle->tli, LSN_FORMAT_ARGS(tli_start_lsn), LSN_FORMAT_ARGS(tli_end_lsn)), - errdetail("The first unsummarized LSN in this range is %X/%X.", + errdetail("The first unsummarized LSN in this range is %X/%08X.", LSN_FORMAT_ARGS(tli_missing_lsn)))); } diff --git a/src/backend/backup/basebackup_progress.c b/src/backend/backup/basebackup_progress.c index 1d22b541f89af..dac205936229b 100644 --- a/src/backend/backup/basebackup_progress.c +++ b/src/backend/backup/basebackup_progress.c @@ -56,7 +56,7 @@ static const bbsink_ops bbsink_progress_ops = { * forwards data to a successor sink. */ bbsink * -bbsink_progress_new(bbsink *next, bool estimate_backup_size) +bbsink_progress_new(bbsink *next, bool estimate_backup_size, bool incremental) { bbsink *sink; @@ -69,10 +69,15 @@ bbsink_progress_new(bbsink *next, bool estimate_backup_size) /* * Report that a base backup is in progress, and set the total size of the * backup to -1, which will get translated to NULL. If we're estimating - * the backup size, we'll insert the real estimate when we have it. + * the backup size, we'll insert the real estimate when we have it. Also, + * the backup type is set. */ pgstat_progress_start_command(PROGRESS_COMMAND_BASEBACKUP, InvalidOid); pgstat_progress_update_param(PROGRESS_BASEBACKUP_BACKUP_TOTAL, -1); + pgstat_progress_update_param(PROGRESS_BASEBACKUP_BACKUP_TYPE, + incremental + ? PROGRESS_BASEBACKUP_BACKUP_TYPE_INCREMENTAL + : PROGRESS_BASEBACKUP_BACKUP_TYPE_FULL); return sink; } diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 6db864892d0dd..fc8638c1b61b6 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -109,6 +109,8 @@ static const struct typinfo TypInfo[] = { F_REGROLEIN, F_REGROLEOUT}, {"regnamespace", REGNAMESPACEOID, 0, 4, true, TYPALIGN_INT, TYPSTORAGE_PLAIN, InvalidOid, F_REGNAMESPACEIN, F_REGNAMESPACEOUT}, + {"regdatabase", REGDATABASEOID, 0, 4, true, TYPALIGN_INT, TYPSTORAGE_PLAIN, InvalidOid, + F_REGDATABASEIN, F_REGDATABASEOUT}, {"text", TEXTOID, 0, -1, false, TYPALIGN_INT, TYPSTORAGE_EXTENDED, DEFAULT_COLLATION_OID, F_TEXTIN, F_TEXTOUT}, {"oid", OIDOID, 0, 4, true, TYPALIGN_INT, TYPSTORAGE_PLAIN, InvalidOid, diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 02a754cc30a70..cd139bd65a668 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -64,7 +64,6 @@ #include "catalog/pg_proc.h" #include "catalog/pg_tablespace.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/extension.h" @@ -659,6 +658,20 @@ ExecGrantStmt_oids(InternalGrant *istmt) * objectNamesToOids * * Turn a list of object names of a given type into an Oid list. + * + * XXX This function intentionally takes only an AccessShareLock. In the face + * of concurrent DDL, we might easily latch onto an old version of an object, + * causing the GRANT or REVOKE statement to fail. But it does prevent the + * object from disappearing altogether. To do better, we would need to use a + * self-exclusive lock, perhaps ShareUpdateExclusiveLock, here and before + * *every* CatalogTupleUpdate() of a row that GRANT/REVOKE can affect. + * Besides that additional work, this could have operational costs. For + * example, it would make GRANT ALL TABLES IN SCHEMA terminate every + * autovacuum running in the schema and consume a shared lock table entry per + * table in the schema. The user-visible benefit of that additional work is + * just changing "ERROR: tuple concurrently updated" to blocking. That's not + * nothing, but it might not outweigh autovacuum termination and lock table + * consumption spikes. */ static List * objectNamesToOids(ObjectType objtype, List *objnames, bool is_grant) @@ -1005,6 +1018,10 @@ ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *s all_privileges = ACL_ALL_RIGHTS_SCHEMA; errormsg = gettext_noop("invalid privilege type %s for schema"); break; + case OBJECT_LARGEOBJECT: + all_privileges = ACL_ALL_RIGHTS_LARGEOBJECT; + errormsg = gettext_noop("invalid privilege type %s for large object"); + break; default: elog(ERROR, "unrecognized GrantStmt.objtype: %d", (int) action->objtype); @@ -1196,6 +1213,16 @@ SetDefaultACL(InternalDefaultACL *iacls) this_privileges = ACL_ALL_RIGHTS_SCHEMA; break; + case OBJECT_LARGEOBJECT: + if (OidIsValid(iacls->nspid)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_GRANT_OPERATION), + errmsg("cannot use IN SCHEMA clause when using GRANT/REVOKE ON LARGE OBJECTS"))); + objtype = DEFACLOBJ_LARGEOBJECT; + if (iacls->all_privs && this_privileges == ACL_NO_RIGHTS) + this_privileges = ACL_ALL_RIGHTS_LARGEOBJECT; + break; + default: elog(ERROR, "unrecognized object type: %d", (int) iacls->objtype); @@ -1439,6 +1466,9 @@ RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid) case DEFACLOBJ_NAMESPACE: iacls.objtype = OBJECT_SCHEMA; break; + case DEFACLOBJ_LARGEOBJECT: + iacls.objtype = OBJECT_LARGEOBJECT; + break; default: /* Shouldn't get here */ elog(ERROR, "unexpected default ACL type: %d", @@ -4250,6 +4280,10 @@ get_user_default_acl(ObjectType objtype, Oid ownerId, Oid nsp_oid) defaclobjtype = DEFACLOBJ_NAMESPACE; break; + case OBJECT_LARGEOBJECT: + defaclobjtype = DEFACLOBJ_LARGEOBJECT; + break; + default: return NULL; } diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index a6edf614606ed..59caae8f1bc23 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -34,6 +34,7 @@ #include "catalog/pg_namespace.h" #include "catalog/pg_parameter_acl.h" #include "catalog/pg_replication_origin.h" +#include "catalog/pg_seclabel.h" #include "catalog/pg_shdepend.h" #include "catalog/pg_shdescription.h" #include "catalog/pg_shseclabel.h" @@ -135,6 +136,36 @@ IsCatalogRelationOid(Oid relid) return (relid < (Oid) FirstUnpinnedObjectId); } +/* + * IsCatalogTextUniqueIndexOid + * True iff the relation identified by this OID is a catalog UNIQUE index + * having a column of type "text". + * + * The relcache must not use these indexes. Inserting into any UNIQUE + * index compares index keys while holding BUFFER_LOCK_EXCLUSIVE. + * bttextcmp() can search the COLLOID catcache. Depending on concurrent + * invalidation traffic, catcache can reach relcache builds. A backend + * would self-deadlock on LWLocks if the relcache build read the + * exclusive-locked buffer. + * + * To avoid being itself the cause of self-deadlock, this doesn't read + * catalogs. Instead, it uses a hard-coded list with a supporting + * regression test. + */ +bool +IsCatalogTextUniqueIndexOid(Oid relid) +{ + switch (relid) + { + case ParameterAclParnameIndexId: + case ReplicationOriginNameIndex: + case SecLabelObjectIndexId: + case SharedSecLabelObjectIndexId: + return true; + } + return false; +} + /* * IsInplaceUpdateRelation * True iff core code performs inplace updates on the relation. @@ -315,8 +346,6 @@ IsSharedRelation(Oid relationId) relationId == PgDbRoleSettingToastIndex || relationId == PgParameterAclToastTable || relationId == PgParameterAclToastIndex || - relationId == PgReplicationOriginToastTable || - relationId == PgReplicationOriginToastIndex || relationId == PgShdescriptionToastTable || relationId == PgShdescriptionToastIndex || relationId == PgShseclabelToastTable || diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 18316a3968bcf..7dded634eb810 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1850,6 +1850,17 @@ find_expr_references_walker(Node *node, errmsg("constant of the type %s cannot be used here", "regrole"))); break; + + /* + * Dependencies for regdatabase should be shared among all + * databases, so explicitly inhibit to have dependencies. + */ + case REGDATABASEOID: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("constant of the type %s cannot be used here", + "regdatabase"))); + break; } } return false; diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index df3231fcd41c2..6c02aee726754 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -1054,8 +1054,7 @@ sub morph_row_for_schemapg } # Expand booleans from 'f'/'t' to 'false'/'true'. - # Some values might be other macros (eg FLOAT8PASSBYVAL), - # don't change. + # Some values might be other macros, if so don't change. elsif ($atttype eq 'bool') { $row->{$attname} = 'true' if $row->{$attname} eq 't'; diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index b807ab666689f..fd6537567ea27 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -664,6 +664,15 @@ CheckAttributeType(const char *attname, flags); } + /* + * For consistency with check_virtual_generated_security(). + */ + if ((flags & CHKATYPE_IS_VIRTUAL) && atttypid >= FirstUnpinnedObjectId) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("virtual generated column \"%s\" cannot have a user-defined type", attname), + errdetail("Virtual generated columns that make use of user-defined types are not yet supported.")); + /* * This might not be strictly invalid per SQL standard, but it is pretty * useless, and it cannot be dumped, so we must disallow it. @@ -1100,6 +1109,7 @@ AddNewRelationType(const char *typeName, * if false, relacl is always set NULL * allow_system_table_mods: true to allow creation in system namespaces * is_internal: is this a system-generated catalog? + * relrewrite: link to original relation during a table rewrite * * Output parameters: * typaddress: if not null, gets the object address of the new pg_type entry @@ -2616,12 +2626,17 @@ AddRelationNewConstraints(Relation rel, errmsg("cannot add not-null constraint on system column \"%s\"", strVal(linitial(cdef->keys)))); + Assert(cdef->initially_valid != cdef->skip_validation); + /* * If the column already has a not-null constraint, we don't want - * to add another one; just adjust inheritance status as needed. + * to add another one; adjust inheritance status as needed. This + * also checks whether the existing constraint matches the + * requested validity. */ if (AdjustNotNullInheritance(RelationGetRelid(rel), colnum, - is_local, cdef->is_no_inherit)) + is_local, cdef->is_no_inherit, + cdef->skip_validation)) continue; /* @@ -2991,7 +3006,7 @@ AddRelationNotNullConstraints(Relation rel, List *constraints, if (constr->is_no_inherit) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("cannot define not-null constraint on column \"%s\" with NO INHERIT", + errmsg("cannot define not-null constraint with NO INHERIT on column \"%s\"", strVal(linitial(constr->keys))), errdetail("The column has an inherited not-null constraint."))); @@ -3209,6 +3224,86 @@ check_nested_generated(ParseState *pstate, Node *node) check_nested_generated_walker(node, pstate); } +/* + * Check security of virtual generated column expression. + * + * Just like selecting from a view is exploitable (CVE-2024-7348), selecting + * from a table with virtual generated columns is exploitable. Users who are + * concerned about this can avoid selecting from views, but telling them to + * avoid selecting from tables is less practical. + * + * To address this, this restricts generation expressions for virtual + * generated columns are restricted to using built-in functions and types. We + * assume that built-in functions and types cannot be exploited for this + * purpose. Note the overall security also requires that all functions in use + * a immutable. (For example, there are some built-in non-immutable functions + * that can run arbitrary SQL.) The immutability is checked elsewhere, since + * that is a property that needs to hold independent of security + * considerations. + * + * In the future, this could be expanded by some new mechanism to declare + * other functions and types as safe or trusted for this purpose, but that is + * to be designed. + */ + +/* + * Callback for check_functions_in_node() that determines whether a function + * is user-defined. + */ +static bool +contains_user_functions_checker(Oid func_id, void *context) +{ + return (func_id >= FirstUnpinnedObjectId); +} + +/* + * Checks for all the things we don't want in the generation expressions of + * virtual generated columns for security reasons. Errors out if it finds + * one. + */ +static bool +check_virtual_generated_security_walker(Node *node, void *context) +{ + ParseState *pstate = context; + + if (node == NULL) + return false; + + if (!IsA(node, List)) + { + if (check_functions_in_node(node, contains_user_functions_checker, NULL)) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("generation expression uses user-defined function"), + errdetail("Virtual generated columns that make use of user-defined functions are not yet supported."), + parser_errposition(pstate, exprLocation(node))); + + /* + * check_functions_in_node() doesn't check some node types (see + * comment there). We handle CoerceToDomain and MinMaxExpr by + * checking for built-in types. The other listed node types cannot + * call user-definable SQL-visible functions. + * + * We furthermore need this type check to handle built-in, immutable + * polymorphic functions such as array_eq(). + */ + if (exprType(node) >= FirstUnpinnedObjectId) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("generation expression uses user-defined type"), + errdetail("Virtual generated columns that make use of user-defined types are not yet supported."), + parser_errposition(pstate, exprLocation(node))); + } + + return expression_tree_walker(node, check_virtual_generated_security_walker, context); +} + +static void +check_virtual_generated_security(ParseState *pstate, Node *node) +{ + check_virtual_generated_security_walker(node, pstate); +} + /* * Take a raw default and convert it to a cooked format ready for * storage. @@ -3248,6 +3343,10 @@ cookDefault(ParseState *pstate, ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("generation expression is not immutable"))); + + /* Check security of expressions for virtual generated column */ + if (attgenerated == ATTRIBUTE_GENERATED_VIRTUAL) + check_virtual_generated_security(pstate, expr); } else { diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 739a92bdcc1ca..c4029a4f3d310 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -800,11 +800,11 @@ index_create(Relation heapRelation, errmsg("user-defined indexes on system catalog tables are not supported"))); /* - * Btree text_pattern_ops uses text_eq as the equality operator, which is - * fine as long as the collation is deterministic; text_eq then reduces to + * Btree text_pattern_ops uses texteq as the equality operator, which is + * fine as long as the collation is deterministic; texteq then reduces to * bitwise equality and so it is semantically compatible with the other * operators and functions in that opclass. But with a nondeterministic - * collation, text_eq could yield results that are incompatible with the + * collation, texteq could yield results that are incompatible with the * actual behavior of the index (which is determined by the opclass's * comparison function). We prevent such problems by refusing creation of * an index with that opclass and a nondeterministic collation. @@ -814,7 +814,7 @@ index_create(Relation heapRelation, * opclasses as incompatible with nondeterminism; but for now, this small * hack suffices. * - * Another solution is to use a special operator, not text_eq, as the + * Another solution is to use a special operator, not texteq, as the * equality opclass member; but that is undesirable because it would * prevent index usage in many queries that work fine today. */ @@ -3020,7 +3020,7 @@ index_build(Relation heapRelation, /* * Determine worker process details for parallel CREATE INDEX. Currently, - * only btree and BRIN have support for parallel builds. + * only btree, GIN, and BRIN have support for parallel builds. * * Note that planner considers parallel safety for us. */ diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index d97d632a7ef55..8bd4d6c3d4346 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -41,7 +41,6 @@ #include "catalog/pg_ts_parser.h" #include "catalog/pg_ts_template.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "common/hashfn_unstable.h" #include "funcapi.h" #include "mb/pg_wchar.h" diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index d8eb8d3deaa9e..91f3018fd0a8c 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -62,7 +62,6 @@ #include "catalog/pg_ts_template.h" #include "catalog/pg_type.h" #include "catalog/pg_user_mapping.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/extension.h" @@ -2005,16 +2004,20 @@ get_object_address_defacl(List *object, bool missing_ok) case DEFACLOBJ_NAMESPACE: objtype_str = "schemas"; break; + case DEFACLOBJ_LARGEOBJECT: + objtype_str = "large objects"; + break; default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized default ACL object type \"%c\"", objtype), - errhint("Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\".", + errhint("Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\", \"%c\".", DEFACLOBJ_RELATION, DEFACLOBJ_SEQUENCE, DEFACLOBJ_FUNCTION, DEFACLOBJ_TYPE, - DEFACLOBJ_NAMESPACE))); + DEFACLOBJ_NAMESPACE, + DEFACLOBJ_LARGEOBJECT))); } /* @@ -3844,6 +3847,12 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) _("default privileges on new schemas belonging to role %s"), rolename); break; + case DEFACLOBJ_LARGEOBJECT: + Assert(!nspname); + appendStringInfo(&buffer, + _("default privileges on new large objects belonging to role %s"), + rolename); + break; default: /* shouldn't get here */ if (nspname) @@ -4273,8 +4282,8 @@ pg_identify_object(PG_FUNCTION_ARGS) nspAttnum = get_object_attnum_namespace(address.classId); if (nspAttnum != InvalidAttrNumber) { - schema_oid = heap_getattr(objtup, nspAttnum, - RelationGetDescr(catalog), &isnull); + schema_oid = DatumGetObjectId(heap_getattr(objtup, nspAttnum, + RelationGetDescr(catalog), &isnull)); if (isnull) elog(ERROR, "invalid null namespace in object %u/%u/%d", address.classId, address.objectId, address.objectSubId); @@ -5766,6 +5775,10 @@ getObjectIdentityParts(const ObjectAddress *object, appendStringInfoString(&buffer, " on schemas"); break; + case DEFACLOBJ_LARGEOBJECT: + appendStringInfoString(&buffer, + " on large objects"); + break; } if (objname) diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c index bcf4050f5b161..c62e8acd41375 100644 --- a/src/backend/catalog/pg_aggregate.c +++ b/src/backend/catalog/pg_aggregate.c @@ -637,6 +637,7 @@ AggregateCreate(const char *aggName, parameterNames, /* parameterNames */ parameterDefaults, /* parameterDefaults */ PointerGetDatum(NULL), /* trftypes */ + NIL, /* trfoids */ PointerGetDatum(NULL), /* proconfig */ InvalidOid, /* no prosupport */ 1, /* procost */ @@ -653,7 +654,7 @@ AggregateCreate(const char *aggName, for (i = 0; i < Natts_pg_aggregate; i++) { nulls[i] = false; - values[i] = (Datum) NULL; + values[i] = (Datum) 0; replaces[i] = true; } values[Anum_pg_aggregate_aggfnoid - 1] = ObjectIdGetDatum(procOid); diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index ac80652baf25d..6002fd0002fc9 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -100,8 +100,9 @@ CreateConstraintEntry(const char *constraintName, ObjectAddresses *addrs_auto; ObjectAddresses *addrs_normal; - /* Only CHECK constraint can be not enforced */ - Assert(isEnforced || constraintType == CONSTRAINT_CHECK); + /* Only CHECK or FOREIGN KEY constraint can be not enforced */ + Assert(isEnforced || constraintType == CONSTRAINT_CHECK || + constraintType == CONSTRAINT_FOREIGN); /* NOT ENFORCED constraint must be NOT VALID */ Assert(isEnforced || !isValidated); @@ -128,8 +129,9 @@ CreateConstraintEntry(const char *constraintName, if (foreignNKeys > 0) { Datum *fkdatums; + int nkeys = Max(foreignNKeys, numFkDeleteSetCols); - fkdatums = (Datum *) palloc(foreignNKeys * sizeof(Datum)); + fkdatums = (Datum *) palloc(nkeys * sizeof(Datum)); for (i = 0; i < foreignNKeys; i++) fkdatums[i] = Int16GetDatum(foreignKey[i]); confkeyArray = construct_array_builtin(fkdatums, foreignNKeys, INT2OID); @@ -177,7 +179,7 @@ CreateConstraintEntry(const char *constraintName, for (i = 0; i < Natts_pg_constraint; i++) { nulls[i] = false; - values[i] = (Datum) NULL; + values[i] = (Datum) 0; } conOid = GetNewOidWithIndex(conDesc, ConstraintOidIndexId, @@ -493,6 +495,8 @@ ConstraintNameExists(const char *conname, Oid namespaceid) * name1, name2, and label are used the same way as for makeObjectName(), * except that the label can't be NULL; digits will be appended to the label * if needed to create a name that is unique within the specified namespace. + * If the given label is empty, we only consider names that include at least + * one added digit. * * 'others' can be a list of string names already chosen within the current * command (but not yet reflected into the catalogs); we will not choose @@ -521,8 +525,11 @@ ChooseConstraintName(const char *name1, const char *name2, conDesc = table_open(ConstraintRelationId, AccessShareLock); - /* try the unmodified label first */ - strlcpy(modlabel, label, sizeof(modlabel)); + /* try the unmodified label first, unless it's empty */ + if (label[0] != '\0') + strlcpy(modlabel, label, sizeof(modlabel)); + else + snprintf(modlabel, sizeof(modlabel), "%s%d", label, ++pass); for (;;) { @@ -574,8 +581,8 @@ ChooseConstraintName(const char *name1, const char *name2, /* * Find and return a copy of the pg_constraint tuple that implements a - * validated not-null constraint for the given column of the given relation. - * If no such constraint exists, return NULL. + * (possibly not valid) not-null constraint for the given column of the + * given relation. If no such constraint exists, return NULL. * * XXX This would be easier if we had pg_attribute.notnullconstr with the OID * of the constraint that implements the not-null constraint for that column. @@ -604,13 +611,11 @@ findNotNullConstraintAttnum(Oid relid, AttrNumber attnum) AttrNumber conkey; /* - * We're looking for a NOTNULL constraint that's marked validated, - * with the column we're looking for as the sole element in conkey. + * We're looking for a NOTNULL constraint with the column we're + * looking for as the sole element in conkey. */ if (con->contype != CONSTRAINT_NOTNULL) continue; - if (!con->convalidated) - continue; conkey = extractNotNullColumn(conTup); if (conkey != attnum) @@ -628,9 +633,10 @@ findNotNullConstraintAttnum(Oid relid, AttrNumber attnum) } /* - * Find and return the pg_constraint tuple that implements a validated - * not-null constraint for the given column of the given relation. If - * no such column or no such constraint exists, return NULL. + * Find and return a copy of the pg_constraint tuple that implements a + * (possibly not valid) not-null constraint for the given column of the + * given relation. + * If no such column or no such constraint exists, return NULL. */ HeapTuple findNotNullConstraint(Oid relid, const char *colname) @@ -721,15 +727,19 @@ extractNotNullColumn(HeapTuple constrTup) * * If no not-null constraint is found for the column, return false. * Caller can create one. + * * If a constraint exists but the connoinherit flag is not what the caller - * wants, throw an error about the incompatibility. Otherwise, we adjust - * conislocal/coninhcount and return true. - * In the latter case, if is_local is true we flip conislocal true, or do - * nothing if it's already true; otherwise we increment coninhcount by 1. + * wants, throw an error about the incompatibility. If the desired + * constraint is valid but the existing constraint is not valid, also + * throw an error about that (the opposite case is acceptable). + * + * If everything checks out, we adjust conislocal/coninhcount and return + * true. If is_local is true we flip conislocal true, or do nothing if + * it's already true; otherwise we increment coninhcount by 1. */ bool AdjustNotNullInheritance(Oid relid, AttrNumber attnum, - bool is_local, bool is_no_inherit) + bool is_local, bool is_no_inherit, bool is_notvalid) { HeapTuple tup; @@ -751,7 +761,21 @@ AdjustNotNullInheritance(Oid relid, AttrNumber attnum, ereport(ERROR, errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot change NO INHERIT status of NOT NULL constraint \"%s\" on relation \"%s\"", - NameStr(conform->conname), get_rel_name(relid))); + NameStr(conform->conname), get_rel_name(relid)), + errhint("You might need to make the existing constraint inheritable using %s.", + "ALTER TABLE ... ALTER CONSTRAINT ... INHERIT")); + + /* + * Throw an error if the existing constraint is NOT VALID and caller + * wants a valid one. + */ + if (!is_notvalid && !conform->convalidated) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("incompatible NOT VALID constraint \"%s\" on relation \"%s\"", + NameStr(conform->conname), get_rel_name(relid)), + errhint("You might need to validate it using %s.", + "ALTER TABLE ... VALIDATE CONSTRAINT")); if (!is_local) { @@ -830,7 +854,7 @@ RelationGetNotNullConstraints(Oid relid, bool cooked, bool include_noinh) cooked->attnum = colnum; cooked->expr = NULL; cooked->is_enforced = true; - cooked->skip_validation = false; + cooked->skip_validation = !conForm->convalidated; cooked->is_local = true; cooked->inhcount = 0; cooked->is_no_inherit = conForm->connoinherit; @@ -850,7 +874,7 @@ RelationGetNotNullConstraints(Oid relid, bool cooked, bool include_noinh) constr->keys = list_make1(makeString(get_attname(relid, colnum, false))); constr->is_enforced = true; - constr->skip_validation = false; + constr->skip_validation = !conForm->convalidated; constr->initially_valid = true; constr->is_no_inherit = conForm->connoinherit; notnulls = lappend(notnulls, constr); diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c index 04cc375caea8c..090f680d1908f 100644 --- a/src/backend/catalog/pg_conversion.c +++ b/src/backend/catalog/pg_conversion.c @@ -87,7 +87,7 @@ ConversionCreate(const char *conname, Oid connamespace, for (i = 0; i < Natts_pg_conversion; i++) { nulls[i] = false; - values[i] = (Datum) NULL; + values[i] = (Datum) 0; } /* form a tuple */ diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c index 0a477a8e8a920..89fc810215099 100644 --- a/src/backend/catalog/pg_largeobject.c +++ b/src/backend/catalog/pg_largeobject.c @@ -20,6 +20,7 @@ #include "catalog/pg_largeobject.h" #include "catalog/pg_largeobject_metadata.h" #include "miscadmin.h" +#include "utils/acl.h" #include "utils/fmgroids.h" #include "utils/rel.h" @@ -39,6 +40,8 @@ LargeObjectCreate(Oid loid) Oid loid_new; Datum values[Natts_pg_largeobject_metadata]; bool nulls[Natts_pg_largeobject_metadata]; + Oid ownerId; + Acl *lomacl; pg_lo_meta = table_open(LargeObjectMetadataRelationId, RowExclusiveLock); @@ -55,11 +58,18 @@ LargeObjectCreate(Oid loid) loid_new = GetNewOidWithIndex(pg_lo_meta, LargeObjectMetadataOidIndexId, Anum_pg_largeobject_metadata_oid); + ownerId = GetUserId(); + lomacl = get_user_default_acl(OBJECT_LARGEOBJECT, ownerId, InvalidOid); values[Anum_pg_largeobject_metadata_oid - 1] = ObjectIdGetDatum(loid_new); values[Anum_pg_largeobject_metadata_lomowner - 1] - = ObjectIdGetDatum(GetUserId()); - nulls[Anum_pg_largeobject_metadata_lomacl - 1] = true; + = ObjectIdGetDatum(ownerId); + + if (lomacl != NULL) + values[Anum_pg_largeobject_metadata_lomacl - 1] + = PointerGetDatum(lomacl); + else + nulls[Anum_pg_largeobject_metadata_lomacl - 1] = true; ntup = heap_form_tuple(RelationGetDescr(pg_lo_meta), values, nulls); @@ -70,6 +80,10 @@ LargeObjectCreate(Oid loid) table_close(pg_lo_meta, RowExclusiveLock); + /* dependencies on roles mentioned in default ACL */ + recordDependencyOnNewAcl(LargeObjectRelationId, loid_new, 0, + ownerId, lomacl); + return loid_new; } diff --git a/src/backend/catalog/pg_namespace.c b/src/backend/catalog/pg_namespace.c index 6f5634a4de69b..616bcc7852113 100644 --- a/src/backend/catalog/pg_namespace.c +++ b/src/backend/catalog/pg_namespace.c @@ -76,7 +76,7 @@ NamespaceCreate(const char *nspName, Oid ownerId, bool isTemp) for (i = 0; i < Natts_pg_namespace; i++) { nulls[i] = false; - values[i] = (Datum) NULL; + values[i] = (Datum) 0; } nspoid = GetNewOidWithIndex(nspdesc, NamespaceOidIndexId, diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index bfcfa643464ac..44d2ccb6788e9 100644 --- a/src/backend/catalog/pg_operator.c +++ b/src/backend/catalog/pg_operator.c @@ -225,7 +225,7 @@ OperatorShellMake(const char *operatorName, for (i = 0; i < Natts_pg_operator; ++i) { nulls[i] = false; - values[i] = (Datum) NULL; /* redundant, but safe */ + values[i] = (Datum) 0; /* redundant, but safe */ } /* @@ -453,7 +453,7 @@ OperatorCreate(const char *operatorName, for (i = 0; i < Natts_pg_operator; ++i) { - values[i] = (Datum) NULL; + values[i] = (Datum) 0; replaces[i] = true; nulls[i] = false; } diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index fe0490259e9ef..75b17fed15e5b 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -26,7 +26,6 @@ #include "catalog/pg_proc.h" #include "catalog/pg_transform.h" #include "catalog/pg_type.h" -#include "commands/defrem.h" #include "executor/functions.h" #include "funcapi.h" #include "mb/pg_wchar.h" @@ -61,6 +60,35 @@ static bool match_prosrc_to_literal(const char *prosrc, const char *literal, /* ---------------------------------------------------------------- * ProcedureCreate * + * procedureName: string name of routine (proname) + * procNamespace: OID of namespace (pronamespace) + * replace: true to allow replacement of an existing pg_proc entry + * returnsSet: returns set? (proretset) + * returnType: OID of result type (prorettype) + * proowner: OID of owner role (proowner) + * languageObjectId: OID of function language (prolang) + * languageValidator: OID of validator function to apply, if any + * prosrc: string form of function definition (prosrc) + * probin: string form of binary reference, or NULL (probin) + * prosqlbody: Node tree of pre-parsed SQL body, or NULL (prosqlbody) + * prokind: function/aggregate/procedure/etc code (prokind) + * security_definer: security definer? (prosecdef) + * isLeakProof: leak proof? (proleakproof) + * isStrict: strict? (proisstrict) + * volatility: volatility code (provolatile) + * parallel: parallel safety code (proparallel) + * parameterTypes: input parameter types, as an oidvector (proargtypes) + * allParameterTypes: all parameter types, as an OID array (proallargtypes) + * parameterModes: parameter modes, as a "char" array (proargmodes) + * parameterNames: parameter names, as a text array (proargnames) + * parameterDefaults: defaults, as a List of Node trees (proargdefaults) + * trftypes: transformable type OIDs, as an OID array (protrftypes) + * trfoids: List of transform OIDs that routine should depend on + * proconfig: GUC set clauses, as a text array (proconfig) + * prosupport: OID of support function, if any (prosupport) + * procost: cost factor (procost) + * prorows: estimated output rows for a SRF (prorows) + * * Note: allParameterTypes, parameterModes, parameterNames, trftypes, and proconfig * are either arrays of the proper types or NULL. We declare them Datum, * not "ArrayType *", to avoid importing array.h into pg_proc.h. @@ -90,6 +118,7 @@ ProcedureCreate(const char *procedureName, Datum parameterNames, List *parameterDefaults, Datum trftypes, + List *trfoids, Datum proconfig, Oid prosupport, float4 procost, @@ -115,7 +144,6 @@ ProcedureCreate(const char *procedureName, referenced; char *detailmsg; int i; - Oid trfid; ObjectAddresses *addrs; /* @@ -609,25 +637,18 @@ ProcedureCreate(const char *procedureName, ObjectAddressSet(referenced, TypeRelationId, returnType); add_exact_object_address(&referenced, addrs); - /* dependency on transform used by return type, if any */ - if ((trfid = get_transform_oid(returnType, languageObjectId, true))) - { - ObjectAddressSet(referenced, TransformRelationId, trfid); - add_exact_object_address(&referenced, addrs); - } - /* dependency on parameter types */ for (i = 0; i < allParamCount; i++) { ObjectAddressSet(referenced, TypeRelationId, allParams[i]); add_exact_object_address(&referenced, addrs); + } - /* dependency on transform used by parameter type, if any */ - if ((trfid = get_transform_oid(allParams[i], languageObjectId, true))) - { - ObjectAddressSet(referenced, TransformRelationId, trfid); - add_exact_object_address(&referenced, addrs); - } + /* dependency on transforms, if any */ + foreach_oid(transformid, trfoids) + { + ObjectAddressSet(referenced, TransformRelationId, transformid); + add_exact_object_address(&referenced, addrs); } /* dependency on support function, if any */ @@ -960,7 +981,7 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) (void) check_sql_fn_retval(querytree_list, rettype, rettupdesc, proc->prokind, - false, NULL); + false); } error_context_stack = sqlerrcontext.previous; @@ -1191,6 +1212,6 @@ oid_array_to_list(Datum datum) deconstruct_array_builtin(array, OIDOID, &values, NULL, &nelems); for (i = 0; i < nelems; i++) - result = lappend_oid(result, values[i]); + result = lappend_oid(result, DatumGetObjectId(values[i])); return result; } diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index d6f94db5d999b..b911efcf9cb6a 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -1001,7 +1001,7 @@ GetSchemaPublicationRelations(Oid schemaid, PublicationPartOpt pub_partopt) ScanKeyInit(&key[0], Anum_pg_class_relnamespace, BTEqualStrategyNumber, F_OIDEQ, - schemaid); + ObjectIdGetDatum(schemaid)); /* get all the relations present in the specified schema */ scan = table_beginscan_catalog(classRel, 1, key); diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 536191284e803..16e3e5c7457db 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -47,7 +47,6 @@ #include "catalog/pg_type.h" #include "catalog/pg_user_mapping.h" #include "commands/alter.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/policy.h" @@ -61,6 +60,7 @@ #include "storage/lmgr.h" #include "utils/acl.h" #include "utils/fmgroids.h" +#include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/syscache.h" @@ -956,12 +956,12 @@ copyTemplateDependencies(Oid templateDbId, Oid newDbId) shdep = (Form_pg_shdepend) GETSTRUCT(tup); slot[slot_stored_count]->tts_values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(newDbId); - slot[slot_stored_count]->tts_values[Anum_pg_shdepend_classid - 1] = shdep->classid; - slot[slot_stored_count]->tts_values[Anum_pg_shdepend_objid - 1] = shdep->objid; - slot[slot_stored_count]->tts_values[Anum_pg_shdepend_objsubid - 1] = shdep->objsubid; - slot[slot_stored_count]->tts_values[Anum_pg_shdepend_refclassid - 1] = shdep->refclassid; - slot[slot_stored_count]->tts_values[Anum_pg_shdepend_refobjid - 1] = shdep->refobjid; - slot[slot_stored_count]->tts_values[Anum_pg_shdepend_deptype - 1] = shdep->deptype; + slot[slot_stored_count]->tts_values[Anum_pg_shdepend_classid - 1] = ObjectIdGetDatum(shdep->classid); + slot[slot_stored_count]->tts_values[Anum_pg_shdepend_objid - 1] = ObjectIdGetDatum(shdep->objid); + slot[slot_stored_count]->tts_values[Anum_pg_shdepend_objsubid - 1] = Int32GetDatum(shdep->objsubid); + slot[slot_stored_count]->tts_values[Anum_pg_shdepend_refclassid - 1] = ObjectIdGetDatum(shdep->refclassid); + slot[slot_stored_count]->tts_values[Anum_pg_shdepend_refobjid - 1] = ObjectIdGetDatum(shdep->refobjid); + slot[slot_stored_count]->tts_values[Anum_pg_shdepend_deptype - 1] = CharGetDatum(shdep->deptype); ExecStoreVirtualTuple(slot[slot_stored_count]); slot_stored_count++; diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index 1395032413e3d..244acf52f3602 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -103,6 +103,7 @@ GetSubscription(Oid subid, bool missing_ok) sub->passwordrequired = subform->subpasswordrequired; sub->runasowner = subform->subrunasowner; sub->failover = subform->subfailover; + sub->retaindeadtuples = subform->subretaindeadtuples; /* Get conninfo */ datum = SysCacheGetAttrNotNull(SUBSCRIPTIONOID, @@ -319,7 +320,7 @@ AddSubscriptionRelState(Oid subid, Oid relid, char state, */ void UpdateSubscriptionRelState(Oid subid, Oid relid, char state, - XLogRecPtr sublsn) + XLogRecPtr sublsn, bool already_locked) { Relation rel; HeapTuple tup; @@ -327,9 +328,24 @@ UpdateSubscriptionRelState(Oid subid, Oid relid, char state, Datum values[Natts_pg_subscription_rel]; bool replaces[Natts_pg_subscription_rel]; - LockSharedObject(SubscriptionRelationId, subid, 0, AccessShareLock); + if (already_locked) + { +#ifdef USE_ASSERT_CHECKING + LOCKTAG tag; - rel = table_open(SubscriptionRelRelationId, RowExclusiveLock); + Assert(CheckRelationOidLockedByMe(SubscriptionRelRelationId, + RowExclusiveLock, true)); + SET_LOCKTAG_OBJECT(tag, InvalidOid, SubscriptionRelationId, subid, 0); + Assert(LockHeldByMe(&tag, AccessShareLock, true)); +#endif + + rel = table_open(SubscriptionRelRelationId, NoLock); + } + else + { + LockSharedObject(SubscriptionRelationId, subid, 0, AccessShareLock); + rel = table_open(SubscriptionRelRelationId, RowExclusiveLock); + } /* Try finding existing mapping. */ tup = SearchSysCacheCopy2(SUBSCRIPTIONRELMAP, diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index b36f81afb9d3f..3cd9b69edc575 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -80,7 +80,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace, Oid ownerId) for (i = 0; i < Natts_pg_type; ++i) { nulls[i] = false; - values[i] = (Datum) NULL; /* redundant, but safe */ + values[i] = (Datum) 0; /* redundant, but safe */ } /* @@ -285,8 +285,7 @@ TypeCreate(Oid newTypeOid, errmsg("alignment \"%c\" is invalid for passed-by-value type of size %d", alignment, internalSize))); } -#if SIZEOF_DATUM == 8 - else if (internalSize == (int16) sizeof(Datum)) + else if (internalSize == (int16) sizeof(int64)) { if (alignment != TYPALIGN_DOUBLE) ereport(ERROR, @@ -294,7 +293,6 @@ TypeCreate(Oid newTypeOid, errmsg("alignment \"%c\" is invalid for passed-by-value type of size %d", alignment, internalSize))); } -#endif else ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), diff --git a/src/backend/catalog/sql_features.txt b/src/backend/catalog/sql_features.txt index 2f250d2c57bf3..ebe85337c2877 100644 --- a/src/backend/catalog/sql_features.txt +++ b/src/backend/catalog/sql_features.txt @@ -281,7 +281,7 @@ F461 Named character sets NO F471 Scalar subquery values YES F481 Expanded NULL predicate YES F491 Constraint management YES -F492 Optional table constraint enforcement NO check constraints only +F492 Optional table constraint enforcement YES except not-null constraints F501 Features and conformance views YES F501 Features and conformance views 01 SQL_FEATURES view YES F501 Features and conformance views 02 SQL_SIZING view YES diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index 227df90f89c97..c58e9418ac313 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -546,7 +546,7 @@ RelationCopyStorage(SMgrRelation src, SMgrRelation dst, ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), - errmsg("invalid page in block %u of relation %s", + errmsg("invalid page in block %u of relation \"%s\"", blkno, relpath.str))); } @@ -586,7 +586,7 @@ RelFileLocatorSkippingWAL(RelFileLocator rlocator) Size EstimatePendingSyncsSpace(void) { - long entries; + int64 entries; entries = pendingSyncHash ? hash_get_num_entries(pendingSyncHash) : 0; return mul_size(1 + entries, sizeof(RelFileLocator)); diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 64a7240aa772e..1b3c5a55882df 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -658,6 +658,22 @@ GRANT SELECT ON pg_shmem_allocations TO pg_read_all_stats; REVOKE EXECUTE ON FUNCTION pg_get_shmem_allocations() FROM PUBLIC; GRANT EXECUTE ON FUNCTION pg_get_shmem_allocations() TO pg_read_all_stats; +CREATE VIEW pg_shmem_allocations_numa AS + SELECT * FROM pg_get_shmem_allocations_numa(); + +REVOKE ALL ON pg_shmem_allocations_numa FROM PUBLIC; +GRANT SELECT ON pg_shmem_allocations_numa TO pg_read_all_stats; +REVOKE EXECUTE ON FUNCTION pg_get_shmem_allocations_numa() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_get_shmem_allocations_numa() TO pg_read_all_stats; + +CREATE VIEW pg_dsm_registry_allocations AS + SELECT * FROM pg_get_dsm_registry_allocations(); + +REVOKE ALL ON pg_dsm_registry_allocations FROM PUBLIC; +GRANT SELECT ON pg_dsm_registry_allocations TO pg_read_all_stats; +REVOKE EXECUTE ON FUNCTION pg_get_dsm_registry_allocations() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_get_dsm_registry_allocations() TO pg_read_all_stats; + CREATE VIEW pg_backend_memory_contexts AS SELECT * FROM pg_get_backend_memory_contexts(); @@ -887,7 +903,7 @@ CREATE VIEW pg_stat_activity AS S.wait_event, S.state, S.backend_xid, - s.backend_xmin, + S.backend_xmin, S.query_id, S.query, S.backend_type @@ -1025,6 +1041,7 @@ CREATE VIEW pg_replication_slots AS L.wal_status, L.safe_wal_size, L.two_phase, + L.two_phase_at, L.inactive_since, L.conflicting, L.invalidation_reason, @@ -1310,7 +1327,10 @@ CREATE VIEW pg_stat_progress_basebackup AS CASE S.param2 WHEN -1 THEN NULL ELSE S.param2 END AS backup_total, S.param3 AS backup_streamed, S.param4 AS tablespaces_total, - S.param5 AS tablespaces_streamed + S.param5 AS tablespaces_streamed, + CASE S.param6 WHEN 1 THEN 'full' + WHEN 2 THEN 'incremental' + END AS backup_type FROM pg_stat_get_progress_info('BASEBACKUP') AS S; @@ -1369,7 +1389,8 @@ REVOKE ALL ON pg_subscription FROM public; GRANT SELECT (oid, subdbid, subskiplsn, subname, subowner, subenabled, subbinary, substream, subtwophasestate, subdisableonerr, subpasswordrequired, subrunasowner, subfailover, - subslotname, subsynccommit, subpublications, suborigin) + subretaindeadtuples, subslotname, subsynccommit, + subpublications, suborigin) ON pg_subscription TO public; CREATE VIEW pg_stat_subscription_stats AS @@ -1381,6 +1402,7 @@ CREATE VIEW pg_stat_subscription_stats AS ss.confl_insert_exists, ss.confl_update_origin_differs, ss.confl_update_exists, + ss.confl_update_deleted, ss.confl_update_missing, ss.confl_delete_origin_differs, ss.confl_delete_missing, diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c index c801c869c1cfc..cb75e11fced62 100644 --- a/src/backend/commands/alter.c +++ b/src/backend/commands/alter.c @@ -220,7 +220,7 @@ AlterObjectRename_internal(Relation rel, Oid objectId, const char *new_name) Assert(!isnull); ownerId = DatumGetObjectId(datum); - if (!has_privs_of_role(GetUserId(), DatumGetObjectId(ownerId))) + if (!has_privs_of_role(GetUserId(), ownerId)) aclcheck_error(ACLCHECK_NOT_OWNER, get_object_type(classId, objectId), old_name); diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 4fffb76e55735..8ea2913d90632 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -29,7 +29,6 @@ #include "catalog/index.h" #include "catalog/indexing.h" #include "catalog/pg_inherits.h" -#include "commands/dbcommands.h" #include "commands/progress.h" #include "commands/tablecmds.h" #include "commands/vacuum.h" @@ -76,7 +75,7 @@ static BufferAccessStrategy vac_strategy; static void do_analyze_rel(Relation onerel, - VacuumParams *params, List *va_cols, + const VacuumParams params, List *va_cols, AcquireSampleRowsFunc acquirefunc, BlockNumber relpages, bool inh, bool in_outer_xact, int elevel); static void compute_index_stats(Relation onerel, double totalrows, @@ -107,7 +106,7 @@ static Datum ind_fetch_func(VacAttrStatsP stats, int rownum, bool *isNull); */ void analyze_rel(Oid relid, RangeVar *relation, - VacuumParams *params, List *va_cols, bool in_outer_xact, + const VacuumParams params, List *va_cols, bool in_outer_xact, BufferAccessStrategy bstrategy) { Relation onerel; @@ -116,7 +115,7 @@ analyze_rel(Oid relid, RangeVar *relation, BlockNumber relpages = 0; /* Select logging level */ - if (params->options & VACOPT_VERBOSE) + if (params.options & VACOPT_VERBOSE) elevel = INFO; else elevel = DEBUG2; @@ -138,8 +137,8 @@ analyze_rel(Oid relid, RangeVar *relation, * * Make sure to generate only logs for ANALYZE in this case. */ - onerel = vacuum_open_relation(relid, relation, params->options & ~(VACOPT_VACUUM), - params->log_min_duration >= 0, + onerel = vacuum_open_relation(relid, relation, params.options & ~(VACOPT_VACUUM), + params.log_min_duration >= 0, ShareUpdateExclusiveLock); /* leave if relation could not be opened or locked */ @@ -155,7 +154,7 @@ analyze_rel(Oid relid, RangeVar *relation, */ if (!vacuum_is_permitted_for_relation(RelationGetRelid(onerel), onerel->rd_rel, - params->options & ~VACOPT_VACUUM)) + params.options & ~VACOPT_VACUUM)) { relation_close(onerel, ShareUpdateExclusiveLock); return; @@ -227,7 +226,7 @@ analyze_rel(Oid relid, RangeVar *relation, else { /* No need for a WARNING if we already complained during VACUUM */ - if (!(params->options & VACOPT_VACUUM)) + if (!(params.options & VACOPT_VACUUM)) ereport(WARNING, (errmsg("skipping \"%s\" --- cannot analyze non-tables or special system tables", RelationGetRelationName(onerel)))); @@ -275,7 +274,7 @@ analyze_rel(Oid relid, RangeVar *relation, * appropriate acquirefunc for each child table. */ static void -do_analyze_rel(Relation onerel, VacuumParams *params, +do_analyze_rel(Relation onerel, const VacuumParams params, List *va_cols, AcquireSampleRowsFunc acquirefunc, BlockNumber relpages, bool inh, bool in_outer_xact, int elevel) @@ -309,9 +308,9 @@ do_analyze_rel(Relation onerel, VacuumParams *params, PgStat_Counter startreadtime = 0; PgStat_Counter startwritetime = 0; - verbose = (params->options & VACOPT_VERBOSE) != 0; + verbose = (params.options & VACOPT_VERBOSE) != 0; instrument = (verbose || (AmAutoVacuumWorkerProcess() && - params->log_min_duration >= 0)); + params.log_min_duration >= 0)); if (inh) ereport(elevel, (errmsg("analyzing \"%s.%s\" inheritance tree", @@ -690,8 +689,8 @@ do_analyze_rel(Relation onerel, VacuumParams *params, * only do it for inherited stats. (We're never called for not-inherited * stats on partitioned tables anyway.) * - * Reset the changes_since_analyze counter only if we analyzed all - * columns; otherwise, there is still work for auto-analyze to do. + * Reset the mod_since_analyze counter only if we analyzed all columns; + * otherwise, there is still work for auto-analyze to do. */ if (!inh) pgstat_report_analyze(onerel, totalrows, totaldeadrows, @@ -706,7 +705,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, * amvacuumcleanup() when called in ANALYZE-only mode. The only exception * among core index AMs is GIN/ginvacuumcleanup(). */ - if (!(params->options & VACOPT_VACUUM)) + if (!(params.options & VACOPT_VACUUM)) { for (ind = 0; ind < nindexes; ind++) { @@ -736,9 +735,9 @@ do_analyze_rel(Relation onerel, VacuumParams *params, { TimestampTz endtime = GetCurrentTimestamp(); - if (verbose || params->log_min_duration == 0 || + if (verbose || params.log_min_duration == 0 || TimestampDifferenceExceeds(starttime, endtime, - params->log_min_duration)) + params.log_min_duration)) { long delay_in_ms; WalUsage walusage; diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 54a08e4102e14..b55221d44cd00 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -917,7 +917,7 @@ copy_table_data(Relation NewHeap, Relation OldHeap, Relation OldIndex, bool verb * not to be aggressive about this. */ memset(¶ms, 0, sizeof(VacuumParams)); - vacuum_get_cutoffs(OldHeap, ¶ms, &cutoffs); + vacuum_get_cutoffs(OldHeap, params, &cutoffs); /* * FreezeXid will become the table's new relfrozenxid, and that mustn't go diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c index f67a8b95d29de..5c783cc61f1d7 100644 --- a/src/backend/commands/comment.c +++ b/src/backend/commands/comment.c @@ -20,10 +20,10 @@ #include "access/table.h" #include "catalog/indexing.h" #include "catalog/objectaddress.h" +#include "catalog/pg_database.h" #include "catalog/pg_description.h" #include "catalog/pg_shdescription.h" #include "commands/comment.h" -#include "commands/dbcommands.h" #include "miscadmin.h" #include "utils/builtins.h" #include "utils/fmgroids.h" diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 74ae42b19a710..fae9c41db6565 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -322,11 +322,13 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt, } /* - * Extract a CopyHeaderChoice value from a DefElem. This is like - * defGetBoolean() but also accepts the special value "match". + * Extract the CopyFormatOptions.header_line value from a DefElem. + * + * Parses the HEADER option for COPY, which can be a boolean, a non-negative + * integer (number of lines to skip), or the special value "match". */ -static CopyHeaderChoice -defGetCopyHeaderChoice(DefElem *def, bool is_from) +static int +defGetCopyHeaderOption(DefElem *def, bool is_from) { /* * If no parameter value given, assume "true" is meant. @@ -335,20 +337,27 @@ defGetCopyHeaderChoice(DefElem *def, bool is_from) return COPY_HEADER_TRUE; /* - * Allow 0, 1, "true", "false", "on", "off", or "match". + * Allow 0, 1, "true", "false", "on", "off", a non-negative integer, or + * "match". */ switch (nodeTag(def->arg)) { case T_Integer: - switch (intVal(def->arg)) { - case 0: - return COPY_HEADER_FALSE; - case 1: - return COPY_HEADER_TRUE; - default: - /* otherwise, error out below */ - break; + int ival = intVal(def->arg); + + if (ival < 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("a negative integer value cannot be " + "specified for %s", def->defname))); + + if (!is_from && ival > 1) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot use multi-line header in COPY TO"))); + + return ival; } break; default: @@ -381,7 +390,8 @@ defGetCopyHeaderChoice(DefElem *def, bool is_from) } ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("%s requires a Boolean value or \"match\"", + errmsg("%s requires a Boolean value, a non-negative integer, " + "or the string \"match\"", def->defname))); return COPY_HEADER_FALSE; /* keep compiler quiet */ } @@ -566,7 +576,7 @@ ProcessCopyOptions(ParseState *pstate, if (header_specified) errorConflictingDefElem(defel, pstate); header_specified = true; - opts_out->header_line = defGetCopyHeaderChoice(defel, is_from); + opts_out->header_line = defGetCopyHeaderOption(defel, is_from); } else if (strcmp(defel->defname, "quote") == 0) { @@ -769,7 +779,7 @@ ProcessCopyOptions(ParseState *pstate, errmsg("COPY delimiter cannot be \"%s\"", opts_out->delim))); /* Check header */ - if (opts_out->binary && opts_out->header_line) + if (opts_out->binary && opts_out->header_line != COPY_HEADER_FALSE) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /*- translator: %s is the name of a COPY option, e.g. ON_ERROR */ diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c index f5fc346e2013b..b1ae97b833dff 100644 --- a/src/backend/commands/copyfromparse.c +++ b/src/backend/commands/copyfromparse.c @@ -771,21 +771,30 @@ static pg_attribute_always_inline bool NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool is_csv) { int fldct; - bool done; + bool done = false; /* only available for text or csv input */ Assert(!cstate->opts.binary); /* on input check that the header line is correct if needed */ - if (cstate->cur_lineno == 0 && cstate->opts.header_line) + if (cstate->cur_lineno == 0 && cstate->opts.header_line != COPY_HEADER_FALSE) { ListCell *cur; TupleDesc tupDesc; + int lines_to_skip = cstate->opts.header_line; + + /* If set to "match", one header line is skipped */ + if (cstate->opts.header_line == COPY_HEADER_MATCH) + lines_to_skip = 1; tupDesc = RelationGetDescr(cstate->rel); - cstate->cur_lineno++; - done = CopyReadLine(cstate, is_csv); + for (int i = 0; i < lines_to_skip; i++) + { + cstate->cur_lineno++; + if ((done = CopyReadLine(cstate, is_csv))) + break; + } if (cstate->opts.header_line == COPY_HEADER_MATCH) { @@ -1538,7 +1547,7 @@ GetDecimalFromHex(char hex) if (isdigit((unsigned char) hex)) return hex - '0'; else - return tolower((unsigned char) hex) - 'a' + 10; + return pg_ascii_tolower((unsigned char) hex) - 'a' + 10; } /* diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index 84a3f3879a870..67b94b91cae44 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -199,7 +199,7 @@ CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc) cstate->file_encoding); /* if a header has been requested send the line */ - if (cstate->opts.header_line) + if (cstate->opts.header_line == COPY_HEADER_TRUE) { ListCell *cur; bool hdr_delim = false; @@ -653,11 +653,14 @@ BeginCopyTo(ParseState *pstate, RelationGetRelationName(rel)), errhint("Try the COPY (SELECT ...) TO variant."))); else if (rel->rd_rel->relkind == RELKIND_MATVIEW) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot copy from materialized view \"%s\"", - RelationGetRelationName(rel)), - errhint("Try the COPY (SELECT ...) TO variant."))); + { + if (!RelationIsPopulated(rel)) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot copy from unpopulated materialized view \"%s\"", + RelationGetRelationName(rel)), + errhint("Use the REFRESH MATERIALIZED VIEW command.")); + } else if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -832,7 +835,7 @@ BeginCopyTo(ParseState *pstate, ((DR_copy *) dest)->cstate = cstate; /* Create a QueryDesc requesting no output */ - cstate->queryDesc = CreateQueryDesc(plan, NULL, pstate->p_sourcetext, + cstate->queryDesc = CreateQueryDesc(plan, pstate->p_sourcetext, GetActiveSnapshot(), InvalidSnapshot, dest, NULL, NULL, 0); @@ -842,8 +845,7 @@ BeginCopyTo(ParseState *pstate, * * ExecutorStart computes a result tupdesc for us */ - if (!ExecutorStart(cstate->queryDesc, 0)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); + ExecutorStart(cstate->queryDesc, 0); tupDesc = cstate->queryDesc->tupDesc; } diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 0a4155773eb5f..dfd2ab8e8628c 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -334,13 +334,12 @@ ExecCreateTableAs(ParseState *pstate, CreateTableAsStmt *stmt, UpdateActiveSnapshotCommandId(); /* Create a QueryDesc, redirecting output to our tuple receiver */ - queryDesc = CreateQueryDesc(plan, NULL, pstate->p_sourcetext, + queryDesc = CreateQueryDesc(plan, pstate->p_sourcetext, GetActiveSnapshot(), InvalidSnapshot, dest, params, queryEnv, 0); /* call ExecutorStart to prepare the plan for execution */ - if (!ExecutorStart(queryDesc, GetIntoRelEFlags(into))) - elog(ERROR, "ExecutorStart() failed unexpectedly"); + ExecutorStart(queryDesc, GetIntoRelEFlags(into)); /* run the plan to completion */ ExecutorRun(queryDesc, ForwardScanDirection, 0); diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 5fbbcdaabb1d2..2793fd837715d 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -64,6 +64,7 @@ #include "utils/acl.h" #include "utils/builtins.h" #include "utils/fmgroids.h" +#include "utils/lsyscache.h" #include "utils/pg_locale.h" #include "utils/relmapper.h" #include "utils/snapmgr.h" @@ -570,8 +571,8 @@ CreateDatabaseUsingFileCopy(Oid src_dboid, Oid dst_dboid, Oid src_tsid, * any CREATE DATABASE commands. */ if (!IsBinaryUpgrade) - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | - CHECKPOINT_WAIT | CHECKPOINT_FLUSH_ALL); + RequestCheckpoint(CHECKPOINT_FAST | CHECKPOINT_FORCE | + CHECKPOINT_WAIT | CHECKPOINT_FLUSH_UNLOGGED); /* * Iterate through all tablespaces of the template database, and copy each @@ -673,7 +674,7 @@ CreateDatabaseUsingFileCopy(Oid src_dboid, Oid dst_dboid, Oid src_tsid, * strategy that avoids these problems. */ if (!IsBinaryUpgrade) - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | + RequestCheckpoint(CHECKPOINT_FAST | CHECKPOINT_FORCE | CHECKPOINT_WAIT); } @@ -1052,7 +1053,7 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) dbctype = src_ctype; if (dblocprovider == '\0') dblocprovider = src_locprovider; - if (dblocale == NULL) + if (dblocale == NULL && dblocprovider == src_locprovider) dblocale = src_locale; if (dbicurules == NULL) dbicurules = src_icurules; @@ -1065,16 +1066,41 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) /* Check that the chosen locales are valid, and get canonical spellings */ if (!check_locale(LC_COLLATE, dbcollate, &canonname)) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate), - errhint("If the locale name is specific to ICU, use ICU_LOCALE."))); + { + if (dblocprovider == COLLPROVIDER_BUILTIN) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate), + errhint("If the locale name is specific to the builtin provider, use BUILTIN_LOCALE."))); + else if (dblocprovider == COLLPROVIDER_ICU) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate), + errhint("If the locale name is specific to the ICU provider, use ICU_LOCALE."))); + else + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate))); + } dbcollate = canonname; if (!check_locale(LC_CTYPE, dbctype, &canonname)) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype), - errhint("If the locale name is specific to ICU, use ICU_LOCALE."))); + { + if (dblocprovider == COLLPROVIDER_BUILTIN) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype), + errhint("If the locale name is specific to the builtin provider, use BUILTIN_LOCALE."))); + else if (dblocprovider == COLLPROVIDER_ICU) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype), + errhint("If the locale name is specific to the ICU provider, use ICU_LOCALE."))); + else + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype))); + } + dbctype = canonname; check_encoding_locale_matches(encoding, dbcollate, dbctype); @@ -1845,7 +1871,7 @@ dropdb(const char *dbname, bool missing_ok, bool force) * Force a checkpoint to make sure the checkpointer has received the * message sent by ForgetDatabaseSyncRequests. */ - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | CHECKPOINT_WAIT); + RequestCheckpoint(CHECKPOINT_FAST | CHECKPOINT_FORCE | CHECKPOINT_WAIT); /* Close all smgr fds in all backends. */ WaitForProcSignalBarrier(EmitProcSignalBarrier(PROCSIGNAL_BARRIER_SMGRRELEASE)); @@ -2095,8 +2121,8 @@ movedb(const char *dbname, const char *tblspcname) * On Windows, this also ensures that background procs don't hold any open * files, which would cause rmdir() to fail. */ - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | CHECKPOINT_WAIT - | CHECKPOINT_FLUSH_ALL); + RequestCheckpoint(CHECKPOINT_FAST | CHECKPOINT_FORCE | CHECKPOINT_WAIT + | CHECKPOINT_FLUSH_UNLOGGED); /* Close all smgr fds in all backends. */ WaitForProcSignalBarrier(EmitProcSignalBarrier(PROCSIGNAL_BARRIER_SMGRRELEASE)); @@ -2227,7 +2253,7 @@ movedb(const char *dbname, const char *tblspcname) * any unlogged operations done in the new DB tablespace before the * next checkpoint. */ - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | CHECKPOINT_WAIT); + RequestCheckpoint(CHECKPOINT_FAST | CHECKPOINT_FORCE | CHECKPOINT_WAIT); /* * Force synchronous commit, thus minimizing the window between @@ -3179,30 +3205,6 @@ get_database_oid(const char *dbname, bool missing_ok) } -/* - * get_database_name - given a database OID, look up the name - * - * Returns a palloc'd string, or NULL if no such database. - */ -char * -get_database_name(Oid dbid) -{ - HeapTuple dbtuple; - char *result; - - dbtuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(dbid)); - if (HeapTupleIsValid(dbtuple)) - { - result = pstrdup(NameStr(((Form_pg_database) GETSTRUCT(dbtuple))->datname)); - ReleaseSysCache(dbtuple); - } - else - result = NULL; - - return result; -} - - /* * While dropping a database the pg_database row is marked invalid, but the * catalog contents still exist. Connections to such a database are not diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index edc2c988e2934..631fb0525f1e7 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -2021,8 +2021,8 @@ pg_event_trigger_ddl_commands(PG_FUNCTION_ARGS) elog(ERROR, "cache lookup failed for object %u/%u", addr.classId, addr.objectId); schema_oid = - heap_getattr(objtup, nspAttnum, - RelationGetDescr(catalog), &isnull); + DatumGetObjectId(heap_getattr(objtup, nspAttnum, + RelationGetDescr(catalog), &isnull)); if (isnull) elog(ERROR, "invalid null namespace in object %u/%u/%d", diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index ef8aa489af8d2..8345bc0264b23 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -369,8 +369,7 @@ standard_ExplainOneQuery(Query *query, int cursorOptions, } /* run it (if needed) and produce output */ - ExplainOnePlan(plan, NULL, NULL, -1, into, es, queryString, params, - queryEnv, + ExplainOnePlan(plan, into, es, queryString, params, queryEnv, &planduration, (es->buffers ? &bufusage : NULL), es->memory ? &mem_counters : NULL); } @@ -492,9 +491,7 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es, * to call it. */ void -ExplainOnePlan(PlannedStmt *plannedstmt, CachedPlan *cplan, - CachedPlanSource *plansource, int query_index, - IntoClause *into, ExplainState *es, +ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es, const char *queryString, ParamListInfo params, QueryEnvironment *queryEnv, const instr_time *planduration, const BufferUsage *bufusage, @@ -550,7 +547,7 @@ ExplainOnePlan(PlannedStmt *plannedstmt, CachedPlan *cplan, dest = None_Receiver; /* Create a QueryDesc for the query */ - queryDesc = CreateQueryDesc(plannedstmt, cplan, queryString, + queryDesc = CreateQueryDesc(plannedstmt, queryString, GetActiveSnapshot(), InvalidSnapshot, dest, params, queryEnv, instrument_option); @@ -564,17 +561,8 @@ ExplainOnePlan(PlannedStmt *plannedstmt, CachedPlan *cplan, if (into) eflags |= GetIntoRelEFlags(into); - /* Prepare the plan for execution. */ - if (queryDesc->cplan) - { - ExecutorStartCachedPlan(queryDesc, eflags, plansource, query_index); - Assert(queryDesc->planstate); - } - else - { - if (!ExecutorStart(queryDesc, eflags)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); - } + /* call ExecutorStart to prepare the plan for execution */ + ExecutorStart(queryDesc, eflags); /* Execute the plan for statistics if asked for */ if (es->analyze) @@ -823,14 +811,10 @@ ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc) * the queryid in any of the EXPLAIN plans to keep stable the results * generated by regression test suites. */ - if (es->verbose && queryDesc->plannedstmt->queryId != UINT64CONST(0) && + if (es->verbose && queryDesc->plannedstmt->queryId != INT64CONST(0) && compute_query_id != COMPUTE_QUERY_ID_REGRESS) { - /* - * Output the queryid as an int64 rather than a uint64 so we match - * what would be seen in the BIGINT pg_stat_statements.queryid column. - */ - ExplainPropertyInteger("Query Identifier", NULL, (int64) + ExplainPropertyInteger("Query Identifier", NULL, queryDesc->plannedstmt->queryId, es); } } @@ -1232,6 +1216,10 @@ ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used) if (((ModifyTable *) plan)->exclRelRTI) *rels_used = bms_add_member(*rels_used, ((ModifyTable *) plan)->exclRelRTI); + /* Ensure Vars used in RETURNING will have refnames */ + if (plan->targetlist) + *rels_used = bms_add_member(*rels_used, + linitial_int(((ModifyTable *) plan)->resultRelations)); break; case T_Append: *rels_used = bms_add_members(*rels_used, @@ -1848,7 +1836,7 @@ ExplainNode(PlanState *planstate, List *ancestors, if (es->format == EXPLAIN_FORMAT_TEXT) { - appendStringInfo(es->str, " (actual "); + appendStringInfoString(es->str, " (actual "); if (es->timing) appendStringInfo(es->str, "time=%.3f..%.3f ", startup_ms, total_ms); @@ -1917,7 +1905,7 @@ ExplainNode(PlanState *planstate, List *ancestors, if (es->format == EXPLAIN_FORMAT_TEXT) { ExplainIndentText(es); - appendStringInfo(es->str, "actual "); + appendStringInfoString(es->str, "actual "); if (es->timing) appendStringInfo(es->str, "time=%.3f..%.3f ", startup_ms, total_ms); @@ -3594,6 +3582,7 @@ static void show_memoize_info(MemoizeState *mstate, List *ancestors, ExplainState *es) { Plan *plan = ((PlanState *) mstate)->plan; + Memoize *mplan = (Memoize *) plan; ListCell *lc; List *context; StringInfoData keystr; @@ -3614,7 +3603,7 @@ show_memoize_info(MemoizeState *mstate, List *ancestors, ExplainState *es) plan, ancestors); - foreach(lc, ((Memoize *) plan)->param_exprs) + foreach(lc, mplan->param_exprs) { Node *expr = (Node *) lfirst(lc); @@ -3630,6 +3619,24 @@ show_memoize_info(MemoizeState *mstate, List *ancestors, ExplainState *es) pfree(keystr.data); + if (es->costs) + { + if (es->format == EXPLAIN_FORMAT_TEXT) + { + ExplainIndentText(es); + appendStringInfo(es->str, "Estimates: capacity=%u distinct keys=%.0f lookups=%.0f hit percent=%.2f%%\n", + mplan->est_entries, mplan->est_unique_keys, + mplan->est_calls, mplan->est_hit_ratio * 100.0); + } + else + { + ExplainPropertyUInteger("Estimated Capacity", NULL, mplan->est_entries, es); + ExplainPropertyFloat("Estimated Distinct Lookup Keys", NULL, mplan->est_unique_keys, 0, es); + ExplainPropertyFloat("Estimated Lookups", NULL, mplan->est_calls, 0, es); + ExplainPropertyFloat("Estimated Hit Percent", NULL, mplan->est_hit_ratio * 100.0, 2, es); + } + } + if (!es->analyze) return; diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 180f4af9be36a..e6f9ab6dfd66b 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -83,6 +83,8 @@ Oid CurrentExtensionObject = InvalidOid; typedef struct ExtensionControlFile { char *name; /* name of the extension */ + char *basedir; /* base directory where control and script + * files are located */ char *control_dir; /* directory where control file was found */ char *directory; /* directory for script files */ char *default_version; /* default install target version, if any */ @@ -153,6 +155,7 @@ static void ExecAlterExtensionContentsRecurse(AlterExtensionContentsStmt *stmt, static char *read_whole_file(const char *filename, int *length); static ExtensionControlFile *new_ExtensionControlFile(const char *extname); +char *find_in_paths(const char *basename, List *paths); /* * get_extension_oid - given an extension name, look up the OID @@ -374,8 +377,15 @@ get_extension_control_directories(void) piece = palloc(len + 1); strlcpy(piece, ecp, len + 1); - /* Substitute the path macro if needed */ - mangled = substitute_path_macro(piece, "$system", system_dir); + /* + * Substitute the path macro if needed or append "extension" + * suffix if it is a custom extension control path. + */ + if (strcmp(piece, "$system") == 0) + mangled = substitute_path_macro(piece, "$system", system_dir); + else + mangled = psprintf("%s/extension", piece); + pfree(piece); /* Canonicalize the path based on the OS and add to the list */ @@ -401,28 +411,16 @@ get_extension_control_directories(void) static char * find_extension_control_filename(ExtensionControlFile *control) { - char sharepath[MAXPGPATH]; - char *system_dir; char *basename; - char *ecp; char *result; + List *paths; Assert(control->name); - get_share_path(my_exec_path, sharepath); - system_dir = psprintf("%s/extension", sharepath); - basename = psprintf("%s.control", control->name); - /* - * find_in_path() does nothing if the path value is empty. This is the - * historical behavior for dynamic_library_path, but it makes no sense for - * extensions. So in that case, substitute a default value. - */ - ecp = Extension_control_path; - if (strlen(ecp) == 0) - ecp = "$system"; - result = find_in_path(basename, ecp, "extension_control_path", "$system", system_dir); + paths = get_extension_control_directories(); + result = find_in_paths(basename, paths); if (result) { @@ -439,12 +437,11 @@ find_extension_control_filename(ExtensionControlFile *control) static char * get_extension_script_directory(ExtensionControlFile *control) { - char sharepath[MAXPGPATH]; - char *result; - /* * The directory parameter can be omitted, absolute, or relative to the - * installation's share directory. + * installation's base directory, which can be the sharedir or a custom + * path that it was set extension_control_path. It depends where the + * .control file was found. */ if (!control->directory) return pstrdup(control->control_dir); @@ -452,11 +449,8 @@ get_extension_script_directory(ExtensionControlFile *control) if (is_absolute_path(control->directory)) return pstrdup(control->directory); - get_share_path(my_exec_path, sharepath); - result = (char *) palloc(MAXPGPATH); - snprintf(result, MAXPGPATH, "%s/%s", sharepath, control->directory); - - return result; + Assert(control->basedir != NULL); + return psprintf("%s/%s", control->basedir, control->directory); } static char * @@ -550,6 +544,14 @@ parse_extension_control_file(ExtensionControlFile *control, errhint("The extension must first be installed on the system where PostgreSQL is running."))); } + /* Assert that the control_dir ends with /extension */ + Assert(control->control_dir != NULL); + Assert(strcmp(control->control_dir + strlen(control->control_dir) - strlen("/extension"), "/extension") == 0); + + control->basedir = pnstrdup( + control->control_dir, + strlen(control->control_dir) - strlen("/extension")); + if ((file = AllocateFile(filename, "r")) == NULL) { /* no complaint for missing auxiliary file */ @@ -991,13 +993,11 @@ execute_sql_string(const char *sql, const char *filename) QueryDesc *qdesc; qdesc = CreateQueryDesc(stmt, - NULL, sql, GetActiveSnapshot(), NULL, dest, NULL, NULL, 0); - if (!ExecutorStart(qdesc, 0)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); + ExecutorStart(qdesc, 0); ExecutorRun(qdesc, ForwardScanDirection, 0); ExecutorFinish(qdesc); ExecutorEnd(qdesc); @@ -3863,3 +3863,44 @@ new_ExtensionControlFile(const char *extname) return control; } + +/* + * Work in a very similar way with find_in_path but it receives an already + * parsed List of paths to search the basename and it do not support macro + * replacement or custom error messages (for simplicity). + * + * By "already parsed List of paths" this function expected that paths already + * have all macros replaced. + */ +char * +find_in_paths(const char *basename, List *paths) +{ + ListCell *cell; + + foreach(cell, paths) + { + char *path = lfirst(cell); + char *full; + + Assert(path != NULL); + + path = pstrdup(path); + canonicalize_path(path); + + /* only absolute paths */ + if (!is_absolute_path(path)) + ereport(ERROR, + errcode(ERRCODE_INVALID_NAME), + errmsg("component in parameter \"%s\" is not an absolute path", "extension_control_path")); + + full = psprintf("%s/%s", path, basename); + + if (pg_file_exists(full)) + return full; + + pfree(path); + pfree(full); + } + + return NULL; +} diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index c14e038d54f14..77f8461f42eee 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -71,15 +71,26 @@ optionListToArray(List *options) foreach(cell, options) { DefElem *def = lfirst(cell); + const char *name; const char *value; Size len; text *t; + name = def->defname; value = defGetString(def); - len = VARHDRSZ + strlen(def->defname) + 1 + strlen(value); + + /* Insist that name not contain "=", else "a=b=c" is ambiguous */ + if (strchr(name, '=') != NULL) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid option name \"%s\": must not contain \"=\"", + name))); + + len = VARHDRSZ + strlen(name) + 1 + strlen(value); + /* +1 leaves room for sprintf's trailing null */ t = palloc(len + 1); SET_VARSIZE(t, len); - sprintf(VARDATA(t), "%s=%s", def->defname, value); + sprintf(VARDATA(t), "%s=%s", name, value); astate = accumArrayResult(astate, PointerGetDatum(t), false, TEXTOID, @@ -1577,6 +1588,7 @@ ImportForeignSchema(ImportForeignSchemaStmt *stmt) pstmt->utilityStmt = (Node *) cstmt; pstmt->stmt_location = rs->stmt_location; pstmt->stmt_len = rs->stmt_len; + pstmt->planOrigin = PLAN_STMT_INTERNAL; /* Execute statement */ ProcessUtility(pstmt, cmd, false, diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index b9fd7683abb42..0335e982b318b 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1046,6 +1046,7 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) List *parameterDefaults; Oid variadicArgType; List *trftypes_list = NIL; + List *trfoids_list = NIL; ArrayType *trftypes; Oid requiredResultType; bool isWindowFunc, @@ -1157,11 +1158,12 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) Oid typeid = typenameTypeId(NULL, lfirst_node(TypeName, lc)); Oid elt = get_base_element_type(typeid); + Oid transformid; typeid = elt ? elt : typeid; - - get_transform_oid(typeid, languageOid, false); + transformid = get_transform_oid(typeid, languageOid, false); trftypes_list = lappend_oid(trftypes_list, typeid); + trfoids_list = lappend_oid(trfoids_list, transformid); } } @@ -1292,6 +1294,7 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) PointerGetDatum(parameterNames), parameterDefaults, PointerGetDatum(trftypes), + trfoids_list, PointerGetDatum(proconfig), prosupport, procost, diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 33c2106c17cee..ca2bde62e82ff 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -38,7 +38,6 @@ #include "catalog/pg_tablespace.h" #include "catalog/pg_type.h" #include "commands/comment.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/progress.h" @@ -2469,8 +2468,8 @@ GetOperatorFromCompareType(Oid opclass, Oid rhstype, CompareType cmptype, cmptype == COMPARE_EQ ? errmsg("could not identify an equality operator for type %s", format_type_be(opcintype)) : cmptype == COMPARE_OVERLAP ? errmsg("could not identify an overlaps operator for type %s", format_type_be(opcintype)) : cmptype == COMPARE_CONTAINED_BY ? errmsg("could not identify a contained-by operator for type %s", format_type_be(opcintype)) : 0, - errdetail("Could not translate compare type %d for operator family \"%s\", input type %s, access method \"%s\".", - cmptype, get_opfamily_name(opfamily, false), format_type_be(opcintype), get_am_name(amid))); + errdetail("Could not translate compare type %d for operator family \"%s\" of access method \"%s\".", + cmptype, get_opfamily_name(opfamily, false), get_am_name(amid))); /* * We parameterize rhstype so foreign keys can ask for a <@ operator @@ -2592,7 +2591,9 @@ makeObjectName(const char *name1, const char *name2, const char *label) * constraint names.) * * Note: it is theoretically possible to get a collision anyway, if someone - * else chooses the same name concurrently. This is fairly unlikely to be + * else chooses the same name concurrently. We shorten the race condition + * window by checking for conflicting relations using SnapshotDirty, but + * that doesn't close the window entirely. This is fairly unlikely to be * a problem in practice, especially if one is holding an exclusive lock on * the relation identified by name1. However, if choosing multiple names * within a single command, you'd better create the new object and do @@ -2608,15 +2609,45 @@ ChooseRelationName(const char *name1, const char *name2, int pass = 0; char *relname = NULL; char modlabel[NAMEDATALEN]; + SnapshotData SnapshotDirty; + Relation pgclassrel; + + /* prepare to search pg_class with a dirty snapshot */ + InitDirtySnapshot(SnapshotDirty); + pgclassrel = table_open(RelationRelationId, AccessShareLock); /* try the unmodified label first */ strlcpy(modlabel, label, sizeof(modlabel)); for (;;) { + ScanKeyData key[2]; + SysScanDesc scan; + bool collides; + relname = makeObjectName(name1, name2, modlabel); - if (!OidIsValid(get_relname_relid(relname, namespaceid))) + /* is there any conflicting relation name? */ + ScanKeyInit(&key[0], + Anum_pg_class_relname, + BTEqualStrategyNumber, F_NAMEEQ, + CStringGetDatum(relname)); + ScanKeyInit(&key[1], + Anum_pg_class_relnamespace, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(namespaceid)); + + scan = systable_beginscan(pgclassrel, ClassNameNspIndexId, + true /* indexOK */ , + &SnapshotDirty, + 2, key); + + collides = HeapTupleIsValid(systable_getnext(scan)); + + systable_endscan(scan); + + /* break out of loop if no conflict */ + if (!collides) { if (!isconstraint || !ConstraintNameExists(relname, namespaceid)) @@ -2628,6 +2659,8 @@ ChooseRelationName(const char *name1, const char *name2, snprintf(modlabel, sizeof(modlabel), "%s%d", label, ++pass); } + table_close(pgclassrel, AccessShareLock); + return relname; } @@ -3892,9 +3925,9 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein #ifdef USE_INJECTION_POINTS if (idx->safe) - INJECTION_POINT("reindex-conc-index-safe"); + INJECTION_POINT("reindex-conc-index-safe", NULL); else - INJECTION_POINT("reindex-conc-index-not-safe"); + INJECTION_POINT("reindex-conc-index-not-safe", NULL); #endif idx->tableId = RelationGetRelid(heapRel); @@ -4226,7 +4259,7 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein false); /* - * Updating pg_index might involve TOAST table access, so ensure we + * Swapping the indexes might involve TOAST table access, so ensure we * have a valid snapshot. */ PushActiveSnapshot(GetTransactionSnapshot()); diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index e7854add17825..188e26f0e6e29 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -438,13 +438,12 @@ refresh_matview_datafill(DestReceiver *dest, Query *query, UpdateActiveSnapshotCommandId(); /* Create a QueryDesc, redirecting output to our tuple receiver */ - queryDesc = CreateQueryDesc(plan, NULL, queryString, + queryDesc = CreateQueryDesc(plan, queryString, GetActiveSnapshot(), InvalidSnapshot, dest, NULL, NULL, 0); /* call ExecutorStart to prepare the plan for execution */ - if (!ExecutorStart(queryDesc, 0)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); + ExecutorStart(queryDesc, 0); /* run the plan */ ExecutorRun(queryDesc, ForwardScanDirection, 0); @@ -836,7 +835,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, if (!foundUniqueIndex) ereport(ERROR, errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("could not find suitable unique index on materialized view")); + errmsg("could not find suitable unique index on materialized view \"%s\"", + RelationGetRelationName(matviewRel))); appendStringInfoString(&querybuf, " AND newdata.* OPERATOR(pg_catalog.*=) mv.*) " diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 8546366ee06c2..a6dd8eab5186b 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -1331,6 +1331,31 @@ assignProcTypes(OpFamilyMember *member, Oid amoid, Oid typeoid, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("ordering equal image functions must not be cross-type"))); } + else if (member->number == BTSKIPSUPPORT_PROC) + { + if (procform->pronargs != 1 || + procform->proargtypes.values[0] != INTERNALOID) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("btree skip support functions must accept type \"internal\""))); + if (procform->prorettype != VOIDOID) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("btree skip support functions must return void"))); + + /* + * pg_amproc functions are indexed by (lefttype, righttype), but a + * skip support function doesn't make sense in cross-type + * scenarios. The same opclass opcintype OID is always used for + * lefttype and righttype. Providing a cross-type routine isn't + * sensible. Reject cross-type ALTER OPERATOR FAMILY ... ADD + * FUNCTION 6 statements here. + */ + if (member->lefttype != member->righttype) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("btree skip support functions must not be cross-type"))); + } } else if (GetIndexAmRoutineByAmId(amoid, false)->amcanhash) { diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c index 4c2ac04522459..e7c8171c10207 100644 --- a/src/backend/commands/portalcmds.c +++ b/src/backend/commands/portalcmds.c @@ -117,7 +117,6 @@ PerformCursorOpen(ParseState *pstate, DeclareCursorStmt *cstmt, ParamListInfo pa queryString, CMDTAG_SELECT, /* cursor's query is always a SELECT */ list_make1(plan), - NULL, NULL); /*---------- diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index bf7d2b2309fc2..34b6410d6a26c 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -205,8 +205,7 @@ ExecuteQuery(ParseState *pstate, query_string, entry->plansource->commandTag, plan_list, - cplan, - entry->plansource); + cplan); /* * For CREATE TABLE ... AS EXECUTE, we must verify that the prepared @@ -586,7 +585,6 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into, ExplainState *es, MemoryContextCounters mem_counters; MemoryContext planner_ctx = NULL; MemoryContext saved_ctx = NULL; - int query_index = 0; if (es->memory) { @@ -659,8 +657,7 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into, ExplainState *es, PlannedStmt *pstmt = lfirst_node(PlannedStmt, p); if (pstmt->commandType != CMD_UTILITY) - ExplainOnePlan(pstmt, cplan, entry->plansource, query_index, - into, es, query_string, paramLI, pstate->p_queryEnv, + ExplainOnePlan(pstmt, into, es, query_string, paramLI, pstate->p_queryEnv, &planduration, (es->buffers ? &bufusage : NULL), es->memory ? &mem_counters : NULL); else @@ -671,8 +668,6 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into, ExplainState *es, /* Separate plans with an appropriate separator */ if (lnext(plan_list, p) != NULL) ExplainSeparatePlans(es); - - query_index++; } if (estate) diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 0b23d94c38e20..3de5687461c85 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -29,7 +29,6 @@ #include "catalog/pg_publication.h" #include "catalog/pg_publication_namespace.h" #include "catalog/pg_publication_rel.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/publicationcmds.h" @@ -2113,25 +2112,25 @@ AlterPublicationOwner_oid(Oid pubid, Oid newOwnerId) static char defGetGeneratedColsOption(DefElem *def) { - char *sval; + char *sval = ""; /* - * If no parameter value given, assume "stored" is meant. + * A parameter value is required. */ - if (!def->arg) - return PUBLISH_GENCOLS_STORED; - - sval = defGetString(def); + if (def->arg) + { + sval = defGetString(def); - if (pg_strcasecmp(sval, "none") == 0) - return PUBLISH_GENCOLS_NONE; - if (pg_strcasecmp(sval, "stored") == 0) - return PUBLISH_GENCOLS_STORED; + if (pg_strcasecmp(sval, "none") == 0) + return PUBLISH_GENCOLS_NONE; + if (pg_strcasecmp(sval, "stored") == 0) + return PUBLISH_GENCOLS_STORED; + } ereport(ERROR, errcode(ERRCODE_SYNTAX_ERROR), - errmsg("%s requires a \"none\" or \"stored\" value", - def->defname)); + errmsg("invalid value for publication parameter \"%s\": \"%s\"", def->defname, sval), + errdetail("Valid values are \"%s\" and \"%s\".", "none", "stored")); return PUBLISH_GENCOLS_NONE; /* keep compiler quiet */ } diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c index 546160f09410e..3cc1472103a7a 100644 --- a/src/backend/commands/schemacmds.c +++ b/src/backend/commands/schemacmds.c @@ -25,7 +25,6 @@ #include "catalog/pg_authid.h" #include "catalog/pg_database.h" #include "catalog/pg_namespace.h" -#include "commands/dbcommands.h" #include "commands/event_trigger.h" #include "commands/schemacmds.h" #include "miscadmin.h" @@ -34,6 +33,7 @@ #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/syscache.h" @@ -215,6 +215,7 @@ CreateSchemaCommand(CreateSchemaStmt *stmt, const char *queryString, wrapper->utilityStmt = stmt; wrapper->stmt_location = stmt_location; wrapper->stmt_len = stmt_len; + wrapper->planOrigin = PLAN_STMT_INTERNAL; /* do this step */ ProcessUtility(wrapper, diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 451ae6f7f6940..a3c8cff97b03b 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -106,7 +106,9 @@ static Form_pg_sequence_data read_seq_tuple(Relation rel, static void init_params(ParseState *pstate, List *options, bool for_identity, bool isInit, Form_pg_sequence seqform, - Form_pg_sequence_data seqdataform, + int64 *last_value, + bool *reset_state, + bool *is_called, bool *need_seq_rewrite, List **owned_by); static void do_setval(Oid relid, int64 next, bool iscalled); @@ -121,7 +123,9 @@ ObjectAddress DefineSequence(ParseState *pstate, CreateSeqStmt *seq) { FormData_pg_sequence seqform; - FormData_pg_sequence_data seqdataform; + int64 last_value; + bool reset_state; + bool is_called; bool need_seq_rewrite; List *owned_by; CreateStmt *stmt = makeNode(CreateStmt); @@ -164,7 +168,7 @@ DefineSequence(ParseState *pstate, CreateSeqStmt *seq) /* Check and set all option values */ init_params(pstate, seq->options, seq->for_identity, true, - &seqform, &seqdataform, + &seqform, &last_value, &reset_state, &is_called, &need_seq_rewrite, &owned_by); /* @@ -179,7 +183,7 @@ DefineSequence(ParseState *pstate, CreateSeqStmt *seq) { case SEQ_COL_LASTVAL: coldef = makeColumnDef("last_value", INT8OID, -1, InvalidOid); - value[i - 1] = Int64GetDatumFast(seqdataform.last_value); + value[i - 1] = Int64GetDatumFast(last_value); break; case SEQ_COL_LOG: coldef = makeColumnDef("log_cnt", INT8OID, -1, InvalidOid); @@ -448,6 +452,9 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt) ObjectAddress address; Relation rel; HeapTuple seqtuple; + bool reset_state = false; + bool is_called; + int64 last_value; HeapTuple newdatatuple; /* Open and lock sequence, and check for ownership along the way. */ @@ -481,12 +488,14 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt) /* copy the existing sequence data tuple, so it can be modified locally */ newdatatuple = heap_copytuple(&datatuple); newdataform = (Form_pg_sequence_data) GETSTRUCT(newdatatuple); + last_value = newdataform->last_value; + is_called = newdataform->is_called; UnlockReleaseBuffer(buf); /* Check and set new values */ init_params(pstate, stmt->options, stmt->for_identity, false, - seqform, newdataform, + seqform, &last_value, &reset_state, &is_called, &need_seq_rewrite, &owned_by); /* If needed, rewrite the sequence relation itself */ @@ -513,6 +522,10 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt) /* * Insert the modified tuple into the new storage file. */ + newdataform->last_value = last_value; + newdataform->is_called = is_called; + if (reset_state) + newdataform->log_cnt = 0; fill_seq_with_data(seqrel, newdatatuple); } @@ -1236,17 +1249,19 @@ read_seq_tuple(Relation rel, Buffer *buf, HeapTuple seqdatatuple) /* * init_params: process the options list of CREATE or ALTER SEQUENCE, and * store the values into appropriate fields of seqform, for changes that go - * into the pg_sequence catalog, and fields of seqdataform for changes to the - * sequence relation itself. Set *need_seq_rewrite to true if we changed any - * parameters that require rewriting the sequence's relation (interesting for - * ALTER SEQUENCE). Also set *owned_by to any OWNED BY option, or to NIL if - * there is none. + * into the pg_sequence catalog, and fields for changes to the sequence + * relation itself (*is_called, *last_value and *reset_state). Set + * *need_seq_rewrite to true if we changed any parameters that require + * rewriting the sequence's relation (interesting for ALTER SEQUENCE). Also + * set *owned_by to any OWNED BY option, or to NIL if there is none. Set + * *reset_state to true if the internal state of the sequence needs to be + * reset, affecting future nextval() calls, for example with WAL logging. * * If isInit is true, fill any unspecified options with default values; * otherwise, do not change existing options that aren't explicitly overridden. * * Note: we force a sequence rewrite whenever we change parameters that affect - * generation of future sequence values, even if the seqdataform per se is not + * generation of future sequence values, even if the metadata per se is not * changed. This allows ALTER SEQUENCE to behave transactionally. Currently, * the only option that doesn't cause that is OWNED BY. It's *necessary* for * ALTER SEQUENCE OWNED BY to not rewrite the sequence, because that would @@ -1257,7 +1272,9 @@ static void init_params(ParseState *pstate, List *options, bool for_identity, bool isInit, Form_pg_sequence seqform, - Form_pg_sequence_data seqdataform, + int64 *last_value, + bool *reset_state, + bool *is_called, bool *need_seq_rewrite, List **owned_by) { @@ -1363,11 +1380,11 @@ init_params(ParseState *pstate, List *options, bool for_identity, } /* - * We must reset log_cnt when isInit or when changing any parameters that - * would affect future nextval allocations. + * We must reset the state of the sequence when isInit or when changing + * any parameters that would affect future nextval allocations. */ if (isInit) - seqdataform->log_cnt = 0; + *reset_state = true; /* AS type */ if (as_type != NULL) @@ -1416,7 +1433,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("INCREMENT must not be zero"))); - seqdataform->log_cnt = 0; + *reset_state = true; } else if (isInit) { @@ -1428,7 +1445,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, { seqform->seqcycle = boolVal(is_cycled->arg); Assert(BoolIsValid(seqform->seqcycle)); - seqdataform->log_cnt = 0; + *reset_state = true; } else if (isInit) { @@ -1439,7 +1456,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, if (max_value != NULL && max_value->arg) { seqform->seqmax = defGetInt64(max_value); - seqdataform->log_cnt = 0; + *reset_state = true; } else if (isInit || max_value != NULL || reset_max_value) { @@ -1455,7 +1472,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, } else seqform->seqmax = -1; /* descending seq */ - seqdataform->log_cnt = 0; + *reset_state = true; } /* Validate maximum value. No need to check INT8 as seqmax is an int64 */ @@ -1471,7 +1488,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, if (min_value != NULL && min_value->arg) { seqform->seqmin = defGetInt64(min_value); - seqdataform->log_cnt = 0; + *reset_state = true; } else if (isInit || min_value != NULL || reset_min_value) { @@ -1487,7 +1504,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, } else seqform->seqmin = 1; /* ascending seq */ - seqdataform->log_cnt = 0; + *reset_state = true; } /* Validate minimum value. No need to check INT8 as seqmin is an int64 */ @@ -1538,30 +1555,30 @@ init_params(ParseState *pstate, List *options, bool for_identity, if (restart_value != NULL) { if (restart_value->arg != NULL) - seqdataform->last_value = defGetInt64(restart_value); + *last_value = defGetInt64(restart_value); else - seqdataform->last_value = seqform->seqstart; - seqdataform->is_called = false; - seqdataform->log_cnt = 0; + *last_value = seqform->seqstart; + *is_called = false; + *reset_state = true; } else if (isInit) { - seqdataform->last_value = seqform->seqstart; - seqdataform->is_called = false; + *last_value = seqform->seqstart; + *is_called = false; } /* crosscheck RESTART (or current value, if changing MIN/MAX) */ - if (seqdataform->last_value < seqform->seqmin) + if (*last_value < seqform->seqmin) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("RESTART value (%" PRId64 ") cannot be less than MINVALUE (%" PRId64 ")", - seqdataform->last_value, + *last_value, seqform->seqmin))); - if (seqdataform->last_value > seqform->seqmax) + if (*last_value > seqform->seqmax) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("RESTART value (%" PRId64 ") cannot be greater than MAXVALUE (%" PRId64 ")", - seqdataform->last_value, + *last_value, seqform->seqmax))); /* CACHE */ @@ -1573,7 +1590,7 @@ init_params(ParseState *pstate, List *options, bool for_identity, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("CACHE (%" PRId64 ") must be greater than zero", seqform->seqcache))); - seqdataform->log_cnt = 0; + *reset_state = true; } else if (isInit) { diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 4aec73bcc6bbc..0d74398faf321 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -14,6 +14,7 @@ #include "postgres.h" +#include "access/commit_ts.h" #include "access/htup_details.h" #include "access/table.h" #include "access/twophase.h" @@ -29,7 +30,6 @@ #include "catalog/pg_subscription.h" #include "catalog/pg_subscription_rel.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/subscriptioncmds.h" @@ -71,8 +71,9 @@ #define SUBOPT_PASSWORD_REQUIRED 0x00000800 #define SUBOPT_RUN_AS_OWNER 0x00001000 #define SUBOPT_FAILOVER 0x00002000 -#define SUBOPT_LSN 0x00004000 -#define SUBOPT_ORIGIN 0x00008000 +#define SUBOPT_RETAIN_DEAD_TUPLES 0x00004000 +#define SUBOPT_LSN 0x00008000 +#define SUBOPT_ORIGIN 0x00010000 /* check if the 'val' has 'bits' set */ #define IsSet(val, bits) (((val) & (bits)) == (bits)) @@ -98,6 +99,7 @@ typedef struct SubOpts bool passwordrequired; bool runasowner; bool failover; + bool retaindeadtuples; char *origin; XLogRecPtr lsn; } SubOpts; @@ -105,8 +107,10 @@ typedef struct SubOpts static List *fetch_table_list(WalReceiverConn *wrconn, List *publications); static void check_publications_origin(WalReceiverConn *wrconn, List *publications, bool copydata, - char *origin, Oid *subrel_local_oids, - int subrel_count, char *subname); + bool retain_dead_tuples, char *origin, + Oid *subrel_local_oids, int subrel_count, + char *subname); +static void check_pub_dead_tuple_retention(WalReceiverConn *wrconn); static void check_duplicates_in_publist(List *publist, Datum *datums); static List *merge_publications(List *oldpublist, List *newpublist, bool addpub, const char *subname); static void ReportSlotConnectionError(List *rstates, Oid subid, char *slotname, char *err); @@ -162,6 +166,8 @@ parse_subscription_options(ParseState *pstate, List *stmt_options, opts->runasowner = false; if (IsSet(supported_opts, SUBOPT_FAILOVER)) opts->failover = false; + if (IsSet(supported_opts, SUBOPT_RETAIN_DEAD_TUPLES)) + opts->retaindeadtuples = false; if (IsSet(supported_opts, SUBOPT_ORIGIN)) opts->origin = pstrdup(LOGICALREP_ORIGIN_ANY); @@ -210,7 +216,7 @@ parse_subscription_options(ParseState *pstate, List *stmt_options, if (strcmp(opts->slot_name, "none") == 0) opts->slot_name = NULL; else - ReplicationSlotValidateName(opts->slot_name, ERROR); + ReplicationSlotValidateName(opts->slot_name, false, ERROR); } else if (IsSet(supported_opts, SUBOPT_COPY_DATA) && strcmp(defel->defname, "copy_data") == 0) @@ -307,6 +313,15 @@ parse_subscription_options(ParseState *pstate, List *stmt_options, opts->specified_opts |= SUBOPT_FAILOVER; opts->failover = defGetBoolean(defel); } + else if (IsSet(supported_opts, SUBOPT_RETAIN_DEAD_TUPLES) && + strcmp(defel->defname, "retain_dead_tuples") == 0) + { + if (IsSet(opts->specified_opts, SUBOPT_RETAIN_DEAD_TUPLES)) + errorConflictingDefElem(defel, pstate); + + opts->specified_opts |= SUBOPT_RETAIN_DEAD_TUPLES; + opts->retaindeadtuples = defGetBoolean(defel); + } else if (IsSet(supported_opts, SUBOPT_ORIGIN) && strcmp(defel->defname, "origin") == 0) { @@ -563,7 +578,8 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, SUBOPT_SYNCHRONOUS_COMMIT | SUBOPT_BINARY | SUBOPT_STREAMING | SUBOPT_TWOPHASE_COMMIT | SUBOPT_DISABLE_ON_ERR | SUBOPT_PASSWORD_REQUIRED | - SUBOPT_RUN_AS_OWNER | SUBOPT_FAILOVER | SUBOPT_ORIGIN); + SUBOPT_RUN_AS_OWNER | SUBOPT_FAILOVER | + SUBOPT_RETAIN_DEAD_TUPLES | SUBOPT_ORIGIN); parse_subscription_options(pstate, stmt->options, supported_opts, &opts); /* @@ -621,7 +637,7 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, /* Check if name is used */ subid = GetSysCacheOid2(SUBSCRIPTIONNAME, Anum_pg_subscription_oid, - MyDatabaseId, CStringGetDatum(stmt->subname)); + ObjectIdGetDatum(MyDatabaseId), CStringGetDatum(stmt->subname)); if (OidIsValid(subid)) { ereport(ERROR, @@ -630,6 +646,10 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, stmt->subname))); } + /* Ensure that we can enable retain_dead_tuples */ + if (opts.retaindeadtuples) + CheckSubDeadTupleRetention(true, !opts.enabled, WARNING); + if (!IsSet(opts.specified_opts, SUBOPT_SLOT_NAME) && opts.slot_name == NULL) opts.slot_name = stmt->subname; @@ -670,6 +690,8 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, values[Anum_pg_subscription_subpasswordrequired - 1] = BoolGetDatum(opts.passwordrequired); values[Anum_pg_subscription_subrunasowner - 1] = BoolGetDatum(opts.runasowner); values[Anum_pg_subscription_subfailover - 1] = BoolGetDatum(opts.failover); + values[Anum_pg_subscription_subretaindeadtuples - 1] = + BoolGetDatum(opts.retaindeadtuples); values[Anum_pg_subscription_subconninfo - 1] = CStringGetTextDatum(conninfo); if (opts.slot_name) @@ -722,7 +744,11 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, { check_publications(wrconn, publications); check_publications_origin(wrconn, publications, opts.copy_data, - opts.origin, NULL, 0, stmt->subname); + opts.retaindeadtuples, opts.origin, + NULL, 0, stmt->subname); + + if (opts.retaindeadtuples) + check_pub_dead_tuple_retention(wrconn); /* * Set sync state based on if we were asked to do data copy or @@ -881,8 +907,8 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data, sizeof(Oid), oid_cmp); check_publications_origin(wrconn, sub->publications, copy_data, - sub->origin, subrel_local_oids, - subrel_count, sub->name); + sub->retaindeadtuples, sub->origin, + subrel_local_oids, subrel_count, sub->name); /* * Rels that we want to remove from subscription and drop any slots @@ -1040,18 +1066,22 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data, } /* - * Common checks for altering failover and two_phase options. + * Common checks for altering failover, two_phase, and retain_dead_tuples + * options. */ static void CheckAlterSubOption(Subscription *sub, const char *option, bool slot_needs_update, bool isTopLevel) { + Assert(strcmp(option, "failover") == 0 || + strcmp(option, "two_phase") == 0 || + strcmp(option, "retain_dead_tuples") == 0); + /* - * The checks in this function are required only for failover and - * two_phase options. + * Altering the retain_dead_tuples option does not update the slot on the + * publisher. */ - Assert(strcmp(option, "failover") == 0 || - strcmp(option, "two_phase") == 0); + Assert(!slot_needs_update || strcmp(option, "retain_dead_tuples") != 0); /* * Do not allow changing the option if the subscription is enabled. This @@ -1063,6 +1093,39 @@ CheckAlterSubOption(Subscription *sub, const char *option, * the publisher by the existing walsender, so we could have allowed that * even when the subscription is enabled. But we kept this restriction for * the sake of consistency and simplicity. + * + * Additionally, do not allow changing the retain_dead_tuples option when + * the subscription is enabled to prevent race conditions arising from the + * new option value being acknowledged asynchronously by the launcher and + * apply workers. + * + * Without the restriction, a race condition may arise when a user + * disables and immediately re-enables the retain_dead_tuples option. In + * this case, the launcher might drop the slot upon noticing the disabled + * action, while the apply worker may keep maintaining + * oldest_nonremovable_xid without noticing the option change. During this + * period, a transaction ID wraparound could falsely make this ID appear + * as if it originates from the future w.r.t the transaction ID stored in + * the slot maintained by launcher. + * + * Similarly, if the user enables retain_dead_tuples concurrently with the + * launcher starting the worker, the apply worker may start calculating + * oldest_nonremovable_xid before the launcher notices the enable action. + * Consequently, the launcher may update slot.xmin to a newer value than + * that maintained by the worker. In subsequent cycles, upon integrating + * the worker's oldest_nonremovable_xid, the launcher might detect a + * retreat in the calculated xmin, necessitating additional handling. + * + * XXX To address the above race conditions, we can define + * oldest_nonremovable_xid as FullTransactionID and adds the check to + * disallow retreating the conflict slot's xmin. For now, we kept the + * implementation simple by disallowing change to the retain_dead_tuples, + * but in the future we can change this after some more analysis. + * + * Note that we could restrict only the enabling of retain_dead_tuples to + * avoid the race conditions described above, but we maintain the + * restriction for both enable and disable operations for the sake of + * consistency. */ if (sub->enabled) ereport(ERROR, @@ -1110,6 +1173,9 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, bool update_tuple = false; bool update_failover = false; bool update_two_phase = false; + bool check_pub_rdt = false; + bool retain_dead_tuples; + char *origin; Subscription *sub; Form_pg_subscription form; bits32 supported_opts; @@ -1118,7 +1184,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, rel = table_open(SubscriptionRelationId, RowExclusiveLock); /* Fetch the existing tuple. */ - tup = SearchSysCacheCopy2(SUBSCRIPTIONNAME, MyDatabaseId, + tup = SearchSysCacheCopy2(SUBSCRIPTIONNAME, ObjectIdGetDatum(MyDatabaseId), CStringGetDatum(stmt->subname)); if (!HeapTupleIsValid(tup)) @@ -1137,6 +1203,9 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, sub = GetSubscription(subid, false); + retain_dead_tuples = sub->retaindeadtuples; + origin = sub->origin; + /* * Don't allow non-superuser modification of a subscription with * password_required=false. @@ -1165,7 +1234,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, SUBOPT_DISABLE_ON_ERR | SUBOPT_PASSWORD_REQUIRED | SUBOPT_RUN_AS_OWNER | SUBOPT_FAILOVER | - SUBOPT_ORIGIN); + SUBOPT_RETAIN_DEAD_TUPLES | SUBOPT_ORIGIN); parse_subscription_options(pstate, stmt->options, supported_opts, &opts); @@ -1267,7 +1336,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, IsSet(opts.specified_opts, SUBOPT_SLOT_NAME)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("slot_name and two_phase cannot be altered at the same time"))); + errmsg("\"slot_name\" and \"two_phase\" cannot be altered at the same time"))); /* * Note that workers may still survive even if the @@ -1283,7 +1352,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, if (logicalrep_workers_find(subid, true, true)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("cannot alter two_phase when logical replication worker is still running"), + errmsg("cannot alter \"two_phase\" when logical replication worker is still running"), errhint("Try again after some time."))); /* @@ -1297,7 +1366,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, LookupGXactBySubid(subid)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("cannot disable two_phase when prepared transactions are present"), + errmsg("cannot disable \"two_phase\" when prepared transactions exist"), errhint("Resolve these transactions and try again."))); /* Change system catalog accordingly */ @@ -1325,11 +1394,62 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, replaces[Anum_pg_subscription_subfailover - 1] = true; } + if (IsSet(opts.specified_opts, SUBOPT_RETAIN_DEAD_TUPLES)) + { + values[Anum_pg_subscription_subretaindeadtuples - 1] = + BoolGetDatum(opts.retaindeadtuples); + replaces[Anum_pg_subscription_subretaindeadtuples - 1] = true; + + CheckAlterSubOption(sub, "retain_dead_tuples", false, isTopLevel); + + /* + * Workers may continue running even after the + * subscription has been disabled. + * + * To prevent race conditions (as described in + * CheckAlterSubOption()), ensure that all worker + * processes have already exited before proceeding. + */ + if (logicalrep_workers_find(subid, true, true)) + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot alter retain_dead_tuples when logical replication worker is still running"), + errhint("Try again after some time."))); + + /* + * Remind the user that enabling subscription will prevent + * the accumulation of dead tuples. + */ + if (opts.retaindeadtuples) + CheckSubDeadTupleRetention(true, !sub->enabled, NOTICE); + + /* + * Notify the launcher to manage the replication slot for + * conflict detection. This ensures that replication slot + * is efficiently handled (created, updated, or dropped) + * in response to any configuration changes. + */ + ApplyLauncherWakeupAtCommit(); + + check_pub_rdt = opts.retaindeadtuples; + retain_dead_tuples = opts.retaindeadtuples; + } + if (IsSet(opts.specified_opts, SUBOPT_ORIGIN)) { values[Anum_pg_subscription_suborigin - 1] = CStringGetTextDatum(opts.origin); replaces[Anum_pg_subscription_suborigin - 1] = true; + + /* + * Check if changes from different origins may be received + * from the publisher when the origin is changed to ANY + * and retain_dead_tuples is enabled. + */ + check_pub_rdt = retain_dead_tuples && + pg_strcasecmp(opts.origin, LOGICALREP_ORIGIN_ANY) == 0; + + origin = opts.origin; } update_tuple = true; @@ -1347,6 +1467,15 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot enable subscription that does not have a slot name"))); + /* + * Check track_commit_timestamp only when enabling the + * subscription in case it was disabled after creation. See + * comments atop CheckSubDeadTupleRetention() for details. + */ + if (sub->retaindeadtuples) + CheckSubDeadTupleRetention(opts.enabled, !opts.enabled, + WARNING); + values[Anum_pg_subscription_subenabled - 1] = BoolGetDatum(opts.enabled); replaces[Anum_pg_subscription_subenabled - 1] = true; @@ -1355,6 +1484,14 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, ApplyLauncherWakeupAtCommit(); update_tuple = true; + + /* + * The subscription might be initially created with + * connect=false and retain_dead_tuples=true, meaning the + * remote server's status may not be checked. Ensure this + * check is conducted now. + */ + check_pub_rdt = sub->retaindeadtuples && opts.enabled; break; } @@ -1369,6 +1506,13 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, CStringGetTextDatum(stmt->conninfo); replaces[Anum_pg_subscription_subconninfo - 1] = true; update_tuple = true; + + /* + * Since the remote server configuration might have changed, + * perform a check to ensure it permits enabling + * retain_dead_tuples. + */ + check_pub_rdt = sub->retaindeadtuples; break; case ALTER_SUBSCRIPTION_SET_PUBLICATION: @@ -1539,7 +1683,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, if (!XLogRecPtrIsInvalid(remote_lsn) && opts.lsn < remote_lsn) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X", + errmsg("skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X", LSN_FORMAT_ARGS(opts.lsn), LSN_FORMAT_ARGS(remote_lsn)))); } @@ -1568,14 +1712,15 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, } /* - * Try to acquire the connection necessary for altering the slot, if - * needed. + * Try to acquire the connection necessary either for modifying the slot + * or for checking if the remote server permits enabling + * retain_dead_tuples. * * This has to be at the end because otherwise if there is an error while * doing the database operations we won't be able to rollback altered * slot. */ - if (update_failover || update_two_phase) + if (update_failover || update_two_phase || check_pub_rdt) { bool must_use_password; char *err; @@ -1584,10 +1729,14 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, /* Load the library providing us libpq calls. */ load_file("libpqwalreceiver", false); - /* Try to connect to the publisher. */ + /* + * Try to connect to the publisher, using the new connection string if + * available. + */ must_use_password = sub->passwordrequired && !sub->ownersuperuser; - wrconn = walrcv_connect(sub->conninfo, true, true, must_use_password, - sub->name, &err); + wrconn = walrcv_connect(stmt->conninfo ? stmt->conninfo : sub->conninfo, + true, true, must_use_password, sub->name, + &err); if (!wrconn) ereport(ERROR, (errcode(ERRCODE_CONNECTION_FAILURE), @@ -1596,9 +1745,17 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, PG_TRY(); { - walrcv_alter_slot(wrconn, sub->slotname, - update_failover ? &opts.failover : NULL, - update_two_phase ? &opts.twophase : NULL); + if (retain_dead_tuples) + check_pub_dead_tuple_retention(wrconn); + + check_publications_origin(wrconn, sub->publications, false, + retain_dead_tuples, origin, NULL, 0, + sub->name); + + if (update_failover || update_two_phase) + walrcv_alter_slot(wrconn, sub->slotname, + update_failover ? &opts.failover : NULL, + update_two_phase ? &opts.twophase : NULL); } PG_FINALLY(); { @@ -1645,12 +1802,14 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel) bool must_use_password; /* - * Lock pg_subscription with AccessExclusiveLock to ensure that the - * launcher doesn't restart new worker during dropping the subscription + * The launcher may concurrently start a new worker for this subscription. + * During initialization, the worker checks for subscription validity and + * exits if the subscription has already been dropped. See + * InitializeLogRepWorker. */ - rel = table_open(SubscriptionRelationId, AccessExclusiveLock); + rel = table_open(SubscriptionRelationId, RowExclusiveLock); - tup = SearchSysCache2(SUBSCRIPTIONNAME, MyDatabaseId, + tup = SearchSysCache2(SUBSCRIPTIONNAME, ObjectIdGetDatum(MyDatabaseId), CStringGetDatum(stmt->subname)); if (!HeapTupleIsValid(tup)) @@ -2035,7 +2194,7 @@ AlterSubscriptionOwner(const char *name, Oid newOwnerId) rel = table_open(SubscriptionRelationId, RowExclusiveLock); - tup = SearchSysCacheCopy2(SUBSCRIPTIONNAME, MyDatabaseId, + tup = SearchSysCacheCopy2(SUBSCRIPTIONNAME, ObjectIdGetDatum(MyDatabaseId), CStringGetDatum(name)); if (!HeapTupleIsValid(tup)) @@ -2086,20 +2245,29 @@ AlterSubscriptionOwner_oid(Oid subid, Oid newOwnerId) * Check and log a warning if the publisher has subscribed to the same table, * its partition ancestors (if it's a partition), or its partition children (if * it's a partitioned table), from some other publishers. This check is - * required only if "copy_data = true" and "origin = none" for CREATE - * SUBSCRIPTION and ALTER SUBSCRIPTION ... REFRESH statements to notify the - * user that data having origin might have been copied. + * required in the following scenarios: * - * This check need not be performed on the tables that are already added - * because incremental sync for those tables will happen through WAL and the - * origin of the data can be identified from the WAL records. + * 1) For CREATE SUBSCRIPTION and ALTER SUBSCRIPTION ... REFRESH statements + * with "copy_data = true" and "origin = none": + * - Warn the user that data with an origin might have been copied. + * - This check is skipped for tables already added, as incremental sync via + * WAL allows origin tracking. The list of such tables is in + * subrel_local_oids. * - * subrel_local_oids contains the list of relation oids that are already - * present on the subscriber. + * 2) For CREATE SUBSCRIPTION and ALTER SUBSCRIPTION ... REFRESH statements + * with "retain_dead_tuples = true" and "origin = any", and for ALTER + * SUBSCRIPTION statements that modify retain_dead_tuples or origin, or + * when the publisher's status changes (e.g., due to a connection string + * update): + * - Warn the user that only conflict detection info for local changes on + * the publisher is retained. Data from other origins may lack sufficient + * details for reliable conflict detection. + * - See comments atop worker.c for more details. */ static void check_publications_origin(WalReceiverConn *wrconn, List *publications, - bool copydata, char *origin, Oid *subrel_local_oids, + bool copydata, bool retain_dead_tuples, + char *origin, Oid *subrel_local_oids, int subrel_count, char *subname) { WalRcvExecResult *res; @@ -2108,9 +2276,29 @@ check_publications_origin(WalReceiverConn *wrconn, List *publications, Oid tableRow[1] = {TEXTOID}; List *publist = NIL; int i; + bool check_rdt; + bool check_table_sync; + bool origin_none = origin && + pg_strcasecmp(origin, LOGICALREP_ORIGIN_NONE) == 0; - if (!copydata || !origin || - (pg_strcasecmp(origin, LOGICALREP_ORIGIN_NONE) != 0)) + /* + * Enable retain_dead_tuples checks only when origin is set to 'any', + * since with origin='none' only local changes are replicated to the + * subscriber. + */ + check_rdt = retain_dead_tuples && !origin_none; + + /* + * Enable table synchronization checks only when origin is 'none', to + * ensure that data from other origins is not inadvertently copied. + */ + check_table_sync = copydata && origin_none; + + /* retain_dead_tuples and table sync checks occur separately */ + Assert(!(check_rdt && check_table_sync)); + + /* Return if no checks are required */ + if (!check_rdt && !check_table_sync) return; initStringInfo(&cmd); @@ -2129,16 +2317,23 @@ check_publications_origin(WalReceiverConn *wrconn, List *publications, /* * In case of ALTER SUBSCRIPTION ... REFRESH, subrel_local_oids contains * the list of relation oids that are already present on the subscriber. - * This check should be skipped for these tables. + * This check should be skipped for these tables if checking for table + * sync scenario. However, when handling the retain_dead_tuples scenario, + * ensure all tables are checked, as some existing tables may now include + * changes from other origins due to newly created subscriptions on the + * publisher. */ - for (i = 0; i < subrel_count; i++) + if (check_table_sync) { - Oid relid = subrel_local_oids[i]; - char *schemaname = get_namespace_name(get_rel_namespace(relid)); - char *tablename = get_rel_name(relid); + for (i = 0; i < subrel_count; i++) + { + Oid relid = subrel_local_oids[i]; + char *schemaname = get_namespace_name(get_rel_namespace(relid)); + char *tablename = get_rel_name(relid); - 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, tablename); + } } res = walrcv_exec(wrconn, cmd.data, 1, tableRow); @@ -2173,22 +2368,37 @@ check_publications_origin(WalReceiverConn *wrconn, List *publications, * XXX: For simplicity, we don't check whether the table has any data or * not. If the table doesn't have any data then we don't need to * distinguish between data having origin and data not having origin so we - * can avoid logging a warning in that case. + * can avoid logging a warning for table sync scenario. */ if (publist) { StringInfo pubnames = makeStringInfo(); + StringInfo err_msg = makeStringInfo(); + StringInfo err_hint = makeStringInfo(); /* Prepare the list of publication(s) for warning message. */ GetPublicationsStr(publist, pubnames, false); + + if (check_table_sync) + { + appendStringInfo(err_msg, _("subscription \"%s\" requested copy_data with origin = NONE but might copy data that had a different origin"), + subname); + appendStringInfoString(err_hint, _("Verify that initial data copied from the publisher tables did not come from other origins.")); + } + else + { + appendStringInfo(err_msg, _("subscription \"%s\" enabled retain_dead_tuples but might not reliably detect conflicts for changes from different origins"), + subname); + appendStringInfoString(err_hint, _("Consider using origin = NONE or disabling retain_dead_tuples.")); + } + ereport(WARNING, errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("subscription \"%s\" requested copy_data with origin = NONE but might copy data that had a different origin", - subname), - errdetail_plural("The subscription being created subscribes to a publication (%s) that contains tables that are written to by other subscriptions.", - "The subscription being created subscribes to publications (%s) that contain tables that are written to by other subscriptions.", + errmsg_internal("%s", err_msg->data), + errdetail_plural("The subscription subscribes to a publication (%s) that contains tables that are written to by other subscriptions.", + "The subscription subscribes to publications (%s) that contain tables that are written to by other subscriptions.", list_length(publist), pubnames->data), - errhint("Verify that initial data copied from the publisher tables did not come from other origins.")); + errhint_internal("%s", err_hint->data)); } ExecDropSingleTupleTableSlot(slot); @@ -2196,6 +2406,101 @@ check_publications_origin(WalReceiverConn *wrconn, List *publications, walrcv_clear_result(res); } +/* + * Determine whether the retain_dead_tuples can be enabled based on the + * publisher's status. + * + * This option is disallowed if the publisher is running a version earlier + * than the PG19, or if the publisher is in recovery (i.e., it is a standby + * server). + * + * See comments atop worker.c for a detailed explanation. + */ +static void +check_pub_dead_tuple_retention(WalReceiverConn *wrconn) +{ + WalRcvExecResult *res; + Oid RecoveryRow[1] = {BOOLOID}; + TupleTableSlot *slot; + bool isnull; + bool remote_in_recovery; + + if (walrcv_server_version(wrconn) < 19000) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot enable retain_dead_tuples if the publisher is running a version earlier than PostgreSQL 19")); + + res = walrcv_exec(wrconn, "SELECT pg_is_in_recovery()", 1, RecoveryRow); + + if (res->status != WALRCV_OK_TUPLES) + ereport(ERROR, + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not obtain recovery progress from the publisher: %s", + res->err))); + + slot = MakeSingleTupleTableSlot(res->tupledesc, &TTSOpsMinimalTuple); + if (!tuplestore_gettupleslot(res->tuplestore, true, false, slot)) + elog(ERROR, "failed to fetch tuple for the recovery progress"); + + remote_in_recovery = DatumGetBool(slot_getattr(slot, 1, &isnull)); + + if (remote_in_recovery) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot enable retain_dead_tuples if the publisher is in recovery.")); + + ExecDropSingleTupleTableSlot(slot); + + walrcv_clear_result(res); +} + +/* + * Check if the subscriber's configuration is adequate to enable the + * retain_dead_tuples option. + * + * Issue an ERROR if the wal_level does not support the use of replication + * slots when check_guc is set to true. + * + * Issue a WARNING if track_commit_timestamp is not enabled when check_guc is + * set to true. This is only to highlight the importance of enabling + * track_commit_timestamp instead of catching all the misconfigurations, as + * this setting can be adjusted after subscription creation. Without it, the + * apply worker will simply skip conflict detection. + * + * Issue a WARNING or NOTICE if the subscription is disabled. Do not raise an + * ERROR since users can only modify retain_dead_tuples for disabled + * subscriptions. And as long as the subscription is enabled promptly, it will + * not pose issues. + */ +void +CheckSubDeadTupleRetention(bool check_guc, bool sub_disabled, + int elevel_for_sub_disabled) +{ + Assert(elevel_for_sub_disabled == NOTICE || + elevel_for_sub_disabled == WARNING); + + if (check_guc && wal_level < WAL_LEVEL_REPLICA) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("\"wal_level\" is insufficient to create the replication slot required by retain_dead_tuples"), + errhint("\"wal_level\" must be set to \"replica\" or \"logical\" at server start.")); + + if (check_guc && !track_commit_timestamp) + ereport(WARNING, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("commit timestamp and origin data required for detecting conflicts won't be retained"), + errhint("Consider setting \"%s\" to true.", + "track_commit_timestamp")); + + if (sub_disabled) + ereport(elevel_for_sub_disabled, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("deleted rows to detect conflicts would not be removed until the subscription is enabled"), + (elevel_for_sub_disabled > NOTICE) + ? errhint("Consider setting %s to false.", + "retain_dead_tuples") : 0); +} + /* * Get the list of tables which belong to specified publications on the * publisher connection. diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 10624353b0a06..082a3575d621e 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -395,6 +395,14 @@ static ObjectAddress ATExecAlterConstraint(List **wqueue, Relation rel, static bool ATExecAlterConstraintInternal(List **wqueue, ATAlterConstraint *cmdcon, Relation conrel, Relation tgrel, Relation rel, HeapTuple contuple, bool recurse, LOCKMODE lockmode); +static bool ATExecAlterConstrEnforceability(List **wqueue, ATAlterConstraint *cmdcon, + Relation conrel, Relation tgrel, + Oid fkrelid, Oid pkrelid, + HeapTuple contuple, LOCKMODE lockmode, + Oid ReferencedParentDelTrigger, + Oid ReferencedParentUpdTrigger, + Oid ReferencingParentInsTrigger, + Oid ReferencingParentUpdTrigger); static bool ATExecAlterConstrDeferrability(List **wqueue, ATAlterConstraint *cmdcon, Relation conrel, Relation tgrel, Relation rel, HeapTuple contuple, bool recurse, @@ -405,6 +413,14 @@ static bool ATExecAlterConstrInheritability(List **wqueue, ATAlterConstraint *cm static void AlterConstrTriggerDeferrability(Oid conoid, Relation tgrel, Relation rel, bool deferrable, bool initdeferred, List **otherrelids); +static void AlterConstrEnforceabilityRecurse(List **wqueue, ATAlterConstraint *cmdcon, + Relation conrel, Relation tgrel, + Oid fkrelid, Oid pkrelid, + HeapTuple contuple, LOCKMODE lockmode, + Oid ReferencedParentDelTrigger, + Oid ReferencedParentUpdTrigger, + Oid ReferencingParentInsTrigger, + Oid ReferencingParentUpdTrigger); static void AlterConstrDeferrabilityRecurse(List **wqueue, ATAlterConstraint *cmdcon, Relation conrel, Relation tgrel, Relation rel, HeapTuple contuple, bool recurse, @@ -414,11 +430,14 @@ static void AlterConstrUpdateConstraintEntry(ATAlterConstraint *cmdcon, Relation static ObjectAddress ATExecValidateConstraint(List **wqueue, Relation rel, char *constrName, bool recurse, bool recursing, LOCKMODE lockmode); -static void QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation rel, - HeapTuple contuple, LOCKMODE lockmode); +static void QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation fkrel, + Oid pkrelid, HeapTuple contuple, LOCKMODE lockmode); static void QueueCheckConstraintValidation(List **wqueue, Relation conrel, Relation rel, char *constrName, HeapTuple contuple, bool recurse, bool recursing, LOCKMODE lockmode); +static void QueueNNConstraintValidation(List **wqueue, Relation conrel, Relation rel, + HeapTuple contuple, bool recurse, bool recursing, + LOCKMODE lockmode); static int transformColumnNameList(Oid relId, List *colList, int16 *attnums, Oid *atttypids, Oid *attcollids); static int transformFkeyGetPrimaryKey(Relation pkrel, Oid *indexOid, @@ -482,9 +501,9 @@ static void add_column_collation_dependency(Oid relid, int32 attnum, Oid collid) static ObjectAddress ATExecDropNotNull(Relation rel, const char *colName, bool recurse, LOCKMODE lockmode); static void set_attnotnull(List **wqueue, Relation rel, AttrNumber attnum, - LOCKMODE lockmode); + bool is_valid, bool queue_validation); static ObjectAddress ATExecSetNotNull(List **wqueue, Relation rel, - char *constrname, char *colName, + char *conName, char *colName, bool recurse, bool recursing, LOCKMODE lockmode); static bool NotNullImpliedByRelConstraints(Relation rel, Form_pg_attribute attr); @@ -521,6 +540,7 @@ static ObjectAddress ATExecDropColumn(List **wqueue, Relation rel, const char *c static void ATPrepAddPrimaryKey(List **wqueue, Relation rel, AlterTableCmd *cmd, bool recurse, LOCKMODE lockmode, AlterTableUtilityContext *context); +static void verifyNotNullPKCompatible(HeapTuple tuple, const char *colname); static ObjectAddress ATExecAddIndex(AlteredTableInfo *tab, Relation rel, IndexStmt *stmt, bool is_rebuild, LOCKMODE lockmode); static ObjectAddress ATExecAddStatistics(AlteredTableInfo *tab, Relation rel, @@ -541,8 +561,8 @@ static ObjectAddress ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo * Relation rel, Constraint *fkconstraint, bool recurse, bool recursing, LOCKMODE lockmode); -static void validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums, - int numfksetcols, const int16 *fksetcolsattnums, +static int validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums, + int numfksetcols, int16 *fksetcolsattnums, List *fksetcols); static ObjectAddress addFkConstraint(addFkConstraintSides fkside, char *constraintname, @@ -714,7 +734,7 @@ static ObjectAddress ATExecAttachPartitionIdx(List **wqueue, Relation parentIdx, static void validatePartitionedIndex(Relation partedIdx, Relation partedTbl); static void refuseDupeIndexAttach(Relation parentIdx, Relation partIdx, Relation partitionTbl); -static void verifyPartitionIndexNotNull(IndexInfo *iinfo, Relation partIdx); +static void verifyPartitionIndexNotNull(IndexInfo *iinfo, Relation partition); static List *GetParentedForeignKeyRefs(Relation partition); static void ATDetachCheckNoForeignKeyRefs(Relation partition); static char GetAttributeCompression(Oid atttypid, const char *compression); @@ -1324,7 +1344,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, nncols = AddRelationNotNullConstraints(rel, stmt->nnconstraints, old_notnulls); foreach_int(attrnum, nncols) - set_attnotnull(NULL, rel, attrnum, NoLock); + set_attnotnull(NULL, rel, attrnum, true, false); ObjectAddressSet(address, RelationRelationId, relationId); @@ -2691,8 +2711,7 @@ MergeAttributes(List *columns, const List *supers, char relpersistence, RelationGetRelationName(relation)))); /* If existing rel is temp, it must belong to this session */ - if (relation->rd_rel->relpersistence == RELPERSISTENCE_TEMP && - !relation->rd_islocaltemp) + if (RELATION_IS_OTHER_TEMP(relation)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg(!is_partition @@ -2722,7 +2741,7 @@ MergeAttributes(List *columns, const List *supers, char relpersistence, /* * Request attnotnull on columns that have a not-null constraint - * that's not marked NO INHERIT. + * that's not marked NO INHERIT (even if not valid). */ nnconstrs = RelationGetNotNullConstraints(RelationGetRelid(relation), true, false); @@ -6191,24 +6210,28 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap) { /* * If we are rebuilding the tuples OR if we added any new but not - * verified not-null constraints, check all not-null constraints. This - * is a bit of overkill but it minimizes risk of bugs. + * verified not-null constraints, check all *valid* not-null + * constraints. This is a bit of overkill but it minimizes risk of + * bugs. * - * notnull_attrs does *not* collect attribute numbers for not-null - * constraints over virtual generated columns; instead, they are - * collected in notnull_virtual_attrs. + * notnull_attrs does *not* collect attribute numbers for valid + * not-null constraints over virtual generated columns; instead, they + * are collected in notnull_virtual_attrs for verification elsewhere. */ for (i = 0; i < newTupDesc->natts; i++) { - Form_pg_attribute attr = TupleDescAttr(newTupDesc, i); + CompactAttribute *attr = TupleDescCompactAttr(newTupDesc, i); - if (attr->attnotnull && !attr->attisdropped) + if (attr->attnullability == ATTNULLABLE_VALID && + !attr->attisdropped) { - if (attr->attgenerated != ATTRIBUTE_GENERATED_VIRTUAL) - notnull_attrs = lappend_int(notnull_attrs, attr->attnum); + Form_pg_attribute wholeatt = TupleDescAttr(newTupDesc, i); + + if (wholeatt->attgenerated != ATTRIBUTE_GENERATED_VIRTUAL) + notnull_attrs = lappend_int(notnull_attrs, wholeatt->attnum); else notnull_virtual_attrs = lappend_int(notnull_virtual_attrs, - attr->attnum); + wholeatt->attnum); } } if (notnull_attrs || notnull_virtual_attrs) @@ -7350,7 +7373,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, /* make sure datatype is legal for a column */ CheckAttributeType(NameStr(attribute->attname), attribute->atttypid, attribute->attcollation, list_make1_oid(rel->rd_rel->reltype), - 0); + (attribute->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL ? CHKATYPE_IS_VIRTUAL : 0)); InsertPgAttributeTuples(attrdesc, tupdesc, myrelid, NULL, NULL); @@ -7517,6 +7540,8 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, if (!missingIsNull) { StoreAttrMissingVal(rel, attribute->attnum, missingval); + /* Make the additional catalog change visible */ + CommandCounterIncrement(); has_missing = true; } FreeExecutorState(estate); @@ -7791,18 +7816,23 @@ ATExecDropNotNull(Relation rel, const char *colName, bool recurse, } /* - * Helper to set pg_attribute.attnotnull if it isn't set, and to tell phase 3 - * to verify it. + * set_attnotnull + * Helper to update/validate the pg_attribute status of a not-null + * constraint * - * When called to alter an existing table, 'wqueue' must be given so that we - * can queue a check that existing tuples pass the constraint. When called - * from table creation, 'wqueue' should be passed as NULL. + * pg_attribute.attnotnull is set true, if it isn't already. + * If queue_validation is true, also set up wqueue to validate the constraint. + * wqueue may be given as NULL when validation is not needed (e.g., on table + * creation). */ static void set_attnotnull(List **wqueue, Relation rel, AttrNumber attnum, - LOCKMODE lockmode) + bool is_valid, bool queue_validation) { Form_pg_attribute attr; + CompactAttribute *thisatt; + + Assert(!queue_validation || wqueue); CheckAlterTableIsSafe(rel); @@ -7826,8 +7856,11 @@ set_attnotnull(List **wqueue, Relation rel, AttrNumber attnum, elog(ERROR, "cache lookup failed for attribute %d of relation %u", attnum, RelationGetRelid(rel)); + thisatt = TupleDescCompactAttr(RelationGetDescr(rel), attnum - 1); + thisatt->attnullability = ATTNULLABLE_VALID; + attr = (Form_pg_attribute) GETSTRUCT(tuple); - Assert(!attr->attnotnull); + attr->attnotnull = true; CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); @@ -7835,7 +7868,8 @@ set_attnotnull(List **wqueue, Relation rel, AttrNumber attnum, * If the nullness isn't already proven by validated constraints, have * ALTER TABLE phase 3 test for it. */ - if (wqueue && !NotNullImpliedByRelConstraints(rel, attr)) + if (queue_validation && wqueue && + !NotNullImpliedByRelConstraints(rel, attr)) { AlteredTableInfo *tab; @@ -7848,6 +7882,10 @@ set_attnotnull(List **wqueue, Relation rel, AttrNumber attnum, table_close(attr_rel, RowExclusiveLock); heap_freetuple(tuple); } + else + { + CacheInvalidateRelcache(rel); + } } /* @@ -7933,6 +7971,15 @@ ATExecSetNotNull(List **wqueue, Relation rel, char *conName, char *colName, conForm->conislocal = true; changed = true; } + else if (!conForm->convalidated) + { + /* + * Flip attnotnull and convalidated, and also validate the + * constraint. + */ + return ATExecValidateConstraint(wqueue, rel, NameStr(conForm->conname), + recurse, recursing, lockmode); + } if (changed) { @@ -7995,8 +8042,8 @@ ATExecSetNotNull(List **wqueue, Relation rel, char *conName, char *colName, InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), attnum); - /* Mark pg_attribute.attnotnull for the column */ - set_attnotnull(wqueue, rel, attnum, lockmode); + /* Mark pg_attribute.attnotnull for the column and queue validation */ + set_attnotnull(wqueue, rel, attnum, true, true); /* * Recurse to propagate the constraint to children that don't have one. @@ -8561,7 +8608,7 @@ ATExecSetExpression(AlteredTableInfo *tab, Relation rel, const char *colName, rel->rd_att->constr && rel->rd_att->constr->num_check > 0) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns on tables with check constraints"), + errmsg("ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns in tables with check constraints"), errdetail("Column \"%s\" of relation \"%s\" is a virtual generated column.", colName, RelationGetRelationName(rel)))); @@ -8579,7 +8626,7 @@ ATExecSetExpression(AlteredTableInfo *tab, Relation rel, const char *colName, GetRelationPublications(RelationGetRelid(rel)) != NIL) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns on tables that are part of a publication"), + errmsg("ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns in tables that are part of a publication"), errdetail("Column \"%s\" of relation \"%s\" is a virtual generated column.", colName, RelationGetRelationName(rel)))); @@ -8938,7 +8985,7 @@ ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa memset(repl_null, false, sizeof(repl_null)); memset(repl_repl, false, sizeof(repl_repl)); if (!newtarget_default) - repl_val[Anum_pg_attribute_attstattarget - 1] = newtarget; + repl_val[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(newtarget); else repl_null[Anum_pg_attribute_attstattarget - 1] = true; repl_repl[Anum_pg_attribute_attstattarget - 1] = true; @@ -9391,63 +9438,95 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, } /* - * Prepare to add a primary key on table, by adding not-null constraints + * Prepare to add a primary key on a table, by adding not-null constraints * on all columns. + * + * The not-null constraints for a primary key must cover the whole inheritance + * hierarchy (failing to ensure that leads to funny corner cases). For the + * normal case where we're asked to recurse, this routine checks if the + * not-null constraints exist already, and if not queues a requirement for + * them to be created by phase 2. + * + * For the case where we're asked not to recurse, we verify that a not-null + * constraint exists on each column of each (direct) child table, throwing an + * error if not. Not throwing an error would also work, because a not-null + * constraint would be created anyway, but it'd cause a silent scan of the + * child table to verify absence of nulls. We prefer to let the user know so + * that they can add the constraint manually without having to hold + * AccessExclusiveLock while at it. + * + * However, it's also important that we do not acquire locks on children if + * the not-null constraints already exist on the parent, to avoid risking + * deadlocks during parallel pg_restore of PKs on partitioned tables. */ static void ATPrepAddPrimaryKey(List **wqueue, Relation rel, AlterTableCmd *cmd, bool recurse, LOCKMODE lockmode, AlterTableUtilityContext *context) { - ListCell *lc; Constraint *pkconstr; + List *children = NIL; + bool got_children = false; pkconstr = castNode(Constraint, cmd->def); if (pkconstr->contype != CONSTR_PRIMARY) return; - /* - * If not recursing, we must ensure that all children have a NOT NULL - * constraint on the columns, and error out if not. - */ - if (!recurse) + /* Verify that columns are not-null, or request that they be made so */ + foreach_node(String, column, pkconstr->keys) { - List *children; + AlterTableCmd *newcmd; + Constraint *nnconstr; + HeapTuple tuple; - children = find_inheritance_children(RelationGetRelid(rel), - lockmode); - foreach_oid(childrelid, children) + /* + * First check if a suitable constraint exists. If it does, we don't + * need to request another one. We do need to bail out if it's not + * valid, though. + */ + tuple = findNotNullConstraint(RelationGetRelid(rel), strVal(column)); + if (tuple != NULL) + { + verifyNotNullPKCompatible(tuple, strVal(column)); + + /* All good with this one; don't request another */ + heap_freetuple(tuple); + continue; + } + else if (!recurse) { - foreach(lc, pkconstr->keys) + /* + * No constraint on this column. Asked not to recurse, we won't + * create one here, but verify that all children have one. + */ + if (!got_children) + { + children = find_inheritance_children(RelationGetRelid(rel), + lockmode); + /* only search for children on the first time through */ + got_children = true; + } + + foreach_oid(childrelid, children) { HeapTuple tup; - Form_pg_attribute attrForm; - char *attname = strVal(lfirst(lc)); - tup = SearchSysCacheAttName(childrelid, attname); + tup = findNotNullConstraint(childrelid, strVal(column)); if (!tup) - elog(ERROR, "cache lookup failed for attribute %s of relation %u", - attname, childrelid); - attrForm = (Form_pg_attribute) GETSTRUCT(tup); - if (!attrForm->attnotnull) ereport(ERROR, errmsg("column \"%s\" of table \"%s\" is not marked NOT NULL", - attname, get_rel_name(childrelid))); - ReleaseSysCache(tup); + strVal(column), get_rel_name(childrelid))); + /* verify it's good enough */ + verifyNotNullPKCompatible(tup, strVal(column)); } } - } - /* Insert not-null constraints in the queue for the PK columns */ - foreach(lc, pkconstr->keys) - { - AlterTableCmd *newcmd; - Constraint *nnconstr; - - nnconstr = makeNotNullConstraint(lfirst(lc)); + /* This column is not already not-null, so add it to the queue */ + nnconstr = makeNotNullConstraint(column); newcmd = makeNode(AlterTableCmd); newcmd->subtype = AT_AddConstraint; + /* note we force recurse=true here; see above */ newcmd->recurse = true; newcmd->def = (Node *) nnconstr; @@ -9455,6 +9534,43 @@ ATPrepAddPrimaryKey(List **wqueue, Relation rel, AlterTableCmd *cmd, } } +/* + * Verify whether the given not-null constraint is compatible with a + * primary key. If not, an error is thrown. + */ +static void +verifyNotNullPKCompatible(HeapTuple tuple, const char *colname) +{ + Form_pg_constraint conForm = (Form_pg_constraint) GETSTRUCT(tuple); + + if (conForm->contype != CONSTRAINT_NOTNULL) + elog(ERROR, "constraint %u is not a not-null constraint", conForm->oid); + + /* a NO INHERIT constraint is no good */ + if (conForm->connoinherit) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot create primary key on column \"%s\"", colname), + /*- translator: fourth %s is a constraint characteristic such as NOT VALID */ + errdetail("The constraint \"%s\" on column \"%s\" of table \"%s\", marked %s, is incompatible with a primary key.", + NameStr(conForm->conname), colname, + get_rel_name(conForm->conrelid), "NO INHERIT"), + errhint("You might need to make the existing constraint inheritable using %s.", + "ALTER TABLE ... ALTER CONSTRAINT ... INHERIT")); + + /* an unvalidated constraint is no good */ + if (!conForm->convalidated) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot create primary key on column \"%s\"", colname), + /*- translator: fourth %s is a constraint characteristic such as NOT VALID */ + errdetail("The constraint \"%s\" on column \"%s\" of table \"%s\", marked %s, is incompatible with a primary key.", + NameStr(conForm->conname), colname, + get_rel_name(conForm->conrelid), "NOT VALID"), + errhint("You might need to validate it using %s.", + "ALTER TABLE ... VALIDATE CONSTRAINT")); +} + /* * ALTER TABLE ADD INDEX * @@ -9818,11 +9934,15 @@ ATAddCheckNNConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, constr->conname = ccon->name; /* - * If adding a not-null constraint, set the pg_attribute flag and tell - * phase 3 to verify existing rows, if needed. + * If adding a valid not-null constraint, set the pg_attribute flag + * and tell phase 3 to verify existing rows, if needed. For an + * invalid constraint, just set attnotnull, without queueing + * verification. */ if (constr->contype == CONSTR_NOTNULL) - set_attnotnull(wqueue, rel, ccon->attnum, lockmode); + set_attnotnull(wqueue, rel, ccon->attnum, + !constr->skip_validation, + !constr->skip_validation); ObjectAddressSet(address, ConstraintRelationId, ccon->conoid); } @@ -10019,9 +10139,10 @@ ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, numfkdelsetcols = transformColumnNameList(RelationGetRelid(rel), fkconstraint->fk_del_set_cols, fkdelsetcols, NULL, NULL); - validateFkOnDeleteSetColumns(numfks, fkattnum, - numfkdelsetcols, fkdelsetcols, - fkconstraint->fk_del_set_cols); + numfkdelsetcols = validateFkOnDeleteSetColumns(numfks, fkattnum, + numfkdelsetcols, + fkdelsetcols, + fkconstraint->fk_del_set_cols); /* * If the attribute list for the referenced table was omitted, lookup the @@ -10067,7 +10188,7 @@ ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, if (pk_has_without_overlaps && !with_period) ereport(ERROR, errcode(ERRCODE_INVALID_FOREIGN_KEY), - errmsg("foreign key must use PERIOD when referencing a primary using WITHOUT OVERLAPS")); + errmsg("foreign key must use PERIOD when referencing a primary key using WITHOUT OVERLAPS")); /* * Now we can check permissions. @@ -10208,8 +10329,8 @@ ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, for_overlaps ? errmsg("could not identify an overlaps operator for foreign key") : errmsg("could not identify an equality operator for foreign key"), - errdetail("Could not translate compare type %d for operator family \"%s\", input type %s, access method \"%s\".", - cmptype, get_opfamily_name(opfamily, false), format_type_be(opcintype), get_am_name(amid))); + errdetail("Could not translate compare type %d for operator family \"%s\" of access method \"%s\".", + cmptype, get_opfamily_name(opfamily, false), get_am_name(amid))); /* * There had better be a primary equality operator for the index. @@ -10481,17 +10602,23 @@ ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, * validateFkOnDeleteSetColumns * Verifies that columns used in ON DELETE SET NULL/DEFAULT (...) * column lists are valid. + * + * If there are duplicates in the fksetcolsattnums[] array, this silently + * removes the dups. The new count of numfksetcols is returned. */ -void +static int validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums, - int numfksetcols, const int16 *fksetcolsattnums, + int numfksetcols, int16 *fksetcolsattnums, List *fksetcols) { + int numcolsout = 0; + for (int i = 0; i < numfksetcols; i++) { int16 setcol_attnum = fksetcolsattnums[i]; bool seen = false; + /* Make sure it's in fkattnums[] */ for (int j = 0; j < numfks; j++) { if (fkattnums[j] == setcol_attnum) @@ -10509,7 +10636,21 @@ validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("column \"%s\" referenced in ON DELETE SET action must be part of foreign key", col))); } + + /* Now check for dups */ + seen = false; + for (int j = 0; j < numcolsout; j++) + { + if (fksetcolsattnums[j] == setcol_attnum) + { + seen = true; + break; + } + } + if (!seen) + fksetcolsattnums[numcolsout++] = setcol_attnum; } + return numcolsout; } /* @@ -10570,14 +10711,16 @@ addFkConstraint(addFkConstraintSides fkside, /* * Caller supplies us with a constraint name; however, it may be used in - * this partition, so come up with a different one in that case. + * this partition, so come up with a different one in that case. Unless + * truncation to NAMEDATALEN dictates otherwise, the new name will be the + * supplied name with an underscore and digit(s) appended. */ if (ConstraintNameIsUsed(CONSTRAINT_RELATION, RelationGetRelid(rel), constraintname)) - conname = ChooseConstraintName(RelationGetRelationName(rel), - ChooseForeignKeyConstraintNameAddition(fkconstraint->fk_attrs), - "fkey", + conname = ChooseConstraintName(constraintname, + NULL, + "", RelationGetNamespace(rel), NIL); else conname = constraintname; @@ -10610,7 +10753,7 @@ addFkConstraint(addFkConstraintSides fkside, CONSTRAINT_FOREIGN, fkconstraint->deferrable, fkconstraint->initdeferred, - true, /* Is Enforced */ + fkconstraint->is_enforced, fkconstraint->initially_valid, parentConstr, RelationGetRelid(rel), @@ -10728,21 +10871,23 @@ addFkRecurseReferenced(Constraint *fkconstraint, Relation rel, Oid parentDelTrigger, Oid parentUpdTrigger, bool with_period) { - Oid deleteTriggerOid, - updateTriggerOid; + Oid deleteTriggerOid = InvalidOid, + updateTriggerOid = InvalidOid; Assert(CheckRelationLockedByMe(pkrel, ShareRowExclusiveLock, true)); Assert(CheckRelationLockedByMe(rel, ShareRowExclusiveLock, true)); /* - * Create the action triggers that enforce the constraint. + * Create action triggers to enforce the constraint, or skip them if the + * constraint is NOT ENFORCED. */ - createForeignKeyActionTriggers(RelationGetRelid(rel), - RelationGetRelid(pkrel), - fkconstraint, - parentConstr, indexOid, - parentDelTrigger, parentUpdTrigger, - &deleteTriggerOid, &updateTriggerOid); + if (fkconstraint->is_enforced) + createForeignKeyActionTriggers(RelationGetRelid(rel), + RelationGetRelid(pkrel), + fkconstraint, + parentConstr, indexOid, + parentDelTrigger, parentUpdTrigger, + &deleteTriggerOid, &updateTriggerOid); /* * If the referenced table is partitioned, recurse on ourselves to handle @@ -10863,8 +11008,8 @@ addFkRecurseReferencing(List **wqueue, Constraint *fkconstraint, Relation rel, Oid parentInsTrigger, Oid parentUpdTrigger, bool with_period) { - Oid insertTriggerOid, - updateTriggerOid; + Oid insertTriggerOid = InvalidOid, + updateTriggerOid = InvalidOid; Assert(OidIsValid(parentConstr)); Assert(CheckRelationLockedByMe(rel, ShareRowExclusiveLock, true)); @@ -10876,29 +11021,32 @@ addFkRecurseReferencing(List **wqueue, Constraint *fkconstraint, Relation rel, errmsg("foreign key constraints are not supported on foreign tables"))); /* - * Add the check triggers to it and, if necessary, schedule it to be - * checked in Phase 3. + * Add check triggers if the constraint is ENFORCED, and if needed, + * schedule them to be checked in Phase 3. * * If the relation is partitioned, drill down to do it to its partitions. */ - createForeignKeyCheckTriggers(RelationGetRelid(rel), - RelationGetRelid(pkrel), - fkconstraint, - parentConstr, - indexOid, - parentInsTrigger, parentUpdTrigger, - &insertTriggerOid, &updateTriggerOid); + if (fkconstraint->is_enforced) + createForeignKeyCheckTriggers(RelationGetRelid(rel), + RelationGetRelid(pkrel), + fkconstraint, + parentConstr, + indexOid, + parentInsTrigger, parentUpdTrigger, + &insertTriggerOid, &updateTriggerOid); if (rel->rd_rel->relkind == RELKIND_RELATION) { /* * Tell Phase 3 to check that the constraint is satisfied by existing - * rows. We can skip this during table creation, when requested - * explicitly by specifying NOT VALID in an ADD FOREIGN KEY command, - * and when we're recreating a constraint following a SET DATA TYPE - * operation that did not impugn its validity. + * rows. We can skip this during table creation, when constraint is + * specified as NOT ENFORCED, or when requested explicitly by + * specifying NOT VALID in an ADD FOREIGN KEY command, and when we're + * recreating a constraint following a SET DATA TYPE operation that + * did not impugn its validity. */ - if (wqueue && !old_check_ok && !fkconstraint->skip_validation) + if (wqueue && !old_check_ok && !fkconstraint->skip_validation && + fkconstraint->is_enforced) { NewConstraint *newcon; AlteredTableInfo *tab; @@ -11037,14 +11185,14 @@ CloneForeignKeyConstraints(List **wqueue, Relation parentRel, Assert(parentRel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE); /* - * Clone constraints for which the parent is on the referenced side. + * First, clone constraints where the parent is on the referencing side. */ - CloneFkReferenced(parentRel, partitionRel); + CloneFkReferencing(wqueue, parentRel, partitionRel); /* - * Now clone constraints where the parent is on the referencing side. + * Clone constraints for which the parent is on the referenced side. */ - CloneFkReferencing(wqueue, parentRel, partitionRel); + CloneFkReferenced(parentRel, partitionRel); } /* @@ -11055,8 +11203,6 @@ CloneForeignKeyConstraints(List **wqueue, Relation parentRel, * clone those constraints to the given partition. This is to be called * when the partition is being created or attached. * - * This ignores self-referencing FKs; those are handled by CloneFkReferencing. - * * This recurses to partitions, if the relation being attached is partitioned. * Recursion is done by calling addFkRecurseReferenced. */ @@ -11129,8 +11275,8 @@ CloneFkReferenced(Relation parentRel, Relation partitionRel) AttrNumber confdelsetcols[INDEX_MAX_KEYS]; Constraint *fkconstraint; ObjectAddress address; - Oid deleteTriggerOid, - updateTriggerOid; + Oid deleteTriggerOid = InvalidOid, + updateTriggerOid = InvalidOid; tuple = SearchSysCache1(CONSTROID, ObjectIdGetDatum(constrOid)); if (!HeapTupleIsValid(tuple)) @@ -11147,17 +11293,6 @@ CloneFkReferenced(Relation parentRel, Relation partitionRel) continue; } - /* - * Don't clone self-referencing foreign keys, which can be in the - * partitioned table or in the partition-to-be. - */ - if (constrForm->conrelid == RelationGetRelid(parentRel) || - constrForm->conrelid == RelationGetRelid(partitionRel)) - { - ReleaseSysCache(tuple); - continue; - } - /* We need the same lock level that CreateTrigger will acquire */ fkRel = table_open(constrForm->conrelid, ShareRowExclusiveLock); @@ -11190,8 +11325,9 @@ CloneFkReferenced(Relation parentRel, Relation partitionRel) fkconstraint->fk_del_set_cols = NIL; fkconstraint->old_conpfeqop = NIL; fkconstraint->old_pktable_oid = InvalidOid; + fkconstraint->is_enforced = constrForm->conenforced; fkconstraint->skip_validation = false; - fkconstraint->initially_valid = true; + fkconstraint->initially_valid = constrForm->convalidated; /* set up colnames that are used to generate the constraint name */ for (int i = 0; i < numfks; i++) @@ -11219,9 +11355,10 @@ CloneFkReferenced(Relation parentRel, Relation partitionRel) * parent OIDs for similar triggers that will be created on the * partition in addFkRecurseReferenced(). */ - GetForeignKeyActionTriggers(trigrel, constrOid, - constrForm->confrelid, constrForm->conrelid, - &deleteTriggerOid, &updateTriggerOid); + if (constrForm->conenforced) + GetForeignKeyActionTriggers(trigrel, constrOid, + constrForm->confrelid, constrForm->conrelid, + &deleteTriggerOid, &updateTriggerOid); /* Add this constraint ... */ address = addFkConstraint(addFkReferencedSide, @@ -11354,8 +11491,8 @@ CloneFkReferencing(List **wqueue, Relation parentRel, Relation partRel) Oid indexOid; ObjectAddress address; ListCell *lc; - Oid insertTriggerOid, - updateTriggerOid; + Oid insertTriggerOid = InvalidOid, + updateTriggerOid = InvalidOid; bool with_period; tuple = SearchSysCache1(CONSTROID, ObjectIdGetDatum(parentConstrOid)); @@ -11387,17 +11524,18 @@ CloneFkReferencing(List **wqueue, Relation parentRel, Relation partRel) mapped_conkey[i] = attmap->attnums[conkey[i] - 1]; /* - * Get the "check" triggers belonging to the constraint to pass as - * parent OIDs for similar triggers that will be created on the - * partition in addFkRecurseReferencing(). They are also passed to - * tryAttachPartitionForeignKey() below to simply assign as parents to - * the partition's existing "check" triggers, that is, if the - * corresponding constraints is deemed attachable to the parent - * constraint. + * Get the "check" triggers belonging to the constraint, if it is + * ENFORCED, to pass as parent OIDs for similar triggers that will be + * created on the partition in addFkRecurseReferencing(). They are + * also passed to tryAttachPartitionForeignKey() below to simply + * assign as parents to the partition's existing "check" triggers, + * that is, if the corresponding constraints is deemed attachable to + * the parent constraint. */ - GetForeignKeyCheckTriggers(trigrel, constrForm->oid, - constrForm->confrelid, constrForm->conrelid, - &insertTriggerOid, &updateTriggerOid); + if (constrForm->conenforced) + GetForeignKeyCheckTriggers(trigrel, constrForm->oid, + constrForm->confrelid, constrForm->conrelid, + &insertTriggerOid, &updateTriggerOid); /* * Before creating a new constraint, see whether any existing FKs are @@ -11450,6 +11588,7 @@ CloneFkReferencing(List **wqueue, Relation parentRel, Relation partRel) fkconstraint->fk_del_set_cols = NIL; fkconstraint->old_conpfeqop = NIL; fkconstraint->old_pktable_oid = InvalidOid; + fkconstraint->is_enforced = constrForm->conenforced; fkconstraint->skip_validation = false; fkconstraint->initially_valid = constrForm->convalidated; for (int i = 0; i < numfks; i++) @@ -11564,6 +11703,23 @@ tryAttachPartitionForeignKey(List **wqueue, if (!HeapTupleIsValid(partcontup)) elog(ERROR, "cache lookup failed for constraint %u", fk->conoid); partConstr = (Form_pg_constraint) GETSTRUCT(partcontup); + + /* + * An error should be raised if the constraint enforceability is + * different. Returning false without raising an error, as we do for other + * attributes, could lead to a duplicate constraint with the same + * enforceability as the parent. While this may be acceptable, it may not + * be ideal. Therefore, it's better to raise an error and allow the user + * to correct the enforceability before proceeding. + */ + if (partConstr->conenforced != parentConstr->conenforced) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("constraint \"%s\" enforceability conflicts with constraint \"%s\" on relation \"%s\"", + NameStr(parentConstr->conname), + NameStr(partConstr->conname), + RelationGetRelationName(partition)))); + if (OidIsValid(partConstr->conparentid) || partConstr->condeferrable != parentConstr->condeferrable || partConstr->condeferred != parentConstr->condeferred || @@ -11610,8 +11766,7 @@ AttachPartitionForeignKey(List **wqueue, bool queueValidation; Oid partConstrFrelid; Oid partConstrRelid; - Oid insertTriggerOid, - updateTriggerOid; + bool parentConstrIsEnforced; /* Fetch the parent constraint tuple */ parentConstrTup = SearchSysCache1(CONSTROID, @@ -11619,6 +11774,7 @@ AttachPartitionForeignKey(List **wqueue, if (!HeapTupleIsValid(parentConstrTup)) elog(ERROR, "cache lookup failed for constraint %u", parentConstrOid); parentConstr = (Form_pg_constraint) GETSTRUCT(parentConstrTup); + parentConstrIsEnforced = parentConstr->conenforced; /* Fetch the child constraint tuple */ partcontup = SearchSysCache1(CONSTROID, @@ -11668,17 +11824,24 @@ AttachPartitionForeignKey(List **wqueue, /* * Like the constraint, attach partition's "check" triggers to the - * corresponding parent triggers. + * corresponding parent triggers if the constraint is ENFORCED. NOT + * ENFORCED constraints do not have these triggers. */ - GetForeignKeyCheckTriggers(trigrel, - partConstrOid, partConstrFrelid, partConstrRelid, - &insertTriggerOid, &updateTriggerOid); - Assert(OidIsValid(insertTriggerOid) && OidIsValid(parentInsTrigger)); - TriggerSetParentTrigger(trigrel, insertTriggerOid, parentInsTrigger, - RelationGetRelid(partition)); - Assert(OidIsValid(updateTriggerOid) && OidIsValid(parentUpdTrigger)); - TriggerSetParentTrigger(trigrel, updateTriggerOid, parentUpdTrigger, - RelationGetRelid(partition)); + if (parentConstrIsEnforced) + { + Oid insertTriggerOid, + updateTriggerOid; + + GetForeignKeyCheckTriggers(trigrel, + partConstrOid, partConstrFrelid, partConstrRelid, + &insertTriggerOid, &updateTriggerOid); + Assert(OidIsValid(insertTriggerOid) && OidIsValid(parentInsTrigger)); + TriggerSetParentTrigger(trigrel, insertTriggerOid, parentInsTrigger, + RelationGetRelid(partition)); + Assert(OidIsValid(updateTriggerOid) && OidIsValid(parentUpdTrigger)); + TriggerSetParentTrigger(trigrel, updateTriggerOid, parentUpdTrigger, + RelationGetRelid(partition)); + } /* * We updated this pg_constraint row above to set its parent; validating @@ -11694,6 +11857,7 @@ AttachPartitionForeignKey(List **wqueue, if (queueValidation) { Relation conrel; + Oid confrelid; conrel = table_open(ConstraintRelationId, RowExclusiveLock); @@ -11701,9 +11865,11 @@ AttachPartitionForeignKey(List **wqueue, if (!HeapTupleIsValid(partcontup)) elog(ERROR, "cache lookup failed for constraint %u", partConstrOid); + confrelid = ((Form_pg_constraint) GETSTRUCT(partcontup))->confrelid; + /* Use the same lock as for AT_ValidateConstraint */ - QueueFKConstraintValidation(wqueue, conrel, partition, partcontup, - ShareUpdateExclusiveLock); + QueueFKConstraintValidation(wqueue, conrel, partition, confrelid, + partcontup, ShareUpdateExclusiveLock); ReleaseSysCache(partcontup); table_close(conrel, RowExclusiveLock); } @@ -11792,6 +11958,10 @@ RemoveInheritedConstraint(Relation conrel, Relation trigrel, Oid conoid, * * The subroutine for tryAttachPartitionForeignKey handles the deletion of * action triggers for the foreign key constraint. + * + * If valid confrelid and conrelid values are not provided, the respective + * trigger check will be skipped, and the trigger will be considered for + * removal. */ static void DropForeignKeyConstraintTriggers(Relation trigrel, Oid conoid, Oid confrelid, @@ -11812,11 +11982,28 @@ DropForeignKeyConstraintTriggers(Relation trigrel, Oid conoid, Oid confrelid, Form_pg_trigger trgform = (Form_pg_trigger) GETSTRUCT(trigtup); ObjectAddress trigger; - if (trgform->tgconstrrelid != conrelid) + /* Invalid if trigger is not for a referential integrity constraint */ + if (!OidIsValid(trgform->tgconstrrelid)) continue; - if (trgform->tgrelid != confrelid) + if (OidIsValid(conrelid) && trgform->tgconstrrelid != conrelid) + continue; + if (OidIsValid(confrelid) && trgform->tgrelid != confrelid) continue; + /* We should be dropping trigger related to foreign key constraint */ + Assert(trgform->tgfoid == F_RI_FKEY_CHECK_INS || + trgform->tgfoid == F_RI_FKEY_CHECK_UPD || + trgform->tgfoid == F_RI_FKEY_CASCADE_DEL || + trgform->tgfoid == F_RI_FKEY_CASCADE_UPD || + trgform->tgfoid == F_RI_FKEY_RESTRICT_DEL || + trgform->tgfoid == F_RI_FKEY_RESTRICT_UPD || + trgform->tgfoid == F_RI_FKEY_SETNULL_DEL || + trgform->tgfoid == F_RI_FKEY_SETNULL_UPD || + trgform->tgfoid == F_RI_FKEY_SETDEFAULT_DEL || + trgform->tgfoid == F_RI_FKEY_SETDEFAULT_UPD || + trgform->tgfoid == F_RI_FKEY_NOACTION_DEL || + trgform->tgfoid == F_RI_FKEY_NOACTION_UPD); + /* * The constraint is originally set up to contain this trigger as an * implementation object, so there's a dependency record that links @@ -12028,6 +12215,11 @@ ATExecAlterConstraint(List **wqueue, Relation rel, ATAlterConstraint *cmdcon, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("constraint \"%s\" of relation \"%s\" is not a foreign key constraint", cmdcon->conname, RelationGetRelationName(rel)))); + if (cmdcon->alterEnforceability && currcon->contype != CONSTRAINT_FOREIGN) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot alter enforceability of constraint \"%s\" of relation \"%s\"", + cmdcon->conname, RelationGetRelationName(rel)))); if (cmdcon->alterInheritability && currcon->contype != CONSTRAINT_NOTNULL) ereport(ERROR, @@ -12107,7 +12299,7 @@ ATExecAlterConstraint(List **wqueue, Relation rel, ATAlterConstraint *cmdcon, /* * A subroutine of ATExecAlterConstraint that calls the respective routines for - * altering constraint attributes. + * altering constraint's enforceability, deferrability or inheritability. */ static bool ATExecAlterConstraintInternal(List **wqueue, ATAlterConstraint *cmdcon, @@ -12115,16 +12307,35 @@ ATExecAlterConstraintInternal(List **wqueue, ATAlterConstraint *cmdcon, HeapTuple contuple, bool recurse, LOCKMODE lockmode) { + Form_pg_constraint currcon; bool changed = false; List *otherrelids = NIL; + currcon = (Form_pg_constraint) GETSTRUCT(contuple); + /* - * Do the catalog work for the deferrability change, recurse if necessary. - */ - if (cmdcon->alterDeferrability && - ATExecAlterConstrDeferrability(wqueue, cmdcon, conrel, tgrel, rel, - contuple, recurse, &otherrelids, - lockmode)) + * Do the catalog work for the enforceability or deferrability change, + * recurse if necessary. + * + * Note that even if deferrability is requested to be altered along with + * enforceability, we don't need to explicitly update multiple entries in + * pg_trigger related to deferrability. + * + * Modifying enforceability involves either creating or dropping the + * trigger, during which the deferrability setting will be adjusted + * automatically. + */ + if (cmdcon->alterEnforceability && + ATExecAlterConstrEnforceability(wqueue, cmdcon, conrel, tgrel, + currcon->conrelid, currcon->confrelid, + contuple, lockmode, InvalidOid, + InvalidOid, InvalidOid, InvalidOid)) + changed = true; + + else if (cmdcon->alterDeferrability && + ATExecAlterConstrDeferrability(wqueue, cmdcon, conrel, tgrel, rel, + contuple, recurse, &otherrelids, + lockmode)) { /* * AlterConstrUpdateConstraintEntry already invalidated relcache for @@ -12149,6 +12360,154 @@ ATExecAlterConstraintInternal(List **wqueue, ATAlterConstraint *cmdcon, return changed; } +/* + * Returns true if the constraint's enforceability is altered. + * + * Depending on whether the constraint is being set to ENFORCED or NOT + * ENFORCED, it creates or drops the trigger accordingly. + * + * Note that we must recurse even when trying to change a constraint to not + * enforced if it is already not enforced, in case descendant constraints + * might be enforced and need to be changed to not enforced. Conversely, we + * should do nothing if a constraint is being set to enforced and is already + * enforced, as descendant constraints cannot be different in that case. + */ +static bool +ATExecAlterConstrEnforceability(List **wqueue, ATAlterConstraint *cmdcon, + Relation conrel, Relation tgrel, + Oid fkrelid, Oid pkrelid, + HeapTuple contuple, LOCKMODE lockmode, + Oid ReferencedParentDelTrigger, + Oid ReferencedParentUpdTrigger, + Oid ReferencingParentInsTrigger, + Oid ReferencingParentUpdTrigger) +{ + Form_pg_constraint currcon; + Oid conoid; + Relation rel; + bool changed = false; + + /* Since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + + Assert(cmdcon->alterEnforceability); + + currcon = (Form_pg_constraint) GETSTRUCT(contuple); + conoid = currcon->oid; + + /* Should be foreign key constraint */ + Assert(currcon->contype == CONSTRAINT_FOREIGN); + + rel = table_open(currcon->conrelid, lockmode); + + if (currcon->conenforced != cmdcon->is_enforced) + { + AlterConstrUpdateConstraintEntry(cmdcon, conrel, contuple); + changed = true; + } + + /* Drop triggers */ + if (!cmdcon->is_enforced) + { + /* + * When setting a constraint to NOT ENFORCED, the constraint triggers + * need to be dropped. Therefore, we must process the child relations + * first, followed by the parent, to account for dependencies. + */ + if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE || + get_rel_relkind(currcon->confrelid) == RELKIND_PARTITIONED_TABLE) + AlterConstrEnforceabilityRecurse(wqueue, cmdcon, conrel, tgrel, + fkrelid, pkrelid, contuple, + lockmode, InvalidOid, InvalidOid, + InvalidOid, InvalidOid); + + /* Drop all the triggers */ + DropForeignKeyConstraintTriggers(tgrel, conoid, InvalidOid, InvalidOid); + } + else if (changed) /* Create triggers */ + { + Oid ReferencedDelTriggerOid = InvalidOid, + ReferencedUpdTriggerOid = InvalidOid, + ReferencingInsTriggerOid = InvalidOid, + ReferencingUpdTriggerOid = InvalidOid; + + /* Prepare the minimal information required for trigger creation. */ + Constraint *fkconstraint = makeNode(Constraint); + + fkconstraint->conname = pstrdup(NameStr(currcon->conname)); + fkconstraint->fk_matchtype = currcon->confmatchtype; + fkconstraint->fk_upd_action = currcon->confupdtype; + fkconstraint->fk_del_action = currcon->confdeltype; + + /* Create referenced triggers */ + if (currcon->conrelid == fkrelid) + createForeignKeyActionTriggers(currcon->conrelid, + currcon->confrelid, + fkconstraint, + conoid, + currcon->conindid, + ReferencedParentDelTrigger, + ReferencedParentUpdTrigger, + &ReferencedDelTriggerOid, + &ReferencedUpdTriggerOid); + + /* Create referencing triggers */ + if (currcon->confrelid == pkrelid) + createForeignKeyCheckTriggers(currcon->conrelid, + pkrelid, + fkconstraint, + conoid, + currcon->conindid, + ReferencingParentInsTrigger, + ReferencingParentUpdTrigger, + &ReferencingInsTriggerOid, + &ReferencingUpdTriggerOid); + + /* + * Tell Phase 3 to check that the constraint is satisfied by existing + * rows. Only applies to leaf partitions, and (for constraints that + * reference a partitioned table) only if this is not one of the + * pg_constraint rows that exist solely to support action triggers. + */ + if (rel->rd_rel->relkind == RELKIND_RELATION && + currcon->confrelid == pkrelid) + { + AlteredTableInfo *tab; + NewConstraint *newcon; + + newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon->name = fkconstraint->conname; + newcon->contype = CONSTR_FOREIGN; + newcon->refrelid = currcon->confrelid; + newcon->refindid = currcon->conindid; + newcon->conid = currcon->oid; + newcon->qual = (Node *) fkconstraint; + + /* Find or create work queue entry for this table */ + tab = ATGetQueueEntry(wqueue, rel); + tab->constraints = lappend(tab->constraints, newcon); + } + + /* + * If the table at either end of the constraint is partitioned, we + * need to recurse and create triggers for each constraint that is a + * child of this one. + */ + if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE || + get_rel_relkind(currcon->confrelid) == RELKIND_PARTITIONED_TABLE) + AlterConstrEnforceabilityRecurse(wqueue, cmdcon, conrel, tgrel, + fkrelid, pkrelid, contuple, + lockmode, ReferencedDelTriggerOid, + ReferencedUpdTriggerOid, + ReferencingInsTriggerOid, + ReferencingUpdTriggerOid); + } + + table_close(rel, NoLock); + + return changed; +} + /* * Returns true if the constraint's deferrability is altered. * @@ -12353,6 +12712,55 @@ AlterConstrTriggerDeferrability(Oid conoid, Relation tgrel, Relation rel, systable_endscan(tgscan); } +/* + * Invokes ATExecAlterConstrEnforceability for each constraint that is a child of + * the specified constraint. + * + * Note that this doesn't handle recursion the normal way, viz. by scanning the + * list of child relations and recursing; instead it uses the conparentid + * relationships. This may need to be reconsidered. + * + * The arguments to this function have the same meaning as the arguments to + * ATExecAlterConstrEnforceability. + */ +static void +AlterConstrEnforceabilityRecurse(List **wqueue, ATAlterConstraint *cmdcon, + Relation conrel, Relation tgrel, + Oid fkrelid, Oid pkrelid, + HeapTuple contuple, LOCKMODE lockmode, + Oid ReferencedParentDelTrigger, + Oid ReferencedParentUpdTrigger, + Oid ReferencingParentInsTrigger, + Oid ReferencingParentUpdTrigger) +{ + Form_pg_constraint currcon; + Oid conoid; + ScanKeyData pkey; + SysScanDesc pscan; + HeapTuple childtup; + + currcon = (Form_pg_constraint) GETSTRUCT(contuple); + conoid = currcon->oid; + + ScanKeyInit(&pkey, + Anum_pg_constraint_conparentid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(conoid)); + + pscan = systable_beginscan(conrel, ConstraintParentIndexId, + true, NULL, 1, &pkey); + + while (HeapTupleIsValid(childtup = systable_getnext(pscan))) + ATExecAlterConstrEnforceability(wqueue, cmdcon, conrel, tgrel, fkrelid, + pkrelid, childtup, lockmode, + ReferencedParentDelTrigger, + ReferencedParentUpdTrigger, + ReferencingParentInsTrigger, + ReferencingParentUpdTrigger); + + systable_endscan(pscan); +} + /* * Invokes ATExecAlterConstrDeferrability for each constraint that is a child of * the specified constraint. @@ -12413,11 +12821,25 @@ AlterConstrUpdateConstraintEntry(ATAlterConstraint *cmdcon, Relation conrel, HeapTuple copyTuple; Form_pg_constraint copy_con; - Assert(cmdcon->alterDeferrability || cmdcon->alterInheritability); + Assert(cmdcon->alterEnforceability || cmdcon->alterDeferrability || + cmdcon->alterInheritability); copyTuple = heap_copytuple(contuple); copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); + if (cmdcon->alterEnforceability) + { + copy_con->conenforced = cmdcon->is_enforced; + + /* + * NB: The convalidated status is irrelevant when the constraint is + * set to NOT ENFORCED, but for consistency, it should still be set + * appropriately. Similarly, if the constraint is later changed to + * ENFORCED, validation will be performed during phase 3, so it makes + * sense to mark it as valid in that case. + */ + copy_con->convalidated = cmdcon->is_enforced; + } if (cmdcon->alterDeferrability) { copy_con->condeferrable = cmdcon->deferrable; @@ -12486,11 +12908,13 @@ ATExecValidateConstraint(List **wqueue, Relation rel, char *constrName, con = (Form_pg_constraint) GETSTRUCT(tuple); if (con->contype != CONSTRAINT_FOREIGN && - con->contype != CONSTRAINT_CHECK) + con->contype != CONSTRAINT_CHECK && + con->contype != CONSTRAINT_NOTNULL) ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint", - constrName, RelationGetRelationName(rel)))); + errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot validate constraint \"%s\" of relation \"%s\"", + constrName, RelationGetRelationName(rel)), + errdetail("This operation is not supported for this type of constraint.")); if (!con->conenforced) ereport(ERROR, @@ -12501,13 +12925,19 @@ ATExecValidateConstraint(List **wqueue, Relation rel, char *constrName, { if (con->contype == CONSTRAINT_FOREIGN) { - QueueFKConstraintValidation(wqueue, conrel, rel, tuple, lockmode); + QueueFKConstraintValidation(wqueue, conrel, rel, con->confrelid, + tuple, lockmode); } else if (con->contype == CONSTRAINT_CHECK) { QueueCheckConstraintValidation(wqueue, conrel, rel, constrName, tuple, recurse, recursing, lockmode); } + else if (con->contype == CONSTRAINT_NOTNULL) + { + QueueNNConstraintValidation(wqueue, conrel, rel, + tuple, recurse, recursing, lockmode); + } ObjectAddressSet(address, ConstraintRelationId, con->oid); } @@ -12529,8 +12959,8 @@ ATExecValidateConstraint(List **wqueue, Relation rel, char *constrName, * for the specified relation and all its children. */ static void -QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation rel, - HeapTuple contuple, LOCKMODE lockmode) +QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation fkrel, + Oid pkrelid, HeapTuple contuple, LOCKMODE lockmode) { Form_pg_constraint con; AlteredTableInfo *tab; @@ -12541,7 +12971,17 @@ QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation rel, Assert(con->contype == CONSTRAINT_FOREIGN); Assert(!con->convalidated); - if (rel->rd_rel->relkind == RELKIND_RELATION) + /* + * Add the validation to phase 3's queue; not needed for partitioned + * tables themselves, only for their partitions. + * + * When the referenced table (pkrelid) is partitioned, the referencing + * table (fkrel) has one pg_constraint row pointing to each partition + * thereof. These rows are there only to support action triggers and no + * table scan is needed, therefore skip this for them as well. + */ + if (fkrel->rd_rel->relkind == RELKIND_RELATION && + con->confrelid == pkrelid) { NewConstraint *newcon; Constraint *fkconstraint; @@ -12560,15 +13000,16 @@ QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation rel, newcon->qual = (Node *) fkconstraint; /* Find or create work queue entry for this table */ - tab = ATGetQueueEntry(wqueue, rel); + tab = ATGetQueueEntry(wqueue, fkrel); tab->constraints = lappend(tab->constraints, newcon); } /* * If the table at either end of the constraint is partitioned, we need to - * recurse and handle every constraint that is a child of this constraint. + * recurse and handle every unvalidate constraint that is a child of this + * constraint. */ - if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE || + if (fkrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE || get_rel_relkind(con->confrelid) == RELKIND_PARTITIONED_TABLE) { ScanKeyData pkey; @@ -12600,8 +13041,12 @@ QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation rel, childrel = table_open(childcon->conrelid, lockmode); - QueueFKConstraintValidation(wqueue, conrel, childrel, childtup, - lockmode); + /* + * NB: Note that pkrelid should be passed as-is during recursion, + * as it is required to identify the root referenced table. + */ + QueueFKConstraintValidation(wqueue, conrel, childrel, pkrelid, + childtup, lockmode); table_close(childrel, NoLock); } @@ -12609,7 +13054,11 @@ QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation rel, } /* - * Now update the catalog, while we have the door open. + * Now mark the pg_constraint row as validated (even if we didn't check, + * notably the ones for partitions on the referenced side). + * + * We rely on transaction abort to roll back this change if phase 3 + * ultimately finds violating rows. This is a bit ugly. */ copyTuple = heap_copytuple(contuple); copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); @@ -12724,6 +13173,109 @@ QueueCheckConstraintValidation(List **wqueue, Relation conrel, Relation rel, heap_freetuple(copyTuple); } +/* + * QueueNNConstraintValidation + * + * Add an entry to the wqueue to validate the given not-null constraint in + * Phase 3 and update the convalidated field in the pg_constraint catalog for + * the specified relation and all its inheriting children. + */ +static void +QueueNNConstraintValidation(List **wqueue, Relation conrel, Relation rel, + HeapTuple contuple, bool recurse, bool recursing, + LOCKMODE lockmode) +{ + Form_pg_constraint con; + AlteredTableInfo *tab; + HeapTuple copyTuple; + Form_pg_constraint copy_con; + List *children = NIL; + AttrNumber attnum; + char *colname; + + con = (Form_pg_constraint) GETSTRUCT(contuple); + Assert(con->contype == CONSTRAINT_NOTNULL); + + attnum = extractNotNullColumn(contuple); + + /* + * If we're recursing, we've already done this for parent, so skip it. + * Also, if the constraint is a NO INHERIT constraint, we shouldn't try to + * look for it in the children. + * + * We recurse before validating on the parent, to reduce risk of + * deadlocks. + */ + if (!recursing && !con->connoinherit) + children = find_all_inheritors(RelationGetRelid(rel), lockmode, NULL); + + colname = get_attname(RelationGetRelid(rel), attnum, false); + foreach_oid(childoid, children) + { + Relation childrel; + HeapTuple contup; + Form_pg_constraint childcon; + char *conname; + + if (childoid == RelationGetRelid(rel)) + continue; + + /* + * If we are told not to recurse, there had better not be any child + * tables, because we can't mark the constraint on the parent valid + * unless it is valid for all child tables. + */ + if (!recurse) + ereport(ERROR, + errcode(ERRCODE_INVALID_TABLE_DEFINITION), + errmsg("constraint must be validated on child tables too")); + + /* + * The column on child might have a different attnum, so search by + * column name. + */ + contup = findNotNullConstraint(childoid, colname); + if (!contup) + elog(ERROR, "cache lookup failed for not-null constraint on column \"%s\" of relation \"%s\"", + colname, get_rel_name(childoid)); + childcon = (Form_pg_constraint) GETSTRUCT(contup); + if (childcon->convalidated) + continue; + + /* find_all_inheritors already got lock */ + childrel = table_open(childoid, NoLock); + conname = pstrdup(NameStr(childcon->conname)); + + /* XXX improve ATExecValidateConstraint API to avoid double search */ + ATExecValidateConstraint(wqueue, childrel, conname, + false, true, lockmode); + table_close(childrel, NoLock); + } + + /* Set attnotnull appropriately without queueing another validation */ + set_attnotnull(NULL, rel, attnum, true, false); + + tab = ATGetQueueEntry(wqueue, rel); + tab->verify_new_notnull = true; + + /* + * Invalidate relcache so that others see the new validated constraint. + */ + CacheInvalidateRelcache(rel); + + /* + * Now update the catalogs, while we have the door open. + */ + copyTuple = heap_copytuple(contuple); + copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); + copy_con->convalidated = true; + CatalogTupleUpdate(conrel, ©Tuple->t_self, copyTuple); + + InvokeObjectPostAlterHook(ConstraintRelationId, con->oid, 0); + + heap_freetuple(copyTuple); +} + /* * transformColumnNameList - transform list of column names * @@ -13874,7 +14426,7 @@ ATPrepAlterColumnType(List **wqueue, /* make sure datatype is legal for a column */ CheckAttributeType(colName, targettype, targetcollid, list_make1_oid(rel->rd_rel->reltype), - 0); + (attTup->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL ? CHKATYPE_IS_VIRTUAL : 0)); if (attTup->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL) { @@ -13932,6 +14484,9 @@ ATPrepAlterColumnType(List **wqueue, /* Fix collations after all else */ assign_expr_collations(pstate, transform); + /* Expand virtual generated columns in the expr. */ + transform = expand_generated_columns_in_expr(transform, rel, 1); + /* Plan the expr now so we can accurately assess the need to rewrite. */ transform = (Node *) expression_planner((Expr *) transform); @@ -14859,9 +15414,12 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) /* * Re-parse the index and constraint definitions, and attach them to the * appropriate work queue entries. We do this before dropping because in - * the case of a FOREIGN KEY constraint, we might not yet have exclusive - * lock on the table the constraint is attached to, and we need to get - * that before reparsing/dropping. + * the case of a constraint on another table, we might not yet have + * exclusive lock on the table the constraint is attached to, and we need + * to get that before reparsing/dropping. (That's possible at least for + * FOREIGN KEY, CHECK, and EXCLUSION constraints; in non-FK cases it + * requires a dependency on the target table's composite type in the other + * table's constraint expressions.) * * We can't rely on the output of deparsing to tell us which relation to * operate on, because concurrent activity might have made the name @@ -14877,7 +15435,6 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) Form_pg_constraint con; Oid relid; Oid confrelid; - char contype; bool conislocal; tup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(oldId)); @@ -14894,7 +15451,6 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) elog(ERROR, "could not identify relation associated with constraint %u", oldId); } confrelid = con->confrelid; - contype = con->contype; conislocal = con->conislocal; ReleaseSysCache(tup); @@ -14912,12 +15468,12 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) continue; /* - * When rebuilding an FK constraint that references the table we're - * modifying, we might not yet have any lock on the FK's table, so get - * one now. We'll need AccessExclusiveLock for the DROP CONSTRAINT - * step, so there's no value in asking for anything weaker. + * When rebuilding another table's constraint that references the + * table we're modifying, we might not yet have any lock on the other + * table, so get one now. We'll need AccessExclusiveLock for the DROP + * CONSTRAINT step, so there's no value in asking for anything weaker. */ - if (relid != tab->relid && contype == CONSTRAINT_FOREIGN) + if (relid != tab->relid) LockRelationOid(relid, AccessExclusiveLock); ATPostAlterTypeParse(oldId, relid, confrelid, @@ -14931,6 +15487,14 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) Oid relid; relid = IndexGetRelation(oldId, false); + + /* + * As above, make sure we have lock on the index's table if it's not + * the same table. + */ + if (relid != tab->relid) + LockRelationOid(relid, AccessExclusiveLock); + ATPostAlterTypeParse(oldId, relid, InvalidOid, (char *) lfirst(def_item), wqueue, lockmode, tab->rewrite); @@ -14947,6 +15511,20 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) Oid relid; relid = StatisticsGetRelation(oldId, false); + + /* + * As above, make sure we have lock on the statistics object's table + * if it's not the same table. However, we take + * ShareUpdateExclusiveLock here, aligning with the lock level used in + * CreateStatistics and RemoveStatisticsById. + * + * CAUTION: this should be done after all cases that grab + * AccessExclusiveLock, else we risk causing deadlock due to needing + * to promote our table lock. + */ + if (relid != tab->relid) + LockRelationOid(relid, ShareUpdateExclusiveLock); + ATPostAlterTypeParse(oldId, relid, InvalidOid, (char *) lfirst(def_item), wqueue, lockmode, tab->rewrite); @@ -15170,7 +15748,7 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd, { AlterDomainStmt *stmt = (AlterDomainStmt *) stm; - if (stmt->subtype == 'C') /* ADD CONSTRAINT */ + if (stmt->subtype == AD_AddConstraint) { Constraint *con = castNode(Constraint, stmt->def); AlterTableCmd *cmd = makeNode(AlterTableCmd); @@ -16673,15 +17251,13 @@ ATExecAddInherit(Relation child_rel, RangeVar *parent, LOCKMODE lockmode) RelationGetRelationName(parent_rel)))); /* If parent rel is temp, it must belong to this session */ - if (parent_rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP && - !parent_rel->rd_islocaltemp) + if (RELATION_IS_OTHER_TEMP(parent_rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("cannot inherit from temporary relation of another session"))); /* Ditto for the child */ - if (child_rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP && - !child_rel->rd_islocaltemp) + if (RELATION_IS_OTHER_TEMP(child_rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("cannot inherit to temporary relation of another session"))); @@ -17137,9 +17713,9 @@ MergeConstraintsIntoExisting(Relation child_rel, Relation parent_rel) NameStr(child_con->conname), RelationGetRelationName(child_rel)))); /* - * A non-enforced child constraint cannot be merged with an - * enforced parent constraint. However, the reverse is allowed, - * where the child constraint is enforced. + * A NOT ENFORCED child constraint cannot be merged with an + * ENFORCED parent constraint. However, the reverse is allowed, + * where the child constraint is ENFORCED. */ if (parent_con->conenforced && !child_con->conenforced) ereport(ERROR, @@ -19445,17 +20021,19 @@ PartConstraintImpliedByRelConstraint(Relation scanrel, for (i = 1; i <= natts; i++) { - Form_pg_attribute att = TupleDescAttr(scanrel->rd_att, i - 1); + CompactAttribute *att = TupleDescCompactAttr(scanrel->rd_att, i - 1); - if (att->attnotnull && !att->attisdropped) + /* invalid not-null constraint must be ignored here */ + if (att->attnullability == ATTNULLABLE_VALID && !att->attisdropped) { + Form_pg_attribute wholeatt = TupleDescAttr(scanrel->rd_att, i - 1); NullTest *ntest = makeNode(NullTest); ntest->arg = (Expr *) makeVar(1, i, - att->atttypid, - att->atttypmod, - att->attcollation, + wholeatt->atttypid, + wholeatt->atttypmod, + wholeatt->attcollation, 0); ntest->nulltesttype = IS_NOT_NULL; @@ -19750,15 +20328,13 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd, RelationGetRelationName(rel)))); /* If the parent is temp, it must belong to this session */ - if (rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP && - !rel->rd_islocaltemp) + if (RELATION_IS_OTHER_TEMP(rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("cannot attach as partition of temporary relation of another session"))); /* Ditto for the partition */ - if (attachrel->rd_rel->relpersistence == RELPERSISTENCE_TEMP && - !attachrel->rd_islocaltemp) + if (RELATION_IS_OTHER_TEMP(attachrel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("cannot attach temporary relation of another session as partition"))); @@ -20436,9 +21012,17 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, tab->rel = rel; } + /* + * Detaching the partition might involve TOAST table access, so ensure we + * have a valid snapshot. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + /* Do the final part of detaching */ DetachPartitionFinalize(rel, partRel, concurrent, defaultPartOid); + PopActiveSnapshot(); + ObjectAddressSet(address, RelationRelationId, RelationGetRelid(partRel)); /* keep our lock until commit */ @@ -20510,8 +21094,6 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, ForeignKeyCacheInfo *fk = lfirst(cell); HeapTuple contup; Form_pg_constraint conform; - Oid insertTriggerOid, - updateTriggerOid; contup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(fk->conoid)); if (!HeapTupleIsValid(contup)) @@ -20538,17 +21120,25 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, /* * Also, look up the partition's "check" triggers corresponding to the - * constraint being detached and detach them from the parent triggers. + * ENFORCED constraint being detached and detach them from the parent + * triggers. NOT ENFORCED constraints do not have these triggers; + * therefore, this step is not needed. */ - GetForeignKeyCheckTriggers(trigrel, - fk->conoid, fk->confrelid, fk->conrelid, - &insertTriggerOid, &updateTriggerOid); - Assert(OidIsValid(insertTriggerOid)); - TriggerSetParentTrigger(trigrel, insertTriggerOid, InvalidOid, - RelationGetRelid(partRel)); - Assert(OidIsValid(updateTriggerOid)); - TriggerSetParentTrigger(trigrel, updateTriggerOid, InvalidOid, - RelationGetRelid(partRel)); + if (fk->conenforced) + { + Oid insertTriggerOid, + updateTriggerOid; + + GetForeignKeyCheckTriggers(trigrel, + fk->conoid, fk->confrelid, fk->conrelid, + &insertTriggerOid, &updateTriggerOid); + Assert(OidIsValid(insertTriggerOid)); + TriggerSetParentTrigger(trigrel, insertTriggerOid, InvalidOid, + RelationGetRelid(partRel)); + Assert(OidIsValid(updateTriggerOid)); + TriggerSetParentTrigger(trigrel, updateTriggerOid, InvalidOid, + RelationGetRelid(partRel)); + } /* * Lastly, create the action triggers on the referenced table, using @@ -20588,8 +21178,9 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, fkconstraint->conname = pstrdup(NameStr(conform->conname)); fkconstraint->deferrable = conform->condeferrable; fkconstraint->initdeferred = conform->condeferred; + fkconstraint->is_enforced = conform->conenforced; fkconstraint->skip_validation = true; - fkconstraint->initially_valid = true; + fkconstraint->initially_valid = conform->convalidated; /* a few irrelevant fields omitted here */ fkconstraint->pktable = NULL; fkconstraint->fk_attrs = NIL; @@ -21159,7 +21750,8 @@ refuseDupeIndexAttach(Relation parentIdx, Relation partIdx, Relation partitionTb errmsg("cannot attach index \"%s\" as a partition of index \"%s\"", RelationGetRelationName(partIdx), RelationGetRelationName(parentIdx)), - errdetail("Another index is already attached for partition \"%s\".", + errdetail("Another index \"%s\" is already attached for partition \"%s\".", + get_rel_name(existingIdx), RelationGetRelationName(partitionTbl)))); } diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index a9005cc7212b6..df31eace47ac9 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -500,7 +500,7 @@ DropTableSpace(DropTableSpaceStmt *stmt) * mustn't delete. So instead, we force a checkpoint which will clean * out any lingering files, and try again. */ - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | CHECKPOINT_WAIT); + RequestCheckpoint(CHECKPOINT_FAST | CHECKPOINT_FORCE | CHECKPOINT_WAIT); /* * On Windows, an unlinked file persists in the directory listing diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index c9f61130c6940..579ac8d76ae73 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -30,7 +30,6 @@ #include "catalog/pg_proc.h" #include "catalog/pg_trigger.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "commands/trigger.h" #include "executor/executor.h" #include "miscadmin.h" @@ -80,6 +79,7 @@ static bool GetTupleForTrigger(EState *estate, ItemPointer tid, LockTupleMode lockmode, TupleTableSlot *oldslot, + bool do_epq_recheck, TupleTableSlot **epqslot, TM_Result *tmresultp, TM_FailureData *tmfdp); @@ -871,7 +871,7 @@ CreateTriggerFiringOn(CreateTrigStmt *stmt, const char *queryString, CStringGetDatum(trigname)); values[Anum_pg_trigger_tgfoid - 1] = ObjectIdGetDatum(funcoid); values[Anum_pg_trigger_tgtype - 1] = Int16GetDatum(tgtype); - values[Anum_pg_trigger_tgenabled - 1] = trigger_fires_when; + values[Anum_pg_trigger_tgenabled - 1] = CharGetDatum(trigger_fires_when); values[Anum_pg_trigger_tgisinternal - 1] = BoolGetDatum(isInternal); values[Anum_pg_trigger_tgconstrrelid - 1] = ObjectIdGetDatum(constrrelid); values[Anum_pg_trigger_tgconstrindid - 1] = ObjectIdGetDatum(indexOid); @@ -2284,6 +2284,8 @@ FindTriggerIncompatibleWithInheritance(TriggerDesc *trigdesc) { Trigger *trigger = &trigdesc->triggers[i]; + if (!TRIGGER_FOR_ROW(trigger->tgtype)) + continue; if (trigger->tgoldtable != NULL || trigger->tgnewtable != NULL) return trigger->tgname; } @@ -2544,6 +2546,15 @@ ExecARInsertTriggers(EState *estate, ResultRelInfo *relinfo, { TriggerDesc *trigdesc = relinfo->ri_TrigDesc; + if (relinfo->ri_FdwRoutine && transition_capture && + transition_capture->tcs_insert_new_table) + { + Assert(relinfo->ri_RootResultRelInfo); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot collect transition tuples from child foreign tables"))); + } + if ((trigdesc && trigdesc->trig_insert_after_row) || (transition_capture && transition_capture->tcs_insert_new_table)) AfterTriggerSaveEvent(estate, relinfo, NULL, NULL, @@ -2693,7 +2704,8 @@ ExecBRDeleteTriggers(EState *estate, EPQState *epqstate, HeapTuple fdw_trigtuple, TupleTableSlot **epqslot, TM_Result *tmresult, - TM_FailureData *tmfd) + TM_FailureData *tmfd, + bool is_merge_delete) { TupleTableSlot *slot = ExecGetTriggerOldSlot(estate, relinfo); TriggerDesc *trigdesc = relinfo->ri_TrigDesc; @@ -2708,9 +2720,17 @@ ExecBRDeleteTriggers(EState *estate, EPQState *epqstate, { TupleTableSlot *epqslot_candidate = NULL; + /* + * Get a copy of the on-disk tuple we are planning to delete. In + * general, if the tuple has been concurrently updated, we should + * recheck it using EPQ. However, if this is a MERGE DELETE action, + * we skip this EPQ recheck and leave it to the caller (it must do + * additional rechecking, and might end up executing a different + * action entirely). + */ if (!GetTupleForTrigger(estate, epqstate, relinfo, tupleid, - LockTupleExclusive, slot, &epqslot_candidate, - tmresult, tmfd)) + LockTupleExclusive, slot, !is_merge_delete, + &epqslot_candidate, tmresult, tmfd)) return false; /* @@ -2787,6 +2807,15 @@ ExecARDeleteTriggers(EState *estate, { TriggerDesc *trigdesc = relinfo->ri_TrigDesc; + if (relinfo->ri_FdwRoutine && transition_capture && + transition_capture->tcs_delete_old_table) + { + Assert(relinfo->ri_RootResultRelInfo); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot collect transition tuples from child foreign tables"))); + } + if ((trigdesc && trigdesc->trig_delete_after_row) || (transition_capture && transition_capture->tcs_delete_old_table)) { @@ -2800,6 +2829,7 @@ ExecARDeleteTriggers(EState *estate, tupleid, LockTupleExclusive, slot, + false, NULL, NULL, NULL); @@ -2944,7 +2974,8 @@ ExecBRUpdateTriggers(EState *estate, EPQState *epqstate, HeapTuple fdw_trigtuple, TupleTableSlot *newslot, TM_Result *tmresult, - TM_FailureData *tmfd) + TM_FailureData *tmfd, + bool is_merge_update) { TriggerDesc *trigdesc = relinfo->ri_TrigDesc; TupleTableSlot *oldslot = ExecGetTriggerOldSlot(estate, relinfo); @@ -2965,10 +2996,17 @@ ExecBRUpdateTriggers(EState *estate, EPQState *epqstate, { TupleTableSlot *epqslot_candidate = NULL; - /* get a copy of the on-disk tuple we are planning to update */ + /* + * Get a copy of the on-disk tuple we are planning to update. In + * general, if the tuple has been concurrently updated, we should + * recheck it using EPQ. However, if this is a MERGE UPDATE action, + * we skip this EPQ recheck and leave it to the caller (it must do + * additional rechecking, and might end up executing a different + * action entirely). + */ if (!GetTupleForTrigger(estate, epqstate, relinfo, tupleid, - lockmode, oldslot, &epqslot_candidate, - tmresult, tmfd)) + lockmode, oldslot, !is_merge_update, + &epqslot_candidate, tmresult, tmfd)) return false; /* cancel the update action */ /* @@ -3115,6 +3153,16 @@ ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo, { TriggerDesc *trigdesc = relinfo->ri_TrigDesc; + if (relinfo->ri_FdwRoutine && transition_capture && + (transition_capture->tcs_update_old_table || + transition_capture->tcs_update_new_table)) + { + Assert(relinfo->ri_RootResultRelInfo); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot collect transition tuples from child foreign tables"))); + } + if ((trigdesc && trigdesc->trig_update_after_row) || (transition_capture && (transition_capture->tcs_update_old_table || @@ -3142,6 +3190,7 @@ ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo, tupleid, LockTupleExclusive, oldslot, + false, NULL, NULL, NULL); @@ -3298,6 +3347,7 @@ GetTupleForTrigger(EState *estate, ItemPointer tid, LockTupleMode lockmode, TupleTableSlot *oldslot, + bool do_epq_recheck, TupleTableSlot **epqslot, TM_Result *tmresultp, TM_FailureData *tmfdp) @@ -3357,29 +3407,30 @@ GetTupleForTrigger(EState *estate, if (tmfd.traversed) { /* - * Recheck the tuple using EPQ. For MERGE, we leave this - * to the caller (it must do additional rechecking, and - * might end up executing a different action entirely). + * Recheck the tuple using EPQ, if requested. Otherwise, + * just return that it was concurrently updated. */ - if (estate->es_plannedstmt->commandType == CMD_MERGE) + if (do_epq_recheck) { - if (tmresultp) - *tmresultp = TM_Updated; - return false; + *epqslot = EvalPlanQual(epqstate, + relation, + relinfo->ri_RangeTableIndex, + oldslot); + + /* + * If PlanQual failed for updated tuple - we must not + * process this tuple! + */ + if (TupIsNull(*epqslot)) + { + *epqslot = NULL; + return false; + } } - - *epqslot = EvalPlanQual(epqstate, - relation, - relinfo->ri_RangeTableIndex, - oldslot); - - /* - * If PlanQual failed for updated tuple - we must not - * process this tuple! - */ - if (TupIsNull(*epqslot)) + else { - *epqslot = NULL; + if (tmresultp) + *tmresultp = TM_Updated; return false; } } @@ -5057,21 +5108,6 @@ AfterTriggerBeginQuery(void) } -/* ---------- - * AfterTriggerAbortQuery() - * - * Called by standard_ExecutorEnd() if the query execution was aborted due to - * the plan becoming invalid during initialization. - * ---------- - */ -void -AfterTriggerAbortQuery(void) -{ - /* Revert the actions of AfterTriggerBeginQuery(). */ - afterTriggers.query_depth--; -} - - /* ---------- * AfterTriggerEndQuery() * diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c index ab16d42ad56ba..dc7df736fb826 100644 --- a/src/backend/commands/tsearchcmds.c +++ b/src/backend/commands/tsearchcmds.c @@ -1058,10 +1058,10 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied) memset(slot[slot_stored_count]->tts_isnull, false, slot[slot_stored_count]->tts_tupleDescriptor->natts * sizeof(bool)); - slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_mapcfg - 1] = cfgOid; - slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_maptokentype - 1] = cfgmap->maptokentype; - slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_mapseqno - 1] = cfgmap->mapseqno; - slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_mapdict - 1] = cfgmap->mapdict; + slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_mapcfg - 1] = ObjectIdGetDatum(cfgOid); + slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_maptokentype - 1] = Int32GetDatum(cfgmap->maptokentype); + slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_mapseqno - 1] = Int32GetDatum(cfgmap->mapseqno); + slot[slot_stored_count]->tts_values[Anum_pg_ts_config_map_mapdict - 1] = ObjectIdGetDatum(cfgmap->mapdict); ExecStoreVirtualTuple(slot[slot_stored_count]); slot_stored_count++; diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 3cb3ca1cca1cd..c6de04819f174 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -126,7 +126,7 @@ static Oid findTypeSubscriptingFunction(List *procname, Oid typeOid); static Oid findRangeSubOpclass(List *opcname, Oid subtype); static Oid findRangeCanonicalFunction(List *procname, Oid typeOid); static Oid findRangeSubtypeDiffFunction(List *procname, Oid subtype); -static void validateDomainCheckConstraint(Oid domainoid, const char *ccbin); +static void validateDomainCheckConstraint(Oid domainoid, const char *ccbin, LOCKMODE lockmode); static void validateDomainNotNullConstraint(Oid domainoid); static List *get_rels_with_domain(Oid domainOid, LOCKMODE lockmode); static void checkEnumOwner(HeapTuple tup); @@ -939,11 +939,19 @@ DefineDomain(ParseState *pstate, CreateDomainStmt *stmt) break; case CONSTR_NOTNULL: - if (nullDefined && !typNotNull) + if (nullDefined) + { + if (!typNotNull) + ereport(ERROR, + errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting NULL/NOT NULL constraints"), + parser_errposition(pstate, constr->location)); + ereport(ERROR, - errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting NULL/NOT NULL constraints"), + errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("redundant NOT NULL constraint definition"), parser_errposition(pstate, constr->location)); + } if (constr->is_no_inherit) ereport(ERROR, errcode(ERRCODE_INVALID_OBJECT_DEFINITION), @@ -1810,6 +1818,7 @@ makeRangeConstructors(const char *name, Oid namespace, PointerGetDatum(NULL), /* parameterNames */ NIL, /* parameterDefaults */ PointerGetDatum(NULL), /* trftypes */ + NIL, /* trfoids */ PointerGetDatum(NULL), /* proconfig */ InvalidOid, /* prosupport */ 1.0, /* procost */ @@ -1875,6 +1884,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PointerGetDatum(NULL), /* parameterNames */ NIL, /* parameterDefaults */ PointerGetDatum(NULL), /* trftypes */ + NIL, /* trfoids */ PointerGetDatum(NULL), /* proconfig */ InvalidOid, /* prosupport */ 1.0, /* procost */ @@ -1919,6 +1929,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PointerGetDatum(NULL), /* parameterNames */ NIL, /* parameterDefaults */ PointerGetDatum(NULL), /* trftypes */ + NIL, /* trfoids */ PointerGetDatum(NULL), /* proconfig */ InvalidOid, /* prosupport */ 1.0, /* procost */ @@ -1957,6 +1968,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PointerGetDatum(NULL), /* parameterNames */ NIL, /* parameterDefaults */ PointerGetDatum(NULL), /* trftypes */ + NIL, /* trfoids */ PointerGetDatum(NULL), /* proconfig */ InvalidOid, /* prosupport */ 1.0, /* procost */ @@ -2974,7 +2986,7 @@ AlterDomainAddConstraint(List *names, Node *newConstraint, * to. */ if (!constr->skip_validation) - validateDomainCheckConstraint(domainoid, ccbin); + validateDomainCheckConstraint(domainoid, ccbin, ShareLock); /* * We must send out an sinval message for the domain, to ensure that @@ -3086,7 +3098,12 @@ AlterDomainValidateConstraint(List *names, const char *constrName) val = SysCacheGetAttrNotNull(CONSTROID, tuple, Anum_pg_constraint_conbin); conbin = TextDatumGetCString(val); - validateDomainCheckConstraint(domainoid, conbin); + /* + * Locking related relations with ShareUpdateExclusiveLock is ok because + * not-yet-valid constraints are still enforced against concurrent inserts + * or updates. + */ + validateDomainCheckConstraint(domainoid, conbin, ShareUpdateExclusiveLock); /* * Now update the catalog, while we have the door open. @@ -3179,9 +3196,16 @@ validateDomainNotNullConstraint(Oid domainoid) /* * Verify that all columns currently using the domain satisfy the given check * constraint expression. + * + * It is used to validate existing constraints and to add newly created check + * constraints to a domain. + * + * The lockmode is used for relations using the domain. It should be + * ShareLock when adding a new constraint to domain. It can be + * ShareUpdateExclusiveLock when validating an existing constraint. */ static void -validateDomainCheckConstraint(Oid domainoid, const char *ccbin) +validateDomainCheckConstraint(Oid domainoid, const char *ccbin, LOCKMODE lockmode) { Expr *expr = (Expr *) stringToNode(ccbin); List *rels; @@ -3198,9 +3222,7 @@ validateDomainCheckConstraint(Oid domainoid, const char *ccbin) exprstate = ExecPrepareExpr(expr, estate); /* Fetch relation list with attributes based on this domain */ - /* ShareLock is sufficient to prevent concurrent data changes */ - - rels = get_rels_with_domain(domainoid, ShareLock); + rels = get_rels_with_domain(domainoid, lockmode); foreach(rt, rels) { diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 0d638e29d0066..1e3d4ab0e20e7 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -1924,7 +1924,7 @@ AddRoleMems(Oid currentUserId, const char *rolename, Oid roleid, */ if ((popt->specified & GRANT_ROLE_SPECIFIED_INHERIT) != 0) new_record[Anum_pg_auth_members_inherit_option - 1] = - popt->inherit; + BoolGetDatum(popt->inherit); else { HeapTuple mrtup; @@ -1935,14 +1935,14 @@ AddRoleMems(Oid currentUserId, const char *rolename, Oid roleid, elog(ERROR, "cache lookup failed for role %u", memberid); mrform = (Form_pg_authid) GETSTRUCT(mrtup); new_record[Anum_pg_auth_members_inherit_option - 1] = - mrform->rolinherit; + BoolGetDatum(mrform->rolinherit); ReleaseSysCache(mrtup); } /* get an OID for the new row and insert it */ objectId = GetNewOidWithIndex(pg_authmem_rel, AuthMemOidIndexId, Anum_pg_auth_members_oid); - new_record[Anum_pg_auth_members_oid - 1] = objectId; + new_record[Anum_pg_auth_members_oid - 1] = ObjectIdGetDatum(objectId); tuple = heap_form_tuple(pg_authmem_dsc, new_record, new_record_nulls); CatalogTupleInsert(pg_authmem_rel, tuple); diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index db5da3ce82621..733ef40ae7c52 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -56,6 +56,7 @@ #include "utils/fmgroids.h" #include "utils/guc.h" #include "utils/guc_hooks.h" +#include "utils/injection_point.h" #include "utils/memutils.h" #include "utils/snapmgr.h" #include "utils/syscache.h" @@ -123,7 +124,7 @@ static void vac_truncate_clog(TransactionId frozenXID, MultiXactId minMulti, TransactionId lastSaneFrozenXid, MultiXactId lastSaneMinMulti); -static bool vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, +static bool vacuum_rel(Oid relid, RangeVar *relation, VacuumParams params, BufferAccessStrategy bstrategy); static double compute_parallel_delay(void); static VacOptValue get_vacoptval_from_boolean(DefElem *def); @@ -464,7 +465,7 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel) } /* Now go through the common routine */ - vacuum(vacstmt->rels, ¶ms, bstrategy, vac_context, isTopLevel); + vacuum(vacstmt->rels, params, bstrategy, vac_context, isTopLevel); /* Finally, clean up the vacuum memory context */ MemoryContextDelete(vac_context); @@ -493,7 +494,7 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel) * memory context that will not disappear at transaction commit. */ void -vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, +vacuum(List *relations, const VacuumParams params, BufferAccessStrategy bstrategy, MemoryContext vac_context, bool isTopLevel) { static bool in_vacuum = false; @@ -502,9 +503,7 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, volatile bool in_outer_xact, use_own_xacts; - Assert(params != NULL); - - stmttype = (params->options & VACOPT_VACUUM) ? "VACUUM" : "ANALYZE"; + stmttype = (params.options & VACOPT_VACUUM) ? "VACUUM" : "ANALYZE"; /* * We cannot run VACUUM inside a user transaction block; if we were inside @@ -514,7 +513,7 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, * * ANALYZE (without VACUUM) can run either way. */ - if (params->options & VACOPT_VACUUM) + if (params.options & VACOPT_VACUUM) { PreventInTransactionBlock(isTopLevel, stmttype); in_outer_xact = false; @@ -537,7 +536,7 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, * Build list of relation(s) to process, putting any new data in * vac_context for safekeeping. */ - if (params->options & VACOPT_ONLY_DATABASE_STATS) + if (params.options & VACOPT_ONLY_DATABASE_STATS) { /* We don't process any tables in this case */ Assert(relations == NIL); @@ -553,7 +552,7 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, List *sublist; MemoryContext old_context; - sublist = expand_vacuum_rel(vrel, vac_context, params->options); + sublist = expand_vacuum_rel(vrel, vac_context, params.options); old_context = MemoryContextSwitchTo(vac_context); newrels = list_concat(newrels, sublist); MemoryContextSwitchTo(old_context); @@ -561,7 +560,7 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, relations = newrels; } else - relations = get_all_vacuum_rels(vac_context, params->options); + relations = get_all_vacuum_rels(vac_context, params.options); /* * Decide whether we need to start/commit our own transactions. @@ -577,11 +576,11 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, * transaction block, and also in an autovacuum worker, use own * transactions so we can release locks sooner. */ - if (params->options & VACOPT_VACUUM) + if (params.options & VACOPT_VACUUM) use_own_xacts = true; else { - Assert(params->options & VACOPT_ANALYZE); + Assert(params.options & VACOPT_ANALYZE); if (AmAutoVacuumWorkerProcess()) use_own_xacts = true; else if (in_outer_xact) @@ -632,13 +631,13 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, { VacuumRelation *vrel = lfirst_node(VacuumRelation, cur); - if (params->options & VACOPT_VACUUM) + if (params.options & VACOPT_VACUUM) { if (!vacuum_rel(vrel->oid, vrel->relation, params, bstrategy)) continue; } - if (params->options & VACOPT_ANALYZE) + if (params.options & VACOPT_ANALYZE) { /* * If using separate xacts, start one for analyze. Otherwise, @@ -657,6 +656,8 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, if (use_own_xacts) { PopActiveSnapshot(); + /* standard_ProcessUtility() does CCI if !use_own_xacts */ + CommandCounterIncrement(); CommitTransactionCommand(); } else @@ -700,8 +701,8 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, StartTransactionCommand(); } - if ((params->options & VACOPT_VACUUM) && - !(params->options & VACOPT_SKIP_DATABASE_STATS)) + if ((params.options & VACOPT_VACUUM) && + !(params.options & VACOPT_SKIP_DATABASE_STATS)) { /* * Update pg_database.datfrozenxid, and truncate pg_xact if possible. @@ -1099,7 +1100,7 @@ get_all_vacuum_rels(MemoryContext vac_context, int options) * minimum). */ bool -vacuum_get_cutoffs(Relation rel, const VacuumParams *params, +vacuum_get_cutoffs(Relation rel, const VacuumParams params, struct VacuumCutoffs *cutoffs) { int freeze_min_age, @@ -1115,10 +1116,10 @@ vacuum_get_cutoffs(Relation rel, const VacuumParams *params, aggressiveMXIDCutoff; /* Use mutable copies of freeze age parameters */ - freeze_min_age = params->freeze_min_age; - multixact_freeze_min_age = params->multixact_freeze_min_age; - freeze_table_age = params->freeze_table_age; - multixact_freeze_table_age = params->multixact_freeze_table_age; + freeze_min_age = params.freeze_min_age; + multixact_freeze_min_age = params.multixact_freeze_min_age; + freeze_table_age = params.freeze_table_age; + multixact_freeze_table_age = params.multixact_freeze_table_age; /* Set pg_class fields in cutoffs */ cutoffs->relfrozenxid = rel->rd_rel->relfrozenxid; @@ -1995,7 +1996,7 @@ vac_truncate_clog(TransactionId frozenXID, * At entry and exit, we are not inside a transaction. */ static bool -vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, +vacuum_rel(Oid relid, RangeVar *relation, VacuumParams params, BufferAccessStrategy bstrategy) { LOCKMODE lmode; @@ -2006,13 +2007,18 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, Oid save_userid; int save_sec_context; int save_nestlevel; + VacuumParams toast_vacuum_params; - Assert(params != NULL); + /* + * This function scribbles on the parameters, so make a copy early to + * avoid affecting the TOAST table (if we do end up recursing to it). + */ + memcpy(&toast_vacuum_params, ¶ms, sizeof(VacuumParams)); /* Begin a transaction for vacuuming this relation */ StartTransactionCommand(); - if (!(params->options & VACOPT_FULL)) + if (!(params.options & VACOPT_FULL)) { /* * In lazy vacuum, we can set the PROC_IN_VACUUM flag, which lets @@ -2038,7 +2044,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, */ LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); MyProc->statusFlags |= PROC_IN_VACUUM; - if (params->is_wraparound) + if (params.is_wraparound) MyProc->statusFlags |= PROC_VACUUM_FOR_WRAPAROUND; ProcGlobal->statusFlags[MyProc->pgxactoff] = MyProc->statusFlags; LWLockRelease(ProcArrayLock); @@ -2062,12 +2068,12 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, * vacuum, but just ShareUpdateExclusiveLock for concurrent vacuum. Either * way, we can be sure that no other backend is vacuuming the same table. */ - lmode = (params->options & VACOPT_FULL) ? + lmode = (params.options & VACOPT_FULL) ? AccessExclusiveLock : ShareUpdateExclusiveLock; /* open the relation and get the appropriate lock on it */ - rel = vacuum_open_relation(relid, relation, params->options, - params->log_min_duration >= 0, lmode); + rel = vacuum_open_relation(relid, relation, params.options, + params.log_min_duration >= 0, lmode); /* leave if relation could not be opened or locked */ if (!rel) @@ -2082,8 +2088,8 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, * This is only safe to do because we hold a session lock on the main * relation that prevents concurrent deletion. */ - if (OidIsValid(params->toast_parent)) - priv_relid = params->toast_parent; + if (OidIsValid(params.toast_parent)) + priv_relid = params.toast_parent; else priv_relid = RelationGetRelid(rel); @@ -2096,7 +2102,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, */ if (!vacuum_is_permitted_for_relation(priv_relid, rel->rd_rel, - params->options & ~VACOPT_ANALYZE)) + params.options & ~VACOPT_ANALYZE)) { relation_close(rel, lmode); PopActiveSnapshot(); @@ -2167,7 +2173,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, * Set index_cleanup option based on index_cleanup reloption if it wasn't * specified in VACUUM command, or when running in an autovacuum worker */ - if (params->index_cleanup == VACOPTVALUE_UNSPECIFIED) + if (params.index_cleanup == VACOPTVALUE_UNSPECIFIED) { StdRdOptIndexCleanup vacuum_index_cleanup; @@ -2178,56 +2184,74 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, ((StdRdOptions *) rel->rd_options)->vacuum_index_cleanup; if (vacuum_index_cleanup == STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO) - params->index_cleanup = VACOPTVALUE_AUTO; + params.index_cleanup = VACOPTVALUE_AUTO; else if (vacuum_index_cleanup == STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON) - params->index_cleanup = VACOPTVALUE_ENABLED; + params.index_cleanup = VACOPTVALUE_ENABLED; else { Assert(vacuum_index_cleanup == STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF); - params->index_cleanup = VACOPTVALUE_DISABLED; + params.index_cleanup = VACOPTVALUE_DISABLED; } } +#ifdef USE_INJECTION_POINTS + if (params.index_cleanup == VACOPTVALUE_AUTO) + INJECTION_POINT("vacuum-index-cleanup-auto", NULL); + else if (params.index_cleanup == VACOPTVALUE_DISABLED) + INJECTION_POINT("vacuum-index-cleanup-disabled", NULL); + else if (params.index_cleanup == VACOPTVALUE_ENABLED) + INJECTION_POINT("vacuum-index-cleanup-enabled", NULL); +#endif + /* * Check if the vacuum_max_eager_freeze_failure_rate table storage * parameter was specified. This overrides the GUC value. */ if (rel->rd_options != NULL && ((StdRdOptions *) rel->rd_options)->vacuum_max_eager_freeze_failure_rate >= 0) - params->max_eager_freeze_failure_rate = + params.max_eager_freeze_failure_rate = ((StdRdOptions *) rel->rd_options)->vacuum_max_eager_freeze_failure_rate; /* * Set truncate option based on truncate reloption or GUC if it wasn't * specified in VACUUM command, or when running in an autovacuum worker */ - if (params->truncate == VACOPTVALUE_UNSPECIFIED) + if (params.truncate == VACOPTVALUE_UNSPECIFIED) { StdRdOptions *opts = (StdRdOptions *) rel->rd_options; if (opts && opts->vacuum_truncate_set) { if (opts->vacuum_truncate) - params->truncate = VACOPTVALUE_ENABLED; + params.truncate = VACOPTVALUE_ENABLED; else - params->truncate = VACOPTVALUE_DISABLED; + params.truncate = VACOPTVALUE_DISABLED; } else if (vacuum_truncate) - params->truncate = VACOPTVALUE_ENABLED; + params.truncate = VACOPTVALUE_ENABLED; else - params->truncate = VACOPTVALUE_DISABLED; + params.truncate = VACOPTVALUE_DISABLED; } +#ifdef USE_INJECTION_POINTS + if (params.truncate == VACOPTVALUE_AUTO) + INJECTION_POINT("vacuum-truncate-auto", NULL); + else if (params.truncate == VACOPTVALUE_DISABLED) + INJECTION_POINT("vacuum-truncate-disabled", NULL); + else if (params.truncate == VACOPTVALUE_ENABLED) + INJECTION_POINT("vacuum-truncate-enabled", NULL); +#endif + /* * Remember the relation's TOAST relation for later, if the caller asked * us to process it. In VACUUM FULL, though, the toast table is * automatically rebuilt by cluster_rel so we shouldn't recurse to it, * unless PROCESS_MAIN is disabled. */ - if ((params->options & VACOPT_PROCESS_TOAST) != 0 && - ((params->options & VACOPT_FULL) == 0 || - (params->options & VACOPT_PROCESS_MAIN) == 0)) + if ((params.options & VACOPT_PROCESS_TOAST) != 0 && + ((params.options & VACOPT_FULL) == 0 || + (params.options & VACOPT_PROCESS_MAIN) == 0)) toast_relid = rel->rd_rel->reltoastrelid; else toast_relid = InvalidOid; @@ -2250,16 +2274,16 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, * table is required (e.g., PROCESS_TOAST is set), we force PROCESS_MAIN * to be set when we recurse to the TOAST table. */ - if (params->options & VACOPT_PROCESS_MAIN) + if (params.options & VACOPT_PROCESS_MAIN) { /* * Do the actual work --- either FULL or "lazy" vacuum */ - if (params->options & VACOPT_FULL) + if (params.options & VACOPT_FULL) { ClusterParams cluster_params = {0}; - if ((params->options & VACOPT_VERBOSE) != 0) + if ((params.options & VACOPT_VERBOSE) != 0) cluster_params.options |= CLUOPT_VERBOSE; /* VACUUM FULL is now a variant of CLUSTER; see cluster.c */ @@ -2297,19 +2321,16 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params, */ if (toast_relid != InvalidOid) { - VacuumParams toast_vacuum_params; - /* * Force VACOPT_PROCESS_MAIN so vacuum_rel() processes it. Likewise, * set toast_parent so that the privilege checks are done on the main * relation. NB: This is only safe to do because we hold a session * lock on the main relation that prevents concurrent deletion. */ - memcpy(&toast_vacuum_params, params, sizeof(VacuumParams)); toast_vacuum_params.options |= VACOPT_PROCESS_MAIN; toast_vacuum_params.toast_parent = relid; - vacuum_rel(toast_relid, NULL, &toast_vacuum_params, bstrategy); + vacuum_rel(toast_relid, NULL, toast_vacuum_params, bstrategy); } /* diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c index 2b9d548cdeb10..0feea1d30ec36 100644 --- a/src/backend/commands/vacuumparallel.c +++ b/src/backend/commands/vacuumparallel.c @@ -63,7 +63,7 @@ typedef struct PVShared */ Oid relid; int elevel; - uint64 queryid; + int64 queryid; /* * Fields for both index vacuum and cleanup. diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index a9f2a3a306245..608f10d9412da 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -1163,14 +1163,12 @@ assign_maintenance_io_concurrency(int newval, void *extra) void assign_io_max_combine_limit(int newval, void *extra) { - io_max_combine_limit = newval; - io_combine_limit = Min(io_max_combine_limit, io_combine_limit_guc); + io_combine_limit = Min(newval, io_combine_limit_guc); } void assign_io_combine_limit(int newval, void *extra) { - io_combine_limit_guc = newval; - io_combine_limit = Min(io_max_combine_limit, io_combine_limit_guc); + io_combine_limit = Min(io_max_combine_limit, newval); } /* diff --git a/src/backend/executor/README b/src/backend/executor/README index 02745c23ed974..54f4782f31b60 100644 --- a/src/backend/executor/README +++ b/src/backend/executor/README @@ -285,28 +285,6 @@ are typically reset to empty once per tuple. Per-tuple contexts are usually associated with ExprContexts, and commonly each PlanState node has its own ExprContext to evaluate its qual and targetlist expressions in. -Relation Locking ----------------- - -When the executor initializes a plan tree for execution, it doesn't lock -non-index relations if the plan tree is freshly generated and not derived -from a CachedPlan. This is because such locks have already been established -during the query's parsing, rewriting, and planning phases. However, with a -cached plan tree, some relations may remain unlocked. The function -AcquireExecutorLocks() only locks unprunable relations in the plan, deferring -the locking of prunable ones to executor initialization. This avoids -unnecessary locking of relations that will be pruned during "initial" runtime -pruning in ExecDoInitialPruning(). - -This approach creates a window where a cached plan tree with child tables -could become outdated if another backend modifies these tables before -ExecDoInitialPruning() locks them. As a result, the executor has the added duty -to verify the plan tree's validity whenever it locks a child table after -doing initial pruning. This validation is done by checking the CachedPlan.is_valid -flag. If the plan tree is outdated (is_valid = false), the executor stops -further initialization, cleans up anything in EState that would have been -allocated up to that point, and retries execution after recreating the -invalid plan in the CachedPlan. See ExecutorStartCachedPlan(). Query Processing Control Flow ----------------------------- @@ -315,13 +293,11 @@ This is a sketch of control flow for full query processing: CreateQueryDesc - ExecutorStart or ExecutorStartCachedPlan + ExecutorStart CreateExecutorState creates per-query context - switch to per-query context to run ExecDoInitialPruning and ExecInitNode + switch to per-query context to run ExecInitNode AfterTriggerBeginQuery - ExecDoInitialPruning - does initial pruning and locks surviving partitions if needed ExecInitNode --- recursively scans plan tree ExecInitNode recurse into subsidiary nodes @@ -345,12 +321,7 @@ This is a sketch of control flow for full query processing: FreeQueryDesc -As mentioned in the "Relation Locking" section, if the plan tree is found to -be stale after locking partitions in ExecDoInitialPruning(), the control is -immediately returned to ExecutorStartCachedPlan(), which will create a new plan -tree and perform the steps starting from CreateExecutorState() again. - -Per above comments, it's not really critical for ExecEndPlan to free any +Per above comments, it's not really critical for ExecEndNode to free any memory; it'll all go away in FreeExecutorState anyway. However, we do need to be careful to close relations, drop buffer pins, etc, so we do need to scan the plan state tree to find these sorts of resources. diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 8a72b5e70a4ec..0e1a74976f7d3 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -2815,7 +2815,7 @@ ExecJustHashVarImpl(ExprState *state, TupleTableSlot *slot, bool *isnull) *isnull = false; if (!fcinfo->args[0].isnull) - return DatumGetUInt32(hashop->d.hashdatum.fn_addr(fcinfo)); + return hashop->d.hashdatum.fn_addr(fcinfo); else return (Datum) 0; } @@ -2849,7 +2849,7 @@ ExecJustHashVarVirtImpl(ExprState *state, TupleTableSlot *slot, bool *isnull) *isnull = false; if (!fcinfo->args[0].isnull) - return DatumGetUInt32(hashop->d.hashdatum.fn_addr(fcinfo)); + return hashop->d.hashdatum.fn_addr(fcinfo); else return (Datum) 0; } @@ -2892,7 +2892,7 @@ ExecJustHashOuterVarStrict(ExprState *state, ExprContext *econtext, if (!fcinfo->args[0].isnull) { *isnull = false; - return DatumGetUInt32(hashop->d.hashdatum.fn_addr(fcinfo)); + return hashop->d.hashdatum.fn_addr(fcinfo); } else { @@ -4393,7 +4393,7 @@ ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, ExprContext *eco * is the equality function and we need not-equals. */ if (!inclause) - result = !result; + result = BoolGetDatum(!DatumGetBool(result)); } } @@ -5228,7 +5228,6 @@ ExecEvalJsonCoercionFinish(ExprState *state, ExprEvalStep *op) * JsonBehavior expression. */ jsestate->escontext.error_occurred = false; - jsestate->escontext.error_occurred = false; jsestate->escontext.details_wanted = true; } } diff --git a/src/backend/executor/execGrouping.c b/src/backend/executor/execGrouping.c index 255bd795361a2..b540074935386 100644 --- a/src/backend/executor/execGrouping.c +++ b/src/backend/executor/execGrouping.c @@ -144,7 +144,7 @@ execTuplesHashPrepare(int numCols, * hashfunctions: FmgrInfos of datatype-specific hashing functions to use * collations: collations to use in comparisons * nbuckets: initial estimate of hashtable size - * additionalsize: size of data stored in ->additional + * additionalsize: size of data that may be stored along with the hash entry * metacxt: memory context for long-lived allocation, but not per-entry data * tablecxt: memory context in which to store table entries * tempcxt: short-lived context for evaluation hash and comparison functions @@ -288,7 +288,7 @@ ResetTupleHashTable(TupleHashTable hashtable) * * If isnew isn't NULL, then a new entry is created if no existing entry * matches. On return, *isnew is true if the entry is newly created, - * false if it existed already. ->additional_data in the new entry has + * false if it existed already. The additional data in the new entry has * been zeroed. */ TupleHashEntry diff --git a/src/backend/executor/execIndexing.c b/src/backend/executor/execIndexing.c index e3fe9b78bb5da..ca33a854278ed 100644 --- a/src/backend/executor/execIndexing.c +++ b/src/backend/executor/execIndexing.c @@ -214,9 +214,8 @@ ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative) ii = BuildIndexInfo(indexDesc); /* - * If the indexes are to be used for speculative insertion or conflict - * detection in logical replication, add extra information required by - * unique index entries. + * If the indexes are to be used for speculative insertion, add extra + * information required by unique index entries. */ if (speculative && ii->ii_Unique && !indexDesc->rd_index->indisexclusion) BuildSpeculativeIndexInfo(indexDesc, ii); @@ -280,7 +279,7 @@ ExecCloseIndices(ResultRelInfo *resultRelInfo) * executor is performing an UPDATE that could not use an * optimization like heapam's HOT (in more general terms a * call to table_tuple_update() took place and set - * 'update_indexes' to TUUI_All). Receiving this hint makes + * 'update_indexes' to TU_All). Receiving this hint makes * us consider if we should pass down the 'indexUnchanged' * hint in turn. That's something that we figure out for * each index_insert() call iff 'update' is true. @@ -291,7 +290,7 @@ ExecCloseIndices(ResultRelInfo *resultRelInfo) * HOT has been applied and any updated columns are indexed * only by summarizing indexes (or in more general terms a * call to table_tuple_update() took place and set - * 'update_indexes' to TUUI_Summarizing). We can (and must) + * 'update_indexes' to TU_Summarizing). We can (and must) * therefore only update the indexes that have * 'amsummarizing' = true. * diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 2da848970be0e..b8b9d2a85f76c 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -55,13 +55,11 @@ #include "parser/parse_relation.h" #include "pgstat.h" #include "rewrite/rewriteHandler.h" -#include "storage/lmgr.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/backend_status.h" #include "utils/lsyscache.h" #include "utils/partcache.h" -#include "utils/plancache.h" #include "utils/rls.h" #include "utils/snapmgr.h" @@ -86,7 +84,6 @@ static void ExecutePlan(QueryDesc *queryDesc, uint64 numberTuples, ScanDirection direction, DestReceiver *dest); -static bool ExecCheckOneRelPerms(RTEPermissionInfo *perminfo); static bool ExecCheckPermissionsModified(Oid relOid, Oid userid, Bitmapset *modifiedCols, AclMode requiredPerms); @@ -119,16 +116,11 @@ static void ReportNotNullViolationError(ResultRelInfo *resultRelInfo, * get control when ExecutorStart is called. Such a plugin would * normally call standard_ExecutorStart(). * - * Return value indicates if the plan has been initialized successfully so - * that queryDesc->planstate contains a valid PlanState tree. It may not - * if the plan got invalidated during InitPlan(). * ---------------------------------------------------------------- */ -bool +void ExecutorStart(QueryDesc *queryDesc, int eflags) { - bool plan_valid; - /* * In some cases (e.g. an EXECUTE statement or an execute message with the * extended query protocol) the query_id won't be reported, so do it now. @@ -140,14 +132,12 @@ ExecutorStart(QueryDesc *queryDesc, int eflags) pgstat_report_query_id(queryDesc->plannedstmt->queryId, false); if (ExecutorStart_hook) - plan_valid = (*ExecutorStart_hook) (queryDesc, eflags); + (*ExecutorStart_hook) (queryDesc, eflags); else - plan_valid = standard_ExecutorStart(queryDesc, eflags); - - return plan_valid; + standard_ExecutorStart(queryDesc, eflags); } -bool +void standard_ExecutorStart(QueryDesc *queryDesc, int eflags) { EState *estate; @@ -271,64 +261,6 @@ standard_ExecutorStart(QueryDesc *queryDesc, int eflags) InitPlan(queryDesc, eflags); MemoryContextSwitchTo(oldcontext); - - return ExecPlanStillValid(queryDesc->estate); -} - -/* - * ExecutorStartCachedPlan - * Start execution for a given query in the CachedPlanSource, replanning - * if the plan is invalidated due to deferred locks taken during the - * plan's initialization - * - * This function handles cases where the CachedPlan given in queryDesc->cplan - * might become invalid during the initialization of the plan given in - * queryDesc->plannedstmt, particularly when prunable relations in it are - * locked after performing initial pruning. If the locks invalidate the plan, - * the function calls UpdateCachedPlan() to replan all queries in the - * CachedPlan, and then retries initialization. - * - * The function repeats the process until ExecutorStart() successfully - * initializes the plan, that is without the CachedPlan becoming invalid. - */ -void -ExecutorStartCachedPlan(QueryDesc *queryDesc, int eflags, - CachedPlanSource *plansource, - int query_index) -{ - if (unlikely(queryDesc->cplan == NULL)) - elog(ERROR, "ExecutorStartCachedPlan(): missing CachedPlan"); - if (unlikely(plansource == NULL)) - elog(ERROR, "ExecutorStartCachedPlan(): missing CachedPlanSource"); - - /* - * Loop and retry with an updated plan until no further invalidation - * occurs. - */ - while (1) - { - if (!ExecutorStart(queryDesc, eflags)) - { - /* - * Clean up the current execution state before creating the new - * plan to retry ExecutorStart(). Mark execution as aborted to - * ensure that AFTER trigger state is properly reset. - */ - queryDesc->estate->es_aborted = true; - ExecutorEnd(queryDesc); - - /* Retry ExecutorStart() with an updated plan tree. */ - queryDesc->plannedstmt = UpdateCachedPlan(plansource, query_index, - queryDesc->queryEnv); - } - else - - /* - * Exit the loop if the plan is initialized successfully and no - * sinval messages were received that invalidated the CachedPlan. - */ - break; - } } /* ---------------------------------------------------------------- @@ -387,7 +319,6 @@ standard_ExecutorRun(QueryDesc *queryDesc, estate = queryDesc->estate; Assert(estate != NULL); - Assert(!estate->es_aborted); Assert(!(estate->es_top_eflags & EXEC_FLAG_EXPLAIN_ONLY)); /* caller must ensure the query's snapshot is active */ @@ -494,11 +425,8 @@ standard_ExecutorFinish(QueryDesc *queryDesc) Assert(estate != NULL); Assert(!(estate->es_top_eflags & EXEC_FLAG_EXPLAIN_ONLY)); - /* - * This should be run once and only once per Executor instance and never - * if the execution was aborted. - */ - Assert(!estate->es_finished && !estate->es_aborted); + /* This should be run once and only once per Executor instance */ + Assert(!estate->es_finished); /* Switch into per-query memory context */ oldcontext = MemoryContextSwitchTo(estate->es_query_cxt); @@ -561,10 +489,11 @@ standard_ExecutorEnd(QueryDesc *queryDesc) (PgStat_Counter) estate->es_parallel_workers_launched); /* - * Check that ExecutorFinish was called, unless in EXPLAIN-only mode or if - * execution was aborted. + * Check that ExecutorFinish was called, unless in EXPLAIN-only mode. This + * Assert is needed because ExecutorFinish is new as of 9.1, and callers + * might forget to call it. */ - Assert(estate->es_finished || estate->es_aborted || + Assert(estate->es_finished || (estate->es_top_eflags & EXEC_FLAG_EXPLAIN_ONLY)); /* @@ -578,14 +507,6 @@ standard_ExecutorEnd(QueryDesc *queryDesc) UnregisterSnapshot(estate->es_snapshot); UnregisterSnapshot(estate->es_crosscheck_snapshot); - /* - * Reset AFTER trigger module if the query execution was aborted. - */ - if (estate->es_aborted && - !(estate->es_top_eflags & - (EXEC_FLAG_SKIP_TRIGGERS | EXEC_FLAG_EXPLAIN_ONLY))) - AfterTriggerAbortQuery(); - /* * Must switch out of context before destroying it */ @@ -684,21 +605,6 @@ ExecCheckPermissions(List *rangeTable, List *rteperminfos, (rte->rtekind == RTE_SUBQUERY && rte->relkind == RELKIND_VIEW)); - /* - * Ensure that we have at least an AccessShareLock on relations - * whose permissions need to be checked. - * - * Skip this check in a parallel worker because locks won't be - * taken until ExecInitNode() performs plan initialization. - * - * XXX: ExecCheckPermissions() in a parallel worker may be - * redundant with the checks done in the leader process, so this - * should be reviewed to ensure it’s necessary. - */ - Assert(IsParallelWorker() || - CheckRelationOidLockedByMe(rte->relid, AccessShareLock, - true)); - (void) getRTEPermissionInfo(rteperminfos, rte); /* Many-to-one mapping not allowed */ Assert(!bms_is_member(rte->perminfoindex, indexset)); @@ -736,7 +642,7 @@ ExecCheckPermissions(List *rangeTable, List *rteperminfos, * ExecCheckOneRelPerms * Check access permissions for a single relation. */ -static bool +bool ExecCheckOneRelPerms(RTEPermissionInfo *perminfo) { AclMode requiredPerms; @@ -924,12 +830,6 @@ ExecCheckXactReadOnly(PlannedStmt *plannedstmt) * * Initializes the query plan: open files, allocate storage * and start up the rule manager - * - * If the plan originates from a CachedPlan (given in queryDesc->cplan), - * it can become invalid during runtime "initial" pruning when the - * remaining set of locks is taken. The function returns early in that - * case without initializing the plan, and the caller is expected to - * retry with a new valid plan. * ---------------------------------------------------------------- */ static void @@ -937,7 +837,6 @@ InitPlan(QueryDesc *queryDesc, int eflags) { CmdType operation = queryDesc->operation; PlannedStmt *plannedstmt = queryDesc->plannedstmt; - CachedPlan *cachedplan = queryDesc->cplan; Plan *plan = plannedstmt->planTree; List *rangeTable = plannedstmt->rtable; EState *estate = queryDesc->estate; @@ -958,7 +857,6 @@ InitPlan(QueryDesc *queryDesc, int eflags) bms_copy(plannedstmt->unprunableRelids)); estate->es_plannedstmt = plannedstmt; - estate->es_cachedplan = cachedplan; estate->es_part_prune_infos = plannedstmt->partPruneInfos; /* @@ -972,9 +870,6 @@ InitPlan(QueryDesc *queryDesc, int eflags) */ ExecDoInitialPruning(estate); - if (!ExecPlanStillValid(estate)) - return; - /* * Next, build the ExecRowMark array from the PlanRowMark(s), if any. */ @@ -1861,7 +1756,7 @@ ExecRelCheck(ResultRelInfo *resultRelInfo, MemoryContext oldContext; /* - * CheckConstraintFetch let this pass with only a warning, but now we + * CheckNNConstraintFetch let this pass with only a warning, but now we * should fail rather than possibly failing to enforce an important * constraint. */ @@ -3092,9 +2987,6 @@ EvalPlanQualStart(EPQState *epqstate, Plan *planTree) * the snapshot, rangetable, and external Param info. They need their own * copies of local state, including a tuple table, es_param_exec_vals, * result-rel info, etc. - * - * es_cachedplan is not copied because EPQ plan execution does not acquire - * any new locks that could invalidate the CachedPlan. */ rcestate->es_direction = ForwardScanDirection; rcestate->es_snapshot = parentestate->es_snapshot; diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 39c990ae638d5..f098a5557cf07 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -189,6 +189,7 @@ ExecSerializePlan(Plan *plan, EState *estate) pstmt->permInfos = estate->es_rteperminfos; pstmt->resultRelations = NIL; pstmt->appendRelations = NIL; + pstmt->planOrigin = PLAN_STMT_INTERNAL; /* * Transfer only parallel-safe subplans, leaving a NULL "hole" in the list @@ -1278,15 +1279,8 @@ ExecParallelGetQueryDesc(shm_toc *toc, DestReceiver *receiver, paramspace = shm_toc_lookup(toc, PARALLEL_KEY_PARAMLISTINFO, false); paramLI = RestoreParamList(¶mspace); - /* - * Create a QueryDesc for the query. We pass NULL for cachedplan, because - * we don't have a pointer to the CachedPlan in the leader's process. It's - * fine because the only reason the executor needs to see it is to decide - * if it should take locks on certain relations, but parallel workers - * always take locks anyway. - */ + /* Create a QueryDesc for the query. */ return CreateQueryDesc(pstmt, - NULL, queryString, GetActiveSnapshot(), InvalidSnapshot, receiver, paramLI, NULL, instrument_options); @@ -1471,8 +1465,7 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) /* Start up the executor */ queryDesc->plannedstmt->jitFlags = fpes->jit_flags; - if (!ExecutorStart(queryDesc, fpes->eflags)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); + ExecutorStart(queryDesc, fpes->eflags); /* Special executor initialization steps for parallel workers */ queryDesc->planstate->state->es_query_dsa = area; diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 0374476ffad9e..514eae1037dc3 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -26,7 +26,6 @@ #include "partitioning/partdesc.h" #include "partitioning/partprune.h" #include "rewrite/rewriteManip.h" -#include "storage/lmgr.h" #include "utils/acl.h" #include "utils/lsyscache.h" #include "utils/partcache.h" @@ -191,7 +190,7 @@ static void InitPartitionPruneContext(PartitionPruneContext *context, PartitionKey partkey, PlanState *planstate, ExprContext *econtext); -static void InitExecPartitionPruneContexts(PartitionPruneState *prunstate, +static void InitExecPartitionPruneContexts(PartitionPruneState *prunestate, PlanState *parent_plan, Bitmapset *initially_valid_subplans, int n_total_subplans); @@ -1771,14 +1770,13 @@ adjust_partition_colnos_using_map(List *colnos, AttrMap *attrMap) * ExecDoInitialPruning: * Perform runtime "initial" pruning, if necessary, to determine the set * of child subnodes that need to be initialized during ExecInitNode() for - * all plan nodes that contain a PartitionPruneInfo. This also locks the - * leaf partitions whose subnodes will be initialized if needed. + * all plan nodes that contain a PartitionPruneInfo. * * ExecInitPartitionExecPruning: * Updates the PartitionPruneState found at given part_prune_index in * EState.es_part_prune_states for use during "exec" pruning if required. * Also returns the set of subplans to initialize that would be stored at - * part_prune_index in EState.es_part_prune_result by + * part_prune_index in EState.es_part_prune_results by * ExecDoInitialPruning(). Maps in PartitionPruneState are updated to * account for initial pruning possibly having eliminated some of the * subplans. @@ -1798,8 +1796,7 @@ adjust_partition_colnos_using_map(List *colnos, AttrMap *attrMap) * ExecDoInitialPruning * Perform runtime "initial" pruning, if necessary, to determine the set * of child subnodes that need to be initialized during ExecInitNode() for - * plan nodes that support partition pruning. This also locks the leaf - * partitions whose subnodes will be initialized if needed. + * plan nodes that support partition pruning. * * This function iterates over each PartitionPruneInfo entry in * estate->es_part_prune_infos. For each entry, it creates a PartitionPruneState @@ -1821,9 +1818,7 @@ adjust_partition_colnos_using_map(List *colnos, AttrMap *attrMap) void ExecDoInitialPruning(EState *estate) { - PlannedStmt *stmt = estate->es_plannedstmt; ListCell *lc; - List *locked_relids = NIL; foreach(lc, estate->es_part_prune_infos) { @@ -1849,68 +1844,11 @@ ExecDoInitialPruning(EState *estate) else validsubplan_rtis = all_leafpart_rtis; - if (ExecShouldLockRelations(estate)) - { - int rtindex = -1; - - while ((rtindex = bms_next_member(validsubplan_rtis, - rtindex)) >= 0) - { - RangeTblEntry *rte = exec_rt_fetch(rtindex, estate); - - Assert(rte->rtekind == RTE_RELATION && - rte->rellockmode != NoLock); - LockRelationOid(rte->relid, rte->rellockmode); - locked_relids = lappend_int(locked_relids, rtindex); - } - } estate->es_unpruned_relids = bms_add_members(estate->es_unpruned_relids, validsubplan_rtis); estate->es_part_prune_results = lappend(estate->es_part_prune_results, validsubplans); } - - /* - * Lock the first result relation of each ModifyTable node, even if it was - * pruned. This is required for ExecInitModifyTable(), which keeps its - * first result relation if all other result relations have been pruned, - * because some executor paths (e.g., in nodeModifyTable.c and - * execPartition.c) rely on there being at least one result relation. - * - * There's room for improvement here --- we actually only need to do this - * if all other result relations of the ModifyTable node were pruned, but - * we don't have an easy way to tell that here. - */ - if (stmt->resultRelations && ExecShouldLockRelations(estate)) - { - foreach(lc, stmt->firstResultRels) - { - Index firstResultRel = lfirst_int(lc); - - if (!bms_is_member(firstResultRel, estate->es_unpruned_relids)) - { - RangeTblEntry *rte = exec_rt_fetch(firstResultRel, estate); - - Assert(rte->rtekind == RTE_RELATION && rte->rellockmode != NoLock); - LockRelationOid(rte->relid, rte->rellockmode); - locked_relids = lappend_int(locked_relids, firstResultRel); - } - } - } - - /* - * Release the useless locks if the plan won't be executed. This is the - * same as what CheckCachedPlan() in plancache.c does. - */ - if (!ExecPlanStillValid(estate)) - { - foreach(lc, locked_relids) - { - RangeTblEntry *rte = exec_rt_fetch(lfirst_int(lc), estate); - - UnlockRelationOid(rte->relid, rte->rellockmode); - } - } } /* @@ -1983,8 +1921,8 @@ ExecInitPartitionExecPruning(PlanState *planstate, * account for any that were removed due to initial pruning; refer to the * condition in InitExecPartitionPruneContexts() that is used to determine * whether to do this. If no exec pruning needs to be done, we would thus - * leave the maps to be in an invalid invalid state, but that's ok since - * that data won't be consulted again (cf initial Assert in + * leave the maps to be in an invalid state, but that's ok since that data + * won't be consulted again (cf initial Assert in * ExecFindMatchingSubPlans). */ if (prunestate->do_exec_prune) @@ -2109,7 +2047,7 @@ CreatePartitionPruneState(EState *estate, PartitionPruneInfo *pruneinfo, */ partrel = ExecGetRangeTableRelation(estate, pinfo->rtindex, false); - /* Remember for InitExecPartitionPruneContext(). */ + /* Remember for InitExecPartitionPruneContexts(). */ pprune->partrel = partrel; partkey = RelationGetPartitionKey(partrel); diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index ede89ea3cf972..b409d4ecbf525 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -14,12 +14,14 @@ #include "postgres.h" +#include "access/commit_ts.h" #include "access/genam.h" #include "access/gist.h" #include "access/relscan.h" #include "access/tableam.h" #include "access/transam.h" #include "access/xact.h" +#include "access/heapam.h" #include "catalog/pg_am_d.h" #include "commands/trigger.h" #include "executor/executor.h" @@ -36,7 +38,7 @@ static bool tuples_equal(TupleTableSlot *slot1, TupleTableSlot *slot2, - TypeCacheEntry **eq); + TypeCacheEntry **eq, Bitmapset *columns); /* * Setup a ScanKey for a search in the relation 'rel' for a tuple 'key' that @@ -221,7 +223,7 @@ RelationFindReplTupleByIndex(Relation rel, Oid idxoid, if (eq == NULL) eq = palloc0(sizeof(*eq) * outslot->tts_tupleDescriptor->natts); - if (!tuples_equal(outslot, searchslot, eq)) + if (!tuples_equal(outslot, searchslot, eq, NULL)) continue; } @@ -277,10 +279,13 @@ RelationFindReplTupleByIndex(Relation rel, Oid idxoid, /* * Compare the tuples in the slots by checking if they have equal values. + * + * If 'columns' is not null, only the columns specified within it will be + * considered for the equality check, ignoring all other columns. */ static bool tuples_equal(TupleTableSlot *slot1, TupleTableSlot *slot2, - TypeCacheEntry **eq) + TypeCacheEntry **eq, Bitmapset *columns) { int attrnum; @@ -305,6 +310,14 @@ tuples_equal(TupleTableSlot *slot1, TupleTableSlot *slot2, if (att->attisdropped || att->attgenerated) continue; + /* + * Ignore columns that are not listed for checking. + */ + if (columns && + !bms_is_member(att->attnum - FirstLowInvalidHeapAttributeNumber, + columns)) + continue; + /* * If one value is NULL and other is not, then they are certainly not * equal @@ -380,7 +393,7 @@ RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode, /* Try to find the tuple */ while (table_scan_getnextslot(scan, ForwardScanDirection, scanslot)) { - if (!tuples_equal(scanslot, searchslot, eq)) + if (!tuples_equal(scanslot, searchslot, eq, NULL)) continue; found = true; @@ -431,6 +444,260 @@ RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode, return found; } +/* + * Build additional index information necessary for conflict detection. + */ +static void +BuildConflictIndexInfo(ResultRelInfo *resultRelInfo, Oid conflictindex) +{ + for (int i = 0; i < resultRelInfo->ri_NumIndices; i++) + { + Relation indexRelation = resultRelInfo->ri_IndexRelationDescs[i]; + IndexInfo *indexRelationInfo = resultRelInfo->ri_IndexRelationInfo[i]; + + if (conflictindex != RelationGetRelid(indexRelation)) + continue; + + /* + * This Assert will fail if BuildSpeculativeIndexInfo() is called + * twice for the given index. + */ + Assert(indexRelationInfo->ii_UniqueOps == NULL); + + BuildSpeculativeIndexInfo(indexRelation, indexRelationInfo); + } +} + +/* + * If the tuple is recently dead and was deleted by a transaction with a newer + * commit timestamp than previously recorded, update the associated transaction + * ID, commit time, and origin. This helps ensure that conflict detection uses + * the most recent and relevant deletion metadata. + */ +static void +update_most_recent_deletion_info(TupleTableSlot *scanslot, + TransactionId oldestxmin, + TransactionId *delete_xid, + TimestampTz *delete_time, + RepOriginId *delete_origin) +{ + BufferHeapTupleTableSlot *hslot; + HeapTuple tuple; + Buffer buf; + bool recently_dead = false; + TransactionId xmax; + TimestampTz localts; + RepOriginId localorigin; + + hslot = (BufferHeapTupleTableSlot *) scanslot; + + tuple = ExecFetchSlotHeapTuple(scanslot, false, NULL); + buf = hslot->buffer; + + LockBuffer(buf, BUFFER_LOCK_SHARE); + + /* + * We do not consider HEAPTUPLE_DEAD status because it indicates either + * tuples whose inserting transaction was aborted (meaning there is no + * commit timestamp or origin), or tuples deleted by a transaction older + * than oldestxmin, making it safe to ignore them during conflict + * detection (See comments atop worker.c for details). + */ + if (HeapTupleSatisfiesVacuum(tuple, oldestxmin, buf) == HEAPTUPLE_RECENTLY_DEAD) + recently_dead = true; + + LockBuffer(buf, BUFFER_LOCK_UNLOCK); + + if (!recently_dead) + return; + + xmax = HeapTupleHeaderGetUpdateXid(tuple->t_data); + if (!TransactionIdIsValid(xmax)) + return; + + /* Select the dead tuple with the most recent commit timestamp */ + if (TransactionIdGetCommitTsData(xmax, &localts, &localorigin) && + TimestampDifferenceExceeds(*delete_time, localts, 0)) + { + *delete_xid = xmax; + *delete_time = localts; + *delete_origin = localorigin; + } +} + +/* + * Searches the relation 'rel' for the most recently deleted tuple that matches + * the values in 'searchslot' and is not yet removable by VACUUM. The function + * returns the transaction ID, origin, and commit timestamp of the transaction + * that deleted this tuple. + * + * 'oldestxmin' acts as a cutoff transaction ID. Tuples deleted by transactions + * with IDs >= 'oldestxmin' are considered recently dead and are eligible for + * conflict detection. + * + * Instead of stopping at the first match, we scan all matching dead tuples to + * identify most recent deletion. This is crucial because only the latest + * deletion is relevant for resolving conflicts. + * + * For example, consider a scenario on the subscriber where a row is deleted, + * re-inserted, and then deleted again only on the subscriber: + * + * - (pk, 1) - deleted at 9:00, + * - (pk, 1) - deleted at 9:02, + * + * Now, a remote update arrives: (pk, 1) -> (pk, 2), timestamped at 9:01. + * + * If we mistakenly return the older deletion (9:00), the system may wrongly + * apply the remote update using a last-update-wins strategy. Instead, we must + * recognize the more recent deletion at 9:02 and skip the update. See + * comments atop worker.c for details. Note, as of now, conflict resolution + * is not implemented. Consequently, the system may incorrectly report the + * older tuple as the conflicted one, leading to misleading results. + * + * The commit timestamp of the deleting transaction is used to determine which + * tuple was deleted most recently. + */ +bool +RelationFindDeletedTupleInfoSeq(Relation rel, TupleTableSlot *searchslot, + TransactionId oldestxmin, + TransactionId *delete_xid, + RepOriginId *delete_origin, + TimestampTz *delete_time) +{ + TupleTableSlot *scanslot; + TableScanDesc scan; + TypeCacheEntry **eq; + Bitmapset *indexbitmap; + TupleDesc desc PG_USED_FOR_ASSERTS_ONLY = RelationGetDescr(rel); + + Assert(equalTupleDescs(desc, searchslot->tts_tupleDescriptor)); + + *delete_xid = InvalidTransactionId; + *delete_origin = InvalidRepOriginId; + *delete_time = 0; + + /* + * If the relation has a replica identity key or a primary key that is + * unusable for locating deleted tuples (see + * IsIndexUsableForFindingDeletedTuple), a full table scan becomes + * necessary. In such cases, comparing the entire tuple is not required, + * since the remote tuple might not include all column values. Instead, + * the indexed columns alone are sufficient to identify the target tuple + * (see logicalrep_rel_mark_updatable). + */ + indexbitmap = RelationGetIndexAttrBitmap(rel, + INDEX_ATTR_BITMAP_IDENTITY_KEY); + + /* fallback to PK if no replica identity */ + if (!indexbitmap) + indexbitmap = RelationGetIndexAttrBitmap(rel, + INDEX_ATTR_BITMAP_PRIMARY_KEY); + + eq = palloc0(sizeof(*eq) * searchslot->tts_tupleDescriptor->natts); + + /* + * Start a heap scan using SnapshotAny to identify dead tuples that are + * not visible under a standard MVCC snapshot. Tuples from transactions + * not yet committed or those just committed prior to the scan are + * excluded in update_most_recent_deletion_info(). + */ + scan = table_beginscan(rel, SnapshotAny, 0, NULL); + scanslot = table_slot_create(rel, NULL); + + table_rescan(scan, NULL); + + /* Try to find the tuple */ + while (table_scan_getnextslot(scan, ForwardScanDirection, scanslot)) + { + if (!tuples_equal(scanslot, searchslot, eq, indexbitmap)) + continue; + + update_most_recent_deletion_info(scanslot, oldestxmin, delete_xid, + delete_time, delete_origin); + } + + table_endscan(scan); + ExecDropSingleTupleTableSlot(scanslot); + + return *delete_time != 0; +} + +/* + * Similar to RelationFindDeletedTupleInfoSeq() but using index scan to locate + * the deleted tuple. + */ +bool +RelationFindDeletedTupleInfoByIndex(Relation rel, Oid idxoid, + TupleTableSlot *searchslot, + TransactionId oldestxmin, + TransactionId *delete_xid, + RepOriginId *delete_origin, + TimestampTz *delete_time) +{ + Relation idxrel; + ScanKeyData skey[INDEX_MAX_KEYS]; + int skey_attoff; + IndexScanDesc scan; + TupleTableSlot *scanslot; + TypeCacheEntry **eq = NULL; + bool isIdxSafeToSkipDuplicates; + TupleDesc desc PG_USED_FOR_ASSERTS_ONLY = RelationGetDescr(rel); + + Assert(equalTupleDescs(desc, searchslot->tts_tupleDescriptor)); + Assert(OidIsValid(idxoid)); + + *delete_xid = InvalidTransactionId; + *delete_time = 0; + *delete_origin = InvalidRepOriginId; + + isIdxSafeToSkipDuplicates = (GetRelationIdentityOrPK(rel) == idxoid); + + scanslot = table_slot_create(rel, NULL); + + idxrel = index_open(idxoid, RowExclusiveLock); + + /* Build scan key. */ + skey_attoff = build_replindex_scan_key(skey, rel, idxrel, searchslot); + + /* + * Start an index scan using SnapshotAny to identify dead tuples that are + * not visible under a standard MVCC snapshot. Tuples from transactions + * not yet committed or those just committed prior to the scan are + * excluded in update_most_recent_deletion_info(). + */ + scan = index_beginscan(rel, idxrel, SnapshotAny, NULL, skey_attoff, 0); + + index_rescan(scan, skey, skey_attoff, NULL, 0); + + /* Try to find the tuple */ + while (index_getnext_slot(scan, ForwardScanDirection, scanslot)) + { + /* + * Avoid expensive equality check if the index is primary key or + * replica identity index. + */ + if (!isIdxSafeToSkipDuplicates) + { + if (eq == NULL) + eq = palloc0(sizeof(*eq) * scanslot->tts_tupleDescriptor->natts); + + if (!tuples_equal(scanslot, searchslot, eq, NULL)) + continue; + } + + update_most_recent_deletion_info(scanslot, oldestxmin, delete_xid, + delete_time, delete_origin); + } + + index_endscan(scan); + + index_close(idxrel, NoLock); + + ExecDropSingleTupleTableSlot(scanslot); + + return *delete_time != 0; +} + /* * Find the tuple that violates the passed unique index (conflictindex). * @@ -452,6 +719,12 @@ FindConflictTuple(ResultRelInfo *resultRelInfo, EState *estate, *conflictslot = NULL; + /* + * Build additional information required to check constraints violations. + * See check_exclusion_or_unique_constraint(). + */ + BuildConflictIndexInfo(resultRelInfo, conflictindex); + retry: if (ExecCheckIndexConstraints(resultRelInfo, slot, estate, &conflictTid, &slot->tts_tid, @@ -579,10 +852,10 @@ ExecSimpleRelationInsert(ResultRelInfo *resultRelInfo, conflictindexes, false); /* - * Checks the conflict indexes to fetch the conflicting local tuple - * and reports the conflict. We perform this check here, instead of + * Checks the conflict indexes to fetch the conflicting local row and + * reports the conflict. We perform this check here, instead of * performing an additional index scan before the actual insertion and - * reporting the conflict if any conflicting tuples are found. This is + * reporting the conflict if any conflicting rows are found. This is * to avoid the overhead of executing the extra scan for each INSERT * operation, even when no conflict arises, which could introduce * significant overhead to replication, particularly in cases where @@ -640,7 +913,7 @@ ExecSimpleRelationUpdate(ResultRelInfo *resultRelInfo, resultRelInfo->ri_TrigDesc->trig_update_before_row) { if (!ExecBRUpdateTriggers(estate, epqstate, resultRelInfo, - tid, NULL, slot, NULL, NULL)) + tid, NULL, slot, NULL, NULL, false)) skip_tuple = true; /* "do nothing" */ } @@ -716,7 +989,7 @@ ExecSimpleRelationDelete(ResultRelInfo *resultRelInfo, resultRelInfo->ri_TrigDesc->trig_delete_before_row) { skip_tuple = !ExecBRDeleteTriggers(estate, epqstate, resultRelInfo, - tid, NULL, NULL, NULL, NULL); + tid, NULL, NULL, NULL, NULL, false); } if (!skip_tuple) diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 772c86e70e9bf..fdc65c2b42b33 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -147,7 +147,6 @@ CreateExecutorState(void) estate->es_top_eflags = 0; estate->es_instrument = 0; estate->es_finished = false; - estate->es_aborted = false; estate->es_exprcontexts = NIL; diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 6aa8e9c4d8af5..97455b1ed4a5b 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -31,8 +31,10 @@ #include "tcop/utility.h" #include "utils/builtins.h" #include "utils/datum.h" +#include "utils/funccache.h" #include "utils/lsyscache.h" #include "utils/memutils.h" +#include "utils/plancache.h" #include "utils/snapmgr.h" #include "utils/syscache.h" @@ -43,19 +45,20 @@ typedef struct { DestReceiver pub; /* publicly-known function pointers */ - Tuplestorestate *tstore; /* where to put result tuples */ - MemoryContext cxt; /* context containing tstore */ + Tuplestorestate *tstore; /* where to put result tuples, or NULL */ JunkFilter *filter; /* filter to convert tuple type */ } DR_sqlfunction; /* * We have an execution_state record for each query in a function. Each - * record contains a plantree for its query. If the query is currently in + * record references a plantree for its query. If the query is currently in * F_EXEC_RUN state then there's a QueryDesc too. * * The "next" fields chain together all the execution_state records generated * from a single original parsetree. (There will only be more than one in - * case of rule expansion of the original parsetree.) + * case of rule expansion of the original parsetree.) The chain structure is + * quite vestigial at this point, because we allocate the records in an array + * for ease of memory management. But we'll get rid of it some other day. */ typedef enum { @@ -74,57 +77,116 @@ typedef struct execution_state /* - * An SQLFunctionCache record is built during the first call, - * and linked to from the fn_extra field of the FmgrInfo struct. + * Data associated with a SQL-language function is kept in two main + * data structures: * - * Note that currently this has only the lifespan of the calling query. - * Someday we should rewrite this code to use plancache.c to save parse/plan - * results for longer than that. + * 1. SQLFunctionHashEntry is a long-lived (potentially session-lifespan) + * struct that holds all the info we need out of the function's pg_proc row. + * In addition it holds pointers to CachedPlanSource(s) that manage creation + * of plans for the query(s) within the function. A SQLFunctionHashEntry is + * potentially shared across multiple concurrent executions of the function, + * so it must contain no execution-specific state; but its use_count must + * reflect the number of SQLFunctionCache structs pointing at it. + * If the function's pg_proc row is updated, we throw away and regenerate + * the SQLFunctionHashEntry and subsidiary data. (Also note that if the + * function is polymorphic or used as a trigger, there is a separate + * SQLFunctionHashEntry for each usage, so that we need consider only one + * set of relevant data types.) The struct itself is in memory managed by + * funccache.c, and its subsidiary data is kept in one of two contexts: + * * pcontext ("parse context") holds the raw parse trees or Query trees + * that we read from the pg_proc row. These will be converted to + * CachedPlanSources as they are needed. Once the last one is converted, + * pcontext can be freed. + * * hcontext ("hash context") holds everything else belonging to the + * SQLFunctionHashEntry. * - * Physically, though, the data has the lifespan of the FmgrInfo that's used - * to call the function, and there are cases (particularly with indexes) - * where the FmgrInfo might survive across transactions. We cannot assume - * that the parse/plan trees are good for longer than the (sub)transaction in - * which parsing was done, so we must mark the record with the LXID/subxid of - * its creation time, and regenerate everything if that's obsolete. To avoid - * memory leakage when we do have to regenerate things, all the data is kept - * in a sub-context of the FmgrInfo's fn_mcxt. + * 2. SQLFunctionCache is subsidiary data for a single FmgrInfo struct. + * It is pointed to by the fn_extra field of the FmgrInfo struct, and is + * always allocated in the FmgrInfo's fn_mcxt. It holds a reference to + * the CachedPlan for the current query, and other execution-specific data. + * A few subsidiary items such as the ParamListInfo object are also kept + * directly in fn_mcxt (which is also called fcontext here). But most + * subsidiary data is in jfcontext or subcontext. */ -typedef struct + +typedef struct SQLFunctionHashEntry { + CachedFunction cfunc; /* fields managed by funccache.c */ + char *fname; /* function name (for error msgs) */ char *src; /* function body text (for error msgs) */ SQLFunctionParseInfoPtr pinfo; /* data for parser callback hooks */ + int16 *argtyplen; /* lengths of the input argument types */ Oid rettype; /* actual return type */ int16 typlen; /* length of the return type */ bool typbyval; /* true if return type is pass by value */ bool returnsSet; /* true if returning multiple rows */ bool returnsTuple; /* true if returning whole tuple result */ - bool shutdown_reg; /* true if registered shutdown callback */ bool readonly_func; /* true to run in "read only" mode */ + char prokind; /* prokind from pg_proc row */ + + TupleDesc rettupdesc; /* result tuple descriptor */ + + List *source_list; /* RawStmts or Queries read from pg_proc */ + int num_queries; /* original length of source_list */ + bool raw_source; /* true if source_list contains RawStmts */ + + List *plansource_list; /* CachedPlanSources for fn's queries */ + + MemoryContext pcontext; /* memory context holding source_list */ + MemoryContext hcontext; /* memory context holding all else */ +} SQLFunctionHashEntry; + +typedef struct SQLFunctionCache +{ + SQLFunctionHashEntry *func; /* associated SQLFunctionHashEntry */ + + bool active; /* are we executing this cache entry? */ + bool lazyEvalOK; /* true if lazyEval is safe */ + bool shutdown_reg; /* true if registered shutdown callback */ bool lazyEval; /* true if using lazyEval for result query */ + bool randomAccess; /* true if tstore needs random access */ + bool ownSubcontext; /* is subcontext really a separate context? */ ParamListInfo paramLI; /* Param list representing current args */ - Tuplestorestate *tstore; /* where we accumulate result tuples */ + Tuplestorestate *tstore; /* where we accumulate result for a SRF */ + MemoryContext tscontext; /* memory context that tstore should be in */ JunkFilter *junkFilter; /* will be NULL if function returns VOID */ + int jf_generation; /* tracks whether junkFilter is up-to-date */ /* - * func_state is a List of execution_state records, each of which is the - * first for its original parsetree, with any additional records chained - * to it via the "next" fields. This sublist structure is needed to keep - * track of where the original query boundaries are. + * While executing a particular query within the function, cplan is the + * CachedPlan we've obtained for that query, and eslist is a chain of + * execution_state records for the individual plans within the CachedPlan. + * If eslist is not NULL at entry to fmgr_sql, then we are resuming + * execution of a lazyEval-mode set-returning function. + * + * next_query_index is the 0-based index of the next CachedPlanSource to + * get a CachedPlan from. */ - List *func_state; + CachedPlan *cplan; /* Plan for current query, if any */ + ResourceOwner cowner; /* CachedPlan is registered with this owner */ + int next_query_index; /* index of next CachedPlanSource to run */ + + execution_state *eslist; /* chain of execution_state records */ + execution_state *esarray; /* storage for eslist */ + int esarray_len; /* allocated length of esarray[] */ + + /* if positive, this is the 1-based index of the query we're processing */ + int error_query_index; MemoryContext fcontext; /* memory context holding this struct and all * subsidiary data */ + MemoryContext jfcontext; /* subsidiary memory context holding + * junkFilter, result slot, and related data */ + MemoryContext subcontext; /* subsidiary memory context for sub-executor */ - LocalTransactionId lxid; /* lxid in which cache was made */ - SubTransactionId subxid; /* subxid in which cache was made */ + /* Callback to release our use-count on the SQLFunctionHashEntry */ + MemoryContextCallback mcb; } SQLFunctionCache; typedef SQLFunctionCache *SQLFunctionCachePtr; @@ -138,26 +200,39 @@ static Node *sql_fn_make_param(SQLFunctionParseInfoPtr pinfo, int paramno, int location); static Node *sql_fn_resolve_param_name(SQLFunctionParseInfoPtr pinfo, const char *paramname, int location); -static List *init_execution_state(List *queryTree_list, - SQLFunctionCachePtr fcache, - bool lazyEvalOK); -static void init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK); +static SQLFunctionCache *init_sql_fcache(FunctionCallInfo fcinfo, + bool lazyEvalOK); +static bool init_execution_state(SQLFunctionCachePtr fcache); +static void prepare_next_query(SQLFunctionHashEntry *func); +static void sql_compile_callback(FunctionCallInfo fcinfo, + HeapTuple procedureTuple, + const CachedFunctionHashKey *hashkey, + CachedFunction *cfunc, + bool forValidator); +static void sql_delete_callback(CachedFunction *cfunc); +static void sql_postrewrite_callback(List *querytree_list, void *arg); static void postquel_start(execution_state *es, SQLFunctionCachePtr fcache); static bool postquel_getnext(execution_state *es, SQLFunctionCachePtr fcache); -static void postquel_end(execution_state *es); +static void postquel_end(execution_state *es, SQLFunctionCachePtr fcache); static void postquel_sub_params(SQLFunctionCachePtr fcache, FunctionCallInfo fcinfo); static Datum postquel_get_single_result(TupleTableSlot *slot, FunctionCallInfo fcinfo, - SQLFunctionCachePtr fcache, - MemoryContext resultcontext); + SQLFunctionCachePtr fcache); +static void sql_compile_error_callback(void *arg); static void sql_exec_error_callback(void *arg); static void ShutdownSQLFunction(Datum arg); +static void RemoveSQLFunctionCache(void *arg); +static void check_sql_fn_statement(List *queryTreeList); +static bool check_sql_stmt_retval(List *queryTreeList, + Oid rettype, TupleDesc rettupdesc, + char prokind, bool insertDroppedCols); static bool coerce_fn_result_column(TargetEntry *src_tle, Oid res_type, int32 res_typmod, bool tlist_is_modifiable, List **upper_tlist, bool *upper_tlist_nontrivial); +static List *get_sql_fn_result_tlist(List *queryTreeList); static void sqlfunction_startup(DestReceiver *self, int operation, TupleDesc typeinfo); static bool sqlfunction_receive(TupleTableSlot *slot, DestReceiver *self); static void sqlfunction_shutdown(DestReceiver *self); @@ -455,99 +530,339 @@ sql_fn_resolve_param_name(SQLFunctionParseInfoPtr pinfo, } /* - * Set up the per-query execution_state records for a SQL function. + * Initialize the SQLFunctionCache for a SQL function + */ +static SQLFunctionCache * +init_sql_fcache(FunctionCallInfo fcinfo, bool lazyEvalOK) +{ + FmgrInfo *finfo = fcinfo->flinfo; + SQLFunctionHashEntry *func; + SQLFunctionCache *fcache; + + /* + * If this is the first execution for this FmgrInfo, set up a cache struct + * (initially containing null pointers). The cache must live as long as + * the FmgrInfo, so it goes in fn_mcxt. Also set up a memory context + * callback that will be invoked when fn_mcxt is deleted. + */ + fcache = finfo->fn_extra; + if (fcache == NULL) + { + fcache = (SQLFunctionCache *) + MemoryContextAllocZero(finfo->fn_mcxt, sizeof(SQLFunctionCache)); + fcache->fcontext = finfo->fn_mcxt; + fcache->mcb.func = RemoveSQLFunctionCache; + fcache->mcb.arg = fcache; + MemoryContextRegisterResetCallback(finfo->fn_mcxt, &fcache->mcb); + finfo->fn_extra = fcache; + } + + /* + * If the SQLFunctionCache is marked as active, we must have errored out + * of a prior execution. Reset state. (It might seem that we could also + * reach this during recursive invocation of a SQL function, but we won't + * because that case won't involve re-use of the same FmgrInfo.) + */ + if (fcache->active) + { + /* + * In general, this stanza should clear all the same fields that + * ShutdownSQLFunction would. Note we must clear fcache->cplan + * without doing ReleaseCachedPlan, because error cleanup from the + * prior execution would have taken care of releasing that plan. + * Likewise, if tstore is still set then it is pointing at garbage. + */ + fcache->cplan = NULL; + fcache->eslist = NULL; + fcache->tstore = NULL; + fcache->shutdown_reg = false; + fcache->active = false; + } + + /* + * If we are resuming execution of a set-returning function, just keep + * using the same cache. We do not ask funccache.c to re-validate the + * SQLFunctionHashEntry: we want to run to completion using the function's + * initial definition. + */ + if (fcache->eslist != NULL) + { + Assert(fcache->func != NULL); + return fcache; + } + + /* + * Look up, or re-validate, the long-lived hash entry. Make the hash key + * depend on the result of get_call_result_type() when that's composite, + * so that we can safely assume that we'll build a new hash entry if the + * composite rowtype changes. + */ + func = (SQLFunctionHashEntry *) + cached_function_compile(fcinfo, + (CachedFunction *) fcache->func, + sql_compile_callback, + sql_delete_callback, + sizeof(SQLFunctionHashEntry), + true, + false); + + /* + * Install the hash pointer in the SQLFunctionCache, and increment its use + * count to reflect that. If cached_function_compile gave us back a + * different hash entry than we were using before, we must decrement that + * one's use count. + */ + if (func != fcache->func) + { + if (fcache->func != NULL) + { + Assert(fcache->func->cfunc.use_count > 0); + fcache->func->cfunc.use_count--; + } + fcache->func = func; + func->cfunc.use_count++; + /* Assume we need to rebuild the junkFilter */ + fcache->junkFilter = NULL; + } + + /* + * We're beginning a new execution of the function, so convert params to + * appropriate format. + */ + postquel_sub_params(fcache, fcinfo); + + /* Also reset lazyEval state for the new execution. */ + fcache->lazyEvalOK = lazyEvalOK; + fcache->lazyEval = false; + + /* Also reset data about where we are in the function. */ + fcache->eslist = NULL; + fcache->next_query_index = 0; + fcache->error_query_index = 0; + + return fcache; +} + +/* + * Set up the per-query execution_state records for the next query within + * the SQL function. * - * The input is a List of Lists of parsed and rewritten, but not planned, - * querytrees. The sublist structure denotes the original query boundaries. + * Returns true if successful, false if there are no more queries. */ -static List * -init_execution_state(List *queryTree_list, - SQLFunctionCachePtr fcache, - bool lazyEvalOK) +static bool +init_execution_state(SQLFunctionCachePtr fcache) { - List *eslist = NIL; + CachedPlanSource *plansource; + execution_state *preves = NULL; execution_state *lasttages = NULL; - ListCell *lc1; + int nstmts; + ListCell *lc; - foreach(lc1, queryTree_list) + /* + * Clean up after previous query, if there was one. + */ + if (fcache->cplan) { - List *qtlist = lfirst_node(List, lc1); - execution_state *firstes = NULL; - execution_state *preves = NULL; - ListCell *lc2; + ReleaseCachedPlan(fcache->cplan, fcache->cowner); + fcache->cplan = NULL; + } + fcache->eslist = NULL; - foreach(lc2, qtlist) - { - Query *queryTree = lfirst_node(Query, lc2); - PlannedStmt *stmt; - execution_state *newes; + /* + * Get the next CachedPlanSource, or stop if there are no more. We might + * need to create the next CachedPlanSource; if so, advance + * error_query_index first, so that errors detected in prepare_next_query + * are blamed on the right statement. + */ + if (fcache->next_query_index >= list_length(fcache->func->plansource_list)) + { + if (fcache->next_query_index >= fcache->func->num_queries) + return false; + fcache->error_query_index++; + prepare_next_query(fcache->func); + } + else + fcache->error_query_index++; - /* Plan the query if needed */ - if (queryTree->commandType == CMD_UTILITY) - { - /* Utility commands require no planning. */ - stmt = makeNode(PlannedStmt); - stmt->commandType = CMD_UTILITY; - stmt->canSetTag = queryTree->canSetTag; - stmt->utilityStmt = queryTree->utilityStmt; - stmt->stmt_location = queryTree->stmt_location; - stmt->stmt_len = queryTree->stmt_len; - stmt->queryId = queryTree->queryId; - } - else - stmt = pg_plan_query(queryTree, - fcache->src, - CURSOR_OPT_PARALLEL_OK, - NULL); + plansource = (CachedPlanSource *) list_nth(fcache->func->plansource_list, + fcache->next_query_index); + fcache->next_query_index++; - /* - * Precheck all commands for validity in a function. This should - * generally match the restrictions spi.c applies. - */ - if (stmt->commandType == CMD_UTILITY) - { - if (IsA(stmt->utilityStmt, CopyStmt) && - ((CopyStmt *) stmt->utilityStmt)->filename == NULL) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot COPY to/from client in an SQL function"))); + /* + * Generate plans for the query or queries within this CachedPlanSource. + * Register the CachedPlan with the current resource owner. (Saving + * cowner here is mostly paranoia, but this way we needn't assume that + * CurrentResourceOwner will be the same when ShutdownSQLFunction runs.) + */ + fcache->cowner = CurrentResourceOwner; + fcache->cplan = GetCachedPlan(plansource, + fcache->paramLI, + fcache->cowner, + NULL); - if (IsA(stmt->utilityStmt, TransactionStmt)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - /* translator: %s is a SQL statement name */ - errmsg("%s is not allowed in an SQL function", - CreateCommandName(stmt->utilityStmt)))); - } + /* + * If necessary, make esarray[] bigger to hold the needed state. + */ + nstmts = list_length(fcache->cplan->stmt_list); + if (nstmts > fcache->esarray_len) + { + if (fcache->esarray == NULL) + fcache->esarray = (execution_state *) + MemoryContextAlloc(fcache->fcontext, + sizeof(execution_state) * nstmts); + else + fcache->esarray = repalloc_array(fcache->esarray, + execution_state, nstmts); + fcache->esarray_len = nstmts; + } + + /* + * Build execution_state list to match the number of contained plans. + */ + foreach(lc, fcache->cplan->stmt_list) + { + PlannedStmt *stmt = lfirst_node(PlannedStmt, lc); + execution_state *newes; + + /* + * Precheck all commands for validity in a function. This should + * generally match the restrictions spi.c applies. + */ + if (stmt->commandType == CMD_UTILITY) + { + if (IsA(stmt->utilityStmt, CopyStmt) && + ((CopyStmt *) stmt->utilityStmt)->filename == NULL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot COPY to/from client in an SQL function"))); - if (fcache->readonly_func && !CommandIsReadOnly(stmt)) + if (IsA(stmt->utilityStmt, TransactionStmt)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /* translator: %s is a SQL statement name */ - errmsg("%s is not allowed in a non-volatile function", - CreateCommandName((Node *) stmt)))); + errmsg("%s is not allowed in an SQL function", + CreateCommandName(stmt->utilityStmt)))); + } - /* OK, build the execution_state for this query */ - newes = (execution_state *) palloc(sizeof(execution_state)); - if (preves) - preves->next = newes; - else - firstes = newes; + if (fcache->func->readonly_func && !CommandIsReadOnly(stmt)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /* translator: %s is a SQL statement name */ + errmsg("%s is not allowed in a non-volatile function", + CreateCommandName((Node *) stmt)))); + + /* OK, build the execution_state for this query */ + newes = &fcache->esarray[foreach_current_index(lc)]; + if (preves) + preves->next = newes; + else + fcache->eslist = newes; - newes->next = NULL; - newes->status = F_EXEC_START; - newes->setsResult = false; /* might change below */ - newes->lazyEval = false; /* might change below */ - newes->stmt = stmt; - newes->qd = NULL; + newes->next = NULL; + newes->status = F_EXEC_START; + newes->setsResult = false; /* might change below */ + newes->lazyEval = false; /* might change below */ + newes->stmt = stmt; + newes->qd = NULL; - if (queryTree->canSetTag) - lasttages = newes; + if (stmt->canSetTag) + lasttages = newes; - preves = newes; - } + preves = newes; + } + + /* + * If this isn't the last CachedPlanSource, we're done here. Otherwise, + * we need to prepare information about how to return the results. + */ + if (fcache->next_query_index < fcache->func->num_queries) + return true; + + /* + * Construct a JunkFilter we can use to coerce the returned rowtype to the + * desired form, unless the result type is VOID, in which case there's + * nothing to coerce to. (XXX Frequently, the JunkFilter isn't doing + * anything very interesting, but much of this module expects it to be + * there anyway.) + * + * Normally we can re-use the JunkFilter across executions, but if the + * plan for the last CachedPlanSource changed, we'd better rebuild it. + * + * The JunkFilter, its result slot, and its tupledesc are kept in a + * subsidiary memory context so that we can free them easily when needed. + */ + if (fcache->func->rettype != VOIDOID && + (fcache->junkFilter == NULL || + fcache->jf_generation != fcache->cplan->generation)) + { + TupleTableSlot *slot; + List *resulttlist; + MemoryContext oldcontext; + + /* Create or reset the jfcontext */ + if (fcache->jfcontext == NULL) + fcache->jfcontext = AllocSetContextCreate(fcache->fcontext, + "SQL function junkfilter", + ALLOCSET_SMALL_SIZES); + else + MemoryContextReset(fcache->jfcontext); + oldcontext = MemoryContextSwitchTo(fcache->jfcontext); + + slot = MakeSingleTupleTableSlot(NULL, &TTSOpsMinimalTuple); + + /* + * Re-fetch the (possibly modified) output tlist of the final + * statement. By this point, we should have thrown an error if there + * is not one. + */ + resulttlist = get_sql_fn_result_tlist(plansource->query_list); + + /* + * If the result is composite, *and* we are returning the whole tuple + * result, we need to insert nulls for any dropped columns. In the + * single-column-result case, there might be dropped columns within + * the composite column value, but it's not our problem here. There + * should be no resjunk entries in resulttlist, so in the second case + * the JunkFilter is certainly a no-op. + */ + if (fcache->func->rettupdesc && fcache->func->returnsTuple) + fcache->junkFilter = ExecInitJunkFilterConversion(resulttlist, + fcache->func->rettupdesc, + slot); + else + fcache->junkFilter = ExecInitJunkFilter(resulttlist, slot); + + /* + * The resulttlist tree belongs to the plancache and might disappear + * underneath us due to plancache invalidation. While we could + * forestall that by copying it, that'd just be a waste of cycles, + * because the junkfilter doesn't need it anymore. (It'd only be used + * by ExecFindJunkAttribute(), which we don't use here.) To ensure + * there's not a dangling pointer laying about, clear the junkFilter's + * pointer. + */ + fcache->junkFilter->jf_targetList = NIL; + + /* Make sure output rowtype is properly blessed */ + if (fcache->func->returnsTuple) + BlessTupleDesc(fcache->junkFilter->jf_resultSlot->tts_tupleDescriptor); - eslist = lappend(eslist, firstes); + /* Mark the JunkFilter as up-to-date */ + fcache->jf_generation = fcache->cplan->generation; + + MemoryContextSwitchTo(oldcontext); + } + + if (fcache->func->returnsSet && + !fcache->func->returnsTuple && + type_is_rowtype(fcache->func->rettype)) + { + /* + * Returning rowtype as if it were scalar --- materialize won't work. + * Right now it's sufficient to override any caller preference for + * materialize mode, but this might need more work in future. + */ + fcache->lazyEvalOK = true; } /* @@ -567,69 +882,212 @@ init_execution_state(List *queryTree_list, if (lasttages && fcache->junkFilter) { lasttages->setsResult = true; - if (lazyEvalOK && + if (fcache->lazyEvalOK && lasttages->stmt->commandType == CMD_SELECT && !lasttages->stmt->hasModifyingCTE) fcache->lazyEval = lasttages->lazyEval = true; } - return eslist; + return true; } /* - * Initialize the SQLFunctionCache for a SQL function + * Convert the SQL function's next query from source form (RawStmt or Query) + * into a CachedPlanSource. If it's the last query, also determine whether + * the function returnsTuple. */ static void -init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) +prepare_next_query(SQLFunctionHashEntry *func) { - FmgrInfo *finfo = fcinfo->flinfo; - Oid foid = finfo->fn_oid; - MemoryContext fcontext; + int qindex; + bool islast; + CachedPlanSource *plansource; + List *queryTree_list; MemoryContext oldcontext; + + /* Which query should we process? */ + qindex = list_length(func->plansource_list); + Assert(qindex < func->num_queries); /* else caller error */ + islast = (qindex + 1 >= func->num_queries); + + /* + * Parse and/or rewrite the query, creating a CachedPlanSource that holds + * a copy of the original parsetree. Note fine point: we make a copy of + * each original parsetree to ensure that the source_list in pcontext + * remains unmodified during parse analysis and rewrite. This is normally + * unnecessary, but we have to do it in case an error is raised during + * parse analysis. Otherwise, a fresh attempt to execute the function + * will arrive back here and try to work from a corrupted source_list. + */ + if (!func->raw_source) + { + /* Source queries are already parse-analyzed */ + Query *parsetree = list_nth_node(Query, func->source_list, qindex); + + parsetree = copyObject(parsetree); + plansource = CreateCachedPlanForQuery(parsetree, + func->src, + CreateCommandTag((Node *) parsetree)); + AcquireRewriteLocks(parsetree, true, false); + queryTree_list = pg_rewrite_query(parsetree); + } + else + { + /* Source queries are raw parsetrees */ + RawStmt *parsetree = list_nth_node(RawStmt, func->source_list, qindex); + + parsetree = copyObject(parsetree); + plansource = CreateCachedPlan(parsetree, + func->src, + CreateCommandTag(parsetree->stmt)); + queryTree_list = pg_analyze_and_rewrite_withcb(parsetree, + func->src, + (ParserSetupHook) sql_fn_parser_setup, + func->pinfo, + NULL); + } + + /* + * Check that there are no statements we don't want to allow. + */ + check_sql_fn_statement(queryTree_list); + + /* + * If this is the last query, check that the function returns the type it + * claims to. Although in simple cases this was already done when the + * function was defined, we have to recheck because database objects used + * in the function's queries might have changed type. We'd have to + * recheck anyway if the function had any polymorphic arguments. Moreover, + * check_sql_stmt_retval takes care of injecting any required column type + * coercions. (But we don't ask it to insert nulls for dropped columns; + * the junkfilter handles that.) + * + * Note: we set func->returnsTuple according to whether we are returning + * the whole tuple result or just a single column. In the latter case we + * clear returnsTuple because we need not act different from the scalar + * result case, even if it's a rowtype column. (However, we have to force + * lazy eval mode in that case; otherwise we'd need extra code to expand + * the rowtype column into multiple columns, since we have no way to + * notify the caller that it should do that.) + */ + if (islast) + func->returnsTuple = check_sql_stmt_retval(queryTree_list, + func->rettype, + func->rettupdesc, + func->prokind, + false); + + /* + * Now that check_sql_stmt_retval has done its thing, we can complete plan + * cache entry creation. + */ + CompleteCachedPlan(plansource, + queryTree_list, + NULL, + NULL, + 0, + (ParserSetupHook) sql_fn_parser_setup, + func->pinfo, + CURSOR_OPT_PARALLEL_OK | CURSOR_OPT_NO_SCROLL, + false); + + /* + * Install post-rewrite hook. Its arg is the hash entry if this is the + * last statement, else NULL. + */ + SetPostRewriteHook(plansource, + sql_postrewrite_callback, + islast ? func : NULL); + + /* + * While the CachedPlanSources can take care of themselves, our List + * pointing to them had better be in the hcontext. + */ + oldcontext = MemoryContextSwitchTo(func->hcontext); + func->plansource_list = lappend(func->plansource_list, plansource); + MemoryContextSwitchTo(oldcontext); + + /* + * As soon as we've linked the CachedPlanSource into the list, mark it as + * "saved". + */ + SaveCachedPlan(plansource); + + /* + * Finally, if this was the last statement, we can flush the pcontext with + * the original query trees; they're all safely copied into + * CachedPlanSources now. + */ + if (islast) + { + func->source_list = NIL; /* avoid dangling pointer */ + MemoryContextDelete(func->pcontext); + func->pcontext = NULL; + } +} + +/* + * Fill a new SQLFunctionHashEntry. + * + * The passed-in "cfunc" struct is expected to be zeroes, except + * for the CachedFunction fields, which we don't touch here. + * + * We expect to be called in a short-lived memory context (typically a + * query's per-tuple context). Data that is to be part of the hash entry + * must be copied into the hcontext or pcontext as appropriate. + */ +static void +sql_compile_callback(FunctionCallInfo fcinfo, + HeapTuple procedureTuple, + const CachedFunctionHashKey *hashkey, + CachedFunction *cfunc, + bool forValidator) +{ + SQLFunctionHashEntry *func = (SQLFunctionHashEntry *) cfunc; + Form_pg_proc procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple); + ErrorContextCallback comperrcontext; + MemoryContext hcontext; + MemoryContext pcontext; + MemoryContext oldcontext = CurrentMemoryContext; Oid rettype; TupleDesc rettupdesc; - HeapTuple procedureTuple; - Form_pg_proc procedureStruct; - SQLFunctionCachePtr fcache; - List *queryTree_list; - List *resulttlist; - ListCell *lc; Datum tmp; bool isNull; + List *source_list; /* - * Create memory context that holds all the SQLFunctionCache data. It - * must be a child of whatever context holds the FmgrInfo. + * Setup error traceback support for ereport() during compile. (This is + * mainly useful for reporting parse errors from pg_parse_query.) */ - fcontext = AllocSetContextCreate(finfo->fn_mcxt, - "SQL function", - ALLOCSET_DEFAULT_SIZES); - - oldcontext = MemoryContextSwitchTo(fcontext); + comperrcontext.callback = sql_compile_error_callback; + comperrcontext.arg = func; + comperrcontext.previous = error_context_stack; + error_context_stack = &comperrcontext; /* - * Create the struct proper, link it to fcontext and fn_extra. Once this - * is done, we'll be able to recover the memory after failure, even if the - * FmgrInfo is long-lived. + * Create the hash entry's memory context. For now it's a child of the + * caller's context, so that it will go away if we fail partway through. */ - fcache = (SQLFunctionCachePtr) palloc0(sizeof(SQLFunctionCache)); - fcache->fcontext = fcontext; - finfo->fn_extra = fcache; + hcontext = AllocSetContextCreate(CurrentMemoryContext, + "SQL function", + ALLOCSET_SMALL_SIZES); /* - * get the procedure tuple corresponding to the given function Oid + * Create the not-as-long-lived pcontext. We make this a child of + * hcontext so that it doesn't require separate deletion. */ - procedureTuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(foid)); - if (!HeapTupleIsValid(procedureTuple)) - elog(ERROR, "cache lookup failed for function %u", foid); - procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple); + pcontext = AllocSetContextCreate(hcontext, + "SQL function parse trees", + ALLOCSET_SMALL_SIZES); + func->pcontext = pcontext; /* * copy function name immediately for use by error reporting callback, and * for use as memory context identifier */ - fcache->fname = pstrdup(NameStr(procedureStruct->proname)); - MemoryContextSetIdentifier(fcontext, fcache->fname); + func->fname = MemoryContextStrdup(hcontext, + NameStr(procedureStruct->proname)); + MemoryContextSetIdentifier(hcontext, func->fname); /* * Resolve any polymorphism, obtaining the actual result type, and the @@ -637,176 +1095,180 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) */ (void) get_call_result_type(fcinfo, &rettype, &rettupdesc); - fcache->rettype = rettype; + func->rettype = rettype; + if (rettupdesc) + { + MemoryContextSwitchTo(hcontext); + func->rettupdesc = CreateTupleDescCopy(rettupdesc); + MemoryContextSwitchTo(oldcontext); + } /* Fetch the typlen and byval info for the result type */ - get_typlenbyval(rettype, &fcache->typlen, &fcache->typbyval); + get_typlenbyval(rettype, &func->typlen, &func->typbyval); /* Remember whether we're returning setof something */ - fcache->returnsSet = procedureStruct->proretset; + func->returnsSet = procedureStruct->proretset; /* Remember if function is STABLE/IMMUTABLE */ - fcache->readonly_func = + func->readonly_func = (procedureStruct->provolatile != PROVOLATILE_VOLATILE); + /* Remember routine kind */ + func->prokind = procedureStruct->prokind; + /* * We need the actual argument types to pass to the parser. Also make * sure that parameter symbols are considered to have the function's * resolved input collation. */ - fcache->pinfo = prepare_sql_fn_parse_info(procedureTuple, - finfo->fn_expr, - collation); + MemoryContextSwitchTo(hcontext); + func->pinfo = prepare_sql_fn_parse_info(procedureTuple, + fcinfo->flinfo->fn_expr, + PG_GET_COLLATION()); + MemoryContextSwitchTo(oldcontext); + + /* + * Now that we have the resolved argument types, collect their typlens for + * use in postquel_sub_params. + */ + func->argtyplen = (int16 *) + MemoryContextAlloc(hcontext, func->pinfo->nargs * sizeof(int16)); + for (int i = 0; i < func->pinfo->nargs; i++) + func->argtyplen[i] = get_typlen(func->pinfo->argtypes[i]); /* * And of course we need the function body text. */ tmp = SysCacheGetAttrNotNull(PROCOID, procedureTuple, Anum_pg_proc_prosrc); - fcache->src = TextDatumGetCString(tmp); + func->src = MemoryContextStrdup(hcontext, + TextDatumGetCString(tmp)); /* If we have prosqlbody, pay attention to that not prosrc. */ tmp = SysCacheGetAttr(PROCOID, procedureTuple, Anum_pg_proc_prosqlbody, &isNull); - - /* - * Parse and rewrite the queries in the function text. Use sublists to - * keep track of the original query boundaries. - * - * Note: since parsing and planning is done in fcontext, we will generate - * a lot of cruft that lives as long as the fcache does. This is annoying - * but we'll not worry about it until the module is rewritten to use - * plancache.c. - */ - queryTree_list = NIL; if (!isNull) { + /* Source queries are already parse-analyzed */ Node *n; - List *stored_query_list; n = stringToNode(TextDatumGetCString(tmp)); if (IsA(n, List)) - stored_query_list = linitial_node(List, castNode(List, n)); + source_list = linitial_node(List, castNode(List, n)); else - stored_query_list = list_make1(n); - - foreach(lc, stored_query_list) - { - Query *parsetree = lfirst_node(Query, lc); - List *queryTree_sublist; - - AcquireRewriteLocks(parsetree, true, false); - queryTree_sublist = pg_rewrite_query(parsetree); - queryTree_list = lappend(queryTree_list, queryTree_sublist); - } + source_list = list_make1(n); + func->raw_source = false; } else { - List *raw_parsetree_list; - - raw_parsetree_list = pg_parse_query(fcache->src); - - foreach(lc, raw_parsetree_list) - { - RawStmt *parsetree = lfirst_node(RawStmt, lc); - List *queryTree_sublist; - - queryTree_sublist = pg_analyze_and_rewrite_withcb(parsetree, - fcache->src, - (ParserSetupHook) sql_fn_parser_setup, - fcache->pinfo, - NULL); - queryTree_list = lappend(queryTree_list, queryTree_sublist); - } + /* Source queries are raw parsetrees */ + source_list = pg_parse_query(func->src); + func->raw_source = true; } /* - * Check that there are no statements we don't want to allow. + * Note: we must save the number of queries so that we'll still remember + * how many there are after we discard source_list. */ - check_sql_fn_statements(queryTree_list); + func->num_queries = list_length(source_list); /* - * Check that the function returns the type it claims to. Although in - * simple cases this was already done when the function was defined, we - * have to recheck because database objects used in the function's queries - * might have changed type. We'd have to recheck anyway if the function - * had any polymorphic arguments. Moreover, check_sql_fn_retval takes - * care of injecting any required column type coercions. (But we don't - * ask it to insert nulls for dropped columns; the junkfilter handles - * that.) - * - * Note: we set fcache->returnsTuple according to whether we are returning - * the whole tuple result or just a single column. In the latter case we - * clear returnsTuple because we need not act different from the scalar - * result case, even if it's a rowtype column. (However, we have to force - * lazy eval mode in that case; otherwise we'd need extra code to expand - * the rowtype column into multiple columns, since we have no way to - * notify the caller that it should do that.) + * Edge case: empty function body is OK only if it returns VOID. Normally + * we validate that the last statement returns the right thing in + * check_sql_stmt_retval, but we'll never reach that if there's no last + * statement. */ - fcache->returnsTuple = check_sql_fn_retval(queryTree_list, - rettype, - rettupdesc, - procedureStruct->prokind, - false, - &resulttlist); + if (func->num_queries == 0 && rettype != VOIDOID) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("return type mismatch in function declared to return %s", + format_type_be(rettype)), + errdetail("Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING."))); + + /* Save the source trees in pcontext for now. */ + MemoryContextSwitchTo(pcontext); + func->source_list = copyObject(source_list); + MemoryContextSwitchTo(oldcontext); /* - * Construct a JunkFilter we can use to coerce the returned rowtype to the - * desired form, unless the result type is VOID, in which case there's - * nothing to coerce to. (XXX Frequently, the JunkFilter isn't doing - * anything very interesting, but much of this module expects it to be - * there anyway.) + * We now have a fully valid hash entry, so reparent hcontext under + * CacheMemoryContext to make all the subsidiary data long-lived, and only + * then install the hcontext link so that sql_delete_callback will know to + * delete it. */ - if (rettype != VOIDOID) - { - TupleTableSlot *slot = MakeSingleTupleTableSlot(NULL, - &TTSOpsMinimalTuple); + MemoryContextSetParent(hcontext, CacheMemoryContext); + func->hcontext = hcontext; - /* - * If the result is composite, *and* we are returning the whole tuple - * result, we need to insert nulls for any dropped columns. In the - * single-column-result case, there might be dropped columns within - * the composite column value, but it's not our problem here. There - * should be no resjunk entries in resulttlist, so in the second case - * the JunkFilter is certainly a no-op. - */ - if (rettupdesc && fcache->returnsTuple) - fcache->junkFilter = ExecInitJunkFilterConversion(resulttlist, - rettupdesc, - slot); - else - fcache->junkFilter = ExecInitJunkFilter(resulttlist, slot); - } + error_context_stack = comperrcontext.previous; +} - if (fcache->returnsTuple) - { - /* Make sure output rowtype is properly blessed */ - BlessTupleDesc(fcache->junkFilter->jf_resultSlot->tts_tupleDescriptor); - } - else if (fcache->returnsSet && type_is_rowtype(fcache->rettype)) +/* + * Deletion callback used by funccache.c. + * + * Free any free-able subsidiary data of cfunc, but not the + * struct CachedFunction itself. + */ +static void +sql_delete_callback(CachedFunction *cfunc) +{ + SQLFunctionHashEntry *func = (SQLFunctionHashEntry *) cfunc; + ListCell *lc; + + /* Release the CachedPlanSources */ + foreach(lc, func->plansource_list) { - /* - * Returning rowtype as if it were scalar --- materialize won't work. - * Right now it's sufficient to override any caller preference for - * materialize mode, but to add more smarts in init_execution_state - * about this, we'd probably need a three-way flag instead of bool. - */ - lazyEvalOK = true; - } + CachedPlanSource *plansource = (CachedPlanSource *) lfirst(lc); - /* Finally, plan the queries */ - fcache->func_state = init_execution_state(queryTree_list, - fcache, - lazyEvalOK); + DropCachedPlan(plansource); + } + func->plansource_list = NIL; - /* Mark fcache with time of creation to show it's valid */ - fcache->lxid = MyProc->vxid.lxid; - fcache->subxid = GetCurrentSubTransactionId(); + /* + * If we have an hcontext, free it, thereby getting rid of all subsidiary + * data. (If we still have a pcontext, this gets rid of that too.) + */ + if (func->hcontext) + MemoryContextDelete(func->hcontext); + func->hcontext = NULL; +} - ReleaseSysCache(procedureTuple); +/* + * Post-rewrite callback used by plancache.c. + * + * This must match the processing that prepare_next_query() does between + * rewriting and calling CompleteCachedPlan(). + */ +static void +sql_postrewrite_callback(List *querytree_list, void *arg) +{ + /* + * Check that there are no statements we don't want to allow. (Presently, + * there's no real point in this because the result can't change from what + * we saw originally. But it's cheap and maybe someday it will matter.) + */ + check_sql_fn_statement(querytree_list); - MemoryContextSwitchTo(oldcontext); + /* + * If this is the last query, we must re-do what check_sql_stmt_retval did + * to its targetlist. Also check that returnsTuple didn't change (it + * probably cannot, but be cautious). + */ + if (arg != NULL) + { + SQLFunctionHashEntry *func = (SQLFunctionHashEntry *) arg; + bool returnsTuple; + + returnsTuple = check_sql_stmt_retval(querytree_list, + func->rettype, + func->rettupdesc, + func->prokind, + false); + if (returnsTuple != func->returnsTuple) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cached plan must not change result type"))); + } } /* Start up execution of one execution_state node */ @@ -814,6 +1276,7 @@ static void postquel_start(execution_state *es, SQLFunctionCachePtr fcache) { DestReceiver *dest; + MemoryContext oldcontext = CurrentMemoryContext; Assert(es->qd == NULL); @@ -821,8 +1284,65 @@ postquel_start(execution_state *es, SQLFunctionCachePtr fcache) Assert(ActiveSnapshotSet()); /* - * If this query produces the function result, send its output to the - * tuplestore; else discard any output. + * In lazyEval mode for a SRF, we must run the sub-executor in a child of + * fcontext, so that it can survive across multiple calls to fmgr_sql. + * (XXX in the case of a long-lived FmgrInfo, this policy potentially + * causes memory leakage, but it's not very clear where we could keep + * stuff instead. Fortunately, there are few if any cases where + * set-returning functions are invoked via FmgrInfos that would outlive + * the calling query.) Otherwise, we're going to run it to completion + * before exiting fmgr_sql, so it can perfectly well run in the caller's + * context. + */ + if (es->lazyEval && fcache->func->returnsSet) + { + fcache->subcontext = AllocSetContextCreate(fcache->fcontext, + "SQL function execution", + ALLOCSET_DEFAULT_SIZES); + fcache->ownSubcontext = true; + } + else if (es->stmt->commandType == CMD_UTILITY) + { + /* + * The code path using a sub-executor is pretty good about cleaning up + * cruft, since the executor will make its own sub-context. We don't + * really need an additional layer of sub-context in that case. + * However, if this is a utility statement, it won't make its own + * sub-context, so it seems advisable to make one that we can free on + * completion. + */ + fcache->subcontext = AllocSetContextCreate(CurrentMemoryContext, + "SQL function execution", + ALLOCSET_DEFAULT_SIZES); + fcache->ownSubcontext = true; + } + else + { + fcache->subcontext = CurrentMemoryContext; + fcache->ownSubcontext = false; + } + + /* + * Build a tuplestore if needed, that is if it's a set-returning function + * and we're producing the function result without using lazyEval mode. + */ + if (es->setsResult) + { + Assert(fcache->tstore == NULL); + if (fcache->func->returnsSet && !es->lazyEval) + { + MemoryContextSwitchTo(fcache->tscontext); + fcache->tstore = tuplestore_begin_heap(fcache->randomAccess, + false, work_mem); + } + } + + /* Switch into the selected subcontext (might be a no-op) */ + MemoryContextSwitchTo(fcache->subcontext); + + /* + * If this query produces the function result, collect its output using + * our custom DestReceiver; else discard any output. */ if (es->setsResult) { @@ -832,16 +1352,17 @@ postquel_start(execution_state *es, SQLFunctionCachePtr fcache) /* pass down the needed info to the dest receiver routines */ myState = (DR_sqlfunction *) dest; Assert(myState->pub.mydest == DestSQLFunction); - myState->tstore = fcache->tstore; - myState->cxt = CurrentMemoryContext; + myState->tstore = fcache->tstore; /* might be NULL */ myState->filter = fcache->junkFilter; + + /* Make very sure the junkfilter's result slot is empty */ + ExecClearTuple(fcache->junkFilter->jf_resultSlot); } else dest = None_Receiver; es->qd = CreateQueryDesc(es->stmt, - NULL, - fcache->src, + fcache->func->src, GetActiveSnapshot(), InvalidSnapshot, dest, @@ -865,11 +1386,12 @@ postquel_start(execution_state *es, SQLFunctionCachePtr fcache) eflags = EXEC_FLAG_SKIP_TRIGGERS; else eflags = 0; /* default run-to-completion flags */ - if (!ExecutorStart(es->qd, eflags)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); + ExecutorStart(es->qd, eflags); } es->status = F_EXEC_RUN; + + MemoryContextSwitchTo(oldcontext); } /* Run one execution_state; either to completion or to first result row */ @@ -878,11 +1400,15 @@ static bool postquel_getnext(execution_state *es, SQLFunctionCachePtr fcache) { bool result; + MemoryContext oldcontext; + + /* Run the sub-executor in subcontext */ + oldcontext = MemoryContextSwitchTo(fcache->subcontext); if (es->qd->operation == CMD_UTILITY) { ProcessUtility(es->qd->plannedstmt, - fcache->src, + fcache->func->src, true, /* protect function cache's parsetree */ PROCESS_UTILITY_QUERY, es->qd->params, @@ -905,13 +1431,20 @@ postquel_getnext(execution_state *es, SQLFunctionCachePtr fcache) result = (count == 0 || es->qd->estate->es_processed == 0); } + MemoryContextSwitchTo(oldcontext); + return result; } /* Shut down execution of one execution_state node */ static void -postquel_end(execution_state *es) +postquel_end(execution_state *es, SQLFunctionCachePtr fcache) { + MemoryContext oldcontext; + + /* Run the sub-executor in subcontext */ + oldcontext = MemoryContextSwitchTo(fcache->subcontext); + /* mark status done to ensure we don't do ExecutorEnd twice */ es->status = F_EXEC_DONE; @@ -926,6 +1459,13 @@ postquel_end(execution_state *es) FreeQueryDesc(es->qd); es->qd = NULL; + + MemoryContextSwitchTo(oldcontext); + + /* Delete the subcontext, if it's actually a separate context */ + if (fcache->ownSubcontext) + MemoryContextDelete(fcache->subcontext); + fcache->subcontext = NULL; } /* Build ParamListInfo array representing current arguments */ @@ -938,12 +1478,18 @@ postquel_sub_params(SQLFunctionCachePtr fcache, if (nargs > 0) { ParamListInfo paramLI; - Oid *argtypes = fcache->pinfo->argtypes; + Oid *argtypes = fcache->func->pinfo->argtypes; + int16 *argtyplen = fcache->func->argtyplen; if (fcache->paramLI == NULL) { + /* First time through: build a persistent ParamListInfo struct */ + MemoryContext oldcontext; + + oldcontext = MemoryContextSwitchTo(fcache->fcontext); paramLI = makeParamList(nargs); fcache->paramLI = paramLI; + MemoryContextSwitchTo(oldcontext); } else { @@ -970,8 +1516,9 @@ postquel_sub_params(SQLFunctionCachePtr fcache, prm->isnull = fcinfo->args[i].isnull; prm->value = MakeExpandedObjectReadOnly(fcinfo->args[i].value, prm->isnull, - get_typlen(argtypes[i])); - prm->pflags = 0; + argtyplen[i]); + /* Allow the value to be substituted into custom plans */ + prm->pflags = PARAM_FLAG_CONST; prm->ptype = argtypes[i]; } } @@ -982,26 +1529,23 @@ postquel_sub_params(SQLFunctionCachePtr fcache, /* * Extract the SQL function's value from a single result row. This is used * both for scalar (non-set) functions and for each row of a lazy-eval set - * result. + * result. We expect the current memory context to be that of the caller + * of fmgr_sql. */ static Datum postquel_get_single_result(TupleTableSlot *slot, FunctionCallInfo fcinfo, - SQLFunctionCachePtr fcache, - MemoryContext resultcontext) + SQLFunctionCachePtr fcache) { Datum value; - MemoryContext oldcontext; /* * Set up to return the function value. For pass-by-reference datatypes, - * be sure to allocate the result in resultcontext, not the current memory - * context (which has query lifespan). We can't leave the data in the - * TupleTableSlot because we intend to clear the slot before returning. + * be sure to copy the result into the current context. We can't leave + * the data in the TupleTableSlot because we must clear the slot before + * returning. */ - oldcontext = MemoryContextSwitchTo(resultcontext); - - if (fcache->returnsTuple) + if (fcache->func->returnsTuple) { /* We must return the whole tuple as a Datum. */ fcinfo->isnull = false; @@ -1011,15 +1555,16 @@ postquel_get_single_result(TupleTableSlot *slot, { /* * Returning a scalar, which we have to extract from the first column - * of the SELECT result, and then copy into result context if needed. + * of the SELECT result, and then copy into current context if needed. */ value = slot_getattr(slot, 1, &(fcinfo->isnull)); if (!fcinfo->isnull) - value = datumCopy(value, fcache->typbyval, fcache->typlen); + value = datumCopy(value, fcache->func->typbyval, fcache->func->typlen); } - MemoryContextSwitchTo(oldcontext); + /* Clear the slot for next time */ + ExecClearTuple(slot); return value; } @@ -1032,24 +1577,13 @@ fmgr_sql(PG_FUNCTION_ARGS) { SQLFunctionCachePtr fcache; ErrorContextCallback sqlerrcontext; - MemoryContext oldcontext; + MemoryContext tscontext; bool randomAccess; bool lazyEvalOK; - bool is_first; bool pushed_snapshot; execution_state *es; TupleTableSlot *slot; Datum result; - List *eslist; - ListCell *eslc; - - /* - * Setup error traceback support for ereport() - */ - sqlerrcontext.callback = sql_exec_error_callback; - sqlerrcontext.arg = fcinfo->flinfo; - sqlerrcontext.previous = error_context_stack; - error_context_stack = &sqlerrcontext; /* Check call context */ if (fcinfo->flinfo->fn_retset) @@ -1070,80 +1604,49 @@ fmgr_sql(PG_FUNCTION_ARGS) errmsg("set-valued function called in context that cannot accept a set"))); randomAccess = rsi->allowedModes & SFRM_Materialize_Random; lazyEvalOK = !(rsi->allowedModes & SFRM_Materialize_Preferred); + /* tuplestore, if used, must have query lifespan */ + tscontext = rsi->econtext->ecxt_per_query_memory; } else { randomAccess = false; lazyEvalOK = true; + /* we won't need a tuplestore */ + tscontext = NULL; } /* - * Initialize fcache (build plans) if first time through; or re-initialize - * if the cache is stale. + * Initialize fcache if starting a fresh execution. */ - fcache = (SQLFunctionCachePtr) fcinfo->flinfo->fn_extra; + fcache = init_sql_fcache(fcinfo, lazyEvalOK); - if (fcache != NULL) - { - if (fcache->lxid != MyProc->vxid.lxid || - !SubTransactionIsActive(fcache->subxid)) - { - /* It's stale; unlink and delete */ - fcinfo->flinfo->fn_extra = NULL; - MemoryContextDelete(fcache->fcontext); - fcache = NULL; - } - } + /* Mark fcache as active */ + fcache->active = true; - if (fcache == NULL) - { - init_sql_fcache(fcinfo, PG_GET_COLLATION(), lazyEvalOK); - fcache = (SQLFunctionCachePtr) fcinfo->flinfo->fn_extra; - } + /* Remember info that we might need later to construct tuplestore */ + fcache->tscontext = tscontext; + fcache->randomAccess = randomAccess; /* - * Switch to context in which the fcache lives. This ensures that our - * tuplestore etc will have sufficient lifetime. The sub-executor is - * responsible for deleting per-tuple information. (XXX in the case of a - * long-lived FmgrInfo, this policy represents more memory leakage, but - * it's not entirely clear where to keep stuff instead.) + * Now we can set up error traceback support for ereport() */ - oldcontext = MemoryContextSwitchTo(fcache->fcontext); + sqlerrcontext.callback = sql_exec_error_callback; + sqlerrcontext.arg = fcache; + sqlerrcontext.previous = error_context_stack; + error_context_stack = &sqlerrcontext; /* - * Find first unfinished query in function, and note whether it's the - * first query. + * Find first unfinished execution_state. If none, advance to the next + * query in function. */ - eslist = fcache->func_state; - es = NULL; - is_first = true; - foreach(eslc, eslist) + do { - es = (execution_state *) lfirst(eslc); - + es = fcache->eslist; while (es && es->status == F_EXEC_DONE) - { - is_first = false; es = es->next; - } - if (es) break; - } - - /* - * Convert params to appropriate format if starting a fresh execution. (If - * continuing execution, we can re-use prior params.) - */ - if (is_first && es && es->status == F_EXEC_START) - postquel_sub_params(fcache, fcinfo); - - /* - * Build tuplestore to hold results, if we don't have one already. Note - * it's in the query-lifespan context. - */ - if (!fcache->tstore) - fcache->tstore = tuplestore_begin_heap(randomAccess, false, work_mem); + } while (init_execution_state(fcache)); /* * Execute each command in the function one after another until we either @@ -1176,7 +1679,7 @@ fmgr_sql(PG_FUNCTION_ARGS) * visible. Take a new snapshot if we don't have one yet, * otherwise just bump the command ID in the existing snapshot. */ - if (!fcache->readonly_func) + if (!fcache->func->readonly_func) { CommandCounterIncrement(); if (!pushed_snapshot) @@ -1190,7 +1693,7 @@ fmgr_sql(PG_FUNCTION_ARGS) postquel_start(es, fcache); } - else if (!fcache->readonly_func && !pushed_snapshot) + else if (!fcache->func->readonly_func && !pushed_snapshot) { /* Re-establish active snapshot when re-entering function */ PushActiveSnapshot(es->qd->snapshot); @@ -1201,14 +1704,15 @@ fmgr_sql(PG_FUNCTION_ARGS) /* * If we ran the command to completion, we can shut it down now. Any - * row(s) we need to return are safely stashed in the tuplestore, and - * we want to be sure that, for example, AFTER triggers get fired - * before we return anything. Also, if the function doesn't return - * set, we can shut it down anyway because it must be a SELECT and we - * don't care about fetching any more result rows. + * row(s) we need to return are safely stashed in the result slot or + * tuplestore, and we want to be sure that, for example, AFTER + * triggers get fired before we return anything. Also, if the + * function doesn't return set, we can shut it down anyway because it + * must be a SELECT and we don't care about fetching any more result + * rows. */ - if (completed || !fcache->returnsSet) - postquel_end(es); + if (completed || !fcache->func->returnsSet) + postquel_end(es, fcache); /* * Break from loop if we didn't shut down (implying we got a @@ -1223,17 +1727,11 @@ fmgr_sql(PG_FUNCTION_ARGS) break; /* - * Advance to next execution_state, which might be in the next list. + * Advance to next execution_state, and perhaps next query. */ es = es->next; while (!es) { - eslc = lnext(eslist, eslc); - if (!eslc) - break; /* end of function */ - - es = (execution_state *) lfirst(eslc); - /* * Flush the current snapshot so that we will take a new one for * the new query list. This ensures that new snaps are taken at @@ -1245,13 +1743,19 @@ fmgr_sql(PG_FUNCTION_ARGS) PopActiveSnapshot(); pushed_snapshot = false; } + + if (!init_execution_state(fcache)) + break; /* end of function */ + + es = fcache->eslist; } } /* - * The tuplestore now contains whatever row(s) we are supposed to return. + * The result slot or tuplestore now contains whatever row(s) we are + * supposed to return. */ - if (fcache->returnsSet) + if (fcache->func->returnsSet) { ReturnSetInfo *rsi = (ReturnSetInfo *) fcinfo->resultinfo; @@ -1262,17 +1766,12 @@ fmgr_sql(PG_FUNCTION_ARGS) * row. */ Assert(es->lazyEval); - /* Re-use the junkfilter's output slot to fetch back the tuple */ + /* The junkfilter's result slot contains the query result tuple */ Assert(fcache->junkFilter); slot = fcache->junkFilter->jf_resultSlot; - if (!tuplestore_gettupleslot(fcache->tstore, true, false, slot)) - elog(ERROR, "failed to fetch lazy-eval tuple"); + Assert(!TTS_EMPTY(slot)); /* Extract the result as a datum, and copy out from the slot */ - result = postquel_get_single_result(slot, fcinfo, - fcache, oldcontext); - /* Clear the tuplestore, but keep it for next time */ - /* NB: this might delete the slot's content, but we don't care */ - tuplestore_clear(fcache->tstore); + result = postquel_get_single_result(slot, fcinfo, fcache); /* * Let caller know we're not finished. @@ -1294,12 +1793,8 @@ fmgr_sql(PG_FUNCTION_ARGS) else if (fcache->lazyEval) { /* - * We are done with a lazy evaluation. Clean up. - */ - tuplestore_clear(fcache->tstore); - - /* - * Let caller know we're finished. + * We are done with a lazy evaluation. Let caller know we're + * finished. */ rsi->isDone = ExprEndResult; @@ -1321,7 +1816,12 @@ fmgr_sql(PG_FUNCTION_ARGS) * We are done with a non-lazy evaluation. Return whatever is in * the tuplestore. (It is now caller's responsibility to free the * tuplestore when done.) + * + * Note an edge case: we could get here without having made a + * tuplestore if the function is declared to return SETOF VOID. + * ExecMakeTableFunctionResult will cope with null setResult. */ + Assert(fcache->tstore || fcache->func->rettype == VOIDOID); rsi->returnMode = SFRM_Materialize; rsi->setResult = fcache->tstore; fcache->tstore = NULL; @@ -1349,11 +1849,10 @@ fmgr_sql(PG_FUNCTION_ARGS) */ if (fcache->junkFilter) { - /* Re-use the junkfilter's output slot to fetch back the tuple */ + /* The junkfilter's result slot contains the query result tuple */ slot = fcache->junkFilter->jf_resultSlot; - if (tuplestore_gettupleslot(fcache->tstore, true, false, slot)) - result = postquel_get_single_result(slot, fcinfo, - fcache, oldcontext); + if (!TTS_EMPTY(slot)) + result = postquel_get_single_result(slot, fcinfo, fcache); else { fcinfo->isnull = true; @@ -1363,13 +1862,10 @@ fmgr_sql(PG_FUNCTION_ARGS) else { /* Should only get here for VOID functions and procedures */ - Assert(fcache->rettype == VOIDOID); + Assert(fcache->func->rettype == VOIDOID); fcinfo->isnull = true; result = (Datum) 0; } - - /* Clear the tuplestore, but keep it for next time */ - tuplestore_clear(fcache->tstore); } /* Pop snapshot if we have pushed one */ @@ -1378,154 +1874,157 @@ fmgr_sql(PG_FUNCTION_ARGS) /* * If we've gone through every command in the function, we are done. Reset - * the execution states to start over again on next call. + * state to start over again on next call. */ if (es == NULL) - { - foreach(eslc, fcache->func_state) - { - es = (execution_state *) lfirst(eslc); - while (es) - { - es->status = F_EXEC_START; - es = es->next; - } - } - } + fcache->eslist = NULL; - error_context_stack = sqlerrcontext.previous; + /* Mark fcache as inactive */ + fcache->active = false; - MemoryContextSwitchTo(oldcontext); + error_context_stack = sqlerrcontext.previous; return result; } /* - * error context callback to let us supply a call-stack traceback + * error context callback to let us supply a traceback during compile */ static void -sql_exec_error_callback(void *arg) +sql_compile_error_callback(void *arg) { - FmgrInfo *flinfo = (FmgrInfo *) arg; - SQLFunctionCachePtr fcache = (SQLFunctionCachePtr) flinfo->fn_extra; + SQLFunctionHashEntry *func = (SQLFunctionHashEntry *) arg; int syntaxerrposition; /* - * We can do nothing useful if init_sql_fcache() didn't get as far as - * saving the function name + * We can do nothing useful if sql_compile_callback() didn't get as far as + * copying the function name */ - if (fcache == NULL || fcache->fname == NULL) + if (func->fname == NULL) return; /* * If there is a syntax error position, convert to internal syntax error */ syntaxerrposition = geterrposition(); - if (syntaxerrposition > 0 && fcache->src != NULL) + if (syntaxerrposition > 0 && func->src != NULL) { errposition(0); internalerrposition(syntaxerrposition); - internalerrquery(fcache->src); + internalerrquery(func->src); } /* - * Try to determine where in the function we failed. If there is a query - * with non-null QueryDesc, finger it. (We check this rather than looking - * for F_EXEC_RUN state, so that errors during ExecutorStart or - * ExecutorEnd are blamed on the appropriate query; see postquel_start and - * postquel_end.) + * sql_compile_callback() doesn't do any per-query processing, so just + * report the context as "during startup". */ - if (fcache->func_state) - { - execution_state *es; - int query_num; - ListCell *lc; + errcontext("SQL function \"%s\" during startup", func->fname); +} - es = NULL; - query_num = 1; - foreach(lc, fcache->func_state) - { - es = (execution_state *) lfirst(lc); - while (es) - { - if (es->qd) - { - errcontext("SQL function \"%s\" statement %d", - fcache->fname, query_num); - break; - } - es = es->next; - } - if (es) - break; - query_num++; - } - if (es == NULL) - { - /* - * couldn't identify a running query; might be function entry, - * function exit, or between queries. - */ - errcontext("SQL function \"%s\"", fcache->fname); - } - } - else +/* + * error context callback to let us supply a call-stack traceback at runtime + */ +static void +sql_exec_error_callback(void *arg) +{ + SQLFunctionCachePtr fcache = (SQLFunctionCachePtr) arg; + int syntaxerrposition; + + /* + * If there is a syntax error position, convert to internal syntax error + */ + syntaxerrposition = geterrposition(); + if (syntaxerrposition > 0 && fcache->func->src != NULL) { - /* - * Assume we failed during init_sql_fcache(). (It's possible that the - * function actually has an empty body, but in that case we may as - * well report all errors as being "during startup".) - */ - errcontext("SQL function \"%s\" during startup", fcache->fname); + errposition(0); + internalerrposition(syntaxerrposition); + internalerrquery(fcache->func->src); } + + /* + * If we failed while executing an identifiable query within the function, + * report that. Otherwise say it was "during startup". + */ + if (fcache->error_query_index > 0) + errcontext("SQL function \"%s\" statement %d", + fcache->func->fname, fcache->error_query_index); + else + errcontext("SQL function \"%s\" during startup", fcache->func->fname); } /* - * callback function in case a function-returning-set needs to be shut down - * before it has been run to completion + * ExprContext callback function + * + * We register this in the active ExprContext while a set-returning SQL + * function is running, in case the function needs to be shut down before it + * has been run to completion. Note that this will not be called during an + * error abort, but we don't need it because transaction abort will take care + * of releasing executor resources. */ static void ShutdownSQLFunction(Datum arg) { SQLFunctionCachePtr fcache = (SQLFunctionCachePtr) DatumGetPointer(arg); execution_state *es; - ListCell *lc; - foreach(lc, fcache->func_state) + es = fcache->eslist; + while (es) { - es = (execution_state *) lfirst(lc); - while (es) + /* Shut down anything still running */ + if (es->status == F_EXEC_RUN) { - /* Shut down anything still running */ - if (es->status == F_EXEC_RUN) - { - /* Re-establish active snapshot for any called functions */ - if (!fcache->readonly_func) - PushActiveSnapshot(es->qd->snapshot); - - postquel_end(es); + /* Re-establish active snapshot for any called functions */ + if (!fcache->func->readonly_func) + PushActiveSnapshot(es->qd->snapshot); - if (!fcache->readonly_func) - PopActiveSnapshot(); - } + postquel_end(es, fcache); - /* Reset states to START in case we're called again */ - es->status = F_EXEC_START; - es = es->next; + if (!fcache->func->readonly_func) + PopActiveSnapshot(); } + es = es->next; } + fcache->eslist = NULL; /* Release tuplestore if we have one */ if (fcache->tstore) tuplestore_end(fcache->tstore); fcache->tstore = NULL; + /* Release CachedPlan if we have one */ + if (fcache->cplan) + ReleaseCachedPlan(fcache->cplan, fcache->cowner); + fcache->cplan = NULL; + /* execUtils will deregister the callback... */ fcache->shutdown_reg = false; } +/* + * MemoryContext callback function + * + * We register this in the memory context that contains a SQLFunctionCache + * struct. When the memory context is reset or deleted, we release the + * reference count (if any) that the cache holds on the long-lived hash entry. + * Note that this will happen even during error aborts. + */ +static void +RemoveSQLFunctionCache(void *arg) +{ + SQLFunctionCache *fcache = (SQLFunctionCache *) arg; + + /* Release reference count on SQLFunctionHashEntry */ + if (fcache->func != NULL) + { + Assert(fcache->func->cfunc.use_count > 0); + fcache->func->cfunc.use_count--; + /* This should be unnecessary, but let's just be sure: */ + fcache->func = NULL; + } +} + /* * check_sql_fn_statements * @@ -1541,29 +2040,39 @@ check_sql_fn_statements(List *queryTreeLists) foreach(lc, queryTreeLists) { List *sublist = lfirst_node(List, lc); - ListCell *lc2; - foreach(lc2, sublist) - { - Query *query = lfirst_node(Query, lc2); + check_sql_fn_statement(sublist); + } +} - /* - * Disallow calling procedures with output arguments. The current - * implementation would just throw the output values away, unless - * the statement is the last one. Per SQL standard, we should - * assign the output values by name. By disallowing this here, we - * preserve an opportunity for future improvement. - */ - if (query->commandType == CMD_UTILITY && - IsA(query->utilityStmt, CallStmt)) - { - CallStmt *stmt = (CallStmt *) query->utilityStmt; +/* + * As above, for a single sublist of Queries. + */ +static void +check_sql_fn_statement(List *queryTreeList) +{ + ListCell *lc; - if (stmt->outargs != NIL) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("calling procedures with output arguments is not supported in SQL functions"))); - } + foreach(lc, queryTreeList) + { + Query *query = lfirst_node(Query, lc); + + /* + * Disallow calling procedures with output arguments. The current + * implementation would just throw the output values away, unless the + * statement is the last one. Per SQL standard, we should assign the + * output values by name. By disallowing this here, we preserve an + * opportunity for future improvement. + */ + if (query->commandType == CMD_UTILITY && + IsA(query->utilityStmt, CallStmt)) + { + CallStmt *stmt = (CallStmt *) query->utilityStmt; + + if (stmt->outargs != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("calling procedures with output arguments is not supported in SQL functions"))); } } } @@ -1602,17 +2111,45 @@ check_sql_fn_statements(List *queryTreeLists) * In addition to coercing individual output columns, we can modify the * output to include dummy NULL columns for any dropped columns appearing * in rettupdesc. This is done only if the caller asks for it. - * - * If resultTargetList isn't NULL, then *resultTargetList is set to the - * targetlist that defines the final statement's result. Exception: if the - * function is defined to return VOID then *resultTargetList is set to NIL. */ bool check_sql_fn_retval(List *queryTreeLists, Oid rettype, TupleDesc rettupdesc, char prokind, - bool insertDroppedCols, - List **resultTargetList) + bool insertDroppedCols) +{ + List *queryTreeList; + + /* + * We consider only the last sublist of Query nodes, so that only the last + * original statement is a candidate to produce the result. This is a + * change from pre-v18 versions, which would back up to the last statement + * that includes a canSetTag query, thus ignoring any ending statement(s) + * that rewrite to DO INSTEAD NOTHING. That behavior was undocumented and + * there seems no good reason for it, except that it was an artifact of + * the original coding. + * + * If the function body is completely empty, handle that the same as if + * the last query had rewritten to nothing. + */ + if (queryTreeLists != NIL) + queryTreeList = llast_node(List, queryTreeLists); + else + queryTreeList = NIL; + + return check_sql_stmt_retval(queryTreeList, + rettype, rettupdesc, + prokind, insertDroppedCols); +} + +/* + * As for check_sql_fn_retval, but we are given just the last query's + * rewritten-queries list. + */ +static bool +check_sql_stmt_retval(List *queryTreeList, + Oid rettype, TupleDesc rettupdesc, + char prokind, bool insertDroppedCols) { bool is_tuple_result = false; Query *parse; @@ -1625,9 +2162,6 @@ check_sql_fn_retval(List *queryTreeLists, bool upper_tlist_nontrivial = false; ListCell *lc; - if (resultTargetList) - *resultTargetList = NIL; /* initialize in case of VOID result */ - /* * If it's declared to return VOID, we don't care what's in the function. * (This takes care of procedures with no output parameters, as well.) @@ -1636,30 +2170,20 @@ check_sql_fn_retval(List *queryTreeLists, return false; /* - * Find the last canSetTag query in the function body (which is presented - * to us as a list of sublists of Query nodes). This isn't necessarily - * the last parsetree, because rule rewriting can insert queries after - * what the user wrote. Note that it might not even be in the last - * sublist, for example if the last query rewrites to DO INSTEAD NOTHING. - * (It might not be unreasonable to throw an error in such a case, but - * this is the historical behavior and it doesn't seem worth changing.) + * Find the last canSetTag query in the list of Query nodes. This isn't + * necessarily the last parsetree, because rule rewriting can insert + * queries after what the user wrote. */ parse = NULL; parse_cell = NULL; - foreach(lc, queryTreeLists) + foreach(lc, queryTreeList) { - List *sublist = lfirst_node(List, lc); - ListCell *lc2; + Query *q = lfirst_node(Query, lc); - foreach(lc2, sublist) + if (q->canSetTag) { - Query *q = lfirst_node(Query, lc2); - - if (q->canSetTag) - { - parse = q; - parse_cell = lc2; - } + parse = q; + parse_cell = lc; } } @@ -1694,7 +2218,7 @@ check_sql_fn_retval(List *queryTreeLists, } else { - /* Empty function body, or last statement is a utility command */ + /* Last statement is a utility command, or it rewrote to nothing */ ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("return type mismatch in function declared to return %s", @@ -1812,12 +2336,7 @@ check_sql_fn_retval(List *queryTreeLists, * further checking. Assume we're returning the whole tuple. */ if (rettupdesc == NULL) - { - /* Return tlist if requested */ - if (resultTargetList) - *resultTargetList = tlist; return true; - } /* * Verify that the targetlist matches the return tuple type. We scan @@ -1984,10 +2503,6 @@ check_sql_fn_retval(List *queryTreeLists, lfirst(parse_cell) = newquery; } - /* Return tlist (possibly modified) if requested */ - if (resultTargetList) - *resultTargetList = upper_tlist; - return is_tuple_result; } @@ -2063,6 +2578,37 @@ coerce_fn_result_column(TargetEntry *src_tle, return true; } +/* + * Extract the targetlist of the last canSetTag query in the given list + * of parsed-and-rewritten Queries. Returns NIL if there is none. + */ +static List * +get_sql_fn_result_tlist(List *queryTreeList) +{ + Query *parse = NULL; + ListCell *lc; + + foreach(lc, queryTreeList) + { + Query *q = lfirst_node(Query, lc); + + if (q->canSetTag) + parse = q; + } + if (parse && + parse->commandType == CMD_SELECT) + return parse->targetList; + else if (parse && + (parse->commandType == CMD_INSERT || + parse->commandType == CMD_UPDATE || + parse->commandType == CMD_DELETE || + parse->commandType == CMD_MERGE) && + parse->returningList) + return parse->returningList; + else + return NIL; +} + /* * CreateSQLFunctionDestReceiver -- create a suitable DestReceiver object @@ -2100,11 +2646,32 @@ sqlfunction_receive(TupleTableSlot *slot, DestReceiver *self) { DR_sqlfunction *myState = (DR_sqlfunction *) self; - /* Filter tuple as needed */ - slot = ExecFilterJunk(myState->filter, slot); + if (myState->tstore) + { + /* We are collecting all of a set result into the tuplestore */ + + /* Filter tuple as needed */ + slot = ExecFilterJunk(myState->filter, slot); - /* Store the filtered tuple into the tuplestore */ - tuplestore_puttupleslot(myState->tstore, slot); + /* Store the filtered tuple into the tuplestore */ + tuplestore_puttupleslot(myState->tstore, slot); + } + else + { + /* + * We only want the first tuple, which we'll save in the junkfilter's + * result slot. Ignore any additional tuples passed. + */ + if (TTS_EMPTY(myState->filter->jf_resultSlot)) + { + /* Filter tuple as needed */ + slot = ExecFilterJunk(myState->filter, slot); + Assert(slot == myState->filter->jf_resultSlot); + + /* Materialize the slot so it preserves pass-by-ref values */ + ExecMaterializeSlot(slot); + } + } return true; } diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index f83fc16c5c8e2..377e016d73225 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -1492,7 +1492,7 @@ build_hash_tables(AggState *aggstate) if (IS_INJECTION_POINT_ATTACHED("hash-aggregate-oversize-table")) { nbuckets = memory / TupleHashEntrySize(); - INJECTION_POINT_CACHED("hash-aggregate-oversize-table"); + INJECTION_POINT_CACHED("hash-aggregate-oversize-table", NULL); } #endif @@ -1882,7 +1882,7 @@ hash_agg_check_limits(AggState *aggstate) if (IS_INJECTION_POINT_ATTACHED("hash-aggregate-spill-1000")) { do_spill = true; - INJECTION_POINT_CACHED("hash-aggregate-spill-1000"); + INJECTION_POINT_CACHED("hash-aggregate-spill-1000", NULL); } } #endif @@ -1910,7 +1910,7 @@ hash_agg_check_limits(AggState *aggstate) static void hash_agg_enter_spill_mode(AggState *aggstate) { - INJECTION_POINT("hash-aggregate-enter-spill-mode"); + INJECTION_POINT("hash-aggregate-enter-spill-mode", NULL); aggstate->hash_spill_mode = true; hashagg_recompile_expressions(aggstate, aggstate->table_filled, true); @@ -2739,7 +2739,7 @@ agg_refill_hash_table(AggState *aggstate) */ hashagg_recompile_expressions(aggstate, true, true); - INJECTION_POINT("hash-aggregate-process-batch"); + INJECTION_POINT("hash-aggregate-process-batch", NULL); for (;;) { TupleTableSlot *spillslot = aggstate->hash_spill_rslot; @@ -2995,7 +2995,7 @@ hashagg_spill_init(HashAggSpill *spill, LogicalTapeSet *tapeset, int used_bits, { npartitions = 1; partition_bits = 0; - INJECTION_POINT_CACHED("hash-aggregate-single-partition"); + INJECTION_POINT_CACHED("hash-aggregate-single-partition", NULL); } #endif diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c index 3e33360c0fce0..bf24f3d7fe0a8 100644 --- a/src/backend/executor/nodeBitmapHeapscan.c +++ b/src/backend/executor/nodeBitmapHeapscan.c @@ -105,24 +105,11 @@ BitmapTableScanSetup(BitmapHeapScanState *node) */ if (!node->ss.ss_currentScanDesc) { - bool need_tuples = false; - - /* - * We can potentially skip fetching heap pages if we do not need any - * columns of the table, either for checking non-indexable quals or - * for returning data. This test is a bit simplistic, as it checks - * the stronger condition that there's no qual or return tlist at all. - * But in most cases it's probably not worth working harder than that. - */ - need_tuples = (node->ss.ps.plan->qual != NIL || - node->ss.ps.plan->targetlist != NIL); - node->ss.ss_currentScanDesc = table_beginscan_bm(node->ss.ss_currentRelation, node->ss.ps.state->es_snapshot, 0, - NULL, - need_tuples); + NULL); } node->ss.ss_currentScanDesc->st.rs_tbmiterator = tbmiterator; diff --git a/src/backend/executor/nodeMergejoin.c b/src/backend/executor/nodeMergejoin.c index f70239a2c9dd4..a233313128acb 100644 --- a/src/backend/executor/nodeMergejoin.c +++ b/src/backend/executor/nodeMergejoin.c @@ -220,7 +220,7 @@ MJExamineQuals(List *mergeclauses, &op_strategy, &op_lefttype, &op_righttype); - if (op_strategy != BTEqualStrategyNumber) /* should not happen */ + if (IndexAmTranslateStrategy(op_strategy, get_opfamily_method(opfamily), opfamily, true) != COMPARE_EQ) /* should not happen */ elog(ERROR, "cannot merge using non-equality operator %u", qual->opno); diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 309e27f8b5faa..7c6c2c1f6e42a 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -64,6 +64,7 @@ #include "nodes/nodeFuncs.h" #include "optimizer/optimizer.h" #include "rewrite/rewriteHandler.h" +#include "rewrite/rewriteManip.h" #include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/datum.h" @@ -212,33 +213,53 @@ ExecCheckPlanOutput(Relation resultRel, List *targetList) attr = TupleDescAttr(resultDesc, attno); attno++; - if (!attr->attisdropped) + /* + * Special cases here should match planner's expand_insert_targetlist. + */ + if (attr->attisdropped) { - /* Normal case: demand type match */ - if (exprType((Node *) tle->expr) != attr->atttypid) + /* + * For a dropped column, we can't check atttypid (it's likely 0). + * In any case the planner has most likely inserted an INT4 null. + * What we insist on is just *some* NULL constant. + */ + if (!IsA(tle->expr, Const) || + !((Const *) tle->expr)->constisnull) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("table row type and query-specified row type do not match"), - errdetail("Table has type %s at ordinal position %d, but query expects %s.", - format_type_be(attr->atttypid), - attno, - format_type_be(exprType((Node *) tle->expr))))); + errdetail("Query provides a value for a dropped column at ordinal position %d.", + attno))); } - else + else if (attr->attgenerated) { /* - * For a dropped column, we can't check atttypid (it's likely 0). - * In any case the planner has most likely inserted an INT4 null. - * What we insist on is just *some* NULL constant. + * For a generated column, the planner will have inserted a null + * of the column's base type (to avoid possibly failing on domain + * not-null constraints). It doesn't seem worth insisting on that + * exact type though, since a null value is type-independent. As + * above, just insist on *some* NULL constant. */ if (!IsA(tle->expr, Const) || !((Const *) tle->expr)->constisnull) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("table row type and query-specified row type do not match"), - errdetail("Query provides a value for a dropped column at ordinal position %d.", + errdetail("Query provides a value for a generated column at ordinal position %d.", attno))); } + else + { + /* Normal case: demand type match */ + if (exprType((Node *) tle->expr) != attr->atttypid) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("table row type and query-specified row type do not match"), + errdetail("Table has type %s at ordinal position %d, but query expects %s.", + format_type_be(attr->atttypid), + attno, + format_type_be(exprType((Node *) tle->expr))))); + } } if (attno != resultDesc->natts) ereport(ERROR, @@ -1291,7 +1312,7 @@ ExecInsert(ModifyTableContext *context, /* * Convert the OLD tuple to the new partition's format/slot, if - * needed. Note that ExceDelete() already converted it to the + * needed. Note that ExecDelete() already converted it to the * root's partition's format/slot. */ oldSlot = context->cpDeletedSlot; @@ -1453,7 +1474,8 @@ ExecDeletePrologue(ModifyTableContext *context, ResultRelInfo *resultRelInfo, return ExecBRDeleteTriggers(context->estate, context->epqstate, resultRelInfo, tupleid, oldtuple, - epqreturnslot, result, &context->tmfd); + epqreturnslot, result, &context->tmfd, + context->mtstate->operation == CMD_MERGE); } return true; @@ -2096,7 +2118,8 @@ ExecUpdatePrologue(ModifyTableContext *context, ResultRelInfo *resultRelInfo, return ExecBRUpdateTriggers(context->estate, context->epqstate, resultRelInfo, tupleid, oldtuple, slot, - result, &context->tmfd); + result, &context->tmfd, + context->mtstate->operation == CMD_MERGE); } return true; @@ -3715,6 +3738,7 @@ ExecInitMerge(ModifyTableState *mtstate, EState *estate) switch (action->commandType) { case CMD_INSERT: + /* INSERT actions always use rootRelInfo */ ExecCheckPlanOutput(rootRelInfo->ri_RelationDesc, action->targetList); @@ -3754,9 +3778,23 @@ ExecInitMerge(ModifyTableState *mtstate, EState *estate) } else { - /* not partitioned? use the stock relation and slot */ - tgtslot = resultRelInfo->ri_newTupleSlot; - tgtdesc = RelationGetDescr(resultRelInfo->ri_RelationDesc); + /* + * If the MERGE targets an inherited table, we insert + * into the root table, so we must initialize its + * "new" tuple slot, if not already done, and use its + * relation descriptor for the projection. + * + * For non-inherited tables, rootRelInfo and + * resultRelInfo are the same, and the "new" tuple + * slot will already have been initialized. + */ + if (rootRelInfo->ri_newTupleSlot == NULL) + rootRelInfo->ri_newTupleSlot = + table_slot_create(rootRelInfo->ri_RelationDesc, + &estate->es_tupleTable); + + tgtslot = rootRelInfo->ri_newTupleSlot; + tgtdesc = RelationGetDescr(rootRelInfo->ri_RelationDesc); } action_state->mas_proj = @@ -3789,6 +3827,114 @@ ExecInitMerge(ModifyTableState *mtstate, EState *estate) } } } + + /* + * If the MERGE targets an inherited table, any INSERT actions will use + * rootRelInfo, and rootRelInfo will not be in the resultRelInfo array. + * Therefore we must initialize its WITH CHECK OPTION constraints and + * RETURNING projection, as ExecInitModifyTable did for the resultRelInfo + * entries. + * + * Note that the planner does not build a withCheckOptionList or + * returningList for the root relation, but as in ExecInitPartitionInfo, + * we can use the first resultRelInfo entry as a reference to calculate + * the attno's for the root table. + */ + if (rootRelInfo != mtstate->resultRelInfo && + rootRelInfo->ri_RelationDesc->rd_rel->relkind != RELKIND_PARTITIONED_TABLE && + (mtstate->mt_merge_subcommands & MERGE_INSERT) != 0) + { + ModifyTable *node = (ModifyTable *) mtstate->ps.plan; + Relation rootRelation = rootRelInfo->ri_RelationDesc; + Relation firstResultRel = mtstate->resultRelInfo[0].ri_RelationDesc; + int firstVarno = mtstate->resultRelInfo[0].ri_RangeTableIndex; + AttrMap *part_attmap = NULL; + bool found_whole_row; + + if (node->withCheckOptionLists != NIL) + { + List *wcoList; + List *wcoExprs = NIL; + + /* There should be as many WCO lists as result rels */ + Assert(list_length(node->withCheckOptionLists) == + list_length(node->resultRelations)); + + /* + * Use the first WCO list as a reference. In the most common case, + * this will be for the same relation as rootRelInfo, and so there + * will be no need to adjust its attno's. + */ + wcoList = linitial(node->withCheckOptionLists); + if (rootRelation != firstResultRel) + { + /* Convert any Vars in it to contain the root's attno's */ + part_attmap = + build_attrmap_by_name(RelationGetDescr(rootRelation), + RelationGetDescr(firstResultRel), + false); + + wcoList = (List *) + map_variable_attnos((Node *) wcoList, + firstVarno, 0, + part_attmap, + RelationGetForm(rootRelation)->reltype, + &found_whole_row); + } + + foreach(lc, wcoList) + { + WithCheckOption *wco = lfirst_node(WithCheckOption, lc); + ExprState *wcoExpr = ExecInitQual(castNode(List, wco->qual), + &mtstate->ps); + + wcoExprs = lappend(wcoExprs, wcoExpr); + } + + rootRelInfo->ri_WithCheckOptions = wcoList; + rootRelInfo->ri_WithCheckOptionExprs = wcoExprs; + } + + if (node->returningLists != NIL) + { + List *returningList; + + /* There should be as many returning lists as result rels */ + Assert(list_length(node->returningLists) == + list_length(node->resultRelations)); + + /* + * Use the first returning list as a reference. In the most common + * case, this will be for the same relation as rootRelInfo, and so + * there will be no need to adjust its attno's. + */ + returningList = linitial(node->returningLists); + if (rootRelation != firstResultRel) + { + /* Convert any Vars in it to contain the root's attno's */ + if (part_attmap == NULL) + part_attmap = + build_attrmap_by_name(RelationGetDescr(rootRelation), + RelationGetDescr(firstResultRel), + false); + + returningList = (List *) + map_variable_attnos((Node *) returningList, + firstVarno, 0, + part_attmap, + RelationGetForm(rootRelation)->reltype, + &found_whole_row); + } + rootRelInfo->ri_returningList = returningList; + + /* Initialize the RETURNING projection */ + rootRelInfo->ri_projectReturning = + ExecBuildProjectionInfo(returningList, econtext, + mtstate->ps.ps_ResultTupleSlot, + &mtstate->ps, + RelationGetDescr(rootRelation)); + } + } } /* @@ -4810,12 +4956,11 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) ExprContext *econtext; /* - * Initialize result tuple slot and assign its rowtype using the first - * RETURNING list. We assume the rest will look the same. + * Initialize result tuple slot and assign its rowtype using the plan + * node's declared targetlist, which the planner set up to be the same + * as the first (before runtime pruning) RETURNING list. We assume + * all the result rels will produce compatible output. */ - mtstate->ps.plan->targetlist = (List *) linitial(returningLists); - - /* Set up a slot for the output of the RETURNING projection(s) */ ExecInitResultTupleSlotTL(&mtstate->ps, &TTSOpsVirtual); slot = mtstate->ps.ps_ResultTupleSlot; @@ -4845,7 +4990,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) * We still must construct a dummy result tuple type, because InitPlan * expects one (maybe should change that?). */ - mtstate->ps.plan->targetlist = NIL; ExecInitResultTypeTL(&mtstate->ps); mtstate->ps.ps_ExprContext = NULL; diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index 6f9e991eeae32..94047d29430d6 100644 --- a/src/backend/executor/nodeSeqscan.c +++ b/src/backend/executor/nodeSeqscan.c @@ -100,7 +100,7 @@ SeqRecheck(SeqScanState *node, TupleTableSlot *slot) * ExecSeqScan(node) * * Scans the relation sequentially and returns the next qualifying - * tuple. This variant is used when there is no es_eqp_active, no qual + * tuple. This variant is used when there is no es_epq_active, no qual * and no projection. Passing const-NULLs for these to ExecScanExtended * allows the compiler to eliminate the additional code that would * ordinarily be required for the evaluation of these. @@ -131,8 +131,12 @@ ExecSeqScanWithQual(PlanState *pstate) { SeqScanState *node = castNode(SeqScanState, pstate); + /* + * Use pg_assume() for != NULL tests to make the compiler realize no + * runtime check for the field is needed in ExecScanExtended(). + */ Assert(pstate->state->es_epq_active == NULL); - Assert(pstate->qual != NULL); + pg_assume(pstate->qual != NULL); Assert(pstate->ps_ProjInfo == NULL); return ExecScanExtended(&node->ss, @@ -153,7 +157,7 @@ ExecSeqScanWithProject(PlanState *pstate) Assert(pstate->state->es_epq_active == NULL); Assert(pstate->qual == NULL); - Assert(pstate->ps_ProjInfo != NULL); + pg_assume(pstate->ps_ProjInfo != NULL); return ExecScanExtended(&node->ss, (ExecScanAccessMtd) SeqNext, @@ -173,8 +177,8 @@ ExecSeqScanWithQualProject(PlanState *pstate) SeqScanState *node = castNode(SeqScanState, pstate); Assert(pstate->state->es_epq_active == NULL); - Assert(pstate->qual != NULL); - Assert(pstate->ps_ProjInfo != NULL); + pg_assume(pstate->qual != NULL); + pg_assume(pstate->ps_ProjInfo != NULL); return ExecScanExtended(&node->ss, (ExecScanAccessMtd) SeqNext, diff --git a/src/backend/executor/nodeTidrangescan.c b/src/backend/executor/nodeTidrangescan.c index ab2eab9596e42..26f7420b64b0e 100644 --- a/src/backend/executor/nodeTidrangescan.c +++ b/src/backend/executor/nodeTidrangescan.c @@ -128,9 +128,11 @@ TidExprListCreate(TidRangeScanState *tidrangestate) * TidRangeEval * * Compute and set node's block and offset range to scan by evaluating - * the trss_tidexprs. Returns false if we detect the range cannot + * node->trss_tidexprs. Returns false if we detect the range cannot * contain any tuples. Returns true if it's possible for the range to - * contain tuples. + * contain tuples. We don't bother validating that trss_mintid is less + * than or equal to trss_maxtid, as the scan_set_tidrange() table AM + * function will handle that. * ---------------------------------------------------------------- */ static bool diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 3288396def3c5..50fcd0237768e 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -70,8 +70,7 @@ static int _SPI_execute_plan(SPIPlanPtr plan, const SPIExecuteOptions *options, static ParamListInfo _SPI_convert_params(int nargs, Oid *argtypes, Datum *Values, const char *Nulls); -static int _SPI_pquery(QueryDesc *queryDesc, bool fire_triggers, uint64 tcount, - CachedPlanSource *plansource, int query_index); +static int _SPI_pquery(QueryDesc *queryDesc, bool fire_triggers, uint64 tcount); static void _SPI_error_callback(void *arg); @@ -1259,7 +1258,7 @@ SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull) { SPI_result = SPI_ERROR_NOATTRIBUTE; *isnull = true; - return (Datum) NULL; + return (Datum) 0; } return heap_getattr(tuple, fnumber, tupdesc, isnull); @@ -1686,8 +1685,7 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan, query_string, plansource->commandTag, stmt_list, - cplan, - plansource); + cplan); /* * Set up options for portal. Default SCROLL type is chosen the same way @@ -2502,7 +2500,6 @@ _SPI_execute_plan(SPIPlanPtr plan, const SPIExecuteOptions *options, CachedPlanSource *plansource = (CachedPlanSource *) lfirst(lc1); List *stmt_list; ListCell *lc2; - int query_index = 0; spicallbackarg.query = plansource->query_string; @@ -2693,16 +2690,14 @@ _SPI_execute_plan(SPIPlanPtr plan, const SPIExecuteOptions *options, snap = InvalidSnapshot; qdesc = CreateQueryDesc(stmt, - cplan, plansource->query_string, snap, crosscheck_snapshot, dest, options->params, _SPI_current->queryEnv, 0); - - res = _SPI_pquery(qdesc, fire_triggers, canSetTag ? options->tcount : 0, - plansource, query_index); + res = _SPI_pquery(qdesc, fire_triggers, + canSetTag ? options->tcount : 0); FreeQueryDesc(qdesc); } else @@ -2799,8 +2794,6 @@ _SPI_execute_plan(SPIPlanPtr plan, const SPIExecuteOptions *options, my_res = res; goto fail; } - - query_index++; } /* Done with this plan, so release refcount */ @@ -2878,8 +2871,7 @@ _SPI_convert_params(int nargs, Oid *argtypes, } static int -_SPI_pquery(QueryDesc *queryDesc, bool fire_triggers, uint64 tcount, - CachedPlanSource *plansource, int query_index) +_SPI_pquery(QueryDesc *queryDesc, bool fire_triggers, uint64 tcount) { int operation = queryDesc->operation; int eflags; @@ -2935,16 +2927,7 @@ _SPI_pquery(QueryDesc *queryDesc, bool fire_triggers, uint64 tcount, else eflags = EXEC_FLAG_SKIP_TRIGGERS; - if (queryDesc->cplan) - { - ExecutorStartCachedPlan(queryDesc, eflags, plansource, query_index); - Assert(queryDesc->planstate); - } - else - { - if (!ExecutorStart(queryDesc, eflags)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); - } + ExecutorStart(queryDesc, eflags); ExecutorRun(queryDesc, ForwardScanDirection, tcount); diff --git a/src/backend/foreign/foreign.c b/src/backend/foreign/foreign.c index f0835fc307056..a57e59f27ea64 100644 --- a/src/backend/foreign/foreign.c +++ b/src/backend/foreign/foreign.c @@ -22,6 +22,7 @@ #include "foreign/foreign.h" #include "funcapi.h" #include "miscadmin.h" +#include "optimizer/paths.h" #include "tcop/tcopprot.h" #include "utils/builtins.h" #include "utils/memutils.h" @@ -808,7 +809,24 @@ GetExistingLocalJoinPath(RelOptInfo *joinrel) foreign_path = (ForeignPath *) joinpath->outerjoinpath; if (IS_JOIN_REL(foreign_path->path.parent)) + { joinpath->outerjoinpath = foreign_path->fdw_outerpath; + + if (joinpath->path.pathtype == T_MergeJoin) + { + MergePath *merge_path = (MergePath *) joinpath; + + /* + * If the new outer path is already well enough ordered + * for the mergejoin, we can skip doing an explicit sort. + */ + if (merge_path->outersortkeys && + pathkeys_count_contained_in(merge_path->outersortkeys, + joinpath->outerjoinpath->pathkeys, + &merge_path->outer_presorted_keys)) + merge_path->outersortkeys = NIL; + } + } } if (IsA(joinpath->innerjoinpath, ForeignPath)) @@ -817,7 +835,23 @@ GetExistingLocalJoinPath(RelOptInfo *joinrel) foreign_path = (ForeignPath *) joinpath->innerjoinpath; if (IS_JOIN_REL(foreign_path->path.parent)) + { joinpath->innerjoinpath = foreign_path->fdw_outerpath; + + if (joinpath->path.pathtype == T_MergeJoin) + { + MergePath *merge_path = (MergePath *) joinpath; + + /* + * If the new inner path is already well enough ordered + * for the mergejoin, we can skip doing an explicit sort. + */ + if (merge_path->innersortkeys && + pathkeys_contained_in(merge_path->innersortkeys, + joinpath->innerjoinpath->pathkeys)) + merge_path->innersortkeys = NIL; + } + } } return (Path *) joinpath; diff --git a/src/backend/jit/README b/src/backend/jit/README index 5427bdf2153ff..a40950dfb039e 100644 --- a/src/backend/jit/README +++ b/src/backend/jit/README @@ -205,7 +205,7 @@ The ability to do so allows us to get the LLVM IR for all operators bitcode files get installed into the server's $pkglibdir/bitcode/postgres/ Using existing LLVM functionality (for parallel LTO compilation), -additionally an index is over these is stored to +additionally an index over these is stored to $pkglibdir/bitcode/postgres.index.bc Similarly extensions can install code into diff --git a/src/backend/jit/llvm/Makefile b/src/backend/jit/llvm/Makefile index e8c12060b93df..68677ba42e189 100644 --- a/src/backend/jit/llvm/Makefile +++ b/src/backend/jit/llvm/Makefile @@ -31,7 +31,7 @@ endif # All files in this directory use LLVM. CFLAGS += $(LLVM_CFLAGS) CXXFLAGS += $(LLVM_CXXFLAGS) -override CPPFLAGS := $(LLVM_CPPFLAGS) $(CPPFLAGS) +override CPPFLAGS += $(LLVM_CPPFLAGS) SHLIB_LINK += $(LLVM_LIBS) # Because this module includes C++ files, we need to use a C++ diff --git a/src/backend/jit/llvm/SectionMemoryManager.cpp b/src/backend/jit/llvm/SectionMemoryManager.cpp index c4fbf15a961c2..2171db5f382d0 100644 --- a/src/backend/jit/llvm/SectionMemoryManager.cpp +++ b/src/backend/jit/llvm/SectionMemoryManager.cpp @@ -40,8 +40,8 @@ #ifdef USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER #include "jit/SectionMemoryManager.h" -#include "llvm/Support/MathExtras.h" -#include "llvm/Support/Process.h" +#include +#include namespace llvm { namespace backport { diff --git a/src/backend/jit/llvm/llvmjit_deform.c b/src/backend/jit/llvm/llvmjit_deform.c index 5d169c7a40b27..c562edd094bb2 100644 --- a/src/backend/jit/llvm/llvmjit_deform.c +++ b/src/backend/jit/llvm/llvmjit_deform.c @@ -123,7 +123,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, * combination of attisdropped && attnotnull combination shouldn't * exist. */ - if (att->attnotnull && + if (att->attnullability == ATTNULLABLE_VALID && !att->atthasmissing && !att->attisdropped) guaranteed_column_number = attnum; @@ -438,7 +438,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, * into account, because if they're present the heaptuple's natts * would have indicated that a slot_getmissingattrs() is needed. */ - if (!att->attnotnull) + if (att->attnullability != ATTNULLABLE_VALID) { LLVMBasicBlockRef b_ifnotnull; LLVMBasicBlockRef b_ifnull; @@ -604,7 +604,8 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, known_alignment = -1; attguaranteedalign = false; } - else if (att->attnotnull && attguaranteedalign && known_alignment >= 0) + else if (att->attnullability == ATTNULLABLE_VALID && + attguaranteedalign && known_alignment >= 0) { /* * If the offset to the column was previously known, a NOT NULL & @@ -614,7 +615,8 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, Assert(att->attlen > 0); known_alignment += att->attlen; } - else if (att->attnotnull && (att->attlen % alignto) == 0) + else if (att->attnullability == ATTNULLABLE_VALID && + (att->attlen % alignto) == 0) { /* * After a NOT NULL fixed-width column with a length that is a diff --git a/src/backend/jit/llvm/meson.build b/src/backend/jit/llvm/meson.build index c8e06dfbe351b..805fbd6900679 100644 --- a/src/backend/jit/llvm/meson.build +++ b/src/backend/jit/llvm/meson.build @@ -53,7 +53,7 @@ llvm_irgen_args = [ if ccache.found() llvm_irgen_command = ccache - llvm_irgen_args = [clang.path()] + llvm_irgen_args + llvm_irgen_args = [clang.full_path()] + llvm_irgen_args else llvm_irgen_command = clang endif diff --git a/src/backend/lib/README b/src/backend/lib/README index f2fb591237dba..c28cbe356f0b3 100644 --- a/src/backend/lib/README +++ b/src/backend/lib/README @@ -1,8 +1,6 @@ This directory contains a general purpose data structures, for use anywhere in the backend: -binaryheap.c - a binary heap - bipartite_match.c - Hopcroft-Karp maximum cardinality algorithm for bipartite graphs bloomfilter.c - probabilistic, space-efficient set membership testing @@ -21,8 +19,6 @@ pairingheap.c - a pairing heap rbtree.c - a red-black tree -stringinfo.c - an extensible string type - Aside from the inherent characteristics of the data structures, there are a few practical differences between the binary heap and the pairing heap. The diff --git a/src/backend/libpq/auth-scram.c b/src/backend/libpq/auth-scram.c index 26dd241efa9b3..db778405724ad 100644 --- a/src/backend/libpq/auth-scram.c +++ b/src/backend/libpq/auth-scram.c @@ -158,7 +158,7 @@ typedef struct /* Fields from the last message from client */ char *client_final_message_without_proof; char *client_final_nonce; - char ClientProof[SCRAM_MAX_KEY_LEN]; + uint8 ClientProof[SCRAM_MAX_KEY_LEN]; /* Fields generated in the server */ char *server_first_message; @@ -186,9 +186,9 @@ static void mock_scram_secret(const char *username, pg_cryptohash_type *hash_typ static bool is_scram_printable(char *p); static char *sanitize_char(char c); static char *sanitize_str(const char *s); -static char *scram_mock_salt(const char *username, - pg_cryptohash_type hash_type, - int key_length); +static uint8 *scram_mock_salt(const char *username, + pg_cryptohash_type hash_type, + int key_length); /* * The number of iterations to use when generating new secrets. @@ -484,7 +484,7 @@ pg_be_scram_build_secret(const char *password) { char *prep_password; pg_saslprep_rc rc; - char saltbuf[SCRAM_DEFAULT_SALT_LEN]; + uint8 saltbuf[SCRAM_DEFAULT_SALT_LEN]; char *result; const char *errstr = NULL; @@ -524,7 +524,7 @@ scram_verify_plain_password(const char *username, const char *password, const char *secret) { char *encoded_salt; - char *salt; + uint8 *salt; int saltlen; int iterations; int key_length = 0; @@ -609,9 +609,9 @@ parse_scram_secret(const char *secret, int *iterations, char *storedkey_str; char *serverkey_str; int decoded_len; - char *decoded_salt_buf; - char *decoded_stored_buf; - char *decoded_server_buf; + uint8 *decoded_salt_buf; + uint8 *decoded_stored_buf; + uint8 *decoded_server_buf; /* * The secret is of form: @@ -698,7 +698,7 @@ mock_scram_secret(const char *username, pg_cryptohash_type *hash_type, int *iterations, int *key_length, char **salt, uint8 *stored_key, uint8 *server_key) { - char *raw_salt; + uint8 *raw_salt; char *encoded_salt; int encoded_len; @@ -1231,7 +1231,7 @@ build_server_first_message(scram_state *state) * For convenience, however, we don't use the whole range available, * rather, we generate some random bytes, and base64 encode them. */ - char raw_nonce[SCRAM_RAW_NONCE_LEN]; + uint8 raw_nonce[SCRAM_RAW_NONCE_LEN]; int encoded_len; if (!pg_strong_random(raw_nonce, SCRAM_RAW_NONCE_LEN)) @@ -1271,7 +1271,7 @@ read_client_final_message(scram_state *state, const char *input) char *begin, *proof; char *p; - char *client_proof; + uint8 *client_proof; int client_proof_len; begin = p = pstrdup(input); @@ -1340,7 +1340,7 @@ read_client_final_message(scram_state *state, const char *input) b64_message_len = pg_b64_enc_len(cbind_input_len); /* don't forget the zero-terminator */ b64_message = palloc(b64_message_len + 1); - b64_message_len = pg_b64_encode(cbind_input, cbind_input_len, + b64_message_len = pg_b64_encode((uint8 *) cbind_input, cbind_input_len, b64_message, b64_message_len); if (b64_message_len < 0) elog(ERROR, "could not encode channel binding data"); @@ -1440,7 +1440,7 @@ build_server_final_message(scram_state *state) siglen = pg_b64_enc_len(state->key_length); /* don't forget the zero-terminator */ server_signature_base64 = palloc(siglen + 1); - siglen = pg_b64_encode((const char *) ServerSignature, + siglen = pg_b64_encode(ServerSignature, state->key_length, server_signature_base64, siglen); if (siglen < 0) @@ -1467,7 +1467,7 @@ build_server_final_message(scram_state *state) * hash based on the username and a cluster-level secret key. Returns a * pointer to a static buffer of size SCRAM_DEFAULT_SALT_LEN, or NULL. */ -static char * +static uint8 * scram_mock_salt(const char *username, pg_cryptohash_type hash_type, int key_length) { @@ -1501,5 +1501,5 @@ scram_mock_salt(const char *username, pg_cryptohash_type hash_type, } pg_cryptohash_free(ctx); - return (char *) sha_digest; + return sha_digest; } diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index e18683c47e726..4da46666439db 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -94,8 +94,16 @@ static int auth_peer(hbaPort *port); #define PGSQL_PAM_SERVICE "postgresql" /* Service name passed to PAM */ +/* Work around original Solaris' lack of "const" in the conv_proc signature */ +#ifdef _PAM_LEGACY_NONCONST +#define PG_PAM_CONST +#else +#define PG_PAM_CONST const +#endif + static int CheckPAMAuth(Port *port, const char *user, const char *password); -static int pam_passwd_conv_proc(int num_msg, const struct pam_message **msg, +static int pam_passwd_conv_proc(int num_msg, + PG_PAM_CONST struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); static struct pam_conv pam_passw_conv = { @@ -666,7 +674,7 @@ ClientAuthentication(Port *port) * Send an authentication request packet to the frontend. */ void -sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, int extralen) +sendAuthRequest(Port *port, AuthRequest areq, const void *extradata, int extralen) { StringInfoData buf; @@ -874,7 +882,7 @@ CheckPWChallengeAuth(Port *port, const char **logdetail) static int CheckMD5Auth(Port *port, char *shadow_pass, const char **logdetail) { - char md5Salt[4]; /* Password salt */ + uint8 md5Salt[4]; /* Password salt */ char *passwd; int result; @@ -1917,7 +1925,7 @@ auth_peer(hbaPort *port) */ static int -pam_passwd_conv_proc(int num_msg, const struct pam_message **msg, +pam_passwd_conv_proc(int num_msg, PG_PAM_CONST struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { const char *passwd; diff --git a/src/backend/libpq/be-secure-gssapi.c b/src/backend/libpq/be-secure-gssapi.c index a3d610b1373da..5d98c58ffa8be 100644 --- a/src/backend/libpq/be-secure-gssapi.c +++ b/src/backend/libpq/be-secure-gssapi.c @@ -46,11 +46,18 @@ * don't want the other side to send arbitrarily huge packets as we * would have to allocate memory for them to then pass them to GSSAPI. * - * Therefore, these two #define's are effectively part of the protocol + * Therefore, this #define is effectively part of the protocol * spec and can't ever be changed. */ -#define PQ_GSS_SEND_BUFFER_SIZE 16384 -#define PQ_GSS_RECV_BUFFER_SIZE 16384 +#define PQ_GSS_MAX_PACKET_SIZE 16384 /* includes uint32 header word */ + +/* + * However, during the authentication exchange we must cope with whatever + * message size the GSSAPI library wants to send (because our protocol + * doesn't support splitting those messages). Depending on configuration + * those messages might be as much as 64kB. + */ +#define PQ_GSS_AUTH_BUFFER_SIZE 65536 /* includes uint32 header word */ /* * Since we manage at most one GSS-encrypted connection per backend, @@ -114,9 +121,9 @@ be_gssapi_write(Port *port, const void *ptr, size_t len) * again, so if it offers a len less than that, something is wrong. * * Note: it may seem attractive to report partial write completion once - * we've successfully sent any encrypted packets. However, that can cause - * problems for callers; notably, pqPutMsgEnd's heuristic to send only - * full 8K blocks interacts badly with such a hack. We won't save much, + * we've successfully sent any encrypted packets. However, doing that + * expands the state space of this processing and has been responsible for + * bugs in the past (cf. commit d053a879b). We won't save much, * typically, by letting callers discard data early, so don't risk it. */ if (len < PqGSSSendConsumed) @@ -210,12 +217,12 @@ be_gssapi_write(Port *port, const void *ptr, size_t len) errno = ECONNRESET; return -1; } - if (output.length > PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)) + if (output.length > PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)) { ereport(COMMERROR, (errmsg("server tried to send oversize GSSAPI packet (%zu > %zu)", (size_t) output.length, - PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)))); + PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)))); errno = ECONNRESET; return -1; } @@ -346,12 +353,12 @@ be_gssapi_read(Port *port, void *ptr, size_t len) /* Decode the packet length and check for overlength packet */ input.length = pg_ntoh32(*(uint32 *) PqGSSRecvBuffer); - if (input.length > PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32)) + if (input.length > PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)) { ereport(COMMERROR, (errmsg("oversize GSSAPI packet sent by the client (%zu > %zu)", (size_t) input.length, - PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32)))); + PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)))); errno = ECONNRESET; return -1; } @@ -500,7 +507,7 @@ secure_open_gssapi(Port *port) minor; gss_cred_id_t delegated_creds; - INJECTION_POINT("backend-gssapi-startup"); + INJECTION_POINT("backend-gssapi-startup", NULL); /* * Allocate subsidiary Port data for GSSAPI operations. @@ -517,10 +524,13 @@ secure_open_gssapi(Port *port) * that will never use them, and we ensure that the buffers are * sufficiently aligned for the length-word accesses that we do in some * places in this file. + * + * We'll use PQ_GSS_AUTH_BUFFER_SIZE-sized buffers until transport + * negotiation is complete, then switch to PQ_GSS_MAX_PACKET_SIZE. */ - PqGSSSendBuffer = malloc(PQ_GSS_SEND_BUFFER_SIZE); - PqGSSRecvBuffer = malloc(PQ_GSS_RECV_BUFFER_SIZE); - PqGSSResultBuffer = malloc(PQ_GSS_RECV_BUFFER_SIZE); + PqGSSSendBuffer = malloc(PQ_GSS_AUTH_BUFFER_SIZE); + PqGSSRecvBuffer = malloc(PQ_GSS_AUTH_BUFFER_SIZE); + PqGSSResultBuffer = malloc(PQ_GSS_AUTH_BUFFER_SIZE); if (!PqGSSSendBuffer || !PqGSSRecvBuffer || !PqGSSResultBuffer) ereport(FATAL, (errcode(ERRCODE_OUT_OF_MEMORY), @@ -568,16 +578,16 @@ secure_open_gssapi(Port *port) /* * During initialization, packets are always fully consumed and - * shouldn't ever be over PQ_GSS_RECV_BUFFER_SIZE in length. + * shouldn't ever be over PQ_GSS_AUTH_BUFFER_SIZE in total length. * * Verify on our side that the client doesn't do something funny. */ - if (input.length > PQ_GSS_RECV_BUFFER_SIZE) + if (input.length > PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)) { ereport(COMMERROR, - (errmsg("oversize GSSAPI packet sent by the client (%zu > %d)", + (errmsg("oversize GSSAPI packet sent by the client (%zu > %zu)", (size_t) input.length, - PQ_GSS_RECV_BUFFER_SIZE))); + PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)))); return -1; } @@ -631,12 +641,12 @@ secure_open_gssapi(Port *port) { uint32 netlen = pg_hton32(output.length); - if (output.length > PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)) + if (output.length > PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)) { ereport(COMMERROR, (errmsg("server tried to send oversize GSSAPI packet (%zu > %zu)", (size_t) output.length, - PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)))); + PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)))); gss_release_buffer(&minor, &output); return -1; } @@ -691,12 +701,29 @@ secure_open_gssapi(Port *port) break; } + /* + * Release the large authentication buffers and allocate the ones we want + * for normal operation. + */ + free(PqGSSSendBuffer); + free(PqGSSRecvBuffer); + free(PqGSSResultBuffer); + PqGSSSendBuffer = malloc(PQ_GSS_MAX_PACKET_SIZE); + PqGSSRecvBuffer = malloc(PQ_GSS_MAX_PACKET_SIZE); + PqGSSResultBuffer = malloc(PQ_GSS_MAX_PACKET_SIZE); + if (!PqGSSSendBuffer || !PqGSSRecvBuffer || !PqGSSResultBuffer) + ereport(FATAL, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"))); + PqGSSSendLength = PqGSSSendNext = PqGSSSendConsumed = 0; + PqGSSRecvLength = PqGSSResultLength = PqGSSResultNext = 0; + /* * Determine the max packet size which will fit in our buffer, after * accounting for the length. be_gssapi_write will need this. */ major = gss_wrap_size_limit(&minor, port->gss->ctx, 1, GSS_C_QOP_DEFAULT, - PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32), + PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32), &PqGSSMaxPktSize); if (GSS_ERROR(major)) diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c index 64ff3ce3d6a7a..c8b63ef824900 100644 --- a/src/backend/libpq/be-secure-openssl.c +++ b/src/backend/libpq/be-secure-openssl.c @@ -1436,10 +1436,10 @@ initialize_ecdh(SSL_CTX *context, bool isServerStart) */ ereport(isServerStart ? FATAL : LOG, errcode(ERRCODE_CONFIG_FILE_ERROR), - errmsg("failed to set group names specified in ssl_groups: %s", + errmsg("could not set group names specified in ssl_groups: %s", SSLerrmessageExt(ERR_get_error(), _("No valid groups found"))), - errhint("Ensure that each group name is spelled correctly and supported by the installed version of OpenSSL")); + errhint("Ensure that each group name is spelled correctly and supported by the installed version of OpenSSL.")); return false; } #endif diff --git a/src/backend/libpq/be-secure.c b/src/backend/libpq/be-secure.c index 91576f942857d..d723e74e8137b 100644 --- a/src/backend/libpq/be-secure.c +++ b/src/backend/libpq/be-secure.c @@ -131,7 +131,7 @@ secure_open_server(Port *port) } Assert(pq_buffer_remaining_data() == 0); - INJECTION_POINT("backend-ssl-startup"); + INJECTION_POINT("backend-ssl-startup", NULL); r = be_tls_open_server(port); diff --git a/src/backend/libpq/crypt.c b/src/backend/libpq/crypt.c index cbb85a27cc167..f6b641e726ec3 100644 --- a/src/backend/libpq/crypt.c +++ b/src/backend/libpq/crypt.c @@ -136,7 +136,7 @@ encrypt_password(PasswordType target_type, const char *role, case PASSWORD_TYPE_MD5: encrypted_password = palloc(MD5_PASSWD_LEN + 1); - if (!pg_md5_encrypt(password, role, strlen(role), + if (!pg_md5_encrypt(password, (uint8 *) role, strlen(role), encrypted_password, &errstr)) elog(ERROR, "password encryption failed: %s", errstr); break; @@ -201,7 +201,7 @@ encrypt_password(PasswordType target_type, const char *role, int md5_crypt_verify(const char *role, const char *shadow_pass, const char *client_pass, - const char *md5_salt, int md5_salt_len, + const uint8 *md5_salt, int md5_salt_len, const char **logdetail) { int retval; @@ -284,7 +284,7 @@ plain_crypt_verify(const char *role, const char *shadow_pass, case PASSWORD_TYPE_MD5: if (!pg_md5_encrypt(client_pass, - role, + (uint8 *) role, strlen(role), crypt_client_pass, &errstr)) diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 332fad278351c..fecee8224d075 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -2873,8 +2873,11 @@ check_ident_usermap(IdentLine *identLine, const char *usermap_name, !token_has_regexp(identLine->pg_user) && (ofs = strstr(identLine->pg_user->string, "\\1")) != NULL) { + const char *repl_str; + size_t repl_len; + char *old_pg_user; char *expanded_pg_user; - int offset; + size_t offset; /* substitution of the first argument requested */ if (matches[1].rm_so < 0) @@ -2886,18 +2889,33 @@ check_ident_usermap(IdentLine *identLine, const char *usermap_name, *error_p = true; return; } + repl_str = system_user + matches[1].rm_so; + repl_len = matches[1].rm_eo - matches[1].rm_so; /* - * length: original length minus length of \1 plus length of match - * plus null terminator + * It's allowed to have more than one \1 in the string, and we'll + * replace them all. But that's pretty unusual so we optimize on + * the assumption of only one occurrence, which motivates doing + * repeated replacements instead of making two passes over the + * string to determine the final length right away. */ - expanded_pg_user = palloc0(strlen(identLine->pg_user->string) - 2 + (matches[1].rm_eo - matches[1].rm_so) + 1); - offset = ofs - identLine->pg_user->string; - memcpy(expanded_pg_user, identLine->pg_user->string, offset); - memcpy(expanded_pg_user + offset, - system_user + matches[1].rm_so, - matches[1].rm_eo - matches[1].rm_so); - strcat(expanded_pg_user, ofs + 2); + old_pg_user = identLine->pg_user->string; + do + { + /* + * length: current length minus length of \1 plus length of + * replacement plus null terminator + */ + expanded_pg_user = palloc(strlen(old_pg_user) - 2 + repl_len + 1); + /* ofs points into the old_pg_user string at this point */ + offset = ofs - old_pg_user; + memcpy(expanded_pg_user, old_pg_user, offset); + memcpy(expanded_pg_user + offset, repl_str, repl_len); + strcpy(expanded_pg_user + offset + repl_len, ofs + 2); + if (old_pg_user != identLine->pg_user->string) + pfree(old_pg_user); + old_pg_user = expanded_pg_user; + } while ((ofs = strstr(old_pg_user + offset + repl_len, "\\1")) != NULL); /* * Mark the token as quoted, so it will only be compared literally diff --git a/src/backend/libpq/pg_ident.conf.sample b/src/backend/libpq/pg_ident.conf.sample index f5225f26cdf2c..8ee6c0ba31576 100644 --- a/src/backend/libpq/pg_ident.conf.sample +++ b/src/backend/libpq/pg_ident.conf.sample @@ -13,25 +13,25 @@ # user names to their corresponding PostgreSQL user names. Records # are of the form: # -# MAPNAME SYSTEM-USERNAME PG-USERNAME +# MAPNAME SYSTEM-USERNAME DATABASE-USERNAME # # (The uppercase quantities must be replaced by actual values.) # # MAPNAME is the (otherwise freely chosen) map name that was used in # pg_hba.conf. SYSTEM-USERNAME is the detected user name of the -# client. PG-USERNAME is the requested PostgreSQL user name. The -# existence of a record specifies that SYSTEM-USERNAME may connect as -# PG-USERNAME. +# client. DATABASE-USERNAME is the requested PostgreSQL user name. +# The existence of a record specifies that SYSTEM-USERNAME may connect +# as DATABASE-USERNAME. # -# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a -# regular expression. Optionally this can contain a capture (a -# parenthesized subexpression). The substring matching the capture -# will be substituted for \1 (backslash-one) if present in -# PG-USERNAME. +# If SYSTEM-USERNAME starts with a slash (/), the rest of it will be +# treated as a regular expression. Optionally this can contain a capture +# (a parenthesized subexpression). The substring matching the capture +# will be substituted for \1 (backslash-one) if that appears in +# DATABASE-USERNAME. # -# PG-USERNAME can be "all", a user name, a group name prefixed with "+", or -# a regular expression (if it starts with a slash (/)). If it is a regular -# expression, the substring matching with \1 has no effect. +# DATABASE-USERNAME can be "all", a user name, a group name prefixed with "+", +# or a regular expression (if it starts with a slash (/)). If it is a regular +# expression, no substitution for \1 will occur. # # Multiple maps may be specified in this file and used by pg_hba.conf. # @@ -69,4 +69,4 @@ # Put your actual configuration here # ---------------------------------- -# MAPNAME SYSTEM-USERNAME PG-USERNAME +# MAPNAME SYSTEM-USERNAME DATABASE-USERNAME diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index e5171467de18d..25f739a6a17d4 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -858,7 +858,6 @@ RemoveSocketFiles(void) (void) unlink(sock_path); } /* Since we're about to exit, no need to reclaim storage */ - sock_paths = NIL; } diff --git a/src/backend/libpq/pqmq.c b/src/backend/libpq/pqmq.c index f1a08bc32ca17..5f39949a36773 100644 --- a/src/backend/libpq/pqmq.c +++ b/src/backend/libpq/pqmq.c @@ -23,7 +23,7 @@ #include "tcop/tcopprot.h" #include "utils/builtins.h" -static shm_mq_handle *pq_mq_handle; +static shm_mq_handle *pq_mq_handle = NULL; static bool pq_mq_busy = false; static pid_t pq_mq_parallel_leader_pid = 0; static ProcNumber pq_mq_parallel_leader_proc_number = INVALID_PROC_NUMBER; @@ -66,7 +66,11 @@ pq_redirect_to_shm_mq(dsm_segment *seg, shm_mq_handle *mqh) static void pq_cleanup_redirect_to_shm_mq(dsm_segment *seg, Datum arg) { - pq_mq_handle = NULL; + if (pq_mq_handle != NULL) + { + pfree(pq_mq_handle); + pq_mq_handle = NULL; + } whereToSendOutput = DestNone; } @@ -131,8 +135,11 @@ mq_putmessage(char msgtype, const char *s, size_t len) if (pq_mq_busy) { if (pq_mq_handle != NULL) + { shm_mq_detach(pq_mq_handle); - pq_mq_handle = NULL; + pfree(pq_mq_handle); + pq_mq_handle = NULL; + } return EOF; } @@ -152,8 +159,6 @@ mq_putmessage(char msgtype, const char *s, size_t len) iov[1].data = s; iov[1].len = len; - Assert(pq_mq_handle != NULL); - for (;;) { /* @@ -161,6 +166,7 @@ mq_putmessage(char msgtype, const char *s, size_t len) * that the shared memory value is updated before we send the parallel * message signal right after this. */ + Assert(pq_mq_handle != NULL); result = shm_mq_sendv(pq_mq_handle, iov, 2, true, true); if (pq_mq_parallel_leader_pid != 0) diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 7d63cf94a6b44..bdcb5e4f26159 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -125,13 +125,17 @@ main(int argc, char *argv[]) set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("postgres")); /* - * In the postmaster, absorb the environment values for LC_COLLATE and - * LC_CTYPE. Individual backends will change these later to settings - * taken from pg_database, but the postmaster cannot do that. If we leave - * these set to "C" then message localization might not work well in the - * postmaster. + * Collation is handled by pg_locale.c, and the behavior is dependent on + * the provider. strcoll(), etc., should not be called directly. + */ + init_locale("LC_COLLATE", LC_COLLATE, "C"); + + /* + * In the postmaster, absorb the environment value for LC_CTYPE. + * Individual backends will change it later to pg_database.datctype, but + * the postmaster cannot do that. If we leave it set to "C" then message + * localization might not work well in the postmaster. */ - init_locale("LC_COLLATE", LC_COLLATE, ""); init_locale("LC_CTYPE", LC_CTYPE, ""); /* diff --git a/src/backend/meson.build b/src/backend/meson.build index 2b0db21480470..b831a541652bc 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -169,7 +169,7 @@ backend_mod_code = declare_dependency( compile_args: pg_mod_c_args, include_directories: postgres_inc, link_args: pg_mod_link_args, - sources: generated_headers + generated_backend_headers, + sources: generated_backend_headers_stamp, dependencies: backend_mod_deps, ) diff --git a/src/backend/nodes/bitmapset.c b/src/backend/nodes/bitmapset.c index bf512cf806ff7..b4ecf0b039017 100644 --- a/src/backend/nodes/bitmapset.c +++ b/src/backend/nodes/bitmapset.c @@ -1343,7 +1343,7 @@ bms_next_member(const Bitmapset *a, int prevbit) * * Returns largest member less than "prevbit", or -2 if there is none. * "prevbit" must NOT be more than one above the highest possible bit that can - * be set at the Bitmapset at its current size. + * be set in the Bitmapset at its current size. * * To ease finding the highest set bit for the initial loop, the special * prevbit value of -1 can be passed to have the function find the highest @@ -1379,6 +1379,10 @@ bms_prev_member(const Bitmapset *a, int prevbit) if (a == NULL || prevbit == 0) return -2; + /* Validate callers didn't give us something out of range */ + Assert(prevbit <= a->nwords * BITS_PER_BITMAPWORD); + Assert(prevbit >= -1); + /* transform -1 to the highest possible bit we could have set */ if (prevbit == -1) prevbit = a->nwords * BITS_PER_BITMAPWORD - 1; diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl index f6229089cd15b..9ecddb1423143 100644 --- a/src/backend/nodes/gen_node_support.pl +++ b/src/backend/nodes/gen_node_support.pl @@ -195,6 +195,7 @@ sub elem foreach my $infile (@ARGV) { my $in_struct; + my $in_struct_lineno; my $subline; my $is_node_struct; my $supertype; @@ -543,6 +544,7 @@ sub elem if ($line =~ /^(?:typedef )?struct (\w+)$/ && $1 ne 'Node') { $in_struct = $1; + $in_struct_lineno = $lineno; $subline = 0; } # one node type typedef'ed directly from another @@ -570,7 +572,8 @@ sub elem if ($in_struct) { - die "runaway \"$in_struct\" in file \"$infile\"\n"; + die + "$infile:$in_struct_lineno: could not find closing brace for struct \"$in_struct\"\n"; } close $ifh; @@ -1036,6 +1039,11 @@ sub elem print $off "\tWRITE_UINT_FIELD($f);\n"; print $rff "\tREAD_UINT_FIELD($f);\n" unless $no_read; } + elsif ($t eq 'int64') + { + print $off "\tWRITE_INT64_FIELD($f);\n"; + print $rff "\tREAD_INT64_FIELD($f);\n" unless $no_read; + } elsif ($t eq 'uint64' || $t eq 'AclMode') { @@ -1321,7 +1329,7 @@ sub elem # Node type. Squash constants if requested. if ($query_jumble_squash) { - print $jff "\tJUMBLE_ELEMENTS($f);\n" + print $jff "\tJUMBLE_ELEMENTS($f, node);\n" unless $query_jumble_ignore; } else diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index bb9bdd6719266..eaf391fc2abdc 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -51,6 +51,12 @@ static void outDouble(StringInfo str, double d); #define WRITE_UINT_FIELD(fldname) \ appendStringInfo(str, " :" CppAsString(fldname) " %u", node->fldname) +/* Write a signed integer field (anything written with INT64_FORMAT) */ +#define WRITE_INT64_FIELD(fldname) \ + appendStringInfo(str, \ + " :" CppAsString(fldname) " " INT64_FORMAT, \ + node->fldname) + /* Write an unsigned integer field (anything written with UINT64_FORMAT) */ #define WRITE_UINT64_FIELD(fldname) \ appendStringInfo(str, " :" CppAsString(fldname) " " UINT64_FORMAT, \ @@ -465,9 +471,12 @@ _outEquivalenceClass(StringInfo str, const EquivalenceClass *node) WRITE_NODE_FIELD(ec_opfamilies); WRITE_OID_FIELD(ec_collation); + WRITE_INT_FIELD(ec_childmembers_size); WRITE_NODE_FIELD(ec_members); + WRITE_NODE_ARRAY(ec_childmembers, node->ec_childmembers_size); WRITE_NODE_FIELD(ec_sources); - WRITE_NODE_FIELD(ec_derives); + /* Only ec_derives_list is written; hash is not serialized. */ + WRITE_NODE_FIELD(ec_derives_list); WRITE_BITMAPSET_FIELD(ec_relids); WRITE_BOOL_FIELD(ec_has_const); WRITE_BOOL_FIELD(ec_has_volatile); @@ -644,6 +653,8 @@ _outA_Expr(StringInfo str, const A_Expr *node) WRITE_NODE_FIELD(lexpr); WRITE_NODE_FIELD(rexpr); + WRITE_LOCATION_FIELD(rexpr_list_start); + WRITE_LOCATION_FIELD(rexpr_list_end); WRITE_LOCATION_FIELD(location); } diff --git a/src/backend/nodes/queryjumblefuncs.c b/src/backend/nodes/queryjumblefuncs.c index 513cf92d357f3..31f971519772d 100644 --- a/src/backend/nodes/queryjumblefuncs.c +++ b/src/backend/nodes/queryjumblefuncs.c @@ -21,6 +21,11 @@ * tree(s) generated from the query. The executor can then use this value * to blame query costs on the proper queryId. * + * Arrays of two or more constants and PARAM_EXTERN parameters are "squashed" + * and contribute only once to the jumble. This has the effect that queries + * that differ only on the length of such lists have the same queryId. + * + * * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * @@ -56,16 +61,18 @@ int compute_query_id = COMPUTE_QUERY_ID_AUTO; bool query_id_enabled = false; static JumbleState *InitJumble(void); -static uint64 DoJumble(JumbleState *jstate, Node *node); +static int64 DoJumble(JumbleState *jstate, Node *node); static void AppendJumble(JumbleState *jstate, - const unsigned char *item, Size size); + const unsigned char *value, Size size); static void FlushPendingNulls(JumbleState *jstate); static void RecordConstLocation(JumbleState *jstate, - int location, bool merged); + bool extern_param, + int location, int len); static void _jumbleNode(JumbleState *jstate, Node *node); -static void _jumbleElements(JumbleState *jstate, List *elements); -static void _jumbleA_Const(JumbleState *jstate, Node *node); static void _jumbleList(JumbleState *jstate, Node *node); +static void _jumbleElements(JumbleState *jstate, List *elements, Node *node); +static void _jumbleParam(JumbleState *jstate, Node *node); +static void _jumbleA_Const(JumbleState *jstate, Node *node); static void _jumbleVariableSetStmt(JumbleState *jstate, Node *node); static void _jumbleRangeTblEntry_eref(JumbleState *jstate, RangeTblEntry *rte, @@ -141,12 +148,12 @@ JumbleQuery(Query *query) * If we are unlucky enough to get a hash of zero, use 1 instead for * normal statements and 2 for utility queries. */ - if (query->queryId == UINT64CONST(0)) + if (query->queryId == INT64CONST(0)) { if (query->utilityStmt) - query->queryId = UINT64CONST(2); + query->queryId = INT64CONST(2); else - query->queryId = UINT64CONST(1); + query->queryId = INT64CONST(1); } return jstate; @@ -185,6 +192,7 @@ InitJumble(void) jstate->clocations_count = 0; jstate->highest_extern_param_id = 0; jstate->pending_nulls = 0; + jstate->has_squashed_lists = false; #ifdef USE_ASSERT_CHECKING jstate->total_jumble_len = 0; #endif @@ -197,7 +205,7 @@ InitJumble(void) * Jumble the given Node using the given JumbleState and return the resulting * jumble hash. */ -static uint64 +static int64 DoJumble(JumbleState *jstate, Node *node) { /* Jumble the given node */ @@ -207,10 +215,14 @@ DoJumble(JumbleState *jstate, Node *node) if (jstate->pending_nulls > 0) FlushPendingNulls(jstate); + /* Squashed list found, reset highest_extern_param_id */ + if (jstate->has_squashed_lists) + jstate->highest_extern_param_id = 0; + /* Process the jumble buffer and produce the hash value */ - return DatumGetUInt64(hash_any_extended(jstate->jumble, - jstate->jumble_len, - 0)); + return DatumGetInt64(hash_any_extended(jstate->jumble, + jstate->jumble_len, + 0)); } /* @@ -256,10 +268,10 @@ AppendJumbleInternal(JumbleState *jstate, const unsigned char *item, if (unlikely(jumble_len >= JUMBLE_SIZE)) { - uint64 start_hash; + int64 start_hash; - start_hash = DatumGetUInt64(hash_any_extended(jumble, - JUMBLE_SIZE, 0)); + start_hash = DatumGetInt64(hash_any_extended(jumble, + JUMBLE_SIZE, 0)); memcpy(jumble, &start_hash, sizeof(start_hash)); jumble_len = sizeof(start_hash); } @@ -357,7 +369,7 @@ AppendJumble64(JumbleState *jstate, const unsigned char *value) /* * FlushPendingNulls - * Incorporate the pending_null value into the jumble buffer. + * Incorporate the pending_nulls value into the jumble buffer. * * Note: Callers must ensure that there's at least 1 pending NULL. */ @@ -373,15 +385,17 @@ FlushPendingNulls(JumbleState *jstate) /* - * Record location of constant within query string of query tree that is - * currently being walked. + * Record the location of some kind of constant within a query string. + * These are not only bare constants but also expressions that ultimately + * constitute a constant, such as those inside casts and simple function + * calls; if extern_param, then it corresponds to a PARAM_EXTERN Param. * - * 'squashed' signals that the constant represents the first or the last - * element in a series of merged constants, and everything but the first/last - * element contributes nothing to the jumble hash. + * If length is -1, it indicates a single such constant element. If + * it's a positive integer, it indicates the length of a squashable + * list of them. */ static void -RecordConstLocation(JumbleState *jstate, int location, bool squashed) +RecordConstLocation(JumbleState *jstate, bool extern_param, int location, int len) { /* -1 indicates unknown or undefined location */ if (location >= 0) @@ -396,9 +410,15 @@ RecordConstLocation(JumbleState *jstate, int location, bool squashed) sizeof(LocationLen)); } jstate->clocations[jstate->clocations_count].location = location; - /* initialize lengths to -1 to simplify third-party module usage */ - jstate->clocations[jstate->clocations_count].squashed = squashed; - jstate->clocations[jstate->clocations_count].length = -1; + + /* + * Lengths are either positive integers (indicating a squashable + * list), or -1. + */ + Assert(len > -1 || len == -1); + jstate->clocations[jstate->clocations_count].length = len; + jstate->clocations[jstate->clocations_count].squashed = (len > -1); + jstate->clocations[jstate->clocations_count].extern_param = extern_param; jstate->clocations_count++; } } @@ -407,47 +427,74 @@ RecordConstLocation(JumbleState *jstate, int location, bool squashed) * Subroutine for _jumbleElements: Verify a few simple cases where we can * deduce that the expression is a constant: * - * - Ignore a possible wrapping RelabelType and CoerceViaIO. - * - If it's a FuncExpr, check that the function is an implicit + * - See through any wrapping RelabelType and CoerceViaIO layers. + * - If it's a FuncExpr, check that the function is a builtin * cast and its arguments are Const. - * - Otherwise test if the expression is a simple Const. + * - Otherwise test if the expression is a simple Const or a + * PARAM_EXTERN param. */ static bool -IsSquashableConst(Node *element) +IsSquashableConstant(Node *element) { - if (IsA(element, RelabelType)) - element = (Node *) ((RelabelType *) element)->arg; - - if (IsA(element, CoerceViaIO)) - element = (Node *) ((CoerceViaIO *) element)->arg; - - if (IsA(element, FuncExpr)) +restart: + switch (nodeTag(element)) { - FuncExpr *func = (FuncExpr *) element; - ListCell *temp; + case T_RelabelType: + /* Unwrap RelabelType */ + element = (Node *) ((RelabelType *) element)->arg; + goto restart; - if (func->funcformat != COERCE_IMPLICIT_CAST && - func->funcformat != COERCE_EXPLICIT_CAST) - return false; + case T_CoerceViaIO: + /* Unwrap CoerceViaIO */ + element = (Node *) ((CoerceViaIO *) element)->arg; + goto restart; - if (func->funcid > FirstGenbkiObjectId) - return false; + case T_Const: + return true; - foreach(temp, func->args) - { - Node *arg = lfirst(temp); + case T_Param: + return castNode(Param, element)->paramkind == PARAM_EXTERN; - if (!IsA(arg, Const)) /* XXX we could recurse here instead */ - return false; - } + case T_FuncExpr: + { + FuncExpr *func = (FuncExpr *) element; + ListCell *temp; - return true; - } + if (func->funcformat != COERCE_IMPLICIT_CAST && + func->funcformat != COERCE_EXPLICIT_CAST) + return false; - if (!IsA(element, Const)) - return false; + if (func->funcid > FirstGenbkiObjectId) + return false; - return true; + /* + * We can check function arguments recursively, being careful + * about recursing too deep. At each recursion level it's + * enough to test the stack on the first element. (Note that + * I wasn't able to hit this without bloating the stack + * artificially in this function: the parser errors out before + * stack size becomes a problem here.) + */ + foreach(temp, func->args) + { + Node *arg = lfirst(temp); + + if (!IsA(arg, Const)) + { + if (foreach_current_index(temp) == 0 && + stack_is_too_deep()) + return false; + else if (!IsSquashableConstant(arg)) + return false; + } + } + + return true; + } + + default: + return false; + } } /* @@ -457,39 +504,33 @@ IsSquashableConst(Node *element) * Return value indicates if squashing is possible. * * Note that this function searches only for explicit Const nodes with - * possibly very simple decorations on top, and does not try to simplify - * expressions. + * possibly very simple decorations on top and PARAM_EXTERN parameters, + * and does not try to simplify expressions. */ static bool -IsSquashableConstList(List *elements, Node **firstExpr, Node **lastExpr) +IsSquashableConstantList(List *elements) { ListCell *temp; - /* - * If squashing is disabled, or the list is too short, we don't try to - * squash it. - */ + /* If the list is too short, we don't try to squash it. */ if (list_length(elements) < 2) return false; foreach(temp, elements) { - if (!IsSquashableConst(lfirst(temp))) + if (!IsSquashableConstant(lfirst(temp))) return false; } - *firstExpr = linitial(elements); - *lastExpr = llast(elements); - return true; } #define JUMBLE_NODE(item) \ _jumbleNode(jstate, (Node *) expr->item) -#define JUMBLE_ELEMENTS(list) \ - _jumbleElements(jstate, (List *) expr->list) +#define JUMBLE_ELEMENTS(list, node) \ + _jumbleElements(jstate, (List *) expr->list, node) #define JUMBLE_LOCATION(location) \ - RecordConstLocation(jstate, expr->location, false) + RecordConstLocation(jstate, false, expr->location, -1) #define JUMBLE_FIELD(item) \ do { \ if (sizeof(expr->item) == 8) \ @@ -516,42 +557,6 @@ do { \ #include "queryjumblefuncs.funcs.c" -/* - * We jumble lists of constant elements as one individual item regardless - * of how many elements are in the list. This means different queries - * jumble to the same query_id, if the only difference is the number of - * elements in the list. - */ -static void -_jumbleElements(JumbleState *jstate, List *elements) -{ - Node *first, - *last; - - if (IsSquashableConstList(elements, &first, &last)) - { - /* - * If this list of elements is squashable, keep track of the location - * of its first and last elements. When reading back the locations - * array, we'll see two consecutive locations with ->squashed set to - * true, indicating the location of initial and final elements of this - * list. - * - * For the limited set of cases we support now (implicit coerce via - * FuncExpr, Const) it's fine to use exprLocation of the 'last' - * expression, but if more complex composite expressions are to be - * supported (e.g., OpExpr or FuncExpr as an explicit call), more - * sophisticated tracking will be needed. - */ - RecordConstLocation(jstate, exprLocation(first), true); - RecordConstLocation(jstate, exprLocation(last), true); - } - else - { - _jumbleNode(jstate, (Node *) elements); - } -} - static void _jumbleNode(JumbleState *jstate, Node *node) { @@ -593,26 +598,6 @@ _jumbleNode(JumbleState *jstate, Node *node) break; } - /* Special cases to handle outside the automated code */ - switch (nodeTag(expr)) - { - case T_Param: - { - Param *p = (Param *) node; - - /* - * Update the highest Param id seen, in order to start - * normalization correctly. - */ - if (p->paramkind == PARAM_EXTERN && - p->paramid > jstate->highest_extern_param_id) - jstate->highest_extern_param_id = p->paramid; - } - break; - default: - break; - } - /* Ensure we added something to the jumble buffer */ Assert(jstate->total_jumble_len > prev_jumble_len); } @@ -648,6 +633,79 @@ _jumbleList(JumbleState *jstate, Node *node) } } +/* + * We try to jumble lists of expressions as one individual item regardless + * of how many elements are in the list. This is know as squashing, which + * results in different queries jumbling to the same query_id, if the only + * difference is the number of elements in the list. + * + * We allow constants and PARAM_EXTERN parameters to be squashed. To normalize + * such queries, we use the start and end locations of the list of elements in + * a list. + */ +static void +_jumbleElements(JumbleState *jstate, List *elements, Node *node) +{ + bool normalize_list = false; + + if (IsSquashableConstantList(elements)) + { + if (IsA(node, ArrayExpr)) + { + ArrayExpr *aexpr = (ArrayExpr *) node; + + if (aexpr->list_start > 0 && aexpr->list_end > 0) + { + RecordConstLocation(jstate, + false, + aexpr->list_start + 1, + (aexpr->list_end - aexpr->list_start) - 1); + normalize_list = true; + jstate->has_squashed_lists = true; + } + } + } + + if (!normalize_list) + { + _jumbleNode(jstate, (Node *) elements); + } +} + +/* + * We store the highest param ID of extern params. This can later be used + * to start the numbering of the placeholder for squashed lists. + */ +static void +_jumbleParam(JumbleState *jstate, Node *node) +{ + Param *expr = (Param *) node; + + JUMBLE_FIELD(paramkind); + JUMBLE_FIELD(paramid); + JUMBLE_FIELD(paramtype); + /* paramtypmode and paramcollid are ignored */ + + if (expr->paramkind == PARAM_EXTERN) + { + /* + * At this point, only external parameter locations outside of + * squashable lists will be recorded. + */ + RecordConstLocation(jstate, true, expr->location, -1); + + /* + * Update the highest Param id seen, in order to start normalization + * correctly. + * + * Note: This value is reset at the end of jumbling if there exists a + * squashable list. See the comment in the definition of JumbleState. + */ + if (expr->paramid > jstate->highest_extern_param_id) + jstate->highest_extern_param_id = expr->paramid; + } +} + static void _jumbleA_Const(JumbleState *jstate, Node *node) { diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 64d3a09f765bb..2f933e95cb95e 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -68,6 +68,12 @@ token = pg_strtok(&length); /* get field value */ \ local_node->fldname = atoui(token) +/* Read a signed integer field (anything written using INT64_FORMAT) */ +#define READ_INT64_FIELD(fldname) \ + token = pg_strtok(&length); /* skip :fldname */ \ + token = pg_strtok(&length); /* get field value */ \ + local_node->fldname = strtoi64(token, NULL, 10) + /* Read an unsigned integer field (anything written using UINT64_FORMAT) */ #define READ_UINT64_FIELD(fldname) \ token = pg_strtok(&length); /* skip :fldname */ \ @@ -520,6 +526,8 @@ _readA_Expr(void) READ_NODE_FIELD(lexpr); READ_NODE_FIELD(rexpr); + READ_LOCATION_FIELD(rexpr_list_start); + READ_LOCATION_FIELD(rexpr_list_end); READ_LOCATION_FIELD(location); READ_DONE(); @@ -622,7 +630,7 @@ readDatum(bool typbyval) } } else if (length <= 0) - res = (Datum) NULL; + res = (Datum) 0; else { s = (char *) palloc(length); diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README index f341d9f303c73..843368096fd0d 100644 --- a/src/backend/optimizer/README +++ b/src/backend/optimizer/README @@ -143,7 +143,6 @@ For example: {1 2},{2 3},{3 4} {1 2 3},{2 3 4} {1 2 3 4} - (other possibilities will be excluded for lack of join clauses) SELECT * FROM tab1, tab2, tab3, tab4 @@ -156,6 +155,11 @@ For example: {1 2 3},{1 3 4},{1 2 4} {1 2 3 4} +In each of these examples, other join-order possibilities will be excluded +for lack of join clauses. (In reality, use of EquivalenceClasses would +allow us to deduce additional join clauses that allow more join orders, +but here we ignore that to preserve the simplicity of the examples.) + We consider left-handed plans (the outer rel of an upper join is a joinrel, but the inner is always a single list item); right-handed plans (outer rel is always a single item); and bushy plans (both inner and outer can be @@ -636,7 +640,6 @@ RelOptInfo - a relation or joined relations GroupResultPath - childless Result plan node (used for degenerate grouping) MaterialPath - a Material plan node MemoizePath - a Memoize plan node for caching tuples from sub-paths - UniquePath - remove duplicate rows (either by hashing or sorting) GatherPath - collect the results of parallel workers GatherMergePath - collect parallel results, preserving their common sort order ProjectionPath - a Result plan node with child (used for projection) @@ -644,7 +647,7 @@ RelOptInfo - a relation or joined relations SortPath - a Sort plan node applied to some sub-path IncrementalSortPath - an IncrementalSort plan node applied to some sub-path GroupPath - a Group plan node applied to some sub-path - UpperUniquePath - a Unique plan node applied to some sub-path + UniquePath - a Unique plan node applied to some sub-path AggPath - an Agg plan node applied to some sub-path GroupingSetsPath - an Agg plan node used to implement GROUPING SETS MinMaxAggPath - a Result plan node with subplans performing MIN/MAX @@ -898,7 +901,7 @@ contain the equivalent child-relation variables or expressions. These members are *not* full-fledged members of the EquivalenceClass and do not affect the class's overall properties at all. They are kept only to simplify matching of child-relation expressions to EquivalenceClasses. -Most operations on EquivalenceClasses should ignore child members. +Most operations on EquivalenceClasses needn't look at child members. PathKeys diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index df3453f99f0fb..6cc6966b0600a 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -1891,7 +1891,17 @@ generate_orderedappend_paths(PlannerInfo *root, RelOptInfo *rel, */ if (root->tuple_fraction > 0) { - double path_fraction = (1.0 / root->tuple_fraction); + double path_fraction = root->tuple_fraction; + + /* + * Merge Append considers only live children relations. Dummy + * relations must be filtered out before. + */ + Assert(childrel->rows > 0); + + /* Convert absolute limit to a path fraction */ + if (path_fraction >= 1.0) + path_fraction /= childrel->rows; cheapest_fractional = get_cheapest_fractional_path_for_pathkeys(childrel->pathlist, @@ -2313,16 +2323,15 @@ find_window_run_conditions(Query *subquery, RangeTblEntry *rte, Index rti, runopexpr = NULL; runoperator = InvalidOid; - opinfos = get_op_btree_interpretation(opexpr->opno); + opinfos = get_op_index_interpretation(opexpr->opno); foreach(lc, opinfos) { - OpBtreeInterpretation *opinfo = (OpBtreeInterpretation *) lfirst(lc); - int strategy = opinfo->strategy; + OpIndexInterpretation *opinfo = (OpIndexInterpretation *) lfirst(lc); + CompareType cmptype = opinfo->cmptype; /* handle < / <= */ - if (strategy == BTLessStrategyNumber || - strategy == BTLessEqualStrategyNumber) + if (cmptype == COMPARE_LT || cmptype == COMPARE_LE) { /* * < / <= is supported for monotonically increasing functions in @@ -2339,8 +2348,7 @@ find_window_run_conditions(Query *subquery, RangeTblEntry *rte, Index rti, break; } /* handle > / >= */ - else if (strategy == BTGreaterStrategyNumber || - strategy == BTGreaterEqualStrategyNumber) + else if (cmptype == COMPARE_GT || cmptype == COMPARE_GE) { /* * > / >= is supported for monotonically decreasing functions in @@ -2357,9 +2365,9 @@ find_window_run_conditions(Query *subquery, RangeTblEntry *rte, Index rti, break; } /* handle = */ - else if (strategy == BTEqualStrategyNumber) + else if (cmptype == COMPARE_EQ) { - int16 newstrategy; + CompareType newcmptype; /* * When both monotonically increasing and decreasing then the @@ -2383,19 +2391,19 @@ find_window_run_conditions(Query *subquery, RangeTblEntry *rte, Index rti, * below the value in the equality condition. */ if (res->monotonic & MONOTONICFUNC_INCREASING) - newstrategy = wfunc_left ? BTLessEqualStrategyNumber : BTGreaterEqualStrategyNumber; + newcmptype = wfunc_left ? COMPARE_LE : COMPARE_GE; else - newstrategy = wfunc_left ? BTGreaterEqualStrategyNumber : BTLessEqualStrategyNumber; + newcmptype = wfunc_left ? COMPARE_GE : COMPARE_LE; /* We must keep the original equality qual */ *keep_original = true; runopexpr = opexpr; /* determine the operator to use for the WindowFuncRunCondition */ - runoperator = get_opfamily_member(opinfo->opfamily_id, - opinfo->oplefttype, - opinfo->oprighttype, - newstrategy); + runoperator = get_opfamily_member_for_cmptype(opinfo->opfamily_id, + opinfo->oplefttype, + opinfo->oprighttype, + newcmptype); break; } } diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index f6f77b8fe1938..783dca8a4acbe 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -2247,7 +2247,7 @@ append_nonpartial_cost(List *subpaths, int numpaths, int parallel_workers) * Determines and returns the cost of an Append node. */ void -cost_append(AppendPath *apath) +cost_append(AppendPath *apath, PlannerInfo *root) { ListCell *l; @@ -2309,26 +2309,52 @@ cost_append(AppendPath *apath) foreach(l, apath->subpaths) { Path *subpath = (Path *) lfirst(l); - Path sort_path; /* dummy for result of cost_sort */ + int presorted_keys; + Path sort_path; /* dummy for result of + * cost_sort/cost_incremental_sort */ - if (!pathkeys_contained_in(pathkeys, subpath->pathkeys)) + if (!pathkeys_count_contained_in(pathkeys, subpath->pathkeys, + &presorted_keys)) { /* * We'll need to insert a Sort node, so include costs for - * that. We can use the parent's LIMIT if any, since we + * that. We choose to use incremental sort if it is + * enabled and there are presorted keys; otherwise we use + * full sort. + * + * We can use the parent's LIMIT if any, since we * certainly won't pull more than that many tuples from * any child. */ - cost_sort(&sort_path, - NULL, /* doesn't currently need root */ - pathkeys, - subpath->disabled_nodes, - subpath->total_cost, - subpath->rows, - subpath->pathtarget->width, - 0.0, - work_mem, - apath->limit_tuples); + if (enable_incremental_sort && presorted_keys > 0) + { + cost_incremental_sort(&sort_path, + root, + pathkeys, + presorted_keys, + subpath->disabled_nodes, + subpath->startup_cost, + subpath->total_cost, + subpath->rows, + subpath->pathtarget->width, + 0.0, + work_mem, + apath->limit_tuples); + } + else + { + cost_sort(&sort_path, + root, + pathkeys, + subpath->disabled_nodes, + subpath->total_cost, + subpath->rows, + subpath->pathtarget->width, + 0.0, + work_mem, + apath->limit_tuples); + } + subpath = &sort_path; } @@ -2546,13 +2572,13 @@ cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath, Cost input_startup_cost = mpath->subpath->startup_cost; Cost input_total_cost = mpath->subpath->total_cost; double tuples = mpath->subpath->rows; - double calls = mpath->calls; + Cardinality est_calls = mpath->est_calls; int width = mpath->subpath->pathtarget->width; double hash_mem_bytes; double est_entry_bytes; - double est_cache_entries; - double ndistinct; + Cardinality est_cache_entries; + Cardinality ndistinct; double evict_ratio; double hit_ratio; Cost startup_cost; @@ -2578,7 +2604,7 @@ cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath, est_cache_entries = floor(hash_mem_bytes / est_entry_bytes); /* estimate on the distinct number of parameter values */ - ndistinct = estimate_num_groups(root, mpath->param_exprs, calls, NULL, + ndistinct = estimate_num_groups(root, mpath->param_exprs, est_calls, NULL, &estinfo); /* @@ -2590,7 +2616,10 @@ cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath, * certainly mean a MemoizePath will never survive add_path(). */ if ((estinfo.flags & SELFLAG_USED_DEFAULT) != 0) - ndistinct = calls; + ndistinct = est_calls; + + /* Remember the ndistinct estimate for EXPLAIN */ + mpath->est_unique_keys = ndistinct; /* * Since we've already estimated the maximum number of entries we can @@ -2618,9 +2647,12 @@ cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath, * must look at how many scans are estimated in total for this node and * how many of those scans we expect to get a cache hit. */ - hit_ratio = ((calls - ndistinct) / calls) * + hit_ratio = ((est_calls - ndistinct) / est_calls) * (est_cache_entries / Max(ndistinct, est_cache_entries)); + /* Remember the hit ratio estimate for EXPLAIN */ + mpath->est_hit_ratio = hit_ratio; + Assert(hit_ratio >= 0 && hit_ratio <= 1.0); /* @@ -3542,6 +3574,7 @@ final_cost_nestloop(PlannerInfo *root, NestPath *path, * 'inner_path' is the inner input to the join * 'outersortkeys' is the list of sort keys for the outer path * 'innersortkeys' is the list of sort keys for the inner path + * 'outer_presorted_keys' is the number of presorted keys of the outer path * 'extra' contains miscellaneous information about the join * * Note: outersortkeys and innersortkeys should be NIL if no explicit @@ -3553,6 +3586,7 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace, List *mergeclauses, Path *outer_path, Path *inner_path, List *outersortkeys, List *innersortkeys, + int outer_presorted_keys, JoinPathExtraData *extra) { int disabled_nodes; @@ -3608,7 +3642,7 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace, /* debugging check */ if (opathkey->pk_opfamily != ipathkey->pk_opfamily || opathkey->pk_eclass->ec_collation != ipathkey->pk_eclass->ec_collation || - opathkey->pk_strategy != ipathkey->pk_strategy || + opathkey->pk_cmptype != ipathkey->pk_cmptype || opathkey->pk_nulls_first != ipathkey->pk_nulls_first) elog(ERROR, "left and right pathkeys do not match in mergejoin"); @@ -3683,27 +3717,33 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace, if (outersortkeys) /* do we need to sort outer? */ { - bool use_incremental_sort = false; - int presorted_keys; + /* + * We can assert that the outer path is not already ordered + * appropriately for the mergejoin; otherwise, outersortkeys would + * have been set to NIL. + */ + Assert(!pathkeys_contained_in(outersortkeys, outer_path->pathkeys)); /* * We choose to use incremental sort if it is enabled and there are * presorted keys; otherwise we use full sort. */ - if (enable_incremental_sort) + if (enable_incremental_sort && outer_presorted_keys > 0) { - bool is_sorted PG_USED_FOR_ASSERTS_ONLY; - - is_sorted = pathkeys_count_contained_in(outersortkeys, - outer_path->pathkeys, - &presorted_keys); - Assert(!is_sorted); - - if (presorted_keys > 0) - use_incremental_sort = true; + cost_incremental_sort(&sort_path, + root, + outersortkeys, + outer_presorted_keys, + outer_path->disabled_nodes, + outer_path->startup_cost, + outer_path->total_cost, + outer_path_rows, + outer_path->pathtarget->width, + 0.0, + work_mem, + -1.0); } - - if (!use_incremental_sort) + else { cost_sort(&sort_path, root, @@ -3716,21 +3756,7 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace, work_mem, -1.0); } - else - { - cost_incremental_sort(&sort_path, - root, - outersortkeys, - presorted_keys, - outer_path->disabled_nodes, - outer_path->startup_cost, - outer_path->total_cost, - outer_path_rows, - outer_path->pathtarget->width, - 0.0, - work_mem, - -1.0); - } + disabled_nodes += sort_path.disabled_nodes; startup_cost += sort_path.startup_cost; startup_cost += (sort_path.total_cost - sort_path.startup_cost) @@ -3750,6 +3776,13 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace, if (innersortkeys) /* do we need to sort inner? */ { + /* + * We can assert that the inner path is not already ordered + * appropriately for the mergejoin; otherwise, innersortkeys would + * have been set to NIL. + */ + Assert(!pathkeys_contained_in(innersortkeys, inner_path->pathkeys)); + /* * We do not consider incremental sort for inner path, because * incremental sort does not support mark/restore. @@ -3933,10 +3966,12 @@ final_cost_mergejoin(PlannerInfo *root, MergePath *path, * when we should not. Can we do better without expensive selectivity * computations? * - * The whole issue is moot if we are working from a unique-ified outer - * input, or if we know we don't need to mark/restore at all. + * The whole issue is moot if we know we don't need to mark/restore at + * all, or if we are working from a unique-ified outer input. */ - if (IsA(outer_path, UniquePath) || path->skip_mark_restore) + if (path->skip_mark_restore || + RELATION_WAS_MADE_UNIQUE(outer_path->parent, extra->sjinfo, + path->jpath.jointype)) rescannedtuples = 0; else { @@ -4093,7 +4128,7 @@ cached_scansel(PlannerInfo *root, RestrictInfo *rinfo, PathKey *pathkey) cache = (MergeScanSelCache *) lfirst(lc); if (cache->opfamily == pathkey->pk_opfamily && cache->collation == pathkey->pk_eclass->ec_collation && - cache->strategy == pathkey->pk_strategy && + cache->cmptype == pathkey->pk_cmptype && cache->nulls_first == pathkey->pk_nulls_first) return cache; } @@ -4102,7 +4137,7 @@ cached_scansel(PlannerInfo *root, RestrictInfo *rinfo, PathKey *pathkey) mergejoinscansel(root, (Node *) rinfo->clause, pathkey->pk_opfamily, - pathkey->pk_strategy, + pathkey->pk_cmptype, pathkey->pk_nulls_first, &leftstartsel, &leftendsel, @@ -4115,7 +4150,7 @@ cached_scansel(PlannerInfo *root, RestrictInfo *rinfo, PathKey *pathkey) cache = (MergeScanSelCache *) palloc(sizeof(MergeScanSelCache)); cache->opfamily = pathkey->pk_opfamily; cache->collation = pathkey->pk_eclass->ec_collation; - cache->strategy = pathkey->pk_strategy; + cache->cmptype = pathkey->pk_cmptype; cache->nulls_first = pathkey->pk_nulls_first; cache->leftstartsel = leftstartsel; cache->leftendsel = leftendsel; @@ -4331,7 +4366,8 @@ final_cost_hashjoin(PlannerInfo *root, HashPath *path, * because we avoid contaminating the cache with a value that's wrong for * non-unique-ified paths. */ - if (IsA(inner_path, UniquePath)) + if (RELATION_WAS_MADE_UNIQUE(inner_path->parent, extra->sjinfo, + path->jpath.jointype)) { innerbucketsize = 1.0 / virtualbuckets; innermcvfreq = 0.0; @@ -5848,7 +5884,8 @@ get_foreign_key_join_selectivity(PlannerInfo *root, if (ec && ec->ec_has_const) { EquivalenceMember *em = fkinfo->fk_eclass_member[i]; - RestrictInfo *rinfo = find_derived_clause_for_ec_member(ec, + RestrictInfo *rinfo = find_derived_clause_for_ec_member(root, + ec, em); if (rinfo) diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 0f9ecf5ee8b2d..441f12f6c50cf 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -20,6 +20,7 @@ #include "access/stratnum.h" #include "catalog/pg_type.h" +#include "common/hashfn.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/appendinfo.h" @@ -33,11 +34,23 @@ #include "utils/lsyscache.h" +static EquivalenceMember *make_eq_member(EquivalenceClass *ec, + Expr *expr, Relids relids, + JoinDomain *jdomain, + EquivalenceMember *parent, + Oid datatype); static EquivalenceMember *add_eq_member(EquivalenceClass *ec, Expr *expr, Relids relids, JoinDomain *jdomain, - EquivalenceMember *parent, Oid datatype); +static EquivalenceMember *add_child_eq_member(PlannerInfo *root, + EquivalenceClass *ec, + int ec_index, Expr *expr, + Relids relids, + JoinDomain *jdomain, + EquivalenceMember *parent_em, + Oid datatype, + Index child_relid); static void generate_base_implied_equalities_const(PlannerInfo *root, EquivalenceClass *ec); static void generate_base_implied_equalities_no_const(PlannerInfo *root, @@ -72,7 +85,56 @@ static Bitmapset *get_eclass_indexes_for_relids(PlannerInfo *root, Relids relids); static Bitmapset *get_common_eclass_indexes(PlannerInfo *root, Relids relids1, Relids relids2); +static void ec_build_derives_hash(PlannerInfo *root, EquivalenceClass *ec); +static void ec_add_derived_clauses(EquivalenceClass *ec, List *clauses); +static void ec_add_derived_clause(EquivalenceClass *ec, RestrictInfo *clause); +static void ec_add_clause_to_derives_hash(EquivalenceClass *ec, RestrictInfo *rinfo); +static RestrictInfo *ec_search_clause_for_ems(PlannerInfo *root, EquivalenceClass *ec, + EquivalenceMember *leftem, + EquivalenceMember *rightem, + EquivalenceClass *parent_ec); +static RestrictInfo *ec_search_derived_clause_for_ems(PlannerInfo *root, + EquivalenceClass *ec, + EquivalenceMember *leftem, + EquivalenceMember *rightem, + EquivalenceClass *parent_ec); +/* + * Hash key identifying a derived clause. + * + * This structure should not be filled manually. Use fill_ec_derives_key() to + * set it up in canonical form. + */ +typedef struct +{ + EquivalenceMember *em1; + EquivalenceMember *em2; + EquivalenceClass *parent_ec; +} ECDerivesKey; + +/* Hash table entry in ec_derives_hash. */ +typedef struct +{ + uint32 status; + ECDerivesKey key; + RestrictInfo *rinfo; +} ECDerivesEntry; + +/* Threshold for switching from list to hash table */ +#define EC_DERIVES_HASH_THRESHOLD 32 + +#define SH_PREFIX derives +#define SH_ELEMENT_TYPE ECDerivesEntry +#define SH_KEY_TYPE ECDerivesKey +#define SH_KEY key +#define SH_HASH_KEY(tb, key) \ + hash_bytes((const unsigned char *) &(key), sizeof(ECDerivesKey)) +#define SH_EQUAL(tb, a, b) \ + ((a).em1 == (b).em1 && (a).em2 == (b).em2 && (a).parent_ec == (b).parent_ec) +#define SH_SCOPE static inline +#define SH_DECLARE +#define SH_DEFINE +#include "lib/simplehash.h" /* * process_equivalence @@ -264,11 +326,15 @@ process_equivalence(PlannerInfo *root, if (!equal(opfamilies, cur_ec->ec_opfamilies)) continue; + /* We don't expect any children yet */ + Assert(cur_ec->ec_childmembers == NULL); + foreach(lc2, cur_ec->ec_members) { EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc2); - Assert(!cur_em->em_is_child); /* no children yet */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); /* * Match constants only within the same JoinDomain (see @@ -342,7 +408,12 @@ process_equivalence(PlannerInfo *root, */ ec1->ec_members = list_concat(ec1->ec_members, ec2->ec_members); ec1->ec_sources = list_concat(ec1->ec_sources, ec2->ec_sources); - ec1->ec_derives = list_concat(ec1->ec_derives, ec2->ec_derives); + + /* + * Appends ec2's derived clauses to ec1->ec_derives_list and adds them + * to ec1->ec_derives_hash if present. + */ + ec_add_derived_clauses(ec1, ec2->ec_derives_list); ec1->ec_relids = bms_join(ec1->ec_relids, ec2->ec_relids); ec1->ec_has_const |= ec2->ec_has_const; /* can't need to set has_volatile */ @@ -355,7 +426,7 @@ process_equivalence(PlannerInfo *root, /* just to avoid debugging confusion w/ dangling pointers: */ ec2->ec_members = NIL; ec2->ec_sources = NIL; - ec2->ec_derives = NIL; + ec_clear_derived_clauses(ec2); ec2->ec_relids = NULL; ec1->ec_sources = lappend(ec1->ec_sources, restrictinfo); ec1->ec_min_security = Min(ec1->ec_min_security, @@ -373,7 +444,7 @@ process_equivalence(PlannerInfo *root, { /* Case 3: add item2 to ec1 */ em2 = add_eq_member(ec1, item2, item2_relids, - jdomain, NULL, item2_type); + jdomain, item2_type); ec1->ec_sources = lappend(ec1->ec_sources, restrictinfo); ec1->ec_min_security = Min(ec1->ec_min_security, restrictinfo->security_level); @@ -390,7 +461,7 @@ process_equivalence(PlannerInfo *root, { /* Case 3: add item1 to ec2 */ em1 = add_eq_member(ec2, item1, item1_relids, - jdomain, NULL, item1_type); + jdomain, item1_type); ec2->ec_sources = lappend(ec2->ec_sources, restrictinfo); ec2->ec_min_security = Min(ec2->ec_min_security, restrictinfo->security_level); @@ -410,9 +481,12 @@ process_equivalence(PlannerInfo *root, ec->ec_opfamilies = opfamilies; ec->ec_collation = collation; + ec->ec_childmembers_size = 0; ec->ec_members = NIL; + ec->ec_childmembers = NULL; ec->ec_sources = list_make1(restrictinfo); - ec->ec_derives = NIL; + ec->ec_derives_list = NIL; + ec->ec_derives_hash = NULL; ec->ec_relids = NULL; ec->ec_has_const = false; ec->ec_has_volatile = false; @@ -422,9 +496,9 @@ process_equivalence(PlannerInfo *root, ec->ec_max_security = restrictinfo->security_level; ec->ec_merged = NULL; em1 = add_eq_member(ec, item1, item1_relids, - jdomain, NULL, item1_type); + jdomain, item1_type); em2 = add_eq_member(ec, item2, item2_relids, - jdomain, NULL, item2_type); + jdomain, item2_type); root->eq_classes = lappend(root->eq_classes, ec); @@ -510,11 +584,13 @@ canonicalize_ec_expression(Expr *expr, Oid req_type, Oid req_collation) } /* - * add_eq_member - build a new EquivalenceMember and add it to an EC + * make_eq_member + * Build a new EquivalenceMember without adding it to an EC. If 'parent' + * is NULL, the result will be a parent member, otherwise a child member. */ static EquivalenceMember * -add_eq_member(EquivalenceClass *ec, Expr *expr, Relids relids, - JoinDomain *jdomain, EquivalenceMember *parent, Oid datatype) +make_eq_member(EquivalenceClass *ec, Expr *expr, Relids relids, + JoinDomain *jdomain, EquivalenceMember *parent, Oid datatype) { EquivalenceMember *em = makeNode(EquivalenceMember); @@ -541,11 +617,85 @@ add_eq_member(EquivalenceClass *ec, Expr *expr, Relids relids, ec->ec_has_const = true; /* it can't affect ec_relids */ } - else if (!parent) /* child members don't add to ec_relids */ + + return em; +} + +/* + * add_eq_member - build a new non-child EquivalenceMember and add it to 'ec'. + */ +static EquivalenceMember * +add_eq_member(EquivalenceClass *ec, Expr *expr, Relids relids, + JoinDomain *jdomain, Oid datatype) +{ + EquivalenceMember *em = make_eq_member(ec, expr, relids, jdomain, + NULL, datatype); + + /* add to the members list */ + ec->ec_members = lappend(ec->ec_members, em); + + /* record the relids for parent members */ + ec->ec_relids = bms_add_members(ec->ec_relids, relids); + + return em; +} + +/* + * add_child_eq_member + * Create an em_is_child=true EquivalenceMember and add it to 'ec'. + * + * 'root' is the PlannerInfo that 'ec' belongs to. + * 'ec' is the EquivalenceClass to add the child member to. + * 'ec_index' the index of 'ec' within root->eq_classes, or -1 if maintaining + * the RelOptInfo.eclass_indexes isn't needed. + * 'expr' is the em_expr for the new member. + * 'relids' is the 'em_relids' for the new member. + * 'jdomain' is the 'em_jdomain' for the new member. + * 'parent_em' is the parent member of the child to create. + * 'datatype' is the em_datatype of the new member. + * 'child_relid' defines which element of ec_childmembers to add this member + * to. This is generally a RELOPT_OTHER_MEMBER_REL, but for set operations + * can be a RELOPT_BASEREL representing the set-op children. + */ +static EquivalenceMember * +add_child_eq_member(PlannerInfo *root, EquivalenceClass *ec, int ec_index, + Expr *expr, Relids relids, JoinDomain *jdomain, + EquivalenceMember *parent_em, Oid datatype, + Index child_relid) +{ + EquivalenceMember *em; + + Assert(parent_em != NULL); + + /* + * Allocate the array to store child members; an array of Lists indexed by + * relid, or expand the existing one, if necessary. + */ + if (unlikely(ec->ec_childmembers_size < root->simple_rel_array_size)) { - ec->ec_relids = bms_add_members(ec->ec_relids, relids); + if (ec->ec_childmembers == NULL) + ec->ec_childmembers = palloc0_array(List *, root->simple_rel_array_size); + else + ec->ec_childmembers = repalloc0_array(ec->ec_childmembers, List *, + ec->ec_childmembers_size, + root->simple_rel_array_size); + + ec->ec_childmembers_size = root->simple_rel_array_size; + } + + em = make_eq_member(ec, expr, relids, jdomain, parent_em, datatype); + + /* add member to the ec_childmembers List for the given child_relid */ + ec->ec_childmembers[child_relid] = lappend(ec->ec_childmembers[child_relid], em); + + /* Record this EC index for the child rel */ + if (ec_index >= 0) + { + RelOptInfo *child_rel = root->simple_rel_array[child_relid]; + + child_rel->eclass_indexes = + bms_add_member(child_rel->eclass_indexes, ec_index); } - ec->ec_members = lappend(ec->ec_members, em); return em; } @@ -616,7 +766,8 @@ get_eclass_for_sort_expr(PlannerInfo *root, foreach(lc1, root->eq_classes) { EquivalenceClass *cur_ec = (EquivalenceClass *) lfirst(lc1); - ListCell *lc2; + EquivalenceMemberIterator it; + EquivalenceMember *cur_em; /* * Never match to a volatile EC, except when we are looking at another @@ -631,10 +782,9 @@ get_eclass_for_sort_expr(PlannerInfo *root, if (!equal(opfamilies, cur_ec->ec_opfamilies)) continue; - foreach(lc2, cur_ec->ec_members) + setup_eclass_member_iterator(&it, cur_ec, rel); + while ((cur_em = eclass_member_iterator_next(&it)) != NULL) { - EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc2); - /* * Ignore child members unless they match the request. */ @@ -669,9 +819,12 @@ get_eclass_for_sort_expr(PlannerInfo *root, newec = makeNode(EquivalenceClass); newec->ec_opfamilies = list_copy(opfamilies); newec->ec_collation = collation; + newec->ec_childmembers_size = 0; newec->ec_members = NIL; + newec->ec_childmembers = NULL; newec->ec_sources = NIL; - newec->ec_derives = NIL; + newec->ec_derives_list = NIL; + newec->ec_derives_hash = NULL; newec->ec_relids = NULL; newec->ec_has_const = false; newec->ec_has_volatile = contain_volatile_functions((Node *) expr); @@ -690,7 +843,7 @@ get_eclass_for_sort_expr(PlannerInfo *root, expr_relids = pull_varnos(root, (Node *) expr); newem = add_eq_member(newec, copyObject(expr), expr_relids, - jdomain, NULL, opcintype); + jdomain, opcintype); /* * add_eq_member doesn't check for volatile functions, set-returning @@ -764,15 +917,16 @@ find_ec_member_matching_expr(EquivalenceClass *ec, Expr *expr, Relids relids) { - ListCell *lc; + EquivalenceMemberIterator it; + EquivalenceMember *em; /* We ignore binary-compatible relabeling on both ends */ while (expr && IsA(expr, RelabelType)) expr = ((RelabelType *) expr)->arg; - foreach(lc, ec->ec_members) + setup_eclass_member_iterator(&it, ec, relids); + while ((em = eclass_member_iterator_next(&it)) != NULL) { - EquivalenceMember *em = (EquivalenceMember *) lfirst(lc); Expr *emexpr; /* @@ -841,7 +995,8 @@ find_computable_ec_member(PlannerInfo *root, bool require_parallel_safe) { List *exprvars; - ListCell *lc; + EquivalenceMemberIterator it; + EquivalenceMember *em; /* * Pull out the Vars and quasi-Vars present in "exprs". In the typical @@ -855,9 +1010,9 @@ find_computable_ec_member(PlannerInfo *root, PVC_INCLUDE_PLACEHOLDERS | PVC_INCLUDE_CONVERTROWTYPES); - foreach(lc, ec->ec_members) + setup_eclass_member_iterator(&it, ec, relids); + while ((em = eclass_member_iterator_next(&it)) != NULL) { - EquivalenceMember *em = (EquivalenceMember *) lfirst(lc); List *emvars; ListCell *lc2; @@ -1026,8 +1181,8 @@ relation_can_be_sorted_early(PlannerInfo *root, RelOptInfo *rel, * scanning of the quals and before Path construction begins. * * We make no attempt to avoid generating duplicate RestrictInfos here: we - * don't search ec_sources or ec_derives for matches. It doesn't really - * seem worth the trouble to do so. + * don't search existing source or derived clauses in the EC for matches. It + * doesn't really seem worth the trouble to do so. */ void generate_base_implied_equalities(PlannerInfo *root) @@ -1136,6 +1291,9 @@ generate_base_implied_equalities_const(PlannerInfo *root, return; } + /* We don't expect any children yet */ + Assert(ec->ec_childmembers == NULL); + /* * Find the constant member to use. We prefer an actual constant to * pseudo-constants (such as Params), because the constraint exclusion @@ -1162,7 +1320,8 @@ generate_base_implied_equalities_const(PlannerInfo *root, Oid eq_op; RestrictInfo *rinfo; - Assert(!cur_em->em_is_child); /* no children yet */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); if (cur_em == const_em) continue; eq_op = select_equality_operator(ec, @@ -1188,11 +1347,11 @@ generate_base_implied_equalities_const(PlannerInfo *root, /* * If the clause didn't degenerate to a constant, fill in the correct - * markings for a mergejoinable clause, and save it in ec_derives. (We - * will not re-use such clauses directly, but selectivity estimation - * may consult the list later. Note that this use of ec_derives does - * not overlap with its use for join clauses, since we never generate - * join clauses from an ec_has_const eclass.) + * markings for a mergejoinable clause, and save it as a derived + * clause. (We will not re-use such clauses directly, but selectivity + * estimation may consult those later. Note that this use of derived + * clauses does not overlap with its use for join clauses, since we + * never generate join clauses from an ec_has_const eclass.) */ if (rinfo && rinfo->mergeopfamilies) { @@ -1200,7 +1359,7 @@ generate_base_implied_equalities_const(PlannerInfo *root, rinfo->left_ec = rinfo->right_ec = ec; rinfo->left_em = cur_em; rinfo->right_em = const_em; - ec->ec_derives = lappend(ec->ec_derives, rinfo); + ec_add_derived_clause(ec, rinfo); } } } @@ -1226,12 +1385,17 @@ generate_base_implied_equalities_no_const(PlannerInfo *root, prev_ems = (EquivalenceMember **) palloc0(root->simple_rel_array_size * sizeof(EquivalenceMember *)); + /* We don't expect any children yet */ + Assert(ec->ec_childmembers == NULL); + foreach(lc, ec->ec_members) { EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc); int relid; - Assert(!cur_em->em_is_child); /* no children yet */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); + if (!bms_get_singleton_member(cur_em->em_relids, &relid)) continue; Assert(relid < root->simple_rel_array_size); @@ -1265,10 +1429,10 @@ generate_base_implied_equalities_no_const(PlannerInfo *root, /* * If the clause didn't degenerate to a constant, fill in the - * correct markings for a mergejoinable clause. We don't put it - * in ec_derives however; we don't currently need to re-find such - * clauses, and we don't want to clutter that list with non-join - * clauses. + * correct markings for a mergejoinable clause. We don't record + * it as a derived clause, since we don't currently need to + * re-find such clauses, and don't want to clutter the + * derived-clause set with non-join clauses. */ if (rinfo && rinfo->mergeopfamilies) { @@ -1369,7 +1533,7 @@ generate_base_implied_equalities_broken(PlannerInfo *root, * we consider different join paths, we avoid generating multiple copies: * whenever we select a particular pair of EquivalenceMembers to join, * we check to see if the pair matches any original clause (in ec_sources) - * or previously-built clause (in ec_derives). This saves memory and allows + * or previously-built derived clause. This saves memory and allows * re-use of information cached in RestrictInfos. We also avoid generating * commutative duplicates, i.e. if the algorithm selects "a.x = b.y" but * we already have "b.y = a.x", we return the existing clause. @@ -1564,7 +1728,8 @@ generate_join_implied_equalities_normal(PlannerInfo *root, List *new_members = NIL; List *outer_members = NIL; List *inner_members = NIL; - ListCell *lc1; + EquivalenceMemberIterator it; + EquivalenceMember *cur_em; /* * First, scan the EC to identify member values that are computable at the @@ -1575,10 +1740,9 @@ generate_join_implied_equalities_normal(PlannerInfo *root, * as well as to at least one input member, plus enforce at least one * outer-rel member equal to at least one inner-rel member. */ - foreach(lc1, ec->ec_members) + setup_eclass_member_iterator(&it, ec, join_relids); + while ((cur_em = eclass_member_iterator_next(&it)) != NULL) { - EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc1); - /* * We don't need to check explicitly for child EC members. This test * against join_relids will cause them to be ignored except when @@ -1611,6 +1775,7 @@ generate_join_implied_equalities_normal(PlannerInfo *root, Oid best_eq_op = InvalidOid; int best_score = -1; RestrictInfo *rinfo; + ListCell *lc1; foreach(lc1, outer_members) { @@ -1685,6 +1850,7 @@ generate_join_implied_equalities_normal(PlannerInfo *root, List *old_members = list_concat(outer_members, inner_members); EquivalenceMember *prev_em = NULL; RestrictInfo *rinfo; + ListCell *lc1; /* For now, arbitrarily take the first old_member as the one to use */ if (old_members) @@ -1692,7 +1858,7 @@ generate_join_implied_equalities_normal(PlannerInfo *root, foreach(lc1, new_members) { - EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc1); + cur_em = (EquivalenceMember *) lfirst(lc1); if (prev_em != NULL) { @@ -1754,9 +1920,9 @@ generate_join_implied_equalities_broken(PlannerInfo *root, /* * If we have to translate, just brute-force apply adjust_appendrel_attrs * to all the RestrictInfos at once. This will result in returning - * RestrictInfos that are not listed in ec_derives, but there shouldn't be - * any duplication, and it's a sufficiently narrow corner case that we - * shouldn't sweat too much over it anyway. + * RestrictInfos that are not included in EC's derived clauses, but there + * shouldn't be any duplication, and it's a sufficiently narrow corner + * case that we shouldn't sweat too much over it anyway. * * Since inner_rel might be an indirect descendant of the baserel * mentioned in the ec_sources clauses, we have to be prepared to apply @@ -1788,8 +1954,7 @@ select_equality_operator(EquivalenceClass *ec, Oid lefttype, Oid righttype) Oid opfamily = lfirst_oid(lc); Oid opno; - opno = get_opfamily_member(opfamily, lefttype, righttype, - BTEqualStrategyNumber); + opno = get_opfamily_member_for_cmptype(opfamily, lefttype, righttype, COMPARE_EQ); if (!OidIsValid(opno)) continue; /* If no barrier quals in query, don't worry about leaky operators */ @@ -1823,43 +1988,11 @@ create_join_clause(PlannerInfo *root, { RestrictInfo *rinfo; RestrictInfo *parent_rinfo = NULL; - ListCell *lc; MemoryContext oldcontext; - /* - * Search to see if we already built a RestrictInfo for this pair of - * EquivalenceMembers. We can use either original source clauses or - * previously-derived clauses, and a commutator clause is acceptable. - * - * We used to verify that opno matches, but that seems redundant: even if - * it's not identical, it'd better have the same effects, or the operator - * families we're using are broken. - */ - foreach(lc, ec->ec_sources) - { - rinfo = (RestrictInfo *) lfirst(lc); - if (rinfo->left_em == leftem && - rinfo->right_em == rightem && - rinfo->parent_ec == parent_ec) - return rinfo; - if (rinfo->left_em == rightem && - rinfo->right_em == leftem && - rinfo->parent_ec == parent_ec) - return rinfo; - } - - foreach(lc, ec->ec_derives) - { - rinfo = (RestrictInfo *) lfirst(lc); - if (rinfo->left_em == leftem && - rinfo->right_em == rightem && - rinfo->parent_ec == parent_ec) - return rinfo; - if (rinfo->left_em == rightem && - rinfo->right_em == leftem && - rinfo->parent_ec == parent_ec) - return rinfo; - } + rinfo = ec_search_clause_for_ems(root, ec, leftem, rightem, parent_ec); + if (rinfo) + return rinfo; /* * Not there, so build it, in planner context so we can re-use it. (Not @@ -1923,7 +2056,7 @@ create_join_clause(PlannerInfo *root, rinfo->left_em = leftem; rinfo->right_em = rightem; /* and save it for possible re-use */ - ec->ec_derives = lappend(ec->ec_derives, rinfo); + ec_add_derived_clause(ec, rinfo); MemoryContextSwitchTo(oldcontext); @@ -2164,6 +2297,9 @@ reconsider_outer_join_clause(PlannerInfo *root, OuterJoinClauseInfo *ojcinfo, bool match; ListCell *lc2; + /* We don't expect any children yet */ + Assert(cur_ec->ec_childmembers == NULL); + /* Ignore EC unless it contains pseudoconstants */ if (!cur_ec->ec_has_const) continue; @@ -2181,7 +2317,8 @@ reconsider_outer_join_clause(PlannerInfo *root, OuterJoinClauseInfo *ojcinfo, { EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc2); - Assert(!cur_em->em_is_child); /* no children yet */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); if (equal(outervar, cur_em->em_expr)) { match = true; @@ -2279,6 +2416,9 @@ reconsider_full_join_clause(PlannerInfo *root, OuterJoinClauseInfo *ojcinfo) ListCell *lc2; int coal_idx = -1; + /* We don't expect any children yet */ + Assert(cur_ec->ec_childmembers == NULL); + /* Ignore EC unless it contains pseudoconstants */ if (!cur_ec->ec_has_const) continue; @@ -2308,7 +2448,9 @@ reconsider_full_join_clause(PlannerInfo *root, OuterJoinClauseInfo *ojcinfo) foreach(lc2, cur_ec->ec_members) { coal_em = (EquivalenceMember *) lfirst(lc2); - Assert(!coal_em->em_is_child); /* no children yet */ + + /* Child members should not exist in ec_members */ + Assert(!coal_em->em_is_child); if (IsA(coal_em->em_expr, CoalesceExpr)) { CoalesceExpr *cexpr = (CoalesceExpr *) coal_em->em_expr; @@ -2437,6 +2579,13 @@ rebuild_eclass_attr_needed(PlannerInfo *root) { EquivalenceClass *ec = (EquivalenceClass *) lfirst(lc); + /* + * We don't expect any EC child members to exist at this point. Ensure + * that's the case, otherwise, we might be getting asked to do + * something this function hasn't been coded for. + */ + Assert(ec->ec_childmembers == NULL); + /* Need do anything only for a multi-member, no-const EC. */ if (list_length(ec->ec_members) > 1 && !ec->ec_has_const) { @@ -2522,12 +2671,13 @@ exprs_known_equal(PlannerInfo *root, Node *item1, Node *item2, Oid opfamily) !list_member_oid(ec->ec_opfamilies, opfamily)) continue; + /* Ignore children here */ foreach(lc2, ec->ec_members) { EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2); - if (em->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!em->em_is_child); if (equal(item1, em->em_expr)) item1member = true; else if (equal(item2, em->em_expr)) @@ -2591,15 +2741,18 @@ match_eclasses_to_foreign_key_col(PlannerInfo *root, /* Never match to a volatile EC */ if (ec->ec_has_volatile) continue; - /* It's okay to consider "broken" ECs here, see exprs_known_equal */ + /* + * It's okay to consider "broken" ECs here, see exprs_known_equal. + * Ignore children here. + */ foreach(lc2, ec->ec_members) { EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2); Var *var; - if (em->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!em->em_is_child); /* EM must be a Var, possibly with RelabelType */ var = (Var *) em->em_expr; @@ -2648,25 +2801,14 @@ match_eclasses_to_foreign_key_col(PlannerInfo *root, * Returns NULL if no such clause can be found. */ RestrictInfo * -find_derived_clause_for_ec_member(EquivalenceClass *ec, +find_derived_clause_for_ec_member(PlannerInfo *root, + EquivalenceClass *ec, EquivalenceMember *em) { - ListCell *lc; - Assert(ec->ec_has_const); Assert(!em->em_is_const); - foreach(lc, ec->ec_derives) - { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); - /* - * generate_base_implied_equalities_const will have put non-const - * members on the left side of derived clauses. - */ - if (rinfo->left_em == em) - return rinfo; - } - return NULL; + return ec_search_derived_clause_for_ems(root, ec, em, NULL, NULL); } @@ -2708,7 +2850,6 @@ add_child_rel_equivalences(PlannerInfo *root, while ((i = bms_next_member(parent_rel->eclass_indexes, i)) >= 0) { EquivalenceClass *cur_ec = (EquivalenceClass *) list_nth(root->eq_classes, i); - int num_members; /* * If this EC contains a volatile expression, then generating child @@ -2721,29 +2862,13 @@ add_child_rel_equivalences(PlannerInfo *root, /* Sanity check eclass_indexes only contain ECs for parent_rel */ Assert(bms_is_subset(top_parent_relids, cur_ec->ec_relids)); - /* - * We don't use foreach() here because there's no point in scanning - * newly-added child members, so we can stop after the last - * pre-existing EC member. - */ - num_members = list_length(cur_ec->ec_members); - for (int pos = 0; pos < num_members; pos++) + foreach_node(EquivalenceMember, cur_em, cur_ec->ec_members) { - EquivalenceMember *cur_em = (EquivalenceMember *) list_nth(cur_ec->ec_members, pos); - if (cur_em->em_is_const) continue; /* ignore consts here */ - /* - * We consider only original EC members here, not - * already-transformed child members. Otherwise, if some original - * member expression references more than one appendrel, we'd get - * an O(N^2) explosion of useless derived expressions for - * combinations of children. (But add_child_join_rel_equivalences - * may add targeted combinations for partitionwise-join purposes.) - */ - if (cur_em->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); /* * Consider only members that reference and can be computed at @@ -2788,12 +2913,15 @@ add_child_rel_equivalences(PlannerInfo *root, top_parent_relids); new_relids = bms_add_members(new_relids, child_relids); - (void) add_eq_member(cur_ec, child_expr, new_relids, - cur_em->em_jdomain, - cur_em, cur_em->em_datatype); - - /* Record this EC index for the child rel */ - child_rel->eclass_indexes = bms_add_member(child_rel->eclass_indexes, i); + add_child_eq_member(root, + cur_ec, + i, + child_expr, + new_relids, + cur_em->em_jdomain, + cur_em, + cur_em->em_datatype, + child_rel->relid); } } } @@ -2840,7 +2968,6 @@ add_child_join_rel_equivalences(PlannerInfo *root, while ((i = bms_next_member(matching_ecs, i)) >= 0) { EquivalenceClass *cur_ec = (EquivalenceClass *) list_nth(root->eq_classes, i); - int num_members; /* * If this EC contains a volatile expression, then generating child @@ -2853,25 +2980,13 @@ add_child_join_rel_equivalences(PlannerInfo *root, /* Sanity check on get_eclass_indexes_for_relids result */ Assert(bms_overlap(top_parent_relids, cur_ec->ec_relids)); - /* - * We don't use foreach() here because there's no point in scanning - * newly-added child members, so we can stop after the last - * pre-existing EC member. - */ - num_members = list_length(cur_ec->ec_members); - for (int pos = 0; pos < num_members; pos++) + foreach_node(EquivalenceMember, cur_em, cur_ec->ec_members) { - EquivalenceMember *cur_em = (EquivalenceMember *) list_nth(cur_ec->ec_members, pos); - if (cur_em->em_is_const) continue; /* ignore consts here */ - /* - * We consider only original EC members here, not - * already-transformed child members. - */ - if (cur_em->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); /* * We may ignore expressions that reference a single baserel, @@ -2916,9 +3031,35 @@ add_child_join_rel_equivalences(PlannerInfo *root, top_parent_relids); new_relids = bms_add_members(new_relids, child_relids); - (void) add_eq_member(cur_ec, child_expr, new_relids, - cur_em->em_jdomain, - cur_em, cur_em->em_datatype); + /* + * Add new child member to the EquivalenceClass. Because this + * is a RELOPT_OTHER_JOINREL which has multiple component + * relids, there is no ideal place to store these members in + * the class. Ordinarily, child members are stored in the + * ec_childmembers[] array element corresponding to their + * relid, however, here we have multiple component relids, so + * there's no single ec_childmembers[] array element to store + * this member. So that we still correctly find this member + * in loops iterating over an EquivalenceMemberIterator, we + * opt to store the member in the ec_childmembers array in + * only the first component relid slot of the array. This + * allows the member to be found, providing callers of + * setup_eclass_member_iterator() specify all the component + * relids for the RELOPT_OTHER_JOINREL, which they do. If we + * opted to store the member in each ec_childmembers[] element + * for all the component relids, then that would just result + * in eclass_member_iterator_next() finding the member + * multiple times, which is a waste of effort. + */ + add_child_eq_member(root, + cur_ec, + -1, + child_expr, + new_relids, + cur_em->em_jdomain, + cur_em, + cur_em->em_datatype, + bms_next_member(child_joinrel->relids, -1)); } } } @@ -2965,14 +3106,18 @@ add_setop_child_rel_equivalences(PlannerInfo *root, RelOptInfo *child_rel, * We can safely pass the parent member as the first member in the * ec_members list as this is added first in generate_union_paths, * likewise, the JoinDomain can be that of the initial member of the - * Pathkey's EquivalenceClass. + * Pathkey's EquivalenceClass. We pass -1 for ec_index since we + * maintain the eclass_indexes for the child_rel after the loop. */ - add_eq_member(pk->pk_eclass, - tle->expr, - child_rel->relids, - parent_em->em_jdomain, - parent_em, - exprType((Node *) tle->expr)); + add_child_eq_member(root, + pk->pk_eclass, + -1, + tle->expr, + child_rel->relids, + parent_em->em_jdomain, + parent_em, + exprType((Node *) tle->expr), + child_rel->relid); lc2 = lnext(setop_pathkeys, lc2); } @@ -2987,6 +3132,85 @@ add_setop_child_rel_equivalences(PlannerInfo *root, RelOptInfo *child_rel, list_length(root->eq_classes) - 1); } +/* + * setup_eclass_member_iterator + * Setup an EquivalenceMemberIterator 'it' to iterate over all parent + * EquivalenceMembers and child members belonging to the given 'ec'. + * + * This iterator returns: + * - All parent members stored directly in ec_members for 'ec', and; + * - Any child member added to the given ec by add_child_eq_member() where + * the child_relid specified in the add_child_eq_member() call is a member + * of the 'child_relids' parameter. + * + * Note: + * The given 'child_relids' must remain allocated and not be changed for the + * lifetime of the iterator. + * + * Parameters: + * 'it' is a pointer to the iterator to set up. Normally stack allocated. + * 'ec' is the EquivalenceClass from which to iterate members for. + * 'child_relids' is the relids to return child members for. + */ +void +setup_eclass_member_iterator(EquivalenceMemberIterator *it, + EquivalenceClass *ec, Relids child_relids) +{ + it->ec = ec; + /* no need to set this if the class has no child members array set */ + it->child_relids = ec->ec_childmembers != NULL ? child_relids : NULL; + it->current_relid = -1; + it->current_list = ec->ec_members; + it->current_cell = list_head(it->current_list); +} + +/* + * eclass_member_iterator_next + * Get the next EquivalenceMember from the EquivalenceMemberIterator 'it', + * as setup by setup_eclass_member_iterator(). NULL is returned if there + * are no members left, after which callers must not call + * eclass_member_iterator_next() again for the given iterator. + */ +EquivalenceMember * +eclass_member_iterator_next(EquivalenceMemberIterator *it) +{ + while (it->current_list != NULL) + { + while (it->current_cell != NULL) + { + EquivalenceMember *em; + + nextcell: + em = lfirst_node(EquivalenceMember, it->current_cell); + it->current_cell = lnext(it->current_list, it->current_cell); + return em; + } + + /* Search for the next list to return members from */ + while ((it->current_relid = bms_next_member(it->child_relids, it->current_relid)) > 0) + { + /* + * Be paranoid in case we're given relids above what we've sized + * the ec_childmembers array to. + */ + if (it->current_relid >= it->ec->ec_childmembers_size) + return NULL; + + it->current_list = it->ec->ec_childmembers[it->current_relid]; + + /* If there are members in this list, use it. */ + if (it->current_list != NIL) + { + /* point current_cell to the head of this list */ + it->current_cell = list_head(it->current_list); + goto nextcell; + } + } + return NULL; + } + + return NULL; +} /* * generate_implied_equalities_for_column @@ -3039,6 +3263,7 @@ generate_implied_equalities_for_column(PlannerInfo *root, while ((i = bms_next_member(rel->eclass_indexes, i)) >= 0) { EquivalenceClass *cur_ec = (EquivalenceClass *) list_nth(root->eq_classes, i); + EquivalenceMemberIterator it; EquivalenceMember *cur_em; ListCell *lc2; @@ -3062,14 +3287,12 @@ generate_implied_equalities_for_column(PlannerInfo *root, * corner cases, so for now we live with just reporting the first * match. See also get_eclass_for_sort_expr.) */ - cur_em = NULL; - foreach(lc2, cur_ec->ec_members) + setup_eclass_member_iterator(&it, cur_ec, rel->relids); + while ((cur_em = eclass_member_iterator_next(&it)) != NULL) { - cur_em = (EquivalenceMember *) lfirst(lc2); if (bms_equal(cur_em->em_relids, rel->relids) && callback(root, rel, cur_ec, cur_em, callback_arg)) break; - cur_em = NULL; } if (!cur_em) @@ -3077,7 +3300,7 @@ generate_implied_equalities_for_column(PlannerInfo *root, /* * Found our match. Scan the other EC members and attempt to generate - * joinclauses. + * joinclauses. Ignore children here. */ foreach(lc2, cur_ec->ec_members) { @@ -3085,8 +3308,8 @@ generate_implied_equalities_for_column(PlannerInfo *root, Oid eq_op; RestrictInfo *rinfo; - if (other_em->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!other_em->em_is_child); /* Make sure it'll be a join to a different rel */ if (other_em == cur_em || @@ -3299,13 +3522,15 @@ eclass_useful_for_merging(PlannerInfo *root, if (bms_is_subset(eclass->ec_relids, relids)) return false; - /* To join, we need a member not in the given rel */ + /* + * To join, we need a member not in the given rel. Ignore children here. + */ foreach(lc, eclass->ec_members) { EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc); - if (cur_em->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!cur_em->em_is_child); if (!bms_overlap(cur_em->em_relids, relids)) return true; @@ -3439,3 +3664,281 @@ get_common_eclass_indexes(PlannerInfo *root, Relids relids1, Relids relids2) /* Calculate and return the common EC indexes, recycling the left input. */ return bms_int_members(rel1ecs, rel2ecs); } + +/* + * ec_build_derives_hash + * Construct the auxiliary hash table for derived clause lookups. + */ +static void +ec_build_derives_hash(PlannerInfo *root, EquivalenceClass *ec) +{ + Assert(!ec->ec_derives_hash); + + /* + * Create the hash table. + * + * We pass list_length(ec->ec_derives_list) as the initial size. + * Simplehash will divide this by the fillfactor (typically 0.9) and round + * up to the next power of two, so this will usually give us at least 64 + * buckets around the threshold. That avoids immediate resizing without + * hardcoding a specific size. + */ + ec->ec_derives_hash = derives_create(root->planner_cxt, + list_length(ec->ec_derives_list), + NULL); + + foreach_node(RestrictInfo, rinfo, ec->ec_derives_list) + ec_add_clause_to_derives_hash(ec, rinfo); +} + +/* + * ec_add_derived_clause + * Add a clause to the set of derived clauses for the given + * EquivalenceClass. Always appends to ec_derives_list; also adds + * to ec_derives_hash if it exists. + * + * Also asserts expected invariants of derived clauses. + */ +static void +ec_add_derived_clause(EquivalenceClass *ec, RestrictInfo *clause) +{ + /* + * Constant, if present, is always placed on the RHS; see + * generate_base_implied_equalities_const(). LHS is never a constant. + */ + Assert(!clause->left_em->em_is_const); + + /* + * Clauses containing a constant are never considered redundant, so + * parent_ec is not set. + */ + Assert(!clause->parent_ec || !clause->right_em->em_is_const); + + ec->ec_derives_list = lappend(ec->ec_derives_list, clause); + if (ec->ec_derives_hash) + ec_add_clause_to_derives_hash(ec, clause); +} + +/* + * ec_add_derived_clauses + * Add a list of clauses to the set of clauses derived from the given + * EquivalenceClass; adding to the list and hash table if needed. + * + * This function is similar to ec_add_derived_clause() but optimized for adding + * multiple clauses at a time to the ec_derives_list. The assertions from + * ec_add_derived_clause() are not repeated here, as the input clauses are + * assumed to have already been validated. + */ +static void +ec_add_derived_clauses(EquivalenceClass *ec, List *clauses) +{ + ec->ec_derives_list = list_concat(ec->ec_derives_list, clauses); + if (ec->ec_derives_hash) + foreach_node(RestrictInfo, rinfo, clauses) + ec_add_clause_to_derives_hash(ec, rinfo); +} + +/* + * fill_ec_derives_key + * Compute a canonical key for ec_derives_hash lookup or insertion. + * + * Derived clauses are looked up using a pair of EquivalenceMembers and a + * parent EquivalenceClass. To avoid storing or searching for both EM orderings, + * we canonicalize the key: + * + * - For clauses involving two non-constant EMs, em1 is set to the EM with lower + * memory address and em2 is set to the other one. + * - For clauses involving a constant EM, the caller must pass the non-constant + * EM as leftem and NULL as rightem; we then set em1 = NULL and em2 = leftem. + */ +static inline void +fill_ec_derives_key(ECDerivesKey *key, + EquivalenceMember *leftem, + EquivalenceMember *rightem, + EquivalenceClass *parent_ec) +{ + Assert(leftem); /* Always required for lookup or insertion */ + + if (rightem == NULL) + { + key->em1 = NULL; + key->em2 = leftem; + } + else if (leftem < rightem) + { + key->em1 = leftem; + key->em2 = rightem; + } + else + { + key->em1 = rightem; + key->em2 = leftem; + } + key->parent_ec = parent_ec; +} + +/* + * ec_add_clause_to_derives_hash + * Add a derived clause to ec_derives_hash in the given EquivalenceClass. + * + * Each clause is associated with a canonicalized key. For constant-containing + * clauses, only the non-constant EM is used for lookup; see comments in + * fill_ec_derives_key(). + */ +static void +ec_add_clause_to_derives_hash(EquivalenceClass *ec, RestrictInfo *rinfo) +{ + ECDerivesKey key; + ECDerivesEntry *entry; + bool found; + + /* + * Constants are always placed on the RHS; see + * generate_base_implied_equalities_const(). + */ + Assert(!rinfo->left_em->em_is_const); + + /* + * Clauses containing a constant are never considered redundant, so + * parent_ec is not set. + */ + Assert(!rinfo->parent_ec || !rinfo->right_em->em_is_const); + + /* + * See fill_ec_derives_key() for details: we use a canonicalized key to + * avoid storing both EM orderings. For constant EMs, only the + * non-constant EM is included in the key. + */ + fill_ec_derives_key(&key, + rinfo->left_em, + rinfo->right_em->em_is_const ? NULL : rinfo->right_em, + rinfo->parent_ec); + entry = derives_insert(ec->ec_derives_hash, key, &found); + Assert(!found); + entry->rinfo = rinfo; +} + +/* + * ec_clear_derived_clauses + * Reset ec_derives_list and ec_derives_hash. + * + * We destroy the hash table explicitly, since it may consume significant + * space. The list holds the same set of entries and can become equally large + * when thousands of partitions are involved, so we free it as well -- even + * though we do not typically free lists. + */ +void +ec_clear_derived_clauses(EquivalenceClass *ec) +{ + list_free(ec->ec_derives_list); + ec->ec_derives_list = NIL; + + if (ec->ec_derives_hash) + { + derives_destroy(ec->ec_derives_hash); + ec->ec_derives_hash = NULL; + } +} + +/* + * ec_search_clause_for_ems + * Search for an existing RestrictInfo that equates the given pair + * of EquivalenceMembers, either from ec_sources or ec_derives. + * + * Returns a clause with matching operands in either given order or commuted + * order. We used to require matching operator OIDs, but dropped that since any + * semantically different operator here would indicate a broken operator family. + * + * Returns NULL if no matching clause is found. + */ +static RestrictInfo * +ec_search_clause_for_ems(PlannerInfo *root, EquivalenceClass *ec, + EquivalenceMember *leftem, EquivalenceMember *rightem, + EquivalenceClass *parent_ec) +{ + /* Check original source clauses */ + foreach_node(RestrictInfo, rinfo, ec->ec_sources) + { + if (rinfo->left_em == leftem && + rinfo->right_em == rightem && + rinfo->parent_ec == parent_ec) + return rinfo; + if (rinfo->left_em == rightem && + rinfo->right_em == leftem && + rinfo->parent_ec == parent_ec) + return rinfo; + } + + /* Not found in ec_sources; search derived clauses */ + return ec_search_derived_clause_for_ems(root, ec, leftem, rightem, + parent_ec); +} + +/* + * ec_search_derived_clause_for_ems + * Search for an existing derived clause between two EquivalenceMembers. + * + * If the number of derived clauses exceeds a threshold, switch to hash table + * lookup; otherwise, scan ec_derives_list linearly. + * + * Clauses involving constants are looked up by passing the non-constant EM + * as leftem and setting rightem to NULL. In that case, we expect to find a + * clause with a constant on the RHS. + * + * While searching the list, we compare each given EM with both sides of each + * clause. But for hash table lookups, we construct a canonicalized key and + * perform a single lookup. + */ +static RestrictInfo * +ec_search_derived_clause_for_ems(PlannerInfo *root, EquivalenceClass *ec, + EquivalenceMember *leftem, + EquivalenceMember *rightem, + EquivalenceClass *parent_ec) +{ + /* Switch to using hash lookup when list grows "too long". */ + if (!ec->ec_derives_hash && + list_length(ec->ec_derives_list) >= EC_DERIVES_HASH_THRESHOLD) + ec_build_derives_hash(root, ec); + + /* Perform hash table lookup if available */ + if (ec->ec_derives_hash) + { + ECDerivesKey key; + RestrictInfo *rinfo; + ECDerivesEntry *entry; + + fill_ec_derives_key(&key, leftem, rightem, parent_ec); + entry = derives_lookup(ec->ec_derives_hash, key); + if (entry) + { + rinfo = entry->rinfo; + Assert(rinfo); + Assert(rightem || rinfo->right_em->em_is_const); + return rinfo; + } + } + else + { + /* Fallback to linear search over ec_derives_list */ + foreach_node(RestrictInfo, rinfo, ec->ec_derives_list) + { + /* Handle special case: lookup by non-const EM alone */ + if (!rightem && + rinfo->left_em == leftem) + { + Assert(rinfo->right_em->em_is_const); + return rinfo; + } + if (rinfo->left_em == leftem && + rinfo->right_em == rightem && + rinfo->parent_ec == parent_ec) + return rinfo; + if (rinfo->left_em == rightem && + rinfo->right_em == leftem && + rinfo->parent_ec == parent_ec) + return rinfo; + } + } + + return NULL; +} diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 6386ce8225301..4f5c98f0091d1 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -33,10 +33,8 @@ #include "optimizer/paths.h" #include "optimizer/prep.h" #include "optimizer/restrictinfo.h" -#include "utils/array.h" #include "utils/lsyscache.h" #include "utils/selfuncs.h" -#include "utils/syscache.h" /* XXX see PartCollMatchesExprColl */ @@ -3304,7 +3302,6 @@ match_orclause_to_indexcol(PlannerInfo *root, BoolExpr *orclause = (BoolExpr *) rinfo->orclause; Node *indexExpr = NULL; List *consts = NIL; - Node *arrayNode = NULL; ScalarArrayOpExpr *saopexpr = NULL; Oid matchOpno = InvalidOid; IndexClause *iclause; @@ -3475,63 +3472,8 @@ match_orclause_to_indexcol(PlannerInfo *root, return NULL; } - /* - * Assemble an array from the list of constants. It seems more profitable - * to build a const array. But in the presence of other nodes, we don't - * have a specific value here and must employ an ArrayExpr instead. - */ - if (haveNonConst) - { - ArrayExpr *arrayExpr = makeNode(ArrayExpr); - - /* array_collid will be set by parse_collate.c */ - arrayExpr->element_typeid = consttype; - arrayExpr->array_typeid = arraytype; - arrayExpr->multidims = false; - arrayExpr->elements = consts; - arrayExpr->location = -1; - - arrayNode = (Node *) arrayExpr; - } - else - { - int16 typlen; - bool typbyval; - char typalign; - Datum *elems; - int i = 0; - ArrayType *arrayConst; - - get_typlenbyvalalign(consttype, &typlen, &typbyval, &typalign); - - elems = (Datum *) palloc(sizeof(Datum) * list_length(consts)); - foreach_node(Const, value, consts) - { - Assert(!value->constisnull); - - elems[i++] = value->constvalue; - } - - arrayConst = construct_array(elems, i, consttype, - typlen, typbyval, typalign); - arrayNode = (Node *) makeConst(arraytype, -1, inputcollid, - -1, PointerGetDatum(arrayConst), - false, false); - - pfree(elems); - list_free(consts); - } - - /* Build the SAOP expression node */ - saopexpr = makeNode(ScalarArrayOpExpr); - saopexpr->opno = matchOpno; - saopexpr->opfuncid = get_opcode(matchOpno); - saopexpr->hashfuncid = InvalidOid; - saopexpr->negfuncid = InvalidOid; - saopexpr->useOr = true; - saopexpr->inputcollid = inputcollid; - saopexpr->args = list_make2(indexExpr, arrayNode); - saopexpr->location = -1; + saopexpr = make_SAOP_expr(matchOpno, indexExpr, consttype, inputcollid, + inputcollid, consts, haveNonConst); /* * Finally, build an IndexClause based on the SAOP node. Use @@ -3813,12 +3755,12 @@ match_pathkeys_to_index(IndexOptInfo *index, List *pathkeys, { PathKey *pathkey = (PathKey *) lfirst(lc1); bool found = false; - ListCell *lc2; + EquivalenceMemberIterator it; + EquivalenceMember *member; /* Pathkey must request default sort order for the target opfamily */ - if (pathkey->pk_strategy != BTLessStrategyNumber || - pathkey->pk_nulls_first) + if (pathkey->pk_cmptype != COMPARE_LT || pathkey->pk_nulls_first) return; /* If eclass is volatile, no hope of using an indexscan */ @@ -3833,9 +3775,10 @@ match_pathkeys_to_index(IndexOptInfo *index, List *pathkeys, * be considered to match more than one pathkey list, which is OK * here. See also get_eclass_for_sort_expr.) */ - foreach(lc2, pathkey->pk_eclass->ec_members) + setup_eclass_member_iterator(&it, pathkey->pk_eclass, + index->rel->relids); + while ((member = eclass_member_iterator_next(&it)) != NULL) { - EquivalenceMember *member = (EquivalenceMember *) lfirst(lc2); int indexcol; /* No possibility of match if it references other relations */ @@ -4199,47 +4142,26 @@ ec_member_matches_indexcol(PlannerInfo *root, RelOptInfo *rel, * a set of equality conditions, because the conditions constrain all * columns of some unique index. * - * The conditions can be represented in either or both of two ways: - * 1. A list of RestrictInfo nodes, where the caller has already determined - * that each condition is a mergejoinable equality with an expression in - * this relation on one side, and an expression not involving this relation - * on the other. The transient outer_is_left flag is used to identify which - * side we should look at: left side if outer_is_left is false, right side - * if it is true. - * 2. A list of expressions in this relation, and a corresponding list of - * equality operators. The caller must have already checked that the operators - * represent equality. (Note: the operators could be cross-type; the - * expressions should correspond to their RHS inputs.) + * The conditions are provided as a list of RestrictInfo nodes, where the + * caller has already determined that each condition is a mergejoinable + * equality with an expression in this relation on one side, and an + * expression not involving this relation on the other. The transient + * outer_is_left flag is used to identify which side we should look at: + * left side if outer_is_left is false, right side if it is true. * * The caller need only supply equality conditions arising from joins; * this routine automatically adds in any usable baserestrictinfo clauses. * (Note that the passed-in restrictlist will be destructively modified!) + * + * If extra_clauses isn't NULL, return baserestrictinfo clauses which were used + * to derive uniqueness. */ bool relation_has_unique_index_for(PlannerInfo *root, RelOptInfo *rel, - List *restrictlist, - List *exprlist, List *oprlist) -{ - return relation_has_unique_index_ext(root, rel, restrictlist, - exprlist, oprlist, NULL); -} - -/* - * relation_has_unique_index_ext - * Same as relation_has_unique_index_for(), but supports extra_clauses - * parameter. If extra_clauses isn't NULL, return baserestrictinfo clauses - * which were used to derive uniqueness. - */ -bool -relation_has_unique_index_ext(PlannerInfo *root, RelOptInfo *rel, - List *restrictlist, - List *exprlist, List *oprlist, - List **extra_clauses) + List *restrictlist, List **extra_clauses) { ListCell *ic; - Assert(list_length(exprlist) == list_length(oprlist)); - /* Short-circuit if no indexes... */ if (rel->indexlist == NIL) return false; @@ -4282,7 +4204,7 @@ relation_has_unique_index_ext(PlannerInfo *root, RelOptInfo *rel, } /* Short-circuit the easy case */ - if (restrictlist == NIL && exprlist == NIL) + if (restrictlist == NIL) return false; /* Examine each index of the relation ... */ @@ -4304,14 +4226,12 @@ relation_has_unique_index_ext(PlannerInfo *root, RelOptInfo *rel, continue; /* - * Try to find each index column in the lists of conditions. This is + * Try to find each index column in the list of conditions. This is * O(N^2) or worse, but we expect all the lists to be short. */ for (c = 0; c < ind->nkeycolumns; c++) { - bool matched = false; ListCell *lc; - ListCell *lc2; foreach(lc, restrictlist) { @@ -4341,8 +4261,6 @@ relation_has_unique_index_ext(PlannerInfo *root, RelOptInfo *rel, if (match_index_to_operand(rexpr, c, ind)) { - matched = true; /* column is unique */ - if (bms_membership(rinfo->clause_relids) == BMS_SINGLETON) { MemoryContext oldMemCtx = @@ -4360,43 +4278,11 @@ relation_has_unique_index_ext(PlannerInfo *root, RelOptInfo *rel, MemoryContextSwitchTo(oldMemCtx); } - break; + break; /* found a match; column is unique */ } } - if (matched) - continue; - - forboth(lc, exprlist, lc2, oprlist) - { - Node *expr = (Node *) lfirst(lc); - Oid opr = lfirst_oid(lc2); - - /* See if the expression matches the index key */ - if (!match_index_to_operand(expr, c, ind)) - continue; - - /* - * The 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 assume the caller - * determined it is an equality operator, so we don't need to - * check any more tightly than this. - */ - if (!op_in_opfamily(opr, 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. - */ - - matched = true; /* column is unique */ - break; - } - - if (!matched) + if (lc == NULL) break; /* no match; this index doesn't help us */ } diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index 18891ce91569a..3b9407eb2eb79 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -112,12 +112,12 @@ static void generate_mergejoin_paths(PlannerInfo *root, * "flipped around" if we are considering joining the rels in the opposite * direction from what's indicated in sjinfo. * - * Also, this routine and others in this module accept the special JoinTypes - * JOIN_UNIQUE_OUTER and JOIN_UNIQUE_INNER to indicate that we should - * unique-ify the outer or inner relation and then apply a regular inner - * join. These values are not allowed to propagate outside this module, - * however. Path cost estimation code may need to recognize that it's - * dealing with such a case --- the combination of nominal jointype INNER + * Also, this routine accepts the special JoinTypes JOIN_UNIQUE_OUTER and + * JOIN_UNIQUE_INNER to indicate that the outer or inner relation has been + * unique-ified and a regular inner join should then be applied. These values + * are not allowed to propagate outside this routine, however. Path cost + * estimation code, as well as match_unsorted_outer, may need to recognize that + * it's dealing with such a case --- the combination of nominal jointype INNER * with sjinfo->jointype == JOIN_SEMI indicates that. */ void @@ -129,6 +129,7 @@ add_paths_to_joinrel(PlannerInfo *root, SpecialJoinInfo *sjinfo, List *restrictlist) { + JoinType save_jointype = jointype; JoinPathExtraData extra; bool mergejoin_allowed = true; ListCell *lc; @@ -154,27 +155,25 @@ add_paths_to_joinrel(PlannerInfo *root, /* * See if the inner relation is provably unique for this outer rel. * - * We have some special cases: for JOIN_SEMI and JOIN_ANTI, it doesn't - * matter since the executor can make the equivalent optimization anyway; - * we need not expend planner cycles on proofs. For JOIN_UNIQUE_INNER, we - * must be considering a semijoin whose inner side is not provably unique - * (else reduce_unique_semijoins would've simplified it), so there's no - * point in calling innerrel_is_unique. However, if the LHS covers all of - * the semijoin's min_lefthand, then it's appropriate to set inner_unique - * because the path produced by create_unique_path will be unique relative - * to the LHS. (If we have an LHS that's only part of the min_lefthand, - * that is *not* true.) For JOIN_UNIQUE_OUTER, pass JOIN_INNER to avoid - * letting that value escape this module. + * We have some special cases: for JOIN_SEMI, it doesn't matter since the + * executor can make the equivalent optimization anyway. It also doesn't + * help enable use of Memoize, since a semijoin with a provably unique + * inner side should have been reduced to an inner join in that case. + * Therefore, we need not expend planner cycles on proofs. (For + * JOIN_ANTI, although it doesn't help the executor for the same reason, + * it can benefit Memoize paths.) For JOIN_UNIQUE_INNER, we must be + * considering a semijoin whose inner side is not provably unique (else + * reduce_unique_semijoins would've simplified it), so there's no point in + * calling innerrel_is_unique. However, if the LHS covers all of the + * semijoin's min_lefthand, then it's appropriate to set inner_unique + * because the unique relation produced by create_unique_paths will be + * unique relative to the LHS. (If we have an LHS that's only part of the + * min_lefthand, that is *not* true.) For JOIN_UNIQUE_OUTER, pass + * JOIN_INNER to avoid letting that value escape this module. */ switch (jointype) { case JOIN_SEMI: - case JOIN_ANTI: - - /* - * XXX it may be worth proving this to allow a Memoize to be - * considered for Nested Loop Semi/Anti Joins. - */ extra.inner_unique = false; /* well, unproven */ break; case JOIN_UNIQUE_INNER: @@ -201,6 +200,13 @@ add_paths_to_joinrel(PlannerInfo *root, break; } + /* + * If the outer or inner relation has been unique-ified, handle as a plain + * inner join. + */ + if (jointype == JOIN_UNIQUE_OUTER || jointype == JOIN_UNIQUE_INNER) + jointype = JOIN_INNER; + /* * Find potential mergejoin clauses. We can skip this if we are not * interested in doing a mergejoin. However, mergejoin may be our only @@ -331,7 +337,7 @@ add_paths_to_joinrel(PlannerInfo *root, joinrel->fdwroutine->GetForeignJoinPaths) joinrel->fdwroutine->GetForeignJoinPaths(root, joinrel, outerrel, innerrel, - jointype, &extra); + save_jointype, &extra); /* * 6. Finally, give extensions a chance to manipulate the path list. They @@ -341,7 +347,7 @@ add_paths_to_joinrel(PlannerInfo *root, */ if (set_join_pathlist_hook) set_join_pathlist_hook(root, joinrel, outerrel, innerrel, - jointype, &extra); + save_jointype, &extra); } /* @@ -715,16 +721,21 @@ get_memoize_path(PlannerInfo *root, RelOptInfo *innerrel, return NULL; /* - * Currently we don't do this for SEMI and ANTI joins unless they're - * marked as inner_unique. This is because nested loop SEMI/ANTI joins - * don't scan the inner node to completion, which will mean memoize cannot - * mark the cache entry as complete. - * - * XXX Currently we don't attempt to mark SEMI/ANTI joins as inner_unique - * = true. Should we? See add_paths_to_joinrel() + * Currently we don't do this for SEMI and ANTI joins, because nested loop + * SEMI/ANTI joins don't scan the inner node to completion, which means + * memoize cannot mark the cache entry as complete. Nor can we mark the + * cache entry as complete after fetching the first inner tuple, because + * if that tuple and the current outer tuple don't satisfy the join + * clauses, a second inner tuple that satisfies the parameters would find + * the cache entry already marked as complete. The only exception is when + * the inner relation is provably unique, as in that case, there won't be + * a second matching tuple and we can safely mark the cache entry as + * complete after fetching the first inner tuple. Note that in such + * cases, the SEMI join should have been reduced to an inner join by + * reduce_unique_semijoins. */ - if (!extra->inner_unique && (jointype == JOIN_SEMI || - jointype == JOIN_ANTI)) + if ((jointype == JOIN_SEMI || jointype == JOIN_ANTI) && + !extra->inner_unique) return NULL; /* @@ -748,16 +759,22 @@ get_memoize_path(PlannerInfo *root, RelOptInfo *innerrel, * * Lateral vars needn't be considered here as they're not considered when * determining if the join is unique. - * - * XXX this could be enabled if the remaining join quals were made part of - * the inner scan's filter instead of the join filter. Maybe it's worth - * considering doing that? */ - if (extra->inner_unique && - (inner_path->param_info == NULL || - bms_num_members(inner_path->param_info->ppi_serials) < - list_length(extra->restrictlist))) - return NULL; + if (extra->inner_unique) + { + Bitmapset *ppi_serials; + + if (inner_path->param_info == NULL) + return NULL; + + ppi_serials = inner_path->param_info->ppi_serials; + + foreach_node(RestrictInfo, rinfo, extra->restrictlist) + { + if (!bms_is_member(rinfo->rinfo_serial, ppi_serials)) + return NULL; + } + } /* * We can't use a memoize node if there are volatile functions in the @@ -870,16 +887,13 @@ try_nestloop_path(PlannerInfo *root, /* * Check to see if proposed path is still parameterized, and reject if the * parameterization wouldn't be sensible --- unless allow_star_schema_join - * says to allow it anyway. Also, we must reject if have_dangerous_phv - * doesn't like the look of it, which could only happen if the nestloop is - * still parameterized. + * says to allow it anyway. */ required_outer = calc_nestloop_required_outer(outerrelids, outer_paramrels, innerrelids, inner_paramrels); if (required_outer && - ((!bms_overlap(required_outer, extra->param_source_rels) && - !allow_star_schema_join(root, outerrelids, inner_paramrels)) || - have_dangerous_phv(root, outerrelids, inner_paramrels))) + !bms_overlap(required_outer, extra->param_source_rels) && + !allow_star_schema_join(root, outerrelids, inner_paramrels)) { /* Waste no memory when we reject a path here */ bms_free(required_outer); @@ -1036,6 +1050,7 @@ try_mergejoin_path(PlannerInfo *root, bool is_partial) { Relids required_outer; + int outer_presorted_keys = 0; JoinCostWorkspace workspace; if (is_partial) @@ -1081,9 +1096,16 @@ try_mergejoin_path(PlannerInfo *root, /* * If the given paths are already well enough ordered, we can skip doing * an explicit sort. + * + * We need to determine the number of presorted keys of the outer path to + * decide whether explicit incremental sort can be applied when + * outersortkeys is not NIL. We do not need to do the same for the inner + * path though, as incremental sort currently does not support + * mark/restore. */ if (outersortkeys && - pathkeys_contained_in(outersortkeys, outer_path->pathkeys)) + pathkeys_count_contained_in(outersortkeys, outer_path->pathkeys, + &outer_presorted_keys)) outersortkeys = NIL; if (innersortkeys && pathkeys_contained_in(innersortkeys, inner_path->pathkeys)) @@ -1095,6 +1117,7 @@ try_mergejoin_path(PlannerInfo *root, initial_cost_mergejoin(root, &workspace, jointype, mergeclauses, outer_path, inner_path, outersortkeys, innersortkeys, + outer_presorted_keys, extra); if (add_path_precheck(joinrel, workspace.disabled_nodes, @@ -1114,7 +1137,8 @@ try_mergejoin_path(PlannerInfo *root, required_outer, mergeclauses, outersortkeys, - innersortkeys)); + innersortkeys, + outer_presorted_keys)); } else { @@ -1140,6 +1164,7 @@ try_partial_mergejoin_path(PlannerInfo *root, JoinType jointype, JoinPathExtraData *extra) { + int outer_presorted_keys = 0; JoinCostWorkspace workspace; /* @@ -1153,9 +1178,16 @@ try_partial_mergejoin_path(PlannerInfo *root, /* * If the given paths are already well enough ordered, we can skip doing * an explicit sort. + * + * We need to determine the number of presorted keys of the outer path to + * decide whether explicit incremental sort can be applied when + * outersortkeys is not NIL. We do not need to do the same for the inner + * path though, as incremental sort currently does not support + * mark/restore. */ if (outersortkeys && - pathkeys_contained_in(outersortkeys, outer_path->pathkeys)) + pathkeys_count_contained_in(outersortkeys, outer_path->pathkeys, + &outer_presorted_keys)) outersortkeys = NIL; if (innersortkeys && pathkeys_contained_in(innersortkeys, inner_path->pathkeys)) @@ -1167,6 +1199,7 @@ try_partial_mergejoin_path(PlannerInfo *root, initial_cost_mergejoin(root, &workspace, jointype, mergeclauses, outer_path, inner_path, outersortkeys, innersortkeys, + outer_presorted_keys, extra); if (!add_partial_path_precheck(joinrel, workspace.disabled_nodes, @@ -1187,7 +1220,8 @@ try_partial_mergejoin_path(PlannerInfo *root, NULL, mergeclauses, outersortkeys, - innersortkeys)); + innersortkeys, + outer_presorted_keys)); } /* @@ -1338,7 +1372,6 @@ sort_inner_and_outer(PlannerInfo *root, JoinType jointype, JoinPathExtraData *extra) { - JoinType save_jointype = jointype; Path *outer_path; Path *inner_path; Path *cheapest_partial_outer = NULL; @@ -1376,38 +1409,16 @@ sort_inner_and_outer(PlannerInfo *root, PATH_PARAM_BY_REL(inner_path, outerrel)) return; - /* - * If unique-ification is requested, do it and then handle as a plain - * inner join. - */ - if (jointype == JOIN_UNIQUE_OUTER) - { - outer_path = (Path *) create_unique_path(root, outerrel, - outer_path, extra->sjinfo); - Assert(outer_path); - jointype = JOIN_INNER; - } - else if (jointype == JOIN_UNIQUE_INNER) - { - inner_path = (Path *) create_unique_path(root, innerrel, - inner_path, extra->sjinfo); - Assert(inner_path); - jointype = JOIN_INNER; - } - /* * If the joinrel is parallel-safe, we may be able to consider a partial - * merge join. However, we can't handle JOIN_UNIQUE_OUTER, because the - * outer path will be partial, and therefore we won't be able to properly - * guarantee uniqueness. Similarly, we can't handle JOIN_FULL, JOIN_RIGHT - * and JOIN_RIGHT_ANTI, because they can produce false null extended rows. + * merge join. However, we can't handle JOIN_FULL, JOIN_RIGHT and + * JOIN_RIGHT_ANTI, because they can produce false null extended rows. * Also, the resulting path must not be parameterized. */ if (joinrel->consider_parallel && - save_jointype != JOIN_UNIQUE_OUTER && - save_jointype != JOIN_FULL && - save_jointype != JOIN_RIGHT && - save_jointype != JOIN_RIGHT_ANTI && + jointype != JOIN_FULL && + jointype != JOIN_RIGHT && + jointype != JOIN_RIGHT_ANTI && outerrel->partial_pathlist != NIL && bms_is_empty(joinrel->lateral_relids)) { @@ -1415,7 +1426,7 @@ sort_inner_and_outer(PlannerInfo *root, if (inner_path->parallel_safe) cheapest_safe_inner = inner_path; - else if (save_jointype != JOIN_UNIQUE_INNER) + else cheapest_safe_inner = get_cheapest_parallel_safe_total_inner(innerrel->pathlist); } @@ -1554,13 +1565,9 @@ generate_mergejoin_paths(PlannerInfo *root, List *trialsortkeys; Path *cheapest_startup_inner; Path *cheapest_total_inner; - JoinType save_jointype = jointype; int num_sortkeys; int sortkeycnt; - if (jointype == JOIN_UNIQUE_OUTER || jointype == JOIN_UNIQUE_INNER) - jointype = JOIN_INNER; - /* Look for useful mergeclauses (if any) */ mergeclauses = find_mergeclauses_for_outer_pathkeys(root, @@ -1610,10 +1617,6 @@ generate_mergejoin_paths(PlannerInfo *root, extra, is_partial); - /* Can't do anything else if inner path needs to be unique'd */ - if (save_jointype == JOIN_UNIQUE_INNER) - return; - /* * Look for presorted inner paths that satisfy the innersortkey list --- * or any truncation thereof, if we are allowed to build a mergejoin using @@ -1793,7 +1796,6 @@ match_unsorted_outer(PlannerInfo *root, JoinType jointype, JoinPathExtraData *extra) { - JoinType save_jointype = jointype; bool nestjoinOK; bool useallclauses; Path *inner_cheapest_total = innerrel->cheapest_total_path; @@ -1829,12 +1831,6 @@ match_unsorted_outer(PlannerInfo *root, nestjoinOK = false; useallclauses = true; break; - case JOIN_UNIQUE_OUTER: - case JOIN_UNIQUE_INNER: - jointype = JOIN_INNER; - nestjoinOK = true; - useallclauses = false; - break; default: elog(ERROR, "unrecognized join type: %d", (int) jointype); @@ -1847,24 +1843,20 @@ match_unsorted_outer(PlannerInfo *root, * If inner_cheapest_total is parameterized by the outer rel, ignore it; * we will consider it below as a member of cheapest_parameterized_paths, * but the other possibilities considered in this routine aren't usable. + * + * Furthermore, if the inner side is a unique-ified relation, we cannot + * generate any valid paths here, because the inner rel's dependency on + * the outer rel makes unique-ification meaningless. */ if (PATH_PARAM_BY_REL(inner_cheapest_total, outerrel)) + { inner_cheapest_total = NULL; - /* - * If we need to unique-ify the inner path, we will consider only the - * cheapest-total inner. - */ - if (save_jointype == JOIN_UNIQUE_INNER) - { - /* No way to do this with an inner path parameterized by outer rel */ - if (inner_cheapest_total == NULL) + if (RELATION_WAS_MADE_UNIQUE(innerrel, extra->sjinfo, jointype)) return; - inner_cheapest_total = (Path *) - create_unique_path(root, innerrel, inner_cheapest_total, extra->sjinfo); - Assert(inner_cheapest_total); } - else if (nestjoinOK) + + if (nestjoinOK) { /* * Consider materializing the cheapest inner path, unless @@ -1888,20 +1880,6 @@ match_unsorted_outer(PlannerInfo *root, if (PATH_PARAM_BY_REL(outerpath, innerrel)) continue; - /* - * If we need to unique-ify the outer path, it's pointless to consider - * any but the cheapest outer. (XXX we don't consider parameterized - * outers, nor inners, for unique-ified cases. Should we?) - */ - if (save_jointype == JOIN_UNIQUE_OUTER) - { - if (outerpath != outerrel->cheapest_total_path) - continue; - outerpath = (Path *) create_unique_path(root, outerrel, - outerpath, extra->sjinfo); - Assert(outerpath); - } - /* * The result will have this sort order (even if it is implemented as * a nestloop, and even if some of the mergeclauses are implemented by @@ -1910,21 +1888,7 @@ match_unsorted_outer(PlannerInfo *root, merge_pathkeys = build_join_pathkeys(root, joinrel, jointype, outerpath->pathkeys); - if (save_jointype == JOIN_UNIQUE_INNER) - { - /* - * Consider nestloop join, but only with the unique-ified cheapest - * inner path - */ - try_nestloop_path(root, - joinrel, - outerpath, - inner_cheapest_total, - merge_pathkeys, - jointype, - extra); - } - else if (nestjoinOK) + if (nestjoinOK) { /* * Consider nestloop joins using this outer path and various @@ -1975,17 +1939,13 @@ match_unsorted_outer(PlannerInfo *root, extra); } - /* Can't do anything else if outer path needs to be unique'd */ - if (save_jointype == JOIN_UNIQUE_OUTER) - continue; - /* Can't do anything else if inner rel is parameterized by outer */ if (inner_cheapest_total == NULL) continue; /* Generate merge join paths */ generate_mergejoin_paths(root, joinrel, innerrel, outerpath, - save_jointype, extra, useallclauses, + jointype, extra, useallclauses, inner_cheapest_total, merge_pathkeys, false); } @@ -1993,41 +1953,35 @@ match_unsorted_outer(PlannerInfo *root, /* * Consider partial nestloop and mergejoin plan if outerrel has any * partial path and the joinrel is parallel-safe. However, we can't - * handle JOIN_UNIQUE_OUTER, because the outer path will be partial, and - * therefore we won't be able to properly guarantee uniqueness. Nor can - * we handle joins needing lateral rels, since partial paths must not be - * parameterized. Similarly, we can't handle JOIN_FULL, JOIN_RIGHT and + * handle joins needing lateral rels, since partial paths must not be + * parameterized. Similarly, we can't handle JOIN_FULL, JOIN_RIGHT and * JOIN_RIGHT_ANTI, because they can produce false null extended rows. */ if (joinrel->consider_parallel && - save_jointype != JOIN_UNIQUE_OUTER && - save_jointype != JOIN_FULL && - save_jointype != JOIN_RIGHT && - save_jointype != JOIN_RIGHT_ANTI && + jointype != JOIN_FULL && + jointype != JOIN_RIGHT && + jointype != JOIN_RIGHT_ANTI && outerrel->partial_pathlist != NIL && bms_is_empty(joinrel->lateral_relids)) { if (nestjoinOK) consider_parallel_nestloop(root, joinrel, outerrel, innerrel, - save_jointype, extra); + jointype, extra); /* * If inner_cheapest_total is NULL or non parallel-safe then find the - * cheapest total parallel safe path. If doing JOIN_UNIQUE_INNER, we - * can't use any alternative inner path. + * cheapest total parallel safe path. */ if (inner_cheapest_total == NULL || !inner_cheapest_total->parallel_safe) { - if (save_jointype == JOIN_UNIQUE_INNER) - return; - - inner_cheapest_total = get_cheapest_parallel_safe_total_inner(innerrel->pathlist); + inner_cheapest_total = + get_cheapest_parallel_safe_total_inner(innerrel->pathlist); } if (inner_cheapest_total) consider_parallel_mergejoin(root, joinrel, outerrel, innerrel, - save_jointype, extra, + jointype, extra, inner_cheapest_total); } } @@ -2092,24 +2046,17 @@ consider_parallel_nestloop(PlannerInfo *root, JoinType jointype, JoinPathExtraData *extra) { - JoinType save_jointype = jointype; Path *inner_cheapest_total = innerrel->cheapest_total_path; Path *matpath = NULL; ListCell *lc1; - if (jointype == JOIN_UNIQUE_INNER) - jointype = JOIN_INNER; - /* - * Consider materializing the cheapest inner path, unless: 1) we're doing - * JOIN_UNIQUE_INNER, because in this case we have to unique-ify the - * cheapest inner path, 2) enable_material is off, 3) the cheapest inner - * path is not parallel-safe, 4) the cheapest inner path is parameterized - * by the outer rel, or 5) the cheapest inner path materializes its output - * anyway. + * Consider materializing the cheapest inner path, unless: 1) + * enable_material is off, 2) the cheapest inner path is not + * parallel-safe, 3) the cheapest inner path is parameterized by the outer + * rel, or 4) the cheapest inner path materializes its output anyway. */ - if (save_jointype != JOIN_UNIQUE_INNER && - enable_material && inner_cheapest_total->parallel_safe && + if (enable_material && inner_cheapest_total->parallel_safe && !PATH_PARAM_BY_REL(inner_cheapest_total, outerrel) && !ExecMaterializesOutput(inner_cheapest_total->pathtype)) { @@ -2143,23 +2090,6 @@ consider_parallel_nestloop(PlannerInfo *root, if (!innerpath->parallel_safe) continue; - /* - * If we're doing JOIN_UNIQUE_INNER, we can only use the inner's - * cheapest_total_path, and we have to unique-ify it. (We might - * be able to relax this to allow other safe, unparameterized - * inner paths, but right now create_unique_path is not on board - * with that.) - */ - if (save_jointype == JOIN_UNIQUE_INNER) - { - if (innerpath != innerrel->cheapest_total_path) - continue; - innerpath = (Path *) create_unique_path(root, innerrel, - innerpath, - extra->sjinfo); - Assert(innerpath); - } - try_partial_nestloop_path(root, joinrel, outerpath, innerpath, pathkeys, jointype, extra); @@ -2201,7 +2131,6 @@ hash_inner_and_outer(PlannerInfo *root, JoinType jointype, JoinPathExtraData *extra) { - JoinType save_jointype = jointype; bool isouterjoin = IS_OUTER_JOIN(jointype); List *hashclauses; ListCell *l; @@ -2264,6 +2193,8 @@ hash_inner_and_outer(PlannerInfo *root, Path *cheapest_startup_outer = outerrel->cheapest_startup_path; Path *cheapest_total_outer = outerrel->cheapest_total_path; Path *cheapest_total_inner = innerrel->cheapest_total_path; + ListCell *lc1; + ListCell *lc2; /* * If either cheapest-total path is parameterized by the other rel, we @@ -2275,114 +2206,64 @@ hash_inner_and_outer(PlannerInfo *root, PATH_PARAM_BY_REL(cheapest_total_inner, outerrel)) return; - /* Unique-ify if need be; we ignore parameterized possibilities */ - if (jointype == JOIN_UNIQUE_OUTER) - { - cheapest_total_outer = (Path *) - create_unique_path(root, outerrel, - cheapest_total_outer, extra->sjinfo); - Assert(cheapest_total_outer); - jointype = JOIN_INNER; - try_hashjoin_path(root, - joinrel, - cheapest_total_outer, - cheapest_total_inner, - hashclauses, - jointype, - extra); - /* no possibility of cheap startup here */ - } - else if (jointype == JOIN_UNIQUE_INNER) - { - cheapest_total_inner = (Path *) - create_unique_path(root, innerrel, - cheapest_total_inner, extra->sjinfo); - Assert(cheapest_total_inner); - jointype = JOIN_INNER; + /* + * Consider the cheapest startup outer together with the cheapest + * total inner, and then consider pairings of cheapest-total paths + * including parameterized ones. There is no use in generating + * parameterized paths on the basis of possibly cheap startup cost, so + * this is sufficient. + */ + if (cheapest_startup_outer != NULL) try_hashjoin_path(root, joinrel, - cheapest_total_outer, + cheapest_startup_outer, cheapest_total_inner, hashclauses, jointype, extra); - if (cheapest_startup_outer != NULL && - cheapest_startup_outer != cheapest_total_outer) - try_hashjoin_path(root, - joinrel, - cheapest_startup_outer, - cheapest_total_inner, - hashclauses, - jointype, - extra); - } - else + + foreach(lc1, outerrel->cheapest_parameterized_paths) { + Path *outerpath = (Path *) lfirst(lc1); + /* - * For other jointypes, we consider the cheapest startup outer - * together with the cheapest total inner, and then consider - * pairings of cheapest-total paths including parameterized ones. - * There is no use in generating parameterized paths on the basis - * of possibly cheap startup cost, so this is sufficient. + * We cannot use an outer path that is parameterized by the inner + * rel. */ - ListCell *lc1; - ListCell *lc2; - - if (cheapest_startup_outer != NULL) - try_hashjoin_path(root, - joinrel, - cheapest_startup_outer, - cheapest_total_inner, - hashclauses, - jointype, - extra); + if (PATH_PARAM_BY_REL(outerpath, innerrel)) + continue; - foreach(lc1, outerrel->cheapest_parameterized_paths) + foreach(lc2, innerrel->cheapest_parameterized_paths) { - Path *outerpath = (Path *) lfirst(lc1); + Path *innerpath = (Path *) lfirst(lc2); /* - * We cannot use an outer path that is parameterized by the - * inner rel. + * We cannot use an inner path that is parameterized by the + * outer rel, either. */ - if (PATH_PARAM_BY_REL(outerpath, innerrel)) + if (PATH_PARAM_BY_REL(innerpath, outerrel)) continue; - foreach(lc2, innerrel->cheapest_parameterized_paths) - { - Path *innerpath = (Path *) lfirst(lc2); - - /* - * We cannot use an inner path that is parameterized by - * the outer rel, either. - */ - if (PATH_PARAM_BY_REL(innerpath, outerrel)) - continue; + if (outerpath == cheapest_startup_outer && + innerpath == cheapest_total_inner) + continue; /* already tried it */ - if (outerpath == cheapest_startup_outer && - innerpath == cheapest_total_inner) - continue; /* already tried it */ - - try_hashjoin_path(root, - joinrel, - outerpath, - innerpath, - hashclauses, - jointype, - extra); - } + try_hashjoin_path(root, + joinrel, + outerpath, + innerpath, + hashclauses, + jointype, + extra); } } /* * If the joinrel is parallel-safe, we may be able to consider a - * partial hash join. However, we can't handle JOIN_UNIQUE_OUTER, - * because the outer path will be partial, and therefore we won't be - * able to properly guarantee uniqueness. Also, the resulting path - * must not be parameterized. + * partial hash join. However, the resulting path must not be + * parameterized. */ if (joinrel->consider_parallel && - save_jointype != JOIN_UNIQUE_OUTER && outerrel->partial_pathlist != NIL && bms_is_empty(joinrel->lateral_relids)) { @@ -2395,11 +2276,9 @@ hash_inner_and_outer(PlannerInfo *root, /* * Can we use a partial inner plan too, so that we can build a - * shared hash table in parallel? We can't handle - * JOIN_UNIQUE_INNER because we can't guarantee uniqueness. + * shared hash table in parallel? */ if (innerrel->partial_pathlist != NIL && - save_jointype != JOIN_UNIQUE_INNER && enable_parallel_hash) { cheapest_partial_inner = @@ -2415,19 +2294,18 @@ hash_inner_and_outer(PlannerInfo *root, * Normally, given that the joinrel is parallel-safe, the cheapest * total inner path will also be parallel-safe, but if not, we'll * have to search for the cheapest safe, unparameterized inner - * path. If doing JOIN_UNIQUE_INNER, we can't use any alternative - * inner path. If full, right, right-semi or right-anti join, we - * can't use parallelism (building the hash table in each backend) + * path. If full, right, right-semi or right-anti join, we can't + * use parallelism (building the hash table in each backend) * because no one process has all the match bits. */ - if (save_jointype == JOIN_FULL || - save_jointype == JOIN_RIGHT || - save_jointype == JOIN_RIGHT_SEMI || - save_jointype == JOIN_RIGHT_ANTI) + if (jointype == JOIN_FULL || + jointype == JOIN_RIGHT || + jointype == JOIN_RIGHT_SEMI || + jointype == JOIN_RIGHT_ANTI) cheapest_safe_inner = NULL; else if (cheapest_total_inner->parallel_safe) cheapest_safe_inner = cheapest_total_inner; - else if (save_jointype != JOIN_UNIQUE_INNER) + else cheapest_safe_inner = get_cheapest_parallel_safe_total_inner(innerrel->pathlist); diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index 60d65762b5d5e..535248aa52516 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -19,6 +19,7 @@ #include "optimizer/joininfo.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" +#include "optimizer/planner.h" #include "partitioning/partbounds.h" #include "utils/memutils.h" @@ -444,8 +445,7 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, } else if (sjinfo->jointype == JOIN_SEMI && bms_equal(sjinfo->syn_righthand, rel2->relids) && - create_unique_path(root, rel2, rel2->cheapest_total_path, - sjinfo) != NULL) + create_unique_paths(root, rel2, sjinfo) != NULL) { /*---------- * For a semijoin, we can join the RHS to anything else by @@ -477,8 +477,7 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, } else if (sjinfo->jointype == JOIN_SEMI && bms_equal(sjinfo->syn_righthand, rel1->relids) && - create_unique_path(root, rel1, rel1->cheapest_total_path, - sjinfo) != NULL) + create_unique_paths(root, rel1, sjinfo) != NULL) { /* Reversed semijoin case */ if (match_sjinfo) @@ -565,9 +564,6 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, * Also, if the lateral reference is only indirect, we should reject * the join; whatever rel(s) the reference chain goes through must be * joined to first. - * - * Another case that might keep us from building a valid plan is the - * implementation restriction described by have_dangerous_phv(). */ lateral_fwd = bms_overlap(rel1->relids, rel2->lateral_relids); lateral_rev = bms_overlap(rel2->relids, rel1->lateral_relids); @@ -584,9 +580,6 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, /* check there is a direct reference from rel2 to rel1 */ if (!bms_overlap(rel1->relids, rel2->direct_lateral_relids)) return false; /* only indirect refs, so reject */ - /* check we won't have a dangerous PHV */ - if (have_dangerous_phv(root, rel1->relids, rel2->lateral_relids)) - return false; /* might be unable to handle required PHV */ } else if (lateral_rev) { @@ -599,9 +592,6 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, /* check there is a direct reference from rel1 to rel2 */ if (!bms_overlap(rel2->relids, rel1->direct_lateral_relids)) return false; /* only indirect refs, so reject */ - /* check we won't have a dangerous PHV */ - if (have_dangerous_phv(root, rel2->relids, rel1->lateral_relids)) - return false; /* might be unable to handle required PHV */ } /* @@ -895,6 +885,8 @@ populate_joinrel_with_paths(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, RelOptInfo *joinrel, SpecialJoinInfo *sjinfo, List *restrictlist) { + RelOptInfo *unique_rel2; + /* * Consider paths using each rel as both outer and inner. Depending on * the join type, a provably empty outer or inner rel might mean the join @@ -1000,14 +992,13 @@ populate_joinrel_with_paths(PlannerInfo *root, RelOptInfo *rel1, /* * If we know how to unique-ify the RHS and one input rel is * exactly the RHS (not a superset) we can consider unique-ifying - * it and then doing a regular join. (The create_unique_path + * it and then doing a regular join. (The create_unique_paths * check here is probably redundant with what join_is_legal did, * but if so the check is cheap because it's cached. So test * anyway to be sure.) */ if (bms_equal(sjinfo->syn_righthand, rel2->relids) && - create_unique_path(root, rel2, rel2->cheapest_total_path, - sjinfo) != NULL) + (unique_rel2 = create_unique_paths(root, rel2, sjinfo)) != NULL) { if (is_dummy_rel(rel1) || is_dummy_rel(rel2) || restriction_is_constant_false(restrictlist, joinrel, false)) @@ -1015,10 +1006,10 @@ populate_joinrel_with_paths(PlannerInfo *root, RelOptInfo *rel1, mark_dummy_rel(joinrel); break; } - add_paths_to_joinrel(root, joinrel, rel1, rel2, + add_paths_to_joinrel(root, joinrel, rel1, unique_rel2, JOIN_UNIQUE_INNER, sjinfo, restrictlist); - add_paths_to_joinrel(root, joinrel, rel2, rel1, + add_paths_to_joinrel(root, joinrel, unique_rel2, rel1, JOIN_UNIQUE_OUTER, sjinfo, restrictlist); } @@ -1278,57 +1269,6 @@ has_legal_joinclause(PlannerInfo *root, RelOptInfo *rel) } -/* - * There's a pitfall for creating parameterized nestloops: suppose the inner - * rel (call it A) has a parameter that is a PlaceHolderVar, and that PHV's - * minimum eval_at set includes the outer rel (B) and some third rel (C). - * We might think we could create a B/A nestloop join that's parameterized by - * C. But we would end up with a plan in which the PHV's expression has to be - * evaluated as a nestloop parameter at the B/A join; and the executor is only - * set up to handle simple Vars as NestLoopParams. Rather than add complexity - * and overhead to the executor for such corner cases, it seems better to - * forbid the join. (Note that we can still make use of A's parameterized - * path with pre-joined B+C as the outer rel. have_join_order_restriction() - * ensures that we will consider making such a join even if there are not - * other reasons to do so.) - * - * So we check whether any PHVs used in the query could pose such a hazard. - * We don't have any simple way of checking whether a risky PHV would actually - * be used in the inner plan, and the case is so unusual that it doesn't seem - * worth working very hard on it. - * - * This needs to be checked in two places. If the inner rel's minimum - * parameterization would trigger the restriction, then join_is_legal() should - * reject the join altogether, because there will be no workable paths for it. - * But joinpath.c has to check again for every proposed nestloop path, because - * the inner path might have more than the minimum parameterization, causing - * some PHV to be dangerous for it that otherwise wouldn't be. - */ -bool -have_dangerous_phv(PlannerInfo *root, - Relids outer_relids, Relids inner_params) -{ - ListCell *lc; - - foreach(lc, root->placeholder_list) - { - PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(lc); - - if (!bms_is_subset(phinfo->ph_eval_at, inner_params)) - continue; /* ignore, could not be a nestloop param */ - if (!bms_overlap(phinfo->ph_eval_at, outer_relids)) - continue; /* ignore, not relevant to this join */ - if (bms_is_subset(phinfo->ph_eval_at, outer_relids)) - continue; /* safe, it can be eval'd within outerrel */ - /* Otherwise, it's potentially unsafe, so reject the join */ - return true; - } - - /* OK to perform the join */ - return false; -} - - /* * is_dummy_rel --- has relation been proven empty? */ diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index 154eb505d755a..8b04d40d36d73 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -55,7 +55,7 @@ static bool right_merge_direction(PlannerInfo *root, PathKey *pathkey); PathKey * make_canonical_pathkey(PlannerInfo *root, EquivalenceClass *eclass, Oid opfamily, - int strategy, bool nulls_first) + CompareType cmptype, bool nulls_first) { PathKey *pk; ListCell *lc; @@ -74,7 +74,7 @@ make_canonical_pathkey(PlannerInfo *root, pk = (PathKey *) lfirst(lc); if (eclass == pk->pk_eclass && opfamily == pk->pk_opfamily && - strategy == pk->pk_strategy && + cmptype == pk->pk_cmptype && nulls_first == pk->pk_nulls_first) return pk; } @@ -88,7 +88,7 @@ make_canonical_pathkey(PlannerInfo *root, pk = makeNode(PathKey); pk->pk_eclass = eclass; pk->pk_opfamily = opfamily; - pk->pk_strategy = strategy; + pk->pk_cmptype = cmptype; pk->pk_nulls_first = nulls_first; root->canon_pathkeys = lappend(root->canon_pathkeys, pk); @@ -206,12 +206,12 @@ make_pathkey_from_sortinfo(PlannerInfo *root, Relids rel, bool create_it) { - int16 strategy; + CompareType cmptype; Oid equality_op; List *opfamilies; EquivalenceClass *eclass; - strategy = reverse_sort ? BTGreaterStrategyNumber : BTLessStrategyNumber; + cmptype = reverse_sort ? COMPARE_GT : COMPARE_LT; /* * EquivalenceClasses need to contain opfamily lists based on the family @@ -219,13 +219,13 @@ make_pathkey_from_sortinfo(PlannerInfo *root, * more than one opfamily. So we have to look up the opfamily's equality * operator and get its membership. */ - equality_op = get_opfamily_member(opfamily, - opcintype, - opcintype, - BTEqualStrategyNumber); + equality_op = get_opfamily_member_for_cmptype(opfamily, + opcintype, + opcintype, + COMPARE_EQ); if (!OidIsValid(equality_op)) /* shouldn't happen */ elog(ERROR, "missing operator %d(%u,%u) in opfamily %u", - BTEqualStrategyNumber, opcintype, opcintype, opfamily); + COMPARE_EQ, opcintype, opcintype, opfamily); opfamilies = get_mergejoin_opfamilies(equality_op); if (!opfamilies) /* certainly should find some */ elog(ERROR, "could not find opfamilies for equality operator %u", @@ -242,7 +242,7 @@ make_pathkey_from_sortinfo(PlannerInfo *root, /* And finally we can find or create a PathKey node */ return make_canonical_pathkey(root, eclass, opfamily, - strategy, nulls_first); + cmptype, nulls_first); } /* @@ -264,11 +264,11 @@ make_pathkey_from_sortop(PlannerInfo *root, Oid opfamily, opcintype, collation; - int16 strategy; + CompareType cmptype; /* Find the operator in pg_amop --- failure shouldn't happen */ if (!get_ordering_op_properties(ordering_op, - &opfamily, &opcintype, &strategy)) + &opfamily, &opcintype, &cmptype)) elog(ERROR, "operator %u is not a valid ordering operator", ordering_op); @@ -1006,12 +1006,12 @@ build_expression_pathkey(PlannerInfo *root, List *pathkeys; Oid opfamily, opcintype; - int16 strategy; + CompareType cmptype; PathKey *cpathkey; /* Find the operator in pg_amop --- failure shouldn't happen */ if (!get_ordering_op_properties(opno, - &opfamily, &opcintype, &strategy)) + &opfamily, &opcintype, &cmptype)) elog(ERROR, "operator %u is not a valid ordering operator", opno); @@ -1020,8 +1020,8 @@ build_expression_pathkey(PlannerInfo *root, opfamily, opcintype, exprCollation((Node *) expr), - (strategy == BTGreaterStrategyNumber), - (strategy == BTGreaterStrategyNumber), + (cmptype == COMPARE_GT), + (cmptype == COMPARE_GT), 0, rel, create_it); @@ -1118,7 +1118,7 @@ convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, make_canonical_pathkey(root, outer_ec, sub_pathkey->pk_opfamily, - sub_pathkey->pk_strategy, + sub_pathkey->pk_cmptype, sub_pathkey->pk_nulls_first); } } @@ -1143,6 +1143,7 @@ convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, int best_score = -1; ListCell *j; + /* Ignore children here */ foreach(j, sub_eclass->ec_members) { EquivalenceMember *sub_member = (EquivalenceMember *) lfirst(j); @@ -1151,8 +1152,8 @@ convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, Oid sub_expr_coll = sub_eclass->ec_collation; ListCell *k; - if (sub_member->em_is_child) - continue; /* ignore children here */ + /* Child members should not exist in ec_members */ + Assert(!sub_member->em_is_child); foreach(k, subquery_tlist) { @@ -1200,7 +1201,7 @@ convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, outer_pk = make_canonical_pathkey(root, outer_ec, sub_pathkey->pk_opfamily, - sub_pathkey->pk_strategy, + sub_pathkey->pk_cmptype, sub_pathkey->pk_nulls_first); /* score = # of equivalence peers */ score = list_length(outer_ec->ec_members) - 1; @@ -1709,8 +1710,11 @@ select_outer_pathkeys_for_merge(PlannerInfo *root, { EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2); + /* Child members should not exist in ec_members */ + Assert(!em->em_is_child); + /* Potential future join partner? */ - if (!em->em_is_const && !em->em_is_child && + if (!em->em_is_const && !bms_overlap(em->em_relids, joinrel->relids)) score++; } @@ -1816,7 +1820,7 @@ select_outer_pathkeys_for_merge(PlannerInfo *root, pathkey = make_canonical_pathkey(root, ec, linitial_oid(ec->ec_opfamilies), - BTLessStrategyNumber, + COMPARE_LT, false); /* can't be redundant because no duplicate ECs */ Assert(!pathkey_is_redundant(pathkey, pathkeys)); @@ -1909,7 +1913,7 @@ make_inner_pathkeys_for_merge(PlannerInfo *root, pathkey = make_canonical_pathkey(root, ieclass, opathkey->pk_opfamily, - opathkey->pk_strategy, + opathkey->pk_cmptype, opathkey->pk_nulls_first); /* @@ -2134,12 +2138,12 @@ right_merge_direction(PlannerInfo *root, PathKey *pathkey) * want to prefer only one of the two possible directions, and we * might as well use this one. */ - return (pathkey->pk_strategy == query_pathkey->pk_strategy); + return (pathkey->pk_cmptype == query_pathkey->pk_cmptype); } } /* If no matching ORDER BY request, prefer the ASC direction */ - return (pathkey->pk_strategy == BTLessStrategyNumber); + return (pathkey->pk_cmptype == COMPARE_LT); } /* diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 8a8d4a2af3332..2a3dea88a94fb 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -74,6 +74,8 @@ static bool is_innerrel_unique_for(PlannerInfo *root, List *restrictlist, List **extra_clauses); static int self_join_candidates_cmp(const void *a, const void *b); +static bool replace_relid_callback(Node *node, + ChangeVarNodes_context *context); /* @@ -397,13 +399,19 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel, { Assert(subst > 0); - ChangeVarNodes((Node *) sjinf->semi_rhs_exprs, relid, subst, 0); + ChangeVarNodesExtended((Node *) sjinf->semi_rhs_exprs, relid, subst, + 0, replace_relid_callback); } } /* * Likewise remove references from PlaceHolderVar data structures, - * removing any no-longer-needed placeholders entirely. + * removing any no-longer-needed placeholders entirely. We remove PHV + * only for left-join removal. With self-join elimination, PHVs already + * get moved to the remaining relation, where they might still be needed. + * It might also happen that we skip the removal of some PHVs that could + * be removed. However, the overhead of extra PHVs is small compared to + * the complexity of analysis needed to remove them. * * Removal is a bit trickier than it might seem: we can remove PHVs that * are used at the target rel and/or in the join qual, but not those that @@ -420,10 +428,16 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel, PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l); Assert(sjinfo == NULL || !bms_is_member(relid, phinfo->ph_lateral)); - if (bms_is_subset(phinfo->ph_needed, joinrelids) && + if (sjinfo != NULL && + bms_is_subset(phinfo->ph_needed, joinrelids) && bms_is_member(relid, phinfo->ph_eval_at) && - (sjinfo == NULL || !bms_is_member(sjinfo->ojrelid, phinfo->ph_eval_at))) + !bms_is_member(sjinfo->ojrelid, phinfo->ph_eval_at)) { + /* + * This code shouldn't be executed if one relation is substituted + * with another: in this case, the placeholder may be employed in + * a filter inside the scan node the SJE removes. + */ root->placeholder_list = foreach_delete_current(root->placeholder_list, l); root->placeholder_array[phinfo->phid] = NULL; @@ -458,7 +472,8 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel, sjinfo->ojrelid, subst); Assert(!bms_is_empty(phv->phrels)); - ChangeVarNodes((Node *) phv->phexpr, relid, subst, 0); + ChangeVarNodesExtended((Node *) phv->phexpr, relid, subst, 0, + replace_relid_callback); Assert(phv->phnullingrels == NULL); /* no need to adjust */ } @@ -512,7 +527,8 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel, } if (subst > 0) - ChangeVarNodes((Node *) otherrel->lateral_vars, relid, subst, 0); + ChangeVarNodesExtended((Node *) otherrel->lateral_vars, relid, + subst, 0, replace_relid_callback); } } @@ -615,6 +631,7 @@ remove_leftjoinrel_from_query(PlannerInfo *root, int relid, * remove_join_clause_from_rels will touch it.) */ root->simple_rel_array[relid] = NULL; + root->simple_rte_array[relid] = NULL; /* And nuke the RelOptInfo, just in case there's another access path */ pfree(rel); @@ -710,6 +727,13 @@ remove_rel_from_eclass(EquivalenceClass *ec, SpecialJoinInfo *sjinfo, ec->ec_relids = adjust_relid_set(ec->ec_relids, sjinfo->ojrelid, subst); + /* + * We don't expect any EC child members to exist at this point. Ensure + * that's the case, otherwise, we might be getting asked to do something + * this function hasn't been coded for. + */ + Assert(ec->ec_childmembers == NULL); + /* * Fix up the member expressions. Any non-const member that ends with * empty em_relids must be a Var or PHV of the removed relation. We don't @@ -739,7 +763,8 @@ remove_rel_from_eclass(EquivalenceClass *ec, SpecialJoinInfo *sjinfo, RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); if (sjinfo == NULL) - ChangeVarNodes((Node *) rinfo, relid, subst, 0); + ChangeVarNodesExtended((Node *) rinfo, relid, subst, 0, + replace_relid_callback); else remove_rel_from_restrictinfo(rinfo, relid, sjinfo->ojrelid); } @@ -749,7 +774,7 @@ remove_rel_from_eclass(EquivalenceClass *ec, SpecialJoinInfo *sjinfo, * drop them. (At this point, any such clauses would be base restriction * clauses, which we'd not need anymore anyway.) */ - ec->ec_derives = NIL; + ec_clear_derived_clauses(ec); } /* @@ -966,11 +991,10 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list, { /* * Examine the indexes to see if we have a matching unique index. - * relation_has_unique_index_ext automatically adds any usable + * relation_has_unique_index_for automatically adds any usable * restriction clauses for the rel, so we needn't do that here. */ - if (relation_has_unique_index_ext(root, rel, clause_list, NIL, NIL, - extra_clauses)) + if (relation_has_unique_index_for(root, rel, clause_list, extra_clauses)) return true; } else if (rel->rtekind == RTE_SUBQUERY) @@ -1509,6 +1533,13 @@ update_eclasses(EquivalenceClass *ec, int from, int to) List *new_members = NIL; List *new_sources = NIL; + /* + * We don't expect any EC child members to exist at this point. Ensure + * that's the case, otherwise, we might be getting asked to do something + * this function hasn't been coded for. + */ + Assert(ec->ec_childmembers == NULL); + foreach_node(EquivalenceMember, em, ec->ec_members) { bool is_redundant = false; @@ -1523,7 +1554,8 @@ update_eclasses(EquivalenceClass *ec, int from, int to) em->em_jdomain->jd_relids = adjust_relid_set(em->em_jdomain->jd_relids, from, to); /* We only process inner joins */ - ChangeVarNodes((Node *) em->em_expr, from, to, 0); + ChangeVarNodesExtended((Node *) em->em_expr, from, to, 0, + replace_relid_callback); foreach_node(EquivalenceMember, other, new_members) { @@ -1544,8 +1576,7 @@ update_eclasses(EquivalenceClass *ec, int from, int to) list_free(ec->ec_members); ec->ec_members = new_members; - list_free(ec->ec_derives); - ec->ec_derives = NULL; + ec_clear_derived_clauses(ec); /* Update EC source expressions */ foreach_node(RestrictInfo, rinfo, ec->ec_sources) @@ -1558,7 +1589,8 @@ update_eclasses(EquivalenceClass *ec, int from, int to) continue; } - ChangeVarNodes((Node *) rinfo, from, to, 0); + ChangeVarNodesExtended((Node *) rinfo, from, to, 0, + replace_relid_callback); /* * After switching the clause to the remaining relation, check it for @@ -1653,6 +1685,118 @@ add_non_redundant_clauses(PlannerInfo *root, } } +/* + * A custom callback for ChangeVarNodesExtended() providing + * Self-join elimination (SJE) related functionality + * + * SJE needs to skip the RangeTblRef node + * type. During SJE's last step, remove_rel_from_joinlist() removes + * remaining RangeTblRefs with target relid. If ChangeVarNodes() replaces + * the target relid before, remove_rel_from_joinlist() fails to identify + * the nodes to delete. + * + * SJE also needs to change the relids within RestrictInfo's. + */ +static bool +replace_relid_callback(Node *node, ChangeVarNodes_context *context) +{ + if (IsA(node, RangeTblRef)) + { + return true; + } + else if (IsA(node, RestrictInfo)) + { + RestrictInfo *rinfo = (RestrictInfo *) node; + int relid = -1; + bool is_req_equal = + (rinfo->required_relids == rinfo->clause_relids); + bool clause_relids_is_multiple = + (bms_membership(rinfo->clause_relids) == BMS_MULTIPLE); + + /* + * Recurse down into clauses if the target relation is present in + * clause_relids or required_relids. We must check required_relids + * because the relation not present in clause_relids might still be + * present somewhere in orclause. + */ + if (bms_is_member(context->rt_index, rinfo->clause_relids) || + bms_is_member(context->rt_index, rinfo->required_relids)) + { + Relids new_clause_relids; + + ChangeVarNodesWalkExpression((Node *) rinfo->clause, context); + ChangeVarNodesWalkExpression((Node *) rinfo->orclause, context); + + new_clause_relids = adjust_relid_set(rinfo->clause_relids, + context->rt_index, + context->new_index); + + /* + * Incrementally adjust num_base_rels based on the change of + * clause_relids, which could contain both base relids and + * outer-join relids. This operation is legal until we remove + * only baserels. + */ + rinfo->num_base_rels -= bms_num_members(rinfo->clause_relids) - + bms_num_members(new_clause_relids); + + rinfo->clause_relids = new_clause_relids; + rinfo->left_relids = + adjust_relid_set(rinfo->left_relids, context->rt_index, context->new_index); + rinfo->right_relids = + adjust_relid_set(rinfo->right_relids, context->rt_index, context->new_index); + } + + if (is_req_equal) + rinfo->required_relids = rinfo->clause_relids; + else + rinfo->required_relids = + adjust_relid_set(rinfo->required_relids, context->rt_index, context->new_index); + + rinfo->outer_relids = + adjust_relid_set(rinfo->outer_relids, context->rt_index, context->new_index); + rinfo->incompatible_relids = + adjust_relid_set(rinfo->incompatible_relids, context->rt_index, context->new_index); + + if (rinfo->mergeopfamilies && + bms_get_singleton_member(rinfo->clause_relids, &relid) && + clause_relids_is_multiple && + relid == context->new_index && IsA(rinfo->clause, OpExpr)) + { + Expr *leftOp; + Expr *rightOp; + + leftOp = (Expr *) get_leftop(rinfo->clause); + rightOp = (Expr *) get_rightop(rinfo->clause); + + /* + * For self-join elimination, changing varnos could transform + * "t1.a = t2.a" into "t1.a = t1.a". That is always true as long + * as "t1.a" is not null. We use qual() to check for such a case, + * and then we replace the qual for a check for not null + * (NullTest). + */ + if (leftOp != NULL && equal(leftOp, rightOp)) + { + NullTest *ntest = makeNode(NullTest); + + ntest->arg = leftOp; + ntest->nulltesttype = IS_NOT_NULL; + ntest->argisrow = false; + ntest->location = -1; + rinfo->clause = (Expr *) ntest; + rinfo->mergeopfamilies = NIL; + rinfo->left_em = NULL; + rinfo->right_em = NULL; + } + Assert(rinfo->orclause == NULL); + } + return true; + } + + return false; +} + /* * Remove a relation after we have proven that it participates only in an * unneeded unique self-join. @@ -1701,7 +1845,8 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark, foreach_node(RestrictInfo, rinfo, joininfos) { remove_join_clause_from_rels(root, rinfo, rinfo->required_relids); - ChangeVarNodes((Node *) rinfo, toRemove->relid, toKeep->relid, 0); + ChangeVarNodesExtended((Node *) rinfo, toRemove->relid, toKeep->relid, + 0, replace_relid_callback); if (bms_membership(rinfo->required_relids) == BMS_MULTIPLE) jinfo_candidates = lappend(jinfo_candidates, rinfo); @@ -1719,7 +1864,8 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark, restrictlist); foreach_node(RestrictInfo, rinfo, toRemove->baserestrictinfo) { - ChangeVarNodes((Node *) rinfo, toRemove->relid, toKeep->relid, 0); + ChangeVarNodesExtended((Node *) rinfo, toRemove->relid, toKeep->relid, + 0, replace_relid_callback); if (bms_membership(rinfo->required_relids) == BMS_MULTIPLE) jinfo_candidates = lappend(jinfo_candidates, rinfo); @@ -1761,7 +1907,8 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark, { Node *node = lfirst(lc); - ChangeVarNodes(node, toRemove->relid, toKeep->relid, 0); + ChangeVarNodesExtended(node, toRemove->relid, toKeep->relid, 0, + replace_relid_callback); if (!list_member(toKeep->reltarget->exprs, node)) toKeep->reltarget->exprs = lappend(toKeep->reltarget->exprs, node); } @@ -1805,14 +1952,18 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark, * Replace varno in all the query structures, except nodes RangeTblRef * otherwise later remove_rel_from_joinlist will yield errors. */ - ChangeVarNodesExtended((Node *) root->parse, toRemove->relid, toKeep->relid, 0, false); + ChangeVarNodesExtended((Node *) root->parse, toRemove->relid, toKeep->relid, + 0, replace_relid_callback); /* Replace links in the planner info */ remove_rel_from_query(root, toRemove, toKeep->relid, NULL, NULL); /* At last, replace varno in root targetlist and HAVING clause */ - ChangeVarNodes((Node *) root->processed_tlist, toRemove->relid, toKeep->relid, 0); - ChangeVarNodes((Node *) root->processed_groupClause, toRemove->relid, toKeep->relid, 0); + ChangeVarNodesExtended((Node *) root->processed_tlist, toRemove->relid, + toKeep->relid, 0, replace_relid_callback); + ChangeVarNodesExtended((Node *) root->processed_groupClause, + toRemove->relid, toKeep->relid, 0, + replace_relid_callback); adjust_relid_set(root->all_result_relids, toRemove->relid, toKeep->relid); adjust_relid_set(root->leaf_result_relids, toRemove->relid, toKeep->relid); @@ -1828,10 +1979,12 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark, * remove_join_clause_from_rels will touch it.) */ root->simple_rel_array[toRemove->relid] = NULL; + root->simple_rte_array[toRemove->relid] = NULL; /* And nuke the RelOptInfo, just in case there's another access path. */ pfree(toRemove); + /* * Now repeat construction of attr_needed bits coming from all other * sources. @@ -1895,8 +2048,10 @@ split_selfjoin_quals(PlannerInfo *root, List *joinquals, List **selfjoinquals, * when we have cast of the same var to different (but compatible) * types. */ - ChangeVarNodes(rightexpr, bms_singleton_member(rinfo->right_relids), - bms_singleton_member(rinfo->left_relids), 0); + ChangeVarNodesExtended(rightexpr, + bms_singleton_member(rinfo->right_relids), + bms_singleton_member(rinfo->left_relids), 0, + replace_relid_callback); if (equal(leftexpr, rightexpr)) sjoinquals = lappend(sjoinquals, rinfo); @@ -1932,7 +2087,8 @@ match_unique_clauses(PlannerInfo *root, RelOptInfo *outer, List *uclauses, bms_is_empty(rinfo->right_relids)); clause = (Expr *) copyObject(rinfo->clause); - ChangeVarNodes((Node *) clause, relid, outer->relid, 0); + ChangeVarNodesExtended((Node *) clause, relid, outer->relid, 0, + replace_relid_callback); iclause = bms_is_empty(rinfo->left_relids) ? get_rightop(clause) : get_leftop(clause); @@ -1988,21 +2144,21 @@ remove_self_joins_one_group(PlannerInfo *root, Relids relids) while ((r = bms_next_member(relids, r)) > 0) { - RelOptInfo *inner = root->simple_rel_array[r]; + RelOptInfo *rrel = root->simple_rel_array[r]; k = r; while ((k = bms_next_member(relids, k)) > 0) { Relids joinrelids = NULL; - RelOptInfo *outer = root->simple_rel_array[k]; + RelOptInfo *krel = root->simple_rel_array[k]; List *restrictlist; List *selfjoinquals; List *otherjoinquals; ListCell *lc; bool jinfo_check = true; - PlanRowMark *omark = NULL; - PlanRowMark *imark = NULL; + PlanRowMark *kmark = NULL; + PlanRowMark *rmark = NULL; List *uclauses = NIL; /* A sanity check: the relations have the same Oid. */ @@ -2040,21 +2196,21 @@ remove_self_joins_one_group(PlannerInfo *root, Relids relids) { PlanRowMark *rowMark = (PlanRowMark *) lfirst(lc); - if (rowMark->rti == k) + if (rowMark->rti == r) { - Assert(imark == NULL); - imark = rowMark; + Assert(rmark == NULL); + rmark = rowMark; } - else if (rowMark->rti == r) + else if (rowMark->rti == k) { - Assert(omark == NULL); - omark = rowMark; + Assert(kmark == NULL); + kmark = rowMark; } - if (omark && imark) + if (kmark && rmark) break; } - if (omark && imark && omark->markType != imark->markType) + if (kmark && rmark && kmark->markType != rmark->markType) continue; /* @@ -2075,8 +2231,8 @@ remove_self_joins_one_group(PlannerInfo *root, Relids relids) * build_joinrel_restrictlist() routine. */ restrictlist = generate_join_implied_equalities(root, joinrelids, - inner->relids, - outer, NULL); + rrel->relids, + krel, NULL); if (restrictlist == NIL) continue; @@ -2086,7 +2242,7 @@ remove_self_joins_one_group(PlannerInfo *root, Relids relids) * otherjoinquals. */ split_selfjoin_quals(root, restrictlist, &selfjoinquals, - &otherjoinquals, inner->relid, outer->relid); + &otherjoinquals, rrel->relid, krel->relid); Assert(list_length(restrictlist) == (list_length(selfjoinquals) + list_length(otherjoinquals))); @@ -2097,17 +2253,17 @@ remove_self_joins_one_group(PlannerInfo *root, Relids relids) * degenerate case works only if both sides have the same clause. * So doesn't matter which side to add. */ - selfjoinquals = list_concat(selfjoinquals, outer->baserestrictinfo); + selfjoinquals = list_concat(selfjoinquals, krel->baserestrictinfo); /* - * Determine if the inner table can duplicate outer rows. We must - * bypass the unique rel cache here since we're possibly using a - * subset of join quals. We can use 'force_cache' == true when all - * join quals are self-join quals. Otherwise, we could end up - * putting false negatives in the cache. + * Determine if the rrel can duplicate outer rows. We must bypass + * the unique rel cache here since we're possibly using a subset + * of join quals. We can use 'force_cache' == true when all join + * quals are self-join quals. Otherwise, we could end up putting + * false negatives in the cache. */ - if (!innerrel_is_unique_ext(root, joinrelids, inner->relids, - outer, JOIN_INNER, selfjoinquals, + if (!innerrel_is_unique_ext(root, joinrelids, rrel->relids, + krel, JOIN_INNER, selfjoinquals, list_length(otherjoinquals) == 0, &uclauses)) continue; @@ -2123,14 +2279,14 @@ remove_self_joins_one_group(PlannerInfo *root, Relids relids) * expressions, or we won't match the same row on each side of the * join. */ - if (!match_unique_clauses(root, inner, uclauses, outer->relid)) + if (!match_unique_clauses(root, rrel, uclauses, krel->relid)) continue; /* - * We can remove either relation, so remove the inner one in order - * to simplify this loop. + * Remove rrel ReloptInfo from the planner structures and the + * corresponding row mark. */ - remove_self_join_rel(root, omark, imark, outer, inner, restrictlist); + remove_self_join_rel(root, kmark, rmark, krel, rrel, restrictlist); result = bms_add_member(result, r); diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 75e2b0b903600..6791cbeb416ed 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -95,8 +95,6 @@ static Material *create_material_plan(PlannerInfo *root, MaterialPath *best_path int flags); static Memoize *create_memoize_plan(PlannerInfo *root, MemoizePath *best_path, int flags); -static Plan *create_unique_plan(PlannerInfo *root, UniquePath *best_path, - int flags); static Gather *create_gather_plan(PlannerInfo *root, GatherPath *best_path); static Plan *create_projection_plan(PlannerInfo *root, ProjectionPath *best_path, @@ -106,8 +104,7 @@ static Sort *create_sort_plan(PlannerInfo *root, SortPath *best_path, int flags) static IncrementalSort *create_incrementalsort_plan(PlannerInfo *root, IncrementalSortPath *best_path, int flags); static Group *create_group_plan(PlannerInfo *root, GroupPath *best_path); -static Unique *create_upper_unique_plan(PlannerInfo *root, UpperUniquePath *best_path, - int flags); +static Unique *create_unique_plan(PlannerInfo *root, UniquePath *best_path, int flags); static Agg *create_agg_plan(PlannerInfo *root, AggPath *best_path); static Plan *create_groupingsets_plan(PlannerInfo *root, GroupingSetsPath *best_path); static Result *create_minmaxagg_plan(PlannerInfo *root, MinMaxAggPath *best_path); @@ -284,7 +281,10 @@ static Material *make_material(Plan *lefttree); static Memoize *make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, List *param_exprs, bool singlerow, bool binary_mode, - uint32 est_entries, Bitmapset *keyparamids); + uint32 est_entries, Bitmapset *keyparamids, + Cardinality est_calls, + Cardinality est_unique_keys, + double est_hit_ratio); static WindowAgg *make_windowagg(List *tlist, WindowClause *wc, int partNumCols, AttrNumber *partColIdx, Oid *partOperators, Oid *partCollations, int ordNumCols, AttrNumber *ordColIdx, Oid *ordOperators, Oid *ordCollations, @@ -293,9 +293,9 @@ static WindowAgg *make_windowagg(List *tlist, WindowClause *wc, static Group *make_group(List *tlist, List *qual, int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators, Oid *grpCollations, Plan *lefttree); -static Unique *make_unique_from_sortclauses(Plan *lefttree, List *distinctList); static Unique *make_unique_from_pathkeys(Plan *lefttree, - List *pathkeys, int numCols); + List *pathkeys, int numCols, + Relids relids); static Gather *make_gather(List *qptlist, List *qpqual, int nworkers, int rescan_param, bool single_copy, Plan *subplan); static SetOp *make_setop(SetOpCmd cmd, SetOpStrategy strategy, @@ -467,19 +467,9 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags) flags); break; case T_Unique: - if (IsA(best_path, UpperUniquePath)) - { - plan = (Plan *) create_upper_unique_plan(root, - (UpperUniquePath *) best_path, - flags); - } - else - { - Assert(IsA(best_path, UniquePath)); - plan = create_unique_plan(root, - (UniquePath *) best_path, - flags); - } + plan = (Plan *) create_unique_plan(root, + (UniquePath *) best_path, + flags); break; case T_Gather: plan = (Plan *) create_gather_plan(root, @@ -1318,6 +1308,7 @@ create_append_plan(PlannerInfo *root, AppendPath *best_path, int flags) Oid *sortOperators; Oid *collations; bool *nullsFirst; + int presorted_keys; /* * Compute sort column info, and adjust subplan's tlist as needed. @@ -1353,14 +1344,38 @@ create_append_plan(PlannerInfo *root, AppendPath *best_path, int flags) numsortkeys * sizeof(bool)) == 0); /* Now, insert a Sort node if subplan isn't sufficiently ordered */ - if (!pathkeys_contained_in(pathkeys, subpath->pathkeys)) + if (!pathkeys_count_contained_in(pathkeys, subpath->pathkeys, + &presorted_keys)) { - Sort *sort = make_sort(subplan, numsortkeys, + Plan *sort_plan; + + /* + * We choose to use incremental sort if it is enabled and + * there are presorted keys; otherwise we use full sort. + */ + if (enable_incremental_sort && presorted_keys > 0) + { + sort_plan = (Plan *) + make_incrementalsort(subplan, numsortkeys, presorted_keys, sortColIdx, sortOperators, collations, nullsFirst); - label_sort_with_costsize(root, sort, best_path->limit_tuples); - subplan = (Plan *) sort; + label_incrementalsort_with_costsize(root, + (IncrementalSort *) sort_plan, + pathkeys, + best_path->limit_tuples); + } + else + { + sort_plan = (Plan *) make_sort(subplan, numsortkeys, + sortColIdx, sortOperators, + collations, nullsFirst); + + label_sort_with_costsize(root, (Sort *) sort_plan, + best_path->limit_tuples); + } + + subplan = sort_plan; } } @@ -1491,6 +1506,7 @@ create_merge_append_plan(PlannerInfo *root, MergeAppendPath *best_path, Oid *sortOperators; Oid *collations; bool *nullsFirst; + int presorted_keys; /* Build the child plan */ /* Must insist that all children return the same tlist */ @@ -1525,14 +1541,38 @@ create_merge_append_plan(PlannerInfo *root, MergeAppendPath *best_path, numsortkeys * sizeof(bool)) == 0); /* Now, insert a Sort node if subplan isn't sufficiently ordered */ - if (!pathkeys_contained_in(pathkeys, subpath->pathkeys)) + if (!pathkeys_count_contained_in(pathkeys, subpath->pathkeys, + &presorted_keys)) { - Sort *sort = make_sort(subplan, numsortkeys, + Plan *sort_plan; + + /* + * We choose to use incremental sort if it is enabled and there + * are presorted keys; otherwise we use full sort. + */ + if (enable_incremental_sort && presorted_keys > 0) + { + sort_plan = (Plan *) + make_incrementalsort(subplan, numsortkeys, presorted_keys, sortColIdx, sortOperators, collations, nullsFirst); - label_sort_with_costsize(root, sort, best_path->limit_tuples); - subplan = (Plan *) sort; + label_incrementalsort_with_costsize(root, + (IncrementalSort *) sort_plan, + pathkeys, + best_path->limit_tuples); + } + else + { + sort_plan = (Plan *) make_sort(subplan, numsortkeys, + sortColIdx, sortOperators, + collations, nullsFirst); + + label_sort_with_costsize(root, (Sort *) sort_plan, + best_path->limit_tuples); + } + + subplan = sort_plan; } subplans = lappend(subplans, subplan); @@ -1703,214 +1743,14 @@ create_memoize_plan(PlannerInfo *root, MemoizePath *best_path, int flags) plan = make_memoize(subplan, operators, collations, param_exprs, best_path->singlerow, best_path->binary_mode, - best_path->est_entries, keyparamids); + best_path->est_entries, keyparamids, best_path->est_calls, + best_path->est_unique_keys, best_path->est_hit_ratio); copy_generic_path_info(&plan->plan, (Path *) best_path); return plan; } -/* - * create_unique_plan - * Create a Unique plan for 'best_path' and (recursively) plans - * for its subpaths. - * - * Returns a Plan node. - */ -static Plan * -create_unique_plan(PlannerInfo *root, UniquePath *best_path, int flags) -{ - Plan *plan; - Plan *subplan; - List *in_operators; - List *uniq_exprs; - List *newtlist; - int nextresno; - bool newitems; - int numGroupCols; - AttrNumber *groupColIdx; - Oid *groupCollations; - int groupColPos; - ListCell *l; - - /* Unique doesn't project, so tlist requirements pass through */ - subplan = create_plan_recurse(root, best_path->subpath, flags); - - /* Done if we don't need to do any actual unique-ifying */ - if (best_path->umethod == UNIQUE_PATH_NOOP) - return subplan; - - /* - * As constructed, the subplan has a "flat" tlist containing just the Vars - * needed here and at upper levels. The values we are supposed to - * unique-ify may be expressions in these variables. We have to add any - * such expressions to the subplan's tlist. - * - * The subplan may have a "physical" tlist if it is a simple scan plan. If - * we're going to sort, this should be reduced to the regular tlist, so - * that we don't sort more data than we need to. For hashing, the tlist - * should be left as-is if we don't need to add any expressions; but if we - * do have to add expressions, then a projection step will be needed at - * runtime anyway, so we may as well remove unneeded items. Therefore - * newtlist starts from build_path_tlist() not just a copy of the - * subplan's tlist; and we don't install it into the subplan unless we are - * sorting or stuff has to be added. - */ - in_operators = best_path->in_operators; - uniq_exprs = best_path->uniq_exprs; - - /* initialize modified subplan tlist as just the "required" vars */ - newtlist = build_path_tlist(root, &best_path->path); - nextresno = list_length(newtlist) + 1; - newitems = false; - - foreach(l, uniq_exprs) - { - Expr *uniqexpr = lfirst(l); - TargetEntry *tle; - - tle = tlist_member(uniqexpr, newtlist); - if (!tle) - { - tle = makeTargetEntry((Expr *) uniqexpr, - nextresno, - NULL, - false); - newtlist = lappend(newtlist, tle); - nextresno++; - newitems = true; - } - } - - /* Use change_plan_targetlist in case we need to insert a Result node */ - if (newitems || best_path->umethod == UNIQUE_PATH_SORT) - subplan = change_plan_targetlist(subplan, newtlist, - best_path->path.parallel_safe); - - /* - * Build control information showing which subplan output columns are to - * be examined by the grouping step. Unfortunately we can't merge this - * with the previous loop, since we didn't then know which version of the - * subplan tlist we'd end up using. - */ - newtlist = subplan->targetlist; - numGroupCols = list_length(uniq_exprs); - groupColIdx = (AttrNumber *) palloc(numGroupCols * sizeof(AttrNumber)); - groupCollations = (Oid *) palloc(numGroupCols * sizeof(Oid)); - - groupColPos = 0; - foreach(l, uniq_exprs) - { - Expr *uniqexpr = lfirst(l); - TargetEntry *tle; - - tle = tlist_member(uniqexpr, newtlist); - if (!tle) /* shouldn't happen */ - elog(ERROR, "failed to find unique expression in subplan tlist"); - groupColIdx[groupColPos] = tle->resno; - groupCollations[groupColPos] = exprCollation((Node *) tle->expr); - groupColPos++; - } - - if (best_path->umethod == UNIQUE_PATH_HASH) - { - Oid *groupOperators; - - /* - * Get the hashable equality operators for the Agg node to use. - * Normally these are the same as the IN clause operators, but if - * those are cross-type operators then the equality operators are the - * ones for the IN clause operators' RHS datatype. - */ - groupOperators = (Oid *) palloc(numGroupCols * sizeof(Oid)); - groupColPos = 0; - foreach(l, in_operators) - { - Oid in_oper = lfirst_oid(l); - Oid eq_oper; - - if (!get_compatible_hash_operators(in_oper, NULL, &eq_oper)) - elog(ERROR, "could not find compatible hash operator for operator %u", - in_oper); - groupOperators[groupColPos++] = eq_oper; - } - - /* - * Since the Agg node is going to project anyway, we can give it the - * minimum output tlist, without any stuff we might have added to the - * subplan tlist. - */ - plan = (Plan *) make_agg(build_path_tlist(root, &best_path->path), - NIL, - AGG_HASHED, - AGGSPLIT_SIMPLE, - numGroupCols, - groupColIdx, - groupOperators, - groupCollations, - NIL, - NIL, - best_path->path.rows, - 0, - subplan); - } - else - { - List *sortList = NIL; - Sort *sort; - - /* Create an ORDER BY list to sort the input compatibly */ - groupColPos = 0; - foreach(l, in_operators) - { - Oid in_oper = lfirst_oid(l); - Oid sortop; - Oid eqop; - TargetEntry *tle; - SortGroupClause *sortcl; - - sortop = get_ordering_op_for_equality_op(in_oper, false); - if (!OidIsValid(sortop)) /* shouldn't happen */ - elog(ERROR, "could not find ordering operator for equality operator %u", - in_oper); - - /* - * The Unique node will need equality operators. Normally these - * are the same as the IN clause operators, but if those are - * cross-type operators then the equality operators are the ones - * for the IN clause operators' RHS datatype. - */ - eqop = get_equality_op_for_ordering_op(sortop, NULL); - if (!OidIsValid(eqop)) /* shouldn't happen */ - elog(ERROR, "could not find equality operator for ordering operator %u", - sortop); - - tle = get_tle_by_resno(subplan->targetlist, - groupColIdx[groupColPos]); - Assert(tle != NULL); - - sortcl = makeNode(SortGroupClause); - sortcl->tleSortGroupRef = assignSortGroupRef(tle, - subplan->targetlist); - sortcl->eqop = eqop; - sortcl->sortop = sortop; - sortcl->reverse_sort = false; - sortcl->nulls_first = false; - sortcl->hashable = false; /* no need to make this accurate */ - sortList = lappend(sortList, sortcl); - groupColPos++; - } - sort = make_sort_from_sortclauses(sortList, subplan); - label_sort_with_costsize(root, sort, -1.0); - plan = (Plan *) make_unique_from_sortclauses((Plan *) sort, sortList); - } - - /* Copy cost data from Path to Plan */ - copy_generic_path_info(plan, &best_path->path); - - return plan; -} - /* * create_gather_plan * @@ -2268,13 +2108,13 @@ create_group_plan(PlannerInfo *root, GroupPath *best_path) } /* - * create_upper_unique_plan + * create_unique_plan * * Create a Unique plan for 'best_path' and (recursively) plans * for its subpaths. */ static Unique * -create_upper_unique_plan(PlannerInfo *root, UpperUniquePath *best_path, int flags) +create_unique_plan(PlannerInfo *root, UniquePath *best_path, int flags) { Unique *plan; Plan *subplan; @@ -2286,9 +2126,17 @@ create_upper_unique_plan(PlannerInfo *root, UpperUniquePath *best_path, int flag subplan = create_plan_recurse(root, best_path->subpath, flags | CP_LABEL_TLIST); + /* + * make_unique_from_pathkeys calls find_ec_member_matching_expr, which + * will ignore any child EC members that don't belong to the given relids. + * Thus, if this unique path is based on a child relation, we must pass + * its relids. + */ plan = make_unique_from_pathkeys(subplan, best_path->path.pathkeys, - best_path->numkeys); + best_path->numkeys, + IS_OTHER_REL(best_path->path.parent) ? + best_path->path.parent->relids : NULL); copy_generic_path_info(&plan->plan, (Path *) best_path); @@ -3129,13 +2977,13 @@ create_indexscan_plan(PlannerInfo *root, Oid sortop; /* Get sort operator from opfamily */ - sortop = get_opfamily_member(pathkey->pk_opfamily, - exprtype, - exprtype, - pathkey->pk_strategy); + sortop = get_opfamily_member_for_cmptype(pathkey->pk_opfamily, + exprtype, + exprtype, + pathkey->pk_cmptype); if (!OidIsValid(sortop)) elog(ERROR, "missing operator %d(%u,%u) in opfamily %u", - pathkey->pk_strategy, exprtype, exprtype, pathkey->pk_opfamily); + pathkey->pk_cmptype, exprtype, exprtype, pathkey->pk_opfamily); indexorderbyops = lappend_oid(indexorderbyops, sortop); } } @@ -4344,13 +4192,16 @@ create_nestloop_plan(PlannerInfo *root, NestLoop *join_plan; Plan *outer_plan; Plan *inner_plan; + Relids outerrelids; List *tlist = build_path_tlist(root, &best_path->jpath.path); List *joinrestrictclauses = best_path->jpath.joinrestrictinfo; List *joinclauses; List *otherclauses; - Relids outerrelids; List *nestParams; + List *outer_tlist; + bool outer_parallel_safe; Relids saveOuterRels = root->curOuterRels; + ListCell *lc; /* * If the inner path is parameterized by the topmost parent of the outer @@ -4372,8 +4223,8 @@ create_nestloop_plan(PlannerInfo *root, outer_plan = create_plan_recurse(root, best_path->jpath.outerjoinpath, 0); /* For a nestloop, include outer relids in curOuterRels for inner side */ - root->curOuterRels = bms_union(root->curOuterRels, - best_path->jpath.outerjoinpath->parent->relids); + outerrelids = best_path->jpath.outerjoinpath->parent->relids; + root->curOuterRels = bms_union(root->curOuterRels, outerrelids); inner_plan = create_plan_recurse(root, best_path->jpath.innerjoinpath, 0); @@ -4412,9 +4263,66 @@ create_nestloop_plan(PlannerInfo *root, * Identify any nestloop parameters that should be supplied by this join * node, and remove them from root->curOuterParams. */ - outerrelids = best_path->jpath.outerjoinpath->parent->relids; - nestParams = identify_current_nestloop_params(root, outerrelids); + nestParams = identify_current_nestloop_params(root, + outerrelids, + PATH_REQ_OUTER((Path *) best_path)); + + /* + * While nestloop parameters that are Vars had better be available from + * the outer_plan already, there are edge cases where nestloop parameters + * that are PHVs won't be. In such cases we must add them to the + * outer_plan's tlist, since the executor's NestLoopParam machinery + * requires the params to be simple outer-Var references to that tlist. + * (This is cheating a little bit, because the outer path's required-outer + * relids might not be enough to allow evaluating such a PHV. But in + * practice, if we could have evaluated the PHV at the nestloop node, we + * can do so in the outer plan too.) + */ + outer_tlist = outer_plan->targetlist; + outer_parallel_safe = outer_plan->parallel_safe; + foreach(lc, nestParams) + { + NestLoopParam *nlp = (NestLoopParam *) lfirst(lc); + PlaceHolderVar *phv; + TargetEntry *tle; + + if (IsA(nlp->paramval, Var)) + continue; /* nothing to do for simple Vars */ + /* Otherwise it must be a PHV */ + phv = castNode(PlaceHolderVar, nlp->paramval); + + if (tlist_member((Expr *) phv, outer_tlist)) + continue; /* already available */ + /* + * It's possible that nestloop parameter PHVs selected to evaluate + * here contain references to surviving root->curOuterParams items + * (that is, they reference values that will be supplied by some + * higher-level nestloop). Those need to be converted to Params now. + * Note: it's safe to do this after the tlist_member() check, because + * equal() won't pay attention to phv->phexpr. + */ + phv->phexpr = (Expr *) replace_nestloop_params(root, + (Node *) phv->phexpr); + + /* Make a shallow copy of outer_tlist, if we didn't already */ + if (outer_tlist == outer_plan->targetlist) + outer_tlist = list_copy(outer_tlist); + /* ... and add the needed expression */ + tle = makeTargetEntry((Expr *) copyObject(phv), + list_length(outer_tlist) + 1, + NULL, + true); + outer_tlist = lappend(outer_tlist, tle); + /* ... and track whether tlist is (still) parallel-safe */ + if (outer_parallel_safe) + outer_parallel_safe = is_parallel_safe(root, (Node *) phv); + } + if (outer_tlist != outer_plan->targetlist) + outer_plan = change_plan_targetlist(outer_plan, outer_tlist, + outer_parallel_safe); + + /* And finally, we can build the join plan node */ join_plan = make_nestloop(tlist, joinclauses, otherclauses, @@ -4521,48 +4429,41 @@ create_mergejoin_plan(PlannerInfo *root, { Relids outer_relids = outer_path->parent->relids; Plan *sort_plan; - bool use_incremental_sort = false; - int presorted_keys; + + /* + * We can assert that the outer path is not already ordered + * appropriately for the mergejoin; otherwise, outersortkeys would + * have been set to NIL. + */ + Assert(!pathkeys_contained_in(best_path->outersortkeys, + outer_path->pathkeys)); /* * We choose to use incremental sort if it is enabled and there are * presorted keys; otherwise we use full sort. */ - if (enable_incremental_sort) - { - bool is_sorted PG_USED_FOR_ASSERTS_ONLY; - - is_sorted = pathkeys_count_contained_in(best_path->outersortkeys, - outer_path->pathkeys, - &presorted_keys); - Assert(!is_sorted); - - if (presorted_keys > 0) - use_incremental_sort = true; - } - - if (!use_incremental_sort) - { - sort_plan = (Plan *) - make_sort_from_pathkeys(outer_plan, - best_path->outersortkeys, - outer_relids); - - label_sort_with_costsize(root, (Sort *) sort_plan, -1.0); - } - else + if (enable_incremental_sort && best_path->outer_presorted_keys > 0) { sort_plan = (Plan *) make_incrementalsort_from_pathkeys(outer_plan, best_path->outersortkeys, outer_relids, - presorted_keys); + best_path->outer_presorted_keys); label_incrementalsort_with_costsize(root, (IncrementalSort *) sort_plan, best_path->outersortkeys, -1.0); } + else + { + sort_plan = (Plan *) + make_sort_from_pathkeys(outer_plan, + best_path->outersortkeys, + outer_relids); + + label_sort_with_costsize(root, (Sort *) sort_plan, -1.0); + } outer_plan = sort_plan; outerpathkeys = best_path->outersortkeys; @@ -4578,9 +4479,19 @@ create_mergejoin_plan(PlannerInfo *root, */ Relids inner_relids = inner_path->parent->relids; - Sort *sort = make_sort_from_pathkeys(inner_plan, - best_path->innersortkeys, - inner_relids); + Sort *sort; + + /* + * We can assert that the inner path is not already ordered + * appropriately for the mergejoin; otherwise, innersortkeys would + * have been set to NIL. + */ + Assert(!pathkeys_contained_in(best_path->innersortkeys, + inner_path->pathkeys)); + + sort = make_sort_from_pathkeys(inner_plan, + best_path->innersortkeys, + inner_relids); label_sort_with_costsize(root, sort, -1.0); inner_plan = (Plan *) sort; @@ -4739,14 +4650,14 @@ create_mergejoin_plan(PlannerInfo *root, opathkey->pk_eclass->ec_collation != ipathkey->pk_eclass->ec_collation) elog(ERROR, "left and right pathkeys do not match in mergejoin"); if (first_inner_match && - (opathkey->pk_strategy != ipathkey->pk_strategy || + (opathkey->pk_cmptype != ipathkey->pk_cmptype || opathkey->pk_nulls_first != ipathkey->pk_nulls_first)) elog(ERROR, "left and right pathkeys do not match in mergejoin"); /* OK, save info for executor */ mergefamilies[i] = opathkey->pk_opfamily; mergecollations[i] = opathkey->pk_eclass->ec_collation; - mergereversals[i] = (opathkey->pk_strategy == BTGreaterStrategyNumber ? true : false); + mergereversals[i] = (opathkey->pk_cmptype == COMPARE_GT ? true : false); mergenullsfirst[i] = opathkey->pk_nulls_first; i++; } @@ -6374,13 +6285,13 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, * Look up the correct sort operator from the PathKey's slightly * abstracted representation. */ - sortop = get_opfamily_member(pathkey->pk_opfamily, - pk_datatype, - pk_datatype, - pathkey->pk_strategy); + sortop = get_opfamily_member_for_cmptype(pathkey->pk_opfamily, + pk_datatype, + pk_datatype, + pathkey->pk_cmptype); if (!OidIsValid(sortop)) /* should not happen */ elog(ERROR, "missing operator %d(%u,%u) in opfamily %u", - pathkey->pk_strategy, pk_datatype, pk_datatype, + pathkey->pk_cmptype, pk_datatype, pk_datatype, pathkey->pk_opfamily); /* Add the column to the sort arrays */ @@ -6636,7 +6547,9 @@ materialize_finished_plan(Plan *subplan) static Memoize * make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, List *param_exprs, bool singlerow, bool binary_mode, - uint32 est_entries, Bitmapset *keyparamids) + uint32 est_entries, Bitmapset *keyparamids, + Cardinality est_calls, Cardinality est_unique_keys, + double est_hit_ratio) { Memoize *node = makeNode(Memoize); Plan *plan = &node->plan; @@ -6654,6 +6567,9 @@ make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, node->binary_mode = binary_mode; node->est_entries = est_entries; node->keyparamids = keyparamids; + node->est_calls = est_calls; + node->est_unique_keys = est_unique_keys; + node->est_hit_ratio = est_hit_ratio; return node; } @@ -6758,61 +6674,14 @@ make_group(List *tlist, } /* - * distinctList is a list of SortGroupClauses, identifying the targetlist items - * that should be considered by the Unique filter. The input path must - * already be sorted accordingly. - */ -static Unique * -make_unique_from_sortclauses(Plan *lefttree, List *distinctList) -{ - Unique *node = makeNode(Unique); - Plan *plan = &node->plan; - int numCols = list_length(distinctList); - int keyno = 0; - AttrNumber *uniqColIdx; - Oid *uniqOperators; - Oid *uniqCollations; - ListCell *slitem; - - plan->targetlist = lefttree->targetlist; - plan->qual = NIL; - plan->lefttree = lefttree; - plan->righttree = NULL; - - /* - * convert SortGroupClause list into arrays of attr indexes and equality - * operators, as wanted by executor - */ - Assert(numCols > 0); - uniqColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); - uniqOperators = (Oid *) palloc(sizeof(Oid) * numCols); - uniqCollations = (Oid *) palloc(sizeof(Oid) * numCols); - - foreach(slitem, distinctList) - { - SortGroupClause *sortcl = (SortGroupClause *) lfirst(slitem); - TargetEntry *tle = get_sortgroupclause_tle(sortcl, plan->targetlist); - - uniqColIdx[keyno] = tle->resno; - uniqOperators[keyno] = sortcl->eqop; - uniqCollations[keyno] = exprCollation((Node *) tle->expr); - Assert(OidIsValid(uniqOperators[keyno])); - keyno++; - } - - node->numCols = numCols; - node->uniqColIdx = uniqColIdx; - node->uniqOperators = uniqOperators; - node->uniqCollations = uniqCollations; - - return node; -} - -/* - * as above, but use pathkeys to identify the sort columns and semantics + * pathkeys is a list of PathKeys, identifying the sort columns and semantics. + * The input plan must already be sorted accordingly. + * + * relids identifies the child relation being unique-ified, if any. */ static Unique * -make_unique_from_pathkeys(Plan *lefttree, List *pathkeys, int numCols) +make_unique_from_pathkeys(Plan *lefttree, List *pathkeys, int numCols, + Relids relids) { Unique *node = makeNode(Unique); Plan *plan = &node->plan; @@ -6875,7 +6744,7 @@ make_unique_from_pathkeys(Plan *lefttree, List *pathkeys, int numCols) foreach(j, plan->targetlist) { tle = (TargetEntry *) lfirst(j); - em = find_ec_member_matching_expr(ec, tle->expr, NULL); + em = find_ec_member_matching_expr(ec, tle->expr, relids); if (em) { /* found expr already in tlist */ @@ -6893,13 +6762,13 @@ make_unique_from_pathkeys(Plan *lefttree, List *pathkeys, int numCols) * Look up the correct equality operator from the PathKey's slightly * abstracted representation. */ - eqop = get_opfamily_member(pathkey->pk_opfamily, - pk_datatype, - pk_datatype, - BTEqualStrategyNumber); + eqop = get_opfamily_member_for_cmptype(pathkey->pk_opfamily, + pk_datatype, + pk_datatype, + COMPARE_EQ); if (!OidIsValid(eqop)) /* should not happen */ elog(ERROR, "missing operator %d(%u,%u) in opfamily %u", - BTEqualStrategyNumber, pk_datatype, pk_datatype, + COMPARE_EQ, pk_datatype, pk_datatype, pathkey->pk_opfamily); uniqColIdx[keyno] = tle->resno; @@ -7111,6 +6980,8 @@ make_modifytable(PlannerInfo *root, Plan *subplan, ModifyTable *node = makeNode(ModifyTable); bool returning_old_or_new = false; bool returning_old_or_new_valid = false; + bool transition_tables = false; + bool transition_tables_valid = false; List *fdw_private_list; Bitmapset *direct_modify_plans; ListCell *lc; @@ -7257,8 +7128,8 @@ make_modifytable(PlannerInfo *root, Plan *subplan, * callback functions needed for that and (2) there are no local * structures that need to be run for each modified row: row-level * triggers on the foreign table, stored generated columns, WITH CHECK - * OPTIONs from parent views, or Vars returning OLD/NEW in the - * RETURNING list. + * OPTIONs from parent views, Vars returning OLD/NEW in the RETURNING + * list, or transition tables on the named relation. */ direct_modify = false; if (fdwroutine != NULL && @@ -7270,7 +7141,10 @@ make_modifytable(PlannerInfo *root, Plan *subplan, !has_row_triggers(root, rti, operation) && !has_stored_generated_columns(root, rti)) { - /* returning_old_or_new is the same for all result relations */ + /* + * returning_old_or_new and transition_tables are the same for all + * result relations, respectively + */ if (!returning_old_or_new_valid) { returning_old_or_new = @@ -7279,7 +7153,18 @@ make_modifytable(PlannerInfo *root, Plan *subplan, returning_old_or_new_valid = true; } if (!returning_old_or_new) - direct_modify = fdwroutine->PlanDirectModify(root, node, rti, i); + { + if (!transition_tables_valid) + { + transition_tables = has_transition_tables(root, + nominalRelation, + operation); + transition_tables_valid = true; + } + if (!transition_tables) + direct_modify = fdwroutine->PlanDirectModify(root, node, + rti, i); + } } if (direct_modify) direct_modify_plans = bms_add_member(direct_modify_plans, i); diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 1d1aa27d45064..3e3fec8925291 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -3048,36 +3048,16 @@ add_base_clause_to_rel(PlannerInfo *root, Index relid, * expr_is_nonnullable * Check to see if the Expr cannot be NULL * - * If the Expr is a simple Var that is defined NOT NULL and meanwhile is not - * nulled by any outer joins, then we can know that it cannot be NULL. + * Currently we only support simple Vars. */ static bool expr_is_nonnullable(PlannerInfo *root, Expr *expr) { - RelOptInfo *rel; - Var *var; - /* For now only check simple Vars */ if (!IsA(expr, Var)) return false; - var = (Var *) expr; - - /* could the Var be nulled by any outer joins? */ - if (!bms_is_empty(var->varnullingrels)) - return false; - - /* system columns cannot be NULL */ - if (var->varattno < 0) - return true; - - /* is the column defined NOT NULL? */ - rel = find_base_rel(root, var->varno); - if (var->varattno > 0 && - bms_is_member(var->varattno, rel->notnullattnums)) - return true; - - return false; + return var_is_nonnullable(root, (Var *) expr, true); } /* @@ -3109,6 +3089,13 @@ restriction_is_always_true(PlannerInfo *root, if (nulltest->nulltesttype != IS_NOT_NULL) return false; + /* + * Empty rows can appear NULL in some contexts and NOT NULL in others, + * so avoid this optimization for row expressions. + */ + if (nulltest->argisrow) + return false; + return expr_is_nonnullable(root, nulltest->arg); } @@ -3167,6 +3154,13 @@ restriction_is_always_false(PlannerInfo *root, if (nulltest->nulltesttype != IS_NULL) return false; + /* + * Empty rows can appear NULL in some contexts and NOT NULL in others, + * so avoid this optimization for row expressions. + */ + if (nulltest->argisrow) + return false; + return expr_is_nonnullable(root, nulltest->arg); } diff --git a/src/backend/optimizer/plan/planagg.c b/src/backend/optimizer/plan/planagg.c index 64605be31781f..2ef0bb7f66365 100644 --- a/src/backend/optimizer/plan/planagg.c +++ b/src/backend/optimizer/plan/planagg.c @@ -410,7 +410,7 @@ build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, parse->limitCount = (Node *) makeConst(INT8OID, -1, InvalidOid, sizeof(int64), Int64GetDatum(1), false, - FLOAT8PASSBYVAL); + true); /* * Generate the best paths for this query, telling query_planner that we diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 566ce5b3cb40f..41bd8353430df 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -58,6 +58,7 @@ #include "parser/parsetree.h" #include "partitioning/partdesc.h" #include "rewrite/rewriteManip.h" +#include "utils/acl.h" #include "utils/backend_status.h" #include "utils/lsyscache.h" #include "utils/rel.h" @@ -267,6 +268,12 @@ static bool group_by_has_partkey(RelOptInfo *input_rel, static int common_prefix_cmp(const void *a, const void *b); static List *generate_setop_child_grouplist(SetOperationStmt *op, List *targetlist); +static void create_final_unique_paths(PlannerInfo *root, RelOptInfo *input_rel, + List *sortPathkeys, List *groupClause, + SpecialJoinInfo *sjinfo, RelOptInfo *unique_rel); +static void create_partial_unique_paths(PlannerInfo *root, RelOptInfo *input_rel, + List *sortPathkeys, List *groupClause, + SpecialJoinInfo *sjinfo, RelOptInfo *unique_rel); /***************************************************************************** @@ -326,10 +333,13 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, glob->subroots = NIL; glob->rewindPlanIDs = NULL; glob->finalrtable = NIL; + glob->allRelids = NULL; + glob->prunableRelids = NULL; glob->finalrteperminfos = NIL; glob->finalrowmarks = NIL; glob->resultRelations = NIL; glob->appendRelations = NIL; + glob->partPruneInfos = NIL; glob->relationOids = NIL; glob->invalItems = NIL; glob->paramExecTypes = NIL; @@ -338,6 +348,8 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, glob->lastPlanNodeId = 0; glob->transientPlan = false; glob->dependsOnRole = false; + glob->partition_directory = NULL; + glob->rel_notnullatts_hash = NULL; /* * Assess whether it's feasible to use parallel mode for this query. We @@ -553,6 +565,7 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, result->commandType = parse->commandType; result->queryId = parse->queryId; + result->planOrigin = PLAN_STMT_STANDARD; result->hasReturning = (parse->returningList != NIL); result->hasModifyingCTE = parse->hasModifyingCTE; result->canSetTag = parse->canSetTag; @@ -566,7 +579,6 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, glob->prunableRelids); result->permInfos = glob->finalrteperminfos; result->resultRelations = glob->resultRelations; - result->firstResultRels = glob->firstResultRels; result->appendRelations = glob->appendRelations; result->subplans = glob->subplans; result->rewindPlanIDs = glob->rewindPlanIDs; @@ -717,6 +729,18 @@ subquery_planner(PlannerGlobal *glob, Query *parse, PlannerInfo *parent_root, */ transform_MERGE_to_join(parse); + /* + * Scan the rangetable for relation RTEs and retrieve the necessary + * catalog information for each relation. Using this information, clear + * the inh flag for any relation that has no children, collect not-null + * attribute numbers for any relation that has column not-null + * constraints, and expand virtual generated columns for any relation that + * contains them. Note that this step does not descend into sublinks and + * subqueries; if we pull up any sublinks or subqueries below, their + * relation RTEs are processed just before pulling them up. + */ + parse = root->parse = preprocess_relation_rtes(root); + /* * If the FROM clause is empty, replace it with a dummy RTE_RESULT RTE, so * that we don't need so many special cases to deal with that situation. @@ -740,14 +764,6 @@ subquery_planner(PlannerGlobal *glob, Query *parse, PlannerInfo *parent_root, */ preprocess_function_rtes(root); - /* - * Scan the rangetable for relations with virtual generated columns, and - * replace all Var nodes in the query that reference these columns with - * the generation expressions. Recursion issues here are handled in the - * same way as for SubLinks. - */ - parse = root->parse = expand_virtual_generated_columns(root); - /* * Check to see if any subqueries in the jointree can be merged into this * query. @@ -784,23 +800,6 @@ subquery_planner(PlannerGlobal *glob, Query *parse, PlannerInfo *parent_root, switch (rte->rtekind) { - case RTE_RELATION: - if (rte->inh) - { - /* - * Check to see if the relation actually has any children; - * if not, clear the inh flag so we can treat it as a - * plain base relation. - * - * Note: this could give a false-positive result, if the - * rel once had children but no longer does. We used to - * be able to clear rte->inh later on when we discovered - * that, but no more; we have to handle such cases as - * full-fledged inheritance. - */ - rte->inh = has_subclass(rte->relid); - } - break; case RTE_JOIN: root->hasJoinRTEs = true; if (IS_OUTER_JOIN(rte->jointype)) @@ -845,6 +844,38 @@ subquery_planner(PlannerGlobal *glob, Query *parse, PlannerInfo *parent_root, bms_make_singleton(parse->resultRelation); } + /* + * This would be a convenient time to check access permissions for all + * relations mentioned in the query, since it would be better to fail now, + * before doing any detailed planning. However, for historical reasons, + * we leave this to be done at executor startup. + * + * Note, however, that we do need to check access permissions for any view + * relations mentioned in the query, in order to prevent information being + * leaked by selectivity estimation functions, which only check view owner + * permissions on underlying tables (see all_rows_selectable() and its + * callers). This is a little ugly, because it means that access + * permissions for views will be checked twice, which is another reason + * why it would be better to do all the ACL checks here. + */ + foreach(l, parse->rtable) + { + RangeTblEntry *rte = lfirst_node(RangeTblEntry, l); + + if (rte->perminfoindex != 0 && + rte->relkind == RELKIND_VIEW) + { + RTEPermissionInfo *perminfo; + bool result; + + perminfo = getRTEPermissionInfo(parse->rteperminfos, rte); + result = ExecCheckOneRelPerms(perminfo); + if (!result) + aclcheck_error(ACLCHECK_NO_PRIV, OBJECT_VIEW, + get_rel_name(perminfo->relid)); + } + } + /* * Preprocess RowMark information. We need to do this after subquery * pullup, so that all base relations are present. @@ -3201,10 +3232,53 @@ adjust_group_pathkeys_for_groupagg(PlannerInfo *root) if (AGGKIND_IS_ORDERED_SET(aggref->aggkind)) continue; - /* only add aggregates with a DISTINCT or ORDER BY */ - if (aggref->aggdistinct != NIL || aggref->aggorder != NIL) - unprocessed_aggs = bms_add_member(unprocessed_aggs, - foreach_current_index(lc)); + /* Skip unless there's a DISTINCT or ORDER BY clause */ + if (aggref->aggdistinct == NIL && aggref->aggorder == NIL) + continue; + + /* Additional safety checks are needed if there's a FILTER clause */ + if (aggref->aggfilter != NULL) + { + ListCell *lc2; + bool allow_presort = true; + + /* + * When the Aggref has a FILTER clause, it's possible that the + * filter removes rows that cannot be sorted because the + * expression to sort by results in an error during its + * evaluation. This is a problem for presorting as that happens + * before the FILTER, whereas without presorting, the Aggregate + * node will apply the FILTER *before* sorting. So that we never + * try to sort anything that might error, here we aim to skip over + * any Aggrefs with arguments with expressions which, when + * evaluated, could cause an ERROR. Vars and Consts are ok. There + * may be more cases that should be allowed, but more thought + * needs to be given. Err on the side of caution. + */ + foreach(lc2, aggref->args) + { + TargetEntry *tle = (TargetEntry *) lfirst(lc2); + Expr *expr = tle->expr; + + while (IsA(expr, RelabelType)) + expr = (Expr *) (castNode(RelabelType, expr))->arg; + + /* Common case, Vars and Consts are ok */ + if (IsA(expr, Var) || IsA(expr, Const)) + continue; + + /* Unsupported. Don't try to presort for this Aggref */ + allow_presort = false; + break; + } + + /* Skip unsupported Aggrefs */ + if (!allow_presort) + continue; + } + + unprocessed_aggs = bms_add_member(unprocessed_aggs, + foreach_current_index(lc)); } /* @@ -4847,7 +4921,7 @@ create_partial_distinct_paths(PlannerInfo *root, RelOptInfo *input_rel, limitCount = (Node *) makeConst(INT8OID, -1, InvalidOid, sizeof(int64), Int64GetDatum(1), false, - FLOAT8PASSBYVAL); + true); /* * Apply a LimitPath onto the partial path to restrict the @@ -4871,10 +4945,10 @@ create_partial_distinct_paths(PlannerInfo *root, RelOptInfo *input_rel, else { add_partial_path(partial_distinct_rel, (Path *) - create_upper_unique_path(root, partial_distinct_rel, - sorted_path, - list_length(root->distinct_pathkeys), - numDistinctRows)); + create_unique_path(root, partial_distinct_rel, + sorted_path, + list_length(root->distinct_pathkeys), + numDistinctRows)); } } } @@ -5050,7 +5124,7 @@ create_final_distinct_paths(PlannerInfo *root, RelOptInfo *input_rel, limitCount = (Node *) makeConst(INT8OID, -1, InvalidOid, sizeof(int64), Int64GetDatum(1), false, - FLOAT8PASSBYVAL); + true); /* * If the query already has a LIMIT clause, then we could @@ -5065,10 +5139,10 @@ create_final_distinct_paths(PlannerInfo *root, RelOptInfo *input_rel, else { add_path(distinct_rel, (Path *) - create_upper_unique_path(root, distinct_rel, - sorted_path, - list_length(root->distinct_pathkeys), - numDistinctRows)); + create_unique_path(root, distinct_rel, + sorted_path, + list_length(root->distinct_pathkeys), + numDistinctRows)); } } } @@ -6833,7 +6907,7 @@ plan_cluster_use_sort(Oid tableOid, Oid indexOid) * * tableOid is the table on which the index is to be built. indexOid is the * OID of an index to be created or reindexed (which must be an index with - * support for parallel builds - currently btree or BRIN). + * support for parallel builds - currently btree, GIN, or BRIN). * * Return value is the number of parallel worker processes to request. It * may be unsafe to proceed if this is 0. Note that this does not include the @@ -8202,3 +8276,560 @@ generate_setop_child_grouplist(SetOperationStmt *op, List *targetlist) return grouplist; } + +/* + * create_unique_paths + * Build a new RelOptInfo containing Paths that represent elimination of + * distinct rows from the input data. Distinct-ness is defined according to + * the needs of the semijoin represented by sjinfo. If it is not possible + * to identify how to make the data unique, NULL is returned. + * + * If used at all, this is likely to be called repeatedly on the same rel, + * so we cache the result. + */ +RelOptInfo * +create_unique_paths(PlannerInfo *root, RelOptInfo *rel, SpecialJoinInfo *sjinfo) +{ + RelOptInfo *unique_rel; + List *sortPathkeys = NIL; + List *groupClause = NIL; + MemoryContext oldcontext; + + /* Caller made a mistake if SpecialJoinInfo is the wrong one */ + Assert(sjinfo->jointype == JOIN_SEMI); + Assert(bms_equal(rel->relids, sjinfo->syn_righthand)); + + /* If result already cached, return it */ + if (rel->unique_rel) + return rel->unique_rel; + + /* If it's not possible to unique-ify, return NULL */ + if (!(sjinfo->semi_can_btree || sjinfo->semi_can_hash)) + return NULL; + + /* + * Punt if this is a child relation and we failed to build a unique-ified + * relation for its parent. This can happen if all the RHS columns were + * found to be equated to constants when unique-ifying the parent table, + * leaving no columns to unique-ify. + */ + if (IS_OTHER_REL(rel) && rel->top_parent->unique_rel == NULL) + return NULL; + + /* + * When called during GEQO join planning, we are in a short-lived memory + * context. We must make sure that the unique rel and any subsidiary data + * structures created for a baserel survive the GEQO cycle, else the + * baserel is trashed for future GEQO cycles. On the other hand, when we + * are creating those for a joinrel during GEQO, we don't want them to + * clutter the main planning context. Upshot is that the best solution is + * to explicitly allocate memory in the same context the given RelOptInfo + * is in. + */ + oldcontext = MemoryContextSwitchTo(GetMemoryChunkContext(rel)); + + unique_rel = makeNode(RelOptInfo); + memcpy(unique_rel, rel, sizeof(RelOptInfo)); + + /* + * clear path info + */ + unique_rel->pathlist = NIL; + unique_rel->ppilist = NIL; + unique_rel->partial_pathlist = NIL; + unique_rel->cheapest_startup_path = NULL; + unique_rel->cheapest_total_path = NULL; + unique_rel->cheapest_parameterized_paths = NIL; + + /* + * Build the target list for the unique rel. We also build the pathkeys + * that represent the ordering requirements for the sort-based + * implementation, and the list of SortGroupClause nodes that represent + * the columns to be grouped on for the hash-based implementation. + * + * For a child rel, we can construct these fields from those of its + * parent. + */ + if (IS_OTHER_REL(rel)) + { + PathTarget *child_unique_target; + PathTarget *parent_unique_target; + + parent_unique_target = rel->top_parent->unique_rel->reltarget; + + child_unique_target = copy_pathtarget(parent_unique_target); + + /* Translate the target expressions */ + child_unique_target->exprs = (List *) + adjust_appendrel_attrs_multilevel(root, + (Node *) parent_unique_target->exprs, + rel, + rel->top_parent); + + unique_rel->reltarget = child_unique_target; + + sortPathkeys = rel->top_parent->unique_pathkeys; + groupClause = rel->top_parent->unique_groupclause; + } + else + { + List *newtlist; + int nextresno; + List *sortList = NIL; + ListCell *lc1; + ListCell *lc2; + + /* + * The values we are supposed to unique-ify may be expressions in the + * variables of the input rel's targetlist. We have to add any such + * expressions to the unique rel's targetlist. + * + * To complicate matters, some of the values to be unique-ified may be + * known redundant by the EquivalenceClass machinery (e.g., because + * they have been equated to constants). There is no need to compare + * such values during unique-ification, and indeed we had better not + * try because the Vars involved may not have propagated as high as + * the semijoin's level. We use make_pathkeys_for_sortclauses to + * detect such cases, which is a tad inefficient but it doesn't seem + * worth building specialized infrastructure for this. + */ + newtlist = make_tlist_from_pathtarget(rel->reltarget); + nextresno = list_length(newtlist) + 1; + + forboth(lc1, sjinfo->semi_rhs_exprs, lc2, sjinfo->semi_operators) + { + Expr *uniqexpr = lfirst(lc1); + Oid in_oper = lfirst_oid(lc2); + Oid sortop; + TargetEntry *tle; + bool made_tle = false; + + tle = tlist_member(uniqexpr, newtlist); + if (!tle) + { + tle = makeTargetEntry((Expr *) uniqexpr, + nextresno, + NULL, + false); + newtlist = lappend(newtlist, tle); + nextresno++; + made_tle = true; + } + + /* + * Try to build an ORDER BY list to sort the input compatibly. We + * do this for each sortable clause even when the clauses are not + * all sortable, so that we can detect clauses that are redundant + * according to the pathkey machinery. + */ + sortop = get_ordering_op_for_equality_op(in_oper, false); + if (OidIsValid(sortop)) + { + Oid eqop; + SortGroupClause *sortcl; + + /* + * The Unique node will need equality operators. Normally + * these are the same as the IN clause operators, but if those + * are cross-type operators then the equality operators are + * the ones for the IN clause operators' RHS datatype. + */ + eqop = get_equality_op_for_ordering_op(sortop, NULL); + if (!OidIsValid(eqop)) /* shouldn't happen */ + elog(ERROR, "could not find equality operator for ordering operator %u", + sortop); + + sortcl = makeNode(SortGroupClause); + sortcl->tleSortGroupRef = assignSortGroupRef(tle, newtlist); + sortcl->eqop = eqop; + sortcl->sortop = sortop; + sortcl->reverse_sort = false; + sortcl->nulls_first = false; + sortcl->hashable = false; /* no need to make this accurate */ + sortList = lappend(sortList, sortcl); + + /* + * At each step, convert the SortGroupClause list to pathkey + * form. If the just-added SortGroupClause is redundant, the + * result will be shorter than the SortGroupClause list. + */ + sortPathkeys = make_pathkeys_for_sortclauses(root, sortList, + newtlist); + if (list_length(sortPathkeys) != list_length(sortList)) + { + /* Drop the redundant SortGroupClause */ + sortList = list_delete_last(sortList); + Assert(list_length(sortPathkeys) == list_length(sortList)); + /* Undo tlist addition, if we made one */ + if (made_tle) + { + newtlist = list_delete_last(newtlist); + nextresno--; + } + /* We need not consider this clause for hashing, either */ + continue; + } + } + else if (sjinfo->semi_can_btree) /* shouldn't happen */ + elog(ERROR, "could not find ordering operator for equality operator %u", + in_oper); + + if (sjinfo->semi_can_hash) + { + /* Create a GROUP BY list for the Agg node to use */ + Oid eq_oper; + SortGroupClause *groupcl; + + /* + * Get the hashable equality operators for the Agg node to + * use. Normally these are the same as the IN clause + * operators, but if those are cross-type operators then the + * equality operators are the ones for the IN clause + * operators' RHS datatype. + */ + if (!get_compatible_hash_operators(in_oper, NULL, &eq_oper)) + elog(ERROR, "could not find compatible hash operator for operator %u", + in_oper); + + groupcl = makeNode(SortGroupClause); + groupcl->tleSortGroupRef = assignSortGroupRef(tle, newtlist); + groupcl->eqop = eq_oper; + groupcl->sortop = sortop; + groupcl->reverse_sort = false; + groupcl->nulls_first = false; + groupcl->hashable = true; + groupClause = lappend(groupClause, groupcl); + } + } + + /* + * Done building the sortPathkeys and groupClause. But the + * sortPathkeys are bogus if not all the clauses were sortable. + */ + if (!sjinfo->semi_can_btree) + sortPathkeys = NIL; + + /* + * It can happen that all the RHS columns are equated to constants. + * We'd have to do something special to unique-ify in that case, and + * it's such an unlikely-in-the-real-world case that it's not worth + * the effort. So just punt if we found no columns to unique-ify. + */ + if (sortPathkeys == NIL && groupClause == NIL) + { + MemoryContextSwitchTo(oldcontext); + return NULL; + } + + /* Convert the required targetlist back to PathTarget form */ + unique_rel->reltarget = create_pathtarget(root, newtlist); + } + + /* build unique paths based on input rel's pathlist */ + create_final_unique_paths(root, rel, sortPathkeys, groupClause, + sjinfo, unique_rel); + + /* build unique paths based on input rel's partial_pathlist */ + create_partial_unique_paths(root, rel, sortPathkeys, groupClause, + sjinfo, unique_rel); + + /* Now choose the best path(s) */ + set_cheapest(unique_rel); + + /* + * There shouldn't be any partial paths for the unique relation; + * otherwise, we won't be able to properly guarantee uniqueness. + */ + Assert(unique_rel->partial_pathlist == NIL); + + /* Cache the result */ + rel->unique_rel = unique_rel; + rel->unique_pathkeys = sortPathkeys; + rel->unique_groupclause = groupClause; + + MemoryContextSwitchTo(oldcontext); + + return unique_rel; +} + +/* + * create_final_unique_paths + * Create unique paths in 'unique_rel' based on 'input_rel' pathlist + */ +static void +create_final_unique_paths(PlannerInfo *root, RelOptInfo *input_rel, + List *sortPathkeys, List *groupClause, + SpecialJoinInfo *sjinfo, RelOptInfo *unique_rel) +{ + Path *cheapest_input_path = input_rel->cheapest_total_path; + + /* Estimate number of output rows */ + unique_rel->rows = estimate_num_groups(root, + sjinfo->semi_rhs_exprs, + cheapest_input_path->rows, + NULL, + NULL); + + /* Consider sort-based implementations, if possible. */ + if (sjinfo->semi_can_btree) + { + ListCell *lc; + + /* + * Use any available suitably-sorted path as input, and also consider + * sorting the cheapest-total path and incremental sort on any paths + * with presorted keys. + * + * To save planning time, we ignore parameterized input paths unless + * they are the cheapest-total path. + */ + foreach(lc, input_rel->pathlist) + { + Path *input_path = (Path *) lfirst(lc); + Path *path; + bool is_sorted; + int presorted_keys; + + /* + * Ignore parameterized paths that are not the cheapest-total + * path. + */ + if (input_path->param_info && + input_path != cheapest_input_path) + continue; + + is_sorted = pathkeys_count_contained_in(sortPathkeys, + input_path->pathkeys, + &presorted_keys); + + /* + * Ignore paths that are not suitably or partially sorted, unless + * they are the cheapest total path (no need to deal with paths + * which have presorted keys when incremental sort is disabled). + */ + if (!is_sorted && input_path != cheapest_input_path && + (presorted_keys == 0 || !enable_incremental_sort)) + continue; + + /* + * Make a separate ProjectionPath in case we need a Result node. + */ + path = (Path *) create_projection_path(root, + unique_rel, + input_path, + unique_rel->reltarget); + + if (!is_sorted) + { + /* + * We've no need to consider both a sort and incremental sort. + * We'll just do a sort if there are no presorted keys and an + * incremental sort when there are presorted keys. + */ + if (presorted_keys == 0 || !enable_incremental_sort) + path = (Path *) create_sort_path(root, + unique_rel, + path, + sortPathkeys, + -1.0); + else + path = (Path *) create_incremental_sort_path(root, + unique_rel, + path, + sortPathkeys, + presorted_keys, + -1.0); + } + + path = (Path *) create_unique_path(root, unique_rel, path, + list_length(sortPathkeys), + unique_rel->rows); + + add_path(unique_rel, path); + } + } + + /* Consider hash-based implementation, if possible. */ + if (sjinfo->semi_can_hash) + { + Path *path; + + /* + * Make a separate ProjectionPath in case we need a Result node. + */ + path = (Path *) create_projection_path(root, + unique_rel, + cheapest_input_path, + unique_rel->reltarget); + + path = (Path *) create_agg_path(root, + unique_rel, + path, + cheapest_input_path->pathtarget, + AGG_HASHED, + AGGSPLIT_SIMPLE, + groupClause, + NIL, + NULL, + unique_rel->rows); + + add_path(unique_rel, path); + } +} + +/* + * create_partial_unique_paths + * Create unique paths in 'unique_rel' based on 'input_rel' partial_pathlist + */ +static void +create_partial_unique_paths(PlannerInfo *root, RelOptInfo *input_rel, + List *sortPathkeys, List *groupClause, + SpecialJoinInfo *sjinfo, RelOptInfo *unique_rel) +{ + RelOptInfo *partial_unique_rel; + Path *cheapest_partial_path; + + /* nothing to do when there are no partial paths in the input rel */ + if (!input_rel->consider_parallel || input_rel->partial_pathlist == NIL) + return; + + /* + * nothing to do if there's anything in the targetlist that's + * parallel-restricted. + */ + if (!is_parallel_safe(root, (Node *) unique_rel->reltarget->exprs)) + return; + + cheapest_partial_path = linitial(input_rel->partial_pathlist); + + partial_unique_rel = makeNode(RelOptInfo); + memcpy(partial_unique_rel, input_rel, sizeof(RelOptInfo)); + + /* + * clear path info + */ + partial_unique_rel->pathlist = NIL; + partial_unique_rel->ppilist = NIL; + partial_unique_rel->partial_pathlist = NIL; + partial_unique_rel->cheapest_startup_path = NULL; + partial_unique_rel->cheapest_total_path = NULL; + partial_unique_rel->cheapest_parameterized_paths = NIL; + + /* Estimate number of output rows */ + partial_unique_rel->rows = estimate_num_groups(root, + sjinfo->semi_rhs_exprs, + cheapest_partial_path->rows, + NULL, + NULL); + partial_unique_rel->reltarget = unique_rel->reltarget; + + /* Consider sort-based implementations, if possible. */ + if (sjinfo->semi_can_btree) + { + ListCell *lc; + + /* + * Use any available suitably-sorted path as input, and also consider + * sorting the cheapest partial path and incremental sort on any paths + * with presorted keys. + */ + foreach(lc, input_rel->partial_pathlist) + { + Path *input_path = (Path *) lfirst(lc); + Path *path; + bool is_sorted; + int presorted_keys; + + is_sorted = pathkeys_count_contained_in(sortPathkeys, + input_path->pathkeys, + &presorted_keys); + + /* + * Ignore paths that are not suitably or partially sorted, unless + * they are the cheapest partial path (no need to deal with paths + * which have presorted keys when incremental sort is disabled). + */ + if (!is_sorted && input_path != cheapest_partial_path && + (presorted_keys == 0 || !enable_incremental_sort)) + continue; + + /* + * Make a separate ProjectionPath in case we need a Result node. + */ + path = (Path *) create_projection_path(root, + partial_unique_rel, + input_path, + partial_unique_rel->reltarget); + + if (!is_sorted) + { + /* + * We've no need to consider both a sort and incremental sort. + * We'll just do a sort if there are no presorted keys and an + * incremental sort when there are presorted keys. + */ + if (presorted_keys == 0 || !enable_incremental_sort) + path = (Path *) create_sort_path(root, + partial_unique_rel, + path, + sortPathkeys, + -1.0); + else + path = (Path *) create_incremental_sort_path(root, + partial_unique_rel, + path, + sortPathkeys, + presorted_keys, + -1.0); + } + + path = (Path *) create_unique_path(root, partial_unique_rel, path, + list_length(sortPathkeys), + partial_unique_rel->rows); + + add_partial_path(partial_unique_rel, path); + } + } + + /* Consider hash-based implementation, if possible. */ + if (sjinfo->semi_can_hash) + { + Path *path; + + /* + * Make a separate ProjectionPath in case we need a Result node. + */ + path = (Path *) create_projection_path(root, + partial_unique_rel, + cheapest_partial_path, + partial_unique_rel->reltarget); + + path = (Path *) create_agg_path(root, + partial_unique_rel, + path, + cheapest_partial_path->pathtarget, + AGG_HASHED, + AGGSPLIT_SIMPLE, + groupClause, + NIL, + NULL, + partial_unique_rel->rows); + + add_partial_path(partial_unique_rel, path); + } + + if (partial_unique_rel->partial_pathlist != NIL) + { + generate_useful_gather_paths(root, partial_unique_rel, true); + set_cheapest(partial_unique_rel); + + /* + * Finally, create paths to unique-ify the final result. This step is + * needed to remove any duplicates due to combining rows from parallel + * workers. + */ + create_final_unique_paths(root, partial_unique_rel, + sortPathkeys, groupClause, + sjinfo, unique_rel); + } +} diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 150e9f060ee00..d706546f33264 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -307,6 +307,10 @@ set_plan_references(PlannerInfo *root, Plan *plan) PlanRowMark *rc = lfirst_node(PlanRowMark, lc); PlanRowMark *newrc; + /* sanity check on existing row marks */ + Assert(root->simple_rel_array[rc->rti] != NULL && + root->simple_rte_array[rc->rti] != NULL); + /* flat copy is enough since all fields are scalars */ newrc = (PlanRowMark *) palloc(sizeof(PlanRowMark)); memcpy(newrc, rc, sizeof(PlanRowMark)); @@ -1097,9 +1101,10 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) /* * Set up the visible plan targetlist as being the same as - * the first RETURNING list. This is for the use of - * EXPLAIN; the executor won't pay any attention to the - * targetlist. We postpone this step until here so that + * the first RETURNING list. This is mostly for the use + * of EXPLAIN; the executor won't execute that targetlist, + * although it does use it to prepare the node's result + * tuple slot. We postpone this step until here so that * we don't have to do set_returning_clause_references() * twice on identical targetlists. */ @@ -1248,9 +1253,6 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) lappend_int(root->glob->resultRelations, splan->rootRelation); } - root->glob->firstResultRels = - lappend_int(root->glob->firstResultRels, - linitial_int(splan->resultRelations)); } break; case T_Append: diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 8230cbea3c3b9..d71ed958e31b3 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -1214,6 +1214,86 @@ inline_cte_walker(Node *node, inline_cte_walker_context *context) return expression_tree_walker(node, inline_cte_walker, context); } +/* + * Attempt to transform 'testexpr' over the VALUES subquery into + * a ScalarArrayOpExpr. We currently support the transformation only when + * it ends up with a constant array. Otherwise, the evaluation of non-hashed + * SAOP might be slower than the corresponding Hash Join with VALUES. + * + * Return transformed ScalarArrayOpExpr or NULL if transformation isn't + * allowed. + */ +ScalarArrayOpExpr * +convert_VALUES_to_ANY(PlannerInfo *root, Node *testexpr, Query *values) +{ + RangeTblEntry *rte; + Node *leftop; + Node *rightop; + Oid opno; + ListCell *lc; + Oid inputcollid; + List *exprs = NIL; + + /* + * Check we have a binary operator over a single-column subquery with no + * joins and no LIMIT/OFFSET/ORDER BY clauses. + */ + if (!IsA(testexpr, OpExpr) || + list_length(((OpExpr *) testexpr)->args) != 2 || + list_length(values->targetList) > 1 || + values->limitCount != NULL || + values->limitOffset != NULL || + values->sortClause != NIL || + list_length(values->rtable) != 1) + return NULL; + + rte = linitial_node(RangeTblEntry, values->rtable); + leftop = linitial(((OpExpr *) testexpr)->args); + rightop = lsecond(((OpExpr *) testexpr)->args); + opno = ((OpExpr *) testexpr)->opno; + inputcollid = ((OpExpr *) testexpr)->inputcollid; + + /* + * Also, check that only RTE corresponds to VALUES; the list of values has + * at least two items and no volatile functions. + */ + if (rte->rtekind != RTE_VALUES || + list_length(rte->values_lists) < 2 || + contain_volatile_functions((Node *) rte->values_lists)) + return NULL; + + foreach(lc, rte->values_lists) + { + List *elem = lfirst(lc); + Node *value = linitial(elem); + + /* + * Prepare an evaluation of the right side of the operator with + * substitution of the given value. + */ + value = convert_testexpr(root, rightop, list_make1(value)); + + /* + * Try to evaluate constant expressions. We could get Const as a + * result. + */ + value = eval_const_expressions(root, value); + + /* + * As we only support constant output arrays, all the items must also + * be constant. + */ + if (!IsA(value, Const)) + return NULL; + + exprs = lappend(exprs, value); + } + + /* Finally, build ScalarArrayOpExpr at the top of the 'exprs' list. */ + return make_SAOP_expr(opno, leftop, exprType(rightop), + linitial_oid(rte->colcollations), inputcollid, + exprs, false); +} /* * convert_ANY_sublink_to_join: try to convert an ANY SubLink to a join @@ -1374,6 +1454,7 @@ convert_EXISTS_sublink_to_join(PlannerInfo *root, SubLink *sublink, Query *parse = root->parse; Query *subselect = (Query *) sublink->subselect; Node *whereClause; + PlannerInfo subroot; int rtoffset; int varno; Relids clause_varnos; @@ -1435,6 +1516,35 @@ convert_EXISTS_sublink_to_join(PlannerInfo *root, SubLink *sublink, if (contain_volatile_functions(whereClause)) return NULL; + /* + * Scan the rangetable for relation RTEs and retrieve the necessary + * catalog information for each relation. Using this information, clear + * the inh flag for any relation that has no children, collect not-null + * attribute numbers for any relation that has column not-null + * constraints, and expand virtual generated columns for any relation that + * contains them. + * + * Note: we construct up an entirely dummy PlannerInfo for use here. This + * is fine because only the "glob" and "parse" links will be used in this + * case. + * + * Note: we temporarily assign back the WHERE clause so that any virtual + * generated column references within it can be expanded. It should be + * separated out again afterward. + */ + MemSet(&subroot, 0, sizeof(subroot)); + subroot.type = T_PlannerInfo; + subroot.glob = root->glob; + subroot.parse = subselect; + subselect->jointree->quals = whereClause; + subselect = preprocess_relation_rtes(&subroot); + + /* + * Now separate out the WHERE clause again. + */ + whereClause = subselect->jointree->quals; + subselect->jointree->quals = NULL; + /* * The subquery must have a nonempty jointree, but we can make it so. */ @@ -1652,6 +1762,7 @@ convert_EXISTS_to_ANY(PlannerInfo *root, Query *subselect, Node **testexpr, List **paramIds) { Node *whereClause; + PlannerInfo subroot; List *leftargs, *rightargs, *opids, @@ -1711,12 +1822,15 @@ convert_EXISTS_to_ANY(PlannerInfo *root, Query *subselect, * parent aliases were flattened already, and we're not going to pull any * child Vars (of any description) into the parent. * - * Note: passing the parent's root to eval_const_expressions is - * technically wrong, but we can get away with it since only the - * boundParams (if any) are used, and those would be the same in a - * subroot. - */ - whereClause = eval_const_expressions(root, whereClause); + * Note: we construct up an entirely dummy PlannerInfo to pass to + * eval_const_expressions. This is fine because only the "glob" and + * "parse" links are used by eval_const_expressions. + */ + MemSet(&subroot, 0, sizeof(subroot)); + subroot.type = T_PlannerInfo; + subroot.glob = root->glob; + subroot.parse = subselect; + whereClause = eval_const_expressions(&subroot, whereClause); whereClause = (Node *) canonicalize_qual((Expr *) whereClause, false); whereClause = (Node *) make_ands_implicit((Expr *) whereClause); diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index d131a5bbc592b..35e8d3c183b47 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -4,10 +4,10 @@ * Planner preprocessing for subqueries and join tree manipulation. * * NOTE: the intended sequence for invoking these operations is + * preprocess_relation_rtes * replace_empty_jointree * pull_up_sublinks * preprocess_function_rtes - * expand_virtual_generated_columns * pull_up_subqueries * flatten_simple_union_all * do expression preprocessing (including flattening JOIN alias vars) @@ -36,6 +36,7 @@ #include "optimizer/clauses.h" #include "optimizer/optimizer.h" #include "optimizer/placeholder.h" +#include "optimizer/plancat.h" #include "optimizer/prep.h" #include "optimizer/subselect.h" #include "optimizer/tlist.h" @@ -102,6 +103,9 @@ typedef struct reduce_outer_joins_partial_state Relids unreduced_side; /* relids in its still-nullable side */ } reduce_outer_joins_partial_state; +static Query *expand_virtual_generated_columns(PlannerInfo *root, Query *parse, + RangeTblEntry *rte, int rt_index, + Relation relation); static Node *pull_up_sublinks_jointree_recurse(PlannerInfo *root, Node *jtnode, Relids *relids); static Node *pull_up_sublinks_qual_recurse(PlannerInfo *root, Node *node, @@ -392,6 +396,181 @@ transform_MERGE_to_join(Query *parse) parse->mergeJoinCondition = NULL; /* join condition not needed */ } +/* + * preprocess_relation_rtes + * Do the preprocessing work for any relation RTEs in the FROM clause. + * + * This scans the rangetable for relation RTEs and retrieves the necessary + * catalog information for each relation. Using this information, it clears + * the inh flag for any relation that has no children, collects not-null + * attribute numbers for any relation that has column not-null constraints, and + * expands virtual generated columns for any relation that contains them. + * + * Note that expanding virtual generated columns may cause the query tree to + * have new copies of rangetable entries. Therefore, we have to use list_nth + * instead of foreach when iterating over the query's rangetable. + * + * Returns a modified copy of the query tree, if any relations with virtual + * generated columns are present. + */ +Query * +preprocess_relation_rtes(PlannerInfo *root) +{ + Query *parse = root->parse; + int rtable_size; + int rt_index; + + rtable_size = list_length(parse->rtable); + + for (rt_index = 0; rt_index < rtable_size; rt_index++) + { + RangeTblEntry *rte = rt_fetch(rt_index + 1, parse->rtable); + Relation relation; + + /* We only care about relation RTEs. */ + if (rte->rtekind != RTE_RELATION) + continue; + + /* + * We need not lock the relation since it was already locked by the + * rewriter. + */ + relation = table_open(rte->relid, NoLock); + + /* + * Check to see if the relation actually has any children; if not, + * clear the inh flag so we can treat it as a plain base relation. + * + * Note: this could give a false-positive result, if the rel once had + * children but no longer does. We used to be able to clear rte->inh + * later on when we discovered that, but no more; we have to handle + * such cases as full-fledged inheritance. + */ + if (rte->inh) + rte->inh = relation->rd_rel->relhassubclass; + + /* + * Check to see if the relation has any column not-null constraints; + * if so, retrieve the constraint information and store it in a + * relation OID based hash table. + */ + get_relation_notnullatts(root, relation); + + /* + * Check to see if the relation has any virtual generated columns; if + * so, replace all Var nodes in the query that reference these columns + * with the generation expressions. + */ + parse = expand_virtual_generated_columns(root, parse, + rte, rt_index + 1, + relation); + + table_close(relation, NoLock); + } + + return parse; +} + +/* + * expand_virtual_generated_columns + * Expand virtual generated columns for the given relation. + * + * This checks whether the given relation has any virtual generated columns, + * and if so, replaces all Var nodes in the query that reference those columns + * with their generation expressions. + * + * Returns a modified copy of the query tree if the relation contains virtual + * generated columns. + */ +static Query * +expand_virtual_generated_columns(PlannerInfo *root, Query *parse, + RangeTblEntry *rte, int rt_index, + Relation relation) +{ + TupleDesc tupdesc; + + /* Only normal relations can have virtual generated columns */ + Assert(rte->rtekind == RTE_RELATION); + + tupdesc = RelationGetDescr(relation); + if (tupdesc->constr && tupdesc->constr->has_generated_virtual) + { + List *tlist = NIL; + pullup_replace_vars_context rvcontext; + + for (int i = 0; i < tupdesc->natts; i++) + { + Form_pg_attribute attr = TupleDescAttr(tupdesc, i); + TargetEntry *tle; + + if (attr->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL) + { + Node *defexpr; + + defexpr = build_generation_expression(relation, i + 1); + ChangeVarNodes(defexpr, 1, rt_index, 0); + + tle = makeTargetEntry((Expr *) defexpr, i + 1, 0, false); + tlist = lappend(tlist, tle); + } + else + { + Var *var; + + var = makeVar(rt_index, + i + 1, + attr->atttypid, + attr->atttypmod, + attr->attcollation, + 0); + + tle = makeTargetEntry((Expr *) var, i + 1, 0, false); + tlist = lappend(tlist, tle); + } + } + + Assert(list_length(tlist) > 0); + Assert(!rte->lateral); + + /* + * The relation's targetlist items are now in the appropriate form to + * insert into the query, except that we may need to wrap them in + * PlaceHolderVars. Set up required context data for + * pullup_replace_vars. + */ + rvcontext.root = root; + rvcontext.targetlist = tlist; + rvcontext.target_rte = rte; + rvcontext.result_relation = parse->resultRelation; + /* won't need these values */ + rvcontext.relids = NULL; + rvcontext.nullinfo = NULL; + /* pass NULL for outer_hasSubLinks */ + rvcontext.outer_hasSubLinks = NULL; + rvcontext.varno = rt_index; + /* this flag will be set below, if needed */ + rvcontext.wrap_option = REPLACE_WRAP_NONE; + /* initialize cache array with indexes 0 .. length(tlist) */ + rvcontext.rv_cache = palloc0((list_length(tlist) + 1) * + sizeof(Node *)); + + /* + * If the query uses grouping sets, we need a PlaceHolderVar for each + * expression of the relation's targetlist items. (See comments in + * pull_up_simple_subquery().) + */ + if (parse->groupingSets) + rvcontext.wrap_option = REPLACE_WRAP_ALL; + + /* + * Apply pullup variable replacement throughout the query tree. + */ + parse = (Query *) pullup_replace_vars((Node *) parse, &rvcontext); + } + + return parse; +} + /* * replace_empty_jointree * If the Query's jointree is empty, replace it with a dummy RTE_RESULT @@ -664,6 +843,18 @@ pull_up_sublinks_qual_recurse(PlannerInfo *root, Node *node, /* Is it a convertible ANY or EXISTS clause? */ if (sublink->subLinkType == ANY_SUBLINK) { + ScalarArrayOpExpr *saop; + + if ((saop = convert_VALUES_to_ANY(root, + sublink->testexpr, + (Query *) sublink->subselect)) != NULL) + + /* + * The VALUES sequence was simplified. Nothing more to do + * here. + */ + return (Node *) saop; + if ((j = convert_ANY_sublink_to_join(root, sublink, available_rels1)) != NULL) { @@ -937,128 +1128,6 @@ preprocess_function_rtes(PlannerInfo *root) } } -/* - * expand_virtual_generated_columns - * Expand all virtual generated column references in a query. - * - * This scans the rangetable for relations with virtual generated columns, and - * replaces all Var nodes in the query that reference these columns with the - * generation expressions. Note that we do not descend into subqueries; that - * is taken care of when the subqueries are planned. - * - * This has to be done after we have pulled up any SubLinks within the query's - * quals; otherwise any virtual generated column references within the SubLinks - * that should be transformed into joins wouldn't get expanded. - * - * Returns a modified copy of the query tree, if any relations with virtual - * generated columns are present. - */ -Query * -expand_virtual_generated_columns(PlannerInfo *root) -{ - Query *parse = root->parse; - int rt_index; - ListCell *lc; - - rt_index = 0; - foreach(lc, parse->rtable) - { - RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc); - Relation rel; - TupleDesc tupdesc; - - ++rt_index; - - /* - * Only normal relations can have virtual generated columns. - */ - if (rte->rtekind != RTE_RELATION) - continue; - - rel = table_open(rte->relid, NoLock); - - tupdesc = RelationGetDescr(rel); - if (tupdesc->constr && tupdesc->constr->has_generated_virtual) - { - List *tlist = NIL; - pullup_replace_vars_context rvcontext; - - for (int i = 0; i < tupdesc->natts; i++) - { - Form_pg_attribute attr = TupleDescAttr(tupdesc, i); - TargetEntry *tle; - - if (attr->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL) - { - Node *defexpr; - - defexpr = build_generation_expression(rel, i + 1); - ChangeVarNodes(defexpr, 1, rt_index, 0); - - tle = makeTargetEntry((Expr *) defexpr, i + 1, 0, false); - tlist = lappend(tlist, tle); - } - else - { - Var *var; - - var = makeVar(rt_index, - i + 1, - attr->atttypid, - attr->atttypmod, - attr->attcollation, - 0); - - tle = makeTargetEntry((Expr *) var, i + 1, 0, false); - tlist = lappend(tlist, tle); - } - } - - Assert(list_length(tlist) > 0); - Assert(!rte->lateral); - - /* - * The relation's targetlist items are now in the appropriate form - * to insert into the query, except that we may need to wrap them - * in PlaceHolderVars. Set up required context data for - * pullup_replace_vars. - */ - rvcontext.root = root; - rvcontext.targetlist = tlist; - rvcontext.target_rte = rte; - rvcontext.result_relation = parse->resultRelation; - /* won't need these values */ - rvcontext.relids = NULL; - rvcontext.nullinfo = NULL; - /* pass NULL for outer_hasSubLinks */ - rvcontext.outer_hasSubLinks = NULL; - rvcontext.varno = rt_index; - /* this flag will be set below, if needed */ - rvcontext.wrap_option = REPLACE_WRAP_NONE; - /* initialize cache array with indexes 0 .. length(tlist) */ - rvcontext.rv_cache = palloc0((list_length(tlist) + 1) * - sizeof(Node *)); - - /* - * If the query uses grouping sets, we need a PlaceHolderVar for - * each expression of the relation's targetlist items. (See - * comments in pull_up_simple_subquery().) - */ - if (parse->groupingSets) - rvcontext.wrap_option = REPLACE_WRAP_ALL; - - /* - * Apply pullup variable replacement throughout the query tree. - */ - parse = (Query *) pullup_replace_vars((Node *) parse, &rvcontext); - } - - table_close(rel, NoLock); - } - - return parse; -} - /* * pull_up_subqueries * Look for subqueries in the rangetable that can be pulled up into @@ -1321,6 +1390,16 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte, /* No CTEs to worry about */ Assert(subquery->cteList == NIL); + /* + * Scan the rangetable for relation RTEs and retrieve the necessary + * catalog information for each relation. Using this information, clear + * the inh flag for any relation that has no children, collect not-null + * attribute numbers for any relation that has column not-null + * constraints, and expand virtual generated columns for any relation that + * contains them. + */ + subquery = subroot->parse = preprocess_relation_rtes(subroot); + /* * If the FROM clause is empty, replace it with a dummy RTE_RESULT RTE, so * that we don't need so many special cases to deal with that situation. @@ -1340,13 +1419,6 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte, */ preprocess_function_rtes(subroot); - /* - * Scan the rangetable for relations with virtual generated columns, and - * replace all Var nodes in the query that reference these columns with - * the generation expressions. - */ - subquery = subroot->parse = expand_virtual_generated_columns(subroot); - /* * Recursively pull up the subquery's subqueries, so that * pull_up_subqueries' processing is complete for its jointree and diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index c2a77503d4bba..ffc9d6c3f301c 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -44,6 +44,7 @@ #include "optimizer/tlist.h" #include "parser/parse_coerce.h" #include "parser/parsetree.h" +#include "utils/lsyscache.h" #include "utils/rel.h" static List *expand_insert_targetlist(PlannerInfo *root, List *tlist, @@ -419,9 +420,8 @@ expand_insert_targetlist(PlannerInfo *root, List *tlist, Relation rel) * * INSERTs should insert NULL in this case. (We assume the * rewriter would have inserted any available non-NULL default - * value.) Also, if the column isn't dropped, apply any domain - * constraints that might exist --- this is to catch domain NOT - * NULL. + * value.) Also, normally we must apply any domain constraints + * that might exist --- this is to catch domain NOT NULL. * * When generating a NULL constant for a dropped column, we label * it INT4 (any other guaranteed-to-exist datatype would do as @@ -431,21 +431,17 @@ expand_insert_targetlist(PlannerInfo *root, List *tlist, Relation rel) * representation is datatype-independent. This could perhaps * confuse code comparing the finished plan to the target * relation, however. + * + * Another exception is that if the column is generated, the value + * we produce here will be ignored, and we don't want to risk + * throwing an error. So in that case we *don't* want to apply + * domain constraints, so we must produce a NULL of the base type. + * Again, code comparing the finished plan to the target relation + * must account for this. */ Node *new_expr; - if (!att_tup->attisdropped) - { - new_expr = coerce_null_to_domain(att_tup->atttypid, - att_tup->atttypmod, - att_tup->attcollation, - att_tup->attlen, - att_tup->attbyval); - /* Must run expression preprocessing on any non-const nodes */ - if (!IsA(new_expr, Const)) - new_expr = eval_const_expressions(root, new_expr); - } - else + if (att_tup->attisdropped) { /* Insert NULL for dropped column */ new_expr = (Node *) makeConst(INT4OID, @@ -456,6 +452,33 @@ expand_insert_targetlist(PlannerInfo *root, List *tlist, Relation rel) true, /* isnull */ true /* byval */ ); } + else if (att_tup->attgenerated) + { + /* Generated column, insert a NULL of the base type */ + Oid baseTypeId = att_tup->atttypid; + int32 baseTypeMod = att_tup->atttypmod; + + baseTypeId = getBaseTypeAndTypmod(baseTypeId, &baseTypeMod); + new_expr = (Node *) makeConst(baseTypeId, + baseTypeMod, + att_tup->attcollation, + att_tup->attlen, + (Datum) 0, + true, /* isnull */ + att_tup->attbyval); + } + else + { + /* Normal column, insert a NULL of the column datatype */ + new_expr = coerce_null_to_domain(att_tup->atttypid, + att_tup->atttypmod, + att_tup->attcollation, + att_tup->attlen, + att_tup->attbyval); + /* Must run expression preprocessing on any non-const nodes */ + if (!IsA(new_expr, Const)) + new_expr = eval_const_expressions(root, new_expr); + } new_tle = makeTargetEntry((Expr *) new_expr, attrno, diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index eab44da65b8f0..28a4ae6444068 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -929,11 +929,11 @@ generate_union_paths(SetOperationStmt *op, PlannerInfo *root, make_pathkeys_for_sortclauses(root, groupList, tlist), -1.0); - path = (Path *) create_upper_unique_path(root, - result_rel, - path, - list_length(path->pathkeys), - dNumGroups); + path = (Path *) create_unique_path(root, + result_rel, + path, + list_length(path->pathkeys), + dNumGroups); add_path(result_rel, path); @@ -946,11 +946,11 @@ generate_union_paths(SetOperationStmt *op, PlannerInfo *root, make_pathkeys_for_sortclauses(root, groupList, tlist), -1.0); - path = (Path *) create_upper_unique_path(root, - result_rel, - path, - list_length(path->pathkeys), - dNumGroups); + path = (Path *) create_unique_path(root, + result_rel, + path, + list_length(path->pathkeys), + dNumGroups); add_path(result_rel, path); } } @@ -970,11 +970,11 @@ generate_union_paths(SetOperationStmt *op, PlannerInfo *root, NULL); /* and make the MergeAppend unique */ - path = (Path *) create_upper_unique_path(root, - result_rel, - path, - list_length(tlist), - dNumGroups); + path = (Path *) create_unique_path(root, + result_rel, + path, + list_length(tlist), + dNumGroups); add_path(result_rel, path); } diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 43dfecfb47fa8..6f0b338d2cdf1 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -20,6 +20,7 @@ #include "postgres.h" #include "access/htup_details.h" +#include "catalog/pg_class.h" #include "catalog/pg_language.h" #include "catalog/pg_operator.h" #include "catalog/pg_proc.h" @@ -36,11 +37,15 @@ #include "optimizer/clauses.h" #include "optimizer/cost.h" #include "optimizer/optimizer.h" +#include "optimizer/pathnode.h" #include "optimizer/plancat.h" #include "optimizer/planmain.h" #include "parser/analyze.h" #include "parser/parse_coerce.h" +#include "parser/parse_collate.h" #include "parser/parse_func.h" +#include "parser/parse_oper.h" +#include "parser/parsetree.h" #include "rewrite/rewriteHandler.h" #include "rewrite/rewriteManip.h" #include "tcop/tcopprot.h" @@ -2240,7 +2245,8 @@ rowtype_field_matches(Oid rowtypeid, int fieldnum, * only operators and functions that are reasonable to try to execute. * * NOTE: "root" can be passed as NULL if the caller never wants to do any - * Param substitutions nor receive info about inlined functions. + * Param substitutions nor receive info about inlined functions nor reduce + * NullTest for Vars to constant true or constant false. * * NOTE: the planner assumes that this will always flatten nested AND and * OR clauses into N-argument form. See comments in prepqual.c. @@ -2326,7 +2332,7 @@ convert_saop_to_hashed_saop_walker(Node *node, void *context) /* Looks good. Fill in the hash functions */ saop->hashfuncid = lefthashfunc; } - return true; + return false; } } else /* !saop->useOr */ @@ -2364,7 +2370,7 @@ convert_saop_to_hashed_saop_walker(Node *node, void *context) */ saop->negfuncid = get_opcode(negator); } - return true; + return false; } } } @@ -3331,6 +3337,13 @@ eval_const_expressions_mutator(Node *node, -1, coalesceexpr->coalescecollid); + /* + * If there's exactly one surviving argument, we no longer + * need COALESCE at all: the result is that argument + */ + if (list_length(newargs) == 1) + return (Node *) linitial(newargs); + newcoalesce = makeNode(CoalesceExpr); newcoalesce->coalescetype = coalesceexpr->coalescetype; newcoalesce->coalescecollid = coalesceexpr->coalescecollid; @@ -3535,6 +3548,31 @@ eval_const_expressions_mutator(Node *node, return makeBoolConst(result, false); } + if (!ntest->argisrow && arg && IsA(arg, Var) && context->root) + { + Var *varg = (Var *) arg; + bool result; + + if (var_is_nonnullable(context->root, varg, false)) + { + switch (ntest->nulltesttype) + { + case IS_NULL: + result = false; + break; + case IS_NOT_NULL: + result = true; + break; + default: + elog(ERROR, "unrecognized nulltesttype: %d", + (int) ntest->nulltesttype); + result = false; /* keep compiler quiet */ + break; + } + + return makeBoolConst(result, false); + } + } newntest = makeNode(NullTest); newntest->arg = (Expr *) arg; @@ -4153,6 +4191,67 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod, return newexpr; } +/* + * var_is_nonnullable: check to see if the Var cannot be NULL + * + * If the Var is defined NOT NULL and meanwhile is not nulled by any outer + * joins or grouping sets, then we can know that it cannot be NULL. + * + * use_rel_info indicates whether the corresponding RelOptInfo is available for + * use. + */ +bool +var_is_nonnullable(PlannerInfo *root, Var *var, bool use_rel_info) +{ + Relids notnullattnums = NULL; + + Assert(IsA(var, Var)); + + /* skip upper-level Vars */ + if (var->varlevelsup != 0) + return false; + + /* could the Var be nulled by any outer joins or grouping sets? */ + if (!bms_is_empty(var->varnullingrels)) + return false; + + /* system columns cannot be NULL */ + if (var->varattno < 0) + return true; + + /* + * Check if the Var is defined as NOT NULL. We retrieve the column NOT + * NULL constraint information from the corresponding RelOptInfo if it is + * available; otherwise, we search the hash table for this information. + */ + if (use_rel_info) + { + RelOptInfo *rel = find_base_rel(root, var->varno); + + notnullattnums = rel->notnullattnums; + } + else + { + RangeTblEntry *rte = planner_rt_fetch(var->varno, root); + + /* + * We must skip inheritance parent tables, as some child tables may + * have a NOT NULL constraint for a column while others may not. This + * cannot happen with partitioned tables, though. + */ + if (rte->inh && rte->relkind != RELKIND_PARTITIONED_TABLE) + return false; + + notnullattnums = find_relation_notnullatts(root, rte->relid); + } + + if (var->varattno > 0 && + bms_is_member(var->varattno, notnullattnums)) + return true; + + return false; +} + /* * expand_function_arguments: convert named-notation args to positional args * and/or insert default args, as needed @@ -4742,7 +4841,7 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, if (check_sql_fn_retval(list_make1(querytree_list), result_type, rettupdesc, funcform->prokind, - false, NULL)) + false)) goto fail; /* reject whole-tuple-result cases */ /* @@ -5288,7 +5387,7 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) if (!check_sql_fn_retval(list_make1(querytree_list), fexpr->funcresulttype, rettupdesc, funcform->prokind, - true, NULL) && + true) && (functypclass == TYPEFUNC_COMPOSITE || functypclass == TYPEFUNC_COMPOSITE_DOMAIN || functypclass == TYPEFUNC_RECORD)) @@ -5439,3 +5538,86 @@ pull_paramids_walker(Node *node, Bitmapset **context) } return expression_tree_walker(node, pull_paramids_walker, context); } + +/* + * Build ScalarArrayOpExpr on top of 'exprs.' 'haveNonConst' indicates + * whether at least one of the expressions is not Const. When it's false, + * the array constant is built directly; otherwise, we have to build a child + * ArrayExpr. The 'exprs' list gets freed if not directly used in the output + * expression tree. + */ +ScalarArrayOpExpr * +make_SAOP_expr(Oid oper, Node *leftexpr, Oid coltype, Oid arraycollid, + Oid inputcollid, List *exprs, bool haveNonConst) +{ + Node *arrayNode = NULL; + ScalarArrayOpExpr *saopexpr = NULL; + Oid arraytype = get_array_type(coltype); + + if (!OidIsValid(arraytype)) + return NULL; + + /* + * Assemble an array from the list of constants. It seems more profitable + * to build a const array. But in the presence of other nodes, we don't + * have a specific value here and must employ an ArrayExpr instead. + */ + if (haveNonConst) + { + ArrayExpr *arrayExpr = makeNode(ArrayExpr); + + /* array_collid will be set by parse_collate.c */ + arrayExpr->element_typeid = coltype; + arrayExpr->array_typeid = arraytype; + arrayExpr->multidims = false; + arrayExpr->elements = exprs; + arrayExpr->location = -1; + + arrayNode = (Node *) arrayExpr; + } + else + { + int16 typlen; + bool typbyval; + char typalign; + Datum *elems; + bool *nulls; + int i = 0; + ArrayType *arrayConst; + int dims[1] = {list_length(exprs)}; + int lbs[1] = {1}; + + get_typlenbyvalalign(coltype, &typlen, &typbyval, &typalign); + + elems = (Datum *) palloc(sizeof(Datum) * list_length(exprs)); + nulls = (bool *) palloc(sizeof(bool) * list_length(exprs)); + foreach_node(Const, value, exprs) + { + elems[i] = value->constvalue; + nulls[i++] = value->constisnull; + } + + arrayConst = construct_md_array(elems, nulls, 1, dims, lbs, + coltype, typlen, typbyval, typalign); + arrayNode = (Node *) makeConst(arraytype, -1, arraycollid, + -1, PointerGetDatum(arrayConst), + false, false); + + pfree(elems); + pfree(nulls); + list_free(exprs); + } + + /* Build the SAOP expression node */ + saopexpr = makeNode(ScalarArrayOpExpr); + saopexpr->opno = oper; + saopexpr->opfuncid = get_opcode(oper); + saopexpr->hashfuncid = InvalidOid; + saopexpr->negfuncid = InvalidOid; + saopexpr->useOr = true; + saopexpr->inputcollid = inputcollid; + saopexpr->args = list_make2(leftexpr, arrayNode); + saopexpr->location = -1; + + return saopexpr; +} diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c index 17e51cd75d744..30d158069e332 100644 --- a/src/backend/optimizer/util/inherit.c +++ b/src/backend/optimizer/util/inherit.c @@ -466,8 +466,7 @@ expand_single_inheritance_child(PlannerInfo *root, RangeTblEntry *parentrte, Index *childRTindex_p) { Query *parse = root->parse; - Oid parentOID PG_USED_FOR_ASSERTS_ONLY = - RelationGetRelid(parentrel); + Oid parentOID = RelationGetRelid(parentrel); Oid childOID = RelationGetRelid(childrel); RangeTblEntry *childrte; Index childRTindex; @@ -513,6 +512,13 @@ expand_single_inheritance_child(PlannerInfo *root, RangeTblEntry *parentrte, *childrte_p = childrte; *childRTindex_p = childRTindex; + /* + * Retrieve column not-null constraint information for the child relation + * if its relation OID is different from the parent's. + */ + if (childOID != parentOID) + get_relation_notnullatts(root, childrel); + /* * Build an AppendRelInfo struct for each parent/child pair. */ diff --git a/src/backend/optimizer/util/paramassign.c b/src/backend/optimizer/util/paramassign.c index 3bd3ce37c8fce..4c13c5931b4c9 100644 --- a/src/backend/optimizer/util/paramassign.c +++ b/src/backend/optimizer/util/paramassign.c @@ -599,38 +599,46 @@ process_subquery_nestloop_params(PlannerInfo *root, List *subplan_params) } /* - * Identify any NestLoopParams that should be supplied by a NestLoop plan - * node with the specified lefthand rels. Remove them from the active - * root->curOuterParams list and return them as the result list. + * Identify any NestLoopParams that should be supplied by a NestLoop + * plan node with the specified lefthand rels and required-outer rels. + * Remove them from the active root->curOuterParams list and return + * them as the result list. * - * XXX Here we also hack up the returned Vars and PHVs so that they do not - * contain nullingrel sets exceeding what is available from the outer side. - * This is needed if we have applied outer join identity 3, - * (A leftjoin B on (Pab)) leftjoin C on (Pb*c) - * = A leftjoin (B leftjoin C on (Pbc)) on (Pab) - * and C contains lateral references to B. It's still safe to apply the - * identity, but the parser will have created those references in the form - * "b*" (i.e., with varnullingrels listing the A/B join), while what we will - * have available from the nestloop's outer side is just "b". We deal with - * that here by stripping the nullingrels down to what is available from the - * outer side according to leftrelids. - * - * That fixes matters for the case of forward application of identity 3. - * If the identity was applied in the reverse direction, we will have - * parameter Vars containing too few nullingrel bits rather than too many. - * Currently, that causes no problems because setrefs.c applies only a - * subset check to nullingrels in NestLoopParams, but we'd have to work - * harder if we ever want to tighten that check. This is all pretty annoying - * because it greatly weakens setrefs.c's cross-check, but the alternative + * Vars and PHVs appearing in the result list must have nullingrel sets + * that could validly appear in the lefthand rel's output. Ordinarily that + * would be true already, but if we have applied outer join identity 3, + * there could be more or fewer nullingrel bits in the nodes appearing in + * curOuterParams than are in the nominal leftrelids. We deal with that by + * forcing their nullingrel sets to include exactly the outer-join relids + * that appear in leftrelids and can null the respective Var or PHV. + * This fix is a bit ad-hoc and intellectually unsatisfactory, because it's + * essentially jumping to the conclusion that we've placed evaluation of + * the nestloop parameters correctly, and thus it defeats the intent of the + * subsequent nullingrel cross-checks in setrefs.c. But the alternative * seems to be to generate multiple versions of each laterally-parameterized * subquery, which'd be unduly expensive. */ List * -identify_current_nestloop_params(PlannerInfo *root, Relids leftrelids) +identify_current_nestloop_params(PlannerInfo *root, + Relids leftrelids, + Relids outerrelids) { List *result; + Relids allleftrelids; ListCell *cell; + /* + * We'll be able to evaluate a PHV in the lefthand path if it uses the + * lefthand rels plus any available required-outer rels. But don't do so + * if it uses *only* required-outer rels; in that case it should be + * evaluated higher in the tree. For Vars, no such hair-splitting is + * necessary since they depend on only one relid. + */ + if (outerrelids) + allleftrelids = bms_union(leftrelids, outerrelids); + else + allleftrelids = leftrelids; + result = NIL; foreach(cell, root->curOuterParams) { @@ -646,25 +654,60 @@ identify_current_nestloop_params(PlannerInfo *root, Relids leftrelids) bms_is_member(nlp->paramval->varno, leftrelids)) { Var *var = (Var *) nlp->paramval; + RelOptInfo *rel = root->simple_rel_array[var->varno]; root->curOuterParams = foreach_delete_current(root->curOuterParams, cell); - var->varnullingrels = bms_intersect(var->varnullingrels, + var->varnullingrels = bms_intersect(rel->nulling_relids, leftrelids); result = lappend(result, nlp); } - else if (IsA(nlp->paramval, PlaceHolderVar) && - bms_is_subset(find_placeholder_info(root, - (PlaceHolderVar *) nlp->paramval)->ph_eval_at, - leftrelids)) + else if (IsA(nlp->paramval, PlaceHolderVar)) { PlaceHolderVar *phv = (PlaceHolderVar *) nlp->paramval; + PlaceHolderInfo *phinfo = find_placeholder_info(root, phv); + Relids eval_at = phinfo->ph_eval_at; - root->curOuterParams = foreach_delete_current(root->curOuterParams, - cell); - phv->phnullingrels = bms_intersect(phv->phnullingrels, - leftrelids); - result = lappend(result, nlp); + if (bms_is_subset(eval_at, allleftrelids) && + bms_overlap(eval_at, leftrelids)) + { + root->curOuterParams = foreach_delete_current(root->curOuterParams, + cell); + + /* + * Deal with an edge case: if the PHV was pulled up out of a + * subquery and it contains a subquery that was originally + * pushed down from this query level, then that will still be + * represented as a SubLink, because SS_process_sublinks won't + * recurse into outer PHVs, so it didn't get transformed + * during expression preprocessing in the subquery. We need a + * version of the PHV that has a SubPlan, which we can get + * from the current query level's placeholder_list. This is + * quite grotty of course, but dealing with it earlier in the + * handling of subplan params would be just as grotty, and it + * might end up being a waste of cycles if we don't decide to + * treat the PHV as a NestLoopParam. (Perhaps that whole + * mechanism should be redesigned someday, but today is not + * that day.) + */ + if (root->parse->hasSubLinks) + { + phv = copyObject(phinfo->ph_var); + + /* + * The ph_var will have empty nullingrels, but that + * doesn't matter since we're about to overwrite + * phv->phnullingrels. Other fields should be OK already. + */ + nlp->paramval = (Var *) phv; + } + + phv->phnullingrels = + bms_intersect(get_placeholder_nulling_relids(root, phinfo), + leftrelids); + + result = lappend(result, nlp); + } } } return result; diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 93e73cb44dbbd..b0da28150d32c 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -46,7 +46,6 @@ typedef enum */ #define STD_FUZZ_FACTOR 1.01 -static List *translate_sub_tlist(List *tlist, int relid); static int append_total_cost_compare(const ListCell *a, const ListCell *b); static int append_startup_cost_compare(const ListCell *a, const ListCell *b); static List *reparameterize_pathlist_by_child(PlannerInfo *root, @@ -381,7 +380,6 @@ set_cheapest(RelOptInfo *parent_rel) parent_rel->cheapest_startup_path = cheapest_startup_path; parent_rel->cheapest_total_path = cheapest_total_path; - parent_rel->cheapest_unique_path = NULL; /* computed only if needed */ parent_rel->cheapest_parameterized_paths = parameterized_paths; } @@ -1404,12 +1402,12 @@ create_append_path(PlannerInfo *root, pathnode->path.total_cost = child->total_cost; } else - cost_append(pathnode); + cost_append(pathnode, root); /* Must do this last, else cost_append complains */ pathnode->path.pathkeys = child->pathkeys; } else - cost_append(pathnode); + cost_append(pathnode, root); /* If the caller provided a row estimate, override the computed value. */ if (rows >= 0) @@ -1515,6 +1513,9 @@ create_merge_append_path(PlannerInfo *root, foreach(l, subpaths) { Path *subpath = (Path *) lfirst(l); + int presorted_keys; + Path sort_path; /* dummy for result of + * cost_sort/cost_incremental_sort */ /* All child paths should be unparameterized */ Assert(bms_is_empty(PATH_REQ_OUTER(subpath))); @@ -1523,32 +1524,52 @@ create_merge_append_path(PlannerInfo *root, pathnode->path.parallel_safe = pathnode->path.parallel_safe && subpath->parallel_safe; - if (pathkeys_contained_in(pathkeys, subpath->pathkeys)) + if (!pathkeys_count_contained_in(pathkeys, subpath->pathkeys, + &presorted_keys)) { - /* Subpath is adequately ordered, we won't need to sort it */ - input_disabled_nodes += subpath->disabled_nodes; - input_startup_cost += subpath->startup_cost; - input_total_cost += subpath->total_cost; - } - else - { - /* We'll need to insert a Sort node, so include cost for that */ - Path sort_path; /* dummy for result of cost_sort */ + /* + * We'll need to insert a Sort node, so include costs for that. We + * choose to use incremental sort if it is enabled and there are + * presorted keys; otherwise we use full sort. + * + * We can use the parent's LIMIT if any, since we certainly won't + * pull more than that many tuples from any child. + */ + if (enable_incremental_sort && presorted_keys > 0) + { + cost_incremental_sort(&sort_path, + root, + pathkeys, + presorted_keys, + subpath->disabled_nodes, + subpath->startup_cost, + subpath->total_cost, + subpath->rows, + subpath->pathtarget->width, + 0.0, + work_mem, + pathnode->limit_tuples); + } + else + { + cost_sort(&sort_path, + root, + pathkeys, + subpath->disabled_nodes, + subpath->total_cost, + subpath->rows, + subpath->pathtarget->width, + 0.0, + work_mem, + pathnode->limit_tuples); + } - cost_sort(&sort_path, - root, - pathkeys, - subpath->disabled_nodes, - subpath->total_cost, - subpath->rows, - subpath->pathtarget->width, - 0.0, - work_mem, - pathnode->limit_tuples); - input_disabled_nodes += sort_path.disabled_nodes; - input_startup_cost += sort_path.startup_cost; - input_total_cost += sort_path.total_cost; + subpath = &sort_path; } + + input_disabled_nodes += subpath->disabled_nodes; + input_startup_cost += subpath->startup_cost; + input_total_cost += subpath->total_cost; } /* @@ -1666,7 +1687,7 @@ create_material_path(RelOptInfo *rel, Path *subpath) MemoizePath * create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *param_exprs, List *hash_operators, - bool singlerow, bool binary_mode, double calls) + bool singlerow, bool binary_mode, Cardinality est_calls) { MemoizePath *pathnode = makeNode(MemoizePath); @@ -1687,7 +1708,6 @@ create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, pathnode->param_exprs = param_exprs; pathnode->singlerow = singlerow; pathnode->binary_mode = binary_mode; - pathnode->calls = clamp_row_est(calls); /* * For now we set est_entries to 0. cost_memoize_rescan() does all the @@ -1697,6 +1717,12 @@ create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, */ pathnode->est_entries = 0; + pathnode->est_calls = clamp_row_est(est_calls); + + /* These will also be set later in cost_memoize_rescan() */ + pathnode->est_unique_keys = 0.0; + pathnode->est_hit_ratio = 0.0; + /* we should not generate this path type when enable_memoize=false */ Assert(enable_memoize); pathnode->path.disabled_nodes = subpath->disabled_nodes; @@ -1712,246 +1738,6 @@ create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, return pathnode; } -/* - * create_unique_path - * Creates a path representing elimination of distinct rows from the - * input data. Distinct-ness is defined according to the needs of the - * semijoin represented by sjinfo. If it is not possible to identify - * how to make the data unique, NULL is returned. - * - * If used at all, this is likely to be called repeatedly on the same rel; - * and the input subpath should always be the same (the cheapest_total path - * for the rel). So we cache the result. - */ -UniquePath * -create_unique_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, - SpecialJoinInfo *sjinfo) -{ - UniquePath *pathnode; - Path sort_path; /* dummy for result of cost_sort */ - Path agg_path; /* dummy for result of cost_agg */ - MemoryContext oldcontext; - int numCols; - - /* Caller made a mistake if subpath isn't cheapest_total ... */ - Assert(subpath == rel->cheapest_total_path); - Assert(subpath->parent == rel); - /* ... or if SpecialJoinInfo is the wrong one */ - Assert(sjinfo->jointype == JOIN_SEMI); - Assert(bms_equal(rel->relids, sjinfo->syn_righthand)); - - /* If result already cached, return it */ - if (rel->cheapest_unique_path) - return (UniquePath *) rel->cheapest_unique_path; - - /* If it's not possible to unique-ify, return NULL */ - if (!(sjinfo->semi_can_btree || sjinfo->semi_can_hash)) - return NULL; - - /* - * When called during GEQO join planning, we are in a short-lived memory - * context. We must make sure that the path and any subsidiary data - * structures created for a baserel survive the GEQO cycle, else the - * baserel is trashed for future GEQO cycles. On the other hand, when we - * are creating those for a joinrel during GEQO, we don't want them to - * clutter the main planning context. Upshot is that the best solution is - * to explicitly allocate memory in the same context the given RelOptInfo - * is in. - */ - oldcontext = MemoryContextSwitchTo(GetMemoryChunkContext(rel)); - - pathnode = makeNode(UniquePath); - - pathnode->path.pathtype = T_Unique; - pathnode->path.parent = rel; - pathnode->path.pathtarget = rel->reltarget; - pathnode->path.param_info = subpath->param_info; - pathnode->path.parallel_aware = false; - pathnode->path.parallel_safe = rel->consider_parallel && - subpath->parallel_safe; - pathnode->path.parallel_workers = subpath->parallel_workers; - - /* - * Assume the output is unsorted, since we don't necessarily have pathkeys - * to represent it. (This might get overridden below.) - */ - pathnode->path.pathkeys = NIL; - - pathnode->subpath = subpath; - - /* - * Under GEQO and when planning child joins, the sjinfo might be - * short-lived, so we'd better make copies of data structures we extract - * from it. - */ - pathnode->in_operators = copyObject(sjinfo->semi_operators); - pathnode->uniq_exprs = copyObject(sjinfo->semi_rhs_exprs); - - /* - * If the input is a relation and it has a unique index that proves the - * semi_rhs_exprs are unique, then we don't need to do anything. Note - * that relation_has_unique_index_for automatically considers restriction - * clauses for the rel, as well. - */ - if (rel->rtekind == RTE_RELATION && sjinfo->semi_can_btree && - relation_has_unique_index_for(root, rel, NIL, - sjinfo->semi_rhs_exprs, - sjinfo->semi_operators)) - { - pathnode->umethod = UNIQUE_PATH_NOOP; - pathnode->path.rows = rel->rows; - pathnode->path.disabled_nodes = subpath->disabled_nodes; - pathnode->path.startup_cost = subpath->startup_cost; - pathnode->path.total_cost = subpath->total_cost; - pathnode->path.pathkeys = subpath->pathkeys; - - rel->cheapest_unique_path = (Path *) pathnode; - - MemoryContextSwitchTo(oldcontext); - - return pathnode; - } - - /* - * If the input is a subquery whose output must be unique already, then we - * don't need to do anything. The test for uniqueness has to consider - * exactly which columns we are extracting; for example "SELECT DISTINCT - * x,y" doesn't guarantee that x alone is distinct. So we cannot check for - * this optimization unless semi_rhs_exprs consists only of simple Vars - * referencing subquery outputs. (Possibly we could do something with - * expressions in the subquery outputs, too, but for now keep it simple.) - */ - if (rel->rtekind == RTE_SUBQUERY) - { - RangeTblEntry *rte = planner_rt_fetch(rel->relid, root); - - if (query_supports_distinctness(rte->subquery)) - { - List *sub_tlist_colnos; - - sub_tlist_colnos = translate_sub_tlist(sjinfo->semi_rhs_exprs, - rel->relid); - - if (sub_tlist_colnos && - query_is_distinct_for(rte->subquery, - sub_tlist_colnos, - sjinfo->semi_operators)) - { - pathnode->umethod = UNIQUE_PATH_NOOP; - pathnode->path.rows = rel->rows; - pathnode->path.disabled_nodes = subpath->disabled_nodes; - pathnode->path.startup_cost = subpath->startup_cost; - pathnode->path.total_cost = subpath->total_cost; - pathnode->path.pathkeys = subpath->pathkeys; - - rel->cheapest_unique_path = (Path *) pathnode; - - MemoryContextSwitchTo(oldcontext); - - return pathnode; - } - } - } - - /* Estimate number of output rows */ - pathnode->path.rows = estimate_num_groups(root, - sjinfo->semi_rhs_exprs, - rel->rows, - NULL, - NULL); - numCols = list_length(sjinfo->semi_rhs_exprs); - - if (sjinfo->semi_can_btree) - { - /* - * Estimate cost for sort+unique implementation - */ - cost_sort(&sort_path, root, NIL, - subpath->disabled_nodes, - subpath->total_cost, - rel->rows, - subpath->pathtarget->width, - 0.0, - work_mem, - -1.0); - - /* - * Charge one cpu_operator_cost per comparison per input tuple. We - * assume all columns get compared at most of the tuples. (XXX - * probably this is an overestimate.) This should agree with - * create_upper_unique_path. - */ - sort_path.total_cost += cpu_operator_cost * rel->rows * numCols; - } - - if (sjinfo->semi_can_hash) - { - /* - * Estimate the overhead per hashtable entry at 64 bytes (same as in - * planner.c). - */ - int hashentrysize = subpath->pathtarget->width + 64; - - if (hashentrysize * pathnode->path.rows > get_hash_memory_limit()) - { - /* - * We should not try to hash. Hack the SpecialJoinInfo to - * remember this, in case we come through here again. - */ - sjinfo->semi_can_hash = false; - } - else - cost_agg(&agg_path, root, - AGG_HASHED, NULL, - numCols, pathnode->path.rows, - NIL, - subpath->disabled_nodes, - subpath->startup_cost, - subpath->total_cost, - rel->rows, - subpath->pathtarget->width); - } - - if (sjinfo->semi_can_btree && sjinfo->semi_can_hash) - { - if (agg_path.disabled_nodes < sort_path.disabled_nodes || - (agg_path.disabled_nodes == sort_path.disabled_nodes && - agg_path.total_cost < sort_path.total_cost)) - pathnode->umethod = UNIQUE_PATH_HASH; - else - pathnode->umethod = UNIQUE_PATH_SORT; - } - else if (sjinfo->semi_can_btree) - pathnode->umethod = UNIQUE_PATH_SORT; - else if (sjinfo->semi_can_hash) - pathnode->umethod = UNIQUE_PATH_HASH; - else - { - /* we can get here only if we abandoned hashing above */ - MemoryContextSwitchTo(oldcontext); - return NULL; - } - - if (pathnode->umethod == UNIQUE_PATH_HASH) - { - pathnode->path.disabled_nodes = agg_path.disabled_nodes; - pathnode->path.startup_cost = agg_path.startup_cost; - pathnode->path.total_cost = agg_path.total_cost; - } - else - { - pathnode->path.disabled_nodes = sort_path.disabled_nodes; - pathnode->path.startup_cost = sort_path.startup_cost; - pathnode->path.total_cost = sort_path.total_cost; - } - - rel->cheapest_unique_path = (Path *) pathnode; - - MemoryContextSwitchTo(oldcontext); - - return pathnode; -} - /* * create_gather_merge_path * @@ -2003,36 +1789,6 @@ create_gather_merge_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, return pathnode; } -/* - * translate_sub_tlist - get subquery column numbers represented by tlist - * - * The given targetlist usually contains only Vars referencing the given relid. - * Extract their varattnos (ie, the column numbers of the subquery) and return - * as an integer List. - * - * If any of the tlist items is not a simple Var, we cannot determine whether - * the subquery's uniqueness condition (if any) matches ours, so punt and - * return NIL. - */ -static List * -translate_sub_tlist(List *tlist, int relid) -{ - List *result = NIL; - ListCell *l; - - foreach(l, tlist) - { - Var *var = (Var *) lfirst(l); - - if (!var || !IsA(var, Var) || - var->varno != relid) - return NIL; /* punt */ - - result = lappend_int(result, var->varattno); - } - return result; -} - /* * create_gather_path * Creates a path corresponding to a gather scan, returning the @@ -2626,6 +2382,7 @@ create_nestloop_path(PlannerInfo *root, * (this should be a subset of the restrict_clauses list) * 'outersortkeys' are the sort varkeys for the outer relation * 'innersortkeys' are the sort varkeys for the inner relation + * 'outer_presorted_keys' is the number of presorted keys of the outer path */ MergePath * create_mergejoin_path(PlannerInfo *root, @@ -2640,7 +2397,8 @@ create_mergejoin_path(PlannerInfo *root, Relids required_outer, List *mergeclauses, List *outersortkeys, - List *innersortkeys) + List *innersortkeys, + int outer_presorted_keys) { MergePath *pathnode = makeNode(MergePath); @@ -2669,6 +2427,7 @@ create_mergejoin_path(PlannerInfo *root, pathnode->path_mergeclauses = mergeclauses; pathnode->outersortkeys = outersortkeys; pathnode->innersortkeys = innersortkeys; + pathnode->outer_presorted_keys = outer_presorted_keys; /* pathnode->skip_mark_restore will be set by final_cost_mergejoin */ /* pathnode->materialize_inner will be set by final_cost_mergejoin */ @@ -2787,8 +2546,7 @@ create_projection_path(PlannerInfo *root, pathnode->path.pathtype = T_Result; pathnode->path.parent = rel; pathnode->path.pathtarget = target; - /* For now, assume we are above any joins, so no parameterization */ - pathnode->path.param_info = NULL; + pathnode->path.param_info = subpath->param_info; pathnode->path.parallel_aware = false; pathnode->path.parallel_safe = rel->consider_parallel && subpath->parallel_safe && @@ -3043,8 +2801,7 @@ create_incremental_sort_path(PlannerInfo *root, pathnode->path.parent = rel; /* Sort doesn't project, so use source path's pathtarget */ pathnode->path.pathtarget = subpath->pathtarget; - /* For now, assume we are above any joins, so no parameterization */ - pathnode->path.param_info = NULL; + pathnode->path.param_info = subpath->param_info; pathnode->path.parallel_aware = false; pathnode->path.parallel_safe = rel->consider_parallel && subpath->parallel_safe; @@ -3091,8 +2848,7 @@ create_sort_path(PlannerInfo *root, pathnode->path.parent = rel; /* Sort doesn't project, so use source path's pathtarget */ pathnode->path.pathtarget = subpath->pathtarget; - /* For now, assume we are above any joins, so no parameterization */ - pathnode->path.param_info = NULL; + pathnode->path.param_info = subpath->param_info; pathnode->path.parallel_aware = false; pathnode->path.parallel_safe = rel->consider_parallel && subpath->parallel_safe; @@ -3168,13 +2924,10 @@ create_group_path(PlannerInfo *root, } /* - * create_upper_unique_path + * create_unique_path * Creates a pathnode that represents performing an explicit Unique step * on presorted input. * - * This produces a Unique plan node, but the use-case is so different from - * create_unique_path that it doesn't seem worth trying to merge the two. - * * 'rel' is the parent relation associated with the result * 'subpath' is the path representing the source of data * 'numCols' is the number of grouping columns @@ -3183,21 +2936,20 @@ create_group_path(PlannerInfo *root, * The input path must be sorted on the grouping columns, plus possibly * additional columns; so the first numCols pathkeys are the grouping columns */ -UpperUniquePath * -create_upper_unique_path(PlannerInfo *root, - RelOptInfo *rel, - Path *subpath, - int numCols, - double numGroups) +UniquePath * +create_unique_path(PlannerInfo *root, + RelOptInfo *rel, + Path *subpath, + int numCols, + double numGroups) { - UpperUniquePath *pathnode = makeNode(UpperUniquePath); + UniquePath *pathnode = makeNode(UniquePath); pathnode->path.pathtype = T_Unique; pathnode->path.parent = rel; /* Unique doesn't project, so use source path's pathtarget */ pathnode->path.pathtarget = subpath->pathtarget; - /* For now, assume we are above any joins, so no parameterization */ - pathnode->path.param_info = NULL; + pathnode->path.param_info = subpath->param_info; pathnode->path.parallel_aware = false; pathnode->path.parallel_safe = rel->consider_parallel && subpath->parallel_safe; @@ -3253,8 +3005,7 @@ create_agg_path(PlannerInfo *root, pathnode->path.pathtype = T_Agg; pathnode->path.parent = rel; pathnode->path.pathtarget = target; - /* For now, assume we are above any joins, so no parameterization */ - pathnode->path.param_info = NULL; + pathnode->path.param_info = subpath->param_info; pathnode->path.parallel_aware = false; pathnode->path.parallel_safe = rel->consider_parallel && subpath->parallel_safe; @@ -4233,7 +3984,7 @@ reparameterize_path(PlannerInfo *root, Path *path, mpath->hash_operators, mpath->singlerow, mpath->binary_mode, - mpath->calls); + mpath->est_calls); } default: break; diff --git a/src/backend/optimizer/util/placeholder.c b/src/backend/optimizer/util/placeholder.c index 41a4c81e94a75..e1cd00a72fbf7 100644 --- a/src/backend/optimizer/util/placeholder.c +++ b/src/backend/optimizer/util/placeholder.c @@ -545,3 +545,43 @@ contain_placeholder_references_walker(Node *node, return expression_tree_walker(node, contain_placeholder_references_walker, context); } + +/* + * Compute the set of outer-join relids that can null a placeholder. + * + * This is analogous to RelOptInfo.nulling_relids for Vars, but we compute it + * on-the-fly rather than saving it somewhere. Currently the value is needed + * at most once per query, so there's little value in doing otherwise. If it + * ever gains more widespread use, perhaps we should cache the result in + * PlaceHolderInfo. + */ +Relids +get_placeholder_nulling_relids(PlannerInfo *root, PlaceHolderInfo *phinfo) +{ + Relids result = NULL; + int relid = -1; + + /* + * Form the union of all potential nulling OJs for each baserel included + * in ph_eval_at. + */ + while ((relid = bms_next_member(phinfo->ph_eval_at, relid)) > 0) + { + RelOptInfo *rel = root->simple_rel_array[relid]; + + /* ignore the RTE_GROUP RTE */ + if (relid == root->group_rtindex) + continue; + + if (rel == NULL) /* must be an outer join */ + { + Assert(bms_is_member(relid, root->outer_join_rels)); + continue; + } + result = bms_add_members(result, rel->nulling_relids); + } + + /* Now remove any OJs already included in ph_eval_at, and we're done. */ + result = bms_del_members(result, phinfo->ph_eval_at); + return result; +} diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 0489ad366446f..6ce4efea11845 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -59,6 +59,12 @@ int constraint_exclusion = CONSTRAINT_EXCLUSION_PARTITION; /* Hook for plugins to get control in get_relation_info() */ get_relation_info_hook_type get_relation_info_hook = NULL; +typedef struct NotnullHashEntry +{ + Oid relid; /* OID of the relation */ + Relids notnullattnums; /* attnums of NOT NULL columns */ +} NotnullHashEntry; + static void get_relation_foreign_keys(PlannerInfo *root, RelOptInfo *rel, Relation relation, bool inhparent); @@ -172,25 +178,7 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, * RangeTblEntry does get populated. */ if (!inhparent || relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - { - for (int i = 0; i < relation->rd_att->natts; i++) - { - CompactAttribute *attr = TupleDescCompactAttr(relation->rd_att, i); - - if (attr->attnotnull) - { - rel->notnullattnums = bms_add_member(rel->notnullattnums, - i + 1); - - /* - * Per RemoveAttributeById(), dropped columns will have their - * attnotnull unset, so we needn't check for dropped columns - * in the above condition. - */ - Assert(!attr->attisdropped); - } - } - } + rel->notnullattnums = find_relation_notnullatts(root, relationObjectId); /* * Estimate relation size --- unless it's an inheritance parent, in which @@ -365,14 +353,10 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, * Since "<" uniquely defines the behavior of a sort * order, this is a sufficient test. * - * XXX This method is rather slow and also requires the - * undesirable assumption that the other index AM numbers - * its strategies the same as btree. It'd be better to - * have a way to explicitly declare the corresponding - * btree opfamily for each opfamily of the other index - * type. But given the lack of current or foreseeable - * amcanorder index types, it's not worth expending more - * effort on now. + * XXX This method is rather slow and complicated. It'd + * be better to have a way to explicitly declare the + * corresponding btree opfamily for each opfamily of the + * other index type. */ info->sortopfamily = (Oid *) palloc(sizeof(Oid) * nkeycolumns); info->reverse_sort = (bool *) palloc(sizeof(bool) * nkeycolumns); @@ -382,27 +366,27 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, { int16 opt = indexRelation->rd_indoption[i]; Oid ltopr; - Oid btopfamily; - Oid btopcintype; - int16 btstrategy; + Oid opfamily; + Oid opcintype; + CompareType cmptype; info->reverse_sort[i] = (opt & INDOPTION_DESC) != 0; info->nulls_first[i] = (opt & INDOPTION_NULLS_FIRST) != 0; - ltopr = get_opfamily_member(info->opfamily[i], - info->opcintype[i], - info->opcintype[i], - BTLessStrategyNumber); + ltopr = get_opfamily_member_for_cmptype(info->opfamily[i], + info->opcintype[i], + info->opcintype[i], + COMPARE_LT); if (OidIsValid(ltopr) && get_ordering_op_properties(ltopr, - &btopfamily, - &btopcintype, - &btstrategy) && - btopcintype == info->opcintype[i] && - btstrategy == BTLessStrategyNumber) + &opfamily, + &opcintype, + &cmptype) && + opcintype == info->opcintype[i] && + cmptype == COMPARE_LT) { /* Successful mapping */ - info->sortopfamily[i] = btopfamily; + info->sortopfamily[i] = opfamily; } else { @@ -640,6 +624,10 @@ get_relation_foreign_keys(PlannerInfo *root, RelOptInfo *rel, /* conrelid should always be that of the table we're considering */ Assert(cachedfk->conrelid == RelationGetRelid(relation)); + /* skip constraints currently not enforced */ + if (!cachedfk->conenforced) + continue; + /* Scan to find other RTEs matching confrelid */ rti = 0; foreach(lc2, rtable) @@ -681,6 +669,105 @@ get_relation_foreign_keys(PlannerInfo *root, RelOptInfo *rel, } } +/* + * get_relation_notnullatts - + * Retrieves column not-null constraint information for a given relation. + * + * We do this while we have the relcache entry open, and store the column + * not-null constraint information in a hash table based on the relation OID. + */ +void +get_relation_notnullatts(PlannerInfo *root, Relation relation) +{ + Oid relid = RelationGetRelid(relation); + NotnullHashEntry *hentry; + bool found; + Relids notnullattnums = NULL; + + /* bail out if the relation has no not-null constraints */ + if (relation->rd_att->constr == NULL || + !relation->rd_att->constr->has_not_null) + return; + + /* create the hash table if it hasn't been created yet */ + if (root->glob->rel_notnullatts_hash == NULL) + { + HTAB *hashtab; + HASHCTL hash_ctl; + + hash_ctl.keysize = sizeof(Oid); + hash_ctl.entrysize = sizeof(NotnullHashEntry); + hash_ctl.hcxt = CurrentMemoryContext; + + hashtab = hash_create("Relation NOT NULL attnums", + 64L, /* arbitrary initial size */ + &hash_ctl, + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); + + root->glob->rel_notnullatts_hash = hashtab; + } + + /* + * Create a hash entry for this relation OID, if we don't have one + * already. + */ + hentry = (NotnullHashEntry *) hash_search(root->glob->rel_notnullatts_hash, + &relid, + HASH_ENTER, + &found); + + /* bail out if a hash entry already exists for this relation OID */ + if (found) + return; + + /* collect the column not-null constraint information for this relation */ + for (int i = 0; i < relation->rd_att->natts; i++) + { + CompactAttribute *attr = TupleDescCompactAttr(relation->rd_att, i); + + Assert(attr->attnullability != ATTNULLABLE_UNKNOWN); + + if (attr->attnullability == ATTNULLABLE_VALID) + { + notnullattnums = bms_add_member(notnullattnums, i + 1); + + /* + * Per RemoveAttributeById(), dropped columns will have their + * attnotnull unset, so we needn't check for dropped columns in + * the above condition. + */ + Assert(!attr->attisdropped); + } + } + + /* ... and initialize the new hash entry */ + hentry->notnullattnums = notnullattnums; +} + +/* + * find_relation_notnullatts - + * Searches the hash table and returns the column not-null constraint + * information for a given relation. + */ +Relids +find_relation_notnullatts(PlannerInfo *root, Oid relid) +{ + NotnullHashEntry *hentry; + bool found; + + if (root->glob->rel_notnullatts_hash == NULL) + return NULL; + + hentry = (NotnullHashEntry *) hash_search(root->glob->rel_notnullatts_hash, + &relid, + HASH_FIND, + &found); + if (!found) + return NULL; + + return hentry->notnullattnums; +} + /* * infer_arbiter_indexes - * Determine the unique indexes used to arbitrate speculative insertion. @@ -1251,6 +1338,7 @@ get_relation_data_width(Oid relid, int32 *attr_widths) * get_relation_constraints * * Retrieve the applicable constraint expressions of the given relation. + * Only constraints that have been validated are considered. * * Returns a List (possibly empty) of constraint expressions. Each one * has been canonicalized, and its Vars are changed to have the varno @@ -1299,8 +1387,7 @@ get_relation_constraints(PlannerInfo *root, /* * If this constraint hasn't been fully validated yet, we must - * ignore it here. Also ignore if NO INHERIT and we weren't told - * that that's safe. + * ignore it here. */ if (!constr->check[i].ccvalid) continue; @@ -1317,7 +1404,6 @@ get_relation_constraints(PlannerInfo *root, if (constr->check[i].ccnoinherit && !include_noinherit) continue; - cexpr = stringToNode(constr->check[i].ccbin); /* @@ -1353,17 +1439,18 @@ get_relation_constraints(PlannerInfo *root, for (i = 1; i <= natts; i++) { - Form_pg_attribute att = TupleDescAttr(relation->rd_att, i - 1); + CompactAttribute *att = TupleDescCompactAttr(relation->rd_att, i - 1); - if (att->attnotnull && !att->attisdropped) + if (att->attnullability == ATTNULLABLE_VALID && !att->attisdropped) { + Form_pg_attribute wholeatt = TupleDescAttr(relation->rd_att, i - 1); NullTest *ntest = makeNode(NullTest); ntest->arg = (Expr *) makeVar(varno, i, - att->atttypid, - att->atttypmod, - att->attcollation, + wholeatt->atttypid, + wholeatt->atttypmod, + wholeatt->attcollation, 0); ntest->nulltesttype = IS_NOT_NULL; @@ -2301,6 +2388,60 @@ has_row_triggers(PlannerInfo *root, Index rti, CmdType event) return result; } +/* + * has_transition_tables + * + * Detect whether the specified relation has any transition tables for event. + */ +bool +has_transition_tables(PlannerInfo *root, Index rti, CmdType event) +{ + RangeTblEntry *rte = planner_rt_fetch(rti, root); + Relation relation; + TriggerDesc *trigDesc; + bool result = false; + + Assert(rte->rtekind == RTE_RELATION); + + /* Currently foreign tables cannot have transition tables */ + if (rte->relkind == RELKIND_FOREIGN_TABLE) + return result; + + /* Assume we already have adequate lock */ + relation = table_open(rte->relid, NoLock); + + trigDesc = relation->trigdesc; + switch (event) + { + case CMD_INSERT: + if (trigDesc && + trigDesc->trig_insert_new_table) + result = true; + break; + case CMD_UPDATE: + if (trigDesc && + (trigDesc->trig_update_old_table || + trigDesc->trig_update_new_table)) + result = true; + break; + case CMD_DELETE: + if (trigDesc && + trigDesc->trig_delete_old_table) + result = true; + break; + /* There is no separate event for MERGE, only INSERT/UPDATE/DELETE */ + case CMD_MERGE: + result = false; + break; + default: + elog(ERROR, "unrecognized CmdType: %d", (int) event); + break; + } + + table_close(relation, NoLock); + return result; +} + /* * has_stored_generated_columns * diff --git a/src/backend/optimizer/util/predtest.c b/src/backend/optimizer/util/predtest.c index b76fc81b08d02..ac28573cd0a5a 100644 --- a/src/backend/optimizer/util/predtest.c +++ b/src/backend/optimizer/util/predtest.c @@ -1605,36 +1605,36 @@ clause_is_strict_for(Node *clause, Node *subexpr, bool allow_false) /* - * Define "operator implication tables" for btree operators ("strategies"), + * Define "operator implication tables" for index operators ("cmptypes"), * and similar tables for refutation. * - * The strategy numbers defined by btree indexes (see access/stratnum.h) are: - * 1 < 2 <= 3 = 4 >= 5 > + * The row compare numbers defined by indexes (see access/cmptype.h) are: + * 1 < 2 <= 3 = 4 >= 5 > 6 <> * and in addition we use 6 to represent <>. <> is not a btree-indexable * operator, but we assume here that if an equality operator of a btree * opfamily has a negator operator, the negator behaves as <> for the opfamily. - * (This convention is also known to get_op_btree_interpretation().) + * (This convention is also known to get_op_index_interpretation().) * - * BT_implies_table[] and BT_refutes_table[] are used for cases where we have + * RC_implies_table[] and RC_refutes_table[] are used for cases where we have * two identical subexpressions and we want to know whether one operator * expression implies or refutes the other. That is, if the "clause" is * EXPR1 clause_op EXPR2 and the "predicate" is EXPR1 pred_op EXPR2 for the * same two (immutable) subexpressions: - * BT_implies_table[clause_op-1][pred_op-1] + * RC_implies_table[clause_op-1][pred_op-1] * is true if the clause implies the predicate - * BT_refutes_table[clause_op-1][pred_op-1] + * RC_refutes_table[clause_op-1][pred_op-1] * is true if the clause refutes the predicate - * where clause_op and pred_op are strategy numbers (from 1 to 6) in the - * same btree opfamily. For example, "x < y" implies "x <= y" and refutes + * where clause_op and pred_op are cmptype numbers (from 1 to 6) in the + * same opfamily. For example, "x < y" implies "x <= y" and refutes * "x > y". * - * BT_implic_table[] and BT_refute_table[] are used where we have two + * RC_implic_table[] and RC_refute_table[] are used where we have two * constants that we need to compare. The interpretation of: * - * test_op = BT_implic_table[clause_op-1][pred_op-1] + * test_op = RC_implic_table[clause_op-1][pred_op-1] * - * where test_op, clause_op and pred_op are strategy numbers (from 1 to 6) - * of btree operators, is as follows: + * where test_op, clause_op and pred_op are cmptypes (from 1 to 6) + * of index operators, is as follows: * * If you know, for some EXPR, that "EXPR clause_op CONST1" is true, and you * want to determine whether "EXPR pred_op CONST2" must also be true, then @@ -1645,7 +1645,7 @@ clause_is_strict_for(Node *clause, Node *subexpr, bool allow_false) * For example, if clause is "Quantity > 10" and pred is "Quantity > 5" * then we test "5 <= 10" which evals to true, so clause implies pred. * - * Similarly, the interpretation of a BT_refute_table entry is: + * Similarly, the interpretation of a RC_refute_table entry is: * * If you know, for some EXPR, that "EXPR clause_op CONST1" is true, and you * want to determine whether "EXPR pred_op CONST2" must be false, then @@ -1659,17 +1659,17 @@ clause_is_strict_for(Node *clause, Node *subexpr, bool allow_false) * An entry where test_op == 0 means the implication cannot be determined. */ -#define BTLT BTLessStrategyNumber -#define BTLE BTLessEqualStrategyNumber -#define BTEQ BTEqualStrategyNumber -#define BTGE BTGreaterEqualStrategyNumber -#define BTGT BTGreaterStrategyNumber -#define BTNE COMPARE_NE +#define RCLT COMPARE_LT +#define RCLE COMPARE_LE +#define RCEQ COMPARE_EQ +#define RCGE COMPARE_GE +#define RCGT COMPARE_GT +#define RCNE COMPARE_NE /* We use "none" for 0/false to make the tables align nicely */ #define none 0 -static const bool BT_implies_table[6][6] = { +static const bool RC_implies_table[6][6] = { /* * The predicate operator: * LT LE EQ GE GT NE @@ -1682,7 +1682,7 @@ static const bool BT_implies_table[6][6] = { {none, none, none, none, none, true} /* NE */ }; -static const bool BT_refutes_table[6][6] = { +static const bool RC_refutes_table[6][6] = { /* * The predicate operator: * LT LE EQ GE GT NE @@ -1695,30 +1695,30 @@ static const bool BT_refutes_table[6][6] = { {none, none, true, none, none, none} /* NE */ }; -static const StrategyNumber BT_implic_table[6][6] = { +static const CompareType RC_implic_table[6][6] = { /* * The predicate operator: * LT LE EQ GE GT NE */ - {BTGE, BTGE, none, none, none, BTGE}, /* LT */ - {BTGT, BTGE, none, none, none, BTGT}, /* LE */ - {BTGT, BTGE, BTEQ, BTLE, BTLT, BTNE}, /* EQ */ - {none, none, none, BTLE, BTLT, BTLT}, /* GE */ - {none, none, none, BTLE, BTLE, BTLE}, /* GT */ - {none, none, none, none, none, BTEQ} /* NE */ + {RCGE, RCGE, none, none, none, RCGE}, /* LT */ + {RCGT, RCGE, none, none, none, RCGT}, /* LE */ + {RCGT, RCGE, RCEQ, RCLE, RCLT, RCNE}, /* EQ */ + {none, none, none, RCLE, RCLT, RCLT}, /* GE */ + {none, none, none, RCLE, RCLE, RCLE}, /* GT */ + {none, none, none, none, none, RCEQ} /* NE */ }; -static const StrategyNumber BT_refute_table[6][6] = { +static const CompareType RC_refute_table[6][6] = { /* * The predicate operator: * LT LE EQ GE GT NE */ - {none, none, BTGE, BTGE, BTGE, none}, /* LT */ - {none, none, BTGT, BTGT, BTGE, none}, /* LE */ - {BTLE, BTLT, BTNE, BTGT, BTGE, BTEQ}, /* EQ */ - {BTLE, BTLT, BTLT, none, none, none}, /* GE */ - {BTLE, BTLE, BTLE, none, none, none}, /* GT */ - {none, none, BTEQ, none, none, none} /* NE */ + {none, none, RCGE, RCGE, RCGE, none}, /* LT */ + {none, none, RCGT, RCGT, RCGE, none}, /* LE */ + {RCLE, RCLT, RCNE, RCGT, RCGE, RCEQ}, /* EQ */ + {RCLE, RCLT, RCLT, none, none, none}, /* GE */ + {RCLE, RCLE, RCLE, none, none, none}, /* GT */ + {none, none, RCEQ, none, none, none} /* NE */ }; @@ -2165,23 +2165,23 @@ lookup_proof_cache(Oid pred_op, Oid clause_op, bool refute_it) * operator. This can happen in cases with incomplete sets of cross-type * comparison operators. */ - clause_op_infos = get_op_btree_interpretation(clause_op); + clause_op_infos = get_op_index_interpretation(clause_op); if (clause_op_infos) - pred_op_infos = get_op_btree_interpretation(pred_op); + pred_op_infos = get_op_index_interpretation(pred_op); else /* no point in looking */ pred_op_infos = NIL; foreach(lcp, pred_op_infos) { - OpBtreeInterpretation *pred_op_info = lfirst(lcp); + OpIndexInterpretation *pred_op_info = lfirst(lcp); Oid opfamily_id = pred_op_info->opfamily_id; foreach(lcc, clause_op_infos) { - OpBtreeInterpretation *clause_op_info = lfirst(lcc); - StrategyNumber pred_strategy, - clause_strategy, - test_strategy; + OpIndexInterpretation *clause_op_info = lfirst(lcc); + CompareType pred_cmptype, + clause_cmptype, + test_cmptype; /* Must find them in same opfamily */ if (opfamily_id != clause_op_info->opfamily_id) @@ -2189,51 +2189,51 @@ lookup_proof_cache(Oid pred_op, Oid clause_op, bool refute_it) /* Lefttypes should match */ Assert(clause_op_info->oplefttype == pred_op_info->oplefttype); - pred_strategy = pred_op_info->strategy; - clause_strategy = clause_op_info->strategy; + pred_cmptype = pred_op_info->cmptype; + clause_cmptype = clause_op_info->cmptype; /* * Check to see if we can make a proof for same-subexpressions * cases based on the operators' relationship in this opfamily. */ if (refute_it) - same_subexprs |= BT_refutes_table[clause_strategy - 1][pred_strategy - 1]; + same_subexprs |= RC_refutes_table[clause_cmptype - 1][pred_cmptype - 1]; else - same_subexprs |= BT_implies_table[clause_strategy - 1][pred_strategy - 1]; + same_subexprs |= RC_implies_table[clause_cmptype - 1][pred_cmptype - 1]; /* - * Look up the "test" strategy number in the implication table + * Look up the "test" cmptype number in the implication table */ if (refute_it) - test_strategy = BT_refute_table[clause_strategy - 1][pred_strategy - 1]; + test_cmptype = RC_refute_table[clause_cmptype - 1][pred_cmptype - 1]; else - test_strategy = BT_implic_table[clause_strategy - 1][pred_strategy - 1]; + test_cmptype = RC_implic_table[clause_cmptype - 1][pred_cmptype - 1]; - if (test_strategy == 0) + if (test_cmptype == 0) { /* Can't determine implication using this interpretation */ continue; } /* - * See if opfamily has an operator for the test strategy and the + * See if opfamily has an operator for the test cmptype and the * datatypes. */ - if (test_strategy == BTNE) + if (test_cmptype == RCNE) { - test_op = get_opfamily_member(opfamily_id, - pred_op_info->oprighttype, - clause_op_info->oprighttype, - BTEqualStrategyNumber); + test_op = get_opfamily_member_for_cmptype(opfamily_id, + pred_op_info->oprighttype, + clause_op_info->oprighttype, + COMPARE_EQ); if (OidIsValid(test_op)) test_op = get_negator(test_op); } else { - test_op = get_opfamily_member(opfamily_id, - pred_op_info->oprighttype, - clause_op_info->oprighttype, - test_strategy); + test_op = get_opfamily_member_for_cmptype(opfamily_id, + pred_op_info->oprighttype, + clause_op_info->oprighttype, + test_cmptype); } if (!OidIsValid(test_op)) diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index ff507331a061a..0e523d2eb5b44 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -217,7 +217,6 @@ build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent) rel->partial_pathlist = NIL; rel->cheapest_startup_path = NULL; rel->cheapest_total_path = NULL; - rel->cheapest_unique_path = NULL; rel->cheapest_parameterized_paths = NIL; rel->relid = relid; rel->rtekind = rte->rtekind; @@ -269,6 +268,9 @@ build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent) rel->fdw_private = NULL; rel->unique_for_rels = NIL; rel->non_unique_for_rels = NIL; + rel->unique_rel = NULL; + rel->unique_pathkeys = NIL; + rel->unique_groupclause = NIL; rel->baserestrictinfo = NIL; rel->baserestrictcost.startup = 0; rel->baserestrictcost.per_tuple = 0; @@ -713,7 +715,6 @@ build_join_rel(PlannerInfo *root, joinrel->partial_pathlist = NIL; joinrel->cheapest_startup_path = NULL; joinrel->cheapest_total_path = NULL; - joinrel->cheapest_unique_path = NULL; joinrel->cheapest_parameterized_paths = NIL; /* init direct_lateral_relids from children; we'll finish it up below */ joinrel->direct_lateral_relids = @@ -748,6 +749,9 @@ build_join_rel(PlannerInfo *root, joinrel->fdw_private = NULL; joinrel->unique_for_rels = NIL; joinrel->non_unique_for_rels = NIL; + joinrel->unique_rel = NULL; + joinrel->unique_pathkeys = NIL; + joinrel->unique_groupclause = NIL; joinrel->baserestrictinfo = NIL; joinrel->baserestrictcost.startup = 0; joinrel->baserestrictcost.per_tuple = 0; @@ -906,7 +910,6 @@ build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel, joinrel->partial_pathlist = NIL; joinrel->cheapest_startup_path = NULL; joinrel->cheapest_total_path = NULL; - joinrel->cheapest_unique_path = NULL; joinrel->cheapest_parameterized_paths = NIL; joinrel->direct_lateral_relids = NULL; joinrel->lateral_relids = NULL; @@ -933,6 +936,9 @@ build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel, joinrel->useridiscurrent = false; joinrel->fdwroutine = NULL; joinrel->fdw_private = NULL; + joinrel->unique_rel = NULL; + joinrel->unique_pathkeys = NIL; + joinrel->unique_groupclause = NIL; joinrel->baserestrictinfo = NIL; joinrel->baserestrictcost.startup = 0; joinrel->baserestrictcost.per_tuple = 0; @@ -1488,7 +1494,6 @@ fetch_upper_rel(PlannerInfo *root, UpperRelationKind kind, Relids relids) upperrel->pathlist = NIL; upperrel->cheapest_startup_path = NULL; upperrel->cheapest_total_path = NULL; - upperrel->cheapest_unique_path = NULL; upperrel->cheapest_parameterized_paths = NIL; root->upper_rels[kind] = lappend(root->upper_rels[kind], upperrel); diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 76f58b3aca34d..34f7c17f576ef 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -238,108 +238,24 @@ parse_sub_analyze(Node *parseTree, ParseState *parentParseState, return query; } -/* - * setQueryLocationAndLength - * Set query's location and length from statement and ParseState - * - * Some statements, like PreparableStmt, can be located within parentheses. - * For example "(SELECT 1)" or "COPY (UPDATE ...) to x;". For those, we - * cannot use the whole string from the statement's location or the SQL - * string would yield incorrectly. The parser will set stmt_len, reflecting - * the size of the statement within the parentheses. Thus, when stmt_len is - * available, we need to use it for the Query's stmt_len. - * - * For other cases, the parser can't provide the length of individual - * statements. However, we have the statement's location plus the length - * (p_stmt_len) and location (p_stmt_location) of the top level RawStmt, - * stored in pstate. Thus, the statement's length is the RawStmt's length - * minus how much we've advanced in the RawStmt's string. - */ -static void -setQueryLocationAndLength(ParseState *pstate, Query *qry, Node *parseTree) -{ - ParseLoc stmt_len = 0; - - /* - * If there is no information about the top RawStmt's length, leave it at - * 0 to use the whole string. - */ - if (pstate->p_stmt_len == 0) - return; - - switch (nodeTag(parseTree)) - { - case T_InsertStmt: - qry->stmt_location = ((InsertStmt *) parseTree)->stmt_location; - stmt_len = ((InsertStmt *) parseTree)->stmt_len; - break; - - case T_DeleteStmt: - qry->stmt_location = ((DeleteStmt *) parseTree)->stmt_location; - stmt_len = ((DeleteStmt *) parseTree)->stmt_len; - break; - - case T_UpdateStmt: - qry->stmt_location = ((UpdateStmt *) parseTree)->stmt_location; - stmt_len = ((UpdateStmt *) parseTree)->stmt_len; - break; - - case T_MergeStmt: - qry->stmt_location = ((MergeStmt *) parseTree)->stmt_location; - stmt_len = ((MergeStmt *) parseTree)->stmt_len; - break; - - case T_SelectStmt: - qry->stmt_location = ((SelectStmt *) parseTree)->stmt_location; - stmt_len = ((SelectStmt *) parseTree)->stmt_len; - break; - - case T_PLAssignStmt: - qry->stmt_location = ((PLAssignStmt *) parseTree)->location; - break; - - default: - qry->stmt_location = pstate->p_stmt_location; - break; - } - - if (stmt_len > 0) - { - /* Statement's length is known, use it */ - qry->stmt_len = stmt_len; - } - else - { - /* - * Compute the statement's length from the statement's location and - * the RawStmt's length and location. - */ - qry->stmt_len = pstate->p_stmt_len - (qry->stmt_location - pstate->p_stmt_location); - } - - /* The calculated statement length should be calculated as positive. */ - Assert(qry->stmt_len >= 0); -} - /* * transformTopLevelStmt - * transform a Parse tree into a Query tree. * - * This function is just responsible for storing location data - * from the RawStmt into the ParseState. + * This function is just responsible for transferring statement location data + * from the RawStmt into the finished Query. */ Query * transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree) { Query *result; - /* Store RawStmt's length and location in pstate */ - pstate->p_stmt_len = parseTree->stmt_len; - pstate->p_stmt_location = parseTree->stmt_location; - /* We're at top level, so allow SELECT INTO */ result = transformOptionalSelectInto(pstate, parseTree->stmt); + result->stmt_location = parseTree->stmt_location; + result->stmt_len = parseTree->stmt_len; + return result; } @@ -508,7 +424,6 @@ transformStmt(ParseState *pstate, Node *parseTree) /* Mark as original query until we learn differently */ result->querySource = QSRC_ORIGINAL; result->canSetTag = true; - setQueryLocationAndLength(pstate, result, parseTree); return result; } @@ -591,6 +506,45 @@ analyze_requires_snapshot(RawStmt *parseTree) return stmt_requires_parse_analysis(parseTree); } +/* + * query_requires_rewrite_plan() + * Returns true if rewriting or planning is non-trivial for this Query. + * + * This is much like stmt_requires_parse_analysis(), but applies one step + * further down the pipeline. + * + * We do not provide an equivalent of analyze_requires_snapshot(): callers + * can assume that any rewriting or planning activity needs a snapshot. + */ +bool +query_requires_rewrite_plan(Query *query) +{ + bool result; + + if (query->commandType != CMD_UTILITY) + { + /* All optimizable statements require rewriting/planning */ + result = true; + } + else + { + /* This list should match stmt_requires_parse_analysis() */ + switch (nodeTag(query->utilityStmt)) + { + case T_DeclareCursorStmt: + case T_ExplainStmt: + case T_CreateTableAsStmt: + case T_CallStmt: + result = true; + break; + default: + result = false; + break; + } + } + return result; +} + /* * transformDeleteStmt - * transforms a Delete Statement diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0fc502a3a4062..db43034b9db57 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -154,7 +154,6 @@ static void base_yyerror(YYLTYPE *yylloc, core_yyscan_t yyscanner, const char *msg); static RawStmt *makeRawStmt(Node *stmt, int stmt_location); static void updateRawStmtEnd(RawStmt *rs, int end_location); -static void updatePreparableStmtEnd(Node *n, int end_location); static Node *makeColumnRef(char *colname, List *indirection, int location, core_yyscan_t yyscanner); static Node *makeTypeCast(Node *arg, TypeName *typename, int location); @@ -178,13 +177,13 @@ static void insertSelectOptions(SelectStmt *stmt, SelectLimit *limitClause, WithClause *withClause, core_yyscan_t yyscanner); -static Node *makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg, int location); +static Node *makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg); static Node *doNegate(Node *n, int location); static void doNegateFloat(Float *v); static Node *makeAndExpr(Node *lexpr, Node *rexpr, int location); static Node *makeOrExpr(Node *lexpr, Node *rexpr, int location); static Node *makeNotExpr(Node *expr, int location); -static Node *makeAArrayExpr(List *elements, int location); +static Node *makeAArrayExpr(List *elements, int location, int end_location); static Node *makeSQLValueFunction(SQLValueFunctionOp op, int32 typmod, int location); static Node *makeXmlExpr(XmlExprOp op, char *name, List *named_args, @@ -319,6 +318,11 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type opt_qualified_name %type opt_concurrently %type opt_drop_behavior +%type opt_utility_option_list +%type utility_option_list +%type utility_option_elem +%type utility_option_name +%type utility_option_arg %type alter_column_default opclass_item opclass_drop alter_using %type add_drop opt_asc_desc opt_nulls_order @@ -339,10 +343,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); create_extension_opt_item alter_extension_opt_item %type opt_lock lock_type cast_context -%type utility_option_name -%type utility_option_elem -%type utility_option_list -%type utility_option_arg %type drop_option %type opt_or_replace opt_no opt_grant_grant_option @@ -523,7 +523,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type def_elem reloption_elem old_aggr_elem operator_def_elem %type def_arg columnElem where_clause where_or_current_clause a_expr b_expr c_expr AexprConst indirection_el opt_slice_bound - columnref in_expr having_clause func_table xmltable array_expr + columnref having_clause func_table xmltable array_expr OptWhereClause operator_def_arg %type opt_column_and_period_list %type rowsfrom_item rowsfrom_list opt_col_def_list @@ -557,7 +557,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type generic_option_list alter_generic_option_list %type reindex_target_relation reindex_target_all -%type opt_reindex_option_list %type copy_generic_opt_arg copy_generic_opt_arg_list_item %type copy_generic_opt_elem @@ -752,7 +751,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF NULLS_P NUMERIC - OBJECT_P OF OFF OFFSET OIDS OLD OMIT ON ONLY OPERATOR OPTION OPTIONS OR + OBJECT_P OBJECTS_P OF OFF OFFSET OIDS OLD OMIT ON ONLY OPERATOR OPTION OPTIONS OR ORDER ORDINALITY OTHERS OUT_P OUTER_P OVER OVERLAPS OVERLAY OVERRIDING OWNED OWNER @@ -1142,6 +1141,41 @@ opt_drop_behavior: | /* EMPTY */ { $$ = DROP_RESTRICT; /* default */ } ; +opt_utility_option_list: + '(' utility_option_list ')' { $$ = $2; } + | /* EMPTY */ { $$ = NULL; } + ; + +utility_option_list: + utility_option_elem + { + $$ = list_make1($1); + } + | utility_option_list ',' utility_option_elem + { + $$ = lappend($1, $3); + } + ; + +utility_option_elem: + utility_option_name utility_option_arg + { + $$ = makeDefElem($1, $2, @1); + } + ; + +utility_option_name: + NonReservedWord { $$ = $1; } + | analyze_keyword { $$ = "analyze"; } + | FORMAT_LA { $$ = "format"; } + ; + +utility_option_arg: + opt_boolean_or_string { $$ = (Node *) makeString($1); } + | NumericOnly { $$ = (Node *) $1; } + | /* EMPTY */ { $$ = NULL; } + ; + /***************************************************************************** * * CALL statement @@ -2029,11 +2063,12 @@ constraints_set_mode: * Checkpoint statement */ CheckPointStmt: - CHECKPOINT + CHECKPOINT opt_utility_option_list { CheckPointStmt *n = makeNode(CheckPointStmt); $$ = (Node *) n; + n->options = $2; } ; @@ -2662,15 +2697,26 @@ alter_table_cmd: n->subtype = AT_AlterConstraint; n->def = (Node *) c; c->conname = $3; + if ($4 & (CAS_NOT_ENFORCED | CAS_ENFORCED)) + c->alterEnforceability = true; if ($4 & (CAS_DEFERRABLE | CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED | CAS_INITIALLY_IMMEDIATE)) c->alterDeferrability = true; if ($4 & CAS_NO_INHERIT) c->alterInheritability = true; + /* handle unsupported case with specific error message */ + if ($4 & CAS_NOT_VALID) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("constraints cannot be altered to be NOT VALID"), + parser_errposition(@4)); processCASbits($4, @4, "FOREIGN KEY", &c->deferrable, &c->initdeferred, - NULL, NULL, &c->noinherit, yyscanner); + &c->is_enforced, + NULL, + &c->noinherit, + yyscanner); $$ = (Node *) n; } /* ALTER TABLE ALTER CONSTRAINT INHERIT */ @@ -3412,7 +3458,6 @@ CopyStmt: COPY opt_binary qualified_name opt_column_list { CopyStmt *n = makeNode(CopyStmt); - updatePreparableStmtEnd($3, @4); n->relation = NULL; n->query = $3; n->attlist = NIL; @@ -4212,11 +4257,10 @@ ConstraintElem: n->contype = CONSTR_NOTNULL; n->location = @1; n->keys = list_make1(makeString($3)); - /* no NOT VALID support yet */ processCASbits($4, @4, "NOT NULL", - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, &n->skip_validation, &n->is_no_inherit, yyscanner); - n->initially_valid = true; + n->initially_valid = !n->skip_validation; $$ = (Node *) n; } | UNIQUE opt_unique_null_treatment '(' columnList opt_without_overlaps ')' opt_c_include opt_definition OptConsTableSpace @@ -4334,7 +4378,7 @@ ConstraintElem: n->fk_del_set_cols = ($11)->deleteAction->cols; processCASbits($12, @12, "FOREIGN KEY", &n->deferrable, &n->initdeferred, - NULL, &n->skip_validation, NULL, + &n->is_enforced, &n->skip_validation, NULL, yyscanner); n->initially_valid = !n->skip_validation; $$ = (Node *) n; @@ -6033,6 +6077,26 @@ CreateTrigStmt: EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' { CreateTrigStmt *n = makeNode(CreateTrigStmt); + bool dummy; + + if (($11 & CAS_NOT_VALID) != 0) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("constraint triggers cannot be marked %s", + "NOT VALID"), + parser_errposition(@11)); + if (($11 & CAS_NO_INHERIT) != 0) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("constraint triggers cannot be marked %s", + "NO INHERIT"), + parser_errposition(@11)); + if (($11 & CAS_NOT_ENFORCED) != 0) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("constraint triggers cannot be marked %s", + "NOT ENFORCED"), + parser_errposition(@11)); n->replace = $2; if (n->replace) /* not supported, see CreateTrigger */ @@ -6052,7 +6116,7 @@ CreateTrigStmt: n->whenClause = $15; n->transitionRels = NIL; processCASbits($11, @11, "TRIGGER", - &n->deferrable, &n->initdeferred, NULL, + &n->deferrable, &n->initdeferred, &dummy, NULL, NULL, yyscanner); n->constrrel = $10; $$ = (Node *) n; @@ -7475,6 +7539,8 @@ fetch_args: cursor_name n->portalname = $1; n->direction = FETCH_FORWARD; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_NONE; $$ = (Node *) n; } | from_in cursor_name @@ -7484,6 +7550,19 @@ fetch_args: cursor_name n->portalname = $2; n->direction = FETCH_FORWARD; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_NONE; + $$ = (Node *) n; + } + | SignedIconst opt_from_in cursor_name + { + FetchStmt *n = makeNode(FetchStmt); + + n->portalname = $3; + n->direction = FETCH_FORWARD; + n->howMany = $1; + n->location = @1; + n->direction_keyword = FETCH_KEYWORD_NONE; $$ = (Node *) n; } | NEXT opt_from_in cursor_name @@ -7493,6 +7572,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_NEXT; $$ = (Node *) n; } | PRIOR opt_from_in cursor_name @@ -7502,6 +7583,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_BACKWARD; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_PRIOR; $$ = (Node *) n; } | FIRST_P opt_from_in cursor_name @@ -7511,6 +7594,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_ABSOLUTE; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_FIRST; $$ = (Node *) n; } | LAST_P opt_from_in cursor_name @@ -7520,6 +7605,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_ABSOLUTE; n->howMany = -1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_LAST; $$ = (Node *) n; } | ABSOLUTE_P SignedIconst opt_from_in cursor_name @@ -7529,6 +7616,8 @@ fetch_args: cursor_name n->portalname = $4; n->direction = FETCH_ABSOLUTE; n->howMany = $2; + n->location = @2; + n->direction_keyword = FETCH_KEYWORD_ABSOLUTE; $$ = (Node *) n; } | RELATIVE_P SignedIconst opt_from_in cursor_name @@ -7538,15 +7627,8 @@ fetch_args: cursor_name n->portalname = $4; n->direction = FETCH_RELATIVE; n->howMany = $2; - $$ = (Node *) n; - } - | SignedIconst opt_from_in cursor_name - { - FetchStmt *n = makeNode(FetchStmt); - - n->portalname = $3; - n->direction = FETCH_FORWARD; - n->howMany = $1; + n->location = @2; + n->direction_keyword = FETCH_KEYWORD_RELATIVE; $$ = (Node *) n; } | ALL opt_from_in cursor_name @@ -7556,6 +7638,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = FETCH_ALL; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_ALL; $$ = (Node *) n; } | FORWARD opt_from_in cursor_name @@ -7565,6 +7649,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_FORWARD; $$ = (Node *) n; } | FORWARD SignedIconst opt_from_in cursor_name @@ -7574,6 +7660,8 @@ fetch_args: cursor_name n->portalname = $4; n->direction = FETCH_FORWARD; n->howMany = $2; + n->location = @2; + n->direction_keyword = FETCH_KEYWORD_FORWARD; $$ = (Node *) n; } | FORWARD ALL opt_from_in cursor_name @@ -7583,6 +7671,8 @@ fetch_args: cursor_name n->portalname = $4; n->direction = FETCH_FORWARD; n->howMany = FETCH_ALL; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_FORWARD_ALL; $$ = (Node *) n; } | BACKWARD opt_from_in cursor_name @@ -7592,6 +7682,8 @@ fetch_args: cursor_name n->portalname = $3; n->direction = FETCH_BACKWARD; n->howMany = 1; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_BACKWARD; $$ = (Node *) n; } | BACKWARD SignedIconst opt_from_in cursor_name @@ -7601,6 +7693,8 @@ fetch_args: cursor_name n->portalname = $4; n->direction = FETCH_BACKWARD; n->howMany = $2; + n->location = @2; + n->direction_keyword = FETCH_KEYWORD_BACKWARD; $$ = (Node *) n; } | BACKWARD ALL opt_from_in cursor_name @@ -7610,6 +7704,8 @@ fetch_args: cursor_name n->portalname = $4; n->direction = FETCH_BACKWARD; n->howMany = FETCH_ALL; + n->location = -1; + n->direction_keyword = FETCH_KEYWORD_BACKWARD_ALL; $$ = (Node *) n; } ; @@ -8172,6 +8268,7 @@ defacl_privilege_target: | SEQUENCES { $$ = OBJECT_SEQUENCE; } | TYPES_P { $$ = OBJECT_TYPE; } | SCHEMAS { $$ = OBJECT_SCHEMA; } + | LARGE_P OBJECTS_P { $$ = OBJECT_LARGEOBJECT; } ; @@ -9286,7 +9383,7 @@ DropTransformStmt: DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_d *****************************************************************************/ ReindexStmt: - REINDEX opt_reindex_option_list reindex_target_relation opt_concurrently qualified_name + REINDEX opt_utility_option_list reindex_target_relation opt_concurrently qualified_name { ReindexStmt *n = makeNode(ReindexStmt); @@ -9299,7 +9396,7 @@ ReindexStmt: makeDefElem("concurrently", NULL, @4)); $$ = (Node *) n; } - | REINDEX opt_reindex_option_list SCHEMA opt_concurrently name + | REINDEX opt_utility_option_list SCHEMA opt_concurrently name { ReindexStmt *n = makeNode(ReindexStmt); @@ -9312,7 +9409,7 @@ ReindexStmt: makeDefElem("concurrently", NULL, @4)); $$ = (Node *) n; } - | REINDEX opt_reindex_option_list reindex_target_all opt_concurrently opt_single_name + | REINDEX opt_utility_option_list reindex_target_all opt_concurrently opt_single_name { ReindexStmt *n = makeNode(ReindexStmt); @@ -9334,10 +9431,6 @@ reindex_target_all: SYSTEM_P { $$ = REINDEX_OBJECT_SYSTEM; } | DATABASE { $$ = REINDEX_OBJECT_DATABASE; } ; -opt_reindex_option_list: - '(' utility_option_list ')' { $$ = $2; } - | /* EMPTY */ { $$ = NULL; } - ; /***************************************************************************** * @@ -11624,7 +11717,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'T'; + n->subtype = AD_AlterDefault; n->typeName = $3; n->def = $4; $$ = (Node *) n; @@ -11634,7 +11727,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'N'; + n->subtype = AD_DropNotNull; n->typeName = $3; $$ = (Node *) n; } @@ -11643,7 +11736,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'O'; + n->subtype = AD_SetNotNull; n->typeName = $3; $$ = (Node *) n; } @@ -11652,7 +11745,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'C'; + n->subtype = AD_AddConstraint; n->typeName = $3; n->def = $5; $$ = (Node *) n; @@ -11662,7 +11755,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'X'; + n->subtype = AD_DropConstraint; n->typeName = $3; n->name = $6; n->behavior = $7; @@ -11674,7 +11767,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'X'; + n->subtype = AD_DropConstraint; n->typeName = $3; n->name = $8; n->behavior = $9; @@ -11686,7 +11779,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'V'; + n->subtype = AD_ValidateConstraint; n->typeName = $3; n->name = $6; $$ = (Node *) n; @@ -11835,13 +11928,13 @@ ClusterStmt: n->params = $3; $$ = (Node *) n; } - | CLUSTER '(' utility_option_list ')' + | CLUSTER opt_utility_option_list { ClusterStmt *n = makeNode(ClusterStmt); n->relation = NULL; n->indexname = NULL; - n->params = $3; + n->params = $2; $$ = (Node *) n; } /* unparenthesized VERBOSE kept for pre-14 compatibility */ @@ -11851,21 +11944,18 @@ ClusterStmt: n->relation = $3; n->indexname = $4; - n->params = NIL; if ($2) - n->params = lappend(n->params, makeDefElem("verbose", NULL, @2)); + n->params = list_make1(makeDefElem("verbose", NULL, @2)); $$ = (Node *) n; } /* unparenthesized VERBOSE kept for pre-17 compatibility */ - | CLUSTER opt_verbose + | CLUSTER VERBOSE { ClusterStmt *n = makeNode(ClusterStmt); n->relation = NULL; n->indexname = NULL; - n->params = NIL; - if ($2) - n->params = lappend(n->params, makeDefElem("verbose", NULL, @2)); + n->params = list_make1(makeDefElem("verbose", NULL, @2)); $$ = (Node *) n; } /* kept for pre-8.3 compatibility */ @@ -11875,9 +11965,8 @@ ClusterStmt: n->relation = $5; n->indexname = $3; - n->params = NIL; if ($2) - n->params = lappend(n->params, makeDefElem("verbose", NULL, @2)); + n->params = list_make1(makeDefElem("verbose", NULL, @2)); $$ = (Node *) n; } ; @@ -11928,64 +12017,31 @@ VacuumStmt: VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relati } ; -AnalyzeStmt: analyze_keyword opt_verbose opt_vacuum_relation_list +AnalyzeStmt: analyze_keyword opt_utility_option_list opt_vacuum_relation_list { VacuumStmt *n = makeNode(VacuumStmt); - n->options = NIL; - if ($2) - n->options = lappend(n->options, - makeDefElem("verbose", NULL, @2)); + n->options = $2; n->rels = $3; n->is_vacuumcmd = false; $$ = (Node *) n; } - | analyze_keyword '(' utility_option_list ')' opt_vacuum_relation_list + | analyze_keyword VERBOSE opt_vacuum_relation_list { VacuumStmt *n = makeNode(VacuumStmt); - n->options = $3; - n->rels = $5; + n->options = list_make1(makeDefElem("verbose", NULL, @2)); + n->rels = $3; n->is_vacuumcmd = false; $$ = (Node *) n; } ; -utility_option_list: - utility_option_elem - { - $$ = list_make1($1); - } - | utility_option_list ',' utility_option_elem - { - $$ = lappend($1, $3); - } - ; - analyze_keyword: ANALYZE | ANALYSE /* British */ ; -utility_option_elem: - utility_option_name utility_option_arg - { - $$ = makeDefElem($1, $2, @1); - } - ; - -utility_option_name: - NonReservedWord { $$ = $1; } - | analyze_keyword { $$ = "analyze"; } - | FORMAT_LA { $$ = "format"; } - ; - -utility_option_arg: - opt_boolean_or_string { $$ = (Node *) makeString($1); } - | NumericOnly { $$ = (Node *) $1; } - | /* EMPTY */ { $$ = NULL; } - ; - opt_analyze: analyze_keyword { $$ = true; } | /*EMPTY*/ { $$ = false; } @@ -12235,7 +12291,6 @@ InsertStmt: $5->onConflictClause = $6; $5->returningClause = $7; $5->withClause = $1; - $5->stmt_location = @$; $$ = (Node *) $5; } ; @@ -12426,7 +12481,6 @@ DeleteStmt: opt_with_clause DELETE_P FROM relation_expr_opt_alias n->whereClause = $6; n->returningClause = $7; n->withClause = $1; - n->stmt_location = @$; $$ = (Node *) n; } ; @@ -12501,7 +12555,6 @@ UpdateStmt: opt_with_clause UPDATE relation_expr_opt_alias n->whereClause = $7; n->returningClause = $8; n->withClause = $1; - n->stmt_location = @$; $$ = (Node *) n; } ; @@ -12579,7 +12632,6 @@ MergeStmt: m->joinCondition = $8; m->mergeWhenClauses = $9; m->returningClause = $10; - m->stmt_location = @$; $$ = (Node *) m; } @@ -12820,20 +12872,7 @@ SelectStmt: select_no_parens %prec UMINUS ; select_with_parens: - '(' select_no_parens ')' - { - SelectStmt *n = (SelectStmt *) $2; - - /* - * As SelectStmt's location starts at the SELECT keyword, - * we need to track the length of the SelectStmt within - * parentheses to be able to extract the relevant part - * of the query. Without this, the RawStmt's length would - * be used and would include the closing parenthesis. - */ - n->stmt_len = @3 - @2; - $$ = $2; - } + '(' select_no_parens ')' { $$ = $2; } | '(' select_with_parens ')' { $$ = $2; } ; @@ -12955,7 +12994,6 @@ simple_select: n->groupDistinct = ($7)->distinct; n->havingClause = $8; n->windowClause = $9; - n->stmt_location = @1; $$ = (Node *) n; } | SELECT distinct_clause target_list @@ -12973,7 +13011,6 @@ simple_select: n->groupDistinct = ($7)->distinct; n->havingClause = $8; n->windowClause = $9; - n->stmt_location = @1; $$ = (Node *) n; } | values_clause { $$ = $1; } @@ -12994,20 +13031,19 @@ simple_select: n->targetList = list_make1(rt); n->fromClause = list_make1($2); - n->stmt_location = @1; $$ = (Node *) n; } | select_clause UNION set_quantifier select_clause { - $$ = makeSetOp(SETOP_UNION, $3 == SET_QUANTIFIER_ALL, $1, $4, @1); + $$ = makeSetOp(SETOP_UNION, $3 == SET_QUANTIFIER_ALL, $1, $4); } | select_clause INTERSECT set_quantifier select_clause { - $$ = makeSetOp(SETOP_INTERSECT, $3 == SET_QUANTIFIER_ALL, $1, $4, @1); + $$ = makeSetOp(SETOP_INTERSECT, $3 == SET_QUANTIFIER_ALL, $1, $4); } | select_clause EXCEPT set_quantifier select_clause { - $$ = makeSetOp(SETOP_EXCEPT, $3 == SET_QUANTIFIER_ALL, $1, $4, @1); + $$ = makeSetOp(SETOP_EXCEPT, $3 == SET_QUANTIFIER_ALL, $1, $4); } ; @@ -13585,7 +13621,6 @@ values_clause: { SelectStmt *n = makeNode(SelectStmt); - n->stmt_location = @1; n->valuesLists = list_make1($3); $$ = (Node *) n; } @@ -14225,7 +14260,7 @@ xmltable_column_el: parser_errposition(defel->location))); fc->colexpr = defel->arg; } - else if (strcmp(defel->defname, "is_not_null") == 0) + else if (strcmp(defel->defname, "__pg__is_not_null") == 0) { if (nullability_seen) ereport(ERROR, @@ -14268,13 +14303,20 @@ xmltable_column_option_list: xmltable_column_option_el: IDENT b_expr - { $$ = makeDefElem($1, $2, @1); } + { + if (strcmp($1, "__pg__is_not_null") == 0) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("option name \"%s\" cannot be used in XMLTABLE", $1), + parser_errposition(@1))); + $$ = makeDefElem($1, $2, @1); + } | DEFAULT b_expr { $$ = makeDefElem("default", $2, @1); } | NOT NULL_P - { $$ = makeDefElem("is_not_null", (Node *) makeBoolean(true), @1); } + { $$ = makeDefElem("__pg__is_not_null", (Node *) makeBoolean(true), @1); } | NULL_P - { $$ = makeDefElem("is_not_null", (Node *) makeBoolean(false), @1); } + { $$ = makeDefElem("__pg__is_not_null", (Node *) makeBoolean(false), @1); } | PATH b_expr { $$ = makeDefElem("path", $2, @1); } ; @@ -15275,49 +15317,50 @@ a_expr: c_expr { $$ = $1; } (Node *) list_make2($5, $7), @2); } - | a_expr IN_P in_expr + | a_expr IN_P select_with_parens { - /* in_expr returns a SubLink or a list of a_exprs */ - if (IsA($3, SubLink)) - { - /* generate foo = ANY (subquery) */ - SubLink *n = (SubLink *) $3; + /* generate foo = ANY (subquery) */ + SubLink *n = makeNode(SubLink); - n->subLinkType = ANY_SUBLINK; - n->subLinkId = 0; - n->testexpr = $1; - n->operName = NIL; /* show it's IN not = ANY */ - n->location = @2; - $$ = (Node *) n; - } - else - { - /* generate scalar IN expression */ - $$ = (Node *) makeSimpleA_Expr(AEXPR_IN, "=", $1, $3, @2); - } + n->subselect = $3; + n->subLinkType = ANY_SUBLINK; + n->subLinkId = 0; + n->testexpr = $1; + n->operName = NIL; /* show it's IN not = ANY */ + n->location = @2; + $$ = (Node *) n; } - | a_expr NOT_LA IN_P in_expr %prec NOT_LA + | a_expr IN_P '(' expr_list ')' { - /* in_expr returns a SubLink or a list of a_exprs */ - if (IsA($4, SubLink)) - { - /* generate NOT (foo = ANY (subquery)) */ - /* Make an = ANY node */ - SubLink *n = (SubLink *) $4; - - n->subLinkType = ANY_SUBLINK; - n->subLinkId = 0; - n->testexpr = $1; - n->operName = NIL; /* show it's IN not = ANY */ - n->location = @2; - /* Stick a NOT on top; must have same parse location */ - $$ = makeNotExpr((Node *) n, @2); - } - else - { - /* generate scalar NOT IN expression */ - $$ = (Node *) makeSimpleA_Expr(AEXPR_IN, "<>", $1, $4, @2); - } + /* generate scalar IN expression */ + A_Expr *n = makeSimpleA_Expr(AEXPR_IN, "=", $1, (Node *) $4, @2); + + n->rexpr_list_start = @3; + n->rexpr_list_end = @5; + $$ = (Node *) n; + } + | a_expr NOT_LA IN_P select_with_parens %prec NOT_LA + { + /* generate NOT (foo = ANY (subquery)) */ + SubLink *n = makeNode(SubLink); + + n->subselect = $4; + n->subLinkType = ANY_SUBLINK; + n->subLinkId = 0; + n->testexpr = $1; + n->operName = NIL; /* show it's IN not = ANY */ + n->location = @2; + /* Stick a NOT on top; must have same parse location */ + $$ = makeNotExpr((Node *) n, @2); + } + | a_expr NOT_LA IN_P '(' expr_list ')' + { + /* generate scalar NOT IN expression */ + A_Expr *n = makeSimpleA_Expr(AEXPR_IN, "<>", $1, (Node *) $5, @2); + + n->rexpr_list_start = @4; + n->rexpr_list_end = @6; + $$ = (Node *) n; } | a_expr subquery_Op sub_type select_with_parens %prec Op { @@ -16752,15 +16795,15 @@ type_list: Typename { $$ = list_make1($1); } array_expr: '[' expr_list ']' { - $$ = makeAArrayExpr($2, @1); + $$ = makeAArrayExpr($2, @1, @3); } | '[' array_expr_list ']' { - $$ = makeAArrayExpr($2, @1); + $$ = makeAArrayExpr($2, @1, @3); } | '[' ']' { - $$ = makeAArrayExpr(NIL, @1); + $$ = makeAArrayExpr(NIL, @1, @2); } ; @@ -16882,17 +16925,6 @@ trim_list: a_expr FROM expr_list { $$ = lappend($3, $1); } | expr_list { $$ = $1; } ; -in_expr: select_with_parens - { - SubLink *n = makeNode(SubLink); - - n->subselect = $1; - /* other fields will be filled later */ - $$ = (Node *) n; - } - | '(' expr_list ')' { $$ = (Node *) $2; } - ; - /* * Define SQL-style CASE clause. * - Full specification @@ -17877,6 +17909,7 @@ unreserved_keyword: | NOWAIT | NULLS_P | OBJECT_P + | OBJECTS_P | OF | OFF | OIDS @@ -18499,6 +18532,7 @@ bare_label_keyword: | NULLS_P | NUMERIC | OBJECT_P + | OBJECTS_P | OF | OFF | OIDS @@ -18734,47 +18768,6 @@ updateRawStmtEnd(RawStmt *rs, int end_location) rs->stmt_len = end_location - rs->stmt_location; } -/* - * Adjust a PreparableStmt to reflect that it doesn't run to the end of the - * string. - */ -static void -updatePreparableStmtEnd(Node *n, int end_location) -{ - if (IsA(n, SelectStmt)) - { - SelectStmt *stmt = (SelectStmt *) n; - - stmt->stmt_len = end_location - stmt->stmt_location; - } - else if (IsA(n, InsertStmt)) - { - InsertStmt *stmt = (InsertStmt *) n; - - stmt->stmt_len = end_location - stmt->stmt_location; - } - else if (IsA(n, UpdateStmt)) - { - UpdateStmt *stmt = (UpdateStmt *) n; - - stmt->stmt_len = end_location - stmt->stmt_location; - } - else if (IsA(n, DeleteStmt)) - { - DeleteStmt *stmt = (DeleteStmt *) n; - - stmt->stmt_len = end_location - stmt->stmt_location; - } - else if (IsA(n, MergeStmt)) - { - MergeStmt *stmt = (MergeStmt *) n; - - stmt->stmt_len = end_location - stmt->stmt_location; - } - else - elog(ERROR, "unexpected node type %d", (int) n->type); -} - static Node * makeColumnRef(char *colname, List *indirection, int location, core_yyscan_t yyscanner) @@ -19153,14 +19146,11 @@ insertSelectOptions(SelectStmt *stmt, errmsg("multiple WITH clauses not allowed"), parser_errposition(exprLocation((Node *) withClause)))); stmt->withClause = withClause; - - /* Update SelectStmt's location to the start of the WITH clause */ - stmt->stmt_location = withClause->location; } } static Node * -makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg, int location) +makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg) { SelectStmt *n = makeNode(SelectStmt); @@ -19168,7 +19158,6 @@ makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg, int location) n->all = all; n->larg = (SelectStmt *) larg; n->rarg = (SelectStmt *) rarg; - n->stmt_location = location; return (Node *) n; } @@ -19286,12 +19275,14 @@ makeNotExpr(Node *expr, int location) } static Node * -makeAArrayExpr(List *elements, int location) +makeAArrayExpr(List *elements, int location, int location_end) { A_ArrayExpr *n = makeNode(A_ArrayExpr); n->elements = elements; n->location = location; + n->list_start = location; + n->list_end = location_end; return (Node *) n; } diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 2e64fcae7b23d..9f20a70ce13cf 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -2915,7 +2915,7 @@ transformWindowDefinitions(ParseState *pstate, { SortGroupClause *sortcl; Node *sortkey; - int16 rangestrategy; + CompareType rangecmptype; if (list_length(wc->orderClause) != 1) ereport(ERROR, @@ -2928,7 +2928,7 @@ transformWindowDefinitions(ParseState *pstate, if (!get_ordering_op_properties(sortcl->sortop, &rangeopfamily, &rangeopcintype, - &rangestrategy)) + &rangecmptype)) elog(ERROR, "operator %u is not a valid ordering operator", sortcl->sortop); /* Record properties of sort ordering */ diff --git a/src/backend/parser/parse_cte.c b/src/backend/parser/parse_cte.c index 79673621c9b17..366fd901d9d5e 100644 --- a/src/backend/parser/parse_cte.c +++ b/src/backend/parser/parse_cte.c @@ -88,6 +88,7 @@ static void analyzeCTE(ParseState *pstate, CommonTableExpr *cte); /* Dependency processing functions */ static void makeDependencyGraph(CteState *cstate); static bool makeDependencyGraphWalker(Node *node, CteState *cstate); +static void WalkInnerWith(Node *stmt, WithClause *withClause, CteState *cstate); static void TopologicalSort(ParseState *pstate, CteItem *items, int numitems); /* Recursion validity checker functions */ @@ -725,58 +726,69 @@ makeDependencyGraphWalker(Node *node, CteState *cstate) if (IsA(node, SelectStmt)) { SelectStmt *stmt = (SelectStmt *) node; - ListCell *lc; if (stmt->withClause) { - if (stmt->withClause->recursive) - { - /* - * In the RECURSIVE case, all query names of the WITH are - * visible to all WITH items as well as the main query. So - * push them all on, process, pop them all off. - */ - cstate->innerwiths = lcons(stmt->withClause->ctes, - cstate->innerwiths); - foreach(lc, stmt->withClause->ctes) - { - CommonTableExpr *cte = (CommonTableExpr *) lfirst(lc); + /* Examine the WITH clause and the SelectStmt */ + WalkInnerWith(node, stmt->withClause, cstate); + /* We're done examining the SelectStmt */ + return false; + } + /* if no WITH clause, just fall through for normal processing */ + } + else if (IsA(node, InsertStmt)) + { + InsertStmt *stmt = (InsertStmt *) node; - (void) makeDependencyGraphWalker(cte->ctequery, cstate); - } - (void) raw_expression_tree_walker(node, - makeDependencyGraphWalker, - cstate); - cstate->innerwiths = list_delete_first(cstate->innerwiths); - } - else - { - /* - * In the non-RECURSIVE case, query names are visible to the - * WITH items after them and to the main query. - */ - cstate->innerwiths = lcons(NIL, cstate->innerwiths); - foreach(lc, stmt->withClause->ctes) - { - CommonTableExpr *cte = (CommonTableExpr *) lfirst(lc); - ListCell *cell1; + if (stmt->withClause) + { + /* Examine the WITH clause and the InsertStmt */ + WalkInnerWith(node, stmt->withClause, cstate); + /* We're done examining the InsertStmt */ + return false; + } + /* if no WITH clause, just fall through for normal processing */ + } + else if (IsA(node, DeleteStmt)) + { + DeleteStmt *stmt = (DeleteStmt *) node; - (void) makeDependencyGraphWalker(cte->ctequery, cstate); - /* note that recursion could mutate innerwiths list */ - cell1 = list_head(cstate->innerwiths); - lfirst(cell1) = lappend((List *) lfirst(cell1), cte); - } - (void) raw_expression_tree_walker(node, - makeDependencyGraphWalker, - cstate); - cstate->innerwiths = list_delete_first(cstate->innerwiths); - } - /* We're done examining the SelectStmt */ + if (stmt->withClause) + { + /* Examine the WITH clause and the DeleteStmt */ + WalkInnerWith(node, stmt->withClause, cstate); + /* We're done examining the DeleteStmt */ return false; } /* if no WITH clause, just fall through for normal processing */ } - if (IsA(node, WithClause)) + else if (IsA(node, UpdateStmt)) + { + UpdateStmt *stmt = (UpdateStmt *) node; + + if (stmt->withClause) + { + /* Examine the WITH clause and the UpdateStmt */ + WalkInnerWith(node, stmt->withClause, cstate); + /* We're done examining the UpdateStmt */ + return false; + } + /* if no WITH clause, just fall through for normal processing */ + } + else if (IsA(node, MergeStmt)) + { + MergeStmt *stmt = (MergeStmt *) node; + + if (stmt->withClause) + { + /* Examine the WITH clause and the MergeStmt */ + WalkInnerWith(node, stmt->withClause, cstate); + /* We're done examining the MergeStmt */ + return false; + } + /* if no WITH clause, just fall through for normal processing */ + } + else if (IsA(node, WithClause)) { /* * Prevent raw_expression_tree_walker from recursing directly into a @@ -790,6 +802,60 @@ makeDependencyGraphWalker(Node *node, CteState *cstate) cstate); } +/* + * makeDependencyGraphWalker's recursion into a statement having a WITH clause. + * + * This subroutine is concerned with updating the innerwiths list correctly + * based on the visibility rules for CTE names. + */ +static void +WalkInnerWith(Node *stmt, WithClause *withClause, CteState *cstate) +{ + ListCell *lc; + + if (withClause->recursive) + { + /* + * In the RECURSIVE case, all query names of the WITH are visible to + * all WITH items as well as the main query. So push them all on, + * process, pop them all off. + */ + cstate->innerwiths = lcons(withClause->ctes, cstate->innerwiths); + foreach(lc, withClause->ctes) + { + CommonTableExpr *cte = (CommonTableExpr *) lfirst(lc); + + (void) makeDependencyGraphWalker(cte->ctequery, cstate); + } + (void) raw_expression_tree_walker(stmt, + makeDependencyGraphWalker, + cstate); + cstate->innerwiths = list_delete_first(cstate->innerwiths); + } + else + { + /* + * In the non-RECURSIVE case, query names are visible to the WITH + * items after them and to the main query. + */ + cstate->innerwiths = lcons(NIL, cstate->innerwiths); + foreach(lc, withClause->ctes) + { + CommonTableExpr *cte = (CommonTableExpr *) lfirst(lc); + ListCell *cell1; + + (void) makeDependencyGraphWalker(cte->ctequery, cstate); + /* note that recursion could mutate innerwiths list */ + cell1 = list_head(cstate->innerwiths); + lfirst(cell1) = lappend((List *) lfirst(cell1), cte); + } + (void) raw_expression_tree_walker(stmt, + makeDependencyGraphWalker, + cstate); + cstate->innerwiths = list_delete_first(cstate->innerwiths); + } +} + /* * Sort by dependencies, using a standard topological sort operation */ diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 9caf1e481a208..e1979a80c198a 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -17,7 +17,6 @@ #include "catalog/pg_aggregate.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" @@ -1223,6 +1222,8 @@ transformAExprIn(ParseState *pstate, A_Expr *a) newa->element_typeid = scalar_type; newa->elements = aexprs; newa->multidims = false; + newa->list_start = a->rexpr_list_start; + newa->list_end = a->rexpr_list_end; newa->location = -1; result = (Node *) make_scalar_array_op(pstate, @@ -2165,6 +2166,8 @@ transformArrayExpr(ParseState *pstate, A_ArrayExpr *a, /* array_collid will be set by parse_collate.c */ newa->element_typeid = element_type; newa->elements = newcoercedelems; + newa->list_start = a->list_start; + newa->list_end = a->list_end; newa->location = a->location; return (Node *) newa; @@ -2832,7 +2835,7 @@ make_row_comparison_op(ParseState *pstate, List *opname, ListCell *l, *r; List **opinfo_lists; - Bitmapset *strats; + Bitmapset *cmptypes; int nopers; int i; @@ -2897,45 +2900,45 @@ make_row_comparison_op(ParseState *pstate, List *opname, /* * Now we must determine which row comparison semantics (= <> < <= > >=) - * apply to this set of operators. We look for btree opfamilies - * containing the operators, and see which interpretations (strategy - * numbers) exist for each operator. + * apply to this set of operators. We look for opfamilies containing the + * operators, and see which interpretations (cmptypes) exist for each + * operator. */ opinfo_lists = (List **) palloc(nopers * sizeof(List *)); - strats = NULL; + cmptypes = NULL; i = 0; foreach(l, opexprs) { Oid opno = ((OpExpr *) lfirst(l))->opno; - Bitmapset *this_strats; + Bitmapset *this_cmptypes; ListCell *j; - opinfo_lists[i] = get_op_btree_interpretation(opno); + opinfo_lists[i] = get_op_index_interpretation(opno); /* - * convert strategy numbers into a Bitmapset to make the intersection + * convert comparison types into a Bitmapset to make the intersection * calculation easy. */ - this_strats = NULL; + this_cmptypes = NULL; foreach(j, opinfo_lists[i]) { - OpBtreeInterpretation *opinfo = lfirst(j); + OpIndexInterpretation *opinfo = lfirst(j); - this_strats = bms_add_member(this_strats, opinfo->strategy); + this_cmptypes = bms_add_member(this_cmptypes, opinfo->cmptype); } if (i == 0) - strats = this_strats; + cmptypes = this_cmptypes; else - strats = bms_int_members(strats, this_strats); + cmptypes = bms_int_members(cmptypes, this_cmptypes); i++; } /* * If there are multiple common interpretations, we may use any one of - * them ... this coding arbitrarily picks the lowest btree strategy + * them ... this coding arbitrarily picks the lowest comparison type * number. */ - i = bms_next_member(strats, -1); + i = bms_next_member(cmptypes, -1); if (i < 0) { /* No common interpretation, so fail */ @@ -2969,9 +2972,9 @@ make_row_comparison_op(ParseState *pstate, List *opname, foreach(j, opinfo_lists[i]) { - OpBtreeInterpretation *opinfo = lfirst(j); + OpIndexInterpretation *opinfo = lfirst(j); - if (opinfo->strategy == cmptype) + if (opinfo->cmptype == cmptype) { opfamily = opinfo->opfamily_id; break; @@ -3772,7 +3775,7 @@ transformJsonArrayQueryConstructor(ParseState *pstate, /* Transform query only for counting target list entries. */ qpstate = make_parsestate(pstate); - query = transformStmt(qpstate, ctor->query); + query = transformStmt(qpstate, copyObject(ctor->query)); if (count_nonjunk_tlist_entries(query->targetList) != 1) ereport(ERROR, diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c index d6feb16aef375..203b7a321782d 100644 --- a/src/backend/parser/parse_node.c +++ b/src/backend/parser/parse_node.c @@ -408,7 +408,7 @@ make_const(ParseState *pstate, A_Const *aconst) typeid = INT8OID; typelen = sizeof(int64); - typebyval = FLOAT8PASSBYVAL; /* int8 and float8 alike */ + typebyval = true; } } else diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 4aba0d9d4d5cc..905c975d83b56 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -16,7 +16,6 @@ #include "catalog/namespace.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "funcapi.h" #include "miscadmin.h" #include "nodes/makefuncs.h" diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 9c1541e1fea93..afcf54169c3b3 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -1279,6 +1279,28 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla lst = RelationGetNotNullConstraints(RelationGetRelid(relation), false, true); cxt->nnconstraints = list_concat(cxt->nnconstraints, lst); + + /* Copy comments on not-null constraints */ + if (table_like_clause->options & CREATE_TABLE_LIKE_COMMENTS) + { + foreach_node(Constraint, nnconstr, lst) + { + if ((comment = GetComment(get_relation_constraint_oid(RelationGetRelid(relation), + nnconstr->conname, false), + ConstraintRelationId, + 0)) != NULL) + { + CommentStmt *stmt = makeNode(CommentStmt); + + stmt->objtype = OBJECT_TABCONSTRAINT; + stmt->object = (Node *) list_make3(makeString(cxt->relation->schemaname), + makeString(cxt->relation->relname), + makeString(nnconstr->conname)); + stmt->comment = comment; + cxt->alist = lappend(cxt->alist, stmt); + } + } + } } /* @@ -2962,8 +2984,10 @@ transformFKConstraints(CreateStmtContext *cxt, /* * If CREATE TABLE or adding a column with NULL default, we can safely - * skip validation of FK constraints, and nonetheless mark them valid. - * (This will override any user-supplied NOT VALID flag.) + * skip validation of FK constraints, and mark them as valid based on the + * constraint enforcement flag, since NOT ENFORCED constraints must always + * be marked as NOT VALID. (This will override any user-supplied NOT VALID + * flag.) */ if (skipValidation) { @@ -2972,7 +2996,7 @@ transformFKConstraints(CreateStmtContext *cxt, Constraint *constraint = (Constraint *) lfirst(fkclist); constraint->skip_validation = true; - constraint->initially_valid = true; + constraint->initially_valid = constraint->is_enforced; } } @@ -3967,7 +3991,8 @@ transformConstraintAttrs(CreateStmtContext *cxt, List *constraintList) case CONSTR_ATTR_ENFORCED: if (lastprimarycon == NULL || - lastprimarycon->contype != CONSTR_CHECK) + (lastprimarycon->contype != CONSTR_CHECK && + lastprimarycon->contype != CONSTR_FOREIGN)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("misplaced ENFORCED clause"), @@ -3983,7 +4008,8 @@ transformConstraintAttrs(CreateStmtContext *cxt, List *constraintList) case CONSTR_ATTR_NOT_ENFORCED: if (lastprimarycon == NULL || - lastprimarycon->contype != CONSTR_CHECK) + (lastprimarycon->contype != CONSTR_CHECK && + lastprimarycon->contype != CONSTR_FOREIGN)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("misplaced NOT ENFORCED clause"), diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 4bdc2941efb21..822cf4ec451a4 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -1007,9 +1007,6 @@ partition_bounds_copy(PartitionBoundInfo src, int ndatums; int nindexes; int partnatts; - bool hash_part; - int natts; - Datum *boundDatums; dest = (PartitionBoundInfo) palloc(sizeof(PartitionBoundInfoData)); @@ -1023,7 +1020,7 @@ partition_bounds_copy(PartitionBoundInfo src, dest->datums = (Datum **) palloc(sizeof(Datum *) * ndatums); - if (src->kind != NULL) + if (src->kind != NULL && ndatums > 0) { PartitionRangeDatumKind *boundKinds; @@ -1058,36 +1055,40 @@ partition_bounds_copy(PartitionBoundInfo src, * For hash partitioning, datums array will have two elements - modulus * and remainder. */ - hash_part = (key->strategy == PARTITION_STRATEGY_HASH); - natts = hash_part ? 2 : partnatts; - boundDatums = palloc(ndatums * natts * sizeof(Datum)); - - for (i = 0; i < ndatums; i++) + if (ndatums > 0) { - int j; - - dest->datums[i] = &boundDatums[i * natts]; + bool hash_part = (key->strategy == PARTITION_STRATEGY_HASH); + int natts = hash_part ? 2 : partnatts; + Datum *boundDatums = palloc(ndatums * natts * sizeof(Datum)); - for (j = 0; j < natts; j++) + for (i = 0; i < ndatums; i++) { - bool byval; - int typlen; + int j; - if (hash_part) - { - typlen = sizeof(int32); /* Always int4 */ - byval = true; /* int4 is pass-by-value */ - } - else + dest->datums[i] = &boundDatums[i * natts]; + + for (j = 0; j < natts; j++) { - byval = key->parttypbyval[j]; - typlen = key->parttyplen[j]; - } + if (dest->kind == NULL || + dest->kind[i][j] == PARTITION_RANGE_DATUM_VALUE) + { + bool byval; + int typlen; - if (dest->kind == NULL || - dest->kind[i][j] == PARTITION_RANGE_DATUM_VALUE) - dest->datums[i][j] = datumCopy(src->datums[i][j], - byval, typlen); + if (hash_part) + { + typlen = sizeof(int32); /* Always int4 */ + byval = true; /* int4 is pass-by-value */ + } + else + { + byval = key->parttypbyval[j]; + typlen = key->parttyplen[j]; + } + dest->datums[i][j] = datumCopy(src->datums[i][j], + byval, typlen); + } + } } } diff --git a/src/backend/po/es.po b/src/backend/po/es.po index 0d6dead79e038..e2593b522719a 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -12,6 +12,7 @@ # Glosario: # # character carácter +# checkpoint checkpoint # checksum suma de verificación # cluster (de la orden cluster) reordenar # command orden @@ -23,8 +24,8 @@ # lexeme lexema # locale configuración regional # to lock bloquear -# lock (sustantivo) candado -# to obtain a lock bloquear un candado +# lock (sustantivo) “lock” +# to obtain a lock bloquear un “lock” # malformed mal formado # mapping mapeo # operator class clase de operadores @@ -42,7 +43,8 @@ # rule regla de reescritura # schema esquema # to skip ignorar -# trigger disparador +# trigger “trigger” +# wait event “wait event” # window function función de ventana deslizante # # FIXME varios: @@ -60,10 +62,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL server 15\n" +"Project-Id-Version: PostgreSQL server 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:10+0000\n" -"PO-Revision-Date: 2024-05-21 13:39+0200\n" +"POT-Creation-Date: 2025-02-16 19:41+0000\n" +"PO-Revision-Date: 2025-02-17 15:18+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -73,6 +75,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: BlackCAT 1.1\n" +#: ../common/binaryheap.c:121 ../common/binaryheap.c:159 +#, c-format +msgid "out of binary heap slots" +msgstr "se acabaron los slots de “binary heap”" + #: ../common/compression.c:132 ../common/compression.c:141 #: ../common/compression.c:150 #, c-format @@ -99,8 +106,7 @@ msgid "value for compression option \"%s\" must be an integer" msgstr "el valor para la opción de compresión «%s» debe ser un entero" #: ../common/compression.c:331 -#, fuzzy, c-format -#| msgid "value for compression option \"%s\" must be a boolean" +#, c-format msgid "value for compression option \"%s\" must be a Boolean value" msgstr "el valor para la opción de compresión «%s» debe ser un booleano" @@ -131,64 +137,66 @@ msgstr "el algoritmo de compresión «%s» no acepta modo de larga distancia" msgid "not recorded" msgstr "no registrado" -#: ../common/controldata_utils.c:69 ../common/controldata_utils.c:73 -#: commands/copyfrom.c:1669 commands/extension.c:3456 utils/adt/genfile.c:123 +#: ../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 "no se pudo abrir archivo «%s» para lectura: %m" -#: ../common/controldata_utils.c:84 ../common/controldata_utils.c:86 +#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1346 access/transam/xlog.c:3193 -#: access/transam/xlog.c:3996 access/transam/xlogrecovery.c:1199 -#: access/transam/xlogrecovery.c:1291 access/transam/xlogrecovery.c:1328 -#: access/transam/xlogrecovery.c:1388 backup/basebackup.c:1842 -#: commands/extension.c:3466 libpq/hba.c:791 replication/logical/origin.c:745 -#: replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5050 -#: replication/logical/snapbuild.c:2027 replication/slot.c:1946 -#: replication/slot.c:1987 replication/walsender.c:643 +#: 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:984 utils/cache/relmapper.c:827 +#: 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 "no se pudo leer el archivo «%s»: %m" -#: ../common/controldata_utils.c:92 ../common/controldata_utils.c:95 -#: access/transam/xlog.c:3198 access/transam/xlog.c:4001 -#: backup/basebackup.c:1846 replication/logical/origin.c:750 -#: replication/logical/origin.c:789 replication/logical/snapbuild.c:2032 -#: replication/slot.c:1950 replication/slot.c:1991 replication/walsender.c:648 -#: utils/cache/relmapper.c:831 +#: ../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 "no se pudo leer el archivo «%s»: leídos %d de %zu" -#: ../common/controldata_utils.c:104 ../common/controldata_utils.c:108 -#: ../common/controldata_utils.c:233 ../common/controldata_utils.c:236 -#: access/heap/rewriteheap.c:1175 access/heap/rewriteheap.c:1280 +#: ../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:1358 -#: access/transam/twophase.c:1770 access/transam/xlog.c:3039 -#: access/transam/xlog.c:3233 access/transam/xlog.c:3238 -#: access/transam/xlog.c:3374 access/transam/xlog.c:3966 -#: access/transam/xlog.c:4885 commands/copyfrom.c:1729 commands/copyto.c:332 +#: 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:5102 -#: replication/logical/snapbuild.c:1798 replication/logical/snapbuild.c:1922 -#: replication/slot.c:1837 replication/slot.c:1998 replication/walsender.c:658 -#: storage/file/copydir.c:208 storage/file/copydir.c:213 storage/file/fd.c:739 -#: storage/file/fd.c:3650 storage/file/fd.c:3756 utils/cache/relmapper.c:839 -#: utils/cache/relmapper.c:945 +#: 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" msgstr "no se pudo cerrar el archivo «%s»: %m" -#: ../common/controldata_utils.c:124 +#: ../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "discordancia en orden de bytes" -#: ../common/controldata_utils.c:126 +#: ../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -202,141 +210,157 @@ msgstr "" "serían erróneos, y la instalación de PostgreSQL sería incompatible con este\n" "directorio de datos." -#: ../common/controldata_utils.c:181 ../common/controldata_utils.c:186 -#: ../common/file_utils.c:228 ../common/file_utils.c:287 -#: ../common/file_utils.c:361 access/heap/rewriteheap.c:1263 -#: access/transam/timeline.c:111 access/transam/timeline.c:251 -#: access/transam/timeline.c:348 access/transam/twophase.c:1302 -#: access/transam/xlog.c:2946 access/transam/xlog.c:3109 -#: access/transam/xlog.c:3148 access/transam/xlog.c:3341 -#: access/transam/xlog.c:3986 access/transam/xlogrecovery.c:4179 -#: access/transam/xlogrecovery.c:4282 access/transam/xlogutils.c:838 -#: backup/basebackup.c:538 backup/basebackup.c:1512 libpq/hba.c:651 -#: postmaster/syslogger.c:1560 replication/logical/origin.c:735 -#: replication/logical/reorderbuffer.c:3706 -#: replication/logical/reorderbuffer.c:4257 -#: replication/logical/reorderbuffer.c:5030 -#: replication/logical/snapbuild.c:1753 replication/logical/snapbuild.c:1863 -#: replication/slot.c:1918 replication/walsender.c:616 -#: replication/walsender.c:2731 storage/file/copydir.c:151 -#: storage/file/fd.c:714 storage/file/fd.c:3407 storage/file/fd.c:3637 -#: storage/file/fd.c:3727 storage/smgr/md.c:660 utils/cache/relmapper.c:816 -#: utils/cache/relmapper.c:924 utils/error/elog.c:2082 -#: utils/init/miscinit.c:1530 utils/init/miscinit.c:1664 -#: utils/init/miscinit.c:1741 utils/misc/guc.c:4600 utils/misc/guc.c:4650 +#: ../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 "no se pudo abrir el archivo «%s»: %m" -#: ../common/controldata_utils.c:202 ../common/controldata_utils.c:205 -#: access/transam/twophase.c:1743 access/transam/twophase.c:1752 -#: access/transam/xlog.c:8751 access/transam/xlogfuncs.c:708 -#: backup/basebackup_server.c:175 backup/basebackup_server.c:268 -#: postmaster/postmaster.c:5570 postmaster/syslogger.c:1571 -#: postmaster/syslogger.c:1584 postmaster/syslogger.c:1597 -#: utils/cache/relmapper.c:936 +#: ../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 "no se pudo escribir el archivo «%s»: %m" -#: ../common/controldata_utils.c:219 ../common/controldata_utils.c:224 -#: ../common/file_utils.c:299 ../common/file_utils.c:369 -#: access/heap/rewriteheap.c:959 access/heap/rewriteheap.c:1169 -#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1764 -#: access/transam/xlog.c:3032 access/transam/xlog.c:3227 -#: access/transam/xlog.c:3959 access/transam/xlog.c:8141 -#: access/transam/xlog.c:8186 backup/basebackup_server.c:209 -#: replication/logical/snapbuild.c:1791 replication/slot.c:1823 -#: replication/slot.c:1928 storage/file/fd.c:731 storage/file/fd.c:3748 -#: storage/smgr/md.c:1132 storage/smgr/md.c:1177 storage/sync/sync.c:453 -#: utils/misc/guc.c:4370 +#: ../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 "no se pudo sincronizar (fsync) archivo «%s»: %m" -#: ../common/cryptohash.c:261 ../common/cryptohash_openssl.c:133 -#: ../common/cryptohash_openssl.c:332 ../common/exec.c:550 ../common/exec.c:595 -#: ../common/exec.c:687 ../common/hmac.c:309 ../common/hmac.c:325 -#: ../common/hmac_openssl.c:132 ../common/hmac_openssl.c:327 -#: ../common/md5_common.c:155 ../common/psprintf.c:143 -#: ../common/scram-common.c:258 ../common/stringinfo.c:305 ../port/path.c:751 -#: ../port/path.c:789 ../port/path.c:806 access/transam/twophase.c:1411 -#: access/transam/xlogrecovery.c:589 lib/dshash.c:253 libpq/auth.c:1345 -#: libpq/auth.c:1389 libpq/auth.c:1946 libpq/be-secure-gssapi.c:524 -#: postmaster/bgworker.c:352 postmaster/bgworker.c:934 -#: postmaster/postmaster.c:2534 postmaster/postmaster.c:4127 -#: postmaster/postmaster.c:5495 postmaster/postmaster.c:5866 -#: replication/libpqwalreceiver/libpqwalreceiver.c:308 -#: replication/logical/logical.c:208 replication/walsender.c:686 -#: storage/buffer/localbuf.c:601 storage/file/fd.c:823 storage/file/fd.c:1354 -#: storage/file/fd.c:1515 storage/file/fd.c:2428 storage/ipc/procarray.c:1449 -#: storage/ipc/procarray.c:2232 storage/ipc/procarray.c:2239 -#: storage/ipc/procarray.c:2738 storage/ipc/procarray.c:3374 -#: utils/adt/formatting.c:1690 utils/adt/formatting.c:1812 -#: utils/adt/formatting.c:1935 utils/adt/pg_locale.c:469 -#: utils/adt/pg_locale.c:633 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:514 -#: utils/hash/dynahash.c:614 utils/hash/dynahash.c:1111 utils/mb/mbutils.c:402 -#: utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 -#: utils/misc/guc.c:640 utils/misc/guc.c:665 utils/misc/guc.c:1053 -#: utils/misc/guc.c:4348 utils/misc/tzparser.c:476 utils/mmgr/aset.c:445 -#: utils/mmgr/dsa.c:713 utils/mmgr/dsa.c:735 utils/mmgr/dsa.c:816 -#: utils/mmgr/generation.c:205 utils/mmgr/mcxt.c:1046 utils/mmgr/mcxt.c:1082 -#: utils/mmgr/mcxt.c:1120 utils/mmgr/mcxt.c:1158 utils/mmgr/mcxt.c:1246 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/mcxt.c:1313 utils/mmgr/mcxt.c:1502 -#: utils/mmgr/mcxt.c:1547 utils/mmgr/mcxt.c:1604 utils/mmgr/slab.c:366 +#: ../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 "memoria agotada" #: ../common/cryptohash.c:266 ../common/cryptohash.c:272 -#: ../common/cryptohash_openssl.c:344 ../common/cryptohash_openssl.c:352 -#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:339 -#: ../common/hmac_openssl.c:347 +#: ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 +#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 +#: ../common/hmac_openssl.c:377 msgid "success" msgstr "éxito" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:346 -#: ../common/hmac_openssl.c:341 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 +#: ../common/hmac_openssl.c:371 msgid "destination buffer too small" msgstr "el búfer de destino es demasiado pequeño" -#: ../common/cryptohash_openssl.c:348 ../common/hmac_openssl.c:343 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 msgid "OpenSSL failure" msgstr "falla de openSSL" -#: ../common/exec.c:172 +#: ../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binario «%s» no válido: %m" -#: ../common/exec.c:215 +#: ../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "no se pudo leer el binario «%s»: %m" -#: ../common/exec.c:223 +#: ../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../common/exec.c:250 +#: ../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "no se pudo resolver la ruta «%s» a forma absoluta: %m" -#: ../common/exec.c:412 libpq/pqcomm.c:728 storage/ipc/latch.c:1128 -#: storage/ipc/latch.c:1308 storage/ipc/latch.c:1541 storage/ipc/latch.c:1703 -#: storage/ipc/latch.c:1829 +#: ../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 "no se pudo ejecutar la orden «%s»: %m" + +#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "no se pudo leer desde la orden «%s»: %m" + +#: ../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "la orden «%s» no retornó datos" + +#: ../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() falló: %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:791 -#: ../port/path.c:808 utils/misc/ps_status.c:168 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:203 utils/misc/ps_status.c:211 +#: ../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 "memoria agotada\n" @@ -346,39 +370,51 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:447 -#: ../common/file_utils.c:451 access/transam/twophase.c:1314 -#: access/transam/xlogarchive.c:112 access/transam/xlogarchive.c:229 -#: backup/basebackup.c:346 backup/basebackup.c:544 backup/basebackup.c:615 -#: commands/copyfrom.c:1679 commands/copyto.c:702 commands/extension.c:3445 -#: commands/tablespace.c:810 commands/tablespace.c:899 postmaster/pgarch.c:590 -#: replication/logical/snapbuild.c:1649 storage/file/fd.c:1879 -#: storage/file/fd.c:1965 storage/file/fd.c:3461 utils/adt/dbsize.c:106 -#: utils/adt/dbsize.c:258 utils/adt/dbsize.c:338 utils/adt/genfile.c:483 -#: utils/adt/genfile.c:658 utils/adt/misc.c:340 +#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" + +#: ../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 "no se pudo hacer stat al archivo «%s»: %m" -#: ../common/file_utils.c:162 ../common/pgfnames.c:48 ../common/rmtree.c:63 -#: commands/tablespace.c:734 commands/tablespace.c:744 -#: postmaster/postmaster.c:1561 storage/file/fd.c:2830 -#: storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "esta instalación no soporta el método de sync «%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: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 "no se pudo abrir el directorio «%s»: %m" -#: ../common/file_utils.c:196 ../common/pgfnames.c:69 ../common/rmtree.c:104 -#: storage/file/fd.c:2842 +#: ../common/file_utils.c:169 ../common/file_utils.c:315 +#: ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: ../common/file_utils.c:379 access/transam/xlogarchive.c:383 -#: postmaster/pgarch.c:746 postmaster/syslogger.c:1608 -#: replication/logical/snapbuild.c:1810 replication/slot.c:723 -#: replication/slot.c:1709 replication/slot.c:1851 storage/file/fd.c:749 -#: utils/time/snapmgr.c:1284 +#: ../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 "no se pudo renombrar el archivo de «%s» a «%s»: %m" @@ -387,90 +423,102 @@ msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" msgid "internal error" msgstr "error interno" -#: ../common/jsonapi.c:1144 +#: ../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "El parser recursivo descendiente no puede usar el lexer incremental." + +#: ../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "El parser incremental requiere el lexer incremental." + +#: ../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON anidado demasiado profundamente, profundidad máxima es 6400." + +#: ../common/jsonapi.c:2127 #, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "La secuencia de escape «%s» no es válida." +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "La secuencia de escape «\\%.*s» no es válida." -#: ../common/jsonapi.c:1147 +#: ../common/jsonapi.c:2131 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Los caracteres con valor 0x%02x deben ser escapados." -#: ../common/jsonapi.c:1150 +#: ../common/jsonapi.c:2135 #, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "Se esperaba el fin de la entrada, se encontró «%s»." +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Se esperaba el fin de la entrada, se encontró «%.*s»." -#: ../common/jsonapi.c:1153 +#: ../common/jsonapi.c:2138 #, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Se esperaba un elemento de array o «]», se encontró «%.*s»." -#: ../common/jsonapi.c:1156 +#: ../common/jsonapi.c:2141 #, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "Se esperaba «,» o «]», se encontró «%s»." +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Se esperaba «,» o «]», se encontró «%.*s»." -#: ../common/jsonapi.c:1159 +#: ../common/jsonapi.c:2144 #, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "Se esperaba «:», se encontró «%s»." +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Se esperaba «:», se encontró «%.*s»." -#: ../common/jsonapi.c:1162 +#: ../common/jsonapi.c:2147 #, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "Se esperaba un valor JSON, se encontró «%s»." +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Se esperaba un valor JSON, se encontró «%.*s»." -#: ../common/jsonapi.c:1165 +#: ../common/jsonapi.c:2150 msgid "The input string ended unexpectedly." msgstr "La cadena de entrada terminó inesperadamente." -#: ../common/jsonapi.c:1167 +#: ../common/jsonapi.c:2152 #, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "Se esperaba una cadena o «}», se encontró «%s»." +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Se esperaba una cadena o «}», se encontró «%.*s»." -#: ../common/jsonapi.c:1170 +#: ../common/jsonapi.c:2155 #, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "Se esperaba «,» o «}», se encontró «%s»." +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Se esperaba «,» o «}», se encontró «%.*s»." -#: ../common/jsonapi.c:1173 +#: ../common/jsonapi.c:2158 #, c-format -msgid "Expected string, but found \"%s\"." -msgstr "Se esperaba una cadena, se encontró «%s»." +msgid "Expected string, but found \"%.*s\"." +msgstr "Se esperaba una cadena, se encontró «%.*s»." -#: ../common/jsonapi.c:1176 +#: ../common/jsonapi.c:2161 #, c-format -msgid "Token \"%s\" is invalid." -msgstr "El elemento «%s» no es válido." +msgid "Token \"%.*s\" is invalid." +msgstr "El elemento «%.*s» no es válido." -#: ../common/jsonapi.c:1179 jsonpath_scan.l:597 +#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 no puede ser convertido a text." -#: ../common/jsonapi.c:1181 +#: ../common/jsonapi.c:2166 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." -#: ../common/jsonapi.c:1184 +#: ../common/jsonapi.c:2169 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Los valores de escape Unicode no se pueden utilizar para valores de código superiores a 007F cuando la codificación no es UTF8." -#: ../common/jsonapi.c:1187 +#: ../common/jsonapi.c:2178 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "El valor de escape Unicode no pudo ser traducido a la codificación del servidor %s." -#: ../common/jsonapi.c:1190 jsonpath_scan.l:630 +#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." -#: ../common/jsonapi.c:1192 jsonpath_scan.l:641 jsonpath_scan.l:651 -#: jsonpath_scan.l:702 +#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." @@ -495,11 +543,168 @@ msgstr "detalle: " msgid "hint: " msgstr "consejo: " +#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "no se pudo inicializar la suma de verificación del manifiesto" + +#: ../common/parse_manifest.c:203 ../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "el manifiesto terminó inesperadamente" + +#: ../common/parse_manifest.c:209 ../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "no se pudo actualizar la suma de verificación del manifiesto" + +#: ../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "inicio de objeto inesperado" + +#: ../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "fin de objeto inesperado" + +#: ../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "inicio de array inesperado" + +#: ../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "fin de array inesperado" + +#: ../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "se esperaba indicador de versión" + +#: ../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "campo de nivel superior no reconocido" + +#: ../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "campo de archivo inesperado" + +#: ../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "campo de rango de WAL inesperado" + +#: ../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "campo de objeto inesperado" + +#: ../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "escalar inesperado" + +#: ../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "la versión de manifiesto no es un número entero" + +#: ../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "versión de manifiesto inesperada" + +#: ../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "el identificador de sistema en el manifiesto no es un número entero" + +#: ../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "ruta de archivo faltante" + +#: ../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "hay ambos ruta de archivo (path name) y ruta codificada (encoded path name)" + +#: ../common/parse_manifest.c:666 +msgid "missing size" +msgstr "tamaño faltante" + +#: ../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "suma de comprobación sin algoritmo" + +#: ../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "no se pudo decodificar el nombre del archivo" + +#: ../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "el tamaño del archivo no es un número entero" + +#: ../common/parse_manifest.c:699 backup/basebackup.c:870 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "algoritmo de suma de comprobación no reconocido: \"%s\"" + +#: ../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "suma de comprobación no válida para el archivo \"%s\": \"%s\"" + +#: ../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "falta el timeline" + +#: ../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "falta el LSN de inicio" + +#: ../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "falta el LSN de término" + +#: ../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "el timeline no es un número entero" + +#: ../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "no se pudo interpretar el LSN de inicio" + +#: ../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "no se pudo interpretar el LSN de término" + +#: ../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "esperado al menos 2 líneas" + +#: ../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "última línea no termina en nueva línea" + +#: ../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "no se pudo finalizar la suma de verificación del manifiesto" + +#: ../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "el manifiesto no tiene suma de comprobación" + +#: ../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "suma de comprobación de manifiesto no válida: \"%s\"" + +#: ../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "discordancia en la suma de comprobación del manifiesto" + +#: ../common/parse_manifest.c:891 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" + #: ../common/percentrepl.c:79 ../common/percentrepl.c:85 #: ../common/percentrepl.c:118 ../common/percentrepl.c:124 -#: postmaster/postmaster.c:2208 utils/misc/guc.c:3118 utils/misc/guc.c:3154 -#: utils/misc/guc.c:3224 utils/misc/guc.c:4547 utils/misc/guc.c:6721 -#: utils/misc/guc.c:6762 +#: 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 "valor no válido para el parámetro «%s»: «%s»" @@ -510,10 +715,9 @@ msgid "String ends unexpectedly after escape character \"%%\"." msgstr "La cadena termina inesperadamente luego del carácter de escape: «%%»" #: ../common/percentrepl.c:119 ../common/percentrepl.c:125 -#, fuzzy, c-format -#| msgid "String contains unexpected escape sequence \"%c\"." +#, c-format msgid "String contains unexpected placeholder \"%%%c\"." -msgstr "La cadena contiene la secuencia de escape inesperada «%c»." +msgstr "La cadena contiene la secuencia de reemplazo inesperada «%c»." #: ../common/pgfnames.c:74 #, c-format @@ -560,45 +764,45 @@ msgstr "no se pudo re-ejecutar con el token restringido: código de error %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "no se pudo obtener el código de salida del subproceso»: código de error %lu" -#: ../common/rmtree.c:95 access/heap/rewriteheap.c:1248 -#: access/transam/twophase.c:1703 access/transam/xlogarchive.c:120 -#: access/transam/xlogarchive.c:393 postmaster/postmaster.c:1143 -#: postmaster/syslogger.c:1537 replication/logical/origin.c:591 -#: replication/logical/reorderbuffer.c:4526 -#: replication/logical/snapbuild.c:1691 replication/logical/snapbuild.c:2121 -#: replication/slot.c:1902 storage/file/fd.c:789 storage/file/fd.c:3275 -#: storage/file/fd.c:3337 storage/file/reinit.c:262 storage/ipc/dsm.c:316 -#: storage/smgr/md.c:380 storage/smgr/md.c:439 storage/sync/sync.c:250 -#: utils/time/snapmgr.c:1608 +#: ../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" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: ../common/rmtree.c:122 commands/tablespace.c:773 commands/tablespace.c:786 -#: commands/tablespace.c:821 commands/tablespace.c:911 storage/file/fd.c:3267 -#: storage/file/fd.c:3676 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 +#: commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 +#: storage/file/fd.c:3779 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" -#: ../common/scram-common.c:271 +#: ../common/scram-common.c:281 msgid "could not encode salt" msgstr "no se pudo codificar la sal" -#: ../common/scram-common.c:287 +#: ../common/scram-common.c:297 msgid "could not encode stored key" msgstr "no se pudo codificar la llave almacenada" -#: ../common/scram-common.c:304 +#: ../common/scram-common.c:314 msgid "could not encode server key" msgstr "no se pudo codificar la llave del servidor" -#: ../common/stringinfo.c:306 +#: ../common/stringinfo.c:315 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "No se puede agrandar el búfer de cadena que ya tiene %d bytes en %d bytes adicionales." -#: ../common/stringinfo.c:310 +#: ../common/stringinfo.c:319 #, c-format msgid "" "out of memory\n" @@ -614,7 +818,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "no se pudo encontrar el ID de usuario efectivo %ld: %s" -#: ../common/username.c:45 libpq/auth.c:1881 +#: ../common/username.c:45 libpq/auth.c:1888 msgid "user does not exist" msgstr "usuario no existe" @@ -706,22 +910,22 @@ msgstr "Reintentando durante 30 segundos." msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "Es posible que tenga antivirus, sistema de respaldos, o software similar interfiriendo con el sistema de bases de datos." -#: ../port/path.c:775 +#: ../port/path.c:852 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "no se pudo obtener el directorio de trabajo actual: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "no se pudo obtener el directorio de trabajo actual: %m\n" #: ../port/strerror.c:72 #, c-format msgid "operating system error %d" msgstr "error %d de sistema operativo" -#: ../port/thread.c:50 ../port/thread.c:86 +#: ../port/user.c:43 ../port/user.c:79 #, c-format msgid "could not look up local user ID %d: %s" msgstr "no se pudo buscar el usuario local de ID %d: %s" -#: ../port/thread.c:55 ../port/thread.c:91 +#: ../port/user.c:48 ../port/user.c:84 #, c-format msgid "local user with ID %d does not exist" msgstr "no existe un usuario local con ID %d" @@ -741,115 +945,104 @@ msgstr "no se pudo obtener el SID del grupo PowerUsers: código de error %lu\n" msgid "could not check access token membership: error code %lu\n" msgstr "no se pudo verificar el token de proceso: código de error %lu\n" -#: access/brin/brin.c:216 +#: access/brin/brin.c:405 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "petición para sumarización BRIN de rango para el índice «%s» página %u no fue registrada" -#: access/brin/brin.c:1036 access/brin/brin.c:1137 access/gin/ginfast.c:1035 -#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:214 -#: access/transam/xlogfuncs.c:247 access/transam/xlogfuncs.c:286 -#: access/transam/xlogfuncs.c:307 access/transam/xlogfuncs.c:328 -#: access/transam/xlogfuncs.c:398 access/transam/xlogfuncs.c:456 +#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 +#: access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 +#: access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 +#: access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 #, c-format msgid "recovery is in progress" msgstr "la recuperación está en proceso" -#: access/brin/brin.c:1037 access/brin/brin.c:1138 +#: access/brin/brin.c:1386 access/brin/brin.c:1494 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Las funciones de control de BRIN no pueden ejecutarse durante la recuperación." -#: access/brin/brin.c:1042 access/brin/brin.c:1143 +#: access/brin/brin.c:1391 access/brin/brin.c:1499 #, c-format msgid "block number out of range: %lld" msgstr "número de bloque fuera de rango: %lld" -#: access/brin/brin.c:1086 access/brin/brin.c:1169 +#: access/brin/brin.c:1436 access/brin/brin.c:1525 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "«%s» no es un índice BRIN" -#: access/brin/brin.c:1102 access/brin/brin.c:1185 +#: access/brin/brin.c:1452 access/brin/brin.c:1541 #, c-format msgid "could not open parent table of index \"%s\"" msgstr "no se pudo abrir la tabla padre del índice «%s»" -#: access/brin/brin_bloom.c:750 access/brin/brin_bloom.c:792 -#: access/brin/brin_minmax_multi.c:3011 access/brin/brin_minmax_multi.c:3148 -#: statistics/dependencies.c:663 statistics/dependencies.c:716 -#: statistics/mcv.c:1484 statistics/mcv.c:1515 statistics/mvdistinct.c:344 -#: statistics/mvdistinct.c:397 utils/adt/pseudotypes.c:43 -#: utils/adt/pseudotypes.c:77 utils/adt/tsgistidx.c:93 +#: access/brin/brin.c:1461 access/brin/brin.c:1557 access/gin/ginfast.c:1085 +#: parser/parse_utilcmd.c:2277 #, c-format -msgid "cannot accept a value of type %s" -msgstr "no se puede aceptar un valor de tipo %s" +msgid "index \"%s\" is not valid" +msgstr "el índice «%s» no es válido" -#: access/brin/brin_minmax_multi.c:2171 access/brin/brin_minmax_multi.c:2178 -#: access/brin/brin_minmax_multi.c:2185 utils/adt/timestamp.c:941 -#: utils/adt/timestamp.c:1518 utils/adt/timestamp.c:2708 -#: utils/adt/timestamp.c:2778 utils/adt/timestamp.c:2795 -#: utils/adt/timestamp.c:2848 utils/adt/timestamp.c:2887 -#: utils/adt/timestamp.c:3184 utils/adt/timestamp.c:3189 -#: utils/adt/timestamp.c:3194 utils/adt/timestamp.c:3244 -#: utils/adt/timestamp.c:3251 utils/adt/timestamp.c:3258 -#: utils/adt/timestamp.c:3278 utils/adt/timestamp.c:3285 -#: utils/adt/timestamp.c:3292 utils/adt/timestamp.c:3322 -#: utils/adt/timestamp.c:3330 utils/adt/timestamp.c:3374 -#: utils/adt/timestamp.c:3796 utils/adt/timestamp.c:3920 -#: utils/adt/timestamp.c:4440 +#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 +#: access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 +#: statistics/dependencies.c:661 statistics/dependencies.c:714 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 +#: utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format -msgid "interval out of range" -msgstr "interval fuera de rango" +msgid "cannot accept a value of type %s" +msgstr "no se puede aceptar un valor de tipo %s" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 -#: access/brin/brin_pageops.c:852 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1442 access/spgist/spgdoinsert.c:2002 -#: access/spgist/spgdoinsert.c:2279 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 +#: access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 +#: access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 +#: access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "el tamaño de fila de índice %zu excede el máximo %zu para el índice «%s»" -#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 +#: access/brin/brin_revmap.c:383 access/brin/brin_revmap.c:389 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "índice BRIN corrompido: mapa de rango inconsistente" -#: access/brin/brin_revmap.c:593 +#: access/brin/brin_revmap.c:583 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "tipo de página 0x%04X inesperado en el índice BRIN «%s» bloque %u" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 +#: access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 #: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "familia de operadores «%s» de método de acceso %s contiene la función %s con número de soporte %d no válido" -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 +#: access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 #: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "familia de operadores «%s» de método de acceso %s contiene la función %s con signatura incorrecta para el número de soporte %d" -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 +#: access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 #: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "familia de operadores «%s» de método de acceso %s contiene el operador %s con número de estrategia %d no válido" -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 #: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 #: access/spgist/spgvalidate.c:237 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "familia de operadores «%s» de método de acceso %s contiene especificación ORDER BY no válida para el operador %s" -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 +#: access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 #: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" @@ -872,38 +1065,38 @@ msgstr "la(s) función/funciones de soporte para los tipos %3$s y %4$s faltan de msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "faltan operadores de la clase de operadores «%s» del método de acceso %s" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:274 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 +#: access/gist/gistvalidate.c:273 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "falta la función de soporte %3$d de la clase de operadores «%1$s» del método de acceso %2$s" -#: access/common/attmap.c:122 +#: access/common/attmap.c:121 #, c-format msgid "Returned type %s does not match expected type %s in column %d." msgstr "El tipo retornado %s no coincide con el tipo de registro esperado %s en la columna %d." -#: access/common/attmap.c:150 +#: access/common/attmap.c:149 #, c-format msgid "Number of returned columns (%d) does not match expected column count (%d)." msgstr "La cantidad de columnas retornadas (%d) no coincide con la cantidad esperada de columnas (%d)." -#: access/common/attmap.c:234 access/common/attmap.c:246 +#: access/common/attmap.c:233 access/common/attmap.c:245 #, c-format msgid "could not convert row type" msgstr "no se pudo convertir el tipo de registro" -#: access/common/attmap.c:235 +#: access/common/attmap.c:234 #, c-format msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." msgstr "El atributo «%s» de tipo %s no coincide con el atributo correspondiente de tipo %s." -#: access/common/attmap.c:247 +#: access/common/attmap.c:246 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "El atributo «%s» de tipo %s no existe en el tipo %s." -#: access/common/heaptuple.c:1036 access/common/heaptuple.c:1371 +#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "el número de columnas (%d) excede el límite (%d)" @@ -913,124 +1106,110 @@ msgstr "el número de columnas (%d) excede el límite (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "el número de columnas del índice (%d) excede el límite (%d)" -#: access/common/indextuple.c:209 access/spgist/spgutils.c:950 +#: access/common/indextuple.c:209 access/spgist/spgutils.c:970 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "fila de índice requiere %zu bytes, tamaño máximo es %zu" -#: access/common/printtup.c:292 tcop/fastpath.c:107 tcop/fastpath.c:454 -#: tcop/postgres.c:1944 +#: 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 "código de formato no soportado: %d" -#: access/common/reloptions.c:521 access/common/reloptions.c:532 +#: access/common/reloptions.c:519 access/common/reloptions.c:530 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Los valores aceptables son «on», «off» y «auto»." -#: access/common/reloptions.c:543 +#: access/common/reloptions.c:541 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "Los valores aceptables son «local» y «cascaded»." -#: access/common/reloptions.c:691 +#: access/common/reloptions.c:689 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "el límite de tipos de parámetros de relación definidos por el usuario ha sido excedido" -#: access/common/reloptions.c:1233 +#: access/common/reloptions.c:1231 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET no debe incluir valores de parámetros" -#: access/common/reloptions.c:1265 +#: access/common/reloptions.c:1263 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "espacio de nombre de parámetro «%s» no reconocido" -#: access/common/reloptions.c:1302 commands/variable.c:1167 +#: access/common/reloptions.c:1300 commands/variable.c:1214 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "las tablas declaradas WITH OIDS no están soportadas" -#: access/common/reloptions.c:1470 +#: access/common/reloptions.c:1468 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "parámetro «%s» no reconocido" -#: access/common/reloptions.c:1582 +#: access/common/reloptions.c:1580 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "el parámetro «%s» fue especificado más de una vez" -#: access/common/reloptions.c:1598 +#: access/common/reloptions.c:1596 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "valor no válido para la opción booleana «%s»: «%s»" -#: access/common/reloptions.c:1610 +#: access/common/reloptions.c:1608 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "valor no válido para la opción entera «%s»: «%s»" -#: access/common/reloptions.c:1616 access/common/reloptions.c:1636 +#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "el valor %s está fuera del rango de la opción «%s»" -#: access/common/reloptions.c:1618 +#: access/common/reloptions.c:1616 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Los valores aceptables están entre «%d» y «%d»." -#: access/common/reloptions.c:1630 +#: access/common/reloptions.c:1628 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "valor no válido para la opción de coma flotante «%s»: «%s»" -#: access/common/reloptions.c:1638 +#: access/common/reloptions.c:1636 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Valores aceptables están entre «%f» y «%f»." -#: access/common/reloptions.c:1660 +#: access/common/reloptions.c:1658 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "valor no válido para la opción enum «%s»: %s" -#: access/common/reloptions.c:1991 -#, fuzzy, c-format -#| msgid "cannot truncate only a partitioned table" +#: access/common/reloptions.c:1989 +#, c-format msgid "cannot specify storage parameters for a partitioned table" -msgstr "no se puede truncar ONLY una tabla particionada" +msgstr "no se puede especificar parámetros de almacenamiento para una tabla particionada" -#: access/common/reloptions.c:1992 +#: access/common/reloptions.c:1990 #, c-format -msgid "Specify storage parameters for its leaf partitions, instead." -msgstr "" +msgid "Specify storage parameters for its leaf partitions instead." +msgstr "Especifique parámetros de almacenamiento para sus particiones hijas en su lugar." -#: access/common/toast_compression.c:33 +#: access/common/toast_compression.c:31 #, c-format msgid "compression method lz4 not supported" msgstr "el método de compresión lz4 no está soportado" -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:32 #, c-format msgid "This functionality requires the server to be built with lz4 support." msgstr "Esta funcionalidad requiere que el servidor haya sido construido con soporte lz4." -#: access/common/tupdesc.c:837 commands/tablecmds.c:6953 -#: commands/tablecmds.c:12973 -#, fuzzy, c-format -#| msgid "mismatched array dimensions" -msgid "too many array dimensions" -msgstr "las dimensiones de array no coinciden" - -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1912 -#, c-format -msgid "column \"%s\" cannot be declared SETOF" -msgstr "la columna «%s» no puede ser declarada SETOF" - #: access/gin/ginbulk.c:44 #, c-format msgid "posting list is too long" @@ -1038,20 +1217,20 @@ msgstr "la «posting list» es demasiado larga" #: access/gin/ginbulk.c:45 #, c-format -msgid "Reduce maintenance_work_mem." -msgstr "Reduzca maintenance_work_mem." +msgid "Reduce \"maintenance_work_mem\"." +msgstr "Reduzca «maintenance_work_mem»." -#: access/gin/ginfast.c:1036 +#: access/gin/ginfast.c:1041 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "La lista de pendientes GIN no puede limpiarse durante la recuperación." -#: access/gin/ginfast.c:1043 +#: access/gin/ginfast.c:1048 #, c-format msgid "\"%s\" is not a GIN index" msgstr "«%s» no es un índice GIN" -#: access/gin/ginfast.c:1054 +#: access/gin/ginfast.c:1059 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "no se pueden acceder índices temporales de otras sesiones" @@ -1071,50 +1250,50 @@ msgstr "los índices GIN antiguos no soportan recorridos del índice completo ni msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Para corregir esto, ejecute REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:146 executor/execExpr.c:2169 -#: utils/adt/arrayfuncs.c:3996 utils/adt/arrayfuncs.c:6683 -#: utils/adt/rowtypes.c:984 +#: 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 "no se pudo identificar una función de comparación para el tipo %s" -#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 #: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "la familia de operadores «%s» del método de acceso %s contiene el procedimiento de soporte %s registrado entre tipos distintos" -#: access/gin/ginvalidate.c:260 +#: access/gin/ginvalidate.c:258 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "falta la función de soporte %3$d o %4$d de la clase de operadores «%1$s» del método de accesso %2$s" -#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 #: access/spgist/spgvalidate.c:387 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "el número de función de soporte %d no es válido para el método de acceso %s" -#: access/gist/gist.c:759 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "el índice «%s» contiene una tupla interna marcada como no válida" -#: access/gist/gist.c:761 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Esto es causado por una división de página incompleta durante una recuperación antes de actualizar a PostgreSQL 9.1." -#: access/gist/gist.c:762 access/gist/gistutil.c:801 access/gist/gistutil.c:812 -#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:227 -#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 -#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:809 -#: access/nbtree/nbtpage.c:820 +#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 +#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 +#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 +#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 +#: access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "Por favor aplíquele REINDEX." -#: access/gist/gist.c:1176 +#: access/gist/gist.c:1196 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "arreglando división incompleta en el índice «%s», bloque %u" @@ -1129,52 +1308,52 @@ msgstr "el método picksplit para la columna %d del índice «%s» falló" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "El índice no es óptimo. Para optimizarlo, contacte un desarrollador o trate de usar la columna en segunda posición en la orden CREATE INDEX." -#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 -#: access/nbtree/nbtpage.c:806 +#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 +#: access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "índice «%s» contiene páginas vacías no esperadas en el bloque %u" -#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 -#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:817 +#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 +#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "el índice «%s» contiene una página corrupta en el bloque %u" -#: access/gist/gistvalidate.c:203 +#: access/gist/gistvalidate.c:202 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "la familia de operadores «%s» del método de acceso %s contiene una especificación ORDER BY no soportada para el operador %s" -#: access/gist/gistvalidate.c:214 +#: access/gist/gistvalidate.c:213 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "la familia de operadores «%s» del método de acceso %s contiene una especificación de familia en ORDER BY incorrecta para el operador %s" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:333 -#: utils/adt/varchar.c:1009 utils/adt/varchar.c:1064 +#: 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 "no se pudo determinar qué ordenamiento usar para el hashing de cadenas" -#: access/hash/hashfunc.c:280 access/hash/hashfunc.c:334 catalog/heap.c:668 -#: catalog/heap.c:674 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:2023 commands/tablecmds.c:17490 commands/view.c:86 -#: regex/regc_pg_locale.c:243 utils/adt/formatting.c:1648 -#: utils/adt/formatting.c:1770 utils/adt/formatting.c:1893 utils/adt/like.c:191 -#: utils/adt/like_support.c:1025 utils/adt/varchar.c:739 -#: utils/adt/varchar.c:1010 utils/adt/varchar.c:1065 utils/adt/varlena.c:1518 +#: 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." msgstr "Use la cláusula COLLATE para establecer el ordenamiento explícitamente." -#: access/hash/hashinsert.c:86 +#: access/hash/hashinsert.c:84 #, c-format msgid "index row size %zu exceeds hash maximum %zu" msgstr "el tamaño de fila de índice %zu excede el máximo para hash %zu" -#: access/hash/hashinsert.c:88 access/spgist/spgdoinsert.c:2006 -#: access/spgist/spgdoinsert.c:2283 access/spgist/spgutils.c:1011 +#: 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 "Valores mayores a una página del buffer no pueden ser indexados." @@ -1189,17 +1368,17 @@ msgstr "número no válido de bloque de «overflow» %u" msgid "out of overflow pages in hash index \"%s\"" msgstr "se agotaron las páginas de desbordamiento en el índice hash «%s»" -#: access/hash/hashsearch.c:315 +#: access/hash/hashsearch.c:311 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "los índices hash no soportan recorridos del índice completo" -#: access/hash/hashutil.c:263 +#: access/hash/hashutil.c:262 #, c-format msgid "index \"%s\" is not a hash index" msgstr "el índice «%s» no es un índice hash" -#: access/hash/hashutil.c:269 +#: access/hash/hashutil.c:268 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "el índice «%s» tiene una versión de hash incorrecta" @@ -1214,229 +1393,235 @@ msgstr "la familia de operadores «%s» del método de acceso %s no tiene funci msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "faltan operadores entre tipos en la familia de operadores «%s» del método de acceso %s" -#: access/heap/heapam.c:2026 +#: access/heap/heapam.c:2206 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "no se pueden insertar tuplas en un ayudante paralelo" -#: access/heap/heapam.c:2545 +#: access/heap/heapam.c:2725 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "no se pueden eliminar tuplas durante una operación paralela" -#: access/heap/heapam.c:2592 +#: access/heap/heapam.c:2772 #, c-format msgid "attempted to delete invisible tuple" msgstr "se intentó eliminar una tupla invisible" -#: access/heap/heapam.c:3035 access/heap/heapam.c:5902 +#: 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 "no se pueden actualizar tuplas durante una operación paralela" -#: access/heap/heapam.c:3163 +#: access/heap/heapam.c:3397 #, c-format msgid "attempted to update invisible tuple" msgstr "se intentó actualizar una tupla invisible" -#: access/heap/heapam.c:4550 access/heap/heapam.c:4588 -#: access/heap/heapam.c:4853 access/heap/heapam_handler.c:467 +#: 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 "no se pudo bloquear un candado en la fila de la relación «%s»" +msgstr "no se pudo bloquear un “lock” en la fila de la relación «%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 "el registro a ser actualizado ya fue modificado por una operación disparada por la orden actual" -#: access/heap/heapam_handler.c:412 +#: access/heap/heapam_handler.c:413 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "el registro a ser bloqueado ya fue movido a otra partición por un update concurrente" -#: access/heap/hio.c:517 access/heap/rewriteheap.c:659 +#: access/heap/hio.c:535 access/heap/rewriteheap.c:640 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "fila es demasiado grande: tamaño %zu, tamaño máximo %zu" -#: access/heap/rewriteheap.c:919 +#: access/heap/rewriteheap.c:885 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "no se pudo escribir al archivo «%s», se escribió %d de %d: %m" -#: access/heap/rewriteheap.c:1011 access/heap/rewriteheap.c:1128 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:2971 access/transam/xlog.c:3162 -#: access/transam/xlog.c:3938 access/transam/xlog.c:8740 -#: access/transam/xlogfuncs.c:702 backup/basebackup_server.c:151 -#: backup/basebackup_server.c:244 commands/dbcommands.c:518 -#: postmaster/postmaster.c:4554 postmaster/postmaster.c:5557 -#: replication/logical/origin.c:603 replication/slot.c:1770 -#: storage/file/copydir.c:157 storage/smgr/md.c:232 utils/time/snapmgr.c:1263 +#: 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" msgstr "no se pudo crear archivo «%s»: %m" -#: access/heap/rewriteheap.c:1138 +#: access/heap/rewriteheap.c:1104 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "no se pudo truncar el archivo «%s» a %u: %m" -#: access/heap/rewriteheap.c:1156 access/transam/timeline.c:384 +#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3021 access/transam/xlog.c:3218 -#: access/transam/xlog.c:3950 commands/dbcommands.c:530 -#: postmaster/postmaster.c:4564 postmaster/postmaster.c:4574 +#: 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:1767 -#: replication/slot.c:1805 storage/file/buffile.c:545 -#: storage/file/copydir.c:197 utils/init/miscinit.c:1605 -#: utils/init/miscinit.c:1616 utils/init/miscinit.c:1624 utils/misc/guc.c:4331 -#: utils/misc/guc.c:4362 utils/misc/guc.c:5490 utils/misc/guc.c:5508 -#: utils/time/snapmgr.c:1268 utils/time/snapmgr.c:1275 +#: 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 "no se pudo escribir a archivo «%s»: %m" -#: access/heap/vacuumlazy.c:482 +#: access/heap/vacuumlazy.c:473 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "haciendo vacuum agresivamente a «%s.%s.%s»" -#: access/heap/vacuumlazy.c:487 +#: access/heap/vacuumlazy.c:478 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "haciendo vacuum a «%s.%s.%s»" -#: access/heap/vacuumlazy.c:635 +#: access/heap/vacuumlazy.c:626 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "se terminó el vacuum de «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:637 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:648 +#: access/heap/vacuumlazy.c:639 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:644 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:655 +#: access/heap/vacuumlazy.c:646 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:653 #, c-format msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" msgstr "páginas: %u eliminadas, %u quedan, %u recorridas (%.2f%% del total)\n" -#: access/heap/vacuumlazy.c:669 +#: access/heap/vacuumlazy.c:660 #, c-format msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" msgstr "tuplas: %lld eliminadas, %lld permanecen, %lld están muertas pero aún no se pueden quitar\n" -#: access/heap/vacuumlazy.c:675 +#: access/heap/vacuumlazy.c:666 #, c-format msgid "tuples missed: %lld dead from %u pages not removed due to cleanup lock contention\n" msgstr "tuplas faltantes: %lld muertas en %u páginas no eliminadas debido a contención del lock de limpieza\n" -#: access/heap/vacuumlazy.c:681 +#: access/heap/vacuumlazy.c:672 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" -msgstr "" +msgstr "punto de corte de eliminación: %u, que era %d XIDs de antiguo cuando la operación terminó\n" -#: access/heap/vacuumlazy.c:688 +#: access/heap/vacuumlazy.c:679 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "nuevo relfrozenxid: %u, que está %d XIDs más adelante del valor anterior\n" -#: access/heap/vacuumlazy.c:696 +#: access/heap/vacuumlazy.c:687 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "nuevo relminmxid: %u, que está %d MXIDs más adelante del valor anterior\n" -#: access/heap/vacuumlazy.c:699 -#, fuzzy, c-format -#| msgid "%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" +#: access/heap/vacuumlazy.c:690 +#, c-format msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" -msgstr "en %u páginas de la tabla (%.2f%% del total) se eliminaron %lld identificadores de elementos muertos\n" +msgstr "congelado: %u páginas de la tabla (%.2f%% del total) tuvieron %lld tuplas congeladas\n" -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:698 msgid "index scan not needed: " msgstr "recorrido de índice no necesario: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:700 msgid "index scan needed: " msgstr "recorrido de índice necesario: " -#: access/heap/vacuumlazy.c:711 +#: access/heap/vacuumlazy.c:702 #, c-format msgid "%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "en %u páginas de la tabla (%.2f%% del total) se eliminaron %lld identificadores de elementos muertos\n" -#: access/heap/vacuumlazy.c:716 +#: access/heap/vacuumlazy.c:707 msgid "index scan bypassed: " msgstr "recorrido de índice pasado por alto: " -#: access/heap/vacuumlazy.c:718 +#: access/heap/vacuumlazy.c:709 msgid "index scan bypassed by failsafe: " msgstr "recorrido de índice pasado por alto debido a modo failsafe: " -#: access/heap/vacuumlazy.c:720 +#: access/heap/vacuumlazy.c:711 #, c-format msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "%u páginas de la tabla (%.2f%% del total) tienen %lld identificadores de elementos muertos\n" -#: access/heap/vacuumlazy.c:735 +#: access/heap/vacuumlazy.c:726 #, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "índice «%s»: páginas: %u en total, %u recientemente eliminadas, %u eliminadas hasta ahora, %u reusables\n" -#: access/heap/vacuumlazy.c:747 commands/analyze.c:795 +#: access/heap/vacuumlazy.c:738 commands/analyze.c:794 #, c-format msgid "I/O timings: read: %.3f ms, write: %.3f ms\n" msgstr "tiempos de E/S: lectura: %.3f ms, escritura: %.3f ms\n" -#: access/heap/vacuumlazy.c:757 commands/analyze.c:798 +#: 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 "tasa lectura promedio: %.3f MB/s, tasa escritura promedio: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:760 commands/analyze.c:800 +#: access/heap/vacuumlazy.c:751 commands/analyze.c:799 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "uso de búfers: %lld aciertos, %lld fallos, %lld ensuciados\n" -#: access/heap/vacuumlazy.c:765 +#: access/heap/vacuumlazy.c:756 #, c-format msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "uso de WAL: %lld registros, %lld imágenes de página completa, %llu bytes\n" -#: access/heap/vacuumlazy.c:769 commands/analyze.c:804 +#: access/heap/vacuumlazy.c:760 commands/analyze.c:803 #, c-format msgid "system usage: %s" msgstr "uso de sistema: %s" -#: access/heap/vacuumlazy.c:2482 +#: access/heap/vacuumlazy.c:2170 #, c-format msgid "table \"%s\": removed %lld dead item identifiers in %u pages" msgstr "tabla «%s»: se eliminaron %lld identificadores de elementos muertos en %u páginas" -#: access/heap/vacuumlazy.c:2642 +#: access/heap/vacuumlazy.c:2324 #, c-format msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "pasando por alto el mantenimiento no esencial de la tabla «%s.%s.%s» como mecanismo de seguridad (failsafe) luego de %d recorridos de índice" -#: access/heap/vacuumlazy.c:2645 +#: access/heap/vacuumlazy.c:2327 #, c-format msgid "The table's relfrozenxid or relminmxid is too far in the past." msgstr "El relfrozenxid o el relminmxid de la tabla es demasiado antiguo." -#: access/heap/vacuumlazy.c:2646 +#: access/heap/vacuumlazy.c:2328 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" @@ -1445,67 +1630,67 @@ msgstr "" "Considere incrementar el parámetro de configuración «maintenance_work_mem» o «autovacuum_work_mem».\n" "Es probable que también deba considerar otras formas para que VACUUM pueda mantener el paso de la asignación de IDs de transacción." -#: access/heap/vacuumlazy.c:2891 +#: access/heap/vacuumlazy.c:2590 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" -msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" +msgstr "«%s»: suspendiendo el truncado debido a una petición de “lock” en conflicto" -#: access/heap/vacuumlazy.c:2961 +#: access/heap/vacuumlazy.c:2660 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "tabla «%s»: truncadas %u a %u páginas" -#: access/heap/vacuumlazy.c:3023 +#: access/heap/vacuumlazy.c:2722 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "tabla «%s»: suspendiendo el truncado debido a una petición de bloqueo en conflicto" -#: access/heap/vacuumlazy.c:3183 +#: access/heap/vacuumlazy.c:2841 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "desactivando el comportamiento paralelo de vacuum en «%s» --- no se puede hacer vacuum de tablas temporales en paralelo" -#: access/heap/vacuumlazy.c:3399 +#: access/heap/vacuumlazy.c:3108 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "recorriendo el bloque %u posición %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3402 +#: access/heap/vacuumlazy.c:3111 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "recorriendo el bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3406 +#: access/heap/vacuumlazy.c:3115 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "recorriendo la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3414 +#: access/heap/vacuumlazy.c:3123 #, c-format msgid "while vacuuming block %u offset %u of relation \"%s.%s\"" msgstr "haciendo «vacuum» al bloque %u posición %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3417 +#: access/heap/vacuumlazy.c:3126 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "haciendo «vacuum» al bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3421 +#: access/heap/vacuumlazy.c:3130 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "mientras se hacía «vacuum» a la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3426 commands/vacuumparallel.c:1074 +#: access/heap/vacuumlazy.c:3135 commands/vacuumparallel.c:1112 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "mientras se hacía «vacuum» al índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3431 commands/vacuumparallel.c:1080 +#: access/heap/vacuumlazy.c:3140 commands/vacuumparallel.c:1118 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "mientras se limpiaba el índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3437 +#: access/heap/vacuumlazy.c:3146 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "error mientras se truncaba la relación «%s.%s» a %u bloques" @@ -1520,19 +1705,24 @@ msgstr "el método de acceso «%s» no es de tipo %s" msgid "index access method \"%s\" does not have a handler" msgstr "el método de acceso «%s» no tiene manejador" -#: access/index/genam.c:490 +#: access/index/genam.c:489 #, c-format msgid "transaction aborted during system catalog scan" msgstr "transacción abortada durante recorrido de catálogos de sistema" -#: access/index/indexam.c:142 catalog/objectaddress.c:1394 -#: commands/indexcmds.c:2852 commands/tablecmds.c:272 commands/tablecmds.c:296 -#: commands/tablecmds.c:17191 commands/tablecmds.c:18959 +#: access/index/genam.c:657 access/index/indexam.c:82 +#, c-format +msgid "cannot access index \"%s\" while it is being reindexed" +msgstr "no se puede acceder el índice «%s» mientras está siendo reindexado" + +#: 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» no es un índice" -#: access/index/indexam.c:979 +#: access/index/indexam.c:1028 #, c-format msgid "operator class %s has no options" msgstr "clase de operadores «%s» no tiene opciones" @@ -1552,38 +1742,38 @@ msgstr "Ya existe la llave %s." msgid "This may be because of a non-immutable index expression." msgstr "Esto puede deberse a una expresión de índice no inmutable." -#: access/nbtree/nbtpage.c:158 access/nbtree/nbtpage.c:607 -#: parser/parse_utilcmd.c:2317 +#: 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 "el índice «%s» no es un btree" -#: access/nbtree/nbtpage.c:165 access/nbtree/nbtpage.c:614 +#: access/nbtree/nbtpage.c:164 access/nbtree/nbtpage.c:618 #, c-format msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "discordancia de versión en índice «%s»: versión de archivo %d, versión de código %d, mínima versión soportada %d" -#: access/nbtree/nbtpage.c:1862 +#: access/nbtree/nbtpage.c:1861 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "el índice «%s» contiene una página interna parcialmente muerta" -#: access/nbtree/nbtpage.c:1864 +#: access/nbtree/nbtpage.c:1863 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Esto puede ser causado por la interrupción de un VACUUM en la versión 9.3 o anteriores, antes de actualizar. Ejecute REINDEX por favor." -#: access/nbtree/nbtutils.c:2663 +#: access/nbtree/nbtutils.c:5108 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "el tamaño de fila de índice %1$zu excede el máximo %3$zu para btree versión %2$u para el índice «%4$s»" -#: access/nbtree/nbtutils.c:2669 +#: access/nbtree/nbtutils.c:5114 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "La tupla de índice hace referencia a la tupla (%u,%u) en la relación «%s»." -#: access/nbtree/nbtutils.c:2673 +#: access/nbtree/nbtutils.c:5118 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1597,12 +1787,18 @@ msgstr "" msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "falta una función de soporte para los tipos %3$s y %4$s en la familia de operadores «%1$s» del método de acceso %2$s" +#: access/sequence/sequence.c:75 access/table/table.c:145 +#: optimizer/util/plancat.c:144 +#, c-format +msgid "cannot open relation \"%s\"" +msgstr "no se puede abrir la relación «%s»" + #: access/spgist/spgutils.c:245 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "método «compress» debe estar definido cuando el tipo hoja es distinto del tipo de entrada" -#: access/spgist/spgutils.c:1008 +#: access/spgist/spgutils.c:1028 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "el tamaño de tupla interna SP-GiST %zu excede el máximo %zu" @@ -1617,69 +1813,64 @@ msgstr "el tipo de dato hoja SP-GiST %s no coincide con el tipo declarado %s" msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "falta la función de soporte %3$d para el tipo %4$s de la clase de operadores «%1$s» del método de accesso %2$s" -#: access/table/table.c:145 optimizer/util/plancat.c:145 -#, fuzzy, c-format -#| msgid "cannot change relation \"%s\"" -msgid "cannot open relation \"%s\"" -msgstr "no se puede cambiar la relación «%s»" - -#: access/table/tableam.c:265 +#: access/table/tableam.c:255 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "el tid (%u, %u) no es válido para la relación «%s»" -#: access/table/tableamapi.c:116 +#: access/table/tableamapi.c:109 #, c-format -msgid "%s cannot be empty." -msgstr "%s no puede ser vacío." +msgid "\"%s\" cannot be empty." +msgstr "«%s» no puede ser vacío." -#: access/table/tableamapi.c:123 access/transam/xlogrecovery.c:4774 +#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4859 #, c-format -msgid "%s is too long (maximum %d characters)." -msgstr "%s es demasiado largo (máximo %d caracteres)." +msgid "\"%s\" is too long (maximum %d characters)." +msgstr "«%s» es demasiado largo (máximo %d caracteres)." -#: access/table/tableamapi.c:146 +#: access/table/tableamapi.c:139 #, c-format msgid "table access method \"%s\" does not exist" msgstr "no existe el método de acceso de tabla «%s»" -#: access/table/tableamapi.c:151 +#: access/table/tableamapi.c:144 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "No existe el método de acceso de tabla «%s»." -#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:152 +#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:151 #, c-format msgid "sample percentage must be between 0 and 100" msgstr "el porcentaje de muestreo debe estar entre 0 y 100" -#: access/transam/commit_ts.c:279 +#: access/transam/commit_ts.c:287 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "no se puede obtener el timestamp de compromiso de la transacción %u" -#: access/transam/commit_ts.c:377 +#: access/transam/commit_ts.c:385 #, c-format msgid "could not get commit timestamp data" msgstr "no se pudo obtener datos de compromiso de transacción" -#: access/transam/commit_ts.c:379 +#: access/transam/commit_ts.c:387 #, c-format msgid "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "Asegúrese que el parámetro de configuración «%s» esté definido en el servidor primario." -#: access/transam/commit_ts.c:381 +#: access/transam/commit_ts.c:389 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Asegúrese que el parámetro de configuración «%s» esté definido." -#: access/transam/multixact.c:1023 +#: access/transam/multixact.c:1091 #, c-format -msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" -msgstr "la base de datos no está aceptando órdenes que generen nuevos MultiXactIds para evitar pérdida de datos debido al reciclaje de transacciones en la base de datos «%s»" +msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"" +msgstr "la base de datos no está aceptando órdenes que asignen nuevos MultiXactIds para evitar pérdida de datos debido al “wraparound” en la base de datos «%s»" -#: access/transam/multixact.c:1025 access/transam/multixact.c:1032 -#: access/transam/multixact.c:1056 access/transam/multixact.c:1065 +#: 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" @@ -1688,247 +1879,250 @@ msgstr "" "Ejecute VACUUM de la base completa en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: access/transam/multixact.c:1030 +#: access/transam/multixact.c:1098 #, c-format -msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" -msgstr "la base de datos no está aceptando órdenes que generen nuevos MultiXactIds para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base con OID %u" +msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database with OID %u" +msgstr "la base de datos no está aceptando órdenes que asignen nuevos MultiXactIds para evitar pérdida de datos debido al “wraparound” en la base con OID %u" -#: access/transam/multixact.c:1051 access/transam/multixact.c:2333 +#: 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] "base de datos «%s» debe ser limpiada antes de que %u más MultiXactId sea usado" msgstr[1] "base de datos «%s» debe ser limpiada dentro de que %u más MultiXactIds sean usados" -#: access/transam/multixact.c:1060 access/transam/multixact.c:2342 +#: 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] "base de datos con OID %u debe ser limpiada antes de que %u más MultiXactId sea usado" msgstr[1] "base de datos con OID %u debe ser limpiada antes de que %u más MultiXactIds sean usados" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1189 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "límite de miembros de multixact alcanzado" -#: access/transam/multixact.c:1122 +#: 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] "Esta orden crearía un multixact con %u miembros, pero el espacio que queda sólo sirve para %u miembro." msgstr[1] "Esta orden crearía un multixact con %u miembros, pero el espacio que queda sólo sirve para %u miembros." -#: access/transam/multixact.c:1127 +#: 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 "Ejecute un VACUUM de la base completa en la base de datos con OID %u con vacuum_multixact_freeze_min_age y vacuum_multixact_freeze_table_age reducidos." +msgid "Execute a database-wide VACUUM in database with OID %u with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." +msgstr "Ejecute un VACUUM de la base completa en la base de datos con OID %u con «vacuum_multixact_freeze_min_age» y «vacuum_multixact_freeze_table_age» reducidos." -#: access/transam/multixact.c:1158 +#: 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] "base de datos con OID %u debe ser limpiada antes de que %d miembro más de multixact sea usado" msgstr[1] "base de datos con OID %u debe ser limpiada antes de que %d más miembros de multixact sean usados" -#: access/transam/multixact.c:1163 +#: 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 "Ejecute un VACUUM de la base completa en esa base de datos con vacuum_multixact_freeze_min_age y vacuum_multixact_freeze_table_age reducidos." +msgid "Execute a database-wide VACUUM in that database with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." +msgstr "Ejecute un VACUUM de la base completa en esa base de datos con «vacuum_multixact_freeze_min_age» y «vacuum_multixact_freeze_table_age» reducidos." -#: access/transam/multixact.c:1302 +#: access/transam/multixact.c:1371 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" -msgstr "el MultiXactId %u ya no existe -- aparente problema por reciclaje" +msgstr "el MultiXactId %u ya no existe -- “wraparound” aparente" -#: access/transam/multixact.c:1308 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" -msgstr "el MultiXactId %u no se ha creado aún -- aparente problema por reciclaje" +msgstr "el MultiXactId %u no se ha creado aún -- “wraparound” aparente" -#: access/transam/multixact.c:2338 access/transam/multixact.c:2347 -#: access/transam/varsup.c:151 access/transam/varsup.c:158 -#: access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:2479 access/transam/multixact.c:2488 #, c-format msgid "" -"To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" +"To avoid MultiXactId 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 "" -"Para evitar que la base de datos se desactive, ejecute VACUUM en esa base de datos.\n" +"Para evitar fallos de asignación de MultiXactId, ejecute VACUUM en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: access/transam/multixact.c:2622 +#: 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 "las protecciones de reciclaje de miembros de multixact están inhabilitadas porque el multixact más antiguo %u en checkpoint no existe en disco" +msgstr "las protecciones de “wraparound” de multixact están inhabilitadas porque el multixact más antiguo %u en checkpoint no existe en disco" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2789 #, c-format msgid "MultiXact member wraparound protections are now enabled" -msgstr "las protecciones de reciclaje de miembros de multixact están habilitadas" +msgstr "las protecciones de “wraparound” de miembros de multixact están habilitadas" -#: access/transam/multixact.c:3027 +#: access/transam/multixact.c:3180 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "multixact más antiguo %u no encontrado, multixact más antiguo es %u, omitiendo el truncado" -#: access/transam/multixact.c:3045 +#: access/transam/multixact.c:3198 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "no se puede truncar hasta el MultiXact %u porque no existe en disco, omitiendo el truncado" -#: access/transam/multixact.c:3359 +#: access/transam/multixact.c:3517 #, c-format msgid "invalid MultiXactId: %u" msgstr "el MultiXactId no es válido: %u" -#: access/transam/parallel.c:729 access/transam/parallel.c:848 +#: access/transam/parallel.c:748 access/transam/parallel.c:867 #, c-format msgid "parallel worker failed to initialize" msgstr "el ayudante paralelo no pudo iniciar" -#: access/transam/parallel.c:730 access/transam/parallel.c:849 +#: access/transam/parallel.c:749 access/transam/parallel.c:868 #, c-format msgid "More details may be available in the server log." msgstr "Puede haber más detalles disponibles en el log del servidor." -#: access/transam/parallel.c:910 +#: access/transam/parallel.c:929 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster terminó durante una transacción paralela" -#: access/transam/parallel.c:1097 +#: access/transam/parallel.c:1116 #, c-format msgid "lost connection to parallel worker" msgstr "se ha perdido la conexión al ayudante paralelo" -#: access/transam/parallel.c:1163 access/transam/parallel.c:1165 +#: access/transam/parallel.c:1172 access/transam/parallel.c:1174 msgid "parallel worker" msgstr "ayudante paralelo" -#: access/transam/parallel.c:1319 +#: access/transam/parallel.c:1344 replication/logical/applyparallelworker.c:890 #, c-format msgid "could not map dynamic shared memory segment" msgstr "no se pudo mapear el segmento de memoria compartida dinámica" -#: access/transam/parallel.c:1324 +#: access/transam/parallel.c:1349 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "número mágico no válido en segmento de memoria compartida dinámica" -#: access/transam/rmgr.c:84 +#: access/transam/rmgr.c:93 #, c-format msgid "resource manager with ID %d not registered" msgstr "el gestor de recursos con ID %d no está registrado" -#: access/transam/rmgr.c:85 +#: access/transam/rmgr.c:94 #, c-format -msgid "Include the extension module that implements this resource manager in shared_preload_libraries." -msgstr "Incluya el módulo de extensión que implementa este gestor de recursos en shared_preload_libraries." +msgid "Include the extension module that implements this resource manager in \"shared_preload_libraries\"." +msgstr "Incluya el módulo de extensión que implementa este gestor de recursos en «shared_preload_libraries»." -#: access/transam/rmgr.c:101 +#: access/transam/rmgr.c:110 #, c-format msgid "custom resource manager name is invalid" msgstr "el nombre de gestor de recursos personalizado no es válido" -#: access/transam/rmgr.c:102 +#: access/transam/rmgr.c:111 #, c-format msgid "Provide a non-empty name for the custom resource manager." msgstr "Provea un nombre no vacío para el gestor de recursos personalizado." -#: access/transam/rmgr.c:105 +#: access/transam/rmgr.c:114 #, c-format msgid "custom resource manager ID %d is out of range" msgstr "el ID %d de gestor de recursos está fuera de rango" -#: access/transam/rmgr.c:106 +#: access/transam/rmgr.c:115 #, c-format msgid "Provide a custom resource manager ID between %d and %d." msgstr "Provea un ID de gestor de recursos personalizado entre %d y %d." -#: access/transam/rmgr.c:111 access/transam/rmgr.c:116 -#: access/transam/rmgr.c:128 +#: access/transam/rmgr.c:120 access/transam/rmgr.c:125 +#: access/transam/rmgr.c:137 #, c-format msgid "failed to register custom resource manager \"%s\" with ID %d" msgstr "no se pudo registrar un gestor de recursos personalizado «%s» con ID %d" -#: access/transam/rmgr.c:112 +#: access/transam/rmgr.c:121 #, c-format -msgid "Custom resource manager must be registered while initializing modules in shared_preload_libraries." -msgstr "El gestor de recursos personalizado debe ser registrado en shared_preload_libraries." +msgid "Custom resource manager must be registered while initializing modules in \"shared_preload_libraries\"." +msgstr "El gestor de recursos personalizado debe ser registrado en «shared_preload_libraries» al inicializar módulos." -#: access/transam/rmgr.c:117 +#: access/transam/rmgr.c:126 #, c-format msgid "Custom resource manager \"%s\" already registered with the same ID." msgstr "El gestor de recursos «%s» ya está registrado con el mismo ID." -#: access/transam/rmgr.c:129 +#: access/transam/rmgr.c:138 #, c-format msgid "Existing resource manager with ID %d has the same name." msgstr "El gestor de recursos con ID %d tiene el mismo nombre." -#: access/transam/rmgr.c:135 +#: access/transam/rmgr.c:144 #, c-format msgid "registered custom resource manager \"%s\" with ID %d" msgstr "se registró el gestor de recursos «%s» con ID %d" -#: access/transam/slru.c:714 +#: access/transam/slru.c:361 +#, c-format +msgid "\"%s\" must be a multiple of %d" +msgstr "«%s» debe ser múltiple de %d" + +#: access/transam/slru.c:830 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "el archivo «%s» no existe, leyendo como ceros" -#: access/transam/slru.c:946 access/transam/slru.c:952 -#: access/transam/slru.c:960 access/transam/slru.c:965 -#: access/transam/slru.c:972 access/transam/slru.c:977 -#: access/transam/slru.c:984 access/transam/slru.c:991 +#: 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 "no se pudo encontrar el estado de la transacción %u" -#: access/transam/slru.c:947 +#: access/transam/slru.c:1060 #, c-format msgid "Could not open file \"%s\": %m." msgstr "No se pudo abrir el archivo «%s»: %m." -#: access/transam/slru.c:953 +#: access/transam/slru.c:1066 #, c-format msgid "Could not seek in file \"%s\" to offset %d: %m." msgstr "No se pudo posicionar (seek) en el archivo «%s» a la posición %d: %m." -#: access/transam/slru.c:961 +#: access/transam/slru.c:1074 #, c-format msgid "Could not read from file \"%s\" at offset %d: %m." msgstr "No se pudo leer desde el archivo «%s» en la posición %d: %m." -#: access/transam/slru.c:966 +#: access/transam/slru.c:1079 #, c-format msgid "Could not read from file \"%s\" at offset %d: read too few bytes." msgstr "No se pudo leer desde el archivo «%s» en la posición %d: se leyeron muy pocos bytes." -#: access/transam/slru.c:973 +#: access/transam/slru.c:1086 #, c-format msgid "Could not write to file \"%s\" at offset %d: %m." msgstr "No se pudo escribir al archivo «%s» en la posición %d: %m." -#: access/transam/slru.c:978 +#: access/transam/slru.c:1091 #, c-format msgid "Could not write to file \"%s\" at offset %d: wrote too few bytes." msgstr "No se pudo escribir al archivo «%s» en la posición %d: se escribieron muy pocos bytes." -#: access/transam/slru.c:985 +#: access/transam/slru.c:1098 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "No se pudo sincronizar (fsync) archivo «%s»: %m." -#: access/transam/slru.c:992 +#: access/transam/slru.c:1105 #, c-format msgid "Could not close file \"%s\": %m." msgstr "No se pudo cerrar el archivo «%s»: %m." -#: access/transam/slru.c:1253 +#: access/transam/slru.c:1431 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" -msgstr "no se pudo truncar el directorio «%s»: aparente problema por reciclaje de transacciones" +msgstr "no se pudo truncar el directorio «%s»: “wraparound” aparente" #: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format @@ -1970,773 +2164,824 @@ msgstr "IDs de timeline deben ser menores que el ID de timeline del hijo." msgid "requested timeline %u is not in this server's history" msgstr "el timeline %u solicitado no está en la historia de este servidor" -#: access/transam/twophase.c:385 +#: access/transam/twophase.c:368 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "identificador de transacción «%s» es demasiado largo" -#: access/transam/twophase.c:392 +#: access/transam/twophase.c:375 #, c-format msgid "prepared transactions are disabled" msgstr "las transacciones preparadas están deshabilitadas" -#: access/transam/twophase.c:393 +#: access/transam/twophase.c:376 #, c-format -msgid "Set max_prepared_transactions to a nonzero value." -msgstr "Defina max_prepared_transactions a un valor distinto de cero." +msgid "Set \"max_prepared_transactions\" to a nonzero value." +msgstr "Defina «max_prepared_transactions» a un valor distinto de cero." -#: access/transam/twophase.c:412 +#: access/transam/twophase.c:395 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "identificador de transacción «%s» ya está siendo utilizado" -#: access/transam/twophase.c:421 access/transam/twophase.c:2484 +#: access/transam/twophase.c:404 access/transam/twophase.c:2531 #, c-format msgid "maximum number of prepared transactions reached" msgstr "se alcanzó el número máximo de transacciones preparadas" -#: access/transam/twophase.c:422 access/transam/twophase.c:2485 +#: access/transam/twophase.c:405 access/transam/twophase.c:2532 #, c-format -msgid "Increase max_prepared_transactions (currently %d)." -msgstr "Incremente max_prepared_transactions (actualmente es %d)." +msgid "Increase \"max_prepared_transactions\" (currently %d)." +msgstr "Incremente «max_prepared_transactions» (actualmente es %d)." -#: access/transam/twophase.c:598 +#: access/transam/twophase.c:580 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "transacción preparada con identificador «%s» está ocupada" -#: access/transam/twophase.c:604 +#: access/transam/twophase.c:586 #, c-format msgid "permission denied to finish prepared transaction" msgstr "se ha denegado el permiso para finalizar la transacción preparada" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:587 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Debe ser superusuario o el usuario que preparó la transacción." -#: access/transam/twophase.c:616 +#: access/transam/twophase.c:598 #, c-format msgid "prepared transaction belongs to another database" msgstr "la transacción preparada pertenece a otra base de datos" -#: access/transam/twophase.c:617 +#: access/transam/twophase.c:599 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Conéctese a la base de datos donde la transacción fue preparada para terminarla." -#: access/transam/twophase.c:632 +#: access/transam/twophase.c:614 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "transacción preparada con identificador «%s» no existe" -#: access/transam/twophase.c:1167 +#: access/transam/twophase.c:1174 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "el largo máximo del archivo de estado de dos fases fue excedido" -#: access/transam/twophase.c:1322 +#: 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] "tamaño incorrecto de archivo «%s»: %lld byte" msgstr[1] "tamaño incorrecto de archivo «%s»: %lld bytes" -#: access/transam/twophase.c:1331 +#: access/transam/twophase.c:1338 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "alineamiento incorrecto del offset del CRC para el archivo «%s»" -#: access/transam/twophase.c:1349 +#: access/transam/twophase.c:1356 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "no se pudo leer el archivo «%s»: leídos %d de %lld" -#: access/transam/twophase.c:1364 +#: access/transam/twophase.c:1371 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "número mágico no válido almacenado en archivo «%s»" -#: access/transam/twophase.c:1370 +#: access/transam/twophase.c:1377 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "tamaño no válido en archivo «%s»" -#: access/transam/twophase.c:1382 +#: access/transam/twophase.c:1389 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la suma de verificación calculada no coincide con el valor almacenado en el archivo «%s»" -#: access/transam/twophase.c:1412 access/transam/xlogrecovery.c:590 -#: replication/logical/logical.c:209 replication/walsender.c:687 +#: 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 "Falló mientras se emplazaba un procesador de lectura de WAL." -#: access/transam/twophase.c:1422 +#: access/transam/twophase.c:1429 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%X: %s" -#: access/transam/twophase.c:1427 +#: access/transam/twophase.c:1434 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%X" -#: access/transam/twophase.c:1435 +#: access/transam/twophase.c:1442 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "los datos de estado de dos fases esperados no están presentes en WAL en %X/%X" -#: access/transam/twophase.c:1731 +#: access/transam/twophase.c:1745 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "no se pudo recrear archivo «%s»: %m" -#: access/transam/twophase.c:1858 +#: 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 archivo de estado de dos fases fue escrito para transacción de larga duración" msgstr[1] "%u archivos de estado de dos fases fueron escritos para transacciones de larga duración" -#: access/transam/twophase.c:2092 +#: access/transam/twophase.c:2107 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "recuperando transacción preparada %u desde memoria compartida" -#: access/transam/twophase.c:2185 +#: access/transam/twophase.c:2200 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "eliminando archivo obsoleto de estado de dos fases para transacción %u" -#: access/transam/twophase.c:2192 +#: access/transam/twophase.c:2207 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "eliminando de memoria estado de dos fases obsoleto para transacción %u" -#: access/transam/twophase.c:2205 +#: access/transam/twophase.c:2220 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "eliminando archivo futuro de estado de dos fases para transacción %u" -#: access/transam/twophase.c:2212 +#: access/transam/twophase.c:2227 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "eliminando estado de dos fases futuro de memoria para transacción %u" -#: access/transam/twophase.c:2237 +#: access/transam/twophase.c:2252 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "archivo de estado de dos fases corrupto para transacción %u" -#: access/transam/twophase.c:2242 +#: access/transam/twophase.c:2257 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "estado de dos fases en memoria corrupto para transacción %u" -#: access/transam/varsup.c:129 +#: access/transam/twophase.c:2514 #, c-format -msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" -msgstr "la base de datos no está aceptando órdenes para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base de datos «%s»" +msgid "could not recover two-phase state file for transaction %u" +msgstr "no se pudo recuperar el archivo de estado de dos fases para la transacción %u" -#: access/transam/varsup.c:131 access/transam/varsup.c:138 +#: access/transam/twophase.c:2516 #, c-format -msgid "" -"Stop the postmaster and vacuum that database in single-user mode.\n" -"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." -msgstr "" -"Detenga el postmaster y ejecute VACUUM de la base completa en esa base de datos.\n" -"Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." +msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk." +msgstr "El archivo de estado en dos fases ha sido encontrado en el registro de WAL %X/%X, pero esta transacción ya ha sido restaurada desde disco." + +#: 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 "no se pudo acceder al archivo «%s»: %m" + +#: access/transam/varsup.c:156 +#, c-format +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database \"%s\"" +msgstr "la base de datos no está aceptando órdenes que asignen nuevos IDs de transacción para evitar pérdida de datos debido al “wraparound” en la base de datos «%s»" -#: access/transam/varsup.c:136 +#: access/transam/varsup.c:163 #, c-format -msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" -msgstr "la base de datos no está aceptando órdenes para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base con OID %u" +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database with OID %u" +msgstr "la base de datos no está aceptando órdenes que generen nuevos IDs de transacción para evitar pérdida de datos debido al “wraparound” en la base con OID %u" -#: access/transam/varsup.c:148 access/transam/varsup.c:463 +#: access/transam/varsup.c:175 access/transam/varsup.c:490 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "base de datos «%s» debe ser limpiada dentro de %u transacciones" -#: access/transam/varsup.c:155 access/transam/varsup.c:470 +#: access/transam/varsup.c:178 +#, c-format +msgid "" +"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 "" +"Para evitar fallas de asignación de IDs de transacción, ejecute VACUUM en esa base de datos.\n" +"Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." + +#: access/transam/varsup.c:182 access/transam/varsup.c:497 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "base de datos con OID %u debe ser limpiada dentro de %u transacciones" -#: access/transam/xact.c:1102 +#: 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 "" +"Para evitar que la base de datos se desactive, ejecute VACUUM en esa base de datos.\n" +"Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." + +#: access/transam/xact.c:649 +#, c-format +msgid "cannot assign transaction IDs during a parallel operation" +msgstr "no se puede asignar IDs de transacción durante una operación paralela" + +#: access/transam/xact.c:840 +#, c-format +msgid "cannot modify data in a parallel worker" +msgstr "no se pueden modificar datos en un proceso ayudante paralelo" + +#: access/transam/xact.c:1115 +#, c-format +msgid "cannot start commands during a parallel operation" +msgstr "no se puede iniciar órdenes durante una operación paralela" + +#: access/transam/xact.c:1123 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "no se pueden tener más de 2^32-2 órdenes en una transacción" -#: access/transam/xact.c:1643 +#: access/transam/xact.c:1664 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "se superó el número máximo de subtransacciones comprometidas (%d)" -#: access/transam/xact.c:2513 +#: access/transam/xact.c:2561 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "no se puede hacer PREPARE de una transacción que ha operado en objetos temporales" -#: access/transam/xact.c:2523 +#: access/transam/xact.c:2571 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "no se puede hacer PREPARE de una transacción que ha exportado snapshots" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3489 +#: access/transam/xact.c:3593 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s no puede ser ejecutado dentro de un bloque de transacción" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3499 +#: access/transam/xact.c:3603 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s no puede ser ejecutado dentro de una subtransacción" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3509 -#, fuzzy, c-format -#| msgid "%s cannot be executed from a function" +#: access/transam/xact.c:3613 +#, c-format msgid "%s cannot be executed within a pipeline" -msgstr "%s no puede ser ejecutado desde una función" +msgstr "%s no puede ser ejecutado en un “pipeline”" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3519 +#: access/transam/xact.c:3623 #, c-format msgid "%s cannot be executed from a function" msgstr "%s no puede ser ejecutado desde una función" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3590 access/transam/xact.c:3915 -#: access/transam/xact.c:3994 access/transam/xact.c:4117 -#: access/transam/xact.c:4268 access/transam/xact.c:4337 -#: access/transam/xact.c:4448 +#: access/transam/xact.c:3694 access/transam/xact.c:4019 +#: access/transam/xact.c:4098 access/transam/xact.c:4221 +#: access/transam/xact.c:4372 access/transam/xact.c:4441 +#: access/transam/xact.c:4552 #, c-format msgid "%s can only be used in transaction blocks" msgstr "la orden %s sólo puede ser usada en bloques de transacción" -#: access/transam/xact.c:3801 +#: access/transam/xact.c:3905 #, c-format msgid "there is already a transaction in progress" msgstr "ya hay una transacción en curso" -#: access/transam/xact.c:3920 access/transam/xact.c:3999 -#: access/transam/xact.c:4122 +#: access/transam/xact.c:4024 access/transam/xact.c:4103 +#: access/transam/xact.c:4226 #, c-format msgid "there is no transaction in progress" msgstr "no hay una transacción en curso" -#: access/transam/xact.c:4010 +#: access/transam/xact.c:4114 #, c-format msgid "cannot commit during a parallel operation" msgstr "no se puede comprometer una transacción durante una operación paralela" -#: access/transam/xact.c:4133 +#: access/transam/xact.c:4237 #, c-format msgid "cannot abort during a parallel operation" msgstr "no se puede abortar durante una operación paralela" -#: access/transam/xact.c:4232 +#: access/transam/xact.c:4336 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "no se pueden definir savepoints durante una operación paralela" -#: access/transam/xact.c:4319 +#: access/transam/xact.c:4423 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "no se pueden liberar savepoints durante una operación paralela" -#: access/transam/xact.c:4329 access/transam/xact.c:4380 -#: access/transam/xact.c:4440 access/transam/xact.c:4489 +#: access/transam/xact.c:4433 access/transam/xact.c:4484 +#: access/transam/xact.c:4544 access/transam/xact.c:4593 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "no existe el «savepoint» «%s»" -#: access/transam/xact.c:4386 access/transam/xact.c:4495 +#: access/transam/xact.c:4490 access/transam/xact.c:4599 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "el «savepoint» «%s» no existe dentro del nivel de savepoint actual" -#: access/transam/xact.c:4428 +#: access/transam/xact.c:4532 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "no se puede hacer rollback a un savepoint durante una operación paralela" -#: access/transam/xact.c:4556 -#, c-format -msgid "cannot start subtransactions during a parallel operation" -msgstr "no se pueden iniciar subtransacciones durante una operación paralela" - -#: access/transam/xact.c:4624 -#, c-format -msgid "cannot commit subtransactions during a parallel operation" -msgstr "no se pueden comprometer subtransacciones durante una operación paralela" - -#: access/transam/xact.c:5270 +#: access/transam/xact.c:5376 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "no se pueden tener más de 2^32-1 subtransacciones en una transacción" -#: access/transam/xlog.c:1466 +#: access/transam/xlog.c:1542 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "petición para sincronizar (flush) más allá del final del WAL generado; petición %X/%X, posición actual %X/%X" +#: access/transam/xlog.c:1769 +#, c-format +msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X" +msgstr "no se puede ler más allá del final del WAL generado; petición %X/%X, posición actual %X/%X" + +#: 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 "El tamaño de segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB." + #: access/transam/xlog.c:2228 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "no se pudo escribir archivo de registro %s en la posición %u, largo %zu: %m" +msgid "\"%s\" must be set to -1 during binary upgrade mode." +msgstr "«%s» debe ser establecido a -1 durante el modo de actualización binaria." + +#: access/transam/xlog.c:2477 +#, c-format +msgid "could not write to log file \"%s\" at offset %u, length %zu: %m" +msgstr "no se pudo escribir archivo de registro «%s» en la posición %u, largo %zu: %m" -#: access/transam/xlog.c:3455 access/transam/xlogutils.c:833 -#: replication/walsender.c:2725 +#: 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 "el segmento de WAL solicitado %s ya ha sido eliminado" -#: access/transam/xlog.c:3739 +#: access/transam/xlog.c:4061 #, c-format msgid "could not rename file \"%s\": %m" msgstr "no se pudo renombrar el archivo «%s»: %m" -#: access/transam/xlog.c:3781 access/transam/xlog.c:3791 +#: 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 "no existe el directorio WAL «%s»" -#: access/transam/xlog.c:3797 +#: access/transam/xlog.c:4121 access/transam/xlog.c:4142 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "creando el directorio WAL faltante «%s»" -#: access/transam/xlog.c:3800 commands/dbcommands.c:3095 +#: 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 "no se pudo crear el directorio faltante «%s»: %m" -#: access/transam/xlog.c:3867 +#: access/transam/xlog.c:4212 #, c-format msgid "could not generate secret authorization token" msgstr "no se pudo generar un token de autorización secreto" -#: access/transam/xlog.c:4017 access/transam/xlog.c:4026 -#: access/transam/xlog.c:4050 access/transam/xlog.c:4057 -#: access/transam/xlog.c:4064 access/transam/xlog.c:4069 -#: access/transam/xlog.c:4076 access/transam/xlog.c:4083 -#: access/transam/xlog.c:4090 access/transam/xlog.c:4097 -#: access/transam/xlog.c:4104 access/transam/xlog.c:4111 -#: access/transam/xlog.c:4120 access/transam/xlog.c:4127 -#: utils/init/miscinit.c:1762 +#: 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 "los archivos de base de datos son incompatibles con el servidor" -#: access/transam/xlog.c:4018 +#: 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 "Los archivos de base de datos fueron inicializados con PG_CONTROL_VERSION %d (0x%08x), pero el servidor fue compilado con PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4022 +#: 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 "Este puede ser un problema de discordancia en el orden de bytes. Parece que necesitará ejecutar initdb." -#: access/transam/xlog.c:4027 +#: 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 "Los archivos de base de datos fueron inicializados con PG_CONTROL_VERSION %d, pero el servidor fue compilado con PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4030 access/transam/xlog.c:4054 -#: access/transam/xlog.c:4061 access/transam/xlog.c:4066 +#: 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 "Parece que necesita ejecutar initdb." -#: access/transam/xlog.c:4041 +#: access/transam/xlog.c:4389 #, c-format msgid "incorrect checksum in control file" msgstr "la suma de verificación es incorrecta en el archivo de control" -#: access/transam/xlog.c:4051 +#: 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 "Los archivos de base de datos fueron inicializados con CATALOG_VERSION_NO %d, pero el servidor fue compilado con CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4058 +#: 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 "Los archivos de la base de datos fueron inicializados con MAXALIGN %d, pero el servidor fue compilado con MAXALIGN %d." -#: access/transam/xlog.c:4065 +#: 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 "Los archivos de la base de datos parecen usar un formato de número de coma flotante distinto al del ejecutable del servidor." -#: access/transam/xlog.c:4070 +#: 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 "Los archivos de base de datos fueron inicializados con BLCKSZ %d, pero el servidor fue compilado con BLCKSZ %d." -#: access/transam/xlog.c:4073 access/transam/xlog.c:4080 -#: access/transam/xlog.c:4087 access/transam/xlog.c:4094 -#: access/transam/xlog.c:4101 access/transam/xlog.c:4108 -#: access/transam/xlog.c:4115 access/transam/xlog.c:4123 -#: access/transam/xlog.c:4130 +#: 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 "Parece que necesita recompilar o ejecutar initdb." -#: access/transam/xlog.c:4077 +#: 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 "Los archivos de la base de datos fueron inicializados con RELSEG_SIZE %d, pero el servidor fue compilado con RELSEG_SIZE %d." -#: access/transam/xlog.c:4084 +#: 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 "Los archivos de base de datos fueron inicializados con XLOG_BLCKSZ %d, pero el servidor fue compilado con XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4091 +#: 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 "Los archivos de la base de datos fueron inicializados con NAMEDATALEN %d, pero el servidor fue compilado con NAMEDATALEN %d." -#: access/transam/xlog.c:4098 +#: 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 "Los archivos de la base de datos fueron inicializados con INDEX_MAX_KEYS %d, pero el servidor fue compilado con INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4105 +#: 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 "Los archivos de la base de datos fueron inicializados con TOAST_MAX_CHUNK_SIZE %d, pero el servidor fue compilado con TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4112 +#: 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 "Los archivos de base de datos fueron inicializados con LOBLKSIZE %d, pero el servidor fue compilado con LOBLKSIZE %d." -#: access/transam/xlog.c:4121 +#: 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 "Los archivos de base de datos fueron inicializados sin USE_FLOAT8_BYVAL, pero el servidor fue compilado con USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4128 +#: 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 "Los archivos de base de datos fueron inicializados con USE_FLOAT8_BYVAL, pero el servidor fue compilado sin USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4497 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" -msgstr[0] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d byte" -msgstr[1] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d bytes" +msgid "invalid WAL segment size in control file (%d byte)" +msgid_plural "invalid WAL segment size in control file (%d bytes)" +msgstr[0] "tamaño de segmento de WAL no válido (%d byte) en archivo de control" +msgstr[1] "tamaño de segmento de WAL no válido (%d bytes) en archivo de control" -#: access/transam/xlog.c:4149 +#: access/transam/xlog.c:4510 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "«min_wal_size» debe ser al menos el doble de «wal_segment_size»" -#: access/transam/xlog.c:4153 +#: access/transam/xlog.c:4514 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "«max_wal_size» debe ser al menos el doble de «wal_segment_size»" -#: access/transam/xlog.c:4308 catalog/namespace.c:4335 -#: commands/tablespace.c:1216 commands/user.c:2536 commands/variable.c:72 -#: utils/error/elog.c:2205 +#: 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 "La sintaxis de lista no es válida." -#: access/transam/xlog.c:4354 commands/user.c:2552 commands/variable.c:173 -#: utils/error/elog.c:2231 +#: 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 "Palabra clave no reconocida: «%s»." -#: access/transam/xlog.c:4768 +#: access/transam/xlog.c:5129 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "no se pudo escribir el archivo WAL de boostrap: %m" -#: access/transam/xlog.c:4776 +#: access/transam/xlog.c:5137 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "no se pudo sincronizar (fsync) el archivo de WAL de bootstrap: %m" -#: access/transam/xlog.c:4782 +#: access/transam/xlog.c:5143 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "no se pudo cerrar el archivo WAL de bootstrap: %m" -#: access/transam/xlog.c:4999 +#: access/transam/xlog.c:5368 #, c-format -msgid "WAL was generated with wal_level=minimal, cannot continue recovering" -msgstr "el WAL fue generado con wal_level=minimal, no se puede continuar con la recuperación" +msgid "WAL was generated with \"wal_level=minimal\", cannot continue recovering" +msgstr "el WAL fue generado con «wal_level=minimal», no se puede continuar con la recuperación" -#: access/transam/xlog.c:5000 +#: access/transam/xlog.c:5369 #, c-format -msgid "This happens if you temporarily set wal_level=minimal on the server." -msgstr "Esto sucede si temporalmente define wal_level=minimal en el servidor." +msgid "This happens if you temporarily set \"wal_level=minimal\" on the server." +msgstr "Esto sucede si temporalmente define «wal_level=minimal» en el servidor." -#: access/transam/xlog.c:5001 +#: access/transam/xlog.c:5370 #, c-format -msgid "Use a backup taken after setting wal_level to higher than minimal." -msgstr "Utilice un respaldo tomado después de establecer wal_level a un valor superior a minimal." +msgid "Use a backup taken after setting \"wal_level\" to higher than \"minimal\"." +msgstr "Utilice un respaldo tomado después de establecer «wal_level» a un valor superior a «minimal»." -#: access/transam/xlog.c:5065 +#: access/transam/xlog.c:5435 #, c-format msgid "control file contains invalid checkpoint location" -msgstr "el archivo de control contiene una ubicación no válida de punto de control" +msgstr "el archivo de control contiene una ubicación no válida de checkpoint" -#: access/transam/xlog.c:5076 +#: access/transam/xlog.c:5446 #, c-format msgid "database system was shut down at %s" msgstr "el sistema de bases de datos fue apagado en %s" -#: access/transam/xlog.c:5082 +#: access/transam/xlog.c:5452 #, c-format msgid "database system was shut down in recovery at %s" msgstr "el sistema de bases de datos fue apagado durante la recuperación en %s" -#: access/transam/xlog.c:5088 +#: access/transam/xlog.c:5458 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "el apagado del sistema de datos fue interrumpido; última vez registrada en funcionamiento en %s" -#: access/transam/xlog.c:5094 +#: access/transam/xlog.c:5464 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "el sistema de bases de datos fue interrumpido durante la recuperación en %s" -#: access/transam/xlog.c:5096 +#: 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 "Esto probablemente significa que algunos datos están corruptos y tendrá que usar el respaldo más reciente para la recuperación." -#: access/transam/xlog.c:5102 +#: access/transam/xlog.c:5472 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "el sistema de bases de datos fue interrumpido durante la recuperación en el instante de registro %s" -#: access/transam/xlog.c:5104 +#: 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 "Si esto ha ocurrido más de una vez, algunos datos podrían estar corruptos y podría ser necesario escoger un punto de recuperación anterior." -#: access/transam/xlog.c:5110 +#: access/transam/xlog.c:5480 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "el sistema de bases de datos fue interrumpido; última vez en funcionamiento en %s" -#: access/transam/xlog.c:5116 +#: access/transam/xlog.c:5487 #, c-format msgid "control file contains invalid database cluster state" msgstr "el archivo de control contiene un estado no válido del clúster" -#: access/transam/xlog.c:5500 +#: access/transam/xlog.c:5875 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL termina antes del fin del respaldo en línea" -#: access/transam/xlog.c:5501 +#: access/transam/xlog.c:5876 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Todo el WAL generado durante el respaldo en línea debe estar disponible durante la recuperación." -#: access/transam/xlog.c:5504 +#: access/transam/xlog.c:5880 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL termina antes del punto de recuperación consistente" -#: access/transam/xlog.c:5550 +#: access/transam/xlog.c:5926 #, c-format msgid "selected new timeline ID: %u" msgstr "seleccionado nuevo ID de timeline: %u" -#: access/transam/xlog.c:5583 +#: access/transam/xlog.c:5959 #, c-format msgid "archive recovery complete" msgstr "recuperación completa" -#: access/transam/xlog.c:6185 +#: access/transam/xlog.c:6612 #, c-format msgid "shutting down" msgstr "apagando" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6224 +#: access/transam/xlog.c:6651 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "empezando restartpoint:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6236 +#: access/transam/xlog.c:6663 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "empezando checkpoint:%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:6301 +#: 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 "" +msgstr "restartpoint completo: escritos %d búfers (%.1f%%); %d archivos WAL añadidos, %d eliminados, %d reciclados; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimación=%d kB; lsn=%X/%X, lsn de redo=%X/%X" -#: access/transam/xlog.c:6324 +#: 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 "" +msgstr "checkpoint completo: escritos %d búfers (%.1f%%); %d archivos WAL añadidos, %d eliminados, %d reciclados; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimación=%d kB; lsn=%X/%X, lsn de redo=%X/%X" -#: access/transam/xlog.c:6762 +#: access/transam/xlog.c:7233 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "hay actividad de WAL mientras el sistema se está apagando" -#: access/transam/xlog.c:7323 +#: access/transam/xlog.c:7818 #, c-format msgid "recovery restart point at %X/%X" msgstr "restartpoint de recuperación en %X/%X" -#: access/transam/xlog.c:7325 +#: access/transam/xlog.c:7820 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Última transacción completada al tiempo de registro %s." -#: access/transam/xlog.c:7573 +#: access/transam/xlog.c:8082 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "punto de recuperación «%s» creado en %X/%X" -#: access/transam/xlog.c:7780 +#: access/transam/xlog.c:8289 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "el respaldo en línea fue cancelado, la recuperación no puede continuar" -#: access/transam/xlog.c:7837 +#: access/transam/xlog.c:8347 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "ID de timeline %u inesperado (debería ser %u) en el registro de checkpoint de detención" -#: access/transam/xlog.c:7895 +#: access/transam/xlog.c:8405 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "ID de timeline %u inesperado (debería ser %u) en el registro de checkpoint «online»" -#: access/transam/xlog.c:7924 +#: access/transam/xlog.c:8434 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" msgstr "ID de timeline %u inesperado (debería ser %u) en el registro de fin-de-recuperación" -#: access/transam/xlog.c:8191 +#: access/transam/xlog.c:8705 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "no se pudo sincronizar (fsync write-through) el archivo «%s»: %m" -#: access/transam/xlog.c:8196 +#: access/transam/xlog.c:8710 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" -#: access/transam/xlog.c:8281 access/transam/xlog.c:8604 +#: access/transam/xlog.c:8797 access/transam/xlog.c:9133 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "el nivel de WAL no es suficiente para hacer un respaldo en línea" -#: access/transam/xlog.c:8282 access/transam/xlog.c:8605 -#: access/transam/xlogfuncs.c:254 +#: 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 debe ser definido a «replica» o «logical» al inicio del servidor." +msgid "\"wal_level\" must be set to \"replica\" or \"logical\" at server start." +msgstr "«wal_level» debe ser definido a «replica» o «logical» al inicio del servidor." -#: access/transam/xlog.c:8287 +#: access/transam/xlog.c:8803 #, c-format msgid "backup label too long (max %d bytes)" msgstr "la etiqueta de respaldo es demasiado larga (máximo %d bytes)" -#: access/transam/xlog.c:8408 +#: access/transam/xlog.c:8924 #, c-format -msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" -msgstr "el WAL generado con full_page_writes=off fue restaurado desde el último restartpoint" +msgid "WAL generated with \"full_page_writes=off\" was replayed since last restartpoint" +msgstr "el WAL generado con «full_page_writes=off» fue restaurado desde el último restartpoint" -#: access/transam/xlog.c:8410 access/transam/xlog.c:8693 +#: 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 "Esto significa que el respaldo que estaba siendo tomado en el standby está corrupto y no debería usarse. Active full_page_writes y ejecute CHECKPOINT en el primario, luego trate de ejecutar un respaldo en línea nuevamente." +msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable \"full_page_writes\" and run CHECKPOINT on the primary, and then try an online backup again." +msgstr "Esto significa que el respaldo que estaba siendo tomado en el standby está corrupto y no debería usarse. Active «full_page_writes» y ejecute CHECKPOINT en el primario, luego trate de ejecutar un respaldo en línea nuevamente." -#: access/transam/xlog.c:8477 backup/basebackup.c:1351 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 "no se pudo leer el enlace simbólico «%s»: %m" -#: access/transam/xlog.c:8484 backup/basebackup.c:1356 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 "la ruta «%s» del enlace simbólico es demasiado larga" -#: access/transam/xlog.c:8643 backup/basebackup.c:1217 +#: access/transam/xlog.c:9134 +#, c-format +msgid "wal_level must be set to \"replica\" or \"logical\" at server start." +msgstr "wal_level debe ser definido a «replica» o «logical» al inicio del servidor." + +#: access/transam/xlog.c:9172 backup/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "el standby fue promovido durante el respaldo en línea" -#: access/transam/xlog.c:8644 backup/basebackup.c:1218 +#: 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 "Esto significa que el respaldo que se estaba tomando está corrupto y no debería ser usado. Trate de ejecutar un nuevo respaldo en línea." -#: access/transam/xlog.c:8691 +#: access/transam/xlog.c:9220 #, c-format -msgid "WAL generated with full_page_writes=off was replayed during online backup" -msgstr "el WAL generado con full_page_writes=off fue restaurado durante el respaldo en línea" +msgid "WAL generated with \"full_page_writes=off\" was replayed during online backup" +msgstr "el WAL generado con «full_page_writes=off» fue restaurado durante el respaldo en línea" -#: access/transam/xlog.c:8807 +#: access/transam/xlog.c:9336 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "respaldo base completo, esperando que se archiven los segmentos WAL requeridos" -#: access/transam/xlog.c:8821 +#: access/transam/xlog.c:9350 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "todavía en espera de que todos los segmentos WAL requeridos sean archivados (han pasado %d segundos)" -#: access/transam/xlog.c:8823 +#: 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 "Verifique que su archive_command se esté ejecutando con normalidad. Puede cancelar este respaldo con confianza, pero el respaldo de la base de datos no será utilizable a menos que disponga de todos los segmentos de WAL." +msgid "Check that your \"archive_command\" is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." +msgstr "Verifique que su «archive_command» se esté ejecutando con normalidad. Puede cancelar este respaldo con confianza, pero el respaldo de la base de datos no será utilizable a menos que disponga de todos los segmentos de WAL." -#: access/transam/xlog.c:8830 +#: access/transam/xlog.c:9359 #, c-format msgid "all required WAL segments have been archived" msgstr "todos los segmentos de WAL requeridos han sido archivados" -#: access/transam/xlog.c:8834 +#: 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 "el archivado de WAL no está activo; debe asegurarse que todos los segmentos WAL requeridos se copian por algún otro mecanismo para completar el respaldo" -#: access/transam/xlog.c:8873 +#: access/transam/xlog.c:9402 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "abortando el backup porque el proceso servidor terminó antes de que pg_backup_stop fuera invocada" -#: access/transam/xlogarchive.c:207 +#: access/transam/xlogarchive.c:213 #, c-format msgid "archive file \"%s\" has wrong size: %lld instead of %lld" msgstr "el archivo «%s» tiene tamaño erróneo: %lld en lugar de %lld" -#: access/transam/xlogarchive.c:216 +#: access/transam/xlogarchive.c:222 #, c-format msgid "restored log file \"%s\" from archive" msgstr "se ha restaurado el archivo «%s» desde el área de archivado" -#: access/transam/xlogarchive.c:230 +#: access/transam/xlogarchive.c:236 #, c-format -msgid "restore_command returned a zero exit status, but stat() failed." -msgstr "restore_command retornó un estado de salida cero, pero stat() falló." +msgid "\"restore_command\" returned a zero exit status, but stat() failed." +msgstr "«restore_command» retornó un estado de salida cero, pero stat() falló." -#: access/transam/xlogarchive.c:262 +#: access/transam/xlogarchive.c:268 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "no se pudo recuperar el archivo «%s»: %s" @@ -2744,1028 +2989,1097 @@ msgstr "no se pudo recuperar el archivo «%s»: %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:340 +#: access/transam/xlogarchive.c:346 #, c-format msgid "%s \"%s\": %s" msgstr "%s «%s»: %s" -#: access/transam/xlogarchive.c:450 access/transam/xlogarchive.c:530 +#: access/transam/xlogarchive.c:456 access/transam/xlogarchive.c:536 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "no se pudo crear el archivo de estado «%s»: %m" -#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:538 +#: access/transam/xlogarchive.c:464 access/transam/xlogarchive.c:544 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "no se pudo escribir el archivo de estado «%s»: %m" -#: access/transam/xlogfuncs.c:75 backup/basebackup.c:973 +#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 #, c-format msgid "a backup is already in progress in this session" msgstr "ya hay un respaldo en curso en esta sesión" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:140 #, c-format msgid "backup is not in progress" msgstr "no hay respaldo en curso" -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "Did you call pg_backup_start()?" msgstr "¿Invocó pg_backup_start()?" -#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:248 -#: access/transam/xlogfuncs.c:287 access/transam/xlogfuncs.c:308 -#: access/transam/xlogfuncs.c:329 +#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 +#: access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:323 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "Las funciones de control de WAL no pueden ejecutarse durante la recuperación." -#: access/transam/xlogfuncs.c:215 access/transam/xlogfuncs.c:399 -#: access/transam/xlogfuncs.c:457 +#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:447 #, c-format msgid "%s cannot be executed during recovery." msgstr "No se puede ejecutar %s durante la recuperación." -# FIXME see logical.c:81 -#: access/transam/xlogfuncs.c:221 -#, fuzzy, c-format -#| msgid "replication slots can only be used if wal_level >= replica" -msgid "pg_log_standby_snapshot() can only be used if wal_level >= replica" -msgstr "los slots de replicación sólo pueden usarse si wal_level >= replica" +#: access/transam/xlogfuncs.c:215 +#, c-format +msgid "pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" +msgstr "pg_log_standby_snapshot() sólo puede usarse si «wal_level» >= «replica»" -#: access/transam/xlogfuncs.c:253 +#: access/transam/xlogfuncs.c:247 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "el nivel de WAL no es suficiente para crear un punto de recuperación" -#: access/transam/xlogfuncs.c:261 +#: access/transam/xlogfuncs.c:255 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "el valor es demasiado largo para un punto de recuperación (máximo %d caracteres)" -#: access/transam/xlogfuncs.c:496 -#, fuzzy, c-format -#| msgid "invalid locale name \"%s\"" +#: access/transam/xlogfuncs.c:486 +#, c-format msgid "invalid WAL file name \"%s\"" -msgstr "nombre de configuración regional «%s» no es válido" +msgstr "nombre de archivo WAL «%s» no válido" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 -#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 -#: access/transam/xlogfuncs.c:689 +#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 +#: access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 +#: access/transam/xlogfuncs.c:679 #, c-format msgid "recovery is not in progress" msgstr "la recuperación no está en proceso" -#: access/transam/xlogfuncs.c:533 access/transam/xlogfuncs.c:563 -#: access/transam/xlogfuncs.c:587 access/transam/xlogfuncs.c:610 -#: access/transam/xlogfuncs.c:690 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 +#: access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 +#: access/transam/xlogfuncs.c:680 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Las funciones de control de recuperación sólo pueden ejecutarse durante la recuperación." -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 #, c-format msgid "standby promotion is ongoing" msgstr "la promoción del standby está en curso" -#: access/transam/xlogfuncs.c:539 access/transam/xlogfuncs.c:569 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "%s no puede ser ejecutado después que una promoción es solicitada." -#: access/transam/xlogfuncs.c:695 +#: access/transam/xlogfuncs.c:685 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "«wait_seconds» no puede ser negativo o cero" -#: access/transam/xlogfuncs.c:715 storage/ipc/signalfuncs.c:260 +#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "no se pudo enviar señal a postmaster: %m" -#: access/transam/xlogfuncs.c:751 +#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#, c-format +msgid "terminating connection due to unexpected postmaster exit" +msgstr "terminando la conexión debido al término inesperado de postmaster" + +#: access/transam/xlogfuncs.c:740 +#, c-format +msgid "while waiting on promotion" +msgstr "mientras se esperaba la promoción" + +#: access/transam/xlogfuncs.c:744 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" msgstr[0] "el servidor no se promovió en %d segundo" msgstr[1] "el servidor no se promovió en %d segundos" -#: access/transam/xlogprefetcher.c:1092 +#: access/transam/xlogprefetcher.c:1088 #, c-format -msgid "recovery_prefetch is not supported on platforms that lack posix_fadvise()." -msgstr "recovery_prefetch no está soportado en plataformas que no tienen posix_fadvise()." +msgid "\"recovery_prefetch\" is not supported on platforms that lack posix_fadvise()." +msgstr "«recovery_prefetch» no está soportado en plataformas que no tienen posix_fadvise()." -#: access/transam/xlogreader.c:626 +#: access/transam/xlogreader.c:619 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "desplazamiento de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u" -#: access/transam/xlogreader.c:635 +#: access/transam/xlogreader.c:628 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord solicitado por %X/%X" -#: access/transam/xlogreader.c:676 access/transam/xlogreader.c:1123 +#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 #, c-format msgid "invalid record length at %X/%X: expected at least %u, got %u" msgstr "largo de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u" -#: access/transam/xlogreader.c:705 -#, c-format -msgid "out of memory while trying to decode a record of length %u" -msgstr "memoria agotada mientras se intentaba decodificar un registro de largo %u" - -#: access/transam/xlogreader.c:727 -#, c-format -msgid "record length %u at %X/%X too long" -msgstr "largo de registro %u en %X/%X demasiado largo" - -#: access/transam/xlogreader.c:776 +#: access/transam/xlogreader.c:758 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: access/transam/xlogreader.c:789 +#: access/transam/xlogreader.c:771 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%X" -#: access/transam/xlogreader.c:924 -#, c-format -msgid "missing contrecord at %X/%X" -msgstr "falta un contrecord en %X/%X" - -#: access/transam/xlogreader.c:1131 +#: access/transam/xlogreader.c:1142 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: access/transam/xlogreader.c:1144 access/transam/xlogreader.c:1160 +#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: access/transam/xlogreader.c:1196 +#: access/transam/xlogreader.c:1209 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: access/transam/xlogreader.c:1230 +#: access/transam/xlogreader.c:1243 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%X, posición %u" -#: access/transam/xlogreader.c:1245 access/transam/xlogreader.c:1287 +#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%X, posición %u" -#: access/transam/xlogreader.c:1261 +#: access/transam/xlogreader.c:1274 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: access/transam/xlogreader.c:1269 +#: access/transam/xlogreader.c:1282 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: access/transam/xlogreader.c:1275 +#: access/transam/xlogreader.c:1288 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: access/transam/xlogreader.c:1307 +#: access/transam/xlogreader.c:1320 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "pageaddr %X/%X inesperado en segmento WAL %s, LSN %X/%X, posición %u" -#: access/transam/xlogreader.c:1333 +#: access/transam/xlogreader.c:1346 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%X, posición %u" -#: access/transam/xlogreader.c:1739 +#: access/transam/xlogreader.c:1749 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: access/transam/xlogreader.c:1763 +#: access/transam/xlogreader.c:1773 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: access/transam/xlogreader.c:1770 +#: access/transam/xlogreader.c:1780 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: access/transam/xlogreader.c:1806 +#: access/transam/xlogreader.c:1816 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: access/transam/xlogreader.c:1822 +#: access/transam/xlogreader.c:1832 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: access/transam/xlogreader.c:1836 +#: access/transam/xlogreader.c:1846 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1851 +#: access/transam/xlogreader.c:1861 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1867 +#: access/transam/xlogreader.c:1877 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: access/transam/xlogreader.c:1879 +#: access/transam/xlogreader.c:1889 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: access/transam/xlogreader.c:1946 +#: access/transam/xlogreader.c:1956 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: access/transam/xlogreader.c:1972 +#: access/transam/xlogreader.c:1982 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "no se pudo localizar un bloque de respaldo con ID %d en el registro WAL" -#: access/transam/xlogreader.c:2056 +#: access/transam/xlogreader.c:2066 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "no se pudo restaurar la imagen en %X/%X con bloque especifica %d no válido" -#: access/transam/xlogreader.c:2063 +#: access/transam/xlogreader.c:2073 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "no se pudo restaurar la imagen en %X/%X con estado no válido, bloque %d" -#: access/transam/xlogreader.c:2090 access/transam/xlogreader.c:2107 +#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 #, c-format msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d" msgstr "no se pudo restaurar la imagen en %X/%X comprimida con %s que no está soportado por esta instalación, bloque %d" -#: access/transam/xlogreader.c:2116 +#: access/transam/xlogreader.c:2126 #, c-format msgid "could not restore image at %X/%X compressed with unknown method, block %d" msgstr "no se pudo restaurar la imagen en %X/%X comprimida con un método desconocido, bloque %d" -#: access/transam/xlogreader.c:2124 +#: access/transam/xlogreader.c:2134 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "no se pudo descomprimir la imagen en %X/%X, bloque %d" -#: access/transam/xlogrecovery.c:547 -#, c-format -msgid "entering standby mode" -msgstr "entrando al modo standby" - -#: access/transam/xlogrecovery.c:550 -#, c-format -msgid "starting point-in-time recovery to XID %u" -msgstr "comenzando el proceso de recuperación hasta el XID %u" - -#: access/transam/xlogrecovery.c:554 -#, c-format -msgid "starting point-in-time recovery to %s" -msgstr "comenzando el proceso de recuperación hasta %s" - -#: access/transam/xlogrecovery.c:558 -#, c-format -msgid "starting point-in-time recovery to \"%s\"" -msgstr "comenzando el proceso de recuperación hasta «%s»" - -#: access/transam/xlogrecovery.c:562 -#, c-format -msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" -msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%X»" - -#: access/transam/xlogrecovery.c:566 -#, c-format -msgid "starting point-in-time recovery to earliest consistent point" -msgstr "comenzando recuperación a un punto en el tiempo hasta alcanzar un estado consistente" - -#: access/transam/xlogrecovery.c:569 +#: access/transam/xlogrecovery.c:617 #, c-format -msgid "starting archive recovery" -msgstr "comenzando proceso de recuperación" +msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u" +msgstr "iniciando recuperación de backup con LSN de redo %X/%X, LSN de checkpoint %X/%X, en timeline %u" -#: access/transam/xlogrecovery.c:653 +#: access/transam/xlogrecovery.c:649 #, c-format -msgid "could not find redo location referenced by checkpoint record" -msgstr "no se pudo encontrar la ubicación de redo referida por el registro de punto de control" +msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X" +msgstr "no se pudo encontrar la ubicación de redo %X/%X referida por el registro de checkpoint en %X/%X" # Purposefully deviate from quoting convention here, since argument is a shell command. -#: access/transam/xlogrecovery.c:654 access/transam/xlogrecovery.c:664 +#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 #, c-format msgid "" -"If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" +"If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup." msgstr "" -"Si está restaurando de un respaldo, ejecute «touch \"%s.recovery.signal\"» y agregue las opciones de restauración necesarias.\n" +"Si está restaurando de un respaldo, ejecute «touch \"%s/recovery.signal\"» o «%s/standby.signal» y agregue las opciones de restauración necesarias.\n" "Si no está restaurando de un respaldo, intente eliminar el archivo \"%s/backup_label\".\n" "Tenga cuidado: eliminar \"%s/backup_label\" resultará en un clúster corrupto si está restaurando de un respaldo." -#: access/transam/xlogrecovery.c:663 +#: access/transam/xlogrecovery.c:660 #, c-format -msgid "could not locate required checkpoint record" -msgstr "no se pudo localizar el registro del punto de control requerido" +msgid "could not locate required checkpoint record at %X/%X" +msgstr "no se pudo localizar el registro de checkpoint requerido en %X/%X" -#: access/transam/xlogrecovery.c:692 commands/tablespace.c:670 +#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: access/transam/xlogrecovery.c:724 access/transam/xlogrecovery.c:730 +#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignorando el archivo «%s» porque no existe un archivo «%s»" -#: access/transam/xlogrecovery.c:726 +#: access/transam/xlogrecovery.c:725 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "El archivo «%s» fue renombrado a «%s»." -#: access/transam/xlogrecovery.c:732 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "No se pudo renombrar el archivo de «%s» a «%s»: %m." -#: access/transam/xlogrecovery.c:786 +#: access/transam/xlogrecovery.c:770 +#, c-format +msgid "restarting backup recovery with redo LSN %X/%X" +msgstr "reiniciando recuperación del backup con LSN de redo «%X/%X»" + +#: access/transam/xlogrecovery.c:795 +#, c-format +msgid "could not locate a valid checkpoint record at %X/%X" +msgstr "no se pudo localizar un registro de válido en %X/%X" + +#: access/transam/xlogrecovery.c:806 +#, c-format +msgid "entering standby mode" +msgstr "entrando al modo standby" + +#: access/transam/xlogrecovery.c:809 +#, c-format +msgid "starting point-in-time recovery to XID %u" +msgstr "comenzando el proceso de recuperación hasta el XID %u" + +#: access/transam/xlogrecovery.c:813 #, c-format -msgid "could not locate a valid checkpoint record" -msgstr "no se pudo localizar un registro de punto de control válido" +msgid "starting point-in-time recovery to %s" +msgstr "comenzando el proceso de recuperación hasta %s" + +#: access/transam/xlogrecovery.c:817 +#, c-format +msgid "starting point-in-time recovery to \"%s\"" +msgstr "comenzando el proceso de recuperación hasta «%s»" + +#: access/transam/xlogrecovery.c:821 +#, c-format +msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" +msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%X»" + +#: access/transam/xlogrecovery.c:825 +#, c-format +msgid "starting point-in-time recovery to earliest consistent point" +msgstr "comenzando recuperación a un punto en el tiempo hasta alcanzar un estado consistente" + +#: access/transam/xlogrecovery.c:828 +#, c-format +msgid "starting archive recovery" +msgstr "comenzando proceso de recuperación" -#: access/transam/xlogrecovery.c:810 +#: access/transam/xlogrecovery.c:849 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "el timeline solicitado %u no es un hijo de la historia de este servidor" -#: access/transam/xlogrecovery.c:812 +#: access/transam/xlogrecovery.c:851 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." -msgstr "El punto de control más reciente está en %X/%X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%X." +msgstr "El checkpoint más reciente está en %X/%X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%X." -#: access/transam/xlogrecovery.c:826 +#: access/transam/xlogrecovery.c:865 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "el timeline solicitado %u no contiene el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlogrecovery.c:854 +#: access/transam/xlogrecovery.c:893 #, c-format msgid "invalid next transaction ID" msgstr "el siguiente ID de transacción no es válido" -#: access/transam/xlogrecovery.c:859 +#: access/transam/xlogrecovery.c:898 #, c-format msgid "invalid redo in checkpoint record" -msgstr "redo no es válido en el registro de punto de control" +msgstr "redo no es válido en el registro de checkpoint" -#: access/transam/xlogrecovery.c:870 +#: access/transam/xlogrecovery.c:909 #, c-format msgid "invalid redo record in shutdown checkpoint" -msgstr "registro redo no es válido en el punto de control de apagado" +msgstr "registro redo no es válido en el checkpoint de apagado" -#: access/transam/xlogrecovery.c:899 +#: access/transam/xlogrecovery.c:938 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "el sistema de bases de datos no fue apagado apropiadamente; se está efectuando la recuperación automática" -#: access/transam/xlogrecovery.c:903 +#: access/transam/xlogrecovery.c:942 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la recuperación comienza en el timeline %u y tiene un timeline de destino %u" -#: access/transam/xlogrecovery.c:946 +#: access/transam/xlogrecovery.c:985 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contiene datos inconsistentes con el archivo de control" -#: access/transam/xlogrecovery.c:947 +#: access/transam/xlogrecovery.c:986 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Esto significa que el respaldo está corrupto y deberá usar otro respaldo para la recuperación." -#: access/transam/xlogrecovery.c:1001 +#: access/transam/xlogrecovery.c:1040 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "el uso del archivo de configuración de recuperación «%s» no está soportado" -#: access/transam/xlogrecovery.c:1066 +#: access/transam/xlogrecovery.c:1105 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "el modo standby no está soportado en el modo mono-usuario" -#: access/transam/xlogrecovery.c:1083 +#: access/transam/xlogrecovery.c:1122 #, c-format -msgid "specified neither primary_conninfo nor restore_command" -msgstr "no se especifica primary_conninfo ni restore_command" +msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" +msgstr "no se especifica «primary_conninfo» ni «restore_command»" -#: access/transam/xlogrecovery.c:1084 +#: access/transam/xlogrecovery.c:1123 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "El servidor de bases de datos monitoreará el subdirectorio pg_wal con regularidad en búsqueda de archivos almacenados ahí." -#: access/transam/xlogrecovery.c:1092 +#: access/transam/xlogrecovery.c:1131 #, c-format -msgid "must specify restore_command when standby mode is not enabled" -msgstr "debe especificarse restore_command cuando el modo standby no está activo" +msgid "must specify \"restore_command\" when standby mode is not enabled" +msgstr "debe especificarse «restore_command» cuando el modo standby no está activo" -#: access/transam/xlogrecovery.c:1130 +#: access/transam/xlogrecovery.c:1169 #, c-format msgid "recovery target timeline %u does not exist" msgstr "no existe el timeline %u especificado como destino de recuperación" -#: access/transam/xlogrecovery.c:1213 access/transam/xlogrecovery.c:1220 -#: access/transam/xlogrecovery.c:1279 access/transam/xlogrecovery.c:1359 -#: access/transam/xlogrecovery.c:1383 +#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 +#: access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 +#: access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 #, c-format msgid "invalid data in file \"%s\"" msgstr "datos no válidos en archivo «%s»" -#: access/transam/xlogrecovery.c:1280 +#: access/transam/xlogrecovery.c:1319 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "El ID de timeline interpretado es %u, pero se esperaba %u." -#: access/transam/xlogrecovery.c:1662 +#: access/transam/xlogrecovery.c:1330 +#, c-format +msgid "this is an incremental backup, not a data directory" +msgstr "esto es un backup incremental, no un directorio de datos" + +#: access/transam/xlogrecovery.c:1331 +#, c-format +msgid "Use pg_combinebackup to reconstruct a valid data directory." +msgstr "Use pg_combinebackup para reconstruir un directorio de datos válido." + +#: access/transam/xlogrecovery.c:1717 +#, c-format +msgid "unexpected record type found at redo point %X/%X" +msgstr "se encontró registro de tipo inesperada en el punto de redo %X/%X" + +#: access/transam/xlogrecovery.c:1740 #, c-format msgid "redo starts at %X/%X" msgstr "redo comienza en %X/%X" -#: access/transam/xlogrecovery.c:1675 +#: access/transam/xlogrecovery.c:1753 #, c-format msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "redo en progreso, tiempo transcurrido: %ld.%02d s, LSN actual: %X/%X" -#: access/transam/xlogrecovery.c:1767 +#: access/transam/xlogrecovery.c:1843 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "el punto de detención de recuperación pedido es antes del punto de recuperación consistente" -#: access/transam/xlogrecovery.c:1799 +#: access/transam/xlogrecovery.c:1875 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "redo listo en %X/%X utilización del sistema: %s" -#: access/transam/xlogrecovery.c:1805 +#: access/transam/xlogrecovery.c:1881 #, c-format msgid "last completed transaction was at log time %s" msgstr "última transacción completada al tiempo de registro %s" -#: access/transam/xlogrecovery.c:1814 +#: access/transam/xlogrecovery.c:1890 #, c-format msgid "redo is not required" msgstr "no se requiere redo" -#: access/transam/xlogrecovery.c:1825 +#: access/transam/xlogrecovery.c:1901 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "la recuperación terminó antes de alcanzar el punto configurado como destino de recuperación" -#: access/transam/xlogrecovery.c:2019 +#: access/transam/xlogrecovery.c:2095 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "se omitió con éxito contrecord no encontrado en %X/%X, sobrescrito en %s" -#: access/transam/xlogrecovery.c:2086 +#: access/transam/xlogrecovery.c:2162 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "entrada de directorio inesperada «%s» fue encontrada en %s" -#: access/transam/xlogrecovery.c:2088 +#: access/transam/xlogrecovery.c:2164 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Todas las entradas de directorio en pg_tblspc deberían ser enlaces simbólicos" -#: access/transam/xlogrecovery.c:2089 +#: access/transam/xlogrecovery.c:2165 #, c-format -msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." -msgstr "Elimine esos directorios, o defina allow_in_place_tablespaces a ON transitoriamente para permitir que la recuperación pueda completarse." +msgid "Remove those directories, or set \"allow_in_place_tablespaces\" to ON transiently to let recovery complete." +msgstr "Elimine esos directorios, o defina «allow_in_place_tablespaces» a ON transitoriamente para permitir que la recuperación pueda completarse." -#: access/transam/xlogrecovery.c:2163 +#: access/transam/xlogrecovery.c:2217 +#, c-format +msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" +msgstr "se completó la recuperación de backup con LSN de redo %X/%X y LSN de término %X/%X" + +#: access/transam/xlogrecovery.c:2247 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "el estado de recuperación consistente fue alcanzado en %X/%X" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2201 +#: access/transam/xlogrecovery.c:2285 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "redo WAL en %X/%X para %s" -#: access/transam/xlogrecovery.c:2299 +#: access/transam/xlogrecovery.c:2383 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" -msgstr "ID de timeline previo %u inesperado (timeline actual %u) en el registro de punto de control" +msgstr "ID de timeline previo %u inesperado (timeline actual %u) en el registro de checkpoint" -#: access/transam/xlogrecovery.c:2308 +#: access/transam/xlogrecovery.c:2392 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" -msgstr "ID de timeline %u inesperado (después de %u) en el registro de punto de control" +msgstr "ID de timeline %u inesperado (después de %u) en el registro de checkpoint" -#: access/transam/xlogrecovery.c:2324 +#: access/transam/xlogrecovery.c:2408 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "timeline ID %u inesperado en registro de checkpoint, antes de alcanzar el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlogrecovery.c:2508 access/transam/xlogrecovery.c:2784 +#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 #, c-format msgid "recovery stopping after reaching consistency" msgstr "deteniendo recuperación al alcanzar un estado consistente" -#: access/transam/xlogrecovery.c:2529 +#: access/transam/xlogrecovery.c:2613 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación antes de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlogrecovery.c:2619 +#: access/transam/xlogrecovery.c:2703 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "deteniendo recuperación antes de comprometer la transacción %u, hora %s" -#: access/transam/xlogrecovery.c:2626 +#: access/transam/xlogrecovery.c:2710 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "deteniendo recuperación antes de abortar la transacción %u, hora %s" -#: access/transam/xlogrecovery.c:2679 +#: access/transam/xlogrecovery.c:2763 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "deteniendo recuperación en el punto de recuperación «%s», hora %s" -#: access/transam/xlogrecovery.c:2697 +#: access/transam/xlogrecovery.c:2781 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación después de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlogrecovery.c:2764 +#: access/transam/xlogrecovery.c:2848 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "deteniendo recuperación de comprometer la transacción %u, hora %s" -#: access/transam/xlogrecovery.c:2772 +#: access/transam/xlogrecovery.c:2856 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "deteniendo recuperación después de abortar la transacción %u, hora %s" -#: access/transam/xlogrecovery.c:2853 +#: access/transam/xlogrecovery.c:2937 #, c-format msgid "pausing at the end of recovery" msgstr "pausando al final de la recuperación" -#: access/transam/xlogrecovery.c:2854 +#: access/transam/xlogrecovery.c:2938 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Ejecute pg_wal_replay_resume() para promover." -#: access/transam/xlogrecovery.c:2857 access/transam/xlogrecovery.c:4594 +#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4679 #, c-format msgid "recovery has paused" msgstr "la recuperación está en pausa" -#: access/transam/xlogrecovery.c:2858 +#: access/transam/xlogrecovery.c:2942 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Ejecute pg_wal_replay_resume() para continuar." -#: access/transam/xlogrecovery.c:3121 -#, fuzzy, c-format -#| msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" +#: access/transam/xlogrecovery.c:3205 +#, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" -msgstr "pageaddr %X/%X inesperado en segmento WAL %s, LSN %X/%X, posición %u" +msgstr "ID de timeline %u inesperado en segmento WAL %s, LSN %X/%X, posición %u" -#: access/transam/xlogrecovery.c:3329 -#, fuzzy, c-format -#| msgid "could not read from file %s, offset %d: %m" +#: access/transam/xlogrecovery.c:3413 +#, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" -msgstr "no se pudo leer desde el archivo «%s» en la posición %d: %m" +msgstr "no se pudo leer desde el segmento de WAL %s, LSN %X/%X, posición %u: %m" -#: access/transam/xlogrecovery.c:3336 -#, fuzzy, c-format -#| msgid "could not read from file %s, offset %d: read %d of %d" +#: access/transam/xlogrecovery.c:3420 +#, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" -msgstr "no se pudo leer del archivo %s, posición %d: leídos %d de %d" +msgstr "no se pudo leer del segmento de WAL %s, LSN %X/%X, posición %u: leídos %d de %zu" -#: access/transam/xlogrecovery.c:3976 -#, fuzzy, c-format -#| msgid "invalid checkpoint record" +#: access/transam/xlogrecovery.c:4061 +#, c-format msgid "invalid checkpoint location" -msgstr "el registro del punto de control no es válido" +msgstr "ubicación de checkpoint no válida" -#: access/transam/xlogrecovery.c:3986 +#: access/transam/xlogrecovery.c:4071 #, c-format msgid "invalid checkpoint record" -msgstr "el registro del punto de control no es válido" +msgstr "el registro del checkpoint no es válido" -#: access/transam/xlogrecovery.c:3992 +#: access/transam/xlogrecovery.c:4077 #, c-format msgid "invalid resource manager ID in checkpoint record" -msgstr "el ID de gestor de recursos en el registro del punto de control no es válido" +msgstr "el ID de gestor de recursos en el registro del checkpoint no es válido" -#: access/transam/xlogrecovery.c:4000 +#: access/transam/xlogrecovery.c:4085 #, c-format msgid "invalid xl_info in checkpoint record" -msgstr "xl_info en el registro del punto de control no es válido" +msgstr "xl_info en el registro del checkpoint no es válido" -#: access/transam/xlogrecovery.c:4006 +#: access/transam/xlogrecovery.c:4091 #, c-format msgid "invalid length of checkpoint record" -msgstr "la longitud del registro de punto de control no es válida" +msgstr "la longitud del registro de checkpoint no es válida" -#: access/transam/xlogrecovery.c:4060 +#: access/transam/xlogrecovery.c:4145 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "el nuevo timeline %u especificado no es hijo del timeline de sistema %u" -#: access/transam/xlogrecovery.c:4074 +#: 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 "el nuevo timeline %u bifurcó del timeline del sistema actual %u antes del punto re recuperación actual %X/%X" -#: access/transam/xlogrecovery.c:4093 +#: access/transam/xlogrecovery.c:4178 #, c-format msgid "new target timeline is %u" msgstr "el nuevo timeline destino es %u" -#: access/transam/xlogrecovery.c:4296 +#: access/transam/xlogrecovery.c:4381 #, c-format msgid "WAL receiver process shutdown requested" msgstr "se recibió una petición de apagado para el proceso receptor de wal" -#: access/transam/xlogrecovery.c:4356 +#: access/transam/xlogrecovery.c:4441 #, c-format msgid "received promote request" msgstr "se recibió petición de promoción" -#: access/transam/xlogrecovery.c:4585 +#: access/transam/xlogrecovery.c:4670 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "hot standby no es posible porque la configuración de parámetros no es suficiente" -#: access/transam/xlogrecovery.c:4586 access/transam/xlogrecovery.c:4613 -#: access/transam/xlogrecovery.c:4643 +#: 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 es una configuración menor que en el servidor primario, donde su valor era %d." -#: access/transam/xlogrecovery.c:4595 +#: access/transam/xlogrecovery.c:4680 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Si se continúa con la recuperación, el servidor se apagará." -#: access/transam/xlogrecovery.c:4596 +#: access/transam/xlogrecovery.c:4681 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Luego puede reiniciar el servidor después de hacer los cambios necesarios en la configuración." -#: access/transam/xlogrecovery.c:4607 +#: access/transam/xlogrecovery.c:4692 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "la promoción no es posible porque la configuración de parámetros no es suficiente" -#: access/transam/xlogrecovery.c:4617 +#: access/transam/xlogrecovery.c:4702 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Reinicie el servidor luego de hacer los cambios necesarios en la configuración." -#: access/transam/xlogrecovery.c:4641 +#: access/transam/xlogrecovery.c:4726 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "se abortó la recuperación porque la configuración de parámetros no es suficiente" -#: access/transam/xlogrecovery.c:4647 +#: access/transam/xlogrecovery.c:4732 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Puede reiniciar el servidor luego de hacer los cambios necesarios en la configuración." -#: access/transam/xlogrecovery.c:4689 +#: access/transam/xlogrecovery.c:4774 #, c-format msgid "multiple recovery targets specified" msgstr "múltiples valores de destino de recuperación especificados" -#: access/transam/xlogrecovery.c:4690 +#: 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 "A lo más uno de recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid puede estar definido." +msgid "At most one of \"recovery_target\", \"recovery_target_lsn\", \"recovery_target_name\", \"recovery_target_time\", \"recovery_target_xid\" may be set." +msgstr "A lo más uno de «recovery_target», «recovery_target_lsn», «recovery_target_name», «recovery_target_time», «recovery_target_xid» puede estar definido." -#: access/transam/xlogrecovery.c:4701 +#: access/transam/xlogrecovery.c:4786 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "El único valor permitido es «immediate»." -#: access/transam/xlogrecovery.c:4853 utils/adt/timestamp.c:186 -#: utils/adt/timestamp.c:439 +#: access/transam/xlogrecovery.c:4938 utils/adt/timestamp.c:202 +#: utils/adt/timestamp.c:455 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuera de rango: «%s»" -#: access/transam/xlogrecovery.c:4898 +#: access/transam/xlogrecovery.c:4983 #, c-format -msgid "recovery_target_timeline is not a valid number." -msgstr "recovery_target_timeline no es un número válido." +msgid "\"recovery_target_timeline\" is not a valid number." +msgstr "«recovery_target_timeline» no es un número válido." -#: access/transam/xlogutils.c:1039 -#, fuzzy, c-format -#| msgid "could not read from file %s, offset %d: %m" +#: access/transam/xlogutils.c:1032 +#, c-format msgid "could not read from WAL segment %s, offset %d: %m" -msgstr "no se pudo leer desde el archivo «%s» en la posición %d: %m" +msgstr "no se pudo leer desde el segmento de WAL %s, posición %d: %m" -#: access/transam/xlogutils.c:1046 -#, fuzzy, c-format -#| msgid "could not read from file %s, offset %d: read %d of %d" +#: access/transam/xlogutils.c:1039 +#, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" -msgstr "no se pudo leer del archivo %s, posición %d: leídos %d de %d" +msgstr "no se pudo leer del segmento de WAL %s, posición %d: leídos %d de %d" -#: archive/shell_archive.c:96 +#: archive/shell_archive.c:98 #, c-format msgid "archive command failed with exit code %d" msgstr "la orden de archivado falló con código de retorno %d" -#: archive/shell_archive.c:98 archive/shell_archive.c:108 -#: archive/shell_archive.c:114 archive/shell_archive.c:123 +#: archive/shell_archive.c:100 archive/shell_archive.c:110 +#: archive/shell_archive.c:116 archive/shell_archive.c:125 #, c-format msgid "The failed archive command was: %s" msgstr "La orden fallida era: «%s»" -#: archive/shell_archive.c:105 +#: archive/shell_archive.c:107 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "la orden de archivado fue terminada por una excepción 0x%X" -#: archive/shell_archive.c:107 postmaster/postmaster.c:3675 +#: 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 "Vea el archivo «ntstatus.h» para una descripción del valor hexadecimal." -#: archive/shell_archive.c:112 +#: archive/shell_archive.c:114 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "la orden de archivado fue terminada por una señal %d: %s" -#: archive/shell_archive.c:121 +#: archive/shell_archive.c:123 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la orden de archivado fue terminada con código %d no reconocido" -#: backup/backup_manifest.c:253 +#: backup/backup_manifest.c:254 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "se esperaba el timeline de término %u pero se encontró el timeline %u" -#: backup/backup_manifest.c:277 +#: backup/backup_manifest.c:278 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "se esperaba el timeline de inicio %u pero se encontró el timeline %u" -#: backup/backup_manifest.c:304 +#: backup/backup_manifest.c:305 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "el timeline de inicio %u no fue encontrado en la historia del timeline %u" -#: backup/backup_manifest.c:355 +#: backup/backup_manifest.c:356 #, c-format msgid "could not rewind temporary file" msgstr "no se puede rebobinar el archivo temporal" -#: backup/basebackup.c:470 +#: backup/basebackup.c:479 #, c-format msgid "could not find any WAL files" msgstr "no se pudo encontrar ningún archivo de WAL" -#: backup/basebackup.c:485 backup/basebackup.c:500 backup/basebackup.c:509 +#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 #, c-format msgid "could not find WAL file \"%s\"" msgstr "no se pudo encontrar archivo de WAL «%s»" -#: backup/basebackup.c:551 backup/basebackup.c:576 +#: backup/basebackup.c:560 backup/basebackup.c:585 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "tamaño del archivo WAL «%s» inesperado" -#: backup/basebackup.c:646 +#: backup/basebackup.c:656 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" msgstr[0] "%lld falla de verificación de suma de comprobación en total" msgstr[1] "%lld fallas de verificación de suma de comprobación en total" -#: backup/basebackup.c:653 +#: backup/basebackup.c:663 #, c-format msgid "checksum verification failure during base backup" msgstr "falla en verificación de checksums durante respaldo base" -#: backup/basebackup.c:722 backup/basebackup.c:731 backup/basebackup.c:742 -#: backup/basebackup.c:759 backup/basebackup.c:768 backup/basebackup.c:779 -#: backup/basebackup.c:796 backup/basebackup.c:805 backup/basebackup.c:817 -#: backup/basebackup.c:841 backup/basebackup.c:855 backup/basebackup.c:866 -#: backup/basebackup.c:877 backup/basebackup.c:890 +#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 +#: backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 +#: backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 +#: backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 +#: backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 #, c-format msgid "duplicate option \"%s\"" msgstr "nombre de opción «%s» duplicada" -#: backup/basebackup.c:750 -#, fuzzy, c-format -#| msgid "unrecognized object type \"%s\"" +#: backup/basebackup.c:761 +#, c-format msgid "unrecognized checkpoint type: \"%s\"" -msgstr "tipo de objeto «%s» no reconocido" +msgstr "tipo de checkpoint no reconocido: «%s»" + +#: backup/basebackup.c:793 +#, c-format +msgid "incremental backups cannot be taken unless WAL summarization is enabled" +msgstr "los backups incrementales no pueden tomarse a menos que la sumarización de WAL esté activada" -#: backup/basebackup.c:785 +#: backup/basebackup.c:809 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" -#: backup/basebackup.c:830 +#: backup/basebackup.c:854 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "opción de manifiesto «%s» no reconocida" -#: backup/basebackup.c:846 -#, c-format -msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "algoritmo de suma de comprobación no reconocido: \"%s\"" - -#: backup/basebackup.c:881 +#: backup/basebackup.c:905 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "algoritmo de compresión no reconocido: «%s»" -#: backup/basebackup.c:897 -#, fuzzy, c-format -#| msgid "unrecognized column option \"%s\"" +#: backup/basebackup.c:921 +#, c-format msgid "unrecognized base backup option: \"%s\"" -msgstr "opción de columna «%s» no reconocida" +msgstr "opción de respaldo base no reconocida: «%s»" -#: backup/basebackup.c:908 +#: backup/basebackup.c:932 #, c-format msgid "manifest checksums require a backup manifest" msgstr "la suma de comprobación del manifiesto requiere un manifiesto de la copia de seguridad" -#: backup/basebackup.c:917 -#, fuzzy, c-format -#| msgid "--no-slot cannot be used with slot name" +#: backup/basebackup.c:941 +#, c-format msgid "target detail cannot be used without target" -msgstr "no se puede usar --no-slot junto con nombre de slot" +msgstr "no se puede usar “target detail” sin un destino" -#: backup/basebackup.c:926 backup/basebackup_target.c:218 -#, fuzzy, c-format -#| msgid "operator class \"%s\" does not accept data type %s" +#: backup/basebackup.c:950 backup/basebackup_target.c:218 +#, c-format msgid "target \"%s\" does not accept a target detail" -msgstr "la clase de operadores «%s» no acepta el tipo de datos %s" +msgstr "el destino «%s» no acepta “target details”" -#: backup/basebackup.c:937 -#, fuzzy, c-format -#| msgid "%s cannot be specified unless locale provider \"%s\" is chosen" +#: backup/basebackup.c:961 +#, c-format msgid "compression detail cannot be specified unless compression is enabled" -msgstr "%s no puede especificarse a menos que el proveedor de locale «%s» sea escogido" +msgstr "el detalle de compresión no puede especificarse a menos que la compresión esté activada" -#: backup/basebackup.c:950 +#: backup/basebackup.c:974 #, c-format msgid "invalid compression specification: %s" msgstr "especificación de compresión no válida: %s" -#: backup/basebackup.c:1116 backup/basebackup.c:1294 +#: backup/basebackup.c:1024 +#, c-format +msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" +msgstr "debe ejecutar UPLOAD_MANIFEST antes de lanzar un BASE_BACKUP incremental" + +#: backup/basebackup.c:1157 backup/basebackup.c:1358 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "no se pudo hacer stat al archivo o directorio «%s»: %m" -#: backup/basebackup.c:1430 +#: backup/basebackup.c:1544 #, c-format msgid "skipping special file \"%s\"" msgstr "omitiendo el archivo especial «%s»" -#: backup/basebackup.c:1542 -#, c-format -msgid "invalid segment number %d in file \"%s\"" -msgstr "número de segmento %d no válido en archivo «%s»" - -#: backup/basebackup.c:1574 +#: backup/basebackup.c:1751 #, c-format msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" msgstr "no se pudo verificar el checksum en el archivo «%s», bloque %u: el tamaño de búfer de lectura %d y el tamaño de página %d difieren" -#: backup/basebackup.c:1658 +#: backup/basebackup.c:1813 +#, c-format +msgid "file \"%s\" has a total of %d checksum verification failure" +msgid_plural "file \"%s\" has a total of %d checksum verification failures" +msgstr[0] "el archivo «%s» tiene un total de %d falla de verificación de checksum" +msgstr[1] "el archivo «%s» tiene un total de %d fallas de verificación de checksums" + +#: backup/basebackup.c:1917 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "verificación de checksums falló en archivo «%s», bloque %u: calculado %X pero se esperaba %X" -#: backup/basebackup.c:1665 +#: backup/basebackup.c:1924 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "subsiguientes fallas de verificación de checksums en el archivo «%s» no se reportarán" -#: backup/basebackup.c:1721 -#, c-format -msgid "file \"%s\" has a total of %d checksum verification failure" -msgid_plural "file \"%s\" has a total of %d checksum verification failures" -msgstr[0] "el archivo «%s» tiene un total de %d falla de verificación de checksum" -msgstr[1] "el archivo «%s» tiene un total de %d fallas de verificación de checksums" - -#: backup/basebackup.c:1767 +#: backup/basebackup.c:2048 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "nombre de archivo demasiado largo para el formato tar: «%s»" -#: backup/basebackup.c:1772 +#: backup/basebackup.c:2053 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "destino de enlace simbólico demasiado largo para el formato tar: nombre de archivo «%s», destino «%s»" +#: backup/basebackup.c:2127 +#, c-format +msgid "could not read file \"%s\": read %zd of %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %zd de %zu" + #: backup/basebackup_gzip.c:67 -#, fuzzy, c-format -#| msgid "Bonjour is not supported by this build" +#, c-format msgid "gzip compression is not supported by this build" -msgstr "Bonjour no está soportado en este servidor" +msgstr "la compresión gzip no está soportada en este servidor" #: backup/basebackup_gzip.c:143 #, c-format msgid "could not initialize compression library" msgstr "no se pudo inicializar la biblioteca de compresión" +#: backup/basebackup_incremental.c:294 +#, c-format +msgid "manifest contains no required WAL ranges" +msgstr "el manifiesto no contiene ningún rango WAL requerido" + +#: backup/basebackup_incremental.c:349 +#, c-format +msgid "timeline %u found in manifest, but not in this server's history" +msgstr "el timeline %u fue encontrado en el manifiesto, pero no en la historia de este servidor" + +#: 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 "el manifiesto requiere WAL en el timeline inicial %u desde %X/%X, pero ese timeline inicia en %X/%X" + +#: 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 "el manifiesto requiere WAL del timeline de continuación %u desde %X/%X, pero ese timeline empieza en %X/%X" + +#: 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 "el manifiesto requiere WAL del timeline final %u terminado en %X/%X, pero este backup empieza en %X/%X" + +#: backup/basebackup_incremental.c:439 +#, c-format +msgid "This can happen for incremental backups on a standby if there was little activity since the previous backup." +msgstr "Esto puede pasar para backups incrementales en un standby si hubo insuficiente actividad desde el backup anterior." + +#: backup/basebackup_incremental.c:446 +#, c-format +msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X" +msgstr "el manifiesto requiere WAL del timeline no-final %u terminando en %X/%X, pero este servidor cambió de timelines en %X/%X" + +#: 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 "se requieren sumarizaciones de WAL en el timeline %u desde %X/%X hasta %X/%X, pero no existen sumarizaciones para ese timeline y rango de LSN" + +#: 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 "se requieren sumarizaciones de WAL en el timeline %u desde %X/%X hasta %X/%X, pero las sumarizaciones en ese timeline y rango de LSN están incompletos" + +#: backup/basebackup_incremental.c:538 +#, c-format +msgid "The first unsummarized LSN in this range is %X/%X." +msgstr "El primer LSN sin sumarización en este rango es %X/%X." + +#: backup/basebackup_incremental.c:938 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "el manifiesto de backup versión 1 no soporta backups incrementales" + +#: backup/basebackup_incremental.c:956 +#, c-format +msgid "system identifier in backup manifest is %llu, but database system identifier is %llu" +msgstr "el identificador de sistema en el manifiesto de backup es %llu, pero el identificador en el sistema es %llu" + #: backup/basebackup_lz4.c:67 -#, fuzzy, c-format -#| msgid "Bonjour is not supported by this build" +#, c-format msgid "lz4 compression is not supported by this build" -msgstr "Bonjour no está soportado en este servidor" +msgstr "la compresión lz4 no está soportada en este servidor" -#: backup/basebackup_server.c:75 -#, fuzzy, c-format -#| msgid "permission denied to create role" +#: backup/basebackup_server.c:73 +#, c-format msgid "permission denied to create backup stored on server" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para crear un respaldo almacenado en el servidor" -#: backup/basebackup_server.c:76 +#: backup/basebackup_server.c:74 #, c-format msgid "Only roles with privileges of the \"%s\" role may create a backup stored on the server." -msgstr "" +msgstr "Sólo los roles con privilegio del rol «%s» pueden crear un respaldo almacenado en el servidor." -#: backup/basebackup_server.c:91 -#, fuzzy, c-format -#| msgid "relative path not allowed for COPY to file" +#: backup/basebackup_server.c:89 +#, c-format msgid "relative path not allowed for backup stored on server" -msgstr "no se permiten rutas relativas para COPY hacia un archivo" +msgstr "no se permiten rutas relativas para un respaldo almacenado en el servidor" -#: backup/basebackup_server.c:104 commands/dbcommands.c:501 -#: commands/tablespace.c:163 commands/tablespace.c:179 -#: commands/tablespace.c:599 commands/tablespace.c:644 replication/slot.c:1697 +#: backup/basebackup_server.c:102 commands/dbcommands.c:477 +#: commands/tablespace.c:157 commands/tablespace.c:173 +#: commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: backup/basebackup_server.c:117 +#: backup/basebackup_server.c:115 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "el directorio «%s» existe pero no está vacío" -#: backup/basebackup_server.c:125 utils/init/postinit.c:1154 +#: backup/basebackup_server.c:123 utils/init/postinit.c:1178 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: backup/basebackup_server.c:177 backup/basebackup_server.c:184 -#: backup/basebackup_server.c:270 backup/basebackup_server.c:277 -#: storage/smgr/md.c:501 storage/smgr/md.c:508 storage/smgr/md.c:590 -#: storage/smgr/md.c:612 storage/smgr/md.c:862 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 +#: backup/basebackup_server.c:268 backup/basebackup_server.c:275 +#: backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 +#: storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 #, c-format msgid "Check free disk space." msgstr "Verifique el espacio libre en disco." -#: backup/basebackup_server.c:181 backup/basebackup_server.c:274 -#, fuzzy, c-format -#| msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" +#: backup/basebackup_server.c:179 backup/basebackup_server.c:272 +#: backup/walsummary.c:309 +#, c-format msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" -msgstr "no se pudo extender el archivo «%s»: sólo se escribieron %d de %d bytes en el bloque %u" +msgstr "no se pudo escribir en el archivo «%s»: sólo se escribieron %d de %d bytes en la posición %u" #: backup/basebackup_target.c:146 -#, fuzzy, c-format -#| msgid "unrecognized reset target: \"%s\"" +#, c-format msgid "unrecognized target: \"%s\"" -msgstr "destino de reset no reconocido: «%s»" +msgstr "destino no reconocido: «%s»" #: backup/basebackup_target.c:237 -#, fuzzy, c-format -#| msgid "parameter \"%s\" requires a Boolean value" +#, c-format msgid "target \"%s\" requires a target detail" -msgstr "el parámetro «%s» requiere un valor lógico (booleano)" +msgstr "el destino «%s» requiere un “target detail”" #: backup/basebackup_zstd.c:66 -#, fuzzy, c-format -#| msgid "Bonjour is not supported by this build" +#, c-format msgid "zstd compression is not supported by this build" -msgstr "Bonjour no está soportado en este servidor" +msgstr "la compresión zstd no está soportada en este servidor" #: backup/basebackup_zstd.c:117 #, c-format @@ -3774,714 +4088,723 @@ msgstr "no se pudo definir la cantidad de procesos ayudantes de compresión a %d #: backup/basebackup_zstd.c:129 #, c-format -msgid "could not set compression flag for %s: %s" -msgstr "no se pudo definir una opción de compresión para %s: %s" +msgid "could not enable long-distance mode: %s" +msgstr "no se pudo habilitar el modo “long-distance”: %s" -#: bootstrap/bootstrap.c:243 postmaster/postmaster.c:721 tcop/postgres.c:3819 +#: backup/walsummaryfuncs.c:95 +#, c-format +msgid "invalid timeline %lld" +msgstr "timeline %lld no válido" + +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:248 postmaster/postmaster.c:726 tcop/postgres.c:3824 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" -#: bootstrap/bootstrap.c:289 -#, c-format -msgid "-X requires a power of two value between 1 MB and 1 GB" -msgstr "-X require un valor potencia de dos entre 1 MB y 1 GB" - -#: bootstrap/bootstrap.c:295 postmaster/postmaster.c:844 -#: postmaster/postmaster.c:857 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 +#: postmaster/postmaster.c:759 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: bootstrap/bootstrap.c:304 +#: bootstrap/bootstrap.c:291 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: argumentos de línea de órdenes no válidos\n" -#: catalog/aclchk.c:201 +#: catalog/aclchk.c:211 #, c-format msgid "grant options can only be granted to roles" msgstr "la opción de grant sólo puede ser otorgada a roles" -#: catalog/aclchk.c:323 +#: catalog/aclchk.c:333 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "no se otorgaron privilegios para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:328 +#: catalog/aclchk.c:338 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "no se otorgaron privilegios para «%s»" -#: catalog/aclchk.c:336 +#: catalog/aclchk.c:346 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "no todos los privilegios fueron otorgados para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:341 +#: catalog/aclchk.c:351 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "no todos los privilegios fueron otorgados para «%s»" -#: catalog/aclchk.c:352 +#: catalog/aclchk.c:362 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "ningún privilegio pudo ser revocado para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:357 +#: catalog/aclchk.c:367 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "ningún privilegio pudo ser revocado para «%s»" -#: catalog/aclchk.c:365 +#: catalog/aclchk.c:375 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "no todos los privilegios pudieron ser revocados para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:370 +#: catalog/aclchk.c:380 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "no todos los privilegios pudieron ser revocados para «%s»" -#: catalog/aclchk.c:402 +#: catalog/aclchk.c:412 #, c-format msgid "grantor must be current user" msgstr "el cedente (grantor) debe ser el usuario actual" -#: catalog/aclchk.c:470 catalog/aclchk.c:1045 +#: catalog/aclchk.c:480 catalog/aclchk.c:1055 #, c-format msgid "invalid privilege type %s for relation" msgstr "el tipo de privilegio %s no es válido para una relación" -#: catalog/aclchk.c:474 catalog/aclchk.c:1049 +#: catalog/aclchk.c:484 catalog/aclchk.c:1059 #, c-format msgid "invalid privilege type %s for sequence" msgstr "el tipo de privilegio %s no es válido para una secuencia" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:488 #, c-format msgid "invalid privilege type %s for database" msgstr "el tipo de privilegio %s no es válido para una base de datos" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:492 #, c-format msgid "invalid privilege type %s for domain" msgstr "el tipo de privilegio %s no es válido para un dominio" -#: catalog/aclchk.c:486 catalog/aclchk.c:1053 +#: catalog/aclchk.c:496 catalog/aclchk.c:1063 #, c-format msgid "invalid privilege type %s for function" msgstr "el tipo de privilegio %s no es válido para una función" -#: catalog/aclchk.c:490 +#: catalog/aclchk.c:500 #, c-format msgid "invalid privilege type %s for language" msgstr "el tipo de privilegio %s no es válido para un lenguaje" -#: catalog/aclchk.c:494 +#: catalog/aclchk.c:504 #, c-format msgid "invalid privilege type %s for large object" msgstr "el tipo de privilegio %s no es válido para un objeto grande" -#: catalog/aclchk.c:498 catalog/aclchk.c:1069 +#: catalog/aclchk.c:508 catalog/aclchk.c:1079 #, c-format msgid "invalid privilege type %s for schema" msgstr "el tipo de privilegio %s no es válido para un esquema" -#: catalog/aclchk.c:502 catalog/aclchk.c:1057 +#: catalog/aclchk.c:512 catalog/aclchk.c:1067 #, c-format msgid "invalid privilege type %s for procedure" msgstr "el tipo de privilegio %s no es válido para un procedimiento" -#: catalog/aclchk.c:506 catalog/aclchk.c:1061 +#: catalog/aclchk.c:516 catalog/aclchk.c:1071 #, c-format msgid "invalid privilege type %s for routine" msgstr "el tipo de privilegio %s no es válido para una rutina" -#: catalog/aclchk.c:510 +#: catalog/aclchk.c:520 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "el tipo de privilegio %s no es válido para un tablespace" -#: catalog/aclchk.c:514 catalog/aclchk.c:1065 +#: catalog/aclchk.c:524 catalog/aclchk.c:1075 #, c-format msgid "invalid privilege type %s for type" msgstr "el tipo de privilegio %s no es válido para un tipo" -#: catalog/aclchk.c:518 +#: catalog/aclchk.c:528 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "el tipo de privilegio %s no es válido para un conector de datos externos" -#: catalog/aclchk.c:522 +#: catalog/aclchk.c:532 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "el tipo de privilegio %s no es válido para un servidor foráneo" -#: catalog/aclchk.c:526 +#: catalog/aclchk.c:536 #, c-format msgid "invalid privilege type %s for parameter" msgstr "el tipo de privilegio %s no es válido para un parámetro" -#: catalog/aclchk.c:565 +#: catalog/aclchk.c:575 #, c-format msgid "column privileges are only valid for relations" msgstr "los privilegios de columna son sólo válidos para relaciones" -#: catalog/aclchk.c:728 catalog/aclchk.c:3570 catalog/objectaddress.c:1092 -#: catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:287 +#: 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 "no existe el objeto grande %u" -#: catalog/aclchk.c:1102 +#: catalog/aclchk.c:1112 #, c-format msgid "default privileges cannot be set for columns" msgstr "los privilegios por omisión no pueden definirse para columnas" -#: catalog/aclchk.c:1138 -#, fuzzy, c-format -#| msgid "permission denied to create role" +#: catalog/aclchk.c:1148 +#, c-format msgid "permission denied to change default privileges" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para cambiar los privilegios por omisión" -#: catalog/aclchk.c:1256 +#: catalog/aclchk.c:1266 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "No puede utilizar la cláusula IN SCHEMA cuando se utiliza GRANT / REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1595 catalog/catalog.c:631 catalog/objectaddress.c:1561 -#: catalog/pg_publication.c:533 commands/analyze.c:389 commands/copy.c:837 -#: commands/sequence.c:1663 commands/tablecmds.c:7339 commands/tablecmds.c:7495 -#: commands/tablecmds.c:7545 commands/tablecmds.c:7619 -#: commands/tablecmds.c:7689 commands/tablecmds.c:7801 -#: commands/tablecmds.c:7895 commands/tablecmds.c:7954 -#: commands/tablecmds.c:8043 commands/tablecmds.c:8073 -#: commands/tablecmds.c:8201 commands/tablecmds.c:8283 -#: commands/tablecmds.c:8417 commands/tablecmds.c:8525 -#: commands/tablecmds.c:12240 commands/tablecmds.c:12421 -#: commands/tablecmds.c:12582 commands/tablecmds.c:13744 -#: commands/tablecmds.c:16273 commands/trigger.c:949 parser/analyze.c:2480 -#: parser/parse_relation.c:737 parser/parse_target.c:1054 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3413 -#: parser/parse_utilcmd.c:3449 parser/parse_utilcmd.c:3491 utils/adt/acl.c:2884 -#: utils/adt/ruleutils.c:2799 +#: 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 "no existe la columna «%s» en la relación «%s»" -#: catalog/aclchk.c:1840 +#: catalog/aclchk.c:1862 #, c-format msgid "\"%s\" is an index" msgstr "«%s» es un índice" -#: catalog/aclchk.c:1847 commands/tablecmds.c:13901 commands/tablecmds.c:17200 +#: catalog/aclchk.c:1869 commands/tablecmds.c:14496 commands/tablecmds.c:17882 #, c-format msgid "\"%s\" is a composite type" msgstr "«%s» es un tipo compuesto" -#: catalog/aclchk.c:1855 catalog/objectaddress.c:1401 commands/sequence.c:1171 -#: commands/tablecmds.c:254 commands/tablecmds.c:17164 utils/adt/acl.c:2092 -#: utils/adt/acl.c:2122 utils/adt/acl.c:2154 utils/adt/acl.c:2186 -#: utils/adt/acl.c:2214 utils/adt/acl.c:2244 +#: 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» no es una secuencia" -#: catalog/aclchk.c:1893 +#: catalog/aclchk.c:1915 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "la secuencia «%s» sólo soporta los privilegios USAGE, SELECT, y UPDATE" -#: catalog/aclchk.c:1910 +#: catalog/aclchk.c:1932 #, c-format msgid "invalid privilege type %s for table" msgstr "el tipo de privilegio %s no es válido para una tabla" -#: catalog/aclchk.c:2072 +#: catalog/aclchk.c:2097 #, c-format msgid "invalid privilege type %s for column" msgstr "el tipo de privilegio %s no es válido para una columna" -#: catalog/aclchk.c:2085 +#: catalog/aclchk.c:2110 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "la secuencia «%s» sólo soporta el privilegio SELECT" -#: catalog/aclchk.c:2275 +#: catalog/aclchk.c:2301 #, c-format msgid "language \"%s\" is not trusted" msgstr "el lenguaje «%s» no es confiable (trusted)" -#: catalog/aclchk.c:2277 +#: 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 y REVOKE no están permitidos en lenguajes no confiables, porque sólo los superusuarios pueden usar lenguajes no confiables." -#: catalog/aclchk.c:2427 +#: catalog/aclchk.c:2454 #, c-format msgid "cannot set privileges of array types" msgstr "no se puede definir privilegios para tipos de array" -#: catalog/aclchk.c:2428 +#: catalog/aclchk.c:2455 #, c-format msgid "Set the privileges of the element type instead." msgstr "Defina los privilegios del tipo elemento en su lugar." -#: catalog/aclchk.c:2435 catalog/objectaddress.c:1667 +#: catalog/aclchk.c:2459 +#, c-format +msgid "cannot set privileges of multirange types" +msgstr "no se puede definir privilegios para tipos multirango" + +#: catalog/aclchk.c:2460 +#, c-format +msgid "Set the privileges of the range type instead." +msgstr "Defina los privilegios del tipo de rango en su lugar." + +#: catalog/aclchk.c:2467 catalog/objectaddress.c:1629 #, c-format msgid "\"%s\" is not a domain" msgstr "«%s» no es un dominio" -#: catalog/aclchk.c:2621 +#: catalog/aclchk.c:2653 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "tipo de privilegio «%s» no reconocido" -#: catalog/aclchk.c:2688 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for aggregate %s" msgstr "permiso denegado a la función de agregación %s" -#: catalog/aclchk.c:2691 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for collation %s" msgstr "permiso denegado al ordenamiento (collation) %s" -#: catalog/aclchk.c:2694 +#: catalog/aclchk.c:2726 #, c-format msgid "permission denied for column %s" msgstr "permiso denegado a la columna %s" -#: catalog/aclchk.c:2697 +#: catalog/aclchk.c:2729 #, c-format msgid "permission denied for conversion %s" msgstr "permiso denegado a la conversión %s" -#: catalog/aclchk.c:2700 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for database %s" msgstr "permiso denegado a la base de datos %s" -#: catalog/aclchk.c:2703 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for domain %s" msgstr "permiso denegado al dominio %s" -#: catalog/aclchk.c:2706 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for event trigger %s" -msgstr "permiso denegado al disparador por eventos %s" +msgstr "permiso denegado al “trigger” por eventos %s" -#: catalog/aclchk.c:2709 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for extension %s" msgstr "permiso denegado a la extensión %s" -#: catalog/aclchk.c:2712 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "permiso denegado al conector de datos externos %s" -#: catalog/aclchk.c:2715 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for foreign server %s" msgstr "permiso denegado al servidor foráneo %s" -#: catalog/aclchk.c:2718 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for foreign table %s" msgstr "permiso denegado a la tabla foránea %s" -#: catalog/aclchk.c:2721 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for function %s" msgstr "permiso denegado a la función %s" -#: catalog/aclchk.c:2724 +#: catalog/aclchk.c:2756 #, c-format msgid "permission denied for index %s" msgstr "permiso denegado al índice %s" -#: catalog/aclchk.c:2727 +#: catalog/aclchk.c:2759 #, c-format msgid "permission denied for language %s" msgstr "permiso denegado al lenguaje %s" -#: catalog/aclchk.c:2730 +#: catalog/aclchk.c:2762 #, c-format msgid "permission denied for large object %s" msgstr "permiso denegado al objeto grande %s" -#: catalog/aclchk.c:2733 +#: catalog/aclchk.c:2765 #, c-format msgid "permission denied for materialized view %s" msgstr "permiso denegado a la vista materializada %s" -#: catalog/aclchk.c:2736 +#: catalog/aclchk.c:2768 #, c-format msgid "permission denied for operator class %s" msgstr "permiso denegado a la clase de operadores %s" -#: catalog/aclchk.c:2739 +#: catalog/aclchk.c:2771 #, c-format msgid "permission denied for operator %s" msgstr "permiso denegado al operador %s" -#: catalog/aclchk.c:2742 +#: catalog/aclchk.c:2774 #, c-format msgid "permission denied for operator family %s" msgstr "permiso denegado a la familia de operadores %s" -#: catalog/aclchk.c:2745 +#: catalog/aclchk.c:2777 #, c-format msgid "permission denied for parameter %s" msgstr "permiso denegado al parámetro %s" -#: catalog/aclchk.c:2748 +#: catalog/aclchk.c:2780 #, c-format msgid "permission denied for policy %s" msgstr "permiso denegado a la política %s" -#: catalog/aclchk.c:2751 +#: catalog/aclchk.c:2783 #, c-format msgid "permission denied for procedure %s" msgstr "permiso denegado al procedimiento %s" -#: catalog/aclchk.c:2754 +#: catalog/aclchk.c:2786 #, c-format msgid "permission denied for publication %s" msgstr "permiso denegado a la publicación %s" -#: catalog/aclchk.c:2757 +#: catalog/aclchk.c:2789 #, c-format msgid "permission denied for routine %s" msgstr "permiso denegado a la rutina %s" -#: catalog/aclchk.c:2760 +#: catalog/aclchk.c:2792 #, c-format msgid "permission denied for schema %s" msgstr "permiso denegado al esquema %s" -#: catalog/aclchk.c:2763 commands/sequence.c:659 commands/sequence.c:885 -#: commands/sequence.c:927 commands/sequence.c:968 commands/sequence.c:1761 -#: commands/sequence.c:1810 +#: 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 "permiso denegado a la secuencia %s" -#: catalog/aclchk.c:2766 +#: catalog/aclchk.c:2798 #, c-format msgid "permission denied for statistics object %s" msgstr "permiso denegado al objeto de estadísticas %s" -#: catalog/aclchk.c:2769 +#: catalog/aclchk.c:2801 #, c-format msgid "permission denied for subscription %s" msgstr "permiso denegado a la suscripción %s" -#: catalog/aclchk.c:2772 +#: catalog/aclchk.c:2804 #, c-format msgid "permission denied for table %s" msgstr "permiso denegado a la tabla %s" -#: catalog/aclchk.c:2775 +#: catalog/aclchk.c:2807 #, c-format msgid "permission denied for tablespace %s" msgstr "permiso denegado al tablespace %s" -#: catalog/aclchk.c:2778 +#: catalog/aclchk.c:2810 #, c-format msgid "permission denied for text search configuration %s" msgstr "permiso denegado a la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:2781 +#: catalog/aclchk.c:2813 #, c-format msgid "permission denied for text search dictionary %s" msgstr "permiso denegado a la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:2784 +#: catalog/aclchk.c:2816 #, c-format msgid "permission denied for type %s" msgstr "permiso denegado al tipo %s" -#: catalog/aclchk.c:2787 +#: catalog/aclchk.c:2819 #, c-format msgid "permission denied for view %s" msgstr "permiso denegado a la vista %s" -#: catalog/aclchk.c:2823 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of aggregate %s" msgstr "debe ser dueño de la función de agregación %s" -#: catalog/aclchk.c:2826 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of collation %s" msgstr "debe ser dueño del ordenamiento (collation) %s" -#: catalog/aclchk.c:2829 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of conversion %s" msgstr "debe ser dueño de la conversión %s" -#: catalog/aclchk.c:2832 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of database %s" msgstr "debe ser dueño de la base de datos %s" -#: catalog/aclchk.c:2835 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of domain %s" msgstr "debe ser dueño del dominio %s" -#: catalog/aclchk.c:2838 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of event trigger %s" -msgstr "debe ser dueño del disparador por eventos %s" +msgstr "debe ser dueño del “trigger” por eventos %s" -#: catalog/aclchk.c:2841 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of extension %s" msgstr "debe ser dueño de la extensión %s" -#: catalog/aclchk.c:2844 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "debe ser dueño del conector de datos externos %s" -#: catalog/aclchk.c:2847 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of foreign server %s" msgstr "debe ser dueño del servidor foráneo %s" -#: catalog/aclchk.c:2850 +#: catalog/aclchk.c:2882 #, c-format msgid "must be owner of foreign table %s" msgstr "debe ser dueño de la tabla foránea %s" -#: catalog/aclchk.c:2853 +#: catalog/aclchk.c:2885 #, c-format msgid "must be owner of function %s" msgstr "debe ser dueño de la función %s" -#: catalog/aclchk.c:2856 +#: catalog/aclchk.c:2888 #, c-format msgid "must be owner of index %s" msgstr "debe ser dueño del índice %s" -#: catalog/aclchk.c:2859 +#: catalog/aclchk.c:2891 #, c-format msgid "must be owner of language %s" msgstr "debe ser dueño del lenguaje %s" -#: catalog/aclchk.c:2862 +#: catalog/aclchk.c:2894 #, c-format msgid "must be owner of large object %s" msgstr "debe ser dueño del objeto grande %s" -#: catalog/aclchk.c:2865 +#: catalog/aclchk.c:2897 #, c-format msgid "must be owner of materialized view %s" msgstr "debe ser dueño de la vista materializada %s" -#: catalog/aclchk.c:2868 +#: catalog/aclchk.c:2900 #, c-format msgid "must be owner of operator class %s" msgstr "debe ser dueño de la clase de operadores %s" -#: catalog/aclchk.c:2871 +#: catalog/aclchk.c:2903 #, c-format msgid "must be owner of operator %s" msgstr "debe ser dueño del operador %s" -#: catalog/aclchk.c:2874 +#: catalog/aclchk.c:2906 #, c-format msgid "must be owner of operator family %s" msgstr "debe ser dueño de la familia de operadores %s" -#: catalog/aclchk.c:2877 +#: catalog/aclchk.c:2909 #, c-format msgid "must be owner of procedure %s" msgstr "debe ser dueño del procedimiento %s" -#: catalog/aclchk.c:2880 +#: catalog/aclchk.c:2912 #, c-format msgid "must be owner of publication %s" msgstr "debe ser dueño de la publicación %s" -#: catalog/aclchk.c:2883 +#: catalog/aclchk.c:2915 #, c-format msgid "must be owner of routine %s" msgstr "debe ser dueño de la rutina %s" -#: catalog/aclchk.c:2886 +#: catalog/aclchk.c:2918 #, c-format msgid "must be owner of sequence %s" msgstr "debe ser dueño de la secuencia %s" -#: catalog/aclchk.c:2889 +#: catalog/aclchk.c:2921 #, c-format msgid "must be owner of subscription %s" msgstr "debe ser dueño de la suscripción %s" -#: catalog/aclchk.c:2892 +#: catalog/aclchk.c:2924 #, c-format msgid "must be owner of table %s" msgstr "debe ser dueño de la tabla %s" -#: catalog/aclchk.c:2895 +#: catalog/aclchk.c:2927 #, c-format msgid "must be owner of type %s" msgstr "debe ser dueño del tipo %s" -#: catalog/aclchk.c:2898 +#: catalog/aclchk.c:2930 #, c-format msgid "must be owner of view %s" msgstr "debe ser dueño de la vista %s" -#: catalog/aclchk.c:2901 +#: catalog/aclchk.c:2933 #, c-format msgid "must be owner of schema %s" msgstr "debe ser dueño del esquema %s" -#: catalog/aclchk.c:2904 +#: catalog/aclchk.c:2936 #, c-format msgid "must be owner of statistics object %s" msgstr "debe ser dueño del objeto de estadísticas %s" -#: catalog/aclchk.c:2907 +#: catalog/aclchk.c:2939 #, c-format msgid "must be owner of tablespace %s" msgstr "debe ser dueño del tablespace %s" -#: catalog/aclchk.c:2910 +#: catalog/aclchk.c:2942 #, c-format msgid "must be owner of text search configuration %s" msgstr "debe ser dueño de la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:2913 +#: catalog/aclchk.c:2945 #, c-format msgid "must be owner of text search dictionary %s" msgstr "debe ser dueño del diccionario de búsqueda en texto %s" -#: catalog/aclchk.c:2927 +#: catalog/aclchk.c:2959 #, c-format msgid "must be owner of relation %s" msgstr "debe ser dueño de la relación %s" -#: catalog/aclchk.c:2973 +#: catalog/aclchk.c:3005 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "permiso denegado a la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:3108 catalog/aclchk.c:3994 catalog/aclchk.c:4026 -#, fuzzy, c-format -#| msgid "schema with OID %u does not exist" +#: catalog/aclchk.c:3162 catalog/aclchk.c:4170 catalog/aclchk.c:4201 +#, c-format msgid "%s with OID %u does not exist" -msgstr "no existe el esquema con OID %u" +msgstr "%s con el OID %u no existe" -#: catalog/aclchk.c:3192 catalog/aclchk.c:3211 +#: catalog/aclchk.c:3245 catalog/aclchk.c:3264 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "no existe el atributo %d de la relación con OID %u" -#: catalog/aclchk.c:3306 +#: catalog/aclchk.c:3302 catalog/aclchk.c:3365 catalog/aclchk.c:4004 #, c-format msgid "relation with OID %u does not exist" msgstr "no existe la relación con OID %u" -#: catalog/aclchk.c:3491 +#: catalog/aclchk.c:3550 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "no existe el ACL de parámetro con OID %u" -#: catalog/aclchk.c:3655 commands/collationcmds.c:808 -#: commands/publicationcmds.c:1746 +#: catalog/aclchk.c:3723 commands/collationcmds.c:853 +#: commands/publicationcmds.c:1739 #, c-format msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: catalog/aclchk.c:3720 utils/cache/typcache.c:385 utils/cache/typcache.c:440 +#: 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 "no existe el tipo con OID %u" -#: catalog/catalog.c:449 +#: catalog/catalog.c:477 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "aún se está buscando algún OID sin utilizar en la relación «%s»" -#: catalog/catalog.c:451 +#: 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] "se han revisado los OID candidatos %llu vez, pero aún no se ha encontrado algún OID sin utilizar." msgstr[1] "se han revisado los OID candidatos %llu veces, pero aún no se ha encontrado algún OID sin utilizar." -#: catalog/catalog.c:476 +#: 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] "se ha asignado un nuevo OID en la relación «%s» luego de %llu reintento" msgstr[1] "se ha asignado un nuevo OID en la relación «%s» luego de %llu reintentos" -#: catalog/catalog.c:609 catalog/catalog.c:676 +#: catalog/catalog.c:637 catalog/catalog.c:704 #, c-format msgid "must be superuser to call %s()" msgstr "debe ser superusuario para invocar %s()" -#: catalog/catalog.c:618 +#: catalog/catalog.c:646 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() sólo puede usarse en catálogos de sistema" -#: catalog/catalog.c:623 parser/parse_utilcmd.c:2264 +#: catalog/catalog.c:651 parser/parse_utilcmd.c:2270 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "el índice «%s» no pertenece a la tabla «%s»" -#: catalog/catalog.c:640 +#: catalog/catalog.c:668 #, c-format msgid "column \"%s\" is not of type oid" msgstr "la columna «%s» no es de tipo oid" -#: catalog/catalog.c:647 +#: catalog/catalog.c:675 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "«el índice %s» no es el índice para la columna «%s»" -#: catalog/dependency.c:546 catalog/pg_shdepend.c:658 +#: catalog/dependency.c:497 catalog/pg_shdepend.c:703 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "no se puede eliminar %s porque es requerido por el sistema" -#: catalog/dependency.c:838 catalog/dependency.c:1065 +#: catalog/dependency.c:789 catalog/dependency.c:1016 #, c-format msgid "cannot drop %s because %s requires it" msgstr "no se puede eliminar %s porque %s lo requiere" -#: catalog/dependency.c:840 catalog/dependency.c:1067 +#: catalog/dependency.c:791 catalog/dependency.c:1018 #, c-format msgid "You can drop %s instead." msgstr "Puede eliminar %s en su lugar." -#: catalog/dependency.c:1146 catalog/dependency.c:1155 +#: catalog/dependency.c:1097 catalog/dependency.c:1106 #, c-format msgid "%s depends on %s" msgstr "%s depende de %s" -#: catalog/dependency.c:1170 catalog/dependency.c:1179 +#: catalog/dependency.c:1121 catalog/dependency.c:1130 #, c-format msgid "drop cascades to %s" msgstr "eliminando además %s" -#: catalog/dependency.c:1187 catalog/pg_shdepend.c:823 +#: catalog/dependency.c:1138 catalog/pg_shdepend.c:868 #, c-format msgid "" "\n" @@ -4496,720 +4819,715 @@ msgstr[1] "" "\n" "y otros %d objetos (vea el registro del servidor para obtener la lista)" -#: catalog/dependency.c:1199 +#: catalog/dependency.c:1150 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "no se puede eliminar %s porque otros objetos dependen de él" -#: catalog/dependency.c:1202 catalog/dependency.c:1209 -#: catalog/dependency.c:1220 commands/tablecmds.c:1335 -#: commands/tablecmds.c:14386 commands/tablespace.c:466 commands/user.c:1309 -#: commands/vacuum.c:212 commands/view.c:446 libpq/auth.c:326 -#: replication/logical/applyparallelworker.c:1044 replication/syncrep.c:1017 -#: storage/lmgr/deadlock.c:1135 storage/lmgr/proc.c:1358 utils/misc/guc.c:3120 -#: utils/misc/guc.c:3156 utils/misc/guc.c:3226 utils/misc/guc.c:6615 -#: utils/misc/guc.c:6649 utils/misc/guc.c:6683 utils/misc/guc.c:6726 -#: utils/misc/guc.c:6768 +#: 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" -#: catalog/dependency.c:1203 catalog/dependency.c:1210 +#: catalog/dependency.c:1154 catalog/dependency.c:1161 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Use DROP ... CASCADE para eliminar además los objetos dependientes." -#: catalog/dependency.c:1207 +#: catalog/dependency.c:1158 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "no se puede eliminar el o los objetos deseados porque otros objetos dependen de ellos" -#: catalog/dependency.c:1215 +#: catalog/dependency.c:1166 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "eliminando además %d objeto más" msgstr[1] "eliminando además %d objetos más" -#: catalog/dependency.c:1899 +#: catalog/dependency.c:1850 #, c-format msgid "constant of the type %s cannot be used here" msgstr "no se puede usar una constante de tipo %s aquí" -#: catalog/dependency.c:2420 parser/parse_relation.c:3403 -#: parser/parse_relation.c:3413 +#: 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 "no existe la columna %d en la relación «%s»" -#: catalog/heap.c:324 +#: catalog/heap.c:325 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "se ha denegado el permiso para crear «%s.%s»" -#: catalog/heap.c:326 +#: catalog/heap.c:327 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Las modificaciones al catálogo del sistema están actualmente deshabilitadas." -#: catalog/heap.c:466 commands/tablecmds.c:2374 commands/tablecmds.c:3047 -#: commands/tablecmds.c:6922 +#: 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 "las tablas pueden tener a lo más %d columnas" -#: catalog/heap.c:484 commands/tablecmds.c:7229 +#: catalog/heap.c:485 commands/tablecmds.c:7432 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "el nombre de columna «%s» colisiona con nombre de una columna de sistema" -#: catalog/heap.c:500 +#: catalog/heap.c:501 #, c-format msgid "column name \"%s\" specified more than once" msgstr "el nombre de columna «%s» fue especificado más de una vez" #. translator: first %s is an integer not a name -#: catalog/heap.c:575 +#: catalog/heap.c:579 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "la columna %s de la llave de partición tiene pseudotipo %s" -#: catalog/heap.c:580 +#: catalog/heap.c:584 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la columna «%s» tiene pseudotipo %s" -#: catalog/heap.c:611 +#: catalog/heap.c:615 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "un tipo compuesto %s no puede ser hecho miembro de sí mismo" #. translator: first %s is an integer not a name -#: catalog/heap.c:666 +#: catalog/heap.c:670 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna %s de llave de partición con tipo ordenable %s" -#: catalog/heap.c:672 commands/createas.c:203 commands/createas.c:512 +#: 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 "no se derivó ningún ordenamiento (collate) para la columna «%s» con tipo ordenable %s" -#: catalog/heap.c:1148 catalog/index.c:886 commands/createas.c:408 -#: commands/tablecmds.c:3987 +#: catalog/heap.c:1161 catalog/index.c:899 commands/createas.c:401 +#: commands/tablecmds.c:4171 #, c-format msgid "relation \"%s\" already exists" msgstr "la relación «%s» ya existe" -#: catalog/heap.c:1164 catalog/pg_type.c:434 catalog/pg_type.c:782 -#: catalog/pg_type.c:954 commands/typecmds.c:249 commands/typecmds.c:261 -#: commands/typecmds.c:754 commands/typecmds.c:1169 commands/typecmds.c:1395 -#: commands/typecmds.c:1575 commands/typecmds.c:2546 +#: catalog/heap.c:1177 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 #, c-format msgid "type \"%s\" already exists" msgstr "ya existe un tipo «%s»" -#: catalog/heap.c:1165 +#: catalog/heap.c:1178 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Una relación tiene un tipo asociado del mismo nombre, de modo que debe usar un nombre que no entre en conflicto con un tipo existente." -#: catalog/heap.c:1205 -#, fuzzy, c-format -#| msgid "pg_enum OID value not set when in binary upgrade mode" +#: catalog/heap.c:1218 +#, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" -msgstr "el valor de OID de pg_enum no se definió en modo de actualización binaria" +msgstr "el valor de relfilenumber de toast no se definió en modo de actualización binaria" -#: catalog/heap.c:1216 +#: catalog/heap.c:1229 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "el valor de OID de heap de pg_class no se definió en modo de actualización binaria" -#: catalog/heap.c:1226 -#, fuzzy, c-format -#| msgid "pg_enum OID value not set when in binary upgrade mode" +#: catalog/heap.c:1239 +#, c-format msgid "relfilenumber value not set when in binary upgrade mode" -msgstr "el valor de OID de pg_enum no se definió en modo de actualización binaria" +msgstr "el valor de relfilenumber no se definió en modo de actualización binaria" -#: catalog/heap.c:2119 +#: catalog/heap.c:2130 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "no se puede agregar una restricción NO INHERIT a la tabla particionada «%s»" -#: catalog/heap.c:2393 +#: catalog/heap.c:2402 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la restricción «check» «%s» ya existe" -#: catalog/heap.c:2563 catalog/index.c:900 catalog/pg_constraint.c:682 -#: commands/tablecmds.c:8900 +#: 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 "la restricción «%s» para la relación «%s» ya existe" -#: catalog/heap.c:2570 +#: catalog/heap.c:2581 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada de la relación «%s»" -#: catalog/heap.c:2581 +#: catalog/heap.c:2592 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción heredada de la relación «%s»" -#: catalog/heap.c:2591 +#: catalog/heap.c:2602 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID de la relación «%s»" -#: catalog/heap.c:2596 +#: catalog/heap.c:2607 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "mezclando la restricción «%s» con la definición heredada" -#: catalog/heap.c:2622 catalog/pg_constraint.c:811 commands/tablecmds.c:2672 -#: commands/tablecmds.c:3199 commands/tablecmds.c:6858 -#: commands/tablecmds.c:15208 commands/tablecmds.c:15349 -#, fuzzy, c-format -#| msgid "too many command-line arguments" +#: 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 "demasiados argumentos de línea de órdenes" +msgstr "demasiados padres de herencia" -#: catalog/heap.c:2706 +#: catalog/heap.c:2717 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "no se puede usar la columna generada «%s» en una expresión de generación de columna" -#: catalog/heap.c:2708 +#: catalog/heap.c:2719 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Una columna generada no puede hacer referencia a otra columna generada." -#: catalog/heap.c:2714 +#: catalog/heap.c:2725 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "no se puede usar una variable de fila completa (whole-row) en una expresión de generación de columna" -#: catalog/heap.c:2715 +#: catalog/heap.c:2726 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Esto causaría que la columna generada dependa de su propio valor." -#: catalog/heap.c:2768 +#: catalog/heap.c:2781 #, c-format msgid "generation expression is not immutable" msgstr "la expresión de generación no es inmutable" -#: catalog/heap.c:2796 rewrite/rewriteHandler.c:1295 +#: 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 "la columna «%s» es de tipo %s pero la expresión default es de tipo %s" -#: catalog/heap.c:2801 commands/prepare.c:334 parser/analyze.c:2704 -#: parser/parse_target.c:593 parser/parse_target.c:874 -#: parser/parse_target.c:884 rewrite/rewriteHandler.c:1300 +#: 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 "Necesitará reescribir la expresión o aplicarle una conversión de tipo." -#: catalog/heap.c:2848 +#: catalog/heap.c:2861 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "sólo la tabla «%s» puede ser referenciada en una restricción «check»" -#: catalog/heap.c:3154 +#: catalog/heap.c:3167 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "combinación de ON COMMIT y llaves foráneas no soportada" -#: catalog/heap.c:3155 +#: catalog/heap.c:3168 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "La tabla «%s» se refiere a «%s», pero no tienen la misma expresión para ON COMMIT." -#: catalog/heap.c:3160 +#: catalog/heap.c:3173 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "no se puede truncar una tabla referida en una llave foránea" -#: catalog/heap.c:3161 +#: catalog/heap.c:3174 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La tabla «%s» hace referencia a «%s»." -#: catalog/heap.c:3163 +#: catalog/heap.c:3176 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunque la tabla «%s» al mismo tiempo, o utilice TRUNCATE ... CASCADE." -#: catalog/index.c:224 parser/parse_utilcmd.c:2170 +#: catalog/index.c:219 parser/parse_utilcmd.c:2176 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "no se permiten múltiples llaves primarias para la tabla «%s»" -#: catalog/index.c:238 -#, fuzzy, c-format -#| msgid "primary keys cannot be expressions" +#: catalog/index.c:233 +#, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" -msgstr "las llaves primarias no pueden ser expresiones" +msgstr "las llaves primarias no pueden usar índices NULLS NOT DISTINCT" -#: catalog/index.c:255 +#: catalog/index.c:250 #, c-format msgid "primary keys cannot be expressions" msgstr "las llaves primarias no pueden ser expresiones" -#: catalog/index.c:272 +#: catalog/index.c:267 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "columna de llave primaria «%s» no está marcada NOT NULL" -#: catalog/index.c:785 catalog/index.c:1941 +#: catalog/index.c:798 catalog/index.c:1915 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "los usuarios no pueden crear índices en tablas del sistema" -#: catalog/index.c:825 +#: catalog/index.c:838 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "los ordenamientos no determinísticos no están soportados para la clase de operadores «%s»" -#: catalog/index.c:840 +#: catalog/index.c:853 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "no se pueden crear índices de forma concurrente en tablas del sistema" -#: catalog/index.c:849 catalog/index.c:1317 +#: catalog/index.c:862 catalog/index.c:1331 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "no se pueden crear índices para restricciones de exclusión de forma concurrente" -#: catalog/index.c:858 +#: catalog/index.c:871 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "no se pueden crear índices compartidos después de initdb" -#: catalog/index.c:878 commands/createas.c:423 commands/sequence.c:158 +#: 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 "la relación «%s» ya existe, omitiendo" -#: catalog/index.c:928 +#: catalog/index.c:941 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "el valor de OID de índice de pg_class no se definió en modo de actualización binaria" -#: catalog/index.c:938 utils/cache/relcache.c:3730 -#, fuzzy, c-format -#| msgid "pg_enum OID value not set when in binary upgrade mode" +#: catalog/index.c:951 utils/cache/relcache.c:3791 +#, c-format msgid "index relfilenumber value not set when in binary upgrade mode" -msgstr "el valor de OID de pg_enum no se definió en modo de actualización binaria" +msgstr "el valor relfilenumber de índice no se definió en modo de actualización binaria" -#: catalog/index.c:2240 +#: catalog/index.c:2214 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY debe ser la primera acción en una transacción" -#: catalog/index.c:3647 +#: catalog/index.c:3668 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "no se puede hacer reindex de tablas temporales de otras sesiones" -#: catalog/index.c:3658 commands/indexcmds.c:3623 +#: catalog/index.c:3679 commands/indexcmds.c:3626 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "no es posible reindexar un índice no válido en tabla TOAST" -#: catalog/index.c:3674 commands/indexcmds.c:3503 commands/indexcmds.c:3647 -#: commands/tablecmds.c:3402 +#: 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 "no se puede mover la relación de sistema «%s»" -#: catalog/index.c:3818 +#: catalog/index.c:3832 #, c-format msgid "index \"%s\" was reindexed" msgstr "el índice «%s» fue reindexado" -#: catalog/index.c:3955 +#: catalog/index.c:3998 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "no se puede reindexar el índice no válido «%s.%s» en tabla TOAST, omitiendo" -#: catalog/namespace.c:260 catalog/namespace.c:464 catalog/namespace.c:556 -#: commands/trigger.c:5687 +#: 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 "no están implementadas las referencias entre bases de datos: «%s.%s.%s»" -#: catalog/namespace.c:317 +#: catalog/namespace.c:519 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "las tablas temporales no pueden especificar un nombre de esquema" -#: catalog/namespace.c:398 +#: catalog/namespace.c:600 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" -msgstr "no se pudo bloquear un candado en la relación «%s.%s»" +msgstr "no se pudo bloquear un “lock” en la relación «%s.%s»" -#: catalog/namespace.c:403 commands/lockcmds.c:145 commands/lockcmds.c:225 +#: catalog/namespace.c:605 commands/lockcmds.c:143 commands/lockcmds.c:223 #, c-format msgid "could not obtain lock on relation \"%s\"" -msgstr "no se pudo bloquear un candado en la relación «%s»" +msgstr "no se pudo bloquear un “lock” en la relación «%s»" -#: catalog/namespace.c:431 parser/parse_relation.c:1429 +#: catalog/namespace.c:633 parser/parse_relation.c:1430 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "no existe la relación «%s.%s»" -#: catalog/namespace.c:436 parser/parse_relation.c:1442 -#: parser/parse_relation.c:1450 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 "no existe la relación «%s»" -#: catalog/namespace.c:502 catalog/namespace.c:3073 commands/extension.c:1584 -#: commands/extension.c:1590 +#: 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 "no se ha seleccionado ningún esquema dentro del cual crear" -#: catalog/namespace.c:654 catalog/namespace.c:667 +#: catalog/namespace.c:856 catalog/namespace.c:869 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "no se pueden crear relaciones en esquemas temporales de otras sesiones" -#: catalog/namespace.c:658 +#: catalog/namespace.c:860 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "no se pueden crear tablas temporales en esquemas no temporales" -#: catalog/namespace.c:673 +#: catalog/namespace.c:875 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "sólo relaciones temporales pueden ser creadas en los esquemas temporales" -#: catalog/namespace.c:2265 +#: catalog/namespace.c:2619 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "no existe el objeto de estadísticas «%s»" -#: catalog/namespace.c:2388 +#: catalog/namespace.c:2761 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "no existe el analizador de búsqueda en texto «%s»" -#: catalog/namespace.c:2514 utils/adt/regproc.c:1439 +#: catalog/namespace.c:2906 utils/adt/regproc.c:1459 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "no existe el diccionario de búsqueda en texto «%s»" -#: catalog/namespace.c:2641 +#: catalog/namespace.c:3052 #, c-format msgid "text search template \"%s\" does not exist" msgstr "no existe la plantilla de búsqueda en texto «%s»" -#: catalog/namespace.c:2767 commands/tsearchcmds.c:1162 -#: utils/adt/regproc.c:1329 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 "no existe la configuración de búsqueda en texto «%s»" -#: catalog/namespace.c:2880 parser/parse_expr.c:832 parser/parse_target.c:1246 +#: 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 "no están implementadas las referencias entre bases de datos: %s" -#: catalog/namespace.c:2886 parser/parse_expr.c:839 parser/parse_target.c:1253 -#: gram.y:18570 gram.y:18610 +#: catalog/namespace.c:3335 parser/parse_expr.c:875 parser/parse_target.c:1266 +#: gram.y:19181 gram.y:19221 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: catalog/namespace.c:3016 +#: catalog/namespace.c:3465 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "no se puede mover objetos hacia o desde esquemas temporales" -#: catalog/namespace.c:3022 +#: catalog/namespace.c:3471 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "no se puede mover objetos hacia o desde el esquema TOAST" -#: catalog/namespace.c:3095 commands/schemacmds.c:264 commands/schemacmds.c:344 -#: commands/tablecmds.c:1280 utils/adt/regproc.c:1668 +#: 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 "no existe el esquema «%s»" -#: catalog/namespace.c:3126 +#: catalog/namespace.c:3575 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "el nombre de relación no es válido (demasiados puntos): %s" -#: catalog/namespace.c:3693 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 "no existe el ordenamiento (collation) «%s» para la codificación «%s»" -#: catalog/namespace.c:3748 +#: catalog/namespace.c:4071 #, c-format msgid "conversion \"%s\" does not exist" msgstr "no existe la conversión «%s»" -#: catalog/namespace.c:4012 +#: catalog/namespace.c:4412 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "se ha denegado el permiso para crear tablas temporales en la base de datos «%s»" -#: catalog/namespace.c:4028 +#: catalog/namespace.c:4428 #, c-format msgid "cannot create temporary tables during recovery" msgstr "no se pueden crear tablas temporales durante la recuperación" -#: catalog/namespace.c:4034 +#: catalog/namespace.c:4434 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "no se pueden crear tablas temporales durante una operación paralela" -#: catalog/objectaddress.c:1409 commands/policy.c:96 commands/policy.c:376 -#: commands/tablecmds.c:248 commands/tablecmds.c:290 commands/tablecmds.c:2206 -#: commands/tablecmds.c:12357 +#: 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» no es una tabla" -#: catalog/objectaddress.c:1416 commands/tablecmds.c:260 -#: commands/tablecmds.c:17169 commands/view.c:119 +#: 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» no es una vista" -#: catalog/objectaddress.c:1423 commands/matview.c:187 commands/tablecmds.c:266 -#: commands/tablecmds.c:17174 +#: 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» no es una vista materializada" -#: catalog/objectaddress.c:1430 commands/tablecmds.c:284 -#: commands/tablecmds.c:17179 +#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 +#: commands/tablecmds.c:17861 #, c-format msgid "\"%s\" is not a foreign table" msgstr "«%s» no es una tabla foránea" -#: catalog/objectaddress.c:1471 +#: catalog/objectaddress.c:1433 #, c-format msgid "must specify relation and object name" msgstr "debe especificar nombre de relación y nombre de objeto" -#: catalog/objectaddress.c:1547 catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 #, c-format msgid "column name must be qualified" msgstr "el nombre de columna debe ser calificado" -#: catalog/objectaddress.c:1619 +#: catalog/objectaddress.c:1581 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "no existe el valor por omisión para la columna «%s» de la relación «%s»" -#: catalog/objectaddress.c:1656 commands/functioncmds.c:137 -#: commands/tablecmds.c:276 commands/typecmds.c:274 commands/typecmds.c:3689 +#: 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:4449 +#: utils/adt/acl.c:4560 #, c-format msgid "type \"%s\" does not exist" msgstr "no existe el tipo «%s»" -#: catalog/objectaddress.c:1775 +#: catalog/objectaddress.c:1737 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "no existe el operador %d (%s, %s) de %s" -#: catalog/objectaddress.c:1806 +#: catalog/objectaddress.c:1768 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "no existe la función %d (%s, %s) de %s" -#: catalog/objectaddress.c:1857 catalog/objectaddress.c:1883 +#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "no existe el mapeo para el usuario «%s» en el servidor «%s»" -#: catalog/objectaddress.c:1872 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:700 +#: 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 "no existe el servidor «%s»" -#: catalog/objectaddress.c:1939 +#: catalog/objectaddress.c:1901 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "no existe la relación «%s» en la publicación «%s»" -#: catalog/objectaddress.c:1986 -#, fuzzy, c-format -#| msgid "publication relation \"%s\" in publication \"%s\" does not exist" +#: catalog/objectaddress.c:1948 +#, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" -msgstr "no existe la relación «%s» en la publicación «%s»" +msgstr "no existe el esquema de publicación «%s» en la publicación «%s»" -#: catalog/objectaddress.c:2044 +#: catalog/objectaddress.c:2006 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "tipo de objeto para ACL por omisión «%c» no reconocido" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2007 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Tipos válidos de objeto son «%c», «%c», «%c», «%c» y «%c»." -#: catalog/objectaddress.c:2096 +#: catalog/objectaddress.c:2058 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "no existe el ACL por omisión para el usuario «%s» en el esquema «%s» en %s" -#: catalog/objectaddress.c:2101 +#: catalog/objectaddress.c:2063 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "no existe el ACL por omisión para el usuario «%s» en %s" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2184 -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2201 #, c-format msgid "name or argument lists may not contain nulls" msgstr "las listas de nombres o argumentos no pueden contener nulls" -#: catalog/objectaddress.c:2161 +#: catalog/objectaddress.c:2123 #, c-format msgid "unsupported object type \"%s\"" msgstr "tipo de objeto «%s» no soportado" -#: catalog/objectaddress.c:2180 catalog/objectaddress.c:2197 -#: catalog/objectaddress.c:2262 catalog/objectaddress.c:2346 +#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 +#: catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 #, c-format msgid "name list length must be exactly %d" msgstr "el largo de la lista de nombres debe ser exactamente %d" -#: catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2163 #, c-format msgid "large object OID may not be null" msgstr "el OID de objeto grande no puede ser null" -#: catalog/objectaddress.c:2210 catalog/objectaddress.c:2280 -#: catalog/objectaddress.c:2287 +#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 +#: catalog/objectaddress.c:2249 #, c-format msgid "name list length must be at least %d" msgstr "el largo de la lista de nombres debe ser al menos %d" -#: catalog/objectaddress.c:2273 catalog/objectaddress.c:2294 +#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 #, c-format msgid "argument list length must be exactly %d" msgstr "el largo de la lista de argumentos debe ser exactamente %d" -#: catalog/objectaddress.c:2508 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 #, c-format msgid "must be owner of large object %u" msgstr "debe ser dueño del objeto grande %u" -#: catalog/objectaddress.c:2523 commands/functioncmds.c:1561 +#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 #, c-format msgid "must be owner of type %s or type %s" msgstr "debe ser dueño del tipo %s o el tipo %s" -#: catalog/objectaddress.c:2550 catalog/objectaddress.c:2559 -#: catalog/objectaddress.c:2565 +#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 +#: catalog/objectaddress.c:2527 #, c-format msgid "permission denied" msgstr "permiso denegado" -#: catalog/objectaddress.c:2551 catalog/objectaddress.c:2560 +#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 #, c-format msgid "The current user must have the %s attribute." -msgstr "" +msgstr "El usuario actual debe tener el atributo %s." -#: catalog/objectaddress.c:2566 +#: catalog/objectaddress.c:2528 #, c-format msgid "The current user must have the %s option on role \"%s\"." -msgstr "" +msgstr "El usuario actual debe tener la opción %s en el rol «%s»." -#: catalog/objectaddress.c:2580 +#: catalog/objectaddress.c:2542 #, c-format msgid "must be superuser" msgstr "debe ser superusuario" -#: catalog/objectaddress.c:2649 +#: catalog/objectaddress.c:2611 #, c-format msgid "unrecognized object type \"%s\"" msgstr "tipo de objeto «%s» no reconocido" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2941 +#: catalog/objectaddress.c:2928 #, c-format msgid "column %s of %s" msgstr "columna %s de %s" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2943 #, c-format msgid "function %s" msgstr "función %s" -#: catalog/objectaddress.c:2969 +#: catalog/objectaddress.c:2956 #, c-format msgid "type %s" msgstr "tipo %s" -#: catalog/objectaddress.c:3006 +#: catalog/objectaddress.c:2993 #, c-format msgid "cast from %s to %s" msgstr "conversión de %s a %s" -#: catalog/objectaddress.c:3039 +#: catalog/objectaddress.c:3026 #, c-format msgid "collation %s" msgstr "ordenamiento (collation) %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3057 #, c-format msgid "constraint %s on %s" msgstr "restricción «%s» en %s" -#: catalog/objectaddress.c:3076 +#: catalog/objectaddress.c:3063 #, c-format msgid "constraint %s" msgstr "restricción %s" -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3095 #, c-format msgid "conversion %s" msgstr "conversión %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3130 +#: catalog/objectaddress.c:3117 #, c-format msgid "default value for %s" msgstr "valor por omisión para %s" -#: catalog/objectaddress.c:3141 +#: catalog/objectaddress.c:3128 #, c-format msgid "language %s" msgstr "lenguaje %s" -#: catalog/objectaddress.c:3149 +#: catalog/objectaddress.c:3136 #, c-format msgid "large object %u" msgstr "objeto grande %u" -#: catalog/objectaddress.c:3162 +#: catalog/objectaddress.c:3149 #, c-format msgid "operator %s" msgstr "operador %s" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3186 #, c-format msgid "operator class %s for access method %s" msgstr "clase de operadores «%s» para el método de acceso «%s»" -#: catalog/objectaddress.c:3227 +#: catalog/objectaddress.c:3214 #, c-format msgid "access method %s" msgstr "método de acceso %s" @@ -5218,7 +5536,7 @@ msgstr "método de acceso %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3276 +#: catalog/objectaddress.c:3269 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "operador %d (%s, %s) de %s: %s" @@ -5227,237 +5545,236 @@ msgstr "operador %d (%s, %s) de %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3333 +#: catalog/objectaddress.c:3334 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "función %d (%s, %s) de %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3385 +#: catalog/objectaddress.c:3388 #, c-format msgid "rule %s on %s" msgstr "regla %s en %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3431 +#: catalog/objectaddress.c:3434 #, c-format msgid "trigger %s on %s" -msgstr "disparador %s en %s" +msgstr "“trigger” %s en %s" -#: catalog/objectaddress.c:3451 +#: catalog/objectaddress.c:3454 #, c-format msgid "schema %s" msgstr "esquema %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3482 #, c-format msgid "statistics object %s" msgstr "objeto de estadísticas %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3513 #, c-format msgid "text search parser %s" msgstr "analizador de búsqueda en texto %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3544 #, c-format msgid "text search dictionary %s" msgstr "diccionario de búsqueda en texto %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3575 #, c-format msgid "text search template %s" msgstr "plantilla de búsqueda en texto %s" -#: catalog/objectaddress.c:3603 +#: catalog/objectaddress.c:3606 #, c-format msgid "text search configuration %s" msgstr "configuración de búsqueda en texto %s" -#: catalog/objectaddress.c:3616 +#: catalog/objectaddress.c:3619 #, c-format msgid "role %s" msgstr "rol %s" -#: catalog/objectaddress.c:3653 catalog/objectaddress.c:5505 -#, fuzzy, c-format -#| msgid "removal of role \"%s\" failed: %s" +#: catalog/objectaddress.c:3656 catalog/objectaddress.c:5505 +#, c-format msgid "membership of role %s in role %s" -msgstr "falló la eliminación del rol «%s»: %s" +msgstr "membresía del rol %s en el rol %s" -#: catalog/objectaddress.c:3674 +#: catalog/objectaddress.c:3677 #, c-format msgid "database %s" msgstr "base de datos %s" -#: catalog/objectaddress.c:3690 +#: catalog/objectaddress.c:3693 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:3701 +#: catalog/objectaddress.c:3704 #, c-format msgid "foreign-data wrapper %s" msgstr "conector de datos externos %s" -#: catalog/objectaddress.c:3711 +#: catalog/objectaddress.c:3714 #, c-format msgid "server %s" msgstr "servidor %s" -#: catalog/objectaddress.c:3744 +#: catalog/objectaddress.c:3747 #, c-format msgid "user mapping for %s on server %s" msgstr "mapeo para el usuario %s en el servidor %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3799 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevas relaciones pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3800 +#: catalog/objectaddress.c:3803 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "privilegios por omisión en nuevas relaciones pertenecientes al rol %s" -#: catalog/objectaddress.c:3806 +#: catalog/objectaddress.c:3809 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevas secuencias pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3810 +#: catalog/objectaddress.c:3813 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "privilegios por omisión en nuevas secuencias pertenecientes al rol %s" -#: catalog/objectaddress.c:3816 +#: catalog/objectaddress.c:3819 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevas funciones pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3820 +#: catalog/objectaddress.c:3823 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "privilegios por omisión en nuevas funciones pertenecientes al rol %s" -#: catalog/objectaddress.c:3826 +#: catalog/objectaddress.c:3829 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevos tipos pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3830 +#: catalog/objectaddress.c:3833 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "privilegios por omisión en nuevos tipos pertenecientes al rol %s" -#: catalog/objectaddress.c:3836 +#: catalog/objectaddress.c:3839 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "privilegios por omisión en nuevos esquemas pertenecientes al rol %s" -#: catalog/objectaddress.c:3843 +#: catalog/objectaddress.c:3846 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "privilegios por omisión pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3847 +#: catalog/objectaddress.c:3850 #, c-format msgid "default privileges belonging to role %s" msgstr "privilegios por omisión pertenecientes al rol %s" -#: catalog/objectaddress.c:3869 +#: catalog/objectaddress.c:3872 #, c-format msgid "extension %s" msgstr "extensión %s" -#: catalog/objectaddress.c:3886 +#: catalog/objectaddress.c:3889 #, c-format msgid "event trigger %s" -msgstr "disparador por eventos %s" +msgstr "“trigger” por eventos %s" -#: catalog/objectaddress.c:3910 +#: catalog/objectaddress.c:3913 #, c-format msgid "parameter %s" msgstr "parámetro %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3953 +#: catalog/objectaddress.c:3956 #, c-format msgid "policy %s on %s" msgstr "política %s en %s" -#: catalog/objectaddress.c:3967 +#: catalog/objectaddress.c:3970 #, c-format msgid "publication %s" msgstr "publicación %s" -#: catalog/objectaddress.c:3980 +#: catalog/objectaddress.c:3983 #, c-format msgid "publication of schema %s in publication %s" msgstr "publicación de esquema %s en la publicación %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:4011 +#: catalog/objectaddress.c:4014 #, c-format msgid "publication of %s in publication %s" msgstr "publicación de %s en la publicación %s" -#: catalog/objectaddress.c:4024 +#: catalog/objectaddress.c:4027 #, c-format msgid "subscription %s" msgstr "suscripción %s" -#: catalog/objectaddress.c:4045 +#: catalog/objectaddress.c:4048 #, c-format msgid "transform for %s language %s" msgstr "transformación para %s lenguaje %s" -#: catalog/objectaddress.c:4116 +#: catalog/objectaddress.c:4117 #, c-format msgid "table %s" msgstr "tabla %s" -#: catalog/objectaddress.c:4121 +#: catalog/objectaddress.c:4122 #, c-format msgid "index %s" msgstr "índice %s" -#: catalog/objectaddress.c:4125 +#: catalog/objectaddress.c:4126 #, c-format msgid "sequence %s" msgstr "secuencia %s" -#: catalog/objectaddress.c:4129 +#: catalog/objectaddress.c:4130 #, c-format msgid "toast table %s" msgstr "tabla toast %s" -#: catalog/objectaddress.c:4133 +#: catalog/objectaddress.c:4134 #, c-format msgid "view %s" msgstr "vista %s" -#: catalog/objectaddress.c:4137 +#: catalog/objectaddress.c:4138 #, c-format msgid "materialized view %s" msgstr "vista materializada %s" -#: catalog/objectaddress.c:4141 +#: catalog/objectaddress.c:4142 #, c-format msgid "composite type %s" msgstr "tipo compuesto %s" -#: catalog/objectaddress.c:4145 +#: catalog/objectaddress.c:4146 #, c-format msgid "foreign table %s" msgstr "tabla foránea %s" -#: catalog/objectaddress.c:4150 +#: catalog/objectaddress.c:4151 #, c-format msgid "relation %s" msgstr "relación %s" -#: catalog/objectaddress.c:4191 +#: catalog/objectaddress.c:4192 #, c-format msgid "operator family %s for access method %s" msgstr "familia de operadores %s para el método de acceso %s" @@ -5499,7 +5816,7 @@ msgstr "no se puede omitir el valor inicial cuando la función de transición es msgid "return type of inverse transition function %s is not %s" msgstr "el tipo de retorno de la función inversa de transición %s no es %s" -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:3009 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2991 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "la opción «strict» de las funciones de transición directa e inversa deben coincidir exactamente en la función de agregación" @@ -5514,7 +5831,7 @@ msgstr "la función final con argumentos extra no debe declararse STRICT" msgid "return type of combine function %s is not %s" msgstr "el tipo de retorno de la función «combine» %s no es %s" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3903 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3902 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "la función «combine» con tipo de transición %s no debe declararse STRICT" @@ -5529,12 +5846,12 @@ msgstr "el tipo de retorno de la función de serialización %s no es %s" msgid "return type of deserialization function %s is not %s" msgstr "el tipo de retorno de la función de deserialización %s no es %s" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:191 catalog/pg_proc.c:225 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "no se puede determinar el tipo de dato del resultado" -#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:204 catalog/pg_proc.c:233 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "uso inseguro de pseudotipo «internal»" @@ -5549,7 +5866,7 @@ msgstr "la implementación de la función de agregación en modo «moving» devu msgid "sort operator can only be specified for single-argument aggregates" msgstr "el operador de ordenamiento sólo puede ser especificado para funciones de agregación de un solo argumento" -#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:386 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "no se puede cambiar el tipo de rutina" @@ -5574,13 +5891,13 @@ msgstr "«%s» es una agregación de conjunto hipotético." msgid "cannot change number of direct arguments of an aggregate function" msgstr "no se puede cambiar cantidad de argumentos directos de una función de agregación" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:691 -#: commands/typecmds.c:1975 commands/typecmds.c:2021 commands/typecmds.c:2073 -#: commands/typecmds.c:2110 commands/typecmds.c:2144 commands/typecmds.c:2178 -#: commands/typecmds.c:2212 commands/typecmds.c:2241 commands/typecmds.c:2328 -#: commands/typecmds.c:2370 parser/parse_func.c:417 parser/parse_func.c:448 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:686 +#: commands/typecmds.c:1985 commands/typecmds.c:2031 commands/typecmds.c:2083 +#: commands/typecmds.c:2120 commands/typecmds.c:2154 commands/typecmds.c:2188 +#: commands/typecmds.c:2222 commands/typecmds.c:2251 commands/typecmds.c:2338 +#: commands/typecmds.c:2380 parser/parse_func.c:417 parser/parse_func.c:448 #: parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 -#: parser/parse_func.c:631 parser/parse_func.c:2171 parser/parse_func.c:2444 +#: parser/parse_func.c:631 parser/parse_func.c:2172 parser/parse_func.c:2445 #, c-format msgid "function %s does not exist" msgstr "no existe la función %s" @@ -5655,133 +5972,133 @@ msgstr "Esta operación no está soportada en tablas particionadas." msgid "This operation is not supported for partitioned indexes." msgstr "Esta operación no está soportada en índices particionados." -#: catalog/pg_collation.c:102 catalog/pg_collation.c:160 +#: catalog/pg_collation.c:101 catalog/pg_collation.c:159 #, c-format msgid "collation \"%s\" already exists, skipping" msgstr "el ordenamiento «%s» ya existe, omitiendo" -#: catalog/pg_collation.c:104 +#: catalog/pg_collation.c:103 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" msgstr "el ordenamiento «%s» para la codificación «%s» ya existe, omitiendo" -#: catalog/pg_collation.c:112 catalog/pg_collation.c:167 +#: catalog/pg_collation.c:111 catalog/pg_collation.c:166 #, c-format msgid "collation \"%s\" already exists" msgstr "el ordenamiento «%s» ya existe" -#: catalog/pg_collation.c:114 +#: catalog/pg_collation.c:113 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "la codificación «%2$s» ya tiene un ordenamiento llamado «%1$s»" -#: catalog/pg_constraint.c:690 +#: catalog/pg_constraint.c:732 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "el dominio %2$s ya contiene una restricción llamada «%1$s»" -#: catalog/pg_constraint.c:890 catalog/pg_constraint.c:983 +#: catalog/pg_constraint.c:932 catalog/pg_constraint.c:1025 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "no existe la restricción «%s» para la tabla «%s»" -#: catalog/pg_constraint.c:1083 +#: catalog/pg_constraint.c:1125 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "no existe la restricción «%s» para el dominio %s" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:64 #, c-format msgid "conversion \"%s\" already exists" msgstr "ya existe la conversión «%s»" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:77 #, c-format msgid "default conversion for %s to %s already exists" msgstr "ya existe una conversión por omisión desde %s a %s" -#: catalog/pg_depend.c:222 commands/extension.c:3344 +#: catalog/pg_depend.c:224 commands/extension.c:3397 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "«%s» ya es un miembro de la extensión «%s»" -#: catalog/pg_depend.c:229 catalog/pg_depend.c:280 commands/extension.c:3384 +#: catalog/pg_depend.c:231 catalog/pg_depend.c:282 commands/extension.c:3437 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s no es un miembro de la extensión «%s»" -#: catalog/pg_depend.c:232 +#: catalog/pg_depend.c:234 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "A una extensión no se le permite reemplazar un objeto que no posee." -#: catalog/pg_depend.c:283 +#: catalog/pg_depend.c:285 #, c-format msgid "An extension may only use CREATE ... IF NOT EXISTS to skip object creation if the conflicting object is one that it already owns." msgstr "Una extensión sólo puede usar CREATE ... IF NOT EXISTS para omitir la creación de un objeto si el objeto en conflicto es uno de cual ya es dueña." -#: catalog/pg_depend.c:646 +#: catalog/pg_depend.c:648 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "no se puede eliminar dependencia a %s porque es un objeto requerido por el sistema" -#: catalog/pg_enum.c:137 catalog/pg_enum.c:259 catalog/pg_enum.c:554 +#: catalog/pg_enum.c:175 catalog/pg_enum.c:314 catalog/pg_enum.c:624 #, c-format msgid "invalid enum label \"%s\"" msgstr "la etiqueta enum «%s» no es válida" -#: catalog/pg_enum.c:138 catalog/pg_enum.c:260 catalog/pg_enum.c:555 +#: catalog/pg_enum.c:176 catalog/pg_enum.c:315 catalog/pg_enum.c:625 #, c-format msgid "Labels must be %d bytes or less." msgstr "Las etiquetas deben ser de %d bytes o menos." -#: catalog/pg_enum.c:288 +#: catalog/pg_enum.c:343 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "la etiqueta de enum «%s» ya existe, omitiendo" -#: catalog/pg_enum.c:295 catalog/pg_enum.c:598 +#: catalog/pg_enum.c:350 catalog/pg_enum.c:668 #, c-format msgid "enum label \"%s\" already exists" msgstr "la etiqueta de enum «%s» ya existe" -#: catalog/pg_enum.c:350 catalog/pg_enum.c:593 +#: catalog/pg_enum.c:405 catalog/pg_enum.c:663 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "«%s» no es una etiqueta de enum existente" -#: catalog/pg_enum.c:408 +#: catalog/pg_enum.c:463 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_enum no se definió en modo de actualización binaria" -#: catalog/pg_enum.c:418 +#: catalog/pg_enum.c:473 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER es incompatible con la actualización binaria" -#: catalog/pg_inherits.c:593 +#: catalog/pg_inherits.c:592 #, c-format msgid "cannot detach partition \"%s\"" msgstr "no se puede desprender la partición «%s»" -#: catalog/pg_inherits.c:595 +#: catalog/pg_inherits.c:594 #, c-format msgid "The partition is being detached concurrently or has an unfinished detach." msgstr "La partición está siendo desprendida de forma concurrente o tiene un desprendimiento sin terminar." -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4583 -#: commands/tablecmds.c:15464 +#: 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 "Utilice ALTER TABLE ... DETACH PARTITION ... FINALIZE para completar la operación de desprendimiento pendiente." -#: catalog/pg_inherits.c:600 +#: catalog/pg_inherits.c:599 #, c-format msgid "cannot complete detaching partition \"%s\"" msgstr "no se puede completar el desprendimiento de la partición «%s»" -#: catalog/pg_inherits.c:602 +#: catalog/pg_inherits.c:601 #, c-format msgid "There's no pending concurrent detach." msgstr "No hay desprendimientos concurrentes pendientes." @@ -5791,116 +6108,129 @@ msgstr "No hay desprendimientos concurrentes pendientes." msgid "schema \"%s\" already exists" msgstr "ya existe el esquema «%s»" -#: catalog/pg_operator.c:219 catalog/pg_operator.c:361 +#: catalog/pg_operator.c:213 catalog/pg_operator.c:355 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "«%s» no es un nombre válido de operador" -#: catalog/pg_operator.c:370 +#: catalog/pg_operator.c:379 +#, c-format +msgid "operator %s already exists" +msgstr "ya existe un operador %s" + +#: catalog/pg_operator.c:445 commands/operatorcmds.c:600 +#, c-format +msgid "operator cannot be its own negator" +msgstr "un operador no puede ser su propio negador" + +#: catalog/pg_operator.c:572 #, c-format msgid "only binary operators can have commutators" msgstr "sólo los operadores binarios pueden tener conmutadores" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:509 +#: catalog/pg_operator.c:576 #, c-format msgid "only binary operators can have join selectivity" msgstr "sólo los operadores binarios pueden tener selectividad de join" -#: catalog/pg_operator.c:378 +#: catalog/pg_operator.c:580 #, c-format msgid "only binary operators can merge join" msgstr "sólo los operadores binarios pueden ser usados en merge join" -#: catalog/pg_operator.c:382 +#: catalog/pg_operator.c:584 #, c-format msgid "only binary operators can hash" msgstr "sólo los operadores binarios pueden ser usados en hash" -#: catalog/pg_operator.c:393 +#: catalog/pg_operator.c:593 #, c-format msgid "only boolean operators can have negators" msgstr "sólo los operadores booleanos pueden tener negadores" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:517 +#: catalog/pg_operator.c:597 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de restricción" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:521 +#: catalog/pg_operator.c:601 #, c-format msgid "only boolean operators can have join selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de join" -#: catalog/pg_operator.c:405 +#: catalog/pg_operator.c:605 #, c-format msgid "only boolean operators can merge join" msgstr "sólo los operadores booleanos pueden ser usados en merge join" -#: catalog/pg_operator.c:409 +#: catalog/pg_operator.c:609 #, c-format msgid "only boolean operators can hash" msgstr "sólo los operadores booleanos pueden ser usados en hash" -#: catalog/pg_operator.c:421 +#: catalog/pg_operator.c:739 #, c-format -msgid "operator %s already exists" -msgstr "ya existe un operador %s" +msgid "commutator operator %s is already the commutator of operator %s" +msgstr "el operator de conmutación %s ya es el conmutador del operador %s" -#: catalog/pg_operator.c:621 +#: catalog/pg_operator.c:744 #, c-format -msgid "operator cannot be its own negator or sort operator" -msgstr "un operador no puede ser su propio negador u operador de ordenamiento" +msgid "commutator operator %s is already the commutator of operator %u" +msgstr "el operator de conmutación %s ya es el conmutador del operador %u" -#: catalog/pg_parameter_acl.c:53 -#, fuzzy, c-format -#| msgid "parameter ACL with OID %u does not exist" -msgid "parameter ACL \"%s\" does not exist" -msgstr "no existe el ACL de parámetro con OID %u" +#: catalog/pg_operator.c:807 +#, c-format +msgid "negator operator %s is already the negator of operator %s" +msgstr "el operator de negación %s ya es el negador del operador %s" -#: catalog/pg_parameter_acl.c:88 -#, fuzzy, c-format -#| msgid "invalid type name \"%s\"" -msgid "invalid parameter name \"%s\"" -msgstr "el nombre de tipo «%s» no es válido" +#: catalog/pg_operator.c:812 +#, c-format +msgid "negator operator %s is already the negator of operator %u" +msgstr "el operator de negación %s ya es el negador del operador %u" + +#: catalog/pg_parameter_acl.c:50 +#, c-format +msgid "parameter ACL \"%s\" does not exist" +msgstr "no existe el ACL de parámetro «%s»" -#: catalog/pg_proc.c:132 parser/parse_func.c:2233 +#: catalog/pg_proc.c:130 parser/parse_func.c:2234 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "las funciones no pueden tener más de %d argumento" msgstr[1] "las funciones no pueden tener más de %d argumentos" -#: catalog/pg_proc.c:376 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "ya existe una función «%s» con los mismos argumentos" -#: catalog/pg_proc.c:388 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "«%s» es una función de agregación." -#: catalog/pg_proc.c:390 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "«%s» es una función de agregación." -#: catalog/pg_proc.c:392 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "«%s» es un índice parcial." -#: catalog/pg_proc.c:394 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "«%s» es una función de ventana deslizante." -#: catalog/pg_proc.c:414 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "no se puede cambiar que un procedimiento tenga parámetros de salida" -#: catalog/pg_proc.c:415 catalog/pg_proc.c:445 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "no se puede cambiar el tipo de retorno de una función existente" @@ -5909,120 +6239,114 @@ msgstr "no se puede cambiar el tipo de retorno de una función existente" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:421 catalog/pg_proc.c:448 catalog/pg_proc.c:493 -#: catalog/pg_proc.c:519 catalog/pg_proc.c:543 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 +#: catalog/pg_proc.c:517 catalog/pg_proc.c:541 #, c-format msgid "Use %s %s first." msgstr "Use %s %s primero." -#: catalog/pg_proc.c:446 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Tipo de registro definido por parámetros OUT es diferente." -#: catalog/pg_proc.c:490 +#: catalog/pg_proc.c:488 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "no se puede cambiar el nombre del parámetro de entrada «%s»" -#: catalog/pg_proc.c:517 +#: catalog/pg_proc.c:515 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "no se puede eliminar el valor por omisión de funciones existentes" -#: catalog/pg_proc.c:541 +#: catalog/pg_proc.c:539 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "no se puede cambiar el tipo de dato del valor por omisión de un parámetro" -#: catalog/pg_proc.c:752 +#: catalog/pg_proc.c:750 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "no hay ninguna función interna llamada «%s»" -#: catalog/pg_proc.c:845 +#: catalog/pg_proc.c:843 #, c-format msgid "SQL functions cannot return type %s" msgstr "las funciones SQL no pueden retornar el tipo %s" -#: catalog/pg_proc.c:860 +#: catalog/pg_proc.c:858 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "las funciones SQL no pueden tener argumentos de tipo %s" -#: catalog/pg_proc.c:987 executor/functions.c:1466 +#: catalog/pg_proc.c:986 executor/functions.c:1468 #, c-format msgid "SQL function \"%s\"" msgstr "función SQL «%s»" -#: catalog/pg_publication.c:71 catalog/pg_publication.c:79 -#: catalog/pg_publication.c:87 catalog/pg_publication.c:93 +#: catalog/pg_publication.c:66 catalog/pg_publication.c:74 +#: catalog/pg_publication.c:82 catalog/pg_publication.c:88 #, c-format msgid "cannot add relation \"%s\" to publication" msgstr "no se puede agregar la relación «%s» a la publicación" -#: catalog/pg_publication.c:81 +#: catalog/pg_publication.c:76 #, c-format msgid "This operation is not supported for system tables." msgstr "Esta operación no está soportada en tablas de sistema." -#: catalog/pg_publication.c:89 +#: catalog/pg_publication.c:84 #, c-format msgid "This operation is not supported for temporary tables." msgstr "Esta operación no está soportada en tablas temporales." -#: catalog/pg_publication.c:95 +#: catalog/pg_publication.c:90 #, c-format msgid "This operation is not supported for unlogged tables." msgstr "Esta característica no está soportada en tablas «unlogged»." -#: catalog/pg_publication.c:109 catalog/pg_publication.c:117 +#: catalog/pg_publication.c:104 catalog/pg_publication.c:112 #, c-format msgid "cannot add schema \"%s\" to publication" msgstr "no se puede agregar el esquema «%s» a la partición" -#: catalog/pg_publication.c:111 -#, fuzzy, c-format -#| msgid "This operation is not supported for system tables." +#: catalog/pg_publication.c:106 +#, c-format msgid "This operation is not supported for system schemas." -msgstr "Esta operación no está soportada en tablas de sistema." +msgstr "Esta operación no está soportada en esquemas de sistema." -#: catalog/pg_publication.c:119 -#, fuzzy, c-format -#| msgid "Unlogged relations cannot be replicated." +#: catalog/pg_publication.c:114 +#, c-format msgid "Temporary schemas cannot be replicated." -msgstr "Las tablas «unlogged» no pueden replicarse." +msgstr "Los esquemas temporales no pueden replicarse." -#: catalog/pg_publication.c:397 +#: catalog/pg_publication.c:392 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "la relación «%s» ya es un miembro de la publicación «%s»" -#: catalog/pg_publication.c:539 -#, fuzzy, c-format -#| msgid "cannot use system column \"%s\" in partition key" +#: catalog/pg_publication.c:534 +#, c-format msgid "cannot use system column \"%s\" in publication column list" -msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" +msgstr "no se puede usar la columna de sistema «%s» en lista de columnas de publicación" -#: catalog/pg_publication.c:545 -#, fuzzy, c-format -#| msgid "cannot use generated column in partition key" +#: catalog/pg_publication.c:540 +#, c-format msgid "cannot use generated column \"%s\" in publication column list" -msgstr "no se puede usar una columna generada en llave de particionamiento" +msgstr "no se puede usar la columna generada «%s» en lista de columnas de publicación" -#: catalog/pg_publication.c:551 -#, fuzzy, c-format -#| msgid "publication of %s in publication %s" +#: catalog/pg_publication.c:546 +#, c-format msgid "duplicate column \"%s\" in publication column list" -msgstr "publicación de %s en la publicación %s" +msgstr "columna «%s» duplicada en lista de columnas de publicación" -#: catalog/pg_publication.c:641 -#, fuzzy, c-format -#| msgid "relation \"%s\" is already member of publication \"%s\"" +#: catalog/pg_publication.c:636 +#, c-format msgid "schema \"%s\" is already member of publication \"%s\"" -msgstr "la relación «%s» ya es un miembro de la publicación «%s»" +msgstr "el esquema «%s» ya es miembro de la publicación «%s»" -#: catalog/pg_shdepend.c:830 +#: catalog/pg_shdepend.c:875 #, c-format msgid "" "\n" @@ -6037,65 +6361,70 @@ msgstr[1] "" "\n" "y objetos en otras %d bases de datos (vea el registro del servidor para obtener la lista)" -#: catalog/pg_shdepend.c:1177 +#: catalog/pg_shdepend.c:1222 #, c-format msgid "role %u was concurrently dropped" msgstr "el rol %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1189 +#: catalog/pg_shdepend.c:1234 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "el tablespace %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1203 +#: catalog/pg_shdepend.c:1248 #, c-format msgid "database %u was concurrently dropped" msgstr "la base de datos %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1254 +#: catalog/pg_shdepend.c:1299 #, c-format msgid "owner of %s" msgstr "dueño de %s" -#: catalog/pg_shdepend.c:1256 +#: catalog/pg_shdepend.c:1301 #, c-format msgid "privileges for %s" msgstr "privilegios para %s" -#: catalog/pg_shdepend.c:1258 +#: catalog/pg_shdepend.c:1303 +#, c-format +msgid "initial privileges for %s" +msgstr "privilegios iniciales para %s" + +#: catalog/pg_shdepend.c:1305 #, c-format msgid "target of %s" msgstr "destino de %s" -#: catalog/pg_shdepend.c:1260 +#: catalog/pg_shdepend.c:1307 #, c-format msgid "tablespace for %s" msgstr "tablespace para %s" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1268 +#: catalog/pg_shdepend.c:1315 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d objeto en %s" msgstr[1] "%d objetos en %s" -#: catalog/pg_shdepend.c:1332 +#: catalog/pg_shdepend.c:1379 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "no se puede eliminar objetos de propiedad de %s porque son requeridos por el sistema" -#: catalog/pg_shdepend.c:1498 +#: 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 "no se puede reasignar la propiedad de objetos de %s porque son requeridos por el sistema" -#: catalog/pg_subscription.c:424 +#: catalog/pg_subscription.c:438 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "no se pudo eliminar mapeo de relación para suscripción «%s»" -#: catalog/pg_subscription.c:426 +#: catalog/pg_subscription.c:440 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "La sincronización de tabla para la relación «%s» está en progreso y su estado es «%c»." @@ -6103,227 +6432,227 @@ msgstr "La sincronización de tabla para la relación «%s» está en progreso y #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:433 +#: catalog/pg_subscription.c:447 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Utilice %s para activar la suscripción si aún no está activada, o utilice %s para eliminar la suscripción." -#: catalog/pg_type.c:134 catalog/pg_type.c:474 +#: catalog/pg_type.c:133 catalog/pg_type.c:474 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" -#: catalog/pg_type.c:254 +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "el tamaño interno de tipo %d no es válido" -#: catalog/pg_type.c:270 catalog/pg_type.c:278 catalog/pg_type.c:286 -#: catalog/pg_type.c:295 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "el alineamiento «%c» no es válido para un tipo pasado por valor de tamaño %d" -#: catalog/pg_type.c:302 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "el tamaño interno %d no es válido para un tipo pasado por valor" -#: catalog/pg_type.c:312 catalog/pg_type.c:318 +#: catalog/pg_type.c:311 catalog/pg_type.c:317 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "el alineamiento «%c» no es válido para un tipo de largo variable" -#: catalog/pg_type.c:326 commands/typecmds.c:4140 +#: catalog/pg_type.c:325 commands/typecmds.c:4363 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "los tipos de tamaño fijo deben tener almacenamiento PLAIN" -#: catalog/pg_type.c:955 +#: catalog/pg_type.c:978 #, c-format msgid "Failed while creating a multirange type for type \"%s\"." msgstr "Falla al crear un tipo de multirango para el tipo «%s»." -#: catalog/pg_type.c:956 +#: catalog/pg_type.c:979 #, c-format msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Puede especificar manualmente un nombre para el tipo de multirango usando el atributo «multirange_type_name»." -#: catalog/storage.c:505 storage/buffer/bufmgr.c:1145 +#: catalog/storage.c:533 storage/buffer/bufmgr.c:1540 #, c-format msgid "invalid page in block %u of relation %s" msgstr "la página no es válida en el bloque %u de la relación %s" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:167 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "sólo las funciones de agregación de conjuntos ordenados pueden ser hipotéticas" -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:192 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "el atributo de la función de agregación «%s» no es reconocido" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:202 #, c-format msgid "aggregate stype must be specified" msgstr "debe especificarse el tipo de transición (stype) de la función de agregación" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:206 #, c-format msgid "aggregate sfunc must be specified" msgstr "debe especificarse la función de transición (sfunc) de la función de agregación" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:218 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "debe especificarse la función de transición msfunc cuando se especifica mstype" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:222 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "debe especificarse la función de transición minvfunc cuando se especifica mstype" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:229 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "no debe especificarse msfunc sin mstype" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:233 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "no debe especificarse minvfunc sin mstype" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:237 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "no debe especificarse mfinalfunc sin mstype" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:241 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "no debe especificarse msspace sin mstype" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:245 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "no debe especificarse minitcond sin mstype" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:274 #, c-format msgid "aggregate input type must be specified" msgstr "debe especificarse el tipo de entrada de la función de agregación" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:304 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "el tipo base es redundante con el tipo de entrada en la función de agregación" -#: commands/aggregatecmds.c:351 commands/aggregatecmds.c:392 +#: commands/aggregatecmds.c:347 commands/aggregatecmds.c:388 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "el tipo de transición de la función de agregación no puede ser %s" -#: commands/aggregatecmds.c:363 +#: commands/aggregatecmds.c:359 #, c-format msgid "serialization functions may be specified only when the aggregate transition data type is %s" msgstr "las funciones de serialización pueden especificarse sólo cuando el tipo de transición de la función de agregación es %s" -#: commands/aggregatecmds.c:373 +#: commands/aggregatecmds.c:369 #, c-format msgid "must specify both or neither of serialization and deserialization functions" msgstr "debe especificar ambas o ninguna de las funciones de serialización y deserialización" -#: commands/aggregatecmds.c:438 commands/functioncmds.c:639 +#: commands/aggregatecmds.c:434 commands/functioncmds.c:634 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "el parámetro «parallel» debe ser SAFE, RESTRICTED o UNSAFE" -#: commands/aggregatecmds.c:494 +#: commands/aggregatecmds.c:490 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "el parámetro «%s» debe ser READ_ONLY, SHAREABLE o READ_WRITE" -#: commands/alter.c:86 commands/event_trigger.c:174 +#: commands/alter.c:83 commands/event_trigger.c:191 #, c-format msgid "event trigger \"%s\" already exists" -msgstr "el disparador por eventos «%s» ya existe" +msgstr "el “trigger” por eventos «%s» ya existe" -#: commands/alter.c:89 commands/foreigncmds.c:593 +#: commands/alter.c:86 commands/foreigncmds.c:593 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "el conector de datos externos «%s» ya existe" -#: commands/alter.c:92 commands/foreigncmds.c:884 +#: commands/alter.c:89 commands/foreigncmds.c:884 #, c-format msgid "server \"%s\" already exists" msgstr "el servidor «%s» ya existe" -#: commands/alter.c:95 commands/proclang.c:133 +#: commands/alter.c:92 commands/proclang.c:131 #, c-format msgid "language \"%s\" already exists" msgstr "ya existe el lenguaje «%s»" -#: commands/alter.c:98 commands/publicationcmds.c:771 +#: commands/alter.c:95 commands/publicationcmds.c:764 #, c-format msgid "publication \"%s\" already exists" msgstr "la publicación «%s» ya existe" -#: commands/alter.c:101 commands/subscriptioncmds.c:657 +#: commands/alter.c:98 commands/subscriptioncmds.c:669 #, c-format msgid "subscription \"%s\" already exists" msgstr "la suscripción «%s» ya existe" -#: commands/alter.c:124 +#: commands/alter.c:121 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "ya existe una conversión llamada «%s» en el esquema «%s»" -#: commands/alter.c:128 +#: commands/alter.c:125 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "ya existe un objeto de estadísticas llamado «%s» en el esquema «%s»" -#: commands/alter.c:132 +#: commands/alter.c:129 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "el analizador de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:136 +#: commands/alter.c:133 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "el diccionario de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:140 +#: commands/alter.c:137 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "la plantilla de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:144 +#: commands/alter.c:141 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "la configuración de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:217 +#: commands/alter.c:214 #, c-format msgid "must be superuser to rename %s" msgstr "debe ser superusuario para cambiar el nombre de «%s»" -#: commands/alter.c:259 commands/subscriptioncmds.c:636 -#: commands/subscriptioncmds.c:1116 commands/subscriptioncmds.c:1198 -#: commands/subscriptioncmds.c:1830 +#: 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 "" +msgstr "password_required=false es sólo para superusuario" -#: commands/alter.c:260 commands/subscriptioncmds.c:637 -#: commands/subscriptioncmds.c:1117 commands/subscriptioncmds.c:1199 -#: commands/subscriptioncmds.c:1831 +#: 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 "" +msgstr "Las suscripciones con la opción password_required puesta en falso sólo pueden ser creadas o modificadas por el superusuario." -#: commands/alter.c:775 +#: commands/alter.c:735 #, c-format msgid "must be superuser to set schema of %s" msgstr "debe ser superusuario para definir el esquema de %s" @@ -6343,7 +6672,7 @@ msgstr "Debe ser superusuario para crear un método de acceso." msgid "access method \"%s\" already exists" msgstr "el método de acceso «%s» ya existe" -#: commands/amcmds.c:154 commands/indexcmds.c:217 commands/indexcmds.c:840 +#: 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" @@ -6354,175 +6683,174 @@ msgstr "no existe el método de acceso «%s»" msgid "handler function is not specified" msgstr "no se ha especificado una función manejadora" -#: commands/amcmds.c:264 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:709 -#: parser/parse_clause.c:941 +#: commands/amcmds.c:264 commands/event_trigger.c:200 +#: commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:702 +#: parser/parse_clause.c:943 #, c-format msgid "function %s must return type %s" msgstr "la función %s debe retornar el tipo %s" -#: commands/analyze.c:227 +#: commands/analyze.c:217 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "omitiendo «%s»: no se puede analizar esta tabla foránea" -#: commands/analyze.c:244 +#: commands/analyze.c:234 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "omitiendo «%s»: no se pueden analizar objetos que no son tablas, ni tablas especiales de sistema" -#: commands/analyze.c:324 +#: commands/analyze.c:314 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "analizando la jerarquía de herencia «%s.%s»" -#: commands/analyze.c:329 +#: commands/analyze.c:319 #, c-format msgid "analyzing \"%s.%s\"" msgstr "analizando «%s.%s»" -#: commands/analyze.c:394 +#: commands/analyze.c:385 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "la columna «%s» aparece más de una vez en la relación «%s»" -#: commands/analyze.c:786 +#: commands/analyze.c:785 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "análisis automático de la tabla «%s.%s.%s»\n" -#: commands/analyze.c:1333 +#: 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»: se procesaron %d de %u páginas, que contenían %.0f filas vigentes y %.0f filas no vigentes; %d filas en la muestra, %.0f total de filas estimadas" -#: commands/analyze.c:1417 +#: commands/analyze.c:1384 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol no contiene tablas hijas" -#: commands/analyze.c:1515 +#: commands/analyze.c:1482 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol no contiene tablas hijas analizables" -#: commands/async.c:646 +#: commands/async.c:612 #, c-format msgid "channel name cannot be empty" msgstr "el nombre de canal no puede ser vacío" -#: commands/async.c:652 +#: commands/async.c:618 #, c-format msgid "channel name too long" msgstr "el nombre de canal es demasiado largo" -#: commands/async.c:657 +#: commands/async.c:623 #, c-format msgid "payload string too long" msgstr "la cadena de carga es demasiado larga" -#: commands/async.c:876 +#: commands/async.c:842 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "no se puede hacer PREPARE de una transacción que ha ejecutado LISTEN, UNLISTEN o NOTIFY" -#: commands/async.c:980 +#: commands/async.c:946 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "demasiadas notificaciones en la cola NOTIFY" -#: commands/async.c:1602 +#: commands/async.c:1553 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "la cola NOTIFY está %.0f%% llena" -#: commands/async.c:1604 +#: commands/async.c:1555 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "El proceso servidor con PID %d está entre aquellos con transacciones más antiguas." -#: commands/async.c:1607 +#: commands/async.c:1558 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "La cola NOTIFY no puede vaciarse hasta que ese proceso cierre su transacción actual." -#: commands/cluster.c:131 +#: commands/cluster.c:128 #, c-format msgid "unrecognized CLUSTER option \"%s\"" msgstr "opción de CLUSTER «%s» no reconocida" -#: commands/cluster.c:162 commands/cluster.c:435 +#: commands/cluster.c:159 commands/cluster.c:433 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "no se pueden reordenar tablas temporales de otras sesiones" -#: commands/cluster.c:180 +#: commands/cluster.c:177 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "no hay un índice de ordenamiento definido para la tabla «%s»" -#: commands/cluster.c:194 commands/tablecmds.c:14200 commands/tablecmds.c:16043 +#: commands/cluster.c:191 commands/tablecmds.c:14797 commands/tablecmds.c:16729 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "no existe el índice «%s» en la tabla «%s»" -#: commands/cluster.c:424 +#: commands/cluster.c:422 #, c-format msgid "cannot cluster a shared catalog" msgstr "no se puede reordenar un catálogo compartido" -#: commands/cluster.c:439 +#: commands/cluster.c:437 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "no se puede hacer vacuum a tablas temporales de otras sesiones" -#: commands/cluster.c:515 commands/tablecmds.c:16053 +#: commands/cluster.c:513 commands/tablecmds.c:16739 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "«%s» no es un índice de la tabla «%s»" -#: commands/cluster.c:523 +#: commands/cluster.c:521 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "no se puede reordenar en índice «%s» porque el método de acceso no soporta reordenamiento" -#: commands/cluster.c:535 +#: commands/cluster.c:533 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "no se puede reordenar en índice parcial «%s»" -#: commands/cluster.c:549 +#: commands/cluster.c:547 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "no se puede reordenar en el índice no válido «%s»" -#: commands/cluster.c:573 +#: commands/cluster.c:571 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "no se puede marcar un índice «clustered» en una tabla particionada" -#: commands/cluster.c:952 +#: commands/cluster.c:956 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "reordenando «%s.%s» usando un recorrido de índice en «%s»" -#: commands/cluster.c:958 +#: commands/cluster.c:962 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "reordenando «%s.%s» usando un recorrido secuencial y ordenamiento" -#: commands/cluster.c:963 +#: commands/cluster.c:967 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "haciendo vacuum a «%s.%s»" -#: commands/cluster.c:990 -#, fuzzy, c-format -#| msgid "index \"%s\" now contains %.0f row versions in %u pages" +#: commands/cluster.c:994 +#, c-format msgid "\"%s.%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" -msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" +msgstr "«%s.%s»: se encontraron %.0f versiones de filas eliminables, %.0f no eliminables en %u páginas" -#: commands/cluster.c:995 +#: commands/cluster.c:999 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -6531,40 +6859,39 @@ msgstr "" "%.0f versiones muertas de filas no pueden ser eliminadas aún.\n" "%s." -#: commands/cluster.c:1728 -#, fuzzy, c-format -#| msgid "permission denied to set role \"%s\"" +#: commands/cluster.c:1744 +#, c-format msgid "permission denied to cluster \"%s\", skipping it" -msgstr "se ha denegado el permiso para definir el rol «%s»" +msgstr "permiso denegado a hacer cluster a «%s», ignorando" -#: commands/collationcmds.c:112 +#: commands/collationcmds.c:110 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "el atributo de ordenamiento (collation) «%s» no es reconocido" -#: commands/collationcmds.c:125 commands/collationcmds.c:131 -#: commands/define.c:389 commands/tablecmds.c:7876 -#: replication/pgoutput/pgoutput.c:310 replication/pgoutput/pgoutput.c:333 -#: replication/pgoutput/pgoutput.c:347 replication/pgoutput/pgoutput.c:357 -#: replication/pgoutput/pgoutput.c:367 replication/pgoutput/pgoutput.c:377 -#: replication/pgoutput/pgoutput.c:387 replication/walsender.c:996 -#: replication/walsender.c:1018 replication/walsender.c:1028 +#: 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" msgstr "opciones contradictorias o redundantes" -#: commands/collationcmds.c:126 +#: commands/collationcmds.c:124 #, c-format msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." msgstr "LOCALE no puede configurarse junto con LC_COLLATE o LC_CTYPE." -#: commands/collationcmds.c:132 -#, fuzzy, c-format -#| msgid "option \"%s\" cannot be specified with other options" +#: commands/collationcmds.c:130 +#, c-format msgid "FROM cannot be specified together with any other options." -msgstr "la opción «%s» no puede ser especificada con otras opciones" +msgstr "FROM no puede especificarse junto con otras opciones." -#: commands/collationcmds.c:191 +#: commands/collationcmds.c:189 #, c-format msgid "collation \"default\" cannot be copied" msgstr "el ordenamiento «default» no puede copiarse" @@ -6574,435 +6901,364 @@ msgstr "el ordenamiento «default» no puede copiarse" msgid "unrecognized collation provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: commands/collationcmds.c:253 +#: commands/collationcmds.c:253 commands/collationcmds.c:264 +#: commands/collationcmds.c:270 commands/collationcmds.c:278 #, c-format -msgid "parameter \"lc_collate\" must be specified" -msgstr "debe especificarse el parámetro «lc_collate»" +msgid "parameter \"%s\" must be specified" +msgstr "el parámetro «%s» debe especificarse" -#: commands/collationcmds.c:258 +#: commands/collationcmds.c:293 commands/dbcommands.c:1134 #, c-format -msgid "parameter \"lc_ctype\" must be specified" -msgstr "debe especificarse el parámetro «lc_ctype»" - -#: commands/collationcmds.c:265 -#, fuzzy, c-format -#| msgid "parameter \"lc_collate\" must be specified" -msgid "parameter \"locale\" must be specified" -msgstr "debe especificarse el parámetro «lc_collate»" - -#: commands/collationcmds.c:279 commands/dbcommands.c:1074 -#, fuzzy, c-format -#| msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" -msgid "using standard form \"%s\" for locale \"%s\"" -msgstr "Usando la marca de lenguaje «%s» para la configuración regional ICU «%s».\n" +msgid "using standard form \"%s\" for ICU locale \"%s\"" +msgstr "usando la forma estándar «%s» para la configuración regional ICU «%s»" -#: commands/collationcmds.c:298 +#: commands/collationcmds.c:312 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "los ordenamientos no determinísticos no están soportados con este proveedor" -#: commands/collationcmds.c:303 commands/dbcommands.c:1093 -#, fuzzy, c-format -#| msgid "ICU locale cannot be specified unless locale provider is ICU" +#: commands/collationcmds.c:317 commands/dbcommands.c:1087 +#, c-format msgid "ICU rules cannot be specified unless locale provider is ICU" -msgstr "no se puede especificar una configuración regional ICU a menos que el proveedor de configuración regional sea ICU" +msgstr "no se pueden especificar reglas ICU a menos que el proveedor de configuración regional sea ICU" -#: commands/collationcmds.c:322 +#: commands/collationcmds.c:340 #, c-format msgid "current database's encoding is not supported with this provider" msgstr "la codificación de la base de datos actual no está soportada con este proveedor" -#: commands/collationcmds.c:382 +#: commands/collationcmds.c:409 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "ya existe un ordenamiento (collation) llamado «%s» para la codificación «%s» en el esquema «%s»" -#: commands/collationcmds.c:393 +#: commands/collationcmds.c:420 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "ya existe un ordenamiento llamado «%s» en el esquema «%s»" -#: commands/collationcmds.c:418 -#, fuzzy, c-format -#| msgid "change the definition of a collation" +#: commands/collationcmds.c:445 +#, c-format msgid "cannot refresh version of default collation" -msgstr "cambia la definición de un ordenamiento" +msgstr "no se puede refrescar la versión del ordenamiento por omisión" -#: commands/collationcmds.c:419 -#, fuzzy, c-format -#| msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." -msgid "Use ALTER DATABASE ... REFRESH COLLATION VERSION instead." -msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION en su lugar." +#. translator: %s is an SQL command +#. translator: %s is an SQL ALTER command +#: 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 "Use %s en su lugar." -#: commands/collationcmds.c:446 commands/dbcommands.c:2447 +#: commands/collationcmds.c:480 commands/dbcommands.c:2566 #, c-format msgid "changing version from %s to %s" msgstr "cambiando versión de %s a %s" -#: commands/collationcmds.c:461 commands/dbcommands.c:2460 +#: commands/collationcmds.c:495 commands/dbcommands.c:2579 #, c-format msgid "version has not changed" msgstr "la versión no ha cambiado" -#: commands/collationcmds.c:494 commands/dbcommands.c:2626 +#: commands/collationcmds.c:528 commands/dbcommands.c:2749 #, c-format msgid "database with OID %u does not exist" msgstr "no existe la base de datos con OID %u" -#: commands/collationcmds.c:515 +#: commands/collationcmds.c:554 #, c-format msgid "collation with OID %u does not exist" msgstr "no existe el ordenamiento (collation) con OID %u" -#: commands/collationcmds.c:803 +#: commands/collationcmds.c:848 #, c-format msgid "must be superuser to import system collations" msgstr "debe ser superusuario para importar ordenamientos del sistema" -#: commands/collationcmds.c:831 commands/copyfrom.c:1653 commands/copyto.c:656 -#: libpq/be-secure-common.c:59 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "no se pudo ejecutar la orden «%s»: %m" - -#: commands/collationcmds.c:923 commands/collationcmds.c:1008 +#: commands/collationcmds.c:968 commands/collationcmds.c:1053 #, c-format msgid "no usable system locales were found" msgstr "no se encontraron locales de sistema utilizables" -#: commands/comment.c:61 commands/dbcommands.c:1594 commands/dbcommands.c:1791 -#: commands/dbcommands.c:1901 commands/dbcommands.c:2099 -#: commands/dbcommands.c:2337 commands/dbcommands.c:2420 -#: commands/dbcommands.c:2530 commands/dbcommands.c:3030 -#: utils/init/postinit.c:1025 utils/init/postinit.c:1130 -#: utils/init/postinit.c:1147 +#: 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 "no existe la base de datos «%s»" #: commands/comment.c:101 -#, fuzzy, c-format -#| msgid "cannot alter constraint \"%s\" on relation \"%s\"" +#, c-format msgid "cannot set comment on relation \"%s\"" -msgstr "no se puede modificar la restricción «%s» en la relación «%s»" +msgstr "no se puede definir comentario en la relación «%s»" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:2028 +#: commands/constraint.c:61 utils/adt/ri_triggers.c:2019 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "la función «%s» no fue ejecutada por el manejador de triggers" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:2037 +#: commands/constraint.c:68 utils/adt/ri_triggers.c:2028 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "la función «%s» debe ser ejecutada AFTER ROW" -#: commands/constraint.c:84 +#: commands/constraint.c:82 #, c-format msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "la función «%s» debe ser ejecutada en INSERT o UPDATE" -#: commands/conversioncmds.c:69 +#: commands/conversioncmds.c:62 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "no existe la codificación fuente «%s»" -#: commands/conversioncmds.c:76 +#: commands/conversioncmds.c:69 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "no existe la codificación de destino «%s»" -#: commands/conversioncmds.c:89 +#: commands/conversioncmds.c:82 #, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" msgstr "la conversión de codificación desde o hacia a «SQL_ASCII» no está soportada" -#: commands/conversioncmds.c:102 +#: commands/conversioncmds.c:95 #, c-format msgid "encoding conversion function %s must return type %s" msgstr "la función de conversión de codificación %s debe retornar tipo %s" -#: commands/conversioncmds.c:132 +#: commands/conversioncmds.c:125 #, c-format msgid "encoding conversion function %s returned incorrect result for empty input" msgstr "la función de conversión de codificación %s retornó un resultado incorrecto para una entrada vacía" -#: commands/copy.c:86 -#, fuzzy, c-format -#| msgid "permission denied to create role" +#: commands/copy.c:84 +#, c-format msgid "permission denied to COPY to or from an external program" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para hacer COPY hacia o desde un programa externo" -#: commands/copy.c:87 +#: commands/copy.c:85 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY to or from an external program." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden hacer COPY desde o hacia un programa externo." -#: commands/copy.c:89 commands/copy.c:100 commands/copy.c:109 +#: commands/copy.c:87 commands/copy.c:98 commands/copy.c:107 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Cualquier usuario puede usar COPY hacia la salida estándar o desde la entrada estándar. La orden \\copy de psql también puede ser utilizado por cualquier usuario." -#: commands/copy.c:97 -#, fuzzy, c-format -#| msgid "permission denied to drop role" +#: commands/copy.c:95 +#, c-format msgid "permission denied to COPY from a file" -msgstr "se ha denegado el permiso para eliminar el rol" +msgstr "se ha denegado el permiso para hacer COPY desde un archivo" -#: commands/copy.c:98 +#: commands/copy.c:96 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY from a file." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden hacer COPY desde un archivo." -#: commands/copy.c:106 -#, fuzzy, c-format -#| msgid "permission denied to drop role" +#: commands/copy.c:104 +#, c-format msgid "permission denied to COPY to a file" -msgstr "se ha denegado el permiso para eliminar el rol" +msgstr "se ha denegado el permiso para hacer COPY a un archivo" -#: commands/copy.c:107 +#: commands/copy.c:105 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY to a file." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden hacer COPY hacia un archivo." -#: commands/copy.c:195 +#: commands/copy.c:193 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM no está soportado con seguridad a nivel de registros" -#: commands/copy.c:196 +#: commands/copy.c:194 #, c-format msgid "Use INSERT statements instead." msgstr "Use sentencias INSERT en su lugar." -#: commands/copy.c:290 -#, fuzzy, c-format -#| msgid "\"EEEE\" not supported for input" -msgid "MERGE not supported in COPY" -msgstr "«EEEE» no está soportado en la entrada" - -#: commands/copy.c:383 +#: commands/copy.c:375 #, c-format msgid "cannot use \"%s\" with HEADER in COPY TO" msgstr "no se puede usar «%s» con HEADER en COPY TO" -#: commands/copy.c:392 -#, fuzzy, c-format -#| msgid "%s requires a Boolean value" +#: commands/copy.c:384 +#, c-format msgid "%s requires a Boolean value or \"match\"" -msgstr "«%s» requiere un valor lógico (booleano)" +msgstr "«%s» requiere un valor lógico (booleano) o «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: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 %s cannot be used with %s" +msgstr "COPY %s no puede usarse con %s" + +#. 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 %s \"%s\" not recognized" +msgstr "no se reconoce el valor «%2$s» para COPY %1$s" -#: commands/copy.c:451 +#: commands/copy.c:502 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "el formato de COPY «%s» no es reconocido" -#: commands/copy.c:509 commands/copy.c:522 commands/copy.c:535 -#: commands/copy.c:554 +#: 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 "el argumento de la opción «%s» debe ser una lista de nombres de columna" -#: commands/copy.c:566 +#: commands/copy.c:621 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "el argumento de la opción «%s» debe ser un nombre válido de codificación" -#: commands/copy.c:573 commands/dbcommands.c:859 commands/dbcommands.c:2285 +#: commands/copy.c:642 commands/dbcommands.c:866 commands/dbcommands.c:2381 #, c-format msgid "option \"%s\" not recognized" msgstr "no se reconoce la opción «%s»" -#: commands/copy.c:585 +#. 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 "no se puede especificar DELIMITER en modo BINARY" +msgid "cannot specify %s in BINARY mode" +msgstr "no se puede especificar %s en modo BINARY" -#: commands/copy.c:590 +#: commands/copy.c:670 #, c-format -msgid "cannot specify NULL in BINARY mode" -msgstr "no se puede especificar NULL en modo BINARY" +msgid "only ON_ERROR STOP is allowed in BINARY mode" +msgstr "sólo ON ERROR STOP es permitido en modo BINARY" -#: commands/copy.c:595 -#, fuzzy, c-format -#| msgid "cannot specify NULL in BINARY mode" -msgid "cannot specify DEFAULT in BINARY mode" -msgstr "no se puede especificar NULL en modo BINARY" - -#: commands/copy.c:617 +#: commands/copy.c:692 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "el delimitador de COPY debe ser un solo carácter de un byte" -#: commands/copy.c:624 +#: commands/copy.c:699 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "el delimitador de COPY no puede ser el carácter de nueva línea ni el de retorno de carro" -#: commands/copy.c:630 +#: commands/copy.c:705 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "la representación de null de COPY no puede usar el carácter de nueva línea ni el de retorno de carro" -#: commands/copy.c:640 -#, fuzzy, c-format -#| msgid "COPY null representation cannot use newline or carriage return" +#: commands/copy.c:715 +#, c-format msgid "COPY default representation cannot use newline or carriage return" -msgstr "la representación de null de COPY no puede usar el carácter de nueva línea ni el de retorno de carro" +msgstr "la representación de default de COPY no puede usar el carácter de nueva línea ni el de retorno de carro" -#: commands/copy.c:658 +#: commands/copy.c:733 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "el delimitador de COPY no puede ser «%s»" -#: commands/copy.c:664 -#, fuzzy, c-format -#| msgid "cannot specify DELIMITER in BINARY mode" -msgid "cannot specify HEADER in BINARY mode" -msgstr "no se puede especificar DELIMITER en modo BINARY" - -#: commands/copy.c:670 +#. 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 "COPY quote available only in CSV mode" -msgstr "el «quote» de COPY está disponible sólo en modo CSV" +msgid "COPY %s requires CSV mode" +msgstr "COPY %s requiere modo CSV" -#: commands/copy.c:675 +#: commands/copy.c:752 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "la comilla («quote») de COPY debe ser un solo carácter de un byte" -#: commands/copy.c:680 +#: commands/copy.c:757 #, c-format msgid "COPY delimiter and quote must be different" msgstr "el delimitador de COPY y la comilla («quote») deben ser diferentes" -#: commands/copy.c:686 -#, c-format -msgid "COPY escape available only in CSV mode" -msgstr "escape de COPY disponible sólo en modo CSV" - -#: commands/copy.c:691 +#: commands/copy.c:769 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "el escape de COPY debe ser un sólo carácter de un byte" -#: commands/copy.c:697 -#, c-format -msgid "COPY force quote available only in CSV mode" -msgstr "el forzado de comillas de COPY sólo está disponible en modo CSV" - -#: commands/copy.c:701 -#, c-format -msgid "COPY force quote only available using COPY TO" -msgstr "el forzado de comillas de COPY sólo está disponible en COPY TO" - -#: commands/copy.c:707 -#, c-format -msgid "COPY force not null available only in CSV mode" -msgstr "el forzado de no nulos en COPY sólo está disponible en modo CSV" - -#: commands/copy.c:711 -#, c-format -msgid "COPY force not null only available using COPY FROM" -msgstr "el forzado de no nulos en COPY sólo está disponible usando COPY FROM" - -#: commands/copy.c:717 -#, c-format -msgid "COPY force null available only in CSV mode" -msgstr "el forzado de nulos en COPY sólo está disponible en modo CSV" - -#: commands/copy.c:722 -#, c-format -msgid "COPY force null only available using COPY FROM" -msgstr "el forzado de nulos en COPY sólo está disponible usando COPY FROM" - -#: commands/copy.c:728 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:823 commands/copy.c:859 #, c-format -msgid "COPY delimiter must not appear in the NULL specification" -msgstr "el delimitador de COPY no debe aparecer en la especificación NULL" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "el carácter delimitador de COPY no debe aparecer en la especificación %s" -#: commands/copy.c:735 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:832 commands/copy.c:868 #, c-format -msgid "CSV quote character must not appear in the NULL specification" -msgstr "el carácter de «quote» de CSV no debe aparecer en la especificación NULL" - -#: commands/copy.c:742 -#, fuzzy, c-format -#| msgid "COPY force null only available using COPY FROM" -msgid "COPY DEFAULT only available using COPY FROM" -msgstr "el forzado de nulos en COPY sólo está disponible usando COPY FROM" +msgid "CSV quote character must not appear in the %s specification" +msgstr "el carácter de «quote» de CSV no debe aparecer en la especificación %s" -#: commands/copy.c:748 -#, fuzzy, c-format -#| msgid "COPY delimiter must not appear in the NULL specification" -msgid "COPY delimiter must not appear in the DEFAULT specification" -msgstr "el delimitador de COPY no debe aparecer en la especificación NULL" - -#: commands/copy.c:755 -#, fuzzy, c-format -#| msgid "CSV quote character must not appear in the NULL specification" -msgid "CSV quote character must not appear in the DEFAULT specification" -msgstr "el carácter de «quote» de CSV no debe aparecer en la especificación NULL" - -#: commands/copy.c:763 +#: commands/copy.c:877 #, c-format msgid "NULL specification and DEFAULT specification cannot be the same" -msgstr "" +msgstr "las especificaciones NULL y DEFAULT no pueden ser la misma" -#: commands/copy.c:825 +#: commands/copy.c:939 #, c-format msgid "column \"%s\" is a generated column" msgstr "la columna «%s» es una columna generada" -#: commands/copy.c:827 +#: commands/copy.c:941 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Las columnas generadas no pueden usarse en COPY." -#: commands/copy.c:842 commands/indexcmds.c:1894 commands/statscmds.c:242 -#: commands/tablecmds.c:2405 commands/tablecmds.c:3127 -#: commands/tablecmds.c:3626 parser/parse_relation.c:3688 -#: parser/parse_relation.c:3698 parser/parse_relation.c:3716 -#: parser/parse_relation.c:3723 parser/parse_relation.c:3737 -#: utils/adt/tsvector_op.c:2855 +#: 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 "no existe la columna «%s»" -#: commands/copy.c:849 commands/tablecmds.c:2431 commands/trigger.c:958 -#: parser/parse_target.c:1070 parser/parse_target.c:1081 +#: 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 "la columna «%s» fue especificada más de una vez" -#: commands/copyfrom.c:122 +#: commands/copyfrom.c:118 #, c-format msgid "COPY %s" -msgstr "" +msgstr "COPY %s" -#: commands/copyfrom.c:130 +#: commands/copyfrom.c:126 #, c-format msgid "COPY %s, line %llu, column %s" -msgstr "" +msgstr "COPY %s, línea %llu, columna %s" -#: commands/copyfrom.c:135 commands/copyfrom.c:181 +#: commands/copyfrom.c:131 commands/copyfrom.c:177 #, c-format msgid "COPY %s, line %llu" -msgstr "" +msgstr "COPY %s, línea %llu" -#: commands/copyfrom.c:147 +#: commands/copyfrom.c:143 #, c-format msgid "COPY %s, line %llu, column %s: \"%s\"" -msgstr "" +msgstr "COPY %s, línea %llu, columna %s: «%s»" -#: commands/copyfrom.c:157 +#: commands/copyfrom.c:153 #, c-format msgid "COPY %s, line %llu, column %s: null input" -msgstr "" +msgstr "COPY %s, línea %llu, columna %s: entrada nula" -#: commands/copyfrom.c:174 +#: commands/copyfrom.c:170 #, c-format msgid "COPY %s, line %llu: \"%s\"" -msgstr "" +msgstr "COPY %s, línea %llu: «%s»" #: commands/copyfrom.c:673 #, c-format @@ -7012,7 +7268,7 @@ msgstr "no se puede copiar hacia la vista «%s»" #: commands/copyfrom.c:675 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." -msgstr "Para posibilitar «copy» a una vista, provea un disparador INSTEAD OF INSERT." +msgstr "Para posibilitar «copy» a una vista, provea un “trigger” INSTEAD OF INSERT." #: commands/copyfrom.c:679 #, c-format @@ -7044,32 +7300,41 @@ msgstr "no se puede ejecutar COPY FREEZE debido a actividad anterior en la trans msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "no se puede ejecutar COPY FREEZE porque la tabla no fue creada ni truncada en la subtransacción en curso" -#: commands/copyfrom.c:1411 +#: commands/copyfrom.c:1313 +#, c-format +msgid "%llu row was skipped due to data type incompatibility" +msgid_plural "%llu rows were skipped due to data type incompatibility" +msgstr[0] "%llu fila fue ignorada por incompatibilidad de tipo de dato" +msgstr[1] "%llu filas fueron ignoradas por incompatibilidad de tipo de dato" + +#. 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_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "la columna FORCE_NOT_NULL «%s» no es referenciada en COPY" +msgid "%s column \"%s\" not referenced by COPY" +msgstr "la columna %s «%s» no es referenciada en COPY" -#: commands/copyfrom.c:1434 +#: commands/copyfrom.c:1544 utils/mb/mbutils.c:385 #, c-format -msgid "FORCE_NULL column \"%s\" not referenced by COPY" -msgstr "la columna FORCE_NULL «%s» no es referenciada en COPY" +msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" +msgstr "no existe el procedimiento por omisión de conversión desde la codificación «%s» a «%s»" -#: commands/copyfrom.c:1672 +#: 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 FROM indica al proceso servidor de PostgreSQL leer un archivo. Puede desear usar una facilidad del lado del cliente como \\copy de psql." -#: commands/copyfrom.c:1685 commands/copyto.c:708 +#: commands/copyfrom.c:1755 commands/copyto.c:706 #, c-format msgid "\"%s\" is a directory" msgstr "«%s» es un directorio" -#: commands/copyfrom.c:1753 commands/copyto.c:306 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 "no se pudo cerrar la tubería a la orden externa: %m" -#: commands/copyfrom.c:1768 commands/copyto.c:311 +#: commands/copyfrom.c:1838 commands/copyto.c:304 #, c-format msgid "program \"%s\" failed" msgstr "el programa «%s» falló" @@ -7110,26 +7375,25 @@ msgid "could not read from COPY file: %m" msgstr "no se pudo leer desde archivo COPY: %m" #: commands/copyfromparse.c:278 commands/copyfromparse.c:303 -#: tcop/postgres.c:377 +#: 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 "se encontró fin de archivo inesperado en una conexión con una transacción abierta" -#: commands/copyfromparse.c:294 +#: commands/copyfromparse.c:294 replication/walsender.c:772 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "se recibió un mensaje de tipo 0x%02X inesperado durante COPY desde la entrada estándar" -#: commands/copyfromparse.c:317 +#: commands/copyfromparse.c:317 replication/walsender.c:803 #, c-format msgid "COPY from stdin failed: %s" msgstr "falló COPY desde la entrada estándar: %s" #: commands/copyfromparse.c:785 -#, fuzzy, c-format -#| msgid "wrong number of columns: %d, expected %d" +#, c-format msgid "wrong number of fields in header line: got %d, expected %d" -msgstr "número de columnas erróneo: %d, se esperaban %d" +msgstr "número de campos en línea de cabecera erróneo: %d, se esperaban %d" #: commands/copyfromparse.c:801 #, c-format @@ -7141,8 +7405,8 @@ msgstr "discordancia de nombre de columna en campo %d de la línea de encabezado msgid "column name mismatch in header line field %d: got \"%s\", expected \"%s\"" msgstr "discordancia en nombre de columna en campo %d de la línea de encabezado: se obtuvo «%s», se esperaba «%s»" -#: commands/copyfromparse.c:892 commands/copyfromparse.c:1514 -#: commands/copyfromparse.c:1770 +#: commands/copyfromparse.c:892 commands/copyfromparse.c:1554 +#: commands/copyfromparse.c:1810 #, c-format msgid "extra data after last expected column" msgstr "datos extra después de la última columna esperada" @@ -7152,1126 +7416,1177 @@ msgstr "datos extra después de la última columna esperada" msgid "missing data for column \"%s\"" msgstr "faltan datos en la columna «%s»" -#: commands/copyfromparse.c:999 +#: commands/copyfromparse.c:990 +#, c-format +msgid "skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"" +msgstr "omitiendo fila debido a incompatibilidad de tipo en la línea %llu para la columna «%s»: «%s»" + +#: commands/copyfromparse.c:998 +#, c-format +msgid "skipping row due to data type incompatibility at line %llu for column \"%s\": null input" +msgstr "omitiendo fila debido a incompatibilidad de tipo en la línea %llu para la columna «%s»: entrada nula" + +#: commands/copyfromparse.c:1044 #, c-format msgid "received copy data after EOF marker" msgstr "se recibieron datos de copy después del marcador EOF" -#: commands/copyfromparse.c:1006 +#: commands/copyfromparse.c:1051 #, c-format msgid "row field count is %d, expected %d" msgstr "la cantidad de registros es %d, pero se esperaban %d" -#: commands/copyfromparse.c:1296 commands/copyfromparse.c:1313 +#: commands/copyfromparse.c:1336 commands/copyfromparse.c:1353 #, c-format msgid "literal carriage return found in data" msgstr "se encontró un retorno de carro literal en los datos" -#: commands/copyfromparse.c:1297 commands/copyfromparse.c:1314 +#: commands/copyfromparse.c:1337 commands/copyfromparse.c:1354 #, c-format msgid "unquoted carriage return found in data" msgstr "se encontró un retorno de carro fuera de comillas en los datos" -#: commands/copyfromparse.c:1299 commands/copyfromparse.c:1316 +#: commands/copyfromparse.c:1339 commands/copyfromparse.c:1356 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Use «\\r» para representar el retorno de carro." -#: commands/copyfromparse.c:1300 commands/copyfromparse.c:1317 +#: commands/copyfromparse.c:1340 commands/copyfromparse.c:1357 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Use un campo CSV entre comillas para representar el retorno de carro." -#: commands/copyfromparse.c:1329 +#: commands/copyfromparse.c:1369 #, c-format msgid "literal newline found in data" msgstr "se encontró un salto de línea literal en los datos" -#: commands/copyfromparse.c:1330 +#: commands/copyfromparse.c:1370 #, c-format msgid "unquoted newline found in data" msgstr "se encontró un salto de línea fuera de comillas en los datos" -#: commands/copyfromparse.c:1332 +#: commands/copyfromparse.c:1372 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Use «\\n» para representar un salto de línea." -#: commands/copyfromparse.c:1333 +#: commands/copyfromparse.c:1373 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Use un campo CSV entre comillas para representar un salto de línea." -#: commands/copyfromparse.c:1379 commands/copyfromparse.c:1415 +#: commands/copyfromparse.c:1419 commands/copyfromparse.c:1455 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "el marcador fin-de-copy no coincide con el estilo previo de salto de línea" -#: commands/copyfromparse.c:1388 commands/copyfromparse.c:1404 +#: commands/copyfromparse.c:1428 commands/copyfromparse.c:1444 #, c-format msgid "end-of-copy marker corrupt" msgstr "marcador fin-de-copy corrupto" -#: commands/copyfromparse.c:1706 commands/copyfromparse.c:1921 -#, fuzzy, c-format -#| msgid "unexpected EOF in COPY data" -msgid "unexpected DEFAULT in COPY data" -msgstr "EOF inesperado en datos de COPY" +#: commands/copyfromparse.c:1746 commands/copyfromparse.c:1961 +#, c-format +msgid "unexpected default marker in COPY data" +msgstr "marcador “default” inesperado en datos de COPY" -#: commands/copyfromparse.c:1707 commands/copyfromparse.c:1922 -#, fuzzy, c-format -#| msgid "column \"%s\" can only be updated to DEFAULT" -msgid "Column \"%s\" has no DEFAULT value." -msgstr "la columna «%s» sólo puede actualizarse a DEFAULT" +#: commands/copyfromparse.c:1747 commands/copyfromparse.c:1962 +#, c-format +msgid "Column \"%s\" has no default value." +msgstr "La columna «%s» no tiene valor por omisión." -#: commands/copyfromparse.c:1854 +#: commands/copyfromparse.c:1894 #, c-format msgid "unterminated CSV quoted field" msgstr "un valor entre comillas está inconcluso" -#: commands/copyfromparse.c:1956 commands/copyfromparse.c:1975 +#: commands/copyfromparse.c:1996 commands/copyfromparse.c:2015 #, c-format msgid "unexpected EOF in COPY data" msgstr "EOF inesperado en datos de COPY" -#: commands/copyfromparse.c:1965 +#: commands/copyfromparse.c:2005 #, c-format msgid "invalid field size" msgstr "el tamaño de campo no es válido" -#: commands/copyfromparse.c:1988 +#: commands/copyfromparse.c:2028 #, c-format msgid "incorrect binary data format" msgstr "el formato de datos binarios es incorrecto" -#: commands/copyto.c:236 +#: commands/copyto.c:229 #, c-format msgid "could not write to COPY program: %m" msgstr "no se pudo escribir al programa COPY: %m" -#: commands/copyto.c:241 +#: commands/copyto.c:234 #, c-format msgid "could not write to COPY file: %m" msgstr "no se pudo escribir archivo COPY: %m" -#: commands/copyto.c:386 +#: commands/copyto.c:379 #, c-format msgid "cannot copy from view \"%s\"" msgstr "no se puede copiar desde la vista «%s»" -#: commands/copyto.c:388 commands/copyto.c:394 commands/copyto.c:400 -#: commands/copyto.c:411 +#: commands/copyto.c:381 commands/copyto.c:387 commands/copyto.c:393 +#: commands/copyto.c:404 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Intente la forma COPY (SELECT ...) TO." -#: commands/copyto.c:392 +#: commands/copyto.c:385 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "no se puede copiar desde la vista materializada «%s»" -#: commands/copyto.c:398 +#: commands/copyto.c:391 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "no se puede copiar desde la tabla foránea «%s»" -#: commands/copyto.c:404 +#: commands/copyto.c:397 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "no se puede copiar desde la secuencia «%s»" -#: commands/copyto.c:409 +#: commands/copyto.c:402 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "no se puede hacer copy de la tabla particionada «%s»" -#: commands/copyto.c:415 +#: commands/copyto.c:408 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "no se puede copiar desde la relación «%s» porque no es una tabla" -#: commands/copyto.c:467 +#: commands/copyto.c:460 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "las reglas DO INSTEAD NOTHING no están soportadas para COPY" -#: commands/copyto.c:481 +#: commands/copyto.c:474 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "las reglas DO INSTEAD condicionales no están soportadas para COPY" -#: commands/copyto.c:485 +#: commands/copyto.c:478 #, c-format -msgid "DO ALSO rules are not supported for the COPY" +msgid "DO ALSO rules are not supported for COPY" msgstr "las reglas DO ALSO no están soportadas para COPY" -#: commands/copyto.c:490 +#: commands/copyto.c:483 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "las reglas DO INSTEAD de múltiples sentencias no están soportadas para COPY" -#: commands/copyto.c:500 +#: commands/copyto.c:493 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) no está soportado" -#: commands/copyto.c:517 +#: commands/copyto.c:499 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "la consulta COPY no debe ser una orden de utilidad" + +#: commands/copyto.c:515 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "la consulta COPY debe tener una cláusula RETURNING" -#: commands/copyto.c:546 +#: commands/copyto.c:544 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "la relación referenciada por la sentencia COPY ha cambiado" -#: commands/copyto.c:605 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "la columna FORCE_QUOTE «%s» no es referenciada en COPY" - -#: commands/copyto.c:673 +#: commands/copyto.c:671 #, c-format msgid "relative path not allowed for COPY to file" msgstr "no se permiten rutas relativas para COPY hacia un archivo" -#: commands/copyto.c:692 +#: commands/copyto.c:690 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "no se pudo abrir el archivo «%s» para escritura: %m" -#: commands/copyto.c:695 +#: 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 indica al proceso servidor PostgreSQL escribir a un archivo. Puede desear usar facilidades del lado del cliente, como \\copy de psql." -#: commands/createas.c:215 commands/createas.c:523 +#: commands/createas.c:210 commands/createas.c:516 #, c-format msgid "too many column names were specified" msgstr "se especificaron demasiados nombres de columna" -#: commands/createas.c:546 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "las políticas no están implementadas para esta orden" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:829 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION ya no está soportado" -#: commands/dbcommands.c:823 +#: commands/dbcommands.c:830 #, c-format msgid "Consider using tablespaces instead." msgstr "Considere usar tablespaces." -#: commands/dbcommands.c:848 +#: commands/dbcommands.c:855 #, c-format msgid "OIDs less than %u are reserved for system objects" msgstr "los OIDs menores que %u están reservados para objetos del sistema" -#: commands/dbcommands.c:879 utils/adt/ascii.c:146 +#: commands/dbcommands.c:886 utils/adt/ascii.c:146 #, c-format msgid "%d is not a valid encoding code" msgstr "%d no es un código válido de codificación" -#: commands/dbcommands.c:890 utils/adt/ascii.c:128 +#: commands/dbcommands.c:897 utils/adt/ascii.c:128 #, c-format msgid "%s is not a valid encoding name" msgstr "%s no es un nombre válido de codificación" -#: commands/dbcommands.c:919 +#: commands/dbcommands.c:931 #, c-format msgid "unrecognized locale provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: commands/dbcommands.c:932 commands/dbcommands.c:2318 commands/user.c:300 -#: commands/user.c:740 +#: commands/dbcommands.c:944 commands/dbcommands.c:2414 commands/user.c:299 +#: commands/user.c:739 #, c-format msgid "invalid connection limit: %d" msgstr "límite de conexión no válido: %d" -#: commands/dbcommands.c:953 +#: commands/dbcommands.c:965 #, c-format msgid "permission denied to create database" msgstr "se ha denegado el permiso para crear la base de datos" -#: commands/dbcommands.c:977 +#: commands/dbcommands.c:989 #, c-format msgid "template database \"%s\" does not exist" msgstr "no existe la base de datos patrón «%s»" -#: commands/dbcommands.c:989 +#: commands/dbcommands.c:999 #, c-format -msgid "permission denied to copy database \"%s\"" +msgid "cannot use invalid database \"%s\" as template" +msgstr "no se puede usar la base de datos «%s» no válida como plantilla" + +#: commands/dbcommands.c:1000 commands/dbcommands.c:2444 +#: utils/init/postinit.c:1113 +#, c-format +msgid "Use DROP DATABASE to drop invalid databases." +msgstr "Use DROP DATABASE para eliminar una base de datos no válida." + +#: commands/dbcommands.c:1011 +#, c-format +msgid "permission denied to copy database \"%s\"" msgstr "se ha denegado el permiso para copiar la base de datos «%s»" -#: commands/dbcommands.c:1006 -#, fuzzy, c-format -#| msgid "invalid parameter list format: \"%s\"" +#: commands/dbcommands.c:1028 +#, c-format msgid "invalid create database strategy \"%s\"" -msgstr "el formato de la lista de parámetros no es válido: «%s»" +msgstr "estrategia de creación de base de dato no válida: «%s»" -#: commands/dbcommands.c:1007 -#, fuzzy, c-format -#| msgid "Valid values are \"local\" and \"cascaded\"." -msgid "Valid strategies are \"wal_log\", and \"file_copy\"." -msgstr "Los valores aceptables son «local» y «cascaded»." +#: commands/dbcommands.c:1029 +#, c-format +msgid "Valid strategies are \"wal_log\" and \"file_copy\"." +msgstr "Las estrategias válidas son «wal_log» y «file_copy»." -#: commands/dbcommands.c:1028 +#: commands/dbcommands.c:1050 #, c-format msgid "invalid server encoding %d" msgstr "la codificación de servidor %d no es válida" -#: commands/dbcommands.c:1034 commands/dbcommands.c:1039 +#: commands/dbcommands.c:1056 #, c-format -msgid "invalid locale name: \"%s\"" -msgstr "nombre de configuración regional no válido: «%s»" +msgid "invalid LC_COLLATE locale name: \"%s\"" +msgstr "nombre de configuración regional LC_COLLATE no válido: «%s»" -#: commands/dbcommands.c:1049 -#, fuzzy, c-format -#| msgid "encoding \"%s\" not supported by ICU" -msgid "encoding \"%s\" is not supported with ICU provider" -msgstr "la codificación «%s» no estæ soportada por ICU" +#: commands/dbcommands.c:1057 commands/dbcommands.c:1063 +#, c-format +msgid "If the locale name is specific to ICU, use ICU_LOCALE." +msgstr "Si el nombre de configuración regional es específico a ICU, use ICU_LOCALE." + +#: commands/dbcommands.c:1062 +#, c-format +msgid "invalid LC_CTYPE locale name: \"%s\"" +msgstr "nombre de configuración regional LC_CTYPE no válido: «%s»" -#: commands/dbcommands.c:1059 +#: commands/dbcommands.c:1074 #, c-format -msgid "ICU locale must be specified" -msgstr "el locale ICU debe ser especificado" +msgid "BUILTIN_LOCALE cannot be specified unless locale provider is builtin" +msgstr "no se puede especificar BUILTIN_LOCALE a menos que el proveedor de configuración regional sea builtin" -#: commands/dbcommands.c:1088 +#: commands/dbcommands.c:1082 #, c-format msgid "ICU locale cannot be specified unless locale provider is ICU" msgstr "no se puede especificar una configuración regional ICU a menos que el proveedor de configuración regional sea ICU" -#: commands/dbcommands.c:1111 +#: commands/dbcommands.c:1100 +#, c-format +msgid "LOCALE or BUILTIN_LOCALE must be specified" +msgstr "debe especificarse LOCALE o BUILTIN_LOCALE" + +#: commands/dbcommands.c:1109 +#, c-format +msgid "encoding \"%s\" is not supported with ICU provider" +msgstr "la codificación «%s» no está soportada por ICU" + +#: commands/dbcommands.c:1119 +#, c-format +msgid "LOCALE or ICU_LOCALE must be specified" +msgstr "debe especificarse LOCALE o ICU_LOCALE" + +#: commands/dbcommands.c:1163 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "la nueva codificación (%s) es incompatible con la codificación de la base de datos patrón (%s)" -#: commands/dbcommands.c:1114 +#: commands/dbcommands.c:1166 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "Use la misma codificación que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:1119 +#: commands/dbcommands.c:1171 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "la nueva «collation» (%s) es incompatible con la «collation» de la base de datos patrón (%s)" -#: commands/dbcommands.c:1121 +#: commands/dbcommands.c:1173 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "Use la misma «collation» que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:1126 +#: commands/dbcommands.c:1178 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "el nuevo LC_CTYPE (%s) es incompatible con el LC_CTYPE de la base de datos patrón (%s)" -#: commands/dbcommands.c:1128 +#: commands/dbcommands.c:1180 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "Use el mismo LC_CTYPE que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:1133 -#, fuzzy, c-format -#| msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" +#: commands/dbcommands.c:1185 +#, c-format msgid "new locale provider (%s) does not match locale provider of the template database (%s)" -msgstr "la nueva codificación (%s) es incompatible con la codificación de la base de datos patrón (%s)" +msgstr "el nuevo proveedor de configuración regional (%s) no coincide con el proveedor de la base de datos patrón (%s)" -#: commands/dbcommands.c:1135 -#, fuzzy, c-format -#| msgid "Use the same encoding as in the template database, or use template0 as template." +#: commands/dbcommands.c:1187 +#, c-format msgid "Use the same locale provider as in the template database, or use template0 as template." -msgstr "Use la misma codificación que en la base de datos patrón, o bien use template0 como patrón." +msgstr "Use el mismo proveedor de «locale» que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:1147 -#, fuzzy, c-format -#| msgid "new collation (%s) is incompatible with the collation of the template database (%s)" +#: commands/dbcommands.c:1199 +#, c-format msgid "new ICU locale (%s) is incompatible with the ICU locale of the template database (%s)" -msgstr "la nueva «collation» (%s) es incompatible con la «collation» de la base de datos patrón (%s)" +msgstr "la nueva configuración regional ICU (%s) es incompatible con la configuración regional ICU de la base de datos patrón (%s)" -#: commands/dbcommands.c:1149 -#, fuzzy, c-format -#| msgid "Use the same collation as in the template database, or use template0 as template." +#: commands/dbcommands.c:1201 +#, c-format msgid "Use the same ICU locale as in the template database, or use template0 as template." -msgstr "Use la misma «collation» que en la base de datos patrón, o bien use template0 como patrón." +msgstr "Use la misma configuración regional («locale») que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:1160 -#, fuzzy, c-format -#| msgid "new collation (%s) is incompatible with the collation of the template database (%s)" +#: commands/dbcommands.c:1212 +#, c-format msgid "new ICU collation rules (%s) are incompatible with the ICU collation rules of the template database (%s)" -msgstr "la nueva «collation» (%s) es incompatible con la «collation» de la base de datos patrón (%s)" +msgstr "las nuevas reglas de «collation» ICU (%s) son incompatibles con las reglas de «collation» ICU de la base de datos patrón (%s)" -#: commands/dbcommands.c:1162 -#, fuzzy, c-format -#| msgid "Use the same collation as in the template database, or use template0 as template." +#: commands/dbcommands.c:1214 +#, c-format msgid "Use the same ICU collation rules as in the template database, or use template0 as template." -msgstr "Use la misma «collation» que en la base de datos patrón, o bien use template0 como patrón." +msgstr "Use las mismas reglas de «collation» ICU que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:1185 +#: commands/dbcommands.c:1243 #, c-format msgid "template database \"%s\" has a collation version, but no actual collation version could be determined" -msgstr "" +msgstr "la base de datos patrón «%s» tiene una versión de configuración regional, pero no se pudo determinar una versión real" -#: commands/dbcommands.c:1190 -#, fuzzy, c-format -#| msgid "template database \"%s\" does not exist" +#: commands/dbcommands.c:1248 +#, c-format msgid "template database \"%s\" has a collation version mismatch" -msgstr "no existe la base de datos patrón «%s»" +msgstr "discordancia en la versión de «collation» de la base de datos patrón «%s»" -#: commands/dbcommands.c:1192 -#, fuzzy, c-format -#| msgid "The collation in the database was created using version %s, but the operating system provides version %s." +#: commands/dbcommands.c:1250 +#, c-format msgid "The template database was created using collation version %s, but the operating system provides version %s." -msgstr "El ordenamiento en la base de datos fue creado usando la versión %s, pero el sistema operativo provee la versión %s." +msgstr "La base de datos patrón fue creada usando la versión %s, pero el sistema operativo provee la versión %s." -#: commands/dbcommands.c:1195 -#, fuzzy, 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." +#: commands/dbcommands.c:1253 +#, c-format 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 "Reconstruya todos los objetos afectados por este ordenamiento y ejecute ALTER COLLATION %s REFRESH VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." +msgstr "Reconstruya todos los objetos de la base de datos patrón afectados por este ordenamiento y ejecute ALTER DATABASE %s REFRESH COLLATION VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." -#: commands/dbcommands.c:1231 commands/dbcommands.c:1947 +#: commands/dbcommands.c:1298 commands/dbcommands.c:2041 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "no puede usarse pg_global como tablespace por omisión" -#: commands/dbcommands.c:1257 +#: commands/dbcommands.c:1324 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "no se puede asignar el nuevo tablespace por omisión «%s»" -#: commands/dbcommands.c:1259 +#: commands/dbcommands.c:1326 #, c-format msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "Hay un conflicto puesto que la base de datos «%s» ya tiene algunas tablas en este tablespace." -#: commands/dbcommands.c:1289 commands/dbcommands.c:1820 +#: commands/dbcommands.c:1356 commands/dbcommands.c:1912 #, c-format msgid "database \"%s\" already exists" msgstr "la base de datos «%s» ya existe" -#: commands/dbcommands.c:1303 +#: commands/dbcommands.c:1370 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "la base de datos de origen «%s» está siendo utilizada por otros usuarios" -#: commands/dbcommands.c:1325 -#, fuzzy, c-format -#| msgid "database \"%s\" already exists" +#: commands/dbcommands.c:1392 +#, c-format msgid "database OID %u is already in use by database \"%s\"" -msgstr "la base de datos «%s» ya existe" +msgstr "el OID de base de datos %u ya está en uso por la base de datos «%s»" -#: commands/dbcommands.c:1331 +#: commands/dbcommands.c:1398 #, c-format msgid "data directory with the specified OID %u already exists" msgstr "el directorio de datos con el OID %u especificado ya existe" -#: commands/dbcommands.c:1503 commands/dbcommands.c:1518 +#: 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 "la codificación «%s» no coincide con la configuración regional «%s»" -#: commands/dbcommands.c:1506 +#: commands/dbcommands.c:1574 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "El parámetro LC_CTYPE escogido requiere la codificación «%s»." -#: commands/dbcommands.c:1521 +#: commands/dbcommands.c:1589 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "El parámetro LC_COLLATE escogido requiere la codificación «%s»." -#: commands/dbcommands.c:1601 +#: commands/dbcommands.c:1672 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "no existe la base de datos «%s», omitiendo" -#: commands/dbcommands.c:1625 +#: commands/dbcommands.c:1696 #, c-format msgid "cannot drop a template database" msgstr "no se puede borrar una base de datos patrón" -#: commands/dbcommands.c:1631 +#: commands/dbcommands.c:1702 #, c-format msgid "cannot drop the currently open database" msgstr "no se puede eliminar la base de datos activa" -#: commands/dbcommands.c:1644 +#: commands/dbcommands.c:1715 #, c-format msgid "database \"%s\" is used by an active logical replication slot" -msgstr "la base de datos «%s» está en uso por un slot de replicación activo" +msgstr "la base de datos «%s» está en uso por un slot de replicación lógica activo" -#: commands/dbcommands.c:1646 +#: commands/dbcommands.c:1717 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "Hay %d slot activo." msgstr[1] "Hay %d slots activos." -#: commands/dbcommands.c:1660 +#: commands/dbcommands.c:1731 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "la base de datos «%s» está siendo utilizada por suscripciones de replicación lógica" -#: commands/dbcommands.c:1662 +#: commands/dbcommands.c:1733 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "Hay %d suscripción." msgstr[1] "Hay %d suscripciones." -#: commands/dbcommands.c:1683 commands/dbcommands.c:1842 -#: commands/dbcommands.c:1969 +#: commands/dbcommands.c:1754 commands/dbcommands.c:1934 +#: commands/dbcommands.c:2063 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "la base de datos «%s» está siendo utilizada por otros usuarios" -#: commands/dbcommands.c:1802 +#: commands/dbcommands.c:1894 #, c-format msgid "permission denied to rename database" msgstr "se ha denegado el permiso para cambiar el nombre a la base de datos" -#: commands/dbcommands.c:1831 +#: commands/dbcommands.c:1923 #, c-format msgid "current database cannot be renamed" msgstr "no se puede cambiar el nombre de la base de datos activa" -#: commands/dbcommands.c:1925 +#: commands/dbcommands.c:2019 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "no se puede cambiar el tablespace de la base de datos activa" -#: commands/dbcommands.c:2031 +#: commands/dbcommands.c:2125 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "algunas relaciones de la base de datos «%s» ya están en el tablespace «%s»" -#: commands/dbcommands.c:2033 +#: commands/dbcommands.c:2127 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "Debe moverlas de vuelta al tablespace por omisión de la base de datos antes de ejecutar esta orden." -#: commands/dbcommands.c:2160 commands/dbcommands.c:2868 -#: commands/dbcommands.c:3132 commands/dbcommands.c:3245 +#: 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 "algunos archivos inútiles pueden haber quedado en el directorio \"%s\"" -#: commands/dbcommands.c:2221 +#: commands/dbcommands.c:2317 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "opción de DROP DATABASE «%s» no reconocida" -#: commands/dbcommands.c:2299 +#: commands/dbcommands.c:2395 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "la opción «%s» no puede ser especificada con otras opciones" -#: commands/dbcommands.c:2355 +#: commands/dbcommands.c:2443 +#, c-format +msgid "cannot alter invalid database \"%s\"" +msgstr "no se puede alterar base de datos no válida «%s»" + +#: commands/dbcommands.c:2460 #, c-format msgid "cannot disallow connections for current database" msgstr "no se pueden prohibir las conexiones para la base de datos actual" -#: commands/dbcommands.c:2570 +#: commands/dbcommands.c:2690 #, c-format msgid "permission denied to change owner of database" msgstr "se ha denegado el permiso para cambiar el dueño de la base de datos" -#: commands/dbcommands.c:2974 +#: commands/dbcommands.c:3105 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "Hay otras %d sesiones y %d transacciones preparadas usando la base de datos." -#: commands/dbcommands.c:2977 +#: 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] "Hay %d otra sesión usando la base de datos." msgstr[1] "Hay otras %d sesiones usando la base de datos." -#: commands/dbcommands.c:2982 storage/ipc/procarray.c:3798 +#: 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] "Hay %d otra transacción preparada usando la base de datos." msgstr[1] "Hay otras %d transacciones preparadas usando la base de datos." -#: commands/dbcommands.c:3088 -#, fuzzy, c-format -#| msgid "removing WAL directory \"%s\"" +#: commands/dbcommands.c:3255 +#, c-format msgid "missing directory \"%s\"" -msgstr "eliminando el directorio de WAL «%s»" +msgstr "directorio «%s» faltante" -#: commands/dbcommands.c:3146 commands/tablespace.c:190 -#: commands/tablespace.c:639 +#: commands/dbcommands.c:3313 commands/tablespace.c:184 +#: commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "no se pudo hacer stat al directorio «%s»: %m" -#: commands/define.c:54 commands/define.c:258 commands/define.c:290 -#: commands/define.c:318 commands/define.c:364 +#: commands/define.c:53 commands/define.c:257 commands/define.c:289 +#: commands/define.c:317 commands/define.c:363 #, c-format msgid "%s requires a parameter" msgstr "%s requiere un parámetro" -#: commands/define.c:87 commands/define.c:98 commands/define.c:192 -#: commands/define.c:210 commands/define.c:225 commands/define.c:243 +#: commands/define.c:86 commands/define.c:97 commands/define.c:191 +#: commands/define.c:209 commands/define.c:224 commands/define.c:242 #, c-format msgid "%s requires a numeric value" msgstr "%s requiere un valor numérico" -#: commands/define.c:154 +#: commands/define.c:153 #, c-format msgid "%s requires a Boolean value" msgstr "«%s» requiere un valor lógico (booleano)" -#: commands/define.c:168 commands/define.c:177 commands/define.c:327 +#: commands/define.c:167 commands/define.c:176 commands/define.c:326 #, c-format msgid "%s requires an integer value" msgstr "%s requiere valor entero" -#: commands/define.c:272 +#: commands/define.c:271 #, c-format msgid "argument of %s must be a name" msgstr "el argumento de %s debe ser un nombre" -#: commands/define.c:302 +#: commands/define.c:301 #, c-format msgid "argument of %s must be a type name" msgstr "el argumento de %s debe ser un nombre de tipo" -#: commands/define.c:348 +#: commands/define.c:347 #, c-format msgid "invalid argument for %s: \"%s\"" msgstr "argumento no válido para %s: «%s»" -#: commands/dropcmds.c:101 commands/functioncmds.c:1387 -#: utils/adt/ruleutils.c:2897 +#: commands/dropcmds.c:96 commands/functioncmds.c:1382 +#: utils/adt/ruleutils.c:2910 #, c-format msgid "\"%s\" is an aggregate function" msgstr "«%s» es una función de agregación" -#: commands/dropcmds.c:103 +#: commands/dropcmds.c:98 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Use DROP AGGREGATE para eliminar funciones de agregación." -#: commands/dropcmds.c:158 commands/sequence.c:474 commands/tablecmds.c:3710 -#: commands/tablecmds.c:3868 commands/tablecmds.c:3920 -#: commands/tablecmds.c:16468 tcop/utility.c:1335 +#: 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 "no existe la relación «%s», omitiendo" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1285 +#: commands/dropcmds.c:183 commands/dropcmds.c:282 commands/tablecmds.c:1409 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "el esquema «%s» no existe, omitiendo" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:277 +#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:286 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "el tipo «%s» no existe, omitiendo" -#: commands/dropcmds.c:257 +#: commands/dropcmds.c:252 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "no existe el método de acceso «%s», omitiendo" -#: commands/dropcmds.c:275 +#: commands/dropcmds.c:270 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "no existe el ordenamiento (collation) «%s», omitiendo" -#: commands/dropcmds.c:282 +#: commands/dropcmds.c:277 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "no existe la conversión «%s», omitiendo" -#: commands/dropcmds.c:293 commands/statscmds.c:654 +#: commands/dropcmds.c:288 commands/statscmds.c:664 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s», omitiendo" -#: commands/dropcmds.c:300 +#: commands/dropcmds.c:295 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "el analizador de búsqueda en texto «%s» no existe, omitiendo" -#: commands/dropcmds.c:307 +#: commands/dropcmds.c:302 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "el diccionario de búsqueda en texto «%s» no existe, omitiendo" -#: commands/dropcmds.c:314 +#: commands/dropcmds.c:309 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "la plantilla de búsqueda en texto «%s» no existe, omitiendo" -#: commands/dropcmds.c:321 +#: commands/dropcmds.c:316 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "no existe la configuración de búsqueda en texto «%s», omitiendo" -#: commands/dropcmds.c:326 +#: commands/dropcmds.c:321 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "no existe la extensión «%s», omitiendo" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "no existe la función %s(%s), omitiendo" -#: commands/dropcmds.c:349 +#: commands/dropcmds.c:344 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "el procedimiento %s(%s) no existe, omitiendo" -#: commands/dropcmds.c:362 +#: commands/dropcmds.c:357 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "no existe la rutina %s(%s), omitiendo" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:370 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "la función de agregación %s(%s) no existe, omitiendo" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:383 #, c-format msgid "operator %s does not exist, skipping" msgstr "el operador %s no existe, omitiendo" -#: commands/dropcmds.c:394 +#: commands/dropcmds.c:389 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "el lenguaje «%s» no existe, omitiendo" -#: commands/dropcmds.c:403 +#: commands/dropcmds.c:398 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "no existe la conversión del tipo %s al tipo %s, omitiendo" -#: commands/dropcmds.c:412 +#: commands/dropcmds.c:407 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "la transformación para el tipo %s lenguaje «%s» no existe, omitiendo" -#: commands/dropcmds.c:420 +#: commands/dropcmds.c:415 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" -msgstr "disparador «%s» para la relación «%s» no existe, omitiendo" +msgstr "“trigger” «%s» para la relación «%s» no existe, omitiendo" -#: commands/dropcmds.c:429 +#: commands/dropcmds.c:424 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr "la política «%s» para la relación «%s» no existe, omitiendo" -#: commands/dropcmds.c:436 +#: commands/dropcmds.c:431 #, c-format msgid "event trigger \"%s\" does not exist, skipping" -msgstr "el disparador por eventos «%s» no existe, omitiendo" +msgstr "el “trigger” por eventos «%s» no existe, omitiendo" -#: commands/dropcmds.c:442 +#: commands/dropcmds.c:437 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "la regla «%s» para la relación «%s» no existe, omitiendo" -#: commands/dropcmds.c:449 +#: commands/dropcmds.c:444 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "no existe el conector de datos externos «%s», omitiendo" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1360 +#: commands/dropcmds.c:448 commands/foreigncmds.c:1360 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "el servidor «%s» no existe, omitiendo" -#: commands/dropcmds.c:462 +#: commands/dropcmds.c:457 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "no existe la clase de operadores «%s» para el método de acceso «%s», omitiendo" -#: commands/dropcmds.c:474 +#: commands/dropcmds.c:469 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "no existe la familia de operadores «%s» para el método de acceso «%s», omitiendo" -#: commands/dropcmds.c:481 +#: commands/dropcmds.c:476 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "no existe la publicación «%s», omitiendo" -#: commands/event_trigger.c:125 +#: commands/event_trigger.c:137 #, c-format msgid "permission denied to create event trigger \"%s\"" -msgstr "se ha denegado el permiso para crear el disparador por eventos «%s»" +msgstr "se ha denegado el permiso para crear el “trigger” por eventos «%s»" -#: commands/event_trigger.c:127 +#: commands/event_trigger.c:139 #, c-format msgid "Must be superuser to create an event trigger." -msgstr "Debe ser superusuario para crear un disparador por eventos." +msgstr "Debe ser superusuario para crear un “trigger” por eventos." -#: commands/event_trigger.c:136 +#: commands/event_trigger.c:149 #, c-format msgid "unrecognized event name \"%s\"" msgstr "nommre de evento «%s» no reconocido" -#: commands/event_trigger.c:153 +#: commands/event_trigger.c:166 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "variable de filtro «%s» no reconocida" -#: commands/event_trigger.c:207 +#: commands/event_trigger.c:181 +#, c-format +msgid "tag filtering is not supported for login event triggers" +msgstr "el filtrado de «tags» no está soportado en “triggers” por evento de login" + +#: commands/event_trigger.c:224 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "el valor de filtro «%s» no es reconocido por la variable de filtro «%s»" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:213 commands/event_trigger.c:235 +#: commands/event_trigger.c:230 commands/event_trigger.c:252 #, c-format msgid "event triggers are not supported for %s" -msgstr "los disparadores por eventos no están soportados para %s" +msgstr "los “triggers” por evento no están soportados para %s" -#: commands/event_trigger.c:248 +#: commands/event_trigger.c:265 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "la variable de filtro «%s» fue especificada más de una vez" -#: commands/event_trigger.c:376 commands/event_trigger.c:420 -#: commands/event_trigger.c:514 +#: 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 "no existe el disparador por eventos «%s»" +msgstr "no existe el “trigger” por eventos «%s»" -#: commands/event_trigger.c:452 +#: commands/event_trigger.c:522 #, c-format msgid "event trigger with OID %u does not exist" -msgstr "no existe el disparador por eventos con OID %u" +msgstr "no existe el “trigger” por eventos con OID %u" -#: commands/event_trigger.c:482 +#: commands/event_trigger.c:552 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" -msgstr "se ha denegado el permiso para cambiar el dueño del disparador por eventos «%s»" +msgstr "se ha denegado el permiso para cambiar el dueño del “trigger” por eventos «%s»" -#: commands/event_trigger.c:484 +#: commands/event_trigger.c:554 #, c-format msgid "The owner of an event trigger must be a superuser." -msgstr "El dueño de un disparador por eventos debe ser un superusuario." +msgstr "El dueño de un “trigger” por eventos debe ser un superusuario." -#: commands/event_trigger.c:1304 +#: commands/event_trigger.c:1409 #, c-format msgid "%s can only be called in a sql_drop event trigger function" -msgstr "%s sólo puede invocarse en una función de un disparador en el evento sql_drop" +msgstr "%s sólo puede invocarse en una función de un “trigger” en el evento sql_drop" -#: commands/event_trigger.c:1397 commands/event_trigger.c:1418 +#: 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 sólo puede invocarse en una función de un disparador en el evento table_rewrite" +msgstr "%s sólo puede invocarse en una función de un “trigger” en el evento table_rewrite" -#: commands/event_trigger.c:1831 +#: commands/event_trigger.c:1936 #, c-format msgid "%s can only be called in an event trigger function" -msgstr "%s sólo puede invocarse en una función de un disparador por eventos" +msgstr "%s sólo puede invocarse en una función de un “trigger” por eventos" -#: commands/explain.c:220 +#: commands/explain.c:241 commands/explain.c:266 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "valor no reconocido para la opción de EXPLAIN «%s»: «%s»" -#: commands/explain.c:227 +#: commands/explain.c:273 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "opción de EXPLAIN «%s» no reconocida" -#: commands/explain.c:236 +#: commands/explain.c:282 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "la opción WAL de EXPLAIN requiere ANALYZE" -#: commands/explain.c:245 +#: commands/explain.c:291 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "la opción TIMING de EXPLAIN requiere ANALYZE" -#: commands/explain.c:251 -#, fuzzy, c-format -#| msgid "options -d/--dbname and -f/--file cannot be used together" +#: commands/explain.c:297 +#, c-format +msgid "EXPLAIN option SERIALIZE requires ANALYZE" +msgstr "la opción SERIALIZE de EXPLAIN requiere ANALYZE" + +#: commands/explain.c:303 +#, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" -msgstr "las opciones -d/--dbname y -f/--file no pueden usarse juntas" +msgstr "las opciones ANALYZE y GENERIC_PLAN de EXPLAIN no pueden usarse juntas" -#: commands/extension.c:177 commands/extension.c:3009 +#: commands/extension.c:178 commands/extension.c:3031 #, c-format msgid "extension \"%s\" does not exist" msgstr "no existe la extensión «%s»" -#: commands/extension.c:276 commands/extension.c:285 commands/extension.c:297 -#: commands/extension.c:307 +#: commands/extension.c:277 commands/extension.c:286 commands/extension.c:298 +#: commands/extension.c:308 #, c-format msgid "invalid extension name: \"%s\"" msgstr "nombre de extensión no válido: «%s»" -#: commands/extension.c:277 +#: commands/extension.c:278 #, c-format msgid "Extension names must not be empty." msgstr "Los nombres de extensión no deben ser vacíos." -#: commands/extension.c:286 +#: commands/extension.c:287 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Los nombres de extensión no deben contener «--»." -#: commands/extension.c:298 +#: commands/extension.c:299 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Los nombres de extensión no deben empezar ni terminar con «-»." -#: commands/extension.c:308 +#: commands/extension.c:309 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Los nombres de extensión no deben contener caracteres separadores de directorio." -#: commands/extension.c:323 commands/extension.c:332 commands/extension.c:341 -#: commands/extension.c:351 +#: commands/extension.c:324 commands/extension.c:333 commands/extension.c:342 +#: commands/extension.c:352 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "nombre de versión de extensión no válido: «%s»" -#: commands/extension.c:324 +#: commands/extension.c:325 #, c-format msgid "Version names must not be empty." msgstr "Los nombres de versión no deben ser vacíos." -#: commands/extension.c:333 +#: commands/extension.c:334 #, c-format msgid "Version names must not contain \"--\"." msgstr "Los nombres de versión no deben contener «--»." -#: commands/extension.c:342 +#: commands/extension.c:343 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "Los nombres de versión no deben empezar ni terminar con «-»." -#: commands/extension.c:352 +#: commands/extension.c:353 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Los nombres de versión no deben contener caracteres separadores de directorio." -#: commands/extension.c:506 -#, fuzzy, c-format -#| msgid "extension \"%s\" does not exist" +#: commands/extension.c:507 +#, c-format msgid "extension \"%s\" is not available" -msgstr "no existe la extensión «%s»" +msgstr "la extensión «%s» no está disponible" -#: commands/extension.c:507 -#, fuzzy, c-format -#| msgid "could not open extension control file \"%s\": %m" +#: commands/extension.c:508 +#, c-format msgid "Could not open extension control file \"%s\": %m." -msgstr "no se pudo abrir el archivo de control de extensión «%s»: %m" +msgstr "No se pudo abrir el archivo de control de extensión «%s»: %m." -#: commands/extension.c:509 +#: commands/extension.c:510 #, c-format msgid "The extension must first be installed on the system where PostgreSQL is running." msgstr "La extensión debe primero ser instalada en el sistema donde PostgreSQL está ejecutándose." -#: commands/extension.c:513 +#: commands/extension.c:514 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "no se pudo abrir el archivo de control de extensión «%s»: %m" -#: commands/extension.c:536 commands/extension.c:546 +#: commands/extension.c:537 commands/extension.c:547 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "el parámetro «%s» no se puede cambiar en un archivo control secundario de extensión" -#: commands/extension.c:568 commands/extension.c:576 commands/extension.c:584 -#: utils/misc/guc.c:3098 +#: commands/extension.c:569 commands/extension.c:577 commands/extension.c:585 +#: utils/misc/guc.c:3147 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "el parámetro «%s» requiere un valor lógico (booleano)" -#: commands/extension.c:593 +#: commands/extension.c:594 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "«%s» no es un nombre válido de codificación" -#: commands/extension.c:607 commands/extension.c:622 +#: commands/extension.c:608 commands/extension.c:623 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "el parámetro «%s» debe ser una lista de nombres de extensión" -#: commands/extension.c:629 +#: commands/extension.c:630 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "parámetro no reconocido «%s» en el archivo «%s»" -#: commands/extension.c:638 +#: commands/extension.c:639 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "el parámetro «schema» no puede ser especificado cuando «relocatable» es verdadero" -#: commands/extension.c:816 +#: commands/extension.c:817 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "las sentencias de control de transacción no están permitidos dentro de un guión de transacción" -#: commands/extension.c:896 +#: commands/extension.c:897 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "se ha denegado el permiso para crear la extensión «%s»" -#: commands/extension.c:899 +#: commands/extension.c:900 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "Debe tener privilegio CREATE en la base de datos actual para crear esta extensión." -#: commands/extension.c:900 +#: commands/extension.c:901 #, c-format msgid "Must be superuser to create this extension." msgstr "Debe ser superusuario para crear esta extensión." -#: commands/extension.c:904 +#: commands/extension.c:905 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "se ha denegado el permiso para actualizar la extensión «%s»" -#: commands/extension.c:907 +#: commands/extension.c:908 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "Debe tener privilegio CREATE en la base de datos actual para actualizar esta extensión." -#: commands/extension.c:908 +#: commands/extension.c:909 #, c-format msgid "Must be superuser to update this extension." msgstr "Debe ser superusuario para actualizar esta extensión." -#: commands/extension.c:1265 +#: commands/extension.c:1042 +#, c-format +msgid "invalid character in extension owner: must not contain any of \"%s\"" +msgstr "carácter no válido en dueño de extensión: no debe contener ninguno de «%s»" + +#: commands/extension.c:1066 commands/extension.c:1093 +#, c-format +msgid "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" +msgstr "carácter no válido en esquema de extensión «%s»: no debe contener ninguno de «%s»" + +#: commands/extension.c:1288 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "la extensión «%s» no tiene ruta de actualización desde la versión «%s» hasta la versión «%s»" -#: commands/extension.c:1473 commands/extension.c:3067 +#: commands/extension.c:1496 commands/extension.c:3089 #, c-format msgid "version to install must be specified" msgstr "la versión a instalar debe ser especificada" -#: commands/extension.c:1510 +#: commands/extension.c:1533 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "la extensión «%s» no tiene script de instalación ni ruta de actualización para la versión «%s»" -#: commands/extension.c:1544 +#: commands/extension.c:1567 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "la extensión «%s» debe ser instalada en el esquema «%s»" -#: commands/extension.c:1704 +#: commands/extension.c:1727 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "detectada una dependencia cíclica entre las extensiones «%s» y «%s»" -#: commands/extension.c:1709 +#: commands/extension.c:1732 #, c-format msgid "installing required extension \"%s\"" msgstr "instalando la extensión requerida «%s»" -#: commands/extension.c:1732 +#: commands/extension.c:1755 #, c-format msgid "required extension \"%s\" is not installed" msgstr "la extensión requerida «%s» no está instalada" -#: commands/extension.c:1735 +#: commands/extension.c:1758 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Use CREATE EXTENSION ... CASCADE para instalar además las extensiones requeridas." -#: commands/extension.c:1770 +#: commands/extension.c:1793 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "la extensión «%s» ya existe, omitiendo" -#: commands/extension.c:1777 +#: commands/extension.c:1800 #, c-format msgid "extension \"%s\" already exists" msgstr "la extensión «%s» ya existe" -#: commands/extension.c:1788 +#: commands/extension.c:1811 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "los CREATE EXTENSION anidados no están soportados" -#: commands/extension.c:1952 +#: commands/extension.c:1975 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "no se puede eliminar la extensión «%s» porque está siendo modificada" -#: commands/extension.c:2427 +#: commands/extension.c:2450 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s sólo puede invocarse desde un script SQL ejecutado por CREATE EXTENSION" -#: commands/extension.c:2439 +#: commands/extension.c:2462 #, c-format msgid "OID %u does not refer to a table" msgstr "el OID %u no hace referencia a una tabla" -#: commands/extension.c:2444 +#: commands/extension.c:2467 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "el tabla «%s» no es un miembro de la extensión que se está creando" -#: commands/extension.c:2790 +#: commands/extension.c:2813 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "no se puede mover la extensión «%s» al esquema «%s» porque la extensión contiene al esquema" -#: commands/extension.c:2831 commands/extension.c:2928 +#: commands/extension.c:2854 commands/extension.c:2948 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "la extensión «%s» no soporta SET SCHEMA" -#: commands/extension.c:2885 -#, fuzzy, c-format -#| msgid "cannot drop extension \"%s\" because it is being modified" +#: commands/extension.c:2911 +#, c-format msgid "cannot SET SCHEMA of extension \"%s\" because other extensions prevent it" -msgstr "no se puede eliminar la extensión «%s» porque está siendo modificada" +msgstr "no se puede hacer SET SCHEMA de la extensión «%s» porque otras extensiones lo impiden" -#: commands/extension.c:2887 -#, fuzzy, c-format -#| msgid "relation \"%s\" is not a partition of relation \"%s\"" +#: commands/extension.c:2913 +#, c-format msgid "Extension \"%s\" requests no relocation of extension \"%s\"." -msgstr "relación «%s» no es una partición de la relación «%s»" +msgstr "La extensión «%s» solicita no relocalizar la extensión «%s»." -#: commands/extension.c:2930 +#: commands/extension.c:2950 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s no está en el esquema de la extensión, «%s»" -#: commands/extension.c:2989 +#: commands/extension.c:3011 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "los ALTER EXTENSION anidados no están soportados" -#: commands/extension.c:3078 +#: commands/extension.c:3100 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la versión «%s» de la extensión «%s» ya está instalada" -#: commands/extension.c:3290 +#: commands/extension.c:3311 #, c-format msgid "cannot add an object of this type to an extension" msgstr "no se puede añadir un objeto de este tipo a una extensión" -#: commands/extension.c:3356 +#: commands/extension.c:3409 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "no se puede agregar el esquema «%s» a la extensión «%s» porque el esquema contiene la extensión" -#: commands/extension.c:3450 +#: commands/extension.c:3491 commands/typecmds.c:4042 utils/fmgr/funcapi.c:725 +#, c-format +msgid "could not find multirange type for data type %s" +msgstr "no se pudo encontrar un tipo de multirango para el tipo de dato %s" + +#: commands/extension.c:3532 #, c-format msgid "file \"%s\" is too large" msgstr "el archivo «%s» es demasiado grande" @@ -8301,7 +8616,7 @@ msgstr "Debe ser superusuario para cambiar el dueño de un conector de datos ext msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "El dueño de un conector de datos externos debe ser un superusuario." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:678 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:691 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "no existe el conector de datos externos «%s»" @@ -8371,7 +8686,7 @@ msgstr "no existe el mapeo de usuario «%s» para el servidor «%s»" msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s», omitiendo" -#: commands/foreigncmds.c:1507 foreign/foreign.c:391 +#: commands/foreigncmds.c:1507 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "el conector de datos externos «%s» no tiene manejador" @@ -8386,524 +8701,528 @@ msgstr "el conector de datos externos «%s» no soporta IMPORT FOREIGN SCHEMA" msgid "importing foreign table \"%s\"" msgstr "importando la tabla foránea «%s»" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "una función SQL no puede retornar el tipo inconcluso %s" -#: commands/functioncmds.c:114 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "el tipo de retorno %s está inconcluso" -#: commands/functioncmds.c:143 parser/parse_type.c:354 +#: commands/functioncmds.c:138 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "no se puede especificar un modificador de tipo para el tipo inconcluso «%s»" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:144 #, c-format msgid "type \"%s\" is not yet defined" msgstr "el tipo «%s» no ha sido definido aún" -#: commands/functioncmds.c:150 +#: commands/functioncmds.c:145 #, c-format msgid "Creating a shell type definition." msgstr "Creando una definición de tipo inconclusa." -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:244 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "las funciones SQL no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:255 +#: commands/functioncmds.c:250 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "las funciones de agregación no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:260 +#: commands/functioncmds.c:255 #, c-format msgid "argument type %s is only a shell" msgstr "el tipo de argumento %s está inconcluso" -#: commands/functioncmds.c:270 +#: commands/functioncmds.c:265 #, c-format msgid "type %s does not exist" msgstr "no existe el tipo %s" -#: commands/functioncmds.c:284 +#: commands/functioncmds.c:279 #, c-format msgid "aggregates cannot accept set arguments" msgstr "las funciones de agregación no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:283 #, c-format msgid "procedures cannot accept set arguments" msgstr "los procedimientos no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:292 +#: commands/functioncmds.c:287 #, c-format msgid "functions cannot accept set arguments" msgstr "funciones no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:302 +#: commands/functioncmds.c:297 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "el parámetro VARIADIC debe ser el último parámetro de entrada" -#: commands/functioncmds.c:322 +#: commands/functioncmds.c:317 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "el parámetro VARIADIC debe ser el último parámetro" -#: commands/functioncmds.c:347 +#: commands/functioncmds.c:342 #, c-format msgid "VARIADIC parameter must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: commands/functioncmds.c:392 +#: commands/functioncmds.c:387 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "nombre de parámetro «%s» usado más de una vez" -#: commands/functioncmds.c:410 +#: commands/functioncmds.c:405 #, c-format msgid "only input parameters can have default values" msgstr "solo los parámetros de entrada pueden tener valores por omisión" -#: commands/functioncmds.c:425 +#: commands/functioncmds.c:420 #, c-format msgid "cannot use table references in parameter default value" msgstr "no se pueden usar referencias a tablas en el valor por omisión de un parámetro" -#: commands/functioncmds.c:449 +#: commands/functioncmds.c:444 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "los parámetros de entrada después de uno que tenga valor por omisión también deben tener valores por omisión" -#: commands/functioncmds.c:459 +#: commands/functioncmds.c:454 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "los parámetros OUT no pueden aparecer después de uno que tenga valor por omisión" -#: commands/functioncmds.c:601 commands/functioncmds.c:780 +#: commands/functioncmds.c:596 commands/functioncmds.c:775 #, c-format msgid "invalid attribute in procedure definition" msgstr "atributo no válido en definición de procedimiento" -#: commands/functioncmds.c:697 +#: commands/functioncmds.c:692 #, c-format msgid "support function %s must return type %s" msgstr "la función de soporte %s debe retornar el tipo %s" -#: commands/functioncmds.c:708 +#: commands/functioncmds.c:703 #, c-format msgid "must be superuser to specify a support function" msgstr "debe ser superusuario para especificar una función de soporte" -#: commands/functioncmds.c:829 commands/functioncmds.c:1432 +#: commands/functioncmds.c:824 commands/functioncmds.c:1427 #, c-format msgid "COST must be positive" msgstr "COST debe ser positivo" -#: commands/functioncmds.c:837 commands/functioncmds.c:1440 +#: commands/functioncmds.c:832 commands/functioncmds.c:1435 #, c-format msgid "ROWS must be positive" msgstr "ROWS debe ser positivo" -#: commands/functioncmds.c:866 +#: commands/functioncmds.c:861 #, c-format msgid "no function body specified" msgstr "no se ha especificado un cuerpo para la función" -#: commands/functioncmds.c:871 +#: commands/functioncmds.c:866 #, c-format msgid "duplicate function body specified" msgstr "se ha especificado por duplicado el cuerpo para la función" -#: commands/functioncmds.c:876 +#: commands/functioncmds.c:871 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "cuerpo de función SQL en línea solo es válido para lenguaje SQL" -#: commands/functioncmds.c:918 +#: commands/functioncmds.c:913 #, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "una función SQL con el cuerpo de la función fuera de comillas no puede tener argumentos polimórficos" -#: commands/functioncmds.c:944 commands/functioncmds.c:963 +#: commands/functioncmds.c:939 commands/functioncmds.c:958 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s aún no está soportado en una función SQL con el cuerpo fuera de comillas" -#: commands/functioncmds.c:991 +#: commands/functioncmds.c:986 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "sólo se requiere un item AS para el lenguaje «%s»" -#: commands/functioncmds.c:1096 +#: commands/functioncmds.c:1091 #, c-format msgid "no language specified" msgstr "no se ha especificado el lenguaje" -#: commands/functioncmds.c:1104 commands/functioncmds.c:2105 -#: commands/proclang.c:237 +#: commands/functioncmds.c:1099 commands/functioncmds.c:2117 +#: commands/proclang.c:235 #, c-format msgid "language \"%s\" does not exist" msgstr "no existe el lenguaje «%s»" -#: commands/functioncmds.c:1106 commands/functioncmds.c:2107 +#: commands/functioncmds.c:1101 commands/functioncmds.c:2119 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Use CREATE EXTENSION para cargar el lenguaje en la base de datos." -#: commands/functioncmds.c:1139 commands/functioncmds.c:1424 +#: commands/functioncmds.c:1134 commands/functioncmds.c:1419 #, c-format msgid "only superuser can define a leakproof function" msgstr "sólo un superusuario puede definir funciones «leakproof»" -#: commands/functioncmds.c:1190 +#: commands/functioncmds.c:1185 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "tipo de retorno de función debe ser %s debido a los parámetros OUT" -#: commands/functioncmds.c:1203 +#: commands/functioncmds.c:1198 #, c-format msgid "function result type must be specified" msgstr "el tipo de retorno de la función debe ser especificado" -#: commands/functioncmds.c:1256 commands/functioncmds.c:1444 +#: commands/functioncmds.c:1251 commands/functioncmds.c:1439 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS no es aplicable cuando una función no retorna un conjunto" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1546 #, c-format msgid "source data type %s is a pseudo-type" msgstr "el tipo de origen %s es un pseudotipo" -#: commands/functioncmds.c:1553 +#: commands/functioncmds.c:1552 #, c-format msgid "target data type %s is a pseudo-type" msgstr "el tipo de retorno %s es un pseudotipo" -#: commands/functioncmds.c:1577 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de origen es un dominio" -#: commands/functioncmds.c:1582 +#: commands/functioncmds.c:1581 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de destino es un dominio" -#: commands/functioncmds.c:1607 +#: commands/functioncmds.c:1606 #, c-format msgid "cast function must take one to three arguments" msgstr "la función de conversión lleva de uno a tres argumentos" -#: commands/functioncmds.c:1613 +#: commands/functioncmds.c:1612 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "el argumento de la función de conversión debe coincidir o ser binario-convertible con el tipo de origen" -#: commands/functioncmds.c:1617 +#: commands/functioncmds.c:1616 #, c-format msgid "second argument of cast function must be type %s" msgstr "el segundo argumento de la función de conversión debe ser de tipo %s" -#: commands/functioncmds.c:1622 +#: commands/functioncmds.c:1621 #, c-format msgid "third argument of cast function must be type %s" msgstr "el tercer argumento de la función de conversión debe ser de tipo %s" -#: commands/functioncmds.c:1629 +#: commands/functioncmds.c:1628 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "el tipo de salida de la función de conversión debe coincidir o ser binario-convertible con el tipo de retorno" -#: commands/functioncmds.c:1640 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not be volatile" msgstr "la función de conversión no debe ser volatile" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1644 #, c-format msgid "cast function must be a normal function" msgstr "la función de conversión debe ser una función normal" -#: commands/functioncmds.c:1649 +#: commands/functioncmds.c:1648 #, c-format msgid "cast function must not return a set" msgstr "la función de conversión no debe retornar un conjunto" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1674 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "debe ser superusuario para crear una conversión sin especificar función" -#: commands/functioncmds.c:1690 +#: commands/functioncmds.c:1689 #, c-format msgid "source and target data types are not physically compatible" msgstr "los tipos de datos de origen y destino no son físicamente compatibles" -#: commands/functioncmds.c:1705 +#: commands/functioncmds.c:1709 #, c-format msgid "composite data types are not binary-compatible" msgstr "los tipos de datos compuestos no son binario-compatibles" -#: commands/functioncmds.c:1711 -#, c-format -msgid "enum data types are not binary-compatible" -msgstr "los tipos de datos enum no son binario-compatibles" - -#: commands/functioncmds.c:1717 +#: commands/functioncmds.c:1715 #, c-format msgid "array data types are not binary-compatible" msgstr "los tipos de datos de array no son binario-compatibles" -#: commands/functioncmds.c:1734 +#: commands/functioncmds.c:1723 +#, c-format +msgid "range data types are not binary-compatible" +msgstr "los tipos de datos de rango no son binario-compatibles" + +#: commands/functioncmds.c:1729 +#, c-format +msgid "enum data types are not binary-compatible" +msgstr "los tipos de datos enum no son binario-compatibles" + +#: commands/functioncmds.c:1746 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "los tipos de dato de dominio no deben ser marcados binario-compatibles" -#: commands/functioncmds.c:1744 +#: commands/functioncmds.c:1756 #, c-format msgid "source data type and target data type are the same" msgstr "el tipo de origen y el tipo de retorno son el mismo" -#: commands/functioncmds.c:1777 +#: commands/functioncmds.c:1789 #, c-format msgid "transform function must not be volatile" msgstr "la función de transformación no debe ser volatile" -#: commands/functioncmds.c:1781 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must be a normal function" msgstr "la función de transformación debe ser una función normal" -#: commands/functioncmds.c:1785 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must not return a set" msgstr "la función de transformación no debe retornar un conjunto" -#: commands/functioncmds.c:1789 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must take one argument" msgstr "la función de transformación debe recibir un argumento" -#: commands/functioncmds.c:1793 +#: commands/functioncmds.c:1805 #, c-format msgid "first argument of transform function must be type %s" msgstr "el primer argumento de la función de transformación debe ser de tipo %s" -#: commands/functioncmds.c:1832 +#: commands/functioncmds.c:1844 #, c-format msgid "data type %s is a pseudo-type" msgstr "el tipo de dato %s es un pseudo-tipo" -#: commands/functioncmds.c:1838 +#: commands/functioncmds.c:1850 #, c-format msgid "data type %s is a domain" msgstr "tipo de dato «%s» es un dominio" -#: commands/functioncmds.c:1878 +#: commands/functioncmds.c:1890 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "el tipo de dato de retorno de la función FROM SQL debe ser %s" -#: commands/functioncmds.c:1904 +#: commands/functioncmds.c:1916 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "el tipo de dato de retorno de la función TO SQL debe ser el tipo de dato de la transformación" -#: commands/functioncmds.c:1931 +#: commands/functioncmds.c:1943 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "la transformación para el tipo %s lenguaje «%s» ya existe" -#: commands/functioncmds.c:2017 +#: commands/functioncmds.c:2029 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "la transformación para el tipo %s lenguaje «%s» no existe" -#: commands/functioncmds.c:2041 +#: commands/functioncmds.c:2053 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "ya existe una función llamada %s en el esquema «%s»" -#: commands/functioncmds.c:2092 +#: commands/functioncmds.c:2104 #, c-format msgid "no inline code specified" msgstr "no se ha especificado código" -#: commands/functioncmds.c:2138 +#: commands/functioncmds.c:2150 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "el lenguaje «%s» no soporta ejecución de código en línea" -#: commands/functioncmds.c:2233 +#: 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] "no se pueden pasar más de %d argumento a un procedimiento" msgstr[1] "no se pueden pasar más de %d argumentos a un procedimiento" -#: commands/indexcmds.c:641 +#: commands/indexcmds.c:656 #, c-format msgid "must specify at least one column" msgstr "debe especificar al menos una columna" -#: commands/indexcmds.c:645 +#: commands/indexcmds.c:660 #, c-format msgid "cannot use more than %d columns in an index" msgstr "no se puede usar más de %d columnas en un índice" -#: commands/indexcmds.c:688 -#, fuzzy, c-format -#| msgid "cannot change relation \"%s\"" +#: commands/indexcmds.c:703 +#, c-format msgid "cannot create index on relation \"%s\"" -msgstr "no se puede cambiar la relación «%s»" +msgstr "no se puede crear índice en la relación «%s»" -#: commands/indexcmds.c:714 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "no se puede crear un índice en la tabla particionada «%s» concurrentemente" -#: commands/indexcmds.c:719 -#, c-format -msgid "cannot create exclusion constraints on partitioned table \"%s\"" -msgstr "no se pueden create restricciones de exclusión en la tabla particionada «%s»" - -#: commands/indexcmds.c:729 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "no se pueden crear índices en tablas temporales de otras sesiones" -#: commands/indexcmds.c:767 commands/tablecmds.c:784 commands/tablespace.c:1184 +#: commands/indexcmds.c:777 commands/tablecmds.c:818 commands/tablespace.c:1178 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "no se puede especificar el tablespace por omisión para las relaciones particionadas" -#: commands/indexcmds.c:799 commands/tablecmds.c:819 commands/tablecmds.c:3409 +#: 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 "sólo relaciones compartidas pueden ser puestas en el tablespace pg_global" -#: commands/indexcmds.c:832 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "sustituyendo el método de acceso obsoleto «rtree» por «gist»" -#: commands/indexcmds.c:853 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "el método de acceso «%s» no soporta índices únicos" -#: commands/indexcmds.c:858 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "el método de acceso «%s» no soporta columnas incluidas" -#: commands/indexcmds.c:863 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "el método de acceso «%s» no soporta índices multicolumna" -#: commands/indexcmds.c:868 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "el método de acceso «%s» no soporta restricciones de exclusión" -#: commands/indexcmds.c:995 +#: commands/indexcmds.c:1007 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "no se puede hacer coincidir la llave de partición a un índice usando el método de acceso «%s»" -#: commands/indexcmds.c:1005 +#: commands/indexcmds.c:1017 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "restricción %s no soportada con definición de llave de particionamiento" -#: commands/indexcmds.c:1007 +#: commands/indexcmds.c:1019 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "No se pueden usar restricciones %s cuando las llaves de particionamiento incluyen expresiones." -#: commands/indexcmds.c:1046 +#: commands/indexcmds.c:1069 +#, c-format +msgid "cannot match partition key to index on column \"%s\" using non-equal operator \"%s\"" +msgstr "no se puede hacer coincidir la llave de partición en la columna «%s» usando el operador «%s» que no es igualdad" + +#: commands/indexcmds.c:1085 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "las restricciones unique en tablas particionadas deben incluir todas las columnas de particionamiento" -#: commands/indexcmds.c:1047 +#: commands/indexcmds.c:1086 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "La restricción %s en la tabla «%s» no incluye la columna «%s» que es parte de la llave de particionamiento." -#: commands/indexcmds.c:1066 commands/indexcmds.c:1085 +#: commands/indexcmds.c:1105 commands/indexcmds.c:1124 #, c-format msgid "index creation on system columns is not supported" msgstr "la creación de índices en columnas de sistema no está soportada" -#: commands/indexcmds.c:1314 tcop/utility.c:1525 +#: commands/indexcmds.c:1354 tcop/utility.c:1515 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "no se puede crear un índice único en la tabla particionada «%s»" -#: commands/indexcmds.c:1316 tcop/utility.c:1527 +#: commands/indexcmds.c:1356 tcop/utility.c:1517 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "La tabla «%s» contiene particiones que son tablas foráneas." -#: commands/indexcmds.c:1811 +#: commands/indexcmds.c:1806 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "las funciones utilizadas en predicados de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:1889 parser/parse_utilcmd.c:2513 -#: parser/parse_utilcmd.c:2648 +#: 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 "no existe la columna «%s» en la llave" -#: commands/indexcmds.c:1913 parser/parse_utilcmd.c:1812 +#: commands/indexcmds.c:1909 parser/parse_utilcmd.c:1807 #, c-format msgid "expressions are not supported in included columns" msgstr "las expresiones no están soportadas en columnas incluidas" -#: commands/indexcmds.c:1954 +#: commands/indexcmds.c:1950 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:1969 +#: commands/indexcmds.c:1965 #, c-format msgid "including column does not support a collation" msgstr "la columna incluida no permite un ordenamiento (collation)" -#: commands/indexcmds.c:1973 +#: commands/indexcmds.c:1969 #, c-format msgid "including column does not support an operator class" msgstr "la columna incluida no permite una clase de operadores" -#: commands/indexcmds.c:1977 +#: commands/indexcmds.c:1973 #, c-format msgid "including column does not support ASC/DESC options" msgstr "la columna incluida no permite las opciones ASC/DESC" -#: commands/indexcmds.c:1981 +#: commands/indexcmds.c:1977 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "la columna incluida no permite las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:2022 +#: commands/indexcmds.c:2020 #, c-format msgid "could not determine which collation to use for index expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de índice" -#: commands/indexcmds.c:2030 commands/tablecmds.c:17497 commands/typecmds.c:807 -#: parser/parse_expr.c:2722 parser/parse_type.c:568 parser/parse_utilcmd.c:3774 -#: utils/adt/misc.c:586 +#: 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 "los ordenamientos (collation) no están soportados por el tipo %s" @@ -8938,95 +9257,100 @@ msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "el método de acceso «%s» no soporta las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:2212 commands/tablecmds.c:17522 -#: commands/tablecmds.c:17528 commands/typecmds.c:2301 +#: 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 "el tipo de dato %s no tiene una clase de operadores por omisión para el método de acceso «%s»" -#: commands/indexcmds.c:2214 +#: 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 "Debe especificar una clase de operadores para el índice, o definir una clase de operadores por omisión para el tipo de datos." -#: commands/indexcmds.c:2243 commands/indexcmds.c:2251 +#: 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 "no existe la clase de operadores «%s» para el método de acceso «%s»" -#: commands/indexcmds.c:2265 commands/typecmds.c:2289 +#: commands/indexcmds.c:2263 commands/typecmds.c:2299 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "la clase de operadores «%s» no acepta el tipo de datos %s" -#: commands/indexcmds.c:2355 +#: commands/indexcmds.c:2353 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "hay múltiples clases de operadores por omisión para el tipo de datos %s" -#: commands/indexcmds.c:2683 +#: commands/indexcmds.c:2681 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "opción de REINDEX «%s» no reconocida" -#: commands/indexcmds.c:2910 +#: commands/indexcmds.c:2913 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "la tabla «%s» no tiene índices que puedan ser reindexados concurrentemente" -#: commands/indexcmds.c:2924 +#: commands/indexcmds.c:2927 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la tabla «%s» no tiene índices para reindexar" -#: commands/indexcmds.c:2969 commands/indexcmds.c:3484 -#: commands/indexcmds.c:3612 +#: commands/indexcmds.c:2974 commands/indexcmds.c:3485 +#: commands/indexcmds.c:3615 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "no se pueden reindexar catálogos de sistema concurrentemente" -#: commands/indexcmds.c:2993 +#: commands/indexcmds.c:2998 #, c-format msgid "can only reindex the currently open database" msgstr "sólo se puede reindexar la base de datos actualmente abierta" -#: commands/indexcmds.c:3091 +#: commands/indexcmds.c:3090 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "no se puede reindexar un catálogo de sistema concurrentemente, omitiéndolos todos" -#: commands/indexcmds.c:3124 +#: commands/indexcmds.c:3123 #, c-format msgid "cannot move system relations, skipping all" msgstr "no se puede mover las relaciones de sistema, omitiendo todas" -#: commands/indexcmds.c:3170 +#: commands/indexcmds.c:3169 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "al reindexar tabla particionada «%s.%s»" -#: commands/indexcmds.c:3173 +#: commands/indexcmds.c:3172 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "al reindexar índice particionado «%s.%s»" -#: commands/indexcmds.c:3364 commands/indexcmds.c:4220 +#: commands/indexcmds.c:3365 commands/indexcmds.c:4241 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la tabla «%s.%s» fue reindexada" -#: commands/indexcmds.c:3516 commands/indexcmds.c:3568 +#: commands/indexcmds.c:3517 commands/indexcmds.c:3570 #, c-format -msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" -msgstr "no se puede reindexar el índice no válido «%s.%s» concurrentemente, omitiendo" +msgid "skipping reindex of invalid index \"%s.%s\"" +msgstr "omitiendo reindexar índice no válido «%s.%s»" -#: commands/indexcmds.c:3522 +#: commands/indexcmds.c:3520 commands/indexcmds.c:3573 +#, c-format +msgid "Use DROP INDEX or REINDEX INDEX." +msgstr "Use DROP INDEX o REINDEX INDEX." + +#: commands/indexcmds.c:3524 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "no se puede reindexar el índice de restricción de exclusión «%s.%s» concurrentemente, omitiendo" -#: commands/indexcmds.c:3677 +#: commands/indexcmds.c:3680 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "no se puede reindexar este tipo de relación concurrentemente" @@ -9036,48 +9360,47 @@ msgstr "no se puede reindexar este tipo de relación concurrentemente" msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "no se puede mover relación no compartida al tablespace «%s»" -#: commands/indexcmds.c:4201 commands/indexcmds.c:4213 +#: commands/indexcmds.c:4222 commands/indexcmds.c:4234 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "el índice «%s.%s» fue reindexado" -#: commands/indexcmds.c:4203 commands/indexcmds.c:4222 +#: commands/indexcmds.c:4224 commands/indexcmds.c:4243 #, c-format msgid "%s." msgstr "%s." -#: commands/lockcmds.c:93 -#, fuzzy, c-format -#| msgid "cannot lock rows in relation \"%s\"" +#: commands/lockcmds.c:91 +#, c-format msgid "cannot lock relation \"%s\"" -msgstr "no se puede bloquear registros en la tabla «%s»" +msgstr "no se puede bloquear la relación «%s»" -#: commands/matview.c:194 +#: commands/matview.c:206 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "no se puede usar CONCURRENTLY cuando la vista materializada no contiene datos" -#: commands/matview.c:200 gram.y:18307 +#: commands/matview.c:212 gram.y:18918 #, c-format msgid "%s and %s options cannot be used together" msgstr "las opciones %s y %s no pueden usarse juntas" -#: commands/matview.c:257 +#: commands/matview.c:269 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "no se puede refrescar la vista materializada «%s» concurrentemente" -#: commands/matview.c:260 +#: 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 "Cree un índice único sin cláusula WHERE en una o más columnas de la vista materializada." -#: commands/matview.c:654 +#: commands/matview.c:666 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "nuevos datos para la vista materializada «%s» contiene filas duplicadas sin columnas nulas" -#: commands/matview.c:656 +#: commands/matview.c:668 #, c-format msgid "Row: %s" msgstr "Fila: %s" @@ -9279,27 +9602,27 @@ msgstr "el número de operador %d para (%s,%s) aparece más de una vez" msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "ya existe un operador %d(%s,%s) en la familia de operadores «%s»" -#: commands/opclasscmds.c:1566 +#: commands/opclasscmds.c:1589 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "ya existe una función %d(%s,%s) en la familia de operador «%s»" -#: commands/opclasscmds.c:1647 +#: commands/opclasscmds.c:1744 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "no existe el operador %d(%s,%s) en la familia de operadores «%s»" -#: commands/opclasscmds.c:1687 +#: commands/opclasscmds.c:1784 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "no existe la función %d(%s,%s) en la familia de operadores «%s»" -#: commands/opclasscmds.c:1718 +#: commands/opclasscmds.c:1815 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ya existe una clase de operadores «%s» para el método de acceso «%s» en el esquema «%s»" -#: commands/opclasscmds.c:1741 +#: commands/opclasscmds.c:1838 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ya existe una familia de operadores «%s» para el método de acceso «%s» en el esquema «%s»" @@ -9309,7 +9632,7 @@ msgstr "ya existe una familia de operadores «%s» para el método de acceso «% msgid "SETOF type not allowed for operator argument" msgstr "no se permite un tipo SETOF en los argumentos de un operador" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:481 +#: commands/operatorcmds.c:154 commands/operatorcmds.c:554 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "el atributo de operador «%s» no es reconocido" @@ -9349,53 +9672,70 @@ msgstr "la función de estimación de join %s tiene múltiples coincidencias" msgid "join estimator function %s must return type %s" msgstr "la función de estimación de join %s debe retornar tipo %s" -#: commands/operatorcmds.c:475 +#: commands/operatorcmds.c:388 parser/parse_oper.c:119 parser/parse_oper.c:637 +#: utils/adt/regproc.c:509 utils/adt/regproc.c:683 +#, c-format +msgid "operator does not exist: %s" +msgstr "el operador no existe: %s" + +#: commands/operatorcmds.c:396 parser/parse_oper.c:702 parser/parse_oper.c:815 +#, c-format +msgid "operator is only a shell: %s" +msgstr "el operador está inconcluso: %s" + +#: commands/operatorcmds.c:548 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "el atributo de operador «%s» no puede ser cambiado" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:149 -#: commands/tablecmds.c:1616 commands/tablecmds.c:2219 -#: commands/tablecmds.c:3520 commands/tablecmds.c:6369 -#: commands/tablecmds.c:9181 commands/tablecmds.c:17090 -#: commands/tablecmds.c:17125 commands/trigger.c:323 commands/trigger.c:1339 -#: commands/trigger.c:1449 rewrite/rewriteDefine.c:275 -#: rewrite/rewriteDefine.c:786 rewrite/rewriteRemove.c:80 +#: commands/operatorcmds.c:615 commands/operatorcmds.c:622 +#: commands/operatorcmds.c:628 commands/operatorcmds.c:634 +#, c-format +msgid "operator attribute \"%s\" cannot be changed if it has already been set" +msgstr "el atributo de operador «%s» no puede ser cambiado si ya se ha establecido" + +#: 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 "permiso denegado: «%s» es un catálogo de sistema" -#: commands/policy.c:172 +#: commands/policy.c:169 #, c-format msgid "ignoring specified roles other than PUBLIC" msgstr "ignorando los roles especificados que no son PUBLIC" -#: commands/policy.c:173 +#: commands/policy.c:170 #, c-format msgid "All roles are members of the PUBLIC role." msgstr "Todos los roles son miembros del rol PUBLIC." -#: commands/policy.c:606 +#: commands/policy.c:603 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK no puede ser aplicado a SELECT o DELETE" -#: commands/policy.c:615 commands/policy.c:918 +#: commands/policy.c:612 commands/policy.c:915 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "sólo se permite una expresión WITH CHECK para INSERT" -#: commands/policy.c:689 commands/policy.c:1141 +#: commands/policy.c:686 commands/policy.c:1138 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "la política «%s» para la tabla «%s» ya existe" -#: commands/policy.c:890 commands/policy.c:1169 commands/policy.c:1240 +#: commands/policy.c:887 commands/policy.c:1166 commands/policy.c:1237 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "no existe la política «%s» para la tabla «%s»" -#: commands/policy.c:908 +#: commands/policy.c:905 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "sólo se permite una expresión USING para SELECT, DELETE" @@ -9411,270 +9751,244 @@ msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "no se puede crear un cursor WITH HOLD dentro de una operación restringida por seguridad" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2844 utils/adt/xml.c:3014 +#: executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: commands/prepare.c:75 +#: commands/prepare.c:72 #, c-format msgid "invalid statement name: must not be empty" msgstr "el nombre de sentencia no es válido: no debe ser vacío" -#: commands/prepare.c:230 commands/prepare.c:235 +#: commands/prepare.c:227 commands/prepare.c:232 #, c-format msgid "prepared statement is not a SELECT" msgstr "la sentencia preparada no es un SELECT" -#: commands/prepare.c:295 +#: commands/prepare.c:292 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "el número de parámetros es incorrecto en la sentencia preparada «%s»" -#: commands/prepare.c:297 +#: commands/prepare.c:294 #, c-format msgid "Expected %d parameters but got %d." msgstr "Se esperaban %d parámetros pero se obtuvieron %d." -#: commands/prepare.c:330 +#: commands/prepare.c:327 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "el parámetro $%d de tipo %s no puede ser convertido al tipo esperado %s" -#: commands/prepare.c:414 +#: commands/prepare.c:411 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "la sentencia preparada «%s» ya existe" -#: commands/prepare.c:453 +#: commands/prepare.c:450 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "no existe la sentencia preparada «%s»" -#: commands/proclang.c:68 +#: commands/proclang.c:66 #, c-format msgid "must be superuser to create custom procedural language" msgstr "debe ser superusuario para crear un lenguaje procedural personalizado" -#: commands/publicationcmds.c:131 postmaster/postmaster.c:1205 -#: postmaster/postmaster.c:1303 storage/file/fd.c:3861 -#: utils/init/miscinit.c:1815 +#: 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 "la sintaxis de lista no es válida para el parámetro «%s»" -#: commands/publicationcmds.c:150 -#, fuzzy, c-format -#| msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" +#: commands/publicationcmds.c:143 +#, c-format msgid "unrecognized value for publication option \"%s\": \"%s\"" -msgstr "valor no reconocido para la opción de EXPLAIN «%s»: «%s»" +msgstr "valor no reconocido para la opción de publicación «%s»: «%s»" -#: commands/publicationcmds.c:164 +#: commands/publicationcmds.c:157 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "parámetro de publicación no reconocido: «%s»" -#: commands/publicationcmds.c:205 -#, fuzzy, c-format -#| msgid "no schema has been selected to create in" +#: commands/publicationcmds.c:198 +#, c-format msgid "no schema has been selected for CURRENT_SCHEMA" -msgstr "no se ha seleccionado ningún esquema dentro del cual crear" +msgstr "no se ha seleccionado ningún esquema para CURRENT_SCHEMA" -#: commands/publicationcmds.c:502 -#, fuzzy -#| msgid "System catalog modifications are currently disallowed." +#: commands/publicationcmds.c:495 msgid "System columns are not allowed." -msgstr "Las modificaciones al catálogo del sistema están actualmente deshabilitadas." +msgstr "Las columnas de sistema no son permitidas." -#: commands/publicationcmds.c:509 commands/publicationcmds.c:514 -#: commands/publicationcmds.c:531 -#, fuzzy -#| msgid "grouping operations are not allowed in %s" +#: commands/publicationcmds.c:502 commands/publicationcmds.c:507 +#: commands/publicationcmds.c:524 msgid "User-defined operators are not allowed." -msgstr "no se permiten operaciones «grouping» en %s" +msgstr "Los operadores definidos por el usuario no están permitidos." -#: commands/publicationcmds.c:555 +#: commands/publicationcmds.c:548 msgid "Only columns, constants, built-in operators, built-in data types, built-in collations, and immutable built-in functions are allowed." -msgstr "" +msgstr "Sólo columnas, constantes, operadores built-in, tipos de datos built-in, configuraciones regionales built-in y funciones built-in inmutables son permitidas." -#: commands/publicationcmds.c:567 -#, fuzzy -#| msgid "set-returning functions are not allowed in %s" +#: commands/publicationcmds.c:560 msgid "User-defined types are not allowed." -msgstr "no se permiten funciones que retornan conjuntos en %s" +msgstr "Los tipos definidos por el usuario no están permitidos." -#: commands/publicationcmds.c:570 -#, fuzzy -#| msgid "set-returning functions are not allowed in %s" +#: commands/publicationcmds.c:563 msgid "User-defined or built-in mutable functions are not allowed." -msgstr "no se permiten funciones que retornan conjuntos en %s" +msgstr "Las funciones definidas por el usuario, o las que son mutables, no están permitidas." -#: commands/publicationcmds.c:573 -#, fuzzy -#| msgid "set-returning functions are not allowed in %s" +#: commands/publicationcmds.c:566 msgid "User-defined collations are not allowed." -msgstr "no se permiten funciones que retornan conjuntos en %s" +msgstr "Los «collations» definidos por el usuario no están permitidos." -#: commands/publicationcmds.c:583 -#, fuzzy, c-format -#| msgid "invalid publication_names syntax" +#: commands/publicationcmds.c:576 +#, c-format msgid "invalid publication WHERE expression" -msgstr "sintaxis de publication_names no válida" +msgstr "sintaxis de cláusula WHERE de publicación no válida" -#: commands/publicationcmds.c:636 -#, fuzzy, c-format -#| msgid "cannot alter constraint \"%s\" on relation \"%s\"" +#: commands/publicationcmds.c:629 +#, c-format msgid "cannot use publication WHERE clause for relation \"%s\"" -msgstr "no se puede modificar la restricción «%s» en la relación «%s»" +msgstr "no se puede usar cláusula WHERE de la publicación para la relación «%s»" -#: commands/publicationcmds.c:638 +#: commands/publicationcmds.c:631 #, c-format msgid "WHERE clause cannot be used for a partitioned table when %s is false." -msgstr "" +msgstr "la cláusula WHERE no puede ser usada para una tabla particionada cuando %s es falso." -#: commands/publicationcmds.c:709 commands/publicationcmds.c:723 -#, fuzzy, c-format -#| msgid "cannot alter constraint \"%s\" on relation \"%s\"" +#: commands/publicationcmds.c:702 commands/publicationcmds.c:716 +#, c-format msgid "cannot use column list for relation \"%s.%s\" in publication \"%s\"" -msgstr "no se puede modificar la restricción «%s» en la relación «%s»" +msgstr "no se puede usar lista de columnas para la relación «%s.%s» en la publicación «%s»" -#: commands/publicationcmds.c:712 +#: commands/publicationcmds.c:705 #, c-format msgid "Column lists cannot be specified in publications containing FOR TABLES IN SCHEMA elements." -msgstr "" +msgstr "Las listas de columnas no pueden ser especificadas en publicaciones que contienen elementos FOR TABLES IN SCHEMA." -#: commands/publicationcmds.c:726 +#: commands/publicationcmds.c:719 #, c-format msgid "Column lists cannot be specified for partitioned tables when %s is false." -msgstr "" +msgstr "Las listas de columnas no pueden ser especificadas para tablas particionadas cuando %s es falso." -#: commands/publicationcmds.c:761 +#: commands/publicationcmds.c:754 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "debe ser superusuario para crear publicaciones FOR ALL TABLES" -#: commands/publicationcmds.c:832 -#, fuzzy, c-format -#| msgid "must be superuser to create FOR ALL TABLES publication" +#: commands/publicationcmds.c:825 +#, c-format msgid "must be superuser to create FOR TABLES IN SCHEMA publication" -msgstr "debe ser superusuario para crear publicaciones FOR ALL TABLES" +msgstr "debe ser superusuario para crear publicaciones FOR TABLES IN SCHEMA" -#: commands/publicationcmds.c:868 +#: commands/publicationcmds.c:861 #, c-format -msgid "wal_level is insufficient to publish logical changes" -msgstr "wal_level es insuficiente para publicar cambios lógicos" +msgid "\"wal_level\" is insufficient to publish logical changes" +msgstr "«wal_level» es insuficiente para publicar cambios lógicos" -#: commands/publicationcmds.c:869 -#, fuzzy, c-format -#| msgid "Change wal_level to be logical or higher." -msgid "Set wal_level to \"logical\" before creating subscriptions." -msgstr "Cambie wal_level a logical o superior." +#: commands/publicationcmds.c:862 +#, c-format +msgid "Set \"wal_level\" to \"logical\" before creating subscriptions." +msgstr "Cambie «wal_level» a «logical» antes de crear suscripciones." -#: commands/publicationcmds.c:965 commands/publicationcmds.c:973 -#, fuzzy, c-format -#| msgid "cannot set parameter \"%s\" within security-definer function" +#: commands/publicationcmds.c:958 commands/publicationcmds.c:966 +#, c-format msgid "cannot set parameter \"%s\" to false for publication \"%s\"" -msgstr "no se puede definir el parámetro «%s» dentro una función security-definer" +msgstr "no se puede definir el parámetro «%s» a falso para la publicación «%s»" -#: commands/publicationcmds.c:968 +#: commands/publicationcmds.c:961 #, c-format msgid "The publication contains a WHERE clause for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "La publicación contiene una cláusula WHERE para la tabla particionada «%s», que no está permitido cuando «%s» es falso." -#: commands/publicationcmds.c:976 +#: commands/publicationcmds.c:969 #, c-format msgid "The publication contains a column list for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "La publicación contiene una lista de columns para la tabla particionada «%s», que no está permitido cuando «%s» es falso." -#: commands/publicationcmds.c:1299 -#, fuzzy, c-format -#| msgid "cannot add schema \"%s\" to publication" +#: commands/publicationcmds.c:1292 +#, c-format msgid "cannot add schema to publication \"%s\"" -msgstr "no se puede agregar el esquema «%s» a la partición" +msgstr "no se puede agregar el esquema «%s» a la publicación" -#: commands/publicationcmds.c:1301 +#: commands/publicationcmds.c:1294 #, c-format msgid "Schemas cannot be added if any tables that specify a column list are already part of the publication." -msgstr "" +msgstr "Los esquemas no pueden ser añadidos si alguna tabla que especifica una lista de columnas ya es parte de la publicación." -#: commands/publicationcmds.c:1349 +#: commands/publicationcmds.c:1342 #, c-format msgid "must be superuser to add or set schemas" msgstr "debe ser superusuario para agregar o definir esquemas" -#: commands/publicationcmds.c:1358 commands/publicationcmds.c:1366 +#: commands/publicationcmds.c:1351 commands/publicationcmds.c:1359 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "la publicación \"%s\" se define como FOR ALL TABLES" -#: commands/publicationcmds.c:1360 -#, fuzzy, c-format -#| msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." +#: commands/publicationcmds.c:1353 +#, c-format msgid "Schemas cannot be added to or dropped from FOR ALL TABLES publications." -msgstr "Las tablas no se pueden agregar ni eliminar de las publicaciones FOR ALL TABLES." +msgstr "No se pueden agregar ni eliminar esquemas de las publicaciones FOR ALL TABLES." -#: commands/publicationcmds.c:1368 +#: commands/publicationcmds.c:1361 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "Las tablas no se pueden agregar ni eliminar de las publicaciones FOR ALL TABLES." -#: commands/publicationcmds.c:1392 commands/publicationcmds.c:1431 -#: commands/publicationcmds.c:1968 utils/cache/lsyscache.c:3592 +#: commands/publicationcmds.c:1385 commands/publicationcmds.c:1424 +#: commands/publicationcmds.c:1961 utils/cache/lsyscache.c:3634 #, c-format msgid "publication \"%s\" does not exist" msgstr "no existe la publicación «%s»" -#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1657 -#, fuzzy, c-format -#| msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" +#: commands/publicationcmds.c:1587 commands/publicationcmds.c:1650 +#, c-format msgid "conflicting or redundant WHERE clauses for table \"%s\"" -msgstr "declaraciones NULL/NOT NULL en conflicto o redundantes para la columna «%s»" +msgstr "cláusulas WHERE en conflicto o redundantes para la tabla «%s»" -#: commands/publicationcmds.c:1601 commands/publicationcmds.c:1669 -#, fuzzy, c-format -#| msgid "conflicting or redundant options" +#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1662 +#, c-format msgid "conflicting or redundant column lists for table \"%s\"" -msgstr "opciones contradictorias o redundantes" +msgstr "listas de columnas contradictorias o redundantes para la tabla «%s»" -#: commands/publicationcmds.c:1803 -#, fuzzy, c-format -#| msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" +#: commands/publicationcmds.c:1796 +#, c-format msgid "column list must not be specified in ALTER PUBLICATION ... DROP" -msgstr "los tipos de los argumentos de operador deben ser especificados en ALTER OPERATOR FAMILY" +msgstr "la lista de columnas no debe ser especificada en ALTER PUBLICATION ... DROP" -#: commands/publicationcmds.c:1815 +#: commands/publicationcmds.c:1808 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "relación «%s» no es parte de la publicación" -#: commands/publicationcmds.c:1822 +#: commands/publicationcmds.c:1815 #, c-format msgid "cannot use a WHERE clause when removing a table from a publication" msgstr "no se puede usar una cláusula WHERE cuando se elimina una tabla de una publicación" -#: commands/publicationcmds.c:1882 -#, fuzzy, c-format -#| msgid "relation \"%s\" is not part of the publication" +#: commands/publicationcmds.c:1875 +#, c-format msgid "tables from schema \"%s\" are not part of the publication" -msgstr "relación «%s» no es parte de la publicación" +msgstr "las tablas del esquema «%s» no son parte de la publicación" -#: commands/publicationcmds.c:1925 commands/publicationcmds.c:1932 +#: commands/publicationcmds.c:1918 commands/publicationcmds.c:1925 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño de la publicación «%s»" -#: commands/publicationcmds.c:1927 +#: commands/publicationcmds.c:1920 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "El dueño de una publicación FOR ALL TABLES debe ser un superusuario." -#: commands/publicationcmds.c:1934 -#, fuzzy, c-format -#| msgid "The owner of a FOR ALL TABLES publication must be a superuser." +#: commands/publicationcmds.c:1927 +#, c-format msgid "The owner of a FOR TABLES IN SCHEMA publication must be a superuser." -msgstr "El dueño de una publicación FOR ALL TABLES debe ser un superusuario." +msgstr "El dueño de una publicación FOR TABLES IN SCHEMA debe ser un superusuario." -#: commands/publicationcmds.c:2000 +#: commands/publicationcmds.c:1993 #, c-format msgid "publication with OID %u does not exist" msgstr "no existe la publicación con OID %u" @@ -9715,3263 +10029,3266 @@ msgid "security labels are not supported for this type of object" msgstr "las etiquetas de seguirdad no están soportadas para este tipo de objeto" #: commands/seclabel.c:193 -#, fuzzy, c-format -#| msgid "cannot alter constraint \"%s\" on relation \"%s\"" +#, c-format msgid "cannot set security label on relation \"%s\"" -msgstr "no se puede modificar la restricción «%s» en la relación «%s»" +msgstr "no se puede definir la etiqueta de seguridad en la relación «%s»" -#: commands/sequence.c:754 +#: commands/sequence.c:748 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%lld)" -msgstr "" +msgstr "nextval: se alcanzó el valor máximo de la secuencia «%s» (%lld)" -#: commands/sequence.c:773 +#: commands/sequence.c:767 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" -msgstr "" +msgstr "nextval: se alcanzó el valor mínimo de la secuencia «%s» (%lld)" -#: commands/sequence.c:891 +#: commands/sequence.c:886 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "currval de la secuencia «%s» no está definido en esta sesión" -#: commands/sequence.c:910 commands/sequence.c:916 +#: commands/sequence.c:905 commands/sequence.c:911 #, c-format msgid "lastval is not yet defined in this session" msgstr "lastval no está definido en esta sesión" -#: commands/sequence.c:996 -#, fuzzy, c-format -#| msgid "value %s out of bounds for option \"%s\"" +#: commands/sequence.c:991 +#, c-format msgid "setval: value %lld is out of bounds for sequence \"%s\" (%lld..%lld)" -msgstr "el valor %s está fuera del rango de la opción «%s»" +msgstr "setval: el valor %lld está fuera del rango para la secuencia «%s» (%lld..%lld)" -#: commands/sequence.c:1365 +#: commands/sequence.c:1357 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "opción de secuencia no válida SEQUENCE NAME" -#: commands/sequence.c:1391 +#: commands/sequence.c:1383 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "el tipo de columna de identidad debe ser smallint, integer o bigint" -#: commands/sequence.c:1392 +#: commands/sequence.c:1384 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "el tipo de secuencia debe ser smallint, integer o bigint" -#: commands/sequence.c:1426 +#: commands/sequence.c:1418 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT no debe ser cero" -#: commands/sequence.c:1474 -#, fuzzy, c-format -#| msgid "value \"%s\" is out of range for type %s" +#: commands/sequence.c:1466 +#, c-format msgid "MAXVALUE (%lld) is out of range for sequence data type %s" -msgstr "el valor «%s» está fuera de rango para el tipo %s" +msgstr "el MAXVALUE (%lld) está fuera de rango para el tipo de la secuencia %s" -#: commands/sequence.c:1506 -#, fuzzy, c-format -#| msgid "value \"%s\" is out of range for type %s" +#: commands/sequence.c:1498 +#, c-format msgid "MINVALUE (%lld) is out of range for sequence data type %s" -msgstr "el valor «%s» está fuera de rango para el tipo %s" +msgstr "el MINVALUE (%lld) está fuera de rango para el tipo de la secuencia %s" -#: commands/sequence.c:1514 +#: commands/sequence.c:1506 #, c-format msgid "MINVALUE (%lld) must be less than MAXVALUE (%lld)" -msgstr "" +msgstr "MINVALUE (%lld) debe ser menor que MAXVALUE (%lld)" -#: commands/sequence.c:1535 +#: commands/sequence.c:1527 #, c-format msgid "START value (%lld) cannot be less than MINVALUE (%lld)" -msgstr "" +msgstr "el valor START (%lld) no puede ser menor que MINVALUE (%lld)" -#: commands/sequence.c:1541 +#: commands/sequence.c:1533 #, c-format msgid "START value (%lld) cannot be greater than MAXVALUE (%lld)" -msgstr "" +msgstr "el valor START (%lld) no puede ser mayor que el MAXVALUE (%lld)" -#: commands/sequence.c:1565 +#: commands/sequence.c:1557 #, c-format msgid "RESTART value (%lld) cannot be less than MINVALUE (%lld)" -msgstr "" +msgstr "el valor RESTART (%lld) no puede ser menor que MINVALUE (%lld)" -#: commands/sequence.c:1571 +#: commands/sequence.c:1563 #, c-format msgid "RESTART value (%lld) cannot be greater than MAXVALUE (%lld)" -msgstr "" +msgstr "el valor RESTART (%lld) no puede ser mayor que MAXVALUE (%lld)" -#: commands/sequence.c:1582 -#, fuzzy, c-format -#| msgid "stride must be greater than zero" +#: commands/sequence.c:1574 +#, c-format msgid "CACHE (%lld) must be greater than zero" -msgstr "el intervalo de paso (stride) debe ser mayor que cero" +msgstr "el CACHE (%lld) debe ser mayor que cero" -#: commands/sequence.c:1618 +#: commands/sequence.c:1610 #, c-format msgid "invalid OWNED BY option" msgstr "opción OWNED BY no válida" -#: commands/sequence.c:1619 +#: commands/sequence.c:1611 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Especifique OWNED BY tabla.columna o OWNED BY NONE." -#: commands/sequence.c:1644 -#, fuzzy, c-format -#| msgid "cannot move system relation \"%s\"" +#: commands/sequence.c:1636 +#, c-format msgid "sequence cannot be owned by relation \"%s\"" -msgstr "no se puede mover la relación de sistema «%s»" +msgstr "la secuencia no puede ser poseída por la relación «%s»" -#: commands/sequence.c:1652 +#: commands/sequence.c:1644 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "la secuencia debe tener el mismo dueño que la tabla a la que está enlazada" -#: commands/sequence.c:1656 +#: commands/sequence.c:1648 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "la secuencia debe estar en el mismo esquema que la tabla a la que está enlazada" -#: commands/sequence.c:1678 +#: commands/sequence.c:1670 #, c-format msgid "cannot change ownership of identity sequence" msgstr "no se puede cambiar el dueño de la secuencia de identidad" -#: commands/sequence.c:1679 commands/tablecmds.c:13891 -#: commands/tablecmds.c:16488 +#: commands/sequence.c:1671 commands/tablecmds.c:14486 +#: commands/tablecmds.c:17181 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La secuencia «%s» está enlazada a la tabla «%s»." -#: commands/statscmds.c:109 commands/statscmds.c:118 tcop/utility.c:1886 +#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1883 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "sólo se permite una relación en CREATE STATISTICS" -#: commands/statscmds.c:136 -#, fuzzy, c-format -#| msgid "cannot rewrite system relation \"%s\"" +#: commands/statscmds.c:133 +#, c-format msgid "cannot define statistics for relation \"%s\"" -msgstr "no se puede reescribir la relación de sistema «%s»" +msgstr "no se puede definir estadísticas para la relación «%s»" -#: commands/statscmds.c:190 +#: commands/statscmds.c:187 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "el objeto de estadísticas «%s» ya existe, omitiendo" -#: commands/statscmds.c:198 +#: commands/statscmds.c:195 #, c-format msgid "statistics object \"%s\" already exists" msgstr "el objeto de estadísticas «%s» ya existe" -#: commands/statscmds.c:209 +#: commands/statscmds.c:206 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "no se puede tener más de %d columnas en estadísticas" -#: commands/statscmds.c:250 commands/statscmds.c:273 commands/statscmds.c:307 +#: commands/statscmds.c:247 commands/statscmds.c:270 commands/statscmds.c:304 #, c-format msgid "statistics creation on system columns is not supported" msgstr "la creación de estadísticas en columnas de sistema no está soportada" -#: commands/statscmds.c:257 commands/statscmds.c:280 +#: commands/statscmds.c:254 commands/statscmds.c:277 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "la columna «%s» no puede ser usado en estadísticas porque su tipo %s no tiene una clase de operadores por omisión para btree" -#: commands/statscmds.c:324 +#: commands/statscmds.c:321 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "la expresión no puede ser usada en estadísticas multivariantes porque su tipo %s no tiene una clase de operadores por omisión para btree" -#: commands/statscmds.c:345 +#: commands/statscmds.c:342 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "al crear estadísticas sobre una sola expresión, no se deben especificar tipos de estadísticas" -#: commands/statscmds.c:374 +#: commands/statscmds.c:371 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "tipo de estadísticas «%s» no reconocido" -#: commands/statscmds.c:403 +#: commands/statscmds.c:400 #, c-format msgid "extended statistics require at least 2 columns" msgstr "las estadísticas extendidas requieren al menos 2 columnas" -#: commands/statscmds.c:421 +#: commands/statscmds.c:418 #, c-format msgid "duplicate column name in statistics definition" msgstr "nombre de columna duplicado en definición de estadísticas" -#: commands/statscmds.c:456 +#: commands/statscmds.c:453 #, c-format msgid "duplicate expression in statistics definition" msgstr "expresión duplicada en definición de estadísticas" -#: commands/statscmds.c:619 commands/tablecmds.c:8180 +#: commands/statscmds.c:628 commands/tablecmds.c:8620 #, c-format msgid "statistics target %d is too low" msgstr "el valor de estadísticas %d es demasiado bajo" -#: commands/statscmds.c:627 commands/tablecmds.c:8188 +#: commands/statscmds.c:636 commands/tablecmds.c:8628 #, c-format msgid "lowering statistics target to %d" msgstr "bajando el valor de estadísticas a %d" -#: commands/statscmds.c:650 +#: commands/statscmds.c:660 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s.%s», omitiendo" -#: commands/subscriptioncmds.c:271 commands/subscriptioncmds.c:359 +#: commands/subscriptioncmds.c:275 commands/subscriptioncmds.c:372 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "parámetro de suscripción no reconocido: «%s»" -#: commands/subscriptioncmds.c:327 replication/pgoutput/pgoutput.c:398 -#, fuzzy, c-format -#| msgid "unrecognized section name: \"%s\"" +#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:404 +#, c-format msgid "unrecognized origin value: \"%s\"" -msgstr "nombre de sección «%s» no reconocido" +msgstr "valor de origen no reconocido: «%s»" -#: commands/subscriptioncmds.c:350 -#, fuzzy, c-format -#| msgid "invalid WAL location: \"%s\"" +#: commands/subscriptioncmds.c:363 +#, c-format msgid "invalid WAL location (LSN): %s" -msgstr "ubicación de WAL no válida: «%s»" +msgstr "ubicación de WAL (LSN) no válida: %s" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:374 commands/subscriptioncmds.c:381 -#: commands/subscriptioncmds.c:388 commands/subscriptioncmds.c:410 -#: commands/subscriptioncmds.c:426 +#: commands/subscriptioncmds.c:387 commands/subscriptioncmds.c:394 +#: commands/subscriptioncmds.c:401 commands/subscriptioncmds.c:423 +#: commands/subscriptioncmds.c:439 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s y %s son opciones mutuamente excluyentes" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:416 commands/subscriptioncmds.c:432 +#: commands/subscriptioncmds.c:429 commands/subscriptioncmds.c:445 #, c-format msgid "subscription with %s must also set %s" msgstr "suscripción con %s también debe activar %s" -#: commands/subscriptioncmds.c:494 -#, fuzzy, c-format -#| msgid "could not receive list of replicated tables from the publisher: %s" +#: commands/subscriptioncmds.c:506 +#, c-format msgid "could not receive list of publications from the publisher: %s" -msgstr "no se pudo recibir la lista de tablas replicadas desde el editor (publisher): %s" +msgstr "no se pudo recibir la lista de publicaciones desde el publicador: %s" -#: commands/subscriptioncmds.c:526 -#, fuzzy, c-format -#| msgid "publication \"%s\" does not exist" +#: commands/subscriptioncmds.c:538 +#, c-format msgid "publication %s does not exist on the publisher" msgid_plural "publications %s do not exist on the publisher" -msgstr[0] "no existe la publicación «%s»" -msgstr[1] "no existe la publicación «%s»" +msgstr[0] "no existe la publicación «%s» en el “publisher”" +msgstr[1] "no existen las publicaciones «%s» en el “publisher”" -#: commands/subscriptioncmds.c:614 -#, fuzzy, c-format -#| msgid "permission denied for subscription %s" +#: commands/subscriptioncmds.c:626 +#, c-format msgid "permission denied to create subscription" -msgstr "permiso denegado a la suscripción %s" +msgstr "permiso denegado a crear suscripción" -#: commands/subscriptioncmds.c:615 +#: commands/subscriptioncmds.c:627 #, c-format msgid "Only roles with privileges of the \"%s\" role may create subscriptions." -msgstr "" +msgstr "Sólo los roles con privilegio del rol «%s» pueden crear suscripciones." -#: commands/subscriptioncmds.c:745 commands/subscriptioncmds.c:878 -#: replication/logical/tablesync.c:1304 replication/logical/worker.c:4616 +#: commands/subscriptioncmds.c:758 commands/subscriptioncmds.c:891 +#: commands/subscriptioncmds.c:1524 replication/logical/tablesync.c:1345 +#: replication/logical/worker.c:4503 #, c-format msgid "could not connect to the publisher: %s" -msgstr "no se pudo connectar con el editor (publisher): %s" +msgstr "no se pudo connectar con el publicador: %s" -#: commands/subscriptioncmds.c:816 +#: commands/subscriptioncmds.c:829 #, c-format msgid "created replication slot \"%s\" on publisher" -msgstr "se creó el slot de replicación «%s» en el editor (publisher)" +msgstr "se creó el slot de replicación «%s» en el publicador" -#: commands/subscriptioncmds.c:828 -#, fuzzy, c-format -#| msgid "subscription has no replication slot set" +#: commands/subscriptioncmds.c:841 +#, c-format msgid "subscription was created, but is not connected" -msgstr "la suscripción no tiene un slot de replicación establecido" +msgstr "la suscripción fue creada, pero no está conectada" -#: commands/subscriptioncmds.c:829 +#: commands/subscriptioncmds.c:842 #, c-format msgid "To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription." -msgstr "" +msgstr "Para iniciar la replicacióñ, debe manualmente crear el slot de replicación, activar la suscripción, y refrescar la suscripción." -#: commands/subscriptioncmds.c:1096 commands/subscriptioncmds.c:1502 -#: commands/subscriptioncmds.c:1885 utils/cache/lsyscache.c:3642 +#: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1590 +#: commands/subscriptioncmds.c:1973 utils/cache/lsyscache.c:3684 #, c-format msgid "subscription \"%s\" does not exist" msgstr "no existe la suscripción «%s»" -#: commands/subscriptioncmds.c:1152 +#: commands/subscriptioncmds.c:1166 commands/subscriptioncmds.c:1245 #, c-format msgid "cannot set %s for enabled subscription" msgstr "no se puede establecer %s para la suscripción activada" -#: commands/subscriptioncmds.c:1227 +#: commands/subscriptioncmds.c:1233 +#, c-format +msgid "cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "no se puede definir la opción «%s” para una suscripción que no tiene un nombre de slot" + +#: commands/subscriptioncmds.c:1279 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "no se puede habilitar la suscripción que no tiene un nombre de slot" -#: commands/subscriptioncmds.c:1271 commands/subscriptioncmds.c:1322 +#: commands/subscriptioncmds.c:1323 commands/subscriptioncmds.c:1374 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION con actualización no está permitido para las suscripciones desactivadas" -#: commands/subscriptioncmds.c:1272 +#: commands/subscriptioncmds.c:1324 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:1281 commands/subscriptioncmds.c:1336 -#, fuzzy, c-format -#| msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" +#: commands/subscriptioncmds.c:1333 commands/subscriptioncmds.c:1388 +#, c-format msgid "ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled" -msgstr "ALTER SUBSCRIPTION con actualización no está permitido para las suscripciones desactivadas" +msgstr "ALTER SUBSCRIPTION con «refresh» y «copy_data» no está permitido cuando «two_phase» está activo" -#: commands/subscriptioncmds.c:1282 -#, fuzzy, c-format -#| msgid "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/CREATE SUBSCRIPTION." +#: commands/subscriptioncmds.c:1334 +#, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." -msgstr "Use ALTER SUBSCRIPTION ... REFRESH con copy_data = false, o use DROP/CREATE SUBSCRIPTION." - -#. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1324 -#, fuzzy, c-format -#| msgid "Use views instead." -msgid "Use %s instead." -msgstr "Use vistas en su lugar." +msgstr "Use ALTER SUBSCRIPTION ... SET PUBLICATION con refresh = false, o con copy_data=false, o use DROP/CREATE SUBSCRIPTION." #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1338 -#, fuzzy, c-format -#| msgid "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/CREATE SUBSCRIPTION." +#: commands/subscriptioncmds.c:1390 +#, c-format msgid "Use %s with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." -msgstr "Use ALTER SUBSCRIPTION ... REFRESH con copy_data = false, o use DROP/CREATE SUBSCRIPTION." +msgstr "Use %s con refresh = false, o con copy_data = false, o use DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1360 +#: commands/subscriptioncmds.c:1412 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH no está permitido para las suscripciones desactivadas" -#: commands/subscriptioncmds.c:1385 -#, fuzzy, c-format -#| msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" +#: commands/subscriptioncmds.c:1437 +#, c-format msgid "ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase is enabled" -msgstr "ALTER SUBSCRIPTION ... REFRESH no está permitido para las suscripciones desactivadas" +msgstr "ALTER SUBSCRIPTION ... REFRESH con copy_data no está permitido cuando two_phase está activo" -#: commands/subscriptioncmds.c:1386 +#: commands/subscriptioncmds.c:1438 #, c-format msgid "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "Use ALTER SUBSCRIPTION ... REFRESH con copy_data = false, o use DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1421 +#: commands/subscriptioncmds.c:1473 #, c-format msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X" msgstr "la ubicación de WAL a saltar (LSN %X/%X) debe ser mayor que el LSN de origen %X/%X" -#: commands/subscriptioncmds.c:1506 +#: commands/subscriptioncmds.c:1594 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "no existe la suscripción «%s», omitiendo" -#: commands/subscriptioncmds.c:1775 +#: commands/subscriptioncmds.c:1863 #, c-format msgid "dropped replication slot \"%s\" on publisher" -msgstr "eliminando el slot de replicación «%s» en editor (publisher)" +msgstr "eliminando el slot de replicación «%s» en publicador" -#: commands/subscriptioncmds.c:1784 commands/subscriptioncmds.c:1792 +#: commands/subscriptioncmds.c:1872 commands/subscriptioncmds.c:1880 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" -msgstr "no se pudo eliminar el slot de replicación «%s» en editor (publisher): %s" +msgstr "no se pudo eliminar el slot de replicación «%s» en publicador: %s" -#: commands/subscriptioncmds.c:1917 +#: commands/subscriptioncmds.c:2005 #, c-format msgid "subscription with OID %u does not exist" msgstr "no existe la suscripción con OID %u" -#: commands/subscriptioncmds.c:1988 commands/subscriptioncmds.c:2113 +#: commands/subscriptioncmds.c:2076 commands/subscriptioncmds.c:2201 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" -msgstr "no se pudo recibir la lista de tablas replicadas desde el editor (publisher): %s" +msgstr "no se pudo recibir la lista de tablas replicadas desde el publicador: %s" -#: commands/subscriptioncmds.c:2024 +#: commands/subscriptioncmds.c:2112 #, c-format msgid "subscription \"%s\" requested copy_data with origin = NONE but might copy data that had a different origin" -msgstr "" +msgstr "la suscripción «%s» pidió copy_data con origin = NONE pero podría copiar datos que tenían un origen diferente" -#: commands/subscriptioncmds.c:2026 -#, fuzzy, c-format -#| msgid "relation \"%s\" is not part of the publication" -msgid "Subscribed publication %s is subscribing to other publications." -msgid_plural "Subscribed publications %s are subscribing to other publications." -msgstr[0] "relación «%s» no es parte de la publicación" -msgstr[1] "relación «%s» no es parte de la publicación" +#: commands/subscriptioncmds.c:2114 +#, c-format +msgid "The subscription being created subscribes to a publication (%s) that contains tables that are written to by other subscriptions." +msgid_plural "The subscription being created subscribes to publications (%s) that contain tables that are written to by other subscriptions." +msgstr[0] "La suscripción que está siendo creada suscribe a una publicación (%s) que contiene tablas que están siendo escritas por otras suscripciones." +msgstr[1] "La suscripción que está siendo creada suscribe a publicaciones (%s) que contienen tablas que están siendo escritas por otras suscripciones." -#: commands/subscriptioncmds.c:2029 +#: commands/subscriptioncmds.c:2117 #, c-format msgid "Verify that initial data copied from the publisher tables did not come from other origins." -msgstr "" +msgstr "Verifique que los datos iniciales copiados desde el publicador no vinieron de otros orígenes." -#: commands/subscriptioncmds.c:2135 replication/logical/tablesync.c:875 -#: replication/pgoutput/pgoutput.c:1115 -#, fuzzy, c-format -#| msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" +#: 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 "no se puede usar ONLY para una llave foránea en la tabla particionada «%s» haciendo referencia a la relación «%s»" +msgstr "no se puede usar distintas listas de columnas para la tabla «%s.%s» en distintas publicaciones" -#: commands/subscriptioncmds.c:2185 +#: commands/subscriptioncmds.c:2273 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" -msgstr "no se pudo conectar con el editor (publisher) al intentar eliminar el slot de replicación \"%s\": %s" +msgstr "no se pudo conectar con el publicador al intentar eliminar el slot de replicación \"%s\": %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:2188 +#: commands/subscriptioncmds.c:2276 #, c-format -msgid "Use %s to disassociate the subscription from the slot." -msgstr "Use %s para disociar la suscripción del slot." +msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." +msgstr "Use %s para desactivar la suscripción, luego use %s para disociarla del slot." -#: commands/subscriptioncmds.c:2218 +#: commands/subscriptioncmds.c:2307 #, c-format msgid "publication name \"%s\" used more than once" msgstr "nombre de publicación «%s» usado más de una vez" -#: commands/subscriptioncmds.c:2262 +#: commands/subscriptioncmds.c:2351 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "la publicación «%s» ya existe en la suscripción «%s»" -#: commands/subscriptioncmds.c:2276 +#: commands/subscriptioncmds.c:2365 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "la publicación «%s» no está en la suscripción «%s»" -#: commands/subscriptioncmds.c:2287 +#: commands/subscriptioncmds.c:2376 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "no se puede eliminar todas las publicaciones de una suscripción" -#: commands/subscriptioncmds.c:2344 -#, fuzzy, c-format -#| msgid "%s requires a Boolean value" +#: commands/subscriptioncmds.c:2433 +#, c-format msgid "%s requires a Boolean value or \"parallel\"" -msgstr "«%s» requiere un valor lógico (booleano)" +msgstr "«%s» requiere un valor lógico (booleano) o “parallel”" -#: commands/tablecmds.c:246 commands/tablecmds.c:288 +#: commands/tablecmds.c:255 commands/tablecmds.c:297 #, c-format msgid "table \"%s\" does not exist" msgstr "no existe la tabla «%s»" -#: commands/tablecmds.c:247 commands/tablecmds.c:289 +#: commands/tablecmds.c:256 commands/tablecmds.c:298 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "la tabla «%s» no existe, omitiendo" -#: commands/tablecmds.c:249 commands/tablecmds.c:291 +#: commands/tablecmds.c:258 commands/tablecmds.c:300 msgid "Use DROP TABLE to remove a table." msgstr "Use DROP TABLE para eliminar una tabla." -#: commands/tablecmds.c:252 +#: commands/tablecmds.c:261 #, c-format msgid "sequence \"%s\" does not exist" msgstr "no existe la secuencia «%s»" -#: commands/tablecmds.c:253 +#: commands/tablecmds.c:262 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "la secuencia «%s» no existe, omitiendo" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:264 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Use DROP SEQUENCE para eliminar una secuencia." -#: commands/tablecmds.c:258 +#: commands/tablecmds.c:267 #, c-format msgid "view \"%s\" does not exist" msgstr "no existe la vista «%s»" -#: commands/tablecmds.c:259 +#: commands/tablecmds.c:268 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "la vista «%s» no existe, omitiendo" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:270 msgid "Use DROP VIEW to remove a view." msgstr "Use DROP VIEW para eliminar una vista." -#: commands/tablecmds.c:264 +#: commands/tablecmds.c:273 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "no existe la vista materializada «%s»" -#: commands/tablecmds.c:265 +#: commands/tablecmds.c:274 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "la vista materializada «%s» no existe, omitiendo" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:276 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Use DROP MATERIALIZED VIEW para eliminar una vista materializada." -#: commands/tablecmds.c:270 commands/tablecmds.c:294 commands/tablecmds.c:19002 -#: parser/parse_utilcmd.c:2245 +#: 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 "no existe el índice «%s»" -#: commands/tablecmds.c:271 commands/tablecmds.c:295 +#: commands/tablecmds.c:280 commands/tablecmds.c:304 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "el índice «%s» no existe, omitiendo" -#: commands/tablecmds.c:273 commands/tablecmds.c:297 +#: commands/tablecmds.c:282 commands/tablecmds.c:306 msgid "Use DROP INDEX to remove an index." msgstr "Use DROP INDEX para eliminar un índice." -#: commands/tablecmds.c:278 +#: commands/tablecmds.c:287 #, c-format msgid "\"%s\" is not a type" msgstr "«%s» no es un tipo" -#: commands/tablecmds.c:279 +#: commands/tablecmds.c:288 msgid "Use DROP TYPE to remove a type." msgstr "Use DROP TYPE para eliminar un tipo." -#: commands/tablecmds.c:282 commands/tablecmds.c:13730 -#: commands/tablecmds.c:16193 +#: commands/tablecmds.c:291 commands/tablecmds.c:14325 +#: commands/tablecmds.c:16886 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "no existe la tabla foránea «%s»" -#: commands/tablecmds.c:283 +#: commands/tablecmds.c:292 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "la tabla foránea «%s» no existe, omitiendo" -#: commands/tablecmds.c:285 +#: commands/tablecmds.c:294 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Use DROP FOREIGN TABLE para eliminar una tabla foránea." -#: commands/tablecmds.c:700 +#: commands/tablecmds.c:734 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT sólo puede ser usado en tablas temporales" -#: commands/tablecmds.c:731 +#: commands/tablecmds.c:765 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/tablecmds.c:767 commands/tablecmds.c:15038 +#: commands/tablecmds.c:801 commands/tablecmds.c:15745 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "se heredaría de la relación «%s» más de una vez" -#: commands/tablecmds.c:955 -#, c-format -msgid "specifying a table access method is not supported on a partitioned table" -msgstr "especificar un método de acceso de tablas no está soportado en tablas particionadas" - -#: commands/tablecmds.c:1048 +#: commands/tablecmds.c:1067 #, c-format msgid "\"%s\" is not partitioned" msgstr "«%s» no está particionada" -#: commands/tablecmds.c:1142 +#: commands/tablecmds.c:1161 #, c-format msgid "cannot partition using more than %d columns" msgstr "no se puede particionar usando más de %d columnas" -#: commands/tablecmds.c:1198 +#: commands/tablecmds.c:1217 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "no se puede crear una partición foránea en la tabla particionada «%s»" -#: commands/tablecmds.c:1200 +#: commands/tablecmds.c:1219 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La tabla «%s» contiene índices que son únicos." -#: commands/tablecmds.c:1365 +#: commands/tablecmds.c:1338 commands/tablecmds.c:13341 #, c-format -msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" +msgid "too many array dimensions" +msgstr "demasiadas dimensiones de array" + +#: commands/tablecmds.c:1343 parser/parse_clause.c:774 +#: parser/parse_relation.c:1912 +#, c-format +msgid "column \"%s\" cannot be declared SETOF" +msgstr "la columna «%s» no puede ser declarada SETOF" + +#: commands/tablecmds.c:1489 +#, c-format +msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY no soporta eliminar múltiples objetos" -#: commands/tablecmds.c:1369 +#: commands/tablecmds.c:1493 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY no soporta CASCADE" -#: commands/tablecmds.c:1473 +#: commands/tablecmds.c:1597 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "no se puede eliminar el índice particionado «%s» concurrentemente" -#: commands/tablecmds.c:1761 +#: commands/tablecmds.c:1885 #, c-format msgid "cannot truncate only a partitioned table" msgstr "no se puede truncar ONLY una tabla particionada" -#: commands/tablecmds.c:1762 +#: commands/tablecmds.c:1886 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "No especifique la opción ONLY, o ejecute TRUNCATE ONLY en las particiones directamente." -#: commands/tablecmds.c:1835 +#: commands/tablecmds.c:1959 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncando además la tabla «%s»" -#: commands/tablecmds.c:2199 +#: commands/tablecmds.c:2320 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "no se puede truncar la tabla foránea «%s»" -#: commands/tablecmds.c:2256 +#: commands/tablecmds.c:2377 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "no se pueden truncar tablas temporales de otras sesiones" -#: commands/tablecmds.c:2488 commands/tablecmds.c:14935 +#: commands/tablecmds.c:2606 commands/tablecmds.c:15642 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "no se puede heredar de la tabla particionada «%s»" -#: commands/tablecmds.c:2493 +#: commands/tablecmds.c:2611 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "no se puede heredar de la partición «%s»" -#: commands/tablecmds.c:2501 parser/parse_utilcmd.c:2475 -#: parser/parse_utilcmd.c:2617 +#: 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 "la relación heredada «%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:2513 +#: commands/tablecmds.c:2631 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede crear una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:2522 commands/tablecmds.c:14914 +#: commands/tablecmds.c:2640 commands/tablecmds.c:15621 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "no se puede heredar de la tabla temporal «%s»" -#: commands/tablecmds.c:2532 commands/tablecmds.c:14922 +#: commands/tablecmds.c:2650 commands/tablecmds.c:15629 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "no se puede heredar de una tabla temporal de otra sesión" -#: commands/tablecmds.c:2585 +#: 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 "merging multiple inherited definitions of column \"%s\"" -msgstr "mezclando múltiples definiciones heredadas de la columna «%s»" +msgid "cannot convert whole-row table reference" +msgstr "no se puede convertir una referencia a la fila completa (whole-row)" -#: commands/tablecmds.c:2597 +#: commands/tablecmds.c:2792 parser/parse_utilcmd.c:1266 #, c-format -msgid "inherited column \"%s\" has a type conflict" -msgstr "columna heredada «%s» tiene conflicto de tipos" +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "La expresión de generación para la columna «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2599 commands/tablecmds.c:2628 -#: commands/tablecmds.c:2647 commands/tablecmds.c:2919 -#: commands/tablecmds.c:2955 commands/tablecmds.c:2971 -#: 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:2846 parser/parse_utilcmd.c:1309 #, c-format -msgid "%s versus %s" -msgstr "%s versus %s" +msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "La restricción «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2612 +#: commands/tablecmds.c:2956 commands/tablecmds.c:3227 #, c-format -msgid "inherited column \"%s\" has a collation conflict" -msgstr "columna heredada «%s» tiene conflicto de ordenamiento (collation)" +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "la columna «%s» hereda de una columna generada pero especifica un valor por omisión" -#: commands/tablecmds.c:2614 commands/tablecmds.c:2935 -#: commands/tablecmds.c:6849 +#: commands/tablecmds.c:2961 commands/tablecmds.c:3232 #, c-format -msgid "\"%s\" versus \"%s\"" -msgstr "«%s» versus «%s»" +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "la columna «%s» hereda de una columna generada pero especifica una identidad" -#: commands/tablecmds.c:2626 +#: commands/tablecmds.c:2969 commands/tablecmds.c:3240 #, c-format -msgid "inherited column \"%s\" has a storage parameter conflict" -msgstr "columna heredada «%s» tiene conflicto de parámetros de almacenamiento" +msgid "child column \"%s\" specifies generation expression" +msgstr "la columna hija «%s» especifica una expresión de generación de columna" -#: commands/tablecmds.c:2645 commands/tablecmds.c:2969 +#: commands/tablecmds.c:2971 commands/tablecmds.c:3242 #, c-format -msgid "column \"%s\" has a compression method conflict" -msgstr "la columna «%s» tiene conflicto de método de compresión" +msgid "A child table column cannot be generated unless its parent column is." +msgstr "Una columna de tabla hija no puede ser generada a menos que su columna padre lo sea." -#: commands/tablecmds.c:2661 +#: commands/tablecmds.c:3017 #, c-format -msgid "inherited column \"%s\" has a generation conflict" -msgstr "columna heredada «%s» tiene conflicto de generación" +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "la columna «%s» hereda expresiones de generación en conflicto" -#: commands/tablecmds.c:2767 commands/tablecmds.c:2822 -#: commands/tablecmds.c:12456 parser/parse_utilcmd.c:1298 -#: parser/parse_utilcmd.c:1341 parser/parse_utilcmd.c:1740 -#: parser/parse_utilcmd.c:1848 +#: commands/tablecmds.c:3019 #, c-format -msgid "cannot convert whole-row table reference" -msgstr "no se puede convertir una referencia a la fila completa (whole-row)" +msgid "To resolve the conflict, specify a generation expression explicitly." +msgstr "Para resolver el conflicto, indique explícitamente una expresión de generación." -#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1299 +#: commands/tablecmds.c:3023 #, c-format -msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "La expresión de generación para la columna «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." +msgid "column \"%s\" inherits conflicting default values" +msgstr "la columna «%s» hereda valores por omisión no coincidentes" -#: commands/tablecmds.c:2823 parser/parse_utilcmd.c:1342 +#: commands/tablecmds.c:3025 #, c-format -msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "La restricción «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." +msgid "To resolve the conflict, specify a default explicitly." +msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." + +#: commands/tablecmds.c:3080 +#, c-format +msgid "check constraint name \"%s\" appears multiple times but with different expressions" +msgstr "la restricción «check» «%s» aparece más de una vez con diferentes expresiones" -#: commands/tablecmds.c:2901 +#: commands/tablecmds.c:3131 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2905 +#: commands/tablecmds.c:3135 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "moviendo y mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2906 +#: commands/tablecmds.c:3136 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "La columna especificada por el usuario fue movida a la posición de la columna heredada." -#: commands/tablecmds.c:2917 +#: commands/tablecmds.c:3148 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la columna «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2933 +#: 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 versus %s" + +#: commands/tablecmds.c:3162 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" -#: commands/tablecmds.c:2953 +#: commands/tablecmds.c:3164 commands/tablecmds.c:3326 +#: commands/tablecmds.c:7080 #, c-format -msgid "column \"%s\" has a storage parameter conflict" -msgstr "la columna «%s» tiene conflicto de parámetros de almacenamiento" +msgid "\"%s\" versus \"%s\"" +msgstr "«%s» versus «%s»" -#: commands/tablecmds.c:2999 commands/tablecmds.c:3086 +#: commands/tablecmds.c:3182 #, c-format -msgid "column \"%s\" inherits from generated column but specifies default" -msgstr "la columna «%s» hereda de una columna generada pero especifica un valor por omisión" +msgid "column \"%s\" has a storage parameter conflict" +msgstr "la columna «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:3004 commands/tablecmds.c:3091 +#: commands/tablecmds.c:3198 commands/tablecmds.c:3354 #, c-format -msgid "column \"%s\" inherits from generated column but specifies identity" -msgstr "la columna «%s» hereda de una columna generada pero especifica una identidad" +msgid "column \"%s\" has a compression method conflict" +msgstr "la columna «%s» tiene conflicto de método de compresión" -#: commands/tablecmds.c:3012 commands/tablecmds.c:3099 +#: commands/tablecmds.c:3293 #, c-format -msgid "child column \"%s\" specifies generation expression" -msgstr "la columna hija «%s» especifica una expresión de generación de columna" - -#: commands/tablecmds.c:3014 commands/tablecmds.c:3101 -#, fuzzy, c-format -#| msgid "A generated column cannot reference another generated column." -msgid "A child table column cannot be generated unless its parent column is." -msgstr "Una columna generada no puede hacer referencia a otra columna generada." +msgid "merging multiple inherited definitions of column \"%s\"" +msgstr "mezclando múltiples definiciones heredadas de la columna «%s»" -#: commands/tablecmds.c:3147 +#: commands/tablecmds.c:3305 #, c-format -msgid "column \"%s\" inherits conflicting generation expressions" -msgstr "la columna «%s» hereda expresiones de generación en conflicto" - -#: commands/tablecmds.c:3149 -#, fuzzy, c-format -#| msgid "To resolve the conflict, specify a default explicitly." -msgid "To resolve the conflict, specify a generation expression explicitly." -msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." +msgid "inherited column \"%s\" has a type conflict" +msgstr "columna heredada «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:3153 +#: commands/tablecmds.c:3324 #, c-format -msgid "column \"%s\" inherits conflicting default values" -msgstr "la columna «%s» hereda valores por omisión no coincidentes" +msgid "inherited column \"%s\" has a collation conflict" +msgstr "columna heredada «%s» tiene conflicto de ordenamiento (collation)" -#: commands/tablecmds.c:3155 +#: commands/tablecmds.c:3338 #, c-format -msgid "To resolve the conflict, specify a default explicitly." -msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." +msgid "inherited column \"%s\" has a storage parameter conflict" +msgstr "columna heredada «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:3205 +#: commands/tablecmds.c:3366 #, c-format -msgid "check constraint name \"%s\" appears multiple times but with different expressions" -msgstr "la restricción «check» «%s» aparece más de una vez con diferentes expresiones" +msgid "inherited column \"%s\" has a generation conflict" +msgstr "columna heredada «%s» tiene conflicto de generación" -#: commands/tablecmds.c:3418 +#: commands/tablecmds.c:3597 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "no se pueden mover tablas temporales de otras sesiones" -#: commands/tablecmds.c:3488 +#: commands/tablecmds.c:3670 #, c-format msgid "cannot rename column of typed table" msgstr "no se puede cambiar el nombre a una columna de una tabla tipada" -#: commands/tablecmds.c:3507 -#, fuzzy, c-format -#| msgid "cannot alter inherited column \"%s\" of relation \"%s\"" +#: commands/tablecmds.c:3689 +#, c-format msgid "cannot rename columns of relation \"%s\"" -msgstr "no se puede alterar la columna heredada «%s» de la relación «%s»" +msgstr "no se puede cambiar el nombre de columnas de la relación «%s»" -#: commands/tablecmds.c:3602 +#: commands/tablecmds.c:3784 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3634 +#: commands/tablecmds.c:3816 #, c-format msgid "cannot rename system column \"%s\"" msgstr "no se puede cambiar el nombre a la columna de sistema «%s»" -#: commands/tablecmds.c:3649 +#: commands/tablecmds.c:3831 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "no se puede cambiar el nombre a la columna heredada «%s»" -#: commands/tablecmds.c:3801 +#: commands/tablecmds.c:3983 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la restricción heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3808 +#: commands/tablecmds.c:3990 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "no se puede cambiar el nombre a la restricción heredada «%s»" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4105 +#: commands/tablecmds.c:4290 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "no se puede hacer %s en «%s» porque está siendo usada por consultas activas en esta sesión" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4114 +#: commands/tablecmds.c:4299 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" -msgstr "no se puede hacer %s en «%s» porque tiene eventos de disparador pendientes" +msgstr "no se puede hacer %s en «%s» porque tiene eventos de “trigger” pendientes" + +#: commands/tablecmds.c:4325 +#, c-format +msgid "cannot alter temporary tables of other sessions" +msgstr "no se pueden alterar tablas temporales de otras sesiones" -#: commands/tablecmds.c:4581 +#: commands/tablecmds.c:4798 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "no se puede modificar la partición «%s» teniendo un desprendimiento incompleto" -#: commands/tablecmds.c:4774 commands/tablecmds.c:4789 +#: commands/tablecmds.c:5002 commands/tablecmds.c:5017 #, c-format msgid "cannot change persistence setting twice" msgstr "no se puede cambiar la opción de persistencia dos veces" -#: commands/tablecmds.c:4810 -#, fuzzy, c-format -#| msgid "cannot change inheritance of partitioned table" -msgid "cannot change access method of a partitioned table" -msgstr "no se puede cambiar la herencia de una tabla particionada" - -#: commands/tablecmds.c:4816 -#, fuzzy, c-format -#| msgid "cannot have multiple SET TABLESPACE subcommands" +#: commands/tablecmds.c:5038 +#, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" -msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" +msgstr "no se pueden tener múltiples subórdenes SET ACCESS METHOD" -#: commands/tablecmds.c:5537 +#: commands/tablecmds.c:5768 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "no se puede reescribir la relación de sistema «%s»" -#: commands/tablecmds.c:5543 +#: commands/tablecmds.c:5774 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "no se puede reescribir la tabla «%s» que es usada como tabla de catálogo" -#: commands/tablecmds.c:5553 +#: commands/tablecmds.c:5786 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "no se puede reescribir tablas temporales de otras sesiones" -#: commands/tablecmds.c:6048 +#: commands/tablecmds.c:6281 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "la columna «%s» de la relación «%s» contiene valores null" -#: commands/tablecmds.c:6065 +#: commands/tablecmds.c:6298 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "la restricción check «%s» de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:6084 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 "la restricción de partición actualizada para la partición default «%s» sería violada por alguna fila" -#: commands/tablecmds.c:6090 +#: commands/tablecmds.c:6323 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "la restricción de partición de la relación «%s» es violada por alguna fila" #. translator: %s is a group of some SQL keywords -#: commands/tablecmds.c:6352 -#, fuzzy, c-format -#| msgid "relation \"%s\" is not a parent of relation \"%s\"" +#: commands/tablecmds.c:6588 +#, c-format msgid "ALTER action %s cannot be performed on relation \"%s\"" -msgstr "relación «%s» no es un padre de la relación «%s»" +msgstr "la acción ALTER %s no puede ser efecutada en la relación «%s»" -#: commands/tablecmds.c:6607 commands/tablecmds.c:6614 +#: commands/tablecmds.c:6843 commands/tablecmds.c:6850 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "no se puede alterar el tipo «%s» porque la columna «%s.%s» lo usa" -#: commands/tablecmds.c:6621 +#: commands/tablecmds.c:6857 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla foránea «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:6628 +#: commands/tablecmds.c:6864 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:6684 +#: commands/tablecmds.c:6920 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "no se puede cambiar el tipo «%s» porque es el tipo de una tabla tipada" -#: commands/tablecmds.c:6686 +#: commands/tablecmds.c:6922 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Use ALTER ... CASCADE para eliminar además las tablas tipadas." -#: commands/tablecmds.c:6732 +#: commands/tablecmds.c:6968 #, c-format msgid "type %s is not a composite type" msgstr "el tipo %s no es un tipo compuesto" -#: commands/tablecmds.c:6759 +#: commands/tablecmds.c:6995 #, c-format msgid "cannot add column to typed table" msgstr "no se puede agregar una columna a una tabla tipada" -#: commands/tablecmds.c:6812 +#: commands/tablecmds.c:7043 #, c-format msgid "cannot add column to a partition" msgstr "no se puede agregar una columna a una partición" -#: commands/tablecmds.c:6841 commands/tablecmds.c:15165 +#: commands/tablecmds.c:7072 commands/tablecmds.c:15860 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la tabla hija «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:6847 commands/tablecmds.c:15172 +#: commands/tablecmds.c:7078 commands/tablecmds.c:15866 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la tabla hija «%s» tiene un ordenamiento (collation) diferente para la columna «%s»" -#: commands/tablecmds.c:6865 +#: commands/tablecmds.c:7096 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "mezclando la definición de la columna «%s» en la tabla hija «%s»" -#: commands/tablecmds.c:6908 +#: commands/tablecmds.c:7149 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "no se puede agregar una columna de identidad recursivamente a una tabla que tiene tablas hijas" -#: commands/tablecmds.c:7159 +#: commands/tablecmds.c:7362 #, c-format msgid "column must be added to child tables too" msgstr "la columna debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:7237 +#: commands/tablecmds.c:7440 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la columna «%s» de la relación «%s» ya existe, omitiendo" -#: commands/tablecmds.c:7244 +#: commands/tablecmds.c:7447 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ya existe la columna «%s» en la relación «%s»" -#: commands/tablecmds.c:7310 commands/tablecmds.c:12094 +#: commands/tablecmds.c:7513 commands/tablecmds.c:12652 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "no se pueden eliminar restricciones sólo de la tabla particionada cuando existen particiones" -#: commands/tablecmds.c:7311 commands/tablecmds.c:7628 -#: commands/tablecmds.c:8593 commands/tablecmds.c:12095 +#: 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 "No especifique la opción ONLY." -#: commands/tablecmds.c:7348 commands/tablecmds.c:7554 -#: commands/tablecmds.c:7696 commands/tablecmds.c:7810 -#: commands/tablecmds.c:7904 commands/tablecmds.c:7963 -#: commands/tablecmds.c:8082 commands/tablecmds.c:8221 -#: commands/tablecmds.c:8291 commands/tablecmds.c:8425 -#: commands/tablecmds.c:12249 commands/tablecmds.c:13753 -#: commands/tablecmds.c:16282 +#: 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 "no se puede alterar columna de sistema «%s»" -#: commands/tablecmds.c:7354 commands/tablecmds.c:7702 +#: commands/tablecmds.c:7556 commands/tablecmds.c:7902 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la columna «%s» en la relación «%s» es una columna de identidad" -#: commands/tablecmds.c:7397 +#: commands/tablecmds.c:7597 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la columna «%s» está en la llave primaria" -#: commands/tablecmds.c:7402 +#: commands/tablecmds.c:7602 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "la columna «%s» se encuentra en un índice utilizado como identidad de réplica" -#: commands/tablecmds.c:7425 +#: commands/tablecmds.c:7625 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "columna «%s» está marcada NOT NULL en la tabla padre" -#: commands/tablecmds.c:7625 commands/tablecmds.c:9077 +#: commands/tablecmds.c:7825 commands/tablecmds.c:9533 #, c-format msgid "constraint must be added to child tables too" msgstr "la restricción debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:7626 +#: commands/tablecmds.c:7826 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "La columna «%s» de la relación «%s» no está previamente marcada NOT NULL." -#: commands/tablecmds.c:7704 -#, c-format -msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." -msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY en su lugar." - -#: commands/tablecmds.c:7709 +#: commands/tablecmds.c:7911 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la columna «%s» en la relación «%s» es una columna generada" -#: commands/tablecmds.c:7712 +#: commands/tablecmds.c:8005 #, c-format -msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." -msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION en su lugar." +msgid "cannot add identity to a column of only the partitioned table" +msgstr "no se puede agregar identidad a una columna de sólo una tabla particionada" -#: commands/tablecmds.c:7821 +#: commands/tablecmds.c:8011 +#, c-format +msgid "cannot add identity to a column of a partition" +msgstr "no se puede agregar identidad a una columna de una partición" + +#: commands/tablecmds.c:8039 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la columna «%s» en la relación «%s» debe ser declarada NOT NULL antes de que una identidad pueda agregarse" -#: commands/tablecmds.c:7827 +#: commands/tablecmds.c:8045 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la columna «%s» en la relación «%s» ya es una columna de identidad" -#: commands/tablecmds.c:7833 +#: commands/tablecmds.c:8051 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la columna «%s» en la relación «%s» ya tiene un valor por omisión" -#: commands/tablecmds.c:7910 commands/tablecmds.c:7971 +#: commands/tablecmds.c:8112 +#, c-format +msgid "cannot change identity column of only the partitioned table" +msgstr "no se puede cambiar la columna de identidad de una tabla particionada" + +#: commands/tablecmds.c:8118 +#, c-format +msgid "cannot change identity column of a partition" +msgstr "no puede cambiar la columna de identidad de una partición" + +#: commands/tablecmds.c:8163 commands/tablecmds.c:8259 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la columna «%s» en la relación «%s» no es una columna identidad" -#: commands/tablecmds.c:7976 +#: commands/tablecmds.c:8229 +#, c-format +msgid "cannot drop identity from a column of only the partitioned table" +msgstr "no se pueden eliminar la identidad de la columna de sólo una tabla particionada" + +#: commands/tablecmds.c:8235 +#, c-format +msgid "cannot drop identity from a column of a partition" +msgstr "no se puede eliminar la identidad de la columna de una partición" + +#: commands/tablecmds.c:8264 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna identidad, omitiendo" -#: commands/tablecmds.c:8029 +#: commands/tablecmds.c:8358 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a generated column" +msgstr "la columna «%s» en la relación «%s» no es una columna generada" + +#: commands/tablecmds.c:8456 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION se debe aplicar a las tablas hijas también" -#: commands/tablecmds.c:8051 +#: commands/tablecmds.c:8478 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "no se puede eliminar la expresión de generación de una columna heredada" -#: commands/tablecmds.c:8090 +#: commands/tablecmds.c:8517 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "la columna «%s» en la relación «%s» no es una columna generada almacenada" -#: commands/tablecmds.c:8095 +#: commands/tablecmds.c:8522 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna generada almacenada, omitiendo" -#: commands/tablecmds.c:8168 +#: commands/tablecmds.c:8600 #, c-format msgid "cannot refer to non-index column by number" msgstr "no se puede referir a columnas que no son de índice por número" -#: commands/tablecmds.c:8211 +#: commands/tablecmds.c:8652 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "no existe la columna número %d en la relación «%s»" -#: commands/tablecmds.c:8230 +#: commands/tablecmds.c:8671 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna incluida «%s» del índice «%s»" -#: commands/tablecmds.c:8235 +#: commands/tablecmds.c:8676 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna no-de-expresión «%s» del índice «%s»" -#: commands/tablecmds.c:8237 +#: commands/tablecmds.c:8678 #, c-format msgid "Alter statistics on table column instead." msgstr "Altere las estadísticas en la columna de la tabla en su lugar." -#: commands/tablecmds.c:8472 +#: commands/tablecmds.c:8924 #, c-format msgid "cannot drop column from typed table" msgstr "no se pueden eliminar columnas de una tabla tipada" -#: commands/tablecmds.c:8531 +#: commands/tablecmds.c:8987 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la columna «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:8544 +#: commands/tablecmds.c:9000 #, c-format msgid "cannot drop system column \"%s\"" msgstr "no se puede eliminar la columna de sistema «%s»" -#: commands/tablecmds.c:8554 +#: commands/tablecmds.c:9010 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "no se puede eliminar la columna heredada «%s»" -#: commands/tablecmds.c:8567 +#: commands/tablecmds.c:9023 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede eliminar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:8592 +#: commands/tablecmds.c:9048 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "no se pueden eliminar columnas sólo de una tabla particionada cuando existe particiones" -#: commands/tablecmds.c:8797 +#: 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 no está soportado en tablas particionadas" -#: commands/tablecmds.c:8822 +#: 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 renombrará el índice «%s» a «%s»" -#: commands/tablecmds.c:9159 +#: commands/tablecmds.c:9615 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede usar ONLY para una llave foránea en la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:9165 +#: commands/tablecmds.c:9621 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede agregar una llave foránea NOT VALID a la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:9168 +#: commands/tablecmds.c:9624 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Esta característica no está aún soportada en tablas particionadas." -#: commands/tablecmds.c:9175 commands/tablecmds.c:9631 +#: commands/tablecmds.c:9631 commands/tablecmds.c:10092 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relación referida «%s» no es una tabla" -#: commands/tablecmds.c:9198 +#: commands/tablecmds.c:9654 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "las restricciones en tablas permanentes sólo pueden hacer referencia a tablas permanentes" -#: commands/tablecmds.c:9205 +#: commands/tablecmds.c:9661 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "las restricciones en tablas «unlogged» sólo pueden hacer referencia a tablas permanentes o «unlogged»" -#: commands/tablecmds.c:9211 +#: commands/tablecmds.c:9667 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales" -#: commands/tablecmds.c:9215 +#: commands/tablecmds.c:9671 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales de esta sesión" -#: commands/tablecmds.c:9279 commands/tablecmds.c:9285 +#: commands/tablecmds.c:9735 commands/tablecmds.c:9741 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "acción %s no válida para restricción de llave foránea que contiene columnas generadas" -#: commands/tablecmds.c:9301 +#: commands/tablecmds.c:9757 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "el número de columnas referidas en la llave foránea no coincide con el número de columnas de referencia" -#: commands/tablecmds.c:9408 +#: commands/tablecmds.c:9864 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la restricción de llave foránea «%s» no puede ser implementada" -#: commands/tablecmds.c:9410 +#: commands/tablecmds.c:9866 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Las columnas llave «%s» y «%s» son de tipos incompatibles: %s y %s" -#: commands/tablecmds.c:9567 +#: commands/tablecmds.c:10035 #, c-format msgid "column \"%s\" referenced in ON DELETE SET action must be part of foreign key" msgstr "la columna «%s» referenciada en la acción ON DELETE SET debe ser parte de la llave foránea" -#: commands/tablecmds.c:9841 commands/tablecmds.c:10311 -#: parser/parse_utilcmd.c:791 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 "las restricciones de llave foránea no están soportadas en tablas foráneas" -#: commands/tablecmds.c:10864 commands/tablecmds.c:11142 -#: commands/tablecmds.c:12051 commands/tablecmds.c:12126 +#: commands/tablecmds.c:10815 +#, c-format +msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" +msgstr "no se puede adjuntar la tabla foránea «%s» como partición porque es referenciada por la llave foránea «%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 "no existe la restricción «%s» en la relación «%s»" -#: commands/tablecmds.c:10871 +#: commands/tablecmds.c:11423 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la restricción «%s» de la relación «%s» no es una restricción de llave foránea" -#: commands/tablecmds.c:10909 +#: commands/tablecmds.c:11461 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "no se puede modificar la restricción «%s» en la relación «%s»" -#: commands/tablecmds.c:10912 +#: commands/tablecmds.c:11464 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "La restricción «%s» deriva de la restricción «%s» de la relación «%s»." -#: commands/tablecmds.c:10914 +#: commands/tablecmds.c:11466 #, c-format -msgid "You may alter the constraint it derives from, instead." +msgid "You may alter the constraint it derives from instead." msgstr "En su lugar, puede modificar la restricción de la cual deriva." -#: commands/tablecmds.c:11150 +#: commands/tablecmds.c:11705 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la restricción «%s» de la relación «%s» no es una llave foránea o restricción «check»" -#: commands/tablecmds.c:11227 +#: commands/tablecmds.c:11782 #, c-format msgid "constraint must be validated on child tables too" msgstr "la restricción debe ser validada en las tablas hijas también" -#: commands/tablecmds.c:11314 +#: commands/tablecmds.c:11869 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "no existe la columna «%s» referida en la llave foránea" -#: commands/tablecmds.c:11320 -#, fuzzy, c-format -#| msgid "Generated columns cannot be used in COPY." +#: commands/tablecmds.c:11875 +#, c-format msgid "system columns cannot be used in foreign keys" -msgstr "Las columnas generadas no pueden usarse en COPY." +msgstr "las columnas de sistema no pueden usarse en llaves foráneas" -#: commands/tablecmds.c:11324 +#: commands/tablecmds.c:11879 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "no se puede tener más de %d columnas en una llave foránea" -#: commands/tablecmds.c:11389 +#: commands/tablecmds.c:11944 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "no se puede usar una llave primaria postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:11406 +#: commands/tablecmds.c:11961 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "no hay llave primaria para la tabla referida «%s»" -#: commands/tablecmds.c:11470 +#: commands/tablecmds.c:12029 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la lista de columnas referidas en una llave foránea no debe contener duplicados" -#: commands/tablecmds.c:11562 +#: commands/tablecmds.c:12121 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "no se puede usar una restricción unique postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:11567 +#: commands/tablecmds.c:12126 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "no hay restricción unique que coincida con las columnas dadas en la tabla referida «%s»" -#: commands/tablecmds.c:12007 +#: commands/tablecmds.c:12565 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "no se puede eliminar la restricción «%s» heredada de la relación «%s»" -#: commands/tablecmds.c:12057 +#: commands/tablecmds.c:12615 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:12233 +#: commands/tablecmds.c:12790 #, c-format msgid "cannot alter column type of typed table" msgstr "no se puede cambiar el tipo de una columna de una tabla tipada" -#: commands/tablecmds.c:12260 +#: commands/tablecmds.c:12816 +#, c-format +msgid "cannot specify USING when altering type of generated column" +msgstr "no se puede especificar USING al alterar el tipo de una columna generada" + +#: 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 "La columna «%s» es una columna generada." + +#: commands/tablecmds.c:12827 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "no se puede alterar la columna heredada «%s»" -#: commands/tablecmds.c:12269 +#: commands/tablecmds.c:12836 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede alterar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:12319 +#: commands/tablecmds.c:12886 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "el resultado de la cláusula USING para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:12322 +#: commands/tablecmds.c:12889 #, c-format msgid "You might need to add an explicit cast." msgstr "Puede ser necesario agregar un cast explícito." -#: commands/tablecmds.c:12326 +#: commands/tablecmds.c:12893 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la columna «%s» no puede convertirse automáticamente al tipo %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:12329 +#: commands/tablecmds.c:12897 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Puede ser necesario especificar «USING %s::%s»." -#: commands/tablecmds.c:12428 +#: commands/tablecmds.c:12996 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "no se puede alterar la columna heredada «%s» de la relación «%s»" -#: commands/tablecmds.c:12457 +#: commands/tablecmds.c:13025 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "La expresión USING contiene una referencia a la fila completa (whole-row)." -#: commands/tablecmds.c:12468 +#: commands/tablecmds.c:13036 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "debe cambiar el tipo a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:12593 +#: commands/tablecmds.c:13161 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "no se puede alterar el tipo de la columna «%s» dos veces" -#: commands/tablecmds.c:12631 +#: commands/tablecmds.c:13199 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "la expresión de generación para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:12636 +#: commands/tablecmds.c:13204 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "el valor por omisión para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:12717 +#: commands/tablecmds.c:13508 #, c-format -msgid "cannot alter type of a column used by a view or rule" -msgstr "no se puede alterar el tipo de una columna usada en una regla o vista" +msgid "cannot alter type of a column used by a function or procedure" +msgstr "no se puede alterar el tipo de una columna usada en una función o procedimiento" -#: commands/tablecmds.c:12718 commands/tablecmds.c:12737 -#: commands/tablecmds.c:12755 +#: 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 depende de la columna «%s»" -#: commands/tablecmds.c:12736 +#: commands/tablecmds.c:13523 +#, c-format +msgid "cannot alter type of a column used by a view or rule" +msgstr "no se puede alterar el tipo de una columna usada en una regla o vista" + +#: commands/tablecmds.c:13543 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de trigger" -#: commands/tablecmds.c:12754 +#: commands/tablecmds.c:13562 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de política" -#: commands/tablecmds.c:12785 +#: commands/tablecmds.c:13593 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "no se puede alterar el tipo de una columna usada por una columna generada" -#: commands/tablecmds.c:12786 +#: commands/tablecmds.c:13594 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La columna «%s» es usada por la columna generada «%s»." -#: commands/tablecmds.c:13861 commands/tablecmds.c:13873 +#: commands/tablecmds.c:13621 +#, c-format +msgid "cannot alter type of a column used by a publication WHERE clause" +msgstr "no se puede alterar el tipo de una columna usada en una cláusula WHERE de publicación" + +#: commands/tablecmds.c:14456 commands/tablecmds.c:14468 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "no se puede cambiar el dueño del índice «%s»" -#: commands/tablecmds.c:13863 commands/tablecmds.c:13875 +#: commands/tablecmds.c:14458 commands/tablecmds.c:14470 #, c-format -msgid "Change the ownership of the index's table, instead." -msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." +msgid "Change the ownership of the index's table instead." +msgstr "Cambie el dueño de la tabla del índice en su lugar." -#: commands/tablecmds.c:13889 +#: commands/tablecmds.c:14484 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "no se puede cambiar el dueño de la secuencia «%s»" -#: commands/tablecmds.c:13903 commands/tablecmds.c:17201 -#: commands/tablecmds.c:17220 +#: commands/tablecmds.c:14509 #, c-format -msgid "Use ALTER TYPE instead." -msgstr "Considere usar ALTER TYPE." - -#: commands/tablecmds.c:13912 -#, fuzzy, c-format -#| msgid "cannot change owner of index \"%s\"" msgid "cannot change owner of relation \"%s\"" -msgstr "no se puede cambiar el dueño del índice «%s»" +msgstr "no se puede cambiar el dueño de la relación «%s»" -#: commands/tablecmds.c:14274 +#: commands/tablecmds.c:14976 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" -#: commands/tablecmds.c:14351 -#, fuzzy, c-format -#| msgid "cannot alter constraint \"%s\" on relation \"%s\"" +#: commands/tablecmds.c:15053 +#, c-format msgid "cannot set options for relation \"%s\"" -msgstr "no se puede modificar la restricción «%s» en la relación «%s»" +msgstr "no se puede definir opciones para la relación «%s»" -#: commands/tablecmds.c:14385 commands/view.c:445 +#: 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 sólo puede usarse en vistas automáticamente actualizables" -#: commands/tablecmds.c:14635 +#: commands/tablecmds.c:15338 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "solamente tablas, índices y vistas materializadas existen en tablespaces" -#: commands/tablecmds.c:14647 +#: commands/tablecmds.c:15350 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "no se puede mover objetos hacia o desde el tablespace pg_global" -#: commands/tablecmds.c:14739 +#: commands/tablecmds.c:15442 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "cancelando porque el lock en la relación «%s.%s» no está disponible" -#: commands/tablecmds.c:14755 +#: commands/tablecmds.c:15458 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "no se encontraron relaciones coincidentes en el tablespace «%s»" -#: commands/tablecmds.c:14873 +#: commands/tablecmds.c:15580 #, c-format msgid "cannot change inheritance of typed table" msgstr "no se puede cambiar la herencia de una tabla tipada" -#: commands/tablecmds.c:14878 commands/tablecmds.c:15396 +#: commands/tablecmds.c:15585 commands/tablecmds.c:16085 #, c-format msgid "cannot change inheritance of a partition" msgstr "no puede cambiar la herencia de una partición" -#: commands/tablecmds.c:14883 +#: commands/tablecmds.c:15590 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "no se puede cambiar la herencia de una tabla particionada" -#: commands/tablecmds.c:14929 +#: commands/tablecmds.c:15636 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "no se puede agregar herencia a tablas temporales de otra sesión" -#: commands/tablecmds.c:14942 +#: commands/tablecmds.c:15649 #, c-format msgid "cannot inherit from a partition" msgstr "no se puede heredar de una partición" -#: commands/tablecmds.c:14964 commands/tablecmds.c:17841 +#: commands/tablecmds.c:15671 commands/tablecmds.c:18529 #, c-format msgid "circular inheritance not allowed" msgstr "la herencia circular no está permitida" -#: commands/tablecmds.c:14965 commands/tablecmds.c:17842 +#: commands/tablecmds.c:15672 commands/tablecmds.c:18530 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "«%s» ya es un hijo de «%s»." -#: commands/tablecmds.c:14978 +#: commands/tablecmds.c:15685 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "el trigger «%s» impide a la tabla «%s» convertirse en hija de herencia" -#: commands/tablecmds.c:14980 +#: commands/tablecmds.c:15687 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "Los triggers ROW con tablas de transición no están permitidos en jerarquías de herencia." -#: commands/tablecmds.c:15183 +#: commands/tablecmds.c:15876 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "columna «%s» en tabla hija debe marcarse como NOT NULL" -#: commands/tablecmds.c:15192 +#: commands/tablecmds.c:15885 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "columna «%s» en tabla hija debe ser una columna generada" -#: commands/tablecmds.c:15197 -#, fuzzy, c-format -#| msgid "column \"%s\" in child table must be a generated column" +#: commands/tablecmds.c:15889 +#, c-format msgid "column \"%s\" in child table must not be a generated column" -msgstr "columna «%s» en tabla hija debe ser una columna generada" +msgstr "columna «%s» en tabla hija no puede ser una columna generada" -#: commands/tablecmds.c:15228 +#: commands/tablecmds.c:15927 #, c-format msgid "child table is missing column \"%s\"" msgstr "tabla hija no tiene la columna «%s»" -#: commands/tablecmds.c:15316 +#: commands/tablecmds.c:16008 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la tabla hija «%s» tiene una definición diferente para la restricción «check» «%s»" -#: commands/tablecmds.c:15324 +#: commands/tablecmds.c:16015 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada en la tabla hija «%s»" -#: commands/tablecmds.c:15335 +#: commands/tablecmds.c:16025 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID en la tabla hija «%s»" -#: commands/tablecmds.c:15374 +#: commands/tablecmds.c:16063 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "tabla hija no tiene la restricción «%s»" -#: commands/tablecmds.c:15460 +#: commands/tablecmds.c:16149 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "la partición «%s» ya tiene un desprendimiento pendiente en la tabla particionada «%s.%s»" -#: commands/tablecmds.c:15489 commands/tablecmds.c:15537 +#: commands/tablecmds.c:16178 commands/tablecmds.c:16224 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "relación «%s» no es una partición de la relación «%s»" -#: commands/tablecmds.c:15543 +#: commands/tablecmds.c:16230 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "relación «%s» no es un padre de la relación «%s»" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:16457 #, c-format msgid "typed tables cannot inherit" msgstr "las tablas tipadas no pueden heredar" -#: commands/tablecmds.c:15801 +#: commands/tablecmds.c:16487 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabla no tiene la columna «%s»" -#: commands/tablecmds.c:15812 +#: commands/tablecmds.c:16498 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la tabla tiene columna «%s» en la posición en que el tipo requiere «%s»." -#: commands/tablecmds.c:15821 +#: commands/tablecmds.c:16507 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la tabla «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:15835 +#: commands/tablecmds.c:16521 #, c-format msgid "table has extra column \"%s\"" msgstr "tabla tiene la columna extra «%s»" -#: commands/tablecmds.c:15887 +#: commands/tablecmds.c:16573 #, c-format msgid "\"%s\" is not a typed table" msgstr "«%s» no es una tabla tipada" -#: commands/tablecmds.c:16061 +#: commands/tablecmds.c:16747 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "no se puede usar el índice no-único «%s» como identidad de réplica" -#: commands/tablecmds.c:16067 +#: commands/tablecmds.c:16753 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "no puede usar el índice no-inmediato «%s» como identidad de réplica" -#: commands/tablecmds.c:16073 +#: commands/tablecmds.c:16759 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "no se puede usar el índice funcional «%s» como identidad de réplica" -#: commands/tablecmds.c:16079 +#: commands/tablecmds.c:16765 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "no se puede usar el índice parcial «%s» como identidad de réplica" -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16782 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column %d es una columna de sistema" -#: commands/tablecmds.c:16103 +#: commands/tablecmds.c:16789 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column «%s» acepta valores nulos" -#: commands/tablecmds.c:16348 +#: commands/tablecmds.c:17041 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "no se puede cambiar el estado «logged» de la tabla «%s» porque es temporal" -#: commands/tablecmds.c:16372 +#: commands/tablecmds.c:17065 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque es parte de una publicación" -#: commands/tablecmds.c:16374 +#: commands/tablecmds.c:17067 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Las tablas «unlogged» no pueden replicarse." -#: commands/tablecmds.c:16419 +#: commands/tablecmds.c:17112 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «logged» porque hace referencia a la tabla «unlogged» «%s»" -#: commands/tablecmds.c:16429 +#: commands/tablecmds.c:17122 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque hace referencia a la tabla «logged» «%s»" -#: commands/tablecmds.c:16487 +#: commands/tablecmds.c:17180 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "no se puede mover una secuencia enlazada a una tabla hacia otro esquema" -#: commands/tablecmds.c:16594 +#: commands/tablecmds.c:17288 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "ya existe una relación llamada «%s» en el esquema «%s»" -#: commands/tablecmds.c:17006 +#: commands/tablecmds.c:17713 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "«%s» no es una tabla o vista materializada" -#: commands/tablecmds.c:17184 +#: commands/tablecmds.c:17866 #, c-format msgid "\"%s\" is not a composite type" msgstr "«%s» no es un tipo compuesto" -#: commands/tablecmds.c:17212 -#, fuzzy, c-format -#| msgid "cannot change owner of index \"%s\"" +#: commands/tablecmds.c:17896 +#, c-format msgid "cannot change schema of index \"%s\"" -msgstr "no se puede cambiar el dueño del índice «%s»" +msgstr "no se puede cambiar el esquema del índice «%s»" -#: commands/tablecmds.c:17214 commands/tablecmds.c:17226 -#, fuzzy, c-format -#| msgid "Change the ownership of the index's table, instead." +#: commands/tablecmds.c:17898 commands/tablecmds.c:17912 +#, c-format msgid "Change the schema of the table instead." -msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." +msgstr "Cambie el esquema de la tabla en su lugar." -#: commands/tablecmds.c:17218 -#, fuzzy, c-format -#| msgid "cannot convert Perl hash to non-composite type %s" +#: commands/tablecmds.c:17902 +#, c-format msgid "cannot change schema of composite type \"%s\"" -msgstr "no se puede convertir un hash de Perl al tipo no compuesto %s" +msgstr "no se puede cambiar el esquema del tipo compuesto «%s»" -#: commands/tablecmds.c:17224 -#, fuzzy, c-format -#| msgid "cannot change TOAST relation \"%s\"" +#: commands/tablecmds.c:17910 +#, c-format msgid "cannot change schema of TOAST table \"%s\"" -msgstr "no se puede cambiar la relación TOAST «%s»" +msgstr "no se puede cambiar el esquema de la relación TOAST «%s»" -#: commands/tablecmds.c:17256 +#: commands/tablecmds.c:17942 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "no se puede usar la estrategia de particionamiento «list» con más de una columna" -#: commands/tablecmds.c:17322 +#: commands/tablecmds.c:18008 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la columna «%s» nombrada en llave de particionamiento no existe" -#: commands/tablecmds.c:17330 +#: commands/tablecmds.c:18016 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" -#: commands/tablecmds.c:17341 commands/tablecmds.c:17455 +#: commands/tablecmds.c:18027 commands/tablecmds.c:18117 #, c-format msgid "cannot use generated column in partition key" msgstr "no se puede usar una columna generada en llave de particionamiento" -#: commands/tablecmds.c:17342 commands/tablecmds.c:17456 commands/trigger.c:663 -#: rewrite/rewriteHandler.c:934 rewrite/rewriteHandler.c:969 +#: commands/tablecmds.c:18100 #, c-format -msgid "Column \"%s\" is a generated column." -msgstr "La columna «%s» es una columna generada." +msgid "partition key expressions cannot contain system column references" +msgstr "las expresiones en la llave de particionamiento no pueden contener referencias a columnas de sistema" -#: commands/tablecmds.c:17418 +#: commands/tablecmds.c:18147 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de la llave de particionamiento deben estar marcadas IMMUTABLE" -#: commands/tablecmds.c:17438 -#, c-format -msgid "partition key expressions cannot contain system column references" -msgstr "las expresiones en la llave de particionamiento no pueden contener referencias a columnas de sistema" - -#: commands/tablecmds.c:17468 +#: commands/tablecmds.c:18156 #, c-format msgid "cannot use constant expression as partition key" msgstr "no se pueden usar expresiones constantes como llave de particionamiento" -#: commands/tablecmds.c:17489 +#: commands/tablecmds.c:18177 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de particionamiento" -#: commands/tablecmds.c:17524 +#: 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 "Debe especificar una clase de operadores hash, o definir una clase de operadores por omisión para hash para el tipo de datos." -#: commands/tablecmds.c:17530 +#: 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 "Debe especificar una clase de operadores btree, o definir una clase de operadores por omisión para btree para el tipo de datos." -#: commands/tablecmds.c:17781 +#: commands/tablecmds.c:18469 #, c-format msgid "\"%s\" is already a partition" msgstr "«%s» ya es una partición" -#: commands/tablecmds.c:17787 +#: commands/tablecmds.c:18475 #, c-format msgid "cannot attach a typed table as partition" msgstr "no puede adjuntar tabla tipada como partición" -#: commands/tablecmds.c:17803 +#: commands/tablecmds.c:18491 #, c-format msgid "cannot attach inheritance child as partition" msgstr "no puede adjuntar hija de herencia como partición" -#: commands/tablecmds.c:17817 +#: commands/tablecmds.c:18505 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "no puede adjuntar ancestro de herencia como partición" -#: commands/tablecmds.c:17851 +#: commands/tablecmds.c:18539 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede adjuntar una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:17859 +#: commands/tablecmds.c:18547 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "no se puede adjuntar una relación permanente como partición de la relación temporal «%s»" -#: commands/tablecmds.c:17867 +#: commands/tablecmds.c:18555 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "no se puede adjuntar como partición de una relación temporal de otra sesión" -#: commands/tablecmds.c:17874 +#: commands/tablecmds.c:18562 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "no se adjuntar una relación temporal de otra sesión como partición" -#: commands/tablecmds.c:17894 +#: commands/tablecmds.c:18582 +#, c-format +msgid "table \"%s\" being attached contains an identity column \"%s\"" +msgstr "la tabla «%s» siendo adjuntada contiene la columna de identidad «%s»" + +#: commands/tablecmds.c:18584 +#, c-format +msgid "The new partition may not contain an identity column." +msgstr "La nueva partición no puede contener una columna de identidad." + +#: commands/tablecmds.c:18592 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la tabla «%s» contiene la columna «%s» no encontrada en el padre «%s»" -#: commands/tablecmds.c:17897 +#: commands/tablecmds.c:18595 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nueva partición sólo puede contener las columnas presentes en el padre." -#: commands/tablecmds.c:17909 +#: commands/tablecmds.c:18607 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "el trigger «%s» impide a la tabla «%s» devenir partición" -#: commands/tablecmds.c:17911 +#: commands/tablecmds.c:18609 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "Los triggers ROW con tablas de transición no están soportados en particiones." -#: commands/tablecmds.c:18090 +#: commands/tablecmds.c:18785 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "no se puede adjuntar la tabla foránea «%s» como partición de la tabla particionada «%s»" -#: commands/tablecmds.c:18093 +#: commands/tablecmds.c:18788 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La tabla particionada «%s» contiene índices únicos." -#: commands/tablecmds.c:18406 +#: commands/tablecmds.c:19110 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "no se puede desprender particiones concurrentemente cuando existe una partición por omisión" -#: commands/tablecmds.c:18515 +#: commands/tablecmds.c:19219 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "la tabla particionada «%s» fue eliminada concurrentemente" -#: commands/tablecmds.c:18521 +#: commands/tablecmds.c:19225 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "la partición «%s» fue eliminada concurrentemente" -#: commands/tablecmds.c:19036 commands/tablecmds.c:19056 -#: commands/tablecmds.c:19077 commands/tablecmds.c:19096 -#: commands/tablecmds.c:19138 +#: 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 "no se puede adjuntar el índice «%s» como partición del índice «%s»" -#: commands/tablecmds.c:19039 +#: commands/tablecmds.c:19842 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "El índice «%s» ya está adjunto a otro índice." -#: commands/tablecmds.c:19059 +#: commands/tablecmds.c:19862 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "El índice «%s» no es un índice en una partición de la tabla «%s»." -#: commands/tablecmds.c:19080 +#: commands/tablecmds.c:19883 #, c-format msgid "The index definitions do not match." msgstr "Las definiciones de los índices no coinciden." -#: commands/tablecmds.c:19099 +#: 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 "El índice «%s» pertenece a una restricción en la tabla «%s», pero no existe una restricción para el índice «%s»." -#: commands/tablecmds.c:19141 +#: commands/tablecmds.c:19944 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Otro índice ya está adjunto para la partición «%s»." -#: commands/tablecmds.c:19370 +#: commands/tablecmds.c:20180 #, c-format msgid "column data type %s does not support compression" msgstr "el tipo de dato de columna %s no soporta compresión" -#: commands/tablecmds.c:19377 +#: commands/tablecmds.c:20187 #, c-format msgid "invalid compression method \"%s\"" msgstr "método de compresión «%s» no válido" -#: commands/tablecmds.c:19403 +#: commands/tablecmds.c:20213 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo de almacenamiento no válido «%s»" -#: commands/tablecmds.c:19413 +#: commands/tablecmds.c:20223 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "el tipo de datos %s de la columna sólo puede tener almacenamiento PLAIN" -#: commands/tablespace.c:199 commands/tablespace.c:650 +#: commands/tablespace.c:193 commands/tablespace.c:644 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "«%s» existe pero no es un directorio" -#: commands/tablespace.c:230 +#: commands/tablespace.c:224 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "se ha denegado el permiso para crear el tablespace «%s»" -#: commands/tablespace.c:232 +#: commands/tablespace.c:226 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Debe ser superusuario para crear tablespaces." -#: commands/tablespace.c:248 +#: commands/tablespace.c:242 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "la ruta del tablespace no puede contener comillas simples" -#: commands/tablespace.c:261 +#: commands/tablespace.c:255 #, c-format msgid "tablespace location must be an absolute path" msgstr "la ubicación del tablespace debe ser una ruta absoluta" -#: commands/tablespace.c:273 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "la ruta «%s» del tablespace es demasiado larga" -#: commands/tablespace.c:280 +#: commands/tablespace.c:274 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "la ubicación del tablespace no debe estar dentro del directorio de datos" -#: commands/tablespace.c:289 commands/tablespace.c:976 +#: commands/tablespace.c:283 commands/tablespace.c:970 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "el nombre de tablespace «%s» es inaceptable" -#: commands/tablespace.c:291 commands/tablespace.c:977 +#: commands/tablespace.c:285 commands/tablespace.c:971 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "El prefijo «pg_» está reservado para tablespaces del sistema." -#: commands/tablespace.c:310 commands/tablespace.c:998 +#: commands/tablespace.c:304 commands/tablespace.c:992 #, c-format msgid "tablespace \"%s\" already exists" msgstr "el tablespace «%s» ya existe" -#: commands/tablespace.c:326 -#, fuzzy, c-format -#| msgid "pg_type OID value not set when in binary upgrade mode" +#: commands/tablespace.c:320 +#, c-format msgid "pg_tablespace OID value not set when in binary upgrade mode" -msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" +msgstr "el valor de OID de pg_tablespace no se definió en modo de actualización binaria" -#: commands/tablespace.c:431 commands/tablespace.c:959 -#: commands/tablespace.c:1048 commands/tablespace.c:1117 -#: commands/tablespace.c:1263 commands/tablespace.c:1466 +#: commands/tablespace.c:425 commands/tablespace.c:953 +#: commands/tablespace.c:1042 commands/tablespace.c:1111 +#: commands/tablespace.c:1257 commands/tablespace.c:1460 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "no existe el tablespace «%s»" -#: commands/tablespace.c:437 +#: commands/tablespace.c:431 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "el tablespace «%s» no existe, omitiendo" -#: commands/tablespace.c:463 +#: commands/tablespace.c:457 #, c-format msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" msgstr "no se puede eliminar el tablespace «%s» porque otros objetos dependen de él" -#: commands/tablespace.c:530 +#: commands/tablespace.c:524 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "el tablespace «%s» no está vacío" -#: commands/tablespace.c:617 +#: commands/tablespace.c:611 #, c-format msgid "directory \"%s\" does not exist" msgstr "no existe el directorio «%s»" -#: commands/tablespace.c:618 +#: commands/tablespace.c:612 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Cree este directorio para el tablespace antes de reiniciar el servidor." -#: commands/tablespace.c:623 +#: commands/tablespace.c:617 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "no se pudo definir los permisos del directorio «%s»: %m" -#: commands/tablespace.c:655 +#: commands/tablespace.c:649 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "el directorio «%s» ya está siendo usado como tablespace" -#: commands/tablespace.c:833 commands/tablespace.c:919 +#: commands/tablespace.c:827 commands/tablespace.c:913 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "no se pudo eliminar el enlace simbólico «%s»: %m" -#: commands/tablespace.c:842 commands/tablespace.c:927 +#: commands/tablespace.c:836 commands/tablespace.c:921 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "«%s» no es un directorio o enlace simbólico" -#: commands/tablespace.c:1122 +#: commands/tablespace.c:1116 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "No existe el tablespace «%s»." -#: commands/tablespace.c:1568 +#: commands/tablespace.c:1562 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "algunos directorios para el tablespace %u no pudieron eliminarse" -#: commands/tablespace.c:1570 +#: commands/tablespace.c:1564 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Puede eliminar los directorios manualmente, si es necesario." -#: commands/trigger.c:232 commands/trigger.c:243 +#: commands/trigger.c:225 commands/trigger.c:236 #, c-format msgid "\"%s\" is a table" msgstr "«%s» es una tabla" -#: commands/trigger.c:234 commands/trigger.c:245 +#: commands/trigger.c:227 commands/trigger.c:238 #, c-format msgid "Tables cannot have INSTEAD OF triggers." -msgstr "Las tablas no pueden tener disparadores INSTEAD OF." +msgstr "Las tablas no pueden tener “triggers” INSTEAD OF." -#: commands/trigger.c:266 +#: commands/trigger.c:259 #, c-format msgid "\"%s\" is a partitioned table" msgstr "«%s» es una tabla particionada" -#: commands/trigger.c:268 -#, fuzzy, c-format -#| msgid "ROW triggers with transition tables are not supported on partitions." +#: commands/trigger.c:261 +#, c-format msgid "ROW triggers with transition tables are not supported on partitioned tables." -msgstr "Los triggers ROW con tablas de transición no están soportados en particiones." +msgstr "Los triggers ROW con tablas de transición no están soportados en tablas particionadas." -#: commands/trigger.c:280 commands/trigger.c:287 commands/trigger.c:451 +#: commands/trigger.c:273 commands/trigger.c:280 commands/trigger.c:444 #, c-format msgid "\"%s\" is a view" msgstr "«%s» es una vista" -#: commands/trigger.c:282 +#: commands/trigger.c:275 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." -msgstr "Las vistas no pueden tener disparadores BEFORE o AFTER a nivel de fila." +msgstr "Las vistas no pueden tener “triggers” BEFORE o AFTER a nivel de fila." -#: commands/trigger.c:289 +#: commands/trigger.c:282 #, c-format msgid "Views cannot have TRUNCATE triggers." -msgstr "Las vistas no pueden tener disparadores TRUNCATE." +msgstr "Las vistas no pueden tener “triggers” TRUNCATE." -#: commands/trigger.c:297 commands/trigger.c:309 commands/trigger.c:444 +#: commands/trigger.c:290 commands/trigger.c:302 commands/trigger.c:437 #, c-format msgid "\"%s\" is a foreign table" msgstr "«%s» es una tabla foránea" -#: commands/trigger.c:299 +#: commands/trigger.c:292 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." -msgstr "Las tablas foráneas no pueden tener disparadores INSTEAD OF." +msgstr "Las tablas foráneas no pueden tener “triggers” INSTEAD OF." -#: commands/trigger.c:311 +#: commands/trigger.c:304 #, c-format msgid "Foreign tables cannot have constraint triggers." -msgstr "Las tablas foráneas no pueden tener disparadores de restricción." +msgstr "Las tablas foráneas no pueden tener “triggers” de restricción." -#: commands/trigger.c:316 commands/trigger.c:1332 commands/trigger.c:1439 -#, fuzzy, c-format -#| msgid "relation \"%s\" does not exist" +#: commands/trigger.c:309 commands/trigger.c:1325 commands/trigger.c:1432 +#, c-format msgid "relation \"%s\" cannot have triggers" -msgstr "no existe la relación «%s»" +msgstr "la relación «%s» no puede tener triggers." -#: commands/trigger.c:387 +#: commands/trigger.c:380 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" -msgstr "los disparadores TRUNCATE FOR EACH ROW no están soportados" +msgstr "los “triggers” TRUNCATE FOR EACH ROW no están soportados" -#: commands/trigger.c:395 +#: commands/trigger.c:388 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" -msgstr "los disparadores INSTEAD OF deben ser FOR EACH ROW" +msgstr "los “triggers” INSTEAD OF deben ser FOR EACH ROW" -#: commands/trigger.c:399 +#: commands/trigger.c:392 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" -msgstr "los disparadores INSTEAD OF no pueden tener condiciones WHEN" +msgstr "los “triggers” INSTEAD OF no pueden tener condiciones WHEN" -#: commands/trigger.c:403 +#: commands/trigger.c:396 #, c-format msgid "INSTEAD OF triggers cannot have column lists" -msgstr "los disparadores INSTEAD OF no pueden tener listas de columnas" +msgstr "los “triggers” INSTEAD OF no pueden tener listas de columnas" -#: commands/trigger.c:432 +#: commands/trigger.c:425 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "dar nombre a una variable ROW en la cláusula REFERENCING no está soportado" -#: commands/trigger.c:433 +#: commands/trigger.c:426 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "utilice OLD TABLE o NEW TABLE para nombrar tablas de transición." -#: commands/trigger.c:446 +#: commands/trigger.c:439 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Las tablas foráneas no pueden tener tablas de transición." -#: commands/trigger.c:453 +#: commands/trigger.c:446 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Las triggers en vistas no pueden tener tablas de transición." -#: commands/trigger.c:469 +#: commands/trigger.c:462 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "los triggers ROW con tablas de transición no están soportados en particiones" -#: commands/trigger.c:473 +#: commands/trigger.c:466 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "los triggers ROW con tablas de transición no están soportados con hijas de herencia" -#: commands/trigger.c:479 +#: commands/trigger.c:472 #, c-format msgid "transition table name can only be specified for an AFTER trigger" -msgstr "el nombre de la tabla de transición solo se puede especificar para un disparador AFTER" +msgstr "el nombre de la tabla de transición solo se puede especificar para un “trigger” AFTER" -#: commands/trigger.c:484 +#: commands/trigger.c:477 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "los triggers TRUNCATE con tablas de transición no están soportados" -#: commands/trigger.c:501 +#: commands/trigger.c:494 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "las tablas de transición no pueden especificarse para triggers con más de un evento" -#: commands/trigger.c:512 +#: commands/trigger.c:505 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "las tablas de transición no pueden especificarse para triggers con lista de columnas" -#: commands/trigger.c:529 +#: commands/trigger.c:522 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" -msgstr "NEW TABLE sólo se puede especificar para un disparador INSERT o UPDATE" +msgstr "NEW TABLE sólo se puede especificar para un “trigger” INSERT o UPDATE" -#: commands/trigger.c:534 +#: commands/trigger.c:527 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE no se puede especificar varias veces" -#: commands/trigger.c:544 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" -msgstr "OLD TABLE sólo se puede especificar para un disparador DELETE o UPDATE" +msgstr "OLD TABLE sólo se puede especificar para un “trigger” DELETE o UPDATE" -#: commands/trigger.c:549 +#: commands/trigger.c:542 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE no se puede especificar varias veces" -#: commands/trigger.c:559 +#: commands/trigger.c:552 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "el nombre de OLD TABLE y el nombre de NEW TABLE no pueden ser iguales" -#: commands/trigger.c:623 commands/trigger.c:636 +#: commands/trigger.c:616 commands/trigger.c:629 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" -msgstr "la condición WHEN de un disparador por sentencias no pueden referirse a los valores de las columnas" +msgstr "la condición WHEN de un “trigger” por sentencias no pueden referirse a los valores de las columnas" -#: commands/trigger.c:628 +#: commands/trigger.c:621 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" -msgstr "la condición WHEN de un disparador en INSERT no puede referirse a valores OLD" +msgstr "la condición WHEN de un “trigger” en INSERT no puede referirse a valores OLD" -#: commands/trigger.c:641 +#: commands/trigger.c:634 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" -msgstr "la condición WHEN de un disparador en DELETE no puede referirse a valores NEW" +msgstr "la condición WHEN de un “trigger” en DELETE no puede referirse a valores NEW" -#: commands/trigger.c:646 +#: commands/trigger.c:639 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" -msgstr "la condición WHEN de un disparador BEFORE no puede referirse a columnas de sistema de NEW" +msgstr "la condición WHEN de un “trigger” BEFORE no puede referirse a columnas de sistema de NEW" -#: commands/trigger.c:654 commands/trigger.c:662 +#: commands/trigger.c:647 commands/trigger.c:655 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "la condición WHEN del trigger BEFORE no puede hacer referencia a columnas NEW generadas" -#: commands/trigger.c:655 +#: commands/trigger.c:648 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "Se utiliza una referencia de la tupla completa, y la tabla contiene columnas generadas" -#: commands/trigger.c:770 commands/trigger.c:1614 +#: commands/trigger.c:763 commands/trigger.c:1607 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "ya existe un trigger «%s» para la relación «%s»" -#: commands/trigger.c:783 -#, fuzzy, c-format -#| msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" +#: commands/trigger.c:776 +#, c-format msgid "trigger \"%s\" for relation \"%s\" is an internal or a child trigger" -msgstr "disparador «%s» para la relación «%s» es un disparador de restricción" +msgstr "trigger «%s» para la relación «%s» es interno o derivado" -#: commands/trigger.c:802 +#: commands/trigger.c:795 #, c-format msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" -msgstr "disparador «%s» para la relación «%s» es un disparador de restricción" +msgstr "“trigger” «%s» para la relación «%s» es un “trigger” de restricción" -#: commands/trigger.c:1404 commands/trigger.c:1557 commands/trigger.c:1838 +#: commands/trigger.c:1397 commands/trigger.c:1550 commands/trigger.c:1831 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "no existe el trigger «%s» para la tabla «%s»" -#: commands/trigger.c:1529 -#, fuzzy, c-format -#| msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" +#: commands/trigger.c:1522 +#, c-format msgid "cannot rename trigger \"%s\" on table \"%s\"" -msgstr "no hay una entrada en pg_constraint para el trigger «%s» en tabla «%s»" +msgstr "no se puede cambiar el nombre del trigger «%s» en tabla «%s»" -#: commands/trigger.c:1531 -#, fuzzy, c-format -#| msgid "Change the ownership of the index's table, instead." +#: commands/trigger.c:1524 +#, c-format msgid "Rename the trigger on the partitioned table \"%s\" instead." -msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." +msgstr "Cambie el nombre del trigger en la tabla particionada «%s» en su lugar." -#: commands/trigger.c:1631 -#, fuzzy, c-format -#| msgid "cannot alter constraint \"%s\" on relation \"%s\"" +#: commands/trigger.c:1624 +#, c-format msgid "renamed trigger \"%s\" on relation \"%s\"" -msgstr "no se puede modificar la restricción «%s» en la relación «%s»" +msgstr "se renombró el trigger «%s» en la relación «%s»" -#: commands/trigger.c:1777 +#: commands/trigger.c:1770 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "permiso denegado: «%s» es un trigger de sistema" -#: commands/trigger.c:2386 +#: commands/trigger.c:2379 #, c-format msgid "trigger function %u returned null value" msgstr "la función de trigger %u ha retornado un valor null" -#: commands/trigger.c:2446 commands/trigger.c:2664 commands/trigger.c:2917 -#: commands/trigger.c:3252 +#: commands/trigger.c:2439 commands/trigger.c:2657 commands/trigger.c:2910 +#: commands/trigger.c:3263 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "un trigger BEFORE STATEMENT no puede retornar un valor" -#: commands/trigger.c:2522 +#: commands/trigger.c:2515 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "mover registros a otra partición durante un trigger BEFORE FOR EACH ROW no está soportado" -#: commands/trigger.c:2523 +#: commands/trigger.c:2516 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Antes de ejecutar el trigger «%s», la fila iba a estar en la partición «%s.%s»." -#: commands/trigger.c:3329 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 "el registro a ser actualizado ya fue modificado por una operación disparada por la orden actual" - -#: commands/trigger.c:3330 executor/nodeModifyTable.c:1531 -#: executor/nodeModifyTable.c:1605 executor/nodeModifyTable.c:2364 -#: executor/nodeModifyTable.c:2447 executor/nodeModifyTable.c:3077 +#: 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 "Considere usar un disparador AFTER en lugar de un disparador BEFORE para propagar cambios a otros registros." +msgstr "Considere usar un “trigger” AFTER en lugar de un “trigger” BEFORE para propagar cambios a otros registros." -#: commands/trigger.c:3371 executor/nodeLockRows.c:228 -#: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:308 -#: executor/nodeModifyTable.c:1547 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 "no se pudo serializar el acceso debido a un update concurrente" -#: commands/trigger.c:3379 executor/nodeModifyTable.c:1637 -#: executor/nodeModifyTable.c:2464 executor/nodeModifyTable.c:2613 -#: executor/nodeModifyTable.c:2965 +#: 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 "no se pudo serializar el acceso debido a un delete concurrente" -#: commands/trigger.c:4555 +#: commands/trigger.c:4599 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" -msgstr "no se puede ejecutar un disparador postergado dentro de una operación restringida por seguridad" +msgstr "no se puede ejecutar un “trigger” postergado dentro de una operación restringida por seguridad" -#: commands/trigger.c:5738 +#: commands/trigger.c:5780 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la restricción «%s» no es postergable" -#: commands/trigger.c:5761 +#: commands/trigger.c:5803 #, c-format msgid "constraint \"%s\" does not exist" msgstr "no existe la restricción «%s»" -#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:635 +#: commands/tsearchcmds.c:124 commands/tsearchcmds.c:641 #, c-format msgid "function %s should return type %s" msgstr "la función %s debería retornar el tipo %s" -#: commands/tsearchcmds.c:194 +#: commands/tsearchcmds.c:200 #, c-format msgid "must be superuser to create text search parsers" msgstr "debe ser superusuario para crear analizadores de búsqueda en texto" -#: commands/tsearchcmds.c:247 +#: commands/tsearchcmds.c:253 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "el parámetro de analizador de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:257 +#: commands/tsearchcmds.c:263 #, c-format msgid "text search parser start method is required" msgstr "el método «start» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:262 +#: commands/tsearchcmds.c:268 #, c-format msgid "text search parser gettoken method is required" msgstr "el método «gettoken» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:267 +#: commands/tsearchcmds.c:273 #, c-format msgid "text search parser end method is required" msgstr "el método «end» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:272 +#: commands/tsearchcmds.c:278 #, c-format msgid "text search parser lextypes method is required" msgstr "el método «lextypes» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:366 +#: commands/tsearchcmds.c:372 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "la plantilla de búsquede en texto «%s» no acepta opciones" -#: commands/tsearchcmds.c:440 +#: commands/tsearchcmds.c:446 #, c-format msgid "text search template is required" msgstr "la plantilla de búsqueda en texto es obligatoria" -#: commands/tsearchcmds.c:701 +#: commands/tsearchcmds.c:707 #, c-format msgid "must be superuser to create text search templates" msgstr "debe ser superusuario para crear una plantilla de búsqueda en texto" -#: commands/tsearchcmds.c:743 +#: commands/tsearchcmds.c:749 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "el parámetro de la plantilla de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:753 +#: commands/tsearchcmds.c:759 #, c-format msgid "text search template lexize method is required" msgstr "el método «lexize» de la plantilla de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:933 +#: commands/tsearchcmds.c:939 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "el parámetro de configuración de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:940 +#: commands/tsearchcmds.c:946 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "no se puede especificar simultáneamente las opciones PARSER y COPY" -#: commands/tsearchcmds.c:976 +#: commands/tsearchcmds.c:982 #, c-format msgid "text search parser is required" msgstr "el analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:1241 +#: commands/tsearchcmds.c:1277 #, c-format msgid "token type \"%s\" does not exist" msgstr "no existe el tipo de elemento «%s»" -#: commands/tsearchcmds.c:1501 +#: commands/tsearchcmds.c:1540 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "no existe un mapeo para el tipo de elemento «%s»" -#: commands/tsearchcmds.c:1507 +#: commands/tsearchcmds.c:1546 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "el mapeo para el tipo de elemento «%s» no existe, omitiendo" -#: commands/tsearchcmds.c:1670 commands/tsearchcmds.c:1785 +#: commands/tsearchcmds.c:1707 commands/tsearchcmds.c:1822 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "el formato de la lista de parámetros no es válido: «%s»" -#: commands/typecmds.c:217 +#: commands/typecmds.c:221 #, c-format msgid "must be superuser to create a base type" msgstr "debe ser superusuario para crear un tipo base" -#: commands/typecmds.c:275 +#: commands/typecmds.c:279 #, c-format msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." msgstr "Cree el tipo como un tipo inconcluso, luego cree sus funciones de I/O, luego haga un CREATE TYPE completo." -#: commands/typecmds.c:327 commands/typecmds.c:1450 commands/typecmds.c:4257 +#: commands/typecmds.c:331 commands/typecmds.c:1460 commands/typecmds.c:4480 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "el atributo de tipo «%s» no es reconocido" -#: commands/typecmds.c:382 +#: commands/typecmds.c:386 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "la categoría de tipo «%s» no es válida: debe ser ASCII simple" -#: commands/typecmds.c:401 +#: commands/typecmds.c:405 #, c-format msgid "array element type cannot be %s" msgstr "el tipo de elemento de array no puede ser %s" -#: commands/typecmds.c:433 +#: commands/typecmds.c:437 #, c-format msgid "alignment \"%s\" not recognized" msgstr "el alineamiento «%s» no es reconocido" -#: commands/typecmds.c:450 commands/typecmds.c:4131 +#: commands/typecmds.c:454 commands/typecmds.c:4354 #, c-format msgid "storage \"%s\" not recognized" msgstr "el almacenamiento «%s» no es reconocido" -#: commands/typecmds.c:461 +#: commands/typecmds.c:465 #, c-format msgid "type input function must be specified" msgstr "debe especificarse la función de ingreso del tipo" -#: commands/typecmds.c:465 +#: commands/typecmds.c:469 #, c-format msgid "type output function must be specified" msgstr "debe especificarse la función de salida de tipo" -#: commands/typecmds.c:470 +#: commands/typecmds.c:474 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "la función de salida de modificadores de tipo es inútil sin una función de entrada de modificadores de tipo" -#: commands/typecmds.c:512 +#: commands/typecmds.c:516 #, c-format msgid "element type cannot be specified without a subscripting function" msgstr "no se puede especificar tipo de elemento sin una función de subindexación" -#: commands/typecmds.c:781 +#: commands/typecmds.c:785 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "«%s» no es un tipo de dato base válido para un dominio" -#: commands/typecmds.c:879 +#: commands/typecmds.c:883 #, c-format msgid "multiple default expressions" msgstr "múltiples expresiones default" -#: commands/typecmds.c:942 commands/typecmds.c:951 +#: commands/typecmds.c:946 commands/typecmds.c:955 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "las restricciones NULL/NOT NULL no coinciden" -#: commands/typecmds.c:967 +#: commands/typecmds.c:971 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "las restricciones «check» en dominios no pueden ser marcadas NO INHERIT" -#: commands/typecmds.c:976 commands/typecmds.c:2956 +#: commands/typecmds.c:980 commands/typecmds.c:2940 #, c-format msgid "unique constraints not possible for domains" msgstr "no se pueden poner restricciones de unicidad a un dominio" -#: commands/typecmds.c:982 commands/typecmds.c:2962 +#: commands/typecmds.c:986 commands/typecmds.c:2946 #, c-format msgid "primary key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave primaria a un dominio" -#: commands/typecmds.c:988 commands/typecmds.c:2968 +#: commands/typecmds.c:992 commands/typecmds.c:2952 #, c-format msgid "exclusion constraints not possible for domains" msgstr "las restricciones de exclusión no son posibles para los dominios" -#: commands/typecmds.c:994 commands/typecmds.c:2974 +#: commands/typecmds.c:998 commands/typecmds.c:2958 #, c-format msgid "foreign key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave foránea a un dominio" -#: commands/typecmds.c:1003 commands/typecmds.c:2983 +#: commands/typecmds.c:1007 commands/typecmds.c:2967 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "no se puede especificar la postergabilidad de las restricciones a un dominio" -#: commands/typecmds.c:1317 utils/cache/typcache.c:2561 +#: commands/typecmds.c:1327 utils/cache/typcache.c:2570 #, c-format msgid "%s is not an enum" msgstr "%s no es un enum" -#: commands/typecmds.c:1458 +#: commands/typecmds.c:1468 #, c-format msgid "type attribute \"subtype\" is required" msgstr "el atributo de tipo «subtype» es obligatorio" -#: commands/typecmds.c:1463 +#: commands/typecmds.c:1473 #, c-format msgid "range subtype cannot be %s" msgstr "el subtipo de rango no puede ser %s" -#: commands/typecmds.c:1482 +#: commands/typecmds.c:1492 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "se especificó un ordenamiento (collation) al rango, pero el subtipo no soporta ordenamiento" -#: commands/typecmds.c:1492 +#: commands/typecmds.c:1502 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "no se puede especificar una función canónica sin antes crear un tipo inconcluso" -#: commands/typecmds.c:1493 +#: commands/typecmds.c:1503 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." msgstr "Cree el tipo como un tipo inconcluso, luego cree su función de canonicalización, luego haga un CREATE TYPE completo." -#: commands/typecmds.c:1965 +#: commands/typecmds.c:1975 #, c-format msgid "type input function %s has multiple matches" msgstr "la función de entrada %s del tipo tiene múltiples coincidencias" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1993 #, c-format msgid "type input function %s must return type %s" msgstr "la función de entrada %s del tipo debe retornar %s" -#: commands/typecmds.c:1999 +#: commands/typecmds.c:2009 #, c-format msgid "type input function %s should not be volatile" msgstr "la función de entrada %s no debe ser volatile" -#: commands/typecmds.c:2027 +#: commands/typecmds.c:2037 #, c-format msgid "type output function %s must return type %s" msgstr "la función de salida %s del tipo debe retornar %s" -#: commands/typecmds.c:2034 +#: commands/typecmds.c:2044 #, c-format msgid "type output function %s should not be volatile" msgstr "la función de salida %s no debe ser volatile" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2073 #, c-format msgid "type receive function %s has multiple matches" msgstr "la función de recepción %s del tipo tiene múltiples coincidencias" -#: commands/typecmds.c:2081 +#: commands/typecmds.c:2091 #, c-format msgid "type receive function %s must return type %s" msgstr "la función de recepción %s del tipo debe retornar %s" -#: commands/typecmds.c:2088 +#: commands/typecmds.c:2098 #, c-format msgid "type receive function %s should not be volatile" msgstr "la función «receive» %s del tipo no debe ser volatile" -#: commands/typecmds.c:2116 +#: commands/typecmds.c:2126 #, c-format msgid "type send function %s must return type %s" msgstr "la función «send» %s del tipo debe retornar %s" -#: commands/typecmds.c:2123 +#: commands/typecmds.c:2133 #, c-format msgid "type send function %s should not be volatile" msgstr "la función «send» %s no debe ser volatile" -#: commands/typecmds.c:2150 +#: commands/typecmds.c:2160 #, c-format msgid "typmod_in function %s must return type %s" msgstr "la función typmod_in %s debe retornar tipo %s" -#: commands/typecmds.c:2157 +#: commands/typecmds.c:2167 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "la función de modificadores de tipo %s no debe ser volatile" -#: commands/typecmds.c:2184 +#: commands/typecmds.c:2194 #, c-format msgid "typmod_out function %s must return type %s" msgstr "la función typmod_out %s debe retornar tipo %s" -#: commands/typecmds.c:2191 +#: commands/typecmds.c:2201 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "la función de salida de modificadores de tipo %s no debe ser volatile" -#: commands/typecmds.c:2218 +#: commands/typecmds.c:2228 #, c-format msgid "type analyze function %s must return type %s" msgstr "la función de análisis %s del tipo debe retornar %s" -#: commands/typecmds.c:2247 +#: commands/typecmds.c:2257 #, c-format msgid "type subscripting function %s must return type %s" msgstr "la función de subindexación %s del tipo debe retornar %s" -#: commands/typecmds.c:2257 +#: commands/typecmds.c:2267 #, c-format msgid "user-defined types cannot use subscripting function %s" msgstr "los tipos definidos por el usuario no pueden usar la función de subindexación %s" -#: commands/typecmds.c:2303 +#: commands/typecmds.c:2313 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Debe especificar una clase de operadores para el tipo de rango, o definir una clase de operadores por omisión para el subtipo." -#: commands/typecmds.c:2334 +#: commands/typecmds.c:2344 #, c-format msgid "range canonical function %s must return range type" msgstr "la función canónica %s del rango debe retornar tipo de rango" -#: commands/typecmds.c:2340 +#: commands/typecmds.c:2350 #, c-format msgid "range canonical function %s must be immutable" msgstr "la función canónica %s del rango debe ser inmutable" -#: commands/typecmds.c:2376 +#: commands/typecmds.c:2386 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "la función «diff» de subtipo, %s, debe retornar tipo %s" -#: commands/typecmds.c:2383 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "la función «diff» de subtipo, %s, debe ser inmutable" -#: commands/typecmds.c:2410 +#: commands/typecmds.c:2420 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" -#: commands/typecmds.c:2443 +#: commands/typecmds.c:2453 #, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" msgstr "el valor de OID de multirango de pg_type no se definió en modo de actualización binaria" -#: commands/typecmds.c:2476 +#: commands/typecmds.c:2486 #, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" -msgstr "el valor de OID de arreglo de multirango de pg_type no se definió en modo de actualización binaria" +msgstr "el valor de OID de array de multirango de pg_type no se definió en modo de actualización binaria" -#: commands/typecmds.c:2772 -#, c-format -msgid "column \"%s\" of table \"%s\" contains null values" -msgstr "la columna «%s» de la tabla «%s» contiene valores null" - -#: commands/typecmds.c:2885 commands/typecmds.c:3086 +#: commands/typecmds.c:2868 commands/typecmds.c:3093 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "no existe la restricción «%s» en el dominio «%s»" -#: commands/typecmds.c:2889 +#: commands/typecmds.c:2872 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en el dominio «%s», omitiendo" -#: commands/typecmds.c:3093 +#: commands/typecmds.c:3100 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "la restricción «%s» en el dominio «%s» no es una restricción «check»" -#: commands/typecmds.c:3194 +#: commands/typecmds.c:3180 +#, c-format +msgid "column \"%s\" of table \"%s\" contains null values" +msgstr "la columna «%s» de la tabla «%s» contiene valores null" + +#: commands/typecmds.c:3269 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "la columna «%s» de la relación «%s» contiene valores que violan la nueva restricción" -#: commands/typecmds.c:3423 commands/typecmds.c:3622 commands/typecmds.c:3703 -#: commands/typecmds.c:3889 +#: commands/typecmds.c:3498 commands/typecmds.c:3772 commands/typecmds.c:3857 +#: commands/typecmds.c:4073 #, c-format msgid "%s is not a domain" msgstr "%s no es un dominio" -#: commands/typecmds.c:3455 +#: commands/typecmds.c:3532 commands/typecmds.c:3686 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "el dominio «%2$s» ya contiene una restricción llamada «%1$s»" -#: commands/typecmds.c:3506 +#: commands/typecmds.c:3583 #, c-format msgid "cannot use table references in domain check constraint" msgstr "no se pueden usar referencias a tablas en restricción «check» para un dominio" -#: commands/typecmds.c:3634 commands/typecmds.c:3715 commands/typecmds.c:4006 +#: commands/typecmds.c:3784 commands/typecmds.c:3869 commands/typecmds.c:4223 #, c-format msgid "%s is a table's row type" msgstr "%s es el tipo de registro de una tabla" -#: commands/typecmds.c:3636 commands/typecmds.c:3717 commands/typecmds.c:4008 -#, c-format -msgid "Use ALTER TABLE instead." -msgstr "Considere usar ALTER TABLE." - -#: commands/typecmds.c:3642 commands/typecmds.c:3723 commands/typecmds.c:3921 +#: commands/typecmds.c:3794 commands/typecmds.c:3879 commands/typecmds.c:4121 #, c-format msgid "cannot alter array type %s" -msgstr "no se puede alterar el tipo de array «%s»" +msgstr "no se puede alterar el tipo de array %s" -#: commands/typecmds.c:3644 commands/typecmds.c:3725 commands/typecmds.c:3923 +#: commands/typecmds.c:3796 commands/typecmds.c:3881 commands/typecmds.c:4123 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Puede alterar el tipo %s, lo cual alterará el tipo de array también." -#: commands/typecmds.c:3991 +#: commands/typecmds.c:3892 +#, c-format +msgid "cannot alter multirange type %s" +msgstr "no se puede alterar el tipo multirango %s" + +#: commands/typecmds.c:3895 +#, c-format +msgid "You can alter type %s, which will alter the multirange type as well." +msgstr "Puede alterar el tipo %s, lo cual alterará el tipo de multirango también." + +#: commands/typecmds.c:4202 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "ya existe un tipo llamado «%s» en el esquema «%s»" -#: commands/typecmds.c:4159 +#: commands/typecmds.c:4382 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "no se puede cambiar el almacenamiento del tipo a PLAIN" -#: commands/typecmds.c:4252 +#: commands/typecmds.c:4475 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "el atributo de tipo «%s» no puede ser cambiado" -#: commands/typecmds.c:4270 +#: commands/typecmds.c:4493 #, c-format msgid "must be superuser to alter a type" msgstr "debe ser superusuario para alterar un tipo" -#: commands/typecmds.c:4291 commands/typecmds.c:4300 +#: commands/typecmds.c:4514 commands/typecmds.c:4523 #, c-format msgid "%s is not a base type" msgstr "«%s» no es un tipo base" -#: commands/user.c:201 +#: commands/user.c:200 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID ya no puede ser especificado" -#: commands/user.c:319 commands/user.c:325 commands/user.c:331 -#: commands/user.c:337 commands/user.c:343 +#: commands/user.c:318 commands/user.c:324 commands/user.c:330 +#: commands/user.c:336 commands/user.c:342 #, c-format msgid "permission denied to create role" msgstr "se ha denegado el permiso para crear el rol" -#: commands/user.c:320 +#: commands/user.c:319 #, c-format msgid "Only roles with the %s attribute may create roles." -msgstr "" +msgstr "Sólo los roles con el atributo %s pueden crear roles." -#: commands/user.c:326 commands/user.c:332 commands/user.c:338 -#: commands/user.c:344 +#: commands/user.c:325 commands/user.c:331 commands/user.c:337 +#: commands/user.c:343 #, c-format -msgid "Only roles with the %s attribute may create roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may create roles with the %s attribute." +msgstr "Sólo los roles con el atributo %s pueden crear roles con el atributo %s." -#: commands/user.c:355 commands/user.c:1393 commands/user.c:1400 -#: utils/adt/acl.c:5409 utils/adt/acl.c:5415 gram.y:16727 gram.y:16773 +#: commands/user.c:354 commands/user.c:1386 commands/user.c:1393 +#: utils/adt/acl.c:5574 utils/adt/acl.c:5580 gram.y:17310 gram.y:17356 #, c-format msgid "role name \"%s\" is reserved" msgstr "el nombre de rol «%s» está reservado" -#: commands/user.c:357 commands/user.c:1395 commands/user.c:1402 +#: commands/user.c:356 commands/user.c:1388 commands/user.c:1395 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Los nombres de rol que empiezan con «pg_» están reservados." -#: commands/user.c:378 commands/user.c:1417 +#: commands/user.c:377 commands/user.c:1410 #, c-format msgid "role \"%s\" already exists" msgstr "el rol «%s» ya existe" -#: commands/user.c:440 commands/user.c:925 +#: commands/user.c:439 commands/user.c:924 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "la cadena vacía no es una contraseña válida, limpiando la contraseña" -#: commands/user.c:469 +#: commands/user.c:468 #, c-format msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_authid no se definió en modo de actualización binaria" -#: commands/user.c:653 commands/user.c:1011 -#, fuzzy -#| msgid "cannot alter inherited column \"%s\"" +#: commands/user.c:652 commands/user.c:1010 msgid "Cannot alter reserved roles." -msgstr "no se puede alterar la columna heredada «%s»" +msgstr "No se pueden alterar roles reservados." -#: commands/user.c:760 commands/user.c:766 commands/user.c:782 -#: commands/user.c:790 commands/user.c:804 commands/user.c:810 -#: commands/user.c:816 commands/user.c:825 commands/user.c:870 -#: commands/user.c:1033 commands/user.c:1044 -#, fuzzy, c-format -#| msgid "permission denied to create role" +#: commands/user.c:759 commands/user.c:765 commands/user.c:781 +#: commands/user.c:789 commands/user.c:803 commands/user.c:809 +#: commands/user.c:815 commands/user.c:824 commands/user.c:869 +#: commands/user.c:1032 commands/user.c:1043 +#, c-format msgid "permission denied to alter role" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para alterar el rol" -#: commands/user.c:761 commands/user.c:1034 +#: commands/user.c:760 commands/user.c:1033 #, c-format -msgid "Only roles with the %s attribute may alter roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may alter roles with the %s attribute." +msgstr "Sólo los roles con el atributo %s pueden alterar roles con el atributo %s." -#: commands/user.c:767 commands/user.c:805 commands/user.c:811 -#: commands/user.c:817 +#: commands/user.c:766 commands/user.c:804 commands/user.c:810 +#: commands/user.c:816 #, c-format msgid "Only roles with the %s attribute may change the %s attribute." -msgstr "" +msgstr "Sólo roles con el atributo %s pueden cambiar el atributo %s." -#: commands/user.c:783 commands/user.c:1045 +#: commands/user.c:782 commands/user.c:1044 #, c-format msgid "Only roles with the %s attribute and the %s option on role \"%s\" may alter this role." -msgstr "" +msgstr "Sólo los roles con el atributo %s y la opción %s en el rol «%s» pueden alterar este rol." -#: commands/user.c:791 +#: commands/user.c:790 #, c-format msgid "To change another role's password, the current user must have the %s attribute and the %s option on the role." -msgstr "" +msgstr "Para cambiar la password de otro rol, el usuario actual debe tener el atributo %s y la opción %s en el rol." -#: commands/user.c:826 +#: commands/user.c:825 #, c-format -msgid "Only roles with the %s option on role \"%s\" may add members." -msgstr "" +#| msgid "Only roles with the %s option on role \"%s\" may add members." +msgid "Only roles with the %s option on role \"%s\" may add or drop members." +msgstr "Sólo los roles con la opción %s en el rol «%s» pueden agregar miembros." -#: commands/user.c:871 +#: commands/user.c:870 #, c-format -msgid "The bootstrap user must have the %s attribute." -msgstr "" +msgid "The bootstrap superuser must have the %s attribute." +msgstr "El superusuario de \"bootstrap\" debe tener el atributo %s." -#: commands/user.c:1076 -#, fuzzy, c-format -#| msgid "permission denied to create role" +#: commands/user.c:1075 +#, c-format msgid "permission denied to alter setting" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para modificar la configuración" -#: commands/user.c:1077 +#: commands/user.c:1076 #, c-format msgid "Only roles with the %s attribute may alter settings globally." -msgstr "" +msgstr "Sólo los roles con el atributo %s pueden modificar parámetros de configuración globalmente." -#: commands/user.c:1101 commands/user.c:1173 commands/user.c:1179 +#: commands/user.c:1100 commands/user.c:1171 commands/user.c:1177 #, c-format msgid "permission denied to drop role" msgstr "se ha denegado el permiso para eliminar el rol" -#: commands/user.c:1102 +#: commands/user.c:1101 #, c-format msgid "Only roles with the %s attribute and the %s option on the target roles may drop roles." -msgstr "" +msgstr "Sólo los roles con el atributo %s y la opción %s en los roles de destino pueden borrar roles." -#: commands/user.c:1127 +#: commands/user.c:1125 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "no se puede usar un especificador especial de rol en DROP ROLE" -#: commands/user.c:1137 commands/user.c:1364 commands/variable.c:836 -#: commands/variable.c:839 commands/variable.c:923 commands/variable.c:926 -#: utils/adt/acl.c:359 utils/adt/acl.c:379 utils/adt/acl.c:5264 -#: utils/adt/acl.c:5312 utils/adt/acl.c:5340 utils/adt/acl.c:5359 -#: utils/adt/regproc.c:1551 utils/init/miscinit.c:757 +#: 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 "no existe el rol «%s»" -#: commands/user.c:1142 +#: commands/user.c:1140 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "el rol «%s» no existe, omitiendo" -#: commands/user.c:1155 commands/user.c:1159 +#: commands/user.c:1153 commands/user.c:1157 #, c-format msgid "current user cannot be dropped" msgstr "el usuario activo no puede ser eliminado" -#: commands/user.c:1163 +#: commands/user.c:1161 #, c-format msgid "session user cannot be dropped" msgstr "no se puede eliminar un usuario de la sesión" -#: commands/user.c:1174 +#: commands/user.c:1172 #, c-format -msgid "Only roles with the %s attribute may drop roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may drop roles with the %s attribute." +msgstr "Sólo los roles con el atributo %s pueden borrar roles con el atributo %s." -#: commands/user.c:1180 +#: commands/user.c:1178 #, c-format msgid "Only roles with the %s attribute and the %s option on role \"%s\" may drop this role." -msgstr "" +msgstr "Sólo los roles con el atributo %s y la opción %s en el rol «%s» pueden borrar este rol." -#: commands/user.c:1306 +#: commands/user.c:1299 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "no se puede eliminar el rol «%s» porque otros objetos dependen de él" -#: commands/user.c:1380 +#: commands/user.c:1373 #, c-format msgid "session user cannot be renamed" msgstr "no se puede cambiar el nombre a un usuario de la sesión" -#: commands/user.c:1384 +#: commands/user.c:1377 #, c-format msgid "current user cannot be renamed" msgstr "no se puede cambiar el nombre al usuario activo" -#: commands/user.c:1428 commands/user.c:1438 +#: commands/user.c:1421 commands/user.c:1431 #, c-format msgid "permission denied to rename role" msgstr "se ha denegado el permiso para cambiar el nombre al rol" -#: commands/user.c:1429 +#: commands/user.c:1422 #, c-format -msgid "Only roles with the %s attribute may rename roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may rename roles with the %s attribute." +msgstr "Sólo los roles con el atributo %s pueden cambiar nombre a roles con el atributo %s." -#: commands/user.c:1439 +#: commands/user.c:1432 #, c-format msgid "Only roles with the %s attribute and the %s option on role \"%s\" may rename this role." -msgstr "" +msgstr "Sólo los roles con el atributo %s y la opción %s en el rol «%s» pueden cambiar nombre a este rol." -#: commands/user.c:1461 +#: commands/user.c:1454 #, c-format msgid "MD5 password cleared because of role rename" msgstr "la contraseña MD5 fue borrada debido al cambio de nombre del rol" -#: commands/user.c:1525 gram.y:1263 +#: commands/user.c:1518 gram.y:1294 #, c-format msgid "unrecognized role option \"%s\"" msgstr "opción de rol «%s» no reconocida" -#: commands/user.c:1530 -#, fuzzy, c-format -#| msgid "unrecognized value for option %s: %s" +#: commands/user.c:1523 +#, c-format msgid "unrecognized value for role option \"%s\": \"%s\"" -msgstr "valor no reconocido para la opción %s: %s" +msgstr "valor no reconocido para la opción de rol «%s»: «%s»" -#: commands/user.c:1563 +#: commands/user.c:1556 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "los nombres de columna no pueden ser incluidos en GRANT/REVOKE ROLE" -#: commands/user.c:1603 +#: commands/user.c:1596 #, c-format msgid "permission denied to drop objects" msgstr "se ha denegado el permiso para eliminar objetos" -#: commands/user.c:1604 +#: commands/user.c:1597 #, c-format msgid "Only roles with privileges of role \"%s\" may drop objects owned by it." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden borrar objetos de que es dueño." -#: commands/user.c:1632 commands/user.c:1643 +#: commands/user.c:1625 commands/user.c:1636 #, c-format msgid "permission denied to reassign objects" msgstr "se ha denegado el permiso para reasignar objetos" -#: commands/user.c:1633 +#: commands/user.c:1626 #, c-format msgid "Only roles with privileges of role \"%s\" may reassign objects owned by it." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden reasignar objetos de que es dueño." -#: commands/user.c:1644 +#: commands/user.c:1637 #, c-format msgid "Only roles with privileges of role \"%s\" may reassign objects to it." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden reasignar objetos a él." -#: commands/user.c:1740 +#: commands/user.c:1733 #, c-format msgid "role \"%s\" cannot be a member of any role" msgstr "el rol «%s» no puede ser miembro de ningún rol" -#: commands/user.c:1753 +#: commands/user.c:1746 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "el rol «%s» es un miembro del rol «%s»" -#: commands/user.c:1793 commands/user.c:1819 -#, fuzzy, c-format -#| msgid "grant options cannot be granted back to your own grantor" +#: commands/user.c:1786 commands/user.c:1812 +#, c-format msgid "%s option cannot be granted back to your own grantor" -msgstr "la opción de grant no puede ser otorgada de vuelta a quien la otorgó" +msgstr "la opción %s no puede ser otorgada de vuelta a quien la otorgó" -#: commands/user.c:1896 -#, fuzzy, c-format -#| msgid "role \"%s\" is a member of role \"%s\"" +#: commands/user.c:1889 +#, c-format msgid "role \"%s\" has already been granted membership in role \"%s\" by role \"%s\"" -msgstr "el rol «%s» es un miembro del rol «%s»" +msgstr "el rol «%s» ya recibió membresía en el rol «%s» por parte del rol «%s»" -#: commands/user.c:2031 -#, fuzzy, c-format -#| msgid "role \"%s\" cannot be a member of any role" +#: commands/user.c:2024 +#, c-format msgid "role \"%s\" has not been granted membership in role \"%s\" by role \"%s\"" -msgstr "el rol «%s» no puede ser miembro de ningún rol" +msgstr "al rol «%s» no se le ha otorgado membresía en el rol «%s» por parte del rol «%s»" -#: commands/user.c:2131 +#: commands/user.c:2124 #, c-format msgid "role \"%s\" cannot have explicit members" msgstr "el rol «%s» no puede tener miembros explícitos" -#: commands/user.c:2142 commands/user.c:2165 -#, fuzzy, c-format -#| msgid "permission denied to set role \"%s\"" +#: commands/user.c:2135 commands/user.c:2158 +#, c-format msgid "permission denied to grant role \"%s\"" -msgstr "se ha denegado el permiso para definir el rol «%s»" +msgstr "se ha denegado el permiso para otorgar el rol «%s»" -#: commands/user.c:2144 +#: commands/user.c:2137 #, c-format -msgid "Only roles with the %s attribute may grant roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may grant roles with the %s attribute." +msgstr "Sólo los roles con el atributo %s pueden otorgar roles con el atributo %s." -#: commands/user.c:2149 commands/user.c:2172 -#, fuzzy, c-format -#| msgid "permission denied to set role \"%s\"" +#: commands/user.c:2142 commands/user.c:2165 +#, c-format msgid "permission denied to revoke role \"%s\"" -msgstr "se ha denegado el permiso para definir el rol «%s»" +msgstr "se ha denegado el permiso para revocar el rol «%s»" -#: commands/user.c:2151 +#: commands/user.c:2144 #, c-format -msgid "Only roles with the %s attribute may revoke roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may revoke roles with the %s attribute." +msgstr "Sólo los roles con el atributo %s pueden revocar roles con el atributo %s." -#: commands/user.c:2167 +#: commands/user.c:2160 #, c-format msgid "Only roles with the %s option on role \"%s\" may grant this role." -msgstr "" +msgstr "Sólo los roles con la opción %s en el rol «%s» pueden otorgar este rol." -#: commands/user.c:2174 +#: commands/user.c:2167 #, c-format msgid "Only roles with the %s option on role \"%s\" may revoke this role." -msgstr "" +msgstr "Sólo los roles con la opción %s en el rol «%s» pueden revocar este rol." -#: commands/user.c:2254 commands/user.c:2263 -#, fuzzy, c-format -#| msgid "permission denied to set role \"%s\"" +#: commands/user.c:2247 commands/user.c:2256 +#, c-format msgid "permission denied to grant privileges as role \"%s\"" -msgstr "se ha denegado el permiso para definir el rol «%s»" +msgstr "se ha denegado el permiso para otorgar privilegio de rol «%s»" -#: commands/user.c:2256 +#: commands/user.c:2249 #, c-format msgid "Only roles with privileges of role \"%s\" may grant privileges as this role." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden otorgar privilegios como este rol." -#: commands/user.c:2265 -#, fuzzy, c-format -#| msgid "cannot use the \"%s\" option with the \"%s\" option" +#: commands/user.c:2258 +#, c-format msgid "The grantor must have the %s option on role \"%s\"." -msgstr "no se puede usar la opción «%s» junto con la opción «%s»" +msgstr "El otorgador debe tener la opción %s en el rol «%s»." -#: commands/user.c:2273 -#, fuzzy, c-format -#| msgid "permission denied to set role \"%s\"" +#: commands/user.c:2266 +#, c-format msgid "permission denied to revoke privileges granted by role \"%s\"" -msgstr "se ha denegado el permiso para definir el rol «%s»" +msgstr "se ha denegado el permiso a revocar permisos otorgados por el rol «%s»" -#: commands/user.c:2275 +#: commands/user.c:2268 #, c-format msgid "Only roles with privileges of role \"%s\" may revoke privileges granted by this role." -msgstr "" +msgstr "Sólo los roles con privilegios del rol «%s» pueden revocar privilegios otorgados por este rol." -#: commands/user.c:2498 utils/adt/acl.c:1312 +#: commands/user.c:2491 utils/adt/acl.c:1324 #, c-format msgid "dependent privileges exist" msgstr "existen privilegios dependientes" -#: commands/user.c:2499 utils/adt/acl.c:1313 +#: commands/user.c:2492 utils/adt/acl.c:1325 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Use CASCADE para revocarlos también." -#: commands/vacuum.c:138 +#: commands/vacuum.c:134 #, c-format msgid "\"vacuum_buffer_usage_limit\" must be 0 or between %d kB and %d kB" -msgstr "" +msgstr "«vacuum_buffer_usage_limit» debe ser 0 o estar entre %d kB y %d kB" -#: commands/vacuum.c:210 -#, fuzzy, c-format -#| msgid "NUMERIC precision %d must be between 1 and %d" +#: commands/vacuum.c:209 +#, c-format msgid "BUFFER_USAGE_LIMIT option must be 0 or between %d kB and %d kB" -msgstr "la precisión %d de NUMERIC debe estar entre 1 y %d" +msgstr "la opción BUFFER_USAGE_LIMIT debe ser 0 o estar entre %d kB y %d kB" -#: commands/vacuum.c:220 +#: commands/vacuum.c:219 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "opción de ANALYZE «%s» no reconocida" -#: commands/vacuum.c:260 +#: commands/vacuum.c:259 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "la opción parallel requiere un valor entre 0 y %d" -#: commands/vacuum.c:272 +#: commands/vacuum.c:271 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "el número de procesos paralelos para vacuum debe estar entre 0 y %d" -#: commands/vacuum.c:293 +#: commands/vacuum.c:292 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "opción de VACUUM «%s» no reconocida" -#: commands/vacuum.c:319 +#: commands/vacuum.c:318 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL no puede ser ejecutado en paralelo" -#: commands/vacuum.c:330 +#: commands/vacuum.c:329 #, c-format msgid "BUFFER_USAGE_LIMIT cannot be specified for VACUUM FULL" -msgstr "" +msgstr "BUFFER_USAGE_LIMIT no puede ser especificado para VACUUM FULL" -#: commands/vacuum.c:344 +#: commands/vacuum.c:343 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "la opción ANALYZE debe especificarse cuando se provee una lista de columnas" -#: commands/vacuum.c:356 +#: commands/vacuum.c:355 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "la opción DISABLE_PAGE_SKIPPING de VACUUM no puede usarse con FULL" -#: commands/vacuum.c:363 +#: commands/vacuum.c:362 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "se requiere especificar PROCESS_TOAST al hacer VACUUM FULL" -#: commands/vacuum.c:372 -#, fuzzy, c-format -#| msgid "OLD TABLE cannot be specified multiple times" +#: commands/vacuum.c:371 +#, c-format msgid "ONLY_DATABASE_STATS cannot be specified with a list of tables" -msgstr "OLD TABLE no se puede especificar varias veces" +msgstr "ONLY_DATABASE_STATS no se puede especificar con una lista de tablas" -#: commands/vacuum.c:381 -#, fuzzy, c-format -#| msgid "option \"%s\" cannot be specified with other options" +#: commands/vacuum.c:380 +#, c-format msgid "ONLY_DATABASE_STATS cannot be specified with other VACUUM options" -msgstr "la opción «%s» no puede ser especificada con otras opciones" +msgstr "ONLY_DATABASE_STATS no puede ser especificada con otras opciones de VACUUM" -#: commands/vacuum.c:516 +#: commands/vacuum.c:515 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s no puede ejecutarse desde VACUUM o ANALYZE" -#: commands/vacuum.c:736 -#, fuzzy, c-format -#| msgid "permission denied for column %s" +#: commands/vacuum.c:730 +#, c-format msgid "permission denied to vacuum \"%s\", skipping it" -msgstr "permiso denegado a la columna %s" +msgstr "permiso denegado a hacer vacuum a «%s», ignorando" -#: commands/vacuum.c:749 -#, fuzzy, c-format -#| msgid "permission denied to set role \"%s\"" +#: commands/vacuum.c:743 +#, c-format msgid "permission denied to analyze \"%s\", skipping it" -msgstr "se ha denegado el permiso para definir el rol «%s»" +msgstr "se ha denegado el permiso para hacer analyze a «%s», ignorando" -#: commands/vacuum.c:827 commands/vacuum.c:924 +#: commands/vacuum.c:821 commands/vacuum.c:918 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" -msgstr "omitiendo el vacuum de «%s»: el candado no está disponible" +msgstr "omitiendo el vacuum de «%s»: el “lock” no está disponible" -#: commands/vacuum.c:832 +#: commands/vacuum.c:826 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "omitiendo el vacuum de «%s» --- la relación ya no existe" -#: commands/vacuum.c:848 commands/vacuum.c:929 +#: commands/vacuum.c:842 commands/vacuum.c:923 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" -msgstr "omitiendo analyze de «%s»: el candado no está disponible" +msgstr "omitiendo analyze de «%s»: el “lock” no está disponible" -#: commands/vacuum.c:853 +#: commands/vacuum.c:847 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "omitiendo analyze de «%s» --- la relación ya no existe" -#: commands/vacuum.c:1164 +#: commands/vacuum.c:1139 #, c-format msgid "cutoff for removing and freezing tuples is far in the past" -msgstr "" +msgstr "el punto de corte para eliminar y congelar tuplas es demasiado antiguo" -#: commands/vacuum.c:1165 commands/vacuum.c:1170 +#: commands/vacuum.c:1140 commands/vacuum.c:1145 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." msgstr "" -"Cierre transaciones abiertas pronto para impedir problemas por reciclaje de contadores.\n" +"Cierre transaciones abiertas pronto para impedir problemas por “wraparound”.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: commands/vacuum.c:1169 +#: commands/vacuum.c:1144 #, c-format msgid "cutoff for freezing multixacts is far in the past" -msgstr "" +msgstr "el punto de corte para congelar multixacts es demasiado antiguo" -#: commands/vacuum.c:1897 +#: commands/vacuum.c:1900 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "algunas bases de datos no han tenido VACUUM en más de 2 mil millones de transacciones" -#: commands/vacuum.c:1898 +#: commands/vacuum.c:1901 #, c-format msgid "You might have already suffered transaction-wraparound data loss." -msgstr "Puede haber sufrido ya problemas de pérdida de datos por reciclaje del contador de transacciones." +msgstr "Puede haber sufrido ya problemas de pérdida de datos por “wraparound” del contador de transacciones." -#: commands/vacuum.c:2063 +#: commands/vacuum.c:2080 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "omitiendo «%s»: no se puede aplicar VACUUM a objetos que no son tablas o a tablas especiales de sistema" -#: commands/vacuum.c:2488 +#: commands/vacuum.c:2512 #, c-format -msgid "scanned index \"%s\" to remove %d row versions" -msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" +msgid "scanned index \"%s\" to remove %lld row versions" +msgstr "se recorrió el índice «%s» para eliminar %lld versiones de filas" -#: commands/vacuum.c:2507 +#: commands/vacuum.c:2531 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" -#: commands/vacuum.c:2511 +#: commands/vacuum.c:2535 #, c-format msgid "" "%.0f index row versions were removed.\n" "%u index pages were newly deleted.\n" "%u index pages are currently deleted, of which %u are currently reusable." msgstr "" +"%.0f versiones de filas de índice fueron eliminadas.\n" +"%u páginas de índice fueron recién eliminadas.\n" +"%u páginas de índice están actualmente eliminadas, de las cuales %u son actualmente reusables." -#: commands/vacuumparallel.c:677 +#: 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] "se lanzó %d proceso asistente para «vacuum» de índices (planeados: %d)" msgstr[1] "se lanzaron %d procesos asistentes para «vacuum» índices (planeados: %d)" -#: commands/vacuumparallel.c:683 +#: 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)" @@ -13033,7 +13350,7 @@ msgstr "SET TRANSACTION ISOLATION LEVEL debe ser llamado antes de cualquier cons msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVEL no debe ser llamado en una subtransacción" -#: commands/variable.c:606 storage/lmgr/predicate.c:1629 +#: commands/variable.c:606 storage/lmgr/predicate.c:1685 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "no se puede utilizar el modo serializable en un hot standby" @@ -13065,91 +13382,100 @@ msgstr "No se puede cambiar «client_encoding» ahora." #: commands/variable.c:781 #, c-format -msgid "cannot change client_encoding during a parallel operation" +msgid "cannot change \"client_encoding\" during a parallel operation" msgstr "no se puede cambiar «client_encoding» durante una operación paralela" -#: commands/variable.c:948 +#: commands/variable.c:876 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "se denegará el permiso para definir autorización de sesión «%s»" + +#: commands/variable.c:881 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "se ha denegado el permiso para definir autorización de sesión «%s»" + +#: commands/variable.c:991 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "se denegará el permiso para definir el rol «%s»" -#: commands/variable.c:953 +#: commands/variable.c:996 #, c-format msgid "permission denied to set role \"%s\"" msgstr "se ha denegado el permiso para definir el rol «%s»" -#: commands/variable.c:1153 +#: commands/variable.c:1200 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour no está soportado en este servidor" -#: commands/variable.c:1181 +#: commands/variable.c:1228 #, c-format -msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." -msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." +msgid "\"effective_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." +msgstr "«effective_io_concurrency» debe ser 0 en plataformas que no tienen posix_fadvise()." -#: commands/variable.c:1194 +#: commands/variable.c:1241 #, c-format -msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." -msgstr "maintenance_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." +msgid "\"maintenance_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." +msgstr "«maintenance_io_concurrency» debe ser 0 en plataformas que no tienen posix_fadvise()." -#: commands/variable.c:1207 +#: commands/variable.c:1254 #, c-format msgid "SSL is not supported by this build" msgstr "SSL no está soportado en este servidor" -#: commands/view.c:84 +#: commands/view.c:79 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "no se pudo determinar el ordenamiento (collation) a usar para la columna «%s» de vista" -#: commands/view.c:279 commands/view.c:290 +#: commands/view.c:274 commands/view.c:285 #, c-format msgid "cannot drop columns from view" msgstr "no se pueden eliminar columnas de una vista" -#: commands/view.c:295 +#: commands/view.c:290 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "no se puede cambiar el nombre de la columna «%s» de la vista a «%s»" -#: commands/view.c:298 +#: commands/view.c:293 #, c-format msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." msgstr "Use ALTER VIEW ... RENAME COLUMN ... para cambiar el nombre de una columna de una vista." -#: commands/view.c:309 +#: commands/view.c:304 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "no se puede cambiar el tipo de dato de la columna «%s» de la vista de %s a %s" -#: commands/view.c:323 -#, fuzzy, c-format -#| msgid "cannot change data type of view column \"%s\" from %s to %s" +#: commands/view.c:318 +#, c-format msgid "cannot change collation of view column \"%s\" from \"%s\" to \"%s\"" -msgstr "no se puede cambiar el tipo de dato de la columna «%s» de la vista de %s a %s" +msgstr "no se puede cambiar el ordenamiento de la columna «%s» de la vista de «%s» a «%s»" -#: commands/view.c:392 +#: commands/view.c:387 #, c-format msgid "views must not contain SELECT INTO" msgstr "una vista no puede tener SELECT INTO" -#: commands/view.c:404 +#: commands/view.c:399 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "las vistas no deben contener sentencias que modifiquen datos en WITH" -#: commands/view.c:474 +#: commands/view.c:469 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW especifica más nombres de columna que columnas" -#: commands/view.c:482 +#: commands/view.c:477 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "las vistas no pueden ser «unlogged» porque no tienen almacenamiento" -#: commands/view.c:496 +#: commands/view.c:491 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "la vista «%s» será una vista temporal" @@ -13185,515 +13511,505 @@ msgstr "el cursor «%s» no está posicionado en una fila" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "el cursor «%s» no es un recorrido simplemente actualizable de la tabla «%s»" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2497 +#: 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 "el tipo del parámetro %d (%s) no coincide aquel con que fue preparado el plan (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2509 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2567 #, c-format msgid "no value found for parameter %d" msgstr "no se encontró un valor para parámetro %d" -#: executor/execExpr.c:637 executor/execExpr.c:644 executor/execExpr.c:650 -#: executor/execExprInterp.c:4229 executor/execExprInterp.c:4246 -#: executor/execExprInterp.c:4345 executor/nodeModifyTable.c:197 -#: executor/nodeModifyTable.c:208 executor/nodeModifyTable.c:225 -#: executor/nodeModifyTable.c:233 +#: 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 "el tipo de registro de la tabla no coincide con el tipo de registro de la consulta" -#: executor/execExpr.c:638 executor/nodeModifyTable.c:198 +#: executor/execExpr.c:643 executor/nodeModifyTable.c:204 #, c-format msgid "Query has too many columns." msgstr "La consulta tiene demasiadas columnas." -#: executor/execExpr.c:645 executor/nodeModifyTable.c:226 +#: executor/execExpr.c:650 executor/nodeModifyTable.c:232 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "La consulta entrega un valor para una columna eliminada en la posición %d." -#: executor/execExpr.c:651 executor/execExprInterp.c:4247 -#: executor/nodeModifyTable.c:209 +#: 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 "La tabla tiene tipo %s en posición ordinal %d, pero la consulta esperaba %s." -#: executor/execExpr.c:1099 parser/parse_agg.c:827 +#: executor/execExpr.c:1104 parser/parse_agg.c:838 #, c-format msgid "window function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de ventana deslizante" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1649 #, c-format msgid "target type is not an array" msgstr "el tipo de destino no es un array" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1989 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "la columna de ROW() es de tipo %s en lugar de ser de tipo %s" -#: executor/execExpr.c:2587 executor/execSRF.c:719 parser/parse_func.c:138 -#: parser/parse_func.c:655 parser/parse_func.c:1032 +#: 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] "no se pueden pasar más de %d argumento a una función" msgstr[1] "no se pueden pasar más de %d argumentos a una función" -#: executor/execExpr.c:2614 executor/execSRF.c:739 executor/functions.c:1066 -#: utils/adt/jsonfuncs.c:3780 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 "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" -#: executor/execExpr.c:3020 parser/parse_node.c:277 parser/parse_node.c:327 +#: 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 "no se puede poner subíndices al tipo %s porque no soporta subíndices" -#: executor/execExpr.c:3148 executor/execExpr.c:3170 +#: executor/execExpr.c:3214 executor/execExpr.c:3236 #, c-format msgid "type %s does not support subscripted assignment" msgstr "el tipo %s no soporta asignación subindexada" -#: executor/execExprInterp.c:1962 +#: executor/execExprInterp.c:2019 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "El atributo %d de tipo %s ha sido eliminado" -#: executor/execExprInterp.c:1968 +#: executor/execExprInterp.c:2025 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "el atributo %d del tipo %s tiene tipo erróneo" -#: executor/execExprInterp.c:1970 executor/execExprInterp.c:3103 -#: executor/execExprInterp.c:3149 +#: executor/execExprInterp.c:2027 executor/execExprInterp.c:3226 +#: executor/execExprInterp.c:3272 #, c-format msgid "Table has type %s, but query expects %s." msgstr "La tabla tiene tipo %s, pero la consulta esperaba %s." -#: executor/execExprInterp.c:2049 utils/adt/expandedrecord.c:99 -#: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1743 -#: utils/cache/typcache.c:1902 utils/cache/typcache.c:2049 -#: utils/fmgr/funcapi.c:561 +#: 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 "el tipo %s no es compuesto" -#: executor/execExprInterp.c:2587 +#: executor/execExprInterp.c:2710 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" -#: executor/execExprInterp.c:2800 +#: executor/execExprInterp.c:2923 #, c-format msgid "cannot merge incompatible arrays" msgstr "no se puede mezclar arrays incompatibles" -#: executor/execExprInterp.c:2801 +#: executor/execExprInterp.c:2924 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "El array con tipo de elemento %s no puede ser incluido en una sentencia ARRAY con tipo de elemento %s." -#: executor/execExprInterp.c:2822 utils/adt/arrayfuncs.c:265 -#: utils/adt/arrayfuncs.c:575 utils/adt/arrayfuncs.c:1329 -#: utils/adt/arrayfuncs.c:3483 utils/adt/arrayfuncs.c:5567 -#: utils/adt/arrayfuncs.c:6084 utils/adt/arraysubs.c:150 +#: 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 "el número de dimensiones del array (%d) excede el máximo permitido (%d)" -#: executor/execExprInterp.c:2842 executor/execExprInterp.c:2877 +#: executor/execExprInterp.c:2965 executor/execExprInterp.c:3000 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "los arrays multidimensionales deben tener expresiones de arrays con dimensiones coincidentes" -#: executor/execExprInterp.c:2854 utils/adt/array_expanded.c:274 -#: utils/adt/arrayfuncs.c:959 utils/adt/arrayfuncs.c:1568 -#: utils/adt/arrayfuncs.c:3285 utils/adt/arrayfuncs.c:3513 -#: utils/adt/arrayfuncs.c:6176 utils/adt/arrayfuncs.c:6517 -#: utils/adt/arrayutils.c:104 utils/adt/arrayutils.c:113 -#: utils/adt/arrayutils.c:120 +#: 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 "el tamaño del array excede el máximo permitido (%d)" -#: executor/execExprInterp.c:3102 executor/execExprInterp.c:3148 +#: executor/execExprInterp.c:3225 executor/execExprInterp.c:3271 #, c-format msgid "attribute %d has wrong type" msgstr "el atributo %d tiene tipo erróneo" -#: executor/execExprInterp.c:3730 utils/adt/domains.c:155 +#: executor/execExprInterp.c:3857 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "el dominio %s no permite valores null" -#: executor/execExprInterp.c:3745 utils/adt/domains.c:193 +#: executor/execExprInterp.c:3872 utils/adt/domains.c:196 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "el valor para el dominio %s viola la restricción «check» «%s»" -#: executor/execExprInterp.c:4230 +#: executor/execExprInterp.c:4447 +#, c-format +msgid "no SQL/JSON item found for specified path of column \"%s\"" +msgstr "ningún ítem SQL/JSON fue encontrado para la ruta especificada de la columna «%s»" + +#: executor/execExprInterp.c:4452 +#, c-format +msgid "no SQL/JSON item found for specified path" +msgstr "ningún ítem SQL/JSON fue encontrado para la ruta especificada" + +#. 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 "no se pudo convertir la expresión %s (%s) al tipo 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] "La fila de la tabla contiene %d atributo, pero la consulta esperaba %d." msgstr[1] "La fila de la tabla contiene %d atributos, pero la consulta esperaba %d." -#: executor/execExprInterp.c:4346 executor/execSRF.c:978 +#: executor/execExprInterp.c:4969 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Discordancia de almacenamiento físico en atributo eliminado en la posición %d." -#: executor/execIndexing.c:588 +#: executor/execIndexing.c:593 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "ON CONFLICT no soporta las restricciones únicas o de exclusión postergables como árbitros" -#: executor/execIndexing.c:865 +#: executor/execIndexing.c:870 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "no se pudo crear la restricción de exclusión «%s»" -#: executor/execIndexing.c:868 +#: executor/execIndexing.c:873 #, c-format msgid "Key %s conflicts with key %s." msgstr "La llave %s está en conflicto con la llave %s." -#: executor/execIndexing.c:870 +#: executor/execIndexing.c:875 #, c-format msgid "Key conflicts exist." msgstr "Existe un conflicto de llave." -#: executor/execIndexing.c:876 +#: executor/execIndexing.c:881 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "llave en conflicto viola la restricción de exclusión «%s»" -#: executor/execIndexing.c:879 +#: executor/execIndexing.c:884 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "La llave %s está en conflicto con la llave existente %s." -#: executor/execIndexing.c:881 +#: executor/execIndexing.c:886 #, c-format msgid "Key conflicts with existing key." msgstr "La llave está en conflicto con una llave existente." -#: executor/execMain.c:1030 +#: executor/execMain.c:1039 #, c-format msgid "cannot change sequence \"%s\"" msgstr "no se puede cambiar la secuencia «%s»" -#: executor/execMain.c:1036 +#: executor/execMain.c:1045 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "no se puede cambiar la relación TOAST «%s»" -#: executor/execMain.c:1054 rewrite/rewriteHandler.c:3078 -#: rewrite/rewriteHandler.c:3965 -#, c-format -msgid "cannot insert into view \"%s\"" -msgstr "no se puede insertar en la vista «%s»" - -#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3081 -#: rewrite/rewriteHandler.c:3968 -#, c-format -msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." -msgstr "Para posibilitar las inserciones en la vista, provea un disparador INSTEAD OF INSERT o una regla incodicional ON INSERT DO INSTEAD." - -#: executor/execMain.c:1062 rewrite/rewriteHandler.c:3086 -#: rewrite/rewriteHandler.c:3973 -#, c-format -msgid "cannot update view \"%s\"" -msgstr "no se puede actualizar la vista «%s»" - -#: executor/execMain.c:1064 rewrite/rewriteHandler.c:3089 -#: rewrite/rewriteHandler.c:3976 -#, c-format -msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." -msgstr "Para posibilitar las actualizaciones en la vista, provea un disparador INSTEAD OF UPDATE o una regla incondicional ON UPDATE DO INSTEAD." - -#: executor/execMain.c:1070 rewrite/rewriteHandler.c:3094 -#: rewrite/rewriteHandler.c:3981 -#, c-format -msgid "cannot delete from view \"%s\"" -msgstr "no se puede eliminar de la vista «%s»" - -#: executor/execMain.c:1072 rewrite/rewriteHandler.c:3097 -#: rewrite/rewriteHandler.c:3984 -#, c-format -msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." -msgstr "Para posibilitar las eliminaciones en la vista, provea un disparador INSTEAD OF DELETE o una regla incondicional ON DELETE DO INSTEAD." - -#: executor/execMain.c:1083 +#: executor/execMain.c:1064 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "no se puede cambiar la vista materializada «%s»" -#: executor/execMain.c:1095 +#: executor/execMain.c:1076 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "no se puede insertar en la tabla foránea «%s»" -#: executor/execMain.c:1101 +#: executor/execMain.c:1082 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la tabla foránea «%s» no permite inserciones" -#: executor/execMain.c:1108 +#: executor/execMain.c:1089 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "no se puede actualizar la tabla foránea «%s»" -#: executor/execMain.c:1114 +#: executor/execMain.c:1095 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la tabla foránea «%s» no permite actualizaciones" -#: executor/execMain.c:1121 +#: executor/execMain.c:1102 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "no se puede eliminar desde la tabla foránea «%s»" -#: executor/execMain.c:1127 +#: executor/execMain.c:1108 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la tabla foránea «%s» no permite eliminaciones" -#: executor/execMain.c:1138 +#: executor/execMain.c:1119 #, c-format msgid "cannot change relation \"%s\"" msgstr "no se puede cambiar la relación «%s»" -#: executor/execMain.c:1165 +#: executor/execMain.c:1146 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "no se puede bloquear registros de la secuencia «%s»" -#: executor/execMain.c:1172 +#: executor/execMain.c:1153 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "no se puede bloquear registros en la relación TOAST «%s»" -#: executor/execMain.c:1179 +#: executor/execMain.c:1160 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "no se puede bloquear registros en la vista «%s»" -#: executor/execMain.c:1187 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "no se puede bloquear registros en la vista materializada «%s»" -#: executor/execMain.c:1196 executor/execMain.c:2699 +#: executor/execMain.c:1177 executor/execMain.c:2689 #: executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "no se puede bloquear registros en la tabla foránea «%s»" -#: executor/execMain.c:1202 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "no se puede bloquear registros en la tabla «%s»" -#: executor/execMain.c:1913 +#: executor/execMain.c:1901 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "el nuevo registro para la relación «%s» viola la restricción de partición" -#: executor/execMain.c:1915 executor/execMain.c:1999 executor/execMain.c:2050 -#: executor/execMain.c:2160 +#: executor/execMain.c:1903 executor/execMain.c:1987 executor/execMain.c:2038 +#: executor/execMain.c:2148 #, c-format msgid "Failing row contains %s." msgstr "La fila que falla contiene %s." -#: executor/execMain.c:1996 +#: executor/execMain.c:1984 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "el valor nulo en la columna «%s» de la relación «%s» viola la restricción de no nulo" -#: executor/execMain.c:2048 +#: executor/execMain.c:2036 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "el nuevo registro para la relación «%s» viola la restricción «check» «%s»" -#: executor/execMain.c:2158 +#: executor/execMain.c:2146 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "el nuevo registro para la vista «%s» viola la opción check" -#: executor/execMain.c:2168 +#: executor/execMain.c:2156 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros «%s» para la tabla «%s»" -#: executor/execMain.c:2173 +#: executor/execMain.c:2161 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros para la tabla «%s»" -#: executor/execMain.c:2181 -#, fuzzy, c-format -#| msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" +#: executor/execMain.c:2169 +#, c-format msgid "target row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" -msgstr "el nuevo registro viola la política de seguridad de registros «%s» (expresión USING) para la tabla «%s»" +msgstr "el registro destino viola la política de seguridad de registros «%s» (expresión USING) para la tabla «%s»" -#: executor/execMain.c:2186 -#, fuzzy, c-format -#| msgid "new row violates row-level security policy (USING expression) for table \"%s\"" +#: executor/execMain.c:2174 +#, c-format msgid "target row violates row-level security policy (USING expression) for table \"%s\"" -msgstr "el nuevo registro viola la política de seguridad de registros (expresión USING) para la tabla «%s»" +msgstr "el registro destino viola la política de seguridad de registros (expresión USING) para la tabla «%s»" -#: executor/execMain.c:2193 +#: executor/execMain.c:2181 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros «%s» (expresión USING) para la tabla «%s»" -#: executor/execMain.c:2198 +#: executor/execMain.c:2186 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros (expresión USING) para la tabla «%s»" -#: executor/execPartition.c:330 +#: executor/execPartition.c:327 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "no se encontró una partición de «%s» para el registro" -#: executor/execPartition.c:333 +#: executor/execPartition.c:330 #, c-format msgid "Partition key of the failing row contains %s." msgstr "La llave de particionamiento de la fila que falla contiene %s." -#: executor/execReplication.c:240 executor/execReplication.c:424 +#: executor/execReplication.c:272 executor/execReplication.c:456 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "el registro a ser bloqueado ya fue movido a otra partición debido a un update concurrente, reintentando" -#: executor/execReplication.c:244 executor/execReplication.c:428 +#: executor/execReplication.c:276 executor/execReplication.c:460 #, c-format msgid "concurrent update, retrying" msgstr "actualización simultánea, reintentando" -#: executor/execReplication.c:250 executor/execReplication.c:434 +#: executor/execReplication.c:282 executor/execReplication.c:466 #, c-format msgid "concurrent delete, retrying" msgstr "eliminacón concurrente, reintentando" -#: executor/execReplication.c:320 parser/parse_cte.c:308 -#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:1348 -#: utils/adt/array_userfuncs.c:1491 utils/adt/arrayfuncs.c:3832 -#: utils/adt/arrayfuncs.c:4387 utils/adt/arrayfuncs.c:6397 -#: utils/adt/rowtypes.c:1230 +#: 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 "no se pudo identificar un operador de igualdad para el tipo %s" -#: executor/execReplication.c:651 executor/execReplication.c:657 -#, fuzzy, c-format -#| msgid "cannot update foreign table \"%s\"" +#: executor/execReplication.c:687 executor/execReplication.c:693 +#, c-format msgid "cannot update table \"%s\"" -msgstr "no se puede actualizar la tabla foránea «%s»" +msgstr "no se puede actualizar la tabla «%s»" -#: executor/execReplication.c:653 executor/execReplication.c:665 +#: 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 "La columna usada en la expresión WHERE de la publicación no es parte de la identidad de replicación." -#: executor/execReplication.c:659 executor/execReplication.c:671 +#: executor/execReplication.c:695 executor/execReplication.c:707 #, c-format msgid "Column list used by the publication does not cover the replica identity." msgstr "La lista de columnas usada por la publicación no incluye la identidad de replicación." -#: executor/execReplication.c:663 executor/execReplication.c:669 -#, fuzzy, c-format -#| msgid "cannot delete from foreign table \"%s\"" +#: executor/execReplication.c:699 executor/execReplication.c:705 +#, c-format msgid "cannot delete from table \"%s\"" -msgstr "no se puede eliminar desde la tabla foránea «%s»" +msgstr "no se puede eliminar desde la tabla «%s»" -#: executor/execReplication.c:689 +#: executor/execReplication.c:725 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "no se puede actualizar la tabla «%s» porque no tiene identidad de replicación y publica updates" -#: executor/execReplication.c:691 +#: executor/execReplication.c:727 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Para habilitar la actualización de la tabla, configure REPLICA IDENTITY utilizando ALTER TABLE." -#: executor/execReplication.c:695 +#: executor/execReplication.c:731 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "no se puede eliminar de la tabla «%s» porque no tiene una identidad de replicación y publica deletes" -#: executor/execReplication.c:697 +#: executor/execReplication.c:733 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "para habilitar la eliminación en la tabla, configure REPLICA IDENTITY utilizando ALTER TABLE." -#: executor/execReplication.c:713 +#: executor/execReplication.c:749 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "no se puede usar la relación «%s.%s» como destino de replicación lógica" -#: executor/execSRF.c:316 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "las filas retornadas por la función no tienen todas el mismo tipo de registro" -#: executor/execSRF.c:366 +#: executor/execSRF.c:365 #, c-format msgid "table-function protocol for value-per-call mode was not followed" msgstr "no se siguió el protocolo de función tabular para el modo de valor por llamada" -#: executor/execSRF.c:374 executor/execSRF.c:668 +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "no se siguió el protocolo de función tabular para el modo de materialización" -#: executor/execSRF.c:381 executor/execSRF.c:686 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "modo de retorno de la función tabular no es reconocido: %d" -#: executor/execSRF.c:895 +#: executor/execSRF.c:894 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "se llamó una función que retorna «setof record» en un contexto que no puede aceptar el tipo record" -#: executor/execSRF.c:951 executor/execSRF.c:967 executor/execSRF.c:977 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "la fila de retorno especificada en la consulta no coincide con fila de retorno de la función" -#: executor/execSRF.c:952 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "Fila retornada contiene %d atributo, pero la consulta esperaba %d." msgstr[1] "Fila retornada contiene %d atributos, pero la consulta esperaba %d." -#: executor/execSRF.c:968 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Tipo retornado %s en posición ordinal %d, pero la consulta esperaba %s." -#: executor/execTuples.c:146 executor/execTuples.c:353 -#: executor/execTuples.c:521 executor/execTuples.c:713 +#: executor/execTuples.c:147 executor/execTuples.c:368 +#: executor/execTuples.c:563 executor/execTuples.c:772 #, c-format msgid "cannot retrieve a system column in this context" msgstr "no se puede obtener una columna de sistema en este contexto" -#: executor/execUtils.c:744 +#: executor/execTuples.c:163 executor/execTuples.c:580 +#, c-format +msgid "don't have transaction information for this type of tuple" +msgstr "no se tiene información de transacción para este tipo de tupla" + +#: executor/execTuples.c:390 executor/execTuples.c:794 +#, c-format +msgid "don't have a storage tuple in this context" +msgstr "no se tiene una tupla de almacenamiento en este contexto" + +#: executor/execUtils.c:713 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "la vista materializada «%s» no ha sido poblada" -#: executor/execUtils.c:746 +#: executor/execUtils.c:715 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Use la orden REFRESH MATERIALIZED VIEW." @@ -13703,111 +14019,111 @@ msgstr "Use la orden REFRESH MATERIALIZED VIEW." msgid "could not determine actual type of argument declared %s" msgstr "no se pudo determinar el tipo de argumento declarado %s" -#: executor/functions.c:512 +#: executor/functions.c:513 #, c-format msgid "cannot COPY to/from client in an SQL function" msgstr "no se puede ejecutar COPY desde/a un cliente en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:518 +#: executor/functions.c:519 #, c-format msgid "%s is not allowed in an SQL function" msgstr "%s no está permitido en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:526 executor/spi.c:1742 executor/spi.c:2635 +#: 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 no está permitido en una función no-«volatile»" -#: executor/functions.c:1450 +#: executor/functions.c:1452 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "función SQL «%s» en la sentencia %d" -#: executor/functions.c:1476 +#: executor/functions.c:1478 #, c-format msgid "SQL function \"%s\" during startup" msgstr "función SQL «%s» durante el inicio" -#: executor/functions.c:1561 +#: executor/functions.c:1563 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "no está permitido invocar procedimientos con argumentos de salida en funciones SQL" -#: executor/functions.c:1694 executor/functions.c:1732 -#: executor/functions.c:1746 executor/functions.c:1836 -#: executor/functions.c:1869 executor/functions.c:1883 +#: 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 "el tipo de retorno de función declarada para retornar %s no concuerda" -#: executor/functions.c:1696 +#: executor/functions.c:1700 #, c-format -msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." -msgstr "La sentencia final de la función debe ser un SELECT o INSERT/UPDATE/DELETE RETURNING." +msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." +msgstr "La sentencia final de la función debe ser un SELECT o INSERT/UPDATE/DELETE/MERGE RETURNING." -#: executor/functions.c:1734 +#: executor/functions.c:1738 #, c-format msgid "Final statement must return exactly one column." msgstr "La sentencia final debe retornar exactamente una columna." -#: executor/functions.c:1748 +#: executor/functions.c:1752 #, c-format msgid "Actual return type is %s." msgstr "El verdadero tipo de retorno es %s." -#: executor/functions.c:1838 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns too many columns." msgstr "La sentencia final retorna demasiadas columnas." -#: executor/functions.c:1871 +#: executor/functions.c:1880 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "La sentencia final retorna %s en lugar de %s en la columna %d." -#: executor/functions.c:1885 +#: executor/functions.c:1894 #, c-format msgid "Final statement returns too few columns." msgstr "La sentencia final retorna muy pocas columnas." -#: executor/functions.c:1913 +#: executor/functions.c:1922 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "el tipo de retorno %s no es soportado en funciones SQL" -#: executor/nodeAgg.c:3937 executor/nodeWindowAgg.c:2993 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2975 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "la función de agregación %u necesita tener tipos de entrada y transición compatibles" -#: executor/nodeAgg.c:3967 parser/parse_agg.c:669 parser/parse_agg.c:697 +#: executor/nodeAgg.c:3966 parser/parse_agg.c:680 parser/parse_agg.c:708 #, c-format msgid "aggregate function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de agregación" -#: executor/nodeCustom.c:154 executor/nodeCustom.c:165 +#: executor/nodeCustom.c:144 executor/nodeCustom.c:155 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "el scan personalizado «%s» no soporta MarkPos" -#: executor/nodeHashjoin.c:1143 executor/nodeHashjoin.c:1173 +#: executor/nodeHashjoin.c:1131 executor/nodeHashjoin.c:1161 #, c-format msgid "could not rewind hash-join temporary file" msgstr "no se puede rebobinar el archivo temporal del hash-join" -#: executor/nodeIndexonlyscan.c:238 +#: executor/nodeIndexonlyscan.c:239 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "no se permiten funciones de ventana deslizante en predicados de índice" -#: executor/nodeLimit.c:374 +#: executor/nodeLimit.c:373 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET no debe ser negativo" -#: executor/nodeLimit.c:400 +#: executor/nodeLimit.c:399 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT no debe ser negativo" @@ -13822,76 +14138,74 @@ msgstr "RIGHT JOIN sólo está soportado con condiciones que se pueden usar con msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join" -#: executor/nodeModifyTable.c:234 +#: executor/nodeModifyTable.c:240 #, c-format msgid "Query has too few columns." msgstr "La consulta tiene muy pocas columnas." -#: executor/nodeModifyTable.c:1530 executor/nodeModifyTable.c:1604 +#: 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 "el registro a ser eliminado ya fue modificado por una operación disparada por la orden actual" -#: executor/nodeModifyTable.c:1758 +#: executor/nodeModifyTable.c:1769 #, c-format msgid "invalid ON UPDATE specification" msgstr "especificación ON UPDATE no válida" -#: executor/nodeModifyTable.c:1759 +#: executor/nodeModifyTable.c:1770 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La tupla de resultado aparecería en una partición diferente que la tupla original." -#: executor/nodeModifyTable.c: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 "no se puede mover una tupla entre particiones cuando un ancestro no-raíz de la partición de origen es referenciada directamente en una llave foránea" -#: 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 "" +msgstr "Una llave foránea apunta al ancestro «%s» pero no al ancestro raíz «%s»." -#: executor/nodeModifyTable.c:2221 -#, fuzzy, c-format -#| msgid "cannot insert into foreign table \"%s\"" +#: executor/nodeModifyTable.c:2230 +#, c-format msgid "Consider defining the foreign key on table \"%s\"." -msgstr "no se puede insertar en la tabla foránea «%s»" +msgstr "Considere definir una llave foránea en la tabla «%s»." #. translator: %s is a SQL command name -#: executor/nodeModifyTable.c:2567 executor/nodeModifyTable.c:2954 +#: executor/nodeModifyTable.c:2596 executor/nodeModifyTable.c:3138 +#: executor/nodeModifyTable.c:3308 #, c-format msgid "%s command cannot affect row a second time" -msgstr "" +msgstr "la orden %s no puede afectar una fila por segunda vez" -#: 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 "Asegúrese de que ningún registro propuesto para inserción dentro de la misma orden tenga valores duplicados restringidos." -#: executor/nodeModifyTable.c:2956 +#: 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 "la tupla a ser actualizada o borrada ya fue modificada por una operación disparada por la orden actual" + +#: 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 "Asegúrese que no más de un registro de origen coincide con cada registro de destino." -#: executor/nodeModifyTable.c:3037 -#, fuzzy, c-format -#| msgid "tuple to be locked was already moved to another partition due to concurrent update" -msgid "tuple to be deleted was already moved to another partition due to concurrent update" -msgstr "el registro a ser bloqueado ya fue movido a otra partición por un update concurrente" - -#: executor/nodeModifyTable.c:3076 -#, fuzzy, c-format -#| msgid "tuple to be updated was already modified by an operation triggered by the current command" -msgid "tuple to be updated or deleted was already modified by an operation triggered by the current command" -msgstr "el registro a ser actualizado ya fue modificado por una operación disparada por la orden actual" +#: executor/nodeModifyTable.c:3209 +#, c-format +msgid "tuple to be merged was already moved to another partition due to concurrent update" +msgstr "la tupla a ser mezclada ya fue movida a otra partición por un update concurrente" -#: executor/nodeSamplescan.c:260 +#: executor/nodeSamplescan.c:244 #, c-format msgid "TABLESAMPLE parameter cannot be null" msgstr "el parámetro TABLESAMPLE no puede ser null" -#: executor/nodeSamplescan.c:272 +#: executor/nodeSamplescan.c:256 #, c-format msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "el parámetro TABLESAMPLE REPEATABLE no puede ser null" @@ -13902,7 +14216,7 @@ msgstr "el parámetro TABLESAMPLE REPEATABLE no puede ser null" msgid "more than one row returned by a subquery used as an expression" msgstr "una subconsulta utilizada como expresión retornó más de un registro" -#: executor/nodeTableFuncscan.c:375 +#: executor/nodeTableFuncscan.c:370 #, c-format msgid "namespace URI must not be null" msgstr "la URI del espacio de nombres no debe ser null" @@ -13912,17 +14226,17 @@ msgstr "la URI del espacio de nombres no debe ser null" msgid "row filter expression must not be null" msgstr "la expresión filtro de filas no debe ser null" -#: executor/nodeTableFuncscan.c:415 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "column filter expression must not be null" msgstr "la expresión filtro de columnas no debe ser null" -#: executor/nodeTableFuncscan.c:416 +#: executor/nodeTableFuncscan.c:417 #, c-format msgid "Filter for column \"%s\" is null." msgstr "El filtro para la columna «%s» es null." -#: executor/nodeTableFuncscan.c:506 +#: executor/nodeTableFuncscan.c:507 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "null no está permitido en la columna «%s»" @@ -13952,84 +14266,84 @@ msgstr "la posición final del marco no debe ser null" msgid "frame ending offset must not be negative" msgstr "la posición final del marco no debe ser negativa" -#: executor/nodeWindowAgg.c:2909 +#: executor/nodeWindowAgg.c:2891 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "la función de agregación %s no permite ser usada como función ventana" -#: executor/spi.c:242 executor/spi.c:342 +#: executor/spi.c:241 executor/spi.c:341 #, c-format msgid "invalid transaction termination" msgstr "terminación de transacción no válida" -#: executor/spi.c:257 +#: executor/spi.c:256 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "no se puede comprometer mientras hay una subtransacción activa" -#: executor/spi.c:348 +#: executor/spi.c:347 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "no se puede hacer rollback mientras hay una subtransacción activa" -#: executor/spi.c:472 +#: executor/spi.c:471 #, c-format msgid "transaction left non-empty SPI stack" msgstr "transacción dejó un stack SPI no vacío" -#: executor/spi.c:473 executor/spi.c:533 +#: executor/spi.c:472 executor/spi.c:532 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Revise llamadas a «SPI_finish» faltantes." -#: executor/spi.c:532 +#: executor/spi.c:531 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "subtransacción dejó un stack SPI no vacío" -#: executor/spi.c:1600 +#: executor/spi.c:1602 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "no se puede abrir plan de varias consultas como cursor" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1610 +#: executor/spi.c:1612 #, c-format msgid "cannot open %s query as cursor" msgstr "no se puede abrir consulta %s como cursor" -#: executor/spi.c:1716 +#: executor/spi.c:1718 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE no está soportado" -#: executor/spi.c:1717 parser/analyze.c:2874 +#: executor/spi.c:1719 parser/analyze.c:2928 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Los cursores declarados SCROLL deben ser READ ONLY." -#: executor/spi.c:2474 +#: executor/spi.c:2496 #, c-format msgid "empty query does not return tuples" msgstr "la consulta vacía no retorna tuplas" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:2548 +#: executor/spi.c:2570 #, c-format msgid "%s query does not return tuples" msgstr "la consulta «%s» no retorna tuplas" -#: executor/spi.c:2963 +#: executor/spi.c:2987 #, c-format msgid "SQL expression \"%s\"" msgstr "expresión SQL «%s»" -#: executor/spi.c:2968 +#: executor/spi.c:2992 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "asignación PL/pgSQL «%s»" -#: executor/spi.c:2971 +#: executor/spi.c:2995 #, c-format msgid "SQL statement \"%s\"" msgstr "sentencia SQL: «%s»" @@ -14039,35 +14353,34 @@ msgstr "sentencia SQL: «%s»" msgid "could not send tuple to shared-memory queue" msgstr "no se pudo enviar la tupla a la cola en memoria compartida" -#: foreign/foreign.c:222 +#: foreign/foreign.c:225 +#, c-format +msgid "user mapping not found for user \"%s\", server \"%s\"" +msgstr "no se encontró un mapeo para el usuario «%s», servidor «%s»" + +#: foreign/foreign.c:336 optimizer/plan/createplan.c:7153 +#: optimizer/util/plancat.c:540 #, c-format -msgid "user mapping not found for \"%s\"" -msgstr "no se encontró un mapeo para el usuario «%s»" +msgid "access to non-system foreign table is restricted" +msgstr "el acceso a la tabla foránea no de sistema está restringido" -#: foreign/foreign.c:647 storage/file/fd.c:3881 +#: foreign/foreign.c:660 #, c-format msgid "invalid option \"%s\"" msgstr "el nombre de opción «%s» no es válido" -#: foreign/foreign.c:649 -#, fuzzy, c-format -#| msgid "Perhaps you meant to reference the column \"%s.%s\"." +#: foreign/foreign.c:662 +#, c-format msgid "Perhaps you meant the option \"%s\"." -msgstr "Probablemente quiera hacer referencia a la columna «%s.%s»." - -#: foreign/foreign.c:651 -#, fuzzy, c-format -#| msgid "There are no old transactions anymore." -msgid "There are no valid options in this context." -msgstr "Ya no hay transacciones antiguas en ejecución." +msgstr "Quizás se refiere a la opción «%s»." -#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:415 +#: foreign/foreign.c:664 #, c-format -msgid "could not access file \"%s\": %m" -msgstr "no se pudo acceder al archivo «%s»: %m" +msgid "There are no valid options in this context." +msgstr "No hay opciones válidas en este contexto." -#: lib/dshash.c:254 utils/mmgr/dsa.c:714 utils/mmgr/dsa.c:736 -#: utils/mmgr/dsa.c:817 +#: lib/dshash.c:254 utils/mmgr/dsa.c:708 utils/mmgr/dsa.c:730 +#: utils/mmgr/dsa.c:811 #, c-format msgid "Failed on DSA request of size %zu." msgstr "Falla en petición DSA de tamaño %zu." @@ -14077,708 +14390,700 @@ msgstr "Falla en petición DSA de tamaño %zu." msgid "expected SASL response, got message type %d" msgstr "se esperaba una respuesta SASL, se obtuvo mensaje de tipo %d" -#: libpq/auth-scram.c:270 +#: libpq/auth-scram.c:263 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "cliente eligió un mecanismo de autentificación SASL no válido" -#: libpq/auth-scram.c:294 libpq/auth-scram.c:543 libpq/auth-scram.c:554 +#: libpq/auth-scram.c:287 libpq/auth-scram.c:536 libpq/auth-scram.c:547 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "el secreto SCRAM para el usuario «%s» no es válido" -#: libpq/auth-scram.c:305 +#: libpq/auth-scram.c:298 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "El usuario «%s» no tiene un secreto SCRAM válido." -#: libpq/auth-scram.c:385 libpq/auth-scram.c:390 libpq/auth-scram.c:744 -#: libpq/auth-scram.c:752 libpq/auth-scram.c:857 libpq/auth-scram.c:870 -#: libpq/auth-scram.c:880 libpq/auth-scram.c:988 libpq/auth-scram.c:995 -#: libpq/auth-scram.c:1010 libpq/auth-scram.c:1025 libpq/auth-scram.c:1039 -#: libpq/auth-scram.c:1057 libpq/auth-scram.c:1072 libpq/auth-scram.c:1386 -#: libpq/auth-scram.c:1394 +#: libpq/auth-scram.c:378 libpq/auth-scram.c:383 libpq/auth-scram.c:737 +#: libpq/auth-scram.c:745 libpq/auth-scram.c:850 libpq/auth-scram.c:863 +#: libpq/auth-scram.c:873 libpq/auth-scram.c:981 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1003 libpq/auth-scram.c:1018 libpq/auth-scram.c:1032 +#: libpq/auth-scram.c:1050 libpq/auth-scram.c:1065 libpq/auth-scram.c:1379 +#: libpq/auth-scram.c:1387 #, c-format msgid "malformed SCRAM message" msgstr "mensaje SCRAM mal formado" -#: libpq/auth-scram.c:386 +#: libpq/auth-scram.c:379 #, c-format msgid "The message is empty." msgstr "El mensaje está vacío." -#: libpq/auth-scram.c:391 +#: libpq/auth-scram.c:384 #, c-format msgid "Message length does not match input length." msgstr "El largo del mensaje no coincide con el largo de entrada." -#: libpq/auth-scram.c:423 +#: libpq/auth-scram.c:416 #, c-format msgid "invalid SCRAM response" msgstr "respuesta SCRAM no válida" -#: libpq/auth-scram.c:424 +#: libpq/auth-scram.c:417 #, c-format msgid "Nonce does not match." msgstr "El «nonce» no coincide." -#: libpq/auth-scram.c:500 +#: libpq/auth-scram.c:493 #, c-format msgid "could not generate random salt" msgstr "no se pudo generar una sal aleatoria" -#: libpq/auth-scram.c:745 +#: libpq/auth-scram.c:738 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "Se esperaba un atributo «%c» pero se encontró «%s»." -#: libpq/auth-scram.c:753 libpq/auth-scram.c:881 +#: libpq/auth-scram.c:746 libpq/auth-scram.c:874 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Se esperaba el carácter «=» para el atributo «%c»." -#: libpq/auth-scram.c:858 +#: libpq/auth-scram.c:851 #, c-format msgid "Attribute expected, but found end of string." msgstr "Se esperaba un atributo, se encontró el fin de la cadena." -#: libpq/auth-scram.c:871 +#: libpq/auth-scram.c:864 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "Se esperaba un atributo, se encontró el carácter no válido «%s»." -#: libpq/auth-scram.c:989 libpq/auth-scram.c:1011 +#: libpq/auth-scram.c:982 libpq/auth-scram.c:1004 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "El cliente seleccionó SCRAM-SHA-256-PLUS, pero el mensaje SCRAM no incluye los datos de enlazado (binding) del canal." -#: libpq/auth-scram.c:996 libpq/auth-scram.c:1026 +#: libpq/auth-scram.c:989 libpq/auth-scram.c:1019 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "Se esperaba una coma, se encontró el carácter «%s»." -#: libpq/auth-scram.c:1017 +#: libpq/auth-scram.c:1010 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "error de negociación de enlazado (binding) de canal SCRAM" -#: libpq/auth-scram.c:1018 +#: libpq/auth-scram.c:1011 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "El cliente soporta enlazado (binding) de canal SCRAM, pero piensa que el servidor no. Sin embargo, este servidor sí soporta enlazado de canal." -#: libpq/auth-scram.c:1040 +#: libpq/auth-scram.c:1033 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "El cliente seleccionó SCRAM-SHA-256 sin enlazado de canal, pero el mensaje SCRAM incluye datos de enlazado de canal." -#: libpq/auth-scram.c:1051 +#: libpq/auth-scram.c:1044 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "tipo de enlazado de canal SCRAM «%s» no soportado" -#: libpq/auth-scram.c:1058 +#: libpq/auth-scram.c:1051 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "Indicador de enlazado de canal «%s» inesperado." -#: libpq/auth-scram.c:1068 +#: libpq/auth-scram.c:1061 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "el cliente usa identidad de autorización, pero no está soportada" -#: libpq/auth-scram.c:1073 +#: libpq/auth-scram.c:1066 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "Atributo inesperado \"%s\" en client-first-message." -#: libpq/auth-scram.c:1089 +#: libpq/auth-scram.c:1082 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "el cliente requiere una extensión SCRAM no soportada" -#: libpq/auth-scram.c:1103 +#: libpq/auth-scram.c:1096 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "caracteres no imprimibles en el «nonce» SCRAM" -#: libpq/auth-scram.c:1234 +#: libpq/auth-scram.c:1227 #, c-format msgid "could not generate random nonce" msgstr "no se pudo generar un «nonce» aleatorio" -#: libpq/auth-scram.c:1244 +#: libpq/auth-scram.c:1237 #, c-format msgid "could not encode random nonce" msgstr "no se pudo codificar un «nonce» aleatorio" -#: libpq/auth-scram.c:1350 +#: libpq/auth-scram.c:1343 #, c-format msgid "SCRAM channel binding check failed" msgstr "la verificación de enlazado (binding) de canal SCRAM falló" -#: libpq/auth-scram.c:1368 +#: libpq/auth-scram.c:1361 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "atributo de enlazado de canal SCRAM inesperado en client-final-message" -#: libpq/auth-scram.c:1387 +#: libpq/auth-scram.c:1380 #, c-format msgid "Malformed proof in client-final-message." msgstr "Prueba (proof) mal formada en client-final-message." -#: libpq/auth-scram.c:1395 +#: libpq/auth-scram.c:1388 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "Basura encontrada al final de client-final-message." -#: libpq/auth.c:271 +#: libpq/auth.c:269 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "la autentificación falló para el usuario «%s»: anfitrión rechazado" -#: libpq/auth.c:274 +#: libpq/auth.c:272 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "la autentificación «trust» falló para el usuario «%s»" -#: libpq/auth.c:277 +#: libpq/auth.c:275 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "la autentificación Ident falló para el usuario «%s»" -#: libpq/auth.c:280 +#: libpq/auth.c:278 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "la autentificación Peer falló para el usuario «%s»" -#: libpq/auth.c:285 +#: libpq/auth.c:283 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "la autentificación password falló para el usuario «%s»" -#: libpq/auth.c:290 +#: libpq/auth.c:288 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "la autentificación GSSAPI falló para el usuario «%s»" -#: libpq/auth.c:293 +#: libpq/auth.c:291 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "la autentificación SSPI falló para el usuario «%s»" -#: libpq/auth.c:296 +#: libpq/auth.c:294 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "la autentificación PAM falló para el usuario «%s»" -#: libpq/auth.c:299 +#: libpq/auth.c:297 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "la autentificación BSD falló para el usuario «%s»" -#: libpq/auth.c:302 +#: libpq/auth.c:300 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "la autentificación LDAP falló para el usuario «%s»" -#: libpq/auth.c:305 +#: libpq/auth.c:303 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "la autentificación por certificado falló para el usuario «%s»" -#: libpq/auth.c:308 +#: libpq/auth.c:306 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "la autentificación RADIUS falló para el usuario «%s»" -#: libpq/auth.c:311 +#: libpq/auth.c:309 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "la autentificación falló para el usuario «%s»: método de autentificación no válido" -#: libpq/auth.c:315 -#, fuzzy, c-format -#| msgid "reconnection failed: %s" -msgid "Connection matched %s line %d: \"%s\"" -msgstr "falló la reconexión: %s" +#: libpq/auth.c:313 +#, c-format +msgid "Connection matched file \"%s\" line %d: \"%s\"" +msgstr "La conexión coincidió con el archivo «%s» línea %d: «%s»" -#: libpq/auth.c:359 +#: libpq/auth.c:357 #, c-format msgid "authentication identifier set more than once" msgstr "identificador de autentificación establecido más de una vez" -#: libpq/auth.c:360 +#: libpq/auth.c:358 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "identificador anterior: «%s»; nuevo identificador: «%s»" -#: libpq/auth.c:370 +#: libpq/auth.c:368 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "conexión autenticada: identidad=«%s» método=%s (%s:%d)" -#: libpq/auth.c:410 +#: libpq/auth.c:408 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "los certificados de cliente sólo pueden verificarse si un almacén de certificado raíz está disponible" -#: libpq/auth.c:421 +#: libpq/auth.c:419 #, c-format msgid "connection requires a valid client certificate" msgstr "la conexión requiere un certificado de cliente válido" -#: libpq/auth.c:452 libpq/auth.c:498 +#: libpq/auth.c:450 libpq/auth.c:496 msgid "GSS encryption" msgstr "cifrado GSS" -#: libpq/auth.c:455 libpq/auth.c:501 +#: libpq/auth.c:453 libpq/auth.c:499 msgid "SSL encryption" msgstr "cifrado SSL" -#: libpq/auth.c:457 libpq/auth.c:503 +#: libpq/auth.c:455 libpq/auth.c:501 msgid "no encryption" msgstr "sin cifrado" #. translator: last %s describes encryption state -#: libpq/auth.c:463 +#: libpq/auth.c:461 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf rechaza la conexión de replicación para el servidor «%s», usuario «%s», %s" #. translator: last %s describes encryption state -#: libpq/auth.c:470 +#: libpq/auth.c:468 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf rechaza la conexión para el servidor «%s», usuario «%s», base de datos «%s», %s" -#: libpq/auth.c:508 +#: libpq/auth.c:506 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado es coincidente." -#: libpq/auth.c:511 +#: libpq/auth.c:509 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado no fue verificado." -#: libpq/auth.c:514 +#: libpq/auth.c:512 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado no es coincidente." -#: libpq/auth.c:517 +#: libpq/auth.c:515 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "No se pudo traducir el nombre de host del cliente «%s» a una dirección IP: %s." -#: libpq/auth.c:522 +#: libpq/auth.c:520 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "No se pudo obtener la dirección IP del cliente a un nombre de host: %s." #. translator: last %s describes encryption state -#: libpq/auth.c:530 +#: libpq/auth.c:528 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "no hay una línea en pg_hba.conf para la conexión de replicación desde el servidor «%s», usuario «%s», %s" #. translator: last %s describes encryption state -#: libpq/auth.c:538 +#: libpq/auth.c:536 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "no hay una línea en pg_hba.conf para «%s», usuario «%s», base de datos «%s», %s" -#: libpq/auth.c:711 +#: libpq/auth.c:656 +#, c-format +msgid "connection authenticated: user=\"%s\" method=%s (%s:%d)" +msgstr "conexión autenticada: usuario=«%s» método=%s (%s:%d)" + +#: libpq/auth.c:725 #, c-format msgid "expected password response, got message type %d" msgstr "se esperaba una respuesta de contraseña, se obtuvo mensaje de tipo %d" -#: libpq/auth.c:732 +#: libpq/auth.c:746 #, c-format msgid "invalid password packet size" msgstr "el tamaño del paquete de contraseña no es válido" -#: libpq/auth.c:750 +#: libpq/auth.c:764 #, c-format msgid "empty password returned by client" msgstr "el cliente retornó una contraseña vacía" -#: libpq/auth.c:879 libpq/hba.c:1749 -#, c-format -msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" -msgstr "la autentificación MD5 no está soportada cuando «db_user_namespace» está activo" - -#: libpq/auth.c:885 +#: libpq/auth.c:892 #, c-format msgid "could not generate random MD5 salt" msgstr "no se pudo generar una sal MD5 aleatoria" -#: libpq/auth.c:936 libpq/be-secure-gssapi.c:540 +#: libpq/auth.c:943 libpq/be-secure-gssapi.c:540 #, c-format msgid "could not set environment: %m" msgstr "no se pudo establecer el ambiente: %m" -#: libpq/auth.c:975 +#: libpq/auth.c:982 #, c-format msgid "expected GSS response, got message type %d" msgstr "se esperaba una respuesta GSS, se obtuvo mensaje de tipo %d" -#: libpq/auth.c:1041 +#: libpq/auth.c:1048 msgid "accepting GSS security context failed" msgstr "falló la aceptación del contexto de seguridad GSS" -#: libpq/auth.c:1082 +#: libpq/auth.c:1089 msgid "retrieving GSS user name failed" msgstr "falló la obtención del nombre de usuario GSS" -#: libpq/auth.c:1228 +#: libpq/auth.c:1235 msgid "could not acquire SSPI credentials" msgstr "no se pudo obtener las credenciales SSPI" -#: libpq/auth.c:1253 +#: libpq/auth.c:1260 #, c-format msgid "expected SSPI response, got message type %d" msgstr "se esperaba una respuesta SSPI, se obtuvo mensaje de tipo %d" -#: libpq/auth.c:1331 +#: libpq/auth.c:1338 msgid "could not accept SSPI security context" msgstr "no se pudo aceptar un contexto SSPI" -#: libpq/auth.c:1372 +#: libpq/auth.c:1379 msgid "could not get token from SSPI security context" msgstr "no se pudo obtener un testigo (token) desde el contexto de seguridad SSPI" -#: libpq/auth.c:1508 libpq/auth.c:1527 +#: libpq/auth.c:1515 libpq/auth.c:1534 #, c-format msgid "could not translate name" msgstr "no se pudo traducir el nombre" -#: libpq/auth.c:1540 +#: libpq/auth.c:1547 #, c-format msgid "realm name too long" msgstr "nombre de «realm» demasiado largo" -#: libpq/auth.c:1555 +#: libpq/auth.c:1562 #, c-format msgid "translated account name too long" msgstr "nombre de cuenta traducido demasiado largo" -#: libpq/auth.c:1734 +#: libpq/auth.c:1741 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "no se pudo crear un socket para conexión Ident: %m" -#: libpq/auth.c:1749 +#: libpq/auth.c:1756 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "no se pudo enlazar a la dirección local «%s»: %m" -#: libpq/auth.c:1761 +#: libpq/auth.c:1768 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "no se pudo conectar al servidor Ident en dirección «%s», port %s: %m" -#: libpq/auth.c:1783 +#: libpq/auth.c:1790 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "no se pudo enviar consulta Ident al servidor «%s», port %s: %m" -#: libpq/auth.c:1800 +#: libpq/auth.c:1807 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "no se pudo recibir respuesta Ident desde el servidor «%s», port %s: %m" -#: libpq/auth.c:1810 +#: libpq/auth.c:1817 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "respuesta del servidor Ident en formato no válido: «%s»" -#: libpq/auth.c:1863 +#: libpq/auth.c:1870 #, c-format msgid "peer authentication is not supported on this platform" msgstr "método de autentificación peer no está soportado en esta plataforma" -#: libpq/auth.c:1867 +#: libpq/auth.c:1874 #, c-format msgid "could not get peer credentials: %m" msgstr "no se pudo recibir credenciales: %m" -#: libpq/auth.c:1879 +#: libpq/auth.c:1886 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "no se pudo encontrar el ID del usuario local %ld: %s" -#: libpq/auth.c:1981 +#: libpq/auth.c:1988 #, c-format msgid "error from underlying PAM layer: %s" msgstr "se ha recibido un error de la biblioteca PAM: %s" -#: libpq/auth.c:1992 +#: libpq/auth.c:1999 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "conversación PAM no soportada: %d/«%s»" -#: libpq/auth.c:2049 +#: libpq/auth.c:2056 #, c-format msgid "could not create PAM authenticator: %s" msgstr "no se pudo crear autenticador PAM: %s" -#: libpq/auth.c:2060 +#: libpq/auth.c:2067 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) falló: %s" -#: libpq/auth.c:2092 +#: libpq/auth.c:2099 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) falló: %s" -#: libpq/auth.c:2104 +#: libpq/auth.c:2111 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) falló: %s" -#: libpq/auth.c:2117 +#: libpq/auth.c:2124 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate falló: %s" -#: libpq/auth.c:2130 +#: libpq/auth.c:2137 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt falló: %s" -#: libpq/auth.c:2141 +#: libpq/auth.c:2148 #, c-format msgid "could not release PAM authenticator: %s" msgstr "no se pudo liberar autenticador PAM: %s" -#: libpq/auth.c:2221 +#: libpq/auth.c:2228 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "no se pudo inicializar LDAP: código de error %d" -#: libpq/auth.c:2258 +#: libpq/auth.c:2265 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "no se pudo extraer el nombre de dominio de ldapbasedn" -#: libpq/auth.c:2266 +#: libpq/auth.c:2273 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "la autentificación LDAP no pudo encontrar registros DNS SRV para «%s»" -#: libpq/auth.c:2268 +#: libpq/auth.c:2275 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Defina un nombre de servidor LDAP explícitamente." -#: libpq/auth.c:2320 +#: libpq/auth.c:2327 #, c-format msgid "could not initialize LDAP: %s" msgstr "no se pudo inicializar LDAP: %s" -#: libpq/auth.c:2330 +#: libpq/auth.c:2337 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps no está soportado con esta biblioteca LDAP" -#: libpq/auth.c:2338 +#: libpq/auth.c:2345 #, c-format msgid "could not initialize LDAP: %m" msgstr "no se pudo inicializar LDAP: %m" -#: libpq/auth.c:2348 +#: libpq/auth.c:2355 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "no se pudo definir la versión de protocolo LDAP: %s" -#: libpq/auth.c:2364 +#: libpq/auth.c:2371 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "no se pudo iniciar sesión de LDAP TLS: %s" -#: libpq/auth.c:2441 +#: libpq/auth.c:2448 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "servidor LDAP no especificado, y no hay ldapbasedn" -#: libpq/auth.c:2448 +#: libpq/auth.c:2455 #, c-format msgid "LDAP server not specified" msgstr "servidor LDAP no especificado" -#: libpq/auth.c:2510 +#: libpq/auth.c:2517 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "carácter no válido en nombre de usuario para autentificación LDAP" -#: libpq/auth.c:2527 +#: libpq/auth.c:2534 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "no se pudo hacer el enlace LDAP inicial para el ldapbinddb «%s» en el servidor «%s»: %s" -#: libpq/auth.c:2557 +#: libpq/auth.c:2564 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "no se pudo hacer la búsqueda LDAP para el filtro «%s» en el servidor «%s»: %s" -#: libpq/auth.c:2573 +#: libpq/auth.c:2580 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "no existe el usuario LDAP «%s»" -#: libpq/auth.c:2574 +#: libpq/auth.c:2581 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "La búsqueda LDAP para el filtro «%s» en el servidor «%s» no retornó elementos." -#: libpq/auth.c:2578 +#: libpq/auth.c:2585 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "el usuario LDAP «%s» no es única" -#: libpq/auth.c:2579 +#: libpq/auth.c:2586 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "La búsqueda LDAP para el filtro «%s» en el servidor «%s» retornó %d elemento." msgstr[1] "La búsqueda LDAP para el filtro «%s» en el servidor «%s» retornó %d elementos." -#: libpq/auth.c:2599 +#: libpq/auth.c:2606 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "no se pudo obtener el dn para la primera entrada que coincide con «%s» en el servidor «%s»: %s" -#: libpq/auth.c:2620 -#, c-format -msgid "could not unbind after searching for user \"%s\" on server \"%s\"" -msgstr "no se pudo desconectar (unbind) después de buscar al usuario «%s» en el servidor «%s»" - -#: libpq/auth.c:2651 +#: libpq/auth.c:2633 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "falló el inicio de sesión LDAP para el usuario «%s» en el servidor «%s»: %s" -#: libpq/auth.c:2683 +#: libpq/auth.c:2665 #, c-format msgid "LDAP diagnostics: %s" msgstr "Diagnóstico LDAP: %s" -#: libpq/auth.c:2721 +#: libpq/auth.c:2703 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "la autentificación con certificado falló para el usuario «%s»: el certificado de cliente no contiene un nombre de usuario" -#: libpq/auth.c:2742 +#: libpq/auth.c:2724 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "la autentificación por certificado falló para el usuario «%s»: no se pudo obtener el DN del sujeto" -#: libpq/auth.c:2765 +#: libpq/auth.c:2747 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "la validación de certificado (clientcert=verify-full) falló para el usuario «%s»: discordancia de DN" -#: libpq/auth.c:2770 +#: libpq/auth.c:2752 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "la validación de certificado (clientcert=verify-full) falló para el usuario «%s»: discordancia de CN" -#: libpq/auth.c:2872 +#: libpq/auth.c:2854 #, c-format msgid "RADIUS server not specified" msgstr "servidor RADIUS no especificado" -#: libpq/auth.c:2879 +#: libpq/auth.c:2861 #, c-format msgid "RADIUS secret not specified" msgstr "secreto RADIUS no especificado" -#: libpq/auth.c:2893 +#: libpq/auth.c:2875 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "la autentificación RADIUS no soporta contraseñas más largas de %d caracteres" -#: libpq/auth.c:2995 libpq/hba.c:2391 +#: libpq/auth.c:2977 libpq/hba.c:2352 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "no se pudo traducir el nombre de servidor RADIUS «%s» a dirección: %s" -#: libpq/auth.c:3009 +#: libpq/auth.c:2991 #, c-format msgid "could not generate random encryption vector" msgstr "no se pudo generar un vector aleatorio de encriptación" -#: libpq/auth.c:3046 -#, fuzzy, c-format -#| msgid "could not encrypt password: %s" +#: libpq/auth.c:3028 +#, c-format msgid "could not perform MD5 encryption of password: %s" -msgstr "no se pudo cifrar contraseña: %s" +msgstr "no se pudo efectuar cifrado MD5 de contraseña: %s" -#: libpq/auth.c:3073 +#: libpq/auth.c:3055 #, c-format msgid "could not create RADIUS socket: %m" msgstr "no se pudo crear el socket RADIUS: %m" -#: libpq/auth.c:3089 +#: libpq/auth.c:3071 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "no se pudo enlazar el socket RADIUS local: %m" -#: libpq/auth.c:3099 +#: libpq/auth.c:3081 #, c-format msgid "could not send RADIUS packet: %m" msgstr "no se pudo enviar el paquete RADIUS: %m" -#: libpq/auth.c:3133 libpq/auth.c:3159 +#: libpq/auth.c:3115 libpq/auth.c:3141 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "se agotó el tiempo de espera de la respuesta RADIUS desde %s" -#: libpq/auth.c:3152 +#: libpq/auth.c:3134 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "no se pudo verificar el estado en el socket %m" -#: libpq/auth.c:3182 +#: libpq/auth.c:3164 #, c-format msgid "could not read RADIUS response: %m" msgstr "no se pudo leer la respuesta RADIUS: %m" -#: libpq/auth.c:3190 +#: libpq/auth.c:3172 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "la respuesta RADIUS desde %s fue enviada desde el port incorrecto: %d" -#: libpq/auth.c:3198 +#: libpq/auth.c:3180 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "la respuesta RADIUS desde %s es demasiado corta: %d" -#: libpq/auth.c:3205 +#: libpq/auth.c:3187 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "la respuesta RADIUS desde %ss tiene largo corrupto: %d (largo real %d)" -#: libpq/auth.c:3213 +#: libpq/auth.c:3195 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "la respuesta RADIUS desde %s es a una petición diferente: %d (debería ser %d)" -#: libpq/auth.c:3238 -#, fuzzy, c-format -#| msgid "could not send feedback packet: %s" +#: libpq/auth.c:3220 +#, c-format msgid "could not perform MD5 encryption of received packet: %s" -msgstr "no se pudo enviar el paquete de retroalimentación: %s" +msgstr "no se pudo efectuar cifrado MD5 del paquete recibido: %s" -#: libpq/auth.c:3248 +#: libpq/auth.c:3230 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "la respuesta RADIUS desde %s tiene firma MD5 incorrecta" -#: libpq/auth.c:3266 +#: libpq/auth.c:3248 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "la respuesta RADIUS desde %s tiene código no válido (%d) para el usuario «%s»" @@ -14835,64 +15140,51 @@ msgstr "no se pudo escribir el archivo del servidor «%s»: %m" msgid "large object read request is too large" msgstr "el tamaño de petición de lectura de objeto grande es muy grande" -#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:262 utils/adt/genfile.c:294 -#: utils/adt/genfile.c:315 +#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:248 utils/adt/genfile.c:269 #, c-format msgid "requested length cannot be negative" msgstr "el tamaño solicitado no puede ser negativo" -#: libpq/be-fsstubs.c:871 storage/large_object/inv_api.c:299 -#: storage/large_object/inv_api.c:311 storage/large_object/inv_api.c:508 -#: storage/large_object/inv_api.c:619 storage/large_object/inv_api.c:809 -#, c-format -msgid "permission denied for large object %u" -msgstr "permiso denegado al objeto grande %u" - -#: libpq/be-secure-common.c:71 -#, c-format -msgid "could not read from command \"%s\": %m" -msgstr "no se pudo leer desde la orden «%s»: %m" - -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:94 #, c-format msgid "command \"%s\" failed" msgstr "la orden «%s» falló" -#: libpq/be-secure-common.c:119 +#: libpq/be-secure-common.c:123 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "no se pudo acceder al archivo de la llave privada «%s»: %m" -#: libpq/be-secure-common.c:129 +#: libpq/be-secure-common.c:133 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "el archivo de llave privada «%s» no es un archivo regular" -#: libpq/be-secure-common.c:155 +#: libpq/be-secure-common.c:159 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "el archivo de llave privada «%s» debe ser de propiedad del usuario de base de datos o root" -#: libpq/be-secure-common.c:165 +#: libpq/be-secure-common.c:169 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "el archivo de la llave privada «%s» tiene acceso para el grupo u otros" -#: libpq/be-secure-common.c:167 +#: libpq/be-secure-common.c:171 #, c-format msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "El archivo debe tener permisos u=rw (0600) o menos si es de propiedad del usuario de base deatos, o permisos u=rw,g=r (0640) o menos si es de root." -#: libpq/be-secure-gssapi.c:204 +#: libpq/be-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "error de «wrap» de GSSAPI" -#: libpq/be-secure-gssapi.c:211 +#: libpq/be-secure-gssapi.c:208 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "mensaje saliente GSSAPI no proveería confidencialidad" -#: libpq/be-secure-gssapi.c:218 libpq/be-secure-gssapi.c:634 +#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:634 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "el servidor intentó enviar un paquete GSSAPI demasiado grande (%zu > %zu)" @@ -14924,819 +15216,810 @@ msgstr "no se pudo aceptar un contexto de seguridad GSSAPI" msgid "GSSAPI size check error" msgstr "error de verificación de tamaño GSSAPI" -#: libpq/be-secure-openssl.c:125 +#: libpq/be-secure-openssl.c:131 #, c-format msgid "could not create SSL context: %s" msgstr "no se pudo crear un contexto SSL: %s" -#: libpq/be-secure-openssl.c:151 +#: libpq/be-secure-openssl.c:157 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo de certificado de servidor «%s»: %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:177 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "el archivo de clave privada \"%s\" no se puede volver a cargar porque requiere una contraseña" -#: libpq/be-secure-openssl.c:176 +#: libpq/be-secure-openssl.c:182 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s" -#: libpq/be-secure-openssl.c:185 +#: libpq/be-secure-openssl.c:191 #, c-format msgid "check of private key failed: %s" msgstr "falló la revisión de la llave privada: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:198 libpq/be-secure-openssl.c:221 +#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "el valor «%2$s» para la opción «%1$s» no está soportado en este servidor" -#: libpq/be-secure-openssl.c:208 +#: libpq/be-secure-openssl.c:214 #, c-format msgid "could not set minimum SSL protocol version" msgstr "no se pudo definir la versión mínima de protocolo SSL" -#: libpq/be-secure-openssl.c:231 +#: libpq/be-secure-openssl.c:237 #, c-format msgid "could not set maximum SSL protocol version" msgstr "no se pudo definir la versión máxima de protocolo SSL" -#: libpq/be-secure-openssl.c:247 +#: libpq/be-secure-openssl.c:253 #, c-format msgid "could not set SSL protocol version range" msgstr "no se pudo definir el rango de versión de protocolo SSL" -#: libpq/be-secure-openssl.c:248 +#: libpq/be-secure-openssl.c:254 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "«%s» no puede ser más alto que «%s»" -#: libpq/be-secure-openssl.c:285 +#: libpq/be-secure-openssl.c:307 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "no se pudo establecer la lista de cifrado (no hay cifradores disponibles)" -#: libpq/be-secure-openssl.c:305 +#: libpq/be-secure-openssl.c:327 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo del certificado raíz «%s»: %s" -#: libpq/be-secure-openssl.c:354 +#: libpq/be-secure-openssl.c:376 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure-openssl.c:362 +#: libpq/be-secure-openssl.c:384 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "no se pudo cargar el directorio de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure-openssl.c:370 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s» o directorio «%s»: %s" -#: libpq/be-secure-openssl.c:428 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "no se pudo inicializar la conexión SSL: el contexto SSL no está instalado" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:464 #, c-format msgid "could not initialize SSL connection: %s" msgstr "no se pudo inicializar la conexión SSL: %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:472 #, c-format msgid "could not set SSL socket: %s" msgstr "no se definir un socket SSL: %s" -#: libpq/be-secure-openssl.c:502 +#: libpq/be-secure-openssl.c:528 #, c-format msgid "could not accept SSL connection: %m" msgstr "no se pudo aceptar una conexión SSL: %m" -#: libpq/be-secure-openssl.c:506 libpq/be-secure-openssl.c:561 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "no se pudo aceptar una conexión SSL: se detectó EOF" -#: libpq/be-secure-openssl.c:545 +#: libpq/be-secure-openssl.c:573 #, c-format msgid "could not accept SSL connection: %s" msgstr "no se pudo aceptar una conexión SSL: %s" -#: libpq/be-secure-openssl.c:549 +#: 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 "Esto puede indicar que el cliente no soporta ninguna versión del protocolo SSL entre %s y %s." -#: libpq/be-secure-openssl.c:566 libpq/be-secure-openssl.c:746 -#: libpq/be-secure-openssl.c:810 +#: 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 "código de error SSL no reconocido: %d" -#: libpq/be-secure-openssl.c:612 +#: libpq/be-secure-openssl.c:622 +#, c-format +msgid "received SSL connection request with unexpected ALPN protocol" +msgstr "recibido una solicitud de conexión SSL con protocolo ALPN inesperado" + +#: libpq/be-secure-openssl.c:666 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "el «common name» del certificado SSL contiene un carácter null" -#: libpq/be-secure-openssl.c:652 +#: libpq/be-secure-openssl.c:712 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "el elemento de nombre distinguido en el certificado SSL contiene un carácter null" -#: libpq/be-secure-openssl.c:735 libpq/be-secure-openssl.c:794 +#: libpq/be-secure-openssl.c:798 libpq/be-secure-openssl.c:863 #, c-format msgid "SSL error: %s" msgstr "error de SSL: %s" -#: libpq/be-secure-openssl.c:976 +#: libpq/be-secure-openssl.c:1038 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "no se pudo abrir el archivo de parámetros DH «%s»: %m" -#: libpq/be-secure-openssl.c:988 +#: libpq/be-secure-openssl.c:1050 #, c-format msgid "could not load DH parameters file: %s" msgstr "no se pudo cargar el archivo de parámetros DH: %s" -#: libpq/be-secure-openssl.c:998 +#: libpq/be-secure-openssl.c:1060 #, c-format msgid "invalid DH parameters: %s" msgstr "parámetros DH no válidos: %s" -#: libpq/be-secure-openssl.c:1007 +#: libpq/be-secure-openssl.c:1069 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "parámetros DH no válidos: p no es primo" -#: libpq/be-secure-openssl.c:1016 +#: libpq/be-secure-openssl.c:1078 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "parámetros DH no válidos: no hay generador apropiado o primo seguro" -#: libpq/be-secure-openssl.c:1152 -#, fuzzy, c-format -#| msgid "certificate authentication failed for user \"%s\"" +#: libpq/be-secure-openssl.c:1214 +#, c-format msgid "Client certificate verification failed at depth %d: %s." -msgstr "la autentificación por certificado falló para el usuario «%s»" +msgstr "La autentificación por certificado de cliente falló en la profundidad %d: %s." -#: libpq/be-secure-openssl.c:1189 +#: libpq/be-secure-openssl.c:1251 #, c-format msgid "Failed certificate data (unverified): subject \"%s\", serial number %s, issuer \"%s\"." -msgstr "" +msgstr "Datos del certificado fallido (sin verificar): sujeto «%s», número de serie %s, emisor «%s»." -#: libpq/be-secure-openssl.c:1190 +#: libpq/be-secure-openssl.c:1252 msgid "unknown" msgstr "desconocido" -#: libpq/be-secure-openssl.c:1281 +#: libpq/be-secure-openssl.c:1389 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: no se pudo cargar los parámetros DH" -#: libpq/be-secure-openssl.c:1289 +#: libpq/be-secure-openssl.c:1397 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: no se pudo definir los parámetros DH: %s" -#: libpq/be-secure-openssl.c:1316 +#: libpq/be-secure-openssl.c:1424 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: nombre de curva no reconocida: %s" -#: libpq/be-secure-openssl.c:1325 +#: libpq/be-secure-openssl.c:1433 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: no se pudo crear la llave" -#: libpq/be-secure-openssl.c:1353 +#: libpq/be-secure-openssl.c:1461 msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: libpq/be-secure-openssl.c:1357 +#: libpq/be-secure-openssl.c:1479 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: libpq/be-secure-openssl.c:1516 +#: libpq/be-secure-openssl.c:1636 #, c-format msgid "could not create BIO" msgstr "no se pudo crear BIO" -#: libpq/be-secure-openssl.c:1526 +#: libpq/be-secure-openssl.c:1646 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "no se pudo obtener NID para objeto ASN1_OBJECT" -#: libpq/be-secure-openssl.c:1534 +#: libpq/be-secure-openssl.c:1654 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "no se pudo convertir NID %d en una estructura ASN1_OBJECT" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 -#, c-format -msgid "terminating connection due to unexpected postmaster exit" -msgstr "terminando la conexión debido al término inesperado de postmaster" - -#: libpq/crypt.c:49 +#: libpq/crypt.c:48 #, c-format msgid "Role \"%s\" does not exist." msgstr "No existe el rol «%s»." -#: libpq/crypt.c:59 +#: libpq/crypt.c:58 #, c-format msgid "User \"%s\" has no password assigned." msgstr "El usuario «%s» no tiene una contraseña asignada." -#: libpq/crypt.c:77 +#: libpq/crypt.c:76 #, c-format msgid "User \"%s\" has an expired password." msgstr "El usuario «%s» tiene contraseña expirada." -#: libpq/crypt.c:183 +#: libpq/crypt.c:182 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "El usuario \"%s\" tiene una contraseña que no se puede usar con la autentificación MD5." -#: libpq/crypt.c:204 libpq/crypt.c:246 libpq/crypt.c:266 +#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 #, c-format msgid "Password does not match for user \"%s\"." msgstr "La contraseña no coincide para el usuario «%s»." -#: libpq/crypt.c:285 +#: libpq/crypt.c:284 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "La contraseña del usuario \"%s\" está en un formato no reconocido." -#: libpq/hba.c:234 -#, c-format -msgid "authentication file token too long, skipping: \"%s\"" -msgstr "una palabra en el archivo de autentificación es demasiado larga, omitiendo: «%s»" - -#: libpq/hba.c:357 +#: libpq/hba.c:327 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "la expresión regular «%s» no es válida: %s" -#: libpq/hba.c:359 libpq/hba.c:688 libpq/hba.c:1272 libpq/hba.c:1292 -#: libpq/hba.c:1315 libpq/hba.c:1328 libpq/hba.c:1381 libpq/hba.c:1409 -#: libpq/hba.c:1417 libpq/hba.c:1429 libpq/hba.c:1450 libpq/hba.c:1463 -#: libpq/hba.c:1488 libpq/hba.c:1515 libpq/hba.c:1527 libpq/hba.c:1586 -#: libpq/hba.c:1606 libpq/hba.c:1620 libpq/hba.c:1640 libpq/hba.c:1651 -#: libpq/hba.c:1666 libpq/hba.c:1685 libpq/hba.c:1701 libpq/hba.c:1713 -#: libpq/hba.c:1750 libpq/hba.c:1791 libpq/hba.c:1804 libpq/hba.c:1826 -#: libpq/hba.c:1838 libpq/hba.c:1856 libpq/hba.c:1906 libpq/hba.c:1950 -#: libpq/hba.c:1961 libpq/hba.c:1977 libpq/hba.c:1994 libpq/hba.c:2005 -#: libpq/hba.c:2024 libpq/hba.c:2040 libpq/hba.c:2056 libpq/hba.c:2115 -#: libpq/hba.c:2132 libpq/hba.c:2145 libpq/hba.c:2157 libpq/hba.c:2176 -#: libpq/hba.c:2262 libpq/hba.c:2280 libpq/hba.c:2374 libpq/hba.c:2393 -#: libpq/hba.c:2422 libpq/hba.c:2435 libpq/hba.c:2458 libpq/hba.c:2480 -#: libpq/hba.c:2494 tsearch/ts_locale.c:243 +#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 +#: libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 +#: libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 +#: libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 +#: libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 +#: libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 +#: libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 libpq/hba.c:1799 +#: libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 +#: libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 +#: libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 +#: libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 +#: libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 +#: libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 +#: tsearch/ts_locale.c:241 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "línea %d del archivo de configuración «%s»" -#: libpq/hba.c:484 -#, fuzzy, c-format -#| msgid "skipping missing configuration file \"%s\"" +#: libpq/hba.c:457 +#, c-format msgid "skipping missing authentication file \"%s\"" -msgstr "omitiendo el archivo de configuración faltante «%s»" +msgstr "omitiendo el archivo de autentificación faltante «%s»" -#: libpq/hba.c:636 -#, fuzzy, c-format -#| msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" +#: libpq/hba.c:609 +#, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" -msgstr "no se pudo abrir el archivo de configuración «%s»: nivel de anidamiento máximo excedido" +msgstr "no se pudo abrir el archivo «%s»: nivel de anidamiento máximo excedido" -#: libpq/hba.c:1243 +#: libpq/hba.c:1216 #, c-format msgid "error enumerating network interfaces: %m" msgstr "error al enumerar interfaces de red: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1270 +#: libpq/hba.c:1243 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "la opción de autentificación «%s» sólo es válida para los métodos de autentificación %s" -#: libpq/hba.c:1290 +#: libpq/hba.c:1263 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "el método de autentificación «%s» requiere que el argumento «%s» esté definido" -#: libpq/hba.c:1314 -#, fuzzy, c-format -#| msgid "missing \"%s\" at end of SQL expression" +#: libpq/hba.c:1287 +#, c-format msgid "missing entry at end of line" -msgstr "falta «%s» al final de la expresión SQL" +msgstr "falta una entrada al final de la línea" -#: libpq/hba.c:1327 +#: libpq/hba.c:1300 #, c-format msgid "multiple values in ident field" msgstr "múltiples valores en campo «ident»" -#: libpq/hba.c:1379 +#: libpq/hba.c:1352 #, c-format msgid "multiple values specified for connection type" msgstr "múltiples valores especificados para tipo de conexión" -#: libpq/hba.c:1380 +#: libpq/hba.c:1353 #, c-format msgid "Specify exactly one connection type per line." msgstr "Especifique exactamente un tipo de conexión por línea." -#: libpq/hba.c:1407 +#: libpq/hba.c:1380 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "el registro hostssl no puede coincidir porque SSL está deshabilitado" -#: libpq/hba.c:1408 +#: libpq/hba.c:1381 #, c-format -msgid "Set ssl = on in postgresql.conf." +msgid "Set \"ssl = on\" in postgresql.conf." msgstr "Defina «ssl = on» en postgresql.conf." -#: libpq/hba.c:1416 +#: libpq/hba.c:1389 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "el registro hostssl no puede coincidir porque SSL no está soportado en esta instalación" -#: libpq/hba.c:1428 +#: libpq/hba.c:1401 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "el registro hostgssenc no puede coincidir porque GSSAPI no está soportado en esta instalación" -#: libpq/hba.c:1448 +#: libpq/hba.c:1421 #, c-format msgid "invalid connection type \"%s\"" msgstr "tipo de conexión «%s» no válido" -#: libpq/hba.c:1462 +#: libpq/hba.c:1435 #, c-format msgid "end-of-line before database specification" msgstr "fin de línea antes de especificación de base de datos" -#: libpq/hba.c:1487 +#: libpq/hba.c:1460 #, c-format msgid "end-of-line before role specification" msgstr "fin de línea antes de especificación de rol" -#: libpq/hba.c:1514 +#: libpq/hba.c:1487 #, c-format msgid "end-of-line before IP address specification" msgstr "fin de línea antes de especificación de dirección IP" -#: libpq/hba.c:1525 +#: libpq/hba.c:1498 #, c-format msgid "multiple values specified for host address" msgstr "múltiples valores especificados para la dirección de anfitrión" -#: libpq/hba.c:1526 +#: libpq/hba.c:1499 #, c-format msgid "Specify one address range per line." msgstr "Especifique un rango de direcciones por línea." -#: libpq/hba.c:1584 +#: libpq/hba.c:1557 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "dirección IP «%s» no válida: %s" -#: libpq/hba.c:1604 +#: libpq/hba.c:1577 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "especificar tanto el nombre de host como la máscara CIDR no es válido: «%s»" -#: libpq/hba.c:1618 +#: libpq/hba.c:1591 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "máscara CIDR no válida en dirección «%s»" -#: libpq/hba.c:1638 +#: libpq/hba.c:1611 #, c-format msgid "end-of-line before netmask specification" msgstr "fin de línea antes de especificación de máscara de red" -#: libpq/hba.c:1639 +#: libpq/hba.c:1612 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Especifique un rango de direcciones en notación CIDR, o provea una netmask separadamente." -#: libpq/hba.c:1650 +#: libpq/hba.c:1623 #, c-format msgid "multiple values specified for netmask" msgstr "múltiples valores especificados para la máscara de red" -#: libpq/hba.c:1664 +#: libpq/hba.c:1637 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "máscara IP «%s» no válida: %s" -#: libpq/hba.c:1684 +#: libpq/hba.c:1657 #, c-format msgid "IP address and mask do not match" msgstr "La dirección y máscara IP no coinciden" -#: libpq/hba.c:1700 +#: libpq/hba.c:1673 #, c-format msgid "end-of-line before authentication method" msgstr "fin de línea antes de especificación de método de autentificación" -#: libpq/hba.c:1711 +#: libpq/hba.c:1684 #, c-format msgid "multiple values specified for authentication type" msgstr "múltiples valores especificados para el tipo de autentificación" -#: libpq/hba.c:1712 +#: libpq/hba.c:1685 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Especifique exactamente un tipo de autentificación por línea." -#: libpq/hba.c:1789 +#: libpq/hba.c:1750 #, c-format msgid "invalid authentication method \"%s\"" msgstr "método de autentificación «%s» no válido" -#: libpq/hba.c:1802 +#: libpq/hba.c:1763 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "método de autentificación «%s» no válido: este servidor no lo soporta" -#: libpq/hba.c:1825 +#: libpq/hba.c:1786 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "la autentificación gssapi no está soportada en conexiones locales" -#: libpq/hba.c:1837 +#: libpq/hba.c:1798 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "la autentificación peer sólo está soportada en conexiones locales" -#: libpq/hba.c:1855 +#: libpq/hba.c:1816 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "la autentificación cert sólo está soportada en conexiones hostssl" -#: libpq/hba.c:1905 +#: libpq/hba.c:1866 #, c-format msgid "authentication option not in name=value format: %s" msgstr "opción de autentificación en formato nombre=valor: %s" -#: libpq/hba.c:1949 +#: libpq/hba.c:1910 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "no se puede usar ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter o ldapurl junto con ldapprefix" -#: libpq/hba.c:1960 +#: libpq/hba.c:1921 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "el método de autentificación «ldap» requiere que los argumento «ldapbasedn», «ldapprefix» o «ldapsuffix» estén definidos" -#: libpq/hba.c:1976 +#: libpq/hba.c:1937 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "no se puede usar ldapsearchattribute junto con ldapsearchfilter" -#: libpq/hba.c:1993 +#: libpq/hba.c:1954 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "la lista de servidores RADIUS no puede ser vacía" -#: libpq/hba.c:2004 +#: libpq/hba.c:1965 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "la lista de secretos RADIUS no puede ser vacía" -#: libpq/hba.c:2021 +#: libpq/hba.c:1982 #, c-format msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "el número de secretos RADIUS (%d) debe ser 1 o igual al número de servidores RADIUS (%d)" -#: libpq/hba.c:2037 +#: libpq/hba.c:1998 #, c-format msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "el número de puertos RADIUS (%d) debe ser 1 o igual al número de servidores RADIUS (%d)" -#: libpq/hba.c:2053 +#: libpq/hba.c:2014 #, c-format msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "el número de identificadores RADIUS (%d) debe ser 1 o igual al número de servidores RADIUS (%d)" -#: libpq/hba.c:2105 +#: libpq/hba.c:2066 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi y cert" -#: libpq/hba.c:2114 +#: libpq/hba.c:2075 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" -#: libpq/hba.c:2131 +#: libpq/hba.c:2092 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "clientcert solo acepta «verify-full» cuando se emplea autentificación «cert»" -#: libpq/hba.c:2144 +#: libpq/hba.c:2105 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "valor no válido para el parámetro clientcert: «%s»" -#: libpq/hba.c:2156 +#: libpq/hba.c:2117 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname solo puede ser configurado en líneas «hostssl»" -#: libpq/hba.c:2175 +#: libpq/hba.c:2136 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "valor no válido para el parámetro clientname: «%s»" -#: libpq/hba.c:2208 +#: libpq/hba.c:2169 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "no se pudo interpretar la URL LDAP «%s»: %s" -#: libpq/hba.c:2219 +#: libpq/hba.c:2180 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "esquema de URL LDAP no soportado: %s" -#: libpq/hba.c:2243 +#: libpq/hba.c:2204 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "las URLs LDAP no está soportado en esta plataforma" -#: libpq/hba.c:2261 +#: libpq/hba.c:2222 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "valor ldapscheme no válido: «%s»" -#: libpq/hba.c:2279 +#: libpq/hba.c:2240 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "número de puerto LDAP no válido: «%s»" -#: libpq/hba.c:2325 libpq/hba.c:2332 +#: libpq/hba.c:2286 libpq/hba.c:2293 msgid "gssapi and sspi" msgstr "gssapi y sspi" -#: libpq/hba.c:2341 libpq/hba.c:2350 +#: libpq/hba.c:2302 libpq/hba.c:2311 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2372 +#: libpq/hba.c:2333 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "no se pudo interpretar la lista de servidores RADIUS «%s»" -#: libpq/hba.c:2420 +#: libpq/hba.c:2381 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "no se pudo interpretar la lista de port RADIUS «%s»" -#: libpq/hba.c:2434 +#: libpq/hba.c:2395 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "número de puerto RADIUS no válido: «%s»" -#: libpq/hba.c:2456 +#: libpq/hba.c:2417 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "no se pudo interpretar la lista de secretos RADIUS «%s»" -#: libpq/hba.c:2478 +#: libpq/hba.c:2439 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "no se pudo interpretar la lista de identificadores RADIUS «%s»" -#: libpq/hba.c:2492 +#: libpq/hba.c:2453 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "nombre de opción de autentificación desconocido: «%s»" -#: libpq/hba.c:2684 +#: libpq/hba.c:2645 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "el archivo de configuración «%s» no contiene líneas" -#: libpq/hba.c:2838 +#: libpq/hba.c:2798 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "la coincidencia de expresión regular para «%s» falló: %s" -#: libpq/hba.c:2862 +#: libpq/hba.c:2822 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "la expresión regular «%s» no tiene subexpresiones según lo requiere la referencia hacia atrás en «%s»" -#: libpq/hba.c:2965 +#: libpq/hba.c:2925 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "el nombre de usuario entregado (%s) y el nombre de usuario autentificado (%s) no coinciden" -#: libpq/hba.c:2985 +#: libpq/hba.c:2945 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "no hay coincidencia en el mapa «%s» para el usuario «%s» autentificado como «%s»" -#: libpq/pqcomm.c:200 +#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 +#: libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 +#: libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 +#: libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "%s(%s) falló: %m" + +#: libpq/pqcomm.c:296 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "no se pudo establecer el socket en modo no bloqueante: %m" -#: libpq/pqcomm.c:361 +#: libpq/pqcomm.c:456 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "la ruta al socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)" -#: libpq/pqcomm.c:381 +#: libpq/pqcomm.c:476 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "no se pudo traducir el nombre de host «%s», servicio «%s» a dirección: %s" -#: libpq/pqcomm.c:385 +#: libpq/pqcomm.c:480 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "no se pudo traducir el servicio «%s» a dirección: %s" -#: libpq/pqcomm.c:412 +#: libpq/pqcomm.c:502 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "no se pudo enlazar a todas las direcciones pedidas: MAXLISTEN (%d) fue excedido" -#: libpq/pqcomm.c:421 +#: libpq/pqcomm.c:511 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:424 +#: libpq/pqcomm.c:514 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:517 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:431 +#: libpq/pqcomm.c:521 #, c-format msgid "unrecognized address family %d" msgstr "la familia de direcciones %d no reconocida" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:455 +#: libpq/pqcomm.c:545 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "no se pudo crear el socket %s de escucha para la dirección «%s»: %m" #. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:481 libpq/pqcomm.c:499 +#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "%s(%s) falló para la dirección %s «%s»: %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:522 +#: libpq/pqcomm.c:615 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "no se pudo enlazar a la dirección %s «%s»: %m" -#: libpq/pqcomm.c:526 +#: libpq/pqcomm.c:619 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "¿Hay otro postmaster en ejecución en el puerto %d?" -#: libpq/pqcomm.c:528 +#: libpq/pqcomm.c:621 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "¿Hay otro postmaster en ejecución en el puerto %d? Si no, aguarde unos segundos y reintente." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:557 +#: libpq/pqcomm.c:650 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "no se pudo escuchar en la dirección %s «%s»: %m" -#: libpq/pqcomm.c:565 +#: libpq/pqcomm.c:658 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "escuchando en el socket Unix «%s»" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:570 +#: libpq/pqcomm.c:663 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "escuchando en la dirección %s «%s», port %d" -#: libpq/pqcomm.c:659 +#: libpq/pqcomm.c:753 #, c-format msgid "group \"%s\" does not exist" msgstr "no existe el grupo «%s»" -#: libpq/pqcomm.c:669 +#: libpq/pqcomm.c:763 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "no se pudo definir el grupo del archivo «%s»: %m" -#: libpq/pqcomm.c:680 +#: libpq/pqcomm.c:774 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "no se pudo definir los permisos del archivo «%s»: %m" -#: libpq/pqcomm.c:708 +#: libpq/pqcomm.c:803 #, c-format msgid "could not accept new connection: %m" msgstr "no se pudo aceptar una nueva conexión: %m" -#: libpq/pqcomm.c:748 libpq/pqcomm.c:757 libpq/pqcomm.c:789 libpq/pqcomm.c:799 -#: libpq/pqcomm.c:1624 libpq/pqcomm.c:1669 libpq/pqcomm.c:1709 -#: libpq/pqcomm.c:1753 libpq/pqcomm.c:1792 libpq/pqcomm.c:1831 -#: libpq/pqcomm.c:1867 libpq/pqcomm.c:1906 -#, c-format -msgid "%s(%s) failed: %m" -msgstr "%s(%s) falló: %m" - -#: libpq/pqcomm.c:903 +#: libpq/pqcomm.c:885 #, c-format msgid "there is no client connection" msgstr "no hay conexión de cliente" -#: libpq/pqcomm.c:954 libpq/pqcomm.c:1050 +#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 #, c-format msgid "could not receive data from client: %m" msgstr "no se pudo recibir datos del cliente: %m" -#: libpq/pqcomm.c:1155 tcop/postgres.c:4403 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "terminando la conexión por pérdida de sincronía del protocolo" -#: libpq/pqcomm.c:1221 +#: libpq/pqcomm.c:1215 #, c-format msgid "unexpected EOF within message length word" msgstr "EOF inesperado dentro de la palabra de tamaño del mensaje" -#: libpq/pqcomm.c:1231 +#: libpq/pqcomm.c:1225 #, c-format msgid "invalid message length" msgstr "el largo de mensaje no es válido" -#: libpq/pqcomm.c:1253 libpq/pqcomm.c:1266 +#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 #, c-format msgid "incomplete message from client" msgstr "mensaje incompleto del cliente" -#: libpq/pqcomm.c:1377 +#: libpq/pqcomm.c:1401 #, c-format msgid "could not send data to client: %m" msgstr "no se pudo enviar datos al cliente: %m" -#: libpq/pqcomm.c:1592 +#: libpq/pqcomm.c:1616 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s) falló: código de error %d" -#: libpq/pqcomm.c:1681 +#: libpq/pqcomm.c:1705 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "establecer el tiempo de inactividad para keepalive no está soportado" -#: libpq/pqcomm.c:1765 libpq/pqcomm.c:1840 libpq/pqcomm.c:1915 +#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s) no está soportado" -#: libpq/pqformat.c:407 +#: libpq/pqformat.c:404 #, c-format msgid "no data left in message" msgstr "no hay datos restantes en el mensaje" -#: libpq/pqformat.c:518 libpq/pqformat.c:536 libpq/pqformat.c:557 -#: utils/adt/array_userfuncs.c:799 utils/adt/arrayfuncs.c:1506 -#: utils/adt/rowtypes.c:615 +#: 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/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "los datos restantes del mensaje son insuficientes" -#: libpq/pqformat.c:598 libpq/pqformat.c:627 +#: libpq/pqformat.c:595 libpq/pqformat.c:624 #, c-format msgid "invalid string in message" msgstr "cadena no válida en el mensaje" -#: libpq/pqformat.c:643 +#: libpq/pqformat.c:640 #, c-format msgid "invalid message format" msgstr "formato de mensaje no válido" -#: main/main.c:235 +#: main/main.c:236 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup falló: %d\n" -#: main/main.c:329 +#: main/main.c:324 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -15745,7 +16028,7 @@ msgstr "" "%s es el servidor PostgreSQL.\n" "\n" -#: main/main.c:330 +#: main/main.c:325 #, c-format msgid "" "Usage:\n" @@ -15756,110 +16039,109 @@ msgstr "" " %s [OPCION]...\n" "\n" -#: main/main.c:331 +#: main/main.c:326 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: main/main.c:332 +#: main/main.c:327 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS número de búfers de memoria compartida\n" -#: main/main.c:333 +#: main/main.c:328 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c VAR=VALOR definir parámetro de ejecución\n" -#: main/main.c:334 +#: main/main.c:329 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NOMBRE imprimir valor de parámetro de configuración, luego salir\n" -#: main/main.c:335 +#: main/main.c:330 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 nivel de depuración\n" -#: main/main.c:336 +#: main/main.c:331 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR directorio de bases de datos\n" -#: main/main.c:337 +#: main/main.c:332 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e usar estilo europeo de fechas (DMY)\n" -#: main/main.c:338 +#: main/main.c:333 #, c-format msgid " -F turn fsync off\n" msgstr " -F desactivar fsync\n" -#: main/main.c:339 +#: main/main.c:334 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h NOMBRE nombre de host o dirección IP en que escuchar\n" -#: main/main.c:340 -#, fuzzy, c-format -#| msgid " -l enable SSL connections\n" +#: main/main.c:335 +#, c-format msgid " -i enable TCP/IP connections (deprecated)\n" -msgstr " -l activar conexiones SSL\n" +msgstr " -i activar conexiones TCP/IP (obsoleto)\n" -#: main/main.c:341 +#: main/main.c:336 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORIO ubicación del socket Unix\n" -#: main/main.c:343 +#: main/main.c:338 #, c-format msgid " -l enable SSL connections\n" msgstr " -l activar conexiones SSL\n" -#: main/main.c:345 +#: main/main.c:340 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONN número máximo de conexiones permitidas\n" -#: main/main.c:346 +#: main/main.c:341 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PUERTO número de puerto en el cual escuchar\n" -#: main/main.c:347 +#: main/main.c:342 #, c-format msgid " -s show statistics after each query\n" msgstr " -s mostrar estadísticas después de cada consulta\n" -#: main/main.c:348 +#: main/main.c:343 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM definir cantidad de memoria para ordenamientos (en kB)\n" -#: main/main.c:349 +#: main/main.c:344 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de la versión, luego salir\n" -#: main/main.c:350 +#: main/main.c:345 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NOMBRE=VALOR definir parámetro de ejecución\n" -#: main/main.c:351 +#: main/main.c:346 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr "" " --describe-config\n" " mostrar parámetros de configuración y salir\n" -#: main/main.c:352 +#: main/main.c:347 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help muestra esta ayuda, luego sale\n" -#: main/main.c:354 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -15868,38 +16150,37 @@ msgstr "" "\n" "Opciones de desarrollador:\n" -#: main/main.c:355 +#: main/main.c:350 #, c-format msgid " -f s|i|o|b|t|n|m|h forbid use of some plan types\n" -msgstr "" +msgstr " -f s|i|o|b|t|n|m|h impedir el uso de algunos tipos de planes\n" -#: main/main.c:356 +#: main/main.c:351 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O permitir cambios en estructura de tablas de sistema\n" -#: main/main.c:357 +#: main/main.c:352 #, c-format msgid " -P disable system indexes\n" msgstr " -P desactivar índices de sistema\n" -#: main/main.c:358 +#: main/main.c:353 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex mostrar tiempos después de cada consulta\n" -#: main/main.c:359 -#, fuzzy, c-format -#| msgid " -P disable system indexes\n" +#: main/main.c:354 +#, c-format msgid " -T send SIGABRT to all backend processes if one dies\n" -msgstr " -P desactivar índices de sistema\n" +msgstr " -T enviar SIGABRT a todos los procesos backend si uno muere\n" -#: main/main.c:360 +#: main/main.c:355 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NÚM espera NÚM segundos para permitir acoplar un depurador\n" -#: main/main.c:362 +#: main/main.c:357 #, c-format msgid "" "\n" @@ -15908,37 +16189,37 @@ msgstr "" "\n" "Opciones para modo mono-usuario:\n" -#: main/main.c:363 +#: main/main.c:358 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single selecciona modo mono-usuario (debe ser el primer argumento)\n" -#: main/main.c:364 +#: main/main.c:359 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME nombre de base de datos (el valor por omisión es el nombre de usuario)\n" -#: main/main.c:365 +#: main/main.c:360 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 nivel de depuración\n" -#: main/main.c:366 +#: main/main.c:361 #, c-format msgid " -E echo statement before execution\n" msgstr " -E mostrar las consultas antes de su ejecución\n" -#: main/main.c:367 +#: main/main.c:362 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j no usar saltos de línea como delimitadores de consulta\n" -#: main/main.c:368 main/main.c:374 +#: main/main.c:363 main/main.c:369 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r ARCHIVO enviar salida estándar y de error a ARCHIVO\n" -#: main/main.c:370 +#: main/main.c:365 #, c-format msgid "" "\n" @@ -15947,23 +16228,22 @@ msgstr "" "\n" "Opciones para modo de inicio (bootstrapping):\n" -#: main/main.c:371 +#: main/main.c:366 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot selecciona modo de inicio (debe ser el primer argumento)\n" -#: main/main.c:372 -#, fuzzy, c-format -#| msgid " --single selects single-user mode (must be first argument)\n" +#: main/main.c:367 +#, c-format msgid " --check selects check mode (must be first argument)\n" -msgstr " --single selecciona modo mono-usuario (debe ser el primer argumento)\n" +msgstr " --check selecciona modo de verificación (debe ser el primer argumento)\n" -#: main/main.c:373 +#: main/main.c:368 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME nombre de base de datos (argumento obligatorio en modo de inicio)\n" -#: main/main.c:376 +#: main/main.c:371 #, c-format msgid "" "\n" @@ -15980,12 +16260,12 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: main/main.c:380 +#: main/main.c:375 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: main/main.c:391 +#: main/main.c:386 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -15999,12 +16279,12 @@ msgstr "" "Vea la documentación para obtener más información acerca de cómo\n" "iniciar correctamente el servidor.\n" -#: main/main.c:408 +#: main/main.c:403 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: los IDs de usuario real y efectivo deben coincidir\n" -#: main/main.c:415 +#: main/main.c:410 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -16029,21 +16309,15 @@ msgstr "el tipo de nodo extensible «%s» ya existe" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods «%s» no fue registrado" -#: nodes/makefuncs.c:153 statistics/extended_stats.c:2335 +#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "la relación «%s» no tiene un tipo compuesto" -#: nodes/makefuncs.c:878 -#, fuzzy, c-format -#| msgid "unrecognized encoding: \"%s\"" -msgid "unrecognized JSON encoding: %s" -msgstr "no se reconoce la codificación: «%s»" - -#: nodes/nodeFuncs.c:116 nodes/nodeFuncs.c:147 parser/parse_coerce.c:2567 -#: parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 -#: parser/parse_expr.c:2049 parser/parse_func.c:710 parser/parse_oper.c:883 -#: utils/fmgr/funcapi.c:661 +#: 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 "no se pudo encontrar un tipo de array para el tipo de dato %s" @@ -16058,938 +16332,936 @@ msgstr "portal «%s» con parámetros: %s" msgid "unnamed portal with parameters: %s" msgstr "portal sin nombre con parámetros: %s" -#: optimizer/path/joinrels.c:973 +#: optimizer/path/joinrels.c:972 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join o hash join" -#: optimizer/plan/createplan.c:7111 parser/parse_merge.c:182 -#: parser/parse_merge.c:189 -#, fuzzy, c-format -#| msgid "cannot change relation \"%s\"" +#: optimizer/plan/createplan.c:7175 parser/parse_merge.c:203 +#: rewrite/rewriteHandler.c:1680 +#, c-format msgid "cannot execute MERGE on relation \"%s\"" -msgstr "no se puede cambiar la relación «%s»" +msgstr "no se puede ejecutar MERGE en la relación «%s»" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1392 +#: optimizer/plan/initsplan.c:1407 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s no puede ser aplicado al lado nulable de un outer join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1359 parser/analyze.c:1723 parser/analyze.c:1980 -#: parser/analyze.c:3193 +#: optimizer/plan/planner.c:1380 parser/analyze.c:1771 parser/analyze.c:2029 +#: parser/analyze.c:3247 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s no está permitido con UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2080 optimizer/plan/planner.c:4038 +#: optimizer/plan/planner.c:2121 optimizer/plan/planner.c:4108 #, c-format msgid "could not implement GROUP BY" msgstr "no se pudo implementar GROUP BY" -#: optimizer/plan/planner.c:2081 optimizer/plan/planner.c:4039 -#: optimizer/plan/planner.c:4679 optimizer/prep/prepunion.c:1053 +#: 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 "Algunos de los tipos sólo soportan hashing, mientras que otros sólo soportan ordenamiento." -#: optimizer/plan/planner.c:4678 +#: optimizer/plan/planner.c:4789 #, c-format msgid "could not implement DISTINCT" msgstr "no se pudo implementar DISTINCT" -#: optimizer/plan/planner.c:6017 +#: optimizer/plan/planner.c:6134 #, c-format msgid "could not implement window PARTITION BY" msgstr "No se pudo implementar PARTITION BY de ventana" -#: optimizer/plan/planner.c:6018 +#: optimizer/plan/planner.c:6135 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Las columnas de particionamiento de ventana deben de tipos que se puedan ordenar." -#: optimizer/plan/planner.c:6022 +#: optimizer/plan/planner.c:6139 #, c-format msgid "could not implement window ORDER BY" msgstr "no se pudo implementar ORDER BY de ventana" -#: optimizer/plan/planner.c:6023 +#: optimizer/plan/planner.c:6140 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Las columnas de ordenamiento de ventana debe ser de tipos que se puedan ordenar." -#: optimizer/prep/prepunion.c:516 +#: optimizer/prep/prepunion.c:467 #, c-format msgid "could not implement recursive UNION" msgstr "no se pudo implementar UNION recursivo" -#: optimizer/prep/prepunion.c:517 +#: optimizer/prep/prepunion.c:468 #, c-format msgid "All column datatypes must be hashable." msgstr "Todos los tipos de dato de las columnas deben ser tipos de los que se puedan hacer un hash." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1052 +#: optimizer/prep/prepunion.c:1319 #, c-format msgid "could not implement %s" msgstr "no se pudo implementar %s" -#: optimizer/util/clauses.c:4869 +#: optimizer/util/clauses.c:4963 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "función SQL «%s», durante expansión en línea" -#: optimizer/util/plancat.c:154 +#: optimizer/util/plancat.c:153 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "no se puede acceder a tablas temporales o «unlogged» durante la recuperación" -#: optimizer/util/plancat.c:726 +#: optimizer/util/plancat.c:768 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "no están soportadas las especificaciones de inferencia de índice único de registro completo" -#: optimizer/util/plancat.c:743 +#: optimizer/util/plancat.c:785 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "la restricción en la cláusula ON CONFLICT no tiene un índice asociado" -#: optimizer/util/plancat.c:793 +#: optimizer/util/plancat.c:835 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE no está soportado con restricciones de exclusión" -#: optimizer/util/plancat.c:898 +#: optimizer/util/plancat.c:945 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "no hay restricción única o de exclusión que coincida con la especificación ON CONFLICT" -#: parser/analyze.c:788 parser/analyze.c:1502 +#: parser/analyze.c:824 parser/analyze.c:1550 #, c-format msgid "VALUES lists must all be the same length" msgstr "las listas VALUES deben ser todas de la misma longitud" -#: parser/analyze.c:990 +#: parser/analyze.c:1027 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT tiene más expresiones que columnas de destino" -#: parser/analyze.c:1008 +#: parser/analyze.c:1045 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT tiene más columnas de destino que expresiones" -#: parser/analyze.c:1012 +#: parser/analyze.c:1049 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "La fuente de inserción es una expresión de fila que contiene la misma cantidad de columnas que esperaba el INSERT. ¿Usó accidentalmente paréntesis extra?" -#: parser/analyze.c:1309 parser/analyze.c:1696 +#: parser/analyze.c:1357 parser/analyze.c:1744 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO no está permitido aquí" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1625 parser/analyze.c:3425 +#: parser/analyze.c:1673 parser/analyze.c:3479 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s no puede ser aplicado a VALUES" -#: parser/analyze.c:1862 +#: parser/analyze.c:1911 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "cláusula UNION/INTERSECT/EXCEPT ORDER BY no válida" -#: parser/analyze.c:1863 +#: parser/analyze.c:1912 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Sólo nombres de columna del resultado pueden usarse, no expresiones o funciones." -#: parser/analyze.c:1864 +#: parser/analyze.c:1913 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Agregue la función o expresión a todos los SELECT, o mueva el UNION dentro de una cláusula FROM." -#: parser/analyze.c:1970 +#: parser/analyze.c:2019 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "sólo se permite INTO en el primer SELECT de UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:2042 +#: parser/analyze.c:2091 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "una sentencia miembro de UNION/INSERT/EXCEPT no puede referirse a otras relaciones del mismo nivel de la consulta" -#: parser/analyze.c:2129 +#: parser/analyze.c:2178 #, c-format msgid "each %s query must have the same number of columns" msgstr "cada consulta %s debe tener el mismo número de columnas" #: parser/analyze.c:2535 #, c-format +msgid "SET target columns cannot be qualified with the relation name." +msgstr "Las columnas de destino SET no pueden ser calificadas con el nombre de relación." + +#: parser/analyze.c:2589 +#, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING debe tener al menos una columna" -#: parser/analyze.c:2638 +#: parser/analyze.c:2692 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" msgstr[0] "fuente de asignación retornó %d columna" msgstr[1] "fuente de asignación retornó %d columnas" -#: parser/analyze.c:2699 +#: parser/analyze.c:2753 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "la variable «%s» es de tipo %s pero la expresión es de tipo %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2824 parser/analyze.c:2832 +#: parser/analyze.c:2878 parser/analyze.c:2886 #, c-format msgid "cannot specify both %s and %s" msgstr "no se puede especificar %s junto con %s" -#: parser/analyze.c:2852 +#: parser/analyze.c:2906 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR no debe contener sentencias que modifiquen datos en WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2860 +#: parser/analyze.c:2914 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s no está soportado" -#: parser/analyze.c:2863 +#: parser/analyze.c:2917 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Los cursores declarados HOLD deben ser READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2871 +#: parser/analyze.c:2925 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s no está soportado" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2882 +#: parser/analyze.c:2936 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s no es válido" -#: parser/analyze.c:2885 +#: parser/analyze.c:2939 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Los cursores insensitivos deben ser READ ONLY." -#: parser/analyze.c:2979 +#: parser/analyze.c:3033 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "las vistas materializadas no deben usar sentencias que modifiquen datos en WITH" -#: parser/analyze.c:2989 +#: parser/analyze.c:3043 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "las vistas materializadas no deben usar tablas temporales o vistas" -#: parser/analyze.c:2999 +#: parser/analyze.c:3053 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "las vistas materializadas no pueden definirse usando parámetros enlazados" -#: parser/analyze.c:3011 +#: parser/analyze.c:3065 #, c-format msgid "materialized views cannot be unlogged" msgstr "las vistas materializadas no pueden ser «unlogged»" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3200 +#: parser/analyze.c:3254 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s no está permitido con cláusulas DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3207 +#: parser/analyze.c:3261 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s no está permitido con cláusulas GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3214 +#: parser/analyze.c:3268 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s no está permitido con cláusulas HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3221 +#: parser/analyze.c:3275 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s no está permitido con funciones de agregación" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3228 +#: parser/analyze.c:3282 #, c-format msgid "%s is not allowed with window functions" msgstr "%s no está permitido con funciones de ventana deslizante" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3235 +#: parser/analyze.c:3289 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s no está permitido con funciones que retornan conjuntos en la lista de resultados" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3334 +#: parser/analyze.c:3388 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s debe especificar nombres de relaciones sin calificar" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3398 +#: parser/analyze.c:3452 #, c-format msgid "%s cannot be applied to a join" msgstr "%s no puede ser aplicado a un join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3407 +#: parser/analyze.c:3461 #, c-format msgid "%s cannot be applied to a function" msgstr "%s no puede ser aplicado a una función" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3416 +#: parser/analyze.c:3470 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s no puede ser aplicado a una función de tabla" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3434 +#: parser/analyze.c:3488 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s no puede ser aplicado a una consulta WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3443 +#: parser/analyze.c:3497 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s no puede ser aplicado a un «tuplestore» con nombre" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3463 +#: parser/analyze.c:3517 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "la relación «%s» en la cláusula %s no fue encontrada en la cláusula FROM" -#: parser/parse_agg.c:221 parser/parse_oper.c:227 +#: parser/parse_agg.c:210 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "no se pudo identificar un operador de ordenamiento para el tipo %s" -#: parser/parse_agg.c:223 +#: parser/parse_agg.c:212 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Las funciones de agregación con DISTINCT deben ser capaces de ordenar sus valores de entrada." -#: parser/parse_agg.c:258 +#: parser/parse_agg.c:270 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING debe tener menos de 32 argumentos" -#: parser/parse_agg.c:361 +#: parser/parse_agg.c:373 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "no se permiten funciones de agregación en las condiciones de JOIN" -#: parser/parse_agg.c:363 +#: parser/parse_agg.c:375 msgid "grouping operations are not allowed in JOIN conditions" msgstr "no se permiten las operaciones «grouping» en condiciones JOIN" -#: parser/parse_agg.c:375 +#: parser/parse_agg.c:385 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "las funciones de agregación no están permitidas en la cláusula FROM de su mismo nivel de consulta" -#: parser/parse_agg.c:377 +#: parser/parse_agg.c:387 msgid "grouping operations are not allowed in FROM clause of their own query level" msgstr "las operaciones «grouping» no están permitidas en la cláusula FROM de su mismo nivel de consulta" -#: parser/parse_agg.c:382 +#: parser/parse_agg.c:392 msgid "aggregate functions are not allowed in functions in FROM" msgstr "no se permiten funciones de agregación en una función en FROM" -#: parser/parse_agg.c:384 +#: parser/parse_agg.c:394 msgid "grouping operations are not allowed in functions in FROM" msgstr "no se permiten operaciones «grouping» en funciones en FROM" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:402 msgid "aggregate functions are not allowed in policy expressions" msgstr "no se permiten funciones de agregación en expresiones de políticas" -#: parser/parse_agg.c:394 +#: parser/parse_agg.c:404 msgid "grouping operations are not allowed in policy expressions" msgstr "no se permiten operaciones «grouping» en expresiones de políticas" -#: parser/parse_agg.c:411 +#: parser/parse_agg.c:421 msgid "aggregate functions are not allowed in window RANGE" msgstr "no se permiten funciones de agregación en RANGE de ventana deslizante" -#: parser/parse_agg.c:413 +#: parser/parse_agg.c:423 msgid "grouping operations are not allowed in window RANGE" msgstr "no se permiten operaciones «grouping» en RANGE de ventana deslizante" -#: parser/parse_agg.c:418 +#: parser/parse_agg.c:428 msgid "aggregate functions are not allowed in window ROWS" msgstr "no se permiten funciones de agregación en ROWS de ventana deslizante" -#: parser/parse_agg.c:420 +#: parser/parse_agg.c:430 msgid "grouping operations are not allowed in window ROWS" msgstr "no se permiten operaciones «grouping» en ROWS de ventana deslizante" -#: parser/parse_agg.c:425 +#: parser/parse_agg.c:435 msgid "aggregate functions are not allowed in window GROUPS" msgstr "no se permiten funciones de agregación en GROUPS de ventana deslizante" -#: parser/parse_agg.c:427 +#: parser/parse_agg.c:437 msgid "grouping operations are not allowed in window GROUPS" msgstr "no se permiten operaciones «grouping» en GROUPS de ventana deslizante" -#: parser/parse_agg.c:440 -#, fuzzy -#| msgid "aggregate functions are not allowed in trigger WHEN conditions" +#: parser/parse_agg.c:450 msgid "aggregate functions are not allowed in MERGE WHEN conditions" -msgstr "no se permiten funciones de agregación en condición WHEN de un disparador" +msgstr "no se permiten funciones de agregación en condiciones MERGE WHEN" -#: parser/parse_agg.c:442 -#, fuzzy -#| msgid "grouping operations are not allowed in trigger WHEN conditions" +#: parser/parse_agg.c:452 msgid "grouping operations are not allowed in MERGE WHEN conditions" -msgstr "no se permiten operaciones «grouping» en condiciones WHEN de un disparador" +msgstr "no se permiten operaciones «grouping» en condiciones MERGE WHEN" -#: parser/parse_agg.c:468 +#: parser/parse_agg.c:479 msgid "aggregate functions are not allowed in check constraints" msgstr "no se permiten funciones de agregación en restricciones «check»" -#: parser/parse_agg.c:470 +#: parser/parse_agg.c:481 msgid "grouping operations are not allowed in check constraints" msgstr "no se permiten operaciones «grouping» en restricciones «check»" -#: parser/parse_agg.c:477 +#: parser/parse_agg.c:488 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de agregación en expresiones DEFAULT" -#: parser/parse_agg.c:479 +#: parser/parse_agg.c:490 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "no se permiten operaciones «grouping» en expresiones DEFAULT" -#: parser/parse_agg.c:484 +#: parser/parse_agg.c:495 msgid "aggregate functions are not allowed in index expressions" msgstr "no se permiten funciones de agregación en una expresión de índice" -#: parser/parse_agg.c:486 +#: parser/parse_agg.c:497 msgid "grouping operations are not allowed in index expressions" msgstr "no se permiten operaciones «grouping» en expresiones de índice" -#: parser/parse_agg.c:491 +#: parser/parse_agg.c:502 msgid "aggregate functions are not allowed in index predicates" msgstr "no se permiten funciones de agregación en predicados de índice" -#: parser/parse_agg.c:493 +#: parser/parse_agg.c:504 msgid "grouping operations are not allowed in index predicates" msgstr "no se permiten operaciones «grouping» en predicados de índice" -#: parser/parse_agg.c:498 +#: parser/parse_agg.c:509 msgid "aggregate functions are not allowed in statistics expressions" msgstr "no se permiten funciones de agregación en expresiones de estadísticas" -#: parser/parse_agg.c:500 +#: parser/parse_agg.c:511 msgid "grouping operations are not allowed in statistics expressions" msgstr "no se permiten operaciones «grouping» en expresiones de estadísticas" -#: parser/parse_agg.c:505 +#: parser/parse_agg.c:516 msgid "aggregate functions are not allowed in transform expressions" msgstr "no se permiten funciones de agregación en una expresión de transformación" -#: parser/parse_agg.c:507 +#: parser/parse_agg.c:518 msgid "grouping operations are not allowed in transform expressions" msgstr "no se permiten operaciones «grouping» en expresiones de transformación" -#: parser/parse_agg.c:512 +#: parser/parse_agg.c:523 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones de agregación en un parámetro a EXECUTE" -#: parser/parse_agg.c:514 +#: parser/parse_agg.c:525 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "no se permiten operaciones «grouping» en parámetros a EXECUTE" -#: parser/parse_agg.c:519 +#: parser/parse_agg.c:530 msgid "aggregate functions are not allowed in trigger WHEN conditions" -msgstr "no se permiten funciones de agregación en condición WHEN de un disparador" +msgstr "no se permiten funciones de agregación en condición WHEN de un “trigger”" -#: parser/parse_agg.c:521 +#: parser/parse_agg.c:532 msgid "grouping operations are not allowed in trigger WHEN conditions" -msgstr "no se permiten operaciones «grouping» en condiciones WHEN de un disparador" +msgstr "no se permiten operaciones «grouping» en condiciones WHEN de un “trigger”" -#: parser/parse_agg.c:526 +#: parser/parse_agg.c:537 msgid "aggregate functions are not allowed in partition bound" msgstr "no se permiten funciones de agregación en borde de partición" -#: parser/parse_agg.c:528 +#: parser/parse_agg.c:539 msgid "grouping operations are not allowed in partition bound" msgstr "no se permiten operaciones «grouping» en borde de partición" -#: parser/parse_agg.c:533 +#: parser/parse_agg.c:544 msgid "aggregate functions are not allowed in partition key expressions" msgstr "no se permiten funciones de agregación en una expresión de llave de particionamiento" -#: parser/parse_agg.c:535 +#: parser/parse_agg.c:546 msgid "grouping operations are not allowed in partition key expressions" msgstr "no se permiten operaciones «grouping» en expresiones de llave de particionamiento" -#: parser/parse_agg.c:541 +#: parser/parse_agg.c:552 msgid "aggregate functions are not allowed in column generation expressions" msgstr "no se permiten funciones de agregación en expresiones de generación de columna" -#: parser/parse_agg.c:543 +#: parser/parse_agg.c:554 msgid "grouping operations are not allowed in column generation expressions" msgstr "no se permiten operaciones «grouping» en expresiones de generación de columna" -#: parser/parse_agg.c:549 +#: parser/parse_agg.c:560 msgid "aggregate functions are not allowed in CALL arguments" msgstr "no se permiten funciones de agregación en argumentos de CALL" -#: parser/parse_agg.c:551 +#: parser/parse_agg.c:562 msgid "grouping operations are not allowed in CALL arguments" msgstr "no se permiten operaciones «grouping» en argumentos de CALL" -#: parser/parse_agg.c:557 +#: parser/parse_agg.c:568 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones de agregación en las condiciones WHERE de COPY FROM" -#: parser/parse_agg.c:559 +#: parser/parse_agg.c:570 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten las operaciones «grouping» en condiciones WHERE de COPY FROM" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:586 parser/parse_clause.c:1955 +#: parser/parse_agg.c:597 parser/parse_clause.c:1962 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "no se permiten funciones de agregación en %s" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:589 +#: parser/parse_agg.c:600 #, c-format msgid "grouping operations are not allowed in %s" msgstr "no se permiten operaciones «grouping» en %s" -#: parser/parse_agg.c:690 +#: parser/parse_agg.c:701 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "una función de agregación de nivel exterior no puede contener una variable de nivel inferior en sus argumentos directos" -#: parser/parse_agg.c:768 +#: parser/parse_agg.c:779 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "las llamadas a funciones de agregación no pueden contener llamadas a funciones que retornan conjuntos" -#: parser/parse_agg.c:769 parser/parse_expr.c:1700 parser/parse_expr.c:2182 -#: parser/parse_func.c:884 +#: 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 "Puede intentar mover la función que retorna conjuntos a un elemento LATERAL FROM." -#: parser/parse_agg.c:774 +#: parser/parse_agg.c:785 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "las llamadas a funciones de agregación no pueden contener llamadas a funciones de ventana deslizante" -#: parser/parse_agg.c:853 +#: parser/parse_agg.c:864 msgid "window functions are not allowed in JOIN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones JOIN" -#: parser/parse_agg.c:860 +#: parser/parse_agg.c:871 msgid "window functions are not allowed in functions in FROM" msgstr "no se permiten funciones de ventana deslizante en funciones en FROM" -#: parser/parse_agg.c:866 +#: parser/parse_agg.c:877 msgid "window functions are not allowed in policy expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de políticas" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:890 msgid "window functions are not allowed in window definitions" msgstr "no se permiten funciones de ventana deslizante en definiciones de ventana deslizante" -#: parser/parse_agg.c:890 -#, fuzzy -#| msgid "window functions are not allowed in trigger WHEN conditions" +#: parser/parse_agg.c:901 msgid "window functions are not allowed in MERGE WHEN conditions" -msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un disparador" +msgstr "no se permiten funciones de ventana deslizante en condiciones MERGE WHEN" -#: parser/parse_agg.c:914 +#: parser/parse_agg.c:926 msgid "window functions are not allowed in check constraints" msgstr "no se permiten funciones de ventana deslizante en restricciones «check»" -#: parser/parse_agg.c:918 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones DEFAULT" -#: parser/parse_agg.c:921 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in index expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de índice" -#: parser/parse_agg.c:924 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in statistics expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de estadísticas" -#: parser/parse_agg.c:927 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in index predicates" msgstr "no se permiten funciones de ventana deslizante en predicados de índice" -#: parser/parse_agg.c:930 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in transform expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de transformación" -#: parser/parse_agg.c:933 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones de ventana deslizante en parámetros a EXECUTE" -#: parser/parse_agg.c:936 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in trigger WHEN conditions" -msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un disparador" +msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un “trigger”" -#: parser/parse_agg.c:939 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in partition bound" msgstr "no se permiten funciones de ventana deslizante en borde de partición" -#: parser/parse_agg.c:942 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in partition key expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de llave de particionamiento" -#: parser/parse_agg.c:945 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in CALL arguments" msgstr "no se permiten funciones de ventana deslizante en argumentos de CALL" -#: parser/parse_agg.c:948 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones de ventana deslizante en las condiciones WHERE de COPY FROM" -#: parser/parse_agg.c:951 +#: parser/parse_agg.c:963 msgid "window functions are not allowed in column generation expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de generación de columna" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:974 parser/parse_clause.c:1964 +#: parser/parse_agg.c:986 parser/parse_clause.c:1971 #, c-format msgid "window functions are not allowed in %s" msgstr "no se permiten funciones de ventana deslizante en %s" -#: parser/parse_agg.c:1008 parser/parse_clause.c:2797 +#: parser/parse_agg.c:1020 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "la ventana «%s» no existe" -#: parser/parse_agg.c:1096 +#: parser/parse_agg.c:1108 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "demasiados conjuntos «grouping» presentes (máximo 4096)" -#: parser/parse_agg.c:1236 +#: parser/parse_agg.c:1248 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "no se permiten funciones de agregación en el término recursivo de una consulta recursiva" -#: parser/parse_agg.c:1429 +#: 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 "la columna «%s.%s» debe aparecer en la cláusula GROUP BY o ser usada en una función de agregación" -#: parser/parse_agg.c:1432 +#: parser/parse_agg.c:1444 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Argumentos directos de una función de agregación de conjuntos ordenados debe usar sólo columnas agrupadas." -#: parser/parse_agg.c:1437 +#: parser/parse_agg.c:1449 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "la subconsulta usa la columna «%s.%s» no agrupada de una consulta exterior" -#: parser/parse_agg.c:1601 +#: parser/parse_agg.c:1613 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "los argumentos de GROUPING deben ser expresiones agrupantes del nivel de consulta asociado" -#: parser/parse_clause.c:195 +#: parser/parse_clause.c:193 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "relación «%s» no puede ser destino de una sentencia modificadora" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2552 +#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "las funciones que retornan conjuntos deben aparecer en el nivel más externo del FROM" -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:609 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "no se permiten múltiples definiciones de columnas para la misma función" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:642 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() con varias funciones no puede tener una lista de definición de columnas" -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:643 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Ponga una lista de columnas separada para cada función dentro de ROWS FROM()." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:649 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() con varios argumentos no puede tener una lista de definición de columnas" -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:650 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Use llamadas a UNNEST() separadas dentro de ROWS FROM() y adjunte una lista de columnas a cada una." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:657 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY no puede usarse con una lista de definición de columnas" -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:658 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Ponga una lista de columnas dentro de ROWS FROM()." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:762 parser/parse_jsontable.c:295 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "sólo se permite una columna FOR ORDINALITY" -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:823 #, c-format msgid "column name \"%s\" is not unique" msgstr "el nombre de columna «%s» no es único" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:865 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "el espacio de nombres «%s» no es único" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:875 #, c-format msgid "only one default namespace is allowed" msgstr "sólo se permite un espacio de nombres predeterminado" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:935 #, c-format msgid "tablesample method %s does not exist" msgstr "no existe el método de tablesample «%s»" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:957 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "el método de tablesample «%s» requiere %d argumento, no %d" msgstr[1] "el método de tablesample «%s» requiere %d argumentos, no %d" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:991 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "el método de tablesample «%s» no soporta la opción REPEATABLE" -#: parser/parse_clause.c:1138 +#: parser/parse_clause.c:1144 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "la cláusula TABLESAMPLE sólo puede aplicarse a tablas y vistas materializadas" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1331 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "la columna «%s» aparece más de una vez en la cláusula USING" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1346 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "la columna común «%s» aparece más de una vez en la tabla izquierda" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1355 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla izquierda" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1370 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "la columna común «%s» aparece más de una vez en la tabla derecha" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1379 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla derecha" -#: parser/parse_clause.c:1900 +#: parser/parse_clause.c:1907 #, c-format msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "la cantidad de registros no puede ser NULL en la cláusula FETCH FIRST ... WITH TIES" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1925 +#: parser/parse_clause.c:1932 #, c-format msgid "argument of %s must not contain variables" msgstr "el argumento de %s no puede contener variables" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2090 +#: parser/parse_clause.c:2097 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s «%s» es ambiguo" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2118 +#: parser/parse_clause.c:2125 #, c-format msgid "non-integer constant in %s" msgstr "constante no entera en %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2140 +#: parser/parse_clause.c:2147 #, c-format msgid "%s position %d is not in select list" msgstr "la posición %2$d de %1$s no está en la lista de resultados" -#: parser/parse_clause.c:2579 +#: parser/parse_clause.c:2586 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE está limitado a 12 elementos" -#: parser/parse_clause.c:2785 +#: parser/parse_clause.c:2792 #, c-format msgid "window \"%s\" is already defined" msgstr "la ventana «%s» ya está definida" -#: parser/parse_clause.c:2846 +#: parser/parse_clause.c:2853 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula PARTITION BY de la ventana «%s»" -#: parser/parse_clause.c:2858 +#: parser/parse_clause.c:2865 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula ORDER BY de la ventana «%s»" -#: parser/parse_clause.c:2888 parser/parse_clause.c:2894 +#: parser/parse_clause.c:2895 parser/parse_clause.c:2901 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "no se puede copiar la ventana «%s» porque tiene una cláusula «frame»" -#: parser/parse_clause.c:2896 +#: parser/parse_clause.c:2903 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omita el uso de paréntesis en esta cláusula OVER." -#: parser/parse_clause.c:2916 +#: parser/parse_clause.c:2923 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING requiere exactamente una columna ORDER BY" -#: parser/parse_clause.c:2939 +#: parser/parse_clause.c:2946 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "el modo GROUPS requiere una cláusula ORDER BY" -#: parser/parse_clause.c:3010 +#: parser/parse_clause.c:3016 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "en una agregación con DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de argumentos" -#: parser/parse_clause.c:3011 +#: parser/parse_clause.c:3017 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "para SELECT DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de resultados" -#: parser/parse_clause.c:3043 +#: parser/parse_clause.c:3049 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "una función de agregación con DISTINCT debe tener al menos un argumento" -#: parser/parse_clause.c:3044 +#: parser/parse_clause.c:3050 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT debe tener al menos una columna" -#: parser/parse_clause.c:3110 parser/parse_clause.c:3142 +#: parser/parse_clause.c:3116 parser/parse_clause.c:3148 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "las expresiones de SELECT DISTINCT ON deben coincidir con las expresiones iniciales de ORDER BY" -#: parser/parse_clause.c:3220 +#: parser/parse_clause.c:3226 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC no están permitidos en cláusulas ON CONFLICT" -#: parser/parse_clause.c:3226 +#: parser/parse_clause.c:3232 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST no están permitidos en cláusulas ON CONFLICT" -#: parser/parse_clause.c:3305 +#: parser/parse_clause.c:3311 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE requiere una especificación de inferencia o nombre de restricción" -#: parser/parse_clause.c:3306 +#: parser/parse_clause.c:3312 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Por ejemplo, ON CONFLICT (nombre_de_columna)." -#: parser/parse_clause.c:3317 +#: parser/parse_clause.c:3323 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT no está soportado con tablas que son catálogos de sistema" -#: parser/parse_clause.c:3325 +#: parser/parse_clause.c:3331 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT no está soportado en la tabla «%s» usada como catálogo de sistema" -#: parser/parse_clause.c:3456 +#: parser/parse_clause.c:3462 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "el operador «%s» no es un operador válido de ordenamiento" -#: parser/parse_clause.c:3458 +#: parser/parse_clause.c:3464 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Los operadores de ordenamiento deben ser miembros «<» o «>» de una familia de operadores btree." -#: parser/parse_clause.c:3769 +#: parser/parse_clause.c:3775 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING no está soportado para la columna de tipo %s" -#: parser/parse_clause.c:3775 +#: parser/parse_clause.c:3781 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING no está soportado para la columna de tipo %s y tipo de desplazamiento %s" -#: parser/parse_clause.c:3778 +#: parser/parse_clause.c:3784 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Convierta el valor de desplazamiento a un tipo apropiado." -#: parser/parse_clause.c:3783 +#: parser/parse_clause.c:3789 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING tiene múltiples interpretaciones para la columna de tipo %s y tipo de desplazamiento %s" -#: parser/parse_clause.c:3786 +#: parser/parse_clause.c:3792 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Convierta el valor de desplazamiento al tipo deseado exacto." #: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 #: parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 -#: parser/parse_expr.c:2083 parser/parse_expr.c:2691 parser/parse_expr.c:3516 -#: parser/parse_target.c:985 +#: 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 "no se puede convertir el tipo %s a %s" @@ -17024,121 +17296,121 @@ msgid "argument of %s must not return a set" msgstr "el argumento de %s no debe retornar un conjunto" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1383 +#: parser/parse_coerce.c:1420 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "los tipos %2$s y %3$s no son coincidentes en %1$s" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, c-format msgid "argument types %s and %s cannot be matched" msgstr "los tipos de argumento %s y %s no pueden hacerse coincidir" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1551 +#: parser/parse_coerce.c:1588 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s no pudo convertir el tipo %s a %s" -#: parser/parse_coerce.c: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 "los argumentos declarados «%s» no son de tipos compatibles" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 -#: utils/fmgr/funcapi.c:592 +#: 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 "el argumento declarado %s no es un array sino de tipo %s" -#: parser/parse_coerce.c:2282 parser/parse_coerce.c:2432 -#: utils/fmgr/funcapi.c:606 +#: 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 "el argumento declarado %s no es un tipo de rango sino tipo %s" -#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2396 -#: parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:624 utils/fmgr/funcapi.c:689 +#: 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 "el argumento declarado %s no es un tipo de multirango sino tipo %s" -#: parser/parse_coerce.c:2353 +#: parser/parse_coerce.c:2390 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "no se puede determinar el tipo del argumento «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 "el argumento declarado %s no es consistente con el argumento declarado %s" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "no se pudo determinar el tipo polimórfico porque la entrada es de tipo %s" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "el argumento emparejado con anynonarray es un array: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2535 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "el tipo emparejado con anyenum no es un tipo enum: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "los argumentos de la familia anycompatible no pueden ser convertidos a un tipo común" -#: 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 "no se pudo determinar el tipo polimórfico %s porque la entrada es de tipo %s" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "el tipo anycompatiblerange %s no coincide con el tipo anycompatible %s" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "el tipo anycompatiblemultirange %s no coincide con el tipo anycompatible %s" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "el argumento emparejado a anycompatiblenonarray es un array: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, c-format msgid "A result of type %s requires at least one input of type anyrange or anymultirange." msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anyrange o anymultirange." -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anycompatiblerange o anycompatiblemultirange." -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anyelement, anyarray, anynonarray, anyenum, anyrange o anymultirange." -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange o anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "Un resultado de tipo internal requiere al menos una entrada de tipo internal." @@ -17184,442 +17456,553 @@ msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de EXCEPT" -#: parser/parse_cte.c:133 -#, fuzzy, c-format -#| msgid "\"EEEE\" not supported for input" -msgid "MERGE not supported in WITH query" -msgstr "«EEEE» no está soportado en la entrada" - -#: parser/parse_cte.c:143 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "el nombre de consulta WITH «%s» fue especificado más de una vez" -#: parser/parse_cte.c:314 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "no se pudo identificar un operador de desigualdad para el tipo %s" -#: parser/parse_cte.c:341 +#: parser/parse_cte.c:335 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "la cláusula WITH que contiene las sentencias que modifican datos debe estar en el nivel más externo" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:384 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "la columna %2$d en la consulta recursiva «%1$s» tiene tipo %3$s en el término no recursivo, pero %4$s en general" -#: parser/parse_cte.c:396 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Aplique una conversión de tipo a la salida del término no recursivo al tipo correcto." -#: parser/parse_cte.c:401 +#: parser/parse_cte.c:395 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "la columna %2$d en la consulta recursiva «%1$s» tiene ordenamiento (collation) %3$s en el término no recursivo, pero %4$s en general" -#: parser/parse_cte.c:405 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Use la clásula COLLATE para definir el ordenamiento del término no-recursivo." -#: parser/parse_cte.c:426 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "la consulta WITH no es recursiva" -#: parser/parse_cte.c:457 +#: parser/parse_cte.c:451 #, c-format msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "con una cláusula SEARCH o CYCLE, el lado izquierdo de UNION debe ser un SELECT" -#: parser/parse_cte.c:462 +#: parser/parse_cte.c:456 #, c-format msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "con una cláusula SEARCH o CYCLE, el lado derecho de UNION debe ser un SELECT" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "columna de búsqueda «%s» no se encuentra en la lista de columnas de la consulta WITH" -#: parser/parse_cte.c:484 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "columna de búsqueda «%s» fue especificada más de una vez" -#: parser/parse_cte.c:493 +#: parser/parse_cte.c:487 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "el nombre para la columna de secuencia de búsqueda «%s» ya ha sido utilizado en la lista de columnas de la consulta WITH" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "la columna de ciclo «%s» no se encuentra en la lista de columnas de la consulta WITH" -#: parser/parse_cte.c:517 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "columna de ciclo «%s» fue especificada más de una vez" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "el nombre para la columna de marca de ciclo «%s» ya ha sido utilizada en la lista de columnas de la consulta WITH" -#: parser/parse_cte.c:533 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "el nombre para la columna de ruta de ciclo «%s» ya ha sido utilizada en la lista de columnas de la consulta WITH" -#: parser/parse_cte.c:541 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "el nombre para la columna de marca de ciclo es igual que el nombre para la columna de ruta de ciclo" -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "el nombre para la columna de secuencia de búsqueda es igual que el nombre para la columna de marca de ciclo" -#: parser/parse_cte.c:558 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "el nombre para la columna de secuencia de búsqueda es igual que el nombre para la columna de ruta de ciclo" -#: parser/parse_cte.c:642 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "la consulta WITH «%s» tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_cte.c:822 +#: parser/parse_cte.c:816 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "la recursión mutua entre elementos de WITH no está implementada" -#: parser/parse_cte.c:874 +#: parser/parse_cte.c:868 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "la consulta recursiva «%s» no debe contener sentencias que modifiquen datos" -#: parser/parse_cte.c:882 +#: parser/parse_cte.c:876 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "la consulta recursiva «%s» no tiene la forma término-no-recursivo UNION [ALL] término-recursivo" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:911 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY no está implementado en una consulta recursiva" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:917 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET no está implementado en una consulta recursiva" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:923 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT no está implementado en una consulta recursiva" -#: parser/parse_cte.c:944 +#: parser/parse_cte.c:929 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE no está implementado en una consulta recursiva" -#: parser/parse_cte.c:1001 +#: parser/parse_cte.c:1008 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer más de una vez" -#: parser/parse_expr.c:294 +#: parser/parse_expr.c:313 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT no está permitido en este contexto" -#: parser/parse_expr.c:371 parser/parse_relation.c:3687 -#: parser/parse_relation.c:3697 parser/parse_relation.c:3715 -#: parser/parse_relation.c:3722 parser/parse_relation.c:3736 +#: 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 "no existe la columna %s.%s" -#: parser/parse_expr.c:383 +#: parser/parse_expr.c:418 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "la columna «%s» no fue encontrado en el tipo %s" -#: parser/parse_expr.c:389 +#: parser/parse_expr.c:424 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "no se pudo identificar la columna «%s» en el tipo de dato record" -#: parser/parse_expr.c:395 +#: parser/parse_expr.c:430 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "la notación de columna .%s fue aplicada al tipo %s, que no es un tipo compuesto" -#: parser/parse_expr.c:426 parser/parse_target.c:733 +#: parser/parse_expr.c:461 parser/parse_target.c:732 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "la expansión de filas a través de «*» no está soportado aquí" -#: parser/parse_expr.c:548 +#: parser/parse_expr.c:584 msgid "cannot use column reference in DEFAULT expression" msgstr "no se pueden usar referencias a columnas en una cláusula DEFAULT" -#: parser/parse_expr.c:551 +#: parser/parse_expr.c:587 msgid "cannot use column reference in partition bound expression" msgstr "no se pueden usar referencias a columnas en expresión de borde de partición" -#: parser/parse_expr.c:810 parser/parse_relation.c:833 -#: parser/parse_relation.c:915 parser/parse_target.c:1225 +#: 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 "la referencia a la columna «%s» es ambigua" -#: parser/parse_expr.c:866 parser/parse_param.c:110 parser/parse_param.c:142 +#: 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 "no hay parámetro $%d" -#: parser/parse_expr.c:1066 +#. 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 "NULLIF requiere que el operador = retorne boolean" +msgid "%s requires = operator to yield boolean" +msgstr "%s requiere que el operador = retorne boolean" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1072 parser/parse_expr.c:3007 +#: parser/parse_expr.c:1109 parser/parse_expr.c:3072 #, c-format msgid "%s must not return a set" msgstr "%s no debe retornar un conjunto" -#: parser/parse_expr.c:1457 parser/parse_expr.c:1489 +#: parser/parse_expr.c:1395 +#, c-format +msgid "MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" +msgstr "MERGE_ACTION() sólo puede usarse en la lista RETURNING de una orden MERGE" + +#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 #, c-format msgid "number of columns does not match number of values" msgstr "el número de columnas no coincide con el número de valores" -#: parser/parse_expr.c:1503 +#: parser/parse_expr.c:1565 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "el origen para un UPDATE de varias columnas debe ser una expresión sub-SELECT o ROW ()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1698 parser/parse_expr.c:2180 parser/parse_func.c:2677 +#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "no se permiten funciones que retornan conjuntos en %s" -#: parser/parse_expr.c:1761 +#: parser/parse_expr.c:1824 msgid "cannot use subquery in check constraint" msgstr "no se pueden usar subconsultas en una restricción «check»" -#: parser/parse_expr.c:1765 +#: parser/parse_expr.c:1828 msgid "cannot use subquery in DEFAULT expression" msgstr "no se puede usar una subconsulta en una expresión DEFAULT" -#: parser/parse_expr.c:1768 +#: parser/parse_expr.c:1831 msgid "cannot use subquery in index expression" msgstr "no se puede usar una subconsulta en una expresión de índice" -#: parser/parse_expr.c:1771 +#: parser/parse_expr.c:1834 msgid "cannot use subquery in index predicate" msgstr "no se puede usar una subconsulta en un predicado de índice" -#: parser/parse_expr.c:1774 +#: parser/parse_expr.c:1837 msgid "cannot use subquery in statistics expression" msgstr "no se puede usar una subconsulta en una expresión de estadísticas" -#: parser/parse_expr.c:1777 +#: parser/parse_expr.c:1840 msgid "cannot use subquery in transform expression" msgstr "no se puede usar una subconsulta en una expresión de transformación" -#: parser/parse_expr.c:1780 +#: parser/parse_expr.c:1843 msgid "cannot use subquery in EXECUTE parameter" msgstr "no se puede usar una subconsulta en un parámetro a EXECUTE" -#: parser/parse_expr.c:1783 +#: parser/parse_expr.c:1846 msgid "cannot use subquery in trigger WHEN condition" -msgstr "no se puede usar una subconsulta en la condición WHEN de un disparador" +msgstr "no se puede usar una subconsulta en la condición WHEN de un “trigger”" -#: parser/parse_expr.c:1786 +#: parser/parse_expr.c:1849 msgid "cannot use subquery in partition bound" msgstr "no se puede usar una subconsulta en un borde de partición" -#: parser/parse_expr.c:1789 +#: parser/parse_expr.c:1852 msgid "cannot use subquery in partition key expression" msgstr "no se puede usar una subconsulta en una expresión de llave de partición" -#: parser/parse_expr.c:1792 +#: parser/parse_expr.c:1855 msgid "cannot use subquery in CALL argument" msgstr "no se puede usar una subconsulta en un argumento a CALL" -#: parser/parse_expr.c:1795 +#: parser/parse_expr.c:1858 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "no se puede usar una subconsulta en la condición WHERE de COPY FROM" -#: parser/parse_expr.c:1798 +#: parser/parse_expr.c:1861 msgid "cannot use subquery in column generation expression" msgstr "no se puede usar una subconsulta en una expresión de generación de columna" -#: parser/parse_expr.c:1851 parser/parse_expr.c:3632 +#: parser/parse_expr.c:1914 parser/parse_expr.c:3764 #, c-format msgid "subquery must return only one column" msgstr "la subconsulta debe retornar sólo una columna" -#: parser/parse_expr.c:1922 +#: parser/parse_expr.c:1985 #, c-format msgid "subquery has too many columns" msgstr "la subconsulta tiene demasiadas columnas" -#: parser/parse_expr.c:1927 +#: parser/parse_expr.c:1990 #, c-format msgid "subquery has too few columns" msgstr "la subconsulta tiene muy pocas columnas" -#: parser/parse_expr.c:2023 +#: parser/parse_expr.c:2086 #, c-format msgid "cannot determine type of empty array" msgstr "no se puede determinar el tipo de un array vacío" -#: parser/parse_expr.c:2024 +#: parser/parse_expr.c:2087 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Agregue una conversión de tipo explícita al tipo deseado, por ejemplo ARRAY[]::integer[]." -#: parser/parse_expr.c:2038 +#: parser/parse_expr.c:2101 #, c-format msgid "could not find element type for data type %s" msgstr "no se pudo encontrar el tipo de dato de elemento para el tipo de dato %s" -#: parser/parse_expr.c:2121 -#, fuzzy, c-format -#| msgid "target lists can have at most %d entries" +#: parser/parse_expr.c:2184 +#, c-format msgid "ROW expressions can have at most %d entries" -msgstr "las listas de resultados pueden tener a lo más %d entradas" +msgstr "las expresiones ROW pueden tener a lo más %d entradas" -#: parser/parse_expr.c:2326 +#: parser/parse_expr.c:2389 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "el valor del atributo XML sin nombre debe ser una referencia a una columna" -#: parser/parse_expr.c:2327 +#: parser/parse_expr.c:2390 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "el valor del elemento XML sin nombre debe ser una referencia a una columna" -#: parser/parse_expr.c:2342 +#: parser/parse_expr.c:2405 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "el nombre de atributo XML «%s» aparece más de una vez" -#: parser/parse_expr.c:2450 +#: parser/parse_expr.c:2513 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "no se puede convertir el resultado de XMLSERIALIZE a %s" -#: parser/parse_expr.c:2764 parser/parse_expr.c:2960 +#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 #, c-format msgid "unequal number of entries in row expressions" msgstr "número desigual de entradas en expresiones de registro" -#: parser/parse_expr.c:2774 +#: parser/parse_expr.c:2837 #, c-format msgid "cannot compare rows of zero length" msgstr "no se pueden comparar registros de largo cero" -#: parser/parse_expr.c:2799 +#: parser/parse_expr.c:2862 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "el operador de comparación de registros debe retornar tipo boolean, no tipo %s" -#: parser/parse_expr.c:2806 +#: parser/parse_expr.c:2869 #, c-format msgid "row comparison operator must not return a set" msgstr "el operador de comparación de registros no puede retornar un conjunto" -#: parser/parse_expr.c:2865 parser/parse_expr.c:2906 +#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "no se pudo determinar la interpretación del operador de comparación de registros %s" -#: parser/parse_expr.c:2867 +#: parser/parse_expr.c:2930 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Los operadores de comparación de registros deben estar asociados a una familia de operadores btree." -#: parser/parse_expr.c:2908 +#: parser/parse_expr.c:2971 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Hay múltiples candidatos igualmente plausibles." -#: parser/parse_expr.c:3001 -#, c-format -msgid "IS DISTINCT FROM requires = operator to yield boolean" -msgstr "IS DISTINCT FROM requiere que el operador = retorne boolean" - -#: parser/parse_expr.c:3254 +#: parser/parse_expr.c:3306 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" -msgstr "" +msgstr "la cláusula ENCODING de JSON sólo está permitida para el tipo de entrada bytea" -#: parser/parse_expr.c:3261 +#: parser/parse_expr.c:3370 #, c-format -msgid "FORMAT JSON has no effect for json and jsonb types" -msgstr "" +msgid "cannot use non-string types with implicit FORMAT JSON clause" +msgstr "no se puede usar tipos que no son string con la cláusula implícita FORMAT JSON" -#: parser/parse_expr.c:3284 +#: parser/parse_expr.c:3371 #, c-format -msgid "cannot use non-string types with implicit FORMAT JSON clause" -msgstr "" +msgid "cannot use non-string types with explicit FORMAT JSON clause" +msgstr "no se puede usar tipos que no son string con la cláusula explítica FORMAT JSON" -#: parser/parse_expr.c:3354 -#, fuzzy, c-format -#| msgid "cannot cast jsonb string to type %s" +#: parser/parse_expr.c:3460 +#, c-format msgid "cannot use JSON format with non-string output types" -msgstr "no se puede convertir un string jsonb a tipo %s" +msgstr "no se puede usar formato JSON con tipos de salida que no son string" -#: parser/parse_expr.c:3367 +#: parser/parse_expr.c:3473 #, c-format msgid "cannot set JSON encoding for non-bytea output types" -msgstr "" +msgstr "no se puede definir codificación JSON para tipos de salida que no sea bytea" -#: parser/parse_expr.c:3372 -#, fuzzy, c-format -#| msgid "unsupported format code: %d" +#: parser/parse_expr.c:3478 +#, c-format msgid "unsupported JSON encoding" -msgstr "código de formato no soportado: %d" +msgstr "codificación JSON no soportada" -#: parser/parse_expr.c:3373 +#: parser/parse_expr.c:3479 #, c-format msgid "Only UTF8 JSON encoding is supported." -msgstr "" +msgstr "Sólo la codificación JSON UTF8 está soportada." -#: parser/parse_expr.c:3410 -#, fuzzy, c-format -#| msgid "return type %s is not supported for SQL functions" +#: parser/parse_expr.c:3516 +#, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" -msgstr "el tipo de retorno %s no es soportado en funciones SQL" +msgstr "retornar tipos SETOF no está soportado en funciones SQL/JSON" + +#: parser/parse_expr.c:3521 +#, c-format +msgid "returning pseudo-types is not supported in SQL/JSON functions" +msgstr "retornar pseudo-tipos no está soportado en funciones SQL/JSON" -#: parser/parse_expr.c:3711 parser/parse_func.c:865 +#: parser/parse_expr.c:3849 parser/parse_func.c:866 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "el ORDER BY de funciones de agregación no está implementado para funciones de ventana deslizante" -#: parser/parse_expr.c:3930 +#: parser/parse_expr.c:4072 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" -msgstr "" +msgstr "no se puede usar la cláusula FORMAT ENCODING de JSON para tipos de entrada que no son bytea" -#: parser/parse_expr.c:3950 -#, fuzzy, c-format -#| msgid "cannot use subquery in index predicate" +#: parser/parse_expr.c:4092 +#, c-format msgid "cannot use type %s in IS JSON predicate" -msgstr "no se puede usar una subconsulta en un predicado de índice" +msgstr "no se puede tipo %s en predicado IS JSON" + +#: parser/parse_expr.c:4118 parser/parse_expr.c:4239 +#, c-format +#| msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" +msgid "cannot use type %s in RETURNING clause of %s" +msgstr "no se puede usar el tipo %s en la cláusula RETURNING de %s" + +#: parser/parse_expr.c:4120 +#, c-format +#| msgid "Try returning a string type or bytea." +msgid "Try returning json or jsonb." +msgstr "Intente retornando tipo json o jsonb." + +#: parser/parse_expr.c:4168 +#, c-format +msgid "cannot use non-string types with WITH UNIQUE KEYS clause" +msgstr "no se puede usar tipos que no sean strings con cláusula WITH UNIQUE KEYS" + +#: parser/parse_expr.c:4242 +#, c-format +msgid "Try returning a string type or bytea." +msgstr "Intente retornando un tipo de string o bytea." + +#: parser/parse_expr.c:4307 +#, c-format +msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" +msgstr "no se puede especificar FORMAT JSON en la cláusula RETURNING de %s()" + +#: parser/parse_expr.c:4320 +#, c-format +msgid "SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" +msgstr "el comportamiento QUOTES de SQL/JSON no debe ser especificado cuando se usa WITH WRAPPER" + +#. 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 "especificación %s no válida" + +#. 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 "Sólo ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT o expresión DEFAULT se permite en %s para %s." + +#. 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 "comportamiento %s no válido para la columna «%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 "Sólo ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT o expresión DEFAULT se permite en %s para columnas con formato." + +#: parser/parse_expr.c:4395 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for %s." +msgstr "Sólo ERROR, TRUE, FALSE o UNKNOWN están permitidos en %s para %s." + +#. 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 "Sólo ERROR, TRUE, FALSE o UNKNOWN están permitidos en %s para columnas EXISTS." + +#. 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 "Sólo ERROR, NULL o expresión DEFAULT se permite en %s para %s." + +#. 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 "Sólo ERROR, NULL o expresión DEFAULT se permite en %s para columnas escalares." + +#: parser/parse_expr.c:4489 +#, c-format +msgid "JSON path expression must be of type %s, not of type %s" +msgstr "la expresión de ruta JSON debe ser de tipo %s, no tipo %s" + +#: parser/parse_expr.c:4707 +#, c-format +msgid "can only specify a constant, non-aggregate function, or operator expression for DEFAULT" +msgstr "sólo se puede especificar constantes, funciones no de agregación, o expresión de operador para DEFAULT" + +#: parser/parse_expr.c:4712 +#, c-format +msgid "DEFAULT expression must not contain column references" +msgstr "las expresiones DEFAULT no pueden contener referencias a columnas" + +#: parser/parse_expr.c:4717 +#, c-format +msgid "DEFAULT expression must not return a set" +msgstr "las expresiones DEFAULT no deben retornar un conjunto" + +#: parser/parse_expr.c:4793 parser/parse_expr.c:4802 +#, c-format +msgid "cannot cast behavior expression of type %s to %s" +msgstr "no se puede convertir la expresión de tipo %s a %s" + +#: parser/parse_expr.c:4796 +#, c-format +msgid "You will need to explicitly cast the expression to type %s." +msgstr "Necesitará aplicar una conversión de la expresión a tipo %s." #: parser/parse_func.c:194 #, c-format @@ -17631,7 +18014,7 @@ msgstr "nombre de argumento «%s» especificado más de una vez" msgid "positional argument cannot follow named argument" msgstr "un argumento posicional no puede seguir a un argumento con nombre" -#: parser/parse_func.c:287 parser/parse_func.c:2367 +#: parser/parse_func.c:287 parser/parse_func.c:2368 #, c-format msgid "%s is not a procedure" msgstr "%s no es un procedimiento" @@ -17750,7 +18133,7 @@ msgstr "No se pudo escoger la función más adecuada. Puede ser necesario agrega msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Quizás puso ORDER BY en una mala posición; ORDER BY debe aparecer después de todos los argumentos normales de la función de agregación." -#: parser/parse_func.c:622 parser/parse_func.c:2410 +#: parser/parse_func.c:622 parser/parse_func.c:2411 #, c-format msgid "procedure %s does not exist" msgstr "no existe el procedimiento «%s»" @@ -17770,7 +18153,7 @@ msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Puede ser msgid "VARIADIC argument must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: parser/parse_func.c:791 parser/parse_func.c:855 +#: parser/parse_func.c:791 parser/parse_func.c:856 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) debe ser usado para invocar una función de agregación sin parámetros" @@ -17785,267 +18168,257 @@ msgstr "las funciones de agregación no pueden retornar conjuntos" msgid "aggregates cannot use named arguments" msgstr "las funciones de agregación no pueden usar argumentos con nombre" -#: parser/parse_func.c:845 +#: parser/parse_func.c:846 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:874 +#: parser/parse_func.c:875 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:883 +#: parser/parse_func.c:884 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "las llamadas a funciones de ventana no pueden contener llamadas a funciones que retornan conjuntos" -#: parser/parse_func.c:891 +#: parser/parse_func.c:892 #, c-format msgid "window functions cannot return sets" msgstr "las funciones de ventana deslizante no pueden retornar conjuntos" -#: parser/parse_func.c:2166 parser/parse_func.c:2439 +#: parser/parse_func.c:2167 parser/parse_func.c:2440 #, c-format msgid "could not find a function named \"%s\"" msgstr "no se pudo encontrar una función llamada «%s»" -#: parser/parse_func.c:2180 parser/parse_func.c:2457 +#: parser/parse_func.c:2181 parser/parse_func.c:2458 #, c-format msgid "function name \"%s\" is not unique" msgstr "el nombre de función «%s» no es único" -#: parser/parse_func.c:2182 parser/parse_func.c:2460 +#: parser/parse_func.c:2183 parser/parse_func.c:2461 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la función sin ambigüedad." -#: parser/parse_func.c:2226 +#: parser/parse_func.c:2227 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "los procedimientos no pueden tener más de %d argumento" msgstr[1] "los procedimientos no pueden tener más de %d argumentos" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2358 #, c-format msgid "%s is not a function" msgstr "«%s» no es una función" -#: parser/parse_func.c:2377 +#: parser/parse_func.c:2378 #, c-format msgid "function %s is not an aggregate" msgstr "la función %s no es una función de agregación" -#: parser/parse_func.c:2405 +#: parser/parse_func.c:2406 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "no se pudo encontrar un procedimiento llamado «%s»" -#: parser/parse_func.c:2419 +#: parser/parse_func.c:2420 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "no se pudo encontrar una función de agregación llamada «%s»" -#: parser/parse_func.c:2424 +#: parser/parse_func.c:2425 #, c-format msgid "aggregate %s(*) does not exist" msgstr "no existe la función de agregación %s(*)" -#: parser/parse_func.c:2429 +#: parser/parse_func.c:2430 #, c-format msgid "aggregate %s does not exist" msgstr "no existe la función de agregación %s" -#: parser/parse_func.c:2465 +#: parser/parse_func.c:2466 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "el nombre de procedimiento «%s» no es única" -#: parser/parse_func.c:2468 +#: parser/parse_func.c:2469 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Especifique la lista de argumentos para seleccionar el procedimiento sin ambigüedad." -#: parser/parse_func.c:2473 +#: parser/parse_func.c:2474 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "el atributo de la función de agregación «%s» no es único" -#: parser/parse_func.c:2476 +#: parser/parse_func.c:2477 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la función de agregación sin ambigüedad." -#: parser/parse_func.c:2481 +#: parser/parse_func.c:2482 #, c-format msgid "routine name \"%s\" is not unique" msgstr "el nombre de rutina «%s» no es único" -#: parser/parse_func.c:2484 +#: parser/parse_func.c:2485 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la rutina sin ambigüedad." -#: parser/parse_func.c:2539 +#: parser/parse_func.c:2540 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "no se permiten funciones que retornan conjuntos en condiciones JOIN" -#: parser/parse_func.c:2560 +#: parser/parse_func.c:2561 msgid "set-returning functions are not allowed in policy expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de política" -#: parser/parse_func.c:2576 +#: parser/parse_func.c:2577 msgid "set-returning functions are not allowed in window definitions" msgstr "no se permiten funciones que retornan conjuntos definiciones de ventana deslizante" -#: parser/parse_func.c:2613 -#, fuzzy -#| msgid "set-returning functions are not allowed in trigger WHEN conditions" +#: parser/parse_func.c:2615 msgid "set-returning functions are not allowed in MERGE WHEN conditions" -msgstr "no se permiten funciones que retornan conjuntos en condiciones WHEN de un disparador" +msgstr "no se permiten funciones que retornan conjuntos en condiciones MERGE WHEN" -#: parser/parse_func.c:2617 +#: parser/parse_func.c:2619 msgid "set-returning functions are not allowed in check constraints" msgstr "no se permiten funciones de que retornan conjuntos en restricciones «check»" -#: parser/parse_func.c:2621 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones DEFAULT" -#: parser/parse_func.c:2624 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de índice" -#: parser/parse_func.c:2627 +#: parser/parse_func.c:2629 msgid "set-returning functions are not allowed in index predicates" msgstr "no se permiten funciones que retornan conjuntos en predicados de índice" -#: parser/parse_func.c:2630 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in statistics expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de estadísticas" -#: parser/parse_func.c:2633 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in transform expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de transformación" -#: parser/parse_func.c:2636 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones que retornan conjuntos en parámetros a EXECUTE" -#: parser/parse_func.c:2639 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in trigger WHEN conditions" -msgstr "no se permiten funciones que retornan conjuntos en condiciones WHEN de un disparador" +msgstr "no se permiten funciones que retornan conjuntos en condiciones WHEN de un “trigger”" -#: parser/parse_func.c:2642 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition bound" msgstr "no se permiten funciones que retornan conjuntos en bordes de partición" -#: parser/parse_func.c:2645 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in partition key expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de llave de particionamiento" -#: parser/parse_func.c:2648 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in CALL arguments" msgstr "no se permiten funciones que retornan conjuntos en argumentos de CALL" -#: parser/parse_func.c:2651 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones que retornan conjuntos en las condiciones WHERE de COPY FROM" -#: parser/parse_func.c:2654 +#: parser/parse_func.c:2656 msgid "set-returning functions are not allowed in column generation expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de generación de columna" -#: parser/parse_merge.c:119 -#, fuzzy, c-format -#| msgid "WHERE CURRENT OF is not supported for this table type" +#: parser/parse_jsontable.c:95 +#, c-format +msgid "Only EMPTY [ ARRAY ] or ERROR is allowed in the top-level ON ERROR clause." +msgstr "Sólo EMPTY [ ARRAY ] o ERROR son permitidos en la cláusula ON ERROR de nivel superior." + +#: parser/parse_jsontable.c:189 parser/parse_jsontable.c:203 +#, c-format +msgid "duplicate JSON_TABLE column or path name: %s" +msgstr "nombre de columna o de “path” duplicada en JSON_TABLE: %s" + +#: parser/parse_merge.c:129 +#, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" -msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" +msgstr "WITH RECURSIVE no está soportado para la sentencia MERGE" -#: parser/parse_merge.c:161 +#: parser/parse_merge.c:176 #, c-format msgid "unreachable WHEN clause specified after unconditional WHEN clause" msgstr "se especificó una cláusula WHEN no alcanzable después de una cláusula WHEN incondicional" -#: parser/parse_merge.c:191 -#, fuzzy, c-format -#| msgid "LIKE is not supported for creating foreign tables" -msgid "MERGE is not supported for relations with rules." -msgstr "LIKE no está soportado para la creación de tablas foráneas" - -#: parser/parse_merge.c:208 +#: parser/parse_merge.c:222 #, c-format msgid "name \"%s\" specified more than once" msgstr "el nombre «%s» fue especificado más de una vez" -#: parser/parse_merge.c:210 +#: parser/parse_merge.c:224 #, c-format msgid "The name is used both as MERGE target table and data source." msgstr "El nombre es usado tanto como tabla de destino de MERGE como como tabla de origen." -#: parser/parse_node.c:87 +#: parser/parse_node.c:82 #, c-format msgid "target lists can have at most %d entries" msgstr "las listas de resultados pueden tener a lo más %d entradas" -#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#: parser/parse_oper.c:114 parser/parse_oper.c:678 #, c-format msgid "postfix operators are not supported" msgstr "los operadores postfix no están soportados" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:509 -#: utils/adt/regproc.c:683 -#, c-format -msgid "operator does not exist: %s" -msgstr "el operador no existe: %s" - -#: parser/parse_oper.c:229 +#: parser/parse_oper.c:217 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Use un operador de ordenamiento explícito o modifique la consulta." -#: parser/parse_oper.c:485 +#: parser/parse_oper.c:473 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "el operador requiere conversión explícita de tipos: %s" -#: parser/parse_oper.c:641 +#: parser/parse_oper.c:629 #, c-format msgid "operator is not unique: %s" msgstr "el operador no es único: %s" -#: parser/parse_oper.c:643 +#: parser/parse_oper.c:631 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "No se pudo escoger el operador más adecuado. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_oper.c:652 +#: parser/parse_oper.c:640 #, c-format msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." msgstr "Ningún operador coincide en el nombre y tipo de argumento. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_oper.c:654 +#: parser/parse_oper.c:642 #, c-format msgid "No operator matches the given name and argument types. You might need to add explicit type casts." msgstr "Ningún operador coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_oper.c:714 parser/parse_oper.c:828 -#, c-format -msgid "operator is only a shell: %s" -msgstr "el operador está inconcluso: %s" - -#: parser/parse_oper.c:816 +#: parser/parse_oper.c:803 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) requiere un array al lado derecho" -#: parser/parse_oper.c:858 +#: parser/parse_oper.c:844 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) requiere un operador que entregue boolean" -#: parser/parse_oper.c:863 +#: parser/parse_oper.c:849 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) requiere un operador que no retorne un conjunto" @@ -18055,7 +18428,7 @@ msgstr "op ANY/ALL (array) requiere un operador que no retorne un conjunto" msgid "inconsistent types deduced for parameter $%d" msgstr "para el parámetro $%d se dedujeron tipos de dato inconsistentes" -#: 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 "no se pudo determinar el tipo del parámetro $%d" @@ -18075,13 +18448,13 @@ msgstr "la referencia a la tabla %u es ambigua" msgid "table name \"%s\" specified more than once" msgstr "el nombre de tabla «%s» fue especificado más de una vez" -#: parser/parse_relation.c:494 parser/parse_relation.c:3629 -#: parser/parse_relation.c:3638 +#: parser/parse_relation.c:494 parser/parse_relation.c:3633 +#: parser/parse_relation.c:3642 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "referencia a la entrada de la cláusula FROM para la tabla «%s» no válida" -#: parser/parse_relation.c:498 parser/parse_relation.c:3640 +#: parser/parse_relation.c:498 parser/parse_relation.c:3644 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay una entrada para la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." @@ -18102,23 +18475,22 @@ msgid "cannot use system column \"%s\" in column generation expression" msgstr "no se puede usar la columna de sistema «%s» en una expresión de generación de columna" #: parser/parse_relation.c:723 -#, fuzzy, c-format -#| msgid "cannot use system column \"%s\" in partition key" +#, c-format msgid "cannot use system column \"%s\" in MERGE WHEN condition" -msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" +msgstr "no se puede usar la columna de sistema «%s» en condición MERGE WHEN" -#: parser/parse_relation.c:1236 parser/parse_relation.c:1690 -#: parser/parse_relation.c:2387 +#: parser/parse_relation.c:1236 parser/parse_relation.c:1691 +#: parser/parse_relation.c:2384 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "la tabla «%s» tiene %d columnas pero se especificaron %d" -#: parser/parse_relation.c:1444 +#: parser/parse_relation.c:1445 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay un elemento WITH llamado «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:1446 +#: parser/parse_relation.c:1447 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Use WITH RECURSIVE, o reordene los elementos de WITH para eliminar referencias hacia adelante." @@ -18144,141 +18516,136 @@ msgid "a column definition list is required for functions returning \"record\"" msgstr "la lista de definición de columnas es obligatoria para funciones que retornan «record»" #: parser/parse_relation.c:1894 -#, fuzzy, c-format -#| msgid "target lists can have at most %d entries" +#, c-format msgid "column definition lists can have at most %d entries" -msgstr "las listas de resultados pueden tener a lo más %d entradas" +msgstr "las listas de definición de columnas pueden tener a lo más %d entradas" #: parser/parse_relation.c:1954 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "la función «%s» en FROM tiene el tipo de retorno no soportado %s" -#: parser/parse_relation.c:1981 parser/parse_relation.c:2067 -#, fuzzy, c-format -#| msgid "joins can have at most %d columns" +#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 +#, c-format msgid "functions in FROM can return at most %d columns" -msgstr "los joins pueden tener a lo más %d columnas" +msgstr "las funciones en FROM pueden tener a lo más %d columnas" -#: parser/parse_relation.c:2097 -#, fuzzy, c-format -#| msgid "table \"%s\" has %d columns available but %d columns specified" +#: parser/parse_relation.c:2096 +#, c-format msgid "%s function has %d columns available but %d columns specified" -msgstr "la tabla «%s» tiene %d columnas pero se especificaron %d" +msgstr "la función %s tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_relation.c:2179 +#: parser/parse_relation.c:2177 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "la lista VALUES «%s» tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_relation.c:2245 +#: parser/parse_relation.c:2242 #, c-format msgid "joins can have at most %d columns" msgstr "los joins pueden tener a lo más %d columnas" -#: parser/parse_relation.c:2270 -#, fuzzy, c-format -#| msgid "table \"%s\" has %d columns available but %d columns specified" +#: parser/parse_relation.c:2267 +#, c-format msgid "join expression \"%s\" has %d columns available but %d columns specified" -msgstr "la tabla «%s» tiene %d columnas pero se especificaron %d" +msgstr "la expresión de join «%s» tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_relation.c:2360 +#: parser/parse_relation.c:2357 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "la consulta WITH «%s» no tiene una cláusula RETURNING" -#: parser/parse_relation.c:3631 +#: parser/parse_relation.c:3635 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Probablemente quiera hacer referencia al alias de la tabla «%s»." -#: parser/parse_relation.c:3643 +#: parser/parse_relation.c:3647 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." -msgstr "" +msgstr "Para hacer referencia a esa tabla, debe marcar esta subconsulta con LATERAL." -#: parser/parse_relation.c:3649 +#: parser/parse_relation.c:3653 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "falta una entrada para la tabla «%s» en la cláusula FROM" -#: parser/parse_relation.c:3689 -#, fuzzy, c-format -#| msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." +#: parser/parse_relation.c:3693 +#, c-format msgid "There are columns named \"%s\", but they are in tables that cannot be referenced from this part of the query." -msgstr "Hay una columna llamada «%s» en la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." +msgstr "Hay columnas llamadas «%s», pero están en tablas que no pueden ser referenciadas desde esta parte de la consulta." -#: parser/parse_relation.c:3691 +#: parser/parse_relation.c:3695 #, c-format msgid "Try using a table-qualified name." -msgstr "" +msgstr "Intente usar un nombre calificado con nombre de tabla." -#: parser/parse_relation.c:3699 +#: parser/parse_relation.c:3703 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay una columna llamada «%s» en la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:3702 +#: parser/parse_relation.c:3706 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." -msgstr "" +msgstr "Para hacer referencia a esa columna, debe marcar esta subconsulta con LATERAL." -#: parser/parse_relation.c:3704 +#: parser/parse_relation.c:3708 #, c-format msgid "To reference that column, you must use a table-qualified name." -msgstr "" +msgstr "Para hacer referencia a esa columna, debe usar un nombre calificado con nombre de tabla." -#: parser/parse_relation.c:3724 +#: parser/parse_relation.c:3728 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Probablemente quiera hacer referencia a la columna «%s.%s»." -#: parser/parse_relation.c:3738 +#: parser/parse_relation.c:3742 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Probablemente quiera hacer referencia a la columna «%s.%s» o la columna «%s.%s»." -#: parser/parse_target.c:481 parser/parse_target.c:796 +#: parser/parse_target.c:480 parser/parse_target.c:795 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "no se puede asignar a la columna de sistema «%s»" -#: parser/parse_target.c:509 +#: parser/parse_target.c:508 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "no se puede definir un elemento de array a DEFAULT" -#: parser/parse_target.c:514 +#: parser/parse_target.c:513 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "no se puede definir un subcampo a DEFAULT" -#: parser/parse_target.c:588 +#: parser/parse_target.c:587 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "la columna «%s» es de tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:780 +#: parser/parse_target.c:779 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "no se puede asignar al campo «%s» de la columna «%s» porque su tipo %s no es un tipo compuesto" -#: parser/parse_target.c:789 +#: parser/parse_target.c:788 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "no se puede asignar al campo «%s» de la columna «%s» porque no existe esa columna en el tipo de dato %s" -#: parser/parse_target.c:869 +#: parser/parse_target.c:877 #, c-format msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "la asignación subindexada a «%s» requiere tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:879 +#: parser/parse_target.c:887 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "el subcampo «%s» es de tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:1314 +#: parser/parse_target.c:1327 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * sin especificar tablas no es válido" @@ -18298,8 +18665,8 @@ msgstr "la referencia a %%TYPE es inapropiada (demasiados nombres con punto): %s msgid "type reference %s converted to %s" msgstr "la referencia al tipo %s convertida a %s" -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:390 -#: utils/cache/typcache.c:445 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 +#: utils/cache/typcache.c:452 #, c-format msgid "type \"%s\" is only a shell" msgstr "el tipo «%s» está inconcluso" @@ -18319,336 +18686,330 @@ msgstr "los modificadores de tipo deben ser constantes simples o identificadores msgid "invalid type name \"%s\"" msgstr "el nombre de tipo «%s» no es válido" -#: parser/parse_utilcmd.c:264 +#: parser/parse_utilcmd.c:263 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "no se puede crear una tabla particionada como hija de herencia" -#: parser/parse_utilcmd.c:580 +#: parser/parse_utilcmd.c:475 +#, c-format +msgid "cannot set logged status of a temporary sequence" +msgstr "no se puede cambiar el estado «logged» de una secuencia temporal" + +#: parser/parse_utilcmd.c:611 #, c-format msgid "array of serial is not implemented" msgstr "array de serial no está implementado" -#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 -#: parser/parse_utilcmd.c:730 +#: 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 "las declaraciones NULL/NOT NULL no son coincidentes para la columna «%s» de la tabla «%s»" -#: parser/parse_utilcmd.c:683 +#: parser/parse_utilcmd.c:714 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "múltiples valores default especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:731 #, c-format msgid "identity columns are not supported on typed tables" msgstr "las columnas identidad no está soportadas en tablas tipadas" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:735 #, c-format msgid "identity columns are not supported on partitions" msgstr "las columnas identidad no están soportadas en particiones" -#: parser/parse_utilcmd.c:713 +#: parser/parse_utilcmd.c:744 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "múltiples especificaciones de identidad para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:743 +#: parser/parse_utilcmd.c:774 #, c-format msgid "generated columns are not supported on typed tables" msgstr "las columnas generadas no están soportadas en tablas tipadas" -#: parser/parse_utilcmd.c:747 +#: parser/parse_utilcmd.c:778 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "múltiples cláusulas de generación especificadas para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:765 parser/parse_utilcmd.c:880 +#: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:911 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "las restricciones de llave primaria no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:774 parser/parse_utilcmd.c:890 +#: parser/parse_utilcmd.c:805 parser/parse_utilcmd.c:921 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "las restricciones unique no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:819 +#: parser/parse_utilcmd.c:850 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "tanto el valor por omisión como identidad especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:827 +#: parser/parse_utilcmd.c:858 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "tanto el valor por omisión como expresión de generación especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:835 +#: parser/parse_utilcmd.c:866 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "tanto identidad como expresión de generación especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:900 +#: parser/parse_utilcmd.c:931 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "las restricciones de exclusión no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:906 -#, c-format -msgid "exclusion constraints are not supported on partitioned tables" -msgstr "las restricciones de exclusión no están soportadas en tablas particionadas" - -#: parser/parse_utilcmd.c:971 +#: parser/parse_utilcmd.c:996 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE no está soportado para la creación de tablas foráneas" -#: parser/parse_utilcmd.c:984 -#, fuzzy, c-format -#| msgid "relation \"%s\" in %s clause not found in FROM clause" +#: parser/parse_utilcmd.c:1009 +#, c-format msgid "relation \"%s\" is invalid in LIKE clause" -msgstr "la relación «%s» en la cláusula %s no fue encontrada en la cláusula FROM" +msgstr "la relación «%s» no es válida en cláusula LIKE" -#: parser/parse_utilcmd.c:1741 parser/parse_utilcmd.c:1849 +#: parser/parse_utilcmd.c:1736 parser/parse_utilcmd.c:1844 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "El índice «%s» contiene una referencia a la fila completa (whole-row)." -#: parser/parse_utilcmd.c:2236 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "no se puede usar un índice existente en CREATE TABLE" -#: parser/parse_utilcmd.c:2256 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "el índice «%s» ya está asociado a una restricción" -#: parser/parse_utilcmd.c:2271 -#, c-format -msgid "index \"%s\" is not valid" -msgstr "el índice «%s» no es válido" - -#: parser/parse_utilcmd.c:2277 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "\"%s\" is not a unique index" msgstr "«%s» no es un índice único" -#: parser/parse_utilcmd.c:2278 parser/parse_utilcmd.c:2285 -#: parser/parse_utilcmd.c:2292 parser/parse_utilcmd.c:2369 +#: 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 "No se puede crear una restricción de llave primaria o única usando un índice así." -#: parser/parse_utilcmd.c:2284 +#: parser/parse_utilcmd.c:2290 #, c-format msgid "index \"%s\" contains expressions" msgstr "el índice «%s» contiene expresiones" -#: parser/parse_utilcmd.c:2291 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is a partial index" msgstr "«%s» es un índice parcial" -#: parser/parse_utilcmd.c:2303 +#: parser/parse_utilcmd.c:2309 #, c-format msgid "\"%s\" is a deferrable index" msgstr "«%s» no es un índice postergable (deferrable)" -#: parser/parse_utilcmd.c:2304 +#: parser/parse_utilcmd.c:2310 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "No se puede crear una restricción no postergable usando un índice postergable." -#: parser/parse_utilcmd.c:2368 +#: parser/parse_utilcmd.c:2374 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "el índice «%s» columna número %d no tiene comportamiento de ordenamiento por omisión" -#: parser/parse_utilcmd.c:2525 +#: parser/parse_utilcmd.c:2531 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la columna «%s» aparece dos veces en llave primaria" -#: parser/parse_utilcmd.c:2531 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la columna «%s» aparece dos veces en restricción unique" -#: parser/parse_utilcmd.c:2878 +#: parser/parse_utilcmd.c:2871 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "las expresiones y predicados de índice sólo pueden referirse a la tabla en indexación" -#: parser/parse_utilcmd.c:2950 +#: parser/parse_utilcmd.c:2943 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "las expresiones estadísticas sólo pueden referirse a la tabla que está siendo referida" -#: parser/parse_utilcmd.c:2993 +#: parser/parse_utilcmd.c:2986 #, c-format msgid "rules on materialized views are not supported" msgstr "las reglas en vistas materializadas no están soportadas" -#: parser/parse_utilcmd.c:3053 +#: parser/parse_utilcmd.c:3046 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "la condición WHERE de la regla no puede contener referencias a otras relaciones" -#: parser/parse_utilcmd.c:3125 +#: parser/parse_utilcmd.c:3118 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "las reglas con condiciones WHERE sólo pueden tener acciones SELECT, INSERT, UPDATE o DELETE" -#: parser/parse_utilcmd.c:3143 parser/parse_utilcmd.c:3244 -#: rewrite/rewriteHandler.c:537 rewrite/rewriteManip.c:1082 +#: 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 "las sentencias UNION/INTERSECT/EXCEPT condicionales no están implementadas" -#: parser/parse_utilcmd.c:3161 +#: parser/parse_utilcmd.c:3154 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "una regla ON SELECT no puede usar OLD" -#: parser/parse_utilcmd.c:3165 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "una regla ON SELECT no puede usar NEW" -#: parser/parse_utilcmd.c:3174 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "una regla ON INSERT no puede usar OLD" -#: parser/parse_utilcmd.c:3180 +#: parser/parse_utilcmd.c:3173 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "una regla ON DELETE no puede usar NEW" -#: parser/parse_utilcmd.c:3208 +#: parser/parse_utilcmd.c:3201 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "no se puede hacer referencia a OLD dentro de una consulta WITH" -#: parser/parse_utilcmd.c:3215 +#: parser/parse_utilcmd.c:3208 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "no se puede hacer referencia a NEW dentro de una consulta WITH" -#: parser/parse_utilcmd.c:3667 +#: parser/parse_utilcmd.c:3664 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "cláusula DEFERRABLE mal puesta" -#: parser/parse_utilcmd.c:3672 parser/parse_utilcmd.c:3687 +#: parser/parse_utilcmd.c:3669 parser/parse_utilcmd.c:3684 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "no se permiten múltiples cláusulas DEFERRABLE/NOT DEFERRABLE" -#: parser/parse_utilcmd.c:3682 +#: parser/parse_utilcmd.c:3679 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "la cláusula NOT DEFERRABLE está mal puesta" -#: parser/parse_utilcmd.c:3695 parser/parse_utilcmd.c:3721 gram.y:5993 +#: parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 gram.y:6114 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "una restricción declarada INITIALLY DEFERRED debe ser DEFERRABLE" -#: parser/parse_utilcmd.c:3703 +#: parser/parse_utilcmd.c:3700 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "la cláusula INITIALLY DEFERRED está mal puesta" -#: parser/parse_utilcmd.c:3708 parser/parse_utilcmd.c:3734 +#: parser/parse_utilcmd.c:3705 parser/parse_utilcmd.c:3731 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "no se permiten múltiples cláusulas INITIALLY IMMEDIATE/DEFERRED" -#: parser/parse_utilcmd.c:3729 +#: parser/parse_utilcmd.c:3726 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "la cláusula INITIALLY IMMEDIATE está mal puesta" -#: parser/parse_utilcmd.c:3922 +#: parser/parse_utilcmd.c:3919 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE especifica un esquema (%s) diferente del que se está creando (%s)" -#: parser/parse_utilcmd.c:3957 +#: parser/parse_utilcmd.c:3954 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "«%s» no es una tabla particionada" -#: parser/parse_utilcmd.c:3964 +#: parser/parse_utilcmd.c:3961 #, c-format msgid "table \"%s\" is not partitioned" -msgstr "«la tabla %s» no está particionada" +msgstr "la tabla «%s» no está particionada" -#: parser/parse_utilcmd.c:3971 +#: parser/parse_utilcmd.c:3968 #, c-format msgid "index \"%s\" is not partitioned" msgstr "el índice «%s» no está particionado" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "una tabla particionada por hash no puede tener una partición default" -#: parser/parse_utilcmd.c:4028 +#: parser/parse_utilcmd.c:4025 #, c-format msgid "invalid bound specification for a hash partition" msgstr "especificación de borde no válida para partición de hash" -#: parser/parse_utilcmd.c:4034 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 "el módulo para una partición hash debe ser un valor entero mayor que cero" -#: parser/parse_utilcmd.c:4041 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 "remanente en partición hash debe ser menor que el módulo" -#: parser/parse_utilcmd.c:4054 +#: parser/parse_utilcmd.c:4051 #, c-format msgid "invalid bound specification for a list partition" msgstr "especificación de borde no válida para partición de lista" -#: parser/parse_utilcmd.c:4107 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "invalid bound specification for a range partition" msgstr "especificación de borde no válida para partición de rango" -#: parser/parse_utilcmd.c:4113 +#: parser/parse_utilcmd.c:4110 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM debe especificar exactamente un valor por cada columna de particionado" -#: parser/parse_utilcmd.c:4117 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO debe especificar exactamente un valor por cada columna de particionado" -#: parser/parse_utilcmd.c:4231 +#: parser/parse_utilcmd.c:4228 #, c-format msgid "cannot specify NULL in range bound" msgstr "no se puede especificar NULL en borde de rango" -#: parser/parse_utilcmd.c:4280 +#: parser/parse_utilcmd.c:4277 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "cada borde que sigue a un MAXVALUE debe ser también MAXVALUE" -#: parser/parse_utilcmd.c:4287 +#: parser/parse_utilcmd.c:4284 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "cada borde que siga a un MINVALUE debe ser también MINVALUE" -#: parser/parse_utilcmd.c:4330 +#: parser/parse_utilcmd.c:4327 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "el valor especificado no puede ser convertido al tipo %s para la columna «%s»" @@ -18661,12 +19022,12 @@ msgstr "UESCAPE debe ser seguido por un literal de cadena simple" msgid "invalid Unicode escape character" msgstr "carácter de escape Unicode no válido" -#: parser/parser.c:347 scan.l:1390 +#: parser/parser.c:347 scan.l:1393 #, c-format msgid "invalid Unicode escape value" msgstr "valor de escape Unicode no válido" -#: parser/parser.c:494 utils/adt/varlena.c:6505 scan.l:701 +#: parser/parser.c:494 utils/adt/varlena.c:6640 scan.l:716 #, c-format msgid "invalid Unicode escape" msgstr "valor de escape Unicode no válido" @@ -18676,8 +19037,8 @@ msgstr "valor de escape Unicode no válido" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Los escapes Unicode deben ser \\XXXX o \\+XXXXXX." -#: parser/parser.c:523 utils/adt/varlena.c:6530 scan.l:662 scan.l:678 -#: scan.l:694 +#: parser/parser.c:523 utils/adt/varlena.c:6665 scan.l:677 scan.l:693 +#: scan.l:709 #, c-format msgid "invalid Unicode surrogate pair" msgstr "par sustituto (surrogate) Unicode no válido" @@ -18687,89 +19048,89 @@ msgstr "par sustituto (surrogate) Unicode no válido" msgid "identifier \"%s\" will be truncated to \"%.*s\"" msgstr "el identificador «%s» se truncará a «%.*s»" -#: partitioning/partbounds.c:2921 +#: partitioning/partbounds.c:2920 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "la partición «%s» está en conflicto con la partición default «%s» existente" -#: partitioning/partbounds.c:2973 partitioning/partbounds.c:2992 -#: partitioning/partbounds.c:3014 +#: partitioning/partbounds.c:2972 partitioning/partbounds.c:2991 +#: partitioning/partbounds.c:3013 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "cada módulo de partición hash debe ser un factor del próximo mayor módulo" -#: partitioning/partbounds.c:2974 partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:2973 partitioning/partbounds.c:3014 #, c-format msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." msgstr "El nuevo módulo %d no es un factor de %d, el módulo de la partición existente «%s»." -#: partitioning/partbounds.c:2993 +#: partitioning/partbounds.c:2992 #, c-format msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "El nuevo módulo %d no es divisible para %d, el módulo de la partición existente «%s»." -#: partitioning/partbounds.c:3128 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "borde de rango vació especificado para la partición «%s»" -#: partitioning/partbounds.c:3130 +#: partitioning/partbounds.c:3129 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "El límite inferior %s especificado es mayor o igual al límite superior %s." -#: partitioning/partbounds.c:3238 +#: partitioning/partbounds.c:3237 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "la partición «%s» traslaparía con la partición «%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 "se omitió recorrer la tabla foránea «%s» que es una partición de la partición default «%s»" -#: 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 "remanente en partición hash debe ser un valor entero mayor que o igual a cero" -#: partitioning/partbounds.c:4831 +#: partitioning/partbounds.c:4830 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "«%s» es una tabla particionada por hash" -#: 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 "el número de columnas de particionamiento (%d) no coincide con el número de llaves de particionamiento provistas (%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 "la columna %d de la llave de particionamiento tiene tipo «%s», pero el valor dado es de tipo «%s»" -#: 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 "la columna %d de la llave de particionamiento tiene tipo «%s», pero el valor dado es de tipo «%s»" -#: port/pg_sema.c:209 port/pg_shmem.c:708 port/posix_sema.c:209 -#: port/sysv_sema.c:323 port/sysv_shmem.c:708 +#: 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 "no se pudo hacer stat al directorio de datos «%s»: %m" -#: port/pg_shmem.c:223 port/sysv_shmem.c:223 +#: port/pg_shmem.c:224 port/sysv_shmem.c:224 #, c-format msgid "could not create shared memory segment: %m" msgstr "no se pudo crear el segmento de memoria compartida: %m" -#: port/pg_shmem.c:224 port/sysv_shmem.c:224 +#: port/pg_shmem.c:225 port/sysv_shmem.c:225 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "La llamada a sistema fallida fue shmget(key=%lu, size=%zu, 0%o)." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" @@ -18778,7 +19139,7 @@ msgstr "" "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedió el parámetro SHMMAX del kernel, o posiblemente que es menor que el parámetro SHMMIN del kernel.\n" "La documentación de PostgreSQL contiene más información acerca de la configuración de memoria compartida." -#: port/pg_shmem.c:235 port/sysv_shmem.c:235 +#: port/pg_shmem.c:236 port/sysv_shmem.c:236 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" @@ -18787,7 +19148,7 @@ msgstr "" "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedió el parámetro SHMALL del kernel. Puede ser necesario reconfigurar el kernel con un SHMALL mayor.\n" "La documentación de PostgreSQL contiene más información acerca de la configuración de memoria compartida." -#: port/pg_shmem.c:241 port/sysv_shmem.c:241 +#: port/pg_shmem.c:242 port/sysv_shmem.c:242 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" @@ -18796,62 +19157,62 @@ msgstr "" "Este error *no* significa que se haya quedado sin espacio en disco. Ocurre cuando se han usado todos los IDs de memoria compartida disponibles, en cuyo caso puede incrementar el parámetro SHMMNI del kernel, o bien porque se ha alcanzado el límite total de memoria compartida.\n" "La documentación de PostgreSQL contiene más información acerca de la configuración de memoria compartida." -#: port/pg_shmem.c:583 port/sysv_shmem.c:583 port/win32_shmem.c:641 +#: port/pg_shmem.c:584 port/sysv_shmem.c:584 port/win32_shmem.c:646 #, c-format -msgid "huge_page_size must be 0 on this platform." -msgstr "huge_page_size debe ser 0 en esta plataforma." +msgid "\"huge_page_size\" must be 0 on this platform." +msgstr "«huge_page_size» debe ser 0 en esta plataforma." -#: port/pg_shmem.c:646 port/sysv_shmem.c:646 +#: port/pg_shmem.c:655 port/sysv_shmem.c:655 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "no se pudo mapear memoria compartida anónima: %m" -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:657 port/sysv_shmem.c:657 #, c-format -msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." -msgstr "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedía la memoria disponible, el espacio de intercambio (swap), o las huge pages. Para reducir el tamaño de la petición (actualmente %zu bytes), reduzca el uso de memoria compartida de PostgreSQL, quizás reduciendo el parámetro shared_buffers o el parámetro max_connections." +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing \"shared_buffers\" or \"max_connections\"." +msgstr "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedía la memoria disponible, el espacio de intercambio (swap), o las huge pages. Para reducir el tamaño de la petición (actualmente %zu bytes), reduzca el uso de memoria compartida de PostgreSQL, quizás reduciendo el parámetro «shared_buffers» o el parámetro «max_connections»." -#: port/pg_shmem.c:716 port/sysv_shmem.c:716 +#: port/pg_shmem.c:725 port/sysv_shmem.c:725 #, c-format msgid "huge pages not supported on this platform" msgstr "las huge pages no están soportadas en esta plataforma" -#: port/pg_shmem.c:723 port/sysv_shmem.c:723 +#: port/pg_shmem.c:732 port/sysv_shmem.c:732 #, c-format -msgid "huge pages not supported with the current shared_memory_type setting" -msgstr "las huge pages no están soportadas con la configuración actual de shared_memory_type" +msgid "huge pages not supported with the current \"shared_memory_type\" setting" +msgstr "las huge pages no están soportadas con la configuración actual de «shared_memory_type»" -#: port/pg_shmem.c:783 port/sysv_shmem.c:783 utils/init/miscinit.c:1351 +#: 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 "el bloque de memoria compartida preexistente (clave %lu, ID %lu) aún está en uso" -#: port/pg_shmem.c:786 port/sysv_shmem.c:786 utils/init/miscinit.c:1353 +#: 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 "Termine cualquier proceso de servidor asociado al directorio de datos «%s»." -#: port/sysv_sema.c:120 +#: port/sysv_sema.c:126 #, c-format msgid "could not create semaphores: %m" msgstr "no se pudo crear semáforos: %m" -#: port/sysv_sema.c:121 +#: port/sysv_sema.c:127 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "La llamada a sistema fallida fue 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" +"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 "" "Este error *no* significa que se haya quedado sin espacio en disco.\n" -"Ocurre cuando se alcanza el límite del sistema del número de semáforos (SEMMNI), o bien cuando se excede el total de semáforos del sistema (SEMMNS).Necesita incrementar el parámetro respectivo del kernel. Alternativamente, reduzca el consumo de semáforos de PostgreSQL reduciendo el parámetro max_connections.\n" +"Ocurre cuando se alcanza el límite del sistema del número de semáforos (SEMMNI), o bien cuando se excede el total de semáforos del sistema (SEMMNS). Necesita incrementar el parámetro respectivo del kernel. Alternativamente, reduzca el consumo de semáforos de PostgreSQL reduciendo el parámetro «max_connections».\n" "La documentación de PostgreSQL contiene más información acerca de cómo configurar su sistema para PostgreSQL." -#: 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 "Probablemente necesita incrementar el valor SEMVMX del kernel hasta al menos %d. Examine la documentación de PostgreSQL para obtener más detalles." @@ -18976,1185 +19337,1079 @@ msgstr "La llamada a sistema fallida fue DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "La llamada a sistema fallida fue MapViewOfFileEx." -#: postmaster/autovacuum.c:417 -#, c-format -msgid "could not fork autovacuum launcher process: %m" -msgstr "no se pudo iniciar el lanzador autovacuum: %m" - -#: postmaster/autovacuum.c:764 +#: postmaster/autovacuum.c:686 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "proceso ayudante autovacuum tomó demasiado tiempo para iniciarse; cancelado" -#: postmaster/autovacuum.c:1489 -#, c-format -msgid "could not fork autovacuum worker process: %m" -msgstr "no se pudo lanzar el proceso «autovacuum worker»: %m" - -#: postmaster/autovacuum.c:2322 +#: postmaster/autovacuum.c:2203 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: eliminando tabla temporal huérfana «%s.%s.%s»" -#: postmaster/autovacuum.c:2558 +#: postmaster/autovacuum.c:2439 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "vacuum automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2561 +#: postmaster/autovacuum.c:2442 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "análisis automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2755 +#: postmaster/autovacuum.c:2636 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "procesando elemento de tarea de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:3369 +#: postmaster/autovacuum.c:3254 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum no fue iniciado debido a un error de configuración" -#: postmaster/autovacuum.c:3370 +#: postmaster/autovacuum.c:3255 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Active la opción «track_counts»." -#: postmaster/bgworker.c:259 +#: postmaster/bgworker.c:260 #, c-format msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" msgstr "estado inconsistente de proceso ayudante (max_worker_processes=%d, total_slots=%d)" -#: postmaster/bgworker.c:669 -#, fuzzy, c-format -#| msgid "background worker \"%s\": only dynamic background workers can request notification" +#: postmaster/bgworker.c:651 +#, c-format msgid "background worker \"%s\": background workers without shared memory access are not supported" -msgstr "proceso ayudante «%s»: sólo los ayudantes dinámicos pueden pedir notificaciones" +msgstr "proceso ayudante «%s»: los ayudantes sin acceso a memoria compartida no están soportdos" -#: postmaster/bgworker.c:680 +#: postmaster/bgworker.c:662 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "proceso ayudante «%s»: no se puede solicitar una conexión a base de datos si está iniciando en el momento de inicio de postmaster" -#: postmaster/bgworker.c:694 +#: postmaster/bgworker.c:676 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "proceso ayudante «%s»: intervalo de reinicio no válido" -#: postmaster/bgworker.c:709 +#: postmaster/bgworker.c:691 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "proceso ayudante «%s»: los ayudantes paralelos no pueden ser configurados «restart»" -#: postmaster/bgworker.c:733 tcop/postgres.c:3255 +#: postmaster/bgworker.c:715 tcop/postgres.c:3312 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminando el proceso ayudante «%s» debido a una orden del administrador" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:888 #, c-format -msgid "background worker \"%s\": must be registered in shared_preload_libraries" -msgstr "proceso ayudante «%s»: debe ser registrado en shared_preload_libraries" +msgid "background worker \"%s\": must be registered in \"shared_preload_libraries\"" +msgstr "proceso ayudante «%s»: debe ser registrado en «shared_preload_libraries»" -#: postmaster/bgworker.c:902 +#: postmaster/bgworker.c:911 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "proceso ayudante «%s»: sólo los ayudantes dinámicos pueden pedir notificaciones" -#: postmaster/bgworker.c:917 +#: postmaster/bgworker.c:926 #, c-format msgid "too many background workers" msgstr "demasiados procesos ayudantes" -#: postmaster/bgworker.c:918 +#: postmaster/bgworker.c:927 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Hasta %d proceso ayudante puede registrarse con la configuración actual." msgstr[1] "Hasta %d procesos ayudantes pueden registrarse con la configuración actual." -# FIXME a %s would be nice here -#: postmaster/bgworker.c:922 +#: postmaster/bgworker.c:931 postmaster/checkpointer.c:445 #, c-format -msgid "Consider increasing the configuration parameter \"max_worker_processes\"." -msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." +msgid "Consider increasing the configuration parameter \"%s\"." +msgstr "Considere incrementar el parámetro de configuración «%s»." -#: postmaster/checkpointer.c:431 +#: postmaster/checkpointer.c:441 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "los puntos de control están ocurriendo con demasiada frecuencia (cada %d segundo)" msgstr[1] "los puntos de control están ocurriendo con demasiada frecuencia (cada %d segundos)" -# FIXME a %s would be nice here -#: postmaster/checkpointer.c:435 -#, c-format -msgid "Consider increasing the configuration parameter \"max_wal_size\"." -msgstr "Considere incrementar el parámetro de configuración «max_wal_size»." - -#: postmaster/checkpointer.c:1059 +#: postmaster/checkpointer.c:1067 #, c-format msgid "checkpoint request failed" -msgstr "falló la petición de punto de control" +msgstr "falló la petición de checkpoint" -#: postmaster/checkpointer.c:1060 +#: postmaster/checkpointer.c:1068 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Vea los mensajes recientes en el registro del servidor para obtener más detalles." -#: postmaster/pgarch.c:416 +#: postmaster/launch_backend.c:381 #, c-format -msgid "archive_mode enabled, yet archiving is not configured" -msgstr "" +msgid "could not execute server process \"%s\": %m" +msgstr "no se pudo lanzar el proceso servidor «%s»: %m" + +#: postmaster/launch_backend.c:434 +#, c-format +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "no se pudo crear mapeo de archivo de parámetros de servidor: código de error %lu" + +#: postmaster/launch_backend.c:442 +#, c-format +msgid "could not map backend parameter memory: error code %lu" +msgstr "no se pudo mapear memoria para parámetros de servidor: código de error %lu" + +#: postmaster/launch_backend.c:459 +#, c-format +msgid "subprocess command line too long" +msgstr "orden de subproceso demasiado larga" + +#: postmaster/launch_backend.c:477 +#, c-format +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "llamada a CreateProcess() falló: %m (código de error %lu)" + +#: postmaster/launch_backend.c:504 +#, c-format +msgid "could not unmap view of backend parameter file: error code %lu" +msgstr "no se pudo desmapear la vista del archivo de parámetros de servidor: código de error %lu" + +#: postmaster/launch_backend.c:508 +#, c-format +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "no se pudo cerrar el archivo de parámetros de servidor: código de error %lu" + +#: postmaster/launch_backend.c:530 +#, c-format +msgid "giving up after too many tries to reserve shared memory" +msgstr "renunciar después de demasiados intentos de reservar memoria compartida" + +#: postmaster/launch_backend.c:531 +#, c-format +msgid "This might be caused by ASLR or antivirus software." +msgstr "Esto podría deberse a ASLR o un software antivirus." + +#: postmaster/launch_backend.c:834 +#, c-format +msgid "could not duplicate socket %d for use in backend: error code %d" +msgstr "no se pudo duplicar el socket %d para su empleo en el backend: código de error %d" + +#: postmaster/launch_backend.c:866 +#, c-format +msgid "could not create inherited socket: error code %d\n" +msgstr "no se pudo crear el socket heradado: código de error %d\n" + +#: postmaster/launch_backend.c:895 +#, c-format +msgid "could not open backend variables file \"%s\": %m\n" +msgstr "no se pudo abrir el archivo de variables de servidor «%s»: %m\n" + +#: postmaster/launch_backend.c:901 +#, c-format +msgid "could not read from backend variables file \"%s\": %m\n" +msgstr "no se pudo leer el archivo de variables de servidor «%s»: %m\n" -#: postmaster/pgarch.c:438 +#: postmaster/launch_backend.c:912 +#, c-format +msgid "could not read startup data from backend variables file \"%s\": %m\n" +msgstr "no se pudo leer el archivo de variables de servidor «%s»: %m\n" + +#: postmaster/launch_backend.c:924 +#, c-format +msgid "could not remove file \"%s\": %m\n" +msgstr "no se pudo eliminar el archivo «%s»: %m\n" + +#: postmaster/launch_backend.c:940 +#, c-format +msgid "could not map view of backend variables: error code %lu\n" +msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" + +#: postmaster/launch_backend.c:959 +#, c-format +msgid "could not unmap view of backend variables: error code %lu\n" +msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" + +#: postmaster/launch_backend.c:966 +#, c-format +msgid "could not close handle to backend parameter variables: error code %lu\n" +msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" + +#: postmaster/pgarch.c:428 +#, c-format +msgid "\"archive_mode\" enabled, yet archiving is not configured" +msgstr "«archive_mode» está activado, pero el archivado no está configurado" + +#: postmaster/pgarch.c:452 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "eliminando archivo de estado huérfano «%s»" -#: postmaster/pgarch.c:448 +#: postmaster/pgarch.c:462 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "la eliminación del archivo de estado huérfano «%s» falló demasiadas veces, se tratará de nuevo después" -#: postmaster/pgarch.c:484 +#: postmaster/pgarch.c:498 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "el archivado del archivo de WAL «%s» falló demasiadas veces, se tratará de nuevo más tarde" -#: postmaster/pgarch.c:791 postmaster/pgarch.c:830 +#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 #, c-format -msgid "both archive_command and archive_library set" -msgstr "" +msgid "both \"archive_command\" and \"archive_library\" set" +msgstr "tanto «archive_command» como «archive_library» están definidos" -#: postmaster/pgarch.c:792 postmaster/pgarch.c:831 +#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 #, c-format -msgid "Only one of archive_command, archive_library may be set." -msgstr "" +msgid "Only one of \"archive_command\", \"archive_library\" may be set." +msgstr "Sólo uno de «archive_command», «archive_library» puede ser definido." -#: postmaster/pgarch.c:809 +#: postmaster/pgarch.c:897 #, c-format msgid "restarting archiver process because value of \"archive_library\" was changed" msgstr "reiniciando el proceso archivador porque el valor de «archive_library» cambió" -#: postmaster/pgarch.c:846 +#: postmaster/pgarch.c:934 #, c-format msgid "archive modules have to define the symbol %s" -msgstr "" +msgstr "los módulos de archivado tienen que definir el símbolo %s" -#: postmaster/pgarch.c:852 +#: postmaster/pgarch.c:940 #, c-format msgid "archive modules must register an archive callback" msgstr "los módulos de archivado deben registrar un callback de archivado" -#: postmaster/postmaster.c:759 +#: postmaster/postmaster.c:661 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: argumento no válido para la opción -f: «%s»\n" -#: postmaster/postmaster.c:832 +#: postmaster/postmaster.c:734 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: argumento no válido para la opción -t: «%s»\n" -#: postmaster/postmaster.c:855 +#: postmaster/postmaster.c:757 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: argumento no válido: «%s»\n" -#: postmaster/postmaster.c:923 +#: postmaster/postmaster.c:825 #, c-format -msgid "%s: superuser_reserved_connections (%d) plus reserved_connections (%d) must be less than max_connections (%d)\n" -msgstr "" +msgid "%s: \"superuser_reserved_connections\" (%d) plus \"reserved_connections\" (%d) must be less than \"max_connections\" (%d)\n" +msgstr "%s: «superuser_reserved_connections» (%d) más «reserved_connections» (%d) debe ser menor que «max_connections» (%d)\n" + +#: postmaster/postmaster.c:833 +#, c-format +msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" +msgstr "el archivador de WAL no puede activarse cuando «wal_level» es «minimal»" -#: postmaster/postmaster.c:931 +#: postmaster/postmaster.c:836 #, c-format -msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" -msgstr "el archivador de WAL no puede activarse cuando wal_level es «minimal»" +msgid "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be \"replica\" or \"logical\"" +msgstr "el flujo de WAL («max_wal_senders» > 0) requiere que «wal_level» sea «replica» o «logical»" -#: postmaster/postmaster.c:934 +#: postmaster/postmaster.c:839 #, c-format -msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" -msgstr "el flujo de WAL (max_wal_senders > 0) requiere wal_level «replica» o «logical»" +msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" +msgstr "no se puede sumarizar WAL cuando «wal_level» es «minimal»" -#: postmaster/postmaster.c:942 +#: postmaster/postmaster.c:847 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: las tablas de palabras clave de fecha no son válidas, arréglelas\n" -#: postmaster/postmaster.c:1099 +#: postmaster/postmaster.c:1004 #, c-format msgid "could not create I/O completion port for child queue" msgstr "no se pudo crear el port E/S de reporte de completitud para la cola de procesos hijos" -#: postmaster/postmaster.c:1164 +#: postmaster/postmaster.c:1069 #, c-format msgid "ending log output to stderr" msgstr "terminando la salida de registro a stderr" -#: postmaster/postmaster.c:1165 +#: postmaster/postmaster.c:1070 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "La salida futura del registro será enviada al destino de log «%s»." -#: postmaster/postmaster.c:1176 +#: postmaster/postmaster.c:1081 #, c-format msgid "starting %s" msgstr "iniciando %s" -#: postmaster/postmaster.c:1236 +#: postmaster/postmaster.c:1143 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "no se pudo crear el socket de escucha para «%s»" -#: postmaster/postmaster.c:1242 +#: postmaster/postmaster.c:1149 #, c-format msgid "could not create any TCP/IP sockets" msgstr "no se pudo crear ningún socket TCP/IP" -#: postmaster/postmaster.c:1274 +#: postmaster/postmaster.c:1181 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() falló: código de error %ld" -#: postmaster/postmaster.c:1325 +#: postmaster/postmaster.c:1234 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "no se pudo crear el socket de dominio Unix en el directorio «%s»" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1240 #, c-format msgid "could not create any Unix-domain sockets" msgstr "no se pudo crear ningún socket de dominio Unix" -#: postmaster/postmaster.c:1342 +#: postmaster/postmaster.c:1251 #, c-format msgid "no socket created for listening" msgstr "no se creó el socket de atención" -#: postmaster/postmaster.c:1373 +#: postmaster/postmaster.c:1282 #, c-format -msgid "%s: could not change permissions of external PID file \"%s\": %s\n" -msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: %s\n" +msgid "%s: could not change permissions of external PID file \"%s\": %m\n" +msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: %m\n" -#: postmaster/postmaster.c:1377 +#: postmaster/postmaster.c:1286 #, c-format -msgid "%s: could not write external PID file \"%s\": %s\n" -msgstr "%s: no pudo escribir en el archivo externo de PID «%s»: %s\n" +msgid "%s: could not write external PID file \"%s\": %m\n" +msgstr "%s: no pudo escribir en el archivo externo de PID «%s»: %m\n" #. translator: %s is a configuration file -#: postmaster/postmaster.c:1405 utils/init/postinit.c:221 -#, fuzzy, c-format -#| msgid "could not load locale \"%s\"" +#: postmaster/postmaster.c:1314 utils/init/postinit.c:221 +#, c-format msgid "could not load %s" -msgstr "no se pudo cargar la configuración regional «%s»" +msgstr "no se pudo cargar %s" -#: postmaster/postmaster.c:1431 +#: postmaster/postmaster.c:1342 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster se volvió multi-hilo durante la partida" -#: postmaster/postmaster.c:1432 +#: postmaster/postmaster.c:1343 postmaster/postmaster.c:3684 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Defina la variable de ambiente LC_ALL a un valor válido." -#: postmaster/postmaster.c:1533 +#: postmaster/postmaster.c:1442 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: no se pudo localizar la ruta de mi propio ejecutable" -#: postmaster/postmaster.c:1540 +#: postmaster/postmaster.c:1449 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: no se pudo localizar el ejecutable postgres correspondiente" -#: postmaster/postmaster.c:1563 utils/misc/tzparser.c:340 +#: 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 "Esto puede indicar una instalación de PostgreSQL incompleta, o que el archivo «%s» ha sido movido de la ubicación adecuada." -#: postmaster/postmaster.c:1590 +#: postmaster/postmaster.c:1499 #, c-format msgid "" "%s: could not find the database system\n" "Expected to find it in the directory \"%s\",\n" -"but could not open file \"%s\": %s\n" +"but could not open file \"%s\": %m\n" msgstr "" "%s: no se pudo encontrar el sistema de base de datos\n" "Se esperaba encontrar en el directorio PGDATA «%s»,\n" -"pero no se pudo abrir el archivo «%s»: %s\n" +"pero no se pudo abrir el archivo «%s»: %m\n" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1887 +#: postmaster/postmaster.c:1789 #, c-format msgid "issuing %s to recalcitrant children" -msgstr "" +msgstr "enviando %s a hijos recalcitrantes" -#: postmaster/postmaster.c:1909 +#: postmaster/postmaster.c:1811 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "ejecutando un apagado inmediato porque el archivo de bloqueo del directorio de datos no es válido" -#: postmaster/postmaster.c:1984 postmaster/postmaster.c:2012 +#: postmaster/postmaster.c:1874 #, c-format -msgid "incomplete startup packet" -msgstr "el paquete de inicio está incompleto" +msgid "wrong key in cancel request for process %d" +msgstr "llave incorrecta en la petición de cancelación para el proceso %d" -#: postmaster/postmaster.c:1996 postmaster/postmaster.c:2029 +#: postmaster/postmaster.c:1886 #, c-format -msgid "invalid length of startup packet" -msgstr "el de paquete de inicio tiene largo incorrecto" +msgid "PID %d in cancel request did not match any process" +msgstr "el PID %d en la petición de cancelación no coincidió con ningún proceso" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2106 #, c-format -msgid "failed to send SSL negotiation response: %m" -msgstr "no se pudo enviar la respuesta de negociación SSL: %m" +msgid "received SIGHUP, reloading configuration files" +msgstr "se recibió SIGHUP, volviendo a cargar archivos de configuración" -#: postmaster/postmaster.c:2076 +#. translator: %s is a configuration file +#: postmaster/postmaster.c:2134 postmaster/postmaster.c:2138 #, c-format -msgid "received unencrypted data after SSL request" -msgstr "se recibieron datos no cifrados después de petición SSL" +msgid "%s was not reloaded" +msgstr "%s no fue vuelto a cargar" -#: postmaster/postmaster.c:2077 postmaster/postmaster.c:2121 +#: postmaster/postmaster.c:2148 #, c-format -msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." -msgstr "Esto podría ser un error en el software cliente o evidencia de un intento de ataque man-in-the-middle." +msgid "SSL configuration was not reloaded" +msgstr "la configuración SSL no fue vuelta a cargar" -#: postmaster/postmaster.c:2102 +#: postmaster/postmaster.c:2234 #, c-format -msgid "failed to send GSSAPI negotiation response: %m" -msgstr "no se pudo enviar la respuesta de negociación GSSAPI: %m" +msgid "received smart shutdown request" +msgstr "se recibió petición de apagado inteligente" -#: postmaster/postmaster.c:2120 +#: postmaster/postmaster.c:2275 #, c-format -msgid "received unencrypted data after GSSAPI encryption request" -msgstr "se recibieron datos no cifrados después de petición de cifrado GSSAPI" +msgid "received fast shutdown request" +msgstr "se recibió petición de apagado rápido" -#: postmaster/postmaster.c:2144 +#: postmaster/postmaster.c:2293 #, c-format -msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" -msgstr "el protocolo %u.%u no está soportado: servidor soporta %u.0 hasta %u.%u" +msgid "aborting any active transactions" +msgstr "abortando transacciones activas" -#: postmaster/postmaster.c:2211 -#, c-format -msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." -msgstr "Los valores válidos son: «false», 0, «true», 1, «database»." - -#: postmaster/postmaster.c:2252 -#, c-format -msgid "invalid startup packet layout: expected terminator as last byte" -msgstr "el paquete de inicio no es válido: se esperaba un terminador en el último byte" - -#: postmaster/postmaster.c:2269 -#, c-format -msgid "no PostgreSQL user name specified in startup packet" -msgstr "no se especifica un nombre de usuario en el paquete de inicio" - -#: postmaster/postmaster.c:2333 -#, c-format -msgid "the database system is starting up" -msgstr "el sistema de base de datos está iniciándose" - -#: postmaster/postmaster.c:2339 -#, c-format -msgid "the database system is not yet accepting connections" -msgstr "el sistema de bases de datos aún no está aceptando conexiones" - -#: postmaster/postmaster.c:2340 -#, c-format -msgid "Consistent recovery state has not been yet reached." -msgstr "Aún no se ha alcanzado un estado de recuperación consistente." - -#: postmaster/postmaster.c:2344 -#, c-format -msgid "the database system is not accepting connections" -msgstr "el sistema de bases de datos no está aceptando conexiones" - -#: postmaster/postmaster.c:2345 -#, c-format -msgid "Hot standby mode is disabled." -msgstr "El modo hot standby está desactivado." - -#: postmaster/postmaster.c:2350 -#, c-format -msgid "the database system is shutting down" -msgstr "el sistema de base de datos está apagándose" - -#: postmaster/postmaster.c:2355 -#, c-format -msgid "the database system is in recovery mode" -msgstr "el sistema de base de datos está en modo de recuperación" - -#: postmaster/postmaster.c:2360 storage/ipc/procarray.c:491 -#: storage/ipc/sinvaladt.c:306 storage/lmgr/proc.c:353 -#, c-format -msgid "sorry, too many clients already" -msgstr "lo siento, ya tenemos demasiados clientes" - -#: postmaster/postmaster.c:2447 -#, c-format -msgid "wrong key in cancel request for process %d" -msgstr "llave incorrecta en la petición de cancelación para el proceso %d" - -#: postmaster/postmaster.c:2459 -#, c-format -msgid "PID %d in cancel request did not match any process" -msgstr "el PID %d en la petición de cancelación no coincidió con ningún proceso" - -#: postmaster/postmaster.c:2726 -#, c-format -msgid "received SIGHUP, reloading configuration files" -msgstr "se recibió SIGHUP, volviendo a cargar archivos de configuración" - -#. translator: %s is a configuration file -#: postmaster/postmaster.c:2750 postmaster/postmaster.c:2754 -#, c-format -msgid "%s was not reloaded" -msgstr "%s no fue vuelto a cargar" - -#: postmaster/postmaster.c:2764 -#, c-format -msgid "SSL configuration was not reloaded" -msgstr "la configuración SSL no fue vuelta a cargar" - -#: postmaster/postmaster.c:2854 -#, c-format -msgid "received smart shutdown request" -msgstr "se recibió petición de apagado inteligente" - -#: postmaster/postmaster.c:2895 -#, c-format -msgid "received fast shutdown request" -msgstr "se recibió petición de apagado rápido" - -#: postmaster/postmaster.c:2913 -#, c-format -msgid "aborting any active transactions" -msgstr "abortando transacciones activas" - -#: postmaster/postmaster.c:2937 +#: postmaster/postmaster.c:2317 #, c-format msgid "received immediate shutdown request" msgstr "se recibió petición de apagado inmediato" -#: postmaster/postmaster.c:3013 +#: postmaster/postmaster.c:2389 #, c-format msgid "shutdown at recovery target" msgstr "apagándose al alcanzar el destino de recuperación" -#: postmaster/postmaster.c:3031 postmaster/postmaster.c:3067 +#: postmaster/postmaster.c:2407 postmaster/postmaster.c:2443 msgid "startup process" msgstr "proceso de inicio" -#: postmaster/postmaster.c:3034 +#: postmaster/postmaster.c:2410 #, c-format msgid "aborting startup due to startup process failure" msgstr "abortando el inicio debido a una falla en el procesamiento de inicio" -#: postmaster/postmaster.c:3107 +#: postmaster/postmaster.c:2485 #, c-format msgid "database system is ready to accept connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones" -#: postmaster/postmaster.c:3128 +#: postmaster/postmaster.c:2506 msgid "background writer process" msgstr "proceso background writer" -#: postmaster/postmaster.c:3175 +#: postmaster/postmaster.c:2553 msgid "checkpointer process" msgstr "proceso checkpointer" -#: postmaster/postmaster.c:3191 +#: postmaster/postmaster.c:2569 msgid "WAL writer process" msgstr "proceso escritor de WAL" -#: postmaster/postmaster.c:3206 +#: postmaster/postmaster.c:2584 msgid "WAL receiver process" msgstr "proceso receptor de WAL" -#: postmaster/postmaster.c:3221 +#: postmaster/postmaster.c:2598 +msgid "WAL summarizer process" +msgstr "proceso sumarizador de WAL" + +#: postmaster/postmaster.c:2613 msgid "autovacuum launcher process" msgstr "proceso lanzador de autovacuum" -#: postmaster/postmaster.c:3239 +#: postmaster/postmaster.c:2631 msgid "archiver process" msgstr "proceso de archivado" -#: postmaster/postmaster.c:3252 +#: postmaster/postmaster.c:2644 msgid "system logger process" msgstr "proceso de log" -#: postmaster/postmaster.c:3309 +#: postmaster/postmaster.c:2661 +msgid "slot sync worker process" +msgstr "proceso sincronizador de slot" + +#: postmaster/postmaster.c:2717 #, c-format msgid "background worker \"%s\"" msgstr "proceso ayudante «%s»" -#: postmaster/postmaster.c:3388 postmaster/postmaster.c:3408 -#: postmaster/postmaster.c:3415 postmaster/postmaster.c:3433 +#: postmaster/postmaster.c:2796 postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2823 postmaster/postmaster.c:2841 msgid "server process" msgstr "proceso de servidor" -#: postmaster/postmaster.c:3487 +#: postmaster/postmaster.c:2895 #, c-format msgid "terminating any other active server processes" msgstr "terminando todos los otros procesos de servidor activos" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3662 +#: postmaster/postmaster.c:3082 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) terminó con código de salida %d" -#: postmaster/postmaster.c:3664 postmaster/postmaster.c:3676 -#: postmaster/postmaster.c:3686 postmaster/postmaster.c:3697 +#: 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 "El proceso que falló estaba ejecutando: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3673 +#: postmaster/postmaster.c:3093 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) fue terminado por una excepción 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3683 +#: postmaster/postmaster.c:3103 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) fue terminado por una señal %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3695 +#: postmaster/postmaster.c:3115 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) terminó con código %d no reconocido" -#: postmaster/postmaster.c:3903 +#: postmaster/postmaster.c:3331 #, c-format msgid "abnormal database system shutdown" msgstr "apagado anormal del sistema de bases de datos" -#: postmaster/postmaster.c:3929 +#: postmaster/postmaster.c:3357 #, c-format msgid "shutting down due to startup process failure" msgstr "apagando debido a una falla en el procesamiento de inicio" -#: postmaster/postmaster.c:3935 +#: postmaster/postmaster.c:3363 #, c-format -msgid "shutting down because restart_after_crash is off" -msgstr "apagando debido a que restart_after_crash está desactivado" +msgid "shutting down because \"restart_after_crash\" is off" +msgstr "apagando debido a que «restart_after_crash» está desactivado" -#: postmaster/postmaster.c:3947 +#: postmaster/postmaster.c:3375 #, c-format msgid "all server processes terminated; reinitializing" msgstr "todos los procesos fueron terminados; reinicializando" -#: postmaster/postmaster.c:4141 postmaster/postmaster.c:5459 -#: postmaster/postmaster.c:5857 +#: postmaster/postmaster.c:3574 postmaster/postmaster.c:3985 +#: postmaster/postmaster.c:4374 #, c-format msgid "could not generate random cancel key" msgstr "no se pudo generar una llave de cancelación aleatoria" -#: postmaster/postmaster.c:4203 +#: postmaster/postmaster.c:3607 #, c-format msgid "could not fork new process for connection: %m" msgstr "no se pudo lanzar el nuevo proceso para la conexión: %m" -#: postmaster/postmaster.c:4245 +#: postmaster/postmaster.c:3649 msgid "could not fork new process for connection: " msgstr "no se pudo lanzar el nuevo proceso para la conexión: " -#: postmaster/postmaster.c:4351 -#, c-format -msgid "connection received: host=%s port=%s" -msgstr "conexión recibida: host=%s port=%s" - -#: postmaster/postmaster.c:4356 -#, c-format -msgid "connection received: host=%s" -msgstr "conexión recibida: host=%s" - -#: postmaster/postmaster.c:4593 -#, c-format -msgid "could not execute server process \"%s\": %m" -msgstr "no se pudo lanzar el proceso servidor «%s»: %m" - -#: postmaster/postmaster.c:4651 -#, c-format -msgid "could not create backend parameter file mapping: error code %lu" -msgstr "no se pudo crear mapeo de archivo de parámetros de servidor: código de error %lu" - -#: postmaster/postmaster.c:4660 -#, c-format -msgid "could not map backend parameter memory: error code %lu" -msgstr "no se pudo mapear memoria para parámetros de servidor: código de error %lu" - -#: postmaster/postmaster.c:4687 -#, c-format -msgid "subprocess command line too long" -msgstr "orden de subproceso demasiado larga" - -#: postmaster/postmaster.c:4705 -#, c-format -msgid "CreateProcess() call failed: %m (error code %lu)" -msgstr "llamada a CreateProcess() falló: %m (código de error %lu)" - -#: postmaster/postmaster.c:4732 -#, c-format -msgid "could not unmap view of backend parameter file: error code %lu" -msgstr "no se pudo desmapear la vista del archivo de parámetros de servidor: código de error %lu" - -#: postmaster/postmaster.c:4736 -#, c-format -msgid "could not close handle to backend parameter file: error code %lu" -msgstr "no se pudo cerrar el archivo de parámetros de servidor: código de error %lu" - -#: postmaster/postmaster.c:4758 -#, c-format -msgid "giving up after too many tries to reserve shared memory" -msgstr "renunciar después de demasiados intentos de reservar memoria compartida" - -#: postmaster/postmaster.c:4759 -#, c-format -msgid "This might be caused by ASLR or antivirus software." -msgstr "Esto podría deberse a ASLR o un software antivirus." - -#: postmaster/postmaster.c:4932 -#, c-format -msgid "SSL configuration could not be loaded in child process" -msgstr "No se pudo cargar la configuración SSL en proceso secundario" - -#: postmaster/postmaster.c:5057 +#: postmaster/postmaster.c:3683 #, c-format -msgid "Please report this to <%s>." -msgstr "Por favor reporte esto a <%s>." +#| msgid "postmaster became multithreaded during startup" +msgid "postmaster became multithreaded" +msgstr "postmaster se volvió multi-hilo" -#: postmaster/postmaster.c:5125 +#: postmaster/postmaster.c:3752 #, c-format msgid "database system is ready to accept read-only connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones de sólo lectura" -#: postmaster/postmaster.c:5383 -#, c-format -msgid "could not fork startup process: %m" -msgstr "no se pudo lanzar el proceso de inicio: %m" - -#: postmaster/postmaster.c:5387 -#, c-format -msgid "could not fork archiver process: %m" -msgstr "no se pudo lanzar el proceso de archivado: %m" - -#: postmaster/postmaster.c:5391 -#, c-format -msgid "could not fork background writer process: %m" -msgstr "no se pudo lanzar el background writer: %m" - -#: postmaster/postmaster.c:5395 -#, c-format -msgid "could not fork checkpointer process: %m" -msgstr "no se pudo lanzar el checkpointer: %m" - -#: postmaster/postmaster.c:5399 -#, c-format -msgid "could not fork WAL writer process: %m" -msgstr "no se pudo lanzar el proceso escritor de WAL: %m" - -#: postmaster/postmaster.c:5403 -#, c-format -msgid "could not fork WAL receiver process: %m" -msgstr "no se pudo lanzar el proceso receptor de WAL: %m" - -#: postmaster/postmaster.c:5407 +#: postmaster/postmaster.c:3935 #, c-format -msgid "could not fork process: %m" -msgstr "no se pudo lanzar el proceso: %m" +msgid "could not fork \"%s\" process: %m" +msgstr "no se pudo lanzar el proceso «%s»: %m" -#: postmaster/postmaster.c:5608 postmaster/postmaster.c:5635 +#: postmaster/postmaster.c:4173 postmaster/postmaster.c:4207 #, c-format msgid "database connection requirement not indicated during registration" msgstr "el requerimiento de conexión a base de datos no fue indicado durante el registro" -#: postmaster/postmaster.c:5619 postmaster/postmaster.c:5646 +#: postmaster/postmaster.c:4183 postmaster/postmaster.c:4217 #, c-format msgid "invalid processing mode in background worker" msgstr "modo de procesamiento no válido en proceso ayudante" -#: postmaster/postmaster.c:5731 +#: postmaster/postmaster.c:4277 #, c-format -msgid "could not fork worker process: %m" -msgstr "no se pudo lanzar el proceso ayudante: %m" +msgid "could not fork background worker process: %m" +msgstr "no se pudo lanzar el background writer: %m" -#: postmaster/postmaster.c:5843 +#: postmaster/postmaster.c:4360 #, c-format -msgid "no slot available for new worker process" +msgid "no slot available for new background worker process" msgstr "no hay slot disponible para un nuevo proceso ayudante" -#: postmaster/postmaster.c:6174 -#, c-format -msgid "could not duplicate socket %d for use in backend: error code %d" -msgstr "no se pudo duplicar el socket %d para su empleo en el backend: código de error %d" - -#: postmaster/postmaster.c:6206 -#, c-format -msgid "could not create inherited socket: error code %d\n" -msgstr "no se pudo crear el socket heradado: código de error %d\n" - -#: postmaster/postmaster.c:6235 -#, c-format -msgid "could not open backend variables file \"%s\": %s\n" -msgstr "no se pudo abrir el archivo de variables de servidor «%s»: %s\n" - -#: postmaster/postmaster.c:6242 -#, c-format -msgid "could not read from backend variables file \"%s\": %s\n" -msgstr "no se pudo leer el archivo de variables de servidor «%s»: %s\n" - -#: postmaster/postmaster.c:6251 -#, c-format -msgid "could not remove file \"%s\": %s\n" -msgstr "no se pudo eliminar el archivo «%s»: %s\n" - -#: postmaster/postmaster.c:6268 -#, c-format -msgid "could not map view of backend variables: error code %lu\n" -msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" - -#: postmaster/postmaster.c:6277 -#, c-format -msgid "could not unmap view of backend variables: error code %lu\n" -msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" - -#: postmaster/postmaster.c:6284 -#, c-format -msgid "could not close handle to backend parameter variables: error code %lu\n" -msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" - -#: postmaster/postmaster.c:6443 +#: postmaster/postmaster.c:4623 #, c-format msgid "could not read exit code for process\n" msgstr "no se pudo leer el código de salida del proceso\n" -#: postmaster/postmaster.c:6485 +#: postmaster/postmaster.c:4665 #, c-format msgid "could not post child completion status\n" msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" -#: postmaster/syslogger.c:501 postmaster/syslogger.c:1222 +#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 #, c-format msgid "could not read from logger pipe: %m" msgstr "no se pudo leer desde la tubería de log: %m" -#: postmaster/syslogger.c:598 postmaster/syslogger.c:612 +#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 #, c-format msgid "could not create pipe for syslog: %m" msgstr "no se pudo crear la tubería para syslog: %m" -#: postmaster/syslogger.c:677 +#: postmaster/syslogger.c:712 #, c-format msgid "could not fork system logger: %m" msgstr "no se pudo crear el proceso de log: %m" -#: postmaster/syslogger.c:713 +#: postmaster/syslogger.c:731 #, c-format msgid "redirecting log output to logging collector process" msgstr "redirigiendo la salida del registro al proceso recolector de registro" -#: postmaster/syslogger.c:714 +#: postmaster/syslogger.c:732 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "La salida futura del registro aparecerá en el directorio «%s»." -#: postmaster/syslogger.c:722 +#: postmaster/syslogger.c:740 #, c-format msgid "could not redirect stdout: %m" msgstr "no se pudo redirigir stdout: %m" -#: postmaster/syslogger.c:727 postmaster/syslogger.c:744 +#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 #, c-format msgid "could not redirect stderr: %m" msgstr "no se pudo redirigir stderr: %m" -#: postmaster/syslogger.c:1177 +#: postmaster/syslogger.c:1128 #, c-format -msgid "could not write to log file: %s\n" -msgstr "no se pudo escribir al archivo de log: %s\n" +msgid "could not write to log file: %m\n" +msgstr "no se pudo escribir al archivo de log: %m\n" -#: postmaster/syslogger.c:1295 +#: postmaster/syslogger.c:1246 #, c-format msgid "could not open log file \"%s\": %m" msgstr "no se pudo abrir el archivo de registro «%s»: %m" -#: postmaster/syslogger.c:1385 +#: postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "desactivando rotación automática (use SIGHUP para reactivarla)" -#: regex/regc_pg_locale.c:242 +#: postmaster/walsummarizer.c:740 +#, c-format +msgid "WAL summarization is not progressing" +msgstr "la sumarización de WAL no está progresando" + +#: 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 "La sumarización de WAL se necesita hasta %X/%X, pero está detenido en %X/%X en disco y %X/%X en memoria." + +#: 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] "todavía esperando al resumen de WAL hasta %X/%X después de %ld segundo" +msgstr[1] "todavía esperando al resumen de WAL hasta %X/%X después de %ld segundos" + +#: postmaster/walsummarizer.c:760 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "El resumen ha alcanzado %X/%X en disco y %X/%X en memoria." + +#: postmaster/walsummarizer.c:1000 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "no se pudo encontrar un registro válido después de %X/%X" + +#: postmaster/walsummarizer.c:1045 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X: %s" +msgstr "no se pudo leer WAL del timeline %u en %X/%X: %s" + +#: postmaster/walsummarizer.c:1051 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X" +msgstr "no se pudo leer WAL del timeline %u en %X/%X" + +#: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "no se pudo determinar qué ordenamiento usar para la expresión regular" -#: regex/regc_pg_locale.c:265 +#: regex/regc_pg_locale.c:262 #, c-format msgid "nondeterministic collations are not supported for regular expressions" msgstr "los ordenamientos no determinísticos no están soportados para expresiones regulares" -#: replication/libpqwalreceiver/libpqwalreceiver.c:197 -#: replication/libpqwalreceiver/libpqwalreceiver.c:280 -#, fuzzy, c-format -#| msgid "redo is not required" +#: replication/libpqwalreceiver/libpqwalreceiver.c:267 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 +#, c-format msgid "password is required" -msgstr "no se requiere redo" +msgstr "una contraseña es requerida" -#: replication/libpqwalreceiver/libpqwalreceiver.c:198 +#: replication/libpqwalreceiver/libpqwalreceiver.c:268 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." -msgstr "" +msgstr "No-superusuario no se puede conectar si el servidor no pide una constraseña." -#: replication/libpqwalreceiver/libpqwalreceiver.c:199 +#: replication/libpqwalreceiver/libpqwalreceiver.c:269 #, c-format -msgid "Target server's authentication method must be changed. or set password_required=false in the subscription attributes." -msgstr "" +msgid "Target server's authentication method must be changed, or set password_required=false in the subscription parameters." +msgstr "El método de autenticación del servidor de destino debe cambiarse, o definir password_required=false en los parámetros de suscripción." -#: replication/libpqwalreceiver/libpqwalreceiver.c:211 +#: replication/libpqwalreceiver/libpqwalreceiver.c:285 #, c-format msgid "could not clear search path: %s" msgstr "no se pudo limpiar la ruta de búsqueda: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:257 +#: replication/libpqwalreceiver/libpqwalreceiver.c:331 +#: replication/libpqwalreceiver/libpqwalreceiver.c:517 #, c-format msgid "invalid connection string syntax: %s" msgstr "sintaxis de cadena de conexión no válida: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:281 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Non-superusers must provide a password in the connection string." -msgstr "" +msgstr "No-superusuario debe proveer una contraseña en la cadena de conexión." -#: replication/libpqwalreceiver/libpqwalreceiver.c:307 +#: replication/libpqwalreceiver/libpqwalreceiver.c:386 #, c-format msgid "could not parse connection string: %s" msgstr "no se pudo interpretar la cadena de conexión: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:380 +#: replication/libpqwalreceiver/libpqwalreceiver.c:459 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "no se pudo recibir el identificador de sistema y el ID de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:392 -#: replication/libpqwalreceiver/libpqwalreceiver.c:635 +#: replication/libpqwalreceiver/libpqwalreceiver.c:476 +#: replication/libpqwalreceiver/libpqwalreceiver.c:763 #, c-format msgid "invalid response from primary server" msgstr "respuesta no válida del servidor primario" -#: replication/libpqwalreceiver/libpqwalreceiver.c:393 +#: replication/libpqwalreceiver/libpqwalreceiver.c:477 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "No se pudo identificar el sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:478 -#: replication/libpqwalreceiver/libpqwalreceiver.c:485 -#: replication/libpqwalreceiver/libpqwalreceiver.c:515 +#: replication/libpqwalreceiver/libpqwalreceiver.c:606 +#: replication/libpqwalreceiver/libpqwalreceiver.c:613 +#: replication/libpqwalreceiver/libpqwalreceiver.c:643 #, c-format msgid "could not start WAL streaming: %s" msgstr "no se pudo iniciar el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:667 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "no se pudo enviar el mensaje fin-de-flujo al primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:562 +#: replication/libpqwalreceiver/libpqwalreceiver.c:690 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "conjunto de resultados inesperado después del fin-de-flujo" -#: replication/libpqwalreceiver/libpqwalreceiver.c:577 +#: replication/libpqwalreceiver/libpqwalreceiver.c:705 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ocurrió un error mientras se apagaba el flujo COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:587 +#: replication/libpqwalreceiver/libpqwalreceiver.c:715 #, c-format msgid "error reading result of streaming command: %s" msgstr "ocurrió un error mientras se leía la orden de flujo: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:596 -#: replication/libpqwalreceiver/libpqwalreceiver.c:832 +#: replication/libpqwalreceiver/libpqwalreceiver.c:724 +#: replication/libpqwalreceiver/libpqwalreceiver.c:957 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "resultado inesperado después de CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:623 +#: replication/libpqwalreceiver/libpqwalreceiver.c:751 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "no se pudo recibir el archivo de historia de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:636 +#: replication/libpqwalreceiver/libpqwalreceiver.c:764 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Se esperaba 1 tupla con 2 campos, se obtuvieron %d tuplas con %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:795 -#: replication/libpqwalreceiver/libpqwalreceiver.c:848 -#: replication/libpqwalreceiver/libpqwalreceiver.c:855 +#: replication/libpqwalreceiver/libpqwalreceiver.c:920 +#: replication/libpqwalreceiver/libpqwalreceiver.c:973 +#: replication/libpqwalreceiver/libpqwalreceiver.c:980 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "no se pudo recibir datos desde el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:875 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 #, c-format msgid "could not send data to WAL stream: %s" msgstr "no se pudo enviar datos al flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:967 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 #, c-format msgid "could not create replication slot \"%s\": %s" -msgstr "no se pudo create el slot de replicación «%s»: %s" +msgstr "no se pudo crear el slot de replicación «%s»: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#, c-format +msgid "could not alter replication slot \"%s\": %s" +msgstr "no se pudo alterar el slot de replicación «%s»: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1013 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 #, c-format msgid "invalid query response" msgstr "respuesta no válida a consulta" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1014 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Se esperaban %d campos, se obtuvieron %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1084 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 #, c-format msgid "the query interface requires a database connection" msgstr "la interfaz de consulta requiere una conexión a base de datos" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1115 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 msgid "empty query" msgstr "consulta vacía" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1121 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 msgid "unexpected pipeline mode" msgstr "modo pipeline inesperado" #: replication/logical/applyparallelworker.c:719 -#, fuzzy, c-format -#| msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" +#, c-format msgid "logical replication parallel apply worker for subscription \"%s\" has finished" -msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha terminado" +msgstr "el ayudante paralelo «apply» de replicación lógica para la suscripción «%s» ha terminado" -#: replication/logical/applyparallelworker.c:825 -#, fuzzy, c-format -#| msgid "lost connection to parallel worker" +#: replication/logical/applyparallelworker.c:822 +#, c-format msgid "lost connection to the logical replication apply worker" -msgstr "se ha perdido la conexión al ayudante paralelo" - -#: replication/logical/applyparallelworker.c:893 -#, fuzzy, c-format -#| msgid "could not map dynamic shared memory segment" -msgid "unable to map dynamic shared memory segment" -msgstr "no se pudo mapear el segmento de memoria compartida dinámica" +msgstr "se ha perdido la conexión al ayudante paralelo “apply” de replicación" -#: replication/logical/applyparallelworker.c:899 -#, fuzzy, c-format -#| msgid "invalid magic number in dynamic shared memory segment" -msgid "bad magic number in dynamic shared memory segment" -msgstr "número mágico no válido en segmento de memoria compartida dinámica" - -#: replication/logical/applyparallelworker.c:1027 -#: replication/logical/applyparallelworker.c:1029 -#: replication/logical/worker.c:447 -#, fuzzy -#| msgid "lost connection to parallel worker" +#: replication/logical/applyparallelworker.c:1024 +#: replication/logical/applyparallelworker.c:1026 msgid "logical replication parallel apply worker" -msgstr "se ha perdido la conexión al ayudante paralelo" +msgstr "ayudante paralelo “apply” de replicación lógica" -#: replication/logical/applyparallelworker.c:1043 -#, fuzzy, c-format -#| msgid "terminating logical replication worker due to timeout" +#: replication/logical/applyparallelworker.c:1040 +#, c-format msgid "logical replication parallel apply worker exited due to error" -msgstr "terminando el proceso de replicación lógica debido a que se agotó el tiempo de espera" +msgstr "el ayudante paralelo “apply” de replicación lógica terminó debido a un error" -#: replication/logical/applyparallelworker.c:1130 -#: replication/logical/applyparallelworker.c:1303 -#, fuzzy, c-format -#| msgid "lost connection to parallel worker" +#: replication/logical/applyparallelworker.c:1127 +#: replication/logical/applyparallelworker.c:1300 +#, c-format msgid "lost connection to the logical replication parallel apply worker" -msgstr "se ha perdido la conexión al ayudante paralelo" +msgstr "se perdió la conexión al ayudante paralelo “apply” de replicación lógica" -#: replication/logical/applyparallelworker.c:1183 -#, fuzzy, c-format -#| msgid "could not send tuple to shared-memory queue" +#: replication/logical/applyparallelworker.c:1180 +#, c-format msgid "could not send data to shared-memory queue" -msgstr "no se pudo enviar la tupla a la cola en memoria compartida" +msgstr "no se pudo enviar datos a la cola en memoria compartida" -#: replication/logical/applyparallelworker.c:1218 +#: replication/logical/applyparallelworker.c:1215 #, c-format msgid "logical replication apply worker will serialize the remaining changes of remote transaction %u to a file" -msgstr "" +msgstr "el ayudante paralelo «apply» de replicación lógica serializará los cambios restantes de la transacción remota %u a un archivo" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/logical/decode.c:180 replication/logical/logical.c:140 -#, fuzzy, c-format -#| msgid "logical decoding requires wal_level >= logical" -msgid "logical decoding on standby requires wal_level >= logical on the primary" -msgstr "la decodificación lógica requiere wal_level >= logical" +#: replication/logical/decode.c:177 replication/logical/logical.c:141 +#, c-format +msgid "logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary" +msgstr "la decodificación lógica en standby requiere «wal_level» >= «logical» en el primario" -#: replication/logical/launcher.c:331 +#: replication/logical/launcher.c:334 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" -msgstr "no se pueden iniciar procesos ayudantes de replicación cuando max_replication_slots = 0" +msgstr "no se pueden iniciar procesos ayudantes de replicación lógica cuando max_replication_slots = 0" -#: replication/logical/launcher.c:424 +#: replication/logical/launcher.c:427 #, c-format msgid "out of logical replication worker slots" -msgstr "se agotaron los slots de procesos ayudantes de replicación" +msgstr "se agotaron los slots de procesos ayudantes de replicación lógica" -#: replication/logical/launcher.c:425 +#: 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 max_logical_replication_workers." -msgstr "Puede ser necesario incrementar max_logical_replication_workers." +msgid "You might need to increase \"%s\"." +msgstr "Puede ser necesario incrementar «%s»." -#: replication/logical/launcher.c:498 +#: replication/logical/launcher.c:513 #, c-format msgid "out of background worker slots" msgstr "se acabaron los slots de procesos ayudante" -#: replication/logical/launcher.c:499 -#, c-format -msgid "You might need to increase max_worker_processes." -msgstr "Puede ser necesario incrementar max_worker_processes." - -#: replication/logical/launcher.c:705 +#: replication/logical/launcher.c:720 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "el slot del worker de replicación lógica %d está vacío, no se puede adjuntar" -#: replication/logical/launcher.c:714 +#: replication/logical/launcher.c:729 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "el slot de replicación lógica %d ya está siendo utilizado por otro worker, no se puede adjuntar" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/logical/logical.c:120 +#: replication/logical/logical.c:121 #, c-format -msgid "logical decoding requires wal_level >= logical" -msgstr "la decodificación lógica requiere wal_level >= logical" +msgid "logical decoding requires \"wal_level\" >= \"logical\"" +msgstr "la decodificación lógica requiere «wal_level» >= «logical»" -#: replication/logical/logical.c:125 +#: replication/logical/logical.c:126 #, c-format msgid "logical decoding requires a database connection" msgstr "decodificación lógica requiere una conexión a una base de datos" -#: replication/logical/logical.c:363 replication/logical/logical.c:517 +#: replication/logical/logical.c:365 replication/logical/logical.c:519 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "no se puede usar un slot de replicación física para decodificación lógica" -#: replication/logical/logical.c:368 replication/logical/logical.c:522 +#: replication/logical/logical.c:370 replication/logical/logical.c:529 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "el slot de replicación «%s» no fue creado en esta base de datos" -#: replication/logical/logical.c:375 +#: replication/logical/logical.c:377 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "no se puede crear un slot de replicación lógica en una transacción que ha efectuado escrituras" -#: replication/logical/logical.c:534 replication/logical/logical.c:541 +#: replication/logical/logical.c:540 +#, c-format +msgid "cannot use replication slot \"%s\" for logical decoding" +msgstr "no se puede usar el slot de replicación «%s» para decodificación lógica" + +#: replication/logical/logical.c:542 replication/slot.c:798 +#: replication/slot.c:829 +#, c-format +msgid "This replication slot is being synchronized from the primary server." +msgstr "Este slot de replicación está siendo sincronizado desde el servidor primario." + +#: replication/logical/logical.c:543 +#, c-format +msgid "Specify another replication slot." +msgstr "Especifique otro slot de replicación." + +#: replication/logical/logical.c:554 replication/logical/logical.c:561 #, c-format msgid "can no longer get changes from replication slot \"%s\"" msgstr "ya no se pueden recibir cambios desde el slot de replicación «%s»" -#: replication/logical/logical.c:536 +#: replication/logical/logical.c:556 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Este slot ha sido invalidado porque excedió el máximo del tamaño de reserva." -#: replication/logical/logical.c:543 -#, fuzzy, c-format -#| msgid "This slot has been invalidated because it exceeded the maximum reserved size." +#: replication/logical/logical.c:563 +#, c-format msgid "This slot has been invalidated because it was conflicting with recovery." -msgstr "Este slot ha sido invalidado porque excedió el máximo del tamaño de reserva." +msgstr "Este slot ha sido invalidado porque estaba en conflicto con la recuperación." -#: replication/logical/logical.c:608 +#: replication/logical/logical.c:628 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "iniciando la decodificación lógica para el slot «%s»" -#: replication/logical/logical.c:610 +#: replication/logical/logical.c:630 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Transacciones en flujo comprometiendo después de %X/%X, leyendo WAL desde %X/%X." -#: replication/logical/logical.c:758 +#: replication/logical/logical.c:778 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "slot «%s», plugin de salida «%s», en el callback %s, LSN asociado %X/%X" # FIXME must quote callback name? Need a translator: comment? -#: replication/logical/logical.c:764 +#: replication/logical/logical.c:784 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "slot «%s», plugin de salida «%s», en el callback %s" -#: replication/logical/logical.c:935 replication/logical/logical.c:980 -#: replication/logical/logical.c:1025 replication/logical/logical.c:1071 +#: 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 "durante la preparación, la replicación lógica requiere una función callback %s" -#: replication/logical/logical.c:1303 replication/logical/logical.c:1352 -#: replication/logical/logical.c:1393 replication/logical/logical.c:1479 -#: replication/logical/logical.c:1528 +#: 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 "el flujo lógico requiere una función callback %s" -#: replication/logical/logical.c:1438 +#: replication/logical/logical.c:1458 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "durante la preparación, el flujo lógico requiere una función callback %s" -#: replication/logical/logicalfuncs.c:126 +#: replication/logical/logicalfuncs.c:123 #, c-format msgid "slot name must not be null" msgstr "el nombre de slot no debe ser null" -#: replication/logical/logicalfuncs.c:142 +#: replication/logical/logicalfuncs.c:139 #, c-format msgid "options array must not be null" msgstr "el array de opciones no debe ser null" -#: replication/logical/logicalfuncs.c:159 +#: replication/logical/logicalfuncs.c:156 #, c-format msgid "array must be one-dimensional" msgstr "el array debe ser unidimensional" -#: replication/logical/logicalfuncs.c:165 +#: replication/logical/logicalfuncs.c:162 #, c-format msgid "array must not contain nulls" msgstr "el array no debe contener nulls" -#: replication/logical/logicalfuncs.c:180 utils/adt/json.c:1484 -#: utils/adt/jsonb.c:1403 +#: 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 "el array debe tener un número par de elementos" -#: replication/logical/logicalfuncs.c:227 +#: replication/logical/logicalfuncs.c:224 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "el plugin de salida de decodificación lógica «%s» produce salida binaria, pero «%s» espera datos textuales" #: replication/logical/origin.c:190 #, c-format -msgid "cannot query or manipulate replication origin when max_replication_slots = 0" -msgstr "no se puede consultar o manipular orígenes de replicación cuando max_replication_slots = 0" +msgid "cannot query or manipulate replication origin when \"max_replication_slots\" is 0" +msgstr "no se puede consultar o manipular orígenes de replicación cuando «max_replication_slots» = 0" #: replication/logical/origin.c:195 #, c-format @@ -20167,22 +20422,19 @@ msgid "replication origin \"%s\" does not exist" msgstr "no existe el origen de replicación «%s»" #: replication/logical/origin.c:331 -#, fuzzy, c-format -#| msgid "could not create replication slot \"%s\": %s" +#, c-format msgid "could not find free replication origin ID" -msgstr "no se pudo create el slot de replicación «%s»: %s" +msgstr "no se pudo encontrar un ID de origen de replicación disponible" #: replication/logical/origin.c:365 -#, fuzzy, c-format -#| msgid "could not drop replication slot \"%s\" on publisher: %s" +#, c-format msgid "could not drop replication origin with ID %d, in use by PID %d" -msgstr "no se pudo eliminar el slot de replicación «%s» en editor (publisher): %s" +msgstr "no se pudo eliminar el origen de replicación con ID %d, en uso por el PID %d" #: replication/logical/origin.c:492 -#, fuzzy, c-format -#| msgid "replication origin \"%s\" does not exist" +#, c-format msgid "replication origin with ID %d does not exist" -msgstr "no existe el origen de replicación «%s»" +msgstr "no existe el origen de replicación con ID %d" #: replication/logical/origin.c:757 #, c-format @@ -20191,1319 +20443,1582 @@ msgstr "el checkpoint de replicación tiene número mágico erróneo %u en lugar #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase max_replication_slots" -msgstr "no se pudo encontrar una estructura de replicación libre, incremente max_replication_slots" +msgid "could not find free replication state, increase \"max_replication_slots\"" +msgstr "no se pudo encontrar una estructura de replicación libre, incremente «max_replication_slots»" #: replication/logical/origin.c:806 -#, fuzzy, c-format -#| msgid "recovery restart point at %X/%X" +#, c-format msgid "recovered replication state of node %d to %X/%X" -msgstr "restartpoint de recuperación en %X/%X" +msgstr "recuperado el estado de replicación del nodo %d a %X/%X" #: replication/logical/origin.c:816 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "el checkpoint del slot de replicación tiene suma de verificación errónea %u, se esperaba %u" -#: replication/logical/origin.c:944 replication/logical/origin.c:1141 -#, fuzzy, c-format -#| msgid "replication slot \"%s\" is active for PID %d" +#: replication/logical/origin.c:944 replication/logical/origin.c:1143 +#, c-format msgid "replication origin with ID %d is already active for PID %d" -msgstr "el slot de replicación «%s» está activo para el PID %d" +msgstr "el origen de replicación con ID %d está activo para el PID %d" -#: replication/logical/origin.c:955 replication/logical/origin.c:1153 -#, fuzzy, c-format -#| msgid "could not find free replication state, increase max_replication_slots" +#: replication/logical/origin.c:955 replication/logical/origin.c:1156 +#, c-format msgid "could not find free replication state slot for replication origin with ID %d" -msgstr "no se pudo encontrar una estructura de replicación libre, incremente max_replication_slots" +msgstr "no se pudo encontrar una estructura de replicación libre para el origen de replicación con el ID %d" -#: replication/logical/origin.c:957 replication/logical/origin.c:1155 -#: replication/slot.c:2086 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 +#: replication/slot.c:2384 #, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Aumente max_replication_slots y reintente." +msgid "Increase \"max_replication_slots\" and try again." +msgstr "Aumente «max_replication_slots» y reintente." -#: replication/logical/origin.c:1112 +#: replication/logical/origin.c:1114 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "no se puede establecer un destino de replicación cuando ya hay uno definido" -#: replication/logical/origin.c:1196 replication/logical/origin.c:1412 -#: replication/logical/origin.c:1432 +#: replication/logical/origin.c:1199 replication/logical/origin.c:1415 +#: replication/logical/origin.c:1435 #, c-format msgid "no replication origin is configured" msgstr "no hay un destino de replicación configurado" -#: replication/logical/origin.c:1282 +#: replication/logical/origin.c:1285 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "el nombre de origen de replicación «%s» está reservado" -#: replication/logical/origin.c:1284 -#, fuzzy, c-format -#| msgid "Role names starting with \"pg_\" are reserved." +#: replication/logical/origin.c:1287 +#, c-format msgid "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." -msgstr "Los nombres de rol que empiezan con «pg_» están reservados." +msgstr "Los nombres de origen «%s», «%s» y los que empiezan con «pg_» están reservados." -#: replication/logical/relation.c:240 +#: replication/logical/relation.c:242 #, c-format msgid "\"%s\"" msgstr "«%s»" -#: replication/logical/relation.c:243 +#: replication/logical/relation.c:245 #, c-format msgid ", \"%s\"" msgstr ", «%s»" -#: replication/logical/relation.c:249 +#: replication/logical/relation.c:251 #, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" msgstr[0] "a la relación destino de replicación lógica «%s.%s» le falta la columna replicada: %s" msgstr[1] "a la relación destino de replicación lógica «%s.%s» le faltan las columnas replicadas: %s" -#: replication/logical/relation.c:304 +#: replication/logical/relation.c:306 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relación de destino de replicación lógica «%s.%s» usa columnas de sistemas en el índice REPLICA IDENTITY" -#: replication/logical/relation.c:396 +#: replication/logical/relation.c:398 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "la relación destino de replicación lógica «%s.%s» no existe" -#: replication/logical/reorderbuffer.c:3936 +#: replication/logical/reorderbuffer.c:3999 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "no se pudo escribir al archivo de datos para el XID %u: %m" -#: replication/logical/reorderbuffer.c:4282 -#: replication/logical/reorderbuffer.c:4307 +#: replication/logical/reorderbuffer.c:4345 +#: replication/logical/reorderbuffer.c:4370 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: %m" -#: replication/logical/reorderbuffer.c:4286 -#: replication/logical/reorderbuffer.c:4311 +#: 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 "no se pudo leer desde el archivo de desborde de reorderbuffer: se leyeron sólo %d en ve de %u bytes" -#: replication/logical/reorderbuffer.c:4561 +#: replication/logical/reorderbuffer.c:4624 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "no se pudo borrar el archivo «%s» durante la eliminación de pg_replslot/%s/xid*: %m" # FIXME almost duplicated again!? -#: replication/logical/reorderbuffer.c:5057 +#: replication/logical/reorderbuffer.c:5120 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "no se pudo leer del archivo «%s»: se leyeron %d en lugar de %d bytes" -#: replication/logical/snapbuild.c:639 +#: replication/logical/slotsync.c:215 +#, c-format +msgid "could not synchronize replication slot \"%s\" because remote slot precedes local slot" +msgstr "no se puede sincronizar el slot de replicación «%s» porque el slot remoto precede al slot local" + +#: replication/logical/slotsync.c:217 +#, c-format +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 "El slot remoto tiene LSN %X/%X y xmin de catálogo %u, pero el slot local tiene LSN %X/%X y xmin de catálogo %u." + +#: replication/logical/slotsync.c:459 +#, c-format +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "se eliminó el slot de replicación «%s» de la base de datos con OID %u" + +#: replication/logical/slotsync.c:579 +#, c-format +msgid "could not synchronize replication slot \"%s\"" +msgstr "no se pudo sincronizar el slot de replicación «%s»" + +#: replication/logical/slotsync.c:580 +#, c-format +msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X." +msgstr "La decodificación lógica no pudo encontrar un punto consistente desde el LSN del slot local %X/%X." + +#: replication/logical/slotsync.c:589 +#, c-format +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "el slot de replicación «%s» recién creado está listo para la sincronización" + +#: replication/logical/slotsync.c:628 +#, 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 "omitiendo sincronización de slot porque el LSN %X/%X de sincronización recibido para el slot «%s» está adelantado respecto a la posición del standby %X/%X" + +#: replication/logical/slotsync.c:650 +#, c-format +msgid "exiting from slot synchronization because same name slot \"%s\" already exists on the standby" +msgstr "saliendo de la sincronización de slot porque un slot con el mismo nombre «%s» ya existe en el standby" + +#: replication/logical/slotsync.c:819 +#, c-format +msgid "could not fetch failover logical slots info from the primary server: %s" +msgstr "no se pudo obtener la información de slots “failover” de replicación lógica del servidor primario: %s" + +#: replication/logical/slotsync.c:965 +#, c-format +msgid "could not fetch primary_slot_name \"%s\" info from the primary server: %s" +msgstr "no se pudo obtener información del primary_slot_name «%s» del servidor primario: %s" + +#: replication/logical/slotsync.c:967 +#, c-format +msgid "Check if primary_slot_name is configured correctly." +msgstr "Verificando si primary_slot_name está configurado correctamente." + +#: replication/logical/slotsync.c:987 +#, c-format +msgid "cannot synchronize replication slots from a standby server" +msgstr "no puede sincronizar slots de replicación de un servidor standby" + +#. translator: second %s is a GUC variable name +#: replication/logical/slotsync.c:996 +#, c-format +msgid "replication slot \"%s\" specified by \"%s\" does not exist on primary server" +msgstr "el slot de replicación «%s» especificado por «%s» no existe en el servidor primario" + +#. translator: first %s is a connection option; second %s is a GUC +#. variable name +#. +#: replication/logical/slotsync.c:1029 +#, c-format +msgid "replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "la sincronización de slots de replicación requiere que «%s» esté especificado en «%s»" + +# FIXME see slot.c:779. See also postmaster.c:835 +#: replication/logical/slotsync.c:1050 +#, c-format +msgid "replication slot synchronization requires \"wal_level\" >= \"logical\"" +msgstr "la sincronización de slots de replicación requiere «wal_level» >= «logical»" + +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1063 replication/logical/slotsync.c:1091 +#, c-format +msgid "replication slot synchronization requires \"%s\" to be set" +msgstr "la sincronización de slots de replicación requiere que «%s» esté definido" + +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1077 +#, c-format +msgid "replication slot synchronization requires \"%s\" to be enabled" +msgstr "la sincronización de slots de replicación requiere que «%s» esté activado" + +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1129 +#, c-format +msgid "replication slot synchronization worker will shut down because \"%s\" is disabled" +msgstr "el proceso de sincronización de slots de replicación terminará porque «%s» está desactivado" + +#: replication/logical/slotsync.c:1138 +#, c-format +msgid "replication slot synchronization worker will restart because of a parameter change" +msgstr "el proceso de sincronización de slots de replicación se reiniciará debido a un cambio de parámetro" + +#: replication/logical/slotsync.c:1162 +#, c-format +msgid "replication slot synchronization worker is shutting down on receiving SIGINT" +msgstr "el trabajador de sincronización de slots de replicación está apagándose al recibir SIGINT" + +#: replication/logical/slotsync.c:1287 +#, c-format +msgid "cannot synchronize replication slots when standby promotion is ongoing" +msgstr "no se puede sincronizar los slots de replicación cuando la promoción de standby está teniendo lugar" + +#: replication/logical/slotsync.c:1295 +#, c-format +msgid "cannot synchronize replication slots concurrently" +msgstr "no se puede sincronizar slots de replicación concurrentemente" + +#: replication/logical/slotsync.c:1403 +#, c-format +msgid "slot sync worker started" +msgstr "iniciado el trabajador de sincronización de slots" + +#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 +#: replication/walreceiver.c:307 +#, c-format +msgid "could not connect to the primary server: %s" +msgstr "no se pudo conectar al servidor primario: %s" + +#: replication/logical/snapbuild.c:653 #, c-format msgid "initial slot snapshot too large" msgstr "el snapshot inicial del slot es demasiado grande" # FIXME: snapshot? instantánea? -#: replication/logical/snapbuild.c:693 +#: 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] "se exportó un snapshot de decodificación lógica: «%s» con %u ID de transacción" msgstr[1] "se exportó un snapshot de decodificación lógica: «%s» con %u IDs de transacción" -#: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480 -#: replication/logical/snapbuild.c:1992 +#: 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 "la decodificación lógica encontró un punto consistente en %X/%X" -#: replication/logical/snapbuild.c:1390 +#: replication/logical/snapbuild.c:1406 #, c-format msgid "There are no running transactions." msgstr "No hay transacciones en ejecución." -#: replication/logical/snapbuild.c:1432 +#: replication/logical/snapbuild.c:1453 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "decodificación lógica encontró punto de inicio en %X/%X" -#: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458 +#: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Esperando que las (aproximadamente %d) transacciones más antiguas que %u terminen." -#: replication/logical/snapbuild.c:1456 +#: replication/logical/snapbuild.c:1477 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "la decodificación lógica encontró un punto consistente inicial en %X/%X" -#: replication/logical/snapbuild.c:1482 +#: replication/logical/snapbuild.c:1503 #, c-format msgid "There are no old transactions anymore." msgstr "Ya no hay transacciones antiguas en ejecución." # FIXME "snapbuild"? -#: replication/logical/snapbuild.c:1883 +#: replication/logical/snapbuild.c:1904 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "el archivo de estado de snapbuild «%s» tiene número mágico erróneo: %u en lugar de %u" -#: replication/logical/snapbuild.c:1889 +#: replication/logical/snapbuild.c:1910 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "el archivo de estado de snapbuild «%s» tiene versión no soportada: %u en vez de %u" -#: replication/logical/snapbuild.c:1930 +#: replication/logical/snapbuild.c:1951 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidente para el archivo de estado de snapbuild «%s»: es %u, debería ser %u" -#: replication/logical/snapbuild.c:1994 +#: replication/logical/snapbuild.c:2019 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "La decodificación lógica comenzará usando el snapshot guardado." -#: replication/logical/snapbuild.c:2101 +#: replication/logical/snapbuild.c:2126 #, c-format msgid "could not parse file name \"%s\"" msgstr "no se pudo interpretar el nombre de archivo «%s»" -#: replication/logical/tablesync.c:152 +#: replication/logical/tablesync.c:161 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha terminado" -#: replication/logical/tablesync.c:621 -#, fuzzy, c-format -#| msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" +#: replication/logical/tablesync.c:641 +#, c-format msgid "logical replication apply worker for subscription \"%s\" will restart so that two_phase can be enabled" -msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará para activar «two_phase»" -#: replication/logical/tablesync.c:796 replication/logical/tablesync.c:938 +#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" -msgstr "no se pudo obtener información de la tabla «%s.%s» del editor (publisher): %s" +msgstr "no se pudo obtener información de la tabla «%s.%s» del publicador: %s" -#: replication/logical/tablesync.c:803 +#: replication/logical/tablesync.c:834 #, c-format msgid "table \"%s.%s\" not found on publisher" -msgstr "la tabla \"%s.%s\" no fue encontrada en el editor (publisher)" +msgstr "la tabla \"%s.%s\" no fue encontrada en el publicador" -#: replication/logical/tablesync.c:861 -#, fuzzy, c-format -#| msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" +#: replication/logical/tablesync.c:892 +#, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" -msgstr "no se pudo obtener información de la tabla «%s.%s» del editor (publisher): %s" +msgstr "no se pudo obtener información de la lista de columnas para la tabla «%s.%s» del publicador: %s" -#: replication/logical/tablesync.c:1040 -#, fuzzy, c-format -#| msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" +#: replication/logical/tablesync.c:1071 +#, c-format msgid "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: %s" -msgstr "no se pudo obtener información de la tabla «%s.%s» del editor (publisher): %s" +msgstr "no se pudo obtener información de la cláusula WHERE para la tabla «%s.%s» del publicador: %s" -#: replication/logical/tablesync.c:1191 +#: replication/logical/tablesync.c:1230 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "no se pudo iniciar la copia de contenido inicial para de la tabla «%s.%s»: %s" -#: replication/logical/tablesync.c:1398 replication/logical/worker.c:2387 -#, c-format -msgid "user \"%s\" cannot replicate into relation with row-level security enabled: \"%s\"" -msgstr "" - -#: replication/logical/tablesync.c:1413 +#: replication/logical/tablesync.c:1429 #, c-format msgid "table copy could not start transaction on publisher: %s" -msgstr "la copia de la tabla no pudo iniciar una transacción en el editor (publisher): %s" +msgstr "la copia de la tabla no pudo iniciar una transacción en el publicador: %s" -#: replication/logical/tablesync.c:1455 +#: replication/logical/tablesync.c:1472 #, c-format msgid "replication origin \"%s\" already exists" msgstr "el origen de replicación «%s» ya existe" -#: replication/logical/tablesync.c:1468 +#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 #, c-format -msgid "table copy could not finish transaction on publisher: %s" -msgstr "la copia de tabla no pudo terminar la transacción en el editor (publisher): %s" - -#: replication/logical/worker.c:445 -#, fuzzy -#| msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" -msgid "logical replication table synchronization worker" -msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" +msgid "user \"%s\" cannot replicate into relation with row-level security enabled: \"%s\"" +msgstr "el usuario «%s» no puede replicar en relaciones con seguridad de registros activa: «%s»" -#: replication/logical/worker.c:449 -#, fuzzy -#| msgid "out of logical replication worker slots" -msgid "logical replication apply worker" -msgstr "se agotaron los slots de procesos ayudantes de replicación" +#: replication/logical/tablesync.c:1518 +#, c-format +msgid "table copy could not finish transaction on publisher: %s" +msgstr "la copia de tabla no pudo terminar la transacción en el publicador: %s" -#: replication/logical/worker.c:512 -#, fuzzy, c-format -#| msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" +#: replication/logical/worker.c:481 +#, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop" -msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá" -#: replication/logical/worker.c:514 +#: replication/logical/worker.c:483 #, c-format msgid "Cannot handle streamed replication transactions using parallel apply workers until all tables have been synchronized." -msgstr "" +msgstr "No se puede gestionar replicación en flujo usando procesos en paralelo hasta que todas las tablas han sido sincronizadas." -#: replication/logical/worker.c:876 replication/logical/worker.c:991 +#: replication/logical/worker.c:852 replication/logical/worker.c:967 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "el formato de datos binarios es incorrecto en columna de replicación lógica %d" -#: replication/logical/worker.c:2526 +#: replication/logical/worker.c:2500 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" -msgstr "el editor (publisher) no envía la columna identidad de réplica esperada por la relación de destino de replicación lógica «%s.%s»" +msgstr "el publicador no envía la columna identidad de réplica esperada por la relación de destino de replicación lógica «%s.%s»" -#: replication/logical/worker.c:2533 +#: replication/logical/worker.c:2507 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "la relación destino de replicación lógica «%s.%s» no tiene índice REPLICA IDENTITY ni PRIMARY KEY y la relación publicada no tiene REPLICA IDENTITY FULL" -#: replication/logical/worker.c:3384 -#, fuzzy, c-format -#| msgid "invalid standby message type \"%c\"" -msgid "invalid logical replication message type \"%c\"" -msgstr "el tipo «%c» de mensaje del standby no es válido" +#: replication/logical/worker.c:3371 +#, c-format +msgid "invalid logical replication message type \"??? (%d)\"" +msgstr "tipo de mensaje de replicación lógica no válido «??? (%d)»" -#: replication/logical/worker.c:3556 +#: replication/logical/worker.c:3543 #, c-format msgid "data stream from publisher has ended" msgstr "el flujo de datos del publisher ha terminado" -#: replication/logical/worker.c:3707 +#: replication/logical/worker.c:3697 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "terminando el proceso de replicación lógica debido a que se agotó el tiempo de espera" -#. translator: first %s is the name of logical replication worker -#: replication/logical/worker.c:3902 +#: replication/logical/worker.c:3891 #, c-format -msgid "%s for subscription \"%s\" will stop because the subscription was removed" -msgstr "" +msgid "logical replication worker for subscription \"%s\" will stop because the subscription was removed" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue eliminada" -#. translator: first %s is the name of logical replication worker -#: replication/logical/worker.c:3916 +#: replication/logical/worker.c:3905 #, c-format -msgid "%s for subscription \"%s\" will stop because the subscription was disabled" -msgstr "" +msgid "logical replication worker for subscription \"%s\" will stop because the subscription was disabled" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue inhabilitada" -#: replication/logical/worker.c:3947 -#, fuzzy, c-format -#| msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" +#: replication/logical/worker.c:3936 +#, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because of a parameter change" -msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" +msgstr "el ayudante paralelo «apply» de replicación lógica para la suscripción «%s» se reiniciará por un cambio de parámetro" -#. translator: first %s is the name of logical replication worker -#: replication/logical/worker.c:3952 +#: replication/logical/worker.c:3940 #, c-format -msgid "%s for subscription \"%s\" will restart because of a parameter change" -msgstr "" +msgid "logical replication worker for subscription \"%s\" will restart because of a parameter change" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará por un cambio de parámetro" -#. translator: %s is the name of logical replication worker -#: replication/logical/worker.c:4476 +#: replication/logical/worker.c:3954 #, c-format -msgid "%s for subscription %u will not start because the subscription was removed during startup" -msgstr "" +msgid "logical replication parallel apply worker for subscription \"%s\" will stop because the subscription owner's superuser privileges have been revoked" +msgstr "el proceso “apply” paralelo de replicación lógica para la suscripción «%s» se detendrá porque los privilegios de superusuario del dueño de la suscripción han sido revocados" -#. translator: first %s is the name of logical replication worker -#: replication/logical/worker.c:4492 +#: replication/logical/worker.c:3958 #, c-format -msgid "%s for subscription \"%s\" will not start because the subscription was disabled during startup" -msgstr "" +msgid "logical replication worker for subscription \"%s\" will restart because the subscription owner's superuser privileges have been revoked" +msgstr "el proceso de replicación lógica para la suscripción «%s» se reiniciará porque los privilegios de superusuario del dueño de la suscripción han sido revocados" + +#: replication/logical/worker.c:4478 +#, c-format +msgid "subscription has no replication slot set" +msgstr "la suscripción no tiene un slot de replicación establecido" + +#: replication/logical/worker.c:4591 +#, c-format +msgid "logical replication worker for subscription %u will not start because the subscription was removed during startup" +msgstr "el ayudante «apply» de replicación lógica para la suscripción %u no se iniciará porque la suscripción fue eliminada durante el inicio" + +#: replication/logical/worker.c:4607 +#, c-format +msgid "logical replication worker for subscription \"%s\" will not start because the subscription was disabled during startup" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» no se iniciará porque la suscripción fue inhabilitada durante el inicio" -#: replication/logical/worker.c:4509 +#: replication/logical/worker.c:4631 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" -#. translator: first %s is the name of logical replication worker -#: replication/logical/worker.c:4515 -#, fuzzy, c-format -#| msgid "subscription \"%s\" already exists" -msgid "%s for subscription \"%s\" has started" -msgstr "la suscripción «%s» ya existe" - -#: replication/logical/worker.c:4590 +#: replication/logical/worker.c:4636 #, c-format -msgid "subscription has no replication slot set" -msgstr "la suscripción no tiene un slot de replicación establecido" +msgid "logical replication apply worker for subscription \"%s\" has started" +msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» ha iniciado" -#: replication/logical/worker.c:4757 -#, fuzzy, c-format -#| msgid "cursor \"%s\" has been declared but not opened" +#: replication/logical/worker.c:4758 +#, c-format msgid "subscription \"%s\" has been disabled because of an error" -msgstr "el cursor «%s» fue declarado pero no abierto" +msgstr "la suscripción «%s» ha sido inhabilitada debido a un error" -#: replication/logical/worker.c:4805 -#, fuzzy, c-format -#| msgid "cannot create logical replication slot in transaction that has performed writes" +#: replication/logical/worker.c:4806 +#, c-format msgid "logical replication starts skipping transaction at LSN %X/%X" -msgstr "no se puede crear un slot de replicación lógica en una transacción que ha efectuado escrituras" +msgstr "iniciando el ignorado en la replicación lógica de la transacción en el LSN %X/%X" -#: replication/logical/worker.c:4819 +#: replication/logical/worker.c:4820 #, c-format msgid "logical replication completed skipping transaction at LSN %X/%X" -msgstr "" +msgstr "finalizó el ignorado en la replicación lógica de la transacción en el LSN %X/%X" -#: replication/logical/worker.c:4901 -#, fuzzy, c-format -#| msgid "subscription \"%s\" already exists" +#: replication/logical/worker.c:4902 +#, c-format msgid "skip-LSN of subscription \"%s\" cleared" -msgstr "la suscripción «%s» ya existe" +msgstr "el «skip-LSN» de la suscripción «%s» ha sido borrado" -#: replication/logical/worker.c:4902 +#: 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 "" +msgstr "La ubicación de WAL (LSN) de término %X/%X de la transacción remota no coincidió con el skip-LSN %X/%X." -#: replication/logical/worker.c:4928 +#: replication/logical/worker.c:4940 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\"" -msgstr "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s»" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:4944 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u" -msgstr "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» en la transacción %u" -#: replication/logical/worker.c:4937 +#: 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 "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» en la transacción %u, concluida en %X/%X" -#: replication/logical/worker.c:4948 +#: 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 "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación destino de replicación «%s.%s» en la transacción %u" -#: replication/logical/worker.c:4955 +#: 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 "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» en la transacción %u, concluida en %X/%X" -#: replication/logical/worker.c:4966 +#: 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 "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» columna «%s» en la transacción %u" -#: replication/logical/worker.c:4974 +#: 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 "" +msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» columna «%s» en la transacción %u, concluida en %X/%X" -#: replication/pgoutput/pgoutput.c:318 +#: replication/pgoutput/pgoutput.c:322 #, c-format msgid "invalid proto_version" msgstr "proto_version no válido" -#: replication/pgoutput/pgoutput.c:323 +#: replication/pgoutput/pgoutput.c:327 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version «%s» fuera de rango" -#: replication/pgoutput/pgoutput.c:340 +#: replication/pgoutput/pgoutput.c:344 #, c-format msgid "invalid publication_names syntax" msgstr "sintaxis de publication_names no válida" -#: replication/pgoutput/pgoutput.c:443 +#: replication/pgoutput/pgoutput.c:414 replication/pgoutput/pgoutput.c:418 #, c-format -msgid "client sent proto_version=%d but server only supports protocol %d or lower" -msgstr "" +msgid "option \"%s\" missing" +msgstr "falta la opción «%s»" -#: replication/pgoutput/pgoutput.c:449 -#, fuzzy, c-format -#| msgid "requested proto_version=%d does not support streaming, need %d or higher" -msgid "client sent proto_version=%d but server only supports protocol %d or higher" -msgstr "la proto_version=%d no soporta flujo, se necesita %d o superior" +#: replication/pgoutput/pgoutput.c:478 +#, c-format +msgid "client sent proto_version=%d but server only supports protocol %d or lower" +msgstr "el cliente envió proto_version=%d pero el servidor sólo soporta el protocolo %d o inferior" -#: replication/pgoutput/pgoutput.c:455 +#: replication/pgoutput/pgoutput.c:484 #, c-format -msgid "publication_names parameter missing" -msgstr "parámetro publication_names faltante" +msgid "client sent proto_version=%d but server only supports protocol %d or higher" +msgstr "el cliente envió proto_version=%d pero el servidor sólo soporta el protocolo %d o superior" -#: replication/pgoutput/pgoutput.c:469 +#: replication/pgoutput/pgoutput.c:499 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "la proto_version=%d no soporta flujo, se necesita %d o superior" -#: replication/pgoutput/pgoutput.c:475 -#, fuzzy, c-format -#| msgid "requested proto_version=%d does not support streaming, need %d or higher" +#: replication/pgoutput/pgoutput.c:505 +#, c-format msgid "requested proto_version=%d does not support parallel streaming, need %d or higher" -msgstr "la proto_version=%d no soporta flujo, se necesita %d o superior" +msgstr "la proto_version=%d solicitada no soporta flujo en paralelo, se necesita %d o superior" -#: replication/pgoutput/pgoutput.c:480 +#: replication/pgoutput/pgoutput.c:510 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "se solicitó flujo, pero no está soportado por plugin de salida" -#: replication/pgoutput/pgoutput.c:497 -#, fuzzy, c-format -#| msgid "requested proto_version=%d does not support streaming, need %d or higher" +#: replication/pgoutput/pgoutput.c:524 +#, c-format msgid "requested proto_version=%d does not support two-phase commit, need %d or higher" -msgstr "la proto_version=%d no soporta flujo, se necesita %d o superior" +msgstr "la proto_version=%d solicitada no soporta «two-phase commit», se necesita %d o superior" -#: replication/pgoutput/pgoutput.c:502 -#, fuzzy, c-format -#| msgid "streaming requested, but not supported by output plugin" +#: replication/pgoutput/pgoutput.c:529 +#, c-format msgid "two-phase commit requested, but not supported by output plugin" -msgstr "se solicitó flujo, pero no está soportado por plugin de salida" +msgstr "«two-phase commit» fue solicitado, pero no está soportado por el plugin de salida" -#: replication/slot.c:207 +#: replication/slot.c:260 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "el nombre de slot de replicación «%s» es demasiado corto" -#: replication/slot.c:216 +#: replication/slot.c:269 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "el nombre de slot de replicación «%s» es demasiado largo" -#: replication/slot.c:229 +#: replication/slot.c:282 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "el nombre de slot de replicación «%s» contiene caracteres no válidos" -#: replication/slot.c:231 +#: replication/slot.c:284 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Los nombres de slots de replicación sólo pueden contener letras minúsculas, números y el carácter «_»." -#: replication/slot.c:285 +#: replication/slot.c:333 +#, c-format +msgid "cannot enable failover for a replication slot created on the standby" +msgstr "no se puede activar “failover” para un slot de replicación creado en el standby" + +#: replication/slot.c:345 replication/slot.c:849 +#, c-format +msgid "cannot enable failover for a temporary replication slot" +msgstr "no se puede activar “failover” para un slot de replicación temporal" + +#: replication/slot.c:370 #, c-format msgid "replication slot \"%s\" already exists" msgstr "el slot de replicación «%s» ya existe" -#: replication/slot.c:295 +#: replication/slot.c:380 #, c-format msgid "all replication slots are in use" msgstr "todos los slots de replicación están en uso" -#: replication/slot.c:296 +#: replication/slot.c:381 #, c-format -msgid "Free one or increase max_replication_slots." -msgstr "Libere uno o incremente max_replication_slots." +msgid "Free one or increase \"max_replication_slots\"." +msgstr "Libere uno o incremente «max_replication_slots»." -#: replication/slot.c:474 replication/slotfuncs.c:736 -#: utils/activity/pgstat_replslot.c:55 utils/adt/genfile.c:774 +#: 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 "no existe el slot de replicación «%s»" -#: replication/slot.c:520 replication/slot.c:1110 +#: replication/slot.c:606 replication/slot.c:1337 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "el slot de replicación «%s» está activo para el PID %d" -#: replication/slot.c:756 replication/slot.c:1638 replication/slot.c:2021 +#: replication/slot.c:638 +#, c-format +msgid "acquired logical replication slot \"%s\"" +msgstr "se adquirió el slot de replicación lógica «%s»" + +#: replication/slot.c:640 +#, c-format +msgid "acquired physical replication slot \"%s\"" +msgstr "se adquirió el slot de replicación física «%s»" + +#: replication/slot.c:729 +#, c-format +msgid "released logical replication slot \"%s\"" +msgstr "se liberó el slot de replicación lógica «%s»" + +#: replication/slot.c:731 +#, c-format +msgid "released physical replication slot \"%s\"" +msgstr "se liberó el slot de replicación física «%s»" + +#: replication/slot.c:797 +#, c-format +msgid "cannot drop replication slot \"%s\"" +msgstr "no se puede eliminar el slot de replicación «%s»" + +#: replication/slot.c:816 +#, c-format +msgid "cannot use %s with a physical replication slot" +msgstr "no se puede usar %s con un slot de replicación física" + +#: replication/slot.c:828 +#, c-format +msgid "cannot alter replication slot \"%s\"" +msgstr "no se puede alterar el slot de replicación «%s»" + +#: replication/slot.c:838 +#, c-format +msgid "cannot enable failover for a replication slot on the standby" +msgstr "no se puede activar el “failover” para un slot de replicación en el standby" + +#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 #, c-format msgid "could not remove directory \"%s\"" msgstr "no se pudo eliminar el directorio «%s»" -#: replication/slot.c:1145 +#: replication/slot.c:1372 #, c-format -msgid "replication slots can only be used if max_replication_slots > 0" -msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0" +msgid "replication slots can only be used if \"max_replication_slots\" > 0" +msgstr "los slots de replicación sólo pueden usarse si «max_replication_slots» > 0" # FIXME see logical.c:81 -#: replication/slot.c:1150 +#: replication/slot.c:1377 #, c-format -msgid "replication slots can only be used if wal_level >= replica" -msgstr "los slots de replicación sólo pueden usarse si wal_level >= replica" +msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" +msgstr "los slots de replicación sólo pueden usarse si «wal_level» >= «replica»" -#: replication/slot.c:1162 -#, fuzzy, c-format -#| msgid "permission denied for publication %s" +#: replication/slot.c:1389 +#, c-format msgid "permission denied to use replication slots" -msgstr "permiso denegado a la publicación %s" +msgstr "permiso denegado a usar slots de replicación" -#: replication/slot.c:1163 +#: replication/slot.c:1390 #, c-format msgid "Only roles with the %s attribute may use replication slots." -msgstr "" +msgstr "Sólo roles con el atributo %s pueden usar slots de replicación." -#: replication/slot.c:1267 +#: replication/slot.c:1498 #, c-format -msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." -msgstr "" +msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." +msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." +msgstr[0] "El restart_lsn %X/%X del slot excede el límite por %llu byte." +msgstr[1] "El restart_lsn %X/%X del slot excede el límite por %llu bytes." -#: replication/slot.c:1272 -#, fuzzy, c-format -#| msgid "Key %s conflicts with existing key %s." +#: replication/slot.c:1506 +#, c-format msgid "The slot conflicted with xid horizon %u." -msgstr "La llave %s está en conflicto con la llave existente %s." +msgstr "El slot estaba en conflicto con el horizonte de XID %u." # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1277 -#, fuzzy -#| msgid "logical decoding requires wal_level >= logical" -msgid "Logical decoding on standby requires wal_level >= logical on the primary server." -msgstr "la decodificación lógica requiere wal_level >= logical" +#: replication/slot.c:1511 +msgid "Logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary server." +msgstr "La decodificación lógica en standby requiere «wal_level» >= «logical» en el primario." -#: replication/slot.c:1285 +#: replication/slot.c:1519 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "terminando el proceso %d para liberar el slot de replicación «%s»" -#: replication/slot.c:1287 -#, fuzzy, c-format -#| msgid "creating replication slot \"%s\"" +#: replication/slot.c:1521 +#, c-format msgid "invalidating obsolete replication slot \"%s\"" -msgstr "creando el slot de replicación «%s»" +msgstr "invalidando el slot de replicación obsoleto «%s»" -#: replication/slot.c:1290 -#, fuzzy, c-format -#| msgid "You might need to increase max_worker_processes." -msgid "You might need to increase max_slot_wal_keep_size." -msgstr "Puede ser necesario incrementar max_worker_processes." - -#: replication/slot.c:1959 +#: replication/slot.c:2249 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "el archivo de slot de replicación «%s» tiene número mágico erróneo: %u en lugar de %u" -#: replication/slot.c:1966 +#: replication/slot.c:2256 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "el archivo de slot de replicación «%s» tiene versión no soportada %u" -#: replication/slot.c:1973 +#: replication/slot.c:2263 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "el archivo de slot de replicación «%s» tiene largo corrupto %u" -#: replication/slot.c:2009 +#: replication/slot.c:2299 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidente en archivo de slot de replicación «%s»: es %u, debería ser %u" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:2043 +#: replication/slot.c:2333 #, c-format -msgid "logical replication slot \"%s\" exists, but wal_level < logical" -msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" +msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" +msgstr "existe el slot de replicación lógica «%s», pero «wal_level» < «logical»" -#: replication/slot.c:2045 +#: replication/slot.c:2335 #, c-format -msgid "Change wal_level to be logical or higher." -msgstr "Cambie wal_level a logical o superior." +msgid "Change \"wal_level\" to be \"logical\" or higher." +msgstr "Cambie «wal_level» a «logical» o superior." # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:2049 +#: replication/slot.c:2339 #, c-format -msgid "physical replication slot \"%s\" exists, but wal_level < replica" -msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" +msgid "physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" +msgstr "existe el slot de replicación lógica «%s», pero «wal_level» < «replica»" # <> hello vim -#: replication/slot.c:2051 +#: replication/slot.c:2341 #, c-format -msgid "Change wal_level to be replica or higher." -msgstr "Cambie wal_level a replica o superior." +msgid "Change \"wal_level\" to be \"replica\" or higher." +msgstr "Cambie «wal_level» a «replica» o superior." -#: replication/slot.c:2085 +#: replication/slot.c:2383 #, c-format msgid "too many replication slots active before shutdown" msgstr "demasiados slots de replicación activos antes del apagado" -#: replication/slotfuncs.c:601 +#: replication/slot.c:2458 +#, c-format +msgid "\"%s\" is not a physical replication slot" +msgstr "«%s» no es un slot de replicación física" + +#: replication/slot.c:2635 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "el slot de replicación «%s» especificado en el parámetro «%s» no existe" + +#: replication/slot.c:2637 replication/slot.c:2671 replication/slot.c:2686 +#, c-format +msgid "Logical replication is waiting on the standby associated with replication slot \"%s\"." +msgstr "La replicación lógica está esperando al standby asociado con el slot de replicación «%s»." + +#: replication/slot.c:2639 +#, c-format +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "Cree el slot de replicación «%s» o corrija el parámetro «%s»." + +#: replication/slot.c:2649 +#, c-format +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "no se puede especificar el slot de replicación lógica «%s» en el parámetro «%s»" + +#: replication/slot.c:2651 +#, c-format +msgid "Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "La replicación lógica está esperando a una corrección en el slot de replicación «%s»." + +#: replication/slot.c:2653 +#, c-format +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "Elimine el slot de replicación lógica «%s» del parámetro «%s»." + +#: replication/slot.c:2669 +#, c-format +msgid "physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated" +msgstr "el slot de replicación física «%s» especificado en el parámetro «%s» ha sido invalidado" + +#: replication/slot.c:2673 +#, c-format +msgid "Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "Elimine y vuelva a crear el slot de replicación «%s», o corrija el parámetro «%s»." + +#: replication/slot.c:2684 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not have active_pid" +msgstr "el slot de replicación «%s» especificado en el parámetro «%s» no tiene active_pid" + +#: replication/slot.c:2688 +#, c-format +msgid "Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "Inicie el standby asociado con el slot de replicación «%s», o corrija el parámetro «%s»." + +#: replication/slotfuncs.c:526 #, c-format msgid "invalid target WAL LSN" msgstr "el LSN de wal de destino no es válido" -#: replication/slotfuncs.c:623 +#: replication/slotfuncs.c:548 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "no se puede avanzar el slot de replicación «%s»" -#: replication/slotfuncs.c:625 +#: replication/slotfuncs.c:550 #, c-format msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Este slot nunca ha reservado WAL previamente, o ha sido invalidado." -#: replication/slotfuncs.c:641 +#: replication/slotfuncs.c:566 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "no puede avanzar un slot de replicación a %X/%X, el mínimo es %X/%X" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:673 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "no se puede copiar el slot de replicación física «%s» como slot de replicación lógica" -#: replication/slotfuncs.c:750 +#: replication/slotfuncs.c:675 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "no se puede copiar el slot de replicación lógica «%s» como slot de replicación física" -#: replication/slotfuncs.c:757 +#: replication/slotfuncs.c:682 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "no puede copiar un slot de replicación que no ha reservado WAL" -#: replication/slotfuncs.c:834 +#: replication/slotfuncs.c:768 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "no se pudo copiar el slot de replicación «%s»" -#: replication/slotfuncs.c:836 +#: replication/slotfuncs.c:770 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "El slot de replicación de origen fue modificado incompatiblemente durante la operación de copia." -#: replication/slotfuncs.c:842 +#: replication/slotfuncs.c:776 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "no se puede copiar el slot de replicación lógica no terminado «%s»" -#: replication/slotfuncs.c:844 +#: replication/slotfuncs.c:778 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Reintente cuando el confirmed_flush_lsn del slot de replicación de origen sea válido." -#: replication/syncrep.c:262 +# FIXME see logical.c:81 +#: replication/slotfuncs.c:877 +#, c-format +msgid "replication slots can only be synchronized to a standby server" +msgstr "los slots de replicación sólo pueden sincronizarse a un servidor standby" + +#: replication/syncrep.c:261 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "cancelando la espera para la replicación sincrónica y terminando la conexión debido a una orden del administrador" -#: replication/syncrep.c:263 replication/syncrep.c:280 +#: replication/syncrep.c:262 replication/syncrep.c:279 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "La transacción ya fue comprometida localmente, pero pudo no haber sido replicada al standby." -#: replication/syncrep.c:279 +#: replication/syncrep.c:278 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "cancelando espera para la replicación sincrónica debido a una petición del usuario" -#: replication/syncrep.c:486 +#: replication/syncrep.c:485 #, c-format -msgid "standby \"%s\" is now a synchronous standby with priority %u" -msgstr "el standby «%s» es ahora un standby sincrónico con prioridad %u" +msgid "standby \"%s\" is now a synchronous standby with priority %d" +msgstr "el standby «%s» es ahora un standby sincrónico con prioridad %d" -#: replication/syncrep.c:490 +#: replication/syncrep.c:489 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "el standby «%s» es ahora un candidato para standby sincrónico de quórum" -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1013 #, c-format -msgid "synchronous_standby_names parser failed" -msgstr "falló la interpretación de synchronous_standby_names" +msgid "\"synchronous_standby_names\" parser failed" +msgstr "falló la interpretación de «synchronous_standby_names»" -#: replication/syncrep.c:1025 +#: replication/syncrep.c:1019 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "el argumento de standby sincrónicos (%d) debe ser mayor que cero" -#: replication/walreceiver.c:180 +#: replication/walreceiver.c:176 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "terminando el proceso walreceiver debido a una orden del administrador" -#: replication/walreceiver.c:305 -#, c-format -msgid "could not connect to the primary server: %s" -msgstr "no se pudo conectar al servidor primario: %s" - -#: replication/walreceiver.c:352 +#: replication/walreceiver.c:354 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "el identificador de sistema difiere entre el primario y el standby" -#: replication/walreceiver.c:353 +#: replication/walreceiver.c:355 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "El identificador del primario es %s, el identificador del standby es %s." -#: replication/walreceiver.c:364 +#: replication/walreceiver.c:366 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "el timeline más alto del primario, %u, está más atrás que el timeline de recuperación %u" -#: replication/walreceiver.c:417 +#: replication/walreceiver.c:419 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "iniciando el flujo de WAL desde el primario en %X/%X en el timeline %u" -#: replication/walreceiver.c:421 +#: replication/walreceiver.c:423 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "reiniciando el flujo de WAL en %X/%X en el timeline %u" -#: replication/walreceiver.c:457 +#: replication/walreceiver.c:458 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "no se puede continuar el flujo de WAL; la recuperación ya ha terminado" -#: replication/walreceiver.c:501 +#: replication/walreceiver.c:502 #, c-format msgid "replication terminated by primary server" msgstr "replicación terminada por el servidor primario" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:503 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Se alcanzó el fin de WAL en el timeline %u en la posición %X/%X." -#: replication/walreceiver.c:592 +#: replication/walreceiver.c:593 #, c-format msgid "terminating walreceiver due to timeout" msgstr "terminando el proceso walreceiver debido a que se agotó el tiempo de espera" -#: replication/walreceiver.c:624 +#: replication/walreceiver.c:625 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "el servidor primario no contiene más WAL en el timeline %u solicitado" -#: replication/walreceiver.c:640 replication/walreceiver.c:1066 -#, fuzzy, c-format -#| msgid "could not close shared memory segment \"%s\": %m" +#: replication/walreceiver.c:641 replication/walreceiver.c:1071 +#, c-format msgid "could not close WAL segment %s: %m" -msgstr "no se pudo cerrar el segmento de memoria compartida «%s»: %m" +msgstr "no se pudo cerrar el segmento de WAL %s: %m" -#: replication/walreceiver.c:759 +#: replication/walreceiver.c:760 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "trayendo el archivo de historia del timeline para el timeline %u desde el servidor primario" -#: replication/walreceiver.c:954 -#, fuzzy, c-format -#| msgid "could not write to log file %s at offset %u, length %zu: %m" -msgid "could not write to WAL segment %s at offset %u, length %lu: %m" -msgstr "no se pudo escribir archivo de registro %s en la posición %u, largo %zu: %m" +#: replication/walreceiver.c:959 +#, c-format +msgid "could not write to WAL segment %s at offset %d, length %lu: %m" +msgstr "no se pudo escribir al segmento de WAL %s en la posición %d, largo %lu: %m" -#: replication/walsender.c:519 -#, fuzzy, c-format -#| msgid "cannot use relation \"%s.%s\" as logical replication target" +#: replication/walsender.c:531 +#, c-format msgid "cannot use %s with a logical replication slot" -msgstr "no se puede usar la relación «%s.%s» como destino de replicación lógica" +msgstr "no se puede usar %s con un slot de replicación lógica" -#: replication/walsender.c:623 storage/smgr/md.c:1526 +#: replication/walsender.c:635 storage/smgr/md.c:1735 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al fin del archivo «%s»: %m" -#: replication/walsender.c:627 +#: replication/walsender.c:639 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al comienzo del archivo «%s»: %m" -#: replication/walsender.c:704 +#: replication/walsender.c:853 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "no se puede usar un slot de replicación lógica para replicación física" -#: replication/walsender.c:770 +#: replication/walsender.c:919 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "el punto de inicio solicitado %X/%X del timeline %u no está en la historia de este servidor" -#: replication/walsender.c:773 +#: replication/walsender.c:922 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "La historia de este servidor bifurcó desde el timeline %u en %X/%X." -#: replication/walsender.c:817 +#: replication/walsender.c:966 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "el punto de inicio solicitado %X/%X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%X" -#: replication/walsender.c:1010 -#, fuzzy, c-format -#| msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" +#: replication/walsender.c:1160 +#, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" -msgstr "valor no reconocido para la opción de EXPLAIN «%s»: «%s»" +msgstr "valor no reconocido para la opción de CREATE_REPLICATION_SLOT «%s»: «%s»" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1095 +#: replication/walsender.c:1266 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s no debe ser ejecutado dentro de una transacción" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1105 +#: replication/walsender.c:1276 #, c-format msgid "%s must be called inside a transaction" msgstr "%s no debe ser ejecutado dentro de una transacción" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1111 +#: replication/walsender.c:1282 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s debe llamarse en una transacción de modo de aislamiento REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1116 -#, fuzzy, c-format -#| msgid "%s must be called inside a transaction" -msgid "%s must be called in a read only transaction" -msgstr "%s no debe ser ejecutado dentro de una transacción" +#: replication/walsender.c:1287 +#, c-format +msgid "%s must be called in a read-only transaction" +msgstr "%s debe ser ejecutado en una transacción de sólo lectura" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1122 +#: replication/walsender.c:1293 #, c-format msgid "%s must be called before any query" msgstr "%s debe ser llamado antes de cualquier consulta" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1128 +#: replication/walsender.c:1299 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s no está permitido en una subtransacción" -#: replication/walsender.c:1275 +#: replication/walsender.c:1472 #, c-format msgid "terminating walsender process after promotion" msgstr "terminando el proceso walsender luego de la promoción" -#: replication/walsender.c:1696 +#: replication/walsender.c:2000 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" -msgstr "no puede ejecutar nuevas órdenes mientras el «WAL sender» está en modo de apagarse" +msgstr "no puede ejecutar nuevas órdenes mientras el “WAL sender” está en modo de apagarse" -#: replication/walsender.c:1731 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" -msgstr "no puede ejecutar órdenes SQL en el «WAL sender» para replicación física" +msgstr "no puede ejecutar órdenes SQL en el “WAL sender” para replicación física" -#: replication/walsender.c:1764 +#: replication/walsender.c:2068 #, c-format msgid "received replication command: %s" msgstr "se recibió orden de replicación: %s" -#: replication/walsender.c:1772 tcop/fastpath.c:209 tcop/postgres.c:1138 -#: tcop/postgres.c:1496 tcop/postgres.c:1736 tcop/postgres.c:2210 -#: tcop/postgres.c:2648 tcop/postgres.c:2726 +#: 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 "transacción abortada, las órdenes serán ignoradas hasta el fin de bloque de transacción" -#: replication/walsender.c:1914 replication/walsender.c:1949 +#: replication/walsender.c:2233 replication/walsender.c:2268 #, c-format msgid "unexpected EOF on standby connection" msgstr "se encontró fin de archivo inesperado en la conexión standby" -#: replication/walsender.c:1937 +#: replication/walsender.c:2256 #, c-format msgid "invalid standby message type \"%c\"" msgstr "el tipo «%c» de mensaje del standby no es válido" -#: replication/walsender.c:2026 +#: replication/walsender.c:2345 #, c-format msgid "unexpected message type \"%c\"" msgstr "mensaje de tipo «%c» inesperado" -#: replication/walsender.c:2439 +#: replication/walsender.c:2759 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:842 +#: rewrite/rewriteDefine.c:104 rewrite/rewriteDefine.c:835 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "ya existe una regla llamada «%s» para la relación «%s»" -#: rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:780 -#, fuzzy, c-format -#| msgid "portal \"%s\" cannot be run" +#: rewrite/rewriteDefine.c:261 rewrite/rewriteDefine.c:773 +#, c-format msgid "relation \"%s\" cannot have rules" -msgstr "el portal «%s» no puede ser ejecutado" +msgstr "la relación «%s» no puede tener reglas" -#: rewrite/rewriteDefine.c:299 +#: rewrite/rewriteDefine.c:292 #, c-format msgid "rule actions on OLD are not implemented" msgstr "las acciones de regla en OLD no están implementadas" -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:293 #, c-format msgid "Use views or triggers instead." msgstr "Use vistas o triggers en su lugar." -#: rewrite/rewriteDefine.c:304 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on NEW are not implemented" msgstr "las acciones de regla en NEW no están implementadas" -#: rewrite/rewriteDefine.c:305 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use triggers instead." msgstr "Use triggers en su lugar." -#: rewrite/rewriteDefine.c:319 -#, fuzzy, c-format -#| msgid "cursor \"%s\" is not a SELECT query" +#: rewrite/rewriteDefine.c:312 +#, c-format msgid "relation \"%s\" cannot have ON SELECT rules" -msgstr "el cursor «%s» no es una orden SELECT" +msgstr "la relación «%s» no puede tener reglas ON SELECT" -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "las reglas INSTEAD NOTHING en SELECT no están implementadas" -#: rewrite/rewriteDefine.c:330 +#: rewrite/rewriteDefine.c:323 #, c-format msgid "Use views instead." msgstr "Use vistas en su lugar." -#: rewrite/rewriteDefine.c:338 +#: rewrite/rewriteDefine.c:331 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "las reglas de múltiples acciones en SELECT no están implementadas" -#: rewrite/rewriteDefine.c:348 +#: rewrite/rewriteDefine.c:341 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "las reglas en SELECT deben tener una acción INSTEAD SELECT" -#: rewrite/rewriteDefine.c:356 +#: rewrite/rewriteDefine.c:349 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "las reglas en SELECT no deben contener sentencias que modifiquen datos en WITH" -#: rewrite/rewriteDefine.c:364 +#: rewrite/rewriteDefine.c:357 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "las calificaciones de eventos no están implementadas para las reglas en SELECT" -#: rewrite/rewriteDefine.c:391 +#: rewrite/rewriteDefine.c:384 #, c-format msgid "\"%s\" is already a view" msgstr "«%s» ya es una vista" -#: rewrite/rewriteDefine.c:415 +#: rewrite/rewriteDefine.c:408 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "la regla de vista para «%s» debe llamarse «%s»" -#: rewrite/rewriteDefine.c:442 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "no se pueden tener múltiples listas RETURNING en una regla" -#: rewrite/rewriteDefine.c:447 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "listas de RETURNING no están soportadas en reglas condicionales" -#: rewrite/rewriteDefine.c:451 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "listas de RETURNING no están soportadas en reglas que no estén marcadas INSTEAD" -#: rewrite/rewriteDefine.c:465 -#, fuzzy, c-format -#| msgid "view rule for \"%s\" must be named \"%s\"" +#: rewrite/rewriteDefine.c:458 +#, c-format msgid "non-view rule for \"%s\" must not be named \"%s\"" -msgstr "la regla de vista para «%s» debe llamarse «%s»" +msgstr "la regla que no es de vista para «%s» no debe llamarse «%s»" -#: rewrite/rewriteDefine.c:539 +#: rewrite/rewriteDefine.c:532 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "la lista de destinos en la regla de SELECT tiene demasiadas entradas" -#: rewrite/rewriteDefine.c:540 +#: rewrite/rewriteDefine.c:533 #, c-format msgid "RETURNING list has too many entries" msgstr "la lista de RETURNING tiene demasiadas entradas" -#: rewrite/rewriteDefine.c:567 +#: rewrite/rewriteDefine.c:560 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "no se puede convertir en vista una relación que contiene columnas eliminadas" -#: rewrite/rewriteDefine.c:568 +#: rewrite/rewriteDefine.c:561 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "no se puede crear una lista RETURNING para una relación que contiene columnas eliminadas" -#: rewrite/rewriteDefine.c:574 +#: rewrite/rewriteDefine.c:567 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "la entrada de destino %d de la regla de SELECT tiene un nombre de columna diferente de «%s»" -#: rewrite/rewriteDefine.c:576 +#: rewrite/rewriteDefine.c:569 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "La entrada de destino de SELECT tiene nombre «%s»." -#: rewrite/rewriteDefine.c:585 +#: rewrite/rewriteDefine.c:578 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "el destino %d de la regla de SELECT tiene un tipo diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:587 +#: rewrite/rewriteDefine.c:580 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "el destino %d de la lista de RETURNING tiene un tipo diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:590 rewrite/rewriteDefine.c:614 +#: rewrite/rewriteDefine.c:583 rewrite/rewriteDefine.c:607 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "La entrada de destino de SELECT tiene un tipo «%s», pero la columna tiene tipo «%s»." -#: rewrite/rewriteDefine.c:593 rewrite/rewriteDefine.c:618 +#: rewrite/rewriteDefine.c:586 rewrite/rewriteDefine.c:611 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "una entrada de la lista RETURNING tiene tipo %s, pero la columna tiene tipo %s." -#: rewrite/rewriteDefine.c:609 +#: rewrite/rewriteDefine.c:602 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "el destino %d de la regla de SELECT tiene un tamaño diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:611 +#: rewrite/rewriteDefine.c:604 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "el destino %d de la lista RETURNING tiene un tamaño diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:628 +#: rewrite/rewriteDefine.c:621 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "la lista de destinos de regla de SELECT tiene muy pocas entradas" -#: rewrite/rewriteDefine.c:629 +#: rewrite/rewriteDefine.c:622 #, c-format msgid "RETURNING list has too few entries" msgstr "la lista de RETURNING tiene muy pocas entradas" -#: rewrite/rewriteDefine.c:718 rewrite/rewriteDefine.c:833 -#: rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:711 rewrite/rewriteDefine.c:826 +#: rewrite/rewriteSupport.c:108 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "no existe la regla «%s» para la relación «%s»" -#: rewrite/rewriteDefine.c:852 +#: rewrite/rewriteDefine.c:845 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "no se permite cambiar el nombre de una regla ON SELECT" -#: rewrite/rewriteHandler.c:581 +#: rewrite/rewriteHandler.c:588 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "el nombre de consulta WITH «%s» aparece tanto en una acción de regla y en la consulta que está siendo reescrita" -#: rewrite/rewriteHandler.c:608 -#, fuzzy, c-format -#| msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" +#: rewrite/rewriteHandler.c:615 +#, c-format msgid "INSERT ... SELECT rule actions are not supported for queries having data-modifying statements in WITH" -msgstr "las reglas DO INSTEAD NOTIFY no están soportadas para sentencias que modifiquen datos en WITH" +msgstr "las acciones de regla INSERT ... SELECT no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:661 +#: rewrite/rewriteHandler.c:668 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "no se puede usar RETURNING en múltiples reglas" -#: 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 "no se puede insertar un valor no-predeterminado en la columna «%s»" -#: 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 "La columna \"%s\" es una columna de identidad definida como GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:897 +#: rewrite/rewriteHandler.c:904 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Use OVERRIDING SYSTEM VALUE para controlar manualmente." -#: 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 "la columna «%s» sólo puede actualizarse a 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 "hay múltiples asignaciones a la misma columna «%s»" -#: rewrite/rewriteHandler.c:2118 rewrite/rewriteHandler.c:4039 +#: rewrite/rewriteHandler.c:1682 +#, c-format +msgid "MERGE is not supported for relations with rules." +msgstr "MERGE no está soportado para relaciones con reglas." + +#: rewrite/rewriteHandler.c:1722 rewrite/rewriteHandler.c:3262 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "el acceso a la vista no de sistema «%s» está restringido" + +#: rewrite/rewriteHandler.c:2122 rewrite/rewriteHandler.c:4254 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "se detectó recursión infinita en las reglas de la relación «%s»" -#: rewrite/rewriteHandler.c:2203 +#: rewrite/rewriteHandler.c:2227 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "se detectó recursión infinita en la política para la relación «%s»" -#: rewrite/rewriteHandler.c:2523 +#: rewrite/rewriteHandler.c:2589 msgid "Junk view columns are not updatable." msgstr "Las columnas «basura» de vistas no son actualizables." -#: rewrite/rewriteHandler.c:2528 +#: rewrite/rewriteHandler.c:2594 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Las columnas de vistas que no son columnas de su relación base no son actualizables." -#: rewrite/rewriteHandler.c:2531 +#: rewrite/rewriteHandler.c:2597 msgid "View columns that refer to system columns are not updatable." msgstr "Las columnas de vistas que se refieren a columnas de sistema no son actualizables." -#: rewrite/rewriteHandler.c:2534 +#: rewrite/rewriteHandler.c:2600 msgid "View columns that return whole-row references are not updatable." msgstr "Las columnas de vistas que retornan referencias a la fila completa no son actualizables." # XXX a %s here would be nice ... -#: rewrite/rewriteHandler.c:2595 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Las vistas que contienen DISTINCT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2598 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Las vistas que contienen GROUP BY no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2601 +#: rewrite/rewriteHandler.c:2667 msgid "Views containing HAVING are not automatically updatable." msgstr "Las vistas que contienen HAVING no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2604 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Las vistas que contienen UNION, INTERSECT o EXCEPT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2607 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing WITH are not automatically updatable." msgstr "Las vistas que contienen WITH no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2610 +#: rewrite/rewriteHandler.c:2676 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Las vistas que contienen LIMIT u OFFSET no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2622 -msgid "Views that return aggregate functions are not automatically updatable." -msgstr "Las vistas que retornan funciones de agregación no son automáticamente actualizables." +#: rewrite/rewriteHandler.c:2688 +msgid "Views that return aggregate functions are not automatically updatable." +msgstr "Las vistas que retornan funciones de agregación no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c:2691 +msgid "Views that return window functions are not automatically updatable." +msgstr "Las vistas que retornan funciones ventana no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c:2694 +msgid "Views that return set-returning functions are not automatically updatable." +msgstr "Las vistas que retornan funciones-que-retornan-conjuntos no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c: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 "Las vistas que no extraen desde una única tabla o vista no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c:2716 +msgid "Views containing TABLESAMPLE are not automatically updatable." +msgstr "Las vistas que contienen TABLESAMPLE no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c:2740 +msgid "Views that have no updatable columns are not automatically updatable." +msgstr "Las vistas que no tienen columnas actualizables no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c:3121 rewrite/rewriteHandler.c:3156 +#, c-format +msgid "cannot insert into view \"%s\"" +msgstr "no se puede insertar en la vista «%s»" + +#: 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 "Para posibilitar las inserciones en la vista, provea un “trigger” INSTEAD OF INSERT o una regla incodicional ON INSERT DO INSTEAD." + +#: rewrite/rewriteHandler.c:3129 rewrite/rewriteHandler.c:3165 +#, c-format +msgid "cannot update view \"%s\"" +msgstr "no se puede actualizar la vista «%s»" + +#: 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 "Para posibilitar las actualizaciones en la vista, provea un “trigger” INSTEAD OF UPDATE o una regla incondicional ON UPDATE DO INSTEAD." -#: rewrite/rewriteHandler.c:2625 -msgid "Views that return window functions are not automatically updatable." -msgstr "Las vistas que retornan funciones ventana no son automáticamente actualizables." +#: rewrite/rewriteHandler.c:3137 rewrite/rewriteHandler.c:3174 +#, c-format +msgid "cannot delete from view \"%s\"" +msgstr "no se puede eliminar de la vista «%s»" -#: rewrite/rewriteHandler.c:2628 -msgid "Views that return set-returning functions are not automatically updatable." -msgstr "Las vistas que retornan funciones-que-retornan-conjuntos no son automáticamente actualizables." +#: rewrite/rewriteHandler.c: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 "Para posibilitar las eliminaciones en la vista, provea un “trigger” INSTEAD OF DELETE o una regla incondicional ON DELETE DO INSTEAD." -#: rewrite/rewriteHandler.c:2635 rewrite/rewriteHandler.c:2639 -#: rewrite/rewriteHandler.c:2647 -msgid "Views that do not select from a single table or view are not automatically updatable." -msgstr "Las vistas que no extraen desde una única tabla o vista no son automáticamente actualizables." +#: rewrite/rewriteHandler.c:3159 +#, c-format +msgid "To enable inserting into the view using MERGE, provide an INSTEAD OF INSERT trigger." +msgstr "Para posibilitar insertar en la vista usando MERGE, provea un “trigger” INSTEAD OF INSERT." -#: rewrite/rewriteHandler.c:2650 -msgid "Views containing TABLESAMPLE are not automatically updatable." -msgstr "Las vistas que contienen TABLESAMPLE no son automáticamente actualizables." +#: rewrite/rewriteHandler.c:3168 +#, c-format +msgid "To enable updating the view using MERGE, provide an INSTEAD OF UPDATE trigger." +msgstr "Para posibilitar actualizar la vista usando MERGE, provea un “trigger” INSTEAD OF UPDATE." -#: rewrite/rewriteHandler.c:2674 -msgid "Views that have no updatable columns are not automatically updatable." -msgstr "Las vistas que no tienen columnas actualizables no son automáticamente actualizables." +#: rewrite/rewriteHandler.c:3177 +#, c-format +msgid "To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE trigger." +msgstr "Para posibilitar eliminar de la vista usando MERGE, provea un “trigger” INSTEAD OF DELETE." -#: rewrite/rewriteHandler.c:3154 +#: rewrite/rewriteHandler.c:3352 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "no se puede insertar en la columna «%s» de la vista «%s»" -#: rewrite/rewriteHandler.c:3162 +#: rewrite/rewriteHandler.c:3360 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "no se puede actualizar la columna «%s» vista «%s»" -#: rewrite/rewriteHandler.c:3666 +#: rewrite/rewriteHandler.c:3368 +#, c-format +msgid "cannot merge into column \"%s\" of view \"%s\"" +msgstr "no se puede hacer «merge» en la columna «%s» de la vista «%s»" + +#: rewrite/rewriteHandler.c:3396 +#, c-format +msgid "cannot merge into view \"%s\"" +msgstr "no se puede hacer «merge» en la vista «%s»" + +#: rewrite/rewriteHandler.c:3398 +#, c-format +msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions but not all." +msgstr "MERGE no está soportado para vistas con triggers INSTEAD OF para algunas acciones pero no todas." + +#: 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 "Para posibilitar hacer “merge” en la vista, provea un conjunto completo de “triggers” INSTEAD OF o elimine los “triggers” INSTEAD OF existentes." + +#: rewrite/rewriteHandler.c:3912 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD NOTIFY no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3677 +#: rewrite/rewriteHandler.c:3923 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD NOTHING no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3691 +#: rewrite/rewriteHandler.c:3937 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD condicionales no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3695 +#: rewrite/rewriteHandler.c:3941 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO ALSO no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3700 +#: rewrite/rewriteHandler.c:3946 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD de múltiples sentencias no están soportadas para sentencias que modifiquen datos en WITH" # XXX a %s here would be nice ... -#: rewrite/rewriteHandler.c:3967 rewrite/rewriteHandler.c:3975 -#: rewrite/rewriteHandler.c:3983 -#, c-format +#: rewrite/rewriteHandler.c:4206 msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Las vistas con reglas DO INSTEAD condicionales no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:4088 +#: rewrite/rewriteHandler.c:4303 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "no se puede hacer INSERT RETURNING a la relación «%s»" -#: rewrite/rewriteHandler.c:4090 +#: rewrite/rewriteHandler.c:4305 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "Necesita un regla incondicional ON INSERT DO INSTEAD con una cláusula RETURNING." -#: rewrite/rewriteHandler.c:4095 +#: rewrite/rewriteHandler.c:4310 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "no se puede hacer UPDATE RETURNING a la relación «%s»" -#: rewrite/rewriteHandler.c:4097 +#: rewrite/rewriteHandler.c:4312 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "Necesita un regla incondicional ON UPDATE DO INSTEAD con una cláusula RETURNING." -#: rewrite/rewriteHandler.c:4102 +#: rewrite/rewriteHandler.c:4317 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "no se puede hacer DELETE RETURNING a la relación «%s»" -#: rewrite/rewriteHandler.c:4104 +#: rewrite/rewriteHandler.c:4319 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "Necesita un regla incondicional ON DELETE DO INSTEAD con una clásula RETURNING." -#: rewrite/rewriteHandler.c:4122 +#: rewrite/rewriteHandler.c:4337 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT con una cláusula ON CONFLICT no puede usarse con una tabla que tiene reglas INSERT o UPDATE" -#: rewrite/rewriteHandler.c:4179 +#: rewrite/rewriteHandler.c:4394 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH no puede ser usado en una consulta que está siendo convertida en múltiples consultas a través de reglas" -#: rewrite/rewriteManip.c:1070 +#: rewrite/rewriteManip.c:1084 #, c-format msgid "conditional utility statements are not implemented" msgstr "las sentencias condicionales de utilidad no están implementadas" -#: rewrite/rewriteManip.c:1414 +#: rewrite/rewriteManip.c:1431 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF no está implementado en una vista" -#: rewrite/rewriteManip.c:1749 +#: 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 "las variables NEW en reglas ON UPDATE no pueden referenciar columnas que son parte de una asignación múltiple en la orden UPDATE" #: rewrite/rewriteSearchCycle.c:410 -#, fuzzy, c-format -#| msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" +#, c-format 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 "con una cláusula SEARCH o CYCLE, el lado izquierdo de UNION debe ser un SELECT" +msgstr "con una cláusula SEARCH o CYCLE, la referencia recursiva a la consulta de WITH «%s» debe estar en el nivel superior de su SELECT del lado derecho" #: snowball/dict_snowball.c:215 #, c-format @@ -21531,72 +22046,67 @@ msgstr "parámetro Snowball no reconocido: «%s»" msgid "missing Language parameter" msgstr "falta un parámetro Language" -#: statistics/extended_stats.c:179 +#: statistics/extended_stats.c:176 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "el objeto de estadísticas «%s.%s» no pudo ser calculado para la relación «%s.%s»" -#: statistics/mcv.c:1372 +#: statistics/mcv.c:1368 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo" -#: storage/buffer/bufmgr.c:612 storage/buffer/bufmgr.c:769 +#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "no se pueden acceder tablas temporales de otras sesiones" -#: storage/buffer/bufmgr.c:1137 +#: storage/buffer/bufmgr.c:1532 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "la página no es válida en el bloque %u de la relación «%s»; reinicializando la página" -#: storage/buffer/bufmgr.c:1931 storage/buffer/localbuf.c:359 +#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "no se puede extender la relación %s más allá de %u bloques" -#: storage/buffer/bufmgr.c:1998 +#: storage/buffer/bufmgr.c:2348 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "datos inesperados más allá del EOF en el bloque %u de relación %s" -#: storage/buffer/bufmgr.c:2000 +#: storage/buffer/bufmgr.c:2350 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Esto parece ocurrir sólo con kernels defectuosos; considere actualizar su sistema." -#: storage/buffer/bufmgr.c:5219 +#: storage/buffer/bufmgr.c:5653 #, c-format msgid "could not write block %u of %s" msgstr "no se pudo escribir el bloque %u de %s" -#: storage/buffer/bufmgr.c:5221 +#: storage/buffer/bufmgr.c:5655 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Múltiples fallas --- el error de escritura puede ser permanente." -#: storage/buffer/bufmgr.c:5243 storage/buffer/bufmgr.c:5263 +#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 #, c-format msgid "writing block %u of relation %s" msgstr "escribiendo el bloque %u de la relación %s" -#: storage/buffer/bufmgr.c:5593 -#, c-format -msgid "snapshot too old" -msgstr "snapshot demasiado antiguo" - -#: storage/buffer/localbuf.c:219 +#: storage/buffer/localbuf.c:220 #, c-format msgid "no empty local buffer available" msgstr "no hay ningún búfer local disponible" -#: storage/buffer/localbuf.c:592 +#: storage/buffer/localbuf.c:597 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "no se pueden acceder tablas temporales durante una operación paralela" -#: storage/buffer/localbuf.c:699 +#: storage/buffer/localbuf.c:712 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "«temp_buffers» no puede ser cambiado después de que cualquier tabla temporal haya sido accedida en la sesión." @@ -21607,164 +22117,165 @@ msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "no se pudo abrir archivo temporal «%s» del BufFile «%s»: %m" #: storage/file/buffile.c:632 -#, fuzzy, c-format -#| msgid "could not read block %u in file \"%s\": read only %d of %d bytes" +#, c-format msgid "could not read from file set \"%s\": read only %zu of %zu bytes" -msgstr "no se pudo leer el bloque %u del archivo «%s»: se leyeron sólo %d de %d bytes" +msgstr "no se pudo leer del “file set” «%s»: se leyeron sólo %zu de %zu bytes" #: storage/file/buffile.c:634 -#, fuzzy, c-format -#| msgid "could not read block %u in file \"%s\": read only %d of %d bytes" +#, c-format msgid "could not read from temporary file: read only %zu of %zu bytes" -msgstr "no se pudo leer el bloque %u del archivo «%s»: se leyeron sólo %d de %d bytes" +msgstr "no se pudo leer del archivo temporal: se leyeron sólo %zu de %zu bytes" -#: storage/file/buffile.c:774 storage/file/buffile.c:895 +#: storage/file/buffile.c:774 storage/file/buffile.c:877 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "no se pudo determinar el tamaño del archivo temporal «%s» del BufFile «%s»: %m" -#: storage/file/buffile.c:974 -#, fuzzy, c-format -#| msgid "could not delete file \"%s\": %m" +#: storage/file/buffile.c:956 +#, c-format msgid "could not delete fileset \"%s\": %m" -msgstr "no se pudo borrar el archivo «%s»: %m" +msgstr "no se pudo borrar el “fileset” «%s»: %m" -#: storage/file/buffile.c:992 storage/smgr/md.c:335 storage/smgr/md.c:1038 +#: 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 "no se pudo truncar el archivo «%s»: %m" -#: storage/file/fd.c:516 storage/file/fd.c:588 storage/file/fd.c:624 +#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 #, c-format msgid "could not flush dirty data: %m" msgstr "no se pudo sincronizar (flush) datos «sucios»: %m" -#: storage/file/fd.c:546 +#: storage/file/fd.c:613 #, c-format msgid "could not determine dirty data size: %m" msgstr "no se pudo determinar el tamaño de los datos «sucios»: %m" -#: storage/file/fd.c:598 +#: storage/file/fd.c:665 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "no se pudo ejecutar munmap() mientras se sincronizaban (flush) datos: %m" -#: storage/file/fd.c:894 +#: storage/file/fd.c:983 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit falló: %m" -#: storage/file/fd.c:984 +#: storage/file/fd.c:1073 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "los descriptores de archivo disponibles son insuficientes para iniciar un proceso servidor" -#: storage/file/fd.c:985 +#: storage/file/fd.c:1074 #, c-format msgid "System allows %d, server needs at least %d." -msgstr "" +msgstr "El sistema permite %d, el servidor necesita al menos %d." -#: storage/file/fd.c:1073 storage/file/fd.c:2515 storage/file/fd.c:2624 -#: storage/file/fd.c:2775 +#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 +#: storage/file/fd.c:2878 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "se agotaron los descriptores de archivo: %m; libere e intente nuevamente" -#: storage/file/fd.c:1447 +#: storage/file/fd.c:1536 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "archivo temporal: ruta «%s», tamaño %lu" -#: storage/file/fd.c:1586 +#: storage/file/fd.c:1675 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "no se pudo crear el directorio temporal «%s»: %m" -#: storage/file/fd.c:1593 +#: storage/file/fd.c:1682 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "no se pudo crear el subdirectorio temporal «%s»: %m" -#: storage/file/fd.c:1790 +#: storage/file/fd.c:1879 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "no se pudo crear el archivo temporal «%s»: %m" -#: storage/file/fd.c:1826 +#: storage/file/fd.c:1915 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal «%s»: %m" -#: storage/file/fd.c:1867 +#: storage/file/fd.c:1956 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "no se pudo eliminar (unlink) el archivo temporal «%s»: %m" -#: storage/file/fd.c:1955 +#: storage/file/fd.c:2044 #, c-format msgid "could not delete file \"%s\": %m" msgstr "no se pudo borrar el archivo «%s»: %m" -#: storage/file/fd.c:2138 +#: storage/file/fd.c:2234 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "el tamaño del archivo temporal excede temp_file_limit permitido (%dkB)" -#: storage/file/fd.c:2491 storage/file/fd.c:2550 +#: storage/file/fd.c:2594 storage/file/fd.c:2653 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de abrir el archivo «%s»" -#: storage/file/fd.c:2595 +#: storage/file/fd.c:2698 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de ejecutar la orden «%s»" -#: storage/file/fd.c:2751 +#: storage/file/fd.c:2854 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de abrir el directorio «%s»" -#: storage/file/fd.c:3281 +#: storage/file/fd.c:3384 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "archivo inesperado en directorio de archivos temporales: «%s»" -#: storage/file/fd.c:3399 +#: storage/file/fd.c:3502 #, c-format msgid "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" msgstr "sincronizando el directorio de datos (syncfs), transcurrido: %ld.%02d s, ruta actual: %s" -#: storage/file/fd.c:3413 -#, c-format -msgid "could not synchronize file system for file \"%s\": %m" -msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" - -#: storage/file/fd.c:3626 +#: storage/file/fd.c:3729 #, c-format msgid "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "sincronizando el directorio de datos (pre-fsync), transcurrido: %ld.%02d s, ruta actual: %s" -#: storage/file/fd.c:3658 +#: storage/file/fd.c:3761 #, c-format msgid "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "sincronizando el directorio de datos (fsync), transcurrido: %ld.%02d s, ruta actual: %s" -#: storage/file/fd.c:3847 -#, fuzzy, c-format -#| msgid "Direct I/O is not supported on this platform.\n" -msgid "debug_io_direct is not supported on this platform." -msgstr "Direct I/O no está soportado en esta plataforma.\n" +#: storage/file/fd.c:3950 +#, c-format +msgid "\"debug_io_direct\" is not supported on this platform." +msgstr "«debug_io_direct» no está soportado en esta plataforma." + +#: storage/file/fd.c:3964 +#, c-format +msgid "Invalid list syntax in parameter \"%s\"" +msgstr "Sintaxis de lista no válida en el parámetro «%s»" -#: storage/file/fd.c:3894 +#: storage/file/fd.c:3984 #, c-format -msgid "debug_io_direct is not supported for WAL because XLOG_BLCKSZ is too small" -msgstr "" +msgid "Invalid option \"%s\"" +msgstr "Nombre de opción «%s» no válido." -#: storage/file/fd.c:3901 +#: storage/file/fd.c:3997 #, c-format -msgid "debug_io_direct is not supported for data because BLCKSZ is too small" -msgstr "" +msgid "\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" +msgstr "«debug_io_direct» no está soportado para WAL porque XLOG_BLCKSZ es demasiado pequeño" + +#: storage/file/fd.c:4004 +#, c-format +msgid "\"debug_io_direct\" is not supported for data because BLCKSZ is too small" +msgstr "«debug_io_direct» no está soportado para datos porque BLCKSZ es demasiado pequeño" #: storage/file/reinit.c:145 #, c-format @@ -21776,22 +22287,22 @@ msgstr "reseteando relaciones «unlogged» (init), transcurrido: %ld.%02d s, rut msgid "resetting unlogged relations (cleanup), elapsed time: %ld.%02d s, current path: %s" msgstr "reseteando relaciones «unlogged» (cleanup), transcurrido: %ld.%02d s, ruta actual: %s" -#: storage/file/sharedfileset.c:79 +#: storage/file/sharedfileset.c:73 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "no se puede adjuntar a un SharedFileSet que ya está destruido" -#: storage/ipc/dsm.c:352 +#: storage/ipc/dsm.c:379 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "el segmento de control de memoria compartida dinámica está corrupto" -#: storage/ipc/dsm.c:417 +#: storage/ipc/dsm.c:444 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "el segmento de control de memoria compartida dinámica no es válido" -#: storage/ipc/dsm.c:599 +#: storage/ipc/dsm.c:626 #, c-format msgid "too many dynamic shared memory segments" msgstr "demasiados segmentos de memoria compartida dinámica" @@ -21851,457 +22362,456 @@ msgstr "no se pudo cerrar el segmento de memoria compartida «%s»: %m" msgid "could not duplicate handle for \"%s\": %m" msgstr "no se pudo duplicar el «handle» para «%s»: %m" -#: storage/ipc/procarray.c:3796 +#: storage/ipc/dsm_registry.c:142 +#, c-format +msgid "DSM segment name cannot be empty" +msgstr "el nombre del segmento DSM no puede ser vacío" + +#: storage/ipc/dsm_registry.c:146 +#, c-format +msgid "DSM segment name too long" +msgstr "nombre de segmento DSM es demasiado largo" + +#: storage/ipc/dsm_registry.c:150 +#, c-format +msgid "DSM segment size must be nonzero" +msgstr "el tamaño del segmento DSM debe ser distinto de cero" + +#: storage/ipc/dsm_registry.c:176 +#, c-format +msgid "requested DSM segment size does not match size of existing segment" +msgstr "el tamaño solicitado de segmento de DSM no coincide con el tamaño del segmento existente" + +#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:357 +#: tcop/backend_startup.c:304 +#, c-format +msgid "sorry, too many clients already" +msgstr "lo siento, ya tenemos demasiados clientes" + +#: storage/ipc/procarray.c:3857 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "la base de datos «%s» está siendo utilizada por transacciones preparadas" -#: storage/ipc/procarray.c:3828 +#: storage/ipc/procarray.c:3893 storage/ipc/procarray.c:3901 +#: storage/ipc/signalfuncs.c:235 storage/ipc/signalfuncs.c:242 #, c-format -msgid "must be a superuser to terminate superuser process" -msgstr "debe ser superusuario para terminar proceso de superusuario" - -#: storage/ipc/procarray.c:3835 storage/ipc/signalfuncs.c:230 -#: storage/ipc/signalfuncs.c:237 -#, fuzzy, c-format -#| msgid "permission denied to create role" msgid "permission denied to terminate process" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para terminar el proceso" -#: storage/ipc/procarray.c:3836 storage/ipc/signalfuncs.c:238 +#: 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 "Sólo roles con el atributo %s pueden terminar procesos de roles con el atributo %s." + +#: 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 "" +msgstr "Sólo roles con privilegios del rol cuyo proceso está siendo terminados o con privilegios del rol «%s» pueden terminar este proceso." -#: storage/ipc/procsignal.c:420 +#: storage/ipc/procsignal.c:416 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" -msgstr "" +msgstr "aún esperando que el backend con PID %d acepte ProcSignalBarrier" -#: storage/ipc/shm_mq.c:384 +#: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" msgstr "no se puede enviar un mensaje de tamaño %zu mediante la cola de memoria compartida" -#: storage/ipc/shm_mq.c:719 +#: storage/ipc/shm_mq.c:718 #, c-format msgid "invalid message size %zu in shared memory queue" msgstr "tamaño no válido de mensaje %zu en cola de memoria compartida" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 -#: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2810 storage/lmgr/lock.c:4195 -#: storage/lmgr/lock.c:4260 storage/lmgr/lock.c:4610 -#: storage/lmgr/predicate.c:2412 storage/lmgr/predicate.c:2427 -#: storage/lmgr/predicate.c:3824 storage/lmgr/predicate.c:4871 -#: utils/hash/dynahash.c:1107 +#: 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 "memoria compartida agotada" -#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 +#: storage/ipc/shmem.c:161 storage/ipc/shmem.c:257 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "memoria compartida agotada (%zu bytes solicitados)" -#: storage/ipc/shmem.c:445 +#: storage/ipc/shmem.c:436 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "no se pudo crear la entrada en ShmemIndex para la estructura «%s»" -#: storage/ipc/shmem.c:460 +#: storage/ipc/shmem.c:451 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "el tamaño de la entrada ShmemIndex es incorrecto para la estructura «%s»: se esperaba %zu, real %zu" -#: storage/ipc/shmem.c:479 +#: storage/ipc/shmem.c:470 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "el espacio de memoria compartida es insuficiente para la estructura «%s» (%zu bytes solicitados)" -#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 +#: storage/ipc/shmem.c:502 storage/ipc/shmem.c:521 #, c-format msgid "requested shared memory size overflows size_t" msgstr "la petición de tamaño de memoria compartida desborda size_t" #: storage/ipc/signalfuncs.c:72 -#, fuzzy, c-format -#| msgid "PID %d is not a PostgreSQL server process" +#, c-format msgid "PID %d is not a PostgreSQL backend process" msgstr "PID %d no es un proceso servidor de PostgreSQL" -#: storage/ipc/signalfuncs.c:104 storage/lmgr/proc.c:1379 -#: utils/adt/mcxtfuncs.c:190 +#: 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 "no se pudo enviar la señal al proceso %d: %m" -#: storage/ipc/signalfuncs.c:124 storage/ipc/signalfuncs.c:131 -#, fuzzy, c-format -#| msgid "permission denied to create role" +#: storage/ipc/signalfuncs.c:129 storage/ipc/signalfuncs.c:136 +#, c-format msgid "permission denied to cancel query" -msgstr "se ha denegado el permiso para crear el rol" +msgstr "se ha denegado el permiso para cancelar la consulta" -#: storage/ipc/signalfuncs.c:125 +#: storage/ipc/signalfuncs.c:130 #, c-format -msgid "Only roles with the %s attribute may cancel queries of roles with %s." -msgstr "" +msgid "Only roles with the %s attribute may cancel queries of roles with the %s attribute." +msgstr "Sólo roles con el atributo %s pueden cancelar consultas de roles con el atributo %s." -#: storage/ipc/signalfuncs.c:132 +#: storage/ipc/signalfuncs.c:137 #, c-format msgid "Only roles with privileges of the role whose query is being canceled or with privileges of the \"%s\" role may cancel this query." -msgstr "" +msgstr "Sólo roles con privilegios del rol cuya consulta está siendo cancelada o con privilegios del rol «%s» pueden cancelar esta consulta." -#: storage/ipc/signalfuncs.c:174 +#: storage/ipc/signalfuncs.c:179 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "no se pudo comprobar la existencia del proceso de servidor con PID %d: %m" -#: storage/ipc/signalfuncs.c:192 +#: storage/ipc/signalfuncs.c:197 #, c-format msgid "backend with PID %d did not terminate within %lld millisecond" msgid_plural "backend with PID %d did not terminate within %lld milliseconds" msgstr[0] "el proceso de servidor con PID %d no terminó dentro de %lld milisegundo" msgstr[1] "el proceso de servidor con PID %d no terminó dentro de %lld milisegundos" -#: storage/ipc/signalfuncs.c:223 +#: storage/ipc/signalfuncs.c:228 #, c-format msgid "\"timeout\" must not be negative" msgstr "\"timeout\" no debe ser negativo" -#: storage/ipc/signalfuncs.c:231 -#, c-format -msgid "Only roles with the %s attribute may terminate processes of roles with %s." -msgstr "" - -#: storage/ipc/signalfuncs.c:279 -#, c-format -msgid "must be superuser to rotate log files with adminpack 1.0" -msgstr "bebe ser superusuario para rotar archivos de log con adminpack 1.0" - -#. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:281 utils/adt/genfile.c:250 -#, c-format -msgid "Consider using %s, which is part of core, instead." -msgstr "Considere usar %s, que es parte del servidor, en su lugar." - -#: storage/ipc/signalfuncs.c:287 storage/ipc/signalfuncs.c:307 +#: storage/ipc/signalfuncs.c:285 #, c-format msgid "rotation not possible because log collection not active" msgstr "la rotación no es posible porque la recoleccion de log no está activa" -#: storage/ipc/standby.c:330 +#: storage/ipc/standby.c:329 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "la recuperación aún está esperando después de %ld.%03d ms: %s" -#: storage/ipc/standby.c:339 +#: storage/ipc/standby.c:338 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "la recuperación terminó de esperar después de %ld.%03d ms: %s" -#: storage/ipc/standby.c:921 tcop/postgres.c:3384 +#: storage/ipc/standby.c:920 tcop/postgres.c:3196 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "cancelando la sentencia debido a un conflicto con la recuperación" -#: storage/ipc/standby.c:922 tcop/postgres.c:2533 +#: storage/ipc/standby.c:921 tcop/postgres.c:2557 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transacción del usuario causó un «deadlock» con la recuperación." -#: storage/ipc/standby.c:1479 +#: storage/ipc/standby.c:1486 msgid "unknown reason" msgstr "razón desconocida" -#: storage/ipc/standby.c:1484 +#: storage/ipc/standby.c:1491 msgid "recovery conflict on buffer pin" msgstr "conflicto de recuperación en «pin» de búfer" -#: storage/ipc/standby.c:1487 +#: storage/ipc/standby.c:1494 msgid "recovery conflict on lock" msgstr "conflicto de recuperación en bloqueo" -#: storage/ipc/standby.c:1490 +#: storage/ipc/standby.c:1497 msgid "recovery conflict on tablespace" msgstr "conflicto de recuperación en tablespace" -#: storage/ipc/standby.c:1493 +#: storage/ipc/standby.c:1500 msgid "recovery conflict on snapshot" msgstr "conflicto de recuperación en snapshot" -#: storage/ipc/standby.c:1496 -#, fuzzy -#| msgid "recovery conflict on snapshot" +#: storage/ipc/standby.c:1503 msgid "recovery conflict on replication slot" -msgstr "conflicto de recuperación en snapshot" +msgstr "conflicto de recuperación en slot de replicación" -#: storage/ipc/standby.c:1499 +#: storage/ipc/standby.c:1506 msgid "recovery conflict on buffer deadlock" msgstr "conflicto de recuperación en deadlock de búfer" -#: storage/ipc/standby.c:1502 +#: storage/ipc/standby.c:1509 msgid "recovery conflict on database" msgstr "conflicto de recuperación en base de datos" -#: storage/large_object/inv_api.c:191 +#: storage/large_object/inv_api.c:190 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "la entrada pg_largeobject para el OID %u, página %d tiene tamaño de campo %d no válido" -#: storage/large_object/inv_api.c:274 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "opciones no válidas para abrir un objeto grande: %d" -#: storage/large_object/inv_api.c:457 +#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 +#: storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 +#: storage/large_object/inv_api.c:807 +#, c-format +msgid "permission denied for large object %u" +msgstr "permiso denegado al objeto grande %u" + +#: storage/large_object/inv_api.c:455 #, c-format msgid "invalid whence setting: %d" msgstr "parámetro «whence» no válido: %d" -#: storage/large_object/inv_api.c:629 +#: storage/large_object/inv_api.c:627 #, c-format msgid "invalid large object write request size: %d" msgstr "tamaño de petición de escritura de objeto grande no válido: %d" -#: storage/lmgr/deadlock.c:1105 +#: storage/lmgr/deadlock.c:1104 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "El proceso %d espera %s en %s; bloqueado por proceso %d." -#: storage/lmgr/deadlock.c:1124 +#: storage/lmgr/deadlock.c:1123 #, c-format msgid "Process %d: %s" msgstr "Proceso %d: %s" -#: storage/lmgr/deadlock.c:1133 +#: storage/lmgr/deadlock.c:1132 #, c-format msgid "deadlock detected" msgstr "se ha detectado un deadlock" -#: storage/lmgr/deadlock.c:1136 +#: storage/lmgr/deadlock.c:1135 #, c-format msgid "See server log for query details." msgstr "Vea el registro del servidor para obtener detalles de las consultas." -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "mientras se actualizaba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:862 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "mientras se borraba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:865 +#: storage/lmgr/lmgr.c:854 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "mientras se bloqueaba la tupla (%u,%u) de la relación «%s»" -#: storage/lmgr/lmgr.c:868 +#: storage/lmgr/lmgr.c:857 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "mientras se bloqueaba la versión actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:871 +#: storage/lmgr/lmgr.c:860 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "mientras se insertaba la tupla de índice (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:874 +#: storage/lmgr/lmgr.c:863 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la unicidad de la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:877 +#: storage/lmgr/lmgr.c:866 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la tupla actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:880 +#: storage/lmgr/lmgr.c:869 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba una restricción de exclusión en la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:1174 +#: storage/lmgr/lmgr.c:1239 #, c-format msgid "relation %u of database %u" msgstr "relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1180 +#: storage/lmgr/lmgr.c:1245 #, c-format msgid "extension of relation %u of database %u" msgstr "extensión de la relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1186 +#: storage/lmgr/lmgr.c:1251 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid de la base de datos %u" -#: storage/lmgr/lmgr.c:1191 +#: storage/lmgr/lmgr.c:1256 #, c-format msgid "page %u of relation %u of database %u" msgstr "página %u de la relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1198 +#: storage/lmgr/lmgr.c:1263 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "tupla (%u,%u) de la relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1206 +#: storage/lmgr/lmgr.c:1271 #, c-format msgid "transaction %u" msgstr "transacción %u" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1276 #, c-format msgid "virtual transaction %d/%u" msgstr "transacción virtual %d/%u" -#: storage/lmgr/lmgr.c:1217 +#: storage/lmgr/lmgr.c:1282 #, c-format msgid "speculative token %u of transaction %u" msgstr "token especulativo %u de la transacción %u" -#: storage/lmgr/lmgr.c:1223 +#: storage/lmgr/lmgr.c:1288 #, c-format msgid "object %u of class %u of database %u" msgstr "objeto %u de clase %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1231 +#: storage/lmgr/lmgr.c:1296 #, c-format msgid "user lock [%u,%u,%u]" -msgstr "candado de usuario [%u,%u,%u]" +msgstr "“lock” de usuario [%u,%u,%u]" # XXX is this a good translation? -#: storage/lmgr/lmgr.c:1238 +#: storage/lmgr/lmgr.c:1303 #, c-format msgid "advisory lock [%u,%u,%u,%u]" -msgstr "candado consultivo [%u,%u,%u,%u]" +msgstr "“lock” consultivo [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1246 -#, fuzzy, c-format -#| msgid "extension of relation %u of database %u" +#: storage/lmgr/lmgr.c:1311 +#, c-format msgid "remote transaction %u of subscription %u of database %u" -msgstr "extensión de la relación %u de la base de datos %u" +msgstr "transacción remota %u de la suscripción %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1253 +#: storage/lmgr/lmgr.c:1318 #, c-format msgid "unrecognized locktag type %d" msgstr "tipo de locktag %d no reconocido" -#: storage/lmgr/lock.c:803 +#: storage/lmgr/lock.c:812 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" -msgstr "no se puede adquirir candado en modo %s en objetos de la base de datos mientras la recuperación está en proceso" +msgstr "no se puede adquirir “lock” en modo %s en objetos de la base de datos mientras la recuperación está en proceso" -#: storage/lmgr/lock.c:805 +#: storage/lmgr/lock.c:814 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." -msgstr "Sólo candados RowExclusiveLock o menor pueden ser adquiridos en objetos de la base de datos durante la recuperación." - -#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2811 -#: storage/lmgr/lock.c:4196 storage/lmgr/lock.c:4261 storage/lmgr/lock.c:4611 -#, c-format -msgid "You might need to increase max_locks_per_transaction." -msgstr "Puede ser necesario incrementar max_locks_per_transaction." +msgstr "Sólo “locks” RowExclusiveLock o menor pueden ser adquiridos en objetos de la base de datos durante la recuperación." -#: storage/lmgr/lock.c:3259 storage/lmgr/lock.c:3327 storage/lmgr/lock.c:3443 +#: 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 "no se puede hacer PREPARE mientras se mantienen candados a nivel de sesión y transacción simultáneamente sobre el mismo objeto" +msgstr "no se puede hacer PREPARE mientras se mantienen “locks” a nivel de sesión y transacción simultáneamente sobre el mismo objeto" -#: storage/lmgr/predicate.c:649 +#: storage/lmgr/predicate.c:653 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "no hay suficientes elementos en RWConflictPool para registrar un conflicto read/write" -#: storage/lmgr/predicate.c:650 storage/lmgr/predicate.c:675 +#: storage/lmgr/predicate.c:654 storage/lmgr/predicate.c:679 #, c-format -msgid "You might need to run fewer transactions at a time or increase max_connections." -msgstr "Puede ser necesario ejecutar menos transacciones al mismo tiempo, o incrementar max_connections." +msgid "You might need to run fewer transactions at a time or increase \"max_connections\"." +msgstr "Puede ser necesario ejecutar menos transacciones al mismo tiempo, o incrementar «max_connections»." -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/predicate.c:678 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "no hay suficientes elementos en RWConflictPool para registrar un potencial conflicto read/write" -#: storage/lmgr/predicate.c:1630 +#: storage/lmgr/predicate.c:1686 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "«default_transaction_isolation» está definido a «serializable»." -#: storage/lmgr/predicate.c:1631 +#: storage/lmgr/predicate.c:1687 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Puede usar «SET default_transaction_isolation = 'repeatable read'» para cambiar el valor por omisión." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1738 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "una transacción que importa un snapshot no debe ser READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1761 utils/time/snapmgr.c:570 -#: utils/time/snapmgr.c:576 +#: 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 "no se pudo importar el snapshot solicitado" -#: storage/lmgr/predicate.c:1762 utils/time/snapmgr.c:577 +#: storage/lmgr/predicate.c:1818 utils/time/snapmgr.c:542 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "El proceso de origen con PID %d ya no está en ejecución." -#: storage/lmgr/predicate.c:2413 storage/lmgr/predicate.c:2428 -#: storage/lmgr/predicate.c:3825 -#, c-format -msgid "You might need to increase max_pred_locks_per_transaction." -msgstr "Puede ser necesario incrementar max_pred_locks_per_transaction." - -#: storage/lmgr/predicate.c:3935 storage/lmgr/predicate.c:3971 -#: storage/lmgr/predicate.c:4004 storage/lmgr/predicate.c:4012 -#: storage/lmgr/predicate.c:4051 storage/lmgr/predicate.c:4281 -#: storage/lmgr/predicate.c:4600 storage/lmgr/predicate.c:4612 -#: storage/lmgr/predicate.c:4659 storage/lmgr/predicate.c:4695 +#: 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 "no se pudo serializar el acceso debido a dependencias read/write entre transacciones" -#: storage/lmgr/predicate.c:3937 storage/lmgr/predicate.c:3973 -#: storage/lmgr/predicate.c:4006 storage/lmgr/predicate.c:4014 -#: storage/lmgr/predicate.c:4053 storage/lmgr/predicate.c:4283 -#: storage/lmgr/predicate.c:4602 storage/lmgr/predicate.c:4614 -#: storage/lmgr/predicate.c:4661 storage/lmgr/predicate.c:4697 +#: 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 "La transacción podría tener éxito si es reintentada." -#: storage/lmgr/proc.c:349 +#: storage/lmgr/proc.c:353 #, c-format -msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" -msgstr "la cantidad de conexiones standby pedidas excede max_wal_senders (actualmente %d)" +msgid "number of requested standby connections exceeds \"max_wal_senders\" (currently %d)" +msgstr "la cantidad de conexiones standby pedidas excede «max_wal_senders» (actualmente %d)" -#: storage/lmgr/proc.c:1472 +#: 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 "el proceso %d evitó un deadlock para %s en %s reordenando la cola después de %ld.%03d ms" -#: storage/lmgr/proc.c:1487 +#: storage/lmgr/proc.c:1561 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "el proceso %d detectó un deadlock mientras esperaba %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1570 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "el proceso %d aún espera %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1503 +#: storage/lmgr/proc.c:1577 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "el proceso %d adquirió %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1520 +#: storage/lmgr/proc.c:1594 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "el proceso %d no pudo adquirir %s en %s después de %ld.%03d ms" @@ -22334,68 +22844,202 @@ msgstr "los largos de ítem están corruptos: total %u, espacio disponible %u" msgid "corrupted line pointer: offset = %u, size = %u" msgstr "puntero de ítem corrupto: desplazamiento = %u, tamaño = %u" -#: storage/smgr/md.c:484 storage/smgr/md.c:546 +#: storage/smgr/md.c:485 storage/smgr/md.c:547 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "no se pudo extender el archivo «%s» más allá de %u bloques" -#: storage/smgr/md.c:499 storage/smgr/md.c:610 +#: storage/smgr/md.c:500 storage/smgr/md.c:611 #, c-format msgid "could not extend file \"%s\": %m" msgstr "no se pudo extender el archivo «%s»: %m" -#: storage/smgr/md.c:505 +#: storage/smgr/md.c:506 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "no se pudo extender el archivo «%s»: sólo se escribieron %d de %d bytes en el bloque %u" -#: storage/smgr/md.c:588 -#, fuzzy, c-format -#| msgid "could not extend file \"%s\": %m" -msgid "could not extend file \"%s\" with FileFallocate(): %m" -msgstr "no se pudo extender el archivo «%s»: %m" - -#: storage/smgr/md.c:779 +#: storage/smgr/md.c:589 #, c-format -msgid "could not read block %u in file \"%s\": %m" -msgstr "no se pudo leer el bloque %u del archivo «%s»: %m" +msgid "could not extend file \"%s\" with FileFallocate(): %m" +msgstr "no se pudo extender el archivo «%s» con FileFallocate(): %m" -#: storage/smgr/md.c:795 +#: storage/smgr/md.c:869 #, c-format -msgid "could not read block %u in file \"%s\": read only %d of %d bytes" -msgstr "no se pudo leer el bloque %u del archivo «%s»: se leyeron sólo %d de %d bytes" +msgid "could not read blocks %u..%u in file \"%s\": %m" +msgstr "no se pudo leer los bloques %u..%u del archivo «%s»: %m" -#: storage/smgr/md.c:853 +#: storage/smgr/md.c:895 #, c-format -msgid "could not write block %u in file \"%s\": %m" -msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" +msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" +msgstr "no se pudo leer los bloques %u..%u del archivo «%s»: se leyeron sólo %zu de %zu bytes" -#: storage/smgr/md.c:858 +#: storage/smgr/md.c:995 #, c-format -msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" -msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron sólo %d de %d bytes" +msgid "could not write blocks %u..%u in file \"%s\": %m" +msgstr "no se pudo escribir los bloques %u..%u en el archivo «%s»: %m" -#: storage/smgr/md.c:1009 +#: storage/smgr/md.c:1165 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "no se pudo truncar el archivo «%s» a %u bloques: es de sólo %u bloques ahora" -#: storage/smgr/md.c:1064 +#: storage/smgr/md.c:1220 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "no se pudo truncar el archivo «%s» a %u bloques: %m" -#: storage/smgr/md.c:1491 +#: storage/smgr/md.c:1700 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "no se pudo abrir el archivo «%s» (bloque buscado %u): el segmento previo sólo tiene %u bloques" -#: storage/smgr/md.c:1505 +#: storage/smgr/md.c:1714 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "no se pudo abrir el archivo «%s» (bloque buscado %u): %m" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2132 +#: tcop/backend_startup.c:85 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "No se pudo cargar la configuración SSL en proceso secundario" + +#: tcop/backend_startup.c:208 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "conexión recibida: host=%s port=%s" + +#: tcop/backend_startup.c:213 +#, c-format +msgid "connection received: host=%s" +msgstr "conexión recibida: host=%s" + +#: tcop/backend_startup.c:277 +#, c-format +msgid "the database system is starting up" +msgstr "el sistema de base de datos está iniciándose" + +#: tcop/backend_startup.c:283 +#, c-format +msgid "the database system is not yet accepting connections" +msgstr "el sistema de bases de datos aún no está aceptando conexiones" + +#: tcop/backend_startup.c:284 +#, c-format +msgid "Consistent recovery state has not been yet reached." +msgstr "Aún no se ha alcanzado un estado de recuperación consistente." + +#: tcop/backend_startup.c:288 +#, c-format +msgid "the database system is not accepting connections" +msgstr "el sistema de bases de datos no está aceptando conexiones" + +#: tcop/backend_startup.c:289 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "El modo hot standby está desactivado." + +#: tcop/backend_startup.c:294 +#, c-format +msgid "the database system is shutting down" +msgstr "el sistema de base de datos está apagándose" + +#: tcop/backend_startup.c:299 +#, c-format +msgid "the database system is in recovery mode" +msgstr "el sistema de base de datos está en modo de recuperación" + +#: tcop/backend_startup.c:414 +#, c-format +msgid "received direct SSL connection request without ALPN protocol negotiation extension" +msgstr "se recibió petición de conexión SSL directa sin la extensión de negociación de protocolo ALPN" + +#: tcop/backend_startup.c:420 +#, c-format +msgid "direct SSL connection accepted" +msgstr "conexión SSL directa aceptada" + +#: tcop/backend_startup.c:430 +#, c-format +msgid "direct SSL connection rejected" +msgstr "conexión SSL directa rechazada" + +#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 +#, c-format +msgid "incomplete startup packet" +msgstr "el paquete de inicio está incompleto" + +#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 +#, c-format +msgid "invalid length of startup packet" +msgstr "el de paquete de inicio tiene largo incorrecto" + +#: tcop/backend_startup.c:573 +#, c-format +msgid "SSLRequest accepted" +msgstr "SSLRequest aceptado" + +#: tcop/backend_startup.c:576 +#, c-format +msgid "SSLRequest rejected" +msgstr "SSLRequest rechazado" + +#: tcop/backend_startup.c:585 +#, c-format +msgid "failed to send SSL negotiation response: %m" +msgstr "no se pudo enviar la respuesta de negociación SSL: %m" + +#: tcop/backend_startup.c:603 +#, c-format +msgid "received unencrypted data after SSL request" +msgstr "se recibieron datos no cifrados después de petición SSL" + +#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 +#, c-format +msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." +msgstr "Esto podría ser un error en el software cliente o evidencia de un intento de ataque man-in-the-middle." + +#: tcop/backend_startup.c:627 +#, c-format +msgid "GSSENCRequest accepted" +msgstr "GSSENCRequest aceptado" + +#: tcop/backend_startup.c:630 +#, c-format +msgid "GSSENCRequest rejected" +msgstr "GSSENCRequest rechazado" + +#: tcop/backend_startup.c:639 +#, c-format +msgid "failed to send GSSAPI negotiation response: %m" +msgstr "no se pudo enviar la respuesta de negociación GSSAPI: %m" + +#: tcop/backend_startup.c:657 +#, c-format +msgid "received unencrypted data after GSSAPI encryption request" +msgstr "se recibieron datos no cifrados después de petición de cifrado GSSAPI" + +#: tcop/backend_startup.c:681 +#, c-format +msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" +msgstr "el protocolo %u.%u no está soportado: servidor soporta %u.0 hasta %u.%u" + +#: tcop/backend_startup.c:744 +#, c-format +msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." +msgstr "Los valores válidos son: «false», 0, «true», 1, «database»." + +#: tcop/backend_startup.c:785 +#, c-format +msgid "invalid startup packet layout: expected terminator as last byte" +msgstr "el paquete de inicio no es válido: se esperaba un terminador en el último byte" + +#: tcop/backend_startup.c:802 +#, c-format +msgid "no PostgreSQL user name specified in startup packet" +msgstr "no se especifica un nombre de usuario en el paquete de inicio" + +#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "no existe la función con OID %u" @@ -22410,8 +23054,8 @@ msgstr "no se puede llamar a la función «%s» mediante la interfaz fastpath" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "llamada a función fastpath: «%s» (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 -#: tcop/postgres.c:2059 tcop/postgres.c:2309 +#: 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 "duración: %s ms" @@ -22441,317 +23085,320 @@ msgstr "el tamaño de argumento %d no es válido en el mensaje de llamada a func msgid "incorrect binary data format in function argument %d" msgstr "el formato de datos binarios es incorrecto en argumento %d a función" -#: tcop/postgres.c:463 tcop/postgres.c:4877 +#: tcop/postgres.c:467 tcop/postgres.c:5012 #, c-format msgid "invalid frontend message type %d" msgstr "el tipo de mensaje de frontend %d no es válido" -#: tcop/postgres.c:1072 +#: tcop/postgres.c:1076 #, c-format msgid "statement: %s" msgstr "sentencia: %s" -#: tcop/postgres.c:1370 +#: tcop/postgres.c:1374 #, c-format msgid "duration: %s ms statement: %s" msgstr "duración: %s ms sentencia: %s" -#: tcop/postgres.c:1476 +#: tcop/postgres.c:1480 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "no se pueden insertar múltiples órdenes en una sentencia preparada" -#: tcop/postgres.c:1606 +#: tcop/postgres.c:1610 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "duración: %s ms parse: %s: %s" -#: tcop/postgres.c:1672 tcop/postgres.c:2629 +#: tcop/postgres.c:1677 tcop/postgres.c:2653 #, c-format msgid "unnamed prepared statement does not exist" msgstr "no existe una sentencia preparada sin nombre" -#: tcop/postgres.c:1713 +#: tcop/postgres.c:1729 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "el mensaje de «bind» tiene %d formatos de parámetro pero %d parámetros" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1735 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "el mensaje de «bind» entrega %d parámetros, pero la sentencia preparada «%s» requiere %d" -#: tcop/postgres.c:1937 +#: tcop/postgres.c:1949 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "el formato de datos binarios es incorrecto en el parámetro de «bind» %d" -#: tcop/postgres.c:2064 +#: tcop/postgres.c:2076 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "duración: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:2118 tcop/postgres.c:2712 +#: tcop/postgres.c:2131 tcop/postgres.c:2735 #, c-format msgid "portal \"%s\" does not exist" msgstr "no existe el portal «%s»" -#: tcop/postgres.c:2189 +#: tcop/postgres.c:2213 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2191 tcop/postgres.c:2317 +#: tcop/postgres.c:2215 tcop/postgres.c:2341 msgid "execute fetch from" msgstr "ejecutar fetch desde" -#: tcop/postgres.c:2192 tcop/postgres.c:2318 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute" msgstr "ejecutar" -#: tcop/postgres.c:2314 +#: tcop/postgres.c:2338 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "duración: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2462 +#: tcop/postgres.c:2486 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2487 +#: tcop/postgres.c:2511 #, c-format -msgid "parameters: %s" -msgstr "parámetros: %s" +msgid "Parameters: %s" +msgstr "Parámetros: %s" -#: tcop/postgres.c:2502 +#: tcop/postgres.c:2526 #, c-format -msgid "abort reason: recovery conflict" -msgstr "razón para abortar: conflicto en la recuperación" +msgid "Abort reason: recovery conflict" +msgstr "Razón para abortar: conflicto en la recuperación" -#: tcop/postgres.c:2518 +#: tcop/postgres.c:2542 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "El usuario mantuvo el búfer compartido «clavado» por demasiado tiempo." -#: tcop/postgres.c:2521 +#: tcop/postgres.c:2545 #, c-format msgid "User was holding a relation lock for too long." msgstr "El usuario mantuvo una relación bloqueada por demasiado tiempo." -#: tcop/postgres.c:2524 +#: tcop/postgres.c:2548 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "El usuario estaba o pudo haber estado usando un tablespace que debía ser eliminado." -#: tcop/postgres.c:2527 +#: tcop/postgres.c:2551 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "La consulta del usuario pudo haber necesitado examinar versiones de tuplas que debían eliminarse." -#: tcop/postgres.c:2530 -#, fuzzy, c-format -#| msgid "User was connected to a database that must be dropped." -msgid "User was using a logical slot that must be invalidated." -msgstr "El usuario estaba conectado a una base de datos que debía ser eliminada." +#: tcop/postgres.c:2554 +#, c-format +msgid "User was using a logical replication slot that must be invalidated." +msgstr "El usuario estaba usando un slot de replicación lógica que debía ser invalidado." -#: tcop/postgres.c:2536 +#: tcop/postgres.c:2560 #, c-format msgid "User was connected to a database that must be dropped." msgstr "El usuario estaba conectado a una base de datos que debía ser eliminada." -#: tcop/postgres.c:2575 +#: tcop/postgres.c:2599 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "portal «%s» parámetro $%d = %s" -#: tcop/postgres.c:2578 +#: tcop/postgres.c:2602 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "portal «%s» parámetro $%d" -#: tcop/postgres.c:2584 +#: tcop/postgres.c:2608 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "portal sin nombre, parámetro %d = %s" -#: tcop/postgres.c:2587 +#: tcop/postgres.c:2611 #, c-format msgid "unnamed portal parameter $%d" msgstr "portal sin nombre, parámetro %d" -#: tcop/postgres.c:2932 +#: tcop/postgres.c:2955 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "terminando la conexión debido a una señal SIGQUIT inesperada" -#: tcop/postgres.c:2938 +#: tcop/postgres.c:2961 #, c-format msgid "terminating connection because of crash of another server process" msgstr "terminando la conexión debido a una falla en otro proceso servidor" -#: tcop/postgres.c:2939 +#: 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 "Postmaster ha ordenado que este proceso servidor cancele la transacción en curso y finalice la conexión, porque otro proceso servidor ha terminado anormalmente y podría haber corrompido la memoria compartida." -#: tcop/postgres.c:2943 tcop/postgres.c:3310 +#: 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 "Dentro de un momento debería poder reconectarse y repetir la consulta." -#: tcop/postgres.c:2950 +#: tcop/postgres.c:2973 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "terminando la conexión debido a una orden de apagado inmediato" -#: tcop/postgres.c:3036 +#: tcop/postgres.c:3051 #, c-format msgid "floating-point exception" msgstr "excepción de coma flotante" -#: tcop/postgres.c:3037 +#: 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 "Se ha recibido una señal de una operación de coma flotante no válida. Esto puede significar un resultado fuera de rango o una operación no válida, como una división por cero." -#: tcop/postgres.c:3214 +#: tcop/postgres.c:3217 +#, c-format +msgid "terminating connection due to conflict with recovery" +msgstr "terminando la conexión debido a un conflicto con la recuperación" + +#: tcop/postgres.c:3289 #, c-format msgid "canceling authentication due to timeout" msgstr "cancelando la autentificación debido a que se agotó el tiempo de espera" -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3293 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "terminando el proceso autovacuum debido a una orden del administrador" -#: tcop/postgres.c:3222 +#: tcop/postgres.c:3297 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "terminando el proceso de replicación lógica debido a una orden del administrador" -#: tcop/postgres.c:3239 tcop/postgres.c:3249 tcop/postgres.c:3308 -#, c-format -msgid "terminating connection due to conflict with recovery" -msgstr "terminando la conexión debido a un conflicto con la recuperación" - -#: tcop/postgres.c:3260 +#: tcop/postgres.c:3317 #, c-format msgid "terminating connection due to administrator command" msgstr "terminando la conexión debido a una orden del administrador" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3348 #, c-format msgid "connection to client lost" msgstr "se ha perdido la conexión al cliente" -#: tcop/postgres.c:3361 +#: tcop/postgres.c:3400 #, c-format msgid "canceling statement due to lock timeout" -msgstr "cancelando la sentencia debido a que se agotó el tiempo de espera de candados (locks)" +msgstr "cancelando la sentencia debido a que se agotó el tiempo de espera de “locks”" -#: tcop/postgres.c:3368 +#: tcop/postgres.c:3407 #, c-format msgid "canceling statement due to statement timeout" msgstr "cancelando la sentencia debido a que se agotó el tiempo de espera de sentencias" -#: tcop/postgres.c:3375 +#: tcop/postgres.c:3414 #, c-format msgid "canceling autovacuum task" msgstr "cancelando tarea de autovacuum" -#: tcop/postgres.c:3398 +#: tcop/postgres.c:3427 #, c-format msgid "canceling statement due to user request" msgstr "cancelando la sentencia debido a una petición del usuario" -#: tcop/postgres.c:3412 +#: tcop/postgres.c:3448 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "terminando la conexión debido a que se agotó el tiempo de espera para transacciones abiertas inactivas" -#: tcop/postgres.c:3423 +#: tcop/postgres.c:3461 +#, c-format +msgid "terminating connection due to transaction timeout" +msgstr "terminando la conexión debido a que se agotó el tiempo de espera para transacciones" + +#: tcop/postgres.c:3474 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "terminando la conexión debido a que se agotó el tiempo de espera para sesiones abiertas inactivas" -#: tcop/postgres.c:3514 +#: tcop/postgres.c:3564 #, c-format msgid "stack depth limit exceeded" msgstr "límite de profundidad de stack alcanzado" -#: tcop/postgres.c:3515 +#: 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 "Incremente el parámetro de configuración «max_stack_depth» (actualmente %dkB), después de asegurarse que el límite de profundidad de stack de la plataforma es adecuado." -#: tcop/postgres.c:3562 +#: tcop/postgres.c:3612 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "«max_stack_depth» no debe exceder %ldkB." -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3614 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Incremente el límite de profundidad del stack del sistema usando «ulimit -s» o el equivalente de su sistema." -#: tcop/postgres.c:3587 -#, fuzzy, c-format -#| msgid "huge_page_size must be 0 on this platform." -msgid "client_connection_check_interval must be set to 0 on this platform." -msgstr "huge_page_size debe ser 0 en esta plataforma." +#: tcop/postgres.c:3637 +#, c-format +msgid "\"client_connection_check_interval\" must be set to 0 on this platform." +msgstr "«client_connection_check_interval» debe ser 0 en esta plataforma." -#: tcop/postgres.c:3608 +#: tcop/postgres.c:3658 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "No se puede activar el parámetro cuando «log_statement_stats» está activo." -#: tcop/postgres.c:3623 +#: 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 "No se puede activar «log_statement_stats» cuando «log_parser_stats», «log_planner_stats» o «log_executor_stats» están activos." -#: tcop/postgres.c:3971 +#: tcop/postgres.c:4098 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "argumentos de línea de órdenes no válidos para proceso servidor: %s" -#: tcop/postgres.c:3972 tcop/postgres.c:3978 +#: tcop/postgres.c:4099 tcop/postgres.c:4105 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: tcop/postgres.c:3976 +#: tcop/postgres.c:4103 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: argumento de línea de órdenes no válido: %s" -#: tcop/postgres.c:4029 +#: tcop/postgres.c:4156 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: no se ha especificado base de datos ni usuario" -#: tcop/postgres.c:4774 +#: tcop/postgres.c:4909 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "subtipo %d de mensaje CLOSE no válido" -#: tcop/postgres.c:4811 +#: tcop/postgres.c:4946 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "subtipo %d de mensaje DESCRIBE no válido" -#: tcop/postgres.c:4898 +#: tcop/postgres.c:5033 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "la invocación «fastpath» de funciones no está soportada en conexiones de replicación" -#: tcop/postgres.c:4902 +#: tcop/postgres.c:5037 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "el protocolo extendido de consultas no está soportado en conexiones de replicación" -#: tcop/postgres.c:5082 +#: tcop/postgres.c:5217 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "desconexión: duración de sesión: %d:%02d:%02d.%03d usuario=%s base=%s host=%s%s%s" @@ -22761,57 +23408,56 @@ msgstr "desconexión: duración de sesión: %d:%02d:%02d.%03d usuario=%s base=%s msgid "bind message has %d result formats but query has %d columns" msgstr "el mensaje de «bind» tiene %d formatos de resultado pero la consulta tiene %d columnas" -#: 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 "el cursor sólo se puede desplazar hacia adelante" -#: 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 "Declárelo con SCROLL para permitirle desplazar hacia atrás." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:417 +#: tcop/utility.c:410 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "no se puede ejecutar %s en una transacción de sólo lectura" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:435 +#: tcop/utility.c:428 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "no se puede ejecutar %s durante una operación paralela" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:454 +#: tcop/utility.c:447 #, c-format msgid "cannot execute %s during recovery" msgstr "no se puede ejecutar %s durante la recuperación" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:472 +#: tcop/utility.c:465 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "no se puede ejecutar %s durante una operación restringida por seguridad" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:828 +#: tcop/utility.c:821 #, c-format msgid "cannot execute %s within a background process" msgstr "no se puede ejecutar %s dentro de un proceso en segundo plano" -#: tcop/utility.c:953 -#, fuzzy, c-format -#| msgid "permission denied for sequence %s" +#. translator: %s is name of a SQL command, eg CHECKPOINT +#: tcop/utility.c:947 +#, c-format msgid "permission denied to execute %s command" -msgstr "permiso denegado a la secuencia %s" +msgstr "permiso denegado a ejecutar la sentencia %s" -#: tcop/utility.c:955 -#, fuzzy, c-format -#| msgid "Set the privileges of the element type instead." +#: tcop/utility.c:949 +#, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." -msgstr "Defina los privilegios del tipo elemento en su lugar." +msgstr "Sólo los roles con privilegios del rol «%s» pueden ejecutar esta sentencia." #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:616 #, c-format @@ -22962,13 +23608,13 @@ msgstr "marca de afijo «%s» no válida con el valor de marca «long»" msgid "could not open dictionary file \"%s\": %m" msgstr "no se pudo abrir el archivo de diccionario «%s»: %m" -#: tsearch/spell.c:749 utils/adt/regexp.c:224 jsonpath_gram.y:559 +#: tsearch/spell.c:749 utils/adt/regexp.c:223 jsonpath_gram.y:629 #, c-format msgid "invalid regular expression: %s" msgstr "la expresión regular no es válida: %s" #: tsearch/spell.c:963 tsearch/spell.c:980 tsearch/spell.c:997 -#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18124 gram.y:18141 +#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18735 gram.y:18752 #, c-format msgid "syntax error" msgstr "error de sintaxis" @@ -23004,17 +23650,17 @@ msgstr "el número de aliases excede el número especificado %d" msgid "affix file contains both old-style and new-style commands" msgstr "el archivo de «affix» contiene órdenes en estilos antiguo y nuevo" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:278 utils/adt/tsvector_op.c:1128 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "la cadena es demasiado larga para tsvector (%d bytes, máximo %d bytes)" -#: tsearch/ts_locale.c:238 +#: tsearch/ts_locale.c:236 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "línea %d del archivo de configuración «%s»: «%s»" -#: tsearch/ts_locale.c:317 +#: tsearch/ts_locale.c:315 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "conversión desde un wchar_t a la codificación del servidor falló: %m" @@ -23041,193 +23687,197 @@ msgstr "nombre de configuración de búsqueda en texto «%s» no válido" msgid "could not open stop-word file \"%s\": %m" msgstr "no se pudo abrir el archivo de stopwords «%s»: %m" -#: tsearch/wparser.c:308 tsearch/wparser.c:396 tsearch/wparser.c:473 +#: tsearch/wparser.c:306 tsearch/wparser.c:394 tsearch/wparser.c:471 #, c-format msgid "text search parser does not support headline creation" msgstr "el analizador de búsqueda en texto no soporta creación de encabezados (headline)" -#: tsearch/wparser_def.c:2648 +#: tsearch/wparser_def.c:2664 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "parámetro de encabezado (headline) no reconocido: «%s»" -#: tsearch/wparser_def.c:2658 +#: tsearch/wparser_def.c:2674 #, c-format -msgid "MinWords should be less than MaxWords" -msgstr "MinWords debería ser menor que MaxWords" +#| msgid "%s must be in range %d..%d" +msgid "%s must be less than %s" +msgstr "%s debe ser menor que %s" -#: tsearch/wparser_def.c:2662 +#: tsearch/wparser_def.c:2678 #, c-format -msgid "MinWords should be positive" -msgstr "MinWords debería ser positivo" +#| msgid "COST must be positive" +msgid "%s must be positive" +msgstr "%s debe ser positivo" -#: tsearch/wparser_def.c:2666 +#: tsearch/wparser_def.c:2682 tsearch/wparser_def.c:2686 #, c-format -msgid "ShortWord should be >= 0" -msgstr "ShortWord debería ser >= 0" +msgid "%s must be >= 0" +msgstr "%s debe ser >= 0" -#: tsearch/wparser_def.c:2670 +#: utils/activity/pgstat.c:435 #, c-format -msgid "MaxFragments should be >= 0" -msgstr "MaxFragments debería ser >= 0" - -#: utils/activity/pgstat.c:438 -#, fuzzy, c-format -#| msgid "could not open statistics file \"%s\": %m" msgid "could not unlink permanent statistics file \"%s\": %m" -msgstr "no se pudo abrir el archivo de estadísticas «%s»: %m" +msgstr "no se pudo eliminar el archivo permanente de estadísticas «%s»: %m" -#: utils/activity/pgstat.c:1241 -#, fuzzy, c-format -#| msgid "unrecognized statistics kind \"%s\"" +#: utils/activity/pgstat.c:1255 +#, c-format msgid "invalid statistics kind: \"%s\"" -msgstr "tipo de estadísticas «%s» no reconocido" +msgstr "tipo de estadísticas no válido: «%s»" -#: utils/activity/pgstat.c:1321 +#: utils/activity/pgstat.c:1335 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal de estadísticas «%s»: %m" -#: utils/activity/pgstat.c:1433 +#: utils/activity/pgstat.c:1455 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "no se pudo escribir el archivo temporal de estadísticas «%s»: %m" -#: utils/activity/pgstat.c:1442 +#: utils/activity/pgstat.c:1464 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "no se pudo cerrar el archivo temporal de estadísticas «%s»: %m" -#: utils/activity/pgstat.c:1450 +#: utils/activity/pgstat.c:1472 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "no se pudo cambiar el nombre al archivo temporal de estadísticas de «%s» a «%s»: %m" -#: utils/activity/pgstat.c:1499 +#: utils/activity/pgstat.c:1521 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo de estadísticas «%s»: %m" -#: utils/activity/pgstat.c:1661 +#: utils/activity/pgstat.c:1683 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "el archivo de estadísticas «%s» está corrupto" #: utils/activity/pgstat_function.c:118 -#, fuzzy, c-format -#| msgid "cast function must be a normal function" +#, c-format msgid "function call to dropped function" -msgstr "la función de conversión debe ser una función normal" +msgstr "invocación a una función eliminada" -#: utils/activity/pgstat_xact.c:363 +#: utils/activity/pgstat_xact.c:362 #, c-format msgid "resetting existing statistics for kind %s, db=%u, oid=%u" -msgstr "" +msgstr "reseteando estadísticas existentes para el tipo %s, db=%u, oid=%u" + +#: utils/activity/wait_event.c:207 utils/activity/wait_event.c:232 +#, c-format +msgid "wait event \"%s\" already exists in type \"%s\"" +msgstr "ya existe un “wait event” llamado «%s» en el tipo «%s»" + +#: utils/activity/wait_event.c:246 +#, c-format +msgid "too many custom wait events" +msgstr "demasiados “wait events” definidos por el usuario" -#: utils/adt/acl.c:177 utils/adt/name.c:93 +#: utils/adt/acl.c:183 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "el identificador es demasiado largo" -#: utils/adt/acl.c:178 utils/adt/name.c:94 +#: utils/adt/acl.c:184 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "El identificador debe ser menor a %d caracteres." -#: utils/adt/acl.c:266 +#: utils/adt/acl.c:272 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "palabra clave no reconocida: «%s»" -#: utils/adt/acl.c:267 +#: utils/adt/acl.c:273 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Palabra clave de ACL debe ser «group» o «user»." -#: utils/adt/acl.c:275 +#: utils/adt/acl.c:281 #, c-format msgid "missing name" msgstr "falta un nombre" -#: utils/adt/acl.c:276 +#: utils/adt/acl.c:282 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Debe venir un nombre después de una palabra clave «group» o «user»." -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:288 #, c-format msgid "missing \"=\" sign" msgstr "falta un signo «=»" -#: utils/adt/acl.c:344 +#: utils/adt/acl.c:350 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "carácter de modo no válido: debe ser uno de «%s»" -#: utils/adt/acl.c:374 +#: utils/adt/acl.c:380 #, c-format msgid "a name must follow the \"/\" sign" msgstr "debe venir un nombre después del signo «/»" -#: utils/adt/acl.c:386 +#: utils/adt/acl.c:392 #, c-format msgid "defaulting grantor to user ID %u" msgstr "usando el cedente por omisión con ID %u" -#: utils/adt/acl.c:572 +#: utils/adt/acl.c:578 #, c-format msgid "ACL array contains wrong data type" msgstr "el array ACL contiene tipo de datos incorrecto" -#: utils/adt/acl.c:576 +#: utils/adt/acl.c:582 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "los array de ACL debe ser unidimensional" -#: utils/adt/acl.c:580 +#: utils/adt/acl.c:586 #, c-format msgid "ACL arrays must not contain null values" msgstr "los arrays de ACL no pueden contener valores nulos" -#: utils/adt/acl.c:609 +#: utils/adt/acl.c:615 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "basura extra al final de la especificación de la ACL" -#: utils/adt/acl.c:1251 +#: utils/adt/acl.c:1263 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "la opción de grant no puede ser otorgada de vuelta a quien la otorgó" -#: utils/adt/acl.c:1567 +#: utils/adt/acl.c:1579 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert ya no está soportado" -#: utils/adt/acl.c:1577 +#: utils/adt/acl.c:1589 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove ya no está soportado" -#: utils/adt/acl.c:1697 +#: utils/adt/acl.c:1709 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "tipo de privilegio no reconocido: «%s»" -#: utils/adt/acl.c:3484 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 "no existe la función «%s»" -#: utils/adt/acl.c:5031 +#: utils/adt/acl.c:5196 #, c-format msgid "must be able to SET ROLE \"%s\"" -msgstr "" +msgstr "debe ser capaz de hacer SET ROLE «%s»" #: utils/adt/array_userfuncs.c:102 utils/adt/array_userfuncs.c:489 -#: utils/adt/array_userfuncs.c:878 utils/adt/json.c:694 utils/adt/json.c:831 -#: utils/adt/json.c:869 utils/adt/jsonb.c:1139 utils/adt/jsonb.c:1211 -#: utils/adt/jsonb.c:1629 utils/adt/jsonb.c:1817 utils/adt/jsonb.c:1827 +#: utils/adt/array_userfuncs.c:866 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 "no se pudo determinar el tipo de dato de entrada" @@ -23238,17 +23888,17 @@ msgid "input data type is not an array" msgstr "el tipo de entrada no es un array" #: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 -#: utils/adt/float.c:1228 utils/adt/float.c:1302 utils/adt/float.c:4117 -#: utils/adt/float.c:4155 utils/adt/int.c:778 utils/adt/int.c:800 +#: 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:1257 utils/adt/numeric.c:1901 utils/adt/numeric.c:4388 -#: utils/adt/rangetypes.c:1481 utils/adt/rangetypes.c:1494 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1132 -#: utils/adt/varlena.c:3134 +#: 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 "entero fuera de rango" @@ -23285,268 +23935,278 @@ msgstr "Los arrays con elementos de diferentes dimensiones son incompatibles par msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Los arrays con diferentes dimensiones son incompatibles para la concatenación." -#: utils/adt/array_userfuncs.c:987 utils/adt/array_userfuncs.c:995 -#: utils/adt/arrayfuncs.c:5590 utils/adt/arrayfuncs.c:5596 +#: 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 "no se pueden acumular arrays de distinta dimensionalidad" -#: utils/adt/array_userfuncs.c:1286 utils/adt/array_userfuncs.c:1440 +#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "no está soportada la búsqueda de elementos en arrays multidimensionales" -#: utils/adt/array_userfuncs.c:1315 +#: utils/adt/array_userfuncs.c:1301 #, c-format msgid "initial position must not be null" msgstr "la posición inicial no debe ser null" -#: utils/adt/array_userfuncs.c:1688 -#, fuzzy, c-format -#| msgid "sample percentage must be between 0 and 100" +#: utils/adt/array_userfuncs.c:1674 +#, c-format msgid "sample size must be between 0 and %d" -msgstr "el porcentaje de muestreo debe estar entre 0 y 100" - -#: utils/adt/arrayfuncs.c:273 utils/adt/arrayfuncs.c:287 -#: utils/adt/arrayfuncs.c:298 utils/adt/arrayfuncs.c:320 -#: utils/adt/arrayfuncs.c:337 utils/adt/arrayfuncs.c:351 -#: utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:366 -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:521 -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:547 -#: utils/adt/arrayfuncs.c:568 utils/adt/arrayfuncs.c:598 -#: utils/adt/arrayfuncs.c:605 utils/adt/arrayfuncs.c:613 -#: utils/adt/arrayfuncs.c:647 utils/adt/arrayfuncs.c:670 -#: utils/adt/arrayfuncs.c:690 utils/adt/arrayfuncs.c:807 -#: utils/adt/arrayfuncs.c:816 utils/adt/arrayfuncs.c:846 -#: utils/adt/arrayfuncs.c:861 utils/adt/arrayfuncs.c:914 +msgstr "el tamaño de la muestra debe estar entre 0 y %d" + +#: utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:273 +#: utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:307 +#: utils/adt/arrayfuncs.c:440 utils/adt/arrayfuncs.c:454 +#: utils/adt/arrayfuncs.c:466 utils/adt/arrayfuncs.c:636 +#: utils/adt/arrayfuncs.c:668 utils/adt/arrayfuncs.c:703 +#: utils/adt/arrayfuncs.c:718 utils/adt/arrayfuncs.c:777 +#: utils/adt/arrayfuncs.c:782 utils/adt/arrayfuncs.c:870 +#: utils/adt/arrayfuncs.c:897 utils/adt/arrayfuncs.c:904 +#: utils/adt/arrayfuncs.c:941 #, c-format msgid "malformed array literal: \"%s\"" msgstr "literal de array mal formado: «%s»" -#: utils/adt/arrayfuncs.c:274 -#, c-format -msgid "\"[\" must introduce explicitly-specified array dimensions." -msgstr "Un «[» debe introducir dimensiones de array especificadas explícitamente." - -#: utils/adt/arrayfuncs.c:288 +#: utils/adt/arrayfuncs.c:265 #, c-format -msgid "Missing array dimension value." -msgstr "Falta un valor de dimensión de array." +msgid "Array value must start with \"{\" or dimension information." +msgstr "El valor de array debe comenzar con «{» o información de dimensión." -#: utils/adt/arrayfuncs.c:299 utils/adt/arrayfuncs.c:338 +#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:467 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "Falta «%s» luego de las dimensiones de array." -#: utils/adt/arrayfuncs.c:308 utils/adt/arrayfuncs.c:2933 -#: utils/adt/arrayfuncs.c:2965 utils/adt/arrayfuncs.c:2980 +#: utils/adt/arrayfuncs.c:285 #, c-format -msgid "upper bound cannot be less than lower bound" -msgstr "el límite superior no puede ser menor que el límite inferior" +msgid "Array contents must start with \"{\"." +msgstr "El contenido del array debe empezar con «{»." + +#: utils/adt/arrayfuncs.c:308 utils/adt/multirangetypes.c:292 +#, c-format +msgid "Junk after closing right brace." +msgstr "Basura después de la llave derecha de cierre." + +#: utils/adt/arrayfuncs.c:431 utils/adt/arrayfuncs.c:643 +#, c-format +msgid "number of array dimensions exceeds the maximum allowed (%d)" +msgstr "el número de dimensiones del array excede el máximo permitido (%d)" + +#: utils/adt/arrayfuncs.c:441 +#, c-format +msgid "\"[\" must introduce explicitly-specified array dimensions." +msgstr "Un «[» debe introducir dimensiones de array especificadas explícitamente." -#: utils/adt/arrayfuncs.c:321 +#: utils/adt/arrayfuncs.c:455 #, c-format -msgid "Array value must start with \"{\" or dimension information." -msgstr "El valor de array debe comenzar con «{» o información de dimensión." +msgid "Missing array dimension value." +msgstr "Falta un valor de dimensión de array." -#: utils/adt/arrayfuncs.c:352 +#: utils/adt/arrayfuncs.c:481 utils/adt/arrayfuncs.c:2940 +#: utils/adt/arrayfuncs.c:2985 utils/adt/arrayfuncs.c:3000 #, c-format -msgid "Array contents must start with \"{\"." -msgstr "El contenido del array debe empezar con «{»." +msgid "upper bound cannot be less than lower bound" +msgstr "el límite superior no puede ser menor que el límite inferior" -#: utils/adt/arrayfuncs.c:360 utils/adt/arrayfuncs.c:367 +#: utils/adt/arrayfuncs.c:487 #, c-format -msgid "Specified array dimensions do not match array contents." -msgstr "Las dimensiones del array especificadas no coinciden con el contenido del array." +msgid "array upper bound is too large: %d" +msgstr "el límite superior del array es demasiado grande: %d" -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:533 -#: utils/adt/multirangetypes.c:166 utils/adt/rangetypes.c:2405 -#: utils/adt/rangetypes.c:2413 utils/adt/rowtypes.c:219 -#: utils/adt/rowtypes.c:230 +#: utils/adt/arrayfuncs.c:538 #, c-format -msgid "Unexpected end of input." -msgstr "Fin inesperado de la entrada." +msgid "array bound is out of integer range" +msgstr "límite de array está fuera del rango entero" -#: utils/adt/arrayfuncs.c:522 utils/adt/arrayfuncs.c:569 -#: utils/adt/arrayfuncs.c:599 utils/adt/arrayfuncs.c:648 +#: utils/adt/arrayfuncs.c:637 utils/adt/arrayfuncs.c:669 +#: utils/adt/arrayfuncs.c:704 utils/adt/arrayfuncs.c:898 #, c-format msgid "Unexpected \"%c\" character." msgstr "Carácter «%c» inesperado." -#: utils/adt/arrayfuncs.c:548 utils/adt/arrayfuncs.c:671 +#: utils/adt/arrayfuncs.c:719 #, c-format msgid "Unexpected array element." msgstr "Elemento de array inesperado." -#: utils/adt/arrayfuncs.c:606 +#: utils/adt/arrayfuncs.c:778 #, c-format -msgid "Unmatched \"%c\" character." -msgstr "Carácter «%c» desemparejado." +msgid "Specified array dimensions do not match array contents." +msgstr "Las dimensiones del array especificadas no coinciden con el contenido del array." -#: utils/adt/arrayfuncs.c:614 utils/adt/jsonfuncs.c:2553 +#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2598 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Los arrays multidimensionales deben tener sub-arrays con dimensiones coincidentes." -#: utils/adt/arrayfuncs.c:691 utils/adt/multirangetypes.c:293 +#: utils/adt/arrayfuncs.c:871 utils/adt/arrayfuncs.c:905 #, c-format -msgid "Junk after closing right brace." -msgstr "Basura después de la llave derecha de cierre." +msgid "Incorrectly quoted array element." +msgstr "Elemento de array entrecomillado incorrectamente." + +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 +#: utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 +#: utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#, c-format +msgid "Unexpected end of input." +msgstr "Fin inesperado de la entrada." -#: utils/adt/arrayfuncs.c:1325 utils/adt/arrayfuncs.c:3479 -#: utils/adt/arrayfuncs.c:6080 +#: utils/adt/arrayfuncs.c:1301 utils/adt/arrayfuncs.c:3499 +#: utils/adt/arrayfuncs.c:6106 #, c-format msgid "invalid number of dimensions: %d" msgstr "número incorrecto de dimensiones: %d" -#: utils/adt/arrayfuncs.c:1336 +#: utils/adt/arrayfuncs.c:1312 #, c-format msgid "invalid array flags" msgstr "opciones de array no válidas" -#: utils/adt/arrayfuncs.c:1358 +#: utils/adt/arrayfuncs.c:1334 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "los datos binarios tienen el tipo de elemento de array %u (%s) en lugar del esperado %u (%s)" -#: utils/adt/arrayfuncs.c:1402 utils/adt/multirangetypes.c:451 -#: utils/adt/rangetypes.c:344 utils/cache/lsyscache.c:2916 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 #, c-format msgid "no binary input function available for type %s" msgstr "no hay una función binaria de entrada para el tipo %s" -#: utils/adt/arrayfuncs.c:1542 +#: utils/adt/arrayfuncs.c:1509 #, c-format msgid "improper binary format in array element %d" msgstr "el formato binario no es válido en elemento %d de array" -#: utils/adt/arrayfuncs.c:1623 utils/adt/multirangetypes.c:456 -#: utils/adt/rangetypes.c:349 utils/cache/lsyscache.c:2949 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 #, c-format msgid "no binary output function available for type %s" msgstr "no hay una función binaria de salida para el tipo %s" -#: utils/adt/arrayfuncs.c:2102 +#: utils/adt/arrayfuncs.c:2067 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "no está implementada la obtención de segmentos de arrays de largo fijo" -#: utils/adt/arrayfuncs.c:2280 utils/adt/arrayfuncs.c:2302 -#: utils/adt/arrayfuncs.c:2351 utils/adt/arrayfuncs.c:2589 -#: utils/adt/arrayfuncs.c:2911 utils/adt/arrayfuncs.c:6066 -#: utils/adt/arrayfuncs.c:6092 utils/adt/arrayfuncs.c:6103 -#: utils/adt/json.c:1497 utils/adt/json.c:1569 utils/adt/jsonb.c:1416 -#: utils/adt/jsonb.c:1500 utils/adt/jsonfuncs.c:4434 utils/adt/jsonfuncs.c:4587 -#: utils/adt/jsonfuncs.c:4698 utils/adt/jsonfuncs.c:4746 +#: 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 "número incorrecto de subíndices del array" -#: utils/adt/arrayfuncs.c:2285 utils/adt/arrayfuncs.c:2393 -#: utils/adt/arrayfuncs.c:2656 utils/adt/arrayfuncs.c:2970 +#: 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 "subíndice de array fuera de rango" -#: utils/adt/arrayfuncs.c:2290 +#: utils/adt/arrayfuncs.c:2255 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "no se puede asignar un valor nulo a un elemento de un array de longitud fija" -#: utils/adt/arrayfuncs.c:2858 +#: utils/adt/arrayfuncs.c:2855 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "no están implementadas las actualizaciones en segmentos de arrays de largo fija" -#: utils/adt/arrayfuncs.c:2889 +#: utils/adt/arrayfuncs.c:2886 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "los subíndices del segmento de array deben especificar ambos bordes" -#: utils/adt/arrayfuncs.c:2890 +#: utils/adt/arrayfuncs.c:2887 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Cuando se asigna a un segmento de un array vacío, los bordes del segmento deben ser especificados completamente." -#: utils/adt/arrayfuncs.c:2901 utils/adt/arrayfuncs.c:2997 +#: utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:3017 #, c-format msgid "source array too small" msgstr "el array de origen es demasiado pequeño" -#: utils/adt/arrayfuncs.c:3637 +#: utils/adt/arrayfuncs.c:3657 #, c-format msgid "null array element not allowed in this context" msgstr "los arrays con elementos null no son permitidos en este contexto" -#: utils/adt/arrayfuncs.c:3808 utils/adt/arrayfuncs.c:3979 -#: utils/adt/arrayfuncs.c:4370 +#: 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 "no se pueden comparar arrays con elementos de distintos tipos" -#: utils/adt/arrayfuncs.c:4157 utils/adt/multirangetypes.c:2806 -#: utils/adt/multirangetypes.c:2878 utils/adt/rangetypes.c:1354 -#: utils/adt/rangetypes.c:1418 utils/adt/rowtypes.c:1885 +#: 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 "no se pudo identificar una función de hash para el tipo %s" -#: utils/adt/arrayfuncs.c:4285 utils/adt/rowtypes.c:2006 +#: utils/adt/arrayfuncs.c:4305 utils/adt/rowtypes.c:1996 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "no se pudo identificar una función de hash extendida para el tipo %s" -#: utils/adt/arrayfuncs.c:5480 +#: utils/adt/arrayfuncs.c:5506 #, c-format msgid "data type %s is not an array type" msgstr "el tipo %s no es un array" -#: utils/adt/arrayfuncs.c:5535 +#: utils/adt/arrayfuncs.c:5561 #, c-format msgid "cannot accumulate null arrays" msgstr "no se pueden acumular arrays nulos" -#: utils/adt/arrayfuncs.c:5563 +#: utils/adt/arrayfuncs.c:5589 #, c-format msgid "cannot accumulate empty arrays" msgstr "no se pueden acumular arrays vacíos" -#: utils/adt/arrayfuncs.c:5964 utils/adt/arrayfuncs.c:6004 +#: utils/adt/arrayfuncs.c:5990 utils/adt/arrayfuncs.c:6030 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "el array de dimensiones o el array de límites inferiores debe ser no nulo" -#: utils/adt/arrayfuncs.c:6067 utils/adt/arrayfuncs.c:6093 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "Dimension array must be one dimensional." msgstr "El array de dimensiones debe ser unidimensional." -#: utils/adt/arrayfuncs.c:6072 utils/adt/arrayfuncs.c:6098 +#: utils/adt/arrayfuncs.c:6098 utils/adt/arrayfuncs.c:6124 #, c-format msgid "dimension values cannot be null" msgstr "los valores de dimensión no pueden ser null" -#: utils/adt/arrayfuncs.c:6104 +#: utils/adt/arrayfuncs.c:6130 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "El array de límites inferiores tiene tamaño diferente que el array de dimensiones." -#: utils/adt/arrayfuncs.c:6382 +#: utils/adt/arrayfuncs.c:6411 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "la eliminación de elementos desde arrays multidimensionales no está soportada" -#: utils/adt/arrayfuncs.c:6659 +#: utils/adt/arrayfuncs.c:6688 #, c-format msgid "thresholds must be one-dimensional array" msgstr "los umbrales deben ser un array unidimensional" -#: utils/adt/arrayfuncs.c:6664 +#: utils/adt/arrayfuncs.c:6693 #, c-format msgid "thresholds array must not contain NULLs" msgstr "el array de umbrales no debe contener nulos" -#: utils/adt/arrayfuncs.c:6897 +#: utils/adt/arrayfuncs.c:6926 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "el número de elementos a recortar debe estar entre 0 y %d" @@ -23561,22 +24221,22 @@ msgstr "los subíndices de arrays deben tener tipo entero" msgid "array subscript in assignment must not be null" msgstr "subíndice de array en asignación no puede ser nulo" -#: utils/adt/arrayutils.c:161 +#: utils/adt/arrayutils.c:140 #, c-format msgid "array lower bound is too large: %d" msgstr "el límite inferior del array es demasiado grande: %d" -#: utils/adt/arrayutils.c:263 +#: utils/adt/arrayutils.c:242 #, c-format msgid "typmod array must be type cstring[]" msgstr "el array de typmod debe ser de tipo cstring[]" -#: utils/adt/arrayutils.c:268 +#: utils/adt/arrayutils.c:247 #, c-format msgid "typmod array must be one-dimensional" msgstr "array de typmod debe ser unidimensional" -#: utils/adt/arrayutils.c:273 +#: utils/adt/arrayutils.c:252 #, c-format msgid "typmod array must not contain nulls" msgstr "los arrays de typmod no deben contener valores nulos" @@ -23587,214 +24247,242 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "la conversión de codificación de %s a ASCII no está soportada" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:4017 -#: utils/adt/float.c:206 utils/adt/float.c:293 utils/adt/float.c:307 -#: utils/adt/float.c:412 utils/adt/float.c:495 utils/adt/float.c:509 +#: 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:183 utils/adt/mac.c:94 utils/adt/mac8.c:225 -#: utils/adt/network.c:99 utils/adt/numeric.c:795 utils/adt/numeric.c:7136 -#: utils/adt/numeric.c:7339 utils/adt/numeric.c:8286 utils/adt/numutils.c:273 -#: utils/adt/numutils.c:451 utils/adt/numutils.c:629 utils/adt/numutils.c:668 -#: utils/adt/numutils.c:690 utils/adt/numutils.c:754 utils/adt/numutils.c:776 -#: utils/adt/pg_lsn.c:74 utils/adt/tid.c:72 utils/adt/tid.c:80 -#: utils/adt/tid.c:94 utils/adt/tid.c:103 utils/adt/timestamp.c:494 -#: utils/adt/uuid.c:135 utils/adt/xid8funcs.c:354 +#: 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 "la sintaxis de entrada no es válida para tipo %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:267 -#: utils/adt/numutils.c:445 utils/adt/numutils.c:623 utils/adt/numutils.c:674 -#: utils/adt/numutils.c:713 utils/adt/numutils.c:760 +#: 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 "el valor «%s» está fuera de rango para el tipo %s" +msgid "money out of range" +msgstr "money fuera de rango" -#: 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:105 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:515 utils/adt/int8.c:573 -#: utils/adt/int8.c:943 utils/adt/int8.c:1023 utils/adt/int8.c:1085 -#: utils/adt/int8.c:1165 utils/adt/numeric.c:3175 utils/adt/numeric.c:3198 -#: utils/adt/numeric.c:3283 utils/adt/numeric.c:3301 utils/adt/numeric.c:3397 -#: utils/adt/numeric.c:8835 utils/adt/numeric.c:9148 utils/adt/numeric.c:9496 -#: utils/adt/numeric.c:9612 utils/adt/numeric.c:11122 -#: utils/adt/timestamp.c:3406 +#: 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 "división por cero" +#: 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 "el valor «%s» está fuera de rango para el tipo %s" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" msgstr "«char» fuera de rango" #: utils/adt/cryptohashfuncs.c:48 utils/adt/cryptohashfuncs.c:70 -#, fuzzy, c-format -#| msgid "could not decompress: %s" +#, c-format msgid "could not compute %s hash: %s" -msgstr "no se pudo descomprimir: %s" +msgstr "no se pudo calcular el hash %s: %s" -#: utils/adt/date.c:63 utils/adt/timestamp.c:100 utils/adt/varbit.c:105 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "el modificador de tipo no es válido" -#: utils/adt/date.c:75 +#: utils/adt/date.c:76 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "la precisión de TIME(%d)%s no debe ser negativa" -#: utils/adt/date.c:81 +#: utils/adt/date.c:82 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIME(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/date.c:166 utils/adt/date.c:174 utils/adt/formatting.c:4241 -#: utils/adt/formatting.c:4250 utils/adt/formatting.c:4363 -#: utils/adt/formatting.c:4373 +#: 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 #, c-format msgid "date out of range: \"%s\"" msgstr "fecha fuera de rango: «%s»" -#: utils/adt/date.c:221 utils/adt/date.c:519 utils/adt/date.c:543 -#: utils/adt/rangetypes.c:1577 utils/adt/rangetypes.c:1592 utils/adt/xml.c:2460 +#: 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 "fecha fuera de rango" -#: utils/adt/date.c:267 utils/adt/timestamp.c:582 +#: utils/adt/date.c:268 utils/adt/timestamp.c:598 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "valor en campo de fecha fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:274 utils/adt/date.c:283 utils/adt/timestamp.c:588 +#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "fecha fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:494 +#: utils/adt/date.c:495 #, c-format msgid "cannot subtract infinite dates" msgstr "no se pueden restar fechas infinitas" -#: utils/adt/date.c:592 utils/adt/date.c:655 utils/adt/date.c:691 -#: utils/adt/date.c:2885 utils/adt/date.c:2895 +#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 +#: utils/adt/date.c:2906 utils/adt/date.c:2916 #, c-format msgid "date out of range for timestamp" msgstr "fecha fuera de rango para timestamp" -#: utils/adt/date.c:1121 utils/adt/date.c:1204 utils/adt/date.c:1220 -#: utils/adt/date.c:2206 utils/adt/date.c:2990 utils/adt/timestamp.c:4097 -#: utils/adt/timestamp.c:4290 utils/adt/timestamp.c:4432 -#: utils/adt/timestamp.c:4685 utils/adt/timestamp.c:4886 -#: utils/adt/timestamp.c:4933 utils/adt/timestamp.c:5157 -#: utils/adt/timestamp.c:5204 utils/adt/timestamp.c:5334 -#, fuzzy, c-format -#| msgid "\"RN\" not supported for input" +#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 +#: utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 +#: utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 +#: utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 +#: utils/adt/timestamp.c:6070 +#, c-format msgid "unit \"%s\" not supported for type %s" -msgstr "«RN» no está soportado en la entrada" +msgstr "unidades «%s» no soportada para el tipo %s" -#: utils/adt/date.c:1229 utils/adt/date.c:2222 utils/adt/date.c:3010 -#: utils/adt/timestamp.c:4111 utils/adt/timestamp.c:4307 -#: utils/adt/timestamp.c:4446 utils/adt/timestamp.c:4645 -#: utils/adt/timestamp.c:4942 utils/adt/timestamp.c:5213 -#: utils/adt/timestamp.c:5395 -#, fuzzy, c-format -#| msgid "%s: unrecognized start type \"%s\"\n" +#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 +#: utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 +#: utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 +#: utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 +#: utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 +#, c-format msgid "unit \"%s\" not recognized for type %s" -msgstr "%s: tipo de inicio «%s» no reconocido\n" - -#: utils/adt/date.c:1313 utils/adt/date.c:1359 utils/adt/date.c:1918 -#: utils/adt/date.c:1949 utils/adt/date.c:1978 utils/adt/date.c:2848 -#: utils/adt/date.c:3080 utils/adt/datetime.c:424 utils/adt/datetime.c:1809 -#: utils/adt/formatting.c:4081 utils/adt/formatting.c:4117 -#: utils/adt/formatting.c:4210 utils/adt/formatting.c:4339 utils/adt/json.c:467 -#: utils/adt/json.c:506 utils/adt/timestamp.c:232 utils/adt/timestamp.c:264 -#: utils/adt/timestamp.c:700 utils/adt/timestamp.c:709 -#: utils/adt/timestamp.c:787 utils/adt/timestamp.c:820 -#: utils/adt/timestamp.c:2933 utils/adt/timestamp.c:2954 -#: utils/adt/timestamp.c:2967 utils/adt/timestamp.c:2976 -#: utils/adt/timestamp.c:2984 utils/adt/timestamp.c:3045 -#: utils/adt/timestamp.c:3068 utils/adt/timestamp.c:3081 -#: utils/adt/timestamp.c:3092 utils/adt/timestamp.c:3100 -#: utils/adt/timestamp.c:3801 utils/adt/timestamp.c:3925 -#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4105 -#: utils/adt/timestamp.c:4198 utils/adt/timestamp.c:4301 -#: utils/adt/timestamp.c:4750 utils/adt/timestamp.c:5024 -#: utils/adt/timestamp.c:5463 utils/adt/timestamp.c:5473 -#: utils/adt/timestamp.c:5478 utils/adt/timestamp.c:5484 -#: utils/adt/timestamp.c:5517 utils/adt/timestamp.c:5604 -#: utils/adt/timestamp.c:5645 utils/adt/timestamp.c:5649 -#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 -#: utils/adt/timestamp.c:5713 utils/adt/timestamp.c:5747 utils/adt/xml.c:2482 -#: utils/adt/xml.c:2489 utils/adt/xml.c:2509 utils/adt/xml.c:2516 +msgstr "unidad «%s» no reconocida para el tipo %s" + +#: 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:2574 +#: utils/adt/xml.c:2581 utils/adt/xml.c:2601 utils/adt/xml.c:2608 #, c-format msgid "timestamp out of range" msgstr "timestamp fuera de rango" -#: utils/adt/date.c:1535 utils/adt/date.c:2343 utils/adt/formatting.c:4431 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 #, c-format msgid "time out of range" msgstr "hora fuera de rango" -#: utils/adt/date.c:1587 utils/adt/timestamp.c:597 +#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "valor en campo de hora fuera de rango: %d:%02d:%02g" -#: utils/adt/date.c:2107 utils/adt/date.c:2647 utils/adt/float.c:1042 -#: utils/adt/float.c:1118 utils/adt/int.c:635 utils/adt/int.c:682 -#: utils/adt/int.c:717 utils/adt/int8.c:414 utils/adt/numeric.c:2579 -#: utils/adt/timestamp.c:3455 utils/adt/timestamp.c:3482 -#: utils/adt/timestamp.c:3513 +#: utils/adt/date.c:2020 +#, c-format +msgid "cannot convert infinite interval to time" +msgstr "no se puede convertir intervalo infinito a time" + +#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#, c-format +msgid "cannot add infinite interval to time" +msgstr "no se puede sumar intervalo infinito a time" + +#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#, c-format +msgid "cannot subtract infinite interval from time" +msgstr "no se pueden restar intervalo infinito de time" + +#: 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 "tamaño «preceding» o «following» no válido en ventana deslizante" -#: utils/adt/date.c:2351 +#: utils/adt/date.c:2360 #, c-format msgid "time zone displacement out of range" msgstr "desplazamiento de huso horario fuera de rango" -#: utils/adt/date.c:3110 utils/adt/timestamp.c:5506 utils/adt/timestamp.c:5736 +#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#, c-format +msgid "interval time zone \"%s\" must be finite" +msgstr "el intervalo de huso horario «%s» debe ser finito" + +#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "el intervalo de huso horario «%s» no debe especificar meses o días" -#: utils/adt/datetime.c:3223 utils/adt/datetime.c:4002 -#: utils/adt/datetime.c:4008 utils/adt/timestamp.c:512 +#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 +#: utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 #, c-format msgid "time zone \"%s\" not recognized" msgstr "el huso horario «%s» no es reconocido" -#: utils/adt/datetime.c:3976 utils/adt/datetime.c:3983 +#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "valor de hora/fecha fuera de rango: «%s»" -#: utils/adt/datetime.c:3985 +#: utils/adt/datetime.c:4110 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Quizás necesite una configuración diferente de «datestyle»." -#: utils/adt/datetime.c:3990 +#: utils/adt/datetime.c:4115 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "valor de interval fuera de rango: «%s»" -#: utils/adt/datetime.c:3996 +#: utils/adt/datetime.c:4121 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "desplazamiento de huso horario fuera de rango: «%s»" -#: utils/adt/datetime.c:4010 +#: utils/adt/datetime.c:4135 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Este nombre de huso horario aparece en el archivo de configuración para abreviaciones de husos horarios «%s»." @@ -23804,23 +24492,22 @@ msgstr "Este nombre de huso horario aparece en el archivo de configuración para msgid "invalid Datum pointer" msgstr "puntero a Datum no válido" -#: utils/adt/dbsize.c:761 utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:764 utils/adt/dbsize.c:840 #, c-format msgid "invalid size: \"%s\"" msgstr "tamaño no válido: «%s»" -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:841 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Nombre de unidad de tamaño no válido: «%s»." -#: utils/adt/dbsize.c:839 -#, fuzzy, c-format -#| msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." +#: utils/adt/dbsize.c:842 +#, c-format msgid "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." -msgstr "Unidades válidas para este parámetro son «B», «kB», «MB», «GB» y «TB»." +msgstr "Unidades aceptables son «bytes«, «B», «kB», «MB», «GB», «TB» y «PB»." -#: utils/adt/domains.c:92 +#: utils/adt/domains.c:95 #, c-format msgid "type %s is not a domain" msgstr "tipo «%s» no es un dominio" @@ -23870,10 +24557,10 @@ msgstr "secuencia de término base64 no válida" msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "A los datos de entrada les falta relleno, o están truncados, o están corruptos de alguna otra forma." -#: utils/adt/encode.c:492 utils/adt/encode.c:557 utils/adt/jsonfuncs.c:648 -#: utils/adt/varlena.c:331 utils/adt/varlena.c:372 jsonpath_gram.y:528 -#: jsonpath_scan.l:629 jsonpath_scan.l:640 jsonpath_scan.l:650 -#: jsonpath_scan.l:701 +#: 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 jsonpath_gram.y:266 +#: jsonpath_gram.y:598 jsonpath_scan.l:640 jsonpath_scan.l:651 +#: jsonpath_scan.l:661 jsonpath_scan.l:712 #, c-format msgid "invalid input syntax for type %s" msgstr "sintaxis de entrada no válida para tipo %s" @@ -23910,353 +24597,348 @@ msgstr "no se pudo determinar el tipo enum efectivo" msgid "enum %s contains no values" msgstr "el enum %s no contiene valores" -#: utils/adt/float.c:89 +#: utils/adt/float.c:83 #, c-format msgid "value out of range: overflow" msgstr "valor fuera de rango: desbordamiento" -#: utils/adt/float.c:97 +#: utils/adt/float.c:91 #, c-format msgid "value out of range: underflow" msgstr "valor fuera de rango: desbordamiento por abajo" -#: utils/adt/float.c:286 +#: utils/adt/float.c:280 #, c-format msgid "\"%s\" is out of range for type real" msgstr "«%s» está fuera de rango para el tipo real" -#: utils/adt/float.c:488 +#: utils/adt/float.c:482 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "«%s» está fuera de rango para el tipo double precision" -#: utils/adt/float.c:1253 utils/adt/float.c:1327 utils/adt/int.c:355 +#: 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:1278 utils/adt/numeric.c:4500 utils/adt/numeric.c:4505 +#: utils/adt/int8.c:1277 utils/adt/numeric.c:4593 utils/adt/numeric.c:4598 #, c-format msgid "smallint out of range" msgstr "smallint fuera de rango" -#: utils/adt/float.c:1453 utils/adt/numeric.c:3693 utils/adt/numeric.c:10027 +#: 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 "no se puede calcular la raíz cuadrada un de número negativo" -#: utils/adt/float.c:1521 utils/adt/numeric.c:3981 utils/adt/numeric.c:4093 +#: 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 "cero elevado a una potencia negativa es indefinido" -#: utils/adt/float.c:1525 utils/adt/numeric.c:3985 utils/adt/numeric.c:10918 +#: 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 "un número negativo elevado a una potencia no positiva entrega un resultado complejo" -#: utils/adt/float.c:1701 utils/adt/float.c:1734 utils/adt/numeric.c:3893 -#: utils/adt/numeric.c:10698 +#: 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 "no se puede calcular logaritmo de cero" -#: utils/adt/float.c:1705 utils/adt/float.c:1738 utils/adt/numeric.c:3831 -#: utils/adt/numeric.c:3888 utils/adt/numeric.c:10702 +#: 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 "no se puede calcular logaritmo de un número negativo" -#: utils/adt/float.c:1771 utils/adt/float.c:1802 utils/adt/float.c:1897 -#: utils/adt/float.c:1924 utils/adt/float.c:1952 utils/adt/float.c:1979 -#: utils/adt/float.c:2126 utils/adt/float.c:2163 utils/adt/float.c:2333 -#: utils/adt/float.c:2389 utils/adt/float.c:2454 utils/adt/float.c:2511 -#: utils/adt/float.c:2702 utils/adt/float.c:2726 +#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 +#: utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 +#: utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 +#: utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 +#: utils/adt/float.c:2696 utils/adt/float.c:2720 #, c-format msgid "input is out of range" msgstr "la entrada está fuera de rango" -#: utils/adt/float.c:2867 -#, c-format -msgid "setseed parameter %g is out of allowed range [-1,1]" -msgstr "parámetro setseed %g fuera del rango permitido [-1,1]" - -#: utils/adt/float.c:4095 utils/adt/numeric.c:1841 +#: utils/adt/float.c:4000 utils/adt/numeric.c:1857 #, c-format msgid "count must be greater than zero" msgstr "count debe ser mayor que cero" -#: utils/adt/float.c:4100 utils/adt/numeric.c:1852 +#: utils/adt/float.c:4005 utils/adt/numeric.c:1868 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "el operando, límite inferior y límite superior no pueden ser NaN" -#: utils/adt/float.c:4106 utils/adt/numeric.c:1857 +#: utils/adt/float.c:4011 utils/adt/numeric.c:1873 #, c-format msgid "lower and upper bounds must be finite" msgstr "los límites inferior y superior deben ser finitos" -#: utils/adt/float.c:4172 utils/adt/numeric.c:1871 +#: utils/adt/float.c:4077 utils/adt/numeric.c:1887 #, c-format msgid "lower bound cannot equal upper bound" msgstr "el límite superior no puede ser igual al límite inferior" -#: utils/adt/formatting.c:519 +#: utils/adt/formatting.c:530 #, c-format msgid "invalid format specification for an interval value" msgstr "especificación de formato no válida para un valor de interval" -#: utils/adt/formatting.c:520 +#: utils/adt/formatting.c:531 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "Los Interval no están ... a valores determinados de fechas de calendario." -#: utils/adt/formatting.c:1150 +#: utils/adt/formatting.c:1161 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "«EEEE» debe ser el último patrón usado" -#: utils/adt/formatting.c:1158 +#: utils/adt/formatting.c:1169 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "«9» debe ir antes de «PR»" -#: utils/adt/formatting.c:1174 +#: utils/adt/formatting.c:1185 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "«0» debe ir antes de «PR»" -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1212 #, c-format msgid "multiple decimal points" msgstr "hay múltiples puntos decimales" -#: utils/adt/formatting.c:1205 utils/adt/formatting.c:1288 +#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "no se puede usar «V» y un punto decimal simultáneamente" -#: utils/adt/formatting.c:1217 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" twice" msgstr "no se puede usar «S» dos veces" -#: utils/adt/formatting.c:1221 +#: utils/adt/formatting.c:1232 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "no se puede usar «S» y «PL»/«MI»/«SG»/«PR» simultáneamente" -#: utils/adt/formatting.c:1241 +#: utils/adt/formatting.c:1252 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "no se puede usar «S» y «MI» simultáneamente" -#: utils/adt/formatting.c:1251 +#: utils/adt/formatting.c:1262 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "no se puede usar «S» y «PL» simultáneamente" -#: utils/adt/formatting.c:1261 +#: utils/adt/formatting.c:1272 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "no se puede usar «S» y «SG» simultáneamente" -#: utils/adt/formatting.c:1270 +#: utils/adt/formatting.c:1281 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "no se puede usar «PR» y «S»/«PL»/«MI»/«SG» simultáneamente" -#: utils/adt/formatting.c:1296 +#: utils/adt/formatting.c:1307 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "no se puede usar «EEEE» dos veces" -#: utils/adt/formatting.c:1302 +#: utils/adt/formatting.c:1313 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "«EEEE» es incompatible con otros formatos" -#: utils/adt/formatting.c:1303 +#: utils/adt/formatting.c:1314 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "«EEEE» sólo puede ser usado en conjunción con patrones de dígitos y puntos decimales." -#: utils/adt/formatting.c:1387 +#: utils/adt/formatting.c:1398 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "separador de formato «datetime» no válido: «%s»" -#: utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1525 #, c-format msgid "\"%s\" is not a number" msgstr "«%s» no es un número" -#: utils/adt/formatting.c:1592 +#: utils/adt/formatting.c:1603 #, c-format msgid "case conversion failed: %s" msgstr "falló la conversión de mayúsculas: %s" -#: utils/adt/formatting.c:1646 utils/adt/formatting.c:1768 -#: utils/adt/formatting.c:1891 +#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 +#: utils/adt/formatting.c:1989 #, c-format msgid "could not determine which collation to use for %s function" msgstr "no se pudo determinar qué ordenamiento usar para la función %s" -#: utils/adt/formatting.c:2274 +#: utils/adt/formatting.c:2410 #, c-format msgid "invalid combination of date conventions" msgstr "combinación no válida de convenciones de fecha" -#: utils/adt/formatting.c:2275 +#: utils/adt/formatting.c:2411 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr " No mezclar convenciones de semana Gregorianas e ISO en una plantilla formateada" -#: utils/adt/formatting.c:2297 +#: utils/adt/formatting.c:2433 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "valores en conflicto para le campo \"%s\" en cadena de formato" -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2435 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Este valor se contradice con un seteo previo para el mismo tipo de campo" -#: utils/adt/formatting.c:2366 +#: utils/adt/formatting.c:2502 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "cadena de texto fuente muy corta para campo formateado \"%s\" " -#: utils/adt/formatting.c:2368 +#: utils/adt/formatting.c:2504 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "El campo requiere %d caractéres, pero solo quedan %d." -#: utils/adt/formatting.c:2370 utils/adt/formatting.c:2384 +#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Si su cadena de texto no es de ancho modificado, trate de usar el modificador \"FM\" " -#: utils/adt/formatting.c:2380 utils/adt/formatting.c:2393 -#: utils/adt/formatting.c:2614 +#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 +#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "el valor «%s» no es válido para «%s»" -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2518 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "El campo requiere %d caracteres, pero sólo %d pudieron ser analizados." -#: utils/adt/formatting.c:2395 +#: utils/adt/formatting.c:2531 #, c-format msgid "Value must be an integer." msgstr "El valor debe ser un entero." -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2536 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "el valor para «%s» en la cadena de origen está fuera de rango" -#: utils/adt/formatting.c:2402 +#: utils/adt/formatting.c:2538 #, c-format msgid "Value must be in the range %d to %d." msgstr "El valor debe estar en el rango de %d a %d." -#: utils/adt/formatting.c:2616 +#: utils/adt/formatting.c:2752 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "El valor dado no concuerda con ninguno de los valores permitidos para este campo." -#: utils/adt/formatting.c:2832 utils/adt/formatting.c:2852 -#: utils/adt/formatting.c:2872 utils/adt/formatting.c:2892 -#: utils/adt/formatting.c:2911 utils/adt/formatting.c:2930 -#: utils/adt/formatting.c:2954 utils/adt/formatting.c:2972 -#: utils/adt/formatting.c:2990 utils/adt/formatting.c:3008 -#: utils/adt/formatting.c:3025 utils/adt/formatting.c:3042 +#: 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 #, c-format msgid "localized string format value too long" msgstr "cadena traducida en cadena de formato es demasiado larga" -#: utils/adt/formatting.c:3322 +#: utils/adt/formatting.c:3458 #, c-format msgid "unmatched format separator \"%c\"" msgstr "separador de formato «%c» desemparejado" -#: utils/adt/formatting.c:3383 +#: utils/adt/formatting.c:3519 #, c-format msgid "unmatched format character \"%s\"" msgstr "carácter de formato «%s» desemparejado" -#: utils/adt/formatting.c:3491 +#: utils/adt/formatting.c:3652 #, c-format -msgid "formatting field \"%s\" is only supported in to_char" -msgstr "el campo de formato «%s» sólo está soportado en to_char" +msgid "Time zone abbreviation is not recognized." +msgstr "La abreviatura de huso horario no es reconocida." -#: utils/adt/formatting.c:3665 +#: utils/adt/formatting.c:3853 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "cadena de entrada no válida para «Y,YYY»" -#: utils/adt/formatting.c:3754 +#: utils/adt/formatting.c:3942 #, c-format msgid "input string is too short for datetime format" msgstr "cadena de entrada muy corta para formato de fecha/hora" -#: utils/adt/formatting.c:3762 +#: utils/adt/formatting.c:3950 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "quedan caracteres al final de la cadena de entrada después del formato fecha/hora" -#: utils/adt/formatting.c:4319 +#: utils/adt/formatting.c:4494 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "falta el huso horario en la cadena de entrada para el tipo timestamptz" -#: utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4500 #, c-format msgid "timestamptz out of range" msgstr "timestamptz fuera de rango" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4528 #, c-format msgid "datetime format is zoned but not timed" msgstr "el formato de fecha/hora tiene huso horario pero no hora" -#: utils/adt/formatting.c:4411 +#: utils/adt/formatting.c:4577 #, c-format msgid "missing time zone in input string for type timetz" msgstr "falta el huso horario en la cadena de entrada del tipo timetz" -#: utils/adt/formatting.c:4417 +#: utils/adt/formatting.c:4583 #, c-format msgid "timetz out of range" msgstr "timetz fuera de rango" -#: utils/adt/formatting.c:4443 +#: utils/adt/formatting.c:4609 #, c-format msgid "datetime format is not dated and not timed" msgstr "el formato de fecha/hora no tiene fecha ni hora" -#: utils/adt/formatting.c:4575 +#: utils/adt/formatting.c:4786 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "la hora «%d» no es válida para el reloj de 12 horas" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4788 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Use el reloj de 24 horas, o entregue una hora entre 1 y 12." -#: utils/adt/formatting.c:4689 +#: utils/adt/formatting.c:4900 #, c-format msgid "cannot calculate day of year without year information" msgstr "no se puede calcular el día del año sin conocer el año" -#: utils/adt/formatting.c:5621 +#: utils/adt/formatting.c:5852 #, c-format msgid "\"EEEE\" not supported for input" msgstr "«EEEE» no está soportado en la entrada" -#: utils/adt/formatting.c:5633 +#: utils/adt/formatting.c:5864 #, c-format msgid "\"RN\" not supported for input" msgstr "«RN» no está soportado en la entrada" @@ -24267,10 +24949,9 @@ msgid "absolute path not allowed" msgstr "no se permiten rutas absolutas" #: utils/adt/genfile.c:89 -#, fuzzy, c-format -#| msgid "Shows the mode of the data directory." +#, c-format msgid "path must be in or below the data directory" -msgstr "Muestra el modo del directorio de datos." +msgstr "la ruta debe estar en o debajo del directorio de datos" #: utils/adt/genfile.c:114 utils/adt/oracle_compat.c:190 #: utils/adt/oracle_compat.c:288 utils/adt/oracle_compat.c:839 @@ -24289,12 +24970,7 @@ msgstr "no se pudo posicionar (seek) el archivo «%s»: %m" msgid "file length too large" msgstr "el tamaño del archivo es demasiado grande" -#: utils/adt/genfile.c:248 -#, c-format -msgid "must be superuser to read files with adminpack 1.0" -msgstr "Debe ser superusuario leer archivos con adminpack 1.0." - -#: utils/adt/genfile.c:702 +#: utils/adt/genfile.c:656 #, c-format msgid "tablespace with OID %u does not exist" msgstr "no existe el tablespace con OID %u" @@ -24350,569 +25026,649 @@ msgstr "debe pedir al menos 2 puntos" msgid "invalid int2vector data" msgstr "datos de int2vector no válidos" -#: utils/adt/int.c:1529 utils/adt/int8.c:1404 utils/adt/numeric.c:1749 -#: utils/adt/timestamp.c:5797 utils/adt/timestamp.c:5879 +#: 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 "el tamaño de paso no puede ser cero" -#: utils/adt/int8.c:449 utils/adt/int8.c:472 utils/adt/int8.c:486 -#: utils/adt/int8.c:500 utils/adt/int8.c:531 utils/adt/int8.c:555 -#: utils/adt/int8.c:637 utils/adt/int8.c:705 utils/adt/int8.c:711 -#: utils/adt/int8.c:737 utils/adt/int8.c:751 utils/adt/int8.c:775 -#: utils/adt/int8.c:788 utils/adt/int8.c:900 utils/adt/int8.c:914 -#: utils/adt/int8.c:928 utils/adt/int8.c:959 utils/adt/int8.c:981 -#: utils/adt/int8.c:995 utils/adt/int8.c:1009 utils/adt/int8.c:1042 -#: utils/adt/int8.c:1056 utils/adt/int8.c:1070 utils/adt/int8.c:1101 -#: utils/adt/int8.c:1123 utils/adt/int8.c:1137 utils/adt/int8.c:1151 -#: utils/adt/int8.c:1313 utils/adt/int8.c:1348 utils/adt/numeric.c:4459 -#: utils/adt/rangetypes.c:1528 utils/adt/rangetypes.c:1541 +#: 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: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 fuera de rango" -#: utils/adt/int8.c:1361 +#: utils/adt/int8.c:1360 #, c-format msgid "OID out of range" msgstr "OID fuera de rango" -#: utils/adt/json.c:320 utils/adt/jsonb.c:781 +#: utils/adt/json.c:202 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "el valor de llave debe ser escalar, no array, composite o json" -#: utils/adt/json.c:1113 utils/adt/json.c:1123 utils/fmgr/funcapi.c:2082 +#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 #, c-format msgid "could not determine data type for argument %d" msgstr "no se pudo determinar el tipo de dato para el argumento %d" -#: utils/adt/json.c:1146 utils/adt/json.c:1337 utils/adt/json.c:1513 -#: utils/adt/json.c:1591 utils/adt/jsonb.c:1432 utils/adt/jsonb.c:1522 +#: 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 "no se permite el valor nulo como llave en un objeto" -#: utils/adt/json.c:1189 utils/adt/json.c:1352 -#, fuzzy, c-format -#| msgid "Duplicate keys exist." -msgid "duplicate JSON key %s" -msgstr "Existe una llave duplicada." +#: utils/adt/json.c:1117 utils/adt/json.c:1288 +#, c-format +msgid "duplicate JSON object key value: %s" +msgstr "valor de llave de objeto JSON duplicado: %s" -#: utils/adt/json.c:1297 utils/adt/jsonb.c:1233 +#: utils/adt/json.c:1226 utils/adt/jsonb.c:1134 #, c-format msgid "argument list must have even number of elements" msgstr "la lista de argumentos debe tener un número par de elementos" #. translator: %s is a SQL function name -#: utils/adt/json.c:1299 utils/adt/jsonb.c:1235 +#: 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 "El argumento de %s debe consistir de llaves y valores alternados." -#: utils/adt/json.c:1491 utils/adt/jsonb.c:1410 +#: utils/adt/json.c:1427 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "un array debe tener dos columnas" -#: utils/adt/json.c:1580 utils/adt/jsonb.c:1511 +#: utils/adt/json.c:1516 utils/adt/jsonb.c:1412 #, c-format msgid "mismatched array dimensions" msgstr "las dimensiones de array no coinciden" -#: utils/adt/json.c:1764 +#: utils/adt/json.c:1702 utils/adt/jsonb_util.c:1956 #, c-format msgid "duplicate JSON object key value" -msgstr "" +msgstr "valor de llavo del objeto JSON duplicado" -#: utils/adt/jsonb.c:294 +#: utils/adt/jsonb.c:282 #, c-format msgid "string too long to represent as jsonb string" msgstr "la cadena es demasiado larga para representarla como cadena jsonb." -#: utils/adt/jsonb.c:295 +#: utils/adt/jsonb.c:283 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "Debido a una restricción de la implementación, las cadenas en jsonb no pueden exceder los %d bytes." -#: utils/adt/jsonb.c:1252 +#: utils/adt/jsonb.c:1153 #, c-format msgid "argument %d: key must not be null" msgstr "argumento %d: la llave no puede ser null" -#: utils/adt/jsonb.c:1843 +#: utils/adt/jsonb.c:1744 #, c-format msgid "field name must not be null" msgstr "el nombre de campo no debe ser null" -#: utils/adt/jsonb.c:1905 +#: utils/adt/jsonb.c:1806 #, c-format msgid "object keys must be strings" msgstr "las llaves de un objeto deben ser cadenas" -#: utils/adt/jsonb.c:2116 +#: utils/adt/jsonb.c:2017 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "no se puede convertir un null jsonb a tipo %s" -#: utils/adt/jsonb.c:2117 +#: utils/adt/jsonb.c:2018 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "no se puede convertir un string jsonb a tipo %s" -#: utils/adt/jsonb.c:2118 +#: utils/adt/jsonb.c:2019 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "no se puede convertir un numérico jsonb a tipo %s" -#: utils/adt/jsonb.c:2119 +#: utils/adt/jsonb.c:2020 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "no se puede convertir un booleano jsonb a tipo %s" -#: utils/adt/jsonb.c:2120 +#: utils/adt/jsonb.c:2021 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "no se puede convertir un array jsonb a tipo %s" -#: utils/adt/jsonb.c:2121 +#: utils/adt/jsonb.c:2022 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "no se puede convertir un objeto jsonb a tipo %s" -#: utils/adt/jsonb.c:2122 +#: utils/adt/jsonb.c:2023 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "no se puede convertir un array u objeto jsonb a tipo %s" -#: utils/adt/jsonb_util.c:758 +#: utils/adt/jsonb_util.c:756 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "el número de pares en objeto jsonb excede el máximo permitido (%zu)" -#: utils/adt/jsonb_util.c:799 +#: utils/adt/jsonb_util.c:797 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "el número de elementos del array jsonb excede el máximo permitido (%zu)" -#: utils/adt/jsonb_util.c:1673 utils/adt/jsonb_util.c:1693 -#, fuzzy, c-format -#| msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" +#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 +#, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" -msgstr "el número de elementos del array jsonb excede el máximo permitido (%zu)" +msgstr "el tamaño total de los elementos del array jsonb excede el máximo de %d bytes" -#: utils/adt/jsonb_util.c:1754 utils/adt/jsonb_util.c:1789 -#: utils/adt/jsonb_util.c:1809 -#, fuzzy, c-format -#| msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" +#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 +#: utils/adt/jsonb_util.c:1807 +#, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" -msgstr "el número de elementos del array jsonb excede el máximo permitido (%zu)" - -#: utils/adt/jsonb_util.c:1958 -#, fuzzy, c-format -#| msgid "unexpected object end" -msgid "duplicate JSON object key" -msgstr "fin de objeto inesperado" +msgstr "el tamaño total de los elementos del objeto jsonb excede el máximo de %d bytes" -#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:151 +#: utils/adt/jsonbsubs.c:67 utils/adt/jsonbsubs.c:148 #, c-format msgid "jsonb subscript does not support slices" msgstr "el subíndice jsonb no soporta segmentos" -#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:117 +#: utils/adt/jsonbsubs.c:100 utils/adt/jsonbsubs.c:114 #, c-format msgid "subscript type %s is not supported" msgstr "el tipo de subíndice %s no está soportado" -#: utils/adt/jsonbsubs.c:104 +#: utils/adt/jsonbsubs.c:101 #, c-format msgid "jsonb subscript must be coercible to only one type, integer or text." msgstr "subíndice jsonb debe ser coercible solo para un tipo, integer o text." -#: utils/adt/jsonbsubs.c:118 +#: utils/adt/jsonbsubs.c:115 #, c-format msgid "jsonb subscript must be coercible to either integer or text." msgstr "subíndice jsonb debe ser coercible ya sea para integer o para text." -#: utils/adt/jsonbsubs.c:139 +#: utils/adt/jsonbsubs.c:136 #, c-format msgid "jsonb subscript must have text type" msgstr "subíndice jsonb debe tener tipo text" -#: utils/adt/jsonbsubs.c:207 +#: utils/adt/jsonbsubs.c:204 #, c-format msgid "jsonb subscript in assignment must not be null" msgstr "subíndice jsonb en asignación no puede ser nulo" -#: utils/adt/jsonfuncs.c:572 utils/adt/jsonfuncs.c:821 -#: utils/adt/jsonfuncs.c:2429 utils/adt/jsonfuncs.c:2881 -#: utils/adt/jsonfuncs.c:3676 utils/adt/jsonfuncs.c:4018 +#: 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 "no se puede invocar %s en un escalar" -#: utils/adt/jsonfuncs.c:577 utils/adt/jsonfuncs.c:806 -#: utils/adt/jsonfuncs.c:2883 utils/adt/jsonfuncs.c:3663 +#: 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 "no se puede invocar %s en un array" -#: utils/adt/jsonfuncs.c:636 jsonpath_scan.l:596 +#: utils/adt/jsonfuncs.c:647 jsonpath_scan.l:607 #, c-format msgid "unsupported Unicode escape sequence" msgstr "secuencia de escape Unicode no soportado" -#: utils/adt/jsonfuncs.c:713 +#: utils/adt/jsonfuncs.c:724 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "Datos JSON, línea %d: %s%s%s" -#: utils/adt/jsonfuncs.c:1875 utils/adt/jsonfuncs.c:1912 +#: utils/adt/jsonfuncs.c:1883 utils/adt/jsonfuncs.c:1920 #, c-format msgid "cannot get array length of a scalar" msgstr "no se puede obtener el largo de array de un escalar" -#: utils/adt/jsonfuncs.c:1879 utils/adt/jsonfuncs.c:1898 +#: utils/adt/jsonfuncs.c:1887 utils/adt/jsonfuncs.c:1906 #, c-format msgid "cannot get array length of a non-array" msgstr "no se puede obtener el largo de array de un no-array" -#: utils/adt/jsonfuncs.c:1978 +#: utils/adt/jsonfuncs.c:1986 #, c-format msgid "cannot call %s on a non-object" msgstr "no se puede invocar %s en un no-objeto" -#: utils/adt/jsonfuncs.c:2166 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct an array as an object" msgstr "no se puede desconstruir un array como un objeto" -#: utils/adt/jsonfuncs.c:2180 +#: utils/adt/jsonfuncs.c:2188 #, c-format msgid "cannot deconstruct a scalar" msgstr "no se puede desconstruir un escalar" -#: utils/adt/jsonfuncs.c:2225 +#: utils/adt/jsonfuncs.c:2233 #, c-format msgid "cannot extract elements from a scalar" msgstr "no se pueden extraer elementos de un escalar" -#: utils/adt/jsonfuncs.c:2229 +#: utils/adt/jsonfuncs.c:2237 #, c-format msgid "cannot extract elements from an object" msgstr "no se pudo extraer elementos de un objeto" -#: utils/adt/jsonfuncs.c:2414 utils/adt/jsonfuncs.c:3896 +#: utils/adt/jsonfuncs.c:2424 utils/adt/jsonfuncs.c:4173 #, c-format msgid "cannot call %s on a non-array" msgstr "no se puede invocar %s en un no-array" -#: utils/adt/jsonfuncs.c:2488 utils/adt/jsonfuncs.c:2493 -#: utils/adt/jsonfuncs.c:2510 utils/adt/jsonfuncs.c:2516 +#: 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 "se esperaba un array JSON" -#: utils/adt/jsonfuncs.c:2489 +#: utils/adt/jsonfuncs.c:2516 #, c-format msgid "See the value of key \"%s\"." msgstr "Vea el valor de la llave «%s»." -#: utils/adt/jsonfuncs.c:2511 +#: utils/adt/jsonfuncs.c:2539 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Vea el elemento %s de la llave «%s»." -#: utils/adt/jsonfuncs.c:2517 +#: utils/adt/jsonfuncs.c:2545 #, c-format msgid "See the array element %s." msgstr "Veo el elemento de array %s." -#: utils/adt/jsonfuncs.c:2552 +#: utils/adt/jsonfuncs.c:2597 #, c-format msgid "malformed JSON array" msgstr "array JSON mal formado" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3389 +#: utils/adt/jsonfuncs.c:3647 #, c-format msgid "first argument of %s must be a row type" msgstr "el primer argumento de %s debe ser un tipo de registro" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3413 +#: utils/adt/jsonfuncs.c:3671 #, c-format msgid "could not determine row type for result of %s" msgstr "no se pudo determinar el tipo de dato para el resultado de %s" -#: utils/adt/jsonfuncs.c:3415 +#: 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 "Provea un argumento de registro no-nulo, o invoque la función en la cláusula FROM usando una lista de definición de columnas." -#: utils/adt/jsonfuncs.c:3785 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 "se requiere un nodo «materialize», pero no está permitido en este contexto" -#: utils/adt/jsonfuncs.c:3913 utils/adt/jsonfuncs.c:3997 +#: utils/adt/jsonfuncs.c:4190 utils/adt/jsonfuncs.c:4274 #, c-format msgid "argument of %s must be an array of objects" msgstr "el argumento de %s debe ser un array de objetos" -#: utils/adt/jsonfuncs.c:3946 +#: utils/adt/jsonfuncs.c:4223 #, c-format msgid "cannot call %s on an object" msgstr "no se puede invocar %s en un objeto" -#: utils/adt/jsonfuncs.c:4380 utils/adt/jsonfuncs.c:4439 -#: utils/adt/jsonfuncs.c:4519 +#: utils/adt/jsonfuncs.c:4656 utils/adt/jsonfuncs.c:4715 +#: utils/adt/jsonfuncs.c:4795 #, c-format msgid "cannot delete from scalar" msgstr "no se puede eliminar de un escalar" -#: utils/adt/jsonfuncs.c:4524 +#: utils/adt/jsonfuncs.c:4800 #, c-format msgid "cannot delete from object using integer index" msgstr "no se puede eliminar de un objeto usando un índice numérico" -#: utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4751 +#: utils/adt/jsonfuncs.c:4868 utils/adt/jsonfuncs.c:5027 #, c-format msgid "cannot set path in scalar" msgstr "no se puede definir una ruta en un escalar" -#: utils/adt/jsonfuncs.c:4633 utils/adt/jsonfuncs.c:4675 +#: 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 "null_value_treatment debe ser «delete_key», «return_target», «use_json_null», o «raise_exception»" -#: utils/adt/jsonfuncs.c:4646 +#: utils/adt/jsonfuncs.c:4922 #, c-format msgid "JSON value must not be null" msgstr "valor JSON no debe ser null" -#: utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonfuncs.c:4923 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "Una excepción fue lanzada porque null_value_treatment es «raise_exception»." -#: utils/adt/jsonfuncs.c:4648 +#: 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 "Para impedir esto, puede cambiar el argumento null_value_treatment o asegurarse que no se pase un nulo SQL." -#: utils/adt/jsonfuncs.c:4703 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "cannot delete path in scalar" msgstr "no se puede eliminar una ruta en un escalar" -#: utils/adt/jsonfuncs.c:4917 +#: utils/adt/jsonfuncs.c:5193 #, c-format msgid "path element at position %d is null" msgstr "el elemento en la posición %d de la ruta es null" -#: utils/adt/jsonfuncs.c:4936 utils/adt/jsonfuncs.c:4967 -#: utils/adt/jsonfuncs.c:5040 +#: utils/adt/jsonfuncs.c:5212 utils/adt/jsonfuncs.c:5243 +#: utils/adt/jsonfuncs.c:5316 #, c-format msgid "cannot replace existing key" msgstr "no se puede reemplazar una llave existente" -#: utils/adt/jsonfuncs.c:4937 utils/adt/jsonfuncs.c:4968 +#: 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 "La ruta asume que la llave es un objeto compuesto, pero es un valor escalar." -#: utils/adt/jsonfuncs.c:5041 +#: utils/adt/jsonfuncs.c:5317 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Intente usar la función jsonb_set para reemplazar el valor de la llave." -#: utils/adt/jsonfuncs.c:5145 +#: utils/adt/jsonfuncs.c:5421 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "el elemento de ruta en la posición %d no es un entero: «%s»" -#: utils/adt/jsonfuncs.c:5162 +#: utils/adt/jsonfuncs.c:5438 #, c-format msgid "path element at position %d is out of range: %d" msgstr "el elemento de ruta en la posición %d está fuera de rango: %d" -#: utils/adt/jsonfuncs.c:5314 +#: utils/adt/jsonfuncs.c:5590 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "indicador de tipo errónea, sólo se permiten arrays y tipos escalares" -#: utils/adt/jsonfuncs.c:5321 +#: utils/adt/jsonfuncs.c:5597 #, c-format msgid "flag array element is not a string" msgstr "elemento del array de opciones no es un string" -#: utils/adt/jsonfuncs.c:5322 utils/adt/jsonfuncs.c:5344 +#: utils/adt/jsonfuncs.c:5598 utils/adt/jsonfuncs.c:5620 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Los valores posibles son: «string», «numeric», «boolean», «key» y «all»." -#: utils/adt/jsonfuncs.c:5342 +#: utils/adt/jsonfuncs.c:5618 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "indicador erróneo en array de indicadores: «%s»" -#: utils/adt/jsonpath.c:382 +#: utils/adt/jsonpath.c:389 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ no es permitido en expresiones raíz" -#: utils/adt/jsonpath.c:388 +#: utils/adt/jsonpath.c:395 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST sólo está permitido en subíndices de array" -#: utils/adt/jsonpath_exec.c:361 +#: utils/adt/jsonpath_exec.c:491 #, c-format msgid "single boolean result is expected" msgstr "se esperaba un único resultado booleano" -#: utils/adt/jsonpath_exec.c:557 +#: utils/adt/jsonpath_exec.c:851 #, c-format -msgid "\"vars\" argument is not an object" -msgstr "el argumento «vars» no es un objeto" +msgid "jsonpath wildcard array accessor can only be applied to an array" +msgstr "el método de acceso comodín de array jsonpath sólo puede aplicarse a un array" -#: utils/adt/jsonpath_exec.c:558 +#: utils/adt/jsonpath_exec.c:874 #, c-format -msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." -msgstr "Los parámetros jsonpath deben codificarse como pares llave-valor del objeto «vars»." +msgid "jsonpath wildcard member accessor can only be applied to an object" +msgstr "el método de acesso comodín de objeto jsonpath sólo puede aplicarse a un objeto" + +#: utils/adt/jsonpath_exec.c:923 +#, c-format +msgid "jsonpath array subscript is out of bounds" +msgstr "subíndice de array jsonpath fuera de los bordes" -#: utils/adt/jsonpath_exec.c:675 +#: utils/adt/jsonpath_exec.c:980 +#, c-format +msgid "jsonpath array accessor can only be applied to an array" +msgstr "el método de acceso de array jsonpath sólo puede aplicarse a un array" + +#: utils/adt/jsonpath_exec.c:1044 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "el objeto JSON no contiene la llave «%s»" -#: utils/adt/jsonpath_exec.c:687 +#: utils/adt/jsonpath_exec.c:1056 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "el método de acceso a un miembro jsonpath sólo puede aplicarse a un objeto" -#: utils/adt/jsonpath_exec.c:716 +#: utils/adt/jsonpath_exec.c:1114 #, c-format -msgid "jsonpath wildcard array accessor can only be applied to an array" -msgstr "el método de acceso comodín de array jsonpath sólo puede aplicarse a un array" +msgid "jsonpath item method .%s() can only be applied to an array" +msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a un array" -#: utils/adt/jsonpath_exec.c:764 +#: utils/adt/jsonpath_exec.c:1167 utils/adt/jsonpath_exec.c:1193 #, c-format -msgid "jsonpath array subscript is out of bounds" -msgstr "subíndice de array jsonpath fuera de los bordes" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type double precision" +msgstr "el argumento «%s» del método de item jsonpath .%s() no es válido para el tipo de precisión doble" -#: utils/adt/jsonpath_exec.c:821 +#: 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 "jsonpath array accessor can only be applied to an array" -msgstr "el método de acceso de array jsonpath sólo puede aplicarse a un array" +msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" +msgstr "NaN o infinito no son permitidos para el método de ítem jsonpath .%s()" -#: utils/adt/jsonpath_exec.c:873 +#: 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 wildcard member accessor can only be applied to an object" -msgstr "el método de acesso comodín de objeto jsonpath sólo puede aplicarse a un objeto" +msgid "jsonpath item method .%s() can only be applied to a string or numeric value" +msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico o de cadena" -#: utils/adt/jsonpath_exec.c:1007 +#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 #, c-format -msgid "jsonpath item method .%s() can only be applied to an array" -msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a un array" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" +msgstr "el argumento «%s» del método de item jsonpath .%s() es inválido para el tipo bigint" -#: utils/adt/jsonpath_exec.c:1060 +#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 #, c-format -msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" -msgstr "el argumento numérico del método de item jsonpath .%s() está fuera de rango para el tipo de precisión doble" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" +msgstr "el argumento «%s» del método de item jsonpath .%s() no es válido para el tipo booleano" -#: utils/adt/jsonpath_exec.c:1081 +#: utils/adt/jsonpath_exec.c:1386 #, c-format -msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" -msgstr "el argumento cadena del método de item jsonpath .%s() no es una representación válida de un número de precisión doble" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, or numeric value" +msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor booleano, de cadena o numérico" -#: utils/adt/jsonpath_exec.c:1094 +#: utils/adt/jsonpath_exec.c:1439 utils/adt/jsonpath_exec.c:1528 #, c-format -msgid "jsonpath item method .%s() can only be applied to a string or numeric value" -msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico o de cadena" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type numeric" +msgstr "el argumento «%s» del método de item jsonpath .%s() no es válido para el tipo numeric" + +#: utils/adt/jsonpath_exec.c:1487 +#, c-format +msgid "precision of jsonpath item method .%s() is out of range for type integer" +msgstr "la precisión del método de item jsonpath .%s() está fuera de rango para el tipo integer" + +#: utils/adt/jsonpath_exec.c:1501 +#, c-format +msgid "scale of jsonpath item method .%s() is out of range for type integer" +msgstr "la escala del método de item jsonpath .%s() está fuera de rango para el tipo integer" -#: 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 "el argumento «%s» del método de item jsonpath .%s() no es válido para el tipo integer" + +#: utils/adt/jsonpath_exec.c:1648 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a boolean, string, numeric, or datetime value" +msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor boolean, datetime, numérico o de cadena" + +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "el operando izquierdo del operador jsonpath %s no es un valor numérico escalar" -#: utils/adt/jsonpath_exec.c:1591 +#: utils/adt/jsonpath_exec.c:2144 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "el operando derecho del operador jsonpath %s no es un valor numérico escalar" -#: utils/adt/jsonpath_exec.c:1659 +#: utils/adt/jsonpath_exec.c:2212 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "el operando del operador jsonpath unario %s no es un valor numérico" -#: utils/adt/jsonpath_exec.c:1758 +#: utils/adt/jsonpath_exec.c:2311 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico" -#: utils/adt/jsonpath_exec.c:1798 +#: utils/adt/jsonpath_exec.c:2357 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a una cadena" -#: utils/adt/jsonpath_exec.c:1892 +#: utils/adt/jsonpath_exec.c:2450 +#, c-format +msgid "time precision of jsonpath item method .%s() is out of range for type integer" +msgstr "la precisión de tiempo del método de item jsonpath .%s() está fuera de rango para el tipo integer" + +#: 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 "datetime format is not recognized: \"%s\"" -msgstr "el formato de fecha/hora no se reconoce: «%s»" +msgid "%s format is not recognized: \"%s\"" +msgstr "formato de %s no se reconoce: «%s»" -#: utils/adt/jsonpath_exec.c:1894 +#: utils/adt/jsonpath_exec.c:2486 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "Use un argumento de patrón fecha/hora para especificar el formato de entrada del dato." -#: utils/adt/jsonpath_exec.c:1962 +#: 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 "la precisión de tiempo del método de item jsonpath .%s() no es válida" + +#: utils/adt/jsonpath_exec.c:2840 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "el método de ítem jsonpath .%s() sólo puede ser aplicado a un objeto" -#: utils/adt/jsonpath_exec.c:2144 +#: utils/adt/jsonpath_exec.c:3124 +#, c-format +msgid "could not convert value of type %s to jsonpath" +msgstr "no se pudo convertir el valor de tipo %s a jsonpath" + +#: utils/adt/jsonpath_exec.c:3158 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "no se pudo encontrar la variable jsonpath «%s»" -#: utils/adt/jsonpath_exec.c:2408 +#: utils/adt/jsonpath_exec.c:3211 +#, c-format +msgid "\"vars\" argument is not an object" +msgstr "el argumento «vars» no es un objeto" + +#: utils/adt/jsonpath_exec.c:3212 +#, c-format +msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgstr "Los parámetros jsonpath deben codificarse como pares llave-valor del objeto «vars»." + +#: utils/adt/jsonpath_exec.c:3475 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "el subíndice de array jsonpath no es un único valor numérico" -#: utils/adt/jsonpath_exec.c:2420 +#: utils/adt/jsonpath_exec.c:3487 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "subíndice de array jsonpath fuera del rango entero" -#: utils/adt/jsonpath_exec.c:2597 +#: utils/adt/jsonpath_exec.c:3671 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "no se puede convertir el valor de %s a %s sin uso de huso horario" -#: utils/adt/jsonpath_exec.c:2599 +#: utils/adt/jsonpath_exec.c:3673 #, c-format msgid "Use *_tz() function for time zone support." msgstr "Utilice una función *_tz() para el soporte de huso horario." +#: 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 "la expresión de ruta JSON para la columna «%s» debe retornar un único elemento cuando no se pide un “wrapper”" + +#: utils/adt/jsonpath_exec.c:3983 utils/adt/jsonpath_exec.c:3988 +#, c-format +msgid "Use the WITH WRAPPER clause to wrap SQL/JSON items into an array." +msgstr "Use la cláusula WITH WRAPPER para envolver elementos SQL/JSON en un array." + +#: 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 "la expresión de ruta en JSON_QUERY debe retornar un único elemento cuando no se pide un “wrapper”" + +#: 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 "la expresión de ruta JSON para la columna «%s» debe retornar un único elemento escalar" + +#: 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 "la expresión de ruta JSON en JSON_VALUE debe retornar un único elemento escalar" + #: utils/adt/levenshtein.c:132 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "el argumento levenshtein excede el largo máximo de %d caracteres" -#: utils/adt/like.c:161 +#: utils/adt/like.c:159 #, c-format msgid "nondeterministic collations are not supported for LIKE" msgstr "los ordenamientos no determinísticos no están soportados para LIKE" -#: utils/adt/like.c:190 utils/adt/like_support.c:1024 +#: utils/adt/like.c:188 utils/adt/like_support.c:1023 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "no se pudo determinar qué ordenamiento (collation) usar para ILIKE" -#: utils/adt/like.c:202 +#: utils/adt/like.c:200 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "los ordenamientos no determinísticos no están soportados para ILIKE" @@ -24922,22 +25678,22 @@ msgstr "los ordenamientos no determinísticos no están soportados para ILIKE" msgid "LIKE pattern must not end with escape character" msgstr "el patrón de LIKE debe no terminar con un carácter de escape" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "cadena de escape no válida" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:802 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "La cadena de escape debe ser vacía o un carácter." -#: utils/adt/like_support.c:1014 +#: utils/adt/like_support.c:1013 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "no está soportada la comparación insensible a mayúsculas en bytea" -#: utils/adt/like_support.c:1115 +#: utils/adt/like_support.c:1114 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "no está soportada la comparación con expresiones regulares en bytea" @@ -24947,17 +25703,17 @@ msgstr "no está soportada la comparación con expresiones regulares en bytea" msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "valor de octeto no válido en valor «macaddr»: «%s»" -#: utils/adt/mac8.c:554 +#: utils/adt/mac8.c:555 #, c-format msgid "macaddr8 data out of range to convert to macaddr" msgstr "datos macaddr8 fuera de rango para convertir a macaddr" -#: utils/adt/mac8.c:555 +#: utils/adt/mac8.c:556 #, c-format msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Sólo las direcciones que tienen FF y FF como valores en el cuarto y quinto bytes desde la izquierda, por ejemplo xx:xx:xx:ff:fe:xx:xx:xx se pueden convertir de macaddr8 a macaddr." -#: utils/adt/mcxtfuncs.c:182 +#: utils/adt/mcxtfuncs.c:173 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d no es un proceso servidor de PostgreSQL" @@ -24996,70 +25752,70 @@ msgstr "puede ser una etiqueta sola" msgid "requires AS" msgstr "requiere AS" -#: utils/adt/misc.c:853 utils/adt/misc.c:867 utils/adt/misc.c:906 -#: utils/adt/misc.c:912 utils/adt/misc.c:918 utils/adt/misc.c:941 +#: utils/adt/misc.c:897 utils/adt/misc.c:911 utils/adt/misc.c:950 +#: utils/adt/misc.c:956 utils/adt/misc.c:962 utils/adt/misc.c:985 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "la cadena no es un identificador válido: «%s»" -#: utils/adt/misc.c:855 +#: utils/adt/misc.c:899 #, c-format msgid "String has unclosed double quotes." msgstr "La cadena tiene comillas dobles sin cerrar." -#: utils/adt/misc.c:869 +#: utils/adt/misc.c:913 #, c-format msgid "Quoted identifier must not be empty." msgstr "El identificador en comillas no debe ser vacío." -#: utils/adt/misc.c:908 +#: utils/adt/misc.c:952 #, c-format msgid "No valid identifier before \".\"." msgstr "No hay un identificador válido antes de «.»." -#: utils/adt/misc.c:914 +#: utils/adt/misc.c:958 #, c-format msgid "No valid identifier after \".\"." msgstr "No hay un identificador válido después de «.»." -#: utils/adt/misc.c:974 +#: utils/adt/misc.c:1018 #, c-format msgid "log format \"%s\" is not supported" msgstr "el formato de log «%s» no está soportado" -#: utils/adt/misc.c:975 +#: utils/adt/misc.c:1019 #, c-format msgid "The supported log formats are \"stderr\", \"csvlog\", and \"jsonlog\"." -msgstr "" +msgstr "Los formatos de log soportados son «stderr», «csvlog» y «jsonlog»." -#: utils/adt/multirangetypes.c:151 utils/adt/multirangetypes.c:164 -#: utils/adt/multirangetypes.c:193 utils/adt/multirangetypes.c:267 -#: utils/adt/multirangetypes.c:291 +#: utils/adt/multirangetypes.c:150 utils/adt/multirangetypes.c:163 +#: utils/adt/multirangetypes.c:192 utils/adt/multirangetypes.c:266 +#: utils/adt/multirangetypes.c:290 #, c-format msgid "malformed multirange literal: \"%s\"" msgstr "literal de multirango mal formado: «%s»" -#: utils/adt/multirangetypes.c:153 +#: utils/adt/multirangetypes.c:152 #, c-format msgid "Missing left brace." msgstr "Falta llave izquierda." -#: utils/adt/multirangetypes.c:195 +#: utils/adt/multirangetypes.c:194 #, c-format msgid "Expected range start." msgstr "Se esperaba inicio de rango." -#: utils/adt/multirangetypes.c:269 +#: utils/adt/multirangetypes.c:268 #, c-format msgid "Expected comma or end of multirange." msgstr "Se esperaba una coma o el final del multirango." -#: utils/adt/multirangetypes.c:982 +#: utils/adt/multirangetypes.c:981 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "no se puede construir multirangos a partir de arrays multidimensionales" -#: utils/adt/multirangetypes.c:1008 +#: utils/adt/multirangetypes.c:1007 #, c-format msgid "multirange values cannot contain null members" msgstr "valores de multirango no pueden contener miembros nulos" @@ -25138,113 +25894,138 @@ msgstr "el resultado está fuera de rango" msgid "cannot subtract inet values of different sizes" msgstr "no se puede sustraer valores inet de distintos tamaños" -#: utils/adt/numeric.c:785 utils/adt/numeric.c:3643 utils/adt/numeric.c:7131 -#: utils/adt/numeric.c:7334 utils/adt/numeric.c:7806 utils/adt/numeric.c:10501 -#: utils/adt/numeric.c:10975 utils/adt/numeric.c:11069 -#: utils/adt/numeric.c:11203 +#: 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 "el valor excede el formato numeric" -#: utils/adt/numeric.c:1098 +#: utils/adt/numeric.c:1106 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "el signo no es válido en el valor «numeric» externo" -#: utils/adt/numeric.c:1104 +#: utils/adt/numeric.c:1112 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "la escala no es válida en el valor «numeric» externo" -#: utils/adt/numeric.c:1113 +#: utils/adt/numeric.c:1121 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "hay un dígito no válido en el valor «numeric» externo" -#: utils/adt/numeric.c:1328 utils/adt/numeric.c:1342 +#: utils/adt/numeric.c:1336 utils/adt/numeric.c:1350 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "la precisión %d de NUMERIC debe estar entre 1 y %d" -#: utils/adt/numeric.c:1333 -#, fuzzy, c-format -#| msgid "NUMERIC precision %d must be between 1 and %d" +#: utils/adt/numeric.c:1341 +#, c-format msgid "NUMERIC scale %d must be between %d and %d" -msgstr "la precisión %d de NUMERIC debe estar entre 1 y %d" +msgstr "escala NUMERIC %d debe estar entre %d y %d" -#: utils/adt/numeric.c:1351 +#: utils/adt/numeric.c:1359 #, c-format msgid "invalid NUMERIC type modifier" msgstr "modificador de tipo NUMERIC no es válido" -#: utils/adt/numeric.c:1709 +#: utils/adt/numeric.c:1725 #, c-format msgid "start value cannot be NaN" msgstr "el valor de inicio no puede ser NaN" -#: utils/adt/numeric.c:1713 +#: utils/adt/numeric.c:1729 #, c-format msgid "start value cannot be infinity" msgstr "el valor de inicio no puede ser infinito" -#: utils/adt/numeric.c:1720 +#: utils/adt/numeric.c:1736 #, c-format msgid "stop value cannot be NaN" msgstr "el valor de término no puede ser NaN" -#: utils/adt/numeric.c:1724 +#: utils/adt/numeric.c:1740 #, c-format msgid "stop value cannot be infinity" msgstr "el valor de término no puede ser infinito" -#: utils/adt/numeric.c:1737 +#: utils/adt/numeric.c:1753 #, c-format msgid "step size cannot be NaN" msgstr "el tamaño de paso no puede ser NaN" -#: utils/adt/numeric.c:1741 +#: utils/adt/numeric.c:1757 #, c-format msgid "step size cannot be infinity" msgstr "el tamaño de paso no puede ser infinito" -#: utils/adt/numeric.c:3633 +#: utils/adt/numeric.c:3649 #, c-format msgid "factorial of a negative number is undefined" msgstr "el factorial de un número negativo es indefinido" -#: utils/adt/numeric.c:4366 utils/adt/numeric.c:4446 utils/adt/numeric.c:4487 -#: utils/adt/numeric.c:4683 +#: utils/adt/numeric.c:4256 +#, c-format +msgid "lower bound cannot be NaN" +msgstr "el límite inferior no puede ser NaN" + +#: utils/adt/numeric.c:4260 +#, c-format +msgid "lower bound cannot be infinity" +msgstr "el límite inferior no puede ser infinito" + +#: utils/adt/numeric.c:4267 +#, c-format +msgid "upper bound cannot be NaN" +msgstr "el límite superior no puede ser NaN" + +#: utils/adt/numeric.c:4271 +#, c-format +msgid "upper bound cannot be infinity" +msgstr "el límite superior no puede ser infinito" + +#: 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 "no se puede convertir NaN a %s" -#: utils/adt/numeric.c:4370 utils/adt/numeric.c:4450 utils/adt/numeric.c:4491 -#: utils/adt/numeric.c:4687 +#: 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 "no se puede convertir infinito a %s" -#: utils/adt/numeric.c:4696 +#: utils/adt/numeric.c:4789 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn fuera de rango" -#: utils/adt/numeric.c:7896 utils/adt/numeric.c:7947 +#: utils/adt/numeric.c:7981 utils/adt/numeric.c:8032 #, c-format msgid "numeric field overflow" msgstr "desbordamiento de campo numeric" -#: utils/adt/numeric.c:7897 +#: 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 "Un campo con precisión %d, escala %d debe redondear a un valor absoluto menor que %s%d." -#: utils/adt/numeric.c:7948 +#: utils/adt/numeric.c:8033 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "Un campo con precisión %d, escala %d no puede contener un valor infinito." -#: utils/adt/oid.c:216 +#: 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 "el límite inferior debe ser menor o igual al límite superior" + +#: utils/adt/oid.c:217 #, c-format msgid "invalid oidvector data" msgstr "datos de oidvector no válidos" @@ -25255,10 +26036,9 @@ msgid "requested character too large" msgstr "el carácter solicitado es demasiado grande" #: utils/adt/oracle_compat.c:1020 -#, fuzzy, c-format -#| msgid "host name must be specified" +#, c-format msgid "character number must be positive" -msgstr "el nombre de servidor debe ser especificado" +msgstr "el número de carácter debe ser positivo" #: utils/adt/oracle_compat.c:1024 #, c-format @@ -25266,322 +26046,326 @@ msgid "null character not permitted" msgstr "el carácter nulo no está permitido" #: utils/adt/oracle_compat.c:1042 utils/adt/oracle_compat.c:1095 -#, fuzzy, c-format -#| msgid "requested character too large" +#, c-format msgid "requested character too large for encoding: %u" -msgstr "el carácter solicitado es demasiado grande" +msgstr "el carácter pedido es demasiado largo para el encoding: %u" #: utils/adt/oracle_compat.c:1083 -#, fuzzy, c-format -#| msgid "requested character too large" +#, c-format msgid "requested character not valid for encoding: %u" -msgstr "el carácter solicitado es demasiado grande" +msgstr "el carácter pedido no es válido para el encoding: %u" -#: utils/adt/orderedsetaggs.c:448 utils/adt/orderedsetaggs.c:553 -#: utils/adt/orderedsetaggs.c:693 +#: utils/adt/orderedsetaggs.c:446 utils/adt/orderedsetaggs.c:551 +#: utils/adt/orderedsetaggs.c:691 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "el valor de percentil %g no está entre 0 y 1" -#: utils/adt/pg_locale.c:1406 -#, fuzzy, c-format -#| msgid "could not open collator for locale \"%s\": %s" +#: utils/adt/pg_locale.c:326 utils/adt/pg_locale.c:358 +#, c-format +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "el nombre de configuración regional «%s» contiene caracteres no ASCII" + +#: utils/adt/pg_locale.c:1507 +#, c-format msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" -msgstr "no se pudo abrir el «collator» para la configuración regional «%s»: %s" +msgstr "no se pudo abrir el «collator» para la configuración regional «%s» con reglas «%s»: %s" -#: utils/adt/pg_locale.c:1417 utils/adt/pg_locale.c:2847 -#: utils/adt/pg_locale.c:2919 +#: 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 no está soportado en este servidor" -#: utils/adt/pg_locale.c:1446 +#: utils/adt/pg_locale.c:1546 #, c-format msgid "could not create locale \"%s\": %m" msgstr "no se pudo crear la configuración regional «%s»: %m" -#: utils/adt/pg_locale.c:1449 +#: utils/adt/pg_locale.c:1549 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "El sistema operativo no pudo encontrar datos de configuración regional para la configuración «%s»." -#: utils/adt/pg_locale.c:1564 +#: utils/adt/pg_locale.c:1670 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "los ordenamientos (collation) con valores collate y ctype diferentes no están soportados en esta plataforma" -#: utils/adt/pg_locale.c:1573 +#: utils/adt/pg_locale.c:1717 #, c-format -msgid "collation provider LIBC is not supported on this platform" -msgstr "el proveedor de ordenamientos LIBC no está soportado en esta plataforma" - -#: utils/adt/pg_locale.c:1614 -#, fuzzy, c-format -#| msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgid "collation \"%s\" has no actual version, but a version was recorded" -msgstr "la extensión «%s» no tiene ruta de actualización desde la versión «%s» hasta la versión «%s»" +msgstr "la “collation” «%s» no tiene versión actual, pero una versión fue registrada" -#: utils/adt/pg_locale.c:1620 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "el ordenamiento (collation) «%s» tiene una discordancia de versión" -#: utils/adt/pg_locale.c:1622 +#: 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 "El ordenamiento en la base de datos fue creado usando la versión %s, pero el sistema operativo provee la versión %s." -#: utils/adt/pg_locale.c:1625 +#: 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 "Reconstruya todos los objetos afectados por este ordenamiento y ejecute ALTER COLLATION %s REFRESH VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." -#: utils/adt/pg_locale.c:1691 +#: 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 "nombre de configuración regional «%s» no válido para el proveedor builtin" + +#: utils/adt/pg_locale.c:1814 #, c-format msgid "could not load locale \"%s\"" msgstr "no se pudo cargar la configuración regional «%s»" -#: utils/adt/pg_locale.c:1716 +#: utils/adt/pg_locale.c:1839 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "no se pudo obtener la versión de «collation» para la configuración regional «%s»: código de error %lu" -#: utils/adt/pg_locale.c:1772 utils/adt/pg_locale.c:1785 +#: 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 "no se pudo convertir la cadena a UTF-16: código de error %lu" -#: utils/adt/pg_locale.c:1799 +#: utils/adt/pg_locale.c:1920 #, c-format msgid "could not compare Unicode strings: %m" msgstr "no se pudieron comparar las cadenas Unicode: %m" -#: utils/adt/pg_locale.c:1980 +#: utils/adt/pg_locale.c:2094 #, c-format msgid "collation failed: %s" msgstr "el ordenamiento falló: %s" -#: utils/adt/pg_locale.c:2201 utils/adt/pg_locale.c:2233 +#: utils/adt/pg_locale.c:2313 utils/adt/pg_locale.c:2345 #, c-format msgid "sort key generation failed: %s" msgstr "la generación de la llave de ordenamiento falló: %s" -#: utils/adt/pg_locale.c:2474 utils/adt/pg_locale.c:2798 +#: utils/adt/pg_locale.c:2635 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "no se pudo el lenguaje de la configuración regional «%s»: %s" -#: utils/adt/pg_locale.c:2495 utils/adt/pg_locale.c:2511 +#: utils/adt/pg_locale.c:2656 utils/adt/pg_locale.c:2672 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "no se pudo abrir el «collator» para la configuración regional «%s»: %s" -#: utils/adt/pg_locale.c:2536 +#: utils/adt/pg_locale.c:2697 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "la codificación «%s» no estæ soportada por ICU" -#: utils/adt/pg_locale.c:2543 +#: utils/adt/pg_locale.c:2704 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "no se pudo abrir el conversor ICU para la codificación «%s»: %s" -#: utils/adt/pg_locale.c:2561 utils/adt/pg_locale.c:2580 -#: utils/adt/pg_locale.c:2636 utils/adt/pg_locale.c:2647 +#: 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 falló: %s" -#: utils/adt/pg_locale.c:2838 +#: utils/adt/pg_locale.c:2983 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "no se pudo convertir el nombre de configuración regional «%s» a etiqueta de lenguaje: %s" -#: utils/adt/pg_locale.c:2879 -#, fuzzy, c-format -#| msgid "could not get language from locale \"%s\": %s" +#: utils/adt/pg_locale.c:3024 +#, c-format msgid "could not get language from ICU locale \"%s\": %s" -msgstr "no se pudo el lenguaje de la configuración regional «%s»: %s" +msgstr "no se pudo obtener el lenguaje de la configuración regional ICU «%s»: %s" -#: utils/adt/pg_locale.c:2881 utils/adt/pg_locale.c:2910 +#: utils/adt/pg_locale.c:3026 utils/adt/pg_locale.c:3055 #, c-format -msgid "To disable ICU locale validation, set parameter icu_validation_level to DISABLED." -msgstr "" +msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." +msgstr "Par desactivar la validación ICU de configuración regional, defina «%s» a «%s»." -#: utils/adt/pg_locale.c:2908 -#, fuzzy, c-format -#| msgid "locale \"%s\" has unknown language \"%s\"" +#: utils/adt/pg_locale.c:3053 +#, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" -msgstr "la configuración regional «%s» tiene lenguaje «%s» desconocido" +msgstr "el locale ICU «%s» tiene lenguaje desconocido «%s»" -#: utils/adt/pg_locale.c:3088 +#: utils/adt/pg_locale.c:3204 #, c-format msgid "invalid multibyte character for locale" msgstr "el carácter multibyte no es válido para esta configuración regional" -#: utils/adt/pg_locale.c:3089 +#: utils/adt/pg_locale.c:3205 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "La configuración regional LC_CTYPE del servidor es probablemente incompatible con la codificación de la base de datos." -#: utils/adt/pg_lsn.c:263 +#: utils/adt/pg_lsn.c:262 #, c-format msgid "cannot add NaN to pg_lsn" msgstr "no se puede sumar NaN a bigint" -#: utils/adt/pg_lsn.c:297 +#: utils/adt/pg_lsn.c:296 #, c-format msgid "cannot subtract NaN from pg_lsn" msgstr "no se puede restar NaN de pg_lsn" -#: utils/adt/pg_upgrade_support.c:29 +#: utils/adt/pg_upgrade_support.c:39 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "la función sólo puede invocarse cuando el servidor está en modo de actualización binaria" -#: utils/adt/pgstatfuncs.c:253 +#: utils/adt/pgstatfuncs.c:252 #, c-format msgid "invalid command name: \"%s\"" msgstr "nombre de orden no válido: «%s»" -#: utils/adt/pgstatfuncs.c:1773 +#: utils/adt/pgstatfuncs.c:1739 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "destino de reset no reconocido: «%s»" -#: utils/adt/pgstatfuncs.c:1774 +#: utils/adt/pgstatfuncs.c:1740 #, c-format -msgid "Target must be \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", or \"wal\"." -msgstr "" +msgid "Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\"." +msgstr "El destino debe ser «archiver», «bgwriter», «checkpointer», «io», «recovery_prefetch», «slru» o «wal»." -#: utils/adt/pgstatfuncs.c:1852 -#, fuzzy, c-format -#| msgid "invalid role OID: %u" +#: utils/adt/pgstatfuncs.c:1822 +#, c-format msgid "invalid subscription OID %u" -msgstr "el OID de rol no es válido: %u" +msgstr "OID de suscripción %u no válido" + +#: utils/adt/pseudorandomfuncs.c:69 +#, c-format +msgid "setseed parameter %g is out of allowed range [-1,1]" +msgstr "parámetro setseed %g fuera del rango permitido [-1,1]" -#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 +#: utils/adt/pseudotypes.c:55 utils/adt/pseudotypes.c:89 #, c-format msgid "cannot display a value of type %s" msgstr "no se puede desplegar un valor de tipo %s" -#: utils/adt/pseudotypes.c:310 +#: utils/adt/pseudotypes.c:307 #, c-format msgid "cannot accept a value of a shell type" msgstr "no se puede aceptar un valor de un tipo inconcluso" -#: utils/adt/pseudotypes.c:320 +#: utils/adt/pseudotypes.c:317 #, c-format msgid "cannot display a value of a shell type" msgstr "no se puede desplegar un valor de un tipo inconcluso" -#: utils/adt/rangetypes.c:415 +#: utils/adt/rangetypes.c:422 #, c-format msgid "range constructor flags argument must not be null" msgstr "el argumento de opciones del constructor de rango no debe ser null" -#: utils/adt/rangetypes.c:1014 +#: utils/adt/rangetypes.c:1021 #, c-format msgid "result of range difference would not be contiguous" msgstr "el resultado de la diferencia de rangos no sería contiguo" -#: utils/adt/rangetypes.c:1075 +#: utils/adt/rangetypes.c:1082 #, c-format msgid "result of range union would not be contiguous" msgstr "el resultado de la unión de rangos no sería contiguo" -#: utils/adt/rangetypes.c:1750 +#: utils/adt/rangetypes.c:1757 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "el límite inferior del rango debe ser menor o igual al límite superior del rango" -#: utils/adt/rangetypes.c:2197 utils/adt/rangetypes.c:2210 -#: utils/adt/rangetypes.c:2224 +#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 +#: utils/adt/rangetypes.c:2283 #, c-format msgid "invalid range bound flags" msgstr "opciones de bordes de rango no válidas" -#: utils/adt/rangetypes.c:2198 utils/adt/rangetypes.c:2211 -#: utils/adt/rangetypes.c:2225 +#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 +#: utils/adt/rangetypes.c:2284 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Los valores aceptables son «[]», «[)», «(]» y «()»." -#: utils/adt/rangetypes.c:2293 utils/adt/rangetypes.c:2310 -#: utils/adt/rangetypes.c:2325 utils/adt/rangetypes.c:2345 -#: utils/adt/rangetypes.c:2356 utils/adt/rangetypes.c:2403 -#: utils/adt/rangetypes.c:2411 +#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 +#: utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 +#: utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "malformed range literal: \"%s\"" msgstr "literal de rango mal formado: «%s»" -#: utils/adt/rangetypes.c:2295 +#: utils/adt/rangetypes.c:2354 #, c-format msgid "Junk after \"empty\" key word." msgstr "Basura a continuación de la palabra «empty»." -#: utils/adt/rangetypes.c:2312 +#: utils/adt/rangetypes.c:2371 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Falta paréntesis o corchete izquierdo." -#: utils/adt/rangetypes.c:2327 +#: utils/adt/rangetypes.c:2386 #, c-format msgid "Missing comma after lower bound." msgstr "Coma faltante después del límite inferior." -#: utils/adt/rangetypes.c:2347 +#: utils/adt/rangetypes.c:2406 #, c-format msgid "Too many commas." msgstr "Demasiadas comas." -#: utils/adt/rangetypes.c:2358 +#: utils/adt/rangetypes.c:2417 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Basura después del paréntesis o corchete derecho." -#: utils/adt/regexp.c:305 utils/adt/regexp.c:1997 utils/adt/varlena.c:4270 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 #, c-format msgid "regular expression failed: %s" msgstr "la expresión regular falló: %s" -#: utils/adt/regexp.c:446 utils/adt/regexp.c:681 +#: utils/adt/regexp.c:445 utils/adt/regexp.c:680 #, c-format msgid "invalid regular expression option: \"%.*s\"" msgstr "opción de expresión regular no válida: «%.*s»" -#: utils/adt/regexp.c:683 +#: utils/adt/regexp.c:682 #, c-format msgid "If you meant to use regexp_replace() with a start parameter, cast the fourth argument to integer explicitly." msgstr "Si su intención era usar regexp_replace() con un parámetro de inicio, convierta el cuarto argumento a integer explícitamente." -#: utils/adt/regexp.c:717 utils/adt/regexp.c:726 utils/adt/regexp.c:1083 -#: utils/adt/regexp.c:1147 utils/adt/regexp.c:1156 utils/adt/regexp.c:1165 -#: utils/adt/regexp.c:1174 utils/adt/regexp.c:1854 utils/adt/regexp.c:1863 -#: utils/adt/regexp.c:1872 utils/misc/guc.c:6610 utils/misc/guc.c:6644 +#: 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 "valor no válido para el parámetro «%s»: %d" -#: utils/adt/regexp.c:937 +#: utils/adt/regexp.c:936 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "la expresión regular SQL no puede contener más de dos separadores escape-comilla doble" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:1094 utils/adt/regexp.c:1185 utils/adt/regexp.c:1272 -#: utils/adt/regexp.c:1311 utils/adt/regexp.c:1699 utils/adt/regexp.c:1754 -#: utils/adt/regexp.c:1883 +#: utils/adt/regexp.c:1093 utils/adt/regexp.c:1184 utils/adt/regexp.c:1271 +#: utils/adt/regexp.c:1310 utils/adt/regexp.c:1698 utils/adt/regexp.c:1753 +#: utils/adt/regexp.c:1882 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s no soporta la opción «global»" -#: utils/adt/regexp.c:1313 +#: utils/adt/regexp.c:1312 #, c-format msgid "Use the regexp_matches function instead." msgstr "En su lugar, utilice la función regexp_matches." -#: utils/adt/regexp.c:1501 +#: utils/adt/regexp.c:1500 #, c-format msgid "too many regular expression matches" msgstr "demasiadas coincidencias de la expresión regular" @@ -25596,18 +26380,18 @@ msgstr "existe más de una función llamada «%s»" msgid "more than one operator named %s" msgstr "existe más de un operador llamado %s" -#: utils/adt/regproc.c:670 gram.y:8844 +#: utils/adt/regproc.c:670 gram.y:8992 #, c-format msgid "missing argument" msgstr "falta un argumento" -#: utils/adt/regproc.c:671 gram.y:8845 +#: utils/adt/regproc.c:671 gram.y:8993 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Use NONE para denotar el argumento faltante de un operador unario." -#: utils/adt/regproc.c:675 utils/adt/regproc.c:2009 utils/adt/ruleutils.c:10013 -#: utils/adt/ruleutils.c:10226 +#: 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 "demasiados argumentos" @@ -25617,296 +26401,319 @@ msgstr "demasiados argumentos" msgid "Provide two argument types for operator." msgstr "Provea dos tipos de argumento para un operador." -#: utils/adt/regproc.c:1544 utils/adt/regproc.c:1661 utils/adt/regproc.c:1790 -#: utils/adt/regproc.c:1795 utils/adt/varlena.c:3410 utils/adt/varlena.c:3415 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 +#: utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 #, c-format msgid "invalid name syntax" msgstr "la sintaxis de nombre no es válida" -#: utils/adt/regproc.c:1904 +#: utils/adt/regproc.c:1924 #, c-format msgid "expected a left parenthesis" msgstr "se esperaba un paréntesis izquierdo" -#: utils/adt/regproc.c:1922 +#: utils/adt/regproc.c:1942 #, c-format msgid "expected a right parenthesis" msgstr "se esperaba un paréntesis derecho" -#: utils/adt/regproc.c:1941 +#: utils/adt/regproc.c:1961 #, c-format msgid "expected a type name" msgstr "se esperaba un nombre de tipo" -#: utils/adt/regproc.c:1973 +#: utils/adt/regproc.c:1993 #, c-format msgid "improper type name" msgstr "el nombre de tipo no es válido" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1625 -#: utils/adt/ri_triggers.c:2610 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 +#: utils/adt/ri_triggers.c:2601 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "inserción o actualización en la tabla «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:309 utils/adt/ri_triggers.c:1628 +#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL no permite la mezcla de valores de clave nulos y no nulos." -#: utils/adt/ri_triggers.c:2045 +#: utils/adt/ri_triggers.c:2036 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "la función «%s» debe ser ejecutada en INSERT" -#: utils/adt/ri_triggers.c:2051 +#: utils/adt/ri_triggers.c:2042 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "la función «%s» debe ser ejecutada en UPDATE" -#: utils/adt/ri_triggers.c:2057 +#: utils/adt/ri_triggers.c:2048 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "la función «%s» debe ser ejecutada en DELETE" -#: utils/adt/ri_triggers.c:2080 +#: utils/adt/ri_triggers.c:2071 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "no hay una entrada en pg_constraint para el trigger «%s» en tabla «%s»" -#: utils/adt/ri_triggers.c:2082 +#: utils/adt/ri_triggers.c:2073 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Elimine este trigger de integridad referencial y sus pares, y utilice ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2112 gram.y:4226 +#: utils/adt/ri_triggers.c:2103 gram.y:4340 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL no está implementada" -#: utils/adt/ri_triggers.c:2435 +#: utils/adt/ri_triggers.c:2426 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "la consulta de integridad referencial en «%s» de la restricción «%s» en «%s» entregó un resultado inesperado" -#: utils/adt/ri_triggers.c:2439 +#: utils/adt/ri_triggers.c:2430 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Esto probablemente es causado por una regla que reescribió la consulta." -#: utils/adt/ri_triggers.c:2600 +#: utils/adt/ri_triggers.c:2591 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "eliminar la partición «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:2603 utils/adt/ri_triggers.c:2628 +#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "La llave (%s)=(%s) todavía es referida desde la tabla «%s»." -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2605 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "La llave (%s)=(%s) no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:2617 +#: utils/adt/ri_triggers.c:2608 #, c-format msgid "Key is not present in table \"%s\"." msgstr "La llave no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:2623 +#: utils/adt/ri_triggers.c:2614 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update o delete en «%s» viola la llave foránea «%s» en la tabla «%s»" -#: utils/adt/ri_triggers.c:2631 +#: utils/adt/ri_triggers.c:2622 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "La llave todavía es referida desde la tabla «%s»." -#: utils/adt/rowtypes.c:106 utils/adt/rowtypes.c:510 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:509 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "el ingreso de tipos compuestos anónimos no está implementado" -#: utils/adt/rowtypes.c:159 utils/adt/rowtypes.c:191 utils/adt/rowtypes.c:217 -#: utils/adt/rowtypes.c:228 utils/adt/rowtypes.c:286 utils/adt/rowtypes.c:297 +#: utils/adt/rowtypes.c:158 utils/adt/rowtypes.c:190 utils/adt/rowtypes.c:216 +#: utils/adt/rowtypes.c:227 utils/adt/rowtypes.c:285 utils/adt/rowtypes.c:296 #, c-format msgid "malformed record literal: \"%s\"" msgstr "literal de record mal formado: «%s»" -#: utils/adt/rowtypes.c:160 +#: utils/adt/rowtypes.c:159 #, c-format msgid "Missing left parenthesis." msgstr "Falta paréntesis izquierdo." -#: utils/adt/rowtypes.c:192 +#: utils/adt/rowtypes.c:191 #, c-format msgid "Too few columns." msgstr "Muy pocas columnas." -#: utils/adt/rowtypes.c:287 +#: utils/adt/rowtypes.c:286 #, c-format msgid "Too many columns." msgstr "Demasiadas columnas." -#: utils/adt/rowtypes.c:298 +#: utils/adt/rowtypes.c:297 #, c-format msgid "Junk after right parenthesis." msgstr "Basura después del paréntesis derecho." -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:558 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "número de columnas erróneo: %d, se esperaban %d" -#: utils/adt/rowtypes.c:601 +#: utils/adt/rowtypes.c:599 #, c-format msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" msgstr "los datos binarios tienen tipo %u (%s) en lugar del esperado %u (%s) en columna de registro %d" -#: utils/adt/rowtypes.c:668 +#: utils/adt/rowtypes.c:660 #, c-format msgid "improper binary format in record column %d" msgstr "formato binario incorrecto en la columna record %d" -#: utils/adt/rowtypes.c:959 utils/adt/rowtypes.c:1205 utils/adt/rowtypes.c:1463 -#: utils/adt/rowtypes.c:1709 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 +#: utils/adt/rowtypes.c:1699 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "no se pueden comparar los tipos de columnas disímiles %s y %s en la columna %d" -#: utils/adt/rowtypes.c:1050 utils/adt/rowtypes.c:1275 -#: utils/adt/rowtypes.c:1560 utils/adt/rowtypes.c:1745 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 +#: utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "no se pueden comparar registros con cantidad distinta de columnas" #: utils/adt/ruleutils.c:2694 -#, fuzzy, c-format -#| msgid "cannot use subquery in index expression" +#, c-format msgid "input is a query, not an expression" -msgstr "no se puede usar una subconsulta en una expresión de índice" +msgstr "la entrada es una consulta, no una expresión" #: utils/adt/ruleutils.c:2706 -#, fuzzy, c-format -#| msgid "USING expression contains a whole-row table reference." +#, c-format msgid "expression contains variables of more than one relation" -msgstr "La expresión USING contiene una referencia a la fila completa (whole-row)." +msgstr "la expresión contiene variables de más de una relación" #: utils/adt/ruleutils.c:2713 -#, fuzzy, c-format -#| msgid "argument of %s must not contain variables" +#, c-format msgid "expression contains variables" -msgstr "el argumento de %s no puede contener variables" +msgstr "la expresión contiene variables" -#: utils/adt/ruleutils.c:5227 +#: utils/adt/ruleutils.c:5246 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la regla «%s» tiene el tipo de evento no soportado %d" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:128 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "la precisión de TIMESTAMP(%d)%s no debe ser negativa" -#: utils/adt/timestamp.c:118 +#: utils/adt/timestamp.c:134 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIMESTAMP(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:378 +#: utils/adt/timestamp.c:394 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "la precisión de timestamp(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:496 +#: utils/adt/timestamp.c:512 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Los husos horarios numéricos deben tener «-» o «+» como su primer carácter." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:524 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "huso horario numérico «%s» fuera de rango" -#: utils/adt/timestamp.c:609 utils/adt/timestamp.c:619 -#: utils/adt/timestamp.c:627 +#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 +#: utils/adt/timestamp.c:643 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp fuera de rango: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:728 +#: utils/adt/timestamp.c:744 #, c-format msgid "timestamp cannot be NaN" msgstr "el timestamp no puede ser NaN" -#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:758 +#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp fuera de rango: «%g»" -#: utils/adt/timestamp.c:1065 utils/adt/timestamp.c:1098 +#: 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: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 "interval fuera de rango" + +#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 #, c-format msgid "invalid INTERVAL type modifier" msgstr "modificador de tipo INTERVAL no válido" -#: utils/adt/timestamp.c:1081 +#: utils/adt/timestamp.c:1110 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "la precisión de INTERVAL(%d) no debe ser negativa" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1116 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "la precisión de INTERVAL(%d) fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:1473 +#: utils/adt/timestamp.c:1506 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "la precisión de interval(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:2703 -#, c-format -msgid "cannot subtract infinite timestamps" -msgstr "no se pueden restar timestamps infinitos" - -#: utils/adt/timestamp.c:3956 utils/adt/timestamp.c:4139 +#: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 #, c-format msgid "origin out of range" msgstr "origen fuera de rango" -#: utils/adt/timestamp.c:3961 utils/adt/timestamp.c:4144 +#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#, c-format +msgid "timestamps cannot be binned into infinite intervals" +msgstr "no se puede aproximar (bin) timestamps hacia intervalos infinitos" + +#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "no se puede aproximar (bin) timestamps hacia intervalos que contengan meses o años" -#: utils/adt/timestamp.c:3968 utils/adt/timestamp.c:4151 +#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 #, c-format msgid "stride must be greater than zero" msgstr "el intervalo de paso (stride) debe ser mayor que cero" -#: utils/adt/timestamp.c:4434 +#: utils/adt/timestamp.c:5091 #, c-format msgid "Months usually have fractional weeks." -msgstr "" +msgstr "Los meses usualmente tienen semanas fraccionales." + +#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#, c-format +msgid "step size cannot be infinite" +msgstr "el tamaño de paso no puede ser infinito" -#: utils/adt/trigfuncs.c:42 +#: utils/adt/trigfuncs.c:41 #, c-format msgid "suppress_redundant_updates_trigger: must be called as trigger" msgstr "suppress_redundant_updates_trigger: debe ser invocado como trigger" -#: utils/adt/trigfuncs.c:48 +#: utils/adt/trigfuncs.c:47 #, c-format msgid "suppress_redundant_updates_trigger: must be called on update" msgstr "suppress_redundant_updates_trigger: debe ser invocado en «UPDATE»" -#: utils/adt/trigfuncs.c:54 +#: utils/adt/trigfuncs.c:53 #, c-format msgid "suppress_redundant_updates_trigger: must be called before update" msgstr "suppress_redundant_updates_trigger: debe ser invocado «BEFORE UPDATE»" -#: utils/adt/trigfuncs.c:60 +#: utils/adt/trigfuncs.c:59 #, c-format msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: debe ser invocado «FOR EACH ROW»" @@ -25921,32 +26728,32 @@ msgstr "distancia en operador de frases debe ser un valor entero entre zero y %d msgid "no operand in tsquery: \"%s\"" msgstr "no hay operando en tsquery: «%s»" -#: utils/adt/tsquery.c:558 +#: utils/adt/tsquery.c:554 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "el valor es demasiado grande en tsquery: «%s»" -#: utils/adt/tsquery.c:563 +#: utils/adt/tsquery.c:559 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "el operando es muy largo en tsquery: «%s»" -#: utils/adt/tsquery.c:591 +#: utils/adt/tsquery.c:587 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "palabra demasiado larga en tsquery: «%s»" -#: utils/adt/tsquery.c:717 utils/adt/tsvector_parser.c:147 +#: utils/adt/tsquery.c:713 utils/adt/tsvector_parser.c:147 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "error de sintaxis en tsquery: «%s»" -#: utils/adt/tsquery.c:883 +#: utils/adt/tsquery.c:879 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "la consulta de búsqueda en texto no contiene lexemas: «%s»" -#: utils/adt/tsquery.c:894 utils/adt/tsquery_util.c:376 +#: utils/adt/tsquery.c:890 utils/adt/tsquery_util.c:376 #, c-format msgid "tsquery is too large" msgstr "el tsquery es demasiado grande" @@ -25981,73 +26788,72 @@ msgstr "los arrays de pesos no deben contener valores nulos" msgid "weight out of range" msgstr "peso fuera de rango" -#: utils/adt/tsvector.c:217 +#: utils/adt/tsvector.c:216 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "la palabra es demasiado larga (%ld, máximo %ld bytes)" -#: utils/adt/tsvector.c:224 +#: utils/adt/tsvector.c:223 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "la cadena es demasiado larga para tsvector (%ld bytes, máximo %ld bytes)" -#: utils/adt/tsvector_op.c:773 +#: utils/adt/tsvector_op.c:771 #, c-format msgid "lexeme array may not contain nulls" msgstr "el array de lexemas no debe contener nulls" -#: utils/adt/tsvector_op.c:778 -#, fuzzy, c-format -#| msgid "lexeme array may not contain nulls" +#: utils/adt/tsvector_op.c:776 +#, c-format msgid "lexeme array may not contain empty strings" -msgstr "el array de lexemas no debe contener nulls" +msgstr "el array de lexemas no debe contener cadenas vacías" -#: utils/adt/tsvector_op.c:847 +#: utils/adt/tsvector_op.c:845 #, c-format msgid "weight array may not contain nulls" msgstr "el array de pesos no debe contener nulls" -#: utils/adt/tsvector_op.c:871 +#: utils/adt/tsvector_op.c:869 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "no se reconoce el peso: «%c»" -#: utils/adt/tsvector_op.c:2601 +#: utils/adt/tsvector_op.c:2599 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "la consulta ts_stat debe retornar una columna tsvector" -#: utils/adt/tsvector_op.c:2790 +#: utils/adt/tsvector_op.c:2788 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "la columna tsvector «%s» no existe" -#: utils/adt/tsvector_op.c:2797 +#: utils/adt/tsvector_op.c:2795 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "la columna «%s» no es de tipo tsvector" -#: utils/adt/tsvector_op.c:2809 +#: utils/adt/tsvector_op.c:2807 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "la columna de configuración «%s» no existe" -#: utils/adt/tsvector_op.c:2815 +#: utils/adt/tsvector_op.c:2813 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "la columna «%s» no es de tipo regconfig" -#: utils/adt/tsvector_op.c:2822 +#: utils/adt/tsvector_op.c:2820 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "la columna de configuración «%s» no debe ser nula" -#: utils/adt/tsvector_op.c:2835 +#: utils/adt/tsvector_op.c:2833 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "el nombre de la configuración de búsqueda «%s» debe ser calificada con esquema" -#: utils/adt/tsvector_op.c:2860 +#: utils/adt/tsvector_op.c:2858 #, c-format msgid "column \"%s\" is not of a character type" msgstr "la columna «%s» no es de un tipo textual" @@ -26067,17 +26873,17 @@ msgstr "no hay carácter escapado: «%s»" msgid "wrong position info in tsvector: \"%s\"" msgstr "información posicional incorrecta en tsvector: «%s»" -#: utils/adt/uuid.c:413 +#: utils/adt/uuid.c:418 #, c-format msgid "could not generate random values" msgstr "no se pudo generar valores aleatorios" -#: utils/adt/varbit.c:110 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "el largo para el tipo %s debe ser al menos 1" -#: utils/adt/varbit.c:115 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "el largo del tipo %s no puede exceder %d" @@ -26112,9 +26918,9 @@ msgstr "el largo no es válido en cadena de bits externa" msgid "bit string too long for type bit varying(%d)" msgstr "la cadena de bits es demasiado larga para el tipo bit varying(%d)" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:908 -#: utils/adt/varlena.c:971 utils/adt/varlena.c:1128 utils/adt/varlena.c:3052 -#: utils/adt/varlena.c:3130 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 +#: utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 +#: utils/adt/varlena.c:3133 #, c-format msgid "negative substring length not allowed" msgstr "no se permite un largo negativo de subcadena" @@ -26139,334 +26945,342 @@ msgstr "no se puede hacer XOR entre cadenas de bits de distintos tamaños" msgid "bit index %d out of valid range (0..%d)" msgstr "el índice de bit %d está fuera del rango válido (0..%d)" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3334 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 #, c-format msgid "new bit must be 0 or 1" msgstr "el nuevo bit debe ser 0 o 1" -#: utils/adt/varchar.c:162 utils/adt/varchar.c:313 +#: utils/adt/varchar.c:161 utils/adt/varchar.c:312 #, c-format msgid "value too long for type character(%d)" msgstr "el valor es demasiado largo para el tipo character(%d)" -#: utils/adt/varchar.c:476 utils/adt/varchar.c:640 +#: utils/adt/varchar.c:475 utils/adt/varchar.c:639 #, c-format msgid "value too long for type character varying(%d)" msgstr "el valor es demasiado largo para el tipo character varying(%d)" -#: utils/adt/varchar.c:738 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "no se pudo determinar qué ordenamiento usar para la comparación de cadenas" -#: utils/adt/varlena.c:1227 utils/adt/varlena.c:1806 +#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "los ordenamientos no determinísticos no están soportados para búsquedas de sub-cadenas" -#: utils/adt/varlena.c:3218 utils/adt/varlena.c:3285 +#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "el índice %d está fuera de rango [0..%d]" -#: utils/adt/varlena.c:3249 utils/adt/varlena.c:3321 +#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "el índice %lld está fuera de rango, 0..%lld" -#: utils/adt/varlena.c:4382 +#: utils/adt/varlena.c:4385 #, c-format msgid "field position must not be zero" msgstr "la posición del campo no debe ser cero" -#: utils/adt/varlena.c:5554 +#: utils/adt/varlena.c:5630 #, c-format msgid "unterminated format() type specifier" msgstr "especificador de tipo inconcluso en format()" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5689 utils/adt/varlena.c:5810 +#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Para un «%%» solo, use «%%%%»." -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5808 +#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "especificador de tipo no reconocido «%.*s» en format()" -#: utils/adt/varlena.c:5700 utils/adt/varlena.c:5757 +#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 #, c-format msgid "too few arguments for format()" msgstr "muy pocos argumentos para format()" -#: utils/adt/varlena.c:5853 utils/adt/varlena.c:6035 +#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 #, c-format msgid "number is out of range" msgstr "el número está fuera de rango" -#: utils/adt/varlena.c:5916 utils/adt/varlena.c:5944 +#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "la conversión especifica el argumento 0, pero los argumentos se numeran desde 1" -#: utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:6013 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "la posición del argumento de anchura debe terminar con «$»" -#: utils/adt/varlena.c:5982 +#: utils/adt/varlena.c:6058 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "los valores nulos no pueden ser formateados como un identificador SQL" -#: utils/adt/varlena.c:6190 +#: utils/adt/varlena.c:6266 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "la normalización Unicode sólo puede ser hecha si la codificación de servidor es UTF8" -#: utils/adt/varlena.c:6203 +#: utils/adt/varlena.c:6279 #, c-format msgid "invalid normalization form: %s" msgstr "forma de normalización no válida: %s" -#: utils/adt/varlena.c:6406 utils/adt/varlena.c:6441 utils/adt/varlena.c:6476 +#: utils/adt/varlena.c:6324 +#, c-format +msgid "Unicode categorization can only be performed if server encoding is UTF8" +msgstr "la categorización Unicode sólo puede ser hecha si la codificación de servidor es UTF8" + +#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 #, c-format msgid "invalid Unicode code point: %04X" msgstr "punto de código Unicode no válido: %04X" -#: utils/adt/varlena.c:6506 +#: utils/adt/varlena.c:6641 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "Los escapes Unicode deben ser \\XXXX, \\+XXXXXX, \\uXXXX o \\UXXXXXXXX." -#: utils/adt/windowfuncs.c:442 +#: utils/adt/windowfuncs.c:443 #, c-format msgid "argument of ntile must be greater than zero" msgstr "el argumento de ntile debe ser mayor que cero" -#: utils/adt/windowfuncs.c:706 +#: utils/adt/windowfuncs.c:707 #, c-format msgid "argument of nth_value must be greater than zero" msgstr "el argumento de nth_value debe ser mayor que cero" -#: utils/adt/xid8funcs.c:125 +#: utils/adt/xid8funcs.c:120 #, c-format msgid "transaction ID %llu is in the future" -msgstr "" +msgstr "el ID de transacción %llu está en el futuro" -#: utils/adt/xid8funcs.c:547 +#: utils/adt/xid8funcs.c:522 #, c-format msgid "invalid external pg_snapshot data" msgstr "datos externos pg_snapshot no válidos" -#: utils/adt/xml.c:228 +#: utils/adt/xml.c:238 #, c-format msgid "unsupported XML feature" msgstr "característica XML no soportada" -#: utils/adt/xml.c:229 +#: utils/adt/xml.c:239 #, c-format msgid "This functionality requires the server to be built with libxml support." msgstr "Esta funcionalidad requiere que el servidor haya sido construido con soporte libxml." -#: utils/adt/xml.c:248 utils/mb/mbutils.c:628 +#: utils/adt/xml.c:258 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "nombre de codificación «%s» no válido" -#: utils/adt/xml.c:496 utils/adt/xml.c:501 +#: utils/adt/xml.c:506 utils/adt/xml.c:511 #, c-format msgid "invalid XML comment" msgstr "comentario XML no válido" -#: utils/adt/xml.c:660 +#: utils/adt/xml.c:697 #, c-format msgid "not an XML document" msgstr "no es un documento XML" -#: utils/adt/xml.c:956 utils/adt/xml.c:979 +#: utils/adt/xml.c:1008 utils/adt/xml.c:1031 #, c-format msgid "invalid XML processing instruction" msgstr "instrucción de procesamiento XML no válida" -#: utils/adt/xml.c:957 +#: utils/adt/xml.c:1009 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "el nombre de destino de la instrucción de procesamiento XML no puede ser «%s»." -#: utils/adt/xml.c:980 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "la instrucción de procesamiento XML no puede contener «?>»." -#: utils/adt/xml.c:1059 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "xmlvalidate no está implementado" -#: utils/adt/xml.c:1115 +#: utils/adt/xml.c:1167 #, c-format msgid "could not initialize XML library" msgstr "no se pudo inicializar la biblioteca XML" -#: utils/adt/xml.c:1116 +#: utils/adt/xml.c:1168 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%zu, sizeof(xmlChar)=%zu." -msgstr "" +msgstr "libxml2 tiene un tipo char incompatible: sizeof(char)=%zu, sizeof(xmlChar)=%zu." -#: utils/adt/xml.c:1202 +#: utils/adt/xml.c:1254 #, c-format msgid "could not set up XML error handler" msgstr "no se pudo instalar un gestor de errores XML" -#: utils/adt/xml.c:1203 +#: 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 "Esto probablemente indica que la versión de libxml2 en uso no es compatible con los archivos de cabecera libxml2 con los que PostgreSQL fue construido." -#: utils/adt/xml.c:2189 +#: utils/adt/xml.c:2281 msgid "Invalid character value." msgstr "Valor de carácter no válido." -#: utils/adt/xml.c:2192 +#: utils/adt/xml.c:2284 msgid "Space required." msgstr "Se requiere un espacio." -#: utils/adt/xml.c:2195 +#: utils/adt/xml.c:2287 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone acepta sólo 'yes' y 'no'." -#: utils/adt/xml.c:2198 +#: utils/adt/xml.c:2290 msgid "Malformed declaration: missing version." msgstr "Declaración mal formada: falta la versión." -#: utils/adt/xml.c:2201 +#: utils/adt/xml.c:2293 msgid "Missing encoding in text declaration." msgstr "Falta especificación de codificación en declaración de texto." -#: utils/adt/xml.c:2204 +#: utils/adt/xml.c:2296 msgid "Parsing XML declaration: '?>' expected." msgstr "Procesando declaración XML: se esperaba '?>'." -#: utils/adt/xml.c:2207 +#: utils/adt/xml.c:2299 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Código de error libxml no reconocido: %d." -#: utils/adt/xml.c:2461 +#: utils/adt/xml.c:2553 #, c-format msgid "XML does not support infinite date values." msgstr "XML no soporta valores infinitos de fecha." -#: utils/adt/xml.c:2483 utils/adt/xml.c:2510 +#: utils/adt/xml.c:2575 utils/adt/xml.c:2602 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML no soporta valores infinitos de timestamp." -#: utils/adt/xml.c:2926 +#: utils/adt/xml.c:3018 #, c-format msgid "invalid query" msgstr "consulta no válido" -#: utils/adt/xml.c:4266 +#: utils/adt/xml.c:3110 +#, c-format +msgid "portal \"%s\" does not return tuples" +msgstr "el portal «%s» no retorna tuplas" + +#: utils/adt/xml.c:4362 #, c-format msgid "invalid array for XML namespace mapping" msgstr "array no válido para mapeo de espacio de nombres XML" -#: utils/adt/xml.c:4267 +#: utils/adt/xml.c:4363 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "El array debe ser bidimensional y el largo del segundo eje igual a 2." -#: utils/adt/xml.c:4291 +#: utils/adt/xml.c:4387 #, c-format msgid "empty XPath expression" msgstr "expresion XPath vacía" -#: utils/adt/xml.c:4343 +#: utils/adt/xml.c:4439 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ni el espacio de nombres ni la URI pueden ser vacíos" -#: utils/adt/xml.c:4350 +#: utils/adt/xml.c:4446 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "no se pudo registrar un espacio de nombres XML llamado «%s» con URI «%s»" -#: utils/adt/xml.c:4693 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "el espacio de nombres DEFAULT no está soportado" -#: utils/adt/xml.c:4722 +#: utils/adt/xml.c:4824 #, c-format msgid "row path filter must not be empty string" msgstr "el «path» de filtro de registros no debe ser la cadena vacía" -#: utils/adt/xml.c:4753 +#: utils/adt/xml.c:4858 #, c-format msgid "column path filter must not be empty string" msgstr "el «path» de filtro de columna no debe ser la cadena vacía" -#: utils/adt/xml.c:4897 +#: utils/adt/xml.c:5005 #, c-format msgid "more than one value returned by column XPath expression" msgstr "la expresión XPath de columna retornó más de un valor" -#: utils/cache/lsyscache.c:1043 +#: utils/cache/lsyscache.c:1017 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "no existe la conversión del tipo %s al tipo %s" -#: utils/cache/lsyscache.c:2845 utils/cache/lsyscache.c:2878 -#: utils/cache/lsyscache.c:2911 utils/cache/lsyscache.c:2944 +#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 +#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 #, c-format msgid "type %s is only a shell" msgstr "el tipo %s está inconcluso" -#: utils/cache/lsyscache.c:2850 +#: utils/cache/lsyscache.c:2892 #, c-format msgid "no input function available for type %s" msgstr "no hay una función de entrada para el tipo %s" -#: utils/cache/lsyscache.c:2883 +#: utils/cache/lsyscache.c:2925 #, c-format msgid "no output function available for type %s" msgstr "no hay una función de salida para el tipo %s" -#: utils/cache/partcache.c:219 +#: utils/cache/partcache.c:216 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "falta la función de soporte %3$d para el tipo %4$s de la clase de operadores «%1$s» del método de acceso %2$s" -#: utils/cache/plancache.c:720 +#: utils/cache/plancache.c:747 #, c-format msgid "cached plan must not change result type" msgstr "el plan almacenado no debe cambiar el tipo de resultado" -#: utils/cache/relcache.c:3740 -#, fuzzy, c-format -#| msgid "pg_enum OID value not set when in binary upgrade mode" +#: utils/cache/relcache.c:3801 +#, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" -msgstr "el valor de OID de pg_enum no se definió en modo de actualización binaria" +msgstr "el valor de relfilenumber de heap no se definió en modo de actualización binaria" -#: utils/cache/relcache.c:3748 -#, fuzzy, c-format -#| msgid "must be superuser to connect in binary upgrade mode" +#: utils/cache/relcache.c:3809 +#, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" -msgstr "debe ser superusuario para conectarse en modo de actualización binaria" +msgstr "petición inesperada de un nuevo relfilenode en modo de actualización binaria" -#: utils/cache/relcache.c:6488 +#: utils/cache/relcache.c:6539 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "no se pudo crear el archivo de cache de catálogos de sistema «%s»: %m" -#: utils/cache/relcache.c:6490 +#: utils/cache/relcache.c:6541 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Prosiguiendo de todas maneras, pero hay algo mal." -#: utils/cache/relcache.c:6812 +#: utils/cache/relcache.c:6871 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "no se pudo eliminar el archivo de cache «%s»: %m" @@ -26476,17 +27290,17 @@ msgstr "no se pudo eliminar el archivo de cache «%s»: %m" msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "no se puede hacer PREPARE de una transacción que ha modificado el mapeo de relaciones" -#: utils/cache/relmapper.c:850 +#: utils/cache/relmapper.c:852 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "el archivo de mapeo de relaciones «%s» contiene datos no válidos" -#: utils/cache/relmapper.c:860 +#: utils/cache/relmapper.c:862 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "el archivo de mapeo de relaciones «%s» tiene una suma de verificación incorrecta" -#: utils/cache/typcache.c:1803 utils/fmgr/funcapi.c:566 +#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "el tipo record no ha sido registrado" @@ -26499,104 +27313,104 @@ msgstr "TRAP: ExceptionalCondition: argumentos erróneos en PID %d\n" #: utils/error/assert.c:40 #, c-format msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" -msgstr "" +msgstr "TRAP: falló Assert(«%s»), Archivo «%s», Línea %d, PID %d\n" -#: utils/error/elog.c:416 +#: utils/error/elog.c:415 #, c-format msgid "error occurred before error message processing is available\n" msgstr "ocurrió un error antes de que el procesamiento de errores esté disponible\n" -#: utils/error/elog.c:2092 +#: utils/error/elog.c:2134 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "no se pudo reabrir «%s» para error estándar: %m" -#: utils/error/elog.c:2105 +#: utils/error/elog.c:2147 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "no se pudo reabrir «%s» para usar como salida estándar: %m" -#: utils/error/elog.c:2141 +#: utils/error/elog.c:2183 #, c-format -msgid "invalid character" -msgstr "carácter no válido" +msgid "Invalid character" +msgstr "Carácter no válido" -#: utils/error/elog.c:2847 utils/error/elog.c:2874 utils/error/elog.c:2890 +#: utils/error/elog.c:2889 utils/error/elog.c:2916 utils/error/elog.c:2932 msgid "[unknown]" msgstr "[desconocido]" -#: utils/error/elog.c:3163 utils/error/elog.c:3484 utils/error/elog.c:3591 +#: utils/error/elog.c:3202 utils/error/elog.c:3526 utils/error/elog.c:3633 msgid "missing error text" msgstr "falta un texto de mensaje de error" -#: utils/error/elog.c:3166 utils/error/elog.c:3169 +#: utils/error/elog.c:3205 utils/error/elog.c:3208 #, c-format msgid " at character %d" msgstr " en carácter %d" -#: utils/error/elog.c:3179 utils/error/elog.c:3186 +#: utils/error/elog.c:3218 utils/error/elog.c:3225 msgid "DETAIL: " msgstr "DETALLE: " -#: utils/error/elog.c:3193 +#: utils/error/elog.c:3232 msgid "HINT: " msgstr "HINT: " -#: utils/error/elog.c:3200 +#: utils/error/elog.c:3239 msgid "QUERY: " msgstr "CONSULTA: " -#: utils/error/elog.c:3207 +#: utils/error/elog.c:3246 msgid "CONTEXT: " msgstr "CONTEXTO: " -#: utils/error/elog.c:3217 +#: utils/error/elog.c:3256 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "UBICACIÓN: %s, %s:%d\n" -#: utils/error/elog.c:3224 +#: utils/error/elog.c:3263 #, c-format msgid "LOCATION: %s:%d\n" msgstr "UBICACIÓN: %s:%d\n" -#: utils/error/elog.c:3231 +#: utils/error/elog.c:3270 msgid "BACKTRACE: " msgstr "BACKTRACE: " -#: utils/error/elog.c:3243 +#: utils/error/elog.c:3282 msgid "STATEMENT: " msgstr "SENTENCIA: " -#: utils/error/elog.c:3636 +#: utils/error/elog.c:3678 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3640 +#: utils/error/elog.c:3682 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3643 +#: utils/error/elog.c:3685 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3646 +#: utils/error/elog.c:3688 msgid "NOTICE" msgstr "NOTICE" -#: utils/error/elog.c:3650 +#: utils/error/elog.c:3692 msgid "WARNING" msgstr "WARNING" -#: utils/error/elog.c:3653 +#: utils/error/elog.c:3695 msgid "ERROR" msgstr "ERROR" -#: utils/error/elog.c:3656 +#: utils/error/elog.c:3698 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3659 +#: utils/error/elog.c:3701 msgid "PANIC" msgstr "PANIC" @@ -26631,16 +27445,14 @@ msgid "Server is version %d, library is version %s." msgstr "Versión del servidor %d, versión de biblioteca %s." #: utils/fmgr/dfmgr.c:341 -#, fuzzy, c-format -#| msgid "incompatible library \"%s\": version mismatch" +#, c-format msgid "incompatible library \"%s\": ABI mismatch" -msgstr "biblioteca «%s» incompatible: versión no coincide" +msgstr "biblioteca «%s» incompatible: ABI no coincide" #: utils/fmgr/dfmgr.c:343 -#, fuzzy, c-format -#| msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." +#, c-format msgid "Server has ABI \"%s\", library has \"%s\"." -msgstr "El servidor tiene FLOAT8PASSBYVAL = %s, la librería tiene %s" +msgstr "El servidor tiene ABI «%s», la librería tiene «%s»." #: utils/fmgr/dfmgr.c:361 #, c-format @@ -26671,22 +27483,22 @@ msgstr "El bloque mágico tiene un largo inesperado, o una diferencia de relleno msgid "incompatible library \"%s\": magic block mismatch" msgstr "biblioteca «%s» incompatible: bloque mágico no coincide" -#: utils/fmgr/dfmgr.c:492 +#: utils/fmgr/dfmgr.c:475 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "no está permitido el acceso a la biblioteca «%s»" -#: utils/fmgr/dfmgr.c:518 +#: utils/fmgr/dfmgr.c:501 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "el nombre de macro no es válido en la ruta a biblioteca dinámica: %s" -#: utils/fmgr/dfmgr.c:558 +#: utils/fmgr/dfmgr.c:541 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "se encontró componente de largo cero en el parámetro «dynamic_library_path»" -#: utils/fmgr/dfmgr.c:577 +#: utils/fmgr/dfmgr.c:560 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "un componente en el parámetro «dynamic_library_path» no es una ruta absoluta" @@ -26711,223 +27523,213 @@ msgstr "Funciones invocables desde SQL necesitan PG_FUNCTION_INFO_V1(función) q msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "la versión de API %d no reconocida fue reportada por la función «%s»" -#: utils/fmgr/fmgr.c:2080 +#: utils/fmgr/fmgr.c:2109 #, c-format msgid "operator class options info is absent in function call context" msgstr "la información de opciones de la clase de operadores está ausente en el contexto de llamada a función" -#: utils/fmgr/fmgr.c:2147 +#: utils/fmgr/fmgr.c:2176 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "función de validación de lenguaje %u invocada para el lenguaje %u en lugar de %u" -#: utils/fmgr/funcapi.c:489 +#: utils/fmgr/funcapi.c:496 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "no se pudo determinar el tipo verdadero de resultado para la función «%s» declarada retornando tipo %s" -#: utils/fmgr/funcapi.c:634 +#: utils/fmgr/funcapi.c:642 #, c-format msgid "argument declared %s does not contain a range type but type %s" msgstr "el argumento declarado %s no contiene un tipo de rango sino tipo %s" -#: utils/fmgr/funcapi.c:717 -#, c-format -msgid "could not find multirange type for data type %s" -msgstr "no se pudo encontrar un tipo de multirango para el tipo de dato %s" - -#: utils/fmgr/funcapi.c:1921 utils/fmgr/funcapi.c:1953 +#: utils/fmgr/funcapi.c:1929 utils/fmgr/funcapi.c:1961 #, c-format msgid "number of aliases does not match number of columns" msgstr "el número de aliases no coincide con el número de columnas" -#: utils/fmgr/funcapi.c:1947 +#: utils/fmgr/funcapi.c:1955 #, c-format msgid "no column alias was provided" msgstr "no se entregó alias de columna" -#: utils/fmgr/funcapi.c:1971 +#: utils/fmgr/funcapi.c:1979 #, c-format msgid "could not determine row description for function returning record" msgstr "no se pudo encontrar descripción de registro de función que retorna record" -#: utils/init/miscinit.c:347 +#: utils/init/miscinit.c:353 #, c-format msgid "data directory \"%s\" does not exist" msgstr "no existe el directorio de datos «%s»" -#: utils/init/miscinit.c:352 +#: utils/init/miscinit.c:358 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "no se pudo obtener los permisos del directorio «%s»: %m" -#: utils/init/miscinit.c:360 +#: utils/init/miscinit.c:366 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "el directorio de datos especificado «%s» no es un directorio" -#: utils/init/miscinit.c:376 +#: utils/init/miscinit.c:382 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "el directorio de datos «%s» tiene dueño equivocado" -#: utils/init/miscinit.c:378 +#: utils/init/miscinit.c:384 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "El servidor debe ser iniciado por el usuario dueño del directorio de datos." -#: utils/init/miscinit.c:396 +#: utils/init/miscinit.c:402 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "el directorio de datos «%s» tiene permisos no válidos" -#: utils/init/miscinit.c:398 +#: utils/init/miscinit.c:404 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Los permisos deberían ser u=rwx (0700) o u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:456 +#: utils/init/miscinit.c:462 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: utils/init/miscinit.c:693 utils/misc/guc.c:3548 +#: utils/init/miscinit.c:720 utils/misc/guc.c:3650 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "no se puede definir el parámetro «%s» dentro de una operación restringida por seguridad" -#: utils/init/miscinit.c:765 +#: utils/init/miscinit.c:807 #, c-format msgid "role with OID %u does not exist" msgstr "no existe el rol con OID %u" -#: utils/init/miscinit.c:795 +#: utils/init/miscinit.c:853 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "al rol «%s» no se le permite conectarse" -#: utils/init/miscinit.c:813 +#: utils/init/miscinit.c:874 #, c-format msgid "too many connections for role \"%s\"" msgstr "demasiadas conexiones para el rol «%s»" -#: utils/init/miscinit.c:912 -#, c-format -msgid "permission denied to set session authorization" -msgstr "se ha denegado el permiso para cambiar el usuario actual" - -#: utils/init/miscinit.c:995 +#: utils/init/miscinit.c:1045 #, c-format msgid "invalid role OID: %u" msgstr "el OID de rol no es válido: %u" -#: utils/init/miscinit.c:1142 +#: utils/init/miscinit.c:1192 #, c-format msgid "database system is shut down" msgstr "el sistema de bases de datos está apagado" -#: utils/init/miscinit.c:1229 +#: utils/init/miscinit.c:1279 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "no se pudo crear el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1243 +#: utils/init/miscinit.c:1293 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "no se pudo abrir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1250 +#: utils/init/miscinit.c:1300 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "no se pudo leer el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1309 #, c-format msgid "lock file \"%s\" is empty" msgstr "el archivo de bloqueo «%s» está vacío" -#: utils/init/miscinit.c:1260 +#: 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 "Otro proceso servidor está iniciándose, o el archivo de bloqueo es remanente de una caída durante un inicio anterior." -#: utils/init/miscinit.c:1304 +#: utils/init/miscinit.c:1354 #, c-format msgid "lock file \"%s\" already exists" msgstr "el archivo de bloqueo «%s» ya existe" -#: utils/init/miscinit.c:1308 +#: utils/init/miscinit.c:1358 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "¿Hay otro postgres (PID %d) en ejecución en el directorio de datos «%s»?" -#: utils/init/miscinit.c:1310 +#: utils/init/miscinit.c:1360 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "¿Hay otro postmaster (PID %d) en ejecución en el directorio de datos «%s»?" -#: utils/init/miscinit.c:1313 +#: utils/init/miscinit.c:1363 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "¿Hay otro postgres (PID %d) usando el socket «%s»?" -#: utils/init/miscinit.c:1315 +#: utils/init/miscinit.c:1365 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "¿Hay otro postmaster (PID %d) usando el socket «%s»?" -#: utils/init/miscinit.c:1366 +#: utils/init/miscinit.c:1416 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "no se pudo eliminar el archivo de bloqueo antiguo «%s»: %m" -#: utils/init/miscinit.c:1368 +#: 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 "El archivo parece accidentalmente abandonado, pero no pudo ser eliminado. Por favor elimine el archivo manualmente e intente nuevamente." -#: utils/init/miscinit.c:1405 utils/init/miscinit.c:1419 -#: utils/init/miscinit.c:1430 +#: 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 "no se pudo escribir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1541 utils/init/miscinit.c:1683 utils/misc/guc.c:5580 +#: 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 "no se pudo leer el archivo «%s»: %m" -#: utils/init/miscinit.c:1671 +#: utils/init/miscinit.c:1721 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "no se pudo abrir el archivo «%s»: %m; continuando de todas formas" -#: utils/init/miscinit.c:1696 +#: utils/init/miscinit.c:1746 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "el archivo de bloqueo «%s» tiene un PID erróneo: %ld en lugar de %ld" -#: utils/init/miscinit.c:1735 utils/init/miscinit.c:1751 +#: utils/init/miscinit.c:1785 utils/init/miscinit.c:1801 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "«%s» no es un directorio de datos válido" -#: utils/init/miscinit.c:1737 +#: utils/init/miscinit.c:1787 #, c-format msgid "File \"%s\" is missing." msgstr "Falta el archivo «%s»." -#: utils/init/miscinit.c:1753 +#: utils/init/miscinit.c:1803 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "El archivo «%s» no contiene datos válidos." -#: utils/init/miscinit.c:1755 +#: utils/init/miscinit.c:1805 #, c-format msgid "You might need to initdb." msgstr "Puede ser necesario ejecutar initdb." -#: utils/init/miscinit.c:1763 +#: 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 "El directorio de datos fue inicializado por PostgreSQL versión %s, que no es compatible con esta versión %s." @@ -26960,7 +27762,7 @@ msgstr " SSL habilitado (protocolo=%s, cifrado=%s, bits=%d)" #: utils/init/postinit.c:285 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, delegated_credentials=%s, principal=%s)" -msgstr "" +msgstr " GSS (autenticado=%s, cifrado=%s, delegado_credenciales=%s, principal=%s)" #: utils/init/postinit.c:286 utils/init/postinit.c:287 #: utils/init/postinit.c:288 utils/init/postinit.c:293 @@ -26977,7 +27779,7 @@ msgstr "sí" #: utils/init/postinit.c:292 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, delegated_credentials=%s)" -msgstr "" +msgstr " GSS (autenticado=%s, cifrado=%s, delegado_credentiales=%s)" #: utils/init/postinit.c:333 #, c-format @@ -27004,106 +27806,105 @@ msgstr "permiso denegado a la base de datos «%s»" msgid "User does not have CONNECT privilege." msgstr "Usuario no tiene privilegios de conexión." -#: utils/init/postinit.c:386 +#: utils/init/postinit.c:389 #, c-format msgid "too many connections for database \"%s\"" msgstr "demasiadas conexiones para la base de datos «%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 "la configuración regional es incompatible con el sistema operativo" -#: 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 "La base de datos fue inicializada con LC_COLLATE «%s», el cual no es reconocido por 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 "Recree la base de datos con otra configuración regional, o instale la configuración regional faltante." -#: 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 "La base de datos fue inicializada con LC_CTYPE «%s», el cual no es reconocido por setlocale()." -#: utils/init/postinit.c:475 -#, fuzzy, c-format -#| msgid "collation \"%s\" has version mismatch" +#: utils/init/postinit.c:493 +#, c-format msgid "database \"%s\" has a collation version mismatch" -msgstr "el ordenamiento (collation) «%s» tiene una discordancia de versión" +msgstr "la base de datos «%s» tiene una discordancia de versión de ordenamiento (“collation”)" -#: utils/init/postinit.c:477 -#, fuzzy, c-format -#| msgid "The collation in the database was created using version %s, but the operating system provides version %s." +#: utils/init/postinit.c:495 +#, c-format msgid "The database was created using collation version %s, but the operating system provides version %s." -msgstr "El ordenamiento en la base de datos fue creado usando la versión %s, pero el sistema operativo provee la versión %s." +msgstr "La base de datos fue creada usando la versión de ordenamiento %s, pero el sistema operativo provee la versión %s." -#: utils/init/postinit.c:480 -#, fuzzy, 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." +#: 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 "Reconstruya todos los objetos afectados por este ordenamiento y ejecute ALTER COLLATION %s REFRESH VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." +msgstr "Reconstruya todos los objetos en esta base de datos que usen el ordenamiento por omisión y ejecute ALTER DATABASE %s REFRESH COLLATION VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." -#: utils/init/postinit.c:895 +#: utils/init/postinit.c:904 #, c-format msgid "no roles are defined in this database system" msgstr "no hay roles definidos en esta base de datos" -#: utils/init/postinit.c:896 +#: utils/init/postinit.c:905 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Debería ejecutar imediatamente CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:932 +#: utils/init/postinit.c:942 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "debe ser superusuario para conectarse en modo de actualización binaria" -#: utils/init/postinit.c:953 -#, fuzzy, c-format -#| msgid "terminating connection because of crash of another server process" -msgid "remaining connection slots are reserved for roles with %s" -msgstr "terminando la conexión debido a una falla en otro proceso servidor" +#: utils/init/postinit.c:962 +#, c-format +msgid "remaining connection slots are reserved for roles with the %s attribute" +msgstr "las conexiones restantes están reservadas a roles con el atributo %s" -#: utils/init/postinit.c:959 +#: utils/init/postinit.c:968 #, c-format msgid "remaining connection slots are reserved for roles with privileges of the \"%s\" role" -msgstr "" +msgstr "las conexiones restantes están reservadas a roles con privilegios del rol «%s»" -#: utils/init/postinit.c:971 -#, fuzzy, c-format -#| msgid "permission denied to rename role" +#: utils/init/postinit.c:980 +#, c-format msgid "permission denied to start WAL sender" -msgstr "se ha denegado el permiso para cambiar el nombre al rol" +msgstr "se ha denegado el permiso para iniciar “WAL sender”" -#: utils/init/postinit.c:972 +#: utils/init/postinit.c:981 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." -msgstr "" +msgstr "Sólo roles con el atributo %s pueden iniciar un proceso “WAL sender”." + +#: utils/init/postinit.c:1099 +#, c-format +msgid "It seems to have just been dropped or renamed." +msgstr "Parece haber sido eliminada o renombrada." -#: utils/init/postinit.c:1042 +#: utils/init/postinit.c:1103 #, c-format msgid "database %u does not exist" msgstr "no existe la base de datos %u" -#: utils/init/postinit.c:1131 +#: utils/init/postinit.c:1112 #, c-format -msgid "It seems to have just been dropped or renamed." -msgstr "Parece haber sido eliminada o renombrada." +msgid "cannot connect to invalid database \"%s\"" +msgstr "no se puede conectar a la base de datos no válida «%s»" -#: utils/init/postinit.c:1149 +#: utils/init/postinit.c:1173 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Falta el subdirectorio de base de datos «%s»." #: utils/init/usercontext.c:43 -#, fuzzy, c-format -#| msgid "\"%s\" cannot be higher than \"%s\"" +#, c-format msgid "role \"%s\" cannot SET ROLE to \"%s\"" -msgstr "«%s» no puede ser más alto que «%s»" +msgstr "el rol «%s» no puede hacer SET ROLE a «%s»" #: utils/mb/conv.c:522 utils/mb/conv.c:733 #, c-format @@ -27122,53 +27923,48 @@ msgstr "ID de codificación %d inesperado para juegos de caracteres ISO 8859" msgid "unexpected encoding ID %d for WIN character sets" msgstr "ID de codificación %d inesperado para juegos de caracteres WIN" -#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "la conversión entre %s y %s no está soportada" -#: utils/mb/mbutils.c:386 -#, c-format -msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" -msgstr "no existe el procedimiento por omisión de conversión desde la codificación «%s» a «%s»" - -#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 -#: utils/mb/mbutils.c:843 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "La cadena de %d bytes es demasiado larga para la recodificación." -#: utils/mb/mbutils.c:569 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "la codificación de origen «%s» no es válida" -#: utils/mb/mbutils.c:574 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "la codificación de destino «%s» no es válida" -#: utils/mb/mbutils.c:714 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "byte no válido para codificación «%s»: 0x%02x" -#: utils/mb/mbutils.c:878 +#: utils/mb/mbutils.c:877 #, c-format msgid "invalid Unicode code point" msgstr "punto de código Unicode no válido" -#: utils/mb/mbutils.c:1204 +#: utils/mb/mbutils.c:1201 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset falló" -#: utils/mb/mbutils.c:1725 +#: utils/mb/mbutils.c:1718 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "secuencia de bytes no válida para codificación «%s»: %s" -#: utils/mb/mbutils.c:1758 +#: utils/mb/mbutils.c:1751 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "carácter con secuencia de bytes %s en codificación «%s» no tiene equivalente en la codificación «%s»" @@ -27183,83 +27979,82 @@ msgstr "nombre de directorio de configuración vacío: «%s»" msgid "could not open configuration directory \"%s\": %m" msgstr "no se pudo abrir el directorio de configuración «%s»: %m" -#: utils/misc/guc.c:115 +#: utils/misc/guc.c:122 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Unidades válidas para este parámetro son «B», «kB», «MB», «GB» y «TB»." -#: utils/misc/guc.c:152 +#: utils/misc/guc.c:159 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Unidades válidas son para este parámetro son «us», «ms», «s», «min», «h» y «d»." -#: utils/misc/guc.c:421 +#: utils/misc/guc.c:430 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "parámetro de configuración «%s» no reconocido en el archivo «%s» línea %d" -#: utils/misc/guc.c:461 utils/misc/guc.c:3406 utils/misc/guc.c:3646 -#: utils/misc/guc.c:3744 utils/misc/guc.c:3842 utils/misc/guc.c:3966 -#: utils/misc/guc.c:4069 +#: 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 "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" -#: utils/misc/guc.c:497 +#: utils/misc/guc.c:506 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "parámetro «%s» eliminado del archivo de configuración, volviendo al valor por omisión" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:571 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "el parámetro «%s» fue cambiado a «%s»" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:613 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "el archivo de configuración «%s» contiene errores" -#: utils/misc/guc.c:609 +#: utils/misc/guc.c:618 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "el archivo de configuración «%s» contiene errores; los cambios no afectados fueron aplicados" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:623 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "el archivo de configuración «%s» contiene errores; no se aplicó ningún cambio" -#: utils/misc/guc.c:1211 utils/misc/guc.c:1227 +#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "nombre de parámetro de configuración «%s» no válido" -#: utils/misc/guc.c:1213 +#: utils/misc/guc.c:1141 #, c-format msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "Los nombres de los parámetros personalizados deben ser dos o más identificadores sencillos separados por puntos." -#: utils/misc/guc.c:1229 -#, fuzzy, c-format -#| msgid "\"%s\" is a procedure." +#: utils/misc/guc.c:1157 +#, c-format msgid "\"%s\" is a reserved prefix." -msgstr "«%s» es un índice parcial." +msgstr "«%s» es un prefijo reservado." -#: utils/misc/guc.c:1243 +#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "parámetro de configuración «%s» no reconocido" -#: utils/misc/guc.c:1765 +#: utils/misc/guc.c:1802 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: no se pudo acceder al directorio «%s»: %m\n" -#: utils/misc/guc.c:1770 +#: utils/misc/guc.c:1806 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Ejecute initdb o pg_basebackup para inicializar un directorio de datos de PostgreSQL.\n" -#: utils/misc/guc.c:1794 +#: utils/misc/guc.c:1830 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -27268,12 +28063,12 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración del servidor.\n" "Debe especificar la opción --config-file o -D o definir la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:1817 +#: utils/misc/guc.c:1853 #, c-format -msgid "%s: could not access the server configuration file \"%s\": %s\n" -msgstr "%s: no se pudo acceder al archivo de configuración «%s»: %s\n" +msgid "%s: could not access the server configuration file \"%s\": %m\n" +msgstr "%s: no se pudo acceder al archivo de configuración «%s»: %m\n" -#: utils/misc/guc.c:1845 +#: utils/misc/guc.c:1881 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27282,7 +28077,7 @@ msgstr "" "%s no sabe dónde encontrar los archivos de sistema de la base de datos.\n" "Esto puede especificarse como «data_directory» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1933 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -27291,7 +28086,7 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «hba».\n" "Esto puede especificarse como «hba_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:1928 +#: utils/misc/guc.c:1964 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -27300,127 +28095,131 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «ident».\n" "Esto puede especificarse como «ident_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:2894 +#: utils/misc/guc.c:2943 msgid "Value exceeds integer range." msgstr "El valor excede el rango para enteros." -#: utils/misc/guc.c:3130 +#: utils/misc/guc.c:3185 #, c-format -msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" -msgstr "%d%s%s está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" +msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" +msgstr "%d%s%s está fuera del rango aceptable para el parámetro «%s» (%d%s%s .. %d%s%s)" -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3226 #, c-format -msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" -msgstr "%g%s%s está fuera del rango aceptable para el parámetro «%s» (%g .. %g)" +msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g%s%s .. %g%s%s)" +msgstr "%g%s%s está fuera del rango aceptable para el parámetro «%s» (%g%s%s .. %g%s%s)" -#: utils/misc/guc.c:3366 utils/misc/guc_funcs.c:54 +#: utils/misc/guc.c:3465 #, c-format -msgid "cannot set parameters during a parallel operation" -msgstr "no se puede definir parámetros durante una operación paralela" +msgid "parameter \"%s\" cannot be set during a parallel operation" +msgstr "no se puede establecer el parámetro «%s» durante una operación paralela" -#: utils/misc/guc.c:3383 utils/misc/guc.c:4530 +#: utils/misc/guc.c:3481 utils/misc/guc.c:4696 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "no se puede cambiar el parámetro «%s»" -#: utils/misc/guc.c:3416 +#: utils/misc/guc.c:3514 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "el parámetro «%s» no se puede cambiar en este momento" -#: utils/misc/guc.c:3443 utils/misc/guc.c:3501 utils/misc/guc.c:4506 -#: utils/misc/guc.c:6546 +#: 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 "se ha denegado el permiso para cambiar la opción «%s»" -#: utils/misc/guc.c:3481 +#: utils/misc/guc.c:3583 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" -#: utils/misc/guc.c:3540 +#: utils/misc/guc.c:3642 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "no se puede definir el parámetro «%s» dentro una función security-definer" -#: utils/misc/guc.c:3561 -#, fuzzy, c-format -#| msgid "parameter \"%s\" could not be set" +#: utils/misc/guc.c:3663 +#, c-format msgid "parameter \"%s\" cannot be reset" -msgstr "no se pudo cambiar el parámetro «%s»" +msgstr "el parámetro «%s» no puede ser reseteado" -#: utils/misc/guc.c:3568 -#, fuzzy, c-format -#| msgid "parameter \"%s\" cannot be set after connection start" +#: utils/misc/guc.c:3670 +#, c-format msgid "parameter \"%s\" cannot be set locally in functions" -msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" +msgstr "el parámetro «%s» no se puede cambiar localmente en funciones" -#: utils/misc/guc.c:4212 utils/misc/guc.c:4259 utils/misc/guc.c:5266 -#, fuzzy, c-format -#| msgid "permission denied to create \"%s.%s\"" +#: utils/misc/guc.c:4370 utils/misc/guc.c:4418 utils/misc/guc.c:5450 +#, c-format msgid "permission denied to examine \"%s\"" -msgstr "se ha denegado el permiso para crear «%s.%s»" +msgstr "se ha denegado el permiso a examinar «%s»" -#: utils/misc/guc.c:4213 utils/misc/guc.c:4260 utils/misc/guc.c:5267 +#: 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 "" +msgstr "Sólo roles con privilegios del rol «%s» pueden examinar este parámetro." + +#: utils/misc/guc.c:4629 +#, c-format +msgid "ALTER SYSTEM is not allowed in this environment" +msgstr "ALTER SYSTEM no está permitido en este ambiente" -#: utils/misc/guc.c:4496 -#, fuzzy, c-format -#| msgid "permission denied for operator %s" +#: utils/misc/guc.c:4661 +#, c-format msgid "permission denied to perform ALTER SYSTEM RESET ALL" -msgstr "permiso denegado al operador %s" +msgstr "permiso denegado a ejecutar ALTER SYSTEM RESET ALL" -#: utils/misc/guc.c:4562 +#: utils/misc/guc.c:4740 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "los valores de parámetros para ALTER SYSTEM no deben contener saltos de línea" -#: utils/misc/guc.c:4608 +#: utils/misc/guc.c:4785 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "no se pudo interpretar el contenido del archivo «%s»" -#: utils/misc/guc.c:4790 +#: utils/misc/guc.c:4967 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "intento de cambiar la opción «%s»" -#: utils/misc/guc.c:5129 -#, fuzzy, c-format -#| msgid "invalid configuration parameter name \"%s\"" +#: utils/misc/guc.c:5306 +#, c-format msgid "invalid configuration parameter name \"%s\", removing it" -msgstr "nombre de parámetro de configuración «%s» no válido" +msgstr "nombre de parámetro de configuración «%s» no válido, eliminándolo" -#: utils/misc/guc.c:5131 -#, fuzzy, c-format -#| msgid "\"%s\" is not a sequence" +#: utils/misc/guc.c:5308 +#, c-format msgid "\"%s\" is now a reserved prefix." -msgstr "«%s» no es una secuencia" +msgstr "«%s» es ahora un prefijo reservado." -#: utils/misc/guc.c:6000 +#: utils/misc/guc.c:6179 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "al establecer el parámetro «%s» a «%s»" -#: utils/misc/guc.c:6169 +#: utils/misc/guc.c:6348 #, c-format msgid "parameter \"%s\" could not be set" msgstr "no se pudo cambiar el parámetro «%s»" -#: utils/misc/guc.c:6259 +#: utils/misc/guc.c:6438 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "no se pudo interpretar el valor de para el parámetro «%s»" -#: utils/misc/guc.c:6678 +#: utils/misc/guc.c:6888 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valor no válido para el parámetro «%s»: %g" +#: utils/misc/guc_funcs.c:54 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "no se puede definir parámetros durante una operación paralela" + #: utils/misc/guc_funcs.c:130 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" @@ -27436,41 +28235,39 @@ msgstr "SET %s lleva sólo un argumento" msgid "SET requires parameter name" msgstr "SET requiere el nombre de un parámetro" -#: utils/misc/guc_tables.c:667 +#: utils/misc/guc_tables.c:676 msgid "Ungrouped" msgstr "Sin Grupo" -#: utils/misc/guc_tables.c:669 +#: utils/misc/guc_tables.c:677 msgid "File Locations" msgstr "Ubicaciones de Archivos" -#: utils/misc/guc_tables.c:671 +#: utils/misc/guc_tables.c:678 msgid "Connections and Authentication / Connection Settings" msgstr "Conexiones y Autentificación / Parámetros de Conexión" -#: utils/misc/guc_tables.c:673 -#, fuzzy -#| msgid "Connections and Authentication / Connection Settings" +#: utils/misc/guc_tables.c:679 msgid "Connections and Authentication / TCP Settings" -msgstr "Conexiones y Autentificación / Parámetros de Conexión" +msgstr "Conexiones y Autentificación / Parámetros TCP" -#: utils/misc/guc_tables.c:675 +#: utils/misc/guc_tables.c:680 msgid "Connections and Authentication / Authentication" msgstr "Conexiones y Autentificación / Autentificación" -#: utils/misc/guc_tables.c:677 +#: utils/misc/guc_tables.c:681 msgid "Connections and Authentication / SSL" msgstr "Conexiones y Autentificación / SSL" -#: utils/misc/guc_tables.c:679 +#: utils/misc/guc_tables.c:682 msgid "Resource Usage / Memory" msgstr "Uso de Recursos / Memoria" -#: utils/misc/guc_tables.c:681 +#: utils/misc/guc_tables.c:683 msgid "Resource Usage / Disk" msgstr "Uso de Recursos / Disco" -#: utils/misc/guc_tables.c:683 +#: utils/misc/guc_tables.c:684 msgid "Resource Usage / Kernel Resources" msgstr "Uso de Recursos / Recursos del Kernel" @@ -27478,1985 +28275,2032 @@ msgstr "Uso de Recursos / Recursos del Kernel" msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Uso de Recursos / Retardo de Vacuum por Costos" -#: utils/misc/guc_tables.c:687 +#: utils/misc/guc_tables.c:686 msgid "Resource Usage / Background Writer" msgstr "Uso de Recursos / Escritor en Segundo Plano" -#: utils/misc/guc_tables.c:689 +#: utils/misc/guc_tables.c:687 msgid "Resource Usage / Asynchronous Behavior" msgstr "Uso de Recursos / Comportamiento Asíncrono" -#: utils/misc/guc_tables.c:691 +#: utils/misc/guc_tables.c:688 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Configuraciones" -#: utils/misc/guc_tables.c:693 +#: utils/misc/guc_tables.c:689 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Puntos de Control (Checkpoints)" -#: utils/misc/guc_tables.c:695 +#: utils/misc/guc_tables.c:690 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivado" -#: utils/misc/guc_tables.c:697 -#, fuzzy -#| msgid "Write-Ahead Log / Recovery Target" +#: utils/misc/guc_tables.c:691 msgid "Write-Ahead Log / Recovery" -msgstr "Write-Ahead Log / Destino de Recuperación" +msgstr "Write-Ahead Log / Recuperación" -#: utils/misc/guc_tables.c:699 +#: utils/misc/guc_tables.c:692 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Recuperación desde Archivo" -#: utils/misc/guc_tables.c:701 +#: utils/misc/guc_tables.c:693 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Destino de Recuperación" -#: utils/misc/guc_tables.c:703 +#: utils/misc/guc_tables.c:694 +msgid "Write-Ahead Log / Summarization" +msgstr "Write-Ahead Log / Sumarización" + +#: utils/misc/guc_tables.c:695 msgid "Replication / Sending Servers" msgstr "Replicación / Servidores de Envío" -#: utils/misc/guc_tables.c:705 +#: utils/misc/guc_tables.c:696 msgid "Replication / Primary Server" msgstr "Replicación / Servidor Primario" -#: utils/misc/guc_tables.c:707 +#: utils/misc/guc_tables.c:697 msgid "Replication / Standby Servers" msgstr "Replicación / Servidores Standby" -#: utils/misc/guc_tables.c:709 +#: utils/misc/guc_tables.c:698 msgid "Replication / Subscribers" msgstr "Replicación / Suscriptores" -#: utils/misc/guc_tables.c:711 +#: utils/misc/guc_tables.c:699 msgid "Query Tuning / Planner Method Configuration" msgstr "Afinamiento de Consultas / Configuración de Métodos del Planner" -#: utils/misc/guc_tables.c:713 +#: utils/misc/guc_tables.c:700 msgid "Query Tuning / Planner Cost Constants" msgstr "Afinamiento de Consultas / Constantes de Costo del Planner" -#: utils/misc/guc_tables.c:715 +#: utils/misc/guc_tables.c:701 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Afinamiento de Consultas / Optimizador Genético de Consultas" -#: utils/misc/guc_tables.c:717 +#: utils/misc/guc_tables.c:702 msgid "Query Tuning / Other Planner Options" msgstr "Afinamiento de Consultas / Otras Opciones del Planner" -#: utils/misc/guc_tables.c:719 +#: utils/misc/guc_tables.c:703 msgid "Reporting and Logging / Where to Log" msgstr "Reporte y Registro / Dónde Registrar" -#: utils/misc/guc_tables.c:721 +#: utils/misc/guc_tables.c:704 msgid "Reporting and Logging / When to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc_tables.c:723 +#: utils/misc/guc_tables.c:705 msgid "Reporting and Logging / What to Log" msgstr "Reporte y Registro / Qué Registrar" -#: utils/misc/guc_tables.c:725 +#: utils/misc/guc_tables.c:706 msgid "Reporting and Logging / Process Title" msgstr "Reporte y Registro / Título del Proceso" -#: utils/misc/guc_tables.c:727 +#: utils/misc/guc_tables.c:707 msgid "Statistics / Monitoring" msgstr "Estadísticas / Monitoreo" -#: utils/misc/guc_tables.c:729 +#: utils/misc/guc_tables.c:708 msgid "Statistics / Cumulative Query and Index Statistics" -msgstr "" +msgstr "Estadísticas / Acumuladores de Consultas e Índices" -#: utils/misc/guc_tables.c:731 +#: utils/misc/guc_tables.c:709 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc_tables.c:733 +#: utils/misc/guc_tables.c:710 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valores por Omisión de Conexiones / Comportamiento de Sentencias" -#: utils/misc/guc_tables.c:735 +#: utils/misc/guc_tables.c:711 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valores por Omisión de Conexiones / Configuraciones Regionales y Formateo" -#: utils/misc/guc_tables.c:737 +#: utils/misc/guc_tables.c:712 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valores por Omisión de Conexiones / Precargado de Bibliotecas Compartidas" -#: utils/misc/guc_tables.c:739 +#: utils/misc/guc_tables.c:713 msgid "Client Connection Defaults / Other Defaults" msgstr "Valores por Omisión de Conexiones / Otros Valores" -#: utils/misc/guc_tables.c:741 +#: utils/misc/guc_tables.c:714 msgid "Lock Management" msgstr "Manejo de Bloqueos" -#: utils/misc/guc_tables.c:743 +#: utils/misc/guc_tables.c:715 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilidad de Versión y Plataforma / Versiones Anteriores de PostgreSQL" -#: utils/misc/guc_tables.c:745 +#: utils/misc/guc_tables.c:716 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilidad de Versión y Plataforma / Otras Plataformas y Clientes" -#: utils/misc/guc_tables.c:747 +#: utils/misc/guc_tables.c:717 msgid "Error Handling" msgstr "Gestión de Errores" -#: utils/misc/guc_tables.c:749 +#: utils/misc/guc_tables.c:718 msgid "Preset Options" msgstr "Opciones Predefinidas" -#: utils/misc/guc_tables.c:751 +#: utils/misc/guc_tables.c:719 msgid "Customized Options" msgstr "Opciones Personalizadas" -#: utils/misc/guc_tables.c:753 +#: utils/misc/guc_tables.c:720 msgid "Developer Options" msgstr "Opciones de Desarrollador" -#: utils/misc/guc_tables.c:810 +#: utils/misc/guc_tables.c:775 msgid "Enables the planner's use of sequential-scan plans." msgstr "Permitir el uso de planes de recorrido secuencial." -#: utils/misc/guc_tables.c:820 +#: utils/misc/guc_tables.c:785 msgid "Enables the planner's use of index-scan plans." msgstr "Permitir el uso de planes de recorrido de índice." -#: utils/misc/guc_tables.c:830 +#: utils/misc/guc_tables.c:795 msgid "Enables the planner's use of index-only-scan plans." msgstr "Permitir el uso de planes de recorrido de sólo-índice." -#: utils/misc/guc_tables.c:840 +#: utils/misc/guc_tables.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Permitir el uso de planes de recorrido de índice por mapas de bits." -#: utils/misc/guc_tables.c:850 +#: utils/misc/guc_tables.c:815 msgid "Enables the planner's use of TID scan plans." msgstr "Permitir el uso de planes de recorrido por TID." -#: utils/misc/guc_tables.c:860 +#: utils/misc/guc_tables.c:825 msgid "Enables the planner's use of explicit sort steps." msgstr "Permitir el uso de pasos explícitos de ordenamiento." -#: utils/misc/guc_tables.c:870 +#: utils/misc/guc_tables.c:835 msgid "Enables the planner's use of incremental sort steps." msgstr "Permitir el uso de pasos incrementales de ordenamiento." -#: utils/misc/guc_tables.c:880 +#: utils/misc/guc_tables.c:845 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Permitir el uso de planes de agregación a través de hash." -#: utils/misc/guc_tables.c:890 +#: utils/misc/guc_tables.c:855 msgid "Enables the planner's use of materialization." msgstr "Permitir el uso de materialización de planes." -#: utils/misc/guc_tables.c:900 +#: utils/misc/guc_tables.c:865 msgid "Enables the planner's use of memoization." msgstr "Permitir el uso de memoización de planes." -#: utils/misc/guc_tables.c:910 +#: utils/misc/guc_tables.c:875 msgid "Enables the planner's use of nested-loop join plans." msgstr "Permitir el uso de planes «nested-loop join»." -#: utils/misc/guc_tables.c:920 +#: utils/misc/guc_tables.c:885 msgid "Enables the planner's use of merge join plans." msgstr "Permitir el uso de planes «merge join»." -#: utils/misc/guc_tables.c:930 +#: utils/misc/guc_tables.c:895 msgid "Enables the planner's use of hash join plans." msgstr "Permitir el uso de planes «hash join»." -#: utils/misc/guc_tables.c:940 +#: utils/misc/guc_tables.c:905 msgid "Enables the planner's use of gather merge plans." msgstr "Permitir el uso de planes «gather merge»." -#: utils/misc/guc_tables.c:950 +#: utils/misc/guc_tables.c:915 msgid "Enables partitionwise join." msgstr "Permitir el uso de joins por particiones." -#: utils/misc/guc_tables.c:960 +#: utils/misc/guc_tables.c:925 msgid "Enables partitionwise aggregation and grouping." msgstr "Permitir el uso de agregación y agrupamiento por particiones." -#: utils/misc/guc_tables.c:970 +#: utils/misc/guc_tables.c:935 msgid "Enables the planner's use of parallel append plans." msgstr "Permitir el uso de planes «append» paralelos." -#: utils/misc/guc_tables.c:980 +#: utils/misc/guc_tables.c:945 msgid "Enables the planner's use of parallel hash plans." msgstr "Permitir el uso de planes «hash join» paralelos." -#: utils/misc/guc_tables.c:990 +#: utils/misc/guc_tables.c:955 msgid "Enables plan-time and execution-time partition pruning." msgstr "Permitir el uso de poda de particiones en tiempo de plan y ejecución." -#: utils/misc/guc_tables.c:991 +#: 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 "Permite al optimizador de consultas y al ejecutor a comparar bordes de particiones a condiciones en las consultas para determinar qué particiones deben recorrerse." -#: utils/misc/guc_tables.c:1002 -msgid "Enables the planner's ability to produce plans which provide presorted input for ORDER BY / DISTINCT aggregate functions." -msgstr "" +#: 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 "Activa la capacidad del optimizador de permitir planes que proveen entrada pre-ordenada para funciones de agregación ORDER BY / DISTINCT" -#: utils/misc/guc_tables.c:1005 -msgid "Allows the query planner to build plans which 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: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 "Permite al optimizador construir planes que proveen entrada pre-ordenada para funciones de agregación con una cláusula ORDER BY / DISTINCT. Cuando está desactivado, siempre se efectúan ordenamientos implícitos durante la ejecución." -#: utils/misc/guc_tables.c:1017 +#: utils/misc/guc_tables.c:982 msgid "Enables the planner's use of async append plans." msgstr "Permitir el uso de planes «append» asíncronos." -#: utils/misc/guc_tables.c:1027 +#: utils/misc/guc_tables.c:992 +msgid "Enables reordering of GROUP BY keys." +msgstr "Activa el reordenamiento de claves GROUP BY." + +#: utils/misc/guc_tables.c:1002 msgid "Enables genetic query optimization." msgstr "Permitir el uso del optimizador genético de consultas." -#: utils/misc/guc_tables.c:1028 +#: utils/misc/guc_tables.c:1003 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Este algoritmo intenta planear las consultas sin hacer búsqueda exhaustiva." -#: utils/misc/guc_tables.c:1039 +#: utils/misc/guc_tables.c:1017 msgid "Shows whether the current user is a superuser." msgstr "Indica si el usuario actual es superusuario." -#: utils/misc/guc_tables.c:1049 +#: utils/misc/guc_tables.c:1032 +msgid "Allows running the ALTER SYSTEM command." +msgstr "Permite ejecutar la orden ALTER SYSTEM." + +#: 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 "Puede desactivarse en ambientes donde los cambios globales de configuración deban hacerse usando un método diferente." + +#: utils/misc/guc_tables.c:1043 msgid "Enables advertising the server via Bonjour." msgstr "Permitir la publicación del servidor vía Bonjour." -#: utils/misc/guc_tables.c:1058 +#: utils/misc/guc_tables.c:1052 msgid "Collects transaction commit time." msgstr "Recolectar tiempo de compromiso de transacciones." -#: utils/misc/guc_tables.c:1067 +#: utils/misc/guc_tables.c:1061 msgid "Enables SSL connections." msgstr "Permitir conexiones SSL." -#: utils/misc/guc_tables.c:1076 -msgid "Controls whether ssl_passphrase_command is called during server reload." -msgstr "" +#: utils/misc/guc_tables.c:1070 +msgid "Controls whether \"ssl_passphrase_command\" is called during server reload." +msgstr "Controla si «ssl_passphrase_command» es invocado durante el “reload” del servidor." -#: utils/misc/guc_tables.c:1085 +#: utils/misc/guc_tables.c:1079 msgid "Give priority to server ciphersuite order." msgstr "Da prioridad al orden de algoritmos de cifrado especificado por el servidor." -#: utils/misc/guc_tables.c:1094 +#: utils/misc/guc_tables.c:1088 msgid "Forces synchronization of updates to disk." msgstr "Forzar la sincronización de escrituras a disco." -#: utils/misc/guc_tables.c:1095 +#: 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 "El servidor usará la llamada a sistema fsync() en varios lugares para asegurarse que las actualizaciones son escritas físicamente a disco. Esto asegura que las bases de datos se recuperarán a un estado consistente después de una caída de hardware o sistema operativo." -#: utils/misc/guc_tables.c:1106 +#: utils/misc/guc_tables.c:1100 msgid "Continues processing after a checksum failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc_tables.c:1107 +#: 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 "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc_tables.c:1121 +#: utils/misc/guc_tables.c:1115 msgid "Continues processing past damaged page headers." msgstr "Continuar procesando después de detectar encabezados de página dañados." -#: utils/misc/guc_tables.c:1122 -msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." -msgstr "La detección de un encabezado de página dañado normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo zero_damaged_pages a true hace que el sistema reporte un mensaje de warning, escriba ceros en toda la página, y continúe el procesamiento. Este comportamiento destruirá datos; en particular, todas las tuplas en la página dañada." +#: utils/misc/guc_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 "La detección de un encabezado de página dañado normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo «zero_damaged_pages» a true hace que el sistema reporte un mensaje de warning, escriba ceros en toda la página, y continúe el procesamiento. Este comportamiento destruirá datos; en particular, todas las tuplas en la página dañada." -#: utils/misc/guc_tables.c:1135 +#: utils/misc/guc_tables.c:1129 msgid "Continues recovery after an invalid pages failure." msgstr "Continuar procesando después de una falla de páginas no válidas." -#: utils/misc/guc_tables.c:1136 -msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." -msgstr "La detección de que registros de WAL tengan referencias a páginas no válidas durante la recuperación hace que PostgreSQL produzca un error de nivel PANIC, abortando la recuperación. Establecer el valor de ignore_invalid_pages a true hace que el sistema ignore las referencias a páginas no válidas en registros de WAL (pero aún así reporta un mensaje de warning), y continúe la recuperación. Este comportamiento podría causar caídas del sistema, pérdida de datos, propagar u ocultar corrupción, u otros problemas serios. Sólo tiene efecto durante la recuperación o en modo standby." +#: 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 "La detección de que registros de WAL tengan referencias a páginas no válidas durante la recuperación hace que PostgreSQL produzca un error de nivel PANIC, abortando la recuperación. Establecer el valor de «ignore_invalid_pages» a true hace que el sistema ignore las referencias a páginas no válidas en registros de WAL (pero aún así reporta un mensaje de warning), y continúe la recuperación. Este comportamiento podría causar caídas del sistema, pérdida de datos, propagar u ocultar corrupción, u otros problemas serios. Sólo tiene efecto durante la recuperación o en modo standby." -#: utils/misc/guc_tables.c:1154 +#: utils/misc/guc_tables.c:1148 msgid "Writes full pages to WAL when first modified after a checkpoint." -msgstr "Escribe páginas completas a WAL cuando son modificadas después de un punto de control." +msgstr "Escribe páginas completas a WAL cuando son modificadas después de un checkpoint." -#: utils/misc/guc_tables.c:1155 +#: 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 "Una escritura de página que está siendo procesada durante una caída del sistema operativo puede ser completada sólo parcialmente. Durante la recuperación, los cambios de registros (tuplas) almacenados en WAL no son suficientes para la recuperación. Esta opción activa la escritura de las páginas a WAL cuando son modificadas por primera vez después de un punto de control, de manera que una recuperación total es posible." +msgstr "Una escritura de página que está siendo procesada durante una caída del sistema operativo puede ser completada sólo parcialmente. Durante la recuperación, los cambios de registros (tuplas) almacenados en WAL no son suficientes para la recuperación. Esta opción activa la escritura de las páginas a WAL cuando son modificadas por primera vez después de un checkpoint, de manera que una recuperación total es posible." -#: utils/misc/guc_tables.c:1168 +#: 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 "Escribir páginas completas al WAL cuando son modificadas después de un punto de control, incluso para una modificación no crítica." +msgstr "Escribir páginas completas al WAL cuando son modificadas después de un checkpoint, incluso para una modificación no crítica." -#: utils/misc/guc_tables.c:1178 +#: utils/misc/guc_tables.c:1172 msgid "Writes zeroes to new WAL files before first use." msgstr "Escribir ceros a nuevos archivos WAL antes del primer uso." -#: utils/misc/guc_tables.c:1188 +#: utils/misc/guc_tables.c:1182 msgid "Recycles WAL files by renaming them." msgstr "Reciclar archivos de WAL cambiándoles de nombre." -#: utils/misc/guc_tables.c:1198 +#: utils/misc/guc_tables.c:1192 msgid "Logs each checkpoint." -msgstr "Registrar cada punto de control." +msgstr "Registrar cada checkpoint." -#: utils/misc/guc_tables.c:1207 +#: utils/misc/guc_tables.c:1201 msgid "Logs each successful connection." msgstr "Registrar cada conexión exitosa." -#: utils/misc/guc_tables.c:1216 +#: utils/misc/guc_tables.c:1210 +msgid "Logs details of pre-authentication connection handshake." +msgstr "Registrar detalles de “handshake” de conexión anteriores a la autentificación." + +#: utils/misc/guc_tables.c:1220 msgid "Logs end of a session, including duration." msgstr "Registrar el fin de una sesión, incluyendo su duración." -#: utils/misc/guc_tables.c:1225 +#: utils/misc/guc_tables.c:1229 msgid "Logs each replication command." msgstr "Registrar cada orden de replicación." -#: utils/misc/guc_tables.c:1234 +#: utils/misc/guc_tables.c:1238 msgid "Shows whether the running server has assertion checks enabled." msgstr "Indica si el servidor actual tiene activas las aseveraciones (asserts) activas." -#: utils/misc/guc_tables.c:1245 +#: utils/misc/guc_tables.c:1249 msgid "Terminate session on any error." msgstr "Terminar sesión ante cualquier error." -#: utils/misc/guc_tables.c:1254 +#: utils/misc/guc_tables.c:1258 msgid "Reinitialize server after backend crash." msgstr "Reinicializar el servidor después de una caída de un proceso servidor." -#: utils/misc/guc_tables.c:1263 +#: utils/misc/guc_tables.c:1267 msgid "Remove temporary files after backend crash." msgstr "Eliminar archivos temporales después de una caída de un proceso servidor." -#: utils/misc/guc_tables.c:1273 +#: utils/misc/guc_tables.c:1277 msgid "Send SIGABRT not SIGQUIT to child processes after backend crash." -msgstr "" +msgstr "Enviar SIGABRT en vez de SIGQUIT a procesos hijos después de una caída de un proceso servidor." -#: utils/misc/guc_tables.c:1283 +#: utils/misc/guc_tables.c:1287 msgid "Send SIGABRT not SIGKILL to stuck child processes." -msgstr "" +msgstr "Enviar SIGABRT en vez de SIGKILL a procesos hijos atascados." -#: utils/misc/guc_tables.c:1294 +#: utils/misc/guc_tables.c:1298 msgid "Logs the duration of each completed SQL statement." msgstr "Registrar la duración de cada sentencia SQL ejecutada." -#: utils/misc/guc_tables.c:1303 +#: utils/misc/guc_tables.c:1307 msgid "Logs each query's parse tree." msgstr "Registrar cada arbol analizado de consulta " -#: utils/misc/guc_tables.c:1312 +#: utils/misc/guc_tables.c:1316 msgid "Logs each query's rewritten parse tree." msgstr "Registrar cada reescritura del arból analizado de consulta" -#: utils/misc/guc_tables.c:1321 +#: utils/misc/guc_tables.c:1325 msgid "Logs each query's execution plan." msgstr "Registrar el plan de ejecución de cada consulta." -#: utils/misc/guc_tables.c:1330 +#: utils/misc/guc_tables.c:1334 msgid "Indents parse and plan tree displays." msgstr "Indentar los árboles de parse y plan." -#: utils/misc/guc_tables.c:1339 +#: utils/misc/guc_tables.c:1343 msgid "Writes parser performance statistics to the server log." msgstr "Escribir estadísticas de parser al registro del servidor." -#: utils/misc/guc_tables.c:1348 +#: utils/misc/guc_tables.c:1352 msgid "Writes planner performance statistics to the server log." msgstr "Escribir estadísticas de planner al registro del servidor." -#: utils/misc/guc_tables.c:1357 +#: utils/misc/guc_tables.c:1361 msgid "Writes executor performance statistics to the server log." msgstr "Escribir estadísticas del executor al registro del servidor." -#: utils/misc/guc_tables.c:1366 +#: utils/misc/guc_tables.c:1370 msgid "Writes cumulative performance statistics to the server log." msgstr "Escribir estadísticas acumulativas al registro del servidor." -#: utils/misc/guc_tables.c:1376 +#: utils/misc/guc_tables.c:1380 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Registrar uso de recursos de sistema (memoria y CPU) en varias operaciones B-tree." -#: utils/misc/guc_tables.c:1388 +#: utils/misc/guc_tables.c:1392 msgid "Collects information about executing commands." msgstr "Recolectar estadísticas sobre órdenes en ejecución." -#: utils/misc/guc_tables.c:1389 +#: 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 "Activa la recolección de información sobre la orden actualmente en ejecución en cada sesión, junto con el momento en el cual esa orden comenzó la ejecución." -#: utils/misc/guc_tables.c:1399 +#: utils/misc/guc_tables.c:1403 msgid "Collects statistics on database activity." msgstr "Recolectar estadísticas de actividad de la base de datos." -#: utils/misc/guc_tables.c:1408 +#: utils/misc/guc_tables.c:1412 msgid "Collects timing statistics for database I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." -#: utils/misc/guc_tables.c:1417 +#: utils/misc/guc_tables.c:1421 msgid "Collects timing statistics for WAL I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O del WAL." -#: utils/misc/guc_tables.c:1427 +#: utils/misc/guc_tables.c:1431 msgid "Updates the process title to show the active SQL command." msgstr "Actualiza el título del proceso para mostrar la orden SQL activo." -#: utils/misc/guc_tables.c:1428 +#: 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 "Habilita que se actualice el título del proceso cada vez que una orden SQL es recibido por el servidor." -#: utils/misc/guc_tables.c:1437 +#: utils/misc/guc_tables.c:1441 msgid "Starts the autovacuum subprocess." msgstr "Iniciar el subproceso de autovacuum." -#: utils/misc/guc_tables.c:1447 +#: utils/misc/guc_tables.c:1451 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Generar salida de depuración para LISTEN y NOTIFY." -#: utils/misc/guc_tables.c:1459 +#: utils/misc/guc_tables.c:1463 msgid "Emits information about lock usage." msgstr "Emitir información acerca del uso de locks." -#: utils/misc/guc_tables.c:1469 +#: utils/misc/guc_tables.c:1473 msgid "Emits information about user lock usage." msgstr "Emitir información acerca del uso de locks de usuario." -#: utils/misc/guc_tables.c:1479 +#: utils/misc/guc_tables.c:1483 msgid "Emits information about lightweight lock usage." msgstr "Emitir información acerca del uso de «lightweight locks»." -#: utils/misc/guc_tables.c:1489 +#: utils/misc/guc_tables.c:1493 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Volcar información acerca de los locks existentes cuando se agota el tiempo de deadlock." -#: utils/misc/guc_tables.c:1501 +#: utils/misc/guc_tables.c:1505 msgid "Logs long lock waits." msgstr "Registrar esperas largas de bloqueos." -#: utils/misc/guc_tables.c:1510 +#: utils/misc/guc_tables.c:1514 msgid "Logs standby recovery conflict waits." msgstr "Registrar esperas por conflictos en recuperación de standby" -#: utils/misc/guc_tables.c:1519 +#: utils/misc/guc_tables.c:1523 msgid "Logs the host name in the connection logs." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc_tables.c:1520 +#: 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 "Por omisión, los registros de conexión sólo muestran la dirección IP del host que establece la conexión. Si desea que se despliegue el nombre del host puede activar esta opción, pero dependiendo de su configuración de resolución de nombres esto puede imponer una penalización de rendimiento no despreciable." -#: utils/misc/guc_tables.c:1531 +#: utils/misc/guc_tables.c:1535 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tratar expr=NULL como expr IS NULL." -#: utils/misc/guc_tables.c:1532 +#: 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 "Cuando está activado, expresiones de la forma expr = NULL (o NULL = expr) son tratadas como expr IS NULL, esto es, retornarán verdadero si expr es evaluada al valor nulo, y falso en caso contrario. El comportamiento correcto de expr = NULL es retornar siempre null (desconocido)." -#: utils/misc/guc_tables.c:1544 -msgid "Enables per-database user names." -msgstr "Activar el uso de nombre de usuario locales a cada base de datos." - -#: utils/misc/guc_tables.c:1553 +#: utils/misc/guc_tables.c:1548 msgid "Sets the default read-only status of new transactions." msgstr "Estado por omisión de sólo lectura de nuevas transacciones." -#: utils/misc/guc_tables.c:1563 +#: utils/misc/guc_tables.c:1558 msgid "Sets the current transaction's read-only status." msgstr "Activa el estado de sólo lectura de la transacción en curso." -#: utils/misc/guc_tables.c:1573 +#: utils/misc/guc_tables.c:1568 msgid "Sets the default deferrable status of new transactions." msgstr "Estado por omisión de postergable de nuevas transacciones." -#: utils/misc/guc_tables.c:1582 +#: 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 "Si está activo, las transacciones serializables de sólo lectura serán pausadas hasta que puedan ejecutarse sin posibles fallas de serialización." -#: utils/misc/guc_tables.c:1592 +#: utils/misc/guc_tables.c:1587 msgid "Enable row security." msgstr "Activar seguridad de registros." -#: utils/misc/guc_tables.c:1593 +#: utils/misc/guc_tables.c:1588 msgid "When enabled, row security will be applied to all users." msgstr "Cuando está activada, la seguridad de registros se aplicará a todos los usuarios." -#: utils/misc/guc_tables.c:1601 +#: utils/misc/guc_tables.c:1596 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Verificar definición de rutinas durante CREATE FUNCTION y CREATE PROCEDURE." -#: utils/misc/guc_tables.c:1610 +#: utils/misc/guc_tables.c:1605 msgid "Enable input of NULL elements in arrays." msgstr "Habilita el ingreso de elementos nulos en arrays." -#: utils/misc/guc_tables.c:1611 +#: 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 "Cuando está activo, un valor NULL sin comillas en la entrada de un array significa un valor nulo; en caso contrario es tomado literalmente." -#: utils/misc/guc_tables.c:1627 +#: utils/misc/guc_tables.c:1622 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS ya no está soportado; esto sólo puede ser false." -#: utils/misc/guc_tables.c:1637 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." -msgstr "Lanzar un subproceso para capturar stderr y/o logs CSV en archivos de log." +#: utils/misc/guc_tables.c:1632 +#| msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." +msgstr "Lanzar un subproceso para capturar stderr, csvlog y/o jsonlog en archivos de log." -#: utils/misc/guc_tables.c:1646 +#: utils/misc/guc_tables.c:1641 msgid "Truncate existing log files of same name during log rotation." msgstr "Truncar archivos de log del mismo nombre durante la rotación." -#: utils/misc/guc_tables.c:1657 +#: utils/misc/guc_tables.c:1652 msgid "Emit information about resource usage in sorting." msgstr "Emitir información acerca de uso de recursos durante los ordenamientos." -#: utils/misc/guc_tables.c:1671 +#: utils/misc/guc_tables.c:1666 msgid "Generate debugging output for synchronized scanning." msgstr "Generar salida de depuración para recorrido sincronizado." -#: utils/misc/guc_tables.c:1686 +#: utils/misc/guc_tables.c:1681 msgid "Enable bounded sorting using heap sort." msgstr "Activar ordenamiento acotado usando «heap sort»." -#: utils/misc/guc_tables.c:1699 +#: utils/misc/guc_tables.c:1694 msgid "Emit WAL-related debugging output." msgstr "Activar salida de depuración de WAL." -#: utils/misc/guc_tables.c:1711 +#: utils/misc/guc_tables.c:1706 msgid "Shows whether datetimes are integer based." msgstr "Mostrar si las fechas y horas se basan en tipos enteros." -#: utils/misc/guc_tables.c:1722 +#: utils/misc/guc_tables.c:1717 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Define que los nombres de usuario Kerberos y GSSAPI deberían ser tratados sin distinción de mayúsculas." -#: utils/misc/guc_tables.c:1732 -#, fuzzy -#| msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." +#: utils/misc/guc_tables.c:1727 msgid "Sets whether GSSAPI delegation should be accepted from the client." -msgstr "Define que los nombres de usuario Kerberos y GSSAPI deberían ser tratados sin distinción de mayúsculas." +msgstr "Define si la delegación GSSAPI debería ser aceptada por el cliente." -#: utils/misc/guc_tables.c:1742 +#: utils/misc/guc_tables.c:1737 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avisa acerca de escapes de backslash en literales de cadena corrientes." -#: utils/misc/guc_tables.c:1752 +#: utils/misc/guc_tables.c:1747 msgid "Causes '...' strings to treat backslashes literally." msgstr "Provoca que las cadenas '...' traten las barras inclinadas inversas (\\) en forma literal." -#: utils/misc/guc_tables.c:1763 +#: utils/misc/guc_tables.c:1758 msgid "Enable synchronized sequential scans." msgstr "Permitir la sincronización de recorridos secuenciales." -#: utils/misc/guc_tables.c:1773 +#: utils/misc/guc_tables.c:1768 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Define si incluir o excluir la transacción con el destino de recuperación." -#: utils/misc/guc_tables.c:1783 +#: utils/misc/guc_tables.c:1778 +msgid "Starts the WAL summarizer process to enable incremental backup." +msgstr "Inicia el proceso sumarizador de WAL para activar backups incrementales." + +#: utils/misc/guc_tables.c:1788 msgid "Allows connections and queries during recovery." msgstr "Permite conexiones y consultas durante la recuperación." -#: utils/misc/guc_tables.c:1793 +#: utils/misc/guc_tables.c:1798 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permite retroalimentación desde un hot standby hacia el primario que evitará conflictos en consultas." -#: utils/misc/guc_tables.c:1803 +#: utils/misc/guc_tables.c:1808 msgid "Shows whether hot standby is currently active." msgstr "Muestra si hot standby está activo actualmente." -#: utils/misc/guc_tables.c:1814 +#: utils/misc/guc_tables.c:1819 msgid "Allows modifications of the structure of system tables." msgstr "Permite modificaciones de la estructura de las tablas del sistema." -#: utils/misc/guc_tables.c:1825 +#: utils/misc/guc_tables.c:1830 msgid "Disables reading from system indexes." msgstr "Deshabilita lectura de índices del sistema." -#: utils/misc/guc_tables.c:1826 +#: 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 "No evita la actualización de índices, así que es seguro. Lo peor que puede ocurrir es lentitud del sistema." -#: utils/misc/guc_tables.c:1837 +#: utils/misc/guc_tables.c:1842 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "Permite tablespaces directamente dentro de pg_tblspc, para pruebas." -#: utils/misc/guc_tables.c:1848 +#: utils/misc/guc_tables.c:1853 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Activa el modo de compatibilidad con versiones anteriores de las comprobaciones de privilegios de objetos grandes." -#: utils/misc/guc_tables.c:1849 +#: 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 "Omite las comprobaciones de privilegios cuando se leen o modifican los objetos grandes, para compatibilidad con versiones de PostgreSQL anteriores a 9.0." -#: utils/misc/guc_tables.c:1859 +#: utils/misc/guc_tables.c:1864 msgid "When generating SQL fragments, quote all identifiers." msgstr "Al generar fragmentos SQL, entrecomillar todos los identificadores." -#: utils/misc/guc_tables.c:1869 +#: utils/misc/guc_tables.c:1874 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Indica si las sumas de verificación están activas en este cluster." -#: utils/misc/guc_tables.c:1880 +#: utils/misc/guc_tables.c:1885 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Agregar número de secuencia a mensajes syslog para evitar supresión de duplicados." -#: utils/misc/guc_tables.c:1890 +#: utils/misc/guc_tables.c:1895 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Dividir mensajes enviados a syslog en líneas y que quepan en 1024 bytes." -#: utils/misc/guc_tables.c:1900 +#: utils/misc/guc_tables.c:1905 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controla si los Gather y Gather Merge también ejecutan subplanes." -#: utils/misc/guc_tables.c:1901 +#: utils/misc/guc_tables.c:1906 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "¿Deben los nodos de recolección ejecutar subplanes o sólo recolectar tuplas?" -#: utils/misc/guc_tables.c:1911 +#: utils/misc/guc_tables.c:1916 msgid "Allow JIT compilation." msgstr "Permitir compilación JIT." -#: utils/misc/guc_tables.c:1922 +#: utils/misc/guc_tables.c:1927 msgid "Register JIT-compiled functions with debugger." msgstr "Registrar las funciones JIT compiladas con el depurador." -#: utils/misc/guc_tables.c:1939 +#: utils/misc/guc_tables.c:1944 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Escribe el bitcode LLVM para facilitar depuración de JIT." -#: utils/misc/guc_tables.c:1950 +#: utils/misc/guc_tables.c:1955 msgid "Allow JIT compilation of expressions." msgstr "Permitir compilación JIT de expresiones." -#: utils/misc/guc_tables.c:1961 +#: utils/misc/guc_tables.c:1966 msgid "Register JIT-compiled functions with perf profiler." msgstr "Registrar las funciones JIT compiladas con el analizador «perf»." -#: utils/misc/guc_tables.c:1978 +#: utils/misc/guc_tables.c:1983 msgid "Allow JIT compilation of tuple deforming." msgstr "Permitir compilación JIT de deformación de tuplas." -#: utils/misc/guc_tables.c:1989 +#: utils/misc/guc_tables.c:1994 msgid "Whether to continue running after a failure to sync data files." msgstr "Si continuar ejecutando después de una falla al sincronizar archivos de datos." -#: utils/misc/guc_tables.c:1998 +#: 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 "Definir si un receptor de WAL debe crear un slot de replicación temporal en caso de no haber configurado un slot permanente." -#: utils/misc/guc_tables.c:2016 -#, fuzzy -#| msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." +#: utils/misc/guc_tables.c:2012 +msgid "Enables event triggers." +msgstr "Activa “triggers” por evento." + +#: utils/misc/guc_tables.c:2013 +msgid "When enabled, event triggers will fire for all applicable statements." +msgstr "Cuando se activa, los “triggers” por evento se ejecutarán para todas las sentencias aplicables." + +#: utils/misc/guc_tables.c:2022 +msgid "Enables a physical standby to synchronize logical failover replication slots from the primary server." +msgstr "Habilita un standby físico para sincronizar slots de “failover” de replicación lógica desde el servidor primario." + +#: utils/misc/guc_tables.c:2040 msgid "Sets the amount of time to wait before forcing a switch to the next WAL file." -msgstr "Define el tiempo a esperar antes de reintentar obtener WAL después de un intento fallido." +msgstr "Define el tiempo a esperar antes de forzar un cambio al siguiente archivo WAL." -#: utils/misc/guc_tables.c:2027 -#, fuzzy -#| msgid "Sets the maximum time to wait for WAL replication." +#: utils/misc/guc_tables.c:2051 msgid "Sets the amount of time to wait after authentication on connection startup." -msgstr "Define el tiempo máximo a esperar la replicación de WAL." +msgstr "Define el tiempo máximo a esperar la autentificación durante el establecimiento de una conexión." -#: utils/misc/guc_tables.c:2029 utils/misc/guc_tables.c:2663 +#: utils/misc/guc_tables.c:2053 utils/misc/guc_tables.c:2780 msgid "This allows attaching a debugger to the process." msgstr "Esto permite adjuntar un depurador al proceso." -#: utils/misc/guc_tables.c:2038 +#: utils/misc/guc_tables.c:2062 msgid "Sets the default statistics target." msgstr "Definir el valor por omisión de toma de estadísticas." -#: utils/misc/guc_tables.c:2039 +#: 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 "Esto se aplica a columnas de tablas que no tienen un valor definido a través de ALTER TABLE SET STATISTICS." -#: utils/misc/guc_tables.c:2048 +#: utils/misc/guc_tables.c:2072 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Tamaño de lista de FROM a partir del cual subconsultas no serán colapsadas." -#: utils/misc/guc_tables.c:2050 +#: 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 "El planner mezclará subconsultas en consultas de nivel superior si la lista FROM resultante es menor que esta cantidad de ítems." -#: utils/misc/guc_tables.c:2061 +#: utils/misc/guc_tables.c:2085 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Tamaño de lista de FROM a partir del cual constructos JOIN no serán aplanados." -#: utils/misc/guc_tables.c:2063 +#: 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 "El planner aplanará constructos JOIN explícitos en listas de ítems FROM siempre que la lista resultante no tenga más que esta cantidad de ítems." -#: utils/misc/guc_tables.c:2074 +#: utils/misc/guc_tables.c:2098 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Umbral de ítems en FROM a partir del cual se usará GEQO." -#: utils/misc/guc_tables.c:2084 +#: utils/misc/guc_tables.c:2108 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort se usa para determinar los valores por defecto para otros parámetros." -#: utils/misc/guc_tables.c:2094 +#: utils/misc/guc_tables.c:2118 msgid "GEQO: number of individuals in the population." msgstr "GEQO: número de individuos en una población." -#: utils/misc/guc_tables.c:2095 utils/misc/guc_tables.c:2105 +#: utils/misc/guc_tables.c:2119 utils/misc/guc_tables.c:2129 msgid "Zero selects a suitable default value." msgstr "Cero selecciona un valor por omisión razonable." -#: utils/misc/guc_tables.c:2104 +#: utils/misc/guc_tables.c:2128 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: número de iteraciones del algoritmo." -#: utils/misc/guc_tables.c:2116 +#: utils/misc/guc_tables.c:2140 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Define el tiempo a esperar un lock antes de buscar un deadlock." -#: utils/misc/guc_tables.c:2127 +#: 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 "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL archivado." -#: utils/misc/guc_tables.c:2138 +#: 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 "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL en flujo." -#: utils/misc/guc_tables.c:2149 +#: utils/misc/guc_tables.c:2173 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Define el retraso mínimo para aplicar cambios durante la recuperación." -#: utils/misc/guc_tables.c:2160 +#: utils/misc/guc_tables.c:2184 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Define el intervalo máximo entre reportes de estado que el receptor de WAL envía al servidor origen." -#: utils/misc/guc_tables.c:2171 +#: utils/misc/guc_tables.c:2195 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Define el máximo tiempo de espera para recibir datos desde el servidor origen." -#: utils/misc/guc_tables.c:2182 +#: utils/misc/guc_tables.c:2206 msgid "Sets the maximum number of concurrent connections." msgstr "Número máximo de conexiones concurrentes." -#: utils/misc/guc_tables.c:2193 +#: utils/misc/guc_tables.c:2217 msgid "Sets the number of connection slots reserved for superusers." msgstr "Número de conexiones reservadas para superusuarios." -#: utils/misc/guc_tables.c:2203 -#, fuzzy -#| msgid "Sets the number of connection slots reserved for superusers." +#: utils/misc/guc_tables.c:2227 msgid "Sets the number of connection slots reserved for roles with privileges of pg_use_reserved_connections." -msgstr "Número de conexiones reservadas para superusuarios." +msgstr "Número de conexiones reservadas para con privilegios de pg_use_reserved_connections." -#: utils/misc/guc_tables.c:2214 +#: utils/misc/guc_tables.c:2238 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Cantidad de memoria compartida dinámica reservada al iniciar." -#: utils/misc/guc_tables.c:2229 +#: utils/misc/guc_tables.c:2253 msgid "Sets the number of shared memory buffers used by the server." msgstr "Número de búfers de memoria compartida usados por el servidor." -#: utils/misc/guc_tables.c:2240 +#: utils/misc/guc_tables.c:2264 msgid "Sets the buffer pool size for VACUUM, ANALYZE, and autovacuum." -msgstr "" +msgstr "Define el tamaño del pool de búfers para VACUUM, ANALYZE y autovacuum." -#: utils/misc/guc_tables.c:2251 +#: 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 "Muestra el tamaño del área principal de memoria compartida del servidor (redondeado al número de MB más cercano)." -#: utils/misc/guc_tables.c:2262 -#, fuzzy -#| msgid "Sets the number of disk-page buffers in shared memory for WAL." +#: utils/misc/guc_tables.c:2286 msgid "Shows the number of huge pages needed for the main shared memory area." -msgstr "Búfers en memoria compartida para páginas de WAL." +msgstr "Muestra la cantidad de “huge pages” necesarias para el área de memoria compartida principal." -#: utils/misc/guc_tables.c:2263 +#: utils/misc/guc_tables.c:2287 msgid "-1 indicates that the value could not be determined." msgstr "-1 indica que el valor no pudo ser determinado." -#: utils/misc/guc_tables.c:2273 +#: utils/misc/guc_tables.c:2297 +msgid "Sets the size of the dedicated buffer pool used for the commit timestamp cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de timestamps de commit." + +#: 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 "Especifique 0 para que este valor sea determinado como fracción de shared_buffers." + +#: utils/misc/guc_tables.c:2308 +msgid "Sets the size of the dedicated buffer pool used for the MultiXact member cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de miembros de MultiXact." + +#: utils/misc/guc_tables.c:2319 +msgid "Sets the size of the dedicated buffer pool used for the MultiXact offset cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de offsets de MultiXact." + +#: utils/misc/guc_tables.c:2330 +msgid "Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY message cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de mensajes LISTEN/NOTIFY." + +#: utils/misc/guc_tables.c:2341 +msgid "Sets the size of the dedicated buffer pool used for the serializable transaction cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de transacciones serializables." + +#: utils/misc/guc_tables.c:2352 +msgid "Sets the size of the dedicated buffer pool used for the subtransaction cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de subtransacciones." + +#: utils/misc/guc_tables.c:2363 +msgid "Sets the size of the dedicated buffer pool used for the transaction status cache." +msgstr "Define el tamaño del pool de búfers dedicado al caché de estatus de transacciones." + +#: utils/misc/guc_tables.c:2374 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Número de búfers de memoria temporal usados por cada sesión." -#: utils/misc/guc_tables.c:2284 +#: utils/misc/guc_tables.c:2385 msgid "Sets the TCP port the server listens on." msgstr "Puerto TCP en el cual escuchará el servidor." -#: utils/misc/guc_tables.c:2294 +#: utils/misc/guc_tables.c:2395 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Privilegios de acceso al socket Unix." -#: utils/misc/guc_tables.c:2295 +#: 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 "Los sockets de dominio Unix usan la funcionalidad de permisos de archivos estándar de Unix. Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc_tables.c:2309 +#: utils/misc/guc_tables.c:2410 msgid "Sets the file permissions for log files." msgstr "Define los privilegios para los archivos del registro del servidor." -#: utils/misc/guc_tables.c:2310 +#: 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 "Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc_tables.c:2324 +#: utils/misc/guc_tables.c:2425 msgid "Shows the mode of the data directory." msgstr "Muestra el modo del directorio de datos." -#: utils/misc/guc_tables.c:2325 +#: 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 "El valor del parámetro es una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. (Para usar el modo octal acostumbrado, comience el número con un 0 (cero).)" -#: utils/misc/guc_tables.c:2338 +#: utils/misc/guc_tables.c:2439 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Establece el límite de memoria que se usará para espacios de trabajo de consultas." -#: utils/misc/guc_tables.c:2339 +#: 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 "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc_tables.c:2351 +#: utils/misc/guc_tables.c:2457 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc_tables.c:2352 +#: utils/misc/guc_tables.c:2458 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Esto incluye operaciones como VACUUM y CREATE INDEX." -#: utils/misc/guc_tables.c:2362 +#: utils/misc/guc_tables.c:2468 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Establece el límite de memoria que se usará para decodificación lógica." -#: utils/misc/guc_tables.c:2363 +#: utils/misc/guc_tables.c:2469 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Esta es la cantidad máxima de memoria que puede ser usada para cada búfer interno de ordenamiento, antes de comenzar a usar disco." -#: utils/misc/guc_tables.c:2379 +#: utils/misc/guc_tables.c:2485 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Establece el tamaño máximo del stack, en kilobytes." -#: utils/misc/guc_tables.c:2390 +#: utils/misc/guc_tables.c:2496 msgid "Limits the total size of all temporary files used by each process." msgstr "Limita el tamaño total de todos los archivos temporales usados en cada proceso." -#: utils/misc/guc_tables.c:2391 +#: utils/misc/guc_tables.c:2497 msgid "-1 means no limit." msgstr "-1 significa sin límite." -#: utils/misc/guc_tables.c:2401 +#: utils/misc/guc_tables.c:2507 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Costo de Vacuum de una página encontrada en el buffer." -#: utils/misc/guc_tables.c:2411 +#: utils/misc/guc_tables.c:2517 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Costo de Vacuum de una página no encontrada en el cache." -#: utils/misc/guc_tables.c:2421 +#: utils/misc/guc_tables.c:2527 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Costo de Vacuum de una página ensuciada por vacuum." -#: utils/misc/guc_tables.c:2431 +#: utils/misc/guc_tables.c:2537 msgid "Vacuum cost amount available before napping." msgstr "Costo de Vacuum disponible antes de descansar." -#: utils/misc/guc_tables.c:2441 +#: utils/misc/guc_tables.c:2547 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Costo de Vacuum disponible antes de descansar, para autovacuum." -#: utils/misc/guc_tables.c:2451 +#: utils/misc/guc_tables.c:2557 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Define la cantidad máxima de archivos abiertos por cada subproceso." -#: utils/misc/guc_tables.c:2464 +#: utils/misc/guc_tables.c:2570 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Define la cantidad máxima de transacciones preparadas simultáneas." -#: utils/misc/guc_tables.c:2475 +#: utils/misc/guc_tables.c:2581 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Define el OID mínimo para hacer seguimiento de locks." -#: utils/misc/guc_tables.c:2476 +#: utils/misc/guc_tables.c:2582 msgid "Is used to avoid output on system tables." msgstr "Se usa para evitar salida excesiva por tablas de sistema." -#: utils/misc/guc_tables.c:2485 +#: utils/misc/guc_tables.c:2591 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Define el OID de una tabla con trazado incondicional de locks." -#: utils/misc/guc_tables.c:2497 +#: utils/misc/guc_tables.c:2603 msgid "Sets the maximum allowed duration of any statement." msgstr "Define la duración máxima permitida de sentencias." -#: utils/misc/guc_tables.c:2498 utils/misc/guc_tables.c:2509 -#: utils/misc/guc_tables.c:2520 utils/misc/guc_tables.c:2531 +#: 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 "Un valor de 0 desactiva el máximo." -#: utils/misc/guc_tables.c:2508 +#: utils/misc/guc_tables.c:2614 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Define la duración máxima permitida de cualquier espera por un lock." -#: utils/misc/guc_tables.c:2519 +#: utils/misc/guc_tables.c:2625 msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Define el tiempo máximo permitido de inactividad entre consultas, cuando están dentro de una transacción." -#: utils/misc/guc_tables.c:2530 +#: utils/misc/guc_tables.c:2636 +msgid "Sets the maximum allowed duration of any transaction within a session (not a prepared transaction)." +msgstr "Define la duración máxima permitida cualquier transacción dentro de una sesión (no una transacción preparada)." + +#: utils/misc/guc_tables.c:2647 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Define el tiempo máximo permitido de inactividad entre consultas, cuando no están dentro de una transacción." -#: utils/misc/guc_tables.c:2541 +#: utils/misc/guc_tables.c:2658 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) una fila de una tabla." -#: utils/misc/guc_tables.c:2551 +#: utils/misc/guc_tables.c:2668 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc_tables.c:2561 +#: utils/misc/guc_tables.c:2678 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) el multixact en una fila." -#: utils/misc/guc_tables.c:2571 +#: utils/misc/guc_tables.c:2688 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc_tables.c:2581 +#: utils/misc/guc_tables.c:2698 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." -msgstr "Edad a la cual VACUUM debería activar el modo failsafe para evitar pérdida de servicio por reciclaje (wraparound)." +msgstr "Edad a la cual VACUUM debería activar el modo failsafe para evitar pérdida de servicio por ”wraparound”." -#: utils/misc/guc_tables.c:2590 +#: utils/misc/guc_tables.c:2707 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." -msgstr "Edad de multixact a la cual VACUUM debería activar el modo failsafe para evitar pérdida de servicio por reciclaje (wraparound)." +msgstr "Edad de multixact a la cual VACUUM debería activar el modo failsafe para evitar pérdida de servicio por “wraparound”." -#: utils/misc/guc_tables.c:2603 +#: utils/misc/guc_tables.c:2720 msgid "Sets the maximum number of locks per transaction." -msgstr "Cantidad máxima de candados (locks) por transacción." +msgstr "Cantidad máxima de “locks” por transacción." -#: utils/misc/guc_tables.c:2604 -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: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 "La tabla compartida de “locks” se dimensiona bajo la suposoción que a lo más «max_locks_per_transaction» objetos por cada proceso servidor o transacción preparada necesitarán ser bloqueados en un momento dado." -#: utils/misc/guc_tables.c:2615 +#: utils/misc/guc_tables.c:2732 msgid "Sets the maximum number of predicate locks per transaction." -msgstr "Cantidad máxima de candados (locks) de predicado por transacción." +msgstr "Cantidad máxima de “locks” de predicado por transacción." -#: utils/misc/guc_tables.c:2616 -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: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 "La tabla compartida de “locks” de predicados se dimensiona bajo la suposición de que a lo más «max_pred_locks_per_transaction» objetos por cada proceso servidor o transacción preparada necesitarán ser bloqueados en un momento dado." -#: utils/misc/guc_tables.c:2627 +#: utils/misc/guc_tables.c:2744 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Cantidad máxima de páginas y tuplas bloqueadas por predicado." -#: utils/misc/guc_tables.c:2628 +#: 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 "Si más que este total de páginas y tuplas en la misma relación están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de relación." -#: utils/misc/guc_tables.c:2638 +#: utils/misc/guc_tables.c:2755 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Cantidad máxima de locks de predicado por página." -#: utils/misc/guc_tables.c:2639 +#: 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 "Si más que este número de tuplas de la misma página están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de página." -#: utils/misc/guc_tables.c:2649 +#: utils/misc/guc_tables.c:2766 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Define el tiempo máximo para completar proceso de autentificación." -#: utils/misc/guc_tables.c:2661 -#, fuzzy -#| msgid "Sets the maximum time to wait for WAL replication." +#: utils/misc/guc_tables.c:2778 msgid "Sets the amount of time to wait before authentication on connection startup." -msgstr "Define el tiempo máximo a esperar la replicación de WAL." +msgstr "Define el tiempo máximo a esperar antes de la autentificación al abrir una conexión." -#: utils/misc/guc_tables.c:2673 +#: utils/misc/guc_tables.c:2790 +msgid "Sets the maximum number of allocated pages for NOTIFY / LISTEN queue." +msgstr "Cantidad máxima de páginas dedicadas a la cola de NOTIFY / LISTEN." + +#: utils/misc/guc_tables.c:2800 msgid "Buffer size for reading ahead in the WAL during recovery." -msgstr "" +msgstr "Tamaño de búfer para lectura adelantada de WAL durante la recuperación." -#: utils/misc/guc_tables.c:2674 +#: utils/misc/guc_tables.c:2801 msgid "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." -msgstr "" +msgstr "Máxima distancia que leer adelantado en el WAL para pre-cargar bloques de datos referenciados." -#: utils/misc/guc_tables.c:2684 +#: utils/misc/guc_tables.c:2811 msgid "Sets the size of WAL files held for standby servers." msgstr "Establece el tamaño de los archivos de WAL retenidos para los servidores standby." -#: utils/misc/guc_tables.c:2695 +#: utils/misc/guc_tables.c:2822 msgid "Sets the minimum size to shrink the WAL to." msgstr "Define el tamaño mínimo al cual reducir el WAL." -#: utils/misc/guc_tables.c:2707 +#: utils/misc/guc_tables.c:2834 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Define el tamaño de WAL que desencadena un checkpoint." -#: utils/misc/guc_tables.c:2719 +#: utils/misc/guc_tables.c:2846 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Define el tiempo máximo entre puntos de control de WAL automáticos." -#: utils/misc/guc_tables.c:2730 +#: utils/misc/guc_tables.c:2857 msgid "Sets the maximum time before warning if checkpoints triggered by WAL volume happen too frequently." msgstr "Define el máximo tiempo antes de emitir un advertencia si los checkpoints iniciados a causa del volumen de WAL ocurren con demasiada frecuencia." -#: utils/misc/guc_tables.c:2732 +#: 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 "" +msgstr "Escribe una advertencia al log del servidor si los checkpoints causados por el llenado de segmentos de WAL occur más frecuentemente que esta cantidad de tiempo. Cero inhabilita la advertencia." -#: utils/misc/guc_tables.c:2745 utils/misc/guc_tables.c:2963 -#: utils/misc/guc_tables.c:3003 +#: 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 "Número de páginas después del cual las escrituras previamente ejecutadas se sincronizan a disco." -#: utils/misc/guc_tables.c:2756 +#: utils/misc/guc_tables.c:2883 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Búfers en memoria compartida para páginas de WAL." -#: utils/misc/guc_tables.c:2767 +#: utils/misc/guc_tables.c:2884 +msgid "Specify -1 to have this value determined as a fraction of shared_buffers." +msgstr "Especifique -1 para que este valor sea determinado como fracción de shared_buffers." + +#: utils/misc/guc_tables.c:2894 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Tiempo entre sincronizaciones de WAL ejecutadas por el proceso escritor de WAL." -#: utils/misc/guc_tables.c:2778 +#: utils/misc/guc_tables.c:2905 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Cantidad de WAL escrito por el proceso escritor de WAL que desencadena una sincronización (flush)." -#: utils/misc/guc_tables.c:2789 +#: utils/misc/guc_tables.c:2916 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Tamaño mínimo del nuevo archivo para hacer fsync en lugar de escribir WAL." -#: utils/misc/guc_tables.c:2800 +#: utils/misc/guc_tables.c:2927 msgid "Sets the maximum number of simultaneously running WAL sender processes." -msgstr "Define la cantidad máxima de procesos «WAL sender» simultáneos." +msgstr "Define la cantidad máxima de procesos “WAL sender” simultáneos." -#: utils/misc/guc_tables.c:2811 +#: utils/misc/guc_tables.c:2938 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc_tables.c:2821 +#: utils/misc/guc_tables.c:2948 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Define el tamaño máximo de WAL que puede ser reservado por slots de replicación." -#: utils/misc/guc_tables.c:2822 +#: 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 "Los slots de replicación serán invalidados, y los segmentos de WAL eliminados o reciclados, si se usa esta cantidad de espacio de disco en WAL." -#: utils/misc/guc_tables.c:2834 +#: utils/misc/guc_tables.c:2961 msgid "Sets the maximum time to wait for WAL replication." msgstr "Define el tiempo máximo a esperar la replicación de WAL." -#: utils/misc/guc_tables.c:2845 +#: utils/misc/guc_tables.c:2972 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Retardo en microsegundos entre completar una transacción y escribir WAL a disco." -#: utils/misc/guc_tables.c:2857 -#, fuzzy -#| msgid "Sets the maximum number of concurrent connections." -msgid "Sets the minimum number of concurrent open transactions required before performing commit_delay." -msgstr "Número máximo de conexiones concurrentes." +#: utils/misc/guc_tables.c:2984 +msgid "Sets the minimum number of concurrent open transactions required before performing \"commit_delay\"." +msgstr "Número mínimo de transacciones abiertas concurrentes antes de efectuar «commit_delay»." -#: utils/misc/guc_tables.c:2868 +#: utils/misc/guc_tables.c:2995 msgid "Sets the number of digits displayed for floating-point values." msgstr "Ajustar el número de dígitos mostrados para valores de coma flotante." -#: utils/misc/guc_tables.c:2869 +#: 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 "Esto afecta los tipos real, de doble precisión, y geométricos. Un valor del parámetro cero o negativo se agrega a la cantidad estándar de dígitos (FLT_DIG o DBL_DIG, según sea apropiado). Cualquier valor mayor que cero selecciona el modo de salida preciso." -#: utils/misc/guc_tables.c:2881 +#: 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 "Establece el tiempo mínimo de ejecución a partir del cual se registra una muestra de la sentencia. El muestreo es determinado por log_statement_sample_rate." -#: utils/misc/guc_tables.c:2884 +#: utils/misc/guc_tables.c:3011 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Cero registra una muestra de todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc_tables.c:2894 +#: utils/misc/guc_tables.c:3021 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Establece el tiempo mínimo de ejecución a partir del cual se registran todas las sentencias." -#: utils/misc/guc_tables.c:2896 +#: utils/misc/guc_tables.c:3023 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc_tables.c:2906 +#: utils/misc/guc_tables.c:3033 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc_tables.c:2908 +#: utils/misc/guc_tables.c:3035 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Cero registra todas las acciones. -1 desactiva el registro de autovacuum." -#: utils/misc/guc_tables.c:2918 +#: utils/misc/guc_tables.c:3045 msgid "Sets the maximum length in bytes of data logged for bind parameter values when logging statements." msgstr "Define el largo máximo en bytes de valores de parámetros «bind» enviados al log al registrar sentencias." -#: utils/misc/guc_tables.c:2920 utils/misc/guc_tables.c:2932 +#: utils/misc/guc_tables.c:3047 utils/misc/guc_tables.c:3059 msgid "-1 to print values in full." msgstr "-1 para mostrar los valores completos." -#: utils/misc/guc_tables.c:2930 +#: 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 "Define el largo máximo en bytes de valores de parámetros «bind» enviados al log, en caso de error." -#: utils/misc/guc_tables.c:2942 +#: utils/misc/guc_tables.c:3069 msgid "Background writer sleep time between rounds." msgstr "Tiempo de descanso entre rondas del background writer" -#: utils/misc/guc_tables.c:2953 +#: utils/misc/guc_tables.c:3080 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Número máximo de páginas LRU a escribir en cada ronda del background writer" -#: utils/misc/guc_tables.c:2976 +#: utils/misc/guc_tables.c:3103 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Cantidad máxima de peticiones simultáneas que pueden ser manejadas eficientemente por el sistema de disco." -#: utils/misc/guc_tables.c:2990 -msgid "A variant of effective_io_concurrency that is used for maintenance work." -msgstr "Una variante de effective_io_concurrency que se usa para tareas de mantención." +#: utils/misc/guc_tables.c:3117 +msgid "A variant of \"effective_io_concurrency\" that is used for maintenance work." +msgstr "Una variante de «effective_io_concurrency» que se usa para tareas de mantención." -#: utils/misc/guc_tables.c:3016 +#: utils/misc/guc_tables.c:3132 +msgid "Limit on the size of data reads and writes." +msgstr "Límite del tamaño de lecturas y escrituras de datos." + +#: utils/misc/guc_tables.c:3157 msgid "Maximum number of concurrent worker processes." msgstr "Número máximo de procesos ayudantes concurrentes." -#: utils/misc/guc_tables.c:3028 +#: utils/misc/guc_tables.c:3169 msgid "Maximum number of logical replication worker processes." msgstr "Número máximo de procesos ayudantes de replicación lógica." -#: utils/misc/guc_tables.c:3040 +#: utils/misc/guc_tables.c:3181 msgid "Maximum number of table synchronization workers per subscription." msgstr "Número máximo de procesos ayudantes de sincronización por suscripción." -#: utils/misc/guc_tables.c:3052 -#, fuzzy -#| msgid "Maximum number of table synchronization workers per subscription." +#: utils/misc/guc_tables.c:3193 msgid "Maximum number of parallel apply workers per subscription." -msgstr "Número máximo de procesos ayudantes de sincronización por suscripción." +msgstr "Número máximo de procesos ayudantes de “apply” por suscripción." -#: utils/misc/guc_tables.c:3062 -#, fuzzy -#| msgid "Sets the maximum time to wait for WAL replication." +#: utils/misc/guc_tables.c:3203 msgid "Sets the amount of time to wait before forcing log file rotation." -msgstr "Define el tiempo máximo a esperar la replicación de WAL." +msgstr "Define el tiempo a esperar antes de forzar la rotación del archivo de registro del servidor." -#: utils/misc/guc_tables.c:3074 -#, fuzzy -#| msgid "Sets the maximum WAL size that can be reserved by replication slots." +#: utils/misc/guc_tables.c:3215 msgid "Sets the maximum size a log file can reach before being rotated." -msgstr "Define el tamaño máximo de WAL que puede ser reservado por slots de replicación." +msgstr "Define el tamaño máximo que un archivo de registro del servidor puede alcanzar antes de ser rotado." -#: utils/misc/guc_tables.c:3086 +#: utils/misc/guc_tables.c:3227 msgid "Shows the maximum number of function arguments." msgstr "Muestra la cantidad máxima de argumentos de funciones." -#: utils/misc/guc_tables.c:3097 +#: utils/misc/guc_tables.c:3238 msgid "Shows the maximum number of index keys." msgstr "Muestra la cantidad máxima de claves de índices." -#: utils/misc/guc_tables.c:3108 +#: utils/misc/guc_tables.c:3249 msgid "Shows the maximum identifier length." msgstr "Muestra el largo máximo de identificadores." -#: utils/misc/guc_tables.c:3119 +#: utils/misc/guc_tables.c:3260 msgid "Shows the size of a disk block." msgstr "Muestra el tamaño de un bloque de disco." -#: utils/misc/guc_tables.c:3130 +#: utils/misc/guc_tables.c:3271 msgid "Shows the number of pages per disk file." msgstr "Muestra el número de páginas por archivo en disco." -#: utils/misc/guc_tables.c:3141 +#: utils/misc/guc_tables.c:3282 msgid "Shows the block size in the write ahead log." msgstr "Muestra el tamaño de bloque en el write-ahead log." -#: utils/misc/guc_tables.c:3152 +#: utils/misc/guc_tables.c:3293 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Define el tiempo a esperar antes de reintentar obtener WAL después de un intento fallido." -#: utils/misc/guc_tables.c:3164 +#: utils/misc/guc_tables.c:3305 msgid "Shows the size of write ahead log segments." msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc_tables.c:3177 +#: utils/misc/guc_tables.c:3318 +msgid "Time for which WAL summary files should be kept." +msgstr "Período durante el cual se deberían conservar los archivos de sumarización de WAL." + +#: utils/misc/guc_tables.c:3331 msgid "Time to sleep between autovacuum runs." msgstr "Tiempo de descanso entre ejecuciones de autovacuum." -#: utils/misc/guc_tables.c:3187 +#: utils/misc/guc_tables.c:3341 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Número mínimo de updates o deletes antes de ejecutar vacuum." -#: utils/misc/guc_tables.c:3196 +#: utils/misc/guc_tables.c:3350 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Número mínimo de inserciones de tuplas antes de ejecutar vacuum, o -1 para desactivar vacuums por inserciones." -#: utils/misc/guc_tables.c:3205 +#: utils/misc/guc_tables.c:3359 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc_tables.c:3215 +#: utils/misc/guc_tables.c:3369 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." -msgstr "Edad a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de transacción." +msgstr "Edad a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por “wraparound” de ID de transacción." -#: utils/misc/guc_tables.c:3227 +#: utils/misc/guc_tables.c:3381 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." -msgstr "Edad de multixact a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de multixacts." +msgstr "Edad de multixact a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por “wraparound” de ID de multixacts." -#: utils/misc/guc_tables.c:3237 +#: utils/misc/guc_tables.c:3391 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Define la cantidad máxima de procesos «autovacuum worker» simultáneos." -#: utils/misc/guc_tables.c:3247 +#: utils/misc/guc_tables.c:3401 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Cantidad máxima de procesos ayudantes paralelos por operación de mantención." -#: utils/misc/guc_tables.c:3257 +#: utils/misc/guc_tables.c:3411 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Cantidad máxima de locks de predicado por nodo de ejecución." -#: utils/misc/guc_tables.c:3268 +#: utils/misc/guc_tables.c:3422 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Define la cantidad máxima de procesos ayudantes que pueden estar activos en un momento dado." -#: utils/misc/guc_tables.c:3279 +#: utils/misc/guc_tables.c:3433 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Establece el límite de memoria que cada proceso «autovacuum worker» usará." -#: utils/misc/guc_tables.c:3290 -msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." -msgstr "Tiempo antes de que un snapshot sea demasiado antiguo para leer páginas después de que el snapshot fue tomado." - -#: utils/misc/guc_tables.c:3291 -msgid "A value of -1 disables this feature." -msgstr "El valor -1 desactiva esta característica." - -#: utils/misc/guc_tables.c:3301 +#: utils/misc/guc_tables.c:3444 msgid "Time between issuing TCP keepalives." msgstr "Tiempo entre cada emisión de TCP keepalive." -#: utils/misc/guc_tables.c:3302 utils/misc/guc_tables.c:3313 -#: utils/misc/guc_tables.c:3437 +#: 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 "Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc_tables.c:3312 +#: utils/misc/guc_tables.c:3455 msgid "Time between TCP keepalive retransmits." msgstr "Tiempo entre retransmisiones TCP keepalive." -#: utils/misc/guc_tables.c:3323 +#: utils/misc/guc_tables.c:3466 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renegociación SSL ya no está soportada; esto sólo puede ser 0." -#: utils/misc/guc_tables.c:3334 +#: utils/misc/guc_tables.c:3477 msgid "Maximum number of TCP keepalive retransmits." msgstr "Cantidad máxima de retransmisiones TCP keepalive." -#: utils/misc/guc_tables.c:3335 +#: 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 "" +msgstr "Número de retransmisiones consecutivas de keepalive que pueden ser perdidas antes que una conexión se considere muerta. Cero usa el valor por omisión del sistema." -#: utils/misc/guc_tables.c:3346 +#: utils/misc/guc_tables.c:3489 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Define el máximo de resultados permitidos por búsquedas exactas con GIN." -#: utils/misc/guc_tables.c:3357 +#: utils/misc/guc_tables.c:3500 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Define la suposición del optimizador sobre el tamaño total de los caches de datos." -#: utils/misc/guc_tables.c:3358 +#: 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 "Esto es, el tamaño total de caches (cache del kernel y búfers compartidos) usados por archivos de datos de PostgreSQL. Esto se mide en páginas de disco, que normalmente son de 8 kB cada una." -#: utils/misc/guc_tables.c:3369 +#: utils/misc/guc_tables.c:3512 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Define la cantidad mínima de datos en una tabla para un recorrido paralelo." -#: utils/misc/guc_tables.c:3370 +#: 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 "Si el planificador estima que leerá un número de páginas de tabla demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc_tables.c:3380 +#: utils/misc/guc_tables.c:3523 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Define la cantidad mínima de datos en un índice para un recorrido paralelo." -#: utils/misc/guc_tables.c:3381 +#: 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 "Si el planificador estima que leerá un número de páginas de índice demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc_tables.c:3392 +#: utils/misc/guc_tables.c:3535 msgid "Shows the server version as an integer." msgstr "Muestra la versión del servidor como un número entero." -#: utils/misc/guc_tables.c:3403 +#: utils/misc/guc_tables.c:3546 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Registra el uso de archivos temporales que crezcan más allá de este número de kilobytes." -#: utils/misc/guc_tables.c:3404 +#: utils/misc/guc_tables.c:3547 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Cero registra todos los archivos. El valor por omisión es -1 (lo cual desactiva el registro)." -#: utils/misc/guc_tables.c:3414 +#: utils/misc/guc_tables.c:3557 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Tamaño reservado para pg_stat_activity.query, en bytes." -#: utils/misc/guc_tables.c:3425 +#: utils/misc/guc_tables.c:3568 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Define el tamaño máximo de la lista de pendientes de un índice GIN." -#: utils/misc/guc_tables.c:3436 +#: utils/misc/guc_tables.c:3579 msgid "TCP user timeout." msgstr "Tiempo de expiración de TCP." -#: utils/misc/guc_tables.c:3447 +#: utils/misc/guc_tables.c:3590 msgid "The size of huge page that should be requested." msgstr "El tamaño de huge page que se debería solicitar." -#: utils/misc/guc_tables.c:3458 +#: utils/misc/guc_tables.c:3601 msgid "Aggressively flush system caches for debugging purposes." msgstr "Escribir cachés de sistema de forma agresiva para propósitos de depuración." -#: utils/misc/guc_tables.c:3481 +#: utils/misc/guc_tables.c:3624 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Establece el intervalo entre revisiones de desconexión mientras se ejecutan consultas." -#: utils/misc/guc_tables.c:3492 +#: utils/misc/guc_tables.c:3635 msgid "Time between progress updates for long-running startup operations." msgstr "Tiempo a esperar entre actualizaciones para operaciones largas durante el inicio." -#: utils/misc/guc_tables.c:3494 -#, fuzzy -#| msgid "Zero prints all queries. -1 turns this feature off." +#: utils/misc/guc_tables.c:3637 msgid "0 turns this feature off." -msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." +msgstr "Cero desactiva esta característica." -#: utils/misc/guc_tables.c:3504 -#, fuzzy -#| msgid "Sets the seed for random-number generation." +#: utils/misc/guc_tables.c:3647 msgid "Sets the iteration count for SCRAM secret generation." -msgstr "Semilla para la generación de números aleatorios." +msgstr "Define la cantidad de iteraciones para generación de secretos SCRAM." -#: utils/misc/guc_tables.c:3524 +#: utils/misc/guc_tables.c:3667 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Estimación del costo de una página leída secuencialmente." -#: utils/misc/guc_tables.c:3535 +#: utils/misc/guc_tables.c:3678 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Estimación del costo de una página leída no secuencialmente." -#: utils/misc/guc_tables.c:3546 +#: utils/misc/guc_tables.c:3689 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Estimación del costo de procesar cada tupla (fila)." -#: utils/misc/guc_tables.c:3557 +#: 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 "Estimación del costo de procesar cada fila de índice durante un recorrido de índice." -#: utils/misc/guc_tables.c:3568 +#: utils/misc/guc_tables.c:3711 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Estimación del costo de procesar cada operador o llamada a función." -#: utils/misc/guc_tables.c:3579 +#: 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 "Estimación del costo de pasar cada tupla (fila) desde un proceso ayudante al proceso servidor principal." -#: utils/misc/guc_tables.c:3590 +#: utils/misc/guc_tables.c:3733 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Estimación del costo de lanzar procesos ayudantes para consultas en paralelo." -#: utils/misc/guc_tables.c:3602 +#: utils/misc/guc_tables.c:3745 msgid "Perform JIT compilation if query is more expensive." msgstr "Ejecutar compilación JIT si la consulta es más cara." -#: utils/misc/guc_tables.c:3603 +#: utils/misc/guc_tables.c:3746 msgid "-1 disables JIT compilation." msgstr "-1 inhabilita compilación JIT." -#: utils/misc/guc_tables.c:3613 +#: utils/misc/guc_tables.c:3756 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Optimizar funciones compiladas en tiempo de ejecución (JIT) si la consulta es más cara." -#: utils/misc/guc_tables.c:3614 +#: utils/misc/guc_tables.c:3757 msgid "-1 disables optimization." msgstr "-1 inhabilita la optimización." -#: utils/misc/guc_tables.c:3624 +#: utils/misc/guc_tables.c:3767 msgid "Perform JIT inlining if query is more expensive." msgstr "Ejecutar «inlining» JIT si la consulta es más cara." -#: utils/misc/guc_tables.c:3625 +#: utils/misc/guc_tables.c:3768 msgid "-1 disables inlining." msgstr "-1 inhabilita el «inlining»." -#: utils/misc/guc_tables.c:3635 +#: 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 "Estimación de la fracción de filas de un cursor que serán extraídas." -#: utils/misc/guc_tables.c:3647 -#, fuzzy -#| msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." +#: utils/misc/guc_tables.c:3790 msgid "Sets the planner's estimate of the average size of a recursive query's working table." -msgstr "Estimación de la fracción de filas de un cursor que serán extraídas." +msgstr "Estimación del tamaño promedio de la tabla de trabajo de una consulta recursiva." -#: utils/misc/guc_tables.c:3659 +#: utils/misc/guc_tables.c:3802 msgid "GEQO: selective pressure within the population." msgstr "GEQO: presión selectiva dentro de la población." -#: utils/misc/guc_tables.c:3670 +#: utils/misc/guc_tables.c:3813 msgid "GEQO: seed for random path selection." msgstr "GEQO: semilla para la selección aleatoria de caminos." -#: utils/misc/guc_tables.c:3681 -msgid "Multiple of work_mem to use for hash tables." -msgstr "Múltiplo de work_mem para el uso de tablas de hash." +#: utils/misc/guc_tables.c:3824 +msgid "Multiple of \"work_mem\" to use for hash tables." +msgstr "Múltiplo de «work_mem» para el uso de tablas de hash." -#: utils/misc/guc_tables.c:3692 +#: utils/misc/guc_tables.c:3835 msgid "Multiple of the average buffer usage to free per round." msgstr "Múltiplo del uso promedio de búfers que liberar en cada ronda." -#: utils/misc/guc_tables.c:3702 +#: utils/misc/guc_tables.c:3845 msgid "Sets the seed for random-number generation." msgstr "Semilla para la generación de números aleatorios." -#: utils/misc/guc_tables.c:3713 +#: utils/misc/guc_tables.c:3856 msgid "Vacuum cost delay in milliseconds." msgstr "Tiempo de descanso de vacuum en milisegundos." -#: utils/misc/guc_tables.c:3724 +#: utils/misc/guc_tables.c:3867 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Tiempo de descanso de vacuum en milisegundos, para autovacuum." -#: utils/misc/guc_tables.c:3735 +#: utils/misc/guc_tables.c:3878 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Número de updates o deletes de tuplas antes de ejecutar un vacuum, como fracción de reltuples." -#: utils/misc/guc_tables.c:3745 +#: utils/misc/guc_tables.c:3888 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Número de inserts de tuplas antes de ejecutar un vacuum, como fracción de reltuples." -#: utils/misc/guc_tables.c:3755 +#: utils/misc/guc_tables.c:3898 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze, como fracción de reltuples." -#: utils/misc/guc_tables.c:3765 +#: utils/misc/guc_tables.c:3908 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." -msgstr "Tiempo utilizado en escribir páginas «sucias» durante los puntos de control, medido como fracción del intervalo del punto de control." +msgstr "Tiempo utilizado en escribir páginas «sucias» durante los puntos de control, medido como fracción del intervalo del checkpoint." -#: utils/misc/guc_tables.c:3775 -msgid "Fraction of statements exceeding log_min_duration_sample to be logged." -msgstr "Fracción de sentencias que duren más de log_min_duration_sample a ser registradas." +#: utils/misc/guc_tables.c:3918 +msgid "Fraction of statements exceeding \"log_min_duration_sample\" to be logged." +msgstr "Fracción de sentencias que duren más de «log_min_duration_sample» a ser registradas." -#: utils/misc/guc_tables.c:3776 +#: utils/misc/guc_tables.c:3919 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Use un valor entre 0.0 (no registrar nunca) y 1.0 (registrar siempre)." -#: utils/misc/guc_tables.c:3785 +#: utils/misc/guc_tables.c:3928 msgid "Sets the fraction of transactions from which to log all statements." msgstr "Define la fracción de transacciones desde la cual registrar en el log todas las sentencias." -#: utils/misc/guc_tables.c:3786 +#: 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 "Use un valor entre 0.0 (nunca registrar) y 1.0 (registrar todas las sentencias de todas las transacciones)." -#: utils/misc/guc_tables.c:3805 +#: utils/misc/guc_tables.c:3948 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc_tables.c:3806 +#: utils/misc/guc_tables.c:3949 msgid "This is used only if \"archive_library\" is not set." msgstr "Esto sólo se utiliza si «archive_library» no está definido." -#: utils/misc/guc_tables.c:3815 -#, fuzzy -#| msgid "Sets the shell command that will be called to archive a WAL file." +#: utils/misc/guc_tables.c:3958 msgid "Sets the library that will be called to archive a WAL file." -msgstr "Orden de shell que se invocará para archivar un archivo WAL." +msgstr "Biblioteca que se invocará para archivar un archivo WAL." -#: utils/misc/guc_tables.c:3816 +#: utils/misc/guc_tables.c:3959 msgid "An empty string indicates that \"archive_command\" should be used." msgstr "Una cadena vacía indica que «archive_command» debería usarse." -#: utils/misc/guc_tables.c:3825 +#: utils/misc/guc_tables.c:3968 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Orden de shell que se invocará para recuperar un archivo WAL archivado." -#: utils/misc/guc_tables.c:3835 +#: utils/misc/guc_tables.c:3978 msgid "Sets the shell command that will be executed at every restart point." msgstr "Orden de shell que se invocará en cada «restart point»." -#: utils/misc/guc_tables.c:3845 +#: utils/misc/guc_tables.c:3988 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Orden de shell que se invocará una vez al terminar la recuperación." -#: utils/misc/guc_tables.c:3855 +#: utils/misc/guc_tables.c:3998 msgid "Specifies the timeline to recover into." msgstr "Especifica la línea de tiempo a la cual recuperar." -#: utils/misc/guc_tables.c:3865 +#: utils/misc/guc_tables.c:4008 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Defina a «immediate» para terminar la recuperación en cuando se alcance el estado consistente." -#: utils/misc/guc_tables.c:3874 +#: utils/misc/guc_tables.c:4017 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Define el ID de transacción hasta el cual se ejecutará la recuperación." -#: utils/misc/guc_tables.c:3883 +#: utils/misc/guc_tables.c:4026 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Define la marca de tiempo hasta la cual se ejecutará la recuperación." -#: utils/misc/guc_tables.c:3892 +#: utils/misc/guc_tables.c:4035 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Define el nombre del punto de restauración hasta el cual se ejecutará la recuperación." -#: utils/misc/guc_tables.c:3901 +#: utils/misc/guc_tables.c:4044 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Define el LSN de la ubicación de WAL hasta la cual se ejecutará la recuperación." -#: utils/misc/guc_tables.c:3911 +#: utils/misc/guc_tables.c:4054 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Define la cadena de conexión que se usará para conectarse al servidor de origen." -#: utils/misc/guc_tables.c:3922 +#: utils/misc/guc_tables.c:4065 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Define el nombre del slot de replicación a utilizar en el servidor de origen." -#: utils/misc/guc_tables.c:3932 +#: utils/misc/guc_tables.c:4075 msgid "Sets the client's character set encoding." msgstr "Codificación del juego de caracteres del cliente." -#: utils/misc/guc_tables.c:3943 +#: utils/misc/guc_tables.c:4086 msgid "Controls information prefixed to each log line." msgstr "Controla el prefijo que antecede cada línea registrada." -#: utils/misc/guc_tables.c:3944 +#: utils/misc/guc_tables.c:4087 msgid "If blank, no prefix is used." msgstr "si está en blanco, no se usa prefijo." -#: utils/misc/guc_tables.c:3953 +#: utils/misc/guc_tables.c:4096 msgid "Sets the time zone to use in log messages." msgstr "Define el huso horario usando en los mensajes registrados." -#: utils/misc/guc_tables.c:3963 +#: utils/misc/guc_tables.c:4106 msgid "Sets the display format for date and time values." msgstr "Formato de salida para valores de horas y fechas." -#: utils/misc/guc_tables.c:3964 +#: utils/misc/guc_tables.c:4107 msgid "Also controls interpretation of ambiguous date inputs." msgstr "También controla la interpretación de entradas ambiguas de fechas" -#: utils/misc/guc_tables.c:3975 +#: utils/misc/guc_tables.c:4118 msgid "Sets the default table access method for new tables." msgstr "Define el método de acceso a tablas por omisión para nuevas tablas." -#: utils/misc/guc_tables.c:3986 +#: utils/misc/guc_tables.c:4129 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Define el tablespace en el cual crear tablas e índices." -#: utils/misc/guc_tables.c:3987 +#: utils/misc/guc_tables.c:4130 msgid "An empty string selects the database's default tablespace." msgstr "Una cadena vacía especifica el tablespace por omisión de la base de datos." -#: utils/misc/guc_tables.c:3997 +#: utils/misc/guc_tables.c:4140 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Define el/los tablespace/s en el cual crear tablas temporales y archivos de ordenamiento." -#: utils/misc/guc_tables.c:4008 +#: utils/misc/guc_tables.c:4151 msgid "Sets whether a CREATEROLE user automatically grants the role to themselves, and with which options." -msgstr "" +msgstr "define si un rol con CREATEROLE automáticamente se otorga ese rol a si mismo, y con qué opciones." -#: utils/misc/guc_tables.c:4020 +#: utils/misc/guc_tables.c:4163 msgid "Sets the path for dynamically loadable modules." msgstr "Ruta para módulos dinámicos." -#: utils/misc/guc_tables.c:4021 +#: 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 "Si se necesita abrir un módulo dinámico y el nombre especificado no tiene un componente de directorio (es decir, no contiene un slash), el sistema buscará el archivo especificado en esta ruta." -#: utils/misc/guc_tables.c:4034 +#: utils/misc/guc_tables.c:4177 msgid "Sets the location of the Kerberos server key file." msgstr "Ubicación del archivo de llave del servidor Kerberos." -#: utils/misc/guc_tables.c:4045 +#: utils/misc/guc_tables.c:4188 msgid "Sets the Bonjour service name." msgstr "Nombre del servicio Bonjour." -#: utils/misc/guc_tables.c:4057 -msgid "Shows the collation order locale." -msgstr "Configuración regional de ordenamiento de cadenas (collation)." - -#: utils/misc/guc_tables.c:4068 -msgid "Shows the character classification and case conversion locale." -msgstr "Configuración regional de clasificación de caracteres y conversión de mayúsculas." - -#: utils/misc/guc_tables.c:4079 +#: utils/misc/guc_tables.c:4198 msgid "Sets the language in which messages are displayed." msgstr "Idioma en el que se despliegan los mensajes." -#: utils/misc/guc_tables.c:4089 +#: utils/misc/guc_tables.c:4208 msgid "Sets the locale for formatting monetary amounts." msgstr "Configuración regional para formatos de moneda." -#: utils/misc/guc_tables.c:4099 +#: utils/misc/guc_tables.c:4218 msgid "Sets the locale for formatting numbers." msgstr "Configuración regional para formatos de números." -#: utils/misc/guc_tables.c:4109 +#: utils/misc/guc_tables.c:4228 msgid "Sets the locale for formatting date and time values." msgstr "Configuración regional para formatos de horas y fechas." -#: utils/misc/guc_tables.c:4119 +#: utils/misc/guc_tables.c:4238 msgid "Lists shared libraries to preload into each backend." msgstr "Bibliotecas compartidas a precargar en cada proceso." -#: utils/misc/guc_tables.c:4130 +#: utils/misc/guc_tables.c:4249 msgid "Lists shared libraries to preload into server." msgstr "Bibliotecas compartidas a precargar en el servidor." -#: utils/misc/guc_tables.c:4141 +#: utils/misc/guc_tables.c:4260 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Bibliotecas compartidas no privilegiadas a precargar en cada proceso." -#: utils/misc/guc_tables.c:4152 +#: utils/misc/guc_tables.c:4271 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Orden de búsqueda en schemas para nombres que no especifican schema." -#: utils/misc/guc_tables.c:4164 +#: utils/misc/guc_tables.c:4283 msgid "Shows the server (database) character set encoding." msgstr "Muestra la codificación de caracteres del servidor (base de datos)." -#: utils/misc/guc_tables.c:4176 +#: utils/misc/guc_tables.c:4295 msgid "Shows the server version." msgstr "Versión del servidor." -#: utils/misc/guc_tables.c:4188 +#: utils/misc/guc_tables.c:4307 msgid "Sets the current role." msgstr "Define el rol actual." -#: utils/misc/guc_tables.c:4200 +#: utils/misc/guc_tables.c:4319 msgid "Sets the session user name." msgstr "Define el nombre del usuario de sesión." -#: utils/misc/guc_tables.c:4211 +#: utils/misc/guc_tables.c:4330 msgid "Sets the destination for server log output." msgstr "Define el destino de la salida del registro del servidor." -#: utils/misc/guc_tables.c:4212 +#: utils/misc/guc_tables.c:4331 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\", and \"eventlog\", depending on the platform." -msgstr "" +msgstr "Son aceptables combinaciones de «stderr», «syslog», «csvlog», «jsonlog» y «eventlog», dependendiendo de la plataforma." -#: utils/misc/guc_tables.c:4223 +#: utils/misc/guc_tables.c:4342 msgid "Sets the destination directory for log files." msgstr "Define el directorio de destino de los archivos del registro del servidor." -#: utils/misc/guc_tables.c:4224 +#: utils/misc/guc_tables.c:4343 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Puede ser una ruta relativa al directorio de datos o una ruta absoluta." -#: utils/misc/guc_tables.c:4234 +#: utils/misc/guc_tables.c:4353 msgid "Sets the file name pattern for log files." msgstr "Define el patrón para los nombres de archivo del registro del servidor." -#: utils/misc/guc_tables.c:4245 +#: utils/misc/guc_tables.c:4364 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Nombre de programa para identificar PostgreSQL en mensajes de syslog." -#: utils/misc/guc_tables.c:4256 +#: utils/misc/guc_tables.c:4375 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Nombre de programa para identificar PostgreSQL en mensajes del log de eventos." -#: utils/misc/guc_tables.c:4267 +#: utils/misc/guc_tables.c:4386 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Huso horario para desplegar e interpretar valores de tiempo." -#: utils/misc/guc_tables.c:4277 +#: utils/misc/guc_tables.c:4396 msgid "Selects a file of time zone abbreviations." msgstr "Selecciona un archivo de abreviaciones de huso horario." -#: utils/misc/guc_tables.c:4287 +#: utils/misc/guc_tables.c:4406 msgid "Sets the owning group of the Unix-domain socket." msgstr "Grupo dueño del socket de dominio Unix." -#: utils/misc/guc_tables.c:4288 +#: utils/misc/guc_tables.c:4407 msgid "The owning user of the socket is always the user that starts the server." msgstr "El usuario dueño del socket siempre es el usuario que inicia el servidor." -#: utils/misc/guc_tables.c:4298 +#: utils/misc/guc_tables.c:4417 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Directorios donde se crearán los sockets de dominio Unix." -#: utils/misc/guc_tables.c:4309 +#: utils/misc/guc_tables.c:4428 msgid "Sets the host name or IP address(es) to listen to." msgstr "Define el nombre de anfitrión o dirección IP en la cual escuchar." -#: utils/misc/guc_tables.c:4324 +#: utils/misc/guc_tables.c:4443 msgid "Sets the server's data directory." msgstr "Define la ubicación del directorio de datos." -#: utils/misc/guc_tables.c:4335 +#: utils/misc/guc_tables.c:4454 msgid "Sets the server's main configuration file." msgstr "Define la ubicación del archivo principal de configuración del servidor." -#: utils/misc/guc_tables.c:4346 +#: utils/misc/guc_tables.c:4465 msgid "Sets the server's \"hba\" configuration file." msgstr "Define la ubicación del archivo de configuración «hba» del servidor." -#: utils/misc/guc_tables.c:4357 +#: utils/misc/guc_tables.c:4476 msgid "Sets the server's \"ident\" configuration file." msgstr "Define la ubicación del archivo de configuración «ident» del servidor." -#: utils/misc/guc_tables.c:4368 +#: utils/misc/guc_tables.c:4487 msgid "Writes the postmaster PID to the specified file." msgstr "Registra el PID de postmaster en el archivo especificado." -#: utils/misc/guc_tables.c:4379 +#: utils/misc/guc_tables.c:4498 msgid "Shows the name of the SSL library." msgstr "Muestra el nombre de la biblioteca SSL." -#: utils/misc/guc_tables.c:4394 +#: utils/misc/guc_tables.c:4513 msgid "Location of the SSL server certificate file." msgstr "Ubicación del archivo de certificado SSL del servidor." -#: utils/misc/guc_tables.c:4404 +#: utils/misc/guc_tables.c:4523 msgid "Location of the SSL server private key file." msgstr "Ubicación del archivo de la llave SSL privada del servidor." -#: utils/misc/guc_tables.c:4414 +#: utils/misc/guc_tables.c:4533 msgid "Location of the SSL certificate authority file." msgstr "Ubicación del archivo de autoridad certificadora SSL." -#: utils/misc/guc_tables.c:4424 +#: utils/misc/guc_tables.c:4543 msgid "Location of the SSL certificate revocation list file." msgstr "Ubicación del archivo de lista de revocación de certificados SSL" -#: utils/misc/guc_tables.c:4434 +#: utils/misc/guc_tables.c:4553 msgid "Location of the SSL certificate revocation list directory." msgstr "Ubicación del directorio de lista de revocación de certificados SSL" -#: utils/misc/guc_tables.c:4444 +#: utils/misc/guc_tables.c:4563 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Número de standbys sincrónicos y lista de nombres de los potenciales sincrónicos." -#: utils/misc/guc_tables.c:4455 +#: utils/misc/guc_tables.c:4574 msgid "Sets default text search configuration." msgstr "Define la configuración de búsqueda en texto por omisión." -#: utils/misc/guc_tables.c:4465 +#: utils/misc/guc_tables.c:4584 msgid "Sets the list of allowed SSL ciphers." msgstr "Define la lista de cifrados SSL permitidos." -#: utils/misc/guc_tables.c:4480 +#: utils/misc/guc_tables.c:4599 msgid "Sets the curve to use for ECDH." msgstr "Define la curva a usar para ECDH." -#: utils/misc/guc_tables.c:4495 +#: utils/misc/guc_tables.c:4614 msgid "Location of the SSL DH parameters file." msgstr "Ubicación del archivo de parámetros DH para SSL." -#: utils/misc/guc_tables.c:4506 +#: utils/misc/guc_tables.c:4625 msgid "Command to obtain passphrases for SSL." msgstr "Orden para obtener frases clave para SSL." -#: utils/misc/guc_tables.c:4517 +#: utils/misc/guc_tables.c:4636 msgid "Sets the application name to be reported in statistics and logs." msgstr "Define el nombre de aplicación a reportarse en estadísticas y logs." -#: utils/misc/guc_tables.c:4528 +#: utils/misc/guc_tables.c:4647 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Define el nombre del clúster, el cual se incluye en el título de proceso." -#: utils/misc/guc_tables.c:4539 +#: utils/misc/guc_tables.c:4658 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Define los gestores de recursos WAL para los cuales hacer verificaciones de consistencia WAL." -#: utils/misc/guc_tables.c:4540 +#: 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 "Se registrarán imágenes de página completa para todos los bloques de datos, y comparados con los resultados de la aplicación de WAL." -#: utils/misc/guc_tables.c:4550 +#: utils/misc/guc_tables.c:4669 msgid "JIT provider to use." msgstr "Proveedor JIT a usar." -#: utils/misc/guc_tables.c:4561 +#: utils/misc/guc_tables.c:4680 msgid "Log backtrace for errors in these functions." msgstr "Registrar el backtrace para errores que se produzcan en estas funciones." -#: utils/misc/guc_tables.c:4572 +#: utils/misc/guc_tables.c:4691 msgid "Use direct I/O for file access." -msgstr "" +msgstr "Usar I/O directo para accesos a archivos." + +#: utils/misc/guc_tables.c:4702 +msgid "Lists streaming replication standby server replication slot names that logical WAL sender processes will wait for." +msgstr "Lista los nombres de slots de replicación de servidores standby a los que los procesos “WAL sender” esperarán." + +#: 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 "Los procesos “WAL sender” lógicos enviarán cambios decodificados a los “plugins” de salida sólo después de que los slots de replicación especificados han confirmado recibir el WAL." + +#: utils/misc/guc_tables.c:4716 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "Prohibir acceso a las relaciones no de sistema de los tipos especificados." -#: utils/misc/guc_tables.c:4592 +#: utils/misc/guc_tables.c:4736 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Define si «\\'» está permitido en literales de cadena." -#: utils/misc/guc_tables.c:4602 +#: utils/misc/guc_tables.c:4746 msgid "Sets the output format for bytea." msgstr "Formato de salida para bytea." -#: utils/misc/guc_tables.c:4612 +#: utils/misc/guc_tables.c:4756 msgid "Sets the message levels that are sent to the client." msgstr "Nivel de mensajes enviados al cliente." -#: utils/misc/guc_tables.c:4613 utils/misc/guc_tables.c:4709 -#: utils/misc/guc_tables.c:4720 utils/misc/guc_tables.c:4792 +#: 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 "Cada nivel incluye todos los niveles que lo siguen. Mientras más posterior el nivel, menos mensajes se enviarán." -#: utils/misc/guc_tables.c:4623 +#: utils/misc/guc_tables.c:4767 msgid "Enables in-core computation of query identifiers." -msgstr "" +msgstr "Habilita el cálculo de identificadores de consulta." -#: utils/misc/guc_tables.c:4633 +#: utils/misc/guc_tables.c:4777 msgid "Enables the planner to use constraints to optimize queries." msgstr "Permitir el uso de restricciones para limitar los accesos a tablas." -#: utils/misc/guc_tables.c:4634 +#: utils/misc/guc_tables.c:4778 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Las tablas no serán recorridas si sus restricciones garantizan que ninguna fila coincidirá con la consulta." -#: utils/misc/guc_tables.c:4645 +#: utils/misc/guc_tables.c:4789 msgid "Sets the default compression method for compressible values." msgstr "Define el método de compresión por omisión para valores comprimibles." -#: utils/misc/guc_tables.c:4656 +#: utils/misc/guc_tables.c:4800 msgid "Sets the transaction isolation level of each new transaction." msgstr "Nivel de aislación (isolation level) de transacciones nuevas." -#: utils/misc/guc_tables.c:4666 +#: utils/misc/guc_tables.c:4810 msgid "Sets the current transaction's isolation level." msgstr "Define el nivel de aislación de la transacción en curso." -#: utils/misc/guc_tables.c:4677 +#: utils/misc/guc_tables.c:4821 msgid "Sets the display format for interval values." msgstr "Formato de salida para valores de intervalos." -#: utils/misc/guc_tables.c:4688 +#: utils/misc/guc_tables.c:4832 msgid "Log level for reporting invalid ICU locale strings." -msgstr "" +msgstr "Nivel de log a usar para reportar cadenas de configuración ICU no válidas." -#: utils/misc/guc_tables.c:4698 +#: utils/misc/guc_tables.c:4842 msgid "Sets the verbosity of logged messages." msgstr "Verbosidad de los mensajes registrados." -#: utils/misc/guc_tables.c:4708 +#: utils/misc/guc_tables.c:4852 msgid "Sets the message levels that are logged." msgstr "Nivel de mensajes registrados." -#: utils/misc/guc_tables.c:4719 +#: utils/misc/guc_tables.c:4863 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Registrar sentencias que generan error de nivel superior o igual a éste." -#: utils/misc/guc_tables.c:4730 +#: utils/misc/guc_tables.c:4874 msgid "Sets the type of statements logged." msgstr "Define el tipo de sentencias que se registran." -#: utils/misc/guc_tables.c:4740 +#: utils/misc/guc_tables.c:4884 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "«Facility» de syslog que se usará cuando syslog esté habilitado." -#: utils/misc/guc_tables.c:4751 +#: utils/misc/guc_tables.c:4895 msgid "Sets the session's behavior for triggers and rewrite rules." -msgstr "Define el comportamiento de la sesión con respecto a disparadores y reglas de reescritura." +msgstr "Define el comportamiento de la sesión con respecto a “triggers” y reglas de reescritura." -#: utils/misc/guc_tables.c:4761 +#: utils/misc/guc_tables.c:4905 msgid "Sets the current transaction's synchronization level." msgstr "Define el nivel de sincronización de la transacción en curso." -#: utils/misc/guc_tables.c:4771 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Permite el archivado de WAL usando archive_command." +#: utils/misc/guc_tables.c:4915 +msgid "Allows archiving of WAL files using \"archive_command\"." +msgstr "Permite el archivado de WAL usando «archive_command»." -#: utils/misc/guc_tables.c:4781 +#: utils/misc/guc_tables.c:4925 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Acción a ejecutar al alcanzar el destino de recuperación." -#: utils/misc/guc_tables.c:4791 -msgid "Enables logging of recovery-related debugging information." -msgstr "Recolectar información de depuración relacionada con la recuperación." - -#: utils/misc/guc_tables.c:4808 +#: utils/misc/guc_tables.c:4935 msgid "Collects function-level statistics on database activity." msgstr "Recolectar estadísticas de actividad de funciones en la base de datos." -#: utils/misc/guc_tables.c:4819 -#, fuzzy -#| msgid "Sets the default statistics target." +#: utils/misc/guc_tables.c:4946 msgid "Sets the consistency of accesses to statistics data." -msgstr "Definir el valor por omisión de toma de estadísticas." +msgstr "Definir la consistencia de accesos a los datos de estadísticas." -#: utils/misc/guc_tables.c:4829 +#: utils/misc/guc_tables.c:4956 msgid "Compresses full-page writes written in WAL file with specified method." -msgstr "" +msgstr "Comprime las páginas completas escritas a WAL (FPI) con el método especificado." -#: utils/misc/guc_tables.c:4839 +#: utils/misc/guc_tables.c:4966 msgid "Sets the level of information written to the WAL." msgstr "Establece el nivel de información escrita al WAL." -#: utils/misc/guc_tables.c:4849 +#: utils/misc/guc_tables.c:4976 msgid "Selects the dynamic shared memory implementation used." msgstr "Escoge la implementación de memoria compartida dinámica que se usará." -#: utils/misc/guc_tables.c:4859 +#: utils/misc/guc_tables.c:4986 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Escoge la implementación de memoria compartida dinámica que se usará para la región principal de memoria compartida." -#: utils/misc/guc_tables.c:4869 +#: utils/misc/guc_tables.c:4996 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Selecciona el método usado para forzar escritura de WAL a disco." -#: utils/misc/guc_tables.c:4879 +#: utils/misc/guc_tables.c:5006 msgid "Sets how binary values are to be encoded in XML." msgstr "Define cómo se codificarán los valores binarios en XML." -#: utils/misc/guc_tables.c:4889 +#: 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 "Define si los datos XML implícitos en operaciones de análisis y serialización serán considerados documentos o fragmentos de contenido." -#: utils/misc/guc_tables.c:4900 +#: utils/misc/guc_tables.c:5027 msgid "Use of huge pages on Linux or Windows." msgstr "Usar páginas grandes (huge) en Linux o Windows." -#: utils/misc/guc_tables.c:4910 -#, fuzzy -#| msgid "cannot execute %s during recovery" +#: utils/misc/guc_tables.c:5037 +msgid "Indicates the status of huge pages." +msgstr "Indica el estado de las “huge pages”." + +#: utils/misc/guc_tables.c:5048 msgid "Prefetch referenced blocks during recovery." -msgstr "no se puede ejecutar %s durante la recuperación" +msgstr "Pre-cargar bloques referenciados durante la recuperación." -#: utils/misc/guc_tables.c:4911 +#: utils/misc/guc_tables.c:5049 msgid "Look ahead in the WAL to find references to uncached data." msgstr "Busca adelantadamente en el WAL para encontrar referencias a datos que no están en cache." -#: utils/misc/guc_tables.c:4920 -#, fuzzy -#| msgid "Enables the planner's use of parallel append plans." +#: utils/misc/guc_tables.c:5058 msgid "Forces the planner's use parallel query nodes." -msgstr "Permitir el uso de planes «append» paralelos." +msgstr "Fuerza al optimizador a usar planes paralelos." -#: utils/misc/guc_tables.c:4921 -msgid "This can be useful for testing the parallel query infrastructure by forcing the planner to generate plans which contains nodes which perform tuple communication between workers and the main process." -msgstr "" +#: 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 "Esto puede usarse para verificar la infrastructura de consultas paralelas forzando al optimizar a generar planes que contienen nodos que utilizan la comunicación entre procesos hijos y el principal." -#: utils/misc/guc_tables.c:4933 +#: utils/misc/guc_tables.c:5071 msgid "Chooses the algorithm for encrypting passwords." msgstr "Escoge el algoritmo para cifrar contraseñas." -#: utils/misc/guc_tables.c:4943 +#: utils/misc/guc_tables.c:5081 msgid "Controls the planner's selection of custom or generic plan." msgstr "Controla la selección del optimizador de planes genéricos o «custom»." -#: utils/misc/guc_tables.c:4944 +#: 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 "Las sentencias preparadas pueden tener planes genéricos y «custom», y el optimizador intentará escoger cuál es mejor. Esto puede usarse para controlar manualmente el comportamiento." -#: utils/misc/guc_tables.c:4956 +#: utils/misc/guc_tables.c:5094 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Define la versión mínima del protocolo SSL/TLS a usar." -#: utils/misc/guc_tables.c:4968 +#: utils/misc/guc_tables.c:5106 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Define la versión máxima del protocolo SSL/TLS a usar." -#: utils/misc/guc_tables.c:4980 +#: utils/misc/guc_tables.c:5118 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "Establece el método para sincronizar el directorio de datos antes de la recuperación ante una caída." -#: utils/misc/guc_tables.c:4989 -msgid "Controls when to replicate or apply each change." -msgstr "" +#: utils/misc/guc_tables.c:5127 +msgid "Forces immediate streaming or serialization of changes in large transactions." +msgstr "Fuerza el flujo o serialización inmediatos de los cambios en transacciones grandes." -#: utils/misc/guc_tables.c:4990 +#: 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 "" +msgstr "En el publicador, permite serializar o transmitir en flujo cada cambio en la decodificación lógica. En el suscriptor, permite la serialización de todos los cambios a archivos y notifica a los procesos paralelos de “apply” para leerlos y aplicarlos al término de la transacción." #: utils/misc/help_config.c:129 #, c-format msgid "internal error: unrecognized run-time parameter type\n" msgstr "error interno: tipo parámetro no reconocido\n" -#: utils/misc/pg_controldata.c:48 utils/misc/pg_controldata.c:86 -#: utils/misc/pg_controldata.c:175 utils/misc/pg_controldata.c:214 +#: utils/misc/pg_controldata.c:50 utils/misc/pg_controldata.c:90 +#: utils/misc/pg_controldata.c:181 utils/misc/pg_controldata.c:222 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "la suma de verificación calculada no coincide con el valor almacenado en el archivo" @@ -29476,145 +30320,143 @@ msgstr "la consulta sería afectada por la política de seguridad de registros p msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "Para desactivar la política para el dueño de la tabla, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:524 +#: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" msgstr "no se pueden agregar más razones de timeout" -#: utils/misc/tzparser.c:60 +#: utils/misc/tzparser.c:61 #, c-format msgid "time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d" msgstr "la abreviación del huso horario «%s» es demasiado larga (máximo %d caracteres) en archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:72 +#: utils/misc/tzparser.c:73 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "desplazamiento de huso horario %d está fuera de rango en el archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:111 +#: utils/misc/tzparser.c:112 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "falta una abreviación de huso horario en el archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:120 +#: utils/misc/tzparser.c:121 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "falta un desplazamiento de huso horario en el archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:132 +#: utils/misc/tzparser.c:133 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "número no válido para desplazamiento de huso horario en archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:168 +#: utils/misc/tzparser.c:169 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "sintaxis no válida en archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:236 +#: utils/misc/tzparser.c:237 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "abreviación de huso horario «%s» está definida múltiples veces" -#: utils/misc/tzparser.c:238 +#: utils/misc/tzparser.c:239 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "Entrada en archivo de huso horario «%s», línea %d, causa conflictos con entrada en archivo «%s», línea %d." -#: utils/misc/tzparser.c:300 +#: utils/misc/tzparser.c:301 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "nombre de huso horario «%s» no válido" -#: utils/misc/tzparser.c:313 +#: utils/misc/tzparser.c:314 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "límite de recursión excedido en el archivo «%s»" -#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 +#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "no se pudo leer archivo de huso horario «%s»: %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:377 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "línea demasiado larga en archivo de huso horario «%s», línea %d" -#: utils/misc/tzparser.c:400 +#: utils/misc/tzparser.c:401 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE sin nombre de archivo en archivo de huso horario «%s», línea %d" -#: utils/mmgr/aset.c:446 utils/mmgr/generation.c:206 utils/mmgr/slab.c:367 +#: utils/mmgr/aset.c:452 utils/mmgr/bump.c:184 utils/mmgr/generation.c:216 +#: utils/mmgr/slab.c:371 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Falla al crear el contexto de memoria «%s»." -#: utils/mmgr/dsa.c:531 utils/mmgr/dsa.c:1341 +#: utils/mmgr/dsa.c:523 utils/mmgr/dsa.c:1364 #, c-format msgid "could not attach to dynamic shared area" msgstr "no se pudo adjuntar al segmento de memoria compartida dinámica" -#: utils/mmgr/mcxt.c:1047 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1121 -#: utils/mmgr/mcxt.c:1159 utils/mmgr/mcxt.c:1247 utils/mmgr/mcxt.c:1278 -#: utils/mmgr/mcxt.c:1314 utils/mmgr/mcxt.c:1503 utils/mmgr/mcxt.c:1548 -#: utils/mmgr/mcxt.c:1605 +#: utils/mmgr/mcxt.c:1155 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Falló una petición de tamaño %zu en el contexto de memoria «%s»." -#: utils/mmgr/mcxt.c:1210 +#: utils/mmgr/mcxt.c:1299 #, c-format msgid "logging memory contexts of PID %d" msgstr "registrando contextos de memoria del PID %d" -#: utils/mmgr/portalmem.c:188 +#: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" msgstr "el cursor «%s» ya existe" -#: utils/mmgr/portalmem.c:192 +#: utils/mmgr/portalmem.c:191 #, c-format msgid "closing existing cursor \"%s\"" msgstr "cerrando el cursor «%s» preexistente" -#: utils/mmgr/portalmem.c:402 +#: utils/mmgr/portalmem.c:401 #, c-format msgid "portal \"%s\" cannot be run" msgstr "el portal «%s» no puede ser ejecutado" -#: utils/mmgr/portalmem.c:480 +#: utils/mmgr/portalmem.c:479 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "no se puede eliminar el portal «pinned» «%s»" -#: utils/mmgr/portalmem.c:488 +#: utils/mmgr/portalmem.c:487 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "no se puede eliminar el portal activo «%s»" -#: utils/mmgr/portalmem.c:739 +#: utils/mmgr/portalmem.c:738 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "no se puede hacer PREPARE de una transacción que ha creado un cursor WITH HOLD" -#: utils/mmgr/portalmem.c:1230 +#: utils/mmgr/portalmem.c:1232 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "no se pueden ejecutar órdenes de transacción dentro de un bucle de cursor que no es de sólo lectura" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %ld of temporary file" -msgstr "no se pudo posicionar (seek) en el bloque %ld del archivo temporal" +msgid "could not seek to block %lld of temporary file" +msgstr "no se pudo posicionar (seek) en el bloque %lld del archivo temporal" -#: utils/sort/sharedtuplestore.c:467 +#: utils/sort/sharedtuplestore.c:466 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "trozo inesperado en archivo temporal del tuplestore compartido" -#: utils/sort/sharedtuplestore.c:549 +#: utils/sort/sharedtuplestore.c:548 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "no se pudo posicionar (seek) en el bloque %u en el archivo temporal del tuplestore compartido" @@ -29624,17 +30466,17 @@ msgstr "no se pudo posicionar (seek) en el bloque %u en el archivo temporal del msgid "cannot have more than %d runs for an external sort" msgstr "no se pueden tener más de %d pasadas para un ordenamiento externo" -#: utils/sort/tuplesortvariants.c:1364 +#: utils/sort/tuplesortvariants.c:1552 #, c-format msgid "could not create unique index \"%s\"" msgstr "no se pudo crear el índice único «%s»" -#: utils/sort/tuplesortvariants.c:1366 +#: utils/sort/tuplesortvariants.c:1554 #, c-format msgid "Key %s is duplicated." msgstr "La llave %s está duplicada." -#: utils/sort/tuplesortvariants.c:1367 +#: utils/sort/tuplesortvariants.c:1555 #, c-format msgid "Duplicate keys exist." msgstr "Existe una llave duplicada." @@ -29648,412 +30490,426 @@ msgstr "Existe una llave duplicada." msgid "could not seek in tuplestore temporary file" msgstr "no se pudo posicionar (seek) en el archivo temporal del tuplestore" -#: utils/time/snapmgr.c:571 +#: utils/time/snapmgr.c:536 #, c-format msgid "The source transaction is not running anymore." msgstr "La transacción de origen ya no está en ejecución." -#: utils/time/snapmgr.c:1166 +#: utils/time/snapmgr.c:1136 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "no se puede exportar snapshots desde una subtransacción" -#: utils/time/snapmgr.c:1325 utils/time/snapmgr.c:1330 -#: utils/time/snapmgr.c:1335 utils/time/snapmgr.c:1350 -#: utils/time/snapmgr.c:1355 utils/time/snapmgr.c:1360 -#: utils/time/snapmgr.c:1375 utils/time/snapmgr.c:1380 -#: utils/time/snapmgr.c:1385 utils/time/snapmgr.c:1487 -#: utils/time/snapmgr.c:1503 utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 +#: utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 +#: utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "datos no válidos en archivo de snapshot «%s»" -#: utils/time/snapmgr.c:1422 +#: utils/time/snapmgr.c:1393 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT debe ser llamado antes de cualquier consulta" -#: utils/time/snapmgr.c:1431 +#: utils/time/snapmgr.c:1402 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "una transacción que importa un snapshot no debe tener nivel de aislación SERIALIZABLE o REPEATABLE READ" -#: utils/time/snapmgr.c:1440 utils/time/snapmgr.c:1449 +#: utils/time/snapmgr.c:1411 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "identificador de snapshot no válido: «%s»" -#: utils/time/snapmgr.c:1541 +#: utils/time/snapmgr.c:1426 +#, c-format +msgid "snapshot \"%s\" does not exist" +msgstr "no existe el snapshot «%s»" + +#: utils/time/snapmgr.c:1524 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "una transacción serializable no puede importar un snapshot desde una transacción no serializable" -#: utils/time/snapmgr.c:1545 +#: utils/time/snapmgr.c:1528 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "una transacción serializable que no es de sólo lectura no puede importar un snapshot de una transacción de sólo lectura" -#: utils/time/snapmgr.c:1560 +#: utils/time/snapmgr.c:1543 #, c-format msgid "cannot import a snapshot from a different database" msgstr "no se puede importar un snapshot desde una base de datos diferente" -#: gram.y:1200 +#: gram.y:1231 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD ya no está soportado" -#: gram.y:1201 +#: gram.y:1232 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Quite UNENCRYPTED para almacenar la contraseña en su lugar en forma cifrada." -#: gram.y:1528 gram.y:1544 +#: gram.y:1559 gram.y:1575 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS no puede incluir elementos de esquema" -#: gram.y:1696 +#: gram.y:1727 #, c-format msgid "current database cannot be changed" msgstr "no se puede cambiar la base de datos activa" -#: gram.y:1829 +#: gram.y:1860 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "el intervalo de huso horario debe ser HOUR o HOUR TO MINUTE" -#: gram.y:2446 +#: gram.y:2487 #, c-format msgid "column number must be in range from 1 to %d" msgstr "el número de columna debe estar en el rango de 1 a %d" -#: gram.y:3042 +#: gram.y:3083 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "la opción de secuencia «%s» no está soportada aquí" -#: gram.y:3071 +#: gram.y:3122 #, c-format msgid "modulus for hash partition provided more than once" msgstr "el módulo para partición de hash fue especificado más de una vez" -#: gram.y:3080 +#: gram.y:3131 #, c-format msgid "remainder for hash partition provided more than once" msgstr "el remanente para partición de hash fue especificado más de una vez" -#: gram.y:3087 +#: gram.y:3138 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "especificación de borde de partición hash «%s» no reconocida" -#: gram.y:3095 +#: gram.y:3146 #, c-format msgid "modulus for hash partition must be specified" msgstr "el módulo para una partición hash debe ser especificado" -#: gram.y:3099 +#: gram.y:3150 #, c-format msgid "remainder for hash partition must be specified" msgstr "remanente en partición hash debe ser especificado" -#: gram.y:3307 gram.y:3341 +#: gram.y:3358 gram.y:3392 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT no están permitidos con PROGRAM" -#: gram.y:3313 +#: gram.y:3364 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "la cláusula WHERE no está permitida con COPY TO" -#: gram.y:3652 gram.y:3659 gram.y:12824 gram.y:12832 +#: gram.y:3712 gram.y:3719 gram.y:13023 gram.y:13031 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL está obsoleto para la creación de tablas temporales" -#: gram.y:3935 +#: gram.y:3995 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "para una columna generada, GENERATED ALWAYS debe ser especificado" -#: gram.y:4318 -#, fuzzy, c-format -#| msgid "return type %s is not supported for SQL functions" +#: gram.y:4432 +#, c-format msgid "a column list with %s is only supported for ON DELETE actions" -msgstr "el tipo de retorno %s no es soportado en funciones SQL" +msgstr "una lista de columnas con %s sólo está soportada para acciones ON DELETE" -#: gram.y:5030 +#: gram.y:5151 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM ya no está soportado" -#: gram.y:5728 +#: gram.y:5849 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "opción de seguridad de registro «%s» no reconocida" -#: gram.y:5729 +#: gram.y:5850 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "sólo se admiten actualmente políticas PERMISSIVE o RESTRICTIVE." -#: gram.y:5814 +#: gram.y:5935 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER no está soportado" -#: gram.y:5851 +#: gram.y:5972 msgid "duplicate trigger events specified" -msgstr "se han especificado eventos de disparador duplicados" +msgstr "se han especificado “triggers” por eventos duplicados" -#: gram.y:6000 +#: gram.y:6121 #, c-format msgid "conflicting constraint properties" msgstr "propiedades de restricción contradictorias" -#: gram.y:6099 +#: gram.y:6220 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION no está implementado" -#: gram.y:6507 +#: gram.y:6537 +#, c-format +msgid "dropping an enum value is not implemented" +msgstr "eliminar un valor de enum no está implementado" + +#: gram.y:6655 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK ya no es requerido" -#: gram.y:6508 +#: gram.y:6656 #, c-format msgid "Update your data type." msgstr "Actualice su tipo de datos." -#: gram.y:8381 +#: gram.y:8529 #, c-format msgid "aggregates cannot have output arguments" msgstr "las funciones de agregación no pueden tener argumentos de salida" -#: gram.y:11057 gram.y:11076 +#: gram.y:11221 gram.y:11240 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION no está soportado con vistas recursivas" -#: gram.y:12963 +#: gram.y:13162 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la sintaxis LIMIT #,# no está soportada" -#: gram.y:12964 +#: gram.y:13163 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Use cláusulas LIMIT y OFFSET separadas." -#: gram.y:13824 +#: gram.y:14038 #, c-format msgid "only one DEFAULT value is allowed" msgstr "Sólo se permite un valor DEFAULT" -#: gram.y:13833 +#: gram.y:14047 #, c-format msgid "only one PATH value per column is allowed" msgstr "sólo se permite un valor de PATH por columna" -#: gram.y:13842 +#: gram.y:14056 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "declaraciones NULL/NOT NULL en conflicto o redundantes para la columna «%s»" -#: gram.y:13851 +#: gram.y:14065 #, c-format msgid "unrecognized column option \"%s\"" msgstr "opción de columna «%s» no reconocida" -#: gram.y:14105 +#: gram.y:14147 +#, c-format +msgid "only string constants are supported in JSON_TABLE path specification" +msgstr "sólo cadenas constantes están permitidas en la especificación de ruta JSON_TABLE" + +#: gram.y:14469 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la precisión para el tipo float debe ser al menos 1 bit" -#: gram.y:14114 +#: gram.y:14478 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la precisión para el tipo float debe ser menor de 54 bits" -#: gram.y:14617 +#: gram.y:14995 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado izquierdo de la expresión OVERLAPS" -#: gram.y:14622 +#: gram.y:15000 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado derecho de la expresión OVERLAPS" -#: gram.y:14799 +#: gram.y:15177 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "el predicado UNIQUE no está implementado" -#: gram.y:15215 +#: gram.y:15591 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "no se permiten múltiples cláusulas ORDER BY con WITHIN GROUP" -#: gram.y:15220 +#: gram.y:15596 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "no se permite DISTINCT con WITHIN GROUP" -#: gram.y:15225 +#: gram.y:15601 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "no se permite VARIADIC con WITHIN GROUP" -#: gram.y:15859 gram.y:15883 +#: gram.y:16328 gram.y:16352 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "el inicio de «frame» no puede ser UNBOUNDED FOLLOWING" -#: gram.y:15864 +#: gram.y:16333 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "el «frame» que se inicia desde la siguiente fila no puede terminar en la fila actual" -#: gram.y:15888 +#: gram.y:16357 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "el fin de «frame» no puede ser UNBOUNDED PRECEDING" -#: gram.y:15894 +#: gram.y:16363 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila actual no puede tener filas precedentes" -#: gram.y:15901 +#: gram.y:16370 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila siguiente no puede tener filas precedentes" -#: gram.y:16660 +#: gram.y:16919 +#, c-format +msgid "unrecognized JSON encoding: %s" +msgstr "no se reconoce la codificación JSON: %s" + +#: gram.y:17243 #, c-format msgid "type modifier cannot have parameter name" msgstr "el modificador de tipo no puede tener nombre de parámetro" -#: gram.y:16666 +#: gram.y:17249 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "el modificador de tipo no puede tener ORDER BY" -#: gram.y:16734 gram.y:16741 gram.y:16748 +#: gram.y:17317 gram.y:17324 gram.y:17331 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s no puede ser usado como nombre de rol aquí" -#: gram.y:16838 gram.y:18295 +#: gram.y:17421 gram.y:18906 #, c-format msgid "WITH TIES cannot be specified without ORDER BY clause" msgstr "la opción WITH TIES no puede ser especificada sin una cláusula ORDER BY" -#: gram.y:17974 gram.y:18161 +#: gram.y:18597 gram.y:18772 msgid "improper use of \"*\"" msgstr "uso impropio de «*»" -#: gram.y:18225 +#: 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 "una agregación de conjunto-ordenado con un argumento directo VARIADIC debe tener al menos un argumento agregado VARIADIC del mismo tipo de datos" -#: gram.y:18262 +#: gram.y:18873 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "no se permiten múltiples cláusulas ORDER BY" -#: gram.y:18273 +#: gram.y:18884 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "no se permiten múltiples cláusulas OFFSET" -#: gram.y:18282 +#: gram.y:18893 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "no se permiten múltiples cláusulas LIMIT" -#: gram.y:18291 +#: gram.y:18902 #, c-format msgid "multiple limit options not allowed" msgstr "no se permiten múltiples opciones limit" -#: gram.y:18318 +#: gram.y:18929 #, c-format msgid "multiple WITH clauses not allowed" msgstr "no se permiten múltiples cláusulas WITH" -#: gram.y:18511 +#: gram.y:19122 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "los argumentos OUT e INOUT no están permitidos en funciones TABLE" -#: gram.y:18644 +#: gram.y:19255 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "no se permiten múltiples cláusulas COLLATE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18682 gram.y:18695 +#: gram.y:19293 gram.y:19306 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "las restricciones %s no pueden ser marcadas DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18708 +#: gram.y:19319 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "las restricciones %s no pueden ser marcadas NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18721 +#: gram.y:19332 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" -#: gram.y:18743 +#: gram.y:19354 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "estrategia de particionamiento «%s» no reconocida" -#: gram.y:18767 -#, fuzzy, c-format -#| msgid "invalid publication_names syntax" +#: gram.y:19378 +#, c-format msgid "invalid publication object list" -msgstr "sintaxis de publication_names no válida" +msgstr "sintaxis de lista de objetos de publicación no válida" -#: gram.y:18768 +#: gram.y:19379 #, c-format msgid "One of TABLE or TABLES IN SCHEMA must be specified before a standalone table or schema name." -msgstr "" +msgstr "Uno de TABLE o TABLES IN SCHEMA debe ser especificado antes de un nombre de tabla o esquema." -#: gram.y:18784 -#, fuzzy, c-format -#| msgid "invalid locale name \"%s\"" +#: gram.y:19395 +#, c-format msgid "invalid table name" -msgstr "nombre de configuración regional «%s» no es válido" +msgstr "nombre de tabla no válido" -#: gram.y:18805 -#, fuzzy, c-format -#| msgid "WHERE clause not allowed with COPY TO" +#: gram.y:19416 +#, c-format msgid "WHERE clause not allowed for schema" -msgstr "la cláusula WHERE no está permitida con COPY TO" +msgstr "cláusula WHERE no permitida para esquemas" -#: gram.y:18812 -#, fuzzy, c-format -#| msgid "interval specification not allowed here" +#: gram.y:19423 +#, c-format msgid "column specification not allowed for schema" -msgstr "la especificación de intervalo no está permitida aquí" +msgstr "especificación de columnas no permitida para esquemas" -#: gram.y:18826 -#, fuzzy, c-format -#| msgid "invalid fork name" +#: gram.y:19437 +#, c-format msgid "invalid schema name" -msgstr "nombre de «fork» no válido" +msgstr "nombre de esquema no válido" #: guc-file.l:192 #, c-format @@ -30095,54 +30951,47 @@ msgstr "error de sintaxis en el archivo «%s» línea %u, cerca de la palabra « msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "se encontraron demasiados errores de sintaxis, abandonando el archivo «%s»" -#: jsonpath_gram.y:529 +#: jsonpath_gram.y:267 +#, c-format +msgid ".decimal() can only have an optional precision[,scale]." +msgstr ".decimal() sólo puede tener un parámetro opcional precisión[,escala]." + +#: jsonpath_gram.y:599 #, c-format msgid "Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate." -msgstr "" +msgstr "Carácter de bandera «%.*s» no reconocido en predicado LIKE_REGEX." -#: jsonpath_gram.y:607 +#: jsonpath_gram.y:677 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "la opción «x» de XQuery (expresiones regulares expandidas) no está implementada" #: jsonpath_scan.l:174 -#, fuzzy -#| msgid "invalid Unicode escape" -msgid "invalid unicode sequence" -msgstr "valor de escape Unicode no válido" +msgid "invalid Unicode escape sequence" +msgstr "secuencia de escape Unicode no válida" #: jsonpath_scan.l:180 -#, fuzzy -#| msgid "invalid character" -msgid "invalid hex character sequence" -msgstr "carácter no válido" +msgid "invalid hexadecimal character sequence" +msgstr "secuencia de caracteres hexadecimales no válido" #: jsonpath_scan.l:195 -#, fuzzy -#| msgid "unexpected end of line" msgid "unexpected end after backslash" -msgstr "fin de línea inesperado" +msgstr "fin inesperado después de backslash" -#: jsonpath_scan.l:201 -#, fuzzy -#| msgid "unexpected end of line" -msgid "unexpected end of quoted string" -msgstr "fin de línea inesperado" +#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:756 +msgid "unterminated quoted string" +msgstr "una cadena de caracteres entre comillas está inconclusa" #: jsonpath_scan.l:228 -#, fuzzy -#| msgid "unexpected end of line" msgid "unexpected end of comment" -msgstr "fin de línea inesperado" +msgstr "fin de comentario inesperado" #: jsonpath_scan.l:319 -#, fuzzy -#| msgid "numeric_literal" msgid "invalid numeric literal" -msgstr "literal_numérico" +msgstr "literal numérico no válido" -#: jsonpath_scan.l:325 jsonpath_scan.l:331 jsonpath_scan.l:337 scan.l:1049 -#: scan.l:1053 scan.l:1057 scan.l:1061 scan.l:1065 scan.l:1069 scan.l:1073 +#: 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 "basura sigue después de un literal numérico" @@ -30158,162 +31007,139 @@ msgstr "%s al final de la entrada jsonpath" msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s en o cerca de «%s» de la entrada jsonpath" -#: jsonpath_scan.l:557 -msgid "bogus input" -msgstr "" +#: jsonpath_scan.l:568 +msgid "invalid input" +msgstr "entrada no válida" -#: jsonpath_scan.l:583 -#, fuzzy -#| msgid "invalid hexadecimal digit: \"%.*s\"" +#: jsonpath_scan.l:594 msgid "invalid hexadecimal digit" -msgstr "dígito hexadecimal no válido: «%.*s»" +msgstr "dígito hexadecimal no válido" -#: jsonpath_scan.l:614 -#, fuzzy, c-format -#| msgid "could not encode server key" -msgid "could not convert unicode to server encoding" -msgstr "no se pudo codificar la llave del servidor" +#: jsonpath_scan.l:625 +#, c-format +msgid "could not convert Unicode to server encoding" +msgstr "no se pudo convertir Unicode a la codificación del servidor" -#: repl_gram.y:301 repl_gram.y:333 +#: repl_gram.y:318 repl_gram.y:359 #, c-format msgid "invalid timeline %u" msgstr "timeline %u no válido" -#: repl_scanner.l:152 -#, fuzzy -#| msgid "invalid transaction termination" +#: repl_scanner.l:154 msgid "invalid streaming start location" -msgstr "terminación de transacción no válida" - -#: repl_scanner.l:209 scan.l:741 -msgid "unterminated quoted string" -msgstr "una cadena de caracteres entre comillas está inconclusa" +msgstr "ubicación de inicio de flujo no válida" -#: scan.l:482 +#: scan.l:497 msgid "unterminated /* comment" msgstr "un comentario /* está inconcluso" -#: scan.l:502 +#: scan.l:517 msgid "unterminated bit string literal" msgstr "una cadena de bits está inconclusa" -#: scan.l:516 +#: scan.l:531 msgid "unterminated hexadecimal string literal" msgstr "una cadena hexadecimal está inconclusa" -#: scan.l:566 +#: scan.l:581 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "uso inseguro de literal de cadena con escapes Unicode" -#: scan.l:567 +#: scan.l:582 #, c-format -msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." -msgstr "Los literales de cadena con escapes Unicode no pueden usarse cuando standard_conforming_strings está desactivado." +msgid "String constants with Unicode escapes cannot be used when \"standard_conforming_strings\" is off." +msgstr "Los literales de cadena con escapes Unicode no pueden usarse cuando «standard_conforming_strings» está desactivado." -#: scan.l:628 +#: scan.l:643 msgid "unhandled previous state in xqs" msgstr "estado previo no manejado en xqs" -#: scan.l:702 +#: scan.l:717 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Los escapes Unicode deben ser \\uXXXX o \\UXXXXXXXX." -#: scan.l:713 +#: scan.l:728 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "uso inseguro de \\' en un literal de cadena" -#: scan.l:714 +#: scan.l:729 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "Use '' para escribir comillas en cadenas. \\' es inseguro en codificaciones de sólo cliente." -#: scan.l:786 +#: scan.l:801 msgid "unterminated dollar-quoted string" msgstr "una cadena separada por $ está inconclusa" -#: scan.l:803 scan.l:813 +#: scan.l:818 scan.l:828 msgid "zero-length delimited identifier" msgstr "un identificador delimitado tiene largo cero" -#: scan.l:824 syncrep_scanner.l:101 +#: scan.l:839 syncrep_scanner.l:101 msgid "unterminated quoted identifier" msgstr "un identificador entre comillas está inconcluso" -#: scan.l:987 +#: scan.l:1002 msgid "operator too long" msgstr "el operador es demasiado largo" -#: scan.l:1000 +#: scan.l:1015 msgid "trailing junk after parameter" msgstr "basura sigue después de un parámetro" -#: scan.l:1021 -#, fuzzy -#| msgid "invalid hexadecimal string literal" +#: scan.l:1036 msgid "invalid hexadecimal integer" -msgstr "cadena hexadecimal no válida" +msgstr "entero hexadecimal no válido" -#: scan.l:1025 -#, fuzzy -#| msgid "invalid Datum pointer" +#: scan.l:1040 msgid "invalid octal integer" -msgstr "puntero a Datum no válido" +msgstr "entero octal no válido" -#: scan.l:1029 -#, fuzzy -#| msgid "invalid Datum pointer" +#: scan.l:1044 msgid "invalid binary integer" -msgstr "puntero a Datum no válido" +msgstr "entero binario no válido" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1236 +#: scan.l:1239 #, c-format msgid "%s at end of input" msgstr "%s al final de la entrada" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1244 +#: scan.l:1247 #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" -#: scan.l:1434 +#: scan.l:1439 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "uso no estandar de \\' en un literal de cadena" -#: scan.l:1435 +#: scan.l:1440 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'...')." -#: scan.l:1444 +#: scan.l:1449 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "uso no estandar de \\\\ en un literal de cadena" -#: scan.l:1445 +#: scan.l:1450 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'\\\\')." -#: scan.l:1459 +#: scan.l:1464 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "uso no estandar de escape en un literal de cadena" -#: scan.l:1460 +#: scan.l:1465 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Use la sintaxis de escape para cadenas, por ej. E'\\r\\n'." - -#, c-format -#~ msgid "value for compression option \"%s\" must be a boolean" -#~ msgstr "el valor para la opción de compresión «%s» debe ser un booleano" - -#, c-format -#~ msgid "String contains unexpected escape sequence \"%c\"." -#~ msgstr "La cadena contiene la secuencia de escape inesperada «%c»." diff --git a/src/backend/po/ja.po b/src/backend/po/ja.po index 1e638d075be6b..5309f0ca14d47 100644 --- a/src/backend/po/ja.po +++ b/src/backend/po/ja.po @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: postgres (PostgreSQL 17)\n" +"Project-Id-Version: postgres (PostgreSQL 18)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-11 15:46+0900\n" -"PO-Revision-Date: 2024-06-11 16:55+0900\n" +"POT-Creation-Date: 2025-04-09 09:36+0900\n" +"PO-Revision-Date: 2025-04-09 10:06+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: jpug-doc \n" "Language: ja\n" @@ -82,25 +82,25 @@ msgstr "圧縮アルゴリズム\"%s\"は長距離モードをサポートしま 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:1879 commands/extension.c:3807 utils/adt/genfile.c:123 utils/time/snapmgr.c:1437 #, 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:3621 access/transam/xlog.c:4512 access/transam/xlogrecovery.c:1246 access/transam/xlogrecovery.c:1344 access/transam/xlogrecovery.c:1381 access/transam/xlogrecovery.c:1448 backup/basebackup.c:2128 backup/walsummary.c:283 commands/extension.c:3817 libpq/hba.c:769 +#: replication/logical/origin.c:745 replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5236 replication/logical/snapbuild.c:1903 replication/slot.c:2430 replication/slot.c:2471 replication/walsender.c:629 storage/file/buffile.c:470 storage/file/copydir.c:201 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:3626 access/transam/xlog.c:4517 replication/logical/origin.c:750 replication/logical/origin.c:789 replication/logical/snapbuild.c:1908 replication/slot.c:2434 replication/slot.c:2475 replication/walsender.c:634 utils/cache/relmapper.c:833 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" -#: ../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 -#: 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 +#: ../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:1783 access/transam/xlog.c:3467 access/transam/xlog.c:3661 access/transam/xlog.c:3666 access/transam/xlog.c:3802 +#: access/transam/xlog.c:4482 access/transam/xlog.c:5458 commands/copyfrom.c:1929 commands/copyto.c:598 libpq/be-fsstubs.c:475 libpq/be-fsstubs.c:545 replication/logical/origin.c:683 replication/logical/origin.c:822 replication/logical/reorderbuffer.c:5288 replication/logical/snapbuild.c:1648 replication/logical/snapbuild.c:1774 replication/slot.c:2319 replication/slot.c:2482 replication/walsender.c:644 storage/file/copydir.c:224 storage/file/copydir.c:229 +#: storage/file/copydir.c:284 storage/file/copydir.c:289 storage/file/fd.c:828 storage/file/fd.c:3818 storage/file/fd.c:3924 utils/cache/relmapper.c:841 utils/cache/relmapper.c:956 #, c-format msgid "could not close file \"%s\": %m" msgstr "ファイル\"%s\"をクローズできませんでした: %m" @@ -122,41 +122,41 @@ msgstr "" "されるものと一致しないようです。この場合以下の結果は不正確になります。また、\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:69 ../common/file_utils.c:370 ../common/file_utils.c:428 ../common/file_utils.c:502 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:3357 access/transam/xlog.c:3537 access/transam/xlog.c:3576 access/transam/xlog.c:3769 access/transam/xlog.c:4502 +#: access/transam/xlogrecovery.c:4285 access/transam/xlogrecovery.c:4386 access/transam/xlogutils.c:825 backup/basebackup.c:549 backup/basebackup.c:1600 backup/walsummary.c:220 libpq/hba.c:626 postmaster/syslogger.c:1512 replication/logical/origin.c:735 replication/logical/reorderbuffer.c:3889 replication/logical/reorderbuffer.c:4443 replication/logical/reorderbuffer.c:5216 replication/logical/snapbuild.c:1603 replication/logical/snapbuild.c:1715 +#: replication/slot.c:2402 replication/walsender.c:602 replication/walsender.c:3056 storage/file/copydir.c:167 storage/file/copydir.c:255 storage/file/fd.c:803 storage/file/fd.c:3575 storage/file/fd.c:3805 storage/file/fd.c:3895 storage/smgr/md.c:675 utils/cache/relmapper.c:818 utils/cache/relmapper.c:935 utils/error/elog.c:2149 utils/init/miscinit.c:1585 utils/init/miscinit.c:1719 utils/init/miscinit.c:1796 utils/misc/guc.c:4774 utils/misc/guc.c:4824 #, 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:1756 access/transam/twophase.c:1765 access/transam/xlog.c:9467 access/transam/xlogfuncs.c:699 backup/basebackup_server.c:173 backup/basebackup_server.c:266 backup/walsummary.c:304 postmaster/postmaster.c:4098 postmaster/syslogger.c:1523 postmaster/syslogger.c:1536 postmaster/syslogger.c:1549 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:440 ../common/file_utils.c:510 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:1777 access/transam/xlog.c:3457 access/transam/xlog.c:3655 access/transam/xlog.c:4475 access/transam/xlog.c:8853 access/transam/xlog.c:8897 +#: backup/basebackup_server.c:207 commands/dbcommands.c:515 replication/logical/snapbuild.c:1641 replication/slot.c:2305 replication/slot.c:2412 storage/file/fd.c:820 storage/file/fd.c:3916 storage/smgr/md.c:1455 storage/smgr/md.c:1515 storage/sync/sync.c:446 utils/misc/guc.c:4527 #, 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:543 ../common/exec.c:588 ../common/exec.c:680 ../common/hmac.c:309 ../common/hmac.c:325 ../common/hmac_openssl.c:151 ../common/hmac_openssl.c:339 ../common/jsonapi.c:2407 ../common/md5_common.c:156 ../common/parse_manifest.c:157 ../common/parse_manifest.c:852 ../common/psprintf.c:140 ../common/scram-common.c:268 ../port/path.c:829 ../port/path.c:866 +#: ../port/path.c:883 access/transam/twophase.c:1418 access/transam/xlogrecovery.c:570 lib/dshash.c:253 libpq/auth.c:1345 libpq/auth.c:1389 libpq/auth.c:1951 libpq/be-secure-gssapi.c:527 postmaster/bgworker.c:355 postmaster/bgworker.c:1022 postmaster/postmaster.c:3568 postmaster/walsummarizer.c:942 replication/libpqwalreceiver/libpqwalreceiver.c:351 replication/logical/logical.c:210 replication/walsender.c:811 storage/buffer/localbuf.c:745 storage/file/fd.c:912 +#: storage/file/fd.c:1447 storage/file/fd.c:1608 storage/file/fd.c:2592 storage/ipc/procarray.c:1465 storage/ipc/procarray.c:2217 storage/ipc/procarray.c:2224 storage/ipc/procarray.c:2727 storage/ipc/procarray.c:3436 utils/adt/pg_locale.c:509 utils/adt/pg_locale.c:583 utils/adt/pg_locale_icu.c:364 utils/adt/pg_locale_libc.c:207 utils/adt/pg_locale_libc.c:302 utils/adt/pg_locale_libc.c:390 utils/fmgr/dfmgr.c:219 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:647 utils/misc/guc.c:672 utils/misc/guc.c:1060 utils/misc/guc.c:4505 utils/misc/tzparser.c:479 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:1230 utils/mmgr/slab.c:370 #, c-format msgid "out of memory" msgstr "メモリ不足です" -#: ../common/cryptohash.c:266 ../common/cryptohash.c:272 ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 ../common/hmac_openssl.c:377 +#: ../common/cryptohash.c:266 ../common/cryptohash.c:272 ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:351 ../common/hmac_openssl.c:359 msgid "success" msgstr "成功" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 ../common/hmac_openssl.c:371 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 ../common/hmac_openssl.c:353 msgid "destination buffer too small" msgstr "出力先バッファが小さすぎます" -#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:355 msgid "OpenSSL failure" msgstr "OpenSSLのエラー" @@ -180,27 +180,27 @@ msgstr "実行すべき\"%s\"がありませんでした" 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:363 commands/collationcmds.c:872 commands/copyfrom.c:1863 commands/copyto.c:934 libpq/be-secure-common.c:59 #, c-format msgid "could not execute command \"%s\": %m" msgstr "コマンド\"%s\"を実行できませんでした: %m" -#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#: ../common/exec.c:375 libpq/be-secure-common.c:71 #, c-format msgid "could not read from command \"%s\": %m" msgstr "コマンド\"%s\"から読み取れませんでした: %m" -#: ../common/exec.c:397 +#: ../common/exec.c:378 #, c-format 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:405 libpq/pqcomm.c:193 storage/ipc/waiteventset.c:782 storage/ipc/waiteventset.c:962 storage/ipc/waiteventset.c:1202 storage/ipc/waiteventset.c:1364 storage/ipc/waiteventset.c:1490 #, 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:142 ../port/path.c:831 ../port/path.c:868 ../port/path.c:885 utils/misc/ps_status.c:195 utils/misc/ps_status.c:203 utils/misc/ps_status.c:230 utils/misc/ps_status.c:238 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" @@ -210,33 +210,33 @@ msgstr "メモリ不足です\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "nullポインタは複製できません(内部エラー)\n" -#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#: ../common/file_utils.c:75 storage/file/fd.c:3581 #, c-format 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:123 ../common/file_utils.c:588 ../common/file_utils.c:592 access/transam/twophase.c:1321 access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:235 backup/basebackup.c:357 backup/basebackup.c:555 backup/basebackup.c:626 backup/walsummary.c:247 backup/walsummary.c:254 commands/copyfrom.c:1889 commands/copyto.c:980 commands/extension.c:3796 commands/tablespace.c:804 commands/tablespace.c:893 postmaster/pgarch.c:682 +#: replication/logical/snapbuild.c:1498 replication/logical/snapbuild.c:2025 storage/file/fd.c:1972 storage/file/fd.c:2060 storage/file/fd.c:3629 utils/adt/dbsize.c:105 utils/adt/dbsize.c:266 utils/adt/dbsize.c:355 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\"のstatに失敗しました: %m" -#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#: ../common/file_utils.c:133 ../common/file_utils.c:243 #, c-format 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:156 ../common/file_utils.c:304 ../common/pgfnames.c:48 ../common/rmtree.c:63 commands/tablespace.c:728 commands/tablespace.c:738 postmaster/postmaster.c:1496 storage/file/fd.c:2997 storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:340 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../common/file_utils.c:169 ../common/file_utils.c:315 ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 +#: ../common/file_utils.c:174 ../common/file_utils.c:338 ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:3009 #, c-format 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:520 access/transam/xlogarchive.c:389 postmaster/pgarch.c:836 postmaster/syslogger.c:1560 replication/logical/snapbuild.c:1660 replication/slot.c:987 replication/slot.c:2191 replication/slot.c:2333 storage/file/fd.c:838 utils/time/snapmgr.c:1262 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" @@ -245,283 +245,287 @@ msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: % msgid "internal error" msgstr "内部エラー" -#: ../common/jsonapi.c:2121 +#: ../common/jsonapi.c:2432 msgid "Recursive descent parser cannot use incremental lexer." msgstr "再帰降下パーサーは差分字句解析器を使用できません。" -#: ../common/jsonapi.c:2123 +#: ../common/jsonapi.c:2434 msgid "Incremental parser requires incremental lexer." msgstr "差分パーサーは差分字句解析器を必要とします。" -#: ../common/jsonapi.c:2125 +#: ../common/jsonapi.c:2436 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "JSONのネストが深すぎます、可能な最大の深さは6400です。" -#: ../common/jsonapi.c:2127 +#: ../common/jsonapi.c:2438 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "エスケープシーケンス\"\\%.*s\"は不正です。" -#: ../common/jsonapi.c:2131 +#: ../common/jsonapi.c:2442 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "0x%02x値を持つ文字はエスケープしなければなりません" -#: ../common/jsonapi.c:2135 +#: ../common/jsonapi.c:2446 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "入力の終端を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2138 +#: ../common/jsonapi.c:2449 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "配列要素または\"]\"を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2141 +#: ../common/jsonapi.c:2452 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "\",\"または\"]\"を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2144 +#: ../common/jsonapi.c:2455 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "\":\"を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2147 +#: ../common/jsonapi.c:2458 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "JSON値を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2150 +#: ../common/jsonapi.c:2461 msgid "The input string ended unexpectedly." msgstr "入力文字列が予期せず終了しました。" -#: ../common/jsonapi.c:2152 +#: ../common/jsonapi.c:2463 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "文字列または\"}\"を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2155 +#: ../common/jsonapi.c:2466 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "\",\"または\"}\"を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2158 +#: ../common/jsonapi.c:2469 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "文字列を想定していましたが、\"%.*s\"でした。" -#: ../common/jsonapi.c:2161 +#: ../common/jsonapi.c:2472 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "トークン\"%.*s\"は不正です。" -#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 +#: ../common/jsonapi.c:2478 jsonpath_scan.l:585 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 はテキストに変換できません。" -#: ../common/jsonapi.c:2166 +#: ../common/jsonapi.c:2480 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\"の後には16進数の4桁が続かなければなりません。" -#: ../common/jsonapi.c:2169 +#: ../common/jsonapi.c:2483 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "エンコーディングがUTF-8ではない場合、コードポイントの値が 007F 以上についてはUnicodeエスケープの値は使用できません。" -#: ../common/jsonapi.c:2178 +#: ../common/jsonapi.c:2492 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "Unicodeエスケープの値がサーバーエンコーディング%sに変換できませんでした。" -#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 +#: ../common/jsonapi.c:2499 jsonpath_scan.l:618 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicodeのハイサロゲートはハイサロゲートに続いてはいけません。" -#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 jsonpath_scan.l:713 +#: ../common/jsonapi.c:2501 jsonpath_scan.l:629 jsonpath_scan.l:639 jsonpath_scan.l:691 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicodeのローサロゲートはハイサロゲートに続かなければなりません。" -#: ../common/logging.c:276 +#: ../common/jsonapi.c:2523 +msgid "out of memory while constructing error description" +msgstr "エラー記述の構築中のメモリ不足" + +#: ../common/logging.c:279 #, c-format msgid "error: " msgstr "エラー: " -#: ../common/logging.c:283 +#: ../common/logging.c:286 #, c-format msgid "warning: " msgstr "警告: " -#: ../common/logging.c:294 +#: ../common/logging.c:297 #, c-format msgid "detail: " msgstr "詳細: " -#: ../common/logging.c:301 +#: ../common/logging.c:304 #, c-format 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" -msgstr "目録のシステム識別子が整数ではありません" +#: ../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:872 #, 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:769 utils/misc/guc.c:3164 utils/misc/guc.c:3205 utils/misc/guc.c:3280 utils/misc/guc.c:4709 utils/misc/guc.c:6929 utils/misc/guc.c:6970 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "パラメータ\"%s\"の値が不正です: \"%s\"" @@ -581,51 +585,56 @@ msgstr "制限付きトークンで再実行できませんでした: %lu" 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 -#: 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 +#: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 access/transam/twophase.c:1716 access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:399 postmaster/postmaster.c:1069 postmaster/syslogger.c:1489 replication/logical/origin.c:591 replication/logical/reorderbuffer.c:4711 replication/logical/snapbuild.c:1541 replication/logical/snapbuild.c:1997 replication/slot.c:2386 storage/file/fd.c:878 storage/file/fd.c:3443 storage/file/fd.c:3505 +#: storage/file/reinit.c:261 storage/ipc/dsm.c:343 storage/smgr/md.c:401 storage/smgr/md.c:460 storage/sync/sync.c:243 utils/time/snapmgr.c:1598 #, c-format msgid "could not remove file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 storage/file/fd.c:3779 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3435 storage/file/fd.c:3844 #, c-format 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 "saltのエンコードに失敗しました" -#: ../common/scram-common.c:298 +#: ../common/scram-common.c:297 msgid "could not encode stored key" msgstr "nonceのエンコードに失敗しました" -#: ../common/scram-common.c:315 +#: ../common/scram-common.c:314 msgid "could not encode server key" msgstr "サーバーキーのエンコードに失敗しました" -#: ../common/stringinfo.c:315 +#: ../common/stringinfo.c:362 +#, c-format +msgid "string buffer exceeds maximum allowed length (%zu bytes)" +msgstr "文字列バッファの長さが上限値を超えています(%zuバイト)" + +#: ../common/stringinfo.c:363 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "%dバイトを持つ文字列バッファを%dバイト多く、大きくすることができません。" -#: ../common/stringinfo.c:319 +#: ../common/stringinfo.c:367 #, c-format msgid "" -"out of memory\n" +"string buffer exceeds maximum allowed length (%zu bytes)\n" "\n" "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" msgstr "" -"メモリが足りません\n" +"文字列バッファの長さが上限値を超えています(%zuバイト)\n" "\n" -"%dバイトの文字列バッファを%dバイト拡げることができません。\n" +"%dバイトを格納する文字列バッファを%dバイト拡げることができません。\n" #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "実効ユーザーID %ld が見つかりませんでした: %s" -#: ../common/username.c:45 libpq/auth.c:1888 +#: ../common/username.c:45 msgid "user does not exist" msgstr "ユーザーが存在しません" @@ -664,12 +673,12 @@ msgstr "子プロセスはシグナル%dにより終了しました: %s" msgid "child process exited with unrecognized status %d" msgstr "子プロセスは認識できないステータス%dで終了しました" -#: ../port/chklocale.c:283 +#: ../port/chklocale.c:280 #, c-format msgid "could not determine encoding for codeset \"%s\"" msgstr "コードセット\"%s\"用の符号化方式を特定できませんでした" -#: ../port/chklocale.c:404 ../port/chklocale.c:410 +#: ../port/chklocale.c:370 ../port/chklocale.c:376 #, c-format msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "ロケール\"%s\"用の符号化方式を特定できませんでした: コードセットは\"%s\"です" @@ -717,7 +726,7 @@ msgstr "再試行を30秒間続けます。" msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "データベースシステムに干渉するアンチウィルス、バックアップといったソフトウェアが存在する可能性があります。" -#: ../port/path.c:775 +#: ../port/path.c:853 #, c-format msgid "could not get current working directory: %m\n" msgstr "現在の作業ディレクトリを取得できませんでした: %m\n" @@ -727,16 +736,6 @@ msgstr "現在の作業ディレクトリを取得できませんでした: %m\n msgid "operating system error %d" msgstr "オペレーティングシステムエラー %d" -#: ../port/user.c:43 ../port/user.c:79 -#, c-format -msgid "could not look up local user ID %d: %s" -msgstr "ローカルユーザーID %dの参照に失敗しました: %s" - -#: ../port/user.c:48 ../port/user.c:84 -#, c-format -msgid "local user with ID %d does not exist" -msgstr "ID %d を持つローカルユーザーは存在しません" - #: ../port/win32security.c:62 #, c-format msgid "could not get SID for Administrators group: error code %lu\n" @@ -752,47 +751,47 @@ msgstr "PowerUsersグループのSIDを取得できませんでした: エラー msgid "could not check access token membership: error code %lu\n" msgstr "アクセストークンのメンバーシップを確認できませんでした: エラーコード %lu\n" -#: access/brin/brin.c:405 +#: access/brin/brin.c:414 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "インデックス\"%s\" ページ%uのBRIN範囲要約のリクエストは登録されていません" -#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 +#: access/brin/brin.c:1397 access/brin/brin.c:1504 access/gin/ginfast.c:1040 access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:242 access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:323 access/transam/xlogfuncs.c:389 access/transam/xlogfuncs.c:447 statistics/attribute_stats.c:190 statistics/attribute_stats.c:931 statistics/relation_stats.c:97 #, c-format msgid "recovery is in progress" msgstr "リカバリは現在進行中です" -#: access/brin/brin.c:1386 access/brin/brin.c:1494 +#: access/brin/brin.c:1398 access/brin/brin.c:1505 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "BRIN制御関数はリカバリ中は実行できません。" -#: access/brin/brin.c:1391 access/brin/brin.c:1499 +#: access/brin/brin.c:1403 access/brin/brin.c:1510 #, c-format -msgid "block number out of range: %lld" -msgstr "ブロック番号が範囲外です: %lld" +msgid "block number out of range: %" +msgstr "ブロック番号が範囲外です: %" -#: access/brin/brin.c:1436 access/brin/brin.c:1525 +#: access/brin/brin.c:1447 access/brin/brin.c:1536 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\"はBRINインデックスではありません" -#: access/brin/brin.c:1452 access/brin/brin.c:1541 +#: access/brin/brin.c:1463 access/brin/brin.c:1552 #, c-format 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:1472 access/brin/brin.c:1568 access/gin/ginfast.c:1085 parser/parse_utilcmd.c:2433 #, c-format msgid "index \"%s\" is not valid" msgstr "インデックス\"%s\"は有効ではありません" -#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 statistics/dependencies.c:661 statistics/dependencies.c:714 statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 +#: access/brin/brin_bloom.c:784 access/brin/brin_bloom.c:826 access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3121 statistics/dependencies.c:661 statistics/dependencies.c:714 statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format msgid "cannot accept a value of type %s" msgstr "%s型の値は受け付けられません" -#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 access/spgist/spgdoinsert.c:2278 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 access/gist/gist.c:1475 access/spgist/spgdoinsert.c:2001 access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "インデックス行サイズ%1$zuはインデックス\"%3$s\"での最大値%2$zuを超えています" @@ -807,77 +806,77 @@ msgstr "BRINインデックスが壊れています: 範囲マップの不整合 msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "BRINインデックス\"%2$s\"のブロック %3$u のページタイプが予期しない値 0x%1$04X です" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 +#: access/brin/brin_validate.c:111 access/gin/ginvalidate.c:142 access/gist/gistvalidate.c:150 access/hash/hashvalidate.c:112 access/nbtree/nbtvalidate.c:116 access/spgist/spgvalidate.c:181 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は不正なサポート番号%4$dを持つ関数%3$sを含んでいます" -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 +#: access/brin/brin_validate.c:127 access/gin/ginvalidate.c:154 access/gist/gistvalidate.c:162 access/hash/hashvalidate.c:124 access/nbtree/nbtvalidate.c:128 access/spgist/spgvalidate.c:193 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"はサポート番号%4$dに対して間違ったシグネチャを持つ関数%3$sを含んでいます" -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 +#: access/brin/brin_validate.c:149 access/gin/ginvalidate.c:173 access/gist/gistvalidate.c:182 access/hash/hashvalidate.c:150 access/nbtree/nbtvalidate.c:148 access/spgist/spgvalidate.c:213 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は不正なストラテジ番号%4$dを持つ演算子\"%3$s\"を含んでいます" -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 access/spgist/spgvalidate.c:237 +#: access/brin/brin_validate.c:178 access/gin/ginvalidate.c:186 access/hash/hashvalidate.c:163 access/nbtree/nbtvalidate.c:161 access/spgist/spgvalidate.c:229 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対する不正なORDER BY指定を含んでいます" -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 +#: access/brin/brin_validate.c:191 access/gin/ginvalidate.c:199 access/gist/gistvalidate.c:230 access/hash/hashvalidate.c:176 access/nbtree/nbtvalidate.c:174 access/spgist/spgvalidate.c:245 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は間違ったシグネチャを持つ演算子%3$sを含んでいます" -#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:226 access/nbtree/nbtvalidate.c:236 access/spgist/spgvalidate.c:280 +#: access/brin/brin_validate.c:229 access/hash/hashvalidate.c:216 access/nbtree/nbtvalidate.c:232 access/spgist/spgvalidate.c:272 #, c-format msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は%3$sと%4$sの型に対する演算子が含まれていません" -#: access/brin/brin_validate.c:246 +#: access/brin/brin_validate.c:239 #, c-format msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は型%3$sと%4$sに対するサポート関数を含んでいません" -#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:240 access/nbtree/nbtvalidate.c:260 access/spgist/spgvalidate.c:315 +#: access/brin/brin_validate.c:252 access/hash/hashvalidate.c:230 access/nbtree/nbtvalidate.c:256 access/spgist/spgvalidate.c:307 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"は演算子を含んでいません" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 access/gist/gistvalidate.c:273 +#: access/brin/brin_validate.c:263 access/gin/ginvalidate.c:241 access/gist/gistvalidate.c:272 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"はサポート関数%3$dを含んでいません" -#: access/common/attmap.c:121 +#: access/common/attmap.c:118 #, c-format -msgid "Returned type %s does not match expected type %s in column %d." -msgstr "列%3$dで返された%1$s型が、期待している%2$s型と一致しません。" +msgid "Returned type %s does not match expected type %s in column \"%s\" (position %d)." +msgstr "返却型 %1$s が、列”%3$s\" (位置%4$d)で期待される型 %2$s と一致しません。" -#: access/common/attmap.c:149 +#: access/common/attmap.c:147 #, c-format msgid "Number of returned columns (%d) does not match expected column count (%d)." msgstr "返された列数(%d)が、期待する列数(%d)と一致しません。" -#: access/common/attmap.c:233 access/common/attmap.c:245 +#: access/common/attmap.c:231 access/common/attmap.c:243 #, c-format msgid "could not convert row type" msgstr "行型に変換できませんでした" -#: access/common/attmap.c:234 +#: access/common/attmap.c:232 #, c-format msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." msgstr "%2$s型の属性\"%1$s\"が%3$s型の対応する属性と合致しません。" -#: access/common/attmap.c:246 +#: access/common/attmap.c:244 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "%2$s型の属性\"%1$s\"が%3$s型の中に存在しません。" -#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 +#: access/common/heaptuple.c:1133 access/common/heaptuple.c:1472 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "列数(%d)が上限(%d)を超えています" @@ -887,95 +886,95 @@ msgstr "列数(%d)が上限(%d)を超えています" 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:978 #, 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_dr.c:94 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1951 #, c-format msgid "unsupported format code: %d" msgstr "非サポートの書式コード: %d" -#: access/common/reloptions.c:519 access/common/reloptions.c:530 +#: access/common/reloptions.c:530 access/common/reloptions.c:541 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "有効な値の範囲は\"on\"、\"off\"、\"auto\"です。" -#: access/common/reloptions.c:541 +#: access/common/reloptions.c:552 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "有効な値は\"local\"と\"cascaded\"です。" -#: access/common/reloptions.c:689 +#: access/common/reloptions.c:700 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "ユーザー定義リレーションのパラメータ型の制限を超えました" -#: access/common/reloptions.c:1231 +#: access/common/reloptions.c:1242 #, c-format msgid "RESET must not include values for parameters" msgstr "RESETにはパラメータの値を含めてはいけません" -#: access/common/reloptions.c:1263 +#: access/common/reloptions.c:1274 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "認識できないパラメータ namaspace \"%s\"" -#: access/common/reloptions.c:1300 commands/variable.c:1191 +#: access/common/reloptions.c:1311 commands/variable.c:1242 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "WITH OIDSと定義されたテーブルはサポートされません" -#: access/common/reloptions.c:1468 +#: access/common/reloptions.c:1479 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "認識できないラメータ \"%s\"" -#: access/common/reloptions.c:1580 +#: access/common/reloptions.c:1591 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "パラメータ\"%s\"が複数回指定されました" -#: access/common/reloptions.c:1596 +#: access/common/reloptions.c:1607 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "不正なブール型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1608 +#: access/common/reloptions.c:1619 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "不正な整数型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 +#: access/common/reloptions.c:1625 access/common/reloptions.c:1645 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "値%sはオプション\"%s\"の範囲外です" -#: access/common/reloptions.c:1616 +#: access/common/reloptions.c:1627 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "有効な値の範囲は\"%d\"~\"%d\"です。" -#: access/common/reloptions.c:1628 +#: access/common/reloptions.c:1639 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "不正な浮動小数点型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1636 +#: access/common/reloptions.c:1647 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "有効な値の範囲は\"%f\"~\"%f\"です。" -#: access/common/reloptions.c:1658 +#: access/common/reloptions.c:1669 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "不正な列挙型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1989 +#: access/common/reloptions.c:2016 #, c-format msgid "cannot specify storage parameters for a partitioned table" msgstr "パーティション親テーブルに対してストレージパラメータは指定できません" -#: access/common/reloptions.c:1990 +#: access/common/reloptions.c:2017 #, c-format msgid "Specify storage parameters for its leaf partitions instead." msgstr "代わりにリーフパーティションに対してストレージパラメータを指定してください。" @@ -1020,52 +1019,52 @@ msgstr "他のセッションの一時インデックスにはアクセスでき msgid "failed to re-find tuple within index \"%s\"" msgstr "インデックス\"%s\"内で行の再検索に失敗しました" -#: access/gin/ginscan.c:431 +#: access/gin/gininsert.c:1283 access/gin/ginutil.c:152 executor/execExpr.c:2244 utils/adt/array_userfuncs.c:1963 utils/adt/arrayfuncs.c:4028 utils/adt/arrayfuncs.c:6726 utils/adt/rowtypes.c:974 +#, c-format +msgid "could not identify a comparison function for type %s" +msgstr "%s型の比較関数が見つかりません" + +#: access/gin/ginscan.c:437 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "古いGINインデックスはインデックス全体のスキャンやnullの検索をサポートしていません" -#: access/gin/ginscan.c:432 +#: access/gin/ginscan.c:438 #, c-format 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 -#, c-format -msgid "could not identify a comparison function for type %s" -msgstr "%s型の比較関数が見つかりません" - -#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 +#: access/gin/ginvalidate.c:83 access/gist/gistvalidate.c:84 access/hash/hashvalidate.c:89 access/spgist/spgvalidate.c:94 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "アクセスメソッド %2$s の演算子族\"%1$s\"が左右辺の入力型が異なるサポート関数 %3$s を含んでいます" -#: access/gin/ginvalidate.c:258 +#: access/gin/ginvalidate.c:251 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"はサポート関数%3$dまたは%4$dを含んでいません" -#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 access/spgist/spgvalidate.c:387 +#: access/gin/ginvalidate.c:323 access/gist/gistvalidate.c:348 access/spgist/spgvalidate.c:378 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "サポート関数番号%dはアクセスメソッド%sに対して不正です" -#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:765 access/gist/gistvacuum.c:462 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "インデックス\"%s\"内に無効と判断されている内部タプルがあります" -#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:767 access/gist/gistvacuum.c:464 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "これは、PostgreSQL 9.1へアップグレードする前のクラッシュリカバリにおける不完全なページ分割が原因で発生します。" -#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 access/hash/hashutil.c:237 access/hash/hashutil.c:249 access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 access/nbtree/nbtpage.c:824 +#: access/gist/gist.c:768 access/gist/gistutil.c:801 access/gist/gistutil.c:812 access/gist/gistvacuum.c:465 access/hash/hashutil.c:226 access/hash/hashutil.c:237 access/hash/hashutil.c:249 access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "REINDEXを行ってください。" -#: access/gist/gist.c:1196 +#: access/gist/gist.c:1208 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "インデックス\"%s\"内の不完全な分割を修正します、ブロック%u" @@ -1080,33 +1079,33 @@ msgstr "インデックス\"%2$s\"の列%1$dに対するピックスプリット msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "インデックスは最適ではありません。最適化するためには開発者に連絡するか、この列をCREATE INDEXコマンドの2番目の列としてみてください。" -#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 access/nbtree/nbtpage.c:810 +#: access/gist/gistutil.c:798 access/hash/hashutil.c:223 access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "インデックス\"%s\"のブロック%uに予期していないゼロで埋められたページがあります" -#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 +#: access/gist/gistutil.c:809 access/hash/hashutil.c:234 access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "インデックス\"%s\"のブロック%uに破損したページがあります" -#: access/gist/gistvalidate.c:202 +#: access/gist/gistvalidate.c:200 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対する非サポートのORDER BY指定を含んでいます" -#: access/gist/gistvalidate.c:213 +#: access/gist/gistvalidate.c:211 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対する正しくないORDER BY演算子族を含んでいます" -#: access/hash/hashfunc.c: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:332 utils/adt/varchar.c:1000 utils/adt/varchar.c:1056 #, 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 -#: utils/adt/varlena.c:1521 +#: access/hash/hashfunc.c:278 access/hash/hashfunc.c:333 catalog/heap.c:679 catalog/heap.c:685 commands/createas.c:203 commands/createas.c:516 commands/indexcmds.c:2090 commands/tablecmds.c:19879 commands/view.c:80 regex/regc_pg_locale.c:245 utils/adt/formatting.c:1655 utils/adt/formatting.c:1719 utils/adt/formatting.c:1783 utils/adt/formatting.c:1847 utils/adt/like.c:163 utils/adt/like.c:194 utils/adt/like_support.c:1020 utils/adt/varchar.c:738 +#: utils/adt/varchar.c:1001 utils/adt/varchar.c:1057 utils/adt/varlena.c:1592 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "照合順序を明示するには COLLATE 句を使います。" @@ -1116,7 +1115,7 @@ msgstr "照合順序を明示するには COLLATE 句を使います。" 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:1039 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "バッファページよりも大きな値をインデックスすることはできません。" @@ -1131,7 +1130,7 @@ msgstr "不正なオーバーフローブロック番号%u" msgid "out of overflow pages in hash index \"%s\"" msgstr "ハッシュインデックス\"%s\"の中のオーバーフローページが足りません" -#: access/hash/hashsearch.c:311 +#: access/hash/hashsearch.c:313 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "ハッシュインデックスはインデックス全体のスキャンをサポートしていません" @@ -1146,47 +1145,52 @@ msgstr "インデックス\"%s\"はハッシュインデックスではありま msgid "index \"%s\" has wrong hash version" msgstr "インデックス\"%s\"のハッシュバージョンが不正です" -#: access/hash/hashvalidate.c:198 +#: access/hash/hashvalidate.c:188 #, c-format msgid "operator family \"%s\" of access method %s lacks support function for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対するサポート関数を含んでいません" -#: access/hash/hashvalidate.c:256 access/nbtree/nbtvalidate.c:276 +#: access/hash/hashvalidate.c:246 access/nbtree/nbtvalidate.c:272 #, c-format msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は異なる型間に対応する演算子を含んでいません" -#: access/heap/heapam.c:2194 +#: access/heap/heapam.c:2257 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "並列ワーカーではタプルの挿入はできません" -#: access/heap/heapam.c:2713 +#: access/heap/heapam.c:2776 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "並列処理中はタプルの削除はできません" -#: access/heap/heapam.c:2760 +#: access/heap/heapam.c:2823 #, c-format msgid "attempted to delete invisible tuple" msgstr "不可視のタプルを削除しようとしました" -#: access/heap/heapam.c:3208 access/heap/heapam.c:6081 +#: access/heap/heapam.c:3271 access/index/genam.c:829 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "並列処理中はタプルの更新はできません" -#: access/heap/heapam.c:3336 +#: access/heap/heapam.c:3448 #, 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:4959 access/heap/heapam.c:4997 access/heap/heapam.c:5262 access/heap/heapam_handler.c:470 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "リレーション\"%s\"の行ロックを取得できませんでした" -#: access/heap/heapam_handler.c:413 +#: access/heap/heapam.c:6376 commands/trigger.c:3350 executor/nodeModifyTable.c:2545 executor/nodeModifyTable.c:2635 +#, c-format +msgid "tuple to be updated was already modified by an operation triggered by the current command" +msgstr "更新対象のタプルはすでに現在のコマンドによって起動された操作によって変更されています" + +#: access/heap/heapam_handler.c:415 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "ロック対象のタプルは同時に行われた更新によってすでに他の子テーブルに移動されています" @@ -1201,8 +1205,8 @@ msgstr "行が大きすぎます: サイズは%zu、上限は%zu" msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "ファイル\"%1$s\"に書き込めませんでした、%3$dバイト中%2$dバイト書き込みました: %m" -#: access/heap/rewriteheap.c: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 -#: replication/logical/origin.c:603 replication/slot.c:2059 storage/file/copydir.c:157 storage/smgr/md.c:230 utils/time/snapmgr.c:1234 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3382 access/transam/xlog.c:3590 access/transam/xlog.c:4454 access/transam/xlog.c:9456 access/transam/xlogfuncs.c:693 backup/basebackup_server.c:149 backup/basebackup_server.c:242 commands/dbcommands.c:495 postmaster/launch_backend.c:354 postmaster/postmaster.c:4085 postmaster/walsummarizer.c:1219 +#: replication/logical/origin.c:603 replication/slot.c:2252 storage/file/copydir.c:173 storage/file/copydir.c:261 storage/smgr/md.c:252 utils/time/snapmgr.c:1241 #, c-format msgid "could not create file \"%s\": %m" msgstr "ファイル\"%s\"を作成できませんでした: %m" @@ -1212,156 +1216,171 @@ msgstr "ファイル\"%s\"を作成できませんでした: %m" 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:3443 access/transam/xlog.c:3646 access/transam/xlog.c:4466 commands/dbcommands.c:507 postmaster/launch_backend.c:365 postmaster/launch_backend.c:377 replication/logical/origin.c:615 replication/logical/origin.c:657 replication/logical/origin.c:676 replication/logical/snapbuild.c:1617 replication/slot.c:2287 +#: storage/file/buffile.c:545 storage/file/copydir.c:213 utils/init/miscinit.c:1660 utils/init/miscinit.c:1671 utils/init/miscinit.c:1679 utils/misc/guc.c:4488 utils/misc/guc.c:4519 utils/misc/guc.c:5673 utils/misc/guc.c:5691 utils/time/snapmgr.c:1246 utils/time/snapmgr.c:1253 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: access/heap/vacuumlazy.c:473 +#: access/heap/vacuumlazy.c:814 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "\"%s.%s.%s\"に対して積極的VACUUMを実行しています" -#: access/heap/vacuumlazy.c:478 +#: access/heap/vacuumlazy.c:819 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "\"%s.%s.%s\"に対してVACUUMを実行しています" -#: access/heap/vacuumlazy.c:626 +#: access/heap/vacuumlazy.c:987 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"のVACUUM完了: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:637 +#: access/heap/vacuumlazy.c:998 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の周回防止のための積極的自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:639 +#: access/heap/vacuumlazy.c:1000 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の周回防止のための自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:644 +#: access/heap/vacuumlazy.c:1005 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の積極的自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:1007 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:1014 #, c-format -msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" -msgstr "ページ: %u削除、%u残存、%uスキャン (全体の%.2f%%)\n" +msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total), %u eagerly scanned\n" +msgstr "ページ: %u削除、%u残存、%uスキャン (全体の%.2f%%)、%u貪欲スキャン\n" -#: access/heap/vacuumlazy.c:660 +#: access/heap/vacuumlazy.c:1023 #, c-format -msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" -msgstr "タプル: %lld削除、%lld残存、%lldが削除されているがまだ除去できない\n" +msgid "tuples: % removed, % remain, % are dead but not yet removable\n" +msgstr "タプル:%削除、%残存、%が削除されているがまだ除去できません\n" -#: access/heap/vacuumlazy.c:666 +#: access/heap/vacuumlazy.c:1029 #, c-format -msgid "tuples missed: %lld dead from %u pages not removed due to cleanup lock contention\n" -msgstr "未処理のタプル: クリーンナップロックの競合により、%2$uページ中の%1$lld行の削除済みタプルは除去されません\n" +msgid "tuples missed: % dead from %u pages not removed due to cleanup lock contention\n" +msgstr "未処理のタプル: クリーンナップロックの競合により、%2$uページ中の%1$行の削除済みタプルは除去されません\n" -#: access/heap/vacuumlazy.c:672 +#: access/heap/vacuumlazy.c:1035 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" msgstr "削除可能限界: %u、これは処理完了時には%d XID分過去になります\n" -#: access/heap/vacuumlazy.c:679 +#: access/heap/vacuumlazy.c:1042 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "新しいrelfrozenxid: %u、これは前回の値よりも%d XID分進んでいます\n" -#: access/heap/vacuumlazy.c:687 +#: access/heap/vacuumlazy.c:1050 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "" "新しいrelminmxid: %u、これは前回の値よりも%d MXID分進んでいます\n" "\n" -#: access/heap/vacuumlazy.c:690 +#: access/heap/vacuumlazy.c:1053 +#, c-format +msgid "frozen: %u pages from table (%.2f%% of total) had % tuples frozen\n" +msgstr "凍結: テーブルから%uページ(全体の%.2f%%)で%タプルが凍結されました\n" + +#: access/heap/vacuumlazy.c:1061 #, c-format -msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" -msgstr "凍結: テーブルから%uページ(全体の%.2f%%)で%lldタプルが凍結されました\n" +msgid "visibility map: %u pages set all-visible, %u pages set all-frozen (%u were all-visible)\n" +msgstr "可視性マップ: %uページが全可視 (all-visible)、%uページが全凍結 (all-frozen) (前回は%uページが全可視でした)\n" -#: access/heap/vacuumlazy.c:698 +#: access/heap/vacuumlazy.c:1069 msgid "index scan not needed: " msgstr "インデックススキャンは不要です: " -#: access/heap/vacuumlazy.c:700 +#: access/heap/vacuumlazy.c:1071 msgid "index scan needed: " msgstr "インデックススキャンが必要です: " -#: access/heap/vacuumlazy.c:702 +#: access/heap/vacuumlazy.c:1073 #, c-format -msgid "%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" -msgstr "テーブル内の%uページ(全体の%.2f%%)にあった%lld行の削除行識別子が削除されました\n" +msgid "%u pages from table (%.2f%% of total) had % dead item identifiers removed\n" +msgstr "テーブル内の%uページ(全体の%.2f%%)にあった%行の削除行識別子が削除されました\n" -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:1078 msgid "index scan bypassed: " msgstr "インデックススキャンはスキップされました: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:1080 msgid "index scan bypassed by failsafe: " msgstr "フェイルセーフによりインデックススキャンがスキップされました: " -#: access/heap/vacuumlazy.c:711 +#: access/heap/vacuumlazy.c:1082 #, c-format -msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" -msgstr "テーブル内の%uページ(全体の%.2f%%)には%lld行の削除行識別子があります\n" +msgid "%u pages from table (%.2f%% of total) have % dead item identifiers\n" +msgstr "テーブル内の%uページ(全体の%.2f%%)には%行の削除行識別子があります\n" -#: access/heap/vacuumlazy.c:726 +#: access/heap/vacuumlazy.c:1097 #, c-format 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:1112 commands/analyze.c:817 +#, c-format +msgid "delay time: %.3f ms\n" +msgstr "遅延時間: %.3f ミリ秒\n" + +#: access/heap/vacuumlazy.c:1120 commands/analyze.c:825 #, 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:1130 commands/analyze.c:828 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "平均読み込み速度: %.3f MB/s, 平均書き込み速度: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:751 commands/analyze.c:794 +#: access/heap/vacuumlazy.c:1133 commands/analyze.c:830 #, c-format -msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" -msgstr "バッファ使用: %lldヒット, %lld失敗, %lld ダーティ化\n" +msgid "buffer usage: % hits, % reads, % dirtied\n" +msgstr "バッファ使用: ヒット %, 読み込み %, ダーティ化 %\n" -#: access/heap/vacuumlazy.c:756 +#: access/heap/vacuumlazy.c:1138 commands/analyze.c:835 #, c-format -msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" -msgstr "WAL使用量: %lldのレコード, %lldの全ページイメージ, %lluバイト\n" +msgid "WAL usage: % records, % full page images, % bytes, % buffers full\n" +msgstr "WAL使用量: %のレコード, %の全ページイメージ, %バイト, %のバッファフル\n" -#: access/heap/vacuumlazy.c:760 commands/analyze.c:798 +#: access/heap/vacuumlazy.c:1143 commands/analyze.c:840 #, c-format msgid "system usage: %s" msgstr "システム使用状況: %s" -#: access/heap/vacuumlazy.c:2172 +#: access/heap/vacuumlazy.c:1431 +#, c-format +msgid "disabling eager scanning after freezing %u eagerly scanned blocks of \"%s.%s.%s\"" +msgstr "\"%2$s.%3$s.%4$s\"を貪欲スキャンで%1$uブロックを凍結した後、貪欲スキャンを無効にします" + +#: access/heap/vacuumlazy.c:2820 #, c-format -msgid "table \"%s\": removed %lld dead item identifiers in %u pages" -msgstr "テーブル\"%1$s\": %3$uページ内の%2$lldの削除済み行識別子を除去" +msgid "table \"%s\": removed % dead item identifiers in %u pages" +msgstr "テーブル\"%1$s\": %3$uページ内の%2$の削除済み行識別子を除去" -#: access/heap/vacuumlazy.c:2326 +#: access/heap/vacuumlazy.c:2992 #, c-format msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "%4$d回のインデックススキャンののち、フェイルセーフとしてテーブル\"%1$s.%2$s.%3$s\"の必須ではないメンテナンスをスキップします" -#: access/heap/vacuumlazy.c:2329 +#: access/heap/vacuumlazy.c:2995 #, 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:2996 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" @@ -1370,67 +1389,67 @@ msgstr "" "設定パラメータ\"maintenance_work_mem\"または\"autovacuum_work_mem\"を増やすことを検討してください。\n" "VACUUMがトランザクションIDの割り当てに追従できるようにする他の方法を検討する必要があるかもしれません。" -#: access/heap/vacuumlazy.c:2592 +#: access/heap/vacuumlazy.c:3258 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\":競合するロックが存在するため切り詰めを中断します" -#: access/heap/vacuumlazy.c:2662 +#: access/heap/vacuumlazy.c:3328 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "テーブル\"%s\": %uページから%uページに切り詰め" -#: access/heap/vacuumlazy.c:2724 +#: access/heap/vacuumlazy.c:3390 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "テーブル\"%s\": 競合するロック要求が存在するため、切り詰めを保留します" -#: access/heap/vacuumlazy.c:2843 +#: access/heap/vacuumlazy.c:3509 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "\"%s\"のVACUUMに対するパラレルオプションを無効化します --- 一時テーブルは並列にVACUUMできません" -#: access/heap/vacuumlazy.c:3107 +#: access/heap/vacuumlazy.c:3776 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "リレーション\"%3$s.%4$s\"のブロック%1$u、オフセット%2$uのスキャン中" -#: access/heap/vacuumlazy.c:3110 +#: access/heap/vacuumlazy.c:3779 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "リレーション\\\"%2$s.%3$s\\\"のブロック%1$uのスキャン中" -#: access/heap/vacuumlazy.c:3114 +#: access/heap/vacuumlazy.c:3783 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "リレーション\"%s.%s\"のスキャン中" -#: access/heap/vacuumlazy.c:3122 +#: access/heap/vacuumlazy.c:3791 #, c-format msgid "while vacuuming block %u offset %u of relation \"%s.%s\"" msgstr "リレーション\"%3$s.%4$s\"のブロック%1$u、オフセット%2$uのVACUUM処理中" -#: access/heap/vacuumlazy.c:3125 +#: access/heap/vacuumlazy.c:3794 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "リレーション\\\"%2$s.%3$s\\\"のブロック%1$uのVACUUM処理中" -#: access/heap/vacuumlazy.c:3129 +#: access/heap/vacuumlazy.c:3798 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "リレーション\"%s.%s\"のVACUUM処理中" -#: access/heap/vacuumlazy.c:3134 commands/vacuumparallel.c:1113 +#: access/heap/vacuumlazy.c:3803 commands/vacuumparallel.c:1126 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "リレーション\\\"%2$s.%3$s\\\"のインデックス%1$sのVACUUM処理中" -#: access/heap/vacuumlazy.c:3139 commands/vacuumparallel.c:1119 +#: access/heap/vacuumlazy.c:3808 commands/vacuumparallel.c:1132 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "リレーション\\\"%2$s.%3$s\\\"のインデックス%1$sのクリーンアップ処理中" -#: access/heap/vacuumlazy.c:3145 +#: access/heap/vacuumlazy.c:3814 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "リレーション \"%s.%s\"を%uブロックに切り詰め中" @@ -1445,22 +1464,22 @@ msgstr "アクセスメソッド\"%s\"のタイプが%sではありません" msgid "index access method \"%s\" does not have a handler" msgstr "インデックスアクセスメソッド\"%s\"はハンドラを持っていません" -#: access/index/genam.c:487 +#: access/index/genam.c:498 #, c-format msgid "transaction aborted during system catalog scan" msgstr "システムカタログのスキャン中にトランザクションがアボートしました" -#: access/index/genam.c:655 access/index/indexam.c:82 +#: access/index/genam.c:663 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:1361 commands/indexcmds.c:2982 commands/tablecmds.c:284 commands/tablecmds.c:308 commands/tablecmds.c:19568 commands/tablecmds.c:21488 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\"はインデックスではありません" -#: access/index/indexam.c:1028 +#: access/index/indexam.c:1075 #, c-format msgid "operator class %s has no options" msgstr "演算子クラス%sにはオプションはありません" @@ -1480,7 +1499,7 @@ msgstr "キー %s はすでに存在します。" msgid "This may be because of a non-immutable index expression." msgstr "これは不変でないインデックス式が原因である可能性があります" -#: 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:2483 #, c-format msgid "index \"%s\" is not a btree" msgstr "インデックス\"%s\"はbtreeではありません" @@ -1500,17 +1519,17 @@ msgstr "インデックス\"%s\"に削除処理中の内部ページがありま msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "これは9.3かそれ以前のバージョンで、アップグレード前にVACUUMが中断された際に起きた可能性があります。REINDEXしてください。" -#: access/nbtree/nbtutils.c:5112 +#: access/nbtree/nbtutils.c:4247 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "インデックス行サイズ%1$zuはインデックス\"%4$s\"でのbtreeバージョン %2$u の最大値%3$zuを超えています" -#: access/nbtree/nbtutils.c:5118 +#: access/nbtree/nbtutils.c:4252 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "インデックス行はリレーション\"%3$s\"のタプル(%1$u,%2$u)を参照しています。" -#: access/nbtree/nbtutils.c:5122 +#: access/nbtree/nbtutils.c:4256 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1519,57 +1538,57 @@ msgstr "" "バッファページの1/3を超える値はインデックス化できません。\n" "MD5ハッシュによる関数インデックスを検討するか、もしくは全文テキストインデックスを使用してください。" -#: access/nbtree/nbtvalidate.c:246 +#: access/nbtree/nbtvalidate.c:242 #, c-format msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は型%3$sと%4$sに対応するサポート関数を含んでいません" -#: access/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\"はopenできません" -#: access/spgist/spgutils.c:245 +#: access/spgist/spgutils.c:251 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "リーフ型が入力型と異なる場合は圧縮メソッドの定義が必要です" -#: access/spgist/spgutils.c:1017 +#: access/spgist/spgutils.c:1036 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST内部タプルのサイズ%zuが最大値%zuを超えています" -#: access/spgist/spgvalidate.c:136 +#: access/spgist/spgvalidate.c:128 #, c-format msgid "SP-GiST leaf data type %s does not match declared type %s" msgstr "SP-GiSTのリーフデータ型%sは宣言された型%sと一致しません" -#: access/spgist/spgvalidate.c:302 +#: access/spgist/spgvalidate.c:294 #, c-format msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は%4$s型に対するサポート関数%3$dを含んでいません" -#: access/table/tableam.c:255 +#: access/table/tableam.c:256 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u) はリレーション\"%s\"に対して妥当ではありません" -#: access/table/tableamapi.c:109 +#: access/table/tableamapi.c:106 #, c-format msgid "\"%s\" cannot be empty." msgstr "\"%s\"は空にはできません。" -#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4858 +#: access/table/tableamapi.c:113 access/transam/xlogrecovery.c:4879 #, c-format msgid "\"%s\" is too long (maximum %d characters)." msgstr "\"%s\"が長過ぎます(最大%d文字)。" -#: access/table/tableamapi.c:139 +#: access/table/tableamapi.c:136 #, c-format msgid "table access method \"%s\" does not exist" msgstr "テーブルアクセスメソッド\"%s\"は存在しません" -#: access/table/tableamapi.c:144 +#: access/table/tableamapi.c:141 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "テーブルアクセスメソッド\"%s\"は存在しません。" @@ -1599,12 +1618,12 @@ msgstr "プライマリサーバーで設定パラメータ\"%s\"がonに設定 msgid "Make sure the configuration parameter \"%s\" is set." msgstr "設定パラメータ\"%s\"が設定されていることを確認してください。" -#: access/transam/multixact.c:1050 +#: access/transam/multixact.c:1097 #, c-format msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "データベース\"%s\"はMultiXactIds周回によるデータ損失を防ぐために、新規のMultiXactIdsを割り当てるコマンドを受け付けていません" -#: 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:1099 access/transam/multixact.c:1106 access/transam/multixact.c:1130 access/transam/multixact.c:1139 access/transam/varsup.c:158 access/transam/varsup.c:165 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1613,61 +1632,61 @@ msgstr "" "そのデータベース全体の VACUUM を実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/multixact.c:1057 +#: access/transam/multixact.c:1104 #, 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 のデータベースは周回によるデータ損失を防ぐために、新規のMultiXactIdsを割り当てるコマンドを受け付けていません" -#: access/transam/multixact.c:1078 access/transam/multixact.c:2433 +#: access/transam/multixact.c:1125 access/transam/multixact.c:2482 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "データベース\"%s\"はあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" -#: access/transam/multixact.c:1087 access/transam/multixact.c:2442 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2491 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "OID %u のデータベースはあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" -#: access/transam/multixact.c:1148 +#: access/transam/multixact.c:1195 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "マルチトランザクションの\"メンバ\"が制限を超えました" -#: access/transam/multixact.c:1149 +#: access/transam/multixact.c:1196 #, 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 個のメンバ分しかありません。" -#: access/transam/multixact.c:1154 +#: access/transam/multixact.c:1201 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." msgstr "\"vacuum_multixact_freeze_min_age\"と\"vacuum_multixact_freeze_table_age\"をより小さな値に設定してOID %u のデータベースでデータベース全体にVACUUMを実行してください。" -#: access/transam/multixact.c:1185 +#: access/transam/multixact.c:1232 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "OID %u のデータベースは更に%d個のマルチトランザクションメンバが使用される前にVACUUMを実行する必要があります" -#: access/transam/multixact.c:1190 +#: access/transam/multixact.c:1237 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." msgstr "\"vacuum_multixact_freeze_min_age\"'と\"vacuum_multixact_freeze_table_age\"をより小さな値に設定した上で、そのデータベースでVACUUMを実行してください。" -#: access/transam/multixact.c:1330 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %uはもう存在しません: 周回しているようです" -#: access/transam/multixact.c:1336 +#: access/transam/multixact.c:1383 #, 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:2487 access/transam/multixact.c:2496 #, c-format msgid "" "To avoid MultiXactId assignment failures, execute a database-wide VACUUM in that database.\n" @@ -1676,61 +1695,61 @@ msgstr "" "MultiXactIdの割り当て失敗を防ぐために、このデータベースでデータベース全体に対するVACUUMを実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/multixact.c:2726 +#: access/transam/multixact.c:2775 #, 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:2797 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "マルチトランザクションメンバーの周回防止機能が有効になりました" -#: access/transam/multixact.c:3131 +#: access/transam/multixact.c:3188 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "最古のマルチトランザクション%uが見つかりません、アクセス可能な最古のものは%u、切り詰めをスキップします" -#: access/transam/multixact.c:3149 +#: access/transam/multixact.c:3206 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "マルチトランザクション%uがディスク上に存在しないため、そこまでの切り詰めができません、切り詰めをスキップします" -#: access/transam/multixact.c:3468 +#: access/transam/multixact.c:3525 #, c-format msgid "invalid MultiXactId: %u" msgstr "不正なMultiXactId: %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:752 access/transam/parallel.c:871 #, c-format msgid "parallel worker failed to initialize" msgstr "パラレルワーカーの初期化に失敗しました" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:753 access/transam/parallel.c:872 #, c-format msgid "More details may be available in the server log." msgstr "詳細な情報がサーバーログにあるかもしれません。" -#: access/transam/parallel.c:912 +#: access/transam/parallel.c:933 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "並列処理中にpostmasterが終了しました" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1120 #, c-format msgid "lost connection to parallel worker" msgstr "パラレルワーカーへの接続を失いました" -#: access/transam/parallel.c:1155 access/transam/parallel.c:1157 +#: access/transam/parallel.c:1176 access/transam/parallel.c:1178 msgid "parallel worker" msgstr "パラレルワーカー" -#: access/transam/parallel.c:1327 replication/logical/applyparallelworker.c:890 +#: access/transam/parallel.c:1348 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:1353 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "動的共有メモリセグメントのマジックナンバーが不正です" @@ -1790,62 +1809,62 @@ msgstr "ID %d の既存の独自リソースマネージャが同じ名前です msgid "registered custom resource manager \"%s\" with ID %d" msgstr "独自リソースマネージャ\"%s\"をID %dで登録しました" -#: access/transam/slru.c:346 +#: access/transam/slru.c:360 #, c-format -msgid "\"%s\" must be a multiple of %d" -msgstr "\"%s\"は%dの倍数でなければなりません" +msgid "\"%s\" must be a multiple of %d." +msgstr "\"%s\"は%dの倍数でなければなりません。" -#: access/transam/slru.c:815 +#: access/transam/slru.c:832 #, 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:1061 access/transam/slru.c:1067 access/transam/slru.c:1075 access/transam/slru.c:1080 access/transam/slru.c:1087 access/transam/slru.c:1092 access/transam/slru.c:1099 access/transam/slru.c:1106 #, c-format msgid "could not access status of transaction %u" msgstr "トランザクション%uのステータスにアクセスできませんでした" -#: access/transam/slru.c:1045 +#: access/transam/slru.c:1062 #, c-format msgid "Could not open file \"%s\": %m." msgstr "ファイル\"%s\"をオープンできませんでした: %m。" -#: access/transam/slru.c:1051 +#: access/transam/slru.c:1068 #, 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:1076 #, 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:1081 #, 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:1088 #, 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:1093 #, 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:1100 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "ファイル\"%s\"をfsyncできませんでした: %m。" -#: access/transam/slru.c:1090 +#: access/transam/slru.c:1107 #, c-format msgid "Could not close file \"%s\": %m." msgstr "ファイル\"%s\"をクローズできませんでした: %m。" -#: access/transam/slru.c:1416 +#: access/transam/slru.c:1433 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "ディレクトリ\"%s\"を切り詰めできませんでした: 明らかに周回しています" @@ -1910,12 +1929,12 @@ msgstr "\"max_prepared_transactions\"を0以外の値に設定してください 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:2530 #, 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:2531 #, c-format msgid "Increase \"max_prepared_transactions\" (currently %d)." msgstr "\"max_prepared_transactions\"を大きくしてください(現在は%d)。" @@ -1950,145 +1969,145 @@ msgstr "終了させるためにはこのトランザクションを準備した 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 "2相状態ファイルの最大長が制限を超えました" -#: 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 バイト" -#: 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 "ファイル\"%1$s\"を読み込めませんでした: %3$lldバイトのうち%2$dバイトを読み込みました" -#: 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:571 postmaster/walsummarizer.c:943 replication/logical/logical.c:211 replication/walsender.c:812 #, 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の%X/%Xから2相状態を読み取れませんでした: %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の%X/%Xから2相状態を読み取れませんでした" -#: 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にあるはずの2相状態のデータがありません" -#: access/transam/twophase.c:1754 +#: access/transam/twophase.c:1744 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "ファイル\"%s\"を再作成できませんでした: %m" -#: access/transam/twophase.c:1881 +#: access/transam/twophase.c:1871 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "長時間実行中の準備済みトランザクションのために%u個の2相状態ファイルが書き込まれました" -#: access/transam/twophase.c:2117 +#: access/transam/twophase.c:2106 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "共有メモリから準備済みトランザクション%uを復元します" -#: access/transam/twophase.c:2210 +#: access/transam/twophase.c:2199 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "不要になったトランザクション%uの2相状態ファイルを削除します" -#: access/transam/twophase.c:2217 +#: access/transam/twophase.c:2206 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "不要になったトランザクション%uの2相状態をメモリから削除します" -#: access/transam/twophase.c:2230 +#: access/transam/twophase.c:2219 #, c-format msgid "removing future two-phase state file for transaction %u" -msgstr "未来のトランザクション%uの2相状態ファイルを削除します" +msgstr "トランザクション%uの未来の2相状態ファイルを削除します" -#: access/transam/twophase.c:2237 +#: access/transam/twophase.c:2226 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "未来のトランザクション%uの2相状態をメモリから削除します" -#: access/transam/twophase.c:2262 +#: access/transam/twophase.c:2251 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "トランザクション%uの2相状態ファイルが破損しています" -#: access/transam/twophase.c:2267 +#: access/transam/twophase.c:2256 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "メモリ上にあるトランザクション%uの2相状態が破損しています" -#: access/transam/twophase.c:2524 +#: access/transam/twophase.c:2513 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "トランザクション%uの2相状態ファイルを復元できませんでした" -#: access/transam/twophase.c:2526 +#: access/transam/twophase.c:2515 #, 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 "2相状態ファイルがWALレコード%X/%Xで見つかりましたが、このトランザクションはすでにディスクから復元済みです。" -#: access/transam/twophase.c:2534 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 +#: access/transam/twophase.c:2523 storage/file/fd.c:514 utils/fmgr/dfmgr.c:199 #, 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周回によるデータ損失を防ぐために、新規のXIDを割り当てるコマンドを受け付けていません" +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database \"%s\"" +msgstr "データベース\"%s\"はXID周回によるデータ損失を防ぐために、新規のトランザクションIDを割り当てるコマンドを受け付けていません" #: 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周回によるデータ損失を防ぐために、新規のXIDを割り当てるマンドを受け付けていません" +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database with OID %u" +msgstr "OID %u を持つデータベースは周回によるデータ損失を防ぐために、新規のトランザクションIDを割り当てるマンドを受け付けていません" #: access/transam/varsup.c:175 access/transam/varsup.c:490 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "データベース\"%s\"は%uトランザクション以内にVACUUMする必要があります" -#: 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 @@ -2096,560 +2115,515 @@ msgstr "" msgid "database with OID %u must be vacuumed within %u transactions" msgstr "OID %uのデータベースは%uトランザクション以内にVACUUMを実行する必要があります" -#: access/transam/xact.c:649 +#: 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:652 #, 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 +#: access/transam/xact.c:843 #, c-format msgid "cannot modify data in a parallel worker" msgstr "並列ワーカーではデータの更新はできません" -#: access/transam/xact.c:1115 +#: access/transam/xact.c:1118 #, c-format msgid "cannot start commands during a parallel operation" msgstr "並列処理中にはコマンドは起動できません" -#: access/transam/xact.c:1123 +#: access/transam/xact.c:1126 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "1トランザクション内では 2^32-2 個より多くのコマンドを実行できません" -#: access/transam/xact.c:1664 +#: access/transam/xact.c:1695 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "コミットされたサブトランザクション数の最大値(%d)が制限を越えました" -#: access/transam/xact.c:2561 +#: access/transam/xact.c:2616 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "一時オブジェクトに対する操作を行ったトランザクションをPREPAREすることはできません" -#: access/transam/xact.c:2571 +#: access/transam/xact.c:2626 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "エクスポートされたスナップショットを持つトランザクションをPREPAREすることはできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3593 +#: access/transam/xact.c:3657 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%sはトランザクションブロックの内側では実行できません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3603 +#: access/transam/xact.c:3667 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%sはサブトランザクションブロックの内側では実行できません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3613 -#, c-format -msgid "%s cannot be executed within a pipeline" -msgstr "%s はパイプライン内での実行はできません" - -#. translator: %s represents an SQL statement name -#: access/transam/xact.c:3623 +#: access/transam/xact.c:3677 #, c-format msgid "%s cannot be executed from a function" msgstr "%s は関数内での実行はできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3694 access/transam/xact.c:4019 access/transam/xact.c:4098 access/transam/xact.c:4221 access/transam/xact.c:4372 access/transam/xact.c:4441 access/transam/xact.c:4552 +#: access/transam/xact.c:3748 access/transam/xact.c:4070 access/transam/xact.c:4149 access/transam/xact.c:4272 access/transam/xact.c:4423 access/transam/xact.c:4492 access/transam/xact.c:4603 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%sはトランザクションブロック内でのみ使用できます" -#: access/transam/xact.c:3905 +#: access/transam/xact.c:3956 #, c-format msgid "there is already a transaction in progress" msgstr "すでにトランザクションが実行中です" -#: access/transam/xact.c:4024 access/transam/xact.c:4103 access/transam/xact.c:4226 +#: access/transam/xact.c:4075 access/transam/xact.c:4154 access/transam/xact.c:4277 #, c-format msgid "there is no transaction in progress" msgstr "実行中のトランザクションがありません" -#: access/transam/xact.c:4114 +#: access/transam/xact.c:4165 #, c-format msgid "cannot commit during a parallel operation" msgstr "並列処理中にはコミットはできません" -#: access/transam/xact.c:4237 +#: access/transam/xact.c:4288 #, c-format msgid "cannot abort during a parallel operation" msgstr "パラレル処理中にロールバックはできません" -#: access/transam/xact.c:4336 +#: access/transam/xact.c:4387 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "パラレル処理中にセーブポイントは定義できません" -#: access/transam/xact.c:4423 +#: access/transam/xact.c:4474 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "並列処理中はセーブポイントの解放はできません" -#: access/transam/xact.c:4433 access/transam/xact.c:4484 access/transam/xact.c:4544 access/transam/xact.c:4593 +#: access/transam/xact.c:4484 access/transam/xact.c:4535 access/transam/xact.c:4595 access/transam/xact.c:4644 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "セーブポイント\"%s\"は存在しません" -#: access/transam/xact.c:4490 access/transam/xact.c:4599 +#: access/transam/xact.c:4541 access/transam/xact.c:4650 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "セーブポイント\"%s\"は現在のセーブポイントレベルには存在しません" -#: access/transam/xact.c:4532 +#: access/transam/xact.c:4583 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "パラレル処理中にセーブポイントのロールバックはできません" -#: access/transam/xact.c:5376 +#: access/transam/xact.c:5438 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "1トランザクション内には 2^32-1 個より多くのサブトランザクションを作成できません" -#: access/transam/xlog.c:1536 +#: access/transam/xlog.c:1552 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "生成されたWALより先の位置までのフラッシュ要求; 要求 %X/%X, 現在位置 %X/%X" -#: access/transam/xlog.c:1763 +#: access/transam/xlog.c:1779 #, c-format msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X" msgstr "生成されたWALより先の位置までの読み込み要求; 要求 %X/%X, 現在位置 %X/%X" -#: access/transam/xlog.c:2204 access/transam/xlog.c:4495 +#: access/transam/xlog.c:2342 access/transam/xlog.c:4690 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "WALセグメントサイズは1MBから1GBまでの間の2の累乗でなければなりません。" -#: access/transam/xlog.c:2222 +#: access/transam/xlog.c:2360 #, 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:2597 #, 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:3883 access/transam/xlogutils.c:820 replication/walsender.c:3050 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "要求された WAL セグメント %s はすでに削除されています" -#: access/transam/xlog.c:4055 +#: access/transam/xlog.c:4205 #, 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:4248 access/transam/xlog.c:4259 access/transam/xlog.c:4280 #, 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:4265 access/transam/xlog.c:4286 #, 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:4269 access/transam/xlog.c:4289 commands/dbcommands.c:3276 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "なかったディレクトリ\"%s\"の作成に失敗しました: %m" -#: access/transam/xlog.c:4206 +#: access/transam/xlog.c:4356 #, 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:4534 access/transam/xlog.c:4544 access/transam/xlog.c:4570 access/transam/xlog.c:4580 access/transam/xlog.c:4590 access/transam/xlog.c:4596 access/transam/xlog.c:4606 access/transam/xlog.c:4616 access/transam/xlog.c:4626 access/transam/xlog.c:4636 access/transam/xlog.c:4646 access/transam/xlog.c:4656 access/transam/xlog.c:4668 access/transam/xlog.c:4676 utils/init/miscinit.c:1817 #, c-format msgid "database files are incompatible with server" msgstr "データベースファイルがサーバーと互換性がありません" -#: access/transam/xlog.c:4358 +#: access/transam/xlog.c:4535 #, 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:4539 #, 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:4545 #, 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:4548 access/transam/xlog.c:4576 access/transam/xlog.c:4586 access/transam/xlog.c:4592 #, c-format msgid "It looks like you need to initdb." msgstr "initdbが必要のようです。" -#: access/transam/xlog.c:4383 +#: access/transam/xlog.c:4560 #, c-format msgid "incorrect checksum in control file" msgstr "制御ファイル内のチェックサムが不正です" -#: access/transam/xlog.c:4394 +#. translator: %s is a variable name and %d is its value +#: access/transam/xlog.c:4572 access/transam/xlog.c:4582 access/transam/xlog.c:4598 access/transam/xlog.c:4608 access/transam/xlog.c:4618 access/transam/xlog.c:4628 access/transam/xlog.c:4638 access/transam/xlog.c:4648 access/transam/xlog.c:4658 #, 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 でコンパイルされています。" +msgid "The database cluster was initialized with %s %d, but the server was compiled with %s %d." +msgstr "データベースクラスタは %s %d で初期化されましたが、サーバーは %s %d でコンパイルされています。" -#: access/transam/xlog.c:4402 -#, 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:4591 #, 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 -#, 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:4602 access/transam/xlog.c:4612 access/transam/xlog.c:4622 access/transam/xlog.c:4632 access/transam/xlog.c:4642 access/transam/xlog.c:4652 access/transam/xlog.c:4662 access/transam/xlog.c:4671 access/transam/xlog.c:4679 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "再コンパイルもしくは initdb が必要そうです。" -#: access/transam/xlog.c:4424 -#, 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 -#, 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 -#, 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 -#, 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 -#, 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 -#, 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:4669 #, 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:4677 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "データベースクラスタは USE_FLOAT8_BYVAL 付きで初期化されましたが、サーバー側は USE_FLOAT8_BYVAL なしでコンパイルされています。" -#: access/transam/xlog.c:4491 +#: access/transam/xlog.c:4686 #, 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バイト)" -#: access/transam/xlog.c:4504 +#. translator: both %s are GUC names +#: access/transam/xlog.c:4700 access/transam/xlog.c:4706 #, c-format -msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" -msgstr "\"min_wal_size\"は最低でも\"wal_segment_size\"の2倍である必要があります" +msgid "\"%s\" must be at least twice \"%s\"" +msgstr "\"%s\"は\"%s\"の2倍以上でなければなりません" -#: access/transam/xlog.c:4508 -#, c-format -msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" -msgstr "\"max_wal_size\"は最低でも\"wal_segment_size\"の2倍である必要があります" - -#: access/transam/xlog.c: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:4868 catalog/namespace.c:4696 commands/tablespace.c:1210 commands/user.c:2542 commands/variable.c:72 replication/slot.c:2655 tcop/postgres.c:3631 utils/error/elog.c:2274 #, 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:4914 commands/user.c:2558 commands/variable.c:173 tcop/postgres.c:3647 utils/error/elog.c:2300 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "不明なキーワードです: \"%s\"" -#: access/transam/xlog.c:5122 +#: access/transam/xlog.c:5341 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルに書き込めませんでした: %m" -#: access/transam/xlog.c:5130 +#: access/transam/xlog.c:5349 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをfsyncできませんでした: %m" -#: access/transam/xlog.c:5136 +#: access/transam/xlog.c:5355 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをクローズできませんでした: %m" -#: access/transam/xlog.c:5354 +#: access/transam/xlog.c:5580 #, c-format msgid "WAL was generated with \"wal_level=minimal\", cannot continue recovering" msgstr "\"wal_level=minimal\"でWALが生成されました、リカバリは続行不可です" -#: access/transam/xlog.c:5355 +#: access/transam/xlog.c:5581 #, 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:5582 #, 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:5647 #, c-format msgid "control file contains invalid checkpoint location" msgstr "制御ファイル内のチェックポイント位置が不正です" -#: access/transam/xlog.c:5432 +#: access/transam/xlog.c:5658 #, c-format msgid "database system was shut down at %s" msgstr "データベースシステムは %s にシャットダウンしました" -#: access/transam/xlog.c:5438 +#: access/transam/xlog.c:5664 #, c-format msgid "database system was shut down in recovery at %s" msgstr "データベースシステムはリカバリ中 %s にシャットダウンしました" -#: access/transam/xlog.c:5444 +#: access/transam/xlog.c:5670 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "データベースシステムはシャットダウン中に中断されました; %s まで動作していたことは確認できます" -#: access/transam/xlog.c:5450 +#: access/transam/xlog.c:5676 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "データベースシステムはリカバリ中 %s に中断されました" -#: access/transam/xlog.c:5452 +#: access/transam/xlog.c:5678 #, 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:5684 #, 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:5686 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "これが1回以上起きた場合はデータが破損している可能性があるため、より以前のリカバリ目標を選ぶ必要があるかもしれません。" -#: access/transam/xlog.c:5466 +#: access/transam/xlog.c:5692 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "データベースシステムは中断されました: %s まで動作していたことは確認できます" -#: access/transam/xlog.c:5473 +#: access/transam/xlog.c:5699 #, c-format msgid "control file contains invalid database cluster state" msgstr "制御ファイル内のデータベース・クラスタ状態が不正です" -#: access/transam/xlog.c:5860 +#: access/transam/xlog.c:6087 #, c-format msgid "WAL ends before end of online backup" msgstr "オンラインバックアップの終了より前にWALが終了しました" -#: access/transam/xlog.c:5861 +#: access/transam/xlog.c:6088 #, 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:6092 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WALが一貫性があるリカバリポイントより前で終了しました" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:6138 #, c-format msgid "selected new timeline ID: %u" msgstr "新しいタイムラインIDを選択: %u" -#: access/transam/xlog.c:5944 +#: access/transam/xlog.c:6171 #, c-format msgid "archive recovery complete" msgstr "アーカイブリカバリが完了しました" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6803 #, c-format msgid "shutting down" msgstr "シャットダウンしています" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6591 +#: access/transam/xlog.c:6842 #, 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:6854 #, 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:6919 #, 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 "リスタートポイント完了: %d個のバッファを出力 (%.1f%%); %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%X, 再生lsn=%X/%X" +msgid "restartpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %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 "リスタートポイント完了: %d個のバッファを出力 (%.1f%%), %d個のSLRUバッファを出力; %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%X, 再生lsn=%X/%X" -#: access/transam/xlog.c:6691 +#: access/transam/xlog.c:6943 #, 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 "チェックポイント完了: %d個のバッファを出力 (%.1f%%); %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%X, 再生lsn=%X/%X" +msgid "checkpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %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 "チェックポイント完了: %d個のバッファを出力 (%.1f%%), %d個のSLRUバッファを出力; %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%X, 再生lsn=%X/%X" -#: access/transam/xlog.c:7165 +#: access/transam/xlog.c:7429 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "データベースのシャットダウンに並行して、先行書き込みログが発生しました" -#: access/transam/xlog.c:7749 +#: access/transam/xlog.c:8016 #, c-format msgid "recovery restart point at %X/%X" msgstr "リカバリ再開ポイントは%X/%Xです" -#: access/transam/xlog.c:7751 +#: access/transam/xlog.c:8018 #, c-format msgid "Last completed transaction was at log time %s." msgstr "最後に完了したトランザクションはログ時刻 %s のものです" -#: access/transam/xlog.c:8013 +#: access/transam/xlog.c:8280 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "復帰ポイント\"%s\"が%X/%Xに作成されました" -#: access/transam/xlog.c:8220 +#: access/transam/xlog.c:8487 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "オンラインバックアップはキャンセルされ、リカバリを継続できません" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8545 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "シャットダウンチェックポイントレコードにおいて想定外のタイムラインID %u(%uのはず)がありました" -#: access/transam/xlog.c:8335 +#: access/transam/xlog.c:8603 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "オンラインチェックポイントレコードにおいて想定外のタイムラインID %u(%uのはず)がありました" -#: access/transam/xlog.c:8364 +#: access/transam/xlog.c:8632 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" msgstr "リカバリ終了チェックポイントレコードにおいて想定外のタイムラインID %u(%uのはず)がありました" -#: access/transam/xlog.c:8635 +#: access/transam/xlog.c:8902 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "ライトスルーファイル\"%s\"をfsyncできませんでした: %m" -#: access/transam/xlog.c:8640 +#: access/transam/xlog.c:8907 #, 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:8984 access/transam/xlog.c:9320 #, 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:8985 access/transam/xlog.c:9321 access/transam/xlogfuncs.c:249 #, 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:8990 #, c-format msgid "backup label too long (max %d bytes)" msgstr "バックアップラベルが長すぎます (最大%dバイト)" -#: access/transam/xlog.c:8854 +#: access/transam/xlog.c:9111 #, c-format msgid "WAL generated with \"full_page_writes=off\" was replayed since last restartpoint" msgstr "\"full_page_writes=off\"で生成されたWALが最終リスタートポイント以降に再生されました" -#: access/transam/xlog.c:8856 access/transam/xlog.c:9152 +#: access/transam/xlog.c:9113 access/transam/xlog.c:9409 #, 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:9193 backup/basebackup.c:1419 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:9200 backup/basebackup.c:1424 utils/adt/misc.c:359 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "シンボリックリンク\"%s\"の参照先が長すぎます" -#: access/transam/xlog.c:9064 -#, 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:9359 backup/basebackup.c:1283 #, c-format msgid "the standby was promoted during online backup" msgstr "オンラインバックアップ中にスタンバイが昇格しました" -#: access/transam/xlog.c:9103 backup/basebackup.c:1282 +#: access/transam/xlog.c:9360 backup/basebackup.c:1284 #, 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:9407 #, c-format msgid "WAL generated with \"full_page_writes=off\" was replayed during online backup" msgstr "\"full_page_writes=off\"で生成されたWALがオンラインバックアップ中に再生されました" -#: access/transam/xlog.c:9266 +#: access/transam/xlog.c:9523 #, 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:9537 #, 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:9539 #, c-format msgid "Check that your \"archive_command\" is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "\"archive_command\"が正しく実行されていることを確認してください。バックアップ処理は安全に取り消すことができますが、全てのWALセグメントがそろわなければこのバックアップは利用できません。" -#: access/transam/xlog.c:9289 +#: access/transam/xlog.c:9546 #, c-format msgid "all required WAL segments have been archived" msgstr "必要なすべての WAL セグメントがアーカイブされました" -#: access/transam/xlog.c:9293 +#: access/transam/xlog.c:9550 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "WAL アーカイブが有効になっていません。バックアップを完了させるには、すべての必要なWALセグメントが他の方法でコピーされたことを確認してください。" -#: access/transam/xlog.c:9332 +#: access/transam/xlog.c:9589 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "バックエンドがpg_backup_stopの呼び出し前に終了したため、バックアップは異常終了しました" @@ -2692,268 +2666,268 @@ msgstr "アーカイブステータスファイル\"%s\"を作成できません msgid "could not write archive status file \"%s\": %m" msgstr "アーカイブステータスファイル\"%s\"に書き込めませんでした: %m" -#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 +#: access/transam/xlogfuncs.c:70 backup/basebackup.c:999 #, c-format msgid "a backup is already in progress in this session" msgstr "このセッションではすでにバックアップが進行中です" -#: access/transam/xlogfuncs.c:140 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "backup is not in progress" msgstr "バックアップが進行中ではありません" -#: access/transam/xlogfuncs.c:141 +#: access/transam/xlogfuncs.c:142 #, c-format msgid "Did you call pg_backup_start()?" msgstr "pg_backup_start()を呼び出しましたか?" -#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:323 +#: access/transam/xlogfuncs.c:185 access/transam/xlogfuncs.c:243 access/transam/xlogfuncs.c:282 access/transam/xlogfuncs.c:303 access/transam/xlogfuncs.c:324 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "リカバリ中はWAL制御関数は実行できません。" -#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 access/transam/xlogfuncs.c:447 +#: access/transam/xlogfuncs.c:210 access/transam/xlogfuncs.c:390 access/transam/xlogfuncs.c:448 #, c-format msgid "%s cannot be executed during recovery." msgstr "リカバリ中は %s を実行できません。" -#: access/transam/xlogfuncs.c:215 +#: access/transam/xlogfuncs.c:216 #, c-format msgid "pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" msgstr "pg_log_standby_snapshot()は\"wal_level >= replica\"のときだけ使用できます" -#: access/transam/xlogfuncs.c:247 +#: access/transam/xlogfuncs.c:248 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "リストアポイントを作るにはWALレベルが不足しています" -#: access/transam/xlogfuncs.c:255 +#: access/transam/xlogfuncs.c:256 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "リストアポイントとしては値が長すぎます(最大%d文字)" -#: access/transam/xlogfuncs.c:486 +#: access/transam/xlogfuncs.c:487 #, c-format msgid "invalid WAL file name \"%s\"" msgstr "WALファイル名\"%s\"は不正です" -#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 access/transam/xlogfuncs.c:679 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 access/transam/xlogfuncs.c:680 #, c-format msgid "recovery is not in progress" msgstr "リカバリが進行中ではありません" -#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 access/transam/xlogfuncs.c:680 +#: access/transam/xlogfuncs.c:524 access/transam/xlogfuncs.c:554 access/transam/xlogfuncs.c:578 access/transam/xlogfuncs.c:601 access/transam/xlogfuncs.c:681 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "リカバリ制御関数リカバリ中にのみを実行可能です。" -#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "standby promotion is ongoing" msgstr "スタンバイの昇格を実行中です" -#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 +#: access/transam/xlogfuncs.c:530 access/transam/xlogfuncs.c:560 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "%sは昇格を開始した後には実行できません。" -#: access/transam/xlogfuncs.c:685 +#: access/transam/xlogfuncs.c:686 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "\"wait_seconds\"は負の値もしくはゼロにはできません" -#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 +#: access/transam/xlogfuncs.c:708 storage/ipc/signalfuncs.c:293 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "postmasterにシグナルを送信できませんでした: %m" -#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#: access/transam/xlogfuncs.c:740 libpq/be-secure.c:241 libpq/be-secure.c:350 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "予期しないpostmasterの終了のため、コネクションを終了します" -#: access/transam/xlogfuncs.c:740 +#: access/transam/xlogfuncs.c:741 #, c-format msgid "while waiting on promotion" msgstr "昇格の待機中" -#: access/transam/xlogfuncs.c:744 +#: access/transam/xlogfuncs.c:745 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" msgstr[0] "サーバーは%d秒以内に昇格しませんでした" -#: access/transam/xlogprefetcher.c:1088 +#: access/transam/xlogprefetcher.c:1086 #, c-format -msgid "\"recovery_prefetch\" is not supported on platforms that lack posix_fadvise()." -msgstr "\"recovery_prefetch\"はposix_fadvise()を持たないプラットフォームではサポートされません。" +msgid "\"recovery_prefetch\" is not supported on platforms that lack support for issuing read-ahead advice." +msgstr "\"recovery_prefetch\"は先読み指示の発行をサポートしないプラットフォームではサポートされません。" -#: access/transam/xlogreader.c:619 +#: access/transam/xlogreader.c:620 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "%X/%Xのレコードオフセットが不正です:最低でも%uを期待していましたが、実際は%uでした" -#: access/transam/xlogreader.c:628 +#: access/transam/xlogreader.c:629 #, c-format msgid "contrecord is requested by %X/%X" msgstr "%X/%Xでは継続レコードが必要です" -#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 +#: access/transam/xlogreader.c:670 access/transam/xlogreader.c:1135 #, c-format msgid "invalid record length at %X/%X: expected at least %u, got %u" msgstr "%X/%Xのレコード長が不正です:長さは最低でも%uを期待していましたが、実際は%uでした" -#: access/transam/xlogreader.c:758 +#: access/transam/xlogreader.c:759 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%Xでcontrecordフラグがありません" -#: access/transam/xlogreader.c:771 +#: access/transam/xlogreader.c:772 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "%3$X/%4$Xの継続レコードの長さ%1$u(正しくは%2$lld)は不正です" -#: access/transam/xlogreader.c:1142 +#: access/transam/xlogreader.c:1143 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "%2$X/%3$XのリソースマネージャID %1$uは不正です" -#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 +#: access/transam/xlogreader.c:1156 access/transam/xlogreader.c:1172 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "%3$X/%4$Xのレコードの後方リンク%1$X/%2$Xが不正です" -#: access/transam/xlogreader.c:1209 +#: access/transam/xlogreader.c:1210 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です" -#: access/transam/xlogreader.c:1243 +#: access/transam/xlogreader.c:1244 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "WALセグメント%2$s、LSN %3$X/%4$X、オフセット%5$uで不正なマジックナンバー%1$04X" -#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 +#: access/transam/xlogreader.c:1259 access/transam/xlogreader.c:1301 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "WALセグメント %2$s、LSN %3$X/%4$X、オフセット%5$uで不正な情報ビット列%1$04X" -#: access/transam/xlogreader.c:1274 +#: access/transam/xlogreader.c:1275 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" -msgstr "WALファイルは異なるデータベースシステム由来のものです: WALファイルのデータベースシステム識別子は %lluで、pg_control におけるデータベースシステム識別子は %lluです" +msgid "WAL file is from different database system: WAL file database system identifier is %, pg_control database system identifier is %" +msgstr "WALファイルは異なるデータベースシステム由来のものです: WALファイルのデータベースシステム識別子は %で、pg_control におけるデータベースシステム識別子は %です" -#: access/transam/xlogreader.c:1282 +#: access/transam/xlogreader.c:1283 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのセグメントサイズが正しくありません" -#: access/transam/xlogreader.c:1288 +#: access/transam/xlogreader.c:1289 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのXLOG_BLCKSZが正しくありません" -#: access/transam/xlogreader.c:1320 +#: access/transam/xlogreader.c:1321 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで想定外のページアドレス%1$X/%2$X" -#: access/transam/xlogreader.c:1346 +#: access/transam/xlogreader.c:1347 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u" msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで異常な順序のタイムラインID %1$u(%2$uの後)" -#: access/transam/xlogreader.c:1749 +#: access/transam/xlogreader.c:1759 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %uが%X/%Xで不正です" -#: access/transam/xlogreader.c:1773 +#: access/transam/xlogreader.c:1783 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません" -#: access/transam/xlogreader.c:1780 +#: access/transam/xlogreader.c:1790 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていませんが、%2$X/%3$Xのデータ長は%1$uです" -#: access/transam/xlogreader.c:1816 +#: access/transam/xlogreader.c:1826 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEが設定されていますが、%4$X/%5$Xでホールオフセット%1$u、長さ%2$u、ブロックイメージ長%3$uです" -#: access/transam/xlogreader.c:1832 +#: access/transam/xlogreader.c:1842 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEが設定されていませんが、%3$X/%4$Xにおけるホールオフセット%1$uの長さが%2$uです" -#: access/transam/xlogreader.c:1846 +#: access/transam/xlogreader.c:1856 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです" -#: access/transam/xlogreader.c:1861 +#: access/transam/xlogreader.c:1871 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです" -#: access/transam/xlogreader.c:1877 +#: access/transam/xlogreader.c:1887 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません" -#: access/transam/xlogreader.c:1889 +#: access/transam/xlogreader.c:1899 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "%2$X/%3$Xにおけるblock_id %1$uが不正です" -#: access/transam/xlogreader.c:1956 +#: access/transam/xlogreader.c:1966 #, c-format msgid "record with invalid length at %X/%X" msgstr "%X/%Xのレコードのサイズが不正です" -#: access/transam/xlogreader.c:1982 +#: access/transam/xlogreader.c:1992 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "WALレコード中ID %dのバックアップブロックを特定できませんでした" -#: access/transam/xlogreader.c:2066 +#: access/transam/xlogreader.c:2076 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "%X/%Xで不正なブロック%dが指定されているためイメージが復元できませんでした" -#: access/transam/xlogreader.c:2073 +#: access/transam/xlogreader.c:2083 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "%X/%Xでブロック%dのイメージが不正な状態であるため復元できませんでした" -#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 +#: access/transam/xlogreader.c:2110 access/transam/xlogreader.c:2127 #, c-format msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d" msgstr "%1$X/%2$Xで、ブロック%4$dがこのビルドでサポートされない圧縮方式%3$sで圧縮されているため復元できませんでした" -#: access/transam/xlogreader.c:2126 +#: access/transam/xlogreader.c:2136 #, c-format msgid "could not restore image at %X/%X compressed with unknown method, block %d" msgstr "%X/%Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした" -#: access/transam/xlogreader.c:2134 +#: access/transam/xlogreader.c:2144 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "%X/%Xのブロック%dが伸張できませんでした" -#: access/transam/xlogrecovery.c:617 +#: access/transam/xlogrecovery.c:623 #, c-format msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u" msgstr "タイムラインID %5$u上でREDO LSN %1$X/%2$X、チェックポイントLSN %3$X/%4$Xからのバックアップ・リカバリを開始しました" -#: access/transam/xlogrecovery.c:649 +#: access/transam/xlogrecovery.c:655 #, c-format msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X" msgstr "%3$X/%4$Xのチェックポイントレコードが参照しているredo位置%1$X/%2$Xを見つけられませんでした" -#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 +#: access/transam/xlogrecovery.c:657 access/transam/xlogrecovery.c:668 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" @@ -2965,463 +2939,464 @@ msgstr "" " バックアップからの復旧でなければ、\"%s/backup_label\"の削除を試みてください。.\n" "バックアップからの復旧で\"%s/backup_label\"を削除すると、クラスタが破壊されることに注意してください。" -#: access/transam/xlogrecovery.c:660 +#: access/transam/xlogrecovery.c:666 #, c-format msgid "could not locate required checkpoint record at %X/%X" msgstr "必須のチェックポイントが%X/%Xで見つかりませんでした" -#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 +#: access/transam/xlogrecovery.c:696 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 +#: access/transam/xlogrecovery.c:729 access/transam/xlogrecovery.c:735 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ファイル\"%2$s\"が存在しないためファイル\"%1$s\"を無視します" -#: access/transam/xlogrecovery.c:725 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "ファイル\"%s\"は\"%s\"にリネームされました。" -#: access/transam/xlogrecovery.c:731 +#: access/transam/xlogrecovery.c:737 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlogrecovery.c:770 +#: access/transam/xlogrecovery.c:776 #, c-format msgid "restarting backup recovery with redo LSN %X/%X" msgstr "REDO LSN %X/%Xのバックアプリカバリを再開しました" -#: access/transam/xlogrecovery.c:795 +#: access/transam/xlogrecovery.c:801 #, c-format msgid "could not locate a valid checkpoint record at %X/%X" msgstr "%X/%Xには有効なチェックポイントレコードがありませんでした" -#: access/transam/xlogrecovery.c:806 +#: access/transam/xlogrecovery.c:812 #, c-format msgid "entering standby mode" msgstr "スタンバイモードに入ります" -#: access/transam/xlogrecovery.c:809 +#: access/transam/xlogrecovery.c:815 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "XID%uまでのポイントインタイムリカバリを開始します" -#: access/transam/xlogrecovery.c:813 +#: access/transam/xlogrecovery.c:819 #, c-format msgid "starting point-in-time recovery to %s" msgstr "%sまでのポイントインタイムリカバリを開始します" -#: access/transam/xlogrecovery.c:817 +#: access/transam/xlogrecovery.c:823 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "\"%s\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlogrecovery.c:821 +#: access/transam/xlogrecovery.c:827 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "WAL位置(LSN) \"%X/%X\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlogrecovery.c:825 +#: access/transam/xlogrecovery.c:831 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "最も古い一貫性確保点までのポイントインタイムリカバリを開始します" -#: access/transam/xlogrecovery.c:828 +#: access/transam/xlogrecovery.c:834 #, c-format msgid "starting archive recovery" msgstr "アーカイブリカバリを開始しています" -#: access/transam/xlogrecovery.c:849 +#: access/transam/xlogrecovery.c:855 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "要求されたタイムライン%uはこのサーバーの履歴からの子孫ではありません" -#: access/transam/xlogrecovery.c:851 +#. translator: %s is a backup_label file or a pg_control file +#: access/transam/xlogrecovery.c:858 #, c-format -msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." -msgstr "タイムライン%3$uの最終チェックポイントは%1$X/%2$Xですが、要求されたタイムラインの履歴の中ではサーバーはそのタイムラインから%4$X/%5$Xで分岐しています。" +msgid "Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." +msgstr "ファイル\"%1$s\"での最終チェックポイントはタイムライン%4$uの%2$X/%3$Xですが、要求されたタイムラインの履歴上、サーバーはそのタイムラインから%5$X/%6$Xで分岐しています。" -#: access/transam/xlogrecovery.c:865 +#: access/transam/xlogrecovery.c:873 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "要求されたタイムライン%1$uはタイムライン%4$uの最小リカバリポイント%2$X/%3$Xを含みません" -#: access/transam/xlogrecovery.c:893 +#: access/transam/xlogrecovery.c:901 #, c-format msgid "invalid next transaction ID" msgstr "次のトランザクションIDが不正です" -#: access/transam/xlogrecovery.c:898 +#: access/transam/xlogrecovery.c:906 #, c-format msgid "invalid redo in checkpoint record" msgstr "チェックポイントレコード内の不正なREDO" -#: access/transam/xlogrecovery.c:909 +#: access/transam/xlogrecovery.c:917 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "シャットダウン・チェックポイントにおける不正なREDOレコード" -#: access/transam/xlogrecovery.c:938 +#: access/transam/xlogrecovery.c:946 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "データベースシステムは正しくシャットダウンされていません; 自動リカバリを実行中" -#: access/transam/xlogrecovery.c:942 +#: access/transam/xlogrecovery.c:950 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "タイムライン%uから、タイムライン%uを目標としてクラッシュリカバリを開始します" -#: access/transam/xlogrecovery.c:985 +#: access/transam/xlogrecovery.c:993 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_labelに制御ファイルと整合しないデータが含まれます" -#: access/transam/xlogrecovery.c:986 +#: access/transam/xlogrecovery.c:994 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "これはバックアップが破損しており、リカバリには他のバックアップを使用しなければならないことを意味します。" -#: access/transam/xlogrecovery.c:1040 +#: access/transam/xlogrecovery.c:1048 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "リカバリコマンドファイル \"%s\"の使用はサポートされません" -#: access/transam/xlogrecovery.c:1105 +#: access/transam/xlogrecovery.c:1113 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "スタンバイモードはシングルユーザーサーバーではサポートされません" -#: access/transam/xlogrecovery.c:1122 +#: access/transam/xlogrecovery.c:1130 #, c-format msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" msgstr "\"primary_conninfo\"と\"restore_command\"のどちらも指定されていません" -#: access/transam/xlogrecovery.c:1123 +#: access/transam/xlogrecovery.c:1131 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "データベースサーバーはpg_walサブディレクトリに置かれたファイルを定期的に確認します。" -#: access/transam/xlogrecovery.c:1131 +#: access/transam/xlogrecovery.c:1139 #, c-format msgid "must specify \"restore_command\" when standby mode is not enabled" msgstr "スタンバイモードを有効にしない場合は、\"restore_command\"の指定が必要です" -#: access/transam/xlogrecovery.c:1169 +#: access/transam/xlogrecovery.c:1177 #, c-format msgid "recovery target timeline %u does not exist" msgstr "リカバリ目標タイムライン%uが存在しません" -#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 +#: access/transam/xlogrecovery.c:1260 access/transam/xlogrecovery.c:1267 access/transam/xlogrecovery.c:1326 access/transam/xlogrecovery.c:1414 access/transam/xlogrecovery.c:1423 access/transam/xlogrecovery.c:1443 #, c-format msgid "invalid data in file \"%s\"" msgstr "ファイル\"%s\"内の不正なデータ" -#: access/transam/xlogrecovery.c:1319 +#: access/transam/xlogrecovery.c:1327 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "読み取られたタイムラインIDは%uでしたが、%uであるはずです。" -#: access/transam/xlogrecovery.c:1330 +#: access/transam/xlogrecovery.c:1338 #, c-format msgid "this is an incremental backup, not a data directory" msgstr "これはデータディレクトリではなく、差分バックアップです" -#: access/transam/xlogrecovery.c:1331 +#: access/transam/xlogrecovery.c:1339 #, c-format msgid "Use pg_combinebackup to reconstruct a valid data directory." msgstr "有効なデータディレクトリを再構築するにはpg_combinebackupを使ってください。" -#: access/transam/xlogrecovery.c:1717 +#: access/transam/xlogrecovery.c:1725 #, c-format msgid "unexpected record type found at redo point %X/%X" msgstr "REDOポイント%X/%Xで想定外のレコードタイプが見つかりました" -#: access/transam/xlogrecovery.c:1740 +#: access/transam/xlogrecovery.c:1748 #, c-format msgid "redo starts at %X/%X" msgstr "REDOを%X/%Xから開始します" -#: access/transam/xlogrecovery.c:1753 +#: access/transam/xlogrecovery.c:1761 #, c-format msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "REDO進行中、経過時間 %ld.%02d秒, 現在のLSN: %X/%X" -#: access/transam/xlogrecovery.c:1843 +#: access/transam/xlogrecovery.c:1851 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "要求されたリカバリ停止ポイントは、一貫性があるリカバリポイントより前にあります" -#: access/transam/xlogrecovery.c:1875 +#: access/transam/xlogrecovery.c:1883 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "REDOが%X/%Xで終了しました、システム使用状況: %s" -#: access/transam/xlogrecovery.c:1881 +#: access/transam/xlogrecovery.c:1889 #, c-format msgid "last completed transaction was at log time %s" msgstr "最後に完了したトランザクションのログ時刻は%sでした" -#: access/transam/xlogrecovery.c:1890 +#: access/transam/xlogrecovery.c:1898 #, c-format msgid "redo is not required" msgstr "REDOは必要ありません" -#: access/transam/xlogrecovery.c:1901 +#: access/transam/xlogrecovery.c:1910 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "指定したリカバリターゲットに到達する前にリカバリが終了しました" -#: access/transam/xlogrecovery.c:2095 +#: access/transam/xlogrecovery.c:2104 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "%X/%Xで%sに上書きされて失われた継続行を正常にスキップしました" -#: access/transam/xlogrecovery.c:2162 +#: access/transam/xlogrecovery.c:2171 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "%2$s で想定外のディレクトリエントリ\"%1$s\"が見つかりました" -#: access/transam/xlogrecovery.c:2164 +#: access/transam/xlogrecovery.c:2173 #, c-format -msgid "All directory entries in pg_tblspc/ should be symbolic links." -msgstr "Pg_tblspc/ のすべてのディレクトリエントリは、シンボリックリンクである必要があります。" +msgid "All directory entries in %s/ should be symbolic links." +msgstr "%s 内のすべてのディレクトリエントリは、シンボリックリンクである必要があります。" -#: access/transam/xlogrecovery.c:2165 +#: access/transam/xlogrecovery.c:2175 #, c-format msgid "Remove those directories, or set \"allow_in_place_tablespaces\" to ON transiently to let recovery complete." msgstr "これらのディレクトリを削除するか、または\"allow_in_place_tablespaces\"を一時的にONに設定することでリカバリを完了させることができます。" -#: access/transam/xlogrecovery.c:2217 +#: access/transam/xlogrecovery.c:2227 #, c-format msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" msgstr "REDO LSN%X/%X、終了LSN %X/%Xのバックアップ・リカバリが完了しました" -#: access/transam/xlogrecovery.c:2247 +#: access/transam/xlogrecovery.c:2258 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "%X/%X でリカバリの一貫性が確保されました" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2285 +#: access/transam/xlogrecovery.c:2296 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "%X/%Xにある%sのWAL再生" -#: access/transam/xlogrecovery.c:2383 +#: access/transam/xlogrecovery.c:2394 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外の前回のタイムラインID %u(現在のタイムラインIDは%u)がありました" -#: access/transam/xlogrecovery.c:2392 +#: access/transam/xlogrecovery.c:2403 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u (%uの後)がありました" -#: access/transam/xlogrecovery.c:2408 +#: access/transam/xlogrecovery.c:2419 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "タイムライン%4$uの最小リカバリポイント%2$X/%3$Xに達する前のチェックポイントレコード内の想定外のタイムラインID%1$u。" -#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 +#: access/transam/xlogrecovery.c:2603 access/transam/xlogrecovery.c:2879 #, c-format msgid "recovery stopping after reaching consistency" msgstr "リカバリ処理は一貫性確保後に停止します" -#: access/transam/xlogrecovery.c:2613 +#: access/transam/xlogrecovery.c:2624 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の前で停止します" -#: access/transam/xlogrecovery.c:2703 +#: access/transam/xlogrecovery.c:2714 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの前に停止します" -#: access/transam/xlogrecovery.c:2710 +#: access/transam/xlogrecovery.c:2721 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの前に停止します" -#: access/transam/xlogrecovery.c:2763 +#: access/transam/xlogrecovery.c:2774 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "リカバリ処理は復元ポイント\"%s\"、時刻%s に停止します" -#: access/transam/xlogrecovery.c:2781 +#: access/transam/xlogrecovery.c:2792 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の後で停止します" -#: access/transam/xlogrecovery.c:2848 +#: access/transam/xlogrecovery.c:2859 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの後に停止します" -#: access/transam/xlogrecovery.c:2856 +#: access/transam/xlogrecovery.c:2867 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの後に停止します" -#: access/transam/xlogrecovery.c:2937 +#: access/transam/xlogrecovery.c:2948 #, c-format msgid "pausing at the end of recovery" msgstr "リカバリ完了位置で一時停止しています" -#: access/transam/xlogrecovery.c:2938 +#: access/transam/xlogrecovery.c:2949 #, c-format 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:2952 access/transam/xlogrecovery.c:4698 #, c-format msgid "recovery has paused" msgstr "リカバリは一時停止中です" -#: access/transam/xlogrecovery.c:2942 +#: access/transam/xlogrecovery.c:2953 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "再開するには pg_xlog_replay_resume() を実行してください" -#: access/transam/xlogrecovery.c:3205 +#: access/transam/xlogrecovery.c:3216 #, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" msgstr "WALセグメント%2$s、LSN %3$X/%4$X、オフセット%5$uで想定外のタイムラインID%1$u" -#: access/transam/xlogrecovery.c:3413 +#: access/transam/xlogrecovery.c:3432 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" msgstr "WALセグメント%s、LSN %X/%X、オフセット%uを読み取れませんでした: %m" -#: access/transam/xlogrecovery.c:3420 +#: access/transam/xlogrecovery.c:3439 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" msgstr "WALセグメント%1$s、LSN %2$X/%3$X、オフセット%4$uを読み取れませんでした: %6$zu 中 %5$d の読み込み" -#: access/transam/xlogrecovery.c:4060 +#: access/transam/xlogrecovery.c:4082 #, c-format msgid "invalid checkpoint location" msgstr "不正なチェックポイント位置" -#: access/transam/xlogrecovery.c:4070 +#: access/transam/xlogrecovery.c:4092 #, c-format msgid "invalid checkpoint record" msgstr "チェックポイントレコードが不正です" -#: access/transam/xlogrecovery.c:4076 +#: access/transam/xlogrecovery.c:4098 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "チェックポイントレコード内のリソースマネージャIDがで不正です" -#: access/transam/xlogrecovery.c:4084 +#: access/transam/xlogrecovery.c:4106 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "チェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlogrecovery.c:4090 +#: access/transam/xlogrecovery.c:4112 #, c-format msgid "invalid length of checkpoint record" msgstr "チェックポイントレコード長が不正です" -#: access/transam/xlogrecovery.c:4144 +#: access/transam/xlogrecovery.c:4166 #, 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:4180 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "新しいタイムライン%uは現在のデータベースシステムのタイムライン%uから現在のリカバリポイント%X/%Xより前に分岐しています" -#: access/transam/xlogrecovery.c:4177 +#: access/transam/xlogrecovery.c:4199 #, c-format msgid "new target timeline is %u" msgstr "新しい目標タイムラインは%uです" -#: access/transam/xlogrecovery.c:4380 +#: access/transam/xlogrecovery.c:4400 #, c-format msgid "WAL receiver process shutdown requested" msgstr "wal receiverプロセスのシャットダウンが要求されました" -#: access/transam/xlogrecovery.c:4440 +#: access/transam/xlogrecovery.c:4460 #, c-format msgid "received promote request" msgstr "昇格要求を受信しました" -#: access/transam/xlogrecovery.c:4669 +#: access/transam/xlogrecovery.c:4689 #, 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:4690 access/transam/xlogrecovery.c:4717 access/transam/xlogrecovery.c:4747 #, 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:4699 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "リカバリの一時停止を解除すると、サーバーはシャットダウンします。" -#: access/transam/xlogrecovery.c:4680 +#: access/transam/xlogrecovery.c:4700 #, 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:4711 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "不十分なパラメータ設定のため、昇格できません" -#: access/transam/xlogrecovery.c:4701 +#: access/transam/xlogrecovery.c:4721 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "必要な設定変更を行ったのち、サーバーを再起動してください。" -#: access/transam/xlogrecovery.c:4725 +#: access/transam/xlogrecovery.c:4745 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "不十分なパラメータ設定値のためリカバリが停止しました" -#: access/transam/xlogrecovery.c:4731 +#: access/transam/xlogrecovery.c:4751 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "必要な設定変更を行うことでサーバーを再起動できます。" -#: access/transam/xlogrecovery.c:4773 +#: access/transam/xlogrecovery.c:4792 #, c-format msgid "multiple recovery targets specified" msgstr "複数のリカバリ目標が指定されています" -#: access/transam/xlogrecovery.c:4774 +#: access/transam/xlogrecovery.c:4793 #, c-format msgid "At most one of \"recovery_target\", \"recovery_target_lsn\", \"recovery_target_name\", \"recovery_target_time\", \"recovery_target_xid\" may be set." msgstr "\" recovery_target\", \"recovery_target_lsn\", \"recovery_target_name\", \"recovery_target_time, recovery_target_xid\" はこの中の1つまで設定可能です。" -#: access/transam/xlogrecovery.c:4785 +#: access/transam/xlogrecovery.c:4804 #, 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:4958 #, c-format -msgid "timestamp out of range: \"%s\"" -msgstr "timestampが範囲外です: \"%s\"" +msgid "Timestamp out of range: \"%s\"." +msgstr "timestampが範囲外です: \"%s\"。" -#: access/transam/xlogrecovery.c:4982 +#: access/transam/xlogrecovery.c:5003 #, c-format msgid "\"recovery_target_timeline\" is not a valid number." msgstr "\"recovery_target_timeline\"が数値として妥当ではありません。" -#: access/transam/xlogutils.c:1032 +#: access/transam/xlogutils.c:1023 #, c-format msgid "could not read from WAL segment %s, offset %d: %m" msgstr "WALセグメント%s、オフセット%dを読み取れませんでした: %m" -#: access/transam/xlogutils.c:1039 +#: access/transam/xlogutils.c:1030 #, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" msgstr "WALセグメント%1$s、オフセット%2$dを読み取れませんでした: %4$d 中 %3$d 読み込みました" @@ -3441,7 +3416,7 @@ msgstr "失敗したアーカイブコマンドは次のとおりです: %s" 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:2843 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16進値の説明についてはC インクルードファイル\"ntstatus.h\"を参照してください。" @@ -3456,159 +3431,159 @@ msgstr "アーカイブコマンドはシグナル%dにより終了しました: msgid "archive command exited with unrecognized status %d" msgstr "アーカイブコマンドは不明のステータス%dで終了しました" -#: backup/backup_manifest.c:254 +#: backup/backup_manifest.c:255 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "最終タイムライン%uを期待していましたがタイムライン%uが見つかりました" -#: backup/backup_manifest.c:278 +#: backup/backup_manifest.c:279 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "開始タイムライン%uを期待していましたがタイムライン%uが見つかりました" -#: backup/backup_manifest.c:305 +#: backup/backup_manifest.c:306 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "開始タイムライン%uはタイムライン%uの履歴中にありません" -#: backup/backup_manifest.c:356 +#: backup/backup_manifest.c:357 #, c-format msgid "could not rewind temporary file" msgstr "一時ファイルを巻き戻しに失敗しました" -#: backup/basebackup.c:479 +#: backup/basebackup.c:481 #, c-format msgid "could not find any WAL files" msgstr "WALファイルが全くありません" -#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 +#: backup/basebackup.c:496 backup/basebackup.c:511 backup/basebackup.c:520 #, c-format msgid "could not find WAL file \"%s\"" msgstr "WALファイル\"%s\"がありませんでした" -#: backup/basebackup.c:560 backup/basebackup.c:585 +#: backup/basebackup.c:562 backup/basebackup.c:587 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "想定しないWALファイルのサイズ\"%s\"" -#: backup/basebackup.c:656 +#: backup/basebackup.c:658 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" msgstr[0] "合計%lld個のデータチェックサム検証エラー" -#: backup/basebackup.c:663 +#: backup/basebackup.c:665 #, c-format msgid "checksum verification failure during base backup" msgstr "ベースバックアップ中にチェックサム確認が失敗しました" -#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 +#: backup/basebackup.c:735 backup/basebackup.c:744 backup/basebackup.c:755 backup/basebackup.c:772 backup/basebackup.c:781 backup/basebackup.c:790 backup/basebackup.c:805 backup/basebackup.c:822 backup/basebackup.c:831 backup/basebackup.c:843 backup/basebackup.c:867 backup/basebackup.c:881 backup/basebackup.c:892 backup/basebackup.c:903 backup/basebackup.c:916 #, c-format msgid "duplicate option \"%s\"" msgstr "\"%s\"オプションは重複しています" -#: backup/basebackup.c:761 +#: backup/basebackup.c:763 #, c-format msgid "unrecognized checkpoint type: \"%s\"" msgstr "認識されないチェックポイントタイプ: \"%s\"" -#: backup/basebackup.c:793 +#: backup/basebackup.c:795 #, c-format msgid "incremental backups cannot be taken unless WAL summarization is enabled" msgstr "WAL集約が有効でなければ差分バックアップは取得できません" -#: backup/basebackup.c:809 +#: backup/basebackup.c:811 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%dはパラメータ\"%s\"の有効範囲を超えています(%d .. %d)" -#: backup/basebackup.c:854 +#: backup/basebackup.c:856 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "認識できない目録オプション: \"%s\"" -#: backup/basebackup.c:905 +#: backup/basebackup.c:907 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "認識できない圧縮アルゴリズム: \"%s\"" -#: backup/basebackup.c:921 +#: backup/basebackup.c:923 #, c-format msgid "unrecognized base backup option: \"%s\"" msgstr "認識できないベースバックアップオプション: \"%s\"" -#: backup/basebackup.c:932 +#: backup/basebackup.c:934 #, c-format msgid "manifest checksums require a backup manifest" msgstr "目録のチェックサムにはバックアップ目録が必要です" -#: backup/basebackup.c:941 +#: backup/basebackup.c:943 #, c-format msgid "target detail cannot be used without target" msgstr "ターゲット詳細はターゲットの指定なしでは指定できません" -#: backup/basebackup.c:950 backup/basebackup_target.c:218 +#: backup/basebackup.c:952 backup/basebackup_target.c:218 #, c-format msgid "target \"%s\" does not accept a target detail" msgstr "ターゲット\"%s\"はターゲット詳細を受け付けません" -#: backup/basebackup.c:961 +#: backup/basebackup.c:963 #, c-format msgid "compression detail cannot be specified unless compression is enabled" msgstr "圧縮詳細は圧縮が有効でない場合は指定できません" -#: backup/basebackup.c:974 +#: backup/basebackup.c:976 #, c-format msgid "invalid compression specification: %s" msgstr "不正な圧縮指定: %s" -#: backup/basebackup.c:1024 +#: backup/basebackup.c:1026 #, c-format msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" msgstr "差分のBASE_BACKUPの実行前にUPLOAD_MANIFESTを実行する必要があります" -#: backup/basebackup.c:1157 backup/basebackup.c:1358 +#: backup/basebackup.c:1159 backup/basebackup.c:1360 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "\"%s\"というファイルまたはディレクトリの情報を取得できませんでした。: %m" -#: backup/basebackup.c:1544 +#: backup/basebackup.c:1546 #, c-format msgid "skipping special file \"%s\"" msgstr "スペシャルファイル\"%s\"をスキップしています" -#: backup/basebackup.c:1751 +#: backup/basebackup.c:1753 #, c-format msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" msgstr "ファイル\"%s\"、ブロック%uでチェックサム検証に失敗しました: 読み込みバッファサイズ%dとページサイズ%dが異なっています" -#: backup/basebackup.c:1813 +#: backup/basebackup.c:1815 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" msgstr[0] "ファイル\"%s\"では合計%d個のチェックサムエラーが発生しました" -#: backup/basebackup.c:1917 +#: backup/basebackup.c:1920 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "ファイル\"%s\"のブロック%uでチェックサム検証が失敗しました: 計算されたチェックサムは%Xですが想定は%Xです" -#: backup/basebackup.c:1924 +#: backup/basebackup.c:1927 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "ファイル\"%s\"における以降のチェックサムエラーは報告されません" -#: backup/basebackup.c:2048 +#: backup/basebackup.c:2052 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "ファイル名がtarフォーマットに対して長すぎます: \"%s\"" -#: backup/basebackup.c:2053 +#: backup/basebackup.c:2058 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "シンボリックリンクのリンク先tarのフォーマットにとって長すぎます: ファイル名 \"%s\", リンク先 \"%s\"" -#: backup/basebackup.c:2127 +#: backup/basebackup.c:2132 #, c-format msgid "could not read file \"%s\": read %zd of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$zdバイトを読み込みました" @@ -3623,80 +3598,65 @@ msgstr "このビルドではgzip圧縮はサポートされていません" msgid "could not initialize compression library" msgstr "圧縮ライブラリを初期化できませんでした" -#: backup/basebackup_incremental.c:300 +#: backup/basebackup_incremental.c:292 #, c-format msgid "manifest contains no required WAL ranges" msgstr "必要となるWAL範囲がマニフェストに含まれてません" -#: backup/basebackup_incremental.c:355 +#: backup/basebackup_incremental.c:347 #, 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:412 #, c-format msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X" msgstr "マニフェストが%2$X/%3$Xから始まる初期タイムライン%1$uのWALを必要としてますが、このタイムラインは%4$X/%5$Xから始まっています" -#: backup/basebackup_incremental.c:430 +#: backup/basebackup_incremental.c:422 #, c-format msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X" msgstr "マニフェストが%2$X/%3$Xから始まる継続タイムライン%1$uのWALをを必要としてますが、このタイムラインは%4$X/%5$Xから始まっています" -#: backup/basebackup_incremental.c:441 +#: backup/basebackup_incremental.c:433 #, c-format msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X" msgstr "マニフェストは%2$X/%3$Xで終了する最終タイムライン%1$uからのWALを必要としますが、このバックアップは%4$X/%5$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 "マニフェストが%2$X/%3$Xで終了する非最終タイムライン%1$uのWALをを必要としてますが、このサーバーではタイムラインが%4$X/%5$Xで切り替わっています" - -#: backup/basebackup_incremental.c:518 -#, c-format -msgid "WAL summarization is not progressing" -msgstr "WAL集計が進んでいません" - -#: backup/basebackup_incremental.c:519 -#, c-format -msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory." -msgstr "集計は%X/%Xまで進んでいる必要がありますが、ディスク上では%X/%X、メモリ上では%X/%Xよりあとまで進んでいません。" - -#: backup/basebackup_incremental.c:532 +#: backup/basebackup_incremental.c:437 #, c-format -msgid "still waiting for WAL summarization through %X/%X after %ld seconds" -msgstr "%3$ld秒経過しましたが、WAL集計が%1$X/%2$Xに到達するのを待っている状況です" +msgid "This can happen for incremental backups on a standby if there was little activity since the previous backup." +msgstr "これはスタンバイ上の差分バックアップで前回のバックアップ以降の更新が少なかった場合に起きることがあります。" -#: backup/basebackup_incremental.c:535 +#: backup/basebackup_incremental.c:444 #, c-format -msgid "Summarization has reached %X/%X on disk and %X/%X in memory." -msgstr "集計がディスク上で%X/%X、メモリ上で%X/%Xに到達しました。" +msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X" +msgstr "マニフェストが%2$X/%3$Xで終了する非最終タイムライン%1$uのWALをを必要としてますが、このサーバーではタイムラインが%4$X/%5$Xで切り替わっています" -#: backup/basebackup_incremental.c:604 +#: backup/basebackup_incremental.c:525 #, 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 "WAL集計がタイムライン%u上の%X/%Xから%X/%Xまで必要ですが、そのタイムライン上のそのLSN範囲での集計は存在しません" -#: backup/basebackup_incremental.c:611 +#: backup/basebackup_incremental.c:532 #, 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 "WAL集計がタイムライン%u上の%X/%Xから%X/%Xまで必要ですが、そのタイムライン上のそのLSN範囲での集計は不完全です" -#: backup/basebackup_incremental.c:615 +#: backup/basebackup_incremental.c:536 #, c-format msgid "The first unsummarized LSN in this range is %X/%X." msgstr "この範囲で集計されていない最初のLSNは%X/%Xです。" -#: backup/basebackup_incremental.c:1015 +#: backup/basebackup_incremental.c:934 #, c-format msgid "backup manifest version 1 does not support incremental backup" msgstr "バックアップ目録のバージョン1は差分バックアップをサポートしていません" -#: backup/basebackup_incremental.c:1033 +#: backup/basebackup_incremental.c:952 #, c-format -msgid "manifest system identifier is %llu, but database system identifier is %llu" -msgstr "目録のシステム識別子が%lluですが、データベースのシステム識別子は%lluです" +msgid "system identifier in backup manifest is %, but database system identifier is %" +msgstr "バックアップ目録中のシステム識別子が%ですが、データベースのシステム識別子は%です" #: backup/basebackup_lz4.c:67 #, c-format @@ -3718,7 +3678,7 @@ msgstr "\"%s\"ロールの権限を持つロールのみが、サーバー上に msgid "relative path not allowed for backup stored on server" msgstr "サーバー上に格納されるバックアップでは相対パスは指定できません" -#: backup/basebackup_server.c:102 commands/dbcommands.c:477 commands/tablespace.c:157 commands/tablespace.c:173 commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 storage/file/copydir.c:47 +#: backup/basebackup_server.c:102 commands/dbcommands.c:478 commands/tablespace.c:157 commands/tablespace.c:173 commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:2179 storage/file/copydir.c:58 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" @@ -3728,12 +3688,12 @@ msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" 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:1171 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 backup/basebackup_server.c:268 backup/basebackup_server.c:275 backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 backup/basebackup_server.c:268 backup/basebackup_server.c:275 backup/walsummary.c:312 storage/smgr/md.c:519 storage/smgr/md.c:526 storage/smgr/md.c:608 storage/smgr/md.c:630 storage/smgr/md.c:1123 #, c-format msgid "Check free disk space." msgstr "ディスクの空き容量をチェックしてください。" @@ -3770,669 +3730,669 @@ msgstr "長距離モードを有効化できませんでした: %s" #: backup/walsummaryfuncs.c:95 #, c-format -msgid "invalid timeline %lld" -msgstr "不正なタイムライン%lld" +msgid "invalid timeline %" +msgstr "不正なタイムライン%" -#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3859 +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:626 tcop/postgres.c:3863 +#, c-format +msgid "--%s must be first argument" +msgstr "--%sは最初の引数でなければなりません" + +#: bootstrap/bootstrap.c:253 postmaster/postmaster.c:640 tcop/postgres.c:3877 #, c-format msgid "--%s requires a value" msgstr "--%sには値が必要です" -#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3864 +#: bootstrap/bootstrap.c:258 postmaster/postmaster.c:645 tcop/postgres.c:3882 #, 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:296 postmaster/postmaster.c:763 postmaster/postmaster.c:776 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細については\"%s --help\"を実行してください。\n" -#: bootstrap/bootstrap.c:291 +#: bootstrap/bootstrap.c:305 #, c-format 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:982 #, 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:986 #, 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:990 #, 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 catalog/aclchk.c:1010 #, 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:1006 #, 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:994 #, 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:998 #, 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:1002 #, 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 -#, c-format -msgid "large object %u does not exist" -msgstr "ラージオブジェクト%uは存在しません" - -#: catalog/aclchk.c:1111 +#: catalog/aclchk.c:1043 #, c-format msgid "default privileges cannot be set for columns" msgstr "デフォルト権限は列には設定できません" -#: catalog/aclchk.c:1147 +#: catalog/aclchk.c:1079 #, c-format msgid "permission denied to change default privileges" msgstr "デフォルト権限を変更する権限がありません" -#: catalog/aclchk.c:1265 +#: catalog/aclchk.c:1197 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "GRANT/REVOKE ON SCHEMAS を使っている時には IN SCHEMA 句は指定できません" -#: 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:1207 +#, c-format +msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON LARGE OBJECTS" +msgstr "GRANT/REVOKE ON LARGE OBJECTS を使っている時には IN SCHEMA 句は指定できません" + +#: catalog/aclchk.c:1561 catalog/catalog.c:655 catalog/heap.c:2611 catalog/heap.c:2930 catalog/objectaddress.c:1528 catalog/pg_publication.c:570 commands/analyze.c:388 commands/copy.c:1000 commands/sequence.c:1655 commands/tablecmds.c:7750 commands/tablecmds.c:7928 commands/tablecmds.c:8129 commands/tablecmds.c:8258 commands/tablecmds.c:8387 commands/tablecmds.c:8481 commands/tablecmds.c:8584 commands/tablecmds.c:8750 commands/tablecmds.c:8780 +#: commands/tablecmds.c:8935 commands/tablecmds.c:9038 commands/tablecmds.c:9172 commands/tablecmds.c:9285 commands/tablecmds.c:14325 commands/tablecmds.c:14525 commands/tablecmds.c:14686 commands/tablecmds.c:15891 commands/tablecmds.c:18658 commands/trigger.c:947 parser/analyze.c:2660 parser/parse_relation.c:749 parser/parse_target.c:1070 parser/parse_type.c:144 parser/parse_utilcmd.c:3641 parser/parse_utilcmd.c:3681 parser/parse_utilcmd.c:3723 +#: statistics/attribute_stats.c:209 statistics/attribute_stats.c:948 utils/adt/acl.c:2921 utils/adt/ruleutils.c:2858 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$s\"は存在しません" -#: catalog/aclchk.c:1861 +#: catalog/aclchk.c:1806 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\"はインデックスです" -#: catalog/aclchk.c:1868 commands/tablecmds.c:14397 commands/tablecmds.c:17775 +#: catalog/aclchk.c:1813 commands/tablecmds.c:16048 commands/tablecmds.c:19577 #, 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:1821 catalog/objectaddress.c:1368 commands/tablecmds.c:266 commands/tablecmds.c:19541 utils/adt/acl.c:2105 utils/adt/acl.c:2135 utils/adt/acl.c:2168 utils/adt/acl.c:2204 utils/adt/acl.c:2235 utils/adt/acl.c:2266 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\"はシーケンスではありません" -#: catalog/aclchk.c:1914 +#: catalog/aclchk.c:1859 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "シーケンス \"%s\"では USAGE, SELECT, UPDATE 権限のみをサポートします" -#: catalog/aclchk.c:1931 +#: catalog/aclchk.c:1876 #, c-format msgid "invalid privilege type %s for table" msgstr "テーブルに対する権限タイプ%sは不正です" -#: catalog/aclchk.c:2094 +#: catalog/aclchk.c:2041 #, c-format msgid "invalid privilege type %s for column" msgstr "列では権限タイプ %s は無効です" -#: catalog/aclchk.c:2107 +#: catalog/aclchk.c:2054 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "シーケンス \"%s\"では USAGE, SELECT, UPDATE のみをサポートします" -#: catalog/aclchk.c:2297 +#: catalog/aclchk.c:2245 #, c-format msgid "language \"%s\" is not trusted" msgstr "言語\"%s\"は信頼されていません" -#: catalog/aclchk.c:2299 +#: catalog/aclchk.c:2247 #, 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:2398 #, c-format msgid "cannot set privileges of array types" msgstr "配列型の権限を設定できません" -#: catalog/aclchk.c:2452 +#: catalog/aclchk.c:2399 #, c-format msgid "Set the privileges of the element type instead." msgstr "代わりに要素型の権限を設定してください。" -#: catalog/aclchk.c:2456 +#: catalog/aclchk.c:2403 #, c-format msgid "cannot set privileges of multirange types" msgstr "複範囲型の権限を設定できません" -#: catalog/aclchk.c:2457 +#: catalog/aclchk.c:2404 #, c-format msgid "Set the privileges of the range type instead." msgstr "代わりに範囲型の権限を設定してください。" -#: catalog/aclchk.c:2464 catalog/objectaddress.c:1629 -#, c-format -msgid "\"%s\" is not a domain" -msgstr "\"%s\"はドメインではありません" - -#: catalog/aclchk.c:2650 +#: catalog/aclchk.c:2587 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "認識できない権限タイプ\"%s\"" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2654 #, c-format msgid "permission denied for aggregate %s" msgstr "集約 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2657 #, c-format msgid "permission denied for collation %s" msgstr "照合順序 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2660 #, c-format msgid "permission denied for column %s" msgstr "列 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2663 #, c-format msgid "permission denied for conversion %s" msgstr "変換 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2666 #, c-format msgid "permission denied for database %s" msgstr "データベース %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2669 #, c-format msgid "permission denied for domain %s" msgstr "ドメイン %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2672 #, c-format msgid "permission denied for event trigger %s" msgstr "イベントトリガ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2675 #, c-format msgid "permission denied for extension %s" msgstr "機能拡張 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2678 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "外部データラッパ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2681 #, c-format msgid "permission denied for foreign server %s" msgstr "外部サーバー %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2684 #, c-format msgid "permission denied for foreign table %s" msgstr "外部テーブル %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2687 #, c-format msgid "permission denied for function %s" msgstr "関数 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2690 #, c-format msgid "permission denied for index %s" msgstr "インデックス %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2693 #, c-format msgid "permission denied for language %s" msgstr "言語 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2759 +#: catalog/aclchk.c:2696 #, c-format msgid "permission denied for large object %s" msgstr "ラージオブジェクト %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2762 +#: catalog/aclchk.c:2699 #, c-format msgid "permission denied for materialized view %s" msgstr "実体化ビュー %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2702 #, c-format msgid "permission denied for operator class %s" msgstr "演算子クラス %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2705 #, c-format msgid "permission denied for operator %s" msgstr "演算子 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2708 #, c-format msgid "permission denied for operator family %s" msgstr "演算子族 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2711 #, c-format msgid "permission denied for parameter %s" msgstr "パラメータ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2714 #, c-format msgid "permission denied for policy %s" msgstr "ポリシ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2717 #, c-format msgid "permission denied for procedure %s" msgstr "プロシージャ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for publication %s" msgstr "パブリケーション%sへのアクセスが拒否されました" -#: catalog/aclchk.c:2786 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for routine %s" msgstr "ルーチン %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2789 +#: catalog/aclchk.c:2726 #, 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:2729 commands/sequence.c:654 commands/sequence.c:880 commands/sequence.c:922 commands/sequence.c:963 commands/sequence.c:1753 #, c-format msgid "permission denied for sequence %s" msgstr "シーケンス %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2795 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for statistics object %s" msgstr "統計情報オブジェクト %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2798 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for subscription %s" msgstr "サブスクリプション %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2801 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for table %s" msgstr "テーブル %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2804 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for tablespace %s" msgstr "テーブル空間 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2807 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for text search configuration %s" msgstr "テキスト検索設定 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2810 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for text search dictionary %s" msgstr "テキスト検索辞書 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2813 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for type %s" msgstr "型 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2816 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for view %s" msgstr "ビュー %s へのアクセスが拒否されました" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2789 #, c-format msgid "must be owner of aggregate %s" msgstr "集約 %s の所有者である必要があります" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2792 #, c-format msgid "must be owner of collation %s" msgstr "照合順序 %s の所有者である必要があります" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2795 #, c-format msgid "must be owner of conversion %s" msgstr "変換 %s の所有者である必要があります" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2798 #, c-format msgid "must be owner of database %s" msgstr "データベース %s の所有者である必要があります" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2801 #, c-format msgid "must be owner of domain %s" msgstr "ドメイン %s の所有者である必要があります" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2804 #, c-format msgid "must be owner of event trigger %s" msgstr "イベントトリガ %s の所有者である必要があります" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2807 #, c-format msgid "must be owner of extension %s" msgstr "機能拡張 %s の所有者である必要があります" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2810 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "外部データラッパー %s の所有者である必要があります" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2813 #, c-format msgid "must be owner of foreign server %s" msgstr "外部サーバー %s の所有者である必要があります" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2816 #, c-format msgid "must be owner of foreign table %s" msgstr "外部テーブル %s の所有者である必要があります" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2819 #, c-format msgid "must be owner of function %s" msgstr "関数 %s の所有者である必要があります" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2822 #, c-format msgid "must be owner of index %s" msgstr "インデックス %s の所有者である必要があります" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2825 #, c-format msgid "must be owner of language %s" msgstr "言語 %s の所有者である必要があります" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2828 #, c-format msgid "must be owner of large object %s" msgstr "ラージオブジェクト %s の所有者である必要があります" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2831 #, c-format msgid "must be owner of materialized view %s" msgstr "実体化ビュー %s の所有者である必要があります" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2834 #, c-format msgid "must be owner of operator class %s" msgstr "演算子クラス %s の所有者である必要があります" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2837 #, c-format msgid "must be owner of operator %s" msgstr "演算子 %s の所有者である必要があります" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2840 #, c-format msgid "must be owner of operator family %s" msgstr "演算子族 %s の所有者である必要があります" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2843 #, c-format msgid "must be owner of procedure %s" msgstr "プロシージャ %s の所有者である必要があります" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2846 #, c-format msgid "must be owner of publication %s" msgstr "パブリケーション %s の所有者である必要があります" -#: catalog/aclchk.c:2912 +#: catalog/aclchk.c:2849 #, c-format msgid "must be owner of routine %s" msgstr "ルーチン %s の所有者である必要があります" -#: catalog/aclchk.c:2915 +#: catalog/aclchk.c:2852 #, c-format msgid "must be owner of sequence %s" msgstr "シーケンス %s の所有者である必要があります" -#: catalog/aclchk.c:2918 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of subscription %s" msgstr "サブスクリプション %s の所有者である必要があります" -#: catalog/aclchk.c:2921 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of table %s" msgstr "テーブル %s の所有者である必要があります" -#: catalog/aclchk.c:2924 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of type %s" msgstr "型 %s の所有者である必要があります" -#: catalog/aclchk.c:2927 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of view %s" msgstr "ビュー %s の所有者である必要があります" -#: catalog/aclchk.c:2930 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of schema %s" msgstr "スキーマ %s の所有者である必要があります" -#: catalog/aclchk.c:2933 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of statistics object %s" msgstr "統計情報オブジェクト %s の所有者である必要があります" -#: catalog/aclchk.c:2936 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of tablespace %s" msgstr "テーブル空間 %s の所有者である必要があります" -#: catalog/aclchk.c:2939 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of text search configuration %s" msgstr "テキスト検索設定 %s の所有者である必要があります" -#: catalog/aclchk.c:2942 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of text search dictionary %s" msgstr "テキスト検索辞書 %s の所有者である必要があります" -#: catalog/aclchk.c:2956 +#: catalog/aclchk.c:2893 #, c-format msgid "must be owner of relation %s" msgstr "リレーション %s の所有者である必要があります" -#: catalog/aclchk.c:3002 +#: catalog/aclchk.c:2939 #, 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 -#, c-format -msgid "%s with OID %u does not exist" -msgstr "OID %2$uの%1$sは存在しません" - -#: catalog/aclchk.c:3242 catalog/aclchk.c:3261 +#: catalog/aclchk.c:3173 catalog/aclchk.c:3192 #, 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:3230 catalog/aclchk.c:3293 catalog/aclchk.c:3932 #, c-format msgid "relation with OID %u does not exist" msgstr "OID %uのリレーションは存在しません" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3478 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "OID %uのパラメータACLは存在しません" -#: catalog/aclchk.c:3720 commands/collationcmds.c:853 commands/publicationcmds.c:1739 +#: catalog/aclchk.c:3557 catalog/objectaddress.c:1055 catalog/pg_largeobject.c:125 libpq/be-fsstubs.c:323 storage/large_object/inv_api.c:247 +#, c-format +msgid "large object %u does not exist" +msgstr "ラージオブジェクト%uは存在しません" + +#: catalog/aclchk.c:3651 commands/collationcmds.c:849 commands/publicationcmds.c:1846 #, 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:3725 catalog/aclchk.c:3752 catalog/aclchk.c:3781 utils/cache/typcache.c:473 utils/cache/typcache.c:528 #, c-format msgid "type with OID %u does not exist" msgstr "OID %uの型は存在しません" -#: catalog/catalog.c:447 +#: catalog/catalog.c:475 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "リレーション\"%s\"での未使用のOIDを探索を継続中" -#: catalog/catalog.c:449 +#: catalog/catalog.c:477 #, 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はまだ見つかっていません。" +msgid "OID candidates have been checked % time, but no unused OID has been found yet." +msgid_plural "OID candidates have been checked % times, but no unused OID has been found yet." +msgstr[0] "OID候補のチェックを%回行いましたが、使用されていないOIDはまだ見つかっていません。" -#: catalog/catalog.c:474 +#: catalog/catalog.c:502 #, 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] "リレーション\\\"%s\\\"で%llu回の試行後に新しいOIDが割り当てられました" +msgid "new OID has been assigned in relation \"%s\" after % retry" +msgid_plural "new OID has been assigned in relation \"%s\" after % retries" +msgstr[0] "リレーション\\\"%s\\\"で%回の試行後に新しいOIDが割り当てられました" -#: catalog/catalog.c:607 catalog/catalog.c:674 +#: catalog/catalog.c:633 catalog/catalog.c:700 #, c-format msgid "must be superuser to call %s()" msgstr "%s()を呼び出すにはスーパーユーザーである必要があります" -#: catalog/catalog.c:616 +#: catalog/catalog.c:642 #, 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:647 parser/parse_utilcmd.c:2426 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "インデックス\"%s\"はテーブル\"%s\"には属していません" -#: catalog/catalog.c:638 +#: catalog/catalog.c:664 #, c-format msgid "column \"%s\" is not of type oid" msgstr "列\"%s\"はoid型ではありません" -#: catalog/catalog.c:645 +#: catalog/catalog.c:671 #, 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を削除できません" @@ -4457,7 +4417,7 @@ msgstr "%sは%sに依存しています" 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" @@ -4474,8 +4434,8 @@ msgstr[0] "" 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:1518 commands/tablecmds.c:16642 commands/tablespace.c:460 commands/user.c:1302 commands/vacuum.c:224 commands/view.c:441 executor/execExprInterp.c:5211 executor/execExprInterp.c:5219 libpq/auth.c:312 replication/logical/applyparallelworker.c:1041 replication/slot.c:1594 replication/syncrep.c:1012 storage/aio/method_io_uring.c:191 storage/lmgr/deadlock.c:1137 +#: storage/lmgr/proc.c:1526 utils/misc/guc.c:3166 utils/misc/guc.c:3207 utils/misc/guc.c:3282 utils/misc/guc.c:6823 utils/misc/guc.c:6857 utils/misc/guc.c:6891 utils/misc/guc.c:6934 utils/misc/guc.c:6976 #, c-format msgid "%s" msgstr "%s" @@ -4496,647 +4456,692 @@ msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "削除は他の%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:2205 +#, c-format +msgid "transition table \"%s\" cannot be referenced in a persistent object" +msgstr "遷移テーブル\"%s\"は永続オブジェクトからは参照できません" + +#: catalog/dependency.c:2390 parser/parse_relation.c:3513 parser/parse_relation.c:3523 statistics/attribute_stats.c:221 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$d\"は存在しません" -#: catalog/heap.c:325 +#: catalog/heap.c:321 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "\"%s.%s\"を作成する権限がありません" -#: catalog/heap.c:327 +#: catalog/heap.c:323 #, c-format 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:463 commands/tablecmds.c:2561 commands/tablecmds.c:3013 commands/tablecmds.c:7360 #, c-format msgid "tables can have at most %d columns" msgstr "テーブルは最大で%d列までしか持てません" -#: catalog/heap.c:485 commands/tablecmds.c:7440 +#: catalog/heap.c:481 commands/tablecmds.c:7662 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "列名\"%s\"はシステム用の列名に使われています" -#: catalog/heap.c:501 +#: catalog/heap.c:497 #, c-format msgid "column name \"%s\" specified more than once" msgstr "列名\"%s\"が複数指定されました" #. translator: first %s is an integer not a name -#: catalog/heap.c:579 +#: catalog/heap.c:575 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "パーティションキー列%sは疑似型%sです" -#: catalog/heap.c:584 +#: catalog/heap.c:580 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "列\"%s\"は疑似型%sです" -#: catalog/heap.c:615 +#: catalog/heap.c:595 +#, c-format +msgid "virtual generated column \"%s\" cannot have a domain type" +msgstr "仮想生成列\"%s\"ではドメイン型は使用できません" + +#: catalog/heap.c:622 #, 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:670 +#: catalog/heap.c:677 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "照合可能な型 %2$s のパーティションキー列%1$sのための照合順序が見つかりませんでした" -#: catalog/heap.c:676 commands/createas.c:198 commands/createas.c:507 +#: catalog/heap.c:683 commands/createas.c:200 commands/createas.c:513 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "照合可能な型 %2$s を持つ列\"%1$s\"のための照合順序を決定できませんでした" -#: 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:1169 catalog/index.c:901 commands/createas.c:409 commands/tablecmds.c:4295 #, c-format msgid "relation \"%s\" already exists" msgstr "リレーション\"%s\"はすでに存在します" -#: catalog/heap.c:1177 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 +#: catalog/heap.c:1185 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:1205 commands/typecmds.c:1431 commands/typecmds.c:1611 commands/typecmds.c:2586 #, c-format msgid "type \"%s\" already exists" msgstr "型\"%s\"はすでに存在します" -#: catalog/heap.c:1178 +#: catalog/heap.c:1186 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "リレーションは同じ名前の関連する型を持ちます。このため既存の型と競合しない名前である必要があります。" -#: catalog/heap.c:1218 +#: catalog/heap.c:1226 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にTOASTのrelfilenumberの値が設定されていません" -#: catalog/heap.c:1229 +#: catalog/heap.c:1237 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_classのヒープOIDが設定されていません" -#: catalog/heap.c:1239 +#: catalog/heap.c:1247 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にrelfilenumberの値が設定されていません" -#: catalog/heap.c:2121 +#: catalog/heap.c:2192 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"に NO INHERIT 制約は追加できません" -#: catalog/heap.c:2393 +#: catalog/heap.c:2515 #, 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:2616 catalog/heap.c:2936 +#, c-format +msgid "cannot add not-null constraint on system column \"%s\"" +msgstr "システム列\"%s\"に対して非NULL制約を追加することはできません" + +#: catalog/heap.c:2643 catalog/heap.c:2769 catalog/heap.c:3020 catalog/index.c:915 catalog/pg_constraint.c:1000 commands/tablecmds.c:9765 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "すでに制約\"%s\"はリレーション\"%s\"に存在します" -#: catalog/heap.c:2572 +#: catalog/heap.c:2776 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の継承されていない制約と競合します" -#: catalog/heap.c:2583 +#: catalog/heap.c:2787 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の継承された制約と競合します" -#: catalog/heap.c:2593 +#: catalog/heap.c:2797 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の NOT VALID 制約と競合します" -#: catalog/heap.c:2598 +#: catalog/heap.c:2809 +#, c-format +msgid "constraint \"%s\" conflicts with NOT ENFORCED constraint on relation \"%s\"" +msgstr "制約\"%s\"は、リレーション\"%s\"上の \\NOT ENFORCED制約と競合します" + +#: catalog/heap.c:2814 #, 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:2838 catalog/pg_constraint.c:778 catalog/pg_constraint.c:1129 commands/tablecmds.c:3178 commands/tablecmds.c:3498 commands/tablecmds.c:7285 commands/tablecmds.c:7966 commands/tablecmds.c:17485 commands/tablecmds.c:17667 #, c-format msgid "too many inheritance parents" msgstr "継承の親テーブルが多すぎます" -#: catalog/heap.c:2708 +#: catalog/heap.c:2955 parser/parse_utilcmd.c:2634 +#, c-format +msgid "conflicting NO INHERIT declaration for not-null constraint on column \"%s\"" +msgstr "列\"%s\"に対する非NULL制約にNO INHERIT宣言が競合しています" + +#: catalog/heap.c:2969 +#, c-format +msgid "conflicting not-null constraint names \"%s\" and \"%s\"" +msgstr "非NULL制約の名前\"%s\"と\"%s\"が競合しています" + +#: catalog/heap.c:2999 +#, c-format +msgid "cannot define not-null constraint on column \"%s\" with NO INHERIT" +msgstr "NO INHERIT指定されている列\"%s\"に対して非NULL制約を定義することはできません" + +#: catalog/heap.c:3001 +#, c-format +msgid "The column has an inherited not-null constraint." +msgstr "この列には継承された非NULL制約が存在します。" + +#: catalog/heap.c:3191 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "生成カラム\"%s\"はカラム生成式中では使用できません" -#: catalog/heap.c:2710 +#: catalog/heap.c:3193 #, c-format msgid "A generated column cannot reference another generated column." msgstr "生成カラムは他の生成カラムを参照できません。" -#: catalog/heap.c:2716 +#: catalog/heap.c:3199 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "列生成式内では行全体参照は使用できません" -#: catalog/heap.c:2717 +#: catalog/heap.c:3200 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "これは生成列を自身の値に依存させることにつながります。" -#: catalog/heap.c:2772 +#: catalog/heap.c:3255 #, c-format msgid "generation expression is not immutable" msgstr "生成式は不変ではありません" -#: catalog/heap.c:2800 rewrite/rewriteHandler.c:1281 +#: catalog/heap.c:3283 rewrite/rewriteHandler.c:1285 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "列\"%s\"の型は%sですが、デフォルト式の型は%sです" -#: catalog/heap.c: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:3288 commands/prepare.c:335 parser/analyze.c:2991 parser/parse_target.c:595 parser/parse_target.c:885 parser/parse_target.c:895 rewrite/rewriteHandler.c:1290 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "式を書き換えるかキャストする必要があります。" -#: catalog/heap.c:2852 +#: catalog/heap.c:3335 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "検査制約ではテーブル\"%s\"のみを参照することができます" -#: catalog/heap.c:3158 +#: catalog/heap.c:3641 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "ON COMMITと外部キーの組み合わせはサポートされていません" -#: catalog/heap.c:3159 +#: catalog/heap.c:3642 #, 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:3647 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "外部キー制約で参照されているテーブルを削除できません" -#: catalog/heap.c:3165 +#: catalog/heap.c:3648 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "テーブル\"%s\"は\"%s\"を参照します。" -#: catalog/heap.c:3167 +#: catalog/heap.c:3650 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "同時にテーブル\"%s\"がtruncateされました。TRUNCATE ... CASCADEを使用してください。" -#: catalog/index.c:219 parser/parse_utilcmd.c:2151 +#: catalog/index.c:220 parser/parse_utilcmd.c:2331 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "テーブル\"%s\"に複数のプライマリキーを持たせることはできません" -#: catalog/index.c:233 +#: catalog/index.c:234 #, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" msgstr "プライマリキーではNULLS NOT DISTINCTであるインデックスを使用することはできません" -#: catalog/index.c:250 +#: catalog/index.c:251 #, c-format msgid "primary keys cannot be expressions" msgstr "プライマリキーを式にすることはできません" -#: catalog/index.c:267 +#: catalog/index.c:268 #, c-format 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:800 catalog/index.c:1921 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "ユーザーによるシステムカタログテーブルに対するインデックスの定義はサポートされていません" -#: catalog/index.c:838 +#: catalog/index.c:840 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "非決定的照合順序は演算子クラス \"%s\" ではサポートされません" -#: catalog/index.c:853 +#: catalog/index.c:855 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "システムカタログテーブルの並行的インデックス作成はサポートされていません" -#: catalog/index.c:862 catalog/index.c:1330 +#: catalog/index.c:864 catalog/index.c:1333 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "排他制約のためのインデックスの並列的作成はサポートされていません" -#: catalog/index.c:871 +#: catalog/index.c:873 #, c-format 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:893 commands/createas.c:424 commands/sequence.c:159 parser/parse_utilcmd.c:210 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "リレーション\"%s\"はすでに存在します、スキップします" -#: catalog/index.c:941 +#: catalog/index.c:943 #, c-format 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:953 utils/cache/relcache.c:3781 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にインデックスのrelfilenumberの値が設定されていません" -#: catalog/index.c:2213 +#: catalog/index.c:2222 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLYはトランザクション内で最初の操作でなければなりません" -#: catalog/index.c:3669 +#: catalog/index.c:3729 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "他のセッションの一時テーブルはインデクス再構築できません" -#: catalog/index.c:3680 commands/indexcmds.c:3648 +#: catalog/index.c:3740 commands/indexcmds.c:3757 #, 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:3756 commands/indexcmds.c:3635 commands/indexcmds.c:3781 commands/tablecmds.c:3702 #, c-format msgid "cannot move system relation \"%s\"" msgstr "システムリレーション\"%s\"を移動できません" -#: catalog/index.c:3833 +#: catalog/index.c:3893 #, c-format msgid "index \"%s\" was reindexed" msgstr "インデックス\"%s\"のインデックス再構築が完了しました" -#: catalog/index.c:3999 +#: catalog/index.c:4059 #, 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:5780 #, 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:1447 statistics/stat_utils.c:231 #, 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:1460 parser/parse_relation.c:1468 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:1804 commands/extension.c:1810 #, 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:866 parser/parse_target.c:1262 #, 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:19418 gram.y:19458 parser/parse_expr.c:873 parser/parse_target.c:1269 #, 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スキーマへ、または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:1463 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 "エンコーディング\"%2$s\"の照合順序\"%1$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:1376 commands/policy.c:93 commands/policy.c:373 commands/tablecmds.c:260 commands/tablecmds.c:302 commands/tablecmds.c:2386 commands/tablecmds.c:14460 #, 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:1383 commands/tablecmds.c:272 commands/tablecmds.c:19546 commands/view.c:113 #, 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:1390 commands/matview.c:201 commands/tablecmds.c:278 commands/tablecmds.c:19551 #, 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:1397 commands/tablecmds.c:296 commands/tablecmds.c:19556 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\"は外部テーブルではありません" -#: catalog/objectaddress.c:1433 +#: catalog/objectaddress.c:1438 #, c-format msgid "must specify relation and object name" msgstr "リレーションとオブジェクトの名前の指定が必要です" -#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 +#: catalog/objectaddress.c:1514 catalog/objectaddress.c:1567 #, c-format msgid "column name must be qualified" msgstr "列名を修飾する必要があります" -#: catalog/objectaddress.c:1581 +#: catalog/objectaddress.c:1586 #, c-format 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:1623 commands/functioncmds.c:132 commands/tablecmds.c:288 commands/typecmds.c:278 commands/typecmds.c:3834 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:801 utils/adt/acl.c:4558 #, c-format msgid "type \"%s\" does not exist" msgstr "型\"%s\"は存在しません" -#: catalog/objectaddress.c:1737 +#: catalog/objectaddress.c:1634 +#, c-format +msgid "\"%s\" is not a domain" +msgstr "\"%s\"はドメインではありません" + +#: catalog/objectaddress.c:1742 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "%4$sの演算子 %1$d (%2$s, %3$s) がありません" -#: catalog/objectaddress.c:1768 +#: catalog/objectaddress.c:1773 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "%4$s の関数 %1$d (%2$s, %3$s) がありません" -#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 +#: catalog/objectaddress.c:1824 catalog/objectaddress.c:1850 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "ユーザー\"%s\"に対するユーザーマッピングがサーバー\"%s\"には存在しません" -#: catalog/objectaddress.c:1834 commands/foreigncmds.c:430 commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:703 +#: catalog/objectaddress.c:1839 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\"は存在しません" -#: catalog/objectaddress.c:1901 +#: catalog/objectaddress.c:1906 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "パブリケーション\"%2$s\"にパブリケーションリレーション\"%1$s\"は存在しません" -#: catalog/objectaddress.c:1948 +#: catalog/objectaddress.c:1953 #, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" msgstr "パブリケーション\"%2$s\"にパブリケーションスキーマ\"%1$s\"は存在しません" -#: catalog/objectaddress.c:2006 +#: catalog/objectaddress.c:2014 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "デフォルトのACLオブジェクトタイプ\"%c\"は認識できません" -#: catalog/objectaddress.c:2007 +#: catalog/objectaddress.c:2015 #, c-format -msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -msgstr "有効な値は \"%c\", \"%c\", \"%c\", \"%c\", \"%c\" です。" +msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." +msgstr "有効なオブジェクトタイプは \"%c\"、\"%c\"、\"%c\"、\"%c\"、\"%c\"、\"%c\" です。" -#: catalog/objectaddress.c:2058 +#: catalog/objectaddress.c:2067 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "ユーザー\"%s\"に対する、名前空間\"%s\"の%sへのデフォルトのACLはありません" -#: catalog/objectaddress.c:2063 +#: catalog/objectaddress.c:2072 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "ユーザー\"%s\"に対する%sへのデフォルトACLは存在しません" -#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2098 catalog/objectaddress.c:2155 catalog/objectaddress.c:2210 #, c-format msgid "name or argument lists may not contain nulls" msgstr "名前または引数のリストはnullを含むことができません" -#: catalog/objectaddress.c:2123 +#: catalog/objectaddress.c:2132 #, c-format msgid "unsupported object type \"%s\"" msgstr "サポートされないオブジェクトタイプ\"%s\"" -#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 +#: catalog/objectaddress.c:2151 catalog/objectaddress.c:2168 catalog/objectaddress.c:2233 catalog/objectaddress.c:2317 #, c-format msgid "name list length must be exactly %d" msgstr "名前リストの長さは正確に%dでなくてはなりません" -#: catalog/objectaddress.c:2163 +#: catalog/objectaddress.c:2172 #, c-format msgid "large object OID may not be null" msgstr "ラージオブジェクトのOIDはnullにはなり得ません" -#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 catalog/objectaddress.c:2249 +#: catalog/objectaddress.c:2181 catalog/objectaddress.c:2251 catalog/objectaddress.c:2258 #, c-format msgid "name list length must be at least %d" msgstr "名前リストの長さは%d以上でなくてはなりません" -#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 +#: catalog/objectaddress.c:2244 catalog/objectaddress.c:2265 #, c-format msgid "argument list length must be exactly %d" msgstr "引数リストの長さはちょうど%dである必要があります" -#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2479 libpq/be-fsstubs.c:334 #, c-format msgid "must be owner of large object %u" msgstr "ラージオブジェクト %u の所有者である必要があります" -#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 +#: catalog/objectaddress.c:2494 commands/functioncmds.c:1578 #, c-format msgid "must be owner of type %s or type %s" msgstr "型%sまたは型%sの所有者である必要があります" -#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 catalog/objectaddress.c:2527 +#: catalog/objectaddress.c:2521 catalog/objectaddress.c:2530 catalog/objectaddress.c:2536 #, c-format msgid "permission denied" msgstr "権限がありません" -#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 +#: catalog/objectaddress.c:2522 catalog/objectaddress.c:2531 #, c-format msgid "The current user must have the %s attribute." msgstr "現在のユーザーは%s属性を持つ必要があります。" -#: catalog/objectaddress.c:2528 +#: catalog/objectaddress.c:2537 #, c-format msgid "The current user must have the %s option on role \"%s\"." msgstr "現在のユーザーはロール\"%2$s\"に対する%1$sオプションを持っている必要があります。" -#: catalog/objectaddress.c:2542 +#: catalog/objectaddress.c:2551 #, c-format msgid "must be superuser" msgstr "スーパーユーザーである必要があります" -#: catalog/objectaddress.c:2611 +#: catalog/objectaddress.c:2620 #, c-format msgid "unrecognized object type \"%s\"" msgstr "認識されないオブジェクトタイプ\"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2903 +#: catalog/objectaddress.c:2937 #, c-format msgid "column %s of %s" msgstr "%2$s の列 %1$s" -#: catalog/objectaddress.c:2918 +#: catalog/objectaddress.c:2952 #, c-format msgid "function %s" msgstr "関数%s" -#: catalog/objectaddress.c:2931 +#: catalog/objectaddress.c:2965 #, c-format msgid "type %s" msgstr "型%s" -#: catalog/objectaddress.c:2968 +#: catalog/objectaddress.c:3002 #, c-format msgid "cast from %s to %s" msgstr "%sから%sへの型変換" -#: catalog/objectaddress.c:3001 +#: catalog/objectaddress.c:3035 #, c-format msgid "collation %s" msgstr "照合順序%s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3032 +#: catalog/objectaddress.c:3066 #, c-format msgid "constraint %s on %s" msgstr "%2$sに対する制約%1$s" -#: catalog/objectaddress.c:3038 +#: catalog/objectaddress.c:3072 #, c-format msgid "constraint %s" msgstr "制約%s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3104 #, c-format msgid "conversion %s" msgstr "変換%s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3092 +#: catalog/objectaddress.c:3126 #, c-format msgid "default value for %s" msgstr "%s のデフォルト値" -#: catalog/objectaddress.c:3103 +#: catalog/objectaddress.c:3137 #, c-format msgid "language %s" msgstr "言語%s" -#: catalog/objectaddress.c:3111 +#: catalog/objectaddress.c:3145 #, c-format msgid "large object %u" msgstr "ラージオブジェクト%u" -#: catalog/objectaddress.c:3124 +#: catalog/objectaddress.c:3158 #, c-format msgid "operator %s" msgstr "演算子%s" -#: catalog/objectaddress.c:3161 +#: catalog/objectaddress.c:3195 #, c-format msgid "operator class %s for access method %s" msgstr "アクセスメソッド%2$s用の演算子クラス%1$s" -#: catalog/objectaddress.c:3189 +#: catalog/objectaddress.c:3223 #, c-format msgid "access method %s" msgstr "アクセスメソッド%s" @@ -5145,7 +5150,7 @@ msgstr "アクセスメソッド%s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3238 +#: catalog/objectaddress.c:3278 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "%4$sの演算子%1$d (%2$s, %3$s): %5$s" @@ -5154,236 +5159,241 @@ msgstr "%4$sの演算子%1$d (%2$s, %3$s): %5$s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3295 +#: catalog/objectaddress.c:3343 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "%4$s の関数 %1$d (%2$s, %3$s): %5$s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3347 +#: catalog/objectaddress.c:3397 #, c-format msgid "rule %s on %s" msgstr "%2$s のルール %1$s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3393 +#: catalog/objectaddress.c:3443 #, c-format msgid "trigger %s on %s" msgstr "%2$s のトリガ %1$s" -#: catalog/objectaddress.c:3413 +#: catalog/objectaddress.c:3463 #, c-format msgid "schema %s" msgstr "スキーマ%s" -#: catalog/objectaddress.c:3441 +#: catalog/objectaddress.c:3491 #, c-format msgid "statistics object %s" msgstr "統計オブジェクト%s" -#: catalog/objectaddress.c:3472 +#: catalog/objectaddress.c:3522 #, c-format msgid "text search parser %s" msgstr "テキスト検索パーサ%s" -#: catalog/objectaddress.c:3503 +#: catalog/objectaddress.c:3553 #, c-format msgid "text search dictionary %s" msgstr "テキスト検索辞書%s" -#: catalog/objectaddress.c:3534 +#: catalog/objectaddress.c:3584 #, c-format msgid "text search template %s" msgstr "テキスト検索テンプレート%s" -#: catalog/objectaddress.c:3565 +#: catalog/objectaddress.c:3615 #, c-format msgid "text search configuration %s" msgstr "テキスト検索設定%s" -#: catalog/objectaddress.c:3578 +#: catalog/objectaddress.c:3628 #, c-format msgid "role %s" msgstr "ロール%s" -#: catalog/objectaddress.c:3615 catalog/objectaddress.c:5464 +#: catalog/objectaddress.c:3665 catalog/objectaddress.c:5589 #, c-format msgid "membership of role %s in role %s" msgstr "ロール%sのロール%sへの所属" -#: catalog/objectaddress.c:3636 +#: catalog/objectaddress.c:3686 #, c-format msgid "database %s" msgstr "データベース%s" -#: catalog/objectaddress.c:3652 +#: catalog/objectaddress.c:3702 #, c-format msgid "tablespace %s" msgstr "テーブル空間%s" -#: catalog/objectaddress.c:3663 +#: catalog/objectaddress.c:3713 #, c-format msgid "foreign-data wrapper %s" msgstr "外部データラッパー%s" -#: catalog/objectaddress.c:3673 +#: catalog/objectaddress.c:3723 #, c-format msgid "server %s" msgstr "サーバー%s" -#: catalog/objectaddress.c:3706 +#: catalog/objectaddress.c:3756 #, c-format msgid "user mapping for %s on server %s" msgstr "サーバー%2$s上のユーザーマッピング%1$s" -#: catalog/objectaddress.c:3758 +#: catalog/objectaddress.c:3808 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" -msgstr "スキーマ %2$s のロール %1$s のものである新しいリレーションのデフォルト権限" +msgstr "スキーマ %2$s のロール %1$s に属する新しいリレーションのデフォルト権限" -#: catalog/objectaddress.c:3762 +#: catalog/objectaddress.c:3812 #, c-format msgid "default privileges on new relations belonging to role %s" -msgstr "新しいリレーションに関するデフォルトの権限は、ロール%sに属します。" +msgstr "ロール %s に属する新しいリレーションのデフォルト権限" -#: catalog/objectaddress.c:3768 +#: catalog/objectaddress.c:3818 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" -msgstr "スキーマ %2$s のロール %1$s のものである新しいシーケンスのデフォルト権限" +msgstr "スキーマ %2$s のロール %1$s に属する新しいシーケンスのデフォルト権限" -#: catalog/objectaddress.c:3772 +#: catalog/objectaddress.c:3822 #, c-format msgid "default privileges on new sequences belonging to role %s" -msgstr "新しいシーケンスに関するデフォルトの権限は、ロール%sに属します。" +msgstr "ロール %s に属する新しい新しいシーケンスのデフォルト権限" -#: catalog/objectaddress.c:3778 +#: catalog/objectaddress.c:3828 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" -msgstr "スキーマ %2$s のロール %1$s のものである新しい関数のデフォルト権限" +msgstr "スキーマ %2$s のロール %1$s に属する新しい関数のデフォルト権限" -#: catalog/objectaddress.c:3782 +#: catalog/objectaddress.c:3832 #, c-format msgid "default privileges on new functions belonging to role %s" -msgstr "新しい関数に関するデフォルトの権限は、ロール%sに属します。" +msgstr "ロール %s に属する新しい関数のデフォルト権限" -#: catalog/objectaddress.c:3788 +#: catalog/objectaddress.c:3838 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" -msgstr "スキーマ %2$s のロール %1$s のものである新しい型のデフォルト権限" +msgstr "スキーマ %2$s のロール %1$s に属する新しい型のデフォルト権限" -#: catalog/objectaddress.c:3792 +#: catalog/objectaddress.c:3842 #, c-format msgid "default privileges on new types belonging to role %s" -msgstr "新しい型に関するデフォルトの権限は、ロール%sに属します" +msgstr "ロール %s に属する新しい型のデフォルト権限" -#: catalog/objectaddress.c:3798 +#: catalog/objectaddress.c:3848 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "ロール%sに属する新しいスキーマ上のデフォルト権限" -#: catalog/objectaddress.c:3805 +#: catalog/objectaddress.c:3854 +#, c-format +msgid "default privileges on new large objects belonging to role %s" +msgstr "ロール %s に属する新しいラージオブジェクトのデフォルト権限" + +#: catalog/objectaddress.c:3861 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s に属するデフォルト権限" -#: catalog/objectaddress.c:3809 +#: catalog/objectaddress.c:3865 #, c-format msgid "default privileges belonging to role %s" -msgstr "デフォルトの権限はロール%sに属します。" +msgstr "ロール %s に属するデフォルト権限" -#: catalog/objectaddress.c:3831 +#: catalog/objectaddress.c:3887 #, c-format msgid "extension %s" msgstr "機能拡張%s" -#: catalog/objectaddress.c:3848 +#: catalog/objectaddress.c:3904 #, c-format msgid "event trigger %s" msgstr "イベントトリガ%s" -#: catalog/objectaddress.c:3872 +#: catalog/objectaddress.c:3928 #, c-format msgid "parameter %s" msgstr "パラメータ %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3915 +#: catalog/objectaddress.c:3971 #, c-format msgid "policy %s on %s" msgstr "%2$s のポリシ %1$s" -#: catalog/objectaddress.c:3929 +#: catalog/objectaddress.c:3985 #, c-format msgid "publication %s" msgstr "パブリケーション%s" -#: catalog/objectaddress.c:3942 +#: catalog/objectaddress.c:3998 #, c-format msgid "publication of schema %s in publication %s" msgstr "パブリケーション%2$sでのスキーマ%1$sのパブリケーション" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3973 +#: catalog/objectaddress.c:4029 #, c-format msgid "publication of %s in publication %s" msgstr "パブリケーション %2$s での %1$s のパブリケーション" -#: catalog/objectaddress.c:3986 +#: catalog/objectaddress.c:4042 #, c-format msgid "subscription %s" msgstr "サブスクリプション%s" -#: catalog/objectaddress.c:4007 +#: catalog/objectaddress.c:4063 #, c-format msgid "transform for %s language %s" msgstr "言語%2$sの%1$s型に対する変換" -#: catalog/objectaddress.c:4076 +#: catalog/objectaddress.c:4132 #, c-format msgid "table %s" msgstr "テーブル%s" -#: catalog/objectaddress.c:4081 +#: catalog/objectaddress.c:4137 #, c-format msgid "index %s" msgstr "インデックス%s" -#: catalog/objectaddress.c:4085 +#: catalog/objectaddress.c:4141 #, c-format msgid "sequence %s" msgstr "シーケンス%s" -#: catalog/objectaddress.c:4089 +#: catalog/objectaddress.c:4145 #, c-format msgid "toast table %s" msgstr "TOASTテーブル%s" -#: catalog/objectaddress.c:4093 +#: catalog/objectaddress.c:4149 #, c-format msgid "view %s" msgstr "ビュー%s" -#: catalog/objectaddress.c:4097 +#: catalog/objectaddress.c:4153 #, c-format msgid "materialized view %s" msgstr "実体化ビュー%s" -#: catalog/objectaddress.c:4101 +#: catalog/objectaddress.c:4157 #, c-format msgid "composite type %s" msgstr "複合型%s" -#: catalog/objectaddress.c:4105 +#: catalog/objectaddress.c:4161 #, c-format msgid "foreign table %s" msgstr "外部テーブル%s" -#: catalog/objectaddress.c:4110 +#: catalog/objectaddress.c:4166 #, c-format msgid "relation %s" msgstr "リレーション%s" -#: catalog/objectaddress.c:4151 +#: catalog/objectaddress.c:4207 #, c-format msgid "operator family %s for access method %s" msgstr "アクセスメソッド%2$sの演算子族%1$s" @@ -5424,7 +5434,7 @@ msgstr "遷移関数がSTRICTかつ遷移用の型が入力型とバイナリ互 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:3057 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "集約の前進と反転の遷移関数のSTRICT属性は一致している必要があります" @@ -5439,7 +5449,7 @@ msgstr "追加の引数を持つ最終関数はSTRICT宣言できません" msgid "return type of combine function %s is not %s" msgstr "結合関数%sの戻り値の型が%sではありません" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3902 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4005 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "遷移タイプ%sの結合関数はSTRICT宣言できません" @@ -5454,12 +5464,12 @@ msgstr "直列化関数%sの戻り値の型が%sではありません" msgid "return type of deserialization function %s is not %s" msgstr "復元関数%sの戻り値の型が%sではありません" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:217 catalog/pg_proc.c:251 #, c-format msgid "cannot determine result data type" msgstr "結果のデータ型を決定できません" -#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:230 catalog/pg_proc.c:259 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "\"internal\"疑似型の安全ではない使用" @@ -5474,48 +5484,48 @@ msgstr "移動集約の実装が%s型を返却しました、しかし普通の msgid "sort operator can only be specified for single-argument aggregates" msgstr "ソート演算子は単一引数の集約でのみ指定可能です" -#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 +#: catalog/pg_aggregate.c:707 catalog/pg_proc.c:412 #, c-format msgid "cannot change routine kind" msgstr "ルーチンの種別は変更できません" -#: catalog/pg_aggregate.c:708 +#: catalog/pg_aggregate.c:709 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "\"%s\"は通常の集約関数です。" -#: catalog/pg_aggregate.c:710 +#: catalog/pg_aggregate.c:711 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "\"%s\"は順序集合集約です。" -#: catalog/pg_aggregate.c:712 +#: catalog/pg_aggregate.c:713 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "\"%s\"は仮説集合集約です。" -#: catalog/pg_aggregate.c:717 +#: catalog/pg_aggregate.c:718 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "集約関数の直接引数の数は変更できません" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:686 commands/typecmds.c:1985 commands/typecmds.c:2031 commands/typecmds.c:2083 commands/typecmds.c:2120 commands/typecmds.c:2154 commands/typecmds.c:2188 commands/typecmds.c:2222 commands/typecmds.c:2251 commands/typecmds.c:2338 commands/typecmds.c:2380 parser/parse_func.c:417 parser/parse_func.c:448 parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 parser/parse_func.c:631 +#: catalog/pg_aggregate.c:859 commands/functioncmds.c:701 commands/typecmds.c:2015 commands/typecmds.c:2061 commands/typecmds.c:2113 commands/typecmds.c:2150 commands/typecmds.c:2184 commands/typecmds.c:2218 commands/typecmds.c:2252 commands/typecmds.c:2281 commands/typecmds.c:2368 commands/typecmds.c:2410 parser/parse_func.c:417 parser/parse_func.c:448 parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 parser/parse_func.c:631 #: parser/parse_func.c:2172 parser/parse_func.c:2445 #, c-format msgid "function %s does not exist" msgstr "関数%sは存在しません" -#: catalog/pg_aggregate.c:864 +#: catalog/pg_aggregate.c:865 #, c-format msgid "function %s returns a set" msgstr "関数%sは集合を返します" -#: catalog/pg_aggregate.c:879 +#: catalog/pg_aggregate.c:880 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "この集約で使うには関数%sは VARIADIC ANY を受け付ける必要があります" -#: catalog/pg_aggregate.c:903 +#: catalog/pg_aggregate.c:904 #, c-format msgid "function %s requires run-time type coercion" msgstr "関数%sは実行時の型強制が必要です" @@ -5595,21 +5605,46 @@ msgstr "照合順序\"%s\"はすでに存在します" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "エンコーディング\"%2$s\"の照合順序\"%1$s\"はすでに存在します" -#: catalog/pg_constraint.c:732 +#: catalog/pg_constraint.c:758 commands/tablecmds.c:7951 +#, c-format +msgid "cannot change NO INHERIT status of NOT NULL constraint \"%s\" on relation \"%s\"" +msgstr "リレーション\"%2$s\"の非NULL制約\"%1$s\"のNO INHERIT設定は変更できません" + +#: catalog/pg_constraint.c:768 +#, c-format +msgid "incompatible NOT VALID constraint \"%s\" on relation \"%s\"" +msgstr "リレーション\"%2$s\"上の NOT VALID 制約\"%1$s\"は非互換です" + +#: catalog/pg_constraint.c:770 +#, c-format +msgid "You will need to use ALTER TABLE ... VALIDATE CONSTRAINT to validate it." +msgstr "ALTER TABLE ... VALIDATE CONSTRAINT を使用してこの制約を検証すべきです。" + +#: catalog/pg_constraint.c:1008 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"はすでに存在します" -#: catalog/pg_constraint.c:932 catalog/pg_constraint.c:1025 +#: catalog/pg_constraint.c:1209 catalog/pg_constraint.c:1302 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"の制約\"%1$s\"は存在しません" -#: catalog/pg_constraint.c:1125 +#: catalog/pg_constraint.c:1402 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "ドメイン\"%2$s\"に対する制約\"%1$s\"は存在しません" +#: catalog/pg_constraint.c:1656 +#, c-format +msgid "invalid type for PERIOD part of foreign key" +msgstr "外部キーのPERIOD部に対して不正な型" + +#: catalog/pg_constraint.c:1657 +#, c-format +msgid "Only range and multirange are supported." +msgstr "範囲型および副範囲型のみがサポートされます。" + #: catalog/pg_conversion.c:64 #, c-format msgid "conversion \"%s\" already exists" @@ -5620,27 +5655,27 @@ msgstr "変換\"%s\"はすでに存在します" msgid "default conversion for %s to %s already exists" msgstr "%sから%sへのデフォルトの変換はすでに存在します" -#: catalog/pg_depend.c:224 commands/extension.c:3397 +#: catalog/pg_depend.c:223 commands/extension.c:3665 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%sはすでに機能拡張\"%s\"のメンバです" -#: catalog/pg_depend.c:231 catalog/pg_depend.c:282 commands/extension.c:3437 +#: catalog/pg_depend.c:230 catalog/pg_depend.c:281 commands/extension.c:3705 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s は機能拡張\"%s\"のメンバではありません" -#: catalog/pg_depend.c:234 +#: catalog/pg_depend.c:233 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "機能拡張は自身が所有していないオブジェクトを置き換えることができません。" -#: catalog/pg_depend.c:285 +#: catalog/pg_depend.c:284 #, c-format msgid "An extension may only use CREATE ... IF NOT EXISTS to skip object creation if the conflicting object is one that it already owns." msgstr "機能拡張はCREATE ... IF NOT EXISTSを自身がすでに所有しているオブジェクトと競合するオブジェクトの生成をスキップするためにのみ使用することができます。" -#: catalog/pg_depend.c:648 +#: catalog/pg_depend.c:647 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "システムオブジェクトであるため、%sの依存関係を削除できません。" @@ -5690,7 +5725,7 @@ msgstr "パーティション\"%s\"を取り外せません" 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:4915 commands/tablecmds.c:17793 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "ALTER TABLE ... DETACH PARTITION ... FINALIZE を実行して保留中の取り外し処理を完了させてください。" @@ -5795,43 +5830,43 @@ msgstr "否定演算子 %s はすでに演算子 %u の否定子です" msgid "parameter ACL \"%s\" does not exist" msgstr "パラメータACL \"%s\"は存在しません" -#: catalog/pg_proc.c:130 parser/parse_func.c:2234 +#: catalog/pg_proc.c:158 parser/parse_func.c:2234 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "関数は%dを超える引数を取ることができません" -#: catalog/pg_proc.c:374 +#: catalog/pg_proc.c:402 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "同じ引数型を持つ関数\"%s\"はすでに存在します" -#: catalog/pg_proc.c:386 +#: catalog/pg_proc.c:414 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\"は集約関数です。" -#: catalog/pg_proc.c:388 +#: catalog/pg_proc.c:416 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\"は関数です。" -#: catalog/pg_proc.c:390 +#: catalog/pg_proc.c:418 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\"はプロシージャです。" -#: catalog/pg_proc.c:392 +#: catalog/pg_proc.c:420 #, c-format msgid "\"%s\" is a window function." msgstr "関数\"%s\"はウィンドウ関数です。" -#: catalog/pg_proc.c:412 +#: catalog/pg_proc.c:440 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "プロシージャの出力パラメータの有無は変更できません" -#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 +#: catalog/pg_proc.c:441 catalog/pg_proc.c:471 #, c-format msgid "cannot change return type of existing function" msgstr "既存の関数の戻り値型を変更できません" @@ -5840,112 +5875,112 @@ msgstr "既存の関数の戻り値型を変更できません" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 catalog/pg_proc.c:517 catalog/pg_proc.c:541 +#: catalog/pg_proc.c:447 catalog/pg_proc.c:474 catalog/pg_proc.c:519 catalog/pg_proc.c:545 catalog/pg_proc.c:569 #, c-format msgid "Use %s %s first." msgstr "まず %s %s を使用してください。" -#: catalog/pg_proc.c:444 +#: catalog/pg_proc.c:472 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "OUTパラメータで定義された行型が異なります。" -#: catalog/pg_proc.c:488 +#: catalog/pg_proc.c:516 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "入力パラメーター\"%s\"の名称を変更できません" -#: catalog/pg_proc.c:515 +#: catalog/pg_proc.c:543 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "既存の関数からパラメータのデフォルト値を削除できません" -#: catalog/pg_proc.c:539 +#: catalog/pg_proc.c:567 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "既存のパラメータのデフォルト値のデータ型を変更できません" -#: catalog/pg_proc.c:750 +#: catalog/pg_proc.c:771 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "\"%s\"という名前の組み込み関数はありません" -#: catalog/pg_proc.c:843 +#: catalog/pg_proc.c:864 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL関数は型%sを返すことができません" -#: catalog/pg_proc.c:858 +#: catalog/pg_proc.c:879 #, c-format 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:1007 #, c-format msgid "SQL function \"%s\"" msgstr "SQL関数\"%s\"" -#: catalog/pg_publication.c:66 catalog/pg_publication.c:74 catalog/pg_publication.c:82 catalog/pg_publication.c:88 +#: catalog/pg_publication.c:63 catalog/pg_publication.c:71 catalog/pg_publication.c:79 catalog/pg_publication.c:85 #, c-format msgid "cannot add relation \"%s\" to publication" msgstr "パブリケーションにリレーション\"%s\"を追加できません" -#: catalog/pg_publication.c:76 +#: catalog/pg_publication.c:73 #, c-format msgid "This operation is not supported for system tables." msgstr "この操作はシステムテーブルに対してはサポートされていません。" -#: catalog/pg_publication.c:84 +#: catalog/pg_publication.c:81 #, c-format msgid "This operation is not supported for temporary tables." msgstr "この操作は一時テーブルに対してはサポートされていません。" -#: catalog/pg_publication.c:90 +#: catalog/pg_publication.c:87 #, c-format msgid "This operation is not supported for unlogged tables." msgstr "この操作はUNLOGGEDテーブルに対してはサポートされていません。" -#: catalog/pg_publication.c:104 catalog/pg_publication.c:112 +#: catalog/pg_publication.c:101 catalog/pg_publication.c:109 #, c-format msgid "cannot add schema \"%s\" to publication" msgstr "パブリケーションにスキーマ\"%s\"を追加できません" -#: catalog/pg_publication.c:106 +#: catalog/pg_publication.c:103 #, c-format msgid "This operation is not supported for system schemas." msgstr "この操作はシステムスキーマに対してはサポートされていません。" -#: catalog/pg_publication.c:114 +#: catalog/pg_publication.c:111 #, c-format msgid "Temporary schemas cannot be replicated." msgstr "一時スキーマは複製できません" -#: catalog/pg_publication.c:392 +#: catalog/pg_publication.c:462 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "リレーション\"%s\"はすでにパブリケーション\"%s\"のメンバです" -#: catalog/pg_publication.c:534 +#: catalog/pg_publication.c:576 #, c-format msgid "cannot use system column \"%s\" in publication column list" msgstr "システム列\"%s\"はパブリケーション列リスト内では使用できません" -#: catalog/pg_publication.c:540 +#: catalog/pg_publication.c:582 #, c-format -msgid "cannot use generated column \"%s\" in publication column list" -msgstr "生成列\"%s\"はパブリケーション列リスト内では使用できません" +msgid "cannot use virtual generated column \"%s\" in publication column list" +msgstr "仮想生成列\"%s\"はパブリケーションの列リストでは使用できません" -#: catalog/pg_publication.c:546 +#: catalog/pg_publication.c:588 #, c-format msgid "duplicate column \"%s\" in publication column list" msgstr "パブリケーション列リスト内に重複した列 \"%s\"" -#: catalog/pg_publication.c:636 +#: catalog/pg_publication.c:700 #, c-format 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" @@ -5957,69 +5992,69 @@ msgstr[0] "" "\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] "%2$s内の%1$d個のオブジェクト" -#: 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が所有するオブジェクトの所有者を再割り当てできません" -#: catalog/pg_subscription.c:438 +#: catalog/pg_subscription.c:469 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "サブスクリプション\"%s\"に対するリレーションマッピングを削除できませんでした" -#: catalog/pg_subscription.c:440 +#: catalog/pg_subscription.c:471 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "リレーション\\\"%s\\\"のテーブル同期が進行中で、状態は\\\"%c\\\"です。" @@ -6027,7 +6062,7 @@ msgstr "リレーション\\\"%s\\\"のテーブル同期が進行中で、状 #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:447 +#: catalog/pg_subscription.c:478 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "サブスクリプションが有効にされていない場合は%sを実行して有効化するか、%sを実行してこのサブスクリプションを削除してください。" @@ -6057,7 +6092,7 @@ msgstr "値渡し型の場合、内部サイズ%dは不正です" msgid "alignment \"%c\" is invalid for variable-length type" msgstr "可変長型の場合、アラインメント\"%c\"は不正です" -#: catalog/pg_type.c:325 commands/typecmds.c:4363 +#: catalog/pg_type.c:325 commands/typecmds.c:4354 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "固定長型の場合はPLAIN格納方式でなければなりません" @@ -6072,7 +6107,7 @@ msgstr "\"%s\"の複範囲型の作成中に失敗しました。" 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:549 storage/buffer/bufmgr.c:7269 #, c-format msgid "invalid page in block %u of relation %s" msgstr "リレーション%2$sのブロック%1$uに不正なページ" @@ -6157,7 +6192,7 @@ msgstr "直列化関数は集約遷移データの型が%sの場合にだけ指 msgid "must specify both or neither of serialization and deserialization functions" msgstr "直列化関数と復元関数は両方指定するか、両方指定しないかのどちらかである必要があります" -#: commands/aggregatecmds.c:434 commands/functioncmds.c:634 +#: commands/aggregatecmds.c:434 commands/functioncmds.c:649 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "パラメータ\"parallel\"はSAVE、RESTRICTEDまたはUNSAFEのいずれかでなければなりません" @@ -6167,82 +6202,82 @@ msgstr "パラメータ\"parallel\"はSAVE、RESTRICTEDまたはUNSAFEのいず msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "パラメータ\"%s\"は READ_ONLY、SHAREABLE または READ_WRITE でなくてはなりません" -#: commands/alter.c: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:865 #, c-format msgid "publication \"%s\" already exists" msgstr "パブリケーション\"%s\"はすでに存在します" -#: commands/alter.c:97 commands/subscriptioncmds.c:669 +#: commands/alter.c:98 commands/subscriptioncmds.c:629 #, 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:608 commands/subscriptioncmds.c:1147 commands/subscriptioncmds.c:1231 commands/subscriptioncmds.c:1989 #, c-format msgid "password_required=false is superuser-only" msgstr "password_required=falseはスーパーユーザーのみ可能です" -#: 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:609 commands/subscriptioncmds.c:1148 commands/subscriptioncmds.c:1232 commands/subscriptioncmds.c:1990 #, c-format msgid "Subscriptions with the password_required option set to false may only be created or modified by the superuser." msgstr "password_requiredオプションがfalseに設定されたサブスクリプションはスーパーユーザのみ作成と変更が可能です。" -#: commands/alter.c:734 +#: commands/alter.c:746 #, c-format msgid "must be superuser to set schema of %s" msgstr "%sのスキーマを設定するにはスーパーユーザーである必要があります" @@ -6262,7 +6297,7 @@ msgstr "アクセスメソッドを作成するにはスーパーユーザーで 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:226 commands/indexcmds.c:859 commands/opclasscmds.c:375 commands/opclasscmds.c:833 #, c-format msgid "access method \"%s\" does not exist" msgstr "アクセスメソッド\"%s\"は存在しません" @@ -6272,52 +6307,57 @@ msgstr "アクセスメソッド\"%s\"は存在しません" msgid "handler function is not specified" msgstr "ハンドラ関数の指定がありません" -#: commands/amcmds.c:264 commands/event_trigger.c:200 commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:702 parser/parse_clause.c:943 +#: commands/amcmds.c:264 commands/event_trigger.c:200 commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:705 parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "関数%sは型%sを返さなければなりません" -#: commands/analyze.c:217 +#: commands/analyze.c:215 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\"をスキップしています --- この外部テーブルに対してANALYZEを実行することはできません" -#: commands/analyze.c:234 +#: commands/analyze.c:232 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "\"%s\"をスキップしています --- テーブルでないものや特別なシステムテーブルに対してANALYZEを実行することはできません" -#: commands/analyze.c:314 +#: commands/analyze.c:317 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "\"%s.%s\"継承ツリーを解析しています" -#: commands/analyze.c:319 +#: commands/analyze.c:322 #, c-format msgid "analyzing \"%s.%s\"" msgstr "\"%s.%s\"を解析しています" -#: commands/analyze.c:385 +#: commands/analyze.c:393 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "リレーション\"%2$s\"の列\"%1$s\"が2回以上現れます" -#: commands/analyze.c:780 +#: commands/analyze.c:803 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "テーブル\"%s.%s.%s\"に対する自動ANALYZE\n" -#: commands/analyze.c:1295 +#: commands/analyze.c:805 +#, c-format +msgid "finished analyzing table \"%s.%s.%s\"\n" +msgstr "テーブル\"%s.%s.%s\"の解析完了\n" + +#: commands/analyze.c:1346 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "\"%1$s\": %3$uページの内%2$dをスキャン。%4$.0fの有効な行と%5$.0fの不要な行が存在。%6$d行をサンプリング。推定総行数は%7$.0f" -#: commands/analyze.c:1379 +#: commands/analyze.c:1430 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "継承ツリー\"%s.%s\"のANALYZEをスキップします --- このツリーには子テーブルがありません" -#: commands/analyze.c:1477 +#: commands/analyze.c:1528 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "継承ツリー\"%s.%s\"のANALYZEをスキップします --- このツリーにはアナライズ可能な子テーブルがありません" @@ -6362,82 +6402,82 @@ msgstr "PID %d のサーバープロセスは、この中で最も古いトラ msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "このプロセスが現在のトランザクションを終了するまで NOTYFY キューを空にすることはできません" -#: commands/cluster.c:128 +#: commands/cluster.c:127 #, c-format msgid "unrecognized CLUSTER option \"%s\"" msgstr "認識できないCLUSTERオプション \"%s\"" -#: commands/cluster.c:159 commands/cluster.c:433 +#: commands/cluster.c:158 commands/cluster.c:421 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "他のセッションの一時テーブルをクラスタ化できません" -#: commands/cluster.c:177 +#: commands/cluster.c:176 #, c-format 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:190 commands/tablecmds.c:16349 commands/tablecmds.c:18415 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"にはインデックス\"%1$s\"は存在しません" -#: commands/cluster.c:422 +#: commands/cluster.c:410 #, c-format msgid "cannot cluster a shared catalog" msgstr "共有カタログをクラスタ化できません" -#: commands/cluster.c:437 +#: commands/cluster.c:425 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "他のセッションの一時テーブルに対してはVACUUMを実行できません" -#: commands/cluster.c:513 commands/tablecmds.c:16639 +#: commands/cluster.c:507 commands/tablecmds.c:18425 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\"はテーブル\"%s\"のインデックスではありません" -#: commands/cluster.c:521 +#: commands/cluster.c:515 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "インデックス\"%s\"でクラスタ化できません。アクセスメソッドがクラスタ化をサポートしないためです" -#: commands/cluster.c:533 +#: commands/cluster.c:527 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "部分インデックス\"%s\"をクラスタ化できません" -#: commands/cluster.c:547 +#: commands/cluster.c:541 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "無効なインデックス\"%s\"ではクラスタ化できません" -#: commands/cluster.c:571 +#: commands/cluster.c:565 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "パーティションテーブル内のインデックスは CLUSTER 済みとマークできません`" -#: commands/cluster.c:956 +#: commands/cluster.c:961 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "\"%3$s\"に対するインデックススキャンを使って\"%1$s.%2$s\"をクラスタ化しています" -#: commands/cluster.c:962 +#: commands/cluster.c:967 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "シーケンシャルスキャンとソートを使って\"%s.%s\"をクラスタ化しています" -#: commands/cluster.c:967 +#: commands/cluster.c:972 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "\"%s.%s\"に対してVACUUMを実行しています" -#: commands/cluster.c:994 +#: commands/cluster.c:999 #, c-format msgid "\"%s.%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "\"%1$s.%2$s\": %5$u ページ中に見つかった行バージョン: 移動可能 %3$.0f 行、削除不可 %4$.0f 行" -#: commands/cluster.c:999 +#: commands/cluster.c:1004 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -6446,7 +6486,7 @@ msgstr "" "%.0f 個の無効な行が今はまだ削除できません。\n" "%s." -#: commands/cluster.c:1744 +#: commands/cluster.c:1751 #, c-format msgid "permission denied to cluster \"%s\", skipping it" msgstr "\"%s\"のクラスタ化を行う権限がありません、スキップします" @@ -6456,8 +6496,8 @@ msgstr "\"%s\"のクラスタ化を行う権限がありません、スキップ 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 -#: replication/walsender.c:1187 replication/walsender.c:1426 +#: commands/collationcmds.c:123 commands/collationcmds.c:129 commands/define.c:375 commands/tablecmds.c:8368 replication/pgoutput/pgoutput.c:320 replication/pgoutput/pgoutput.c:343 replication/pgoutput/pgoutput.c:357 replication/pgoutput/pgoutput.c:367 replication/pgoutput/pgoutput.c:377 replication/pgoutput/pgoutput.c:387 replication/pgoutput/pgoutput.c:399 replication/walsender.c:1123 replication/walsender.c:1145 replication/walsender.c:1155 +#: replication/walsender.c:1164 replication/walsender.c:1406 replication/walsender.c:1415 #, c-format msgid "conflicting or redundant options" msgstr "競合するオプション、あるいは余計なオプションがあります" @@ -6489,7 +6529,7 @@ msgstr "認識できないの照合順序プロバイダ: %s" msgid "parameter \"%s\" must be specified" msgstr "パラメータ\"%s\"の指定が必要です" -#: commands/collationcmds.c:293 commands/dbcommands.c:1134 +#: commands/collationcmds.c:293 commands/dbcommands.c:1148 #, c-format msgid "using standard form \"%s\" for ICU locale \"%s\"" msgstr "ICUロケール\"%s\"の標準形式\"%s\"を使用します" @@ -6499,7 +6539,7 @@ msgstr "ICUロケール\"%s\"の標準形式\"%s\"を使用します" msgid "nondeterministic collations not supported with this provider" msgstr "非決定的照合順序はこのプロバイダではサポートされません" -#: commands/collationcmds.c:317 commands/dbcommands.c:1087 +#: commands/collationcmds.c:317 commands/dbcommands.c:1101 #, c-format msgid "ICU rules cannot be specified unless locale provider is ICU" msgstr "ICUルールはロケールプロバイダがICUでなければ指定できません" @@ -6509,59 +6549,59 @@ msgstr "ICUルールはロケールプロバイダがICUでなければ指定で msgid "current database's encoding is not supported with this provider" msgstr "現在のデータベースのエンコーディングはこのプロバイダではサポートされません" -#: commands/collationcmds.c:409 +#: commands/collationcmds.c:405 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "エンコーディング\"%2$s\"のための照合順序\"%1$s\"はすでにスキーマ\"%3$s\"内に存在します" -#: commands/collationcmds.c:420 +#: commands/collationcmds.c:416 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "照合順序\"%s\"はすでにスキーマ\"%s\"内に存在します" -#: commands/collationcmds.c:445 +#: commands/collationcmds.c:441 #, c-format msgid "cannot refresh version of default collation" msgstr "デフォルト照合順序のバーションはリフレッシュできません" #. 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:443 commands/subscriptioncmds.c:1445 commands/tablecmds.c:8145 commands/tablecmds.c:8155 commands/tablecmds.c:8157 commands/tablecmds.c:16051 commands/tablecmds.c:19579 commands/tablecmds.c:19600 commands/typecmds.c:3778 commands/typecmds.c:3863 commands/typecmds.c:4217 #, c-format msgid "Use %s instead." msgstr "代わりに%sを使用してください" -#: commands/collationcmds.c:480 commands/dbcommands.c:2550 +#: commands/collationcmds.c:476 commands/dbcommands.c:2580 #, c-format msgid "changing version from %s to %s" msgstr "バージョン%sから%sへの変更" -#: commands/collationcmds.c:495 commands/dbcommands.c:2563 +#: commands/collationcmds.c:491 commands/dbcommands.c:2593 #, c-format msgid "version has not changed" msgstr "バージョンが変わっていません" -#: commands/collationcmds.c:528 commands/dbcommands.c:2729 +#: commands/collationcmds.c:524 commands/dbcommands.c:2763 utils/adt/dbsize.c:180 #, c-format msgid "database with OID %u does not exist" msgstr "OID %uのデータベースは存在しません" -#: commands/collationcmds.c:554 +#: commands/collationcmds.c:550 #, c-format msgid "collation with OID %u does not exist" msgstr "OID %uの照合順序は存在しません" -#: commands/collationcmds.c:848 +#: commands/collationcmds.c:844 #, c-format msgid "must be superuser to import system collations" msgstr "システム照合順序をインポートするにはスーパーユーザーである必要があります" -#: commands/collationcmds.c:968 commands/collationcmds.c:1053 +#: commands/collationcmds.c:964 commands/collationcmds.c:1049 #, c-format 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:1679 commands/dbcommands.c:1897 commands/dbcommands.c:2009 commands/dbcommands.c:2207 commands/dbcommands.c:2447 commands/dbcommands.c:2540 commands/dbcommands.c:2664 commands/dbcommands.c:3175 utils/init/postinit.c:1027 utils/init/postinit.c:1091 utils/init/postinit.c:1164 #, c-format msgid "database \"%s\" does not exist" msgstr "データベース\"%s\"は存在しません" @@ -6571,12 +6611,12 @@ msgstr "データベース\"%s\"は存在しません" msgid "cannot set comment on relation \"%s\"" msgstr "リレーション\"%s\"にはコメントを設定できません" -#: commands/constraint.c:61 utils/adt/ri_triggers.c:2019 +#: commands/constraint.c:61 utils/adt/ri_triggers.c:2175 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "関数\"%s\"はトリガ関数として呼び出されていません" -#: commands/constraint.c:68 utils/adt/ri_triggers.c:2028 +#: commands/constraint.c:68 utils/adt/ri_triggers.c:2184 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "関数\"%s\"はAFTER ROWトリガで実行してください" @@ -6666,308 +6706,264 @@ msgstr "COPY TO の HEADERで\"%s\"は使用できません" msgid "%s requires a Boolean value or \"match\"" msgstr "パラメータ\"%s\"はBoolean値または\"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:818 commands/copy.c:834 commands/copy.c:851 commands/copy.c:877 commands/copy.c:887 #, c-format -msgid "COPY ON_ERROR cannot be used with COPY TO" -msgstr "COPY ONJ_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:474 #, 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:436 commands/define.c:73 commands/define.c:84 commands/define.c:178 commands/define.c:196 commands/define.c:211 commands/define.c:229 +#, c-format +msgid "%s requires a numeric value" +msgstr "%sは数値が必要です" -#: commands/copy.c:437 +#: commands/copy.c:446 #, c-format -msgid "COPY LOG_VERBOSITY \"%s\" not recognized" -msgstr "COPY LOG_VERBOSITY \"%s\"を認識できません" +msgid "REJECT_LIMIT (%) must be greater than zero" +msgstr "REJECT_LIMIT (%)は0より大きくなければなりません" -#: commands/copy.c:498 +#: commands/copy.c:536 #, 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:594 commands/copy.c:609 commands/copy.c:624 commands/copy.c:643 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "オプション\"%s\"の引数は列名のリストでなければなりません" -#: commands/copy.c:617 +#: commands/copy.c:655 #, 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:683 commands/dbcommands.c:880 commands/dbcommands.c:2395 #, c-format msgid "option \"%s\" not recognized" msgstr "タイムゾーン\"%s\"を認識できません" -#: commands/copy.c:650 -#, c-format -msgid "cannot specify DELIMITER in BINARY mode" -msgstr "BINARYモードではDELIMITERを指定できません" - -#: 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 +#. translator: %s is the name of a COPY option, e.g. ON_ERROR +#: commands/copy.c:696 commands/copy.c:701 commands/copy.c:706 commands/copy.c:776 #, c-format -msgid "only ON_ERROR STOP is allowed in BINARY mode" -msgstr "BINARYモードではN_ERROR STOPのみ使用可能です" +msgid "cannot specify %s in BINARY mode" +msgstr "BINARYモードでは%sを指定できません" -#: commands/copy.c:687 +#: commands/copy.c:728 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPYの区切り文字は単一の1バイト文字でなければなりません" -#: commands/copy.c:694 +#: commands/copy.c:735 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPYの区切り文字は改行や復帰記号とすることができません" -#: commands/copy.c:700 +#: commands/copy.c:741 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPYのNULL表現には改行や復帰記号を使用することはできません" -#: commands/copy.c:710 +#: commands/copy.c:751 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "COPYのデフォルト表現には改行や復帰記号を使用することはできません" -#: commands/copy.c:728 +#: commands/copy.c:769 #, 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:783 commands/copy.c:800 commands/copy.c:812 commands/copy.c:827 commands/copy.c:843 #, 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:788 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPYの引用符は単一の1バイト文字でなければなりません" -#: commands/copy.c:750 +#: commands/copy.c:793 #, 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:805 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPYのエスケープは単一の1バイト文字でなければなりません" -#: commands/copy.c:767 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:859 commands/copy.c:895 #, c-format -msgid "COPY FORCE_QUOTE requires CSV mode" -msgstr "COPY FORCE_QUOTE はCSVモードでのみ指定できます" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "COPYの区切り文字は%s指定では使用できません" -#: commands/copy.c:771 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:868 commands/copy.c:904 #, c-format -msgid "COPY FORCE_QUOTE cannot be used with COPY FROM" -msgstr "COPY FORCE_QUOTE は COPY FROM では使用できません" +msgid "CSV quote character must not appear in the %s specification" +msgstr "COPYの引用符は%s指定では使用できません" -#: commands/copy.c:777 +#: commands/copy.c:913 #, c-format -msgid "COPY FORCE_NOT_NULL requires CSV mode" -msgstr "CCOPY FORCE_NOT_NULL はCSVモードでのみ指定できます" +msgid "NULL specification and DEFAULT specification cannot be the same" +msgstr "NULL指定とDEFAULT指定は同じにはできません" -#: commands/copy.c:781 +#: commands/copy.c:919 #, c-format -msgid "COPY FORCE_NOT_NULL cannot be used with COPY TO" -msgstr "COPY FORCE_NOT_NULL は COPY TO では使用できません" +msgid "only ON_ERROR STOP is allowed in BINARY mode" +msgstr "BINARYモードではN_ERROR STOPのみ使用可能です" -#: commands/copy.c:787 +#. translator: first and second %s are the names of COPY option, e.g. +#. * ON_ERROR, third is the value of the COPY option, e.g. IGNORE +#: commands/copy.c:926 #, c-format -msgid "COPY FORCE_NULL requires CSV mode" -msgstr "COPY FORCE_NULL はCSVモードでのみ指定できます" +msgid "COPY %s requires %s to be set to %s" +msgstr "COPY %s では %s が %s に設定されている必要があります" -#: commands/copy.c:792 +#: commands/copy.c:988 #, c-format -msgid "COPY FORCE_NULL cannot be used with COPY TO" -msgstr "CCOPY FORCE_NULL は COPY TO では使用できません" +msgid "column \"%s\" is a generated column" +msgstr "列\"%s\"は生成カラムです" -#: commands/copy.c:798 +#: commands/copy.c:990 #, c-format -msgid "COPY delimiter character must not appear in the NULL specification" -msgstr "COPYの区切り文字はNULL指定では使用できません" +msgid "Generated columns cannot be used in COPY." +msgstr "生成カラムはCOPYでは使えません。" -#: commands/copy.c:805 +#: commands/copy.c:1005 commands/indexcmds.c:1959 commands/statscmds.c:239 commands/tablecmds.c:2592 commands/tablecmds.c:3100 commands/tablecmds.c:3929 parser/parse_relation.c:3798 parser/parse_relation.c:3808 parser/parse_relation.c:3826 parser/parse_relation.c:3833 parser/parse_relation.c:3847 utils/adt/tsvector_op.c:2853 #, c-format -msgid "CSV quote character must not appear in the NULL specification" -msgstr "COPYの引用符はNULL指定では使用できません" +msgid "column \"%s\" does not exist" +msgstr "列\"%s\"は存在しません" -#: commands/copy.c:811 +#: commands/copy.c:1012 commands/tablecmds.c:2618 commands/trigger.c:956 parser/parse_target.c:1086 parser/parse_target.c:1097 #, c-format -msgid "COPY FREEZE cannot be used with COPY TO" -msgstr "COPY FREEZE は COPY TO では使用できません" +msgid "column \"%s\" specified more than once" +msgstr "列\"%s\"が複数指定されました" -#: commands/copy.c:818 +#: commands/copyfrom.c:260 #, c-format -msgid "COPY DEFAULT only available using COPY FROM" -msgstr "COPY DEFAULTはCOPY FROMでのみ使用できます" +msgid "COPY %s" +msgstr "%sのCOPY" -#: commands/copy.c:824 +#: commands/copyfrom.c:268 #, c-format -msgid "COPY delimiter must not appear in the DEFAULT specification" -msgstr "COPYの区切り文字はDEFAULT指定では使用できません" +msgid "COPY %s, line %, column %s" +msgstr "%sのCOPY、行 %、列 %s" -#: commands/copy.c:831 +#: commands/copyfrom.c:273 commands/copyfrom.c:319 #, c-format -msgid "CSV quote character must not appear in the DEFAULT specification" -msgstr "COPYの引用符はDEFAULT指定では使用できません" +msgid "COPY %s, line %" +msgstr "%sのCOPY、行 %" -#: commands/copy.c:839 +#: commands/copyfrom.c:285 #, c-format -msgid "NULL specification and DEFAULT specification cannot be the same" -msgstr "NULL指定とDEFAULT指定は同じにはできません" - -#: commands/copy.c:901 -#, c-format -msgid "column \"%s\" is a generated column" -msgstr "列\"%s\"は生成カラムです" - -#: commands/copy.c:903 -#, 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 -#, 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 -#, c-format -msgid "column \"%s\" specified more than once" -msgstr "列\"%s\"が複数指定されました" - -#: commands/copyfrom.c:118 -#, c-format -msgid "COPY %s" -msgstr "%sのCOPY" - -#: commands/copyfrom.c:126 -#, c-format -msgid "COPY %s, line %llu, column %s" -msgstr "%sのCOPY、行 %llu、列 %s" +msgid "COPY %s, line %, column %s: \"%s\"" +msgstr "%sのCOPY、行 %、列 %s: \"%s\"" -#: commands/copyfrom.c:131 commands/copyfrom.c:177 +#: commands/copyfrom.c:295 #, c-format -msgid "COPY %s, line %llu" -msgstr "%sのCOPY、行 %llu" +msgid "COPY %s, line %, column %s: null input" +msgstr "%sのCOPY、行 %、列 %s: null が入力されました" -#: commands/copyfrom.c:143 +#: commands/copyfrom.c:312 #, c-format -msgid "COPY %s, line %llu, column %s: \"%s\"" -msgstr "%sのCOPY、行 %llu、列 %s: \"%s\"" +msgid "COPY %s, line %: \"%s\"" +msgstr "%sのCOPY、行 %: \"%s\"" -#: commands/copyfrom.c:153 -#, c-format -msgid "COPY %s, line %llu, column %s: null input" -msgstr "%sのCOPY、行 %llu、列 %s: null が入力されました" - -#: commands/copyfrom.c:170 -#, c-format -msgid "COPY %s, line %llu: \"%s\"" -msgstr "%sのCOPY、行 %llu: \"%s\"" - -#: commands/copyfrom.c:673 +#: commands/copyfrom.c:823 #, c-format msgid "cannot copy to view \"%s\"" msgstr "ビュー\"%s\"へのコピーはできません" -#: commands/copyfrom.c:675 +#: commands/copyfrom.c:825 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "ビューへのコピーを可能にするためには、INSTEAD OF INSERTトリガを作成してください。" -#: commands/copyfrom.c:679 +#: commands/copyfrom.c:829 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "実体化ビュー\"%s\"へのコピーはできません" -#: commands/copyfrom.c:684 +#: commands/copyfrom.c:834 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "シーケンス\"%s\"へのコピーはできません" -#: commands/copyfrom.c:689 +#: commands/copyfrom.c:839 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "テーブル以外のリレーション\"%s\"へのコピーはできません" -#: commands/copyfrom.c:729 +#: commands/copyfrom.c:879 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "パーティション親テーブルに対して COPY FREEZE は実行できません" -#: commands/copyfrom.c:744 +#: commands/copyfrom.c:886 +#, c-format +msgid "cannot perform COPY FREEZE on a foreign table" +msgstr "外部テーブルに対して COPY FREEZE は実行できません" + +#: commands/copyfrom.c:900 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "先行するトランザクション処理のためCOPY FREEZEを実行することができません" -#: commands/copyfrom.c:750 +#: commands/copyfrom.c:906 #, c-format msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "このテーブルは現在のサブトランザクションにおいて作成または切り詰めされていないため、COPY FREEZEを実行することができません" -#: commands/copyfrom.c:1313 +#: commands/copyfrom.c:1171 #, c-format -msgid "%llu row was skipped due to data type incompatibility" -msgid_plural "%llu rows were skipped due to data type incompatibility" -msgstr[0] "%llu行がデータ型の不適合によりスキップされました" +msgid "skipped more than REJECT_LIMIT (%) rows due to data type incompatibility" +msgstr "データ型の不適合により、REJECT_LIMIT (%)を超える行がスキップされました" -#: commands/copyfrom.c:1447 +#: commands/copyfrom.c:1474 #, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "FORCE_NOT_NULL指定された列\"%s\"はCOPYで参照されません" +msgid "% row was skipped due to data type incompatibility" +msgid_plural "% rows were skipped due to data type incompatibility" +msgstr[0] "%行がデータ型の不適合によりスキップされました" -#: 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:1611 commands/copyfrom.c:1654 commands/copyto.c:881 #, 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:1707 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:1882 #, c-format msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY FROMによってPostgreSQLサーバープロセスはファイルを読み込みます。psqlの \\copy のようなクライアント側の仕組みが必要かもしれません" -#: commands/copyfrom.c:1753 commands/copyto.c:701 +#: commands/copyfrom.c:1895 commands/copyto.c:986 #, 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:1953 commands/copyto.c:572 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:1968 commands/copyto.c:577 #, c-format msgid "program \"%s\" failed" msgstr "プログラム\"%s\"の実行に失敗しました" @@ -7007,661 +7003,661 @@ msgstr "COPYファイルのヘッダが不正です(サイズが不正です)" 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:732 replication/walsender.c:758 tcop/postgres.c:369 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "トランザクションを実行中のクライアント接続で想定外のEOFがありました" -#: commands/copyfromparse.c:294 replication/walsender.c:772 +#: commands/copyfromparse.c:294 replication/walsender.c:748 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "標準入力からのCOPY中に想定外のメッセージタイプ0x%02Xがありました" -#: commands/copyfromparse.c:317 replication/walsender.c:803 +#: commands/copyfromparse.c:317 replication/walsender.c:779 #, c-format msgid "COPY from stdin failed: %s" msgstr "標準入力からのCOPYが失敗しました: %s" -#: commands/copyfromparse.c:785 +#: commands/copyfromparse.c:802 #, c-format msgid "wrong number of fields in header line: got %d, expected %d" msgstr "ヘッダ行の列数が間違っています: %dでしたが、%dを想定していました" -#: commands/copyfromparse.c:801 +#: commands/copyfromparse.c:818 #, c-format msgid "column name mismatch in header line field %d: got null value (\"%s\"), expected \"%s\"" msgstr "ヘッダ行フィールド%dでカラム名の不一致: NULL値(\"%s\")を検出, 予期していた値\"%s\"" -#: commands/copyfromparse.c:808 +#: commands/copyfromparse.c:825 #, c-format msgid "column name mismatch in header line field %d: got \"%s\", expected \"%s\"" msgstr "ヘッダ行フィールド%dでカラム名の不一致: \"%s\"を検出, 予期していた値\"%s\"" -#: commands/copyfromparse.c:892 commands/copyfromparse.c:1554 commands/copyfromparse.c:1810 +#: commands/copyfromparse.c:962 commands/copyfromparse.c:1581 commands/copyfromparse.c:1837 #, c-format msgid "extra data after last expected column" msgstr "推定最終列の後に余計なデータがありました" -#: commands/copyfromparse.c:906 +#: commands/copyfromparse.c:976 #, c-format msgid "missing data for column \"%s\"" msgstr "列\"%s\"のデータがありません" -#: commands/copyfromparse.c:990 +#: commands/copyfromparse.c:1056 #, c-format -msgid "skipping row due to data type incompatibility at line %llu for column %s: \"%s\"" -msgstr "データ型非互換のため行をスキップします: 行%llu 列 %s: \"%s\"" +msgid "skipping row due to data type incompatibility at line % for column \"%s\": \"%s\"" +msgstr "行%での列 \"%s\"に対するデータ型非互換のため、この行をスキップします : \"%s\"" -#: commands/copyfromparse.c:998 +#: commands/copyfromparse.c:1064 #, c-format -msgid "skipping row due to data type incompatibility at line %llu for column %s: null input" -msgstr "データ型非互換のため行をスキップします: 行%llu 列 %s: NULLが入力されました" +msgid "skipping row due to data type incompatibility at line % for column \"%s\": null input" +msgstr "行%での列\"%s\"に対するデータ型非互換のため、この行をスキップします: NULL入力" -#: commands/copyfromparse.c:1044 +#: commands/copyfromparse.c:1122 #, c-format msgid "received copy data after EOF marker" msgstr "EOF マーカーの後ろでコピーデータを受信しました" -#: commands/copyfromparse.c:1051 +#: commands/copyfromparse.c:1129 #, c-format msgid "row field count is %d, expected %d" msgstr "行のフィールド数は%d、その期待値は%dです" -#: commands/copyfromparse.c:1336 commands/copyfromparse.c:1353 +#: commands/copyfromparse.c:1394 commands/copyfromparse.c:1411 #, c-format msgid "literal carriage return found in data" msgstr "データの中に復帰記号そのものがありました" -#: commands/copyfromparse.c:1337 commands/copyfromparse.c:1354 +#: commands/copyfromparse.c:1395 commands/copyfromparse.c:1412 #, c-format msgid "unquoted carriage return found in data" msgstr "データの中に引用符のない復帰記号がありました" -#: commands/copyfromparse.c:1339 commands/copyfromparse.c:1356 +#: commands/copyfromparse.c:1397 commands/copyfromparse.c:1414 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "復帰記号は\"\\r\"と表現してください" -#: commands/copyfromparse.c:1340 commands/copyfromparse.c:1357 +#: commands/copyfromparse.c:1398 commands/copyfromparse.c:1415 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "復帰記号を表現するにはCSVフィールドを引用符で括ってください" -#: commands/copyfromparse.c:1369 +#: commands/copyfromparse.c:1427 #, c-format msgid "literal newline found in data" msgstr "データの中に改行記号そのものがありました" -#: commands/copyfromparse.c:1370 +#: commands/copyfromparse.c:1428 #, c-format msgid "unquoted newline found in data" msgstr "データの中に引用符のない改行記号がありました" -#: commands/copyfromparse.c:1372 +#: commands/copyfromparse.c:1430 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "改行記号は\"\\n\"と表現してください" -#: commands/copyfromparse.c:1373 +#: commands/copyfromparse.c:1431 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "改行記号を表現するにはCSVフィールドを引用符で括ってください" -#: commands/copyfromparse.c:1419 commands/copyfromparse.c:1455 +#: commands/copyfromparse.c:1469 commands/copyfromparse.c:1491 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "コピー終端記号がこれまでの改行方式と一致しません" -#: commands/copyfromparse.c:1428 commands/copyfromparse.c:1444 +#: commands/copyfromparse.c:1473 commands/copyfromparse.c:1484 commands/copyfromparse.c:1500 #, c-format -msgid "end-of-copy marker corrupt" -msgstr "コピー終端記号が破損しています" +msgid "end-of-copy marker is not alone on its line" +msgstr "コピー終端記号が行内で単独ではありません" -#: commands/copyfromparse.c:1746 commands/copyfromparse.c:1961 +#: commands/copyfromparse.c:1773 commands/copyfromparse.c:1988 #, c-format msgid "unexpected default marker in COPY data" msgstr "COPYデータの中に想定外のデフォルトマーカーがあります" -#: commands/copyfromparse.c:1747 commands/copyfromparse.c:1962 +#: commands/copyfromparse.c:1774 commands/copyfromparse.c:1989 #, c-format msgid "Column \"%s\" has no default value." msgstr "列\"%s\"はデフォルト値を持ちません。" -#: commands/copyfromparse.c:1894 +#: commands/copyfromparse.c:1921 #, c-format msgid "unterminated CSV quoted field" msgstr "CSV引用符が閉じていません" -#: commands/copyfromparse.c:1996 commands/copyfromparse.c:2015 +#: commands/copyfromparse.c:2023 commands/copyfromparse.c:2042 #, c-format msgid "unexpected EOF in COPY data" msgstr "COPYデータの中に想定外のEOFがあります" -#: commands/copyfromparse.c:2005 +#: commands/copyfromparse.c:2032 #, c-format msgid "invalid field size" msgstr "フィールドサイズが不正です" -#: commands/copyfromparse.c:2028 +#: commands/copyfromparse.c:2055 #, c-format msgid "incorrect binary data format" msgstr "バイナリデータ書式が不正です" -#: commands/copyto.c:229 +#: commands/copyto.c:477 #, c-format msgid "could not write to COPY program: %m" msgstr "COPYプログラムに書き出せませんでした: %m" -#: commands/copyto.c:234 +#: commands/copyto.c:482 #, c-format msgid "could not write to COPY file: %m" msgstr "COPYファイルに書き出せませんでした: %m" -#: commands/copyto.c:379 +#: commands/copyto.c:652 #, c-format msgid "cannot copy from view \"%s\"" msgstr "ビュー\"%s\"からのコピーはできません" -#: commands/copyto.c:381 commands/copyto.c:387 commands/copyto.c:393 commands/copyto.c:404 +#: commands/copyto.c:654 commands/copyto.c:669 commands/copyto.c:680 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "COPY (SELECT ...) TO構文を試してください" -#: commands/copyto.c:385 +#: commands/copyto.c:660 +#, c-format +msgid "cannot copy from unpopulated materialized view \"%s\"" +msgstr "データ未投入の実体化ビュー\"%s\"からのコピーはできません" + +#: commands/copyto.c:662 executor/execUtils.c:761 #, c-format -msgid "cannot copy from materialized view \"%s\"" -msgstr "実体化ビュー\"%s\"からのコピーはできません" +msgid "Use the REFRESH MATERIALIZED VIEW command." +msgstr "REFRESH MATERIALIZED VIEWコマンドを使用してください。" -#: commands/copyto.c:391 +#: commands/copyto.c:667 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "外部テーブル \"%s\" からのコピーはできません" -#: commands/copyto.c:397 +#: commands/copyto.c:673 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "シーケンス\"%s\"からのコピーはできません" -#: commands/copyto.c:402 +#: commands/copyto.c:678 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"からのコピーはできません" -#: commands/copyto.c:408 +#: commands/copyto.c:684 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "テーブル以外のリレーション\"%s\"からのコピーはできません" -#: commands/copyto.c:460 +#: commands/copyto.c:739 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "DO INSTEAD NOTHING ルールは COPY ではサポートされていません" -#: commands/copyto.c:474 +#: commands/copyto.c:753 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "条件付き DO INSTEAD ルールは COPY ではサポートされていません" -#: commands/copyto.c:478 +#: commands/copyto.c:757 #, c-format -msgid "DO ALSO rules are not supported for the COPY" +msgid "DO ALSO rules are not supported for COPY" msgstr "DO ALSO ルールは COPY ではサポートされていません" -#: commands/copyto.c:483 +#: commands/copyto.c:762 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "マルチステートメントの DO INSTEAD ルールは COPY ではサポートされていません" -#: commands/copyto.c:493 +#: commands/copyto.c:772 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO)はサポートされていません" -#: commands/copyto.c:511 +#: commands/copyto.c:778 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "COPY問い合わせはユーティリティコマンドであってはなりません" + +#: commands/copyto.c:794 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "COPY文中の問い合わせではRETURNING句が必須です" -#: commands/copyto.c:540 +#: commands/copyto.c:823 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "COPY文で参照されているリレーションが変更されました" -#: 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:951 #, c-format msgid "relative path not allowed for COPY to file" msgstr "ファイルへのCOPYでは相対パスは指定できません" -#: commands/copyto.c:685 +#: commands/copyto.c:970 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ファイル\"%s\"を書き込み用にオープンできませんでした: %m" -#: commands/copyto.c:688 +#: commands/copyto.c:973 #, 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:212 commands/createas.c:524 #, c-format msgid "too many column names were specified" msgstr "指定された列別名が多すぎます" -#: commands/createas.c:541 +#: commands/createas.c:547 #, c-format msgid "policies not yet implemented for this command" msgstr "このコマンドにはポリシは実装されていません" -#: commands/dbcommands.c:829 +#: commands/dbcommands.c:843 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATIONはもはやサポートされません" -#: commands/dbcommands.c:830 +#: commands/dbcommands.c:844 #, c-format msgid "Consider using tablespaces instead." msgstr "代わりにテーブル空間の使用を検討してください" -#: commands/dbcommands.c:855 +#: commands/dbcommands.c:869 #, c-format msgid "OIDs less than %u are reserved for system objects" msgstr "%uより小さいOIDはシステムオブジェクトのために予約されています" -#: commands/dbcommands.c:886 utils/adt/ascii.c:146 +#: commands/dbcommands.c:900 utils/adt/ascii.c:146 #, c-format msgid "%d is not a valid encoding code" msgstr "%dは有効な符号化方式コードではありません" -#: commands/dbcommands.c:897 utils/adt/ascii.c:128 +#: commands/dbcommands.c:911 utils/adt/ascii.c:128 #, c-format msgid "%s is not a valid encoding name" msgstr "%sは有効な符号化方式名ではありません" -#: commands/dbcommands.c:931 +#: commands/dbcommands.c:945 #, c-format 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:958 commands/dbcommands.c:2428 commands/user.c:300 commands/user.c:739 #, c-format msgid "invalid connection limit: %d" msgstr "不正な接続数制限: %d" -#: commands/dbcommands.c:965 +#: commands/dbcommands.c:979 #, c-format msgid "permission denied to create database" msgstr "データベースを作成する権限がありません" -#: commands/dbcommands.c:989 +#: commands/dbcommands.c:1003 #, c-format msgid "template database \"%s\" does not exist" msgstr "テンプレートデータベース\"%s\"は存在しません" -#: commands/dbcommands.c:999 +#: commands/dbcommands.c:1013 #, c-format 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:1014 commands/dbcommands.c:2458 utils/init/postinit.c:1106 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "DROP DATABASEを使用して無効なデータベースを削除してください。" -#: commands/dbcommands.c:1011 +#: commands/dbcommands.c:1025 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "データベース\"%s\"をコピーする権限がありません" -#: commands/dbcommands.c:1028 +#: commands/dbcommands.c:1042 #, c-format msgid "invalid create database strategy \"%s\"" msgstr "データベース作成の方法\"%s\"は不正です" -#: commands/dbcommands.c:1029 +#: commands/dbcommands.c:1043 #, c-format msgid "Valid strategies are \"wal_log\" and \"file_copy\"." msgstr "有効な方法は\"wal_log\"と\"file_copy\"です。" -#: commands/dbcommands.c:1050 +#: commands/dbcommands.c:1064 #, c-format msgid "invalid server encoding %d" msgstr "サーバーの符号化方式%dは不正です" -#: commands/dbcommands.c:1056 +#: commands/dbcommands.c:1070 #, c-format msgid "invalid LC_COLLATE locale name: \"%s\"" msgstr "LC_COLLATEのロケール名\"%s\"は不正です" -#: commands/dbcommands.c:1057 commands/dbcommands.c:1063 +#: commands/dbcommands.c:1071 commands/dbcommands.c:1077 #, c-format msgid "If the locale name is specific to ICU, use ICU_LOCALE." msgstr "ロケール名がICU特有のものである場合は、ICU_LOCALEを使用してください。" -#: commands/dbcommands.c:1062 +#: commands/dbcommands.c:1076 #, c-format msgid "invalid LC_CTYPE locale name: \"%s\"" msgstr "LC_CTYPEのロケール名\"%s\"は不正です" -#: commands/dbcommands.c:1074 +#: commands/dbcommands.c:1088 #, c-format msgid "BUILTIN_LOCALE cannot be specified unless locale provider is builtin" msgstr "BUILTIN_LOCALEはロケールプロバイダがbuiltinでなければ指定できません" -#: commands/dbcommands.c:1082 +#: commands/dbcommands.c:1096 #, c-format msgid "ICU locale cannot be specified unless locale provider is ICU" msgstr "ICUロケールはロケールプロバイダがICUでなければ指定できません" -#: commands/dbcommands.c:1100 +#: commands/dbcommands.c:1114 #, c-format msgid "LOCALE or BUILTIN_LOCALE must be specified" msgstr "LOCALEかBUILTIN_LOCALEのいずれかを指定しなければなりません" -#: commands/dbcommands.c:1109 +#: commands/dbcommands.c:1123 #, c-format msgid "encoding \"%s\" is not supported with ICU provider" msgstr "エンコーディング\"%s\"はICUではサポートされていません" -#: commands/dbcommands.c:1119 +#: commands/dbcommands.c:1133 #, c-format msgid "LOCALE or ICU_LOCALE must be specified" msgstr "LOCALEかICU_LOCALEのいずれかを指定しなければなりません" -#: commands/dbcommands.c:1163 +#: commands/dbcommands.c:1177 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "新しい符号化方式(%s)はテンプレートデータベースの符号化方式(%s)と互換性がありません" -#: commands/dbcommands.c:1166 +#: commands/dbcommands.c:1180 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "テンプレートデータベースの符号化方式と同じものを使うか、もしくは template0 をテンプレートとして使用してください" -#: commands/dbcommands.c:1171 +#: commands/dbcommands.c:1185 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "新しい照合順序(%s)はテンプレートデータベースの照合順序(%s)と互換性がありません" -#: commands/dbcommands.c:1173 +#: commands/dbcommands.c:1187 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "テンプレートデータベースの照合順序と同じものを使うか、もしくは template0 をテンプレートとして使用してください" -#: commands/dbcommands.c:1178 +#: commands/dbcommands.c:1192 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "新しいLC_CTYPE(%s)はテンプレートデータベース(%s)のLC_CTYPEと互換性がありません" -#: commands/dbcommands.c:1180 +#: commands/dbcommands.c:1194 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "テンプレートデータベースのLC_CTYPEと同じものを使うか、もしくはtemplate0をテンプレートとして使用してください" -#: commands/dbcommands.c:1185 +#: commands/dbcommands.c:1199 #, c-format msgid "new locale provider (%s) does not match locale provider of the template database (%s)" msgstr "新しいロケール・プロバイダ(%s)はテンプレートデータベースのロケール・プロバイダ(%s)と一致しません" -#: commands/dbcommands.c:1187 +#: commands/dbcommands.c:1201 #, c-format msgid "Use the same locale provider as in the template database, or use template0 as template." msgstr "テンプレートデータベースと同じロケールプロバイダを使うか、もしくは template0 をテンプレートとして使用してください" -#: commands/dbcommands.c:1199 +#: commands/dbcommands.c:1213 #, c-format msgid "new ICU locale (%s) is incompatible with the ICU locale of the template database (%s)" msgstr "新しいICUロケール(%s)はテンプレートデータベースのICUロケール(%s)と互換性がありません" -#: commands/dbcommands.c:1201 +#: commands/dbcommands.c:1215 #, c-format msgid "Use the same ICU locale as in the template database, or use template0 as template." msgstr "テンプレートデータベースと同じICUロケールを使うか、もしくは template0 をテンプレートとして使用してください。" -#: commands/dbcommands.c:1212 +#: commands/dbcommands.c:1226 #, c-format msgid "new ICU collation rules (%s) are incompatible with the ICU collation rules of the template database (%s)" msgstr "新しいICU照合順序ルール(%s)はテンプレートデータベースのICU照合順序(%s)と互換性がありません" -#: commands/dbcommands.c:1214 +#: commands/dbcommands.c:1228 #, c-format msgid "Use the same ICU collation rules as in the template database, or use template0 as template." msgstr "テンプレートデータベースのICU照合順序ルールと同じものを使うか、もしくは template0 をテンプレートとして使用してください" -#: commands/dbcommands.c:1243 +#: commands/dbcommands.c:1257 #, c-format msgid "template database \"%s\" has a collation version, but no actual collation version could be determined" msgstr "テンプレートデータベース\"%s\"には照合順序のバージョンが設定されていますが、実際の照合順序バージョンが特定できません" -#: commands/dbcommands.c:1248 +#: commands/dbcommands.c:1262 #, c-format msgid "template database \"%s\" has a collation version mismatch" msgstr "テンプレートデータベース\"%s\"では照合順序バージョンの不一致が起きています" -#: commands/dbcommands.c:1250 +#: commands/dbcommands.c:1264 #, c-format msgid "The template database was created using collation version %s, but the operating system provides version %s." msgstr "データベース中の照合順序はバージョン%sで作成されていますが、オペレーティングシステムはバージョン%sを提供しています。" -#: commands/dbcommands.c:1253 +#: commands/dbcommands.c:1267 #, c-format 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:1312 commands/dbcommands.c:2055 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "デフォルトのテーブル空間としてpg_globalを使用できません" -#: commands/dbcommands.c:1324 +#: commands/dbcommands.c:1338 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "新しいデフォルトのテーブル空間\"%s\"を割り当てられません" -#: commands/dbcommands.c:1326 +#: commands/dbcommands.c:1340 #, c-format 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:1370 commands/dbcommands.c:1926 #, c-format msgid "database \"%s\" already exists" msgstr "データベース\"%s\"はすでに存在します" -#: commands/dbcommands.c:1370 +#: commands/dbcommands.c:1384 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "元となるデータベース\"%s\"は他のユーザーによってアクセスされています" -#: commands/dbcommands.c:1392 +#: commands/dbcommands.c:1406 #, c-format msgid "database OID %u is already in use by database \"%s\"" msgstr "データベースOID %uはすでにデータベース\"%s\"で使用されています" -#: commands/dbcommands.c:1398 +#: commands/dbcommands.c:1412 #, c-format 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:1585 commands/dbcommands.c:1600 utils/adt/pg_locale.c:1515 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "符号化方式\"%s\"がロケール\"%s\"に合いません" -#: commands/dbcommands.c:1574 +#: commands/dbcommands.c:1588 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "選択されたLC_CTYPEを設定するには、符号化方式\"%s\"である必要があります。" -#: commands/dbcommands.c:1589 +#: commands/dbcommands.c:1603 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "選択されたLC_COLLATEを設定するには、符号化方式\"%s\"である必要があります。" -#: commands/dbcommands.c:1670 +#: commands/dbcommands.c:1686 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "データベース\"%s\"は存在しません、スキップします" -#: commands/dbcommands.c:1694 +#: commands/dbcommands.c:1710 #, c-format msgid "cannot drop a template database" msgstr "テンプレートデータベースを削除できません" -#: commands/dbcommands.c:1700 +#: commands/dbcommands.c:1716 #, c-format msgid "cannot drop the currently open database" msgstr "現在オープンしているデータベースを削除できません" -#: commands/dbcommands.c:1713 +#: commands/dbcommands.c:1729 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "データベース\"%s\"は有効な論理レプリケーションスロットで使用中です" -#: commands/dbcommands.c:1715 +#: commands/dbcommands.c:1731 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "%d 個のアクティブなスロットがあります。" -#: commands/dbcommands.c:1729 +#: commands/dbcommands.c:1745 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "データベース\"%s\"は論理レプリケーションのサブスクリプションで使用中です" -#: commands/dbcommands.c:1731 +#: commands/dbcommands.c:1747 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "%d個のサブスクリプションがあります" -#: commands/dbcommands.c:1752 commands/dbcommands.c:1926 commands/dbcommands.c:2053 +#: commands/dbcommands.c:1768 commands/dbcommands.c:1948 commands/dbcommands.c:2077 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "データベース\"%s\"は他のユーザーからアクセスされています" -#: commands/dbcommands.c:1886 +#: commands/dbcommands.c:1908 #, c-format msgid "permission denied to rename database" msgstr "データベースの名前を変更する権限がありません" -#: commands/dbcommands.c:1915 +#: commands/dbcommands.c:1937 #, c-format msgid "current database cannot be renamed" msgstr "現在のデータベースの名前を変更できません" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2033 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "現在オープン中のデータベースのテーブルスペースは変更できません" -#: commands/dbcommands.c:2115 +#: commands/dbcommands.c:2139 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "データベース\"%s\"のリレーションの中に、テーブルスペース\"%s\"にすでに存在するものがあります" -#: commands/dbcommands.c:2117 +#: commands/dbcommands.c:2141 #, 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:2270 commands/dbcommands.c:3013 commands/dbcommands.c:3313 commands/dbcommands.c:3426 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "元のデータベースのディレクトリ\"%s\"に不要なファイルが残っているかもしれません" -#: commands/dbcommands.c:2305 +#: commands/dbcommands.c:2331 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "DROP DATABASEのオプション\"%s\"が認識できません" -#: commands/dbcommands.c:2383 +#: commands/dbcommands.c:2409 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "オプション\"%s\"は他のオプションと一緒に指定はできません" -#: commands/dbcommands.c:2430 +#: commands/dbcommands.c:2457 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "無効なデータベース\"%s\"は変更できません" -#: commands/dbcommands.c:2447 +#: commands/dbcommands.c:2474 #, c-format msgid "cannot disallow connections for current database" msgstr "現在のデータベースへの接続は禁止できません" -#: commands/dbcommands.c:2673 +#: commands/dbcommands.c:2704 #, c-format msgid "permission denied to change owner of database" msgstr "データベースの所有者を変更する権限がありません" -#: commands/dbcommands.c:3085 +#: commands/dbcommands.c:3119 #, 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:3122 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "他にこのデータベースを使っている %d 個のセッションがあります。" -#: commands/dbcommands.c:3093 storage/ipc/procarray.c:3847 +#: commands/dbcommands.c:3127 storage/ipc/procarray.c:3860 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." msgstr[0] "このデータベースを使用する準備されたトランザクションが%d存在します。" -#: commands/dbcommands.c:3235 +#: commands/dbcommands.c:3269 #, c-format msgid "missing directory \"%s\"" msgstr "ディレクトリ\"%s\"がありません" -#: commands/dbcommands.c:3293 commands/tablespace.c:184 commands/tablespace.c:633 +#: commands/dbcommands.c:3327 commands/tablespace.c:184 commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "ディレクトリ\"%s\"のstatができませんでした: %m" -#: commands/define.c:53 commands/define.c:257 commands/define.c:289 commands/define.c:317 commands/define.c:363 +#: commands/define.c:40 commands/define.c:244 commands/define.c:276 commands/define.c:304 commands/define.c:350 #, c-format msgid "%s requires a parameter" msgstr "%sはパラメータが必要です" -#: commands/define.c:86 commands/define.c:97 commands/define.c:191 commands/define.c:209 commands/define.c:224 commands/define.c:242 -#, c-format -msgid "%s requires a numeric value" -msgstr "%sは数値が必要です" - -#: commands/define.c:153 +#: commands/define.c:140 #, c-format msgid "%s requires a Boolean value" msgstr "パラメータ\"%s\"はboolean値が必要です" -#: commands/define.c:167 commands/define.c:176 commands/define.c:326 +#: commands/define.c:154 commands/define.c:163 commands/define.c:313 #, c-format msgid "%s requires an integer value" msgstr "%sは整数値が必要です" -#: commands/define.c:271 +#: commands/define.c:258 #, c-format msgid "argument of %s must be a name" msgstr "%sの引数は名前でなければなりません" -#: commands/define.c:301 +#: commands/define.c:288 #, c-format msgid "argument of %s must be a type name" msgstr "%sの引数は型名でなければなりません" -#: commands/define.c:347 +#: commands/define.c:334 #, c-format 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:1400 utils/adt/ruleutils.c:2956 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\"は集約関数です" @@ -7671,17 +7667,17 @@ msgstr "\"%s\"は集約関数です" 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:4013 commands/tablecmds.c:4174 commands/tablecmds.c:4226 commands/tablecmds.c:18856 tcop/utility.c:1328 #, 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:1468 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "スキーマ\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:286 +#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:289 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "型\"%s\"は存在しません、スキップします" @@ -7701,7 +7697,7 @@ msgstr "照合順序\"%s\"は存在しません、スキップします" msgid "conversion \"%s\" does not exist, skipping" msgstr "変換\"%sは存在しません、スキップします" -#: commands/dropcmds.c:288 commands/statscmds.c:664 +#: commands/dropcmds.c:288 commands/statscmds.c:682 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "統計情報オブジェクト\"%s\"は存在しません、スキップします" @@ -7857,347 +7853,347 @@ msgstr "%sではイベントトリガはサポートされません" 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:1404 #, 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:1497 commands/event_trigger.c:1518 #, 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:1931 #, 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_state.c:133 commands/explain_state.c:158 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "EXPLAIN オプション\"%s\"が認識できない値です: \"%s\"" -#: commands/explain.c:272 +#: commands/explain_state.c:165 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "EXPLAIN オプション\"%s\"が認識できません" -#: commands/explain.c:281 +#: commands/explain_state.c:174 commands/explain_state.c:186 commands/explain_state.c:192 #, c-format -msgid "EXPLAIN option WAL requires ANALYZE" -msgstr "EXPLAINのオプションWALにはANALYZE指定が必要です" +msgid "EXPLAIN option %s requires ANALYZE" +msgstr "EXPLAINのオプション %s には ANALYZE 指定が必要です" -#: commands/explain.c:290 -#, c-format -msgid "EXPLAIN option TIMING requires ANALYZE" -msgstr "EXPLAINオプションのTIMINGにはANALYZE指定が必要です" - -#: commands/explain.c:296 -#, c-format -msgid "EXPLAIN option SERIALIZE requires ANALYZE" -msgstr "EXPLAINのオプションSERIALIZEにはANALYZE指定が必要です" - -#: commands/explain.c:302 +#: commands/explain_state.c:198 #, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" msgstr "EXPLAINのオプションANALYZEとGENERIC_PLANは同時に使用できません" -#: commands/extension.c:178 commands/extension.c:3031 +#: commands/extension.c:174 commands/extension.c:3299 #, c-format msgid "extension \"%s\" does not exist" msgstr "機能拡張\"%s\"は存在しません" -#: commands/extension.c:277 commands/extension.c:286 commands/extension.c:298 commands/extension.c:308 +#: commands/extension.c:239 commands/extension.c:248 commands/extension.c:260 commands/extension.c:270 #, c-format msgid "invalid extension name: \"%s\"" msgstr "機能拡張名が不正です: \"%s\"" -#: commands/extension.c:278 +#: commands/extension.c:240 #, c-format msgid "Extension names must not be empty." msgstr "機能拡張名が無効です: 空であってはなりません" -#: commands/extension.c:287 +#: commands/extension.c:249 #, c-format msgid "Extension names must not contain \"--\"." msgstr "機能拡張名に\"--\"が含まれていてはなりません" -#: commands/extension.c:299 +#: commands/extension.c:261 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "機能拡張名が\"-\"で始まったり終わったりしてはなりません" -#: commands/extension.c:309 +#: commands/extension.c:271 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "機能拡張名にディレクトリの区切り文字が含まれていてはなりません" -#: commands/extension.c:324 commands/extension.c:333 commands/extension.c:342 commands/extension.c:352 +#: commands/extension.c:286 commands/extension.c:295 commands/extension.c:304 commands/extension.c:314 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "機能拡張のバージョン名が不正す: \"%s\"" -#: commands/extension.c:325 +#: commands/extension.c:287 #, c-format msgid "Version names must not be empty." msgstr "バージョン名が無効です: 空であってはなりません" -#: commands/extension.c:334 +#: commands/extension.c:296 #, c-format msgid "Version names must not contain \"--\"." msgstr "バージョン名に\"--\"が含まれていてはなりません" -#: commands/extension.c:343 +#: commands/extension.c:305 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "バージョン名が\"-\"で始まったり終わったりしてはなりません" -#: commands/extension.c:353 +#: commands/extension.c:315 #, c-format msgid "Version names must not contain directory separator characters." msgstr "バージョン名にディレクトリの区切り文字が含まれていてはなりません" -#: commands/extension.c:507 +#: commands/extension.c:549 #, c-format msgid "extension \"%s\" is not available" msgstr "機能拡張\"%s\" は利用できません" -#: commands/extension.c:508 -#, c-format -msgid "Could not open extension control file \"%s\": %m." -msgstr "機能拡張の制御ファイル\"%s\"をオープンできませんでした: %m" - -#: commands/extension.c:510 +#: commands/extension.c:550 #, c-format msgid "The extension must first be installed on the system where PostgreSQL is running." msgstr "PostgreSQLが稼働しているシステムで、事前に機能拡張がインストールされている必要があります。" -#: commands/extension.c:514 +#: commands/extension.c:564 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "機能拡張の制御ファイル\"%s\"をオープンできませんでした: %m" -#: commands/extension.c:537 commands/extension.c:547 +#: commands/extension.c:587 commands/extension.c:597 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "セカンダリの機能拡張制御ファイルにパラメータ\"%s\"を設定できません" -#: commands/extension.c:569 commands/extension.c:577 commands/extension.c:585 utils/misc/guc.c:3147 +#: commands/extension.c:619 commands/extension.c:627 commands/extension.c:635 utils/misc/guc.c:3144 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "パラメータ\"%s\"にはbooleanを指定します" -#: commands/extension.c:594 +#: commands/extension.c:644 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\"は有効な符号化方式名ではありません" -#: commands/extension.c:608 commands/extension.c:623 +#: commands/extension.c:658 commands/extension.c:673 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "パラメータ\"%s\"は機能拡張名のリストでなければなりません" -#: commands/extension.c:630 +#: commands/extension.c:680 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "ファイル\"%2$s\"中に認識できないパラメータ\"%1$s\"があります" -#: commands/extension.c:639 +#: commands/extension.c:689 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "\"relocatable\"が真の場合はパラメータ\"schema\"は指定できません" -#: commands/extension.c:817 +#: commands/extension.c:865 +#, c-format +msgid "SQL statement \"%.*s\"" +msgstr "SQL文 \"%.*s\"" + +#: commands/extension.c:894 +#, c-format +msgid "extension script file \"%s\", near line %d" +msgstr "機能拡張スクリプトファイル \"%s\"、%d 行目付近" + +#: commands/extension.c:898 +#, c-format +msgid "extension script file \"%s\"" +msgstr "機能拡張スクリプトファイル \"%s\"" + +#: commands/extension.c:1012 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "トランザクション制御ステートメントを機能拡張スクリプトの中に書くことはできません" -#: commands/extension.c:897 +#: commands/extension.c:1094 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "機能拡張\"%s\"を作成する権限がありません" -#: commands/extension.c:900 +#: commands/extension.c:1097 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "この機能拡張を生成するには現在のデータベースのCREATE権限が必要です。" -#: commands/extension.c:901 +#: commands/extension.c:1098 #, c-format msgid "Must be superuser to create this extension." msgstr "この機能拡張を生成するにはスーパーユーザーである必要があります。" -#: commands/extension.c:905 +#: commands/extension.c:1102 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "機能拡張\"%s\"を更新する権限がありません" -#: commands/extension.c:908 +#: commands/extension.c:1105 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "この機能拡張を更新するには現在のデータベースのCREATE権限が必要です。" -#: commands/extension.c:909 +#: commands/extension.c:1106 #, c-format msgid "Must be superuser to update this extension." msgstr "この機能拡張を更新するにはスーパーユーザーである必要があります。" -#: commands/extension.c:1042 +#: commands/extension.c:1239 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "機能拡張の所有者名に不正な文字: \"%s\"のいずれの文字も含むことはできません" -#: commands/extension.c:1066 commands/extension.c:1093 +#: commands/extension.c:1263 commands/extension.c:1290 #, c-format msgid "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" msgstr "機能拡張\"%s\"のスキーマ名に不正な文字: \"%s\"のいずれの文字も含むことはできません" -#: commands/extension.c:1288 +#: commands/extension.c:1485 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "機能拡張\"%s\"について、バージョン\"%s\"からバージョン\"%s\"へのアップデートパスがありません" -#: commands/extension.c:1496 commands/extension.c:3089 +#: commands/extension.c:1693 commands/extension.c:3357 #, c-format msgid "version to install must be specified" msgstr "インストールするバージョンを指定してください" -#: commands/extension.c:1533 +#: commands/extension.c:1730 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "機能拡張\"%s\"にはバージョン\"%s\"のインストールスクリプトもアップデートパスもありません" -#: commands/extension.c:1567 +#: commands/extension.c:1764 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "機能拡張\"%s\"はスキーマ\"%s\"内にインストールされていなければなりません" -#: commands/extension.c:1727 +#: commands/extension.c:1924 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "機能拡張\"%s\"と\"%s\"の間に循環依存関係が検出されました" -#: commands/extension.c:1732 +#: commands/extension.c:1929 #, c-format msgid "installing required extension \"%s\"" msgstr "必要な機能拡張をインストールします:\"%s\"" -#: commands/extension.c:1755 +#: commands/extension.c:1952 #, c-format msgid "required extension \"%s\" is not installed" msgstr "要求された機能拡張\"%s\"はインストールされていません" -#: commands/extension.c:1758 +#: commands/extension.c:1955 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "必要な機能拡張を一緒にインストールするには CREATE EXTENSION ... CASCADE を使ってください。" -#: commands/extension.c:1793 +#: commands/extension.c:1990 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "機能拡張\"%s\"はすでに存在します、スキップします" -#: commands/extension.c:1800 +#: commands/extension.c:1997 #, c-format msgid "extension \"%s\" already exists" msgstr "機能拡張\"%s\"はすでに存在します" -#: commands/extension.c:1811 +#: commands/extension.c:2008 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "入れ子の CREATE EXTENSION はサポートされません" -#: commands/extension.c:1975 +#: commands/extension.c:2172 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "変更されているため拡張\"%s\"を削除できません" -#: commands/extension.c:2450 +#: commands/extension.c:2665 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s はCREATE EXTENSIONにより実行されるSQLスクリプトからのみ呼び出すことができます" -#: commands/extension.c:2462 +#: commands/extension.c:2677 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u がテーブルを参照していません" -#: commands/extension.c:2467 +#: commands/extension.c:2682 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "テーブル\"%s\"は生成されようとしている機能拡張のメンバではありません" -#: commands/extension.c:2813 +#: commands/extension.c:3081 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "機能拡張がそのスキーマを含んでいるため、機能拡張\"%s\"をスキーマ\"%s\"に移動できません" -#: commands/extension.c:2854 commands/extension.c:2948 +#: commands/extension.c:3122 commands/extension.c:3216 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "機能拡張\"%s\"は SET SCHEMA をサポートしていません" -#: commands/extension.c:2911 +#: commands/extension.c:3179 #, c-format msgid "cannot SET SCHEMA of extension \"%s\" because other extensions prevent it" msgstr "他の機能拡張によって禁止されているため、機能拡張\"%s\"の SET SCHEMAが実行できません" -#: commands/extension.c:2913 +#: commands/extension.c:3181 #, c-format msgid "Extension \"%s\" requests no relocation of extension \"%s\"." msgstr "機能拡張\"%s\"は機能拡張\"%s\"の再配置禁止を要求しています。" -#: commands/extension.c:2950 +#: commands/extension.c:3218 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "機能拡張のスキーマ\"%2$s\"に%1$sが見つかりません" -#: commands/extension.c:3011 +#: commands/extension.c:3279 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "入れ子になった ALTER EXTENSION はサポートされていません" -#: commands/extension.c:3100 +#: commands/extension.c:3368 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "機能拡張 \"%2$s\"のバージョン\"%1$s\"はすでにインストールされています" -#: commands/extension.c:3311 +#: commands/extension.c:3579 #, c-format msgid "cannot add an object of this type to an extension" msgstr "この型のオブジェクトは機能拡張に追加できません" -#: commands/extension.c:3409 +#: commands/extension.c:3677 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "スキーマ\"%s\"を拡張\"%s\"に追加できません。そのスキーマにその拡張が含まれているためです" -#: commands/extension.c:3491 commands/typecmds.c:4042 utils/fmgr/funcapi.c:725 +#: commands/extension.c:3759 commands/typecmds.c:4033 utils/fmgr/funcapi.c:725 #, c-format msgid "could not find multirange type for data type %s" msgstr "データ型%sの複範囲型がありませんでした" -#: commands/extension.c:3532 +#: commands/extension.c:3801 #, c-format msgid "file \"%s\" is too large" msgstr "ファイル\"%s\"は大きすぎます" @@ -8227,7 +8223,7 @@ msgstr "外部データラッパーの所有者を変更するにはスーパー 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\"は存在しません" @@ -8297,7 +8293,7 @@ msgstr "\"%s\"のユーザーマッピングはサーバー\"%s\"に対しては 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\"にはハンドラがありません" @@ -8342,628 +8338,673 @@ msgstr "シェル型の定義を作成します" msgid "SQL function cannot accept shell type %s" msgstr "SQL関数はシェル型\"%s\"を受け付けられません" -#: commands/functioncmds.c:250 +#: commands/functioncmds.c:251 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "集約はシェル型\"%s\"を受け付けられません" -#: commands/functioncmds.c:255 +#: commands/functioncmds.c:257 #, c-format msgid "argument type %s is only a shell" msgstr "引数型%sは単なるシェルです" -#: commands/functioncmds.c:265 +#: commands/functioncmds.c:268 #, c-format msgid "type %s does not exist" msgstr "型%sは存在しません" -#: commands/functioncmds.c:279 +#: commands/functioncmds.c:283 #, c-format msgid "aggregates cannot accept set arguments" msgstr "集約は集合引数を受け付けられません" -#: commands/functioncmds.c:283 +#: commands/functioncmds.c:288 #, c-format msgid "procedures cannot accept set arguments" msgstr "プロシージャは集合引数を受け付けません" -#: commands/functioncmds.c:287 +#: commands/functioncmds.c:293 #, c-format msgid "functions cannot accept set arguments" msgstr "関数は集合を引数として受け付けられません" -#: commands/functioncmds.c:297 +#: commands/functioncmds.c:304 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "VARIADIC パラメータは最後の入力パラメータでなければなりません" -#: commands/functioncmds.c:317 +#: commands/functioncmds.c:325 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "VARIADIC パラメータは最後のパラメータでなければなりません" -#: commands/functioncmds.c:342 +#: commands/functioncmds.c:351 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC パラメータは配列でなければなりません" -#: commands/functioncmds.c:387 +#: commands/functioncmds.c:397 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "パラメータ\"%s\"が複数指定されました" -#: commands/functioncmds.c:405 +#: commands/functioncmds.c:416 #, c-format msgid "only input parameters can have default values" msgstr "入力パラメータのみがデフォルト値を持てます" -#: commands/functioncmds.c:420 +#: commands/functioncmds.c:432 #, c-format msgid "cannot use table references in parameter default value" msgstr "パラメータのデフォルト値としてテーブル参照を使用できません" -#: commands/functioncmds.c:444 +#: commands/functioncmds.c:457 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "デフォルト値を持つパラメータの後にある入力パラメータは、必ずデフォルト値を持たなければなりません" -#: commands/functioncmds.c:454 +#: commands/functioncmds.c:468 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "プロシージャの出力パラメータはデフォルト値を持つパラメータの後には置けません" -#: commands/functioncmds.c:596 commands/functioncmds.c:775 +#: commands/functioncmds.c:611 commands/functioncmds.c:790 #, c-format msgid "invalid attribute in procedure definition" msgstr "プロシージャ定義内の不正な属性" -#: commands/functioncmds.c:692 +#: commands/functioncmds.c:707 #, c-format msgid "support function %s must return type %s" msgstr "サポート関数%sは%s型を返さなければなりません" -#: commands/functioncmds.c:703 +#: commands/functioncmds.c:718 #, c-format msgid "must be superuser to specify a support function" msgstr "サポート関数を指定するにはスーパーユーザーである必要があります" -#: commands/functioncmds.c:824 commands/functioncmds.c:1427 +#: commands/functioncmds.c:839 commands/functioncmds.c:1445 #, c-format msgid "COST must be positive" msgstr "COSTは正数でなければなりません" -#: commands/functioncmds.c:832 commands/functioncmds.c:1435 +#: commands/functioncmds.c:847 commands/functioncmds.c:1453 #, c-format msgid "ROWS must be positive" msgstr "ROWSは正数でなければなりません" -#: commands/functioncmds.c:861 +#: commands/functioncmds.c:876 #, c-format msgid "no function body specified" msgstr "関数本体の指定がありません" -#: commands/functioncmds.c:866 +#: commands/functioncmds.c:881 #, c-format msgid "duplicate function body specified" msgstr "関数本体の指定が重複しています" -#: commands/functioncmds.c:871 +#: commands/functioncmds.c:886 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "インラインのSQL関数本体は言語指定がSQLの場合にのみ有効です" -#: commands/functioncmds.c:913 +#: commands/functioncmds.c:928 #, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "本体をクォートせずに定義するSQL関数は多態引き数を取れません" -#: commands/functioncmds.c:939 commands/functioncmds.c:958 +#: commands/functioncmds.c:954 commands/functioncmds.c:973 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%sはクォートしない関数本体ではサポートされません" -#: commands/functioncmds.c:986 +#: commands/functioncmds.c:1001 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "言語\"%s\"ではAS項目は1つだけ必要です" -#: commands/functioncmds.c:1091 +#: commands/functioncmds.c:1107 #, c-format msgid "no language specified" msgstr "言語が指定されていません" -#: commands/functioncmds.c:1099 commands/functioncmds.c:2104 commands/proclang.c:235 +#: commands/functioncmds.c:1115 commands/functioncmds.c:2135 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:1117 commands/functioncmds.c:2137 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "言語をデータベースに読み込むためには CREATE EXTENSION を使用してください" -#: commands/functioncmds.c:1134 commands/functioncmds.c:1419 +#: commands/functioncmds.c:1150 commands/functioncmds.c:1437 #, c-format msgid "only superuser can define a leakproof function" msgstr "スーパーユーザーのみがリークプルーフ関数を定義することができます" -#: commands/functioncmds.c:1185 +#: commands/functioncmds.c:1202 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "OUTパラメータで定義されているため、関数の戻り値型は%sでなければなりません" -#: commands/functioncmds.c:1198 +#: commands/functioncmds.c:1215 #, c-format msgid "function result type must be specified" msgstr "関数の結果型を指定しなければなりません" -#: commands/functioncmds.c:1251 commands/functioncmds.c:1439 +#: commands/functioncmds.c:1268 commands/functioncmds.c:1457 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "関数が集合を返す場合にROWSは適していません" -#: commands/functioncmds.c:1546 +#: commands/functioncmds.c:1564 #, c-format msgid "source data type %s is a pseudo-type" msgstr "変換元データ型%sは疑似型です" -#: commands/functioncmds.c:1552 +#: commands/functioncmds.c:1570 #, c-format msgid "target data type %s is a pseudo-type" msgstr "変換先データ型%sは疑似型です" -#: commands/functioncmds.c:1576 +#: commands/functioncmds.c:1594 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "元のデータ型がドメインであるため、キャストは無視されます" -#: commands/functioncmds.c:1581 +#: commands/functioncmds.c:1599 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "対象のデータ型がドメインであるため、キャストは無視されます" -#: commands/functioncmds.c:1606 +#: commands/functioncmds.c:1624 #, c-format msgid "cast function must take one to three arguments" msgstr "キャスト関数の引数は1つから3つまでです" -#: commands/functioncmds.c:1612 +#: commands/functioncmds.c:1630 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "キャスト関数の引数は変換元データ型と同一であるか、変換元データ型からバイナリ変換可能である必要があります" -#: commands/functioncmds.c:1616 +#: commands/functioncmds.c:1634 #, c-format msgid "second argument of cast function must be type %s" msgstr "キャスト関数の第2引数は%s型でなければなりません" -#: commands/functioncmds.c:1621 +#: commands/functioncmds.c:1639 #, c-format msgid "third argument of cast function must be type %s" msgstr "キャスト関数の第3引数は%s型でなければなりません" -#: commands/functioncmds.c:1628 +#: commands/functioncmds.c:1646 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "キャスト関数の戻り値データ型は変換先データ型と一致するか、変換先データ型へバイナリ変換可能である必要があります" -#: commands/functioncmds.c:1639 +#: commands/functioncmds.c:1657 #, c-format msgid "cast function must not be volatile" msgstr "キャスト関数はvolatileではいけません" -#: commands/functioncmds.c:1644 +#: commands/functioncmds.c:1662 #, c-format msgid "cast function must be a normal function" msgstr "キャスト関数は通常の関数でなければなりません" -#: commands/functioncmds.c:1648 +#: commands/functioncmds.c:1666 #, c-format msgid "cast function must not return a set" msgstr "キャスト関数は集合を返してはいけません" -#: commands/functioncmds.c:1674 +#: commands/functioncmds.c:1692 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "WITHOUT FUNCTION指定のキャストを作成するにはスーパーユーザーである必要があります" -#: commands/functioncmds.c:1689 +#: commands/functioncmds.c:1707 #, c-format msgid "source and target data types are not physically compatible" msgstr "変換元と変換先のデータ型の間には物理的な互換性がありません" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1727 #, c-format msgid "composite data types are not binary-compatible" -msgstr "複合データ型はバイナリ互換ではありません" +msgstr "複合データ型がバイナリ互換ではありません" -#: commands/functioncmds.c:1710 +#: commands/functioncmds.c:1733 #, c-format -msgid "enum data types are not binary-compatible" -msgstr "列挙データ型はバイナリ互換ではありません" +msgid "array data types are not binary-compatible" +msgstr "配列データ型がバイナリ互換ではありません" -#: commands/functioncmds.c:1716 +#: commands/functioncmds.c:1741 #, c-format -msgid "array data types are not binary-compatible" -msgstr "配列データ型はバイナリ互換ではありません" +msgid "range data types are not binary-compatible" +msgstr "範囲データ型がバイナリ互換ではありません" -#: commands/functioncmds.c:1733 +#: commands/functioncmds.c:1747 +#, c-format +msgid "enum data types are not binary-compatible" +msgstr "列挙データ型がバイナリ互換ではありません" + +#: commands/functioncmds.c:1764 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "ドメインデータ型はバイナリ互換としてマークされていてはなりません" -#: commands/functioncmds.c:1743 +#: commands/functioncmds.c:1774 #, c-format msgid "source data type and target data type are the same" msgstr "変換元と変換先のデータ型が同一です" -#: commands/functioncmds.c:1776 +#: commands/functioncmds.c:1807 #, c-format msgid "transform function must not be volatile" msgstr "変換関数はvolatileではいけません" -#: commands/functioncmds.c:1780 +#: commands/functioncmds.c:1811 #, c-format msgid "transform function must be a normal function" msgstr "変換関数は通常の関数でなければなりません" -#: commands/functioncmds.c:1784 +#: commands/functioncmds.c:1815 #, c-format msgid "transform function must not return a set" msgstr "変換関数は集合を返してはいけません" -#: commands/functioncmds.c:1788 +#: commands/functioncmds.c:1819 #, c-format msgid "transform function must take one argument" msgstr "変換関数は引数を1つとらなければなりません" -#: commands/functioncmds.c:1792 +#: commands/functioncmds.c:1823 #, c-format msgid "first argument of transform function must be type %s" msgstr "変換関数の第1引数は%s型でなければなりません" -#: commands/functioncmds.c:1831 +#: commands/functioncmds.c:1862 #, c-format msgid "data type %s is a pseudo-type" msgstr "データ型%sは擬似型です" -#: commands/functioncmds.c:1837 +#: commands/functioncmds.c:1868 #, c-format msgid "data type %s is a domain" msgstr "データ型%sはドメインです" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1908 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "FROM SQL関数の戻り値のデータ型は%sでなければなりません" -#: commands/functioncmds.c:1903 +#: commands/functioncmds.c:1934 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "TO SQL関数の戻り値データ型はこの変換関数のデータ型でなければなりません" -#: commands/functioncmds.c:1930 +#: commands/functioncmds.c:1961 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "型%s、言語\"%s\"の変換はすでに存在します" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:2047 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "型%s、言語\"%s\"の変換は存在しません" -#: commands/functioncmds.c:2040 +#: commands/functioncmds.c:2071 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "関数%sはすでにスキーマ\"%s\"内に存在します" -#: commands/functioncmds.c:2091 +#: commands/functioncmds.c:2122 #, c-format msgid "no inline code specified" msgstr "インラインコードの指定がありません" -#: commands/functioncmds.c:2137 +#: commands/functioncmds.c:2168 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "言語\"%s\"ではインラインコード実行をサポートしていません" -#: commands/functioncmds.c:2232 +#: commands/functioncmds.c:2263 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "プロシージャには %d 個以上の引数を渡すことはできません" -#: commands/indexcmds.c:647 +#: commands/indexcmds.c:659 #, c-format msgid "must specify at least one column" msgstr "少なくとも1つの列を指定しなければなりません" -#: commands/indexcmds.c:651 +#: commands/indexcmds.c:663 #, c-format msgid "cannot use more than %d columns in an index" msgstr "インデックスには%dを超える列を使用できません" -#: commands/indexcmds.c:694 +#: commands/indexcmds.c:712 #, c-format msgid "cannot create index on relation \"%s\"" msgstr "リレーション\"%s\"のインデックスを作成できません" -#: commands/indexcmds.c:720 +#: commands/indexcmds.c:738 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "パーティション親テーブル\"%s\"には CREATE INDEX CONCURRENTLY は実行できません" -#: commands/indexcmds.c:730 +#: commands/indexcmds.c:748 #, 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:786 commands/tablecmds.c:891 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:818 commands/tablecmds.c:922 commands/tablecmds.c:3709 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "共有リレーションのみをpg_globalテーブル空間に格納することができます" -#: commands/indexcmds.c:833 +#: commands/indexcmds.c:851 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "古いメソッド\"rtree\"をアクセスメソッド\"gist\"に置換しています" -#: commands/indexcmds.c:854 +#: commands/indexcmds.c:872 #, c-format msgid "access method \"%s\" does not support unique indexes" -msgstr "アクセスメソッド\"%s\"では一意性インデックスをサポートしていません" +msgstr "アクセスメソッド\"%s\"ではユニークインデックスをサポートしていません" -#: commands/indexcmds.c:859 +#: commands/indexcmds.c:877 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "アクセスメソッド\"%s\"では包含列をサポートしていません" -#: commands/indexcmds.c:864 +#: commands/indexcmds.c:882 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "アクセスメソッド\"%s\"は複数列インデックスをサポートしません" -#: commands/indexcmds.c:869 +#: commands/indexcmds.c:887 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "アクセスメソッド\"%s\"は排除制約をサポートしていません" -#: commands/indexcmds.c:998 +#: commands/indexcmds.c:892 #, c-format -msgid "cannot match partition key to an index using access method \"%s\"" -msgstr "パーティションキーはアクセスメソッド\"%s\"を使っているインデックスには適合させられません" +msgid "access method \"%s\" does not support WITHOUT OVERLAPS constraints" +msgstr "アクセスメソッド\"%s\"はWITHOUT OVERLAPS制約をサポートしていません" -#: commands/indexcmds.c:1008 +#: commands/indexcmds.c:1019 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "パーティションキー定義では %s 制約はサポートしていません" -#: commands/indexcmds.c:1010 +#: commands/indexcmds.c:1021 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "%s 制約はパーティションキーが式を含む場合は使用できません" -#: commands/indexcmds.c:1060 +#: commands/indexcmds.c:1056 commands/indexcmds.c:2469 commands/indexcmds.c:2488 executor/execReplication.c:329 parser/parse_cte.c:303 parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1410 utils/adt/array_userfuncs.c:1553 utils/adt/arrayfuncs.c:3864 utils/adt/arrayfuncs.c:4419 utils/adt/arrayfuncs.c:6440 utils/adt/rowtypes.c:1220 +#, c-format +msgid "could not identify an equality operator for type %s" +msgstr "型%sの等価演算子を特定できませんでした" + +#: commands/indexcmds.c:1057 commands/indexcmds.c:2491 +#, c-format +msgid "There is no suitable operator in operator family \"%s\" for access method \"%s\"." +msgstr "アクセスメソッド\"%2$s\"に対する演算子族\"%1$s\"に適切な演算子がありません。" + +#: commands/indexcmds.c:1077 #, 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:1093 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "パーティション親テーブル上のユニーク制約はすべてのパーティショニング列を含まなければなりません" -#: commands/indexcmds.c:1077 +#: commands/indexcmds.c:1094 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "テーブル\"%2$s\"上の%1$s制約にパーティションキーの一部である列\"%3$s\"が含まれていません。" -#: commands/indexcmds.c:1096 commands/indexcmds.c:1115 +#: commands/indexcmds.c:1116 commands/indexcmds.c:1147 #, c-format msgid "index creation on system columns is not supported" msgstr "システム列へのインデックス作成はサポートされていません" -#: commands/indexcmds.c:1344 tcop/utility.c:1515 +#: commands/indexcmds.c:1123 +#, c-format +msgid "primary keys on virtual generated columns are not supported" +msgstr "仮想生成列に対する主キーはサポートされていません" + +#: commands/indexcmds.c:1125 commands/indexcmds.c:1164 +#, c-format +msgid "unique constraints on virtual generated columns are not supported" +msgstr "一意性制約は仮想生成列ではサポートされていません" + +#: commands/indexcmds.c:1126 commands/indexcmds.c:1165 +#, c-format +msgid "indexes on virtual generated columns are not supported" +msgstr "仮想生成列に対するインデックスはサポートされていません" + +#: commands/indexcmds.c:1397 tcop/utility.c:1518 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"にはユニークインデックスを構築できません" -#: commands/indexcmds.c:1346 tcop/utility.c:1517 +#: commands/indexcmds.c:1399 tcop/utility.c:1520 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "テーブル\"%s\"は外部テーブルを子テーブルとして含んでいます" -#: commands/indexcmds.c:1831 +#: commands/indexcmds.c:1857 #, 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:1954 parser/parse_utilcmd.c:2714 parser/parse_utilcmd.c:2897 #, 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:1978 parser/parse_utilcmd.c:1967 #, c-format msgid "expressions are not supported in included columns" msgstr "包含列では式はサポートされません" -#: commands/indexcmds.c:1975 +#: commands/indexcmds.c:2019 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "式インデックスの関数はIMMUTABLEマークが必要です" -#: commands/indexcmds.c:1990 +#: commands/indexcmds.c:2034 #, c-format msgid "including column does not support a collation" msgstr "包含列は照合順序をサポートしません" -#: commands/indexcmds.c:1994 +#: commands/indexcmds.c:2038 #, c-format msgid "including column does not support an operator class" msgstr "包含列は演算子クラスをサポートしません" -#: commands/indexcmds.c:1998 +#: commands/indexcmds.c:2042 #, c-format msgid "including column does not support ASC/DESC options" msgstr "包含列は ASC/DESC オプションをサポートしません" -#: commands/indexcmds.c:2002 +#: commands/indexcmds.c:2046 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "包含列は NULLS FIRST/LAST オプションをサポートしません" -#: commands/indexcmds.c:2044 +#: commands/indexcmds.c:2089 #, 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:2097 commands/tablecmds.c:19886 commands/typecmds.c:812 parser/parse_expr.c:2801 parser/parse_type.c:568 parser/parse_utilcmd.c:4043 utils/adt/misc.c:630 #, c-format msgid "collations are not supported by type %s" msgstr "%s 型では照合順序はサポートされません" -#: commands/indexcmds.c:2117 +#: commands/indexcmds.c:2164 #, c-format msgid "operator %s is not commutative" msgstr "演算子 %s は可換ではありません" -#: commands/indexcmds.c:2119 +#: commands/indexcmds.c:2166 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "排除制約で使えるのは可換演算子だけです" -#: commands/indexcmds.c:2145 +#: commands/indexcmds.c:2176 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "演算子%sは演算子族\"%s\"のメンバーではありません" -#: commands/indexcmds.c:2148 +#: commands/indexcmds.c:2179 #, 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:2228 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "アクセスメソッド\"%s\"はASC/DESCオプションをサポートしません" -#: commands/indexcmds.c:2188 +#: commands/indexcmds.c:2233 #, 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:2277 commands/tablecmds.c:19911 commands/tablecmds.c:19917 commands/typecmds.c:2341 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"にはデータ型%1$s用のデフォルトの演算子クラスがありません" -#: commands/indexcmds.c:2234 +#: commands/indexcmds.c:2279 #, 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:2308 commands/indexcmds.c:2316 commands/opclasscmds.c:205 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子クラス\"%1$s\"は存在しません" -#: commands/indexcmds.c:2285 commands/typecmds.c:2299 +#: commands/indexcmds.c:2330 commands/typecmds.c:2329 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "演算子クラス\"%s\"はデータ型%sを受け付けません" -#: commands/indexcmds.c:2375 +#: commands/indexcmds.c:2420 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "データ型%sには複数のデフォルトの演算子クラスがあります" -#: commands/indexcmds.c:2703 +#: commands/indexcmds.c:2470 commands/indexcmds.c:2489 +#, c-format +msgid "could not identify an overlaps operator for type %s" +msgstr "型%sの重複検出演算子を特定できませんでした" + +#: commands/indexcmds.c:2471 commands/indexcmds.c:2490 +#, c-format +msgid "could not identify a contained-by operator for type %s" +msgstr "型%sの被包含演算子を特定できませんでした" + +#: commands/indexcmds.c:2472 commands/tablecmds.c:10302 +#, c-format +msgid "Could not translate compare type %d for operator family \"%s\", input type %s, access method \"%s\"." +msgstr "演算子ファミリー\"%2$s\"、入力型 %3$s、アクセスメソッド\"%4$s\"に対応する比較方式%1$dを変換できませんでした。" + +#: commands/indexcmds.c:2812 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "認識できないREINDEXのオプション \"%s\"" -#: commands/indexcmds.c:2935 +#: commands/indexcmds.c:3044 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "テーブル\"%s\"には並行インデックス再作成が可能なインデックスがありません" -#: commands/indexcmds.c:2949 +#: commands/indexcmds.c:3058 #, 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:3105 commands/indexcmds.c:3616 commands/indexcmds.c:3746 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "システムカタログではインデックスの並行再構築はできません" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3129 #, c-format msgid "can only reindex the currently open database" msgstr "現在オープンしているデータベースのみをインデックス再構築することができます" -#: commands/indexcmds.c:3112 +#: commands/indexcmds.c:3221 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします" -#: commands/indexcmds.c:3145 +#: commands/indexcmds.c:3254 #, c-format msgid "cannot move system relations, skipping all" msgstr "システムリレーションは移動できません、すべてスキップします" -#: commands/indexcmds.c:3191 +#: commands/indexcmds.c:3300 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "パーティションテーブル\"%s.%s\"のインデックス再構築中" -#: commands/indexcmds.c:3194 +#: commands/indexcmds.c:3303 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "パーティションインデックス\"%s.%s\"のインデックス再構築中" -#: commands/indexcmds.c:3387 commands/indexcmds.c:4255 +#: commands/indexcmds.c:3496 commands/indexcmds.c:4388 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "テーブル\"%s.%s\"のインデックス再構築が完了しました" -#: commands/indexcmds.c:3539 commands/indexcmds.c:3592 +#: commands/indexcmds.c:3648 commands/indexcmds.c:3701 #, c-format msgid "skipping reindex of invalid index \"%s.%s\"" msgstr "無効なインデックス\"%s.%s\"の再構築をスキップします" -#: commands/indexcmds.c:3542 commands/indexcmds.c:3595 +#: commands/indexcmds.c:3651 commands/indexcmds.c:3704 #, c-format msgid "Use DROP INDEX or REINDEX INDEX." msgstr "DROP INDEXあるいはREINDEX INDEXを使用してください。" -#: commands/indexcmds.c:3546 +#: commands/indexcmds.c:3655 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "排他制約インデックス\"%s.%s\"を並行再構築することはできません、スキップします " -#: commands/indexcmds.c:3702 +#: commands/indexcmds.c:3811 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "このタイプのリレーションでインデックス並列再構築はできません" -#: commands/indexcmds.c:3720 +#: commands/indexcmds.c:3829 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "テーブルスペース\"%s\"への非共有リレーションの移動はできません" -#: commands/indexcmds.c:4236 commands/indexcmds.c:4248 +#: commands/indexcmds.c:4369 commands/indexcmds.c:4381 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr " インデックス\"%s.%s\"の再構築が完了しました " -#: commands/indexcmds.c:4238 commands/indexcmds.c:4257 +#: commands/indexcmds.c:4371 commands/indexcmds.c:4390 #, c-format msgid "%s." msgstr "%s。" @@ -8973,252 +9014,272 @@ msgstr "%s。" msgid "cannot lock relation \"%s\"" msgstr "リレーション\"%s\"はロックできません" -#: commands/matview.c:190 +#: commands/matview.c:208 #, 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:214 gram.y:19148 #, c-format msgid "%s and %s options cannot be used together" msgstr "%sオプションと%sオプションとを同時に使用することはできません" -#: commands/matview.c:253 +#: commands/matview.c:273 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "実体化ビュー\"%s\"を平行的に最新化することはできません" -#: commands/matview.c:256 +#: commands/matview.c:276 #, c-format msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." -msgstr "実体化ビュー上の1つ以上の列に対してWHERE句を持たないUNIQUEインデックスを作成してください。" +msgstr "実体化ビュー上の1つ以上の列に対してWHERE句を持たないユニークインデックスを作成してください。" -#: commands/matview.c:650 +#: commands/matview.c:683 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "実体化ビュー\"%s\"に対する新しいデータにはNULL列を持たない重複行があります" -#: commands/matview.c:652 +#: commands/matview.c:685 #, c-format msgid "Row: %s" msgstr "行: %s" -#: commands/opclasscmds.c:123 +#: commands/matview.c:839 +#, c-format +msgid "could not find suitable unique index on materialized view" +msgstr "実体化ビューに適切なユニークインデックスがありませんでした" + +#: 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 "アクセスメソッド\"%2$s\"の演算子クラス\"%1$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 "1または2つの引数型が指定する必要があります" -#: 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 "演算子クラスのパース関数に対応するデータ型は演算子クラスの入力型と一致している必要があります" -#: 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 "ordering comparison functions must have two arguments" +msgstr "順序付け比較関数は2つの引数を取る必要があります" + +#: commands/opclasscmds.c:1263 +#, c-format +msgid "ordering comparison functions must return integer" +msgstr "順序付け比較関数は整数を返さなければなりません" + +#: commands/opclasscmds.c:1280 +#, c-format +msgid "ordering sort support functions must accept type \"internal\"" +msgstr "順序付けソートサポート関数は\"internal\"型を取らなければなりません" + +#: commands/opclasscmds.c:1284 #, c-format -msgid "btree comparison functions must have two arguments" -msgstr "btree比較関数は2つの引数を取る必要があります" +msgid "ordering sort support functions must return void" +msgstr "順序付けソートサポート関数はvoidを返さなければなりません" -#: commands/opclasscmds.c:1262 +#: commands/opclasscmds.c:1295 #, c-format -msgid "btree comparison functions must return integer" -msgstr "btree比較関数は整数を返さなければなりません" +msgid "ordering in_range functions must have five arguments" +msgstr "順序付け in_range 関数は5つの引数を取る必要があります" -#: commands/opclasscmds.c:1279 +#: commands/opclasscmds.c:1299 #, c-format -msgid "btree sort support functions must accept type \"internal\"" -msgstr "btreeソートサポート関数は\"internal\"型を取らなければなりません" +msgid "ordering in_range functions must return boolean" +msgstr "順序付け in_range 関数はブール型を返す必要があります" -#: commands/opclasscmds.c:1283 +#: commands/opclasscmds.c:1315 #, c-format -msgid "btree sort support functions must return void" -msgstr "btreeソートサポート関数はvoidを返さなければなりません" +msgid "ordering equal image functions must have one argument" +msgstr "順序付け等価イメージ関数は1つの引数を取る必要があります" -#: commands/opclasscmds.c:1294 +#: commands/opclasscmds.c:1319 #, c-format -msgid "btree in_range functions must have five arguments" -msgstr "btree in_range 関数は5つの引数を取る必要があります" +msgid "ordering equal image functions must return boolean" +msgstr "順序付け等価イメージ関数はブール型を返す必要があります" -#: commands/opclasscmds.c:1298 +#: commands/opclasscmds.c:1332 #, c-format -msgid "btree in_range functions must return boolean" -msgstr "btree in_range 関数はブール型を返す必要があります" +msgid "ordering equal image functions must not be cross-type" +msgstr "順序付け等価イメージ関数は異なる型の引数を取ってはなりません" -#: commands/opclasscmds.c:1314 +#: commands/opclasscmds.c:1340 #, c-format -msgid "btree equal image functions must have one argument" -msgstr "btreeの equal image 関数は1つの引数を取る必要があります" +msgid "btree skip support functions must accept type \"internal\"" +msgstr "btreeスキップサポート関数は\"internal\"型を取らなければなりません" -#: commands/opclasscmds.c:1318 +#: commands/opclasscmds.c:1344 #, c-format -msgid "btree equal image functions must return boolean" -msgstr "btreeの euqal image 関数はブール型を返す必要があります" +msgid "btree skip support functions must return void" +msgstr "btreeスキップサポート関数はvoidを返さなければなりません" -#: commands/opclasscmds.c:1331 +#: commands/opclasscmds.c:1357 #, c-format -msgid "btree equal image functions must not be cross-type" -msgstr "btreeの equal image 関数は同じ型の引数を取る必要があります" +msgid "btree skip support functions must not be cross-type" +msgstr "btreeスキップサポート関数は異なる型の引数を取ってはなりません" -#: commands/opclasscmds.c:1341 +#: commands/opclasscmds.c:1367 #, c-format msgid "hash function 1 must have one argument" msgstr "ハッシュ関数1は引数を1つ取る必要があります" -#: commands/opclasscmds.c:1345 +#: commands/opclasscmds.c:1371 #, c-format msgid "hash function 1 must return integer" msgstr "ハッシュ関数1は整数を返す必要があります" -#: commands/opclasscmds.c:1352 +#: commands/opclasscmds.c:1378 #, c-format msgid "hash function 2 must have two arguments" msgstr "ハッシュ関数2は2つの引数を取る必要があります" -#: commands/opclasscmds.c:1356 +#: commands/opclasscmds.c:1382 #, c-format msgid "hash function 2 must return bigint" msgstr "ハッシュ関数2は bigint を返す必要があります" -#: commands/opclasscmds.c:1381 +#: commands/opclasscmds.c:1407 #, c-format msgid "associated data types must be specified for index support function" msgstr "インデックスサポート関数に対して関連データ型を指定する必要があります" -#: commands/opclasscmds.c:1406 +#: commands/opclasscmds.c:1432 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "(%2$s,%3$s)に対応する演算子番号%1$dが複数あります" -#: commands/opclasscmds.c:1413 +#: commands/opclasscmds.c:1439 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "(%2$s,%3$s)用の演算子番号%1$dが複数あります" -#: commands/opclasscmds.c:1459 +#: commands/opclasscmds.c:1485 #, 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:1614 #, 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:1769 #, 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:1809 #, 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:1840 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子クラス\"%1$s\"はスキーマ\"%3$s\"内にすでに存在します" -#: commands/opclasscmds.c:1740 +#: commands/opclasscmds.c:1863 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子族\"%1$s\"はスキーマ\"%3$s\"内にすでに存在します" @@ -9288,7 +9349,7 @@ msgstr "演算子の属性\"%s\"は変更できません" 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:1799 commands/tablecmds.c:2399 commands/tablecmds.c:3823 commands/tablecmds.c:6792 commands/tablecmds.c:10058 commands/tablecmds.c:19467 commands/tablecmds.c:19502 commands/trigger.c:318 commands/trigger.c:1337 commands/trigger.c:1447 rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:779 rewrite/rewriteRemove.c:74 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "権限がありません: \"%s\"はシステムカタログです" @@ -9328,52 +9389,52 @@ msgstr "テーブル\"%2$s\"に対するポリシ\"%1$s\"は存在しません" msgid "only USING expression allowed for SELECT, DELETE" msgstr "SELECT、DELETEにはUSING式のみが指定可能です" -#: commands/portalcmds.c:60 commands/portalcmds.c:181 commands/portalcmds.c:232 +#: commands/portalcmds.c:63 commands/portalcmds.c:192 commands/portalcmds.c:243 #, c-format msgid "invalid cursor name: must not be empty" msgstr "カーソル名が不正です: 空ではいけません" -#: commands/portalcmds.c:72 +#: commands/portalcmds.c:75 #, c-format 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:200 commands/portalcmds.c:253 executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "カーソル\"%s\"は存在しません" -#: commands/prepare.c:72 +#: commands/prepare.c:75 #, c-format msgid "invalid statement name: must not be empty" msgstr "不正な文の名前: 空ではいけません" -#: commands/prepare.c:227 commands/prepare.c:232 +#: commands/prepare.c:231 commands/prepare.c:236 #, c-format msgid "prepared statement is not a SELECT" msgstr "準備された文はSELECTではありません" -#: commands/prepare.c:292 +#: commands/prepare.c:296 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "準備された文\"%s\"のパラメータ数が間違っています" -#: commands/prepare.c:294 +#: commands/prepare.c:298 #, c-format msgid "Expected %d parameters but got %d." msgstr "%dパラメータを想定しましたが、%dパラメータでした" -#: commands/prepare.c:327 +#: commands/prepare.c:331 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "パラメータ$%dの型%sを想定している型%sに強制することができません" -#: commands/prepare.c:411 +#: commands/prepare.c:415 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "準備された文\"%s\"はすでに存在します" -#: commands/prepare.c:450 +#: commands/prepare.c:454 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "準備された文\"%s\"は存在しません" @@ -9383,200 +9444,205 @@ msgstr "準備された文\"%s\"は存在しません" 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:130 libpq/auth-oauth.c:850 postmaster/postmaster.c:1130 postmaster/postmaster.c:1232 utils/init/miscinit.c:1870 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "パラメータ\"%s\"のリスト構文が不正です" -#: commands/publicationcmds.c:143 +#: commands/publicationcmds.c:149 #, c-format msgid "unrecognized value for publication option \"%s\": \"%s\"" msgstr "パブリケーションオプション\"%s\"に対する認識できない値: \"%s\"" -#: commands/publicationcmds.c:157 +#: commands/publicationcmds.c:170 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "識別できないパブリケーションのパラメータ: \"%s\"" -#: commands/publicationcmds.c:198 +#: commands/publicationcmds.c:211 #, c-format msgid "no schema has been selected for CURRENT_SCHEMA" msgstr "SURRENT_SCHEMAでスキーマの選択ができませんでした" -#: commands/publicationcmds.c:495 +#: commands/publicationcmds.c:592 msgid "System columns are not allowed." msgstr "システム列は使用できません。" -#: commands/publicationcmds.c:502 commands/publicationcmds.c:507 commands/publicationcmds.c:524 +#: commands/publicationcmds.c:599 commands/publicationcmds.c:604 commands/publicationcmds.c:621 msgid "User-defined operators are not allowed." msgstr "ユーザー定義演算子は使用できません。" -#: commands/publicationcmds.c:548 +#: commands/publicationcmds.c:645 msgid "Only columns, constants, built-in operators, built-in data types, built-in collations, and immutable built-in functions are allowed." msgstr "列、定数、組み込み演算子、組み込みデータ型、組み込み照合順序、そして不変組み込み関数のみ使用可能です。" -#: commands/publicationcmds.c:560 +#: commands/publicationcmds.c:657 msgid "User-defined types are not allowed." msgstr "ユーザー定義型は使用できません。" -#: commands/publicationcmds.c:563 +#: commands/publicationcmds.c:660 msgid "User-defined or built-in mutable functions are not allowed." msgstr "ユーザー定義または組み込みの不変関数は使用できません。" -#: commands/publicationcmds.c:566 +#: commands/publicationcmds.c:663 msgid "User-defined collations are not allowed." msgstr "ユーザー定義照合順序は使用できません。" -#: commands/publicationcmds.c:576 +#: commands/publicationcmds.c:673 #, c-format msgid "invalid publication WHERE expression" msgstr "パブリケーションのWHERE式が不正です" -#: commands/publicationcmds.c:629 +#: commands/publicationcmds.c:726 #, c-format msgid "cannot use publication WHERE clause for relation \"%s\"" msgstr "リレーション\"%s\"に対してはパブリケーションのWHERE句は使用できません" -#: commands/publicationcmds.c:631 +#: commands/publicationcmds.c:728 #, c-format msgid "WHERE clause cannot be used for a partitioned table when %s is false." msgstr "%sが偽のときはWHERE句をパーティション親テーブルに対して使用することはできません。" -#: commands/publicationcmds.c:702 commands/publicationcmds.c:716 +#: commands/publicationcmds.c:801 commands/publicationcmds.c:815 #, c-format msgid "cannot use column list for relation \"%s.%s\" in publication \"%s\"" msgstr "パブリケーション\"%3$s\"のリレーション\"%1$s.%2$s\"に対して列リストを使用することはできません" -#: commands/publicationcmds.c:705 +#: commands/publicationcmds.c:804 #, c-format msgid "Column lists cannot be specified in publications containing FOR TABLES IN SCHEMA elements." msgstr "FOR TABLES IN SCHEMA要素を含むパブリケーションで列リストは指定できません。" -#: commands/publicationcmds.c:719 +#: commands/publicationcmds.c:818 #, c-format msgid "Column lists cannot be specified for partitioned tables when %s is false." msgstr "%sが偽のときはパーティション親テーブルに対して列リストを使用できません。" -#: commands/publicationcmds.c:754 +#: commands/publicationcmds.c:855 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "FOR ALL TABLE 指定のパブリケーションを生成するためにはスーパーユーザーである必要があります" -#: commands/publicationcmds.c:825 +#: commands/publicationcmds.c:930 #, c-format msgid "must be superuser to create FOR TABLES IN SCHEMA publication" msgstr "FOR TABLES IN SCHEMA設定のパブリケーションを作成するにはスーパーユーザーである必要があります" -#: commands/publicationcmds.c:861 +#: commands/publicationcmds.c:966 #, c-format msgid "\"wal_level\" is insufficient to publish logical changes" msgstr "\"wal_level\"が論理更新情報のパブリッシュには不十分です" -#: commands/publicationcmds.c:862 +#: commands/publicationcmds.c:967 #, c-format msgid "Set \"wal_level\" to \"logical\" before creating subscriptions." msgstr "サブスクリプションを作成する前に\"wal_level\"を\"logical\"に設定にしてください。" -#: commands/publicationcmds.c:958 commands/publicationcmds.c:966 +#: commands/publicationcmds.c:1067 commands/publicationcmds.c:1075 #, c-format msgid "cannot set parameter \"%s\" to false for publication \"%s\"" msgstr "パブリケーション\"%2$s\"に対してパラメーター\"%1$s\"を偽に設定することはできません" -#: commands/publicationcmds.c:961 +#: commands/publicationcmds.c:1070 #, c-format msgid "The publication contains a WHERE clause for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "このパブリケーションはパーティション親テーブル\"%s\"に対するWHERE句を含んでいますが、これは\"%s\" が偽の場合は許可されません。" -#: commands/publicationcmds.c:969 +#: commands/publicationcmds.c:1078 #, c-format msgid "The publication contains a column list for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "このパブリケーションはパーティション親テーブルに\"%s\"対する列リストを含んでいますが、これは\"%s\" が偽の場合は許可されません。" -#: commands/publicationcmds.c:1292 +#: commands/publicationcmds.c:1399 #, c-format msgid "cannot add schema to publication \"%s\"" msgstr "パブリケーション\"%s\"にはスキーマは追加できません" -#: commands/publicationcmds.c:1294 +#: commands/publicationcmds.c:1401 #, c-format msgid "Schemas cannot be added if any tables that specify a column list are already part of the publication." msgstr "カラムリストが指定されているテーブルがパブリケーションに含まれている場合はスキーマの追加ができません。" -#: commands/publicationcmds.c:1342 +#: commands/publicationcmds.c:1449 #, c-format msgid "must be superuser to add or set schemas" msgstr "スキーマを追加または設定するにはスーパーユーザーである必要があります" -#: commands/publicationcmds.c:1351 commands/publicationcmds.c:1359 +#: commands/publicationcmds.c:1458 commands/publicationcmds.c:1466 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "パブリケーション\"%s\"は FOR ALL TABLES と定義されています" -#: commands/publicationcmds.c:1353 +#: commands/publicationcmds.c:1460 #, c-format msgid "Schemas cannot be added to or dropped from FOR ALL TABLES publications." msgstr "FOR ALL TABLES指定のパブリケーションではスキーマの追加や削除はできません。" -#: commands/publicationcmds.c:1361 +#: commands/publicationcmds.c:1468 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "FOR ALL TABLES指定のパブリケーションではテーブルの追加や削除はできません。" -#: commands/publicationcmds.c:1385 commands/publicationcmds.c:1424 commands/publicationcmds.c:1961 utils/cache/lsyscache.c:3634 +#: commands/publicationcmds.c:1492 commands/publicationcmds.c:1531 commands/publicationcmds.c:2068 utils/cache/lsyscache.c:3774 #, c-format msgid "publication \"%s\" does not exist" msgstr "パブリケーション\"%s\"は存在しません" -#: commands/publicationcmds.c:1587 commands/publicationcmds.c:1650 +#: commands/publicationcmds.c:1694 commands/publicationcmds.c:1757 #, c-format msgid "conflicting or redundant WHERE clauses for table \"%s\"" msgstr "テーブル\"%s\"でWHERE句が衝突しているか重複しています" -#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1662 +#: commands/publicationcmds.c:1701 commands/publicationcmds.c:1769 #, c-format msgid "conflicting or redundant column lists for table \"%s\"" msgstr "テーブル\"%s\"で列リストが衝突しているか重複しています" -#: commands/publicationcmds.c:1796 +#: commands/publicationcmds.c:1903 #, c-format msgid "column list must not be specified in ALTER PUBLICATION ... DROP" msgstr "ALTER PUBLICATION ... DROPでは、列リストは指定できません" -#: commands/publicationcmds.c:1808 +#: commands/publicationcmds.c:1915 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "リレーション\"%s\"はパブリケーションの一部ではありません" -#: commands/publicationcmds.c:1815 +#: commands/publicationcmds.c:1922 #, c-format msgid "cannot use a WHERE clause when removing a table from a publication" msgstr "テーブルをパブリケーションから削除する際にはWHERE句を指定できません" -#: commands/publicationcmds.c:1875 +#: commands/publicationcmds.c:1982 #, c-format msgid "tables from schema \"%s\" are not part of the publication" msgstr "スキーマ\"%s\"のテーブルはこのパブリケーションに含まれてません" -#: commands/publicationcmds.c:1918 commands/publicationcmds.c:1925 +#: commands/publicationcmds.c:2025 commands/publicationcmds.c:2032 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "パブリケーション\"%s\"の所有者を変更する権限がありません" -#: commands/publicationcmds.c:1920 +#: commands/publicationcmds.c:2027 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "FOR ALL TABLES設定のパブリケーションの所有者はスーパーユーザーである必要があります" -#: commands/publicationcmds.c:1927 +#: commands/publicationcmds.c:2034 #, c-format msgid "The owner of a FOR TABLES IN SCHEMA publication must be a superuser." msgstr "FOR TABLES IN SCHEMA設定のパブリケーションの所有者はスーパーユーザーでなければなりません。" -#: commands/publicationcmds.c:1993 +#: commands/publicationcmds.c:2100 #, c-format msgid "publication with OID %u does not exist" msgstr "OID %uのパブリケーションは存在しません" +#: commands/publicationcmds.c:2133 +#, c-format +msgid "%s requires a \"none\" or \"stored\" value" +msgstr "%sの値は\"none\"または\"stored\"である必要があります" + #: commands/schemacmds.c:109 commands/schemacmds.c:289 #, c-format msgid "unacceptable schema name \"%s\"" @@ -9618,127 +9684,127 @@ msgid "cannot set security label on relation \"%s\"" msgstr "リレーション\"%s\"のセキュリティラベルは設定できません" # (%s) -#: commands/sequence.c:741 +#: commands/sequence.c:748 #, c-format -msgid "nextval: reached maximum value of sequence \"%s\" (%lld)" -msgstr "nextval: シーケンス\"%s\"の最大値(%lld)に達しました" +msgid "nextval: reached maximum value of sequence \"%s\" (%)" +msgstr "nextval: シーケンス\"%s\"の最大値(%)に達しました" -#: commands/sequence.c:760 +#: commands/sequence.c:767 #, c-format -msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" -msgstr "nextval: シーケンス\"%s\"の最小値(%lld)に達しました" +msgid "nextval: reached minimum value of sequence \"%s\" (%)" +msgstr "nextval: シーケンス\"%s\"の最小値(%)に達しました" -#: commands/sequence.c:879 +#: commands/sequence.c:886 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "本セッションでシーケンス\"%s\"のcurrvalはまだ定義されていません" -#: 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)外です\"" +msgid "setval: value % is out of bounds for sequence \"%s\" (%..%)" +msgstr "setval: 値%はシーケンス\"%s\"の範囲(%..%)外です\"" -#: 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の範囲外です" +msgid "MAXVALUE (%) is out of range for sequence data type %s" +msgstr "MAXVALUE (%) はシーケンスデータ型%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の範囲外です" +msgid "MINVALUE (%) is out of range for sequence data type %s" +msgstr "MINVALUE (%) はシーケンスデータ型%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)より小さくなければなりません" +msgid "MINVALUE (%) must be less than MAXVALUE (%)" +msgstr "MINVALUE (%)はMAXVALUE (%)より小さくなければなりません" -#: 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)より小さくすることはできません" +msgid "START value (%) cannot be less than MINVALUE (%)" +msgstr "STARTの値(%)はMINVALUE(%)より小さくすることはできません" -#: 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)より大きくすることはできません" +msgid "START value (%) cannot be greater than MAXVALUE (%)" +msgstr "STARTの値(%)はMAXVALUE(%)より大きくすることはできません" -#: 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) より小さくすることはできません" +msgid "RESTART value (%) cannot be less than MINVALUE (%)" +msgstr "RESTART の値(%)は MINVALUE(%) より小さくすることはできません" -#: 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) より大きくすることはできません" +msgid "RESTART value (%) cannot be greater than MAXVALUE (%)" +msgstr "RESTART の値(%)は MAXVALUE(%) より大きくすることはできません" -#: commands/sequence.c:1564 +#: commands/sequence.c:1574 #, c-format -msgid "CACHE (%lld) must be greater than zero" -msgstr "CACHE(%lld)はゼロより大きくなければなりません" +msgid "CACHE (%) must be greater than zero" +msgstr "CACHE(%)はゼロより大きくなければなりません" -#: 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 table.column または 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:16038 commands/tablecmds.c:18876 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "シーケンス\"%s\"はテーブル\"%s\"にリンクされています" -#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1883 +#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1886 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "CREATE STATISTICSで指定可能なリレーションは一つのみです" @@ -9763,1754 +9829,1920 @@ msgstr "統計情報オブジェクト\"%s\"はすでに存在します" msgid "cannot have more than %d columns in statistics" msgstr "統計情報は%dを超える列を使用できません" -#: commands/statscmds.c:247 commands/statscmds.c:270 commands/statscmds.c:304 +#: commands/statscmds.c:247 commands/statscmds.c:276 commands/statscmds.c:316 #, c-format msgid "statistics creation on system columns is not supported" msgstr "システム列に対する統計情報の作成はサポートされていません" -#: commands/statscmds.c:254 commands/statscmds.c:277 +#: commands/statscmds.c:253 commands/statscmds.c:282 commands/statscmds.c:322 +#, c-format +msgid "statistics creation on virtual generated columns is not supported" +msgstr "仮想生成列に対する統計情報の作成はサポートされていません" + +#: commands/statscmds.c:260 commands/statscmds.c:289 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "列\"%s\"の型%sはデフォルトのbtreeオペレータクラスを持たないため統計情報では利用できません" -#: commands/statscmds.c:321 +#: commands/statscmds.c:339 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "式の型%sがデフォルトbtree演算子クラスを持たないためこの式は多値統計情報では使用できません" -#: commands/statscmds.c:342 +#: commands/statscmds.c:360 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "単一式上の統計情報の構築時には、統計種別は指定できません" -#: commands/statscmds.c:371 +#: commands/statscmds.c:389 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "認識できない統計情報種別\"%s\"" -#: commands/statscmds.c:400 +#: commands/statscmds.c:418 #, c-format msgid "extended statistics require at least 2 columns" msgstr "拡張統計情報には最低でも2つの列が必要です" -#: commands/statscmds.c:418 +#: commands/statscmds.c:436 #, c-format msgid "duplicate column name in statistics definition" msgstr "定形情報定義中の列名が重複しています" -#: commands/statscmds.c:453 +#: commands/statscmds.c:471 #, c-format msgid "duplicate expression in statistics definition" msgstr "統計情報定義内に重複した式" -#: commands/statscmds.c:628 commands/tablecmds.c:8628 +#: commands/statscmds.c:646 commands/tablecmds.c:8913 #, c-format msgid "statistics target %d is too low" msgstr "統計情報目標%dは小さすぎます" -#: commands/statscmds.c:636 commands/tablecmds.c:8636 +#: commands/statscmds.c:654 commands/tablecmds.c:8921 #, c-format msgid "lowering statistics target to %d" msgstr "統計情報目標を%dに減らします" -#: commands/statscmds.c:660 +#: commands/statscmds.c:678 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "統計情報オブジェクト\"%s.%s\"は存在しません、スキップします" -#: commands/subscriptioncmds.c:275 commands/subscriptioncmds.c:372 -#, c-format -msgid "unrecognized subscription parameter: \"%s\"" -msgstr "認識できないサブスクリプションパラメータ: \"%s\"" - -#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:397 +#: commands/subscriptioncmds.c:331 replication/pgoutput/pgoutput.c:410 #, c-format msgid "unrecognized origin value: \"%s\"" msgstr "識別できないoriginの値: \"%s\"" -#: commands/subscriptioncmds.c:363 +#: commands/subscriptioncmds.c:354 #, c-format msgid "invalid WAL location (LSN): %s" msgstr "不正なWAL位置(LSN): %s" +#: commands/subscriptioncmds.c:363 +#, c-format +msgid "unrecognized subscription parameter: \"%s\"" +msgstr "認識できないサブスクリプションパラメータ: \"%s\"" + #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:387 commands/subscriptioncmds.c:394 commands/subscriptioncmds.c:401 commands/subscriptioncmds.c:423 commands/subscriptioncmds.c:439 +#: commands/subscriptioncmds.c:378 commands/subscriptioncmds.c:385 commands/subscriptioncmds.c:392 commands/subscriptioncmds.c:414 commands/subscriptioncmds.c:430 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s と %s は排他なオプションです" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:429 commands/subscriptioncmds.c:445 +#: commands/subscriptioncmds.c:420 commands/subscriptioncmds.c:436 #, c-format msgid "subscription with %s must also set %s" msgstr "%s としたサブスクリプションでは %s を設定する必要があります" -#: commands/subscriptioncmds.c:506 +#: commands/subscriptioncmds.c:466 #, c-format msgid "could not receive list of publications from the publisher: %s" msgstr "パブリケーション一覧をパブリッシャから受け取れませんでした: %s" -#: commands/subscriptioncmds.c:538 +#: commands/subscriptioncmds.c:498 #, c-format msgid "publication %s does not exist on the publisher" msgid_plural "publications %s do not exist on the publisher" msgstr[0] "パブリケーション%sはパブリッシャ上には存在しません" -#: commands/subscriptioncmds.c:626 +#: commands/subscriptioncmds.c:586 #, c-format msgid "permission denied to create subscription" msgstr "サブスクリプションを作成する権限がありません" -#: commands/subscriptioncmds.c:627 +#: commands/subscriptioncmds.c:587 #, c-format msgid "Only roles with privileges of the \"%s\" role may create subscriptions." msgstr "\"%s\"ロールの権限を持つロールのみがサブスクリプションを作成できます。" -#: commands/subscriptioncmds.c:758 commands/subscriptioncmds.c:891 commands/subscriptioncmds.c:1524 replication/logical/tablesync.c:1345 replication/logical/worker.c:4503 +#: commands/subscriptioncmds.c:718 commands/subscriptioncmds.c:852 commands/subscriptioncmds.c:1594 #, c-format -msgid "could not connect to the publisher: %s" -msgstr "パブリッシャへの接続ができませんでした: %s" +msgid "subscription \"%s\" could not connect to the publisher: %s" +msgstr "サブスクリプション\"%s\"はパブリッシャに接続できませんでした: %s" -#: commands/subscriptioncmds.c:829 +#: commands/subscriptioncmds.c:790 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "パブリッシャ上でレプリケーションスロット\"%s\"を作成しました" -#: commands/subscriptioncmds.c:841 +#: commands/subscriptioncmds.c:802 #, c-format msgid "subscription was created, but is not connected" msgstr "サブスクリプションは作成されましたが接続されていません" -#: commands/subscriptioncmds.c:842 +#: commands/subscriptioncmds.c:803 #, c-format msgid "To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription." msgstr "レプリケーションを開始するにはレプリケーションスロットの作成、サブスクリプションの有効化そしてサブスクリプションのリフレッシュを手動で行う必要があります。" -#: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1590 commands/subscriptioncmds.c:1973 utils/cache/lsyscache.c:3684 +#: commands/subscriptioncmds.c:1070 +#, c-format +msgid "cannot set option \"%s\" for enabled subscription" +msgstr "有効にされているサブスクリプションにはオプション”%s”を指定できません" + +#: commands/subscriptioncmds.c:1084 +#, c-format +msgid "cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "スロット名を指定されていないサブスクリプションのオプション\"%s\"を設定することはできません" + +#: commands/subscriptioncmds.c:1127 commands/subscriptioncmds.c:1663 commands/subscriptioncmds.c:2044 utils/cache/lsyscache.c:3824 #, c-format msgid "subscription \"%s\" does not exist" msgstr "サブスクリプション\"%s\"は存在しません" -#: commands/subscriptioncmds.c:1166 commands/subscriptioncmds.c:1245 +#: commands/subscriptioncmds.c:1185 #, c-format msgid "cannot set %s for enabled subscription" msgstr "有効にされているサブスクリプションには %s を指定できません" -#: commands/subscriptioncmds.c:1233 +#: commands/subscriptioncmds.c:1270 +#, c-format +msgid "slot_name and two_phase cannot be altered at the same time" +msgstr "slot_nameとtwo_phaseは同時に変更できません" + +#: commands/subscriptioncmds.c:1286 +#, c-format +msgid "cannot alter two_phase when logical replication worker is still running" +msgstr "論理レプリケーションワーカーがまだ実行中のためtwo_phaseは変更できません" + +#: commands/subscriptioncmds.c:1287 +#, c-format +msgid "Try again after some time." +msgstr "少し待ってから再試行してください。" + +#: commands/subscriptioncmds.c:1300 +#, c-format +msgid "cannot disable two_phase when prepared transactions are present" +msgstr "準備済みトランザクションが存在するためtwo_phaseを無効にできません" + +#: commands/subscriptioncmds.c:1301 #, c-format -msgid "cannot set %s for a subscription that does not have a slot name" -msgstr "スロット名を指定されていないサブスクリプションの%sを設定することはできません" +msgid "Resolve these transactions and try again." +msgstr "トランザクションの解決後に再試行してください。" -#: commands/subscriptioncmds.c:1279 +#: commands/subscriptioncmds.c:1348 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "スロット名を指定されていないサブスクリプションを有効にはできません" -#: commands/subscriptioncmds.c:1323 commands/subscriptioncmds.c:1374 +#: commands/subscriptioncmds.c:1392 commands/subscriptioncmds.c:1443 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "refresh指定された ALTER SUBSCRIPTION は無効化されているサブスクリプションには実行できません" -#: commands/subscriptioncmds.c:1324 +#: commands/subscriptioncmds.c:1393 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false) を使ってください。" -#: commands/subscriptioncmds.c:1333 commands/subscriptioncmds.c:1388 +#: commands/subscriptioncmds.c:1402 commands/subscriptioncmds.c:1457 #, c-format msgid "ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled" msgstr "two_phaseが有効である場合、refreshおよびcopy_data指定された ALTER SUBSCRIPTIONは実行できません" -#: commands/subscriptioncmds.c:1334 +#: commands/subscriptioncmds.c:1403 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "refresh = false または copy_data = false を指定してALTER SUBSCRIPTION ... SET PUBLICATIONを実行するか、DROP/CREATE SUBSCRIPTIONを実行してください。" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1390 +#: commands/subscriptioncmds.c:1459 #, c-format msgid "Use %s with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "refresh = false または copy_data = false を指定して%sを実行するか、DROP/CREATE SUBSCRIPTIONを実行してください。" -#: commands/subscriptioncmds.c:1412 +#: commands/subscriptioncmds.c:1481 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESHは無効化されているサブスクリプションには実行できません" -#: commands/subscriptioncmds.c:1437 +#: commands/subscriptioncmds.c:1506 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase is enabled" msgstr "two_phaseが有効である場合、copy_data指定のALTER SUBSCRIPTION ... REFRESHは実行できません" -#: commands/subscriptioncmds.c:1438 +#: commands/subscriptioncmds.c:1507 #, c-format msgid "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "ALTER SUBSCRIPTION ... REFRESH を copy_data = false を指定して実行するか、DROP/CREATE SUBSCRIPTIONを実行してください。" -#: commands/subscriptioncmds.c:1473 +#: commands/subscriptioncmds.c:1542 #, c-format msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X" msgstr "WAL読み飛ばし位置(LSN %X/%X)は基点LSN %X/%Xより大きくなければなりません" -#: commands/subscriptioncmds.c:1594 +#: commands/subscriptioncmds.c:1667 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "サブスクリプション\"%s\"は存在しません、スキップします" -#: commands/subscriptioncmds.c:1863 +#: commands/subscriptioncmds.c:1934 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "パブリッシャ上でレプリケーションスロット\"%s\"を削除しました" -#: commands/subscriptioncmds.c:1872 commands/subscriptioncmds.c:1880 +#: commands/subscriptioncmds.c:1943 commands/subscriptioncmds.c:1951 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "パブリッシャ上でのレプリケーションスロット\"%s\"の削除に失敗しました: %s" -#: commands/subscriptioncmds.c:2005 +#: commands/subscriptioncmds.c:2076 #, c-format msgid "subscription with OID %u does not exist" msgstr "OID %uのサブスクリプションは存在しません" -#: commands/subscriptioncmds.c:2076 commands/subscriptioncmds.c:2201 +#: commands/subscriptioncmds.c:2150 commands/subscriptioncmds.c:2274 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "パブリッシャから複製テーブルの一覧を受け取れませんでした: %s" -#: commands/subscriptioncmds.c:2112 +#: commands/subscriptioncmds.c:2186 #, c-format msgid "subscription \"%s\" requested copy_data with origin = NONE but might copy data that had a different origin" msgstr "サブスクリプション\"%s\"がcopy_dataをorigin = NONEで要求しましたが、異なる基点を持つデータをコピーする可能性があります" -#: commands/subscriptioncmds.c:2114 +#: commands/subscriptioncmds.c:2188 #, c-format msgid "The subscription being created subscribes to a publication (%s) that contains tables that are written to by other subscriptions." msgid_plural "The subscription being created subscribes to publications (%s) that contain tables that are written to by other subscriptions." msgstr[0] "作成中のサブスクリプションは他のサブスクリプションによって書き込まれるテーブルを含むパブリケーション(%s)をサブスクライブします" -#: commands/subscriptioncmds.c:2117 +#: commands/subscriptioncmds.c:2191 #, c-format 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:2296 replication/logical/tablesync.c:904 replication/pgoutput/pgoutput.c:1162 #, c-format msgid "cannot use different column lists for table \"%s.%s\" in different publications" msgstr "テーブル\"%s.%s\"に対して、異なるパブリケーションで異なる列リストを使用することはできません" -#: commands/subscriptioncmds.c:2273 +#: commands/subscriptioncmds.c:2346 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "レプリケーションスロット\"%s\"を削除する際にパブリッシャへの接続に失敗しました: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:2276 +#: commands/subscriptioncmds.c:2349 #, c-format msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." msgstr "%s でサブスクリプションを無効化してから、%s でスロットとの関連付けを解除してください。" -#: commands/subscriptioncmds.c:2307 +#: commands/subscriptioncmds.c:2380 #, c-format msgid "publication name \"%s\" used more than once" msgstr "パブリケーション名\"%s\"が2回以上使われています" -#: commands/subscriptioncmds.c:2351 +#: commands/subscriptioncmds.c:2424 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "パブリケーション\"%s\"はサブスクリプション\"%s\"にすでに存在します" -#: commands/subscriptioncmds.c:2365 +#: commands/subscriptioncmds.c:2438 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "パブリケーション\"%s\"はサブスクリプション\"%s\"にはありません" -#: commands/subscriptioncmds.c:2376 +#: commands/subscriptioncmds.c:2449 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "サブスクリプションからすべてのパブリケーションを削除することはできません" -#: commands/subscriptioncmds.c:2433 +#: commands/subscriptioncmds.c:2506 #, c-format msgid "%s requires a Boolean value or \"parallel\"" msgstr "パラメータ\"%s\"はBoolean値または\"parallel\"のみを取ります" -#: commands/tablecmds.c:255 commands/tablecmds.c:297 +#: commands/tablecmds.c:258 commands/tablecmds.c:300 #, c-format msgid "table \"%s\" does not exist" msgstr "テーブル\"%s\"は存在しません" -#: commands/tablecmds.c:256 commands/tablecmds.c:298 +#: commands/tablecmds.c:259 commands/tablecmds.c:301 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "テーブル\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:258 commands/tablecmds.c:300 +#: commands/tablecmds.c:261 commands/tablecmds.c:303 msgid "Use DROP TABLE to remove a table." msgstr "テーブルを削除するにはDROP TABLEを使用してください。" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:264 #, c-format msgid "sequence \"%s\" does not exist" msgstr "シーケンス\"%s\"は存在しません" -#: commands/tablecmds.c:262 +#: commands/tablecmds.c:265 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "シーケンス\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:264 +#: commands/tablecmds.c:267 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "シーケンスを削除するにはDROP SEQUENCEを使用してください。" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:270 #, c-format msgid "view \"%s\" does not exist" msgstr "ビュー\"%s\"は存在しません" -#: commands/tablecmds.c:268 +#: commands/tablecmds.c:271 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "ビュー\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:270 +#: commands/tablecmds.c:273 msgid "Use DROP VIEW to remove a view." msgstr "ビューを削除するにはDROP VIEWを使用してください。" -#: commands/tablecmds.c:273 +#: commands/tablecmds.c:276 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "実体化ビュー\"%s\"は存在しません" -#: commands/tablecmds.c:274 +#: commands/tablecmds.c:277 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "実体化ビュー\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:276 +#: commands/tablecmds.c:279 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:282 commands/tablecmds.c:306 commands/tablecmds.c:21531 parser/parse_utilcmd.c:2407 #, c-format msgid "index \"%s\" does not exist" msgstr "インデックス\"%s\"は存在しません" -#: commands/tablecmds.c:280 commands/tablecmds.c:304 +#: commands/tablecmds.c:283 commands/tablecmds.c:307 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "インデックス\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:282 commands/tablecmds.c:306 +#: commands/tablecmds.c:285 commands/tablecmds.c:309 msgid "Use DROP INDEX to remove an index." msgstr "インデックスを削除するにはDROP INDEXを使用してください" -#: commands/tablecmds.c:287 +#: commands/tablecmds.c:290 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\"は型ではありません" -#: commands/tablecmds.c:288 +#: commands/tablecmds.c:291 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:294 commands/tablecmds.c:15877 commands/tablecmds.c:18578 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "外部テーブル\"%s\"は存在しません" -#: commands/tablecmds.c:292 +#: commands/tablecmds.c:295 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "外部テーブル\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:294 +#: commands/tablecmds.c:297 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "外部テーブルを削除するには DROP FOREIGN TABLE を使用してください。" -#: commands/tablecmds.c:722 +#: commands/tablecmds.c:801 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMITは一時テーブルでのみ使用できます" -#: commands/tablecmds.c:753 +#: commands/tablecmds.c:818 +#, c-format +msgid "partitioned tables cannot be unlogged" +msgstr "パーティションテーブルはログ非取得にはできません" + +#: commands/tablecmds.c:838 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "セキュリティー制限操作中は、一時テーブルを作成できません" -#: commands/tablecmds.c:789 commands/tablecmds.c:15645 +#: commands/tablecmds.c:874 commands/tablecmds.c:17302 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "リレーション\"%s\"が複数回継承されました" -#: commands/tablecmds.c:1055 +#: commands/tablecmds.c:1132 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\"はパーティションされていません" -#: commands/tablecmds.c:1149 +#: commands/tablecmds.c:1226 #, c-format msgid "cannot partition using more than %d columns" msgstr "%d以上の列を使ったパーティションはできません" -#: commands/tablecmds.c:1205 +#: commands/tablecmds.c:1282 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "パーティションテーブル\"%s\"では外部子テーブルを作成できません" -#: commands/tablecmds.c:1207 +#: commands/tablecmds.c:1284 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "テーブル\"%s\"はユニークインデックスを持っています" -#: commands/tablecmds.c:1326 commands/tablecmds.c:13242 +#: commands/tablecmds.c:1414 commands/tablecmds.c:14877 #, 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:1419 parser/parse_clause.c:772 parser/parse_relation.c:1929 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "列\"%s\"はSETOFとして宣言できません" -#: commands/tablecmds.c:1477 +#: commands/tablecmds.c:1548 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLYは複数オブジェクトの削除をサポートしていません" -#: commands/tablecmds.c:1481 +#: commands/tablecmds.c:1552 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLYはCASCADEをサポートしません" -#: commands/tablecmds.c:1585 +#: commands/tablecmds.c:1656 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "パーティション親インデックス\"%s\"は並行的に削除することはできません" -#: commands/tablecmds.c:1873 +#: commands/tablecmds.c:1944 #, c-format msgid "cannot truncate only a partitioned table" msgstr "パーティションの親テーブルのみの切り詰めはできません" -#: commands/tablecmds.c:1874 +#: commands/tablecmds.c:1945 #, 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:2018 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "テーブル\"%s\"へのカスケードを削除します" -#: commands/tablecmds.c:2308 +#: commands/tablecmds.c:2379 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "外部テーブル\"%s\"の切り詰めはできません" -#: commands/tablecmds.c:2365 +#: commands/tablecmds.c:2436 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "他のセッションの一時テーブルを削除できません" -#: commands/tablecmds.c:2594 commands/tablecmds.c:15542 +#: commands/tablecmds.c:2674 commands/tablecmds.c:17199 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"からの継承はできません" -#: commands/tablecmds.c:2599 +#: commands/tablecmds.c:2679 #, 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:2687 parser/parse_utilcmd.c:2678 parser/parse_utilcmd.c:2866 #, 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:2699 #, 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:2708 commands/tablecmds.c:17178 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "一時リレーション\"%s\"から継承することはできません" -#: commands/tablecmds.c:2638 commands/tablecmds.c:15529 +#: commands/tablecmds.c:2718 commands/tablecmds.c:17186 #, 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:2873 commands/tablecmds.c:2927 commands/tablecmds.c:14560 parser/parse_utilcmd.c:1418 parser/parse_utilcmd.c:1463 parser/parse_utilcmd.c:1895 parser/parse_utilcmd.c:2003 #, c-format msgid "cannot convert whole-row table reference" msgstr "行全体テーブル参照を変換できません" -#: commands/tablecmds.c:2780 parser/parse_utilcmd.c:1241 +#: commands/tablecmds.c:2874 parser/parse_utilcmd.c:1419 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "制約\"%s\"はテーブル\"%s\"への行全体参照を含みます。" -#: commands/tablecmds.c:2834 parser/parse_utilcmd.c:1284 +#: commands/tablecmds.c:2928 parser/parse_utilcmd.c:1464 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "制約\"%s\"はテーブル\"%s\"への行全体参照を含みます。" -#: commands/tablecmds.c:2944 commands/tablecmds.c:3215 +#: commands/tablecmds.c:3050 commands/tablecmds.c:3344 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "列\"%s\"は生成列を継承しますが、default 指定がされています" -#: commands/tablecmds.c:2949 commands/tablecmds.c:3220 +#: commands/tablecmds.c:3055 commands/tablecmds.c:3349 #, 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:3063 commands/tablecmds.c:3357 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "子テーブルの列\"%s\"は生成式を指定しています" -#: commands/tablecmds.c:2959 commands/tablecmds.c:3230 +#: commands/tablecmds.c:3065 commands/tablecmds.c:3359 #, c-format msgid "A child table column cannot be generated unless its parent column is." msgstr "子テーブルの列は、親となる列が生成列でなければ生成列にはできません。" -#: commands/tablecmds.c:3005 +#: commands/tablecmds.c:3071 commands/tablecmds.c:3365 commands/tablecmds.c:17464 +#, c-format +msgid "column \"%s\" inherits from generated column of different kind" +msgstr "列\"%s\"は異なる種類の生成列を継承しています" + +#: commands/tablecmds.c:3073 commands/tablecmds.c:3367 commands/tablecmds.c:17465 +#, c-format +msgid "Parent column is %s, child column is %s." +msgstr "親の列は %s、子の列は %s です。" + +#: commands/tablecmds.c:3120 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "列\"%s\"は競合する生成式を継承します" -#: commands/tablecmds.c:3007 +#: commands/tablecmds.c:3122 #, c-format msgid "To resolve the conflict, specify a generation expression explicitly." msgstr "この競合を解消するには明示的に生成式を指定してください。" -#: commands/tablecmds.c:3011 +#: commands/tablecmds.c:3126 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "列\"%s\"は競合するデフォルト値を継承します" -#: commands/tablecmds.c:3013 +#: commands/tablecmds.c:3128 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "競合を解消するには明示的にデフォルトを指定してください" -#: commands/tablecmds.c:3068 +#: commands/tablecmds.c:3195 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "異なる式を持つ検査制約名\"%s\"が複数あります。" -#: commands/tablecmds.c:3119 +#: commands/tablecmds.c:3248 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "継承される定義で列\"%s\"をマージしています" -#: commands/tablecmds.c:3123 +#: commands/tablecmds.c:3252 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "継承される定義で列\"%s\"を移動してマージします" -#: commands/tablecmds.c:3124 +#: commands/tablecmds.c:3253 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "ユーザーが指定した列が継承した列の位置に移動されました。" -#: commands/tablecmds.c:3136 +#: commands/tablecmds.c:3265 #, 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:3267 commands/tablecmds.c:3301 commands/tablecmds.c:3317 commands/tablecmds.c:3433 commands/tablecmds.c:3461 commands/tablecmds.c:3477 parser/parse_coerce.c:2190 parser/parse_coerce.c:2210 parser/parse_coerce.c:2230 parser/parse_coerce.c:2251 parser/parse_coerce.c:2306 parser/parse_coerce.c:2340 parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 parser/parse_coerce.c:2486 parser/parse_coerce.c:2553 parser/parse_param.c:224 #, c-format msgid "%s versus %s" msgstr "%s対%s" -#: commands/tablecmds.c:3150 +#: commands/tablecmds.c:3279 #, 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:3281 commands/tablecmds.c:3447 commands/tablecmds.c:7276 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\"対\"%s\"" -#: commands/tablecmds.c:3170 +#: commands/tablecmds.c:3299 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "列\"%s\"でストレージパラメータが競合しています" -#: commands/tablecmds.c:3186 commands/tablecmds.c:3342 +#: commands/tablecmds.c:3315 commands/tablecmds.c:3475 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "列\"%s\"で圧縮方式が競合しています" -#: commands/tablecmds.c:3281 +#: commands/tablecmds.c:3419 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "複数の継承される列\"%s\"の定義をマージしています" -#: commands/tablecmds.c:3293 +#: commands/tablecmds.c:3431 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "継承される列\"%s\"の型が競合しています" -#: commands/tablecmds.c:3312 +#: commands/tablecmds.c:3445 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "継承される列 \"%s\"の照合順序が競合しています" -#: commands/tablecmds.c:3326 +#: commands/tablecmds.c:3459 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "継承される列\"%s\"でストレージパラメータが競合しています" -#: commands/tablecmds.c:3354 +#: commands/tablecmds.c:3487 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "継承された列 \"%s\"の生成が競合しています" -#: commands/tablecmds.c:3573 +#: commands/tablecmds.c:3718 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "他のセッションの一時テーブルを移動できません" -#: commands/tablecmds.c:3643 +#: commands/tablecmds.c:3791 #, c-format msgid "cannot rename column of typed table" msgstr "型付けされたテーブルの列をリネームできません" -#: commands/tablecmds.c:3662 +#: commands/tablecmds.c:3810 #, c-format msgid "cannot rename columns of relation \"%s\"" msgstr "リレーション\"%s\"の列名は変更できません" -#: commands/tablecmds.c:3757 +#: commands/tablecmds.c:3905 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "継承される列\"%s\"の名前を子テーブルでも変更する必要があります" -#: commands/tablecmds.c:3789 +#: commands/tablecmds.c:3937 #, c-format msgid "cannot rename system column \"%s\"" msgstr "システム列%s\"の名前を変更できません" -#: commands/tablecmds.c:3804 +#: commands/tablecmds.c:3952 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "継承される列\"%s\"の名前を変更できません" -#: commands/tablecmds.c:3956 +#: commands/tablecmds.c:4107 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "継承される制約\"%s\"の名前を子テーブルでも変更する必要があります" -#: commands/tablecmds.c:3963 +#: commands/tablecmds.c:4114 #, 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:4414 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "このセッションで実行中の問い合わせで使用されているため\"%2$s\"を%1$sできません" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4269 +#: commands/tablecmds.c:4423 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "保留中のトリガイベントがあるため\"%2$s\"を%1$sできません" -#: commands/tablecmds.c:4295 +#: commands/tablecmds.c:4449 #, c-format msgid "cannot alter temporary tables of other sessions" msgstr "他のセッションの一時テーブルは変更できません" -#: commands/tablecmds.c:4776 +#: commands/tablecmds.c:4913 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "パーティション子テーブル\"%s\"は不完全な取り外し状態であるため変更できません" -#: commands/tablecmds.c:4980 commands/tablecmds.c:4995 +#: commands/tablecmds.c:5142 #, c-format msgid "cannot change persistence setting twice" msgstr "永続性設定の変更は2度はできません" -#: commands/tablecmds.c:5016 +#: commands/tablecmds.c:5159 #, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" msgstr "SET ACCESS METHODサブコマンドを複数指定できません" -#: commands/tablecmds.c:5772 +#: commands/tablecmds.c:5893 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "システムリレーション\"%sを書き換えられません" -#: commands/tablecmds.c:5778 +#: commands/tablecmds.c:5899 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "カタログテーブルとして使用されているテーブル\"%s\"は書き換えられません" -#: commands/tablecmds.c:5790 +#: commands/tablecmds.c:5911 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "他のセッションの一時テーブルを書き換えられません" -#: commands/tablecmds.c:6285 +#: commands/tablecmds.c:6447 commands/tablecmds.c:6467 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "リレーション\"%2$s\"の列\"%1$s\"にNULL値があります" -#: commands/tablecmds.c:6302 +#: commands/tablecmds.c:6484 #, 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:6504 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:6510 #, 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:6775 #, 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:7030 commands/tablecmds.c:7037 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "型\"%s\"を変更できません。列\"%s\".\"%s\"でその型を使用しているためです" -#: commands/tablecmds.c:6865 +#: commands/tablecmds.c:7044 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "列%2$s\".\"%3$s\"がその行型を使用しているため、外部テーブル\"%1$s\"を変更できません。" -#: commands/tablecmds.c:6872 +#: commands/tablecmds.c:7051 #, 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:7107 #, 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:7109 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "型付けされたテーブルを変更する場合も ALTER .. CASCADE を使用してください" -#: commands/tablecmds.c:6976 +#: commands/tablecmds.c:7155 +#, c-format +msgid "type %s is the row type of another table" +msgstr "型\"%s\"は他のテーブルの行型です" + +#: commands/tablecmds.c:7157 +#, c-format +msgid "A typed table must use a stand-alone composite type created with CREATE TYPE." +msgstr "型付きテーブルは、CREATE TYPEで作成された独立した複合型を使用する必要があります。" + +#: commands/tablecmds.c:7162 #, c-format msgid "type %s is not a composite type" msgstr "型 %s は複合型ではありません" -#: commands/tablecmds.c:7003 +#: commands/tablecmds.c:7189 #, c-format msgid "cannot add column to typed table" msgstr "型付けされたテーブルに列を追加できません" -#: commands/tablecmds.c:7051 +#: commands/tablecmds.c:7239 #, c-format msgid "cannot add column to a partition" msgstr "パーティションに列は追加できません" -#: commands/tablecmds.c:7080 commands/tablecmds.c:15760 +#: commands/tablecmds.c:7268 commands/tablecmds.c:17420 #, 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:7274 commands/tablecmds.c:17426 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "子テーブル\"%s\"に異なる照合順序の列\"%s\"があります" -#: commands/tablecmds.c:7104 +#: commands/tablecmds.c:7292 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "子\"%2$s\"の列\"%1$s\"の定義をマージしています" -#: commands/tablecmds.c:7157 +#: commands/tablecmds.c:7345 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "子テーブルを持つテーブルに識別列を再帰的に追加することはできません" -#: commands/tablecmds.c:7370 +#: commands/tablecmds.c:7592 #, c-format msgid "column must be added to child tables too" msgstr "列は子テーブルでも追加する必要があります" -#: commands/tablecmds.c:7448 +#: commands/tablecmds.c:7670 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに存在します、スキップします" -#: commands/tablecmds.c:7455 +#: commands/tablecmds.c:7677 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに存在します" -#: commands/tablecmds.c:7521 commands/tablecmds.c:12564 -#, 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 -#, 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:7768 commands/tablecmds.c:7935 commands/tablecmds.c:8136 commands/tablecmds.c:8267 commands/tablecmds.c:8396 commands/tablecmds.c:8490 commands/tablecmds.c:8593 commands/tablecmds.c:8789 commands/tablecmds.c:8955 commands/tablecmds.c:9046 commands/tablecmds.c:9180 commands/tablecmds.c:14335 commands/tablecmds.c:15900 commands/tablecmds.c:18667 #, c-format msgid "cannot alter system column \"%s\"" msgstr "システム列\"%s\"を変更できません" -#: commands/tablecmds.c:7564 commands/tablecmds.c:7910 +#: commands/tablecmds.c:7774 commands/tablecmds.c:8142 commands/tablecmds.c:14096 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列です" -#: commands/tablecmds.c:7605 -#, c-format -msgid "column \"%s\" is in a primary key" -msgstr "列\"%s\"はプライマリキーで使用しています" - -#: commands/tablecmds.c:7610 -#, c-format -msgid "column \"%s\" is in index used as replica identity" -msgstr "列\"%s\"は複製識別として使用中のインデックスに含まれています" - -#: commands/tablecmds.c:7633 +#: commands/tablecmds.c:7791 #, 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:8013 commands/tablecmds.c:9957 #, c-format msgid "constraint must be added to child tables too" msgstr "制約は子テーブルにも追加する必要があります" -#: commands/tablecmds.c:7834 +#: commands/tablecmds.c:8014 commands/tablecmds.c:8245 commands/tablecmds.c:8352 commands/tablecmds.c:8469 commands/tablecmds.c:9353 commands/tablecmds.c:12159 #, c-format -msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." -msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでにNOT NULLではありません。" +msgid "Do not specify the ONLY keyword." +msgstr "ONLYキーワードを指定しないでください。" -#: commands/tablecmds.c:7919 +#: commands/tablecmds.c:8151 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は生成カラムです" -#: commands/tablecmds.c:8013 +#: commands/tablecmds.c:8244 #, c-format msgid "cannot add identity to a column of only the partitioned table" msgstr "パーティション親テーブルのみで列を識別列とすることはできません" -#: commands/tablecmds.c:8019 +#: commands/tablecmds.c:8250 #, c-format msgid "cannot add identity to a column of a partition" msgstr "パーティション子テーブルの列を識別列とすることはできません" -#: commands/tablecmds.c:8047 +#: commands/tablecmds.c:8278 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "識別列を追加するにはリレーション\"%s\"の列\"%s\"はNOT NULLと宣言されている必要があります" -#: commands/tablecmds.c:8053 +#: commands/tablecmds.c:8284 #, 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:8290 #, 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:8351 #, c-format msgid "cannot change identity column of only the partitioned table" msgstr "パーティション親テーブルのみで列の識別列属性を変更することはできません" -#: commands/tablecmds.c:8126 +#: commands/tablecmds.c:8357 #, c-format msgid "cannot change identity column of a partition" msgstr "パーティション子テーブルの列の識別列属性を変更することはできません" -#: commands/tablecmds.c:8171 commands/tablecmds.c:8267 +#: commands/tablecmds.c:8402 commands/tablecmds.c:8498 #, 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:8468 #, c-format msgid "cannot drop identity from a column of only the partitioned table" msgstr "パーティション親テーブルのみで列の識別列属性を削除することはできません" -#: commands/tablecmds.c:8243 +#: commands/tablecmds.c:8474 #, c-format msgid "cannot drop identity from a column of a partition" msgstr "パーティション子テーブルの列の識別列属性を削除することはできません" -#: commands/tablecmds.c:8272 +#: commands/tablecmds.c:8503 #, 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:8600 commands/tablecmds.c:8810 #, 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:8611 +#, c-format +msgid "ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns on tables with check constraints" +msgstr "ALTER TABLE / SET EXPRESSION は、チェック制約のあるテーブルの仮想生成列ではサポートされていません" + +#: commands/tablecmds.c:8612 commands/tablecmds.c:8630 commands/tablecmds.c:8802 +#, c-format +msgid "Column \"%s\" of relation \"%s\" is a virtual generated column." +msgstr "リレーション\"%2$s\"の列\"%1$s\"は仮想生成列です。" + +#: commands/tablecmds.c:8629 +#, c-format +msgid "ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns on tables that are part of a publication" +msgstr "ALTER TABLE / SET EXPRESSION は、パブリケーションに含まれるテーブルの仮想生成列ではサポートされていません" + +#: commands/tablecmds.c:8736 #, 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:8758 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "継承列から生成式を削除することはできません" -#: commands/tablecmds.c:8525 +#: commands/tablecmds.c:8801 #, c-format -msgid "column \"%s\" of relation \"%s\" is not a stored generated column" -msgstr "リレーション\"%2$s\"の列\"%1$s\"は格納生成列ではありません" +msgid "ALTER TABLE / DROP EXPRESSION is not supported for virtual generated columns" +msgstr "ALTER TABLE / DROP EXPRESSIONは仮想生成列ではサポートされていません" -#: commands/tablecmds.c:8530 +#: commands/tablecmds.c:8815 #, c-format -msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" -msgstr "リレーション\"%2$s\"の列\"%1$s\"は格納生成列ではありません、スキップします" +msgid "column \"%s\" of relation \"%s\" is not a generated column, skipping" +msgstr "リレーション\"%2$s\"の列\"%1$s\"は生成列ではありません、スキップします" -#: commands/tablecmds.c:8608 +#: commands/tablecmds.c:8893 #, c-format msgid "cannot refer to non-index column by number" msgstr "非インデックス列を番号で参照することはできません" -#: commands/tablecmds.c:8660 +#: commands/tablecmds.c:8945 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "リレーション \"%2$s\"の列 %1$d は存在しません" -#: commands/tablecmds.c:8679 +#: commands/tablecmds.c:8965 +#, c-format +msgid "cannot alter statistics on virtual generated column \"%s\"" +msgstr "仮想生成列\"%s\"の統計情報は変更できません" + +#: commands/tablecmds.c:8974 #, 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:8979 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "インデックス \"%2$s\"の非式列\"%1$s\"の統計情報の変更はできません" -#: commands/tablecmds.c:8686 +#: commands/tablecmds.c:8981 #, c-format msgid "Alter statistics on table column instead." msgstr "代わりにテーブルカラムの統計情報を変更してください。" -#: commands/tablecmds.c:8932 +#: commands/tablecmds.c:9227 #, c-format msgid "cannot drop column from typed table" msgstr "型付けされたテーブルから列を削除できません" -#: commands/tablecmds.c:8995 +#: commands/tablecmds.c:9291 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"は存在しません、スキップします" -#: commands/tablecmds.c:9008 +#: commands/tablecmds.c:9304 #, c-format msgid "cannot drop system column \"%s\"" msgstr "システム列\"%s\"を削除できません" -#: commands/tablecmds.c:9018 +#: commands/tablecmds.c:9314 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "継承される列\"%s\"を削除できません" -#: commands/tablecmds.c:9031 +#: commands/tablecmds.c:9327 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "列\"%s\"はリレーション\"%s\"のパーティションキーの一部であるため、削除できません" -#: commands/tablecmds.c:9056 +#: commands/tablecmds.c:9352 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "子テーブルが存在する場合にはパーティション親テーブルのみから列を削除することはできません" -#: commands/tablecmds.c:9261 +#: commands/tablecmds.c:9479 +#, c-format +msgid "column \"%s\" of table \"%s\" is not marked NOT NULL" +msgstr "テーブル\"%2$s\"の列\"%1$s\"は非NULLに設定されていません" + +#: commands/tablecmds.c:9507 commands/tablecmds.c:9519 +#, c-format +msgid "cannot create primary key on column \"%s\"" +msgstr "列%s\"に主キーを作成することはできません" + +#. translator: third %s is a constraint characteristic such as NOT VALID +#: commands/tablecmds.c:9510 commands/tablecmds.c:9522 +#, c-format +msgid "The constraint \"%s\" on column \"%s\", marked %s, is incompatible with a primary key." +msgstr " %3$s とマークされている列 \"%2$s\" の制約 \"%1$s\" は、主キーと非互換です" + +#: commands/tablecmds.c:9512 +#, c-format +msgid "You will need to make it inheritable using %s." +msgstr "%s を用いてこの制約を継承可能にすべきです。" + +#: commands/tablecmds.c:9524 +#, c-format +msgid "You will need to validate it using %s." +msgstr "%s を用いてこの制約を検証してください。" + +#: commands/tablecmds.c:9661 #, 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:9686 #, 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:10044 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "パーティションテーブル\"%s\"上のリレーション\"%s\"を参照する外部キー定義ではONLY指定はできません " -#: commands/tablecmds.c:9629 -#, c-format -msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" -msgstr "パーティションテーブル\"%1$s\"にリレーション\"%2$s\"を参照する NOT VALID 指定の外部キーは追加できません " - -#: commands/tablecmds.c:9632 -#, c-format -msgid "This feature is not yet supported on partitioned tables." -msgstr "この機能はパーティションテーブルに対してはサポートされていません。" - -#: commands/tablecmds.c:9639 commands/tablecmds.c:10095 +#: commands/tablecmds.c:10052 commands/tablecmds.c:10679 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "参照先のリレーション\"%s\"はテーブルではありません" -#: commands/tablecmds.c:9662 +#: commands/tablecmds.c:10075 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "永続テーブルの制約は永続テーブルだけを参照できます" -#: commands/tablecmds.c:9669 +#: commands/tablecmds.c:10082 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "UNLOGGEDテーブルに対する制約は、永続テーブルまたはUNLOGGEDテーブルだけを参照する場合があります" -#: commands/tablecmds.c:9675 +#: commands/tablecmds.c:10088 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "一時テーブルに対する制約は一時テーブルだけを参照する場合があります" -#: commands/tablecmds.c:9679 +#: commands/tablecmds.c:10092 #, 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:10107 commands/tablecmds.c:10135 +#, c-format +msgid "foreign key uses PERIOD on the referenced table but not the referencing table" +msgstr "外部キーが参照先テーブル上ではPERIODを使用していますが、参照元テーブルでは使用していません" + +#: commands/tablecmds.c:10147 +#, c-format +msgid "foreign key uses PERIOD on the referencing table but not the referenced table" +msgstr "外部キーが参照元テーブル上ではPERIODを使用していますが、参照先テーブルでは使用していません" + +#: commands/tablecmds.c:10161 +#, c-format +msgid "foreign key must use PERIOD when referencing a primary using WITHOUT OVERLAPS" +msgstr "主キーがWITHOUT OVERLAPSを使用している場合は外部キーはPERIODを使用する必要があります" + +#: commands/tablecmds.c:10185 commands/tablecmds.c:10191 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "生成カラムを含む外部キー制約に対する不正な %s 処理" -#: commands/tablecmds.c:9765 +#: commands/tablecmds.c:10206 +#, c-format +msgid "foreign key constraints on virtual generated columns are not supported" +msgstr "外部キー制約は仮想生成列ではサポートされていません" + +#: commands/tablecmds.c:10220 commands/tablecmds.c:10229 +#, c-format +msgid "unsupported %s action for foreign key constraint using PERIOD" +msgstr "PERIODを使用する外部キー制約に対するサポートされない %s 処理" + +#: commands/tablecmds.c:10244 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "外部キーの参照列数と被参照列数が合いません" -#: commands/tablecmds.c:9872 +#: commands/tablecmds.c:10300 +#, c-format +msgid "could not identify an overlaps operator for foreign key" +msgstr "外部キーに使用する重複検出演算子を特定できませんでした" + +#: commands/tablecmds.c:10301 +#, c-format +msgid "could not identify an equality operator for foreign key" +msgstr "外部キーに使用する等価演算子を特定できませんでした" + +#: commands/tablecmds.c:10366 commands/tablecmds.c:10400 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "外部キー制約\"%sは実装されていません" -#: commands/tablecmds.c:9874 +#: commands/tablecmds.c:10368 +#, c-format +msgid "Key columns \"%s\" of the referencing table and \"%s\" of the referenced table are of incompatible types: %s and %s." +msgstr "キー列である参照元テーブルの\"%1$s\"と参照先テーブルの\"%2$s\"の型に互換性がありません: %3$sと%4$s。" + +#: commands/tablecmds.c:10401 #, c-format -msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." -msgstr "キーとなる列\"%s\"と\"%s\"との間で型に互換性がありません:%sと%s" +msgid "Key columns \"%s\" of the referencing table and \"%s\" of the referenced table have incompatible collations: \"%s\" and \"%s\". If either collation is nondeterministic, then both collations have to be the same." +msgstr "キー列である参照元テーブルの\"%1$s\"と参照先テーブルの\"%2$s\"の照合順序に互換性がありません: %3$sと%4$s。いずれかの照合順序が非決定的である場合は両方の照合順序が同一である必要があります。" -#: commands/tablecmds.c:10031 +#: commands/tablecmds.c:10607 #, c-format msgid "column \"%s\" referenced in ON DELETE SET action must be part of foreign key" msgstr "ON DELETE SETアクションで参照されている列\"%s\"は外部キーの一部である必要があります" -#: commands/tablecmds.c:10305 commands/tablecmds.c:10775 parser/parse_utilcmd.c:797 parser/parse_utilcmd.c:920 +#: commands/tablecmds.c:10989 commands/tablecmds.c:11435 parser/parse_utilcmd.c:941 parser/parse_utilcmd.c:1086 #, 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:11418 +#, c-format +msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" +msgstr "外部キー\"%2$s\"で参照されているため、テーブル\"%1$s\"を子テーブルとしてアタッチすることはできません" + +#: commands/tablecmds.c:11699 +#, c-format +msgid "constraint \"%s\" enforceability conflicts with constraint \"%s\" on relation \"%s\"" +msgstr "制約\"%1$s\"の強制性が、リレーション\"%3$s\"上の制約\"%2$s\"と競合しています" + +#: commands/tablecmds.c:12158 +#, c-format +msgid "constraint must be altered in child tables too" +msgstr "制約は子テーブルでも変更される必要があります" + +#: commands/tablecmds.c:12187 commands/tablecmds.c:12881 commands/tablecmds.c:13975 commands/tablecmds.c:14204 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません" -#: commands/tablecmds.c:11335 +#: commands/tablecmds.c:12194 #, 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:12199 +#, c-format +msgid "cannot alter enforceability of constraint \"%s\" of relation \"%s\"" +msgstr "リレーション\"%2$s\"の制約\"%1$s\"の強制性を変更できません" + +#: commands/tablecmds.c:12205 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" is not a not-null constraint" +msgstr "リレーション\"%2$s\"の制約\"%1$s\"は非NULL制約ではありません" + +#: commands/tablecmds.c:12213 +#, c-format +msgid "cannot alter inherited constraint \"%s\" on relation \"%s\"" +msgstr "リレーション\"%2$s\"の継承された制約\"%1$s\"を変更できません" + +#: commands/tablecmds.c:12253 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "リレーション\"%2$s\"の制約\"%1$s\"を変更できません" -#: commands/tablecmds.c:11376 +#: commands/tablecmds.c:12256 #, 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:12258 #, c-format msgid "You may alter the constraint it derives from instead." msgstr "この制約の代わりに派生元の制約を変更することは可能です。" -#: commands/tablecmds.c:11617 +#: commands/tablecmds.c:12890 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" is not a foreign key, check, or not-null constraint" +msgstr "リレーション\"%2$s\"の制約\"%1$s\"は外部キー制約、検査制約、非NULL制約のいずれでもありません" + +#: commands/tablecmds.c:12896 #, c-format -msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" -msgstr "リレーション\"%2$s\"の制約\"%1$s\"は外部キー制約でも検査制約でもありません" +msgid "cannot validate NOT ENFORCED constraint" +msgstr "NOT ENFORCED制約は検証できません" -#: commands/tablecmds.c:11694 +#: commands/tablecmds.c:13085 commands/tablecmds.c:13185 #, c-format msgid "constraint must be validated on child tables too" msgstr "制約は子テーブルでも検証される必要があります" -#: commands/tablecmds.c:11781 +#: commands/tablecmds.c:13262 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "外部キー制約で参照される列\"%s\"が存在しません" -#: commands/tablecmds.c:11787 +#: commands/tablecmds.c:13268 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "システム列は外部キーに使用できません" -#: commands/tablecmds.c:11791 +#: commands/tablecmds.c:13272 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "外部キーでは%dを超えるキーを持つことができません" -#: commands/tablecmds.c:11856 +#: commands/tablecmds.c:13340 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"には遅延可能プライマリキーは使用できません" -#: commands/tablecmds.c:11873 +#: commands/tablecmds.c:13357 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"にはプライマリキーがありません" -#: commands/tablecmds.c:11941 +#: commands/tablecmds.c:13430 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "外部キーの被参照列リストには重複があってはなりません" -#: commands/tablecmds.c:12033 +#: commands/tablecmds.c:13533 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"に対しては、遅延可能な一意性制約は使用できません" -#: commands/tablecmds.c:12038 +#: commands/tablecmds.c:13538 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"に、指定したキーに一致する一意性制約がありません" -#: commands/tablecmds.c:12477 +#: commands/tablecmds.c:13979 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" +msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません、スキップします" + +#: commands/tablecmds.c:14024 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の継承された制約\"%1$s\"を削除できません" -#: commands/tablecmds.c:12527 +#: commands/tablecmds.c:14076 #, c-format -msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" -msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません、スキップします" +msgid "column \"%s\" is in a primary key" +msgstr "列\"%s\"はプライマリキーで使用しています" + +#: commands/tablecmds.c:14084 +#, c-format +msgid "column \"%s\" is in index used as replica identity" +msgstr "列\"%s\"は複製識別として使用中のインデックスに含まれています" -#: commands/tablecmds.c:12702 +#: commands/tablecmds.c:14317 #, c-format msgid "cannot alter column type of typed table" msgstr "型付けされたテーブルの列の型を変更できません" -#: commands/tablecmds.c:12729 +#: commands/tablecmds.c:14345 +#, c-format +msgid "cannot specify USING when altering type of generated column" +msgstr "生成列の型変更の際にはUSINGを指定することはできません" + +#: commands/tablecmds.c:14346 commands/tablecmds.c:19726 commands/tablecmds.c:19819 commands/trigger.c:659 rewrite/rewriteHandler.c:949 rewrite/rewriteHandler.c:984 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "列\"%s\"は生成カラムです。" + +#: commands/tablecmds.c:14357 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "継承される列\"%s\"を変更できません" -#: commands/tablecmds.c:12738 +#: commands/tablecmds.c:14366 #, 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:14421 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"に対するUSING句の結果は自動的に%s型に型変換できません" -#: commands/tablecmds.c:12791 +#: commands/tablecmds.c:14424 #, c-format msgid "You might need to add an explicit cast." msgstr "必要に応じて明示的な型変換を追加してください。" -#: commands/tablecmds.c:12795 +#: commands/tablecmds.c:14428 #, 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:14432 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "必要に応じて\"USING %s::%s\"を追加してください。" -#: commands/tablecmds.c:12897 +#: commands/tablecmds.c:14532 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の継承列\"%1$s\"は変更できません" -#: commands/tablecmds.c:12926 +#: commands/tablecmds.c:14561 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING式が行全体テーブル参照を含んでいます。" -#: commands/tablecmds.c:12937 +#: commands/tablecmds.c:14572 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "継承される列\"%s\"の型を子テーブルで変更しなければなりません" -#: commands/tablecmds.c:13062 +#: commands/tablecmds.c:14697 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "列\"%s\"の型を2回変更することはできません" -#: commands/tablecmds.c:13100 +#: commands/tablecmds.c:14735 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "カラム\"%s\"に対する生成式は自動的に%s型にキャストできません" -#: commands/tablecmds.c:13105 +#: commands/tablecmds.c:14740 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"のデフォルト値を自動的に%s型にキャストできません" -#: commands/tablecmds.c:13409 +#: commands/tablecmds.c:15044 #, 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:15045 commands/tablecmds.c:15060 commands/tablecmds.c:15080 commands/tablecmds.c:15099 commands/tablecmds.c:15158 #, c-format msgid "%s depends on column \"%s\"" msgstr "%sは列\"%s\"に依存しています" -#: commands/tablecmds.c:13424 +#: commands/tablecmds.c:15059 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ビューまたはルールで使用される列の型は変更できません" -#: commands/tablecmds.c:13444 +#: commands/tablecmds.c:15079 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "トリガー定義で使用される列の型は変更できません" -#: commands/tablecmds.c:13463 +#: commands/tablecmds.c:15098 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ポリシ定義で使用されている列の型は変更できません" -#: commands/tablecmds.c:13494 +#: commands/tablecmds.c:15129 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "生成カラムで使用される列の型は変更できません" -#: commands/tablecmds.c:13495 +#: commands/tablecmds.c:15130 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "カラム\"%s\"は生成カラム\"%s\"で使われています。" -#: commands/tablecmds.c:13522 +#: commands/tablecmds.c:15157 #, 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:16008 commands/tablecmds.c:16020 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "インデックス\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:14359 commands/tablecmds.c:14371 +#: commands/tablecmds.c:16010 commands/tablecmds.c:16022 #, c-format msgid "Change the ownership of the index's table instead." msgstr "代わりにインデックスのテーブルの所有者を変更してください。" -#: commands/tablecmds.c:14385 +#: commands/tablecmds.c:16036 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "シーケンス\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:14410 +#: commands/tablecmds.c:16061 #, c-format msgid "cannot change owner of relation \"%s\"" msgstr "リレーション\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:14877 +#: commands/tablecmds.c:16528 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "SET TABLESPACEサブコマンドを複数指定できません" -#: commands/tablecmds.c:14954 +#: commands/tablecmds.c:16607 #, c-format msgid "cannot set options for relation \"%s\"" msgstr "リレーション\"%s\"のオプションは設定できません" -#: commands/tablecmds.c:14988 commands/view.c:440 +#: commands/tablecmds.c:16641 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:16894 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "テーブルスペースにはテーブル、インデックスおよび実体化ビューしかありません" -#: commands/tablecmds.c:15250 +#: commands/tablecmds.c:16906 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "pg_globalテーブルスペースとの間のリレーションの移動はできません" -#: commands/tablecmds.c:15342 +#: commands/tablecmds.c:16998 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "リレーション\"%s.%s\"のロックが獲得できなかったため中断します" -#: commands/tablecmds.c:15358 +#: commands/tablecmds.c:17014 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "テーブルスペース\"%s\"には合致するリレーションはありませんでした" -#: commands/tablecmds.c:15480 +#: commands/tablecmds.c:17136 #, c-format msgid "cannot change inheritance of typed table" msgstr "型付けされたテーブルの継承を変更できません" -#: commands/tablecmds.c:15485 commands/tablecmds.c:15985 +#: commands/tablecmds.c:17141 commands/tablecmds.c:17725 #, c-format msgid "cannot change inheritance of a partition" msgstr "パーティションの継承は変更できません" -#: commands/tablecmds.c:15490 +#: commands/tablecmds.c:17146 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "パーティションテーブルの継承は変更できません" -#: commands/tablecmds.c:15536 +#: commands/tablecmds.c:17193 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "他のセッションの一時テーブルを継承できません" -#: commands/tablecmds.c:15549 +#: commands/tablecmds.c:17206 #, c-format msgid "cannot inherit from a partition" msgstr "パーティションからの継承はできません" -#: commands/tablecmds.c:15571 commands/tablecmds.c:18453 +#: commands/tablecmds.c:17228 commands/tablecmds.c:20239 #, c-format msgid "circular inheritance not allowed" msgstr "循環継承を行うことはできません" -#: commands/tablecmds.c:15572 commands/tablecmds.c:18454 +#: commands/tablecmds.c:17229 commands/tablecmds.c:20240 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\"はすでに\"%s\"の子です" -#: commands/tablecmds.c:15585 +#: commands/tablecmds.c:17242 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "トリガ\"%s\"によってテーブル\"%s\"が継承子テーブルになることができません" -#: commands/tablecmds.c:15587 +#: commands/tablecmds.c:17244 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "遷移テーブルを使用したROWトリガは継承関係ではサポートされていません。" -#: commands/tablecmds.c:15776 +#: commands/tablecmds.c:17445 commands/tablecmds.c:17694 #, c-format -msgid "column \"%s\" in child table must be marked NOT NULL" -msgstr "子テーブルの列\"%s\"はNOT NULLである必要があります" +msgid "column \"%s\" in child table \"%s\" must be marked NOT NULL" +msgstr "子テーブル\"%2$s\"の列\"%1$s\"は非NULLに設定されていません" -#: commands/tablecmds.c:15785 +#: commands/tablecmds.c:17455 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "子テーブルの列\"%s\"は生成列である必要があります" -#: commands/tablecmds.c:15789 +#: commands/tablecmds.c:17459 #, c-format msgid "column \"%s\" in child table must not be a generated column" msgstr "子テーブルの列\"%s\"は生成列であってはなりません" -#: commands/tablecmds.c:15827 +#: commands/tablecmds.c:17505 #, c-format msgid "child table is missing column \"%s\"" msgstr "子テーブルには列\"%s\"がありません" -#: commands/tablecmds.c:15908 +#: commands/tablecmds.c:17622 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "子テーブル\"%s\"では検査制約\"%s\"に異なった定義がされています" -#: commands/tablecmds.c:15915 +#: commands/tablecmds.c:17631 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "制約\"%s\"は子テーブル\"%s\"上の継承されない制約と競合します" -#: commands/tablecmds.c:15925 +#: commands/tablecmds.c:17642 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "制約\"%s\"は子テーブル\"%s\"のNOT VALID制約と衝突しています" -#: commands/tablecmds.c:15963 +#: commands/tablecmds.c:17653 +#, c-format +msgid "constraint \"%s\" conflicts with NOT ENFORCED constraint on child table \"%s\"" +msgstr "制約\"%s\"は子テーブル\"%s\"のNOT ENFORCED制約と衝突しています" + +#: commands/tablecmds.c:17702 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "子テーブルには制約\"%s\"がありません" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:17789 #, 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:17818 commands/tablecmds.c:17866 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "リレーション\"%s\"はリレーション\"%s\"のパーティション子テーブルではありません" -#: commands/tablecmds.c:16130 +#: commands/tablecmds.c:17872 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "リレーション\"%s\"はリレーション\"%s\"の親ではありません" -#: commands/tablecmds.c:16357 +#: commands/tablecmds.c:18143 #, c-format msgid "typed tables cannot inherit" msgstr "型付けされたテーブルは継承できません" -#: commands/tablecmds.c:16387 +#: commands/tablecmds.c:18173 #, c-format msgid "table is missing column \"%s\"" msgstr "テーブルには列\"%s\"がありません" -#: commands/tablecmds.c:16398 +#: commands/tablecmds.c:18184 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "テーブルには列\"%s\"がありますが型は\"%s\"を必要としています" -#: commands/tablecmds.c:16407 +#: commands/tablecmds.c:18193 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "テーブル\"%s\"では列\"%s\"の型が異なっています" -#: commands/tablecmds.c:16421 +#: commands/tablecmds.c:18207 #, c-format msgid "table has extra column \"%s\"" msgstr "テーブルに余分な列\"%s\"があります" -#: commands/tablecmds.c:16473 +#: commands/tablecmds.c:18259 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\"は型付けされたテーブルではありません" -#: commands/tablecmds.c:16647 +#: commands/tablecmds.c:18439 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "非ユニークインデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:16653 +#: commands/tablecmds.c:18445 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "一意性を即時検査しないインデックス\"%s\"は複製識別には使用できません" -#: commands/tablecmds.c:16659 +#: commands/tablecmds.c:18451 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "式インデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:16665 +#: commands/tablecmds.c:18457 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "部分インデックス\"%s\"を複製識別としては使用できません" -#: commands/tablecmds.c:16682 +#: commands/tablecmds.c:18474 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "列%2$dはシステム列であるためインデックス\"%1$s\"は複製識別には使えません" -#: commands/tablecmds.c:16689 +#: commands/tablecmds.c:18481 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "列\"%2$s\"はnull可であるためインデックス\"%1$s\"は複製識別には使えません" -#: commands/tablecmds.c:16941 +#: commands/tablecmds.c:18730 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "テーブル\"%s\"は一時テーブルであるため、ログ出力設定を変更できません" -#: commands/tablecmds.c:16965 +#: commands/tablecmds.c:18754 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "テーブル\"%s\"はパブリケーションの一部であるため、UNLOGGEDに変更できません" -#: commands/tablecmds.c:16967 +#: commands/tablecmds.c:18756 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "UNLOGGEDリレーションはレプリケーションできません。" -#: commands/tablecmds.c:17012 +#: commands/tablecmds.c:18801 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "テーブル\"%s\"はUNLOGGEDテーブル\"%s\"を参照しているためLOGGEDには設定できません" -#: commands/tablecmds.c:17022 +#: commands/tablecmds.c:18811 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "テーブル\"%s\"はLOGGEDテーブル\"%s\"を参照しているためUNLOGGEDには設定できません" -#: commands/tablecmds.c:17080 +#: commands/tablecmds.c:18875 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "所有するシーケンスを他のスキーマに移動することができません" -#: commands/tablecmds.c:17185 +#: commands/tablecmds.c:18983 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "リレーション\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/tablecmds.c:17606 +#: commands/tablecmds.c:19408 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\"はテーブルや実体化ビューではありません" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:19561 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\"は複合型ではありません" -#: commands/tablecmds.c:17789 +#: commands/tablecmds.c:19591 #, c-format msgid "cannot change schema of index \"%s\"" msgstr "インデックス\"%s\"のスキーマを変更できません" -#: commands/tablecmds.c:17791 commands/tablecmds.c:17805 +#: commands/tablecmds.c:19593 commands/tablecmds.c:19607 #, c-format msgid "Change the schema of the table instead." msgstr "代わりにこのテーブルのスキーマを変更してください。" -#: commands/tablecmds.c:17795 +#: commands/tablecmds.c:19597 #, c-format msgid "cannot change schema of composite type \"%s\"" msgstr "複合型%sのスキーマは変更できません" -#: commands/tablecmds.c:17803 +#: commands/tablecmds.c:19605 #, c-format msgid "cannot change schema of TOAST table \"%s\"" msgstr "TOASTテーブル\"%s\"のスキーマは変更できません" -#: commands/tablecmds.c:17835 +#: commands/tablecmds.c:19637 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "\"list\"パーティションストラテジは2つ以上の列に対しては使えません" -#: commands/tablecmds.c:17901 +#: commands/tablecmds.c:19703 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "パーティションキーに指定されている列\"%s\"は存在しません" -#: commands/tablecmds.c:17909 +#: commands/tablecmds.c:19711 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "パーティションキーでシステム列\"%s\"は使用できません" -#: commands/tablecmds.c:17920 commands/tablecmds.c:18010 +#: commands/tablecmds.c:19725 commands/tablecmds.c:19818 #, 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:19798 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "パーティションキー式はシステム列への参照を含むことができません" -#: commands/tablecmds.c:18040 +#: commands/tablecmds.c:19848 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "パーティションキー式で使われる関数はIMMUTABLE指定されている必要があります" -#: commands/tablecmds.c:18049 +#: commands/tablecmds.c:19857 #, c-format msgid "cannot use constant expression as partition key" msgstr "定数式をパーティションキーとして使うことはできません" -#: commands/tablecmds.c:18070 +#: commands/tablecmds.c:19878 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "パーティション式で使用する照合順序を特定できませんでした" -#: commands/tablecmds.c:18105 +#: commands/tablecmds.c:19913 #, 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:19919 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "btree演算子クラスを指定するか、もしくはこのデータ型にデフォルトのbtree演算子クラスを定義するかする必要があります。" -#: commands/tablecmds.c:18393 +#: commands/tablecmds.c:20179 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\"はすでパーティションです" -#: commands/tablecmds.c:18399 +#: commands/tablecmds.c:20185 #, c-format msgid "cannot attach a typed table as partition" msgstr "型付けされたテーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:18415 +#: commands/tablecmds.c:20201 #, c-format msgid "cannot attach inheritance child as partition" msgstr "継承子テーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:18429 +#: commands/tablecmds.c:20215 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "継承親テーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:18463 +#: commands/tablecmds.c:20249 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "一時リレーションを永続リレーション \"%s\" のパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:18471 +#: commands/tablecmds.c:20257 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "永続リレーションを一時リレーション\"%s\"のパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:18479 +#: commands/tablecmds.c:20265 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "他セッションの一時リレーションのパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:18486 +#: commands/tablecmds.c:20272 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "他セッションの一時リレーションにパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:18506 +#: commands/tablecmds.c:20292 #, c-format msgid "table \"%s\" being attached contains an identity column \"%s\"" msgstr "アタッチ対象のテーブル\"%s\"には識別列\"%s\"が含まれています" -#: commands/tablecmds.c:18508 +#: commands/tablecmds.c:20294 #, c-format msgid "The new partition may not contain an identity column." msgstr "新しいパーティションは識別列を含むことはできません" -#: commands/tablecmds.c:18516 +#: commands/tablecmds.c:20302 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "テーブル\"%1$s\"は親テーブル\"%3$s\"にない列\"%2$s\"を含んでいます" -#: commands/tablecmds.c:18519 +#: commands/tablecmds.c:20305 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "新しいパーティションは親に存在する列のみを含むことができます。" -#: commands/tablecmds.c:18531 +#: commands/tablecmds.c:20317 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "トリガ\"%s\"のため、テーブル\"%s\"はパーティション子テーブルにはなれません" -#: commands/tablecmds.c:18533 +#: commands/tablecmds.c:20319 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "遷移テーブルを使用するROWトリガはパーティションではサポートされません。" -#: commands/tablecmds.c:18694 +#: commands/tablecmds.c:20501 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "外部テーブル\"%s\"はパーティションテーブル\"%s\"の子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:18697 +#: commands/tablecmds.c:20504 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "パーティション親テーブル\"%s\"はユニークインデックスを持っています。" -#: commands/tablecmds.c:19019 +#: commands/tablecmds.c:20827 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "デフォルトパーティションを持つパーティションは並列的に取り外しはできません" -#: commands/tablecmds.c:19128 +#: commands/tablecmds.c:20936 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "パーティション親テーブル\"%s\"には CREATE INDEX CONCURRENTLY は実行できません" -#: commands/tablecmds.c:19134 +#: commands/tablecmds.c:20942 #, 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:21565 commands/tablecmds.c:21585 commands/tablecmds.c:21606 commands/tablecmds.c:21625 commands/tablecmds.c:21674 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "インデックス\"%s\"をインデックス\"%s\"の子インデックスとしてアタッチすることはできません" -#: commands/tablecmds.c:19664 +#: commands/tablecmds.c:21568 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "インデックス\"%s\"はすでに別のインデックスにアタッチされています。" -#: commands/tablecmds.c:19684 +#: commands/tablecmds.c:21588 #, 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:21609 #, c-format msgid "The index definitions do not match." msgstr "インデックス定義が合致しません。" -#: commands/tablecmds.c:19724 +#: commands/tablecmds.c:21628 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "インデックス\"%s\"はテーブル\"%s\"の制約に属していますが、インデックス\"%s\"には制約がありません。" -#: commands/tablecmds.c:19766 +#: commands/tablecmds.c:21677 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "子テーブル\"%s\"にはすでに他のインデックスがアタッチされています。" -#: commands/tablecmds.c:20002 +#: commands/tablecmds.c:21800 +#, c-format +msgid "invalid primary key definition" +msgstr "不正な主キー定義" + +#: commands/tablecmds.c:21801 +#, c-format +msgid "Column \"%s\" of relation \"%s\" is not marked NOT NULL." +msgstr "リレーション\"%2$s\"の列\"%1$s\"は非NULLに設定されていません。" + +#: commands/tablecmds.c:21936 #, c-format msgid "column data type %s does not support compression" msgstr "列データ型%sは圧縮をサポートしていません" -#: commands/tablecmds.c:20009 +#: commands/tablecmds.c:21943 #, c-format msgid "invalid compression method \"%s\"" msgstr "無効な圧縮方式\"%s\"" -#: commands/tablecmds.c:20035 +#: commands/tablecmds.c:21969 #, c-format msgid "invalid storage type \"%s\"" msgstr "不正な格納タイプ\"%s\"" -#: commands/tablecmds.c:20045 +#: commands/tablecmds.c:21979 #, 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" @@ -11631,277 +11863,272 @@ msgstr "テーブル空間%u用のディレクトリを削除することがで msgid "You can remove the directories manually if necessary." msgstr "必要ならば手作業でこのディレクトリを削除することができます" -#: commands/trigger.c:225 commands/trigger.c:236 +#: commands/trigger.c:227 commands/trigger.c:238 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\"はテーブルです" -#: commands/trigger.c:227 commands/trigger.c:238 +#: commands/trigger.c:229 commands/trigger.c:240 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "テーブルは INSTEAD OF トリガーを持つことができません" -#: commands/trigger.c:259 +#: commands/trigger.c:261 #, c-format msgid "\"%s\" is a partitioned table" msgstr "\"%s\"はパーティション親テーブルです" -#: commands/trigger.c:261 +#: commands/trigger.c:263 #, c-format msgid "ROW triggers with transition tables are not supported on partitioned tables." msgstr "遷移テーブルを使用するROWトリガはパーティション親テーブルではサポートされません。" -#: commands/trigger.c:273 commands/trigger.c:280 commands/trigger.c:444 +#: commands/trigger.c:275 commands/trigger.c:282 commands/trigger.c:446 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\"はビューです" -#: commands/trigger.c:275 +#: commands/trigger.c:277 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "ビューは行レベルの BEFORE / AFTER トリガーを持つことができません" -#: commands/trigger.c:282 +#: commands/trigger.c:284 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "ビューは TRUNCATE トリガーを持つことができません" -#: commands/trigger.c:290 commands/trigger.c:302 commands/trigger.c:437 +#: commands/trigger.c:292 commands/trigger.c:304 commands/trigger.c:439 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\"は外部テーブルです" -#: commands/trigger.c:292 +#: commands/trigger.c:294 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "外部テーブルは INSTEAD OF トリガを持つことができません。" -#: commands/trigger.c:304 +#: commands/trigger.c:306 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "外部テーブルは制約トリガを持つことができません。" -#: commands/trigger.c:309 commands/trigger.c:1325 commands/trigger.c:1432 +#: commands/trigger.c:311 commands/trigger.c:1330 commands/trigger.c:1437 #, c-format msgid "relation \"%s\" cannot have triggers" msgstr "リレーション\"%s\"にはトリガーを設定できません" -#: commands/trigger.c:380 +#: commands/trigger.c:382 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "TRUNCATE FOR EACH ROW トリガはサポートされていません" -#: commands/trigger.c:388 +#: commands/trigger.c:390 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "INSTEAD OF トリガーは FOR EACH ROW でなければなりません" -#: commands/trigger.c:392 +#: commands/trigger.c:394 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "INSTEAD OF トリガーは WHEN 条件を持つことができません" -#: commands/trigger.c:396 +#: commands/trigger.c:398 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "INSTEAD OF トリガーは列リストを持つことができません" -#: commands/trigger.c:425 +#: commands/trigger.c:427 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "REFERENCING句でのROW変数の命名はサポートされていません" -#: commands/trigger.c:426 +#: commands/trigger.c:428 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "遷移テーブルを指定するには OLD TABLE または NEW TABLE を使ってください" -#: commands/trigger.c:439 +#: commands/trigger.c:441 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "外部テーブルに対するトリガは遷移テーブルを持てません。" -#: commands/trigger.c:446 +#: commands/trigger.c:448 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "ビューに対するトリガは遷移テーブルを持てません。" -#: commands/trigger.c:462 +#: commands/trigger.c:464 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "遷移テーブルを使用するROWトリガはパーティションではサポートされません" -#: commands/trigger.c:466 +#: commands/trigger.c:468 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "遷移テーブルをもったROWトリガは継承子テーブルではサポートされません" -#: commands/trigger.c:472 +#: commands/trigger.c:474 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "遷移テーブル名はAFTERトリガでの指定可能です" -#: commands/trigger.c:477 +#: commands/trigger.c:479 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "遷移テーブルを使用するTRUNCATEトリガはサポートされていません" -#: commands/trigger.c:494 +#: commands/trigger.c:496 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "2つ以上のイベントに対するトリガには遷移テーブルは指定できません" -#: commands/trigger.c:505 +#: commands/trigger.c:507 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "列リストを指定したトリガに対しては遷移テーブルは指定できません" -#: commands/trigger.c:522 +#: commands/trigger.c:524 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE はINSERTまたはUPDATEトリガに対してのみ指定可能です" -#: commands/trigger.c:527 +#: commands/trigger.c:529 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE は複数回指定できません" -#: commands/trigger.c:537 +#: commands/trigger.c:539 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE はDELETEまたはUPDATEトリガに対してのみ指定可能です" -#: commands/trigger.c:542 +#: commands/trigger.c:544 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE は複数回指定できません" -#: commands/trigger.c:552 +#: commands/trigger.c:554 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "OLD TABLE の名前と NEW TABLE の名前は同じにはできません" -#: commands/trigger.c:616 commands/trigger.c:629 +#: commands/trigger.c:618 commands/trigger.c:631 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "ステートメントトリガーの WHEN 条件では列の値を参照できません" -#: commands/trigger.c:621 +#: commands/trigger.c:623 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "INSERT トリガーの WHEN 条件では OLD 値を参照できません" -#: commands/trigger.c:634 +#: commands/trigger.c:636 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "DELETE トリガーの WHEN 条件では NEW 値を参照できません" -#: commands/trigger.c:639 +#: commands/trigger.c:641 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "BEFORE トリガーの WHEN 条件では NEW システム列を参照できません" -#: commands/trigger.c:647 commands/trigger.c:655 +#: commands/trigger.c:650 commands/trigger.c:658 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "BEFORE トリガーの WHEN 条件では NEW の生成列を参照できません" -#: commands/trigger.c:648 +#: commands/trigger.c:651 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "行全体参照が使われていてかつ、このテーブルは生成カラムを含んでいます。" -#: commands/trigger.c:763 commands/trigger.c:1607 +#: commands/trigger.c:766 commands/trigger.c:1613 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "リレーション\"%2$s\"用のトリガ\"%1$s\"はすでに存在します" -#: commands/trigger.c:776 +#: commands/trigger.c:779 #, c-format msgid "trigger \"%s\" for relation \"%s\" is an internal or a child trigger" msgstr "リレーション\"%2$s\"のトリガー\"%1$s\"は内部トリガーまたは子トリガーです" -#: commands/trigger.c:795 +#: commands/trigger.c:798 #, c-format msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" msgstr "リレーション\"%2$s\"のトリガー\"%1$s\"は制約トリガーです" -#: commands/trigger.c:1397 commands/trigger.c:1550 commands/trigger.c:1831 +#: commands/trigger.c:1402 commands/trigger.c:1556 commands/trigger.c:1837 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"のトリガ\"%1$s\"は存在しません" -#: commands/trigger.c:1522 +#: commands/trigger.c:1528 #, c-format msgid "cannot rename trigger \"%s\" on table \"%s\"" msgstr "テーブル\"%2$s\"のトリガー\"%1$s\"の名前は変更できません" -#: commands/trigger.c:1524 +#: commands/trigger.c:1530 #, c-format msgid "Rename the trigger on the partitioned table \"%s\" instead." msgstr "代わりにパーティション親テーブル\"%s\"でこのトリガーの名前を変更してください。" -#: commands/trigger.c:1624 +#: commands/trigger.c:1630 #, c-format msgid "renamed trigger \"%s\" on relation \"%s\"" msgstr "リレーション\"%2$s\"のトリガー\"%1$s\"の名前を変更しました" -#: commands/trigger.c:1770 +#: commands/trigger.c:1776 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "権限がありません: \"%s\"はシステムトリガです" -#: commands/trigger.c:2379 +#: commands/trigger.c:2385 #, c-format msgid "trigger function %u returned null value" msgstr "トリガ関数%uはNULL値を返しました" -#: commands/trigger.c:2439 commands/trigger.c:2657 commands/trigger.c:2910 commands/trigger.c:3263 +#: commands/trigger.c:2445 commands/trigger.c:2665 commands/trigger.c:2918 commands/trigger.c:3273 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENTトリガは値を返すことができません" -#: commands/trigger.c:2515 +#: commands/trigger.c:2523 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "BEFORE FOR EACH ROWトリガの実行では、他のパーティションへの行の移動はサポートされていません" -#: commands/trigger.c:2516 +#: commands/trigger.c:2524 #, c-format 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:3351 executor/nodeModifyTable.c:1665 executor/nodeModifyTable.c:1739 executor/nodeModifyTable.c:2546 executor/nodeModifyTable.c:2636 executor/nodeModifyTable.c:3308 executor/nodeModifyTable.c:3478 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "他の行への変更を伝搬させるためにBEFOREトリガではなくAFTERトリガの使用を検討してください" -#: commands/trigger.c: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:3392 executor/nodeLockRows.c:228 executor/nodeLockRows.c:237 executor/nodeModifyTable.c:368 executor/nodeModifyTable.c:1681 executor/nodeModifyTable.c:2562 executor/nodeModifyTable.c:2787 #, 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:3400 executor/nodeModifyTable.c:1771 executor/nodeModifyTable.c:2653 executor/nodeModifyTable.c:2811 executor/nodeModifyTable.c:3326 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "削除が同時に行われたためアクセスの直列化ができませんでした" -#: commands/trigger.c:4597 +#: commands/trigger.c:4635 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "セキュリティー制限操作中は、遅延トリガーは発火させられません" -#: commands/trigger.c:5780 +#: commands/trigger.c:5831 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "制約\"%s\"は遅延可能ではありません" -#: commands/trigger.c:5803 +#: commands/trigger.c:5854 #, c-format msgid "constraint \"%s\" does not exist" msgstr "制約\"%s\"は存在しません" @@ -12011,7 +12238,7 @@ msgstr "基本型を作成するにはスーパーユーザーである必要が msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." msgstr "最初に型をシェル型として生成して、続いてI/O関数を生成した後に完全な CREATE TYPE を実行してください。" -#: commands/typecmds.c:331 commands/typecmds.c:1460 commands/typecmds.c:4480 +#: commands/typecmds.c:331 commands/typecmds.c:1486 commands/typecmds.c:4471 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "型の属性\"%s\"は不明です" @@ -12031,7 +12258,7 @@ msgstr "%sを配列要素の型にすることはできません" msgid "alignment \"%s\" not recognized" msgstr "アライメント\"%s\"は不明です" -#: commands/typecmds.c:454 commands/typecmds.c:4354 +#: commands/typecmds.c:454 commands/typecmds.c:4345 #, c-format msgid "storage \"%s\" not recognized" msgstr "格納方式\"%s\"は不明です" @@ -12061,332 +12288,347 @@ msgstr "添字処理関数なしで要素型を指定することはできませ msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\"はドメインの基本型として無効です" -#: commands/typecmds.c:883 +#: commands/typecmds.c:885 #, c-format msgid "multiple default expressions" msgstr "デフォルト式が複数あります" -#: commands/typecmds.c:946 commands/typecmds.c:955 +#: commands/typecmds.c:945 commands/typecmds.c:960 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "NULL制約とNOT NULL制約が競合しています" -#: commands/typecmds.c:971 +#: commands/typecmds.c:950 +#, c-format +msgid "not-null constraints for domains cannot be marked NO INHERIT" +msgstr "ドメインに対する非NULL制約はNO INHERIT指定できません" + +#: commands/typecmds.c:977 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "ドメインに対する検査制約はNO INHERITとマークすることができません" -#: commands/typecmds.c:980 commands/typecmds.c:2940 +#: commands/typecmds.c:988 #, c-format msgid "unique constraints not possible for domains" msgstr "ドメインでは一意性制約は使用できません" -#: commands/typecmds.c:986 commands/typecmds.c:2946 +#: commands/typecmds.c:995 #, c-format msgid "primary key constraints not possible for domains" msgstr "ドメインではプライマリキー制約はできません" -#: commands/typecmds.c:992 commands/typecmds.c:2952 +#: commands/typecmds.c:1002 #, c-format msgid "exclusion constraints not possible for domains" msgstr "ドメインでは排除制約は使用できません" -#: commands/typecmds.c:998 commands/typecmds.c:2958 +#: commands/typecmds.c:1009 #, c-format msgid "foreign key constraints not possible for domains" msgstr "ドメイン用の外部キー制約はできません" -#: commands/typecmds.c:1007 commands/typecmds.c:2967 +#: commands/typecmds.c:1019 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "ドメインでは制約遅延の指定はサポートしていません" -#: commands/typecmds.c:1327 utils/cache/typcache.c:2570 +#: commands/typecmds.c:1027 +#, c-format +msgid "specifying GENERATED not supported for domains" +msgstr "ドメインではGENERATEDの指定はサポートしていません" + +#: commands/typecmds.c:1035 +#, c-format +msgid "specifying constraint enforceability not supported for domains" +msgstr "ドメインでは制約の強制性指定はサポートしていません" + +#: commands/typecmds.c:1353 utils/cache/typcache.c:2745 #, c-format msgid "%s is not an enum" msgstr "%s は数値ではありません" -#: commands/typecmds.c:1468 +#: commands/typecmds.c:1494 #, c-format msgid "type attribute \"subtype\" is required" msgstr "型の属性\"subtype\"が必要です" -#: commands/typecmds.c:1473 +#: commands/typecmds.c:1499 #, c-format msgid "range subtype cannot be %s" msgstr "範囲の派生元型を%sにすることはできません" -#: commands/typecmds.c:1492 +#: commands/typecmds.c:1518 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "範囲の照合順序が指定されましたが、派生もと型が照合順序をサポートしていません" -#: commands/typecmds.c:1502 +#: commands/typecmds.c:1528 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "事前にシェル型を生成せずに正規化関数を指定することはできません" -#: commands/typecmds.c:1503 +#: commands/typecmds.c:1529 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." msgstr "最初に型をシェル型として生成して、続いて正規化関数を生成した後に完全な CREATE TYPE を実行してください。" -#: commands/typecmds.c:1975 +#: commands/typecmds.c:2005 #, c-format msgid "type input function %s has multiple matches" msgstr "型の入力関数%sが複数合致します" -#: commands/typecmds.c:1993 +#: commands/typecmds.c:2023 #, c-format msgid "type input function %s must return type %s" msgstr "型の入力関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2009 +#: commands/typecmds.c:2039 #, c-format msgid "type input function %s should not be volatile" msgstr "型の入力関数%sはvolatileであってはなりません" -#: commands/typecmds.c:2037 +#: commands/typecmds.c:2067 #, c-format msgid "type output function %s must return type %s" msgstr "型の出力関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2044 +#: commands/typecmds.c:2074 #, c-format msgid "type output function %s should not be volatile" msgstr "型の出力関数%sはvolatileであってはなりません" -#: commands/typecmds.c:2073 +#: commands/typecmds.c:2103 #, c-format msgid "type receive function %s has multiple matches" msgstr "型の受信関数 %s が複数合致しました" -#: commands/typecmds.c:2091 +#: commands/typecmds.c:2121 #, c-format msgid "type receive function %s must return type %s" msgstr "型の受信関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2098 +#: commands/typecmds.c:2128 #, c-format msgid "type receive function %s should not be volatile" msgstr "型の受信関数%sはvolatileであってはなりません" -#: commands/typecmds.c:2126 +#: commands/typecmds.c:2156 #, c-format msgid "type send function %s must return type %s" msgstr "型の送信関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2133 +#: commands/typecmds.c:2163 #, c-format msgid "type send function %s should not be volatile" msgstr "型の送信関数%sはvolatileであってはなりません" -#: commands/typecmds.c:2160 +#: commands/typecmds.c:2190 #, c-format msgid "typmod_in function %s must return type %s" msgstr "typmod_in関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2167 +#: commands/typecmds.c:2197 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "型修正子の入力関数%sはvolatileであってはなりません" -#: commands/typecmds.c:2194 +#: commands/typecmds.c:2224 #, c-format msgid "typmod_out function %s must return type %s" msgstr "typmod_out関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2201 +#: commands/typecmds.c:2231 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "型修正子の出力関数%sはvolatileであってはなりません" -#: commands/typecmds.c:2228 +#: commands/typecmds.c:2258 #, c-format msgid "type analyze function %s must return type %s" msgstr "型のANALYZE関数%sは%s型を返す必要があります" -#: commands/typecmds.c:2257 +#: commands/typecmds.c:2287 #, c-format msgid "type subscripting function %s must return type %s" msgstr "型の添字処理関数%sは型%sを返す必要があります" -#: commands/typecmds.c:2267 +#: commands/typecmds.c:2297 #, c-format msgid "user-defined types cannot use subscripting function %s" msgstr "ユーザー定義型は添字処理関数%sを使用できません" -#: commands/typecmds.c:2313 +#: commands/typecmds.c:2343 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "この範囲型に演算子クラスを指定するか、派生元の型でデフォルト演算子クラスを定義する必要があります。" -#: commands/typecmds.c:2344 +#: commands/typecmds.c:2374 #, c-format msgid "range canonical function %s must return range type" msgstr "範囲の正規化関数 %s は範囲型を返す必要があります" -#: commands/typecmds.c:2350 +#: commands/typecmds.c:2380 #, c-format msgid "range canonical function %s must be immutable" msgstr "範囲の正規化関数 %s は不変関数でなければなりません" -#: commands/typecmds.c:2386 +#: commands/typecmds.c:2416 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "範囲の派生元の型の差分関数 %s は %s型を返す必要があります" -#: commands/typecmds.c:2393 +#: commands/typecmds.c:2423 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "範囲の派生元の型の差分関数 %s は不変関数である必要があります" -#: commands/typecmds.c:2420 +#: commands/typecmds.c:2450 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_typeの配列型OIDが設定されていません" -#: commands/typecmds.c:2453 +#: commands/typecmds.c:2483 #, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_typeの複範囲型OIDの値が設定されていません" -#: commands/typecmds.c:2486 +#: commands/typecmds.c:2516 #, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_typeの複範囲配列型OIDの値が設定されていません" -#: commands/typecmds.c:2868 commands/typecmds.c:3093 +#: commands/typecmds.c:2898 commands/typecmds.c:3080 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"は存在しません" -#: commands/typecmds.c:2872 +#: commands/typecmds.c:2902 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"は存在しません、スキップします" -#: commands/typecmds.c:3100 +#: commands/typecmds.c:3087 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"は検査制約ではありません" -#: commands/typecmds.c:3180 +#: commands/typecmds.c:3167 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "テーブル\"%2$s\"の列\"%1$s\"にNULL値があります" -#: commands/typecmds.c:3269 +#: commands/typecmds.c:3256 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "テーブル\"%2$s\"の列\"%1$s\"に新しい制約に違反する値があります" -#: commands/typecmds.c:3498 commands/typecmds.c:3772 commands/typecmds.c:3857 commands/typecmds.c:4073 +#: commands/typecmds.c:3485 commands/typecmds.c:3763 commands/typecmds.c:3848 commands/typecmds.c:4064 #, c-format msgid "%s is not a domain" msgstr "%s はドメインではありません" -#: commands/typecmds.c:3532 commands/typecmds.c:3686 +#: commands/typecmds.c:3519 commands/typecmds.c:3675 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"はすでに存在します" -#: commands/typecmds.c:3583 +#: commands/typecmds.c:3570 #, c-format msgid "cannot use table references in domain check constraint" msgstr "ドメインの検査制約ではテーブル参照を使用できません" -#: commands/typecmds.c:3784 commands/typecmds.c:3869 commands/typecmds.c:4223 +#: commands/typecmds.c:3775 commands/typecmds.c:3860 commands/typecmds.c:4214 #, c-format msgid "%s is a table's row type" msgstr "%sはテーブルの行型です" -#: commands/typecmds.c:3794 commands/typecmds.c:3879 commands/typecmds.c:4121 +#: commands/typecmds.c:3785 commands/typecmds.c:3870 commands/typecmds.c:4112 #, c-format msgid "cannot alter array type %s" msgstr "配列型%sを変更できません" -#: commands/typecmds.c:3796 commands/typecmds.c:3881 commands/typecmds.c:4123 +#: commands/typecmds.c:3787 commands/typecmds.c:3872 commands/typecmds.c:4114 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "型%sを変更することができます。これは同時にその配列型も変更します。" -#: commands/typecmds.c:3892 +#: commands/typecmds.c:3883 #, c-format msgid "cannot alter multirange type %s" msgstr "複範囲型%sを変更できません" -#: commands/typecmds.c:3895 +#: commands/typecmds.c:3886 #, c-format msgid "You can alter type %s, which will alter the multirange type as well." msgstr "型%sを変更することができます。これは同時にその複範囲型も変更します。" -#: commands/typecmds.c:4202 +#: commands/typecmds.c:4193 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "型\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/typecmds.c:4382 +#: commands/typecmds.c:4373 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "型の格納方式をPLAINには変更できません" -#: commands/typecmds.c:4475 +#: commands/typecmds.c:4466 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "型の属性\"%s\"は変更できません" -#: commands/typecmds.c:4493 +#: commands/typecmds.c:4484 #, c-format msgid "must be superuser to alter a type" msgstr "型の変更を行うにはスーパーユーザーである必要があります" -#: commands/typecmds.c:4514 commands/typecmds.c:4523 +#: commands/typecmds.c:4505 commands/typecmds.c:4514 #, c-format msgid "%s is not a base type" msgstr "\"%s\"は基本型ではありません" -#: commands/user.c:200 +#: commands/user.c:201 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSIDはもう指定することができません" -#: commands/user.c:318 commands/user.c:324 commands/user.c:330 commands/user.c:336 commands/user.c:342 +#: commands/user.c:319 commands/user.c:325 commands/user.c:331 commands/user.c:337 commands/user.c:343 #, c-format msgid "permission denied to create role" msgstr "ロールを作成する権限がありません" -#: commands/user.c:319 +#: commands/user.c:320 #, c-format msgid "Only roles with the %s attribute may create roles." msgstr "%s属性を持つロールのみがロールを作成できます。" -#: commands/user.c:325 commands/user.c:331 commands/user.c:337 commands/user.c:343 +#: commands/user.c:326 commands/user.c:332 commands/user.c:338 commands/user.c:344 #, c-format 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:355 commands/user.c:1386 commands/user.c:1393 gram.y:17493 gram.y:17539 utils/adt/acl.c:5690 utils/adt/acl.c:5696 #, c-format msgid "role name \"%s\" is reserved" msgstr "ロール名\"%s\"は予約されています" -#: commands/user.c:356 commands/user.c:1388 commands/user.c:1395 +#: commands/user.c:357 commands/user.c:1388 commands/user.c:1395 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "\"pg_\"で始まるロール名は予約されています。" -#: commands/user.c:377 commands/user.c:1410 +#: commands/user.c:378 commands/user.c:1410 #, c-format msgid "role \"%s\" already exists" msgstr "ロール\"%s\"はすでに存在します" -#: commands/user.c:439 commands/user.c:924 +#: commands/user.c:440 commands/user.c:924 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "空の文字列はパスワードとして使えません、パスワードを消去します" -#: commands/user.c:468 +#: commands/user.c:469 #, c-format msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_authidのOIDが設定されていません" @@ -12422,8 +12664,8 @@ msgstr "他のロールのパスワードを変更するには、現在のユー #: 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 @@ -12455,7 +12697,7 @@ msgstr "%s属性および削除対象ロールに対する%sオプションを 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:864 commands/variable.c:867 commands/variable.c:983 commands/variable.c:986 utils/adt/acl.c:366 utils/adt/acl.c:386 utils/adt/acl.c:5545 utils/adt/acl.c:5593 utils/adt/acl.c:5621 utils/adt/acl.c:5640 utils/adt/regproc.c:1571 utils/init/miscinit.c:804 #, c-format msgid "role \"%s\" does not exist" msgstr "ロール\"%s\"は存在しません" @@ -12520,7 +12762,7 @@ msgstr "%1$s属性とロール\"%3$s\"に対する%2$sオプションを持つ msgid "MD5 password cleared because of role rename" msgstr "ロール名が変更されたためMD5パスワードがクリアされました" -#: commands/user.c:1518 gram.y:1297 +#: commands/user.c:1518 gram.y:1286 #, c-format msgid "unrecognized role option \"%s\"" msgstr "ロールオプション\"%s\"が認識できません" @@ -12560,207 +12802,212 @@ msgstr "ロール\"%s\"の権限を持つロールのみが、そのロールが msgid "Only roles with privileges of role \"%s\" may reassign objects to it." msgstr "ロール\"%s\"の権限を持つロールのみが、オブジェクトの所有者をそのロールに変更できます。" -#: commands/user.c:1733 +#: commands/user.c:1734 #, c-format msgid "role \"%s\" cannot be a member of any role" msgstr "ロール\"%s\"はどのロールのメンバーにもなれません" -#: commands/user.c:1746 +#: commands/user.c:1747 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "ロール\"%s\"はロール\"%s\"のメンバです" -#: commands/user.c:1786 commands/user.c:1812 +#: commands/user.c:1787 commands/user.c:1813 #, c-format msgid "%s option cannot be granted back to your own grantor" msgstr "%sオプションはもとの付与者に付与し返すことはできません" -#: commands/user.c:1889 +#: commands/user.c:1890 #, c-format msgid "role \"%s\" has already been granted membership in role \"%s\" by role \"%s\"" msgstr "ロール\"%s\"はすでにロール\"%s\"のメンバ権限をロール\"%s\"によって付与されています" -#: commands/user.c:2024 +#: commands/user.c:2036 #, c-format msgid "role \"%s\" has not been granted membership in role \"%s\" by role \"%s\"" msgstr "ロール\"%s\"はロール\"%s\"のメンバ権限をロール\"%s\"によって付与されていません" -#: commands/user.c:2124 +#: commands/user.c:2137 #, c-format msgid "role \"%s\" cannot have explicit members" msgstr "ロール\"%s\"は明示的なメンバーを持てません" -#: commands/user.c:2135 commands/user.c:2158 +#: commands/user.c:2148 commands/user.c:2171 #, c-format msgid "permission denied to grant role \"%s\"" msgstr "ロール\"%s\"権限を付与する権限がありません" -#: commands/user.c:2137 +#: commands/user.c:2150 #, c-format msgid "Only roles with the %s attribute may grant roles with the %s attribute." msgstr "%s属性を持つロールのみが%s属性を持つロールの権限を付与できます。" -#: commands/user.c:2142 commands/user.c:2165 +#: commands/user.c:2155 commands/user.c:2178 #, c-format msgid "permission denied to revoke role \"%s\"" msgstr "ロール\"%s\"の権限を剥奪する権限がありません" -#: commands/user.c:2144 +#: commands/user.c:2157 #, c-format msgid "Only roles with the %s attribute may revoke roles with the %s attribute." msgstr "%s属性を持つロールのみが%s属性を持つロールの権限を剥奪できます。" -#: commands/user.c:2160 +#: commands/user.c:2173 #, c-format msgid "Only roles with the %s option on role \"%s\" may grant this role." msgstr "ロール\"%2$s\"に対する%1$sオプションを持つロールのみがこのロール権限を付与できます。" -#: commands/user.c:2167 +#: commands/user.c:2180 #, c-format msgid "Only roles with the %s option on role \"%s\" may revoke this role." msgstr "ロール\"%2$s\"に対する%1$sオプションを持つロールのみがこのロール権限を剥奪できます。" -#: commands/user.c:2247 commands/user.c:2256 +#: commands/user.c:2260 commands/user.c:2269 #, c-format msgid "permission denied to grant privileges as role \"%s\"" msgstr "ロール\"%s\"として権限を付与する権限がありません" -#: commands/user.c:2249 +#: commands/user.c:2262 #, c-format msgid "Only roles with privileges of role \"%s\" may grant privileges as this role." msgstr "ロール\"%s\"の権限を持つロールのみがこのロールとして権限を付与できます。" -#: commands/user.c:2258 +#: commands/user.c:2271 #, c-format msgid "The grantor must have the %s option on role \"%s\"." msgstr "付与者はロール\"%s\"に対する%sオプションを持つ必要があります。" -#: commands/user.c:2266 +#: commands/user.c:2279 #, c-format msgid "permission denied to revoke privileges granted by role \"%s\"" msgstr "ロール\"%s\"によって付与された権限を剥奪する権限がありません" -#: commands/user.c:2268 +#: commands/user.c:2281 #, c-format 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:2504 utils/adt/acl.c:1325 #, c-format msgid "dependent privileges exist" msgstr "依存する権限が存在します" -#: commands/user.c:2492 utils/adt/acl.c:1319 +#: commands/user.c:2505 utils/adt/acl.c:1326 #, c-format msgid "Use CASCADE to revoke them too." msgstr "これらも剥奪するにはCASCADEを使用してください" -#: commands/vacuum.c:134 +#: commands/vacuum.c:146 #, c-format -msgid "\"vacuum_buffer_usage_limit\" must be 0 or between %d kB and %d kB" -msgstr "\"vacuum_buffer_usage_limit\"は0または%d kBと%d kBとの間でなければなりません" +msgid "\"%s\" must be 0 or between %d kB and %d kB." +msgstr "\"%s\"は0または%d kBと%d kBとの間でなければなりません。" -#: commands/vacuum.c:209 +#: commands/vacuum.c:222 #, c-format msgid "BUFFER_USAGE_LIMIT option must be 0 or between %d kB and %d kB" msgstr "BUFFER_USAGE_LIMITオプションは0または%d kBと%d kBの間でなければなりません" -#: commands/vacuum.c:219 +#: commands/vacuum.c:232 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "ANALYZEオプション\"%s\"が認識できません" -#: commands/vacuum.c:259 +#: commands/vacuum.c:272 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "パラレルオプションには0から%dまでの値である必要があります" -#: commands/vacuum.c:271 +#: commands/vacuum.c:284 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "VACUUMの並列ワーカーの数はは0から%dまでの値でなければなりません" -#: commands/vacuum.c:292 +#: commands/vacuum.c:305 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "認識できないVACUUMオプション \"%s\"" -#: commands/vacuum.c:318 +#: commands/vacuum.c:331 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULLは並列実行できません" -#: commands/vacuum.c:329 +#: commands/vacuum.c:342 #, c-format msgid "BUFFER_USAGE_LIMIT cannot be specified for VACUUM FULL" msgstr "BUFFER_USAGE_LIMITはVACUUM FULLに対しては指定できません" -#: commands/vacuum.c:343 +#: commands/vacuum.c:356 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "ANALYZE オプションは列リストが与えられているときのみ指定できます" -#: commands/vacuum.c:355 +#: commands/vacuum.c:368 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM のオプションDISABLE_PAGE_SKIPPINGはFULLと同時には指定できません" -#: commands/vacuum.c:362 +#: commands/vacuum.c:375 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "VACUUM FULLではPROCESS_TOASTの指定が必須です" -#: commands/vacuum.c:371 +#: commands/vacuum.c:384 #, c-format msgid "ONLY_DATABASE_STATS cannot be specified with a list of tables" msgstr "ONLY_DATABASE_STATSはテーブルのリストと一緒に指定することはできません" -#: commands/vacuum.c:380 +#: commands/vacuum.c:393 #, c-format msgid "ONLY_DATABASE_STATS cannot be specified with other VACUUM options" msgstr "ONLY_DATABASE_STATSは他のVACUUMオプションと一緒に指定することはできません" -#: commands/vacuum.c:515 +#: commands/vacuum.c:533 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%sはVACUUMやANALYZEからは実行できません" -#: commands/vacuum.c:730 +#: commands/vacuum.c:745 #, c-format msgid "permission denied to vacuum \"%s\", skipping it" msgstr "列%sのVACUUMを行う権限がありません、スキップします" -#: commands/vacuum.c:743 +#: commands/vacuum.c:758 #, c-format msgid "permission denied to analyze \"%s\", skipping it" msgstr "列%sのANALYZEを行う権限がありません、スキップします" -#: commands/vacuum.c:821 commands/vacuum.c:918 +#: commands/vacuum.c:836 commands/vacuum.c:937 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "\"%s\"のVACUUM処理をスキップしています -- ロックを獲得できませんでした" -#: commands/vacuum.c:826 +#: commands/vacuum.c:841 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "\"%s\"のVACUUM処理をスキップしています -- リレーションはすでに存在しません" -#: commands/vacuum.c:842 commands/vacuum.c:923 +#: commands/vacuum.c:857 commands/vacuum.c:942 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "\"%s\"のANALYZEをスキップしています --- ロック獲得できませんでした" -#: commands/vacuum.c:847 +#: commands/vacuum.c:862 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "\"%s\"のANALYZEをスキップします --- リレーションはすでに存在しません" -#: commands/vacuum.c:1139 +#: commands/vacuum.c:978 +#, c-format +msgid "VACUUM ONLY of partitioned table \"%s\" has no effect" +msgstr "パーティション親テーブル\"%s\"に対する VACUUM ONLY は効果がありません" + +#: commands/vacuum.c:1169 #, c-format msgid "cutoff for removing and freezing tuples is far in the past" msgstr "タプルの削除およびフリーズのカットオフ値が古すぎます" -#: commands/vacuum.c:1140 commands/vacuum.c:1145 +#: commands/vacuum.c:1170 commands/vacuum.c:1175 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -12769,37 +13016,37 @@ msgstr "" "周回問題を回避するためにすぐに実行中のトランザクションを終了してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除が必要な場合もあります。" -#: commands/vacuum.c:1144 +#: commands/vacuum.c:1174 #, c-format msgid "cutoff for freezing multixacts is far in the past" msgstr "マルチトランザクションのフリーズのカットオフ値が古すぎます" -#: commands/vacuum.c:1890 +#: commands/vacuum.c:1936 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "データベースの一部は20億トランザクション以上の間にVACUUMを実行されていませんでした" -#: commands/vacuum.c:1891 +#: commands/vacuum.c:1937 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "トランザクションの周回によるデータ損失が発生している可能性があります" -#: commands/vacuum.c:2070 +#: commands/vacuum.c:2116 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "\"%s\"をスキップしています --- テーブルではないものや、特別なシステムテーブルに対してはVACUUMを実行できません" -#: commands/vacuum.c:2502 +#: commands/vacuum.c:2617 #, c-format -msgid "scanned index \"%s\" to remove %lld row versions" -msgstr "インデックス\"%s\"をスキャンして%lldの行バージョンを削除しました" +msgid "scanned index \"%s\" to remove % row versions" +msgstr "インデックス\"%s\"をスキャンして%の行バージョンを削除しました" -#: commands/vacuum.c:2521 +#: commands/vacuum.c:2636 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "現在インデックス\"%s\"は%.0f行バージョンを%uページで含んでいます" -#: commands/vacuum.c:2525 +#: commands/vacuum.c:2640 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -12810,13 +13057,13 @@ msgstr "" "%uインデックスページを新たに削除\n" "%uページが現在削除中、うち%uページが再利用可能。" -#: commands/vacuumparallel.c:708 +#: commands/vacuumparallel.c:709 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "インデックスのVACUUMのために%d個の並列VACUUMワーカーを起動しました (計画値: %d)" -#: commands/vacuumparallel.c:714 +#: commands/vacuumparallel.c:715 #, 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)" @@ -12824,8 +13071,8 @@ msgstr[0] "インデックスのクリーンアップのために%d個の並列V #: commands/variable.c:185 #, c-format -msgid "Conflicting \"datestyle\" specifications." -msgstr "\"datestyle\"指定が競合しています。" +msgid "Conflicting \"DateStyle\" specifications." +msgstr "\"DateStyle\"指定が競合しています。" #: commands/variable.c:307 #, c-format @@ -12837,12 +13084,12 @@ msgstr "タイムゾーンのインターバル指定では月は指定できま msgid "Cannot specify days in time zone interval." msgstr "タイムゾーンのインターバル指定では日は指定できません。" -#: commands/variable.c:351 commands/variable.c:433 +#: commands/variable.c:351 commands/variable.c:435 #, c-format msgid "time zone \"%s\" appears to use leap seconds" msgstr "タイムゾーン\"%s\"はうるう秒を使用するようです" -#: commands/variable.c:353 commands/variable.c:435 +#: commands/variable.c:353 commands/variable.c:437 #, c-format msgid "PostgreSQL does not support leap seconds." msgstr "PostgreSQLはうるう秒をサポートしていません。" @@ -12852,107 +13099,97 @@ msgstr "PostgreSQLはうるう秒をサポートしていません。" msgid "UTC timezone offset is out of range." msgstr "UTCのタイムゾーンオフセットが範囲外です。" -#: commands/variable.c:552 +#: commands/variable.c:554 #, c-format msgid "cannot set transaction read-write mode inside a read-only transaction" msgstr "読み取りのみのトランザクションでトランザクションモードを読み書きモードに設定することはできません" -#: commands/variable.c:559 +#: commands/variable.c:561 #, c-format msgid "transaction read-write mode must be set before any query" msgstr "トランザクションの読み書きモードの設定は、問い合わせより前に行う必要があります" -#: commands/variable.c:566 +#: commands/variable.c:568 #, c-format msgid "cannot set transaction read-write mode during recovery" msgstr "リカバリ中にはトランザクションを読み書きモードに設定できません" -#: commands/variable.c:592 +#: commands/variable.c:596 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must be called before any query" msgstr "SET TRANSACTION ISOLATION LEVEL は問い合わせより前に実行する必要があります" -#: commands/variable.c:599 +#: commands/variable.c:603 #, c-format 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:610 storage/lmgr/predicate.c:1695 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "ホットスタンバイ中はシリアライズモードを使用できません" -#: commands/variable.c:607 +#: commands/variable.c:611 #, c-format msgid "You can use REPEATABLE READ instead." msgstr "代わりに REPEATABLE READ を使ってください" -#: commands/variable.c:625 +#: commands/variable.c:633 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction" msgstr "SET TRANSACTION [NOT] DEFERRABLE をサブトランザクション内部では呼び出せません" -#: commands/variable.c:631 +#: commands/variable.c:639 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE must be called before any query" msgstr "SET TRANSACTION [NOT] DEFERRABLE は問い合わせより前に実行する必要があります" -#: commands/variable.c:713 +#: commands/variable.c:715 +#, c-format +msgid "Cannot change \"client_encoding\" during a parallel operation." +msgstr "並列処理中は\"client_encoding\"を変更できません。" + +#: commands/variable.c:743 #, c-format msgid "Conversion between %s and %s is not supported." msgstr "%sと%s 間の変換はサポートされていません。" -#: commands/variable.c:720 +#: commands/variable.c:750 #, c-format msgid "Cannot change \"client_encoding\" now." msgstr "現在\"client_encoding\"を変更できません。" -#: commands/variable.c:781 -#, c-format -msgid "cannot change \"client_encoding\" during a parallel operation" -msgstr "並列処理中は\"client_encoding\"を変更できません" - -#: commands/variable.c:863 +#: commands/variable.c:889 #, c-format msgid "permission will be denied to set session authorization \"%s\"" msgstr "セッション認証を\"%s\"に設定する権限は拒否されます" -#: commands/variable.c:868 +#: commands/variable.c:894 #, c-format msgid "permission denied to set session authorization \"%s\"" msgstr "セッション認証を\"%s\"に設定する権限は拒否されました" -#: commands/variable.c:972 +#: commands/variable.c:1003 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "ロール\"%s\"を設定する権限がありません" -#: commands/variable.c:977 +#: commands/variable.c:1008 #, c-format msgid "permission denied to set role \"%s\"" msgstr "ロール\"%s\"を設定する権限がありません" -#: commands/variable.c:1177 +#: commands/variable.c:1228 #, c-format msgid "Bonjour is not supported by this build" msgstr "このビルドでは bonjour はサポートされていません" -#: commands/variable.c:1205 -#, 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 -#, 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:1256 #, c-format msgid "SSL is not supported by this build" msgstr "このインストレーションではSSLはサポートされていません" -#: commands/view.c:79 +#: commands/view.c:78 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "ビューの列\"%s\"で使用する照合順序を特定できませんでした" @@ -13037,400 +13274,411 @@ msgstr "カーソル\"%s\"は行上に位置していません" 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:3093 #, 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:3105 #, 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:667 executor/execExpr.c:674 executor/execExpr.c:680 executor/execExprInterp.c:5440 executor/execExprInterp.c:5457 executor/execExprInterp.c:5556 executor/nodeModifyTable.c:210 executor/nodeModifyTable.c:221 executor/nodeModifyTable.c:238 executor/nodeModifyTable.c:246 #, 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:668 executor/nodeModifyTable.c:211 #, c-format msgid "Query has too many columns." msgstr "問い合わせの列が多すぎます" -#: executor/execExpr.c:649 executor/nodeModifyTable.c:223 +#: executor/execExpr.c:675 executor/nodeModifyTable.c:239 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "問い合わせで %d 番目に削除される列の値を指定しています。" -#: executor/execExpr.c:655 executor/execExprInterp.c:4759 executor/nodeModifyTable.c:206 +#: executor/execExpr.c:681 executor/execExprInterp.c:5458 executor/nodeModifyTable.c:222 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "テーブルでは %2$d 番目の型は %1$s ですが、問い合わせでは %3$s を想定しています。" -#: executor/execExpr.c:1103 parser/parse_agg.c:840 +#: executor/execExpr.c:1157 parser/parse_agg.c:843 #, c-format msgid "window function calls cannot be nested" msgstr "ウィンドウ関数の呼び出しを入れ子にすることはできません" -#: executor/execExpr.c:1640 +#: executor/execExpr.c:1689 #, c-format msgid "target type is not an array" msgstr "対象型は配列ではありません" -#: executor/execExpr.c:1980 +#: executor/execExpr.c:2033 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()列の型が%2$sではなく%1$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:2729 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を超える引数を渡せません" -#: 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:2756 executor/execSRF.c:738 executor/functions.c:1474 utils/adt/jsonfuncs.c:4056 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:3262 parser/parse_node.c:272 parser/parse_node.c:322 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "添字をサポートしないため、型%sには添字をつけられません" -#: executor/execExpr.c:3203 executor/execExpr.c:3225 +#: executor/execExpr.c:3390 executor/execExpr.c:3412 #, c-format msgid "type %s does not support subscripted assignment" msgstr "型%sは添字を使った代入をサポートしません" -#: executor/execExprInterp.c:2007 +#: executor/execExprInterp.c:2415 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%2$s型の属性%1$dが削除されています" -#: executor/execExprInterp.c:2013 +#: executor/execExprInterp.c:2421 #, 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:2423 executor/execExprInterp.c:3782 executor/execExprInterp.c:3828 #, 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:2503 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1841 utils/cache/typcache.c:2000 utils/cache/typcache.c:2147 utils/fmgr/funcapi.c:569 #, c-format msgid "type %s is not composite" msgstr "型%sは複合型ではありません" -#: executor/execExprInterp.c:2698 +#: executor/execExprInterp.c:3266 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "このタイプのテーブルではWHERE CURRENT OFをサポートしません" -#: executor/execExprInterp.c:2911 +#: executor/execExprInterp.c:3479 #, c-format msgid "cannot merge incompatible arrays" msgstr "互換性がない配列をマージできません" -#: executor/execExprInterp.c:2912 +#: executor/execExprInterp.c:3480 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "要素型%sの配列を要素型%sのARRAY式に含められません" -#: executor/execExprInterp.c: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:3501 utils/adt/arrayfuncs.c:1305 utils/adt/arrayfuncs.c:3515 utils/adt/arrayfuncs.c:5605 utils/adt/arrayfuncs.c:6124 utils/adt/arraysubs.c:151 utils/adt/arraysubs.c:489 #, 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:3521 executor/execExprInterp.c:3556 #, 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:3533 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:3545 utils/adt/arrayfuncs.c:5377 +#: utils/adt/arrayfuncs.c:6216 utils/adt/arrayfuncs.c:6560 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:3781 executor/execExprInterp.c:3827 #, c-format msgid "attribute %d has wrong type" msgstr "属性%dの型が間違っています" -#: executor/execExprInterp.c:3845 utils/adt/domains.c:158 +#: executor/execExprInterp.c:4413 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "ドメイン%sはnull値を許しません" -#: executor/execExprInterp.c:3860 utils/adt/domains.c:196 +#: executor/execExprInterp.c:4428 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:5003 #, c-format msgid "no SQL/JSON item found for specified path of column \"%s\"" msgstr "列\"%s\"の指定されたパスに対応するSQL/JSON項目が見つかりません" -#: executor/execExprInterp.c:4438 +#: executor/execExprInterp.c:5008 #, c-format msgid "no SQL/JSON item found for specified path" msgstr "指定されたパスに対応するSQL/JSON項目が見つかりません" -#: executor/execExprInterp.c:4742 +#. translator: first %s is a SQL/JSON clause (e.g. ON ERROR) +#: executor/execExprInterp.c:5208 executor/execExprInterp.c:5216 +#, c-format +msgid "could not coerce %s expression (%s) to the RETURNING type" +msgstr "%s式(%s)をRETURNING型に強制変換できませんでした" + +#: executor/execExprInterp.c:5441 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "テーブル行には%d属性ありますが、問い合わせでは%dを想定しています。" -#: executor/execExprInterp.c:4858 executor/execSRF.c:977 +#: executor/execExprInterp.c:5557 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "序数位置%dの削除された属性における物理格納形式が一致しません。" -#: executor/execIndexing.c:593 +#: executor/execIndexing.c:608 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "ON CONFLICT は遅延可なユニーク制約/排除制約の調停主体としての指定をサポートしません" -#: executor/execIndexing.c:870 +#: executor/execIndexing.c:911 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "排除制約\"%s\"を作成できませんでした" -#: executor/execIndexing.c:873 +#: executor/execIndexing.c:914 #, c-format msgid "Key %s conflicts with key %s." msgstr "キー %s がキー %s と競合しています" -#: executor/execIndexing.c:875 +#: executor/execIndexing.c:916 #, c-format msgid "Key conflicts exist." msgstr "キーの競合が存在します" -#: executor/execIndexing.c:881 +#: executor/execIndexing.c:922 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "重複キーの値が排除制約\"%s\"に違反しています" -#: executor/execIndexing.c:884 +#: executor/execIndexing.c:925 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "キー %s が既存のキー %s と競合しています" -#: executor/execIndexing.c:886 +#: executor/execIndexing.c:927 #, c-format msgid "Key conflicts with existing key." msgstr "キーが既存のキーと衝突しています" -#: executor/execMain.c:1041 +#: executor/execIndexing.c:1172 +#, c-format +msgid "empty WITHOUT OVERLAPS value found in column \"%s\" in relation \"%s\"" +msgstr "リレーション\"%2$s\"の列\"%1$s\"に空のWITHOUT OVERLAPS値が見つかりました" + +#: executor/execMain.c:1171 #, c-format msgid "cannot change sequence \"%s\"" msgstr "シーケンス\"%s\"を変更できません" -#: executor/execMain.c:1047 +#: executor/execMain.c:1177 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOASTリレーション\"%s\"を変更できません" -#: executor/execMain.c:1066 +#: executor/execMain.c:1196 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "実体化ビュー\"%s\"を変更できません" -#: executor/execMain.c:1078 +#: executor/execMain.c:1208 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "外部テーブル\"%s\"への挿入ができません" -#: executor/execMain.c:1084 +#: executor/execMain.c:1214 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "外部テーブル\"%s\"は挿入を許しません" -#: executor/execMain.c:1091 +#: executor/execMain.c:1221 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "外部テーブル \"%s\"の更新ができません" -#: executor/execMain.c:1097 +#: executor/execMain.c:1227 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "外部テーブル\"%s\"は更新を許しません" -#: executor/execMain.c:1104 +#: executor/execMain.c:1234 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "外部テーブル\"%s\"からの削除ができません" -#: executor/execMain.c:1110 +#: executor/execMain.c:1240 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "外部テーブル\"%s\"は削除を許しません" -#: executor/execMain.c:1121 +#: executor/execMain.c:1251 #, c-format msgid "cannot change relation \"%s\"" msgstr "リレーション\"%s\"を変更できません" -#: executor/execMain.c:1148 +#: executor/execMain.c:1278 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "シーケンス\"%s\"では行のロックはできません" -#: executor/execMain.c:1155 +#: executor/execMain.c:1285 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "TOAST リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1162 +#: executor/execMain.c:1292 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ビュー\"%s\"では行のロックはできません" -#: executor/execMain.c:1170 +#: executor/execMain.c:1300 #, 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:1309 executor/execMain.c:2941 executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "外部テーブル\"%s\"では行のロックはできません" -#: executor/execMain.c:1185 +#: executor/execMain.c:1315 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1898 +#: executor/execMain.c:2038 #, 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:2040 executor/execMain.c:2152 executor/execMain.c:2290 executor/execMain.c:2398 #, c-format msgid "Failing row contains %s." msgstr "失敗した行は%sを含みます" -#: executor/execMain.c:1981 -#, c-format -msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" -msgstr "リレーション\"%2$s\"の列\"%1$s\"のNULL値が非NULL制約に違反しています" - -#: executor/execMain.c:2033 +#: executor/execMain.c:2150 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "リレーション\"%s\"の新しい行は検査制約\"%s\"に違反しています" -#: executor/execMain.c:2143 +#: executor/execMain.c:2287 +#, c-format +msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "リレーション\"%2$s\"の列\"%1$s\"のNULL値が非NULL制約に違反しています" + +#: executor/execMain.c:2396 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "新しい行はビュー\"%s\"のチェックオプションに違反しています" -#: executor/execMain.c:2153 +#: executor/execMain.c:2406 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "新しい行はテーブル\"%2$s\"行レベルセキュリティポリシ\"%1$s\"に違反しています" -#: executor/execMain.c:2158 +#: executor/execMain.c:2411 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシに違反しています" -#: executor/execMain.c:2166 +#: executor/execMain.c:2419 #, c-format msgid "target row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "ターゲットの行はテーブル\"%s\"の行レベルセキュリティポリシ\"%s\"(USING式)に違反しています" -#: executor/execMain.c:2171 +#: executor/execMain.c:2424 #, c-format msgid "target row violates row-level security policy (USING expression) for table \"%s\"" msgstr "ターゲットの行はテーブル\"%s\"の行レベルセキュリティポリシ(USING式)に違反しています" -#: executor/execMain.c:2178 +#: executor/execMain.c:2431 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "新しい行はテーブル\"%1$s\"の行レベルセキュリティポリシ\"%2$s\"(USING式)に違反しています" -#: executor/execMain.c:2183 +#: executor/execMain.c:2436 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシ(USING式)に違反しています" -#: executor/execPartition.c:327 +#: executor/execPartition.c:331 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "行に対応するパーティションがリレーション\"%s\"に見つかりません" -#: executor/execPartition.c:330 +#: executor/execPartition.c:334 #, c-format msgid "Partition key of the failing row contains %s." msgstr "失敗した行のパーティションキーは%sを含みます。" -#: executor/execReplication.c:272 executor/execReplication.c:456 +#: executor/execReplication.c:147 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "ロック対象のタプルは同時に行われた更新によって他の子テーブルに移動されています、再試行しています" -#: executor/execReplication.c:276 executor/execReplication.c:460 +#: executor/execReplication.c:151 #, c-format msgid "concurrent update, retrying" msgstr "同時更新がありました、リトライします" -#: executor/execReplication.c:282 executor/execReplication.c:466 +#: executor/execReplication.c:158 #, c-format 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 -#, 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:809 executor/execReplication.c:815 executor/execReplication.c:821 #, c-format msgid "cannot update table \"%s\"" msgstr "テーブル\"%s\"の更新ができません" -#: executor/execReplication.c:685 executor/execReplication.c:697 +#: executor/execReplication.c:811 executor/execReplication.c:829 #, 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:817 executor/execReplication.c:835 #, 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:823 executor/execReplication.c:841 +#, c-format +msgid "Replica identity must not contain unpublished generated columns." +msgstr "複製識別がパブリッシュされていない生成列を含んでいてはなりません。" + +#: executor/execReplication.c:827 executor/execReplication.c:833 executor/execReplication.c:839 #, c-format msgid "cannot delete from table \"%s\"" msgstr "テーブル\"%s\"からの削除ができません" -#: executor/execReplication.c:721 +#: executor/execReplication.c:859 #, 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:861 #, 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:865 #, 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:867 #, 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:883 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "リレーション\"%s.%s\"は論理レプリケーション先としては使用できません" @@ -13476,114 +13724,114 @@ msgstr[0] "%d属性を持つ行が返されました。問い合わせでは%d msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "序数位置%2$dの型%1$sが返されました。問い合わせでは%3$sを想定しています。" -#: executor/execTuples.c:147 executor/execTuples.c:368 executor/execTuples.c:563 executor/execTuples.c:772 +#: executor/execTuples.c:147 executor/execTuples.c:369 executor/execTuples.c:564 executor/execTuples.c:774 #, c-format msgid "cannot retrieve a system column in this context" msgstr "この文脈ではシステム列は取り出せません" -#: executor/execTuples.c:163 executor/execTuples.c:580 +#: executor/execTuples.c:163 executor/execTuples.c:581 #, c-format msgid "don't have transaction information for this type of tuple" msgstr "このタイプのタプルのトランザクション情報は持たないでください" -#: executor/execTuples.c:390 executor/execTuples.c:794 +#: executor/execTuples.c:391 executor/execTuples.c:796 #, c-format msgid "don't have a storage tuple in this context" msgstr "この文脈ではストレージタプルを保持しないでください" -#: executor/execUtils.c:713 +#: executor/execUtils.c:759 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "実体化ビュー\"%s\"にはデータが格納されていません" -#: executor/execUtils.c:715 -#, c-format -msgid "Use the REFRESH MATERIALIZED VIEW command." -msgstr "REFRESH MATERIALIZED VIEWコマンドを使用してください。" - -#: executor/functions.c:217 +#: executor/functions.c:293 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "%sと宣言された引数の型を特定できませんでした" -#: executor/functions.c:512 +#: executor/functions.c:726 #, 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:732 #, c-format msgid "%s is not allowed in an SQL function" msgstr "SQL関数では%sは使用不可です" #. translator: %s is a SQL statement name -#: executor/functions.c:526 executor/spi.c:1741 executor/spi.c:2649 +#: executor/functions.c:740 executor/spi.c:1746 executor/spi.c:2660 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "volatile関数以外では%sは許可されません" -#: executor/functions.c:1451 +#: executor/functions.c:1135 executor/functions.c:2129 executor/functions.c:2167 executor/functions.c:2181 executor/functions.c:2271 executor/functions.c:2304 executor/functions.c:2318 #, c-format -msgid "SQL function \"%s\" statement %d" -msgstr "SQL関数\"%s\"の行番号 %d" +msgid "return type mismatch in function declared to return %s" +msgstr "%sを返すと宣言された関数において戻り値型が一致しません" -#: executor/functions.c:1477 +#: executor/functions.c:1137 executor/functions.c:2131 #, c-format -msgid "SQL function \"%s\" during startup" -msgstr "SQL関数\"%s\"の起動中" +msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." +msgstr "関数中の最後の文はSELECTまたはINSERT/UPDATE/DELETE/MERGE RETURNING のいずれかである必要があります。" -#: executor/functions.c:1562 +#: executor/functions.c:1220 utils/cache/plancache.c:869 #, c-format -msgid "calling procedures with output arguments is not supported in SQL functions" -msgstr "出力引数を持つプロシージャの呼び出しはSQL関数ではサポートされていません" +msgid "cached plan must not change result type" +msgstr "キャッシュした実行計画は結果型を変更してはなりません" -#: 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:1822 executor/functions.c:1853 #, c-format -msgid "return type mismatch in function declared to return %s" -msgstr "%sを返すと宣言された関数において戻り値型が一致しません" +msgid "SQL function \"%s\" during startup" +msgstr "SQL関数\"%s\"の起動中" -#: executor/functions.c:1699 +#: executor/functions.c:1850 #, c-format -msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." -msgstr "関数中の最後の文はSELECTまたはINSERT/UPDATE/DELETE/MERGE RETURNING のいずれかである必要があります。" +msgid "SQL function \"%s\" statement %d" +msgstr "SQL関数\"%s\"の行番号 %d" + +#: executor/functions.c:1980 +#, c-format +msgid "calling procedures with output arguments is not supported in SQL functions" +msgstr "出力引数を持つプロシージャの呼び出しはSQL関数ではサポートされていません" -#: executor/functions.c:1737 +#: executor/functions.c:2169 #, c-format msgid "Final statement must return exactly one column." msgstr "最後のステートメントはちょうど1列を返さなければなりません。" -#: executor/functions.c:1751 +#: executor/functions.c:2183 #, c-format msgid "Actual return type is %s." msgstr "実際の戻り値型は%sです。" -#: executor/functions.c:1846 +#: executor/functions.c:2273 #, c-format msgid "Final statement returns too many columns." msgstr "最後のステートメントが返す列が多すぎます。" -#: executor/functions.c:1879 +#: executor/functions.c:2306 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "最後のステートメントが列%3$dで%2$sではなく%1$sを返しました。" -#: executor/functions.c:1893 +#: executor/functions.c:2320 #, c-format msgid "Final statement returns too few columns." msgstr "最後のステートメントが返す列が少なすぎます。" -#: executor/functions.c:1921 +#: executor/functions.c:2348 #, 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:4039 executor/nodeWindowAgg.c:3041 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "集約%uは入力データ型と遷移用の型間で互換性が必要です" -#: executor/nodeAgg.c:3966 parser/parse_agg.c:682 parser/parse_agg.c:710 +#: executor/nodeAgg.c:4062 parser/parse_agg.c:685 parser/parse_agg.c:713 #, c-format msgid "aggregate function calls cannot be nested" msgstr "集約関数の呼び出しを入れ子にすることはできません" @@ -13593,12 +13841,12 @@ msgstr "集約関数の呼び出しを入れ子にすることはできません msgid "custom scan \"%s\" does not support MarkPos" msgstr "カスタムスキャン\"%s\"はMarkPosをサポートしていません" -#: executor/nodeHashjoin.c:1130 executor/nodeHashjoin.c:1160 +#: executor/nodeHashjoin.c:1230 executor/nodeHashjoin.c:1260 #, c-format msgid "could not rewind hash-join temporary file" msgstr "ハッシュ結合用一時ファイルを巻き戻せませんでした" -#: executor/nodeIndexonlyscan.c:239 +#: executor/nodeIndexonlyscan.c:240 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "概算距離関数はインデックスオンリースキャンではサポートされていません" @@ -13613,73 +13861,73 @@ msgstr "OFFSET は負数であってはなりません" msgid "LIMIT must not be negative" msgstr "LIMIT は負数であってはなりません" -#: executor/nodeMergejoin.c:1578 +#: executor/nodeMergejoin.c:1574 #, c-format msgid "RIGHT JOIN is only supported with merge-joinable join conditions" msgstr "RIGHT JOINはマージ結合可能な結合条件でのみサポートされています" -#: executor/nodeMergejoin.c:1596 +#: executor/nodeMergejoin.c:1592 #, c-format msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOINはマージ結合可能な結合条件でのみサポートされています" -#: executor/nodeModifyTable.c:231 +#: executor/nodeModifyTable.c:247 #, c-format msgid "Query has too few columns." msgstr "問い合わせの列が少なすぎます。" -#: executor/nodeModifyTable.c:1531 executor/nodeModifyTable.c:1605 +#: executor/nodeModifyTable.c:1664 executor/nodeModifyTable.c:1738 #, 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:1937 #, c-format msgid "invalid ON UPDATE specification" msgstr "不正な ON UPDATE 指定です" -#: executor/nodeModifyTable.c:1761 +#: executor/nodeModifyTable.c:1938 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "結果タプルをもとのパーティションではなく異なるパーティションに追加しようとしました。" -#: executor/nodeModifyTable.c:2217 +#: executor/nodeModifyTable.c:2394 #, 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:2395 #, c-format msgid "A foreign key points to ancestor \"%s\" but not the root ancestor \"%s\"." msgstr "外部キーがパーティションルートテーブル\"%2$s\"ではなくパーティション親テーブル\"%1$s\"を指しています。" -#: executor/nodeModifyTable.c:2221 +#: executor/nodeModifyTable.c:2398 #, 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:2765 executor/nodeModifyTable.c:3314 executor/nodeModifyTable.c:3484 #, c-format msgid "%s command cannot affect row a second time" msgstr "%sコマンドは単一の行に2度は適用できません" -#: executor/nodeModifyTable.c:2569 +#: executor/nodeModifyTable.c:2767 #, 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:3307 executor/nodeModifyTable.c:3477 #, 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:3316 executor/nodeModifyTable.c:3486 #, c-format msgid "Ensure that not more than one source row matches any one target row." msgstr "ソース行が2行以上ターゲット行に合致しないようにしてください。" -#: executor/nodeModifyTable.c:3152 +#: executor/nodeModifyTable.c:3385 #, c-format msgid "tuple to be merged was already moved to another partition due to concurrent update" msgstr "マージ対象のタプルは同時に行われた更新によってすでに他の子テーブルに移動されています" @@ -13694,7 +13942,7 @@ msgstr "TABLESAMPLEパラメータにnullは指定できません" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "TABLESAMPLE REPEATABLE パラメータにnullは指定できません" -#: executor/nodeSubplan.c:325 executor/nodeSubplan.c:351 executor/nodeSubplan.c:405 executor/nodeSubplan.c:1174 +#: executor/nodeSubplan.c:317 executor/nodeSubplan.c:343 executor/nodeSubplan.c:397 executor/nodeSubplan.c:1182 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "式として使用された副問い合わせが2行以上の行を返しました" @@ -13729,104 +13977,104 @@ msgstr "列\"%s\"でnullは許可されません" msgid "moving-aggregate transition function must not return null" msgstr "移動集約の推移関数はnullを返却してはなりません" -#: executor/nodeWindowAgg.c:2083 +#: executor/nodeWindowAgg.c:2106 #, c-format msgid "frame starting offset must not be null" msgstr "フレームの開始オフセットは NULL であってはなりません" -#: executor/nodeWindowAgg.c:2096 +#: executor/nodeWindowAgg.c:2120 #, c-format msgid "frame starting offset must not be negative" msgstr "フレームの開始オフセットは負数であってはなりません" -#: executor/nodeWindowAgg.c:2108 +#: executor/nodeWindowAgg.c:2133 #, c-format msgid "frame ending offset must not be null" msgstr "フレームの終了オフセットは NULL であってはなりません" -#: executor/nodeWindowAgg.c:2121 +#: executor/nodeWindowAgg.c:2147 #, c-format msgid "frame ending offset must not be negative" msgstr "フレームの終了オフセットは負数であってはなりません" -#: executor/nodeWindowAgg.c:2892 +#: executor/nodeWindowAgg.c:2957 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "集約関数 %s はウィンドウ関数としての使用をサポートしていません" -#: executor/spi.c:241 executor/spi.c:341 +#: executor/spi.c:242 executor/spi.c:342 #, c-format msgid "invalid transaction termination" msgstr "不正なトランザクション終了" -#: executor/spi.c:256 +#: executor/spi.c:257 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "サブトランザクションの実行中はコミットできません" -#: executor/spi.c:347 +#: executor/spi.c:348 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "サブトランザクションの実行中はロールバックできません" -#: executor/spi.c:471 +#: executor/spi.c:472 #, c-format msgid "transaction left non-empty SPI stack" msgstr "トランザクションは空でないSPIスタックを残しました" -#: executor/spi.c:472 executor/spi.c:532 +#: executor/spi.c:473 executor/spi.c:533 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "\"SPI_finish\"呼出の抜けを確認ください" -#: executor/spi.c:531 +#: executor/spi.c:532 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "サブトランザクションが空でないSPIスタックを残しました" -#: executor/spi.c:1599 +#: executor/spi.c:1603 #, 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:1613 #, c-format msgid "cannot open %s query as cursor" msgstr "カーソルで%s問い合わせを開くことができません" -#: executor/spi.c:1715 +#: executor/spi.c:1720 #, 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:1721 parser/analyze.c:3161 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "スクロール可能カーソルは読み取り専用である必要があります。" -#: executor/spi.c:2488 +#: executor/spi.c:2498 #, 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:2573 #, c-format msgid "%s query does not return tuples" msgstr "%s問い合わせがタプルを返しません" -#: executor/spi.c:2979 +#: executor/spi.c:3004 #, c-format -msgid "SQL expression \"%s\"" -msgstr "SQL関数\"%s\"" +msgid "PL/pgSQL expression \"%s\"" +msgstr "PL/pgSQL式 \"%s\"" -#: executor/spi.c:2984 +#: executor/spi.c:3009 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL代入\"%s\"" -#: executor/spi.c:2987 +#: executor/spi.c:3012 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL文 \"%s\"" @@ -13836,478 +14084,480 @@ msgstr "SQL文 \"%s\"" 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:7228 optimizer/util/plancat.c:538 +#, 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:1223 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD は今後サポートされません" -#: gram.y:1235 +#: gram.y:1224 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "UNENCRYPTED を削除してください。そうすれば替わりにパスワードを暗号化形式で格納します。" -#: gram.y:1562 gram.y:1578 +#: gram.y:1551 gram.y:1567 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTSにはスキーマ要素を含めることはできません" -#: gram.y:1730 +#: gram.y:1728 #, c-format msgid "current database cannot be changed" msgstr "現在のデータベースを変更できません" -#: gram.y:1863 +#: gram.y:1869 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "タイムゾーンの間隔はHOURまたはHOUR TO MINUTEでなければなりません" -#: gram.y:2539 +#: gram.y:2501 #, c-format msgid "column number must be in range from 1 to %d" msgstr "列番号は1から%dまでの範囲でなければなりません" -#: gram.y:3135 +#: gram.y:3120 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "シーケンスのオプション\"%s\"はここではサポートされていません" -#: gram.y:3174 +#: gram.y:3159 #, c-format msgid "modulus for hash partition provided more than once" msgstr "ハッシュパーティションで法(除数)が2回以上指定されています" -#: gram.y:3183 +#: gram.y:3168 #, c-format msgid "remainder for hash partition provided more than once" msgstr "ハッシュパーティションで剰余が2回以上指定されています" -#: gram.y:3190 +#: gram.y:3175 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "ハッシュパーティションの境界条件\"%s\"が認識できません" -#: gram.y:3198 +#: gram.y:3183 #, c-format msgid "modulus for hash partition must be specified" msgstr "ハッシュパーティションでは法(除数)の指定が必要です" -#: gram.y:3202 +#: gram.y:3188 #, c-format msgid "remainder for hash partition must be specified" msgstr "ハッシュパーティションでは剰余の指定が必要です" -#: gram.y:3410 gram.y:3444 +#: gram.y:3397 gram.y:3432 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUTはPROGRAMと同時に使用できません" -#: gram.y:3416 +#: gram.y:3403 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "COPY TO で WHERE 句は使用できません" -#: gram.y:3764 gram.y:3771 gram.y:13068 gram.y:13076 +#: gram.y:3752 gram.y:3759 gram.y:13184 gram.y:13192 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "一時テーブル作成におけるGLOBALは廃止予定です" -#: gram.y:4047 +#: gram.y:4041 #, 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:4450 utils/adt/ri_triggers.c:2259 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MMATCH PARTIAL はまだ実装されていません" -#: gram.y:4484 +#: gram.y:4542 #, c-format msgid "a column list with %s is only supported for ON DELETE actions" msgstr "%sが指定された列リストはON DELETEのアクションに対してのみサポートされます" -#: gram.y:5196 +#: gram.y:5261 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM はすでにサポートされていません" -#: gram.y:5894 +#: gram.y:5959 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "認識できない行セキュリティオプション \"%s\"" -#: gram.y:5895 +#: gram.y:5960 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "現時点ではPERMISSIVEもしくはRESTRICTIVEポリシのみがサポートされています" -#: gram.y:5980 +#: gram.y:6045 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGERはサポートされません" -#: gram.y:6017 +#: gram.y:6083 msgid "duplicate trigger events specified" msgstr "重複したトリガーイベントが指定されました" -#: gram.y:6159 parser/parse_utilcmd.c:3839 parser/parse_utilcmd.c:3865 +#: gram.y:6225 parser/parse_utilcmd.c:3925 parser/parse_utilcmd.c:3951 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "INITIALLY DEFERREDと宣言された制約はDEFERRABLEでなければなりません" -#: gram.y:6166 +#: gram.y:6233 #, c-format msgid "conflicting constraint properties" msgstr "制約属性の競合" -#: gram.y:6265 +#: gram.y:6334 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTIONはまだ実装されていません" -#: gram.y:6582 +#: gram.y:6652 #, c-format msgid "dropping an enum value is not implemented" msgstr "列挙型の値の削除は実装されていません" -#: gram.y:6700 -#, c-format -msgid "RECHECK is no longer required" -msgstr "RECHECK はもはや必要とされません" - -#: gram.y:6701 -#, c-format -msgid "Update your data type." -msgstr "データ型を更新してください" - -#: gram.y:8574 +#: gram.y:8632 #, c-format msgid "aggregates cannot have output arguments" msgstr "集約は出力の引数を持つことができません" -#: gram.y:9037 utils/adt/regproc.c:670 +#: gram.y:9096 utils/adt/regproc.c:670 #, c-format msgid "missing argument" msgstr "引数が足りません" -#: gram.y:9038 utils/adt/regproc.c:671 +#: gram.y:9097 utils/adt/regproc.c:671 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "単項演算子の存在しない引数を表すにはNONEを使用してください。" -#: gram.y:11266 gram.y:11285 +#: gram.y:11325 gram.y:11344 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTIONは再帰ビューではサポートされていません" -#: gram.y:13207 +#: gram.y:13331 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,#構文は実装されていません" -#: gram.y:13208 +#: gram.y:13332 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "分割してLIMITとOFFSET句を使用してください" -#: gram.y:14083 +#: gram.y:14220 #, c-format msgid "only one DEFAULT value is allowed" msgstr "DEFAULT値は一つだけ指定可能です" -#: gram.y:14092 +#: gram.y:14229 #, c-format msgid "only one PATH value per column is allowed" msgstr "列一つにつきPATH値は一つだけ指定可能です" -#: gram.y:14101 +#: gram.y:14238 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "列\"%s\"でNULL / NOT NULL宣言が衝突しているか重複しています" -#: gram.y:14110 +#: gram.y:14247 #, c-format msgid "unrecognized column option \"%s\"" msgstr "認識できない列オプション \"%s\"" -#: gram.y:14192 +#: gram.y:14329 #, c-format msgid "only string constants are supported in JSON_TABLE path specification" msgstr "JSON_TABLEパス指定では文字列定数のみがサポートされます" -#: gram.y:14514 +#: gram.y:14651 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "浮動小数点数の型の精度は最低でも1ビット必要です" -#: gram.y:14523 +#: gram.y:14660 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "浮動小数点型の精度は54ビットより低くなければなりません" -#: gram.y:15040 +#: gram.y:15177 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "OVERLAPS式の左辺のパラメータ数が間違っています" -#: gram.y:15045 +#: gram.y:15182 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "OVERLAPS式の右辺のパラメータ数が間違っています" -#: gram.y:15222 +#: gram.y:15359 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE 述部はまだ実装されていません" -#: gram.y:15636 +#: gram.y:15773 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "複数のORDER BY句はWITHIN GROUPと一緒には使用できません" -#: gram.y:15641 +#: gram.y:15778 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT は WITHIN GROUP と同時には使えません" -#: gram.y:15646 +#: gram.y:15783 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC は WITHIN GROUP と同時には使えません" -#: gram.y:16373 gram.y:16397 +#: gram.y:16510 gram.y:16534 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "フレームの開始は UNBOUNDED FOLLOWING であってはなりません" -#: gram.y:16378 +#: gram.y:16515 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "次の行から始まるフレームは、現在行では終了できません" -#: gram.y:16402 +#: gram.y:16539 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "フレームの終了は UNBOUNDED PRECEDING であってはなりません" -#: gram.y:16408 +#: gram.y:16545 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "現在行から始まるフレームは、先行する行を含むことができません" -#: gram.y:16415 +#: gram.y:16552 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "次の行から始まるフレームは、先行する行を含むことができません" -#: gram.y:16964 +#: gram.y:17101 #, c-format msgid "unrecognized JSON encoding: %s" msgstr "不明なJSON符号化方式: \"%s\"" -#: gram.y:17288 +#: gram.y:17426 #, c-format msgid "type modifier cannot have parameter name" msgstr "型修正子はパラメータ名を持つことはできません" -#: gram.y:17294 +#: gram.y:17432 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "型修正子はORDER BYを持つことはできません" -#: gram.y:17362 gram.y:17369 gram.y:17376 +#: gram.y:17500 gram.y:17507 gram.y:17514 #, c-format msgid "%s cannot be used as a role name here" msgstr "%sはここではロール名として使用できません" -#: gram.y:17466 gram.y:18955 +#: gram.y:17604 gram.y:19135 #, 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:18828 gram.y:19003 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:18966 gram.y:18983 tsearch/spell.c:965 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1082 #, c-format msgid "syntax error" msgstr "構文エラー" -#: gram.y:18885 +#: gram.y:19067 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "VARIADIC直接引数を使った順序集合集約は同じデータタイプのVARIADIC集約引数を一つ持つ必要があります" -#: gram.y:18922 +#: gram.y:19104 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "複数のORDER BY句は使用できません" -#: gram.y:18933 +#: gram.y:19115 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "複数のOFFSET句は使用できません" -#: gram.y:18942 +#: gram.y:19124 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "複数のLIMIT句は使用できません" -#: gram.y:18951 -#, c-format -msgid "multiple limit options not allowed" -msgstr "複数のLIMITオプションは使用できません" - -#: gram.y:18978 +#: gram.y:19160 #, c-format msgid "multiple WITH clauses not allowed" msgstr "複数の WITH 句は使用できません" -#: gram.y:19171 +#: gram.y:19358 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "テーブル関数では OUT と INOUT 引数は使用できません" -#: gram.y:19304 +#: gram.y:19492 #, 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:19532 gram.y:19545 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s制約は遅延可能にはできません" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:19368 +#: gram.y:19558 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s制約をNOT VALIDとマークすることはできません" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:19381 +#: gram.y:19571 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s制約をNO INHERITをマークすることはできません" -#: gram.y:19403 +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:19584 +#, c-format +msgid "%s constraints cannot be marked NOT ENFORCED" +msgstr "%s制約をNOT ENFORCEDとマークすることはできません" + +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:19606 +#, c-format +msgid "%s constraints cannot be marked ENFORCED" +msgstr "%s制約をENFORCEDとマークすることはできません" + +#: gram.y:19628 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "識別できないパーティションストラテジ \"%s\"" -#: gram.y:19427 +#: gram.y:19652 #, c-format msgid "invalid publication object list" msgstr "不正なパブリケーションオブジェクトリスト" -#: gram.y:19428 +#: gram.y:19653 #, c-format msgid "One of TABLE or TABLES IN SCHEMA must be specified before a standalone table or schema name." msgstr "テーブル名やスキーマ名を単独記述の前にTABLEまたはTABLES IN SCHEMAのいずれかを指定する必要があります。" -#: gram.y:19444 +#: gram.y:19669 #, c-format msgid "invalid table name" msgstr "不正なテーブル名" -#: gram.y:19465 +#: gram.y:19690 #, c-format msgid "WHERE clause not allowed for schema" msgstr "WHERE句はスキーマに対しては使用できません" -#: gram.y:19472 +#: gram.y:19697 #, c-format msgid "column specification not allowed for schema" msgstr "列指定はスキーマに対しては使用できません" -#: gram.y:19486 +#: gram.y:19711 #, c-format msgid "invalid schema name" msgstr "不正なスキーマ名" -#: guc-file.l:192 +#: guc-file.l:193 #, c-format msgid "empty configuration file name: \"%s\"" msgstr "空の設定ファイル名: \"%s\"" -#: guc-file.l:209 +#: guc-file.l:210 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "設定ファイル\"%s\"をオープンできませんでした: 入れ子長が上限を超えています" -#: guc-file.l:229 +#: guc-file.l:230 #, c-format msgid "configuration file recursion in \"%s\"" msgstr "設定ファイル\"%s\"が再帰しています" -#: guc-file.l:245 +#: guc-file.l:246 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "設定ファイル\"%s\"をオープンできませんでした: %m" -#: guc-file.l:256 +#: guc-file.l:257 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "存在しない設定ファイル\"%s\"をスキップします" -#: guc-file.l:511 +#: guc-file.l:518 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "ファイル\"%s\"の行%uの行末近辺で構文エラーがありました" -#: guc-file.l:521 +#: guc-file.l:528 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "ファイル\"%s\"の行%uのトークン\"%s\"近辺で構文エラーがありました" -#: guc-file.l:541 +#: guc-file.l:548 #, c-format 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:268 jsonpath_gram.y:600 jsonpath_scan.l:617 jsonpath_scan.l:628 jsonpath_scan.l:638 jsonpath_scan.l:690 utils/adt/encode.c:513 utils/adt/encode.c:578 utils/adt/jsonfuncs.c:661 utils/adt/varlena.c:341 utils/adt/varlena.c:382 #, c-format msgid "invalid input syntax for type %s" msgstr "%s型に対する不正な入力構文" -#: jsonpath_gram.y:267 +#: jsonpath_gram.y:269 #, c-format msgid ".decimal() can only have an optional precision[,scale]." msgstr ".decimal()では\"精度[,スケール]\"のオプションを1つだけ指定可能です" -#: jsonpath_gram.y:599 +#: jsonpath_gram.y:601 #, c-format msgid "Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate." msgstr "LIKE_REGEX 述語の中に認識できないフラグ文字\"%.*s\"があります。" -#: jsonpath_gram.y:629 tsearch/spell.c:749 utils/adt/regexp.c:223 +#: jsonpath_gram.y:631 tsearch/spell.c:751 utils/adt/regexp.c:223 #, c-format msgid "invalid regular expression: %s" msgstr "正規表現が不正です: %s" -#: jsonpath_gram.y:677 +#: jsonpath_gram.y:679 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "XQueryの\"x\"フラグ(拡張正規表現)は実装されていません" @@ -14324,48 +14574,48 @@ msgstr "不正な16進文字列" msgid "unexpected end after backslash" msgstr "バックスラッシュの後の想定外の終了" -#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:742 +#: jsonpath_scan.l:201 repl_scanner.l:217 scan.l:742 msgid "unterminated quoted string" msgstr "文字列の引用符が閉じていません" -#: jsonpath_scan.l:228 +#: jsonpath_scan.l:227 msgid "unexpected end of comment" msgstr "コメントの想定外の終了" -#: jsonpath_scan.l:319 +#: jsonpath_scan.l:317 msgid "invalid numeric literal" msgstr "不正なnumericリテラル" -#: 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:322 jsonpath_scan.l:327 jsonpath_scan.l:332 scan.l:1056 scan.l:1060 scan.l:1064 scan.l:1068 msgid "trailing junk after numeric literal" msgstr "数値リテラルの後ろにゴミがあります" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:375 +#: jsonpath_scan.l:378 #, c-format msgid "%s at end of jsonpath input" msgstr "jsonpath の最後に %s があります" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:382 +#: jsonpath_scan.l:385 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "jsonpath 入力の\"%2$s\"または近くに %1$s があります" -#: jsonpath_scan.l:568 +#: jsonpath_scan.l:545 msgid "invalid input" msgstr "不正な入力" -#: jsonpath_scan.l:594 +#: jsonpath_scan.l:571 msgid "invalid hexadecimal digit" msgstr "不正な16進数桁" -#: jsonpath_scan.l:607 utils/adt/jsonfuncs.c:646 +#: jsonpath_scan.l:584 utils/adt/jsonfuncs.c:649 #, c-format msgid "unsupported Unicode escape sequence" msgstr "サポートされないUnicodeエスケープシーケンス" -#: jsonpath_scan.l:625 +#: jsonpath_scan.l:602 #, c-format msgid "could not convert Unicode to server encoding" msgstr "Unicodeのサーバーエンコーディングへの変換に失敗しました" @@ -14375,684 +14625,851 @@ msgstr "Unicodeのサーバーエンコーディングへの変換に失敗し msgid "Failed on DSA request of size %zu." msgstr "サイズ%zuの動的共有エリアの要求に失敗しました。" -#: libpq/auth-sasl.c:97 -#, c-format -msgid "expected SASL response, got message type %d" -msgstr "SASL応答を想定していましたが、メッセージタイプ%dを受け取りました" - -#: libpq/auth-scram.c:263 +#: libpq/auth-oauth.c:109 libpq/auth-scram.c:267 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "クライアントが無効なSASL認証機構を選択しました" -#: libpq/auth-scram.c:287 libpq/auth-scram.c:536 libpq/auth-scram.c:547 +#: libpq/auth-oauth.c:169 libpq/auth-oauth.c:174 libpq/auth-oauth.c:192 libpq/auth-oauth.c:220 libpq/auth-oauth.c:230 libpq/auth-oauth.c:239 libpq/auth-oauth.c:254 libpq/auth-oauth.c:263 libpq/auth-oauth.c:272 libpq/auth-oauth.c:279 libpq/auth-oauth.c:342 libpq/auth-oauth.c:349 libpq/auth-oauth.c:375 libpq/auth-oauth.c:420 libpq/auth-oauth.c:438 libpq/auth-oauth.c:452 libpq/auth-oauth.c:472 +#, c-format +msgid "malformed OAUTHBEARER message" +msgstr "不正なフォーマットのOAUTHBEARERメッセージです" + +#: libpq/auth-oauth.c:170 libpq/auth-scram.c:383 +#, c-format +msgid "The message is empty." +msgstr "メッセージが空です。" + +#: libpq/auth-oauth.c:175 libpq/auth-scram.c:388 +#, c-format +msgid "Message length does not match input length." +msgstr "メッセージの長さが入力の長さと一致しません" + +#: libpq/auth-oauth.c:193 +#, c-format +msgid "Client did not send a kvsep response." +msgstr "クライアントは kvsep レスポンスを送信しませんでした。" + +#: libpq/auth-oauth.c:221 +#, c-format +msgid "The server does not support channel binding for OAuth, but the client message includes channel binding data." +msgstr "このサーバーはOAuthのチャンネルバインディングをサポートしていませんが、クライアントからのメッセージにはチャンネルバインディングのデータが含まれています。" + +#: libpq/auth-oauth.c:231 libpq/auth-scram.c:1003 libpq/auth-scram.c:1033 +#, c-format +msgid "Comma expected, but found character \"%s\"." +msgstr "カンマを想定していましたが、文字\"%s\"が見つかりました" + +#: libpq/auth-oauth.c:240 libpq/auth-scram.c:1065 +#, c-format +msgid "Unexpected channel-binding flag \"%s\"." +msgstr "予期しないチャネル割り当てフラグ \"%s\"" + +#: libpq/auth-oauth.c:250 libpq/auth-scram.c:1075 +#, c-format +msgid "client uses authorization identity, but it is not supported" +msgstr "クライアントは認証識別子を使っていますがサポートされていません" + +#: libpq/auth-oauth.c:255 libpq/auth-scram.c:1080 +#, c-format +msgid "Unexpected attribute \"%s\" in client-first-message." +msgstr "client-fist-message での想定外の属性\"%s\"" + +#: libpq/auth-oauth.c:264 +#, c-format +msgid "Key-value separator expected, but found character \"%s\"." +msgstr "キー/値の区切り文字を期待していましたが、文字\"%s\"が見つかりました。" + +#: libpq/auth-oauth.c:273 +#, c-format +msgid "Message does not contain an auth value." +msgstr "メッセージに認証値が含まれていません。" + +#: libpq/auth-oauth.c:280 +#, c-format +msgid "Message contains additional data after the final terminator." +msgstr "メッセージには、最終終端記号の後に追加のデータが含まれています。" + +#: libpq/auth-oauth.c:343 +#, c-format +msgid "Message contains an empty key name." +msgstr "メッセージに空のキー名が含まれています。" + +#: libpq/auth-oauth.c:350 +#, c-format +msgid "Message contains an invalid key name." +msgstr "メッセージに不正なキー名が含まれています。" + +#: libpq/auth-oauth.c:376 +#, c-format +msgid "Message contains an invalid value." +msgstr "メッセージに不正な値が含まれてます。" + +#: libpq/auth-oauth.c:421 +#, c-format +msgid "Message contains an unterminated key/value pair." +msgstr "メッセージに終端されていないキー/値ペアが含まれています。" + +#: libpq/auth-oauth.c:439 +#, c-format +msgid "Message contains a key without a value." +msgstr "メッセージに値を伴わないキーが含まれています。" + +#: libpq/auth-oauth.c:453 +#, c-format +msgid "Message contains multiple auth values." +msgstr "メッセージに複数の認証値が含まれています。" + +#: libpq/auth-oauth.c:473 +#, c-format +msgid "Message did not contain a final terminator." +msgstr "メッセージに最終終端記号がありません。" + +#: libpq/auth-oauth.c:499 +#, c-format +msgid "OAuth is not properly configured for this user" +msgstr "OAuthがこのユーザーに対して適切に設定されていません" + +#: libpq/auth-oauth.c:500 +#, c-format +msgid "The issuer and scope parameters must be set in pg_hba.conf." +msgstr "issuerとscopeのパラメータは pg_hba.conf で設定する必要があります。" + +#: libpq/auth-oauth.c:585 libpq/auth-oauth.c:602 libpq/auth-oauth.c:624 +#, c-format +msgid "malformed OAuth bearer token" +msgstr "不正な形式のBearerトークン" + +#: libpq/auth-oauth.c:586 +#, c-format +msgid "Client response indicated a non-Bearer authentication scheme." +msgstr "クライアントの応答はBearer以外の認証スキームを示していました。" + +#: libpq/auth-oauth.c:603 +#, c-format +msgid "Bearer token is empty." +msgstr "Beareトークンが空です。" + +#: libpq/auth-oauth.c:625 +#, c-format +msgid "Bearer token is not in the correct format." +msgstr "Bearerトークンのフォーマットが正しくありません。" + +#: libpq/auth-oauth.c:656 +#, c-format +msgid "validation of OAuth token requested without a validator loaded" +msgstr "バリデータがロードされていない状態で、OAuthトークンの検証が要求されました" + +#: libpq/auth-oauth.c:665 +#, c-format +msgid "internal error in OAuth validator module" +msgstr "OAuthバリデータの内部エラー" + +#: libpq/auth-oauth.c:679 libpq/auth-oauth.c:703 libpq/auth.c:294 +#, c-format +msgid "OAuth bearer authentication failed for user \"%s\"" +msgstr "ユーザー \"%s\" の OAuth Bearer 認証に失敗しました" + +#: libpq/auth-oauth.c:681 +#, c-format +msgid "Validator failed to authorize the provided token." +msgstr "バリデータは、与えられたトークンを認可できませんでした。" + +#: libpq/auth-oauth.c:705 +#, c-format +msgid "Validator provided no identity." +msgstr "バリデータが識別情報を提供しませんでした。" + +#: libpq/auth-oauth.c:760 +#, c-format +msgid "%s module \"%s\" must define the symbol %s" +msgstr "%s モジュール \"%s\" はシンボル %s を定義する必要があります" + +#: libpq/auth-oauth.c:773 +#, c-format +msgid "%s module \"%s\": magic number mismatch" +msgstr "%s モジュール \"%s\": マジックナンバーが不一致です" + +#: libpq/auth-oauth.c:775 +#, c-format +msgid "Server has magic number 0x%08X, module has 0x%08X." +msgstr "サーバーのマジックナンバーは 0x%08X ですが、モジュールのマジックナンバーは 0x%08X です。" + +#: libpq/auth-oauth.c:784 +#, c-format +msgid "%s module \"%s\" must provide a %s callback" +msgstr "%s モジュール \"%s\" は %s コールバックを実装する必要があります" + +#: libpq/auth-oauth.c:833 +#, c-format +msgid "oauth_validator_libraries must be set for authentication method %s" +msgstr "認証方式 %s では、oauth_validator_libraries を設定しなければなりません。" + +#: libpq/auth-oauth.c:835 libpq/auth-oauth.c:868 libpq/auth-oauth.c:884 libpq/hba.c:331 libpq/hba.c:666 libpq/hba.c:1251 libpq/hba.c:1271 libpq/hba.c:1294 libpq/hba.c:1307 libpq/hba.c:1360 libpq/hba.c:1388 libpq/hba.c:1396 libpq/hba.c:1408 libpq/hba.c:1429 libpq/hba.c:1442 libpq/hba.c:1467 libpq/hba.c:1494 libpq/hba.c:1506 libpq/hba.c:1565 libpq/hba.c:1585 libpq/hba.c:1599 libpq/hba.c:1619 libpq/hba.c:1630 libpq/hba.c:1645 libpq/hba.c:1664 libpq/hba.c:1680 +#: libpq/hba.c:1692 libpq/hba.c:1760 libpq/hba.c:1773 libpq/hba.c:1795 libpq/hba.c:1807 libpq/hba.c:1825 libpq/hba.c:1875 libpq/hba.c:1919 libpq/hba.c:1930 libpq/hba.c:1946 libpq/hba.c:1963 libpq/hba.c:1974 libpq/hba.c:1993 libpq/hba.c:2009 libpq/hba.c:2025 libpq/hba.c:2069 libpq/hba.c:2115 libpq/hba.c:2132 libpq/hba.c:2145 libpq/hba.c:2157 libpq/hba.c:2176 libpq/hba.c:2262 libpq/hba.c:2280 libpq/hba.c:2374 libpq/hba.c:2393 libpq/hba.c:2422 libpq/hba.c:2435 +#: libpq/hba.c:2458 libpq/hba.c:2480 libpq/hba.c:2517 tsearch/ts_locale.c:196 +#, c-format +msgid "line %d of configuration file \"%s\"" +msgstr "設定ファイル \"%2$s\" の %1$d 行目" + +#: libpq/auth-oauth.c:867 +#, c-format +msgid "authentication method \"oauth\" requires argument \"validator\" to be set when oauth_validator_libraries contains multiple options" +msgstr "認証方式 \"oauth\" で、oauth_validator_libraries に複数のオプションを指定する場合は、引数 \"validator\" を設定する必要があります" + +#: libpq/auth-oauth.c:882 +#, c-format +msgid "validator \"%s\" is not permitted by %s" +msgstr "バリデータ \"%s\" は %s により許可されていません" + +#: libpq/auth-sasl.c:89 +#, c-format +msgid "expected SASL response, got message type %d" +msgstr "SASL応答を想定していましたが、メッセージタイプ%dを受け取りました" + +#: libpq/auth-scram.c:291 libpq/auth-scram.c:547 libpq/auth-scram.c:558 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "ユーザー\"%s\"に対する不正なSCRAMシークレット" -#: libpq/auth-scram.c:298 +#: libpq/auth-scram.c:302 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "ユーザー\"%s\"は有効なSCRAMシークレットを持ちません。" -#: libpq/auth-scram.c:378 libpq/auth-scram.c:383 libpq/auth-scram.c:737 libpq/auth-scram.c:745 libpq/auth-scram.c:850 libpq/auth-scram.c:863 libpq/auth-scram.c:873 libpq/auth-scram.c:981 libpq/auth-scram.c:988 libpq/auth-scram.c:1003 libpq/auth-scram.c:1018 libpq/auth-scram.c:1032 libpq/auth-scram.c:1050 libpq/auth-scram.c:1065 libpq/auth-scram.c:1379 libpq/auth-scram.c:1387 +#: libpq/auth-scram.c:382 libpq/auth-scram.c:387 libpq/auth-scram.c:751 libpq/auth-scram.c:759 libpq/auth-scram.c:864 libpq/auth-scram.c:877 libpq/auth-scram.c:887 libpq/auth-scram.c:995 libpq/auth-scram.c:1002 libpq/auth-scram.c:1017 libpq/auth-scram.c:1032 libpq/auth-scram.c:1046 libpq/auth-scram.c:1064 libpq/auth-scram.c:1079 libpq/auth-scram.c:1392 libpq/auth-scram.c:1400 #, c-format msgid "malformed SCRAM message" msgstr "不正なフォーマットのSCRAMメッセージです" -#: libpq/auth-scram.c:379 -#, c-format -msgid "The message is empty." -msgstr "メッセージが空です。" - -#: libpq/auth-scram.c:384 -#, c-format -msgid "Message length does not match input length." -msgstr "メッセージの長さが入力の長さと一致しません" - -#: libpq/auth-scram.c:416 +#: libpq/auth-scram.c:420 #, c-format msgid "invalid SCRAM response" msgstr "不正なSCRAM応答" -#: libpq/auth-scram.c:417 +#: libpq/auth-scram.c:421 #, c-format msgid "Nonce does not match." msgstr "Nonce が合致しません" -#: libpq/auth-scram.c:493 +#: libpq/auth-scram.c:504 #, c-format msgid "could not generate random salt" msgstr "乱数ソルトを生成できませんでした" -#: libpq/auth-scram.c:738 +#: libpq/auth-scram.c:752 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "属性\"%c\"を想定していましたが、\"%s\"でした。" -#: libpq/auth-scram.c:746 libpq/auth-scram.c:874 +#: libpq/auth-scram.c:760 libpq/auth-scram.c:888 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "属性\"%c\"としては文字\"=\"を想定していました。" -#: libpq/auth-scram.c:851 +#: libpq/auth-scram.c:865 #, c-format msgid "Attribute expected, but found end of string." msgstr "属性を想定しましたが、文字列が終了しました。" -#: libpq/auth-scram.c:864 +#: libpq/auth-scram.c:878 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "属性を想定しましたが、不正な文字\"%s\"でした。" -#: libpq/auth-scram.c:982 libpq/auth-scram.c:1004 +#: libpq/auth-scram.c:996 libpq/auth-scram.c:1018 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "クライアントは SCRAM-SHA-256-PLUS を選択しましたが、SCRAM メッセージにはチャネルバインディング情報が含まれていません。" -#: libpq/auth-scram.c:989 libpq/auth-scram.c:1019 -#, c-format -msgid "Comma expected, but found character \"%s\"." -msgstr "カンマを想定していましたが、文字\"%s\"が見つかりました" - -#: libpq/auth-scram.c:1010 +#: libpq/auth-scram.c:1024 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "SCRAM チャネルバインディングのネゴシエーションエラー" -#: libpq/auth-scram.c:1011 +#: libpq/auth-scram.c:1025 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "クライアントは SCRAM チャネルバインディングをサポートしていますが、サーバーではサポートされていないと思っています。しかし実際にはサポートしています。" -#: libpq/auth-scram.c:1033 +#: libpq/auth-scram.c:1047 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "クライアントはチャネルバインディングなしの SCRAM-SHA-256 を選択しましたが、SCRAM メッセージにはチャネルバインディング情報が含まれています。" -#: libpq/auth-scram.c:1044 +#: libpq/auth-scram.c:1058 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "SCRAM チャネルバインディングタイプ \"%s\"はサポートされていません" -#: libpq/auth-scram.c:1051 -#, c-format -msgid "Unexpected channel-binding flag \"%s\"." -msgstr "予期しないチャネル割り当てフラグ \"%s\"" - -#: libpq/auth-scram.c:1061 -#, c-format -msgid "client uses authorization identity, but it is not supported" -msgstr "クライアントは認証識別子を使っていますがサポートされていません" - -#: libpq/auth-scram.c:1066 -#, c-format -msgid "Unexpected attribute \"%s\" in client-first-message." -msgstr "client-fist-message での想定外の属性\"%s\"" - -#: libpq/auth-scram.c:1082 +#: libpq/auth-scram.c:1096 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "クライアントはサポート外のSCRAM拡張を要求しています" -#: libpq/auth-scram.c:1096 +#: libpq/auth-scram.c:1110 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "SCRAM nonce の中に表示不能な文字があります" -#: libpq/auth-scram.c:1227 +#: libpq/auth-scram.c:1240 #, c-format msgid "could not generate random nonce" msgstr "乱数nonceを生成できませんでした" -#: libpq/auth-scram.c:1237 +#: libpq/auth-scram.c:1250 #, c-format msgid "could not encode random nonce" msgstr "乱数nonceをエンコードできませんでした" -#: libpq/auth-scram.c:1343 +#: libpq/auth-scram.c:1356 #, c-format msgid "SCRAM channel binding check failed" msgstr "SCRAM チャネルバインディングの確認で失敗しました" -#: libpq/auth-scram.c:1361 +#: libpq/auth-scram.c:1374 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "client-final-message 中に想定外の SCRAM channel-binding 属性がありました" -#: libpq/auth-scram.c:1380 +#: libpq/auth-scram.c:1393 #, c-format msgid "Malformed proof in client-final-message." msgstr "client-final-message 中の proof の形式が不正です" -#: libpq/auth-scram.c:1388 +#: libpq/auth-scram.c:1401 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "client-final-message の終端に不要なデータがあります。" -#: libpq/auth.c:269 +#: libpq/auth.c:254 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "ユーザー\"%s\"の認証に失敗しました: ホストを拒絶しました" -#: libpq/auth.c:272 +#: libpq/auth.c:257 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"の\"trust\"認証に失敗しました" -#: libpq/auth.c:275 +#: libpq/auth.c:260 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のIdent認証に失敗しました" -#: libpq/auth.c:278 +#: libpq/auth.c:263 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"で対向(peer)認証に失敗しました" -#: libpq/auth.c:283 +#: libpq/auth.c:268 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のパスワード認証に失敗しました" -#: libpq/auth.c:288 +#: libpq/auth.c:273 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のGSSAPI認証に失敗しました" -#: libpq/auth.c:291 +#: libpq/auth.c:276 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のSSPI認証に失敗しました" -#: libpq/auth.c:294 +#: libpq/auth.c:279 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のPAM認証に失敗しました" -#: libpq/auth.c:297 +#: libpq/auth.c:282 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のBSD認証に失敗しました" -#: libpq/auth.c:300 +#: libpq/auth.c:285 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のLDAP認証に失敗しました" -#: libpq/auth.c:303 +#: libpq/auth.c:288 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"の証明書認証に失敗しました" -#: libpq/auth.c:306 +#: libpq/auth.c:291 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"の RADIUS 認証に失敗しました" -#: libpq/auth.c:309 +#: libpq/auth.c:297 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "ユーザー\"%s\"の認証に失敗しました: 認証方式が不正です" -#: libpq/auth.c:313 +#: libpq/auth.c:301 #, c-format msgid "Connection matched file \"%s\" line %d: \"%s\"" msgstr "接続はファイル%sの行%dに一致しました: \"%s\"" -#: libpq/auth.c:357 +#: libpq/auth.c:346 #, c-format msgid "authentication identifier set more than once" msgstr "認証識別子が2度以上設定されました" -#: libpq/auth.c:358 +#: libpq/auth.c:347 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "以前の識別子: \"%s\"; 新しい識別子: \"%s\"" -#: libpq/auth.c:368 +#: libpq/auth.c:357 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "接続認証完了: 識別名=\"%s\" 方式=%s (%s:%d)" -#: libpq/auth.c:408 +#: libpq/auth.c:397 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "クライアント証明書はルート証明書ストアが利用できる場合にのみ検証されます" -#: libpq/auth.c:419 +#: libpq/auth.c:408 #, c-format msgid "connection requires a valid client certificate" msgstr "この接続には有効なクライアント証明が必要です" -#: libpq/auth.c:450 libpq/auth.c:496 +#: libpq/auth.c:439 libpq/auth.c:485 msgid "GSS encryption" msgstr "GSS暗号化" -#: libpq/auth.c:453 libpq/auth.c:499 +#: libpq/auth.c:442 libpq/auth.c:488 msgid "SSL encryption" msgstr "SSL暗号化" -#: libpq/auth.c:455 libpq/auth.c:501 +#: libpq/auth.c:444 libpq/auth.c:490 msgid "no encryption" msgstr "暗号化なし" #. translator: last %s describes encryption state -#: libpq/auth.c:461 +#: libpq/auth.c:450 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf の設定でホスト \"%s\"、ユーザー \"%s\", %s 用のレプリケーション接続を拒否しました" #. translator: last %s describes encryption state -#: libpq/auth.c:468 +#: libpq/auth.c:457 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf の設定でホスト \"%s\"、ユーザー \"%s\"、データベース \"%s\", %sの接続を拒否しました" -#: libpq/auth.c:506 +#: libpq/auth.c:495 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "クライアントIPアドレスは\"%s\"に解決され、前方検索と一致しました。" -#: libpq/auth.c:509 +#: libpq/auth.c:498 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "クライアントIPアドレスは\"%s\"に解決されました。前方検索は検査されません。" -#: libpq/auth.c:512 +#: libpq/auth.c:501 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "クライアントIPアドレスは\"%s\"に解決され、前方検索と一致しませんでした。" -#: libpq/auth.c:515 +#: libpq/auth.c:504 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "クライアントのホスト名\"%s\"をIPアドレスに変換できませんでした: %s。" -#: libpq/auth.c:520 +#: libpq/auth.c:509 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "クライアントのIPアドレスをホスト名に解決できませんでした: %s。" #. translator: last %s describes encryption state -#: libpq/auth.c:528 +#: libpq/auth.c:517 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf にホスト\"%s\"、ユーザー\"%s\", %s用のエントリがありません" #. translator: last %s describes encryption state -#: libpq/auth.c:536 +#: libpq/auth.c:525 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf にホスト\"%s\"、ユーザー\"%s\"、データベース\"%s, %s用のエントリがありません" -#: libpq/auth.c:656 +#: libpq/auth.c:649 #, c-format msgid "connection authenticated: user=\"%s\" method=%s (%s:%d)" msgstr "接続認証完了: ユーザー=\"%s\" 方式=%s (%s:%d)" -#: libpq/auth.c:725 +#: libpq/auth.c:718 #, c-format msgid "expected password response, got message type %d" msgstr "パスワード応答を想定しましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:746 +#: libpq/auth.c:739 #, c-format msgid "invalid password packet size" msgstr "パスワードパケットのサイズが不正です" -#: libpq/auth.c:764 +#: libpq/auth.c:757 #, c-format msgid "empty password returned by client" msgstr "クライアントから空のパスワードが返されました" -#: libpq/auth.c:892 +#: libpq/auth.c:885 #, c-format msgid "could not generate random MD5 salt" msgstr "ランダムなMD5ソルトの生成に失敗しました" -#: libpq/auth.c:943 libpq/be-secure-gssapi.c:540 +#: libpq/auth.c:936 libpq/be-secure-gssapi.c:543 #, c-format msgid "could not set environment: %m" msgstr "環境を設定できません: %m" -#: libpq/auth.c:982 +#: libpq/auth.c:975 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS応答を想定しましたが、メッセージタイプ %d を受け取りました" -#: libpq/auth.c:1048 +#: libpq/auth.c:1041 msgid "accepting GSS security context failed" msgstr "GSSセキュリティコンテキストの受け付けに失敗しました" -#: libpq/auth.c:1089 +#: libpq/auth.c:1082 msgid "retrieving GSS user name failed" msgstr "GSSユーザー名の受信に失敗しました" -#: libpq/auth.c:1235 +#: libpq/auth.c:1228 msgid "could not acquire SSPI credentials" msgstr "SSPIの資格ハンドルを入手できませんでした" -#: libpq/auth.c:1260 +#: libpq/auth.c:1253 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI応答を想定しましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:1338 +#: libpq/auth.c:1331 msgid "could not accept SSPI security context" msgstr "SSPIセキュリティコンテキストを受け付けられませんでした" -#: libpq/auth.c:1379 +#: libpq/auth.c:1372 msgid "could not get token from SSPI security context" msgstr "SSPIセキュリティコンテキストからトークンを入手できませんでした" -#: libpq/auth.c:1515 libpq/auth.c:1534 +#: libpq/auth.c:1508 libpq/auth.c:1527 #, c-format msgid "could not translate name" msgstr "名前の変換ができませんでした" -#: libpq/auth.c:1547 +#: libpq/auth.c:1540 #, c-format msgid "realm name too long" msgstr "realm名が長すぎます" -#: libpq/auth.c:1562 +#: libpq/auth.c:1555 #, c-format msgid "translated account name too long" msgstr "変換後のアカウント名が長すぎます" -#: libpq/auth.c:1741 +#: libpq/auth.c:1734 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "Ident接続用のソケットを作成できませんでした: %m" -#: libpq/auth.c:1756 +#: libpq/auth.c:1749 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "ローカルアドレス\"%s\"にバインドできませんでした: %m" -#: libpq/auth.c:1768 +#: libpq/auth.c:1761 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバーに接続できませんでした: %m" -#: libpq/auth.c:1790 +#: libpq/auth.c:1783 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバーに問い合わせを送信できませんでした: %m" -#: libpq/auth.c:1807 +#: libpq/auth.c:1800 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバーからの応答を受信できませんでした: %m" -#: libpq/auth.c:1817 +#: libpq/auth.c:1810 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "Identサーバーからの応答の書式が不正です: \"%s\"" -#: libpq/auth.c:1870 +#: libpq/auth.c:1866 #, c-format msgid "peer authentication is not supported on this platform" msgstr "このプラットフォームでは対向(peer)認証はサポートされていません" -#: libpq/auth.c:1874 +#: libpq/auth.c:1870 #, c-format msgid "could not get peer credentials: %m" msgstr "ピアの資格証明を入手できませんでした: %m" +#: libpq/auth.c:1880 +#, c-format +msgid "could not look up local user ID %ld: %m" +msgstr "ローカルユーザーID %ldの参照に失敗しました: %m" + #: libpq/auth.c:1886 #, c-format -msgid "could not look up local user ID %ld: %s" -msgstr "ローカルユーザーID %ldの参照に失敗しました: %s" +msgid "local user with ID %ld does not exist" +msgstr "ID %ld を持つローカルユーザーは存在しません" -#: libpq/auth.c:1988 +#: libpq/auth.c:1986 #, c-format msgid "error from underlying PAM layer: %s" msgstr "背後のPAM層でエラーがありました: %s" -#: libpq/auth.c:1999 +#: libpq/auth.c:1997 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "非サポートのPAM変換%d/\"%s\"" -#: libpq/auth.c:2056 +#: libpq/auth.c:2054 #, c-format msgid "could not create PAM authenticator: %s" msgstr "PAM authenticatorを作成できませんでした: %s" -#: libpq/auth.c:2067 +#: libpq/auth.c:2065 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER)が失敗しました: %s" -#: libpq/auth.c:2099 +#: libpq/auth.c:2097 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST)が失敗しました: %s" -#: libpq/auth.c:2111 +#: libpq/auth.c:2109 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "\"pam_set_item(PAM_CONV)が失敗しました: %s" -#: libpq/auth.c:2124 +#: libpq/auth.c:2122 #, c-format msgid "pam_authenticate failed: %s" msgstr "\"pam_authenticateが失敗しました: %s" -#: libpq/auth.c:2137 +#: libpq/auth.c:2135 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmtが失敗しました: %s" -#: libpq/auth.c:2148 +#: libpq/auth.c:2146 #, c-format msgid "could not release PAM authenticator: %s" msgstr "PAM authenticatorを解放できませんでした: %s" -#: libpq/auth.c:2228 +#: libpq/auth.c:2226 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "LDAPを初期化できませんでした: %d" -#: libpq/auth.c:2265 +#: libpq/auth.c:2263 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "ldapbasedn からドメイン名を抽出できませんでした" -#: libpq/auth.c:2273 +#: libpq/auth.c:2271 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP認証で\"%s\"に対する DNS SRV レコードが見つかりませんでした" -#: libpq/auth.c:2275 +#: libpq/auth.c:2273 #, c-format msgid "Set an LDAP server name explicitly." msgstr "LDAPサーバー名を明示的に指定してください。" -#: libpq/auth.c:2327 +#: libpq/auth.c:2325 #, c-format msgid "could not initialize LDAP: %s" msgstr "LDAPを初期化できませんでした: %s" -#: libpq/auth.c:2337 +#: libpq/auth.c:2335 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "この LDAP ライブラリでは ldaps はサポートされていません" -#: libpq/auth.c:2345 +#: libpq/auth.c:2343 #, c-format msgid "could not initialize LDAP: %m" msgstr "LDAPを初期化できませんでした: %m" -#: libpq/auth.c:2355 +#: libpq/auth.c:2353 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "LDAPプロトコルバージョンを設定できませんでした: %s" -#: libpq/auth.c:2371 +#: libpq/auth.c:2369 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "LDAP TLSセッションを開始できませんでした: %s" -#: libpq/auth.c:2448 +#: libpq/auth.c:2446 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP サーバーも ldapbasedn も指定されていません" -#: libpq/auth.c:2455 +#: libpq/auth.c:2453 #, c-format msgid "LDAP server not specified" msgstr "LDAP サーバーの指定がありません" -#: libpq/auth.c:2517 +#: libpq/auth.c:2515 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "LDAP 認証でユーザー名の中に不正な文字があります" -#: libpq/auth.c:2534 +#: libpq/auth.c:2532 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "サーバー\"%2$s\"で、ldapbinddn \"%1$s\"によるLDAPバインドを実行できませんでした: %3$s" -#: libpq/auth.c:2564 +#: libpq/auth.c:2562 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "サーバー\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索ができませんでした: %3$s" -#: libpq/auth.c:2580 +#: libpq/auth.c:2578 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAPサーバー\"%s\"は存在しません" -#: libpq/auth.c:2581 +#: libpq/auth.c:2579 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "サーバー\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が何も返しませんでした。" -#: libpq/auth.c:2585 +#: libpq/auth.c:2583 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAPユーザー\"%s\"は一意ではありません" -#: libpq/auth.c:2586 +#: libpq/auth.c:2584 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "サーバー\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が%3$d項目返しました。" -#: libpq/auth.c:2606 +#: libpq/auth.c:2604 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "サーバー\"%2$s\"で\"%1$s\"にマッチする最初のエントリの dn を取得できません: %3$s" -#: libpq/auth.c:2633 +#: libpq/auth.c:2631 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "サーバー\"%2$s\"でユーザー\"%1$s\"のLDAPログインが失敗しました: %3$s" -#: libpq/auth.c:2665 +#: libpq/auth.c:2663 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP診断: %s" -#: libpq/auth.c:2703 +#: libpq/auth.c:2701 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "ユーザー \"%s\" の証明書認証に失敗しました: クライアント証明書にユーザー名が含まれていません" -#: libpq/auth.c:2724 +#: libpq/auth.c:2722 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "ユーザー\"%s\"の証明書認証に失敗しました: サブジェクト識別名(DN)が取得できません" -#: libpq/auth.c:2747 +#: libpq/auth.c:2745 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "ユーザー\"%s\"に対する証明書の検証(clientcert=verify-full) に失敗しました: DN 不一致" -#: libpq/auth.c:2752 +#: libpq/auth.c:2750 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "ユーザー\"%s\"に対する証明書の検証(clientcert=verify-full) に失敗しました: CN 不一致" -#: libpq/auth.c:2854 +#: libpq/auth.c:2852 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS サーバーが指定されていません" -#: libpq/auth.c:2861 +#: libpq/auth.c:2859 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS secret が指定されていません" -#: libpq/auth.c:2875 +#: libpq/auth.c:2873 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS認証では%d文字より長いパスワードはサポートしていません" -#: libpq/auth.c:2977 libpq/hba.c:2352 +#: libpq/auth.c:2975 libpq/hba.c:2391 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "RADIUS サーバー名\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/auth.c:2991 +#: libpq/auth.c:2989 #, c-format msgid "could not generate random encryption vector" msgstr "ランダムな暗号化ベクトルを生成できませんでした" -#: libpq/auth.c:3028 +#: libpq/auth.c:3026 #, c-format msgid "could not perform MD5 encryption of password: %s" msgstr "パスワードのMD5暗号化に失敗しました: %s" -#: libpq/auth.c:3055 +#: libpq/auth.c:3053 #, c-format msgid "could not create RADIUS socket: %m" msgstr "RADIUSのソケットを作成できませんでした: %m" -#: libpq/auth.c:3071 +#: libpq/auth.c:3069 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "ローカルの RADIUS ソケットをバインドできませんでした: %m" -#: libpq/auth.c:3081 +#: libpq/auth.c:3079 #, c-format msgid "could not send RADIUS packet: %m" msgstr "RADIUS パケットを送信できませんでした: %m" -#: libpq/auth.c:3115 libpq/auth.c:3141 +#: libpq/auth.c:3113 libpq/auth.c:3139 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "%sからのRADIUSの応答待ちがタイムアウトしました" -#: libpq/auth.c:3134 +#: libpq/auth.c:3132 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "RADIUSソケットの状態をチェックできませんでした: %m" -#: libpq/auth.c:3164 +#: libpq/auth.c:3162 #, c-format msgid "could not read RADIUS response: %m" msgstr "RADIUS応答を読めませんでした: %m" -#: libpq/auth.c:3172 +#: libpq/auth.c:3170 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "%sからのRADIUS応答が誤ったポートから送られてきました: %d" -#: libpq/auth.c:3180 +#: libpq/auth.c:3178 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "%sからのRADIUS応答が短すぎます: %d" -#: libpq/auth.c:3187 +#: libpq/auth.c:3185 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "%sからのRADIUS応答が間違った長さを保持しています: %d(実際の長さは%d)" -#: libpq/auth.c:3195 +#: libpq/auth.c:3193 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "%sからのRADIUS応答は異なるリクエストに対するものです: %d (%d であるはず)" @@ -15072,7 +15489,7 @@ msgstr "%sからのRADIUS応答が間違ったMD5シグネチャを保持して msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "%1$sからのRADIUS応答がユーザー\"%3$s\"にとって不正なコード(%2$d)を保持しています" -#: libpq/be-fsstubs.c:133 libpq/be-fsstubs.c:162 libpq/be-fsstubs.c:190 libpq/be-fsstubs.c:216 libpq/be-fsstubs.c:241 libpq/be-fsstubs.c:283 libpq/be-fsstubs.c:306 libpq/be-fsstubs.c:560 +#: libpq/be-fsstubs.c:133 libpq/be-fsstubs.c:162 libpq/be-fsstubs.c:190 libpq/be-fsstubs.c:216 libpq/be-fsstubs.c:241 libpq/be-fsstubs.c:283 libpq/be-fsstubs.c:306 libpq/be-fsstubs.c:565 #, c-format msgid "invalid large-object descriptor: %d" msgstr "ラージオブジェクト記述子が不正です: %d" @@ -15082,7 +15499,7 @@ msgstr "ラージオブジェクト記述子が不正です: %d" msgid "large object descriptor %d was not opened for reading" msgstr "ラージオブジェクト記述子 %d は読み込み用にオープンされていませんでした" -#: libpq/be-fsstubs.c:197 libpq/be-fsstubs.c:567 +#: libpq/be-fsstubs.c:197 libpq/be-fsstubs.c:572 #, c-format msgid "large object descriptor %d was not opened for writing" msgstr "ラージオブジェクト記述子%dは書き込み用に開かれていませんでした" @@ -15097,32 +15514,32 @@ msgstr "lo_lseekの結果がラージオブジェクト記述子の範囲%dを msgid "lo_tell result out of range for large-object descriptor %d" msgstr "lo_tellの結果がラージオブジェクト記述子の範囲%dを超えています" -#: libpq/be-fsstubs.c:439 +#: libpq/be-fsstubs.c:444 #, c-format msgid "could not open server file \"%s\": %m" msgstr "サーバーファイル\"%s\"をオープンできませんでした: %m" -#: libpq/be-fsstubs.c:462 +#: libpq/be-fsstubs.c:467 #, c-format msgid "could not read server file \"%s\": %m" msgstr "サーバーファイル\"%s\"を読み取れませんでした: %m" -#: libpq/be-fsstubs.c:521 +#: libpq/be-fsstubs.c:526 #, c-format msgid "could not create server file \"%s\": %m" msgstr "サーバーファイル\"%s\"を作成できませんでした: %m" -#: libpq/be-fsstubs.c:533 +#: libpq/be-fsstubs.c:538 #, c-format msgid "could not write server file \"%s\": %m" msgstr "サーバーファイル\"%s\"を書き出せませんでした: %m" -#: libpq/be-fsstubs.c:774 +#: libpq/be-fsstubs.c:779 #, c-format msgid "large object read request is too large" msgstr "ラージオブジェクトの読み込み要求が大きすぎます" -#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:248 utils/adt/genfile.c:269 +#: libpq/be-fsstubs.c:821 utils/adt/genfile.c:248 utils/adt/genfile.c:269 #, c-format msgid "requested length cannot be negative" msgstr "負の長さを指定することはできません" @@ -15157,805 +15574,840 @@ msgstr "秘密鍵ファイル\"%s\"はグループまたは全員からアクセ msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "ファイルはデータベースユーザーの所有の場合は u=rw (0600) かそれよりも低いパーミッション、root所有の場合は u=rw,g=r (0640) かそれよりも低いパーミッションである必要があります" -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:202 msgid "GSSAPI wrap error" msgstr "GSSAPI名ラップエラー" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:209 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "送出されるGSSAPIメッセージに機密性が適用されません" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:634 +#: libpq/be-secure-gssapi.c:216 libpq/be-secure-gssapi.c:637 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "サーバーは過大なサイズのGSSAPIパケットを送信しようとしました: (%zu > %zu)" -#: libpq/be-secure-gssapi.c:351 +#: libpq/be-secure-gssapi.c:352 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: (%zu > %zu)" -#: libpq/be-secure-gssapi.c:389 +#: libpq/be-secure-gssapi.c:390 msgid "GSSAPI unwrap error" msgstr "GSSAPIアンラップエラー" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:397 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "到着したGSSAPIメッセージには機密性が適用されていません" -#: libpq/be-secure-gssapi.c:575 +#: libpq/be-secure-gssapi.c:578 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: (%zu > %d)" -#: libpq/be-secure-gssapi.c:600 +#: libpq/be-secure-gssapi.c:603 msgid "could not accept GSSAPI security context" msgstr "GSSAPIセキュリティコンテキストを受け入れられませんでした" -#: libpq/be-secure-gssapi.c:701 +#: libpq/be-secure-gssapi.c:704 msgid "GSSAPI size check error" msgstr "GSSAPIサイズチェックエラー" -#: libpq/be-secure-openssl.c:131 +#: libpq/be-secure-openssl.c:118 #, c-format msgid "could not create SSL context: %s" msgstr "SSLコンテキストを作成できませんでした: %s" -#: libpq/be-secure-openssl.c:157 +#: libpq/be-secure-openssl.c:144 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "サーバー証明書ファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:177 +#: libpq/be-secure-openssl.c:164 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "パスフレーズが要求されたため秘密鍵ファイル\"%s\"をリロードできませんでした" -#: libpq/be-secure-openssl.c:182 +#: libpq/be-secure-openssl.c:169 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "秘密鍵ファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:191 +#: libpq/be-secure-openssl.c:178 #, c-format msgid "check of private key failed: %s" msgstr "秘密鍵の検査に失敗しました: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 +#: libpq/be-secure-openssl.c:191 libpq/be-secure-openssl.c:214 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "このビルドでは\"%s\"の\"%s\"への設定はサポートされていません" -#: libpq/be-secure-openssl.c:214 +#: libpq/be-secure-openssl.c:201 #, c-format msgid "could not set minimum SSL protocol version" msgstr "最小SSLプロトコルバージョンを設定できませんでした" -#: libpq/be-secure-openssl.c:237 +#: libpq/be-secure-openssl.c:224 #, c-format msgid "could not set maximum SSL protocol version" msgstr "最大SSLプロトコルバージョンを設定できませんでした" -#: libpq/be-secure-openssl.c:253 +#: libpq/be-secure-openssl.c:241 #, c-format msgid "could not set SSL protocol version range" msgstr "SSLプロトコルバージョンの範囲を設定できませんでした" -#: libpq/be-secure-openssl.c:254 +#: libpq/be-secure-openssl.c:242 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\"は\"%s\"より大きくできません" -#: libpq/be-secure-openssl.c:296 +#: libpq/be-secure-openssl.c:295 +#, c-format +msgid "could not set the TLSv1.2 cipher list (no valid ciphers available)" +msgstr " TLSv1.2 の暗号方式リストが設定できませんでした (有効な暗号方式がありません)" + +#: libpq/be-secure-openssl.c:310 #, c-format -msgid "could not set the cipher list (no valid ciphers available)" -msgstr "暗号方式リストがセットできません (利用可能な暗号方式がありません)" +msgid "could not set the TLSv1.3 cipher suites (no valid ciphers available)" +msgstr " TLSv1.3 の暗号スイートが設定できませんでした (有効な暗号方式がありません)" -#: libpq/be-secure-openssl.c:316 +#: libpq/be-secure-openssl.c:331 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "ルート証明書ファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:365 +#: libpq/be-secure-openssl.c:380 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "SSL証明失効リストファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:373 +#: libpq/be-secure-openssl.c:388 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "SSL証明失効リストディレクトリ\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:381 +#: libpq/be-secure-openssl.c:396 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "SSL証明失効リストファイル\"%s\"またはディレクトリ\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:454 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "SSL接続を初期化できませんでした: SSLコンテクストが準備できていません" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:468 #, c-format msgid "could not initialize SSL connection: %s" msgstr "SSL接続を初期化できませんでした: %s" -#: libpq/be-secure-openssl.c:461 +#: libpq/be-secure-openssl.c:476 #, c-format msgid "could not set SSL socket: %s" msgstr "SSLソケットを設定できませんでした: %s" -#: libpq/be-secure-openssl.c:517 +#: libpq/be-secure-openssl.c:532 #, 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:536 libpq/be-secure-openssl.c:593 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "SSL接続を受け付けられませんでした: EOFを検出しました" -#: libpq/be-secure-openssl.c:562 +#: libpq/be-secure-openssl.c:577 #, c-format msgid "could not accept SSL connection: %s" msgstr "SSL接続を受け付けられませんでした: %s" -#: libpq/be-secure-openssl.c:566 +#: libpq/be-secure-openssl.c:581 #, c-format msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." msgstr "このことは、クライアントがSSLプロトコルのバージョン%sから%sのいずれもサポートしていないことを示唆しているかもしれません。" -#: libpq/be-secure-openssl.c:583 libpq/be-secure-openssl.c:798 libpq/be-secure-openssl.c:868 +#: libpq/be-secure-openssl.c:598 libpq/be-secure-openssl.c:813 libpq/be-secure-openssl.c:883 #, c-format msgid "unrecognized SSL error code: %d" msgstr "認識できないSSLエラーコード: %d" -#: libpq/be-secure-openssl.c:611 +#: libpq/be-secure-openssl.c:626 #, c-format msgid "received SSL connection request with unexpected ALPN protocol" msgstr "想定外のALPNプロトコルによるSSL接続要求を受信しました" -#: libpq/be-secure-openssl.c:655 +#: libpq/be-secure-openssl.c:670 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL 証明書のコモンネームに null が含まれています" -#: libpq/be-secure-openssl.c:701 +#: libpq/be-secure-openssl.c:716 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "SSL証明書の識別名の途中にnullが含まれています" -#: libpq/be-secure-openssl.c:787 libpq/be-secure-openssl.c:852 +#: libpq/be-secure-openssl.c:802 libpq/be-secure-openssl.c:867 #, c-format msgid "SSL error: %s" msgstr "SSLエラー: %s" -#: libpq/be-secure-openssl.c:1027 +#: libpq/be-secure-openssl.c:1050 #, 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:1062 #, c-format msgid "could not load DH parameters file: %s" msgstr "DHパラメータをロードできませんでした: %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1072 #, c-format msgid "invalid DH parameters: %s" msgstr "不正なDHパラメータです: %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1081 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "不正なDHパラメータ: pは素数ではありません" -#: libpq/be-secure-openssl.c:1067 +#: libpq/be-secure-openssl.c:1090 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "不正なDHパラメータ: 適切な生成器も安全な素数もありません" -#: libpq/be-secure-openssl.c:1203 +#: libpq/be-secure-openssl.c:1226 #, 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:1263 #, 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:1264 msgid "unknown" msgstr "不明" -#: libpq/be-secure-openssl.c:1378 +#: libpq/be-secure-openssl.c:1401 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: DHパラメータをロードできませんでした" -#: libpq/be-secure-openssl.c:1386 +#: libpq/be-secure-openssl.c:1409 #, 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:1439 #, c-format -msgid "ECDH: unrecognized curve name: %s" -msgstr "ECDH: 認識できない曲線名: %s" +msgid "failed to set group names specified in ssl_groups: %s" +msgstr "ssl_groupsで指定されたグループ名の設定に失敗しました: %s" -#: libpq/be-secure-openssl.c:1422 +#: libpq/be-secure-openssl.c:1441 +msgid "No valid groups found" +msgstr "有効なグループが見つかりませんでした" + +#: libpq/be-secure-openssl.c:1442 #, c-format -msgid "ECDH: could not create key" -msgstr "ECDH: キーを生成できませんでした" +msgid "Ensure that each group name is spelled correctly and supported by the installed version of OpenSSL" +msgstr "すべてのグループ名が正しく記述されおり、インストールされているバージョンのOpenSSLでサポートされていることを確認してください" -#: libpq/be-secure-openssl.c:1450 +#: libpq/be-secure-openssl.c:1488 msgid "no SSL error reported" msgstr "SSLエラーはありませんでした" -#: libpq/be-secure-openssl.c:1467 +#: libpq/be-secure-openssl.c:1506 #, c-format msgid "SSL error code %lu" msgstr "SSLエラーコード: %lu" -#: libpq/be-secure-openssl.c:1624 +#: libpq/be-secure-openssl.c:1663 #, c-format msgid "could not create BIO" msgstr "BIOを作成できませんでした" -#: libpq/be-secure-openssl.c:1634 +#: libpq/be-secure-openssl.c:1673 #, 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:1681 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "NID %dをASN1_OBJECT構造体へ変換できませんでした" -#: libpq/crypt.c:48 +#: libpq/crypt.c:50 #, c-format msgid "Role \"%s\" does not exist." msgstr "ロール\"%s\"は存在しません。" -#: libpq/crypt.c:58 +#: libpq/crypt.c:60 #, c-format msgid "User \"%s\" has no password assigned." msgstr "ユーザー\"%s\"はパスワードが設定されていません。" -#: libpq/crypt.c:76 +#: libpq/crypt.c:78 #, c-format msgid "User \"%s\" has an expired password." msgstr "ユーザー\"%s\"のパスワードは期限切れです。" -#: libpq/crypt.c:182 +#: libpq/crypt.c:174 #, c-format -msgid "User \"%s\" has a password that cannot be used with MD5 authentication." -msgstr "ユーザー\"%s\"のパスワードはMD5認証で使用不能です。" +msgid "encrypted password is too long" +msgstr "暗号化されたパスワードが長すぎます" -#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 +#: libpq/crypt.c:175 #, c-format -msgid "Password does not match for user \"%s\"." -msgstr "ユーザー\"%s\"のパスワードが合致しません。" +msgid "Encrypted passwords must be no longer than %d bytes." +msgstr "暗号化されたパスワードは%dバイト以下でなければなりません。" -#: libpq/crypt.c:284 +#: libpq/crypt.c:183 #, c-format -msgid "Password of user \"%s\" is in unrecognized format." -msgstr "ユーザー\"%s\"のパスワードは識別不能な形式です。" +msgid "setting an MD5-encrypted password" +msgstr "MD5暗号化パスワードを設定しています" -#: libpq/hba.c:327 +#: libpq/crypt.c:184 #, c-format -msgid "invalid regular expression \"%s\": %s" -msgstr "不正な正規表現\"%s\": %s" +msgid "MD5 password support is deprecated and will be removed in a future release of PostgreSQL." +msgstr "MD5パスワードは非推奨であり、PostgreSQLの将来のリリースでは廃止される予定です。" -#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 -#: libpq/hba.c:1799 libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 tsearch/ts_locale.c:241 +#: libpq/crypt.c:185 #, c-format -msgid "line %d of configuration file \"%s\"" -msgstr "設定ファイル \"%2$s\" の %1$d 行目" +msgid "Refer to the PostgreSQL documentation for details about migrating to another password type." +msgstr "他のパスワードタイプへの移行の詳細についてはPostgreSQL文書を参照してください。" + +#: libpq/crypt.c:216 +#, c-format +msgid "User \"%s\" has a password that cannot be used with MD5 authentication." +msgstr "ユーザー\"%s\"のパスワードはMD5認証で使用不能です。" + +#: libpq/crypt.c:237 libpq/crypt.c:279 libpq/crypt.c:299 +#, c-format +msgid "Password does not match for user \"%s\"." +msgstr "ユーザー\"%s\"のパスワードが合致しません。" + +#: libpq/crypt.c:318 +#, c-format +msgid "Password of user \"%s\" is in unrecognized format." +msgstr "ユーザー\"%s\"のパスワードは識別不能な形式です。" + +#: libpq/hba.c:329 +#, c-format +msgid "invalid regular expression \"%s\": %s" +msgstr "不正な正規表現\"%s\": %s" -#: libpq/hba.c:457 +#: libpq/hba.c:459 #, c-format msgid "skipping missing authentication file \"%s\"" msgstr "存在しない認証設定ファイル\"%s\"をスキップします" -#: libpq/hba.c:609 +#: libpq/hba.c:611 #, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" msgstr "ファイル\"%s\"をオープンできませんでした: 入れ子の深さが上限を超えています" -#: libpq/hba.c:1216 +#: libpq/hba.c:1222 #, c-format msgid "error enumerating network interfaces: %m" msgstr "ネットワークインターフェース列挙中のエラー: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1243 +#: libpq/hba.c:1249 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "認証オプション\"%s\"は認証方式%sでのみ有効です" -#: libpq/hba.c:1263 +#: libpq/hba.c:1269 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "認証方式\"%s\"の場合は引数\"%s\"がセットされなければなりません" -#: libpq/hba.c:1287 +#: libpq/hba.c:1293 #, c-format msgid "missing entry at end of line" msgstr "行末の要素が足りません" -#: libpq/hba.c:1300 +#: libpq/hba.c:1306 #, c-format msgid "multiple values in ident field" msgstr "identヂールド内の複数の値" -#: libpq/hba.c:1352 +#: libpq/hba.c:1358 #, c-format msgid "multiple values specified for connection type" msgstr "接続タイプで複数の値が指定されました" -#: libpq/hba.c:1353 +#: libpq/hba.c:1359 #, c-format msgid "Specify exactly one connection type per line." msgstr "1行に1つの接続タイプだけを指定してください" -#: libpq/hba.c:1380 +#: libpq/hba.c:1386 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "SSLが無効なため、hostssl行は照合できません" -#: libpq/hba.c:1381 +#: libpq/hba.c:1387 #, c-format msgid "Set \"ssl = on\" in postgresql.conf." msgstr "postgresql.confで\"ssl = on\"に設定してください。" -#: libpq/hba.c:1389 +#: libpq/hba.c:1395 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "このビルドではhostsslはサポートされていないため、hostssl行は照合できません" -#: libpq/hba.c:1401 +#: libpq/hba.c:1407 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "このビルドでは GSSAPI をサポートしていないため hostgssenc レコードは照合できません" -#: libpq/hba.c:1421 +#: libpq/hba.c:1427 #, c-format msgid "invalid connection type \"%s\"" msgstr "接続オプションタイプ \"%s\" は不正です" -#: libpq/hba.c:1435 +#: libpq/hba.c:1441 #, c-format msgid "end-of-line before database specification" msgstr "データベース指定の前に行末を検出しました" -#: libpq/hba.c:1460 +#: libpq/hba.c:1466 #, c-format msgid "end-of-line before role specification" msgstr "ロール指定の前に行末を検出しました" -#: libpq/hba.c:1487 +#: libpq/hba.c:1493 #, c-format msgid "end-of-line before IP address specification" msgstr "IP アドレス指定の前に行末を検出しました" -#: libpq/hba.c:1498 +#: libpq/hba.c:1504 #, c-format msgid "multiple values specified for host address" msgstr "ホストアドレスで複数の値が指定されました" -#: libpq/hba.c:1499 +#: libpq/hba.c:1505 #, c-format msgid "Specify one address range per line." msgstr "1行に1つのアドレス範囲を指定してください" -#: libpq/hba.c:1557 +#: libpq/hba.c:1563 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "不正なIPアドレス\"%s\": %s" -#: libpq/hba.c:1577 +#: libpq/hba.c:1583 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "ホスト名とCIDRマスクを両方指定するのは不正です: \"%s\"" -#: libpq/hba.c:1591 +#: libpq/hba.c:1597 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "IPアドレス\"%s\"内の CIDR マスクが不正です" -#: libpq/hba.c:1611 +#: libpq/hba.c:1617 #, c-format msgid "end-of-line before netmask specification" msgstr "ネットマスク指定の前に行末を検出しました" -#: libpq/hba.c:1612 +#: libpq/hba.c:1618 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "CIDR記法でアドレス範囲を指定してするか、ネットマスクを分けて指定してください。" -#: libpq/hba.c:1623 +#: libpq/hba.c:1629 #, c-format msgid "multiple values specified for netmask" msgstr "ネットマスクで複数の値が指定されました" -#: libpq/hba.c:1637 +#: libpq/hba.c:1643 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "不正なIPマスク\"%s\": %s" -#: libpq/hba.c:1657 +#: libpq/hba.c:1663 #, c-format msgid "IP address and mask do not match" msgstr "IPアドレスとマスクが一致しません" -#: libpq/hba.c:1673 +#: libpq/hba.c:1679 #, c-format msgid "end-of-line before authentication method" msgstr "認証方式指定の前に行末を検出しました" -#: libpq/hba.c:1684 +#: libpq/hba.c:1690 #, c-format msgid "multiple values specified for authentication type" msgstr "認証タイプで複数の値が指定されました" -#: libpq/hba.c:1685 +#: libpq/hba.c:1691 #, c-format msgid "Specify exactly one authentication type per line." msgstr "認証タイプは1行に1つだけ指定してください。" -#: libpq/hba.c:1750 +#: libpq/hba.c:1758 #, c-format msgid "invalid authentication method \"%s\"" msgstr "不正な認証方式\"%s\"" -#: libpq/hba.c:1763 +#: libpq/hba.c:1771 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "不正な認証方式\"%s\": このビルドではサポートされていません" -#: libpq/hba.c:1786 +#: libpq/hba.c:1794 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "ローカルソケットではgssapi認証はサポートしていません" -#: libpq/hba.c:1798 +#: libpq/hba.c:1806 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "peer認証はローカルソケットでのみサポートしています" -#: libpq/hba.c:1816 +#: libpq/hba.c:1824 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "hostssl接続では証明書認証のみをサポートしています" -#: libpq/hba.c:1866 +#: libpq/hba.c:1874 #, c-format msgid "authentication option not in name=value format: %s" msgstr "認証オプションが 名前=値 形式になっていません: %s" -#: libpq/hba.c:1910 +#: libpq/hba.c:1918 #, c-format -msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" -msgstr "ldapbasedn、 ldapbinddn、ldapbindpasswd、ldapsearchattribute、, ldapsearchfilter またはldapurlは、ldapprefixと同時には指定できません" +msgid "cannot mix options for simple bind and search+bind modes" +msgstr "単純バインドモードと検索+バインドモードのオプションを混在させることはできません" -#: libpq/hba.c:1921 +#: libpq/hba.c:1929 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "\"ldap\"認証方式の場合は引数 \"ldapbasedn\"、\"ldapprefix\"、\"ldapsuffix\"のいずれかを指定してください" -#: libpq/hba.c:1937 +#: libpq/hba.c:1945 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ldapsearchattribute、ldapsearchfilter と同時には指定できません" -#: libpq/hba.c:1954 +#: libpq/hba.c:1962 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "RADIUSサーバーのリストは空にはできません" -#: libpq/hba.c:1965 +#: libpq/hba.c:1973 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "RADIUSシークレットのリストは空にはできません" -#: libpq/hba.c:1982 +#: libpq/hba.c:1990 #, c-format msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "RADIUSシークレットの数(%d)は1またはRADIUSサーバーの数(%d)と同じである必要があります" -#: libpq/hba.c:1998 +#: libpq/hba.c:2006 #, c-format msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "RADIUSポートの数(%d)は1またはRADIUSサーバーの数(%d)と同じである必要があります" -#: libpq/hba.c:2014 +#: libpq/hba.c:2022 #, c-format msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "RADIUS識別子の数(%d)は1またはRADIUSサーバーの数(%d)と同じである必要があります" +#. translator: strings are replaced with hba options +#: libpq/hba.c:2067 +#, c-format +msgid "%s cannot be used in combination with %s" +msgstr "%s は %s と同時に使用できません" + # -#: libpq/hba.c:2066 -msgid "ident, peer, gssapi, sspi, and cert" -msgstr "ident、peer、gssapi、sspiおよびcert" +#: libpq/hba.c:2105 +msgid "ident, peer, gssapi, sspi, cert, and oauth" +msgstr "ident、peer、gssapi、sspi、cert および oauth" -#: libpq/hba.c:2075 +#: libpq/hba.c:2114 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "クライアント証明書は\"hostssl\"の行でのみ設定できます" -#: libpq/hba.c:2092 +#: libpq/hba.c:2131 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "\"cert\"認証使用時はclientcertは\"verify-full\"にしか設定できません" -#: libpq/hba.c:2105 +#: libpq/hba.c:2144 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "clientcertの値が不正です: \"%s\"" -#: libpq/hba.c:2117 +#: libpq/hba.c:2156 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "クライアント名は\"hostssl\"の行でのみ設定できます" -#: libpq/hba.c:2136 +#: libpq/hba.c:2175 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "clientnameの値が不正です: \"%s\"" -#: libpq/hba.c:2169 +#: libpq/hba.c:2208 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "LDAP URL\"%s\"をパースできませんでした: %s" -#: libpq/hba.c:2180 +#: libpq/hba.c:2219 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "非サポートのLDAP URLコード: %s" -#: libpq/hba.c:2204 +#: libpq/hba.c:2243 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "このプラットフォームではLDAP URLをサポートしていません。" -#: libpq/hba.c:2222 +#: libpq/hba.c:2261 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "不正な ldapscheme の値: \"%s\"" -#: libpq/hba.c:2240 +#: libpq/hba.c:2279 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "不正なLDAPポート番号です: \"%s\"" # -#: libpq/hba.c:2286 libpq/hba.c:2293 +#: libpq/hba.c:2325 libpq/hba.c:2332 msgid "gssapi and sspi" msgstr "gssapiおよびsspi" -#: libpq/hba.c:2302 libpq/hba.c:2311 +#: libpq/hba.c:2341 libpq/hba.c:2350 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2333 +#: libpq/hba.c:2372 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "RADIUSサーバーのリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:2381 +#: libpq/hba.c:2420 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "RADIUSポートのリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:2395 +#: libpq/hba.c:2434 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "不正なRADIUSポート番号: \"%s\"" -#: libpq/hba.c:2417 +#: libpq/hba.c:2456 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "RADIUSシークレットのリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:2439 +#: libpq/hba.c:2478 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "RADIUS識別子のリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:2453 +#: libpq/hba.c:2515 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "認証オプション名を認識できません: \"%s\"" -#: libpq/hba.c:2645 +#: libpq/hba.c:2707 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "設定ファイル\"%s\"には何も含まれていません" -#: libpq/hba.c:2798 +#: libpq/hba.c:2860 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "正規表現\"%s\"で照合に失敗しました: %s" -#: libpq/hba.c:2822 +#: libpq/hba.c:2884 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "正規表現\"%s\"には\"%s\"における後方参照が要求する副表現が含まれていません" -#: libpq/hba.c:2925 +#: libpq/hba.c:2987 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "与えられたユーザー名 (%s) と認証されたユーザー名 (%s) が一致しません" -#: libpq/hba.c:2945 +#: libpq/hba.c:3007 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "\"%3$s\"として認証されたユーザー\"%2$s\"はユーザーマップ\"%1$s\"に一致しません" -#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#: libpq/pqcomm.c:212 libpq/pqcomm.c:220 libpq/pqcomm.c:251 libpq/pqcomm.c:260 libpq/pqcomm.c:1652 libpq/pqcomm.c:1697 libpq/pqcomm.c:1737 libpq/pqcomm.c:1781 libpq/pqcomm.c:1820 libpq/pqcomm.c:1859 libpq/pqcomm.c:1895 libpq/pqcomm.c:1934 #, c-format msgid "%s(%s) failed: %m" msgstr "%s(%s)が失敗しました: %m" -#: libpq/pqcomm.c:296 +#: libpq/pqcomm.c:297 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "ソケットを非ブロッキングモードに設定できませんでした: %m" -#: libpq/pqcomm.c:456 +#: libpq/pqcomm.c:457 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Unixドメインソケットのパス\"%s\"が長すぎます(最大 %d バイト)" -#: libpq/pqcomm.c:476 +#: libpq/pqcomm.c:477 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "ホスト名\"%s\"、サービス\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/pqcomm.c:480 +#: libpq/pqcomm.c:481 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "サービス\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/pqcomm.c:502 +#: libpq/pqcomm.c:503 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "要求されたアドレスを全てバインドできませんでした: MAXLISTEN (%d)を超えています" -#: libpq/pqcomm.c:511 +#: libpq/pqcomm.c:512 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:514 +#: libpq/pqcomm.c:515 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:517 +#: libpq/pqcomm.c:518 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:521 +#: libpq/pqcomm.c:522 #, c-format msgid "unrecognized address family %d" msgstr "アドレスファミリ %d を認識できません" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:545 +#: libpq/pqcomm.c:546 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "アドレス\"%s\"に対する%sソケットの作成に失敗しました: %m" -#. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 +#. translator: third %s is IPv4 or IPv6 +#. translator: third %s is IPv6 +#: libpq/pqcomm.c:575 libpq/pqcomm.c:593 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "%3$sアドレス%4$sに対する%1$s(%2$s)が失敗しました: %5$m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:615 +#: libpq/pqcomm.c:616 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "%sアドレス\"%s\"のbindに失敗しました: %m" -#: libpq/pqcomm.c:619 +#: libpq/pqcomm.c:620 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "すでに他のpostmasterがポート%dで稼動していませんか?" -#: libpq/pqcomm.c:621 +#: libpq/pqcomm.c:622 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "すでに他にpostmasterがポート%dで稼動していませんか? 稼動していなければ数秒待ってから再試行してください。" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:650 +#: libpq/pqcomm.c:651 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "%sアドレス\"%s\"のlistenに失敗しました: %m" -#: libpq/pqcomm.c:658 +#: libpq/pqcomm.c:659 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "Unixソケット\"%s\"で待ち受けています" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:663 +#: libpq/pqcomm.c:664 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "%sアドレス\"%s\"、ポート%dで待ち受けています" -#: libpq/pqcomm.c:753 +#: libpq/pqcomm.c:754 #, c-format msgid "group \"%s\" does not exist" msgstr "グループ\"%s\"は存在しません" -#: libpq/pqcomm.c:763 +#: libpq/pqcomm.c:764 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "ファイル\"%s\"のグループを設定できませんでした: %m" -#: libpq/pqcomm.c:774 +#: libpq/pqcomm.c:775 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "ファイル\"%s\"の権限を設定できませんでした: %m" -#: libpq/pqcomm.c:803 +#: libpq/pqcomm.c:804 #, c-format msgid "could not accept new connection: %m" msgstr "新しい接続を受け付けることができませんでした: %m" -#: libpq/pqcomm.c:885 +#: libpq/pqcomm.c:886 #, c-format msgid "there is no client connection" msgstr "クライアント接続がありません" -#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 +#: libpq/pqcomm.c:942 libpq/pqcomm.c:1043 #, c-format msgid "could not receive data from client: %m" msgstr "クライアントからデータを受信できませんでした: %m" -#: libpq/pqcomm.c:1149 tcop/postgres.c:4446 +#: libpq/pqcomm.c:1151 tcop/postgres.c:4505 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "プロトコルの同期が失われたためコネクションを終了します" -#: libpq/pqcomm.c:1215 +#: libpq/pqcomm.c:1217 #, c-format msgid "unexpected EOF within message length word" msgstr "メッセージ長ワード内のEOFは想定外です" -#: libpq/pqcomm.c:1225 +#: libpq/pqcomm.c:1227 #, c-format msgid "invalid message length" msgstr "メッセージ長が不正です" -#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 +#: libpq/pqcomm.c:1249 libpq/pqcomm.c:1262 #, c-format msgid "incomplete message from client" msgstr "クライアントからのメッセージが不完全です" -#: libpq/pqcomm.c:1401 +#: libpq/pqcomm.c:1405 #, c-format msgid "could not send data to client: %m" msgstr "クライアントにデータを送信できませんでした: %m" -#: libpq/pqcomm.c:1616 +#: libpq/pqcomm.c:1620 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s)が失敗しました: エラーコード %d" -#: libpq/pqcomm.c:1705 +#: libpq/pqcomm.c:1709 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "キープアライブのアイドル時間の設定はサポートされていません" -#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 +#: libpq/pqcomm.c:1793 libpq/pqcomm.c:1868 libpq/pqcomm.c:1943 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s)はサポートされていません" @@ -15965,7 +16417,7 @@ msgstr "%s(%s)はサポートされていません" msgid "no data left in message" 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/rowtypes.c:613 +#: libpq/pqformat.c:515 libpq/pqformat.c:533 libpq/pqformat.c:554 utils/adt/array_userfuncs.c:873 utils/adt/arrayfuncs.c:1481 utils/adt/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "メッセージ内に残るデータが不十分です" @@ -15980,12 +16432,12 @@ msgstr "メッセージ内の文字列が不正です" msgid "invalid message format" msgstr "メッセージの書式が不正です" -#: main/main.c:234 +#: main/main.c:298 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartupが失敗しました: %d\n" -#: main/main.c:322 +#: main/main.c:386 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -15994,7 +16446,7 @@ msgstr "" "%sはPostgreSQLサーバーです\n" "\n" -#: main/main.c:323 +#: main/main.c:387 #, c-format msgid "" "Usage:\n" @@ -16005,107 +16457,107 @@ msgstr "" " %s [オプション]...\n" "\n" -#: main/main.c:324 +#: main/main.c:388 #, c-format msgid "Options:\n" msgstr "オプション:\n" -#: main/main.c:325 +#: main/main.c:389 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS 共有バッファの数\n" -#: main/main.c:326 +#: main/main.c:390 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE 実行時パラメータの設定\n" -#: main/main.c:327 +#: main/main.c:391 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME 実行時パラメータの値を表示し、終了\n" -#: main/main.c:328 +#: main/main.c:392 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 デバッグレベル\n" -#: main/main.c:329 +#: main/main.c:393 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR データベースディレクトリ\n" -#: main/main.c:330 +#: main/main.c:394 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e ヨーロッパ式の日付フォーマットでの入力(DMY)\n" -#: main/main.c:331 +#: main/main.c:395 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsyncを無効にする\n" -#: main/main.c:332 +#: main/main.c:396 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME 接続を待ち受けるホスト名またはIPアドレス\n" -#: main/main.c:333 +#: main/main.c:397 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr " -i TCP/IP接続を有効にする (非推奨)\n" -#: main/main.c:334 +#: main/main.c:398 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY Unixドメインソケットの場所\n" -#: main/main.c:336 +#: main/main.c:400 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL接続を有効にする\n" -#: main/main.c:338 +#: main/main.c:402 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT 許容する最大接続数\n" -#: main/main.c:339 +#: main/main.c:403 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT 接続を待ち受けるポート番号\n" -#: main/main.c:340 +#: main/main.c:404 #, c-format msgid " -s show statistics after each query\n" msgstr " -s 各問い合わせの後に統計情報を表示\n" -#: main/main.c:341 +#: main/main.c:405 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM ソート用のメモリ量 (KB単位)\n" -#: main/main.c:342 +#: main/main.c:406 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示し、終了\n" -#: main/main.c:343 +#: main/main.c:407 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE 実行時パラメータを設定\n" -#: main/main.c:344 +#: main/main.c:408 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config 設定パラメータの説明を出力し、終了\n" -#: main/main.c:345 +#: main/main.c:409 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示し、終了\n" -#: main/main.c:347 +#: main/main.c:411 #, c-format msgid "" "\n" @@ -16114,39 +16566,39 @@ msgstr "" "\n" "開発者向けオプション:\n" -#: main/main.c:348 +#: main/main.c:412 #, 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:413 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O システムテーブル構造の変更を許可\n" -#: main/main.c:350 +#: main/main.c:414 #, c-format msgid " -P disable system indexes\n" msgstr " -P システムインデックスを無効にする\n" -#: main/main.c:351 +#: main/main.c:415 #, 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:416 #, c-format msgid " -T send SIGABRT to all backend processes if one dies\n" msgstr "" " -T ひとつのバックエンドプロセスが異常停止した時に全ての\n" " バックエンドプロセスにSIGABRTを送信\n" -#: main/main.c:353 +#: main/main.c:417 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NUM デバッガをアタッチできるようにNUM秒待機\n" -#: main/main.c:355 +#: main/main.c:419 #, c-format msgid "" "\n" @@ -16155,39 +16607,39 @@ msgstr "" "\n" "シングルユーザーモード用のオプション:\n" -#: main/main.c:356 +#: main/main.c:420 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr "" " --single シングルユーザーモードを選択(最初の引数でなければ\n" " なりません)\n" -#: main/main.c:357 +#: main/main.c:421 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME データベース名 (デフォルトはユーザー名)\n" -#: main/main.c:358 +#: main/main.c:422 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 デバッグレベルを上書き\n" -#: main/main.c:359 +#: main/main.c:423 #, c-format msgid " -E echo statement before execution\n" msgstr " -E 実行前に文を表示\n" -#: main/main.c:360 +#: main/main.c:424 #, 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:425 main/main.c:431 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILENAME 標準出力と標準エラー出力を指定したファイルに出力\n" -#: main/main.c:363 +#: main/main.c:427 #, c-format msgid "" "\n" @@ -16196,22 +16648,22 @@ msgstr "" "\n" "初期起動用のオプション:\n" -#: main/main.c:364 +#: main/main.c:428 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot 初期起動モードを選択 (最初の引数でなければなりません)\n" -#: main/main.c:365 +#: main/main.c:429 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr " --check チェックモードを選択 (最初の引数でなければなりません)\n" -#: main/main.c:366 +#: main/main.c:430 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME データベース名 (初期起動モードでは必須の引数)\n" -#: main/main.c:369 +#: main/main.c:433 #, c-format msgid "" "\n" @@ -16227,12 +16679,12 @@ msgstr "" "\n" "不具合は<%s>まで報告してください。\n" -#: main/main.c:373 +#: main/main.c:437 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: main/main.c:384 +#: main/main.c:448 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -16245,12 +16697,12 @@ msgstr "" "する必要があります。適切なサーバーの起動方法に関する詳細はドキュメントを\n" "参照してください\n" -#: main/main.c:401 +#: main/main.c:465 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: 実ユーザーIDと実効ユーザーIDは一致しなければなりません\n" -#: main/main.c:408 +#: main/main.c:472 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -16274,12 +16726,12 @@ msgstr "拡張可能ノードタイプ\"%s\"はすでに存在します" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\"は登録されていません" -#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 +#: nodes/makefuncs.c:154 nodes/makefuncs.c:180 statistics/extended_stats.c:2306 #, c-format 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:2602 parser/parse_coerce.c:2740 parser/parse_coerce.c:2787 parser/parse_expr.c:2118 parser/parse_func.c:710 parser/parse_oper.c:869 utils/adt/array_userfuncs.c:1950 utils/fmgr/funcapi.c:669 #, c-format msgid "could not find array type for data type %s" msgstr "データ型%sの配列型がありませんでした" @@ -16294,763 +16746,784 @@ msgstr "パラメータを持つポータル\"%s\": %s" msgid "unnamed portal with parameters: %s" msgstr "パラメータを持つ無名ポータル: %s" -#: optimizer/path/joinrels.c:972 +#: optimizer/path/joinrels.c:973 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN はマージ結合可能もしくはハッシュ結合可能な場合のみサポートされています" -#: optimizer/plan/createplan.c:7162 parser/parse_merge.c:203 rewrite/rewriteHandler.c:1695 +#: optimizer/plan/createplan.c:7250 parser/parse_merge.c:203 rewrite/rewriteHandler.c:1689 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "リレーション\"%s\"に対してMERGEは実行できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1407 +#: optimizer/plan/initsplan.c:1755 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "外部結合のNULL可な側では%sを適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1380 parser/analyze.c:1771 parser/analyze.c:2029 parser/analyze.c:3247 +#: optimizer/plan/planner.c:1459 parser/analyze.c:1900 parser/analyze.c:2159 parser/analyze.c:3480 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "UNION/INTERSECT/EXCEPTでは%sを使用できません" -#: optimizer/plan/planner.c:2121 optimizer/plan/planner.c:4107 +#: optimizer/plan/planner.c:2202 optimizer/plan/planner.c:4045 #, 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:2203 optimizer/plan/planner.c:4046 optimizer/plan/planner.c:4727 optimizer/prep/prepunion.c:1073 #, 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:4726 #, c-format msgid "could not implement DISTINCT" msgstr "DISTINCTを実行できませんでした" -#: optimizer/plan/planner.c:6133 +#: optimizer/plan/planner.c:6188 #, c-format msgid "could not implement window PARTITION BY" msgstr "ウィンドウの PARTITION BY を実行できませんでした" -#: optimizer/plan/planner.c:6134 +#: optimizer/plan/planner.c:6189 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "ウィンドウ分割に使用する列は、ソート可能なデータ型でなければなりません。" -#: optimizer/plan/planner.c:6138 +#: optimizer/plan/planner.c:6193 #, c-format msgid "could not implement window ORDER BY" msgstr "ウィンドウの ORDER BY を実行できませんでした" -#: optimizer/plan/planner.c:6139 +#: optimizer/plan/planner.c:6194 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "ウィンドウの順序付けをする列は、ソート可能なデータ型でなければなりません。" -#: optimizer/prep/prepunion.c:467 +#: optimizer/prep/prepunion.c:440 #, c-format msgid "could not implement recursive UNION" msgstr "再帰UNIONを実行できませんでした" -#: optimizer/prep/prepunion.c:468 +#: optimizer/prep/prepunion.c:441 #, c-format msgid "All column datatypes must be hashable." msgstr "すべての列のデータ型はハッシュ可能でなければなりません。" -#. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1319 +#. translator: %s is INTERSECT or EXCEPT +#: optimizer/prep/prepunion.c:1071 #, c-format msgid "could not implement %s" msgstr "%sを実行できませんでした" -#: optimizer/util/clauses.c:4951 +#: optimizer/util/appendinfo.c:165 +#, c-format +msgid "attribute \"%s\" of relation \"%s\" does not match parent's type" +msgstr "リレーション\"%2$s\"の属性\"%1$s\"は親での型と一致していません" + +#: optimizer/util/appendinfo.c:170 +#, c-format +msgid "attribute \"%s\" of relation \"%s\" does not match parent's collation" +msgstr "リレーション\"%2$s\"の属性\"%1$s\"は親での照合順序と一致していません" + +#: optimizer/util/clauses.c:4966 #, 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 "リカバリ中は一時テーブルやUNLOGGEDテーブルにはアクセスできません" -#: optimizer/util/plancat.c:754 +#: optimizer/util/plancat.c:770 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "行全体に渡るユニークインデックスの推定指定はサポートされていません" -#: optimizer/util/plancat.c:771 +#: optimizer/util/plancat.c:787 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ON CONFLICT句中の制約には関連付けられるインデックスがありません" -#: optimizer/util/plancat.c:821 +#: optimizer/util/plancat.c:837 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATEでの排除制約の使用はサポートされていません" -#: optimizer/util/plancat.c:926 +#: optimizer/util/plancat.c:954 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "ON CONFLICT 指定に合致するユニーク制約または排除制約がありません" -#: parser/analyze.c:824 parser/analyze.c:1550 +#: parser/analyze.c:954 parser/analyze.c:1679 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUESリストはすべて同じ長さでなければなりません" -#: parser/analyze.c:1027 +#: parser/analyze.c:1156 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERTに対象列よりも多くの式があります" -#: parser/analyze.c:1045 +#: parser/analyze.c:1174 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERTに式よりも多くの対象列があります" -#: parser/analyze.c:1049 +#: parser/analyze.c:1178 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "挿入ソースがINSERTが期待するのと同じ列数を含む行表現になっています。うっかり余計なカッコをつけたりしませんでしたか?" -#: parser/analyze.c:1357 parser/analyze.c:1744 +#: parser/analyze.c:1486 parser/analyze.c:1873 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "ここではSELECT ... INTOは許可されません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1673 parser/analyze.c:3479 +#: parser/analyze.c:1802 parser/analyze.c:3712 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%sをVALUESに使用できません" -#: parser/analyze.c:1911 +#: parser/analyze.c:2040 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "不正なUNION/INTERSECT/EXCEPT ORDER BY句です" -#: parser/analyze.c:1912 +#: parser/analyze.c:2041 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "式や関数ではなく、結果列の名前のみが使用できます。" -#: parser/analyze.c:1913 +#: parser/analyze.c:2042 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "式/関数をすべてのSELECTにつけてください。またはこのUNIONをFROM句に移動してください。" -#: parser/analyze.c:2019 +#: parser/analyze.c:2149 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTOはUNION/INTERSECT/EXCEPTの最初のSELECTでのみ使用できます" -#: parser/analyze.c:2091 +#: parser/analyze.c:2221 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "UNION/INTERSECT/EXCEPTの要素となる文では同一問い合わせレベルの他のリレーションを参照できません" -#: parser/analyze.c:2178 +#: parser/analyze.c:2308 #, c-format msgid "each %s query must have the same number of columns" msgstr "すべての%s問い合わせは同じ列数を返す必要があります" -#: parser/analyze.c:2535 +#: parser/analyze.c:2665 #, c-format msgid "SET target columns cannot be qualified with the relation name." msgstr "SETの対象列はリレーション名で修飾することはできません。" -#: parser/analyze.c:2589 +#. translator: %s is OLD or NEW +#: parser/analyze.c:2753 parser/analyze.c:2763 +#, c-format +msgid "%s cannot be specified multiple times" +msgstr "%s は複数回指定できません" + +#: parser/analyze.c:2775 parser/parse_relation.c:473 +#, c-format +msgid "table name \"%s\" specified more than once" +msgstr "テーブル名\"%s\"が複数指定されました" + +#: parser/analyze.c:2823 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNINGには少なくとも1つの列が必要です" -#: parser/analyze.c:2692 +#: parser/analyze.c:2925 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" msgstr[0] "代入元が%d個の列を返しました" -#: parser/analyze.c:2753 +#: parser/analyze.c:2986 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "変数\"%s\"は型%sですが、式は型%sでした" #. translator: %s is a SQL keyword -#: parser/analyze.c:2878 parser/analyze.c:2886 +#: parser/analyze.c:3111 parser/analyze.c:3119 #, c-format msgid "cannot specify both %s and %s" msgstr "%sと%sの両方を同時には指定できません" -#: parser/analyze.c:2906 +#: parser/analyze.c:3139 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR では WITH にデータを変更する文を含んではなりません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2914 +#: parser/analyze.c:3147 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %sはサポートされていません" -#: parser/analyze.c:2917 +#: parser/analyze.c:3150 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "保持可能カーソルは読み取り専用である必要があります。" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2925 +#: parser/analyze.c:3158 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %sはサポートされていません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2936 +#: parser/analyze.c:3169 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %sはが不正です" -#: parser/analyze.c:2939 +#: parser/analyze.c:3172 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "INSENSITIVEカーソルは読み取り専用である必要があります。" -#: parser/analyze.c:3033 +#: parser/analyze.c:3266 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "実体化ビューではWITH句にデータを変更する文を含んではなりません" -#: parser/analyze.c:3043 +#: parser/analyze.c:3276 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "実体化ビューでは一時テーブルやビューを使用してはいけません" -#: parser/analyze.c:3053 +#: parser/analyze.c:3286 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "実体化ビューは境界パラメータを用いて定義してはなりません" -#: parser/analyze.c:3065 +#: parser/analyze.c:3298 #, c-format msgid "materialized views cannot be unlogged" msgstr "実体化ビューをログ非取得にはできません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3254 +#: parser/analyze.c:3487 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "DISTINCT句では%sを使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3261 +#: parser/analyze.c:3494 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "GROUP BY句で%sを使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3268 +#: parser/analyze.c:3501 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "HAVING 句では%sを使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3275 +#: parser/analyze.c:3508 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "集約関数では%sは使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3282 +#: parser/analyze.c:3515 #, c-format msgid "%s is not allowed with window functions" msgstr "ウィンドウ関数では%sは使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3289 +#: parser/analyze.c:3522 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "ターゲットリストの中では%sを集合返却関数と一緒に使うことはできません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3388 +#: parser/analyze.c:3621 #, c-format msgid "%s must specify unqualified relation names" msgstr "%sでは非修飾のリレーション名を指定してください" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3452 +#: parser/analyze.c:3685 #, c-format msgid "%s cannot be applied to a join" msgstr "%sを結合に使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3461 +#: parser/analyze.c:3694 #, c-format msgid "%s cannot be applied to a function" msgstr "%sを関数に使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3470 +#: parser/analyze.c:3703 #, c-format msgid "%s cannot be applied to a table function" msgstr "%sはテーブル関数には適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3488 +#: parser/analyze.c:3721 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%sはWITH問い合わせには適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3497 +#: parser/analyze.c:3730 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%sは名前付きタプルストアには適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3517 +#: parser/analyze.c:3750 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "%2$s句のリレーション\"%1$s\"はFROM句にありません" -#: parser/parse_agg.c:210 parser/parse_oper.c:215 +#: parser/parse_agg.c:215 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "型%sの順序演算子を特定できませんでした" -#: parser/parse_agg.c:212 +#: parser/parse_agg.c:217 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "DISTINCT 付きの集約関数は、入力がソート可能である必要があります。" -#: parser/parse_agg.c:270 +#: parser/parse_agg.c:275 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPINGの引数は32より少くなければなりません" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:378 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "JOIN条件で集約関数を使用できません" -#: parser/parse_agg.c:375 +#: parser/parse_agg.c:380 msgid "grouping operations are not allowed in JOIN conditions" msgstr "グルーピング演算はJOIN条件の中では使用できません" -#: parser/parse_agg.c:387 +#: parser/parse_agg.c:390 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:392 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:397 msgid "aggregate functions are not allowed in functions in FROM" msgstr "集約関数はFROM句内の関数では使用できません" -#: parser/parse_agg.c:396 +#: parser/parse_agg.c:399 msgid "grouping operations are not allowed in functions in FROM" msgstr "グルーピング演算はFROM句内の関数では使用できません" -#: parser/parse_agg.c:404 +#: parser/parse_agg.c:407 msgid "aggregate functions are not allowed in policy expressions" msgstr "集約関数はポリシ式では使用できません" -#: parser/parse_agg.c:406 +#: parser/parse_agg.c:409 msgid "grouping operations are not allowed in policy expressions" msgstr "グルーピング演算はポリシ式では使用できません" -#: parser/parse_agg.c:423 +#: parser/parse_agg.c:426 msgid "aggregate functions are not allowed in window RANGE" msgstr "集約関数はウィンドウRANGEの中では集約関数を使用できません" -#: parser/parse_agg.c:425 +#: parser/parse_agg.c:428 msgid "grouping operations are not allowed in window RANGE" msgstr "ウィンドウ定義のRANGE句の中ではグルーピング演算は使用できません" -#: parser/parse_agg.c:430 +#: parser/parse_agg.c:433 msgid "aggregate functions are not allowed in window ROWS" msgstr "ウィンドウ定義のROWS句では集約関数は使用できません" -#: parser/parse_agg.c:432 +#: parser/parse_agg.c:435 msgid "grouping operations are not allowed in window ROWS" msgstr "ウィンドウ定義のROWS句ではグルーピング演算は使用できません" -#: parser/parse_agg.c:437 +#: parser/parse_agg.c:440 msgid "aggregate functions are not allowed in window GROUPS" msgstr "ウィンドウ定義のGROUPS句では集約関数は使用できません" -#: parser/parse_agg.c:439 +#: parser/parse_agg.c:442 msgid "grouping operations are not allowed in window GROUPS" msgstr "ウィンドウ定義のGROUPS句ではグルーピング演算は使用できません" -#: parser/parse_agg.c:452 +#: parser/parse_agg.c:455 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "MERGE WHEN条件では集約関数を使用できません" -#: parser/parse_agg.c:454 +#: parser/parse_agg.c:457 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "MERGE WHEN条件ではグルーピング演算を使用できません" -#: parser/parse_agg.c:481 +#: parser/parse_agg.c:484 msgid "aggregate functions are not allowed in check constraints" msgstr "検査制約では集約関数を使用できません" -#: parser/parse_agg.c:483 +#: parser/parse_agg.c:486 msgid "grouping operations are not allowed in check constraints" msgstr "検査制約ではグルーピング演算を使用できません" -#: parser/parse_agg.c:490 +#: parser/parse_agg.c:493 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "DEFAULT式では集約関数を使用できません" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:495 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "DEFAULT式ではグルーピング演算を使用できません" -#: parser/parse_agg.c:497 +#: parser/parse_agg.c:500 msgid "aggregate functions are not allowed in index expressions" msgstr "インデックス式では集約関数を使用できません" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:502 msgid "grouping operations are not allowed in index expressions" msgstr "インデックス式ではグルーピング演算を使用できません" -#: parser/parse_agg.c:504 +#: parser/parse_agg.c:507 msgid "aggregate functions are not allowed in index predicates" msgstr "インデックス述語では集約関数を使用できません" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:509 msgid "grouping operations are not allowed in index predicates" msgstr "インデックス述語ではグルーピング演算を使用できません" -#: parser/parse_agg.c:511 +#: parser/parse_agg.c:514 msgid "aggregate functions are not allowed in statistics expressions" msgstr "統計情報式では集約関数を使用できません" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:516 msgid "grouping operations are not allowed in statistics expressions" msgstr "統計情報式ではグルーピング演算使用できません" -#: parser/parse_agg.c:518 +#: parser/parse_agg.c:521 msgid "aggregate functions are not allowed in transform expressions" msgstr "変換式では集約関数を使用できません" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:523 msgid "grouping operations are not allowed in transform expressions" msgstr "変換式ではグルーピング演算を使用できません" -#: parser/parse_agg.c:525 +#: parser/parse_agg.c:528 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "EXECUTEのパラメータでは集約関数を使用できません" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:530 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "EXECUTEのパラメータではグルーピング演算を使用できません" -#: parser/parse_agg.c:532 +#: parser/parse_agg.c:535 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "トリガのWHEN条件では集約関数を使用できません" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:537 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "トリガのWHEN条件ではグルーピング演算を使用できません" -#: parser/parse_agg.c:539 +#: parser/parse_agg.c:542 msgid "aggregate functions are not allowed in partition bound" msgstr "集約関数はパーティション境界では使用できません" -#: parser/parse_agg.c:541 +#: parser/parse_agg.c:544 msgid "grouping operations are not allowed in partition bound" msgstr "グルーピング演算はパーティション境界では使用できません" -#: parser/parse_agg.c:546 +#: parser/parse_agg.c:549 msgid "aggregate functions are not allowed in partition key expressions" msgstr "パーティションキー式では集約関数は使用できません" -#: parser/parse_agg.c:548 +#: parser/parse_agg.c:551 msgid "grouping operations are not allowed in partition key expressions" msgstr "パーティションキー式ではグルーピング演算は使用できません" -#: parser/parse_agg.c:554 +#: parser/parse_agg.c:557 msgid "aggregate functions are not allowed in column generation expressions" msgstr "集約関数はカラム生成式では使用できません" -#: parser/parse_agg.c:556 +#: parser/parse_agg.c:559 msgid "grouping operations are not allowed in column generation expressions" msgstr "グルーピング演算はカラム生成式では使用できません" -#: parser/parse_agg.c:562 +#: parser/parse_agg.c:565 msgid "aggregate functions are not allowed in CALL arguments" msgstr "CALLの引数では集約関数を使用できません" -#: parser/parse_agg.c:564 +#: parser/parse_agg.c:567 msgid "grouping operations are not allowed in CALL arguments" msgstr "CALLの引数ではグルーピング演算を使用できません" -#: parser/parse_agg.c:570 +#: parser/parse_agg.c:573 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "集約関数は COPY FROM の WHERE 条件では使用できません" -#: parser/parse_agg.c:572 +#: parser/parse_agg.c:575 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:602 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:605 #, c-format msgid "grouping operations are not allowed in %s" msgstr "%sではグルーピング演算を使用できません" -#: parser/parse_agg.c:703 +#: parser/parse_agg.c:706 #, 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:784 #, 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:785 parser/parse_expr.c:1760 parser/parse_expr.c:2251 parser/parse_func.c:885 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "この集合返却関数をLATERAL FROM項目に移動できるかもしれません。" -#: parser/parse_agg.c:787 +#: parser/parse_agg.c:790 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "集約関数の呼び出しにウィンドウ関数の呼び出しを含むことはできません" -#: parser/parse_agg.c:866 +#: parser/parse_agg.c:869 msgid "window functions are not allowed in JOIN conditions" msgstr "JOIN条件ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:873 +#: parser/parse_agg.c:876 msgid "window functions are not allowed in functions in FROM" msgstr "FROM句内の関数ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:882 msgid "window functions are not allowed in policy expressions" msgstr "ポリシ式ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:892 +#: parser/parse_agg.c:895 msgid "window functions are not allowed in window definitions" msgstr "ウィンドウ定義ではウィンドウ関数は使用できません" -#: parser/parse_agg.c:903 +#: parser/parse_agg.c:906 msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "MERGE WHEN条件ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:931 msgid "window functions are not allowed in check constraints" msgstr "検査制約の中ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:932 +#: parser/parse_agg.c:935 msgid "window functions are not allowed in DEFAULT expressions" msgstr "DEFAULT式の中ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:935 +#: parser/parse_agg.c:938 msgid "window functions are not allowed in index expressions" msgstr "インデックス式ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:938 +#: parser/parse_agg.c:941 msgid "window functions are not allowed in statistics expressions" msgstr "統計情報式ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:941 +#: parser/parse_agg.c:944 msgid "window functions are not allowed in index predicates" msgstr "インデックス述語ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:944 +#: parser/parse_agg.c:947 msgid "window functions are not allowed in transform expressions" msgstr "変換式ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:947 +#: parser/parse_agg.c:950 msgid "window functions are not allowed in EXECUTE parameters" msgstr "EXECUTEパラメータではウィンドウ関数を使用できません" -#: parser/parse_agg.c:950 +#: parser/parse_agg.c:953 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "トリガのWHEN条件ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:953 +#: parser/parse_agg.c:956 msgid "window functions are not allowed in partition bound" msgstr "ウィンドウ関数はパーティション境界では使用できません" -#: parser/parse_agg.c:956 +#: parser/parse_agg.c:959 msgid "window functions are not allowed in partition key expressions" msgstr "パーティションキー式ではウィンドウ関数は使用できません" -#: parser/parse_agg.c:959 +#: parser/parse_agg.c:962 msgid "window functions are not allowed in CALL arguments" msgstr "CALLの引数ではウィンドウ関数は使用できません" -#: parser/parse_agg.c:962 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "ウィンドウ関数は COPY FROM の WHERE 条件では使用できません" -#: parser/parse_agg.c:965 +#: parser/parse_agg.c:968 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:991 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:1025 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "ウィンドウ\"%s\"は存在しません" -#: parser/parse_agg.c:1110 +#: parser/parse_agg.c:1115 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "グルーピングセットの数が多すぎます (最大4096)" -#: parser/parse_agg.c:1250 +#: parser/parse_agg.c:1276 #, 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:1499 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "列\"%s.%s\"はGROUP BY句で指定するか、集約関数内で使用しなければなりません" -#: parser/parse_agg.c:1446 +#: parser/parse_agg.c:1502 #, 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:1507 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "外部問い合わせから副問い合わせがグループ化されていない列\"%s.%s\"を使用しています" -#: parser/parse_agg.c:1615 +#: parser/parse_agg.c:1672 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "GROUPINGの引数は関連するクエリレベルのグルーピング式でなければなりません" -#: parser/parse_clause.c:193 +#: parser/parse_clause.c:191 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "リレーション\"%s\"は更新文の対象にはなれません" -#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 +#: parser/parse_clause.c:567 parser/parse_clause.c:595 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "集合返却関数はFROMの最上位レベルにある必要があります" -#: parser/parse_clause.c:609 +#: parser/parse_clause.c:607 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "同じ関数に対して複数の列定義リストを持つことができません" -#: parser/parse_clause.c:642 +#: parser/parse_clause.c:640 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "複数の関数を伴った ROWS FROM() は列定義リストを持つことができません" -#: parser/parse_clause.c:643 +#: parser/parse_clause.c:641 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "ROWS FROM() 内のそれぞれの関数ごとに個別の列定義リストを付けてください。" -#: parser/parse_clause.c:649 +#: parser/parse_clause.c:647 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "複数の引数をもつUNNEST()は列定義リストを持つことができません" -#: parser/parse_clause.c:650 +#: parser/parse_clause.c:648 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "ROWS FROM() の中で個別に UNNEST() をコールして、列定義リストをそれぞれに付加してください。" -#: parser/parse_clause.c:657 +#: parser/parse_clause.c:655 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY は列定義リストがあるときは使えません" -#: parser/parse_clause.c:658 +#: parser/parse_clause.c:656 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "ROWS FROM() の中に列定義リストをおいてください。" -#: parser/parse_clause.c:762 +#: parser/parse_clause.c:760 parser/parse_jsontable.c:293 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "FOR ORDINALITY 列は一つまでです" -#: parser/parse_clause.c:823 +#: parser/parse_clause.c:821 #, c-format msgid "column name \"%s\" is not unique" msgstr "列名\"%s\"は一意ではありません" -#: parser/parse_clause.c:865 +#: parser/parse_clause.c:863 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "名前空間名\"%s\"は一意ではありません" -#: parser/parse_clause.c:875 +#: parser/parse_clause.c:873 #, c-format msgid "only one default namespace is allowed" msgstr "デフォルト名前空間は一つのみ指定可能です" -#: parser/parse_clause.c:935 +#: parser/parse_clause.c:933 #, c-format msgid "tablesample method %s does not exist" msgstr "テーブルサンプルメソッド%sは存在しません" -#: parser/parse_clause.c:957 +#: parser/parse_clause.c:955 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "テーブルサンプルメソッド%sは%d個の引数を必要とします、%d個ではありません" -#: parser/parse_clause.c:991 +#: parser/parse_clause.c:989 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "テーブルサンプルメソッド%sはREPEATABLEをサポートしていません" -#: parser/parse_clause.c:1144 +#: parser/parse_clause.c:1142 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "TABLESAMPLE句はテーブルおよび実体化ビューのみに適用可能です" -#: parser/parse_clause.c:1331 +#: parser/parse_clause.c:1329 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "USING句に列名\"%s\"が複数あります" -#: parser/parse_clause.c:1346 +#: parser/parse_clause.c:1344 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "左テーブルに列名\"%s\"が複数あります" -#: parser/parse_clause.c:1355 +#: parser/parse_clause.c:1353 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "USING句で指定した列\"%sが左テーブルに存在しません" -#: parser/parse_clause.c:1370 +#: parser/parse_clause.c:1368 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "右テーブルに列名\"%s\"が複数あります" -#: parser/parse_clause.c:1379 +#: parser/parse_clause.c:1377 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "USING句で指定した列\"%sが右テーブルに存在しません" @@ -17189,173 +17662,173 @@ msgstr "演算子\"%s\"は有効な順序付け演算子名ではありません msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "順序付け演算子はB-Tree演算子族の\"<\"または\">\"要素でなければなりません。" -#: parser/parse_clause.c:3775 +#: parser/parse_clause.c:3778 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s に対してはサポートされません" -#: parser/parse_clause.c:3781 +#: parser/parse_clause.c:3784 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s とオフセット型 %s に対してはサポートされません" -#: parser/parse_clause.c:3784 +#: parser/parse_clause.c:3787 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "オフセット値を適切な型にキャストしてください。" -#: parser/parse_clause.c:3789 +#: parser/parse_clause.c:3792 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s とオフセット型 %s に対して複数の解釈が可能になっています" -#: parser/parse_clause.c:3792 +#: parser/parse_clause.c:3795 #, c-format 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:1048 parser/parse_coerce.c:1086 parser/parse_coerce.c:1104 parser/parse_coerce.c:1119 parser/parse_expr.c:2152 parser/parse_expr.c:2770 parser/parse_expr.c:3421 parser/parse_expr.c:3650 parser/parse_target.c:1001 #, c-format msgid "cannot cast type %s to %s" msgstr "型%sから%sへの型変換ができません" -#: parser/parse_coerce.c:1091 +#: parser/parse_coerce.c:1089 #, c-format msgid "Input has too few columns." msgstr "入力列が少なすぎます。" -#: parser/parse_coerce.c:1109 +#: parser/parse_coerce.c:1107 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "列%3$dで型%1$sから%2$sへの型変換ができません。" -#: parser/parse_coerce.c:1124 +#: parser/parse_coerce.c:1122 #, c-format msgid "Input has too many columns." msgstr "入力列が多すぎます。" #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1179 parser/parse_coerce.c:1227 +#: parser/parse_coerce.c:1177 parser/parse_coerce.c:1225 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "%1$sの引数は型%3$sではなく%2$s型でなければなりません" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1190 parser/parse_coerce.c:1239 +#: parser/parse_coerce.c:1188 parser/parse_coerce.c:1237 #, c-format msgid "argument of %s must not return a set" msgstr "%sの引数は集合を返してはなりません" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1383 +#: parser/parse_coerce.c:1418 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%sの型%sと%sを一致させることができません" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1534 #, 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:1586 #, 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:2189 parser/parse_coerce.c:2209 parser/parse_coerce.c:2229 parser/parse_coerce.c:2250 parser/parse_coerce.c:2305 parser/parse_coerce.c:2339 #, 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:2284 parser/parse_coerce.c:2397 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:2317 parser/parse_coerce.c:2467 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:2351 parser/parse_coerce.c:2431 parser/parse_coerce.c:2564 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:2388 #, 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:2414 parser/parse_coerce.c:2445 parser/parse_coerce.c:2484 parser/parse_coerce.c:2550 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "%sと宣言された引数と%sと宣言された引数とで整合性がありません" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2509 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "入力型が%sであったため多様型が特定できませんでした" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2523 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "anynonarrayと照合されたは配列型です: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2533 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "anyenumと照合された型は列挙型ではありません: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2594 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "anycompatible系の引数を共通の型にキャストできません" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2612 parser/parse_coerce.c:2633 parser/parse_coerce.c:2683 parser/parse_coerce.c:2688 parser/parse_coerce.c:2752 parser/parse_coerce.c:2764 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "入力型が%2$sであるため多様型%1$sが特定できませんでした" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2622 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "anycompatiblerange型%sはanycompatiblerange型%sと合致しません" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2643 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "anycompatiblemultirange型%sはanycompatible型%sと合致しません" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2657 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "anycompatiblenonarrayに対応する型が配列型です: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2892 #, c-format msgid "A result of type %s requires at least one input of type anyrange or anymultirange." msgstr "%s型の返却値にはanyrangeまたはanymultirange型の入力が最低でも一つ必要です。" -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2909 #, c-format msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." msgstr "%s型の返却値には少なくとも一つのanycompatiblerangeまたはanycompatiblemultirange型の入力が必要です。" -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2921 #, c-format msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." msgstr "%s型の返却値には少なくとも一つのanyelement、anyarray、anynonarray、anyenum、anyrange またはanymultirange型の入力が必要です。" -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2933 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "%s型の返却値には少なくとも一つのanycompatible、anycompatiblearray、anycompatiblenonarray、anycompatiblerangeまたはanycompatiblemultirange型の入力が必要です。" -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2963 msgid "A result of type internal requires at least one input of type internal." msgstr "internal型の返却値には少なくとも1つのinternal型の入力が必要です。" @@ -17399,488 +17872,545 @@ msgstr "問い合わせ\"%s\"への再帰的参照が、INTERSECT内に現れて msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "問い合わせ\"%s\"への再帰的参照が、EXCEPT内で現れてはなりません" -#: parser/parse_cte.c:136 +#: parser/parse_cte.c:137 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "WITH 問い合わせ名\"%s\"が複数回指定されました" -#: parser/parse_cte.c:308 +#: parser/parse_cte.c:309 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "型%sの不等演算子を特定できませんでした" -#: parser/parse_cte.c:335 +#: parser/parse_cte.c:336 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "データを変更するようなステートメントを含む WITH 句はトップレベルでなければなりません" -#: parser/parse_cte.c:384 +#: parser/parse_cte.c:385 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "再帰問い合わせ\"%s\"の列%dの型は、非再帰項の内では%sになっていますが全体としては%sです" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:391 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "非再帰項の出力を正しい型に変換してください。" -#: parser/parse_cte.c:395 +#: parser/parse_cte.c:396 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "再帰問い合わせ\"%s\"の列%dの照合順序は、非再帰項では\"%s\"ですが全体としては\"%s\"です" -#: parser/parse_cte.c:399 +#: parser/parse_cte.c:400 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "COLLATE句を使って非再帰項の照合順序を設定してください。" -#: parser/parse_cte.c:420 +#: parser/parse_cte.c:421 #, c-format msgid "WITH query is not recursive" msgstr "WITH問い合わせは再帰的ではありません" -#: parser/parse_cte.c:451 +#: parser/parse_cte.c:452 #, c-format msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "SEARCHまたはCYCLE句を指定する場合、UNIONの左辺はSELECTでなければなりません" -#: parser/parse_cte.c:456 +#: parser/parse_cte.c:457 #, c-format msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "SEARCHまたはCYCLE句を指定する場合、UNIONの右辺はSELECTでなければなりません" -#: parser/parse_cte.c:471 +#: parser/parse_cte.c:472 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "検索カラム\\\"%s\\\"はWITH問い合わせの列リストの中にありません" -#: parser/parse_cte.c:478 +#: parser/parse_cte.c:479 #, c-format msgid "search column \"%s\" specified more than once" msgstr "検索列\"%s\"が複数回指定されています" -#: parser/parse_cte.c:487 +#: parser/parse_cte.c:488 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "検索順序列の名前\\\"%s\\\"はすでにWITH問い合わせの列リストで使われています" -#: parser/parse_cte.c:504 +#: parser/parse_cte.c:505 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "循環列\"%s\"がWITH問い合わせの列リストに存在しません" -#: parser/parse_cte.c:511 +#: parser/parse_cte.c:512 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "循環列\"%s\"が複数回指定されています" -#: parser/parse_cte.c:520 +#: parser/parse_cte.c:521 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "循環識別列の名前\\\"%s\\\"はすでにWITH問い合わせの列リストで使われています" -#: parser/parse_cte.c:527 +#: parser/parse_cte.c:528 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "循環経路列の名前\\\"%s\\\"はすでにWITH問い合わせの列リストで使われています" -#: parser/parse_cte.c:535 +#: parser/parse_cte.c:536 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "循環識別列と循環経路列の名前が同一です" -#: parser/parse_cte.c:545 +#: parser/parse_cte.c:546 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "検索順序列と循環識別列の名前が同一です" -#: parser/parse_cte.c:552 +#: parser/parse_cte.c:553 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "検索順序列と循環経路列の名前が同一です" -#: parser/parse_cte.c:636 +#: parser/parse_cte.c:637 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "WITH問い合わせ\"%s\"には%d列しかありませんが、%d列指定されています" -#: parser/parse_cte.c:816 +#: parser/parse_cte.c:882 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "WITH項目間の再帰は実装されていません" -#: parser/parse_cte.c:868 +#: parser/parse_cte.c:934 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "再帰問い合わせ\"%s\"はデータを更新するス文を含んでいてはなりません" -#: parser/parse_cte.c:876 +#: parser/parse_cte.c:942 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "再帰問い合わせ\"%s\"が、<非再帰項> UNION [ALL] <再帰項> の形式になっていません" -#: parser/parse_cte.c:920 +#: parser/parse_cte.c:977 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "再帰問い合わせ内の ORDER BY は実装されていません" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:983 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "再帰問い合わせ内の OFFSET は実装されていません" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:989 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "再帰問い合わせ内の LIMIT は実装されていません" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:995 #, 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:1074 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "問い合わせ\"%s\"への再帰参照が2回以上現れてはなりません" -#: parser/parse_expr.c:314 +#: parser/parse_expr.c:311 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "この文脈ではDEFAULTは使えません" -#: 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:404 parser/parse_relation.c:3797 parser/parse_relation.c:3807 parser/parse_relation.c:3825 parser/parse_relation.c:3832 parser/parse_relation.c:3846 #, c-format msgid "column %s.%s does not exist" msgstr "列%s.%sは存在しません" -#: parser/parse_expr.c:419 +#: parser/parse_expr.c:416 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "データ型%2$sの列\"%1$s\"はありません" -#: parser/parse_expr.c:425 +#: parser/parse_expr.c:422 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "レコードデータ型の列\"%s\"を特定できませんでした" -#: parser/parse_expr.c:431 +#: parser/parse_expr.c:428 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "列記法 .%sが型%sに使用されましたが、この型は複合型ではありません" -#: parser/parse_expr.c:462 parser/parse_target.c:732 +#: parser/parse_expr.c:459 parser/parse_target.c:735 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "\"*\"を通した行展開は、ここではサポートされていません" -#: parser/parse_expr.c:585 +#: parser/parse_expr.c:582 msgid "cannot use column reference in DEFAULT expression" msgstr "列参照はDEFAULT式では使用できません" -#: parser/parse_expr.c:588 +#: parser/parse_expr.c:585 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:844 parser/parse_relation.c:848 parser/parse_relation.c:930 parser/parse_target.c:1241 #, 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:900 parser/parse_param.c:111 parser/parse_param.c:143 parser/parse_param.c:205 parser/parse_param.c:304 #, 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:1101 parser/parse_expr.c:3081 #, c-format -msgid "NULLIF requires = operator to yield boolean" -msgstr "NULLIF では = 演算子が boolean を返す必要があります" +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:1107 parser/parse_expr.c:3088 #, c-format msgid "%s must not return a set" msgstr "%sは集合を返してはなりません" -#: parser/parse_expr.c:1395 +#: parser/parse_expr.c:1393 #, c-format msgid "MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" msgstr "MERGE_ACTION()はMERGEコマンドのRETURNINGリストの中でのみ使用可能です" -#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 +#: parser/parse_expr.c:1517 parser/parse_expr.c:1549 #, c-format msgid "number of columns does not match number of values" msgstr "列の数がVALUESの数と一致しません" -#: parser/parse_expr.c:1565 +#: parser/parse_expr.c:1563 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "複数列のUPDATE項目のソースは副問合せまたはROW()式でなければなりません" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 +#: parser/parse_expr.c:1758 parser/parse_expr.c:2249 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "集合返却関数は%sでは使用できません" -#: parser/parse_expr.c:1824 +#: parser/parse_expr.c:1822 msgid "cannot use subquery in check constraint" msgstr "検査制約では副問い合わせを使用できません" -#: parser/parse_expr.c:1828 +#: parser/parse_expr.c:1826 msgid "cannot use subquery in DEFAULT expression" msgstr "DEFAULT式には副問い合わせを使用できません" -#: parser/parse_expr.c:1831 +#: parser/parse_expr.c:1829 msgid "cannot use subquery in index expression" msgstr "式インデックスには副問い合わせを使用できません" -#: parser/parse_expr.c:1834 +#: parser/parse_expr.c:1832 msgid "cannot use subquery in index predicate" msgstr "インデックスの述部に副問い合わせを使用できません" -#: parser/parse_expr.c:1837 +#: parser/parse_expr.c:1835 msgid "cannot use subquery in statistics expression" msgstr "時計情報式では副問い合わせを使用できません" -#: parser/parse_expr.c:1840 +#: parser/parse_expr.c:1838 msgid "cannot use subquery in transform expression" msgstr "変換式では副問い合わせを使用できません" -#: parser/parse_expr.c:1843 +#: parser/parse_expr.c:1841 msgid "cannot use subquery in EXECUTE parameter" msgstr "EXECUTEのパラメータに副問い合わせを使用できません" -#: parser/parse_expr.c:1846 +#: parser/parse_expr.c:1844 msgid "cannot use subquery in trigger WHEN condition" msgstr "トリガーの WHEN 条件では副問い合わせを使用できません" -#: parser/parse_expr.c:1849 +#: parser/parse_expr.c:1847 msgid "cannot use subquery in partition bound" msgstr "副問い合わせはパーティション境界では使用できません" -#: parser/parse_expr.c:1852 +#: parser/parse_expr.c:1850 msgid "cannot use subquery in partition key expression" msgstr "パーティションキー式では副問い合わせを使用できません" -#: parser/parse_expr.c:1855 +#: parser/parse_expr.c:1853 msgid "cannot use subquery in CALL argument" msgstr "CALLの引数で副問い合わせは使用できません" -#: parser/parse_expr.c:1858 +#: parser/parse_expr.c:1856 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "副問い合わせは COPY FROM の WHERE 条件では使用できません" -#: parser/parse_expr.c:1861 +#: parser/parse_expr.c:1859 msgid "cannot use subquery in column generation expression" msgstr "副問い合わせはカラム生成式では使用できません" -#: parser/parse_expr.c:1914 parser/parse_expr.c:3756 +#: parser/parse_expr.c:1912 parser/parse_expr.c:3780 #, c-format msgid "subquery must return only one column" msgstr "副問い合わせは1列のみを返さなければなりません" -#: parser/parse_expr.c:1985 +#: parser/parse_expr.c:1983 #, c-format msgid "subquery has too many columns" msgstr "副問い合わせの列が多すぎます" -#: parser/parse_expr.c:1990 +#: parser/parse_expr.c:1988 #, c-format msgid "subquery has too few columns" msgstr "副問い合わせの列が少なすぎます" -#: parser/parse_expr.c:2086 +#: parser/parse_expr.c:2092 #, c-format msgid "cannot determine type of empty array" msgstr "空の配列のデータ型を決定できません" -#: parser/parse_expr.c:2087 +#: parser/parse_expr.c:2093 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "必要な型に明示的にキャストしてください。例: ARRAY[]::integer[]" -#: parser/parse_expr.c:2101 +#: parser/parse_expr.c:2107 #, c-format msgid "could not find element type for data type %s" msgstr "データ型%sの要素を見つけられませんでした" -#: parser/parse_expr.c:2184 +#: parser/parse_expr.c:2190 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW式は最大でも%dエントリまでしか持てません" -#: parser/parse_expr.c:2389 +#: parser/parse_expr.c:2395 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "無名のXML属性値は列参照でなければなりません" -#: parser/parse_expr.c:2390 +#: parser/parse_expr.c:2396 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "無名のXML要素値は列参照でなければなりません" -#: parser/parse_expr.c:2405 +#: parser/parse_expr.c:2411 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML属性名\"%s\"が複数あります" -#: parser/parse_expr.c:2513 +#: parser/parse_expr.c:2519 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "XMLSERIALIZE の結果を %s へキャストできません" -#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 +#: parser/parse_expr.c:2843 parser/parse_expr.c:3039 #, c-format msgid "unequal number of entries in row expressions" msgstr "行式において項目数が一致しません" -#: parser/parse_expr.c:2837 +#: parser/parse_expr.c:2853 #, c-format msgid "cannot compare rows of zero length" msgstr "長さ0の行を比較できません" -#: parser/parse_expr.c:2862 +#: parser/parse_expr.c:2878 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "行比較演算子は型%sではなくbooleanを返さなければなりません" -#: parser/parse_expr.c:2869 +#: parser/parse_expr.c:2885 #, c-format msgid "row comparison operator must not return a set" msgstr "行比較演算子は集合を返してはいけません" -#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 +#: parser/parse_expr.c:2944 parser/parse_expr.c:2985 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "行比較演算子%sの解釈を特定できませんでした" -#: parser/parse_expr.c:2930 +#: parser/parse_expr.c:2946 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "行比較演算子はbtree演算子族と関連付けされなければなりません。" -#: parser/parse_expr.c:2971 +#: parser/parse_expr.c:2987 #, c-format 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では=演算子はbooleanを返さなければなりません" - -#: parser/parse_expr.c:3304 +#: parser/parse_expr.c:3322 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "JSON ENCODING句は入力型がbyteaの場合にのみ使用可能です" -#: parser/parse_expr.c:3368 +#: parser/parse_expr.c:3386 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "非文字列型は暗黙のFORMAT JSON句とともには使用できません" -#: parser/parse_expr.c:3369 +#: parser/parse_expr.c:3387 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "非文字列型は明示的なFORMAT JSON句とともには使用できません" -#: parser/parse_expr.c:3458 +#: parser/parse_expr.c:3476 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "JSONフォーマットは非文字列出力型とともには使用できません" -#: parser/parse_expr.c:3471 +#: parser/parse_expr.c:3489 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "bytrea以外の出力型に対してはJSON符号化方式は設定できません" -#: parser/parse_expr.c:3476 +#: parser/parse_expr.c:3494 #, c-format msgid "unsupported JSON encoding" msgstr "サポートされてないJSON符号化方式" -#: parser/parse_expr.c:3477 +#: parser/parse_expr.c:3495 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "JSON符号化方式ではUTF8のみがサポートされています。" -#: parser/parse_expr.c:3514 +#: parser/parse_expr.c:3532 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "SQL/JSON関数ではSETOF型の返却はサポートされていません" -#: parser/parse_expr.c:3519 +#: parser/parse_expr.c:3537 #, 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:3865 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:4088 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "bytrea以外の入力型に対しては JSON FORMAT ENCODING句は使用できません" -#: parser/parse_expr.c:4083 +#: parser/parse_expr.c:4108 #, c-format msgid "cannot use type %s in IS JSON predicate" msgstr "JSON述語では型%sを使用できません" -#: parser/parse_expr.c:4109 parser/parse_expr.c:4229 +#: parser/parse_expr.c:4134 parser/parse_expr.c:4255 +#, c-format +msgid "cannot use type %s in RETURNING clause of %s" +msgstr "%s()のRETURNING節では型%sは指定できません" + +#: parser/parse_expr.c:4136 #, c-format -msgid "cannot use RETURNING type %s in %s" -msgstr "%2$sではRETURNING型%1$sを使用できません" +msgid "Try returning json or jsonb." +msgstr "jsonまたはjsonbでの返却を試してください。" -#: parser/parse_expr.c:4158 +#: parser/parse_expr.c:4184 #, c-format msgid "cannot use non-string types with WITH UNIQUE KEYS clause" msgstr "非文字列型はWITH UNIQUE KEYS句とともには使用できません" -#: parser/parse_expr.c:4232 +#: parser/parse_expr.c:4258 #, c-format msgid "Try returning a string type or bytea." msgstr "文字列型またはBYTEA型での返却を試してください。" -#: parser/parse_expr.c:4297 +#: parser/parse_expr.c:4323 #, c-format msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" msgstr "%s()のRETURNING節ではFORMAT JSONは指定できません" -#: parser/parse_expr.c:4309 +#: parser/parse_expr.c:4336 #, c-format msgid "SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" msgstr "WITH WRAPPERが使われてるときにはSQL/JSONのQUOTESの挙動は指定できまえん" -#: parser/parse_expr.c:4336 +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4350 parser/parse_expr.c:4379 parser/parse_expr.c:4410 parser/parse_expr.c:4436 parser/parse_expr.c:4462 parser/parse_jsontable.c:92 +#, 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:4353 parser/parse_expr.c:4382 +#, c-format +msgid "Only ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT, or DEFAULT expression is allowed in %s for %s." +msgstr "%2$sに対する%1$s句ではERROR, NULL, EMPTY ARRAY, EMPTY OBJECTまたはDEFAULT式のみが使用可能です。" + +#. 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:4360 parser/parse_expr.c:4389 parser/parse_expr.c:4418 parser/parse_expr.c:4446 parser/parse_expr.c:4472 +#, 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:4363 parser/parse_expr.c:4392 +#, c-format +msgid "Only ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT, or DEFAULT expression is allowed in %s for formatted columns." +msgstr "フォーマット化対象列に対する%s句ではERROR, NULL, EMPTY ARRAY, EMPTY OBJECTまたはDEFAULT式のみが使用可能です。" + +#: parser/parse_expr.c:4411 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for %s." +msgstr "%2$sに対する%1$s句ではERROR, TRUE, FALSEまたはUNKNOWNのみが使用可能です。" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4421 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for EXISTS columns." +msgstr "EXIST列に対する%s句ではERROR, TRUE, FALSEまたはUNKNOWNのみが使用可能です。" + +#. 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:4439 parser/parse_expr.c:4465 +#, c-format +msgid "Only ERROR, NULL, or DEFAULT expression is allowed in %s for %s." +msgstr "%2$sに対する%1$s句ではERROR, NULLまたはDEFAULT式のみが使用可能です。" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4449 parser/parse_expr.c:4475 +#, c-format +msgid "Only ERROR, NULL, or DEFAULT expression is allowed in %s for scalar columns." +msgstr "スカラー列に対する%s句ではERROR, NULLまたはDEFAULT式のみが使用可能です。" + +#: parser/parse_expr.c:4505 #, c-format msgid "JSON path expression must be of type %s, not of type %s" msgstr "JSONパス式は型%2$sではなく%1$s型でなければなりません" -#: parser/parse_expr.c:4677 +#: parser/parse_expr.c:4723 #, c-format msgid "can only specify a constant, non-aggregate function, or operator expression for DEFAULT" msgstr "DEFAULTには定数、非集約関数、および演算子式のみ指定可能です" -#: parser/parse_expr.c:4682 +#: parser/parse_expr.c:4728 #, c-format msgid "DEFAULT expression must not contain column references" msgstr "DEFAULT式は列参照を含むことができません" -#: parser/parse_expr.c:4687 +#: parser/parse_expr.c:4733 #, c-format msgid "DEFAULT expression must not return a set" msgstr "DEFAULT式は集合を返してはなりません" -#: parser/parse_expr.c:4721 +#: parser/parse_expr.c:4809 parser/parse_expr.c:4818 #, c-format msgid "cannot cast behavior expression of type %s to %s" msgstr "型%sの挙動式の%sへの型変換はできません" +#: parser/parse_expr.c:4812 +#, 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" @@ -18212,26 +18742,16 @@ msgstr "集合返却関数は COPY FROM の WHERE条件では使用できませ msgid "set-returning functions are not allowed in column generation expressions" msgstr "集合返却関数はカラム生成式では使用できません" -#: parser/parse_jsontable.c:94 +#: parser/parse_jsontable.c:93 #, c-format -msgid "invalid ON ERROR behavior" -msgstr "不正な ON ERROR 挙動指定です" +msgid "Only EMPTY [ ARRAY ] or ERROR is allowed in the top-level ON ERROR clause." +msgstr "最上位のON ERROR句ではEMPTY [ ARRAY ] またERRORのみ使用可能です。" -#: parser/parse_jsontable.c:95 -#, c-format -msgid "Only EMPTY or ERROR is allowed in the top-level ON ERROR clause." -msgstr "最上位のON ERROR句ではEMPTYまたERRORのみ使用可能です。" - -#: parser/parse_jsontable.c:189 parser/parse_jsontable.c:203 +#: parser/parse_jsontable.c:187 parser/parse_jsontable.c:201 #, c-format 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 列は2つ以上は使用できません" - #: parser/parse_merge.c:129 #, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" @@ -18307,227 +18827,222 @@ msgstr "演算子 ANY/ALL (配列) はブール型を返さなければなりま msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "演算子 ANY/ALL (配列) 集合を返してはなりません" -#: parser/parse_param.c:221 +#: parser/parse_param.c:222 #, c-format msgid "inconsistent types deduced for parameter $%d" msgstr "パラメータ$%dについて推定された型が不整合です" -#: parser/parse_param.c:309 tcop/postgres.c:740 +#: parser/parse_param.c:310 tcop/postgres.c:734 #, c-format msgid "could not determine data type of parameter $%d" msgstr "パラメータ$%dのデータ型が特定できませんでした" -#: parser/parse_relation.c:221 +#: parser/parse_relation.c:226 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "テーブル参照\"%s\"は曖昧です" -#: parser/parse_relation.c:265 +#: parser/parse_relation.c:273 #, c-format msgid "table reference %u is ambiguous" msgstr "テーブル参照%uは曖昧です" -#: parser/parse_relation.c:465 -#, c-format -msgid "table name \"%s\" specified more than once" -msgstr "テーブル名\"%s\"が複数指定されました" - -#: parser/parse_relation.c:494 parser/parse_relation.c:3633 parser/parse_relation.c:3642 +#: parser/parse_relation.c:502 parser/parse_relation.c:3739 parser/parse_relation.c:3748 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "テーブル\"%s\"用のFROM句に対する不正な参照" -#: parser/parse_relation.c:498 parser/parse_relation.c:3644 +#: parser/parse_relation.c:506 parser/parse_relation.c:3750 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "テーブル\"%s\"の項目がありますが、問い合わせのこの部分からは参照できません。\"" -#: parser/parse_relation.c:500 +#: parser/parse_relation.c:508 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "LATERAL参照では組み合わせる結合のタイプはINNERまたはLEFTでなければなりません" -#: parser/parse_relation.c:703 +#: parser/parse_relation.c:711 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "検査制約で参照されるシステム列\"%s\"は不正です" -#: parser/parse_relation.c:712 +#: parser/parse_relation.c:724 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "カラム生成式ではシステム列\"%s\"は使用できません" -#: parser/parse_relation.c:723 +#: parser/parse_relation.c:735 #, c-format msgid "cannot use system column \"%s\" in MERGE WHEN condition" msgstr "MERGE WHEN条件ではシステム列\"%s\"は使用できません" -#: parser/parse_relation.c:1236 parser/parse_relation.c:1691 parser/parse_relation.c:2384 +#: parser/parse_relation.c:1251 parser/parse_relation.c:1708 parser/parse_relation.c:2402 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "テーブル\"%s\"では%d列使用できますが、%d列指定されました" -#: parser/parse_relation.c:1445 +#: parser/parse_relation.c:1462 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "\"%s\"というWITH項目はありますが、これは問い合わせのこの部分からは参照できません。" -#: parser/parse_relation.c:1447 +#: parser/parse_relation.c:1464 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "WITH RECURSIVE を使うか、もしくは WITH 項目の場所を変えて前方参照をなくしてください" -#: parser/parse_relation.c:1833 +#: parser/parse_relation.c:1850 #, c-format msgid "a column definition list is redundant for a function with OUT parameters" msgstr "OUTパラメータを持つ関数に対しては列定義リストは不要です" -#: parser/parse_relation.c:1839 +#: parser/parse_relation.c:1856 #, c-format msgid "a column definition list is redundant for a function returning a named composite type" msgstr "名前付き複合型w返す関数に対しては列定義リストは不要です" -#: parser/parse_relation.c:1846 +#: parser/parse_relation.c:1863 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "列定義リストは\"record\"を返す関数でのみ使用できます" -#: parser/parse_relation.c:1857 +#: parser/parse_relation.c:1874 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "\"record\"を返す関数では列定義リストが必要です" -#: parser/parse_relation.c:1894 +#: parser/parse_relation.c:1911 #, c-format msgid "column definition lists can have at most %d entries" msgstr "列定義リストは最大でも%dエントリまでしか持てません" -#: parser/parse_relation.c:1954 +#: parser/parse_relation.c:1971 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "FROM句の関数\"%s\"の戻り値型%sはサポートされていません" -#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 +#: parser/parse_relation.c:1998 parser/parse_relation.c:2083 #, c-format msgid "functions in FROM can return at most %d columns" msgstr "FROM内の関数は最大%d列までしか返却できません" -#: parser/parse_relation.c:2096 +#: parser/parse_relation.c:2113 #, c-format msgid "%s function has %d columns available but %d columns specified" msgstr "%s関数では%d列使用できますが、%d列指定されました" -#: parser/parse_relation.c:2177 +#: parser/parse_relation.c:2194 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "VALUESリスト\"%s\"は%d列使用可能ですが、%d列が指定されました" -#: parser/parse_relation.c:2242 +#: parser/parse_relation.c:2259 #, c-format msgid "joins can have at most %d columns" msgstr "JOIN で指定できるのは、最大 %d 列です" -#: parser/parse_relation.c:2267 +#: parser/parse_relation.c:2284 #, c-format msgid "join expression \"%s\" has %d columns available but %d columns specified" msgstr "結合式\"%s\"では%d列使用できますが、%d列指定されました" -#: parser/parse_relation.c:2357 +#: parser/parse_relation.c:2375 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH 問い合わせ\"%s\"にRETURNING句がありません" -#: parser/parse_relation.c:3635 +#: parser/parse_relation.c:3741 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "テーブル別名\"%s\"を参照しようとしていたようです。" -#: parser/parse_relation.c:3647 +#: parser/parse_relation.c:3753 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." msgstr "そのテーブルを参照するためには、この副問合せをLATERALとマークする必要があります。" -#: parser/parse_relation.c:3653 +#: parser/parse_relation.c:3759 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "テーブル\"%s\"用のFROM句エントリがありません" -#: parser/parse_relation.c:3693 +#: parser/parse_relation.c:3799 #, c-format msgid "There are columns named \"%s\", but they are in tables that cannot be referenced from this part of the query." msgstr "\"%s\"という名前の列はありますが、問い合わせのこの部分からは参照できないテーブルに属しています。" -#: parser/parse_relation.c:3695 +#: parser/parse_relation.c:3801 #, c-format msgid "Try using a table-qualified name." msgstr "テーブル名で修飾した名前を試してください。" -#: parser/parse_relation.c:3703 +#: parser/parse_relation.c:3809 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "テーブル\"%2$s\"には\"%1$s\"という名前の列がありますが、問い合わせのこの部分からは参照できません。" -#: parser/parse_relation.c:3706 +#: parser/parse_relation.c:3812 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." msgstr "その列を参照するには、この副問合せをLATERALとマークする必要があります。" -#: parser/parse_relation.c:3708 +#: parser/parse_relation.c:3814 #, c-format msgid "To reference that column, you must use a table-qualified name." msgstr "その列を参照するには、テーブル名で修飾した名前を使う必要があります。" -#: parser/parse_relation.c:3728 +#: parser/parse_relation.c:3834 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "列\"%s.%s\"を参照しようとしていたようです。" -#: parser/parse_relation.c:3742 +#: parser/parse_relation.c:3848 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "列\"%s.%s\"または列\"%s.%s\"を参照しようとしていたようです。" -#: parser/parse_target.c:480 parser/parse_target.c:795 +#: parser/parse_target.c:483 parser/parse_target.c:798 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "システム列\"%s\"に代入できません" -#: parser/parse_target.c:508 +#: parser/parse_target.c:511 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "配列要素にDEFAULTを設定できません" -#: parser/parse_target.c:513 +#: parser/parse_target.c:516 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "サブフィールドにDEFAULTを設定できません" -#: parser/parse_target.c:587 +#: parser/parse_target.c:590 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "列\"%s\"は型%sですが、式は型%sでした" -#: parser/parse_target.c:779 +#: parser/parse_target.c:782 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "型%3$sが複合型でありませんので、列\"%2$s\"のフィールド\"%1$s\"に代入できません。" -#: parser/parse_target.c:788 +#: parser/parse_target.c:791 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "データ型%3$sの列がありませんので、列\"%2$s\"のフィールド\"%1$s\"に代入できません。" -#: parser/parse_target.c:877 +#: parser/parse_target.c:880 #, c-format msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "\"%s\"への添字付き代入には型%sが必要ですが、式は型%sでした" -#: parser/parse_target.c:887 +#: parser/parse_target.c:890 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "サブフィールド\"%s\"は型%sですが、式は型%sでした" -#: parser/parse_target.c:1327 +#: parser/parse_target.c:1330 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "テーブル指定のないSELECT *は無効です" @@ -18547,7 +19062,7 @@ msgstr "%%TYPE参照が不適切です(ドット区切りの名前が多すぎ msgid "type reference %s converted to %s" msgstr "型参照%sは%sに変換されました" -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 utils/cache/typcache.c:452 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:478 utils/cache/typcache.c:533 #, c-format msgid "type \"%s\" is only a shell" msgstr "型\"%s\"は単なるシェルです" @@ -18567,337 +19082,352 @@ msgstr "型修正子は単純な定数または識別子でなければなりま msgid "invalid type name \"%s\"" msgstr "不正な型名\"%s\"" -#: parser/parse_utilcmd.c:266 +#: parser/parse_utilcmd.c:265 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "パーティション親テーブルを継承の子テーブルとして作成はできません" -#: parser/parse_utilcmd.c:586 +#: parser/parse_utilcmd.c:504 +#, c-format +msgid "cannot set logged status of a temporary sequence" +msgstr "一時シーケンスのログ出力状態は設定できません" + +#: parser/parse_utilcmd.c:642 #, c-format msgid "array of serial is not implemented" msgstr "連番(SERIAL)の配列は実装されていません" -#: parser/parse_utilcmd.c:665 parser/parse_utilcmd.c:677 parser/parse_utilcmd.c:736 +#: parser/parse_utilcmd.c:747 parser/parse_utilcmd.c:765 parser/parse_utilcmd.c:873 parser/parse_utilcmd.c:906 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"でNULL宣言とNOT NULL宣言が競合しています" -#: parser/parse_utilcmd.c:689 +#: parser/parse_utilcmd.c:759 parser/parse_utilcmd.c:1077 +#, c-format +msgid "not-null constraints on partitioned tables cannot be NO INHERIT" +msgstr "パーティション親テーブルに対する非NULL制約はNO INHERIT指定できません" + +#: parser/parse_utilcmd.c:773 parser/parse_utilcmd.c:808 +#, c-format +msgid "conflicting NO INHERIT declarations for not-null constraints on column \"%s\"" +msgstr "列\"%s\"の非NULL制約に関する矛盾するNO INHERIT宣言" + +#: parser/parse_utilcmd.c:821 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"で複数のデフォルト値の指定があります" -#: parser/parse_utilcmd.c:706 +#: parser/parse_utilcmd.c:838 #, c-format msgid "identity columns are not supported on typed tables" msgstr "型付けされたテーブルでは識別列はサポートされていません" -#: parser/parse_utilcmd.c:710 +#: parser/parse_utilcmd.c:842 #, c-format msgid "identity columns are not supported on partitions" msgstr "パーティションでは識別列はサポートされていません" -#: parser/parse_utilcmd.c:719 +#: parser/parse_utilcmd.c:851 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"に複数の識別指定があります" -#: parser/parse_utilcmd.c:749 +#: parser/parse_utilcmd.c:884 #, c-format msgid "generated columns are not supported on typed tables" msgstr "型付けされたテーブルでは生成カラムはサポートされていません" -#: parser/parse_utilcmd.c:753 +#: parser/parse_utilcmd.c:888 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"に複数のGENERATED句の指定があります" -#: parser/parse_utilcmd.c:771 parser/parse_utilcmd.c:886 +#: parser/parse_utilcmd.c:915 parser/parse_utilcmd.c:1043 #, 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:924 parser/parse_utilcmd.c:1053 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "外部テーブルではユニーク制約はサポートされていません" -#: parser/parse_utilcmd.c:825 +#: parser/parse_utilcmd.c:971 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "デフォルト値と識別指定の両方がテーブル\"%2$s\"の列\"%1$s\"に指定されています" -#: parser/parse_utilcmd.c:833 +#: parser/parse_utilcmd.c:979 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"にデフォルト値と生成式の両方が指定されています" -#: parser/parse_utilcmd.c:841 +#: parser/parse_utilcmd.c:987 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"に識別指定と生成式の両方が指定されています" -#: parser/parse_utilcmd.c:906 +#: parser/parse_utilcmd.c:1063 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "外部テーブルでは除外制約はサポートされていません" -#: parser/parse_utilcmd.c:971 -#, c-format -msgid "LIKE is not supported for creating foreign tables" -msgstr "外部テーブルの作成においてLIKEはサポートされていません" - -#: parser/parse_utilcmd.c:984 +#: parser/parse_utilcmd.c:1149 #, 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:1896 parser/parse_utilcmd.c:2004 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "インデックス\"%s\"には行全体テーブル参照が含まれます" -#: parser/parse_utilcmd.c:2217 +#: parser/parse_utilcmd.c:2398 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "CREATE TABLE では既存のインデックスを使えません" -#: parser/parse_utilcmd.c:2237 +#: parser/parse_utilcmd.c:2418 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "インデックス\"%s\"はすでに1つの制約に割り当てられています" -#: parser/parse_utilcmd.c:2258 +#: parser/parse_utilcmd.c:2444 #, 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:2445 parser/parse_utilcmd.c:2452 parser/parse_utilcmd.c:2459 parser/parse_utilcmd.c:2535 #, 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:2451 #, c-format msgid "index \"%s\" contains expressions" msgstr "インデックス\"%s\"は式を含んでいます" -#: parser/parse_utilcmd.c:2272 +#: parser/parse_utilcmd.c:2458 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\"は部分インデックスです" -#: parser/parse_utilcmd.c:2284 +#: parser/parse_utilcmd.c:2470 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\"は遅延可能インデックスです" -#: parser/parse_utilcmd.c:2285 +#: parser/parse_utilcmd.c:2471 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "遅延可能インデックスを使った遅延不可制約は作れません。" -#: parser/parse_utilcmd.c:2349 +#: parser/parse_utilcmd.c:2534 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "インデックス\"%s\"の列番号%dにはデフォルトのソート動作がありません" -#: parser/parse_utilcmd.c:2506 +#: parser/parse_utilcmd.c:2726 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "列\"%s\"がプライマリキー制約内に2回出現します" -#: parser/parse_utilcmd.c:2512 +#: parser/parse_utilcmd.c:2732 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "列\"%s\"が一意性制約内に2回出現します" -#: parser/parse_utilcmd.c:2846 +#: parser/parse_utilcmd.c:2777 +#, c-format +msgid "column \"%s\" in WITHOUT OVERLAPS is not a range or multirange type" +msgstr "WITHOUT OVERLAPS中の列\"%s\"は範囲型でも副範囲型でもありません" + +#: parser/parse_utilcmd.c:2805 +#, c-format +msgid "constraint using WITHOUT OVERLAPS needs at least two columns" +msgstr "WITHOUT OVERLAPSを使用する制約では少なくとも2つの列が必要です" + +#: parser/parse_utilcmd.c:3102 #, 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:3174 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "統計情報式は参照されているテーブルのみを参照できます" -#: parser/parse_utilcmd.c:2961 +#: parser/parse_utilcmd.c:3217 #, c-format msgid "rules on materialized views are not supported" msgstr "実体化ビューに対するルールはサポートされません" -#: parser/parse_utilcmd.c:3021 +#: parser/parse_utilcmd.c:3277 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "ルールのWHERE条件に他のリレーションへの参照を持たせられません" -#: parser/parse_utilcmd.c:3093 +#: parser/parse_utilcmd.c:3349 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "ルールのWHERE条件はSELECT、INSERT、UPDATE、DELETE動作のみを持つことができます" -#: parser/parse_utilcmd.c:3111 parser/parse_utilcmd.c:3212 rewrite/rewriteHandler.c:537 rewrite/rewriteManip.c:1095 +#: parser/parse_utilcmd.c:3367 parser/parse_utilcmd.c:3468 rewrite/rewriteHandler.c:546 rewrite/rewriteManip.c:1234 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "条件付きのUNION/INTERSECT/EXCEPT文は実装されていません" -#: parser/parse_utilcmd.c:3129 +#: parser/parse_utilcmd.c:3385 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECTルールではOLDを使用できません" -#: parser/parse_utilcmd.c:3133 +#: parser/parse_utilcmd.c:3389 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECTルールではNEWを使用できません" -#: parser/parse_utilcmd.c:3142 +#: parser/parse_utilcmd.c:3398 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERTルールではOLDを使用できません" -#: parser/parse_utilcmd.c:3148 +#: parser/parse_utilcmd.c:3404 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETEルールではNEWを使用できません" -#: parser/parse_utilcmd.c:3176 +#: parser/parse_utilcmd.c:3432 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "WITH 問い合わせ内では OLD は参照できません" -#: parser/parse_utilcmd.c:3183 +#: parser/parse_utilcmd.c:3439 #, 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 "新しいパーティションリストには最低2つの要素が必要です" - -#: parser/parse_utilcmd.c:3811 +#: parser/parse_utilcmd.c:3897 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "DEFERRABLE句の場所が間違っています" -#: parser/parse_utilcmd.c:3816 parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:3902 parser/parse_utilcmd.c:3917 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "複数のDEFERRABLE/NOT DEFERRABLE句を使用できません" -#: parser/parse_utilcmd.c:3826 +#: parser/parse_utilcmd.c:3912 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "NOT DEFERRABLE句の場所が間違っています" -#: parser/parse_utilcmd.c:3847 +#: parser/parse_utilcmd.c:3933 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "INITIALLY DEFERRED句の場所が間違っています<" -#: parser/parse_utilcmd.c:3852 parser/parse_utilcmd.c:3878 +#: parser/parse_utilcmd.c:3938 parser/parse_utilcmd.c:3964 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "複数のINITIALLY IMMEDIATE/DEFERRED句を使用できません" -#: parser/parse_utilcmd.c:3873 +#: parser/parse_utilcmd.c:3959 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "INITIALLY IMMEDIATE句の場所が間違っています<" -#: parser/parse_utilcmd.c:4066 +#: parser/parse_utilcmd.c:3976 +#, c-format +msgid "misplaced ENFORCED clause" +msgstr "ENFORCED句の場所が間違っています" + +#: parser/parse_utilcmd.c:3981 parser/parse_utilcmd.c:3998 +#, c-format +msgid "multiple ENFORCED/NOT ENFORCED clauses not allowed" +msgstr "複数のENFORCED/NOT ENFORCED句は指定できません" + +#: parser/parse_utilcmd.c:3993 +#, c-format +msgid "misplaced NOT ENFORCED clause" +msgstr "NOT ENFORCED句の場所が間違っています" + +#: parser/parse_utilcmd.c:4191 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATEで指定したスキーマ(%s)が作成先のスキーマ(%s)と異なります" -#: parser/parse_utilcmd.c:4108 +#: parser/parse_utilcmd.c:4226 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\"はパーティションテーブルではありません" + +#: parser/parse_utilcmd.c:4233 #, c-format msgid "table \"%s\" is not partitioned" msgstr "テーブル\"%s\"はパーティションされていません" -#: parser/parse_utilcmd.c:4115 +#: parser/parse_utilcmd.c:4240 #, c-format msgid "index \"%s\" is not partitioned" msgstr "インデックス\"%s\"はパーティションされていません" -#: parser/parse_utilcmd.c:4155 +#: parser/parse_utilcmd.c:4280 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "ハッシュパーティションテーブルはデフォルトパーティションを持つことができません" -#: parser/parse_utilcmd.c:4172 +#: parser/parse_utilcmd.c:4297 #, c-format msgid "invalid bound specification for a hash partition" msgstr "ハッシュパーティションに対する不正な境界指定" -#: parser/parse_utilcmd.c:4178 partitioning/partbounds.c:4803 +#: parser/parse_utilcmd.c:4303 partitioning/partbounds.c:4802 #, c-format msgid "modulus for hash partition must be an integer value greater than zero" msgstr "ハッシュパーティションの法は0より大きい整数にする必要があります" -#: parser/parse_utilcmd.c:4185 partitioning/partbounds.c:4811 +#: parser/parse_utilcmd.c:4310 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:4323 #, c-format msgid "invalid bound specification for a list partition" msgstr "リストパーティションに対する不正な境界指定" -#: parser/parse_utilcmd.c:4251 +#: parser/parse_utilcmd.c:4376 #, c-format msgid "invalid bound specification for a range partition" msgstr "範囲パーティションに対する不正な境界指定" -#: parser/parse_utilcmd.c:4257 +#: parser/parse_utilcmd.c:4382 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROMは全てのパーティション列ごとに一つの値を指定しなければなりません" -#: parser/parse_utilcmd.c:4261 +#: parser/parse_utilcmd.c:4386 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TOは全てのパーティション列ごとに一つの値を指定しなければなりません" -#: parser/parse_utilcmd.c:4375 +#: parser/parse_utilcmd.c:4500 #, c-format msgid "cannot specify NULL in range bound" msgstr "範囲境界でNULLは使用できません" -#: parser/parse_utilcmd.c:4424 +#: parser/parse_utilcmd.c:4549 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "MAXVALUEに続く境界値はMAXVALUEでなければなりません" -#: parser/parse_utilcmd.c:4431 +#: parser/parse_utilcmd.c:4556 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "MINVALUEに続く境界値はMINVALUEでなければなりません" -#: parser/parse_utilcmd.c:4474 +#: parser/parse_utilcmd.c:4599 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "指定した値は列\"%s\"の%s型に変換できません" @@ -18910,12 +19440,12 @@ msgstr "UESCAPE の後には単純な文字列リテラルが続かなければ msgid "invalid Unicode escape character" msgstr "不正なUnicodeエスケープ文字" -#: parser/parser.c:347 scan.l:1391 +#: parser/parser.c:347 scan.l:1385 #, c-format msgid "invalid Unicode escape value" msgstr "不正なUnicodeエスケープシーケンスの値" -#: parser/parser.c:494 scan.l:702 utils/adt/varlena.c:6640 +#: parser/parser.c:494 scan.l:702 utils/adt/varlena.c:6842 #, c-format msgid "invalid Unicode escape" msgstr "不正なUnicodeエスケープ" @@ -18925,7 +19455,7 @@ msgstr "不正なUnicodeエスケープ" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Unicodeエスケープは\\XXXXまたは\\+XXXXXXでなければなりません。" -#: parser/parser.c:523 scan.l:663 scan.l:679 scan.l:695 utils/adt/varlena.c:6665 +#: parser/parser.c:523 scan.l:663 scan.l:679 scan.l:695 utils/adt/varlena.c:6867 #, c-format msgid "invalid Unicode surrogate pair" msgstr "不正なUnicodeサロゲートペア" @@ -18955,127 +19485,52 @@ msgstr "新しい法(除数)%1$dは既存のパーティション\"%3$s\"の法 msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "新しい法(除数)%1$dは既存のパーティション\"%3$s\"の法である%2$dで割り切れません。" -#: partitioning/partbounds.c:3127 partitioning/partbounds.c:5202 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "リレーション\"%s\"に対して空の範囲境界が指定されました" -#: 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 "指定された下限%sは上限%sより大きいか同じです。" -#: 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 "デフォルトパーティション\"%2$s\"の子テーブルであるためテーブル\"%1$s\"のスキャンをスキップします" -#: 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 "ハッシュパーティションの剰余は`0以上の整数でなければなりません" -#: 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 "パーティションキーの列%dは%s型です、しかし与えられた値は%s型です" -#: 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 "パーティションキーの列 %d は \"%s\"型です、しかし与えられた値は \"%s\"型です" -#: 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 "分割対象のパーティションがその値を含んでいないため、新しいパーティション\"%s\"はこの値を持てません" - -#: partitioning/partbounds.c:5380 -#, c-format -msgid "new partition \"%s\" cannot have NULL value because split partition does not have" -msgstr "分割対象パーティションがNULLを含んでいないため、新しいパーティション\"%s\"はNULLを持てません" - -#: 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 "DEFAULTパーティションは一つのみ存在できます" - -#: 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 "分割対象のパーティションがDEFAULTであるため、リスト中の一つのパーティションがDEFAULTである必要があります" - -#: partitioning/partbounds.c:5687 -#, c-format -msgid "new partition cannot be DEFAULT because DEFAULT partition already exists" -msgstr "DEFAULTパーティションがすでに存在するため、新しいパーティションをDEFAULTにはできません" - -#: 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\"のstatに失敗しました: %m" @@ -19142,27 +19597,27 @@ msgstr "このプラットフォームではヒュージページをサポート 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:1406 #, 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:1408 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "データディレクトリ \"%s\". に対応する古いサーバープロセスをすべて終了させてください。" -#: 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" @@ -19171,7 +19626,7 @@ msgstr "" "このエラーは、ディスクが足りなくなったことを意味していません。この原因はセマフォセット数が上限(SEMMNI)に達したか、またはシステム全体でのセマフォ数を上限まで(SEMMNS)を使いきるような場合です。対処としては、対応するカーネルのパラメータを増やす必要があります。もしくは PostgreSQLの\"max_connections\"設定をを減らすことで、消費するセマフォの数を減らしてください。\n" "PostgreSQL向けの共有メモリ設定に関する詳細情報は、PostgreSQL のドキュメントに記載されています。" -#: 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 "" @@ -19295,385 +19750,400 @@ msgstr "失敗したシステムコールはMapViewOfFileExです。" msgid "Failed system call was MapViewOfFileEx." msgstr "失敗したシステムコールはMapViewOfFileExです。" -#: postmaster/autovacuum.c:686 +#: postmaster/autovacuum.c:693 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "自動VACUUMワーカーの起動に時間がかかりすぎています; キャンセルしました" -#: postmaster/autovacuum.c:2199 +#: postmaster/autovacuum.c:2221 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "自動VACUUM: 孤立した一時テーブル\"%s.%s.%s\"を削除します" -#: postmaster/autovacuum.c:2435 +#: postmaster/autovacuum.c:2457 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動VACUUM" -#: postmaster/autovacuum.c:2438 +#: postmaster/autovacuum.c:2460 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動ANALYZE" -#: postmaster/autovacuum.c:2632 +#: postmaster/autovacuum.c:2654 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "リレーション\"%s.%s.%s\"の作業エントリを処理しています" -#: postmaster/autovacuum.c:3250 +#: postmaster/autovacuum.c:3312 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "誤設定のため自動VACUUMが起動できません" -#: postmaster/autovacuum.c:3251 +#: postmaster/autovacuum.c:3313 #, c-format msgid "Enable the \"track_counts\" option." msgstr "\"track_counts\"オプションを有効にしてください。" +#: postmaster/autovacuum.c:3435 +#, c-format +msgid "\"autovacuum_max_workers\" (%d) should be less than or equal to \"autovacuum_worker_slots\" (%d)" +msgstr "\"autovacuum_max_workers\" (%d) は \"autovacuum_worker_slots\" (%d) 以下でなければなりません" + +#: postmaster/autovacuum.c:3437 +#, c-format +msgid "The server will only start up to \"autovacuum_worker_slots\" (%d) autovacuum workers at a given time." +msgstr "このサーバーは、同時に最大 \"autovacuum_worker_slots\" (%d) プロセスの自動バキュームワーカーを起動します。" + #: postmaster/bgworker.c:260 #, c-format -msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" -msgstr "バックグラウンドワーカー状態の矛盾 (max_worker_processes=%d, total_slots=%d)" +msgid "inconsistent background worker state (\"max_worker_processes\"=%d, total slots=%d)" +msgstr "バックグラウンドワーカー状態の不整合 (\"max_worker_processes\"=%d, スロット総数=%d)" -#: postmaster/bgworker.c:651 +#: postmaster/bgworker.c:645 #, c-format msgid "background worker \"%s\": background workers without shared memory access are not supported" msgstr "バックグラウンドワーカー\"%s\": 共有メモリアクセスを伴わないバックグラウンドワーカーはサポートされません" -#: postmaster/bgworker.c:662 +#: postmaster/bgworker.c:656 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "バックグラウンドワーカー\"%s\": postmaster起動中に起動している場合にはデータベースアクセスを要求することはできません" -#: postmaster/bgworker.c:676 +#: postmaster/bgworker.c:670 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "バックグラウンドワーカー\"%s\": 不正な再起動間隔" -#: postmaster/bgworker.c:691 +#: postmaster/bgworker.c:685 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "バックグラウンドワーカー\"%s\": パラレルワーカーは再起動するように設定してはいけません" -#: postmaster/bgworker.c:715 tcop/postgres.c:3285 +#: postmaster/bgworker.c:709 tcop/postgres.c:3345 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "管理者コマンドによりバックグラウンドワーカー\"%s\"を終了しています" -#: postmaster/bgworker.c:888 +#: postmaster/bgworker.c:868 postmaster/bgworker.c:902 +#, c-format +msgid "database connection requirement not indicated during registration" +msgstr "登録時にデータベース接続の必要性が示されていません" + +#: postmaster/bgworker.c:878 postmaster/bgworker.c:912 +#, c-format +msgid "invalid processing mode in background worker" +msgstr "バックグラウンドワーカー内の不正な処理モード" + +#: postmaster/bgworker.c:965 #, c-format msgid "background worker \"%s\": must be registered in \"shared_preload_libraries\"" msgstr "バックグラウンドワーカー\"%s\": \"shared_preload_libraries\"に登録されていなければなりません" -#: postmaster/bgworker.c:911 +#: postmaster/bgworker.c:988 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "バックグラウンドワーカー\"%s\": 動的バックグラウンドワーカーのみが通知を要求できます" -#: postmaster/bgworker.c:926 +#: postmaster/bgworker.c:1003 #, c-format msgid "too many background workers" msgstr "バックグラウンドワーカーが多すぎます" -#: postmaster/bgworker.c:927 +#: postmaster/bgworker.c:1004 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "現在の設定では最大%dのバックグラウンドワーカーを登録することができます。" -#: postmaster/bgworker.c:931 +#: postmaster/bgworker.c:1008 postmaster/checkpointer.c:459 #, 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 +#: postmaster/checkpointer.c:455 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "チェックポイントの発生周期が短すぎます(%d秒間隔)" -#: postmaster/checkpointer.c:445 -#, c-format -msgid "Consider increasing the configuration parameter \"%s\"." -msgstr "設定パラメータ\"%s\"を増やすことを検討してください。" - -#: postmaster/checkpointer.c:1067 +#: postmaster/checkpointer.c:1125 #, c-format msgid "checkpoint request failed" msgstr "チェックポイント要求が失敗しました" -#: postmaster/checkpointer.c:1068 +#: postmaster/checkpointer.c:1126 #, c-format msgid "Consult recent messages in the server log for details." msgstr "詳細はサーバーログの最近のメッセージを調査してください" -#: postmaster/launch_backend.c:369 +#: postmaster/launch_backend.c:395 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "サーバープロセス\"%s\"を実行できませんでした: %m" -#: postmaster/launch_backend.c:422 +#: postmaster/launch_backend.c:449 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "バックエンドパラメータファイルのファイルマッピングを作成できませんでした: エラーコード%lu" -#: postmaster/launch_backend.c:430 +#: postmaster/launch_backend.c:457 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "バックエンドパラメータのメモリをマップできませんでした: エラーコード %lu" -#: postmaster/launch_backend.c:447 +#: postmaster/launch_backend.c:474 #, c-format msgid "subprocess command line too long" msgstr "サブプロセスのコマンドラインが長すぎます" -#: postmaster/launch_backend.c:465 +#: postmaster/launch_backend.c:492 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "CreateProcess() の呼び出しが失敗しました: %m (エラーコード %lu)" -#: postmaster/launch_backend.c:492 +#: postmaster/launch_backend.c:521 #, 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:525 #, 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:547 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "共有メモリの確保のリトライ回数が多すぎるため中断します" -#: postmaster/launch_backend.c:519 +#: postmaster/launch_backend.c:548 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "これはASLRまたはアンチウイルスソフトウェアが原因である可能性があります。" -#: postmaster/launch_backend.c:817 +#: postmaster/launch_backend.c:854 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "バックエンドで使用するためにソケット%dを複製できませんでした: エラーコード %d" -#: postmaster/launch_backend.c:849 +#: postmaster/launch_backend.c:886 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "継承したソケットを作成できませんでした: エラーコード %d\n" -#: postmaster/launch_backend.c:878 +#: postmaster/launch_backend.c:915 #, 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:921 #, 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:932 #, 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:944 #, c-format msgid "could not remove file \"%s\": %m\n" msgstr "ファイル\"%s\"を削除できませんでした: %m\n" -#: postmaster/launch_backend.c:923 +#: postmaster/launch_backend.c:960 #, 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:979 #, 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:986 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "バックエンドパラメータ変数のハンドルをクローズできませんでした: エラーコード%lu\n" -#: postmaster/pgarch.c:428 +#: postmaster/pgarch.c:429 #, c-format msgid "\"archive_mode\" enabled, yet archiving is not configured" msgstr "\"archive_mode\"は有効ですが、アーカイブ方法が設定されていません" -#: postmaster/pgarch.c:452 +#: postmaster/pgarch.c:453 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "孤立したアーカイブステータスファイル\"%s\"を削除しました" -#: postmaster/pgarch.c:462 +#: postmaster/pgarch.c:463 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "孤立したアーカイブステータスファイル\"%s\"の削除の失敗回数が上限を超えました、あとでリトライします" -#: postmaster/pgarch.c:498 +#: postmaster/pgarch.c:499 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "先行書き込みログファイル\"%s\"のアーカイブ処理の失敗回数が超過しました、後で再度試します" -#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 +#: postmaster/pgarch.c:885 postmaster/pgarch.c:924 #, c-format msgid "both \"archive_command\" and \"archive_library\" set" msgstr "\"archive_command\"と\"archive_library\"が両方設定されています" -#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 +#: postmaster/pgarch.c:886 postmaster/pgarch.c:925 #, c-format msgid "Only one of \"archive_command\", \"archive_library\" may be set." msgstr "\"archive_command\"と\"archive_library\"のいずれか一方のみ設定できます。" -#: postmaster/pgarch.c:897 +#: postmaster/pgarch.c:903 #, c-format msgid "restarting archiver process because value of \"archive_library\" was changed" msgstr "\"archive_library\"の設定が変更されたためアーカイバプロセスを再起動します" -#: postmaster/pgarch.c:934 +#: postmaster/pgarch.c:940 #, c-format msgid "archive modules have to define the symbol %s" msgstr "アーカイブモジュールはシンボル%sを定義しなくてはなりません" -#: postmaster/pgarch.c:940 +#: postmaster/pgarch.c:946 #, c-format msgid "archive modules must register an archive callback" msgstr "アーカイブモジュールはアーカイブコールバックを登録しなくてはなりません" -#: postmaster/postmaster.c:661 +#: postmaster/postmaster.c:678 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: -fオプションに対する不正な引数: \"%s\"\n" -#: postmaster/postmaster.c:734 +#: postmaster/postmaster.c:751 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: -tオプションに対する不正な引数: \"%s\"\n" -#: postmaster/postmaster.c:757 +#: postmaster/postmaster.c:774 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: 不正な引数: \"%s\"\n" -#: postmaster/postmaster.c:825 +#: postmaster/postmaster.c:842 #, 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)と\"reserved_connections\" (%d)との和は \"max_connections\" (%d)より小さくなければなりません\n" -#: postmaster/postmaster.c:833 +#: postmaster/postmaster.c:850 #, c-format msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" msgstr "\"wal_level\"が\"minimal\"の時はWALアーカイブは有効にできません" -#: postmaster/postmaster.c:836 +#: postmaster/postmaster.c:853 #, c-format msgid "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be \"replica\" or \"logical\"" msgstr "WALストリーミング(\"max_wal_senders\" > 0)を行うには wal_levelを\"replica\"または\"logical\"にする必要があります" -#: postmaster/postmaster.c:839 +#: postmaster/postmaster.c:856 #, c-format msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" msgstr "\"wal_level\"が\"minimal\"の時はWALは集約できません" -#: postmaster/postmaster.c:847 +#: postmaster/postmaster.c:864 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: データトークンテーブルが不正です、修復してください\n" -#: postmaster/postmaster.c:1004 +#: postmaster/postmaster.c:1025 #, c-format msgid "could not create I/O completion port for child queue" msgstr "子キュー向けのI/O終了ポートを作成できませんでした" -#: postmaster/postmaster.c:1069 +#: postmaster/postmaster.c:1091 #, c-format msgid "ending log output to stderr" msgstr "標準エラー出力へのログ出力を終了しています" -#: postmaster/postmaster.c:1070 +#: postmaster/postmaster.c:1092 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "この後のログ出力はログ配送先\"%s\"に出力されます。" -#: postmaster/postmaster.c:1081 +#: postmaster/postmaster.c:1103 #, c-format msgid "starting %s" msgstr "%s を起動しています" -#: postmaster/postmaster.c:1143 +#: postmaster/postmaster.c:1165 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "\"%s\"に関する監視用ソケットを作成できませんでした" -#: postmaster/postmaster.c:1149 +#: postmaster/postmaster.c:1171 #, c-format msgid "could not create any TCP/IP sockets" msgstr "TCP/IPソケットを作成できませんでした" -#: postmaster/postmaster.c:1181 +#: postmaster/postmaster.c:1203 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister()が失敗しました: エラーコード %ld" -#: postmaster/postmaster.c:1234 +#: postmaster/postmaster.c:1256 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "ディレクトリ\"%s\"においてUnixドメインソケットを作成できませんでした" -#: postmaster/postmaster.c:1240 +#: postmaster/postmaster.c:1262 #, c-format msgid "could not create any Unix-domain sockets" msgstr "Unixドメインソケットを作成できませんでした" -#: postmaster/postmaster.c:1251 +#: postmaster/postmaster.c:1273 #, c-format msgid "no socket created for listening" msgstr "監視用に作成するソケットはありません" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1304 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %m\n" msgstr "%s: 外部PIDファイル\"%s\"の権限を変更できませんでした: %m\n" -#: postmaster/postmaster.c:1286 +#: postmaster/postmaster.c:1308 #, 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:1314 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1336 utils/init/postinit.c:225 #, c-format msgid "could not load %s" msgstr "%s\"をロードできませんでした" -#: postmaster/postmaster.c:1340 +#: postmaster/postmaster.c:1364 #, c-format msgid "postmaster became multithreaded during startup" -msgstr "postmasterは起動値処理中はマルチスレッドで動作します" +msgstr "postmasterは起動処理中はマルチスレッドで動作します" -#: postmaster/postmaster.c:1341 +#: postmaster/postmaster.c:1365 postmaster/postmaster.c:3661 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "LC_ALL環境変数を使用可能なロケールに設定してください。" -#: postmaster/postmaster.c:1440 +#: postmaster/postmaster.c:1468 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: 自身の実行ファイルのパスが特定できません" -#: postmaster/postmaster.c:1447 +#: postmaster/postmaster.c:1475 #, 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:1498 utils/misc/tzparser.c:342 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "これは、PostgreSQLのインストールが不完全であるかまたは、ファイル\"%s\"が本来の場所からなくなってしまったことを示しています。" -#: postmaster/postmaster.c:1497 +#: postmaster/postmaster.c:1525 #, c-format msgid "" "%s: could not find the database system\n" @@ -19685,472 +20155,467 @@ msgstr "" "ファイル\"%s\"をオープンできませんでした: %m\n" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1787 +#: postmaster/postmaster.c:1762 #, c-format msgid "issuing %s to recalcitrant children" msgstr "手に負えない子プロセスに%sを送出します" -#: postmaster/postmaster.c:1809 +#: postmaster/postmaster.c:1784 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "データディレクトリのロックファイルが不正なため、即時シャットダウンを実行中です" -#: postmaster/postmaster.c:1872 -#, c-format -msgid "wrong key in cancel request for process %d" -msgstr "プロセス%dに対するキャンセル要求においてキーが間違っています" - -#: postmaster/postmaster.c:1884 -#, c-format -msgid "PID %d in cancel request did not match any process" -msgstr "キャンセル要求内のPID %dがどのプロセスにも一致しません" - -#: postmaster/postmaster.c:2105 +#: postmaster/postmaster.c:2004 #, 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:2012 postmaster/postmaster.c:2016 #, c-format msgid "%s was not reloaded" msgstr "%s は再読み込みされていません" -#: postmaster/postmaster.c:2147 +#: postmaster/postmaster.c:2026 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL設定は再読み込みされていません" -#: postmaster/postmaster.c:2233 +#: postmaster/postmaster.c:2112 #, c-format msgid "received smart shutdown request" msgstr "スマートシャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2274 +#: postmaster/postmaster.c:2153 #, c-format msgid "received fast shutdown request" msgstr "高速シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2292 +#: postmaster/postmaster.c:2171 #, c-format msgid "aborting any active transactions" msgstr "活動中の全トランザクションをアボートしています" -#: postmaster/postmaster.c:2316 +#: postmaster/postmaster.c:2195 #, c-format msgid "received immediate shutdown request" msgstr "即時シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2388 +#: postmaster/postmaster.c:2270 #, c-format msgid "shutdown at recovery target" msgstr "リカバリ目標でシャットダウンします" -#: postmaster/postmaster.c:2406 postmaster/postmaster.c:2442 +#: postmaster/postmaster.c:2288 postmaster/postmaster.c:2324 msgid "startup process" msgstr "起動プロセス" -#: postmaster/postmaster.c:2409 +#: postmaster/postmaster.c:2291 #, c-format msgid "aborting startup due to startup process failure" msgstr "起動プロセスの失敗のため起動を中断しています" -#: postmaster/postmaster.c:2484 +#: postmaster/postmaster.c:2347 #, c-format msgid "database system is ready to accept connections" msgstr "データベースシステムの接続受け付け準備が整いました" -#: postmaster/postmaster.c:2505 +#: postmaster/postmaster.c:2369 msgid "background writer process" msgstr "バックグランドライタプロセス" -#: postmaster/postmaster.c:2552 +#: postmaster/postmaster.c:2402 msgid "checkpointer process" msgstr "チェックポイント処理プロセス" -#: postmaster/postmaster.c:2568 +#: postmaster/postmaster.c:2419 msgid "WAL writer process" msgstr "WALライタプロセス" -#: postmaster/postmaster.c:2583 +#: postmaster/postmaster.c:2435 msgid "WAL receiver process" msgstr "WAL 受信プロセス" -#: postmaster/postmaster.c:2597 +#: postmaster/postmaster.c:2450 msgid "WAL summarizer process" msgstr "WAL集約プロセス" -#: postmaster/postmaster.c:2612 +#: postmaster/postmaster.c:2466 msgid "autovacuum launcher process" msgstr "自動VACUUM起動プロセス" -#: postmaster/postmaster.c:2630 +#: postmaster/postmaster.c:2482 msgid "archiver process" msgstr "アーカイバプロセス" -#: postmaster/postmaster.c:2643 +#: postmaster/postmaster.c:2497 msgid "system logger process" msgstr "システムログ取得プロセス" -#: postmaster/postmaster.c:2660 +#: postmaster/postmaster.c:2515 msgid "slot sync worker process" msgstr "スロット同期ワーカープロセス" -#: postmaster/postmaster.c:2716 +#: postmaster/postmaster.c:2523 utils/init/miscinit.c:297 +msgid "io worker" +msgstr "IOワーカー" + +#: postmaster/postmaster.c:2545 postmaster/postmaster.c:2547 +msgid "untracked child process" +msgstr "追跡されていない子プロセス" + +#: postmaster/postmaster.c:2580 #, c-format msgid "background worker \"%s\"" msgstr "バックグラウンドワーカー\"%s\"" -#: postmaster/postmaster.c:2795 postmaster/postmaster.c:2815 postmaster/postmaster.c:2822 postmaster/postmaster.c:2840 -msgid "server process" -msgstr "サーバープロセス" - -#: postmaster/postmaster.c:2894 +#: postmaster/postmaster.c:2797 #, 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:2830 #, 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:2832 postmaster/postmaster.c:2844 postmaster/postmaster.c:2854 postmaster/postmaster.c:2865 #, 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:2841 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d)は例外%Xで終了しました" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3102 +#: postmaster/postmaster.c:2851 #, 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:2863 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d)は認識できないステータス%dで終了しました" -#: postmaster/postmaster.c:3330 +#: postmaster/postmaster.c:3154 #, c-format msgid "abnormal database system shutdown" msgstr "データベースシステムは異常にシャットダウンしました" -#: postmaster/postmaster.c:3356 +#: postmaster/postmaster.c:3180 #, c-format msgid "shutting down due to startup process failure" msgstr "起動プロセスの失敗のためシャットダウンしています" -#: postmaster/postmaster.c:3362 +#: postmaster/postmaster.c:3186 #, c-format msgid "shutting down because \"restart_after_crash\" is off" msgstr "\"restart_after_crash\"がoffであるためシャットダウンします" -#: postmaster/postmaster.c:3374 +#: postmaster/postmaster.c:3198 #, c-format msgid "all server processes terminated; reinitializing" msgstr "全てのサーバープロセスが終了しました: 再初期化しています" -#: postmaster/postmaster.c:3573 postmaster/postmaster.c:3983 postmaster/postmaster.c:4372 -#, c-format -msgid "could not generate random cancel key" -msgstr "ランダムなキャンセルキーを生成できませんでした" - -#: postmaster/postmaster.c:3606 +#: postmaster/postmaster.c:3591 #, c-format msgid "could not fork new process for connection: %m" msgstr "接続用の新しいプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:3648 +#: postmaster/postmaster.c:3626 msgid "could not fork new process for connection: " msgstr "接続用の新しいプロセスをforkできませんでした" -#: postmaster/postmaster.c:3682 +#: postmaster/postmaster.c:3660 #, c-format -msgid "Please report this to <%s>." -msgstr "これを<%s>まで報告してください。" +msgid "postmaster became multithreaded" +msgstr "postmasterがマルチスレッド動作になっています" -#: postmaster/postmaster.c:3750 +#: postmaster/postmaster.c:3738 #, c-format msgid "database system is ready to accept read-only connections" msgstr "データベースシステムはリードオンリー接続の受け付け準備ができました" -#: postmaster/postmaster.c:3933 -#, c-format -msgid "could not fork \"%s\" process: %m" -msgstr "\"%s\"プロセスをforkできませんでした: %m" - -#: postmaster/postmaster.c:4171 postmaster/postmaster.c:4205 +#: postmaster/postmaster.c:3839 #, c-format -msgid "database connection requirement not indicated during registration" -msgstr "登録時にデータベース接続の必要性が示されていません" +msgid "WAL was shut down unexpectedly" +msgstr "WALが予期せずシャットダウンされました。" -#: postmaster/postmaster.c:4181 postmaster/postmaster.c:4215 +#: postmaster/postmaster.c:3964 #, c-format -msgid "invalid processing mode in background worker" -msgstr "バックグラウンドワーカー内の不正な処理モード" +msgid "no slot available for new autovacuum worker process" +msgstr "新しい自動VACUUMワーカープロセスに割り当て可能なスロットがありません" -#: postmaster/postmaster.c:4275 +#: postmaster/postmaster.c:3979 #, c-format -msgid "could not fork background worker process: %m" -msgstr "バックグランドワーカープロセスをforkできませんでした: %m" +msgid "could not fork \"%s\" process: %m" +msgstr "\"%s\"プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:4358 +#: postmaster/postmaster.c:4138 #, c-format msgid "no slot available for new background worker process" msgstr "新しいバックグラウンドワーカープロセスに割り当て可能なスロットがありません" -#: postmaster/postmaster.c:4621 +#: postmaster/postmaster.c:4156 +#, c-format +msgid "could not fork background worker process: %m" +msgstr "バックグランドワーカープロセスをforkできませんでした: %m" + +#: postmaster/postmaster.c:4489 #, c-format msgid "could not read exit code for process\n" msgstr "子プロセスの終了コードの読み込みができませんでした\n" -#: postmaster/postmaster.c:4663 +#: postmaster/postmaster.c:4531 #, c-format msgid "could not post child completion status\n" msgstr "個プロセスの終了コードを投稿できませんでした\n" -#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 +#: postmaster/syslogger.c:527 postmaster/syslogger.c:1172 #, c-format msgid "could not read from logger pipe: %m" msgstr "ロガーパイプから読み取れませんでした: %m" -#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 +#: postmaster/syslogger.c:626 postmaster/syslogger.c:640 #, c-format msgid "could not create pipe for syslog: %m" msgstr "syslog用のパイプを作成できませんでした: %m" -#: postmaster/syslogger.c:712 +#: postmaster/syslogger.c:711 #, c-format msgid "could not fork system logger: %m" msgstr "システムロガーをforkできませんでした: %m" -#: postmaster/syslogger.c:731 +#: postmaster/syslogger.c:730 #, c-format msgid "redirecting log output to logging collector process" msgstr "ログ出力をログ収集プロセスにリダイレクトしています" -#: postmaster/syslogger.c:732 +#: postmaster/syslogger.c:731 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "ここからのログ出力はディレクトリ\"%s\"に現れます。" -#: postmaster/syslogger.c:740 +#: postmaster/syslogger.c:739 #, c-format msgid "could not redirect stdout: %m" msgstr "標準出力にリダイレクトできませんでした: %m" -#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 +#: postmaster/syslogger.c:744 postmaster/syslogger.c:761 #, c-format msgid "could not redirect stderr: %m" msgstr "標準エラー出力にリダイレクトできませんでした: %m" -#: postmaster/syslogger.c:1128 +#: postmaster/syslogger.c:1127 #, c-format msgid "could not write to log file: %m\n" msgstr "ログファイルに書き込めませんでした: %m\n" -#: postmaster/syslogger.c:1246 +#: postmaster/syslogger.c:1247 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: postmaster/syslogger.c:1336 +#: postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "自動ローテーションを無効にしています(再度有効にするにはSIGHUPを使用してください)" -#: postmaster/walsummarizer.c:384 +#: postmaster/walsummarizer.c:743 +#, c-format +msgid "WAL summarization is not progressing" +msgstr "WAL集計が進んでいません" + +#: postmaster/walsummarizer.c:744 +#, c-format +msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory." +msgstr "集計は%X/%Xまで進んでいる必要がありますが、ディスク上では%X/%X、メモリ上では%X/%Xよりあとまで進んでいません。" + +#: postmaster/walsummarizer.c:758 +#, 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] "%3$ld秒経過しましたが、WAL集計が%1$X/%2$Xに到達するのをまだ待ってます" + +#: postmaster/walsummarizer.c:763 #, c-format -msgid "switch point from TLI %u to TLI %u is at %X/%X" -msgstr "TLI %uから%uへの切り替え点は%X/%X" +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "集計がディスク上で%X/%X、メモリ上で%X/%Xに到達しました。" -#: postmaster/walsummarizer.c:885 +#: postmaster/walsummarizer.c:1007 #, c-format msgid "could not find a valid record after %X/%X" msgstr "%X/%Xの後に有効なレコードが見つかりませんでした" -#: postmaster/walsummarizer.c:930 +#: postmaster/walsummarizer.c:1052 #, c-format msgid "could not read WAL from timeline %u at %X/%X: %s" msgstr "%X/%Xでタイムライン%uのWALを読み取れませんでした: %s" -#: postmaster/walsummarizer.c:936 +#: postmaster/walsummarizer.c:1058 #, c-format msgid "could not read WAL from timeline %u at %X/%X" msgstr "%X/%Xでタイムライン%uのWALを読み取れませんでした" -#: postmaster/walsummarizer.c:1077 -#, c-format -msgid "summarized WAL on TLI %u from %X/%X to %X/%X" -msgstr "TLI %uの%X/%Xから%X/%Xまで集計しました" - -#: postmaster/walsummarizer.c:1385 -#, c-format -msgid "timeline %u became historic, can read up to %X/%X" -msgstr "タイムライン%uは過去のものになりました、%X/%Xまでは読み取り可能です" - #: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "正規表現で使用する照合規則を特定できませんでした" -#: regex/regc_pg_locale.c:262 +#: regex/regc_pg_locale.c:265 #, c-format msgid "nondeterministic collations are not supported for regular expressions" msgstr "非決定的照合順序は正規表現ではサポートされていません" -#: repl_gram.y:318 repl_gram.y:359 +#: repl_gram.y:322 repl_gram.y:363 #, c-format msgid "invalid timeline %u" msgstr "タイムライン%uは不正です" -#: repl_scanner.l:154 +#: repl_scanner.l:160 msgid "invalid streaming start location" msgstr "不正なストリーミング開始位置" -#: replication/libpqwalreceiver/libpqwalreceiver.c:267 replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:230 replication/libpqwalreceiver/libpqwalreceiver.c:322 #, c-format msgid "password is required" msgstr "パスワードが必要です" -#: replication/libpqwalreceiver/libpqwalreceiver.c:268 +#: replication/libpqwalreceiver/libpqwalreceiver.c:231 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." msgstr "非スーパーユーザーはサーバーがパスワードを要求してこない場合は接続できません。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:269 +#: replication/libpqwalreceiver/libpqwalreceiver.c:232 #, c-format msgid "Target server's authentication method must be changed, or set password_required=false in the subscription parameters." msgstr "接続先サーバーの認証方式を変更するか、サブスクリプション属性でpassword_requiredをfalseに設定する必要があります。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:285 +#: replication/libpqwalreceiver/libpqwalreceiver.c:249 #, c-format msgid "could not clear search path: %s" msgstr "search_pathを消去できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:331 replication/libpqwalreceiver/libpqwalreceiver.c:517 +#: replication/libpqwalreceiver/libpqwalreceiver.c:295 replication/libpqwalreceiver/libpqwalreceiver.c:483 #, c-format msgid "invalid connection string syntax: %s" msgstr "不正な接続文字列の構文: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:359 +#: replication/libpqwalreceiver/libpqwalreceiver.c:323 #, c-format msgid "Non-superusers must provide a password in the connection string." msgstr "非スーパーユーザーは接続文字列中でパスワードを指定する必要があります。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:386 +#: replication/libpqwalreceiver/libpqwalreceiver.c:350 #, c-format msgid "could not parse connection string: %s" msgstr "接続文字列をパースできませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:459 +#: replication/libpqwalreceiver/libpqwalreceiver.c:425 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "プライマリサーバーからデータベースシステムの識別子とタイムライン ID を受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:476 replication/libpqwalreceiver/libpqwalreceiver.c:763 +#: replication/libpqwalreceiver/libpqwalreceiver.c:442 replication/libpqwalreceiver/libpqwalreceiver.c:737 #, c-format msgid "invalid response from primary server" msgstr "プライマリサーバーからの応答が不正です" -#: replication/libpqwalreceiver/libpqwalreceiver.c:477 +#: replication/libpqwalreceiver/libpqwalreceiver.c:443 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "システムを識別できませんでした: 受信したのは%d行で%d列、期待していたのは%d行で%d以上の列でした。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:606 replication/libpqwalreceiver/libpqwalreceiver.c:613 replication/libpqwalreceiver/libpqwalreceiver.c:643 +#: replication/libpqwalreceiver/libpqwalreceiver.c:572 replication/libpqwalreceiver/libpqwalreceiver.c:579 replication/libpqwalreceiver/libpqwalreceiver.c:611 #, c-format msgid "could not start WAL streaming: %s" msgstr "WAL ストリーミングを開始できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:667 +#: replication/libpqwalreceiver/libpqwalreceiver.c:635 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "プライマリにストリーミングの終了メッセージを送信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:690 +#: replication/libpqwalreceiver/libpqwalreceiver.c:659 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "ストリーミングの終了後の想定外の結果セット" -#: replication/libpqwalreceiver/libpqwalreceiver.c:705 +#: replication/libpqwalreceiver/libpqwalreceiver.c:675 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ストリーミングCOPY終了中のエラー: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:715 +#: replication/libpqwalreceiver/libpqwalreceiver.c:686 #, c-format msgid "error reading result of streaming command: %s" msgstr "ストリーミングコマンドの結果読み取り中のエラー: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:724 replication/libpqwalreceiver/libpqwalreceiver.c:957 +#: replication/libpqwalreceiver/libpqwalreceiver.c:696 replication/libpqwalreceiver/libpqwalreceiver.c:832 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "CommandComplete後の想定外の結果: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:751 +#: replication/libpqwalreceiver/libpqwalreceiver.c:725 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "プライマリサーバーからタイムライン履歴ファイルを受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:764 +#: replication/libpqwalreceiver/libpqwalreceiver.c:738 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "2個のフィールドを持つ1個のタプルを期待していましたが、%2$d 個のフィールドを持つ %1$d 個のタプルを受信しました。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:920 replication/libpqwalreceiver/libpqwalreceiver.c:973 replication/libpqwalreceiver/libpqwalreceiver.c:980 +#: replication/libpqwalreceiver/libpqwalreceiver.c:793 replication/libpqwalreceiver/libpqwalreceiver.c:848 replication/libpqwalreceiver/libpqwalreceiver.c:855 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL ストリームからデータを受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 +#: replication/libpqwalreceiver/libpqwalreceiver.c:875 #, c-format msgid "could not send data to WAL stream: %s" msgstr "WAL ストリームにデータを送信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 +#: replication/libpqwalreceiver/libpqwalreceiver.c:978 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "レプリケーションスロット\"%s\"を作成できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1030 #, c-format msgid "could not alter replication slot \"%s\": %s" msgstr "レプリケーションスロット\"%s\"を変更できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1064 #, c-format msgid "invalid query response" msgstr "不正な問い合わせ応答" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1065 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d個の列を期待していましたが、%d列を受信しました。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1135 #, c-format msgid "the query interface requires a database connection" msgstr "クエリインタフェースの動作にはデータベースコネクションが必要です" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1169 msgid "empty query" msgstr "空の問い合わせ" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 msgid "unexpected pipeline mode" msgstr "想定されていないパイプラインモード" @@ -20188,40 +20653,149 @@ msgstr "共有メモリキューにデータを送出できませんでした" msgid "logical replication apply worker will serialize the remaining changes of remote transaction %u to a file" msgstr "論理レプリケーションt起用ワーカーはリモートトランザクション%uの残りの変更をシリアライズしてファイルに格納します" -#: replication/logical/decode.c:177 replication/logical/logical.c:141 +#: replication/logical/conflict.c:126 #, c-format -msgid "logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary" -msgstr "スタンバイ上で論理デコードを行うためにはプライマリ上で\"wal_level\" >= \"logical\"である必要があります" +msgid "conflict detected on relation \"%s.%s\": conflict=%s" +msgstr "リレーション\"%s.%s\"で衝突が検出されました: conflict=%s" -#: replication/logical/launcher.c:334 +#: replication/logical/conflict.c:223 #, c-format -msgid "cannot start logical replication workers when max_replication_slots = 0" -msgstr "max_replication_slots = 0 の時は論理レプリケーションワーカーは起動できません" +msgid "Key already exists in unique index \"%s\", modified locally in transaction %u at %s." +msgstr "ユニークインデックス\"%s\"にすでにキーが存在しており、トランザクション%uで%sにローカルに更新されています。" -#: replication/logical/launcher.c:427 +#: replication/logical/conflict.c:227 #, c-format -msgid "out of logical replication worker slots" -msgstr "論理レプリケーションワーカースロットは全て使用中です" +msgid "Key already exists in unique index \"%s\", modified by origin \"%s\" in transaction %u at %s." +msgstr "ユニークインデックス\"%s\"にすでにキーが存在しており、起源\"%s\"によってトランザクション%uで%sにに更新されています。" -#: 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/conflict.c:239 #, c-format -msgid "You might need to increase \"%s\"." -msgstr "\"%s\"を大きくする必要があるかもしれません。" +msgid "Key already exists in unique index \"%s\", modified by a non-existent origin in transaction %u at %s." +msgstr "ユニークインデックス\"%s\"にすでにキーが存在しており、存在しない起源によってトランザクション%uで%sにに更新されています。" -#: replication/logical/launcher.c:513 +#: replication/logical/conflict.c:244 #, c-format -msgid "out of background worker slots" -msgstr "バックグラウンドワーカースロットが足りません" +msgid "Key already exists in unique index \"%s\", modified in transaction %u." +msgstr "ユニークインデックス\"%s\"にすでにキーが存在しており、トランザクション%uで更新されています。" -#: replication/logical/launcher.c:720 +#: replication/logical/conflict.c:251 #, c-format -msgid "logical replication worker slot %d is empty, cannot attach" -msgstr "論理レプリケーションワーカースロット%dが空いていないため接続できません" +msgid "Updating the row that was modified locally in transaction %u at %s." +msgstr "トランザクション%uで%sにローカルに更新された行の更新中。" -#: replication/logical/launcher.c:729 +#: replication/logical/conflict.c:254 #, c-format -msgid "logical replication worker slot %d is already used by another worker, cannot attach" -msgstr "論理レプリケーションワーカースロット%dが既に他のワーカーに使用されているため接続できません" +msgid "Updating the row that was modified by a different origin \"%s\" in transaction %u at %s." +msgstr "異なる起源”%s\"よってトランザクション%uで%sに更新された行の更新中。" + +#: replication/logical/conflict.c:259 +#, c-format +msgid "Updating the row that was modified by a non-existent origin in transaction %u at %s." +msgstr "存在しない起源よってトランザクション%uで%sに更新された行の更新中。" + +#: replication/logical/conflict.c:265 +msgid "Could not find the row to be updated." +msgstr "更新すべき行が見つかりませんでした。" + +#: replication/logical/conflict.c:270 +#, c-format +msgid "Deleting the row that was modified locally in transaction %u at %s." +msgstr "トランザクション%uで%sにローカルに更新された行の削除中。" + +#: replication/logical/conflict.c:273 +#, c-format +msgid "Deleting the row that was modified by a different origin \"%s\" in transaction %u at %s." +msgstr "異なる起源”%s\"よってトランザクション%uで%sに更新された行の削除中。" + +#: replication/logical/conflict.c:278 +#, c-format +msgid "Deleting the row that was modified by a non-existent origin in transaction %u at %s." +msgstr "存在しない起源よってトランザクション%uで%sに更新された行の削除中。" + +#: replication/logical/conflict.c:284 +msgid "Could not find the row to be deleted." +msgstr "削除すべき行が見つかりませんでした。" + +#: replication/logical/conflict.c:347 +#, c-format +msgid "Key %s" +msgstr "キー %s" + +#: replication/logical/conflict.c:364 +#, c-format +msgid "existing local tuple %s" +msgstr "存在するローカルタプル %s" + +#: replication/logical/conflict.c:369 +#, c-format +msgid "Existing local tuple %s" +msgstr "存在するローカルタプル %s" + +#: replication/logical/conflict.c:396 +#, c-format +msgid "remote tuple %s" +msgstr "リモートタプル %s" + +#: replication/logical/conflict.c:400 +#, c-format +msgid "Remote tuple %s" +msgstr "リモートタプル %s" + +#: replication/logical/conflict.c:434 +#, c-format +msgid "replica identity %s" +msgstr "複製識別 %s" + +#: replication/logical/conflict.c:435 +#, c-format +msgid "replica identity full %s" +msgstr "全列複製識別 %s" + +#: replication/logical/conflict.c:440 +#, c-format +msgid "Replica identity %s" +msgstr "複製識別 %s" + +#: replication/logical/conflict.c:441 +#, c-format +msgid "Replica identity full %s" +msgstr "全列複製識別 %s" + +#: replication/logical/decode.c:177 replication/logical/logical.c:141 +#, c-format +msgid "logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary" +msgstr "スタンバイ上で論理デコードを行うためにはプライマリ上で\"wal_level\" >= \"logical\"である必要があります" + +#: replication/logical/launcher.c:331 +#, c-format +msgid "cannot start logical replication workers when \"max_active_replication_origins\"=0" +msgstr "\"max_active_replication_origins\"=0 の時は論理レプリケーションワーカーは起動できません" + +#: replication/logical/launcher.c:424 +#, c-format +msgid "out of logical replication worker slots" +msgstr "論理レプリケーションワーカースロットは全て使用中です" + +#. translator: %s is a GUC variable name +#: replication/logical/launcher.c:425 replication/logical/launcher.c:511 replication/slot.c:1556 replication/slot.c:1579 storage/lmgr/lock.c:1039 storage/lmgr/lock.c:1077 storage/lmgr/lock.c:2966 storage/lmgr/lock.c:4371 storage/lmgr/lock.c:4436 storage/lmgr/lock.c:4786 storage/lmgr/predicate.c:2479 storage/lmgr/predicate.c:2494 storage/lmgr/predicate.c:3891 +#, c-format +msgid "You might need to increase \"%s\"." +msgstr "\"%s\"を大きくする必要があるかもしれません。" + +#: replication/logical/launcher.c:510 +#, c-format +msgid "out of background worker slots" +msgstr "バックグラウンドワーカースロットが足りません" + +#: replication/logical/launcher.c:717 +#, c-format +msgid "logical replication worker slot %d is empty, cannot attach" +msgstr "論理レプリケーションワーカースロット%dが空いていないため接続できません" + +#: replication/logical/launcher.c:726 +#, c-format +msgid "logical replication worker slot %d is already used by another worker, cannot attach" +msgstr "論理レプリケーションワーカースロット%dが既に他のワーカーに使用されているため接続できません" #: replication/logical/logical.c:121 #, c-format @@ -20233,82 +20807,67 @@ msgstr "論理デコードを行うためには\"wal_level\" >= \"logical\" で 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:828 replication/slot.c:863 #, 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 -#, c-format -msgid "can no longer get changes from replication slot \"%s\"" -msgstr "すでにレプリケーションスロット\"%s\"から変更を取り出すことはできません" - -#: replication/logical/logical.c:555 -#, c-format -msgid "This slot has been invalidated because it exceeded the maximum reserved size." -msgstr "最大留保量を超えたため、このスロットは無効化されています。" - -#: replication/logical/logical.c:562 -#, c-format -msgid "This slot has been invalidated because it was conflicting with recovery." -msgstr "リカバリとの競合のため、このスロットは無効化されました。" - -#: replication/logical/logical.c:627 +#: replication/logical/logical.c:609 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "スロット\"%s\"の論理デコードを開始します" -#: replication/logical/logical.c:629 +#: replication/logical/logical.c:611 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "%3$X/%4$XからWALを読み取って、%1$X/%2$X以降にコミットされるトランザクションをストリーミングします。" -#: replication/logical/logical.c:777 +#: replication/logical/logical.c:759 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中, 関連LSN %X/%X" -#: replication/logical/logical.c:783 +#: replication/logical/logical.c:765 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中" -#: replication/logical/logical.c:954 replication/logical/logical.c:999 replication/logical/logical.c:1044 replication/logical/logical.c:1090 +#: replication/logical/logical.c:936 replication/logical/logical.c:981 replication/logical/logical.c:1026 replication/logical/logical.c:1072 #, c-format msgid "logical replication at prepare time requires a %s callback" msgstr "プリペア時の論理レプリケーションを行うには%sコールバックが必要です" -#: 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:1304 replication/logical/logical.c:1353 replication/logical/logical.c:1394 replication/logical/logical.c:1480 replication/logical/logical.c:1529 #, c-format msgid "logical streaming requires a %s callback" msgstr "論理ストリーミングを行うには%sコールバックが必要です" -#: replication/logical/logical.c:1457 +#: replication/logical/logical.c:1439 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "プリペア時の論理ストリーミングを行うには%sコールバックが必要です" @@ -20333,7 +20892,7 @@ msgstr "配列は1次元でなければなりません" msgid "array must not contain nulls" msgstr "配列にはNULL値を含めてはいけません" -#: replication/logical/logicalfuncs.c:177 utils/adt/json.c:1406 utils/adt/jsonb.c:1304 +#: replication/logical/logicalfuncs.c:177 utils/adt/json.c:1428 utils/adt/jsonb.c:1304 #, c-format msgid "array must have even number of elements" msgstr "配列の要素数は偶数でなければなりません" @@ -20343,32 +20902,32 @@ msgstr "配列の要素数は偶数でなければなりません" msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "論理デコード出力プラグイン\"%s\"はバイナリ出力を生成します, しかし関数\"%s\"はテキストデータを期待しています" -#: replication/logical/origin.c:190 +#: replication/logical/origin.c:195 #, c-format -msgid "cannot query or manipulate replication origin when \"max_replication_slots\" is 0" -msgstr "\"max_replication_slots\"が0の時はレプリケーション基点の問い合わせや操作はできません" +msgid "cannot query or manipulate replication origin when \"max_active_replication_origins\" is 0" +msgstr "\"max_active_replication_origins\"が0の時はレプリケーション基点の問い合わせや操作はできません" -#: replication/logical/origin.c:195 +#: replication/logical/origin.c:200 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "リカバリ中はレプリケーション基点を操作できません" -#: replication/logical/origin.c:240 +#: replication/logical/origin.c:245 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "レプリケーション基点\"%s\"は存在しません" -#: replication/logical/origin.c:331 +#: replication/logical/origin.c:336 #, c-format msgid "could not find free replication origin ID" msgstr "レプリケーション基点IDの空きがありません" -#: replication/logical/origin.c:365 +#: replication/logical/origin.c:370 #, c-format msgid "could not drop replication origin with ID %d, in use by PID %d" msgstr "ID%dのレプリケーション基点を削除できません, PID%dで使用中です" -#: replication/logical/origin.c:492 +#: replication/logical/origin.c:497 #, c-format msgid "replication origin with ID %d does not exist" msgstr "IDが%dのレプリケーション基点がありません" @@ -20380,8 +20939,8 @@ msgstr "レプリケーションチェックポイントのマジックナンバ #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase \"max_replication_slots\"" -msgstr "使用可能なレプリケーション状態領域がありません、\"max_replication_slots\"を増やしてください" +msgid "could not find free replication state, increase \"max_active_replication_origins\"" +msgstr "使用可能なレプリケーション状態領域がありません、\"max_active_replication_origins\"を増やしてください" #: replication/logical/origin.c:806 #, c-format @@ -20403,10 +20962,10 @@ msgstr "ID%dのレプリケーション基点は既にPID%dで使用中です" msgid "could not find free replication state slot for replication origin with ID %d" msgstr "ID%dのレプリケーション基点に対するレプリケーション状態スロットの空きがありません" -#: replication/logical/origin.c:957 replication/logical/origin.c:1158 replication/slot.c:2384 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 #, c-format -msgid "Increase \"max_replication_slots\" and try again." -msgstr "\"max_replication_slots\"を増やして再度試してください" +msgid "Increase \"max_active_replication_origins\" and try again." +msgstr "\"max_active_replication_origins\"を増やして再度試してください" #: replication/logical/origin.c:1114 #, c-format @@ -20428,826 +20987,907 @@ msgstr "レプリケーション基点名\"%s\"は予約されています" msgid "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." msgstr "\"%s\"、\"%s\"、および\"pg_\"で始まる基点名は予約されています。" -#: replication/logical/relation.c:242 +#: replication/logical/relation.c:241 +msgid ", " +msgstr ", " + +#: replication/logical/relation.c:243 #, c-format msgid "\"%s\"" msgstr "\"%s\"" -#: replication/logical/relation.c:245 -#, c-format -msgid ", \"%s\"" -msgstr ", \"%s\"" - -#: replication/logical/relation.c:251 +#: replication/logical/relation.c:262 #, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" msgstr[0] "論理レプリケーション先のリレーション\"%s.%s\"は複製された列を失っています: %s" -#: replication/logical/relation.c:306 +#: replication/logical/relation.c:273 +#, c-format +msgid "logical replication target relation \"%s.%s\" has incompatible generated column: %s" +msgid_plural "logical replication target relation \"%s.%s\" has incompatible generated columns: %s" +msgstr[0] "論理レプリケーション先のリレーション\"%s.%s\"に非互換の生成列が存在します: %s" + +#: replication/logical/relation.c:328 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "論理レプリケーションのターゲットリレーション\"%s.%s\"がREPLICA IDENTITYインデックスでシステム列を使用しています" -#: replication/logical/relation.c:398 +#: replication/logical/relation.c:421 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "論理レプリケーション先のリレーション\"%s.%s\"は存在しません" -#: replication/logical/reorderbuffer.c:3970 +#: replication/logical/reorderbuffer.c:4122 #, 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:4468 replication/logical/reorderbuffer.c:4493 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "並べ替えバッファのあふれファイルの読み込みに失敗しました: %m" -#: replication/logical/reorderbuffer.c:4320 replication/logical/reorderbuffer.c:4345 +#: replication/logical/reorderbuffer.c:4472 replication/logical/reorderbuffer.c:4497 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "並べ替えバッファのあふれファイルの読み込みに失敗しました: %2$uバイトのはずが%1$dバイトでした" -#: replication/logical/reorderbuffer.c:4595 +#: replication/logical/reorderbuffer.c:4746 #, c-format -msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" -msgstr "pg_replslot/%2$s/xid* の削除中にファイル\"%1$s\"が削除できませんでした: %3$m" +msgid "could not remove file \"%s\" during removal of %s/%s/xid*: %m" +msgstr "%2$s/%3$s/xid* の削除中にファイル\"%1$s\"が削除できませんでした: %4$m" -#: replication/logical/reorderbuffer.c:5091 +#: replication/logical/reorderbuffer.c:5243 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "ファイル\"%1$s\"の読み込みに失敗しました: %3$dバイトのはずが%2$dバイトでした" -#: replication/logical/slotsync.c:215 +#: replication/logical/slotsync.c:214 #, c-format -msgid "could not sync slot \"%s\" as remote slot precedes local slot" -msgstr "リモートスロットがローカルスロットよりも進んでいるためスロット\"%s\"を同期できませんでした" +msgid "could not synchronize replication slot \"%s\" because remote slot precedes local slot" +msgstr "リモートのスロットがローカルのスロットよりも進んでいるためレプリケーションスロット\"%s\"を同期できませんでした" -#: replication/logical/slotsync.c:217 +#: replication/logical/slotsync.c:216 #, 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 "リモートスロットのLSNは%X/%Xでカタログxminは%uですが, ローカルスロットのLSNは%X/%Xでカタログxminは%uです。" -#: replication/logical/slotsync.c:459 +#: replication/logical/slotsync.c:460 #, c-format -msgid "dropped replication slot \"%s\" of dbid %u" -msgstr "dbid %2$uのレプリケーションスロット\"%1$s\"を削除しました" +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "OID %2$uのデータベースのレプリケーションスロット\"%1$s\"を削除しました" -#: replication/logical/slotsync.c:579 +#: replication/logical/slotsync.c:580 #, c-format -msgid "could not sync slot \"%s\"" -msgstr "スロット\"%s\"を同期できませんでした" +msgid "could not synchronize replication slot \"%s\"" +msgstr "レプリケーションスロット\"%s\"を同期できませんでした" -#: replication/logical/slotsync.c:580 +#: replication/logical/slotsync.c:581 #, c-format -msgid "Logical decoding cannot find consistent point from local slot's LSN %X/%X." -msgstr "論理デコードが一貫性ポイントをローカルスロットのLSN%X/%Xから見つけられません。" +msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X." +msgstr "論理デコードが一貫性ポイントをローカルスロットのLSN%X/%Xから見つけられませんでした。" -#: replication/logical/slotsync.c:589 +#: replication/logical/slotsync.c:590 #, c-format -msgid "newly created slot \"%s\" is sync-ready now" -msgstr "新規に作成したスロット\"%s\"が同期可能になりました" +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "新規に作成したレプリケーションスロット\"%s\"が同期可能になりました" -#: replication/logical/slotsync.c:628 +#: replication/logical/slotsync.c:629 #, 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 "受信したスロット\"%3$s\"のスロット同期LSN%1$X/%2$XがスタンバイのLSN%4$X/%5$Xよりも進んでいるためスロット同期をスキップします" -#: replication/logical/slotsync.c:650 +#: replication/logical/slotsync.c:651 #, c-format msgid "exiting from slot synchronization because same name slot \"%s\" already exists on the standby" msgstr "スタンバイに同名のスロット\"%s\"がすでに存在するため、スロット同期を終了しました" -#: replication/logical/slotsync.c:819 +#: replication/logical/slotsync.c:820 #, c-format msgid "could not fetch failover logical slots info from the primary server: %s" msgstr "プライマリサーバーからフェイルオーバー属性を持つ論理スロットを取得できませんでした: %s" -#: replication/logical/slotsync.c:965 +#: replication/logical/slotsync.c:969 #, c-format -msgid "could not fetch primary_slot_name \"%s\" info from the primary server: %s" -msgstr "プライマリサーバーからprimary_slot_name \"%s\"の情報を取得できませんでした: %s" +msgid "could not fetch primary slot name \"%s\" info from the primary server: %s" +msgstr "プライマリサーバーからプライマリのスロット名\"%s\"の情報を取得できませんでした: %s" -#: replication/logical/slotsync.c:967 +#: replication/logical/slotsync.c:971 #, c-format -msgid "Check if primary_slot_name is configured correctly." -msgstr "primary_slot_nameが正しく設定されてるか確認してください。" +msgid "Check if \"primary_slot_name\" is configured correctly." +msgstr "\"primary_slot_name\"が正しく設定されているか確認してください。" -#: replication/logical/slotsync.c:987 +#: replication/logical/slotsync.c:991 #, c-format 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 "スロット同期ではprimary_slot_nameを正しく設定する必要があります" - #. translator: second %s is a GUC variable name -#: replication/logical/slotsync.c:997 +#: replication/logical/slotsync.c:1000 #, c-format -msgid "The replication slot \"%s\" specified by %s does not exist on the primary server." -msgstr "%2$sで指定されたレプリケーションスロット\"%1$s\"はプライマリサーバーに存在しません。" +msgid "replication slot \"%s\" specified by \"%s\" does not exist on primary server" +msgstr "%2$sで指定されたレプリケーションスロット\"%1$s\"はプライマリサーバーに存在しません" -#: replication/logical/slotsync.c:1029 +#. translator: first %s is a connection option; second %s is a GUC +#. variable name +#. +#: replication/logical/slotsync.c:1033 #, c-format -msgid "slot synchronization requires dbname to be specified in %s" -msgstr "スロット同期を行う際は%sでdbnameが指定されている必要があります" +msgid "replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "レプリケーションスロットの同期を行う際は\"%2$s\"で\"%1$s\"が指定されている必要があります" -#: replication/logical/slotsync.c:1050 +#: replication/logical/slotsync.c:1054 #, 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\" である必要があります" -#: replication/logical/slotsync.c:1063 replication/logical/slotsync.c:1091 +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1067 replication/logical/slotsync.c:1095 #, c-format -msgid "slot synchronization requires %s to be defined" -msgstr "スロット同期を行う際は%sが定義されている必要があります" +msgid "replication slot synchronization requires \"%s\" to be set" +msgstr "レプリケーションスロットの同期を行う際は\"%s\"が設定されている必要があります" -#: replication/logical/slotsync.c:1077 +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1081 #, 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 +#: replication/logical/slotsync.c:1133 #, c-format -msgid "slot sync worker will shutdown because %s is disabled" -msgstr "%sが無効にされたため、スロット同期ワーカーがシャットダウンします" +msgid "replication slot synchronization worker will shut down because \"%s\" is disabled" +msgstr "\"%s\"が無効にされたため、レプリケーションスロット同期ワーカーがシャットダウンします" -#: replication/logical/slotsync.c:1138 +#: replication/logical/slotsync.c:1142 #, c-format -msgid "slot sync worker will restart because of a parameter change" -msgstr "パラメータの変更があったため、スロット同期ワーカーが再起動します" +msgid "replication slot synchronization worker will restart because of a parameter change" +msgstr "パラメータの変更があったため、レプリケーションスロット同期ワーカーが再起動します" -#: replication/logical/slotsync.c:1162 +#: replication/logical/slotsync.c:1166 #, c-format -msgid "slot sync worker is shutting down on receiving SIGINT" -msgstr "SIGINTを受信したためスロット同期ワーカーがシャットダウンします" +msgid "replication slot synchronization worker is shutting down on receiving SIGINT" +msgstr "SIGINTを受信したためレプリケーションスロット同期ワーカーがシャットダウンします" -#: replication/logical/slotsync.c:1287 +#: replication/logical/slotsync.c:1291 #, c-format msgid "cannot synchronize replication slots when standby promotion is ongoing" msgstr "スタンバイの昇格処理中はリプリケーションスロットの同期はできません" -#: replication/logical/slotsync.c:1295 +#: replication/logical/slotsync.c:1299 #, c-format msgid "cannot synchronize replication slots concurrently" msgstr "複数のレプリケーションスロットの並行同期はできません" -#: replication/logical/slotsync.c:1403 +#: replication/logical/slotsync.c:1407 #, c-format msgid "slot sync worker started" msgstr "スロット同期ワーカーが起動しました" -#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 replication/walreceiver.c:307 +#: replication/logical/slotsync.c:1470 replication/slotfuncs.c:929 #, c-format -msgid "could not connect to the primary server: %s" -msgstr "プライマリサーバーへの接続ができませんでした: %s" +msgid "synchronization worker \"%s\" could not connect to the primary server: %s" +msgstr "同期ワーカー\"%s\"はプライマリ・サーバーに接続できませんでした: %s" -#: replication/logical/snapbuild.c:643 +#: replication/logical/snapbuild.c:514 #, c-format msgid "initial slot snapshot too large" msgstr "初期スロットスナップショットが大きすぎます" -#: replication/logical/snapbuild.c:697 +#: replication/logical/snapbuild.c:568 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "エクスポートされた論理デコードスナップショット: \"%s\" (%u個のトランザクションID を含む)" -#: replication/logical/snapbuild.c:1392 replication/logical/snapbuild.c:1484 replication/logical/snapbuild.c:2000 +#: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1362 replication/logical/snapbuild.c:1868 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "論理デコードは一貫性ポイントを%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1394 +#: replication/logical/snapbuild.c:1267 #, c-format msgid "There are no running transactions." msgstr "実行中のトランザクションはありません。" -#: replication/logical/snapbuild.c:1436 +#: replication/logical/snapbuild.c:1314 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "論理デコードは初期開始点を%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1438 replication/logical/snapbuild.c:1462 +#: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "%2$uより古いトランザクション(おおよそ%1$d個)の完了を待っています" -#: replication/logical/snapbuild.c:1460 +#: replication/logical/snapbuild.c:1338 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "論理デコードは初期の一貫性ポイントを%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1486 +#: replication/logical/snapbuild.c:1364 #, c-format msgid "There are no old transactions anymore." msgstr "古いトランザクションはこれ以上はありません" -#: replication/logical/snapbuild.c:1887 +#: replication/logical/snapbuild.c:1735 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "スナップショット構築状態ファイル\"%1$s\"のマジックナンバーが不正です: %3$uのはずが%2$uでした" -#: replication/logical/snapbuild.c:1893 +#: replication/logical/snapbuild.c:1741 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "スナップショット状態ファイル\"%1$s\"のバージョン%2$uはサポート外です: %3$uのはずが%2$uでした" -#: replication/logical/snapbuild.c:1934 +#: replication/logical/snapbuild.c:1782 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "スナップショット生成状態ファイル\"%s\"のチェックサムが一致しません: %uですが、%uであるべきです" -#: replication/logical/snapbuild.c:2002 +#: replication/logical/snapbuild.c:1870 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "論理デコードは保存されたスナップショットを使って開始します。" -#: replication/logical/snapbuild.c:2109 +#: replication/logical/snapbuild.c:1977 #, c-format msgid "could not parse file name \"%s\"" msgstr "ファイル名\"%s\"をパースできませんでした" -#: replication/logical/tablesync.c:161 +#: replication/logical/tablesync.c:160 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "サブスクリプション\"%s\"、テーブル\"%s\"に対する論理レプリケーションテーブル同期ワーカーが終了しました" -#: replication/logical/tablesync.c:641 +#: replication/logical/tablesync.c:640 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart so that two_phase can be enabled" msgstr "two_phaseを有効化可能にするため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカーを再起動します" -#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 +#: replication/logical/tablesync.c:830 replication/logical/tablesync.c:971 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "パブリッシャからテーブル\"%s.%s\"のテーブル情報を取得できませんでした: %s" -#: replication/logical/tablesync.c:834 +#: replication/logical/tablesync.c:837 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "テーブル\"%s.%s\"がパブリッシャ上で見つかりませんでした" -#: replication/logical/tablesync.c:892 +#: replication/logical/tablesync.c:890 #, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" msgstr "パブリッシャからテーブル\"%s.%s\"の列リスト情報を取得できませんでした: %s" -#: replication/logical/tablesync.c:1071 +#: replication/logical/tablesync.c:1069 #, c-format msgid "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: %s" msgstr "パブリッシャからテーブル\"%s.%s\"のテーブルのテーブルWHERE句を取得できませんでした: %s" -#: replication/logical/tablesync.c:1230 +#: replication/logical/tablesync.c:1236 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "テーブル\"%s.%s\"の初期内容のコピーを開始できませんでした: %s" -#: replication/logical/tablesync.c:1429 +#: replication/logical/tablesync.c:1351 +#, c-format +msgid "table synchronization worker for subscription \"%s\" could not connect to the publisher: %s" +msgstr "サブスクリプション\"%s\"のテーブル同期ワーカーがパブリッシャに接続できませんでした: %s" + +#: replication/logical/tablesync.c:1436 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "テーブルコピー中にパブリッシャ上でのトランザクション開始に失敗しました: %s" -#: replication/logical/tablesync.c:1472 +#: replication/logical/tablesync.c:1479 #, c-format msgid "replication origin \"%s\" already exists" msgstr "レプリケーション基点\"%s\"はすでに存在します" -#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 +#: replication/logical/tablesync.c:1512 replication/logical/worker.c:2383 #, c-format msgid "user \"%s\" cannot replicate into relation with row-level security enabled: \"%s\"" msgstr "ユーザー\"%s\"は行レベルセキュリティが有効なリレーションへのレプリケーションはできません: \"%s\"" -#: replication/logical/tablesync.c:1518 +#: replication/logical/tablesync.c:1525 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "テーブルコピー中にパブリッシャ上でのトランザクション終了に失敗しました: %s" -#: replication/logical/worker.c:481 +#: replication/logical/worker.c:479 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop" msgstr "サブスクリプション\"%s\"に対応する論理レプリケーション並列適用ワーカーが停止します" -#: replication/logical/worker.c:483 +#: replication/logical/worker.c:481 #, c-format msgid "Cannot handle streamed replication transactions using parallel apply workers until all tables have been synchronized." msgstr "すべてのテーブルの同期が完了するまでは、ストリームされたトランザクションを適用ワーカーで扱うことはできません。" -#: replication/logical/worker.c:852 replication/logical/worker.c:967 +#: replication/logical/worker.c:851 replication/logical/worker.c:966 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "論理レプリケーション列%dのバイナリデータ書式が不正です" -#: replication/logical/worker.c:2500 +#: replication/logical/worker.c:2530 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "論理レプリケーション先のリレーション\"%s.%s\"は複製の識別列を期待していましたが、パブリッシャは送信しませんでした" -#: replication/logical/worker.c:2507 +#: replication/logical/worker.c:2537 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "論理レプリケーション先のリレーション\"%s.%s\"が識別列インデックスも主キーをもっておらず、かつパブリッシュされたリレーションがREPLICA IDENTITY FULLとなっていません" -#: replication/logical/worker.c:3371 +#: replication/logical/worker.c:3472 #, c-format msgid "invalid logical replication message type \"??? (%d)\"" msgstr "不正な論理レプリケーションのメッセージタイプ \"??? (%d)\"" -#: replication/logical/worker.c:3543 +#: replication/logical/worker.c:3644 #, c-format msgid "data stream from publisher has ended" msgstr "パブリッシャからのデータストリームが終了しました" -#: replication/logical/worker.c:3697 +#: replication/logical/worker.c:3798 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "タイムアウトにより論理レプリケーションワーカーを終了しています" -#: replication/logical/worker.c:3891 +#: replication/logical/worker.c:3995 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was removed" msgstr "サブスクリプション\"%s\"が削除されたため、このサブスクリプションに対応する論理レプリケーションワーカーが停止します" -#: replication/logical/worker.c:3905 +#: replication/logical/worker.c:4009 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "サブスクリプション\"%s\"が無効化されたため、このサブスクリプションに対応する論理レプリケーションワーカーが停止します" -#: replication/logical/worker.c:3936 +#: replication/logical/worker.c:4040 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because of a parameter change" msgstr "パラメータの変更があったため、サブスクリプション\"%s\"に対応する論理レプリケーション並列適用ワーカーが停止します" -#: replication/logical/worker.c:3940 +#: replication/logical/worker.c:4044 #, c-format msgid "logical replication worker for subscription \"%s\" will restart because of a parameter change" msgstr "パラメータの変更があったため、サブスクリプション\"%s\"に対応する論理レプリケーションワーカーが再起動します" -#: replication/logical/worker.c:3954 +#: replication/logical/worker.c:4058 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because the subscription owner's superuser privileges have been revoked" msgstr "サブスクリプション\"%s\"の所有者のスーパーユーザー権限が剥奪されたため、このサブスクリプションに対応する論理レプリケーション並列適用ワーカーが停止します" -#: replication/logical/worker.c:3958 +#: replication/logical/worker.c:4062 #, c-format msgid "logical replication worker for subscription \"%s\" will restart because the subscription owner's superuser privileges have been revoked" msgstr "サブスクリプション\"%s\"の所有者のスーパーユーザー権限が剥奪されたため、このサブスクリプションに対応する論理レプリケーションワーカーが再起動します" -#: replication/logical/worker.c:4478 +#: replication/logical/worker.c:4564 #, c-format msgid "subscription has no replication slot set" msgstr "サブスクリプションにレプリケーションスロットが設定されていません" -#: replication/logical/worker.c:4591 +#: replication/logical/worker.c:4589 +#, c-format +msgid "apply worker for subscription \"%s\" could not connect to the publisher: %s" +msgstr "サブスクリプション\"%s\"の適用ワーカーがパブリッシャに接続できませんでした: %s" + +#: replication/logical/worker.c:4678 #, c-format msgid "logical replication worker for subscription %u will not start because the subscription was removed during startup" msgstr "サブスクリプション%uが起動中に削除されたため、このサブスクリプションに対応する論理レプリケーションワーカーは起動しません" -#: replication/logical/worker.c:4607 +#: replication/logical/worker.c:4694 #, c-format msgid "logical replication worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "サブスクリプション\"%s\"が起動中に無効化されたため、このサブスクリプションに対応する論理レプリケーションワーカーは起動しません" -#: replication/logical/worker.c:4631 +#: replication/logical/worker.c:4718 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "サブスクリプション\"%s\"、テーブル\"%s\"に対応する論理レプリケーションテーブル同期ワーカーが起動しました" -#: replication/logical/worker.c:4636 +#: replication/logical/worker.c:4723 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカーが起動しました" -#: replication/logical/worker.c:4734 +#: replication/logical/worker.c:4845 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "サブスクリプション\"%s\"はエラーのため無効化されました" -#: replication/logical/worker.c:4782 +#: replication/logical/worker.c:4893 #, c-format msgid "logical replication starts skipping transaction at LSN %X/%X" msgstr "論理レプリケーションは%X/%Xででトランザクションのスキップを開始します" -#: replication/logical/worker.c:4796 +#: replication/logical/worker.c:4907 #, c-format msgid "logical replication completed skipping transaction at LSN %X/%X" msgstr "論理レプリケーションは%X/%Xでトランザクションのスキップを完了しました" -#: replication/logical/worker.c:4878 +#: replication/logical/worker.c:4989 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "サブスクリプションの\"%s\"スキップLSNをクリアしました" -#: replication/logical/worker.c:4879 +#: replication/logical/worker.c:4990 #, c-format msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X." msgstr "リモートトランザクションの完了WAL位置(LSN) %X/%XがスキップLSN %X/%X と一致しません。" -#: replication/logical/worker.c:4905 +#: replication/logical/worker.c:5027 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\"" msgstr "メッセージタイプ \"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中" -#: replication/logical/worker.c:4909 +#: replication/logical/worker.c:5031 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u" msgstr "トランザクション%3$u中、メッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中" -#: replication/logical/worker.c:4914 +#: replication/logical/worker.c:5036 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X" msgstr "%4$X/%5$Xで終了したトランザクション%3$u中、メッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中" -#: replication/logical/worker.c:4925 +#: replication/logical/worker.c:5047 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u" msgstr "レプリケーション起点\"%1$s\"のリモートデータ処理中、トランザクション%5$uのレプリケーション対象リレーション\"%3$s.%4$s\"に対するメッセージタイプ\"%2$s\"内" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:5054 #, 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 "%6$X/%7$Xで終了したトランザクション%5$u中、レプリケーション先リレーション\"%3$s.%4$s\"に対するメッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中" -#: replication/logical/worker.c:4943 +#: replication/logical/worker.c:5065 #, 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 "レプリケーション起点\"%1$s\"のリモートデータ処理中、トランザクション%6$uのレプリケーション対象リレーション\"%3$s.%4$s\"、列\"%5$s\"に対するメッセージタイプ\"%2$s\"内" -#: replication/logical/worker.c:4951 +#: replication/logical/worker.c:5073 #, 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 "%7$X/%8$Xで終了したトランザクション%6$u中、レプリケーション先リレーション\"%3$s.%4$s\"、列\"%5$s\"に対するメッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中" -#: replication/pgoutput/pgoutput.c:315 +#: replication/pgoutput/pgoutput.c:328 #, c-format msgid "invalid proto_version" msgstr "不正なproto_version" -#: replication/pgoutput/pgoutput.c:320 +#: replication/pgoutput/pgoutput.c:333 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\"は範囲外です" -#: replication/pgoutput/pgoutput.c:337 +#: replication/pgoutput/pgoutput.c:350 #, c-format msgid "invalid publication_names syntax" msgstr "publication_namesの構文が不正です" -#: replication/pgoutput/pgoutput.c:407 +#: replication/pgoutput/pgoutput.c:420 replication/pgoutput/pgoutput.c:424 #, 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:469 #, 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:475 #, 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:490 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "要求されたproto_version=%dではストリーミングをサポートしていません、%d以上が必要です" -#: replication/pgoutput/pgoutput.c:479 +#: replication/pgoutput/pgoutput.c:496 #, c-format msgid "requested proto_version=%d does not support parallel streaming, need %d or higher" msgstr "要求された proto_version=%d は並列ストリーミングをサポートしません、%d以上である必要があります" -#: replication/pgoutput/pgoutput.c:484 +#: replication/pgoutput/pgoutput.c:501 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "ストリーミングが要求されましたが、出力プラグインでサポートされていません" -#: replication/pgoutput/pgoutput.c:498 +#: replication/pgoutput/pgoutput.c:515 #, c-format msgid "requested proto_version=%d does not support two-phase commit, need %d or higher" msgstr "要求されたproto_version=%dは2相コミットをサポートしていません、%d以上が必要です" -#: replication/pgoutput/pgoutput.c:503 +#: replication/pgoutput/pgoutput.c:520 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "2相コミットが要求されました、しかし出力プラグインではサポートされていません" -#: replication/slot.c:260 +#: replication/pgoutput/pgoutput.c:1085 +#, c-format +msgid "cannot use different values of publish_generated_columns for table \"%s.%s\" in different publications" +msgstr "異なるパブリケーションでテーブル\"%s.%s\"に対してpublish_generated_columnsの値を異なる設定にすることはできません" + +#: replication/pgoutput/pgoutput.c:1792 +#, c-format +msgid "skipped loading publication: %s" +msgstr "パブリケーションの読み込みをスキップしました: %s" + +#: replication/pgoutput/pgoutput.c:1793 +#, c-format +msgid "The publication does not exist at this point in the WAL." +msgstr "このパブリケーションはWALのこの時点では存在しません。" + +#: replication/pgoutput/pgoutput.c:1794 +#, c-format +msgid "Create the publication if it does not exist." +msgstr "パブリケーションが存在しない場合は作成してください。" + +#: replication/slot.c:275 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "レプリケーションスロット名\"%s\"は短すぎます" -#: replication/slot.c:269 +#: replication/slot.c:284 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "レプリケーションスロット名\"%s\"は長すぎます" -#: replication/slot.c:282 +#: replication/slot.c:297 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "レプリケーションスロット名\"%s\"は不正な文字を含んでいます" -#: replication/slot.c:284 +#: replication/slot.c:299 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "レプリケーションスロット名は小文字、数字とアンダースコアのみを含むことができます。" -#: replication/slot.c:333 +#: replication/slot.c:348 #, c-format msgid "cannot enable failover for a replication slot created on the standby" msgstr "スタンバイ上で作成したレプリケーションスロットのフェイルオーバーを有効にすることはできません" -#: replication/slot.c:345 replication/slot.c:849 +#: replication/slot.c:360 replication/slot.c:885 #, c-format msgid "cannot enable failover for a temporary replication slot" msgstr "一時レプリケーションスロットのフェイルオーバーを有効にすることはできません" -#: replication/slot.c:370 +#: replication/slot.c:385 #, c-format msgid "replication slot \"%s\" already exists" msgstr "レプリケーションスロット\"%s\"はすでに存在します" -#: replication/slot.c:380 +#: replication/slot.c:395 #, c-format msgid "all replication slots are in use" msgstr "レプリケーションスロットは全て使用中です" -#: replication/slot.c:381 +#: replication/slot.c:396 #, c-format 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:579 replication/slotfuncs.c:664 utils/activity/pgstat_replslot.c:56 utils/adt/genfile.c:739 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "レプリケーションスロット\"%s\"は存在しません" -#: replication/slot.c:606 replication/slot.c:1337 +#: replication/slot.c:634 replication/slot.c:1388 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "レプリケーションスロット\"%s\"はPID%dで使用中です" -#: replication/slot.c:638 +#: replication/slot.c:651 +#, c-format +msgid "can no longer access replication slot \"%s\"" +msgstr "レプリケーションスロット\"%s\"にはすでにアクセスできなくなっています" + +#: replication/slot.c:653 +#, c-format +msgid "This replication slot has been invalidated due to \"%s\"." +msgstr "このレプリケーションスロットは\"%s\"によって無効化されています。" + +#: replication/slot.c:672 #, c-format msgid "acquired logical replication slot \"%s\"" msgstr "論理レプリケーションスロット\"%s\"を取得しました" -#: replication/slot.c:640 +#: replication/slot.c:674 #, c-format msgid "acquired physical replication slot \"%s\"" msgstr "物理レプリケーションスロット\"%s\"を取得しました" -#: replication/slot.c:729 +#: replication/slot.c:759 #, c-format msgid "released logical replication slot \"%s\"" msgstr "論理レプリケーションスロット\"%s\"を解放しました" -#: replication/slot.c:731 +#: replication/slot.c:761 #, c-format msgid "released physical replication slot \"%s\"" msgstr "物理レプリケーションスロット\"%s\"を解放しました" -#: replication/slot.c:797 +#: replication/slot.c:827 #, c-format 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 +#: replication/slot.c:850 #, c-format msgid "cannot use %s with a physical replication slot" msgstr "%sは物理レプリケーションスロットでは使用できません" -#: replication/slot.c:828 +#: replication/slot.c:862 #, c-format msgid "cannot alter replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を変更できませんでした" -#: replication/slot.c:838 +#: replication/slot.c:872 #, c-format msgid "cannot enable failover for a replication slot on the standby" msgstr "スタンバイ上ではレプリケーションスロットのフェイルオーバーを有効にすることはできません" -#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 +#: replication/slot.c:1020 replication/slot.c:2120 replication/slot.c:2505 #, c-format msgid "could not remove directory \"%s\"" msgstr "ディレクトリ\"%s\"を削除できませんでした" -#: replication/slot.c:1372 +#: replication/slot.c:1423 #, c-format msgid "replication slots can only be used if \"max_replication_slots\" > 0" msgstr "レプリケーションスロットは\"max_replication_slots\" > 0 のときだけ使用できます" -#: replication/slot.c:1377 +#: replication/slot.c:1428 #, c-format msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" msgstr "レプリケーションスロットは\"wal_level\" >= \"replica\" のときだけ使用できます" -#: replication/slot.c:1389 +#: replication/slot.c:1440 #, c-format msgid "permission denied to use replication slots" msgstr "レプリケーションスロットを使用する権限がありません" -#: replication/slot.c:1390 +#: replication/slot.c:1441 #, c-format msgid "Only roles with the %s attribute may use replication slots." msgstr "%s属性を持つロールのみがレプリケーションスロットを使用できます。" -#: replication/slot.c:1498 +#: replication/slot.c:1550 #, c-format -msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." -msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." -msgstr[0] "このスロットのrestart_lsn %X/%Xは制限を%lluバイト超過しています。" +msgid "The slot's restart_lsn %X/%X exceeds the limit by % byte." +msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by % bytes." +msgstr[0] "このスロットのrestart_lsn %X/%Xは制限を%バイト超過しています。" -#: replication/slot.c:1506 +#: replication/slot.c:1561 #, c-format msgid "The slot conflicted with xid horizon %u." msgstr "このスロットはXID地平線%uと競合しました。" -#: replication/slot.c:1511 +#: replication/slot.c:1566 msgid "Logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary server." msgstr "論理デコードを行うためにはプライマリサーバー上で\"wal_level\" >= \"logical\" である必要があります。" -#: replication/slot.c:1519 +#. translator: %s is a GUC variable name +#: replication/slot.c:1575 +#, c-format +msgid "The slot's idle time of %dmin %02ds exceeds the configured \"%s\" duration of %dmin." +msgstr "このスロットのアイドル時間 %d分%02d秒が、\"%s\"で設定された %d分を超えています。" + +#: replication/slot.c:1589 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "プロセス%dを終了してレプリケーションスロット\"%s\"を解放します" -#: replication/slot.c:1521 +#: replication/slot.c:1591 #, c-format msgid "invalidating obsolete replication slot \"%s\"" msgstr "使用不能のレプリケーションスロット\"%s\"を無効化します" -#: replication/slot.c:2249 +#: replication/slot.c:2443 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "レプリケーションスロットファイル\"%1$s\"のマジックナンバーが不正です: %3$uのはずが%2$uでした" -#: replication/slot.c:2256 +#: replication/slot.c:2450 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "レプリケーションスロットファイル\"%s\"はサポート外のバージョン%uです" -#: replication/slot.c:2263 +#: replication/slot.c:2457 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "レプリケーションスロットファイル\"%s\"のサイズ%uは異常です" -#: replication/slot.c:2299 +#: replication/slot.c:2493 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "レプリケーションスロットファイル\"%s\"のチェックサムが一致しません: %uですが、%uであるべきです" -#: replication/slot.c:2333 +#: replication/slot.c:2529 #, c-format msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" msgstr "論理レプリケーションスロット\"%s\"がありますが、\"wal_level\" < \"logical\" です" -#: replication/slot.c:2335 +#: replication/slot.c:2531 #, c-format msgid "Change \"wal_level\" to be \"logical\" or higher." msgstr "\"wal_level\"を\"logical\"もしくはそれより上位の設定にしてください。" -#: replication/slot.c:2339 +#: replication/slot.c:2543 +#, c-format +msgid "logical replication slot \"%s\" exists on the standby, but \"hot_standby\" = \"off\"" +msgstr "論理レプリケーションスロット\"%s\"がありますが、\"hot_standby\" = \"off\" です" + +#: replication/slot.c:2545 +#, c-format +msgid "Change \"hot_standby\" to be \"on\"." +msgstr "\"hot_standby\" を \"on\" に変更してください。" + +#: replication/slot.c:2550 #, c-format msgid "physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" msgstr "物理レプリケーションスロット\"%s\"がありますが、\"wal_level\" < \"replica\" です" -#: replication/slot.c:2341 +#: replication/slot.c:2552 #, c-format msgid "Change \"wal_level\" to be \"replica\" or higher." msgstr "\"wal_level\"を\"replica\"もしくはそれより上位の設定にしてください。" -#: replication/slot.c:2383 +#: replication/slot.c:2598 #, c-format msgid "too many replication slots active before shutdown" msgstr "シャットダウン前のアクティブなレプリケーションスロットの数が多すぎます" -#: replication/slot.c:2461 +#: replication/slot.c:2599 +#, c-format +msgid "Increase \"max_replication_slots\" and try again." +msgstr "\"max_replication_slots\"を増やして再度試してください" + +#: replication/slot.c:2676 +#, c-format +msgid "Replication slot \"%s\" does not exist." +msgstr "レプリケーションスロット\"%s\"は存在しません。" + +#: replication/slot.c:2684 +#, c-format +msgid "\"%s\" is not a physical replication slot." +msgstr "\"%s\"は物理レプリケーションスロットではありません。" + +#: replication/slot.c:2863 #, c-format -msgid "\"%s\" is not a physical replication slot" -msgstr "\"%s\"は物理レプリケーションスロットではありません" +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "パラメータ\"%2$s\"で指定されているレプリケーションスロット\"%1$s\"は存在しません" -#: replication/slot.c:2637 +#: replication/slot.c:2865 replication/slot.c:2899 replication/slot.c:2914 #, c-format -msgid "replication slot \"%s\" specified in parameter %s does not exist" -msgstr "パラメータ%2$sで指定されているレプリケーションスロット\"%1$s\"は存在しません" +msgid "Logical replication is waiting on the standby associated with replication slot \"%s\"." +msgstr "論理レプリケーションはレプリケーションスロット”%s\"に対応するスタンバイを待っています。 " -#: replication/slot.c:2639 replication/slot.c:2680 replication/slot.c:2695 +#: replication/slot.c:2867 #, c-format -msgid "Logical replication is waiting on the standby associated with \"%s\"." -msgstr "論理レプリケーションは”%s\"に対応するスタンバイを待っています。 " +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "レプリケーションスロット\"%s\"を作成するか、パラメータ\"%s\"を修正してください。" -#: replication/slot.c:2641 +#: replication/slot.c:2877 #, c-format -msgid "Consider creating the slot \"%s\" or amend parameter %s." -msgstr "スロット\"%s\"を作成するか、パラメータ%sを修正することを検討してください。" +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "パラメータ\"%2$s\"では論理レプリケーションスロット\"%1$s\"は指定できません" -#: replication/slot.c:2658 +#: replication/slot.c:2879 #, c-format -msgid "cannot have logical replication slot \"%s\" in parameter %s" -msgstr "パラメータ%2$sでは論理レプリケーションスロット\"%1$s\"は指定できません" +msgid "Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "論理レプリケーションはレプリケーションスロット\"%s\"が修正されるのを待っています。" -#: replication/slot.c:2660 +#: replication/slot.c:2881 #, c-format -msgid "Logical replication is waiting for correction on \"%s\"." -msgstr "論理レプリケーションは\"%s\"が修正されるのを待っています。" +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "論理レプリケーションスロット\"%s\"をパラメータ\"%s\"から削除してください。" -#: replication/slot.c:2662 +#: replication/slot.c:2897 #, c-format -msgid "Consider removing logical slot \"%s\" from parameter %s." -msgstr "パラメータ%sから論理スロット\"%s\"を削除することを検討してください。" +msgid "physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated" +msgstr "パラメータ\"%2$s\"で指定された物理レプリケーションスロット\"%1$s\"は無効化されています" -#: replication/slot.c:2678 +#: replication/slot.c:2901 #, c-format -msgid "physical slot \"%s\" specified in parameter %s has been invalidated" -msgstr "パラメータ%2$sで指定された物理スロット\"%1$s\"は無効化されました" +msgid "Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "レプリケーションスロット\"%s\"を削除して再作成するか、パラメータ\"%s\"を修正してください。" -#: replication/slot.c:2682 +#: replication/slot.c:2912 #, c-format -msgid "Consider dropping and recreating the slot \"%s\" or amend parameter %s." -msgstr "スロット\"%s\"の削除および再作成、もしくはパラメータ%sの修正を検討してください。" +msgid "replication slot \"%s\" specified in parameter \"%s\" does not have active_pid" +msgstr "\"%2$s\"で指定されたレプリケーションスロット\"%1$s\"にはactive_pidがありません" -#: replication/slot.c:2693 +#: replication/slot.c:2916 #, c-format -msgid "replication slot \"%s\" specified in parameter %s does not have active_pid" -msgstr "%2$sで指定されたレプリケーションスロット\"%1$s\"にはactive_pidがありません" +msgid "Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "レプリケーションスロット\"%s\"に関連付けられているスタンバイを起動するか、パラメータ%sを修正してください。" -#: replication/slot.c:2697 +#: replication/slot.c:3008 #, c-format -msgid "Consider starting standby associated with \"%s\" or amend parameter %s." -msgstr "\"%s\"に関連付けられているスタンバイを起動するか、パラメータ%sを修正することを検討してくだささい。" +msgid "\"%s\" must be set to 0 during binary upgrade mode." +msgstr "バイナリアップグレードモード中は\"%s\"は0に設定されている必要があります。" -#: replication/slotfuncs.c:526 +#: replication/slotfuncs.c:529 #, c-format msgid "invalid target WAL LSN" msgstr "不正な目標WAL LSN" -#: replication/slotfuncs.c:548 +#: replication/slotfuncs.c:551 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "レプリケーションスロット\"%s\"は進められません" -#: replication/slotfuncs.c:550 +#: replication/slotfuncs.c:553 #, c-format msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "このスロットはWALを留保したことがないか、無効化さています。" -#: replication/slotfuncs.c:566 +#: replication/slotfuncs.c:569 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "レプリケーションスロットを %X/%X に進めることはできません、最小値は %X/%X" -#: replication/slotfuncs.c:673 +#: replication/slotfuncs.c:676 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "物理レプリケーションスロット\"%s\"を論理レプリケーションスロットとしてコピーすることはできません" -#: replication/slotfuncs.c:675 +#: replication/slotfuncs.c:678 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "論理レプリケーションスロット\"%s\"を物理レプリケーションスロットとしてコピーすることはできません" -#: replication/slotfuncs.c:682 +#: replication/slotfuncs.c:685 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "WAL の留保をしていないレプリケーションスロットはコピーできません" -#: replication/slotfuncs.c:768 +#: replication/slotfuncs.c:691 +#, c-format +msgid "cannot copy invalidated replication slot \"%s\"" +msgstr "無効化されたレプリケーションスロット\"%s\"はコピーできません" + +#: replication/slotfuncs.c:783 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"をコピーできませんでした" -#: replication/slotfuncs.c:770 +#: replication/slotfuncs.c:785 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "コピー処理中にコピー元のレプリケーションスロットが非互換的に変更されました。" -#: replication/slotfuncs.c:776 +#: replication/slotfuncs.c:791 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "未完成の論理レプリケーションスロット\"%s\"はコピーできません" -#: replication/slotfuncs.c:778 +#: replication/slotfuncs.c:793 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "このソースレプリケーションスロットの confirmed_flush_lsn が有効値になってから再度実行してください。" -#: replication/slotfuncs.c:877 +#: replication/slotfuncs.c:805 +#, c-format +msgid "cannot copy replication slot \"%s\"" +msgstr "レプリケーションスロット\"%s\"はコピーできません" + +#: replication/slotfuncs.c:807 +#, c-format +msgid "The source replication slot was invalidated during the copy operation." +msgstr "コピー元のレプリケーションスロットがコピー処理中に無効化されました。" + +#: replication/slotfuncs.c:906 #, c-format msgid "replication slots can only be synchronized to a standby server" msgstr "レプリケーションスロットはスタンバイサーバーへのみ同期可能です" @@ -21278,203 +21918,203 @@ msgstr "スタンバイ\"%s\"は優先度%dの同期スタンバイになりま msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "スタンバイ\"%s\"は定足数同期スタンバイの候補になりました" -#: replication/syncrep.c:1013 +#: replication/syncrep.c:1014 #, c-format -msgid "\"synchronous_standby_names\" parser failed" -msgstr "\"synchronous_standby_names\"の読み取りに失敗しました" +msgid "\"%s\" parser failed." +msgstr "\"%s\"のパーサーが失敗しました。" -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1021 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "同期スタンバイの数(%d)は1以上である必要があります" -#: replication/walreceiver.c:176 +#: replication/walreceiver.c:276 #, c-format -msgid "terminating walreceiver process due to administrator command" -msgstr "管理者コマンドにより WAL 受信プロセスを終了しています" +msgid "streaming replication receiver \"%s\" could not connect to the primary server: %s" +msgstr "ストリーミングレプリケーション・レシーバー\"%s\"はプライマリ・サーバーに接続できませんでした: %s" -#: replication/walreceiver.c:354 +#: replication/walreceiver.c:324 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "データベースシステムの識別子がプライマリサーバーとスタンバイサーバー間で異なります" -#: replication/walreceiver.c:355 +#: replication/walreceiver.c:325 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "プライマリ側の識別子は %s ですが、スタンバイ側の識別子は %s です。" -#: replication/walreceiver.c:366 +#: replication/walreceiver.c:336 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "プライマリの最大のタイムライン%uが、リカバリのタイムライン %uより遅れています" -#: replication/walreceiver.c:419 +#: replication/walreceiver.c:389 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "プライマリのタイムライン%3$uの %1$X/%2$XからでWALストリーミングを始めます" -#: replication/walreceiver.c:423 +#: replication/walreceiver.c:393 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "タイムライン%3$uの %1$X/%2$XからでWALストリーミングを再開します" -#: replication/walreceiver.c:458 +#: replication/walreceiver.c:428 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "WAL ストリーミングを継続できません。リカバリはすでに終わっています。" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:472 #, c-format msgid "replication terminated by primary server" msgstr "プライマリサーバーによりレプリケーションが打ち切られました" -#: replication/walreceiver.c:503 +#: replication/walreceiver.c:473 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "タイムライン%uの%X/%XでWALの最後に達しました" -#: replication/walreceiver.c:593 +#: replication/walreceiver.c:573 #, c-format msgid "terminating walreceiver due to timeout" msgstr "レプリケーションタイムアウトによりwalreceiverを終了しています" -#: replication/walreceiver.c:625 +#: replication/walreceiver.c:605 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "プライマリサーバーには要求されたタイムライン%u上にこれ以上WALがありません" -#: replication/walreceiver.c:641 replication/walreceiver.c:1071 +#: replication/walreceiver.c:621 replication/walreceiver.c:1063 #, c-format msgid "could not close WAL segment %s: %m" msgstr "WALセグメント%sをクローズできませんでした: %m" -#: replication/walreceiver.c:760 +#: replication/walreceiver.c:740 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "プライマリサーバーからライムライン%u用のタイムライン履歴ファイルを取り込みしています" -#: replication/walreceiver.c:959 +#: replication/walreceiver.c:951 #, c-format msgid "could not write to WAL segment %s at offset %d, length %lu: %m" msgstr "WALファイルセグメント%sのオフセット%d、長さ%luの書き込みが失敗しました: %m" -#: replication/walsender.c:531 +#: replication/walsender.c:505 #, c-format msgid "cannot use %s with a logical replication slot" msgstr "%sは論理レプリケーションスロットでは使用できません" -#: replication/walsender.c:635 storage/smgr/md.c:1723 +#: replication/walsender.c:609 storage/smgr/md.c:1867 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "ファイル\"%s\"の終端へシークできませんでした: %m" -#: replication/walsender.c:639 +#: replication/walsender.c:613 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "ファイル\"%s\"の先頭にシークできませんでした: %m" -#: replication/walsender.c:853 +#: replication/walsender.c:829 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "論理レプリケーションスロットは物理レプリケーションには使用できません" -#: replication/walsender.c:919 +#: replication/walsender.c:895 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "タイムライン%3$u上の要求された開始ポイント%1$X/%2$Xはサーバーの履歴にありません" -#: replication/walsender.c:922 +#: replication/walsender.c:898 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "サーバーの履歴はタイムライン%uの%X/%Xからフォークしました。" -#: replication/walsender.c:966 +#: replication/walsender.c:942 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "要求された開始ポイント%X/%XはサーバーのWALフラッシュ位置%X/%Xより進んでいます" -#: replication/walsender.c:1160 +#: replication/walsender.c:1137 #, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" msgstr "CREATE_REPLICATION_SLOTのオプション\"%s\"に対する認識できない値: \"%s\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1266 +#: replication/walsender.c:1243 #, c-format msgid "%s must not be called inside a transaction" msgstr "%sはトランザクション内では呼び出せません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1276 +#: replication/walsender.c:1253 #, c-format msgid "%s must be called inside a transaction" msgstr "%sはトランザクション内で呼び出さなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1282 +#: replication/walsender.c:1259 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s は REPEATABLE READ 分離レベルのトランザクションで呼び出されなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1287 +#: replication/walsender.c:1264 #, c-format msgid "%s must be called in a read-only transaction" msgstr "%sは読み取り専用トランザクションの中で呼び出さなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1293 +#: replication/walsender.c:1270 #, c-format msgid "%s must be called before any query" msgstr "%s は問い合わせの実行前に呼び出されなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1299 +#: replication/walsender.c:1276 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s はサブトランザクション内では呼び出せません" -#: replication/walsender.c:1472 +#: replication/walsender.c:1453 #, c-format msgid "terminating walsender process after promotion" msgstr "昇格後にWAL送信プロセスを終了します" -#: replication/walsender.c:2000 +#: replication/walsender.c:1994 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "WAL送信プロセスが停止モードの間は新しいコマンドを実行できません" -#: replication/walsender.c:2035 +#: replication/walsender.c:2029 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "物理レプリケーション用のWAL送信プロセスでSQLコマンドは実行できません" -#: replication/walsender.c:2068 +#: replication/walsender.c:2060 #, c-format 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:2068 tcop/fastpath.c:208 tcop/postgres.c:1137 tcop/postgres.c:1495 tcop/postgres.c:1747 tcop/postgres.c:2253 tcop/postgres.c:2690 tcop/postgres.c:2767 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "現在のトランザクションがアボートしました。トランザクションブロックが終わるまでコマンドは無視されます" -#: replication/walsender.c:2233 replication/walsender.c:2268 +#: replication/walsender.c:2225 replication/walsender.c:2260 #, c-format msgid "unexpected EOF on standby connection" msgstr "スタンバイ接続で想定外のEOFがありました" -#: replication/walsender.c:2256 +#: replication/walsender.c:2248 #, c-format msgid "invalid standby message type \"%c\"" msgstr "スタンバイのメッセージタイプ\"%c\"は不正です" -#: replication/walsender.c:2345 +#: replication/walsender.c:2337 #, c-format msgid "unexpected message type \"%c\"" msgstr "想定しないメッセージタイプ\"%c\"" -#: replication/walsender.c:2759 +#: replication/walsender.c:2751 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "レプリケーションタイムアウトにより WAL 送信プロセスを終了しています" @@ -21654,280 +22294,285 @@ msgstr "リレーション\"%2$s\"のルール\"%1$s\"は存在しません" msgid "renaming an ON SELECT rule is not allowed" msgstr "ON SELECTルールの名前を変更することはできません" -#: rewrite/rewriteHandler.c:581 +#: rewrite/rewriteHandler.c:590 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "WITH の問い合わせ名\"%s\"が、ルールのアクションと書き換えられようとしている問い合わせの両方に現れています" -#: rewrite/rewriteHandler.c:608 +#: rewrite/rewriteHandler.c:617 #, 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:671 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "複数ルールではRETURNINGリストを持つことはできません" -#: rewrite/rewriteHandler.c:893 rewrite/rewriteHandler.c:932 +#: rewrite/rewriteHandler.c:908 rewrite/rewriteHandler.c:947 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "列\"%s\"への非デフォルト値の挿入はできません" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:961 +#: rewrite/rewriteHandler.c:910 rewrite/rewriteHandler.c:976 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "列\"%s\"は GENERATED ALWAYS として定義されています。" -#: rewrite/rewriteHandler.c:897 +#: rewrite/rewriteHandler.c:912 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "OVERRIDING SYSTEM VALUE を指定することで挿入を強制できます。" -#: rewrite/rewriteHandler.c:959 rewrite/rewriteHandler.c:967 +#: rewrite/rewriteHandler.c:974 rewrite/rewriteHandler.c:982 #, 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:1118 rewrite/rewriteHandler.c:1136 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "同じ列\"%s\"に複数の代入があります" -#: rewrite/rewriteHandler.c:1697 +#: rewrite/rewriteHandler.c:1691 #, c-format msgid "MERGE is not supported for relations with rules." msgstr "MERGEはルールを持つリレーションに対してはサポートされません。" -#: rewrite/rewriteHandler.c:2110 rewrite/rewriteHandler.c:4197 +#: rewrite/rewriteHandler.c:1731 rewrite/rewriteHandler.c:3271 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "非システムのビュー\"%s\"へのアクセスは制限されています" + +#: rewrite/rewriteHandler.c:2130 rewrite/rewriteHandler.c:4265 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "リレーション\"%s\"のルールで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2195 +#: rewrite/rewriteHandler.c:2235 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "リレーション\"%s\"のポリシで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2547 +#: rewrite/rewriteHandler.c:2598 msgid "Junk view columns are not updatable." msgstr "ジャンクビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2552 +#: rewrite/rewriteHandler.c:2603 msgid "View columns that are not columns of their base relation are not updatable." msgstr "基底リレーションの列ではないビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2555 +#: rewrite/rewriteHandler.c:2606 msgid "View columns that refer to system columns are not updatable." msgstr "システム列を参照するビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2609 msgid "View columns that return whole-row references are not updatable." msgstr "行全体参照を返すビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2619 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing DISTINCT are not automatically updatable." msgstr "DISTINCTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2622 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing GROUP BY are not automatically updatable." msgstr "GROUP BYを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2625 +#: rewrite/rewriteHandler.c:2676 msgid "Views containing HAVING are not automatically updatable." msgstr "HAVINGを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2679 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "UNION、INTERSECT、EXCEPTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2682 msgid "Views containing WITH are not automatically updatable." msgstr "WITHを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2685 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "LIMIT、OFFSETを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2646 +#: rewrite/rewriteHandler.c:2697 msgid "Views that return aggregate functions are not automatically updatable." msgstr "集約関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2649 +#: rewrite/rewriteHandler.c:2700 msgid "Views that return window functions are not automatically updatable." msgstr "ウィンドウ関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2652 +#: rewrite/rewriteHandler.c:2703 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:2710 rewrite/rewriteHandler.c:2714 rewrite/rewriteHandler.c:2722 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "単一のテーブルまたはビューからselectしていないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2674 +#: rewrite/rewriteHandler.c:2725 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "TABLESAMPLEを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2698 +#: rewrite/rewriteHandler.c:2749 msgid "Views that have no updatable columns are not automatically updatable." msgstr "更新可能な列を持たないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:3079 rewrite/rewriteHandler.c:3114 +#: rewrite/rewriteHandler.c:3130 rewrite/rewriteHandler.c:3165 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ビュー\"%s\"へは挿入(INSERT)できません" -#: rewrite/rewriteHandler.c:3082 +#: rewrite/rewriteHandler.c:3133 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "ビューへの挿入を可能にするために、INSTEAD OF INSERTトリガまたは無条件のON INSERT DO INSTEADルールを作成してください。" -#: rewrite/rewriteHandler.c:3087 rewrite/rewriteHandler.c:3123 +#: rewrite/rewriteHandler.c:3138 rewrite/rewriteHandler.c:3174 #, c-format msgid "cannot update view \"%s\"" msgstr "ビュー\"%s\"は更新できません" -#: rewrite/rewriteHandler.c:3090 +#: rewrite/rewriteHandler.c:3141 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "ビューへの更新を可能にするために、INSTEAD OF UPDATEトリガまたは無条件のON UPDATE DO INSTEADルールを作成してください。" -#: rewrite/rewriteHandler.c:3095 rewrite/rewriteHandler.c:3132 +#: rewrite/rewriteHandler.c:3146 rewrite/rewriteHandler.c:3183 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ビュー\"%s\"からは削除できません" -#: rewrite/rewriteHandler.c:3098 +#: rewrite/rewriteHandler.c:3149 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "ビューからの削除を可能にするために、INSTEAD OF DELETEトリガまたは無条件のON DELETE DO INSTEADルールを作成してください。" -#: rewrite/rewriteHandler.c:3117 +#: rewrite/rewriteHandler.c:3168 #, 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:3177 #, 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:3186 #, 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:3361 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"への挿入はできません" -#: rewrite/rewriteHandler.c:3297 +#: rewrite/rewriteHandler.c:3369 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"は更新できません" -#: rewrite/rewriteHandler.c:3305 +#: rewrite/rewriteHandler.c:3377 #, c-format msgid "cannot merge into column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"への統合はできません" -#: rewrite/rewriteHandler.c:3333 +#: rewrite/rewriteHandler.c:3405 #, c-format msgid "cannot merge into view \"%s\"" msgstr "ビュー\"%s\"への統合はできません" -#: rewrite/rewriteHandler.c:3335 +#: rewrite/rewriteHandler.c:3407 #, c-format -msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions, but not others." -msgstr "MERGEはINSTEAD OFトリガーが一部のアクションにのみ設定されていて、他にはされていないビューではサポートされません。" +msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions but not all." +msgstr "MERGEはINSTEAD OFトリガーが全てではなく一部のアクションに対してのみ設定されてるビューではサポートされません。" -#: rewrite/rewriteHandler.c:3336 +#: rewrite/rewriteHandler.c:3408 #, 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 INSERTトリガーを作成するか、または既存のINSTEAD OFトリガーを削除してください。" -#: rewrite/rewriteHandler.c:3855 +#: rewrite/rewriteHandler.c:3923 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "DO INSTEAD NOTIFYルールはWITH内のデータ更新文に対してはサポートされません" -#: rewrite/rewriteHandler.c:3866 +#: rewrite/rewriteHandler.c:3934 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合は DO INSTEAD NOTHING ルールはサポートされません" -#: rewrite/rewriteHandler.c:3880 +#: rewrite/rewriteHandler.c:3948 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合は、条件付き DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3884 +#: rewrite/rewriteHandler.c:3952 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合は DO ALSO ルールはサポートされません" -#: rewrite/rewriteHandler.c:3889 +#: rewrite/rewriteHandler.c:3957 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合はマルチステートメントの DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:4149 +#: rewrite/rewriteHandler.c:4217 msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "条件付きDO INSTEADルールを持つビューは自動更新できません。" -#: rewrite/rewriteHandler.c:4246 +#: rewrite/rewriteHandler.c:4314 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのINSERT RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4248 +#: rewrite/rewriteHandler.c:4316 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "RETURNING句を持つ無条件のON INSERT DO INSTEADルールが必要です。" -#: rewrite/rewriteHandler.c:4253 +#: rewrite/rewriteHandler.c:4321 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのUPDATE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4255 +#: rewrite/rewriteHandler.c:4323 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "RETURNING句を持つ無条件のON UPDATE DO INSTEADルールが必要です。" -#: rewrite/rewriteHandler.c:4260 +#: rewrite/rewriteHandler.c:4328 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのDELETE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4262 +#: rewrite/rewriteHandler.c:4330 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "RETURNING句を持つ無条件のON DELETE DO INSTEADルールが必要です。" -#: rewrite/rewriteHandler.c:4280 +#: rewrite/rewriteHandler.c:4348 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "ON CONFLICT句を伴うINSERTは、INSERTまたはUPDATEルールを持つテーブルでは使えません" -#: rewrite/rewriteHandler.c:4337 +#: rewrite/rewriteHandler.c:4405 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "複数問い合わせに対するルールにより書き換えられた問い合わせでは WITH を使用できません" -#: rewrite/rewriteManip.c:1083 +#: rewrite/rewriteManip.c:1222 #, c-format msgid "conditional utility statements are not implemented" msgstr "条件付きのユーティリティ文は実装されていません" -#: rewrite/rewriteManip.c:1427 +#: rewrite/rewriteManip.c:1567 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "ビューに対するWHERE CURRENT OFは実装されていません" -#: rewrite/rewriteManip.c:1762 +#: rewrite/rewriteManip.c:1970 #, c-format msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" msgstr "ON UPDATE ルールのNEW変数は、対象のUPDATEコマンドでの複数列代入の一部となる列を参照することはできません" @@ -21986,7 +22631,7 @@ msgstr "文字列のドル引用符が閉じていません" msgid "zero-length delimited identifier" msgstr "二重引用符で囲まれた識別子の長さがゼロです" -#: scan.l:825 syncrep_scanner.l:101 +#: scan.l:825 syncrep_scanner.l:114 msgid "unterminated quoted identifier" msgstr "識別子の引用符が閉じていません" @@ -21995,89 +22640,163 @@ msgid "operator too long" msgstr "演算子が長すぎます" #: scan.l:1001 +msgid "parameter number too large" +msgstr "パラメータ数が多すぎます" + +#: scan.l:1007 msgid "trailing junk after parameter" msgstr "パラメータの後に余分な文字" -#: scan.l:1022 +#: scan.l:1028 msgid "invalid hexadecimal integer" msgstr "不正な16進整数" -#: scan.l:1026 +#: scan.l:1032 msgid "invalid octal integer" msgstr "不正な8進整数" -#: scan.l:1030 +#: scan.l:1036 msgid "invalid binary integer" msgstr "不正な2進整数" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1237 +#: scan.l:1231 #, 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:1239 #, c-format msgid "%s at or near \"%s\"" msgstr "\"%2$s\"またはその近辺で%1$s" -#: scan.l:1437 +#: scan.l:1431 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "文字列リテラルないでの\\'の非標準的な使用" -#: scan.l:1438 +#: scan.l:1432 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "文字列内で単一引用符を記述するには''、またはエスケープ文字列構文(E'...')を使用してください。" -#: scan.l:1447 +#: scan.l:1441 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "文字列リテラル内での\\\\の非標準的な使用" -#: scan.l:1448 +#: scan.l:1442 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "バックスラッシュのエスケープ文字列構文、例えばE'\\\\'を使用してください。" -#: scan.l:1462 +#: scan.l:1456 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "文字列リテラル内でのエスケープの非標準的な使用" -#: scan.l:1463 +#: scan.l:1457 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "エスケープのエスケープ文字列構文、例えばE'\\r\\n'を使用してください。" -#: snowball/dict_snowball.c:215 +#: snowball/dict_snowball.c:220 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "言語\"%s\"および符号化方式\"%s\"用に使用可能なSnowballステマがありません" -#: snowball/dict_snowball.c:238 tsearch/dict_ispell.c:74 tsearch/dict_simple.c:49 +#: snowball/dict_snowball.c:243 tsearch/dict_ispell.c:75 tsearch/dict_simple.c:50 #, c-format msgid "multiple StopWords parameters" msgstr "重複したStopWordsパラメータ" -#: snowball/dict_snowball.c:247 +#: snowball/dict_snowball.c:252 #, c-format msgid "multiple Language parameters" msgstr "重複したLanguageパラメータ" -#: snowball/dict_snowball.c:254 +#: snowball/dict_snowball.c:259 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "認識できないSnowballパラメータ: \"%s\"" -#: snowball/dict_snowball.c:262 +#: snowball/dict_snowball.c:267 #, c-format msgid "missing Language parameter" msgstr "Languageパラメータがありません" -#: statistics/extended_stats.c:176 +#: statistics/attribute_stats.c:191 statistics/attribute_stats.c:932 statistics/relation_stats.c:98 +#, c-format +msgid "Statistics cannot be modified during recovery." +msgstr "リカバリ中は統計情報の更新はできません。" + +#: statistics/attribute_stats.c:202 +#, c-format +msgid "cannot specify both attname and attnum" +msgstr "attname と attnum の両方を指定することはできません" + +#: statistics/attribute_stats.c:228 +#, c-format +msgid "must specify either attname or attnum" +msgstr "attname または attnum のいずれかを指定する必要があります" + +#: statistics/attribute_stats.c:236 +#, c-format +msgid "cannot modify statistics on system column \"%s\"" +msgstr "システム列\"%s\"の統計情報は更新できません" + +#: statistics/attribute_stats.c:300 +#, c-format +msgid "unable to determine element type of attribute \"%s\"" +msgstr "属性 \"%s\" の要素型を特定できません" + +#: statistics/attribute_stats.c:301 +#, c-format +msgid "Cannot set STATISTIC_KIND_MCELEM or STATISTIC_KIND_DECHIST." +msgstr "STATISTIC_KIND_MCELEM および STATISTIC_KIND_DECHIST は設定できません。" + +#: statistics/attribute_stats.c:316 +#, c-format +msgid "could not determine less-than operator for attribute \"%s\"" +msgstr "属性 \"%s\" の小なり演算子(<)を特定できませんでした" + +#: statistics/attribute_stats.c:317 +#, c-format +msgid "Cannot set STATISTIC_KIND_HISTOGRAM or STATISTIC_KIND_CORRELATION." +msgstr "STATISTIC_KIND_HISTOGRAM および STATISTIC_KIND_CORRELATION は設定できません。" + +#: statistics/attribute_stats.c:330 +#, c-format +msgid "attribute \"%s\" is not a range type" +msgstr "属性 \"%s\" は範囲型ではありません" + +#: statistics/attribute_stats.c:331 +#, c-format +msgid "Cannot set STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM or STATISTIC_KIND_BOUNDS_HISTOGRAM." +msgstr "STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM および STATISTIC_KIND_BOUNDS_HISTOGRAM は設定できません。" + +#: statistics/attribute_stats.c:590 statistics/attribute_stats.c:598 +#, c-format +msgid "attribute %d of relation \"%s\" does not exist" +msgstr "リレーション \"%2$s\" の属性%1$dは存在しません" + +#: statistics/attribute_stats.c:732 statistics/stat_utils.c:80 +#, c-format +msgid "\"%s\" array cannot contain NULL values" +msgstr "\"%s\" の配列はNULL値を格納できません" + +#: statistics/attribute_stats.c:775 +#, c-format +msgid "maximum number of statistics slots exceeded: %d" +msgstr "統計情報スロットの最大数を超過しました: %d" + +#: statistics/attribute_stats.c:942 +#, c-format +msgid "cannot clear statistics on system column \"%s\"" +msgstr "システム列\"%s\"の統計情報はクリアできません" + +#: statistics/extended_stats.c:175 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "統計オブジェクト\"%s.%s\"がリレーション\"%s.%s\"に対して計算できませんでした" @@ -22087,57 +22806,210 @@ msgstr "統計オブジェクト\"%s.%s\"がリレーション\"%s.%s\"に対し msgid "function returning record called in context that cannot accept type record" msgstr "レコード型を受け付けられないコンテキストでレコードを返す関数が呼び出されました" -#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 +#: statistics/relation_stats.c:115 #, c-format -msgid "cannot access temporary tables of other sessions" -msgstr "他のセッションの一時テーブルにはアクセスできません" +msgid "reltuples cannot be < -1.0" +msgstr "reltuplesは-1.0未満にはできません" -#: storage/buffer/bufmgr.c:1532 +#: statistics/stat_utils.c:44 #, c-format -msgid "invalid page in block %u of relation %s; zeroing out page" -msgstr "リレーション %2$s の %1$u ブロック目のページが不正です: ページをゼロで埋めました" +msgid "\"%s\" cannot be NULL" +msgstr "\"%s\"はNULLにはできません" + +#: statistics/stat_utils.c:71 +#, c-format +msgid "\"%s\" cannot be a multidimensional array" +msgstr "\"%s\"は多次元配列にはなれません" + +#: statistics/stat_utils.c:111 +#, c-format +msgid "\"%s\" must be specified when \"%s\" is specified" +msgstr "\"%s” は、\"%s\"が指定される際には必ず指定される必要があります" + +#: statistics/stat_utils.c:178 +#, c-format +msgid "cannot modify statistics for relation \"%s\"" +msgstr "リレーション\"%s\"の統計情報は変更できません" + +#: statistics/stat_utils.c:199 +#, c-format +msgid "cannot modify statistics for shared relation" +msgstr "共有リレーションの統計情報は変更できません" + +#: statistics/stat_utils.c:252 +#, c-format +msgid "unrecognized argument name: \"%s\"" +msgstr "識別できない引数名: \"%s\"" + +#: statistics/stat_utils.c:266 +#, c-format +msgid "argument \"%s\" has type \"%s\", expected type \"%s\"" +msgstr "引数\"%s\"の型は\"%s\"ですが、期待される型は\"%s\"です" + +#: statistics/stat_utils.c:307 +#, c-format +msgid "variadic arguments must be name/value pairs" +msgstr "可変長引数は名前/値のペアである必要があります" + +#: statistics/stat_utils.c:308 +#, c-format +msgid "Provide an even number of variadic arguments that can be divided into pairs." +msgstr "2つ組に分割できるよう、偶数個の可変長引数を指定してください。" + +#: statistics/stat_utils.c:322 +#, c-format +msgid "name at variadic position %d is NULL" +msgstr "可変長引数の位置%dの名前がNULLです" + +#: statistics/stat_utils.c:326 +#, c-format +msgid "name at variadic position %d has type \"%s\", expected type \"%s\"" +msgstr "可変長引数の位置%dの名前の型が\"%s\"ですが、期待される型は\"%s\"です" + +#: storage/aio/aio.c:1222 +#, c-format +msgid "Only -1 or values bigger than 0 are valid." +msgstr "-1または0より大きい値のみ有効です。" + +#: storage/aio/method_io_uring.c:171 +msgid "Check if io_uring is disabled via /proc/sys/kernel/io_uring_disabled." +msgstr "io_uringが無効化されていないかを /proc/sys/kernel/io_uring_disabled で確認してください。" + +#: storage/aio/method_io_uring.c:176 +#, c-format +msgid "Consider increasing \"ulimit -n\" to at least %d." +msgstr "\"ulimit -n\"を少なくとも%dに増やすことを検討してください。" + +#: storage/aio/method_io_uring.c:182 +msgid "Kernel does not support io_uring." +msgstr "カーネルはio_uringをサポートしていません。" + +#: storage/aio/method_io_uring.c:190 +#, c-format +msgid "could not setup io_uring queue: %m" +msgstr "io_uringキューのセットアップに失敗しました: %m" + +#: storage/aio/method_io_uring.c:324 +#, c-format +msgid "completing I/O on behalf of process %d" +msgstr "プロセス %d に代わってI/O完了させています" -#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 +#: storage/aio/method_worker.c:379 +#, c-format +msgid "I/O worker executing I/O on behalf of process %d" +msgstr "I/Oワーカーがプロセス %d に代わってI/Oを実行中" + +#: storage/buffer/bufmgr.c:655 storage/buffer/bufmgr.c:811 +#, c-format +msgid "cannot access temporary tables of other sessions" +msgstr "他のセッションの一時テーブルにはアクセスできません" + +#: storage/buffer/bufmgr.c:2701 storage/buffer/localbuf.c:393 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "リレーション\"%s\"を%uブロックを超えて拡張できません" -#: storage/buffer/bufmgr.c:2348 +#: storage/buffer/bufmgr.c:2772 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "リレーション %2$s の %1$u ブロック目で、EOF の先に想定外のデータを検出しました" -#: storage/buffer/bufmgr.c:2350 +#: storage/buffer/bufmgr.c:2775 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "これはカーネルの不具合で発生した模様です。システムの更新を検討してください。" -#: storage/buffer/bufmgr.c:5653 +#: storage/buffer/bufmgr.c:6115 #, c-format msgid "could not write block %u of %s" msgstr "%u ブロックを %s に書き出せませんでした" -#: storage/buffer/bufmgr.c:5655 +#: storage/buffer/bufmgr.c:6119 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "複数回失敗しました ---ずっと書き込みエラーが続くかもしれません。" -#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 +#: storage/buffer/bufmgr.c:6136 storage/buffer/bufmgr.c:6151 #, c-format msgid "writing block %u of relation %s" msgstr "ブロック %u を リレーション %s に書き込んでいます" -#: storage/buffer/localbuf.c:220 +#: storage/buffer/bufmgr.c:7250 +#, c-format +msgid "zeroing %u page(s) and ignoring %u checksum failure(s) among blocks %u..%u of relation %s" +msgstr "リレーション %5$s のブロック %3$u..%4$u の間で%1$uページをゼロクリアして、%2$u件のチェックサムエラーを無視しています" + +#: storage/buffer/bufmgr.c:7253 storage/buffer/bufmgr.c:7279 +#, c-format +msgid "Block %u held first zeroed page." +msgstr "ゼロクリアした最初のページはブロック %u にありました。" + +#: storage/buffer/bufmgr.c:7255 +#, c-format +msgid "See server log for details about the other %u invalid block(s)." +msgstr "他の%u個の不正なブロックの詳細については、サーバーログを参照してください。" + +#: storage/buffer/bufmgr.c:7270 +#, c-format +msgid "%u invalid pages among blocks %u..%u of relation %s" +msgstr "リレーション%4$sのブロック%2$u..%3$uに%1$uの不正なページ" + +#: storage/buffer/bufmgr.c:7271 +#, c-format +msgid "Block %u held first invalid page." +msgstr "最初の不正なページはブロック %u にありました。" + +#: storage/buffer/bufmgr.c:7272 +#, c-format +msgid "See server log for the other %u invalid block(s)." +msgstr "他の%u個の不正なブロックについてはサーバーログを参照してください。" + +#: storage/buffer/bufmgr.c:7277 +#, c-format +msgid "invalid page in block %u of relation %s; zeroing out page" +msgstr "リレーション %2$s の %1$u ブロック目のページが不正です: ページをゼロで埋めました" + +#: storage/buffer/bufmgr.c:7278 +#, c-format +msgid "zeroing out %u invalid pages among blocks %u..%u of relation %s" +msgstr "リレーション %4$s のブロック%2$u~%3$uにある%1$u個の不正なページをゼロクリアします" + +#: storage/buffer/bufmgr.c:7280 +#, c-format +msgid "See server log for the other %u zeroed block(s)." +msgstr "他の%u個の0クリアしたブロックについてはサーバーログを参照してください。" + +#: storage/buffer/bufmgr.c:7285 +#, c-format +msgid "ignoring checksum failure in block %u of relation %s" +msgstr "リレーション%2$sでのブロック%1$uのチェックサムエラーを無視します" + +#: storage/buffer/bufmgr.c:7286 +#, c-format +msgid "ignoring %u checksum failures among blocks %u..%u of relation %s" +msgstr "リレーション%4$sでのブロック%2$u..%3$uの%1$u件のチェックサムエラーを無視します" + +#: storage/buffer/bufmgr.c:7287 +#, c-format +msgid "Block %u held first ignored page." +msgstr "無視した最初のページはブロック %u にありました。" + +#: storage/buffer/bufmgr.c:7288 +#, c-format +msgid "See server log for the other %u ignored block(s)." +msgstr "他の%u個のエラーを無視したブロックについてはサーバーログを参照してください。" + +#: storage/buffer/localbuf.c:272 #, c-format msgid "no empty local buffer available" msgstr "利用できる、空のローカルバッファがありません" -#: storage/buffer/localbuf.c:597 +#: storage/buffer/localbuf.c:736 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "並列処理中は一時テーブルにはアクセスできません" -#: storage/buffer/localbuf.c:712 +#: storage/buffer/localbuf.c:876 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "当該セッションで何らかの一時テーブルがアクセスされた後は\"temp_buffers\"を変更できません。" @@ -22157,21 +23029,26 @@ msgstr "ファイルセット\"%1$s\"からの読み込みができませんで msgid "could not read from temporary file: read only %zu of %zu bytes" msgstr "一時ファイルからの読み込み失敗しました: %2$zuバイト中%1$zuバイト分のみ読み込みました" -#: storage/file/buffile.c:774 storage/file/buffile.c:877 +#: storage/file/buffile.c:774 storage/file/buffile.c:875 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "BufFile \"%s\"の一時ファイル\"%s\"のサイズの確認に失敗しました: %m" -#: storage/file/buffile.c:956 +#: storage/file/buffile.c:951 #, c-format 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:969 storage/smgr/md.c:356 storage/smgr/md.c:1318 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "ファイル\"%s\"の切り詰め処理ができませんでした: %m" +#: storage/file/copydir.c:244 storage/file/copydir.c:275 +#, c-format +msgid "could not clone file \"%s\" to \"%s\": %m" +msgstr "ファイル\"%s\"を\"%s\"にクローニングできませんでした: %m" + #: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 #, c-format msgid "could not flush dirty data: %m" @@ -22192,120 +23069,120 @@ msgstr "データの書き出し中にmunmap()に失敗しました: %m" msgid "getrlimit failed: %m" msgstr "getrlimitが失敗しました: %m" -#: storage/file/fd.c:1073 +#: storage/file/fd.c:1074 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "サーバープロセスを起動させるために利用できるファイル記述子が不足しています" -#: storage/file/fd.c:1074 +#: storage/file/fd.c:1075 #, c-format -msgid "System allows %d, server needs at least %d." -msgstr "システムでは%d使用できますが、サーバーでは少なくとも%d必要です。" +msgid "System allows %d, server needs at least %d, %d files are already open." +msgstr "システムでは%d個のファイルを使用できますが、サーバーでは少なくとも%d個必要で、すでに%d個がオープンされています。" -#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 storage/file/fd.c:2878 +#: storage/file/fd.c:1164 storage/file/fd.c:2679 storage/file/fd.c:2788 storage/file/fd.c:2942 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "ファイル記述子が不足しています: %m: 解放後再実行してください" -#: storage/file/fd.c:1536 +#: storage/file/fd.c:1540 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "一時ファイル: パス \"%s\"、サイズ %lu" -#: storage/file/fd.c:1675 +#: storage/file/fd.c:1679 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "一時ディレクトリ\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1682 +#: storage/file/fd.c:1686 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "一時サブディレクトリ\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1879 +#: storage/file/fd.c:1883 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1915 +#: storage/file/fd.c:1919 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"をオープンできませんでした: %m" -#: storage/file/fd.c:1956 +#: storage/file/fd.c:1960 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"を unlink できませんでした: %m" -#: storage/file/fd.c:2044 +#: storage/file/fd.c:2050 #, c-format msgid "could not delete file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: storage/file/fd.c:2234 +#: storage/file/fd.c:2289 #, c-format -msgid "temporary file size exceeds temp_file_limit (%dkB)" -msgstr "一時ファイルのサイズがtemp_file_limit(%d KB)を超えています" +msgid "temporary file size exceeds \"temp_file_limit\" (%dkB)" +msgstr "一時ファイルのサイズが\"temp_file_limit\" (%dkB)を超えています" -#: storage/file/fd.c:2594 storage/file/fd.c:2653 +#: storage/file/fd.c:2655 storage/file/fd.c:2714 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "ファイル\"%2$s\"をオープンしようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:2698 +#: storage/file/fd.c:2759 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "コマンド\"%2$s\"を実行しようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:2854 +#: storage/file/fd.c:2918 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "ディレクトリ\"%2$s\"をオープンしようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:3384 +#: storage/file/fd.c:3449 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "一時ファイル用ディレクトリに想定外のファイルがありました: \"%s\"" -#: storage/file/fd.c:3502 +#: storage/file/fd.c:3567 #, c-format msgid "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" msgstr "データディレクトリを同期しています(syncfs)、経過時間: %ld.%02d秒, 現在のパス: %s" -#: storage/file/fd.c:3729 +#: storage/file/fd.c:3794 #, c-format msgid "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "データディレクトリを同期しています(pre-syncfs)、経過時間: %ld.%02d秒, 現在のパス: %s" -#: storage/file/fd.c:3761 +#: storage/file/fd.c:3826 #, c-format msgid "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "データディレクトリを同期しています(fsync)、経過時間: %ld.%02d秒, 現在のパス: %s" -#: storage/file/fd.c:3950 +#: storage/file/fd.c:4015 #, c-format -msgid "\"debug_io_direct\" is not supported on this platform." -msgstr "このプラットフォームでは\"debug_io_direct\"はサポートされていません。" +msgid "\"%s\" is not supported on this platform." +msgstr "このプラットフォームでは\"%s\"をサポートしていません。" -#: storage/file/fd.c:3964 +#: storage/file/fd.c:4030 #, c-format -msgid "Invalid list syntax in parameter \"%s\"" -msgstr "パラメータ\"%s\"のリスト構文が不正です" +msgid "Invalid list syntax in parameter \"%s\"." +msgstr "パラメータ\"%s\"のリスト構文が不正です。" -#: storage/file/fd.c:3984 +#: storage/file/fd.c:4050 tcop/backend_startup.c:1054 #, c-format -msgid "Invalid option \"%s\"" -msgstr "不正なオプション\"%s\"" +msgid "Invalid option \"%s\"." +msgstr "不正なオプション\"%s\"。" -#: storage/file/fd.c:3997 +#: storage/file/fd.c:4063 #, c-format -msgid "\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" -msgstr "XLOG_BLCKSZが小さすぎるため\"debug_io_direct\"はWALに対してはサポートされません" +msgid "\"%s\" is not supported for WAL because %s is too small." +msgstr "%2$sが小さすぎるため\"%1$s\"はWALに対してはサポートされません。" -#: storage/file/fd.c:4004 +#: storage/file/fd.c:4071 #, c-format -msgid "\"debug_io_direct\" is not supported for data because BLCKSZ is too small" -msgstr "BLCKSZが小さすぎるため\"debug_io_direct\"はデータに対してサポートされません" +msgid "\"%s\" is not supported for data because %s is too small." +msgstr "%2$sが小さすぎるため\"%1$s\"はデータに対してはサポートされません。" #: storage/file/reinit.c:145 #, c-format @@ -22407,36 +23284,46 @@ msgstr "DSMセグメントサイズは0以外の値である必要がありま msgid "requested DSM segment size does not match size of existing segment" msgstr "要求されたDSMセグメントサイズが既存のセグメントのサイズと異なっています" -#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:352 tcop/backend_startup.c:304 +#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:458 tcop/backend_startup.c:343 #, c-format msgid "sorry, too many clients already" msgstr "現在クライアント数が多すぎます" -#: storage/ipc/procarray.c:3845 +#: storage/ipc/procarray.c:3858 #, 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:3894 storage/ipc/procarray.c:3902 storage/ipc/signalfuncs.c:256 storage/ipc/signalfuncs.c:263 storage/ipc/signalfuncs.c:270 #, c-format msgid "permission denied to terminate process" msgstr "プロセスを終了させる権限がありません" -#: storage/ipc/procarray.c:3882 storage/ipc/signalfuncs.c:236 +#: storage/ipc/procarray.c:3895 storage/ipc/signalfuncs.c:257 #, c-format msgid "Only roles with the %s attribute may terminate processes of roles with the %s attribute." msgstr "%s属性を持つロールのみが%s属性を持つロールが接続中のプロセスを終了できます。" -#: storage/ipc/procarray.c:3890 storage/ipc/signalfuncs.c:243 +#: storage/ipc/procarray.c:3903 storage/ipc/signalfuncs.c:271 #, 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 "終了させようとしているプロセスに接続しているロールの権限を持つロール、または\"%sロール権限を持つロールのみがこのプロセスを終了できます。" -#: storage/ipc/procsignal.c:416 +#: storage/ipc/procsignal.c:450 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "PID %dのバックエンドがProcSignalBarrierを受け付けるのを待っています" +#: storage/ipc/procsignal.c:786 +#, c-format +msgid "wrong key in cancel request for process %d" +msgstr "プロセス%dに対するキャンセル要求においてキーが間違っています" + +#: storage/ipc/procsignal.c:795 +#, c-format +msgid "PID %d in cancel request did not match any process" +msgstr "キャンセル要求内のPID %dがどのプロセスにも一致しません" + #: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" @@ -22447,215 +23334,225 @@ msgstr "共有メモリキュー経由で大きさ%zuのメッセージは送信 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:1038 storage/lmgr/lock.c:1076 storage/lmgr/lock.c:2965 storage/lmgr/lock.c:4370 storage/lmgr/lock.c:4435 storage/lmgr/lock.c:4785 storage/lmgr/predicate.c:2478 storage/lmgr/predicate.c:2493 storage/lmgr/predicate.c:3890 storage/lmgr/predicate.c:4937 utils/hash/dynahash.c:1095 #, c-format msgid "out of shared memory" msgstr "共有メモリが足りません" -#: storage/ipc/shmem.c:161 storage/ipc/shmem.c:257 +#: storage/ipc/shmem.c:159 storage/ipc/shmem.c:255 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "共有メモリが足りません (%zu バイト要求しました)" -#: storage/ipc/shmem.c:436 +#: storage/ipc/shmem.c:434 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "データ構造体\"%s\"のためのShmemIndexエントリを作成できませんでした" -#: storage/ipc/shmem.c:451 +#: storage/ipc/shmem.c:449 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "データ構造体\"%s\"のためのShmemIndexエントリのサイズが誤っています: %zuバイトを期待しましたが、実際は%zuバイトでした" -#: storage/ipc/shmem.c:470 +#: storage/ipc/shmem.c:468 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "データ構造体\"%s\"のための共有メモリが不足しています ( %zu バイトが必要)" -#: storage/ipc/shmem.c:502 storage/ipc/shmem.c:521 +#: storage/ipc/shmem.c:500 storage/ipc/shmem.c:519 #, c-format msgid "requested shared memory size overflows size_t" msgstr "要求された共有メモリのサイズはsize_tを超えています" -#: storage/ipc/signalfuncs.c:72 +#: storage/ipc/signalfuncs.c:74 #, c-format 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:123 storage/lmgr/proc.c:1547 utils/adt/mcxtfuncs.c:314 utils/adt/mcxtfuncs.c:412 #, c-format msgid "could not send signal to process %d: %m" msgstr "プロセス%dにシグナルを送信できませんでした: %m" -#: storage/ipc/signalfuncs.c:129 storage/ipc/signalfuncs.c:136 +#: storage/ipc/signalfuncs.c:143 storage/ipc/signalfuncs.c:150 storage/ipc/signalfuncs.c:157 #, c-format msgid "permission denied to cancel query" msgstr "問い合わせをキャンセルする権限がありません" -#: storage/ipc/signalfuncs.c:130 +#: storage/ipc/signalfuncs.c:144 #, c-format msgid "Only roles with the %s attribute may cancel queries of roles with the %s attribute." msgstr "%s属性を持つロールのみが、%s属性を持つロールが実行中の問い合わせをキャンセルできます。" -#: storage/ipc/signalfuncs.c:137 +#: storage/ipc/signalfuncs.c:151 +#, c-format +msgid "Only roles with privileges of the \"%s\" role may cancel autovacuum workers." +msgstr "\"%s\"ロールの権限を持つロールのみが自動VACUUMワーカーのキャンセルを行うことができます。" + +#: storage/ipc/signalfuncs.c:158 #, c-format msgid "Only roles with privileges of the role whose query is being canceled or with privileges of the \"%s\" role may cancel this query." msgstr "キャンセル対象の問い合わせを実行しているロールの権限を持つロール、または\"%s\"ロールの権限を持つロールのみがこの問い合わせをキャンセルできます。" -#: storage/ipc/signalfuncs.c:179 +#: storage/ipc/signalfuncs.c:200 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "PID %dのバックエンドの存在の確認に失敗しました: %m" -#: storage/ipc/signalfuncs.c:197 +#: storage/ipc/signalfuncs.c:218 #, c-format -msgid "backend with PID %d did not terminate within %lld millisecond" -msgid_plural "backend with PID %d did not terminate within %lld milliseconds" -msgstr[0] "PID %dのバックエンドが%lldミリ秒で終了しませんでした" +msgid "backend with PID %d did not terminate within % millisecond" +msgid_plural "backend with PID %d did not terminate within % milliseconds" +msgstr[0] "PID %dのバックエンドが%ミリ秒以内に終了しませんでした" -#: storage/ipc/signalfuncs.c:228 +#: storage/ipc/signalfuncs.c:249 #, c-format msgid "\"timeout\" must not be negative" msgstr "\"timeout\"は負数であってはなりません" -#: storage/ipc/signalfuncs.c:285 +#: storage/ipc/signalfuncs.c:264 +#, c-format +msgid "Only roles with privileges of the \"%s\" role may terminate autovacuum workers." +msgstr "\"%s\"ロールの権限を持つロールのみが自動VACUUMワーカーを終了させることができます。" + +#: storage/ipc/signalfuncs.c:313 #, c-format msgid "rotation not possible because log collection not active" msgstr "ログ収集が活動していませんのでローテーションを行うことができません" -#: storage/ipc/standby.c:329 +#: storage/ipc/standby.c:330 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "リカバリは%ld.%03dミリ秒経過後待機継続中: %s" -#: storage/ipc/standby.c:338 +#: storage/ipc/standby.c:339 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "リカバリは%ld.%03dミリ秒で待機終了: %s" -#: storage/ipc/standby.c:920 tcop/postgres.c:3169 +#: storage/ipc/standby.c:921 tcop/postgres.c:3225 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "リカバリで競合が発生したためステートメントをキャンセルしています" -#: storage/ipc/standby.c:921 tcop/postgres.c:2529 +#: storage/ipc/standby.c:922 tcop/postgres.c:2575 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "リカバリ時にユーザーのトランザクションがバッファのデッドロックを引き起こしました。" -#: storage/ipc/standby.c:1486 +#: storage/ipc/standby.c:1494 msgid "unknown reason" msgstr "不明な理由" -#: storage/ipc/standby.c:1491 +#: storage/ipc/standby.c:1499 msgid "recovery conflict on buffer pin" msgstr "バッファピンによるリカバリ競合" -#: storage/ipc/standby.c:1494 +#: storage/ipc/standby.c:1502 msgid "recovery conflict on lock" msgstr "ロック上のリカバリ衝突" -#: storage/ipc/standby.c:1497 +#: storage/ipc/standby.c:1505 msgid "recovery conflict on tablespace" msgstr "テーブル空間上のリカバリ衝突" -#: storage/ipc/standby.c:1500 +#: storage/ipc/standby.c:1508 msgid "recovery conflict on snapshot" msgstr "スナップショットによるリカバリ競合" -#: storage/ipc/standby.c:1503 +#: storage/ipc/standby.c:1511 msgid "recovery conflict on replication slot" msgstr "レプリケーションスロットに対するリカバリ競合" -#: storage/ipc/standby.c:1506 +#: storage/ipc/standby.c:1514 msgid "recovery conflict on buffer deadlock" msgstr "バッファのデッドロックによるリカバリ競合" -#: storage/ipc/standby.c:1509 +#: storage/ipc/standby.c:1517 msgid "recovery conflict on database" msgstr "データベース上のリカバリ衝突" -#: storage/large_object/inv_api.c:190 +#: storage/large_object/inv_api.c:152 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "OID%u、ページ%dに対応するpg_largeobjectのエントリのデータフィールドの大きさ%dは不正です" -#: storage/large_object/inv_api.c:272 +#: storage/large_object/inv_api.c:234 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "ラージオブジェクトを開くためのフラグが不正です: %d" -#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 storage/large_object/inv_api.c:807 +#: storage/large_object/inv_api.c:259 storage/large_object/inv_api.c:271 storage/large_object/inv_api.c:468 storage/large_object/inv_api.c:579 storage/large_object/inv_api.c:769 #, c-format msgid "permission denied for large object %u" msgstr "ラージオブジェクト %u に対する権限がありません" -#: storage/large_object/inv_api.c:455 +#: storage/large_object/inv_api.c:417 #, c-format msgid "invalid whence setting: %d" msgstr "不正なwhence設定: %d" -#: storage/large_object/inv_api.c:627 +#: storage/large_object/inv_api.c:589 #, c-format msgid "invalid large object write request size: %d" msgstr "ラージオブジェクトの書き出し要求サイズが不正です: %d" -#: storage/lmgr/deadlock.c:1104 +#: storage/lmgr/deadlock.c:1107 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "プロセス %d は %s を %s で待機していましたが、プロセス %d でブロックされました" -#: storage/lmgr/deadlock.c:1123 +#: storage/lmgr/deadlock.c:1126 #, c-format msgid "Process %d: %s" msgstr "プロセス %d: %s" -#: storage/lmgr/deadlock.c:1132 +#: storage/lmgr/deadlock.c:1135 #, c-format msgid "deadlock detected" msgstr "デッドロックを検出しました" -#: storage/lmgr/deadlock.c:1135 +#: storage/lmgr/deadlock.c:1138 #, c-format msgid "See server log for query details." msgstr "問い合わせの詳細はサーバーログを参照してください" -#: storage/lmgr/lmgr.c:858 +#: storage/lmgr/lmgr.c:856 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の更新中" -#: storage/lmgr/lmgr.c:861 +#: storage/lmgr/lmgr.c:859 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の削除中" -#: storage/lmgr/lmgr.c:864 +#: storage/lmgr/lmgr.c:862 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)のロック中" -#: storage/lmgr/lmgr.c:867 +#: storage/lmgr/lmgr.c:865 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプルの更新後バージョン(%1$u,%2$u)のロック中" -#: storage/lmgr/lmgr.c:870 +#: storage/lmgr/lmgr.c:868 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のインデックスタプル(%1$u,%2$u)の挿入中" -#: storage/lmgr/lmgr.c:873 +#: storage/lmgr/lmgr.c:871 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の一意性の確認中" -#: storage/lmgr/lmgr.c:876 +#: storage/lmgr/lmgr.c:874 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"の更新されたタプル(%1$u,%2$u)の再チェック中" -#: storage/lmgr/lmgr.c:879 +#: storage/lmgr/lmgr.c:877 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)に対する排除制約のチェック中" @@ -22725,17 +23622,22 @@ msgstr "データベース%3$uのサブスクリプション%2$uのリモート msgid "unrecognized locktag type %d" msgstr "ロックタグタイプ%dは不明です" -#: storage/lmgr/lock.c:790 +#: storage/lmgr/lock.c:866 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "リカバリの実行中はデータベースオブジェクトでロックモード %s を獲得できません" -#: storage/lmgr/lock.c:792 +#: storage/lmgr/lock.c:868 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "リカバリの実行中は、データベースオブジェクトで RowExclusiveLock もしくはそれ以下だけが獲得できます" -#: storage/lmgr/lock.c:3252 storage/lmgr/lock.c:3320 storage/lmgr/lock.c:3436 +#: storage/lmgr/lock.c:1182 +#, c-format +msgid "process %d could not obtain %s on %s" +msgstr "プロセス%1$dは、%3$sの%2$sを取得できませんでした" + +#: storage/lmgr/lock.c:3423 storage/lmgr/lock.c:3491 storage/lmgr/lock.c:3607 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "同一オブジェクト上にセッションレベルとトランザクションレベルのロックの両方を保持している時にPREPAREすることはできません" @@ -22755,485 +23657,535 @@ msgstr "トランザクションの同時実行数を減らすか\"max_connectio msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "RWConflictPoolに読み書き競合の可能性を記録するための要素が不足しています" -#: storage/lmgr/predicate.c:1681 +#: storage/lmgr/predicate.c:1696 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "\"default_transaction_isolation\"が\"serializable\"に設定されました。" -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1697 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "このデフォルトを変更するためには\"SET default_transaction_isolation = 'repeatable read'\"を使用することができます。" -#: storage/lmgr/predicate.c:1733 +#: storage/lmgr/predicate.c:1748 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "スナップショットをインポートするトランザクションはREAD ONLY DEFERRABLEではいけません" -#: storage/lmgr/predicate.c:1812 utils/time/snapmgr.c:535 utils/time/snapmgr.c:541 +#: storage/lmgr/predicate.c:1827 utils/time/snapmgr.c:556 utils/time/snapmgr.c:562 #, c-format msgid "could not import the requested snapshot" msgstr "要求したスナップショットをインポートできませんでした" -#: storage/lmgr/predicate.c:1813 utils/time/snapmgr.c:542 +#: storage/lmgr/predicate.c:1828 utils/time/snapmgr.c:563 #, 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:4001 storage/lmgr/predicate.c:4037 storage/lmgr/predicate.c:4070 storage/lmgr/predicate.c:4078 storage/lmgr/predicate.c:4117 storage/lmgr/predicate.c:4347 storage/lmgr/predicate.c:4666 storage/lmgr/predicate.c:4678 storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4761 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "トランザクション間で read/write の依存性があったため、アクセスの直列化ができませんでした" -#: 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:4003 storage/lmgr/predicate.c:4039 storage/lmgr/predicate.c:4072 storage/lmgr/predicate.c:4080 storage/lmgr/predicate.c:4119 storage/lmgr/predicate.c:4349 storage/lmgr/predicate.c:4668 storage/lmgr/predicate.c:4680 storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4763 #, c-format msgid "The transaction might succeed if retried." msgstr "リトライが行われた場合、このトランザクションは成功するかもしれません" -#: storage/lmgr/proc.c:348 +#: storage/lmgr/proc.c:454 #, c-format msgid "number of requested standby connections exceeds \"max_wal_senders\" (currently %d)" msgstr "要求されたスタンバイ接続が\"max_wal_senders を超えています\" (現在は %d)" -#: storage/lmgr/proc.c:1541 +#: storage/lmgr/proc.c:1592 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "プロセス%1$dは、%4$ld.%5$03d ms後にキューの順番を再調整することで、%3$s上の%2$sに対するデッドロックを防ぎました。" -#: storage/lmgr/proc.c:1556 +#: storage/lmgr/proc.c:1607 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "プロセス%1$dは、%3$s上の%2$sに対し%4$ld.%5$03d ms待機するデッドロックを検知しました" -#: storage/lmgr/proc.c:1565 +#: storage/lmgr/proc.c:1616 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "プロセス%dは%sを%sで待機しています。%ld.%03dミリ秒後" -#: storage/lmgr/proc.c:1572 +#: storage/lmgr/proc.c:1623 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "プロセス%1$dは%4$ld.%5$03d ms後に%3$s上の%2$sを獲得しました" -#: storage/lmgr/proc.c:1589 +#: storage/lmgr/proc.c:1640 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "プロセス%1$dは%4$ld.%5$03d ms後に%3$s上で%2$sを獲得することに失敗しました" -#: storage/page/bufpage.c:152 +#: storage/page/bufpage.c:154 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "ページ検証が失敗しました。計算されたチェックサムは%uですが想定は%uです" -#: storage/page/bufpage.c:217 storage/page/bufpage.c:730 storage/page/bufpage.c:1073 storage/page/bufpage.c:1208 storage/page/bufpage.c:1314 storage/page/bufpage.c:1426 +#: storage/page/bufpage.c:216 storage/page/bufpage.c:729 storage/page/bufpage.c:1072 storage/page/bufpage.c:1207 storage/page/bufpage.c:1313 storage/page/bufpage.c:1425 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "ページポインタが破損しています: lower = %u, upper = %u, special = %u\"" -#: storage/page/bufpage.c:759 +#: storage/page/bufpage.c:758 #, c-format msgid "corrupted line pointer: %u" msgstr "ラインポインタが破損しています: %u" -#: storage/page/bufpage.c:789 storage/page/bufpage.c:1266 +#: storage/page/bufpage.c:788 storage/page/bufpage.c:1265 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "アイテム長が破損しています: 合計 %u 利用可能空間 %u" -#: storage/page/bufpage.c:1092 storage/page/bufpage.c:1233 storage/page/bufpage.c:1330 storage/page/bufpage.c:1442 +#: storage/page/bufpage.c:1091 storage/page/bufpage.c:1232 storage/page/bufpage.c:1329 storage/page/bufpage.c:1441 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "ラインポインタが破損しています: オフセット = %u サイズ = %u" -#: storage/smgr/md.c:485 storage/smgr/md.c:547 +#: storage/smgr/md.c:502 storage/smgr/md.c:564 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "ファイル\"%s\"を%uブロック以上に拡張できません" -#: storage/smgr/md.c:500 storage/smgr/md.c:611 +#: storage/smgr/md.c:517 storage/smgr/md.c:628 #, c-format msgid "could not extend file \"%s\": %m" msgstr "ファイル\"%s\"を拡張できませんでした: %m" -#: storage/smgr/md.c:506 +#: storage/smgr/md.c:523 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "ファイル\"%1$s\"を拡張できませんでした: %4$uブロックで%3$dバイト中%2$dバイト分のみを書き出しました。" -#: storage/smgr/md.c:589 +#: storage/smgr/md.c:606 #, c-format msgid "could not extend file \"%s\" with FileFallocate(): %m" msgstr "ファイル\"%s\"をFileFallocate()で拡張できませんでした: %m" -#: storage/smgr/md.c:869 +#: storage/smgr/md.c:899 storage/smgr/md.c:2047 #, c-format msgid "could not read blocks %u..%u in file \"%s\": %m" msgstr "ファイル\"%3$s\"でブロック範囲 %1$u...%2$u を読み取れませんでした: %3$m" -#: storage/smgr/md.c:895 +#: storage/smgr/md.c:946 storage/smgr/md.c:2060 #, c-format msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" msgstr "ファイル\"%3$s\"でブロック範囲 %1$u...%2$u を読み取れませんでした: %5$zuバイト中%4$zuバイト分のみ読み込みました" -#: storage/smgr/md.c:995 +#: storage/smgr/md.c:1023 +#, c-format +msgid "could not start reading blocks %u..%u in file \"%s\": %m" +msgstr "ファイル\"%3$s\"のブロック範囲 %1$u...%2$u の読み取りを開始できませんでした: %m" + +#: storage/smgr/md.c:1119 #, c-format msgid "could not write blocks %u..%u in file \"%s\": %m" msgstr "ファイル\"%3$s\"でブロック範囲 %1$u...%2$u を書き込めませんでした: %3$m" -#: storage/smgr/md.c:1163 +#: storage/smgr/md.c:1289 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: 現在は%uブロックのみとなりました" -#: storage/smgr/md.c:1218 +#: storage/smgr/md.c:1344 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: %m" -#: storage/smgr/md.c:1688 +#: storage/smgr/md.c:1832 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "ファイル\"%s\"(対象ブロック%u)をオープンできませんでした: 直前のセグメントは%uブロックだけでした" -#: storage/smgr/md.c:1702 +#: storage/smgr/md.c:1846 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "ファイル \"%s\"(対象ブロック %u)をオープンできませんでした: %m" -#: tcop/backend_startup.c:85 +#: storage/smgr/smgr.c:1106 #, c-format -msgid "SSL configuration could not be loaded in child process" -msgstr "SSL構成は子プロセスでは読み込めません" +msgid "file \"%s\"" +msgstr "ファイル\"%s\"" -#: tcop/backend_startup.c:208 +#: storage/smgr/smgr.c:1108 #, c-format -msgid "connection received: host=%s port=%s" -msgstr "接続を受け付けました: ホスト=%s ポート番号=%s" +msgid "block %u in file \"%s\"" +msgstr "ファイル\"%2$s\"のブロック%1$u" -#: tcop/backend_startup.c:213 +#: storage/smgr/smgr.c:1112 +#, c-format +msgid "blocks %u..%u in file \"%s\"" +msgstr "ファイル\"%3$s\"でブロック範囲 %1$u...%2$u" + +#: tcop/backend_startup.c:104 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "SSL構成は子プロセスでは読み込めません" + +#: tcop/backend_startup.c:226 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "接続を受け付けました: ホスト=%s ポート番号=%s" + +#: tcop/backend_startup.c:231 #, c-format msgid "connection received: host=%s" msgstr "接続を受け付けました: ホスト=%s" -#: tcop/backend_startup.c:277 +#: tcop/backend_startup.c:309 #, c-format msgid "the database system is starting up" msgstr "データベースシステムは起動処理中です" -#: tcop/backend_startup.c:283 +#: tcop/backend_startup.c:315 +#, c-format +msgid "the database system is not accepting connections" +msgstr "データベースシステムは接続を受け付けていません" + +#: tcop/backend_startup.c:316 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "ホットスタンバイモードは無効です。" + +#: tcop/backend_startup.c:320 tcop/backend_startup.c:327 #, c-format msgid "the database system is not yet accepting connections" msgstr "データベースシステムはまだ接続を受け付けていません" -#: tcop/backend_startup.c:284 +#: tcop/backend_startup.c:321 #, c-format -msgid "Consistent recovery state has not been yet reached." -msgstr "リカバリの一貫性はまだ確保されていません。" +msgid "Recovery snapshot is not yet ready for hot standby." +msgstr "リカバリースナップショットはホットスタンバイではまだ使用できません。" -#: tcop/backend_startup.c:288 +#: tcop/backend_startup.c:322 #, c-format -msgid "the database system is not accepting connections" -msgstr "データベースシステムは接続を受け付けていません" +msgid "To enable hot standby, close write transactions with more than %d subtransactions on the primary server." +msgstr "ホットスタンバイを有効にするため、プライマリサーバー上で%d以上のサブトランザクションを持つ書き込みトランザクションを終了させてください。" -#: tcop/backend_startup.c:289 +#: tcop/backend_startup.c:328 #, c-format -msgid "Hot standby mode is disabled." -msgstr "ホットスタンバイモードは無効です。" +msgid "Consistent recovery state has not been yet reached." +msgstr "リカバリの一貫性はまだ確保されていません。" -#: tcop/backend_startup.c:294 +#: tcop/backend_startup.c:333 #, c-format msgid "the database system is shutting down" msgstr "データベースシステムはシャットダウンしています" -#: tcop/backend_startup.c:299 +#: tcop/backend_startup.c:338 #, c-format msgid "the database system is in recovery mode" msgstr "データベースシステムはリカバリモードです" -#: tcop/backend_startup.c:414 +#: tcop/backend_startup.c:453 #, c-format msgid "received direct SSL connection request without ALPN protocol negotiation extension" msgstr "ALPNプロトコルネゴシエーション拡張を持たない直接SSL接続要求を受信しました" -#: tcop/backend_startup.c:420 +#: tcop/backend_startup.c:459 #, c-format msgid "direct SSL connection accepted" msgstr "直接SSL接続を受け付けられました" -#: tcop/backend_startup.c:430 +#: tcop/backend_startup.c:469 #, c-format msgid "direct SSL connection rejected" msgstr "直接SSL接続が拒否されました" -#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 +#: tcop/backend_startup.c:528 tcop/backend_startup.c:556 #, c-format msgid "incomplete startup packet" msgstr "開始パケットが不完全です" -#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 +#: tcop/backend_startup.c:540 #, c-format msgid "invalid length of startup packet" msgstr "不正な開始パケット長" -#: tcop/backend_startup.c:573 +#: tcop/backend_startup.c:597 #, c-format msgid "SSLRequest accepted" msgstr "SSLRequestを受け付けました" -#: tcop/backend_startup.c:576 +#: tcop/backend_startup.c:600 #, c-format msgid "SSLRequest rejected" msgstr "SSLRequestを拒否しました" -#: tcop/backend_startup.c:585 +#: tcop/backend_startup.c:609 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "SSLネゴシエーション応答の送信に失敗しました: %m" -#: tcop/backend_startup.c:603 +#: tcop/backend_startup.c:627 #, c-format msgid "received unencrypted data after SSL request" msgstr "SSL要求の後に非暗号化データを受信しました" -#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 +#: tcop/backend_startup.c:628 tcop/backend_startup.c:682 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "これはクライアントソフトウェアのバグであるか、man-in-the-middle攻撃の証左である可能性があります。" -#: tcop/backend_startup.c:627 +#: tcop/backend_startup.c:651 #, c-format msgid "GSSENCRequest accepted" msgstr "GSSENCRequestを受け付けました" -#: tcop/backend_startup.c:630 +#: tcop/backend_startup.c:654 #, c-format msgid "GSSENCRequest rejected" msgstr "GSSENCRequestを拒否しました" -#: tcop/backend_startup.c:639 +#: tcop/backend_startup.c:663 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "GSSAPIネゴシエーション応答の送信に失敗しました: %m" -#: tcop/backend_startup.c:657 +#: tcop/backend_startup.c:681 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "GSSAPI暗号化リクエストの後に非暗号化データを受信" -#: tcop/backend_startup.c:681 +#: tcop/backend_startup.c:709 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "フロントエンドプロトコル%u.%uをサポートしていません: サーバーは%u.0から %u.%uまでをサポートします" -#: tcop/backend_startup.c:744 +#: tcop/backend_startup.c:772 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "有効な値: \"false\", 0, \"true\", 1, \"database\"。" -#: tcop/backend_startup.c:785 +#: tcop/backend_startup.c:813 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "開始パケットの配置が不正です: 最終バイトはターミネータであるはずです" -#: tcop/backend_startup.c:802 +#: tcop/backend_startup.c:830 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "開始パケットで指定されたPostgreSQLユーザー名は存在しません" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 +#: tcop/backend_startup.c:884 +#, c-format +msgid "invalid length of query cancel packet" +msgstr "不正なキャンセルパケット長" + +#: tcop/backend_startup.c:892 +#, c-format +msgid "invalid length of query cancel key" +msgstr "不正なキャンセルパケットキー長" + +#: tcop/backend_startup.c:1022 +#, c-format +msgid "Cannot specify log_connections option \"%s\" in a list with other options." +msgstr "log_connectionsオプション\"%s\"は、リスト内で他のオプションと同時に指定できません。" + +#: tcop/backend_startup.c:1080 +#, c-format +msgid "Invalid list syntax in parameter \"log_connections\"." +msgstr "パラメータ\"log_connections\"のリスト構文が不正です。" + +#: tcop/fastpath.c:141 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "OID %uの関数は存在しません" -#: tcop/fastpath.c:149 +#: tcop/fastpath.c:148 #, c-format msgid "cannot call function \"%s\" via fastpath interface" msgstr "関数\"%s\"は高速呼び出しインタフェースでの呼び出しはできません" -#: tcop/fastpath.c:234 +#: tcop/fastpath.c:233 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "近道関数呼び出し: \"%s\"(OID %u))" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 tcop/postgres.c:2055 tcop/postgres.c:2305 +#: tcop/fastpath.c:312 tcop/postgres.c:1364 tcop/postgres.c:1600 tcop/postgres.c:2079 tcop/postgres.c:2351 #, c-format msgid "duration: %s ms" msgstr "期間: %s ミリ秒" -#: tcop/fastpath.c:317 +#: tcop/fastpath.c:316 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "期間: %sミリ秒 ファストパス関数呼び出し: \"%s\" (OID %u)" -#: tcop/fastpath.c:353 +#: tcop/fastpath.c:352 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "関数呼び出しメッセージには%d引数ありましたが、関数には%d必要です" -#: tcop/fastpath.c:361 +#: tcop/fastpath.c:360 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "関数呼び出しメッセージには%dの引数書式がありましたが、引数は%dでした" -#: tcop/fastpath.c:385 +#: tcop/fastpath.c:384 #, c-format msgid "invalid argument size %d in function call message" msgstr "関数呼び出しメッセージ内の引数サイズ%dが不正です" -#: tcop/fastpath.c:448 +#: tcop/fastpath.c:447 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "関数引数%dのバイナリデータ書式が不正です" -#: tcop/postgres.c:463 tcop/postgres.c:4925 +#: tcop/postgres.c:455 tcop/postgres.c:5023 #, c-format msgid "invalid frontend message type %d" msgstr "フロントエンドメッセージタイプ%dが不正です" -#: tcop/postgres.c:1072 +#: tcop/postgres.c:1070 #, c-format msgid "statement: %s" msgstr "文: %s" -#: tcop/postgres.c:1370 +#: tcop/postgres.c:1369 #, c-format msgid "duration: %s ms statement: %s" msgstr "期間: %s ミリ秒 文: %s" -#: tcop/postgres.c:1476 +#: tcop/postgres.c:1475 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "準備された文に複数のコマンドを挿入できません" -#: tcop/postgres.c:1606 +#: tcop/postgres.c:1605 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "期間: %s ミリ秒 パース%s : %s" -#: tcop/postgres.c:1672 tcop/postgres.c:2625 +#: tcop/postgres.c:1672 tcop/postgres.c:2671 #, c-format msgid "unnamed prepared statement does not exist" msgstr "無名の準備された文が存在しません" -#: tcop/postgres.c:1713 +#: tcop/postgres.c:1724 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "バインドメッセージは%dパラメータ書式ありましたがパラメータは%dでした" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1730 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "バインドメッセージは%dパラメータを提供しましたが、準備された文\"%s\"では%d必要でした" -#: tcop/postgres.c:1933 +#: tcop/postgres.c:1944 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "バインドパラメータ%dにおいてバイナリデータ書式が不正です" -#: tcop/postgres.c:2060 +#: tcop/postgres.c:2084 #, 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:2139 tcop/postgres.c:2753 #, c-format msgid "portal \"%s\" does not exist" msgstr "ポータル\"%s\"は存在しません" -#: tcop/postgres.c:2185 +#: tcop/postgres.c:2232 #, 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:2234 tcop/postgres.c:2359 msgid "execute fetch from" msgstr "取り出し実行" -#: tcop/postgres.c:2188 tcop/postgres.c:2314 +#: tcop/postgres.c:2235 tcop/postgres.c:2360 msgid "execute" msgstr "実行" -#: tcop/postgres.c:2310 +#: tcop/postgres.c:2356 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "期間: %s ミリ秒 %s %s%s%s: %s" -#: tcop/postgres.c:2458 +#: tcop/postgres.c:2504 #, c-format msgid "prepare: %s" msgstr "準備: %s" -#: tcop/postgres.c:2483 +#: tcop/postgres.c:2529 #, c-format msgid "Parameters: %s" msgstr "パラメータ: %s" -#: tcop/postgres.c:2498 +#: tcop/postgres.c:2544 #, c-format msgid "Abort reason: recovery conflict" msgstr "異常終了の理由: リカバリ衝突" -#: tcop/postgres.c:2514 +#: tcop/postgres.c:2560 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "ユーザーが共有バッファ・ピンを長く保持し過ぎていました" -#: tcop/postgres.c:2517 +#: tcop/postgres.c:2563 #, c-format msgid "User was holding a relation lock for too long." msgstr "ユーザーリレーションのロックを長く保持し過ぎていました" -#: tcop/postgres.c:2520 +#: tcop/postgres.c:2566 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "削除されるべきテーブルスペースをユーザーが使っていました(もしくはその可能性がありました)。" -#: tcop/postgres.c:2523 +#: tcop/postgres.c:2569 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "削除されるべきバージョンの行をユーザー問い合わせが参照しなければならなかった可能性がありました。" -#: tcop/postgres.c:2526 +#: tcop/postgres.c:2572 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "無効化されるべき論理レプリケーションスロットをユーザーが使用していました。" -#: tcop/postgres.c:2532 +#: tcop/postgres.c:2578 #, c-format msgid "User was connected to a database that must be dropped." msgstr "削除されるべきデータベースにユーザーが接続していました。" -#: tcop/postgres.c:2571 +#: tcop/postgres.c:2617 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "ポータル\"%s\" パラメータ$%d = %s" -#: tcop/postgres.c:2574 +#: tcop/postgres.c:2620 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "ポータル\"%s\" パラメータ $%d" -#: tcop/postgres.c:2580 +#: tcop/postgres.c:2626 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "無名ポータルパラメータ $%d = %s" -#: tcop/postgres.c:2583 +#: tcop/postgres.c:2629 #, c-format msgid "unnamed portal parameter $%d" msgstr "無名ポータルパラメータ $%d" -#: tcop/postgres.c:2928 +#: tcop/postgres.c:2984 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "予期しないSIGQUITシグナルによりコネクションを終了します" -#: tcop/postgres.c:2934 +#: tcop/postgres.c:2990 #, c-format msgid "terminating connection because of crash of another server process" msgstr "他のサーバープロセスがクラッシュしたため接続を終了します" -#: tcop/postgres.c:2935 +#: tcop/postgres.c:2991 #, 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 "" @@ -23241,182 +24193,177 @@ msgstr "" "postmasterはこのサーバープロセスに対し、現在のトランザクションをロールバック\n" "し終了するよう指示しました。" -#: tcop/postgres.c:2939 tcop/postgres.c:3192 +#: tcop/postgres.c:2995 tcop/postgres.c:3248 #, 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:3002 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "即時シャットダウンコマンドによりコネクションを終了します" -#: tcop/postgres.c:3024 +#: tcop/postgres.c:3080 #, c-format msgid "floating-point exception" msgstr "浮動小数点例外" -#: tcop/postgres.c:3025 +#: tcop/postgres.c:3081 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "不正な浮動小数点演算がシグナルされました。おそらくこれは、範囲外の結果もしくは0除算のような不正な演算によるものです。" -#: tcop/postgres.c:3190 +#: tcop/postgres.c:3246 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "リカバリで競合が発生したため、接続を終了しています" -#: tcop/postgres.c:3262 +#: tcop/postgres.c:3318 #, c-format msgid "canceling authentication due to timeout" msgstr "タイムアウトにより認証処理をキャンセルしています" -#: tcop/postgres.c:3266 +#: tcop/postgres.c:3322 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "管理者コマンドにより自動VACUUM処理を終了しています" -#: tcop/postgres.c:3270 +#: tcop/postgres.c:3326 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "管理者コマンドにより、論理レプリケーションワーカーを終了します" -#: tcop/postgres.c:3290 +#: tcop/postgres.c:3341 +#, c-format +msgid "terminating walreceiver process due to administrator command" +msgstr "管理者コマンドにより WAL 受信プロセスを終了しています" + +#: tcop/postgres.c:3357 #, c-format msgid "terminating connection due to administrator command" msgstr "管理者コマンドにより接続を終了しています" -#: tcop/postgres.c:3321 +#: tcop/postgres.c:3388 #, c-format msgid "connection to client lost" msgstr "クライアントへの接続が切れました。" -#: tcop/postgres.c:3373 +#: tcop/postgres.c:3440 #, c-format msgid "canceling statement due to lock timeout" msgstr "ロックのタイムアウトのためステートメントをキャンセルしています" -#: tcop/postgres.c:3380 +#: tcop/postgres.c:3447 #, c-format msgid "canceling statement due to statement timeout" msgstr "ステートメントのタイムアウトのためステートメントをキャンセルしています" -#: tcop/postgres.c:3387 +#: tcop/postgres.c:3454 #, c-format msgid "canceling autovacuum task" msgstr "自動VACUUM処理をキャンセルしています" -#: tcop/postgres.c:3400 +#: tcop/postgres.c:3467 #, c-format msgid "canceling statement due to user request" msgstr "ユーザーからの要求により文をキャンセルしています" -#: tcop/postgres.c:3421 +#: tcop/postgres.c:3488 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "トランザクション中アイドルタイムアウトのため接続を終了します" -#: tcop/postgres.c:3434 +#: tcop/postgres.c:3501 #, c-format msgid "terminating connection due to transaction timeout" msgstr "トランザクションタイムアウトのため接続を終了します" -#: tcop/postgres.c:3447 +#: tcop/postgres.c:3514 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "アイドルセッションタイムアウトにより接続を終了します" -#: tcop/postgres.c:3537 -#, c-format -msgid "stack depth limit exceeded" -msgstr "スタック長制限を越えました" - -#: tcop/postgres.c:3538 -#, c-format -msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." -msgstr "プラットフォームのスタック長制限が適切であることを確認した後に、設定パラメータ\"max_stack_depth\" (現在 %dkB)を増やしてください。" - -#: tcop/postgres.c:3585 -#, c-format -msgid "\"max_stack_depth\" must not exceed %ldkB." -msgstr "\"max_stack_depth\"は%ldkBを越えてはなりません。" - -#: tcop/postgres.c:3587 -#, c-format -msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." -msgstr "プラットフォームのスタック長制限を\"ulimit -s\"または同等の機能を使用して増加してください" - -#: tcop/postgres.c:3610 +#: tcop/postgres.c:3553 #, 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:3574 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "\"log_statement_stats\"が真の場合、パラメータを有効にできません" -#: tcop/postgres.c:3646 +#: tcop/postgres.c:3589 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "\"log_parser_stats\"、\"log_planner_stats\"、または\"log_executor_stats\"のいずれかがtrueの場合は\"log_statement_stats\"を有効にできません。" -#: tcop/postgres.c:4011 +#: tcop/postgres.c:4029 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "サーバープロセスに対する不正なコマンドライン引数: %s" -#: tcop/postgres.c:4012 tcop/postgres.c:4018 +#: tcop/postgres.c:4030 tcop/postgres.c:4036 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: tcop/postgres.c:4016 +#: tcop/postgres.c:4034 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: 不正なコマンドライン引数: %s" -#: tcop/postgres.c:4069 +#: tcop/postgres.c:4087 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: データベース名もユーザー名も指定されていません" -#: tcop/postgres.c:4822 +#: tcop/postgres.c:4280 +#, c-format +msgid "could not generate random cancel key" +msgstr "ランダムなキャンセルキーを生成できませんでした" + +#: tcop/postgres.c:4682 +#, c-format +msgid "connection ready: setup total=%.3f ms, fork=%.3f ms, authentication=%.3f ms" +msgstr "接続完了: 所要時間=%.3fミリ秒、fork=%.3fミリ秒、認証処理=%.3fミリ秒" + +#: tcop/postgres.c:4913 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "不正なCLOSEメッセージのサブタイプ%d" -#: tcop/postgres.c:4859 +#: tcop/postgres.c:4950 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "不正なDESCRIBEメッセージのサブタイプ%d" -#: tcop/postgres.c:4946 +#: tcop/postgres.c:5044 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "レプリケーション接続では高速関数呼び出しはサポートされていません" -#: tcop/postgres.c:4950 +#: tcop/postgres.c:5048 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "レプリケーション接続では拡張問い合わせプロトコルはサポートされていません" -#: tcop/postgres.c:5130 +#: tcop/postgres.c:5194 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "接続を切断: セッション時間: %d:%02d:%02d.%03d ユーザー=%s データベース=%s ホスト=%s%s%s" -#: tcop/pquery.c:641 +#: tcop/pquery.c:674 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "バインドメッセージは%dの結果書式がありましたが、問い合わせは%d列でした" -#: tcop/pquery.c:944 tcop/pquery.c:1701 +#: tcop/pquery.c:972 tcop/pquery.c:1734 #, c-format msgid "cursor can only scan forward" msgstr "カーゾルは前方へのスキャンしかできません" -#: tcop/pquery.c:945 tcop/pquery.c:1702 +#: tcop/pquery.c:973 tcop/pquery.c:1735 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "後方スキャンを有効にするためにはSCROLLオプションを付けて宣言してください。" @@ -23446,68 +24393,68 @@ msgid "cannot execute %s within security-restricted operation" msgstr "セキュリティー制限操作の中では %s を実行できません" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:821 +#: tcop/utility.c:824 #, c-format msgid "cannot execute %s within a background process" msgstr "バックグラウンドプロセス内で%sを実行することはできません" #. translator: %s is name of a SQL command, eg CHECKPOINT -#: tcop/utility.c:947 +#: tcop/utility.c:950 #, c-format msgid "permission denied to execute %s command" msgstr "%sコマンドを実行する権限がありません" -#: tcop/utility.c:949 +#: tcop/utility.c:952 #, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." msgstr "\"%s\"ロールの権限を持つロールのみがこのコマンドを実行できます。" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:616 +#: tsearch/dict_ispell.c:53 tsearch/dict_thesaurus.c:616 #, c-format msgid "multiple DictFile parameters" msgstr "重複するDictFileパラメータ" -#: tsearch/dict_ispell.c:63 +#: tsearch/dict_ispell.c:64 #, c-format msgid "multiple AffFile parameters" msgstr "重複するAffFileパラメータ" -#: tsearch/dict_ispell.c:82 +#: tsearch/dict_ispell.c:83 #, c-format msgid "unrecognized Ispell parameter: \"%s\"" msgstr "認識不可のIspellパラメータ: \"%s\"" -#: tsearch/dict_ispell.c:96 +#: tsearch/dict_ispell.c:97 #, c-format msgid "missing AffFile parameter" msgstr "AffFileパラメータがありません" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:640 +#: tsearch/dict_ispell.c:103 tsearch/dict_thesaurus.c:640 #, c-format msgid "missing DictFile parameter" msgstr "DictFileパラメータがありません" -#: tsearch/dict_simple.c:58 +#: tsearch/dict_simple.c:59 #, c-format msgid "multiple Accept parameters" msgstr "重複するAcceptパラメータ" -#: tsearch/dict_simple.c:66 +#: tsearch/dict_simple.c:67 #, c-format msgid "unrecognized simple dictionary parameter: \"%s\"" msgstr "認識できない単純辞書パラメータ: \"%s\"" -#: tsearch/dict_synonym.c:118 +#: tsearch/dict_synonym.c:120 #, c-format msgid "unrecognized synonym parameter: \"%s\"" msgstr "認識できない類義語パラメータ: \"%s\"" -#: tsearch/dict_synonym.c:125 +#: tsearch/dict_synonym.c:127 #, c-format msgid "missing Synonyms parameter" msgstr "類義語パラメータがありません" -#: tsearch/dict_synonym.c:132 +#: tsearch/dict_synonym.c:134 #, c-format msgid "could not open synonym file \"%s\": %m" msgstr "類義語ファイル\"%s\"をオープンできませんでした: %m" @@ -23582,76 +24529,71 @@ msgstr "認識できないシソーラスパラメータ \"%s\"" msgid "missing Dictionary parameter" msgstr "Dictionaryパラメータがありません" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 tsearch/spell.c:1043 +#: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 tsearch/spell.c:1046 #, c-format msgid "invalid affix flag \"%s\"" msgstr "不正な接辞フラグ\"%s\"" -#: tsearch/spell.c:385 tsearch/spell.c:1047 +#: tsearch/spell.c:387 tsearch/spell.c:1050 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "接辞フラグ\"%s\"は範囲外です" -#: tsearch/spell.c:415 +#: tsearch/spell.c:417 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "接辞フラグ中の不正な文字\"%s\"" -#: tsearch/spell.c:435 +#: tsearch/spell.c:437 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "\"long\"フラグ値を伴った不正な接辞フラグ\"%s\"" -#: tsearch/spell.c:525 +#: tsearch/spell.c:527 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "辞書ファイル\"%s\"をオープンできませんでした: %m" -#: tsearch/spell.c:1170 tsearch/spell.c:1182 tsearch/spell.c:1742 tsearch/spell.c:1747 tsearch/spell.c:1752 +#: tsearch/spell.c:1174 tsearch/spell.c:1186 tsearch/spell.c:1751 tsearch/spell.c:1756 tsearch/spell.c:1761 #, c-format msgid "invalid affix alias \"%s\"" msgstr "不正な接辞の別名 \"%s\"" -#: tsearch/spell.c:1223 tsearch/spell.c:1294 tsearch/spell.c:1443 +#: tsearch/spell.c:1227 tsearch/spell.c:1298 tsearch/spell.c:1447 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "affixファイル\"%s\"をオープンできませんでした: %m" -#: tsearch/spell.c:1277 +#: tsearch/spell.c:1281 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell辞書はフラグ値\"default\"、\"long\"および\"num\"のみをサポートします" -#: tsearch/spell.c:1321 +#: tsearch/spell.c:1325 #, c-format msgid "invalid number of flag vector aliases" msgstr "不正な数のフラグベクタの別名" -#: tsearch/spell.c:1344 +#: tsearch/spell.c:1348 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "別名の数が指定された数 %d を超えています" -#: tsearch/spell.c:1559 +#: tsearch/spell.c:1563 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "接辞ファイルが新旧両方の形式のコマンドを含んでいます" -#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:274 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "TSベクターのための文字列が長すぎます(%dバイト、最大は%dバイト)" -#: tsearch/ts_locale.c:236 +#: tsearch/ts_locale.c:191 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "設定ファイル\"%2$s\"の%1$d行目: \"%3$s\"" -#: tsearch/ts_locale.c:315 -#, c-format -msgid "conversion from wchar_t to server encoding failed: %m" -msgstr "wchar_tからサーバー符号化方式への変換が失敗しました: %m" - #: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:573 tsearch/ts_parse.c:580 #, c-format msgid "word is too long to be indexed" @@ -23662,12 +24604,12 @@ msgstr "インデックス付けするには単語が長すぎます" msgid "Words longer than %d characters are ignored." msgstr "%dより長い単語は無視されます。" -#: tsearch/ts_utils.c:51 +#: tsearch/ts_utils.c:52 #, c-format msgid "invalid text search configuration file name \"%s\"" msgstr "テキスト検索設定ファイル名は%sは不正です" -#: tsearch/ts_utils.c:83 +#: tsearch/ts_utils.c:84 #, c-format msgid "could not open stop-word file \"%s\": %m" msgstr "ストップワードファイル\"%s\"をオープンできませんでした: %m" @@ -23684,60 +24626,105 @@ msgstr "認識できない見出しパラメータ: \"%s\"" #: 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は正数でなければなりま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でなければなりません" +msgid "%s must be >= 0" +msgstr "%sは0以上でなければなりません" -#: tsearch/wparser_def.c:2686 -#, c-format -msgid "MaxFragments should be >= 0" -msgstr "MaxFragments は 0 以上でなければなりません" - -#: utils/activity/pgstat.c:435 +#: utils/activity/pgstat.c:533 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "永続統計情報ファイル\"%s\"をunlinkできませんでした: %m" -#: utils/activity/pgstat.c:1252 +#: utils/activity/pgstat.c:1443 #, c-format msgid "invalid statistics kind: \"%s\"" msgstr "不正な統計情報種別: \"%s\"" -#: utils/activity/pgstat.c:1332 +#: utils/activity/pgstat.c:1488 +#, c-format +msgid "custom cumulative statistics name is invalid" +msgstr "独自集積統計情報の名前が不正です" + +#: utils/activity/pgstat.c:1489 +#, c-format +msgid "Provide a non-empty name for the custom cumulative statistics." +msgstr "独自集積統計情報の名前には空ではない文字列を設定してください。" + +#: utils/activity/pgstat.c:1492 +#, c-format +msgid "custom cumulative statistics ID %u is out of range" +msgstr "独自集積統計情報のID %uは範囲外です" + +#: utils/activity/pgstat.c:1493 +#, c-format +msgid "Provide a custom cumulative statistics ID between %u and %u." +msgstr "独自集積統計情報IDは%uから%uの間の値で指定してください。" + +#: utils/activity/pgstat.c:1498 utils/activity/pgstat.c:1525 utils/activity/pgstat.c:1538 +#, c-format +msgid "failed to register custom cumulative statistics \"%s\" with ID %u" +msgstr "独自集積統計情報\"%s\"のID %uでの登録に失敗しました" + +#: utils/activity/pgstat.c:1499 +#, c-format +msgid "Custom cumulative statistics must be registered while initializing modules in \"shared_preload_libraries\"." +msgstr "独自集積統計情報は\"shared_preload_libraries\"にあるモジュールの初期化中に登録する必要があります。" + +#: utils/activity/pgstat.c:1508 +#, c-format +msgid "custom cumulative statistics property is invalid" +msgstr "独自集積統計情報の特性が不正です" + +#: utils/activity/pgstat.c:1509 +#, c-format +msgid "Custom cumulative statistics require a shared memory size for fixed-numbered objects." +msgstr "独自集積統計情報は固定数のオブジェクトのための共有メモリのサイズを必要とします。" + +#: utils/activity/pgstat.c:1526 +#, c-format +msgid "Custom cumulative statistics \"%s\" already registered with the same ID." +msgstr "独自集積統計情報\"%s\"はすでに同一のIDで登録されています。" + +#: utils/activity/pgstat.c:1539 +#, c-format +msgid "Existing cumulative statistics with ID %u has the same name." +msgstr "ID %uの既存の独自集積統計情報が同じ名前です。" + +#: utils/activity/pgstat.c:1545 +#, c-format +msgid "registered custom cumulative statistics \"%s\" with ID %u" +msgstr "独自集積統計情報\"%s\"をID %uで登録しました" + +#: utils/activity/pgstat.c:1614 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"をオープンできませんでした: %m" -#: utils/activity/pgstat.c:1444 +#: utils/activity/pgstat.c:1735 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"に書き込みできませんでした: %m" -#: utils/activity/pgstat.c:1453 +#: utils/activity/pgstat.c:1744 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"をクローズできませんでした: %m" -#: utils/activity/pgstat.c:1461 -#, 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:1798 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "統計情報ファイル\"%s\"をオープンできませんでした: %m" -#: utils/activity/pgstat.c:1672 +#: utils/activity/pgstat.c:2030 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "統計情報ファイル\"%s\"が破損しています" @@ -23747,178 +24734,183 @@ msgstr "統計情報ファイル\"%s\"が破損しています" msgid "function call to dropped function" msgstr "削除された関数の呼び出し" -#: utils/activity/pgstat_xact.c:362 +#: utils/activity/pgstat_xact.c:366 +#, c-format +msgid "resetting existing statistics for kind %s, db=%u, oid=%" +msgstr "種類%s、db=%u、oid=%に対する既存の統計情報をリセットします" + +#: utils/activity/wait_event.c:206 utils/activity/wait_event.c:231 #, c-format -msgid "resetting existing statistics for kind %s, db=%u, oid=%u" -msgstr "種類%s、db=%u、oid=%uの既存統計情報をリセットします" +msgid "wait event \"%s\" already exists in type \"%s\"" +msgstr "待機イベント\"%s\"は待機イベントタイプ\"%s\"内にすでに存在します" -#: utils/activity/wait_event.c:210 +#: utils/activity/wait_event.c:245 #, 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 +#: utils/adt/acl.c:187 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "識別子が長すぎます" -#: utils/adt/acl.c:184 utils/adt/name.c:94 +#: utils/adt/acl.c:188 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "識別子は%d文字より短くなければなりません。" -#: utils/adt/acl.c:272 +#: utils/adt/acl.c:276 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "キーワードが不明です: \"%s\"" -#: utils/adt/acl.c:273 +#: utils/adt/acl.c:277 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACLキーワードは\"group\"または\"user\"でなければなりません。" -#: utils/adt/acl.c:281 +#: utils/adt/acl.c:285 #, c-format msgid "missing name" msgstr "名前がありません" -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:286 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "\"group\"または\"user\"キーワードの後には名前が必要です。" -#: utils/adt/acl.c:288 +#: utils/adt/acl.c:292 #, c-format msgid "missing \"=\" sign" msgstr "\"=\"記号がありません" -#: utils/adt/acl.c:350 +#: utils/adt/acl.c:351 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "不正なモード文字: \"%s\"の一つでなければなりません" -#: utils/adt/acl.c:380 +#: utils/adt/acl.c:381 #, c-format msgid "a name must follow the \"/\" sign" msgstr "\"/\"記号の後には名前が必要です" -#: utils/adt/acl.c:392 +#: utils/adt/acl.c:393 #, c-format msgid "defaulting grantor to user ID %u" msgstr "権限付与者をデフォルトのユーザーID %uにしています" -#: utils/adt/acl.c:578 +#: utils/adt/acl.c:579 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL配列に不正なデータ型があります。" -#: utils/adt/acl.c:582 +#: utils/adt/acl.c:583 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL配列は1次元の配列でなければなりません" -#: utils/adt/acl.c:586 +#: utils/adt/acl.c:587 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL配列にはNULL値を含めてはいけません" -#: utils/adt/acl.c:615 +#: utils/adt/acl.c:616 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "ACL指定の後に余計なごみがあります" -#: utils/adt/acl.c:1257 +#: utils/adt/acl.c:1264 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "グラントオプションでその権限付与者に権限を付与し返すことはできません" -#: utils/adt/acl.c:1573 +#: utils/adt/acl.c:1580 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsertはもうサポートされていません" -#: utils/adt/acl.c:1583 +#: utils/adt/acl.c:1590 #, 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:3548 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:5330 #, c-format 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/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 +#: utils/adt/array_userfuncs.c:118 utils/adt/array_userfuncs.c:565 utils/adt/array_userfuncs.c:942 utils/adt/json.c:611 utils/adt/json.c:749 utils/adt/json.c:799 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:123 #, 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/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/array_userfuncs.c:167 utils/adt/array_userfuncs.c:249 utils/adt/float.c:1229 utils/adt/float.c:1303 utils/adt/float.c:4107 utils/adt/float.c:4145 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:2039 utils/adt/numeric.c:4557 utils/adt/rangetypes.c:1552 utils/adt/rangetypes.c:1565 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1143 utils/adt/varlena.c:3184 utils/adt/varlena.c:4118 #, c-format msgid "integer out of range" msgstr "integerの範囲外です" -#: utils/adt/array_userfuncs.c:158 utils/adt/array_userfuncs.c:213 +#: utils/adt/array_userfuncs.c:174 utils/adt/array_userfuncs.c:259 #, c-format msgid "argument must be empty or one-dimensional array" msgstr "引数は空か1次元の配列でなければなりません" -#: 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:371 utils/adt/array_userfuncs.c:410 utils/adt/array_userfuncs.c:447 utils/adt/array_userfuncs.c:476 utils/adt/array_userfuncs.c:504 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "互換性がない配列を連結できません" -#: utils/adt/array_userfuncs.c:296 +#: utils/adt/array_userfuncs.c:372 #, 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:411 #, 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:448 #, 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:477 utils/adt/array_userfuncs.c:505 #, 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/arrayfuncs.c:5609 utils/adt/arrayfuncs.c:5615 +#: utils/adt/array_userfuncs.c:1051 utils/adt/array_userfuncs.c:1059 utils/adt/arrayfuncs.c:5628 utils/adt/arrayfuncs.c:5634 #, 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:1348 utils/adt/array_userfuncs.c:1502 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "多次元配列内の要素の検索はサポートされません" -#: utils/adt/array_userfuncs.c:1301 +#: utils/adt/array_userfuncs.c:1377 #, c-format msgid "initial position must not be null" msgstr "初期位置nullであってはなりません" -#: utils/adt/array_userfuncs.c:1674 +#: utils/adt/array_userfuncs.c:1750 #, c-format msgid "sample size must be between 0 and %d" msgstr "サンプルの大きさは0と%dの間でなければなりません" @@ -23963,7 +24955,7 @@ msgstr "\"[\"は配列次元の明示的な指定の先頭である必要があ 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 "上限を下限より小さくすることはできません" @@ -23993,7 +24985,7 @@ msgstr "想定外の配列要素。" 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:2600 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "多次元配列は合致する次元の副配列を持たなければなりません。" @@ -24003,12 +24995,12 @@ msgstr "多次元配列は合致する次元の副配列を持たなければな msgid "Incorrectly quoted array element." msgstr "配列要素が正しくクォートされていません" -#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 utils/adt/rangetypes.c:2528 utils/adt/rangetypes.c:2536 utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 #, c-format 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:3511 utils/adt/arrayfuncs.c:6120 #, c-format msgid "invalid number of dimensions: %d" msgstr "不正な次元数: %d" @@ -24023,7 +25015,7 @@ msgstr "不正な配列フラグ" msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "バイナリデータ中に期待される型%3$u(%4$s)の代わりに%1$u(%2$s)がありました" -#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 utils/adt/rangetypes.c:353 utils/cache/lsyscache.c:3098 #, c-format msgid "no binary input function available for type %s" msgstr "型%sにはバイナリ入力関数がありません" @@ -24033,7 +25025,7 @@ msgstr "型%sにはバイナリ入力関数がありません" msgid "improper binary format in array element %d" msgstr "配列要素%dのバイナリ書式が不適切です" -#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 utils/adt/rangetypes.c:358 utils/cache/lsyscache.c:3131 #, c-format msgid "no binary output function available for type %s" msgstr "型%sにはバイナリ出力関数がありません" @@ -24043,12 +25035,12 @@ msgstr "型%sにはバイナリ出力関数がありません" 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:6106 utils/adt/arrayfuncs.c:6132 utils/adt/arrayfuncs.c:6143 utils/adt/json.c:1441 utils/adt/json.c:1509 utils/adt/jsonb.c:1317 utils/adt/jsonb.c:1401 utils/adt/jsonfuncs.c:4734 utils/adt/jsonfuncs.c:4887 utils/adt/jsonfuncs.c:4998 utils/adt/jsonfuncs.c:5046 #, 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 "配列の添え字が範囲外です" @@ -24073,92 +25065,92 @@ msgstr "配列のスライスの添え字は両方の境界を示す必要があ 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:3669 #, c-format msgid "null array element not allowed in this context" msgstr "この文脈ではNULLの配列要素は許可されません" -#: utils/adt/arrayfuncs.c:3821 utils/adt/arrayfuncs.c:3992 utils/adt/arrayfuncs.c:4383 +#: utils/adt/arrayfuncs.c:3840 utils/adt/arrayfuncs.c:4011 utils/adt/arrayfuncs.c:4402 #, 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:4189 utils/adt/multirangetypes.c:2805 utils/adt/multirangetypes.c:2877 utils/adt/rangetypes.c:1425 utils/adt/rangetypes.c:1489 utils/adt/rowtypes.c:1893 #, 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:4317 utils/adt/rowtypes.c:2014 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "型 %s の拡張ハッシュ関数を特定できませんでした" -#: utils/adt/arrayfuncs.c:5499 +#: utils/adt/arrayfuncs.c:5518 #, c-format msgid "data type %s is not an array type" msgstr "データ型%sは配列型ではありません" -#: utils/adt/arrayfuncs.c:5554 +#: utils/adt/arrayfuncs.c:5573 #, c-format msgid "cannot accumulate null arrays" msgstr "null配列は連結できません" -#: utils/adt/arrayfuncs.c:5582 +#: utils/adt/arrayfuncs.c:5601 #, c-format msgid "cannot accumulate empty arrays" msgstr "空の配列は連結できません" -#: utils/adt/arrayfuncs.c:5983 utils/adt/arrayfuncs.c:6023 +#: utils/adt/arrayfuncs.c:6004 utils/adt/arrayfuncs.c:6044 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "次元配列もしくは下限値配列が NULL であってはなりません" -#: utils/adt/arrayfuncs.c:6086 utils/adt/arrayfuncs.c:6112 +#: utils/adt/arrayfuncs.c:6107 utils/adt/arrayfuncs.c:6133 #, c-format msgid "Dimension array must be one dimensional." msgstr "次元配列は1次元でなければなりません" -#: utils/adt/arrayfuncs.c:6091 utils/adt/arrayfuncs.c:6117 +#: utils/adt/arrayfuncs.c:6112 utils/adt/arrayfuncs.c:6138 #, c-format msgid "dimension values cannot be null" msgstr "次元値にnullにはできません" -#: utils/adt/arrayfuncs.c:6123 +#: utils/adt/arrayfuncs.c:6144 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "下限配列が次元配列のサイズと異なっています" -#: utils/adt/arrayfuncs.c:6404 +#: utils/adt/arrayfuncs.c:6425 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "多次元配列からの要素削除はサポートされません" -#: utils/adt/arrayfuncs.c:6681 +#: utils/adt/arrayfuncs.c:6702 #, c-format msgid "thresholds must be one-dimensional array" msgstr "閾値は1次元の配列でなければなりません" -#: utils/adt/arrayfuncs.c:6686 +#: utils/adt/arrayfuncs.c:6707 #, c-format msgid "thresholds array must not contain NULLs" msgstr "閾値配列にはNULL値を含めてはいけません" -#: utils/adt/arrayfuncs.c:6919 +#: utils/adt/arrayfuncs.c:6940 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "削除する要素の数は0と%dとの間でなければなりません" -#: utils/adt/arraysubs.c:93 utils/adt/arraysubs.c:130 +#: utils/adt/arraysubs.c:94 utils/adt/arraysubs.c:131 #, c-format msgid "array subscript must have type integer" msgstr "配列の添え字は整数型でなければなりません" -#: utils/adt/arraysubs.c:198 utils/adt/arraysubs.c:217 +#: utils/adt/arraysubs.c:199 utils/adt/arraysubs.c:218 #, c-format msgid "array subscript in assignment must not be null" msgstr "代入における配列の添え字はnullにはできません" @@ -24189,24 +25181,29 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "%s符号化方式からASCIIへの変換はサポートされていません" #. 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:150 utils/adt/cash.c:354 utils/adt/datetime.c:4258 utils/adt/float.c:207 utils/adt/float.c:294 utils/adt/float.c:308 utils/adt/float.c:413 utils/adt/float.c:496 utils/adt/float.c:510 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:805 utils/adt/numeric.c:7324 utils/adt/numeric.c:7527 utils/adt/numeric.c:8474 utils/adt/numutils.c:356 utils/adt/numutils.c:617 utils/adt/numutils.c:878 utils/adt/numutils.c:917 utils/adt/numutils.c:939 utils/adt/numutils.c:1003 utils/adt/numutils.c:1025 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:512 utils/adt/uuid.c:176 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 "値\"%s\"は型%sの範囲外です" +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:725 utils/adt/float.c:106 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:3294 utils/adt/numeric.c:3317 utils/adt/numeric.c:3402 utils/adt/numeric.c:3420 utils/adt/numeric.c:3516 utils/adt/numeric.c:9399 +#: utils/adt/numeric.c:9923 utils/adt/numeric.c:10039 utils/adt/numeric.c:11550 utils/adt/timestamp.c:3772 #, c-format msgid "division by zero" msgstr "0 による除算が行われました" +#: 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:611 utils/adt/numutils.c:872 utils/adt/numutils.c:923 utils/adt/numutils.c:962 utils/adt/numutils.c:1009 +#, c-format +msgid "value \"%s\" is out of range for type %s" +msgstr "値\"%s\"は型%sの範囲外です" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" @@ -24217,140 +25214,140 @@ msgstr "\"char\"の範囲外です" msgid "could not compute %s hash: %s" msgstr "%sハッシュを計算できませんでした: %s" -#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 utils/adt/varchar.c:48 +#: utils/adt/date.c:65 utils/adt/timestamp.c:118 utils/adt/varbit.c:105 utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "不正な型修飾子です。" -#: utils/adt/date.c:76 +#: utils/adt/date.c:77 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "(%d)%sの精度は負ではいけません" -#: utils/adt/date.c:82 +#: utils/adt/date.c:83 #, c-format 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:168 utils/adt/date.c:176 utils/adt/formatting.c:4171 utils/adt/formatting.c:4180 utils/adt/formatting.c:4285 utils/adt/formatting.c:4295 #, c-format 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:223 utils/adt/date.c:585 utils/adt/date.c:609 utils/adt/rangetypes.c:1648 utils/adt/rangetypes.c:1663 utils/adt/xml.c:2552 #, c-format msgid "date out of range" msgstr "日付が範囲外です" -#: utils/adt/date.c:268 utils/adt/timestamp.c:598 +#: utils/adt/date.c:266 utils/adt/date.c:276 utils/adt/timestamp.c:600 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "日付フィールドの値が範囲外です: %d-%02d-%02d" -#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 +#: utils/adt/date.c:283 utils/adt/date.c:292 utils/adt/timestamp.c:606 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "日付が範囲外です: %d-%02d-%02d" -#: utils/adt/date.c:495 +#: utils/adt/date.c:560 #, c-format msgid "cannot subtract infinite dates" msgstr "無限大の日付は減算できません" -#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 utils/adt/date.c:2906 utils/adt/date.c:2916 +#: utils/adt/date.c:658 utils/adt/date.c:721 utils/adt/date.c:757 utils/adt/date.c:2971 utils/adt/date.c:2981 #, c-format msgid "date out of range for timestamp" msgstr "タイムスタンプで日付が範囲外です" -#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 utils/adt/timestamp.c:6070 +#: utils/adt/date.c:1187 utils/adt/date.c:1270 utils/adt/date.c:1286 utils/adt/date.c:2280 utils/adt/date.c:3076 utils/adt/timestamp.c:4724 utils/adt/timestamp.c:4815 utils/adt/timestamp.c:4963 utils/adt/timestamp.c:5064 utils/adt/timestamp.c:5179 utils/adt/timestamp.c:5231 utils/adt/timestamp.c:5488 utils/adt/timestamp.c:5689 utils/adt/timestamp.c:5736 utils/adt/timestamp.c:5960 utils/adt/timestamp.c:6007 utils/adt/timestamp.c:6088 utils/adt/timestamp.c:6232 #, c-format msgid "unit \"%s\" not supported for type %s" msgstr "単位\"%s\"は型%sに対してはサポートされていません" -#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 +#: utils/adt/date.c:1295 utils/adt/date.c:2296 utils/adt/date.c:3096 utils/adt/timestamp.c:4829 utils/adt/timestamp.c:5081 utils/adt/timestamp.c:5245 utils/adt/timestamp.c:5448 utils/adt/timestamp.c:5745 utils/adt/timestamp.c:6016 utils/adt/timestamp.c:6057 utils/adt/timestamp.c:6293 #, c-format msgid "unit \"%s\" not recognized for type %s" msgstr "単位\"%s\"は型%sに対しては認識できません" -#: 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/date.c:1379 utils/adt/date.c:1425 utils/adt/date.c:1984 utils/adt/date.c:2015 utils/adt/date.c:2044 utils/adt/date.c:2934 utils/adt/date.c:3166 utils/adt/datetime.c:432 utils/adt/datetime.c:1817 utils/adt/formatting.c:4016 utils/adt/formatting.c:4052 utils/adt/formatting.c:4139 utils/adt/formatting.c:4261 utils/adt/json.c:375 utils/adt/json.c:414 utils/adt/timestamp.c:250 utils/adt/timestamp.c:282 utils/adt/timestamp.c:707 utils/adt/timestamp.c:716 +#: utils/adt/timestamp.c:794 utils/adt/timestamp.c:827 utils/adt/timestamp.c:3125 utils/adt/timestamp.c:3134 utils/adt/timestamp.c:3151 utils/adt/timestamp.c:3156 utils/adt/timestamp.c:3175 utils/adt/timestamp.c:3188 utils/adt/timestamp.c:3199 utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3211 utils/adt/timestamp.c:3216 utils/adt/timestamp.c:3269 utils/adt/timestamp.c:3278 utils/adt/timestamp.c:3299 utils/adt/timestamp.c:3304 utils/adt/timestamp.c:3325 +#: utils/adt/timestamp.c:3338 utils/adt/timestamp.c:3352 utils/adt/timestamp.c:3360 utils/adt/timestamp.c:3366 utils/adt/timestamp.c:3371 utils/adt/timestamp.c:4439 utils/adt/timestamp.c:4591 utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4733 utils/adt/timestamp.c:4823 utils/adt/timestamp.c:4902 utils/adt/timestamp.c:4972 utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5553 utils/adt/timestamp.c:5827 utils/adt/timestamp.c:6361 utils/adt/timestamp.c:6371 +#: utils/adt/timestamp.c:6376 utils/adt/timestamp.c:6382 utils/adt/timestamp.c:6422 utils/adt/timestamp.c:6509 utils/adt/timestamp.c:6550 utils/adt/timestamp.c:6554 utils/adt/timestamp.c:6608 utils/adt/timestamp.c:6612 utils/adt/timestamp.c:6618 utils/adt/timestamp.c:6659 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 "timestampの範囲外です" -#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 +#: utils/adt/date.c:1601 utils/adt/date.c:2417 utils/adt/formatting.c:4344 #, c-format msgid "time out of range" msgstr "時刻が範囲外です" -#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 +#: utils/adt/date.c:1653 utils/adt/timestamp.c:615 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "時刻フィールドの値が範囲外です: %d:%02d:%02g" -#: utils/adt/date.c:2020 +#: utils/adt/date.c:2085 #, c-format msgid "cannot convert infinite interval to time" msgstr "無限大のintervalはtimeに変換できません" -#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#: utils/adt/date.c:2126 utils/adt/date.c:2670 #, c-format msgid "cannot add infinite interval to time" msgstr "無限大のintervalのtimeへの加算はできません" -#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#: utils/adt/date.c:2149 utils/adt/date.c:2697 #, c-format msgid "cannot subtract infinite interval from time" msgstr "無限大のintervalのtimeからの減算できません" -#: 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:2180 utils/adt/date.c:2732 utils/adt/float.c:1043 utils/adt/float.c:1119 utils/adt/int.c:635 utils/adt/int.c:682 utils/adt/int.c:717 utils/adt/int8.c:413 utils/adt/numeric.c:2698 utils/adt/timestamp.c:3869 utils/adt/timestamp.c:3906 utils/adt/timestamp.c:3947 #, c-format msgid "invalid preceding or following size in window function" msgstr "ウィンドウ関数での不正なサイズの PRECEDING または FOLLOWING 指定" -#: utils/adt/date.c:2360 +#: utils/adt/date.c:2425 #, c-format msgid "time zone displacement out of range" msgstr "タイムゾーンの置換が範囲外です" -#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#: utils/adt/date.c:3197 utils/adt/timestamp.c:6404 utils/adt/timestamp.c:6641 #, c-format msgid "interval time zone \"%s\" must be finite" msgstr "タイムゾーンのインターバル\"%s\"は有限でなければなりません" -#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 +#: utils/adt/date.c:3204 utils/adt/timestamp.c:6411 utils/adt/timestamp.c:6648 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "intervalによるタイムゾーン\"%s\"には月または日を含めてはいけません" -#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 +#: utils/adt/datetime.c:3324 utils/adt/datetime.c:4243 utils/adt/datetime.c:4249 utils/adt/timestamp.c:530 #, c-format msgid "time zone \"%s\" not recognized" msgstr "タイムゾーン\"%s\"は不明です" -#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 +#: utils/adt/datetime.c:4217 utils/adt/datetime.c:4224 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "日付時刻のフィールドが範囲外です: \"%s\"" -#: utils/adt/datetime.c:4110 +#: utils/adt/datetime.c:4226 #, c-format -msgid "Perhaps you need a different \"datestyle\" setting." -msgstr "他の\"datestyle\"設定が必要かもしれません。" +msgid "Perhaps you need a different \"DateStyle\" setting." +msgstr "他の\"DateStyle\"設定が必要かもしれません。" -#: utils/adt/datetime.c:4115 +#: utils/adt/datetime.c:4231 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "intervalフィールドの値が範囲外です: \"%s\"" -#: utils/adt/datetime.c:4121 +#: utils/adt/datetime.c:4237 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "タイムゾーンの置換が範囲外です: \"%s\"" -#: utils/adt/datetime.c:4135 +#: utils/adt/datetime.c:4251 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "このタイムゾーンはタイムゾーン省略名\"%s\"の構成ファイルにあるようです。" @@ -24360,17 +25357,22 @@ msgstr "このタイムゾーンはタイムゾーン省略名\"%s\"の構成フ msgid "invalid Datum pointer" msgstr "不正なDatumポインタ" -#: utils/adt/dbsize.c:760 utils/adt/dbsize.c:836 +#: utils/adt/dbsize.c:293 utils/adt/genfile.c:656 +#, c-format +msgid "tablespace with OID %u does not exist" +msgstr "OID %uのテーブル空間は存在しません" + +#: utils/adt/dbsize.c:782 utils/adt/dbsize.c:858 #, c-format msgid "invalid size: \"%s\"" msgstr "不正なサイズ: \"%s\"" -#: utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:859 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "不正なサイズの単位: \"%s\"" -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:860 #, c-format msgid "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." msgstr "有効な単位は \"bytes\"、\"B\"、\"kB\"、\"MB\"、\"GB\"、\"TB\"そして\"PB\"です。" @@ -24395,32 +25397,32 @@ msgstr "エンコーディング変換の結果が大きすぎです" msgid "result of decoding conversion is too large" msgstr "デコード変換の結果が大きすぎます" -#: utils/adt/encode.c:217 utils/adt/encode.c:227 +#: utils/adt/encode.c:238 utils/adt/encode.c:248 #, c-format msgid "invalid hexadecimal digit: \"%.*s\"" msgstr "不正な16進数表現: \"%.*s\"" -#: utils/adt/encode.c:223 +#: utils/adt/encode.c:244 #, c-format msgid "invalid hexadecimal data: odd number of digits" msgstr "不正な16進数データ: 桁数が奇数です" -#: utils/adt/encode.c:344 +#: utils/adt/encode.c:365 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "base64シーケンスのデコード中に想定外の\"=\"" -#: utils/adt/encode.c:356 +#: utils/adt/encode.c:377 #, c-format msgid "invalid symbol \"%.*s\" found while decoding base64 sequence" msgstr "base64シーケンスのデコード中に検出された不正なシンボル\"%.*s\"" -#: utils/adt/encode.c:377 +#: utils/adt/encode.c:398 #, c-format msgid "invalid base64 end sequence" msgstr "不正なbase64終了シーケンス" -#: utils/adt/encode.c:378 +#: utils/adt/encode.c:399 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "入力データにパディングがありません、切り詰められたかさもなければ壊れています。" @@ -24455,335 +25457,355 @@ msgstr "実際の列挙型を特定できませんでした" msgid "enum %s contains no values" msgstr "列挙型 %s に値がありません" -#: utils/adt/float.c:83 +#: utils/adt/float.c:90 #, c-format msgid "value out of range: overflow" msgstr "範囲外の値です: オーバーフロー" -#: utils/adt/float.c:91 +#: utils/adt/float.c:98 #, c-format msgid "value out of range: underflow" msgstr "範囲外の値です: アンダーフロー" -#: utils/adt/float.c:280 +#: utils/adt/float.c:287 #, c-format msgid "\"%s\" is out of range for type real" msgstr "型realでは\"%s\"は範囲外です" -#: utils/adt/float.c:482 +#: utils/adt/float.c:489 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "型double precisionでは\"%s\"は範囲外です" -#: 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:1254 utils/adt/float.c:1328 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:4696 utils/adt/numeric.c:4701 utils/adt/varlena.c:4093 #, 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:1454 utils/adt/numeric.c:3812 utils/adt/numeric.c:10454 #, 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:1522 utils/adt/numeric.c:4100 utils/adt/numeric.c:4212 #, c-format msgid "zero raised to a negative power is undefined" msgstr "0 の負数乗は定義されていません" -#: utils/adt/float.c:1519 utils/adt/numeric.c:3986 utils/adt/numeric.c:10988 +#: utils/adt/float.c:1526 utils/adt/numeric.c:4104 utils/adt/numeric.c:11345 #, 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:1702 utils/adt/float.c:1735 utils/adt/numeric.c:4012 utils/adt/numeric.c:11125 #, 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:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3950 utils/adt/numeric.c:4007 utils/adt/numeric.c:11129 #, c-format msgid "cannot take logarithm of a negative number" msgstr "負の値の対数を取ることができません" -#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 utils/adt/float.c:2696 utils/adt/float.c:2720 +#: utils/adt/float.c:1772 utils/adt/float.c:1803 utils/adt/float.c:1898 utils/adt/float.c:1925 utils/adt/float.c:1953 utils/adt/float.c:1980 utils/adt/float.c:2127 utils/adt/float.c:2164 utils/adt/float.c:2334 utils/adt/float.c:2390 utils/adt/float.c:2455 utils/adt/float.c:2512 utils/adt/float.c:2703 utils/adt/float.c:2727 #, c-format msgid "input is out of range" msgstr "入力が範囲外です" -#: utils/adt/float.c:4000 utils/adt/numeric.c:1842 +#: utils/adt/float.c:4085 utils/adt/numeric.c:1979 #, c-format msgid "count must be greater than zero" msgstr "カウントは0より大きくなければなりません" -#: utils/adt/float.c:4005 utils/adt/numeric.c:1853 +#: utils/adt/float.c:4090 utils/adt/numeric.c:1990 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "オペランド、下限、上限をNaNにすることはできません" -#: utils/adt/float.c:4011 utils/adt/numeric.c:1858 +#: utils/adt/float.c:4096 utils/adt/numeric.c:1995 #, 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:4162 utils/adt/numeric.c:2009 #, c-format msgid "lower bound cannot equal upper bound" msgstr "下限を上限と同じにできません" -#: utils/adt/formatting.c:530 +#: utils/adt/formatting.c:556 #, c-format msgid "invalid format specification for an interval value" msgstr "\"tinterval\"値に対する不正な書式指定" -#: utils/adt/formatting.c:531 +#: utils/adt/formatting.c:557 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "時間間隔が特定の暦日付に結びついていません" -#: utils/adt/formatting.c:1161 +#: utils/adt/formatting.c:1197 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\"は最終パターンでなければなりません。" -#: utils/adt/formatting.c:1169 +#: utils/adt/formatting.c:1205 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\"は\"PR\"の前になければなりません" -#: utils/adt/formatting.c:1185 +#: utils/adt/formatting.c:1221 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\"は\"PR\"の前になければなりません" -#: utils/adt/formatting.c:1212 +#: utils/adt/formatting.c:1248 #, c-format msgid "multiple decimal points" msgstr "複数の小数点があります" -#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 +#: utils/adt/formatting.c:1252 utils/adt/formatting.c:1339 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "\"V\"と小数点を混在できません" -#: utils/adt/formatting.c:1228 +#: utils/adt/formatting.c:1264 #, c-format msgid "cannot use \"S\" twice" msgstr "\"S\"は1回しか使用できません" -#: utils/adt/formatting.c:1232 +#: utils/adt/formatting.c:1268 #, 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:1288 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "\"S\"と\"MI\"を混在できません" -#: utils/adt/formatting.c:1262 +#: utils/adt/formatting.c:1298 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "\"S\"と\"PL\"を混在できません" -#: utils/adt/formatting.c:1272 +#: utils/adt/formatting.c:1308 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "\"S\"と\"SG\"を混在できません" -#: utils/adt/formatting.c:1281 +#: utils/adt/formatting.c:1317 #, 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:1326 +#, c-format +msgid "cannot use \"RN\" twice" +msgstr "\"RN\"は1回しか使用できません" + +#: utils/adt/formatting.c:1347 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "\"EEEE\"は1回しか使用できません" -#: utils/adt/formatting.c:1313 +#: utils/adt/formatting.c:1353 #, c-format msgid "\"EEEE\" is incompatible with other formats" -msgstr "\"EEEE\"が他のフォーマットと互換性がありません。" +msgstr "\"EEEE\"が他のフォーマットと互換性がありません" -#: utils/adt/formatting.c:1314 +#: utils/adt/formatting.c:1354 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." -msgstr "\"EEEE\"は数値または小数点パターンと共に指定してください。" +msgstr "\"EEEE\"は数値および小数点パターンと共にのみ使用できます。" -#: utils/adt/formatting.c:1398 +#: utils/adt/formatting.c:1363 +#, c-format +msgid "\"RN\" is incompatible with other formats" +msgstr "\"RN\"が他のフォーマットと互換性がありません" + +#: utils/adt/formatting.c:1364 +#, c-format +msgid "\"RN\" may only be used together with \"FM\"." +msgstr "\"RN\"は\"FM\"と共にのみ使用できます。" + +#: utils/adt/formatting.c:1445 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "不正なdatetime書式のセパレータ: \"%s\"" -#: utils/adt/formatting.c:1525 +#: utils/adt/formatting.c:1572 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\"は数値ではありません" -#: utils/adt/formatting.c:1603 -#, 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:1717 utils/adt/formatting.c:1781 utils/adt/formatting.c:1845 #, c-format msgid "could not determine which collation to use for %s function" msgstr "%s 関数に対して使用する照合順序を特定できませんでした" -#: utils/adt/formatting.c:2410 +#: utils/adt/formatting.c:1853 +#, c-format +msgid "Unicode case folding can only be performed if server encoding is UTF8" +msgstr "UnicodeケースフォールディングはサーバーエンコーディングがUTF-8の場合にのみ実行可能です" + +#: utils/adt/formatting.c:2150 #, c-format msgid "invalid combination of date conventions" msgstr "不正な暦法の組み合わせ" -#: utils/adt/formatting.c:2411 +#: utils/adt/formatting.c:2151 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "単一の書式テンプレートの中では、グレゴリオ暦とISO歴週日付を混在させないでください。" -#: utils/adt/formatting.c:2433 +#: utils/adt/formatting.c:2173 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "書式文字列中で\"%s\"フィールドの値が衝突しています" -#: utils/adt/formatting.c:2435 +#: utils/adt/formatting.c:2175 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "この値は同じフィールド型に対する以前の設定と矛盾しています" -#: utils/adt/formatting.c:2502 +#: utils/adt/formatting.c:2242 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "書式フィールド\"%s\"に対して元の文字列が短すぎます" -#: utils/adt/formatting.c:2504 +#: utils/adt/formatting.c:2244 #, 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:2246 utils/adt/formatting.c:2260 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "元の文字列が固定長でない場合は、修飾子\"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:2256 utils/adt/formatting.c:2269 utils/adt/formatting.c:2490 utils/adt/formatting.c:3390 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "\"%2$s\"に対する不正な値\"%1$s\"" -#: utils/adt/formatting.c:2518 +#: utils/adt/formatting.c:2258 #, 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:2271 #, c-format msgid "Value must be an integer." msgstr "値は整数でなければなりません。" -#: utils/adt/formatting.c:2536 +#: utils/adt/formatting.c:2276 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "もとの文字列において\"%s\"に対応する値が範囲外です" -#: utils/adt/formatting.c:2538 +#: utils/adt/formatting.c:2278 #, c-format msgid "Value must be in the range %d to %d." msgstr "値は%dから%dまでの範囲でなければなりません。" -#: utils/adt/formatting.c:2752 +#: utils/adt/formatting.c:2492 #, 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:2708 utils/adt/formatting.c:2728 utils/adt/formatting.c:2748 utils/adt/formatting.c:2768 utils/adt/formatting.c:2787 utils/adt/formatting.c:2806 utils/adt/formatting.c:2830 utils/adt/formatting.c:2848 utils/adt/formatting.c:2866 utils/adt/formatting.c:2884 utils/adt/formatting.c:2901 utils/adt/formatting.c:2918 #, c-format msgid "localized string format value too long" msgstr "地域化した文字列のフォーマットが長すぎます" -#: utils/adt/formatting.c:3458 +#: utils/adt/formatting.c:3198 #, c-format msgid "unmatched format separator \"%c\"" msgstr "合致しないフォーマットセパレータ \"%c\"" -#: utils/adt/formatting.c:3519 +#: utils/adt/formatting.c:3259 #, c-format msgid "unmatched format character \"%s\"" msgstr "合致しないフォーマット文字\"%s\"" -#: utils/adt/formatting.c:3652 +#: utils/adt/formatting.c:3392 #, c-format msgid "Time zone abbreviation is not recognized." msgstr "タイムゾーン省略名が認識されません。" -#: utils/adt/formatting.c:3853 +#: utils/adt/formatting.c:3593 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr " \"Y,YYY\"に対応する入力文字列が不正です" -#: utils/adt/formatting.c:3942 +#: utils/adt/formatting.c:3600 +#, c-format +msgid "value for \"Y,YYY\" in source string is out of range" +msgstr "もとの文字列内の\"Y,YYY\"に対応する値が範囲外です" + +#: utils/adt/formatting.c:3689 #, c-format msgid "input string is too short for datetime format" msgstr "datetime書式に対して入力文字列が短すぎます" -#: utils/adt/formatting.c:3950 +#: utils/adt/formatting.c:3697 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "datetimeフォーマット後に文字が入力文字列中に残っています" -#: utils/adt/formatting.c:4494 +#: utils/adt/formatting.c:4241 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "timestamptz型に対応する入力に時間帯がありません" -#: utils/adt/formatting.c:4500 +#: utils/adt/formatting.c:4247 #, c-format msgid "timestamptz out of range" msgstr "timestamptzの範囲外です" -#: utils/adt/formatting.c:4528 +#: utils/adt/formatting.c:4275 #, c-format msgid "datetime format is zoned but not timed" msgstr "datetimeフォーマットで時間帯は指定されていますが、時刻が指定されていません" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4324 #, c-format msgid "missing time zone in input string for type timetz" msgstr "timetz型に対する入力文字列中に時間帯がありません" -#: utils/adt/formatting.c:4583 +#: utils/adt/formatting.c:4330 #, c-format msgid "timetz out of range" msgstr "timetzの範囲外です" -#: utils/adt/formatting.c:4609 +#: utils/adt/formatting.c:4356 #, c-format msgid "datetime format is not dated and not timed" msgstr "datetimeフォーマットで日付は指定されていますが、時間が指定されていません" -#: utils/adt/formatting.c:4786 +#: utils/adt/formatting.c:4533 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "12時間形式では\"%d\"時は不正です" -#: utils/adt/formatting.c:4788 +#: utils/adt/formatting.c:4535 #, 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:4712 #, c-format msgid "cannot calculate day of year without year information" msgstr "年の情報なしでは年内の日数は計算できません" -#: utils/adt/formatting.c:5852 +#: utils/adt/formatting.c:5833 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\"は入力としてサポートしていません" -#: utils/adt/formatting.c:5864 +#: utils/adt/formatting.c:6110 #, c-format -msgid "\"RN\" not supported for input" -msgstr "\"RN\"は入力としてサポートしていません" +msgid "invalid Roman numeral" +msgstr "不正なローマ数字" #: utils/adt/genfile.c:84 #, c-format @@ -24795,7 +25817,7 @@ msgstr "絶対パスは許可されていません" msgid "path must be in or below the data directory" msgstr "パスはデータディレクトリ内もしくはより下層でなければなりません" -#: utils/adt/genfile.c:114 utils/adt/oracle_compat.c:190 utils/adt/oracle_compat.c:288 utils/adt/oracle_compat.c:839 utils/adt/oracle_compat.c:1142 +#: utils/adt/genfile.c:114 utils/adt/oracle_compat.c:206 utils/adt/oracle_compat.c:304 utils/adt/oracle_compat.c:855 utils/adt/oracle_compat.c:1158 #, c-format msgid "requested length too large" msgstr "要求した長さが長すぎます" @@ -24810,11 +25832,6 @@ msgstr "ファイル\"%s\"をシークできませんでした: %m" msgid "file length too large" msgstr "ファイルが大きすぎます" -#: utils/adt/genfile.c:656 -#, c-format -msgid "tablespace with OID %u does not exist" -msgstr "OID %uのテーブル空間は存在しません" - #: utils/adt/geo_ops.c:998 utils/adt/geo_ops.c:1052 #, c-format msgid "invalid line specification: A and B cannot both be zero" @@ -24865,13 +25882,13 @@ msgstr "少なくとも2ポイントを要求しなければなりません" 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:1767 utils/adt/timestamp.c:6708 utils/adt/timestamp.c:6794 #, 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:4645 utils/adt/rangetypes.c:1599 utils/adt/rangetypes.c:1612 utils/adt/varbit.c:1676 utils/adt/varlena.c:4143 #, c-format msgid "bigint out of range" msgstr "bigintの範囲外です" @@ -24881,48 +25898,48 @@ msgstr "bigintの範囲外です" msgid "OID out of range" msgstr "OIDの範囲外です" -#: utils/adt/json.c:202 utils/adt/jsonb.c:664 +#: utils/adt/json.c:204 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "キー値は配列でも複合型でもJSONでもなく、スカラでなくてはなりません" -#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 +#: utils/adt/json.c:1043 utils/adt/json.c:1053 utils/fmgr/funcapi.c:2090 #, c-format 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:1076 utils/adt/json.c:1275 utils/adt/json.c:1457 utils/adt/json.c:1531 utils/adt/jsonb.c:1333 utils/adt/jsonb.c:1423 #, c-format msgid "null value not allowed for object key" msgstr "オブジェクトキーにnullは使えません" -#: utils/adt/json.c:1110 utils/adt/json.c:1274 +#: utils/adt/json.c:1126 utils/adt/json.c:1297 #, 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:1235 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:1237 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:1435 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "配列は最低でも2つの列が必要です" -#: utils/adt/json.c:1502 utils/adt/jsonb.c:1412 +#: utils/adt/json.c:1520 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:1850 utils/adt/jsonb_util.c:1963 #, c-format msgid "duplicate JSON object key value" msgstr "JSONオブジェクトキー値の重複" @@ -24987,22 +26004,22 @@ msgstr "jsonbオブジェクトは%s型へはキャストできません" msgid "cannot cast jsonb array or object to type %s" msgstr "jsonbの配列またはオブジェクトは%s型へはキャストできません" -#: utils/adt/jsonb_util.c:756 +#: utils/adt/jsonb_util.c:763 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "jsonbオブジェクトペア数が許された最大の値(%zu)を上回っています" -#: utils/adt/jsonb_util.c:797 +#: utils/adt/jsonb_util.c:804 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "jsonbの配列要素の数が許された最大の値(%zu)を上回っています" -#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 +#: utils/adt/jsonb_util.c:1678 utils/adt/jsonb_util.c:1698 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" msgstr "jsonb配列全体のサイズが最大値%dバイトを超えています" -#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 utils/adt/jsonb_util.c:1807 +#: utils/adt/jsonb_util.c:1759 utils/adt/jsonb_util.c:1794 utils/adt/jsonb_util.c:1814 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" msgstr "jsonbオブジェクト要素全体のサイズが最大値%dを超えています" @@ -25037,204 +26054,204 @@ msgstr "jsonb添字はテキスト型でなければなりません" msgid "jsonb subscript in assignment must not be null" msgstr "代入におけるjsonb添え字はnullにはできません" -#: 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:585 utils/adt/jsonfuncs.c:832 utils/adt/jsonfuncs.c:2441 utils/adt/jsonfuncs.c:3017 utils/adt/jsonfuncs.c:3950 utils/adt/jsonfuncs.c:4297 #, 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:590 utils/adt/jsonfuncs.c:817 utils/adt/jsonfuncs.c:3019 utils/adt/jsonfuncs.c:3937 #, c-format msgid "cannot call %s on an array" msgstr "配列に対して%sを呼び出すことはできません" -#: utils/adt/jsonfuncs.c:723 +#: utils/adt/jsonfuncs.c:726 #, 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:1885 utils/adt/jsonfuncs.c:1922 #, 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:1889 utils/adt/jsonfuncs.c:1908 #, c-format msgid "cannot get array length of a non-array" msgstr "配列では無いものから配列長を得ることはできません" -#: utils/adt/jsonfuncs.c:1985 +#: utils/adt/jsonfuncs.c:1988 #, c-format msgid "cannot call %s on a non-object" msgstr "非オブジェクトに対して%sは呼び出せません" -#: utils/adt/jsonfuncs.c:2173 +#: utils/adt/jsonfuncs.c:2176 #, c-format msgid "cannot deconstruct an array as an object" msgstr "配列をオブジェクトとして再構築することはできません" -#: utils/adt/jsonfuncs.c:2187 +#: utils/adt/jsonfuncs.c:2190 #, c-format msgid "cannot deconstruct a scalar" msgstr "スカラを再構築することはできません" -#: utils/adt/jsonfuncs.c:2232 +#: utils/adt/jsonfuncs.c:2235 #, c-format msgid "cannot extract elements from a scalar" msgstr "スカラから要素を取り出すことはできません" -#: utils/adt/jsonfuncs.c:2236 +#: utils/adt/jsonfuncs.c:2239 #, c-format msgid "cannot extract elements from an object" msgstr "オブジェクトから要素を取り出すことはできません" -#: utils/adt/jsonfuncs.c:2423 utils/adt/jsonfuncs.c:4151 +#: utils/adt/jsonfuncs.c:2426 utils/adt/jsonfuncs.c:4175 #, 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:2517 utils/adt/jsonfuncs.c:2522 utils/adt/jsonfuncs.c:2540 utils/adt/jsonfuncs.c:2546 #, c-format msgid "expected JSON array" msgstr "JSON配列を期待していました" -#: utils/adt/jsonfuncs.c:2515 +#: utils/adt/jsonfuncs.c:2518 #, c-format msgid "See the value of key \"%s\"." msgstr "キー\"%s\"の値を見てください。" -#: utils/adt/jsonfuncs.c:2538 +#: utils/adt/jsonfuncs.c:2541 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "キー\"%s\"の配列要素%sを見てください。" -#: utils/adt/jsonfuncs.c:2544 +#: utils/adt/jsonfuncs.c:2547 #, c-format msgid "See the array element %s." msgstr "配列要素%sを見てください。" -#: utils/adt/jsonfuncs.c:2596 +#: utils/adt/jsonfuncs.c:2599 #, 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:3649 #, 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:3673 #, c-format msgid "could not determine row type for result of %s" msgstr "%sの結果に対応する行の型を決定できませんでした" -#: utils/adt/jsonfuncs.c:3651 +#: utils/adt/jsonfuncs.c:3675 #, c-format msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." msgstr "非NULLのレコード引数を与えるか、列定義リストを用いてこの関数をFROM句中で呼び出してください。" -#: utils/adt/jsonfuncs.c:4037 utils/fmgr/funcapi.c:94 +#: utils/adt/jsonfuncs.c:4061 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:4192 utils/adt/jsonfuncs.c:4276 #, c-format msgid "argument of %s must be an array of objects" msgstr "%sの引数はオブジェクト配列でなければなりません" -#: utils/adt/jsonfuncs.c:4201 +#: utils/adt/jsonfuncs.c:4225 #, 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:4680 utils/adt/jsonfuncs.c:4739 utils/adt/jsonfuncs.c:4819 #, c-format msgid "cannot delete from scalar" msgstr "スカラから削除することはできません" -#: utils/adt/jsonfuncs.c:4778 +#: utils/adt/jsonfuncs.c:4824 #, 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:4892 utils/adt/jsonfuncs.c:5051 #, c-format msgid "cannot set path in scalar" msgstr "スカラにパスを設定することはできません" -#: utils/adt/jsonfuncs.c:4887 utils/adt/jsonfuncs.c:4929 +#: utils/adt/jsonfuncs.c:4933 utils/adt/jsonfuncs.c:4975 #, c-format msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" msgstr "null_value_treatment は \"delete_key\", \"return_target\", \"use_json_null\" または \"raise_exception\"である必要があります" -#: utils/adt/jsonfuncs.c:4900 +#: utils/adt/jsonfuncs.c:4946 #, c-format msgid "JSON value must not be null" msgstr "JSON値はnullではあってはなりません" -#: utils/adt/jsonfuncs.c:4901 +#: utils/adt/jsonfuncs.c:4947 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "null_value_treatmentが\"raise_exception\"であるため、例外が出力されました" -#: utils/adt/jsonfuncs.c:4902 +#: utils/adt/jsonfuncs.c:4948 #, c-format msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." msgstr "これを避けるには、 null_value_treatment引数を変更するか、SQLのNULLを渡さないようにしてください。" -#: utils/adt/jsonfuncs.c:4957 +#: utils/adt/jsonfuncs.c:5003 #, c-format msgid "cannot delete path in scalar" msgstr "スカラでパスを削除することはできません" -#: utils/adt/jsonfuncs.c:5171 +#: utils/adt/jsonfuncs.c:5217 #, c-format msgid "path element at position %d is null" msgstr "位置%dのパス要素がnullです" -#: utils/adt/jsonfuncs.c:5190 utils/adt/jsonfuncs.c:5221 utils/adt/jsonfuncs.c:5294 +#: utils/adt/jsonfuncs.c:5236 utils/adt/jsonfuncs.c:5267 utils/adt/jsonfuncs.c:5340 #, c-format msgid "cannot replace existing key" msgstr "既存のキーを置き換えることはできません" -#: utils/adt/jsonfuncs.c:5191 utils/adt/jsonfuncs.c:5222 +#: utils/adt/jsonfuncs.c:5237 utils/adt/jsonfuncs.c:5268 #, 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:5341 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "jsonb_set関数を使ってキー値を置き換えることを試してください。" -#: utils/adt/jsonfuncs.c:5399 +#: utils/adt/jsonfuncs.c:5445 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "位置%dのパス要素が整数ではありません: \"%s\"" -#: utils/adt/jsonfuncs.c:5416 +#: utils/adt/jsonfuncs.c:5462 #, c-format msgid "path element at position %d is out of range: %d" msgstr "位置%dのパス要素は範囲外です: %d" -#: utils/adt/jsonfuncs.c:5568 +#: utils/adt/jsonfuncs.c:5614 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "間違ったフラグのタイプ; 配列およびスカラのみ使用可能です" -#: utils/adt/jsonfuncs.c:5575 +#: utils/adt/jsonfuncs.c:5621 #, 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:5622 utils/adt/jsonfuncs.c:5644 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "使用可能な値は: \"string\", \"numeric\", \"boolean\", \"key\"、および \"all\"。" -#: utils/adt/jsonfuncs.c:5596 +#: utils/adt/jsonfuncs.c:5642 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "フラグ配列内の間違ったフラグ値: \"%s\"" @@ -25249,214 +26266,194 @@ msgstr "ルート式では@を使用できません" msgid "LAST is allowed only in array subscripts" msgstr "LAST は配列の添え字でのみ使用可能です" -#: utils/adt/jsonpath_exec.c:491 +#: utils/adt/jsonpath_exec.c:489 #, c-format msgid "single boolean result is expected" msgstr "単一のブール値の結果が必要です" -#: utils/adt/jsonpath_exec.c:851 +#: utils/adt/jsonpath_exec.c:849 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" msgstr "jsonpath ワイルドカード配列アクセサは配列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:874 +#: utils/adt/jsonpath_exec.c:872 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "jsonpathワイルドカードメンバアクセサはオブジェクトに対してのみ適用可能です" -#: utils/adt/jsonpath_exec.c:923 +#: utils/adt/jsonpath_exec.c:921 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "jsonpath配列の添え字が範囲外です" -#: utils/adt/jsonpath_exec.c:980 +#: utils/adt/jsonpath_exec.c:978 #, c-format msgid "jsonpath array accessor can only be applied to an array" msgstr "jsonpath 配列アクセサは配列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:1044 +#: utils/adt/jsonpath_exec.c:1042 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSONオブジェクトはキー\"%s\"を含んでいません" -#: utils/adt/jsonpath_exec.c:1056 +#: utils/adt/jsonpath_exec.c:1054 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "jsonpathメンバアクセサはオブジェクトに対してのみ適用可能です" -#: utils/adt/jsonpath_exec.c:1114 +#: utils/adt/jsonpath_exec.c:1112 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "jsonpath 項目メソッド .%s() は配列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:1167 utils/adt/jsonpath_exec.c:1193 +#: utils/adt/jsonpath_exec.c:1165 utils/adt/jsonpath_exec.c:1191 utils/adt/jsonpath_exec.c:1279 utils/adt/jsonpath_exec.c:1304 utils/adt/jsonpath_exec.c:1356 utils/adt/jsonpath_exec.c:1376 utils/adt/jsonpath_exec.c:1438 utils/adt/jsonpath_exec.c:1527 utils/adt/jsonpath_exec.c:1560 utils/adt/jsonpath_exec.c:1584 #, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type double precision" -msgstr "jsonpath項目メソッド .%2$s() の引数\"%1$s\"がdouble precision型に適合しません" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type %s" +msgstr "jsonpath項目メソッド .%2$s() の引数\"%1$s\"が型%3$sに適合しません" -#: utils/adt/jsonpath_exec.c:1172 utils/adt/jsonpath_exec.c:1198 utils/adt/jsonpath_exec.c:1414 utils/adt/jsonpath_exec.c:1446 +#: utils/adt/jsonpath_exec.c:1170 utils/adt/jsonpath_exec.c:1196 utils/adt/jsonpath_exec.c:1413 utils/adt/jsonpath_exec.c:1445 #, c-format msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" msgstr "NaNとInifinityはjsonpath項目メソッド .%s() では使用できません" -#: utils/adt/jsonpath_exec.c:1211 utils/adt/jsonpath_exec.c:1313 utils/adt/jsonpath_exec.c:1455 utils/adt/jsonpath_exec.c:1593 +#: utils/adt/jsonpath_exec.c:1209 utils/adt/jsonpath_exec.c:1312 utils/adt/jsonpath_exec.c:1454 utils/adt/jsonpath_exec.c:1592 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "jsonpath 項目メソッド .%s() は文字列または数値にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 -#, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" -msgstr "jsonpath項目メソッド .%2$s() の引数\"%1$s\"がbigint型に適合しません" - -#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 +#: utils/adt/jsonpath_exec.c:1385 #, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" -msgstr "jsonpath項目メソッド .%2$s() の引数\"%1$s\"がboolean型に適合しません" - -#: 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 "jsonpath 項目メソッド .%s() は真偽値、文字列または数値にのみ適用可能です" -#: 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 "jsonpath項目メソッド .%2$s() の引数\"%1$s\"がnumeric型に適合しません" - -#: utils/adt/jsonpath_exec.c:1487 +#: utils/adt/jsonpath_exec.c:1486 #, c-format msgid "precision of jsonpath item method .%s() is out of range for type integer" msgstr "JSONパス項目メソッド .%s() の精度がinteger型の範囲外です" -#: utils/adt/jsonpath_exec.c:1501 +#: utils/adt/jsonpath_exec.c:1500 #, c-format msgid "scale of jsonpath item method .%s() is out of range for type integer" msgstr "JSONパス項目メソッド .%s() のスケールがinteger型の範囲外です" -#: utils/adt/jsonpath_exec.c:1561 utils/adt/jsonpath_exec.c:1585 +#: utils/adt/jsonpath_exec.c:1647 #, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type integer" -msgstr "jsonpath項目メソッド .%2$s() の引数\"%1$s\"がinteger型に適合しません" - -#: utils/adt/jsonpath_exec.c:1664 -#, 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 "jsonpath 項目メソッド .%s() は真偽値、文字列、数値、または日時値にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:2153 +#: utils/adt/jsonpath_exec.c:2136 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "jsonpath演算子 %s の左辺値が単一の数値ではありません" -#: utils/adt/jsonpath_exec.c:2160 +#: utils/adt/jsonpath_exec.c:2143 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "jsonpath演算子 %s の右辺値が単一の数値ではありません" -#: utils/adt/jsonpath_exec.c:2228 +#: utils/adt/jsonpath_exec.c:2211 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "単項jsonpath演算子 %s のオペランドが数値ではありません" -#: utils/adt/jsonpath_exec.c:2327 +#: utils/adt/jsonpath_exec.c:2310 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "jsonpath 項目メソッド .%s() は数値にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:2373 +#: utils/adt/jsonpath_exec.c:2356 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "jsonpath 項目メソッド .%s() は文字列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:2466 +#: utils/adt/jsonpath_exec.c:2449 #, c-format msgid "time precision of jsonpath item method .%s() is out of range for type integer" msgstr "JSONパス項目メソッド .%s() の日付時刻精度がinteger型の範囲外です" -#: utils/adt/jsonpath_exec.c:2500 utils/adt/jsonpath_exec.c:2506 utils/adt/jsonpath_exec.c:2533 utils/adt/jsonpath_exec.c:2561 utils/adt/jsonpath_exec.c:2614 utils/adt/jsonpath_exec.c:2665 utils/adt/jsonpath_exec.c:2721 +#: utils/adt/jsonpath_exec.c:2483 utils/adt/jsonpath_exec.c:2489 utils/adt/jsonpath_exec.c:2516 utils/adt/jsonpath_exec.c:2544 utils/adt/jsonpath_exec.c:2597 utils/adt/jsonpath_exec.c:2648 utils/adt/jsonpath_exec.c:2719 #, c-format msgid "%s format is not recognized: \"%s\"" msgstr "%sの書式を認識できません: \"%s\"" -#: utils/adt/jsonpath_exec.c:2502 +#: utils/adt/jsonpath_exec.c:2485 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "datetimeテンプレート引数を使って入力データフォーマットを指定してください。" -#: utils/adt/jsonpath_exec.c:2695 utils/adt/jsonpath_exec.c:2751 +#: utils/adt/jsonpath_exec.c:2678 utils/adt/jsonpath_exec.c:2759 #, c-format msgid "time precision of jsonpath item method .%s() is invalid" msgstr "jsonpath項目メソッド .%s() の日付時刻精度が不正です" -#: utils/adt/jsonpath_exec.c:2831 +#: utils/adt/jsonpath_exec.c:2839 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "jsonpath項目メソッド .%s() はオブジェクトに対してのみ適用可能です" -#: utils/adt/jsonpath_exec.c:3114 +#: utils/adt/jsonpath_exec.c:3123 #, c-format msgid "could not convert value of type %s to jsonpath" msgstr "型%sの値のjsonpathへ変換ができませんでした" -#: utils/adt/jsonpath_exec.c:3148 +#: utils/adt/jsonpath_exec.c:3157 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "jsonpath変数\"%s\"が見つかりませんでした" -#: utils/adt/jsonpath_exec.c:3201 +#: utils/adt/jsonpath_exec.c:3210 #, c-format msgid "\"vars\" argument is not an object" msgstr "引数\"vars\"がオブジェクトではありません" -#: utils/adt/jsonpath_exec.c:3202 +#: utils/adt/jsonpath_exec.c:3211 #, c-format msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." msgstr "Jsonpath パラメータは \"vars\"オブジェクトの key-value ペアの形にエンコードされていなければなりません。" -#: utils/adt/jsonpath_exec.c:3465 +#: utils/adt/jsonpath_exec.c:3474 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "jsonpath配列添え字が単一の数値ではありません" -#: utils/adt/jsonpath_exec.c:3477 +#: utils/adt/jsonpath_exec.c:3486 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "jsonpath配列の添え字が整数の範囲外です" -#: utils/adt/jsonpath_exec.c:3661 +#: utils/adt/jsonpath_exec.c:3670 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "時間帯を使用せずに%sから%sへの値の変換はできません" -#: utils/adt/jsonpath_exec.c:3663 +#: utils/adt/jsonpath_exec.c:3672 #, c-format msgid "Use *_tz() function for time zone support." msgstr "*_tz() 関数を使用することで時間帯がサポートされます。" -#: utils/adt/jsonpath_exec.c:3957 +#: utils/adt/jsonpath_exec.c:3980 #, c-format -msgid "JSON path expression for column \"%s\" should return single item without wrapper" -msgstr "列\"%s\"に対するJSONパス式はラッパーなしの単一要素を返却する必要があります" +msgid "JSON path expression for column \"%s\" must return single item when no wrapper is requested" +msgstr "ラッパーが要求されていない場合は、列\"%s\"に対するJSONパス式は単一要素を返却する必要があります" -#: utils/adt/jsonpath_exec.c:3959 utils/adt/jsonpath_exec.c:3964 +#: utils/adt/jsonpath_exec.c:3982 utils/adt/jsonpath_exec.c:3987 #, 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 "SQL/JSON要素列を配列にまとめるにはWITH WRAPPER句を使用してください。" -#: utils/adt/jsonpath_exec.c:3963 +#: utils/adt/jsonpath_exec.c:3986 #, c-format -msgid "JSON path expression in JSON_QUERY should return single item without wrapper" -msgstr "JSON_QUERY中のJSONパス式はラッパーなしの単一要素を返却する必要があります" +msgid "JSON path expression in JSON_QUERY must return single item when no wrapper is requested" +msgstr "ラッパーが要求されていない場合は、JSON_QUERY中のJSONパス式は単一要素を返却する必要があります" -#: utils/adt/jsonpath_exec.c:4021 utils/adt/jsonpath_exec.c:4045 +#: utils/adt/jsonpath_exec.c:4044 utils/adt/jsonpath_exec.c:4068 #, 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 "列\"%s\"に対するJSONパス式は単一のスカラー要素を返却する必要があります" -#: utils/adt/jsonpath_exec.c:4026 utils/adt/jsonpath_exec.c:4050 +#: utils/adt/jsonpath_exec.c:4049 utils/adt/jsonpath_exec.c:4073 #, 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 "JSON_VALUE中のJSONパス式は単一のスカラー要素を返却する必要があります" #: utils/adt/levenshtein.c:132 @@ -25464,42 +26461,42 @@ msgstr "JSON_VALUE中のJSONパス式は単一のスカラー要素を返却す msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "レーベンシュタイン距離関数の引数の長さが上限の%d文字を超えています" -#: utils/adt/like.c:159 +#: utils/adt/like.c:162 #, c-format -msgid "nondeterministic collations are not supported for LIKE" -msgstr "非決定的照合順序はLIKEではサポートされません" +msgid "could not determine which collation to use for LIKE" +msgstr "LIKE で使用する照合順序を特定できませんでした" -#: utils/adt/like.c:188 utils/adt/like_support.c:1023 +#: utils/adt/like.c:193 utils/adt/like_support.c:1019 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "ILIKE で使用する照合順序を特定できませんでした" -#: utils/adt/like.c:200 +#: utils/adt/like.c:202 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "非決定的照合順序はILIKEではサポートされません" -#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 +#: utils/adt/like_match.c:107 utils/adt/like_match.c:169 utils/adt/like_match.c:237 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "LIKE パターンはエスケープ文字で終わってはなりません" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 +#: utils/adt/like_match.c:437 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "不正なエスケープ文字列" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:438 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "エスケープ文字は空か1文字でなければなりません。" -#: utils/adt/like_support.c:1013 +#: utils/adt/like_support.c:1009 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "型byteaでは大文字小文字の区別をしないマッチをサポートしません" -#: utils/adt/like_support.c:1114 +#: utils/adt/like_support.c:1106 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "型byteaでは正規表現のマッチをサポートしません" @@ -25519,11 +26516,16 @@ msgstr "macaddr8データがmacaddr型に変換するには範囲外です" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "左から4、5バイト目にFFとFEがあるアドレス、具体的には xx:xx:xx:ff:fe:xx:xx:xx のみがmacaddr8からmacaddrに変換できます。" -#: utils/adt/mcxtfuncs.c:173 +#: utils/adt/mcxtfuncs.c:305 utils/adt/mcxtfuncs.c:391 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %dはPostgreSQLサーバープロセスではありません" +#: utils/adt/mcxtfuncs.c:480 +#, c-format +msgid "PID %d is no longer a PostgreSQL server process" +msgstr "PID %dはすでにPostgreSQLサーバープロセスではありません" + #: utils/adt/misc.c:237 #, c-format msgid "global tablespace never has databases" @@ -25633,7 +26635,7 @@ msgstr "不正なCIDR値: \"%s\"" msgid "Value has bits set to right of mask." msgstr "値ではマスクの右側のビットがセットされています。" -#: utils/adt/network.c:152 utils/adt/network.c:1184 utils/adt/network.c:1209 utils/adt/network.c:1234 +#: utils/adt/network.c:152 utils/adt/network.c:1151 utils/adt/network.c:1176 utils/adt/network.c:1201 #, c-format msgid "could not format inet value: %m" msgstr "inet値を整形できませんでした: %m" @@ -25666,157 +26668,157 @@ msgstr "\"cidr\"の外部値が不正です" msgid "invalid mask length: %d" msgstr "不正なマスク長: %d" -#: utils/adt/network.c:1252 +#: utils/adt/network.c:1219 #, c-format msgid "could not format cidr value: %m" msgstr "cidr値を整形できませんでした: %m" -#: utils/adt/network.c:1485 +#: utils/adt/network.c:1452 #, c-format msgid "cannot merge addresses from different families" msgstr "異なるファミリのアドレスは結合できません" -#: utils/adt/network.c:1893 +#: utils/adt/network.c:1860 #, c-format msgid "cannot AND inet values of different sizes" msgstr "サイズが異なるinet値のANDはできません" -#: utils/adt/network.c:1925 +#: utils/adt/network.c:1892 #, c-format msgid "cannot OR inet values of different sizes" msgstr "サイズが異なるinet値のORはできません" -#: utils/adt/network.c:1986 utils/adt/network.c:2062 +#: utils/adt/network.c:1953 utils/adt/network.c:2029 #, c-format msgid "result is out of range" msgstr "結果が範囲外です" -#: utils/adt/network.c:2027 +#: utils/adt/network.c:1994 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "サイズが異なるinet値の引き算はできません" -#: 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:795 utils/adt/numeric.c:3762 utils/adt/numeric.c:7319 utils/adt/numeric.c:7522 utils/adt/numeric.c:7994 utils/adt/numeric.c:10928 utils/adt/numeric.c:11403 utils/adt/numeric.c:11497 utils/adt/numeric.c:11632 #, c-format msgid "value overflows numeric format" msgstr "値がnumericの形式でオーバフローします" -#: utils/adt/numeric.c:1099 +#: utils/adt/numeric.c:1108 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "外部\"numeric\"の値の符号が不正です" -#: utils/adt/numeric.c:1105 +#: utils/adt/numeric.c:1114 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "外部\"numeric\"の値の位取りが不正です" -#: utils/adt/numeric.c:1114 +#: utils/adt/numeric.c:1123 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "外部\"numeric\"の値の桁が不正です" -#: utils/adt/numeric.c:1329 utils/adt/numeric.c:1343 +#: utils/adt/numeric.c:1338 utils/adt/numeric.c:1352 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "NUMERICの精度%dは1から%dまででなければなりません" -#: utils/adt/numeric.c:1334 +#: utils/adt/numeric.c:1343 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "NUMERICの位取り%dは%dから%dまでの間でなければなりません" -#: utils/adt/numeric.c:1352 +#: utils/adt/numeric.c:1361 #, c-format msgid "invalid NUMERIC type modifier" msgstr "不正なNUMERIC型の修正子" -#: utils/adt/numeric.c:1710 +#: utils/adt/numeric.c:1727 #, c-format msgid "start value cannot be NaN" msgstr "開始値はNaNにはできません" -#: utils/adt/numeric.c:1714 +#: utils/adt/numeric.c:1731 #, c-format msgid "start value cannot be infinity" msgstr "開始値は無限大にはできません" -#: utils/adt/numeric.c:1721 +#: utils/adt/numeric.c:1738 #, c-format msgid "stop value cannot be NaN" msgstr "終了値はNaNにはできません" -#: utils/adt/numeric.c:1725 +#: utils/adt/numeric.c:1742 #, c-format msgid "stop value cannot be infinity" msgstr "終了値は無限大にはできません" -#: utils/adt/numeric.c:1738 +#: utils/adt/numeric.c:1755 #, c-format msgid "step size cannot be NaN" msgstr "加算量はNaNにはできません" -#: utils/adt/numeric.c:1742 +#: utils/adt/numeric.c:1759 #, c-format msgid "step size cannot be infinity" msgstr "加算量は無限大にはできません" -#: utils/adt/numeric.c:3634 +#: utils/adt/numeric.c:3752 #, c-format msgid "factorial of a negative number is undefined" msgstr "負数の階乗は定義されていません" -#: utils/adt/numeric.c:4241 +#: utils/adt/numeric.c:4359 #, c-format msgid "lower bound cannot be NaN" msgstr "下限をNaNにすることはできません" -#: utils/adt/numeric.c:4245 +#: utils/adt/numeric.c:4363 #, c-format msgid "lower bound cannot be infinity" msgstr "下限を無限値にすることはできません" -#: utils/adt/numeric.c:4252 +#: utils/adt/numeric.c:4370 #, c-format msgid "upper bound cannot be NaN" msgstr "上限をNaNにすることはできません" -#: utils/adt/numeric.c:4256 +#: utils/adt/numeric.c:4374 #, 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:4535 utils/adt/numeric.c:4623 utils/adt/numeric.c:4683 utils/adt/numeric.c:4879 #, 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:4539 utils/adt/numeric.c:4627 utils/adt/numeric.c:4687 utils/adt/numeric.c:4883 #, c-format msgid "cannot convert infinity to %s" msgstr "無限大を%sに変換できません" -#: utils/adt/numeric.c:4774 +#: utils/adt/numeric.c:4892 #, 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:8084 utils/adt/numeric.c:8135 #, c-format msgid "numeric field overflow" msgstr "numericフィールドのオーバーフロー" -#: utils/adt/numeric.c:7967 +#: utils/adt/numeric.c:8085 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "精度%d、位取り%dを持つフィールドは、%s%dより小さな絶対値に丸められます。" -#: utils/adt/numeric.c:8018 +#: utils/adt/numeric.c:8136 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "精度%d、位取り%dを持つフィールドは、無限大値を格納できません。" -#: utils/adt/numeric.c:11342 utils/adt/pseudorandomfuncs.c:135 utils/adt/pseudorandomfuncs.c:159 +#: utils/adt/numeric.c:11701 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 "下限は上限と同じあるいはより小さい必要があります" @@ -25826,27 +26828,27 @@ msgstr "下限は上限と同じあるいはより小さい必要があります msgid "invalid oidvector data" msgstr "不正なoidvectorデータ" -#: utils/adt/oracle_compat.c:976 +#: utils/adt/oracle_compat.c:992 #, c-format msgid "requested character too large" msgstr "要求された文字が大きすぎます" -#: utils/adt/oracle_compat.c:1020 +#: utils/adt/oracle_compat.c:1036 #, c-format msgid "character number must be positive" msgstr "文字番号は正数でなければなりません" -#: utils/adt/oracle_compat.c:1024 +#: utils/adt/oracle_compat.c:1040 #, c-format msgid "null character not permitted" msgstr "NULL文字は許可されません" -#: utils/adt/oracle_compat.c:1042 utils/adt/oracle_compat.c:1095 +#: utils/adt/oracle_compat.c:1058 utils/adt/oracle_compat.c:1111 #, c-format msgid "requested character too large for encoding: %u" msgstr "要求された文字は符号化するには大きすぎます: %u" -#: utils/adt/oracle_compat.c:1083 +#: utils/adt/oracle_compat.c:1099 #, c-format msgid "requested character not valid for encoding: %u" msgstr "要求された文字は符号化方式に対して不正です: %u" @@ -25856,137 +26858,147 @@ msgstr "要求された文字は符号化方式に対して不正です: %u" msgid "percentile value %g is not between 0 and 1" msgstr "百分位数の値%gが0と1の間ではありません" -#: utils/adt/pg_locale.c:1484 -#, c-format -msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" -msgstr "ルール\"%2$s\"を持つロケール\"%1$s\"の照合器をオープンできませんでした: %3$s" - -#: utils/adt/pg_locale.c:1495 utils/adt/pg_locale.c:2969 utils/adt/pg_locale.c:3042 -#, c-format -msgid "ICU is not supported in this build" -msgstr "このビルドではICUはサポートされていません" - -#: utils/adt/pg_locale.c:1523 -#, c-format -msgid "could not create locale \"%s\": %m" -msgstr "ロケール\"%s\"を作成できませんでした: %m" - -#: utils/adt/pg_locale.c:1526 -#, c-format -msgid "The operating system could not find any locale data for the locale name \"%s\"." -msgstr "オペレーティングシステムはロケール名\"%s\"のロケールデータを見つけられませんでした。" - -#: utils/adt/pg_locale.c:1647 +#: utils/adt/pg_locale.c:303 utils/adt/pg_locale.c:335 #, c-format -msgid "collations with different collate and ctype values are not supported on this platform" -msgstr "このプラットフォームでは値が異なるcollateとctypeによる照合順序をサポートしていません" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "ロケール名\"%s\"は不正な非ASCII文字を含んでいます" -#: utils/adt/pg_locale.c:1694 +#: utils/adt/pg_locale.c:1119 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "照合順序\"%s\"には実際のバージョンがありませんが、バージョンが記録されています" -#: utils/adt/pg_locale.c:1700 +#: utils/adt/pg_locale.c:1125 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "照合順序\"%s\"でバージョンの不一致が起きています" -#: utils/adt/pg_locale.c:1702 +#: utils/adt/pg_locale.c:1127 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "データベース中の照合順序はバージョン%sで作成されていますが、オペレーティングシステムはバージョン%sを提供しています。" -#: utils/adt/pg_locale.c:1705 +#: utils/adt/pg_locale.c:1130 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "この照合順序の影響を受ける全てのオブジェクトを再構築して、ALTER COLLATION %s REFRESH VERSIONを実行するか、正しいバージョンのライブラリを用いてPostgreSQLをビルドしてください。" -#: utils/adt/pg_locale.c:1749 utils/adt/pg_locale.c:2533 utils/adt/pg_locale.c:2558 +#: utils/adt/pg_locale.c:1481 utils/adt/pg_locale.c:1508 utils/adt/pg_locale_builtin.c:186 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "ロケール名\"%s\"は組み込みプロバイダでは不正です" -#: utils/adt/pg_locale.c:1791 +#: utils/adt/pg_locale.c:1573 #, c-format -msgid "could not load locale \"%s\"" -msgstr "ロケール\"%s\"をロードできませんでした" +msgid "could not convert locale name \"%s\" to language tag: %s" +msgstr "ロケール名\"%s\"を、言語タグに変換できませんでした: %s" -#: utils/adt/pg_locale.c:1816 +#: utils/adt/pg_locale.c:1582 utils/adt/pg_locale.c:1657 utils/adt/pg_locale_icu.c:221 #, c-format -msgid "could not get collation version for locale \"%s\": error code %lu" -msgstr "ロケール\"%s\"に対応する照合順序バージョンを取得できませんでした: エラーコード %lu" +msgid "ICU is not supported in this build" +msgstr "このビルドではICUはサポートされていません" -#: utils/adt/pg_locale.c:1872 utils/adt/pg_locale.c:1885 +#: utils/adt/pg_locale.c:1615 #, c-format -msgid "could not convert string to UTF-16: error code %lu" -msgstr "文字列をUTF-16に変換できませんでした: エラーコード %lu" +msgid "could not get language from ICU locale \"%s\": %s" +msgstr "ICUロケール\"%s\"から言語を取得できませんでした: %s" -#: utils/adt/pg_locale.c:1897 +#: utils/adt/pg_locale.c:1617 utils/adt/pg_locale.c:1647 #, c-format -msgid "could not compare Unicode strings: %m" -msgstr "Unicode文字列を比較できませんでした: %m" +msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." +msgstr "ICUロケールを無効にするには、パラメータ\"%s\"を\"%s\"に設定してください。" + +#: utils/adt/pg_locale.c:1645 +#, c-format +msgid "ICU locale \"%s\" has unknown language \"%s\"" +msgstr "ICUロケール\"%s\"には未知の言語\"%s\"が含まれています" + +#: utils/adt/pg_locale_icu.c:270 +#, c-format +msgid "could not get language from locale \"%s\": %s" +msgstr "ロケール\"%s\"から言語を取得できませんでした: %s" + +#: utils/adt/pg_locale_icu.c:292 utils/adt/pg_locale_icu.c:309 +#, c-format +msgid "could not open collator for locale \"%s\": %s" +msgstr "ロケール\"%s\"の照合器をオープンできませんでした: %s" -#: utils/adt/pg_locale.c:2071 +#: utils/adt/pg_locale_icu.c:380 +#, c-format +msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" +msgstr "ルール\"%2$s\"を持つロケール\"%1$s\"の照合器をオープンできませんでした: %3$s" + +#: utils/adt/pg_locale_icu.c:494 #, c-format msgid "collation failed: %s" msgstr "照合順序による比較に失敗しました: %s" -#: utils/adt/pg_locale.c:2290 utils/adt/pg_locale.c:2322 +#: utils/adt/pg_locale_icu.c:573 utils/adt/pg_locale_icu.c:837 #, c-format msgid "sort key generation failed: %s" msgstr "ソートキーの生成に失敗しました: %s" -#: utils/adt/pg_locale.c:2612 +#: utils/adt/pg_locale_icu.c:647 utils/adt/pg_locale_icu.c:659 utils/adt/pg_locale_icu.c:884 utils/adt/pg_locale_icu.c:905 #, c-format -msgid "could not get language from locale \"%s\": %s" -msgstr "ロケール\"%s\"から言語を取得できませんでした: %s" +msgid "%s failed: %s" +msgstr "%s が失敗しました: %s" -#: utils/adt/pg_locale.c:2633 utils/adt/pg_locale.c:2649 +#: utils/adt/pg_locale_icu.c:688 #, c-format -msgid "could not open collator for locale \"%s\": %s" -msgstr "ロケール\"%s\"の照合器をオープンできませんでした: %s" +msgid "case conversion failed: %s" +msgstr "文字ケースの変換に失敗しました: %s" -#: utils/adt/pg_locale.c:2674 +#: utils/adt/pg_locale_icu.c:857 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "エンコーディング\"%s\"はICUではサポートされていません" -#: utils/adt/pg_locale.c:2681 +#: utils/adt/pg_locale_icu.c:864 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "エンコーディング\"%s\"のICU変換器をオープンできませんでした: %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_libc.c:553 #, c-format -msgid "%s failed: %s" -msgstr "%s が失敗しました: %s" +msgid "collations with different collate and ctype values are not supported on this platform" +msgstr "このプラットフォームでは値が異なるcollateとctypeによる照合順序をサポートしていません" -#: utils/adt/pg_locale.c:2960 +#: utils/adt/pg_locale_libc.c:683 #, c-format -msgid "could not convert locale name \"%s\" to language tag: %s" -msgstr "ロケール名\"%s\"を、言語タグに変換できませんでした: %s" +msgid "could not load locale \"%s\"" +msgstr "ロケール\"%s\"をロードできませんでした" -#: utils/adt/pg_locale.c:3001 +#: utils/adt/pg_locale_libc.c:708 #, c-format -msgid "could not get language from ICU locale \"%s\": %s" -msgstr "ICUロケール\"%s\"から言語を取得できませんでした: %s" +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "ロケール\"%s\"に対応する照合順序バージョンを取得できませんでした: エラーコード %lu" -#: utils/adt/pg_locale.c:3003 utils/adt/pg_locale.c:3032 +#: utils/adt/pg_locale_libc.c:771 utils/adt/pg_locale_libc.c:784 #, c-format -msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." -msgstr "ICUロケールを無効にするには、パラメータ\"%s\"を\"%s\"に設定してください。" +msgid "could not convert string to UTF-16: error code %lu" +msgstr "文字列をUTF-16に変換できませんでした: エラーコード %lu" -#: utils/adt/pg_locale.c:3030 +#: utils/adt/pg_locale_libc.c:793 #, c-format -msgid "ICU locale \"%s\" has unknown language \"%s\"" -msgstr "ICUロケール\"%s\"には未知の言語\"%s\"が含まれています" +msgid "could not compare Unicode strings: %m" +msgstr "Unicode文字列を比較できませんでした: %m" -#: utils/adt/pg_locale.c:3181 +#: utils/adt/pg_locale_libc.c:825 +#, c-format +msgid "could not create locale \"%s\": %m" +msgstr "ロケール\"%s\"を作成できませんでした: %m" + +#: utils/adt/pg_locale_libc.c:828 +#, c-format +msgid "The operating system could not find any locale data for the locale name \"%s\"." +msgstr "オペレーティングシステムはロケール名\"%s\"のロケールデータを見つけられませんでした。" + +#: utils/adt/pg_locale_libc.c:1000 #, c-format msgid "invalid multibyte character for locale" msgstr "ロケールに対する不正なマルチバイト文字" -#: utils/adt/pg_locale.c:3182 +#: utils/adt/pg_locale_libc.c:1001 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "おそらくサーバーのLC_CTYPEロケールはデータベースの符号化方式と互換性がありません" @@ -26001,27 +27013,27 @@ msgstr "pg_lsnにNaNは加算できません" msgid "cannot subtract NaN from pg_lsn" msgstr "pg_lsnからNaNは減算できません" -#: utils/adt/pg_upgrade_support.c:39 +#: utils/adt/pg_upgrade_support.c:38 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "関数はサーバーがバイナリアップグレードモードであるときのみ呼び出せます" -#: utils/adt/pgstatfuncs.c:252 +#: utils/adt/pgstatfuncs.c:280 #, c-format msgid "invalid command name: \"%s\"" msgstr "不正なコマンド名: \"%s\"" -#: utils/adt/pgstatfuncs.c:1739 +#: utils/adt/pgstatfuncs.c:1909 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "認識できないリセットターゲット: \"%s\"" -#: utils/adt/pgstatfuncs.c:1740 +#: utils/adt/pgstatfuncs.c:1910 #, c-format msgid "Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\"." msgstr "対象は\"archiver\"、\"bgwriter\"、\"checkpointer\"、\"io\"、\"recovery_prefetch\"、\"slru\"または\"wal\"でなければなりません。" -#: utils/adt/pgstatfuncs.c:1822 +#: utils/adt/pgstatfuncs.c:2027 #, c-format msgid "invalid subscription OID %u" msgstr "不正なサブスクリプションOID %u" @@ -26046,67 +27058,67 @@ msgstr "シェル型の値は受け付けられません" msgid "cannot display a value of a shell type" msgstr "シェル型の値は表示できません" -#: utils/adt/rangetypes.c:422 +#: utils/adt/rangetypes.c:424 #, c-format msgid "range constructor flags argument must not be null" msgstr "範囲コンストラクタフラグ引数はNULLではいけません" -#: utils/adt/rangetypes.c:1021 +#: utils/adt/rangetypes.c:1023 #, c-format msgid "result of range difference would not be contiguous" msgstr "範囲の差分が連続ではありません" -#: utils/adt/rangetypes.c:1082 +#: utils/adt/rangetypes.c:1084 #, c-format msgid "result of range union would not be contiguous" msgstr "範囲の和が連続ではありません" -#: utils/adt/rangetypes.c:1757 +#: utils/adt/rangetypes.c:1821 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "範囲の下限は範囲の上限以下でなければなりません" -#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 utils/adt/rangetypes.c:2283 +#: utils/adt/rangetypes.c:2320 utils/adt/rangetypes.c:2333 utils/adt/rangetypes.c:2347 #, c-format msgid "invalid range bound flags" msgstr "不正な範囲境界フラグ" -#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 utils/adt/rangetypes.c:2284 +#: utils/adt/rangetypes.c:2321 utils/adt/rangetypes.c:2334 utils/adt/rangetypes.c:2348 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "有効な値は\"[]\"、\"[)\"、\"(]\"、\"()\"です" -#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 utils/adt/rangetypes.c:2470 +#: utils/adt/rangetypes.c:2416 utils/adt/rangetypes.c:2433 utils/adt/rangetypes.c:2448 utils/adt/rangetypes.c:2468 utils/adt/rangetypes.c:2479 utils/adt/rangetypes.c:2526 utils/adt/rangetypes.c:2534 #, c-format msgid "malformed range literal: \"%s\"" msgstr "不正な範囲リテラル: \"%s\"" -#: utils/adt/rangetypes.c:2354 +#: utils/adt/rangetypes.c:2418 #, c-format msgid "Junk after \"empty\" key word." msgstr "\"empty\"キーワードの後にゴミがあります。" -#: utils/adt/rangetypes.c:2371 +#: utils/adt/rangetypes.c:2435 #, c-format msgid "Missing left parenthesis or bracket." msgstr "左括弧または左角括弧がありません" -#: utils/adt/rangetypes.c:2386 +#: utils/adt/rangetypes.c:2450 #, c-format msgid "Missing comma after lower bound." msgstr "下限値の後にカンマがありません" -#: utils/adt/rangetypes.c:2406 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "Too many commas." msgstr "カンマが多すぎます" -#: utils/adt/rangetypes.c:2417 +#: utils/adt/rangetypes.c:2481 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "右括弧または右角括弧の後にごみがあります" -#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4475 #, c-format msgid "regular expression failed: %s" msgstr "正規表現が失敗しました: %s" @@ -26121,7 +27133,7 @@ msgstr "不正な正規表現オプション: \"%.*s\"" msgid "If you meant to use regexp_replace() with a start parameter, cast the fourth argument to integer explicitly." msgstr "regexp_replace()でパラメータstartを指定したいのであれば、4番目のパラメータを明示的に整数にキャストしてください。" -#: 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:6818 utils/misc/guc.c:6852 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "パラメータ\"%s\"の値が無効です: %d" @@ -26157,7 +27169,7 @@ msgstr "\"%s\"という名前の関数が複数あります" 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:10826 utils/adt/ruleutils.c:11039 #, c-format msgid "too many arguments" msgstr "引数が多すぎます" @@ -26167,7 +27179,7 @@ msgstr "引数が多すぎます" msgid "Provide two argument types for operator." msgstr "演算子では2つの引数型を指定してください" -#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 utils/adt/regproc.c:1815 utils/adt/varlena.c:3481 utils/adt/varlena.c:3486 #, c-format msgid "invalid name syntax" msgstr "不正な名前の構文" @@ -26192,77 +27204,92 @@ msgstr "型の名前を想定していました" msgid "improper type name" msgstr "型の名前が不適切です" -#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 utils/adt/ri_triggers.c:2601 +#: utils/adt/ri_triggers.c:314 utils/adt/ri_triggers.c:1775 utils/adt/ri_triggers.c:2774 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "テーブル\"%s\"への挿入、更新は外部キー制約\"%s\"に違反しています" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 +#: utils/adt/ri_triggers.c:317 utils/adt/ri_triggers.c:1778 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MACTH FULLではNULLキー値と非NULLキー値を混在できません" -#: utils/adt/ri_triggers.c:2036 +#: utils/adt/ri_triggers.c:2192 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "関数\"%s\"はINSERTで発火しなければなりません" -#: utils/adt/ri_triggers.c:2042 +#: utils/adt/ri_triggers.c:2198 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "関数\"%s\"はUPDATEで発火しなければなりません" -#: utils/adt/ri_triggers.c:2048 +#: utils/adt/ri_triggers.c:2204 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "関数\"%s\"はDELETEで発火しなければなりません" -#: utils/adt/ri_triggers.c:2071 +#: utils/adt/ri_triggers.c:2227 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "テーブル\"%2$s\"のトリガ\"%1$s\"用のpg_constraint項目がありません" -#: utils/adt/ri_triggers.c:2073 +#: utils/adt/ri_triggers.c:2229 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "この参照整合性トリガとその対象を削除し、ALTER TABLE ADD CONSTRAINTを実行してください" -#: utils/adt/ri_triggers.c:2426 +#: utils/adt/ri_triggers.c:2599 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "\"%3$s\"の制約\"%2$s\"から\"%1$s\"に行われた参照整合性問い合わせが想定外の結果になりました" -#: utils/adt/ri_triggers.c:2430 +#: utils/adt/ri_triggers.c:2603 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "これは概ねこの問い合わせを書き換えるルールが原因です" -#: utils/adt/ri_triggers.c:2591 +#: utils/adt/ri_triggers.c:2764 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "子テーブル \"%s\"の削除は外部キー制約\"%s\"違反となります" -#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 +#: utils/adt/ri_triggers.c:2767 utils/adt/ri_triggers.c:2806 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "キー(%s)=(%s)はまだテーブル\"%s\"から参照されています" -#: utils/adt/ri_triggers.c:2605 +#: utils/adt/ri_triggers.c:2778 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "テーブル\"%3$s\"にキー(%1$s)=(%2$s)がありません" -#: utils/adt/ri_triggers.c:2608 +#: utils/adt/ri_triggers.c:2781 #, c-format msgid "Key is not present in table \"%s\"." msgstr "テーブル\"%s\"にキーがありません。" -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2787 +#, c-format +msgid "update or delete on table \"%s\" violates RESTRICT setting of foreign key constraint \"%s\" on table \"%s\"" +msgstr "テーブル\"%1$s\"の更新または削除は、テーブル\"%3$s\"の外部キー制約\"%2$s\"のRESTRICT設定に違反しています" + +#: utils/adt/ri_triggers.c:2792 +#, c-format +msgid "Key (%s)=(%s) is referenced from table \"%s\"." +msgstr "キー(%s)=(%s)はテーブル\"%s\"から参照されています。" + +#: utils/adt/ri_triggers.c:2795 +#, c-format +msgid "Key is referenced from table \"%s\"." +msgstr "キーがテーブル\"%s\"から参照されています。" + +#: utils/adt/ri_triggers.c:2801 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "テーブル\"%1$s\"の更新または削除は、テーブル\"%3$s\"の外部キー制約\"%2$s\"に違反します" -#: utils/adt/ri_triggers.c:2622 +#: utils/adt/ri_triggers.c:2809 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "テーブル\"%s\"からキーがまだ参照されています。" @@ -26312,133 +27339,158 @@ msgstr "バイナリデータのレコードカラム%5$dで予期していた%3 msgid "improper binary format in record column %d" msgstr "レコード列%dのバイナリ書式が不適切です" -#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 utils/adt/rowtypes.c:1699 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1471 utils/adt/rowtypes.c:1717 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "レコードの列 %3$d において、全く異なる型 %1$s と %2$s では比較ができません" -#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 utils/adt/rowtypes.c:1568 utils/adt/rowtypes.c:1753 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "個数が異なる列同士ではレコード型の比較ができません" -#: utils/adt/ruleutils.c:2693 +#: utils/adt/ruleutils.c:2740 #, c-format msgid "input is a query, not an expression" msgstr "入力が式ではなく文です" -#: utils/adt/ruleutils.c:2705 +#: utils/adt/ruleutils.c:2752 #, c-format msgid "expression contains variables of more than one relation" msgstr "式が2つ以上のリレーションの変数を含んでいます" -#: utils/adt/ruleutils.c:2712 +#: utils/adt/ruleutils.c:2759 #, c-format msgid "expression contains variables" msgstr "式が変数を含んでいます" -#: utils/adt/ruleutils.c:5242 +#: utils/adt/ruleutils.c:5433 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "ルール\"%s\"はサポートしていないイベントタイプ%dを持ちます" -#: utils/adt/timestamp.c:128 +#: utils/adt/tid.c:317 +#, c-format +msgid "cannot look at latest visible tid for relation \"%s.%s\"" +msgstr "リレーション\"%s.%s\"の最新の可視TIDを参照できません" + +#: utils/adt/tid.c:356 +#, c-format +msgid "ctid isn't of type TID" +msgstr "ctidはTID型ではありません" + +#: utils/adt/tid.c:364 +#, c-format +msgid "currtid cannot handle views with no CTID" +msgstr "currtidはCTIDを持たないビューは扱えません" + +#: utils/adt/tid.c:369 +#, c-format +msgid "the view has no rules" +msgstr "このビューにはルールが設定されていません" + +#: utils/adt/tid.c:381 +#, c-format +msgid "only one select rule is allowed in views" +msgstr "ビューではSELECTルールは一つしか設定できません" + +#: utils/adt/timestamp.c:130 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "TIMESTAMP(%d)%s の精度は負であってはなりません" -#: utils/adt/timestamp.c:134 +#: utils/adt/timestamp.c:136 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%sの位取りを許容最大値%dまで減らしました" -#: utils/adt/timestamp.c:394 +#: utils/adt/timestamp.c:204 utils/adt/timestamp.c:457 +#, c-format +msgid "timestamp out of range: \"%s\"" +msgstr "timestampが範囲外です: \"%s\"" + +#: utils/adt/timestamp.c:396 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "timestamp(%d)の精度は%dから%dまででなければなりません" -#: utils/adt/timestamp.c:512 +#: utils/adt/timestamp.c:514 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "数字タイムゾーンは先頭の文字が\"-\"または\"+\"でなければなりません。" -#: utils/adt/timestamp.c:524 +#: utils/adt/timestamp.c:526 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "数値タイムゾーン\"%s\"が範囲外です" -#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 utils/adt/timestamp.c:643 +#: utils/adt/timestamp.c:626 utils/adt/timestamp.c:634 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestampが範囲外です: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:744 +#: utils/adt/timestamp.c:735 #, c-format msgid "timestamp cannot be NaN" msgstr "タイムスタンプは NaN にはできません" -#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 +#: utils/adt/timestamp.c:753 utils/adt/timestamp.c:765 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestampが範囲外です: \"%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:948 utils/adt/timestamp.c:1507 utils/adt/timestamp.c:1517 utils/adt/timestamp.c:1578 utils/adt/timestamp.c:2866 utils/adt/timestamp.c:2875 utils/adt/timestamp.c:2890 utils/adt/timestamp.c:2964 utils/adt/timestamp.c:2981 utils/adt/timestamp.c:3038 utils/adt/timestamp.c:3081 utils/adt/timestamp.c:3459 utils/adt/timestamp.c:3517 utils/adt/timestamp.c:3540 utils/adt/timestamp.c:3549 utils/adt/timestamp.c:3573 utils/adt/timestamp.c:3596 +#: utils/adt/timestamp.c:3605 utils/adt/timestamp.c:3740 utils/adt/timestamp.c:3841 utils/adt/timestamp.c:4248 utils/adt/timestamp.c:4285 utils/adt/timestamp.c:4333 utils/adt/timestamp.c:4342 utils/adt/timestamp.c:4434 utils/adt/timestamp.c:4481 utils/adt/timestamp.c:4490 utils/adt/timestamp.c:4586 utils/adt/timestamp.c:4639 utils/adt/timestamp.c:4649 utils/adt/timestamp.c:4874 utils/adt/timestamp.c:4884 utils/adt/timestamp.c:5239 #, c-format msgid "interval out of range" msgstr "intervalが範囲外です" -#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 +#: utils/adt/timestamp.c:1085 utils/adt/timestamp.c:1118 #, c-format msgid "invalid INTERVAL type modifier" msgstr "不正なINTERVAL型の修正子です" -#: utils/adt/timestamp.c:1110 +#: utils/adt/timestamp.c:1101 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d)の精度は負ではいけません" -#: utils/adt/timestamp.c:1116 +#: utils/adt/timestamp.c:1107 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d)の精度を許容最大値%dまで減らしました" -#: utils/adt/timestamp.c:1506 +#: utils/adt/timestamp.c:1497 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "interval(%d)の精度は%dから%dまででなければなりません" -#: utils/adt/timestamp.c:4189 utils/adt/timestamp.c:4226 -#, c-format -msgid "interval out of range." -msgstr "intervalが範囲外です" - -#: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 +#: utils/adt/timestamp.c:4623 utils/adt/timestamp.c:4858 #, c-format msgid "origin out of range" msgstr "基点が範囲外です" -#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#: utils/adt/timestamp.c:4628 utils/adt/timestamp.c:4863 #, c-format msgid "timestamps cannot be binned into infinite intervals" msgstr "タイムスタンプは無限のintervalにビニングすることはできません" -#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 +#: utils/adt/timestamp.c:4633 utils/adt/timestamp.c:4868 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "タイムスタンプ型は月や年を含む間隔にビニングすることはできません" -#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 +#: utils/adt/timestamp.c:4644 utils/adt/timestamp.c:4879 #, c-format msgid "stride must be greater than zero" msgstr "増分は0より大きくなければなりません" -#: utils/adt/timestamp.c:5091 +#: utils/adt/timestamp.c:5181 utils/adt/timestamp.c:5233 #, c-format msgid "Months usually have fractional weeks." msgstr "月は通常週の端数を含んでいます。" -#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#: utils/adt/timestamp.c:6713 utils/adt/timestamp.c:6799 #, c-format msgid "step size cannot be infinite" msgstr "加算量は無限にはできません" @@ -26473,32 +27525,32 @@ msgstr "フレーズ演算子での距離は0以上%d以下の整数でなくて msgid "no operand in tsquery: \"%s\"" msgstr "tsquery内にオペランドがありません\"%s\"" -#: utils/adt/tsquery.c:558 +#: utils/adt/tsquery.c:554 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "tsquery内の値が大きすぎます: \"%s\"" -#: utils/adt/tsquery.c:563 +#: utils/adt/tsquery.c:559 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "tsqueryのオペランドが長過ぎます: \"%s\"" -#: utils/adt/tsquery.c:591 +#: utils/adt/tsquery.c:587 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "tsquery内の単語が長すぎます: \"%s\"" -#: utils/adt/tsquery.c:717 utils/adt/tsvector_parser.c:147 +#: utils/adt/tsquery.c:713 utils/adt/tsvector_parser.c:147 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "tsquery内の構文エラー: \"%s\"" -#: utils/adt/tsquery.c:883 +#: utils/adt/tsquery.c:879 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "テキスト検索問い合わせが字句要素を含みません: \"%s\"" -#: utils/adt/tsquery.c:894 utils/adt/tsquery_util.c:376 +#: utils/adt/tsquery.c:890 utils/adt/tsquery_util.c:376 #, c-format msgid "tsquery is too large" msgstr "tsqueryが大きすぎます" @@ -26513,32 +27565,32 @@ msgstr "テキスト検索問い合わせはストップワードのみを含む msgid "ts_rewrite query must return two tsquery columns" msgstr "ts_rewrite問い合わせは2列のtsquery列を返さなければなりません" -#: utils/adt/tsrank.c:412 +#: utils/adt/tsrank.c:415 #, c-format msgid "array of weight must be one-dimensional" msgstr "重み配列は1次元の配列でなければなりません" -#: utils/adt/tsrank.c:417 +#: utils/adt/tsrank.c:420 #, c-format msgid "array of weight is too short" msgstr "重み配列が短すぎます" -#: utils/adt/tsrank.c:422 +#: utils/adt/tsrank.c:425 #, c-format msgid "array of weight must not contain nulls" msgstr "重み配列にはNULL値を含めてはいけません" -#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:871 +#: utils/adt/tsrank.c:434 utils/adt/tsrank.c:876 #, c-format msgid "weight out of range" msgstr "重みが範囲外です" -#: utils/adt/tsvector.c:216 +#: utils/adt/tsvector.c:213 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "単語が長すぎます(%ldバイト、最大は%ldバイト)" -#: utils/adt/tsvector.c:223 +#: utils/adt/tsvector.c:220 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "tsベクターのための文字列が長すぎます(%ldバイト、最大は%ldバイト)" @@ -26618,7 +27670,7 @@ msgstr "エスケープ文字がありません: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "tsvector内の位置情報が間違っています: \"%s\"" -#: utils/adt/uuid.c:418 +#: utils/adt/uuid.c:535 utils/adt/uuid.c:632 #, c-format msgid "could not generate random values" msgstr "乱数値を生成できませんでした" @@ -26663,7 +27715,7 @@ msgstr "ビット列の外部値の不正な長さ" msgid "bit string too long for type bit varying(%d)" msgstr "ビット列は型bit varying(%d)には長すぎます" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 utils/adt/varlena.c:3133 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:919 utils/adt/varlena.c:982 utils/adt/varlena.c:1139 utils/adt/varlena.c:3102 utils/adt/varlena.c:3180 #, c-format msgid "negative substring length not allowed" msgstr "負の長さのsubstringは許可されません" @@ -26688,7 +27740,7 @@ msgstr "サイズが異なるビット列のXORはできません" msgid "bit index %d out of valid range (0..%d)" msgstr "ビットのインデックス%dが有効範囲0..%dの間にありません" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3384 #, c-format msgid "new bit must be 0 or 1" msgstr "新しいビットは0か1でなければなりません" @@ -26703,92 +27755,92 @@ msgstr "値は型character(%d)としては長すぎます" msgid "value too long for type character varying(%d)" msgstr "値は型character varying(%d)としては長すぎます" -#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1591 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "文字列比較で使用する照合順序を特定できませんでした" -#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 +#: utils/adt/varlena.c:1864 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "非決定的照合順序は部分文字列探索ではサポートされません" -#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 +#: utils/adt/varlena.c:3268 utils/adt/varlena.c:3335 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "インデックス%dは有効範囲0..%dの間にありません" -#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 +#: utils/adt/varlena.c:3299 utils/adt/varlena.c:3371 #, c-format -msgid "index %lld out of valid range, 0..%lld" -msgstr "インデックス%lldは有効範囲0..%lldの間にありません" +msgid "index % out of valid range, 0..%" +msgstr "インデックス%は有効範囲0..%の間にありません" -#: utils/adt/varlena.c:4385 +#: utils/adt/varlena.c:4587 #, c-format msgid "field position must not be zero" msgstr "フィールド位置には0は指定できません" -#: utils/adt/varlena.c:5630 +#: utils/adt/varlena.c:5832 #, c-format msgid "unterminated format() type specifier" msgstr "終端されていないformat()型指定子" -#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 +#: utils/adt/varlena.c:5833 utils/adt/varlena.c:5967 utils/adt/varlena.c:6088 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "一つの\"%%\"には\"%%%%\"を使ってください。" -#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 +#: utils/adt/varlena.c:5965 utils/adt/varlena.c:6086 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "認識できない format() の型指定子\"%.*s\"" -#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 +#: utils/adt/varlena.c:5978 utils/adt/varlena.c:6035 #, c-format msgid "too few arguments for format()" msgstr "format()の引数が少なすぎます" -#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 +#: utils/adt/varlena.c:6131 utils/adt/varlena.c:6313 #, c-format msgid "number is out of range" msgstr "数値が範囲外です" -#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 +#: utils/adt/varlena.c:6194 utils/adt/varlena.c:6222 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "書式は引数0を指定していますが、引数が1から始まっています" -#: utils/adt/varlena.c:6013 +#: utils/adt/varlena.c:6215 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "width引数の位置は\"$\"で終わらなければなりません" -#: utils/adt/varlena.c:6058 +#: utils/adt/varlena.c:6260 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "NULLはSQL識別子として書式付けできません" -#: utils/adt/varlena.c:6266 +#: utils/adt/varlena.c:6468 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "Unicode正規化はサーバーエンコーディングがUTF-8の場合にのみ実行されます" -#: utils/adt/varlena.c:6279 +#: utils/adt/varlena.c:6481 #, c-format msgid "invalid normalization form: %s" msgstr "不正な正規化形式: %s" -#: utils/adt/varlena.c:6324 +#: utils/adt/varlena.c:6526 #, c-format msgid "Unicode categorization can only be performed if server encoding is UTF8" msgstr "Unicodeカテゴリー分類はサーバーエンコーディングがUTF-8の場合にのみ実行可能です" -#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 +#: utils/adt/varlena.c:6743 utils/adt/varlena.c:6778 utils/adt/varlena.c:6813 #, c-format msgid "invalid Unicode code point: %04X" msgstr "不正なUnicodeコードポイント: %04X" -#: utils/adt/varlena.c:6641 +#: utils/adt/varlena.c:6843 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "Unicodeエスケープは \\XXXX、\\+XXXXXX、\\uXXXX または \\UXXXXXXXX でなければなりません。" @@ -26803,12 +27855,12 @@ msgstr "ntileの値は0より大きくなければなりません" msgid "argument of nth_value must be greater than zero" msgstr "nth_valueの値0より大きくなければなりません" -#: utils/adt/xid8funcs.c:124 +#: utils/adt/xid8funcs.c:120 #, c-format -msgid "transaction ID %llu is in the future" -msgstr "トランザクションID %lluは未来の値です" +msgid "transaction ID % is in the future" +msgstr "トランザクションID %は未来の値です" -#: utils/adt/xid8funcs.c:553 +#: utils/adt/xid8funcs.c:522 #, c-format msgid "invalid external pg_snapshot data" msgstr "不正な外部pg_snapshotデータ" @@ -26833,161 +27885,166 @@ msgstr "不正な符号化方式名\"%s\"" 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 "XML処理命令の対象名を\"%s\"とすることができませんでした。" -#: utils/adt/xml.c:1011 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "XML処理命令には\"?>\"を含めることはできません。" -#: utils/adt/xml.c:1090 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "XML の妥当性検査は実装されていません" -#: 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が互換性がない文字型を持ちます: sizeof(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 "これはおそらく使用するlibxml2のバージョンがPostgreSQLを構築する時に使用したlibxml2ヘッダと互換性がないことを示します。" -#: 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 "XML 宣言のパース中: '>?' が必要です。" -#: 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 "XML名前空間マッピングに対する不正な配列" -#: 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 "この配列は第2軸の長さが2である2次元配列でなければなりません。" -#: 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もnullにはできません" -#: 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 "\"%s\"という名前のXML名前空間およびURI\"%s\"を登録できませんでした" -#: utils/adt/xml.c:4726 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "デフォルト名前空間は実装されていません" -#: 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 "列XPath式が2つ以上の値を返却しました" -#: utils/cache/lsyscache.c:1017 +#: utils/cache/funccache.c:364 #, c-format -msgid "cast from type %s to type %s does not exist" +msgid "could not determine actual argument type for polymorphic function \"%s\"" +msgstr "多相関数\"%s\"の実際の引数の型を特定できませんでした" + +#: utils/cache/lsyscache.c:1109 +#, 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:3027 utils/cache/lsyscache.c:3060 utils/cache/lsyscache.c:3093 utils/cache/lsyscache.c:3126 #, c-format msgid "type %s is only a shell" msgstr "型%sは単なるシェルです" -#: utils/cache/lsyscache.c:2892 +#: utils/cache/lsyscache.c:3032 #, c-format msgid "no input function available for type %s" msgstr "型%sの利用可能な入力関数がありません" -#: utils/cache/lsyscache.c:2925 +#: utils/cache/lsyscache.c:3065 #, c-format msgid "no output function available for type %s" msgstr "型%sの利用可能な出力関数がありません" @@ -26997,32 +28054,27 @@ msgstr "型%sの利用可能な出力関数がありません" msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "アクセスメソッド %2$s の演算子クラス\"%1$s\"は%4$s型に対応するサポート関数%3$dを含んでいません" -#: utils/cache/plancache.c:747 -#, c-format -msgid "cached plan must not change result type" -msgstr "キャッシュした実行計画は結果型を変更してはなりません" - -#: utils/cache/relcache.c:3797 +#: utils/cache/relcache.c:3791 #, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にヒープのrelfilenumberの値が設定されていません" -#: utils/cache/relcache.c:3805 +#: utils/cache/relcache.c:3799 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "バイナリアップグレードモード中に、予期しない新規relfilenumberの要求がありました" -#: utils/cache/relcache.c:6533 +#: utils/cache/relcache.c:6616 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "リレーションキャッシュ初期化ファイル\"%sを作成できません: %m" -#: utils/cache/relcache.c:6535 +#: utils/cache/relcache.c:6618 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "とりあえず続行しますが、何かがおかしいです。" -#: utils/cache/relcache.c:6865 +#: utils/cache/relcache.c:6948 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "キャッシュファイル\"%s\"を削除できませんでした: %m" @@ -27042,7 +28094,7 @@ msgstr "リレーションマッピングファイル\"%s\"に不正なデータ msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "リレーションマッピングファイル\"%s\"の中に不正なチェックサムがあります" -#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 +#: utils/cache/typcache.c:1901 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "レコード型は登録されていません" @@ -27057,193 +28109,185 @@ msgstr "TRAP: 例外条件: PID %dで不正な引数\n" msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" msgstr "TRAP: Assert(\"%s\")が失敗、ファイル: \"%s\"、行: %d、PID: %d)\n" -#: utils/error/elog.c:415 +#: utils/error/elog.c:412 #, c-format msgid "error occurred before error message processing is available\n" msgstr "エラーメッセージの処理が可能になる前にエラーが発生しました\n" -#: utils/error/elog.c:2101 +#: utils/error/elog.c:2159 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "ファイル\"%s\"の標準エラー出力としての再オープンに失敗しました: %m" -#: utils/error/elog.c:2114 +#: utils/error/elog.c:2172 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "ファイル\"%s\"の標準出力としての再オープンに失敗しました: %m" -#: utils/error/elog.c:2150 +#: utils/error/elog.c:2208 #, c-format -msgid "Invalid character" -msgstr "不正な文字" +msgid "Invalid character." +msgstr "不正な文字。" -#: utils/error/elog.c:2856 utils/error/elog.c:2883 utils/error/elog.c:2899 +#: utils/error/elog.c:2918 utils/error/elog.c:2945 utils/error/elog.c:2961 msgid "[unknown]" msgstr "[不明]" -#: utils/error/elog.c:3169 utils/error/elog.c:3493 utils/error/elog.c:3600 +#: utils/error/elog.c:3263 utils/error/elog.c:3587 utils/error/elog.c:3694 msgid "missing error text" msgstr "エラーテキストがありません" -#: utils/error/elog.c:3172 utils/error/elog.c:3175 +#: utils/error/elog.c:3266 utils/error/elog.c:3269 #, c-format msgid " at character %d" msgstr "(%d文字目)" -#: utils/error/elog.c:3185 utils/error/elog.c:3192 +#: utils/error/elog.c:3279 utils/error/elog.c:3286 msgid "DETAIL: " msgstr "詳細: " -#: utils/error/elog.c:3199 +#: utils/error/elog.c:3293 msgid "HINT: " msgstr "ヒント: " -#: utils/error/elog.c:3206 +#: utils/error/elog.c:3300 msgid "QUERY: " msgstr "問い合わせ: " -#: utils/error/elog.c:3213 +#: utils/error/elog.c:3307 msgid "CONTEXT: " msgstr "文脈: " -#: utils/error/elog.c:3223 +#: utils/error/elog.c:3317 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "場所: %s, %s:%d\n" -#: utils/error/elog.c:3230 +#: utils/error/elog.c:3324 #, c-format msgid "LOCATION: %s:%d\n" msgstr "場所: %s:%d\n" -#: utils/error/elog.c:3237 +#: utils/error/elog.c:3331 msgid "BACKTRACE: " msgstr "バックトレース: " -#: utils/error/elog.c:3249 +#: utils/error/elog.c:3343 msgid "STATEMENT: " msgstr "文: " -#: utils/error/elog.c:3645 +#: utils/error/elog.c:3739 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3649 +#: utils/error/elog.c:3743 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3652 +#: utils/error/elog.c:3746 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3655 +#: utils/error/elog.c:3749 msgid "NOTICE" msgstr "NOTICE" -#: utils/error/elog.c:3659 +#: utils/error/elog.c:3753 msgid "WARNING" msgstr "WARNING" -#: utils/error/elog.c:3662 +#: utils/error/elog.c:3756 msgid "ERROR" msgstr "ERROR" -#: utils/error/elog.c:3665 +#: utils/error/elog.c:3759 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3668 +#: utils/error/elog.c:3762 msgid "PANIC" msgstr "PANIC" -#: utils/fmgr/dfmgr.c:128 +#: utils/fmgr/dfmgr.c:118 #, c-format msgid "could not find function \"%s\" in file \"%s\"" msgstr "ファイル\"%2$s\"内に関数\"%1$s\"がありませんでした" -#: utils/fmgr/dfmgr.c:247 +#: utils/fmgr/dfmgr.c:237 #, c-format msgid "could not load library \"%s\": %s" msgstr "ライブラリ\"%s\"をロードできませんでした: %s" -#: utils/fmgr/dfmgr.c:279 +#: utils/fmgr/dfmgr.c:274 #, c-format msgid "incompatible library \"%s\": missing magic block" msgstr "\"%s\"は互換性がないライブラリです。マジックブロックの欠落" -#: utils/fmgr/dfmgr.c:281 +#: utils/fmgr/dfmgr.c:276 #, c-format msgid "Extension libraries are required to use the PG_MODULE_MAGIC macro." msgstr "拡張ライブラリはPG_MODULE_MAGICマクロを使用しなければなりません。" -#: utils/fmgr/dfmgr.c:327 +#: utils/fmgr/dfmgr.c:322 #, c-format msgid "incompatible library \"%s\": version mismatch" msgstr "\"%s\"は互換性がないライブラリです: バージョンの不一致" -#: utils/fmgr/dfmgr.c:329 +#: utils/fmgr/dfmgr.c:324 #, c-format msgid "Server is version %d, library is version %s." msgstr "サーバーはバージョン%d、ライブラリはバージョン%sです。" -#: utils/fmgr/dfmgr.c:341 +#: utils/fmgr/dfmgr.c:336 #, c-format msgid "incompatible library \"%s\": ABI mismatch" msgstr "非互換のライブラリ\"%s\": ABIの不一致" -#: utils/fmgr/dfmgr.c:343 +#: utils/fmgr/dfmgr.c:338 #, c-format msgid "Server has ABI \"%s\", library has \"%s\"." msgstr "サーバー側ABIは\"%s\"、ライブラリ側は\"%s\"です。" -#: utils/fmgr/dfmgr.c:361 +#. translator: %s is a variable name and %d its values +#: utils/fmgr/dfmgr.c:357 utils/fmgr/dfmgr.c:367 utils/fmgr/dfmgr.c:377 #, c-format -msgid "Server has FUNC_MAX_ARGS = %d, library has %d." -msgstr "サーバー側は FUNC_MAX_ARGS = %d ですが、ライブラリ側は %d です" +msgid "Server has %s = %d, library has %d." +msgstr "サーバー側では %s = %d ですが、ライブラリ側は %d です。" -#: utils/fmgr/dfmgr.c:370 +#. translator: %s is a variable name and %d its values +#: utils/fmgr/dfmgr.c:387 #, c-format -msgid "Server has INDEX_MAX_KEYS = %d, library has %d." -msgstr "サーバー側は INDEX_MAX_KEYS = %d ですが、ライブラリ側は %d です" +msgid "Server has %s = %s, library has %s." +msgstr "サーバー側では %s = \"%s\"ですが、ライブラリ側は\"%s\"です。" -#: utils/fmgr/dfmgr.c:379 -#, c-format -msgid "Server has NAMEDATALEN = %d, library has %d." -msgstr "サーバー側は NAMEDATALEN = %d ですが、ライブラリ側は %d です" - -#: utils/fmgr/dfmgr.c:388 -#, c-format -msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." -msgstr "サーバー側はFLOAT8PASSBYVAL = %sですが、ライブラリ側は%sです。" - -#: utils/fmgr/dfmgr.c:395 +#: utils/fmgr/dfmgr.c:394 msgid "Magic block has unexpected length or padding difference." msgstr "マジックブロックが意図しない長さであるか、またはパディングが異なります。" -#: utils/fmgr/dfmgr.c:398 +#: utils/fmgr/dfmgr.c:397 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "\"%s\"は互換性がないライブラリです: マジックブロックの不一致" -#: utils/fmgr/dfmgr.c:475 +#: utils/fmgr/dfmgr.c:520 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "ライブラリ\"%s\"へのアクセスは許可されません" -#: utils/fmgr/dfmgr.c:501 +#: utils/fmgr/dfmgr.c:547 #, c-format -msgid "invalid macro name in dynamic library path: %s" -msgstr "ダイナミックライブラリパス内のマクロが不正です: %s" +msgid "invalid macro name in path: %s" +msgstr "パス内のマクロ名が無効です: %s" -#: utils/fmgr/dfmgr.c:541 +#: utils/fmgr/dfmgr.c:599 #, c-format -msgid "zero-length component in parameter \"dynamic_library_path\"" -msgstr "パラメータ\"dynamic_library_path\"内に長さが0の要素があります" +msgid "zero-length component in parameter \"%s\"" +msgstr "パラメータ\"%s\"に長さ0の構成要素があります" -#: utils/fmgr/dfmgr.c:560 +#: utils/fmgr/dfmgr.c:618 #, c-format -msgid "component in parameter \"dynamic_library_path\" is not an absolute path" -msgstr "パラメータ\"dynamic_library_path\"内の要素が絶対パスでありません" +msgid "component in parameter \"%s\" is not an absolute path" +msgstr "パラメータ\"%s\"に絶対パスではない要素が含まれています" #: utils/fmgr/fmgr.c:236 #, c-format @@ -27300,340 +28344,422 @@ msgstr "列の別名が提供されていませんでした" msgid "could not determine row description for function returning record" msgstr "レコードを返す関数についての行定義を特定できませんでした" -#: utils/init/miscinit.c:352 +#: utils/init/miscinit.c:265 +msgid "unknown process type" +msgstr "不明なプロセスタイプ" + +#: utils/init/miscinit.c:270 +msgid "not initialized" +msgstr "未初期化プロセス" + +#: utils/init/miscinit.c:273 +msgid "archiver" +msgstr "アーカイバー" + +#: utils/init/miscinit.c:276 +msgid "autovacuum launcher" +msgstr "自動VACUUM起動プロセス" + +#: utils/init/miscinit.c:279 +msgid "autovacuum worker" +msgstr "自動VACUUMワーカー" + +#: utils/init/miscinit.c:282 +msgid "client backend" +msgstr "クライアント バックエンド" + +#: utils/init/miscinit.c:285 +msgid "dead-end client backend" +msgstr "終了待ちバックエンド" + +#: utils/init/miscinit.c:288 +msgid "background worker" +msgstr "バックグラウンドワーカー" + +#: utils/init/miscinit.c:291 +msgid "background writer" +msgstr "バックグランドライター" + +#: utils/init/miscinit.c:294 +msgid "checkpointer" +msgstr "チェックポインター" + +#: utils/init/miscinit.c:300 +msgid "logger" +msgstr "ログ出力プロセス" + +#: utils/init/miscinit.c:303 +msgid "slotsync worker" +msgstr "スロット同期ワーカー" + +#: utils/init/miscinit.c:306 +msgid "standalone backend" +msgstr "単独起動バックエンド" + +#: utils/init/miscinit.c:309 +msgid "startup" +msgstr "初期起動プロセス" + +#: utils/init/miscinit.c:312 +msgid "walreceiver" +msgstr "WAL受信プロセス" + +#: utils/init/miscinit.c:315 +msgid "walsender" +msgstr "WAL送信プロセス" + +#: utils/init/miscinit.c:318 +msgid "walsummarizer" +msgstr "WAL集計プロセス" + +#: utils/init/miscinit.c:321 +msgid "walwriter" +msgstr "WAL書き込みプロセス" + +#: utils/init/miscinit.c:358 #, c-format msgid "data directory \"%s\" does not exist" msgstr "データディレクトリ\"%s\"は存在しません" -#: utils/init/miscinit.c:357 +#: utils/init/miscinit.c:363 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %m" -#: utils/init/miscinit.c:365 +#: utils/init/miscinit.c:371 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "指定されたデータディレクトリ\"%s\"はディレクトリではありません" -#: utils/init/miscinit.c:381 +#: utils/init/miscinit.c:387 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "データディレクトリ\"%s\"の所有者情報が間違っています" -#: utils/init/miscinit.c:383 +#: utils/init/miscinit.c:389 #, 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:407 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "データディレクトリ\"%s\"の権限設定が不正です" -#: utils/init/miscinit.c:403 +#: utils/init/miscinit.c:409 #, 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:467 #, 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:725 utils/misc/guc.c:3647 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "セキュリティー制限操作内でパラメーター\"%s\"を設定できません" -#: utils/init/miscinit.c:770 +#: utils/init/miscinit.c:812 #, c-format msgid "role with OID %u does not exist" msgstr "OID が %u であるロールは存在しません" -#: utils/init/miscinit.c:800 +#: utils/init/miscinit.c:858 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "ロール\"%s\"はログインが許可されません" -#: utils/init/miscinit.c:818 +#: utils/init/miscinit.c:879 #, c-format msgid "too many connections for role \"%s\"" msgstr "ロール\"%s\"からの接続が多すぎます" -#: utils/init/miscinit.c:991 +#: utils/init/miscinit.c:1050 #, c-format msgid "invalid role OID: %u" msgstr "不正なロールID: %u" -#: utils/init/miscinit.c:1138 +#: utils/init/miscinit.c:1197 #, c-format msgid "database system is shut down" msgstr "データベースシステムはシャットダウンしました" -#: utils/init/miscinit.c:1225 +#: utils/init/miscinit.c:1284 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "ロックファイル\"%s\"を作成できませんでした: %m" -#: utils/init/miscinit.c:1239 +#: utils/init/miscinit.c:1298 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: utils/init/miscinit.c:1246 +#: utils/init/miscinit.c:1305 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "ロックファイル\"%s\"を読み取れませんでした: %m" -#: utils/init/miscinit.c:1255 +#: utils/init/miscinit.c:1314 #, c-format msgid "lock file \"%s\" is empty" msgstr "ロックファイル\"%s\"が空です" -#: utils/init/miscinit.c:1256 +#: utils/init/miscinit.c:1315 #, 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:1359 #, c-format msgid "lock file \"%s\" already exists" msgstr "ロックファイル\"%s\"はすでに存在します" -#: utils/init/miscinit.c:1304 +#: utils/init/miscinit.c:1363 #, 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:1365 #, 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:1368 #, 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:1370 #, 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:1421 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "古いロックファイル\"%s\"を削除できませんでした: %m" -#: utils/init/miscinit.c:1364 +#: utils/init/miscinit.c:1423 #, 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:1460 utils/init/miscinit.c:1474 utils/init/miscinit.c:1485 #, 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:1596 utils/init/miscinit.c:1738 utils/misc/guc.c:5763 #, c-format msgid "could not read from file \"%s\": %m" msgstr "ファイル\"%s\"から読み取れませんでした: %m" -#: utils/init/miscinit.c:1667 +#: utils/init/miscinit.c:1726 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "ファイル\"%s\"をオープンできませんでした: %m; とりあえず続けます" -#: utils/init/miscinit.c:1692 +#: utils/init/miscinit.c:1751 #, 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:1790 utils/init/miscinit.c:1806 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\"は有効なデータディレクトリではありません" -#: utils/init/miscinit.c:1733 +#: utils/init/miscinit.c:1792 #, c-format msgid "File \"%s\" is missing." msgstr "ファイル\"%s\"が存在しません" -#: utils/init/miscinit.c:1749 +#: utils/init/miscinit.c:1808 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "ファイル\"%s\"に有効なデータがありません。" -#: utils/init/miscinit.c:1751 +#: utils/init/miscinit.c:1810 #, c-format msgid "You might need to initdb." msgstr "initdbする必要があるかもしれません" -#: utils/init/miscinit.c:1759 +#: utils/init/miscinit.c:1818 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "データディレクトリはPostgreSQLバージョン%sで初期化されましたが、これはバージョン%sとは互換性がありません" -#: utils/init/postinit.c:259 +#: utils/init/postinit.c:269 #, c-format msgid "replication connection authorized: user=%s" msgstr "レプリケーション接続の認証完了: ユーザー=%s" -#: utils/init/postinit.c:262 +#: utils/init/postinit.c:272 #, c-format msgid "connection authorized: user=%s" msgstr "接続の認証完了: ユーザー=%s" -#: utils/init/postinit.c:265 +#: utils/init/postinit.c:275 #, c-format msgid " database=%s" msgstr " データベース=%s" -#: utils/init/postinit.c:268 +#: utils/init/postinit.c:278 #, c-format msgid " application_name=%s" msgstr " application_name=%s" -#: utils/init/postinit.c:273 +#: utils/init/postinit.c:283 #, c-format msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d)" msgstr " SSL有効(プロトコル=%s、暗号化方式=%s、ビット長=%d)" -#: utils/init/postinit.c:285 +#: utils/init/postinit.c:295 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, delegated_credentials=%s, principal=%s)" msgstr " GSS (認証=%s、暗号化=%s、委任資格証明=%s、プリンシパル=%s)" -#: utils/init/postinit.c:286 utils/init/postinit.c:287 utils/init/postinit.c:288 utils/init/postinit.c:293 utils/init/postinit.c:294 utils/init/postinit.c:295 +#: utils/init/postinit.c:296 utils/init/postinit.c:297 utils/init/postinit.c:298 utils/init/postinit.c:303 utils/init/postinit.c:304 utils/init/postinit.c:305 msgid "no" msgstr "いいえ" -#: utils/init/postinit.c:286 utils/init/postinit.c:287 utils/init/postinit.c:288 utils/init/postinit.c:293 utils/init/postinit.c:294 utils/init/postinit.c:295 +#: utils/init/postinit.c:296 utils/init/postinit.c:297 utils/init/postinit.c:298 utils/init/postinit.c:303 utils/init/postinit.c:304 utils/init/postinit.c:305 msgid "yes" msgstr "はい" -#: utils/init/postinit.c:292 +#: utils/init/postinit.c:302 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, delegated_credentials=%s)" msgstr " GSS (認証=%s、暗号化=%s、委任資格証明=%s)" -#: utils/init/postinit.c:333 +#: utils/init/postinit.c:342 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "データベース\"%s\"はpg_databaseから消失しました" -#: utils/init/postinit.c:335 +#: utils/init/postinit.c:344 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "OID%uのデータベースは\"%s\"に属するようです。" -#: utils/init/postinit.c:355 +#: utils/init/postinit.c:364 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "現在データベース\"%s\"は接続を受け付けません" -#: utils/init/postinit.c:368 +#: utils/init/postinit.c:377 #, c-format msgid "permission denied for database \"%s\"" msgstr "データベース\"%s\"へのアクセスが拒否されました" -#: utils/init/postinit.c:369 +#: utils/init/postinit.c:378 #, c-format msgid "User does not have CONNECT privilege." msgstr "ユーザーはCONNECT権限を持ちません。" -#: utils/init/postinit.c:386 +#: utils/init/postinit.c:398 #, 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:422 utils/init/postinit.c:429 #, c-format msgid "database locale is incompatible with operating system" msgstr "データベースのロケールがオペレーティングシステムと互換性がありません" -#: utils/init/postinit.c:411 +#: utils/init/postinit.c:423 #, 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:425 utils/init/postinit.c:432 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "データベースを別のロケールで再生成するか、または不足しているロケールをインストールしてください" -#: utils/init/postinit.c:418 +#: utils/init/postinit.c:430 #, 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:471 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "データベース\"%s\"で照合順序バージョンの不一致が起きています" -#: utils/init/postinit.c:493 +#: utils/init/postinit.c:473 #, c-format msgid "The database was created using collation version %s, but the operating system provides version %s." msgstr "データベースは照合順序バージョン%sで作成されていますが、オペレーティングシステムはバージョン%sを提供しています。" -#: utils/init/postinit.c:496 +#: utils/init/postinit.c:476 #, 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 "このデータベース内でデフォルトの照合順序を使用している全てのオブジェクトを再構築して、ALTER DATABASE %s REFRESH COLLATION VERSIONを実行するか、正しいバージョンのライブラリを用いてPostgreSQLをビルドしてください。" -#: utils/init/postinit.c:902 +#: utils/init/postinit.c:566 +#, c-format +msgid "too many server processes configured" +msgstr "サーバープロセス数の設定が大きすぎます" + +#: utils/init/postinit.c:567 +#, c-format +msgid "\"max_connections\" (%d) plus \"autovacuum_worker_slots\" (%d) plus \"max_worker_processes\" (%d) plus \"max_wal_senders\" (%d) must be less than %d." +msgstr "\"max_connections\" (%d) + \"autovacuum_worker_slots\" (%d) + \"max_worker_processes\" (%d) + \"max_wal_senders\" (%d)は%dより小さくなければなりません。" + +#: utils/init/postinit.c:889 #, c-format msgid "no roles are defined in this database system" msgstr "データベースシステム内でロールが定義されていません" -#: utils/init/postinit.c:903 +#: utils/init/postinit.c:890 #, 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:935 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "バイナリアップグレードモード中に接続するにはスーパーユーザーである必要があります" -#: utils/init/postinit.c:961 +#: utils/init/postinit.c:955 #, 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:961 #, 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:973 #, c-format msgid "permission denied to start WAL sender" msgstr "WAL送信プロセスを開始する権限がありません" -#: utils/init/postinit.c:980 +#: utils/init/postinit.c:974 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." msgstr "%s属性を持つロールのみがWAL送信プロセスを開始できます。" -#: utils/init/postinit.c:1098 +#: utils/init/postinit.c:1092 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "削除またはリネームされたばかりのようです。" -#: utils/init/postinit.c:1102 +#: utils/init/postinit.c:1096 #, c-format msgid "database %u does not exist" msgstr "データベース %u は存在しません" -#: utils/init/postinit.c:1111 +#: utils/init/postinit.c:1105 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "無効なデータベース\"%s\"への接続はできません" -#: utils/init/postinit.c:1172 +#: utils/init/postinit.c:1166 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "データベースのサブディレクトリ\"%s\"がありません。" @@ -27648,12 +28774,12 @@ msgstr "ロール\"%s\"は\"%s\"へのSET ROLEはできません" msgid "invalid encoding number: %d" msgstr "不正な符号化方式番号: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:129 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:165 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:132 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:168 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "ISO8859文字セットに対する符号化方式ID %dは想定外です" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:110 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:146 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:113 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:149 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "WIN文字セットに対する符号化方式ID %dは想定外です<" @@ -27713,80 +28839,80 @@ msgstr "空の設定ディレクトリ名: \"%s\"" msgid "could not open configuration directory \"%s\": %m" msgstr "設定ディレクトリ\"%s\"をオープンできませんでした: %m" -#: utils/misc/guc.c:122 +#: utils/misc/guc.c:119 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "このパラメータで使用可能な単位は\"B\"、\"kB\"、\"MB\"、\"GB\"および\"TB\"です。" -#: utils/misc/guc.c:159 +#: utils/misc/guc.c:156 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "このパラメータの有効単位は \"us\"、\"ms\"、\"s\"、\"min\"、\"h\"そして\"d\"です。" -#: utils/misc/guc.c:430 +#: utils/misc/guc.c:428 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "ファイル\"%2$s\"行%3$dで認識できない設定パラメータ\"%1$s\"" -#: 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:468 utils/misc/guc.c:3501 utils/misc/guc.c:3745 utils/misc/guc.c:3843 utils/misc/guc.c:3941 utils/misc/guc.c:4068 utils/misc/guc.c:4209 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "パラメータ\"%s\"を変更するにはサーバーの再起動が必要です" -#: utils/misc/guc.c:506 +#: utils/misc/guc.c:504 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "パラメーター\"%s\"が設定ファイルから削除されました。デフォルト値に戻ります。" -#: utils/misc/guc.c:571 +#: utils/misc/guc.c:569 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "パラメータ\"%s\"は\"%s\"に変更されました" -#: utils/misc/guc.c:613 +#: utils/misc/guc.c:611 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "設定ファイル\"%s\"にはエラーがあります" -#: utils/misc/guc.c:618 +#: utils/misc/guc.c:616 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "設定ファイル\"%s\"にはエラーがあります。影響がない変更は適用されました" -#: utils/misc/guc.c:623 +#: utils/misc/guc.c:621 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "設定ファイル\"%s\"にはエラーがあります。変更は適用されませんでした" -#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 +#: utils/misc/guc.c:1137 utils/misc/guc.c:1153 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "設定パラメータ名\"%s\"は不正です" -#: utils/misc/guc.c:1141 +#: utils/misc/guc.c:1139 #, c-format msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "独自パラメータの名前は2つ以上の単純識別子をピリオドでつないだ形式でなければなりません。" -#: utils/misc/guc.c:1157 +#: utils/misc/guc.c:1155 #, c-format msgid "\"%s\" is a reserved prefix." msgstr "\"%s\"は予約されている接頭辞です。" -#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 +#: utils/misc/guc.c:1168 utils/misc/guc.c:1278 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "設定パラメータ\"%s\"は不明です" -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1800 #, c-format msgid "%s: could not access directory \"%s\": %m\n" msgstr "%s: ディレクトリ\"%s\"にアクセスできませんでした: %m\n" -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1804 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "initdbまたはpg_basebackupを実行して、PostgreSQLデータディレクトリを初期化してください。\n" -#: utils/misc/guc.c:1830 +#: utils/misc/guc.c:1828 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -27796,12 +28922,12 @@ msgstr "" "--config-fileまたは-Dオプションを指定する、あるいはPGDATA環境変数を設\n" "定する必要があります。\n" -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1851 #, c-format msgid "%s: could not access the server configuration file \"%s\": %m\n" msgstr "%s: サーバー設定ファイル\"%s\"にアクセスできませんでした: %m\n" -#: utils/misc/guc.c:1881 +#: utils/misc/guc.c:1879 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27811,7 +28937,7 @@ msgstr "" "\"%s\"内の\"data_directory\"で指定するか、実行時に-Dオプションを指定する、またはPGDATA環\n" "境変数で設定することができます。\n" -#: utils/misc/guc.c:1933 +#: utils/misc/guc.c:1931 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -27821,7 +28947,7 @@ msgstr "" "\"%s\"内で\"hba_directory\"を指定する、-Dオプションを指定する、PGDATA環\n" "境変数で設定することができます。\n" -#: utils/misc/guc.c:1964 +#: utils/misc/guc.c:1962 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -27831,125 +28957,130 @@ msgstr "" "\"%s\"内で\"ident_directory\"を指定する、-Dオプションを指定する、PGDATA環\n" "境変数で設定することができます。\n" -#: utils/misc/guc.c:2943 +#: utils/misc/guc.c:2941 msgid "Value exceeds integer range." msgstr "値が整数範囲を超えています。" -#: utils/misc/guc.c:3185 +#: utils/misc/guc.c:3182 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" msgstr "%d%s%sはパラメータ\"%s\"の有効範囲(%d%s%s .. %d%s%s)の範囲外です" -#: utils/misc/guc.c:3226 +#: utils/misc/guc.c:3223 #, c-format 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:3462 #, 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:3478 utils/misc/guc.c:4693 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "パラメータ\"%s\"を変更できません" -#: utils/misc/guc.c:3505 +#: utils/misc/guc.c:3511 #, 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:3538 utils/misc/guc.c:3600 utils/misc/guc.c:4668 utils/misc/guc.c:6754 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "パラメータ\"%s\"を設定する権限がありません" -#: utils/misc/guc.c:3574 +#: utils/misc/guc.c:3580 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "接続開始後にパラメータ\"%s\"を変更できません" -#: utils/misc/guc.c:3633 +#: utils/misc/guc.c:3639 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "セキュリティー定義用関数内でパラメーター\"%s\"を設定できません" -#: utils/misc/guc.c:3654 +#: utils/misc/guc.c:3660 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "パラメータ\"%s\"は設定できません" -#: utils/misc/guc.c:3661 +#: utils/misc/guc.c:3667 #, 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:4367 utils/misc/guc.c:4415 utils/misc/guc.c:5448 #, 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:4368 utils/misc/guc.c:4416 utils/misc/guc.c:5449 #, 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:4626 #, c-format msgid "ALTER SYSTEM is not allowed in this environment" msgstr "ALTER SYSTEMはこの環境では許可されていません" -#: utils/misc/guc.c:4611 +#: utils/misc/guc.c:4658 #, 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:4737 #, 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:4782 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "ファイル\"%s\"の内容をパースできませんでした" -#: utils/misc/guc.c:4917 +#: utils/misc/guc.c:4965 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "パラメータ\"%s\"を再定義しようとしています" -#: utils/misc/guc.c:5256 +#: utils/misc/guc.c:5304 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "設定パラメータ名\"%s\"は不正です、削除します" -#: utils/misc/guc.c:5258 +#: utils/misc/guc.c:5306 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "\"%s\" は予約された接頭辞になりました。" -#: utils/misc/guc.c:6135 +#: utils/misc/guc.c:6177 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "パラメータ\"%s\"の\"%s\"への変更中" -#: utils/misc/guc.c:6304 +#: utils/misc/guc.c:6346 #, c-format msgid "parameter \"%s\" could not be set" msgstr "パラメータ\"%s\"を設定できません" -#: utils/misc/guc.c:6394 +#: utils/misc/guc.c:6436 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "パラメータ\"%s\"の設定をパースできません" -#: utils/misc/guc.c:6844 +#: utils/misc/guc.c:6886 #, 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" @@ -27965,2059 +29096,2267 @@ msgstr "SET %sは1つの引数のみを取ります" msgid "SET requires parameter name" msgstr "SETにはパラメータ名が必要です" -#: utils/misc/guc_tables.c:675 +#: utils/misc/guc_tables.c:692 msgid "Ungrouped" msgstr "その他" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:693 msgid "File Locations" msgstr "ファイルの位置" -#: utils/misc/guc_tables.c:677 +#: utils/misc/guc_tables.c:694 msgid "Connections and Authentication / Connection Settings" msgstr "接続と認証/接続設定" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:695 msgid "Connections and Authentication / TCP Settings" msgstr "接続と認証/TCP設定" -#: utils/misc/guc_tables.c:679 +#: utils/misc/guc_tables.c:696 msgid "Connections and Authentication / Authentication" msgstr "接続と認証/認証" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:697 msgid "Connections and Authentication / SSL" msgstr "接続と認証/SSL" -#: utils/misc/guc_tables.c:681 +#: utils/misc/guc_tables.c:698 msgid "Resource Usage / Memory" msgstr "使用リソース/メモリ" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:699 msgid "Resource Usage / Disk" msgstr "使用リソース/ディスク" -#: utils/misc/guc_tables.c:683 +#: utils/misc/guc_tables.c:700 msgid "Resource Usage / Kernel Resources" msgstr "使用リソース/カーネルリソース" -#: utils/misc/guc_tables.c:684 -msgid "Resource Usage / Cost-Based Vacuum Delay" -msgstr "使用リソース / コストベースvacuum遅延" - -#: utils/misc/guc_tables.c:685 +#: utils/misc/guc_tables.c:701 msgid "Resource Usage / Background Writer" msgstr "使用リソース / バックグラウンド・ライタ" -#: utils/misc/guc_tables.c:686 -msgid "Resource Usage / Asynchronous Behavior" -msgstr "使用リソース / 非同期動作" +#: utils/misc/guc_tables.c:702 +msgid "Resource Usage / I/O" +msgstr "使用リソース/ I/O" -#: utils/misc/guc_tables.c:687 +#: utils/misc/guc_tables.c:703 +msgid "Resource Usage / Worker Processes" +msgstr "使用リソース/ワーカープロセス" + +#: utils/misc/guc_tables.c:704 msgid "Write-Ahead Log / Settings" msgstr "先行書き込みログ / 設定" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:705 msgid "Write-Ahead Log / Checkpoints" msgstr "先行書き込みログ / チェックポイント" -#: utils/misc/guc_tables.c:689 +#: utils/misc/guc_tables.c:706 msgid "Write-Ahead Log / Archiving" msgstr "先行書き込みログ / アーカイビング" -#: utils/misc/guc_tables.c:690 +#: utils/misc/guc_tables.c:707 msgid "Write-Ahead Log / Recovery" msgstr "先行書き込みログ / リカバリ" -#: utils/misc/guc_tables.c:691 +#: utils/misc/guc_tables.c:708 msgid "Write-Ahead Log / Archive Recovery" msgstr "先行書き込みログ / アーカイブリカバリ" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:709 msgid "Write-Ahead Log / Recovery Target" msgstr "先行書き込みログ / チェックポイント" -#: utils/misc/guc_tables.c:693 +#: utils/misc/guc_tables.c:710 msgid "Write-Ahead Log / Summarization" msgstr "先行書き込みログ / 集約" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:711 msgid "Replication / Sending Servers" msgstr "レプリケーション / 送信サーバー" -#: utils/misc/guc_tables.c:695 +#: utils/misc/guc_tables.c:712 msgid "Replication / Primary Server" msgstr "レプリケーション / プライマリサーバー" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:713 msgid "Replication / Standby Servers" msgstr "レプリケーション / スタンバイサーバー" -#: utils/misc/guc_tables.c:697 +#: utils/misc/guc_tables.c:714 msgid "Replication / Subscribers" msgstr "レプリケーション / サブスクライバ" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:715 msgid "Query Tuning / Planner Method Configuration" msgstr "問い合わせのチューニング / プランナ手法設定" -#: utils/misc/guc_tables.c:699 +#: utils/misc/guc_tables.c:716 msgid "Query Tuning / Planner Cost Constants" msgstr "問い合わせのチューニング / プランナコスト定数" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:717 msgid "Query Tuning / Genetic Query Optimizer" msgstr "問い合わせのチューニング / 遺伝的問い合わせオプティマイザ" -#: utils/misc/guc_tables.c:701 +#: utils/misc/guc_tables.c:718 msgid "Query Tuning / Other Planner Options" msgstr "問い合わせのチューニング / その他のプランオプション" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:719 msgid "Reporting and Logging / Where to Log" msgstr "レポートとログ出力 / ログの出力先" -#: utils/misc/guc_tables.c:703 +#: utils/misc/guc_tables.c:720 msgid "Reporting and Logging / When to Log" msgstr "レポートとログ出力 / ログのタイミング" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:721 msgid "Reporting and Logging / What to Log" msgstr "レポートとログ出力 / ログの内容" -#: utils/misc/guc_tables.c:705 +#: utils/misc/guc_tables.c:722 msgid "Reporting and Logging / Process Title" msgstr "レポートとログ出力 / プロセス表記" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:723 msgid "Statistics / Monitoring" msgstr "統計情報 / 監視" -#: utils/misc/guc_tables.c:707 +#: utils/misc/guc_tables.c:724 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "統計情報 / 問い合わせとインデックスの累積統計情報" -#: utils/misc/guc_tables.c:708 -msgid "Autovacuum" -msgstr "自動VACUUM" +#: utils/misc/guc_tables.c:725 +msgid "Vacuuming / Automatic Vacuuming" +msgstr "VACUUM / 自動VACUUM" -#: utils/misc/guc_tables.c:709 +#: utils/misc/guc_tables.c:726 +msgid "Vacuuming / Cost-Based Vacuum Delay" +msgstr "VACUUM / コストベースVACUUM遅延" + +#: utils/misc/guc_tables.c:727 +msgid "Vacuuming / Default Behavior" +msgstr "VACUUM / デフォルト動作" + +#: utils/misc/guc_tables.c:728 +msgid "Vacuuming / Freezing" +msgstr "VACUUM / 凍結" + +#: utils/misc/guc_tables.c:729 msgid "Client Connection Defaults / Statement Behavior" msgstr "クライアント接続のデフォルト設定 / 文の振舞い" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:730 msgid "Client Connection Defaults / Locale and Formatting" msgstr "クライアント接続のデフォルト設定 / ロケールと整形" -#: utils/misc/guc_tables.c:711 +#: utils/misc/guc_tables.c:731 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "クライアント接続のデフォルト設定 / ライブラリの事前読み込み" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:732 msgid "Client Connection Defaults / Other Defaults" msgstr "クライアント接続のデフォルト設定 / その他のデフォルト設定" -#: utils/misc/guc_tables.c:713 +#: utils/misc/guc_tables.c:733 msgid "Lock Management" msgstr "ロック管理" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:734 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "バージョンおよびプラットフォーム間の互換性 / PostgreSQLの以前のバージョン" -#: utils/misc/guc_tables.c:715 +#: utils/misc/guc_tables.c:735 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "バージョンおよびプラットフォーム間の互換性 / 他のプラットフォームおよびクライアント" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:736 msgid "Error Handling" msgstr "エラーハンドリング" -#: utils/misc/guc_tables.c:717 +#: utils/misc/guc_tables.c:737 msgid "Preset Options" msgstr "事前設定オプション" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:738 msgid "Customized Options" msgstr "独自オプション" -#: utils/misc/guc_tables.c:719 +#: utils/misc/guc_tables.c:739 msgid "Developer Options" msgstr "開発者向けオプション" -#: utils/misc/guc_tables.c:774 +#: utils/misc/guc_tables.c:794 msgid "Enables the planner's use of sequential-scan plans." msgstr "プランナでのシーケンシャルスキャンプランの使用を有効にします。" -#: utils/misc/guc_tables.c:784 +#: utils/misc/guc_tables.c:804 msgid "Enables the planner's use of index-scan plans." msgstr "プランナでのインデックススキャンプランの使用を有効にします。" -#: utils/misc/guc_tables.c:794 +#: utils/misc/guc_tables.c:814 msgid "Enables the planner's use of index-only-scan plans." msgstr "プランナでのインデックスオンリースキャンプランの使用を有効にします。" -#: utils/misc/guc_tables.c:804 +#: utils/misc/guc_tables.c:824 msgid "Enables the planner's use of bitmap-scan plans." msgstr "プランナでのビットマップスキャンプランの使用を有効にします。" -#: utils/misc/guc_tables.c:814 +#: utils/misc/guc_tables.c:834 msgid "Enables the planner's use of TID scan plans." msgstr "プランナでのTIDスキャンプランの使用を有効にします。" -#: utils/misc/guc_tables.c:824 +#: utils/misc/guc_tables.c:844 msgid "Enables the planner's use of explicit sort steps." msgstr "プランナでの明示的ソートの使用を有効にします。" -#: utils/misc/guc_tables.c:834 +#: utils/misc/guc_tables.c:854 msgid "Enables the planner's use of incremental sort steps." msgstr "プランナでの差分ソート処理の使用を有効にします。" -#: utils/misc/guc_tables.c:844 +#: utils/misc/guc_tables.c:864 msgid "Enables the planner's use of hashed aggregation plans." msgstr "プランナでのハッシュ集約プランの使用を有効にします。" -#: utils/misc/guc_tables.c:854 +#: utils/misc/guc_tables.c:874 msgid "Enables the planner's use of materialization." msgstr "プランナでの実体化の使用を有効にします。" -#: utils/misc/guc_tables.c:864 +#: utils/misc/guc_tables.c:884 msgid "Enables the planner's use of memoization." msgstr "プランナでのメモ化の使用を有効にします。" -#: utils/misc/guc_tables.c:874 +#: utils/misc/guc_tables.c:894 msgid "Enables the planner's use of nested-loop join plans." msgstr "プランナでのネストループジョインプランの使用を有効にします。" -#: utils/misc/guc_tables.c:884 +#: utils/misc/guc_tables.c:904 msgid "Enables the planner's use of merge join plans." msgstr "プランナでのマージジョインプランの使用を有効にします。" -#: utils/misc/guc_tables.c:894 +#: utils/misc/guc_tables.c:914 msgid "Enables the planner's use of hash join plans." msgstr "プランナでのハッシュジョインプランの使用を有効にします。" -#: utils/misc/guc_tables.c:904 +#: utils/misc/guc_tables.c:924 msgid "Enables the planner's use of gather merge plans." msgstr "プランナでのギャザーマージプランの使用を有効にします。" -#: utils/misc/guc_tables.c:914 +#: utils/misc/guc_tables.c:934 msgid "Enables partitionwise join." msgstr "パーティション単位ジョインを有効にします。" -#: utils/misc/guc_tables.c:924 +#: utils/misc/guc_tables.c:944 msgid "Enables partitionwise aggregation and grouping." msgstr "パーティション単位の集約およびグルーピングを有効にします。" -#: utils/misc/guc_tables.c:934 +#: utils/misc/guc_tables.c:954 msgid "Enables the planner's use of parallel append plans." msgstr "プランナでの並列アペンドプランの使用を有効にします。" -#: utils/misc/guc_tables.c:944 +#: utils/misc/guc_tables.c:964 msgid "Enables the planner's use of parallel hash plans." msgstr "プランナでの並列ハッシュプランの使用を有効にします。" -#: utils/misc/guc_tables.c:954 +#: utils/misc/guc_tables.c:974 msgid "Enables plan-time and execution-time partition pruning." msgstr "実行計画作成時および実行時のパーティション除外処理を有効にします。" -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:975 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:986 msgid "Enables the planner's ability to produce plans that provide presorted input for ORDER BY / DISTINCT aggregate functions." msgstr "プランナにおいてORDER BY / DISTINCT集約関数に対してソート済みの入力を供給する実行計画の生成を有効化します。" -#: utils/misc/guc_tables.c:969 +#: utils/misc/guc_tables.c:989 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 "問い合わせプランナがORDER BY / DISTINCT句を使用する集約関数に対してソート済みの入力を供給する実行計画を生成することを許可します。無効にすると、実行時にソートが常に暗黙的に実行されるようになります。" -#: utils/misc/guc_tables.c:981 +#: utils/misc/guc_tables.c:1001 msgid "Enables the planner's use of async append plans." msgstr "プランナでの非同期アペンドプランの使用を有効にします。" -#: utils/misc/guc_tables.c:991 +#: utils/misc/guc_tables.c:1011 +msgid "Enables removal of unique self-joins." +msgstr "ユニークな自己結合の削除を有効にします。" + +#: utils/misc/guc_tables.c:1021 msgid "Enables reordering of GROUP BY keys." msgstr "GROUP BYキーによる再ソートを有効化します。" -#: utils/misc/guc_tables.c:1001 +#: utils/misc/guc_tables.c:1031 +msgid "Enables reordering of DISTINCT pathkeys." +msgstr "DISTINCTパスキーの順序変更を有効にします。" + +#: utils/misc/guc_tables.c:1041 msgid "Enables genetic query optimization." msgstr "遺伝的問い合わせ最適化を有効にします。" -#: utils/misc/guc_tables.c:1002 +#: utils/misc/guc_tables.c:1042 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "このアルゴリズムでは、全数探索を伴わずに行う実行計画の作成を試みます。" -#: utils/misc/guc_tables.c:1016 +#: utils/misc/guc_tables.c:1056 msgid "Shows whether the current user is a superuser." msgstr "現在のユーザーがスーパーユーザーかどうかを表示します。" -#: utils/misc/guc_tables.c:1031 +#: utils/misc/guc_tables.c:1071 msgid "Allows running the ALTER SYSTEM command." msgstr "ALTER SYSTEMコマンドの実行を許可します。" -#: utils/misc/guc_tables.c:1032 +#: utils/misc/guc_tables.c:1072 msgid "Can be set to off for environments where global configuration changes should be made using a different method." msgstr "グローバル設定の変更を他の方法で行うべき環境ではoffにすることができます。" -#: utils/misc/guc_tables.c:1042 +#: utils/misc/guc_tables.c:1082 msgid "Enables advertising the server via Bonjour." msgstr "Bonjour を経由したサーバーのアドバタイズを有効にします。" -#: utils/misc/guc_tables.c:1051 +#: utils/misc/guc_tables.c:1091 msgid "Collects transaction commit time." msgstr "トランザクションのコミット時刻を収集します。" -#: utils/misc/guc_tables.c:1060 +#: utils/misc/guc_tables.c:1100 msgid "Enables SSL connections." msgstr "SSL接続を有効にします。" -#: utils/misc/guc_tables.c:1069 +#: utils/misc/guc_tables.c:1109 msgid "Controls whether \"ssl_passphrase_command\" is called during server reload." msgstr "サーバーリロード時に\"ssl_passphrase_command\"を呼び出すかどうかを制御します。" -#: utils/misc/guc_tables.c:1078 +#: utils/misc/guc_tables.c:1118 msgid "Give priority to server ciphersuite order." msgstr "サーバー側の暗号スイート順序を優先します。" -#: utils/misc/guc_tables.c:1087 +#: utils/misc/guc_tables.c:1127 msgid "Forces synchronization of updates to disk." msgstr "強制的に更新をディスクに同期します。" -#: utils/misc/guc_tables.c:1088 +#: utils/misc/guc_tables.c:1128 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 "サーバーは、確実に更新が物理的にディスクに書き込まれるように複数の場所でfsync()システムコールを使用します。これにより、オペレーティングシステムやハードウェアがクラッシュした後でもデータベースクラスタは一貫した状態に復旧することができます。" -#: utils/misc/guc_tables.c:1099 +#: utils/misc/guc_tables.c:1139 msgid "Continues processing after a checksum failure." msgstr "チェックサムエラーの発生時に処理を継続します。" -#: utils/misc/guc_tables.c:1100 +#: utils/misc/guc_tables.c:1140 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "チェックサムエラーを検知すると、通常PostgreSQLはエラーの報告を行ない、現在のトランザクションを中断させます。ignore_checksum_failureを真に設定することによりエラーを無視します(代わりに警告を報告します)この動作はクラッシュや他の深刻な問題を引き起こすかもしれません。チェックサムが有効な場合にのみ効果があります。" -#: utils/misc/guc_tables.c:1114 +#: utils/misc/guc_tables.c:1154 msgid "Continues processing past damaged page headers." msgstr "破損したページヘッダがあっても処理を継続します。" -#: utils/misc/guc_tables.c:1115 +#: utils/misc/guc_tables.c:1155 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting \"zero_damaged_pages\" to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "ページヘッダの障害が検出されると、通常PostgreSQLはエラーの報告を行ない、現在のトランザクションを中断させます。\"zero_damaged_pages\"をtrueに設定することにより、システムは代わりに警告を報告し、障害のあるページをゼロで埋め、処理を継続します。 この動作により、障害のあったページ上にある全ての行のデータが破壊されます。" -#: utils/misc/guc_tables.c:1128 +#: utils/misc/guc_tables.c:1168 msgid "Continues recovery after an invalid pages failure." msgstr "不正ページエラーの発生時に処理を継続します。" -#: utils/misc/guc_tables.c:1129 +#: utils/misc/guc_tables.c:1169 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting \"ignore_invalid_pages\" to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "リカバリ中に不正なページへの参照を行うWALレコードを検出した場合、PostgreSQLはPANICレベルのエラーを出力してリカバリを中断します。”ignore_invalid_pages\"をtrueに設定するとシステムはWALレコード中の不正なページへの参照を無視してリカバリを継続します(ただし、引き続き警告は出力します)。この挙動はクラッシュ、データ損失、破壊の伝播ないしは隠蔽または他の深刻な問題を引き起こします。リカバリモードもしくはスタンバイモードでのみ有効となります。" -#: utils/misc/guc_tables.c:1147 +#: utils/misc/guc_tables.c:1187 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "チェックポイントの後最初に変更された際にページ全体をWALに出力します。" -#: utils/misc/guc_tables.c:1148 +#: utils/misc/guc_tables.c:1188 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "ページ書き込み処理中にオペレーティングシステムがクラッシュすると、ディスクへの書き込みが一部分のみ行われる可能性があります。リカバリでは、WALに保存された行の変更だけでは完全に復旧させることができません。このオプションにより、チェックポイントの後の最初の更新時にWALにページを出力するため、完全な復旧が可能になります。" -#: utils/misc/guc_tables.c:1161 +#: utils/misc/guc_tables.c:1201 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "チェックポイントの後最初に更新された時に、重要な更新ではなくてもページ全体をWALに書き出します。" -#: utils/misc/guc_tables.c:1171 +#: utils/misc/guc_tables.c:1211 msgid "Writes zeroes to new WAL files before first use." msgstr "新しいWALファイルの使用前にゼロを書き込みます。" -#: utils/misc/guc_tables.c:1181 +#: utils/misc/guc_tables.c:1221 msgid "Recycles WAL files by renaming them." msgstr "WALファイルを名前を変更して再利用します。" -#: utils/misc/guc_tables.c:1191 +#: utils/misc/guc_tables.c:1231 msgid "Logs each checkpoint." msgstr "チェックポイントをログに記録します。" -#: utils/misc/guc_tables.c:1200 -msgid "Logs each successful connection." -msgstr "成功した接続を全てログに記録します。" - -#: utils/misc/guc_tables.c:1209 +#: utils/misc/guc_tables.c:1240 msgid "Logs details of pre-authentication connection handshake." msgstr "認証前接続ハンドシェークの詳細をログに出力します。" -#: utils/misc/guc_tables.c:1219 +#: utils/misc/guc_tables.c:1250 msgid "Logs end of a session, including duration." msgstr "セッションの終了時刻とその期間をログに記録します。" -#: utils/misc/guc_tables.c:1228 +#: utils/misc/guc_tables.c:1259 msgid "Logs each replication command." msgstr "各レプリケーションコマンドをログに記録します。" -#: utils/misc/guc_tables.c:1237 +#: utils/misc/guc_tables.c:1268 msgid "Shows whether the running server has assertion checks enabled." msgstr "起動中のサーバーがアサーションチェックを有効にしているかどうかを表示します。" -#: utils/misc/guc_tables.c:1248 +#: utils/misc/guc_tables.c:1279 msgid "Terminate session on any error." msgstr "何からのエラーがあればセッションを終了します" -#: utils/misc/guc_tables.c:1257 +#: utils/misc/guc_tables.c:1288 msgid "Reinitialize server after backend crash." msgstr "バックエンドがクラッシュした後サーバーを再初期化します" -#: utils/misc/guc_tables.c:1266 +#: utils/misc/guc_tables.c:1297 msgid "Remove temporary files after backend crash." msgstr "バックエンドのクラッシュ後に一時ファイルを削除します。" -#: utils/misc/guc_tables.c:1276 +#: utils/misc/guc_tables.c:1307 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:1317 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "固まっているプロセスにSIGKILLではなくSIGABRTを送信します。" -#: utils/misc/guc_tables.c:1297 +#: utils/misc/guc_tables.c:1328 msgid "Logs the duration of each completed SQL statement." msgstr "完了したSQL全ての実行時間をログに記録します。" -#: utils/misc/guc_tables.c:1306 +#: utils/misc/guc_tables.c:1338 +msgid "Set this to force all parse and plan trees to be passed through copyObject(), to facilitate catching errors and omissions in copyObject()." +msgstr "これを設定すると、すべてのパースおよび実行計画ツリーがcopyObject()を通過するようになり、copyObject()でのエラーや処理漏れを検出しやすくします。" + +#: utils/misc/guc_tables.c:1355 +msgid "Set this to force all parse and plan trees to be passed through outfuncs.c/readfuncs.c, to facilitate catching errors and omissions in those modules." +msgstr "これを設定すると、すべてのパースおよび実行計画ツリーがoutfuncs.c/readfuncs.cを通過するようになり、これらのモジュールでのエラーや処理漏れを検出しやすくします。" + +#: utils/misc/guc_tables.c:1372 +msgid "Set this to force all raw parse trees for DML statements to be scanned by raw_expression_tree_walker(), to facilitate catching errors and omissions in that function." +msgstr "これを設定すると、DML文のすべての未処理のパースツリーがraw_expression_tree_walker()でスキャンされ、この関数でのエラーや処理漏れを検出しやすくします。" + +#: utils/misc/guc_tables.c:1390 msgid "Logs each query's parse tree." msgstr "問い合わせのパースツリーをログに記録します。" -#: utils/misc/guc_tables.c:1315 +#: utils/misc/guc_tables.c:1399 msgid "Logs each query's rewritten parse tree." msgstr "リライト後の問い合わせのパースツリーをログに記録します。" -#: utils/misc/guc_tables.c:1324 +#: utils/misc/guc_tables.c:1408 msgid "Logs each query's execution plan." msgstr "問い合わせの実行計画をログに記録します。" -#: utils/misc/guc_tables.c:1333 +#: utils/misc/guc_tables.c:1417 msgid "Indents parse and plan tree displays." msgstr "パースツリーと実行計画ツリーの表示をインデントします。" -#: utils/misc/guc_tables.c:1342 +#: utils/misc/guc_tables.c:1426 msgid "Writes parser performance statistics to the server log." msgstr "パーサの性能統計情報をサーバーログに出力します。" -#: utils/misc/guc_tables.c:1351 +#: utils/misc/guc_tables.c:1435 msgid "Writes planner performance statistics to the server log." msgstr "プランナの性能統計情報をサーバーログに出力します。" -#: utils/misc/guc_tables.c:1360 +#: utils/misc/guc_tables.c:1444 msgid "Writes executor performance statistics to the server log." msgstr "エグゼキュータの性能統計情報をサーバーログに出力します。" -#: utils/misc/guc_tables.c:1369 +#: utils/misc/guc_tables.c:1453 msgid "Writes cumulative performance statistics to the server log." msgstr "累積の性能統計情報をサーバーログに出力します。" -#: utils/misc/guc_tables.c:1379 +#: utils/misc/guc_tables.c:1463 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "B-treeの各種操作に関するシステムリソース(メモリとCPU)の使用統計をログに記録します。" -#: utils/misc/guc_tables.c:1391 +#: utils/misc/guc_tables.c:1475 msgid "Collects information about executing commands." msgstr "実行中のコマンドに関する情報を収集します。" -#: utils/misc/guc_tables.c:1392 +#: utils/misc/guc_tables.c:1476 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:1486 msgid "Collects statistics on database activity." msgstr "データベースの活動について統計情報を収集します。" -#: utils/misc/guc_tables.c:1411 +#: utils/misc/guc_tables.c:1495 +msgid "Collects timing statistics for cost-based vacuum delay." +msgstr "コストベースのVACUUM遅延に関する時間統計を収集します。" + +#: utils/misc/guc_tables.c:1504 msgid "Collects timing statistics for database I/O activity." msgstr "データベースのI/O処理時間に関する統計情報を収集します。" -#: utils/misc/guc_tables.c:1420 +#: utils/misc/guc_tables.c:1513 msgid "Collects timing statistics for WAL I/O activity." msgstr "WALのI/O処理時間に関する統計情報を収集します。" -#: utils/misc/guc_tables.c:1430 +#: utils/misc/guc_tables.c:1523 msgid "Updates the process title to show the active SQL command." msgstr "活動中のSQLコマンドを表示するようプロセスタイトルを更新します。" -#: utils/misc/guc_tables.c:1431 +#: utils/misc/guc_tables.c:1524 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "新しいSQLコマンドをサーバーが受信する度に行うプロセスタイトルの更新を有効にします。" -#: utils/misc/guc_tables.c:1440 +#: utils/misc/guc_tables.c:1533 msgid "Starts the autovacuum subprocess." msgstr "autovacuumサブプロセスを起動します。" -#: utils/misc/guc_tables.c:1450 +#: utils/misc/guc_tables.c:1543 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "LISTENとNOTIFYコマンドのためのデバッグ出力を生成します。" -#: utils/misc/guc_tables.c:1462 +#: utils/misc/guc_tables.c:1555 msgid "Emits information about lock usage." msgstr "ロック使用状況に関する情報を出力します。" -#: utils/misc/guc_tables.c:1472 +#: utils/misc/guc_tables.c:1565 msgid "Emits information about user lock usage." msgstr "ユーザーロックの使用状況に関する情報を出力します。" -#: utils/misc/guc_tables.c:1482 +#: utils/misc/guc_tables.c:1575 msgid "Emits information about lightweight lock usage." msgstr "軽量ロックの使用状況に関する情報を出力します。" -#: utils/misc/guc_tables.c:1492 +#: utils/misc/guc_tables.c:1585 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "デッドロックの発生時点の全てのロックについての情報をダンプします。" -#: utils/misc/guc_tables.c:1504 +#: utils/misc/guc_tables.c:1597 msgid "Logs long lock waits." msgstr "長時間のロック待機をログに記録します。" -#: utils/misc/guc_tables.c:1513 +#: utils/misc/guc_tables.c:1606 +msgid "Logs lock failures." +msgstr "ロックの失敗をログ出力します。" + +#: utils/misc/guc_tables.c:1615 msgid "Logs standby recovery conflict waits." msgstr "スタンバイのリカバリ衝突による待機をログ出力します。" -#: utils/misc/guc_tables.c:1522 +#: utils/misc/guc_tables.c:1624 msgid "Logs the host name in the connection logs." msgstr "接続ログ内でホスト名を出力します。" -#: utils/misc/guc_tables.c:1523 +#: utils/misc/guc_tables.c:1625 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "デフォルトでは、接続ログメッセージには接続ホストのIPアドレスのみが表示されます。 このオプションを有効にすることで、ホスト名もログに表示されるようになります。 ホスト名解決の設定によってはで、無視できないほどの性能の悪化が起きうることに注意してください。" -#: utils/misc/guc_tables.c:1534 +#: utils/misc/guc_tables.c:1636 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:1637 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "有効にした場合、expr = NULL(またはNULL = expr)という形の式はexpr IS NULLとして扱われます。つまり、exprの評価がNULL値の場合に真を、さもなくば偽を返します。expr = NULLのSQL仕様に基づいた正しい動作は常にNULL(未知)を返すことです。" -#: utils/misc/guc_tables.c:1547 +#: utils/misc/guc_tables.c:1649 msgid "Sets the default read-only status of new transactions." msgstr "新しいトランザクションのリードオンリー設定のデフォルト値を設定。" -#: utils/misc/guc_tables.c:1557 +#: utils/misc/guc_tables.c:1659 msgid "Sets the current transaction's read-only status." msgstr "現在のトランザクションのリードオンリー設定を設定。" -#: utils/misc/guc_tables.c:1567 +#: utils/misc/guc_tables.c:1669 msgid "Sets the default deferrable status of new transactions." msgstr "新しいトランザクションの遅延可否設定のデフォルト値を設定。" -#: utils/misc/guc_tables.c:1576 +#: utils/misc/guc_tables.c:1678 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 -msgid "Enable row security." +#: utils/misc/guc_tables.c:1688 +msgid "Enables row security." msgstr "行セキュリティを有効にします。" -#: utils/misc/guc_tables.c:1587 +#: utils/misc/guc_tables.c:1689 msgid "When enabled, row security will be applied to all users." msgstr "有効にすると、行セキュリティが全てのユーザーに適用されます。" -#: utils/misc/guc_tables.c:1595 +#: utils/misc/guc_tables.c:1697 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "CREATE FUNCTIONおよびCREATE PROCEDUREにおいて関数本体を検査します。" -#: utils/misc/guc_tables.c:1604 -msgid "Enable input of NULL elements in arrays." +#: utils/misc/guc_tables.c:1706 +msgid "Enables input of NULL elements in arrays." msgstr "配列内のNULL要素入力を有効化。" -#: utils/misc/guc_tables.c:1605 +#: utils/misc/guc_tables.c:1707 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "有効にすると、配列入力値における引用符のないNULLはNULL値を意味するようになります。さもなくば文字通りに解釈されます。" -#: utils/misc/guc_tables.c:1621 +#: utils/misc/guc_tables.c:1723 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS は今後サポートされません; false のみに設定可能です。" -#: utils/misc/guc_tables.c:1631 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." -msgstr "標準エラー出力、CSVログ、またはその両方をログファイルに捕捉するための子プロセスを開始します。" +#: utils/misc/guc_tables.c:1733 +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." +msgstr "標準エラー出力、CSVログ、および/またはJSONログをログファイルに記録するための子プロセスを開始します。" -#: utils/misc/guc_tables.c:1640 +#: utils/misc/guc_tables.c:1742 msgid "Truncate existing log files of same name during log rotation." msgstr "ログローテーション時に既存の同一名称のログファイルを切り詰めます。" -#: utils/misc/guc_tables.c:1651 +#: utils/misc/guc_tables.c:1752 msgid "Emit information about resource usage in sorting." msgstr "ソート中にリソース使用状況に関する情報を出力します。" -#: utils/misc/guc_tables.c:1665 +#: utils/misc/guc_tables.c:1765 msgid "Generate debugging output for synchronized scanning." msgstr "同期スキャン処理のデバッグ出力を生成します。" -#: utils/misc/guc_tables.c:1680 -msgid "Enable bounded sorting using heap sort." -msgstr "ヒープソートを使用した境界のソート処理を有効にします" +#: utils/misc/guc_tables.c:1780 +msgid "Enables bounded sorting using heap sort." +msgstr "ヒープソートを使用した有界ソート処理を有効にします。" -#: utils/misc/guc_tables.c:1693 +#: utils/misc/guc_tables.c:1793 msgid "Emit WAL-related debugging output." msgstr "WAL関連のデバッグ出力を出力します。" -#: utils/misc/guc_tables.c:1705 +#: utils/misc/guc_tables.c:1805 msgid "Shows whether datetimes are integer based." msgstr "日付時刻が整数ベースかどうかを表示します。" -#: utils/misc/guc_tables.c:1716 +#: utils/misc/guc_tables.c:1816 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:1826 msgid "Sets whether GSSAPI delegation should be accepted from the client." msgstr "GSSAPI資格証明委任をクライアントから受け付けるかどかを設定します。" -#: utils/misc/guc_tables.c:1736 +#: utils/misc/guc_tables.c:1836 msgid "Warn about backslash escapes in ordinary string literals." msgstr "普通の文字列リテラル内のバックスラッシュエスケープを警告します。" -#: utils/misc/guc_tables.c:1746 +#: utils/misc/guc_tables.c:1846 msgid "Causes '...' strings to treat backslashes literally." msgstr "'...' 文字列はバックスラッシュをそのまま扱います。" -#: utils/misc/guc_tables.c:1757 -msgid "Enable synchronized sequential scans." +#: utils/misc/guc_tables.c:1857 +msgid "Enables synchronized sequential scans." msgstr "同期シーケンシャルスキャンを有効にします。" -#: utils/misc/guc_tables.c:1767 +#: utils/misc/guc_tables.c:1867 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "リカバリ目標のトランザクションを含めるか除外するかを設定。" -#: utils/misc/guc_tables.c:1777 +#: utils/misc/guc_tables.c:1877 msgid "Starts the WAL summarizer process to enable incremental backup." msgstr "差分バックアップを可能にするためのWAL集約プロセスを起動します。" -#: utils/misc/guc_tables.c:1787 +#: utils/misc/guc_tables.c:1887 msgid "Allows connections and queries during recovery." msgstr "リカバリ中でも接続と問い合わせを受け付けます" -#: utils/misc/guc_tables.c:1797 +#: utils/misc/guc_tables.c:1897 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:1907 msgid "Shows whether hot standby is currently active." msgstr "現在ホットスタンバイが有効であるかどうかを示します。" -#: utils/misc/guc_tables.c:1818 +#: utils/misc/guc_tables.c:1918 msgid "Allows modifications of the structure of system tables." msgstr "システムテーブル構造の変更を許可。" -#: utils/misc/guc_tables.c:1829 +#: utils/misc/guc_tables.c:1929 msgid "Disables reading from system indexes." msgstr "システムインデックスの読み込みを無効にします。" -#: utils/misc/guc_tables.c:1830 +#: utils/misc/guc_tables.c:1930 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:1941 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "pg_tblspc直下のテーブル空間を許可します、テスト用。" -#: utils/misc/guc_tables.c:1852 +#: utils/misc/guc_tables.c:1952 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "ラージオブジェクトで権限チェックを行う際、後方互換性モードを有効にします。" -#: utils/misc/guc_tables.c:1853 +#: utils/misc/guc_tables.c:1953 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "9.0 より前のPostgreSQLとの互換のため、ラージオブジェクトを読んだり変更したりする際に権限チェックをスキップする。" -#: utils/misc/guc_tables.c:1863 +#: utils/misc/guc_tables.c:1963 msgid "When generating SQL fragments, quote all identifiers." msgstr "SQL文を生成する時に、すべての識別子を引用符で囲みます。" -#: utils/misc/guc_tables.c:1873 +#: utils/misc/guc_tables.c:1973 msgid "Shows whether data checksums are turned on for this cluster." msgstr "データチェックサムがこのクラスタで有効になっているかどうかを表示します。" -#: utils/misc/guc_tables.c:1884 +#: utils/misc/guc_tables.c:1984 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "シーケンス番号を付加することでsyslogメッセージの重複を防ぎます。" -#: utils/misc/guc_tables.c:1894 +#: utils/misc/guc_tables.c:1994 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:2004 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Gather および Gather Merge でも下位プランを実行するかどうかを制御します。" -#: utils/misc/guc_tables.c:1905 +#: utils/misc/guc_tables.c:2005 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Gather ノードでも下位プランを実行するのか、もしくはただタプルの収集のみを行うのか?" -#: utils/misc/guc_tables.c:1915 +#: utils/misc/guc_tables.c:2015 msgid "Allow JIT compilation." msgstr "JITコンパイルを許可します。" -#: utils/misc/guc_tables.c:1926 +#: utils/misc/guc_tables.c:2026 msgid "Register JIT-compiled functions with debugger." msgstr "JITコンパイルされた関数をデバッガに登録します。" -#: utils/misc/guc_tables.c:1943 +#: utils/misc/guc_tables.c:2043 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "LLVMビットコードを出力して、JITデバッグを容易にします。" -#: utils/misc/guc_tables.c:1954 +#: utils/misc/guc_tables.c:2054 msgid "Allow JIT compilation of expressions." msgstr "式のJITコンパイルを許可します。" -#: utils/misc/guc_tables.c:1965 +#: utils/misc/guc_tables.c:2065 msgid "Register JIT-compiled functions with perf profiler." msgstr "perfプロファイラにJITコンパイルされた関数を登録します。" -#: utils/misc/guc_tables.c:1982 +#: utils/misc/guc_tables.c:2082 msgid "Allow JIT compilation of tuple deforming." msgstr "タプル分解処理のJITコンパイルを許可します。" -#: utils/misc/guc_tables.c:1993 +#: utils/misc/guc_tables.c:2093 msgid "Whether to continue running after a failure to sync data files." msgstr "データファイルの同期失敗の後に処理を継続するかどうか。" -#: utils/misc/guc_tables.c:2002 +#: utils/misc/guc_tables.c:2102 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "永続レプリケーションスロットがない場合にWALレシーバが一時スロットを作成するかどうかを設定します。" -#: utils/misc/guc_tables.c:2011 +#: utils/misc/guc_tables.c:2111 msgid "Enables event triggers." msgstr "イベントトリガを有効にします。" -#: utils/misc/guc_tables.c:2012 +#: utils/misc/guc_tables.c:2112 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:2121 +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:2130 +msgid "Enables deprecation warnings for MD5 passwords." +msgstr "MD5パスワードの非推奨警告を有効にする。" + +#: utils/misc/guc_tables.c:2139 +msgid "Enables vacuum to truncate empty pages at the end of the table." +msgstr "VACUUMの際にテーブル末尾の空のページを切り詰めるようにします。" + +#: utils/misc/guc_tables.c:2157 msgid "Sets the amount of time to wait before forcing a switch to the next WAL file." msgstr "次のWALへの強制切り替え時間を設定します。" -#: utils/misc/guc_tables.c:2050 +#: utils/misc/guc_tables.c:2159 utils/misc/guc_tables.c:2313 utils/misc/guc_tables.c:2732 utils/misc/guc_tables.c:2743 utils/misc/guc_tables.c:2754 utils/misc/guc_tables.c:2765 utils/misc/guc_tables.c:2776 +msgid "0 disables the timeout." +msgstr "0でこのタイムアウトを無効にします。" + +#: utils/misc/guc_tables.c:2168 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:2170 utils/misc/guc_tables.c:2908 msgid "This allows attaching a debugger to the process." msgstr "これによりデバッガがプロセスに接続できます。" -#: utils/misc/guc_tables.c:2061 +#: utils/misc/guc_tables.c:2179 msgid "Sets the default statistics target." msgstr "デフォルトの統計情報収集目標を設定。" -#: utils/misc/guc_tables.c:2062 +#: utils/misc/guc_tables.c:2180 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "ALTER TABLE SET STATISTICS経由で列固有の目標値を持たないテーブル列についての統計情報収集目標を設定します。" -#: utils/misc/guc_tables.c:2071 +#: utils/misc/guc_tables.c:2189 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "副問い合わせを展開する上限のFROMリストのサイズを設定。" -#: utils/misc/guc_tables.c:2073 +#: utils/misc/guc_tables.c:2191 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "最終的なFROMリストがこの値より多くの要素を持たない時に、プランナは副問い合わせを上位問い合わせにマージします。" -#: utils/misc/guc_tables.c:2084 +#: utils/misc/guc_tables.c:2202 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "JOIN式を平坦化する上限のFROMリストのサイズを設定。" -#: utils/misc/guc_tables.c:2086 +#: utils/misc/guc_tables.c:2204 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "最終的にFROMリストの項目数がこの値を超えない時には常に、プランナは明示的なJOIN構文をFROM項目のリストに組み込みます。" -#: utils/misc/guc_tables.c:2097 +#: utils/misc/guc_tables.c:2215 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "この数を超えるとGEQOを使用するFROM項目数の閾値を設定。" -#: utils/misc/guc_tables.c:2107 +#: utils/misc/guc_tables.c:2225 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effortは他のGEQOパラメータのデフォルトを設定するために使用されます。" -#: utils/misc/guc_tables.c:2117 +#: utils/misc/guc_tables.c:2235 msgid "GEQO: number of individuals in the population." msgstr "GEQO: 集団内の個体数。" -#: utils/misc/guc_tables.c:2118 utils/misc/guc_tables.c:2128 -msgid "Zero selects a suitable default value." +#: utils/misc/guc_tables.c:2236 utils/misc/guc_tables.c:2246 +msgid "0 means use a suitable default value." msgstr "0は適切なデフォルト値を選択します。" -#: utils/misc/guc_tables.c:2127 +#: utils/misc/guc_tables.c:2245 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: アルゴリズムの反復回数です。" -#: utils/misc/guc_tables.c:2139 +#: utils/misc/guc_tables.c:2257 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:2268 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "ホットスタンバイサーバーがアーカイブされた WAL データを処理している場合は、問い合わせをキャンセルする前に遅延秒数の最大値を設定。" -#: utils/misc/guc_tables.c:2161 +#: utils/misc/guc_tables.c:2269 utils/misc/guc_tables.c:2280 +msgid "-1 means wait forever." +msgstr "-1は無期限を意味します。" + +#: utils/misc/guc_tables.c:2279 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "ホットスタンバイサーバーがストリームの WAL データを処理している場合は、問い合わせをキャンセルする前に遅延秒数の最大値を設定。" -#: utils/misc/guc_tables.c:2172 +#: utils/misc/guc_tables.c:2290 msgid "Sets the minimum delay for applying changes during recovery." msgstr "リカバリ中の変更の適用の最小遅延時間を設定します。" -#: utils/misc/guc_tables.c:2183 +#: utils/misc/guc_tables.c:2301 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "WAL受信プロセスが送出側サーバーへ行う状況報告の最大間隔を設定。" -#: utils/misc/guc_tables.c:2194 +#: utils/misc/guc_tables.c:2312 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:2323 msgid "Sets the maximum number of concurrent connections." msgstr "同時接続数の最大値を設定。" -#: utils/misc/guc_tables.c:2216 +#: utils/misc/guc_tables.c:2334 msgid "Sets the number of connection slots reserved for superusers." msgstr "スーパーユーザーによる接続用に予約される接続スロットの数を設定。" -#: utils/misc/guc_tables.c:2226 +#: utils/misc/guc_tables.c:2344 msgid "Sets the number of connection slots reserved for roles with privileges of pg_use_reserved_connections." msgstr "pg_use_reserved_connections権限を持つロールのために予約する接続スロットの数を設定。" -#: utils/misc/guc_tables.c:2237 +#: utils/misc/guc_tables.c:2355 msgid "Amount of dynamic shared memory reserved at startup." msgstr "起動時に予約される動的共有メモリの量。" -#: utils/misc/guc_tables.c:2252 +#: utils/misc/guc_tables.c:2370 msgid "Sets the number of shared memory buffers used by the server." msgstr "サーバーで使用される共有メモリのバッファ数を設定。" -#: utils/misc/guc_tables.c:2263 +#: utils/misc/guc_tables.c:2381 msgid "Sets the buffer pool size for VACUUM, ANALYZE, and autovacuum." msgstr "VACUUM, ANALYZE, および自動VACUUMで使用するバッファプールのサイズを設定します。" -#: utils/misc/guc_tables.c:2274 +#: utils/misc/guc_tables.c:2392 msgid "Shows the size of the server's main shared memory area (rounded up to the nearest MB)." msgstr "サーバーの主共有メモリ領域のサイズを表示します(MB単位に切り上げられます)" -#: utils/misc/guc_tables.c:2285 +#: utils/misc/guc_tables.c:2403 msgid "Shows the number of huge pages needed for the main shared memory area." msgstr "主共有メモリ領域に必要となるヒュージページの数を表示します。" -#: utils/misc/guc_tables.c:2286 -msgid "-1 indicates that the value could not be determined." -msgstr "-1はこの値が確定できなかったことを示します。" +#: utils/misc/guc_tables.c:2404 +msgid "-1 means huge pages are not supported." +msgstr "-1はヒュージページがサポートされていないことを示します。" + +#: utils/misc/guc_tables.c:2414 +msgid "Shows the number of semaphores required for the server." +msgstr "サーバーで必要となるセマフォの数を表示。" -#: utils/misc/guc_tables.c:2296 +#: utils/misc/guc_tables.c:2425 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 -msgid "Specify 0 to have this value determined as a fraction of shared_buffers." -msgstr "0を指定するとこの値がshared_buffersに対する比率で決定されます。" +#: utils/misc/guc_tables.c:2426 utils/misc/guc_tables.c:2481 utils/misc/guc_tables.c:2492 +msgid "0 means use a fraction of \"shared_buffers\"." +msgstr "0で\"shared_buffers\"の一部を使用します。" -#: utils/misc/guc_tables.c:2307 +#: utils/misc/guc_tables.c:2436 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:2447 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:2458 msgid "Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY message cache." msgstr "LISTEN/NOTIFYのメッセージキャッシュで専有するバッファプールのサイズを設定する。" -#: utils/misc/guc_tables.c:2340 +#: utils/misc/guc_tables.c:2469 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." -msgstr "サブトランザクションのキャッシュで専有するバッファプールのサイズを設定する。" +#: utils/misc/guc_tables.c:2480 +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:2491 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:2502 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "各セッションで使用される一時バッファの最大数を設定。" -#: utils/misc/guc_tables.c:2384 +#: utils/misc/guc_tables.c:2513 msgid "Sets the TCP port the server listens on." msgstr "サーバーが接続を監視するTCPポートを設定。" -#: utils/misc/guc_tables.c:2394 +#: utils/misc/guc_tables.c:2523 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Unixドメインソケットのアクセス権限を設定。" -#: utils/misc/guc_tables.c:2395 +#: utils/misc/guc_tables.c:2524 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unixドメインソケットは、通常のUnixファイルシステム権限の設定を使います。 このパラメータ値は chmod と umask システムコールが受け付ける数値のモード指定を想定しています(慣習的な8進数書式を使うためには、0(ゼロ)で始めなくてはなりません)。 " -#: utils/misc/guc_tables.c:2409 +#: utils/misc/guc_tables.c:2538 msgid "Sets the file permissions for log files." msgstr "ログファイルのパーミッションを設定。" -#: utils/misc/guc_tables.c:2410 +#: utils/misc/guc_tables.c:2539 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "このパタメータ値は chmod や umask システムコールで使えるような数値モード指定であることが想定されます(慣習的な記法である8進数書式を使う場合は先頭に0(ゼロ) をつけてください)。 " -#: utils/misc/guc_tables.c:2424 +#: utils/misc/guc_tables.c:2553 msgid "Shows the mode of the data directory." msgstr "データディレクトリのモードを表示します。" -#: utils/misc/guc_tables.c:2425 +#: utils/misc/guc_tables.c:2554 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "このパタメータ値は chmod や umask システムコールが受け付ける数値形式のモード指定です(慣習的な8進形式を使う場合は先頭に0(ゼロ) をつけてください)。 " -#: utils/misc/guc_tables.c:2438 +#: utils/misc/guc_tables.c:2567 msgid "Sets the maximum memory to be used for query workspaces." msgstr "問い合わせの作業用空間として使用されるメモリの最大値を設定。" -#: utils/misc/guc_tables.c:2439 +#: utils/misc/guc_tables.c:2568 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:2585 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "保守作業で使用される最大メモリ量を設定。" -#: utils/misc/guc_tables.c:2452 +#: utils/misc/guc_tables.c:2586 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:2596 msgid "Sets the maximum memory to be used for logical decoding." msgstr "論理デコーディングで使用するメモリ量の上限を設定します。" -#: utils/misc/guc_tables.c:2463 +#: utils/misc/guc_tables.c:2597 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:2613 msgid "Sets the maximum stack depth, in kilobytes." msgstr "スタック長の最大値をキロバイト単位で設定。" -#: utils/misc/guc_tables.c:2490 +#: utils/misc/guc_tables.c:2624 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:2625 msgid "-1 means no limit." msgstr "-1は無制限を意味します。" -#: utils/misc/guc_tables.c:2501 +#: utils/misc/guc_tables.c:2635 msgid "Vacuum cost for a page found in the buffer cache." msgstr "バッファキャッシュにある1つのページをVACUUM処理する際のコスト。" -#: utils/misc/guc_tables.c:2511 +#: utils/misc/guc_tables.c:2645 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "バッファキャッシュにない1つのページをVACUUM処理する際のコスト。" -#: utils/misc/guc_tables.c:2521 +#: utils/misc/guc_tables.c:2655 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "VACUUM処理が1つのページをダーティにした際に課すコスト。" -#: utils/misc/guc_tables.c:2531 +#: utils/misc/guc_tables.c:2665 msgid "Vacuum cost amount available before napping." msgstr "VACUUM処理を一時休止させるまでに使用できるコスト。" -#: utils/misc/guc_tables.c:2541 +#: utils/misc/guc_tables.c:2675 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "自動VACUUM用のVACUUM処理を一時休止させるまでに使用できるコスト。" -#: utils/misc/guc_tables.c:2551 -msgid "Sets the maximum number of simultaneously open files for each server process." +#: utils/misc/guc_tables.c:2676 +msgid "-1 means use \"vacuum_cost_limit\"." +msgstr "-1で\"vacuum_cost_limit\"を使用します。" + +#: utils/misc/guc_tables.c:2685 +msgid "Sets the maximum number of files each server process is allowed to open simultaneously." msgstr "各サーバープロセスで同時にオープンできるファイルの最大数を設定。" -#: utils/misc/guc_tables.c:2564 +#: utils/misc/guc_tables.c:2698 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "同時に準備状態にできるトランザクションの最大数を設定。" -#: utils/misc/guc_tables.c:2575 +#: utils/misc/guc_tables.c:2709 msgid "Sets the minimum OID of tables for tracking locks." msgstr "ロックの追跡を行うテーブルの最小のOIDを設定。" -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2710 msgid "Is used to avoid output on system tables." msgstr "システムテーブルに関するの出力を避けるために使います。" -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2719 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "無条件でロックの追跡を行うテーブルのOIDを設定。" -#: utils/misc/guc_tables.c:2597 +#: utils/misc/guc_tables.c:2731 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 -msgid "A value of 0 turns off the timeout." -msgstr "0でこのタイムアウトは無効になります。 " - -#: utils/misc/guc_tables.c:2608 +#: utils/misc/guc_tables.c:2742 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "ロックの待機の最大許容時間を設定。" -#: utils/misc/guc_tables.c:2619 +#: utils/misc/guc_tables.c:2753 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:2764 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:2775 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:2786 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "VACUUM にテーブル行の凍結をさせる最小のトランザクションID差分。" -#: utils/misc/guc_tables.c:2662 +#: utils/misc/guc_tables.c:2796 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "行の凍結のためのテーブル全体スキャンを強制させる時のトランザクションID差分。" -#: utils/misc/guc_tables.c:2672 +#: utils/misc/guc_tables.c:2806 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "テーブル行でのマルチトランザクションIDの凍結を強制する最小のマルチトランザクション差分。" -#: utils/misc/guc_tables.c:2682 +#: utils/misc/guc_tables.c:2816 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:2826 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "VACUUMにおいて周回による停止を回避するためのフェイルセーフを実行されるまでの経過トランザクション数。" -#: utils/misc/guc_tables.c:2701 +#: utils/misc/guc_tables.c:2835 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "VACUUMにおいて周回による停止を回避するためのフェイルセーフが実行されるまでの経過マルチトランザクション数。" -#: utils/misc/guc_tables.c:2714 +#: utils/misc/guc_tables.c:2848 msgid "Sets the maximum number of locks per transaction." msgstr "1トランザクション当たりのロック数の上限を設定。" -#: utils/misc/guc_tables.c:2715 +#: utils/misc/guc_tables.c:2849 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 "共有ロックテーブルの大きさは、サーバープロセスまたは準備済みトランザクションごとに最大で\"max_locks_per_transaction\"個のオブジェクトが同時にロックされることを前提として決定されます。" -#: utils/misc/guc_tables.c:2726 +#: utils/misc/guc_tables.c:2860 msgid "Sets the maximum number of predicate locks per transaction." msgstr "1トランザクション当たりの述語ロック数の上限を設定。" -#: utils/misc/guc_tables.c:2727 +#: utils/misc/guc_tables.c:2861 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 "共有述語ロックテーブルの大きさは、サーバープロセスまたは準備済みトランザクションごとに最大で\"max_pred_locks_per_transaction\"個のオブジェクトが同時にロックされることを前提として決定されます。" -#: utils/misc/guc_tables.c:2738 +#: utils/misc/guc_tables.c:2872 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "1リレーション当たりで述語ロックされるページとタプルの数の上限値を設定。" -#: utils/misc/guc_tables.c:2739 +#: utils/misc/guc_tables.c:2873 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:2883 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "1ページあたりで述語ロックされるタプル数の上限値を設定。" -#: utils/misc/guc_tables.c:2750 +#: utils/misc/guc_tables.c:2884 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:2894 msgid "Sets the maximum allowed time to complete client authentication." msgstr "クライアント認証の完了までの最大許容時間を設定。" -#: utils/misc/guc_tables.c:2772 +#: utils/misc/guc_tables.c:2906 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:2918 msgid "Sets the maximum number of allocated pages for NOTIFY / LISTEN queue." msgstr "LISTEN / NOTIFYキュー用に割り当てられるページ数の上限を設定。" -#: utils/misc/guc_tables.c:2794 +#: utils/misc/guc_tables.c:2928 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "リカバリ中のWAL先読みバッファのサイズ。" -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2929 msgid "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." msgstr "参照先データブロックの先行読み込みのためのWAL先読みの最大量。" -#: utils/misc/guc_tables.c:2805 +#: utils/misc/guc_tables.c:2939 msgid "Sets the size of WAL files held for standby servers." msgstr "スタンバイサーバーのために確保するWALの量を設定します。" -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2950 msgid "Sets the minimum size to shrink the WAL to." msgstr "WALを縮小させる際の最小のサイズを設定。" -#: utils/misc/guc_tables.c:2828 +#: utils/misc/guc_tables.c:2962 msgid "Sets the WAL size that triggers a checkpoint." msgstr "チェックポイントの契機となるWALのサイズを指定。" -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2974 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "自動WALチェックポイントの最大間隔を設定。" -#: utils/misc/guc_tables.c:2851 +#: utils/misc/guc_tables.c:2985 msgid "Sets the maximum time before warning if checkpoints triggered by WAL volume happen too frequently." msgstr "WALの量契機のチェックポイントが高頻度で起きる場合に、警告を発するまでの回数を設定。" -#: utils/misc/guc_tables.c:2853 -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:2987 +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. 0 disables the warning." +msgstr "チェックポイントセグメントファイルを使い切ることが原因で起きるチェックポイントがこの時間間隔よりも頻繁に発生する場合、サーバーログにメッセージを書き出します。0でこの警告を無効にします。 " -#: utils/misc/guc_tables.c:2866 utils/misc/guc_tables.c:3084 utils/misc/guc_tables.c:3138 +#: utils/misc/guc_tables.c:3000 utils/misc/guc_tables.c:3230 utils/misc/guc_tables.c:3322 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:3001 utils/misc/guc_tables.c:3231 utils/misc/guc_tables.c:3323 +msgid "0 disables forced writeback." +msgstr "0で強制ライトバックを無効にします。" + +#: utils/misc/guc_tables.c:3011 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "共有メモリ内に割り当てられた、WALデータ用のディスクページバッファ数を設定。" -#: utils/misc/guc_tables.c:2878 -msgid "Specify -1 to have this value determined as a fraction of shared_buffers." -msgstr "-1を指定するとこの値がshared_buffersに対する比率で決定されます。" +#: utils/misc/guc_tables.c:3012 +msgid "-1 means use a fraction of \"shared_buffers\"." +msgstr "-1で\"shared_buffers\"の一部を使用します。" -#: utils/misc/guc_tables.c:2888 +#: utils/misc/guc_tables.c:3022 msgid "Time between WAL flushes performed in the WAL writer." msgstr "WALライタで実行する書き出しの時間間隔。" -#: utils/misc/guc_tables.c:2899 +#: utils/misc/guc_tables.c:3033 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "書き出しが実行されるまでにWALライタで出力するWALの量。" -#: utils/misc/guc_tables.c:2910 +#: utils/misc/guc_tables.c:3044 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "WALを出力する代わりにfsyncを使用する新規ファイルの最小サイズ。" -#: utils/misc/guc_tables.c:2921 +#: utils/misc/guc_tables.c:3055 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "WAL送信プロセスの最大同時実行数を設定。" -#: utils/misc/guc_tables.c:2932 +#: utils/misc/guc_tables.c:3066 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "同時に定義できるレプリケーションスロットの数の最大値を設定。" -#: utils/misc/guc_tables.c:2942 +#: utils/misc/guc_tables.c:3076 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "レプリケーションスロットで確保できるWALの量の最大値を設定します。" -#: utils/misc/guc_tables.c:2943 -msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." -msgstr "ディスク内のWALがこの量に達すると、レプリケーションスロットは停止とマークされ、セグメントは削除あるいは再利用のために解放されます。" +#: utils/misc/guc_tables.c:3077 +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. -1 means no maximum." +msgstr "ディスク内のWALがこの量に達すると、レプリケーションスロットは停止とマークされ、セグメントは削除あるいは再利用のために解放されます。-1で上限なしとなります。" -#: utils/misc/guc_tables.c:2955 +#: utils/misc/guc_tables.c:3089 msgid "Sets the maximum time to wait for WAL replication." msgstr "WALレプリケーションを待つ時間の最大値を設定。" -#: utils/misc/guc_tables.c:2966 +#: utils/misc/guc_tables.c:3100 +msgid "Sets the duration a replication slot can remain idle before it is invalidated." +msgstr "レプリケーションスロットが無効化されるまでのアイドル時間を設定。" + +#: utils/misc/guc_tables.c:3112 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "トランザクションのコミットからWALのディスク書き出しまでの遅延時間をマイクロ秒単位で設定。" -#: utils/misc/guc_tables.c:2978 +#: utils/misc/guc_tables.c:3124 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:3135 msgid "Sets the number of digits displayed for floating-point values." msgstr "浮動小数点値の表示桁数を設定。" -#: utils/misc/guc_tables.c:2990 +#: utils/misc/guc_tables.c:3136 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "このパラメータは、real、double precision、幾何データ型に影響します。ゼロまたは負のパラメータ値は標準的な桁数(FLT_DIG もしくは DBL_DIGどちらか適切な方)に追加されます。正の値は直接出力形式を指定します。" -#: utils/misc/guc_tables.c:3002 -msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." -msgstr "文がログに出力される最小の実行時間を設定します。サンプリングについてはlog_statement_sample_rateで決定されます。" +#: utils/misc/guc_tables.c:3148 +msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by \"log_statement_sample_rate\"." +msgstr "文がログ出力の対象となる最小の実行時間を設定します。サンプリングは\"log_statement_sample_rate\"で決定されます。" -#: utils/misc/guc_tables.c:3005 -msgid "Zero logs a sample of all queries. -1 turns this feature off." -msgstr "ゼロにすると全ての問い合わせを記録します。-1はこの機能を無効にします。" +#: utils/misc/guc_tables.c:3151 +msgid "-1 disables sampling. 0 means sample all statements." +msgstr "-1 でサンプリングを無効にします。0 はすべての文をサンプルすることを意味します。" -#: utils/misc/guc_tables.c:3015 +#: utils/misc/guc_tables.c:3161 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "全ての文のログを記録する最小の実行時間を設定。" -#: utils/misc/guc_tables.c:3017 -msgid "Zero prints all queries. -1 turns this feature off." -msgstr "ゼロにすると全ての問い合わせを出力します。-1はこの機能を無効にします。" +#: utils/misc/guc_tables.c:3163 +msgid "-1 disables logging statement durations. 0 means log all statement durations." +msgstr "-1 で文の実行時間のログ出力を無効にします。0 はすべての文の実行時間を記録することを意味します。" -#: utils/misc/guc_tables.c:3027 +#: utils/misc/guc_tables.c:3173 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "自動VACUUMの活動のログを記録する最小の実行時間を設定。" -#: utils/misc/guc_tables.c:3029 -msgid "Zero prints all actions. -1 turns autovacuum logging off." -msgstr "ゼロはすべての活動を出力します。-1は自動VACUUMのログ記録を無効にします。" +#: utils/misc/guc_tables.c:3175 +msgid "-1 disables logging autovacuum actions. 0 means log all autovacuum actions." +msgstr "-1 で自動VACUUMの実行ログ出力を無効にします。0 はすべての自動VACUUMの実行を記録することを意味します。" -#: utils/misc/guc_tables.c:3039 +#: utils/misc/guc_tables.c:3185 msgid "Sets the maximum length in bytes of data logged for bind parameter values when logging statements." msgstr "問い合わせ文をログ出力する際に、出力するbindパラメータ値データの最大バイト数を設定。" -#: utils/misc/guc_tables.c:3041 utils/misc/guc_tables.c:3053 -msgid "-1 to print values in full." -msgstr "-1 で値を全て出力します。" +#: utils/misc/guc_tables.c:3187 utils/misc/guc_tables.c:3199 +msgid "-1 means log values in full." +msgstr "-1 で値全体を出力します。" -#: utils/misc/guc_tables.c:3051 +#: utils/misc/guc_tables.c:3197 msgid "Sets the maximum length in bytes of data logged for bind parameter values when logging statements, on error." msgstr "エラー時の問い合わせ文をログ出力する際に、出力するbindパラメータ値データの最大バイト数を設定。" -#: utils/misc/guc_tables.c:3063 +#: utils/misc/guc_tables.c:3209 msgid "Background writer sleep time between rounds." msgstr "バックグランドライタの周期毎の待機時間" -#: utils/misc/guc_tables.c:3074 +#: utils/misc/guc_tables.c:3220 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "バックグランドライタが1周期で書き出すLRUページ数の最大値。" -#: utils/misc/guc_tables.c:3097 +#: utils/misc/guc_tables.c:3221 +msgid "0 disables background writing." +msgstr "0でバックグラウンド書き込みを無効にします。" + +#: utils/misc/guc_tables.c:3243 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:3244 utils/misc/guc_tables.c:3258 +msgid "0 disables simultaneous requests." +msgstr "0で同時並列リクエストを無効にします。" + +#: utils/misc/guc_tables.c:3257 msgid "A variant of \"effective_io_concurrency\" that is used for maintenance work." msgstr "保守作業に使用される\"effective_io_concurrency\"の亜種。" -#: utils/misc/guc_tables.c:3126 +#: utils/misc/guc_tables.c:3272 +msgid "Server-wide limit that clamps io_combine_limit." +msgstr "io_combine_limit の上限を制約する、サーバ全体の制限。" + +#: utils/misc/guc_tables.c:3286 msgid "Limit on the size of data reads and writes." msgstr "データの読み込みとか書き込みのサイズ制限" -#: utils/misc/guc_tables.c:3151 +#: utils/misc/guc_tables.c:3300 +msgid "Max number of IOs that one process can execute simultaneously." +msgstr "ひとつのプロセスが同時に実行できるIOの最大数。" + +#: utils/misc/guc_tables.c:3312 +msgid "Number of IO worker processes, for io_method=worker." +msgstr "io_method=worker の場合のIOワーカープロセス数。" + +#: utils/misc/guc_tables.c:3335 msgid "Maximum number of concurrent worker processes." msgstr "同時に実行されるワーカープロセス数の最大値です。" -#: utils/misc/guc_tables.c:3163 +#: utils/misc/guc_tables.c:3347 msgid "Maximum number of logical replication worker processes." msgstr "レプリケーションワーカープロセス数の最大値です。" -#: utils/misc/guc_tables.c:3175 +#: utils/misc/guc_tables.c:3359 msgid "Maximum number of table synchronization workers per subscription." msgstr "サブスクリプション毎のテーブル同期ワーカー数の最大値です。" -#: utils/misc/guc_tables.c:3187 +#: utils/misc/guc_tables.c:3371 msgid "Maximum number of parallel apply workers per subscription." msgstr "サブスクリプション毎のテーブル適用ワーカー数の最大値です。" -#: utils/misc/guc_tables.c:3197 +#: utils/misc/guc_tables.c:3383 +msgid "Sets the maximum number of active replication origins." +msgstr "有効なレプリケーション起源の最大数を設定します。" + +#: utils/misc/guc_tables.c:3393 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:3395 +msgid "0 disables time-based creation of new log files." +msgstr "0で時間ベースでのログファイル作成を無効にします。" + +#: utils/misc/guc_tables.c:3405 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:3407 +msgid "0 disables size-based creation of new log files." +msgstr "0でサイズベースでのログファイル作成を無効にします。" + +#: utils/misc/guc_tables.c:3417 msgid "Shows the maximum number of function arguments." msgstr "関数の引数の最大数を示します。" -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3428 msgid "Shows the maximum number of index keys." msgstr "インデックスキーの最大数を示します。" -#: utils/misc/guc_tables.c:3243 +#: utils/misc/guc_tables.c:3439 msgid "Shows the maximum identifier length." msgstr "識別子の最大長を示します。" -#: utils/misc/guc_tables.c:3254 +#: utils/misc/guc_tables.c:3450 msgid "Shows the size of a disk block." msgstr "ディスクブロックサイズを示します。" -#: utils/misc/guc_tables.c:3265 +#: utils/misc/guc_tables.c:3461 msgid "Shows the number of pages per disk file." msgstr "ディスクファイルごとのページ数を表示します。" -#: utils/misc/guc_tables.c:3276 +#: utils/misc/guc_tables.c:3472 msgid "Shows the block size in the write ahead log." msgstr "先行書き込みログ(WAL)におけるブロックサイズを表示します" -#: utils/misc/guc_tables.c:3287 +#: utils/misc/guc_tables.c:3483 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "WALの取り出しの失敗後に再試行する回数を設定。" -#: utils/misc/guc_tables.c:3299 +#: utils/misc/guc_tables.c:3495 msgid "Shows the size of write ahead log segments." msgstr "先行書き込みログ(WAL)セグメントのサイズを表示します" -#: utils/misc/guc_tables.c:3312 +#: utils/misc/guc_tables.c:3508 msgid "Time for which WAL summary files should be kept." msgstr "WAL集約ファイルを保持する時間。" -#: utils/misc/guc_tables.c:3325 +#: utils/misc/guc_tables.c:3509 +msgid "0 disables automatic summary file deletion." +msgstr "0で集約ファイルの自動削除を無効にします。" + +#: utils/misc/guc_tables.c:3521 msgid "Time to sleep between autovacuum runs." msgstr "自動VACUUMの実行開始間隔。" -#: utils/misc/guc_tables.c:3335 +#: utils/misc/guc_tables.c:3531 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "VACUUMを行うまでの、タプルを更新または削除した回数の最小値。" -#: utils/misc/guc_tables.c:3344 -msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." -msgstr "VACUUMが行われるまでの行挿入の回数の最小値、-1で挿入契機のVACUUMを無効化します。" +#: utils/misc/guc_tables.c:3540 +msgid "Maximum number of tuple updates or deletes prior to vacuum." +msgstr "VACUUMを行うまでの、タプルを更新または削除した回数の最大値。" + +#: utils/misc/guc_tables.c:3541 +msgid "-1 disables the maximum threshold." +msgstr "-1で上限を無効にします。" + +#: utils/misc/guc_tables.c:3549 +msgid "Minimum number of tuple inserts prior to vacuum." +msgstr "VACUUMを行うまでの、タプルを挿入した回数の最小値。" -#: utils/misc/guc_tables.c:3353 +#: utils/misc/guc_tables.c:3550 +msgid "-1 disables insert vacuums." +msgstr "-1で挿入契機のVACUUMを無効にします。" + +#: utils/misc/guc_tables.c:3558 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "ANALYZEが実行されるまでの、タプルを挿入、更新、削除した回数の最小値。" -#: utils/misc/guc_tables.c:3363 +#: utils/misc/guc_tables.c:3568 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "トランザクションID周回を防ぐためにテーブルを自動VACUUMする時点のトランザクションID差分。" -#: utils/misc/guc_tables.c:3375 +#: utils/misc/guc_tables.c:3580 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "マルチトランザクション周回を防止するためにテーブルを自動VACUUMする、マルチトランザクション差分。" -#: utils/misc/guc_tables.c:3385 +#: utils/misc/guc_tables.c:3590 +msgid "Sets the number of backend slots to allocate for autovacuum workers." +msgstr "自動VACUUMプロセスに割り当てるバックエンドスロット数を設定。" + +#: utils/misc/guc_tables.c:3599 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "自動VACUUMのワーカープロセスの最大同時実行数を設定。" -#: utils/misc/guc_tables.c:3395 +#: utils/misc/guc_tables.c:3609 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "ひとつの保守作業に割り当てる並列処理プロセスの数の最大値を設定。" -#: utils/misc/guc_tables.c:3405 +#: utils/misc/guc_tables.c:3619 msgid "Sets the maximum number of parallel processes per executor node." msgstr "エグゼキュータノードあたりの並列処理プロセスの数の最大値を設定。" -#: utils/misc/guc_tables.c:3416 +#: utils/misc/guc_tables.c:3630 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:3641 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "自動VACUUMプロセスで使用するメモリ量の最大値を設定。" -#: utils/misc/guc_tables.c:3438 +#: utils/misc/guc_tables.c:3642 +msgid "-1 means use \"maintenance_work_mem\"." +msgstr "-1で\"maintenance_work_mem\"を使用します。" + +#: utils/misc/guc_tables.c:3652 msgid "Time between issuing TCP keepalives." msgstr "TCPキープアライブを発行する時間間隔。" -#: utils/misc/guc_tables.c:3439 utils/misc/guc_tables.c:3450 utils/misc/guc_tables.c:3574 -msgid "A value of 0 uses the system default." -msgstr "0でシステムのデフォルトを使用します。" +#: utils/misc/guc_tables.c:3653 utils/misc/guc_tables.c:3664 utils/misc/guc_tables.c:3787 utils/misc/guc_tables.c:3798 +msgid "0 means use the system default." +msgstr "0でシステムのデフォルト値を使用します。" -#: utils/misc/guc_tables.c:3449 +#: utils/misc/guc_tables.c:3663 msgid "Time between TCP keepalive retransmits." msgstr "TCPキープアライブの再送信の時間間隔。" -#: utils/misc/guc_tables.c:3460 +#: utils/misc/guc_tables.c:3674 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:3685 msgid "Maximum number of TCP keepalive retransmits." msgstr "TCPキープアライブの再送信回数の最大値です。" -#: utils/misc/guc_tables.c:3472 -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 "接続が失われると判断するまでに再送信される、ひとつづきのキープアライブの数。0の場合はシステムのデフォルトを使用します。" +#: utils/misc/guc_tables.c:3686 +msgid "Number of consecutive keepalive retransmits that can be lost before a connection is considered dead. 0 means use the system default." +msgstr "接続が失われると判断するまでに再送信される、ひとつづきのキープアライブの数。0でシステムのデフォルト値を使用します。" -#: utils/misc/guc_tables.c:3483 +#: utils/misc/guc_tables.c:3697 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "GINによる正確な検索に対して許容する結果数の最大値を設定。" -#: utils/misc/guc_tables.c:3494 +#: utils/misc/guc_tables.c:3698 +msgid "0 means no limit." +msgstr "0は無制限を意味します。" + +#: utils/misc/guc_tables.c:3707 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:3708 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "つまり、PostgreSQLのデータファイルに対して使用されるキャッシュ(カーネルキャッシュおよび共有バッファ)全体の量です。これは通常8KBのディスクページを単位とします。" -#: utils/misc/guc_tables.c:3506 +#: utils/misc/guc_tables.c:3719 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "並列スキャンを検討するテーブルデータの量の最小値を設定。" -#: utils/misc/guc_tables.c:3507 +#: utils/misc/guc_tables.c:3720 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:3730 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "並列スキャンを検討するインデックスデータの量の最小値を設定。" -#: utils/misc/guc_tables.c:3518 +#: utils/misc/guc_tables.c:3731 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:3742 msgid "Shows the server version as an integer." msgstr "サーバーのバージョンを整数値で表示します。" -#: utils/misc/guc_tables.c:3540 +#: utils/misc/guc_tables.c:3753 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "このキロバイト数よりも大きな一時ファイルの使用をログに記録します。" -#: utils/misc/guc_tables.c:3541 -msgid "Zero logs all files. The default is -1 (turning this feature off)." -msgstr "ゼロにすると、全てのファイルを記録します。デフォルトは-1です(この機能を無効にします)。" +#: utils/misc/guc_tables.c:3754 +msgid "-1 disables logging temporary files. 0 means log all temporary files." +msgstr "-1で一時ファイルのログへの記録を無効にします。0ですべての一時ファイルをログに記録します。" -#: utils/misc/guc_tables.c:3551 +#: utils/misc/guc_tables.c:3764 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:3775 msgid "Sets the maximum size of the pending list for GIN index." msgstr "GINインデックスの保留リストの最大サイズを設定。" -#: utils/misc/guc_tables.c:3573 +#: utils/misc/guc_tables.c:3786 msgid "TCP user timeout." msgstr "TCPユーザータイムアウト。" -#: utils/misc/guc_tables.c:3584 +#: utils/misc/guc_tables.c:3797 msgid "The size of huge page that should be requested." msgstr "要求が見込まれるヒュージページのサイズ。" -#: utils/misc/guc_tables.c:3595 +#: utils/misc/guc_tables.c:3808 msgid "Aggressively flush system caches for debugging purposes." msgstr "デバッグ目的のために積極的にシステムキャッシュを消去する。" -#: utils/misc/guc_tables.c:3618 +#: utils/misc/guc_tables.c:3809 +msgid "0 means use normal caching behavior." +msgstr "0で通常のキャッシュ動作を行います。" + +#: utils/misc/guc_tables.c:3831 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "問い合わせ実行中に接続確認を行う時間間隔を設定します。" -#: utils/misc/guc_tables.c:3629 +#: utils/misc/guc_tables.c:3832 +msgid "0 disables connection checks." +msgstr "0で接続チェックを無効にします。" + +#: utils/misc/guc_tables.c:3842 msgid "Time between progress updates for long-running startup operations." msgstr "起動処理が長引いた際のステータス更新の時間間隔。" -#: utils/misc/guc_tables.c:3631 -msgid "0 turns this feature off." -msgstr "ゼロにするとこの機能を無効にします。" +#: utils/misc/guc_tables.c:3844 +msgid "0 disables progress updates." +msgstr "0で進捗情報の更新を無効にします。" -#: utils/misc/guc_tables.c:3641 +#: utils/misc/guc_tables.c:3854 msgid "Sets the iteration count for SCRAM secret generation." msgstr "SCRAMシークレット生成の際の反復回数を設定。" -#: utils/misc/guc_tables.c:3661 +#: utils/misc/guc_tables.c:3874 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:3885 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:3896 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:3907 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:3918 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:3929 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:3940 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:3952 msgid "Perform JIT compilation if query is more expensive." msgstr "問い合わせがこの値より高コストであればJITコンパイルを実行します。" -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3953 msgid "-1 disables JIT compilation." msgstr "-1 でJITコンパイルを禁止します。" -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3963 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "問い合わせがこの値より高コストであればJITコンパイルされた関数を最適化します。" -#: utils/misc/guc_tables.c:3751 +#: utils/misc/guc_tables.c:3964 msgid "-1 disables optimization." msgstr "-1で最適化を行わなくなります。" -#: utils/misc/guc_tables.c:3761 +#: utils/misc/guc_tables.c:3974 msgid "Perform JIT inlining if query is more expensive." msgstr "問い合わせがこの値より高コストであればJITコンパイルされた関数をインライン化します。" -#: utils/misc/guc_tables.c:3762 +#: utils/misc/guc_tables.c:3975 msgid "-1 disables inlining." msgstr "-1 でインライン化を禁止します。" -#: utils/misc/guc_tables.c:3772 +#: utils/misc/guc_tables.c:3985 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:3997 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:4009 msgid "GEQO: selective pressure within the population." msgstr "GEQO: 集合内の選択圧力。" -#: utils/misc/guc_tables.c:3807 +#: utils/misc/guc_tables.c:4020 msgid "GEQO: seed for random path selection." msgstr "GEQO: ランダムパス選択用のシード" -#: utils/misc/guc_tables.c:3818 +#: utils/misc/guc_tables.c:4031 msgid "Multiple of \"work_mem\" to use for hash tables." msgstr "ハッシュテーブルで使用する\"work_mem\"に対する倍率。" -#: utils/misc/guc_tables.c:3829 +#: utils/misc/guc_tables.c:4042 msgid "Multiple of the average buffer usage to free per round." msgstr "周期ごとに解放するバッファ数の平均バッファ使用量に対する倍数" -#: utils/misc/guc_tables.c:3839 +#: utils/misc/guc_tables.c:4052 msgid "Sets the seed for random-number generation." msgstr "乱数生成用のシードを設定。" -#: utils/misc/guc_tables.c:3850 +#: utils/misc/guc_tables.c:4063 msgid "Vacuum cost delay in milliseconds." msgstr "ミリ秒単位のコストベースのVACUUM処理の遅延時間です。" -#: utils/misc/guc_tables.c:3861 +#: utils/misc/guc_tables.c:4074 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "自動VACUUM用のミリ秒単位のコストベースのVACUUM処理の遅延時間です。" -#: utils/misc/guc_tables.c:3872 +#: utils/misc/guc_tables.c:4075 +msgid "-1 means use \"vacuum_cost_delay\"." +msgstr "-1で\"vacuum_cost_delay\"を使用します。" + +#: utils/misc/guc_tables.c:4085 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "VACUUMが実行されるまでのタプルの更新または削除回数のreltuplesに対する割合。" -#: utils/misc/guc_tables.c:3882 +#: utils/misc/guc_tables.c:4095 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "VACUUMが実行されるまでのタプルの挿入行数のreltuplesに対する割合。" -#: utils/misc/guc_tables.c:3892 +#: utils/misc/guc_tables.c:4105 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "ANALYZEが実行されるまでのタプルの更新または削除回数のreltuplesに対する割合。" -#: utils/misc/guc_tables.c:3902 +#: utils/misc/guc_tables.c:4115 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:4125 msgid "Fraction of statements exceeding \"log_min_duration_sample\" to be logged." msgstr "\"log_min_duration_sample\"を超過した文のうちログ出力を行う割合。" -#: utils/misc/guc_tables.c:3913 +#: utils/misc/guc_tables.c:4126 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:4135 msgid "Sets the fraction of transactions from which to log all statements." msgstr "すべての文をログ出力するトランザクションの割合を設定します。" -#: utils/misc/guc_tables.c:3923 +#: utils/misc/guc_tables.c:4136 msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "0.0 (ログ出力しない)から 1.0 (全てのトランザクションの全ての文をログ出力する)の間の値を指定してください。" +#: utils/misc/guc_tables.c:4146 +msgid "Fraction of pages in a relation vacuum can scan and fail to freeze before disabling eager scanning." +msgstr "VACUUMが貪欲スキャンを無効にする前にスキャンできるページ数の、リレーション全体に対する割合" + +#: utils/misc/guc_tables.c:4147 +msgid "A value of 0.0 disables eager scanning and a value of 1.0 will eagerly scan up to 100 percent of the all-visible pages in the relation. If vacuum successfully freezes these pages, the cap is lower than 100 percent, because the goal is to amortize page freezing across multiple vacuums." +msgstr "0.0で貪欲スキャンを無効にし、1.0ではリレーション内の全可視ページを最大100%まで貪欲にスキャンします。ページの凍結を複数回のVACUUMに分散させることを目的としているため、VACUUMがスキャンしたページの凍結に成功した場合には、この上限は100%を下回ることがあります。" + # hoge -#: utils/misc/guc_tables.c:3942 +#: utils/misc/guc_tables.c:4165 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "WALファイルの保管のために呼び出されるシェルスクリプトを設定。" -#: utils/misc/guc_tables.c:3943 -msgid "This is used only if \"archive_library\" is not set." -msgstr "これは\"archive_library\"の設定がされていない場合にのみ使用されます。" +#: utils/misc/guc_tables.c:4166 +msgid "An empty string means use \"archive_library\"." +msgstr "空文字列で”archive_library\"を使用します。" # hoge -#: utils/misc/guc_tables.c:3952 +#: utils/misc/guc_tables.c:4175 msgid "Sets the library that will be called to archive a WAL file." msgstr "WALファイルのアーカイブのために呼び出すライブラリを設定します。" -#: utils/misc/guc_tables.c:3953 -msgid "An empty string indicates that \"archive_command\" should be used." -msgstr "空文字列は\"archive_command\"の使用を指示します。" +#: utils/misc/guc_tables.c:4176 +msgid "An empty string means use \"archive_command\"." +msgstr "空文字列で\"archive_command\"を使用します。" # hoge -#: utils/misc/guc_tables.c:3962 +#: utils/misc/guc_tables.c:4185 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "アーカイブされたWALファイルを取り出すために呼び出すシェルコマンドを設定します。" # hoge -#: utils/misc/guc_tables.c:3972 +#: utils/misc/guc_tables.c:4195 msgid "Sets the shell command that will be executed at every restart point." msgstr "リスタートポイントの時に実行するシェルコマンドを設定。" # hoge -#: utils/misc/guc_tables.c:3982 +#: utils/misc/guc_tables.c:4205 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "リカバリ終了時に1度だけ実行されるシェルコマンドを設定。" -#: utils/misc/guc_tables.c:3992 +#: utils/misc/guc_tables.c:4215 msgid "Specifies the timeline to recover into." msgstr "リカバリの目標タイムラインを指定します。" -#: utils/misc/guc_tables.c:4002 +#: utils/misc/guc_tables.c:4225 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "\"immediate\"を指定すると一貫性が確保できた時点でリカバリを終了します。" -#: utils/misc/guc_tables.c:4011 +#: utils/misc/guc_tables.c:4234 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "リカバリを指定したトランザクションIDまで進めます。" -#: utils/misc/guc_tables.c:4020 +#: utils/misc/guc_tables.c:4243 msgid "Sets the time stamp up to which recovery will proceed." msgstr "リカバリを指定したタイムスタンプの時刻まで進めます。" -#: utils/misc/guc_tables.c:4029 +#: utils/misc/guc_tables.c:4252 msgid "Sets the named restore point up to which recovery will proceed." msgstr "リカバリを指定した名前のリストアポイントまで進めます。" -#: utils/misc/guc_tables.c:4038 +#: utils/misc/guc_tables.c:4261 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "リカバリを先行書き込みログの指定したLSNまで進めます。" -#: utils/misc/guc_tables.c:4048 +#: utils/misc/guc_tables.c:4271 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:4282 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:4292 msgid "Sets the client's character set encoding." msgstr "クライアントの文字集合の符号化方式を設定。" -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4303 msgid "Controls information prefixed to each log line." msgstr "各ログ行の前に付ける情報を制御します。" -#: utils/misc/guc_tables.c:4081 -msgid "If blank, no prefix is used." -msgstr "もし空であればなにも付加しません。" +#: utils/misc/guc_tables.c:4304 +msgid "An empty string means no prefix." +msgstr "空文字列で何も付加しません。" -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4313 msgid "Sets the time zone to use in log messages." msgstr "ログメッセージ使用するタイムゾーンを設定。" -#: utils/misc/guc_tables.c:4100 +#: utils/misc/guc_tables.c:4323 msgid "Sets the display format for date and time values." msgstr "日付時刻値の表示用書式を設定。" -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4324 msgid "Also controls interpretation of ambiguous date inputs." msgstr "曖昧な日付の入力の解釈も制御します。" -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4335 msgid "Sets the default table access method for new tables." msgstr "新規テーブルで使用されるデフォルトテーブルアクセスメソッドを設定。" -#: utils/misc/guc_tables.c:4123 +#: utils/misc/guc_tables.c:4346 msgid "Sets the default tablespace to create tables and indexes in." msgstr "テーブルとインデックスの作成先となるデフォルトのテーブル空間を設定。" -#: utils/misc/guc_tables.c:4124 -msgid "An empty string selects the database's default tablespace." -msgstr "空文字列はデータベースのデフォルトのテーブル空間を選択します。" +#: utils/misc/guc_tables.c:4347 utils/misc/guc_tables.c:4358 +msgid "An empty string means use the database's default tablespace." +msgstr "空文字列でデータベースのデフォルトのテーブル空間を使用します。" -#: utils/misc/guc_tables.c:4134 +#: utils/misc/guc_tables.c:4357 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:4368 msgid "Sets whether a CREATEROLE user automatically grants the role to themselves, and with which options." msgstr "CREATEROLEを持つユーザーが自動的にそのロールを自身にGRANTするかどうかを対象となるオプションとともに設定します" -#: utils/misc/guc_tables.c:4157 +#: utils/misc/guc_tables.c:4370 +msgid "An empty string disables automatic self grants." +msgstr "空文字列で自動の自己権限付与を無効にします。" + +#: utils/misc/guc_tables.c:4380 msgid "Sets the path for dynamically loadable modules." msgstr "動的ロード可能モジュールのパスを設定。" -#: utils/misc/guc_tables.c:4158 +#: utils/misc/guc_tables.c:4381 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:4394 +msgid "Sets the path for extension control files." +msgstr "機能拡張制御ファイルのパスを設定。" + +#: utils/misc/guc_tables.c:4395 +msgid "The remaining extension script and secondary control files are then loaded from the same directory where the primary control file was found." +msgstr "残りの機能拡張スクリプトと二次制御ファイルは、主制御ファイルと同じディレクトリから読み込まれます。" + +#: utils/misc/guc_tables.c:4406 msgid "Sets the location of the Kerberos server key file." msgstr "Kerberosサーバーキーファイルの場所を設定。" -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4417 msgid "Sets the Bonjour service name." msgstr "Bonjour サービス名を設定。" -#: utils/misc/guc_tables.c:4192 +#: utils/misc/guc_tables.c:4418 +msgid "An empty string means use the computer name." +msgstr "空文字列でコンピューター名を使用します。" + +#: utils/misc/guc_tables.c:4427 msgid "Sets the language in which messages are displayed." msgstr "表示用メッセージの言語を設定。" -#: utils/misc/guc_tables.c:4202 +#: utils/misc/guc_tables.c:4428 utils/misc/guc_tables.c:4438 utils/misc/guc_tables.c:4448 utils/misc/guc_tables.c:4458 +msgid "An empty string means use the operating system setting." +msgstr "空文字列でオペレーティングシステムの設定を使用します。" + +#: utils/misc/guc_tables.c:4437 msgid "Sets the locale for formatting monetary amounts." msgstr "通貨書式で使用するロケールを設定。 " -#: utils/misc/guc_tables.c:4212 +#: utils/misc/guc_tables.c:4447 msgid "Sets the locale for formatting numbers." msgstr "数字の書式で使用するロケールを設定。" -#: utils/misc/guc_tables.c:4222 +#: utils/misc/guc_tables.c:4457 msgid "Sets the locale for formatting date and time values." msgstr "日付と時間の書式で使用するロケールを設定。" -#: utils/misc/guc_tables.c:4232 +#: utils/misc/guc_tables.c:4467 msgid "Lists shared libraries to preload into each backend." msgstr "各バックエンドに事前ロードする共有ライブラリを列挙します。" -#: utils/misc/guc_tables.c:4243 +#: utils/misc/guc_tables.c:4478 msgid "Lists shared libraries to preload into server." msgstr "サーバーに事前ロードする共有ライブラリを列挙します。" -#: utils/misc/guc_tables.c:4254 +#: utils/misc/guc_tables.c:4489 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "各バックエンドに事前読み込みする非特権共有ライブラリを列挙します。" -#: utils/misc/guc_tables.c:4265 +#: utils/misc/guc_tables.c:4500 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:4512 msgid "Shows the server (database) character set encoding." msgstr "サーバー(データベース)文字セット符号化方式を表示します。" -#: utils/misc/guc_tables.c:4289 +#: utils/misc/guc_tables.c:4524 msgid "Shows the server version." msgstr "サーバーのバージョンを表示します。" -#: utils/misc/guc_tables.c:4301 +#: utils/misc/guc_tables.c:4536 msgid "Sets the current role." msgstr "現在のロールを設定。" -#: utils/misc/guc_tables.c:4313 +#: utils/misc/guc_tables.c:4548 msgid "Sets the session user name." msgstr "セッションユーザー名を設定。" -#: utils/misc/guc_tables.c:4324 +#: utils/misc/guc_tables.c:4559 msgid "Sets the destination for server log output." msgstr "サーバーログの出力先を設定。" -#: utils/misc/guc_tables.c:4325 +#: utils/misc/guc_tables.c:4560 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\", and \"eventlog\", depending on the platform." msgstr "有効な値は、プラットフォームに依存しますが\"stderr\"、\"syslog\"、\"csvlog\"、\"jsonlog\"そして\"eventlog\"の組み合わせです。" -#: utils/misc/guc_tables.c:4336 +#: utils/misc/guc_tables.c:4571 msgid "Sets the destination directory for log files." msgstr "ログファイルの格納ディレクトリを設定。" -#: utils/misc/guc_tables.c:4337 +#: utils/misc/guc_tables.c:4572 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:4582 msgid "Sets the file name pattern for log files." msgstr "ログファイルのファイル名パターンを設定。" -#: utils/misc/guc_tables.c:4358 +#: utils/misc/guc_tables.c:4593 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:4604 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:4615 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "タイムスタンプの表示と解釈に使用するタイムゾーンを設定。" -#: utils/misc/guc_tables.c:4390 +#: utils/misc/guc_tables.c:4625 msgid "Selects a file of time zone abbreviations." msgstr "タイムゾーン省略形用のファイルを選択します。" -#: utils/misc/guc_tables.c:4400 +#: utils/misc/guc_tables.c:4635 msgid "Sets the owning group of the Unix-domain socket." msgstr "Unixドメインソケットを所有するグループを設定。" -#: utils/misc/guc_tables.c:4401 -msgid "The owning user of the socket is always the user that starts the server." -msgstr "ソケットを所有するユーザーは常にサーバーを開始したユーザーです。" +#: utils/misc/guc_tables.c:4636 +msgid "The owning user of the socket is always the user that starts the server. An empty string means use the user's default group." +msgstr "ソケットを所有するユーザーは常にサーバーを開始したユーザーです。空文字列でユーザのデフォルトグループを使用します。" -#: utils/misc/guc_tables.c:4411 +#: utils/misc/guc_tables.c:4646 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Unixドメインソケットの作成先ディレクトリを設定。" -#: utils/misc/guc_tables.c:4422 +#: utils/misc/guc_tables.c:4657 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:4672 msgid "Sets the server's data directory." msgstr "サーバーのデータディレクトリを設定。" -#: utils/misc/guc_tables.c:4448 +#: utils/misc/guc_tables.c:4683 msgid "Sets the server's main configuration file." msgstr "サーバーのメイン設定ファイルを設定。" -#: utils/misc/guc_tables.c:4459 +#: utils/misc/guc_tables.c:4694 msgid "Sets the server's \"hba\" configuration file." msgstr "サーバーの\"hba\"設定ファイルを設定。" -#: utils/misc/guc_tables.c:4470 +#: utils/misc/guc_tables.c:4705 msgid "Sets the server's \"ident\" configuration file." msgstr "サーバーの\"ident\"設定ファイルを設定。" -#: utils/misc/guc_tables.c:4481 +#: utils/misc/guc_tables.c:4716 msgid "Writes the postmaster PID to the specified file." msgstr "postmasterのPIDを指定したファイルに書き込みます。" -#: utils/misc/guc_tables.c:4492 +#: utils/misc/guc_tables.c:4727 msgid "Shows the name of the SSL library." msgstr "SSLライブラリの名前を表示します。" -#: utils/misc/guc_tables.c:4507 +#: utils/misc/guc_tables.c:4742 msgid "Location of the SSL server certificate file." msgstr "SSLサーバー証明書ファイルの場所です" -#: utils/misc/guc_tables.c:4517 +#: utils/misc/guc_tables.c:4752 msgid "Location of the SSL server private key file." msgstr "SSLサーバー秘密鍵ファイルの場所です。" -#: utils/misc/guc_tables.c:4527 +#: utils/misc/guc_tables.c:4762 msgid "Location of the SSL certificate authority file." msgstr "SSL認証局ファイルの場所です" -#: utils/misc/guc_tables.c:4537 +#: utils/misc/guc_tables.c:4772 msgid "Location of the SSL certificate revocation list file." msgstr "SSL証明書失効リストファイルの場所です。" -#: utils/misc/guc_tables.c:4547 +#: utils/misc/guc_tables.c:4782 msgid "Location of the SSL certificate revocation list directory." msgstr "SSL証明書失効リストディレクトリの場所です。" -#: utils/misc/guc_tables.c:4557 +#: utils/misc/guc_tables.c:4792 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:4803 msgid "Sets default text search configuration." msgstr "デフォルトのテキスト検索設定を設定します。" -#: utils/misc/guc_tables.c:4578 -msgid "Sets the list of allowed SSL ciphers." -msgstr "SSL暗号として許されるリストを設定。" +#: utils/misc/guc_tables.c:4813 +msgid "Sets the list of allowed TLSv1.3 cipher suites." +msgstr "使用を許可するTLSv1.3の暗号スイートのリストを設定。" -#: utils/misc/guc_tables.c:4593 -msgid "Sets the curve to use for ECDH." -msgstr "ECDHで使用する曲線を設定。" +#: utils/misc/guc_tables.c:4814 +msgid "An empty string means use the default cipher suites." +msgstr "空文字列でデフォルトの暗号スイートを使用します。" -#: utils/misc/guc_tables.c:4608 +#: utils/misc/guc_tables.c:4824 +msgid "Sets the list of allowed TLSv1.2 (and lower) ciphers." +msgstr "使用可能なTLSv1.2(およびそれ以前)の暗号方式のリストを設定。" + +#: utils/misc/guc_tables.c:4839 +msgid "Sets the group(s) to use for Diffie-Hellman key exchange." +msgstr "Diffie-Hellman鍵交換で使用するグループ(群)を設定。" + +#: utils/misc/guc_tables.c:4840 +msgid "Multiple groups can be specified using colon-separated list." +msgstr "複数のグループはコロン区切りのリストとして指定できます。" + +#: utils/misc/guc_tables.c:4854 msgid "Location of the SSL DH parameters file." msgstr "SSLのDHパラメータファイルの場所です。" -#: utils/misc/guc_tables.c:4619 +#: utils/misc/guc_tables.c:4855 +msgid "An empty string means use compiled-in default parameters." +msgstr "空文字列でコンパイル時設定のデフォルトのパラメーターを使用します。" + +#: utils/misc/guc_tables.c:4865 msgid "Command to obtain passphrases for SSL." msgstr "SSLのパスフレーズを取得するコマンド。" -#: utils/misc/guc_tables.c:4630 +#: utils/misc/guc_tables.c:4866 +msgid "An empty string means use the built-in prompting mechanism." +msgstr "空文字列で内蔵のパスワード入力機構を使用します。" + +#: utils/misc/guc_tables.c:4876 msgid "Sets the application name to be reported in statistics and logs." msgstr "統計やログで報告されるアプリケーション名を設定。" -#: utils/misc/guc_tables.c:4641 +#: utils/misc/guc_tables.c:4887 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:4898 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "WALの整合性チェックを行う対象とするリソースマネージャを設定。" -#: utils/misc/guc_tables.c:4653 +#: utils/misc/guc_tables.c:4899 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "全ページイメージが全てのデータブロックに対して記録され、WAL再生の結果とクロスチェックされます。" -#: utils/misc/guc_tables.c:4663 +#: utils/misc/guc_tables.c:4909 msgid "JIT provider to use." msgstr "使用するJITプロバイダ。" -#: utils/misc/guc_tables.c:4674 +#: utils/misc/guc_tables.c:4920 msgid "Log backtrace for errors in these functions." msgstr "これらの関数でエラーが起きた場合にはバックトレースをログに出力します。" -#: utils/misc/guc_tables.c:4685 +#: utils/misc/guc_tables.c:4931 msgid "Use direct I/O for file access." msgstr "ファイルアクセスに直接I/Oを使用します。" -#: utils/misc/guc_tables.c:4696 -msgid "Lists streaming replication standby server slot names that logical WAL sender processes will wait for." -msgstr "論理walsenderプロセスが待ち受け対象とするストリーミングレプリケーションのスタンバイのスロット名を列挙します。" +#: utils/misc/guc_tables.c:4932 +msgid "An empty string disables direct I/O." +msgstr "空文字列で直接I/Oを無効にします。" + +#: utils/misc/guc_tables.c:4942 +msgid "Lists streaming replication standby server replication slot names that logical WAL sender processes will wait for." +msgstr "論理WAL senderプロセスが待ち受け対象とするストリーミングレプリケーションのスタンバイサーバーのレプリケーションスロット名を列挙します。" + +#: utils/misc/guc_tables.c:4944 +msgid "Logical WAL sender processes will send decoded changes to output plugins only after the specified replication slots have confirmed receiving WAL." +msgstr "論理WAL senderプロセスは指定されたレプリケーションスロットによるWALの受け取り確認後に初めてデコードされた変更を出力プラグインに送出します。" + +#: utils/misc/guc_tables.c:4956 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "指定した種別の非システムリレーションへのアクセスを禁止します。" + +#: utils/misc/guc_tables.c:4967 +msgid "Lists libraries that may be called to validate OAuth v2 bearer tokens." +msgstr "OAuth v2 の Bearer トークンを検証するために使用できるライブラリの一覧。" -#: 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." -msgstr "論理walsenderプロセスは指定されたレプリケーションスロットによるWALの受け取り確認後に初めてデコードされた変更をプラグインに送出します。" +#: utils/misc/guc_tables.c:4978 +msgid "Logs specified aspects of connection establishment and setup." +msgstr "接続の確立やセットアップに関する指定された情報をログに記録します。" -#: utils/misc/guc_tables.c:4719 +#: utils/misc/guc_tables.c:4999 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "文字列リテラルで\"\\'\"が許可されるかどうかを設定。" -#: utils/misc/guc_tables.c:4729 +#: utils/misc/guc_tables.c:5009 msgid "Sets the output format for bytea." msgstr "bytea の出力フォーマットを設定。" -#: utils/misc/guc_tables.c:4739 +#: utils/misc/guc_tables.c:5019 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:5020 utils/misc/guc_tables.c:5116 utils/misc/guc_tables.c:5127 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:5030 msgid "Enables in-core computation of query identifiers." msgstr "問い合わせ識別子の内部生成を有効にする。" -#: utils/misc/guc_tables.c:4760 +#: utils/misc/guc_tables.c:5040 msgid "Enables the planner to use constraints to optimize queries." msgstr "問い合わせの最適化の際にプランナに制約を利用させる。" -#: utils/misc/guc_tables.c:4761 +#: utils/misc/guc_tables.c:5041 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:5052 msgid "Sets the default compression method for compressible values." msgstr "圧縮可能な値に対して使用されるデフォルト圧縮方式を設定。" -#: utils/misc/guc_tables.c:4783 +#: utils/misc/guc_tables.c:5063 msgid "Sets the transaction isolation level of each new transaction." msgstr "新規トランザクションのトランザクション分離レベルを設定。" -#: utils/misc/guc_tables.c:4793 +#: utils/misc/guc_tables.c:5073 msgid "Sets the current transaction's isolation level." msgstr "現在のトランザクションの分離レベルを設定。" -#: utils/misc/guc_tables.c:4804 +#: utils/misc/guc_tables.c:5084 msgid "Sets the display format for interval values." msgstr "インターバル値の表示フォーマットを設定。" -#: utils/misc/guc_tables.c:4815 +#: utils/misc/guc_tables.c:5095 msgid "Log level for reporting invalid ICU locale strings." msgstr "不正なICUロケール設定の報告に使用するログレベル。" -#: utils/misc/guc_tables.c:4825 +#: utils/misc/guc_tables.c:5105 msgid "Sets the verbosity of logged messages." msgstr "ログ出力メッセージの詳細度を設定。" -#: utils/misc/guc_tables.c:4835 +#: utils/misc/guc_tables.c:5115 msgid "Sets the message levels that are logged." msgstr "ログに出力するメッセージレベルを設定。" -#: utils/misc/guc_tables.c:4846 +#: utils/misc/guc_tables.c:5126 msgid "Causes all statements generating error at or above this level to be logged." msgstr "このレベル以上のエラーを発生させた全てのSQL文をログに記録します。" -#: utils/misc/guc_tables.c:4857 +#: utils/misc/guc_tables.c:5137 msgid "Sets the type of statements logged." msgstr "ログ出力する文の種類を設定。" -#: utils/misc/guc_tables.c:4867 +#: utils/misc/guc_tables.c:5147 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "syslogを有効にした場合に使用するsyslog \"facility\"を設定。" -#: utils/misc/guc_tables.c:4878 +#: utils/misc/guc_tables.c:5158 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "トリガと書き換えルールに関するセッションの動作を設定。" -#: utils/misc/guc_tables.c:4888 +#: utils/misc/guc_tables.c:5168 msgid "Sets the current transaction's synchronization level." msgstr "現在のトランザクションの同期レベルを設定。" -#: utils/misc/guc_tables.c:4898 +#: utils/misc/guc_tables.c:5178 msgid "Allows archiving of WAL files using \"archive_command\"." msgstr "\"archive_command\"を使用したWALファイルのアーカイブ処理を許可します。" -#: utils/misc/guc_tables.c:4908 +#: utils/misc/guc_tables.c:5188 msgid "Sets the action to perform upon reaching the recovery target." msgstr "リカバリ目標に到達した際の動作を設定。" -#: utils/misc/guc_tables.c:4918 +#: utils/misc/guc_tables.c:5198 msgid "Collects function-level statistics on database activity." msgstr "データベースの動作に関して、関数レベルの統計情報を収集します。" -#: utils/misc/guc_tables.c:4929 +#: utils/misc/guc_tables.c:5209 msgid "Sets the consistency of accesses to statistics data." msgstr "統計情報読み出し時の一貫性レベルを設定します。" -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:5219 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:5229 msgid "Sets the level of information written to the WAL." msgstr "WALに書き出される情報のレベルを設定します。" -#: utils/misc/guc_tables.c:4959 +#: utils/misc/guc_tables.c:5239 msgid "Selects the dynamic shared memory implementation used." msgstr "動的共有メモリで使用する実装を選択します。" -#: utils/misc/guc_tables.c:4969 +#: utils/misc/guc_tables.c:5249 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:5259 +msgid "Selects the file copy method." +msgstr "ファイルのコピー方式を選択します。" + +#: utils/misc/guc_tables.c:5269 msgid "Selects the method used for forcing WAL updates to disk." msgstr "WAL更新のディスクへの書き出しを強制するめの方法を選択します。" -#: utils/misc/guc_tables.c:4989 +#: utils/misc/guc_tables.c:5279 msgid "Sets how binary values are to be encoded in XML." msgstr "XMLでどのようにバイナリ値を符号化するかを設定します。" -#: utils/misc/guc_tables.c:4999 +#: utils/misc/guc_tables.c:5289 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "暗黙的なパースおよび直列化操作においてXMLデータを文書とみなすか断片とみなすかを設定します。" -#: utils/misc/guc_tables.c:5010 +#: utils/misc/guc_tables.c:5300 msgid "Use of huge pages on Linux or Windows." msgstr "LinuxおよびWindowsでヒュージページを使用。" -#: utils/misc/guc_tables.c:5020 +#: utils/misc/guc_tables.c:5310 msgid "Indicates the status of huge pages." msgstr "ヒュージページの状態を表示。" -#: utils/misc/guc_tables.c:5031 +#: utils/misc/guc_tables.c:5321 msgid "Prefetch referenced blocks during recovery." msgstr "リカバリ中に被参照ブロックの事前読み込みを行う。" -#: utils/misc/guc_tables.c:5032 +#: utils/misc/guc_tables.c:5322 msgid "Look ahead in the WAL to find references to uncached data." msgstr "キャッシュされていないデータへの参照の検出のためにWALの先読みを行う。" -#: utils/misc/guc_tables.c:5041 +#: utils/misc/guc_tables.c:5331 msgid "Forces the planner's use parallel query nodes." msgstr "プランナに並列問い合わせノードの使用を強制します。" -#: utils/misc/guc_tables.c:5042 +#: utils/misc/guc_tables.c:5332 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:5344 msgid "Chooses the algorithm for encrypting passwords." msgstr "パスワードの暗号化に使用するアルゴリズムを選択する。" -#: utils/misc/guc_tables.c:5064 +#: utils/misc/guc_tables.c:5354 msgid "Controls the planner's selection of custom or generic plan." msgstr "プランナでのカスタムプランと汎用プランの選択を制御。" -#: utils/misc/guc_tables.c:5065 +#: utils/misc/guc_tables.c:5355 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:5367 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "使用する SSL/TLSプロトコルの最小バージョンを設定。" -#: utils/misc/guc_tables.c:5089 +#: utils/misc/guc_tables.c:5379 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "使用可能な最大の SSL/TLS プロトコルバージョンを指定します。" -#: utils/misc/guc_tables.c:5101 +#: utils/misc/guc_tables.c:5391 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "クラシュリカバリ前に行うデータディレクトリの同期の方法を設定する。" -#: utils/misc/guc_tables.c:5110 +#: utils/misc/guc_tables.c:5400 msgid "Forces immediate streaming or serialization of changes in large transactions." msgstr "大きなトランザクションにおいて、即時ストリーミングまたは変更のシリアライズを強制します。" -#: utils/misc/guc_tables.c:5111 +#: utils/misc/guc_tables.c:5401 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 "パブリッシャでは、この設定はロジカルでコーディングで個々の変更のストリーミングまたはシリアル化を実行させます。サブスクライバではすべての変更をファイルへシリアライズし、トランザクション終了時にその変更情報の読み出しおよび適用の実行をパラレルワーカーに指示するようにします。" +#: utils/misc/guc_tables.c:5413 +msgid "Selects the method for executing asynchronous I/O." +msgstr "非同期I/Oの実行方式を選択します。" + #: utils/misc/help_config.c:129 #, c-format msgid "internal error: unrecognized run-time parameter type\n" @@ -30043,6 +31382,26 @@ msgstr "問い合わせはテーブル\"%s\"に対する行レベルセキュリ msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "テーブルの所有者に対するポリシを無効にするには、ALTER TABLE NO FORCE ROW LEVEL SECURITY を使ってください。" +#: utils/misc/stack_depth.c:101 +#, c-format +msgid "stack depth limit exceeded" +msgstr "スタック長制限を越えました" + +#: utils/misc/stack_depth.c:102 +#, c-format +msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." +msgstr "プラットフォームのスタック長制限が適切であることを確認した後に、設定パラメータ\"max_stack_depth\" (現在 %dkB)を増やしてください。" + +#: utils/misc/stack_depth.c:149 +#, c-format +msgid "\"max_stack_depth\" must not exceed %zdkB." +msgstr "\"max_stack_depth\"は%zdkBを越えてはなりません。" + +#: utils/misc/stack_depth.c:151 +#, c-format +msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." +msgstr "プラットフォームのスタック長制限を\"ulimit -s\"または同等の機能を使用して増加してください" + #: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" @@ -30058,57 +31417,57 @@ msgstr "タイムゾーンファイル\"%3$s\"の%4$d行のタイムゾーン省 msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%2$s\"の%3$d行のタイムゾーンオフセット%1$dは範囲外です" -#: utils/misc/tzparser.c:112 +#: utils/misc/tzparser.c:113 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dでタイムゾーン省略形がありません" -#: utils/misc/tzparser.c:121 +#: utils/misc/tzparser.c:122 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dでタイムゾーンオフセットがありません" -#: utils/misc/tzparser.c:133 +#: utils/misc/tzparser.c:134 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dのタイムゾーンオフセット値が無効です" -#: utils/misc/tzparser.c:169 +#: utils/misc/tzparser.c:170 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dで構文が無効です" -#: utils/misc/tzparser.c:237 +#: utils/misc/tzparser.c:238 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "タイムゾーン省略形\"%s\"が複数定義されています" -#: utils/misc/tzparser.c:239 +#: utils/misc/tzparser.c:240 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "タイムゾーンファイル\"%s\"の行%dの項目は、ファイル\"%s\"の行%dと競合します。" -#: utils/misc/tzparser.c:301 +#: utils/misc/tzparser.c:302 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "タイムゾーンファイル名が無効です: \"%s\"" -#: utils/misc/tzparser.c:314 +#: utils/misc/tzparser.c:315 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "ファイル\"%s\"でタイムゾーンファイルの再帰の上限を超えました。" -#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 +#: utils/misc/tzparser.c:354 utils/misc/tzparser.c:367 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "タイムゾーンファイル\"%s\"を読み込めませんでした: %m" -#: utils/misc/tzparser.c:377 +#: utils/misc/tzparser.c:378 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dが長すぎます。" -#: utils/misc/tzparser.c:401 +#: utils/misc/tzparser.c:403 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dにファイル名がない@INCLUDEがあります" @@ -30123,12 +31482,12 @@ msgstr "メモリコンテキスト\"%s\"の作成時に失敗しました" msgid "could not attach to dynamic shared area" msgstr "動的共有エリアをアタッチできませんでした" -#: utils/mmgr/mcxt.c:1155 +#: utils/mmgr/mcxt.c:1231 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "メモリコンテクスト\"%2$s\"でサイズ%1$zuの要求が失敗しました。" -#: utils/mmgr/mcxt.c:1299 +#: utils/mmgr/mcxt.c:1391 #, c-format msgid "logging memory contexts of PID %d" msgstr "PID %dのメモリコンテクストを記録します" @@ -30143,35 +31502,35 @@ msgstr "カーソル\"%s\"はすでに存在します" msgid "closing existing cursor \"%s\"" msgstr "既存のカーソル\"%s\"をクローズしています" -#: utils/mmgr/portalmem.c:401 +#: utils/mmgr/portalmem.c:403 #, c-format msgid "portal \"%s\" cannot be run" msgstr "ポータル\"%s\"を実行できません" -#: utils/mmgr/portalmem.c:479 +#: utils/mmgr/portalmem.c:481 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "固定されたポータル\"%s\"は削除できません" -#: utils/mmgr/portalmem.c:487 +#: utils/mmgr/portalmem.c:489 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "アクティブなポータル\"%s\"は削除できません" -#: utils/mmgr/portalmem.c:738 +#: utils/mmgr/portalmem.c:740 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "WITH HOLD 付きのカーソルを作成したトランザクションは PREPARE できません" -#: utils/mmgr/portalmem.c:1229 +#: utils/mmgr/portalmem.c:1234 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "読み込み専用ではないカーソルのループ内ではトランザクション命令は実行できません" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %lld of temporary file" -msgstr "一時ファイルのブロック%lldへのシークに失敗しました" +msgid "could not seek to block % of temporary file" +msgstr "一時ファイルのブロック%へのシークに失敗しました" #: utils/sort/sharedtuplestore.c:466 #, c-format @@ -30183,77 +31542,77 @@ msgstr "タプルストア共有一時ファイル内に予期しないチャン msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "共有タプルストア一時ファイルのブロック%uへのシークに失敗しました" -#: utils/sort/tuplesort.c:2372 +#: utils/sort/tuplesort.c:2340 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "外部ソートでは%d以上のラン数は扱えません" -#: utils/sort/tuplesortvariants.c:1552 +#: utils/sort/tuplesortvariants.c:1671 #, c-format msgid "could not create unique index \"%s\"" -msgstr "一意インデックス\"%s\"を作成できませんでした" +msgstr "ユニークインデックス\"%s\"を作成できませんでした" -#: utils/sort/tuplesortvariants.c:1554 +#: utils/sort/tuplesortvariants.c:1673 #, c-format msgid "Key %s is duplicated." msgstr "キー%sは重複しています。" -#: utils/sort/tuplesortvariants.c:1555 +#: utils/sort/tuplesortvariants.c:1674 #, c-format msgid "Duplicate keys exist." msgstr "重複したキーが存在します。" -#: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 utils/sort/tuplestore.c:1330 +#: utils/sort/tuplestore.c:552 utils/sort/tuplestore.c:562 utils/sort/tuplestore.c:921 utils/sort/tuplestore.c:1025 utils/sort/tuplestore.c:1089 utils/sort/tuplestore.c:1106 utils/sort/tuplestore.c:1308 utils/sort/tuplestore.c:1373 utils/sort/tuplestore.c:1382 #, c-format msgid "could not seek in tuplestore temporary file" msgstr "タプルストア一時ファイルのシークに失敗しました" -#: utils/time/snapmgr.c:536 +#: utils/time/snapmgr.c:557 #, c-format msgid "The source transaction is not running anymore." msgstr "元となるトランザクションはすでに実行中ではありません。" -#: utils/time/snapmgr.c:1136 +#: utils/time/snapmgr.c:1143 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "サブトランザクションからスナップショットをエクスポートすることはできません" -#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 +#: utils/time/snapmgr.c:1303 utils/time/snapmgr.c:1308 utils/time/snapmgr.c:1313 utils/time/snapmgr.c:1328 utils/time/snapmgr.c:1333 utils/time/snapmgr.c:1338 utils/time/snapmgr.c:1353 utils/time/snapmgr.c:1358 utils/time/snapmgr.c:1363 utils/time/snapmgr.c:1477 utils/time/snapmgr.c:1493 utils/time/snapmgr.c:1518 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "ファイル\"%s\"内のスナップショットデータが不正です" -#: utils/time/snapmgr.c:1393 +#: utils/time/snapmgr.c:1400 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOTを全ての問い合わせの前に呼び出さなければなりません" -#: utils/time/snapmgr.c:1402 +#: utils/time/snapmgr.c:1409 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "スナップショットをインポートするトランザクションはSERIALIZABLEまたはREPEATABLE READ分離レベルでなければなりません" -#: utils/time/snapmgr.c:1411 +#: utils/time/snapmgr.c:1418 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "無効なスナップショット識別子: \"%s\"" -#: utils/time/snapmgr.c:1426 +#: utils/time/snapmgr.c:1433 #, c-format msgid "snapshot \"%s\" does not exist" msgstr "スナップショット\"%s\"は存在しません" -#: utils/time/snapmgr.c:1524 +#: utils/time/snapmgr.c:1531 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "シリアライザブルトランザクションはシリアライザブルではないトランザクションからのスナップショットをインポートできません" -#: utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1535 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "読み取り専用のシリアライザブルトランザクションでは、読み取り専用トランザクションからスナップショットをインポートすることができません" -#: utils/time/snapmgr.c:1543 +#: utils/time/snapmgr.c:1550 #, c-format msgid "cannot import a snapshot from a different database" msgstr "異なるデータベースからのスナップショットを読み込むことはできません" diff --git a/src/backend/po/ka.po b/src/backend/po/ka.po index f626631f51660..23730e7181862 100644 --- a/src/backend/po/ka.po +++ b/src/backend/po/ka.po @@ -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" +"Project-Id-Version: postgres (PostgreSQL) 18\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-04-18 10:14+0000\n" +"PO-Revision-Date: 2025-04-19 04:44+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" #: ../common/binaryheap.c:121 ../common/binaryheap.c:159 #, c-format @@ -76,25 +76,25 @@ msgstr "შეკუმშვის ალგორითმს \"%s\" long-dist 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:1879 commands/extension.c:3807 utils/adt/genfile.c:123 utils/time/snapmgr.c:1437 #, 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:3621 access/transam/xlog.c:4512 access/transam/xlogrecovery.c:1246 access/transam/xlogrecovery.c:1344 access/transam/xlogrecovery.c:1381 access/transam/xlogrecovery.c:1448 backup/basebackup.c:2128 backup/walsummary.c:283 commands/extension.c:3817 libpq/hba.c:769 +#: replication/logical/origin.c:745 replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5236 replication/logical/snapbuild.c:1943 replication/slot.c:2430 replication/slot.c:2471 replication/walsender.c:629 storage/file/buffile.c:470 storage/file/copydir.c:201 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:3626 access/transam/xlog.c:4517 replication/logical/origin.c:750 replication/logical/origin.c:789 replication/logical/snapbuild.c:1948 replication/slot.c:2434 replication/slot.c:2475 replication/walsender.c:634 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 -#: 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 +#: ../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:1783 access/transam/xlog.c:3467 access/transam/xlog.c:3661 access/transam/xlog.c:3666 access/transam/xlog.c:3802 +#: access/transam/xlog.c:4482 access/transam/xlog.c:5458 commands/copyfrom.c:1929 commands/copyto.c:598 libpq/be-fsstubs.c:475 libpq/be-fsstubs.c:545 replication/logical/origin.c:683 replication/logical/origin.c:822 replication/logical/reorderbuffer.c:5288 replication/logical/snapbuild.c:1688 replication/logical/snapbuild.c:1814 replication/slot.c:2319 replication/slot.c:2482 replication/walsender.c:644 storage/file/copydir.c:224 storage/file/copydir.c:229 +#: storage/file/copydir.c:284 storage/file/copydir.c:289 storage/file/fd.c:828 storage/file/fd.c:3818 storage/file/fd.c:3924 utils/cache/relmapper.c:841 utils/cache/relmapper.c:956 #, c-format msgid "could not close file \"%s\": %m" msgstr "ფაილის (%s) დახურვის შეცდომა: %m" @@ -115,41 +115,41 @@ msgstr "" "ბაიტების მიმდევრობა შესაძლოა არ ემთხვეოდეს ამ პროგრამის მიერ გამოყენებულს. ამ შემთხვევაში ქვემოთ \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:69 ../common/file_utils.c:370 ../common/file_utils.c:428 ../common/file_utils.c:502 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:3357 access/transam/xlog.c:3537 access/transam/xlog.c:3576 access/transam/xlog.c:3769 access/transam/xlog.c:4502 +#: access/transam/xlogrecovery.c:4285 access/transam/xlogrecovery.c:4386 access/transam/xlogutils.c:825 backup/basebackup.c:549 backup/basebackup.c:1600 backup/walsummary.c:220 libpq/hba.c:626 postmaster/syslogger.c:1512 replication/logical/origin.c:735 replication/logical/reorderbuffer.c:3889 replication/logical/reorderbuffer.c:4443 replication/logical/reorderbuffer.c:5216 replication/logical/snapbuild.c:1643 replication/logical/snapbuild.c:1755 +#: replication/slot.c:2402 replication/walsender.c:602 replication/walsender.c:3056 storage/file/copydir.c:167 storage/file/copydir.c:255 storage/file/fd.c:803 storage/file/fd.c:3575 storage/file/fd.c:3805 storage/file/fd.c:3895 storage/smgr/md.c:675 utils/cache/relmapper.c:818 utils/cache/relmapper.c:935 utils/error/elog.c:2149 utils/init/miscinit.c:1585 utils/init/miscinit.c:1719 utils/init/miscinit.c:1796 utils/misc/guc.c:4774 utils/misc/guc.c:4824 #, 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:1756 access/transam/twophase.c:1765 access/transam/xlog.c:9467 access/transam/xlogfuncs.c:699 backup/basebackup_server.c:173 backup/basebackup_server.c:266 backup/walsummary.c:304 postmaster/postmaster.c:4098 postmaster/syslogger.c:1523 postmaster/syslogger.c:1536 postmaster/syslogger.c:1549 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:440 ../common/file_utils.c:510 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:1777 access/transam/xlog.c:3457 access/transam/xlog.c:3655 access/transam/xlog.c:4475 access/transam/xlog.c:8853 access/transam/xlog.c:8897 +#: backup/basebackup_server.c:207 commands/dbcommands.c:515 replication/logical/snapbuild.c:1681 replication/slot.c:2305 replication/slot.c:2412 storage/file/fd.c:820 storage/file/fd.c:3916 storage/smgr/md.c:1455 storage/smgr/md.c:1515 storage/sync/sync.c:446 utils/misc/guc.c:4527 #, 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:543 ../common/exec.c:588 ../common/exec.c:680 ../common/hmac.c:309 ../common/hmac.c:325 ../common/hmac_openssl.c:151 ../common/hmac_openssl.c:339 ../common/jsonapi.c:2407 ../common/md5_common.c:156 ../common/parse_manifest.c:157 ../common/parse_manifest.c:852 ../common/psprintf.c:140 ../common/scram-common.c:268 ../port/path.c:829 ../port/path.c:866 +#: ../port/path.c:883 access/transam/twophase.c:1418 access/transam/xlogrecovery.c:570 lib/dshash.c:253 libpq/auth.c:1345 libpq/auth.c:1389 libpq/auth.c:1951 libpq/be-secure-gssapi.c:527 postmaster/bgworker.c:355 postmaster/bgworker.c:1022 postmaster/postmaster.c:3568 postmaster/walsummarizer.c:942 replication/libpqwalreceiver/libpqwalreceiver.c:351 replication/logical/logical.c:210 replication/walsender.c:811 storage/buffer/localbuf.c:745 storage/file/fd.c:912 +#: storage/file/fd.c:1447 storage/file/fd.c:1608 storage/file/fd.c:2592 storage/ipc/procarray.c:1465 storage/ipc/procarray.c:2217 storage/ipc/procarray.c:2224 storage/ipc/procarray.c:2727 storage/ipc/procarray.c:3436 utils/adt/pg_locale.c:509 utils/adt/pg_locale.c:583 utils/adt/pg_locale_icu.c:358 utils/adt/pg_locale_libc.c:207 utils/adt/pg_locale_libc.c:302 utils/adt/pg_locale_libc.c:390 utils/fmgr/dfmgr.c:219 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:647 utils/misc/guc.c:672 utils/misc/guc.c:1060 utils/misc/guc.c:4505 utils/misc/tzparser.c:479 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:1230 utils/mmgr/slab.c:370 #, c-format msgid "out of memory" msgstr "არასაკმარისი მეხსიერება" -#: ../common/cryptohash.c:266 ../common/cryptohash.c:272 ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 ../common/hmac_openssl.c:377 +#: ../common/cryptohash.c:266 ../common/cryptohash.c:272 ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:351 ../common/hmac_openssl.c:359 msgid "success" msgstr "წარმატება" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 ../common/hmac_openssl.c:371 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 ../common/hmac_openssl.c:353 msgid "destination buffer too small" msgstr "სამიზნე ბუფერი ძალიან პატარაა" -#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:355 msgid "OpenSSL failure" msgstr "OpenSSL -ის სეცდომა" @@ -173,27 +173,27 @@ msgstr "გასაშვებად ფაილის \"%s\" პოვნა 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:363 commands/collationcmds.c:872 commands/copyfrom.c:1863 commands/copyto.c:934 libpq/be-secure-common.c:59 #, c-format msgid "could not execute command \"%s\": %m" msgstr "ბრძანების (\"%s\") შესრულების შეცდომა: %m" -#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#: ../common/exec.c:375 libpq/be-secure-common.c:71 #, c-format msgid "could not read from command \"%s\": %m" msgstr "ბრძანებიდან \"%s\" წაკითხვის შეცდომა: %m" -#: ../common/exec.c:397 +#: ../common/exec.c:378 #, c-format 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:405 libpq/pqcomm.c:193 storage/ipc/waiteventset.c:782 storage/ipc/waiteventset.c:962 storage/ipc/waiteventset.c:1202 storage/ipc/waiteventset.c:1364 storage/ipc/waiteventset.c:1490 #, 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:142 ../port/path.c:831 ../port/path.c:868 ../port/path.c:885 utils/misc/ps_status.c:195 utils/misc/ps_status.c:203 utils/misc/ps_status.c:230 utils/misc/ps_status.c:238 #, c-format msgid "out of memory\n" msgstr "არასაკმარისი მეხსიერება\n" @@ -203,33 +203,33 @@ msgstr "არასაკმარისი მეხსიერება\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" -#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#: ../common/file_utils.c:75 storage/file/fd.c:3581 #, c-format 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:123 ../common/file_utils.c:588 ../common/file_utils.c:592 access/transam/twophase.c:1321 access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:235 backup/basebackup.c:357 backup/basebackup.c:555 backup/basebackup.c:626 backup/walsummary.c:247 backup/walsummary.c:254 commands/copyfrom.c:1889 commands/copyto.c:980 commands/extension.c:3796 commands/tablespace.c:804 commands/tablespace.c:893 postmaster/pgarch.c:682 +#: replication/logical/snapbuild.c:1538 replication/logical/snapbuild.c:2065 storage/file/fd.c:1972 storage/file/fd.c:2060 storage/file/fd.c:3629 utils/adt/dbsize.c:105 utils/adt/dbsize.c:266 utils/adt/dbsize.c:355 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" -#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#: ../common/file_utils.c:133 ../common/file_utils.c:243 #, c-format 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:156 ../common/file_utils.c:304 ../common/pgfnames.c:48 ../common/rmtree.c:63 commands/tablespace.c:728 commands/tablespace.c:738 postmaster/postmaster.c:1496 storage/file/fd.c:2997 storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:340 #, c-format msgid "could not open directory \"%s\": %m" msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" -#: ../common/file_utils.c:169 ../common/file_utils.c:315 ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 +#: ../common/file_utils.c:174 ../common/file_utils.c:338 ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:3009 #, c-format 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:520 access/transam/xlogarchive.c:389 postmaster/pgarch.c:836 postmaster/syslogger.c:1560 replication/logical/snapbuild.c:1700 replication/slot.c:987 replication/slot.c:2191 replication/slot.c:2333 storage/file/fd.c:838 utils/time/snapmgr.c:1262 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "გადარქმევის შეცდომა %s - %s: %m" @@ -238,283 +238,287 @@ msgstr "გადარქმევის შეცდომა %s - %s: %m" msgid "internal error" msgstr "შიდა შეცდომა" -#: ../common/jsonapi.c:2121 +#: ../common/jsonapi.c:2432 msgid "Recursive descent parser cannot use incremental lexer." msgstr "რეკურსიულ დაღმავალ დამმუშავებელს ინკრემენტული lexer-ის გამოყენება არ შეუძლია." -#: ../common/jsonapi.c:2123 +#: ../common/jsonapi.c:2434 msgid "Incremental parser requires incremental lexer." msgstr "ინკრემენტულ დამმუშავებელს ინკრემენტული lexer სჭირდება." -#: ../common/jsonapi.c:2125 +#: ../common/jsonapi.c:2436 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "JSON მეტისმეტად ღრმადაა ერთმანეთში ჩალაგებული. მაქსიმალური დასაშვები სიღრმეა 6400." -#: ../common/jsonapi.c:2127 +#: ../common/jsonapi.c:2438 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "სპეციალური მიმდევრობა \"\\%.*s\" არასწორია." -#: ../common/jsonapi.c:2131 +#: ../common/jsonapi.c:2442 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "სიმბოლო კოდით 0x%02x აუცილებლად ეკრანირებული უნდა იყოს." -#: ../common/jsonapi.c:2135 +#: ../common/jsonapi.c:2446 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "მოველოდი შეყვანის დასასრულს, მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2138 +#: ../common/jsonapi.c:2449 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "მოველოდი მასივის ელემენტს ან \"]\", მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2141 +#: ../common/jsonapi.c:2452 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "მოველოდი \",\" ან \"]\", მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2144 +#: ../common/jsonapi.c:2455 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "მოველოდი \":\", მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2147 +#: ../common/jsonapi.c:2458 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "მოველოდი JSON მნიშვნელობას. მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2150 +#: ../common/jsonapi.c:2461 msgid "The input string ended unexpectedly." msgstr "შეყვანის სტრიქონი მოულოდნელად დასრულდა." -#: ../common/jsonapi.c:2152 +#: ../common/jsonapi.c:2463 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "მოველოდი სტრიქონს ან \"}\", მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2155 +#: ../common/jsonapi.c:2466 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "მოველოდი \",\", ან \"}\", მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2158 +#: ../common/jsonapi.c:2469 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "მოველოდი სტრიქონს, მაგრამ მივიღე \"%.*s\"." -#: ../common/jsonapi.c:2161 +#: ../common/jsonapi.c:2472 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "კოდი \"%.*s\" არასწორია." -#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 +#: ../common/jsonapi.c:2478 jsonpath_scan.l:585 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 ტექსტად ვერ გარდაიქმნება." -#: ../common/jsonapi.c:2166 +#: ../common/jsonapi.c:2480 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\" ს თექვსმეტობითი ციფრები უნდა მოჰყვებოდეს." -#: ../common/jsonapi.c:2169 +#: ../common/jsonapi.c:2483 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "უნიკოდის სპეციალური კოდების გამოყენება კოდის წერტილის მნიშვნელობებად 007F-ის ზემოთ შეუძლებელია, თუ კოდირება UTF-8 არაა." -#: ../common/jsonapi.c:2178 +#: ../common/jsonapi.c:2492 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "უნიკოდის სპეციალური კოდების სერვერის კოდირებაში (%s) თარგმნა შეუძლებელია." -#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 +#: ../common/jsonapi.c:2499 jsonpath_scan.l:618 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "უნიკოდის მაღალ სუროგატს მაღალი სუროგატი არ უნდა მოსდევდეს." -#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 jsonpath_scan.l:713 +#: ../common/jsonapi.c:2501 jsonpath_scan.l:629 jsonpath_scan.l:639 jsonpath_scan.l:691 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "უნიკოდის დაბალი სუროგატი მაღალ სუროგატს უნდა მისდევდეს." -#: ../common/logging.c:276 +#: ../common/jsonapi.c:2523 +msgid "out of memory while constructing error description" +msgstr "არასაკმარისი მეხსიერება შეცდომის აღწერის აგებისას" + +#: ../common/logging.c:279 #, c-format msgid "error: " msgstr "შეცდომა: " -#: ../common/logging.c:283 +#: ../common/logging.c:286 #, c-format msgid "warning: " msgstr "გაფრთხილება: " -#: ../common/logging.c:294 +#: ../common/logging.c:297 #, c-format msgid "detail: " msgstr "დეტალები: " -#: ../common/logging.c:301 +#: ../common/logging.c:304 #, c-format 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:872 #, 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:769 utils/misc/guc.c:3164 utils/misc/guc.c:3205 utils/misc/guc.c:3280 utils/misc/guc.c:4709 utils/misc/guc.c:6929 utils/misc/guc.c:6970 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "არასწორი მნიშვნელობა პარამეტრისთვის \"%s\": \"%s\"" @@ -574,51 +578,56 @@ msgstr "შეზღუდულ კოდის ხელახლა შეს 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 -#: 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 +#: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 access/transam/twophase.c:1716 access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:399 postmaster/postmaster.c:1069 postmaster/syslogger.c:1489 replication/logical/origin.c:591 replication/logical/reorderbuffer.c:4711 replication/logical/snapbuild.c:1581 replication/logical/snapbuild.c:2037 replication/slot.c:2386 storage/file/fd.c:878 storage/file/fd.c:3443 storage/file/fd.c:3505 +#: storage/file/reinit.c:261 storage/ipc/dsm.c:343 storage/smgr/md.c:401 storage/smgr/md.c:460 storage/sync/sync.c:243 utils/time/snapmgr.c:1598 #, c-format msgid "could not remove file \"%s\": %m" msgstr "ფაილის წაშლის შეცდომა \"%s\": %m" -#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 storage/file/fd.c:3779 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3435 storage/file/fd.c:3844 #, c-format 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 "სერვერის გასაღების კოდირების შეცდომა" -#: ../common/stringinfo.c:315 +#: ../common/stringinfo.c:362 +#, c-format +msgid "string buffer exceeds maximum allowed length (%zu bytes)" +msgstr "სტიქონის ბუფერი გადასცდა მაქსიმალურ დასაშვებ სიგრძეს (%zu ბაიტი)" + +#: ../common/stringinfo.c:363 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "სტრიქონების ბაფერის, რომელიც უკვე შეიცავს %d ბაიტს, %d ბაიტით ვერ გავადიდებ." -#: ../common/stringinfo.c:319 +#: ../common/stringinfo.c:367 #, c-format msgid "" -"out of memory\n" +"string buffer exceeds maximum allowed length (%zu bytes)\n" "\n" "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" msgstr "" -"არასაკმარისი მეხსიერების\n" +"სტიქონის ბუფერი გადასცდა მაქსიმალურ დასაშვებ სიგრძეს (%zu ბაიტი)\n" "\n" -"შეუძლებელია სტრიქონის ბუფერის (%d ბაიტიგ) აფართოება %d ბაიტით.\n" +"%d ბაიტის შემცველი სტრიქონის ბუფერის კიდევ %d ბაიტით გადიდება შეუძლებელია.\n" #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "მომხმარებლის ეფექტური ID-ის (%ld) ამოხსნა შეუძლებელია: %s" -#: ../common/username.c:45 libpq/auth.c:1888 +#: ../common/username.c:45 msgid "user does not exist" msgstr "მომხმარებელი არ არსებობს" @@ -657,12 +666,12 @@ msgstr "პროცესი გაჩერდა სიგნალით: %d msgid "child process exited with unrecognized status %d" msgstr "შვილი პროცესი დასრულდა უცნობი სტატუსით %d" -#: ../port/chklocale.c:283 +#: ../port/chklocale.c:280 #, c-format msgid "could not determine encoding for codeset \"%s\"" msgstr "კოდირების დადგენა ვერ მოხერხდა \"%s\"-ისთვის" -#: ../port/chklocale.c:404 ../port/chklocale.c:410 +#: ../port/chklocale.c:370 ../port/chklocale.c:376 #, c-format msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "ენისთვის \"%s\" კოდირების დადგენა ვერ მოხერხდა: კოდების ნაკრები არის \"%s\"" @@ -710,7 +719,7 @@ msgstr "ვაგრძელებ თავიდან ცდას 30 წა msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "შეიძლება თქვენი ანტივირუსი, მარქაფი ან რამე სხვა პროგრამა ხელს უშლის მონაცემთა ბაზის სისტემის მუშაობას." -#: ../port/path.c:775 +#: ../port/path.c:853 #, c-format msgid "could not get current working directory: %m\n" msgstr "მიმდინარე სამუშაო საქაღალდის მიღების შეცდომა: %m\n" @@ -720,16 +729,6 @@ msgstr "მიმდინარე სამუშაო საქაღალ msgid "operating system error %d" msgstr "ოპერაციული სისტემის შეცდომა %d" -#: ../port/user.c:43 ../port/user.c:79 -#, c-format -msgid "could not look up local user ID %d: %s" -msgstr "ლოკალური მომხმარებლის ID-ის (%d) ამოხსნა შეუძლებელია: %s" - -#: ../port/user.c:48 ../port/user.c:84 -#, c-format -msgid "local user with ID %d does not exist" -msgstr "ლოკალური მომხმარებელი ID-ით %d არ არსებობს" - #: ../port/win32security.c:62 #, c-format msgid "could not get SID for Administrators group: error code %lu\n" @@ -745,47 +744,47 @@ msgstr "ვერ მივიღე SID PowerUsers ჯგუფისთვი msgid "could not check access token membership: error code %lu\n" msgstr "კოდის წევრობის წვდომის შემოწმების შეცდომა: შეცდომის კოდი %lu\n" -#: access/brin/brin.c:405 +#: access/brin/brin.c:414 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "\"BRIN\" შეჯამების დიაპაზონის ინდექსისთვის \"%s\" გვერდი %u ჩაწერილი არაა" -#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 +#: access/brin/brin.c:1397 access/brin/brin.c:1504 access/gin/ginfast.c:1040 access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:242 access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:323 access/transam/xlogfuncs.c:389 access/transam/xlogfuncs.c:447 statistics/attribute_stats.c:190 statistics/attribute_stats.c:931 statistics/relation_stats.c:97 #, c-format msgid "recovery is in progress" msgstr "აღდგენა მიმდინარეობს" -#: access/brin/brin.c:1386 access/brin/brin.c:1494 +#: access/brin/brin.c:1398 access/brin/brin.c:1505 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "აღდგენის დროს BRIN კონტროლის ფუნქციების შესრულება შეუძლებელია." -#: access/brin/brin.c:1391 access/brin/brin.c:1499 +#: access/brin/brin.c:1403 access/brin/brin.c:1510 #, c-format -msgid "block number out of range: %lld" -msgstr "ბლოკების რაოდენობა დიაპაზონს გარეთაა: %lld" +msgid "block number out of range: %" +msgstr "ბლოკების რაოდენობა დიაპაზონს გარეთაა: %" -#: access/brin/brin.c:1436 access/brin/brin.c:1525 +#: access/brin/brin.c:1447 access/brin/brin.c:1536 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" BRIN ინდექსი არაა" -#: access/brin/brin.c:1452 access/brin/brin.c:1541 +#: access/brin/brin.c:1463 access/brin/brin.c:1552 #, c-format 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:1472 access/brin/brin.c:1568 access/gin/ginfast.c:1085 parser/parse_utilcmd.c:2433 #, c-format msgid "index \"%s\" is not valid" msgstr "ინდექსი არასწორია: \"%s\"" -#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 statistics/dependencies.c:661 statistics/dependencies.c:714 statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 +#: access/brin/brin_bloom.c:784 access/brin/brin_bloom.c:826 access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3121 statistics/dependencies.c:661 statistics/dependencies.c:714 statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format msgid "cannot accept a value of type %s" msgstr "მნიშვნელობის ეს ტიპი მიუღებელია: %s" -#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 access/spgist/spgdoinsert.c:2278 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 access/gist/gist.c:1475 access/spgist/spgdoinsert.c:2001 access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "ინდექსის მწკრივის ზომა %zu მაქსიმუმზე (%zu) მეტია ინდექსისთვის \"%s\"" @@ -800,77 +799,77 @@ msgstr "დაზიანებული BRIN ინდექსი: დია msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "გვერდის მოულოდნელი ტიპი 0x%04X BRIN ინდექსში \"%s\" ბლოკში %u" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 +#: access/brin/brin_validate.c:111 access/gin/ginvalidate.c:142 access/gist/gistvalidate.c:150 access/hash/hashvalidate.c:112 access/nbtree/nbtvalidate.c:116 access/spgist/spgvalidate.c:181 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდიდან %s შეიცავს ფუნქციას %s არასწორი მხარდაჭერის ნომრით %d" -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 +#: access/brin/brin_validate.c:127 access/gin/ginvalidate.c:154 access/gist/gistvalidate.c:162 access/hash/hashvalidate.c:124 access/nbtree/nbtvalidate.c:128 access/spgist/spgvalidate.c:193 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "ოპერატორის ოჯახი (\"%s\") (წვდომის მეთოდისგან %s) შეიცავს ფუნქციას %s, რომელსაც არასწორი ხელმოწერა აქვს მხარდაჭერის ნომრით %d" -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 +#: access/brin/brin_validate.c:149 access/gin/ginvalidate.c:173 access/gist/gistvalidate.c:182 access/hash/hashvalidate.c:150 access/nbtree/nbtvalidate.c:148 access/spgist/spgvalidate.c:213 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდის %s შეიცავს ოპერატორს %s არასწორი სტრატეგიის ნომრით %d" -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 access/spgist/spgvalidate.c:237 +#: access/brin/brin_validate.c:178 access/gin/ginvalidate.c:186 access/hash/hashvalidate.c:163 access/nbtree/nbtvalidate.c:161 access/spgist/spgvalidate.c:229 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდის %s შეიცავს არასწორი ORDER BY სპეციფიკაციას ოპერატორისთვის %s" -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 +#: access/brin/brin_validate.c:191 access/gin/ginvalidate.c:199 access/gist/gistvalidate.c:230 access/hash/hashvalidate.c:176 access/nbtree/nbtvalidate.c:174 access/spgist/spgvalidate.c:245 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" msgstr "წვდომის მეთოდის %s ოპერატორის ოჯახი \"%s\" შეიცავს ოპერატორს %s არასწორი ხელმოწერით" -#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:226 access/nbtree/nbtvalidate.c:236 access/spgist/spgvalidate.c:280 +#: access/brin/brin_validate.c:229 access/hash/hashvalidate.c:216 access/nbtree/nbtvalidate.c:232 access/spgist/spgvalidate.c:272 #, c-format msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" msgstr "ოპერატორის ოჯახს \"%s\" ( წვდომის მეთოდისგან \"%s\") აკლია ოპერატორი ტიპებისთვის %s და %s" -#: access/brin/brin_validate.c:246 +#: access/brin/brin_validate.c:239 #, c-format msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" msgstr "ოპერატორის ოჯახს \"%s\" ( წვდომის მეთოდისგან \"%s\") აკლია ოპერატორი ტიპებისთვის %s და %s" -#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:240 access/nbtree/nbtvalidate.c:260 access/spgist/spgvalidate.c:315 +#: access/brin/brin_validate.c:252 access/hash/hashvalidate.c:230 access/nbtree/nbtvalidate.c:256 access/spgist/spgvalidate.c:307 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "ოპერატორის კლასს \"%s\" (წვდომის მეთოდიდან %s) ოპერატორები აკლია" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 access/gist/gistvalidate.c:273 +#: access/brin/brin_validate.c:263 access/gin/ginvalidate.c:241 access/gist/gistvalidate.c:272 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "ოპერატორის კლასს \"%s\" წვდომის მეთოდიდან %s აკლია მხარდაჭერის ფუნქცია %d" -#: access/common/attmap.c:121 +#: access/common/attmap.c:118 #, c-format -msgid "Returned type %s does not match expected type %s in column %d." -msgstr "დაბრუნებული ტიპი %s არ ემთხვევა მოსალოდნელ ტიპს %s სვეტისთვის %d." +msgid "Returned type %s does not match expected type %s in column \"%s\" (position %d)." +msgstr "დაბრუნებული ტიპი %s არ ემთხვევა მოსალოდნელ ტიპს %s სვეტში \"%s\" (მდებარეობა %d)." -#: access/common/attmap.c:149 +#: access/common/attmap.c:147 #, c-format msgid "Number of returned columns (%d) does not match expected column count (%d)." msgstr "სვეტების დაბრუნებული რაოდენობა (%d) არ ემთხვევა მოსალოდნელს (%d) არ ემთხვევა." -#: access/common/attmap.c:233 access/common/attmap.c:245 +#: access/common/attmap.c:231 access/common/attmap.c:243 #, c-format msgid "could not convert row type" msgstr "მწკრივის ტიპის გადაყვანის შეცდომა" -#: access/common/attmap.c:234 +#: access/common/attmap.c:232 #, c-format msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." msgstr "ატრიბუტი %s ტიპისთვის %s ტიპის(%s) შესაბამის ატრიბუტს არ ემთხვევა." -#: access/common/attmap.c:246 +#: access/common/attmap.c:244 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "ატრიბუტი \"%s\" ტიპისთვის \"%s\" არ არსებობს ტიპში \"%s\"." -#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 +#: access/common/heaptuple.c:1133 access/common/heaptuple.c:1472 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "სვეტების რაოდენობა (%d) აღემატება ლიმიტს (%d)" @@ -880,95 +879,95 @@ msgstr "სვეტების რაოდენობა (%d) აღემ 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:978 #, 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_dr.c:94 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1951 #, c-format msgid "unsupported format code: %d" msgstr "ფორმატის მხარდაუჭერელი კოდი: %d" -#: access/common/reloptions.c:519 access/common/reloptions.c:530 +#: access/common/reloptions.c:530 access/common/reloptions.c:541 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "სწორი მნიშვნელობებია \"on\", \"off\" და \"auto\"." -#: access/common/reloptions.c:541 +#: access/common/reloptions.c:552 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "სწორი მნიშვნელობებია \"local\" და \"cascaded\"." -#: access/common/reloptions.c:689 +#: access/common/reloptions.c:700 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "მომხმარებლის მიერ განსაზღვრული ურთიერთობის პარამეტრის ტიპებმა ლიმიტს გადააჭარბა" -#: access/common/reloptions.c:1231 +#: access/common/reloptions.c:1242 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET პარამეტრების მნიშვნელობებს არ უნდა შეიცავდეს" -#: access/common/reloptions.c:1263 +#: access/common/reloptions.c:1274 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "პარამეტრების სახელების უცნობი სივრცე: \"%s\"" -#: access/common/reloptions.c:1300 commands/variable.c:1191 +#: access/common/reloptions.c:1311 commands/variable.c:1242 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "ცხრილები, აღწერილი WITH OIDS-ით, მხარდაუჭერელია" -#: access/common/reloptions.c:1468 +#: access/common/reloptions.c:1479 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "უცნობი პარამეტრი\"%s\"" -#: access/common/reloptions.c:1580 +#: access/common/reloptions.c:1591 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "პარამეტრი \"%s\" ერთზე მეტჯერაა მითთებული" -#: access/common/reloptions.c:1596 +#: access/common/reloptions.c:1607 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "არასწორი მნიშვნელობა ლოგიკური პარამეტრისთვის \"%s\": %s" -#: access/common/reloptions.c:1608 +#: access/common/reloptions.c:1619 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "არასწორი მნიშვნელობა მთელი რიცხვის პარამეტრისთვის \"%s\": %s" -#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 +#: access/common/reloptions.c:1625 access/common/reloptions.c:1645 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "მნიშვნელობა %s პარამეტრისთვის \"%s\" საზღვრებს გარეთაა" -#: access/common/reloptions.c:1616 +#: access/common/reloptions.c:1627 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "სწორი მნიშვნელობები \"%d\"-სა და \"%d\"-ს შორისაა." -#: access/common/reloptions.c:1628 +#: access/common/reloptions.c:1639 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "წილადი პარამეტრის (\"%s\") არასწორი მნიშვნელობა: %s" -#: access/common/reloptions.c:1636 +#: access/common/reloptions.c:1647 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "სწორი მნიშვნელობების დიაპაზონია \"%f\"-სა და \"%f\"-ს შორის." -#: access/common/reloptions.c:1658 +#: access/common/reloptions.c:1669 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "ჩამონათვალი პარამეტრის \"%s\" არასწორი მნიშვნელობა: %s" -#: access/common/reloptions.c:1989 +#: access/common/reloptions.c:2016 #, c-format msgid "cannot specify storage parameters for a partitioned table" msgstr "დაყოფილი ცხრილისთვის საცავის პარამეტრების მითითება შეუძლებელია" -#: access/common/reloptions.c:1990 +#: access/common/reloptions.c:2017 #, c-format msgid "Specify storage parameters for its leaf partitions instead." msgstr "" @@ -1013,52 +1012,52 @@ msgstr "სხვა სესიების დროებით ინდე msgid "failed to re-find tuple within index \"%s\"" msgstr "კორტეჟის თავიდან პოვნის შეცდომა ინდექსში \"%s\"" -#: access/gin/ginscan.c:431 +#: access/gin/gininsert.c:1283 access/gin/ginutil.c:152 executor/execExpr.c:2244 utils/adt/array_userfuncs.c:1963 utils/adt/arrayfuncs.c:4028 utils/adt/arrayfuncs.c:6726 utils/adt/rowtypes.c:974 +#, c-format +msgid "could not identify a comparison function for type %s" +msgstr "ტიპისთვის \"%s\" შედარების ფუნქცია ვერ ვიპოვე" + +#: access/gin/ginscan.c:437 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "ძველ GIN ინდექსებს არც ინდექსების სრული სკანირების მხარდაჭერა აქვს, არც ნულების ძებნის" -#: access/gin/ginscan.c:432 +#: access/gin/ginscan.c:438 #, c-format 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 -#, c-format -msgid "could not identify a comparison function for type %s" -msgstr "ტიპისთვის \"%s\" შედარების ფუნქცია ვერ ვიპოვე" - -#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 +#: access/gin/ginvalidate.c:83 access/gist/gistvalidate.c:84 access/hash/hashvalidate.c:89 access/spgist/spgvalidate.c:94 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "ოპერატორის ოჯახი \"%s\" (წვდომის მეთოდიდან %s) შეიცავს მხარდაჭერის ფუნქციას %s, რომელსაც სხვადასხვა მარცხენა და მარჯვენა შეყვანები გააჩნია" -#: access/gin/ginvalidate.c:258 +#: access/gin/ginvalidate.c:251 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "ოპერატორის ოჯახი \"%s\" (წვდომის მეთოდიდან %s) აკლია მხარდაჭერის ფუნქია %d ან %d" -#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 access/spgist/spgvalidate.c:387 +#: access/gin/ginvalidate.c:323 access/gist/gistvalidate.c:348 access/spgist/spgvalidate.c:378 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "მხარდაჭერის ფუნქცია ნომრით %d არასწორია წვდომის მეთოდისთვის: %s" -#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:765 access/gist/gistvacuum.c:462 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "ინდექსი (\"%s\") შეიცავს შიდა კორტეჟს, რომელიც მონიშნულია, როგორც არასწორი" -#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:767 access/gist/gistvacuum.c:464 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "გამოწვეულია ავარიის აღდგენისას გვერდის არასწორი დაყოფისგან, PostgreSQL 9.1-მდე განახლებამდე." -#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 access/hash/hashutil.c:237 access/hash/hashutil.c:249 access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 access/nbtree/nbtpage.c:824 +#: access/gist/gist.c:768 access/gist/gistutil.c:801 access/gist/gistutil.c:812 access/gist/gistvacuum.c:465 access/hash/hashutil.c:226 access/hash/hashutil.c:237 access/hash/hashutil.c:249 access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "გადაატარეთ REINDEX." -#: access/gist/gist.c:1196 +#: access/gist/gist.c:1208 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "ინდექსის (%s) არასწორი დაყოფის გასწორება. ბლოკი %u" @@ -1073,33 +1072,33 @@ msgstr "picksplit მეთოდის შეცდომა სვეტის msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "ინდექსი ოპტიმალური არაა. ოპტიმიზაციისთვის დაუკავშირდით დეველოპერს ან სცადეთ ეს სვეტი CREATE INDEX ბრძანებაში, როგორც მეორე, ისე გამოიყენოთ." -#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 access/nbtree/nbtpage.c:810 +#: access/gist/gistutil.c:798 access/hash/hashutil.c:223 access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "ინდექსი \"%s\" ბლოკ %u-სთან მოულოდნელ ნულოვან გვერდს შეიცავს" -#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 +#: access/gist/gistutil.c:809 access/hash/hashutil.c:234 access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "ინდექსი \"%s\" შეიცავს გაფუჭებულ გვერდს ბლოკთან %u" -#: access/gist/gistvalidate.c:202 +#: access/gist/gistvalidate.c:200 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "ოპერატორის ოჯახი \"%s\" (წვდომის მეთოდიდან %s) ოპერატორისთვის %s მხარდაუჭერელ ORDER BY-ის სპეფიციკაციას შეიცავს" -#: access/gist/gistvalidate.c:213 +#: access/gist/gistvalidate.c:211 #, c-format 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:332 utils/adt/varchar.c:1000 utils/adt/varchar.c:1056 #, 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 -#: utils/adt/varlena.c:1521 +#: access/hash/hashfunc.c:278 access/hash/hashfunc.c:333 catalog/heap.c:679 catalog/heap.c:685 commands/createas.c:203 commands/createas.c:516 commands/indexcmds.c:2090 commands/tablecmds.c:19910 commands/view.c:80 regex/regc_pg_locale.c:242 utils/adt/formatting.c:1655 utils/adt/formatting.c:1719 utils/adt/formatting.c:1783 utils/adt/formatting.c:1847 utils/adt/like.c:163 utils/adt/like.c:194 utils/adt/like_support.c:1020 utils/adt/varchar.c:738 +#: utils/adt/varchar.c:1001 utils/adt/varchar.c:1057 utils/adt/varlena.c:1592 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "კოლაციის ხელით მისათითებლად გამოიყენეთ COLLATE." @@ -1109,7 +1108,7 @@ msgstr "კოლაციის ხელით მისათითებლ 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:1039 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "ბაფერის გვერდზე დიდი მნიშვნელობების დაინდექსება შეუძლებელია." @@ -1124,7 +1123,7 @@ msgstr "გადავსებული ბლოკის არასწო msgid "out of overflow pages in hash index \"%s\"" msgstr "ჰეშ-ინდექსში \"%s\" გადავსების გვერდები საკმარისი არაა" -#: access/hash/hashsearch.c:311 +#: access/hash/hashsearch.c:313 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "ჰეშის ინდექსებს სრული ინდექსების სკანირების მხარდაჭერა არ გააჩნიათ" @@ -1139,47 +1138,52 @@ msgstr "ინდექსი \"%s\" ჰეშ ინდექსი არა msgid "index \"%s\" has wrong hash version" msgstr "ინდექსს \"%s\" ჰეშის არასწორი ვერსია აქვს" -#: access/hash/hashvalidate.c:198 +#: access/hash/hashvalidate.c:188 #, c-format msgid "operator family \"%s\" of access method %s lacks support function for operator %s" msgstr "ოპერატორის ოჯახს \"%s\" (წვდომის მეთოდიდან \"%s\") აკლია მხარდაჭერის ფუნქცია ოპერატორისთვის %s" -#: access/hash/hashvalidate.c:256 access/nbtree/nbtvalidate.c:276 +#: access/hash/hashvalidate.c:246 access/nbtree/nbtvalidate.c:272 #, c-format 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:2257 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "პარალელურ დამხმარე პროცესში კორტეჟებს ვერ ჩასვამთ" -#: access/heap/heapam.c:2713 +#: access/heap/heapam.c:2776 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "პარალელური ოპერაციის დროს კორტეჟის წაშლა შეუძლებელია" -#: access/heap/heapam.c:2760 +#: access/heap/heapam.c:2823 #, c-format msgid "attempted to delete invisible tuple" msgstr "უხილავი კორტეჟის წაშლის მცდელობა" -#: access/heap/heapam.c:3208 access/heap/heapam.c:6081 +#: access/heap/heapam.c:3271 access/index/genam.c:829 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "პარალელური ოპერაციის დროს კორტეჟის განახლება შეუძლებელია" -#: access/heap/heapam.c:3336 +#: access/heap/heapam.c:3448 #, 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:4959 access/heap/heapam.c:4997 access/heap/heapam.c:5262 access/heap/heapam_handler.c:470 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "ურთიერთობაში \"%s\" მწკრივის დაბლოკვის შეცდომა" -#: access/heap/heapam_handler.c:413 +#: access/heap/heapam.c:6376 commands/trigger.c:3350 executor/nodeModifyTable.c:2565 executor/nodeModifyTable.c:2655 +#, c-format +msgid "tuple to be updated was already modified by an operation triggered by the current command" +msgstr "" + +#: access/heap/heapam_handler.c:415 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "დასაბლოკი კორტეჟი პარალელური განახლების გამო უკვე სხვა დანაყოფშია გადატანილი" @@ -1194,8 +1198,8 @@ msgstr "მწკრივი ძალიან დიდია: ზომა % 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 -#: replication/logical/origin.c:603 replication/slot.c:2059 storage/file/copydir.c:157 storage/smgr/md.c:230 utils/time/snapmgr.c:1234 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3382 access/transam/xlog.c:3590 access/transam/xlog.c:4454 access/transam/xlog.c:9456 access/transam/xlogfuncs.c:693 backup/basebackup_server.c:149 backup/basebackup_server.c:242 commands/dbcommands.c:495 postmaster/launch_backend.c:354 postmaster/postmaster.c:4085 postmaster/walsummarizer.c:1219 +#: replication/logical/origin.c:603 replication/slot.c:2252 storage/file/copydir.c:173 storage/file/copydir.c:261 storage/smgr/md.c:252 utils/time/snapmgr.c:1241 #, c-format msgid "could not create file \"%s\": %m" msgstr "ფაილის (%s) შექმნის შეცდომა: %m" @@ -1205,154 +1209,169 @@ msgstr "ფაილის (%s) შექმნის შეცდომა: %m" 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:3443 access/transam/xlog.c:3646 access/transam/xlog.c:4466 commands/dbcommands.c:507 postmaster/launch_backend.c:365 postmaster/launch_backend.c:377 replication/logical/origin.c:615 replication/logical/origin.c:657 replication/logical/origin.c:676 replication/logical/snapbuild.c:1657 replication/slot.c:2287 +#: storage/file/buffile.c:545 storage/file/copydir.c:213 utils/init/miscinit.c:1660 utils/init/miscinit.c:1671 utils/init/miscinit.c:1679 utils/misc/guc.c:4488 utils/misc/guc.c:4519 utils/misc/guc.c:5673 utils/misc/guc.c:5691 utils/time/snapmgr.c:1246 utils/time/snapmgr.c:1253 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" -#: access/heap/vacuumlazy.c:473 +#: access/heap/vacuumlazy.c:814 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "აგრესიული დამტვერსასრუტება \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:478 +#: access/heap/vacuumlazy.c:819 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "დამტვერსასრუტება \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:626 +#: access/heap/vacuumlazy.c:987 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "მომტვერსასრუტება დასრულებულია \"%s.%s.%s\": დასკანერებული ინდექსები: %d\n" -#: access/heap/vacuumlazy.c:637 +#: access/heap/vacuumlazy.c:998 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "ჩაციკვლის თავიდან ასაცილებლად ავტომატური აგრესიული მომტვერსასრუტება ცხრილისთვის \"%s.%s.%s\": ინდექსის სკანირების რიცხვი: %d\n" -#: access/heap/vacuumlazy.c:639 +#: access/heap/vacuumlazy.c:1000 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "ჩაციკვლის თავიდან ასაცილებლად ავტომატური მომტვერსასრუტება ცხრილისთვის \"%s.%s.%s\": ინდექსის სკანირების რიცხვი: %d\n" -#: access/heap/vacuumlazy.c:644 +#: access/heap/vacuumlazy.c:1005 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "ცხრილის (\"%s.%s.%s\") ავტომატური აგრესიული მომტვერსასრუტება: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:1007 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "ცხრილის (\"%s.%s.%s\") ავტომატური მომტვერსასრუტება: ინდექსების სკანირება: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:1014 #, c-format -msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" -msgstr "გვერდები: %u წაშლილი, %u რჩება, %u დასკანერებული (სულ %.2f%%)\n" +msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total), %u eagerly scanned\n" +msgstr "გვერდები: %u წაშლილი, %u რჩება, %u დასკანერებული (სულ %.2f%%), %u სასწრაფოდ სკანირებული\n" -#: access/heap/vacuumlazy.c:660 +#: access/heap/vacuumlazy.c:1023 #, c-format -msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" -msgstr "კორტეჟები: %lld წაიშალა, %lld დარჩა, %lld მკვდარია, მაგრამ ჯერ ვერ წავშლი\n" +msgid "tuples: % removed, % remain, % are dead but not yet removable\n" +msgstr "კორტეჟები: % წაიშალა, % დარჩა, % მკვდარია, მაგრამ ჯერ ვერ წავშლი\n" -#: access/heap/vacuumlazy.c:666 +#: access/heap/vacuumlazy.c:1029 #, c-format -msgid "tuples missed: %lld dead from %u pages not removed due to cleanup lock contention\n" -msgstr "გასუფთავების ბლოკირების კონფლიქტის გამო გამოტოვებული სტრიქონების ვერსიები: %lld, %u გვერდიდან\n" +msgid "tuples missed: % dead from %u pages not removed due to cleanup lock contention\n" +msgstr "აცდენილი კორტეჟები: % მკვდრები არ წაშლილა %u გვერდიდან გასუფთავების ბლოკის დაბლოკვის გამო\n" -#: access/heap/vacuumlazy.c:672 +#: access/heap/vacuumlazy.c:1035 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" msgstr "წაშლადი ამოჭრილი: %u, რომელიც იყო %d XID ასაკის, როცა ოპერაცია დასრულდა\n" -#: access/heap/vacuumlazy.c:679 +#: access/heap/vacuumlazy.c:1042 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "ახალი relfrozenxid: %u, რომელიც წინა მნიშვნელობაზე %d XID-ით წინაა\n" -#: access/heap/vacuumlazy.c:687 +#: access/heap/vacuumlazy.c:1050 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "ახალი relminmxid: %u, რომელიც წინა მნიშვნელობაზე %d MXID-ით წინაა\n" -#: access/heap/vacuumlazy.c:690 +#: access/heap/vacuumlazy.c:1053 +#, c-format +msgid "frozen: %u pages from table (%.2f%% of total) had % tuples frozen\n" +msgstr "გაყინული : %u გვერდს ცხრილიდან (%.2f%% სრული რაოდენობიდან) % კორტეჟი აქვს გაყინული\n" + +#: access/heap/vacuumlazy.c:1061 #, c-format -msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" -msgstr "გაყინული : %u გვერდს ცხრილიდან (%.2f%% სრული რაოდენობიდან) %lld კორტეჟი აქვს გაყინული\n" +msgid "visibility map: %u pages set all-visible, %u pages set all-frozen (%u were all-visible)\n" +msgstr "" -#: access/heap/vacuumlazy.c:698 +#: access/heap/vacuumlazy.c:1069 msgid "index scan not needed: " msgstr "ინდექსების სკანირება საჭირო არაა: " -#: access/heap/vacuumlazy.c:700 +#: access/heap/vacuumlazy.c:1071 msgid "index scan needed: " msgstr "ინდექსების სკანირება საჭიროა: " -#: access/heap/vacuumlazy.c:702 +#: access/heap/vacuumlazy.c:1073 #, c-format -msgid "%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" -msgstr "ცხრილის %u გვერდიდან (სულ %.2f%%) წაშლილია %lld ჩანაწერის მკვდარი იდენტიფიკატორი\n" +msgid "%u pages from table (%.2f%% of total) had % dead item identifiers removed\n" +msgstr "ცხრილის %u გვერდიდან (სულ %.2f%%) წაშლილია % ჩანაწერის მკვდარი იდენტიფიკატორი\n" -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:1078 msgid "index scan bypassed: " msgstr "სკანირებისას გამოტოვებული ინდექსები: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:1080 msgid "index scan bypassed by failsafe: " msgstr "სკანირებისას უსაფრთხოების გამო გამოტოვებული ინდექსები: " -#: access/heap/vacuumlazy.c:711 +#: access/heap/vacuumlazy.c:1082 #, c-format -msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" -msgstr "ცხრილის %u გვერდზე (სულ %.2f%%) ნაპოვნია %lld ჩანაწერის მკვდარი იდენტიფიკატორი\n" +msgid "%u pages from table (%.2f%% of total) have % dead item identifiers\n" +msgstr "ცხრილის %u გვერდზე (სულ %.2f%%) ნაპოვნია % ჩანაწერის მკვდარი იდენტიფიკატორი\n" -#: access/heap/vacuumlazy.c:726 +#: access/heap/vacuumlazy.c:1097 #, c-format 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:1112 commands/analyze.c:817 +#, c-format +msgid "delay time: %.3f ms\n" +msgstr "დაყოვნების დრო: %.3f მწმ\n" + +#: access/heap/vacuumlazy.c:1120 commands/analyze.c:825 #, 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:1130 commands/analyze.c:828 #, 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:1133 commands/analyze.c:830 #, c-format -msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" -msgstr "ბაფერის გამოყენება: %lld მოხვედრა, %lld აცდენა, %lld ტურტლიანი\n" +msgid "buffer usage: % hits, % reads, % dirtied\n" +msgstr "ბუფერის გამოყენება: % მოხვედრა, % წაკითხვა, % ტურტლიანი\n" -#: access/heap/vacuumlazy.c:756 +#: access/heap/vacuumlazy.c:1138 commands/analyze.c:835 #, c-format -msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" -msgstr "WAL გამოყენება: %lld ჩანაწერი, %lld სრული გვერდის ასლი, %llu ბაიტი\n" +msgid "WAL usage: % records, % full page images, % bytes, % buffers full\n" +msgstr "WAL გამოყენება: % ჩანაწერი, % სრული გვერდის ასლი, % ბაიტი, % ბუფერი სავსეა\n" -#: access/heap/vacuumlazy.c:760 commands/analyze.c:798 +#: access/heap/vacuumlazy.c:1143 commands/analyze.c:840 #, c-format msgid "system usage: %s" msgstr "სისტემური გამოყენება: %s" -#: access/heap/vacuumlazy.c:2172 +#: access/heap/vacuumlazy.c:1431 #, c-format -msgid "table \"%s\": removed %lld dead item identifiers in %u pages" -msgstr "ცხრილი \"%s\": წაიშალა %lld მკვდარი ჩანაწერის იდენტიფიკატორი %u გვერდზე" +msgid "disabling eager scanning after freezing %u eagerly scanned blocks of \"%s.%s.%s\"" +msgstr "" + +#: access/heap/vacuumlazy.c:2820 +#, c-format +msgid "table \"%s\": removed % dead item identifiers in %u pages" +msgstr "ცხრილი \"%s\": წაიშალა % მკვდარი ჩანაწერის იდენტიფიკატორი %u გვერდზე" -#: access/heap/vacuumlazy.c:2326 +#: access/heap/vacuumlazy.c:2992 #, 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:2995 #, 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:2996 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" @@ -1361,67 +1380,67 @@ msgstr "" "მხედველობაში იქონიეთ, რომ საჭიროა კონფიგურაციის პარამეტრის \"maintenance_work_mem\" ან \"autovacuum_work_mem\" გაზრდა.\n" "ასევე შეიძლება დაგჭირდეთ განიხილოთ მომტვერსასრუტების სხვა გზები, რომ დაეწიოთ ტრანზაქცების ID-ების გამოყოფას." -#: access/heap/vacuumlazy.c:2592 +#: access/heap/vacuumlazy.c:3258 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "%s: წაკვეთის შეჩერება ბლოკირების კონფლიქტური მოთხოვნის გამო" -#: access/heap/vacuumlazy.c:2662 +#: access/heap/vacuumlazy.c:3328 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "ცხრილი \"%s\": წაიკვეთა %u-დან %u გვერდზე" -#: access/heap/vacuumlazy.c:2724 +#: access/heap/vacuumlazy.c:3390 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "ცხრილი %s: წაკვეთის შეჩერება ბლოკირების კონფლიქტური მოთხოვნის გამო" -#: access/heap/vacuumlazy.c:2843 +#: access/heap/vacuumlazy.c:3509 #, 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:3776 #, 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:3779 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "%u ბლოკის (ურთიერთობის %s.%s) სკანირებისას" -#: access/heap/vacuumlazy.c:3120 +#: access/heap/vacuumlazy.c:3783 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "ურთიერთობის სკანირებისას \"%s.%s\"" -#: access/heap/vacuumlazy.c:3128 +#: access/heap/vacuumlazy.c:3791 #, 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:3794 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "ბლოკის (%u) მომტვერსასრუტებისას (ურთიერთობიდან \"%s.%s\")" -#: access/heap/vacuumlazy.c:3135 +#: access/heap/vacuumlazy.c:3798 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "ურთერთობის დამტვერსასრუტებისას \"%s.%s\"" -#: access/heap/vacuumlazy.c:3140 commands/vacuumparallel.c:1113 +#: access/heap/vacuumlazy.c:3803 commands/vacuumparallel.c:1126 #, 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:3808 commands/vacuumparallel.c:1132 #, 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:3814 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "ურთიერთობის \"%s.%s\" %u ბლოკამდე მოკვეთისას" @@ -1436,22 +1455,22 @@ msgstr "წვდომის მეთოდი \"%s\" არ არის ტ msgid "index access method \"%s\" does not have a handler" msgstr "ინდექსის წვდომის მეთოდს \"%s\" დამმუშავებელი არ აქვს" -#: access/index/genam.c:487 +#: access/index/genam.c:498 #, c-format msgid "transaction aborted during system catalog scan" msgstr "ტრანზაქცია გაუქმდა სისტემური კატალოგის სკანირებისას" -#: access/index/genam.c:655 access/index/indexam.c:82 +#: access/index/genam.c:663 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:1361 commands/indexcmds.c:2982 commands/tablecmds.c:284 commands/tablecmds.c:308 commands/tablecmds.c:19599 commands/tablecmds.c:21519 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" ინდექსი არაა" -#: access/index/indexam.c:1028 +#: access/index/indexam.c:1075 #, c-format msgid "operator class %s has no options" msgstr "ოპერატორის კლასს %s პარამეტრები არ გააჩნია" @@ -1471,7 +1490,7 @@ msgstr "გასაღები უკვე არსებობს: %s." 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:2483 #, c-format msgid "index \"%s\" is not a btree" msgstr "ინდექსი \"%s\" ორობითი ხე არაა" @@ -1491,17 +1510,17 @@ msgstr "ინდექსი (\"%s\") ნახევრად მკვდა 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:4247 #, 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:4252 #, 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:4256 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1510,57 +1529,57 @@ msgstr "" "ბუფერის გვერდის 1/3-ზე მეტი მნიშვნელობების ინდექსირება შეუძლებელია.\n" "სჯობს დააყენოთ ამ მნიშვნელობის MD5 ჰეშის ფუნქციის ინდექსი ან სრული ტექსტური ინდექსირება გამოიყენეთ." -#: access/nbtree/nbtvalidate.c:246 +#: access/nbtree/nbtvalidate.c:242 #, c-format msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდის %s აკლია მხარდაჭერის ფუნქცია ტიპებისთვის %s და %s" -#: access/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\") გახსნა შეუძლებელია" -#: access/spgist/spgutils.c:245 +#: access/spgist/spgutils.c:251 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "როდესაც ფოთლის ტიპი შეყვანის ტიპისგან განსხვავდება, შეკუმშვის მეთოდის მითითება აუცილებელია" -#: access/spgist/spgutils.c:1017 +#: access/spgist/spgutils.c:1036 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST-ის შიდა კორტეჟის ზომა%zu მაქსიმუმს %zu აჭარბებს" -#: access/spgist/spgvalidate.c:136 +#: access/spgist/spgvalidate.c:128 #, c-format msgid "SP-GiST leaf data type %s does not match declared type %s" msgstr "SP-GiST ფოთლის მონაცემების ტიპი %s არ ემთხვევა აღწერილ ტიპს: %s" -#: access/spgist/spgvalidate.c:302 +#: access/spgist/spgvalidate.c:294 #, c-format msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "ოპერატორის ოჯახს \"%s\" ( წვდომის მეთოდისგან \"%s\") აკლია მხარდაჭერის ფუნქცია (%d) ტიპისთვის: %s" -#: access/table/tableam.c:255 +#: access/table/tableam.c:256 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "კორტეჟის იდენტიფიკატორი (%u, %u) არასწორია ურთიერთობისთვის: \"%s\"" -#: access/table/tableamapi.c:109 +#: access/table/tableamapi.c:106 #, c-format msgid "\"%s\" cannot be empty." msgstr "\"%s\" ცარიელი არ შეიძლება იყოს." -#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4858 +#: access/table/tableamapi.c:113 access/transam/xlogrecovery.c:4879 #, c-format msgid "\"%s\" is too long (maximum %d characters)." msgstr "\"%s\" ძალიან გრძელია (მაქს %d სიმბოლო)" -#: access/table/tableamapi.c:139 +#: access/table/tableamapi.c:136 #, c-format msgid "table access method \"%s\" does not exist" msgstr "ცხრილის წვდომის მეთოდი \"%s\" არ არსებობს" -#: access/table/tableamapi.c:144 +#: access/table/tableamapi.c:141 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "ცხრილის წვდომის მეთოდი \"%s\" არ არსებობს." @@ -1590,12 +1609,12 @@ msgstr "დარწმუნდით, რომ ძირითად სე msgid "Make sure the configuration parameter \"%s\" is set." msgstr "დარწმუნდით, რომ კონფიგურაციის პარამეტრი \"%s\" დაყენებულია." -#: access/transam/multixact.c:1050 +#: access/transam/multixact.c:1097 #, 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:1099 access/transam/multixact.c:1106 access/transam/multixact.c:1130 access/transam/multixact.c:1139 access/transam/varsup.c:158 access/transam/varsup.c:165 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1604,65 +1623,65 @@ msgstr "" "გაუშვით მთელი ბაზის მომტვერსასრუტება.\n" "ასევე შეიძლება დაგჭირდეთ ძველი მომზადებული ტრანზაქციების გადაცემა ან გაუქმება, ან წაშალეთ გაჭედილი რეპლიკაციის სლოტები." -#: access/transam/multixact.c:1057 +#: access/transam/multixact.c:1104 #, 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:1125 access/transam/multixact.c:2482 #, 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:1134 access/transam/multixact.c:2491 #, 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:1195 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "მულტიტრანზაქციული \"წევრების\" ლიმიტი გადაჭარბებულია" -#: access/transam/multixact.c:1149 +#: access/transam/multixact.c:1196 #, 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:1201 #, 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:1232 #, 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:1237 #, 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:1377 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u აღარ არსებობს - აშკარა გადატანა" -#: access/transam/multixact.c:1336 +#: access/transam/multixact.c:1383 #, 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:2487 access/transam/multixact.c:2496 #, c-format msgid "" "To avoid MultiXactId assignment failures, execute a database-wide VACUUM in that database.\n" @@ -1671,61 +1690,61 @@ msgstr "" "მულტიტრანზაქციების მინიჭებების თავიდან ასაცილებლად გაუშვით VACUUM მთელ ბაზაზე იმ მონაცემთა ბაზისთვის.\n" "შეიძლება, ასევე, დაგჭირდეთ ძველი მომზადებული ტრანზაქციების კომიტი ან დაბრუნება, ან გამოუყენებელი რეპლიკაციის სლოტების წაშლა." -#: access/transam/multixact.c:2726 +#: access/transam/multixact.c:2775 #, 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:2797 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "მულტიტრანზაქციების ჩაციკვლისგან დაცვის მექანიზმები ახლა ჩართულია" -#: access/transam/multixact.c:3138 +#: access/transam/multixact.c:3188 #, 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:3206 #, 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:3525 #, c-format msgid "invalid MultiXactId: %u" msgstr "არასწორი MultiXactId: %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:752 access/transam/parallel.c:871 #, c-format msgid "parallel worker failed to initialize" msgstr "პარალელური დამხმარე პროცესის ინიციალიზაციის შეცდომა" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:753 access/transam/parallel.c:872 #, c-format msgid "More details may be available in the server log." msgstr "მეტი დეტალები შეიძლება სერვერის ჟურნალში იყოს ხელმისაწვდომი." -#: access/transam/parallel.c:912 +#: access/transam/parallel.c:933 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster-ი დასრულდა პარალელური ტრანზაქციისას" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1120 #, c-format msgid "lost connection to parallel worker" msgstr "პარალელური დამხმარე პროცესთან კავშირი დაკარგულია" -#: access/transam/parallel.c:1155 access/transam/parallel.c:1157 +#: access/transam/parallel.c:1176 access/transam/parallel.c:1178 msgid "parallel worker" msgstr "პარალელური დამხმარე პროცესი" -#: access/transam/parallel.c:1327 replication/logical/applyparallelworker.c:890 +#: access/transam/parallel.c:1348 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:1353 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "დინამიური გაზიარებული მეხსიერების სეგმენტის არასწორი მაგიური რიცხვი" @@ -1785,62 +1804,62 @@ msgstr "რესურსის მმართველს ID-ით %d იგ msgid "registered custom resource manager \"%s\" with ID %d" msgstr "რეგისტრირებულია მორგებული რესურსის მმართველი \"%s\" ID-ით %d" -#: access/transam/slru.c:346 +#: access/transam/slru.c:360 #, c-format -msgid "\"%s\" must be a multiple of %d" -msgstr "\"%s\" %d-ის ნამრავლი უნდა იყოს" +msgid "\"%s\" must be a multiple of %d." +msgstr "\"%s\" %d-ის ნამრავლი უნდა იყოს." -#: access/transam/slru.c:815 +#: access/transam/slru.c:832 #, 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:1061 access/transam/slru.c:1067 access/transam/slru.c:1075 access/transam/slru.c:1080 access/transam/slru.c:1087 access/transam/slru.c:1092 access/transam/slru.c:1099 access/transam/slru.c:1106 #, c-format msgid "could not access status of transaction %u" msgstr "ტრანზაქციის %u სტატუსის წვდომის შეცდომა" -#: access/transam/slru.c:1045 +#: access/transam/slru.c:1062 #, c-format msgid "Could not open file \"%s\": %m." msgstr "ფაილის (%s) გახსნის შეცდომა: %m." -#: access/transam/slru.c:1051 +#: access/transam/slru.c:1068 #, 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:1076 #, 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:1081 #, 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:1088 #, 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:1093 #, 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:1100 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "ფაილის (%s) fsync-ის შეცდომა: %m." -#: access/transam/slru.c:1090 +#: access/transam/slru.c:1107 #, c-format msgid "Could not close file \"%s\": %m." msgstr "ფაილის (%s) დახურვის შეცდომა: %m." -#: access/transam/slru.c:1416 +#: access/transam/slru.c:1433 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "საქაღალდის გასუფთავების შეცდომა: \"%s\" აშკარა ჩაციკვლა" @@ -1905,12 +1924,12 @@ msgstr "საჭიროა \"max_prepared_tranzactions\"-ის არან 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:2530 #, 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:2531 #, c-format msgid "Increase \"max_prepared_transactions\" (currently %d)." msgstr "გაზარდეთ \"max_prepared_transactions\" (ამჟამად %d)." @@ -1945,147 +1964,147 @@ msgstr "ტრანზაქციის დასამთავრებლ 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:571 postmaster/walsummarizer.c:943 replication/logical/logical.c:211 replication/walsender.c:812 #, 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:1744 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "ფაილის (\"%s\") თავიდან შექმნის შეცდომა: %m" -#: access/transam/twophase.c:1881 +#: access/transam/twophase.c:1871 #, 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:2106 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "მიმდინარეობს გაზიარებული მეხსიერებიდან წინასწარ მომზადებული ტრანზაქციის აღდგენა: %u" -#: access/transam/twophase.c:2210 +#: access/transam/twophase.c:2199 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "ორფაზიანი მდგომარეობის გაჭედილი ფაილის მოცილება ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2217 +#: access/transam/twophase.c:2206 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "ორფაზიანი მდგომარეობის გაჭედილი მდგომარეობის წაშლა ტრანზაქციისთვის: %u" -#: access/transam/twophase.c:2230 +#: access/transam/twophase.c:2219 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "მომავალი ორფაზიანი მდგომარეობის ფაილის წაშლა ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2237 +#: access/transam/twophase.c:2226 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "მომავალი ორფაზიანი მდგომარეობის მეხსიერებიდან წაშლა ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2262 +#: access/transam/twophase.c:2251 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "ორფაზიანი მდგომარეობის დაზიანებული ფაილი ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2267 +#: access/transam/twophase.c:2256 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "ორფაზიანი მდგომარეობის დაზიანებული მეხსიერება ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2524 +#: access/transam/twophase.c:2513 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "ორფაზიანი მდგომარეობის ფაილის აღდგენა ტრანზაქციისთვის %u შეუძლებელია" -#: access/transam/twophase.c:2526 +#: access/transam/twophase.c:2515 #, 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:2523 storage/file/fd.c:514 utils/fmgr/dfmgr.c:199 #, 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,561 +2112,516 @@ msgstr "" msgid "database with OID %u must be vacuumed within %u transactions" msgstr "ბაზა \"%u\" %u ტრანზაქციის განმავლობაში უნდა მომტვერსასრუტდეს" -#: access/transam/xact.c:649 +#: 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:652 #, 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 +#: access/transam/xact.c:843 #, c-format msgid "cannot modify data in a parallel worker" msgstr "პარალელურ დამხმარე პროცესში მონაცემების შეცვლა შეუძლებელია" -#: access/transam/xact.c:1115 +#: access/transam/xact.c:1118 #, c-format msgid "cannot start commands during a parallel operation" msgstr "პარალელური ოპერაციის დროს ბრძანებების გაშვება შეუძლებელია" -#: access/transam/xact.c:1123 +#: access/transam/xact.c:1126 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "ტრანზაქციაში 2^32-2 ბრძანებაზე მეტი ვერ იქნება" -#: access/transam/xact.c:1664 +#: access/transam/xact.c:1695 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "გადაცილებულია გადაცემული ქვეტრანზაქციების მაქსიმალური რაოდენობა: %d" -#: access/transam/xact.c:2561 +#: access/transam/xact.c:2616 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "ტრანზაქციაზე, რომელიც დროებით ობიექტებზე მუშაობდა, PREPARE-ს ვერ იზამთ" -#: access/transam/xact.c:2571 +#: access/transam/xact.c:2626 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "ტრანზაქციაზე, რომლიდანაც სწრაფი ასლები გაიტანეს, PREPARE-ს ვერ გაუშვებთ" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3593 +#: access/transam/xact.c:3657 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s ქვეტრანზაქციის ბლოკის შიგნით ვერ გაეშვება" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3603 +#: access/transam/xact.c:3667 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s ქვეტრანზაქციაში ვერ გაეშვება" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3613 -#, c-format -msgid "%s cannot be executed within a pipeline" -msgstr "%s ფუნქციიდან ვერ გაეშვება" - -#. translator: %s represents an SQL statement name -#: access/transam/xact.c:3623 +#: access/transam/xact.c:3677 #, c-format msgid "%s cannot be executed from a function" msgstr "%s ფუნქციიდან ვერ გაეშვება" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3694 access/transam/xact.c:4019 access/transam/xact.c:4098 access/transam/xact.c:4221 access/transam/xact.c:4372 access/transam/xact.c:4441 access/transam/xact.c:4552 +#: access/transam/xact.c:3748 access/transam/xact.c:4070 access/transam/xact.c:4149 access/transam/xact.c:4272 access/transam/xact.c:4423 access/transam/xact.c:4492 access/transam/xact.c:4603 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s მხოლოდ ტრანზაქციის ბლოკში შეიძლება იყოს გამოყენებული" -#: access/transam/xact.c:3905 +#: access/transam/xact.c:3956 #, c-format msgid "there is already a transaction in progress" msgstr "ტრანზაქცია უკვე მიმდინარეობს" -#: access/transam/xact.c:4024 access/transam/xact.c:4103 access/transam/xact.c:4226 +#: access/transam/xact.c:4075 access/transam/xact.c:4154 access/transam/xact.c:4277 #, c-format msgid "there is no transaction in progress" msgstr "ტრანზაქცია გაშვებული არაა" -#: access/transam/xact.c:4114 +#: access/transam/xact.c:4165 #, c-format msgid "cannot commit during a parallel operation" msgstr "პარალელური ოპერაციის დროს გადაცემა შეუძლებელია" -#: access/transam/xact.c:4237 +#: access/transam/xact.c:4288 #, c-format msgid "cannot abort during a parallel operation" msgstr "პარალელური ოპერაციის დროს გაუქმება შეუძლებელია" -#: access/transam/xact.c:4336 +#: access/transam/xact.c:4387 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "პარალელური ოპერაციის დროს შესანახი წერტილების აღწერა შეუძლებელია" -#: access/transam/xact.c:4423 +#: access/transam/xact.c:4474 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "პარალელური ოპერაციის დროს შესანახი წერტილების წაშლა შეუძლებელია" -#: access/transam/xact.c:4433 access/transam/xact.c:4484 access/transam/xact.c:4544 access/transam/xact.c:4593 +#: access/transam/xact.c:4484 access/transam/xact.c:4535 access/transam/xact.c:4595 access/transam/xact.c:4644 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "შესანახი წერტილი არ არსებობს: %s" -#: access/transam/xact.c:4490 access/transam/xact.c:4599 +#: access/transam/xact.c:4541 access/transam/xact.c:4650 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "შესანახი წერტილების მიმდინარე დონეზე შესანახი წერტილი არ არსებობს: %s" -#: access/transam/xact.c:4532 +#: access/transam/xact.c:4583 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "პარალელური ოპერაციის დროს შენახულ წერტილზე დაბრუნება შეუძლებელია" -#: access/transam/xact.c:5376 +#: access/transam/xact.c:5438 #, c-format 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:1552 #, 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:1779 #, 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:2342 access/transam/xlog.c:4690 #, 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:2360 #, 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:2597 #, 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:3883 access/transam/xlogutils.c:820 replication/walsender.c:3050 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "მოთხოვნილი WAL სეგმენტი %s უკვე წაშლილია" -#: access/transam/xlog.c:4055 +#: access/transam/xlog.c:4205 #, 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:4248 access/transam/xlog.c:4259 access/transam/xlog.c:4280 #, 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:4265 access/transam/xlog.c:4286 #, 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:4269 access/transam/xlog.c:4289 commands/dbcommands.c:3276 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "ნაკლული საქაღალდის (\"%s\") შექმნის შეცდომა: %m" -#: access/transam/xlog.c:4206 +#: access/transam/xlog.c:4356 #, 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:4534 access/transam/xlog.c:4544 access/transam/xlog.c:4570 access/transam/xlog.c:4580 access/transam/xlog.c:4590 access/transam/xlog.c:4596 access/transam/xlog.c:4606 access/transam/xlog.c:4616 access/transam/xlog.c:4626 access/transam/xlog.c:4636 access/transam/xlog.c:4646 access/transam/xlog.c:4656 access/transam/xlog.c:4668 access/transam/xlog.c:4676 utils/init/miscinit.c:1817 #, c-format msgid "database files are incompatible with server" msgstr "ბაზის ფაილები სერვერთან თავსებადი არაა" -#: access/transam/xlog.c:4358 +#: access/transam/xlog.c:4535 #, 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:4539 #, 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:4545 #, 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:4548 access/transam/xlog.c:4576 access/transam/xlog.c:4586 access/transam/xlog.c:4592 #, c-format msgid "It looks like you need to initdb." msgstr "როგორც ჩანს, initdb გჭირდებათ." -#: access/transam/xlog.c:4383 +#: access/transam/xlog.c:4560 #, c-format msgid "incorrect checksum in control file" msgstr "არასწორი საკონტროლო ჯამი pg_control-ის ფაილში" -#: access/transam/xlog.c:4394 -#, 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 +#. translator: %s is a variable name and %d is its value +#: access/transam/xlog.c:4572 access/transam/xlog.c:4582 access/transam/xlog.c:4598 access/transam/xlog.c:4608 access/transam/xlog.c:4618 access/transam/xlog.c:4628 access/transam/xlog.c:4638 access/transam/xlog.c:4648 access/transam/xlog.c:4658 #, c-format -msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." -msgstr "მონაცემთა ბაზის კლასტერის ინიციალიზაცია მოხდა MAXALIGN %d -ით, მაგრამ სერვერი აგებულია MAXALIGN %d-ით." +msgid "The database cluster was initialized with %s %d, but the server was compiled with %s %d." +msgstr "მონაცემთა ბაზის კლასტერის ინიციალიზაცია მოხდა %s %d -ით, მაგრამ სერვერი აგებულია %s %d-ით." -#: access/transam/xlog.c:4410 +#: access/transam/xlog.c:4591 #, 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 -#, 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:4602 access/transam/xlog.c:4612 access/transam/xlog.c:4622 access/transam/xlog.c:4632 access/transam/xlog.c:4642 access/transam/xlog.c:4652 access/transam/xlog.c:4662 access/transam/xlog.c:4671 access/transam/xlog.c:4679 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "როგორც ჩანს, გჭირდებათ თავიდან ააგოთ პროდუქტი, ან initdb." -#: access/transam/xlog.c:4424 -#, 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 -#, 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 -#, 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 -#, 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 -#, 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 -#, 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:4669 #, 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:4677 #, 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:4686 #, 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 -#, 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 +#. translator: both %s are GUC names +#: access/transam/xlog.c:4700 access/transam/xlog.c:4706 #, c-format -msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" -msgstr "\"max_wal_size\"-ი \"wal_segment_size\"-ზე, მინიმუმ, ორჯერ მეტი უნდა იყოს" +msgid "\"%s\" must be at least twice \"%s\"" +msgstr "\"%s\", სულ ცოტა, ორჯერ მეტი უნდა იყოს \"%s\"-ზე" -#: 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:4868 catalog/namespace.c:4696 commands/tablespace.c:1210 commands/user.c:2542 commands/variable.c:72 replication/slot.c:2655 tcop/postgres.c:3631 utils/error/elog.c:2274 #, 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:4914 commands/user.c:2558 commands/variable.c:173 tcop/postgres.c:3647 utils/error/elog.c:2300 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "უცნობი საკვანძო სიტყვა: \"%s\"." -#: access/transam/xlog.c:5122 +#: access/transam/xlog.c:5341 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "ფაილში წინასწარ-ჩაწერადი ჟურნალის ფაილის დასაწყისის ჩაწერის შეცდომა: %m" -#: access/transam/xlog.c:5130 +#: access/transam/xlog.c:5349 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "ფაილში წინასწარ-ჩაწერადი ჟურნალის ფაილის დასაწყისის fsync-ის შეცდომა: %m" -#: access/transam/xlog.c:5136 +#: access/transam/xlog.c:5355 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "ფაილში წინასწარ-ჩაწერადი ჟურნალის ფაილის დასაწყისის დახურვის შეცდომა: %m" -#: access/transam/xlog.c:5354 +#: access/transam/xlog.c:5580 #, 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:5581 #, 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:5582 #, 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:5647 #, c-format msgid "control file contains invalid checkpoint location" msgstr "საკონტროლო ფაილი საკონტროლო წერტილის არასწორ მდებარეობას შეიცავს" -#: access/transam/xlog.c:5432 +#: access/transam/xlog.c:5658 #, c-format msgid "database system was shut down at %s" msgstr "მონაცემთა ბაზის სისტემის გათიშვის დრო: %s" -#: access/transam/xlog.c:5438 +#: access/transam/xlog.c:5664 #, c-format msgid "database system was shut down in recovery at %s" msgstr "მონაცემთა ბაზის სისტემის აღდგენისას გათიშვის დრო: %s" -#: access/transam/xlog.c:5444 +#: access/transam/xlog.c:5670 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "მონაცემთა ბაზა შეწყვეტილია; ბოლოს ჩართული იყო: %s" -#: access/transam/xlog.c:5450 +#: access/transam/xlog.c:5676 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "მონაცემთა ბაზის სისტემის აღდგენისას გათიშვის დრო: %s" -#: access/transam/xlog.c:5452 +#: access/transam/xlog.c:5678 #, 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:5684 #, 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:5686 #, 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:5692 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "მონაცემთა ბაზა შეწყვეტილია; ბოლოს ჩართული იყო: %s" -#: access/transam/xlog.c:5473 +#: access/transam/xlog.c:5699 #, c-format msgid "control file contains invalid database cluster state" msgstr "კონტროლის ფაილი ბაზის კლასტერის არასწორ მდგომარეობას შეიცავს" -#: access/transam/xlog.c:5860 +#: access/transam/xlog.c:6087 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL ონლაინ მარქაფის დასასრულამდე მთავრდება" -#: access/transam/xlog.c:5861 +#: access/transam/xlog.c:6088 #, 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:6092 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL აღდგენის შეთანხმებულ წერტილამდე მთავრდება" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:6138 #, c-format msgid "selected new timeline ID: %u" msgstr "დროის ახალი ხაზის არჩეული ID: %u" -#: access/transam/xlog.c:5944 +#: access/transam/xlog.c:6171 #, c-format msgid "archive recovery complete" msgstr "არქივიდან აღდგენა დასრულდა" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6803 #, c-format msgid "shutting down" msgstr "მიმდინარეობს გამორთვა" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6591 +#: access/transam/xlog.c:6842 #, 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:6854 #, 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:6919 #, 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" +msgid "restartpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %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:6943 #, 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" +msgid "checkpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %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:7429 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "კონკურენტული წინასწარ-ჩაწერადი ჟურნალის აქტივობა, სანამ მონაცემთა ბაზა მუშაობას ასრულებს" -#: access/transam/xlog.c:7749 +#: access/transam/xlog.c:8016 #, c-format msgid "recovery restart point at %X/%X" msgstr "აღდგენის გადატვირთვის წერტილი: %X/%X" -#: access/transam/xlog.c:7751 +#: access/transam/xlog.c:8018 #, c-format msgid "Last completed transaction was at log time %s." msgstr "უკანასკნელად დასრულებული ტრანზაქცია მოხდა ჟურნალის დროით %s." -#: access/transam/xlog.c:8013 +#: access/transam/xlog.c:8280 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "აღდგენის წერტილი \"%s\" შექმნილია %X/%X -სთან" -#: access/transam/xlog.c:8220 +#: access/transam/xlog.c:8487 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "ონლაინ მარქაფი გაუქმდა. აღდგენა ვერ გაგრძელდება" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8545 #, 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:8603 #, 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:8632 #, 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:8902 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "გამჭოლად-ჩაწერადი ფაილის (%s) fsync-ის შეცდომა: %m" -#: access/transam/xlog.c:8640 +#: access/transam/xlog.c:8907 #, 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:8984 access/transam/xlog.c:9320 #, 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:8985 access/transam/xlog.c:9321 access/transam/xlogfuncs.c:249 #, 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:8990 #, c-format msgid "backup label too long (max %d bytes)" msgstr "მარქაფის ჭდე ძალიან გრძელია (max %d ბაიტი)" -#: access/transam/xlog.c:8854 +#: access/transam/xlog.c:9111 #, 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:9113 access/transam/xlog.c:9409 #, 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:9193 backup/basebackup.c:1419 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:9200 backup/basebackup.c:1424 utils/adt/misc.c:359 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "%s: სიმბმული ძალიან გრძელია" -#: access/transam/xlog.c:9064 -#, 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:9359 backup/basebackup.c:1283 #, c-format msgid "the standby was promoted during online backup" msgstr "უქმე წახალისდა ონლაინ მარქაფის მიმდინარეობის დროს" -#: access/transam/xlog.c:9103 backup/basebackup.c:1282 +#: access/transam/xlog.c:9360 backup/basebackup.c:1284 #, 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:9407 #, 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:9523 #, 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:9537 #, 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:9539 #, 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:9546 #, c-format msgid "all required WAL segments have been archived" msgstr "ყველა საჭირო WAL სეგმენტი დაარქივებულია" -#: access/transam/xlog.c:9293 +#: access/transam/xlog.c:9550 #, 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:9589 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "მარქაფი გაუქმდა, რადგან უკანაბოლომ მუშაობა pg_backup_stop-ის გამოძახებამდე დაასრულა" @@ -2690,269 +2664,269 @@ msgstr "არქივის სტატუსის ფაილის (%s) msgid "could not write archive status file \"%s\": %m" msgstr "არქივის სტატუსის ფაილის (%s) ჩაწერის შეცდომა: %m" -#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 +#: access/transam/xlogfuncs.c:70 backup/basebackup.c:999 #, c-format msgid "a backup is already in progress in this session" msgstr "ამ სესიაში მარქაფი უკვე მიმდინარეობს" -#: access/transam/xlogfuncs.c:140 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "backup is not in progress" msgstr "მარქაფი არ მიმდინარეობს" -#: access/transam/xlogfuncs.c:141 +#: access/transam/xlogfuncs.c:142 #, c-format msgid "Did you call pg_backup_start()?" msgstr "თქვენ გამოიძახეთ pg_backup_start()?" -#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:323 +#: access/transam/xlogfuncs.c:185 access/transam/xlogfuncs.c:243 access/transam/xlogfuncs.c:282 access/transam/xlogfuncs.c:303 access/transam/xlogfuncs.c:324 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "WAL კონტროლის ფუნქციების შესრულება აღდგენის დროს შეუძლებელია." -#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 access/transam/xlogfuncs.c:447 +#: access/transam/xlogfuncs.c:210 access/transam/xlogfuncs.c:390 access/transam/xlogfuncs.c:448 #, c-format msgid "%s cannot be executed during recovery." msgstr "%s არ შეიძლება შესრულდეს აღდგენის დროს." -#: access/transam/xlogfuncs.c:215 +#: access/transam/xlogfuncs.c:216 #, c-format msgid "pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" msgstr "pg_log_standby_snapshot()-ის გამოყენება შესაძლებელია, მხოლოდ, მაშინ, როცა \"wal_level\" >= \"replica\"" -#: access/transam/xlogfuncs.c:247 +#: access/transam/xlogfuncs.c:248 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "WAL დონე არ არის საკმარისი აღდგენის წერტილის შესაქმნელად" -#: access/transam/xlogfuncs.c:255 +#: access/transam/xlogfuncs.c:256 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "აღდგენის წერტილისთვის მნიშვნელობა ძალიან გრძელია (მაქს. %d სიმბოლო)" -#: access/transam/xlogfuncs.c:486 +#: access/transam/xlogfuncs.c:487 #, c-format msgid "invalid WAL file name \"%s\"" msgstr "არასწორი WAL ფაილის სახელი \"%s\"" -#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 access/transam/xlogfuncs.c:679 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 access/transam/xlogfuncs.c:680 #, c-format msgid "recovery is not in progress" msgstr "აღდგენა არ მიმდინარეობს" -#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 access/transam/xlogfuncs.c:680 +#: access/transam/xlogfuncs.c:524 access/transam/xlogfuncs.c:554 access/transam/xlogfuncs.c:578 access/transam/xlogfuncs.c:601 access/transam/xlogfuncs.c:681 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "აღდგენის კონტროლის ფუნქციების შესრულება მხოლოდ აღდგენის დროს შეიძლება." -#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "standby promotion is ongoing" msgstr "მინდინარეობს უქმობის დაწინაურება" -#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 +#: access/transam/xlogfuncs.c:530 access/transam/xlogfuncs.c:560 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "წახალისების დაწყების შემდეგ %s-ის შესრულება შეუძლებელია." -#: access/transam/xlogfuncs.c:685 +#: access/transam/xlogfuncs.c:686 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "\"wait_seconds\" უარყოფითი ან ნულოვანი არ უნდა იყოს" -#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 +#: access/transam/xlogfuncs.c:708 storage/ipc/signalfuncs.c:293 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "postmaster-ისთვის სიგნალის გაგზავნის შეცდომა: %m" -#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#: access/transam/xlogfuncs.c:740 libpq/be-secure.c:241 libpq/be-secure.c:350 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "მიერთების შეწყვეტა postmaster-ის მოულოდნელი გასვლის გამო" -#: access/transam/xlogfuncs.c:740 +#: access/transam/xlogfuncs.c:741 #, c-format msgid "while waiting on promotion" msgstr "წახალისების მოლოდინისას" -#: access/transam/xlogfuncs.c:744 +#: access/transam/xlogfuncs.c:745 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" msgstr[0] "სერვერი არ წახალისდა %d წამში" msgstr[1] "სერვერი არ წახალისდა %d წამში" -#: access/transam/xlogprefetcher.c:1088 +#: access/transam/xlogprefetcher.c:1086 #, c-format -msgid "\"recovery_prefetch\" is not supported on platforms that lack posix_fadvise()." -msgstr "\"recovery_prefetch\" პლატფორმებზე, რომლებსაც posix_fadvise() არ აქვთ, მხარდაჭერილი არაა." +msgid "\"recovery_prefetch\" is not supported on platforms that lack support for issuing read-ahead advice." +msgstr "\"recovery_prefetch\" პლატფორმებზე, რომლებსაც წინასწარ-წაკითხვის მითითება არ აქვთ, მხარდაჭერილი არაა." -#: access/transam/xlogreader.c:619 +#: access/transam/xlogreader.c:620 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u" -#: access/transam/xlogreader.c:628 +#: access/transam/xlogreader.c:629 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord მოთხოვნილია %X/%X-ის მიერ" -#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 +#: access/transam/xlogreader.c:670 access/transam/xlogreader.c:1135 #, c-format msgid "invalid record length at %X/%X: expected at least %u, got %u" msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u" -#: access/transam/xlogreader.c:758 +#: access/transam/xlogreader.c:759 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "მისამართზე %X/%X contrecord ალამი არ არსებობს" -#: access/transam/xlogreader.c:771 +#: access/transam/xlogreader.c:772 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%X" -#: access/transam/xlogreader.c:1142 +#: access/transam/xlogreader.c:1143 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%X" -#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 +#: access/transam/xlogreader.c:1156 access/transam/xlogreader.c:1172 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%X მისამართზე %X/%X" -#: access/transam/xlogreader.c:1209 +#: access/transam/xlogreader.c:1210 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%X" -#: access/transam/xlogreader.c:1243 +#: access/transam/xlogreader.c:1244 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u" -#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 +#: access/transam/xlogreader.c:1259 access/transam/xlogreader.c:1301 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u" -#: access/transam/xlogreader.c:1274 +#: access/transam/xlogreader.c:1275 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" -msgstr "WAL ფაილი სხვა მონაცემთა ბაზის სისტემიდანაა: WAL ფაილის ბაზის სისტემის იდენტიფიკატორია %llu, pg_control-ის ბაზის სისტემის იდენტიფიკატორია %llu" +msgid "WAL file is from different database system: WAL file database system identifier is %, pg_control database system identifier is %" +msgstr "WAL ფაილი სხვა მონაცემთა ბაზის სისტემიდანაა: WAL ფაილის ბაზის სისტემის იდენტიფიკატორია %, pg_control-ის ბაზის სისტემის იდენტიფიკატორია %" -#: access/transam/xlogreader.c:1282 +#: access/transam/xlogreader.c:1283 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL ფაილი სხვა მონაცემთა ბაზის სისტემიდანაა: გვერდის თავსართში მითითებული სეგმენტის ზომა არასწორია" -#: access/transam/xlogreader.c:1288 +#: access/transam/xlogreader.c:1289 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL ფაილი სხვა მონაცემთა ბაზის სისტემიდანაა: გვერდის თავსართში მითითებული XLOG_BLKSZ არასწორია" -#: access/transam/xlogreader.c:1320 +#: access/transam/xlogreader.c:1321 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "მოულოდნელი pageaddr %X/%X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u" -#: access/transam/xlogreader.c:1346 +#: access/transam/xlogreader.c:1347 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u" msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u" -#: access/transam/xlogreader.c:1749 +#: access/transam/xlogreader.c:1759 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "ურიგო block_id %u მისამართზე %X/%X" -#: access/transam/xlogreader.c:1773 +#: access/transam/xlogreader.c:1783 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%X არ არსებობს" -#: access/transam/xlogreader.c:1780 +#: access/transam/xlogreader.c:1790 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%X" -#: access/transam/xlogreader.c:1816 +#: access/transam/xlogreader.c:1826 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%X" -#: access/transam/xlogreader.c:1832 +#: access/transam/xlogreader.c:1842 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%X" -#: access/transam/xlogreader.c:1846 +#: access/transam/xlogreader.c:1856 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%X" -#: access/transam/xlogreader.c:1861 +#: access/transam/xlogreader.c:1871 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X" msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%X" -#: access/transam/xlogreader.c:1877 +#: access/transam/xlogreader.c:1887 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%X" -#: access/transam/xlogreader.c:1889 +#: access/transam/xlogreader.c:1899 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "არასწორი block_id %u %X/%X" -#: access/transam/xlogreader.c:1956 +#: access/transam/xlogreader.c:1966 #, c-format msgid "record with invalid length at %X/%X" msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%X" -#: access/transam/xlogreader.c:1982 +#: access/transam/xlogreader.c:1992 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "შეცდომა WAL ჩანაწერში მარქაფი ბლოკის, ID-ით %d, მოძებნისას" -#: access/transam/xlogreader.c:2066 +#: access/transam/xlogreader.c:2076 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X, როცა მითითებულია არასწორი ბლოკი %d" -#: access/transam/xlogreader.c:2073 +#: access/transam/xlogreader.c:2083 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "არასწორად შეკუმშული ასლი მისამართზე %X/%X, ბლოკი %d" -#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 +#: access/transam/xlogreader.c:2110 access/transam/xlogreader.c:2127 #, c-format msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d" msgstr "%3$s მეთოდით შეკუმშული ასლი მისამართზე %1$X/%2$X, ბლოკი %4$d მხარდაუჭერელია ამ აგების მიერ" -#: access/transam/xlogreader.c:2126 +#: access/transam/xlogreader.c:2136 #, c-format msgid "could not restore image at %X/%X compressed with unknown method, block %d" msgstr "ასლის აღდგენის შეცდომა მისამართზე %X/%X შეკუმშული უცნობი მეთოდით, ბლოკი %d" -#: access/transam/xlogreader.c:2134 +#: access/transam/xlogreader.c:2144 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "არასწორად შეკუმშული ასლი მისამართზე %X/%X, ბლოკი %d" -#: access/transam/xlogrecovery.c:617 +#: access/transam/xlogrecovery.c:623 #, c-format msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u" msgstr "იწყება მარქაფის აღდგენა გამეორების LSN-ით %X/%X საკონტროლო წერტილზე %X/%X დროის ხაზზე ID-ით %u" -#: access/transam/xlogrecovery.c:649 +#: access/transam/xlogrecovery.c:655 #, c-format msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X" msgstr "ვერ ვიპოვე გამეორების მდებარეობა %X/%X, რომელსაც მიმართავს საკონტროლო წერტილის ჩანაწერი მისამართზე %X/%X" -#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 +#: access/transam/xlogrecovery.c:657 access/transam/xlogrecovery.c:668 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" @@ -2960,463 +2934,464 @@ msgid "" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup." msgstr "" -#: access/transam/xlogrecovery.c:660 +#: access/transam/xlogrecovery.c:666 #, c-format msgid "could not locate required checkpoint record at %X/%X" msgstr "აუცილებელი საკონტროლო წერტილის მოძებნა შეუძლებელია მისამართზე %X/%X" -#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 +#: access/transam/xlogrecovery.c:696 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "სიმბმულის შექმნის შეცდომა %s: %m" -#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 +#: access/transam/xlogrecovery.c:729 access/transam/xlogrecovery.c:735 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ფაილის (\"%s\") იგნორირება იმიტომ, რომ ფაილი \"%s\" არ არსებობს" -#: access/transam/xlogrecovery.c:725 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "სახელშეცვლილია '%s' -დან '%s'-ზე." -#: access/transam/xlogrecovery.c:731 +#: access/transam/xlogrecovery.c:737 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "გადარქმევის შეცდომა %s - %s: %m." -#: access/transam/xlogrecovery.c:770 +#: access/transam/xlogrecovery.c:776 #, c-format msgid "restarting backup recovery with redo LSN %X/%X" msgstr "მარქაფის აღდგენის თავიდან გაშვება გამეორების LSN-ით %X/%X" -#: access/transam/xlogrecovery.c:795 +#: access/transam/xlogrecovery.c:801 #, c-format msgid "could not locate a valid checkpoint record at %X/%X" msgstr "სწორი საკონტროლო წერტილის ჩანაწერის მოძებნა შეუძლებელია მისამართზე %X/%X" -#: access/transam/xlogrecovery.c:806 +#: access/transam/xlogrecovery.c:812 #, c-format msgid "entering standby mode" msgstr "უქმე რეჟიმზე გადართვა" -#: access/transam/xlogrecovery.c:809 +#: access/transam/xlogrecovery.c:815 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "დროში-მითითებული-წერტილით აღდგენის დასაწყისი XID-მდე %u" -#: access/transam/xlogrecovery.c:813 +#: access/transam/xlogrecovery.c:819 #, c-format msgid "starting point-in-time recovery to %s" msgstr "დროში-მითითებული-წერტილით აღდგენის დასაწყისი %s" -#: access/transam/xlogrecovery.c:817 +#: access/transam/xlogrecovery.c:823 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "დროში-მითითებული-წერტილით აღდგენის დასაწყისი \"%s\"" -#: access/transam/xlogrecovery.c:821 +#: access/transam/xlogrecovery.c:827 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "" -#: access/transam/xlogrecovery.c:825 +#: access/transam/xlogrecovery.c:831 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "უახლოეს თანმიმდევრულ წერტილამდე დროში-მითითებული-წერტილით აღდგენის დასაწყისი" -#: access/transam/xlogrecovery.c:828 +#: access/transam/xlogrecovery.c:834 #, c-format msgid "starting archive recovery" msgstr "არქივიდან აღდგენა დაიწყო" -#: access/transam/xlogrecovery.c:849 +#: access/transam/xlogrecovery.c:855 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "მოთხოვნილი დროის ხაზი %u სერვერის ისტორიის შვილი არაა" -#: access/transam/xlogrecovery.c:851 +#. translator: %s is a backup_label file or a pg_control file +#: access/transam/xlogrecovery.c:858 #, c-format -msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." +msgid "Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "" -#: access/transam/xlogrecovery.c:865 +#: access/transam/xlogrecovery.c:873 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "" -#: access/transam/xlogrecovery.c:893 +#: access/transam/xlogrecovery.c:901 #, c-format msgid "invalid next transaction ID" msgstr "შემდეგი ტრანზაქციის არასწორი ID" -#: access/transam/xlogrecovery.c:898 +#: access/transam/xlogrecovery.c:906 #, c-format msgid "invalid redo in checkpoint record" msgstr "არასწორი გამეორება საკონტროლო წერტილის ჩანაწერში" -#: access/transam/xlogrecovery.c:909 +#: access/transam/xlogrecovery.c:917 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "გამეორების არასწორი ჩანაწერი გამორთვის საკონტროლო წერტილში" -#: access/transam/xlogrecovery.c:938 +#: access/transam/xlogrecovery.c:946 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "მონაცემთა ბაზა არასწორად გამოირთო; მიმდინარეობს ავტომატური აღდეგენა" -#: access/transam/xlogrecovery.c:942 +#: access/transam/xlogrecovery.c:950 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "ავარიიდან აღდგენა იწყება დროის ხაზზე %u და სამიზნედ დროის ხაზი %u აქვს" -#: access/transam/xlogrecovery.c:985 +#: access/transam/xlogrecovery.c:993 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label შეიცავს მონაცემებს, რომელიც კონტროლის ფაილს არ შეესაბამება" -#: access/transam/xlogrecovery.c:986 +#: access/transam/xlogrecovery.c:994 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "ეს ნიშნავს, რომ მარქაფი დაზიანებულია და აღდგენისთვის სხვა მარქაფის გამოყენება მოგიწევთ." -#: access/transam/xlogrecovery.c:1040 +#: access/transam/xlogrecovery.c:1048 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "აღდგენის ბრძანების ფაილი \"%s\" მხარდაუჭერელია" -#: access/transam/xlogrecovery.c:1105 +#: access/transam/xlogrecovery.c:1113 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "ერთმომხმარებლიან სერვერებს უქმე რეჟიმი არ გააჩნიათ" -#: access/transam/xlogrecovery.c:1122 +#: access/transam/xlogrecovery.c:1130 #, c-format msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" msgstr "მითითებულია არც\" primary_conninfo\" და არც \"restore_command\"" -#: access/transam/xlogrecovery.c:1123 +#: access/transam/xlogrecovery.c:1131 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "" -#: access/transam/xlogrecovery.c:1131 +#: access/transam/xlogrecovery.c:1139 #, c-format msgid "must specify \"restore_command\" when standby mode is not enabled" msgstr "როცა უქმე რეჟიმი ჩართული არაა, \"restore_command\" პარამეტრის მითითება აუცილებელია" -#: access/transam/xlogrecovery.c:1169 +#: access/transam/xlogrecovery.c:1177 #, c-format msgid "recovery target timeline %u does not exist" msgstr "აღდგენის სამიზნე დროის ხაზი არ არსებობს: %u" -#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 +#: access/transam/xlogrecovery.c:1260 access/transam/xlogrecovery.c:1267 access/transam/xlogrecovery.c:1326 access/transam/xlogrecovery.c:1414 access/transam/xlogrecovery.c:1423 access/transam/xlogrecovery.c:1443 #, c-format msgid "invalid data in file \"%s\"" msgstr "არასწორი მონაცემები ფაილში \"%s\"" -#: access/transam/xlogrecovery.c:1319 +#: access/transam/xlogrecovery.c:1327 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "დროის დამუშავებული ID %u-ა. მოველოდი მნშვნელობას %u." -#: access/transam/xlogrecovery.c:1330 +#: access/transam/xlogrecovery.c:1338 #, c-format msgid "this is an incremental backup, not a data directory" msgstr "ეს ინკრემენტული მარქაფია და არა მონაცემების საქაღალდე" -#: access/transam/xlogrecovery.c:1331 +#: access/transam/xlogrecovery.c:1339 #, c-format msgid "Use pg_combinebackup to reconstruct a valid data directory." msgstr "სწორი მონაცემების საქაღალდის თავიდან ასაგებად გამოიყენეთ ბრძანება pg_combinebackup." -#: access/transam/xlogrecovery.c:1717 +#: access/transam/xlogrecovery.c:1725 #, c-format msgid "unexpected record type found at redo point %X/%X" msgstr "აღმოჩენილია მოულოდნელი ჩანაწერის ტიპი გამეორების წერტილზე %X/%X" -#: access/transam/xlogrecovery.c:1740 +#: access/transam/xlogrecovery.c:1748 #, c-format msgid "redo starts at %X/%X" msgstr "გამეორება დაიწყება მისამართიდან %X/%X" -#: access/transam/xlogrecovery.c:1753 +#: access/transam/xlogrecovery.c:1761 #, c-format msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "მიმდინარეობს გამეორება. გასული დრო: %ld.%02d მიმდინარე LSN: %X/%X" -#: access/transam/xlogrecovery.c:1843 +#: access/transam/xlogrecovery.c:1851 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "მოთხოვნილი აღდგენის წერტილი მუდმივი აღდგენის წერტილამდეა" -#: access/transam/xlogrecovery.c:1875 +#: access/transam/xlogrecovery.c:1883 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "გამეორება დასრულდა %X/%X -სთან. სისტემის დატვირთვა: %s" -#: access/transam/xlogrecovery.c:1881 +#: access/transam/xlogrecovery.c:1889 #, c-format msgid "last completed transaction was at log time %s" msgstr "უკანასკნელად დასრულებული ტრანზაქცია მოხდა ჟურნალის დროით %s" -#: access/transam/xlogrecovery.c:1890 +#: access/transam/xlogrecovery.c:1898 #, c-format msgid "redo is not required" msgstr "გამეორება საჭირო არაა" -#: access/transam/xlogrecovery.c:1901 +#: access/transam/xlogrecovery.c:1910 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "აღდგენა მითითებული აღდგენის სამიზნის მიღწევამდე დასრულდა" -#: access/transam/xlogrecovery.c:2095 +#: access/transam/xlogrecovery.c:2104 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "" -#: access/transam/xlogrecovery.c:2162 +#: access/transam/xlogrecovery.c:2171 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "%2$s-ში ნაპოვნია მოულოდნელი საქაღალდის ჩანაწერი \"%1$s\"" -#: access/transam/xlogrecovery.c:2164 +#: access/transam/xlogrecovery.c:2173 #, c-format -msgid "All directory entries in pg_tblspc/ should be symbolic links." -msgstr "ყველა საქაღალდის ტიპის ელემენტი ph_tblspc/-ში სიმბმულს უნდა წარმოადგენდეს." +msgid "All directory entries in %s/ should be symbolic links." +msgstr "ყველა საქაღალდის ტიპის ელემენტი \"%s/-ში სიმბმულს უნდა წარმოადგენდეს." -#: access/transam/xlogrecovery.c:2165 +#: access/transam/xlogrecovery.c:2175 #, c-format msgid "Remove those directories, or set \"allow_in_place_tablespaces\" to ON transiently to let recovery complete." msgstr "" -#: access/transam/xlogrecovery.c:2217 +#: access/transam/xlogrecovery.c:2227 #, c-format msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" msgstr "" -#: access/transam/xlogrecovery.c:2247 +#: access/transam/xlogrecovery.c:2258 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "თანმიმდევრული აღდგენის მდგომარეობა მიღწეულია მისამართზე %X/%X" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2285 +#: access/transam/xlogrecovery.c:2296 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL გამეორება %X/%X %s-სთვის" -#: access/transam/xlogrecovery.c:2383 +#: access/transam/xlogrecovery.c:2394 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "მოულოდნელი წინა დროის ხაზის ID %u (მიმდინარე დროის ხაზის ID %u) საკონტროლო წერტილის ჩანაწერში" -#: access/transam/xlogrecovery.c:2392 +#: access/transam/xlogrecovery.c:2403 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "მოულოდნელი დროის ხაზის ID %u (%u-ის შემდეგ) საკონტროლო წერტილის ჩანაწერში" -#: access/transam/xlogrecovery.c:2408 +#: access/transam/xlogrecovery.c:2419 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "" -#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 +#: access/transam/xlogrecovery.c:2603 access/transam/xlogrecovery.c:2879 #, c-format msgid "recovery stopping after reaching consistency" msgstr "აღდგენა შეთანხმებული მდგომარეობის მიღწევისას დასრულდება" -#: access/transam/xlogrecovery.c:2613 +#: access/transam/xlogrecovery.c:2624 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "აღდგენა შეწყდა WAL-ის მდებარეობამდე (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2703 +#: access/transam/xlogrecovery.c:2714 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "აღდგენა შეწყდა ტრანზაქციის (%u) გადაცემამდე. დრო %s" -#: access/transam/xlogrecovery.c:2710 +#: access/transam/xlogrecovery.c:2721 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "აღდგენა შეწყდა ტრანზაქციის (%u) გაუქმებამდე. დრო %s" -#: access/transam/xlogrecovery.c:2763 +#: access/transam/xlogrecovery.c:2774 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "აღდგენა შეწყდა აღდგენის წერტილთან \"%s\". დრო %s" -#: access/transam/xlogrecovery.c:2781 +#: access/transam/xlogrecovery.c:2792 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "აღდგენა შეწყდა WAL-ის მდებარეობამდე (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2848 +#: access/transam/xlogrecovery.c:2859 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "აღდგენა შეწყდა ტრანზაქციის (%u) გადაცემამდე. დრო %s" -#: access/transam/xlogrecovery.c:2856 +#: access/transam/xlogrecovery.c:2867 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "აღდგენა ტრანზაქციის (%u) გაუქმების შემდეგ შეწყდა. დრო %s" -#: access/transam/xlogrecovery.c:2937 +#: access/transam/xlogrecovery.c:2948 #, c-format msgid "pausing at the end of recovery" msgstr "შეჩერება აღდგენის ბოლოს" -#: access/transam/xlogrecovery.c:2938 +#: access/transam/xlogrecovery.c:2949 #, c-format 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:2952 access/transam/xlogrecovery.c:4698 #, c-format msgid "recovery has paused" msgstr "აღდგენა შეჩერდა" -#: access/transam/xlogrecovery.c:2942 +#: access/transam/xlogrecovery.c:2953 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "გასაგრძელებლად გაუშვით pg_wal_replay_resume()." -#: access/transam/xlogrecovery.c:3205 +#: access/transam/xlogrecovery.c:3216 #, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" msgstr "მოულოდნელი დროის ხაზის ID %u WAL სეგმენტში %s, LSN %X/%X, წანაცვლება %u" -#: access/transam/xlogrecovery.c:3413 +#: access/transam/xlogrecovery.c:3432 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" msgstr "ჟურნალის სეგმენტიდან (%s, LSN %X/%X, წანაცვლება %u) წაკითხვის შეცდომა: %m" -#: access/transam/xlogrecovery.c:3420 +#: access/transam/xlogrecovery.c:3439 #, c-format 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:4082 #, c-format msgid "invalid checkpoint location" msgstr "საკონტროლო წერტილის არასწორი მდებარეობა" -#: access/transam/xlogrecovery.c:4070 +#: access/transam/xlogrecovery.c:4092 #, c-format msgid "invalid checkpoint record" msgstr "საკონტროლო წერტილის არასწორი ჩანაწერი" -#: access/transam/xlogrecovery.c:4076 +#: access/transam/xlogrecovery.c:4098 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "რესურსის მმართველის არასწორი ID საკონტროლო წერტილის ჩანაწერში" -#: access/transam/xlogrecovery.c:4084 +#: access/transam/xlogrecovery.c:4106 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "საკონტროლო წერტილის არასწორი xl_info" -#: access/transam/xlogrecovery.c:4090 +#: access/transam/xlogrecovery.c:4112 #, c-format msgid "invalid length of checkpoint record" msgstr "საკონტროლო წერტილის ჩანაწერის არასწორი სიგრძე" -#: access/transam/xlogrecovery.c:4144 +#: access/transam/xlogrecovery.c:4166 #, 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:4180 #, 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:4199 #, c-format msgid "new target timeline is %u" msgstr "ახალი სამიზნის დროის ხაზია %u" -#: access/transam/xlogrecovery.c:4380 +#: access/transam/xlogrecovery.c:4400 #, c-format msgid "WAL receiver process shutdown requested" msgstr "მოთხოვნილია WAL-ის მიმღები პროცესის გამორთვა" -#: access/transam/xlogrecovery.c:4440 +#: access/transam/xlogrecovery.c:4460 #, c-format msgid "received promote request" msgstr "მიღებულა დაწინაურების მოთხოვნა" -#: access/transam/xlogrecovery.c:4669 +#: access/transam/xlogrecovery.c:4689 #, 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:4690 access/transam/xlogrecovery.c:4717 access/transam/xlogrecovery.c:4747 #, 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:4699 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "თუ აღდგენა გაგრძელდება, სერვერი გამოირთვება." -#: access/transam/xlogrecovery.c:4680 +#: access/transam/xlogrecovery.c:4700 #, 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:4711 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "დაწინაურება შეუძლებელია არასაკმარისი პარამეტრების მნიშვნელობების გამო" -#: access/transam/xlogrecovery.c:4701 +#: access/transam/xlogrecovery.c:4721 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "კონფიგურაციაში საჭირო ცვლილებების შეტანის შემდეგ გადატვირთეთ სერვერი." -#: access/transam/xlogrecovery.c:4725 +#: access/transam/xlogrecovery.c:4745 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "აღდგენა შეწყვეტილია არასაკმარისი პარამეტრების მნიშვნელობების გამო" -#: access/transam/xlogrecovery.c:4731 +#: access/transam/xlogrecovery.c:4751 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "კონფიგურაციაში საჭირო ცვლილებების შეტანის შემდეგ შეგიძლიათ სერვერი დაარესტარტოთ." -#: access/transam/xlogrecovery.c:4773 +#: access/transam/xlogrecovery.c:4792 #, c-format msgid "multiple recovery targets specified" msgstr "მითითებულია აღდგენის მრავალი სამიზნე" -#: access/transam/xlogrecovery.c:4774 +#: access/transam/xlogrecovery.c:4793 #, 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:4804 #, 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:4958 #, c-format -msgid "timestamp out of range: \"%s\"" -msgstr "დროის შტამპი დიაპაზონს გარეთაა: \"%s\"" +msgid "Timestamp out of range: \"%s\"." +msgstr "დროის შტამპი დიაპაზონს გარეთაა: \"%s\"." -#: access/transam/xlogrecovery.c:4982 +#: access/transam/xlogrecovery.c:5003 #, c-format msgid "\"recovery_target_timeline\" is not a valid number." msgstr "\"recovery_target_timeline\" სწორი რიცხვი არაა." -#: access/transam/xlogutils.c:1032 +#: access/transam/xlogutils.c:1023 #, c-format msgid "could not read from WAL segment %s, offset %d: %m" msgstr "'WAL'-ის სეგმენტიდან წაკითხვის შეცდომა %s, წანაცვლება %d: %m" -#: access/transam/xlogutils.c:1039 +#: access/transam/xlogutils.c:1030 #, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" msgstr "'WAL'-ის სეგმენტიდან წაკითხვის შეცდომა %s, წანაცვლება %d: წაკითხულია %d %d-დან" @@ -3436,7 +3411,7 @@ msgstr "არქივირების წარუმატებლად 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:2843 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "თექვსმეტობითი მნიშვნელობის აღწერისთვის იხილეთ C-ის ჩასასმელი ფაილი \"ntstatus.h\"." @@ -3451,161 +3426,161 @@ msgstr "არქივაციის ბრძანება დასრუ msgid "archive command exited with unrecognized status %d" msgstr "არქივის ბრძანება უცნობი სტატუსით დასრულდა: %d" -#: backup/backup_manifest.c:254 +#: backup/backup_manifest.c:255 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "მოველოდი დროის ხაზის (%u) ბოლოს, მაგრამ ნაპოვნია დროის ხაზი %u" -#: backup/backup_manifest.c:278 +#: backup/backup_manifest.c:279 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "მოველოდი დროის ხაზის (%u) დასაწყისს, მაგრამ ნაპოვნია დროის ხაზი %u" -#: backup/backup_manifest.c:305 +#: backup/backup_manifest.c:306 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "დროის ხაზის %u დასაწყისი დროის ხაზის %u ისტორიაში აღმოჩენილი არაა" -#: backup/backup_manifest.c:356 +#: backup/backup_manifest.c:357 #, c-format msgid "could not rewind temporary file" msgstr "დროებითი ფაილის გადახვევის შეცდომა" -#: backup/basebackup.c:479 +#: backup/basebackup.c:481 #, c-format msgid "could not find any WAL files" msgstr "ვერცერთი WAL ფაილი ვერ ვიპოვე" -#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 +#: backup/basebackup.c:496 backup/basebackup.c:511 backup/basebackup.c:520 #, c-format msgid "could not find WAL file \"%s\"" msgstr "\"WAL\" ფაილის (\"%s\") მოძებნა შეუძლებელია" -#: backup/basebackup.c:560 backup/basebackup.c:585 +#: backup/basebackup.c:562 backup/basebackup.c:587 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "მოულოდნელი WAL ფაილის ზომა \"%s\"" -#: backup/basebackup.c:656 +#: backup/basebackup.c:658 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" msgstr[0] "ჯამში %lld საკონტროლო ჯამის გადამოწმების შეცდომა" msgstr[1] "ჯამში %lld საკონტროლო ჯამის გადამოწმების შეცდომა" -#: backup/basebackup.c:663 +#: backup/basebackup.c:665 #, c-format msgid "checksum verification failure during base backup" msgstr "ბაზის მარქაფისას საკონტროლო ჯამის შემოწმების შეცდომა" -#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 +#: backup/basebackup.c:735 backup/basebackup.c:744 backup/basebackup.c:755 backup/basebackup.c:772 backup/basebackup.c:781 backup/basebackup.c:790 backup/basebackup.c:805 backup/basebackup.c:822 backup/basebackup.c:831 backup/basebackup.c:843 backup/basebackup.c:867 backup/basebackup.c:881 backup/basebackup.c:892 backup/basebackup.c:903 backup/basebackup.c:916 #, c-format msgid "duplicate option \"%s\"" msgstr "დუბლიკატი პარამეტრი \"%s\"" -#: backup/basebackup.c:761 +#: backup/basebackup.c:763 #, c-format msgid "unrecognized checkpoint type: \"%s\"" msgstr "საკონტროლო წერტილის უცნობი ტიპი: \"%s\"" -#: backup/basebackup.c:793 +#: backup/basebackup.c:795 #, c-format msgid "incremental backups cannot be taken unless WAL summarization is enabled" msgstr "ინკრემენტული მარქაფების აღება შეუძლებელია, სანამ WAL შეჯამებას არ ჩართავთ" -#: backup/basebackup.c:809 +#: backup/basebackup.c:811 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d პარამეტრისთვის \"%s\" დასაშვებ დიაპაზონს (%d .. %d) გარეთაა" -#: backup/basebackup.c:854 +#: backup/basebackup.c:856 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "მანიფესტის უცნობი პარამეტრი: \"%s\"" -#: backup/basebackup.c:905 +#: backup/basebackup.c:907 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "შეკუმშვის უცხო ალგორითმი: \"%s\"" -#: backup/basebackup.c:921 +#: backup/basebackup.c:923 #, c-format msgid "unrecognized base backup option: \"%s\"" msgstr "ბაზის მარქაფის უცნობი პარამეტრი: \"%s\"" -#: backup/basebackup.c:932 +#: backup/basebackup.c:934 #, c-format msgid "manifest checksums require a backup manifest" msgstr "მანიფესტის საკონტროლო ჯამებს მარქაფი მანიფესტი ესაჭიროება" -#: backup/basebackup.c:941 +#: backup/basebackup.c:943 #, c-format msgid "target detail cannot be used without target" msgstr "სამიზნის დეტალს სამიზნის გარეშე ვერ გამოიყენებთ" -#: backup/basebackup.c:950 backup/basebackup_target.c:218 +#: backup/basebackup.c:952 backup/basebackup_target.c:218 #, c-format msgid "target \"%s\" does not accept a target detail" msgstr "სამიზნეს \"%s\" სამიზნის დეტალების მხარდაჭერა არ გააჩნია" -#: backup/basebackup.c:961 +#: backup/basebackup.c:963 #, c-format msgid "compression detail cannot be specified unless compression is enabled" msgstr "შეკუმშვის დეტალებს ვერ დააყენებთ, სანამ შეკუმშვა ჩართული არაა" -#: backup/basebackup.c:974 +#: backup/basebackup.c:976 #, c-format msgid "invalid compression specification: %s" msgstr "შეკუმშვის არასწორი სპეციფიკაცია: %s" -#: backup/basebackup.c:1024 +#: backup/basebackup.c:1026 #, c-format msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" msgstr "ინკრემენტული BASE_BACKUP-ის შესრულებამდე აუცილებელია UPLOAD_MANIFEST" -#: backup/basebackup.c:1157 backup/basebackup.c:1358 +#: backup/basebackup.c:1159 backup/basebackup.c:1360 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "ფაილის ან საქაღალდის \"%s\" პოვნა შეუძლებელია: %m" -#: backup/basebackup.c:1544 +#: backup/basebackup.c:1546 #, c-format msgid "skipping special file \"%s\"" msgstr "სპეციალური ფაილის გამოტოვება \"%s\"" -#: backup/basebackup.c:1751 +#: backup/basebackup.c:1753 #, c-format msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" msgstr "საკონტროლო ჯამის გადამოწმება შეუძლებელია ფაილში \"%s\", ბლოკი %u: წაკითხვის ბუფერის ზომა %d და გვერდის ზომა %d განსხვავდება" -#: backup/basebackup.c:1813 +#: backup/basebackup.c:1815 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" msgstr[0] "ფაილს \"%s\" სულ %d საკონტროლო ჯამის გადამოწმების ჩავარდნა აღმოაჩნდა" msgstr[1] "ფაილს \"%s\" სულ %d საკონტროლო ჯამის გადამოწმების ჩავარდნა აღმოაჩნდა" -#: backup/basebackup.c:1917 +#: backup/basebackup.c:1920 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "საკონტროლო ჯამის გამოთვლის შეცდომა ფაილში \"%s\", ბლოკი \"%u\": გამოთვლილი საკონტროლო ჯამია %X, მაგრამ მოველოდი: %X" -#: backup/basebackup.c:1924 +#: backup/basebackup.c:1927 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "ამის შემდეგ ფაილში \"%s\" შეხვედრილი საკონტროლო ჯამის გადამოწმების ჩავარდნები ანგარიშში აღარ გამოჩნდება" -#: backup/basebackup.c:2048 +#: backup/basebackup.c:2052 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "ფაილის სახელი ძალიან გრძელია tar ფორმატისთვის: \"%s\"" -#: backup/basebackup.c:2053 +#: backup/basebackup.c:2058 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "სიმბოლური ბმულის სამიზნე ძალიან გრძელია tar ფორმატისთვის: ფაილის სახელი '%s', სამიზნე '%s'" -#: backup/basebackup.c:2127 +#: backup/basebackup.c:2132 #, c-format msgid "could not read file \"%s\": read %zd of %zu" msgstr "ფაილი \"%s\" ვერ წავიკითხე: წაკითხულია %zd %zu-დან" @@ -3620,80 +3595,65 @@ msgstr "ამ აგებაში gzip შეკუმშვის მხა msgid "could not initialize compression library" msgstr "შეკუმშვის ბიბლიოთეკის ინიციალიზაციის შეცდომა" -#: backup/basebackup_incremental.c:300 +#: backup/basebackup_incremental.c:292 #, c-format msgid "manifest contains no required WAL ranges" msgstr "მანიფესტი აუცილებელ WAL შუალედებს არ შეიცავს" -#: backup/basebackup_incremental.c:355 +#: backup/basebackup_incremental.c:347 #, 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:412 #, 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:422 #, 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:433 #, 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 -#, c-format -msgid "WAL summarization is not progressing" -msgstr "" - -#: backup/basebackup_incremental.c:519 -#, 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 +#: backup/basebackup_incremental.c:437 #, c-format -msgid "still waiting for WAL summarization through %X/%X after %ld seconds" +msgid "This can happen for incremental backups on a standby if there was little activity since the previous backup." msgstr "" -#: backup/basebackup_incremental.c:535 +#: backup/basebackup_incremental.c:444 #, 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:525 #, 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:532 #, 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:536 #, c-format msgid "The first unsummarized LSN in this range is %X/%X." msgstr "" -#: backup/basebackup_incremental.c:1015 +#: backup/basebackup_incremental.c:934 #, c-format msgid "backup manifest version 1 does not support incremental backup" msgstr "მარქაფის მანიფესტის ვერსიას 1 ინკრემენტული მარქაფების მხარდაჭერა არ გააჩნია" -#: backup/basebackup_incremental.c:1033 +#: backup/basebackup_incremental.c:952 #, 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 %, but database system identifier is %" +msgstr "სისტემის იდენტიფიკატორი სარეზერვო მანიფესტში არის %, მაგრამ მონაცემთა ბაზის სისტემის იდენტიფიკატორია %" #: backup/basebackup_lz4.c:67 #, c-format @@ -3715,7 +3675,7 @@ msgstr "სერვერზე შენახული მარქაფი msgid "relative path not allowed for backup stored on server" msgstr "სერვერზე დამახსოვრებული მარქაფისთვის ფარდობითი ბილიკი დაშვებული არაა" -#: backup/basebackup_server.c:102 commands/dbcommands.c:477 commands/tablespace.c:157 commands/tablespace.c:173 commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 storage/file/copydir.c:47 +#: backup/basebackup_server.c:102 commands/dbcommands.c:478 commands/tablespace.c:157 commands/tablespace.c:173 commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:2179 storage/file/copydir.c:58 #, c-format msgid "could not create directory \"%s\": %m" msgstr "საქაღალდის (%s) შექმნის შეცდომა: %m" @@ -3725,12 +3685,12 @@ msgstr "საქაღალდის (%s) შექმნის შეცდ 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:1171 #, c-format msgid "could not access directory \"%s\": %m" msgstr "საქაღალდის (%s) წვდომის შეცდომა: %m" -#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 backup/basebackup_server.c:268 backup/basebackup_server.c:275 backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 backup/basebackup_server.c:268 backup/basebackup_server.c:275 backup/walsummary.c:312 storage/smgr/md.c:519 storage/smgr/md.c:526 storage/smgr/md.c:608 storage/smgr/md.c:630 storage/smgr/md.c:1123 #, c-format msgid "Check free disk space." msgstr "შეამოწმეთ, დისკზე ადგილი დარჩა, თუ არა." @@ -3767,671 +3727,671 @@ msgstr "long-distance რეჟიმი ვერ ჩავრთე: %s" #: backup/walsummaryfuncs.c:95 #, c-format -msgid "invalid timeline %lld" -msgstr "არასწორი დროის ხაზი %lld" +msgid "invalid timeline %" +msgstr "არასწორი დროის ხაზი %" + +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:626 tcop/postgres.c:3863 +#, c-format +msgid "--%s must be first argument" +msgstr "--%s პირველი არგუმენტი უნდა იყოს" -#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3859 +#: bootstrap/bootstrap.c:253 postmaster/postmaster.c:640 tcop/postgres.c:3877 #, c-format msgid "--%s requires a value" msgstr "--%s მნიშვნელობა სჭირდება" -#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3864 +#: bootstrap/bootstrap.c:258 postmaster/postmaster.c:645 tcop/postgres.c:3882 #, 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:296 postmaster/postmaster.c:763 postmaster/postmaster.c:776 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'.\n" -#: bootstrap/bootstrap.c:291 +#: bootstrap/bootstrap.c:305 #, c-format 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:982 #, 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:986 #, 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:990 #, 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 catalog/aclchk.c:1010 #, 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:1006 #, 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:994 #, 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:998 #, 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:1002 #, 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 -#, c-format -msgid "large object %u does not exist" -msgstr "დიდი ობიექტი %u არ არსებობს" - -#: catalog/aclchk.c:1111 +#: catalog/aclchk.c:1043 #, c-format msgid "default privileges cannot be set for columns" msgstr "სვეტებისთვის ნაგულისხმევი პრივილეგიების დაყენება შეუძლებელია" -#: catalog/aclchk.c:1147 +#: catalog/aclchk.c:1079 #, c-format msgid "permission denied to change default privileges" msgstr "ნაგულისხმევი პრივილეგიების შეცვლის წვდომა აკრძალულია" -#: catalog/aclchk.c:1265 +#: catalog/aclchk.c:1197 #, 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:1207 +#, c-format +msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON LARGE OBJECTS" +msgstr "'IN SCHEMA' პირობის გამოყენება GRANT/REVOKE ON LARGE OBJECT-ის გამოყენებისას შეუძლებელია" + +#: catalog/aclchk.c:1561 catalog/catalog.c:686 catalog/heap.c:2611 catalog/heap.c:2930 catalog/objectaddress.c:1528 catalog/pg_publication.c:570 commands/analyze.c:388 commands/copy.c:1000 commands/sequence.c:1655 commands/tablecmds.c:7751 commands/tablecmds.c:7929 commands/tablecmds.c:8130 commands/tablecmds.c:8259 commands/tablecmds.c:8388 commands/tablecmds.c:8482 commands/tablecmds.c:8585 commands/tablecmds.c:8751 commands/tablecmds.c:8781 +#: commands/tablecmds.c:8936 commands/tablecmds.c:9039 commands/tablecmds.c:9173 commands/tablecmds.c:9286 commands/tablecmds.c:14356 commands/tablecmds.c:14556 commands/tablecmds.c:14717 commands/tablecmds.c:15922 commands/tablecmds.c:18689 commands/trigger.c:947 parser/analyze.c:2660 parser/parse_relation.c:749 parser/parse_target.c:1070 parser/parse_type.c:144 parser/parse_utilcmd.c:3641 parser/parse_utilcmd.c:3681 parser/parse_utilcmd.c:3723 +#: statistics/attribute_stats.c:209 statistics/attribute_stats.c:948 utils/adt/acl.c:2921 utils/adt/ruleutils.c:2858 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "სვეტი \"%s\" ურთიერთობაში %s არ არსებობს" -#: catalog/aclchk.c:1861 +#: catalog/aclchk.c:1806 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" ინდექსია" -#: catalog/aclchk.c:1868 commands/tablecmds.c:14397 commands/tablecmds.c:17775 +#: catalog/aclchk.c:1813 commands/tablecmds.c:16079 commands/tablecmds.c:19608 #, 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:1821 catalog/objectaddress.c:1368 commands/tablecmds.c:266 commands/tablecmds.c:19572 utils/adt/acl.c:2105 utils/adt/acl.c:2135 utils/adt/acl.c:2168 utils/adt/acl.c:2204 utils/adt/acl.c:2235 utils/adt/acl.c:2266 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" მიმდევრობა არაა" -#: catalog/aclchk.c:1914 +#: catalog/aclchk.c:1859 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "მიმდევრობა \"%s\"-ს მხოლოდ USAGE, SELECT და UPDATE პრივილეგიების მხარდაჭერა გააჩნიათ" -#: catalog/aclchk.c:1931 +#: catalog/aclchk.c:1876 #, c-format msgid "invalid privilege type %s for table" msgstr "ცხრილის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:2094 +#: catalog/aclchk.c:2041 #, c-format msgid "invalid privilege type %s for column" msgstr "სვეტის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:2107 +#: catalog/aclchk.c:2054 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "მიმდევრობა \"%s\"-ს მხოლოდ SELECT სვეტის პრივილეგიების მხარდაჭერა გააჩნია" -#: catalog/aclchk.c:2297 +#: catalog/aclchk.c:2245 #, c-format msgid "language \"%s\" is not trusted" msgstr "ენა \"%s\" სანდო არაა" -#: catalog/aclchk.c:2299 +#: catalog/aclchk.c:2247 #, 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:2398 #, c-format msgid "cannot set privileges of array types" msgstr "მასივის ტიპების პრივილეგიის დაყენება შეუძლებელია" -#: catalog/aclchk.c:2452 +#: catalog/aclchk.c:2399 #, c-format msgid "Set the privileges of the element type instead." msgstr "ნაცვლად დააყენეთ ელემენტის ტიპის პრივილეგიები." -#: catalog/aclchk.c:2456 +#: catalog/aclchk.c:2403 #, c-format msgid "cannot set privileges of multirange types" msgstr "მრავალშუალედიანი ტიპების პრივილეგიების დაყენება შეუძლებელია" -#: catalog/aclchk.c:2457 +#: catalog/aclchk.c:2404 #, c-format msgid "Set the privileges of the range type instead." msgstr "სანაცვლოდ შუალედის ტიპის პრივილეგიების დაყენება." -#: catalog/aclchk.c:2464 catalog/objectaddress.c:1629 -#, c-format -msgid "\"%s\" is not a domain" -msgstr "\"%s\" დომენი არაა" - -#: catalog/aclchk.c:2650 +#: catalog/aclchk.c:2587 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "პრივილეგიის უცნობი ტიპი \"%s\"" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2654 #, c-format msgid "permission denied for aggregate %s" msgstr "წვდომა აკრძალულია აგრეგატზე: \"%s\"" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2657 #, c-format msgid "permission denied for collation %s" msgstr "წვდომა აკრძალულია კოლაციაზე: \"%s\"" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2660 #, c-format msgid "permission denied for column %s" msgstr "წვდომა აკრძალულია სვეტზე: \"%s\"" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2663 #, c-format msgid "permission denied for conversion %s" msgstr "წვდომა აკრძალულია გადაყვანაზე: \"%s\"" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2666 #, c-format msgid "permission denied for database %s" msgstr "წვდომა აკრძალულია აგრეგატზე: \"%s\"" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2669 #, c-format msgid "permission denied for domain %s" msgstr "წვდომა აკრძალულია დომენზე: \"%s\"" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2672 #, c-format msgid "permission denied for event trigger %s" msgstr "წვდომა აკრძალულია მოვლენის ტრიგერზე: \"%s\"" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2675 #, c-format msgid "permission denied for extension %s" msgstr "წვდომა აკრძალულია გაფართოებაზე: \"%s\"" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2678 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "წვდომა აკრძალულია გარე მონაცემების გადამტანზე: \"%s\"" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2681 #, c-format msgid "permission denied for foreign server %s" msgstr "წვდომა აკრძალულია გარე სერვერზე: \"%s\"" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2684 #, c-format msgid "permission denied for foreign table %s" msgstr "წვდომა აკრძალულია გარე ცხრილზე: \"%s\"" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2687 #, c-format msgid "permission denied for function %s" msgstr "წვდომა აკრძალულია ფუნქციაზე: \"%s\"" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2690 #, c-format msgid "permission denied for index %s" msgstr "წვდომა აკრძალულია ინდექზე: \"%s\"" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2693 #, c-format msgid "permission denied for language %s" msgstr "წვდომა აკრძალულია ენაზე: \"%s\"" -#: catalog/aclchk.c:2759 +#: catalog/aclchk.c:2696 #, c-format msgid "permission denied for large object %s" msgstr "წვდომა აკრძალულია დიდ ობიექტზე: \"%s\"" -#: catalog/aclchk.c:2762 +#: catalog/aclchk.c:2699 #, c-format msgid "permission denied for materialized view %s" msgstr "წვდომა აკრძალულია მატერიალიზებულ ხედზე: \"%s\"" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2702 #, c-format msgid "permission denied for operator class %s" msgstr "წვდომა აკრძალულია ოპერატორის კლასზე: \"%s\"" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2705 #, c-format msgid "permission denied for operator %s" msgstr "წვდომა აკრძალულია ოპერატორზე: \"%s\"" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2708 #, c-format msgid "permission denied for operator family %s" msgstr "წვდომა აკრძალულია ოპერატორის ოჯახზე: \"%s\"" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2711 #, c-format msgid "permission denied for parameter %s" msgstr "წვდომა აკრძალულია პარამეტრზე: \"%s\"" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2714 #, c-format msgid "permission denied for policy %s" msgstr "წვდომა აკრძალულია წესზე: \"%s\"" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2717 #, c-format msgid "permission denied for procedure %s" msgstr "წვდომა აკრძალულია პროცედურაზე: \"%s\"" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for publication %s" msgstr "წვდომა აკრძალულია პუბლიკაციაზე: \"%s\"" -#: catalog/aclchk.c:2786 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for routine %s" msgstr "წვდომა აკრძალულია ქვეპროგრამაზე: \"%s\"" -#: catalog/aclchk.c:2789 +#: catalog/aclchk.c:2726 #, 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:2729 commands/sequence.c:654 commands/sequence.c:880 commands/sequence.c:922 commands/sequence.c:963 commands/sequence.c:1753 #, c-format msgid "permission denied for sequence %s" msgstr "წვდომა აკრძალულია მიმდევრობაზე: \"%s\"" -#: catalog/aclchk.c:2795 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for statistics object %s" msgstr "წვდომა აკრძალულია სტატისტიკის ობიექტზე: \"%s\"" -#: catalog/aclchk.c:2798 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for subscription %s" msgstr "წვდომა აკრძალულია გამოწერაზე: \"%s\"" -#: catalog/aclchk.c:2801 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for table %s" msgstr "წვდომა აკრძალულია ცხრილზე: \"%s\"" -#: catalog/aclchk.c:2804 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for tablespace %s" msgstr "წვდომა აკრძალულია ცხრილების სივრცეზე: \"%s\"" -#: catalog/aclchk.c:2807 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for text search configuration %s" msgstr "წვდომა აკრძალულია ტექსტის ძებნის კონფიგურაციაზე: \"%s\"" -#: catalog/aclchk.c:2810 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for text search dictionary %s" msgstr "წვდომა აკრძალულია ტექსტის ძებნის ლექსიკონზე: \"%s\"" -#: catalog/aclchk.c:2813 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for type %s" msgstr "წვდომა აკრძალულია ტიპტზე: \"%s\"" -#: catalog/aclchk.c:2816 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for view %s" msgstr "წვდომა აკრძალულია ხედზე: \"%s\"" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2789 #, c-format msgid "must be owner of aggregate %s" msgstr "უნდა ბრძანდებოდეთ აგრეგატის მფლობელი: %s" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2792 #, c-format msgid "must be owner of collation %s" msgstr "უნდა ბრძანდებოდეთ კოლაციის მფლობელი: %s" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2795 #, c-format msgid "must be owner of conversion %s" msgstr "უნდა ბრძანდებოდეთ გადაყვანის მფლობელი: %s" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2798 #, c-format msgid "must be owner of database %s" msgstr "უნდა ბრძანდებოდეთ ბაზის მფლობელი: %s" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2801 #, c-format msgid "must be owner of domain %s" msgstr "უნდა ბრძანდებოდეთ დომენის მფლობელი: %s" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2804 #, c-format msgid "must be owner of event trigger %s" msgstr "უნდა ბრძანდებოდეთ მოვლენის ტრიგერის მფლობელი: %s" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2807 #, c-format msgid "must be owner of extension %s" msgstr "უნდა ბრძანდებოდეთ გაფართოების მფლობელი: %s" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2810 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "უნდა ბრძანდებოდეთ გარე ინფორმაციის გადამტანის მფლობელი: %s" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2813 #, c-format msgid "must be owner of foreign server %s" msgstr "უნდა ბრძანდებოდეთ გარე სერვერის მფლობელი: %s" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2816 #, c-format msgid "must be owner of foreign table %s" msgstr "უნდა ბრძანდებოდეთ გარე ცხრილის მფლობელი: %s" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2819 #, c-format msgid "must be owner of function %s" msgstr "უნდა ბრძანდებოდეთ ფუნქციის მფლობელი: %s" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2822 #, c-format msgid "must be owner of index %s" msgstr "უნდა ბრძანდებოდეთ ინდექსის მფლობელი: %s" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2825 #, c-format msgid "must be owner of language %s" msgstr "უნდა ბრძანდებოდეთ ენის მფლობელი: %s" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2828 #, c-format msgid "must be owner of large object %s" msgstr "უნდა ბრძანდებოდეთ დიდი ობიექტის მფლობელი: %s" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2831 #, c-format msgid "must be owner of materialized view %s" msgstr "უნდა ბრძანდებოდეთ მატერიალიზებული ხედის მფლობელი: %s" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2834 #, c-format msgid "must be owner of operator class %s" msgstr "უნდა ბრძანდებოდეთ ოპერატორის კლასის მფლობელი: %s" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2837 #, c-format msgid "must be owner of operator %s" msgstr "უნდა ბრძანდებოდეთ ოპერატორის მფლობელი: %s" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2840 #, c-format msgid "must be owner of operator family %s" msgstr "უნდა ბრძანდებოდეთ ოპერატორის ოჯახის მფლობელი: %s" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2843 #, c-format msgid "must be owner of procedure %s" msgstr "უნდა ბრძანდებოდეთ პროცედურის მფლობელი: %s" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2846 #, c-format msgid "must be owner of publication %s" msgstr "უნდა ბრძანდებოდეთ პუბლიკაციისმფლობელი: %s" -#: catalog/aclchk.c:2912 +#: catalog/aclchk.c:2849 #, c-format msgid "must be owner of routine %s" msgstr "უნდა ბრძანდებოდეთ ქვეპროგრამის მფლობელი: %s" -#: catalog/aclchk.c:2915 +#: catalog/aclchk.c:2852 #, c-format msgid "must be owner of sequence %s" msgstr "უნდა ბრძანდებოდეთ მიმდევრობის მფლობელი: %s" -#: catalog/aclchk.c:2918 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of subscription %s" msgstr "უნდა ბრძანდებოდეთ გამოწერის მფლობელი: %s" -#: catalog/aclchk.c:2921 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of table %s" msgstr "უნდა ბრძანდებოდეთ ცხრილის მფლობელი: %s" -#: catalog/aclchk.c:2924 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of type %s" msgstr "უნდა ბრძანდებოდეთ ტიპის მფლობელი: %s" -#: catalog/aclchk.c:2927 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of view %s" msgstr "უნდა ბრძანდებოდეთ ხედის მფლობელი: %s" -#: catalog/aclchk.c:2930 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of schema %s" msgstr "უნდა ბრძანდებოდეთ სქემის მფლობელი: %s" -#: catalog/aclchk.c:2933 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of statistics object %s" msgstr "უნდა ბრძანდებოდეთ სტატისტიკის ობიექტის მფლობელი: %s" -#: catalog/aclchk.c:2936 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of tablespace %s" msgstr "უნდა ბრძანდებოდეთ ცხრილების სივრცის მფლობელი: %s" -#: catalog/aclchk.c:2939 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of text search configuration %s" msgstr "უნდა ბრძანდებოდეთ ტექსტის ძებნის კონფიგურაციის მფლობელი: %s" -#: catalog/aclchk.c:2942 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of text search dictionary %s" msgstr "უნდა ბრძანდებოდეთ ტექსტის ძებნის ლექსიკონის მფლობელი: %s" -#: catalog/aclchk.c:2956 +#: catalog/aclchk.c:2893 #, c-format msgid "must be owner of relation %s" msgstr "უნდა ბრძანდებოდეთ ურთიერთობის მფლობელი: %s" -#: catalog/aclchk.c:3002 +#: catalog/aclchk.c:2939 #, 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 -#, 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:3173 catalog/aclchk.c:3192 #, 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:3230 catalog/aclchk.c:3293 catalog/aclchk.c:3932 #, c-format msgid "relation with OID %u does not exist" msgstr "ურთიერთობა OID-ით %u არ არსებობს" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3478 #, 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:3557 catalog/objectaddress.c:1055 catalog/pg_largeobject.c:125 libpq/be-fsstubs.c:323 storage/large_object/inv_api.c:247 +#, c-format +msgid "large object %u does not exist" +msgstr "დიდი ობიექტი %u არ არსებობს" + +#: catalog/aclchk.c:3651 commands/collationcmds.c:849 commands/publicationcmds.c:1846 #, 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:3725 catalog/aclchk.c:3752 catalog/aclchk.c:3781 utils/cache/typcache.c:473 utils/cache/typcache.c:528 #, c-format msgid "type with OID %u does not exist" msgstr "ტიპი OID-ით %u არ არსებობს" -#: catalog/catalog.c:447 +#: catalog/catalog.c:506 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "ურთიერთობაში \"%s\" გამოუყენებელი OID-ების ძებნა ჯერ კიდევ მიმდინარეობს" -#: catalog/catalog.c:449 +#: catalog/catalog.c:508 #, 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-ი ნაპოვნი არაა." +msgid "OID candidates have been checked % time, but no unused OID has been found yet." +msgid_plural "OID candidates have been checked % times, but no unused OID has been found yet." +msgstr[0] "OID-ის კანდიდატები %-ჯერ შემოწმდა, მაგრამ გამოუყენებელი OID-ი ნაპოვნი არაა." +msgstr[1] "OID-ის კანდიდატები %-ჯერ შემოწმდა, მაგრამ გამოუყენებელი OID-ი ნაპოვნი არაა." -#: catalog/catalog.c:474 +#: catalog/catalog.c:533 #, 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 ცდის შემდეგ" +msgid "new OID has been assigned in relation \"%s\" after % retry" +msgid_plural "new OID has been assigned in relation \"%s\" after % retries" +msgstr[0] "ახალი OID მინიჭებულია ურთიერთობაში \"%s\" % ცდის შემდეგ" +msgstr[1] "ახალი OID მინიჭებულია ურთიერთობაში \"%s\" % ცდის შემდეგ" -#: catalog/catalog.c:607 catalog/catalog.c:674 +#: catalog/catalog.c:664 catalog/catalog.c:731 #, c-format msgid "must be superuser to call %s()" msgstr "%s()-ის გამოსაძახებლად ზემომხმარებელი უნდა იყოთ" -#: catalog/catalog.c:616 +#: catalog/catalog.c:673 #, 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:678 parser/parse_utilcmd.c:2426 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "ინდექსი %s ცხრილს \"%s\" არ მიეკუთვნება" -#: catalog/catalog.c:638 +#: catalog/catalog.c:695 #, c-format msgid "column \"%s\" is not of type oid" msgstr "სვეტი \"%s\" oild-ის ტიპი არაა" -#: catalog/catalog.c:645 +#: catalog/catalog.c:702 #, 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 +4416,7 @@ msgstr "%s დამოკიდებულია %s -ზე" 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 +4436,8 @@ msgstr[1] "" 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:1519 commands/tablecmds.c:16673 commands/tablespace.c:460 commands/user.c:1302 commands/vacuum.c:224 commands/view.c:441 executor/execExprInterp.c:5211 executor/execExprInterp.c:5219 libpq/auth.c:312 replication/logical/applyparallelworker.c:1041 replication/slot.c:1594 replication/syncrep.c:1079 storage/aio/method_io_uring.c:191 storage/lmgr/deadlock.c:1137 +#: storage/lmgr/proc.c:1526 utils/misc/guc.c:3166 utils/misc/guc.c:3207 utils/misc/guc.c:3282 utils/misc/guc.c:6823 utils/misc/guc.c:6857 utils/misc/guc.c:6891 utils/misc/guc.c:6934 utils/misc/guc.c:6976 #, c-format msgid "%s" msgstr "%s" @@ -4499,647 +4459,692 @@ msgid_plural "drop cascades to %d other objects" 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:2205 +#, c-format +msgid "transition table \"%s\" cannot be referenced in a persistent object" +msgstr "გარდასვლის ცხრილზე \"%s\" მიმართვა შეუძლებელია მუდმივი ობიექტიდან" + +#: catalog/dependency.c:2390 parser/parse_relation.c:3513 parser/parse_relation.c:3523 statistics/attribute_stats.c:221 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "სვეტი \"%d\" ურთიერთობაში %s არ არსებობს" -#: catalog/heap.c:325 +#: catalog/heap.c:321 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "\"%s.%s\"-ის შექმნის წვდომა აკრძალულია" -#: catalog/heap.c:327 +#: catalog/heap.c:323 #, c-format 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:463 commands/tablecmds.c:2562 commands/tablecmds.c:3014 commands/tablecmds.c:7361 #, c-format msgid "tables can have at most %d columns" msgstr "ცხრილებს მაქსიმუმ %d სვეტი შეიძლება ჰქონდეს" -#: catalog/heap.c:485 commands/tablecmds.c:7440 +#: catalog/heap.c:481 commands/tablecmds.c:7663 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "სვეტის სახელი კონფლიქტშია სისტემური სვეტის სახელთან: \"%s\"" -#: catalog/heap.c:501 +#: catalog/heap.c:497 #, c-format msgid "column name \"%s\" specified more than once" msgstr "სვეტის სახელი ერთზე მეტჯერაა მითითებული: %s" #. translator: first %s is an integer not a name -#: catalog/heap.c:579 +#: catalog/heap.c:575 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "დანაყოფის საკვანძო სვეტის %s ფსევდო ტიპია %s" -#: catalog/heap.c:584 +#: catalog/heap.c:580 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "სვეტს \"%s\" გააჩნია ფსევდო ტიპი \"%s\"" -#: catalog/heap.c:615 +#: catalog/heap.c:595 +#, c-format +msgid "virtual generated column \"%s\" cannot have a domain type" +msgstr "ვირტუალურ გენერირებულ სვეტს \"%s\" დომენის ტიპი ვერ ექნება" + +#: catalog/heap.c:622 #, 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:670 +#: catalog/heap.c:677 #, c-format 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:683 commands/createas.c:200 commands/createas.c:513 #, 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:1169 catalog/index.c:901 commands/createas.c:409 commands/tablecmds.c:4296 #, c-format msgid "relation \"%s\" already exists" msgstr "ურთიერთობა \"%s\" უკვე არსებობს" -#: catalog/heap.c:1177 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 +#: catalog/heap.c:1185 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:1205 commands/typecmds.c:1431 commands/typecmds.c:1611 commands/typecmds.c:2586 #, c-format msgid "type \"%s\" already exists" msgstr "ტიპი \"%s\" უკვე არსებობს" -#: catalog/heap.c:1178 +#: catalog/heap.c:1186 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "ურთიერთობას იგივე სახელის მქონე ტიპი აქვს ასოცირებული, ასე რომ თქვენ უნდა გამოიყენოთ სახელი, რომელიც არც ერთ არსებულ ტიპთან კონფლიქტში არ შედის." -#: catalog/heap.c:1218 +#: catalog/heap.c:1226 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "toast relfilenumber-ის მნიშვნელობა ბინარული განახლების დროს დაყენებული არაა" -#: catalog/heap.c:1229 +#: catalog/heap.c:1237 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "ბინარული განახლების რეჟიმში pg_class-ის დროებითი მეხსიერების OID-ის მნიშვნელობა დაყენებული არაა" -#: catalog/heap.c:1239 +#: catalog/heap.c:1247 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "relfilenumber-ის მნიშვნელობა ბინარული განახლების დროს დაყენებული არაა" -#: catalog/heap.c:2121 +#: catalog/heap.c:2192 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "დაყოფილი ცხრილს (\"%s\") NO INHERIT შეზღუდვას ვერ დაამატებთ" -#: catalog/heap.c:2393 +#: catalog/heap.c:2515 #, 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:2616 catalog/heap.c:2936 +#, c-format +msgid "cannot add not-null constraint on system column \"%s\"" +msgstr "არანულოვანი შეზღუდვის დამატება შეუძლებელია სისტემურ სვეტზე \"%s\"" + +#: catalog/heap.c:2643 catalog/heap.c:2769 catalog/heap.c:3020 catalog/index.c:915 catalog/pg_constraint.c:1003 commands/tablecmds.c:9796 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "შეზღუდვა \"%s\" ურთიერთობისთვის \"%s\" უკვე არსებობს" -#: catalog/heap.c:2572 +#: catalog/heap.c:2776 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია არა-მემკვიდრეობით მიღებულ შეზღუდვასთან ურთიერთობაზე \"%s\"" -#: catalog/heap.c:2583 +#: catalog/heap.c:2787 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია მემკვიდრეობით მიღებულ შეზღუდვასთან ურთიერთობაზე \"%s\"" -#: catalog/heap.c:2593 +#: catalog/heap.c:2797 #, 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:2809 +#, c-format +msgid "constraint \"%s\" conflicts with NOT ENFORCED constraint on relation \"%s\"" +msgstr "შეზღუდვა \"%s\" კონფლიქტშია შეზღუდვასთან NOT ENFORCED ურთიერთობაზე \"%s\"" + +#: catalog/heap.c:2814 #, 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:2838 catalog/pg_constraint.c:781 catalog/pg_constraint.c:1132 commands/tablecmds.c:3179 commands/tablecmds.c:3499 commands/tablecmds.c:7286 commands/tablecmds.c:7967 commands/tablecmds.c:17516 commands/tablecmds.c:17698 #, c-format msgid "too many inheritance parents" msgstr "მეტისმეტად ბევრი მემკვიდრეობის მშობლები" -#: catalog/heap.c:2708 +#: catalog/heap.c:2955 parser/parse_utilcmd.c:2634 +#, c-format +msgid "conflicting NO INHERIT declaration for not-null constraint on column \"%s\"" +msgstr "" + +#: catalog/heap.c:2969 +#, c-format +msgid "conflicting not-null constraint names \"%s\" and \"%s\"" +msgstr "ურთიერთგამომრიცხავი არანულოვანი შეზღუდვის სახელები \"%s\" და \"%s\"" + +#: catalog/heap.c:2999 +#, c-format +msgid "cannot define not-null constraint on column \"%s\" with NO INHERIT" +msgstr "არანულოვანი შეზღუდვების აღწერა სვეტზე \"%s\" შეუძლებელია NO INHERIT-თან ერთად" + +#: catalog/heap.c:3001 +#, c-format +msgid "The column has an inherited not-null constraint." +msgstr "სვეტს მემკვიდრეობით მიღებული არანულოვანი შეზღუდვა გააჩნია." + +#: catalog/heap.c:3191 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "სვეტის გენერაციის გამოსახულებაში გენერირებული სვეტის (%s) გამოყენება შეუძლებელია" -#: catalog/heap.c:2710 +#: catalog/heap.c:3193 #, c-format msgid "A generated column cannot reference another generated column." msgstr "გენერირებული სვეტი სხვა გენერირებული სვეტის მიმართვა ვერ იქნება." -#: catalog/heap.c:2716 +#: catalog/heap.c:3199 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "" -#: catalog/heap.c:2717 +#: catalog/heap.c:3200 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "ამან შეიძლება დაგენერირებული სვეტის თავის საკუთარ მნიშვნელობაზე დამოკიდებულება გამოიწვიოს." -#: catalog/heap.c:2772 +#: catalog/heap.c:3255 #, c-format msgid "generation expression is not immutable" msgstr "თაობის გამოსახულება უცვლელი არაა" -#: catalog/heap.c:2800 rewrite/rewriteHandler.c:1281 +#: catalog/heap.c:3283 rewrite/rewriteHandler.c:1285 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "სვეტის \"%s\" ტიპია %s, მაგრამ ნაგულისხმევი გამოსახულების ტიპია %s" -#: catalog/heap.c: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:3288 commands/prepare.c:335 parser/analyze.c:2991 parser/parse_target.c:595 parser/parse_target.c:885 parser/parse_target.c:895 rewrite/rewriteHandler.c:1290 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "საჭიროა გამოსახულების გარდაქმნა ან გადაყვანა." -#: catalog/heap.c:2852 +#: catalog/heap.c:3335 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "შემოწმების შეზღუდვაში მხოლოდ %s ცხრილზე მიმართვა შეიძლება" -#: catalog/heap.c:3158 +#: catalog/heap.c:3641 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "\"ON COMMIT\"-ისა და გარე გასაღების წყვილი მხარდაუჭერელია" -#: catalog/heap.c:3159 +#: catalog/heap.c:3642 #, 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:3647 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "გარე გასაღების შეზღუდვაში მიმართული ცხრილის შემცველობის დაცარიელება შეუძლებელია" -#: catalog/heap.c:3165 +#: catalog/heap.c:3648 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "ცხრილი \"%s\" მიუთითებს \"%s\"." -#: catalog/heap.c:3167 +#: catalog/heap.c:3650 #, 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:220 parser/parse_utilcmd.c:2331 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "ცხრილისთვის \"%s\" ერთზე მეტი ძირითადი გასაღები დაუშვებელია" -#: catalog/index.c:233 +#: catalog/index.c:234 #, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" msgstr "ძირითად გასაღებებს NULLS NOT DISTINCT ინდექსების გამოყენება არ შეუძლიათ" -#: catalog/index.c:250 +#: catalog/index.c:251 #, c-format msgid "primary keys cannot be expressions" msgstr "ძირითადი გასაღები გამოსახულება არ შეიძლება იყოს" -#: catalog/index.c:267 +#: catalog/index.c:268 #, c-format 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:800 catalog/index.c:1921 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "სისტემური კატალოგების ცხრილებზე მომხმარებლის მიერ აღწერილი ინდექსების დადება შეუძლებელია" -#: catalog/index.c:838 +#: catalog/index.c:840 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "არადეტერმინისტული კოლაციები ოპერატორის კლასისთვის \"%s\" მხარდაჭერილი არაა" -#: catalog/index.c:853 +#: catalog/index.c:855 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "სისტემური კატალოგების ცხრილებზე ინდექსების პარალელური შექმნა მხარდაუჭერელია" -#: catalog/index.c:862 catalog/index.c:1330 +#: catalog/index.c:864 catalog/index.c:1333 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "პარალელური ინდექსის შექმნა გამორიცხვის შეზღუდვებისთვის მხარდაჭერილი არაა" -#: catalog/index.c:871 +#: catalog/index.c:873 #, c-format 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:893 commands/createas.c:424 commands/sequence.c:159 parser/parse_utilcmd.c:210 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "შეერთება \"%s\" უკვე არსებობს, გამოტოვება" -#: catalog/index.c:941 +#: catalog/index.c:943 #, c-format 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:953 utils/cache/relcache.c:3795 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "index relfilenumber-ის მნიშვნელობა ბინარული განახლების დროს დაყენებული არაა" -#: catalog/index.c:2213 +#: catalog/index.c:2222 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY ტრანზაქციის პირველი ქმედება უნდა იყოს" -#: catalog/index.c:3669 +#: catalog/index.c:3729 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების რეინდექსი შეუძლებელია" -#: catalog/index.c:3680 commands/indexcmds.c:3648 +#: catalog/index.c:3740 commands/indexcmds.c:3757 #, 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:3756 commands/indexcmds.c:3635 commands/indexcmds.c:3781 commands/tablecmds.c:3703 #, c-format msgid "cannot move system relation \"%s\"" msgstr "სისტემური ურთიერთობის გაადაადგილება არ შეიძლება: \"%s\"" -#: catalog/index.c:3833 +#: catalog/index.c:3893 #, c-format msgid "index \"%s\" was reindexed" msgstr "\"%s\"-ის რეინდექსი დასრულდა" -#: catalog/index.c:3999 +#: catalog/index.c:4059 #, 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:5780 #, 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:1447 statistics/stat_utils.c:231 #, 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:1460 parser/parse_relation.c:1468 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:1804 commands/extension.c:1810 #, 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:866 parser/parse_target.c:1262 #, 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:19418 gram.y:19458 parser/parse_expr.c:873 parser/parse_target.c:1269 #, 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:1464 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:1376 commands/policy.c:93 commands/policy.c:373 commands/tablecmds.c:260 commands/tablecmds.c:302 commands/tablecmds.c:2387 commands/tablecmds.c:14491 #, 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:1383 commands/tablecmds.c:272 commands/tablecmds.c:19577 commands/view.c:113 #, 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:1390 commands/matview.c:201 commands/tablecmds.c:278 commands/tablecmds.c:19582 #, 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:1397 commands/tablecmds.c:296 commands/tablecmds.c:19587 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" გარე ცხრილი არაა" -#: catalog/objectaddress.c:1433 +#: catalog/objectaddress.c:1438 #, c-format msgid "must specify relation and object name" msgstr "ურთიერთობის და ობიექტის სახელის მითითება აუცილებელია" -#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 +#: catalog/objectaddress.c:1514 catalog/objectaddress.c:1567 #, c-format msgid "column name must be qualified" msgstr "სვეტს სახელი სრულად უნდა მიუთითოთ" -#: catalog/objectaddress.c:1581 +#: catalog/objectaddress.c:1586 #, c-format 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:1623 commands/functioncmds.c:132 commands/tablecmds.c:288 commands/typecmds.c:278 commands/typecmds.c:3834 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:801 utils/adt/acl.c:4558 #, c-format msgid "type \"%s\" does not exist" msgstr "ტიპი \"%s\" არ არსებობს" -#: catalog/objectaddress.c:1737 +#: catalog/objectaddress.c:1634 +#, c-format +msgid "\"%s\" is not a domain" +msgstr "\"%s\" დომენი არაა" + +#: catalog/objectaddress.c:1742 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "ოპერატორი %d (%s, %s) %s-დან არ არსებობს" -#: catalog/objectaddress.c:1768 +#: catalog/objectaddress.c:1773 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "ფუნქცია %d (%s, %s) %s-დან არ არსებობს" -#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 +#: catalog/objectaddress.c:1824 catalog/objectaddress.c:1850 #, c-format 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:1839 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\" არ არსებობს" -#: catalog/objectaddress.c:1901 +#: catalog/objectaddress.c:1906 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "პუბლიკაციის ურთიერთობა %s პუბლიკაციაში %s არ არსებობ" -#: catalog/objectaddress.c:1948 +#: catalog/objectaddress.c:1953 #, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" msgstr "პუბლიკაციის სქემა %s პუბლიკაციაში %s არ არსებობს" -#: catalog/objectaddress.c:2006 +#: catalog/objectaddress.c:2014 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "ნაგულისხმევი ACL ობიექტის უცნობი ტიპი \"%c\"" -#: catalog/objectaddress.c:2007 +#: catalog/objectaddress.c:2015 #, c-format -msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -msgstr "ობიექტის სწორი ტიპებია \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." +msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." +msgstr "ობიექტის სწორი ტიპებია \"%c\", \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:2058 +#: catalog/objectaddress.c:2067 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "ნაგულისხმევი ACL მომხმარებლისთვის %s სქემაში %s %s-ზე არ არსებობს" -#: catalog/objectaddress.c:2063 +#: catalog/objectaddress.c:2072 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "ნაგულისხმევი ACL მომხმარებლისთვის \"%s\" \"%s\"-ზე არ არსებობს" -#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2098 catalog/objectaddress.c:2155 catalog/objectaddress.c:2210 #, c-format msgid "name or argument lists may not contain nulls" msgstr "სახელი ან არგუმენტი არ შეიძლება ნულოვან სიმბოლოს შეიცავდეს" -#: catalog/objectaddress.c:2123 +#: catalog/objectaddress.c:2132 #, c-format msgid "unsupported object type \"%s\"" msgstr "ობიექტის მხარდაუჭერელი ტიპი: \"%s\"" -#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 +#: catalog/objectaddress.c:2151 catalog/objectaddress.c:2168 catalog/objectaddress.c:2233 catalog/objectaddress.c:2317 #, c-format msgid "name list length must be exactly %d" msgstr "სახელების სიის სიგრძე ზუსტად %d უნდა იყოს" -#: catalog/objectaddress.c:2163 +#: catalog/objectaddress.c:2172 #, c-format msgid "large object OID may not be null" msgstr "დიდი ობიექტის OID ნულის ტოლი არ შეიძლება იყოს" -#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 catalog/objectaddress.c:2249 +#: catalog/objectaddress.c:2181 catalog/objectaddress.c:2251 catalog/objectaddress.c:2258 #, c-format msgid "name list length must be at least %d" msgstr "სახელების სიის სიგრძე ყველაზე ცოტა %d უნდა იყოს" -#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 +#: catalog/objectaddress.c:2244 catalog/objectaddress.c:2265 #, c-format msgid "argument list length must be exactly %d" msgstr "არგუმენტების სიის სიგრძე ზუსტად %d უნდა იყოს" -#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2479 libpq/be-fsstubs.c:334 #, c-format msgid "must be owner of large object %u" msgstr "უნდა ბრძანდებოდეთ დიდი ობიექტის მფლობელი: %u" -#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 +#: catalog/objectaddress.c:2494 commands/functioncmds.c:1578 #, c-format msgid "must be owner of type %s or type %s" msgstr "უნდა ბრძანდებოდეთ მფლობელი ტიპისა %s ან %s" -#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 catalog/objectaddress.c:2527 +#: catalog/objectaddress.c:2521 catalog/objectaddress.c:2530 catalog/objectaddress.c:2536 #, c-format msgid "permission denied" msgstr "წვდომა აკრძალულია" -#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 +#: catalog/objectaddress.c:2522 catalog/objectaddress.c:2531 #, c-format msgid "The current user must have the %s attribute." msgstr "მიმდინარე მომხმარებელს %s ატრიბუტი აუცილებლად უნდა ჰქონდეს." -#: catalog/objectaddress.c:2528 +#: catalog/objectaddress.c:2537 #, c-format msgid "The current user must have the %s option on role \"%s\"." msgstr "მიმდინარე მომხმარებელს უნდა ჰქონდეს %s პარამეტრი როლზე \"%s\"." -#: catalog/objectaddress.c:2542 +#: catalog/objectaddress.c:2551 #, c-format msgid "must be superuser" msgstr "უნდა იყოს ზემომხმარებელი" -#: catalog/objectaddress.c:2611 +#: catalog/objectaddress.c:2620 #, c-format msgid "unrecognized object type \"%s\"" msgstr "ობიექტის უცნობი ტიპი: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2903 +#: catalog/objectaddress.c:2937 #, c-format msgid "column %s of %s" msgstr "სვეტი %s %s-ზე" -#: catalog/objectaddress.c:2918 +#: catalog/objectaddress.c:2952 #, c-format msgid "function %s" msgstr "ფუნქცია %s" -#: catalog/objectaddress.c:2931 +#: catalog/objectaddress.c:2965 #, c-format msgid "type %s" msgstr "ტიპი %s" -#: catalog/objectaddress.c:2968 +#: catalog/objectaddress.c:3002 #, c-format msgid "cast from %s to %s" msgstr "%s-დან %s" -#: catalog/objectaddress.c:3001 +#: catalog/objectaddress.c:3035 #, c-format msgid "collation %s" msgstr "კოლაცია %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3032 +#: catalog/objectaddress.c:3066 #, c-format msgid "constraint %s on %s" msgstr "%s-ის შეზღუდვა %s-ზე" -#: catalog/objectaddress.c:3038 +#: catalog/objectaddress.c:3072 #, c-format msgid "constraint %s" msgstr "შეზღუდვა %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3104 #, c-format msgid "conversion %s" msgstr "გარდაქმნა: %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3092 +#: catalog/objectaddress.c:3126 #, c-format msgid "default value for %s" msgstr "%s-ის ნაგულისხმევი მნიშვნელობა" -#: catalog/objectaddress.c:3103 +#: catalog/objectaddress.c:3137 #, c-format msgid "language %s" msgstr "ენა %s" -#: catalog/objectaddress.c:3111 +#: catalog/objectaddress.c:3145 #, c-format msgid "large object %u" msgstr "დიდი ობიექტი %u" -#: catalog/objectaddress.c:3124 +#: catalog/objectaddress.c:3158 #, c-format msgid "operator %s" msgstr "ოპერატორი %s" -#: catalog/objectaddress.c:3161 +#: catalog/objectaddress.c:3195 #, c-format msgid "operator class %s for access method %s" msgstr "ოპერატორის კლასის %s წვდომის მეთოდისთვის %s" -#: catalog/objectaddress.c:3189 +#: catalog/objectaddress.c:3223 #, c-format msgid "access method %s" msgstr "წვდომის მეთოდი: %s" @@ -5148,7 +5153,7 @@ msgstr "წვდომის მეთოდი: %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3238 +#: catalog/objectaddress.c:3278 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "ოპერატორი %d (%s, %s) of %s: %s" @@ -5157,236 +5162,241 @@ msgstr "ოპერატორი %d (%s, %s) of %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3295 +#: catalog/objectaddress.c:3343 #, 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:3397 #, 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:3443 #, c-format msgid "trigger %s on %s" msgstr "ტრიგერი %s %s-ზე" -#: catalog/objectaddress.c:3413 +#: catalog/objectaddress.c:3463 #, c-format msgid "schema %s" msgstr "სქემა %s" -#: catalog/objectaddress.c:3441 +#: catalog/objectaddress.c:3491 #, c-format msgid "statistics object %s" msgstr "სტატისტიკის ობიექტი %s" -#: catalog/objectaddress.c:3472 +#: catalog/objectaddress.c:3522 #, c-format msgid "text search parser %s" msgstr "ტექსტის ძებნის დამმუშავებელი \"%s\"" -#: catalog/objectaddress.c:3503 +#: catalog/objectaddress.c:3553 #, c-format msgid "text search dictionary %s" msgstr "ტექსტის ძებნის ლექსიკონი %s" -#: catalog/objectaddress.c:3534 +#: catalog/objectaddress.c:3584 #, c-format msgid "text search template %s" msgstr "ტექსტის ძებნის შაბლონი %s" -#: catalog/objectaddress.c:3565 +#: catalog/objectaddress.c:3615 #, c-format msgid "text search configuration %s" msgstr "ტექსტის ძებნის კონფიგურაცია \"%s\"" -#: catalog/objectaddress.c:3578 +#: catalog/objectaddress.c:3628 #, c-format msgid "role %s" msgstr "როლი %s" -#: catalog/objectaddress.c:3615 catalog/objectaddress.c:5464 +#: catalog/objectaddress.c:3665 catalog/objectaddress.c:5589 #, c-format msgid "membership of role %s in role %s" msgstr "როლის (%s) წევრობა როლში %s" -#: catalog/objectaddress.c:3636 +#: catalog/objectaddress.c:3686 #, c-format msgid "database %s" msgstr "ბაზა: %s" -#: catalog/objectaddress.c:3652 +#: catalog/objectaddress.c:3702 #, c-format msgid "tablespace %s" msgstr "ცხრილების სივრცე %s" -#: catalog/objectaddress.c:3663 +#: catalog/objectaddress.c:3713 #, c-format msgid "foreign-data wrapper %s" msgstr "გარე-მონაცემების გადამტანი %s" -#: catalog/objectaddress.c:3673 +#: catalog/objectaddress.c:3723 #, c-format msgid "server %s" msgstr "სერვერი %s" -#: catalog/objectaddress.c:3706 +#: catalog/objectaddress.c:3756 #, c-format msgid "user mapping for %s on server %s" msgstr "მომხმარებლის ბმა %s-სთვის სერვერზე %s" -#: catalog/objectaddress.c:3758 +#: catalog/objectaddress.c:3808 #, 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:3812 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ურთიერთობებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3768 +#: catalog/objectaddress.c:3818 #, 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:3822 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ მიმდევრობებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3778 +#: catalog/objectaddress.c:3828 #, 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:3832 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ფუნქციებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3788 +#: catalog/objectaddress.c:3838 #, 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:3842 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ტიპებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3798 +#: catalog/objectaddress.c:3848 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ სქემაზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3805 +#: catalog/objectaddress.c:3854 +#, c-format +msgid "default privileges on new large objects belonging to role %s" +msgstr "ნაგულისხმევი პრივილეგიები ახალ დიდ ურთიერთობებზე, რომელიც ეკუთვნის როლს %s" + +#: catalog/objectaddress.c:3861 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "სქემაში (%s) როლის (%s) ნაგულისხმევი პრივილეგიები" -#: catalog/objectaddress.c:3809 +#: catalog/objectaddress.c:3865 #, c-format msgid "default privileges belonging to role %s" msgstr "როლის (%s) ნაგულისხმევი პრივილეგიები" -#: catalog/objectaddress.c:3831 +#: catalog/objectaddress.c:3887 #, c-format msgid "extension %s" msgstr "გაფართოებa %s" -#: catalog/objectaddress.c:3848 +#: catalog/objectaddress.c:3904 #, c-format msgid "event trigger %s" msgstr "მოვლენის ტრიგერი %s" -#: catalog/objectaddress.c:3872 +#: catalog/objectaddress.c:3928 #, c-format msgid "parameter %s" msgstr "პარამეტრი %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3915 +#: catalog/objectaddress.c:3971 #, c-format msgid "policy %s on %s" msgstr "წესი %s %s-ზე" -#: catalog/objectaddress.c:3929 +#: catalog/objectaddress.c:3985 #, c-format msgid "publication %s" msgstr "პუბლიკაცია %s" -#: catalog/objectaddress.c:3942 +#: catalog/objectaddress.c:3998 #, 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:4029 #, c-format msgid "publication of %s in publication %s" msgstr "%s-ის პუბლიკაცია პუბლიკაციაში %s" -#: catalog/objectaddress.c:3986 +#: catalog/objectaddress.c:4042 #, c-format msgid "subscription %s" msgstr "გამოწერა %s" -#: catalog/objectaddress.c:4007 +#: catalog/objectaddress.c:4063 #, c-format msgid "transform for %s language %s" msgstr "გარდაქმნა %s-სთვის, ენისთვის %s" -#: catalog/objectaddress.c:4076 +#: catalog/objectaddress.c:4132 #, c-format msgid "table %s" msgstr "ცხრილი %s" -#: catalog/objectaddress.c:4081 +#: catalog/objectaddress.c:4137 #, c-format msgid "index %s" msgstr "ინდექსი %s" -#: catalog/objectaddress.c:4085 +#: catalog/objectaddress.c:4141 #, c-format msgid "sequence %s" msgstr "თანმიმდევრობა %s" -#: catalog/objectaddress.c:4089 +#: catalog/objectaddress.c:4145 #, c-format msgid "toast table %s" msgstr "toast ცხრილი \"%s\"" -#: catalog/objectaddress.c:4093 +#: catalog/objectaddress.c:4149 #, c-format msgid "view %s" msgstr "%s-ის ხედი" -#: catalog/objectaddress.c:4097 +#: catalog/objectaddress.c:4153 #, c-format msgid "materialized view %s" msgstr "მატერიალიზებული ხედი %s" -#: catalog/objectaddress.c:4101 +#: catalog/objectaddress.c:4157 #, c-format msgid "composite type %s" msgstr "კომპოზიტის ტიპი \"%s\"" -#: catalog/objectaddress.c:4105 +#: catalog/objectaddress.c:4161 #, c-format msgid "foreign table %s" msgstr "გარე ცხრილი \"%s\"" -#: catalog/objectaddress.c:4110 +#: catalog/objectaddress.c:4166 #, c-format msgid "relation %s" msgstr "ურთიერთობა %s" -#: catalog/objectaddress.c:4151 +#: catalog/objectaddress.c:4207 #, c-format msgid "operator family %s for access method %s" msgstr "ოპერატორის ოჯახი %s წვდომის მეთოდისთვის %s" @@ -5428,7 +5438,7 @@ msgstr "" 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:3057 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "" @@ -5443,7 +5453,7 @@ msgstr "დამატებითი არგუმენტებს მქ msgid "return type of combine function %s is not %s" msgstr "ტიპი, რომელსაც კომბინირებული ფუნქცია %s-ი აბრუნებს, %s არაა" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3902 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4005 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "კომბინირებული ფუნქცია გარდასვლის ტიპით %s არ შეიძლება აღწერილი იყოს, როგორც STRICT" @@ -5458,12 +5468,12 @@ msgstr "სერიალიზაციის ფუნქციის (%s) msgid "return type of deserialization function %s is not %s" msgstr "დესერიალიზაციის ფუნქციის (%s) დაბრუნების ტიპი %s არაა" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:217 catalog/pg_proc.c:251 #, c-format msgid "cannot determine result data type" msgstr "შედეგის მონაცემების ტიპის დადგენა შეუძლებელია" -#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:230 catalog/pg_proc.c:259 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "ფსევდო-ტიპი \"internal\" არაუსაფრთხოდ გამოიყენება" @@ -5478,48 +5488,48 @@ msgstr "" msgid "sort operator can only be specified for single-argument aggregates" msgstr "" -#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 +#: catalog/pg_aggregate.c:707 catalog/pg_proc.c:412 #, c-format msgid "cannot change routine kind" msgstr "ქვეპროგრამის ტიპის შეცვლა შეუძლებელია" -#: catalog/pg_aggregate.c:708 +#: catalog/pg_aggregate.c:709 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "\"%s\" ჩვეულებრივი აგრეგატული ფუნქციაა." -#: catalog/pg_aggregate.c:710 +#: catalog/pg_aggregate.c:711 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "\"%s\" დალაგებული-სეტის აგრეგატია." -#: catalog/pg_aggregate.c:712 +#: catalog/pg_aggregate.c:713 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "\"%s\" ჰიპოთეტიკური-სეტის აგრეგატია." -#: catalog/pg_aggregate.c:717 +#: catalog/pg_aggregate.c:718 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:686 commands/typecmds.c:1985 commands/typecmds.c:2031 commands/typecmds.c:2083 commands/typecmds.c:2120 commands/typecmds.c:2154 commands/typecmds.c:2188 commands/typecmds.c:2222 commands/typecmds.c:2251 commands/typecmds.c:2338 commands/typecmds.c:2380 parser/parse_func.c:417 parser/parse_func.c:448 parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 parser/parse_func.c:631 +#: catalog/pg_aggregate.c:859 commands/functioncmds.c:701 commands/typecmds.c:2015 commands/typecmds.c:2061 commands/typecmds.c:2113 commands/typecmds.c:2150 commands/typecmds.c:2184 commands/typecmds.c:2218 commands/typecmds.c:2252 commands/typecmds.c:2281 commands/typecmds.c:2368 commands/typecmds.c:2410 parser/parse_func.c:417 parser/parse_func.c:448 parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 parser/parse_func.c:631 #: parser/parse_func.c:2172 parser/parse_func.c:2445 #, c-format msgid "function %s does not exist" msgstr "ფუნქცია %s არ არსებობს" -#: catalog/pg_aggregate.c:864 +#: catalog/pg_aggregate.c:865 #, c-format msgid "function %s returns a set" msgstr "ფუნქცია %s სეტს აბრუნებს" -#: catalog/pg_aggregate.c:879 +#: catalog/pg_aggregate.c:880 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "ამ აგრეგატში გამოსაყენებლად ფუნქცია (%s) VARIADIC ANY-ს უნდა იღებდეს" -#: catalog/pg_aggregate.c:903 +#: catalog/pg_aggregate.c:904 #, c-format msgid "function %s requires run-time type coercion" msgstr "" @@ -5599,21 +5609,51 @@ msgstr "კოლაცია \"%s\" უკვე არსებობს" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "კოლაცია \"%s\" კოდირებისთვის \"%s\" უკვე არსებობს" -#: catalog/pg_constraint.c:732 +#: catalog/pg_constraint.c:758 commands/tablecmds.c:7952 +#, c-format +msgid "cannot change NO INHERIT status of NOT NULL constraint \"%s\" on relation \"%s\"" +msgstr "ურთიერთობაზე \"%2$s\" NOT NULL შეზღუდვის \"%1$s\" NO INHERIT სტატუსს ვერ შეცვლით" + +#: catalog/pg_constraint.c:760 commands/tablecmds.c:9559 +#, c-format +msgid "You might need to make the existing constraint inheritable using %s." +msgstr "" + +#: catalog/pg_constraint.c:770 +#, c-format +msgid "incompatible NOT VALID constraint \"%s\" on relation \"%s\"" +msgstr "შეუთავსებელი NOT VALID შეზღუდვა \"%s\" ურთიერთობაზე \"%s\"" + +#: catalog/pg_constraint.c:772 commands/tablecmds.c:9571 +#, c-format +msgid "You might need to validate it using %s." +msgstr "როგორც ჩანს, საჭიროა მისი სისწორე %s-ით დაამოწმოთ." + +#: catalog/pg_constraint.c:1011 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "შეზღუდვა \"%s\" დომენისთვის %s უკვე არსებობს" -#: catalog/pg_constraint.c:932 catalog/pg_constraint.c:1025 +#: catalog/pg_constraint.c:1212 catalog/pg_constraint.c:1305 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "ცხრილის (%2$s) შეზღუდვა (%1$s) არ არსებობს" -#: catalog/pg_constraint.c:1125 +#: catalog/pg_constraint.c:1405 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "დომენის (%2$s) შეზღუდვა (%1$s) არ არსებობს" +#: catalog/pg_constraint.c:1659 +#, c-format +msgid "invalid type for PERIOD part of foreign key" +msgstr "გარე გასაღების PRIOD ნაწილის ტიპი არასწორია" + +#: catalog/pg_constraint.c:1660 +#, c-format +msgid "Only range and multirange are supported." +msgstr "მხარდაჭერილია, მხოლოდ, შუალედი და მრავალი შუალედი." + #: catalog/pg_conversion.c:64 #, c-format msgid "conversion \"%s\" already exists" @@ -5624,27 +5664,27 @@ msgstr "გადაყვანა უკვე არსებობს: \"%s\ msgid "default conversion for %s to %s already exists" msgstr "%s-დან %s-ზე ნაგულისხმევი გადაყვანა უკვე არსებობს" -#: catalog/pg_depend.c:224 commands/extension.c:3397 +#: catalog/pg_depend.c:223 commands/extension.c:3665 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s გაფართოების (\"%s\") წევრს უკვე წარმოადგენს" -#: catalog/pg_depend.c:231 catalog/pg_depend.c:282 commands/extension.c:3437 +#: catalog/pg_depend.c:230 catalog/pg_depend.c:281 commands/extension.c:3705 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s გაფართოების \"%s\"წევრი არაა" -#: catalog/pg_depend.c:234 +#: catalog/pg_depend.c:233 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "გაფართოებას უფლება, ჩაანაცვლოს ობიექტი, რომელიც მას არ ეკუთვნის, არ გააჩნია." -#: catalog/pg_depend.c:285 +#: catalog/pg_depend.c:284 #, c-format msgid "An extension may only use CREATE ... IF NOT EXISTS to skip object creation if the conflicting object is one that it already owns." msgstr "გაფართოებას CREATE … IF NOT EXISTS-ის გამოყენება მხოლოდ იმისთვის შეუძლიათ, რომ გამოტოვონ ობიექტის შექმნა, თუ კონფლიქტური ობიექტი მას უკვე ეკუთვნის." -#: catalog/pg_depend.c:648 +#: catalog/pg_depend.c:647 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "%s-ზე დამოკიდებულებას ვერ მოაცილებთ. ის სისტემური ობიექტია" @@ -5694,7 +5734,7 @@ msgstr "დანაყოფის \"%s\" მოხსნის შეცდო 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:4916 commands/tablecmds.c:17824 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "მოხსნის ოპერაციის დასასრულებლად გამოიყენეთ ALTER TABLE ... DETACH PARTITION ... FINALIZE ." @@ -5799,44 +5839,44 @@ msgstr "" msgid "parameter ACL \"%s\" does not exist" msgstr "პარამეტრი ACL \"%s\" არ არსებობს" -#: catalog/pg_proc.c:130 parser/parse_func.c:2234 +#: catalog/pg_proc.c:158 parser/parse_func.c:2234 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "ფუნქციებს %d-ზე მეტი არგუმენტი არ შეიძლება ჰქონდეთ" msgstr[1] "ფუნქციებს %d-ზე მეტი არგუმენტი არ შეიძლება ჰქონდეთ" -#: catalog/pg_proc.c:374 +#: catalog/pg_proc.c:402 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "ფუნქცია \"%s\" უკვე არსებობს იგივე არგუმენტის ტიპებით" -#: catalog/pg_proc.c:386 +#: catalog/pg_proc.c:414 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\" აგრეგატული ფუნქციაა." -#: catalog/pg_proc.c:388 +#: catalog/pg_proc.c:416 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\" ფუნქციაა." -#: catalog/pg_proc.c:390 +#: catalog/pg_proc.c:418 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\" პროცედურაა." -#: catalog/pg_proc.c:392 +#: catalog/pg_proc.c:420 #, c-format msgid "\"%s\" is a window function." msgstr "\"%s\" ფანჯრის ფუნქციაა." -#: catalog/pg_proc.c:412 +#: catalog/pg_proc.c:440 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "ფაქტს, აქვს თუ არა პროცედურას გამოტანის პარამეტრები, ვერ შეცვლით" -#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 +#: catalog/pg_proc.c:441 catalog/pg_proc.c:471 #, c-format msgid "cannot change return type of existing function" msgstr "არსებული ფუნქციის მნიშვნელობის დაბრუნების ტიპს ვერ შეცვლით" @@ -5845,112 +5885,112 @@ msgstr "არსებული ფუნქციის მნიშვნე #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 catalog/pg_proc.c:517 catalog/pg_proc.c:541 +#: catalog/pg_proc.c:447 catalog/pg_proc.c:474 catalog/pg_proc.c:519 catalog/pg_proc.c:545 catalog/pg_proc.c:569 #, c-format msgid "Use %s %s first." msgstr "ჯერ შეასრულეთ %s %s." -#: catalog/pg_proc.c:444 +#: catalog/pg_proc.c:472 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "OUT პარამეტრების მიერ აღწერილი მწკრივის ტიპი განსხვავებულია." -#: catalog/pg_proc.c:488 +#: catalog/pg_proc.c:516 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "შეყვანის პარამეტრის სახელის შეცვლა შეუძლებელია: \"%s\"" -#: catalog/pg_proc.c:515 +#: catalog/pg_proc.c:543 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "არსებული ფუნქციიდან პარამეტრის ნაგულისხმევი მნიშვნელობების წაშლა შეუძლებელია" -#: catalog/pg_proc.c:539 +#: catalog/pg_proc.c:567 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "არსებული პარამეტრის ნაგულისხმევი მნიშვნელობის მონაცემის ტიპს ვერ შეცვლით" -#: catalog/pg_proc.c:750 +#: catalog/pg_proc.c:771 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "ჩაშენებული ფუნქცია სახელით \"%s\" არ არსებობს" -#: catalog/pg_proc.c:843 +#: catalog/pg_proc.c:864 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL ფუნქციებს %s ტიპის დაბრუნება არ შეუძლიათ" -#: catalog/pg_proc.c:858 +#: catalog/pg_proc.c:879 #, c-format 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:1007 #, c-format msgid "SQL function \"%s\"" msgstr "SQL ფუნქცია \"%s\"" -#: catalog/pg_publication.c:66 catalog/pg_publication.c:74 catalog/pg_publication.c:82 catalog/pg_publication.c:88 +#: catalog/pg_publication.c:63 catalog/pg_publication.c:71 catalog/pg_publication.c:79 catalog/pg_publication.c:85 #, c-format msgid "cannot add relation \"%s\" to publication" msgstr "პუბლიკაციისთვის ურთიერთობის დამატება შეუძლებელია: %s" -#: catalog/pg_publication.c:76 +#: catalog/pg_publication.c:73 #, c-format msgid "This operation is not supported for system tables." msgstr "ეს ოპერაცია სისტემური ცხრილებისთვის მხარდაჭერილი არაა." -#: catalog/pg_publication.c:84 +#: catalog/pg_publication.c:81 #, c-format msgid "This operation is not supported for temporary tables." msgstr "ეს ოპერაცია დროებითი ცხრილებისთვის მხარდაჭერილი არაა." -#: catalog/pg_publication.c:90 +#: catalog/pg_publication.c:87 #, c-format msgid "This operation is not supported for unlogged tables." msgstr "ეს ოპერაცია არაჟურნალირებადი ცხრილებისთვის მხარდაჭერილი არაა." -#: catalog/pg_publication.c:104 catalog/pg_publication.c:112 +#: catalog/pg_publication.c:101 catalog/pg_publication.c:109 #, c-format msgid "cannot add schema \"%s\" to publication" msgstr "პუბლიკაციისთვის სქემის დამატება შეუძლებელია: %s" -#: catalog/pg_publication.c:106 +#: catalog/pg_publication.c:103 #, c-format msgid "This operation is not supported for system schemas." msgstr "ეს ოპერაცია სისტემური სქემებისთვის მხარდაჭერილი არაა." -#: catalog/pg_publication.c:114 +#: catalog/pg_publication.c:111 #, c-format msgid "Temporary schemas cannot be replicated." msgstr "დროებითი სქემების რეპლიკაცია შეუძლებელია." -#: catalog/pg_publication.c:392 +#: catalog/pg_publication.c:462 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "სქემა %s პუბლიკაციის (%s) ნაწილს უკვე წარმოადგენს" -#: catalog/pg_publication.c:534 +#: catalog/pg_publication.c:576 #, c-format msgid "cannot use system column \"%s\" in publication column list" msgstr "პუბლიკაციის სვეტების სიაში სისტემური სვეტის (\"%s\") გამოყენება შეუძლებელია" -#: catalog/pg_publication.c:540 +#: catalog/pg_publication.c:582 #, c-format -msgid "cannot use generated column \"%s\" in publication column list" -msgstr "პუბლიკაციის სვეტების სიაში გენერირებული სვეტის (\"%s\") გამოყენება შეუძლებელია" +msgid "cannot use virtual generated column \"%s\" in publication column list" +msgstr "ვირტუალურ გენერირებულ სვეტს \"%s\" გამოცემის სვეტების სიაში ვერ გამოიყენებთ" -#: catalog/pg_publication.c:546 +#: catalog/pg_publication.c:588 #, c-format msgid "duplicate column \"%s\" in publication column list" msgstr "პუბლიკაციის სვეტების სიაში დუბლიკატია: %s" -#: catalog/pg_publication.c:636 +#: catalog/pg_publication.c:700 #, c-format 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,70 +6005,70 @@ msgstr[1] "" "\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-ის მფლობელობაში მყოფი ობიექტების წვდომების თავიდან მინიჭება შეუძლებელია, რადგან ისინი ბაზის სისტემისთვისაა საჭირო" -#: catalog/pg_subscription.c:438 +#: catalog/pg_subscription.c:469 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "გამოწერისთვის \"%s\" ურთიერთობის მიბმის წაშლა შეუძლებელია" -#: catalog/pg_subscription.c:440 +#: catalog/pg_subscription.c:471 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "მიმდინარეობს ცხრილის სინქრონიზაცია ურთიერთობისთვის \"%s\" და მისი მდგომარეობაა \"%c\"." @@ -6036,7 +6076,7 @@ msgstr "მიმდინარეობს ცხრილის სინქ #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:447 +#: catalog/pg_subscription.c:478 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "გამოწერის ჩასართავად, თუ ის უკვე ჩართული არაა, %s გამოიყენეთ, ან, %s, გამოწერის წასაშლელად." @@ -6066,7 +6106,7 @@ msgstr "შიდა ზომა %d მნიშვნელობით-გა msgid "alignment \"%c\" is invalid for variable-length type" msgstr "სწორება \"%c\" არასწორია ცვლადი-სიგრძის ტიპისთვის" -#: catalog/pg_type.c:325 commands/typecmds.c:4363 +#: catalog/pg_type.c:325 commands/typecmds.c:4354 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "ფიქსირებული ზომის ტიპებს უნდა PLAIN ტიპის საცავი უნდა ჰქონდეთ" @@ -6081,7 +6121,7 @@ msgstr "შეცდომა მრავალდიაპაზონია 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:549 storage/buffer/bufmgr.c:7339 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ურთიერთობის (%2$s) ბლოკის (%1$u) არასწორ გვერდი" @@ -6166,7 +6206,7 @@ msgstr "სერიალიზაციის ფუნქციების msgid "must specify both or neither of serialization and deserialization functions" msgstr "აუცილებელია მიუთითოთ ან ორივე, სერიალიზაციის და დესერიალიზაციის ფუნქციები, ან არც ერთი" -#: commands/aggregatecmds.c:434 commands/functioncmds.c:634 +#: commands/aggregatecmds.c:434 commands/functioncmds.c:649 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "პარამეტრი \"parallel\" SAFE, RESTRICTED ან UNSAFE -ს შეიძლება უდრიდეს" @@ -6176,82 +6216,82 @@ msgstr "პარამეტრი \"parallel\" SAFE, RESTRICTED ან UNSAFE msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "პარამეტრი \"%s\" READ_ONLY, SHAREABLE, ან READ_WRITE უნდა იყოს" -#: commands/alter.c: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:865 #, c-format msgid "publication \"%s\" already exists" msgstr "პუბლიკაცია \"%s\" უკვე არსებობს" -#: commands/alter.c:97 commands/subscriptioncmds.c:669 +#: commands/alter.c:98 commands/subscriptioncmds.c:629 #, 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:608 commands/subscriptioncmds.c:1147 commands/subscriptioncmds.c:1231 commands/subscriptioncmds.c:1989 #, 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:609 commands/subscriptioncmds.c:1148 commands/subscriptioncmds.c:1232 commands/subscriptioncmds.c:1990 #, 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:746 #, c-format msgid "must be superuser to set schema of %s" msgstr "%s-ის სქემის დასაყენებლად საჭიროა ზემომხმარებლის უფლებები" @@ -6271,7 +6311,7 @@ msgstr "წვდომის მეთოდის შესაქმნელ 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:226 commands/indexcmds.c:859 commands/opclasscmds.c:375 commands/opclasscmds.c:833 #, c-format msgid "access method \"%s\" does not exist" msgstr "წვდომის მეთოდი \"%s\" არ არსებობს" @@ -6281,52 +6321,57 @@ msgstr "წვდომის მეთოდი \"%s\" არ არსებ msgid "handler function is not specified" msgstr "დამმუშავებელი ფუნქცია მითითებული არაა" -#: commands/amcmds.c:264 commands/event_trigger.c:200 commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:702 parser/parse_clause.c:943 +#: commands/amcmds.c:264 commands/event_trigger.c:200 commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:705 parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "ფუნქციამ (%s) აუცილებლად უნდა დააბრუნოს ტიპი %s" -#: commands/analyze.c:217 +#: commands/analyze.c:215 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "%s-ის გამოტოვება --- გარე ცხრილის ანალიზი შეუძლებელია" -#: commands/analyze.c:234 +#: commands/analyze.c:232 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "%s-ის გამოტოვება --- არაცხრილების და სპეციალური სისტემური ცხრილების ანალიზი შეუძლებელია" -#: commands/analyze.c:314 +#: commands/analyze.c:317 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "\"%s.%s\" -ის მემკვიდრეობითი ხის ანალიზი" -#: commands/analyze.c:319 +#: commands/analyze.c:322 #, c-format msgid "analyzing \"%s.%s\"" msgstr "\"%s.%s\"-ის ანალიზი" -#: commands/analyze.c:385 +#: commands/analyze.c:393 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "ურთიერთობის (%2$s) სვეტი (%1$s) ერთზე მეტჯერ ჩნდება" -#: commands/analyze.c:780 +#: commands/analyze.c:803 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "ცხრილის ავტომატური ანალიზი \"%s.%s.%s\"\n" -#: commands/analyze.c:1295 +#: commands/analyze.c:805 +#, c-format +msgid "finished analyzing table \"%s.%s.%s\"\n" +msgstr "დასრულდა ანალიზი ცხრილისთვის \"%s.%s.%s\"\n" + +#: commands/analyze.c:1346 #, 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:1430 #, 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:1528 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "\"%s.%s\"-ის მემკვიდრეობის ხის ანალიზის გამოტოვება --- მემკვიდრეობითობის ხე გაანალიზებად შვილ ცხრილებს არ შეიცავს" @@ -6371,82 +6416,82 @@ msgstr "სერვერის პროცესი PID-ით %d უძვ msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "რიგის NOTIFY დაცარიელება პროცესის მიერ მიმდინარე ტრანზაქციის დასრულებამდე შეუძლებელია." -#: commands/cluster.c:128 +#: commands/cluster.c:127 #, c-format msgid "unrecognized CLUSTER option \"%s\"" msgstr "\"CLUSTER\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/cluster.c:159 commands/cluster.c:433 +#: commands/cluster.c:158 commands/cluster.c:421 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "სხვა სესიების დროებით ცხრილების დაკლასტერება შეუძლებელია" -#: commands/cluster.c:177 +#: commands/cluster.c:176 #, c-format 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:190 commands/tablecmds.c:16380 commands/tablecmds.c:18446 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "ინდექსი %s ცხრილისთვის %s არ არსებობს" -#: commands/cluster.c:422 +#: commands/cluster.c:410 #, c-format msgid "cannot cluster a shared catalog" msgstr "გაზიარებული კატალოგის დაკლასტერება შეუძლებელია" -#: commands/cluster.c:437 +#: commands/cluster.c:425 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების მომტვერსასრუტება შეუძლებელია" -#: commands/cluster.c:513 commands/tablecmds.c:16639 +#: commands/cluster.c:507 commands/tablecmds.c:18456 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" არ წარმოადგენს ინდექსს ცხრილისთვის \"%s\"" -#: commands/cluster.c:521 +#: commands/cluster.c:515 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "" -#: commands/cluster.c:533 +#: commands/cluster.c:527 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "ნაწილობრივი ინდექსის (\"%s\") დაკლასტერება შეუძლებელია" -#: commands/cluster.c:547 +#: commands/cluster.c:541 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "არასწორი ინდექსის (\"%s\") დაკლასტერება შეუძლებელია" -#: commands/cluster.c:571 +#: commands/cluster.c:565 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "დაყოფილ ცხრილში ინდექსის დაკლასტერებულად მონიშვნა შეუძლებელია" -#: commands/cluster.c:956 +#: commands/cluster.c:961 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "\"%s.%s\"-ის დაკლასტერება ინდექსის სკანირების გამოყენებით \"%s\"" -#: commands/cluster.c:962 +#: commands/cluster.c:967 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "\"%s.%s\"-ის დაკლასტერება თანმიმდევრული სკანირების და დახარისხების გამოყენებით" -#: commands/cluster.c:967 +#: commands/cluster.c:972 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "დამტვერსასრუტება \"%s.%s\"" -#: commands/cluster.c:994 +#: commands/cluster.c:999 #, c-format msgid "\"%s.%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "\"%s.%s\": აღმოჩენილია %.0f წაშლადი და %.0f არაწაშლადი მწკრივის ვერსია %u გვერდში" -#: commands/cluster.c:999 +#: commands/cluster.c:1004 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -6455,7 +6500,7 @@ msgstr "" "%.0f მკვდარი მწკრივის ვერსების წაშლა ჯერჯერობით შეუძლებელია.\n" "%s." -#: commands/cluster.c:1744 +#: commands/cluster.c:1751 #, c-format msgid "permission denied to cluster \"%s\", skipping it" msgstr "კლასტერისთვის \"%s\" წვდომა აკრძალულია. გამოტოვება" @@ -6465,8 +6510,8 @@ msgstr "კლასტერისთვის \"%s\" წვდომა აკ 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 -#: replication/walsender.c:1187 replication/walsender.c:1426 +#: commands/collationcmds.c:123 commands/collationcmds.c:129 commands/define.c:375 commands/tablecmds.c:8369 replication/pgoutput/pgoutput.c:320 replication/pgoutput/pgoutput.c:343 replication/pgoutput/pgoutput.c:357 replication/pgoutput/pgoutput.c:367 replication/pgoutput/pgoutput.c:377 replication/pgoutput/pgoutput.c:387 replication/pgoutput/pgoutput.c:399 replication/walsender.c:1123 replication/walsender.c:1145 replication/walsender.c:1155 +#: replication/walsender.c:1164 replication/walsender.c:1406 replication/walsender.c:1415 #, c-format msgid "conflicting or redundant options" msgstr "კონფლიქტური ან ზედმეტი პარამეტრები" @@ -6496,7 +6541,7 @@ msgstr "კოლაციის უცნობი მომწოდებე msgid "parameter \"%s\" must be specified" msgstr "პარამეტრის \"%s\" მითითება აუცილებელია" -#: commands/collationcmds.c:293 commands/dbcommands.c:1134 +#: commands/collationcmds.c:293 commands/dbcommands.c:1148 #, c-format msgid "using standard form \"%s\" for ICU locale \"%s\"" msgstr "ვიყენებ სტანდარტულ ფორმას \"%s\" ICU ლოკალისთვის \"%s\"" @@ -6506,7 +6551,7 @@ msgstr "ვიყენებ სტანდარტულ ფორმას msgid "nondeterministic collations not supported with this provider" msgstr "არადემინისტური კოლაციები, რომლებიც არ არის მხარდაჭერილი ამ მომწოდებელთან" -#: commands/collationcmds.c:317 commands/dbcommands.c:1087 +#: commands/collationcmds.c:317 commands/dbcommands.c:1101 #, c-format msgid "ICU rules cannot be specified unless locale provider is ICU" msgstr "ICU-ის წესების მითითება მანამდე, სანამ ლოკალის მომწოდებელი ICU არაა, შეუძლებელია" @@ -6516,59 +6561,59 @@ msgstr "ICU-ის წესების მითითება მანა msgid "current database's encoding is not supported with this provider" msgstr "მონაცემთა ბაზის კოდირება არ არის მხარდაჭერილი ამ მომწოდებელთან" -#: commands/collationcmds.c:409 +#: commands/collationcmds.c:405 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "კოლაცია \"%s\" კოდირებისთვის \"%s\" სქემაში \"%s\" უკვე არსებობს" -#: commands/collationcmds.c:420 +#: commands/collationcmds.c:416 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "კოლაცია \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/collationcmds.c:445 +#: commands/collationcmds.c:441 #, c-format msgid "cannot refresh version of default collation" msgstr "ნაგულისხმევი კოლაციის ვერსიის განახლება შეუძლებელია" #. 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:443 commands/subscriptioncmds.c:1445 commands/tablecmds.c:8146 commands/tablecmds.c:8156 commands/tablecmds.c:8158 commands/tablecmds.c:16082 commands/tablecmds.c:19610 commands/tablecmds.c:19631 commands/typecmds.c:3778 commands/typecmds.c:3863 commands/typecmds.c:4217 #, c-format msgid "Use %s instead." msgstr "ამის ნაცვლად %s გამოიყენეთ." -#: commands/collationcmds.c:480 commands/dbcommands.c:2550 +#: commands/collationcmds.c:476 commands/dbcommands.c:2580 #, c-format msgid "changing version from %s to %s" msgstr "ვერსიის შეცვლა %s-დან %s-ზე" -#: commands/collationcmds.c:495 commands/dbcommands.c:2563 +#: commands/collationcmds.c:491 commands/dbcommands.c:2593 #, c-format msgid "version has not changed" msgstr "ვერსია არ შეცვლილა" -#: commands/collationcmds.c:528 commands/dbcommands.c:2729 +#: commands/collationcmds.c:524 commands/dbcommands.c:2763 utils/adt/dbsize.c:180 #, c-format msgid "database with OID %u does not exist" msgstr "ბაზა OID-ით %u არ არსებობს" -#: commands/collationcmds.c:554 +#: commands/collationcmds.c:550 #, c-format msgid "collation with OID %u does not exist" msgstr "კოლაცია OID-ით %u არ არსებობს" -#: commands/collationcmds.c:848 +#: commands/collationcmds.c:844 #, c-format msgid "must be superuser to import system collations" msgstr "სისტემური კოლაციების შემოსატანად საჭიროა ზემომხმარებლის უფლებები" -#: commands/collationcmds.c:968 commands/collationcmds.c:1053 +#: commands/collationcmds.c:964 commands/collationcmds.c:1049 #, c-format 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:1679 commands/dbcommands.c:1897 commands/dbcommands.c:2009 commands/dbcommands.c:2207 commands/dbcommands.c:2447 commands/dbcommands.c:2540 commands/dbcommands.c:2664 commands/dbcommands.c:3175 utils/init/postinit.c:1027 utils/init/postinit.c:1091 utils/init/postinit.c:1164 #, c-format msgid "database \"%s\" does not exist" msgstr "მონაცემთა ბაზა \"%s\" არ არსებობს" @@ -6578,12 +6623,12 @@ msgstr "მონაცემთა ბაზა \"%s\" არ არსებ msgid "cannot set comment on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" კომენტარის დადება შეუძლებელია" -#: commands/constraint.c:61 utils/adt/ri_triggers.c:2019 +#: commands/constraint.c:61 utils/adt/ri_triggers.c:2175 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "ფუნქცია ტრიგერის მმართველის მიერ არ გამოძახებულა: %s" -#: commands/constraint.c:68 utils/adt/ri_triggers.c:2028 +#: commands/constraint.c:68 utils/adt/ri_triggers.c:2184 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "ფუნქცია %s AFTER-ის ტრიგერით უნდა გაეშვას" @@ -6673,309 +6718,265 @@ msgstr "\"COPY TO\"-ში %s-ის HEADER-თან ერთად გამ 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:818 commands/copy.c:834 commands/copy.c:851 commands/copy.c:877 commands/copy.c:887 +#, 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:416 commands/copy.c:474 #, c-format -msgid "COPY ON_ERROR cannot be used with COPY TO" -msgstr "COPY ON_ERROR-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" +msgid "COPY %s \"%s\" not recognized" +msgstr "COPY %s \"%s\" უცნობია" -#: commands/copy.c:413 +#: commands/copy.c:436 commands/define.c:73 commands/define.c:84 commands/define.c:178 commands/define.c:196 commands/define.c:211 commands/define.c:229 #, c-format -msgid "COPY ON_ERROR \"%s\" not recognized" -msgstr "COPY ON_ERROR \"%s\" უცნობია" +msgid "%s requires a numeric value" +msgstr "%s მოითხოვს რიცხვით მნიშვნელობას" -#: commands/copy.c:437 +#: commands/copy.c:446 #, c-format -msgid "COPY LOG_VERBOSITY \"%s\" not recognized" -msgstr "COPY LOG_VERBOSITY \"%s\" უცნობია" +msgid "REJECT_LIMIT (%) must be greater than zero" +msgstr "REJECT_LIMIT (%) ნულზე მეტი უნდა იყოს" -#: commands/copy.c:498 +#: commands/copy.c:536 #, 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:594 commands/copy.c:609 commands/copy.c:624 commands/copy.c:643 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "პარამეტრის (%s) არგუმენტი სვეტების სახელების სია უნდა იყოს" -#: commands/copy.c:617 +#: commands/copy.c:655 #, 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:683 commands/dbcommands.c:880 commands/dbcommands.c:2395 #, c-format msgid "option \"%s\" not recognized" msgstr "უცნობი პარამეტრი: %s" -#: commands/copy.c:650 -#, c-format -msgid "cannot specify DELIMITER in BINARY mode" -msgstr "რეჟიმში BINARY \"DELIMITER\"-ს ვერ მიუთითებთ" - -#: 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 +#. translator: %s is the name of a COPY option, e.g. ON_ERROR +#: commands/copy.c:696 commands/copy.c:701 commands/copy.c:706 commands/copy.c:776 #, c-format -msgid "only ON_ERROR STOP is allowed in BINARY mode" -msgstr "" +msgid "cannot specify %s in BINARY mode" +msgstr "რეჟიმში BINARY \"%s\"-ს ვერ მიუთითებთ" -#: commands/copy.c:687 +#: commands/copy.c:728 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPY-ის გამყოფი ერთბაიტიანი სიმბოლო უნდა იყოს" -#: commands/copy.c:694 +#: commands/copy.c:735 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-ის გამყოფი ხაზის გადატანა ან კარეტის დაბრუნება არ უნდა იყოს" -#: commands/copy.c:700 +#: commands/copy.c:741 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY-ის ნულოვან რეპრეზენტაციას ახალი ხაზის ან კარეტის დაბრუნება გამოყენება არ შეუძლია" -#: commands/copy.c:710 +#: commands/copy.c:751 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "COPY-ის ნაგულისხმევ რეპრეზენტაციას ახალი ხაზის ან კარეტის დაბრუნება გამოყენება არ შეუძლია" -#: commands/copy.c:728 +#: commands/copy.c:769 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPY-ის გამყოფი \"%s\" არ შეიძლება იყოს" -#: commands/copy.c:734 -#, c-format -msgid "cannot specify HEADER in BINARY mode" -msgstr "რეჟიმში BINARY \"HEADER\"-ს ვერ მიუთითებთ" - -#: commands/copy.c:740 +#. translator: %s is the name of a COPY option, e.g. ON_ERROR +#: commands/copy.c:783 commands/copy.c:800 commands/copy.c:812 commands/copy.c:827 commands/copy.c:843 #, c-format -msgid "COPY QUOTE requires CSV mode" -msgstr "COPY QUOTE-ს CSV რეჟიმი სჭირდება" +msgid "COPY %s requires CSV mode" +msgstr "COPY %s-ს CSV რეჟიმი სჭირდება" -#: commands/copy.c:745 +#: commands/copy.c:788 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPY-ის ბრჭყალი ერთბაიტიანი სიმბოლო უნდა იყოს" -#: commands/copy.c:750 +#: commands/copy.c:793 #, 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:805 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPY-ის სპეცსიმბოლო ერთბაიტიანი სიმბოლო უნდა იყოს" -#: commands/copy.c:767 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:859 commands/copy.c:895 #, c-format -msgid "COPY FORCE_QUOTE requires CSV mode" -msgstr "COPY FORCE_QUOTE-ს CSV რეჟიმი სჭირდება" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "COPY-ის გამყოფი სიმბოლო %s-ის სპეციფიკაციაში არ უნდა ჩანდეს" -#: commands/copy.c:771 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:868 commands/copy.c:904 #, c-format -msgid "COPY FORCE_QUOTE cannot be used with COPY FROM" -msgstr "COPY FORCE_QUOTE-ს COPY FROM-სთან ერთად ვერ გამოიყენებთ" +msgid "CSV quote character must not appear in the %s specification" +msgstr "CSV-ის ბრჭყალის სიმბოლო %s-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" -#: commands/copy.c:777 +#: commands/copy.c:913 #, c-format -msgid "COPY FORCE_NOT_NULL requires CSV mode" -msgstr "COPY FORCE_NOT_NULL-ს CSV რეჟიმი სჭირდება" +msgid "NULL specification and DEFAULT specification cannot be the same" +msgstr "NULL-ის სპეციფიკაცია და DEFAULT-ის სპეციფიკაცია ერთი და იგივე ვერ იქნება" -#: commands/copy.c:781 +#: commands/copy.c:919 #, c-format -msgid "COPY FORCE_NOT_NULL cannot be used with COPY TO" -msgstr "COPY FORCE_NOT_NULL-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" +msgid "only ON_ERROR STOP is allowed in BINARY mode" +msgstr "" -#: commands/copy.c:787 +#. translator: first and second %s are the names of COPY option, e.g. +#. * ON_ERROR, third is the value of the COPY option, e.g. IGNORE +#: commands/copy.c:926 #, c-format -msgid "COPY FORCE_NULL requires CSV mode" -msgstr "COPY FORCE_NULL-ს CSV რეჟიმი სჭირდება" +msgid "COPY %s requires %s to be set to %s" +msgstr "COPY %s-ს სჭირდება %s დაყენებული იყოს მნიშვნელობაზე %s" -#: commands/copy.c:792 +#: commands/copy.c:988 #, c-format -msgid "COPY FORCE_NULL cannot be used with COPY TO" -msgstr "COPY FORCE_NULL-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" +msgid "column \"%s\" is a generated column" +msgstr "სვეტი \"%s\" გენერირებული სვეტია" -#: 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 -#, c-format -msgid "NULL specification and DEFAULT specification cannot be the same" -msgstr "NULL-ის სპეციფიკაცია და DEFAULT-ის სპეციფიკაცია ერთი და იგივე ვერ იქნება" - -#: commands/copy.c:901 -#, c-format -msgid "column \"%s\" is a generated column" -msgstr "სვეტი \"%s\" გენერირებული სვეტია" - -#: commands/copy.c:903 +#: commands/copy.c:990 #, 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:1005 commands/indexcmds.c:1959 commands/statscmds.c:239 commands/tablecmds.c:2593 commands/tablecmds.c:3101 commands/tablecmds.c:3930 parser/parse_relation.c:3798 parser/parse_relation.c:3808 parser/parse_relation.c:3826 parser/parse_relation.c:3833 parser/parse_relation.c:3847 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:1012 commands/tablecmds.c:2619 commands/trigger.c:956 parser/parse_target.c:1086 parser/parse_target.c:1097 #, c-format msgid "column \"%s\" specified more than once" msgstr "სვეტი ერთზე მეტჯერაა მითითებული: \"%s\"" -#: commands/copyfrom.c:118 +#: commands/copyfrom.c:260 #, c-format msgid "COPY %s" msgstr "COPY %s" -#: commands/copyfrom.c:126 +#: commands/copyfrom.c:268 #, c-format -msgid "COPY %s, line %llu, column %s" -msgstr "COPY %s, ხაზი %llu, სვეტი %s" +msgid "COPY %s, line %, column %s" +msgstr "COPY %s, ხაზი %, სვეტი %s" -#: commands/copyfrom.c:131 commands/copyfrom.c:177 +#: commands/copyfrom.c:273 commands/copyfrom.c:319 #, c-format -msgid "COPY %s, line %llu" -msgstr "COPY %s, ხაზი %llu" +msgid "COPY %s, line %" +msgstr "COPY %s, ხაზი %" -#: commands/copyfrom.c:143 +#: commands/copyfrom.c:285 #, c-format -msgid "COPY %s, line %llu, column %s: \"%s\"" -msgstr "COPY %s, ხაზი %llu, სვეტი %s: \"%s\"" +msgid "COPY %s, line %, column %s: \"%s\"" +msgstr "COPY %s, ხაზი %, სვეტი %s: \"%s\"" -#: commands/copyfrom.c:153 +#: commands/copyfrom.c:295 #, c-format -msgid "COPY %s, line %llu, column %s: null input" -msgstr "COPY %s, ხაზი %llu, სვეტი %s: ნულოვანი შეყვანა" +msgid "COPY %s, line %, column %s: null input" +msgstr "COPY %s, ხაზი %, სვეტი %s: ნულოვანი შეყვანა" -#: commands/copyfrom.c:170 +#: commands/copyfrom.c:312 #, c-format -msgid "COPY %s, line %llu: \"%s\"" -msgstr "COPY %s, ხაზი %llu: \"%s\"" +msgid "COPY %s, line %: \"%s\"" +msgstr "COPY %s, ხაზი %: \"%s\"" -#: commands/copyfrom.c:673 +#: commands/copyfrom.c:823 #, c-format msgid "cannot copy to view \"%s\"" msgstr "ხედზე კოპირების შეცდომა: \"%s\"" -#: commands/copyfrom.c:675 +#: commands/copyfrom.c:825 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "ხედში კოპირებისთვის INSTEAD OF INSERT ტრიგერი წარმოადგინეთ." -#: commands/copyfrom.c:679 +#: commands/copyfrom.c:829 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "მატერიალიზებულ ხედში კოპირების შეცდომა: %s" -#: commands/copyfrom.c:684 +#: commands/copyfrom.c:834 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "მიმდევრობაში (%s) კოპირების შეცდომა" -#: commands/copyfrom.c:689 +#: commands/copyfrom.c:839 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "არა-ცხრილოვან ურთიერთობაში კოპირების შეცდომა: %s" -#: commands/copyfrom.c:729 +#: commands/copyfrom.c:879 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "\"COPY FREEZE\"-ის გამოყენება დაყოფილ ცხრილზე შეუძლებელია" -#: commands/copyfrom.c:744 +#: commands/copyfrom.c:886 +#, c-format +msgid "cannot perform COPY FREEZE on a foreign table" +msgstr "\"COPY FREEZE\"-ის გამოყენება გარე ცხრილზე შეუძლებელია" + +#: commands/copyfrom.c:900 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "\"COPY FREEZE\"-ის გამოყენება შეუძლებელია წინა ტრანზაქციის აქტივობის გამო" -#: commands/copyfrom.c:750 +#: commands/copyfrom.c:906 #, c-format msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "'COPY FREEZE'-ის განხორციელება შეუძლებელია, რადგან ცხრილი მიმდინარე ქვეტრანზაქციაში არც შექმნილა და არც მოკვეთილა" -#: commands/copyfrom.c:1313 +#: commands/copyfrom.c:1171 #, c-format -msgid "%llu row was skipped due to data type incompatibility" -msgid_plural "%llu rows were skipped due to data type incompatibility" -msgstr[0] "გამოტოვებულია %llu მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" -msgstr[1] "გამოტოვებულია %llu მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" +msgid "skipped more than REJECT_LIMIT (%) rows due to data type incompatibility" +msgstr "გამოტოვებულია REJECT_LIMIT-ზე მეტი (%) მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" -#: commands/copyfrom.c:1447 +#: commands/copyfrom.c:1474 #, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "FORCE_NOT_NULL სვეტი \"%s\" COPY-ის მიერ მითითებული არაა" +msgid "% row was skipped due to data type incompatibility" +msgid_plural "% rows were skipped due to data type incompatibility" +msgstr[0] "გამოტოვებულია % მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" +msgstr[1] "გამოტოვებულია % მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" -#: 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:1611 commands/copyfrom.c:1654 commands/copyto.c:881 #, 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:1707 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:1882 #, 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:1895 commands/copyto.c:986 #, 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:1953 commands/copyto.c:572 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:1968 commands/copyto.c:577 #, c-format msgid "program \"%s\" failed" msgstr "პროგრამის (\"%s\") შეცდომა" @@ -7015,665 +7016,665 @@ msgstr "\"COPY\"-ის ფაილის არასწორი თავს 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:732 replication/walsender.c:758 tcop/postgres.c:369 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "მოულოდნელი EOF ღია ტრანზაქციის მქონე კლიენტის შეერთებაზე" -#: commands/copyfromparse.c:294 replication/walsender.c:772 +#: commands/copyfromparse.c:294 replication/walsender.c:748 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "stdin-დან COPY ოპერაციისას მიღებულია მოულოდნელი შეტყობინების ტიპი 0x%02X" -#: commands/copyfromparse.c:317 replication/walsender.c:803 +#: commands/copyfromparse.c:317 replication/walsender.c:779 #, c-format msgid "COPY from stdin failed: %s" msgstr "COPY-ი stdin-დან წარუმატებელია: %s" -#: commands/copyfromparse.c:785 +#: commands/copyfromparse.c:802 #, c-format msgid "wrong number of fields in header line: got %d, expected %d" msgstr "ველების არასწორი რაოდენობა თავსართის ხაზში: მივიღე %d, მოველოდი %d" -#: commands/copyfromparse.c:801 +#: commands/copyfromparse.c:818 #, c-format msgid "column name mismatch in header line field %d: got null value (\"%s\"), expected \"%s\"" msgstr "სვეტი სახელი არ ემთხვევა თავსართის %d ხაზის ველზე: მიღებულია ნულოვანი მნიშვნელობა (\"%s\"). მოველოდი: \"%s\"" -#: commands/copyfromparse.c:808 +#: commands/copyfromparse.c:825 #, c-format msgid "column name mismatch in header line field %d: got \"%s\", expected \"%s\"" msgstr "სვეტი სახელი არ ემთხვევა თავსართის %d ხაზის ველზე: მიღებულია მნიშვნელობა: \"%s\". მოველოდი: \"%s\"" -#: commands/copyfromparse.c:892 commands/copyfromparse.c:1554 commands/copyfromparse.c:1810 +#: commands/copyfromparse.c:962 commands/copyfromparse.c:1581 commands/copyfromparse.c:1837 #, c-format msgid "extra data after last expected column" msgstr "დამატებითი მონაცემები ბოლო მოსალოდნელი სვეტის შემდეგ" -#: commands/copyfromparse.c:906 +#: commands/copyfromparse.c:976 #, c-format msgid "missing data for column \"%s\"" msgstr "არ არსებობს მონაცემები სვეტისთვის \"%s\"" -#: commands/copyfromparse.c:990 +#: commands/copyfromparse.c:1056 #, 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 % for column \"%s\": \"%s\"" msgstr "" -#: commands/copyfromparse.c:998 +#: commands/copyfromparse.c:1064 #, 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 % for column \"%s\": null input" msgstr "" -#: commands/copyfromparse.c:1044 +#: commands/copyfromparse.c:1122 #, c-format msgid "received copy data after EOF marker" msgstr "მიღებულია კოპირების მონაცემები EOF ნიშნის შემდეგ" -#: commands/copyfromparse.c:1051 +#: commands/copyfromparse.c:1129 #, c-format msgid "row field count is %d, expected %d" msgstr "მწკრივების ველის რაოდენობაა %d. ველოდებოდი %d" -#: commands/copyfromparse.c:1336 commands/copyfromparse.c:1353 +#: commands/copyfromparse.c:1394 commands/copyfromparse.c:1411 #, c-format msgid "literal carriage return found in data" msgstr "მონაცემებში აღმოჩენილია აშკარა ხაზის გადატანის სიმბოლო" -#: commands/copyfromparse.c:1337 commands/copyfromparse.c:1354 +#: commands/copyfromparse.c:1395 commands/copyfromparse.c:1412 #, c-format msgid "unquoted carriage return found in data" msgstr "მონაცემებში აღმოჩენილია ხაზის გადატანის სიმბოლო ბრჭყალების გარეშე" -#: commands/copyfromparse.c:1339 commands/copyfromparse.c:1356 +#: commands/copyfromparse.c:1397 commands/copyfromparse.c:1414 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "კარეტის დაბრუნების სიმბოლოსთვის გამოიყენეთ \"\\r\"." -#: commands/copyfromparse.c:1340 commands/copyfromparse.c:1357 +#: commands/copyfromparse.c:1398 commands/copyfromparse.c:1415 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "CSV-ის ველში კარეტის დაბრუნების სიმბოლოს ბრჭყალებში ჩასმა." -#: commands/copyfromparse.c:1369 +#: commands/copyfromparse.c:1427 #, c-format msgid "literal newline found in data" msgstr "მონაცემებში აღმოჩენილია ხაზის გადატანის სიმბოლო" -#: commands/copyfromparse.c:1370 +#: commands/copyfromparse.c:1428 #, c-format msgid "unquoted newline found in data" msgstr "მონაცემებში აღმოჩენილია ხაზის გადატანის სიმბოლო ბრჭყალების გარეშე" -#: commands/copyfromparse.c:1372 +#: commands/copyfromparse.c:1430 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "ახალი ხაზს წარმოსადგენად გამოიყენეთ \"\\n\"." -#: commands/copyfromparse.c:1373 +#: commands/copyfromparse.c:1431 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "CSV-ის ველში ახალი ხაზის სიმბოლოს ბრჭყალებში ჩასმა." -#: commands/copyfromparse.c:1419 commands/copyfromparse.c:1455 +#: commands/copyfromparse.c:1469 commands/copyfromparse.c:1491 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "კოპირების-დასასრულის მარკერი წინა ახალი ხაზის სტილს არ ემთხვევა" -#: commands/copyfromparse.c:1428 commands/copyfromparse.c:1444 +#: commands/copyfromparse.c:1473 commands/copyfromparse.c:1484 commands/copyfromparse.c:1500 #, c-format -msgid "end-of-copy marker corrupt" -msgstr "კოპირების-დასასრულის სანიშნი დაზიანებულია" +msgid "end-of-copy marker is not alone on its line" +msgstr "კოპირების-დასასრულის მარკერი მის ხაზზე მარტო არაა" -#: commands/copyfromparse.c:1746 commands/copyfromparse.c:1961 +#: commands/copyfromparse.c:1773 commands/copyfromparse.c:1988 #, c-format msgid "unexpected default marker in COPY data" msgstr "მოულოდნელი ნაგულისხმევი მარკერი COPY-ის მონაცემებში" -#: commands/copyfromparse.c:1747 commands/copyfromparse.c:1962 +#: commands/copyfromparse.c:1774 commands/copyfromparse.c:1989 #, c-format msgid "Column \"%s\" has no default value." msgstr "სვეტს \"%s\" DEFAULT მნიშვნელობა არ გააჩნია." -#: commands/copyfromparse.c:1894 +#: commands/copyfromparse.c:1921 #, c-format msgid "unterminated CSV quoted field" msgstr "\"CSV\"-ის ველის დამხურავი ბრჭყალი არ არსებობს" -#: commands/copyfromparse.c:1996 commands/copyfromparse.c:2015 +#: commands/copyfromparse.c:2023 commands/copyfromparse.c:2042 #, c-format msgid "unexpected EOF in COPY data" msgstr "\"COPY\"-ის მონაცემებში ნაპოვნია მოულოდნელი EOF" -#: commands/copyfromparse.c:2005 +#: commands/copyfromparse.c:2032 #, c-format msgid "invalid field size" msgstr "ველის არასწორი ზომა" -#: commands/copyfromparse.c:2028 +#: commands/copyfromparse.c:2055 #, c-format msgid "incorrect binary data format" msgstr "ბინარულ მონაცემების არასწორი ფორმატი" -#: commands/copyto.c:229 +#: commands/copyto.c:477 #, c-format msgid "could not write to COPY program: %m" msgstr "\"COPY\"-ის პროგრამაში ჩაწერის შეცდომა: %m" -#: commands/copyto.c:234 +#: commands/copyto.c:482 #, c-format msgid "could not write to COPY file: %m" msgstr "\"COPY\"-ის ფაილში ჩაწერის შეცდომა: %m" -#: commands/copyto.c:379 +#: commands/copyto.c:652 #, c-format msgid "cannot copy from view \"%s\"" msgstr "ხედიდან კოპირების შეცდომა: \"%s\"" -#: commands/copyto.c:381 commands/copyto.c:387 commands/copyto.c:393 commands/copyto.c:404 +#: commands/copyto.c:654 commands/copyto.c:669 commands/copyto.c:680 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "სცადეთ COPY (SELECT ...) TO ვარიანტი." -#: commands/copyto.c:385 +#: commands/copyto.c:660 +#, c-format +msgid "cannot copy from unpopulated materialized view \"%s\"" +msgstr "არაშევსებული მატერიალიზებული ხედიდან კოპირების შეცდომა: %s" + +#: commands/copyto.c:662 executor/execUtils.c:761 #, c-format -msgid "cannot copy from materialized view \"%s\"" -msgstr "მატერიალიზებული ხედიდან კოპირების შეცდომა: %s" +msgid "Use the REFRESH MATERIALIZED VIEW command." +msgstr "გამოიყენეთ ბრძანება REFRESH MATERIALIZED VIEW." -#: commands/copyto.c:391 +#: commands/copyto.c:667 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "გარე ცხრილიდან კოპირების შეცდომა: %s" -#: commands/copyto.c:397 +#: commands/copyto.c:673 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "მიმდევრობიდან კოპირების შეცდომა: %s" -#: commands/copyto.c:402 +#: commands/copyto.c:678 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "დაყოფილი ცხრილიდან კოპირების შეცდომა: %s" -#: commands/copyto.c:408 +#: commands/copyto.c:684 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "არა-ცხრილოვანი ურთიერთობიდან კოპირების შეცდომა: %s" -#: commands/copyto.c:460 +#: commands/copyto.c:739 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "DO INSTEAD NOTHING -ის წესები COPY-სთვის მხარდაუჭერელია" -#: commands/copyto.c:474 +#: commands/copyto.c:753 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "\"DO INSTEAD\" -ის პირობითი წესები COPY-სთვის მხარდაუჭერელია" -#: commands/copyto.c:478 +#: commands/copyto.c:757 #, 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 +#: commands/copyto.c:762 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "ერთზე მეტი გამოსახულების მქონე DO INSTEAD-ის წესები COPY-ისთვის მხარდაუჭერელია" -#: commands/copyto.c:493 +#: commands/copyto.c:772 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) მხარდაუჭერელია" -#: commands/copyto.c:511 +#: commands/copyto.c:778 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "" + +#: commands/copyto.c:794 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "COPY მოთხოვნას RETURNING პირობა აუცილებლად უნდა გააჩნდეს" -#: commands/copyto.c:540 +#: commands/copyto.c:823 #, 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:951 #, c-format msgid "relative path not allowed for COPY to file" msgstr "ფაილში COPY-სთვის შედარებითი ბილიკის მითითება დაუშვებელია" -#: commands/copyto.c:685 +#: commands/copyto.c:970 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ფაილის (\"%s\") ჩასაწერად გახსნა შეუძლებელია: %m" -#: commands/copyto.c:688 +#: commands/copyto.c:973 #, 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:212 commands/createas.c:524 #, c-format msgid "too many column names were specified" msgstr "მითითებულია მეტისმეტად ბევრი სვეტის სახელი" -#: commands/createas.c:541 +#: commands/createas.c:547 #, c-format msgid "policies not yet implemented for this command" msgstr "ამ ბრძანებისთვის წესები ჯერ არ არსებობს" -#: commands/dbcommands.c:829 +#: commands/dbcommands.c:843 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION მხარდაჭერილი აღარაა" -#: commands/dbcommands.c:830 +#: commands/dbcommands.c:844 #, c-format msgid "Consider using tablespaces instead." msgstr "მის მაგიერ სჯობს ცხრილის სივრცეები გამოიყენოთ." -#: commands/dbcommands.c:855 +#: commands/dbcommands.c:869 #, c-format msgid "OIDs less than %u are reserved for system objects" msgstr "%u-ზე მცირე OID-ები დაცულია სისტემური ობიექტებისთვის" -#: commands/dbcommands.c:886 utils/adt/ascii.c:146 +#: commands/dbcommands.c:900 utils/adt/ascii.c:146 #, c-format msgid "%d is not a valid encoding code" msgstr "\"%d\" კოდირების სწორ კოდს არ წარმოადგენს" -#: commands/dbcommands.c:897 utils/adt/ascii.c:128 +#: commands/dbcommands.c:911 utils/adt/ascii.c:128 #, c-format msgid "%s is not a valid encoding name" msgstr "\"%s\" კოდირების სწორ სახელს არ წარმოადგენს" -#: commands/dbcommands.c:931 +#: commands/dbcommands.c:945 #, c-format 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:958 commands/dbcommands.c:2428 commands/user.c:300 commands/user.c:739 #, c-format msgid "invalid connection limit: %d" msgstr "კავშირის არასწორი ლიმიტი: %d" -#: commands/dbcommands.c:965 +#: commands/dbcommands.c:979 #, c-format msgid "permission denied to create database" msgstr "ბაზის შექმნის წვდომა აკრძალულია" -#: commands/dbcommands.c:989 +#: commands/dbcommands.c:1003 #, c-format msgid "template database \"%s\" does not exist" msgstr "შაბლონური ბაზა \"%s\" არ არსებობს" -#: commands/dbcommands.c:999 +#: commands/dbcommands.c:1013 #, c-format 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:1014 commands/dbcommands.c:2458 utils/init/postinit.c:1106 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "არასწორი მონაცემთა ბაზების წასაშლელად გამოიყენეთ ბრძანება DROP DATABASE." -#: commands/dbcommands.c:1011 +#: commands/dbcommands.c:1025 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "ბაზის (\"%s\") კოპირების წვდომა აკრძალულია" -#: commands/dbcommands.c:1028 +#: commands/dbcommands.c:1042 #, c-format msgid "invalid create database strategy \"%s\"" msgstr "ბაზის შექმნის არასწორი სტრატეგია \"%s\"" -#: commands/dbcommands.c:1029 +#: commands/dbcommands.c:1043 #, c-format msgid "Valid strategies are \"wal_log\" and \"file_copy\"." msgstr "სწორი სტრატეგიებია \"wal_log\" და \"file_copy\"." -#: commands/dbcommands.c:1050 +#: commands/dbcommands.c:1064 #, c-format msgid "invalid server encoding %d" msgstr "სერვერის არასწორი კოდირება %d" -#: commands/dbcommands.c:1056 +#: commands/dbcommands.c:1070 #, c-format msgid "invalid LC_COLLATE locale name: \"%s\"" msgstr "არასწორი LC_COLLATE ლოკალის სახელი: \"%s\"" -#: commands/dbcommands.c:1057 commands/dbcommands.c:1063 +#: commands/dbcommands.c:1071 commands/dbcommands.c:1077 #, c-format msgid "If the locale name is specific to ICU, use ICU_LOCALE." msgstr "თუ ლოკალის სახელი მხოლოდ ICU-სთვისა დამახასიათებელი, ICU_LOCALE გამოიყენეთ." -#: commands/dbcommands.c:1062 +#: commands/dbcommands.c:1076 #, c-format msgid "invalid LC_CTYPE locale name: \"%s\"" msgstr "არასწორი LC_TYPE ლოკალის სახელი: \"%s\"" -#: commands/dbcommands.c:1074 +#: commands/dbcommands.c:1088 #, c-format msgid "BUILTIN_LOCALE cannot be specified unless locale provider is builtin" msgstr "BUILTIN_LOCALE-ის მითითება შეუძლებელია, სანამ ლოკალის მომწოდებელი builtin არაა" -#: commands/dbcommands.c:1082 +#: commands/dbcommands.c:1096 #, c-format msgid "ICU locale cannot be specified unless locale provider is ICU" msgstr "ICU-ის ენის მითითება მანამდე, სანამ ლოკალის მომწოდებელი ICU არაა, შეუძლებელია" -#: commands/dbcommands.c:1100 +#: commands/dbcommands.c:1114 #, c-format msgid "LOCALE or BUILTIN_LOCALE must be specified" msgstr "LOCALE-ის ან BUILTIN_LOCALE-ის მითითება აუცილებელია" -#: commands/dbcommands.c:1109 +#: commands/dbcommands.c:1123 #, c-format msgid "encoding \"%s\" is not supported with ICU provider" msgstr "მონაცემთა ბაზის კოდირება \"%s\" ICU მომწოდებელთან ერთად მხარდაჭერილი არაა" -#: commands/dbcommands.c:1119 +#: commands/dbcommands.c:1133 #, c-format msgid "LOCALE or ICU_LOCALE must be specified" msgstr "LOCALE-ის ან ICU_LOCALE-ის მითითება აუცილებელია" -#: commands/dbcommands.c:1163 +#: commands/dbcommands.c:1177 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "ახალი კოდირება (%s) შაბლონის ბაზის (%s) კოდირებასთან თავსებადი არაა" -#: commands/dbcommands.c:1166 +#: commands/dbcommands.c:1180 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "გამოიყენეთ იგივე კოდირება, რაც შაბლონის ბაზას გააჩნია, ან შაბლონად template0 გამოიყენეთ." -#: commands/dbcommands.c:1171 +#: commands/dbcommands.c:1185 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "ახალი კოლაცია (%s) შაბლონის ბაზის (%s) კოლაციასთან თავსებადი არაა" -#: commands/dbcommands.c:1173 +#: commands/dbcommands.c:1187 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "გამოიყენეთ იგივე კოლაცია, რაც შაბლონის ბაზას გააჩნია, ან შაბლონად template0 გამოიყენეთ." -#: commands/dbcommands.c:1178 +#: commands/dbcommands.c:1192 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "ახალი LC_TYPE (%s) შაბლონის ბაზის (%s) LC_TYPE-სთან თავსებადი არაა" -#: commands/dbcommands.c:1180 +#: commands/dbcommands.c:1194 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "გამოიყენეთ იგივე LC_CTYPE, რაც შაბლონის ბაზას გააჩნია, ან შაბლონად template0 გამოიყენეთ." -#: commands/dbcommands.c:1185 +#: commands/dbcommands.c:1199 #, c-format msgid "new locale provider (%s) does not match locale provider of the template database (%s)" msgstr "ახალი ლოკალის მომწოდებელი (%s) შაბლონის ბაზის (%s) ლოკალის მომწოდებელს არ ემთხვევა" -#: commands/dbcommands.c:1187 +#: commands/dbcommands.c:1201 #, c-format msgid "Use the same locale provider as in the template database, or use template0 as template." msgstr "გამოიყენეთ იგივე ლოკალის მომწოდებელი, რაც შაბლონის ბაზას გააჩნია, ან შაბლონად template0 გამოიყენეთ." -#: commands/dbcommands.c:1199 +#: commands/dbcommands.c:1213 #, c-format msgid "new ICU locale (%s) is incompatible with the ICU locale of the template database (%s)" msgstr "ახალი ICU ლოკალი (%s) შაბლონის ბაზის (%s) ICU ლოკალთან თავსებადი არაა" -#: commands/dbcommands.c:1201 +#: commands/dbcommands.c:1215 #, c-format msgid "Use the same ICU locale as in the template database, or use template0 as template." msgstr "გამოიყენეთ იგივე ICU ლოკალი, რაც შაბლონის ბაზას გააჩნია, ან შაბლონად template0 გამოიყენეთ." -#: commands/dbcommands.c:1212 +#: commands/dbcommands.c:1226 #, c-format msgid "new ICU collation rules (%s) are incompatible with the ICU collation rules of the template database (%s)" msgstr "ახალი ICU კოლაციის წესები (%s) შაბლონის ბაზის (%s) ICU კოლაციის წესებთან თავსებადი არაა" -#: commands/dbcommands.c:1214 +#: commands/dbcommands.c:1228 #, c-format msgid "Use the same ICU collation rules as in the template database, or use template0 as template." msgstr "გამოიყენეთ იგივე ICU კოლაციის წესები, რაც შაბლონის ბაზას გააჩნია, ან შაბლონად template0 გამოიყენეთ." -#: commands/dbcommands.c:1243 +#: commands/dbcommands.c:1257 #, c-format msgid "template database \"%s\" has a collation version, but no actual collation version could be determined" msgstr "შაბლონის ბაზას \"%s\" კოლაცია გააჩნია, მაგრამ ნამდვილი კოლაციის ვერსიის დადგენა შეუძლებელია" -#: commands/dbcommands.c:1248 +#: commands/dbcommands.c:1262 #, c-format msgid "template database \"%s\" has a collation version mismatch" msgstr "შაბლონული ბაზის (%s) კოლაციის ვერსია არ ემთხვევა" -#: commands/dbcommands.c:1250 +#: commands/dbcommands.c:1264 #, c-format msgid "The template database was created using collation version %s, but the operating system provides version %s." msgstr "ნიმუში ბაზა შეიქმნა კოლაციის ვერსიით %s, მაგრამ ოპერაციული სისტემის ვერსიაა %s." -#: commands/dbcommands.c:1253 +#: commands/dbcommands.c:1267 #, c-format 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:1312 commands/dbcommands.c:2055 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global არ შეიძლება გამოყენებულ იქნას როგორც ნაგულისხმევი ცხრილის სივრცე" -#: commands/dbcommands.c:1324 +#: commands/dbcommands.c:1338 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "ცხრილების ახალი ნაგულისხმევი სივრცის \"%s\" მინიჭება შეუძლებელია" -#: commands/dbcommands.c:1326 +#: commands/dbcommands.c:1340 #, c-format 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:1370 commands/dbcommands.c:1926 #, c-format msgid "database \"%s\" already exists" msgstr "ბაზა \"%s\" უკვე არსებობს" -#: commands/dbcommands.c:1370 +#: commands/dbcommands.c:1384 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "საწყის ბაზა %s-სთან ამჟამად სხვა მომხმარებლებიცაა მიერთებული" -#: commands/dbcommands.c:1392 +#: commands/dbcommands.c:1406 #, c-format msgid "database OID %u is already in use by database \"%s\"" msgstr "ბაზის OID %u უკვე გამოიყენება ბაზის \"%s\" მიერ" -#: commands/dbcommands.c:1398 +#: commands/dbcommands.c:1412 #, c-format 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:1585 commands/dbcommands.c:1600 utils/adt/pg_locale.c:1517 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "კოდირება (%s) ენას (%s) არ ემთხვევა" -#: commands/dbcommands.c:1574 +#: commands/dbcommands.c:1588 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "\"LC_CTYPE\"-ის არჩეულ პარამეტრს სჭირდება კოდირება: \"%s\"." -#: commands/dbcommands.c:1589 +#: commands/dbcommands.c:1603 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "\"LC_COLLATE\"-ის არჩეულ პარამეტრს სჭირდება კოდირება: \"%s\"." -#: commands/dbcommands.c:1670 +#: commands/dbcommands.c:1686 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "მონაცემთა ბაზა \"%s\" არ არსებობს, გამოტოვება" -#: commands/dbcommands.c:1694 +#: commands/dbcommands.c:1710 #, c-format msgid "cannot drop a template database" msgstr "შაბლონური ბაზის წაშლა შეუძლებელია" -#: commands/dbcommands.c:1700 +#: commands/dbcommands.c:1716 #, c-format msgid "cannot drop the currently open database" msgstr "ღია ბაზის წაშლა შეუძლებელია" -#: commands/dbcommands.c:1713 +#: commands/dbcommands.c:1729 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "ბაზა %s აქტიური ლოგიკური რეპლიკაციის სლოტის მიერ გამოიყენება" -#: commands/dbcommands.c:1715 +#: commands/dbcommands.c:1731 #, 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:1745 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "ბაზა %s ლოგიკური რეპლიკაციის გამოწერის მიერ გამოიყენება" -#: commands/dbcommands.c:1731 +#: commands/dbcommands.c:1747 #, 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:1768 commands/dbcommands.c:1948 commands/dbcommands.c:2077 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "ბაზა %s-სთან ამჟამად სხვა მომხმარებლებიცაა მიერთებული" -#: commands/dbcommands.c:1886 +#: commands/dbcommands.c:1908 #, c-format msgid "permission denied to rename database" msgstr "ბაზის სახელის გადარქმევის წვდომა აკრძალულია" -#: commands/dbcommands.c:1915 +#: commands/dbcommands.c:1937 #, c-format msgid "current database cannot be renamed" msgstr "მიმდინარე ბაზის სახელის გადარქმევა შეუძლებელია" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2033 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "ღია ბაზის ცხრილების სივრცის შეცვლა შეუძლებელია" -#: commands/dbcommands.c:2115 +#: commands/dbcommands.c:2139 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "ბაზის (%s) ზოგიერთი ურთიერთობა ცხრილების სივრცეში \"%s\" უკვე იმყოფება" -#: commands/dbcommands.c:2117 +#: commands/dbcommands.c:2141 #, 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:2270 commands/dbcommands.c:3013 commands/dbcommands.c:3313 commands/dbcommands.c:3426 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "ძველი ბაზის საქაღალდეში \"%s\" შეიძლება რამდენიმე გამოუსადეგარი ფაილი დარჩა" -#: commands/dbcommands.c:2305 +#: commands/dbcommands.c:2331 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "\"DROP DATABASE\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/dbcommands.c:2383 +#: commands/dbcommands.c:2409 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "პარამეტრის \"%s\" მითითება სხვა პარამეტრებთან ერთად აკრძალულია" -#: commands/dbcommands.c:2430 +#: commands/dbcommands.c:2457 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "არასწორი ბაზის (\"%s\") შეცვლა შეუძლებელია" -#: commands/dbcommands.c:2447 +#: commands/dbcommands.c:2474 #, c-format msgid "cannot disallow connections for current database" msgstr "მიმდინარე ბაზასთან დაკავშირების უარყოფა შეუძლებელია" -#: commands/dbcommands.c:2673 +#: commands/dbcommands.c:2704 #, c-format msgid "permission denied to change owner of database" msgstr "ბაზის მფლობელის შეცვლის წვდომა აკრძალულია" -#: commands/dbcommands.c:3085 +#: commands/dbcommands.c:3119 #, 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:3122 #, 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:3127 storage/ipc/procarray.c:3860 #, 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:3269 #, c-format msgid "missing directory \"%s\"" msgstr "ნაკლული საქაღალდე \"%s\"" -#: commands/dbcommands.c:3293 commands/tablespace.c:184 commands/tablespace.c:633 +#: commands/dbcommands.c:3327 commands/tablespace.c:184 commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "საქაღალდის \"%s\" პოვნა შეუძლებელია: %m" -#: commands/define.c:53 commands/define.c:257 commands/define.c:289 commands/define.c:317 commands/define.c:363 +#: commands/define.c:40 commands/define.c:244 commands/define.c:276 commands/define.c:304 commands/define.c:350 #, c-format msgid "%s requires a parameter" msgstr "%s მოითხოვს პარამეტრს" -#: commands/define.c:86 commands/define.c:97 commands/define.c:191 commands/define.c:209 commands/define.c:224 commands/define.c:242 -#, c-format -msgid "%s requires a numeric value" -msgstr "%s მოითხოვს რიცხვით მნიშვნელობას" - -#: commands/define.c:153 +#: commands/define.c:140 #, c-format msgid "%s requires a Boolean value" msgstr "%s მოითხოვს ლოგიკურ მნიშვნელობას" -#: commands/define.c:167 commands/define.c:176 commands/define.c:326 +#: commands/define.c:154 commands/define.c:163 commands/define.c:313 #, c-format msgid "%s requires an integer value" msgstr "%s-ის მნიშვნელობა მთელი რიცხვი უნდა იყოს" -#: commands/define.c:271 +#: commands/define.c:258 #, c-format msgid "argument of %s must be a name" msgstr "%s-ის არგუმენტი სახელი უნდა იყოს" -#: commands/define.c:301 +#: commands/define.c:288 #, c-format msgid "argument of %s must be a type name" msgstr "%s-ის არგუმენტი ტიპის სახელი უნდა იყოს" -#: commands/define.c:347 +#: commands/define.c:334 #, c-format 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:1400 utils/adt/ruleutils.c:2956 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" აგრეგატული ფუნქციაა" @@ -7683,17 +7684,17 @@ msgstr "\"%s\" აგრეგატული ფუნქციაა" 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:4014 commands/tablecmds.c:4175 commands/tablecmds.c:4227 commands/tablecmds.c:18887 tcop/utility.c:1328 #, 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:1469 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "სქემა \"%s\" არ არსებობს, გამოტოვება" -#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:286 +#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:289 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "ტიპი \"%s\" არ არსებობს, გამოტოვება" @@ -7713,7 +7714,7 @@ msgstr "კოლაცია \"%s\" არ არსებობს, გამ msgid "conversion \"%s\" does not exist, skipping" msgstr "გადაყვანა\"%s\" არ არსებობს, გამოტოვება" -#: commands/dropcmds.c:288 commands/statscmds.c:664 +#: commands/dropcmds.c:288 commands/statscmds.c:682 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "სტატისტიკის ობიექტი \"%s\" არ არსებობს, გამოტოვება" @@ -7869,347 +7870,347 @@ msgstr "მოვლენის ტრიგერები %s-ისთვი 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:1404 #, 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:1497 commands/event_trigger.c:1518 #, 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:1931 #, 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_state.c:133 commands/explain_state.c:158 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "\"EXPLAIN\"-ის უცნობი პარამეტრი \"%s\": \"%s\"" -#: commands/explain.c:272 +#: commands/explain_state.c:165 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "\"EXPLAIN\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/explain.c:281 -#, c-format -msgid "EXPLAIN option WAL requires ANALYZE" -msgstr "EXPLAIN -ის პარამეტრ WAL-ს ANALYZE სჭირდება" - -#: commands/explain.c:290 +#: commands/explain_state.c:174 commands/explain_state.c:186 commands/explain_state.c:192 #, c-format -msgid "EXPLAIN option TIMING requires ANALYZE" -msgstr "EXPLAIN -ის პარამეტრ TIMING-ს ANALYZE სჭირდება" +msgid "EXPLAIN option %s requires ANALYZE" +msgstr "EXPLAIN -ის პარამეტრს %s ANALYZE სჭირდება" -#: commands/explain.c:296 -#, c-format -msgid "EXPLAIN option SERIALIZE requires ANALYZE" -msgstr "EXPLAIN-ის პარამეტრს SERIALIZE 'ANALYZE' სჭირდება" - -#: commands/explain.c:302 +#: commands/explain_state.c:198 #, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" msgstr "EXPLAIN-ის პარამეტრები ANALYZE და GENERIC_PLAN ერთად არ შეიძლება, გამოიყენოთ" -#: commands/extension.c:178 commands/extension.c:3031 +#: commands/extension.c:174 commands/extension.c:3299 #, c-format msgid "extension \"%s\" does not exist" msgstr "გაფართოება %s არ არსებობს" -#: commands/extension.c:277 commands/extension.c:286 commands/extension.c:298 commands/extension.c:308 +#: commands/extension.c:239 commands/extension.c:248 commands/extension.c:260 commands/extension.c:270 #, c-format msgid "invalid extension name: \"%s\"" msgstr "გაფართოების არასწორი სახელი: \"%s\"" -#: commands/extension.c:278 +#: commands/extension.c:240 #, c-format msgid "Extension names must not be empty." msgstr "გაფართოების სახელები ცარიელი არ უნდა იყოს." -#: commands/extension.c:287 +#: commands/extension.c:249 #, c-format msgid "Extension names must not contain \"--\"." msgstr "გაფართოების სახელები არ უნდა შეიცავდეს \"---\"." -#: commands/extension.c:299 +#: commands/extension.c:261 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "გაფართოების სახელები არ უნდა დაიწყოს ან დასრულდეს \"-\"." -#: commands/extension.c:309 +#: commands/extension.c:271 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "გაფართოების სახელები არ უნდა შეიცავდეს საქაღალდის გამყოფი სიმბოლოს." -#: commands/extension.c:324 commands/extension.c:333 commands/extension.c:342 commands/extension.c:352 +#: commands/extension.c:286 commands/extension.c:295 commands/extension.c:304 commands/extension.c:314 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "გაფართოების არასწორი ვერსია: \"%s\"" -#: commands/extension.c:325 +#: commands/extension.c:287 #, c-format msgid "Version names must not be empty." msgstr "ვერსიის სახელები არ უნდა იყოს ცარიელი." -#: commands/extension.c:334 +#: commands/extension.c:296 #, c-format msgid "Version names must not contain \"--\"." msgstr "ვერსიის სახელები არ უნდა შეიცავდეს \"---\"." -#: commands/extension.c:343 +#: commands/extension.c:305 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "ვერსიის სახელები არ უნდა დაიწყოს ან დასრულდეს \"-\"." -#: commands/extension.c:353 +#: commands/extension.c:315 #, c-format msgid "Version names must not contain directory separator characters." msgstr "ვერსიის სახელები არ უნდა შეიცავდეს საქაღალდის გამყოფ სიმბოლოებს." -#: commands/extension.c:507 +#: commands/extension.c:549 #, c-format msgid "extension \"%s\" is not available" msgstr "გაფართოება \"%s\" ხელმიუწვდომელია" -#: commands/extension.c:508 -#, c-format -msgid "Could not open extension control file \"%s\": %m." -msgstr "გაფართოების კონტროლის ფაილის (\"%s\") გახსნის შეცდომა: %m." - -#: commands/extension.c:510 +#: commands/extension.c:550 #, c-format msgid "The extension must first be installed on the system where PostgreSQL is running." msgstr "ჯერ გაფართოება უნდა დააყენოთ სისტემაზე, სადაც PostgreSQL-ია გაშვებული." -#: commands/extension.c:514 +#: commands/extension.c:564 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "გაფართოების კონტროლის ფაილის (\"%s\") გახსნის შეცდომა: %m" -#: commands/extension.c:537 commands/extension.c:547 +#: commands/extension.c:587 commands/extension.c:597 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "პარამეტრს \"%s\" მეორადი გაფართოების კონტროლის ფაილში ვერ დააყენებთ" -#: commands/extension.c:569 commands/extension.c:577 commands/extension.c:585 utils/misc/guc.c:3147 +#: commands/extension.c:619 commands/extension.c:627 commands/extension.c:635 utils/misc/guc.c:3144 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "პარამეტრს %s ლოგიკური მნიშვნელობა სჭირდება" -#: commands/extension.c:594 +#: commands/extension.c:644 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" კოდირების სწორ სახელს არ წარმოადგენს" -#: commands/extension.c:608 commands/extension.c:623 +#: commands/extension.c:658 commands/extension.c:673 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "პარამეტრი \"%s\" გაფართოებების სახელების სიას უნდა შეიცავდეს" -#: commands/extension.c:630 +#: commands/extension.c:680 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "უცნობი პარამეტრი \"%s\" ფაილში \"%s\"" -#: commands/extension.c:639 +#: commands/extension.c:689 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "როცა \"relocatable\" ჭეშმარიტია, პარამეტრს \"schema\" ვერ მიუთითებთ" -#: commands/extension.c:817 +#: commands/extension.c:865 +#, c-format +msgid "SQL statement \"%.*s\"" +msgstr "SQL ოპერატორი \"%.*s\"" + +#: commands/extension.c:894 +#, c-format +msgid "extension script file \"%s\", near line %d" +msgstr "გაფართოების სკრიპტის ფაილი \"%s\" ხაზთან %d" + +#: commands/extension.c:898 +#, c-format +msgid "extension script file \"%s\"" +msgstr "გაფართოების სკრიპტის ფაილი \"%s\"" + +#: commands/extension.c:1012 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "გაფართოების სკრიპტში ტრანზაქციის კონტროლის გამოსახულებები დაშვებული არაა" -#: commands/extension.c:897 +#: commands/extension.c:1094 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "გაფართოების (\"%s\") შექმნის წვდომა აკრძალულა" -#: commands/extension.c:900 +#: commands/extension.c:1097 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "ამ გაფართოების შესაქმნელად აუცილებელია მიმდინარე ბაზაზე პრივილეგია CREATE-ის ქონა." -#: commands/extension.c:901 +#: commands/extension.c:1098 #, c-format msgid "Must be superuser to create this extension." msgstr "გაფართოების შესაქმნელად საჭიროა ზემომხმარებლის უფლებები." -#: commands/extension.c:905 +#: commands/extension.c:1102 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "გაფართოების (\"%s\") განახლების წვდომა აკრძალულია" -#: commands/extension.c:908 +#: commands/extension.c:1105 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "ამ გაფართოების განახლებისთვის აუცილებელია მიმდინარე ბაზაზე პრივილეგია CREATE-ის ქონა." -#: commands/extension.c:909 +#: commands/extension.c:1106 #, c-format msgid "Must be superuser to update this extension." msgstr "გაფართოების გასაახლებლად საჭიროა ზემომხმარებლის უფლებები." -#: commands/extension.c:1042 +#: commands/extension.c:1239 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "არასწორი სიმბოლო გაფართოების მფლობელში: არ უნდა შეიცავდეს სიმბოლოებს სიიდან \"%s\"" -#: commands/extension.c:1066 commands/extension.c:1093 +#: commands/extension.c:1263 commands/extension.c:1290 #, c-format msgid "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" msgstr "არასწორი სიმბოლო გაფართოებაში \"%s\": სქემა: არ უნდა შეიცავდეს სიმბოლოებს სიიდან \"%s\"" -#: commands/extension.c:1288 +#: commands/extension.c:1485 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "გაფართოებას \"%s\" ვერსიიდან \"%s\" ვერსიამდე \"%s\" განახლების ბილიკი არ გააჩნია" -#: commands/extension.c:1496 commands/extension.c:3089 +#: commands/extension.c:1693 commands/extension.c:3357 #, c-format msgid "version to install must be specified" msgstr "საჭიროა დასაყენებელი ვერსიის მითითება" -#: commands/extension.c:1533 +#: commands/extension.c:1730 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "გაფართოებას \"%s\" ვერსიისთვის \"%s\" არც დაყენების სკრიპტი გააჩნია, არც განახლების ბილიკი" -#: commands/extension.c:1567 +#: commands/extension.c:1764 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "გაფართოება \"%s\" დაყენებული უნდა იყოს სქემაში \"%s\"" -#: commands/extension.c:1727 +#: commands/extension.c:1924 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "აღმოჩენილია ციკლური დამოკიდებულებები \"%s\" და \"%s\" გაფართოებებს შორის" -#: commands/extension.c:1732 +#: commands/extension.c:1929 #, c-format msgid "installing required extension \"%s\"" msgstr "მოთხოვნილი გაფართოების დაყენება: \"%s\"" -#: commands/extension.c:1755 +#: commands/extension.c:1952 #, c-format msgid "required extension \"%s\" is not installed" msgstr "მოთხოვნილი გაფართოება დაყენებული არაა: %s" -#: commands/extension.c:1758 +#: commands/extension.c:1955 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "საჭირო გაფართოებების დასაყენებლად გამოიყენეთ CREATE EXTENSION ... CASCADE." -#: commands/extension.c:1793 +#: commands/extension.c:1990 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "გაფართოება \"%s\" უკვე არსებობს, გამოტოვება" -#: commands/extension.c:1800 +#: commands/extension.c:1997 #, c-format msgid "extension \"%s\" already exists" msgstr "გაფართოება \"%s\" უკვე არსებობს" -#: commands/extension.c:1811 +#: commands/extension.c:2008 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "ჩადგმული CREATE EXTENSION მხარდაუჭერელია" -#: commands/extension.c:1975 +#: commands/extension.c:2172 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "გაფართოების \"%s\" წაშლა შეუძლებელია, რადგან მიმდინარეობს მისი ჩასწორება" -#: commands/extension.c:2450 +#: commands/extension.c:2665 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s-ის გამოძახება მხოლოდ CREATE EXTENSION-ის მიერ შესრულებულ SQL სკრიპტიდან შეგიძლიათ" -#: commands/extension.c:2462 +#: commands/extension.c:2677 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u ცხრილს არ ეხება" -#: commands/extension.c:2467 +#: commands/extension.c:2682 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "ცხრილი (%s) არ წარმოადგენს იმ გაფართოების წევრს, რომლის შექმნაც მიმდინარეობს" -#: commands/extension.c:2813 +#: commands/extension.c:3081 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "გაფართოების (\"%s\") სქემაში (\"%s\") გადატანა შეუძლებელია იმიტომ, რომ გაფართოება სქემას შეიცავს" -#: commands/extension.c:2854 commands/extension.c:2948 +#: commands/extension.c:3122 commands/extension.c:3216 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "გაფართოებას SET SCHEMA-ის მხარდაჭერა არ გააჩნია: %s" -#: commands/extension.c:2911 +#: commands/extension.c:3179 #, c-format msgid "cannot SET SCHEMA of extension \"%s\" because other extensions prevent it" msgstr "გაფართოება \"%s\"-ის SET SCHEMA შეუძლებელია, რადგან ეს იკრძალება სხვა გაფართოებების მიერ" -#: commands/extension.c:2913 +#: commands/extension.c:3181 #, c-format msgid "Extension \"%s\" requests no relocation of extension \"%s\"." msgstr "გაფართოება \"%s\" გაფართოების \"%s\" გადაადგილებას არ მოითხოვს." -#: commands/extension.c:2950 +#: commands/extension.c:3218 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s არ წარმოადგენს გაფართოების სქემას \"%s\"" -#: commands/extension.c:3011 +#: commands/extension.c:3279 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "ჩადგმული ALTER EXTENSION მხარდაუჭერელია" -#: commands/extension.c:3100 +#: commands/extension.c:3368 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "გაფართოების %2$s ვერსია %1$s უკვე დაყენებულია" -#: commands/extension.c:3311 +#: commands/extension.c:3579 #, c-format msgid "cannot add an object of this type to an extension" msgstr "ამ ტიპის ობიექტის გაფართოებაზე დამატება შეუძლებელია" -#: commands/extension.c:3409 +#: commands/extension.c:3677 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "სქემის (\"%s\") გაფართოებაში (\"%s\") ჩამატება შეუძლებელია, რადგან სქემა გაფართოებას შეიცავს" -#: commands/extension.c:3491 commands/typecmds.c:4042 utils/fmgr/funcapi.c:725 +#: commands/extension.c:3759 commands/typecmds.c:4033 utils/fmgr/funcapi.c:725 #, c-format msgid "could not find multirange type for data type %s" msgstr "მონაცემების ტიპისთვის %s მრავალდიაპაზონიანი ტიპი ვერ ვიპოვე" -#: commands/extension.c:3532 +#: commands/extension.c:3801 #, c-format msgid "file \"%s\" is too large" msgstr "%s: ფაილი ძალიან დიდია" @@ -8239,7 +8240,7 @@ msgstr "გარე მონაცემების გადამტან 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 +8310,7 @@ msgstr "მომხმარებლის ბმა %s სერვერი 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" @@ -8354,629 +8355,674 @@ msgstr "გარსის ტიპის აღწერის შექმნ msgid "SQL function cannot accept shell type %s" msgstr "SQL ფუნქციებს %s გარსის ტიპის მიღება არ შეუძლიათ" -#: commands/functioncmds.c:250 +#: commands/functioncmds.c:251 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "აგრეგატს არ შეუძლია ცარიელი ტიპის მიღება: %s" -#: commands/functioncmds.c:255 +#: commands/functioncmds.c:257 #, c-format msgid "argument type %s is only a shell" msgstr "არგუმენტის ტიპი %s მხოლოდ გარსია" -#: commands/functioncmds.c:265 +#: commands/functioncmds.c:268 #, c-format msgid "type %s does not exist" msgstr "ტიპი \"%s\" არ არსებობს" -#: commands/functioncmds.c:279 +#: commands/functioncmds.c:283 #, c-format msgid "aggregates cannot accept set arguments" msgstr "აგრეგატებს არგუმენტების სეტის მიღება არ შეუძლიათ" -#: commands/functioncmds.c:283 +#: commands/functioncmds.c:288 #, c-format msgid "procedures cannot accept set arguments" msgstr "პროცედურებს არგუმენტების სეტის მიღება არ შეუძლიათ" -#: commands/functioncmds.c:287 +#: commands/functioncmds.c:293 #, c-format msgid "functions cannot accept set arguments" msgstr "ფუნქციებს არგუმენტების სეტის მიღება არ შეუძლიათ" -#: commands/functioncmds.c:297 +#: commands/functioncmds.c:304 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "VARIADIC პარამეტრი ბოლო შეყვანის პარამეტრი უნდა იყოს" -#: commands/functioncmds.c:317 +#: commands/functioncmds.c:325 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "VARIADIC პარამეტრი ბოლო უნდა იყოს" -#: commands/functioncmds.c:342 +#: commands/functioncmds.c:351 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC პარამეტრი მასივი უნდა იყოს" -#: commands/functioncmds.c:387 +#: commands/functioncmds.c:397 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "პარამეტრის სახელი \"%s\" ერთზე მეტჯერ გამოიყენება" -#: commands/functioncmds.c:405 +#: commands/functioncmds.c:416 #, c-format msgid "only input parameters can have default values" msgstr "ნაგულისხმევი მნიშვნელობების დაყენება მხოლოდ შემომავალ პარამეტრებზეა შესაძლებელი" -#: commands/functioncmds.c:420 +#: commands/functioncmds.c:432 #, c-format msgid "cannot use table references in parameter default value" msgstr "ცხრილის ბმის პარამეტრის ნაგულისხმევ მნიშვნელობად გამოყენება შეუძლებელია" -#: commands/functioncmds.c:444 +#: commands/functioncmds.c:457 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "შეყვანის პარამეტრებში, მას შემდეგ, რაც ერთს აქვს ნაგულისხმევი მნიშვნელობა, ის სხვებსაც უნდა ჰქონდეთ" -#: commands/functioncmds.c:454 +#: commands/functioncmds.c:468 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "პროცედური OUT პარამეტრები ვერ გამოჩნდება ერთის შემდეგ, რომელსაც ნაგულისხმევი მნიშვნელობა გააჩნია" -#: commands/functioncmds.c:596 commands/functioncmds.c:775 +#: commands/functioncmds.c:611 commands/functioncmds.c:790 #, c-format msgid "invalid attribute in procedure definition" msgstr "პროცედურის აღწერაში ნაპოვნია არასწორი ატრიბუტი" -#: commands/functioncmds.c:692 +#: commands/functioncmds.c:707 #, c-format msgid "support function %s must return type %s" msgstr "მხარდაჭერის ფუნქციამ (%s) უნდა დააბრუნოს ტიპი %s" -#: commands/functioncmds.c:703 +#: commands/functioncmds.c:718 #, c-format msgid "must be superuser to specify a support function" msgstr "მხარდაჭერის ფუნქციის მისათითებლად ზემომხმარებლის წვდომელია საჭირო" -#: commands/functioncmds.c:824 commands/functioncmds.c:1427 +#: commands/functioncmds.c:839 commands/functioncmds.c:1445 #, c-format msgid "COST must be positive" msgstr "COST დადებითი უნდა იყოს" -#: commands/functioncmds.c:832 commands/functioncmds.c:1435 +#: commands/functioncmds.c:847 commands/functioncmds.c:1453 #, c-format msgid "ROWS must be positive" msgstr "ROWS დადებითი უნდა იყოს" -#: commands/functioncmds.c:861 +#: commands/functioncmds.c:876 #, c-format msgid "no function body specified" msgstr "ფუნქციის ტანი მითითებული არაა" -#: commands/functioncmds.c:866 +#: commands/functioncmds.c:881 #, c-format msgid "duplicate function body specified" msgstr "მითითებულია ფუნქციის დუბლირებული ტანი" -#: commands/functioncmds.c:871 +#: commands/functioncmds.c:886 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "" -#: commands/functioncmds.c:913 +#: commands/functioncmds.c:928 #, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "ბრჭყალების არმქონე ტანის მატარებელ SQL ფუნქციას პოლიმორფული არგუმენტები არ შეიძლება ჰქონდეს" -#: commands/functioncmds.c:939 commands/functioncmds.c:958 +#: commands/functioncmds.c:954 commands/functioncmds.c:973 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s ბრჭყალგარეშე SQL ფუნქციის სხეულში ჯერ მხარდაჭერილი არაა" -#: commands/functioncmds.c:986 +#: commands/functioncmds.c:1001 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "ენისთვის მხოლოდ ერთი AS არის საჭირო: %s" -#: commands/functioncmds.c:1091 +#: commands/functioncmds.c:1107 #, c-format msgid "no language specified" msgstr "ენა არ არის მითითებული" -#: commands/functioncmds.c:1099 commands/functioncmds.c:2104 commands/proclang.c:235 +#: commands/functioncmds.c:1115 commands/functioncmds.c:2135 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:1117 commands/functioncmds.c:2137 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "ენის ბაზაში შესატვირთად გამოიყენეთ CREATE EXTENSION." -#: commands/functioncmds.c:1134 commands/functioncmds.c:1419 +#: commands/functioncmds.c:1150 commands/functioncmds.c:1437 #, c-format msgid "only superuser can define a leakproof function" msgstr "leakproof ატრიბუტის მქონე ფუნქციის აღწერა მხოლოდ ზემომხმარებელს შეუძლია" -#: commands/functioncmds.c:1185 +#: commands/functioncmds.c:1202 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "\"OUT\" პარამეტრების გამო ფუნქციის შედეგის ტიპი %s უნდა იყოს" -#: commands/functioncmds.c:1198 +#: commands/functioncmds.c:1215 #, c-format msgid "function result type must be specified" msgstr "ფუნქციის შედეგის ტიპის მითითება აუცილებელია" -#: commands/functioncmds.c:1251 commands/functioncmds.c:1439 +#: commands/functioncmds.c:1268 commands/functioncmds.c:1457 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS შესაფერისი არაა, როცა ფუნქცია სეტს არ აბრუნებს" -#: commands/functioncmds.c:1546 +#: commands/functioncmds.c:1564 #, c-format msgid "source data type %s is a pseudo-type" msgstr "საწყისი მონაცემთა ტიპი %s ფსევდო ტიპია" -#: commands/functioncmds.c:1552 +#: commands/functioncmds.c:1570 #, c-format msgid "target data type %s is a pseudo-type" msgstr "საბოლოო მონაცემთა ტიპი %s ფსევდო ტიპია" -#: commands/functioncmds.c:1576 +#: commands/functioncmds.c:1594 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "მოხდება გარდაქმნის დაიგნორება იმის გამო, რომ მონაცემების საწყისი ტიპი დომენს წარმოადგენს" -#: commands/functioncmds.c:1581 +#: commands/functioncmds.c:1599 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "მოხდება გარდაქმნის დაიგნორება იმის გამო, რომ მონაცემების სამიზნე ტიპი დომენს წარმოადგენს" -#: commands/functioncmds.c:1606 +#: commands/functioncmds.c:1624 #, c-format msgid "cast function must take one to three arguments" msgstr "გარდაქმნის ფუნქციამ ერთიდან სამ არგუმენტამდე უნდა მიიღოს" -#: commands/functioncmds.c:1612 +#: commands/functioncmds.c:1630 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "" -#: commands/functioncmds.c:1616 +#: commands/functioncmds.c:1634 #, c-format msgid "second argument of cast function must be type %s" msgstr "გარდაქმნის ფუნქციის მეორე არგუმენტის ტიპი %s უნდა იყოს" -#: commands/functioncmds.c:1621 +#: commands/functioncmds.c:1639 #, c-format msgid "third argument of cast function must be type %s" msgstr "გარდაქმნის ფუნქციის მესამე არგუმენტის ტიპი %s უნდა იყოს" -#: commands/functioncmds.c:1628 +#: commands/functioncmds.c:1646 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "" -#: commands/functioncmds.c:1639 +#: commands/functioncmds.c:1657 #, c-format msgid "cast function must not be volatile" msgstr "გარდაქმნის ფუნქცია ცვალებადი არ უნდა იყოს" -#: commands/functioncmds.c:1644 +#: commands/functioncmds.c:1662 #, c-format msgid "cast function must be a normal function" msgstr "გარდაქმნის ფუნქცია ნორმალური ფუნქცია უნდა იყოს" -#: commands/functioncmds.c:1648 +#: commands/functioncmds.c:1666 #, c-format msgid "cast function must not return a set" msgstr "გარდაქმნის ფუნქციამ სეტი არ უნდა დააბრუნოს" -#: commands/functioncmds.c:1674 +#: commands/functioncmds.c:1692 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "\"WITHOUT FUNCTION\"-ის გარდაქმნის შესაქმნელად ზეომხმარებელი უნდა ბრძანდებოდეთ" -#: commands/functioncmds.c:1689 +#: commands/functioncmds.c:1707 #, c-format msgid "source and target data types are not physically compatible" msgstr "საწყისი და სამიზნე მონაცემის ტიპები ფიზიკურად შეუთავსებელია" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1727 #, 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:1733 #, c-format msgid "array data types are not binary-compatible" msgstr "მასივის მონაცემების ტიპები შეუთავსებელია ორობით დონეზე" -#: commands/functioncmds.c:1733 +#: commands/functioncmds.c:1741 +#, c-format +msgid "range data types are not binary-compatible" +msgstr "შუალედის მონაცემის ტიპები შეუთავსებელია ორობით დონეზე" + +#: commands/functioncmds.c:1747 +#, c-format +msgid "enum data types are not binary-compatible" +msgstr "მონაცემების ჩამონათვალის ტიპები შეუთავსებელია ორობით დონეზე" + +#: commands/functioncmds.c:1764 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "დომენის მონაცემების ტიპები შეუთავსებელია ორობით დონეზე" -#: commands/functioncmds.c:1743 +#: commands/functioncmds.c:1774 #, c-format msgid "source data type and target data type are the same" msgstr "საწყისი და სამიზნე მონაცემების ტიპები ერთი და იგივეა" -#: commands/functioncmds.c:1776 +#: commands/functioncmds.c:1807 #, c-format msgid "transform function must not be volatile" msgstr "გარდაქმნის ფუნქცია ცვალებადი არ უნდა იყოს" -#: commands/functioncmds.c:1780 +#: commands/functioncmds.c:1811 #, c-format msgid "transform function must be a normal function" msgstr "გარდაქმნის ფუნქცია ნორმალური ფუნქცია უნდა იყოს" -#: commands/functioncmds.c:1784 +#: commands/functioncmds.c:1815 #, c-format msgid "transform function must not return a set" msgstr "გარდაქმნის ფუნქციამ სეტი არ უნდა დააბრუნოს" -#: commands/functioncmds.c:1788 +#: commands/functioncmds.c:1819 #, c-format msgid "transform function must take one argument" msgstr "გარდაქმნის ფუნქციამ ერთი არგუმენტი უნდა მიიღოს" -#: commands/functioncmds.c:1792 +#: commands/functioncmds.c:1823 #, c-format msgid "first argument of transform function must be type %s" msgstr "გარდაქმნის ფუნქციის პირველი არგუმენტის ტიპი %s უნდა იყოს" -#: commands/functioncmds.c:1831 +#: commands/functioncmds.c:1862 #, c-format msgid "data type %s is a pseudo-type" msgstr "მონაცემთა ტიპი %s ფსევდო ტიპია" -#: commands/functioncmds.c:1837 +#: commands/functioncmds.c:1868 #, c-format msgid "data type %s is a domain" msgstr "მონაცემების ტიპი %s დომენია" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1908 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "\"FROM SQL\" ფუნქციის დაბრუნებული მონაცემები აუცილებლად უნდა იყოს: %s" -#: commands/functioncmds.c:1903 +#: commands/functioncmds.c:1934 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "" -#: commands/functioncmds.c:1930 +#: commands/functioncmds.c:1961 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "გადაყვანა ტიპისთვის %s ენა \"%s\" უკვე არსებობს" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:2047 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "გადაყვანა ტიპისთვის %s ენა \"%s\" არ არსებობს" -#: commands/functioncmds.c:2040 +#: commands/functioncmds.c:2071 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "ფუნქცია (%s) სქემაში (%s) უკვე არსებობს" -#: commands/functioncmds.c:2091 +#: commands/functioncmds.c:2122 #, c-format msgid "no inline code specified" msgstr "ჩადგმული კოდი მითითებული არაა" -#: commands/functioncmds.c:2137 +#: commands/functioncmds.c:2168 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "" -#: commands/functioncmds.c:2232 +#: commands/functioncmds.c:2263 #, 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:659 #, c-format msgid "must specify at least one column" msgstr "უნდა მიეთითოს მინიმუმ ერთი სვეტი" -#: commands/indexcmds.c:651 +#: commands/indexcmds.c:663 #, c-format msgid "cannot use more than %d columns in an index" msgstr "ინდექსში %d სვეტზე მეტს ვერ გამოიყენებთ" -#: commands/indexcmds.c:694 +#: commands/indexcmds.c:712 #, c-format msgid "cannot create index on relation \"%s\"" msgstr "ურთიერთბაზე \"%s\" ინდექსის შექმნა შეიძლებელია" -#: commands/indexcmds.c:720 +#: commands/indexcmds.c:738 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "ინდექსს დაყოფილ ცხრილზე %s პარალელურად ვერ შექმნით" -#: commands/indexcmds.c:730 +#: commands/indexcmds.c:748 #, 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:786 commands/tablecmds.c:892 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:818 commands/tablecmds.c:923 commands/tablecmds.c:3710 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "pg_global ცხრილის სივრცეში მხოლოდ გაზიარებული ურთიერთობების მოთავსება შეგიძლიათ" -#: commands/indexcmds.c:833 +#: commands/indexcmds.c:851 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "მოძველებული მეთოდი \"rtree\" წვდომის მეთოდით \"gist\" ჩანაცვლდება" -#: commands/indexcmds.c:854 +#: commands/indexcmds.c:872 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "სწვდომის მეთოდს (%s) უნიკალური ინდექსების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:859 +#: commands/indexcmds.c:877 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "სწვდომის მეთოდს (%s) ჩასმული სვეტების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:864 +#: commands/indexcmds.c:882 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "სწვდომის მეთოდს (%s) მრავალსვეტიანი ინდექსების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:869 +#: commands/indexcmds.c:887 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "სწვდომის მეთოდს (%s) გამორიცხვის შეზღუდვების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:998 +#: commands/indexcmds.c:892 #, c-format -msgid "cannot match partition key to an index using access method \"%s\"" -msgstr "წვდომის მეთოდით \"%s\" დანაყოფის გასაღების ინდექსთან დამთხვევა შეუძლებელია" +msgid "access method \"%s\" does not support WITHOUT OVERLAPS constraints" +msgstr "სწვდომის მეთოდს (%s) WITHOUT OVERLAPS შეზღუდვების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:1008 +#: commands/indexcmds.c:1019 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "მხარდაუჭერელი %s შეზღუდვა დანაყოფის გასაღების აღწერით" -#: commands/indexcmds.c:1010 +#: commands/indexcmds.c:1021 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "" -#: commands/indexcmds.c:1060 +#: commands/indexcmds.c:1056 commands/indexcmds.c:2469 commands/indexcmds.c:2488 executor/execReplication.c:329 parser/parse_cte.c:303 parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1410 utils/adt/array_userfuncs.c:1553 utils/adt/arrayfuncs.c:3864 utils/adt/arrayfuncs.c:4419 utils/adt/arrayfuncs.c:6440 utils/adt/rowtypes.c:1220 +#, c-format +msgid "could not identify an equality operator for type %s" +msgstr "ტიპისთვის \"%s\" ტოლობის ფუნქცია ვერ ვიპოვე" + +#: commands/indexcmds.c:1057 commands/indexcmds.c:2491 +#, c-format +msgid "There is no suitable operator in operator family \"%s\" for access method \"%s\"." +msgstr "ვერ ვიპოვე შესაბამისი ოპერატორი ოპერატორების ოჯახში \"%s\" წვდომის მეთოდისთვის \"%s\"." + +#: commands/indexcmds.c:1077 #, 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:1093 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "დაყოფილ ცხრილზე არსებული უნიკალური შეზღუდვა ყველა დაყოფის სვეტს უნდა შეიცავდეს" -#: commands/indexcmds.c:1077 +#: commands/indexcmds.c:1094 #, 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:1116 commands/indexcmds.c:1147 #, c-format msgid "index creation on system columns is not supported" msgstr "სისტემური სვეტებზე ინდექსების შექმნა მხარდაუჭერელია" -#: commands/indexcmds.c:1344 tcop/utility.c:1515 +#: commands/indexcmds.c:1123 +#, c-format +msgid "primary keys on virtual generated columns are not supported" +msgstr "ვირტუალურ გენერირებულ სვეტებზე ძირითადი გასაღებები მხარდაჭერილი არაა" + +#: commands/indexcmds.c:1125 commands/indexcmds.c:1164 +#, c-format +msgid "unique constraints on virtual generated columns are not supported" +msgstr "ვირტუალურ გენერირებულ სვეტებზე უნიკალური შეზღუდვები მხარდაჭერილი არაა" + +#: commands/indexcmds.c:1126 commands/indexcmds.c:1165 +#, c-format +msgid "indexes on virtual generated columns are not supported" +msgstr "ვირტუალურ გენერირებულ სვეტებზე ინდექსების შექმნა მხარდაჭერილი არაა" + +#: commands/indexcmds.c:1397 tcop/utility.c:1518 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "დაყოფილ ცხრილზე (%s) უნიკალური ინდექსის შექმნა შეუძლებელია" -#: commands/indexcmds.c:1346 tcop/utility.c:1517 +#: commands/indexcmds.c:1399 tcop/utility.c:1520 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "ცხრილი (%s) შეიცავს დანაყოფებს, რომლებც გარე ცხრილებია." -#: commands/indexcmds.c:1831 +#: commands/indexcmds.c:1857 #, 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:1954 parser/parse_utilcmd.c:2714 parser/parse_utilcmd.c:2897 #, 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:1978 parser/parse_utilcmd.c:1967 #, c-format msgid "expressions are not supported in included columns" msgstr "ჩასმულ სვეტებში გამოსახულებები მხარდაჭერილი არაა" -#: commands/indexcmds.c:1975 +#: commands/indexcmds.c:2019 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "ფუნქციები ინდექსის გამოსახულებაში მონიშნეთ, როგორც IMMUTABLE" -#: commands/indexcmds.c:1990 +#: commands/indexcmds.c:2034 #, c-format msgid "including column does not support a collation" msgstr "ჩასმულ სვეტს კოლაციის მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:1994 +#: commands/indexcmds.c:2038 #, c-format msgid "including column does not support an operator class" msgstr "ჩასმულ სვეტს ოპერატორის კლასის მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:1998 +#: commands/indexcmds.c:2042 #, c-format msgid "including column does not support ASC/DESC options" msgstr "ჩასმულ სვეტს ASC/DESC პარამეტრების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2002 +#: commands/indexcmds.c:2046 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "ჩასმულ სვეტს NULLS FIRST/LAST მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2044 +#: commands/indexcmds.c:2089 #, 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:2097 commands/tablecmds.c:19917 commands/typecmds.c:812 parser/parse_expr.c:2801 parser/parse_type.c:568 parser/parse_utilcmd.c:4043 utils/adt/misc.c:630 #, c-format msgid "collations are not supported by type %s" msgstr "ტიპს \"%s\" კოლაციების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2117 +#: commands/indexcmds.c:2164 #, c-format msgid "operator %s is not commutative" msgstr "ოპერატორი %s არაკომუტაციურია" -#: commands/indexcmds.c:2119 +#: commands/indexcmds.c:2166 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "გამორიცხვის შეზღუდვებში მხოლოდ კომუტაციური ოპერატორების გამოყენება შეგიძლიათ." -#: commands/indexcmds.c:2145 +#: commands/indexcmds.c:2176 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "ოპერატორი (%s) ოპერატორის ოჯახის (%s) წევრი არაა" -#: commands/indexcmds.c:2148 +#: commands/indexcmds.c:2179 #, 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:2228 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "წვდომის მეთოდს \"%s\" ASC/DESC პარამეტრების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2188 +#: commands/indexcmds.c:2233 #, 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:2277 commands/tablecmds.c:19942 commands/tablecmds.c:19948 commands/typecmds.c:2341 #, 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:2279 #, 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:2308 commands/indexcmds.c:2316 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:2330 commands/typecmds.c:2329 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "ოპერატორის კლასი \"%s\" მონაცემების ტიპს %s არ იღებს" -#: commands/indexcmds.c:2375 +#: commands/indexcmds.c:2420 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "მონაცემის ტიპისთვის %s ერთზე მეტი ნაგულისხმევი ოპერატორის კლასი არსებობს" -#: commands/indexcmds.c:2703 +#: commands/indexcmds.c:2470 commands/indexcmds.c:2489 +#, c-format +msgid "could not identify an overlaps operator for type %s" +msgstr "ვერ აღმოვაჩინე გადაფარვების ოპერატორი ტიპისთვის %s" + +#: commands/indexcmds.c:2471 commands/indexcmds.c:2490 +#, c-format +msgid "could not identify a contained-by operator for type %s" +msgstr "ტიპისთვის \"%s\" ოპერატორი constained-by ვერ ვიპოვე" + +#: commands/indexcmds.c:2472 commands/tablecmds.c:10333 +#, c-format +msgid "Could not translate compare type %d for operator family \"%s\", input type %s, access method \"%s\"." +msgstr "ვერ ვთარგმნე შედარების ტიპი %d ოპერატორის ოჯახისთვის \"%s\". შეყვანის ტიპი %s, წვდომის მეთოდი \"%s\"." + +#: commands/indexcmds.c:2812 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "\"REINDEX\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/indexcmds.c:2935 +#: commands/indexcmds.c:3044 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "ცხრილს \"%s\" არ გააჩნია ინდექსები, რომლების პარალელური რეინდექსიც შესაძლებელია" -#: commands/indexcmds.c:2949 +#: commands/indexcmds.c:3058 #, 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:3105 commands/indexcmds.c:3616 commands/indexcmds.c:3746 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "სისტემური კატალოგების ერთდროული რეინდექსი შეუძლებელია" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3129 #, c-format msgid "can only reindex the currently open database" msgstr "შესაძლებელია მხოლოდ ამჟამად ღია ბაზის რეინდექსი" -#: commands/indexcmds.c:3112 +#: commands/indexcmds.c:3221 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "სისტემური კატალოგების ერთდროული რეინდექსი შეუძლებელია. ყველას გამოტოვება" -#: commands/indexcmds.c:3145 +#: commands/indexcmds.c:3254 #, c-format msgid "cannot move system relations, skipping all" msgstr "სისტემური დანაყოფების გადაადგილება შეუძლებელია. ყველას გამოტოვება" -#: commands/indexcmds.c:3191 +#: commands/indexcmds.c:3300 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "დაყოფილი ცხრილის რეინდექსისას: \"%s.%s\"" -#: commands/indexcmds.c:3194 +#: commands/indexcmds.c:3303 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "დაყოფილი ინდექსის რეინდექსისას: \"%s.%s\"" -#: commands/indexcmds.c:3387 commands/indexcmds.c:4255 +#: commands/indexcmds.c:3496 commands/indexcmds.c:4388 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "\"%s.%s\"-ის რეინდექსი დასრულდა" -#: commands/indexcmds.c:3539 commands/indexcmds.c:3592 +#: commands/indexcmds.c:3648 commands/indexcmds.c:3701 #, c-format msgid "skipping reindex of invalid index \"%s.%s\"" msgstr "რეინდექსის გამოტოვება არასწორი ინდექსისთვის \"%s.%s\"" -#: commands/indexcmds.c:3542 commands/indexcmds.c:3595 +#: commands/indexcmds.c:3651 commands/indexcmds.c:3704 #, c-format msgid "Use DROP INDEX or REINDEX INDEX." msgstr "გამოიყენეთ DROP INDEX ან REINDEX INDEX." -#: commands/indexcmds.c:3546 +#: commands/indexcmds.c:3655 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "გამორიცხვის შეზღუდვის ინდექსის \"%s.%s\" პარალელური რეინდექსი შეუძლებელია. გამოტოვება" -#: commands/indexcmds.c:3702 +#: commands/indexcmds.c:3811 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "ამ ტიპის ურთიერთობის პარალელური რეინდექსი შეუძლებელია" -#: commands/indexcmds.c:3720 +#: commands/indexcmds.c:3829 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "არაგაზიარებული ურთიერთობის ცხრილების სივრცეში \"%s\" გადატანა შეუძლებელია" -#: commands/indexcmds.c:4236 commands/indexcmds.c:4248 +#: commands/indexcmds.c:4369 commands/indexcmds.c:4381 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "\"%s.%s\"-ის რეინდექსი დასრულდა" -#: commands/indexcmds.c:4238 commands/indexcmds.c:4257 +#: commands/indexcmds.c:4371 commands/indexcmds.c:4390 #, c-format msgid "%s." msgstr "%s." @@ -8986,252 +9032,272 @@ msgstr "%s." msgid "cannot lock relation \"%s\"" msgstr "ურთიერთობის დაბლოკვა (\"%s\") შეუძლებელია" -#: commands/matview.c:190 +#: commands/matview.c:208 #, 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:214 gram.y:19148 #, c-format msgid "%s and %s options cannot be used together" msgstr "პარამეტრები %s და %s შეუთავსებლებია" -#: commands/matview.c:253 +#: commands/matview.c:273 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "მატერიალიზებული ხედის (%s) პარალელური განახლება შეუძლებელია" -#: commands/matview.c:256 +#: commands/matview.c:276 #, 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:683 #, 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:685 #, c-format msgid "Row: %s" msgstr "მწკრივი: %s" -#: commands/opclasscmds.c:123 +#: commands/matview.c:839 +#, c-format +msgid "could not find suitable unique index on materialized view" +msgstr "მატერიალიზებულ ხედზე შესაბამისი უნიკალური ინდექსი ვერ ვიპოვე" + +#: 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 "ორობითი ხის შედარებით ფუნქციებს ორი არგუმენტი უნდა ჰქონდეთ" +msgid "ordering 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 "ორობითი ხის შედარებით ფუნქციებმა ორი მთელი რიცხვი უნდა დააბრუნოს" +msgid "ordering 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\"" +msgid "ordering 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 "ორობითი ხის დალაგების ფუნქციებმა არაფერი უნდა დააბრუნონ" +msgid "ordering 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 არგუმენტი უნდა ჰქონდეთ" +msgid "ordering in_range functions must have five arguments" +msgstr "in_range ფუნქციების დალაგებას ორი არგუმენტი უნდა ჰქონდეს" -#: commands/opclasscmds.c:1298 +#: commands/opclasscmds.c:1299 #, c-format -msgid "btree in_range functions must return boolean" -msgstr "ორობითი ხის in_range ფუნქციები ლოგიკურ მნიშვნელობებს უნდა აბრუნებდნენ" +msgid "ordering 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 "ორობითი ტოლობის ასლის ფუნქციებს ერთი არგუმენტი უნდა ჰქონდეთ" +msgid "ordering 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 "ორობითი ტოლობის ასლის ფუნქციებმა ლოგიკური მნიშვნელობა უნდა დააბრუნონ" +msgid "ordering 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 "ორობითი ტოლობის ასლის ფუნქციები ჯვარედინი ტიპის არ უნდა იყოს" +msgid "ordering equal image functions must not be cross-type" +msgstr "ტოლი ასლი ფუნქციების დალაგება ჯვარედინი ტიპის არ უნდა იყოს" -#: commands/opclasscmds.c:1341 +#: commands/opclasscmds.c:1340 +#, c-format +msgid "btree skip support functions must accept type \"internal\"" +msgstr "btree-ის გამოტოვების მხარდაჭერის ფუნქცია უნდა იღებდეს ტიპს \"internal\"" + +#: commands/opclasscmds.c:1344 +#, c-format +msgid "btree skip support functions must return void" +msgstr "btree-ის გამოტოვების მხარდაჭერის ფუნქცია ცარიელ მნიშვნელობას უნდა აბრუნებდეს" + +#: commands/opclasscmds.c:1357 +#, c-format +msgid "btree skip support functions must not be cross-type" +msgstr "btree-ის გამოტოვების მხარდაჭერის ფუნქციები ჯვარედინი ტიპის არ უნდა იყოს" + +#: commands/opclasscmds.c:1367 #, c-format msgid "hash function 1 must have one argument" msgstr "ჰეშის ფუნქცია 1-ს ერთი არგუმენტი უნდა ჰქონდეს" -#: commands/opclasscmds.c:1345 +#: commands/opclasscmds.c:1371 #, c-format msgid "hash function 1 must return integer" msgstr "ჰეშის ფუნქცია 1-მა მთელი რიცხვი უნდა დააბრუნოს" -#: commands/opclasscmds.c:1352 +#: commands/opclasscmds.c:1378 #, c-format msgid "hash function 2 must have two arguments" msgstr "ჰეშის ფუნქცია 2-ს ორი არგუმენტი უნდა ჰქონდეს" -#: commands/opclasscmds.c:1356 +#: commands/opclasscmds.c:1382 #, c-format msgid "hash function 2 must return bigint" msgstr "ჰეშის ფუნქცია 2-მა bigint უნდა დააბრინოს" -#: commands/opclasscmds.c:1381 +#: commands/opclasscmds.c:1407 #, c-format msgid "associated data types must be specified for index support function" msgstr "ინდექსის მხარდაჭერის ფუნქციისთვის ასოცირებული მონაცემის ტიპების მითითება აუცილებელია" -#: commands/opclasscmds.c:1406 +#: commands/opclasscmds.c:1432 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "ფუნქციის ნომერი %d (%s,%s)-სთვის ერთზე მეტჯერ ჩნდება" -#: commands/opclasscmds.c:1413 +#: commands/opclasscmds.c:1439 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "ოპერატორის ნომერი %d (%s,%s)-სთვის ერთზე მეტჯერ ჩნდება" -#: commands/opclasscmds.c:1459 +#: commands/opclasscmds.c:1485 #, 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:1614 #, 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:1769 #, 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:1809 #, 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:1840 #, 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:1863 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდისთვის \"%s\" სქემაში \"%s\" უკვე არსებობს" @@ -9301,7 +9367,7 @@ msgstr "ოპერატორის ატრიბუტის შეცვ 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:1800 commands/tablecmds.c:2400 commands/tablecmds.c:3824 commands/tablecmds.c:6793 commands/tablecmds.c:10089 commands/tablecmds.c:19498 commands/tablecmds.c:19533 commands/trigger.c:318 commands/trigger.c:1337 commands/trigger.c:1447 rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:779 rewrite/rewriteRemove.c:74 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "წვდომა აკრძალულია: '%s\" სისტემური კატალოგია" @@ -9341,52 +9407,52 @@ msgstr "წესი \"%s\" ცხრილისთვის \"%s\" არ ა msgid "only USING expression allowed for SELECT, DELETE" msgstr "\"SELECT\" და DELETE-სთვის მხოლოდ USING გამოსახულებაა ნებადართული" -#: commands/portalcmds.c:60 commands/portalcmds.c:181 commands/portalcmds.c:232 +#: commands/portalcmds.c:63 commands/portalcmds.c:192 commands/portalcmds.c:243 #, c-format msgid "invalid cursor name: must not be empty" msgstr "კურსორის არასწორი სახელი. ცარიელი არ უნდა იყოს" -#: commands/portalcmds.c:72 +#: commands/portalcmds.c:75 #, c-format 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:200 commands/portalcmds.c:253 executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "კურსორი \"%s\" არ არსებობს" -#: commands/prepare.c:72 +#: commands/prepare.c:75 #, c-format msgid "invalid statement name: must not be empty" msgstr "ოეპრატორის არასწორი სახელი: ცარიელი არ უნდა იყოს" -#: commands/prepare.c:227 commands/prepare.c:232 +#: commands/prepare.c:231 commands/prepare.c:236 #, c-format msgid "prepared statement is not a SELECT" msgstr "მომზადებული ოპერატორი SELECT არაა" -#: commands/prepare.c:292 +#: commands/prepare.c:296 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "პარამეტრების არასწორი რაოდენობა მომზადებული გამოსახულებისთვის \"%s\"" -#: commands/prepare.c:294 +#: commands/prepare.c:298 #, c-format msgid "Expected %d parameters but got %d." msgstr "მოსალოდნელი %d პარამეტრის მაგიერ მივიღე %d." -#: commands/prepare.c:327 +#: commands/prepare.c:331 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "" -#: commands/prepare.c:411 +#: commands/prepare.c:415 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "მომზადებული ოპერატორი \"%s\" უკვე არსებობს" -#: commands/prepare.c:450 +#: commands/prepare.c:454 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "მომზადებული ოპერატორი \"%s\" არ არსებობს" @@ -9396,200 +9462,205 @@ msgstr "მომზადებული ოპერატორი \"%s\" ა 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:130 libpq/auth-oauth.c:850 postmaster/postmaster.c:1130 postmaster/postmaster.c:1232 utils/init/miscinit.c:1870 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "არასწორი სიის სინტაქსი პარამეტრში \"%s\"" -#: commands/publicationcmds.c:143 +#: commands/publicationcmds.c:149 #, c-format msgid "unrecognized value for publication option \"%s\": \"%s\"" msgstr "პუბლიკაციის პარამეტრის (\"%s\") უცნობი მნიშვნელობა: \"%s\"" -#: commands/publicationcmds.c:157 +#: commands/publicationcmds.c:170 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "პუბლიკაციის უცნობი პარამეტრი: \"%s\"" -#: commands/publicationcmds.c:198 +#: commands/publicationcmds.c:211 #, c-format msgid "no schema has been selected for CURRENT_SCHEMA" msgstr "'CURRENT_SCHEMA'-სთვის სქემა არჩეული არაა" -#: commands/publicationcmds.c:495 +#: commands/publicationcmds.c:592 msgid "System columns are not allowed." msgstr "სისტემური სვეტები დაუშვებელია." -#: commands/publicationcmds.c:502 commands/publicationcmds.c:507 commands/publicationcmds.c:524 +#: commands/publicationcmds.c:599 commands/publicationcmds.c:604 commands/publicationcmds.c:621 msgid "User-defined operators are not allowed." msgstr "მომხმარებლის მიერ აღწერილი ოპერატორები დაშვებული არაა." -#: commands/publicationcmds.c:548 +#: commands/publicationcmds.c:645 msgid "Only columns, constants, built-in operators, built-in data types, built-in collations, and immutable built-in functions are allowed." msgstr "დაშვებულია მხოლოდ სვეტები, მუდმივები, ჩაშენებული ოპერატორები, ჩაშენებული მონაცემის ტიპები, ჩაშენებული კოლაციები და არადადუმებადი ჩაშენებული ფუნქციები." -#: commands/publicationcmds.c:560 +#: commands/publicationcmds.c:657 msgid "User-defined types are not allowed." msgstr "მომხმარებლის მიერ განსაზღვრული ტიპები დაშვებული არაა." -#: commands/publicationcmds.c:563 +#: commands/publicationcmds.c:660 msgid "User-defined or built-in mutable functions are not allowed." msgstr "მომხმარებლის-მიერ-აღწერილი ან ჩაშენებული დადუმებადი ფუნქციები დაშვებული არაა." -#: commands/publicationcmds.c:566 +#: commands/publicationcmds.c:663 msgid "User-defined collations are not allowed." msgstr "მომხმარებლის მიერ განსაზღვრული კოლაციები დაუშვებელია." -#: commands/publicationcmds.c:576 +#: commands/publicationcmds.c:673 #, c-format msgid "invalid publication WHERE expression" msgstr "პუბლიკაციის არასწორი WHERE გამოსახულება" -#: commands/publicationcmds.c:629 +#: commands/publicationcmds.c:726 #, c-format msgid "cannot use publication WHERE clause for relation \"%s\"" msgstr "ურთიერთობისთვის \"%s\"გამოცემის პირობას WHERE ვერ გამოიყენებთ" -#: commands/publicationcmds.c:631 +#: commands/publicationcmds.c:728 #, c-format msgid "WHERE clause cannot be used for a partitioned table when %s is false." msgstr "დაყოფილ ცხრილზე პირობის WHERE გამოყენება შეუძლებელია, როცა %s ჭეშმარიტი არაა." -#: commands/publicationcmds.c:702 commands/publicationcmds.c:716 +#: commands/publicationcmds.c:801 commands/publicationcmds.c:815 #, c-format msgid "cannot use column list for relation \"%s.%s\" in publication \"%s\"" msgstr "შეუძლებელია სვეტების სიის გამოყენება ურთიერთობისთვის \"%s.%s\" პუბლიკაციაში \"%s\"" -#: commands/publicationcmds.c:705 +#: commands/publicationcmds.c:804 #, c-format msgid "Column lists cannot be specified in publications containing FOR TABLES IN SCHEMA elements." msgstr "გამოცემებში რომლებიც ელემენტებს FOR TABLES IN SCHEMA შეიცავენ, სვეტების სიას ვერ მიუთითებთ." -#: commands/publicationcmds.c:719 +#: commands/publicationcmds.c:818 #, c-format msgid "Column lists cannot be specified for partitioned tables when %s is false." msgstr "სვეტების სია შეუძლებელია მიუთითოთ დაყოფილ ცხრილს, როცა %s false-ა." -#: commands/publicationcmds.c:754 +#: commands/publicationcmds.c:855 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "'FOR ALL TABLES' პუბლიკაციის შექმნისთვის ზემომხმარებლის უფლებები აუცილებელია" -#: commands/publicationcmds.c:825 +#: commands/publicationcmds.c:930 #, c-format msgid "must be superuser to create FOR TABLES IN SCHEMA publication" msgstr "\"FOR TABLES IN SCHEMA\" პუბლიკაციის შესაქმნელად ზემომხმარებელი უნდა ბრძანდებოდეთ" -#: commands/publicationcmds.c:861 +#: commands/publicationcmds.c:966 #, c-format msgid "\"wal_level\" is insufficient to publish logical changes" msgstr "\"wal_level\" არასაკმარისია ლოგიკური ცვლილებების გამოსაქვეყნებლად" -#: commands/publicationcmds.c:862 +#: commands/publicationcmds.c:967 #, c-format msgid "Set \"wal_level\" to \"logical\" before creating subscriptions." msgstr "გამოწერების შექმნამდე საჭიროა \"wal_level\" -ის \"logical\" (ლოგიკურზე) დაყენება." -#: commands/publicationcmds.c:958 commands/publicationcmds.c:966 +#: commands/publicationcmds.c:1067 commands/publicationcmds.c:1075 #, c-format msgid "cannot set parameter \"%s\" to false for publication \"%s\"" msgstr "პარამეტრის (\"%s\") false-ზე დაყენება პუბლიკაციისთვის \"%s\" შეუძლებელია" -#: commands/publicationcmds.c:961 +#: commands/publicationcmds.c:1070 #, c-format msgid "The publication contains a WHERE clause for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "გამოცემა შეიცავს პირობას WHERE დაყოფილი ცხრილისთვის \"%s\", რაც, მაშინ, როცა \"%s\" ჭეშმარიტი არა, დაშვებული არაა." -#: commands/publicationcmds.c:969 +#: commands/publicationcmds.c:1078 #, c-format msgid "The publication contains a column list for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "გამოცემა შეიცავს სვეტების სიას დაყოფილი ცხრილისთვის \"%s\", რაც მაშინ, როცა \"%s\" ჭეშმარიტი არაა, დაუშვებელია." -#: commands/publicationcmds.c:1292 +#: commands/publicationcmds.c:1399 #, c-format msgid "cannot add schema to publication \"%s\"" msgstr "პუბლიკაციისთვის (%s) სქემის დამატება შეუძლებელია" -#: commands/publicationcmds.c:1294 +#: commands/publicationcmds.c:1401 #, c-format msgid "Schemas cannot be added if any tables that specify a column list are already part of the publication." msgstr "სქემების დამატება შეუძლებელია, თუ ნებისმიერი ცხრილი, რომელიც შეიცავს სვეტების სიას, რომელიც უკვე გამოცემის ნაწილია." -#: commands/publicationcmds.c:1342 +#: commands/publicationcmds.c:1449 #, c-format msgid "must be superuser to add or set schemas" msgstr "სქემის დამატების ან დაყენებისთვის ზემომხმარებლის უფლებებია საჭირო" -#: commands/publicationcmds.c:1351 commands/publicationcmds.c:1359 +#: commands/publicationcmds.c:1458 commands/publicationcmds.c:1466 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "პუბლიკაცია %s აღწერილია, როგორც FOR ALL TABLES" -#: commands/publicationcmds.c:1353 +#: commands/publicationcmds.c:1460 #, c-format msgid "Schemas cannot be added to or dropped from FOR ALL TABLES publications." msgstr "სქემების FOR ALL TABLES გამოცემებიდან წაშლა ან მასში ჩამატება შეუძლებელია." -#: commands/publicationcmds.c:1361 +#: commands/publicationcmds.c:1468 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "FOR ALL TABLES გამოცემებში ცხრილების ჩამატება ან მათი წაშლა შეუძლებელია." -#: commands/publicationcmds.c:1385 commands/publicationcmds.c:1424 commands/publicationcmds.c:1961 utils/cache/lsyscache.c:3634 +#: commands/publicationcmds.c:1492 commands/publicationcmds.c:1531 commands/publicationcmds.c:2068 utils/cache/lsyscache.c:3774 #, c-format msgid "publication \"%s\" does not exist" msgstr "პუბლიკაცია \"%s\" არ არსებობს" -#: commands/publicationcmds.c:1587 commands/publicationcmds.c:1650 +#: commands/publicationcmds.c:1694 commands/publicationcmds.c:1757 #, c-format msgid "conflicting or redundant WHERE clauses for table \"%s\"" msgstr "კონფლიქტური ან ზედმეტი WHERE პირობები ცხრილისთვის \"%s\"" -#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1662 +#: commands/publicationcmds.c:1701 commands/publicationcmds.c:1769 #, c-format msgid "conflicting or redundant column lists for table \"%s\"" msgstr "კონფლიქტური ან ზედმეტი სვეტის სიები ცხრილისთვის \"%s\"" -#: commands/publicationcmds.c:1796 +#: commands/publicationcmds.c:1903 #, c-format msgid "column list must not be specified in ALTER PUBLICATION ... DROP" msgstr "column list must not be specified in ALTER PUBLICATION ... DROP" -#: commands/publicationcmds.c:1808 +#: commands/publicationcmds.c:1915 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "ურთიერთობა (%s) პუბლიკაციის ნაწილს არ წარმოადგენს" -#: commands/publicationcmds.c:1815 +#: commands/publicationcmds.c:1922 #, c-format msgid "cannot use a WHERE clause when removing a table from a publication" msgstr "გამოცემის ცხრილიდან წაშლისას პირობას WHERE ვერ გამოიყენებთ" -#: commands/publicationcmds.c:1875 +#: commands/publicationcmds.c:1982 #, c-format msgid "tables from schema \"%s\" are not part of the publication" msgstr "ცხრილი სქემიდან \"%s\" პუბლიკაციის ნაწილს არ წარმოადგენს" -#: commands/publicationcmds.c:1918 commands/publicationcmds.c:1925 +#: commands/publicationcmds.c:2025 commands/publicationcmds.c:2032 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "პუბლიკაციის (%s) მფლობელის შეცვლის წვდომა აკრძალულია" -#: commands/publicationcmds.c:1920 +#: commands/publicationcmds.c:2027 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "FOR ALL TABLES გამოცემის მფლობელი ზემომხმარებელი უნდა იყოს." -#: commands/publicationcmds.c:1927 +#: commands/publicationcmds.c:2034 #, c-format msgid "The owner of a FOR TABLES IN SCHEMA publication must be a superuser." msgstr "FOR TABLES IN SCHEMA პუბლიკაციის მფლობელი ზემომხმარებელი უნდა იყოს." -#: commands/publicationcmds.c:1993 +#: commands/publicationcmds.c:2100 #, c-format msgid "publication with OID %u does not exist" msgstr "პუბლიკაცია OID-ით %u არ არსებობს" +#: commands/publicationcmds.c:2133 +#, c-format +msgid "%s requires a \"none\" or \"stored\" value" +msgstr "%s მოითხოვს მნიშვნელობას \"none' ან \"stored\"" + #: commands/schemacmds.c:109 commands/schemacmds.c:289 #, c-format msgid "unacceptable schema name \"%s\"" @@ -9630,127 +9701,127 @@ msgstr "ამ ტიპის ობიექტისთვის უსაფ 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)" +msgid "nextval: reached maximum value of sequence \"%s\" (%)" +msgstr "nextval: მიღწეულია მაქსიმალური მნიშვნელობა მიმდევრობისთვის \"%s\" (%)" -#: commands/sequence.c:760 +#: commands/sequence.c:767 #, c-format -msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" -msgstr "nextval: მიღწეულია მინიმალური მნიშვნელობა მიმდევრობისთვის \"%s\" (%lld)" +msgid "nextval: reached minimum value of sequence \"%s\" (%)" +msgstr "nextval: მიღწეულია მინიმალური მნიშვნელობა მიმდევრობისთვის \"%s\" (%)" -#: 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)" +msgid "setval: value % is out of bounds for sequence \"%s\" (%..%)" +msgstr "setval: მნიშვნელობა % საზღვრებს გარეთაა მიმდევრობისთვის \"%s\" (%..%)" -#: 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" +msgid "MAXVALUE (%) is out of range for sequence data type %s" +msgstr "MAXVALUE (%) მიმდევრობის მონაცემის ტიპის დიაპაზონს გარეთაა %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" +msgid "MINVALUE (%) is out of range for sequence data type %s" +msgstr "MINVALUE (%) მიმდევრობის მონაცემის ტიპის დიაპაზონს გარეთაა %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)-ზე ნაკლები არ უნდა იყოს" +msgid "MINVALUE (%) must be less than MAXVALUE (%)" +msgstr "MINVALUE (%)-ი MAXVALUE (%)-ზე ნაკლები არ უნდა იყოს" -#: 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)-ზე ნაკლები არ უნდა იყოს" +msgid "START value (%) cannot be less than MINVALUE (%)" +msgstr "START -ის მნიშვნელობა (%)-ი MINVALUE (%)-ზე ნაკლები არ უნდა იყოს" -#: 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)-ზე მეტი არ უნდა იყოს" +msgid "START value (%) cannot be greater than MAXVALUE (%)" +msgstr "START -ის მნიშვნელობა (%)-ი MAXVALUE (%)-ზე მეტი არ უნდა იყოს" -#: 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)-ზე ნაკლები არ უნდა იყოს" +msgid "RESTART value (%) cannot be less than MINVALUE (%)" +msgstr "RESTART -ის მნიშვნელობა (%) MINVALUE (%)-ზე ნაკლები არ უნდა იყოს" -#: 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)-ზე დიდი არ უნდა იყოს" +msgid "RESTART value (%) cannot be greater than MAXVALUE (%)" +msgstr "RESTART -ის მნიშვნელობა (%) MAXVALUE (%)-ზე დიდი არ უნდა იყოს" -#: commands/sequence.c:1564 +#: commands/sequence.c:1574 #, c-format -msgid "CACHE (%lld) must be greater than zero" -msgstr "CACHE (%lld) ნულზე მეტი უნდა იყოს" +msgid "CACHE (%) must be greater than zero" +msgstr "CACHE (%) ნულზე მეტი უნდა იყოს" -#: 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:16069 commands/tablecmds.c:18907 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "მიმდევრობა %s მიბმულია ცხრილზე \"%s\"." -#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1883 +#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1886 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "'CREATE STATISTICS'-ში მხოლოდ ერთი ურთიერთობაა დაშვებული" @@ -9775,1756 +9846,1912 @@ msgstr "სტატისტიკის ობიექტი უკვე ა msgid "cannot have more than %d columns in statistics" msgstr "სტატისტიკაში %d-ზე მეტი სვეტი ვერ გექნებათ" -#: commands/statscmds.c:247 commands/statscmds.c:270 commands/statscmds.c:304 +#: commands/statscmds.c:247 commands/statscmds.c:276 commands/statscmds.c:316 #, c-format msgid "statistics creation on system columns is not supported" msgstr "სისტემურ სვეტებზე სტატისტიკის შექმნა შეუძლებელია" -#: commands/statscmds.c:254 commands/statscmds.c:277 +#: commands/statscmds.c:253 commands/statscmds.c:282 commands/statscmds.c:322 +#, c-format +msgid "statistics creation on virtual generated columns is not supported" +msgstr "ვირტუალურ გენერირებულ სვეტებზე სტატისტიკის შექმნა მხარდაჭერილი არაა" + +#: commands/statscmds.c:260 commands/statscmds.c:289 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "სვეტს \"%s\" სტატისტიკაში ვერ გამოიყენებთ, რადგან მის ტიპს (\"%s\") ნაგულისხმევი ორობითი ხის ოპერატორის კლასი არ გააჩნია" -#: commands/statscmds.c:321 +#: commands/statscmds.c:339 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "" -#: commands/statscmds.c:342 +#: commands/statscmds.c:360 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "როცა სტატისტიკის აგება ერთ გამოსახულებაზე მიმდინარეობს, სტატისტიკის ტიპის მითითება შეუძლებელია" -#: commands/statscmds.c:371 +#: commands/statscmds.c:389 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "სტატისტიკის უცნობი ტიპი: \"%s\"" -#: commands/statscmds.c:400 +#: commands/statscmds.c:418 #, c-format msgid "extended statistics require at least 2 columns" msgstr "გაფართოებულ სტატისტიკას მინიმუმ 2 სვეტი სჭირდება" -#: commands/statscmds.c:418 +#: commands/statscmds.c:436 #, c-format msgid "duplicate column name in statistics definition" msgstr "სვეტის დუბლირებული სახელი სტატისტიკის აღწერაში" -#: commands/statscmds.c:453 +#: commands/statscmds.c:471 #, c-format msgid "duplicate expression in statistics definition" msgstr "დუბლირებული გამოსახულება სტატისტიკის აღწერაში" -#: commands/statscmds.c:628 commands/tablecmds.c:8628 +#: commands/statscmds.c:646 commands/tablecmds.c:8914 #, c-format msgid "statistics target %d is too low" msgstr "სტატისტიკის სამიზნე %d ძალიან დაბალია" -#: commands/statscmds.c:636 commands/tablecmds.c:8636 +#: commands/statscmds.c:654 commands/tablecmds.c:8922 #, c-format msgid "lowering statistics target to %d" msgstr "სტატისტიკის სამიზნის ჩამოწევა %d-მდე" -#: commands/statscmds.c:660 +#: commands/statscmds.c:678 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "სტატისტიკის ობიექტი \"%s.%s\" არ არსებობს, გამოტოვება" -#: commands/subscriptioncmds.c:275 commands/subscriptioncmds.c:372 -#, c-format -msgid "unrecognized subscription parameter: \"%s\"" -msgstr "უცნობი გამოწერის პარამეტრი: \"%s\"" - -#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:397 +#: commands/subscriptioncmds.c:331 replication/pgoutput/pgoutput.c:410 #, c-format msgid "unrecognized origin value: \"%s\"" msgstr "\"origin\"-ის უცნობი მნიშვნელობა: \"%s\"" -#: commands/subscriptioncmds.c:363 +#: commands/subscriptioncmds.c:354 #, c-format msgid "invalid WAL location (LSN): %s" msgstr "\"WAL\"-ის არასწორი მდებარეობა (LSN): %s" +#: commands/subscriptioncmds.c:363 +#, c-format +msgid "unrecognized subscription parameter: \"%s\"" +msgstr "უცნობი გამოწერის პარამეტრი: \"%s\"" + #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:387 commands/subscriptioncmds.c:394 commands/subscriptioncmds.c:401 commands/subscriptioncmds.c:423 commands/subscriptioncmds.c:439 +#: commands/subscriptioncmds.c:378 commands/subscriptioncmds.c:385 commands/subscriptioncmds.c:392 commands/subscriptioncmds.c:414 commands/subscriptioncmds.c:430 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s და %s ურთიერთგამომრიცხავი პარამეტრებია" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:429 commands/subscriptioncmds.c:445 +#: commands/subscriptioncmds.c:420 commands/subscriptioncmds.c:436 #, c-format msgid "subscription with %s must also set %s" msgstr "%s-ის გამოწერამ %s-იც უნდა დააყენოს" -#: commands/subscriptioncmds.c:506 +#: commands/subscriptioncmds.c:466 #, c-format msgid "could not receive list of publications from the publisher: %s" msgstr "გამომცემლისგან პუბლიკაციების სიის მიღება შეუძლებელია: %s" -#: commands/subscriptioncmds.c:538 +#: commands/subscriptioncmds.c:498 #, c-format msgid "publication %s does not exist on the publisher" msgid_plural "publications %s do not exist on the publisher" msgstr[0] "პუბლიკაცია \"%s\" არ არსებობს" msgstr[1] "პუბლიკაცია \"%s\" არ არსებობს" -#: commands/subscriptioncmds.c:626 +#: commands/subscriptioncmds.c:586 #, c-format msgid "permission denied to create subscription" msgstr "გამოწერის შექმნის წვდომა აკრძალულია" -#: commands/subscriptioncmds.c:627 +#: commands/subscriptioncmds.c:587 #, c-format msgid "Only roles with privileges of the \"%s\" role may create subscriptions." msgstr "გამოწერების შექმნა მხოლოდ \"%s\" როლის პრივილეგიების მქონეებს შეუძლიათ." -#: commands/subscriptioncmds.c:758 commands/subscriptioncmds.c:891 commands/subscriptioncmds.c:1524 replication/logical/tablesync.c:1345 replication/logical/worker.c:4503 +#: commands/subscriptioncmds.c:718 commands/subscriptioncmds.c:852 commands/subscriptioncmds.c:1594 #, c-format -msgid "could not connect to the publisher: %s" -msgstr "პუბლიკაციის სერვერთან მიერთების პრობლემა: %s" +msgid "subscription \"%s\" could not connect to the publisher: %s" +msgstr "გამოწერა \"%s\" ვერ უერთდება გამომცემელს: %s" -#: commands/subscriptioncmds.c:829 +#: commands/subscriptioncmds.c:790 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "გამომცემელზე შექმნილია რეპლიკაციის სეტი \"%s\"" -#: commands/subscriptioncmds.c:841 +#: commands/subscriptioncmds.c:802 #, c-format msgid "subscription was created, but is not connected" msgstr "გამოწერა შეიქმნა, მაგრამ მიერთებული არაა" -#: commands/subscriptioncmds.c:842 +#: commands/subscriptioncmds.c:803 #, c-format msgid "To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription." msgstr "რეპლიკაციის დასაწყებად ხელით უნდა შექმნათ რეპლიკაციის სლოტი, ჩართოთ გამოწერა და განაახლოთ გამოწერა." -#: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1590 commands/subscriptioncmds.c:1973 utils/cache/lsyscache.c:3684 +#: commands/subscriptioncmds.c:1070 +#, c-format +msgid "cannot set option \"%s\" for enabled subscription" +msgstr "ჩართული გამოწერისთვის პარამეტრის \"%s\" დაყენება შეუძლებელია" + +#: commands/subscriptioncmds.c:1084 +#, c-format +msgid "cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "გამოწერებისთვის, რომლებსაც სლოტის სახელი არ აქვთ, პარამეტრს %s ვერ დავაყენებ" + +#: commands/subscriptioncmds.c:1127 commands/subscriptioncmds.c:1663 commands/subscriptioncmds.c:2044 utils/cache/lsyscache.c:3824 #, c-format msgid "subscription \"%s\" does not exist" msgstr "გამოწერა \"%s\" არ არსებობს" -#: commands/subscriptioncmds.c:1166 commands/subscriptioncmds.c:1245 +#: commands/subscriptioncmds.c:1185 #, c-format msgid "cannot set %s for enabled subscription" msgstr "ჩართული გამოწერისთვის %s-ის დაყენება შეუძლებელია" -#: commands/subscriptioncmds.c:1233 +#: commands/subscriptioncmds.c:1270 +#, c-format +msgid "slot_name and two_phase cannot be altered at the same time" +msgstr "slot_name და two_phase ერთდროულად ვერ შეიცვლება" + +#: commands/subscriptioncmds.c:1286 +#, c-format +msgid "cannot alter two_phase when logical replication worker is still running" +msgstr "two_phase-ის შეცვლა შეუძლებელია, როცა ლოგიკური რეპლიკაციის დამხმარე პროცესი ჯერ კიდევ გაშვებულია" + +#: commands/subscriptioncmds.c:1287 +#, c-format +msgid "Try again after some time." +msgstr "სცადეთ კიდევ ერთხელ რაღაც დროის შემდეგ." + +#: commands/subscriptioncmds.c:1300 #, c-format -msgid "cannot set %s for a subscription that does not have a slot name" -msgstr "გამოწერებისთვის, რომლებსაც სლოტის სახელი არ აქვთ, %s-ს ვერ დავაყენებ" +msgid "cannot disable two_phase when prepared transactions are present" +msgstr "" + +#: commands/subscriptioncmds.c:1301 +#, c-format +msgid "Resolve these transactions and try again." +msgstr "გადაწყვიტეთ ეს ტრანზაქციები და თავიდან სცადეთ." -#: commands/subscriptioncmds.c:1279 +#: commands/subscriptioncmds.c:1348 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "გამოწერების, რომლებსაც სლოტის სახელი არ აქვთ, ჩართვა შეუძლებელია" -#: commands/subscriptioncmds.c:1323 commands/subscriptioncmds.c:1374 +#: commands/subscriptioncmds.c:1392 commands/subscriptioncmds.c:1443 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION განახლებით დაუშვებელია გათიშული გამოწერებისთვის" -#: commands/subscriptioncmds.c:1324 +#: commands/subscriptioncmds.c:1393 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "გამოიყენეთ ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (განახლება = გამორთულია)." -#: commands/subscriptioncmds.c:1333 commands/subscriptioncmds.c:1388 +#: commands/subscriptioncmds.c:1402 commands/subscriptioncmds.c:1457 #, c-format msgid "ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled" msgstr "ALTER SUBSCRIPTION ... განახლებით და copy_data-ით დაუშვებელია, როცა two_phase ჩართულია" -#: commands/subscriptioncmds.c:1334 +#: commands/subscriptioncmds.c:1403 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "გამოიყენეთ ALTER SUBSCRIPTION ... SET PUBLICATION refresh = false-ით, copy_data = false-ით ან გამოიყენეთ DROP/CREATE SUBSCRIPTION." #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1390 +#: commands/subscriptioncmds.c:1459 #, c-format msgid "Use %s with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "გამოიყენეთ %s 'refresh = false'-ით ან 'copy_data = false'-ით ან გამოიყენეთ DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1412 +#: commands/subscriptioncmds.c:1481 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH დაუშვებელია გათიშული გამოწერებისთვის" -#: commands/subscriptioncmds.c:1437 +#: commands/subscriptioncmds.c:1506 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase is enabled" msgstr "ALTER SUBSCRIPTION ... REFRESH -ი copy_data-ით დაუშვებელია, როცა two_phase ჩართულია" -#: commands/subscriptioncmds.c:1438 +#: commands/subscriptioncmds.c:1507 #, c-format msgid "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "გამოიყენეთ ALTER SUBSCRIPTION ... REFRESH 'copy_data = false'-ით ან DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1473 +#: commands/subscriptioncmds.c:1542 #, c-format msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X" msgstr "გამოტოვება WAL-ის მდებარეობა (LSN %X/%X) საწყის LSN-ზე %X/%X დიდი უნდა იყოს" -#: commands/subscriptioncmds.c:1594 +#: commands/subscriptioncmds.c:1667 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "გამოწერა \"%s\" არ არსებობს. გამოტოვება" -#: commands/subscriptioncmds.c:1863 +#: commands/subscriptioncmds.c:1934 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "გამომცემელზე რეპლიკაციის სეტი \"%s\" წაშლილია" -#: commands/subscriptioncmds.c:1872 commands/subscriptioncmds.c:1880 +#: commands/subscriptioncmds.c:1943 commands/subscriptioncmds.c:1951 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "შეუძლებელია რეპლიკაციის სლოტის \"%s\" წაშლა გამომცემელზე: %s" -#: commands/subscriptioncmds.c:2005 +#: commands/subscriptioncmds.c:2076 #, c-format msgid "subscription with OID %u does not exist" msgstr "გამოწერა OID-ით %u არ არსებობს" -#: commands/subscriptioncmds.c:2076 commands/subscriptioncmds.c:2201 +#: commands/subscriptioncmds.c:2150 commands/subscriptioncmds.c:2274 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "შეცდომა რეპლიცირებული ცხრილების სიის მიგება გამომცემლისგან: %s" -#: commands/subscriptioncmds.c:2112 +#: commands/subscriptioncmds.c:2186 #, c-format msgid "subscription \"%s\" requested copy_data with origin = NONE but might copy data that had a different origin" msgstr "" -#: commands/subscriptioncmds.c:2114 +#: commands/subscriptioncmds.c:2188 #, c-format msgid "The subscription being created subscribes to a publication (%s) that contains tables that are written to by other subscriptions." msgid_plural "The subscription being created subscribes to publications (%s) that contain tables that are written to by other subscriptions." msgstr[0] "" msgstr[1] "" -#: commands/subscriptioncmds.c:2117 +#: commands/subscriptioncmds.c:2191 #, c-format 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:2296 replication/logical/tablesync.c:904 replication/pgoutput/pgoutput.c:1162 #, c-format msgid "cannot use different column lists for table \"%s.%s\" in different publications" msgstr "" -#: commands/subscriptioncmds.c:2273 +#: commands/subscriptioncmds.c:2346 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "რეპლიკაციის სლოტის \"%s\" წაშლის მცდელობისას გამომცემელთან მიერთება შეუძლებელია: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:2276 +#: commands/subscriptioncmds.c:2349 #, c-format msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." msgstr "გამოწერის გასათიშად გამოიყენეთ %s, შემდეგ კი, სლოტთან ასოცირების მოსახსნელად, %s გამოიყენეთ." -#: commands/subscriptioncmds.c:2307 +#: commands/subscriptioncmds.c:2380 #, c-format msgid "publication name \"%s\" used more than once" msgstr "პუბლიკაციის სახელი \"%s\" ერთზე მეტჯერ გამოიყენება" -#: commands/subscriptioncmds.c:2351 +#: commands/subscriptioncmds.c:2424 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "პუბლიკაცია \"%s\" უკვე \"%s\" გამოწერაშია" -#: commands/subscriptioncmds.c:2365 +#: commands/subscriptioncmds.c:2438 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "პუბლიკაცია \"%s\" \"%s\" გამოწერაში არაა" -#: commands/subscriptioncmds.c:2376 +#: commands/subscriptioncmds.c:2449 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "გამოწერიდან ყველა პუბლიკაციას ვერ წაშლით" -#: commands/subscriptioncmds.c:2433 +#: commands/subscriptioncmds.c:2506 #, c-format msgid "%s requires a Boolean value or \"parallel\"" msgstr "%s -ს ლოგიკური მნიშვნელობა უნდა ჰქონდეს, ან \"parallel\"" -#: commands/tablecmds.c:255 commands/tablecmds.c:297 +#: commands/tablecmds.c:258 commands/tablecmds.c:300 #, c-format msgid "table \"%s\" does not exist" msgstr "ცხრილი არ არსებობს: %s" -#: commands/tablecmds.c:256 commands/tablecmds.c:298 +#: commands/tablecmds.c:259 commands/tablecmds.c:301 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "ცხრილი \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:258 commands/tablecmds.c:300 +#: commands/tablecmds.c:261 commands/tablecmds.c:303 msgid "Use DROP TABLE to remove a table." msgstr "ცხრილის წასაშლელად გამოიყენეთ DROP TABLE." -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:264 #, c-format msgid "sequence \"%s\" does not exist" msgstr "მიმდევრობა \"%s\" არ არსებობს" -#: commands/tablecmds.c:262 +#: commands/tablecmds.c:265 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "მიმდევრობა \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:264 +#: commands/tablecmds.c:267 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "მიმდევრობის წასაშლელად გამოიყენეთ DROP SEQUENCE." -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:270 #, c-format msgid "view \"%s\" does not exist" msgstr "ხედი \"%s\" არ არსებობს" -#: commands/tablecmds.c:268 +#: commands/tablecmds.c:271 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "ხედი \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:270 +#: commands/tablecmds.c:273 msgid "Use DROP VIEW to remove a view." msgstr "ხედის წასაშლელად გამოიყენეთ DROP VIEW." -#: commands/tablecmds.c:273 +#: commands/tablecmds.c:276 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "მატერიალიზებული ხედი \"%s\" არ არსებობს" -#: commands/tablecmds.c:274 +#: commands/tablecmds.c:277 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "მატერიალიზებული ხედი \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:276 +#: commands/tablecmds.c:279 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:282 commands/tablecmds.c:306 commands/tablecmds.c:21562 parser/parse_utilcmd.c:2407 #, c-format msgid "index \"%s\" does not exist" msgstr "ინდექსი \"%s\" არ არსებობს" -#: commands/tablecmds.c:280 commands/tablecmds.c:304 +#: commands/tablecmds.c:283 commands/tablecmds.c:307 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "ინდექსი \"%s\" არ არსებობს, გამოტოვება" -#: commands/tablecmds.c:282 commands/tablecmds.c:306 +#: commands/tablecmds.c:285 commands/tablecmds.c:309 msgid "Use DROP INDEX to remove an index." msgstr "ინდექსის წასაშლელად გამოიყენეთ DROP INDEX." -#: commands/tablecmds.c:287 +#: commands/tablecmds.c:290 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" ტიპი არაა" -#: commands/tablecmds.c:288 +#: commands/tablecmds.c:291 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:294 commands/tablecmds.c:15908 commands/tablecmds.c:18609 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "გარე ცხრილი \"%s\" არ არსებობს" -#: commands/tablecmds.c:292 +#: commands/tablecmds.c:295 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "გარე ცხრილი \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:294 +#: commands/tablecmds.c:297 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "გარე ცხრილის წასაშლელად DROP FOREIGN TABLE გამოიყენეთ." -#: commands/tablecmds.c:722 +#: commands/tablecmds.c:802 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT მხოლოდ დროებით ცხრილებზე გამოიყენება" -#: commands/tablecmds.c:753 +#: commands/tablecmds.c:819 +#, c-format +msgid "partitioned tables cannot be unlogged" +msgstr "დაყოფილი ცხრილების ჟურნალის გამორთვა შეუძლებელია" + +#: commands/tablecmds.c:839 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "უსაფრთხოებაზე-შეზღუდული ოპერაციის შიგნით დროებითი ცხრილის შექმნა შეუძლებელია" -#: commands/tablecmds.c:789 commands/tablecmds.c:15645 +#: commands/tablecmds.c:875 commands/tablecmds.c:17333 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "ურთიერთობა \"%s\" მემკვირდრეობით ერზე მეტჯერ იქნებოდა მიღებული" -#: commands/tablecmds.c:1055 +#: commands/tablecmds.c:1133 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" დაყოფილი არაა" -#: commands/tablecmds.c:1149 +#: commands/tablecmds.c:1227 #, c-format msgid "cannot partition using more than %d columns" msgstr "%d-ზე მეტი სვეტის გამოყენებით დაყოფა შეუძლებელია" -#: commands/tablecmds.c:1205 +#: commands/tablecmds.c:1283 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "დაყოფილი ცხრილის (%s) გარე დანაყოფს ვერ შექმნით" -#: commands/tablecmds.c:1207 +#: commands/tablecmds.c:1285 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "ცხრილი %s შეიცავს სვეტებს, რომლებიც უნიკალურია." -#: commands/tablecmds.c:1326 commands/tablecmds.c:13242 +#: commands/tablecmds.c:1415 commands/tablecmds.c:14908 #, 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:1420 parser/parse_clause.c:772 parser/parse_relation.c:1929 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "სვეტი \"%s\" არ შეიძლება გამოცხადდეს SETOF" -#: commands/tablecmds.c:1477 +#: commands/tablecmds.c:1549 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY-ს ერთზე მეტი ობიექტის წაშლის მხარდაჭერა არ გააჩნია" -#: commands/tablecmds.c:1481 +#: commands/tablecmds.c:1553 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY-ს CASCADE-ის მხარდაჭერა არ გააჩნია" -#: commands/tablecmds.c:1585 +#: commands/tablecmds.c:1657 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "დაყოფილ ინდექსს \"%s\" პარალელურად ვერ წაშლით" -#: commands/tablecmds.c:1873 +#: commands/tablecmds.c:1945 #, c-format msgid "cannot truncate only a partitioned table" msgstr "თვითონ დაყოფილი ცხრილის დაცარიელება შეუძლებელია" -#: commands/tablecmds.c:1874 +#: commands/tablecmds.c:1946 #, 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:2019 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "მოკვეთა გადაეცემა ცხრილამდე %s" -#: commands/tablecmds.c:2308 +#: commands/tablecmds.c:2380 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "გარე ცხრილის (\"%s\") მოკვეთის შეცდომა" -#: commands/tablecmds.c:2365 +#: commands/tablecmds.c:2437 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების მოკვეთის შეცდომა" -#: commands/tablecmds.c:2594 commands/tablecmds.c:15542 +#: commands/tablecmds.c:2675 commands/tablecmds.c:17230 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "დაყოფილი ცხრილიდან \"%s\" მემკვიდრეობის მიღება შეუძლებელია" -#: commands/tablecmds.c:2599 +#: commands/tablecmds.c:2680 #, 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:2688 parser/parse_utilcmd.c:2678 parser/parse_utilcmd.c:2866 #, 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:2700 #, 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:2709 commands/tablecmds.c:17209 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "დროებითი ურთიერთობიდან (%s) მემკვიდრეობითობა შეუძლებელია" -#: commands/tablecmds.c:2638 commands/tablecmds.c:15529 +#: commands/tablecmds.c:2719 commands/tablecmds.c:17217 #, 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:2874 commands/tablecmds.c:2928 commands/tablecmds.c:14591 parser/parse_utilcmd.c:1418 parser/parse_utilcmd.c:1463 parser/parse_utilcmd.c:1895 parser/parse_utilcmd.c:2003 #, c-format msgid "cannot convert whole-row table reference" msgstr "" -#: commands/tablecmds.c:2780 parser/parse_utilcmd.c:1241 +#: commands/tablecmds.c:2875 parser/parse_utilcmd.c:1419 #, 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:2929 parser/parse_utilcmd.c:1464 #, 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:3051 commands/tablecmds.c:3345 #, 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:3056 commands/tablecmds.c:3350 #, 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:3064 commands/tablecmds.c:3358 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "შვილი სვეტისთვის \"%s\" მითითებულია გენერაციის გამოსახულება" -#: commands/tablecmds.c:2959 commands/tablecmds.c:3230 +#: commands/tablecmds.c:3066 commands/tablecmds.c:3360 #, c-format msgid "A child table column cannot be generated unless its parent column is." msgstr "შვილი ცხრილის სვეტი არ შეიძლება, გენერირებული იყოს, თუ მისი მშობელიც არაა." -#: commands/tablecmds.c:3005 +#: commands/tablecmds.c:3072 commands/tablecmds.c:3366 commands/tablecmds.c:17495 +#, c-format +msgid "column \"%s\" inherits from generated column of different kind" +msgstr "ცხრილი \"%s\" მემკვიდრეობით იღებს სხვა ტიპის გენერირებული სვეტიდან" + +#: commands/tablecmds.c:3074 commands/tablecmds.c:3368 commands/tablecmds.c:17496 +#, c-format +msgid "Parent column is %s, child column is %s." +msgstr "მშობელი სვეტია %s, შვილი სვეტია %s." + +#: commands/tablecmds.c:3121 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "სვეტი \"%s\" მემკვიდრეობით კონფლიქტის მქონე გენერაციის გამოსახულებას იღებს" -#: commands/tablecmds.c:3007 +#: commands/tablecmds.c:3123 #, c-format msgid "To resolve the conflict, specify a generation expression explicitly." msgstr "კონფლიქტის გადასაჭრელად გენერაციის გამოსახულება აშკარად მიუთითეთ." -#: commands/tablecmds.c:3011 +#: commands/tablecmds.c:3127 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "სვეტი \"%s\" მემკვიდრეობით ურთიერთგამომრიცხავ ნაგულისხმევ მნიშვნელობებს იღებს" -#: commands/tablecmds.c:3013 +#: commands/tablecmds.c:3129 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "კონფლიქტის გადასაჭრელად ნაგულისხმევი აშკარად მიუთითეთ." -#: commands/tablecmds.c:3068 +#: commands/tablecmds.c:3196 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "შემოწმების შეზღუდვის სახელი \"%s\" ბევრჯერ გამოჩნდა, მაგრამ სხვადასხვა გამოსახულებებთან ერთად" -#: commands/tablecmds.c:3119 +#: commands/tablecmds.c:3249 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "სვეტის (\"%s\") შერწყმა მემკვიდრეობითი აღწერით" -#: commands/tablecmds.c:3123 +#: commands/tablecmds.c:3253 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "" -#: commands/tablecmds.c:3124 +#: commands/tablecmds.c:3254 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "" -#: commands/tablecmds.c:3136 +#: commands/tablecmds.c:3266 #, 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:3268 commands/tablecmds.c:3302 commands/tablecmds.c:3318 commands/tablecmds.c:3434 commands/tablecmds.c:3462 commands/tablecmds.c:3478 parser/parse_coerce.c:2190 parser/parse_coerce.c:2210 parser/parse_coerce.c:2230 parser/parse_coerce.c:2251 parser/parse_coerce.c:2306 parser/parse_coerce.c:2340 parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 parser/parse_coerce.c:2486 parser/parse_coerce.c:2553 parser/parse_param.c:224 #, c-format msgid "%s versus %s" msgstr "%s-ი %s-ის წინააღმდეგ" -#: commands/tablecmds.c:3150 +#: commands/tablecmds.c:3280 #, 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:3282 commands/tablecmds.c:3448 commands/tablecmds.c:7277 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "'%s\" -ი \"%s\"-ის წინააღმდეგ" -#: commands/tablecmds.c:3170 +#: commands/tablecmds.c:3300 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "საცავის პარამეტრის კონფლიქტი სვეტში \"%s\"" -#: commands/tablecmds.c:3186 commands/tablecmds.c:3342 +#: commands/tablecmds.c:3316 commands/tablecmds.c:3476 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "სვეტის (%s) შეკუმშვის მეთოდის კონფლიქტი" -#: commands/tablecmds.c:3281 +#: commands/tablecmds.c:3420 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "მიმდინარეობს სვეტის (\"%s\") მიერ მემკვიდრეობით მიღებული აღწერების შერწყმა" -#: commands/tablecmds.c:3293 +#: commands/tablecmds.c:3432 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" ტიპის კონფლიქტი" -#: commands/tablecmds.c:3312 +#: commands/tablecmds.c:3446 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" კოლაციის კონფლიქტი" -#: commands/tablecmds.c:3326 +#: commands/tablecmds.c:3460 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" საცავის პარამეტრის კონფლიქტი" -#: commands/tablecmds.c:3354 +#: commands/tablecmds.c:3488 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" თაობის კონფლიქტი" -#: commands/tablecmds.c:3573 +#: commands/tablecmds.c:3719 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების გადაადგილება შეუძლებელია" -#: commands/tablecmds.c:3643 +#: commands/tablecmds.c:3792 #, c-format msgid "cannot rename column of typed table" msgstr "ტიპიზირებული ცხრილის სვეტის გარდაქმნა შეუძლებელია" -#: commands/tablecmds.c:3662 +#: commands/tablecmds.c:3811 #, c-format msgid "cannot rename columns of relation \"%s\"" msgstr "ურთიერთობის (\"%s\") სვეტების სახელის გადარქმევა შეუძლებელია" -#: commands/tablecmds.c:3757 +#: commands/tablecmds.c:3906 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "მემკვიდრეობით მიღებული სვეტს (\"%s\") სახელი შვილ ცხრილებშიც უნდა გადაერქვას" -#: commands/tablecmds.c:3789 +#: commands/tablecmds.c:3938 #, c-format msgid "cannot rename system column \"%s\"" msgstr "სისტემური სვეტის \"%s\" გადარქმევა შეუძლებელია" -#: commands/tablecmds.c:3804 +#: commands/tablecmds.c:3953 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "მემკვიდრეობითი სვეტის (\"%s\") სახელის გადარქმევა შეუძლებელია" -#: commands/tablecmds.c:3956 +#: commands/tablecmds.c:4108 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "მემკვიდრეობით მიღებული შეზღუდვას (\"%s\") სახელი შვილ ცხრილებშიც უნდა გადაერქვას" -#: commands/tablecmds.c:3963 +#: commands/tablecmds.c:4115 #, 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:4415 #, 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:4424 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "%s-ის \"%s\" შეუძლებელია, რადგან მას დარჩენილი ტრიგერის მოვლენები გააჩნია" -#: commands/tablecmds.c:4295 +#: commands/tablecmds.c:4450 #, c-format msgid "cannot alter temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების შეცვლა შეუძლებელია" -#: commands/tablecmds.c:4776 +#: commands/tablecmds.c:4914 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "არასრული მოხსნის მქონე დანაყოფის \"%s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:4980 commands/tablecmds.c:4995 +#: commands/tablecmds.c:5143 #, c-format msgid "cannot change persistence setting twice" msgstr "შენახვის პარამეტრების ორჯერ შეცვლა შეუძლებელია" -#: commands/tablecmds.c:5016 +#: commands/tablecmds.c:5160 #, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" msgstr "ერთზე მეტი SET ACCESS METHOD ქვებრძანება ვერ გექნებათ" -#: commands/tablecmds.c:5772 +#: commands/tablecmds.c:5894 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "სისტემური შეერთების \"%s\" გადაწერა შეუძლებელია" -#: commands/tablecmds.c:5778 +#: commands/tablecmds.c:5900 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "კატალოგის ცხრილად გამოყენებული ცხრილის \"%s\" თავიდან ჩაწერა შეუძლებელია" -#: commands/tablecmds.c:5790 +#: commands/tablecmds.c:5912 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "სხვა სესიების დროებით ცხრილებს ვერ გადააწერთ" -#: commands/tablecmds.c:6285 +#: commands/tablecmds.c:6448 commands/tablecmds.c:6468 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "ურთიერთობის %2$s სვეტი %1$s ნულოვან მნიშვნელობებს შეიცავს" -#: commands/tablecmds.c:6302 +#: commands/tablecmds.c:6485 #, 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:6505 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:6511 #, 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:6776 #, 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:7031 commands/tablecmds.c:7038 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "ტიპის \"%s\" შეცვლა შეუძლებელია, რადგან მას სვეტი \"%s.%s\" იყენებს" -#: commands/tablecmds.c:6865 +#: commands/tablecmds.c:7045 #, 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:7052 #, 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:7108 #, 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:7110 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "ტიპიზირებული ცხრილების ჩასასწორებლად გამოიყენეთ ALTER ... CASCADE." -#: commands/tablecmds.c:6976 +#: commands/tablecmds.c:7156 +#, c-format +msgid "type %s is the row type of another table" +msgstr "ტიპი %s სხვა ცხრილის მწკრივის ტიპია" + +#: commands/tablecmds.c:7158 +#, c-format +msgid "A typed table must use a stand-alone composite type created with CREATE TYPE." +msgstr "" + +#: commands/tablecmds.c:7163 #, c-format msgid "type %s is not a composite type" msgstr "ტიპი %s კომპოზიტური არაა" -#: commands/tablecmds.c:7003 +#: commands/tablecmds.c:7190 #, c-format msgid "cannot add column to typed table" msgstr "ტიპიზირებულ ცხრილში სვეტების ჩამატება შეუძლებელია" -#: commands/tablecmds.c:7051 +#: commands/tablecmds.c:7240 #, c-format msgid "cannot add column to a partition" msgstr "დანაყოფს სვეტს ვერ დაუმატებთ" -#: commands/tablecmds.c:7080 commands/tablecmds.c:15760 +#: commands/tablecmds.c:7269 commands/tablecmds.c:17451 #, 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:7275 commands/tablecmds.c:17457 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "შვილ ცხრილს \"%s\" სვეტისთვის \"%s\" სხვა კოლაცია გააჩნია" -#: commands/tablecmds.c:7104 +#: commands/tablecmds.c:7293 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "მიმდინარეობს აღწერის შერწყმა სვეტისთვის \"%s\" შვილისთვის \"%s\"" -#: commands/tablecmds.c:7157 +#: commands/tablecmds.c:7346 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "ცხრილისთვის, რომელსაც შვილი ცხრილები გააჩნია, იდენტიფიკაციის სვეტის რეკურსიული დამატება შეუძლებელია" -#: commands/tablecmds.c:7370 +#: commands/tablecmds.c:7593 #, c-format msgid "column must be added to child tables too" msgstr "სვეტი შვილ ცხრილებსაც უნდა დაემატოთ" -#: commands/tablecmds.c:7448 +#: commands/tablecmds.c:7671 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "ურთიერთობის (%2$s) სვეტი %1$s უკვე რსებობს. გამოტოვება" -#: commands/tablecmds.c:7455 +#: commands/tablecmds.c:7678 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ურთიერთობის (%2$s) სვეტი %1$s უკვე რსებობს" -#: commands/tablecmds.c:7521 commands/tablecmds.c:12564 -#, 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 -#, 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:7769 commands/tablecmds.c:7936 commands/tablecmds.c:8137 commands/tablecmds.c:8268 commands/tablecmds.c:8397 commands/tablecmds.c:8491 commands/tablecmds.c:8594 commands/tablecmds.c:8790 commands/tablecmds.c:8956 commands/tablecmds.c:9047 commands/tablecmds.c:9181 commands/tablecmds.c:14366 commands/tablecmds.c:15931 commands/tablecmds.c:18698 #, c-format msgid "cannot alter system column \"%s\"" msgstr "სისტემური სვეტის \"%s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:7564 commands/tablecmds.c:7910 +#: commands/tablecmds.c:7775 commands/tablecmds.c:8143 commands/tablecmds.c:14127 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" იდენტიფიკატორი სვეტია" -#: commands/tablecmds.c:7605 -#, c-format -msgid "column \"%s\" is in a primary key" -msgstr "სვეტი \"%s\" პირველადი გასაღებია" - -#: commands/tablecmds.c:7610 -#, c-format -msgid "column \"%s\" is in index used as replica identity" -msgstr "სვეტი \"%s\" რეპლიკის იდენტიფიკატორად გამოყენებული ინდექსია" - -#: commands/tablecmds.c:7633 +#: commands/tablecmds.c:7792 #, 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:8014 commands/tablecmds.c:9988 #, c-format msgid "constraint must be added to child tables too" msgstr "შეზღუდვა შვილ ცხრილებსაც უნდა დაემატოთ" -#: commands/tablecmds.c:7834 +#: commands/tablecmds.c:8015 commands/tablecmds.c:8246 commands/tablecmds.c:8353 commands/tablecmds.c:8470 commands/tablecmds.c:9354 commands/tablecmds.c:12190 #, c-format -msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." -msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" უკვე NOT NULL არაა." +msgid "Do not specify the ONLY keyword." +msgstr "ONLY არ მიუთითოთ." -#: commands/tablecmds.c:7919 +#: commands/tablecmds.c:8152 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" გენერირებული სვეტია" -#: commands/tablecmds.c:8013 +#: commands/tablecmds.c:8245 #, c-format msgid "cannot add identity to a column of only the partitioned table" msgstr "მხოლოდ, დაყოფილი ცხრილში იდენტიფიკაციას სვეტს ვერ დაამატებთ" -#: commands/tablecmds.c:8019 +#: commands/tablecmds.c:8251 #, c-format msgid "cannot add identity to a column of a partition" msgstr "დანაყოფს სვეტს იდენტიფიკატორს ვერ დაუმატებთ" -#: commands/tablecmds.c:8047 +#: commands/tablecmds.c:8279 #, 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:8285 #, 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:8291 #, 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:8352 #, c-format msgid "cannot change identity column of only the partitioned table" msgstr "მხოლოდ, დაყოფილი ცხრილის იდენტიფიკაციის სვეტს ვერ შეცვლით" -#: commands/tablecmds.c:8126 +#: commands/tablecmds.c:8358 #, c-format msgid "cannot change identity column of a partition" msgstr "დანაყოფის იდენტიფიკაციის სვეტს ვერ შეცვლით" -#: commands/tablecmds.c:8171 commands/tablecmds.c:8267 +#: commands/tablecmds.c:8403 commands/tablecmds.c:8499 #, 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:8469 #, c-format msgid "cannot drop identity from a column of only the partitioned table" msgstr "მხოლოდ, დაყოფილი ცხრილში სვეტიდან იდენტიფიკაციას ვერ წაშლით" -#: commands/tablecmds.c:8243 +#: commands/tablecmds.c:8475 #, c-format msgid "cannot drop identity from a column of a partition" msgstr "დანაყოფს სვეტიდან იდენტიფიკატორს ვერ წაშლით" -#: commands/tablecmds.c:8272 +#: commands/tablecmds.c:8504 #, 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:8601 commands/tablecmds.c:8811 #, 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:8612 +#, c-format +msgid "ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns on tables with check constraints" +msgstr "ALTER TABLE / SET EXPRESSION მხარდაჭერილი არაა შემოწმების შეზღუდვების მქონე ვირტუალური გენერირებული სვეტებისთვის" + +#: commands/tablecmds.c:8613 commands/tablecmds.c:8631 commands/tablecmds.c:8803 +#, c-format +msgid "Column \"%s\" of relation \"%s\" is a virtual generated column." +msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" ვირტუალური გენერირებული სვეტია." + +#: commands/tablecmds.c:8630 +#, c-format +msgid "ALTER TABLE / SET EXPRESSION is not supported for virtual generated columns on tables that are part of a publication" +msgstr "ALTER TABLE / SET EXPRESSION მხარდაჭერილი არაა ვირტუალურ გენერირებულ სვეტებზე ცხრილებზე, რომლებიც გამოცემის ნაწილი არიან" + +#: commands/tablecmds.c:8737 #, 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:8759 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "მემკვიდრეობითი სვეტიდან გენერაციის გამოსახულების წაშლა შეუძლებელია" -#: commands/tablecmds.c:8525 +#: commands/tablecmds.c:8802 #, c-format -msgid "column \"%s\" of relation \"%s\" is not a stored generated column" -msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" დამახსოვრებული გენერირებული სვეტი არაა" +msgid "ALTER TABLE / DROP EXPRESSION is not supported for virtual generated columns" +msgstr "ALTER TABLE / DROP EXPRESSION ვირტუალურ გენერირებულ სვეტებზე მხარდაჭერილი არაა" -#: commands/tablecmds.c:8530 +#: commands/tablecmds.c:8816 #, c-format -msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" -msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" დამახსოვრებული გენერირებული სვეტი არაა. გამოტოვება" +msgid "column \"%s\" of relation \"%s\" is not a generated column, skipping" +msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" გენერირებული სვეტი არაა. გამოტოვება" -#: commands/tablecmds.c:8608 +#: commands/tablecmds.c:8894 #, c-format msgid "cannot refer to non-index column by number" msgstr "არა-ინდექსი სვეტის ნომრით მიმართვა შეუძლებელია" -#: commands/tablecmds.c:8660 +#: commands/tablecmds.c:8946 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "ურთიერთობის (%2$s) სვეტი (%1$d) არ არსებობს" -#: commands/tablecmds.c:8679 +#: commands/tablecmds.c:8966 +#, c-format +msgid "cannot alter statistics on virtual generated column \"%s\"" +msgstr "შეუძლებელია სტატისტიკის შეცვლა ვირტუალურ გენერირებულ სვეტზე \"%s\"" + +#: commands/tablecmds.c:8975 #, 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:8980 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" -#: commands/tablecmds.c:8686 +#: commands/tablecmds.c:8982 #, c-format msgid "Alter statistics on table column instead." msgstr "ამის ნაცვლად ცხრილის სვეტის სტატისტიკა შეცვალეთ." -#: commands/tablecmds.c:8932 +#: commands/tablecmds.c:9228 #, c-format msgid "cannot drop column from typed table" msgstr "ტიპიზირებული ცხრილის სვეტის წაშლა შეუძლებელია" -#: commands/tablecmds.c:8995 +#: commands/tablecmds.c:9292 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "სვეტი \"%s\" ურთიერთობაში \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:9008 +#: commands/tablecmds.c:9305 #, c-format msgid "cannot drop system column \"%s\"" msgstr "სისტემური სვეტის \"%s\" წაშლა შეუძლებელია" -#: commands/tablecmds.c:9018 +#: commands/tablecmds.c:9315 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "მემკვიდრეობით მიღებული სვეტის \"%s\" წაშლა შეუძლებელია" -#: commands/tablecmds.c:9031 +#: commands/tablecmds.c:9328 #, 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:9353 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "" -#: commands/tablecmds.c:9261 +#: commands/tablecmds.c:9518 +#, c-format +msgid "column \"%s\" of table \"%s\" is not marked NOT NULL" +msgstr "ცხრილის \"%2$s\" სვეტი \"%1$s\" არაა დანიშნული, როგორც NOT NULL" + +#: commands/tablecmds.c:9554 commands/tablecmds.c:9566 +#, c-format +msgid "cannot create primary key on column \"%s\"" +msgstr "ძირითადი გასაღების შექმნა სვეტზე \"%s\" შეუძლებელია" + +#. translator: fourth %s is a constraint characteristic such as NOT VALID +#: commands/tablecmds.c:9556 commands/tablecmds.c:9568 +#, c-format +msgid "The constraint \"%s\" on column \"%s\" of table \"%s\", marked %s, is incompatible with a primary key." +msgstr "" + +#: commands/tablecmds.c:9692 #, 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:9717 #, 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:10075 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "" -#: commands/tablecmds.c:9629 -#, c-format -msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" -msgstr "" - -#: commands/tablecmds.c:9632 -#, c-format -msgid "This feature is not yet supported on partitioned tables." -msgstr "ეს ოპერაცია დაყოფილი ცხრილებისთვის ჯერჯერობით მხარდაჭერილი არაა." - -#: commands/tablecmds.c:9639 commands/tablecmds.c:10095 +#: commands/tablecmds.c:10083 commands/tablecmds.c:10710 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "მითითებული ურთიერთობა \"%s\" ცხრილი არაა" -#: commands/tablecmds.c:9662 +#: commands/tablecmds.c:10106 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "მუდმივ ცხრილებზე არსებული შეზღუდვები მხოლოდ მუდმივ ცხრილებზე შეიძლება, მიუთითებდეს" -#: commands/tablecmds.c:9669 +#: commands/tablecmds.c:10113 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "ჟურნალის გარეშე მყოფი ცხრილების შეზღუდვები მხოლოდ მუდმივ ან ჟურნალის გარეშე მყოფ ცხრილებზე შეიძლება, მიუთითებდეს" -#: commands/tablecmds.c:9675 +#: commands/tablecmds.c:10119 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "დროებით ცხრილებზე არსებული შეზღუდვები მხოლოდ დროებით ცხრილებზე შეიძლება, მიუთითებდეს" -#: commands/tablecmds.c:9679 +#: commands/tablecmds.c:10123 #, 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:10138 commands/tablecmds.c:10166 +#, c-format +msgid "foreign key uses PERIOD on the referenced table but not the referencing table" +msgstr "" + +#: commands/tablecmds.c:10178 +#, c-format +msgid "foreign key uses PERIOD on the referencing table but not the referenced table" +msgstr "" + +#: commands/tablecmds.c:10192 +#, c-format +msgid "foreign key must use PERIOD when referencing a primary using WITHOUT OVERLAPS" +msgstr "" + +#: commands/tablecmds.c:10216 commands/tablecmds.c:10222 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "არასწორი ქმედება %s გარე გასაღების შეზღუდვის შემცველი გენერირებული სვეტისთვის" -#: commands/tablecmds.c:9765 +#: commands/tablecmds.c:10237 +#, c-format +msgid "foreign key constraints on virtual generated columns are not supported" +msgstr "ვირტუალურ გენერირებულ სვეტებზე გარე გასაღების შეზღუდვები მხარდაჭერილი არაა" + +#: commands/tablecmds.c:10251 commands/tablecmds.c:10260 +#, c-format +msgid "unsupported %s action for foreign key constraint using PERIOD" +msgstr "მხარდაუჭერელი %s ქმედება გარე გასაღების შეზღუდვისთვის, რომელიც PERIOD-ს იყენებს" + +#: commands/tablecmds.c:10275 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "" -#: commands/tablecmds.c:9872 +#: commands/tablecmds.c:10331 +#, c-format +msgid "could not identify an overlaps operator for foreign key" +msgstr "ვერ აღმოვაჩინე გადაფარვების ოპერატორი გარე გასაღებისთვის" + +#: commands/tablecmds.c:10332 +#, c-format +msgid "could not identify an equality operator for foreign key" +msgstr "გარე გასაღებისთვის ტოლობის ოპერატორი ვერ ვიპოვე" + +#: commands/tablecmds.c:10397 commands/tablecmds.c:10431 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "გარე გასაღების შეზღუდვის \"%s\" განხორციელება შეუძლებელია" -#: commands/tablecmds.c:9874 +#: commands/tablecmds.c:10399 +#, c-format +msgid "Key columns \"%s\" of the referencing table and \"%s\" of the referenced table are of incompatible types: %s and %s." +msgstr "მიმმართველი ცხრილის გასაღების სვეტები \"%s\" და მიმართვადი ცხრილის გასაღების სვეტები \"%s\" შეუთავსებელი ტიპისაა: %s და %s." + +#: commands/tablecmds.c:10432 #, c-format -msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." -msgstr "გასაღების სვეტები \"%s\" და \"%s\" შეუთავსებელი ტიპებისაა: %s და %s." +msgid "Key columns \"%s\" of the referencing table and \"%s\" of the referenced table have incompatible collations: \"%s\" and \"%s\". If either collation is nondeterministic, then both collations have to be the same." +msgstr "" -#: commands/tablecmds.c:10031 +#: commands/tablecmds.c:10638 #, 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:11020 commands/tablecmds.c:11466 parser/parse_utilcmd.c:941 parser/parse_utilcmd.c:1086 #, 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:11449 +#, c-format +msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" +msgstr "ცხრილს \"%s\" ვერ მივამაგრებ დანაყოფს, რომელსაც მიმართავს გარე გარე გასაღები \"%s\"" + +#: commands/tablecmds.c:11730 +#, c-format +msgid "constraint \"%s\" enforceability conflicts with constraint \"%s\" on relation \"%s\"" +msgstr "შეზღუდვის \"%s\" ნაძალადევობა კონფლიქტშია შეზღუდვასთან \"%s\" ურთიერთობაზე \"%s\"" + +#: commands/tablecmds.c:12189 +#, c-format +msgid "constraint must be altered in child tables too" +msgstr "შეზღუდვა შვილ ცხრილებშიც უნდა შეიცვალოს" + +#: commands/tablecmds.c:12218 commands/tablecmds.c:12912 commands/tablecmds.c:14006 commands/tablecmds.c:14235 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "ურთიერთობის \"%2$s\" შეზღუდვა \"%1$s\" არ არსებობს" -#: commands/tablecmds.c:11335 +#: commands/tablecmds.c:12225 #, 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:12230 +#, c-format +msgid "cannot alter enforceability of constraint \"%s\" of relation \"%s\"" +msgstr "ურთიერთობაზე \"%2$s\" შეზღუდვის \"%1$s\" ძალით დაყენებადობის შეცვლა შეუძლებელია" + +#: commands/tablecmds.c:12236 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" is not a not-null constraint" +msgstr "ურთიერთობის \"%2$s\" შეზღუდვა \"%1$s\" არანულოვანი შეზღუდვა არაა" + +#: commands/tablecmds.c:12244 +#, c-format +msgid "cannot alter inherited constraint \"%s\" on relation \"%s\"" +msgstr "ურთიერთობაზე \"%2$s\" მემკვიდრეობით მიღებული შეზღუდვის \"%1$s\" წაშლა შეუძლებელია" + +#: commands/tablecmds.c:12284 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "ურთიერთობაზე \"%2$s\" შეზღუდვის \"%1$s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:11376 +#: commands/tablecmds.c:12287 #, 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:12289 #, c-format msgid "You may alter the constraint it derives from instead." -msgstr "" +msgstr "ამის მაგიერ, შეიგძლიათ, შეცვალოთ შეზღუდვა, რომლიდანაც ის მიღებულია." + +#: commands/tablecmds.c:12921 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" is not a foreign key, check, or not-null constraint" +msgstr "შეზღუდვა \"%s\" ურთიერთობისთვის \"%s\" გარე გასაღებს, შემოწმებას, ან არანულოვან შეზღუდვას არ წარმოადგენს" -#: commands/tablecmds.c:11617 +#: commands/tablecmds.c:12927 #, c-format -msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" -msgstr "ურთიერთობის (\"%2$s\") შეზღუდვა \"%1$s\" გარე გასაღები ან შემოწმების შეზღუდვა არაა" +msgid "cannot validate NOT ENFORCED constraint" +msgstr "შეზღუდვის NOT ENFORCED დადასტურება შეუძლებელია" -#: commands/tablecmds.c:11694 +#: commands/tablecmds.c:13116 commands/tablecmds.c:13216 #, c-format msgid "constraint must be validated on child tables too" msgstr "შეზღუდვა შვილ ცხრილებზეც უნდა გადამოწმდეს" -#: commands/tablecmds.c:11781 +#: commands/tablecmds.c:13293 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "გარე გასაღების შეზღუდვაში მითითებული სვეტი \"%s\" არ არსებობს" -#: commands/tablecmds.c:11787 +#: commands/tablecmds.c:13299 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "უცხო გასაღებებში სისტემურ სვეტებს ვერ გამოიყენებთ" -#: commands/tablecmds.c:11791 +#: commands/tablecmds.c:13303 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "გარე გასაღებში %d გასაღებზე მეტი ვერ გექნებათ" -#: commands/tablecmds.c:11856 +#: commands/tablecmds.c:13371 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "" -#: commands/tablecmds.c:11873 +#: commands/tablecmds.c:13388 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "მითითებული ცხრილისთვის \"%s\" ძირითადი გასაღები არ არსებობს" -#: commands/tablecmds.c:11941 +#: commands/tablecmds.c:13461 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "" -#: commands/tablecmds.c:12033 +#: commands/tablecmds.c:13564 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" -#: commands/tablecmds.c:12038 +#: commands/tablecmds.c:13569 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "" -#: commands/tablecmds.c:12477 +#: commands/tablecmds.c:14010 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" +msgstr "ურთიერთობის (\"%2$s\") შეზღუდვა (\"%1$s\") არ არსებობს. გამოტოვება" + +#: commands/tablecmds.c:14055 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "მემკვიდრეობით მიღებული ურთიერთობის \"%2$s\" შეზღუდვის \"%1$s\" წაშლა შეუძლებელია" -#: commands/tablecmds.c:12527 +#: commands/tablecmds.c:14107 #, c-format -msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" -msgstr "ურთიერთობის (\"%2$s\") შეზღუდვა (\"%1$s\") არ არსებობს. გამოტოვება" +msgid "column \"%s\" is in a primary key" +msgstr "სვეტი \"%s\" პირველადი გასაღებია" + +#: commands/tablecmds.c:14115 +#, c-format +msgid "column \"%s\" is in index used as replica identity" +msgstr "სვეტი \"%s\" რეპლიკის იდენტიფიკატორად გამოყენებული ინდექსია" -#: commands/tablecmds.c:12702 +#: commands/tablecmds.c:14348 #, c-format msgid "cannot alter column type of typed table" msgstr "ტიპიზირებული ცხრილის სვეტის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:12729 +#: commands/tablecmds.c:14376 +#, c-format +msgid "cannot specify USING when altering type of generated column" +msgstr "გენერირებული სვეტის ტიპის შეცვლისას USING-ს ვერ მიუთითებთ" + +#: commands/tablecmds.c:14377 commands/tablecmds.c:19757 commands/tablecmds.c:19850 commands/trigger.c:659 rewrite/rewriteHandler.c:949 rewrite/rewriteHandler.c:984 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "სვეტი \"%s\" გენერირებული სვეტია." + +#: commands/tablecmds.c:14388 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "მემკვიდრეობით მიღებული სვეტის \"%s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:12738 +#: commands/tablecmds.c:14397 #, 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:14452 #, 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:14455 #, c-format msgid "You might need to add an explicit cast." msgstr "შეიძლება აშკარა დაკასტვა უნდა დაამატოთ." -#: commands/tablecmds.c:12795 +#: commands/tablecmds.c:14459 #, 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:14463 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "შეიძლება, გჭირდებათ, მიუთითოთ \"USING %s::%s\"." -#: commands/tablecmds.c:12897 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "ურთიერთობის \"%2$s\" სვეტის \"%1$s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:12926 +#: commands/tablecmds.c:14592 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "" -#: commands/tablecmds.c:12937 +#: commands/tablecmds.c:14603 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "" -#: commands/tablecmds.c:13062 +#: commands/tablecmds.c:14728 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "სვეტის (\"%s\") ტიპის ორჯერ შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13100 +#: commands/tablecmds.c:14766 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "" -#: commands/tablecmds.c:13105 +#: commands/tablecmds.c:14771 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" -#: commands/tablecmds.c:13409 +#: commands/tablecmds.c:15075 #, 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:15076 commands/tablecmds.c:15091 commands/tablecmds.c:15111 commands/tablecmds.c:15130 commands/tablecmds.c:15189 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s ეყრდნობა სვეტს \"%s\"" -#: commands/tablecmds.c:13424 +#: commands/tablecmds.c:15090 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ხედის ან წესის მიერ გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13444 +#: commands/tablecmds.c:15110 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "ტრიგერის აღწერაში გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13463 +#: commands/tablecmds.c:15129 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "პოლიტიკის აღწერაში გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13494 +#: commands/tablecmds.c:15160 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "გენერირებული სვეტის მიერ გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13495 +#: commands/tablecmds.c:15161 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "სვეტი (%s\") გენერირებული სვეტის (%s) მიერ გამოიყენება." -#: commands/tablecmds.c:13522 +#: commands/tablecmds.c:15188 #, 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:16039 commands/tablecmds.c:16051 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "ინდექსის \"%s\" მფლობელის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14359 commands/tablecmds.c:14371 +#: commands/tablecmds.c:16041 commands/tablecmds.c:16053 #, c-format msgid "Change the ownership of the index's table instead." msgstr "ამის მაგიერ ინდექსის ცხრილის მფლობელი შეცვალეთ." -#: commands/tablecmds.c:14385 +#: commands/tablecmds.c:16067 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "მიმდევრობის \"%s\" მფლობელის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14410 +#: commands/tablecmds.c:16092 #, c-format msgid "cannot change owner of relation \"%s\"" msgstr "ურთიერთობის \"%s\" მფლობელის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14877 +#: commands/tablecmds.c:16559 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "ერთზე მეტი SET TABLESPACE ქვებრძანება ვერ გექნებათ" -#: commands/tablecmds.c:14954 +#: commands/tablecmds.c:16638 #, c-format msgid "cannot set options for relation \"%s\"" msgstr "ურთიერთობის (%s) პარამეტრების დაყენება შეუძლებელია" -#: commands/tablecmds.c:14988 commands/view.c:440 +#: commands/tablecmds.c:16672 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:16925 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "ცხრილის სივრცეში მხოლოდ ცხრილები, ინდექსები და მატერიალიზებული ხედები შეიძლება არსებობდეს" -#: commands/tablecmds.c:15250 +#: commands/tablecmds.c:16937 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "ცხრილების სივრცეში pg_globl ურთიერთობების შეტანა/გამოტანა შეუძლებელია" -#: commands/tablecmds.c:15342 +#: commands/tablecmds.c:17029 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "შეწყვეტა, რადგან ბლოკი ურთიერთობაზე \"%s.%s\" ხელმისაწვდომი არაა" -#: commands/tablecmds.c:15358 +#: commands/tablecmds.c:17045 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "ცხრილების სივრცეში \"%s\" ურთიერთობა, რომელიც ემთხვევა, ვერ ვიპოვე" -#: commands/tablecmds.c:15480 +#: commands/tablecmds.c:17167 #, c-format msgid "cannot change inheritance of typed table" msgstr "ტიპიზირებული ცხრილის მემკვიდრეობითობის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:15485 commands/tablecmds.c:15985 +#: commands/tablecmds.c:17172 commands/tablecmds.c:17756 #, c-format msgid "cannot change inheritance of a partition" msgstr "დანაყოფის მემკვიდრეობითობის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:15490 +#: commands/tablecmds.c:17177 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "დაყოფილი ცხრილის მემკვიდრეობითობის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:15536 +#: commands/tablecmds.c:17224 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "სხვა სესიის დროებითი ურთიერთობის მემკვიდრეობით მიღება შეუძლებელია" -#: commands/tablecmds.c:15549 +#: commands/tablecmds.c:17237 #, c-format msgid "cannot inherit from a partition" msgstr "დანაყოფიდან მემკვიდრეობითობა შეუძლებელია" -#: commands/tablecmds.c:15571 commands/tablecmds.c:18453 +#: commands/tablecmds.c:17259 commands/tablecmds.c:20270 #, c-format msgid "circular inheritance not allowed" msgstr "წრიული მემკვიდრეობითობა დაუშვებელია" -#: commands/tablecmds.c:15572 commands/tablecmds.c:18454 +#: commands/tablecmds.c:17260 commands/tablecmds.c:20271 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" უკვე \"%s\"-ის შვილია." -#: commands/tablecmds.c:15585 +#: commands/tablecmds.c:17273 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "ტრიგერი \"%s\" ხელს უშლის ცხრილს \"%s\" მემკვიდრეობის შვილად გადაიქცეს" -#: commands/tablecmds.c:15587 +#: commands/tablecmds.c:17275 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW ტრიგერები, რომლებსაც გარდამავალი ცხრილები გააჩნიათ, მემკვიდრეობითობის იერარქიებში მხარდაჭერილი არაა." -#: commands/tablecmds.c:15776 +#: commands/tablecmds.c:17476 commands/tablecmds.c:17725 #, c-format -msgid "column \"%s\" in child table must be marked NOT NULL" -msgstr "სვეტი \"%s\" შვილ ცხრილში NOT NULL-ით უნდა იყოს დანიშნული" +msgid "column \"%s\" in child table \"%s\" must be marked NOT NULL" +msgstr "სვეტი \"%s\" შვილ ცხრილში \"%s\" NOT NULL-ით უნდა იყოს დანიშნული" -#: commands/tablecmds.c:15785 +#: commands/tablecmds.c:17486 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "შვილ ცხრილში სვეტი \"%s\" გენერირებული სვეტი არ უნდა იყოს" -#: commands/tablecmds.c:15789 +#: commands/tablecmds.c:17490 #, c-format msgid "column \"%s\" in child table must not be a generated column" msgstr "შვილ ცხრილში სვეტი \"%s\" გენერირებული სვეტი არ უნდა იყოს" -#: commands/tablecmds.c:15827 +#: commands/tablecmds.c:17536 #, c-format msgid "child table is missing column \"%s\"" msgstr "შვილ ცხრილს აკლია სვეტი \"%s\"" -#: commands/tablecmds.c:15908 +#: commands/tablecmds.c:17653 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "შვილ ცხრილს \"%s\" შემოწმების შეზღუდვისთვის \"%s\" სხვა განსაზღვრება გააჩნია" -#: commands/tablecmds.c:15915 +#: commands/tablecmds.c:17662 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია არა-მემკვიდრეობით მიღებულ შეზღუდვასთან შვილ ცხრილზე \"%s\"" -#: commands/tablecmds.c:15925 +#: commands/tablecmds.c:17673 #, 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:17684 +#, c-format +msgid "constraint \"%s\" conflicts with NOT ENFORCED constraint on child table \"%s\"" +msgstr "შეზღუდვა \"%s\" კონფლიქტშია შეზღუდვასთან NOT ENFORCED შვილ ცხრილზე \"%s\"" + +#: commands/tablecmds.c:17733 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "შვილ ცხრილს აკლია შეზღუდვა \"%s\"" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:17820 #, 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:17849 commands/tablecmds.c:17897 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "ურთიერთობა \"%s\" ურთიერთობის \"%s\" დანაყოფს არ წარმოადგენს" -#: commands/tablecmds.c:16130 +#: commands/tablecmds.c:17903 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "ურთიერთობა \"%s\" ურთიერთობის \"%s\" მშობელს არ წარმოადგენს" -#: commands/tablecmds.c:16357 +#: commands/tablecmds.c:18174 #, c-format msgid "typed tables cannot inherit" msgstr "ტიპიზირებულ ცხრილებს მემკვიდრეობითობა არ შეუძლიათ" -#: commands/tablecmds.c:16387 +#: commands/tablecmds.c:18204 #, c-format msgid "table is missing column \"%s\"" msgstr "ცხრილს აკლია სვეტი \"%s\"" -#: commands/tablecmds.c:16398 +#: commands/tablecmds.c:18215 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "ცხრილს აქვს სვეტი \"%s\" მაშინ, როცა ტიპი \"%s\"-ს მოითხოვს" -#: commands/tablecmds.c:16407 +#: commands/tablecmds.c:18224 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "ცხრილს \"%s\" სვეტისთვის \"%s\" სხვა ტიპი აქვს" -#: commands/tablecmds.c:16421 +#: commands/tablecmds.c:18238 #, c-format msgid "table has extra column \"%s\"" msgstr "ცხრილს აქვს დამატებითი სვეტი \"%s\"" -#: commands/tablecmds.c:16473 +#: commands/tablecmds.c:18290 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" ტიპიზირებული ცხრილი არაა" -#: commands/tablecmds.c:16647 +#: commands/tablecmds.c:18470 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "არაუნიკალურ ინდექსს \"%s\" რეპლიკის იდენტიფიკაციისთვის ვერ გამოიყენებთ" -#: commands/tablecmds.c:16653 +#: commands/tablecmds.c:18476 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "არასაუყოვნებლივ ინდექსს \"%s\" რეპლიკის იდენფიტიკაციისთვის ვერ გამოიყენებთ" -#: commands/tablecmds.c:16659 +#: commands/tablecmds.c:18482 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "გამოსახულების ინდექსს \"%s\" რეპლიკის იდენტიფიკაციისთვის ვერ გამოიყენებთ" -#: commands/tablecmds.c:16665 +#: commands/tablecmds.c:18488 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "ნაწილობრივი ინდექსის (\"%s\") რეპლიკის იდენტიფიკატორად გამოყენება შეუძლებელია" -#: commands/tablecmds.c:16682 +#: commands/tablecmds.c:18505 #, 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:18512 #, 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:18761 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "ცხრილის \"%s\" ჟურნალში ჩაწერის სტატუსის შეცვლა შეუძლებელია, რადგან ის დროებითია" -#: commands/tablecmds.c:16965 +#: commands/tablecmds.c:18785 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "" -#: commands/tablecmds.c:16967 +#: commands/tablecmds.c:18787 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "უჟურნალო ურთიერთობების რეპლიკაცია შეუძლებელია." -#: commands/tablecmds.c:17012 +#: commands/tablecmds.c:18832 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "" -#: commands/tablecmds.c:17022 +#: commands/tablecmds.c:18842 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "" -#: commands/tablecmds.c:17080 +#: commands/tablecmds.c:18906 #, c-format msgid "cannot move an owned sequence into another schema" -msgstr "" +msgstr "მფლობელობაში არსებული მიმდევრობის სხვა სქემაში გადატანა შეუძლებელია" -#: commands/tablecmds.c:17185 +#: commands/tablecmds.c:19014 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "სქემაში (%2$s) ურთიერთობა (%1$s) უკვე არსებობს" -#: commands/tablecmds.c:17606 +#: commands/tablecmds.c:19439 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" ცხრილი ან მატერიალიზებული ხედი არაა" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:19592 #, c-format msgid "\"%s\" is not a composite type" msgstr "ტიპი %s კომპოზიტური არაა" -#: commands/tablecmds.c:17789 +#: commands/tablecmds.c:19622 #, c-format msgid "cannot change schema of index \"%s\"" msgstr "ინდექსის (%s) სქემის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:17791 commands/tablecmds.c:17805 +#: commands/tablecmds.c:19624 commands/tablecmds.c:19638 #, c-format msgid "Change the schema of the table instead." msgstr "ამის მაგიერ ცხრილის სქემა შეცვლათ." -#: commands/tablecmds.c:17795 +#: commands/tablecmds.c:19628 #, c-format msgid "cannot change schema of composite type \"%s\"" msgstr "კომპოზიტური ტიპის (%s) სქემის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:17803 +#: commands/tablecmds.c:19636 #, c-format msgid "cannot change schema of TOAST table \"%s\"" msgstr "\"TOAST\" ცხრილის (%s) სქემის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:17835 +#: commands/tablecmds.c:19668 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "ერთზე მეტ სვეტთან ერთად დაყოფის სტრატეგიას \"list\" ვერ გამოიყენებთ" -#: commands/tablecmds.c:17901 +#: commands/tablecmds.c:19734 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "დანაყოფის გასაღებში დასახელებული სვეტი \"%s\" არ არსებობს" -#: commands/tablecmds.c:17909 +#: commands/tablecmds.c:19742 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "დანაყოფის გასაღებში სისტემური სვეტის (%s) გამოყენება შეუძლებელია" -#: commands/tablecmds.c:17920 commands/tablecmds.c:18010 +#: commands/tablecmds.c:19756 commands/tablecmds.c:19849 #, 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:19829 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "დანაყოფის გასაღების გამოსახულებები, არ შეიძლება, სისტემურ სვეტზე მითითებებს შეიცავდნენ" -#: commands/tablecmds.c:18040 +#: commands/tablecmds.c:19879 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "ფუნქცია დანაყოფის გასაღების გამოსახულებაში აუცილებლად უნდა იყოს მონიშნული, როგორც IMMUTABLE" -#: commands/tablecmds.c:18049 +#: commands/tablecmds.c:19888 #, c-format msgid "cannot use constant expression as partition key" msgstr "დაყოფის გასაღების გამოსახულებაში მუდმივ გამოსახულებას ვერ გამოიყენებთ" -#: commands/tablecmds.c:18070 +#: commands/tablecmds.c:19909 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "დანაყოფის გამოსახულებისათვის კოლაციის დადგენა შეუძლებელია" -#: commands/tablecmds.c:18105 +#: commands/tablecmds.c:19944 #, 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:19950 #, 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:20210 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" უკვე დანაყოფია" -#: commands/tablecmds.c:18399 +#: commands/tablecmds.c:20216 #, c-format msgid "cannot attach a typed table as partition" msgstr "ტიპიზირებული ცხრილის, როგორც დანაყოფის მიბმა შეუძლებელია" -#: commands/tablecmds.c:18415 +#: commands/tablecmds.c:20232 #, c-format msgid "cannot attach inheritance child as partition" msgstr "მემკვიდრეობის შვილის დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18429 +#: commands/tablecmds.c:20246 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "მემკვიდრეობის მშობლის დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18463 +#: commands/tablecmds.c:20280 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "დროებითი ურითერთობის, როგორც მუდმივი ურთიერთობის (\"%s\") დანაყოფის მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18471 +#: commands/tablecmds.c:20288 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "მუდმივი ურთიერთობის, როგორც დროებითი ურთიერთობის (%s) დანაყოფის მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18479 +#: commands/tablecmds.c:20296 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "სხვა სესიის დროებითი ურთიერთობის დანაყოფის მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18486 +#: commands/tablecmds.c:20303 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "სხვა სესიის დროებითი ურთიერთობის დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18506 +#: commands/tablecmds.c:20323 #, c-format msgid "table \"%s\" being attached contains an identity column \"%s\"" msgstr "ცხრილი \"%s\", რომლის მიმაგრებაც მიმდინარეობს, შეიცავს იდენტიფიკაციის სვეტს \"%s\"" -#: commands/tablecmds.c:18508 +#: commands/tablecmds.c:20325 #, c-format msgid "The new partition may not contain an identity column." msgstr "ახალი დანაყოფი არ შეიძლება, იდენტიფიკატორის სვეტს შეიცავდეს." -#: commands/tablecmds.c:18516 +#: commands/tablecmds.c:20333 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "ცხრილი \"%s\" შეიცავს სვეტს \"%s\", რომელიც მშობელში \"%s\" აღმოჩენილი არაა" -#: commands/tablecmds.c:18519 +#: commands/tablecmds.c:20336 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "ახალი დანაყოფი მხოლოდ მშობელში არსებულ სვეტებს შეიძლება, შეიცავდეს." -#: commands/tablecmds.c:18531 +#: commands/tablecmds.c:20348 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "ტრიგერი \"%s\" ხელს უშლის ცხრილს \"%s\" დანაყოფად გადაიქცეს" -#: commands/tablecmds.c:18533 +#: commands/tablecmds.c:20350 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "დანაყოფებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა." -#: commands/tablecmds.c:18694 +#: commands/tablecmds.c:20532 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "გარე ცხრილის \"%s\" დაყოფილი ცხრილის (\"%s\") დანაყოფის სახით მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18697 +#: commands/tablecmds.c:20535 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "დაყოფილი ცხრილი \"%s\" უნიკალურ ცხრილებს შეიცავს." -#: commands/tablecmds.c:19019 +#: commands/tablecmds.c:20858 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "ნაგულისხმევი დანაყოფის არსებობის შემთხვევაში დანაყოფების ერთდროული მოხსნა შეუძლებელია" -#: commands/tablecmds.c:19128 +#: commands/tablecmds.c:20967 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "დაყოფილი ცხრილი \"%s\" ერთდროულად წაიშალა" -#: commands/tablecmds.c:19134 +#: commands/tablecmds.c:20973 #, 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:21596 commands/tablecmds.c:21616 commands/tablecmds.c:21637 commands/tablecmds.c:21656 commands/tablecmds.c:21705 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "ერთი ინდექსის ინდექსის (%s) მეორე ინდექსის (\"%s) დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:19664 +#: commands/tablecmds.c:21599 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "ინდექსი %s სხვა ინდექსზეა უკვე მიმაგრებული." -#: commands/tablecmds.c:19684 +#: commands/tablecmds.c:21619 #, 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:21640 #, c-format msgid "The index definitions do not match." msgstr "ინდექსის აღწერები არ ემთხვევა." -#: commands/tablecmds.c:19724 +#: commands/tablecmds.c:21659 #, 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:21708 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "ცხრილისთვის %s სხვა ინდექსი უკვე მიმაგრებულია." -#: commands/tablecmds.c:20002 +#: commands/tablecmds.c:21831 +#, c-format +msgid "invalid primary key definition" +msgstr "არასწორი ძირითადი გასაღების აღწერა" + +#: commands/tablecmds.c:21832 +#, c-format +msgid "Column \"%s\" of relation \"%s\" is not marked NOT NULL." +msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" არაა დანიშნული, როგორც NOT NULL." + +#: commands/tablecmds.c:21967 #, c-format msgid "column data type %s does not support compression" msgstr "სვეტის მონაცემის ტიპს (%s) შეკუმშვის მხარდაჭერა არ გააჩნია" -#: commands/tablecmds.c:20009 +#: commands/tablecmds.c:21974 #, c-format msgid "invalid compression method \"%s\"" msgstr "შეკუმშვის არასწორი მეთოდი \"%s\"" -#: commands/tablecmds.c:20035 +#: commands/tablecmds.c:22000 #, c-format msgid "invalid storage type \"%s\"" msgstr "საცავის არასწორი ტიპი \"%s\"" -#: commands/tablecmds.c:20045 +#: commands/tablecmds.c:22010 #, 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" @@ -11645,277 +11872,272 @@ msgstr "ცხრილების სივრცის (%u) საქაღ msgid "You can remove the directories manually if necessary." msgstr "თუ გჭირდებათ, საქაღალდეები შეგიძლიათ ხელითაც წაშალოთ." -#: commands/trigger.c:225 commands/trigger.c:236 +#: commands/trigger.c:227 commands/trigger.c:238 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" ცხრილია" -#: commands/trigger.c:227 commands/trigger.c:238 +#: commands/trigger.c:229 commands/trigger.c:240 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "ცხრილებს INSTEAD OF ტიპის ტრიგერები ვერ ექნებათ." -#: commands/trigger.c:259 +#: commands/trigger.c:261 #, c-format msgid "\"%s\" is a partitioned table" msgstr "\"%s\" დაყოფილი ცხრილია" -#: commands/trigger.c:261 +#: commands/trigger.c:263 #, c-format msgid "ROW triggers with transition tables are not supported on partitioned tables." msgstr "დანაყოფებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა." -#: commands/trigger.c:273 commands/trigger.c:280 commands/trigger.c:444 +#: commands/trigger.c:275 commands/trigger.c:282 commands/trigger.c:446 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" ხედია" -#: commands/trigger.c:275 +#: commands/trigger.c:277 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "ხედებს მწკრივის დონის BEFORE და AFTER ტრიგერები ვერ ექნებათ." -#: commands/trigger.c:282 +#: commands/trigger.c:284 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "ხედებს TRUNCATE ტიპის ტრიგერები ვერ ექნებათ." -#: commands/trigger.c:290 commands/trigger.c:302 commands/trigger.c:437 +#: commands/trigger.c:292 commands/trigger.c:304 commands/trigger.c:439 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" გარე ცხრილია" -#: commands/trigger.c:292 +#: commands/trigger.c:294 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "გარე ცხრილებს INSTEAD OF ტრიგერები ვერ ექნებათ." -#: commands/trigger.c:304 +#: commands/trigger.c:306 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "გარე ცხრილებს შეზღუდვის ტრიგერები ვერ ექნებათ." -#: commands/trigger.c:309 commands/trigger.c:1325 commands/trigger.c:1432 +#: commands/trigger.c:311 commands/trigger.c:1330 commands/trigger.c:1437 #, c-format msgid "relation \"%s\" cannot have triggers" msgstr "ურთიერთობას \"%s\" ტრიგერები არ შეიძლება ჰქონდეთ" -#: commands/trigger.c:380 +#: commands/trigger.c:382 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "TRUNCATE FOR EACH ROW ტრიგერები მხარდაუჭერელია" -#: commands/trigger.c:388 +#: commands/trigger.c:390 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "INSTEAD OF ტრიგერები უნდა იყოს FOR EACH ROW" -#: commands/trigger.c:392 +#: commands/trigger.c:394 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "INSTEAD OF ტრიგერებს WHEN პირობები არ შეიძლება ჰქონდეს" -#: commands/trigger.c:396 +#: commands/trigger.c:398 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "INSTEAD OF ტრიგერებს სვეტების სიები არ შეიძლება ჰქონდეთ" -#: commands/trigger.c:425 +#: commands/trigger.c:427 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "" -#: commands/trigger.c:426 +#: commands/trigger.c:428 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "გარდამავალი ცხრილების სახელებისთვის OLD TABLE ან NEW TABLE გამოიყენეთ." -#: commands/trigger.c:439 +#: commands/trigger.c:441 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "გარე ცხრილებზე არსებულ ტრიგერებს გარდამავალი ცხრილები ვერ ექნებათ." -#: commands/trigger.c:446 +#: commands/trigger.c:448 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "ხედებზე არსებულ ტრიგერებს გარდამავალი ცხრილები ვერ ექნებათ." -#: commands/trigger.c:462 +#: commands/trigger.c:464 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "ROW ტრიგერები გარდამავალი ცხრილებით დანაყოფებზე მხარდაჭერილი არაა" -#: commands/trigger.c:466 +#: commands/trigger.c:468 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "ROW ტრიგერები გარდამავალი ცხრილებით მემკვიდრეობის შვილებზე მხარდაჭერილი არაა" -#: commands/trigger.c:472 +#: commands/trigger.c:474 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "გარდამავალი ცხრილის სახელი მხოლოდ ტრიგერისთვის AFTER შეგიძლიათ, მიუთითოთ" -#: commands/trigger.c:477 +#: commands/trigger.c:479 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "ტრიგერები TRUNCATE გარდამავალი ცხრილებით მხარდაჭერილი არაა" -#: commands/trigger.c:494 +#: commands/trigger.c:496 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "გარდამავალი ცხრილების მითითება ტრიგერებისთვის, რომლებსაც ერთზე მეტი მოვლენა გააჩნიათ, შეუძლებელია" -#: commands/trigger.c:505 +#: commands/trigger.c:507 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "გარდამავალი ცხრილების მითითება ტრიგერებისთვის, რომლებსაც სვეტების სიები გააჩნიათ, შეუძლებელია" -#: commands/trigger.c:522 +#: commands/trigger.c:524 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE მხოლოდ INSERT ან UPDATE ტრიგერისთვის შეგიძლიათ, მიუთითოთ" -#: commands/trigger.c:527 +#: commands/trigger.c:529 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE -ის რამდენჯერმე მითითება აკრძალულია" -#: commands/trigger.c:537 +#: commands/trigger.c:539 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE მხოლოდ DELETE ან UPDATE ტრიგერისთვის შეგიძლიათ, მიუთითოთ" -#: commands/trigger.c:542 +#: commands/trigger.c:544 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE -ის რამდენჯერმე მითითება აკრძალულია" -#: commands/trigger.c:552 +#: commands/trigger.c:554 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "OLD TABLE-ის და NEW TABLE-ის სახელები ერთი და იგივე ვერ იქნება" -#: commands/trigger.c:616 commands/trigger.c:629 +#: commands/trigger.c:618 commands/trigger.c:631 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "გამოსახულების ტრიგერის WHEN პირობა არ შეუძლება, სვეტის მნიშვნელობებზე მიუთითებდეს" -#: commands/trigger.c:621 +#: commands/trigger.c:623 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "INSERT-ის ტრიგერის WHEN პირობა არ შეიძლება, OLD მნიშვნელობებზე მიუთითებდეს" -#: commands/trigger.c:634 +#: commands/trigger.c:636 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "DELETE-ის ტრიგერის WHEN პირობა არ შეიძლება, NEW მნიშვნელობებზე მიუთითებდეს" -#: commands/trigger.c:639 +#: commands/trigger.c:641 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "BEFORE-ის ტრიგერის WHEN პირობა არ შეიძლება, NEW სისტემურ სვეტებზე მიუთითებდეს" -#: commands/trigger.c:647 commands/trigger.c:655 +#: commands/trigger.c:650 commands/trigger.c:658 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "BEFORE-ის ტრიგერის WHEN პირობა არ შეიძლება, NEW გენერირებულ სვეტებზე მიუთითებდეს" -#: commands/trigger.c:648 +#: commands/trigger.c:651 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "" -#: commands/trigger.c:763 commands/trigger.c:1607 +#: commands/trigger.c:766 commands/trigger.c:1613 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "ტრიგერი \"%s\" ურთიერთობისთვის \"%s\" უკვე არსებობს" -#: commands/trigger.c:776 +#: commands/trigger.c:779 #, c-format msgid "trigger \"%s\" for relation \"%s\" is an internal or a child trigger" msgstr "ტრიგერი \"%s\" ურთიერთობისთვის \"%s\" შიდა ან შვილი ტრიგერია" -#: commands/trigger.c:795 +#: commands/trigger.c:798 #, c-format msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" msgstr "ტრიგერი \"%s\" ურთიერთობისთვის \"%s\", შეზღუდვის ტრიგერია" -#: commands/trigger.c:1397 commands/trigger.c:1550 commands/trigger.c:1831 +#: commands/trigger.c:1402 commands/trigger.c:1556 commands/trigger.c:1837 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "ტრიგერი \"%s\" ცხრილისთვის \"%s\" არ არსებობს" -#: commands/trigger.c:1522 +#: commands/trigger.c:1528 #, c-format msgid "cannot rename trigger \"%s\" on table \"%s\"" msgstr "ტრიგერის (%s) (ცხრილზე %s) სახელის გადარქმევა შეუძლებელია" -#: commands/trigger.c:1524 +#: commands/trigger.c:1530 #, c-format msgid "Rename the trigger on the partitioned table \"%s\" instead." msgstr "ამის მაგიერ დაყოფილ ცხრილზე ('%s\") ტრიგერს გადაარქვით სახელი." -#: commands/trigger.c:1624 +#: commands/trigger.c:1630 #, c-format msgid "renamed trigger \"%s\" on relation \"%s\"" msgstr "ურთიერთობაზე \"%2$s\" ტრიგერს \"%1$s\" სახელი გადაერქვა" -#: commands/trigger.c:1770 +#: commands/trigger.c:1776 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "წვდომა აკრძალულია: %s სისტემური ტრიგერია" -#: commands/trigger.c:2379 +#: commands/trigger.c:2385 #, c-format msgid "trigger function %u returned null value" msgstr "ტრიგერის ფუნქციამ %u ნულოვანი მნიშვნელობა დააბრუნა" -#: commands/trigger.c:2439 commands/trigger.c:2657 commands/trigger.c:2910 commands/trigger.c:3263 +#: commands/trigger.c:2445 commands/trigger.c:2665 commands/trigger.c:2918 commands/trigger.c:3273 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENT ტრიგერს მნიშვნელობის დაბრუნება არ შეუძლია" -#: commands/trigger.c:2515 +#: commands/trigger.c:2523 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "მწკრივის სხვა დანაყოფში გადატანა BEFORE FOR EACH ROW ტრიგერის დროს მხარდაჭერილი არაა" -#: commands/trigger.c:2516 +#: commands/trigger.c:2524 #, c-format 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:3351 executor/nodeModifyTable.c:1685 executor/nodeModifyTable.c:1759 executor/nodeModifyTable.c:2566 executor/nodeModifyTable.c:2656 executor/nodeModifyTable.c:3328 executor/nodeModifyTable.c:3498 #, 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:3392 executor/nodeLockRows.c:228 executor/nodeLockRows.c:237 executor/nodeModifyTable.c:388 executor/nodeModifyTable.c:1701 executor/nodeModifyTable.c:2582 executor/nodeModifyTable.c:2807 #, 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:3400 executor/nodeModifyTable.c:1791 executor/nodeModifyTable.c:2673 executor/nodeModifyTable.c:2831 executor/nodeModifyTable.c:3346 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "ერთდროული წაშლის გამო წვდომის სერიალიზაცია შეუძლებელია" -#: commands/trigger.c:4597 +#: commands/trigger.c:4635 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "" -#: commands/trigger.c:5780 +#: commands/trigger.c:5831 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "შეზღუდვა გადადებადი არაა %s" -#: commands/trigger.c:5803 +#: commands/trigger.c:5854 #, c-format msgid "constraint \"%s\" does not exist" msgstr "შეზღუდვა \"%s\" არ არსებობს" @@ -11953,7 +12175,7 @@ msgstr "ტექსტის ძებნის დამმუშავებ #: commands/tsearchcmds.c:278 #, c-format msgid "text search parser lextypes method is required" -msgstr "" +msgstr "აუცილებელია ტექსტური ძებნის დამმუშაევებლის lextypes-ის მეთოდი" #: commands/tsearchcmds.c:372 #, c-format @@ -12025,7 +12247,7 @@ msgstr "საბაზისო ტიპის შესაცვლელა msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." msgstr "" -#: commands/typecmds.c:331 commands/typecmds.c:1460 commands/typecmds.c:4480 +#: commands/typecmds.c:331 commands/typecmds.c:1486 commands/typecmds.c:4471 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "ტიპის უცნობი ატრიბუტი: %s" @@ -12045,7 +12267,7 @@ msgstr "%s მასივის ელემენტის ტიპი არ msgid "alignment \"%s\" not recognized" msgstr "სწორება \"%s\" უცნობია" -#: commands/typecmds.c:454 commands/typecmds.c:4354 +#: commands/typecmds.c:454 commands/typecmds.c:4345 #, c-format msgid "storage \"%s\" not recognized" msgstr "საცავი \"%s\" უცნობია" @@ -12075,332 +12297,347 @@ msgstr "ელემენტის ტიპის მითითება გ msgid "\"%s\" is not a valid base type for a domain" msgstr "%s დომენისთვის სწორ ბაზისურ ტიპს არ წარმოადგენს" -#: commands/typecmds.c:883 +#: commands/typecmds.c:885 #, c-format msgid "multiple default expressions" msgstr "ერთზე მეტი ნაგულისხმევი გამოსახულება" -#: commands/typecmds.c:946 commands/typecmds.c:955 +#: commands/typecmds.c:945 commands/typecmds.c:960 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "კონფლიქტური NULL/NOT NULL შეზღუდვები" -#: commands/typecmds.c:971 +#: commands/typecmds.c:950 +#, c-format +msgid "not-null constraints for domains cannot be marked NO INHERIT" +msgstr "არანულოვანი შეზღუდვები დომენებისთვის არ შეიძლება, NO INHERIT-ით მონიშნოთ" + +#: commands/typecmds.c:977 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "დომენის შემოწმების შეზღუდვების, როგორც NO INHERIT, მონიშვნა შეუძლებელია" -#: commands/typecmds.c:980 commands/typecmds.c:2940 +#: commands/typecmds.c:988 #, c-format msgid "unique constraints not possible for domains" msgstr "უნიკალური შეზღუდვები დომენებისთვის შეუძლებელია" -#: commands/typecmds.c:986 commands/typecmds.c:2946 +#: commands/typecmds.c:995 #, c-format msgid "primary key constraints not possible for domains" msgstr "ძირითადი გასაღების შეზღუდვა დომენებისთვის შეუძლებელია" -#: commands/typecmds.c:992 commands/typecmds.c:2952 +#: commands/typecmds.c:1002 #, c-format msgid "exclusion constraints not possible for domains" msgstr "გაშვების შეზღუდვა დომენებისთვის შეუძლებელია" -#: commands/typecmds.c:998 commands/typecmds.c:2958 +#: commands/typecmds.c:1009 #, c-format msgid "foreign key constraints not possible for domains" msgstr "გარე გასაღების შეზღუდვა დომენებისთვის შეუძლებელია" -#: commands/typecmds.c:1007 commands/typecmds.c:2967 +#: commands/typecmds.c:1019 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "" -#: commands/typecmds.c:1327 utils/cache/typcache.c:2570 +#: commands/typecmds.c:1027 +#, c-format +msgid "specifying GENERATED not supported for domains" +msgstr "დომენებისთვის GENERATED-ის მითითება მხარდაჭერილი არაა" + +#: commands/typecmds.c:1035 +#, c-format +msgid "specifying constraint enforceability not supported for domains" +msgstr "შეზღუდვის ნაძალადევობის მითითება დომენებისთვის მხარდაჭერილი არაა" + +#: commands/typecmds.c:1353 utils/cache/typcache.c:2745 #, c-format msgid "%s is not an enum" msgstr "%s ჩამონათვალი არაა" -#: commands/typecmds.c:1468 +#: commands/typecmds.c:1494 #, c-format msgid "type attribute \"subtype\" is required" msgstr "ტიპის ატრიბუტი \"subtype\" აუცილებელია" -#: commands/typecmds.c:1473 +#: commands/typecmds.c:1499 #, c-format msgid "range subtype cannot be %s" msgstr "%s დიაპაზონის ქვეტიპი ვერ იქნება" -#: commands/typecmds.c:1492 +#: commands/typecmds.c:1518 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "" -#: commands/typecmds.c:1502 +#: commands/typecmds.c:1528 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "" -#: commands/typecmds.c:1503 +#: commands/typecmds.c:1529 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." msgstr "" -#: commands/typecmds.c:1975 +#: commands/typecmds.c:2005 #, c-format msgid "type input function %s has multiple matches" msgstr "ტიპის შეყვანის ფუნქციის (%s) რამდენიმე ასლი არსებობს" -#: commands/typecmds.c:1993 +#: commands/typecmds.c:2023 #, c-format msgid "type input function %s must return type %s" msgstr "ტიპის შეყვანის ფუნქციამ (\"%s\") უნდა დააბრუნოს ტიპი \"%s\"" -#: commands/typecmds.c:2009 +#: commands/typecmds.c:2039 #, c-format msgid "type input function %s should not be volatile" msgstr "ტიპის შეყვანის ფუნქცია (%s) ცვალებადი არ უნდა იყოს" -#: commands/typecmds.c:2037 +#: commands/typecmds.c:2067 #, c-format msgid "type output function %s must return type %s" msgstr "ტიპის გამოტანის ფუნქციამ (%s) უნდა დააბრუნოს ტიპი \"%s\"" -#: commands/typecmds.c:2044 +#: commands/typecmds.c:2074 #, c-format msgid "type output function %s should not be volatile" msgstr "ტიპის გამოტანის ფუნქცია (%s) ცვალებადი არ უნდა იყოს" -#: commands/typecmds.c:2073 +#: commands/typecmds.c:2103 #, c-format msgid "type receive function %s has multiple matches" msgstr "ტიპის მიღების ფუქნციის (%s) რამდენიმე ასლი არსებობს" -#: commands/typecmds.c:2091 +#: commands/typecmds.c:2121 #, c-format msgid "type receive function %s must return type %s" msgstr "ტიპის მიღების ფუნქციამ (%s) უნდა დააბრუნოს ტიპი %s" -#: commands/typecmds.c:2098 +#: commands/typecmds.c:2128 #, c-format msgid "type receive function %s should not be volatile" msgstr "ტიპის მიღების ფუნქცია (%s) ცვალებადი არ უნდა იყოს" -#: commands/typecmds.c:2126 +#: commands/typecmds.c:2156 #, c-format msgid "type send function %s must return type %s" msgstr "ტიპის გაგზავნის ფუნქციამ (%s) უნდა დააბრუნოს ტიპი \"%s\"" -#: commands/typecmds.c:2133 +#: commands/typecmds.c:2163 #, c-format msgid "type send function %s should not be volatile" msgstr "ტიპის გაგზავნის ფუნქცია (%s) ცვალებადი არ უნდა იყოს" -#: commands/typecmds.c:2160 +#: commands/typecmds.c:2190 #, c-format msgid "typmod_in function %s must return type %s" msgstr "typmod_in ფუნქციამ (%s) უნდა დააბრუნოს ტიპი %s" -#: commands/typecmds.c:2167 +#: commands/typecmds.c:2197 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "ტიპის მოდიფიკატორის შეყვანის ფუნქცია (%s) ცვალებადი არ უნდა იყოს" -#: commands/typecmds.c:2194 +#: commands/typecmds.c:2224 #, c-format msgid "typmod_out function %s must return type %s" msgstr "typmod_out ფუნქციამ (%s) უნდა დააბრუნოს ტიპი %s" -#: commands/typecmds.c:2201 +#: commands/typecmds.c:2231 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "ტიპის მოდიფიკატორის გამოტანის ფუნქცია (%s) ცვალებადი არ უნდა იყოს" -#: commands/typecmds.c:2228 +#: commands/typecmds.c:2258 #, c-format msgid "type analyze function %s must return type %s" msgstr "ტიპის ანალიზის ფუნქციამ (%s) უნდა დააბრუნოს ტიპი %s" -#: commands/typecmds.c:2257 +#: commands/typecmds.c:2287 #, c-format msgid "type subscripting function %s must return type %s" msgstr "" -#: commands/typecmds.c:2267 +#: commands/typecmds.c:2297 #, c-format msgid "user-defined types cannot use subscripting function %s" -msgstr "" +msgstr "მომხმარებლის აღწერილ ტიპებს არ შეუძლიათ, გამოიყენონ გამოწერის ფუნქცია %s" -#: commands/typecmds.c:2313 +#: commands/typecmds.c:2343 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "" -#: commands/typecmds.c:2344 +#: commands/typecmds.c:2374 #, c-format msgid "range canonical function %s must return range type" msgstr "კანონიკური დიაპაზონის ფუნქციამ (%s) დიაპაზონის ტიპი უნდა დააბრუნოს" -#: commands/typecmds.c:2350 +#: commands/typecmds.c:2380 #, c-format msgid "range canonical function %s must be immutable" msgstr "კანონიკური დიაპაზონის ფუნქცია (%s) მუდმივი უნდა იყოს" -#: commands/typecmds.c:2386 +#: commands/typecmds.c:2416 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "დიაპაზონის ქვეტიპის განსხვავების ფუნქციამ (%s) უნდა დააბრუნოს ტიპი: %s" -#: commands/typecmds.c:2393 +#: commands/typecmds.c:2423 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "დიაპაზონის ქვეტიპის განსხვავების ფუნქცია (%s) უცვლელი უნდა იყოს" -#: commands/typecmds.c:2420 +#: commands/typecmds.c:2450 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "ბინარული განახლების რეჟიმში pg_type-ის მასივის OID-ის მნიშვნელობა დაყენებული არაა" -#: commands/typecmds.c:2453 +#: commands/typecmds.c:2483 #, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" msgstr "ბინარული განახლების რეჟიმში pg_type-ის მრავალდიაპაზონიანი OID-ის მნიშვნელობა დაყენებული არაა" -#: commands/typecmds.c:2486 +#: commands/typecmds.c:2516 #, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" msgstr "ბინარული განახლების რეჟიმში pg_type-ის მრავალდიაპაზონიანი მასივის OID-ის მნიშვნელობა დაყენებული არაა" -#: commands/typecmds.c:2868 commands/typecmds.c:3093 +#: commands/typecmds.c:2898 commands/typecmds.c:3080 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "დომენის (\"%2$s\") შეზღუდვა (\"%1$s\") არ არსებობს" -#: commands/typecmds.c:2872 +#: commands/typecmds.c:2902 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "დომენის (\"%2$s\") შეზღუდვა (\"%1$s\") არ არსებობს. გამოტოვება" -#: commands/typecmds.c:3100 +#: commands/typecmds.c:3087 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "დომენის (\"%2$s\") შეზღუდვა (\"%1$s\") შეზღუდვის შემოწმება არაა" -#: commands/typecmds.c:3180 +#: commands/typecmds.c:3167 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "სვეტი \"%s\" (ცხრილში %s) ნულოვან მნიშვნელობებს შეიცავს" -#: commands/typecmds.c:3269 +#: commands/typecmds.c:3256 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "სვეტი \"%s\" ცხრილიდან \"%s\" შეიცავს მნიშვნელობებს, რომელიც ახალ შეზღუდვას არღვევს" -#: commands/typecmds.c:3498 commands/typecmds.c:3772 commands/typecmds.c:3857 commands/typecmds.c:4073 +#: commands/typecmds.c:3485 commands/typecmds.c:3763 commands/typecmds.c:3848 commands/typecmds.c:4064 #, c-format msgid "%s is not a domain" msgstr "\"%s\" დომენი არაა" -#: commands/typecmds.c:3532 commands/typecmds.c:3686 +#: commands/typecmds.c:3519 commands/typecmds.c:3675 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "შეზღუდვა \"%s\" დომენისთვის %s უკვე არსებობს" -#: commands/typecmds.c:3583 +#: commands/typecmds.c:3570 #, c-format msgid "cannot use table references in domain check constraint" msgstr "" -#: commands/typecmds.c:3784 commands/typecmds.c:3869 commands/typecmds.c:4223 +#: commands/typecmds.c:3775 commands/typecmds.c:3860 commands/typecmds.c:4214 #, c-format msgid "%s is a table's row type" msgstr "%s ცხრილის მწკრივის ტიპია" -#: commands/typecmds.c:3794 commands/typecmds.c:3879 commands/typecmds.c:4121 +#: commands/typecmds.c:3785 commands/typecmds.c:3870 commands/typecmds.c:4112 #, c-format msgid "cannot alter array type %s" msgstr "მასივის ტიპის (\"%s\") შეცვლა შეუძლებელია" -#: commands/typecmds.c:3796 commands/typecmds.c:3881 commands/typecmds.c:4123 +#: commands/typecmds.c:3787 commands/typecmds.c:3872 commands/typecmds.c:4114 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "ტიპი %s შეგიძლიათ, შეცვალოთ, რაც მასივის ტიპსაც შეცვლის." -#: commands/typecmds.c:3892 +#: commands/typecmds.c:3883 #, c-format msgid "cannot alter multirange type %s" msgstr "მრავალშუალედანი ტიპის %s შეცვლა შეუძლებელია" -#: commands/typecmds.c:3895 +#: commands/typecmds.c:3886 #, c-format msgid "You can alter type %s, which will alter the multirange type as well." msgstr "შეგიძლიათ შეცვალოთ ტიპი %s, რომელიც მრავალშუალედიან ტიპსაც შეცვლის." -#: commands/typecmds.c:4202 +#: commands/typecmds.c:4193 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "ტიპი \"%s\" სქემაში \"%s\" უკვე არსებობს" -#: commands/typecmds.c:4382 +#: commands/typecmds.c:4373 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "ტიპის საცავს PLAIN-ზე ვერ შეცვლით" -#: commands/typecmds.c:4475 +#: commands/typecmds.c:4466 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "ტიპის ატრიბუტის შეცვლა შეუძლებელია: %s" -#: commands/typecmds.c:4493 +#: commands/typecmds.c:4484 #, c-format msgid "must be superuser to alter a type" msgstr "ტიპის შესაცვლელად ზემომხმარებლის უფლებებია საჭირო" -#: commands/typecmds.c:4514 commands/typecmds.c:4523 +#: commands/typecmds.c:4505 commands/typecmds.c:4514 #, c-format msgid "%s is not a base type" msgstr "%s საბაზისო ტიპი არაა" -#: commands/user.c:200 +#: commands/user.c:201 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID-ის შეცვლა ახლა უკვე შეუძლებელია" -#: commands/user.c:318 commands/user.c:324 commands/user.c:330 commands/user.c:336 commands/user.c:342 +#: commands/user.c:319 commands/user.c:325 commands/user.c:331 commands/user.c:337 commands/user.c:343 #, c-format msgid "permission denied to create role" msgstr "როლის შექმნის წვდომა აკრძალულია" -#: commands/user.c:319 +#: commands/user.c:320 #, c-format msgid "Only roles with the %s attribute may create roles." msgstr "როლების შექმნა მხოლოდ %s ატრიბუტის მქონე როლებს შეუძლიათ." -#: commands/user.c:325 commands/user.c:331 commands/user.c:337 commands/user.c:343 +#: commands/user.c:326 commands/user.c:332 commands/user.c:338 commands/user.c:344 #, c-format 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:355 commands/user.c:1386 commands/user.c:1393 gram.y:17493 gram.y:17539 utils/adt/acl.c:5690 utils/adt/acl.c:5696 #, c-format msgid "role name \"%s\" is reserved" msgstr "როლის სახელი \"%s\" დაცულია" -#: commands/user.c:356 commands/user.c:1388 commands/user.c:1395 +#: commands/user.c:357 commands/user.c:1388 commands/user.c:1395 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "როლის სახელები, რომლებიც \"pg_\"-ით იწყება, დაცულია." -#: commands/user.c:377 commands/user.c:1410 +#: commands/user.c:378 commands/user.c:1410 #, c-format msgid "role \"%s\" already exists" msgstr "როლი \"%s\" უკვე არსებობს" -#: commands/user.c:439 commands/user.c:924 +#: commands/user.c:440 commands/user.c:924 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "ცარიელი სტრიქონი არ არის სწორი პაროლი, პაროლის გაწმენდა" -#: commands/user.c:468 +#: commands/user.c:469 #, c-format msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "ბინარული განახლების რეჟიმში pg_authid-ის OID-ის მნიშვნელობა დაყენებული არაა" @@ -12436,8 +12673,8 @@ msgstr "სხვა როლის პაროლის შესაცვლ #: 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 +12706,7 @@ msgstr "როლების წაშლა მხოლოდ სამიზ 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:864 commands/variable.c:867 commands/variable.c:983 commands/variable.c:986 utils/adt/acl.c:366 utils/adt/acl.c:386 utils/adt/acl.c:5545 utils/adt/acl.c:5593 utils/adt/acl.c:5621 utils/adt/acl.c:5640 utils/adt/regproc.c:1571 utils/init/miscinit.c:804 #, c-format msgid "role \"%s\" does not exist" msgstr "როლი არ არსებობს: \"%s\"" @@ -12534,7 +12771,7 @@ msgstr "ამ როლის სახელის გადარქმევ msgid "MD5 password cleared because of role rename" msgstr "MD5 პაროლი გასუფთავდა როლის სახელის შეცვლის გამო" -#: commands/user.c:1518 gram.y:1297 +#: commands/user.c:1518 gram.y:1286 #, c-format msgid "unrecognized role option \"%s\"" msgstr "როლის უცნობი პარამეტრი: \"%s\"" @@ -12574,244 +12811,249 @@ msgstr "მხოლოდ როლებს, რომლებსაც რ msgid "Only roles with privileges of role \"%s\" may reassign objects to it." msgstr "მხოლოდ როლებს, რომლებსაც როლის, '%s' პრივილეგიები გააჩნია, შეუძლია, ობიექტები თავიდან მიანიჭოს." -#: commands/user.c:1733 +#: commands/user.c:1734 #, c-format msgid "role \"%s\" cannot be a member of any role" msgstr "როლი \"%s\" სხვა როლის წევრი ვერ იქნება" -#: commands/user.c:1746 +#: commands/user.c:1747 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "როლი \"%s\" როლის \"%s\" წევრია" -#: commands/user.c:1786 commands/user.c:1812 +#: commands/user.c:1787 commands/user.c:1813 #, c-format msgid "%s option cannot be granted back to your own grantor" msgstr "%s პარამეტრს მომნიჭებელს ვერ მიანიჭებთ" -#: commands/user.c:1889 +#: commands/user.c:1890 #, c-format msgid "role \"%s\" has already been granted membership in role \"%s\" by role \"%s\"" msgstr "როლი \"%s\" უკვე გაწევრდა როლში \"%s\" \"%s\" როლის მიერ" -#: commands/user.c:2024 +#: commands/user.c:2036 #, c-format msgid "role \"%s\" has not been granted membership in role \"%s\" by role \"%s\"" msgstr "როლს \"%s\" უარი ეთქვა როლში \"%s\" გაწევრებაზე \"%s\" როლის მიერ" -#: commands/user.c:2124 +#: commands/user.c:2137 #, c-format msgid "role \"%s\" cannot have explicit members" msgstr "როლი \"%s\" არ შეიძლება, აშკარა წევრებს შეიცავდეს" -#: commands/user.c:2135 commands/user.c:2158 +#: commands/user.c:2148 commands/user.c:2171 #, c-format msgid "permission denied to grant role \"%s\"" msgstr "როლის (\"%s\") დაყენების წვდომა აკრძალულია" -#: commands/user.c:2137 +#: commands/user.c:2150 #, c-format msgid "Only roles with the %s attribute may grant roles with the %s attribute." msgstr "მხოლოდ როლებს, რომლებსაც %s ატრიბუტი გააჩნიათ, შეუძლიათ, როლებს %s ატრიბუტი მიანიჭონ." -#: commands/user.c:2142 commands/user.c:2165 +#: commands/user.c:2155 commands/user.c:2178 #, c-format msgid "permission denied to revoke role \"%s\"" msgstr "როლის (\"%s\") გაუქმების წვდომა აკრძალულია" -#: commands/user.c:2144 +#: commands/user.c:2157 #, c-format msgid "Only roles with the %s attribute may revoke roles with the %s attribute." msgstr "მხოლოდ როლებს, რომლებსაც %s ატრიბუტი გააჩნიათ, შეუძლიათ, როლებს %s ატრიბუტი მოაცილონ." -#: commands/user.c:2160 +#: commands/user.c:2173 #, c-format msgid "Only roles with the %s option on role \"%s\" may grant this role." msgstr "მხოლოდ როლებს, რომლებსაც როლზე \"%2$s\" პარამეტრი \"%1$s\" გააჩნიათ, შეუძლიათ, მიანიჭონ ეს როლი." -#: commands/user.c:2167 +#: commands/user.c:2180 #, c-format msgid "Only roles with the %s option on role \"%s\" may revoke this role." msgstr "მხოლოდ როლებს, რომლებსაც როლზე \"%2$s\" პარამეტრი \"%1$s\" გააჩნიათ, შეუძლიათ, მოაცილონ ეს როლი." -#: commands/user.c:2247 commands/user.c:2256 +#: commands/user.c:2260 commands/user.c:2269 #, c-format msgid "permission denied to grant privileges as role \"%s\"" msgstr "როლის (\"%s\") მინიჭების წვდომა აკრძალულია" -#: commands/user.c:2249 +#: commands/user.c:2262 #, c-format msgid "Only roles with privileges of role \"%s\" may grant privileges as this role." msgstr "მხოლოდ როლებს, რომლებსაც როლის \"%s\" პრივილეგიები გააჩნიათ, შეუძლიათ პრივილეგიები, როგორც, ამ როლმა, მიანიჭონ." -#: commands/user.c:2258 +#: commands/user.c:2271 #, c-format msgid "The grantor must have the %s option on role \"%s\"." msgstr "მიმნიჭებელს უნდა ჰქონდეს %s პარამეტრი როლზე \"%s\"." -#: commands/user.c:2266 +#: commands/user.c:2279 #, c-format msgid "permission denied to revoke privileges granted by role \"%s\"" msgstr "როლის (\"%s\") მიერ მინიჭებული პრივილეგიების გაუქმების წვდომა აკრძალულია" -#: commands/user.c:2268 +#: commands/user.c:2281 #, c-format 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:2504 utils/adt/acl.c:1325 #, c-format msgid "dependent privileges exist" msgstr "დამოკიდებული პრივილეგიები არსებობს" -#: commands/user.c:2492 utils/adt/acl.c:1319 +#: commands/user.c:2505 utils/adt/acl.c:1326 #, c-format msgid "Use CASCADE to revoke them too." msgstr "მათ გასაუქმებლადაც CASCADE გამოიყენეთ." -#: commands/vacuum.c:134 +#: commands/vacuum.c:146 #, c-format -msgid "\"vacuum_buffer_usage_limit\" must be 0 or between %d kB and %d kB" -msgstr "\"vacuum_buffer_usage_limit\"-ის მნიშვნელობა 0 ან %d კბ-სა და %d კბ-ს შორის უნდა იყოს" +msgid "\"%s\" must be 0 or between %d kB and %d kB." +msgstr "\"%s\"-ის მნიშვნელობა 0 ან %d კბ-სა და %d კბ-ს შორის უნდა იყოს." -#: commands/vacuum.c:209 +#: commands/vacuum.c:222 #, c-format msgid "BUFFER_USAGE_LIMIT option must be 0 or between %d kB and %d kB" msgstr "BUFFER_USAGE_LIMIT პარამეტრი 0 ან %d კბ-სა და %d კბ-ს შორის უნდა იყოს" -#: commands/vacuum.c:219 +#: commands/vacuum.c:232 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "\"ANALYZE\"-ის უცნობი პარამეტრი: %s" -#: commands/vacuum.c:259 +#: commands/vacuum.c:272 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "პარალელურ პარამეტრს ესაჭიროება მნიშვნელობა 0-სა და %d-ს შორის" -#: commands/vacuum.c:271 +#: commands/vacuum.c:284 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "პარალელური დამხმარე პროცესების რაოდენობა მომტვერსასრუტებისთვის 0-სა და %d-ს შორის უნდა იყოს" -#: commands/vacuum.c:292 +#: commands/vacuum.c:305 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "\"VACUUM\"-ის უცნობი პარამეტრი: %s" -#: commands/vacuum.c:318 +#: commands/vacuum.c:331 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL პარალელურად ვერ შესრულდება" -#: commands/vacuum.c:329 +#: commands/vacuum.c:342 #, c-format msgid "BUFFER_USAGE_LIMIT cannot be specified for VACUUM FULL" msgstr "VACUUM FULL-სთვის BUFFER_USAGE_LIMIT-ს ვერ მიუთითებთ" -#: commands/vacuum.c:343 +#: commands/vacuum.c:356 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "როცა მიწოდებულია სვეტების სია, პარამეტრის ANALYZE მითითება აუცილებელია" -#: commands/vacuum.c:355 +#: commands/vacuum.c:368 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM-ის პარამეტრს 'DISABLE_PAGE_SKIPPING' FULL-თან ერთად ვერ გამოიყენებთ" -#: commands/vacuum.c:362 +#: commands/vacuum.c:375 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "VACUUM FULL-თან ერთად PROCESS_TOAST აუცილებელია" -#: commands/vacuum.c:371 +#: commands/vacuum.c:384 #, c-format msgid "ONLY_DATABASE_STATS cannot be specified with a list of tables" msgstr "ONLY_DATABASE_STATS -ის მითითება ცხრილების სიასთან ერთად შეუძლებელია" -#: commands/vacuum.c:380 +#: commands/vacuum.c:393 #, c-format msgid "ONLY_DATABASE_STATS cannot be specified with other VACUUM options" msgstr "ONLY_DATABASE_STAT-ის მითითება სხვა VACUMM პარამეტრებთან ერთად შეუძლებელია" -#: commands/vacuum.c:515 +#: commands/vacuum.c:533 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s-ს VACUUM-დან ან ANALYZE-დან ვერ შეასარულებთ" -#: commands/vacuum.c:730 +#: commands/vacuum.c:745 #, c-format msgid "permission denied to vacuum \"%s\", skipping it" msgstr "\"%s\"-ის მომტვერსასრუტების წვდომა აკრძალულია. გამოტოვება" -#: commands/vacuum.c:743 +#: commands/vacuum.c:758 #, c-format msgid "permission denied to analyze \"%s\", skipping it" msgstr "\"%s\"-ის ანალიზისთვის წვდომა აკრძალულია. გამოტოვება" -#: commands/vacuum.c:821 commands/vacuum.c:918 +#: commands/vacuum.c:836 commands/vacuum.c:937 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "\"%s\"-ის მომტვერსასრუტება გამოტოვებულია -- ბლოკი ხელმისაწვდომი არაა" -#: commands/vacuum.c:826 +#: commands/vacuum.c:841 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "\"%s\"-ის მომტვერსასრუტება გამოტოვებულია -- ურთიერთობა აღარ არსებობს" -#: commands/vacuum.c:842 commands/vacuum.c:923 +#: commands/vacuum.c:857 commands/vacuum.c:942 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "\"%s\"-ის ანალიზი გამოტოვებულია -- ბლოკი ხელმისაწვდომი არაა" -#: commands/vacuum.c:847 +#: commands/vacuum.c:862 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "\"%s\"-ის ანალიზი გამოტოვებულია -- ურთიერთობა აღარ არსებობს" -#: commands/vacuum.c:1139 +#: commands/vacuum.c:978 +#, c-format +msgid "VACUUM ONLY of partitioned table \"%s\" has no effect" +msgstr "დაყოფილ ცხრილზე \"%s\" ბრძანებას VACUUM ONLY გავლენა არ აქვს" + +#: commands/vacuum.c:1169 #, c-format msgid "cutoff for removing and freezing tuples is far in the past" msgstr "" -#: commands/vacuum.c:1140 commands/vacuum.c:1145 +#: commands/vacuum.c:1170 commands/vacuum.c:1175 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." msgstr "" -#: commands/vacuum.c:1144 +#: commands/vacuum.c:1174 #, c-format msgid "cutoff for freezing multixacts is far in the past" msgstr "" -#: commands/vacuum.c:1890 +#: commands/vacuum.c:1936 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "ზოგიერთი ბაზა 2 მილიარდ ტრანზაქციაზე მეტია, რაც არ მომტვერსასრუტებულა" -#: commands/vacuum.c:1891 +#: commands/vacuum.c:1937 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" -#: commands/vacuum.c:2070 +#: commands/vacuum.c:2116 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" -#: commands/vacuum.c:2502 +#: commands/vacuum.c:2617 #, c-format -msgid "scanned index \"%s\" to remove %lld row versions" -msgstr "სკანირებული ინდექსი \"%s\" %lld მწკრივის ვერსიის წაშლას აპირებს" +msgid "scanned index \"%s\" to remove % row versions" +msgstr "სკანირებული ინდექსი \"%s\" % მწკრივის ვერსიის წაშლას აპირებს" -#: commands/vacuum.c:2521 +#: commands/vacuum.c:2636 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "ინდექსი \"%s\" ახლა %.0f მწკრივის ვერსიას შეიცავს, %u გვერდში" -#: commands/vacuum.c:2525 +#: commands/vacuum.c:2640 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -12819,14 +13061,14 @@ msgid "" "%u index pages are currently deleted, of which %u are currently reusable." msgstr "" -#: commands/vacuumparallel.c:708 +#: commands/vacuumparallel.c:709 #, 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:715 #, 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)" @@ -12835,8 +13077,8 @@ msgstr[1] "ინდექსის გასუფთავებისთვ #: commands/variable.c:185 #, c-format -msgid "Conflicting \"datestyle\" specifications." -msgstr "კონფლიქტური \"datestyle\"-ის სპეციფიკაციები." +msgid "Conflicting \"DateStyle\" specifications." +msgstr "კონფლიქტური \"DateStyle\"-ის სპეციფიკაციები." #: commands/variable.c:307 #, c-format @@ -12848,12 +13090,12 @@ msgstr "დროის სარტყელის ინტერვალშ msgid "Cannot specify days in time zone interval." msgstr "დროის სარტყელის ინტერვალში დღეებს ვერ მიუთითებთ." -#: commands/variable.c:351 commands/variable.c:433 +#: commands/variable.c:351 commands/variable.c:435 #, c-format msgid "time zone \"%s\" appears to use leap seconds" msgstr "დროის სარტყელი \"%s\", როგორც ჩანს, დამატებით წამებს იყენებს" -#: commands/variable.c:353 commands/variable.c:435 +#: commands/variable.c:353 commands/variable.c:437 #, c-format msgid "PostgreSQL does not support leap seconds." msgstr "PostgreSQL-ს დამატებითი წამების მხარდაჭერა არ გააჩნია." @@ -12863,107 +13105,97 @@ msgstr "PostgreSQL-ს დამატებითი წამების მ msgid "UTC timezone offset is out of range." msgstr "UTC დროის სარტყელი ზღვარს მიღმაა." -#: commands/variable.c:552 +#: commands/variable.c:554 #, c-format msgid "cannot set transaction read-write mode inside a read-only transaction" msgstr "მხოლოდ-კითხვადი ტრანზაქციის შიგნით ტრანზაქციის რეჟიმის ჩაწერა-წაკითხვის რეჟიმზე გადართვა შეუძლებელია" -#: commands/variable.c:559 +#: commands/variable.c:561 #, c-format msgid "transaction read-write mode must be set before any query" msgstr "ტრანზაქცის ჩაწერა-წაკითხვის რეჟიმი ყველა მოთხოვნის წინ უნდა იქნეს დაყენებული" -#: commands/variable.c:566 +#: commands/variable.c:568 #, c-format msgid "cannot set transaction read-write mode during recovery" msgstr "აღდგენისას ტრანზაქციის ჩაწერა-წაკითხვის რეჟიმის დაყენება შეუძლებელია" -#: commands/variable.c:592 +#: commands/variable.c:596 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must be called before any query" msgstr "SET TRANSACTION ISOLATION LEVEL ყველა მოთხოვნაზე ადრე უნდა გამოიძახოთ" -#: commands/variable.c:599 +#: commands/variable.c:603 #, c-format 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:610 storage/lmgr/predicate.c:1695 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "ცხელი მოლოდინში სერიალიზებადი რეჟიმის გამოყენება შეუძლებელია" -#: commands/variable.c:607 +#: commands/variable.c:611 #, c-format msgid "You can use REPEATABLE READ instead." msgstr "სამაგიეროდ, შეგიძლიათ, REPEATABLE READ გამოიყენოთ." -#: commands/variable.c:625 +#: commands/variable.c:633 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction" msgstr "SET TRANSACTION [NOT] DEFERRABLE-ს ქვეტრანზაქციაში ვერ გამოიძახებთ" -#: commands/variable.c:631 +#: commands/variable.c:639 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE must be called before any query" msgstr "SET TRANSACTION [NOT] DEFERRABLE ყველა მოთხოვნაზე ადრე უნდა გამოიძახოთ" -#: commands/variable.c:713 +#: commands/variable.c:715 +#, c-format +msgid "Cannot change \"client_encoding\" during a parallel operation." +msgstr "პარალელური ოპერაციის დროს \"client_encoding\" პარამეტრს ვერ შეცვლით." + +#: commands/variable.c:743 #, c-format msgid "Conversion between %s and %s is not supported." msgstr "%s-დან %s-ზე გადაყვანა მხარდაჭერილი არაა." -#: commands/variable.c:720 +#: commands/variable.c:750 #, c-format msgid "Cannot change \"client_encoding\" now." msgstr "ახლა \"client_encoding\"-ს ვერ შეცვლით." -#: commands/variable.c:781 -#, c-format -msgid "cannot change \"client_encoding\" during a parallel operation" -msgstr "პარალელური ოპერაციის დროს \"client_encoding\" პარამეტრს ვერ შეცვლით" - -#: commands/variable.c:863 +#: commands/variable.c:889 #, c-format msgid "permission will be denied to set session authorization \"%s\"" msgstr "სესიის ავტორიზაციის \"%s\" დასაყენებლად წვდომა აკრძალული იქნება" -#: commands/variable.c:868 +#: commands/variable.c:894 #, c-format msgid "permission denied to set session authorization \"%s\"" msgstr "სესიის ავტორიზაციის \"%s\" დასაყენებლად წვდომა აკრძალულია" -#: commands/variable.c:972 +#: commands/variable.c:1003 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "როლის (\"%s\") დაყენების წვდომა აკრძალული იქნება" -#: commands/variable.c:977 +#: commands/variable.c:1008 #, c-format msgid "permission denied to set role \"%s\"" msgstr "როლის (\"%s\") დაყენების წვდომა აკრძალულია" -#: commands/variable.c:1177 +#: commands/variable.c:1228 #, c-format msgid "Bonjour is not supported by this build" msgstr "ამ აგებაში Bonjour -ის მხარდაჭერა არ არსებბს" -#: commands/variable.c:1205 -#, 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 -#, 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:1256 #, c-format msgid "SSL is not supported by this build" msgstr "ამ აგებაში SSL-ის მხარდაჭერა არ არსებბს" -#: commands/view.c:79 +#: commands/view.c:78 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "კოლაციის გამოცნობის შეცდომა ხედის სვეტისთვის \"%s\"" @@ -13048,402 +13280,413 @@ msgstr "კურსორი \"%s\" მწკრივზე არ მდე 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:3093 #, 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:3105 #, 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:667 executor/execExpr.c:674 executor/execExpr.c:680 executor/execExprInterp.c:5440 executor/execExprInterp.c:5457 executor/execExprInterp.c:5556 executor/nodeModifyTable.c:210 executor/nodeModifyTable.c:229 executor/nodeModifyTable.c:246 executor/nodeModifyTable.c:256 executor/nodeModifyTable.c:266 #, 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:668 executor/nodeModifyTable.c:211 #, c-format msgid "Query has too many columns." msgstr "მოთხოვნას მეტისმეტად ბევრი სვეტ აქვს." -#: executor/execExpr.c:649 executor/nodeModifyTable.c:223 +#: executor/execExpr.c:675 executor/nodeModifyTable.c:230 #, 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:681 executor/execExprInterp.c:5458 executor/nodeModifyTable.c:257 #, 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:1157 parser/parse_agg.c:843 #, c-format msgid "window function calls cannot be nested" msgstr "ფანჯრის ფუნქციის გამოძახებებს ერთმანეთში ვერ ჩადგამთ" -#: executor/execExpr.c:1640 +#: executor/execExpr.c:1689 #, c-format msgid "target type is not an array" msgstr "სამიზნე ტიპი მასივი არაა" -#: executor/execExpr.c:1980 +#: executor/execExpr.c:2033 #, 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:2729 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:2756 executor/execSRF.c:738 executor/functions.c:1558 utils/adt/jsonfuncs.c:4056 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:3262 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:3390 executor/execExpr.c:3412 #, c-format msgid "type %s does not support subscripted assignment" msgstr "" -#: executor/execExprInterp.c:2007 +#: executor/execExprInterp.c:2415 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%2$s ტიპის ატრიბუტი %1$d წაიშალა" -#: executor/execExprInterp.c:2013 +#: executor/execExprInterp.c:2421 #, 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:2423 executor/execExprInterp.c:3782 executor/execExprInterp.c:3828 #, 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:2503 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1841 utils/cache/typcache.c:2000 utils/cache/typcache.c:2147 utils/fmgr/funcapi.c:569 #, c-format msgid "type %s is not composite" msgstr "ტიპი %s კომპოზიტური არაა" -#: executor/execExprInterp.c:2698 +#: executor/execExprInterp.c:3266 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF ამ ტიპის ცხრილისთვის მხარდაუჭერელია" -#: executor/execExprInterp.c:2911 +#: executor/execExprInterp.c:3479 #, c-format msgid "cannot merge incompatible arrays" msgstr "შეუთავსებელი მასივების შერწყმა შეუძლებელია" -#: executor/execExprInterp.c:2912 +#: executor/execExprInterp.c:3480 #, 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:3501 utils/adt/arrayfuncs.c:1305 utils/adt/arrayfuncs.c:3515 utils/adt/arrayfuncs.c:5605 utils/adt/arrayfuncs.c:6124 utils/adt/arraysubs.c:151 utils/adt/arraysubs.c:489 #, 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:3521 executor/execExprInterp.c:3556 #, 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:3533 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:3545 utils/adt/arrayfuncs.c:5377 +#: utils/adt/arrayfuncs.c:6216 utils/adt/arrayfuncs.c:6560 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:3781 executor/execExprInterp.c:3827 #, c-format msgid "attribute %d has wrong type" msgstr "ატრიბუტის არასწორი ტიპი: %d" -#: executor/execExprInterp.c:3845 utils/adt/domains.c:158 +#: executor/execExprInterp.c:4413 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:4428 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:5003 #, c-format msgid "no SQL/JSON item found for specified path of column \"%s\"" -msgstr "" +msgstr "სვეტის \"%s\" მითითებულ ბილიკზე SQL/JSON ელემენტი აღმოჩენილი არაა" -#: executor/execExprInterp.c:4438 +#: executor/execExprInterp.c:5008 #, c-format msgid "no SQL/JSON item found for specified path" -msgstr "" +msgstr "მითითებულ ბილიკზე SQL/JSON ელემენტი აღმოჩენილი არაა" -#: executor/execExprInterp.c:4742 +#. translator: first %s is a SQL/JSON clause (e.g. ON ERROR) +#: executor/execExprInterp.c:5208 executor/execExprInterp.c:5216 +#, c-format +msgid "could not coerce %s expression (%s) to the RETURNING type" +msgstr "ვერ შევაკავე %s გამოსახულება (%s) ტპზე RETURNING" + +#: executor/execExprInterp.c:5441 #, 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:5557 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" -#: executor/execIndexing.c:593 +#: executor/execIndexing.c:608 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "" -#: executor/execIndexing.c:870 +#: executor/execIndexing.c:911 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "გამორიცხვის შეზღუდვის (\"%s\") შექმნა შეუძლებელია" -#: executor/execIndexing.c:873 +#: executor/execIndexing.c:914 #, c-format msgid "Key %s conflicts with key %s." msgstr "გასაღები %s კონფლიქტობს გასაღებ %s-სთან." -#: executor/execIndexing.c:875 +#: executor/execIndexing.c:916 #, c-format msgid "Key conflicts exist." msgstr "აღმოჩენილია გასაღებების კონფლიქტი." -#: executor/execIndexing.c:881 +#: executor/execIndexing.c:922 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "კონფლიქტის მქონე გასაღების მნიშვნელობა არღვევს უნიკალურ შეზღუდვას \"%s\"" -#: executor/execIndexing.c:884 +#: executor/execIndexing.c:925 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "გასაღები %s კონფლიქტობს არსებულ გასაღებ %s-სთან." -#: executor/execIndexing.c:886 +#: executor/execIndexing.c:927 #, c-format msgid "Key conflicts with existing key." msgstr "გასაღები აქტიურ გასაღებთან კონფლიქტობს." -#: executor/execMain.c:1041 +#: executor/execIndexing.c:1172 +#, c-format +msgid "empty WITHOUT OVERLAPS value found in column \"%s\" in relation \"%s\"" +msgstr "" + +#: executor/execMain.c:1171 #, c-format msgid "cannot change sequence \"%s\"" msgstr "მიმდევრობის შეცვლა შეუძლებელია: \"%s\"" -#: executor/execMain.c:1047 +#: executor/execMain.c:1177 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "'TOAST' ტიპის ურთიერთობის \"%s\" შეცვლა შეუძლებელია" -#: executor/execMain.c:1066 +#: executor/execMain.c:1196 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "მატერიალიზებული ხედის შეცვლა შეუძლებელია: %s" -#: executor/execMain.c:1078 +#: executor/execMain.c:1208 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "გარე ცხრილში ჩამატების შეცდომა: %s" -#: executor/execMain.c:1084 +#: executor/execMain.c:1214 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "გარე ცხრილი ჩამატების საშუალებას არ იძლევა: %s" -#: executor/execMain.c:1091 +#: executor/execMain.c:1221 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "გარე ცხრილის განახლების შეცდომა: %s" -#: executor/execMain.c:1097 +#: executor/execMain.c:1227 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "გარე ცხრილი განახლებების საშუალებას არ იძლევა: %s" -#: executor/execMain.c:1104 +#: executor/execMain.c:1234 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "გარე ცხრილიდან წაშლის შეცდომა: %s" -#: executor/execMain.c:1110 +#: executor/execMain.c:1240 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "გარე ცხრილი წაშლის საშუალებას არ იძლევა: %s" -#: executor/execMain.c:1121 +#: executor/execMain.c:1251 #, c-format msgid "cannot change relation \"%s\"" msgstr "ურთიერთობის შეცვლის შეცდომა: %s" -#: executor/execMain.c:1148 +#: executor/execMain.c:1278 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "მიმდევრობაში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1155 +#: executor/execMain.c:1285 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "\"TOAST\" ურთიერთობაში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1162 +#: executor/execMain.c:1292 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ხედში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1170 +#: executor/execMain.c:1300 #, 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:1309 executor/execMain.c:2941 executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "გარე ცხრილში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1185 +#: executor/execMain.c:1315 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "ურთიერთობაში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1898 +#: executor/execMain.c:2038 #, 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:2040 executor/execMain.c:2152 executor/execMain.c:2290 executor/execMain.c:2398 #, c-format msgid "Failing row contains %s." msgstr "შეცდომიანი მწკრივი \"%s\"-ს შეიცავს." -#: executor/execMain.c:1981 -#, 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:2150 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "ახალი მწკრივი ურთიერთობისთვის \"%s\" არღვევს შემოწმების შეზღუდვას \"%s\"" -#: executor/execMain.c:2143 +#: executor/execMain.c:2287 +#, c-format +msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "ნულოვანი მნიშვნელობა სვეტში \"%s\" ურთიერთობისთვის \"%s\" არანულოვან შეზღუდვას არღვევს" + +#: executor/execMain.c:2396 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "ახალი მწკრივი არღვევს შემოწმების პარამეტრს ხედისთვის \"%s\"" -#: executor/execMain.c:2153 +#: executor/execMain.c:2406 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "ახალი მწკრივი არღვევს მწკრივის-დონის უსაფრთხოების პოლიტიკას \"%s\" ცხრილისთვის \"%s\"" -#: executor/execMain.c:2158 +#: executor/execMain.c:2411 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "ახალი მწკრივი ცხრილისთვის \"%s\" მწკრივის-დონის უსაფრთხოების პოლიტიკა არღვევს" -#: executor/execMain.c:2166 +#: executor/execMain.c:2419 #, c-format msgid "target row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "" -#: executor/execMain.c:2171 +#: executor/execMain.c:2424 #, c-format msgid "target row violates row-level security policy (USING expression) for table \"%s\"" msgstr "" -#: executor/execMain.c:2178 +#: executor/execMain.c:2431 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "" -#: executor/execMain.c:2183 +#: executor/execMain.c:2436 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "" -#: executor/execPartition.c:327 +#: executor/execPartition.c:331 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "მწკრივისთვის ურთიერთობის \"%s\" დანაყოფი ვერ ვიპოვე" -#: executor/execPartition.c:330 +#: executor/execPartition.c:334 #, c-format msgid "Partition key of the failing row contains %s." msgstr "შეცდომიანი მწკრივის დანაყოფის გასაღები \"%s\"-ს შეიცავს." -#: executor/execReplication.c:272 executor/execReplication.c:456 +#: executor/execReplication.c:147 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "დასაბლოკი კორტეჟი პარალელური განახლების გამო უკვე სხვა დანაყოფშია გადატანილი. თავიდან ვცდი" -#: executor/execReplication.c:276 executor/execReplication.c:460 +#: executor/execReplication.c:151 #, c-format msgid "concurrent update, retrying" msgstr "ერთდროული განახლება. თავიდან ვცდი" -#: executor/execReplication.c:282 executor/execReplication.c:466 +#: executor/execReplication.c:158 #, c-format 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 -#, 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:809 executor/execReplication.c:815 executor/execReplication.c:821 #, c-format msgid "cannot update table \"%s\"" msgstr "ცხრილის განახლების შეცდომა: %s" -#: executor/execReplication.c:685 executor/execReplication.c:697 +#: executor/execReplication.c:811 executor/execReplication.c:829 #, 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:817 executor/execReplication.c:835 #, 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:823 executor/execReplication.c:841 +#, c-format +msgid "Replica identity must not contain unpublished generated columns." +msgstr "" + +#: executor/execReplication.c:827 executor/execReplication.c:833 executor/execReplication.c:839 #, c-format msgid "cannot delete from table \"%s\"" msgstr "ცხრილიდან წაშლის შეცდომა: %s" -#: executor/execReplication.c:721 +#: executor/execReplication.c:859 #, 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:861 #, 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:865 #, 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:867 #, 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:883 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "ურთიერთობას \"%s.%s\" ლოგიკური რეპლიკაციის სამიზნედ ვერ გამოიყენებთ" @@ -13490,114 +13733,114 @@ msgstr[1] "" msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "" -#: executor/execTuples.c:147 executor/execTuples.c:368 executor/execTuples.c:563 executor/execTuples.c:772 +#: executor/execTuples.c:147 executor/execTuples.c:369 executor/execTuples.c:564 executor/execTuples.c:774 #, c-format msgid "cannot retrieve a system column in this context" msgstr "ამ კონტექსტში სისტემური სვეტის მიღება შეუძლებელია" -#: executor/execTuples.c:163 executor/execTuples.c:580 +#: executor/execTuples.c:163 executor/execTuples.c:581 #, c-format msgid "don't have transaction information for this type of tuple" msgstr "" -#: executor/execTuples.c:390 executor/execTuples.c:794 +#: executor/execTuples.c:391 executor/execTuples.c:796 #, c-format msgid "don't have a storage tuple in this context" msgstr "ამ კონტექსტში საცავის კორტეჟი არ აქვს" -#: executor/execUtils.c:713 +#: executor/execUtils.c:759 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "მატერიალიზებული ხედი \"%s\" შევსებული არაა" -#: executor/execUtils.c:715 -#, c-format -msgid "Use the REFRESH MATERIALIZED VIEW command." -msgstr "გამოიყენეთ ბრძანება REFRESH MATERIALIZED VIEW." - -#: executor/functions.c:217 +#: executor/functions.c:288 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "არგუმენტის, აღწერილის, როგორც '%s' ტიპის დადგენა შეუძლებელია" -#: executor/functions.c:512 +#: executor/functions.c:711 #, 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:717 #, 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:725 executor/spi.c:1746 executor/spi.c:2660 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s-ის გამოყენება არააქროლად ფუნქციაში დაუშვებელია" -#: executor/functions.c:1451 +#: executor/functions.c:1159 executor/functions.c:2182 executor/functions.c:2220 executor/functions.c:2234 executor/functions.c:2324 executor/functions.c:2357 executor/functions.c:2371 #, c-format -msgid "SQL function \"%s\" statement %d" -msgstr "SQL ფუნქცია \"%s\" გამოსახულება %d" +msgid "return type mismatch in function declared to return %s" +msgstr "დაბრუნების ტიპის შეცდომა ფუნქციაში, რომელსაც აღწერილი აქვს, დააბრუნოს %s" -#: executor/functions.c:1477 +#: executor/functions.c:1161 executor/functions.c:2184 #, c-format -msgid "SQL function \"%s\" during startup" -msgstr "SQL ფუნქცია \"%s\" გაშვებისას" +msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." +msgstr "ფუნქციის ბოლო გამოსახულება SELECT ან INSERT/UPDATE/DELETE/MERGE RETURNING უნდა იყოს." -#: executor/functions.c:1562 +#: executor/functions.c:1244 utils/cache/plancache.c:869 #, c-format -msgid "calling procedures with output arguments is not supported in SQL functions" -msgstr "გამოტანის არგუმენტების მქონე პროცედურების გამოძახება SQL-ის ფუნქციებში მხარდაჭერილი არაა" +msgid "cached plan must not change result type" +msgstr "დაკეშილი გეგმა შედეგის ტიპს არ უნდა ცვლიდეს" -#: 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:1880 executor/functions.c:1911 #, c-format -msgid "return type mismatch in function declared to return %s" -msgstr "დაბრუნების ტიპის შეცდომა ფუნქციაში, რომელსაც აღწერილი აქვს, დააბრუნოს %s" +msgid "SQL function \"%s\" during startup" +msgstr "SQL ფუნქცია \"%s\" გაშვებისას" -#: executor/functions.c:1699 +#: executor/functions.c:1908 #, c-format -msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." -msgstr "ფუნქციის ბოლო გამოსახულება SELECT ან INSERT/UPDATE/DELETE/MERGE RETURNING უნდა იყოს." +msgid "SQL function \"%s\" statement %d" +msgstr "SQL ფუნქცია \"%s\" გამოსახულება %d" -#: executor/functions.c:1737 +#: executor/functions.c:2033 +#, c-format +msgid "calling procedures with output arguments is not supported in SQL functions" +msgstr "გამოტანის არგუმენტების მქონე პროცედურების გამოძახება SQL-ის ფუნქციებში მხარდაჭერილი არაა" + +#: executor/functions.c:2222 #, c-format msgid "Final statement must return exactly one column." msgstr "პირველი გამოსახულება ზუსტად ერთ სვეტს უნდა აბრუნებდეს." -#: executor/functions.c:1751 +#: executor/functions.c:2236 #, c-format msgid "Actual return type is %s." msgstr "დაბრუნების ნამდვილი ტიპია %s." -#: executor/functions.c:1846 +#: executor/functions.c:2326 #, c-format msgid "Final statement returns too many columns." msgstr "პირველი გამოსახულება მეტისმეტად ბევრ სვეტს აბრუნებს." -#: executor/functions.c:1879 +#: executor/functions.c:2359 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "" -#: executor/functions.c:1893 +#: executor/functions.c:2373 #, c-format msgid "Final statement returns too few columns." msgstr "ბოლო გამოსახულება მეტისმეტად ცოტა სვეტს აბრუნებს." -#: executor/functions.c:1921 +#: executor/functions.c:2401 #, 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:4039 executor/nodeWindowAgg.c:3041 #, 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:4062 parser/parse_agg.c:685 parser/parse_agg.c:713 #, c-format msgid "aggregate function calls cannot be nested" msgstr "აგრეგატულ ფუნქციებს ერთანეთში ვერ ჩადგამთ" @@ -13607,12 +13850,12 @@ msgstr "აგრეგატულ ფუნქციებს ერთან msgid "custom scan \"%s\" does not support MarkPos" msgstr "" -#: executor/nodeHashjoin.c:1130 executor/nodeHashjoin.c:1160 +#: executor/nodeHashjoin.c:1230 executor/nodeHashjoin.c:1260 #, c-format msgid "could not rewind hash-join temporary file" msgstr "" -#: executor/nodeIndexonlyscan.c:239 +#: executor/nodeIndexonlyscan.c:240 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "" @@ -13627,73 +13870,78 @@ msgstr "OFFSET უარყოფითი უნდა იყოს" msgid "LIMIT must not be negative" msgstr "LIMIT უარყოფითი არ უნდა იყოს" -#: executor/nodeMergejoin.c:1578 +#: executor/nodeMergejoin.c:1574 #, c-format msgid "RIGHT JOIN is only supported with merge-joinable join conditions" msgstr "" -#: executor/nodeMergejoin.c:1596 +#: executor/nodeMergejoin.c:1592 #, c-format msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "" -#: executor/nodeModifyTable.c:231 +#: executor/nodeModifyTable.c:247 +#, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "" + +#: executor/nodeModifyTable.c:267 #, c-format msgid "Query has too few columns." msgstr "მოთხოვნას ძალიან ცოტა სვეტი აქვს." -#: executor/nodeModifyTable.c:1531 executor/nodeModifyTable.c:1605 +#: executor/nodeModifyTable.c:1684 executor/nodeModifyTable.c:1758 #, 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:1957 #, c-format msgid "invalid ON UPDATE specification" msgstr "\"ON UPDATE\"-ის არასწორი სპეციფიკაცია" -#: executor/nodeModifyTable.c:1761 +#: executor/nodeModifyTable.c:1958 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "" -#: executor/nodeModifyTable.c:2217 +#: executor/nodeModifyTable.c:2414 #, 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:2415 #, c-format msgid "A foreign key points to ancestor \"%s\" but not the root ancestor \"%s\"." msgstr "" -#: executor/nodeModifyTable.c:2221 +#: executor/nodeModifyTable.c:2418 #, 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:2785 executor/nodeModifyTable.c:3334 executor/nodeModifyTable.c:3504 #, c-format msgid "%s command cannot affect row a second time" msgstr "ბრძანებას %s მწკრივის მეორედ შეცვლა არ შეუძლია" -#: executor/nodeModifyTable.c:2569 +#: executor/nodeModifyTable.c:2787 #, 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:3327 executor/nodeModifyTable.c:3497 #, 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:3336 executor/nodeModifyTable.c:3506 #, c-format msgid "Ensure that not more than one source row matches any one target row." msgstr "" -#: executor/nodeModifyTable.c:3152 +#: executor/nodeModifyTable.c:3405 #, c-format msgid "tuple to be merged was already moved to another partition due to concurrent update" msgstr "შესარწყმელი კორტეჟები პარალელური განახლების გამო უკვე სხვა დანაყოფშია გადატანილი" @@ -13708,7 +13956,7 @@ msgstr "TABLESAMPLE პარამეტრი ნულოვანი ვე msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "TABLESAMPLE REPEATABLE პარამეტრი ნულოვანი ვერ იქნება" -#: executor/nodeSubplan.c:325 executor/nodeSubplan.c:351 executor/nodeSubplan.c:405 executor/nodeSubplan.c:1174 +#: executor/nodeSubplan.c:317 executor/nodeSubplan.c:343 executor/nodeSubplan.c:397 executor/nodeSubplan.c:1182 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "" @@ -13743,104 +13991,104 @@ msgstr "სვეტში \"%s\" ნულოვანი მნიშვნე msgid "moving-aggregate transition function must not return null" msgstr "" -#: executor/nodeWindowAgg.c:2083 +#: executor/nodeWindowAgg.c:2106 #, c-format msgid "frame starting offset must not be null" msgstr "ჩარჩოს საწყისი წანაცვლება ნულის ტოლი ვერ იქნება" -#: executor/nodeWindowAgg.c:2096 +#: executor/nodeWindowAgg.c:2120 #, c-format msgid "frame starting offset must not be negative" msgstr "ჩარჩოს საწყისი წანაცვლება უარყოფითი ვერ იქნება" -#: executor/nodeWindowAgg.c:2108 +#: executor/nodeWindowAgg.c:2133 #, c-format msgid "frame ending offset must not be null" msgstr "ჩარჩოს ბოლოს წანაცვლება ნულის ტოლი ვერ იქნება" -#: executor/nodeWindowAgg.c:2121 +#: executor/nodeWindowAgg.c:2147 #, c-format msgid "frame ending offset must not be negative" msgstr "ჩარჩოს ბოლოს წანაცვლება უარყოფითი ვერ იქნება" -#: executor/nodeWindowAgg.c:2892 +#: executor/nodeWindowAgg.c:2957 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "აგრეგატულ ფუნქციას %s ფანჯრის ფუნქციად გაშვების მხარდაჭერა არ გააჩნია" -#: executor/spi.c:241 executor/spi.c:341 +#: executor/spi.c:242 executor/spi.c:342 #, c-format msgid "invalid transaction termination" msgstr "ტრანზაქციის არასწორი დასასრული" -#: executor/spi.c:256 +#: executor/spi.c:257 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "როცა ქვეტრანზაქცია აქტიურია, კომიტი შეუძლებელია" -#: executor/spi.c:347 +#: executor/spi.c:348 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "როცა ქვეტრანზაქცია აქტიურია, ტრანზაქციის გაუქმება შეუძლებელია" -#: executor/spi.c:471 +#: executor/spi.c:472 #, c-format msgid "transaction left non-empty SPI stack" msgstr "ტრანზაქცის შემდეგ დარჩენილი SPI სტეკი ცარიელი არაა" -#: executor/spi.c:472 executor/spi.c:532 +#: executor/spi.c:473 executor/spi.c:533 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "ნაკლულ \"SPI_finish\" გამოძახებებზე შემოწმება." -#: executor/spi.c:531 +#: executor/spi.c:532 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "ქვეტრანზაქცის შემდეგ დარჩენილი SPI სტეკი ცარიელი არაა" -#: executor/spi.c:1599 +#: executor/spi.c:1603 #, 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:1613 #, c-format msgid "cannot open %s query as cursor" msgstr "%s გამოსახულების კურსორის სახით გახნა შეუძლებელია" -#: executor/spi.c:1715 +#: executor/spi.c:1720 #, 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:1721 parser/analyze.c:3161 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "გადახვევადი კურსორები READ ONLY უნდა იყოს." -#: executor/spi.c:2488 +#: executor/spi.c:2498 #, 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:2573 #, c-format msgid "%s query does not return tuples" msgstr "მოთხოვნა %s კორტეჟებს არ აბრუნებს" -#: executor/spi.c:2979 +#: executor/spi.c:3004 #, c-format -msgid "SQL expression \"%s\"" -msgstr "SQL გამოსახულება \"%s\"" +msgid "PL/pgSQL expression \"%s\"" +msgstr "PL/pgSQL გამოსახულება \"%s\"" -#: executor/spi.c:2984 +#: executor/spi.c:3009 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL მინიჭება \"%s\"" -#: executor/spi.c:2987 +#: executor/spi.c:3012 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL ოპერატორი \"%s\"" @@ -13850,478 +14098,480 @@ msgstr "SQL ოპერატორი \"%s\"" 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:7228 optimizer/util/plancat.c:538 +#, 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:1223 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD მხარდაჭერილი აღარაა" -#: gram.y:1235 +#: gram.y:1224 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "პაროლის დაშიფრულ ფორმაში დასამახსოვრებლად წაშალეთ UNENCRYPTED." -#: gram.y:1562 gram.y:1578 +#: gram.y:1551 gram.y:1567 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS არ შეიძლება, სქემის ელემენტებს შეიცავდეს" -#: gram.y:1730 +#: gram.y:1728 #, c-format msgid "current database cannot be changed" msgstr "მიმდინარე ბაზის შეცვლა შეუძლებელია" -#: gram.y:1863 +#: gram.y:1869 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "დროის სარტყლის ინტერვალი HOUR ან HOUR TO MINUTE უნდა იყოს" -#: gram.y:2539 +#: gram.y:2501 #, c-format msgid "column number must be in range from 1 to %d" msgstr "სვეტის ნომერი უნდა იყოს 1-დან %d-მდე" -#: gram.y:3135 +#: gram.y:3120 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "მიმდევრობის პარამეტრი \"%s\" აქ მხარდაჭერილი არაა" -#: gram.y:3174 +#: gram.y:3159 #, c-format msgid "modulus for hash partition provided more than once" msgstr "ჰეშ-დანაყოფის მოდული ერთზე მეტჯერაა მითითებული" -#: gram.y:3183 +#: gram.y:3168 #, c-format msgid "remainder for hash partition provided more than once" msgstr "დარჩენილი ნაწილი ჰეშ-დანაყოფისთვის ერთზე მეტჯერაა მითითებული" -#: gram.y:3190 +#: gram.y:3175 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "" -#: gram.y:3198 +#: gram.y:3183 #, c-format msgid "modulus for hash partition must be specified" msgstr "საჭიროა ჰეშ დანაყოფის მოდულის მითითება" -#: gram.y:3202 +#: gram.y:3188 #, c-format msgid "remainder for hash partition must be specified" msgstr "საჭიროა ჰეშ დანაყოფის ნაშთის მითითება" -#: gram.y:3410 gram.y:3444 +#: gram.y:3397 gram.y:3432 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT-ი PROGRAM-თან ერთად დაშვებული არაა" -#: gram.y:3416 +#: gram.y:3403 #, 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:3752 gram.y:3759 gram.y:13184 gram.y:13192 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "დროებითი ცხრილის შექმნაში GLOBAL-ი მოძველებულია" -#: gram.y:4047 +#: gram.y:4041 #, 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:4450 utils/adt/ri_triggers.c:2259 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL ჯერ განხორციელებული არაა" -#: gram.y:4484 +#: gram.y:4542 #, c-format msgid "a column list with %s is only supported for ON DELETE actions" msgstr "" -#: gram.y:5196 +#: gram.y:5261 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM უკვე მხარდაუჭერელია" -#: gram.y:5894 +#: gram.y:5959 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "მწკრივის უსაფრთხოების უცნობი პარამეტრი:\"%s\"" -#: gram.y:5895 +#: gram.y:5960 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "" -#: gram.y:5980 +#: gram.y:6045 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER მხარდაუჭერელია" -#: gram.y:6017 +#: gram.y:6083 msgid "duplicate trigger events specified" msgstr "მითითებულია ტრიგერი მეორდება" -#: gram.y:6159 parser/parse_utilcmd.c:3839 parser/parse_utilcmd.c:3865 +#: gram.y:6225 parser/parse_utilcmd.c:3925 parser/parse_utilcmd.c:3951 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" -msgstr "" +msgstr "შეზღუდვა, რომელიც აღწერილია, როგორც 'INITIALLY DEFERRED' DEFERRABLE ტიპის უნდა იყოს" -#: gram.y:6166 +#: gram.y:6233 #, c-format msgid "conflicting constraint properties" msgstr "ერთმანეთთან შეუთავსებელი შეზღუდვის თვისებები" -#: gram.y:6265 +#: gram.y:6334 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION ჯერ განუხორცელებია" -#: gram.y:6582 +#: gram.y:6652 #, c-format msgid "dropping an enum value is not implemented" msgstr "ჩამონათვლის მნიშვნელობის მოცილება განხორციელებული არაა" -#: gram.y:6700 -#, c-format -msgid "RECHECK is no longer required" -msgstr "RECHECK საჭირო აღარაა" - -#: gram.y:6701 -#, c-format -msgid "Update your data type." -msgstr "განაახლეთ თქვენი მონაცემთა ტიპი." - -#: gram.y:8574 +#: gram.y:8632 #, c-format msgid "aggregates cannot have output arguments" msgstr "აგრეგატებს გამოტანის არგუმენტები ვერ ექნება" -#: gram.y:9037 utils/adt/regproc.c:670 +#: gram.y:9096 utils/adt/regproc.c:670 #, c-format msgid "missing argument" msgstr "ნაკლული არგუმენტი" -#: gram.y:9038 utils/adt/regproc.c:671 +#: gram.y:9097 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:11325 gram.y:11344 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION რეკურსიულ ხედებზე მხარდაუჭერელია" -#: gram.y:13207 +#: gram.y:13331 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,# სინტაქსი მხარდაჭერილი არაა" -#: gram.y:13208 +#: gram.y:13332 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "გამოიყენეთ განცალკევებული LIMIT და OFFSET პირობები." -#: gram.y:14083 +#: gram.y:14220 #, c-format msgid "only one DEFAULT value is allowed" msgstr "დასაშვებია DEFAULT_ის მხოლოდ ერთი მნიშვნელობა" -#: gram.y:14092 +#: gram.y:14229 #, c-format msgid "only one PATH value per column is allowed" msgstr "ყოველ სვეტზე PATH-ის მხოლოდ ერთი მნიშვნელობაა დასაშვები" -#: gram.y:14101 +#: gram.y:14238 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "" -#: gram.y:14110 +#: gram.y:14247 #, c-format msgid "unrecognized column option \"%s\"" msgstr "სვეტის უცნობი პარამეტრი %s" -#: gram.y:14192 +#: gram.y:14329 #, c-format msgid "only string constants are supported in JSON_TABLE path specification" msgstr "" -#: gram.y:14514 +#: gram.y:14651 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "წილადი რიცხვების სიზუსტე 1 ბიტი მაინც უნდა იყოს" -#: gram.y:14523 +#: gram.y:14660 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "წილადი რიცხვების სიზუსტე 54 ბიტზე მეტი ვერ იქნება" -#: gram.y:15040 +#: gram.y:15177 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "" -#: gram.y:15045 +#: gram.y:15182 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "" -#: gram.y:15222 +#: gram.y:15359 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "პრედიკატი UNIQUE ჯერ განხორციელებული არაა" -#: gram.y:15636 +#: gram.y:15773 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "'WITHIN GROUP'-თან ერთად ერთზე მეტი ORDER BY პირობის გამოყენება შეუძლებელია" -#: gram.y:15641 +#: gram.y:15778 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "\"DISTINCT\"-ს \"WITHIN GROUP\"-თან ერთად ვერ გამოიყენებთ" -#: gram.y:15646 +#: gram.y:15783 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "\"VARIADIC\"-ს \"WITHIN GROUP\"-თან ერთად ვერ გამოიყენებთ" -#: gram.y:16373 gram.y:16397 +#: gram.y:16510 gram.y:16534 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "ჩარჩოს დასაწყისი UNBOUNDED FOLLOWING ვერ იქნება" -#: gram.y:16378 +#: gram.y:16515 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "ჩარჩო, რომელიც შემდეგი მწკრივიდან იწყება, მიმდინარე მწკრივზე ვერ დასრულდება" -#: gram.y:16402 +#: gram.y:16539 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "ჩარჩოს დასასრული UNBOUNDED PRECEDING ვერ იქნება" -#: gram.y:16408 +#: gram.y:16545 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "ჩარჩოს, რომელიც მიმდინარე მწკრივიდან იწყება, წინა ჩარჩოები ვერ ექნება" -#: gram.y:16415 +#: gram.y:16552 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "ჩარჩოს, რომელიც შემდეგი მწკრივიდან იწყება, წინა ჩარჩოები ვერ ექნება" -#: gram.y:16964 +#: gram.y:17101 #, c-format msgid "unrecognized JSON encoding: %s" msgstr "უცნობი JSON კოდირება \"%s\"" -#: gram.y:17288 +#: gram.y:17426 #, c-format msgid "type modifier cannot have parameter name" msgstr "ტიპის მოდიფიკატორს პარამეტრის სახელი ვერ ექნება" -#: gram.y:17294 +#: gram.y:17432 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "ტიპის მოდიფიკატორს ORDER BY ვერ ექნება" -#: gram.y:17362 gram.y:17369 gram.y:17376 +#: gram.y:17500 gram.y:17507 gram.y:17514 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s აქ როგორც როლის სახელს ვერ გამოიყენებთ" -#: gram.y:17466 gram.y:18955 +#: gram.y:17604 gram.y:19135 #, 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:18828 gram.y:19003 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:18966 gram.y:18983 tsearch/spell.c:965 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1082 #, c-format msgid "syntax error" msgstr "სინტაქსის შეცდომა" -#: gram.y:18885 +#: gram.y:19067 #, 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:19104 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "\"ORDER BY\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18933 +#: gram.y:19115 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "\"OFFSET\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18942 +#: gram.y:19124 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "\"LIMIT\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18951 -#, c-format -msgid "multiple limit options not allowed" -msgstr "ლიმიტის პარამეტრების მითითება მხოლოდ ერთხელ შეგიძლიათ" - -#: gram.y:18978 +#: gram.y:19160 #, c-format msgid "multiple WITH clauses not allowed" msgstr "\"WITH\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:19171 +#: gram.y:19358 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "" -#: gram.y:19304 +#: gram.y:19492 #, 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:19532 gram.y:19545 #, 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:19558 #, 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:19571 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s -ის შეზღუდვებიs, როგორც NO INHERIT, მონიშვნა შეუძლებელია" -#: gram.y:19403 +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:19584 +#, c-format +msgid "%s constraints cannot be marked NOT ENFORCED" +msgstr "%s -ის შეზღუდვების, როგორც NOT ENFORCED, მონიშვნა შეუძლებელია" + +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:19606 +#, c-format +msgid "%s constraints cannot be marked ENFORCED" +msgstr "%s -ის შეზღუდვებიs, როგორც ENFORCED, მონიშვნა შეუძლებელია" + +#: gram.y:19628 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "დაყოფის უცნობი სტრატეგია: %s" -#: gram.y:19427 +#: gram.y:19652 #, c-format msgid "invalid publication object list" msgstr "პუბლიკაციების ობიექტების არასწორი სია" -#: gram.y:19428 +#: gram.y:19653 #, 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:19669 #, c-format msgid "invalid table name" msgstr "არასწორი ცხრილის სახელი" -#: gram.y:19465 +#: gram.y:19690 #, c-format msgid "WHERE clause not allowed for schema" msgstr "WHERE პირობა სქემისთვის დაშვებული არაა" -#: gram.y:19472 +#: gram.y:19697 #, c-format msgid "column specification not allowed for schema" msgstr "სქემისთვის სვეტის მითითება დაშვებული არაა" -#: gram.y:19486 +#: gram.y:19711 #, c-format msgid "invalid schema name" msgstr "არასწორი სქემის სახელი" -#: guc-file.l:192 +#: guc-file.l:193 #, c-format msgid "empty configuration file name: \"%s\"" msgstr "კონფიგურაციის ფაილის ცარიელი სახელი: \"%s\"" -#: guc-file.l:209 +#: guc-file.l:210 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "კონფიგურაციის ფაილის (\"%s\") გახსნა შეუძლებელია: ჩალაგების სიღრმე გადაცილებულია" -#: guc-file.l:229 +#: guc-file.l:230 #, c-format msgid "configuration file recursion in \"%s\"" msgstr "კონფიგურაციის ფაილის რეკურსია \"%s\"-ში" -#: guc-file.l:245 +#: guc-file.l:246 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "კონფიგურაციის ფაილის ('%s') გახსნის შეცდომა: %m" -#: guc-file.l:256 +#: guc-file.l:257 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "კონფიგურაციის ფაილის გამოტოვება \"%s\"" -#: guc-file.l:511 +#: guc-file.l:518 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "სინტაქსის შეცდომა ფაილში \"%s\" ხაზზე %u, ხაზის ბოლოსთან ახლოს" -#: guc-file.l:521 +#: guc-file.l:528 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "სინტაქსის შეცდომა ფაილში \"%s\" ხაზზე %u, ახლოს კოდთან \"%s\"" -#: guc-file.l:541 +#: guc-file.l:548 #, c-format 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:268 jsonpath_gram.y:600 jsonpath_scan.l:617 jsonpath_scan.l:628 jsonpath_scan.l:638 jsonpath_scan.l:690 utils/adt/encode.c:513 utils/adt/encode.c:578 utils/adt/jsonfuncs.c:661 utils/adt/varlena.c:341 utils/adt/varlena.c:382 #, c-format msgid "invalid input syntax for type %s" msgstr "არასწორი შეყვანის სინტაქსი ტიპისთვის %s" -#: jsonpath_gram.y:267 +#: jsonpath_gram.y:269 #, c-format msgid ".decimal() can only have an optional precision[,scale]." msgstr "" -#: jsonpath_gram.y:599 +#: jsonpath_gram.y:601 #, c-format msgid "Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate." msgstr "უცნობი ალმის სიმბოლო \"%.*s\" LIKE_REGEX პრედიკატში." -#: jsonpath_gram.y:629 tsearch/spell.c:749 utils/adt/regexp.c:223 +#: jsonpath_gram.y:631 tsearch/spell.c:751 utils/adt/regexp.c:223 #, c-format msgid "invalid regular expression: %s" msgstr "არასწორი რეგულარული გამოსახულება: %s" -#: jsonpath_gram.y:677 +#: jsonpath_gram.y:679 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "ენის XQuery ალამი \"x\" (გაფართოებული რეგულარული გამოსახულებები) განხორციელებული არაა" @@ -14338,48 +14588,48 @@ msgstr "არასწორი თექვსმეტობითი სი msgid "unexpected end after backslash" msgstr "მოულოდნელი დასასრული '\\' სიმბოლოს შემდეგ" -#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:742 +#: jsonpath_scan.l:201 repl_scanner.l:217 scan.l:742 msgid "unterminated quoted string" msgstr "ბრჭყალებში ჩასმული ციტატის დაუსრულებელი სტრიქონი" -#: jsonpath_scan.l:228 +#: jsonpath_scan.l:227 msgid "unexpected end of comment" msgstr "კომენტარის მოულოდნელი დასასრული" -#: jsonpath_scan.l:319 +#: jsonpath_scan.l:317 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:322 jsonpath_scan.l:327 jsonpath_scan.l:332 scan.l:1056 scan.l:1060 scan.l:1064 scan.l:1068 msgid "trailing junk after numeric literal" msgstr "რიცხვითი მნიშვნელობის შემდეგ მონაცემები ნაგავია" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:375 +#: jsonpath_scan.l:378 #, c-format msgid "%s at end of jsonpath input" msgstr "%s jsonpath-ის შეყვანის ბოლოში" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:382 +#: jsonpath_scan.l:385 #, c-format msgid "%s at or near \"%s\" of jsonpath input" -msgstr "" +msgstr "%s ზუსტად ან ახლოს jsonpath შეყვანის \"%s\"-სთან" -#: jsonpath_scan.l:568 +#: jsonpath_scan.l:545 msgid "invalid input" msgstr "არასწორი შეყვანა" -#: jsonpath_scan.l:594 +#: jsonpath_scan.l:571 msgid "invalid hexadecimal digit" msgstr "არასწორი თექვსმეტობითი ციფრი" -#: jsonpath_scan.l:607 utils/adt/jsonfuncs.c:646 +#: jsonpath_scan.l:584 utils/adt/jsonfuncs.c:649 #, c-format msgid "unsupported Unicode escape sequence" msgstr "უნიკოდის სპეცკოდის მხარდაუჭერელი მიმდევრობა" -#: jsonpath_scan.l:625 +#: jsonpath_scan.l:602 #, c-format msgid "could not convert Unicode to server encoding" msgstr "უნიკოდის სერვერის კოდირებაში გადაყვანა შეუძლებელია" @@ -14389,685 +14639,852 @@ msgstr "უნიკოდის სერვერის კოდირებ msgid "Failed on DSA request of size %zu." msgstr "შეცდომა DSA მეხსიერების გამოთხოვისას (ზომა %zu ბაიტი)." -#: libpq/auth-sasl.c:97 -#, c-format -msgid "expected SASL response, got message type %d" -msgstr "მოველოდი SASL პასუხს. მიღებული შეტყობინების ტიპია %d" - -#: libpq/auth-scram.c:263 +#: libpq/auth-oauth.c:109 libpq/auth-scram.c:267 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "კლიენტის არჩეული SASL ავთენტიკაციის მექანიზმი არასწორია" -#: libpq/auth-scram.c:287 libpq/auth-scram.c:536 libpq/auth-scram.c:547 +#: libpq/auth-oauth.c:169 libpq/auth-oauth.c:174 libpq/auth-oauth.c:192 libpq/auth-oauth.c:220 libpq/auth-oauth.c:230 libpq/auth-oauth.c:239 libpq/auth-oauth.c:254 libpq/auth-oauth.c:263 libpq/auth-oauth.c:272 libpq/auth-oauth.c:279 libpq/auth-oauth.c:342 libpq/auth-oauth.c:349 libpq/auth-oauth.c:375 libpq/auth-oauth.c:420 libpq/auth-oauth.c:438 libpq/auth-oauth.c:452 libpq/auth-oauth.c:472 +#, c-format +msgid "malformed OAUTHBEARER message" +msgstr "დამახინჯებული OAUTHBEARER-ის შეტყობინება" + +#: libpq/auth-oauth.c:170 libpq/auth-scram.c:383 +#, c-format +msgid "The message is empty." +msgstr "შეტყობინება ცარიელია." + +#: libpq/auth-oauth.c:175 libpq/auth-scram.c:388 +#, c-format +msgid "Message length does not match input length." +msgstr "შეტყობინების სიგრძე შეყვანის სიგრძეს არემთხვევა." + +#: libpq/auth-oauth.c:193 +#, c-format +msgid "Client did not send a kvsep response." +msgstr "კლიენტმა kvsep პასუხი არ გამოაგზავნა." + +#: libpq/auth-oauth.c:221 +#, c-format +msgid "The server does not support channel binding for OAuth, but the client message includes channel binding data." +msgstr "სერვერს არ აქვს არხის მიბმის მხარდაჭერა OAuth-სთვის, მაგრამ კლიენტის შეტყობინება არხის მიბმის მონაცემებს შეიცავს." + +#: libpq/auth-oauth.c:231 libpq/auth-scram.c:1003 libpq/auth-scram.c:1033 +#, c-format +msgid "Comma expected, but found character \"%s\"." +msgstr "მოველოდი მძიმეს, მაგრამ აღმოჩენილია სიმბოლო \"%s\"." + +#: libpq/auth-oauth.c:240 libpq/auth-scram.c:1065 +#, c-format +msgid "Unexpected channel-binding flag \"%s\"." +msgstr "არხზე მიბმის მოულოდნელი ალამი: \"%s\"." + +#: libpq/auth-oauth.c:250 libpq/auth-scram.c:1075 +#, c-format +msgid "client uses authorization identity, but it is not supported" +msgstr "კლიენტი იყენებს ავტორიზაციის იდენტიფიკაციას, მაგრამ ის მხარდაჭერილი არაა" + +#: libpq/auth-oauth.c:255 libpq/auth-scram.c:1080 +#, c-format +msgid "Unexpected attribute \"%s\" in client-first-message." +msgstr "" + +#: libpq/auth-oauth.c:264 +#, c-format +msgid "Key-value separator expected, but found character \"%s\"." +msgstr "მოველოდი გასაღები-მნიშვნელობის წყვილს, მაგრამ აღმოჩენილია სიმბოლო \"%s\"." + +#: libpq/auth-oauth.c:273 +#, c-format +msgid "Message does not contain an auth value." +msgstr "შეტყობინება ავტორიზაციის მნიშვნელობას არ შეიცავს." + +#: libpq/auth-oauth.c:280 +#, c-format +msgid "Message contains additional data after the final terminator." +msgstr "შეტყობინება დასრულების სიმბოლოს შემდეგ მონაცემებს კიდევ შეიცავს." + +#: libpq/auth-oauth.c:343 +#, c-format +msgid "Message contains an empty key name." +msgstr "შეტყობინება ცარიელი გასაღების სახელს შეიცავს." + +#: libpq/auth-oauth.c:350 +#, c-format +msgid "Message contains an invalid key name." +msgstr "შეტყობინება არასწორი გასაღების სახელს შეიცავს." + +#: libpq/auth-oauth.c:376 +#, c-format +msgid "Message contains an invalid value." +msgstr "შეტყობინება არასწორ მნიშვნელობას შეიცავს." + +#: libpq/auth-oauth.c:421 +#, c-format +msgid "Message contains an unterminated key/value pair." +msgstr "შეტყობინება დასრულების სიმბოლოს გარეშე მითითებულ გასაღები/მნიშვნელობის წყვილს შეიცავს." + +#: libpq/auth-oauth.c:439 +#, c-format +msgid "Message contains a key without a value." +msgstr "შეტყობინება შეიცავს გასაღებს მნიშვნელობის გარეშე." + +#: libpq/auth-oauth.c:453 +#, c-format +msgid "Message contains multiple auth values." +msgstr "შეტყობინება ერთზე მეტ ავთენტიკაციის მნიშვნელობას შეიცავს." + +#: libpq/auth-oauth.c:473 +#, c-format +msgid "Message did not contain a final terminator." +msgstr "შეტყობინება საბოლოო დასასრულის სიმბოლოს არ შეიცავს." + +#: libpq/auth-oauth.c:499 +#, c-format +msgid "OAuth is not properly configured for this user" +msgstr "ამ მომხმარებლისთვის OAuth სწორად არაა მორგებული" + +#: libpq/auth-oauth.c:500 +#, c-format +msgid "The issuer and scope parameters must be set in pg_hba.conf." +msgstr "" + +#: libpq/auth-oauth.c:585 libpq/auth-oauth.c:602 libpq/auth-oauth.c:624 +#, c-format +msgid "malformed OAuth bearer token" +msgstr "დამახინჯებული OAuth-ის წარმდგენის ტოკენი" + +#: libpq/auth-oauth.c:586 +#, c-format +msgid "Client response indicated a non-Bearer authentication scheme." +msgstr "კლიენტის პასუხი მიუთითებს არა-წარმდგენ ავთენტიკაციის სქემაზე." + +#: libpq/auth-oauth.c:603 +#, c-format +msgid "Bearer token is empty." +msgstr "წარმდგენის ტოკენი ცარიელია." + +#: libpq/auth-oauth.c:625 +#, c-format +msgid "Bearer token is not in the correct format." +msgstr "" + +#: libpq/auth-oauth.c:656 +#, c-format +msgid "validation of OAuth token requested without a validator loaded" +msgstr "" + +#: libpq/auth-oauth.c:665 +#, c-format +msgid "internal error in OAuth validator module" +msgstr "" + +#: libpq/auth-oauth.c:679 libpq/auth-oauth.c:703 libpq/auth.c:294 +#, c-format +msgid "OAuth bearer authentication failed for user \"%s\"" +msgstr "OAuth-ის წარმდგენის ავთენტიკაცია ჩავარდა მომხმარებლისთვის \"%s\"" + +#: libpq/auth-oauth.c:681 +#, c-format +msgid "Validator failed to authorize the provided token." +msgstr "" + +#: libpq/auth-oauth.c:705 +#, c-format +msgid "Validator provided no identity." +msgstr "" + +#: libpq/auth-oauth.c:760 +#, c-format +msgid "%s module \"%s\" must define the symbol %s" +msgstr "" + +#: libpq/auth-oauth.c:773 +#, c-format +msgid "%s module \"%s\": magic number mismatch" +msgstr "%s-ის მოდული \"%s\": ჯადოსნური რიცხვი არ ემთხვევა" + +#: libpq/auth-oauth.c:775 +#, c-format +msgid "Server has magic number 0x%08X, module has 0x%08X." +msgstr "" + +#: libpq/auth-oauth.c:784 +#, c-format +msgid "%s module \"%s\" must provide a %s callback" +msgstr "" + +#: libpq/auth-oauth.c:833 +#, c-format +msgid "oauth_validator_libraries must be set for authentication method %s" +msgstr "oauth_validator_libraries დაყენებული უნდა იყოს ავთენტიკაციის მეთოდისთვის %s" + +#: libpq/auth-oauth.c:835 libpq/auth-oauth.c:868 libpq/auth-oauth.c:884 libpq/hba.c:331 libpq/hba.c:666 libpq/hba.c:1251 libpq/hba.c:1271 libpq/hba.c:1294 libpq/hba.c:1307 libpq/hba.c:1360 libpq/hba.c:1388 libpq/hba.c:1396 libpq/hba.c:1408 libpq/hba.c:1429 libpq/hba.c:1442 libpq/hba.c:1467 libpq/hba.c:1494 libpq/hba.c:1506 libpq/hba.c:1565 libpq/hba.c:1585 libpq/hba.c:1599 libpq/hba.c:1619 libpq/hba.c:1630 libpq/hba.c:1645 libpq/hba.c:1664 libpq/hba.c:1680 +#: libpq/hba.c:1692 libpq/hba.c:1760 libpq/hba.c:1773 libpq/hba.c:1795 libpq/hba.c:1807 libpq/hba.c:1825 libpq/hba.c:1875 libpq/hba.c:1919 libpq/hba.c:1930 libpq/hba.c:1946 libpq/hba.c:1963 libpq/hba.c:1974 libpq/hba.c:1993 libpq/hba.c:2009 libpq/hba.c:2025 libpq/hba.c:2069 libpq/hba.c:2115 libpq/hba.c:2132 libpq/hba.c:2145 libpq/hba.c:2157 libpq/hba.c:2176 libpq/hba.c:2262 libpq/hba.c:2280 libpq/hba.c:2374 libpq/hba.c:2393 libpq/hba.c:2422 libpq/hba.c:2435 +#: libpq/hba.c:2458 libpq/hba.c:2480 libpq/hba.c:2517 tsearch/ts_locale.c:196 +#, c-format +msgid "line %d of configuration file \"%s\"" +msgstr "კონფიგურაციის ფაილის \"%2$s\" ხაზზე %1$d" + +#: libpq/auth-oauth.c:867 +#, c-format +msgid "authentication method \"oauth\" requires argument \"validator\" to be set when oauth_validator_libraries contains multiple options" +msgstr "ავთენტიკაციის მეთოდს \"oauth\" სჭირდება, რომ არგუმენტი \"validator\" დაყენებული იყოს, როცა oauth_validator_libraries ერთზე მეტ პარამეტრს შეიცავს" + +#: libpq/auth-oauth.c:882 +#, c-format +msgid "validator \"%s\" is not permitted by %s" +msgstr "ვალიდატორი \"%s\" აკრძალულია %s\"-ის მიერ" + +#: libpq/auth-sasl.c:89 +#, c-format +msgid "expected SASL response, got message type %d" +msgstr "მოველოდი SASL პასუხს. მიღებული შეტყობინების ტიპია %d" + +#: libpq/auth-scram.c:291 libpq/auth-scram.c:547 libpq/auth-scram.c:558 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "არასწორი SCRAM საიდუმლო მომხმარებლისთვის \"%s\"" -#: libpq/auth-scram.c:298 +#: libpq/auth-scram.c:302 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "მომხმარებელს \"%s\" სწორი SCRAM საიდუმლო არ გააჩნია." -#: libpq/auth-scram.c:378 libpq/auth-scram.c:383 libpq/auth-scram.c:737 libpq/auth-scram.c:745 libpq/auth-scram.c:850 libpq/auth-scram.c:863 libpq/auth-scram.c:873 libpq/auth-scram.c:981 libpq/auth-scram.c:988 libpq/auth-scram.c:1003 libpq/auth-scram.c:1018 libpq/auth-scram.c:1032 libpq/auth-scram.c:1050 libpq/auth-scram.c:1065 libpq/auth-scram.c:1379 libpq/auth-scram.c:1387 +#: libpq/auth-scram.c:382 libpq/auth-scram.c:387 libpq/auth-scram.c:751 libpq/auth-scram.c:759 libpq/auth-scram.c:864 libpq/auth-scram.c:877 libpq/auth-scram.c:887 libpq/auth-scram.c:995 libpq/auth-scram.c:1002 libpq/auth-scram.c:1017 libpq/auth-scram.c:1032 libpq/auth-scram.c:1046 libpq/auth-scram.c:1064 libpq/auth-scram.c:1079 libpq/auth-scram.c:1392 libpq/auth-scram.c:1400 #, c-format msgid "malformed SCRAM message" msgstr "დამახინჯებული SCRAM-ის შეტყობინება" -#: libpq/auth-scram.c:379 -#, c-format -msgid "The message is empty." -msgstr "შეტყობინება ცარიელია." - -#: libpq/auth-scram.c:384 -#, c-format -msgid "Message length does not match input length." -msgstr "შეტყობინების სიგრძე შეყვანის სიგრძეს არემთხვევა." - -#: libpq/auth-scram.c:416 +#: libpq/auth-scram.c:420 #, c-format msgid "invalid SCRAM response" msgstr "არასწორი SCRAM პასუხი" -#: libpq/auth-scram.c:417 +#: libpq/auth-scram.c:421 #, c-format msgid "Nonce does not match." msgstr "ერთჯერადი რიცხვები არ ემთხვევა." -#: libpq/auth-scram.c:493 +#: libpq/auth-scram.c:504 #, c-format msgid "could not generate random salt" msgstr "შემთხვევითი მარილის გენერაციის შეცდომა" -#: libpq/auth-scram.c:738 +#: libpq/auth-scram.c:752 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "მოველოდი ატრიბუტს \"%c\" მაგრამ მივიღე \"%s\"." -#: libpq/auth-scram.c:746 libpq/auth-scram.c:874 +#: libpq/auth-scram.c:760 libpq/auth-scram.c:888 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "მოველოდი სიმბოლოს \"=\" ატრიბუტისთვის \"%c\"." -#: libpq/auth-scram.c:851 +#: libpq/auth-scram.c:865 #, c-format msgid "Attribute expected, but found end of string." msgstr "მოველოდი ატრიბუტს, მაგრამ სტრიქონის ბოლო მივიღე." -#: libpq/auth-scram.c:864 +#: libpq/auth-scram.c:878 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "მოველოდი ატრიბუტს, მაგრამ მივიღე არასწორი სიმბოლო \"%s\"." -#: libpq/auth-scram.c:982 libpq/auth-scram.c:1004 +#: libpq/auth-scram.c:996 libpq/auth-scram.c:1018 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "კლიენტმა აირჩია SCRAM-SHA-256-PLUS, მაგრამ SCRAM შეტყობინება არხზე მიბმის მონაცემებს არ შეიცავს." -#: libpq/auth-scram.c:989 libpq/auth-scram.c:1019 -#, c-format -msgid "Comma expected, but found character \"%s\"." -msgstr "მოველოდი მძიმეს, მაგრამ აღმოჩენილია სიმბოლო \"%s\"." - -#: libpq/auth-scram.c:1010 +#: libpq/auth-scram.c:1024 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "SCRAM არხზე მიბმის მოლაპარაკების შეცდომა" -#: libpq/auth-scram.c:1011 +#: libpq/auth-scram.c:1025 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "კლიენტს აქვს SCRAM არხზე მიბმის მხარდაჭერა, მაგრამ ფიქრობს, რომ სერვერს - არა. მაგრამ სერვერს აქვს არხზე მიბმის მხარდაჭერა." -#: libpq/auth-scram.c:1033 +#: libpq/auth-scram.c:1047 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "კლიენტმა SCRAM-SHA-256 არხზე მიბმის გარეშე აირჩია, მაგრამ SCRAM შეტყობინება არხზე მიბმის მონაცემებს შეიცავს." -#: libpq/auth-scram.c:1044 +#: libpq/auth-scram.c:1058 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "მხარდაუჭერელი SCRAM-ის არხზე მიბმის ტიპი \"%s\"" -#: libpq/auth-scram.c:1051 -#, c-format -msgid "Unexpected channel-binding flag \"%s\"." -msgstr "არხზე მიბმის მოულოდნელი ალამი: \"%s\"." - -#: libpq/auth-scram.c:1061 -#, c-format -msgid "client uses authorization identity, but it is not supported" -msgstr "კლიენტი იყენებს ავტორიზაციის იდენტიფიკაციას, მაგრამ ის მხარდაჭერილი არაა" - -#: libpq/auth-scram.c:1066 -#, c-format -msgid "Unexpected attribute \"%s\" in client-first-message." -msgstr "" - -#: libpq/auth-scram.c:1082 +#: libpq/auth-scram.c:1096 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "კლიენტი მოითხოვს SCRAM გაფართოებას, რომელიც მხარდაჭერილი არაა" -#: libpq/auth-scram.c:1096 +#: libpq/auth-scram.c:1110 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "" -#: libpq/auth-scram.c:1227 +#: libpq/auth-scram.c:1240 #, c-format msgid "could not generate random nonce" msgstr "ერთჯერადი კოდის გენერაციის შეცდომა" -#: libpq/auth-scram.c:1237 +#: libpq/auth-scram.c:1250 #, c-format msgid "could not encode random nonce" msgstr "ერთჯერადი კოდის კოდირების შეცდომა" -#: libpq/auth-scram.c:1343 +#: libpq/auth-scram.c:1356 #, c-format msgid "SCRAM channel binding check failed" msgstr "SCRAM არხზე მიბმის შემოწმების შეცდომა" -#: libpq/auth-scram.c:1361 +#: libpq/auth-scram.c:1374 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "" -#: libpq/auth-scram.c:1380 +#: libpq/auth-scram.c:1393 #, c-format msgid "Malformed proof in client-final-message." msgstr "" -#: libpq/auth-scram.c:1388 +#: libpq/auth-scram.c:1401 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "კლიენტის-საბოლოო-შეტყობინების ბოლოში აღმოჩენილია ნაგავი." -#: libpq/auth.c:269 +#: libpq/auth.c:254 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "ავთენტიკაციის შეცდომა მომხმარებლისთვის \"%s\": ჰოსტმა ის უარყო" -#: libpq/auth.c:272 +#: libpq/auth.c:257 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "\"ნდობით\" ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:275 +#: libpq/auth.c:260 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "იდენტიფიკაციით ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:278 +#: libpq/auth.c:263 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "პარტნიორის ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:283 +#: libpq/auth.c:268 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "პაროლით ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:288 +#: libpq/auth.c:273 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "GSSAPI ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:291 +#: libpq/auth.c:276 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "SSPI ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:294 +#: libpq/auth.c:279 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "PAM ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:297 +#: libpq/auth.c:282 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "BSD ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:300 +#: libpq/auth.c:285 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "LDAP ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:303 +#: libpq/auth.c:288 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "სერტიფიკატით ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:306 +#: libpq/auth.c:291 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "რადიუსით ავთენტიფიკაცია მომხმარებლისთვის \"%s\" ვერ მოხერხდა" -#: libpq/auth.c:309 +#: libpq/auth.c:297 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "ავთენტიკაციის შეცდომა მომხმარებლისთვის \"%s\": არასწორი ავთენტიკაციის მეთოდი" -#: libpq/auth.c:313 +#: libpq/auth.c:301 #, c-format msgid "Connection matched file \"%s\" line %d: \"%s\"" msgstr "მიერთება დაემთხვა ფაილ %s-ს ხაზზე %d: \"%s\"" -#: libpq/auth.c:357 +#: libpq/auth.c:346 #, c-format msgid "authentication identifier set more than once" msgstr "ავთენტიფიკაციის იდენტიფიკატორი ერთზე მეტჯერაა დაყენებული" -#: libpq/auth.c:358 +#: libpq/auth.c:347 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "წინა იდენტიფიკატორი: \"%s\"; ახალი იდენტიფიკატორი: \"%s\"" -#: libpq/auth.c:368 +#: libpq/auth.c:357 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "მიერთება ავთენტიფიცირებულია: იდენტიფიკატორი=\"%s\" მეთოდი=%s (%s:%d)" -#: libpq/auth.c:408 +#: libpq/auth.c:397 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "კლიენტის სერტიფიკატების შემოწმება მხოლოდ მაშინაა შესაძლებელი, როცა ხელმისაწვდომია ძირითადი სერტიფიკატების საცავი" -#: libpq/auth.c:419 +#: libpq/auth.c:408 #, c-format msgid "connection requires a valid client certificate" msgstr "მიერთების მცდელობას კლიენტის სწორი სერტიფიკატი ესაჭიროება" -#: libpq/auth.c:450 libpq/auth.c:496 +#: libpq/auth.c:439 libpq/auth.c:485 msgid "GSS encryption" msgstr "GSS დაშიფვრა" -#: libpq/auth.c:453 libpq/auth.c:499 +#: libpq/auth.c:442 libpq/auth.c:488 msgid "SSL encryption" msgstr "SSL დაშიფვრა" -#: libpq/auth.c:455 libpq/auth.c:501 +#: libpq/auth.c:444 libpq/auth.c:490 msgid "no encryption" msgstr "დაშიფვრის გარეშე" #. translator: last %s describes encryption state -#: libpq/auth.c:461 +#: libpq/auth.c:450 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf უარყოფს რეპლიკაციის მიერთებას ჰოსტისთვის \"%s\", მომხმარებელი \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:468 +#: libpq/auth.c:457 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf უარყოფს მიერთებას ჰოსტისთვის \"%s\", მომხმარებელი \"%s\", ბაზა \"%s\", %s" -#: libpq/auth.c:506 +#: libpq/auth.c:495 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "კლიენტის IP მისამართი იხსნება \"%s\" პირდაპირი DNS ემთხვევა." -#: libpq/auth.c:509 +#: libpq/auth.c:498 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "კლიენტის IP მისამართი იხსნება \"%s\" პირდაპირი DNS არ შემოწმებულა." -#: libpq/auth.c:512 +#: libpq/auth.c:501 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "კლიენტის IP მისამართი იხსნება \"%s\" პირდაპირი DNS არ ემთხვევა." -#: libpq/auth.c:515 +#: libpq/auth.c:504 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "კლიენტის ჰოსტის სახელის (\"%s\") IP მისამართში თარგმნის შეცდომა: %s." -#: libpq/auth.c:520 +#: libpq/auth.c:509 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "კლიენტის IP მისამართიდან ჰოსტის სახელის ამოხსნის შეცდომა: %s." #. translator: last %s describes encryption state -#: libpq/auth.c:528 +#: libpq/auth.c:517 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf-ში ჩანაწერი რეპლიკაციის შეერთების შესახებ ჰოსტიდან \"%s\" მომხმარებელი \"%s\", %s აღმოჩენილი არაა" #. translator: last %s describes encryption state -#: libpq/auth.c:536 +#: libpq/auth.c:525 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf-ში ჩანაწერი ჰოსტისთვის \"%s\" მომხმარებელი \"%s\", ბაზა \"%s\", %s აღმოჩენილი არაა" -#: libpq/auth.c:656 +#: libpq/auth.c:649 #, c-format msgid "connection authenticated: user=\"%s\" method=%s (%s:%d)" msgstr "მიერთება ავთენტიფიცირებულია: მომხმარებელი =\"%s\" მეთოდი=%s (%s:%d)" -#: libpq/auth.c:725 +#: libpq/auth.c:718 #, c-format msgid "expected password response, got message type %d" msgstr "მოველოდი პაროლის პასუხს, მივიღე შეტყობინების ტიპი %d" -#: libpq/auth.c:746 +#: libpq/auth.c:739 #, c-format msgid "invalid password packet size" msgstr "პაროლის პაკეტის არასწორი ზომა" -#: libpq/auth.c:764 +#: libpq/auth.c:757 #, c-format msgid "empty password returned by client" msgstr "კლიენტმა ცარიელი პაროლი დააბრუნა" -#: libpq/auth.c:892 +#: libpq/auth.c:885 #, c-format msgid "could not generate random MD5 salt" msgstr "შემთხვევითი MD5 მარილის გენერაციის შეცდომა" -#: libpq/auth.c:943 libpq/be-secure-gssapi.c:540 +#: libpq/auth.c:936 libpq/be-secure-gssapi.c:543 #, c-format msgid "could not set environment: %m" msgstr "გარემოს მორგების შეცდომა: %m" -#: libpq/auth.c:982 +#: libpq/auth.c:975 #, c-format msgid "expected GSS response, got message type %d" msgstr "მოველოდი GSS პასუხს, მივიღე შეტყობინების ტიპი %d" -#: libpq/auth.c:1048 +#: libpq/auth.c:1041 msgid "accepting GSS security context failed" msgstr "'GSS'-ის უსაფრთხოების კონტექსტის მიღების შეცდომა" -#: libpq/auth.c:1089 +#: libpq/auth.c:1082 msgid "retrieving GSS user name failed" msgstr "'GSS'-ის მომხმარებლის სახელის მიღების შეცდომა" -#: libpq/auth.c:1235 +#: libpq/auth.c:1228 msgid "could not acquire SSPI credentials" msgstr "შეცდომა SSPI-ის მომხმ./პაროლის მიღებისას" -#: libpq/auth.c:1260 +#: libpq/auth.c:1253 #, c-format msgid "expected SSPI response, got message type %d" msgstr "მოველოდი SSPI პასუხს, მივიღე შეტყობინების ტიპი %d" -#: libpq/auth.c:1338 +#: libpq/auth.c:1331 msgid "could not accept SSPI security context" msgstr "'SSPI'-ის უსაფრთხოების კონტექსტის მიღების შეცდომა" -#: libpq/auth.c:1379 +#: libpq/auth.c:1372 msgid "could not get token from SSPI security context" msgstr "'SSPI'-ის უსაფრთხოების კონტექსტიდან კოდის მიღების შეცდომა" -#: libpq/auth.c:1515 libpq/auth.c:1534 +#: libpq/auth.c:1508 libpq/auth.c:1527 #, c-format msgid "could not translate name" msgstr "სახელის თარგმნა შეუძლებელია" -#: libpq/auth.c:1547 +#: libpq/auth.c:1540 #, c-format msgid "realm name too long" msgstr "რეალმის სახელი ძალიან გრძელია" -#: libpq/auth.c:1562 +#: libpq/auth.c:1555 #, c-format msgid "translated account name too long" msgstr "ანგარიშის ნათარგმნი სახელი ძალიან გრძელია" -#: libpq/auth.c:1741 +#: libpq/auth.c:1734 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "ident მიერთებისთვის სოკეტის შექმნა შეუძლებელია: %m" -#: libpq/auth.c:1756 +#: libpq/auth.c:1749 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "ლოკალურ მისამართზე \"%s\" მიბმის შეცდომა: %m" -#: libpq/auth.c:1768 +#: libpq/auth.c:1761 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "შეცდომა LDAP სერვერთან მიერთებისას. მისამართი - \"%s\",პორტი - %s: %m" -#: libpq/auth.c:1790 +#: libpq/auth.c:1783 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "შეცდომა LDAP სერვერზე მოთხოვნის გაგზავნისას. მისამართი - \"%s\", პორტი - %s: %m" -#: libpq/auth.c:1807 +#: libpq/auth.c:1800 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "პასუხი Ident-ის სერვერიდან მისამართით \"%s\" პორტზე %s ვერ მივიღე: %m" -#: libpq/auth.c:1817 +#: libpq/auth.c:1810 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "არასწორად დაფორმატებული პასუხი Ident სერვერიდან: \"%s\"" -#: libpq/auth.c:1870 +#: libpq/auth.c:1866 #, c-format msgid "peer authentication is not supported on this platform" msgstr "ამ პლატფორმაზე პარტნიორის ავთენტიკაცია მხარდაჭერილი არაა" -#: libpq/auth.c:1874 +#: libpq/auth.c:1870 #, c-format msgid "could not get peer credentials: %m" msgstr "პარტნიორის ავტორიზაციის დეტალების მიღების შეცდომა: %m" +#: libpq/auth.c:1880 +#, c-format +msgid "could not look up local user ID %ld: %m" +msgstr "ლოკალური მომხმარებლის ID-ით %ld მოძებნა შეუძლებელია: %m" + #: libpq/auth.c:1886 #, c-format -msgid "could not look up local user ID %ld: %s" -msgstr "ლოკალური მომხმარებლის ID-ით %ld მოძებნა შეუძლებელია: %s" +msgid "local user with ID %ld does not exist" +msgstr "ლოკალური მომხმარებელი ID-ით %ld არ არსებობს" -#: libpq/auth.c:1988 +#: libpq/auth.c:1986 #, c-format msgid "error from underlying PAM layer: %s" msgstr "შეცდომა ქვედა PAM ფენიდან: %s" -#: libpq/auth.c:1999 +#: libpq/auth.c:1997 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "მხარდაუჭერელი PAM საუბარი %d/\"%s\"" -#: libpq/auth.c:2056 +#: libpq/auth.c:2054 #, c-format msgid "could not create PAM authenticator: %s" msgstr "შეცდომა PAM ავთენტიკატორის შექმნისას: %s" -#: libpq/auth.c:2067 +#: libpq/auth.c:2065 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) -ის შეცდომა: %s" -#: libpq/auth.c:2099 +#: libpq/auth.c:2097 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) -ის შეცდომა: %s" -#: libpq/auth.c:2111 +#: libpq/auth.c:2109 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) -ის შეცდომა: %s" -#: libpq/auth.c:2124 +#: libpq/auth.c:2122 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate -ის შეცდომა: %s" -#: libpq/auth.c:2137 +#: libpq/auth.c:2135 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt-ის შეცდომა: %s" -#: libpq/auth.c:2148 +#: libpq/auth.c:2146 #, c-format msgid "could not release PAM authenticator: %s" msgstr "შეცდომა PAM ავთენტიკატორის მოხსნისას: %s" -#: libpq/auth.c:2228 +#: libpq/auth.c:2226 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "შეცდომა LDAP-ის ინიციალიზაციისას: შეცდომის კოდი %d" -#: libpq/auth.c:2265 +#: libpq/auth.c:2263 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "ldapbasedn-დან დომენის სახელის გამოღება შეუძლებელია" -#: libpq/auth.c:2273 +#: libpq/auth.c:2271 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP ავთენტიკაციამ \"%s\"-სთვის DNS SRV ჩანაწერები ვერ იპოვა" -#: libpq/auth.c:2275 +#: libpq/auth.c:2273 #, c-format msgid "Set an LDAP server name explicitly." msgstr "LDAP სერვერის სახელი აშკარად უნდა დააყენოთ." -#: libpq/auth.c:2327 +#: libpq/auth.c:2325 #, c-format msgid "could not initialize LDAP: %s" msgstr "\"LDAP\"-ის ინიციალიზაციის შეცდომა: %s" -#: libpq/auth.c:2337 +#: libpq/auth.c:2335 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ამ LDAP ბიბლიოთეკას ldaps-ის მხარდაჭერა არ გააჩნია" -#: libpq/auth.c:2345 +#: libpq/auth.c:2343 #, c-format msgid "could not initialize LDAP: %m" msgstr "\"LDAP\"-ის ინიციალიზაციის შეცდომა: %m" -#: libpq/auth.c:2355 +#: libpq/auth.c:2353 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "\"LDAP\"-ის ვერსიის დაყენების შეცდომა: %s" -#: libpq/auth.c:2371 +#: libpq/auth.c:2369 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "\"LDAP TLS\" სესიის დაწყების შეცდომა: %s" -#: libpq/auth.c:2448 +#: libpq/auth.c:2446 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP სერვერი და ldapbasedn მითითებული არაა" -#: libpq/auth.c:2455 +#: libpq/auth.c:2453 #, c-format msgid "LDAP server not specified" msgstr "LDAP სერვერი მითითებული არაა" -#: libpq/auth.c:2517 +#: libpq/auth.c:2515 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "არასწორი სიმბოლო მომხმარებლის სახელში LDAP-ით ავთენტიკაციისას" -#: libpq/auth.c:2534 +#: libpq/auth.c:2532 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "ldapbinddn \"%s\"-სთვის სერვერზე \"%s\" საწყისი LDAP მიბმა ვერ განვახორციელე: %s" -#: libpq/auth.c:2564 +#: libpq/auth.c:2562 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "ფილტრისთვის \"%s\" სერვერზე \"%s\" LDAP ძებნის გაშვება შეუძლებელია: %s" -#: libpq/auth.c:2580 +#: libpq/auth.c:2578 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-ის მომხმარებელი \"%s\" არ არსებობს" -#: libpq/auth.c:2581 +#: libpq/auth.c:2579 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP ძებნამ ფილტრისთვის \"%s\" სერვერზე \"%s\" ჩანაწერები არ დააბრუნა." -#: libpq/auth.c:2585 +#: libpq/auth.c:2583 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-ის მომხმარებელი \"%s\" უნიკალური არაა" -#: libpq/auth.c:2586 +#: libpq/auth.c:2584 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "LDAP ძებნამ ფილტრისთვის \"%s\" სერვერზე \"%s\" %d ჩანაწერი დააბრუნა." msgstr[1] "LDAP ძებნამ ფილტრისთვის \"%s\" სერვერზე \"%s\" %d ჩანაწერი დააბრუნა." -#: libpq/auth.c:2606 +#: libpq/auth.c:2604 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "" -#: libpq/auth.c:2633 +#: libpq/auth.c:2631 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "LDAP-ით შესვლის შეცდომა მომხმარებლისთვის \"%s\" სერვერზე \"%s\": %s" -#: libpq/auth.c:2665 +#: libpq/auth.c:2663 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP-ის დიაგნოსტიკა: %s" -#: libpq/auth.c:2703 +#: libpq/auth.c:2701 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "სერტიფიკატით ავთენტიკაციის შეცდომა მომხმარებლისთვის \"%s\": კლიენტის სერტიფიკატი მომხმარებლის სახელს არ შეიცავს" -#: libpq/auth.c:2724 +#: libpq/auth.c:2722 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "სერტიფიკატით ავთენტიკაცია ჩავარდა მომხმარებლისთვის \"%s\": სათაურის DN-ის მიღება შეუძლებელა" -#: libpq/auth.c:2747 +#: libpq/auth.c:2745 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "სერტიფიკატის გადამოწმების (clientcert=verify-full) შეცდომა მომხმარებლისთვის \"%s\": DN არ ემთხვევა" -#: libpq/auth.c:2752 +#: libpq/auth.c:2750 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "სერტიფიკატის გადამოწმების (clientcert=verify-full) შეცდომა მომხმარებლისთვის \"%s\": CN არ ემთხვევა" -#: libpq/auth.c:2854 +#: libpq/auth.c:2852 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS სერვერი მითითებული არაა" -#: libpq/auth.c:2861 +#: libpq/auth.c:2859 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS-ის პაროლი მითითებული არაა" -#: libpq/auth.c:2875 +#: libpq/auth.c:2873 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS-ით ავთენტიკაციისას %d სიმბოლოზე გრძელი პაროლები მხარდაჭერილი არაა" -#: libpq/auth.c:2977 libpq/hba.c:2352 +#: libpq/auth.c:2975 libpq/hba.c:2391 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "შეცდომა RADIUS სერვერის სახელის \"%s\" მისამართში თარგმნისას: %s" -#: libpq/auth.c:2991 +#: libpq/auth.c:2989 #, c-format msgid "could not generate random encryption vector" msgstr "შემთხვევითი დაშიფვრის ვექტორის გენერაციის შეცდომა" -#: libpq/auth.c:3028 +#: libpq/auth.c:3026 #, c-format msgid "could not perform MD5 encryption of password: %s" msgstr "პაროლის MD5-ით დაშიფვრა შეუძლებელია: %s" -#: libpq/auth.c:3055 +#: libpq/auth.c:3053 #, c-format msgid "could not create RADIUS socket: %m" msgstr "შეცდომა RADIUS სოკეტის შექმნისას: %m" -#: libpq/auth.c:3071 +#: libpq/auth.c:3069 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "ლოკალურ RADIUS სოკეტზე მიბმის შეცდომა: %m" -#: libpq/auth.c:3081 +#: libpq/auth.c:3079 #, c-format msgid "could not send RADIUS packet: %m" msgstr "შეცდომა RADIUS პაკეტის გაგზავნისას: %m" -#: libpq/auth.c:3115 libpq/auth.c:3141 +#: libpq/auth.c:3113 libpq/auth.c:3139 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "%s-დან RADIUS პასუხის მოლოდინის ვადა ამოიწურა" -#: libpq/auth.c:3134 +#: libpq/auth.c:3132 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "შეცდომა RADIUS სოკეტის სტატუსის შემოწმებისას: %m" -#: libpq/auth.c:3164 +#: libpq/auth.c:3162 #, c-format msgid "could not read RADIUS response: %m" msgstr "შეცდომა RADIUS პასუხის წაკითხვისას: %m" -#: libpq/auth.c:3172 +#: libpq/auth.c:3170 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "RADIUS პასუხი \"%s\" გამოგზავნილია არასწორი პორტიდან: %d" -#: libpq/auth.c:3180 +#: libpq/auth.c:3178 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "RADIUS პასუხი %s-დან მეტისმეტად მოკლეა: %d" -#: libpq/auth.c:3187 +#: libpq/auth.c:3185 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "RADIUS პასუხს %s-დან დაზიანებული სიგრძე გააჩნია: %d (რეალური სიგრძე %d)" -#: libpq/auth.c:3195 +#: libpq/auth.c:3193 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "RADIUS პასუხი %s-დან სხვა მოთხოვნას ეკუთვნის: %d (უნდა იყოს %d)" @@ -15087,7 +15504,7 @@ msgstr "%s-დან მიღებული RADIUS პასუხის MD5 msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "%s-დან მიღებულ RADIUS-ს პასუხს არასწორი კოდი (%d) გააჩნია მომხმარებლისთვის \"%s\"" -#: libpq/be-fsstubs.c:133 libpq/be-fsstubs.c:162 libpq/be-fsstubs.c:190 libpq/be-fsstubs.c:216 libpq/be-fsstubs.c:241 libpq/be-fsstubs.c:283 libpq/be-fsstubs.c:306 libpq/be-fsstubs.c:560 +#: libpq/be-fsstubs.c:133 libpq/be-fsstubs.c:162 libpq/be-fsstubs.c:190 libpq/be-fsstubs.c:216 libpq/be-fsstubs.c:241 libpq/be-fsstubs.c:283 libpq/be-fsstubs.c:306 libpq/be-fsstubs.c:565 #, c-format msgid "invalid large-object descriptor: %d" msgstr "დიდი ობიექტის არასწორი დესკრიპტორი: %d" @@ -15097,7 +15514,7 @@ msgstr "დიდი ობიექტის არასწორი დეს msgid "large object descriptor %d was not opened for reading" msgstr "დიდი ობიექტის დესკრიპტორი %d წაკითხვისთვის არ გახსნილა" -#: libpq/be-fsstubs.c:197 libpq/be-fsstubs.c:567 +#: libpq/be-fsstubs.c:197 libpq/be-fsstubs.c:572 #, c-format msgid "large object descriptor %d was not opened for writing" msgstr "დიდი ობიექტის დესკრიპტორი %d ჩაწერისთვის არ გახსნილა" @@ -15112,32 +15529,32 @@ msgstr "lo_lseek-ის შედეგი დიაპაზონს გარ msgid "lo_tell result out of range for large-object descriptor %d" msgstr "lo_tell-ის შედეგი დიაპაზონს გარეთაა დიდი-ობიექტის დესკრიპტორისთვის %d" -#: libpq/be-fsstubs.c:439 +#: libpq/be-fsstubs.c:444 #, c-format msgid "could not open server file \"%s\": %m" msgstr "სერვერის ფაილის (\"%s\") გახსნის შეცდომა: %m" -#: libpq/be-fsstubs.c:462 +#: libpq/be-fsstubs.c:467 #, c-format msgid "could not read server file \"%s\": %m" msgstr "სერვერის ფაილის (\"%s\") წაკითხვის შეცდომა: %m" -#: libpq/be-fsstubs.c:521 +#: libpq/be-fsstubs.c:526 #, c-format msgid "could not create server file \"%s\": %m" msgstr "სერვერის ფაილის (\"%s\") შექმნის შეცდომა: %m" -#: libpq/be-fsstubs.c:533 +#: libpq/be-fsstubs.c:538 #, c-format msgid "could not write server file \"%s\": %m" msgstr "სერვერის ფაილში (\"%s\") ჩაწერის შეცდომა: %m" -#: libpq/be-fsstubs.c:774 +#: libpq/be-fsstubs.c:779 #, c-format msgid "large object read request is too large" msgstr "დიდი ობიექტის წაკითხვის მოთხოვნა მეტისმეტად დიდია" -#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:248 utils/adt/genfile.c:269 +#: libpq/be-fsstubs.c:821 utils/adt/genfile.c:248 utils/adt/genfile.c:269 #, c-format msgid "requested length cannot be negative" msgstr "მოთხოვნილი სიგრძე არ შეიძლება, უარყოფითი იყოს" @@ -15172,803 +15589,838 @@ msgstr "პირადი გასაღების ფაილზე \"%s\" msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "ფაილებს u=rw (0600) ან ნაკლები წვდომები უნდა ჰქონდეს, თუ მათი მფლობელი ბაზის მომხმარებელია, ან წვდომები u=rw,g=r (0640), თუ მფლობელი root-ია." -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:202 msgid "GSSAPI wrap error" msgstr "GSSAPI -ის გადატანის შეცდომა" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:209 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "გამავალი GSSAPI შეტყობინება კონფიდენციალობას ვერ იყენებს" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:634 +#: libpq/be-secure-gssapi.c:216 libpq/be-secure-gssapi.c:637 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "სერვერმა ძალიან დიდი GSSAPI პაკეტის გამოგზავნა სცადა (%zu > %zu)" -#: libpq/be-secure-gssapi.c:351 +#: libpq/be-secure-gssapi.c:352 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "კლიენტის მიერ გამოგზავნილი GSSAPI-ის პაკეტი ძალიან დიდია (%zu > %zu)" -#: libpq/be-secure-gssapi.c:389 +#: libpq/be-secure-gssapi.c:390 msgid "GSSAPI unwrap error" msgstr "GSSAPI-ის გადატანის მოხსნის შეცდომა" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:397 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "შემომავალი GSSAPI შეტყობინება კონფიდენციალობას ვერ იყენებს" -#: libpq/be-secure-gssapi.c:575 +#: libpq/be-secure-gssapi.c:578 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" msgstr "კლიენტის მიერ გამოგზავნილი GSSAPI-ის პაკეტი ძალიან დიდია (%zu > %d)" -#: libpq/be-secure-gssapi.c:600 +#: libpq/be-secure-gssapi.c:603 msgid "could not accept GSSAPI security context" msgstr "\"GSSAPI\"-ის უსაფრთხოების კონტექსტის მიღების შეცდომა" -#: libpq/be-secure-gssapi.c:701 +#: libpq/be-secure-gssapi.c:704 msgid "GSSAPI size check error" msgstr "GSSAPI-ის ზომის შემოწმების შეცდომა" -#: libpq/be-secure-openssl.c:131 +#: libpq/be-secure-openssl.c:118 #, c-format msgid "could not create SSL context: %s" msgstr "შეცდომა SSL კონტექსტის შექმნისას: %s" -#: libpq/be-secure-openssl.c:157 +#: libpq/be-secure-openssl.c:144 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "სერვერის სერტიფიკატის ფაილის ჩატვირთვის შეცდომა \"%s\": %s" -#: libpq/be-secure-openssl.c:177 +#: libpq/be-secure-openssl.c:164 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "პირადი გასაღების ფაილის \"%s\" თავიდან ჩატვირთვა შეუძლებელია, რადგან მას საკვანძო ფრაზა ესაჭიროება" -#: libpq/be-secure-openssl.c:182 +#: libpq/be-secure-openssl.c:169 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "პირადი გასაღების ფაილის \"%s\" ჩატვირთვის შეცდომა: %s" -#: libpq/be-secure-openssl.c:191 +#: libpq/be-secure-openssl.c:178 #, c-format msgid "check of private key failed: %s" msgstr "პირადი გასაღების ფაილის შემოწმების შეცდომა: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 +#: libpq/be-secure-openssl.c:191 libpq/be-secure-openssl.c:214 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "\"%s\"-ის პარამეტრი \"%s\" ამ პროგრამის აგებისას ჩართული არ იყო" -#: libpq/be-secure-openssl.c:214 +#: libpq/be-secure-openssl.c:201 #, c-format msgid "could not set minimum SSL protocol version" msgstr "'SSL' პროტოკოლის ვერსიის მინიმალური მნიშვნელობის დაყენების შეცდომა" -#: libpq/be-secure-openssl.c:237 +#: libpq/be-secure-openssl.c:224 #, c-format msgid "could not set maximum SSL protocol version" msgstr "'SSL' პროტოკოლის ვერსიის მაქსიმალური მნიშვნელობის დაყენების შეცდომა" -#: libpq/be-secure-openssl.c:253 +#: libpq/be-secure-openssl.c:241 #, c-format msgid "could not set SSL protocol version range" msgstr "'SSL' პროტოკოლის ვერსიის დიაპაზონის დაყენების შეცდომა" -#: libpq/be-secure-openssl.c:254 +#: libpq/be-secure-openssl.c:242 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\"-ი \"%s\"-ზე მაღალი ვერ იქნება" -#: libpq/be-secure-openssl.c:296 +#: libpq/be-secure-openssl.c:295 +#, c-format +msgid "could not set the TLSv1.2 cipher list (no valid ciphers available)" +msgstr "ვერ დავაყენე TLSv1.2-ის შიფრების სია (სწორი შიფრები ხელმისაწვდომი არაა)" + +#: libpq/be-secure-openssl.c:310 #, c-format -msgid "could not set the cipher list (no valid ciphers available)" -msgstr "შიფრების სიის დაყენება შეუძლებელია (სწორი შიფრები ხელმისაწვდომი არაა)" +msgid "could not set the TLSv1.3 cipher suites (no valid ciphers available)" +msgstr "ვერ დავაყენე TLSv1.3-ის შიფრების სია (სწორი შიფრები ხელმისაწვდომი არაა)" -#: libpq/be-secure-openssl.c:316 +#: libpq/be-secure-openssl.c:331 #, 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:380 #, 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:388 #, 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:396 #, 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:454 #, 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:468 #, c-format msgid "could not initialize SSL connection: %s" msgstr "\"SSL\" შეერთების ინიციალიზაციის შეცდომა: %s" -#: libpq/be-secure-openssl.c:461 +#: libpq/be-secure-openssl.c:476 #, c-format msgid "could not set SSL socket: %s" msgstr "\"SSL\" სოკეტის დაყენების შეცდომა: %s" -#: libpq/be-secure-openssl.c:517 +#: libpq/be-secure-openssl.c:532 #, 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:536 libpq/be-secure-openssl.c:593 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "'SSL' შეერთების მიღების შეცდომა: აღმოჩენილია EOF" -#: libpq/be-secure-openssl.c:562 +#: libpq/be-secure-openssl.c:577 #, c-format msgid "could not accept SSL connection: %s" msgstr "'SSL' შეერთების მიღების შეცდომა: %s" -#: libpq/be-secure-openssl.c:566 +#: libpq/be-secure-openssl.c:581 #, 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:598 libpq/be-secure-openssl.c:813 libpq/be-secure-openssl.c:883 #, c-format msgid "unrecognized SSL error code: %d" msgstr "უცნობი SSL-ის შეცდომის კოდი: %d" -#: libpq/be-secure-openssl.c:611 +#: libpq/be-secure-openssl.c:626 #, c-format msgid "received SSL connection request with unexpected ALPN protocol" msgstr "" -#: libpq/be-secure-openssl.c:655 +#: libpq/be-secure-openssl.c:670 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL სერტიფიკატის საერთო სახელი ჩადგმულ ნულოვანს შეიცავს" -#: libpq/be-secure-openssl.c:701 +#: libpq/be-secure-openssl.c:716 #, 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:802 libpq/be-secure-openssl.c:867 #, c-format msgid "SSL error: %s" msgstr "SSL-ის შეცდომა: %s" -#: libpq/be-secure-openssl.c:1027 +#: libpq/be-secure-openssl.c:1050 #, 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:1062 #, c-format msgid "could not load DH parameters file: %s" msgstr "dh პარამეტრების ფაილის ჩატვირთვის შეცდომა: %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1072 #, c-format msgid "invalid DH parameters: %s" msgstr "არასწორი DH-ის პარამეტრები: %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1081 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "არასწორი DH-ის პარამეტრები: p მარტივი რიცხვი არაა" -#: libpq/be-secure-openssl.c:1067 +#: libpq/be-secure-openssl.c:1090 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "" -#: libpq/be-secure-openssl.c:1203 +#: libpq/be-secure-openssl.c:1226 #, 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:1263 #, 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:1264 msgid "unknown" msgstr "უცნობი" -#: libpq/be-secure-openssl.c:1378 +#: libpq/be-secure-openssl.c:1401 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: DH-ის პარამეტრების ჩატვირთვის შეცდომა" -#: libpq/be-secure-openssl.c:1386 +#: libpq/be-secure-openssl.c:1409 #, 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:1439 #, c-format -msgid "ECDH: unrecognized curve name: %s" -msgstr "ECDH: მრუდის უცნობი სახელი: %s" +msgid "failed to set group names specified in ssl_groups: %s" +msgstr "" -#: libpq/be-secure-openssl.c:1422 +#: libpq/be-secure-openssl.c:1441 +msgid "No valid groups found" +msgstr "სწორი ჯგუფები აღმოჩენილი არაა" + +#: libpq/be-secure-openssl.c:1442 #, c-format -msgid "ECDH: could not create key" -msgstr "ECDH: გასაღების შექნის შეცდომა" +msgid "Ensure that each group name is spelled correctly and supported by the installed version of OpenSSL" +msgstr "დარწმუნდით, რომ თითოეული ჯგუფის სახელის მართლწერა სწორია და მხარდაჭერილია OpenSSL-ის დაყენებული ვერსიის მიერ" -#: libpq/be-secure-openssl.c:1450 +#: libpq/be-secure-openssl.c:1488 msgid "no SSL error reported" msgstr "შეცდომა SSL-ში არ დაფიქსირებულა" -#: libpq/be-secure-openssl.c:1467 +#: libpq/be-secure-openssl.c:1506 #, c-format msgid "SSL error code %lu" msgstr "SSL-ის შეცდომის კოდი %lu" -#: libpq/be-secure-openssl.c:1624 +#: libpq/be-secure-openssl.c:1663 #, c-format msgid "could not create BIO" msgstr "\"BIO\"-ს შექმნის შეცდომა" -#: libpq/be-secure-openssl.c:1634 +#: libpq/be-secure-openssl.c:1673 #, 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:1681 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "'NID %d'-ის ASN1_OBJECT ტიპის სტრუქტურად გარდაქნა შეუძლებელია" -#: libpq/crypt.c:48 +#: libpq/crypt.c:50 #, c-format msgid "Role \"%s\" does not exist." msgstr "როლი არ არსებობს: \"%s\"." -#: libpq/crypt.c:58 +#: libpq/crypt.c:60 #, c-format msgid "User \"%s\" has no password assigned." msgstr "მომხმარებელს პაროლი მინიჭებული არ აქვს: %s." -#: libpq/crypt.c:76 +#: libpq/crypt.c:78 #, c-format msgid "User \"%s\" has an expired password." msgstr "მომხმარებლის პაროლის ვადა გასულია: %s." -#: libpq/crypt.c:182 +#: libpq/crypt.c:174 +#, c-format +msgid "encrypted password is too long" +msgstr "დაშიფრული პაროლი მეტისმეტად გრძელია" + +#: libpq/crypt.c:175 +#, c-format +msgid "Encrypted passwords must be no longer than %d bytes." +msgstr "დაშიფრული ბაიტები %d ბაიტზე დიდი არ უნდა იყოს." + +#: libpq/crypt.c:183 +#, c-format +msgid "setting an MD5-encrypted password" +msgstr "მიმდინარეობს MD5-ით დაშიფრული პაროლის დაყენება" + +#: libpq/crypt.c:184 +#, c-format +msgid "MD5 password support is deprecated and will be removed in a future release of PostgreSQL." +msgstr "" + +#: libpq/crypt.c:185 +#, c-format +msgid "Refer to the PostgreSQL documentation for details about migrating to another password type." +msgstr "" + +#: libpq/crypt.c:216 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "მომხმარებლის (\"%s\") პაროლის გამოყენება MD5-ით ავთენტიკაციისთვის შეუძლებელია." -#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 +#: libpq/crypt.c:237 libpq/crypt.c:279 libpq/crypt.c:299 #, c-format msgid "Password does not match for user \"%s\"." msgstr "პაროლი არ ემთხვევა მომხმარებელს \"%s." -#: libpq/crypt.c:284 +#: libpq/crypt.c:318 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "მომხმარებლის (\"%s\") პაროლის უცნობი ფორმატი." -#: libpq/hba.c:327 +#: libpq/hba.c:329 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "არასწორი რეგულარული გამოსახულება (%s): %s" -#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 -#: libpq/hba.c:1799 libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 tsearch/ts_locale.c:241 -#, c-format -msgid "line %d of configuration file \"%s\"" -msgstr "კონფიგურაციის ფაილის \"%2$s\" ხაზზე %1$d" - -#: libpq/hba.c:457 +#: libpq/hba.c:459 #, c-format msgid "skipping missing authentication file \"%s\"" msgstr "ნაკლული ავთენტიკაციის ფაილის გამოტოვება \"%s\"" -#: libpq/hba.c:609 +#: libpq/hba.c:611 #, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" msgstr "ფაილის (\"%s\") გახსნა შეუძლებელია: გადაცილებულია ჩალაგების სიღრმე" -#: libpq/hba.c:1216 +#: libpq/hba.c:1222 #, c-format msgid "error enumerating network interfaces: %m" msgstr "ქსელის ინტერფეისების ჩამონათვალის მიღების შეცდომა: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1243 +#: libpq/hba.c:1249 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "ავთენტიკაციის პარამეტრი \"%s\" მხოლოდ ავთენტიკაციის მეთოდებისთვის %s შეგიძლიათ, გამოიყენოთ" -#: libpq/hba.c:1263 +#: libpq/hba.c:1269 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "ავთენტიკაციის მეთოდს \"%s\" არგუმენტის (\"%s\") დაყენება სჭირდება" -#: libpq/hba.c:1287 +#: libpq/hba.c:1293 #, c-format msgid "missing entry at end of line" msgstr "ხაზის ბოლოში ჩანაწერი აღმოჩენილი არაა" -#: libpq/hba.c:1300 +#: libpq/hba.c:1306 #, c-format msgid "multiple values in ident field" msgstr "ერთზე მეტი მნიშვნელობა ველში ident" -#: libpq/hba.c:1352 +#: libpq/hba.c:1358 #, c-format msgid "multiple values specified for connection type" msgstr "მიერთების ტიპში მითითებულია ერთზე მეტი მნიშვნელობა" -#: libpq/hba.c:1353 +#: libpq/hba.c:1359 #, c-format msgid "Specify exactly one connection type per line." msgstr "ერთ ხაზზე ზუსტად ერთი მიერთების ტიპი უნდა მიუთითოთ." -#: libpq/hba.c:1380 +#: libpq/hba.c:1386 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "hostssl-ის ჩანაწერის დამთხვევა შეუძლებელია, რადგან SSL გათიშულია" -#: libpq/hba.c:1381 +#: libpq/hba.c:1387 #, c-format msgid "Set \"ssl = on\" in postgresql.conf." msgstr "დააყენეთ \"ssl = on\" postgresql.conf-ში." -#: libpq/hba.c:1389 +#: libpq/hba.c:1395 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "hostssl-ის ჩანაწერის დამთხვევა შეუძლებელია, რადგან SSL-ის მხარდაჭერა ამ აგებისას ჩართული არ იყო" -#: libpq/hba.c:1401 +#: libpq/hba.c:1407 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "hostgssenc-ის ჩანაწერის დამთხვევა შეუძლებელია, რადგან GSSAPI -ის მხარდაჭერა ამ აგებისას ჩართული არ იყო" -#: libpq/hba.c:1421 +#: libpq/hba.c:1427 #, c-format msgid "invalid connection type \"%s\"" msgstr "შეერთების არასწორი ტიპი: %s" -#: libpq/hba.c:1435 +#: libpq/hba.c:1441 #, c-format msgid "end-of-line before database specification" msgstr "ხაზის-დასასრული ბაზის მითითებამდე" -#: libpq/hba.c:1460 +#: libpq/hba.c:1466 #, c-format msgid "end-of-line before role specification" msgstr "ხაზის-დასასრული როლის მითითებამდე" -#: libpq/hba.c:1487 +#: libpq/hba.c:1493 #, c-format msgid "end-of-line before IP address specification" msgstr "ხაზის-დასასრული IP მისამართის მითითებამდე" -#: libpq/hba.c:1498 +#: libpq/hba.c:1504 #, c-format msgid "multiple values specified for host address" msgstr "მითითებულია ჰოსტის მისამართის ერთზე მეტი მნიშვნელობა" -#: libpq/hba.c:1499 +#: libpq/hba.c:1505 #, c-format msgid "Specify one address range per line." msgstr "ერთ ხაზზე ერთი მისამართების დიაპაზონი მიუთითეთ." -#: libpq/hba.c:1557 +#: libpq/hba.c:1563 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "არასწორი IP მისამართი \"%s\": %s" -#: libpq/hba.c:1577 +#: libpq/hba.c:1583 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "ორივეს, ჰოსტის სახელის და CIDR-ის ნიღბის მითითება არასწორია: \"%s\"" -#: libpq/hba.c:1591 +#: libpq/hba.c:1597 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "არასწორი CIDR ნიღაბი მისამართში \"%s\"" -#: libpq/hba.c:1611 +#: libpq/hba.c:1617 #, c-format msgid "end-of-line before netmask specification" msgstr "ხაზის-დასასრული ქსელური ნიღბის მითითებამდე" -#: libpq/hba.c:1612 +#: libpq/hba.c:1618 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "" -#: libpq/hba.c:1623 +#: libpq/hba.c:1629 #, c-format msgid "multiple values specified for netmask" msgstr "მითითებულია ქსელის ნიღბის ერთზე მეტი მნიშვნელობა" -#: libpq/hba.c:1637 +#: libpq/hba.c:1643 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "არასწორი IP ნიღაბი \"%s\": %s" -#: libpq/hba.c:1657 +#: libpq/hba.c:1663 #, c-format msgid "IP address and mask do not match" msgstr "IP მისამართი და ნიღაბი არ ემთხვევა" -#: libpq/hba.c:1673 +#: libpq/hba.c:1679 #, c-format msgid "end-of-line before authentication method" msgstr "ხაზის-დასასრული ავთენტიკაციის მეთოდამდე" -#: libpq/hba.c:1684 +#: libpq/hba.c:1690 #, c-format msgid "multiple values specified for authentication type" msgstr "ავთენტიკაციის ტიპში მითითებულია ერთზე მეტი მნიშვნელობა" -#: libpq/hba.c:1685 +#: libpq/hba.c:1691 #, c-format msgid "Specify exactly one authentication type per line." msgstr "ერთ ხაზზე ზუსტად ერთი ავთენტიკაციის ტიპი უნდა მიუთითოთ." -#: libpq/hba.c:1750 +#: libpq/hba.c:1758 #, c-format msgid "invalid authentication method \"%s\"" msgstr "არასწორი ავთენტიკაციის მეთოდი \"%s\"" -#: libpq/hba.c:1763 +#: libpq/hba.c:1771 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "არასწორი ავთენტიკაციის მეთოდი \"%s\": მხარდაუჭერელია ამ ვერსიის მიერ" -#: libpq/hba.c:1786 +#: libpq/hba.c:1794 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "gssapi ავთენტიკაცია ლოკალურ სოკეტებზე მხარდაუჭერელია" -#: libpq/hba.c:1798 +#: libpq/hba.c:1806 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "პარტნიორის ავთენტიკაცია მხოლოდ ლოკალურ სოკეტებზეა მხარდაჭერილი" -#: libpq/hba.c:1816 +#: libpq/hba.c:1824 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "სერტიფიკატით ავთენტიკაცია მხოლოდ hostssl მიერთებებზეა მხარდაჭერილი" -#: libpq/hba.c:1866 +#: libpq/hba.c:1874 #, c-format msgid "authentication option not in name=value format: %s" msgstr "ავთენტიკაციის პარამეტრი სახელი=მნიშვნელობა ფორმატში არაა: %s" -#: libpq/hba.c:1910 +#: libpq/hba.c:1918 #, c-format -msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" -msgstr "ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, ან ldapurl-ის ldapprefix-სთან ერთად გამოყენება შეუძლებელია" +msgid "cannot mix options for simple bind and search+bind modes" +msgstr "" -#: libpq/hba.c:1921 +#: libpq/hba.c:1929 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "ავთენტიკაციის მეთოდს \"ldap\" არგუმენტების \"ldapbasedn\", \"ldapprefix\", ან \"ldapsuffix\" დაყენება სჭირდება" -#: libpq/hba.c:1937 +#: libpq/hba.c:1945 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ldapsearchattribute-ს და ldapsearchfilter-ს ერთად ვერ გამოიყენებთ" -#: libpq/hba.c:1954 +#: libpq/hba.c:1962 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "'RADIUS' სერვერების სია არ შეიძლება, ცარიელი იყოს" -#: libpq/hba.c:1965 +#: libpq/hba.c:1973 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "'RADIUS' საიდუმლოების სია არ შეიძლება, ცარიელი იყოს" -#: libpq/hba.c:1982 +#: libpq/hba.c:1990 #, c-format msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "" -#: libpq/hba.c:1998 +#: libpq/hba.c:2006 #, c-format msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "" -#: libpq/hba.c:2014 +#: libpq/hba.c:2022 #, c-format msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "" -#: libpq/hba.c:2066 -msgid "ident, peer, gssapi, sspi, and cert" -msgstr "ident, peer, gssapi, sspi, და cert" +#. translator: strings are replaced with hba options +#: libpq/hba.c:2067 +#, c-format +msgid "%s cannot be used in combination with %s" +msgstr "%s-ს %s-სთან ერთად ვერ გამოიყენებთ" + +#: libpq/hba.c:2105 +msgid "ident, peer, gssapi, sspi, cert, and oauth" +msgstr "ident, peer, gssapi, sspi, cert და oauth" -#: libpq/hba.c:2075 +#: libpq/hba.c:2114 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert-ის მორგება მხოლოდ \"hostssl\" ხაზებისთვის შეგიძლიათ" -#: libpq/hba.c:2092 +#: libpq/hba.c:2131 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "\"cert\" ტიპის ავთენტიკაციის გამოყენებისას clientcert-ს მხოლოდ \"verify-full\" შეგიძლიათ, მიუთითოთ" -#: libpq/hba.c:2105 +#: libpq/hba.c:2144 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "invalid value for clientcert: \"%s\"" -#: libpq/hba.c:2117 +#: libpq/hba.c:2156 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname-ის მორგება მხოლოდ \"hostssl\" ხაზებისთვის შეგიძლიათ" -#: libpq/hba.c:2136 +#: libpq/hba.c:2175 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "არასწორი მნიშვნელობა კლიენტის სახელისთვის: \"%s\"" -#: libpq/hba.c:2169 +#: libpq/hba.c:2208 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "\"LDAP URL\"-ის (%s) დამუშავების შეცდომა: %s" -#: libpq/hba.c:2180 +#: libpq/hba.c:2219 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "\"LDAP URL\"-ის მხარდაუჭერელი სქემა: %s" -#: libpq/hba.c:2204 +#: libpq/hba.c:2243 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "ამ პლატფორმაზე LDAP URL მხარდაჭერილი არაა" -#: libpq/hba.c:2222 +#: libpq/hba.c:2261 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "ldapscheme -ის არასწორი მნიშვნელობა: \"%s\"" -#: libpq/hba.c:2240 +#: libpq/hba.c:2279 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "\"LDAP\"-ის პორტის არასწორი ნომერი: %s" -#: libpq/hba.c:2286 libpq/hba.c:2293 +#: libpq/hba.c:2325 libpq/hba.c:2332 msgid "gssapi and sspi" msgstr "gssapi და sspi" -#: libpq/hba.c:2302 libpq/hba.c:2311 +#: libpq/hba.c:2341 libpq/hba.c:2350 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2333 +#: libpq/hba.c:2372 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "\"RADIUS\"-ის სერვერების სიის დამუშავება შეუძლებელია: %s" -#: libpq/hba.c:2381 +#: libpq/hba.c:2420 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "\"RADIUS\"-ის პორტების სიის დამუშავება შეუძლებელია: %s" -#: libpq/hba.c:2395 +#: libpq/hba.c:2434 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "\"RADIUS\"-ის არასწორი პორტი: \"%s\"" -#: libpq/hba.c:2417 +#: libpq/hba.c:2456 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "'RADIUS'-ის საიდუმლოების სიის დამუშავება შეუძლებელია: %s" -#: libpq/hba.c:2439 +#: libpq/hba.c:2478 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "'RADIUS'-ის იდენტიფიკატორების ჩამონათვალის \"%s\" დამუშავება შეუძლებელია" -#: libpq/hba.c:2453 +#: libpq/hba.c:2515 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "უცნობი ავთნტიკაციის პარამეტრის სახელი: \"%s\"" -#: libpq/hba.c:2645 +#: libpq/hba.c:2707 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "კონფიგურაციის ფაილი \"%s\" ჩანაწერებს არ შეიცავს" -#: libpq/hba.c:2798 +#: libpq/hba.c:2860 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "რეგულარული გამოსახულების დამთხვევა \"%s\"-სთვის ჩავარდა: %s" -#: libpq/hba.c:2822 +#: libpq/hba.c:2884 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "" -#: libpq/hba.c:2925 +#: libpq/hba.c:2987 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" -#: libpq/hba.c:2945 +#: libpq/hba.c:3007 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" -#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#: libpq/pqcomm.c:212 libpq/pqcomm.c:220 libpq/pqcomm.c:251 libpq/pqcomm.c:260 libpq/pqcomm.c:1652 libpq/pqcomm.c:1697 libpq/pqcomm.c:1737 libpq/pqcomm.c:1781 libpq/pqcomm.c:1820 libpq/pqcomm.c:1859 libpq/pqcomm.c:1895 libpq/pqcomm.c:1934 #, c-format msgid "%s(%s) failed: %m" msgstr "%s(%s)-ის შეცდომა: %m" -#: libpq/pqcomm.c:296 +#: libpq/pqcomm.c:297 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "სოკეტის არაბლოკირებული რეჟიმის დაყენების შეცდომა: %m" -#: libpq/pqcomm.c:456 +#: libpq/pqcomm.c:457 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Unix-დომენის სოკეტის მისამართი \"%s\" ძალიან გრძელია (დასაშვებია %d ბაიტი)" -#: libpq/pqcomm.c:476 +#: libpq/pqcomm.c:477 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "ჰოსტის სახელის \"%s\" და სერვისის სახელის \"%s\" მისამართში თარგმნა შეუძლებელია: %s" -#: libpq/pqcomm.c:480 +#: libpq/pqcomm.c:481 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "სერვისის \"%s\" მისამართში თარგმნა შეუძლებელია: %s" -#: libpq/pqcomm.c:502 +#: libpq/pqcomm.c:503 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "ყველა მოთხოვნილ მისამართზე მიმაგრება შეუძლებელია: MAXLISTEN (%d) გადაცილებულია" -#: libpq/pqcomm.c:511 +#: libpq/pqcomm.c:512 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:514 +#: libpq/pqcomm.c:515 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:517 +#: libpq/pqcomm.c:518 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:521 +#: libpq/pqcomm.c:522 #, c-format msgid "unrecognized address family %d" msgstr "მისამართის არასწორი ოჯახი %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:545 +#: libpq/pqcomm.c:546 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "%s სოკეტის შექმნის შეცდომა მისამართისთვის \"%s\": %m" -#. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 +#. translator: third %s is IPv4 or IPv6 +#. translator: third %s is IPv6 +#: libpq/pqcomm.c:575 libpq/pqcomm.c:593 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "%s(%s)-ის შეცდომა %s-სთვის მისამართი \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:615 +#: libpq/pqcomm.c:616 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "%s მისამართზე \"%s\" მიბმის შეცდომა: %m" -#: libpq/pqcomm.c:619 +#: libpq/pqcomm.c:620 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "იქნებ პორტზე %d სხვა postmaster პროცესი უკვე უსმენს?" -#: libpq/pqcomm.c:621 +#: libpq/pqcomm.c:622 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "იქნებ პორტზე %d სხვა postmaster პროცესი უკვე უსმენს? თუ არა, დაიცადეთ რამდენიმე წამი და თავიდან სცადეთ." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:650 +#: libpq/pqcomm.c:651 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "%s მისამართზე \"%s\" მოსმენა შეუძლებელია: %m" -#: libpq/pqcomm.c:658 +#: libpq/pqcomm.c:659 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "ვუსმენ Unix სოკეტს \"%s\"" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:663 +#: libpq/pqcomm.c:664 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "ვუსმენ %s მისამართი \"%s\", პორტი %d" -#: libpq/pqcomm.c:753 +#: libpq/pqcomm.c:754 #, c-format msgid "group \"%s\" does not exist" msgstr "ჯგუფი \"%s\" არ არსებობს" -#: libpq/pqcomm.c:763 +#: libpq/pqcomm.c:764 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "ფაილის \"%s\" ჯგუფის დაყენება შეუძლებელია: %m" -#: libpq/pqcomm.c:774 +#: libpq/pqcomm.c:775 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "ფაილზე \"%s\" წვდომების დაყენების შეცდომა: %m" -#: libpq/pqcomm.c:803 +#: libpq/pqcomm.c:804 #, c-format msgid "could not accept new connection: %m" msgstr "ახალი მიერთების მიღება შეუძლებელია: %m" -#: libpq/pqcomm.c:885 +#: libpq/pqcomm.c:886 #, c-format msgid "there is no client connection" msgstr "კლიენტის მიერთება არ არსებობს" -#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 +#: libpq/pqcomm.c:942 libpq/pqcomm.c:1043 #, c-format msgid "could not receive data from client: %m" msgstr "კლიენტიდან მონაცემების მიღების შეცდომა: %m" -#: libpq/pqcomm.c:1149 tcop/postgres.c:4446 +#: libpq/pqcomm.c:1151 tcop/postgres.c:4505 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "მიერთება შეწყდება, რადგან პროტოკოლის სინქრონიზაცია დაიკარგა" -#: libpq/pqcomm.c:1215 +#: libpq/pqcomm.c:1217 #, c-format msgid "unexpected EOF within message length word" msgstr "მოულოდნელი EOF შეტყობინების სიგრძის სიტყვაში" -#: libpq/pqcomm.c:1225 +#: libpq/pqcomm.c:1227 #, c-format msgid "invalid message length" msgstr "შეტყობინების არასწორი სიგრძე" -#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 +#: libpq/pqcomm.c:1249 libpq/pqcomm.c:1262 #, c-format msgid "incomplete message from client" msgstr "კლიენტიდან მიღებული შეტყობინება დაუსრულებელია" -#: libpq/pqcomm.c:1401 +#: libpq/pqcomm.c:1405 #, c-format msgid "could not send data to client: %m" msgstr "კლიენტისთვის მონაცემების გაგზავნის შეცდომა: %m" -#: libpq/pqcomm.c:1616 +#: libpq/pqcomm.c:1620 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s) -ის შეცდომა: შეცდომის კოდი %d" -#: libpq/pqcomm.c:1705 +#: libpq/pqcomm.c:1709 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "" -#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 +#: libpq/pqcomm.c:1793 libpq/pqcomm.c:1868 libpq/pqcomm.c:1943 #, c-format msgid "%s(%s) not supported" msgstr "%s (%s) მხარდაუჭერელია" @@ -15978,7 +16430,7 @@ msgstr "%s (%s) მხარდაუჭერელია" msgid "no data left in message" 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/rowtypes.c:613 +#: libpq/pqformat.c:515 libpq/pqformat.c:533 libpq/pqformat.c:554 utils/adt/array_userfuncs.c:873 utils/adt/arrayfuncs.c:1481 utils/adt/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "შეტყობინებაში დარჩენილი მონაცემები არასაკმარისია" @@ -15993,12 +16445,12 @@ msgstr "არასწორი სტრიქონი შეტყობი msgid "invalid message format" msgstr "არასწორი შეტყობინების ფორმატი" -#: main/main.c:234 +#: main/main.c:298 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup-ის შეცდომა: %d\n" -#: main/main.c:322 +#: main/main.c:386 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -16007,7 +16459,7 @@ msgstr "" "%s PostgreSQL სერვერია.\n" "\n" -#: main/main.c:323 +#: main/main.c:387 #, c-format msgid "" "Usage:\n" @@ -16019,107 +16471,107 @@ msgstr "" "\n" "\n" -#: main/main.c:324 +#: main/main.c:388 #, c-format msgid "Options:\n" msgstr "პარამეტრები:\n" -#: main/main.c:325 +#: main/main.c:389 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS გაზიარებული ბაფერების რაოდენობა\n" -#: main/main.c:326 +#: main/main.c:390 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c სახელი=მნიშვნელობა გაშვებული პროცესის პარამეტრის დაყენება\n" -#: main/main.c:327 +#: main/main.c:391 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C სახელი გაშვებული პროცესის პარამეტრის გამოტანა და გასვლა\n" -#: main/main.c:328 +#: main/main.c:392 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 გამართვის დონე\n" -#: main/main.c:329 +#: main/main.c:393 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR მონაცემთა ბაზის დირექტორია\n" -#: main/main.c:330 +#: main/main.c:394 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e ევროპული თარიღის შეყვანის ფორმატის (DMY) გამოყენება\n" -#: main/main.c:331 +#: main/main.c:395 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsync-ის გამორთვა\n" -#: main/main.c:332 +#: main/main.c:396 #, 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:397 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr " -i TCP/IP-ის ჩართვა (მოძველებული)\n" -#: main/main.c:334 +#: main/main.c:398 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k საქაღალდე Unix-დომენის სოკეტის მდებარეობა\n" -#: main/main.c:336 +#: main/main.c:400 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL-ის ჩართვა\n" -#: main/main.c:338 +#: main/main.c:402 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N მაქს-მიერთ მიერთებების დაშვებული მაქსიმალური რაოდენობა\n" -#: main/main.c:339 +#: main/main.c:403 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p პორტი მოსასმენი პორტის ნომერი\n" -#: main/main.c:340 +#: main/main.c:404 #, c-format msgid " -s show statistics after each query\n" msgstr " -s ყოველი მოთხოვნის შემდეგ სტატისტიკსი ჩვენება\n" -#: main/main.c:341 +#: main/main.c:405 #, 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:406 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: main/main.c:343 +#: main/main.c:407 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --სახელი=მნიშვნელობა გაშვებული პროცესის პარამეტრის დაყენება\n" -#: main/main.c:344 +#: main/main.c:408 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config კონფიგურაციის პარამეტრის ახსნის გამოტანა და გასვლა\n" -#: main/main.c:345 +#: main/main.c:409 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: main/main.c:347 +#: main/main.c:411 #, c-format msgid "" "\n" @@ -16128,37 +16580,37 @@ msgstr "" "\n" "პროგრამისტის პარამეტრები:\n" -#: main/main.c:348 +#: main/main.c:412 #, 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:413 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O სისტემური ცხრილის სტრუქტურის შეცვლის დაშვება\n" -#: main/main.c:350 +#: main/main.c:414 #, c-format msgid " -P disable system indexes\n" msgstr " -P სისტემური ინდექსების გამორთვა\n" -#: main/main.c:351 +#: main/main.c:415 #, 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:416 #, 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:417 #, 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:419 #, c-format msgid "" "\n" @@ -16167,37 +16619,37 @@ msgstr "" "\n" "ერთმომხმარებლიანი რეჟიმის პარამეტრები:\n" -#: main/main.c:356 +#: main/main.c:420 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single ერთმომხმარებლიანი რეჟიმი (უნდა იყოს პირველი არგუმენტი)\n" -#: main/main.c:357 +#: main/main.c:421 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME ბაზის სახელი (ნაგულისხმევი მნიშვნელობა მომხმარებლის სახელია)\n" -#: main/main.c:358 +#: main/main.c:422 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 პროგრამის გამართვის დონის მითითება\n" -#: main/main.c:359 +#: main/main.c:423 #, c-format msgid " -E echo statement before execution\n" msgstr " -E ოპერატორის გამოტანა მის შესრულებამდე\n" -#: main/main.c:360 +#: main/main.c:424 #, 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:425 main/main.c:431 #, 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:427 #, c-format msgid "" "\n" @@ -16206,22 +16658,22 @@ msgstr "" "\n" "სამუშაოდ მომზადების პარამეტრები\n" -#: main/main.c:364 +#: main/main.c:428 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot სამუშაოდ მომზადების რეჟიმი (უნდა იყოს პირველი არგუმენტი)\n" -#: main/main.c:365 +#: main/main.c:429 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr " --check შემოწმების რეჟიმი (უნდა იყოს პირველი არგუმენტი)\n" -#: main/main.c:366 +#: main/main.c:430 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME ბაზის სახელი (აუცილებელი არგუმენტი სამუშაოდ მომზადებისას)\n" -#: main/main.c:369 +#: main/main.c:433 #, c-format msgid "" "\n" @@ -16232,12 +16684,12 @@ msgid "" "Report bugs to <%s>.\n" msgstr "" -#: main/main.c:373 +#: main/main.c:437 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: main/main.c:384 +#: main/main.c:448 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -16246,12 +16698,12 @@ msgid "" "more information on how to properly start the server.\n" msgstr "" -#: main/main.c:401 +#: main/main.c:465 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: რეალური და მიმდინარე მომხმარებლის ID-ები უნდა ემთხვეოდეს\n" -#: main/main.c:408 +#: main/main.c:472 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -16271,12 +16723,12 @@ msgstr "გაფართოებადი კვანძის ტიპი msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\" რეგისტრირებული არ იყო" -#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 +#: nodes/makefuncs.c:154 nodes/makefuncs.c:180 statistics/extended_stats.c:2306 #, c-format 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:2602 parser/parse_coerce.c:2740 parser/parse_coerce.c:2787 parser/parse_expr.c:2118 parser/parse_func.c:710 parser/parse_oper.c:869 utils/adt/array_userfuncs.c:1950 utils/fmgr/funcapi.c:669 #, c-format msgid "could not find array type for data type %s" msgstr "მონაცემების ტიპისთვის %s მასივის ტიპი ვერ ვიპოვე" @@ -16291,765 +16743,786 @@ msgstr "პორტალი \"%s\" პარამეტრებით: %s" msgid "unnamed portal with parameters: %s" msgstr "უსახელო პორტალი პარამეტრებით: %s" -#: optimizer/path/joinrels.c:972 +#: optimizer/path/joinrels.c:973 #, c-format 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:7250 parser/parse_merge.c:203 rewrite/rewriteHandler.c:1689 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" MERGE-ს ვერ გაუშვებთ" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1407 +#: optimizer/plan/initsplan.c:1755 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1380 parser/analyze.c:1771 parser/analyze.c:2029 parser/analyze.c:3247 +#: optimizer/plan/planner.c:1459 parser/analyze.c:1900 parser/analyze.c:2159 parser/analyze.c:3480 #, c-format 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:2202 optimizer/plan/planner.c:4045 #, 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:2203 optimizer/plan/planner.c:4046 optimizer/plan/planner.c:4727 optimizer/prep/prepunion.c:1073 #, 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:4726 #, c-format msgid "could not implement DISTINCT" msgstr "\"DISTINCT\"-ის განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:6133 +#: optimizer/plan/planner.c:6188 #, c-format msgid "could not implement window PARTITION BY" msgstr "ფანჯრის, \"PARTITION BY\" განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:6134 +#: optimizer/plan/planner.c:6189 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "ფანჯრის დამყოფი სვეტები დალაგებადი მონაცემის ტიპის უნდა იყოს." -#: optimizer/plan/planner.c:6138 +#: optimizer/plan/planner.c:6193 #, c-format msgid "could not implement window ORDER BY" msgstr "ფანჯრის, \"ORDER BY\" განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:6139 +#: optimizer/plan/planner.c:6194 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "ფანჯრის დამლაგებელი სვეტები დალაგებადი მონაცემის ტიპის უნდა იყოს." -#: optimizer/prep/prepunion.c:467 +#: optimizer/prep/prepunion.c:440 #, c-format msgid "could not implement recursive UNION" msgstr "რეკურსიული UNION_ის განხორციელება შეუძლებელია" -#: optimizer/prep/prepunion.c:468 +#: optimizer/prep/prepunion.c:441 #, c-format msgid "All column datatypes must be hashable." msgstr "ყველა სვეტის მონაცემის ტიპი ჰეშირებადი უნდა იყოს." -#. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1319 +#. translator: %s is INTERSECT or EXCEPT +#: optimizer/prep/prepunion.c:1071 #, c-format msgid "could not implement %s" msgstr "ვერ განხორციელდა %s" -#: optimizer/util/clauses.c:4951 +#: optimizer/util/appendinfo.c:165 +#, c-format +msgid "attribute \"%s\" of relation \"%s\" does not match parent's type" +msgstr "ურთიერთობის \"%2$s\" ატრიბუტი \"%1$s\" მშობლის ტიპს არ ემთხვევა" + +#: optimizer/util/appendinfo.c:170 +#, c-format +msgid "attribute \"%s\" of relation \"%s\" does not match parent's collation" +msgstr "ურთიერთობის \"%2$s\" ატრიბუტი \"%1$s\" მშობლის კოლაციას არ ემთხვევა" + +#: optimizer/util/clauses.c:4966 #, 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:770 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "" -#: optimizer/util/plancat.c:773 +#: optimizer/util/plancat.c:787 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "შეზღუდვას ON CONFLICT პირობაში ასოცირებული ინდექსი არ გააჩნია" -#: optimizer/util/plancat.c:823 +#: optimizer/util/plancat.c:837 #, 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:954 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "უნიკალური ან გამორიცხვის შეზღუდვა, რომელიც ON CONFLICT-ის აღწერას ემთხვევა, არ არსებობს" -#: parser/analyze.c:824 parser/analyze.c:1550 +#: parser/analyze.c:954 parser/analyze.c:1679 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUES-ის სიები ყველა ტოლი სიგრძის უნდა იყოს" -#: parser/analyze.c:1027 +#: parser/analyze.c:1156 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT-ს მეტი გამოსახულება გააჩნია, ვიდრე სამიზნე სვეტი" -#: parser/analyze.c:1045 +#: parser/analyze.c:1174 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT-ს მეტი სამიზნე სვეტი გააჩნია, ვიდრე გამოსახულება" -#: parser/analyze.c:1049 +#: parser/analyze.c:1178 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "" -#: parser/analyze.c:1357 parser/analyze.c:1744 +#: parser/analyze.c:1486 parser/analyze.c:1873 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO აქ დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1673 parser/analyze.c:3479 +#: parser/analyze.c:1802 parser/analyze.c:3712 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s-ს VALUES-ზე ვერ გამოიყენებთ" -#: parser/analyze.c:1911 +#: parser/analyze.c:2040 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "არასწორი UNION/INTERSECT/EXCEPT ORDER BY პირობა" -#: parser/analyze.c:1912 +#: parser/analyze.c:2041 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "" -#: parser/analyze.c:1913 +#: parser/analyze.c:2042 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "" -#: parser/analyze.c:2019 +#: parser/analyze.c:2149 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "" -#: parser/analyze.c:2091 +#: parser/analyze.c:2221 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "" -#: parser/analyze.c:2178 +#: parser/analyze.c:2308 #, c-format msgid "each %s query must have the same number of columns" msgstr "ყოველ %s მოთხოვნას სვეტების ტოლი რაოდენობა უნდა ჰქონდეს" -#: parser/analyze.c:2535 +#: parser/analyze.c:2665 #, c-format msgid "SET target columns cannot be qualified with the relation name." msgstr "" -#: parser/analyze.c:2589 +#. translator: %s is OLD or NEW +#: parser/analyze.c:2753 parser/analyze.c:2763 +#, c-format +msgid "%s cannot be specified multiple times" +msgstr "%s-ის რამდენჯერმე მითითება აკრძალულია" + +#: parser/analyze.c:2775 parser/parse_relation.c:473 +#, c-format +msgid "table name \"%s\" specified more than once" +msgstr "" + +#: parser/analyze.c:2823 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING-ს ერთი სვეტი მაინც უნდა ჰქონდეს" -#: parser/analyze.c:2692 +#: parser/analyze.c:2925 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" msgstr[0] "მინიჭების წყარომ %d სვეტი დააბრუნა" msgstr[1] "მინიჭების წყარომ %d სვეტი დააბრუნა" -#: parser/analyze.c:2753 +#: parser/analyze.c:2986 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "\"%s\" ცვლადის ტიპია \"%s\", მაგრამ გამოსახულება %s ტიპისაა" #. translator: %s is a SQL keyword -#: parser/analyze.c:2878 parser/analyze.c:2886 +#: parser/analyze.c:3111 parser/analyze.c:3119 #, c-format msgid "cannot specify both %s and %s" msgstr "ორივე, %s და %s ერთად მითითება შეუძლებელია" -#: parser/analyze.c:2906 +#: parser/analyze.c:3139 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR-ი WITH-ში მონაცემების შემცვლელ გამოსახულებებს არ უნდა შეიცავდეს" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2914 +#: parser/analyze.c:3147 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s მხარდაჭერილი არაა" -#: parser/analyze.c:2917 +#: parser/analyze.c:3150 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "შენახვადი კურსორები READ ONLY ტიპის უნდა იყოს." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2925 +#: parser/analyze.c:3158 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s მხარდაჭერილი არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2936 +#: parser/analyze.c:3169 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s არასწორია" -#: parser/analyze.c:2939 +#: parser/analyze.c:3172 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "დამოუკიდებელი კურსორები READ ONLY ტიპის უნდა იყოს." -#: parser/analyze.c:3033 +#: parser/analyze.c:3266 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "მატერიალიზებულმა ხედებმა WITH-ში მონაცემების-შემცვლელი გამოსახულებები არ უნდა გამოიყენონ" -#: parser/analyze.c:3043 +#: parser/analyze.c:3276 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "მატერიალიზებულმა ხედებმა დროებითი ცხრილები ან ხედები არ უნდა გამოიყენონ" -#: parser/analyze.c:3053 +#: parser/analyze.c:3286 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "მატერიალიზებული ხედის აღწერა მიმაგრებული პარამეტრების გამოყენებით შეუძლებელია" -#: parser/analyze.c:3065 +#: parser/analyze.c:3298 #, c-format msgid "materialized views cannot be unlogged" msgstr "მატერიალიზებული ხედების ჟურნალის გამორთვა შეუძლებელია" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3254 +#: parser/analyze.c:3487 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s-ი DISTINCT პირობასთან ერთად დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3261 +#: parser/analyze.c:3494 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s-ი GROUP BY პირობასთან ერთად დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3268 +#: parser/analyze.c:3501 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s-ი HAVING პირობასთან ერთად დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3275 +#: parser/analyze.c:3508 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s აგრეგატულ ფუნქციებთან ერთად დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3282 +#: parser/analyze.c:3515 #, c-format msgid "%s is not allowed with window functions" msgstr "%s ფანჯრულ ფუნქციებთან ერთად დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3289 +#: parser/analyze.c:3522 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s სამიზნეების სიაში სეტების-დამბრუნებელ ფუნქციებთან ერთად დაშვებული არაა" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3388 +#: parser/analyze.c:3621 #, c-format msgid "%s must specify unqualified relation names" msgstr "" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3452 +#: parser/analyze.c:3685 #, c-format msgid "%s cannot be applied to a join" msgstr "%s join-ზე ვერ გადატარდება" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3461 +#: parser/analyze.c:3694 #, c-format msgid "%s cannot be applied to a function" msgstr "%s ფუნქციაზე ვერ გადატარდება" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3470 +#: parser/analyze.c:3703 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s ცხრილის ფუნქციაზე ვერ გადატარდება" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3488 +#: parser/analyze.c:3721 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s WITH მოთხოვნაზე ვერ გადატარდება" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3497 +#: parser/analyze.c:3730 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3517 +#: parser/analyze.c:3750 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "" -#: parser/parse_agg.c:210 parser/parse_oper.c:215 +#: parser/parse_agg.c:215 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "ტიპისთვის %s დალაგების ოპერატორის იდენტიფიკაცია შეუძლებელია" -#: parser/parse_agg.c:212 +#: parser/parse_agg.c:217 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "DISTINCT-ის მქონე აგრეგატებს შეყვანილი ინფორმაციის დალაგება თვითონ უნდა შეეძლოთ." -#: parser/parse_agg.c:270 +#: parser/parse_agg.c:275 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING-ის არგუმენტების რიცხვი 32-ზე ნაკლები უნდა იყოს" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:378 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "აგრეგატულ ფუნქციებს JOIN-ის პირობებში ვერ გამოიყენებთ" -#: parser/parse_agg.c:375 +#: parser/parse_agg.c:380 msgid "grouping operations are not allowed in JOIN conditions" msgstr "დაჯგუფების ოპერაციებს JOIN-ის პირობებში ვერ გამოიყენებთ" -#: parser/parse_agg.c:387 +#: parser/parse_agg.c:390 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:392 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:397 msgid "aggregate functions are not allowed in functions in FROM" msgstr "აგრეგატულ ფუნქციებს FROM-ში ვერ გამოიყენებთ" -#: parser/parse_agg.c:396 +#: parser/parse_agg.c:399 msgid "grouping operations are not allowed in functions in FROM" msgstr "დაჯგუფების ოპერაციებს FROM-ში ვერ გამოიყენებთ" -#: parser/parse_agg.c:404 +#: parser/parse_agg.c:407 msgid "aggregate functions are not allowed in policy expressions" msgstr "წესის გამოსახულებებში აგრეგატული ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:406 +#: parser/parse_agg.c:409 msgid "grouping operations are not allowed in policy expressions" msgstr "წესის გამოსახულებებში დაჯგუფების ოპერაციები დაუშვებელია" -#: parser/parse_agg.c:423 +#: parser/parse_agg.c:426 msgid "aggregate functions are not allowed in window RANGE" msgstr "ფანჯრის RANGE-ში აგრეგატული ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:425 +#: parser/parse_agg.c:428 msgid "grouping operations are not allowed in window RANGE" msgstr "ფანჯრის RANGE-ში დაჯგუფების ოპერაციები დაუშვებელია" -#: parser/parse_agg.c:430 +#: parser/parse_agg.c:433 msgid "aggregate functions are not allowed in window ROWS" msgstr "ფანჯრის ROWS-ში აგრეგატული ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:432 +#: parser/parse_agg.c:435 msgid "grouping operations are not allowed in window ROWS" msgstr "ფანჯრის ROWS_ში დაჯგუფების ოპერაციები დაუშვებელია" -#: parser/parse_agg.c:437 +#: parser/parse_agg.c:440 msgid "aggregate functions are not allowed in window GROUPS" msgstr "აგრეგატული ფუნქციები ფანჯრის GROUPS-ში დაშვებული არაა" -#: parser/parse_agg.c:439 +#: parser/parse_agg.c:442 msgid "grouping operations are not allowed in window GROUPS" msgstr "დაჯგუფების ფუნქციები ფანჯრის GROUPS-ში დაშვებული არაა" -#: parser/parse_agg.c:452 +#: parser/parse_agg.c:455 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "აგრეგატული ფუნქციები MERGE WHEN-ის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:454 +#: parser/parse_agg.c:457 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "დაჯგუფების ფუნქციები MERGE WHEN-ის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:481 +#: parser/parse_agg.c:484 msgid "aggregate functions are not allowed in check constraints" msgstr "აგრეგატული ფუნქციები შეზღუდვის შემოწმებებში დაშვებული არაა" -#: parser/parse_agg.c:483 +#: parser/parse_agg.c:486 msgid "grouping operations are not allowed in check constraints" msgstr "დაჯგუფების ფუნქციები შეზღუდვის შემოწმებებში დაშვებული არაა" -#: parser/parse_agg.c:490 +#: parser/parse_agg.c:493 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "აგრეგატული ფუნქციები DEFAULT გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:495 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "დაჯგუფების ფუნქციები DEFAULT გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:497 +#: parser/parse_agg.c:500 msgid "aggregate functions are not allowed in index expressions" msgstr "აგრეგატული ფუნქციები ინდექსის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:502 msgid "grouping operations are not allowed in index expressions" msgstr "დაჯგუფების ფუნქციები ინდექსის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:504 +#: parser/parse_agg.c:507 msgid "aggregate functions are not allowed in index predicates" msgstr "აგრეგატული ფუნქციები ინდექსის პრედიკატებში დაშვებული არაა" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:509 msgid "grouping operations are not allowed in index predicates" msgstr "დაშვებული ფუნქციები ინდექსის პრედიკატებში დაშვებული არაა" -#: parser/parse_agg.c:511 +#: parser/parse_agg.c:514 msgid "aggregate functions are not allowed in statistics expressions" msgstr "აგრეგატული ფუნქციები სტატისტიკის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:516 msgid "grouping operations are not allowed in statistics expressions" msgstr "დაჯგუფების ფუნქციები სტატისტიკის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:518 +#: parser/parse_agg.c:521 msgid "aggregate functions are not allowed in transform expressions" msgstr "აგრეგატული ფუნქციები გადაყვანის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:523 msgid "grouping operations are not allowed in transform expressions" msgstr "დაჯგუფების ფუნქციები გადაყვანის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:525 +#: parser/parse_agg.c:528 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "აგრეგატული ფუნქციები EXECUTE-ის პარამეტრებში დაშვებული არაა" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:530 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "დაჯგუფების ფუნქციები EXECUTE-ის პარამეტრებში დაშვებული არაა" -#: parser/parse_agg.c:532 +#: parser/parse_agg.c:535 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "აგრეგატული ფუნქციები WHEN-ის ტრიგერის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:537 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "დაჯგუფების ფუნქციები WHEN-ის ტრიგერის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:539 +#: parser/parse_agg.c:542 msgid "aggregate functions are not allowed in partition bound" msgstr "აგრეგატული ფუნქციები დანაყოფის საზღვარში დაშვებული არაა" -#: parser/parse_agg.c:541 +#: parser/parse_agg.c:544 msgid "grouping operations are not allowed in partition bound" msgstr "დაჯგუფების ფუნქციები დანაყოფის საზღვარში დაშვებული არაა" -#: parser/parse_agg.c:546 +#: parser/parse_agg.c:549 msgid "aggregate functions are not allowed in partition key expressions" msgstr "აგრეგატული ფუნქციები დანაყოფის გასაღების გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:548 +#: parser/parse_agg.c:551 msgid "grouping operations are not allowed in partition key expressions" msgstr "დაჯგუფების ფუნქციები დანაყოფის გასაღების გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:554 +#: parser/parse_agg.c:557 msgid "aggregate functions are not allowed in column generation expressions" msgstr "აგრეგატული ფუნქციები სვეტის გენერაციის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:556 +#: parser/parse_agg.c:559 msgid "grouping operations are not allowed in column generation expressions" msgstr "დაჯგუფების ფუნქციები სვეტის გენერაციის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:562 +#: parser/parse_agg.c:565 msgid "aggregate functions are not allowed in CALL arguments" msgstr "აგრეგატული ფუნქციები CALL-ის არგუმენტებში დაშვებული არაა" -#: parser/parse_agg.c:564 +#: parser/parse_agg.c:567 msgid "grouping operations are not allowed in CALL arguments" msgstr "დაჯგუფების ფუნქციები CALL-ის არგუმენტებში დაშვებული არაა" -#: parser/parse_agg.c:570 +#: parser/parse_agg.c:573 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "აგრეგატული ფუნქციები COPY FROM WHERE პირობებში დაშვებული არაა" -#: parser/parse_agg.c:572 +#: parser/parse_agg.c:575 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:602 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:605 #, c-format msgid "grouping operations are not allowed in %s" msgstr "დაჯგუფების ფუნქციები %s-ში დაშვებული არაა" -#: parser/parse_agg.c:703 +#: parser/parse_agg.c:706 #, 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:784 #, 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:785 parser/parse_expr.c:1760 parser/parse_expr.c:2251 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:790 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "აგრეგატული ფუნქციის გამოძახებები არ შეიძლება, ფანჯრის ფუნქციის გამოძახებებს შეიცავდეს" -#: parser/parse_agg.c:866 +#: parser/parse_agg.c:869 msgid "window functions are not allowed in JOIN conditions" msgstr "\"JOIN\"-ის პირობებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:873 +#: parser/parse_agg.c:876 msgid "window functions are not allowed in functions in FROM" msgstr "\"FROM\"-ის ფუნქციებში ფანჯრების ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:882 msgid "window functions are not allowed in policy expressions" msgstr "წესების გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:892 +#: parser/parse_agg.c:895 msgid "window functions are not allowed in window definitions" msgstr "ფანჯრის აღწერებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:903 +#: parser/parse_agg.c:906 msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "\"MERGE WHEN\" პირობებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:931 msgid "window functions are not allowed in check constraints" msgstr "შეზღუდვის შემოწმებაში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:932 +#: parser/parse_agg.c:935 msgid "window functions are not allowed in DEFAULT expressions" msgstr "ნაგულისხმევ გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:935 +#: parser/parse_agg.c:938 msgid "window functions are not allowed in index expressions" msgstr "ინდექსის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:938 +#: parser/parse_agg.c:941 msgid "window functions are not allowed in statistics expressions" msgstr "სტატისტიკის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:941 +#: parser/parse_agg.c:944 msgid "window functions are not allowed in index predicates" msgstr "ინდექსის პრედიკატებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:944 +#: parser/parse_agg.c:947 msgid "window functions are not allowed in transform expressions" msgstr "გადაყვანის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:947 +#: parser/parse_agg.c:950 msgid "window functions are not allowed in EXECUTE parameters" msgstr "\"EXECUTE\"-ის პარამეტრებში ფანჯრის ფუნქციები დაუშვებელია\"" -#: parser/parse_agg.c:950 +#: parser/parse_agg.c:953 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "\"WHEN\"-ის პირობების ტრიგერში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:953 +#: parser/parse_agg.c:956 msgid "window functions are not allowed in partition bound" msgstr "დანაყოფის საზღვარში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:956 +#: parser/parse_agg.c:959 msgid "window functions are not allowed in partition key expressions" msgstr "დანაყოფის გასაღების გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:959 +#: parser/parse_agg.c:962 msgid "window functions are not allowed in CALL arguments" msgstr "\"CALL\"-ის არგუმენტებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:962 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "\"COPY FROM WHERE\"-ის პირობებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:965 +#: parser/parse_agg.c:968 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:991 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:1025 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "ფანჯარა \"%s\" არ არსებობს" -#: parser/parse_agg.c:1110 +#: parser/parse_agg.c:1115 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "ძალიან ბევრი დაჯგუფების ნაკრებია (მაქსიმუმ 4096)" -#: parser/parse_agg.c:1250 +#: parser/parse_agg.c:1276 #, 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:1499 #, 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:1502 #, 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:1507 #, 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:1672 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "" -#: parser/parse_clause.c:193 +#: parser/parse_clause.c:191 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "ურთიერთობა \"%s\" არ შეიძლება, შემცვლელი გამოსახულების სამიზნეს წარმოადგენდეს" -#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 +#: parser/parse_clause.c:567 parser/parse_clause.c:595 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "სეტების დამბრუნებელი ფუნქციები FROM-ის ზედა დონეზე უნდა გამოჩნდნენ" -#: parser/parse_clause.c:609 +#: parser/parse_clause.c:607 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "იგივე ფუნქციისთვის ერთზე მეტი სვეტის აღწერის სიები დაშვებული არაა" -#: parser/parse_clause.c:642 +#: parser/parse_clause.c:640 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ერთზე მეტი ფუნქციის მქონე ROW FROM ()-ს არ შეიძლება, სვეტის აღწერების სია ჰქონდეს" -#: parser/parse_clause.c:643 +#: parser/parse_clause.c:641 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "" -#: parser/parse_clause.c:649 +#: parser/parse_clause.c:647 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "" -#: parser/parse_clause.c:650 +#: parser/parse_clause.c:648 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "" -#: parser/parse_clause.c:657 +#: parser/parse_clause.c:655 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY სვეტების აღწერის სიასთან ერთად არ უნდა გამოიყენოთ" -#: parser/parse_clause.c:658 +#: parser/parse_clause.c:656 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "სვეტის აღწერის სია ROWS FROM()-ის შიგნით გადაიტანეთ." -#: parser/parse_clause.c:762 +#: parser/parse_clause.c:760 parser/parse_jsontable.c:293 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "დაშვებულია მხოლოდ FOR ORDINALITY სვეტი" -#: parser/parse_clause.c:823 +#: parser/parse_clause.c:821 #, c-format msgid "column name \"%s\" is not unique" msgstr "სვეტის სახელი \"%s\" არ არის უნიკალური" -#: parser/parse_clause.c:865 +#: parser/parse_clause.c:863 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "სახელების სივრცის სახელი \"%s\" უნიკალური არაა" -#: parser/parse_clause.c:875 +#: parser/parse_clause.c:873 #, c-format msgid "only one default namespace is allowed" msgstr "დასაშვებია მხოლოდ ერთი ნაგულისხმევი სახელის სივრცე" -#: parser/parse_clause.c:935 +#: parser/parse_clause.c:933 #, c-format msgid "tablesample method %s does not exist" msgstr "" -#: parser/parse_clause.c:957 +#: parser/parse_clause.c:955 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "" msgstr[1] "" -#: parser/parse_clause.c:991 +#: parser/parse_clause.c:989 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "" -#: parser/parse_clause.c:1144 +#: parser/parse_clause.c:1142 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "" -#: parser/parse_clause.c:1331 +#: parser/parse_clause.c:1329 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "პირობაში USIN სვეტის სახელი \"%s\" ერთზე მეტჯერ გამოჩნდა" -#: parser/parse_clause.c:1346 +#: parser/parse_clause.c:1344 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "საერთო სვეტის სახელი \"%s\" ერთხელ, მარცხენა ცხრილში გამოჩნდა" -#: parser/parse_clause.c:1355 +#: parser/parse_clause.c:1353 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "სვეტი \"%s\", რომელიც USING პირობაშია მითითებული, მარცხენა ცხრილში არ არსებობს" -#: parser/parse_clause.c:1370 +#: parser/parse_clause.c:1368 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "საერთო სვეტის სახელი \"%s\" ერთხელ, მარჯვენა ცხრილში გამოჩნდა" -#: parser/parse_clause.c:1379 +#: parser/parse_clause.c:1377 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "სვეტი \"%s\", რომელიც USING პირობაშია მითითებული, მარჯვენა ცხრილში არ არსებობს" @@ -17188,173 +17661,173 @@ msgstr "ოპერატორი %s სწორი დამლაგებ msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "" -#: parser/parse_clause.c:3775 +#: parser/parse_clause.c:3778 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "" -#: parser/parse_clause.c:3781 +#: parser/parse_clause.c:3784 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "" -#: parser/parse_clause.c:3784 +#: parser/parse_clause.c:3787 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "წანაცვლების მნიშვნელობის დამაკმაყოფილებელ ტიპში დაკასტვა." -#: parser/parse_clause.c:3789 +#: parser/parse_clause.c:3792 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "" -#: parser/parse_clause.c:3792 +#: parser/parse_clause.c:3795 #, c-format 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:1048 parser/parse_coerce.c:1086 parser/parse_coerce.c:1104 parser/parse_coerce.c:1119 parser/parse_expr.c:2152 parser/parse_expr.c:2770 parser/parse_expr.c:3421 parser/parse_expr.c:3650 parser/parse_target.c:1001 #, c-format msgid "cannot cast type %s to %s" msgstr "%s ტიპის %s-ში გადაყვანა შეუძლებელია" -#: parser/parse_coerce.c:1091 +#: parser/parse_coerce.c:1089 #, c-format msgid "Input has too few columns." msgstr "შეყვანას ძალიან ცოტა სვეტი აქვს." -#: parser/parse_coerce.c:1109 +#: parser/parse_coerce.c:1107 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "%3$d სვეტში %1$s ტიპის დაკასტვა ტიპამდე %2$s შეუძლებელია." -#: parser/parse_coerce.c:1124 +#: parser/parse_coerce.c:1122 #, c-format msgid "Input has too many columns." msgstr "შეყვანას ძალიან ბევრი სვეტი აქვს." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1179 parser/parse_coerce.c:1227 +#: parser/parse_coerce.c:1177 parser/parse_coerce.c:1225 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "%s-ის არგუმენტის ტიპი %s უნდა იყოს და არა %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1190 parser/parse_coerce.c:1239 +#: parser/parse_coerce.c:1188 parser/parse_coerce.c:1237 #, c-format msgid "argument of %s must not return a set" msgstr "%s-ის არგუმენტმა სეტი არ უნდა დააბრუნოს" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1383 +#: parser/parse_coerce.c:1418 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%s-ის ტიპები %s და %s არ შეიძლება, ერთმანეთს ემთხვეოდეს" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1534 #, 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:1586 #, 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:2189 parser/parse_coerce.c:2209 parser/parse_coerce.c:2229 parser/parse_coerce.c:2250 parser/parse_coerce.c:2305 parser/parse_coerce.c:2339 #, 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:2284 parser/parse_coerce.c:2397 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:2317 parser/parse_coerce.c:2467 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:2351 parser/parse_coerce.c:2431 parser/parse_coerce.c:2564 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:2388 #, 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:2414 parser/parse_coerce.c:2445 parser/parse_coerce.c:2484 parser/parse_coerce.c:2550 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2509 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2523 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "ტიპი, რომელიც anytoarray-ს ემთხვევა, მასივის ტიპისაა: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2533 #, 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:2594 #, 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:2612 parser/parse_coerce.c:2633 parser/parse_coerce.c:2683 parser/parse_coerce.c:2688 parser/parse_coerce.c:2752 parser/parse_coerce.c:2764 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2622 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2643 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2657 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2892 #, 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:2909 #, 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:2921 #, 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:2933 #, 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:2963 msgid "A result of type internal requires at least one input of type internal." msgstr "" @@ -17398,488 +17871,545 @@ msgstr "" msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "" -#: parser/parse_cte.c:136 +#: parser/parse_cte.c:137 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "WITH მოთხოვნის სახელი \"%s\" ერთზე მეტჯერაა მითითებული" -#: parser/parse_cte.c:308 +#: parser/parse_cte.c:309 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "" -#: parser/parse_cte.c:335 +#: parser/parse_cte.c:336 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "WITH პირობის შემცველი მონაცემების-შემცვლელი გამოსახულება უმაღლეს დონეზე უნდა იიყოს" -#: parser/parse_cte.c:384 +#: parser/parse_cte.c:385 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:391 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "" -#: parser/parse_cte.c:395 +#: parser/parse_cte.c:396 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "" -#: parser/parse_cte.c:399 +#: parser/parse_cte.c:400 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "" -#: parser/parse_cte.c:420 +#: parser/parse_cte.c:421 #, c-format msgid "WITH query is not recursive" msgstr "WITH მოთხოვნა რეკურსიული არაა" -#: parser/parse_cte.c:451 +#: parser/parse_cte.c:452 #, c-format msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "" -#: parser/parse_cte.c:456 +#: parser/parse_cte.c:457 #, c-format msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "" -#: parser/parse_cte.c:471 +#: parser/parse_cte.c:472 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "ძებნის სვეტი \"%s\" WITH მოთხოვნის სვეტების სიაში არაა" -#: parser/parse_cte.c:478 +#: parser/parse_cte.c:479 #, c-format msgid "search column \"%s\" specified more than once" msgstr "ძებნის სვეტი \"%s\" ერთზე მეტჯერაა მითითებული" -#: parser/parse_cte.c:487 +#: parser/parse_cte.c:488 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "" -#: parser/parse_cte.c:504 +#: parser/parse_cte.c:505 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "ციკლის სვეტი \"%s\" WITH მოთხოვნის სვეტების სიაში არაა" -#: parser/parse_cte.c:511 +#: parser/parse_cte.c:512 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "ციკლის სვეტი \"%s\" ერთზემეტჯერაა მითითებული" -#: parser/parse_cte.c:520 +#: parser/parse_cte.c:521 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "" -#: parser/parse_cte.c:527 +#: parser/parse_cte.c:528 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "" -#: parser/parse_cte.c:535 +#: parser/parse_cte.c:536 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "" -#: parser/parse_cte.c:545 +#: parser/parse_cte.c:546 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "" -#: parser/parse_cte.c:552 +#: parser/parse_cte.c:553 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "" -#: parser/parse_cte.c:636 +#: parser/parse_cte.c:637 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "" -#: parser/parse_cte.c:816 +#: parser/parse_cte.c:882 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "\"WITH\"-ის ჩანაწერებს შორის ურთიერთრეკურსია მხარდაჭერილი არაა" -#: parser/parse_cte.c:868 +#: parser/parse_cte.c:934 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "" -#: parser/parse_cte.c:876 +#: parser/parse_cte.c:942 #, c-format 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:977 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში ORDER BY განხორციელებული არაა" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:983 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში OFFSET განხორციელებული არაა" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:989 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში LIMIT განხორციელებული არაა" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:995 #, 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:1074 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "" -#: parser/parse_expr.c:314 +#: parser/parse_expr.c:311 #, 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:404 parser/parse_relation.c:3797 parser/parse_relation.c:3807 parser/parse_relation.c:3825 parser/parse_relation.c:3832 parser/parse_relation.c:3846 #, c-format msgid "column %s.%s does not exist" msgstr "სვეტი %s.%s არ არსებობს" -#: parser/parse_expr.c:419 +#: parser/parse_expr.c:416 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "სვეტი \"%s\" მონაცემის ტიპში %s აღმოჩენილი არაა" -#: parser/parse_expr.c:425 +#: parser/parse_expr.c:422 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "ჩანაწერის მონაცემის ტიპში სვეტის \"%s\" იდენტიფიკაცია შეუძლებელია" -#: parser/parse_expr.c:431 +#: parser/parse_expr.c:428 #, 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:459 parser/parse_target.c:735 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "" -#: parser/parse_expr.c:585 +#: parser/parse_expr.c:582 msgid "cannot use column reference in DEFAULT expression" msgstr "" -#: parser/parse_expr.c:588 +#: parser/parse_expr.c:585 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:844 parser/parse_relation.c:848 parser/parse_relation.c:930 parser/parse_target.c:1241 #, 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:900 parser/parse_param.c:111 parser/parse_param.c:143 parser/parse_param.c:205 parser/parse_param.c:304 #, 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:1101 parser/parse_expr.c:3081 #, 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:1107 parser/parse_expr.c:3088 #, c-format msgid "%s must not return a set" msgstr "%s -მა სეტი არ უნდა დააბრუნოს" -#: parser/parse_expr.c:1395 +#: parser/parse_expr.c:1393 #, c-format msgid "MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" msgstr "" -#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 +#: parser/parse_expr.c:1517 parser/parse_expr.c:1549 #, c-format msgid "number of columns does not match number of values" msgstr "" -#: parser/parse_expr.c:1565 +#: parser/parse_expr.c:1563 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 +#: parser/parse_expr.c:1758 parser/parse_expr.c:2249 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "%s-ში სეტის-დამბრუნებელი ფუნქციები დაშვებული არაა" -#: parser/parse_expr.c:1824 +#: parser/parse_expr.c:1822 msgid "cannot use subquery in check constraint" msgstr "შეზღუდვის შემმოწმებელში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1828 +#: parser/parse_expr.c:1826 msgid "cannot use subquery in DEFAULT expression" msgstr "ნაგულისხმევ გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1831 +#: parser/parse_expr.c:1829 msgid "cannot use subquery in index expression" msgstr "ინდექსის გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1834 +#: parser/parse_expr.c:1832 msgid "cannot use subquery in index predicate" msgstr "ინდექსის პრედიკატში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1837 +#: parser/parse_expr.c:1835 msgid "cannot use subquery in statistics expression" msgstr "სტატისტიკის გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1840 +#: parser/parse_expr.c:1838 msgid "cannot use subquery in transform expression" msgstr "გარდაქმნის გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1843 +#: parser/parse_expr.c:1841 msgid "cannot use subquery in EXECUTE parameter" msgstr "პარამეტრში \"EXECUTE\" ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1846 +#: parser/parse_expr.c:1844 msgid "cannot use subquery in trigger WHEN condition" msgstr "\"WHEN\" პირობის ტრიგერში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1849 +#: parser/parse_expr.c:1847 msgid "cannot use subquery in partition bound" msgstr "დანაყოფის საზღვარში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1852 +#: parser/parse_expr.c:1850 msgid "cannot use subquery in partition key expression" msgstr "დანაყოფის გასაღების გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1855 +#: parser/parse_expr.c:1853 msgid "cannot use subquery in CALL argument" msgstr "\"CALL\"-ის არგუმენტში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1858 +#: parser/parse_expr.c:1856 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "\"COPY FROM WHERE\" პირობაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1861 +#: parser/parse_expr.c:1859 msgid "cannot use subquery in column generation expression" msgstr "სვეტების გენერაციის გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1914 parser/parse_expr.c:3756 +#: parser/parse_expr.c:1912 parser/parse_expr.c:3780 #, c-format msgid "subquery must return only one column" msgstr "ქვემოთხოვნამ მხოლოდ ერთი სვეტი უნდა დააბრუნოს" -#: parser/parse_expr.c:1985 +#: parser/parse_expr.c:1983 #, c-format msgid "subquery has too many columns" msgstr "ქვემოთხოვნას ძალიან ბევრი სვეტი აქვს" -#: parser/parse_expr.c:1990 +#: parser/parse_expr.c:1988 #, c-format msgid "subquery has too few columns" msgstr "ქვემოთხოვნას ძალიან ცოტა სვეტი აქვს" -#: parser/parse_expr.c:2086 +#: parser/parse_expr.c:2092 #, c-format msgid "cannot determine type of empty array" msgstr "ცარიელი მასივის ტიპის დადგენა შეუძლებელია" -#: parser/parse_expr.c:2087 +#: parser/parse_expr.c:2093 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "" -#: parser/parse_expr.c:2101 +#: parser/parse_expr.c:2107 #, c-format msgid "could not find element type for data type %s" msgstr "" -#: parser/parse_expr.c:2184 +#: parser/parse_expr.c:2190 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW გამოსახულებებს მაქსიმუმ %d ელემენტი შეიძლება ჰქონდეს" -#: parser/parse_expr.c:2389 +#: parser/parse_expr.c:2395 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "უსახელო XML ატრიბუტის მნიშვნელობა სვეტის მიმართვას უნდა წარმოადგენდეს" -#: parser/parse_expr.c:2390 +#: parser/parse_expr.c:2396 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "უსახელო XML ელემენტის მნიშვნელობა სვეტის მიმართვას უნდა წარმოადგენდეს" -#: parser/parse_expr.c:2405 +#: parser/parse_expr.c:2411 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML ატრიბუტის სახელი \"%s\" ერთზე მეტჯერ გამოჩნდა" -#: parser/parse_expr.c:2513 +#: parser/parse_expr.c:2519 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "'XMLSERIALIZE'-ის შედეგის %s-ში დაკასტვა შეუძლებელია" -#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 +#: parser/parse_expr.c:2843 parser/parse_expr.c:3039 #, c-format msgid "unequal number of entries in row expressions" msgstr "მწკრივის გამოსახულებებში ჩანაწერების რაოდენობა ტოლი არაა" -#: parser/parse_expr.c:2837 +#: parser/parse_expr.c:2853 #, c-format msgid "cannot compare rows of zero length" msgstr "ნულოვანი სიგრძის მწკრივების შედარება შეუძლებელია" -#: parser/parse_expr.c:2862 +#: parser/parse_expr.c:2878 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "მწკრივის შედარების ოპერატორმა ლოგიკური მნიშვნელობა უნდა დააბრუნოს და არა ტიპი %s" -#: parser/parse_expr.c:2869 +#: parser/parse_expr.c:2885 #, c-format msgid "row comparison operator must not return a set" msgstr "მწკრივის შედარების ოპერატორმა სეტი არ უნდა დააბრუნოს" -#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 +#: parser/parse_expr.c:2944 parser/parse_expr.c:2985 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "მწკრივის შედარების ოპერატორის %s ინტერპრეტაციის დადგენა შეუძლებელია" -#: parser/parse_expr.c:2930 +#: parser/parse_expr.c:2946 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "მწკრივის შედარების ოპერატორები ბინარული ხის ოპერატორის ოჯახებთან უნდა იყოს ასოცირებული." -#: parser/parse_expr.c:2971 +#: parser/parse_expr.c:2987 #, c-format 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:3322 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "" -#: parser/parse_expr.c:3368 +#: parser/parse_expr.c:3386 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "" -#: parser/parse_expr.c:3369 +#: parser/parse_expr.c:3387 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "" -#: parser/parse_expr.c:3458 +#: parser/parse_expr.c:3476 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "'JSON' ფორმატის არა-სტრიქონის გამოტანის ტიპებთან ერთად გამოყენება შეუძლებელია" -#: parser/parse_expr.c:3471 +#: parser/parse_expr.c:3489 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "" -#: parser/parse_expr.c:3476 +#: parser/parse_expr.c:3494 #, c-format msgid "unsupported JSON encoding" msgstr "\"JSON\"-ის არასწორი კოდირება" -#: parser/parse_expr.c:3477 +#: parser/parse_expr.c:3495 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "მხარდაჭერილია მხოლოდ UTF8 JSON კოდირება." -#: parser/parse_expr.c:3514 +#: parser/parse_expr.c:3532 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "" -#: parser/parse_expr.c:3519 +#: parser/parse_expr.c:3537 #, 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:3865 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:4088 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "" -#: parser/parse_expr.c:4083 +#: parser/parse_expr.c:4108 #, 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:4134 parser/parse_expr.c:4255 +#, c-format +msgid "cannot use type %s in RETURNING clause of %s" +msgstr "%s ტიპის გამოყენება %s-ის RETURNING პირობაში შეუძლებელია" + +#: parser/parse_expr.c:4136 #, c-format -msgid "cannot use RETURNING type %s in %s" -msgstr "'RETURNING'-ის ტიპს '%s' %s-ში ვერ გამოიყენებთ" +msgid "Try returning json or jsonb." +msgstr "" -#: parser/parse_expr.c:4158 +#: parser/parse_expr.c:4184 #, c-format msgid "cannot use non-string types with WITH UNIQUE KEYS clause" msgstr "" -#: parser/parse_expr.c:4232 +#: parser/parse_expr.c:4258 #, c-format msgid "Try returning a string type or bytea." msgstr "" -#: parser/parse_expr.c:4297 +#: parser/parse_expr.c:4323 #, c-format msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" msgstr "" -#: parser/parse_expr.c:4309 +#: parser/parse_expr.c:4336 #, 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:4350 parser/parse_expr.c:4379 parser/parse_expr.c:4410 parser/parse_expr.c:4436 parser/parse_expr.c:4462 parser/parse_jsontable.c:92 +#, 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:4353 parser/parse_expr.c:4382 +#, 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:4360 parser/parse_expr.c:4389 parser/parse_expr.c:4418 parser/parse_expr.c:4446 parser/parse_expr.c:4472 +#, 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:4363 parser/parse_expr.c:4392 +#, 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:4411 +#, 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:4421 +#, 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:4439 parser/parse_expr.c:4465 +#, 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:4449 parser/parse_expr.c:4475 +#, c-format +msgid "Only ERROR, NULL, or DEFAULT expression is allowed in %s for scalar columns." +msgstr "" + +#: parser/parse_expr.c:4505 #, 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:4723 #, 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:4728 #, c-format msgid "DEFAULT expression must not contain column references" msgstr "DEFAULT გამოსახულება სვეტზე მიმართვებს არ უნდა შეიცავდეს" -#: parser/parse_expr.c:4687 +#: parser/parse_expr.c:4733 #, c-format msgid "DEFAULT expression must not return a set" msgstr "DEFAULT გამოსახულებამ სეტი არ უნდა დააბრუნოს" -#: parser/parse_expr.c:4721 +#: parser/parse_expr.c:4809 parser/parse_expr.c:4818 #, c-format msgid "cannot cast behavior expression of type %s to %s" msgstr "%s ქცევის გამოსახულების ტიპის %s-ში გადაყვანა შეუძლებელია" +#: parser/parse_expr.c:4812 +#, 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,26 +18744,16 @@ msgstr "სეტების დამბრუნებელი ფუნქ 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 +#: parser/parse_jsontable.c:93 #, 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 +#: parser/parse_jsontable.c:187 parser/parse_jsontable.c:201 #, c-format 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" @@ -18309,227 +18829,222 @@ msgstr "" msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "" -#: parser/parse_param.c:221 +#: parser/parse_param.c:222 #, c-format msgid "inconsistent types deduced for parameter $%d" msgstr "" -#: parser/parse_param.c:309 tcop/postgres.c:740 +#: parser/parse_param.c:310 tcop/postgres.c:734 #, c-format msgid "could not determine data type of parameter $%d" msgstr "პარამეტრისთვის $%d მონაცემის ტიპის განსაზღვრა შეუძლებელია" -#: parser/parse_relation.c:221 +#: parser/parse_relation.c:226 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "" -#: parser/parse_relation.c:265 +#: parser/parse_relation.c:273 #, c-format msgid "table reference %u is ambiguous" msgstr "" -#: parser/parse_relation.c:465 -#, c-format -msgid "table name \"%s\" specified more than once" -msgstr "" - -#: parser/parse_relation.c:494 parser/parse_relation.c:3633 parser/parse_relation.c:3642 +#: parser/parse_relation.c:502 parser/parse_relation.c:3739 parser/parse_relation.c:3748 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "" -#: parser/parse_relation.c:498 parser/parse_relation.c:3644 +#: parser/parse_relation.c:506 parser/parse_relation.c:3750 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "" -#: parser/parse_relation.c:500 +#: parser/parse_relation.c:508 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "" -#: parser/parse_relation.c:703 +#: parser/parse_relation.c:711 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "" -#: parser/parse_relation.c:712 +#: parser/parse_relation.c:724 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "სვეტის გენერაციის გამოსახულებაში სისტემურ სვეტს \"%s\" ვერ გამოიყენებთ" -#: parser/parse_relation.c:723 +#: parser/parse_relation.c:735 #, c-format msgid "cannot use system column \"%s\" in MERGE WHEN condition" msgstr "'MERGE WHEN' პირობაში სისტემურ სვეტს \"%s\" ვერ გამოიყენებთ" -#: parser/parse_relation.c:1236 parser/parse_relation.c:1691 parser/parse_relation.c:2384 +#: parser/parse_relation.c:1251 parser/parse_relation.c:1708 parser/parse_relation.c:2402 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "" -#: parser/parse_relation.c:1445 +#: parser/parse_relation.c:1462 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "" -#: parser/parse_relation.c:1447 +#: parser/parse_relation.c:1464 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "" -#: parser/parse_relation.c:1833 +#: parser/parse_relation.c:1850 #, c-format msgid "a column definition list is redundant for a function with OUT parameters" msgstr "" -#: parser/parse_relation.c:1839 +#: parser/parse_relation.c:1856 #, c-format msgid "a column definition list is redundant for a function returning a named composite type" msgstr "" -#: parser/parse_relation.c:1846 +#: parser/parse_relation.c:1863 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "" -#: parser/parse_relation.c:1857 +#: parser/parse_relation.c:1874 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "" -#: parser/parse_relation.c:1894 +#: parser/parse_relation.c:1911 #, c-format msgid "column definition lists can have at most %d entries" msgstr "სვეტის აღწერის სიებს მაქსიმუმ %d ჩანაწერი შეიძლება ჰქონდეს" -#: parser/parse_relation.c:1954 +#: parser/parse_relation.c:1971 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "" -#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 +#: parser/parse_relation.c:1998 parser/parse_relation.c:2083 #, c-format msgid "functions in FROM can return at most %d columns" msgstr "ფუნქციებს FROM-შ მაქსიმუმ %d სვეტის დაბრუნება შეუძლიათ" -#: parser/parse_relation.c:2096 +#: parser/parse_relation.c:2113 #, c-format msgid "%s function has %d columns available but %d columns specified" msgstr "ფუნქციას %s %d სვეტი ჰქონდა ხელმისაწვდომი, მითითებული კი %d" -#: parser/parse_relation.c:2177 +#: parser/parse_relation.c:2194 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "" -#: parser/parse_relation.c:2242 +#: parser/parse_relation.c:2259 #, c-format msgid "joins can have at most %d columns" msgstr "შეერთებებს მაქსიმუმ %d სვეტი შეიძლება, ჰქონდეთ" -#: parser/parse_relation.c:2267 +#: parser/parse_relation.c:2284 #, c-format msgid "join expression \"%s\" has %d columns available but %d columns specified" msgstr "" -#: parser/parse_relation.c:2357 +#: parser/parse_relation.c:2375 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH მოთხოვნას \"%s\" RETURNING პირობა არ გააჩნია" -#: parser/parse_relation.c:3635 +#: parser/parse_relation.c:3741 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "" -#: parser/parse_relation.c:3647 +#: parser/parse_relation.c:3753 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." msgstr "" -#: parser/parse_relation.c:3653 +#: parser/parse_relation.c:3759 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "" -#: parser/parse_relation.c:3693 +#: parser/parse_relation.c:3799 #, c-format msgid "There are columns named \"%s\", but they are in tables that cannot be referenced from this part of the query." msgstr "" -#: parser/parse_relation.c:3695 +#: parser/parse_relation.c:3801 #, c-format msgid "Try using a table-qualified name." msgstr "" -#: parser/parse_relation.c:3703 +#: parser/parse_relation.c:3809 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "" -#: parser/parse_relation.c:3706 +#: parser/parse_relation.c:3812 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." msgstr "" -#: parser/parse_relation.c:3708 +#: parser/parse_relation.c:3814 #, c-format msgid "To reference that column, you must use a table-qualified name." msgstr "" -#: parser/parse_relation.c:3728 +#: parser/parse_relation.c:3834 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "" -#: parser/parse_relation.c:3742 +#: parser/parse_relation.c:3848 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "" -#: parser/parse_target.c:480 parser/parse_target.c:795 +#: parser/parse_target.c:483 parser/parse_target.c:798 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "სისტემური სვეტზე (%s) მინიჭება შეუძლებელია" -#: parser/parse_target.c:508 +#: parser/parse_target.c:511 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "მასივის ელემენტების DEFAULT-ზე დაყენება შეუძლებელია" -#: parser/parse_target.c:513 +#: parser/parse_target.c:516 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "ქვეველის DEFAULT მნიშვნელობის დაყენების შეცდომა" -#: parser/parse_target.c:587 +#: parser/parse_target.c:590 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "" -#: parser/parse_target.c:779 +#: parser/parse_target.c:782 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "" -#: parser/parse_target.c:788 +#: parser/parse_target.c:791 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "" -#: parser/parse_target.c:877 +#: parser/parse_target.c:880 #, c-format msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "" -#: parser/parse_target.c:887 +#: parser/parse_target.c:890 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "" -#: parser/parse_target.c:1327 +#: parser/parse_target.c:1330 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "" @@ -18549,7 +19064,7 @@ msgstr "" msgid "type reference %s converted to %s" msgstr "ტიპის მიმართვა %s გადაყვანილია %s-ში" -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 utils/cache/typcache.c:452 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:478 utils/cache/typcache.c:533 #, c-format msgid "type \"%s\" is only a shell" msgstr "ტიპი \"%s\" მხოლოდ გარსია" @@ -18569,337 +19084,352 @@ msgstr "ტიპის მოდიფიკატორების მარ msgid "invalid type name \"%s\"" msgstr "ტიპის არასწორი სახელი: \"%s\"" -#: parser/parse_utilcmd.c:266 +#: parser/parse_utilcmd.c:265 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "" -#: parser/parse_utilcmd.c:586 +#: parser/parse_utilcmd.c:504 +#, c-format +msgid "cannot set logged status of a temporary sequence" +msgstr "დროებითი თანმიმდევრობის სტატუსის დადგენა შეუძლებელია" + +#: parser/parse_utilcmd.c:642 #, 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:747 parser/parse_utilcmd.c:765 parser/parse_utilcmd.c:873 parser/parse_utilcmd.c:906 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:689 +#: parser/parse_utilcmd.c:759 parser/parse_utilcmd.c:1077 +#, c-format +msgid "not-null constraints on partitioned tables cannot be NO INHERIT" +msgstr "არანულოვანი შეზღუდვები დაყოფილ ცხრილზე NO INHERIT ვერ იქნება" + +#: parser/parse_utilcmd.c:773 parser/parse_utilcmd.c:808 +#, c-format +msgid "conflicting NO INHERIT declarations for not-null constraints on column \"%s\"" +msgstr "ურთიერთგამომრიცხავი NO INHERIT აღწერები არანულოვანი შეზღუდვებისთვის სვეტზე \"%s\"" + +#: parser/parse_utilcmd.c:821 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:706 +#: parser/parse_utilcmd.c:838 #, c-format msgid "identity columns are not supported on typed tables" msgstr "ტიპიზირებულ ცხრილებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:710 +#: parser/parse_utilcmd.c:842 #, c-format msgid "identity columns are not supported on partitions" msgstr "დანაყოფებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:719 +#: parser/parse_utilcmd.c:851 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:749 +#: parser/parse_utilcmd.c:884 #, c-format msgid "generated columns are not supported on typed tables" msgstr "ტიპიზირებულ ცხრილებზე გენერირებული სვეტები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:753 +#: parser/parse_utilcmd.c:888 #, 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:915 parser/parse_utilcmd.c:1043 #, 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:924 parser/parse_utilcmd.c:1053 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "გარე ცხრილებზე უნიკალური შეზღუდვები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:825 +#: parser/parse_utilcmd.c:971 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:833 +#: parser/parse_utilcmd.c:979 #, 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:987 #, 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:1063 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "" -#: parser/parse_utilcmd.c:971 -#, c-format -msgid "LIKE is not supported for creating foreign tables" -msgstr "გარე ცხრილების შექმნისთვის LIKE მხარდაჭერილი არაა" - -#: parser/parse_utilcmd.c:984 +#: parser/parse_utilcmd.c:1149 #, 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:1896 parser/parse_utilcmd.c:2004 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "" -#: parser/parse_utilcmd.c:2217 +#: parser/parse_utilcmd.c:2398 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "'CREATE TABLE'-ში არსებულ ინდექსს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:2237 +#: parser/parse_utilcmd.c:2418 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "ინდექსი \"%s\" შეზღუდვასთან უკვე ასოცირებულია" -#: parser/parse_utilcmd.c:2258 +#: parser/parse_utilcmd.c:2444 #, 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:2445 parser/parse_utilcmd.c:2452 parser/parse_utilcmd.c:2459 parser/parse_utilcmd.c:2535 #, 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:2451 #, c-format msgid "index \"%s\" contains expressions" msgstr "ინდექსი \"%s\" გამოსახულებებს შეიცავს" -#: parser/parse_utilcmd.c:2272 +#: parser/parse_utilcmd.c:2458 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" ნაწილობრივი ინდექსია" -#: parser/parse_utilcmd.c:2284 +#: parser/parse_utilcmd.c:2470 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" გადადებადი ინდექსია" -#: parser/parse_utilcmd.c:2285 +#: parser/parse_utilcmd.c:2471 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" -#: parser/parse_utilcmd.c:2349 +#: parser/parse_utilcmd.c:2534 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "" -#: parser/parse_utilcmd.c:2506 +#: parser/parse_utilcmd.c:2726 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "" -#: parser/parse_utilcmd.c:2512 +#: parser/parse_utilcmd.c:2732 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "" -#: parser/parse_utilcmd.c:2846 +#: parser/parse_utilcmd.c:2777 +#, c-format +msgid "column \"%s\" in WITHOUT OVERLAPS is not a range or multirange type" +msgstr "" + +#: parser/parse_utilcmd.c:2805 +#, c-format +msgid "constraint using WITHOUT OVERLAPS needs at least two columns" +msgstr "" + +#: parser/parse_utilcmd.c:3102 #, 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:3174 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "" -#: parser/parse_utilcmd.c:2961 +#: parser/parse_utilcmd.c:3217 #, c-format msgid "rules on materialized views are not supported" msgstr "მატერიალიზებულ ხედებზე წესები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:3021 +#: parser/parse_utilcmd.c:3277 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "" -#: parser/parse_utilcmd.c:3093 +#: parser/parse_utilcmd.c:3349 #, 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:3367 parser/parse_utilcmd.c:3468 rewrite/rewriteHandler.c:546 rewrite/rewriteManip.c:1234 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "პირობითი UNION/INTERSECT/EXCEPT ოპერატორები განხორციელებული არაა" -#: parser/parse_utilcmd.c:3129 +#: parser/parse_utilcmd.c:3385 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECT წესში OLD-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3133 +#: parser/parse_utilcmd.c:3389 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECT წესში NEW-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3142 +#: parser/parse_utilcmd.c:3398 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERT წესში OLD-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3148 +#: parser/parse_utilcmd.c:3404 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETE წესში NEW-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3176 +#: parser/parse_utilcmd.c:3432 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "'WITH' მოთხოვნაში OLD-ზე მიმართვა შეუძლებელია" -#: parser/parse_utilcmd.c:3183 +#: parser/parse_utilcmd.c:3439 #, 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:3897 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "არასწორ ადგილას დასმული DEFERRABLE პირობა" -#: parser/parse_utilcmd.c:3816 parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:3902 parser/parse_utilcmd.c:3917 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "ერთზე მეტი DEFERRABLE/NOT DEFERRABLE პირობა დაშვებული არაა" -#: parser/parse_utilcmd.c:3826 +#: parser/parse_utilcmd.c:3912 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "არასწორ ადგილას დასმული NOT DEFERRABLE პირობა" -#: parser/parse_utilcmd.c:3847 +#: parser/parse_utilcmd.c:3933 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "არასწორ ადგილას დასმული INITIALLY DEFERRABLE პირობა" -#: parser/parse_utilcmd.c:3852 parser/parse_utilcmd.c:3878 +#: parser/parse_utilcmd.c:3938 parser/parse_utilcmd.c:3964 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "ერთზე მეტი INITIALLY IMMEDIATE/DEFERRED დაშვებული არაა" -#: parser/parse_utilcmd.c:3873 +#: parser/parse_utilcmd.c:3959 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "არასწორ ადგილას დასმული INITIALLY IMMEDIATE პირობა" -#: parser/parse_utilcmd.c:4066 +#: parser/parse_utilcmd.c:3976 +#, c-format +msgid "misplaced ENFORCED clause" +msgstr "არასწორ ადგილას დასმული ENFORCED პირობა" + +#: parser/parse_utilcmd.c:3981 parser/parse_utilcmd.c:3998 +#, c-format +msgid "multiple ENFORCED/NOT ENFORCED clauses not allowed" +msgstr "ერთზე მეტი ENFORCED/NOT ENFORCED პირობა დაშვებული არაა" + +#: parser/parse_utilcmd.c:3993 +#, c-format +msgid "misplaced NOT ENFORCED clause" +msgstr "არასწორ ადგილას დასმული NOT ENFORCED პირობა" + +#: parser/parse_utilcmd.c:4191 #, 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:4226 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\" დაყოფილი ცხრილი არაა" + +#: parser/parse_utilcmd.c:4233 #, c-format msgid "table \"%s\" is not partitioned" msgstr "ცხრილი \"%s\" დაყოფილი არაა" -#: parser/parse_utilcmd.c:4115 +#: parser/parse_utilcmd.c:4240 #, c-format msgid "index \"%s\" is not partitioned" msgstr "ინდექსი \"%s\" დაყოფილი არაა" -#: parser/parse_utilcmd.c:4155 +#: parser/parse_utilcmd.c:4280 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "" -#: parser/parse_utilcmd.c:4172 +#: parser/parse_utilcmd.c:4297 #, c-format msgid "invalid bound specification for a hash partition" msgstr "" -#: parser/parse_utilcmd.c:4178 partitioning/partbounds.c:4803 +#: parser/parse_utilcmd.c:4303 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:4310 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:4323 #, c-format msgid "invalid bound specification for a list partition" msgstr "" -#: parser/parse_utilcmd.c:4251 +#: parser/parse_utilcmd.c:4376 #, c-format msgid "invalid bound specification for a range partition" msgstr "" -#: parser/parse_utilcmd.c:4257 +#: parser/parse_utilcmd.c:4382 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "" -#: parser/parse_utilcmd.c:4261 +#: parser/parse_utilcmd.c:4386 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "" -#: parser/parse_utilcmd.c:4375 +#: parser/parse_utilcmd.c:4500 #, c-format msgid "cannot specify NULL in range bound" msgstr "დიაპაზონის საზღვრებში NULL-ის მითითება შეუძლებელია" -#: parser/parse_utilcmd.c:4424 +#: parser/parse_utilcmd.c:4549 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "ყოველი MAXVALUE საზღვის შემდეგ ყველა MAXVALUE უნდა იყოს" -#: parser/parse_utilcmd.c:4431 +#: parser/parse_utilcmd.c:4556 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "ყოველი MINVALUE საზღვის შემდეგ ყველა MINVALUE უნდა იყოს" -#: parser/parse_utilcmd.c:4474 +#: parser/parse_utilcmd.c:4599 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "" @@ -18912,12 +19442,12 @@ msgstr "" msgid "invalid Unicode escape character" msgstr "უნიკოდის სპეცკოდის არასწორი სიმბოლო" -#: parser/parser.c:347 scan.l:1391 +#: parser/parser.c:347 scan.l:1385 #, 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:702 utils/adt/varlena.c:6842 #, c-format msgid "invalid Unicode escape" msgstr "უნიკოდის არასწორი სპეცკოდი" @@ -18927,7 +19457,7 @@ msgstr "უნიკოდის არასწორი სპეცკოდ 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:663 scan.l:679 scan.l:695 utils/adt/varlena.c:6867 #, c-format msgid "invalid Unicode surrogate pair" msgstr "უნკოდის არასწორი სუროგატული წყვილი" @@ -18957,127 +19487,52 @@ msgstr "" 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 +19593,34 @@ msgstr "ამ პლატფორმაზე უზარმაზარი 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:1406 #, 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:1408 #, 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 "" @@ -19287,387 +19742,402 @@ msgstr "წარუმატებლად გამოძახებულ msgid "Failed system call was MapViewOfFileEx." msgstr "წარუმატებლად გამოძახებული სისტემური ფუნქცია: MapViewOfFileEx." -#: postmaster/autovacuum.c:686 +#: postmaster/autovacuum.c:693 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "ავტომომტვერსასრუტების დამხმარე პროცესის გაშვებას მეტისმეტად დიდი დრო მოუნდა. ის გაუქმდა" -#: postmaster/autovacuum.c:2199 +#: postmaster/autovacuum.c:2221 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "ავტომომტვერსასრუტება: წაიშლება მიტოვებული დროებითი ცხრილი \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2435 +#: postmaster/autovacuum.c:2457 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "ცხრილის ავტოდამტვერსასრუტება: \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2438 +#: postmaster/autovacuum.c:2460 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "ცხრილის ავტოანალიზი: \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2632 +#: postmaster/autovacuum.c:2654 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "" -#: postmaster/autovacuum.c:3250 +#: postmaster/autovacuum.c:3312 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "ავტომომტვერსასრუტება არ გაშვებულა კონფიგურაციის შეცდომის გამო" -#: postmaster/autovacuum.c:3251 +#: postmaster/autovacuum.c:3313 #, c-format msgid "Enable the \"track_counts\" option." msgstr "ჩართეთ \"track_counts\" პარამეტრი." +#: postmaster/autovacuum.c:3435 +#, c-format +msgid "\"autovacuum_max_workers\" (%d) should be less than or equal to \"autovacuum_worker_slots\" (%d)" +msgstr "" + +#: postmaster/autovacuum.c:3437 +#, c-format +msgid "The server will only start up to \"autovacuum_worker_slots\" (%d) autovacuum workers at a given time." +msgstr "" + #: postmaster/bgworker.c:260 #, c-format -msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" +msgid "inconsistent background worker state (\"max_worker_processes\"=%d, total slots=%d)" msgstr "" -#: postmaster/bgworker.c:651 +#: postmaster/bgworker.c:645 #, c-format msgid "background worker \"%s\": background workers without shared memory access are not supported" msgstr "" -#: postmaster/bgworker.c:662 +#: postmaster/bgworker.c:656 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "" -#: postmaster/bgworker.c:676 +#: postmaster/bgworker.c:670 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "ფონური დამხმარე პროცესი \"%s\": არასწორი გადატვირთვის ინტერვალი" -#: postmaster/bgworker.c:691 +#: postmaster/bgworker.c:685 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "" -#: postmaster/bgworker.c:715 tcop/postgres.c:3285 +#: postmaster/bgworker.c:709 tcop/postgres.c:3345 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "" -#: postmaster/bgworker.c:888 +#: postmaster/bgworker.c:868 postmaster/bgworker.c:902 +#, c-format +msgid "database connection requirement not indicated during registration" +msgstr "" + +#: postmaster/bgworker.c:878 postmaster/bgworker.c:912 +#, c-format +msgid "invalid processing mode in background worker" +msgstr "არასწორი დამუშავების რეჟიმი ფონურ დამხმარე პროცესში" + +#: postmaster/bgworker.c:965 #, c-format msgid "background worker \"%s\": must be registered in \"shared_preload_libraries\"" msgstr "ფონური დამხმარე პროცესი \"%s\": \"shared_preload_libraries\"-ში დარეგისტრირებული უნდა იყოს" -#: postmaster/bgworker.c:911 +#: postmaster/bgworker.c:988 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "ფონური დახმამრე პროცესი \"%s\": გაფრთხილების მოთხოვნა მხოლოდ დინამიკურ ფონურ დამხმარე პროცესებს შეუძლიათ" -#: postmaster/bgworker.c:926 +#: postmaster/bgworker.c:1003 #, c-format msgid "too many background workers" msgstr "მეტისმეტად ბევრი ფონური დამხმარე პროცესი" -#: postmaster/bgworker.c:927 +#: postmaster/bgworker.c:1004 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "" msgstr[1] "" -#: postmaster/bgworker.c:931 +#: postmaster/bgworker.c:1008 postmaster/checkpointer.c:459 #, 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 +#: postmaster/checkpointer.c:455 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "საკონტროლო წერტილები მეტისმეტად ხშირად ხდება (%d წამიანი შუალედით)" msgstr[1] "საკონტროლო წერტილები მეტისმეტად ხშირად ხდება (%d წამიანი შუალედით)" -#: postmaster/checkpointer.c:445 -#, c-format -msgid "Consider increasing the configuration parameter \"%s\"." -msgstr "გაითვალისწინეთ, რომ შეიძლება კონფიგურაციის პარამეტრის \"%s\" გაზრდა გჭირდებათ." - -#: postmaster/checkpointer.c:1067 +#: postmaster/checkpointer.c:1125 #, c-format msgid "checkpoint request failed" msgstr "საკონტროლო წერტილის მოთხოვნის შეცდომა" -#: postmaster/checkpointer.c:1068 +#: postmaster/checkpointer.c:1126 #, c-format msgid "Consult recent messages in the server log for details." msgstr "დეტალებისთვის იხილეთ სერვერის ჟურნალის უახლესი შეტყობინებები." -#: postmaster/launch_backend.c:369 +#: postmaster/launch_backend.c:395 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "სერვერის პროცესის (\"%s\") შესრულების შეცდომა: %m" -#: postmaster/launch_backend.c:422 +#: postmaster/launch_backend.c:449 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "უკანაბოლოს პარამეტრის ფაილის მიბმის შექმნის შეცდომა. შეცდომის კოდი: %lu" -#: postmaster/launch_backend.c:430 +#: postmaster/launch_backend.c:457 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "უკანაბოლოს პარამეტრის მეხსიერების მიმაგრების პრობლემა: შეცდომის კოდი %lu" -#: postmaster/launch_backend.c:447 +#: postmaster/launch_backend.c:474 #, c-format msgid "subprocess command line too long" msgstr "ქვეპროექტების ბრძანების სტრიქონი ძალიან გრძელია" -#: postmaster/launch_backend.c:465 +#: postmaster/launch_backend.c:492 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "გამოძახების შეცდომა: CreateProcess(): %m (შეცდომის კოდი %lu)" -#: postmaster/launch_backend.c:492 +#: postmaster/launch_backend.c:521 #, 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:525 #, 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:547 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "გაზიარებული მეხსიერების გამოყოფის მეტისმეტად ბევრი ცდის შემდეგ შევეშვი ცდას" -#: postmaster/launch_backend.c:519 +#: postmaster/launch_backend.c:548 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "ეს შეიძლება გამოწვეული იყოს ASLR ან ანტივირუსული პროგრამული უზრუნველყოფის მიერ." -#: postmaster/launch_backend.c:817 +#: postmaster/launch_backend.c:854 #, 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:886 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "მემკვიდრეობით მიღებული სოკეტის შექმნა შეუძლებელია: შეცდომის კოდი %d\n" -#: postmaster/launch_backend.c:878 +#: postmaster/launch_backend.c:915 #, 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:921 #, 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:932 #, 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:944 #, c-format msgid "could not remove file \"%s\": %m\n" msgstr "ფაილის წაშლის შეცდომა \"%s\": %m\n" -#: postmaster/launch_backend.c:923 +#: postmaster/launch_backend.c:960 #, 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:979 #, 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:986 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "უკანაბოლოს პარამეტრის ცვლადების დამმუშავებლის დახურვა შეუძლებელია. შეცდომის კოდი: %lu\n" -#: postmaster/pgarch.c:428 +#: postmaster/pgarch.c:429 #, c-format msgid "\"archive_mode\" enabled, yet archiving is not configured" msgstr "\"archive_mode\" ჩართულია, მაგრამ დაარქივება ჯერ მორგებული არაა" -#: postmaster/pgarch.c:452 +#: postmaster/pgarch.c:453 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "წაიშალა მიტოვებული არქივის სტატუსის ფაილი \"%s\"" -#: postmaster/pgarch.c:462 +#: postmaster/pgarch.c:463 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "" -#: postmaster/pgarch.c:498 +#: postmaster/pgarch.c:499 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "" -#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 +#: postmaster/pgarch.c:885 postmaster/pgarch.c:924 #, c-format msgid "both \"archive_command\" and \"archive_library\" set" msgstr "დაყენებულია ორივე, \"archive_command\" და \"archive_library\"" -#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 +#: postmaster/pgarch.c:886 postmaster/pgarch.c:925 #, c-format msgid "Only one of \"archive_command\", \"archive_library\" may be set." msgstr "\"archive_command\"-დან და \"archive_library\"-დან, მხოლოდ, ერთ-ერთი შეგიძლიათ, დააყენოთ." -#: postmaster/pgarch.c:897 +#: postmaster/pgarch.c:903 #, c-format msgid "restarting archiver process because value of \"archive_library\" was changed" msgstr "" -#: postmaster/pgarch.c:934 +#: postmaster/pgarch.c:940 #, c-format msgid "archive modules have to define the symbol %s" msgstr "" -#: postmaster/pgarch.c:940 +#: postmaster/pgarch.c:946 #, c-format msgid "archive modules must register an archive callback" msgstr "" -#: postmaster/postmaster.c:661 +#: postmaster/postmaster.c:678 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: -f პარამეტრის არასწორი არგუმენტი: \"%s\"\n" -#: postmaster/postmaster.c:734 +#: postmaster/postmaster.c:751 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: -t პარამეტრის არასწორი არგუმენტი: \"%s\"\n" -#: postmaster/postmaster.c:757 +#: postmaster/postmaster.c:774 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: არასწორი არგუმენტი: \"%s\"\n" -#: postmaster/postmaster.c:825 +#: postmaster/postmaster.c:842 #, c-format msgid "%s: \"superuser_reserved_connections\" (%d) plus \"reserved_connections\" (%d) must be less than \"max_connections\" (%d)\n" msgstr "" -#: postmaster/postmaster.c:833 +#: postmaster/postmaster.c:850 #, c-format msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" msgstr "" -#: postmaster/postmaster.c:836 +#: postmaster/postmaster.c:853 #, c-format msgid "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be \"replica\" or \"logical\"" msgstr "" -#: postmaster/postmaster.c:839 +#: postmaster/postmaster.c:856 #, c-format msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" msgstr "" -#: postmaster/postmaster.c:847 +#: postmaster/postmaster.c:864 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "" -#: postmaster/postmaster.c:1004 +#: postmaster/postmaster.c:1025 #, c-format msgid "could not create I/O completion port for child queue" msgstr "" -#: postmaster/postmaster.c:1069 +#: postmaster/postmaster.c:1091 #, c-format msgid "ending log output to stderr" msgstr "ჟურნალის stderr-ზე გამოტანის დასრულება" -#: postmaster/postmaster.c:1070 +#: postmaster/postmaster.c:1092 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "" -#: postmaster/postmaster.c:1081 +#: postmaster/postmaster.c:1103 #, c-format msgid "starting %s" msgstr "\"%s\"-ის გაშვება" -#: postmaster/postmaster.c:1143 +#: postmaster/postmaster.c:1165 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "მოსმენის სოკეტის შექმნა \"%s\"-სთვის შეუძლებელია" -#: postmaster/postmaster.c:1149 +#: postmaster/postmaster.c:1171 #, c-format msgid "could not create any TCP/IP sockets" msgstr "\"TCP/IP\" სოკეტების შექმნის შეცდომა" -#: postmaster/postmaster.c:1181 +#: postmaster/postmaster.c:1203 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister()-ის შეცდომა: შეცდომის კოდი %ld" -#: postmaster/postmaster.c:1234 +#: postmaster/postmaster.c:1256 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "შეცდომა Unix სოკეტის შექმნისას საქაღალდეში \"%s\"" -#: postmaster/postmaster.c:1240 +#: postmaster/postmaster.c:1262 #, c-format msgid "could not create any Unix-domain sockets" msgstr "\"Unix-domain\" სოკეტების შექმნის შეცდომა" -#: postmaster/postmaster.c:1251 +#: postmaster/postmaster.c:1273 #, c-format msgid "no socket created for listening" msgstr "მოსასმენი სოკეტი არ შექმნილა" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1304 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %m\n" msgstr "%s: გარე PID ფაილის \"%s\" წვდომების შეცვლა შეუძლებელია: %m\n" -#: postmaster/postmaster.c:1286 +#: postmaster/postmaster.c:1308 #, 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:1314 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1336 utils/init/postinit.c:225 #, c-format msgid "could not load %s" msgstr "%s-ის ჩატვირთვა შეუძლებელია" -#: postmaster/postmaster.c:1340 +#: postmaster/postmaster.c:1364 #, c-format msgid "postmaster became multithreaded during startup" msgstr "პროცესი postmaster გაშვებისას მრავალნაკადიანი გახდა" -#: postmaster/postmaster.c:1341 +#: postmaster/postmaster.c:1365 postmaster/postmaster.c:3661 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "დააყენეთ LC_ALL გარემოს ცვლადი სწორ ლოკალზე." -#: postmaster/postmaster.c:1440 +#: postmaster/postmaster.c:1468 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: ჩემი საკუთარი გამშვები ფაილის ბილიკის მოძებნა შეუძლებელია" -#: postmaster/postmaster.c:1447 +#: postmaster/postmaster.c:1475 #, 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:1498 utils/misc/tzparser.c:342 #, 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:1525 #, c-format msgid "" "%s: could not find the database system\n" @@ -19676,324 +20146,320 @@ msgid "" msgstr "" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1787 +#: postmaster/postmaster.c:1762 #, c-format msgid "issuing %s to recalcitrant children" msgstr "" -#: postmaster/postmaster.c:1809 +#: postmaster/postmaster.c:1784 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "" -#: postmaster/postmaster.c:1872 -#, c-format -msgid "wrong key in cancel request for process %d" -msgstr "არასწორი გასაღები გაუქმების მოთხოვნაში პროცესისთვის %d" - -#: postmaster/postmaster.c:1884 -#, c-format -msgid "PID %d in cancel request did not match any process" -msgstr "PID %d, მოთხოვნილი გაუქმების მოთხოვნაში, არც ერთ პროცესს არ ემთხვევა" - -#: postmaster/postmaster.c:2105 +#: postmaster/postmaster.c:2004 #, 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:2012 postmaster/postmaster.c:2016 #, c-format msgid "%s was not reloaded" msgstr "%s არ გადატვირთულა" -#: postmaster/postmaster.c:2147 +#: postmaster/postmaster.c:2026 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL კონფიგურაცია არ იყო გადატვირთული" -#: postmaster/postmaster.c:2233 +#: postmaster/postmaster.c:2112 #, c-format msgid "received smart shutdown request" msgstr "მიღებულია ჭკვიანი გამორთვის მოთხოვნა" -#: postmaster/postmaster.c:2274 +#: postmaster/postmaster.c:2153 #, c-format msgid "received fast shutdown request" msgstr "მიღებულია სწრაფი გამორთვის მოთხოვნა" -#: postmaster/postmaster.c:2292 +#: postmaster/postmaster.c:2171 #, c-format msgid "aborting any active transactions" msgstr "ყველა აქტიური ტრანზაქციის შეწყვეტა" -#: postmaster/postmaster.c:2316 +#: postmaster/postmaster.c:2195 #, c-format msgid "received immediate shutdown request" msgstr "მიღებულია დაუყოვნებლივი გამორთვის მოთხოვნა" -#: postmaster/postmaster.c:2388 +#: postmaster/postmaster.c:2270 #, c-format msgid "shutdown at recovery target" msgstr "გამორთვა აღდგენის სამიზნეზე" -#: postmaster/postmaster.c:2406 postmaster/postmaster.c:2442 +#: postmaster/postmaster.c:2288 postmaster/postmaster.c:2324 msgid "startup process" msgstr "გაშვების პროცესი" -#: postmaster/postmaster.c:2409 +#: postmaster/postmaster.c:2291 #, c-format msgid "aborting startup due to startup process failure" msgstr "გაშვების გაუქმება გაშვების პროცესის შეცდომის გამო" -#: postmaster/postmaster.c:2484 +#: postmaster/postmaster.c:2347 #, c-format msgid "database system is ready to accept connections" msgstr "მონაცემთა ბაზის სისტემა მზადაა შეერთებების მისაღებად" -#: postmaster/postmaster.c:2505 +#: postmaster/postmaster.c:2369 msgid "background writer process" msgstr "ფონური ჩამწერი პროცესი" -#: postmaster/postmaster.c:2552 +#: postmaster/postmaster.c:2402 msgid "checkpointer process" msgstr "საკონტროლო წერტილის პროცესი" -#: postmaster/postmaster.c:2568 +#: postmaster/postmaster.c:2419 msgid "WAL writer process" msgstr "WAL-ის ჩამწერი პროცესი" -#: postmaster/postmaster.c:2583 +#: postmaster/postmaster.c:2435 msgid "WAL receiver process" msgstr "WAL-ის მიმღები პროცესი" -#: postmaster/postmaster.c:2597 +#: postmaster/postmaster.c:2450 msgid "WAL summarizer process" msgstr "WAL-ის შეჯამების პროცესი" -#: postmaster/postmaster.c:2612 +#: postmaster/postmaster.c:2466 msgid "autovacuum launcher process" msgstr "ავტომომტვერსასრუტების გამშვები პროცესი" -#: postmaster/postmaster.c:2630 +#: postmaster/postmaster.c:2482 msgid "archiver process" msgstr "არქივის პროცესი" -#: postmaster/postmaster.c:2643 +#: postmaster/postmaster.c:2497 msgid "system logger process" msgstr "სისტემური ჟურნალის პროცესი" -#: postmaster/postmaster.c:2660 +#: postmaster/postmaster.c:2515 msgid "slot sync worker process" msgstr "სლოტის სინქრონიზაციის დამხმარე პროცესი" -#: postmaster/postmaster.c:2716 +#: postmaster/postmaster.c:2523 utils/init/miscinit.c:297 +msgid "io worker" +msgstr "შეტანა/გამოტანის დამხმარე პროცესი" + +#: postmaster/postmaster.c:2545 postmaster/postmaster.c:2547 +msgid "untracked child process" +msgstr "შვილი პროცესი ტრეკინგის გარეშე" + +#: postmaster/postmaster.c:2580 #, c-format msgid "background worker \"%s\"" msgstr "ფონური დამხმარე პროცესი \"%s\"" -#: postmaster/postmaster.c:2795 postmaster/postmaster.c:2815 postmaster/postmaster.c:2822 postmaster/postmaster.c:2840 -msgid "server process" -msgstr "სერვერის პროცესი" - -#: postmaster/postmaster.c:2894 +#: postmaster/postmaster.c:2797 #, 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:2830 #, 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:2832 postmaster/postmaster.c:2844 postmaster/postmaster.c:2854 postmaster/postmaster.c:2865 #, 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:2841 #, 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:2851 #, 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:2863 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) დასრულდა უცნობი სტატუსით %d" -#: postmaster/postmaster.c:3330 +#: postmaster/postmaster.c:3154 #, c-format msgid "abnormal database system shutdown" msgstr "მონაცემთა ბაზის სისტემის არანორმალური გამორთვა" -#: postmaster/postmaster.c:3356 +#: postmaster/postmaster.c:3180 #, c-format msgid "shutting down due to startup process failure" msgstr "მუშაობის დასრულება გამშვები პროცესის შეცდომის გამო" -#: postmaster/postmaster.c:3362 +#: postmaster/postmaster.c:3186 #, c-format msgid "shutting down because \"restart_after_crash\" is off" msgstr "მუშაობა დასრულდება. რადგან \"restart_after_crash\" გამორთულია" -#: postmaster/postmaster.c:3374 +#: postmaster/postmaster.c:3198 #, c-format msgid "all server processes terminated; reinitializing" msgstr "სერვერის ყველა პროცესი დასრულდა; მიმდინარეობს რეინიციალიზაცია" -#: postmaster/postmaster.c:3573 postmaster/postmaster.c:3983 postmaster/postmaster.c:4372 -#, c-format -msgid "could not generate random cancel key" -msgstr "შემთხვევითი გაუქმების გასაღების გენერაცია შეუძლებელია" - -#: postmaster/postmaster.c:3606 +#: postmaster/postmaster.c:3591 #, c-format msgid "could not fork new process for connection: %m" msgstr "ახალი პროცესის ფორკის შეცდომა შეერთებისთვის: %m" -#: postmaster/postmaster.c:3648 +#: postmaster/postmaster.c:3626 msgid "could not fork new process for connection: " msgstr "ახალი პროცესის ფორკის შეცდომა შეერთებისთვის: " -#: postmaster/postmaster.c:3682 +#: postmaster/postmaster.c:3660 #, c-format -msgid "Please report this to <%s>." -msgstr "გთხოვთ, შეატყობინოთ <%s>." +msgid "postmaster became multithreaded" +msgstr "postmaster მრავალნაკადიანი გახდა" -#: postmaster/postmaster.c:3750 +#: postmaster/postmaster.c:3738 #, c-format msgid "database system is ready to accept read-only connections" msgstr "მონაცემთა ბაზის სისტემა მზადაა მხოლოდ-კითხვადი შეერთებების მისაღებად" -#: postmaster/postmaster.c:3933 -#, c-format -msgid "could not fork \"%s\" process: %m" -msgstr "\"%s\" პროცესის ფორკის შეცდომა: %m" - -#: postmaster/postmaster.c:4171 postmaster/postmaster.c:4205 +#: postmaster/postmaster.c:3839 #, c-format -msgid "database connection requirement not indicated during registration" -msgstr "" +msgid "WAL was shut down unexpectedly" +msgstr "WAL მოულოდნელად გაითიშა" -#: postmaster/postmaster.c:4181 postmaster/postmaster.c:4215 +#: postmaster/postmaster.c:3964 #, c-format -msgid "invalid processing mode in background worker" -msgstr "არასწორი დამუშავების რეჟიმი ფონურ დამხმარე პროცესში" +msgid "no slot available for new autovacuum worker process" +msgstr "ავტომომტვერსასრუტების ფონური დამხმარე პროცესისთვის სლოტი ხელმისაწვდომი არაა" -#: postmaster/postmaster.c:4275 +#: postmaster/postmaster.c:3979 #, c-format -msgid "could not fork background worker process: %m" -msgstr "ფონური დამხმარე პროცესის ფორკის შეცდომა: %m" +msgid "could not fork \"%s\" process: %m" +msgstr "\"%s\" პროცესის ფორკის შეცდომა: %m" -#: postmaster/postmaster.c:4358 +#: postmaster/postmaster.c:4138 #, c-format msgid "no slot available for new background worker process" msgstr "ახალი ფონური დამხმარე პროცესისთვის სლოტი ხელმისაწვდომი არაა" -#: postmaster/postmaster.c:4621 +#: postmaster/postmaster.c:4156 +#, c-format +msgid "could not fork background worker process: %m" +msgstr "ფონური დამხმარე პროცესის ფორკის შეცდომა: %m" + +#: postmaster/postmaster.c:4489 #, c-format msgid "could not read exit code for process\n" msgstr "პროცესის გამოსვლის კოდის წაკითხვის შეცდომა\n" -#: postmaster/postmaster.c:4663 +#: postmaster/postmaster.c:4531 #, c-format msgid "could not post child completion status\n" msgstr "შვილი პროცესის დასრულების სტატუსის წაკითხვის შეცდომა\n" -#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 +#: postmaster/syslogger.c:527 postmaster/syslogger.c:1172 #, c-format msgid "could not read from logger pipe: %m" msgstr "ჟურნალის ფაიფიდან წაკითხვა შეუძლებელია: %m" -#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 +#: postmaster/syslogger.c:626 postmaster/syslogger.c:640 #, c-format msgid "could not create pipe for syslog: %m" msgstr "სისტემური ჟურნალისთვის ფაიფის შექმნა შეუძლებელია: %m" -#: postmaster/syslogger.c:712 +#: postmaster/syslogger.c:711 #, c-format msgid "could not fork system logger: %m" msgstr "სისტემის ჟურნალის ფორკის შეცდომა: %m" -#: postmaster/syslogger.c:731 +#: postmaster/syslogger.c:730 #, c-format msgid "redirecting log output to logging collector process" msgstr "ჟურნალის გამოტანის გადამისამართება ჟურნალის შემგროვებლის პროცესისკენ" -#: postmaster/syslogger.c:732 +#: postmaster/syslogger.c:731 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "" -#: postmaster/syslogger.c:740 +#: postmaster/syslogger.c:739 #, c-format msgid "could not redirect stdout: %m" msgstr "stdout-ის გადამისამართების შეცდომა: %m" -#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 +#: postmaster/syslogger.c:744 postmaster/syslogger.c:761 #, c-format msgid "could not redirect stderr: %m" msgstr "stderr-ის გადამისამართების შეცდომა: %m" -#: postmaster/syslogger.c:1128 +#: postmaster/syslogger.c:1127 #, c-format msgid "could not write to log file: %m\n" msgstr "ჟურნალის ფაილში ჩაწერის შეცდომა: %m\n" -#: postmaster/syslogger.c:1246 +#: postmaster/syslogger.c:1247 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ჟურნალის ფაილის გახსნის შეცდომა \"%s\": %m" -#: postmaster/syslogger.c:1336 +#: postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "" -#: postmaster/walsummarizer.c:384 +#: postmaster/walsummarizer.c:743 #, 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:744 #, c-format -msgid "could not find a valid record after %X/%X" +msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory." +msgstr "" + +#: postmaster/walsummarizer.c:758 +#, 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:763 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "" + +#: postmaster/walsummarizer.c:1007 +#, c-format +msgid "could not find a valid record after %X/%X" msgstr "%X/%X -ის შემდეგ სწორი ჩანაწერი არ არსებობს" -#: postmaster/walsummarizer.c:930 +#: postmaster/walsummarizer.c:1052 #, 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:1058 #, 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 +#: regex/regc_pg_locale.c:241 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "" @@ -20003,145 +20469,145 @@ msgstr "" msgid "nondeterministic collations are not supported for regular expressions" msgstr "" -#: repl_gram.y:318 repl_gram.y:359 +#: repl_gram.y:322 repl_gram.y:363 #, c-format msgid "invalid timeline %u" msgstr "დროის არასწორი ხაზი: %u" -#: repl_scanner.l:154 +#: repl_scanner.l:160 msgid "invalid streaming start location" msgstr "ნაკადის დასაწყისის არასწორი მდებარეობა" -#: replication/libpqwalreceiver/libpqwalreceiver.c:267 replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:230 replication/libpqwalreceiver/libpqwalreceiver.c:322 #, c-format msgid "password is required" msgstr "პაროლი სავალდებულოა" -#: replication/libpqwalreceiver/libpqwalreceiver.c:268 +#: replication/libpqwalreceiver/libpqwalreceiver.c:231 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:269 +#: replication/libpqwalreceiver/libpqwalreceiver.c:232 #, c-format msgid "Target server's authentication method must be changed, or set password_required=false in the subscription parameters." msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:285 +#: replication/libpqwalreceiver/libpqwalreceiver.c:249 #, c-format msgid "could not clear search path: %s" msgstr "ძებნის ბილიკების გასუფთავების შეცდომა: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:331 replication/libpqwalreceiver/libpqwalreceiver.c:517 +#: replication/libpqwalreceiver/libpqwalreceiver.c:295 replication/libpqwalreceiver/libpqwalreceiver.c:483 #, c-format msgid "invalid connection string syntax: %s" msgstr "შეერთების სტრიქონის არასწორი სინტაქსი: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:359 +#: replication/libpqwalreceiver/libpqwalreceiver.c:323 #, c-format msgid "Non-superusers must provide a password in the connection string." msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:386 +#: replication/libpqwalreceiver/libpqwalreceiver.c:350 #, c-format msgid "could not parse connection string: %s" msgstr "შეერთების სტრიქონის დამუშავების შეცდომა: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:459 +#: replication/libpqwalreceiver/libpqwalreceiver.c:425 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:476 replication/libpqwalreceiver/libpqwalreceiver.c:763 +#: replication/libpqwalreceiver/libpqwalreceiver.c:442 replication/libpqwalreceiver/libpqwalreceiver.c:737 #, c-format msgid "invalid response from primary server" msgstr "ძირითადი სერვერის არასწორი პასუხი" -#: replication/libpqwalreceiver/libpqwalreceiver.c:477 +#: replication/libpqwalreceiver/libpqwalreceiver.c:443 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:606 replication/libpqwalreceiver/libpqwalreceiver.c:613 replication/libpqwalreceiver/libpqwalreceiver.c:643 +#: replication/libpqwalreceiver/libpqwalreceiver.c:572 replication/libpqwalreceiver/libpqwalreceiver.c:579 replication/libpqwalreceiver/libpqwalreceiver.c:611 #, c-format msgid "could not start WAL streaming: %s" msgstr "wal ნაკადის დაწყების შეცდომა: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:667 +#: replication/libpqwalreceiver/libpqwalreceiver.c:635 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:690 +#: replication/libpqwalreceiver/libpqwalreceiver.c:659 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:705 +#: replication/libpqwalreceiver/libpqwalreceiver.c:675 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:715 +#: replication/libpqwalreceiver/libpqwalreceiver.c:686 #, c-format msgid "error reading result of streaming command: %s" msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:724 replication/libpqwalreceiver/libpqwalreceiver.c:957 +#: replication/libpqwalreceiver/libpqwalreceiver.c:696 replication/libpqwalreceiver/libpqwalreceiver.c:832 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "მოულოდნელი შედეგი CommandComplete-ის შემდეგ: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:751 +#: replication/libpqwalreceiver/libpqwalreceiver.c:725 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:764 +#: replication/libpqwalreceiver/libpqwalreceiver.c:738 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "" -#: replication/libpqwalreceiver/libpqwalreceiver.c:920 replication/libpqwalreceiver/libpqwalreceiver.c:973 replication/libpqwalreceiver/libpqwalreceiver.c:980 +#: replication/libpqwalreceiver/libpqwalreceiver.c:793 replication/libpqwalreceiver/libpqwalreceiver.c:848 replication/libpqwalreceiver/libpqwalreceiver.c:855 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "\"WAL\" ნაკადიდან მონაცემების მიღების შეცდომა: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 +#: replication/libpqwalreceiver/libpqwalreceiver.c:875 #, c-format msgid "could not send data to WAL stream: %s" msgstr "'WAL' ნაკადისთვის მონაცემების გაგზავნა შეუძლებელია: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 +#: replication/libpqwalreceiver/libpqwalreceiver.c:978 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "რეპლიკაციის სლოტის \"%s\" შექმნის შეცდომა: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1030 #, c-format msgid "could not alter replication slot \"%s\": %s" msgstr "რეპლიკაციის სლოტის \"%s\" შეცვლა შეუძლებელია: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1064 #, c-format msgid "invalid query response" msgstr "მოთხოვნის არასწორი პასუხი" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1065 #, c-format msgid "Expected %d fields, got %d fields." msgstr "მოველოდი %d ველს. მივიღე %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1135 #, c-format msgid "the query interface requires a database connection" msgstr "მოთხოვნის ინტერფეისს ბაზასთან მიერთება სჭირდება" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1169 msgid "empty query" msgstr "ცარიელი მოთხოვნა" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 msgid "unexpected pipeline mode" msgstr "არხის მოულოდნელი რეჟიმი" @@ -20179,37 +20645,146 @@ msgstr "გაზიარებული-მეხსიერების მ msgid "logical replication apply worker will serialize the remaining changes of remote transaction %u to a file" msgstr "" +#: replication/logical/conflict.c:126 +#, c-format +msgid "conflict detected on relation \"%s.%s\": conflict=%s" +msgstr "აღმოჩენილია კონფლიქტი ურთიერთობაზე \"%s.%s\": კონფლიქტი=%s" + +#: replication/logical/conflict.c:223 +#, c-format +msgid "Key already exists in unique index \"%s\", modified locally in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:227 +#, c-format +msgid "Key already exists in unique index \"%s\", modified by origin \"%s\" in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:239 +#, c-format +msgid "Key already exists in unique index \"%s\", modified by a non-existent origin in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:244 +#, c-format +msgid "Key already exists in unique index \"%s\", modified in transaction %u." +msgstr "" + +#: replication/logical/conflict.c:251 +#, c-format +msgid "Updating the row that was modified locally in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:254 +#, c-format +msgid "Updating the row that was modified by a different origin \"%s\" in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:259 +#, c-format +msgid "Updating the row that was modified by a non-existent origin in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:265 +msgid "Could not find the row to be updated." +msgstr "გასაახლებელი მწკრივის აღმოჩენა შეუძლებელია." + +#: replication/logical/conflict.c:270 +#, c-format +msgid "Deleting the row that was modified locally in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:273 +#, c-format +msgid "Deleting the row that was modified by a different origin \"%s\" in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:278 +#, c-format +msgid "Deleting the row that was modified by a non-existent origin in transaction %u at %s." +msgstr "" + +#: replication/logical/conflict.c:284 +msgid "Could not find the row to be deleted." +msgstr "წასაშლელი მწკრივის აღმოჩენა შეუძლებელია." + +#: replication/logical/conflict.c:347 +#, c-format +msgid "Key %s" +msgstr "" + +#: replication/logical/conflict.c:364 +#, c-format +msgid "existing local tuple %s" +msgstr "" + +#: replication/logical/conflict.c:369 +#, c-format +msgid "Existing local tuple %s" +msgstr "" + +#: replication/logical/conflict.c:396 +#, c-format +msgid "remote tuple %s" +msgstr "დაშორებული კორტეჟი %s" + +#: replication/logical/conflict.c:400 +#, c-format +msgid "Remote tuple %s" +msgstr "დაშორებული კორტეჟი %s" + +#: replication/logical/conflict.c:434 +#, c-format +msgid "replica identity %s" +msgstr "რეპლიკის იდენტიფიკატორი %s" + +#: replication/logical/conflict.c:435 +#, c-format +msgid "replica identity full %s" +msgstr "რეპლიკის იდენტიფიკატორი სრული %s" + +#: replication/logical/conflict.c:440 +#, c-format +msgid "Replica identity %s" +msgstr "რეპლიკის იდენტიფიკატორი %s" + +#: replication/logical/conflict.c:441 +#, c-format +msgid "Replica identity full %s" +msgstr "რეპლიკის იდენტიფიკატორი სრული %s" + #: replication/logical/decode.c:177 replication/logical/logical.c:141 #, c-format msgid "logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary" msgstr "ლოგიკურ გაშიფვრას უქმეზე ძირითად სერვერზე \"wal_level\" >= \"logical\" ესაჭიროება" -#: replication/logical/launcher.c:334 +#: replication/logical/launcher.c:331 #, c-format -msgid "cannot start logical replication workers when max_replication_slots = 0" -msgstr "" +msgid "cannot start logical replication workers when \"max_active_replication_origins\"=0" +msgstr "შეუძლებელია ლოგიკური რეპლიკაციის დამხმარე პროცესების გაშვება, როცა \"max_active_replication_origins\"=0" -#: replication/logical/launcher.c:427 +#: replication/logical/launcher.c:424 #, c-format 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 +#. translator: %s is a GUC variable name +#: replication/logical/launcher.c:425 replication/logical/launcher.c:511 replication/slot.c:1556 replication/slot.c:1579 storage/lmgr/lock.c:1039 storage/lmgr/lock.c:1077 storage/lmgr/lock.c:2966 storage/lmgr/lock.c:4371 storage/lmgr/lock.c:4436 storage/lmgr/lock.c:4786 storage/lmgr/predicate.c:2479 storage/lmgr/predicate.c:2494 storage/lmgr/predicate.c:3891 #, c-format msgid "You might need to increase \"%s\"." msgstr "როგორც ჩანს, გჭირდებათ, \"%s\" გაზარდოთ." -#: replication/logical/launcher.c:513 +#: replication/logical/launcher.c:510 #, c-format msgid "out of background worker slots" msgstr "ფონური დამხმარე პროცესების სლოტები არასაკმარისია" -#: replication/logical/launcher.c:720 +#: replication/logical/launcher.c:717 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "" -#: replication/logical/launcher.c:729 +#: replication/logical/launcher.c:726 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "" @@ -20224,82 +20799,67 @@ msgstr "ლოგიკურ გაშიფვრას \"wal_level\" >= \"log 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:828 replication/slot.c:863 #, 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 -#, c-format -msgid "can no longer get changes from replication slot \"%s\"" -msgstr "რეპლიკაციის სლოტიდან \"%s\" ცვლილებების მიღება უკვე შეუძლებელია" - -#: replication/logical/logical.c:555 -#, c-format -msgid "This slot has been invalidated because it exceeded the maximum reserved size." -msgstr "" - -#: replication/logical/logical.c:562 -#, c-format -msgid "This slot has been invalidated because it was conflicting with recovery." -msgstr "" - -#: replication/logical/logical.c:627 +#: replication/logical/logical.c:609 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "იწყება ლოგიკური გაშიფვრა სლოტისთვის \"%s\"" -#: replication/logical/logical.c:629 +#: replication/logical/logical.c:611 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "" -#: replication/logical/logical.c:777 +#: replication/logical/logical.c:759 #, 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:765 #, 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:936 replication/logical/logical.c:981 replication/logical/logical.c:1026 replication/logical/logical.c:1072 #, 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:1304 replication/logical/logical.c:1353 replication/logical/logical.c:1394 replication/logical/logical.c:1480 replication/logical/logical.c:1529 #, c-format msgid "logical streaming requires a %s callback" msgstr "" -#: replication/logical/logical.c:1457 +#: replication/logical/logical.c:1439 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "" @@ -20324,7 +20884,7 @@ msgstr "მასივი ერთგანზომილებიანი 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:1428 utils/adt/jsonb.c:1304 #, c-format msgid "array must have even number of elements" msgstr "მასივს ლუწი რაოდენობის ელემენტები უნდა ჰქონდეს" @@ -20334,32 +20894,32 @@ msgstr "მასივს ლუწი რაოდენობის ელე msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "" -#: replication/logical/origin.c:190 +#: replication/logical/origin.c:195 #, c-format -msgid "cannot query or manipulate replication origin when \"max_replication_slots\" is 0" -msgstr "რეპლიკაციის წყაროდან გამოთხოვა ან მისით მანიპულაცია შეუძლებელია, როცა \"max_replicaion_slots\" ნულს უდრის" +msgid "cannot query or manipulate replication origin when \"max_active_replication_origins\" is 0" +msgstr "რეპლიკაციის წყაროდან გამოთხოვა ან მისით მანიპულაცია შეუძლებელია, როცა \"max_active_replication_origins\" ნულს უდრის" -#: replication/logical/origin.c:195 +#: replication/logical/origin.c:200 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "აღდგენისა რეპლიკაციის წყაროებს ვერ შეცვლით" -#: replication/logical/origin.c:240 +#: replication/logical/origin.c:245 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "რეპლიკაციის წყარო \"%s\" არ არსებობს" -#: replication/logical/origin.c:331 +#: replication/logical/origin.c:336 #, c-format msgid "could not find free replication origin ID" msgstr "თავისუფალი რეპლიკაციის წყაროს ID-ის პოვნა შეუძლებელია" -#: replication/logical/origin.c:365 +#: replication/logical/origin.c:370 #, c-format msgid "could not drop replication origin with ID %d, in use by PID %d" msgstr "რეპლიკაციის წყაროს, ID-ით %d გადაგდების შეცდომა. გამოიყენება PID-ის მიერ %d" -#: replication/logical/origin.c:492 +#: replication/logical/origin.c:497 #, c-format msgid "replication origin with ID %d does not exist" msgstr "რეპლიკაციის წყარო ID-ით %d არ არსებობს" @@ -20371,8 +20931,8 @@ msgstr "" #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase \"max_replication_slots\"" -msgstr "თავისუფალი რეპლიკაციის მდგომარეობის პოვნა შეუძლებელია. გაზარდეთ \"max_replication_slots\"" +msgid "could not find free replication state, increase \"max_active_replication_origins\"" +msgstr "თავისუფალი რეპლიკაციის მდგომარეობის პოვნა შეუძლებელია. გაზარდეთ \"max_active_replication_origins\"" #: replication/logical/origin.c:806 #, c-format @@ -20394,10 +20954,10 @@ msgstr "რეპლიკაციის წყარო ID-ით %d უკვ msgid "could not find free replication state slot for replication origin with ID %d" msgstr "" -#: replication/logical/origin.c:957 replication/logical/origin.c:1158 replication/slot.c:2384 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 #, c-format -msgid "Increase \"max_replication_slots\" and try again." -msgstr "გაზარდეთ \"max_replication_slots\"-ის მნიშვნელობა და თავიდან სცადეთ." +msgid "Increase \"max_active_replication_origins\" and try again." +msgstr "გაზარდეთ \"max_active_replication_origins\"-ის მნიშვნელობა და თავიდან სცადეთ." #: replication/logical/origin.c:1114 #, c-format @@ -20419,1055 +20979,1137 @@ msgstr "რეპლიკაციის წყაროს სახელი msgid "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." msgstr "საწყისი სახელები, \"%s\", \"%s\" და სახელები, რომლებიც \"pg_\"-ით იწყება, დარეზერვებულია." -#: replication/logical/relation.c:242 +#: replication/logical/relation.c:241 +msgid ", " +msgstr ", " + +#: replication/logical/relation.c:243 #, c-format msgid "\"%s\"" msgstr "\"%s\"" -#: replication/logical/relation.c:245 -#, c-format -msgid ", \"%s\"" -msgstr ", \"%s\"" - -#: replication/logical/relation.c:251 +#: replication/logical/relation.c:262 #, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" msgstr[0] "" msgstr[1] "" -#: replication/logical/relation.c:306 +#: replication/logical/relation.c:273 +#, c-format +msgid "logical replication target relation \"%s.%s\" has incompatible generated column: %s" +msgid_plural "logical replication target relation \"%s.%s\" has incompatible generated columns: %s" +msgstr[0] "ლოგიკური რეპლიკაციის სამიზნე ურთიერთობას \"%s.%s\" აქვს არათავსებადი გენერირებული სვეტი: %s" +msgstr[1] "ლოგიკური რეპლიკაციის სამიზნე ურთიერთობას \"%s.%s\" აქვს არათავსებადი გენერირებული სვეტი: %s" + +#: replication/logical/relation.c:328 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "" -#: replication/logical/relation.c:398 +#: replication/logical/relation.c:421 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "" -#: replication/logical/reorderbuffer.c:3970 +#: replication/logical/reorderbuffer.c:4122 #, 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:4468 replication/logical/reorderbuffer.c:4493 #, 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:4472 replication/logical/reorderbuffer.c:4497 #, 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:4746 #, c-format -msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" -msgstr "" +msgid "could not remove file \"%s\" during removal of %s/%s/xid*: %m" +msgstr "ვერ წავშალე ფაილი \"%s\" %s/%s/xid*-ის წაშლისას: %m" -#: replication/logical/reorderbuffer.c:5091 +#: replication/logical/reorderbuffer.c:5243 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "" -#: replication/logical/slotsync.c:215 +#: replication/logical/slotsync.c:214 #, 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 +#: replication/logical/slotsync.c:216 #, 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 +#: replication/logical/slotsync.c:460 #, 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 +#: replication/logical/slotsync.c:580 #, c-format -msgid "could not sync slot \"%s\"" -msgstr "სლოტის \"%s\" სინქრონიზაცია შეუძლებელია" +msgid "could not synchronize replication slot \"%s\"" +msgstr "რეპლიკაციის სლოტის \"%s\" სინქრონიზაცია შეუძლებელია" -#: replication/logical/slotsync.c:580 +#: replication/logical/slotsync.c:581 #, 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 +#: replication/logical/slotsync.c:590 #, 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 +#: replication/logical/slotsync.c:629 #, 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 +#: replication/logical/slotsync.c:651 #, c-format msgid "exiting from slot synchronization because same name slot \"%s\" already exists on the standby" msgstr "" -#: replication/logical/slotsync.c:819 +#: replication/logical/slotsync.c:820 #, c-format msgid "could not fetch failover logical slots info from the primary server: %s" msgstr "ვერ გამოვითხოვე გადართვის ლოგიკური სლოტების ინფორმაცია ძირითადი სერვერიდან: %s" -#: replication/logical/slotsync.c:965 +#: replication/logical/slotsync.c:969 #, c-format -msgid "could not fetch primary_slot_name \"%s\" info from the primary server: %s" -msgstr "ვერ გამოვითხოვე prmary_slot_name \"%s\"-ის ინფორმაცია ძირითადი სერვერიდან: %s" +msgid "could not fetch primary slot name \"%s\" info from the primary server: %s" +msgstr "ვერ გამოვითხოვე ძირითადი სლოტის სახელის \"%s\" ინფორმაცია ძირითადი სერვერიდან: %s" -#: replication/logical/slotsync.c:967 +#: replication/logical/slotsync.c:971 #, c-format -msgid "Check if primary_slot_name is configured correctly." +msgid "Check if \"primary_slot_name\" is configured correctly." msgstr "" -#: replication/logical/slotsync.c:987 +#: replication/logical/slotsync.c:991 #, c-format 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:1000 #, 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\"-მა მიუთითა, არ არსებობს ძირითად სერვერზე" -#: replication/logical/slotsync.c:1029 +#. translator: first %s is a connection option; second %s is a GUC +#. variable name +#. +#: replication/logical/slotsync.c:1033 #, 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 +#: replication/logical/slotsync.c:1054 #, 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\" ესაჭიროება" -#: replication/logical/slotsync.c:1063 replication/logical/slotsync.c:1091 +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1067 replication/logical/slotsync.c:1095 #, c-format -msgid "slot synchronization requires %s to be defined" -msgstr "სლოტის სინქრონიზაციას %s-ის აღწერა სჭირდება" +msgid "replication slot synchronization requires \"%s\" to be set" +msgstr "რეპლიკაციის სლოტის სინქრონიზაციას \"%s\"-ის დაყენება სჭირდება" -#: replication/logical/slotsync.c:1077 +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1081 #, 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 +#: replication/logical/slotsync.c:1133 #, 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 +#: replication/logical/slotsync.c:1142 #, 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 +#: replication/logical/slotsync.c:1166 #, 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 +#: replication/logical/slotsync.c:1291 #, c-format msgid "cannot synchronize replication slots when standby promotion is ongoing" msgstr "რეპლიკაციის სლოტების სინქრონიზაცია შეუძლებელია უქმეს წახალისების მიმდინარეობისას" -#: replication/logical/slotsync.c:1295 +#: replication/logical/slotsync.c:1299 #, c-format msgid "cannot synchronize replication slots concurrently" msgstr "რეპლიკაციის სლოტების ერთდროული სინქრონიზაცია შეუძლებელია" -#: replication/logical/slotsync.c:1403 +#: replication/logical/slotsync.c:1407 #, c-format msgid "slot sync worker started" msgstr "სლოტის სინქრონიზაციის დამხმარე პროცესი გაეშვა" -#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 replication/walreceiver.c:307 +#: replication/logical/slotsync.c:1470 replication/slotfuncs.c:929 #, c-format -msgid "could not connect to the primary server: %s" -msgstr "შეუძლებელია მიერთება ძირითად სერვერთან: %s" +msgid "synchronization worker \"%s\" could not connect to the primary server: %s" +msgstr "სინქრონიზაციის დამხმარე პროცესი \"%s\" ვერ მიუერთდა ძირითად სერვერს: %s" -#: replication/logical/snapbuild.c:643 +#: replication/logical/snapbuild.c:514 #, c-format msgid "initial slot snapshot too large" msgstr "საწყისი სლოტის სწრაფი ასლი ძალიან დიდია" -#: replication/logical/snapbuild.c:697 +#: replication/logical/snapbuild.c:568 #, 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:1305 replication/logical/snapbuild.c:1402 replication/logical/snapbuild.c:1908 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "" -#: replication/logical/snapbuild.c:1394 +#: replication/logical/snapbuild.c:1307 #, c-format msgid "There are no running transactions." msgstr "გაშვებული ტრანზაქციების გარეშე." -#: replication/logical/snapbuild.c:1436 +#: replication/logical/snapbuild.c:1354 #, 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:1356 replication/logical/snapbuild.c:1380 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "" -#: replication/logical/snapbuild.c:1460 +#: replication/logical/snapbuild.c:1378 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "" -#: replication/logical/snapbuild.c:1486 +#: replication/logical/snapbuild.c:1404 #, c-format msgid "There are no old transactions anymore." msgstr "ძველი ტრანზაქციები აღარ დარჩა." -#: replication/logical/snapbuild.c:1887 +#: replication/logical/snapbuild.c:1775 #, 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:1781 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "" -#: replication/logical/snapbuild.c:1934 +#: replication/logical/snapbuild.c:1822 #, 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:1910 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "ლოგიკური გაშიფვრა შენახული სწრაფი ასლის გამოყენებას დაიწყებს." -#: replication/logical/snapbuild.c:2109 +#: replication/logical/snapbuild.c:2017 #, c-format msgid "could not parse file name \"%s\"" msgstr "ფაილის სახელის დამუშავების შეცდომა: \"%s\"" -#: replication/logical/tablesync.c:161 +#: replication/logical/tablesync.c:160 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "" -#: replication/logical/tablesync.c:641 +#: replication/logical/tablesync.c:640 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart so that two_phase can be enabled" msgstr "" -#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 +#: replication/logical/tablesync.c:830 replication/logical/tablesync.c:971 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "" -#: replication/logical/tablesync.c:834 +#: replication/logical/tablesync.c:837 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "ცხრილი \"%s.%s\" გამომცემელზე ნაპოვნი არაა" -#: replication/logical/tablesync.c:892 +#: replication/logical/tablesync.c:890 #, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" msgstr "" -#: replication/logical/tablesync.c:1071 +#: replication/logical/tablesync.c:1069 #, c-format msgid "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: %s" msgstr "" -#: replication/logical/tablesync.c:1230 +#: replication/logical/tablesync.c:1236 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "" -#: replication/logical/tablesync.c:1429 +#: replication/logical/tablesync.c:1351 +#, c-format +msgid "table synchronization worker for subscription \"%s\" could not connect to the publisher: %s" +msgstr "" + +#: replication/logical/tablesync.c:1436 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "ცხრილის კოპირებამ ვერ გაუშვა ტრანზაქცია გამომცემელზე: %s" -#: replication/logical/tablesync.c:1472 +#: replication/logical/tablesync.c:1479 #, c-format msgid "replication origin \"%s\" already exists" msgstr "რეპლიკაციის წყარო \"%s\" უკვე არსებობს" -#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 +#: replication/logical/tablesync.c:1512 replication/logical/worker.c:2383 #, c-format msgid "user \"%s\" cannot replicate into relation with row-level security enabled: \"%s\"" msgstr "" -#: replication/logical/tablesync.c:1518 +#: replication/logical/tablesync.c:1525 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "ცხრილის კოპირებამ ვერ დაასრულა ტრანზაქცია გამომცემელზე: %s" -#: replication/logical/worker.c:481 +#: replication/logical/worker.c:479 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop" msgstr "" -#: replication/logical/worker.c:483 +#: replication/logical/worker.c:481 #, c-format msgid "Cannot handle streamed replication transactions using parallel apply workers until all tables have been synchronized." msgstr "" -#: replication/logical/worker.c:852 replication/logical/worker.c:967 +#: replication/logical/worker.c:851 replication/logical/worker.c:966 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "" -#: replication/logical/worker.c:2500 +#: replication/logical/worker.c:2530 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "" -#: replication/logical/worker.c:2507 +#: replication/logical/worker.c:2537 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "" -#: replication/logical/worker.c:3371 +#: replication/logical/worker.c:3472 #, c-format msgid "invalid logical replication message type \"??? (%d)\"" msgstr "არასწორი ლოგიკური რეპლიკაციის შეტყობინების ტიპი \"??? (%d)\"" -#: replication/logical/worker.c:3543 +#: replication/logical/worker.c:3644 #, c-format msgid "data stream from publisher has ended" msgstr "გამომცემლის მონაცემების ნაკადი დასრულდა" -#: replication/logical/worker.c:3697 +#: replication/logical/worker.c:3798 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "ლოგიკური რეპლიკაციის დამხმარე პროცესის შეწყვეტა მოლოდინის ვადის ამოწურვის გამო" -#: replication/logical/worker.c:3891 +#: replication/logical/worker.c:3995 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was removed" msgstr "" -#: replication/logical/worker.c:3905 +#: replication/logical/worker.c:4009 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "" -#: replication/logical/worker.c:3936 +#: replication/logical/worker.c:4040 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because of a parameter change" msgstr "" -#: replication/logical/worker.c:3940 +#: replication/logical/worker.c:4044 #, c-format msgid "logical replication worker for subscription \"%s\" will restart because of a parameter change" msgstr "" -#: replication/logical/worker.c:3954 +#: replication/logical/worker.c:4058 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because the subscription owner's superuser privileges have been revoked" msgstr "ლოგიკური რეპლიკაციის პარალელური გადატარების დამხმარე პროცესი გამოწერისთვის \"%s\" გაჩერდება, რადგან გამოწერის მფლობელის ზემომხმარებლის პრივილეგიები გაუქმდა" -#: replication/logical/worker.c:3958 +#: replication/logical/worker.c:4062 #, c-format msgid "logical replication worker for subscription \"%s\" will restart because the subscription owner's superuser privileges have been revoked" msgstr "" -#: replication/logical/worker.c:4478 +#: replication/logical/worker.c:4564 #, c-format msgid "subscription has no replication slot set" msgstr "გამოწერას რეპლიკაციის სლოტი დაყენებული არ აქვს" -#: replication/logical/worker.c:4591 +#: replication/logical/worker.c:4589 +#, c-format +msgid "apply worker for subscription \"%s\" could not connect to the publisher: %s" +msgstr "დამხმარე პროცესის გამოყენება გამოწერისთვის \"%s\" ვერ მიუერთდა გამომცემელს: %s" + +#: replication/logical/worker.c:4678 #, c-format msgid "logical replication worker for subscription %u will not start because the subscription was removed during startup" msgstr "" -#: replication/logical/worker.c:4607 +#: replication/logical/worker.c:4694 #, c-format msgid "logical replication worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "" -#: replication/logical/worker.c:4631 +#: replication/logical/worker.c:4718 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "" -#: replication/logical/worker.c:4636 +#: replication/logical/worker.c:4723 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "გაეშვა ლოგიკური რეპლიკაციის გადატარების დამხმარე პროცესი გამოწერისთვის \"%s\"" -#: replication/logical/worker.c:4734 +#: replication/logical/worker.c:4845 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "გამოწერა \"%s\" გაითიშა შეცდომის გამო" -#: replication/logical/worker.c:4782 +#: replication/logical/worker.c:4893 #, 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:4907 #, 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:4989 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "skip-LSN გამოწერისთვის \"%s\" გასუფთავებულია" -#: replication/logical/worker.c:4879 +#: replication/logical/worker.c:4990 #, 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:5027 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\"" msgstr "" -#: replication/logical/worker.c:4909 +#: replication/logical/worker.c:5031 #, 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:5036 #, 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:5047 #, 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:5054 #, 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:5065 #, 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:5073 #, 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:328 #, c-format msgid "invalid proto_version" msgstr "არასწორი proto_version" -#: replication/pgoutput/pgoutput.c:320 +#: replication/pgoutput/pgoutput.c:333 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\" დიაპაზონს გარეთაა" -#: replication/pgoutput/pgoutput.c:337 +#: replication/pgoutput/pgoutput.c:350 #, c-format msgid "invalid publication_names syntax" msgstr "არასწორი publication_names syntax" -#: replication/pgoutput/pgoutput.c:407 -#, c-format -msgid "proto_version option missing" -msgstr "პარამეტრი proto_version მითითებული არაა" - -#: replication/pgoutput/pgoutput.c:411 +#: replication/pgoutput/pgoutput.c:420 replication/pgoutput/pgoutput.c:424 #, c-format -msgid "publication_names option missing" -msgstr "აკლა პარამეტრი publication_names" +msgid "option \"%s\" missing" +msgstr "პარამეტრი \"%s\" აკლია" -#: replication/pgoutput/pgoutput.c:452 +#: replication/pgoutput/pgoutput.c:469 #, 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:475 #, 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:490 #, 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:496 #, 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:501 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "" -#: replication/pgoutput/pgoutput.c:498 +#: replication/pgoutput/pgoutput.c:515 #, 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:520 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "" -#: replication/slot.c:260 +#: replication/pgoutput/pgoutput.c:1085 +#, c-format +msgid "cannot use different values of publish_generated_columns for table \"%s.%s\" in different publications" +msgstr "" + +#: replication/pgoutput/pgoutput.c:1792 +#, c-format +msgid "skipped loading publication: %s" +msgstr "გამოტოვებულია ჩატვირთვა პუბლიკაციისთვის: %s" + +#: replication/pgoutput/pgoutput.c:1793 +#, c-format +msgid "The publication does not exist at this point in the WAL." +msgstr "WAL-ში ამ წერტილთან პუბლიკაცია არ არსებობს." + +#: replication/pgoutput/pgoutput.c:1794 +#, c-format +msgid "Create the publication if it does not exist." +msgstr "პუბლიკაციის შექმნა, თუ ის არ არსებობს." + +#: replication/slot.c:275 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "რეპლიკაციის სლოტის სახელი \"%s\" ძალიან მოკლეა" -#: replication/slot.c:269 +#: replication/slot.c:284 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "რეპლიკაციის სლოტის სახელი \"%s\" ძალიან გრძელია" -#: replication/slot.c:282 +#: replication/slot.c:297 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "რეპლიკაციის სლოტის სახელი \"%s\" არასწორ სიმბოლოს შეიცავს" -#: replication/slot.c:284 +#: replication/slot.c:299 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "" -#: replication/slot.c:333 +#: replication/slot.c:348 #, c-format msgid "cannot enable failover for a replication slot created on the standby" msgstr "" -#: replication/slot.c:345 replication/slot.c:849 +#: replication/slot.c:360 replication/slot.c:885 #, c-format msgid "cannot enable failover for a temporary replication slot" msgstr "დროებითი რეპლიკაციის სლოტისთვის გადართვის ჩართვა შეუძლებელია" -#: replication/slot.c:370 +#: replication/slot.c:385 #, c-format msgid "replication slot \"%s\" already exists" msgstr "რეპლიკაციის სლოტი \"%s\" უკვე არსებობს" -#: replication/slot.c:380 +#: replication/slot.c:395 #, c-format msgid "all replication slots are in use" msgstr "ყველა რეპლიკაციის სლოტი გამოიყენება" -#: replication/slot.c:381 +#: replication/slot.c:396 #, c-format 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:579 replication/slotfuncs.c:664 utils/activity/pgstat_replslot.c:56 utils/adt/genfile.c:739 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "რეპლიკაციის სლოტი არ არსებობს: %s" -#: replication/slot.c:606 replication/slot.c:1337 +#: replication/slot.c:634 replication/slot.c:1388 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "რეპლიკაციის სლოტი (%s) აქტიურია PID-ისთვის %d" -#: replication/slot.c:638 +#: replication/slot.c:651 +#, c-format +msgid "can no longer access replication slot \"%s\"" +msgstr "რეპლიკაციის სლოტთან \"%s\" წვდომა აღარ მაქვს" + +#: replication/slot.c:653 +#, c-format +msgid "This replication slot has been invalidated due to \"%s\"." +msgstr "ეს რეპლიკაციის სლოტი მონიშნულია, როგორც არასწორი \"%s\"-ის გამო." + +#: replication/slot.c:672 #, c-format msgid "acquired logical replication slot \"%s\"" msgstr "მივიღე ლოგიკური რეპლიკაციის სლოტი \"%s\"" -#: replication/slot.c:640 +#: replication/slot.c:674 #, c-format msgid "acquired physical replication slot \"%s\"" msgstr "მივიღე ფიზიკური რეპლიკაციის სლოტი \"%s\"" -#: replication/slot.c:729 +#: replication/slot.c:759 #, c-format msgid "released logical replication slot \"%s\"" msgstr "გათავისუფლდა ლოგიკური რეპლიკაციის სლოტი \"%s\"" -#: replication/slot.c:731 +#: replication/slot.c:761 #, c-format msgid "released physical replication slot \"%s\"" msgstr "გათავისუფლდა ფიზიკური რეპლიკაციის სლოტი \"%s\"" -#: replication/slot.c:797 +#: replication/slot.c:827 #, c-format 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 +#: replication/slot.c:850 #, c-format msgid "cannot use %s with a physical replication slot" msgstr "%s-ის გამოყენება ფიზიკური რეპლიკაციის სლოტთან ერთად შეუძლებელია" -#: replication/slot.c:828 +#: replication/slot.c:862 #, c-format msgid "cannot alter replication slot \"%s\"" msgstr "რეპლიკაციის სლოტის \"%s\" შეცვლა შეუძლებელია" -#: replication/slot.c:838 +#: replication/slot.c:872 #, c-format msgid "cannot enable failover for a replication slot on the standby" msgstr "" -#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 +#: replication/slot.c:1020 replication/slot.c:2120 replication/slot.c:2505 #, c-format msgid "could not remove directory \"%s\"" msgstr "საქაღალდის (\"%s\") წაშლის შეცდომა" -#: replication/slot.c:1372 +#: replication/slot.c:1423 #, c-format msgid "replication slots can only be used if \"max_replication_slots\" > 0" msgstr "რეპლიკაციის სლოტების გამოყენება შესაძლებელია, მხოლოდ, როცა \"max_replication_slots\" > 0" -#: replication/slot.c:1377 +#: replication/slot.c:1428 #, c-format msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" msgstr "რეპლიკაციის სლოტების გამოყენება შესაძლებელია, მხოლოდ, როცა \"wal_level\" >= \"replica\"" -#: replication/slot.c:1389 +#: replication/slot.c:1440 #, c-format msgid "permission denied to use replication slots" msgstr "რეპლიკაციის სლოტების გამოყენების წვდომა აკრძალულია" -#: replication/slot.c:1390 +#: replication/slot.c:1441 #, c-format msgid "Only roles with the %s attribute may use replication slots." msgstr "" -#: replication/slot.c:1498 +#: replication/slot.c:1550 #, c-format -msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." -msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." +msgid "The slot's restart_lsn %X/%X exceeds the limit by % byte." +msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by % bytes." msgstr[0] "" msgstr[1] "" -#: replication/slot.c:1506 +#: replication/slot.c:1561 #, c-format msgid "The slot conflicted with xid horizon %u." msgstr "სლოტი კონფლიქტშია XID-ის ჰორიზონტთან %u." -#: replication/slot.c:1511 +#: replication/slot.c:1566 msgid "Logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary server." msgstr "ლოგიკურ გაშიფვრას უქმეზე ძირითად სერვერზე \"wal_level\" >= \"logical\" ესაჭიროება." -#: replication/slot.c:1519 +#. translator: %s is a GUC variable name +#: replication/slot.c:1575 +#, c-format +msgid "The slot's idle time of %dmin %02ds exceeds the configured \"%s\" duration of %dmin." +msgstr "" + +#: replication/slot.c:1589 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "რეპლიკაციის სლოტის (%2$s) გასათავისუფლებლად მოხდება პროცესის მოკვლა: %1$d" -#: replication/slot.c:1521 +#: replication/slot.c:1591 #, c-format msgid "invalidating obsolete replication slot \"%s\"" msgstr "მოძველებული რეპლიკაციის სლოტის (\"%s\") არასწორად გამოცხადება" -#: replication/slot.c:2249 +#: replication/slot.c:2443 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "რეპლიკაციის სლოტის (%s) ფაილის არასწორი მაგიური რიცხვი: %u (უნდა იყოს %u)" -#: replication/slot.c:2256 +#: replication/slot.c:2450 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "რეპლიკაციის სლოტის ფაილის (%s) მხარდაუჭერელი ვერსია %u" -#: replication/slot.c:2263 +#: replication/slot.c:2457 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "რეპლიკაციის სლოტის ფაილის (%s) დაზიანებული სიგრძე: %u" -#: replication/slot.c:2299 +#: replication/slot.c:2493 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "" -#: replication/slot.c:2333 +#: replication/slot.c:2529 #, c-format msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" msgstr "ლოგიკური რეპლიკაციის სლოტი\"%s\" არსებობს, მაგრამ \"wal_level\" < \"logical\"" -#: replication/slot.c:2335 +#: replication/slot.c:2531 #, c-format msgid "Change \"wal_level\" to be \"logical\" or higher." msgstr "შეცვალეთ \"wal_level\" \"logical\"-ზე ან უფრო მაღალზე." -#: replication/slot.c:2339 +#: replication/slot.c:2543 +#, c-format +msgid "logical replication slot \"%s\" exists on the standby, but \"hot_standby\" = \"off\"" +msgstr "ლოგიკური რეპლიკაციის სლოტი\"%s\" არსებობს, მაგრამ \"hot_standby\" = \"off\"" + +#: replication/slot.c:2545 +#, c-format +msgid "Change \"hot_standby\" to be \"on\"." +msgstr "" + +#: replication/slot.c:2550 #, c-format msgid "physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" msgstr "ფიზიკური რეპლიკაციის სლოტი\"%s\" არსებობს, მაგრამ \"wal_level\" < \"replica\"" -#: replication/slot.c:2341 +#: replication/slot.c:2552 #, c-format msgid "Change \"wal_level\" to be \"replica\" or higher." msgstr "შეცვალეთ \"wal_level\" \"replica\"-ზე ან ზემოთ." -#: replication/slot.c:2383 +#: replication/slot.c:2598 #, c-format msgid "too many replication slots active before shutdown" msgstr "გამორთვამდე მეტისმეტად ბევრი რეპლიკაციის სლოტი იყო აქტიური" -#: replication/slot.c:2461 +#: replication/slot.c:2599 #, c-format -msgid "\"%s\" is not a physical replication slot" -msgstr "\"%s\" ფიზიკური რეპლიკაციის სლოტი არაა" +msgid "Increase \"max_replication_slots\" and try again." +msgstr "გაზარდეთ \"max_replication_slots\"-ის მნიშვნელობა და თავიდან სცადეთ." -#: replication/slot.c:2637 +#: replication/slot.c:2676 #, c-format -msgid "replication slot \"%s\" specified in parameter %s does not exist" -msgstr "რეპლიკაციის სლოტმა \"%s\" მიუთითა პარამეტრი %s, რომელიც არ არსებობს" +msgid "Replication slot \"%s\" does not exist." +msgstr "რეპლიკაციის სლოტი \"%s\" არ არსებობს." -#: replication/slot.c:2639 replication/slot.c:2680 replication/slot.c:2695 +#: replication/slot.c:2684 #, c-format -msgid "Logical replication is waiting on the standby associated with \"%s\"." -msgstr "ლოგიკური რეპლიკაცია \"%s\"-სთან ასოცირებულ უქმეს ელოდება." +msgid "\"%s\" is not a physical replication slot." +msgstr "\"%s\" ფიზიკური რეპლიკაციის სლოტი არაა." -#: replication/slot.c:2641 +#: replication/slot.c:2863 #, c-format -msgid "Consider creating the slot \"%s\" or amend parameter %s." -msgstr "განიხილეთ, შექმნათ სლოტი \"%s\", ან მიაწერეთ პარამეტრი %s." +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "რეპლიკაციის სლოტი \"%s\", მითითებული პარამეტრში %s, არ არსებობს" -#: replication/slot.c:2658 +#: replication/slot.c:2865 replication/slot.c:2899 replication/slot.c:2914 #, c-format -msgid "cannot have logical replication slot \"%s\" in parameter %s" -msgstr "ვერ გექნებათ ლოგიკური რეპლიკაციის სლოტი \"%s\" პარამეტრში %s" +msgid "Logical replication is waiting on the standby associated with replication slot \"%s\"." +msgstr "ლოგიკური რეპლიკაცია ელოდება უქმე სლოტს, რომელიც დაკავშირებულია რეპლიკაციის სლოტთან \"%s\"." -#: replication/slot.c:2660 +#: replication/slot.c:2867 #, c-format -msgid "Logical replication is waiting for correction on \"%s\"." -msgstr "ლოგიკური რეპლიკაციის სლოტი ელოდება გასწორებას \"%s\"-ზე." +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "შექმენით რეპლიკაციის სლოტი \"%s\" ან შეცვალეთ პარამეტრი \"%s\"." -#: replication/slot.c:2662 +#: replication/slot.c:2877 #, c-format -msgid "Consider removing logical slot \"%s\" from parameter %s." -msgstr "" +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "ვერ მიუთითებთ ლოგიკური რეპლიკაციის სლოტს \"%s\" პარამეტრში \"%s\"" -#: replication/slot.c:2678 +#: replication/slot.c:2879 #, c-format -msgid "physical slot \"%s\" specified in parameter %s has been invalidated" -msgstr "" +msgid "Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "ლოგიკური რეპლიკაცია ელოდება კორექტირებას რეპლიკაციის სლოტზე \"%s\"." -#: replication/slot.c:2682 +#: replication/slot.c:2881 #, c-format -msgid "Consider dropping and recreating the slot \"%s\" or amend parameter %s." -msgstr "განიხილეთ მოცილება ან თავიდან შექმნა სლოტისთვის \"%s\" ან მიაწერეთ პარამეტრი %s." +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "წაშალეთ ლოგიკური რეპლიკაციის სლოტი \"%s\" პარამეტრიდან \"%s\"." -#: replication/slot.c:2693 +#: replication/slot.c:2897 #, c-format -msgid "replication slot \"%s\" specified in parameter %s does not have active_pid" -msgstr "რეპლიკაციის სლოტს \"%s\", რომელიც მითითებულია პარამეტრში %s, active_pid არ გააჩნია" +msgid "physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated" +msgstr "ფიზიკური რეპლიკაციის სლოტი \"%s\", მითითებული პარამეტრში \"%s\", გაუქმებულია" -#: replication/slot.c:2697 +#: replication/slot.c:2901 #, c-format -msgid "Consider starting standby associated with \"%s\" or amend parameter %s." -msgstr "" +msgid "Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "განიხილეთ მოცილება ან თავიდან შექმნა სლოტისთვის \"%s\" ან მიაწერეთ პარამეტრი \"%s\"." + +#: replication/slot.c:2912 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not have active_pid" +msgstr "რეპლიკაციის სლოტი \"%s\", რომელიც მითითებულია პარამეტრში \"%s\", active_pid არ გააჩნია" + +#: replication/slot.c:2916 +#, c-format +msgid "Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "გაუშვით უქმე, ასოცირებული რეპლიკაციის სლოტთან \"%s\", ან მიაწერეთ პარამეტრი \"%s\"." + +#: replication/slot.c:3008 +#, c-format +msgid "\"%s\" must be set to 0 during binary upgrade mode." +msgstr "ბინარული განახლების რეჟიმისას \"%s\"-ის მნიშვნელობა 0-ზე უნდა დააყენოთ." -#: replication/slotfuncs.c:526 +#: replication/slotfuncs.c:529 #, c-format msgid "invalid target WAL LSN" msgstr "არასწორი სამიზნე WAL LSN" -#: replication/slotfuncs.c:548 +#: replication/slotfuncs.c:551 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "რეპლიკაციის სლოტის (%s) წინ წაწევა შეუძლებელია" -#: replication/slotfuncs.c:550 +#: replication/slotfuncs.c:553 #, c-format msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "" -#: replication/slotfuncs.c:566 +#: replication/slotfuncs.c:569 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "" -#: replication/slotfuncs.c:673 +#: replication/slotfuncs.c:676 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "ფიზიკური რეპლიკაციის სლოტის (%s) ლოგიკურ სლოტად კოპირება შეუძლებელია" -#: replication/slotfuncs.c:675 +#: replication/slotfuncs.c:678 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "ლოგიკური რეპლიკაციის სლოტის (%s) ფიზიკურ სლოტად კოპირება შეუძლებელია" -#: replication/slotfuncs.c:682 +#: replication/slotfuncs.c:685 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "რეპლიკაციის სლოტის, რომელიც WAL რეზერვაციას არ აკეთებს, კოპირება შეუძლებელია" -#: replication/slotfuncs.c:768 +#: replication/slotfuncs.c:691 +#, c-format +msgid "cannot copy invalidated replication slot \"%s\"" +msgstr "არასწორად გამოცხადებული რეპლიკაციის სლოტის \"%s\" კოპირება შეუძლებელია" + +#: replication/slotfuncs.c:783 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "რეპლიკაციის სლოტის კოპირების შეცდომა: %s" -#: replication/slotfuncs.c:770 +#: replication/slotfuncs.c:785 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "კოპირების ოპერაციისას საწყისი რეპლიკაციის სლოტი შეუთავსებლად შეიცვალა." -#: replication/slotfuncs.c:776 +#: replication/slotfuncs.c:791 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "დაუმთავრებელი ლოგიკური რეპლიკაციის სლოტის კოპირება შეუძლებელია: %s" -#: replication/slotfuncs.c:778 +#: replication/slotfuncs.c:793 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "" -#: replication/slotfuncs.c:877 +#: replication/slotfuncs.c:805 +#, c-format +msgid "cannot copy replication slot \"%s\"" +msgstr "რეპლიკაციის სლოტის \"%s\" კოპირება შეუძლებელია" + +#: replication/slotfuncs.c:807 +#, c-format +msgid "The source replication slot was invalidated during the copy operation." +msgstr "კოპირების ოპერაციისას საწყისი რეპლიკაციის სლოტი არასწორად გამოცხადდა." + +#: replication/slotfuncs.c:906 #, c-format msgid "replication slots can only be synchronized to a standby server" msgstr "რეპლიკაციის სლოტების სინქრონიზაცია, მხოლოდ, უქმე სერვერთანაა შესაძლებელი" -#: replication/syncrep.c:261 +#: replication/syncrep.c:304 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "" -#: replication/syncrep.c:262 replication/syncrep.c:279 +#: replication/syncrep.c:305 replication/syncrep.c:322 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "ტრანზაქცია უკვე გადაცემულია ლოკალურად, მაგრამ შეიძლება მომლოდინეზე ჯერ რეპლიცირებული არაა." -#: replication/syncrep.c:278 +#: replication/syncrep.c:321 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "სინქრონული რეპლიკაციის მოლოდინის გაუქმება მომხმარებლის მოთხოვნის გამო" -#: replication/syncrep.c:485 +#: replication/syncrep.c:528 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %d" msgstr "" -#: replication/syncrep.c:489 +#: replication/syncrep.c:532 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "" -#: replication/syncrep.c:1013 +#: replication/syncrep.c:1081 #, c-format -msgid "\"synchronous_standby_names\" parser failed" -msgstr "\"synchronous_standby_names\"-ის დამმუშავებლის შეცდომა" +msgid "\"%s\" parser failed." +msgstr "\"%s\"-ის დამმუშავებლის შეცდომა." -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1088 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "სინქრონული მომლოდინეების რაოდენობა (%d) ნულზე მეტი უნდა იყოს" -#: replication/walreceiver.c:176 +#: replication/walreceiver.c:276 #, c-format -msgid "terminating walreceiver process due to administrator command" -msgstr "walreceiver პროგრამის შეწყვეტა ადმინისტრატორის ბრძანების გამო" +msgid "streaming replication receiver \"%s\" could not connect to the primary server: %s" +msgstr "სტრიმინგის რეპლიკაციის მიმღები \"%s\" ვერ დაუკავშირდა ძირითად სერვერს: %s" -#: replication/walreceiver.c:354 +#: replication/walreceiver.c:324 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "ბაზის სისტემის იდენტიფიკატორი განსხვავდება ძირითადსა და მომლოდინეს შორის" -#: replication/walreceiver.c:355 +#: replication/walreceiver.c:325 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "ძირითადი სერვერის იდენტიფიკატორია %s, მომლოდინესი კი %s." -#: replication/walreceiver.c:366 +#: replication/walreceiver.c:336 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "" -#: replication/walreceiver.c:419 +#: replication/walreceiver.c:389 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "" -#: replication/walreceiver.c:423 +#: replication/walreceiver.c:393 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "" -#: replication/walreceiver.c:458 +#: replication/walreceiver.c:428 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:472 #, c-format msgid "replication terminated by primary server" msgstr "რეპლიკაცია შეწყვეტილია ძირითადი სერვერის მიერ" -#: replication/walreceiver.c:503 +#: replication/walreceiver.c:473 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "" -#: replication/walreceiver.c:593 +#: replication/walreceiver.c:573 #, c-format msgid "terminating walreceiver due to timeout" msgstr "walreceiver პროგრამის შეწყვეტა მოლოდინის ვადის ამოწურვის გამო" -#: replication/walreceiver.c:625 +#: replication/walreceiver.c:605 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "" -#: replication/walreceiver.c:641 replication/walreceiver.c:1071 +#: replication/walreceiver.c:621 replication/walreceiver.c:1063 #, c-format msgid "could not close WAL segment %s: %m" msgstr "'WAL' სეგმენტის %s დახურვის შეცდომა: %m" -#: replication/walreceiver.c:760 +#: replication/walreceiver.c:740 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "" -#: replication/walreceiver.c:959 +#: replication/walreceiver.c:951 #, c-format msgid "could not write to WAL segment %s at offset %d, length %lu: %m" msgstr "'WAL'-ის სეგმენტში (%s) ჩაწერის შეცდომა. წანაცვლება %d, სიგრძე %lu: %m" -#: replication/walsender.c:531 +#: replication/walsender.c:505 #, c-format msgid "cannot use %s with a logical replication slot" msgstr "%s-ის გამოყენება ლოგიკური რეპლიკაციის სლოტთან ერთად შეუძლებელია" -#: replication/walsender.c:635 storage/smgr/md.c:1723 +#: replication/walsender.c:609 storage/smgr/md.c:1867 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "ფაილის (\"%s\") ბოლოში გადახვევის პრობლემა: %m" -#: replication/walsender.c:639 +#: replication/walsender.c:613 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "ფაილის (\"%s\") დასაწყისში გადახვევის პრობლემა: %m" -#: replication/walsender.c:853 +#: replication/walsender.c:829 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "" -#: replication/walsender.c:919 +#: replication/walsender.c:895 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "" -#: replication/walsender.c:922 +#: replication/walsender.c:898 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "" -#: replication/walsender.c:966 +#: replication/walsender.c:942 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "" -#: replication/walsender.c:1160 +#: replication/walsender.c:1137 #, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" msgstr "უცნობი მნიშვნელობა CREATE_REPLICATION_SLOT-ის პარამეტრისთვის \"%s\": \"%s\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1266 +#: replication/walsender.c:1243 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s ტრანზაქცის შიგნიდან არ უნდა გამოიძახოთ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1276 +#: replication/walsender.c:1253 #, c-format msgid "%s must be called inside a transaction" msgstr "%s ტრანზაქციის შიგნიდან უნდა გამოიძახოთ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1282 +#: replication/walsender.c:1259 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1287 +#: replication/walsender.c:1264 #, c-format msgid "%s must be called in a read-only transaction" msgstr "%s მხოლოდ-წაკითხვად ტრანზაქციაში უნდა გამოიძახოთ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1293 +#: replication/walsender.c:1270 #, c-format msgid "%s must be called before any query" msgstr "%s ყველა მოთხოვნაზე ადრე უნდა გამოიძახოთ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1299 +#: replication/walsender.c:1276 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s ქვეტრანზაქციაში არ უნდა გამოიძახოთ" -#: replication/walsender.c:1472 +#: replication/walsender.c:1453 #, c-format msgid "terminating walsender process after promotion" msgstr "walsender პროცესის შეწყვეტა დაწინაურების შემდეგ" -#: replication/walsender.c:2000 +#: replication/walsender.c:1994 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "'WAL'-გამგზავნის გაჩერების რეჟიმში ყოფნის დროს ახალი ბრძანებების შესრულება შეუძლებელია" -#: replication/walsender.c:2035 +#: replication/walsender.c:2029 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "ფიზიკური რეპლიკაციისთვის WAL-ის გამგზავნში SQL ბრძანებების შესრულება შეუძლებელია" -#: replication/walsender.c:2068 +#: replication/walsender.c:2060 #, c-format 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:2068 tcop/fastpath.c:208 tcop/postgres.c:1137 tcop/postgres.c:1495 tcop/postgres.c:1747 tcop/postgres.c:2253 tcop/postgres.c:2690 tcop/postgres.c:2767 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "" -#: replication/walsender.c:2233 replication/walsender.c:2268 +#: replication/walsender.c:2225 replication/walsender.c:2260 #, c-format msgid "unexpected EOF on standby connection" msgstr "მოულოდნელი EOF მომლოდინის მიერთებაზე" -#: replication/walsender.c:2256 +#: replication/walsender.c:2248 #, c-format msgid "invalid standby message type \"%c\"" msgstr "არასწორი მომლოდინის შეტყობინების ტიპი \"%c\"" -#: replication/walsender.c:2345 +#: replication/walsender.c:2337 #, c-format msgid "unexpected message type \"%c\"" msgstr "შეტყობინების მოულოდნელი ტიპი: \"%c\"" -#: replication/walsender.c:2759 +#: replication/walsender.c:2751 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "walsender პროცესის შეწყვეტა რეპლიკაციის მოლოდინის ვადის ამოწურვის გამო" @@ -21647,280 +22289,285 @@ msgstr "წესი %s ურთიერთობისთვის \"%s\" ა msgid "renaming an ON SELECT rule is not allowed" msgstr "'ON SELECT' წესზე სახელის გადარქმევა დაუშვებელია" -#: rewrite/rewriteHandler.c:581 +#: rewrite/rewriteHandler.c:590 #, 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:617 #, 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:671 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "" -#: rewrite/rewriteHandler.c:893 rewrite/rewriteHandler.c:932 +#: rewrite/rewriteHandler.c:908 rewrite/rewriteHandler.c:947 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:961 +#: rewrite/rewriteHandler.c:910 rewrite/rewriteHandler.c:976 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" -#: rewrite/rewriteHandler.c:897 +#: rewrite/rewriteHandler.c:912 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "გადასაფარად გამოიყენეთ OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:959 rewrite/rewriteHandler.c:967 +#: rewrite/rewriteHandler.c:974 rewrite/rewriteHandler.c:982 #, 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:1118 rewrite/rewriteHandler.c:1136 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:1697 +#: rewrite/rewriteHandler.c:1691 #, c-format msgid "MERGE is not supported for relations with rules." msgstr "წესების მქონე ურთიერთობებისთვის MERGE მხარდაჭერილი არაა." -#: rewrite/rewriteHandler.c:2110 rewrite/rewriteHandler.c:4197 +#: rewrite/rewriteHandler.c:1731 rewrite/rewriteHandler.c:3271 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "" + +#: rewrite/rewriteHandler.c:2130 rewrite/rewriteHandler.c:4265 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:2195 +#: rewrite/rewriteHandler.c:2235 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:2547 +#: rewrite/rewriteHandler.c:2598 msgid "Junk view columns are not updatable." msgstr "ნაგვის ნახვის სვეტები განახლებადი არაა." -#: rewrite/rewriteHandler.c:2552 +#: rewrite/rewriteHandler.c:2603 msgid "View columns that are not columns of their base relation are not updatable." msgstr "ხედის სვეტები, რომლებიც მათი საბაზისო ურთიერთობის სვეტები არიან, განახლებადი არაა." -#: rewrite/rewriteHandler.c:2555 +#: rewrite/rewriteHandler.c:2606 msgid "View columns that refer to system columns are not updatable." msgstr "ხედის სვეტები, რომლებიც სისტემურ სვეტებზეა მიბმული, განახლებადი არაა." -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2609 msgid "View columns that return whole-row references are not updatable." msgstr "ხედის სვეტები, რომლებიც მთელ-მწკრივიან ბმებზე მიუთითებენ, განახლებადი არაა." -#: rewrite/rewriteHandler.c:2619 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing DISTINCT are not automatically updatable." msgstr "\"DISTINCT\"-ის შემცველი ხედები განახლებადი არაა." -#: rewrite/rewriteHandler.c:2622 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing GROUP BY are not automatically updatable." msgstr "\"GROUP BY\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2625 +#: rewrite/rewriteHandler.c:2676 msgid "Views containing HAVING are not automatically updatable." msgstr "\"HAVING\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2679 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "\"UNION\"-ის, \"INTERSECT\"-ის და \"EXCEPT\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2682 msgid "Views containing WITH are not automatically updatable." msgstr "\"WITH\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2685 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "\"LIMIT\"-ის და \"OFFSET\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2646 +#: rewrite/rewriteHandler.c:2697 msgid "Views that return aggregate functions are not automatically updatable." msgstr "ხედები, რომლებიც აგრეგატულ ფუნქციებს აბრუნებენ, თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2649 +#: rewrite/rewriteHandler.c:2700 msgid "Views that return window functions are not automatically updatable." msgstr "ხედები, რომლებიც ფანჯრის ფუნქციებს აბრუნებენ, თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2652 +#: rewrite/rewriteHandler.c:2703 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:2710 rewrite/rewriteHandler.c:2714 rewrite/rewriteHandler.c:2722 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2674 +#: rewrite/rewriteHandler.c:2725 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2698 +#: rewrite/rewriteHandler.c:2749 msgid "Views that have no updatable columns are not automatically updatable." msgstr "ხედები, რომლებსაც განახლებადი ცხრილები არ გააჩნია, ავტომატურად განახლებადები არ არიან." -#: rewrite/rewriteHandler.c:3079 rewrite/rewriteHandler.c:3114 +#: rewrite/rewriteHandler.c:3130 rewrite/rewriteHandler.c:3165 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ხედში ჩამატება შეუძლებელია: %s" -#: rewrite/rewriteHandler.c:3082 +#: rewrite/rewriteHandler.c:3133 #, 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:3138 rewrite/rewriteHandler.c:3174 #, c-format msgid "cannot update view \"%s\"" msgstr "ხედის განახლება შეუძლებელია: %s" -#: rewrite/rewriteHandler.c:3090 +#: rewrite/rewriteHandler.c:3141 #, 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:3146 rewrite/rewriteHandler.c:3183 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ხედიდან წაშლა შეუძლებელია: %s" -#: rewrite/rewriteHandler.c:3098 +#: rewrite/rewriteHandler.c:3149 #, 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:3168 #, 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:3177 #, 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:3186 #, 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:3361 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ხედის (\"%2$s\") სვეტში \"%1$s\" მონაცემის ჩასმა შეუძლებელია" -#: rewrite/rewriteHandler.c:3297 +#: rewrite/rewriteHandler.c:3369 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ხედის (\"%2$s\") სვეტის \"%1$s\" განახლება შეუძლებელია" -#: rewrite/rewriteHandler.c:3305 +#: rewrite/rewriteHandler.c:3377 #, c-format msgid "cannot merge into column \"%s\" of view \"%s\"" msgstr "ხედის (\"%2$s\") სვეტთან \"%1$s\" შერწყმა შეუძლებელია" -#: rewrite/rewriteHandler.c:3333 +#: rewrite/rewriteHandler.c:3405 #, c-format msgid "cannot merge into view \"%s\"" msgstr "შეუძლებელია შერწყმა ხედში \"%s\"" -#: rewrite/rewriteHandler.c:3335 +#: rewrite/rewriteHandler.c:3407 #, 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:3408 #, 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:3923 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3866 +#: rewrite/rewriteHandler.c:3934 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3880 +#: rewrite/rewriteHandler.c:3948 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3884 +#: rewrite/rewriteHandler.c:3952 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3889 +#: rewrite/rewriteHandler.c:3957 #, 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:4217 msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:4246 +#: rewrite/rewriteHandler.c:4314 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" 'INSERT RETURNING'-ის განხორციელება შეუძლებელია" -#: rewrite/rewriteHandler.c:4248 +#: rewrite/rewriteHandler.c:4316 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" -#: rewrite/rewriteHandler.c:4253 +#: rewrite/rewriteHandler.c:4321 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" 'UPDATE RETURNING'-ის განხორციელება შეუძლებელია" -#: rewrite/rewriteHandler.c:4255 +#: rewrite/rewriteHandler.c:4323 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" -#: rewrite/rewriteHandler.c:4260 +#: rewrite/rewriteHandler.c:4328 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" 'DELETE RETURNING'-ის განხორციელება შეუძლებელია" -#: rewrite/rewriteHandler.c:4262 +#: rewrite/rewriteHandler.c:4330 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" -#: rewrite/rewriteHandler.c:4280 +#: rewrite/rewriteHandler.c:4348 #, 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:4405 #, 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:1222 #, c-format msgid "conditional utility statements are not implemented" msgstr "პირობითი სამსახურეობრივი გამოსახულებები განხორციელებული არაა" -#: rewrite/rewriteManip.c:1427 +#: rewrite/rewriteManip.c:1567 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF ხედზე განხორციელებული არაა" -#: rewrite/rewriteManip.c:1762 +#: rewrite/rewriteManip.c:1970 #, 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 "" @@ -21979,7 +22626,7 @@ msgstr "$-ით დაწყებული სტრიქონ დაუმ msgid "zero-length delimited identifier" msgstr "გამყოფის ნულოვანი სიგრძის იდენტიფიკატორი" -#: scan.l:825 syncrep_scanner.l:101 +#: scan.l:825 syncrep_scanner.l:114 msgid "unterminated quoted identifier" msgstr "დაუსრულებელი იდენტიფიკატორი ბრჭყალებში" @@ -21988,317 +22635,549 @@ msgid "operator too long" msgstr "ოპერატორი ძალიან გრძელია" #: scan.l:1001 +msgid "parameter number too large" +msgstr "პარამეტრების რაოდენობა მეტისმეტად დიდია" + +#: scan.l:1007 msgid "trailing junk after parameter" msgstr "პარამეტრის შემდეგ მოყოლილი მონაცემები ნაგავია" -#: scan.l:1022 +#: scan.l:1028 msgid "invalid hexadecimal integer" msgstr "არასწორი თექვსმეტობითი მთელი რიცხვი" -#: scan.l:1026 +#: scan.l:1032 msgid "invalid octal integer" msgstr "არასწორი რვაობითი მთელი რიცხვი" -#: scan.l:1030 +#: scan.l:1036 msgid "invalid binary integer" msgstr "არასწორი ბინარული მთელი რიცხვი" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1237 +#: scan.l:1231 #, 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:1239 #, c-format msgid "%s at or near \"%s\"" msgstr "%s \"%s\"-სთან ან ახლოს" -#: scan.l:1437 +#: scan.l:1431 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "სტრიქონში \\' არასტანდარტულადაა გამოყენებული" -#: scan.l:1438 +#: scan.l:1432 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "" -#: scan.l:1447 +#: scan.l:1441 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "სტრიქონში \\\\ არასტანდარტულადაა გამოყენებული" -#: scan.l:1448 +#: scan.l:1442 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "" -#: scan.l:1462 +#: scan.l:1456 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "" -#: scan.l:1463 +#: scan.l:1457 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "" -#: snowball/dict_snowball.c:215 +#: snowball/dict_snowball.c:220 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "" -#: snowball/dict_snowball.c:238 tsearch/dict_ispell.c:74 tsearch/dict_simple.c:49 +#: snowball/dict_snowball.c:243 tsearch/dict_ispell.c:75 tsearch/dict_simple.c:50 #, c-format msgid "multiple StopWords parameters" msgstr "გამეორებადი StopWords პარამეტრი" -#: snowball/dict_snowball.c:247 +#: snowball/dict_snowball.c:252 #, c-format msgid "multiple Language parameters" msgstr "გამეორებადი Language პარამეტრი" -#: snowball/dict_snowball.c:254 +#: snowball/dict_snowball.c:259 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "" -#: snowball/dict_snowball.c:262 +#: snowball/dict_snowball.c:267 #, c-format msgid "missing Language parameter" msgstr "აკლია პარამეტრი Language" -#: statistics/extended_stats.c:176 -#, c-format -msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" -msgstr "" - -#: statistics/mcv.c:1368 +#: statistics/attribute_stats.c:191 statistics/attribute_stats.c:932 statistics/relation_stats.c:98 #, c-format -msgid "function returning record called in context that cannot accept type record" -msgstr "ფუნქცია, რომელიც ჩანაწერს აბრუნებს, გამოძახებულია კონტექსტში, რომელსაც ჩანაწერის მიღება არ შეუძლია" +msgid "Statistics cannot be modified during recovery." +msgstr "აღდგენის დროს სტატისტიკას ვერ შეცვლით." -#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 +#: statistics/attribute_stats.c:202 #, c-format -msgid "cannot access temporary tables of other sessions" -msgstr "სხვა სესიების დროებით ცხრილებთან წვდომა შეუძლებელია" +msgid "cannot specify both attname and attnum" +msgstr "ორივეს attname და attnum ვერ მიუთითებთ" -#: storage/buffer/bufmgr.c:1532 +#: statistics/attribute_stats.c:228 #, c-format -msgid "invalid page in block %u of relation %s; zeroing out page" -msgstr "" +msgid "must specify either attname or attnum" +msgstr "აუცილებელია, მიუთითოთ attname ან attnum" -#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 +#: statistics/attribute_stats.c:236 #, c-format -msgid "cannot extend relation %s beyond %u blocks" -msgstr "" +msgid "cannot modify statistics on system column \"%s\"" +msgstr "სტატისტიკის შეცვლა შეუძლებელია სისტემურ სვეტზე \"%s\"" -#: storage/buffer/bufmgr.c:2348 +#: statistics/attribute_stats.c:300 #, c-format -msgid "unexpected data beyond EOF in block %u of relation %s" -msgstr "" +msgid "unable to determine element type of attribute \"%s\"" +msgstr "ატრიბუტის \"%s\" ელემენტის დადგენა შეუძლებელია" -#: storage/buffer/bufmgr.c:2350 +#: statistics/attribute_stats.c:301 #, c-format -msgid "This has been seen to occur with buggy kernels; consider updating your system." +msgid "Cannot set STATISTIC_KIND_MCELEM or STATISTIC_KIND_DECHIST." msgstr "" -#: storage/buffer/bufmgr.c:5653 -#, c-format -msgid "could not write block %u of %s" -msgstr "%2$s-ის %1$u ბლოკის ჩაწერა შეუძლებელია" - -#: storage/buffer/bufmgr.c:5655 +#: statistics/attribute_stats.c:316 #, c-format -msgid "Multiple failures --- write error might be permanent." -msgstr "ბევრი შეცდომა --- ჩაწერის შეცდომა შეიძლება მუდმივი იყოს." +msgid "could not determine less-than operator for attribute \"%s\"" +msgstr "შეუძლებელია ნაკლებია ვიდრე ოპერატორის დადგენა ატრიბუტისთვის \"%s\"" -#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 +#: statistics/attribute_stats.c:317 #, c-format -msgid "writing block %u of relation %s" +msgid "Cannot set STATISTIC_KIND_HISTOGRAM or STATISTIC_KIND_CORRELATION." msgstr "" -#: storage/buffer/localbuf.c:220 +#: statistics/attribute_stats.c:330 #, c-format -msgid "no empty local buffer available" -msgstr "ცარიელი ლოკალური ბაფერები მიუწვდომელია" +msgid "attribute \"%s\" is not a range type" +msgstr "ატრიბუტი \"%s\" შუალედის ტიპი არაა" -#: storage/buffer/localbuf.c:597 +#: statistics/attribute_stats.c:331 #, c-format -msgid "cannot access temporary tables during a parallel operation" +msgid "Cannot set STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM or STATISTIC_KIND_BOUNDS_HISTOGRAM." msgstr "" -#: storage/buffer/localbuf.c:712 +#: statistics/attribute_stats.c:590 statistics/attribute_stats.c:598 #, c-format -msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." -msgstr "" +msgid "attribute %d of relation \"%s\" does not exist" +msgstr "ატრიბუტი %d ურთიერთობისთვის \"%s\" არ არსებობს" -#: storage/file/buffile.c:338 +#: statistics/attribute_stats.c:732 statistics/stat_utils.c:80 #, c-format -msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" -msgstr "" +msgid "\"%s\" array cannot contain NULL values" +msgstr "\"%s\" მასივი, არ შეიძლება, NULL მნიშვნელობებს შეიცავდეს" -#: storage/file/buffile.c:632 +#: statistics/attribute_stats.c:775 #, c-format -msgid "could not read from file set \"%s\": read only %zu of %zu bytes" -msgstr "ფაილების სეტიდან (\"%s\") წაკითხვის შეცდომა: წავიკითხე მხოლოდ %zu ბაიტი %zu-დან" +msgid "maximum number of statistics slots exceeded: %d" +msgstr "გადაცილებულია სტატისტიკის სლოტების მაქსიმალური რაოდენობა: %d" -#: storage/file/buffile.c:634 +#: statistics/attribute_stats.c:942 #, c-format -msgid "could not read from temporary file: read only %zu of %zu bytes" -msgstr "დროებით ფაილიდან წაკითხვის შეცდომა: წავიკითხე მხოლოდ %zu ბაიტი %zu-დან" +msgid "cannot clear statistics on system column \"%s\"" +msgstr "სტატისტიკის გასუფთავება შეუძლებელია სისტემურ სვეტზე \"%s\"" -#: storage/file/buffile.c:774 storage/file/buffile.c:877 +#: statistics/extended_stats.c:175 #, c-format -msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" +msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "" -#: storage/file/buffile.c:956 +#: statistics/mcv.c:1368 #, c-format -msgid "could not delete fileset \"%s\": %m" -msgstr "ფაილების სეტის (\"%s\") წაშლის შეცდომა: %m" +msgid "function returning record called in context that cannot accept type record" +msgstr "ფუნქცია, რომელიც ჩანაწერს აბრუნებს, გამოძახებულია კონტექსტში, რომელსაც ჩანაწერის მიღება არ შეუძლია" -#: storage/file/buffile.c:974 storage/smgr/md.c:336 storage/smgr/md.c:1192 +#: statistics/relation_stats.c:115 #, c-format -msgid "could not truncate file \"%s\": %m" -msgstr "ფაილის (%s) მოკვეთის შეცდომა: %m" +msgid "reltuples cannot be < -1.0" +msgstr "reltuples ვერ იქნება < -1.0" -#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 +#: statistics/stat_utils.c:44 #, c-format -msgid "could not flush dirty data: %m" -msgstr "" +msgid "\"%s\" cannot be NULL" +msgstr "\"%s\" არ შეიძლება, NULL იყოს" -#: storage/file/fd.c:613 +#: statistics/stat_utils.c:71 #, c-format -msgid "could not determine dirty data size: %m" -msgstr "" +msgid "\"%s\" cannot be a multidimensional array" +msgstr "\"%s\" მრავალგანზომილებიანი მასივი ვერ იქნება" -#: storage/file/fd.c:665 +#: statistics/stat_utils.c:111 #, c-format -msgid "could not munmap() while flushing data: %m" -msgstr "" +msgid "\"%s\" must be specified when \"%s\" is specified" +msgstr "\"%s\"-ის მითითება აუცილებელია, როცა მიუთითებთ \"%s\"-ს" -#: storage/file/fd.c:983 +#: statistics/stat_utils.c:178 #, c-format -msgid "getrlimit failed: %m" -msgstr "getrlimit-ის შეცდომა: %m" +msgid "cannot modify statistics for relation \"%s\"" +msgstr "სტატისტიკის შეცვლა ურთიერთობისთვის \"%s\" შეუძლებელია" -#: storage/file/fd.c:1073 +#: statistics/stat_utils.c:199 #, c-format -msgid "insufficient file descriptors available to start server process" -msgstr "სერვერის პროცესის გასაშვებად საკმარისი ფაილის დესკრიპტორების ხელმისაწვდომი არაა" +msgid "cannot modify statistics for shared relation" +msgstr "გაზიარებული ურთიერთობისთვის სტატისტიკის შეცვლა შეუძლებელია" -#: storage/file/fd.c:1074 +#: statistics/stat_utils.c:252 #, c-format -msgid "System allows %d, server needs at least %d." -msgstr "სისტემა გვიშვებს %d, სერვერს კი სჭირდება %d." +msgid "unrecognized argument name: \"%s\"" +msgstr "უცნობი არგუმენტის სახელი: \"%s\"" -#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 storage/file/fd.c:2878 +#: statistics/stat_utils.c:266 #, c-format -msgid "out of file descriptors: %m; release and retry" -msgstr "ფაილების დესკრიპტორების საკმარისი არაა: %m. გაათავისუფლეთ და თავიდან სცადეთ" +msgid "argument \"%s\" has type \"%s\", expected type \"%s\"" +msgstr "არგუმენტს \"%s\" აქვს ტიპი \"%s\". მოველოდი ტიპს \"%s\"" -#: storage/file/fd.c:1536 +#: statistics/stat_utils.c:307 #, c-format -msgid "temporary file: path \"%s\", size %lu" -msgstr "დროებითი ფაილი: ბილიკი \"%s\", ზომა %lu" +msgid "variadic arguments must be name/value pairs" +msgstr "variadic არგუმენტები სახელი/მნიშვნელობის წყვილები უნდა იყოს" -#: storage/file/fd.c:1675 +#: statistics/stat_utils.c:308 #, c-format -msgid "cannot create temporary directory \"%s\": %m" -msgstr "დროებითი საქაღალდის (%s) შექმნის შეცდომა: %m" +msgid "Provide an even number of variadic arguments that can be divided into pairs." +msgstr "" -#: storage/file/fd.c:1682 +#: statistics/stat_utils.c:322 #, c-format -msgid "cannot create temporary subdirectory \"%s\": %m" -msgstr "დროებითი ქვესაქაღალდის (%s) შექმნის შეცდომა: %m" +msgid "name at variadic position %d is NULL" +msgstr "სახელი variadic მდებარეობაზე %d NULL-ს უდრის" -#: storage/file/fd.c:1879 +#: statistics/stat_utils.c:326 #, c-format -msgid "could not create temporary file \"%s\": %m" -msgstr "დროებითი ფაილის (%s) შექმნის შეცდომა: %m" +msgid "name at variadic position %d has type \"%s\", expected type \"%s\"" +msgstr "" -#: storage/file/fd.c:1915 +#: storage/aio/aio.c:1222 #, c-format -msgid "could not open temporary file \"%s\": %m" -msgstr "დროებითი ფაილის (\"%s\") გახსნის შეცდომა: %m" +msgid "Only -1 or values bigger than 0 are valid." +msgstr "" -#: storage/file/fd.c:1956 -#, c-format -msgid "could not unlink temporary file \"%s\": %m" -msgstr "დროებითი ფაილის (%s) ბმულის მოხსნის შეცდომა: %m" +#: storage/aio/method_io_uring.c:171 +msgid "Check if io_uring is disabled via /proc/sys/kernel/io_uring_disabled." +msgstr "" -#: storage/file/fd.c:2044 +#: storage/aio/method_io_uring.c:176 #, c-format -msgid "could not delete file \"%s\": %m" -msgstr "ფაილის (\"%s\") წაშლის შეცდომა: %m" +msgid "Consider increasing \"ulimit -n\" to at least %d." +msgstr "განიხილეთ 'ulimit -n'-ის გაზრდა მინიმუმ %d-მდე." -#: storage/file/fd.c:2234 +#: storage/aio/method_io_uring.c:182 +msgid "Kernel does not support io_uring." +msgstr "ბირთვს io_uring_ის მხარდაჭერა არ გააჩნია." + +#: storage/aio/method_io_uring.c:190 #, c-format -msgid "temporary file size exceeds temp_file_limit (%dkB)" -msgstr "დროებითი ფაილის ზომა temp_file_limit-ს (%dკბ) აჭარბებს" +msgid "could not setup io_uring queue: %m" +msgstr "io_uring რიგის მორგება შეუძლებელია: %m" -#: storage/file/fd.c:2594 storage/file/fd.c:2653 +#: storage/aio/method_io_uring.c:324 #, c-format -msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" -msgstr "გადაცილებულია maxAllocatedDescs (%d) როცა ვცდილობდი, გამეხსნა ფაილი \"%s\"" +msgid "completing I/O on behalf of process %d" +msgstr "" -#: storage/file/fd.c:2698 +#: storage/aio/method_worker.c:379 #, c-format -msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" -msgstr "გადაცილებულია maxAllocatedDescs (%d) როცა ვცდილობდი, გამეშვა ბრძანება \"%s\"" +msgid "I/O worker executing I/O on behalf of process %d" +msgstr "" -#: storage/file/fd.c:2854 +#: storage/buffer/bufmgr.c:662 storage/buffer/bufmgr.c:818 #, c-format -msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" +msgid "cannot access temporary tables of other sessions" +msgstr "სხვა სესიების დროებით ცხრილებთან წვდომა შეუძლებელია" + +#: storage/buffer/bufmgr.c:2708 storage/buffer/localbuf.c:393 +#, c-format +msgid "cannot extend relation %s beyond %u blocks" +msgstr "" + +#: storage/buffer/bufmgr.c:2779 +#, c-format +msgid "unexpected data beyond EOF in block %u of relation %s" +msgstr "" + +#: storage/buffer/bufmgr.c:2782 +#, c-format +msgid "This has been seen to occur with buggy kernels; consider updating your system." +msgstr "" + +#: storage/buffer/bufmgr.c:6185 +#, c-format +msgid "could not write block %u of %s" +msgstr "%2$s-ის %1$u ბლოკის ჩაწერა შეუძლებელია" + +#: storage/buffer/bufmgr.c:6189 +#, c-format +msgid "Multiple failures --- write error might be permanent." +msgstr "ბევრი შეცდომა --- ჩაწერის შეცდომა შეიძლება მუდმივი იყოს." + +#: storage/buffer/bufmgr.c:6206 storage/buffer/bufmgr.c:6221 +#, c-format +msgid "writing block %u of relation %s" +msgstr "" + +#: storage/buffer/bufmgr.c:7320 +#, c-format +msgid "zeroing %u page(s) and ignoring %u checksum failure(s) among blocks %u..%u of relation %s" +msgstr "" + +#: storage/buffer/bufmgr.c:7323 storage/buffer/bufmgr.c:7349 +#, c-format +msgid "Block %u held first zeroed page." +msgstr "" + +#: storage/buffer/bufmgr.c:7325 +#, c-format +msgid "See server log for details about the other %u invalid block(s)." +msgstr "" + +#: storage/buffer/bufmgr.c:7340 +#, c-format +msgid "%u invalid pages among blocks %u..%u of relation %s" +msgstr "%u არასწორი გვერდი ბლოკების %u..%u გასწვრივ ურთიერთობისთვის %s" + +#: storage/buffer/bufmgr.c:7341 +#, c-format +msgid "Block %u held first invalid page." +msgstr "" + +#: storage/buffer/bufmgr.c:7342 +#, c-format +msgid "See server log for the other %u invalid block(s)." +msgstr "დარჩენილი %u არასწორი ბლოკისთვის იხილეთ სერვერის ჟურნალი." + +#: storage/buffer/bufmgr.c:7347 +#, c-format +msgid "invalid page in block %u of relation %s; zeroing out page" +msgstr "" + +#: storage/buffer/bufmgr.c:7348 +#, c-format +msgid "zeroing out %u invalid pages among blocks %u..%u of relation %s" +msgstr "მიმდინარეობს %u არასწორი გვერდის განულება ბლოკების %u..%u გასწვრივ ურთიერთობისთვის %s" + +#: storage/buffer/bufmgr.c:7350 +#, c-format +msgid "See server log for the other %u zeroed block(s)." +msgstr "დარჩენილი %u განულებული ბლოკისთვის იხილეთ სერვერის ჟურნალი." + +#: storage/buffer/bufmgr.c:7355 +#, c-format +msgid "ignoring checksum failure in block %u of relation %s" +msgstr "ურთიერთობის (%2$s) ბლოკის (%1$u) საკონტროლო ჯამის გამოთვლის ჩავარდნა გამოტოვებული იქნება" + +#: storage/buffer/bufmgr.c:7356 +#, c-format +msgid "ignoring %u checksum failures among blocks %u..%u of relation %s" +msgstr "გამოტოვებული იქნება %u საკონტროლო ჯამის გამოთვლის ჩავარდნა ბლოკების %u..%u გასწვრივ ურთიერთობისთვის %s" + +#: storage/buffer/bufmgr.c:7357 +#, c-format +msgid "Block %u held first ignored page." +msgstr "" + +#: storage/buffer/bufmgr.c:7358 +#, c-format +msgid "See server log for the other %u ignored block(s)." +msgstr "დარჩენილი %u გამოტოვებული ბლოკისთვის იხილეთ სერვერის ჟურნალი." + +#: storage/buffer/localbuf.c:272 +#, c-format +msgid "no empty local buffer available" +msgstr "ცარიელი ლოკალური ბაფერები მიუწვდომელია" + +#: storage/buffer/localbuf.c:736 +#, c-format +msgid "cannot access temporary tables during a parallel operation" +msgstr "" + +#: storage/buffer/localbuf.c:876 +#, c-format +msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." +msgstr "" + +#: storage/file/buffile.c:338 +#, c-format +msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" +msgstr "" + +#: storage/file/buffile.c:632 +#, c-format +msgid "could not read from file set \"%s\": read only %zu of %zu bytes" +msgstr "ფაილების სეტიდან (\"%s\") წაკითხვის შეცდომა: წავიკითხე მხოლოდ %zu ბაიტი %zu-დან" + +#: storage/file/buffile.c:634 +#, c-format +msgid "could not read from temporary file: read only %zu of %zu bytes" +msgstr "დროებით ფაილიდან წაკითხვის შეცდომა: წავიკითხე მხოლოდ %zu ბაიტი %zu-დან" + +#: storage/file/buffile.c:774 storage/file/buffile.c:875 +#, c-format +msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" +msgstr "" + +#: storage/file/buffile.c:951 +#, c-format +msgid "could not delete fileset \"%s\": %m" +msgstr "ფაილების სეტის (\"%s\") წაშლის შეცდომა: %m" + +#: storage/file/buffile.c:969 storage/smgr/md.c:356 storage/smgr/md.c:1318 +#, c-format +msgid "could not truncate file \"%s\": %m" +msgstr "ფაილის (%s) მოკვეთის შეცდომა: %m" + +#: storage/file/copydir.c:244 storage/file/copydir.c:275 +#, c-format +msgid "could not clone file \"%s\" to \"%s\": %m" +msgstr "ფაილის \"%s\"-დან \"%s\"-ში დაკლონვა შეუძლებელია: %m" + +#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 +#, c-format +msgid "could not flush dirty data: %m" +msgstr "" + +#: storage/file/fd.c:613 +#, c-format +msgid "could not determine dirty data size: %m" +msgstr "" + +#: storage/file/fd.c:665 +#, c-format +msgid "could not munmap() while flushing data: %m" +msgstr "" + +#: storage/file/fd.c:983 +#, c-format +msgid "getrlimit failed: %m" +msgstr "getrlimit-ის შეცდომა: %m" + +#: storage/file/fd.c:1074 +#, c-format +msgid "insufficient file descriptors available to start server process" +msgstr "სერვერის პროცესის გასაშვებად საკმარისი ფაილის დესკრიპტორების ხელმისაწვდომი არაა" + +#: storage/file/fd.c:1075 +#, c-format +msgid "System allows %d, server needs at least %d, %d files are already open." +msgstr "სისტემა გვიშვებს %d, სერვერს კი სჭირდება %d. უკვე ღიაა %d ფაილი." + +#: storage/file/fd.c:1164 storage/file/fd.c:2679 storage/file/fd.c:2788 storage/file/fd.c:2942 +#, c-format +msgid "out of file descriptors: %m; release and retry" +msgstr "ფაილების დესკრიპტორების საკმარისი არაა: %m. გაათავისუფლეთ და თავიდან სცადეთ" + +#: storage/file/fd.c:1540 +#, c-format +msgid "temporary file: path \"%s\", size %lu" +msgstr "დროებითი ფაილი: ბილიკი \"%s\", ზომა %lu" + +#: storage/file/fd.c:1679 +#, c-format +msgid "cannot create temporary directory \"%s\": %m" +msgstr "დროებითი საქაღალდის (%s) შექმნის შეცდომა: %m" + +#: storage/file/fd.c:1686 +#, c-format +msgid "cannot create temporary subdirectory \"%s\": %m" +msgstr "დროებითი ქვესაქაღალდის (%s) შექმნის შეცდომა: %m" + +#: storage/file/fd.c:1883 +#, c-format +msgid "could not create temporary file \"%s\": %m" +msgstr "დროებითი ფაილის (%s) შექმნის შეცდომა: %m" + +#: storage/file/fd.c:1919 +#, c-format +msgid "could not open temporary file \"%s\": %m" +msgstr "დროებითი ფაილის (\"%s\") გახსნის შეცდომა: %m" + +#: storage/file/fd.c:1960 +#, c-format +msgid "could not unlink temporary file \"%s\": %m" +msgstr "დროებითი ფაილის (%s) ბმულის მოხსნის შეცდომა: %m" + +#: storage/file/fd.c:2050 +#, c-format +msgid "could not delete file \"%s\": %m" +msgstr "ფაილის (\"%s\") წაშლის შეცდომა: %m" + +#: storage/file/fd.c:2289 +#, c-format +msgid "temporary file size exceeds \"temp_file_limit\" (%dkB)" +msgstr "დროებითი ფაილის ზომა 'temp_file_limit\"-ს (%dკბ) აჭარბებს" + +#: storage/file/fd.c:2655 storage/file/fd.c:2714 +#, c-format +msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" +msgstr "გადაცილებულია maxAllocatedDescs (%d) როცა ვცდილობდი, გამეხსნა ფაილი \"%s\"" + +#: storage/file/fd.c:2759 +#, c-format +msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" +msgstr "გადაცილებულია maxAllocatedDescs (%d) როცა ვცდილობდი, გამეშვა ბრძანება \"%s\"" + +#: storage/file/fd.c:2918 +#, c-format +msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "გადაცილებულია maxAllocatedDescs (%d) როცა ვცდილობდი, გამეხსნა საქაღალდე \"%s\"" -#: storage/file/fd.c:3384 +#: storage/file/fd.c:3449 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "დროებითი ფაილების საქაღალდეში აღმოჩენილია მოულოდნელი ფაილი: \"%s\"" -#: storage/file/fd.c:3502 +#: storage/file/fd.c:3567 #, c-format msgid "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" msgstr "" -#: storage/file/fd.c:3729 +#: storage/file/fd.c:3794 #, c-format msgid "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "" -#: storage/file/fd.c:3761 +#: storage/file/fd.c:3826 #, c-format msgid "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "" -#: storage/file/fd.c:3950 +#: storage/file/fd.c:4015 #, c-format -msgid "\"debug_io_direct\" is not supported on this platform." -msgstr "\"debug_io_direct\" ამ პლატფორმაზე მხარდაჭერილი არაა." +msgid "\"%s\" is not supported on this platform." +msgstr "ამ პლატფორმაზე \"%s\" მხარდაჭერილი არაა." -#: storage/file/fd.c:3964 +#: storage/file/fd.c:4030 #, c-format -msgid "Invalid list syntax in parameter \"%s\"" -msgstr "არასწორი სიის სინტაქსი პარამეტრში \"%s\"" +msgid "Invalid list syntax in parameter \"%s\"." +msgstr "არასწორი სიის სინტაქსი პარამეტრში \"%s\"." -#: storage/file/fd.c:3984 +#: storage/file/fd.c:4050 tcop/backend_startup.c:1054 #, c-format -msgid "Invalid option \"%s\"" -msgstr "არასწორი პარამეტრი \"%s\"" +msgid "Invalid option \"%s\"." +msgstr "არასწორი პარამეტრი \"%s\"." -#: storage/file/fd.c:3997 +#: storage/file/fd.c:4063 #, c-format -msgid "\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" -msgstr "\"debug_io_direct\" მხარდაჭერილი არაა WAL-სთვის, რადგან XLOG_BLCKSZ ძალიან პატარაა" +msgid "\"%s\" is not supported for WAL because %s is too small." +msgstr "\"%s\" მხარდაჭერილი არაა WAL-სთვის, რადგან %s ძალიან პატარაა." -#: storage/file/fd.c:4004 +#: storage/file/fd.c:4071 #, c-format -msgid "\"debug_io_direct\" is not supported for data because BLCKSZ is too small" -msgstr "\"debug_io_direct\" მონაცემებისთვის მხარდაჭერილი არაა, რადგან BLCKSZ ძალიან პატარაა" +msgid "\"%s\" is not supported for data because %s is too small." +msgstr "\"%s\" მხარდაჭერილი არაა მონაცემებისთვის, რადგან %s ძალიან პატარაა." #: storage/file/reinit.c:145 #, c-format @@ -22400,36 +23279,46 @@ msgstr "DSM სეგმენტის ზომა არანულოვა 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:458 tcop/backend_startup.c:343 #, c-format msgid "sorry, too many clients already" msgstr "უკაცრავად, უკვე მეტისმეტად ბევრი კლიენტია" -#: storage/ipc/procarray.c:3845 +#: storage/ipc/procarray.c:3858 #, 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:3894 storage/ipc/procarray.c:3902 storage/ipc/signalfuncs.c:256 storage/ipc/signalfuncs.c:263 storage/ipc/signalfuncs.c:270 #, c-format msgid "permission denied to terminate process" msgstr "პროცესის შეწყვეტის წვდომა აკრძალულია" -#: storage/ipc/procarray.c:3882 storage/ipc/signalfuncs.c:236 +#: storage/ipc/procarray.c:3895 storage/ipc/signalfuncs.c:257 #, 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:3903 storage/ipc/signalfuncs.c:271 #, 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 "" -#: storage/ipc/procsignal.c:416 +#: storage/ipc/procsignal.c:450 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "" +#: storage/ipc/procsignal.c:786 +#, c-format +msgid "wrong key in cancel request for process %d" +msgstr "არასწორი გასაღები გაუქმების მოთხოვნაში პროცესისთვის %d" + +#: storage/ipc/procsignal.c:795 +#, c-format +msgid "PID %d in cancel request did not match any process" +msgstr "PID %d, მოთხოვნილი გაუქმების მოთხოვნაში, არც ერთ პროცესს არ ემთხვევა" + #: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" @@ -22440,7 +23329,7 @@ msgstr "გაზიარებული მეხსიერების რ 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:1038 storage/lmgr/lock.c:1076 storage/lmgr/lock.c:2965 storage/lmgr/lock.c:4370 storage/lmgr/lock.c:4435 storage/lmgr/lock.c:4785 storage/lmgr/predicate.c:2478 storage/lmgr/predicate.c:2493 storage/lmgr/predicate.c:3890 storage/lmgr/predicate.c:4937 utils/hash/dynahash.c:1095 #, c-format msgid "out of shared memory" msgstr "არასაკმარისი გაზიარებული მეხსიერება" @@ -22470,186 +23359,196 @@ msgstr "" msgid "requested shared memory size overflows size_t" msgstr "მოთხოვნილი გაზიარებული მეხსიერების ზომა site_t-ის გადავსებას იწვევს" -#: storage/ipc/signalfuncs.c:72 +#: storage/ipc/signalfuncs.c:74 #, c-format 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:123 storage/lmgr/proc.c:1547 utils/adt/mcxtfuncs.c:314 utils/adt/mcxtfuncs.c:412 #, c-format msgid "could not send signal to process %d: %m" msgstr "პროცესისთვის %d სიგნალის გაგზავნა შეუძლებელია: %m" -#: storage/ipc/signalfuncs.c:129 storage/ipc/signalfuncs.c:136 +#: storage/ipc/signalfuncs.c:143 storage/ipc/signalfuncs.c:150 storage/ipc/signalfuncs.c:157 #, c-format msgid "permission denied to cancel query" msgstr "მოთხოვნის გაუქმების წვდომა აკრძალულია" -#: storage/ipc/signalfuncs.c:130 +#: storage/ipc/signalfuncs.c:144 #, c-format msgid "Only roles with the %s attribute may cancel queries of roles with the %s attribute." msgstr "" -#: storage/ipc/signalfuncs.c:137 +#: storage/ipc/signalfuncs.c:151 +#, c-format +msgid "Only roles with privileges of the \"%s\" role may cancel autovacuum workers." +msgstr "ავტომომტვერსასრუტებლის დამხმარე პროცესების გაუქმება, მხოლოდ, \"%s\" პრივილეგიის მქონე როლებს შეუძლიათ." + +#: storage/ipc/signalfuncs.c:158 #, c-format msgid "Only roles with privileges of the role whose query is being canceled or with privileges of the \"%s\" role may cancel this query." msgstr "" -#: storage/ipc/signalfuncs.c:179 +#: storage/ipc/signalfuncs.c:200 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "" -#: storage/ipc/signalfuncs.c:197 +#: storage/ipc/signalfuncs.c:218 #, c-format -msgid "backend with PID %d did not terminate within %lld millisecond" -msgid_plural "backend with PID %d did not terminate within %lld milliseconds" +msgid "backend with PID %d did not terminate within % millisecond" +msgid_plural "backend with PID %d did not terminate within % milliseconds" msgstr[0] "" msgstr[1] "" -#: storage/ipc/signalfuncs.c:228 +#: storage/ipc/signalfuncs.c:249 #, c-format msgid "\"timeout\" must not be negative" msgstr "\"timeout\" უარყოფითი არ შეიძლება, იყოს" -#: storage/ipc/signalfuncs.c:285 +#: storage/ipc/signalfuncs.c:264 +#, c-format +msgid "Only roles with privileges of the \"%s\" role may terminate autovacuum workers." +msgstr "ავტომომტვერსასრუტების დამხმარე პროცესების შეწყვეტა, მხოლოდ, \"%s\" პრივილეგიების მქონე როლებს შეუძლიათ." + +#: storage/ipc/signalfuncs.c:313 #, c-format msgid "rotation not possible because log collection not active" msgstr "" -#: storage/ipc/standby.c:329 +#: storage/ipc/standby.c:330 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "" -#: storage/ipc/standby.c:338 +#: storage/ipc/standby.c:339 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "" -#: storage/ipc/standby.c:920 tcop/postgres.c:3169 +#: storage/ipc/standby.c:921 tcop/postgres.c:3225 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "გამოსახულების გაუქმება აღდგენასთან კონფლიქტის გამო" -#: storage/ipc/standby.c:921 tcop/postgres.c:2529 +#: storage/ipc/standby.c:922 tcop/postgres.c:2575 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" -#: storage/ipc/standby.c:1486 +#: storage/ipc/standby.c:1494 msgid "unknown reason" msgstr "უცნობი მიზეზი" -#: storage/ipc/standby.c:1491 +#: storage/ipc/standby.c:1499 msgid "recovery conflict on buffer pin" msgstr "აღდგენის კონფლიქტი ბაფერის მიმაგრებისას" -#: storage/ipc/standby.c:1494 +#: storage/ipc/standby.c:1502 msgid "recovery conflict on lock" msgstr "აღდგენის კონფლიქტი ბლოკირებისას" -#: storage/ipc/standby.c:1497 +#: storage/ipc/standby.c:1505 msgid "recovery conflict on tablespace" msgstr "აღდგენის კონფლიქტი ცხრილების სივრცეზე" -#: storage/ipc/standby.c:1500 +#: storage/ipc/standby.c:1508 msgid "recovery conflict on snapshot" msgstr "აღდგენის კონფლიქტი სწრაფ ასლზე" -#: storage/ipc/standby.c:1503 +#: storage/ipc/standby.c:1511 msgid "recovery conflict on replication slot" msgstr "აღდგენის კონფლიქტი რეპლიკაციის სლოტზე" -#: storage/ipc/standby.c:1506 +#: storage/ipc/standby.c:1514 msgid "recovery conflict on buffer deadlock" msgstr "აღდგენის კონფლიქტი ბაფერის ურთერთბლოკირებისას" -#: storage/ipc/standby.c:1509 +#: storage/ipc/standby.c:1517 msgid "recovery conflict on database" msgstr "აღდგენის კონფლიქტი მონაცემთა ბაზაზე" -#: storage/large_object/inv_api.c:190 +#: storage/large_object/inv_api.c:152 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "" -#: storage/large_object/inv_api.c:272 +#: storage/large_object/inv_api.c:234 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "დიდი ობიექტის არასწორი ალმები: %d" -#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 storage/large_object/inv_api.c:807 +#: storage/large_object/inv_api.c:259 storage/large_object/inv_api.c:271 storage/large_object/inv_api.c:468 storage/large_object/inv_api.c:579 storage/large_object/inv_api.c:769 #, c-format msgid "permission denied for large object %u" msgstr "წვდომა აკრძალულია დიდ ობიექტზე: \"%u\"" -#: storage/large_object/inv_api.c:455 +#: storage/large_object/inv_api.c:417 #, c-format msgid "invalid whence setting: %d" msgstr "არასწორი ორიენტირის პარამეტრი: %d" -#: storage/large_object/inv_api.c:627 +#: storage/large_object/inv_api.c:589 #, c-format msgid "invalid large object write request size: %d" msgstr "არასწორი დიდი ობიექტის ჩაწერის ზომა: %d" -#: storage/lmgr/deadlock.c:1104 +#: storage/lmgr/deadlock.c:1107 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "" -#: storage/lmgr/deadlock.c:1123 +#: storage/lmgr/deadlock.c:1126 #, c-format msgid "Process %d: %s" msgstr "პროცესი %d: %s" -#: storage/lmgr/deadlock.c:1132 +#: storage/lmgr/deadlock.c:1135 #, c-format msgid "deadlock detected" msgstr "ნაპოვნია ურთიერთბლოკირება" -#: storage/lmgr/deadlock.c:1135 +#: storage/lmgr/deadlock.c:1138 #, c-format msgid "See server log for query details." msgstr "მოთხოვნის დეტალებისთვის იხილეთ სერვერის ჟურნალი." -#: storage/lmgr/lmgr.c:858 +#: storage/lmgr/lmgr.c:856 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "კორტეჟის (%u,%u) განახლებისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:861 +#: storage/lmgr/lmgr.c:859 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "კორტეჟის (%u,%u) წაშლისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:864 +#: storage/lmgr/lmgr.c:862 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "კორტეჟის (%u,%u) დაბლოკვისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:867 +#: storage/lmgr/lmgr.c:865 #, 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:868 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:873 +#: storage/lmgr/lmgr.c:871 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:876 +#: storage/lmgr/lmgr.c:874 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:879 +#: storage/lmgr/lmgr.c:877 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" @@ -22719,17 +23618,22 @@ msgstr "დაშორებული ტრანზაქცია %u გა msgid "unrecognized locktag type %d" msgstr "locktag-ის უცნობი ტიპი %d" -#: storage/lmgr/lock.c:790 +#: storage/lmgr/lock.c:866 #, 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:868 #, 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:1182 +#, c-format +msgid "process %d could not obtain %s on %s" +msgstr "პროცესმა %d ვერ მიიღო %s %s-ზე" + +#: storage/lmgr/lock.c:3423 storage/lmgr/lock.c:3491 storage/lmgr/lock.c:3607 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "" @@ -22749,665 +23653,710 @@ msgstr "" msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "" -#: storage/lmgr/predicate.c:1681 +#: storage/lmgr/predicate.c:1696 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "\"default_transaction_isolation\"-ი \"serializable\"-ზეა დაყენებული." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1697 #, 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:1748 #, 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:1827 utils/time/snapmgr.c:556 utils/time/snapmgr.c:562 #, c-format msgid "could not import the requested snapshot" msgstr "მოთხოვნილი სწრაფი ასლის შემოტანა შეუძლებელია" -#: storage/lmgr/predicate.c:1813 utils/time/snapmgr.c:542 +#: storage/lmgr/predicate.c:1828 utils/time/snapmgr.c:563 #, 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:4001 storage/lmgr/predicate.c:4037 storage/lmgr/predicate.c:4070 storage/lmgr/predicate.c:4078 storage/lmgr/predicate.c:4117 storage/lmgr/predicate.c:4347 storage/lmgr/predicate.c:4666 storage/lmgr/predicate.c:4678 storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4761 #, 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:4003 storage/lmgr/predicate.c:4039 storage/lmgr/predicate.c:4072 storage/lmgr/predicate.c:4080 storage/lmgr/predicate.c:4119 storage/lmgr/predicate.c:4349 storage/lmgr/predicate.c:4668 storage/lmgr/predicate.c:4680 storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4763 #, c-format msgid "The transaction might succeed if retried." msgstr "ტრანზაქცია შეიძლება გაიტანოს, თუ გაიმეორებთ." -#: storage/lmgr/proc.c:348 +#: storage/lmgr/proc.c:454 #, c-format msgid "number of requested standby connections exceeds \"max_wal_senders\" (currently %d)" msgstr "" -#: storage/lmgr/proc.c:1541 +#: storage/lmgr/proc.c:1592 #, 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:1607 #, 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:1616 #, 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:1623 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "" -#: storage/lmgr/proc.c:1589 +#: storage/lmgr/proc.c:1640 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "" -#: storage/page/bufpage.c:152 +#: storage/page/bufpage.c:154 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "" -#: storage/page/bufpage.c:217 storage/page/bufpage.c:730 storage/page/bufpage.c:1073 storage/page/bufpage.c:1208 storage/page/bufpage.c:1314 storage/page/bufpage.c:1426 +#: storage/page/bufpage.c:216 storage/page/bufpage.c:729 storage/page/bufpage.c:1072 storage/page/bufpage.c:1207 storage/page/bufpage.c:1313 storage/page/bufpage.c:1425 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "" -#: storage/page/bufpage.c:759 +#: storage/page/bufpage.c:758 #, c-format msgid "corrupted line pointer: %u" msgstr "ხაზის დაზიანებული მაჩვენებელი: %u" -#: storage/page/bufpage.c:789 storage/page/bufpage.c:1266 +#: storage/page/bufpage.c:788 storage/page/bufpage.c:1265 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "" -#: storage/page/bufpage.c:1092 storage/page/bufpage.c:1233 storage/page/bufpage.c:1330 storage/page/bufpage.c:1442 +#: storage/page/bufpage.c:1091 storage/page/bufpage.c:1232 storage/page/bufpage.c:1329 storage/page/bufpage.c:1441 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "" -#: storage/smgr/md.c:485 storage/smgr/md.c:547 +#: storage/smgr/md.c:502 storage/smgr/md.c:564 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "" -#: storage/smgr/md.c:500 storage/smgr/md.c:611 +#: storage/smgr/md.c:517 storage/smgr/md.c:628 #, c-format msgid "could not extend file \"%s\": %m" msgstr "ფაილის გაფართოების შეცდომა \"%s\": %m" -#: storage/smgr/md.c:506 +#: storage/smgr/md.c:523 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "" -#: storage/smgr/md.c:589 +#: storage/smgr/md.c:606 #, c-format msgid "could not extend file \"%s\" with FileFallocate(): %m" msgstr "ფაილის (\"%s\") FileFallocate()-ით გაფართოების შეცდომა: %m" -#: storage/smgr/md.c:869 +#: storage/smgr/md.c:899 storage/smgr/md.c:2047 #, c-format msgid "could not read blocks %u..%u in file \"%s\": %m" msgstr "ბლოკების %u..%u წაკითხვის შეცდომა ფაილში \"%s\": %m" -#: storage/smgr/md.c:895 +#: storage/smgr/md.c:946 storage/smgr/md.c:2060 #, c-format msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" msgstr "ვერ წავიკითხე ბლოკები %u..%u ფაილში \"%s\": წავიკითხე, მხოლოდ, %zu ბაიტი %zu-დან" -#: storage/smgr/md.c:995 +#: storage/smgr/md.c:1023 +#, c-format +msgid "could not start reading blocks %u..%u in file \"%s\": %m" +msgstr "ბლოკების %u..%u წაკითხვის დაწყების შეცდომა ფაილში \"%s\": %m" + +#: storage/smgr/md.c:1119 #, c-format 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:1289 #, 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:1344 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "" -#: storage/smgr/md.c:1688 +#: storage/smgr/md.c:1832 #, 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:1846 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "" -#: tcop/backend_startup.c:85 +#: storage/smgr/smgr.c:1106 +#, c-format +msgid "file \"%s\"" +msgstr "ფაილი \"%s\"" + +#: storage/smgr/smgr.c:1108 +#, c-format +msgid "block %u in file \"%s\"" +msgstr "ბლოკი %u ფაილში \"%s\"" + +#: storage/smgr/smgr.c:1112 +#, c-format +msgid "blocks %u..%u in file \"%s\"" +msgstr "ბლოკები %u..%u ფაილში \"%s\"" + +#: tcop/backend_startup.c:104 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL კონფიგურაციის შვილ პროცესში შეტვირთვის შეცდომა" -#: tcop/backend_startup.c:208 +#: tcop/backend_startup.c:226 #, c-format msgid "connection received: host=%s port=%s" msgstr "შემოსული დაკავშირება: ჰოსტი=%s პორტი=%s" -#: tcop/backend_startup.c:213 +#: tcop/backend_startup.c:231 #, c-format msgid "connection received: host=%s" msgstr "შემოსული დაკავშირება: ჰოსტი=%s" -#: tcop/backend_startup.c:277 +#: tcop/backend_startup.c:309 #, c-format msgid "the database system is starting up" msgstr "მიმდინარეობს მონაცემთა ბაზის სისტემის გაშვება" -#: tcop/backend_startup.c:283 +#: tcop/backend_startup.c:315 +#, c-format +msgid "the database system is not accepting connections" +msgstr "მონაცემთა ბაზის სისტემა მიერთებებს არ იღებს" + +#: tcop/backend_startup.c:316 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "ცხელი ლოდინის რეჟიმი გამორთულია." + +#: tcop/backend_startup.c:320 tcop/backend_startup.c:327 #, c-format msgid "the database system is not yet accepting connections" msgstr "მონაცემთა ბაზის სისტემა ჯერ მიერთებებს არ იღებს" -#: tcop/backend_startup.c:284 +#: tcop/backend_startup.c:321 #, c-format -msgid "Consistent recovery state has not been yet reached." +msgid "Recovery snapshot is not yet ready for hot standby." msgstr "" -#: tcop/backend_startup.c:288 +#: tcop/backend_startup.c:322 #, c-format -msgid "the database system is not accepting connections" -msgstr "მონაცემთა ბაზის სისტემა მიერთებებს არ იღებს" +msgid "To enable hot standby, close write transactions with more than %d subtransactions on the primary server." +msgstr "" -#: tcop/backend_startup.c:289 +#: tcop/backend_startup.c:328 #, c-format -msgid "Hot standby mode is disabled." -msgstr "ცხელი ლოდინის რეჟიმი გამორთულია." +msgid "Consistent recovery state has not been yet reached." +msgstr "" -#: tcop/backend_startup.c:294 +#: tcop/backend_startup.c:333 #, c-format msgid "the database system is shutting down" msgstr "მონაცემთა ბაზის სისტემა ითიშება" -#: tcop/backend_startup.c:299 +#: tcop/backend_startup.c:338 #, c-format msgid "the database system is in recovery mode" msgstr "მონაცემთა ბაზის სისტემა აღდგენის რეჟიმშია" -#: tcop/backend_startup.c:414 +#: tcop/backend_startup.c:453 #, c-format msgid "received direct SSL connection request without ALPN protocol negotiation extension" msgstr "" -#: tcop/backend_startup.c:420 +#: tcop/backend_startup.c:459 #, c-format msgid "direct SSL connection accepted" msgstr "პირდაპირი SSL მიერთება მიღებულია" -#: tcop/backend_startup.c:430 +#: tcop/backend_startup.c:469 #, c-format msgid "direct SSL connection rejected" msgstr "პირდაპირი SSL მიერთება უარყოფილია" -#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 +#: tcop/backend_startup.c:528 tcop/backend_startup.c:556 #, c-format msgid "incomplete startup packet" msgstr "გაშვების დაუსრულებელი პაკეტი" -#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 +#: tcop/backend_startup.c:540 #, c-format msgid "invalid length of startup packet" msgstr "გაშვების პაკეტის არასწორი სიგრძე" -#: tcop/backend_startup.c:573 +#: tcop/backend_startup.c:597 #, c-format msgid "SSLRequest accepted" msgstr "" -#: tcop/backend_startup.c:576 +#: tcop/backend_startup.c:600 #, c-format msgid "SSLRequest rejected" msgstr "" -#: tcop/backend_startup.c:585 +#: tcop/backend_startup.c:609 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "შეცდომა SSL მოლაპარაკების პასუხის გაგზავნისას: %m" -#: tcop/backend_startup.c:603 +#: tcop/backend_startup.c:627 #, c-format msgid "received unencrypted data after SSL request" msgstr "'SSL'-ის მოთხოვნის შემდეგ მიღებულია დაუშიფრავი მონაცემები" -#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 +#: tcop/backend_startup.c:628 tcop/backend_startup.c:682 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "" -#: tcop/backend_startup.c:627 +#: tcop/backend_startup.c:651 #, c-format msgid "GSSENCRequest accepted" msgstr "" -#: tcop/backend_startup.c:630 +#: tcop/backend_startup.c:654 #, c-format msgid "GSSENCRequest rejected" msgstr "" -#: tcop/backend_startup.c:639 +#: tcop/backend_startup.c:663 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "შეცდომა GSSAPI მოლაპარაკების პასუხის გაგზავნისას: %m" -#: tcop/backend_startup.c:657 +#: tcop/backend_startup.c:681 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "'GSSAPI' დაშიფვრის მოთხოვნის შემდეგ მიღებული მონაცემები დაუშიფრავია" -#: tcop/backend_startup.c:681 +#: tcop/backend_startup.c:709 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "" -#: tcop/backend_startup.c:744 +#: tcop/backend_startup.c:772 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "სწორი მნიშვნელობებია: \"false\", 0, \"true\", 1, \"database\"." -#: tcop/backend_startup.c:785 +#: tcop/backend_startup.c:813 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" -#: tcop/backend_startup.c:802 +#: tcop/backend_startup.c:830 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "გაშვების პაკეტში PostgreSQL-ის მომხმარებლის სახელი მითითებული არაა" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 +#: tcop/backend_startup.c:884 +#, c-format +msgid "invalid length of query cancel packet" +msgstr "მოთხოვნის გაუქმების პაკეტის სიგრძე არასწორია" + +#: tcop/backend_startup.c:892 +#, c-format +msgid "invalid length of query cancel key" +msgstr "მოთხოვნის გაუქმების გასაღების სიგრძე არასწორია" + +#: tcop/backend_startup.c:1022 +#, c-format +msgid "Cannot specify log_connections option \"%s\" in a list with other options." +msgstr "ვერ მიუთითებთ log_connections-ის პარამეტრს \"%s\" სიაში, სადაც სხვა პარამეტრებიცაა." + +#: tcop/backend_startup.c:1080 +#, c-format +msgid "Invalid list syntax in parameter \"log_connections\"." +msgstr "არასწორი სიის სინტაქსი პარამეტრში \"log_connections\"." + +#: tcop/fastpath.c:141 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "ფუნქცია OID-ით %u არ არსებობს" -#: tcop/fastpath.c:149 +#: tcop/fastpath.c:148 #, c-format msgid "cannot call function \"%s\" via fastpath interface" msgstr "" -#: tcop/fastpath.c:234 +#: tcop/fastpath.c:233 #, c-format 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:312 tcop/postgres.c:1364 tcop/postgres.c:1600 tcop/postgres.c:2079 tcop/postgres.c:2351 #, c-format msgid "duration: %s ms" msgstr "ხანგრძლივობა: %s მწმ" -#: tcop/fastpath.c:317 +#: tcop/fastpath.c:316 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "" -#: tcop/fastpath.c:353 +#: tcop/fastpath.c:352 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "" -#: tcop/fastpath.c:361 +#: tcop/fastpath.c:360 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "" -#: tcop/fastpath.c:385 +#: tcop/fastpath.c:384 #, c-format msgid "invalid argument size %d in function call message" msgstr "" -#: tcop/fastpath.c:448 +#: tcop/fastpath.c:447 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "" -#: tcop/postgres.c:463 tcop/postgres.c:4925 +#: tcop/postgres.c:455 tcop/postgres.c:5023 #, c-format msgid "invalid frontend message type %d" msgstr "არასწორი წინაბოლოს შეტყობინების ტიპი %d" -#: tcop/postgres.c:1072 +#: tcop/postgres.c:1070 #, c-format msgid "statement: %s" msgstr "ოპერატორი: %s" -#: tcop/postgres.c:1370 +#: tcop/postgres.c:1369 #, c-format msgid "duration: %s ms statement: %s" msgstr "ხანგრძლივობა: %s მწმ გამოსახულება: %s" -#: tcop/postgres.c:1476 +#: tcop/postgres.c:1475 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "" -#: tcop/postgres.c:1606 +#: tcop/postgres.c:1605 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "ხანგრძლივობა: %s მწმ %s-ის დამუშავება: %s" -#: tcop/postgres.c:1672 tcop/postgres.c:2625 +#: tcop/postgres.c:1672 tcop/postgres.c:2671 #, c-format msgid "unnamed prepared statement does not exist" msgstr "" -#: tcop/postgres.c:1713 +#: tcop/postgres.c:1724 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1730 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "" -#: tcop/postgres.c:1933 +#: tcop/postgres.c:1944 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "" -#: tcop/postgres.c:2060 +#: tcop/postgres.c:2084 #, 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:2139 tcop/postgres.c:2753 #, c-format msgid "portal \"%s\" does not exist" msgstr "პორტალი \"%s\" არ არსებობს" -#: tcop/postgres.c:2185 +#: tcop/postgres.c:2232 #, 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:2234 tcop/postgres.c:2359 msgid "execute fetch from" msgstr "" -#: tcop/postgres.c:2188 tcop/postgres.c:2314 +#: tcop/postgres.c:2235 tcop/postgres.c:2360 msgid "execute" msgstr "გაშვება" -#: tcop/postgres.c:2310 +#: tcop/postgres.c:2356 #, 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:2504 #, c-format msgid "prepare: %s" msgstr "მომზადება: %s" -#: tcop/postgres.c:2483 +#: tcop/postgres.c:2529 #, c-format msgid "Parameters: %s" msgstr "პარამეტრები: %s" -#: tcop/postgres.c:2498 +#: tcop/postgres.c:2544 #, c-format msgid "Abort reason: recovery conflict" msgstr "გაუქმების მიზეზი: აღდგენის კონფლიქტი" -#: tcop/postgres.c:2514 +#: tcop/postgres.c:2560 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "" -#: tcop/postgres.c:2517 +#: tcop/postgres.c:2563 #, c-format msgid "User was holding a relation lock for too long." msgstr "" -#: tcop/postgres.c:2520 +#: tcop/postgres.c:2566 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" -#: tcop/postgres.c:2523 +#: tcop/postgres.c:2569 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" -#: tcop/postgres.c:2526 +#: tcop/postgres.c:2572 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "" -#: tcop/postgres.c:2532 +#: tcop/postgres.c:2578 #, c-format msgid "User was connected to a database that must be dropped." msgstr "" -#: tcop/postgres.c:2571 +#: tcop/postgres.c:2617 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "პორტალის \"%s\" პარამეტრი $%d = %s" -#: tcop/postgres.c:2574 +#: tcop/postgres.c:2620 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "პორტალის \"%s\" პარამეტრი $%d" -#: tcop/postgres.c:2580 +#: tcop/postgres.c:2626 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "უსახელო პორტალის პარამეტრი $%d = %s" -#: tcop/postgres.c:2583 +#: tcop/postgres.c:2629 #, c-format msgid "unnamed portal parameter $%d" msgstr "უსახელო პორტალის პარამეტრი $%d" -#: tcop/postgres.c:2928 +#: tcop/postgres.c:2984 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "" -#: tcop/postgres.c:2934 +#: tcop/postgres.c:2990 #, c-format msgid "terminating connection because of crash of another server process" msgstr "" -#: tcop/postgres.c:2935 +#: tcop/postgres.c:2991 #, 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:2995 tcop/postgres.c:3248 #, 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:3002 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "მიერთების შეწყვეტა დაუყოვნებლივი გამორთვის ბრძანების გამო" -#: tcop/postgres.c:3024 +#: tcop/postgres.c:3080 #, c-format msgid "floating-point exception" msgstr "წილადი რიცხვების ანგარიშის შეცდომა" -#: tcop/postgres.c:3025 +#: tcop/postgres.c:3081 #, 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:3246 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "მიერთების შეწყვეტა აღდგენასთან კონფლიქტის გამო" -#: tcop/postgres.c:3262 +#: tcop/postgres.c:3318 #, c-format msgid "canceling authentication due to timeout" msgstr "ავთენტიკაცია გაუქმდა მოლოდინის ვადის ამოწურვის გამო" -#: tcop/postgres.c:3266 +#: tcop/postgres.c:3322 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "ავტომომტვერსასრუტების პროცესის შეწყვეტა ადმინისტრატორის ბრძანების გამო" -#: tcop/postgres.c:3270 +#: tcop/postgres.c:3326 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "ლოგიკური რეპლიკაციის დამხმარე პროცესის შეწყვეტა ადმინისტრატორის ბრძანების გამო" -#: tcop/postgres.c:3290 +#: tcop/postgres.c:3341 +#, c-format +msgid "terminating walreceiver process due to administrator command" +msgstr "walreceiver პროგრამის შეწყვეტა ადმინისტრატორის ბრძანების გამო" + +#: tcop/postgres.c:3357 #, c-format msgid "terminating connection due to administrator command" msgstr "მიერთების შეწყვეტა ადმინისტრატორის ბრძანების გამო" -#: tcop/postgres.c:3321 +#: tcop/postgres.c:3388 #, c-format msgid "connection to client lost" msgstr "კლიენტთან შეერთების შეცდომა" -#: tcop/postgres.c:3373 +#: tcop/postgres.c:3440 #, c-format msgid "canceling statement due to lock timeout" msgstr "გამოსახულება გაუქმდება ბლოკის მოლოდინის ვადის ამოწურვის გამო" -#: tcop/postgres.c:3380 +#: tcop/postgres.c:3447 #, c-format msgid "canceling statement due to statement timeout" msgstr "" -#: tcop/postgres.c:3387 +#: tcop/postgres.c:3454 #, c-format msgid "canceling autovacuum task" msgstr "ავტომომტვერსასრუტების ამოცანის გაუქმება" -#: tcop/postgres.c:3400 +#: tcop/postgres.c:3467 #, c-format msgid "canceling statement due to user request" msgstr "" -#: tcop/postgres.c:3421 +#: tcop/postgres.c:3488 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "" -#: tcop/postgres.c:3434 +#: tcop/postgres.c:3501 #, c-format msgid "terminating connection due to transaction timeout" msgstr "მიერთების შეწყვეტა ტრანზაქციის მოლოდინის ვადის ამოწურვის გამო" -#: tcop/postgres.c:3447 +#: tcop/postgres.c:3514 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "" -#: tcop/postgres.c:3537 -#, c-format -msgid "stack depth limit exceeded" -msgstr "გადაცილებულია სტეკის სიღრმის ლიმიტი" - -#: tcop/postgres.c:3538 -#, 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 -#, c-format -msgid "\"max_stack_depth\" must not exceed %ldkB." -msgstr "\"max_stack_depth\" %ldკბ-ს არ უნდა ზცდებოდეს." - -#: tcop/postgres.c:3587 -#, c-format -msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." -msgstr "" - -#: tcop/postgres.c:3610 +#: tcop/postgres.c:3553 #, 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:3574 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "პარამეტრის ჩართვა მაშინ, როცა \"log_statement_stats\" ჩართულია, შეუძლებელია." -#: tcop/postgres.c:3646 +#: tcop/postgres.c:3589 #, 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:4029 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "" -#: tcop/postgres.c:4012 tcop/postgres.c:4018 +#: tcop/postgres.c:4030 tcop/postgres.c:4036 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: tcop/postgres.c:4016 +#: tcop/postgres.c:4034 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: არასწორი ბრძანების სტრიქონის არგუმენტი: %s" -#: tcop/postgres.c:4069 +#: tcop/postgres.c:4087 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: არც ბაზა, არც მომხმარებელი მითითებული არაა" -#: tcop/postgres.c:4822 +#: tcop/postgres.c:4280 +#, c-format +msgid "could not generate random cancel key" +msgstr "შემთხვევითი გაუქმების გასაღების გენერაცია შეუძლებელია" + +#: tcop/postgres.c:4682 +#, c-format +msgid "connection ready: setup total=%.3f ms, fork=%.3f ms, authentication=%.3f ms" +msgstr "" + +#: tcop/postgres.c:4913 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "არასწორი CLOSE შეტყობინების ქვეტიპი %d" -#: tcop/postgres.c:4859 +#: tcop/postgres.c:4950 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "არასწორი DESCRIBE შეტყობინების ქვეტიპი %d" -#: tcop/postgres.c:4946 +#: tcop/postgres.c:5044 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "" -#: tcop/postgres.c:4950 +#: tcop/postgres.c:5048 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" -#: tcop/postgres.c:5130 +#: tcop/postgres.c:5194 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "" -#: tcop/pquery.c:641 +#: tcop/pquery.c:674 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "" -#: tcop/pquery.c:944 tcop/pquery.c:1701 +#: tcop/pquery.c:972 tcop/pquery.c:1734 #, c-format msgid "cursor can only scan forward" msgstr "კურსორს მხოლოდ წინ სკანირება შეუძლია" -#: tcop/pquery.c:945 tcop/pquery.c:1702 +#: tcop/pquery.c:973 tcop/pquery.c:1735 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "" @@ -23437,68 +24386,68 @@ msgid "cannot execute %s within security-restricted operation" msgstr "" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:821 +#: tcop/utility.c:824 #, c-format msgid "cannot execute %s within a background process" msgstr "ფონის პროცესში %s-ის შესრულება შეუძლებელია" #. translator: %s is name of a SQL command, eg CHECKPOINT -#: tcop/utility.c:947 +#: tcop/utility.c:950 #, c-format msgid "permission denied to execute %s command" msgstr "ბრძანების შესრულების წვდომა აკრძალულია: %s" -#: tcop/utility.c:949 +#: tcop/utility.c:952 #, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." msgstr "ამ ბრძანების შესრულება მხოლოდ \"%s\" როლის პრივილეგიების მქონეებს შეუძლიათ." -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:616 +#: tsearch/dict_ispell.c:53 tsearch/dict_thesaurus.c:616 #, c-format msgid "multiple DictFile parameters" msgstr "გამეორებადი DictFile პარამეტრი" -#: tsearch/dict_ispell.c:63 +#: tsearch/dict_ispell.c:64 #, c-format msgid "multiple AffFile parameters" msgstr "გამეორებადი AffFile პარამეტრი" -#: tsearch/dict_ispell.c:82 +#: tsearch/dict_ispell.c:83 #, c-format msgid "unrecognized Ispell parameter: \"%s\"" msgstr "უცნობი lspell-ის პარამეტრი: \"%s\"" -#: tsearch/dict_ispell.c:96 +#: tsearch/dict_ispell.c:97 #, c-format msgid "missing AffFile parameter" msgstr "აკლია პარამეტრი AffFile" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:640 +#: tsearch/dict_ispell.c:103 tsearch/dict_thesaurus.c:640 #, c-format msgid "missing DictFile parameter" msgstr "აკლია პარამეტრი DictFile" -#: tsearch/dict_simple.c:58 +#: tsearch/dict_simple.c:59 #, c-format msgid "multiple Accept parameters" msgstr "გამეორებადი Accept პარამეტრი" -#: tsearch/dict_simple.c:66 +#: tsearch/dict_simple.c:67 #, c-format msgid "unrecognized simple dictionary parameter: \"%s\"" msgstr "უცნობი მარტივი ლექსიკონის პარამეტრი: \"%s\"" -#: tsearch/dict_synonym.c:118 +#: tsearch/dict_synonym.c:120 #, c-format msgid "unrecognized synonym parameter: \"%s\"" msgstr "უცნობი სინონიმის პარამეტრი: \"%s\"" -#: tsearch/dict_synonym.c:125 +#: tsearch/dict_synonym.c:127 #, c-format msgid "missing Synonyms parameter" msgstr "აკლია პარამეტრი Synonyms" -#: tsearch/dict_synonym.c:132 +#: tsearch/dict_synonym.c:134 #, c-format msgid "could not open synonym file \"%s\": %m" msgstr "სინონიმს ფაილი \"%s\" ვერ გავხსენი: %m" @@ -23573,76 +24522,71 @@ msgstr "გამოუცნობი განმარტებითი ლ msgid "missing Dictionary parameter" msgstr "აკლია პარამეტრი Dictionary" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 tsearch/spell.c:1043 +#: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 tsearch/spell.c:1046 #, c-format msgid "invalid affix flag \"%s\"" msgstr "აფიქსის არასწორი ალამი: %s" -#: tsearch/spell.c:385 tsearch/spell.c:1047 +#: tsearch/spell.c:387 tsearch/spell.c:1050 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "აფიქსის ალამი დიაპაზონს გარეთაა: %s" -#: tsearch/spell.c:415 +#: tsearch/spell.c:417 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "არასწორი სიმბოლო აფიქსის ალამში: %s" -#: tsearch/spell.c:435 +#: tsearch/spell.c:437 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "აფიქსის არასწორი ალამი \"%s\" ალამის მნიშვნელობით \"long\"" -#: tsearch/spell.c:525 +#: tsearch/spell.c:527 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "ლექსიკონის ფაილის (%s) გახსნის შეცდომა: %m" -#: tsearch/spell.c:1170 tsearch/spell.c:1182 tsearch/spell.c:1742 tsearch/spell.c:1747 tsearch/spell.c:1752 +#: tsearch/spell.c:1174 tsearch/spell.c:1186 tsearch/spell.c:1751 tsearch/spell.c:1756 tsearch/spell.c:1761 #, c-format msgid "invalid affix alias \"%s\"" msgstr "აფისქსის არასწორი მეტსახელი: %s" -#: tsearch/spell.c:1223 tsearch/spell.c:1294 tsearch/spell.c:1443 +#: tsearch/spell.c:1227 tsearch/spell.c:1298 tsearch/spell.c:1447 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "აფიქსის ფაილის (%s) გახსნის შეცდომა: %m" -#: tsearch/spell.c:1277 +#: tsearch/spell.c:1281 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "" -#: tsearch/spell.c:1321 +#: tsearch/spell.c:1325 #, c-format msgid "invalid number of flag vector aliases" msgstr "ალმის ვექტორის მეტსახელების არასწორი რიცხვი" -#: tsearch/spell.c:1344 +#: tsearch/spell.c:1348 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "მეტსახელების რიცხვი მითითებულ მნიშვნელობაზე მეტია: %d" -#: tsearch/spell.c:1559 +#: tsearch/spell.c:1563 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "აფიქსის ფაილი ორივე, ახალი და ძველი სტილის ბრძანებებს შეიცავს" -#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:274 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "სტრიქონი tsvector-ისთვის ძალიანგრძელია (%d ბაიტი, მაქს %d ბაიტი)" -#: tsearch/ts_locale.c:236 +#: tsearch/ts_locale.c:191 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "კონფიგურაციის ფაილის \"%2$s\" %1$d-ე ხაზზე: \"%3$s\"" -#: tsearch/ts_locale.c:315 -#, c-format -msgid "conversion from wchar_t to server encoding failed: %m" -msgstr "" - #: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:573 tsearch/ts_parse.c:580 #, c-format msgid "word is too long to be indexed" @@ -23653,12 +24597,12 @@ msgstr "სიტყვა ძალიან გრძელია, რომ msgid "Words longer than %d characters are ignored." msgstr "%d სიმბოლოზე გრძელი სიტყვები იგნორირდება." -#: tsearch/ts_utils.c:51 +#: tsearch/ts_utils.c:52 #, c-format msgid "invalid text search configuration file name \"%s\"" msgstr "ტექსტის ძებნის კონფიგურაციის ფაილის არასწორი სახელი: \"%s\"" -#: tsearch/ts_utils.c:83 +#: tsearch/ts_utils.c:84 #, c-format msgid "could not open stop-word file \"%s\": %m" msgstr "" @@ -23675,60 +24619,105 @@ msgstr "" #: 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 დადებით უნდა იყოს" - -#: tsearch/wparser_def.c:2682 -#, c-format -msgid "ShortWord should be >= 0" -msgstr "ShortWord >= 0 უნდა იყოს" +msgid "%s must be positive" +msgstr "%s დადებითი უნდა იყოს" -#: tsearch/wparser_def.c:2686 +#: tsearch/wparser_def.c:2682 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 +#: utils/activity/pgstat.c:533 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "" -#: utils/activity/pgstat.c:1252 +#: utils/activity/pgstat.c:1443 #, c-format msgid "invalid statistics kind: \"%s\"" msgstr "სტატისტიკის არასწორი ტიპი: \"%s\"" -#: utils/activity/pgstat.c:1332 +#: utils/activity/pgstat.c:1488 +#, c-format +msgid "custom cumulative statistics name is invalid" +msgstr "კუმულატიური სტატისტიკის ხელით მითითებული სახელი არასწორია" + +#: utils/activity/pgstat.c:1489 +#, c-format +msgid "Provide a non-empty name for the custom cumulative statistics." +msgstr "მიუთითეთ არაცარიელი სახელი მორგებული დაგროვებადი სტატისტიკისთვის." + +#: utils/activity/pgstat.c:1492 +#, c-format +msgid "custom cumulative statistics ID %u is out of range" +msgstr "კუმულატიური სტატისტიკის ხელით მითითებული ID %u დიაპაზონს გარეთაა" + +#: utils/activity/pgstat.c:1493 +#, c-format +msgid "Provide a custom cumulative statistics ID between %u and %u." +msgstr "შეიყვანეთ რესურსების ხელით მითითებული კუმულაციური სტატისტიკის ID %u-დან %u-მდე შუალედიდან." + +#: utils/activity/pgstat.c:1498 utils/activity/pgstat.c:1525 utils/activity/pgstat.c:1538 +#, c-format +msgid "failed to register custom cumulative statistics \"%s\" with ID %u" +msgstr "ვერ დარეგისტრირდა მორგებული დაგროვებითი სტატისტიკა \"%s\" ID-ით %u" + +#: utils/activity/pgstat.c:1499 +#, c-format +msgid "Custom cumulative statistics must be registered while initializing modules in \"shared_preload_libraries\"." +msgstr "მომხმარებლის კუმულაციური სტატისტიკის რეგისტრაცია \"shared_preload_libraries\"-ში მოდულების ინიციალიზაციისას უნდა მოხდეს." + +#: utils/activity/pgstat.c:1508 +#, c-format +msgid "custom cumulative statistics property is invalid" +msgstr "" + +#: utils/activity/pgstat.c:1509 +#, c-format +msgid "Custom cumulative statistics require a shared memory size for fixed-numbered objects." +msgstr "" + +#: utils/activity/pgstat.c:1526 +#, c-format +msgid "Custom cumulative statistics \"%s\" already registered with the same ID." +msgstr "მორგებული კუმულაციური სტატისტიკა \"%s\" უკვე რეგისტრირებულია, იგივე ID-ით." + +#: utils/activity/pgstat.c:1539 +#, c-format +msgid "Existing cumulative statistics with ID %u has the same name." +msgstr "არსებულ კუმულატიურ სტატისტიკას ID-ით %u იგივე სახელი აქვს." + +#: utils/activity/pgstat.c:1545 +#, c-format +msgid "registered custom cumulative statistics \"%s\" with ID %u" +msgstr "რეგისტრირებულია მორგებული კუმულაციური სტატისტიკა \"%s\" ID-ით %u" + +#: utils/activity/pgstat.c:1614 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილის (\"%s\") გახსნა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1444 +#: utils/activity/pgstat.c:1735 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილში (\"%s\") ჩაწერა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1453 +#: utils/activity/pgstat.c:1744 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილის (\"%s\") დახურვა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1461 -#, 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:1798 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "სტატისტიკის ფაილის (\"%s\") გახსნა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1672 +#: utils/activity/pgstat.c:2030 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "სტატისტიკის დაზიანებული ფაილი \"%s\"" @@ -23738,178 +24727,183 @@ msgstr "სტატისტიკის დაზიანებული ფ msgid "function call to dropped function" msgstr "ფუნქცია წაშლილ ფუნქციას იძახებს" -#: utils/activity/pgstat_xact.c:362 +#: utils/activity/pgstat_xact.c:366 #, c-format -msgid "resetting existing statistics for kind %s, db=%u, oid=%u" +msgid "resetting existing statistics for kind %s, db=%u, oid=%" msgstr "" -#: utils/activity/wait_event.c:210 +#: utils/activity/wait_event.c:206 utils/activity/wait_event.c:231 +#, c-format +msgid "wait event \"%s\" already exists in type \"%s\"" +msgstr "მოცდის მოვლენა \"%s\" უკვე არსებობს ტიპში \"%s\"" + +#: utils/activity/wait_event.c:245 #, 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 +#: utils/adt/acl.c:187 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "იდენტიფიკატორი ძალიან გრძელია" -#: utils/adt/acl.c:184 utils/adt/name.c:94 +#: utils/adt/acl.c:188 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "" -#: utils/adt/acl.c:272 +#: utils/adt/acl.c:276 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "უცნობი საკვანძო სიტყვა: \"%s\"" -#: utils/adt/acl.c:273 +#: utils/adt/acl.c:277 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL-ის საკვანძო სიტყვა უნდა იყოს \"group\" ან \"user\"." -#: utils/adt/acl.c:281 +#: utils/adt/acl.c:285 #, c-format msgid "missing name" msgstr "სახელი აკლია" -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:286 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "" -#: utils/adt/acl.c:288 +#: utils/adt/acl.c:292 #, c-format msgid "missing \"=\" sign" msgstr "აკლია \"=\" ნიშანი" -#: utils/adt/acl.c:350 +#: utils/adt/acl.c:351 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "არასწორი რეჟიმის სიმბოლო: უნდა იყოს ერთ-ერთი სიიდან \"%s\"" -#: utils/adt/acl.c:380 +#: utils/adt/acl.c:381 #, c-format msgid "a name must follow the \"/\" sign" msgstr "\"/\" სიმბოლოს სახელი უნდა მოჰყვებოდეს" -#: utils/adt/acl.c:392 +#: utils/adt/acl.c:393 #, c-format msgid "defaulting grantor to user ID %u" msgstr "" -#: utils/adt/acl.c:578 +#: utils/adt/acl.c:579 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL-ის მასივი მონაცემების არასწორ ტიპს შეიცავს" -#: utils/adt/acl.c:582 +#: utils/adt/acl.c:583 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL-ის მასივები ერთგანზომილებიანი უნდა იყოს" -#: utils/adt/acl.c:586 +#: utils/adt/acl.c:587 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL-ის მასივები ნულოვან მნიშვნელობებს არ უნდა შეიცავდეს" -#: utils/adt/acl.c:615 +#: utils/adt/acl.c:616 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "" -#: utils/adt/acl.c:1257 +#: utils/adt/acl.c:1264 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "" -#: utils/adt/acl.c:1573 +#: utils/adt/acl.c:1580 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert მხარდაჭერილი აღარაა" -#: utils/adt/acl.c:1583 +#: utils/adt/acl.c:1590 #, 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:3548 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:5330 #, c-format 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/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 +#: utils/adt/array_userfuncs.c:118 utils/adt/array_userfuncs.c:565 utils/adt/array_userfuncs.c:942 utils/adt/json.c:611 utils/adt/json.c:749 utils/adt/json.c:799 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:123 #, 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/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/array_userfuncs.c:167 utils/adt/array_userfuncs.c:249 utils/adt/float.c:1229 utils/adt/float.c:1303 utils/adt/float.c:4107 utils/adt/float.c:4145 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:2039 utils/adt/numeric.c:4557 utils/adt/rangetypes.c:1552 utils/adt/rangetypes.c:1565 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1143 utils/adt/varlena.c:3184 utils/adt/varlena.c:4118 #, c-format msgid "integer out of range" msgstr "მთელი მნიშვნელობა დიაპაზონს გარეთაა" -#: utils/adt/array_userfuncs.c:158 utils/adt/array_userfuncs.c:213 +#: utils/adt/array_userfuncs.c:174 utils/adt/array_userfuncs.c:259 #, 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:371 utils/adt/array_userfuncs.c:410 utils/adt/array_userfuncs.c:447 utils/adt/array_userfuncs.c:476 utils/adt/array_userfuncs.c:504 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "შეუთავსებელი მასივების შერწყმა შეუძლებელია" -#: utils/adt/array_userfuncs.c:296 +#: utils/adt/array_userfuncs.c:372 #, 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:411 #, c-format msgid "Arrays of %d and %d dimensions are not compatible for concatenation." msgstr "" -#: utils/adt/array_userfuncs.c:372 +#: utils/adt/array_userfuncs.c:448 #, 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:477 utils/adt/array_userfuncs.c:505 #, 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/arrayfuncs.c:5609 utils/adt/arrayfuncs.c:5615 +#: utils/adt/array_userfuncs.c:1051 utils/adt/array_userfuncs.c:1059 utils/adt/arrayfuncs.c:5628 utils/adt/arrayfuncs.c:5634 #, 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:1348 utils/adt/array_userfuncs.c:1502 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "" -#: utils/adt/array_userfuncs.c:1301 +#: utils/adt/array_userfuncs.c:1377 #, c-format msgid "initial position must not be null" msgstr "საწყისი მდებარეობა ნულოვან ვერ იქნება" -#: utils/adt/array_userfuncs.c:1674 +#: utils/adt/array_userfuncs.c:1750 #, c-format msgid "sample size must be between 0 and %d" msgstr "სემპლის ზომა 0-სა და %d-ს შორის უნდა იყოს" @@ -23954,7 +24948,7 @@ msgstr "" 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 +24978,7 @@ msgstr "მასივის მოულოდნელი ელემენ 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:2600 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "მრავალგანზომილებიან მასივებს უნდა ჰქონდეთ ქვე-მასივები იგივე ზომებით." @@ -23994,12 +24988,12 @@ msgstr "მრავალგანზომილებიან მასი msgid "Incorrectly quoted array element." msgstr "არასწორად ციტირებული მასივის ელემენტი." -#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 utils/adt/rangetypes.c:2528 utils/adt/rangetypes.c:2536 utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 #, c-format 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:3511 utils/adt/arrayfuncs.c:6120 #, c-format msgid "invalid number of dimensions: %d" msgstr "განზომილებების არასწორი რაოდენობა: %d" @@ -24014,7 +25008,7 @@ msgstr "მასივის არასწორი ალმები" msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "" -#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 utils/adt/rangetypes.c:353 utils/cache/lsyscache.c:3098 #, c-format msgid "no binary input function available for type %s" msgstr "" @@ -24024,7 +25018,7 @@ msgstr "" msgid "improper binary format in array element %d" msgstr "" -#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 utils/adt/rangetypes.c:358 utils/cache/lsyscache.c:3131 #, c-format msgid "no binary output function available for type %s" msgstr "" @@ -24034,12 +25028,12 @@ msgstr "" 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:6106 utils/adt/arrayfuncs.c:6132 utils/adt/arrayfuncs.c:6143 utils/adt/json.c:1441 utils/adt/json.c:1509 utils/adt/jsonb.c:1317 utils/adt/jsonb.c:1401 utils/adt/jsonfuncs.c:4734 utils/adt/jsonfuncs.c:4887 utils/adt/jsonfuncs.c:4998 utils/adt/jsonfuncs.c:5046 #, 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,92 +25058,92 @@ msgstr "" 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:3669 #, 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:3840 utils/adt/arrayfuncs.c:4011 utils/adt/arrayfuncs.c:4402 #, 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:4189 utils/adt/multirangetypes.c:2805 utils/adt/multirangetypes.c:2877 utils/adt/rangetypes.c:1425 utils/adt/rangetypes.c:1489 utils/adt/rowtypes.c:1893 #, 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:4317 utils/adt/rowtypes.c:2014 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "ტიპისთვის \"%s\" გაფართოებული ჰეშის ფუნქცია ვერ ვიპოვე" -#: utils/adt/arrayfuncs.c:5499 +#: utils/adt/arrayfuncs.c:5518 #, c-format msgid "data type %s is not an array type" msgstr "მონაცემის ტიპი %s მასივის ტიპი არაა" -#: utils/adt/arrayfuncs.c:5554 +#: utils/adt/arrayfuncs.c:5573 #, c-format msgid "cannot accumulate null arrays" msgstr "ნულოვანი მასივების დაგროვება შეუძლებელია" -#: utils/adt/arrayfuncs.c:5582 +#: utils/adt/arrayfuncs.c:5601 #, c-format msgid "cannot accumulate empty arrays" msgstr "ცარიელი მასივების დაგროვება შეუძლებელია" -#: utils/adt/arrayfuncs.c:5983 utils/adt/arrayfuncs.c:6023 +#: utils/adt/arrayfuncs.c:6004 utils/adt/arrayfuncs.c:6044 #, 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:6107 utils/adt/arrayfuncs.c:6133 #, c-format msgid "Dimension array must be one dimensional." msgstr "განზომილების მასივი ერთგანზომილებიანი უნდა იყოს." -#: utils/adt/arrayfuncs.c:6091 utils/adt/arrayfuncs.c:6117 +#: utils/adt/arrayfuncs.c:6112 utils/adt/arrayfuncs.c:6138 #, c-format msgid "dimension values cannot be null" msgstr "განზომილების მნიშვნელობები ნულოვანი ვერ იქნება" -#: utils/adt/arrayfuncs.c:6123 +#: utils/adt/arrayfuncs.c:6144 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "" -#: utils/adt/arrayfuncs.c:6404 +#: utils/adt/arrayfuncs.c:6425 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "" -#: utils/adt/arrayfuncs.c:6681 +#: utils/adt/arrayfuncs.c:6702 #, c-format msgid "thresholds must be one-dimensional array" msgstr "" -#: utils/adt/arrayfuncs.c:6686 +#: utils/adt/arrayfuncs.c:6707 #, c-format msgid "thresholds array must not contain NULLs" msgstr "" -#: utils/adt/arrayfuncs.c:6919 +#: utils/adt/arrayfuncs.c:6940 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "" -#: utils/adt/arraysubs.c:93 utils/adt/arraysubs.c:130 +#: utils/adt/arraysubs.c:94 utils/adt/arraysubs.c:131 #, c-format msgid "array subscript must have type integer" msgstr "მასივის ქვესკრიპტის ტიპი integer უნდა ჰქონდეს" -#: utils/adt/arraysubs.c:198 utils/adt/arraysubs.c:217 +#: utils/adt/arraysubs.c:199 utils/adt/arraysubs.c:218 #, c-format msgid "array subscript in assignment must not be null" msgstr "" @@ -24180,24 +25174,29 @@ msgid "encoding conversion from %s to ASCII not supported" 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:150 utils/adt/cash.c:354 utils/adt/datetime.c:4258 utils/adt/float.c:207 utils/adt/float.c:294 utils/adt/float.c:308 utils/adt/float.c:413 utils/adt/float.c:496 utils/adt/float.c:510 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:805 utils/adt/numeric.c:7324 utils/adt/numeric.c:7527 utils/adt/numeric.c:8474 utils/adt/numutils.c:356 utils/adt/numutils.c:617 utils/adt/numutils.c:878 utils/adt/numutils.c:917 utils/adt/numutils.c:939 utils/adt/numutils.c:1003 utils/adt/numutils.c:1025 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:512 utils/adt/uuid.c:176 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:725 utils/adt/float.c:106 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:3294 utils/adt/numeric.c:3317 utils/adt/numeric.c:3402 utils/adt/numeric.c:3420 utils/adt/numeric.c:3516 utils/adt/numeric.c:9399 +#: utils/adt/numeric.c:9923 utils/adt/numeric.c:10039 utils/adt/numeric.c:11550 utils/adt/timestamp.c:3772 #, 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:611 utils/adt/numutils.c:872 utils/adt/numutils.c:923 utils/adt/numutils.c:962 utils/adt/numutils.c:1009 +#, 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" @@ -24208,140 +25207,140 @@ msgstr "\"char\" დიაპაზონს გარეთაა" msgid "could not compute %s hash: %s" msgstr "%s ჰეშის გამოთვლა შეუძლებელია: %s" -#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 utils/adt/varchar.c:48 +#: utils/adt/date.c:65 utils/adt/timestamp.c:118 utils/adt/varbit.c:105 utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "ტიპის არასწორი მოდიფიკატორი" -#: utils/adt/date.c:76 +#: utils/adt/date.c:77 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s-ის სიზუსტე უარყოფით არ უნდა იყოს" -#: utils/adt/date.c:82 +#: utils/adt/date.c:83 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "" -#: 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:168 utils/adt/date.c:176 utils/adt/formatting.c:4171 utils/adt/formatting.c:4180 utils/adt/formatting.c:4285 utils/adt/formatting.c:4295 #, c-format 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:223 utils/adt/date.c:585 utils/adt/date.c:609 utils/adt/rangetypes.c:1648 utils/adt/rangetypes.c:1663 utils/adt/xml.c:2552 #, c-format msgid "date out of range" msgstr "თარიღი დიაპაზონს გარეთაა" -#: utils/adt/date.c:268 utils/adt/timestamp.c:598 +#: utils/adt/date.c:266 utils/adt/date.c:276 utils/adt/timestamp.c:600 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "მონაცემის ველის მნიშვნელობა დიაპაზონს გარეთაა: %d-%02d-%02d" -#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 +#: utils/adt/date.c:283 utils/adt/date.c:292 utils/adt/timestamp.c:606 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "თარიღი დიაპაზონს გარეთაა: %d-%02d-%02d" -#: utils/adt/date.c:495 +#: utils/adt/date.c:560 #, c-format msgid "cannot subtract infinite dates" msgstr "უსასრულო თარიღების გამოკლება შეუძლებელია" -#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 utils/adt/date.c:2906 utils/adt/date.c:2916 +#: utils/adt/date.c:658 utils/adt/date.c:721 utils/adt/date.c:757 utils/adt/date.c:2971 utils/adt/date.c:2981 #, c-format msgid "date out of range for timestamp" msgstr "თარიღი დროის შტამპის დიაპაზონს მიღმაა" -#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 utils/adt/timestamp.c:6070 +#: utils/adt/date.c:1187 utils/adt/date.c:1270 utils/adt/date.c:1286 utils/adt/date.c:2280 utils/adt/date.c:3076 utils/adt/timestamp.c:4724 utils/adt/timestamp.c:4815 utils/adt/timestamp.c:4963 utils/adt/timestamp.c:5064 utils/adt/timestamp.c:5179 utils/adt/timestamp.c:5231 utils/adt/timestamp.c:5488 utils/adt/timestamp.c:5689 utils/adt/timestamp.c:5736 utils/adt/timestamp.c:5960 utils/adt/timestamp.c:6007 utils/adt/timestamp.c:6088 utils/adt/timestamp.c:6232 #, c-format msgid "unit \"%s\" not supported for type %s" msgstr "ერთეული \"%s\" ტიპისთვის %s მხარდაუჭერელია" -#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 +#: utils/adt/date.c:1295 utils/adt/date.c:2296 utils/adt/date.c:3096 utils/adt/timestamp.c:4829 utils/adt/timestamp.c:5081 utils/adt/timestamp.c:5245 utils/adt/timestamp.c:5448 utils/adt/timestamp.c:5745 utils/adt/timestamp.c:6016 utils/adt/timestamp.c:6057 utils/adt/timestamp.c:6293 #, c-format msgid "unit \"%s\" not recognized for type %s" msgstr "ერთეული \"%s\" ტიპისთვის %s შეუძლებელია" -#: 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/date.c:1379 utils/adt/date.c:1425 utils/adt/date.c:1984 utils/adt/date.c:2015 utils/adt/date.c:2044 utils/adt/date.c:2934 utils/adt/date.c:3166 utils/adt/datetime.c:432 utils/adt/datetime.c:1817 utils/adt/formatting.c:4016 utils/adt/formatting.c:4052 utils/adt/formatting.c:4139 utils/adt/formatting.c:4261 utils/adt/json.c:375 utils/adt/json.c:414 utils/adt/timestamp.c:250 utils/adt/timestamp.c:282 utils/adt/timestamp.c:707 utils/adt/timestamp.c:716 +#: utils/adt/timestamp.c:794 utils/adt/timestamp.c:827 utils/adt/timestamp.c:3125 utils/adt/timestamp.c:3134 utils/adt/timestamp.c:3151 utils/adt/timestamp.c:3156 utils/adt/timestamp.c:3175 utils/adt/timestamp.c:3188 utils/adt/timestamp.c:3199 utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3211 utils/adt/timestamp.c:3216 utils/adt/timestamp.c:3269 utils/adt/timestamp.c:3278 utils/adt/timestamp.c:3299 utils/adt/timestamp.c:3304 utils/adt/timestamp.c:3325 +#: utils/adt/timestamp.c:3338 utils/adt/timestamp.c:3352 utils/adt/timestamp.c:3360 utils/adt/timestamp.c:3366 utils/adt/timestamp.c:3371 utils/adt/timestamp.c:4439 utils/adt/timestamp.c:4591 utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4733 utils/adt/timestamp.c:4823 utils/adt/timestamp.c:4902 utils/adt/timestamp.c:4972 utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5553 utils/adt/timestamp.c:5827 utils/adt/timestamp.c:6361 utils/adt/timestamp.c:6371 +#: utils/adt/timestamp.c:6376 utils/adt/timestamp.c:6382 utils/adt/timestamp.c:6422 utils/adt/timestamp.c:6509 utils/adt/timestamp.c:6550 utils/adt/timestamp.c:6554 utils/adt/timestamp.c:6608 utils/adt/timestamp.c:6612 utils/adt/timestamp.c:6618 utils/adt/timestamp.c:6659 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 "დროის შტამპი დიაპაზონს გარეთაა" -#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 +#: utils/adt/date.c:1601 utils/adt/date.c:2417 utils/adt/formatting.c:4344 #, c-format msgid "time out of range" msgstr "დროის მნიშვნელობა დიაპაზონს გარეთაა" -#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 +#: utils/adt/date.c:1653 utils/adt/timestamp.c:615 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "დროის ველის მნიშვნელობა დიაპაზონს გარეთაა: %d:%02d:%02g" -#: utils/adt/date.c:2020 +#: utils/adt/date.c:2085 #, c-format msgid "cannot convert infinite interval to time" msgstr "უსასრულო ინტერვალის დროში გადაყვანა შეუძლებელია" -#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#: utils/adt/date.c:2126 utils/adt/date.c:2670 #, c-format msgid "cannot add infinite interval to time" msgstr "დროისთვის უსასრულო ინტერვალების დამატება შეუძლებელია" -#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#: utils/adt/date.c:2149 utils/adt/date.c:2697 #, c-format 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:2180 utils/adt/date.c:2732 utils/adt/float.c:1043 utils/adt/float.c:1119 utils/adt/int.c:635 utils/adt/int.c:682 utils/adt/int.c:717 utils/adt/int8.c:413 utils/adt/numeric.c:2698 utils/adt/timestamp.c:3869 utils/adt/timestamp.c:3906 utils/adt/timestamp.c:3947 #, c-format msgid "invalid preceding or following size in window function" msgstr "" -#: utils/adt/date.c:2360 +#: utils/adt/date.c:2425 #, c-format msgid "time zone displacement out of range" msgstr "დროის სარტყლის წანაცვლება დიაპაზონს გარეთაა" -#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#: utils/adt/date.c:3197 utils/adt/timestamp.c:6404 utils/adt/timestamp.c:6641 #, c-format msgid "interval time zone \"%s\" must be finite" msgstr "ინტერვალის დროის სარტყელი \"%s\" სასრული უნდა იყოს" -#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 +#: utils/adt/date.c:3204 utils/adt/timestamp.c:6411 utils/adt/timestamp.c:6648 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "ინტერვალის დროის სარტყელი \"%s\" თვეებს ან დღეებს არ უნდა შეიცავდეს" -#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 +#: utils/adt/datetime.c:3324 utils/adt/datetime.c:4243 utils/adt/datetime.c:4249 utils/adt/timestamp.c:530 #, c-format msgid "time zone \"%s\" not recognized" msgstr "უცნობი დროის სარტყელი: %s" -#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 +#: utils/adt/datetime.c:4217 utils/adt/datetime.c:4224 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "დროის/თარიღის ველის მნიშვნელობა დიაპაზონს გარეთაა: \"%s\"" -#: utils/adt/datetime.c:4110 +#: utils/adt/datetime.c:4226 #, c-format -msgid "Perhaps you need a different \"datestyle\" setting." +msgid "Perhaps you need a different \"DateStyle\" setting." msgstr "" -#: utils/adt/datetime.c:4115 +#: utils/adt/datetime.c:4231 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "ინტერვალის ველის მნიშვნელობა დიაპაზონს გარეთაა: \"%s\"" -#: utils/adt/datetime.c:4121 +#: utils/adt/datetime.c:4237 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "" -#: utils/adt/datetime.c:4135 +#: utils/adt/datetime.c:4251 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "" @@ -24351,17 +25350,22 @@ msgstr "" msgid "invalid Datum pointer" msgstr "არასწორი მაჩვენებელი: Datum" -#: utils/adt/dbsize.c:760 utils/adt/dbsize.c:836 +#: utils/adt/dbsize.c:293 utils/adt/genfile.c:656 +#, c-format +msgid "tablespace with OID %u does not exist" +msgstr "ცხრილების სივრცე OID-ით %u არ არსებობს" + +#: utils/adt/dbsize.c:782 utils/adt/dbsize.c:858 #, c-format msgid "invalid size: \"%s\"" msgstr "არასწორი ზომა: %s" -#: utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:859 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "ერთეულის არასწორი ზომა: \"%s\"." -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:860 #, c-format msgid "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." msgstr "პარამეტრის სწორი ერთეულებია \"ბ\", \"კბ\", \"მბ\", \"გბ\", \"ტბ\" და \"პბ\"." @@ -24386,32 +25390,32 @@ msgstr "დაშიფვრის შედეგი ძალიან დი msgid "result of decoding conversion is too large" msgstr "გაშიფვრის შედეგი ძალიან დიდია" -#: utils/adt/encode.c:217 utils/adt/encode.c:227 +#: utils/adt/encode.c:238 utils/adt/encode.c:248 #, c-format msgid "invalid hexadecimal digit: \"%.*s\"" msgstr "არასწორი თექვსმეტობითი რიცხვი: \"%.*s\"" -#: utils/adt/encode.c:223 +#: utils/adt/encode.c:244 #, c-format msgid "invalid hexadecimal data: odd number of digits" msgstr "არასწორი თექვსმეტობითი მონაცემები: ციფრების კენტი რაოდენობა" -#: utils/adt/encode.c:344 +#: utils/adt/encode.c:365 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "base64 მიმდევრობის გაშიფვრისას აღმოჩენილია მოულოდნელი \"=\"" -#: utils/adt/encode.c:356 +#: utils/adt/encode.c:377 #, c-format msgid "invalid symbol \"%.*s\" found while decoding base64 sequence" msgstr "base64 მიმდევრობის გაშიფვრისას აღმოჩენილია არასწორი სიმბოლო \"%.*s\"" -#: utils/adt/encode.c:377 +#: utils/adt/encode.c:398 #, c-format msgid "invalid base64 end sequence" msgstr "base64-ის არასწორი დასრულების მიმდევრობა" -#: utils/adt/encode.c:378 +#: utils/adt/encode.c:399 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "" @@ -24446,335 +25450,355 @@ msgstr "ჩამონათვალის მიმდინარე ტი msgid "enum %s contains no values" msgstr "ჩამონათვალი %s მნიშვნელობებს არ შეიცავს" -#: utils/adt/float.c:83 +#: utils/adt/float.c:90 #, c-format msgid "value out of range: overflow" msgstr "მნიშვნელობა დიაპაზონს გარეთაა: გადავსება" -#: utils/adt/float.c:91 +#: utils/adt/float.c:98 #, c-format msgid "value out of range: underflow" msgstr "მნიშვნელობა დიაპაზონს გარეთაა: არშევსება" -#: utils/adt/float.c:280 +#: utils/adt/float.c:287 #, c-format msgid "\"%s\" is out of range for type real" msgstr "%s დიაპაზონს გარეთაა ტიპისთვის: real" -#: utils/adt/float.c:482 +#: utils/adt/float.c:489 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "%s დიაპაზონს გარეთაა ტიპისთვის: double precision" -#: utils/adt/float.c: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:1254 utils/adt/float.c:1328 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:4696 utils/adt/numeric.c:4701 utils/adt/varlena.c:4093 #, 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:1454 utils/adt/numeric.c:3812 utils/adt/numeric.c:10454 #, 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:1522 utils/adt/numeric.c:4100 utils/adt/numeric.c:4212 #, 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:1526 utils/adt/numeric.c:4104 utils/adt/numeric.c:11345 #, 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:1702 utils/adt/float.c:1735 utils/adt/numeric.c:4012 utils/adt/numeric.c:11125 #, 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:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3950 utils/adt/numeric.c:4007 utils/adt/numeric.c:11129 #, c-format msgid "cannot take logarithm of a negative number" msgstr "უარყოფითი რიცხვის ლოგარითმის აღება შეუძლებელია" -#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 utils/adt/float.c:2696 utils/adt/float.c:2720 +#: utils/adt/float.c:1772 utils/adt/float.c:1803 utils/adt/float.c:1898 utils/adt/float.c:1925 utils/adt/float.c:1953 utils/adt/float.c:1980 utils/adt/float.c:2127 utils/adt/float.c:2164 utils/adt/float.c:2334 utils/adt/float.c:2390 utils/adt/float.c:2455 utils/adt/float.c:2512 utils/adt/float.c:2703 utils/adt/float.c:2727 #, c-format msgid "input is out of range" msgstr "შეყვანილი მნიშვნელობა დიაპაზონის გარეთაა" -#: utils/adt/float.c:4000 utils/adt/numeric.c:1842 +#: utils/adt/float.c:4085 utils/adt/numeric.c:1979 #, c-format msgid "count must be greater than zero" msgstr "რაოდენობა ნულზე მეტი უნდა იყოს" -#: utils/adt/float.c:4005 utils/adt/numeric.c:1853 +#: utils/adt/float.c:4090 utils/adt/numeric.c:1990 #, 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:4096 utils/adt/numeric.c:1995 #, 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:4162 utils/adt/numeric.c:2009 #, c-format msgid "lower bound cannot equal upper bound" msgstr "ქვედა ზღვარი ზედა ზღვარის ტოლი ვერ იქნება" -#: utils/adt/formatting.c:530 +#: utils/adt/formatting.c:556 #, c-format msgid "invalid format specification for an interval value" msgstr "ინტერვალის მნიშვნელობის ფორმატის არასწორი სპეციფიკაცია" -#: utils/adt/formatting.c:531 +#: utils/adt/formatting.c:557 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "" -#: utils/adt/formatting.c:1161 +#: utils/adt/formatting.c:1197 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" ბოლო გამოყენებული შაბლონი უნდა იყოს" -#: utils/adt/formatting.c:1169 +#: utils/adt/formatting.c:1205 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" \"PR\"-ზე წინ უნდა იყოს" -#: utils/adt/formatting.c:1185 +#: utils/adt/formatting.c:1221 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" \"PR\"-ზე წინ უნდა იყოს" -#: utils/adt/formatting.c:1212 +#: utils/adt/formatting.c:1248 #, c-format msgid "multiple decimal points" msgstr "ბევრი ათობითი წერტილი" -#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 +#: utils/adt/formatting.c:1252 utils/adt/formatting.c:1339 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "\"V\"-ს და ათობით წერტილს ერთად ვერ გამოიყენებთ" -#: utils/adt/formatting.c:1228 +#: utils/adt/formatting.c:1264 #, c-format msgid "cannot use \"S\" twice" msgstr "\"S\"-ს ორჯერ ვერ გამოიყენებთ" -#: utils/adt/formatting.c:1232 +#: utils/adt/formatting.c:1268 #, 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:1288 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "\"S\"-ის და \"MI\"-ის ერთად გამოყენება შეუძლებელია" -#: utils/adt/formatting.c:1262 +#: utils/adt/formatting.c:1298 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "\"S\"-ის და \"PL\"-ის ერთად გამოყენება შეუძლებელია" -#: utils/adt/formatting.c:1272 +#: utils/adt/formatting.c:1308 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "\"S\"-ის და \"SG\"-ის ერთად გამოყენება შეუძლებელია" -#: utils/adt/formatting.c:1281 +#: utils/adt/formatting.c:1317 #, 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:1326 +#, c-format +msgid "cannot use \"RN\" twice" +msgstr "\"RN\"-ს ორჯერ ვერ გამოიყენებთ" + +#: utils/adt/formatting.c:1347 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "\"EEEE\"-ს ორჯერ ვერ გამოყენებთ" -#: utils/adt/formatting.c:1313 +#: utils/adt/formatting.c:1353 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" სხვა ფორმატებთან შეუთავსებელია" -#: utils/adt/formatting.c:1314 +#: utils/adt/formatting.c:1354 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "" -#: utils/adt/formatting.c:1398 +#: utils/adt/formatting.c:1363 +#, c-format +msgid "\"RN\" is incompatible with other formats" +msgstr "\"RN\" სხვა ფორმატებთან შეუთავსებელია" + +#: utils/adt/formatting.c:1364 +#, c-format +msgid "\"RN\" may only be used together with \"FM\"." +msgstr "" + +#: utils/adt/formatting.c:1445 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "თარიღი/დროის არასწორი გამყოფი: \"%s\"" -#: utils/adt/formatting.c:1525 +#: utils/adt/formatting.c:1572 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" რიცხვი არაა" -#: utils/adt/formatting.c:1603 -#, 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:1717 utils/adt/formatting.c:1781 utils/adt/formatting.c:1845 #, c-format msgid "could not determine which collation to use for %s function" msgstr "" -#: utils/adt/formatting.c:2410 +#: utils/adt/formatting.c:1853 +#, c-format +msgid "Unicode case folding can only be performed if server encoding is UTF8" +msgstr "უნიკოდის რეგისტრის მოკეცვა, მხოლოდ, მაშინაა შესაძლებელი, როცა სერვერის კოდირებაა UTF8" + +#: utils/adt/formatting.c:2150 #, c-format msgid "invalid combination of date conventions" msgstr "თარიღის გარდაქმნის არასწორი კომბინაცია" -#: utils/adt/formatting.c:2411 +#: utils/adt/formatting.c:2151 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "" -#: utils/adt/formatting.c:2433 +#: utils/adt/formatting.c:2173 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "" -#: utils/adt/formatting.c:2435 +#: utils/adt/formatting.c:2175 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "ეს მნიშვნელობა იგივე ველის ტიპისთვის წინა პარამეტრს ეწინააღმდეგება." -#: utils/adt/formatting.c:2502 +#: utils/adt/formatting.c:2242 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "" -#: utils/adt/formatting.c:2504 +#: utils/adt/formatting.c:2244 #, 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:2246 utils/adt/formatting.c:2260 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "" -#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 +#: utils/adt/formatting.c:2256 utils/adt/formatting.c:2269 utils/adt/formatting.c:2490 utils/adt/formatting.c:3390 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "მნიშვნელობა \"%s\" \"%s\"-თვის არასწორია" -#: utils/adt/formatting.c:2518 +#: utils/adt/formatting.c:2258 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "" -#: utils/adt/formatting.c:2531 +#: utils/adt/formatting.c:2271 #, c-format msgid "Value must be an integer." msgstr "მნიშვნელობა მთელი რიცხვი უნდა იყოს." -#: utils/adt/formatting.c:2536 +#: utils/adt/formatting.c:2276 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "საწყის სტრიქონში \"%s\"-ის მნიშვნელობა დიაპაზონს გარეთაა" -#: utils/adt/formatting.c:2538 +#: utils/adt/formatting.c:2278 #, c-format msgid "Value must be in the range %d to %d." msgstr "მნიშვნელობა უნდა იყოს დიაპაზონიდან %d-%d." -#: utils/adt/formatting.c:2752 +#: utils/adt/formatting.c:2492 #, 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:2708 utils/adt/formatting.c:2728 utils/adt/formatting.c:2748 utils/adt/formatting.c:2768 utils/adt/formatting.c:2787 utils/adt/formatting.c:2806 utils/adt/formatting.c:2830 utils/adt/formatting.c:2848 utils/adt/formatting.c:2866 utils/adt/formatting.c:2884 utils/adt/formatting.c:2901 utils/adt/formatting.c:2918 #, c-format msgid "localized string format value too long" msgstr "ლოკალიზებული სტრიქონის ფორმატის მნიშვნელობა მეტისმეტად გრძელია" -#: utils/adt/formatting.c:3458 +#: utils/adt/formatting.c:3198 #, c-format msgid "unmatched format separator \"%c\"" msgstr "" -#: utils/adt/formatting.c:3519 +#: utils/adt/formatting.c:3259 #, c-format msgid "unmatched format character \"%s\"" msgstr "" -#: utils/adt/formatting.c:3652 +#: utils/adt/formatting.c:3392 #, c-format msgid "Time zone abbreviation is not recognized." msgstr "დროის სარტყელის აბრევიატურა უცნობია." -#: utils/adt/formatting.c:3853 +#: utils/adt/formatting.c:3593 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "არასწორი შეყვანილი სტრიქონი \"Y,YYY\"-სთვის" -#: utils/adt/formatting.c:3942 +#: utils/adt/formatting.c:3600 +#, c-format +msgid "value for \"Y,YYY\" in source string is out of range" +msgstr "წყარო სტრიქონში \"Y,YYY\"-ის მნიშვნელობები დიაპაზონს გარეთაა" + +#: utils/adt/formatting.c:3689 #, c-format msgid "input string is too short for datetime format" msgstr "შეყვანილი სტრიქონი datetime ფორმატისთვის მეტისმეტად მოკლეა" -#: utils/adt/formatting.c:3950 +#: utils/adt/formatting.c:3697 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "" -#: utils/adt/formatting.c:4494 +#: utils/adt/formatting.c:4241 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "" -#: utils/adt/formatting.c:4500 +#: utils/adt/formatting.c:4247 #, c-format msgid "timestamptz out of range" msgstr "timestamptz დიაპაზონს გარეთაა" -#: utils/adt/formatting.c:4528 +#: utils/adt/formatting.c:4275 #, c-format msgid "datetime format is zoned but not timed" msgstr "" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4324 #, c-format msgid "missing time zone in input string for type timetz" msgstr "" -#: utils/adt/formatting.c:4583 +#: utils/adt/formatting.c:4330 #, c-format msgid "timetz out of range" msgstr "timetz დიაპაზონს გარეთაა" -#: utils/adt/formatting.c:4609 +#: utils/adt/formatting.c:4356 #, c-format msgid "datetime format is not dated and not timed" msgstr "" -#: utils/adt/formatting.c:4786 +#: utils/adt/formatting.c:4533 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "საათი \"%d\" არასწორია 12-საათიანი ათვლისთვის" -#: utils/adt/formatting.c:4788 +#: utils/adt/formatting.c:4535 #, 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:4712 #, c-format msgid "cannot calculate day of year without year information" msgstr "წლის დღის გამოთვლა წლის მითითების გარეშე შეუძლებელია" -#: utils/adt/formatting.c:5852 +#: utils/adt/formatting.c:5833 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" შეყვანისთვის მხარდაჭერილი არაა" -#: utils/adt/formatting.c:5864 +#: utils/adt/formatting.c:6110 #, c-format -msgid "\"RN\" not supported for input" -msgstr "\"RN\" შეყვანისთვის მხარდაჭერილი არაა" +msgid "invalid Roman numeral" +msgstr "არასწორი რომაული რიცხვი" #: utils/adt/genfile.c:84 #, c-format @@ -24786,7 +25810,7 @@ msgstr "აბსოლუტური ბილიკი დაშვებუ msgid "path must be in or below the data directory" msgstr "ბილიკი მონაცემების საქაღალდეში ან უფრო ქვემოთ უნდა იყოს" -#: utils/adt/genfile.c:114 utils/adt/oracle_compat.c:190 utils/adt/oracle_compat.c:288 utils/adt/oracle_compat.c:839 utils/adt/oracle_compat.c:1142 +#: utils/adt/genfile.c:114 utils/adt/oracle_compat.c:206 utils/adt/oracle_compat.c:304 utils/adt/oracle_compat.c:855 utils/adt/oracle_compat.c:1158 #, c-format msgid "requested length too large" msgstr "მოთხოვნილი სიგრძე ძალიან დიდია" @@ -24801,11 +25825,6 @@ msgstr "ფაილში (%s) გადახვევის პრობლ msgid "file length too large" msgstr "ფალის სიგრძე მეტისმეად დიდია" -#: utils/adt/genfile.c:656 -#, c-format -msgid "tablespace with OID %u does not exist" -msgstr "ცხრილების სივრცე OID-ით %u არ არსებობს" - #: utils/adt/geo_ops.c:998 utils/adt/geo_ops.c:1052 #, c-format msgid "invalid line specification: A and B cannot both be zero" @@ -24856,13 +25875,13 @@ msgstr "უნდა მოითხოვოთ სულ ცოტა 2 წე 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:1767 utils/adt/timestamp.c:6708 utils/adt/timestamp.c:6794 #, 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:4645 utils/adt/rangetypes.c:1599 utils/adt/rangetypes.c:1612 utils/adt/varbit.c:1676 utils/adt/varlena.c:4143 #, c-format msgid "bigint out of range" msgstr "bigint დიაპაზონს გარეთაა" @@ -24872,48 +25891,48 @@ msgstr "bigint დიაპაზონს გარეთაა" msgid "OID out of range" msgstr "OID დიაპაზონს გარეთაა" -#: utils/adt/json.c:202 utils/adt/jsonb.c:664 +#: utils/adt/json.c:204 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "" -#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 +#: utils/adt/json.c:1043 utils/adt/json.c:1053 utils/fmgr/funcapi.c:2090 #, c-format 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:1076 utils/adt/json.c:1275 utils/adt/json.c:1457 utils/adt/json.c:1531 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:1126 utils/adt/json.c:1297 #, 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:1235 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:1237 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:1435 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:1520 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:1850 utils/adt/jsonb_util.c:1963 #, c-format msgid "duplicate JSON object key value" msgstr "დუბლირებული JSON ობიექტის გასაღების მნიშვნელობა" @@ -24978,22 +25997,22 @@ msgstr "jsonb ობიექტის %s-ის ტიპში გადაყ msgid "cannot cast jsonb array or object to type %s" msgstr "jsonb ობიექტის ან მასივის %s-ის ტიპში გადაყვანა შეუძლებელია" -#: utils/adt/jsonb_util.c:756 +#: utils/adt/jsonb_util.c:763 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "" -#: utils/adt/jsonb_util.c:797 +#: utils/adt/jsonb_util.c:804 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "" -#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 +#: utils/adt/jsonb_util.c:1678 utils/adt/jsonb_util.c:1698 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" msgstr "jsonb მასივის ელემენტების სრული ზომება მაქსიმუმ დასაშვებზე (%d ბაიტი) დიდია" -#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 utils/adt/jsonb_util.c:1807 +#: utils/adt/jsonb_util.c:1759 utils/adt/jsonb_util.c:1794 utils/adt/jsonb_util.c:1814 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" msgstr "" @@ -25028,204 +26047,204 @@ msgstr "jsonb ქვესკრიპტს ტექსტური ტიპ 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:585 utils/adt/jsonfuncs.c:832 utils/adt/jsonfuncs.c:2441 utils/adt/jsonfuncs.c:3017 utils/adt/jsonfuncs.c:3950 utils/adt/jsonfuncs.c:4297 #, 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:590 utils/adt/jsonfuncs.c:817 utils/adt/jsonfuncs.c:3019 utils/adt/jsonfuncs.c:3937 #, c-format msgid "cannot call %s on an array" msgstr "%s-ის გამოძახება მასივზე შეუძლებელია" -#: utils/adt/jsonfuncs.c:723 +#: utils/adt/jsonfuncs.c:726 #, 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:1885 utils/adt/jsonfuncs.c:1922 #, 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:1889 utils/adt/jsonfuncs.c:1908 #, c-format msgid "cannot get array length of a non-array" msgstr "არა-მასივის მასივის სიგრძის მიღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:1985 +#: utils/adt/jsonfuncs.c:1988 #, c-format msgid "cannot call %s on a non-object" msgstr "არა-ობიექტზე %s-ის გამოძახება შეუძლებელია" -#: utils/adt/jsonfuncs.c:2173 +#: utils/adt/jsonfuncs.c:2176 #, c-format msgid "cannot deconstruct an array as an object" msgstr "მასივის დეკონსტრუქცია ობიექტად შეუძლებელია" -#: utils/adt/jsonfuncs.c:2187 +#: utils/adt/jsonfuncs.c:2190 #, c-format msgid "cannot deconstruct a scalar" msgstr "სკალარის დეკონსტრუქცია შეუძლებელია" -#: utils/adt/jsonfuncs.c:2232 +#: utils/adt/jsonfuncs.c:2235 #, c-format msgid "cannot extract elements from a scalar" msgstr "სკალარიდან ელემენტების გამოღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:2236 +#: utils/adt/jsonfuncs.c:2239 #, c-format msgid "cannot extract elements from an object" msgstr "ობიექტიდან ელემენტების გამოღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:2423 utils/adt/jsonfuncs.c:4151 +#: utils/adt/jsonfuncs.c:2426 utils/adt/jsonfuncs.c:4175 #, 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:2517 utils/adt/jsonfuncs.c:2522 utils/adt/jsonfuncs.c:2540 utils/adt/jsonfuncs.c:2546 #, c-format msgid "expected JSON array" msgstr "მოველოდი JSON მასივს" -#: utils/adt/jsonfuncs.c:2515 +#: utils/adt/jsonfuncs.c:2518 #, c-format msgid "See the value of key \"%s\"." msgstr "იხილეთ მასივის ელემენტი \"%s\"." -#: utils/adt/jsonfuncs.c:2538 +#: utils/adt/jsonfuncs.c:2541 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "იხილეთ მასივის ელემენტი %s გასაღებიდან \"%s\"." -#: utils/adt/jsonfuncs.c:2544 +#: utils/adt/jsonfuncs.c:2547 #, c-format msgid "See the array element %s." msgstr "იხილეთ მასივის ელემენტი %s." -#: utils/adt/jsonfuncs.c:2596 +#: utils/adt/jsonfuncs.c:2599 #, 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:3649 #, 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:3673 #, c-format msgid "could not determine row type for result of %s" msgstr "%s-ის შედეგის მწკრივის ტიპის დადგენა შეუძლებელია" -#: utils/adt/jsonfuncs.c:3651 +#: utils/adt/jsonfuncs.c:3675 #, 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:4061 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:4192 utils/adt/jsonfuncs.c:4276 #, c-format msgid "argument of %s must be an array of objects" msgstr "%s-ის არგუმენტი ობიექტების მასივს უნდა წარმოადგენდეს" -#: utils/adt/jsonfuncs.c:4201 +#: utils/adt/jsonfuncs.c:4225 #, 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:4680 utils/adt/jsonfuncs.c:4739 utils/adt/jsonfuncs.c:4819 #, c-format msgid "cannot delete from scalar" msgstr "სკალარიდან წაშლა შეუძლებელია" -#: utils/adt/jsonfuncs.c:4778 +#: utils/adt/jsonfuncs.c:4824 #, 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:4892 utils/adt/jsonfuncs.c:5051 #, c-format msgid "cannot set path in scalar" msgstr "სკალარში ბილიკის დაყენება შეუძლებელია" -#: utils/adt/jsonfuncs.c:4887 utils/adt/jsonfuncs.c:4929 +#: utils/adt/jsonfuncs.c:4933 utils/adt/jsonfuncs.c:4975 #, 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:4946 #, c-format msgid "JSON value must not be null" msgstr "JSON მნიშვნელობა ნულოვანი ვერ იქნება" -#: utils/adt/jsonfuncs.c:4901 +#: utils/adt/jsonfuncs.c:4947 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "" -#: utils/adt/jsonfuncs.c:4902 +#: utils/adt/jsonfuncs.c:4948 #, 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:5003 #, c-format msgid "cannot delete path in scalar" msgstr "სკალარში ბილიკის წაშლა შეუძლებელია" -#: utils/adt/jsonfuncs.c:5171 +#: utils/adt/jsonfuncs.c:5217 #, 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:5236 utils/adt/jsonfuncs.c:5267 utils/adt/jsonfuncs.c:5340 #, c-format msgid "cannot replace existing key" msgstr "არსებული გასაღების ჩანაცვლება შეუძლებელია" -#: utils/adt/jsonfuncs.c:5191 utils/adt/jsonfuncs.c:5222 +#: utils/adt/jsonfuncs.c:5237 utils/adt/jsonfuncs.c:5268 #, 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:5341 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "" -#: utils/adt/jsonfuncs.c:5399 +#: utils/adt/jsonfuncs.c:5445 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "" -#: utils/adt/jsonfuncs.c:5416 +#: utils/adt/jsonfuncs.c:5462 #, c-format msgid "path element at position %d is out of range: %d" msgstr "" -#: utils/adt/jsonfuncs.c:5568 +#: utils/adt/jsonfuncs.c:5614 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "არასწორი ალმის ტიპი. დაშვებულია მხოლოდ მასივები და სკალარები" -#: utils/adt/jsonfuncs.c:5575 +#: utils/adt/jsonfuncs.c:5621 #, 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:5622 utils/adt/jsonfuncs.c:5644 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "" -#: utils/adt/jsonfuncs.c:5596 +#: utils/adt/jsonfuncs.c:5642 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "არასწორი ალამი ალმების მასივში: \"%s\"" @@ -25240,79 +26259,64 @@ msgstr "" msgid "LAST is allowed only in array subscripts" msgstr "" -#: utils/adt/jsonpath_exec.c:490 +#: utils/adt/jsonpath_exec.c:489 #, c-format msgid "single boolean result is expected" msgstr "მოველოდი ერთ ლოგიკურ შედეგს" -#: utils/adt/jsonpath_exec.c:850 +#: utils/adt/jsonpath_exec.c:849 #, 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:872 #, 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:921 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "" -#: utils/adt/jsonpath_exec.c:979 +#: utils/adt/jsonpath_exec.c:978 #, 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:1042 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSON ობიექტი არ შეიცავს გასაღებს \"%s\"" -#: utils/adt/jsonpath_exec.c:1055 +#: utils/adt/jsonpath_exec.c:1054 #, 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:1112 #, 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:1165 utils/adt/jsonpath_exec.c:1191 utils/adt/jsonpath_exec.c:1279 utils/adt/jsonpath_exec.c:1304 utils/adt/jsonpath_exec.c:1356 utils/adt/jsonpath_exec.c:1376 utils/adt/jsonpath_exec.c:1438 utils/adt/jsonpath_exec.c:1527 utils/adt/jsonpath_exec.c:1560 utils/adt/jsonpath_exec.c:1584 #, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type double precision" -msgstr "არგუმენტი \"%s\" jsonpath-ის ელემენტის მეთოდისთვის .%s() არასწორია ტიპისთვის double precision" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type %s" +msgstr "არგუმენტი \"%s\" jsonpath-ის ელემენტის მეთოდისთვის .%s() არასწორია ტიპისთვის %s" -#: 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:1170 utils/adt/jsonpath_exec.c:1196 utils/adt/jsonpath_exec.c:1413 utils/adt/jsonpath_exec.c:1445 #, 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:1209 utils/adt/jsonpath_exec.c:1312 utils/adt/jsonpath_exec.c:1454 utils/adt/jsonpath_exec.c:1592 #, 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 -#, 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 -#, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" -msgstr "" - #: utils/adt/jsonpath_exec.c:1385 #, c-format -msgid "jsonpath item method .%s() can only be applied to a bool, string, or numeric value" -msgstr "" - -#: utils/adt/jsonpath_exec.c:1438 utils/adt/jsonpath_exec.c:1527 -#, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type numeric" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, or numeric value" msgstr "" #: utils/adt/jsonpath_exec.c:1486 @@ -25325,129 +26329,124 @@ msgstr "" 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:1647 #, c-format -msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type integer" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, numeric, or datetime value" msgstr "" -#: utils/adt/jsonpath_exec.c:1663 -#, c-format -msgid "jsonpath item method .%s() can only be applied to a bool, string, numeric, or datetime value" -msgstr "" - -#: utils/adt/jsonpath_exec.c:2152 +#: utils/adt/jsonpath_exec.c:2136 #, 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:2143 #, 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:2211 #, 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:2310 #, 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:2356 #, 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:2449 #, 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:2483 utils/adt/jsonpath_exec.c:2489 utils/adt/jsonpath_exec.c:2516 utils/adt/jsonpath_exec.c:2544 utils/adt/jsonpath_exec.c:2597 utils/adt/jsonpath_exec.c:2648 utils/adt/jsonpath_exec.c:2719 #, c-format msgid "%s format is not recognized: \"%s\"" msgstr "%s-ის ფორმატი უცნობია: \"%s\"" -#: utils/adt/jsonpath_exec.c:2501 +#: utils/adt/jsonpath_exec.c:2485 #, 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:2678 utils/adt/jsonpath_exec.c:2759 #, c-format msgid "time precision of jsonpath item method .%s() is invalid" msgstr "" -#: utils/adt/jsonpath_exec.c:2830 +#: utils/adt/jsonpath_exec.c:2839 #, 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:3123 #, 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:3157 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "" -#: utils/adt/jsonpath_exec.c:3200 +#: utils/adt/jsonpath_exec.c:3210 #, c-format msgid "\"vars\" argument is not an object" msgstr "არგუმენტი \"vars\" ობიექტი არაა" -#: utils/adt/jsonpath_exec.c:3201 +#: utils/adt/jsonpath_exec.c:3211 #, 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:3474 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:3476 +#: utils/adt/jsonpath_exec.c:3486 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "" -#: utils/adt/jsonpath_exec.c:3660 +#: utils/adt/jsonpath_exec.c:3670 #, 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:3672 #, c-format msgid "Use *_tz() function for time zone support." msgstr "" -#: utils/adt/jsonpath_exec.c:3956 +#: utils/adt/jsonpath_exec.c:3980 #, 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:3982 utils/adt/jsonpath_exec.c:3987 #, 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:3986 #, 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:4044 utils/adt/jsonpath_exec.c:4068 #, 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:4049 utils/adt/jsonpath_exec.c:4073 #, 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 @@ -25455,42 +26454,42 @@ msgstr "" msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "" -#: utils/adt/like.c:159 +#: utils/adt/like.c:162 #, c-format -msgid "nondeterministic collations are not supported for LIKE" -msgstr "" +msgid "could not determine which collation to use for LIKE" +msgstr "შეუძლებელია დადგება, რომელი კოლაცია გამოვიყენო ოპერატორისთვის LIKE" -#: utils/adt/like.c:188 utils/adt/like_support.c:1023 +#: utils/adt/like.c:193 utils/adt/like_support.c:1019 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "" -#: utils/adt/like.c:200 +#: utils/adt/like.c:202 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "" -#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 +#: utils/adt/like_match.c:107 utils/adt/like_match.c:169 utils/adt/like_match.c:237 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 +#: utils/adt/like_match.c:437 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "არასწორი სპეციალური სიმბოლო" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:438 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "" -#: utils/adt/like_support.c:1013 +#: utils/adt/like_support.c:1009 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "" -#: utils/adt/like_support.c:1114 +#: utils/adt/like_support.c:1106 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "" @@ -25510,11 +26509,16 @@ msgstr "" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "" -#: utils/adt/mcxtfuncs.c:173 +#: utils/adt/mcxtfuncs.c:305 utils/adt/mcxtfuncs.c:391 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "პროცესი PID-ით %d PostgreSQL-ის სერვერის პროცესს არ წარმოადგენს" +#: utils/adt/mcxtfuncs.c:480 +#, c-format +msgid "PID %d is no longer a PostgreSQL server process" +msgstr "პროცესი PID-ით %d PostgreSQL-ის სერვერის პროცესს აღარ წარმოადგენს" + #: utils/adt/misc.c:237 #, c-format msgid "global tablespace never has databases" @@ -25624,7 +26628,7 @@ msgstr "cidr-ის არასწორი მნიშვნელობა: msgid "Value has bits set to right of mask." msgstr "" -#: utils/adt/network.c:152 utils/adt/network.c:1184 utils/adt/network.c:1209 utils/adt/network.c:1234 +#: utils/adt/network.c:152 utils/adt/network.c:1149 utils/adt/network.c:1174 utils/adt/network.c:1199 #, c-format msgid "could not format inet value: %m" msgstr "inet-ის მნიშვნელობის ფორმატის შეცდომა: %m" @@ -25652,162 +26656,162 @@ msgstr "არასწორი სიგრძე გარე \"%s\"-ის msgid "invalid external \"cidr\" value" msgstr "გარე cidr-ს არასწორი მნიშვნელობა" -#: utils/adt/network.c:336 utils/adt/network.c:359 +#: utils/adt/network.c:334 utils/adt/network.c:357 #, c-format msgid "invalid mask length: %d" msgstr "ნიღბის არასწორი სიგრძე: %d" -#: utils/adt/network.c:1252 +#: utils/adt/network.c:1217 #, c-format msgid "could not format cidr value: %m" msgstr "cird-ის მნიშვნელობის ფორმატის შეცდომა: %m" -#: utils/adt/network.c:1485 +#: utils/adt/network.c:1450 #, c-format msgid "cannot merge addresses from different families" msgstr "სხვადასხვა ოჯახის მისამართების შერწყმა შეუძლებელია" -#: utils/adt/network.c:1893 +#: utils/adt/network.c:1858 #, c-format msgid "cannot AND inet values of different sizes" msgstr "განსხვავებული ზომის მქონე inet-ის მნიშვნელობების AND შეუძლებელია" -#: utils/adt/network.c:1925 +#: utils/adt/network.c:1890 #, c-format msgid "cannot OR inet values of different sizes" msgstr "განსხვავებული ზომის მქონე inet-ის მნიშვნელობების OR შეუძლებელია" -#: utils/adt/network.c:1986 utils/adt/network.c:2062 +#: utils/adt/network.c:1951 utils/adt/network.c:2027 #, c-format msgid "result is out of range" msgstr "შედეგი დიაპაზონს გარეთაა" -#: utils/adt/network.c:2027 +#: utils/adt/network.c:1992 #, c-format 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:795 utils/adt/numeric.c:3762 utils/adt/numeric.c:7319 utils/adt/numeric.c:7522 utils/adt/numeric.c:7994 utils/adt/numeric.c:10928 utils/adt/numeric.c:11403 utils/adt/numeric.c:11497 utils/adt/numeric.c:11632 #, c-format msgid "value overflows numeric format" msgstr "მნიშვნელობა გადაავსებს რიცხვის ფორმატს" -#: utils/adt/numeric.c:1099 +#: utils/adt/numeric.c:1108 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "" -#: utils/adt/numeric.c:1105 +#: utils/adt/numeric.c:1114 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "" -#: utils/adt/numeric.c:1114 +#: utils/adt/numeric.c:1123 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "" -#: utils/adt/numeric.c:1329 utils/adt/numeric.c:1343 +#: utils/adt/numeric.c:1338 utils/adt/numeric.c:1352 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "" -#: utils/adt/numeric.c:1334 +#: utils/adt/numeric.c:1343 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "" -#: utils/adt/numeric.c:1352 +#: utils/adt/numeric.c:1361 #, c-format msgid "invalid NUMERIC type modifier" msgstr "არასწორი NUMERIC ტიპის მოდიფიკატორი" -#: utils/adt/numeric.c:1710 +#: utils/adt/numeric.c:1727 #, c-format msgid "start value cannot be NaN" msgstr "საწყისი მნიშვნელობა NaN ვერ იქნება" -#: utils/adt/numeric.c:1714 +#: utils/adt/numeric.c:1731 #, c-format msgid "start value cannot be infinity" msgstr "საწყისი მნიშვნელობა უსასრულო ვერ იქნება" -#: utils/adt/numeric.c:1721 +#: utils/adt/numeric.c:1738 #, c-format msgid "stop value cannot be NaN" msgstr "საბოლოო მნიშვნელობა NaN ვერ იქნება" -#: utils/adt/numeric.c:1725 +#: utils/adt/numeric.c:1742 #, c-format msgid "stop value cannot be infinity" msgstr "საბოლოო მნიშვნელობა უსასრულო ვერ იქნება" -#: utils/adt/numeric.c:1738 +#: utils/adt/numeric.c:1755 #, c-format msgid "step size cannot be NaN" msgstr "ბიჯის ზომა NaN ვერ იქნება" -#: utils/adt/numeric.c:1742 +#: utils/adt/numeric.c:1759 #, c-format msgid "step size cannot be infinity" msgstr "ბიჯის ზომა უსასრულო ვერ იქნება" -#: utils/adt/numeric.c:3634 +#: utils/adt/numeric.c:3752 #, c-format msgid "factorial of a negative number is undefined" msgstr "უასრყოფითი რიცხვის ფაქტორიალი გაურკვეველია" -#: utils/adt/numeric.c:4241 +#: utils/adt/numeric.c:4359 #, c-format msgid "lower bound cannot be NaN" msgstr "ქვედა ზღვარი ნულოვანი ვერ იქნება" -#: utils/adt/numeric.c:4245 +#: utils/adt/numeric.c:4363 #, c-format msgid "lower bound cannot be infinity" msgstr "ქვედა ზღვარი უსასრულობა ვერ იქნება" -#: utils/adt/numeric.c:4252 +#: utils/adt/numeric.c:4370 #, c-format msgid "upper bound cannot be NaN" msgstr "ზედა ზღვარი ნულოვანი ვერ იქნება" -#: utils/adt/numeric.c:4256 +#: utils/adt/numeric.c:4374 #, 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:4535 utils/adt/numeric.c:4623 utils/adt/numeric.c:4683 utils/adt/numeric.c:4879 #, 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:4539 utils/adt/numeric.c:4627 utils/adt/numeric.c:4687 utils/adt/numeric.c:4883 #, c-format msgid "cannot convert infinity to %s" msgstr "უსასრულობის %s-ში გადაყვანა შეუძლებელია" -#: utils/adt/numeric.c:4774 +#: utils/adt/numeric.c:4892 #, 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:8084 utils/adt/numeric.c:8135 #, c-format msgid "numeric field overflow" msgstr "რიცხვითი ველის გადავსება" -#: utils/adt/numeric.c:7967 +#: utils/adt/numeric.c:8085 #, 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:8136 #, 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:11701 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 "ქვედა ზღვარი ზედა ზღვარზე ნაკლები ან ტოლი უნდა იყოს" @@ -25817,27 +26821,27 @@ msgstr "ქვედა ზღვარი ზედა ზღვარზე msgid "invalid oidvector data" msgstr "oidvevtor-ის არასწორი მონაცემები" -#: utils/adt/oracle_compat.c:976 +#: utils/adt/oracle_compat.c:992 #, c-format msgid "requested character too large" msgstr "მოთხოვნილი სიმბოლო ძალიან დიდია" -#: utils/adt/oracle_compat.c:1020 +#: utils/adt/oracle_compat.c:1036 #, c-format msgid "character number must be positive" msgstr "cost დადებით უნდა იყოს" -#: utils/adt/oracle_compat.c:1024 +#: utils/adt/oracle_compat.c:1040 #, c-format msgid "null character not permitted" msgstr "ნულოვანი სიმბოლო ადუშვებელია" -#: utils/adt/oracle_compat.c:1042 utils/adt/oracle_compat.c:1095 +#: utils/adt/oracle_compat.c:1058 utils/adt/oracle_compat.c:1111 #, c-format msgid "requested character too large for encoding: %u" msgstr "მოთხოვნილი სიმბოლო ძალიან დიდია კოდირებისთვის: %u" -#: utils/adt/oracle_compat.c:1083 +#: utils/adt/oracle_compat.c:1099 #, c-format msgid "requested character not valid for encoding: %u" msgstr "მოთხოვნილი სიმბოლო არასწორია კოდირებისთვის: %u" @@ -25847,137 +26851,147 @@ msgstr "მოთხოვნილი სიმბოლო არასწო msgid "percentile value %g is not between 0 and 1" msgstr "" -#: utils/adt/pg_locale.c:1484 -#, 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 -#, c-format -msgid "ICU is not supported in this build" -msgstr "ამ აგებაში ICU-ის მხარდაჭერა არ არსებბს" - -#: utils/adt/pg_locale.c:1523 +#: utils/adt/pg_locale.c:303 utils/adt/pg_locale.c:335 #, c-format -msgid "could not create locale \"%s\": %m" -msgstr "ლოკალის \"%s\" შექმნა შეუძლებელია: %m" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "ლოკალის სახელი \"%s\" არა-ASCII სიმბოლოებს შეიცავს" -#: utils/adt/pg_locale.c:1526 -#, c-format -msgid "The operating system could not find any locale data for the locale name \"%s\"." -msgstr "" - -#: utils/adt/pg_locale.c:1647 -#, 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:1119 #, 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:1125 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "კოლაციის ვერსია არ ემთხვევა: %s" -#: utils/adt/pg_locale.c:1702 +#: utils/adt/pg_locale.c:1127 #, 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:1130 #, 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:1483 utils/adt/pg_locale.c:1510 utils/adt/pg_locale_builtin.c:186 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "არასწორი ლოკალის სახელი \"%s\" ჩაშენებული მომწოდებლისთვის" -#: utils/adt/pg_locale.c:1791 +#: utils/adt/pg_locale.c:1575 #, c-format -msgid "could not load locale \"%s\"" -msgstr "ენის ჩატვირთვის შეცდომა: %s" +msgid "could not convert locale name \"%s\" to language tag: %s" +msgstr "მდებარეობის კოდის \"%s\" ენის ჭდეში (%s) გადაყვანის შეცდომა" -#: utils/adt/pg_locale.c:1816 +#: utils/adt/pg_locale.c:1584 utils/adt/pg_locale.c:1659 utils/adt/pg_locale_icu.c:215 #, c-format -msgid "could not get collation version for locale \"%s\": error code %lu" -msgstr "" +msgid "ICU is not supported in this build" +msgstr "ამ აგებაში ICU-ის მხარდაჭერა არ არსებბს" -#: utils/adt/pg_locale.c:1872 utils/adt/pg_locale.c:1885 +#: utils/adt/pg_locale.c:1617 #, c-format -msgid "could not convert string to UTF-16: error code %lu" +msgid "could not get language from ICU locale \"%s\": %s" +msgstr "'ICU' ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" + +#: utils/adt/pg_locale.c:1619 utils/adt/pg_locale.c:1649 +#, c-format +msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." +msgstr "ICU ლოკალის გადამოწმების გასათიშად პარამეტრი \"%s\" დააყენეთ მნიშვნელობაზე \"%s\"." + +#: utils/adt/pg_locale.c:1647 +#, c-format +msgid "ICU locale \"%s\" has unknown language \"%s\"" +msgstr "ICU ლოკალს \"%s\" გააჩნია უცნობი ენა \"%s\"" + +#: utils/adt/pg_locale_icu.c:264 +#, c-format +msgid "could not get language from locale \"%s\": %s" +msgstr "ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" + +#: utils/adt/pg_locale_icu.c:286 utils/adt/pg_locale_icu.c:303 +#, c-format +msgid "could not open collator for locale \"%s\": %s" msgstr "" -#: utils/adt/pg_locale.c:1897 +#: utils/adt/pg_locale_icu.c:374 #, c-format -msgid "could not compare Unicode strings: %m" -msgstr "უნიკოდის სტრიქონების შედარება შეუძლებელია: %m" +msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" +msgstr "ლოკალისთვის \"%s\" წესებით \"%s\" კოლატორის გახსნის შეცდომა: %s" -#: utils/adt/pg_locale.c:2071 +#: utils/adt/pg_locale_icu.c:488 #, c-format msgid "collation failed: %s" msgstr "კოლაციის შეცდომა: %s" -#: utils/adt/pg_locale.c:2290 utils/adt/pg_locale.c:2322 +#: utils/adt/pg_locale_icu.c:567 utils/adt/pg_locale_icu.c:831 #, c-format msgid "sort key generation failed: %s" msgstr "დალაგების გასაღების გენერაციის შეცდომა: %s" -#: utils/adt/pg_locale.c:2612 +#: utils/adt/pg_locale_icu.c:641 utils/adt/pg_locale_icu.c:653 utils/adt/pg_locale_icu.c:878 utils/adt/pg_locale_icu.c:899 #, c-format -msgid "could not get language from locale \"%s\": %s" -msgstr "ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" +msgid "%s failed: %s" +msgstr "%s ვერ მოხერხდა: %s" -#: utils/adt/pg_locale.c:2633 utils/adt/pg_locale.c:2649 +#: utils/adt/pg_locale_icu.c:682 #, c-format -msgid "could not open collator for locale \"%s\": %s" -msgstr "" +msgid "case conversion failed: %s" +msgstr "სიმბოლოების ზომის გარდაქმნის შეცდომა: %s" -#: utils/adt/pg_locale.c:2674 +#: utils/adt/pg_locale_icu.c:851 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "კოდირება \"%s\" ICU-ის მიერ მხარდაჭერილი არაა" -#: utils/adt/pg_locale.c:2681 +#: utils/adt/pg_locale_icu.c:858 #, 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_libc.c:553 #, c-format -msgid "%s failed: %s" -msgstr "%s ვერ მოხერხდა: %s" +msgid "collations with different collate and ctype values are not supported on this platform" +msgstr "" -#: utils/adt/pg_locale.c:2960 +#: utils/adt/pg_locale_libc.c:683 #, c-format -msgid "could not convert locale name \"%s\" to language tag: %s" -msgstr "მდებარეობის კოდის \"%s\" ენის ჭდეში (%s) გადაყვანის შეცდომა" +msgid "could not load locale \"%s\"" +msgstr "ენის ჩატვირთვის შეცდომა: %s" -#: utils/adt/pg_locale.c:3001 +#: utils/adt/pg_locale_libc.c:708 #, c-format -msgid "could not get language from ICU locale \"%s\": %s" -msgstr "'ICU' ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "" -#: utils/adt/pg_locale.c:3003 utils/adt/pg_locale.c:3032 +#: utils/adt/pg_locale_libc.c:771 utils/adt/pg_locale_libc.c:784 #, c-format -msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." -msgstr "ICU ლოკალის გადამოწმების გასათიშად პარამეტრი \"%s\" დააყენეთ მნიშვნელობაზე \"%s\"." +msgid "could not convert string to UTF-16: error code %lu" +msgstr "" -#: utils/adt/pg_locale.c:3030 +#: utils/adt/pg_locale_libc.c:793 #, c-format -msgid "ICU locale \"%s\" has unknown language \"%s\"" -msgstr "ICU ლოკალს \"%s\" გააჩნია უცნობი ენა \"%s\"" +msgid "could not compare Unicode strings: %m" +msgstr "უნიკოდის სტრიქონების შედარება შეუძლებელია: %m" -#: utils/adt/pg_locale.c:3181 +#: utils/adt/pg_locale_libc.c:825 +#, c-format +msgid "could not create locale \"%s\": %m" +msgstr "ლოკალის \"%s\" შექმნა შეუძლებელია: %m" + +#: utils/adt/pg_locale_libc.c:828 +#, c-format +msgid "The operating system could not find any locale data for the locale name \"%s\"." +msgstr "" + +#: utils/adt/pg_locale_libc.c:1000 #, c-format msgid "invalid multibyte character for locale" msgstr "არასწორი მრავალბაიტიანი სიმბოლო ლოკალისთვის" -#: utils/adt/pg_locale.c:3182 +#: utils/adt/pg_locale_libc.c:1001 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "" @@ -25992,27 +27006,27 @@ msgstr "pg_lsn-ში NaN-ის დამატება შეუძლებ msgid "cannot subtract NaN from pg_lsn" msgstr "pg_lsn-დან NaN-ის გამოკლება შეუძლებელია" -#: utils/adt/pg_upgrade_support.c:39 +#: utils/adt/pg_upgrade_support.c:38 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "" -#: utils/adt/pgstatfuncs.c:252 +#: utils/adt/pgstatfuncs.c:280 #, c-format msgid "invalid command name: \"%s\"" msgstr "არასწორი ბრძანების სახელი: \"%s\"" -#: utils/adt/pgstatfuncs.c:1739 +#: utils/adt/pgstatfuncs.c:1909 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "მოთხოვნილია უცნობი მთვლელის განულება: %s" -#: utils/adt/pgstatfuncs.c:1740 +#: utils/adt/pgstatfuncs.c:1910 #, c-format msgid "Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\"." msgstr "სამიზნე უნდა იყოს ერთ-ერთი სიიდან: \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", ან \"wal\"." -#: utils/adt/pgstatfuncs.c:1822 +#: utils/adt/pgstatfuncs.c:2027 #, c-format msgid "invalid subscription OID %u" msgstr "არასწორი გამოწერის OID %u" @@ -26037,67 +27051,67 @@ msgstr "გარსის ტიპის მნიშვნელობის msgid "cannot display a value of a shell type" msgstr "გარსის ტიპის მნიშვნელობის ჩვენება შეუძლებელია" -#: utils/adt/rangetypes.c:422 +#: utils/adt/rangetypes.c:424 #, c-format msgid "range constructor flags argument must not be null" msgstr "" -#: utils/adt/rangetypes.c:1021 +#: utils/adt/rangetypes.c:1023 #, c-format msgid "result of range difference would not be contiguous" msgstr "" -#: utils/adt/rangetypes.c:1082 +#: utils/adt/rangetypes.c:1084 #, c-format msgid "result of range union would not be contiguous" msgstr "" -#: utils/adt/rangetypes.c:1757 +#: utils/adt/rangetypes.c:1821 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "" -#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 utils/adt/rangetypes.c:2283 +#: utils/adt/rangetypes.c:2320 utils/adt/rangetypes.c:2333 utils/adt/rangetypes.c:2347 #, c-format msgid "invalid range bound flags" msgstr "" -#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 utils/adt/rangetypes.c:2284 +#: utils/adt/rangetypes.c:2321 utils/adt/rangetypes.c:2334 utils/adt/rangetypes.c:2348 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "სწორი მნიშვნელობებია \"[]\", \"[)\", \"(]\" და \"()\"." -#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 utils/adt/rangetypes.c:2470 +#: utils/adt/rangetypes.c:2416 utils/adt/rangetypes.c:2433 utils/adt/rangetypes.c:2448 utils/adt/rangetypes.c:2468 utils/adt/rangetypes.c:2479 utils/adt/rangetypes.c:2526 utils/adt/rangetypes.c:2534 #, c-format msgid "malformed range literal: \"%s\"" msgstr "დიაპაზონის არასწორი სტრიქონი: %s" -#: utils/adt/rangetypes.c:2354 +#: utils/adt/rangetypes.c:2418 #, c-format msgid "Junk after \"empty\" key word." msgstr "ნაგავი საკვანძო სიტყვა \"empty\"-ის შემდეგ." -#: utils/adt/rangetypes.c:2371 +#: utils/adt/rangetypes.c:2435 #, c-format msgid "Missing left parenthesis or bracket." msgstr "აკლია მარცხენა ფრჩხილი ან მრგვალი ფრჩხილი." -#: utils/adt/rangetypes.c:2386 +#: utils/adt/rangetypes.c:2450 #, c-format msgid "Missing comma after lower bound." msgstr "ქვედა ზღვარის შემდეგ მძიმე აკლია." -#: utils/adt/rangetypes.c:2406 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "Too many commas." msgstr "ძალიან ბევრი მძიმე." -#: utils/adt/rangetypes.c:2417 +#: utils/adt/rangetypes.c:2481 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "ნაგავი მარჯვენა ფრჩხილის ან მრგვალი ფრჩხილის შემდეგ." -#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4475 #, c-format msgid "regular expression failed: %s" msgstr "რეგულარული გამოსახულების შეცდომა: %s" @@ -26112,7 +27126,7 @@ msgstr "რეგულარული გამოსახულების 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:6818 utils/misc/guc.c:6852 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "არასწორი მნიშვნელობა პარამეტრისთვის \"%s\": %d" @@ -26148,7 +27162,7 @@ msgstr "ერთზე მეტი ფუნქცია სახელწო 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:10826 utils/adt/ruleutils.c:11039 #, c-format msgid "too many arguments" msgstr "მეტისმეტად ბევრი არგუმენტი" @@ -26158,7 +27172,7 @@ msgstr "მეტისმეტად ბევრი არგუმენტ msgid "Provide two argument types for operator." msgstr "ოპერატორისთვის ორი არგუმენტის ტიპი მიაწოდეთ." -#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 utils/adt/regproc.c:1815 utils/adt/varlena.c:3481 utils/adt/varlena.c:3486 #, c-format msgid "invalid name syntax" msgstr "სახელის არასწორი სინტაქსი" @@ -26183,77 +27197,92 @@ msgstr "მოველოდი ტიპის სახელს" msgid "improper type name" msgstr "არასწორი ტიპის სახელი" -#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 utils/adt/ri_triggers.c:2601 +#: utils/adt/ri_triggers.c:314 utils/adt/ri_triggers.c:1775 utils/adt/ri_triggers.c:2774 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 +#: utils/adt/ri_triggers.c:317 utils/adt/ri_triggers.c:1778 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "" -#: utils/adt/ri_triggers.c:2036 +#: utils/adt/ri_triggers.c:2192 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "\"INSERT\"-ისთვის საჭიროა %s ფუნქციის გაშვება" -#: utils/adt/ri_triggers.c:2042 +#: utils/adt/ri_triggers.c:2198 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "\"UPDATE\"-ისთვის საჭიროა %s ფუნქციის გაშვება" -#: utils/adt/ri_triggers.c:2048 +#: utils/adt/ri_triggers.c:2204 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "\"DELETE\"-ისთვის საჭიროა %s ფუნქციის გაშვება" -#: utils/adt/ri_triggers.c:2071 +#: utils/adt/ri_triggers.c:2227 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "" -#: utils/adt/ri_triggers.c:2073 +#: utils/adt/ri_triggers.c:2229 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "" -#: utils/adt/ri_triggers.c:2426 +#: utils/adt/ri_triggers.c:2599 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "" -#: utils/adt/ri_triggers.c:2430 +#: utils/adt/ri_triggers.c:2603 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "დიდი შანსია, ეს გამოიწვია წესმა, რომელმაც მოთხოვნა თავიდან დაწერა." -#: utils/adt/ri_triggers.c:2591 +#: utils/adt/ri_triggers.c:2764 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "" -#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 +#: utils/adt/ri_triggers.c:2767 utils/adt/ri_triggers.c:2806 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "" -#: utils/adt/ri_triggers.c:2605 +#: utils/adt/ri_triggers.c:2778 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." -msgstr "" +msgstr "გასაღები (%s)=(%s) არაა წარმოდგენილი ცხრილში \"%s\"." -#: utils/adt/ri_triggers.c:2608 +#: utils/adt/ri_triggers.c:2781 #, c-format msgid "Key is not present in table \"%s\"." msgstr "ცხრილში \"%s\" გასაღები არ არსებობს." -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2787 +#, c-format +msgid "update or delete on table \"%s\" violates RESTRICT setting of foreign key constraint \"%s\" on table \"%s\"" +msgstr "" + +#: utils/adt/ri_triggers.c:2792 +#, c-format +msgid "Key (%s)=(%s) is referenced from table \"%s\"." +msgstr "გასაღებს (%s)=(%s) მიმართავენ ცხრილიდან \"%s\"." + +#: utils/adt/ri_triggers.c:2795 +#, c-format +msgid "Key is referenced from table \"%s\"." +msgstr "გასაღებს მიმართავენ ცხრილიდან \"%s\"." + +#: utils/adt/ri_triggers.c:2801 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "" -#: utils/adt/ri_triggers.c:2622 +#: utils/adt/ri_triggers.c:2809 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "" @@ -26303,133 +27332,158 @@ msgstr "" msgid "improper binary format in record column %d" msgstr "" -#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 utils/adt/rowtypes.c:1699 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1471 utils/adt/rowtypes.c:1717 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "" -#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 utils/adt/rowtypes.c:1568 utils/adt/rowtypes.c:1753 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "" -#: utils/adt/ruleutils.c:2693 +#: utils/adt/ruleutils.c:2740 #, c-format msgid "input is a query, not an expression" msgstr "შეყვანა არის მოთხოვნა და არა გამოსახულება" -#: utils/adt/ruleutils.c:2705 +#: utils/adt/ruleutils.c:2752 #, c-format msgid "expression contains variables of more than one relation" msgstr "" -#: utils/adt/ruleutils.c:2712 +#: utils/adt/ruleutils.c:2759 #, c-format msgid "expression contains variables" msgstr "გამოხატულება შეიცავს ცვლადებს" -#: utils/adt/ruleutils.c:5242 +#: utils/adt/ruleutils.c:5433 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "წესს \"%s\" გააჩნია მხარდაუჭერელი მოვლენის ტიპი %d" -#: utils/adt/timestamp.c:128 +#: utils/adt/tid.c:317 +#, c-format +msgid "cannot look at latest visible tid for relation \"%s.%s\"" +msgstr "უკანასკნელ ხილული tid-ზე შეხედვა შეუძლებელია ურთიერთობისთვის \"%s.%s\"" + +#: utils/adt/tid.c:356 +#, c-format +msgid "ctid isn't of type TID" +msgstr "" + +#: utils/adt/tid.c:364 +#, c-format +msgid "currtid cannot handle views with no CTID" +msgstr "" + +#: utils/adt/tid.c:369 +#, c-format +msgid "the view has no rules" +msgstr "" + +#: utils/adt/tid.c:381 +#, c-format +msgid "only one select rule is allowed in views" +msgstr "ხედებში დაშვებულია, მხოლოდ, ერთი select-ის წესი" + +#: utils/adt/timestamp.c:130 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "TIMESTAMP(%d)%s-ის სიზუსტე უარყოფით არ უნდა იყოს" -#: utils/adt/timestamp.c:134 +#: utils/adt/timestamp.c:136 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "" -#: utils/adt/timestamp.c:394 +#: utils/adt/timestamp.c:204 utils/adt/timestamp.c:457 +#, c-format +msgid "timestamp out of range: \"%s\"" +msgstr "დროის შტამპი დიაპაზონს გარეთაა: \"%s\"" + +#: utils/adt/timestamp.c:396 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "" -#: utils/adt/timestamp.c:512 +#: utils/adt/timestamp.c:514 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "" -#: utils/adt/timestamp.c:524 +#: utils/adt/timestamp.c:526 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "რიცხვითი დროის სარტყელი \"%s\" დიაპაზონს გარეთაა" -#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 utils/adt/timestamp.c:643 +#: utils/adt/timestamp.c:626 utils/adt/timestamp.c:634 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "დროის შტამპი დიაპაზონს გარეთაა: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:744 +#: utils/adt/timestamp.c:735 #, c-format msgid "timestamp cannot be NaN" msgstr "დროის შტამპი NaN ვერ იქნება" -#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 +#: utils/adt/timestamp.c:753 utils/adt/timestamp.c:765 #, c-format msgid "timestamp out of range: \"%g\"" 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:948 utils/adt/timestamp.c:1507 utils/adt/timestamp.c:1517 utils/adt/timestamp.c:1578 utils/adt/timestamp.c:2866 utils/adt/timestamp.c:2875 utils/adt/timestamp.c:2890 utils/adt/timestamp.c:2964 utils/adt/timestamp.c:2981 utils/adt/timestamp.c:3038 utils/adt/timestamp.c:3081 utils/adt/timestamp.c:3459 utils/adt/timestamp.c:3517 utils/adt/timestamp.c:3540 utils/adt/timestamp.c:3549 utils/adt/timestamp.c:3573 utils/adt/timestamp.c:3596 +#: utils/adt/timestamp.c:3605 utils/adt/timestamp.c:3740 utils/adt/timestamp.c:3841 utils/adt/timestamp.c:4248 utils/adt/timestamp.c:4285 utils/adt/timestamp.c:4333 utils/adt/timestamp.c:4342 utils/adt/timestamp.c:4434 utils/adt/timestamp.c:4481 utils/adt/timestamp.c:4490 utils/adt/timestamp.c:4586 utils/adt/timestamp.c:4639 utils/adt/timestamp.c:4649 utils/adt/timestamp.c:4874 utils/adt/timestamp.c:4884 utils/adt/timestamp.c:5239 #, c-format msgid "interval out of range" msgstr "ინტერვალი საზღვრებს გარეთაა" -#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 +#: utils/adt/timestamp.c:1085 utils/adt/timestamp.c:1118 #, c-format msgid "invalid INTERVAL type modifier" msgstr "\"INTERVAL\" ტიპის არასწორი მოდიფიკატორი" -#: utils/adt/timestamp.c:1110 +#: utils/adt/timestamp.c:1101 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d)-ის სიზუსტე უარყოფით არ უნდა იყოს" -#: utils/adt/timestamp.c:1116 +#: utils/adt/timestamp.c:1107 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "" -#: utils/adt/timestamp.c:1506 +#: utils/adt/timestamp.c:1497 #, c-format 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 +#: utils/adt/timestamp.c:4623 utils/adt/timestamp.c:4858 #, c-format msgid "origin out of range" msgstr "წყარო დიაპაზონს გარეთაა" -#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#: utils/adt/timestamp.c:4628 utils/adt/timestamp.c:4863 #, c-format msgid "timestamps cannot be binned into infinite intervals" msgstr "" -#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 +#: utils/adt/timestamp.c:4633 utils/adt/timestamp.c:4868 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "" -#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 +#: utils/adt/timestamp.c:4644 utils/adt/timestamp.c:4879 #, c-format msgid "stride must be greater than zero" msgstr "ბიჯი ნულზე მეტი უნდა იყოს" -#: utils/adt/timestamp.c:5091 +#: utils/adt/timestamp.c:5181 utils/adt/timestamp.c:5233 #, c-format msgid "Months usually have fractional weeks." msgstr "თვეში როგორც წესი გაყოფადი რაოდენობის კვირებია." -#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#: utils/adt/timestamp.c:6713 utils/adt/timestamp.c:6799 #, c-format msgid "step size cannot be infinite" msgstr "ბიჯის ზომა უსასრულო ვერ იქნება" @@ -26504,32 +27558,32 @@ msgstr "" msgid "ts_rewrite query must return two tsquery columns" msgstr "ts_rewrite მოთხოვნამ ორი tsquery სვეტი უნდა დააბრუნოს" -#: utils/adt/tsrank.c:412 +#: utils/adt/tsrank.c:415 #, c-format msgid "array of weight must be one-dimensional" msgstr "წონის მასივი ერთგანზომილებიანი უნდა იყოს" -#: utils/adt/tsrank.c:417 +#: utils/adt/tsrank.c:420 #, c-format msgid "array of weight is too short" msgstr "წონის მასივი ძალიან მოკლეა" -#: utils/adt/tsrank.c:422 +#: utils/adt/tsrank.c:425 #, c-format msgid "array of weight must not contain nulls" msgstr "წონის მასივი არ შეიძლება, ნულოვან მნიშვნელობებს შეიცავდეს" -#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:871 +#: utils/adt/tsrank.c:434 utils/adt/tsrank.c:876 #, c-format msgid "weight out of range" msgstr "სიმძიმე დიაპაზონს გარეთაა" -#: utils/adt/tsvector.c:216 +#: utils/adt/tsvector.c:213 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "სიტყვა მეტისმეტად მოკლეა (%ld ბაიტი, მაქს %ld ბაიტი)" -#: utils/adt/tsvector.c:223 +#: utils/adt/tsvector.c:220 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "" @@ -26609,7 +27663,7 @@ msgstr "სპეციალური სიმბოლო \"%s\" ვერ msgid "wrong position info in tsvector: \"%s\"" msgstr "" -#: utils/adt/uuid.c:418 +#: utils/adt/uuid.c:535 utils/adt/uuid.c:632 #, c-format msgid "could not generate random values" msgstr "შემთხვევითი რიცხვების გენერაციის შეცდომა" @@ -26654,7 +27708,7 @@ msgstr "გარე ბიტური სტრიქონის არას msgid "bit string too long for type bit varying(%d)" msgstr "" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 utils/adt/varlena.c:3133 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:919 utils/adt/varlena.c:982 utils/adt/varlena.c:1139 utils/adt/varlena.c:3102 utils/adt/varlena.c:3180 #, c-format msgid "negative substring length not allowed" msgstr "ქვესტრიქონის სიგრძე უარყოფითი არ შეიძლება იყოს" @@ -26679,7 +27733,7 @@ msgstr "განსხვავებული სიგრძის სტრ msgid "bit index %d out of valid range (0..%d)" msgstr "" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3384 #, c-format msgid "new bit must be 0 or 1" msgstr "ახალი ბიტი უნდა იყოს 0 ან 1" @@ -26694,92 +27748,92 @@ msgstr "მნიშვნელობა სიმბოლოს ტიპი msgid "value too long for type character varying(%d)" msgstr "" -#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1591 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "" -#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 +#: utils/adt/varlena.c:1864 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "" -#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 +#: utils/adt/varlena.c:3268 utils/adt/varlena.c:3335 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "ინდექსი %d დასაშვებ დიაპაზონს (0..%d) გარეთაა" -#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 +#: utils/adt/varlena.c:3299 utils/adt/varlena.c:3371 #, c-format -msgid "index %lld out of valid range, 0..%lld" -msgstr "ინდექსი %lld დასაშვებ დიაპაზონს (0..%lld) გარეთაა" +msgid "index % out of valid range, 0..%" +msgstr "ინდექსი % დასაშვებ დიაპაზონს (0..%) გარეთაა" -#: utils/adt/varlena.c:4385 +#: utils/adt/varlena.c:4587 #, c-format msgid "field position must not be zero" msgstr "ველის მდებარეობა ნულოვანი ვერ იქნება" -#: utils/adt/varlena.c:5630 +#: utils/adt/varlena.c:5832 #, c-format msgid "unterminated format() type specifier" msgstr "" -#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 +#: utils/adt/varlena.c:5833 utils/adt/varlena.c:5967 utils/adt/varlena.c:6088 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "ერთი \"%%\"-სთვის გამოიყენეთ \"%%%%\"." -#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 +#: utils/adt/varlena.c:5965 utils/adt/varlena.c:6086 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "" -#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 +#: utils/adt/varlena.c:5978 utils/adt/varlena.c:6035 #, c-format msgid "too few arguments for format()" msgstr "format()-ის არგუმენტები საკმარისი არაა" -#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 +#: utils/adt/varlena.c:6131 utils/adt/varlena.c:6313 #, c-format msgid "number is out of range" msgstr "რიცხვი დიაპაზონს გარეთაა" -#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 +#: utils/adt/varlena.c:6194 utils/adt/varlena.c:6222 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "" -#: utils/adt/varlena.c:6013 +#: utils/adt/varlena.c:6215 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "" -#: utils/adt/varlena.c:6058 +#: utils/adt/varlena.c:6260 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "" -#: utils/adt/varlena.c:6266 +#: utils/adt/varlena.c:6468 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "" -#: utils/adt/varlena.c:6279 +#: utils/adt/varlena.c:6481 #, c-format msgid "invalid normalization form: %s" msgstr "ნორმალიზაციის არასწორი ფორმა: %s" -#: utils/adt/varlena.c:6324 +#: utils/adt/varlena.c:6526 #, c-format msgid "Unicode categorization can only be performed if server encoding is UTF8" msgstr "" -#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 +#: utils/adt/varlena.c:6743 utils/adt/varlena.c:6778 utils/adt/varlena.c:6813 #, c-format msgid "invalid Unicode code point: %04X" msgstr "უნიკოდის კოდის არასწორი წერტილი: %04X" -#: utils/adt/varlena.c:6641 +#: utils/adt/varlena.c:6843 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "" @@ -26794,12 +27848,12 @@ msgstr "ntile -ის არგუმენტი ნულზე მეტი 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" +msgid "transaction ID % is in the future" +msgstr "ტრანზაქციის ID მომავალშია: %" -#: utils/adt/xid8funcs.c:553 +#: utils/adt/xid8funcs.c:522 #, c-format msgid "invalid external pg_snapshot data" msgstr "pg_snapshot-ის არასწორი გარე მონაცემები" @@ -26824,161 +27878,166 @@ msgstr "კოდირების არასწორი სახელი: 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 "" -#: utils/cache/lsyscache.c:1017 +#: utils/cache/funccache.c:364 +#, c-format +msgid "could not determine actual argument type for polymorphic function \"%s\"" +msgstr "პოლიმორფული ფუნქციისთვის (%s) მიმდინარე არგუმენტის ტიპის დადგენა შეუძლებელია" + +#: utils/cache/lsyscache.c:1109 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "" -#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 +#: utils/cache/lsyscache.c:3027 utils/cache/lsyscache.c:3060 utils/cache/lsyscache.c:3093 utils/cache/lsyscache.c:3126 #, c-format msgid "type %s is only a shell" msgstr "ტიპი %s ცარიელია" -#: utils/cache/lsyscache.c:2892 +#: utils/cache/lsyscache.c:3032 #, c-format msgid "no input function available for type %s" msgstr "ტიპისთვის %s შეყვანის ფუნქცია არ არ ასებობს" -#: utils/cache/lsyscache.c:2925 +#: utils/cache/lsyscache.c:3065 #, c-format msgid "no output function available for type %s" msgstr "ტიპისთვის %s გამოტანის ფუნქცია არ არ ასებობს" @@ -26988,32 +28047,27 @@ msgstr "ტიპისთვის %s გამოტანის ფუნქ msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "" -#: utils/cache/plancache.c:747 -#, c-format -msgid "cached plan must not change result type" -msgstr "დაკეშილი გეგმა შედეგის ტიპს არ უნდა ცვლიდეს" - -#: utils/cache/relcache.c:3797 +#: utils/cache/relcache.c:3805 #, 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:3813 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "ახალი relfilenumber-ის მოულოდნელი მოთხოვნა ბინარული განახლების რეჟიმში" -#: utils/cache/relcache.c:6533 +#: utils/cache/relcache.c:6630 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "" -#: utils/cache/relcache.c:6535 +#: utils/cache/relcache.c:6632 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "მაინც ვაგრძელებ, მაგრამ რაღაც ცუდი ხდება." -#: utils/cache/relcache.c:6865 +#: utils/cache/relcache.c:6962 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "კეშის ფაილის \"%s\" წაშლის შეცდომა: %m" @@ -27033,7 +28087,7 @@ msgstr "ურთიერთობის მიბმის ფაილი \"% msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "ურთიერთობის მიბმის ფაილი \"%s\" არასწორ საკონტროლო ჯამს შეიცავს" -#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 +#: utils/cache/typcache.c:1901 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "ჩანაწერის ტიპი რეგისტრირებული არ არის" @@ -27048,193 +28102,185 @@ msgstr "" msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" msgstr "ხაფანგი: გამოთხოვის შეცდომა (\"%s\"), ფაილი: \"%s\", ხაზი: %d, PID: %d\n" -#: utils/error/elog.c:415 +#: utils/error/elog.c:412 #, c-format msgid "error occurred before error message processing is available\n" msgstr "აღმოჩენილია შეცდომა მანამდე, სანამ შეცდომის შეტყობინებების დამუშავება ხელმისაწვდომი გახდებოდა\n" -#: utils/error/elog.c:2101 +#: utils/error/elog.c:2159 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "" -#: utils/error/elog.c:2114 +#: utils/error/elog.c:2172 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "" -#: utils/error/elog.c:2150 +#: utils/error/elog.c:2208 #, c-format -msgid "Invalid character" -msgstr "არასწორი სიმბოლო" +msgid "Invalid character." +msgstr "არასწორი სიმბოლო." -#: utils/error/elog.c:2856 utils/error/elog.c:2883 utils/error/elog.c:2899 +#: utils/error/elog.c:2918 utils/error/elog.c:2945 utils/error/elog.c:2961 msgid "[unknown]" msgstr "[უცნობი]" -#: utils/error/elog.c:3169 utils/error/elog.c:3493 utils/error/elog.c:3600 +#: utils/error/elog.c:3263 utils/error/elog.c:3587 utils/error/elog.c:3694 msgid "missing error text" msgstr "შეცდომის ტექსტი ხელმიუწვდომელია" -#: utils/error/elog.c:3172 utils/error/elog.c:3175 +#: utils/error/elog.c:3266 utils/error/elog.c:3269 #, c-format msgid " at character %d" msgstr " სიმბოლოსთან %d" -#: utils/error/elog.c:3185 utils/error/elog.c:3192 +#: utils/error/elog.c:3279 utils/error/elog.c:3286 msgid "DETAIL: " msgstr "დეტალები: " -#: utils/error/elog.c:3199 +#: utils/error/elog.c:3293 msgid "HINT: " msgstr "მინიშნება: " -#: utils/error/elog.c:3206 +#: utils/error/elog.c:3300 msgid "QUERY: " msgstr "მოთხოვნა: " -#: utils/error/elog.c:3213 +#: utils/error/elog.c:3307 msgid "CONTEXT: " msgstr "კონტექსტი: " -#: utils/error/elog.c:3223 +#: utils/error/elog.c:3317 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "მდებარეობა: %s, %s:%d\n" -#: utils/error/elog.c:3230 +#: utils/error/elog.c:3324 #, c-format msgid "LOCATION: %s:%d\n" msgstr "მდებარეობა: %s:%d\n" -#: utils/error/elog.c:3237 +#: utils/error/elog.c:3331 msgid "BACKTRACE: " msgstr "სტეკი: " -#: utils/error/elog.c:3249 +#: utils/error/elog.c:3343 msgid "STATEMENT: " msgstr "ოპერატორი: " -#: utils/error/elog.c:3645 +#: utils/error/elog.c:3739 msgid "DEBUG" msgstr "გამართვა" -#: utils/error/elog.c:3649 +#: utils/error/elog.c:3743 msgid "LOG" msgstr "ჟურნალი" -#: utils/error/elog.c:3652 +#: utils/error/elog.c:3746 msgid "INFO" msgstr "ინფორმაცია" -#: utils/error/elog.c:3655 +#: utils/error/elog.c:3749 msgid "NOTICE" msgstr "გაფრთხილება" -#: utils/error/elog.c:3659 +#: utils/error/elog.c:3753 msgid "WARNING" msgstr "გაფრთხილება" -#: utils/error/elog.c:3662 +#: utils/error/elog.c:3756 msgid "ERROR" msgstr "შეცდომა" -#: utils/error/elog.c:3665 +#: utils/error/elog.c:3759 msgid "FATAL" msgstr "ფატალური" -#: utils/error/elog.c:3668 +#: utils/error/elog.c:3762 msgid "PANIC" msgstr "პანიკა" -#: utils/fmgr/dfmgr.c:128 +#: utils/fmgr/dfmgr.c:118 #, c-format msgid "could not find function \"%s\" in file \"%s\"" msgstr "ფაილში \"%1$s\" ფუნქცია \"%2$s\" არ არსებობს" -#: utils/fmgr/dfmgr.c:247 +#: utils/fmgr/dfmgr.c:237 #, c-format msgid "could not load library \"%s\": %s" msgstr "ბიბლიოთეკის (\"%s\") ჩატვირთვის შეცდომა: %s" -#: utils/fmgr/dfmgr.c:279 +#: utils/fmgr/dfmgr.c:274 #, c-format msgid "incompatible library \"%s\": missing magic block" msgstr "არათავსებადი ბიბლიოთეკა \"%s\": მაგიური ბლოკი აღმოჩენილი არაა" -#: utils/fmgr/dfmgr.c:281 +#: utils/fmgr/dfmgr.c:276 #, c-format msgid "Extension libraries are required to use the PG_MODULE_MAGIC macro." msgstr "გაფართოების ბიბლიოთეკების მიერ PG_MODULE_MAGIC მაკროს გამოყენება აუცილებელია." -#: utils/fmgr/dfmgr.c:327 +#: utils/fmgr/dfmgr.c:322 #, c-format msgid "incompatible library \"%s\": version mismatch" msgstr "არათავსებადი ბიბლიოთეკა \"%s\": შეუსაბამო ვერსია" -#: utils/fmgr/dfmgr.c:329 +#: utils/fmgr/dfmgr.c:324 #, c-format msgid "Server is version %d, library is version %s." msgstr "სერვერის ვერსიაა %d. ბიბლიოთეკის კი %s." -#: utils/fmgr/dfmgr.c:341 +#: utils/fmgr/dfmgr.c:336 #, c-format msgid "incompatible library \"%s\": ABI mismatch" msgstr "არათავსებადი ბიბლიოთეკა \"%s\": ABI არ ემთხვევა" -#: utils/fmgr/dfmgr.c:343 +#: utils/fmgr/dfmgr.c:338 #, c-format msgid "Server has ABI \"%s\", library has \"%s\"." msgstr "სერვერის ABI \"%s\"-ა, ბიბლიოთეკის კი \"%s\"." -#: utils/fmgr/dfmgr.c:361 -#, c-format -msgid "Server has FUNC_MAX_ARGS = %d, library has %d." -msgstr "სერვერის FUNC_MAX_ARGS = %d, ბიბლიოთეკას კი %d." - -#: utils/fmgr/dfmgr.c:370 +#. translator: %s is a variable name and %d its values +#: utils/fmgr/dfmgr.c:357 utils/fmgr/dfmgr.c:367 utils/fmgr/dfmgr.c:377 #, c-format -msgid "Server has INDEX_MAX_KEYS = %d, library has %d." -msgstr "სერვერის INDEX_MAX_KEYS = %d, ბიბლიოთეკას კი %d." +msgid "Server has %s = %d, library has %d." +msgstr "სერვერს აქვს %s = %d, ბიბლიოთეკას აქვს %d." -#: utils/fmgr/dfmgr.c:379 +#. translator: %s is a variable name and %d its values +#: utils/fmgr/dfmgr.c:387 #, c-format -msgid "Server has NAMEDATALEN = %d, library has %d." -msgstr "სერვერის NAMEDATALEN = %d, ბიბლიოთეკას კი %d." +msgid "Server has %s = %s, library has %s." +msgstr "სერვერს აქვს %s = %s, ბიბლიოთეკას აქვს %s." -#: utils/fmgr/dfmgr.c:388 -#, c-format -msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." -msgstr "სერვერის FLOAT8PASSBYVAL = %s, ბიბლიოთეკას კი %s." - -#: utils/fmgr/dfmgr.c:395 +#: utils/fmgr/dfmgr.c:394 msgid "Magic block has unexpected length or padding difference." msgstr "" -#: utils/fmgr/dfmgr.c:398 +#: utils/fmgr/dfmgr.c:397 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "არათავსებადი ბიბლიოთეკა \"%s\": მაგიური ბლოკი არ ემთხვევა" -#: utils/fmgr/dfmgr.c:475 +#: utils/fmgr/dfmgr.c:520 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "წვდომა ბიბლიოთეკასთან \"%s\"" -#: utils/fmgr/dfmgr.c:501 +#: utils/fmgr/dfmgr.c:547 #, c-format -msgid "invalid macro name in dynamic library path: %s" -msgstr "მაკროს არასწორი სახელი დინამიკური ბიბლიოთეკის ბილიკში: %s" +msgid "invalid macro name in path: %s" +msgstr "მაკროს არასწორი სახელი ბილიკში: %s" -#: utils/fmgr/dfmgr.c:541 +#: utils/fmgr/dfmgr.c:599 #, c-format -msgid "zero-length component in parameter \"dynamic_library_path\"" -msgstr "ნულოვანი სიგრძის კომპონენტი პარამეტრში \"dynamic_library_path\"" +msgid "zero-length component in parameter \"%s\"" +msgstr "ნულოვანი სიგრძის კომპონენტი პარამეტრში \"%s\"" -#: utils/fmgr/dfmgr.c:560 +#: utils/fmgr/dfmgr.c:618 #, c-format -msgid "component in parameter \"dynamic_library_path\" is not an absolute path" -msgstr "პარამეტრში \"dynamic_library_path\" კომპონენტი აბსოლუტური ბილიკი არაა" +msgid "component in parameter \"%s\" is not an absolute path" +msgstr "პარამეტრში \"%s\" კომპონენტი აბსოლუტური ბილიკი არაა" #: utils/fmgr/fmgr.c:236 #, c-format @@ -27281,350 +28327,432 @@ msgstr "" msgid "number of aliases does not match number of columns" msgstr "მეტსახელების რიცხვი სვეტების რაოდენობას არ ემთხვევა" -#: utils/fmgr/funcapi.c:1955 -#, c-format -msgid "no column alias was provided" -msgstr "სვეტის მეტსახელი მითითებული არაა" +#: utils/fmgr/funcapi.c:1955 +#, c-format +msgid "no column alias was provided" +msgstr "სვეტის მეტსახელი მითითებული არაა" + +#: utils/fmgr/funcapi.c:1979 +#, c-format +msgid "could not determine row description for function returning record" +msgstr "ჩანაწერის დამბრუნებელი ფუნქციისთვის მწკრივის აღწერის დადგენა შეუძლებელია" + +#: utils/init/miscinit.c:265 +msgid "unknown process type" +msgstr "უცნობი პროცესის ტიპი" + +#: utils/init/miscinit.c:270 +msgid "not initialized" +msgstr "ინიციალიზებული არაა" + +#: utils/init/miscinit.c:273 +msgid "archiver" +msgstr "არქივატორი" + +#: utils/init/miscinit.c:276 +msgid "autovacuum launcher" +msgstr "ავტომომტვერსასრუტების გამშვები" + +#: utils/init/miscinit.c:279 +msgid "autovacuum worker" +msgstr "ავტომომტვერსასრუტების დამხმარე პროცესი" + +#: utils/init/miscinit.c:282 +msgid "client backend" +msgstr "კლიენტის უკანაბოლო" + +#: utils/init/miscinit.c:285 +msgid "dead-end client backend" +msgstr "ჩიხის კლიენტის უკანაბოლო" + +#: utils/init/miscinit.c:288 +msgid "background worker" +msgstr "ფონური დამხმარე პროცესი" + +#: utils/init/miscinit.c:291 +msgid "background writer" +msgstr "ფონური ჩამწერი" + +#: utils/init/miscinit.c:294 +msgid "checkpointer" +msgstr "საკონტროლო წერტილი" + +#: utils/init/miscinit.c:300 +msgid "logger" +msgstr "ჟურნალის პროცესი" + +#: utils/init/miscinit.c:303 +msgid "slotsync worker" +msgstr "სლოტის სინქრონიზაციის დამხმარე პროცესი" + +#: utils/init/miscinit.c:306 +msgid "standalone backend" +msgstr "დამოუკიდებელი უკანაბოლო" + +#: utils/init/miscinit.c:309 +msgid "startup" +msgstr "გაშვება" + +#: utils/init/miscinit.c:312 +msgid "walreceiver" +msgstr "walreceiver" -#: utils/fmgr/funcapi.c:1979 -#, c-format -msgid "could not determine row description for function returning record" -msgstr "ჩანაწერის დამბრუნებელი ფუნქციისთვის მწკრივის აღწერის დადგენა შეუძლებელია" +#: utils/init/miscinit.c:315 +msgid "walsender" +msgstr "walsender" + +#: utils/init/miscinit.c:318 +msgid "walsummarizer" +msgstr "walsummarizer" -#: utils/init/miscinit.c:352 +#: utils/init/miscinit.c:321 +msgid "walwriter" +msgstr "walwriter" + +#: utils/init/miscinit.c:358 #, c-format msgid "data directory \"%s\" does not exist" msgstr "მონაცემების საქაღალდე არ არსებობს: \"%s\"" -#: utils/init/miscinit.c:357 +#: utils/init/miscinit.c:363 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "საქაღალდის წვდომების წაკითხვა შეუძლებელია \"%s\": %m" -#: utils/init/miscinit.c:365 +#: utils/init/miscinit.c:371 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "მონაცემების მითითებული საქაღალდე \"%s\" საქაღალდე არაა" -#: utils/init/miscinit.c:381 +#: utils/init/miscinit.c:387 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "მონაცემების მითითებული საქაღალდის (\"%s\") მფლობელი არასწორია" -#: utils/init/miscinit.c:383 +#: utils/init/miscinit.c:389 #, 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:407 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "მონაცემების საქაღალდის \"%s\" წვდომები არასწორია" -#: utils/init/miscinit.c:403 +#: utils/init/miscinit.c:409 #, 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:467 #, 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:725 utils/misc/guc.c:3647 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" -#: utils/init/miscinit.c:770 +#: utils/init/miscinit.c:812 #, c-format msgid "role with OID %u does not exist" msgstr "როლი OID-ით %u არ არსებობს" -#: utils/init/miscinit.c:800 +#: utils/init/miscinit.c:858 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "როლს შესვლის უფლება არ აქვს: %s" -#: utils/init/miscinit.c:818 +#: utils/init/miscinit.c:879 #, c-format msgid "too many connections for role \"%s\"" msgstr "მეტისმეტად ბევრი კავშირი როლისთვის \"%s\"" -#: utils/init/miscinit.c:991 +#: utils/init/miscinit.c:1050 #, c-format msgid "invalid role OID: %u" msgstr "როლის არასწორი OID: %u" -#: utils/init/miscinit.c:1138 +#: utils/init/miscinit.c:1197 #, c-format msgid "database system is shut down" msgstr "მონაცემთა ბაზის სისტემა გათიშულია" -#: utils/init/miscinit.c:1225 +#: utils/init/miscinit.c:1284 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "ბლოკის ფაილის (%s) შექმნის შეცდომა: %m" -#: utils/init/miscinit.c:1239 +#: utils/init/miscinit.c:1298 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "ბლოკის ფაილის (%s) გახსნის შეცდომა: %m" -#: utils/init/miscinit.c:1246 +#: utils/init/miscinit.c:1305 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "ბლოკის ფაილის (%s) წაკითხვის შეცდომა: %m" -#: utils/init/miscinit.c:1255 +#: utils/init/miscinit.c:1314 #, c-format msgid "lock file \"%s\" is empty" msgstr "ბლოკის ფაილი (\"%s\") ცარიელია" -#: utils/init/miscinit.c:1256 +#: utils/init/miscinit.c:1315 #, 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:1359 #, c-format msgid "lock file \"%s\" already exists" msgstr "ბლოკის ფაილი (\"%s\") უკვე არსებობს" -#: utils/init/miscinit.c:1304 +#: utils/init/miscinit.c:1363 #, 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:1365 #, 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:1368 #, 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:1370 #, 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:1421 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "ბლოკის ძველი ფაილის წაშლის შეცდომა \"%s\": %m" -#: utils/init/miscinit.c:1364 +#: utils/init/miscinit.c:1423 #, 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:1460 utils/init/miscinit.c:1474 utils/init/miscinit.c:1485 #, 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:1596 utils/init/miscinit.c:1738 utils/misc/guc.c:5763 #, c-format msgid "could not read from file \"%s\": %m" msgstr "ფაილიდან (\"%s\") წაკითხვის შეცდომა: %m" -#: utils/init/miscinit.c:1667 +#: utils/init/miscinit.c:1726 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "შეცდომა ფაილის (\"%s\") გახსნისას: %m; მაინც ვაგრძელებ" -#: utils/init/miscinit.c:1692 +#: utils/init/miscinit.c:1751 #, 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:1790 utils/init/miscinit.c:1806 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "%s მონაცემების არასწორი საქაღალდეა" -#: utils/init/miscinit.c:1733 +#: utils/init/miscinit.c:1792 #, c-format msgid "File \"%s\" is missing." msgstr "ფაილი \"%s\" აკლია." -#: utils/init/miscinit.c:1749 +#: utils/init/miscinit.c:1808 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "ფაილი \"%s\" სწორ მონაცემებს არ შეიცავს." -#: utils/init/miscinit.c:1751 +#: utils/init/miscinit.c:1810 #, c-format msgid "You might need to initdb." msgstr "როგორც ჩანს, initdb გჭირდებათ." -#: utils/init/miscinit.c:1759 +#: utils/init/miscinit.c:1818 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "მონაცემის საქაღალდე ინიციალიზებული იყო PostgreSQL-ის %s ვერსიით, რომელიც ამ ვერსიასთან, %s, თავსებადი არაა." -#: utils/init/postinit.c:259 +#: utils/init/postinit.c:269 #, c-format msgid "replication connection authorized: user=%s" msgstr "რეპლიკაციის შეერთება ავტორიზებულია: მომხმარებელი=%s" -#: utils/init/postinit.c:262 +#: utils/init/postinit.c:272 #, c-format msgid "connection authorized: user=%s" msgstr "შეერთება ავტორიზებულია: მომხმარებელი=%s" -#: utils/init/postinit.c:265 +#: utils/init/postinit.c:275 #, c-format msgid " database=%s" msgstr " ბაზა=%s" -#: utils/init/postinit.c:268 +#: utils/init/postinit.c:278 #, c-format msgid " application_name=%s" msgstr " აპლიკაციის_სახელი=%s" -#: utils/init/postinit.c:273 +#: utils/init/postinit.c:283 #, c-format msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d)" msgstr " SSL ჩართულია (პროტოკოლი=%s, შიფრი=%s, ბიტები=%d)" -#: utils/init/postinit.c:285 +#: utils/init/postinit.c:295 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, delegated_credentials=%s, principal=%s)" msgstr " GSS (ავთენტიფიცირებული=%s, დაშიფრული=%s, delegated_credentials=%s, პრინციპალი=%s)" -#: utils/init/postinit.c:286 utils/init/postinit.c:287 utils/init/postinit.c:288 utils/init/postinit.c:293 utils/init/postinit.c:294 utils/init/postinit.c:295 +#: utils/init/postinit.c:296 utils/init/postinit.c:297 utils/init/postinit.c:298 utils/init/postinit.c:303 utils/init/postinit.c:304 utils/init/postinit.c:305 msgid "no" msgstr "არა" -#: utils/init/postinit.c:286 utils/init/postinit.c:287 utils/init/postinit.c:288 utils/init/postinit.c:293 utils/init/postinit.c:294 utils/init/postinit.c:295 +#: utils/init/postinit.c:296 utils/init/postinit.c:297 utils/init/postinit.c:298 utils/init/postinit.c:303 utils/init/postinit.c:304 utils/init/postinit.c:305 msgid "yes" msgstr "დიახ" -#: utils/init/postinit.c:292 +#: utils/init/postinit.c:302 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, delegated_credentials=%s)" msgstr " GSS (ავთენტიფიცირებული=%s, დაშიფრული=%s, delegated_credentials=%s)" -#: utils/init/postinit.c:333 +#: utils/init/postinit.c:342 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "ბაზა \"%s\" pg_database-დან გაქრა" -#: utils/init/postinit.c:335 +#: utils/init/postinit.c:344 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "ბაზის OID %u, როგორც ჩანს, ახლა \"%s\"-ს ეკუთვნის." -#: utils/init/postinit.c:355 +#: utils/init/postinit.c:364 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "ბაზა \"%s\" ამჟამად მიერთებებს არ იღებს" -#: utils/init/postinit.c:368 +#: utils/init/postinit.c:377 #, c-format msgid "permission denied for database \"%s\"" msgstr "წვდომა აკრძალულია ბაზაზე: \"%s\"" -#: utils/init/postinit.c:369 +#: utils/init/postinit.c:378 #, c-format msgid "User does not have CONNECT privilege." msgstr "მომხმარებელს CONNECT პრივილეგია არ გააჩნია." -#: utils/init/postinit.c:386 +#: utils/init/postinit.c:398 #, 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:422 utils/init/postinit.c:429 #, c-format msgid "database locale is incompatible with operating system" msgstr "ბაზის ენა ოპერაციულ სისტემასთან შეუთავსებელია" -#: utils/init/postinit.c:411 +#: utils/init/postinit.c:423 #, 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:425 utils/init/postinit.c:432 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "თავიდან შექმენით ბაზა სხვა ლოკალით ან დააყენეთ ლოკალი, რომელიც ვერ ვიპოვე." -#: utils/init/postinit.c:418 +#: utils/init/postinit.c:430 #, 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:471 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "ბაზის \"%s\" კოლაციის ვერსია არ ემთხვევა" -#: utils/init/postinit.c:493 +#: utils/init/postinit.c:473 #, 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:476 #, 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:566 +#, c-format +msgid "too many server processes configured" +msgstr "მორგებულია მეტისმეტად ბევრი სერვერის პროცესი" + +#: utils/init/postinit.c:567 +#, c-format +msgid "\"max_connections\" (%d) plus \"autovacuum_worker_slots\" (%d) plus \"max_worker_processes\" (%d) plus \"max_wal_senders\" (%d) must be less than %d." +msgstr "" + +#: utils/init/postinit.c:889 #, c-format msgid "no roles are defined in this database system" msgstr "ამ მონაცემთა ბაზაში როლები აღწერილი არაა" -#: utils/init/postinit.c:903 +#: utils/init/postinit.c:890 #, 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:935 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "ორობითი განახლებისას მისაერთებლად ზემომხმარებელი უნდა ბრძანდებოდეთ" -#: utils/init/postinit.c:961 +#: utils/init/postinit.c:955 #, 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:961 #, 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:973 #, c-format msgid "permission denied to start WAL sender" msgstr "'WAL' გამგზავნის გაშვების წვდომა აკრძალულია" -#: utils/init/postinit.c:980 +#: utils/init/postinit.c:974 #, 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:1092 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "როგორც ჩანს, ახლახანს წაიშალა ან სახელი გადაერქვა." -#: utils/init/postinit.c:1102 +#: utils/init/postinit.c:1096 #, c-format msgid "database %u does not exist" msgstr "ბაზა არ არსებობს: %u" -#: utils/init/postinit.c:1111 +#: utils/init/postinit.c:1105 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "არასწორ მონაცემთა ბაზასთან \"%s\" დაკავშირება ვერ მოხერხდა" -#: utils/init/postinit.c:1172 +#: utils/init/postinit.c:1166 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "ბაზის ქვესაქაღალდე არ არსებობს: %s." @@ -27639,12 +28767,12 @@ msgstr "როლს \"%s\" \"%s\"-ზე SET ROLE არ შეუძლია" msgid "invalid encoding number: %d" msgstr "კოდირების არასწორი ნომერი: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:129 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:165 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:132 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:168 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "მოულოდნელი დაშიფვრის ID %d 'ISO 8859' სიმბოლოების ნაკრებებისთვის" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:110 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:146 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:113 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:149 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "მოულოდნელი დაშიფვრის ID %d WIN სიმბოლოების ნაკრებებისთვის" @@ -27704,92 +28832,92 @@ msgstr "კონფიგურაციის საქაღალდის msgid "could not open configuration directory \"%s\": %m" msgstr "კონფიგურაციის საქაღალდის (\"%s\") გახსნის შეცდომა: %m" -#: utils/misc/guc.c:122 +#: utils/misc/guc.c:119 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "პარამეტრის სწორი ერთეულებია \"ბ\", \"კბ\", \"მბ\", \"გბ\" და \"ტბ\"." -#: utils/misc/guc.c:159 +#: utils/misc/guc.c:156 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "პარამეტრის სწორი ერთეულებია \"მკწმ\", \"მწმ\", \"წმ\", \"წთ\", \"სთ\" და \"დღე\"." -#: utils/misc/guc.c:430 +#: utils/misc/guc.c:428 #, c-format 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:468 utils/misc/guc.c:3501 utils/misc/guc.c:3745 utils/misc/guc.c:3843 utils/misc/guc.c:3941 utils/misc/guc.c:4068 utils/misc/guc.c:4209 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "პარამეტრი \"%s\" -ის შეცვლა სერვერის გადატვირთვის გარეშე შეუძლებელია" -#: utils/misc/guc.c:506 +#: utils/misc/guc.c:504 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "პარამეტრი \"%s\" წაიშალა კონფიგურაციის ფაილიდან. დაბრუნდა ნაგულისხმევ მნიშვნელობაზე" -#: utils/misc/guc.c:571 +#: utils/misc/guc.c:569 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "პარამეტრი \"%s\" შეიცვალა \"%s\"-ზე" -#: utils/misc/guc.c:613 +#: utils/misc/guc.c:611 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "კონფიგურაციის ფაილი \"%s\" შეცდომებს შეიცავს" -#: utils/misc/guc.c:618 +#: utils/misc/guc.c:616 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "კონფიგურაციის ფაილი \"%s\" შეცდომებს შეიცავს; გამოყენებული იქნება მხოლოდ სწორი ნაწილი" -#: utils/misc/guc.c:623 +#: utils/misc/guc.c:621 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "კონფიგურაციის ფაილი \"%s\" შეცდომებს შეიცავს; ცვლილებები არ მოხდება" -#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 +#: utils/misc/guc.c:1137 utils/misc/guc.c:1153 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "კონფიგურაციის პარამეტრის არასწორი სახელი: %s" -#: utils/misc/guc.c:1141 +#: utils/misc/guc.c:1139 #, c-format msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "მომხმარებლის პარამეტრის სახელები ორი ან მეტი მარტივი, წერტილებით გამოყოფილი იდენტიფიკატორი უნდა იყოს." -#: utils/misc/guc.c:1157 +#: utils/misc/guc.c:1155 #, c-format msgid "\"%s\" is a reserved prefix." msgstr "\"%s\" დაცული პრეფიქსია." -#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 +#: utils/misc/guc.c:1168 utils/misc/guc.c:1278 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "კონფიგურაციის უცნობი პარამეტრი: \"%s\"" -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1800 #, c-format msgid "%s: could not access directory \"%s\": %m\n" msgstr "%s საქაღალდესთან %s წვდომის უფლება არ გაქვთ: %m\n" -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1804 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "PostgreSQL-ის მონაცემების საქაღალდის ინიციალიზაციისთვის initdb ან pg_basebackup გაუშვით.\n" -#: utils/misc/guc.c:1830 +#: utils/misc/guc.c:1828 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" "You must specify the --config-file or -D invocation option or set the PGDATA environment variable.\n" msgstr "" -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1851 #, c-format msgid "%s: could not access the server configuration file \"%s\": %m\n" msgstr "%s: სერვერის კონფიგურაციის ფაილთან ('%s') წვდომა აკრძალულია: %m\n" -#: utils/misc/guc.c:1881 +#: utils/misc/guc.c:1879 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27798,139 +28926,144 @@ msgstr "" "%s-მა არ იცის, სად იპოვოს მონაცემთა ბაზის სისტემური მონაცემები.\n" "ამის მითითება \"%s\"-ში \"data_directory\" პარამეტრით შეგიძლიათ, ან -D გაშვების პარამეტრით, ან PGDATA გარემოს ცვლადით.\n" -#: utils/misc/guc.c:1933 +#: utils/misc/guc.c:1931 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" "This can be specified as \"hba_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" msgstr "" -#: utils/misc/guc.c:1964 +#: utils/misc/guc.c:1962 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" "This can be specified as \"ident_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" msgstr "" -#: utils/misc/guc.c:2943 +#: utils/misc/guc.c:2941 msgid "Value exceeds integer range." msgstr "\"lo_write\" -ის არგუმენტიმთელი რიცხვის დასაშვებ საზღვრებს სცდება." -#: utils/misc/guc.c:3185 +#: utils/misc/guc.c:3182 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" msgstr "%d%s%s დაშვებულ დიაპაზონს გარეთაა პარამეტრისთვის \"%s\" (%d%s%s .. %d%s%s)" -#: utils/misc/guc.c:3226 +#: utils/misc/guc.c:3223 #, c-format 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:3462 #, 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:3478 utils/misc/guc.c:4693 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "პარამეტრი \"%s\" არ შეიძლება შეიცვალოს" -#: utils/misc/guc.c:3505 +#: utils/misc/guc.c:3511 #, 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:3538 utils/misc/guc.c:3600 utils/misc/guc.c:4668 utils/misc/guc.c:6754 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "პარამეტრის (\"%s\") დაყენების წვდომა აკრძალულია" -#: utils/misc/guc.c:3574 +#: utils/misc/guc.c:3580 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "პარამეტრი \"%s\"-ის დაყენება კავშირის დამყარების შემდეგ შეუძლებელია" -#: utils/misc/guc.c:3633 +#: utils/misc/guc.c:3639 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "უსაფრთხოების აღმწერ ფუნქციაში პარამეტრ \"%s\"-ს ვერ გამოიყენებთ" -#: utils/misc/guc.c:3654 +#: utils/misc/guc.c:3660 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "პარამეტრის საწყის მნიშვნელობაზე დაბრუნების შეცდომა: \"%s\"" -#: utils/misc/guc.c:3661 +#: utils/misc/guc.c:3667 #, 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:4367 utils/misc/guc.c:4415 utils/misc/guc.c:5448 #, 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:4368 utils/misc/guc.c:4416 utils/misc/guc.c:5449 #, 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:4626 #, c-format msgid "ALTER SYSTEM is not allowed in this environment" msgstr "ამ გარემოში ALTER SYSTEM დაშვებული არაა" -#: utils/misc/guc.c:4611 +#: utils/misc/guc.c:4658 #, 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:4737 #, 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:4782 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "ფაილის დშემცველობის ამუშავების შეცდომა \"%s\"" -#: utils/misc/guc.c:4917 +#: utils/misc/guc.c:4965 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "პარამეტრის თავიდან აღწერის მცდელობა: \"%s\"" -#: utils/misc/guc.c:5256 +#: utils/misc/guc.c:5304 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "კონფიგურაციის პარამეტრის არასწორი სახელი: \"%s\". წაიშლება" -#: utils/misc/guc.c:5258 +#: utils/misc/guc.c:5306 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "\"%s\" ახლა დაცული პრეფიქსია." -#: utils/misc/guc.c:6135 +#: utils/misc/guc.c:6177 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "პარამეტრის \"%s\" \"%s\"-ზე დაყენებისას" -#: utils/misc/guc.c:6304 +#: utils/misc/guc.c:6346 #, c-format msgid "parameter \"%s\" could not be set" msgstr "პარამეტრის დაყენების შეცდომა: \"%s\"" -#: utils/misc/guc.c:6394 +#: utils/misc/guc.c:6436 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "პარამეტრის მნიშვნელობის დამუშავების შეცდომა: %s" -#: utils/misc/guc.c:6844 +#: utils/misc/guc.c:6886 #, 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,2054 +29079,2262 @@ msgstr "SET %s მხოლოდ ერთ არგუმენტს იღ msgid "SET requires parameter name" msgstr "SET მოითხოვს პარამეტრის სახელს" -#: utils/misc/guc_tables.c:675 +#: utils/misc/guc_tables.c:692 msgid "Ungrouped" msgstr "დაჯგუფება მოხსნილია" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:693 msgid "File Locations" msgstr "ფაილის მდებარეობები" -#: utils/misc/guc_tables.c:677 +#: utils/misc/guc_tables.c:694 msgid "Connections and Authentication / Connection Settings" msgstr "დაკავშირება და ავთენტიკაცია / შეერთების პარამეტრები" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:695 msgid "Connections and Authentication / TCP Settings" msgstr "დაკავშირება და ავთენტიკაცია / TCP-ის პარამეტრები" -#: utils/misc/guc_tables.c:679 +#: utils/misc/guc_tables.c:696 msgid "Connections and Authentication / Authentication" msgstr "დაკავშირება და ავთენტიკაცია / ავთენტიკაცია" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:697 msgid "Connections and Authentication / SSL" msgstr "დაკავშირება და ავთენტიკაცია / SSL" -#: utils/misc/guc_tables.c:681 +#: utils/misc/guc_tables.c:698 msgid "Resource Usage / Memory" msgstr "რესურსების გამოყენება / მეხსიერება" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:699 msgid "Resource Usage / Disk" msgstr "რესურსების გამოყენება / დისკი" -#: utils/misc/guc_tables.c:683 +#: utils/misc/guc_tables.c:700 msgid "Resource Usage / Kernel Resources" msgstr "რესურსების გამოყენება / ბირთვის რესურსები" -#: utils/misc/guc_tables.c:684 -msgid "Resource Usage / Cost-Based Vacuum Delay" -msgstr "რესურსების გამოყენება / ფასზე-დამოკიდებული დამტვერსასრუტების დაყოვნება" - -#: utils/misc/guc_tables.c:685 +#: utils/misc/guc_tables.c:701 msgid "Resource Usage / Background Writer" msgstr "რესურსების გამოყენება / ფონური ჩამწერი" -#: utils/misc/guc_tables.c:686 -msgid "Resource Usage / Asynchronous Behavior" -msgstr "რესურსების გამოყენება / ასინქრონული ქცევა" +#: utils/misc/guc_tables.c:702 +msgid "Resource Usage / I/O" +msgstr "რესურსების გამოყენება / შეტ/გამოტ" + +#: utils/misc/guc_tables.c:703 +msgid "Resource Usage / Worker Processes" +msgstr "რესურსების გამოყენება / დამხმარე პროცესის რესურსები" -#: utils/misc/guc_tables.c:687 +#: utils/misc/guc_tables.c:704 msgid "Write-Ahead Log / Settings" msgstr "წინასწარ-ჩაწერი ჟურნალი / მორგება" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:705 msgid "Write-Ahead Log / Checkpoints" msgstr "წინასწარ-ჩაწერი ჟურნალი / საკონტროლო წერტილები" -#: utils/misc/guc_tables.c:689 +#: utils/misc/guc_tables.c:706 msgid "Write-Ahead Log / Archiving" msgstr "წინასწარ-ჩაწერი ჟურნალი / არქივირება" -#: utils/misc/guc_tables.c:690 +#: utils/misc/guc_tables.c:707 msgid "Write-Ahead Log / Recovery" msgstr "წინასწარ-ჩაწერი ჟურნალი / აღდგენა" -#: utils/misc/guc_tables.c:691 +#: utils/misc/guc_tables.c:708 msgid "Write-Ahead Log / Archive Recovery" msgstr "წინასწარ-ჩაწერი ჟურნალი / არქივის აღდგენა" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:709 msgid "Write-Ahead Log / Recovery Target" msgstr "წინასწარ-ჩაწერი ჟურნალი / სამიზნის აღდგენა" -#: utils/misc/guc_tables.c:693 +#: utils/misc/guc_tables.c:710 msgid "Write-Ahead Log / Summarization" msgstr "წინასწარ-ჩაწერი ჟურნალი / შეჯამება" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:711 msgid "Replication / Sending Servers" msgstr "რეპლიკაცია / სერვერების გაგზავნა" -#: utils/misc/guc_tables.c:695 +#: utils/misc/guc_tables.c:712 msgid "Replication / Primary Server" msgstr "რეპლიკაცია / ძირითადი სერვერი" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:713 msgid "Replication / Standby Servers" msgstr "რეპლიკაცია / უქმე სერვერები" -#: utils/misc/guc_tables.c:697 +#: utils/misc/guc_tables.c:714 msgid "Replication / Subscribers" msgstr "რეპლიკაცია / გამომწერები" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:715 msgid "Query Tuning / Planner Method Configuration" msgstr "მოთხოვნის მორგება / დამგეგმავის მეთოდის კონფიგურაცია" -#: utils/misc/guc_tables.c:699 +#: utils/misc/guc_tables.c:716 msgid "Query Tuning / Planner Cost Constants" msgstr "მოთხოვნის მორგება / დამგეგმავის ფასის შეზღუდვები" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:717 msgid "Query Tuning / Genetic Query Optimizer" msgstr "მოთხოვნის მორგება / მოთხოვნის ზოგადი ოპტიმიზატორი" -#: utils/misc/guc_tables.c:701 +#: utils/misc/guc_tables.c:718 msgid "Query Tuning / Other Planner Options" msgstr "მოთხოვნის მორგება / დამგეგმავის სხვა პარამეტრები" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:719 msgid "Reporting and Logging / Where to Log" msgstr "ანგარიშები და ჟურნალი / სად ჩავწერო ჟურნალი" -#: utils/misc/guc_tables.c:703 +#: utils/misc/guc_tables.c:720 msgid "Reporting and Logging / When to Log" msgstr "ანგარიშები და ჟურნალი / როდის ჩავწერო ჟურნალი" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:721 msgid "Reporting and Logging / What to Log" msgstr "ანგარიშები და ჟურნალი / რა ჩავწერო ჟურნალში" -#: utils/misc/guc_tables.c:705 +#: utils/misc/guc_tables.c:722 msgid "Reporting and Logging / Process Title" msgstr "ანგარიშები და ჟურნალი / პროცესის სათაური" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:723 msgid "Statistics / Monitoring" msgstr "სტატისტიკა / მონიტორინგი" -#: utils/misc/guc_tables.c:707 +#: utils/misc/guc_tables.c:724 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "სტატისტიკა / კუმულაციური მოთხოვნისა და ინდექსის სტატისტიკა" -#: utils/misc/guc_tables.c:708 -msgid "Autovacuum" -msgstr "ავტომომტვერსასრუტება" +#: utils/misc/guc_tables.c:725 +msgid "Vacuuming / Automatic Vacuuming" +msgstr "მომტვერსასრუტება / ავტომატური მომტვერსასრუტება" -#: utils/misc/guc_tables.c:709 +#: utils/misc/guc_tables.c:726 +msgid "Vacuuming / Cost-Based Vacuum Delay" +msgstr "მომტვერსასრუტება / ფასზე-დამოკიდებული მომტვერსასრუტების დაყოვნება" + +#: utils/misc/guc_tables.c:727 +msgid "Vacuuming / Default Behavior" +msgstr "მომტვერსასრუტება / ნაგულისხმევი ქცევა" + +#: utils/misc/guc_tables.c:728 +msgid "Vacuuming / Freezing" +msgstr "მომტვერსასრუტება / გაყინვა" + +#: utils/misc/guc_tables.c:729 msgid "Client Connection Defaults / Statement Behavior" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / ბრძანების ქცევა" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:730 msgid "Client Connection Defaults / Locale and Formatting" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / ენა და ფორმატირება" -#: utils/misc/guc_tables.c:711 +#: utils/misc/guc_tables.c:731 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / გაზიარებული ბიბლიოთეკის წინასწარი ჩატვირთვა" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:732 msgid "Client Connection Defaults / Other Defaults" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / სხვა ნაგულისხმევი პარამეტრები" -#: utils/misc/guc_tables.c:713 +#: utils/misc/guc_tables.c:733 msgid "Lock Management" msgstr "ბლოკის მართვა" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:734 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "ვერსიისა და პლატფორმის თავსებადობა / PostgreSQL-ის წინა ვერსიები" -#: utils/misc/guc_tables.c:715 +#: utils/misc/guc_tables.c:735 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "ვერსიისა და პლატფორმის თავსებადობა / სხვა პლატფორმები და კლიენტები" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:736 msgid "Error Handling" msgstr "შეცდომების დამუშავება" -#: utils/misc/guc_tables.c:717 +#: utils/misc/guc_tables.c:737 msgid "Preset Options" msgstr "პრესეტის მორგება" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:738 msgid "Customized Options" msgstr "ხელით მითითებული პარამეტრები" -#: utils/misc/guc_tables.c:719 +#: utils/misc/guc_tables.c:739 msgid "Developer Options" msgstr "პროგრამისტის პარამეტრები" -#: utils/misc/guc_tables.c:774 +#: utils/misc/guc_tables.c:794 msgid "Enables the planner's use of sequential-scan plans." msgstr "დამგეგმავისთვის მიმდევრობითი სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:784 +#: utils/misc/guc_tables.c:804 msgid "Enables the planner's use of index-scan plans." msgstr "დამგეგმავისთვის ინდექსის სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:794 +#: utils/misc/guc_tables.c:814 msgid "Enables the planner's use of index-only-scan plans." msgstr "დამგეგმავისთვის მხოლოდ ინდექსის სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:804 +#: utils/misc/guc_tables.c:824 msgid "Enables the planner's use of bitmap-scan plans." msgstr "დამგეგმავისთვის ბიტური რუკების სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:814 +#: utils/misc/guc_tables.c:834 msgid "Enables the planner's use of TID scan plans." msgstr "დამგეგმავისთვის TID-ის სკანირების გეგმების გამოყენების უფლები მიცემა." -#: utils/misc/guc_tables.c:824 +#: utils/misc/guc_tables.c:844 msgid "Enables the planner's use of explicit sort steps." msgstr "დამგეგმავისთვის აშკარა დალაგების ნაბიჯების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:834 +#: utils/misc/guc_tables.c:854 msgid "Enables the planner's use of incremental sort steps." msgstr "დამგეგმავისთვის ინკრემენტული დალაგების ნაბიჯების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:844 +#: utils/misc/guc_tables.c:864 msgid "Enables the planner's use of hashed aggregation plans." msgstr "დამგეგმავისთვის დაჰეშიილი აგრეგაციის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:854 +#: utils/misc/guc_tables.c:874 msgid "Enables the planner's use of materialization." msgstr "დამგეგმავისთვის მატერიალიზაციის გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:864 +#: utils/misc/guc_tables.c:884 msgid "Enables the planner's use of memoization." msgstr "დამგეგმავისთვის მემოიზაციის გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:874 +#: utils/misc/guc_tables.c:894 msgid "Enables the planner's use of nested-loop join plans." msgstr "დამგეგმავისთვის ერთმანეთში ჩალაგებული მარყუჟი შერწყმის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:884 +#: utils/misc/guc_tables.c:904 msgid "Enables the planner's use of merge join plans." msgstr "დამგეგმავისთვის შეერთების გეგმების შერწყმის გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:894 +#: utils/misc/guc_tables.c:914 msgid "Enables the planner's use of hash join plans." msgstr "დამგეგმავისთვის ჰეშის შეერთების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:904 +#: utils/misc/guc_tables.c:924 msgid "Enables the planner's use of gather merge plans." msgstr "დამგეგმავისთვის შერწყმის გეგმების შეგროვების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:914 +#: utils/misc/guc_tables.c:934 msgid "Enables partitionwise join." msgstr "დანაყოფის გათვალისწინებით შეერთების ჩართვა." -#: utils/misc/guc_tables.c:924 +#: utils/misc/guc_tables.c:944 msgid "Enables partitionwise aggregation and grouping." msgstr "დანაყოფის გათვალისწინებით აგრეგაციისა და დაჯგუფებს ჩართვა." -#: utils/misc/guc_tables.c:934 +#: utils/misc/guc_tables.c:954 msgid "Enables the planner's use of parallel append plans." msgstr "დამგეგმავისთვის პარალელური ბოლოში მიწერის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:944 +#: utils/misc/guc_tables.c:964 msgid "Enables the planner's use of parallel hash plans." msgstr "დამგეგმავისთვის პარალელური ჰეშის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:954 +#: utils/misc/guc_tables.c:974 msgid "Enables plan-time and execution-time partition pruning." msgstr "" -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:975 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:986 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:989 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:1001 msgid "Enables the planner's use of async append plans." msgstr "" -#: utils/misc/guc_tables.c:991 +#: utils/misc/guc_tables.c:1011 +msgid "Enables removal of unique self-joins." +msgstr "უნიკალური თვითშერწყმების წაშლის ჩართვა." + +#: utils/misc/guc_tables.c:1021 msgid "Enables reordering of GROUP BY keys." msgstr "გასაღების (GROUP BY) გადალაგების ჩართვა." -#: utils/misc/guc_tables.c:1001 +#: utils/misc/guc_tables.c:1031 +msgid "Enables reordering of DISTINCT pathkeys." +msgstr "ჩართავს DISTINCT ბილიკის გასაღებების გადალაგებას." + +#: utils/misc/guc_tables.c:1041 msgid "Enables genetic query optimization." msgstr "მოთხოვნების ზოგადი ოპტიმიზაციის ჩართვა." -#: utils/misc/guc_tables.c:1002 +#: utils/misc/guc_tables.c:1042 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "" -#: utils/misc/guc_tables.c:1016 +#: utils/misc/guc_tables.c:1056 msgid "Shows whether the current user is a superuser." msgstr "აჩვენებს, არის მიმდინარე მომხმარებელი ზემომხმარებელი, თუ არა." -#: utils/misc/guc_tables.c:1031 +#: utils/misc/guc_tables.c:1071 msgid "Allows running the ALTER SYSTEM command." -msgstr "" +msgstr "ALTER SYSTEM ბრძანების გაშვების დაშვება." -#: utils/misc/guc_tables.c:1032 +#: utils/misc/guc_tables.c:1072 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:1082 msgid "Enables advertising the server via Bonjour." msgstr "სერვისის Bonjour-ით გამოქვეყნების ჩართვა." -#: utils/misc/guc_tables.c:1051 +#: utils/misc/guc_tables.c:1091 msgid "Collects transaction commit time." msgstr "აგროვებს ტრანზაქციის გადაცემის დროს." -#: utils/misc/guc_tables.c:1060 +#: utils/misc/guc_tables.c:1100 msgid "Enables SSL connections." msgstr "SSL შეერთებების ჩართვა." -#: utils/misc/guc_tables.c:1069 +#: utils/misc/guc_tables.c:1109 msgid "Controls whether \"ssl_passphrase_command\" is called during server reload." msgstr "" -#: utils/misc/guc_tables.c:1078 +#: utils/misc/guc_tables.c:1118 msgid "Give priority to server ciphersuite order." msgstr "" -#: utils/misc/guc_tables.c:1087 +#: utils/misc/guc_tables.c:1127 msgid "Forces synchronization of updates to disk." msgstr "დისკის განახლებების ნაძალადევი სინქრონიზაცია." -#: utils/misc/guc_tables.c:1088 +#: utils/misc/guc_tables.c:1128 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:1139 msgid "Continues processing after a checksum failure." msgstr "აგრძელებს დამუშავებას საკონტროლო ჯამის ჩავარდნის შემდეგ." -#: utils/misc/guc_tables.c:1100 +#: utils/misc/guc_tables.c:1140 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:1154 msgid "Continues processing past damaged page headers." msgstr "აგრძელებს დამუშავებას დაზიანებული გვერდის თავსართების შემდეგ." -#: utils/misc/guc_tables.c:1115 +#: utils/misc/guc_tables.c:1155 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:1168 msgid "Continues recovery after an invalid pages failure." msgstr "აგრძელებს აღდგენას არასწორი გვერდის ჩავარდნების შემდეგ." -#: utils/misc/guc_tables.c:1129 +#: utils/misc/guc_tables.c:1169 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:1187 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" -#: utils/misc/guc_tables.c:1148 +#: utils/misc/guc_tables.c:1188 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:1201 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:1211 msgid "Writes zeroes to new WAL files before first use." msgstr "ახალ WAL-ის ფაილებში მათ პირველ გამოყენებამდე ნულიანების ჩაწერა." -#: utils/misc/guc_tables.c:1181 +#: utils/misc/guc_tables.c:1221 msgid "Recycles WAL files by renaming them." msgstr "WAL-ის ფაილების თავიდან გამოყენება მათი სახელის გადარქმევით." -#: utils/misc/guc_tables.c:1191 +#: utils/misc/guc_tables.c:1231 msgid "Logs each checkpoint." msgstr "საკონტროლო წერტილების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1200 -msgid "Logs each successful connection." -msgstr "ყოველი წარმატებული შესვლის ჟურნალში ჩაწერა." - -#: utils/misc/guc_tables.c:1209 +#: utils/misc/guc_tables.c:1240 msgid "Logs details of pre-authentication connection handshake." msgstr "ჩაიწერს ავთენტიკაციამდე მიერთების ხელის ჩამორთმევის დეტალებს." -#: utils/misc/guc_tables.c:1219 +#: utils/misc/guc_tables.c:1250 msgid "Logs end of a session, including duration." msgstr "სესიის დასრულების ჟურნალში ჩაწერა, ხანგრძლივობის ჩართვლით." -#: utils/misc/guc_tables.c:1228 +#: utils/misc/guc_tables.c:1259 msgid "Logs each replication command." msgstr "რეპლიკაციის ყოველი ბრძანების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1237 +#: utils/misc/guc_tables.c:1268 msgid "Shows whether the running server has assertion checks enabled." msgstr "" -#: utils/misc/guc_tables.c:1248 +#: utils/misc/guc_tables.c:1279 msgid "Terminate session on any error." msgstr "სესიის დასრულება ნებისმიერი შეცდომის შემთხვევაში." -#: utils/misc/guc_tables.c:1257 +#: utils/misc/guc_tables.c:1288 msgid "Reinitialize server after backend crash." msgstr "უკანაბოლოს ავარიის შემდეგ სერვერის თავიდან ინიციალიზაცია." -#: utils/misc/guc_tables.c:1266 +#: utils/misc/guc_tables.c:1297 msgid "Remove temporary files after backend crash." msgstr "უკანაბოლოს ავარიის შემდეგ დროებითი ფაილების წაშლა." -#: utils/misc/guc_tables.c:1276 +#: utils/misc/guc_tables.c:1307 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:1317 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "გაჭედილი შვილი პროცესებისთვის SIGKILL-ის მაგიერ SIGABRT-ის გაგზავნა." -#: utils/misc/guc_tables.c:1297 +#: utils/misc/guc_tables.c:1328 msgid "Logs the duration of each completed SQL statement." msgstr "თითოეული დასრულებული SQL გამოსახულების ხანგრძლივობის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1306 +#: utils/misc/guc_tables.c:1338 +msgid "Set this to force all parse and plan trees to be passed through copyObject(), to facilitate catching errors and omissions in copyObject()." +msgstr "" + +#: utils/misc/guc_tables.c:1355 +msgid "Set this to force all parse and plan trees to be passed through outfuncs.c/readfuncs.c, to facilitate catching errors and omissions in those modules." +msgstr "" + +#: utils/misc/guc_tables.c:1372 +msgid "Set this to force all raw parse trees for DML statements to be scanned by raw_expression_tree_walker(), to facilitate catching errors and omissions in that function." +msgstr "" + +#: utils/misc/guc_tables.c:1390 msgid "Logs each query's parse tree." msgstr "ჟურნალში თითოეული მოთხოვნის დამუშავების ხის ჩაწერა." -#: utils/misc/guc_tables.c:1315 +#: utils/misc/guc_tables.c:1399 msgid "Logs each query's rewritten parse tree." msgstr "ჟურნალში თითოეული მოთხოვნის გადაწერილი დამუშავების ხის ჩაწერა." -#: utils/misc/guc_tables.c:1324 +#: utils/misc/guc_tables.c:1408 msgid "Logs each query's execution plan." msgstr "ჟურნალში თითოეული მოთხოვნის შესრულების გეგმის ჩაწერა." -#: utils/misc/guc_tables.c:1333 +#: utils/misc/guc_tables.c:1417 msgid "Indents parse and plan tree displays." msgstr "" -#: utils/misc/guc_tables.c:1342 +#: utils/misc/guc_tables.c:1426 msgid "Writes parser performance statistics to the server log." msgstr "დამმუშავებლის წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1351 +#: utils/misc/guc_tables.c:1435 msgid "Writes planner performance statistics to the server log." msgstr "დამგეგმავის წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1360 +#: utils/misc/guc_tables.c:1444 msgid "Writes executor performance statistics to the server log." msgstr "შემსრულებლის წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1369 +#: utils/misc/guc_tables.c:1453 msgid "Writes cumulative performance statistics to the server log." msgstr "საერთო წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1379 +#: utils/misc/guc_tables.c:1463 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:1475 msgid "Collects information about executing commands." msgstr "აგროვებს ინფორმაციას ბრძანებების შესრულების შესახებ." -#: utils/misc/guc_tables.c:1392 +#: utils/misc/guc_tables.c:1476 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:1486 msgid "Collects statistics on database activity." msgstr "აგროვებს სტატისტიკას ბაზის აქტივობების შესახებ." -#: utils/misc/guc_tables.c:1411 +#: utils/misc/guc_tables.c:1495 +msgid "Collects timing statistics for cost-based vacuum delay." +msgstr "აგროვებს დროის სტატისტიკას ფასზე დამყარებული მომტვერსასრუტების დაყოვნებისთვის." + +#: utils/misc/guc_tables.c:1504 msgid "Collects timing statistics for database I/O activity." msgstr "აგროვებს ბაზის შეყვანა/გამოტანის აქტივობების დროით სტატისტიკას." -#: utils/misc/guc_tables.c:1420 +#: utils/misc/guc_tables.c:1513 msgid "Collects timing statistics for WAL I/O activity." msgstr "აგროვებს WAL-ის შეყვანა/გამოტანის აქტივობების დროით სტატისტიკას." -#: utils/misc/guc_tables.c:1430 +#: utils/misc/guc_tables.c:1523 msgid "Updates the process title to show the active SQL command." msgstr "განახლებს პროცესის სათაურს, რათა მან აქტიური SQL ბრძანება აჩვენოს." -#: utils/misc/guc_tables.c:1431 +#: utils/misc/guc_tables.c:1524 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:1533 msgid "Starts the autovacuum subprocess." msgstr "ავტომომტვერსასრუტების ქვეპროცესის გაშვება." -#: utils/misc/guc_tables.c:1450 +#: utils/misc/guc_tables.c:1543 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "LISTEN-ის და NOTIFY-ის გამართვის შეტყობინებების გენერაცია." -#: utils/misc/guc_tables.c:1462 +#: utils/misc/guc_tables.c:1555 msgid "Emits information about lock usage." msgstr "ბლოკის გამოყენების შესახებ ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1472 +#: utils/misc/guc_tables.c:1565 msgid "Emits information about user lock usage." msgstr "მომხმარებლის ბლოკის გამოყენების შესახებ ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1482 +#: utils/misc/guc_tables.c:1575 msgid "Emits information about lightweight lock usage." msgstr "მსუბუქი ბლოკის გამოყენების შესახებ ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1492 +#: utils/misc/guc_tables.c:1585 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "" -#: utils/misc/guc_tables.c:1504 +#: utils/misc/guc_tables.c:1597 msgid "Logs long lock waits." msgstr "ბლოკირების დიდხნიანია ლოდინის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1513 +#: utils/misc/guc_tables.c:1606 +msgid "Logs lock failures." +msgstr "ჩაწერს ჟურნალში დაბლოკვის ჩავარდნებს." + +#: utils/misc/guc_tables.c:1615 msgid "Logs standby recovery conflict waits." msgstr "მომლოდინის აღდგენის კონფლიქტის ლოდინების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1522 +#: utils/misc/guc_tables.c:1624 msgid "Logs the host name in the connection logs." msgstr "ჟურნალში ჰოსტის სახელის ჩაწერა." -#: utils/misc/guc_tables.c:1523 +#: utils/misc/guc_tables.c:1625 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:1636 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:1637 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:1649 msgid "Sets the default read-only status of new transactions." msgstr "ახალი ტრანზაქციების მხოლოდ კითხვადობის სტატუსის ნაგულისხმევად დაყენება." -#: utils/misc/guc_tables.c:1557 +#: utils/misc/guc_tables.c:1659 msgid "Sets the current transaction's read-only status." msgstr "მიმდინარე ტრანზაქციის მხოლოდ-კითხვადობის სტატუსის დაყენება." -#: utils/misc/guc_tables.c:1567 +#: utils/misc/guc_tables.c:1669 msgid "Sets the default deferrable status of new transactions." msgstr "" -#: utils/misc/guc_tables.c:1576 +#: utils/misc/guc_tables.c:1678 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 -msgid "Enable row security." -msgstr "მწკრივების უსაფრთხოების ჩართვა." +#: utils/misc/guc_tables.c:1688 +msgid "Enables row security." +msgstr "ჩართავს მწკრივების უსაფრთხოებას." -#: utils/misc/guc_tables.c:1587 +#: utils/misc/guc_tables.c:1689 msgid "When enabled, row security will be applied to all users." msgstr "თუ ჩართავთ, მწკრივის უსაფრთხოება ყველა მომხმარებელზე გადატარდება." -#: utils/misc/guc_tables.c:1595 +#: utils/misc/guc_tables.c:1697 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "ქვეპროგრამის სხეულების შემოწმება CREATE FUNCTION-ის და CREATE PROCEDURE-ის დროს." -#: utils/misc/guc_tables.c:1604 -msgid "Enable input of NULL elements in arrays." +#: utils/misc/guc_tables.c:1706 +msgid "Enables input of NULL elements in arrays." msgstr "მასივებში NULL ტიპის ელემენტების შეყვანის ჩართვა." -#: utils/misc/guc_tables.c:1605 +#: utils/misc/guc_tables.c:1707 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:1723 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:1733 +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:1742 msgid "Truncate existing log files of same name during log rotation." msgstr "" -#: utils/misc/guc_tables.c:1651 +#: utils/misc/guc_tables.c:1752 msgid "Emit information about resource usage in sorting." msgstr "ინფორმაციის გამოტანა დალაგების მიერ რესურსების გამოყენების შესახებ." -#: utils/misc/guc_tables.c:1665 +#: utils/misc/guc_tables.c:1765 msgid "Generate debugging output for synchronized scanning." msgstr "სინქრონიზებული სკანირების შესახებ გამართვის ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1680 -msgid "Enable bounded sorting using heap sort." +#: utils/misc/guc_tables.c:1780 +msgid "Enables bounded sorting using heap sort." msgstr "" -#: utils/misc/guc_tables.c:1693 +#: utils/misc/guc_tables.c:1793 msgid "Emit WAL-related debugging output." msgstr "'WAL'-თან დაკავშირებული გამართვის ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1705 +#: utils/misc/guc_tables.c:1805 msgid "Shows whether datetimes are integer based." msgstr "აჩვენებს, არის თუ არა თარიღი და დრო მთელი რიცხვი." -#: utils/misc/guc_tables.c:1716 +#: utils/misc/guc_tables.c:1816 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:1826 msgid "Sets whether GSSAPI delegation should be accepted from the client." msgstr "მივიღებთ კლიენტიდან GSSAPI-ის დელეგაციას, თუ არა." -#: utils/misc/guc_tables.c:1736 +#: utils/misc/guc_tables.c:1836 msgid "Warn about backslash escapes in ordinary string literals." msgstr "" -#: utils/misc/guc_tables.c:1746 +#: utils/misc/guc_tables.c:1846 msgid "Causes '...' strings to treat backslashes literally." msgstr "" -#: utils/misc/guc_tables.c:1757 -msgid "Enable synchronized sequential scans." -msgstr "სინქრონული მიმდევრობითი სკანირებების ჩართვა." +#: utils/misc/guc_tables.c:1857 +msgid "Enables synchronized sequential scans." +msgstr "ჩართავს სინქრონული მიმდევრობითი სკანირებებს." -#: utils/misc/guc_tables.c:1767 +#: utils/misc/guc_tables.c:1867 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "აყენებს იქნება ჩასმული ტრანზაქცია აღდგენის სამიზნესთან ერთად, თუ არა." -#: utils/misc/guc_tables.c:1777 +#: utils/misc/guc_tables.c:1877 msgid "Starts the WAL summarizer process to enable incremental backup." msgstr "" -#: utils/misc/guc_tables.c:1787 +#: utils/misc/guc_tables.c:1887 msgid "Allows connections and queries during recovery." msgstr "აღდგენისას მიერთებების და მოთხოვნების დაშვება." -#: utils/misc/guc_tables.c:1797 +#: utils/misc/guc_tables.c:1897 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:1907 msgid "Shows whether hot standby is currently active." msgstr "აჩვენებს, ამჟამად ცხელი მომლოდინე აქტიურია, თუ არა." -#: utils/misc/guc_tables.c:1818 +#: utils/misc/guc_tables.c:1918 msgid "Allows modifications of the structure of system tables." msgstr "სისტემური ცხრილების სტრუქტურის ცვლილების დაშვება." -#: utils/misc/guc_tables.c:1829 +#: utils/misc/guc_tables.c:1929 msgid "Disables reading from system indexes." msgstr "სისტემური ინდექსებიდან კითხვის გამორთვა." -#: utils/misc/guc_tables.c:1830 +#: utils/misc/guc_tables.c:1930 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:1941 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "გამოსაცდელად ცხრილის სივრცეების პირდაპირ ph_tblspc-ში დაშვება." -#: utils/misc/guc_tables.c:1852 +#: utils/misc/guc_tables.c:1952 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "დიდი ობიექტების პრივილეგიების შემოწმების წინა ვერსიებთან თავსებადი რეჟიმის ჩართვა." -#: utils/misc/guc_tables.c:1853 +#: utils/misc/guc_tables.c:1953 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:1963 msgid "When generating SQL fragments, quote all identifiers." msgstr "SQL ფრაგმენტების გენერაციისას ყველა იდენტიფიკატორის ბრჭყალებში ჩასმა." -#: utils/misc/guc_tables.c:1873 +#: utils/misc/guc_tables.c:1973 msgid "Shows whether data checksums are turned on for this cluster." msgstr "აჩვენებს, ამ კლასტერზე მონაცემების საკონტროლო ჯამები ჩართულია, თუ არა." -#: utils/misc/guc_tables.c:1884 +#: utils/misc/guc_tables.c:1984 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "დუბლირებული შეტყობინებების შეკვეცის თავიდან ასაცილებლად ჟურნალში გაგზავნილი შეტყობინებებისთვის მიმდევრობის ნომრის დამატება." -#: utils/misc/guc_tables.c:1894 +#: utils/misc/guc_tables.c:1994 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:2004 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "" -#: utils/misc/guc_tables.c:1905 +#: utils/misc/guc_tables.c:2005 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "" -#: utils/misc/guc_tables.c:1915 +#: utils/misc/guc_tables.c:2015 msgid "Allow JIT compilation." msgstr "JIT კომპილაციის ჩართვა." -#: utils/misc/guc_tables.c:1926 +#: utils/misc/guc_tables.c:2026 msgid "Register JIT-compiled functions with debugger." msgstr "JIT-ით კომპილირებული ფუნქციების გამმართველთან რეგისტრაცია." -#: utils/misc/guc_tables.c:1943 +#: utils/misc/guc_tables.c:2043 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "" -#: utils/misc/guc_tables.c:1954 +#: utils/misc/guc_tables.c:2054 msgid "Allow JIT compilation of expressions." msgstr "გამოსახულებების JIT კომპილაციის დაშვება." -#: utils/misc/guc_tables.c:1965 +#: utils/misc/guc_tables.c:2065 msgid "Register JIT-compiled functions with perf profiler." msgstr "" -#: utils/misc/guc_tables.c:1982 +#: utils/misc/guc_tables.c:2082 msgid "Allow JIT compilation of tuple deforming." msgstr "კორტეჟის დეფორმაციის JIT კომპილაციის დაშვება." -#: utils/misc/guc_tables.c:1993 +#: utils/misc/guc_tables.c:2093 msgid "Whether to continue running after a failure to sync data files." msgstr "გაგრძელდება მუშაობა მონაცემის ფაილების სინქრონიზაციის ჩავარდნის შემდეგ, თუ არა." -#: utils/misc/guc_tables.c:2002 +#: utils/misc/guc_tables.c:2102 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:2111 msgid "Enables event triggers." msgstr "ჩართავს მოვლენის ტრიგერებს." -#: utils/misc/guc_tables.c:2012 +#: utils/misc/guc_tables.c:2112 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:2121 +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:2130 +msgid "Enables deprecation warnings for MD5 passwords." +msgstr "მოძველებულობის გაფრთხილებების ჩართვა MD5 პაროლებისთვის." + +#: utils/misc/guc_tables.c:2139 +msgid "Enables vacuum to truncate empty pages at the end of the table." +msgstr "უფლებას აძლევს მომტვერსასრუტებას, მოკვეთოს ცარიელი გვერდები ცხრილის ბოლოში." + +#: utils/misc/guc_tables.c:2157 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:2159 utils/misc/guc_tables.c:2313 utils/misc/guc_tables.c:2732 utils/misc/guc_tables.c:2743 utils/misc/guc_tables.c:2754 utils/misc/guc_tables.c:2765 utils/misc/guc_tables.c:2776 +msgid "0 disables the timeout." +msgstr "0 გამორთავს მოლოდინის ვადას." + +#: utils/misc/guc_tables.c:2168 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:2170 utils/misc/guc_tables.c:2908 msgid "This allows attaching a debugger to the process." msgstr "პროცესისთვის გამმართველის მიბმის უფლების მიცემა." -#: utils/misc/guc_tables.c:2061 +#: utils/misc/guc_tables.c:2179 msgid "Sets the default statistics target." msgstr "სტატისტიკის ნაგულისხმევი სამიზნის დაყენება." -#: utils/misc/guc_tables.c:2062 +#: utils/misc/guc_tables.c:2180 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:2189 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" -#: utils/misc/guc_tables.c:2073 +#: utils/misc/guc_tables.c:2191 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:2202 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:2204 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:2215 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" -#: utils/misc/guc_tables.c:2107 +#: utils/misc/guc_tables.c:2225 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:2235 msgid "GEQO: number of individuals in the population." msgstr "GEQO: ინდივიდების რაოდენობა პოპულაციაში." -#: utils/misc/guc_tables.c:2118 utils/misc/guc_tables.c:2128 -msgid "Zero selects a suitable default value." -msgstr "ნული შესაბამის ნაგულისხმევ მნიშვნელობას აირჩევს." +#: utils/misc/guc_tables.c:2236 utils/misc/guc_tables.c:2246 +msgid "0 means use a suitable default value." +msgstr "0 ნიშნავს შესაბამისი ნაგულისხმევი მნიშვნელობის გამოყენებას." -#: utils/misc/guc_tables.c:2127 +#: utils/misc/guc_tables.c:2245 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: ალგორითმის იტერაციების რაოდენობა." -#: utils/misc/guc_tables.c:2139 +#: utils/misc/guc_tables.c:2257 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:2268 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:2269 utils/misc/guc_tables.c:2280 +msgid "-1 means wait forever." +msgstr "-1 ნიშნავს უსაზღვროდ ლოდინს." + +#: utils/misc/guc_tables.c:2279 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:2290 msgid "Sets the minimum delay for applying changes during recovery." msgstr "აღდგენისას ცვლილებების გადატარების მინიმალური დაყოვნების დაყენება." -#: utils/misc/guc_tables.c:2183 +#: utils/misc/guc_tables.c:2301 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:2312 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:2323 msgid "Sets the maximum number of concurrent connections." msgstr "აყენებს ერთდროული შეერთებების მაქსიმალურ რაოდენობას." -#: utils/misc/guc_tables.c:2216 +#: utils/misc/guc_tables.c:2334 msgid "Sets the number of connection slots reserved for superusers." msgstr "აყენებს ზემომხმარებლებისთვის რეზერვირებული შეერთების სლოტებს." -#: utils/misc/guc_tables.c:2226 +#: utils/misc/guc_tables.c:2344 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:2355 msgid "Amount of dynamic shared memory reserved at startup." msgstr "გაშვებისას დარეზერვებული დინამიური გაზიარებული მეხსიერების რაოდენობა." -#: utils/misc/guc_tables.c:2252 +#: utils/misc/guc_tables.c:2370 msgid "Sets the number of shared memory buffers used by the server." msgstr "სერვერის მიერ გამოყენებული გაზიარებული მეხსიერების ბაფერების რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2263 +#: utils/misc/guc_tables.c:2381 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:2392 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:2403 msgid "Shows the number of huge pages needed for the main shared memory area." msgstr "" -#: utils/misc/guc_tables.c:2286 -msgid "-1 indicates that the value could not be determined." -msgstr "-1 ნიშნავს, რომ მნიშვნელობა ვერ განისაზღვრა." +#: utils/misc/guc_tables.c:2404 +msgid "-1 means huge pages are not supported." +msgstr "-1 ნიშნავს, რომ უზარმაზარი გვერდები მხარდაჭერილი არაა." -#: utils/misc/guc_tables.c:2296 +#: utils/misc/guc_tables.c:2414 +msgid "Shows the number of semaphores required for the server." +msgstr "აჩვენებს სერვერის მიერ გამოყენებული სემაფორების რაოდენობას." + +#: utils/misc/guc_tables.c:2425 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 -msgid "Specify 0 to have this value determined as a fraction of shared_buffers." -msgstr "" +#: utils/misc/guc_tables.c:2426 utils/misc/guc_tables.c:2481 utils/misc/guc_tables.c:2492 +msgid "0 means use a fraction of \"shared_buffers\"." +msgstr "0 ნიშნავს \"shared_buffers\"-ის ნაწილის გამოყენებას." -#: utils/misc/guc_tables.c:2307 +#: utils/misc/guc_tables.c:2436 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:2447 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:2458 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:2469 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:2480 +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:2491 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:2502 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "" -#: utils/misc/guc_tables.c:2384 +#: utils/misc/guc_tables.c:2513 msgid "Sets the TCP port the server listens on." msgstr "TCP პორტის მითითება, რომელზეც სერვერი უსმენს." -#: utils/misc/guc_tables.c:2394 +#: utils/misc/guc_tables.c:2523 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Unix-დომენის სოკეტზე წვდომის უფლებების დაყენება." -#: utils/misc/guc_tables.c:2395 +#: utils/misc/guc_tables.c:2524 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:2538 msgid "Sets the file permissions for log files." msgstr "ჟურნალის ფაილების წვდომების დაყენება." -#: utils/misc/guc_tables.c:2410 +#: utils/misc/guc_tables.c:2539 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:2553 msgid "Shows the mode of the data directory." msgstr "მონაცემების საქაღალდის წვდომის ჩვენება." -#: utils/misc/guc_tables.c:2425 +#: utils/misc/guc_tables.c:2554 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:2567 msgid "Sets the maximum memory to be used for query workspaces." msgstr "მოთხოვნის სამუშაო სივრცის მიერ გამოყენებული მეხსიერების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2439 +#: utils/misc/guc_tables.c:2568 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:2585 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "ტექნიკური ოპერაციებისთვის გამოყენებული მეხსიერების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2452 +#: utils/misc/guc_tables.c:2586 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:2596 msgid "Sets the maximum memory to be used for logical decoding." msgstr "ლოგიკური გაშიფვრისთვის გამოყენებული მეხსიერების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2463 +#: utils/misc/guc_tables.c:2597 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:2613 msgid "Sets the maximum stack depth, in kilobytes." msgstr "სტეკის მაქსიმალური სიღრმე კილობაიტებში." -#: utils/misc/guc_tables.c:2490 +#: utils/misc/guc_tables.c:2624 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:2625 msgid "-1 means no limit." msgstr "-1 ნიშნავს ლიმიტის გარეშე." -#: utils/misc/guc_tables.c:2501 +#: utils/misc/guc_tables.c:2635 msgid "Vacuum cost for a page found in the buffer cache." msgstr "ბაფერის ქეშში ნაპოვნი გვერდის მომტვერსასრუტების ფასი." -#: utils/misc/guc_tables.c:2511 +#: utils/misc/guc_tables.c:2645 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "ბაფერის ქეშში გვერდის მომტვერსასრუტების ფასი ნაპოვნი არაა." -#: utils/misc/guc_tables.c:2521 +#: utils/misc/guc_tables.c:2655 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "" -#: utils/misc/guc_tables.c:2531 +#: utils/misc/guc_tables.c:2665 msgid "Vacuum cost amount available before napping." msgstr "" -#: utils/misc/guc_tables.c:2541 +#: utils/misc/guc_tables.c:2675 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "" -#: utils/misc/guc_tables.c:2551 -msgid "Sets the maximum number of simultaneously open files for each server process." -msgstr "" +#: utils/misc/guc_tables.c:2676 +msgid "-1 means use \"vacuum_cost_limit\"." +msgstr "-1 ნიშნავს \"vacuum_cost_limit\"-ის გამოყენებას." + +#: utils/misc/guc_tables.c:2685 +msgid "Sets the maximum number of files each server process is allowed to open simultaneously." +msgstr "თითოეული სერვერის პროცესისთვის ერთდროულად გახსნილი ფაილების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2564 +#: utils/misc/guc_tables.c:2698 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "" -#: utils/misc/guc_tables.c:2575 +#: utils/misc/guc_tables.c:2709 msgid "Sets the minimum OID of tables for tracking locks." msgstr "" -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2710 msgid "Is used to avoid output on system tables." msgstr "გამოიყენება სისტემურ ცხრილებზე გამოტანის თავიდან ასაცილებლად." -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2719 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "" -#: utils/misc/guc_tables.c:2597 +#: utils/misc/guc_tables.c:2731 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 -msgid "A value of 0 turns off the timeout." -msgstr "0 მოლოდინის ვადას გამორთავს." - -#: utils/misc/guc_tables.c:2608 +#: utils/misc/guc_tables.c:2742 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "აყენებს ბლოკირების ნებისმიერი მოლოდინისთვის დაშვებულ მაქსიმალურ ხანგრძლივობას." -#: utils/misc/guc_tables.c:2619 +#: utils/misc/guc_tables.c:2753 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:2764 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:2775 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:2786 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "" -#: utils/misc/guc_tables.c:2662 +#: utils/misc/guc_tables.c:2796 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" -#: utils/misc/guc_tables.c:2672 +#: utils/misc/guc_tables.c:2806 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:2816 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:2826 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:2835 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:2848 msgid "Sets the maximum number of locks per transaction." msgstr "ტრანზაქციაში ბლოკების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2715 +#: utils/misc/guc_tables.c:2849 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:2860 msgid "Sets the maximum number of predicate locks per transaction." msgstr "" -#: utils/misc/guc_tables.c:2727 +#: utils/misc/guc_tables.c:2861 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:2872 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:2873 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:2883 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "" -#: utils/misc/guc_tables.c:2750 +#: utils/misc/guc_tables.c:2884 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:2894 msgid "Sets the maximum allowed time to complete client authentication." msgstr "კლიენტის ავთენტიკაციის დასრულებისთვის დაშვებული მაქსიმალური დროის დაყენება." -#: utils/misc/guc_tables.c:2772 +#: utils/misc/guc_tables.c:2906 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:2918 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:2928 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "აღდგენისას WAL-ში წინასწარ-კითხვის ბაფერის ზომა." -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2929 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:2939 msgid "Sets the size of WAL files held for standby servers." msgstr "მომლოდინე სერვერებისთვის WAL ფაილებისთვის შენახული ზომის დაყენება." -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2950 msgid "Sets the minimum size to shrink the WAL to." msgstr "WAL-ის შემცირების მინიმალური ზომის დაყენება." -#: utils/misc/guc_tables.c:2828 +#: utils/misc/guc_tables.c:2962 msgid "Sets the WAL size that triggers a checkpoint." msgstr "აყენებს WAL-ის ზომას, რომელიც საკონტროლო წერტილს ატრიგერებს." -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2974 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "ავტომატური WAL საკონტროლო წერტილებს შორის მაქსიმალური დროის დაყენება." -#: utils/misc/guc_tables.c:2851 +#: utils/misc/guc_tables.c:2985 msgid "Sets the maximum time before warning if checkpoints triggered by WAL volume happen too frequently." msgstr "" -#: utils/misc/guc_tables.c:2853 -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." +#: utils/misc/guc_tables.c:2987 +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. 0 disables 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:3000 utils/misc/guc_tables.c:3230 utils/misc/guc_tables.c:3322 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "" -#: utils/misc/guc_tables.c:2877 -msgid "Sets the number of disk-page buffers in shared memory for WAL." +#: utils/misc/guc_tables.c:3001 utils/misc/guc_tables.c:3231 utils/misc/guc_tables.c:3323 +msgid "0 disables forced writeback." msgstr "" -#: utils/misc/guc_tables.c:2878 -msgid "Specify -1 to have this value determined as a fraction of shared_buffers." +#: utils/misc/guc_tables.c:3011 +msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" -#: utils/misc/guc_tables.c:2888 +#: utils/misc/guc_tables.c:3012 +msgid "-1 means use a fraction of \"shared_buffers\"." +msgstr "-1 ნიშნავს \"shared_buffers\"-ის ნაწილის გამოყენებას." + +#: utils/misc/guc_tables.c:3022 msgid "Time between WAL flushes performed in the WAL writer." msgstr "" -#: utils/misc/guc_tables.c:2899 +#: utils/misc/guc_tables.c:3033 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:3044 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "" -#: utils/misc/guc_tables.c:2921 +#: utils/misc/guc_tables.c:3055 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" -#: utils/misc/guc_tables.c:2932 +#: utils/misc/guc_tables.c:3066 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "" -#: utils/misc/guc_tables.c:2942 +#: utils/misc/guc_tables.c:3076 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "" -#: utils/misc/guc_tables.c:2943 -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." +#: utils/misc/guc_tables.c:3077 +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. -1 means no maximum." msgstr "" -#: utils/misc/guc_tables.c:2955 +#: utils/misc/guc_tables.c:3089 msgid "Sets the maximum time to wait for WAL replication." msgstr "WAL რეპლიკაციის მოლოდინის მაქსიმალური ვადის დაყენება." -#: utils/misc/guc_tables.c:2966 +#: utils/misc/guc_tables.c:3100 +msgid "Sets the duration a replication slot can remain idle before it is invalidated." +msgstr "" + +#: utils/misc/guc_tables.c:3112 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:3124 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:3135 msgid "Sets the number of digits displayed for floating-point values." msgstr "" -#: utils/misc/guc_tables.c:2990 +#: utils/misc/guc_tables.c:3136 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 -msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." +#: utils/misc/guc_tables.c:3148 +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 -msgid "Zero logs a sample of all queries. -1 turns this feature off." +#: utils/misc/guc_tables.c:3151 +msgid "-1 disables sampling. 0 means sample all statements." msgstr "" -#: utils/misc/guc_tables.c:3015 +#: utils/misc/guc_tables.c:3161 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "" -#: utils/misc/guc_tables.c:3017 -msgid "Zero prints all queries. -1 turns this feature off." -msgstr "0-ს ყველა მოთხოვნა გამოაქვს, -1 გამორთავს ამ ფუნქციას." +#: utils/misc/guc_tables.c:3163 +msgid "-1 disables logging statement durations. 0 means log all statement durations." +msgstr "" -#: utils/misc/guc_tables.c:3027 +#: utils/misc/guc_tables.c:3173 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "" -#: utils/misc/guc_tables.c:3029 -msgid "Zero prints all actions. -1 turns autovacuum logging off." -msgstr "0-ს ყველა ქმედება გამოაქვს. -1 გამორთავს ავტომომტვერსასრუტებას." +#: utils/misc/guc_tables.c:3175 +msgid "-1 disables logging autovacuum actions. 0 means log all autovacuum actions." +msgstr "" -#: utils/misc/guc_tables.c:3039 +#: utils/misc/guc_tables.c:3185 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 -msgid "-1 to print values in full." -msgstr "-1 მნიშვნელობების სრულად გამოსატანად." +#: utils/misc/guc_tables.c:3187 utils/misc/guc_tables.c:3199 +msgid "-1 means log values in full." +msgstr "-1 მნიშვნელობების ჟურნალში სრულად ჩაწერას." -#: utils/misc/guc_tables.c:3051 +#: utils/misc/guc_tables.c:3197 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:3209 msgid "Background writer sleep time between rounds." msgstr "" -#: utils/misc/guc_tables.c:3074 +#: utils/misc/guc_tables.c:3220 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "" -#: utils/misc/guc_tables.c:3097 +#: utils/misc/guc_tables.c:3221 +msgid "0 disables background writing." +msgstr "0 გამორთავს ფონურ ჩაწერას." + +#: utils/misc/guc_tables.c:3243 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:3244 utils/misc/guc_tables.c:3258 +msgid "0 disables simultaneous requests." +msgstr "0 გამორთავს ერთდროულ მოთხოვნებს." + +#: utils/misc/guc_tables.c:3257 msgid "A variant of \"effective_io_concurrency\" that is used for maintenance work." +msgstr "\"effective_io_concurency\"-ის ვარიანტი, რომელიც სარემონტო სამუშაოებისთვის გამოიყენება." + +#: utils/misc/guc_tables.c:3272 +msgid "Server-wide limit that clamps io_combine_limit." msgstr "" -#: utils/misc/guc_tables.c:3126 +#: utils/misc/guc_tables.c:3286 msgid "Limit on the size of data reads and writes." msgstr "" -#: utils/misc/guc_tables.c:3151 +#: utils/misc/guc_tables.c:3300 +msgid "Max number of IOs that one process can execute simultaneously." +msgstr "" + +#: utils/misc/guc_tables.c:3312 +msgid "Number of IO worker processes, for io_method=worker." +msgstr "" + +#: utils/misc/guc_tables.c:3335 msgid "Maximum number of concurrent worker processes." msgstr "ერთდროულად გაშვებული დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3163 +#: utils/misc/guc_tables.c:3347 msgid "Maximum number of logical replication worker processes." msgstr "ლოგიკური რეპლიკაციის დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3175 +#: utils/misc/guc_tables.c:3359 msgid "Maximum number of table synchronization workers per subscription." msgstr "თითოეული გამოწერის ცხრილის სინქრონიზაციის დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3187 +#: utils/misc/guc_tables.c:3371 msgid "Maximum number of parallel apply workers per subscription." msgstr "თითოეული გამოწერის პარალელური გადატარების დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3197 +#: utils/misc/guc_tables.c:3383 +msgid "Sets the maximum number of active replication origins." +msgstr "აყენებს აქტიური რეპლიკაციის ძრავების მაქსიმალურ რაოდენობას." + +#: utils/misc/guc_tables.c:3393 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:3395 +msgid "0 disables time-based creation of new log files." +msgstr "" + +#: utils/misc/guc_tables.c:3405 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:3407 +msgid "0 disables size-based creation of new log files." +msgstr "" + +#: utils/misc/guc_tables.c:3417 msgid "Shows the maximum number of function arguments." msgstr "ფუნქციის არგუმენტების მაქსიმალური რაოდენობის ჩვენება." -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3428 msgid "Shows the maximum number of index keys." msgstr "ინდექსის გასაღებების მაქსიმალური რაოდენობის ჩვენება." -#: utils/misc/guc_tables.c:3243 +#: utils/misc/guc_tables.c:3439 msgid "Shows the maximum identifier length." msgstr "იდენტიფიკატორის მაქსიმალური სიგრძის ჩვენება." -#: utils/misc/guc_tables.c:3254 +#: utils/misc/guc_tables.c:3450 msgid "Shows the size of a disk block." msgstr "დისკის ბლოკის ზომის ჩვენება." -#: utils/misc/guc_tables.c:3265 +#: utils/misc/guc_tables.c:3461 msgid "Shows the number of pages per disk file." msgstr "ფაილში არსებული გვერდების რაოდენობის ჩვენება." -#: utils/misc/guc_tables.c:3276 +#: utils/misc/guc_tables.c:3472 msgid "Shows the block size in the write ahead log." msgstr "წინასწარ-ჩაწერადი ჟურნალის ბლოკის ზომის ჩვენება." -#: utils/misc/guc_tables.c:3287 +#: utils/misc/guc_tables.c:3483 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:3495 msgid "Shows the size of write ahead log segments." msgstr "წინასწარ-ჩაწერადი ჟურნალის სეგმენტების ზომის ჩვენება." -#: utils/misc/guc_tables.c:3312 +#: utils/misc/guc_tables.c:3508 msgid "Time for which WAL summary files should be kept." msgstr "" -#: utils/misc/guc_tables.c:3325 +#: utils/misc/guc_tables.c:3509 +msgid "0 disables automatic summary file deletion." +msgstr "" + +#: utils/misc/guc_tables.c:3521 msgid "Time to sleep between autovacuum runs." msgstr "ძილის დრო ავტომომტვერსასრუტებების გაშვებებს შორის." -#: utils/misc/guc_tables.c:3335 +#: utils/misc/guc_tables.c:3531 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "" -#: utils/misc/guc_tables.c:3344 -msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." +#: utils/misc/guc_tables.c:3540 +msgid "Maximum number of tuple updates or deletes prior to vacuum." +msgstr "" + +#: utils/misc/guc_tables.c:3541 +msgid "-1 disables the maximum threshold." +msgstr "-1 გამორთავს მაქსიმალურ ზღვარს." + +#: utils/misc/guc_tables.c:3549 +msgid "Minimum number of tuple inserts prior to vacuum." msgstr "" -#: utils/misc/guc_tables.c:3353 +#: utils/misc/guc_tables.c:3550 +msgid "-1 disables insert vacuums." +msgstr "-1 გამორთავს ვაკუუმების ჩასმას." + +#: utils/misc/guc_tables.c:3558 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "" -#: utils/misc/guc_tables.c:3363 +#: utils/misc/guc_tables.c:3568 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:3580 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:3590 +msgid "Sets the number of backend slots to allocate for autovacuum workers." +msgstr "აყენებს უკანაბოლოს სლოტების რაოდენობას გამოსაყოფად ავტომომტვერსასრუტების დამხმარე პროცესებისთვის." + +#: utils/misc/guc_tables.c:3599 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "ერთდროულად გაშვებული ავტომომტვერსასრუტების დამხმარე პროცესების რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3395 +#: utils/misc/guc_tables.c:3609 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "თითოეული რემონტის ოპერაციისთვის პარალელური პროცესების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3405 +#: utils/misc/guc_tables.c:3619 msgid "Sets the maximum number of parallel processes per executor node." msgstr "თითოეული შემსრულებელი კვანძისთვის პარალელურად გაშვებული პროცესების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3416 +#: utils/misc/guc_tables.c:3630 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:3641 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:3642 +msgid "-1 means use \"maintenance_work_mem\"." +msgstr "-1 ნიშნავს \"maintenance_work_mem\"-ის გამოყენებას." + +#: utils/misc/guc_tables.c:3652 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 -msgid "A value of 0 uses the system default." -msgstr "სისტემური ნაგულისხმევი მნიშვნელობის გამოსაყენებლად მიუთითეთ 0." +#: utils/misc/guc_tables.c:3653 utils/misc/guc_tables.c:3664 utils/misc/guc_tables.c:3787 utils/misc/guc_tables.c:3798 +msgid "0 means use the system default." +msgstr "0 ნიშნავს სისტემის ნაგულისხმევის გამოყენებას." -#: utils/misc/guc_tables.c:3449 +#: utils/misc/guc_tables.c:3663 msgid "Time between TCP keepalive retransmits." msgstr "დაყოვნება TCP keepalive პაკეტების გადაგზავნებს შორის." -#: utils/misc/guc_tables.c:3460 +#: utils/misc/guc_tables.c:3674 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:3685 msgid "Maximum number of TCP keepalive retransmits." msgstr "TCP Keepalive-ების გადაგზავნის მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3472 -msgid "Number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." +#: utils/misc/guc_tables.c:3686 +msgid "Number of consecutive keepalive retransmits that can be lost before a connection is considered dead. 0 means use the system default." msgstr "" -#: utils/misc/guc_tables.c:3483 +#: utils/misc/guc_tables.c:3697 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "" -#: utils/misc/guc_tables.c:3494 +#: utils/misc/guc_tables.c:3698 +msgid "0 means no limit." +msgstr "0 ნიშნავს უსაზღვროს." + +#: utils/misc/guc_tables.c:3707 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:3708 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:3719 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "ცხრილის მონაცემების მინიმალური რაოდენობა პარალელური სკანირებისთვის." -#: utils/misc/guc_tables.c:3507 +#: utils/misc/guc_tables.c:3720 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:3730 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "" -#: utils/misc/guc_tables.c:3518 +#: utils/misc/guc_tables.c:3731 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:3742 msgid "Shows the server version as an integer." msgstr "სერვერის ვერსიას, როგორც მთელ რიცხვს, ისე აჩვენებს." -#: utils/misc/guc_tables.c:3540 +#: utils/misc/guc_tables.c:3753 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "მითითებული რაოდენობა კილობაიტზე უფრო დიდი დროებითი ფაილების გამოყენების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:3541 -msgid "Zero logs all files. The default is -1 (turning this feature off)." -msgstr "" +#: utils/misc/guc_tables.c:3754 +msgid "-1 disables logging temporary files. 0 means log all temporary files." +msgstr "-1 გათიშავს დროებით ფაილების ჟურნალში ჩაწერას. 0 ნიშნავს ყველა დროებითი ფაილის ჟურნალში ჩაწერას." -#: utils/misc/guc_tables.c:3551 +#: utils/misc/guc_tables.c:3764 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:3775 msgid "Sets the maximum size of the pending list for GIN index." msgstr "" -#: utils/misc/guc_tables.c:3573 +#: utils/misc/guc_tables.c:3786 msgid "TCP user timeout." msgstr "TCP მომხმარებლის ლოდინის ვადა." -#: utils/misc/guc_tables.c:3584 +#: utils/misc/guc_tables.c:3797 msgid "The size of huge page that should be requested." msgstr "მოსათხოვი უზარმაზარი გვერდების (hugepages) ზომა." -#: utils/misc/guc_tables.c:3595 +#: utils/misc/guc_tables.c:3808 msgid "Aggressively flush system caches for debugging purposes." msgstr "" -#: utils/misc/guc_tables.c:3618 +#: utils/misc/guc_tables.c:3809 +msgid "0 means use normal caching behavior." +msgstr "" + +#: utils/misc/guc_tables.c:3831 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "" -#: utils/misc/guc_tables.c:3629 +#: utils/misc/guc_tables.c:3832 +msgid "0 disables connection checks." +msgstr "0 კავშირის შემოწმებას გამორთავს." + +#: utils/misc/guc_tables.c:3842 msgid "Time between progress updates for long-running startup operations." msgstr "" -#: utils/misc/guc_tables.c:3631 -msgid "0 turns this feature off." -msgstr "0 გამორთავს ამ ფუნქციას." +#: utils/misc/guc_tables.c:3844 +msgid "0 disables progress updates." +msgstr "" -#: utils/misc/guc_tables.c:3641 +#: utils/misc/guc_tables.c:3854 msgid "Sets the iteration count for SCRAM secret generation." msgstr "აყენებს იტერაციების რიცხვს SCRAM-ის პაროლის გენერაციისთვის." -#: utils/misc/guc_tables.c:3661 +#: utils/misc/guc_tables.c:3874 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:3885 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:3896 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:3907 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:3918 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:3929 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:3940 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:3952 msgid "Perform JIT compilation if query is more expensive." msgstr "თუ მოთხოვნა უფრო ძვირია, JIT კომპილაციის შესრულება." -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3953 msgid "-1 disables JIT compilation." msgstr "-1 JIT კომპილაციას გამორთავს." -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3963 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "" -#: utils/misc/guc_tables.c:3751 +#: utils/misc/guc_tables.c:3964 msgid "-1 disables optimization." msgstr "-1 ოპტიმიზაციას გამორთავს." -#: utils/misc/guc_tables.c:3761 +#: utils/misc/guc_tables.c:3974 msgid "Perform JIT inlining if query is more expensive." msgstr "" -#: utils/misc/guc_tables.c:3762 +#: utils/misc/guc_tables.c:3975 msgid "-1 disables inlining." msgstr "-1 გამორთავს კოდის ჩადგმას." -#: utils/misc/guc_tables.c:3772 +#: utils/misc/guc_tables.c:3985 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:3997 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:4009 msgid "GEQO: selective pressure within the population." msgstr "GEQO: შერჩევითი ზეწოლა პოპულაციაში." -#: utils/misc/guc_tables.c:3807 +#: utils/misc/guc_tables.c:4020 msgid "GEQO: seed for random path selection." msgstr "" -#: utils/misc/guc_tables.c:3818 +#: utils/misc/guc_tables.c:4031 msgid "Multiple of \"work_mem\" to use for hash tables." msgstr "" -#: utils/misc/guc_tables.c:3829 +#: utils/misc/guc_tables.c:4042 msgid "Multiple of the average buffer usage to free per round." msgstr "" -#: utils/misc/guc_tables.c:3839 +#: utils/misc/guc_tables.c:4052 msgid "Sets the seed for random-number generation." -msgstr "" +msgstr "აყენებს თესლს შემთხვევითი რიცხვების გენერაციისთვის." -#: utils/misc/guc_tables.c:3850 +#: utils/misc/guc_tables.c:4063 msgid "Vacuum cost delay in milliseconds." msgstr "დამტვერსასრუტების დაყოვნება მილიწამებში." -#: utils/misc/guc_tables.c:3861 +#: utils/misc/guc_tables.c:4074 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "დამტვერსასრუტების დაყოვნება მილიწამებში, ავტოდამტვერსასრუტებისთვის." -#: utils/misc/guc_tables.c:3872 +#: utils/misc/guc_tables.c:4075 +msgid "-1 means use \"vacuum_cost_delay\"." +msgstr "-1 ნიშნავს \"vacuum_cost_delay\"-ის გამოყენებას." + +#: utils/misc/guc_tables.c:4085 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:4095 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:4105 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:4115 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:4125 msgid "Fraction of statements exceeding \"log_min_duration_sample\" to be logged." msgstr "" -#: utils/misc/guc_tables.c:3913 +#: utils/misc/guc_tables.c:4126 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:4135 msgid "Sets the fraction of transactions from which to log all statements." msgstr "ადგენს ტრანზაქციის ნაწილს, რომლის შემდეგაც ყველა ოპერატორი ჟურნალში ჩაიწერება." -#: utils/misc/guc_tables.c:3923 +#: utils/misc/guc_tables.c:4136 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:4146 +msgid "Fraction of pages in a relation vacuum can scan and fail to freeze before disabling eager scanning." +msgstr "" + +#: utils/misc/guc_tables.c:4147 +msgid "A value of 0.0 disables eager scanning and a value of 1.0 will eagerly scan up to 100 percent of the all-visible pages in the relation. If vacuum successfully freezes these pages, the cap is lower than 100 percent, because the goal is to amortize page freezing across multiple vacuums." +msgstr "" + +#: utils/misc/guc_tables.c:4165 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "" -#: utils/misc/guc_tables.c:3943 -msgid "This is used only if \"archive_library\" is not set." +#: utils/misc/guc_tables.c:4166 +msgid "An empty string means use \"archive_library\"." msgstr "" -#: utils/misc/guc_tables.c:3952 +#: utils/misc/guc_tables.c:4175 msgid "Sets the library that will be called to archive a WAL file." msgstr "" -#: utils/misc/guc_tables.c:3953 -msgid "An empty string indicates that \"archive_command\" should be used." -msgstr "" +#: utils/misc/guc_tables.c:4176 +msgid "An empty string means use \"archive_command\"." +msgstr "ცარიელი სტრიქონი ნიშნავს \"archive_command\"-ის გამოყენებას." -#: utils/misc/guc_tables.c:3962 +#: utils/misc/guc_tables.c:4185 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:4195 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:4205 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:4215 msgid "Specifies the timeline to recover into." msgstr "აღდგენისთვის დროის მითითება." -#: utils/misc/guc_tables.c:4002 +#: utils/misc/guc_tables.c:4225 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:4234 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "ტრანზაქციის ID, რომლამდეც აღდგენა მოხდება." -#: utils/misc/guc_tables.c:4020 +#: utils/misc/guc_tables.c:4243 msgid "Sets the time stamp up to which recovery will proceed." msgstr "" -#: utils/misc/guc_tables.c:4029 +#: utils/misc/guc_tables.c:4252 msgid "Sets the named restore point up to which recovery will proceed." msgstr "" -#: utils/misc/guc_tables.c:4038 +#: utils/misc/guc_tables.c:4261 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:4271 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:4282 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:4292 msgid "Sets the client's character set encoding." msgstr "კლიენტის სიმბოლოების კოდირების დაყენება." -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4303 msgid "Controls information prefixed to each log line." msgstr "ჟურნალის თითოეული ჩანაწერის პრეფიქსის კონტროლი." -#: utils/misc/guc_tables.c:4081 -msgid "If blank, no prefix is used." -msgstr "თუ ცარიელია, პრეფიქსი არ გამოიყენება." +#: utils/misc/guc_tables.c:4304 +msgid "An empty string means no prefix." +msgstr "" -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4313 msgid "Sets the time zone to use in log messages." msgstr "ჟურნალის შეტყობინებების დასამახსოვრებლად გამოყენებული დროის სარტყლის დაყენება." -#: utils/misc/guc_tables.c:4100 +#: utils/misc/guc_tables.c:4323 msgid "Sets the display format for date and time values." msgstr "თარიღისა და დროის მნიშვნელობების ფორმატის დაყენება." -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4324 msgid "Also controls interpretation of ambiguous date inputs." msgstr "" -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4335 msgid "Sets the default table access method for new tables." msgstr "ახალი ცხრილების ნაგულისხმევი წვდომის უფლებების მითითება." -#: utils/misc/guc_tables.c:4123 +#: utils/misc/guc_tables.c:4346 msgid "Sets the default tablespace to create tables and indexes in." msgstr "" -#: utils/misc/guc_tables.c:4124 -msgid "An empty string selects the database's default tablespace." -msgstr "ცარიელი სტრიქონი ბაზის ნაგულისხმევ ცხრილების სივრცეს აირჩევს." +#: utils/misc/guc_tables.c:4347 utils/misc/guc_tables.c:4358 +msgid "An empty string means use the database's default tablespace." +msgstr "ცარიელი სტრიქონი ბაზის ნაგულისხმევ ცხრილების სივრცეს ნიშნავს." -#: utils/misc/guc_tables.c:4134 +#: utils/misc/guc_tables.c:4357 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:4368 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:4370 +msgid "An empty string disables automatic self grants." +msgstr "" + +#: utils/misc/guc_tables.c:4380 msgid "Sets the path for dynamically loadable modules." msgstr "დინამიურად ჩატვირთული მოდულების ბილიკის დაყენება." -#: utils/misc/guc_tables.c:4158 +#: utils/misc/guc_tables.c:4381 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:4394 +msgid "Sets the path for extension control files." +msgstr "დააყენეთ ბილიკი გაფართოების კონტროლის ფაილებისთვის." + +#: utils/misc/guc_tables.c:4395 +msgid "The remaining extension script and secondary control files are then loaded from the same directory where the primary control file was found." +msgstr "" + +#: utils/misc/guc_tables.c:4406 msgid "Sets the location of the Kerberos server key file." msgstr "Kerberos-ის სერვერის გასაღების ფაილის მდებარეობის მითითება." -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4417 msgid "Sets the Bonjour service name." msgstr "Bonjour-ის სერვისის სახელის დაყენება." -#: utils/misc/guc_tables.c:4192 +#: utils/misc/guc_tables.c:4418 +msgid "An empty string means use the computer name." +msgstr "" + +#: utils/misc/guc_tables.c:4427 msgid "Sets the language in which messages are displayed." msgstr "შეტყობინებების საჩვენებელი ენის მითითება." -#: utils/misc/guc_tables.c:4202 +#: utils/misc/guc_tables.c:4428 utils/misc/guc_tables.c:4438 utils/misc/guc_tables.c:4448 utils/misc/guc_tables.c:4458 +msgid "An empty string means use the operating system setting." +msgstr "" + +#: utils/misc/guc_tables.c:4437 msgid "Sets the locale for formatting monetary amounts." msgstr "თანხის რიცხვების ფორმატირების სტანდარტის დაყენება." -#: utils/misc/guc_tables.c:4212 +#: utils/misc/guc_tables.c:4447 msgid "Sets the locale for formatting numbers." msgstr "რიცხვების ფორმატირების ენის დაყენება." -#: utils/misc/guc_tables.c:4222 +#: utils/misc/guc_tables.c:4457 msgid "Sets the locale for formatting date and time values." msgstr "თარიღისა და დროის ფორმატირების ენის დაყენება." -#: utils/misc/guc_tables.c:4232 +#: utils/misc/guc_tables.c:4467 msgid "Lists shared libraries to preload into each backend." msgstr "თითოეული უკანაბოლოსთვის გაშვებამდე ჩასატვირთი გაზიარებული ბიბლიოთეკების სია." -#: utils/misc/guc_tables.c:4243 +#: utils/misc/guc_tables.c:4478 msgid "Lists shared libraries to preload into server." msgstr "სერვერის გაშვებამდე ჩასატვირთი გაზიარებული ბიბლიოთეკების სია." -#: utils/misc/guc_tables.c:4254 +#: utils/misc/guc_tables.c:4489 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "თითოეული უკანაბოლოსთვის გაშვებამდე ჩასატვირთი არაპრივილეგირებული გაზიარებული ბიბლიოთეკების სია." -#: utils/misc/guc_tables.c:4265 +#: utils/misc/guc_tables.c:4500 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:4512 msgid "Shows the server (database) character set encoding." msgstr "სერვერის (ბაზის) სიმბოლოების კოდირების ჩვენება." -#: utils/misc/guc_tables.c:4289 +#: utils/misc/guc_tables.c:4524 msgid "Shows the server version." msgstr "სერვერის ვერსიის ჩვენება." -#: utils/misc/guc_tables.c:4301 +#: utils/misc/guc_tables.c:4536 msgid "Sets the current role." msgstr "მიმდინარე როლის დაყენება." -#: utils/misc/guc_tables.c:4313 +#: utils/misc/guc_tables.c:4548 msgid "Sets the session user name." msgstr "სესიის მომხმარებლი სახელის დაყენება." -#: utils/misc/guc_tables.c:4324 +#: utils/misc/guc_tables.c:4559 msgid "Sets the destination for server log output." msgstr "სერვერის ჟურნალის გამოტანის სამიზნის დაყენება." -#: utils/misc/guc_tables.c:4325 +#: utils/misc/guc_tables.c:4560 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:4571 msgid "Sets the destination directory for log files." msgstr "ჟურნალის ფაილების საქაღალდის დაყენება." -#: utils/misc/guc_tables.c:4337 +#: utils/misc/guc_tables.c:4572 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:4582 msgid "Sets the file name pattern for log files." msgstr "ჟურნალის ფაილების სახელის შაბლონის დაყენება." -#: utils/misc/guc_tables.c:4358 +#: utils/misc/guc_tables.c:4593 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:4604 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:4615 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "" -#: utils/misc/guc_tables.c:4390 +#: utils/misc/guc_tables.c:4625 msgid "Selects a file of time zone abbreviations." msgstr "დროის სარტყლების აბრევიატურების ფაილის მითითება." -#: utils/misc/guc_tables.c:4400 +#: utils/misc/guc_tables.c:4635 msgid "Sets the owning group of the Unix-domain socket." msgstr "Unix-დომენის სოკეტის მფლობლის ჯგუფის დაყენება." -#: utils/misc/guc_tables.c:4401 -msgid "The owning user of the socket is always the user that starts the server." -msgstr "სოკეტის მფლობელი მომხმარებელი ყოველთვის იგივე მომხმარებელია, ვინც სერვერი გაუშვა." +#: utils/misc/guc_tables.c:4636 +msgid "The owning user of the socket is always the user that starts the server. An empty string means use the user's default group." +msgstr "სოკეტის მფლობელი მომხმარებელი ყოველთვის იგივე მომხმარებელია, ვინც სერვერი გაუშვა. ცარიელი სტრიქონი მომხმარებლის ნაგულისხმევ ჯგუფს ნიშნავს." -#: utils/misc/guc_tables.c:4411 +#: utils/misc/guc_tables.c:4646 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "აყენებს საქაღალდეებს, სადაც Unix-ის სოკეტები შეიქმნება." -#: utils/misc/guc_tables.c:4422 +#: utils/misc/guc_tables.c:4657 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:4672 msgid "Sets the server's data directory." msgstr "სერვერის მონაცმების საქაღალდის დაყენება." -#: utils/misc/guc_tables.c:4448 +#: utils/misc/guc_tables.c:4683 msgid "Sets the server's main configuration file." msgstr "სერვერის კონფიგურაციის მთავარი ფაილის დაყენება." -#: utils/misc/guc_tables.c:4459 +#: utils/misc/guc_tables.c:4694 msgid "Sets the server's \"hba\" configuration file." msgstr "სერვერის hba კონფიგურაციის ფაილის დაყენება." -#: utils/misc/guc_tables.c:4470 +#: utils/misc/guc_tables.c:4705 msgid "Sets the server's \"ident\" configuration file." msgstr "სერვერის ident კონფიგურაციის ფაილის დაყენება." -#: utils/misc/guc_tables.c:4481 +#: utils/misc/guc_tables.c:4716 msgid "Writes the postmaster PID to the specified file." msgstr "Postmaster-ის PID-ის მითითებულ ფაილში ჩაწერა." -#: utils/misc/guc_tables.c:4492 +#: utils/misc/guc_tables.c:4727 msgid "Shows the name of the SSL library." msgstr "SSL ბიბლიოთეკის სახელის ჩვენება." -#: utils/misc/guc_tables.c:4507 +#: utils/misc/guc_tables.c:4742 msgid "Location of the SSL server certificate file." msgstr "SSL სერვერის სერტიფიკატის ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4517 +#: utils/misc/guc_tables.c:4752 msgid "Location of the SSL server private key file." msgstr "SSL სერვერის პირადი გასაღების ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4527 +#: utils/misc/guc_tables.c:4762 msgid "Location of the SSL certificate authority file." msgstr "SSL სერვერის CA ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4537 +#: utils/misc/guc_tables.c:4772 msgid "Location of the SSL certificate revocation list file." msgstr "SSL სერვერის გაუქმებული სერტიფიკატების სიის ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4547 +#: utils/misc/guc_tables.c:4782 msgid "Location of the SSL certificate revocation list directory." msgstr "SSL სერვერის გაუქმებული სერტიფიკატების სიის საქაღალდის მდებარეობა." -#: utils/misc/guc_tables.c:4557 +#: utils/misc/guc_tables.c:4792 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:4803 msgid "Sets default text search configuration." msgstr "ტექსტის ძებნის ნაგულისხმევი კონფიგურაციის დაყენება." -#: utils/misc/guc_tables.c:4578 -msgid "Sets the list of allowed SSL ciphers." -msgstr "ჩართული SSL შიფრაციების სიის დაყენება." +#: utils/misc/guc_tables.c:4813 +msgid "Sets the list of allowed TLSv1.3 cipher suites." +msgstr "აყენებს TLSv1.3-ის დაშვებულ შიფრების ნაკრებებს." -#: utils/misc/guc_tables.c:4593 -msgid "Sets the curve to use for ECDH." -msgstr "ECDH-სთვის გამოყენებული მრუდის დაყენება." +#: utils/misc/guc_tables.c:4814 +msgid "An empty string means use the default cipher suites." +msgstr "ცარიელი სტრიქონი ნაგულისხმევი შიფრების ნაკრების გამოყენებას ნიშნავს." + +#: utils/misc/guc_tables.c:4824 +msgid "Sets the list of allowed TLSv1.2 (and lower) ciphers." +msgstr "აყენებს TLSv1.2-ის (და უფრო ძველი) დაშვებულ შიფრების ნაკრებებს." + +#: utils/misc/guc_tables.c:4839 +msgid "Sets the group(s) to use for Diffie-Hellman key exchange." +msgstr "" + +#: utils/misc/guc_tables.c:4840 +msgid "Multiple groups can be specified using colon-separated list." +msgstr "" -#: utils/misc/guc_tables.c:4608 +#: utils/misc/guc_tables.c:4854 msgid "Location of the SSL DH parameters file." msgstr "SSH DH პარამეტრების ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4619 +#: utils/misc/guc_tables.c:4855 +msgid "An empty string means use compiled-in default parameters." +msgstr "ცარიელი სტრიქონი კომპილაციის დროს მითითებული ნაგულისხმევი პარამეტრების გამოყენებას ნიშნავს." + +#: utils/misc/guc_tables.c:4865 msgid "Command to obtain passphrases for SSL." msgstr "SSL-ის საკვანძო ფრაზების მისაღები ბრძანება." -#: utils/misc/guc_tables.c:4630 +#: utils/misc/guc_tables.c:4866 +msgid "An empty string means use the built-in prompting mechanism." +msgstr "" + +#: utils/misc/guc_tables.c:4876 msgid "Sets the application name to be reported in statistics and logs." msgstr "" -#: utils/misc/guc_tables.c:4641 +#: utils/misc/guc_tables.c:4887 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:4898 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:4899 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:4909 msgid "JIT provider to use." msgstr "JIT სერვისის მომწოდებელი." -#: utils/misc/guc_tables.c:4674 +#: utils/misc/guc_tables.c:4920 msgid "Log backtrace for errors in these functions." msgstr "მითითებულ ფუნქციებში შეცდომის შემთხვევაში სტეკის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:4685 +#: utils/misc/guc_tables.c:4931 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:4932 +msgid "An empty string disables direct I/O." +msgstr "ცარიელი სტრიქონი გამორთავს პირდაპირ I/O-ს." + +#: utils/misc/guc_tables.c:4942 +msgid "Lists streaming replication standby server replication slot names that logical WAL sender processes will wait for." +msgstr "" + +#: utils/misc/guc_tables.c:4944 +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:4956 +msgid "Prohibits access to non-system relations of specified kinds." msgstr "" -#: utils/misc/guc_tables.c:4719 +#: utils/misc/guc_tables.c:4967 +msgid "Lists libraries that may be called to validate OAuth v2 bearer tokens." +msgstr "" + +#: utils/misc/guc_tables.c:4978 +msgid "Logs specified aspects of connection establishment and setup." +msgstr "" + +#: utils/misc/guc_tables.c:4999 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "შეიძლება თუ არა ტექსტურ სტრიქონებში \"\\\" სიმბოლოს გამოყენება." -#: utils/misc/guc_tables.c:4729 +#: utils/misc/guc_tables.c:5009 msgid "Sets the output format for bytea." msgstr "\"bytea\"-ის გამოსატანი ფორმატის დაყენება." -#: utils/misc/guc_tables.c:4739 +#: utils/misc/guc_tables.c:5019 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:5020 utils/misc/guc_tables.c:5116 utils/misc/guc_tables.c:5127 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:5030 msgid "Enables in-core computation of query identifiers." msgstr "მოთხოვნის იდენტიფიკატორის ბირთვის-შიდა გამოთვლის ჩართვა." -#: utils/misc/guc_tables.c:4760 +#: utils/misc/guc_tables.c:5040 msgid "Enables the planner to use constraints to optimize queries." msgstr "მგეგმავისთვის შეზღუდვების ჩართვა, მოთხოვნების ოპტიმიზაციისთვის." -#: utils/misc/guc_tables.c:4761 +#: utils/misc/guc_tables.c:5041 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:5052 msgid "Sets the default compression method for compressible values." msgstr "შეკუმშვადი მნიშვნელობების ნაგულისხმევი შეკუმშვის მეთოდის დაყენება." -#: utils/misc/guc_tables.c:4783 +#: utils/misc/guc_tables.c:5063 msgid "Sets the transaction isolation level of each new transaction." msgstr "ახალი ტრანზაქციების იზოლაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4793 +#: utils/misc/guc_tables.c:5073 msgid "Sets the current transaction's isolation level." msgstr "მიმდინარე ტრანზაქციის იზოლაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4804 +#: utils/misc/guc_tables.c:5084 msgid "Sets the display format for interval values." msgstr "ინტერვალის მნიშვნელობების საჩვენებელი ფორმატის დაყენება." -#: utils/misc/guc_tables.c:4815 +#: utils/misc/guc_tables.c:5095 msgid "Log level for reporting invalid ICU locale strings." msgstr "ჟურნალის დონე არასწორი ICU ლოკალის სტრიქონების ანგარიშისთვის." -#: utils/misc/guc_tables.c:4825 +#: utils/misc/guc_tables.c:5105 msgid "Sets the verbosity of logged messages." msgstr "ჟურნალში ჩაწერილი შეტყობინებების დეტალურობის დაყენება." -#: utils/misc/guc_tables.c:4835 +#: utils/misc/guc_tables.c:5115 msgid "Sets the message levels that are logged." msgstr "ჟურნალში ჩასაწერი შეტყობინების დონეების დაყენება." -#: utils/misc/guc_tables.c:4846 +#: utils/misc/guc_tables.c:5126 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:5137 msgid "Sets the type of statements logged." msgstr "ჟურნალში ჩასაწერი ოპერატორის ტიპების დაყენება." -#: utils/misc/guc_tables.c:4867 +#: utils/misc/guc_tables.c:5147 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:5158 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "სესიის ქცევის დაყენება ტრიგერებისა და გადაწერის წესებისთვის." -#: utils/misc/guc_tables.c:4888 +#: utils/misc/guc_tables.c:5168 msgid "Sets the current transaction's synchronization level." msgstr "მიმდინარე ტრანზაქციის სინქრონიზაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4898 +#: utils/misc/guc_tables.c:5178 msgid "Allows archiving of WAL files using \"archive_command\"." msgstr "'WAL' ფაილების დაარქივების დაშვება 'archive_command'-ის გამოყენებით." -#: utils/misc/guc_tables.c:4908 +#: utils/misc/guc_tables.c:5188 msgid "Sets the action to perform upon reaching the recovery target." msgstr "" -#: utils/misc/guc_tables.c:4918 +#: utils/misc/guc_tables.c:5198 msgid "Collects function-level statistics on database activity." msgstr "აგროვებს ფუნქციის დონის სტატისტიკას ბაზის აქტივობების შესახებ." -#: utils/misc/guc_tables.c:4929 +#: utils/misc/guc_tables.c:5209 msgid "Sets the consistency of accesses to statistics data." msgstr "სტატისტიკის მონაცემებთან წვდომის მიმდევრობის დაყენება." -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:5219 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:5229 msgid "Sets the level of information written to the WAL." msgstr "WAL-ში ჩაწერილი ინფორმაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4959 +#: utils/misc/guc_tables.c:5239 msgid "Selects the dynamic shared memory implementation used." msgstr "გამოყენებული გაზიარებული მეხსიერების განხორციელების არჩევა." -#: utils/misc/guc_tables.c:4969 +#: utils/misc/guc_tables.c:5249 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:5259 +msgid "Selects the file copy method." +msgstr "" + +#: utils/misc/guc_tables.c:5269 msgid "Selects the method used for forcing WAL updates to disk." msgstr "WAL-ისთვის დისკზე განახლებების ნაძალადევად ჩაწერის მეთოდის დაყენება." -#: utils/misc/guc_tables.c:4989 +#: utils/misc/guc_tables.c:5279 msgid "Sets how binary values are to be encoded in XML." msgstr "XML-ში ბინარული მნიშვნელობების კოდირების ტიპის დაყენება." -#: utils/misc/guc_tables.c:4999 +#: utils/misc/guc_tables.c:5289 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:5300 msgid "Use of huge pages on Linux or Windows." msgstr "Linux-ზე და Windows-ზე უზარმაზარი გვერდების გამოყენება." -#: utils/misc/guc_tables.c:5020 +#: utils/misc/guc_tables.c:5310 msgid "Indicates the status of huge pages." -msgstr "" +msgstr "აჩვენებს უზარმაზარი გვერდების სტატუსს." -#: utils/misc/guc_tables.c:5031 +#: utils/misc/guc_tables.c:5321 msgid "Prefetch referenced blocks during recovery." msgstr "აღდგენისას მიბმული ბლოკების წინასწარ გამოთხოვა." -#: utils/misc/guc_tables.c:5032 +#: utils/misc/guc_tables.c:5322 msgid "Look ahead in the WAL to find references to uncached data." msgstr "" -#: utils/misc/guc_tables.c:5041 +#: utils/misc/guc_tables.c:5331 msgid "Forces the planner's use parallel query nodes." msgstr "დამგეგმავის მიერ პარალელური მოთხოვნის კვანძების ნაძალადევი გამოყენების ჩართვა." -#: utils/misc/guc_tables.c:5042 +#: utils/misc/guc_tables.c:5332 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:5344 msgid "Chooses the algorithm for encrypting passwords." msgstr "აირჩიეთ პაროლების დასაშიფრად გამოყენებული ალგორითმი." -#: utils/misc/guc_tables.c:5064 +#: utils/misc/guc_tables.c:5354 msgid "Controls the planner's selection of custom or generic plan." msgstr "" -#: utils/misc/guc_tables.c:5065 +#: utils/misc/guc_tables.c:5355 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:5367 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "SSL/TLS-ის პროტოკოლის მინიმალური ვერსიის დაყენება." -#: utils/misc/guc_tables.c:5089 +#: utils/misc/guc_tables.c:5379 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "SSL/TLS-ის პროტოკოლის მაქსიმალური ვერსიის დაყენება." -#: utils/misc/guc_tables.c:5101 +#: utils/misc/guc_tables.c:5391 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "" -#: utils/misc/guc_tables.c:5110 +#: utils/misc/guc_tables.c:5400 msgid "Forces immediate streaming or serialization of changes in large transactions." msgstr "" -#: utils/misc/guc_tables.c:5111 +#: utils/misc/guc_tables.c:5401 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 "" +#: utils/misc/guc_tables.c:5413 +msgid "Selects the method for executing asynchronous I/O." +msgstr "აირჩიეთ მეთოდი ასინქრონული შეყვანა/გამოყვანის შესასრულებლად." + #: utils/misc/help_config.c:129 #, c-format msgid "internal error: unrecognized run-time parameter type\n" @@ -30019,6 +31360,26 @@ msgstr "" msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "" +#: utils/misc/stack_depth.c:101 +#, c-format +msgid "stack depth limit exceeded" +msgstr "გადაცილებულია სტეკის სიღრმის ლიმიტი" + +#: utils/misc/stack_depth.c:102 +#, c-format +msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." +msgstr "" + +#: utils/misc/stack_depth.c:149 +#, c-format +msgid "\"max_stack_depth\" must not exceed %zdkB." +msgstr "\"max_stack_depth\" %zdკბ-ს არ უნდა სცდებოდეს." + +#: utils/misc/stack_depth.c:151 +#, c-format +msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." +msgstr "" + #: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" @@ -30034,57 +31395,57 @@ msgstr "" msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "" -#: utils/misc/tzparser.c:112 +#: utils/misc/tzparser.c:113 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "" -#: utils/misc/tzparser.c:121 +#: utils/misc/tzparser.c:122 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "" -#: utils/misc/tzparser.c:133 +#: utils/misc/tzparser.c:134 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "" -#: utils/misc/tzparser.c:169 +#: utils/misc/tzparser.c:170 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "დროის სარტყელის ფაილის (\"%s\") არასწორი სინტაქსი ხაზზე %d" -#: utils/misc/tzparser.c:237 +#: utils/misc/tzparser.c:238 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "დროის სარტყელის აბრევიატურა ერთზე მეტჯერაა აღწერილი: %s" -#: utils/misc/tzparser.c:239 +#: utils/misc/tzparser.c:240 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "" -#: utils/misc/tzparser.c:301 +#: utils/misc/tzparser.c:302 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "დროის სარტყელის ფაილის არასწორი ფაილი\"%s\"" -#: utils/misc/tzparser.c:314 +#: utils/misc/tzparser.c:315 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "დროის სარტყლის ფაილის რეკურსიის ლიმიტი გადაცილებულია ფაილში \"%s\"" -#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 +#: utils/misc/tzparser.c:354 utils/misc/tzparser.c:367 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "დროის სარტყელის ფაილის წაკითხვის შეცდომა \"%s\": %m" -#: utils/misc/tzparser.c:377 +#: utils/misc/tzparser.c:378 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "დროის სარტყელის ფაილის (\"%s\") ძალიან გრძელი ხაზი (\"%d\")" -#: utils/misc/tzparser.c:401 +#: utils/misc/tzparser.c:403 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "" @@ -30099,12 +31460,12 @@ msgstr "შეცდომა მეხსიერების კონტე msgid "could not attach to dynamic shared area" msgstr "დინამიური გაზიარებული მეხსიერების მიმაგრების შეცდომა" -#: utils/mmgr/mcxt.c:1155 +#: utils/mmgr/mcxt.c:1231 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "%zu ზომის მეხსიერების კონტექსტიდან \"%s\" გამოთხოვა ჩავარდა." -#: utils/mmgr/mcxt.c:1299 +#: utils/mmgr/mcxt.c:1391 #, c-format msgid "logging memory contexts of PID %d" msgstr "პროცესის, PID-ით %d მეხსიერების კონტექსტები ჟურნალში ჩაიწერება" @@ -30119,35 +31480,35 @@ msgstr "კურსორი \"%s\" უკვე არსებობს" msgid "closing existing cursor \"%s\"" msgstr "არსებული კურსორის დახურვა \"%s\"" -#: utils/mmgr/portalmem.c:401 +#: utils/mmgr/portalmem.c:403 #, c-format msgid "portal \"%s\" cannot be run" msgstr "პორტალის \"%s\" გაშვება შეუძლებელია" -#: utils/mmgr/portalmem.c:479 +#: utils/mmgr/portalmem.c:481 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "მიჭიკარტებული პორტალის წაშლა შეუძლებელია:\"%s\"" -#: utils/mmgr/portalmem.c:487 +#: utils/mmgr/portalmem.c:489 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "აქტიური პორტალის წაშლა სეუძლებელია: %s" -#: utils/mmgr/portalmem.c:738 +#: utils/mmgr/portalmem.c:740 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "" -#: utils/mmgr/portalmem.c:1229 +#: utils/mmgr/portalmem.c:1234 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %lld of temporary file" -msgstr "დროებითი ფაილის %lld-ე ბლოკზე გადახვევა შეუძლებელია" +msgid "could not seek to block % of temporary file" +msgstr "დროებითი ფაილის %-ე ბლოკზე გადახვევა შეუძლებელია" #: utils/sort/sharedtuplestore.c:466 #, c-format @@ -30159,77 +31520,77 @@ msgstr "" msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "" -#: utils/sort/tuplesort.c:2372 +#: utils/sort/tuplesort.c:2340 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "" -#: utils/sort/tuplesortvariants.c:1552 +#: utils/sort/tuplesortvariants.c:1671 #, c-format msgid "could not create unique index \"%s\"" msgstr "უნიკალური ინდექსის შექმნა შეუძლებელია: \"%s\"" -#: utils/sort/tuplesortvariants.c:1554 +#: utils/sort/tuplesortvariants.c:1673 #, c-format msgid "Key %s is duplicated." msgstr "გასაღები %s დუბლირებულია." -#: utils/sort/tuplesortvariants.c:1555 +#: utils/sort/tuplesortvariants.c:1674 #, c-format msgid "Duplicate keys exist." msgstr "არსებობს დუბლიკატი გასაღებები." -#: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 utils/sort/tuplestore.c:1330 +#: utils/sort/tuplestore.c:552 utils/sort/tuplestore.c:562 utils/sort/tuplestore.c:921 utils/sort/tuplestore.c:1025 utils/sort/tuplestore.c:1089 utils/sort/tuplestore.c:1106 utils/sort/tuplestore.c:1308 utils/sort/tuplestore.c:1373 utils/sort/tuplestore.c:1382 #, c-format msgid "could not seek in tuplestore temporary file" msgstr "კორტეჟების საცავი დროებითი ფაილის გადახვევა შეუძლებელია" -#: utils/time/snapmgr.c:536 +#: utils/time/snapmgr.c:557 #, c-format msgid "The source transaction is not running anymore." msgstr "საწყისი ტრანზაქცია გაშვებული აღარაა." -#: utils/time/snapmgr.c:1136 +#: utils/time/snapmgr.c:1143 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "ქვეტრანზაქციიდან სწრაფი ასლის გამოტანა შეუძლებელია" -#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 +#: utils/time/snapmgr.c:1303 utils/time/snapmgr.c:1308 utils/time/snapmgr.c:1313 utils/time/snapmgr.c:1328 utils/time/snapmgr.c:1333 utils/time/snapmgr.c:1338 utils/time/snapmgr.c:1353 utils/time/snapmgr.c:1358 utils/time/snapmgr.c:1363 utils/time/snapmgr.c:1477 utils/time/snapmgr.c:1493 utils/time/snapmgr.c:1518 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "სწრაფი ასლის არასწორი მონაცემები ფაილში \"%s\"" -#: utils/time/snapmgr.c:1393 +#: utils/time/snapmgr.c:1400 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT ყველა მოთხოვნაზე ადრე უნდა გამოიძახოთ" -#: utils/time/snapmgr.c:1402 +#: utils/time/snapmgr.c:1409 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "" -#: utils/time/snapmgr.c:1411 +#: utils/time/snapmgr.c:1418 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "სწრაფი ასლის არასწორი იდენტიფიკატორი: \"%s\"" -#: utils/time/snapmgr.c:1426 +#: utils/time/snapmgr.c:1433 #, c-format msgid "snapshot \"%s\" does not exist" msgstr "სწრაფი ასლი \"%s\" არ არსებობს" -#: utils/time/snapmgr.c:1524 +#: utils/time/snapmgr.c:1531 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "" -#: utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1535 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "" -#: utils/time/snapmgr.c:1543 +#: utils/time/snapmgr.c:1550 #, c-format msgid "cannot import a snapshot from a different database" msgstr "სხვა ბაზიდან სწრაფი ასლის შემოტანა შეუძლებელია" @@ -30238,13 +31599,114 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid " GSS (authenticated=%s, encrypted=%s)" #~ msgstr " GSS (ავთენტიფიცირებული=%s, დაშიფრული=%s)" +#, c-format +#~ msgid "\"%s\" is not a partition" +#~ msgstr "\"%s\" დანაყოფი არაა" + +#, c-format +#~ msgid "\"%s\" must be set to 0 on platforms that lack support for issuing read-ahead advice." +#~ msgstr "\"%s\" უნდა იყოს 0 პლატფორმებზე, რომლებსაც წინასწარ-წაკითხვის მითითების მხარდაჭერა არ გააჩნიათ." + +#, c-format +#~ msgid "\"RN\" not supported for input" +#~ msgstr "\"RN\" შეყვანისთვის მხარდაჭერილი არაა" + +#, c-format +#~ msgid "\"debug_io_direct\" is not supported for data because BLCKSZ is too small" +#~ msgstr "\"debug_io_direct\" მონაცემებისთვის მხარდაჭერილი არაა, რადგან BLCKSZ ძალიან პატარაა" + +#, c-format +#~ msgid "\"debug_io_direct\" is not supported on this platform." +#~ msgstr "\"debug_io_direct\" ამ პლატფორმაზე მხარდაჭერილი არაა." + +#, c-format +#~ msgid "\"maintenance_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." +#~ msgstr "პლატფორმებზე, რომლებზეც posix_fadvise() ხელმისაწვდომი არაა, \"maintenance_io_concurrency\"-ის მნიშვნელობა 0-ის ტოლი უნდა ყოს." + +#, c-format +#~ msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" +#~ msgstr "\"max_wal_size\"-ი \"wal_segment_size\"-ზე, მინიმუმ, ორჯერ მეტი უნდა იყოს" + +#, c-format +#~ msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" +#~ msgstr "\"min_wal_size\"-ი \"wal_segment_size\"-ზე მინიმუმ ორჯერ მეტი უნდა იყოს" + +#, c-format +#~ msgid "\"synchronous_standby_names\" parser failed" +#~ msgstr "\"synchronous_standby_names\"-ის დამმუშავებლის შეცდომა" + +#, c-format +#~ msgid "%s cannot be executed within a pipeline" +#~ msgstr "%s ფუნქციიდან ვერ გაეშვება" + +#, c-format +#~ msgid "%s with OID %u does not exist" +#~ msgstr "%s OID-ით %u არ არსებობს" + +#~ msgid "-1 indicates that the value could not be determined." +#~ msgstr "-1 ნიშნავს, რომ მნიშვნელობა ვერ განისაზღვრა." + #, c-format #~ msgid "-X requires a power of two value between 1 MB and 1 GB" #~ msgstr "-X მოითხოვს მნიშვნელობას, რომელიც ორის ხარისხია და არის 1 მბ-სა და 1გბ-ს შორის" +#~ msgid "0 turns this feature off." +#~ msgstr "0 გამორთავს ამ ფუნქციას." + #~ msgid "A value of -1 disables this feature." #~ msgstr "მნიშვნელობა -1 გამორთავს ამ ფუნქციას." +#~ msgid "A value of 0 turns off the timeout." +#~ msgstr "0 მოლოდინის ვადას გამორთავს." + +#, 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,12 +31739,40 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ 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 "აკონტროლებს, როდის მოხდება თითოეული ცვლილების რეპლიკაცია ან გადატარება." #, c-format -#~ msgid "Could not translate strategy number %d for operator class \"%s\" for access method \"%s\"." -#~ msgstr "ვერ ვთარგმნე სტრატეგიის ნომერი %d ოპერატორის კლასისთვის \"%s\" წვდომის მეთოდისთვის \"%s\"." +#~ msgid "Could not open extension control file \"%s\": %m." +#~ msgstr "გაფართოების კონტროლის ფაილის (\"%s\") გახსნის შეცდომა: %m." + +#, c-format +#~ msgid "ECDH: could not create key" +#~ msgstr "ECDH: გასაღების შექნის შეცდომა" + +#, c-format +#~ msgid "ECDH: unrecognized curve name: %s" +#~ msgstr "ECDH: მრუდის უცნობი სახელი: %s" + +#, c-format +#~ msgid "EXPLAIN option SERIALIZE requires ANALYZE" +#~ msgstr "EXPLAIN-ის პარამეტრს SERIALIZE 'ANALYZE' სჭირდება" + +#, c-format +#~ msgid "EXPLAIN option TIMING requires ANALYZE" +#~ msgstr "EXPLAIN -ის პარამეტრ TIMING-ს ANALYZE სჭირდება" #~ msgid "Enables logging of recovery-related debugging information." #~ msgstr "აღდგენასთან კავშირში მყოფი გამართვის ინფორმაციის ჟურნალში ჩაწერის ჩართვა." @@ -30294,6 +31784,14 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "Existing constraint \"%s\" is marked NO INHERIT." #~ 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." @@ -30306,6 +31804,9 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "Foreign tables cannot have TRUNCATE triggers." #~ msgstr "გარე ცხრილებს TRUNCATE ტრიგერები ვერ ექნებათ." +#~ msgid "If blank, no prefix is used." +#~ msgstr "თუ ცარიელია, პრეფიქსი არ გამოიყენება." + #~ msgid "Incremental parser requires incremental lexer" #~ msgstr "ინკრემენტულ დამმუშავებელს ინკრემენტული lexer სჭირდება" @@ -30320,9 +31821,16 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "JSON_TABLE column names must be distinct from one another" #~ msgstr "JSON_TABLE-ის სვეტის სახელები ერთმანეთისგან უნდა განსხვავდებოდნენ" +#, c-format +#~ msgid "LIKE is not supported for creating foreign tables" +#~ msgstr "გარე ცხრილების შექმნისთვის LIKE მხარდაჭერილი არაა" + #~ msgid "Log backtrace for any error with error code XX000 (internal error)." #~ msgstr "ნებისმიერი შეცდომის უკუტრეისის ჩაწერა ჟურნალში შეცდომის კოდით XX000 (შიდა შეცდომა)." +#~ msgid "Logs each successful connection." +#~ msgstr "ყოველი წარმატებული შესვლის ჟურნალში ჩაწერა." + #, c-format #~ msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" #~ msgstr "MD5 ავთენტიკაცია მაშინ, როცა \"db_user_namespace\" ჩართულია, მხარდაჭერილი არაა" @@ -30335,21 +31843,59 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "MERGE not supported in WITH query" #~ 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 "ობიექტის გასაღებები ტექსტი უნდა იყოს." #, c-format -#~ msgid "Only range and multirange are supported." -#~ msgstr "მხარდაჭერილია, მხოლოდ, შუალედი და მრავალი შუალედი." +#~ msgid "Please report this to <%s>." +#~ msgstr "გთხოვთ, შეატყობინოთ <%s>." + +#, c-format +#~ msgid "RECHECK is no longer required" +#~ msgstr "RECHECK საჭირო აღარაა" #~ msgid "Recursive descent parser cannot use incremental lexer" #~ msgstr "რეკურსიულ დაღმავალ დამმუშავებელს ინკრემენტული lexer-ის გამოყენება არ შეუძლია" +#~ msgid "Resource Usage / Asynchronous Behavior" +#~ msgstr "რესურსების გამოყენება / ასინქრონული ქცევა" + #, c-format #~ msgid "SQL/JSON item cannot be cast to target type" #~ msgstr "SQL/JSON ჩანაწერი მითითებულ ტიპში ვერ გადავა" +#, c-format +#~ msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." +#~ msgstr "სერვერის FLOAT8PASSBYVAL = %s, ბიბლიოთეკას კი %s." + +#, c-format +#~ msgid "Server has FUNC_MAX_ARGS = %d, library has %d." +#~ msgstr "სერვერის FUNC_MAX_ARGS = %d, ბიბლიოთეკას კი %d." + +#, c-format +#~ msgid "Server has INDEX_MAX_KEYS = %d, library has %d." +#~ msgstr "სერვერის INDEX_MAX_KEYS = %d, ბიბლიოთეკას კი %d." + +#~ msgid "Sets the curve to use for ECDH." +#~ msgstr "ECDH-სთვის გამოყენებული მრუდის დაყენება." + +#, c-format +#~ msgid "ShortWord should be >= 0" +#~ msgstr "ShortWord >= 0 უნდა იყოს" + #~ msgid "Shows the character classification and case conversion locale." #~ msgstr "სიმბოლოების ზომის გადაყვანისა და სიმბოლოების კლასიფიკაციის ენის ჩვენება." @@ -30363,17 +31909,53 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgstr[1] "გამოწერილი პუბლიკაცია %s სხვა პუბლიკაციებს იწერს." #, c-format -#~ msgid "The column has an inherited not-null constraint." -#~ msgstr "სვეტს მემკვიდრეობით მიღებული არანულოვანი შეზღუდვა გააჩნია." +#~ 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-ით." + +#, 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-ით." + +#, c-format +#~ msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." +#~ msgstr "მონაცემთა ბაზის კლასტერის ინიციალიზაცია მოხდა LOBLKSIZE %d -ით, მაგრამ სერვერი აგებულია LOBLKSIZE %d-ით." + +#, c-format +#~ msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." +#~ msgstr "მონაცემთა ბაზის კლასტერის ინიციალიზაცია მოხდა MAXALIGN %d -ით, მაგრამ სერვერი აგებულია MAXALIGN %d-ით." + +#, c-format +#~ msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." +#~ msgstr "მონაცემთა ბაზის კლასტერის ინიციალიზაცია მოხდა NAMEDATALEN %d -ით, მაგრამ სერვერი აგებულია NAMEDATALEN %d-ით." + +#, 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-ით." + +#, 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-ით." + +#, 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-ით." + +#, c-format +#~ msgid "This feature is not yet supported on partitioned tables." +#~ msgstr "ეს ოპერაცია დაყოფილი ცხრილებისთვის ჯერჯერობით მხარდაჭერილი არაა." #, c-format -#~ msgid "There is no suitable operator in operator family \"%s\" for access method \"%s\"." -#~ msgstr "ვერ ვიპოვე შესაბამისი ოპერატორი ოპერატორების ოჯახში \"%s\" წვდომის მეთოდისთვის \"%s\"." +#~ msgid "This slot is being synced from the primary server." +#~ msgstr "მიმდინარეობს ამ სლოტის სინქრონიზაცია ძირითადი სერვერიდან." #, c-format #~ msgid "Unmatched \"%c\" character." #~ msgstr "სიმბოლო \"%c\" არ ემთხვევა." +#, c-format +#~ msgid "Update your data type." +#~ msgstr "განაახლეთ თქვენი მონაცემთა ტიპი." + #, c-format #~ msgid "Use ALTER DATABASE ... REFRESH COLLATION VERSION instead." #~ msgstr "სანაცვლოდ გამოიყენეთ ALTER DATABASE ... REFRESH COLLATION VERSION." @@ -30408,6 +31990,12 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "Waiting for LSN can only be executed during recovery." #~ msgstr "LSN-ის მოლოდინი, მხოლოდ, აღდგენისას შეიძლება, შესრულდეს." +#~ msgid "Zero prints all actions. -1 turns autovacuum logging off." +#~ msgstr "0-ს ყველა ქმედება გამოაქვს. -1 გამორთავს ავტომომტვერსასრუტებას." + +#~ msgid "Zero prints all queries. -1 turns this feature off." +#~ msgstr "0-ს ყველა მოთხოვნა გამოაქვს, -1 გამორთავს ამ ფუნქციას." + #, c-format #~ msgid "argument %d cannot be null" #~ msgstr "არგუმენტი %d ნულოვანი ვერ იქნება" @@ -30423,6 +32011,10 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "bogus input" #~ 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\" რომელსაც მემკვიდრეობითი შვილები გააჩნია" @@ -30431,10 +32023,6 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "cannot change NO INHERIT status of NOT NULL constraint \"%s\" in relation \"%s\"" #~ msgstr "ურთიერთობაზე \"%2$s\" NOT NULL შეზღუდვის \"%1$s\" NO INHERIT სტატუსს ვერ შეცვლით" -#, c-format -#~ msgid "cannot change NO INHERIT status of NOT NULL constraint \"%s\" on relation \"%s\"" -#~ msgstr "ურთიერთობაზე \"%2$s\" NOT NULL შეზღუდვის \"%1$s\" NO INHERIT სტატუსს ვერ შეცვლით" - #, c-format #~ msgid "cannot change access method of a partitioned table" #~ msgstr "დაყოფილი ცხრილის წვდომის მეთოდის შეცვლა შეუძლებელია" @@ -30443,6 +32031,14 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "cannot commit subtransactions during a parallel operation" #~ 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\") ექსკლუზიური შეზღუდვების შექმნა შეუძლებელია" @@ -30451,6 +32047,10 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "cannot create restricted tokens on this platform: error code %lu" #~ msgstr "ამ პლატფორმაზე შეზღუდული კოდების შექმნა შეუძლებელია: შეცდომის კოდი %lu" +#, c-format +#~ msgid "cannot match partition key to an index using access method \"%s\"" +#~ msgstr "წვდომის მეთოდით \"%s\" დანაყოფის გასაღების ინდექსთან დამთხვევა შეუძლებელია" + #, c-format #~ msgid "cannot move table \"%s\" to schema \"%s\"" #~ msgstr "ცხრილის (%s) სქემაში (%s) გადატანა შეუძლებელია" @@ -30459,6 +32059,22 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" #~ msgstr "არასწორი ინდექსის \"%s.%s\" პარალელური რეინდექსი შეუძლებელია. გამოტოვება" +#, c-format +#~ msgid "cannot remove constraint from only the partitioned table when partitions exist" +#~ msgstr "შეზღუდვის წაშლა მხოლოდ დაყოფილი ცხრილიდან მაშინ, როცა დანაყოფები არსებობს, შეუძლებელია" + +#, 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 "პარალელური ოპერაციის დროს ქვეტრანსაქციების დაწყება შეუძლებელია" @@ -30467,10 +32083,26 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "cannot subtract infinite timestamps" #~ msgstr "უსასრულო დროის შტამპების გამოკლება შეუძლებელია" +#, c-format +#~ msgid "cannot use RETURNING type %s in %s" +#~ msgstr "'RETURNING'-ის ტიპს '%s' %s-ში ვერ გამოიყენებთ" + +#, c-format +#~ msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" +#~ msgstr "ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, ან ldapurl-ის ldapprefix-სთან ერთად გამოყენება შეუძლებელია" + +#, 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 ამ პლატფორმაზე მხარდაჭერილი არაა" +#, c-format +#~ msgid "column \"%s\" of relation \"%s\" is not a stored generated column" +#~ msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" დამახსოვრებული გენერირებული სვეტი არაა" + #, c-format #~ msgid "conversion with OID %u does not exist" #~ msgstr "გადაყვანა OID-ით %u არ არსებობს" @@ -30523,22 +32155,6 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "could not form array type name for type \"%s\"" #~ msgstr "ტიპისთვის (%s) მასივის ტიპის სახელის ფორმირება შეუძლებელია" -#, c-format -#~ msgid "could not identify a contained-by operator for type %s" -#~ msgstr "ტიპისთვის \"%s\" ოპერატორი constained-by ვერ ვიპოვე" - -#, c-format -#~ msgid "could not identify an equality operator for foreign key" -#~ msgstr "გარე გასაღებისთვის ტოლობის ოპერატორი ვერ ვიპოვე" - -#, c-format -#~ msgid "could not identify an overlaps operator for foreign key" -#~ msgstr "ვერ აღმოვაჩინე გადაფარვების ოპერატორი გარე გასაღებისთვის" - -#, c-format -#~ msgid "could not identify an overlaps operator for type %s" -#~ msgstr "ვერ აღმოვაჩინე გადაფარვების ოპერატორი ტიპისთვის %s" - #, c-format #~ msgid "could not identify current directory: %m" #~ msgstr "მიმდინარე საქაღალდის იდენტიფიკაციის პრობლემა: %m" @@ -30551,6 +32167,10 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "could not load pg_hba.conf" #~ msgstr "pg_hba.conf -ის ჩატვირთვის სეცდომა" +#, c-format +#~ msgid "could not look up local user ID %d: %s" +#~ msgstr "ლოკალური მომხმარებლის ID-ის (%d) ამოხსნა შეუძლებელია: %s" + #, c-format #~ msgid "could not read from streaming transaction's changes file \"%s\": read only %zu of %zu bytes" #~ msgstr "შეკუმშული ფაილის (\"%s\") წაკითხვის შეცდომა: წაკითხულია %zu %zu-დან" @@ -30564,8 +32184,8 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgstr "ფაილის წაშლის შეცდომა \"%s\": %s\n" #, c-format -#~ msgid "could not remove file or directory \"%s\": %m" -#~ msgstr "ფაილის ან საქაღალდე „%s“ ვერ წაიშალა: %m" +#~ msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" +#~ msgstr "სტატისტიკის დროებითი ფაილის \"%s\"-დან \"%s\" -მდე სახელის გადარქმევა შეუძლებელია: %m" #, c-format #~ msgid "could not set compression flag for %s: %s" @@ -30575,6 +32195,10 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "could not stat promote trigger file \"%s\": %m" #~ 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" @@ -30603,6 +32227,10 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "duplicate JSON object key" #~ msgstr "დუბლირებული JSON ობიექტის გასაღები" +#, c-format +#~ msgid "end-of-copy marker corrupt" +#~ msgstr "კოპირების-დასასრულის სანიშნი დაზიანებულია" + #, c-format #~ msgid "extension with OID %u does not exist" #~ msgstr "გაფართოება OID-ით %u არ არსებობს" @@ -30611,10 +32239,18 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "gtsvector_in not implemented" #~ msgstr "gtsvector_in განხორციელებული არაა" +#, c-format +#~ msgid "index %lld out of valid range, 0..%lld" +#~ msgstr "ინდექსი %lld დასაშვებ დიაპაზონს (0..%lld) გარეთაა" + #, c-format #~ msgid "int2vector has too many elements" #~ msgstr "int2vector -ს მეტისმეტად ბევრი ელემენტი აქვს" +#, c-format +#~ msgid "interval out of range." +#~ msgstr "ინტერვალი დაშვებული შუალედის გარეთაა." + #, c-format #~ msgid "invalid JSON_TABLE expression" #~ msgstr "\"JSON_TABLE\"-ის არასწორი გამოსახულება" @@ -30623,6 +32259,14 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "invalid JSON_TABLE plan" #~ 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 ფაილში არსებული საკონტროლო წერტილი არასწორია" @@ -30635,10 +32279,6 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "invalid parameter name \"%s\"" #~ msgstr "პარამეტრის არასწორი სახელი \"%s\"" -#, c-format -#~ msgid "invalid primary key definition" -#~ msgstr "არასწორი ძირითადი გასაღების აღწერა" - #, c-format #~ msgid "invalid record offset at %X/%X" #~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X" @@ -30668,10 +32308,29 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "logical replication table synchronization worker" #~ 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 ალამი არ არსებობს" +#, c-format +#~ msgid "multiple limit options not allowed" +#~ msgstr "ლიმიტის პარამეტრების მითითება მხოლოდ ერთხელ შეგიძლიათ" + #, c-format #~ msgid "must be a superuser to terminate superuser process" #~ msgstr "ზემომხმარებლის პროცესის დასასრულებლად ზემომხმარებელი უნდა ბრძანდებოდეთ" @@ -30724,6 +32383,22 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "must have privileges of pg_create_subscription to create subscriptions" #~ 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\" ჩანაწერების გარეშე" @@ -30733,8 +32408,8 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgstr "არანულოვანი შეზღუდვა სვეტზე \"%s\" შვილ ცხრილებშიც უნდა წაიშალოს" #, c-format -#~ msgid "not-null constraints on partitioned tables cannot be NO INHERIT" -#~ msgstr "არანულოვანი შეზღუდვები დაყოფილ ცხრილზე NO INHERIT ვერ იქნება" +#~ msgid "not-null constraints are not supported on virtual generated columns" +#~ msgstr "ვირტუალურ დაგენერირებულ სვეტებზე არანულოვანი შეზღუდვები მხარდაჭერილი არაა" #, c-format #~ msgid "oidvector has too many elements" @@ -30752,6 +32427,16 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "operator with OID %u does not exist" #~ msgstr "ოპერატორი OID-ით %u არ არსებობს" +#, c-format +#~ msgid "" +#~ "out of memory\n" +#~ "\n" +#~ "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +#~ msgstr "" +#~ "არასაკმარისი მეხსიერება\n" +#~ "\n" +#~ "შეუძლებელია სტრიქონის ბუფერის (%d ბაიტი) გაფართოება %d ბაიტით.\n" + #, c-format #~ msgid "out of memory while trying to decode a record of length %u" #~ msgstr "%u სიგრძის მქონე ჩანაწერის დეკოდირებისთვის მეხსიერება საკმარისი არაა" @@ -30764,14 +32449,37 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "parameter \"lc_ctype\" must be specified" #~ 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 ძალიან გრძელია" +#~ msgid "server process" +#~ msgstr "სერვერის პროცესი" + #, c-format #~ msgid "snapshot too old" #~ msgstr "სწრაფი ასლი ძალიან ძველია" @@ -30816,6 +32524,10 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgid "timestamp_tz format is not recognized: \"%s\"" #~ 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 "დინამიური გაზიარებული მეხსიერების სეგმენტის მიბმის შეცდომა" @@ -30840,5 +32552,13 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის #~ msgstr "სტატისტიკის მუდმივი ფაილი მოხსნილია: %s" #, c-format -#~ msgid "unsupported %s action for foreign key constraint using PERIOD" -#~ msgstr "მხარდაუჭერელი %s ქმედება გარე გასაღების შეზღუდვისთვის, რომელიც PERIOD-ს იყენებს" +#~ 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\" არ უდრის დაყოფილი დანაყოფის ზედა საზღვარს" + +#, c-format +#~ msgid "wal_level must be set to \"replica\" or \"logical\" at server start." +#~ msgstr "სერვისის გაშვებისას wal_level -ის მნიშვნელობა უნდა იყოს \"replica\" ან \"logical\"." diff --git a/src/backend/po/ko.po b/src/backend/po/ko.po index b367ff4dcdeab..d71eed4b6c0eb 100644 --- a/src/backend/po/ko.po +++ b/src/backend/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: postgres (PostgreSQL) 16\n" +"Project-Id-Version: postgres (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:40+0000\n" -"PO-Revision-Date: 2023-09-08 16:12+0900\n" +"POT-Creation-Date: 2025-01-17 04:41+0000\n" +"PO-Revision-Date: 2025-01-20 16:44+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,6 +15,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +#: ../common/binaryheap.c:121 ../common/binaryheap.c:159 +#, c-format +msgid "out of binary heap slots" +msgstr "바이너리 힙 슬롯수 초과" + #: ../common/compression.c:132 ../common/compression.c:141 #: ../common/compression.c:150 #, c-format @@ -75,64 +80,66 @@ msgstr "\"%s\" 압축 알고리즘은 long-distance mode를 지원하지 않음" msgid "not recorded" msgstr "기록되어 있지 않음" -#: ../common/controldata_utils.c:69 ../common/controldata_utils.c:73 -#: commands/copyfrom.c:1670 commands/extension.c:3480 utils/adt/genfile.c:123 +#: ../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:84 ../common/controldata_utils.c:86 +#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1347 access/transam/xlog.c:3193 -#: access/transam/xlog.c:3996 access/transam/xlogrecovery.c:1199 -#: access/transam/xlogrecovery.c:1291 access/transam/xlogrecovery.c:1328 -#: access/transam/xlogrecovery.c:1388 backup/basebackup.c:1842 -#: commands/extension.c:3490 libpq/hba.c:769 replication/logical/origin.c:745 -#: replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5050 -#: replication/logical/snapbuild.c:2031 replication/slot.c:1953 -#: replication/slot.c:1994 replication/walsender.c:643 +#: access/transam/twophase.c:1369 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:984 utils/cache/relmapper.c:827 +#: 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:92 ../common/controldata_utils.c:95 -#: access/transam/xlog.c:3198 access/transam/xlog.c:4001 -#: backup/basebackup.c:1846 replication/logical/origin.c:750 -#: replication/logical/origin.c:789 replication/logical/snapbuild.c:2036 -#: replication/slot.c:1957 replication/slot.c:1998 replication/walsender.c:648 -#: utils/cache/relmapper.c:831 +#: ../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:104 ../common/controldata_utils.c:108 -#: ../common/controldata_utils.c:233 ../common/controldata_utils.c:236 -#: access/heap/rewriteheap.c:1175 access/heap/rewriteheap.c:1280 +#: ../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:1359 -#: access/transam/twophase.c:1771 access/transam/xlog.c:3039 -#: access/transam/xlog.c:3233 access/transam/xlog.c:3238 -#: access/transam/xlog.c:3374 access/transam/xlog.c:3966 -#: access/transam/xlog.c:4885 commands/copyfrom.c:1730 commands/copyto.c:332 +#: access/transam/timeline.c:512 access/transam/twophase.c:1381 +#: access/transam/twophase.c:1800 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:5102 -#: replication/logical/snapbuild.c:1798 replication/logical/snapbuild.c:1922 -#: replication/slot.c:1844 replication/slot.c:2005 replication/walsender.c:658 -#: storage/file/copydir.c:208 storage/file/copydir.c:213 storage/file/fd.c:782 -#: storage/file/fd.c:3700 storage/file/fd.c:3806 utils/cache/relmapper.c:839 -#: utils/cache/relmapper.c:945 +#: 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" msgstr "\"%s\" 파일을 닫을 수 없음: %m" -#: ../common/controldata_utils.c:124 +#: ../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "바이트 순서 불일치" -#: ../common/controldata_utils.c:126 +#: ../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -147,142 +154,158 @@ msgstr "" "지 않으며\n" "현재 PostgreSQL 설치본과 이 데이터 디렉터리가 호환하지 않습니다." -#: ../common/controldata_utils.c:181 ../common/controldata_utils.c:186 -#: ../common/file_utils.c:228 ../common/file_utils.c:287 -#: ../common/file_utils.c:361 access/heap/rewriteheap.c:1263 -#: access/transam/timeline.c:111 access/transam/timeline.c:251 -#: access/transam/timeline.c:348 access/transam/twophase.c:1303 -#: access/transam/xlog.c:2946 access/transam/xlog.c:3109 -#: access/transam/xlog.c:3148 access/transam/xlog.c:3341 -#: access/transam/xlog.c:3986 access/transam/xlogrecovery.c:4179 -#: access/transam/xlogrecovery.c:4282 access/transam/xlogutils.c:838 -#: backup/basebackup.c:538 backup/basebackup.c:1512 libpq/hba.c:629 -#: postmaster/syslogger.c:1560 replication/logical/origin.c:735 -#: replication/logical/reorderbuffer.c:3706 -#: replication/logical/reorderbuffer.c:4257 -#: replication/logical/reorderbuffer.c:5030 -#: replication/logical/snapbuild.c:1753 replication/logical/snapbuild.c:1863 -#: replication/slot.c:1925 replication/walsender.c:616 -#: replication/walsender.c:2731 storage/file/copydir.c:151 -#: storage/file/fd.c:757 storage/file/fd.c:3457 storage/file/fd.c:3687 -#: storage/file/fd.c:3777 storage/smgr/md.c:663 utils/cache/relmapper.c:816 -#: utils/cache/relmapper.c:924 utils/error/elog.c:2082 -#: utils/init/miscinit.c:1530 utils/init/miscinit.c:1664 -#: utils/init/miscinit.c:1741 utils/misc/guc.c:4600 utils/misc/guc.c:4650 +#: ../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: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: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: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:202 ../common/controldata_utils.c:205 -#: access/transam/twophase.c:1744 access/transam/twophase.c:1753 -#: access/transam/xlog.c:8755 access/transam/xlogfuncs.c:708 -#: backup/basebackup_server.c:175 backup/basebackup_server.c:268 -#: postmaster/postmaster.c:5573 postmaster/syslogger.c:1571 -#: postmaster/syslogger.c:1584 postmaster/syslogger.c:1597 -#: utils/cache/relmapper.c:936 +#: ../common/controldata_utils.c:246 ../common/controldata_utils.c:249 +#: access/transam/twophase.c:1773 access/transam/twophase.c:1782 +#: 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:4124 +#: 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:219 ../common/controldata_utils.c:224 -#: ../common/file_utils.c:299 ../common/file_utils.c:369 -#: access/heap/rewriteheap.c:959 access/heap/rewriteheap.c:1169 -#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1765 -#: access/transam/xlog.c:3032 access/transam/xlog.c:3227 -#: access/transam/xlog.c:3959 access/transam/xlog.c:8145 -#: access/transam/xlog.c:8190 backup/basebackup_server.c:209 -#: replication/logical/snapbuild.c:1791 replication/slot.c:1830 -#: replication/slot.c:1935 storage/file/fd.c:774 storage/file/fd.c:3798 -#: storage/smgr/md.c:1135 storage/smgr/md.c:1180 storage/sync/sync.c:451 -#: utils/misc/guc.c:4370 +#: ../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:1794 +#: 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:133 -#: ../common/cryptohash_openssl.c:332 ../common/exec.c:550 ../common/exec.c:595 -#: ../common/exec.c:687 ../common/hmac.c:309 ../common/hmac.c:325 -#: ../common/hmac_openssl.c:132 ../common/hmac_openssl.c:327 -#: ../common/md5_common.c:155 ../common/psprintf.c:143 -#: ../common/scram-common.c:258 ../common/stringinfo.c:305 ../port/path.c:751 -#: ../port/path.c:789 ../port/path.c:806 access/transam/twophase.c:1412 -#: access/transam/xlogrecovery.c:589 lib/dshash.c:253 libpq/auth.c:1345 -#: libpq/auth.c:1389 libpq/auth.c:1946 libpq/be-secure-gssapi.c:524 -#: postmaster/bgworker.c:352 postmaster/bgworker.c:934 -#: postmaster/postmaster.c:2537 postmaster/postmaster.c:4130 -#: postmaster/postmaster.c:5498 postmaster/postmaster.c:5869 -#: replication/libpqwalreceiver/libpqwalreceiver.c:308 -#: replication/logical/logical.c:208 replication/walsender.c:686 -#: storage/buffer/localbuf.c:601 storage/file/fd.c:866 storage/file/fd.c:1397 -#: storage/file/fd.c:1558 storage/file/fd.c:2478 storage/ipc/procarray.c:1449 -#: storage/ipc/procarray.c:2232 storage/ipc/procarray.c:2239 -#: storage/ipc/procarray.c:2738 storage/ipc/procarray.c:3374 -#: utils/adt/formatting.c:1690 utils/adt/formatting.c:1812 -#: utils/adt/formatting.c:1935 utils/adt/pg_locale.c:469 -#: utils/adt/pg_locale.c:633 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:514 -#: utils/hash/dynahash.c:614 utils/hash/dynahash.c:1111 utils/mb/mbutils.c:402 -#: utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 -#: utils/misc/guc.c:640 utils/misc/guc.c:665 utils/misc/guc.c:1053 -#: utils/misc/guc.c:4348 utils/misc/tzparser.c:476 utils/mmgr/aset.c:445 -#: utils/mmgr/dsa.c:714 utils/mmgr/dsa.c:736 utils/mmgr/dsa.c:817 -#: utils/mmgr/generation.c:205 utils/mmgr/mcxt.c:1046 utils/mmgr/mcxt.c:1082 -#: utils/mmgr/mcxt.c:1120 utils/mmgr/mcxt.c:1158 utils/mmgr/mcxt.c:1246 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/mcxt.c:1313 utils/mmgr/mcxt.c:1502 -#: utils/mmgr/mcxt.c:1547 utils/mmgr/mcxt.c:1604 utils/mmgr/slab.c:366 +#: ../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: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:3558 postmaster/postmaster.c:4018 +#: postmaster/postmaster.c:4380 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 "메모리 부족" #: ../common/cryptohash.c:266 ../common/cryptohash.c:272 -#: ../common/cryptohash_openssl.c:344 ../common/cryptohash_openssl.c:352 -#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:339 -#: ../common/hmac_openssl.c:347 +#: ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 +#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 +#: ../common/hmac_openssl.c:377 msgid "success" msgstr "성공" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:346 -#: ../common/hmac_openssl.c:341 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 +#: ../common/hmac_openssl.c:371 msgid "destination buffer too small" msgstr "대상 버퍼가 너무 작습니다." -#: ../common/cryptohash_openssl.c:348 ../common/hmac_openssl.c:343 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 msgid "OpenSSL failure" msgstr "OpenSSL 실패" -#: ../common/exec.c:172 +#: ../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "\"%s\" 파일은 잘못된 바이너리 파일임: %m" -#: ../common/exec.c:215 +#: ../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음: %m" # translator: %s is IPv4, IPv6, or Unix -#: ../common/exec.c:223 +#: ../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "\"%s\" 실행 파일을 찾을 수 없음" -#: ../common/exec.c:250 +#: ../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "\"%s\" 상대 경로를 절대 경로로 바꿀 수 없음: %m" -#: ../common/exec.c:412 libpq/pqcomm.c:728 storage/ipc/latch.c:1128 -#: storage/ipc/latch.c:1308 storage/ipc/latch.c:1541 storage/ipc/latch.c:1703 -#: storage/ipc/latch.c:1829 +#: ../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" + +#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "\"%s\" 명령에서 읽을 수 없음: %m" + +#: ../common/exec.c:397 +#, c-format +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 #, 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:791 -#: ../port/path.c:808 utils/misc/ps_status.c:168 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:203 utils/misc/ps_status.c:211 +#: ../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 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" @@ -292,39 +315,51 @@ msgstr "메모리 부족\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:447 -#: ../common/file_utils.c:451 access/transam/twophase.c:1315 -#: access/transam/xlogarchive.c:112 access/transam/xlogarchive.c:229 -#: backup/basebackup.c:346 backup/basebackup.c:544 backup/basebackup.c:615 -#: commands/copyfrom.c:1680 commands/copyto.c:702 commands/extension.c:3469 -#: commands/tablespace.c:810 commands/tablespace.c:899 postmaster/pgarch.c:590 -#: replication/logical/snapbuild.c:1649 storage/file/fd.c:1922 -#: storage/file/fd.c:2008 storage/file/fd.c:3511 utils/adt/dbsize.c:106 -#: utils/adt/dbsize.c:258 utils/adt/dbsize.c:338 utils/adt/genfile.c:483 -#: utils/adt/genfile.c:658 utils/adt/misc.c:340 +#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#, c-format +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: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" -#: ../common/file_utils.c:162 ../common/pgfnames.c:48 ../common/rmtree.c:63 -#: commands/tablespace.c:734 commands/tablespace.c:744 -#: postmaster/postmaster.c:1564 storage/file/fd.c:2880 -#: storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#, c-format +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 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: ../common/file_utils.c:196 ../common/pgfnames.c:69 ../common/rmtree.c:104 -#: storage/file/fd.c:2892 +#: ../common/file_utils.c:169 ../common/file_utils.c:315 +#: ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: ../common/file_utils.c:379 access/transam/xlogarchive.c:383 -#: postmaster/pgarch.c:746 postmaster/syslogger.c:1608 -#: replication/logical/snapbuild.c:1810 replication/slot.c:723 -#: replication/slot.c:1716 replication/slot.c:1858 storage/file/fd.c:792 -#: utils/time/snapmgr.c:1284 +#: ../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" @@ -333,75 +368,87 @@ msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" msgid "internal error" msgstr "내부 오류" -#: ../common/jsonapi.c:1144 +#: ../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "재귀적 하향 구문분석기는 증분 토큰분석기을 사용할 수 없습니다." + +#: ../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "증분 구문분석기는 증분 토큰분석기를 필요로 합니다." + +#: ../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON 계층이 너무 깊음, 허용하는 최대 깊이는 6400입니다." + +#: ../common/jsonapi.c:2127 #, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "잘못된 이스케이프 조합: \"\\%s\"" +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "잘못된 이스케이프 조합: \"\\%.*s\"" -#: ../common/jsonapi.c:1147 +#: ../common/jsonapi.c:2131 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "0x%02x 값의 문자는 이스케이프 처리를 해야함." -#: ../common/jsonapi.c:1150 +#: ../common/jsonapi.c:2135 #, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "입력 자료의 끝을 기대했는데, \"%s\" 값이 더 있음." +msgid "Expected end of input, but found \"%.*s\"." +msgstr "입력 자료의 끝을 기대했는데, \"%.*s\" 값이 더 있음." -#: ../common/jsonapi.c:1153 +#: ../common/jsonapi.c:2138 #, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "\"]\" 가 필요한데 \"%s\"이(가) 있음" +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "배열 요소나 \"]\" 가 필요한데 \"%.*s\"이(가) 있음" -#: ../common/jsonapi.c:1156 +#: ../common/jsonapi.c:2141 #, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "\",\" 또는 \"]\"가 필요한데 \"%s\"이(가) 있음" +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "\",\" 또는 \"]\"가 필요한데 \"%.*s\"이(가) 있음" -#: ../common/jsonapi.c:1159 +#: ../common/jsonapi.c:2144 #, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "\":\"가 필요한데 \"%s\"이(가) 있음" +msgid "Expected \":\", but found \"%.*s\"." +msgstr "\":\"가 필요한데 \"%.*s\"이(가) 있음" -#: ../common/jsonapi.c:1162 +#: ../common/jsonapi.c:2147 #, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "JSON 값을 기대했는데, \"%s\" 값임" +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "JSON 값을 기대했는데, \"%.*s\" 값임" -#: ../common/jsonapi.c:1165 +#: ../common/jsonapi.c:2150 msgid "The input string ended unexpectedly." msgstr "입력 문자열이 예상치 않게 끝났음." -#: ../common/jsonapi.c:1167 +#: ../common/jsonapi.c:2152 #, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "\"}\"가 필요한데 \"%s\"이(가) 있음" +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "문자열이나 \"}\"가 필요한데 \"%.*s\"이(가) 있음" -#: ../common/jsonapi.c:1170 +#: ../common/jsonapi.c:2155 #, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "\",\" 또는 \"}\"가 필요한데 \"%s\"이(가) 있음" +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "\",\" 또는 \"}\"가 필요한데 \"%.*s\"이(가) 있음" -#: ../common/jsonapi.c:1173 +#: ../common/jsonapi.c:2158 #, c-format -msgid "Expected string, but found \"%s\"." -msgstr "문자열 값을 기대했는데, \"%s\" 값임" +msgid "Expected string, but found \"%.*s\"." +msgstr "문자열 값을 기대했는데, \"%.*s\" 값임" -#: ../common/jsonapi.c:1176 +#: ../common/jsonapi.c:2161 #, c-format -msgid "Token \"%s\" is invalid." -msgstr "잘못된 토큰: \"%s\"" +msgid "Token \"%.*s\" is invalid." +msgstr "잘못된 토큰: \"%.*s\"" -#: ../common/jsonapi.c:1179 jsonpath_scan.l:597 +#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 값은 text 형으로 변환할 수 없음." -#: ../common/jsonapi.c:1181 +#: ../common/jsonapi.c:2166 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\" 표기법은 뒤에 4개의 16진수가 와야 합니다." -#: ../common/jsonapi.c:1184 +#: ../common/jsonapi.c:2169 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -409,19 +456,19 @@ msgstr "" "서버 인코딩이 UTF8이 아닌 경우 007F보다 큰 코드 지점 값에는 유니코드 이스케이" "프 값을 사용할 수 없음" -#: ../common/jsonapi.c:1187 +#: ../common/jsonapi.c:2178 #, c-format msgid "" "Unicode escape value could not be translated to the server's encoding %s." msgstr "유니코드 이스케이프 값을 %s 서버 인코딩으로 변환할 수 없음." -#: ../common/jsonapi.c:1190 jsonpath_scan.l:630 +#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "유니코드 상위 surrogate(딸림 코드)는 상위 딸림 코드 뒤에 오면 안됨." -#: ../common/jsonapi.c:1192 jsonpath_scan.l:641 jsonpath_scan.l:651 -#: jsonpath_scan.l:702 +#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "유니코드 상위 surrogate(딸림 코드) 뒤에는 하위 딸림 코드가 있어야 함." @@ -446,11 +493,168 @@ msgstr "상세정보: " msgid "hint: " msgstr "힌트: " +#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "매니페스트의 체크섬을 초기화할 수 없음" + +#: ../common/parse_manifest.c:203 ../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "매니페스트가 예상치 않게 끝났음." + +#: ../common/parse_manifest.c:209 ../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "매니페스트의 체크섬을 갱신할 수 없음" + +#: ../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "예상치 않은 객체 시작" + +#: ../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "예상치 않은 객체 끝" + +#: ../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "예상치 않은 배열 시작" + +#: ../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "예상치 않은 배열 끝" + +#: ../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "예상치 않은 버전 지시자" + +#: ../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "알 수 없는 최상위 수준 필드" + +#: ../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "예기치 않은 파일 필드" + +#: ../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "예상치 않은 WAL 범위 필드" + +#: ../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "예기치 않은 객체 필드" + +#: ../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "예기치 않은 스칼라" + +#: ../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "매니페스트 버전이 정수가 아님" + +#: ../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "예기치 않은 매니페스트 버전" + +#: ../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "매니페스트에 있는 시스템 식별 번호가 정수가 아님" + +#: ../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "경로 이름이 빠졌음" + +#: ../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "경로 이름과 인코딩된 경로 이름 모두" + +#: ../common/parse_manifest.c:666 +msgid "missing size" +msgstr "크기가 빠졌음" + +#: ../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "알고리즘 생략된 체크섬" + +#: ../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "파일 이름을 디코딩할 수 없음" + +#: ../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "파일 크기가 정수가 아님" + +#: ../common/parse_manifest.c:699 backup/basebackup.c:870 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "알 수 없는 체크섬 알고리즘: \"%s\"" + +#: ../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "\"%s\" 파일의 잘못된 체크섬: \"%s\"" + +#: ../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "타임라인 없음" + +#: ../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "시작 LSN 없음" + +#: ../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "마침 LSN 없음" + +#: ../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "타림라인 값이 숫자가 아님" + +#: ../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "시작 LSN 구문 오류" + +#: ../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "마침 LSN 구문 오류" + +#: ../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "최소 두 줄이 필요함" + +#: ../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "마지막 줄에 줄바꿈 문자 없음" + +#: ../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "매니페스트 체크섬 최종 정리를 못했음" + +#: ../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "매니페스트에 체크섬 없음" + +#: ../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "잘못된 매니페스트 체크섬: \"%s\"" + +#: ../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "매니페스트 체크섬 불일치" + +#: ../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 -#: postmaster/postmaster.c:2211 utils/misc/guc.c:3118 utils/misc/guc.c:3154 -#: utils/misc/guc.c:3224 utils/misc/guc.c:4547 utils/misc/guc.c:6721 -#: utils/misc/guc.c:6762 +#: 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\"" @@ -510,45 +714,45 @@ msgstr "restricted 토큰으로 재실행할 수 없음: 오류 코드 %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu" -#: ../common/rmtree.c:95 access/heap/rewriteheap.c:1248 -#: access/transam/twophase.c:1704 access/transam/xlogarchive.c:120 -#: access/transam/xlogarchive.c:393 postmaster/postmaster.c:1143 -#: postmaster/syslogger.c:1537 replication/logical/origin.c:591 -#: replication/logical/reorderbuffer.c:4526 -#: replication/logical/snapbuild.c:1691 replication/logical/snapbuild.c:2125 -#: replication/slot.c:1909 storage/file/fd.c:832 storage/file/fd.c:3325 -#: storage/file/fd.c:3387 storage/file/reinit.c:262 storage/ipc/dsm.c:316 -#: storage/smgr/md.c:383 storage/smgr/md.c:442 storage/sync/sync.c:248 -#: utils/time/snapmgr.c:1608 +#: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 +#: access/transam/twophase.c:1733 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" msgstr "\"%s\" 파일을 삭제할 수 없음: %m" -#: ../common/rmtree.c:122 commands/tablespace.c:773 commands/tablespace.c:786 -#: commands/tablespace.c:821 commands/tablespace.c:911 storage/file/fd.c:3317 -#: storage/file/fd.c:3726 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 +#: commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 +#: storage/file/fd.c:3779 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 삭제할 수 없음: %m" -#: ../common/scram-common.c:271 +#: ../common/scram-common.c:281 msgid "could not encode salt" msgstr "salt를 인코드할 수 없음" -#: ../common/scram-common.c:287 +#: ../common/scram-common.c:297 msgid "could not encode stored key" msgstr "저장 키를 인코드할 수 없음" -#: ../common/scram-common.c:304 +#: ../common/scram-common.c:314 msgid "could not encode server key" msgstr "서버 키를 인코드할 수 없음" -#: ../common/stringinfo.c:306 +#: ../common/stringinfo.c:315 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "%d바이트가 포함된 문자열 버퍼를 %d바이트 더 확장할 수 없습니다." -#: ../common/stringinfo.c:310 +#: ../common/stringinfo.c:319 #, c-format msgid "" "out of memory\n" @@ -564,7 +768,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "%ld UID를 찾을 수 없음: %s" -#: ../common/username.c:45 libpq/auth.c:1881 +#: ../common/username.c:45 libpq/auth.c:1888 msgid "user does not exist" msgstr "사용자 없음" @@ -663,20 +867,20 @@ msgstr "" #: ../port/path.c:775 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "현재 작업 디렉터리를 알 수 없음: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "현재 작업 디렉터리를 알 수 없음: %m\n" #: ../port/strerror.c:72 #, c-format msgid "operating system error %d" msgstr "운영체제 오류 %d" -#: ../port/thread.c:50 ../port/thread.c:86 +#: ../port/user.c:43 ../port/user.c:79 #, c-format msgid "could not look up local user ID %d: %s" msgstr "UID %d에 해당하는 로컬 사용자를 찾을 수 없음: %s" -#: ../port/thread.c:55 ../port/thread.c:91 +#: ../port/user.c:48 ../port/user.c:84 #, c-format msgid "local user with ID %d does not exist" msgstr "%d OID에 해당하는 로컬 사용자가 없음" @@ -696,89 +900,78 @@ msgstr "PowerUsers 그룹의 SID를 가져올 수 없음: 오류 코드 %lu\n" msgid "could not check access token membership: error code %lu\n" msgstr "토큰 맴버쉽 접근을 확인 할 수 없음: 오류 코드 %lu\n" -#: access/brin/brin.c:216 +#: access/brin/brin.c:405 #, c-format msgid "" "request for BRIN range summarization for index \"%s\" page %u was not " "recorded" msgstr "\"%s\" 인덱스에서 BRIN 범위 요약 요청이 기록되지 못함, 해당 페이지: %u" -#: access/brin/brin.c:1036 access/brin/brin.c:1137 access/gin/ginfast.c:1040 -#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:214 -#: access/transam/xlogfuncs.c:247 access/transam/xlogfuncs.c:286 -#: access/transam/xlogfuncs.c:307 access/transam/xlogfuncs.c:328 -#: access/transam/xlogfuncs.c:398 access/transam/xlogfuncs.c:456 +#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 +#: access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 +#: access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 +#: access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 #, c-format msgid "recovery is in progress" msgstr "복구 작업 진행 중" -#: access/brin/brin.c:1037 access/brin/brin.c:1138 +#: access/brin/brin.c:1386 access/brin/brin.c:1494 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "BRIN 제어 함수는 복구 작업 중에는 실행 될 수 없음" -#: access/brin/brin.c:1042 access/brin/brin.c:1143 +#: access/brin/brin.c:1391 access/brin/brin.c:1499 #, c-format msgid "block number out of range: %lld" msgstr "블록 번호가 범위를 벗어남: %lld" -#: access/brin/brin.c:1086 access/brin/brin.c:1169 +#: access/brin/brin.c:1436 access/brin/brin.c:1525 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" 개체는 BRIN 인덱스가 아닙니다" -#: access/brin/brin.c:1102 access/brin/brin.c:1185 +#: access/brin/brin.c:1452 access/brin/brin.c:1541 #, c-format msgid "could not open parent table of index \"%s\"" msgstr "\"%s\" 인덱스에 대한 파티션 테이블을 열 수 없음" -#: access/brin/brin_bloom.c:750 access/brin/brin_bloom.c:792 -#: access/brin/brin_minmax_multi.c:3011 access/brin/brin_minmax_multi.c:3148 -#: statistics/dependencies.c:663 statistics/dependencies.c:716 -#: statistics/mcv.c:1484 statistics/mcv.c:1515 statistics/mvdistinct.c:344 -#: statistics/mvdistinct.c:397 utils/adt/pseudotypes.c:43 -#: utils/adt/pseudotypes.c:77 utils/adt/tsgistidx.c:93 +#: access/brin/brin.c:1461 access/brin/brin.c:1557 access/gin/ginfast.c:1085 +#: parser/parse_utilcmd.c:2277 #, c-format -msgid "cannot accept a value of type %s" -msgstr "%s 형식의 값은 사용할 수 없음" +msgid "index \"%s\" is not valid" +msgstr "\"%s\" 인덱스는 사용가능 상태가 아님" -#: access/brin/brin_minmax_multi.c:2171 access/brin/brin_minmax_multi.c:2178 -#: access/brin/brin_minmax_multi.c:2185 utils/adt/timestamp.c:941 -#: utils/adt/timestamp.c:1518 utils/adt/timestamp.c:2708 -#: utils/adt/timestamp.c:2778 utils/adt/timestamp.c:2795 -#: utils/adt/timestamp.c:2848 utils/adt/timestamp.c:2887 -#: utils/adt/timestamp.c:3184 utils/adt/timestamp.c:3189 -#: utils/adt/timestamp.c:3194 utils/adt/timestamp.c:3244 -#: utils/adt/timestamp.c:3251 utils/adt/timestamp.c:3258 -#: utils/adt/timestamp.c:3278 utils/adt/timestamp.c:3285 -#: utils/adt/timestamp.c:3292 utils/adt/timestamp.c:3322 -#: utils/adt/timestamp.c:3330 utils/adt/timestamp.c:3374 -#: utils/adt/timestamp.c:3796 utils/adt/timestamp.c:3920 -#: utils/adt/timestamp.c:4440 +#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 +#: access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 +#: statistics/dependencies.c:661 statistics/dependencies.c:714 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 +#: utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format -msgid "interval out of range" -msgstr "간격이 범위를 벗어남" +msgid "cannot accept a value of type %s" +msgstr "%s 형식의 값은 사용할 수 없음" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 -#: access/brin/brin_pageops.c:852 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1442 access/spgist/spgdoinsert.c:2002 -#: access/spgist/spgdoinsert.c:2279 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 +#: access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 +#: access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 +#: access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "인덱스 행 크기 %zu이(가) 최대값 %zu(\"%s\" 인덱스)을(를) 초과함" -#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 +#: access/brin/brin_revmap.c:383 access/brin/brin_revmap.c:389 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "BRIN 인덱스 속상: 범위 지도가 연결되지 않음" -#: access/brin/brin_revmap.c:593 +#: access/brin/brin_revmap.c:583 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "예상치 못한 0x%04X 페이지 타입: \"%s\" BRIN 인덱스 %u 블록" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 +#: access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 #: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "" @@ -788,8 +981,8 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 포함된 %s 함수가 잘못된 지원 번호 %d " "로 지정되었습니다." -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 +#: access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 #: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "" @@ -799,8 +992,8 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 포함된 %s 함수가 잘못된 signature 지원 " "번호 %d 로 지정되었습니다." -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 +#: access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 #: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "" @@ -810,7 +1003,7 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 포함된 %s 연산자의 %d 번 전략 번호가 잘" "못되었습니다." -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 #: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 #: access/spgist/spgvalidate.c:237 #, c-format @@ -821,8 +1014,8 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자가 잘못된 ORDER BY 명세를 사용" "합니다." -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 +#: access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 #: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "" @@ -855,32 +1048,32 @@ msgstr "" msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "\"%s\" 연산자 클래스(접근 방법: %s)에 연산자가 빠졌습니다" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:274 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 +#: access/gist/gistvalidate.c:273 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d" msgstr "\"%s\" 연산자 클래스(접근 방법: %s)에 %d 지원 함수가 빠졌습니다." -#: access/common/attmap.c:122 +#: access/common/attmap.c:121 #, c-format msgid "Returned type %s does not match expected type %s in column %d." msgstr "" "반환 자료형으로 %s 형을 지정했지만, 칼럼은 %s 자료형입니다. 해당 칼럼: %d 번" "째 칼럼" -#: access/common/attmap.c:150 +#: access/common/attmap.c:149 #, c-format msgid "" "Number of returned columns (%d) does not match expected column count (%d)." msgstr "반환할 칼럼 수(%d)와 예상되는 칼럼수(%d)가 다릅니다." -#: access/common/attmap.c:234 access/common/attmap.c:246 +#: access/common/attmap.c:233 access/common/attmap.c:245 #, c-format msgid "could not convert row type" msgstr "로우 자료형을 변환 할 수 없음" -#: access/common/attmap.c:235 +#: access/common/attmap.c:234 #, c-format msgid "" "Attribute \"%s\" of type %s does not match corresponding attribute of type " @@ -888,12 +1081,12 @@ msgid "" msgstr "" " \"%s\" 속성(대상 자료형 %s)이 %s 자료형의 속성 가운데 관련된 것이 없습니다" -#: access/common/attmap.c:247 +#: access/common/attmap.c:246 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "\"%s\" 속성(대상 자료형 %s)이 %s 자료형에는 없습니다." -#: access/common/heaptuple.c:1124 access/common/heaptuple.c:1459 +#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "칼럼 개수(%d)가 최대값(%d)을 초과했습니다" @@ -903,123 +1096,111 @@ msgstr "칼럼 개수(%d)가 최대값(%d)을 초과했습니다" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "인덱스 칼럼 개수(%d)가 최대값(%d)을 초과했습니다" -#: access/common/indextuple.c:209 access/spgist/spgutils.c:950 +#: access/common/indextuple.c:209 access/spgist/spgutils.c:970 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "인덱스 행(row)은 %zu 바이트를 필요로 함, 최대 크기는 %zu" -#: access/common/printtup.c:292 tcop/fastpath.c:107 tcop/fastpath.c:454 -#: tcop/postgres.c:1944 +#: 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" -#: access/common/reloptions.c:521 access/common/reloptions.c:532 +#: access/common/reloptions.c:519 access/common/reloptions.c:530 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "유효한 값: \"on\", \"off\", \"auto\"" -#: access/common/reloptions.c:543 +#: access/common/reloptions.c:541 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "사용할 수 있는 값은 \"local\" 또는 \"cascaded\" 입니다" -#: access/common/reloptions.c:691 +#: access/common/reloptions.c:689 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "사용자 정의 관계 매개 변수 형식 제한을 초과함" -#: access/common/reloptions.c:1233 +#: access/common/reloptions.c:1231 #, c-format msgid "RESET must not include values for parameters" msgstr "매개 변수의 값으로 RESET은 올 수 없음" -#: access/common/reloptions.c:1265 +#: access/common/reloptions.c:1263 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "\"%s\" 매개 변수 네임스페이스를 인식할 수 없음" -#: access/common/reloptions.c:1302 commands/variable.c:1167 +#: access/common/reloptions.c:1300 commands/variable.c:1214 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "WITH OIDS 테이블을 지원하지 않음" -#: access/common/reloptions.c:1470 +#: access/common/reloptions.c:1468 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "알 수 없는 환경 설정 이름입니다 \"%s\"" -#: access/common/reloptions.c:1582 +#: access/common/reloptions.c:1580 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "\"%s\" 매개 변수가 여러 번 지정됨" -#: access/common/reloptions.c:1598 +#: access/common/reloptions.c:1596 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "\"%s\" 불리언 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1610 +#: access/common/reloptions.c:1608 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "\"%s\" 정수 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1616 access/common/reloptions.c:1636 +#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "값 %s은(는) \"%s\" 옵션 범위를 벗어남" -#: access/common/reloptions.c:1618 +#: access/common/reloptions.c:1616 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "유효한 값은 \"%d\"에서 \"%d\" 사이입니다." -#: access/common/reloptions.c:1630 +#: access/common/reloptions.c:1628 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "\"%s\" 부동 소수점 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1638 +#: access/common/reloptions.c:1636 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "유효한 값은 \"%f\"에서 \"%f\" 사이입니다." -#: access/common/reloptions.c:1660 +#: access/common/reloptions.c:1658 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "\"%s\" enum 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1991 +#: access/common/reloptions.c:1989 #, c-format msgid "cannot specify storage parameters for a partitioned table" msgstr "파티션 상위 테이블 대상으로는 스토리지 매개 변수를 지정할 수 없음" -#: access/common/reloptions.c:1992 +#: access/common/reloptions.c:1990 #, c-format msgid "Specify storage parameters for its leaf partitions instead." msgstr "" "대신에 각 하위 파티션 테이블 대상으로 각각 스토리지 매개 변수를 지정하세요." -#: access/common/toast_compression.c:33 +#: access/common/toast_compression.c:31 #, c-format msgid "compression method lz4 not supported" msgstr "lz4 압축 방법을 지원하지 않습니다" -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:32 #, c-format msgid "This functionality requires the server to be built with lz4 support." msgstr "이 기능을 사용하려면 lz4 지원으로 서버를 빌드해야 합니다." -#: access/common/tupdesc.c:837 commands/tablecmds.c:6953 -#: commands/tablecmds.c:12973 -#, c-format -msgid "too many array dimensions" -msgstr "너무 많은 배열 차수" - -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1913 -#, c-format -msgid "column \"%s\" cannot be declared SETOF" -msgstr "\"%s\" 칼럼은 SETOF를 지정할 수 없습니다" - #: access/gin/ginbulk.c:44 #, c-format msgid "posting list is too long" @@ -1027,8 +1208,8 @@ msgstr "포스팅 목록이 너무 깁니다" #: access/gin/ginbulk.c:45 #, c-format -msgid "Reduce maintenance_work_mem." -msgstr "maintenance_work_mem 설정값을 줄이세요." +msgid "Reduce \"maintenance_work_mem\"." +msgstr "\"maintenance_work_mem\" 설정값을 줄이세요." #: access/gin/ginfast.c:1041 #, c-format @@ -1045,7 +1226,7 @@ msgstr "\"%s\" 개체는 GIN 인덱스가 아닙니다" msgid "cannot access temporary indexes of other sessions" msgstr "다른 세션의 임시 인덱스는 접근할 수 없음" -#: access/gin/ginget.c:273 access/nbtree/nbtinsert.c:762 +#: access/gin/ginget.c:271 access/nbtree/nbtinsert.c:762 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "\"%s\" 인덱스에서 튜플 재검색 실패" @@ -1062,14 +1243,14 @@ msgstr "" msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "이 문제를 고치려면, 다음 명령을 수행하세요: REINDEX INDEX \"%s\"" -#: access/gin/ginutil.c:146 executor/execExpr.c:2169 -#: utils/adt/arrayfuncs.c:3996 utils/adt/arrayfuncs.c:6683 -#: utils/adt/rowtypes.c:984 +#: 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 자료형에서 사용할 비교함수를 찾을 수 없습니다." -#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 #: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "" @@ -1079,7 +1260,7 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 서로 다른 양쪽 입력 자료형 인자를 사용" "할 수 있는 %s 지원 함수가 포함되어 있음" -#: access/gin/ginvalidate.c:260 +#: access/gin/ginvalidate.c:258 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d or " @@ -1087,18 +1268,18 @@ msgid "" msgstr "" "\"%s\" 연산자 클래스(접근 방법: %s)에는 %d 또는 %d 지원 함수가 빠졌습니다" -#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 #: access/spgist/spgvalidate.c:387 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "지원 함수 번호 %d 잘못됨, 대상 접근 방법: %s" -#: access/gist/gist.c:759 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "\"%s\" 인덱스에 잘못된 내부 튜플이 있다고 확인되었습니다." -#: access/gist/gist.c:761 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 #, c-format msgid "" "This is caused by an incomplete page split at crash recovery before " @@ -1107,16 +1288,16 @@ msgstr "" "이 문제는 PostgreSQL 9.1 버전으로 업그레이드 하기 전에 장애 복구 처리에서 잘" "못된 페이지 분리 때문에 발생했습니다." -#: access/gist/gist.c:762 access/gist/gistutil.c:801 access/gist/gistutil.c:812 -#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:227 -#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 -#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:813 +#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 +#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 +#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 +#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 #: access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "REINDEX 명령으로 다시 인덱스를 만드세요" -#: access/gist/gist.c:1176 +#: access/gist/gist.c:1196 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "\"%s\" 인덱스의 불완전한 분기 수정중, 블록번호: %u" @@ -1135,19 +1316,19 @@ msgstr "" "인덱스가 최적화되지 않았습니다. 최적화하려면 개발자에게 문의하거나, CREATE " "INDEX 명령에서 해당 칼럼을 두 번째 인덱스로 사용하십시오." -#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 +#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 #: access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "\"%s\" 인덱스의 %u번째 블럭에서 예상치 않은 zero page가 있습니다" -#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 -#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:821 +#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 +#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "\"%s\" 인덱스트 %u번째 블럭이 속상되었습니다" -#: access/gist/gistvalidate.c:203 +#: access/gist/gistvalidate.c:202 #, c-format msgid "" "operator family \"%s\" of access method %s contains unsupported ORDER BY " @@ -1156,7 +1337,7 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자가 지원하지 않는 ORDER BY 명세" "를 사용합니다." -#: access/gist/gistvalidate.c:214 +#: access/gist/gistvalidate.c:213 #, c-format msgid "" "operator family \"%s\" of access method %s contains incorrect ORDER BY " @@ -1165,30 +1346,30 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자가 잘못된 ORDER BY 명세를 사용" "합니다." -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:333 -#: utils/adt/varchar.c:1009 utils/adt/varchar.c:1064 +#: 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 "문자열 해시 작업에 사용할 정렬규칙(collation)을 결정할 수 없음" -#: access/hash/hashfunc.c:280 access/hash/hashfunc.c:334 catalog/heap.c:668 -#: catalog/heap.c:674 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:2039 commands/tablecmds.c:17462 commands/view.c:86 -#: regex/regc_pg_locale.c:243 utils/adt/formatting.c:1648 -#: utils/adt/formatting.c:1770 utils/adt/formatting.c:1893 utils/adt/like.c:191 -#: utils/adt/like_support.c:1025 utils/adt/varchar.c:739 -#: utils/adt/varchar.c:1010 utils/adt/varchar.c:1065 utils/adt/varlena.c:1518 +#: 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." msgstr "명시적으로 정렬 규칙을 지정하려면 COLLATE 절을 사용하세요." -#: access/hash/hashinsert.c:86 +#: access/hash/hashinsert.c:84 #, c-format msgid "index row size %zu exceeds hash maximum %zu" msgstr "인덱스 행 크기가 초과됨: 현재값 %zu, 최대값 %zu" -#: access/hash/hashinsert.c:88 access/spgist/spgdoinsert.c:2006 -#: access/spgist/spgdoinsert.c:2283 access/spgist/spgutils.c:1011 +#: 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 "버퍼 페이지보다 큰 값은 인덱싱할 수 없습니다." @@ -1203,17 +1384,17 @@ msgstr "잘못된 오버플로우 블록 번호: %u" msgid "out of overflow pages in hash index \"%s\"" msgstr "\"%s\" 해시 인덱스에서 오버플로우 페이지 초과" -#: access/hash/hashsearch.c:315 +#: access/hash/hashsearch.c:311 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "해시 인덱스는 whole-index scan을 지원하지 않음" -#: access/hash/hashutil.c:263 +#: access/hash/hashutil.c:262 #, c-format msgid "index \"%s\" is not a hash index" msgstr "\"%s\" 인덱스는 해시 인덱스가 아님" -#: access/hash/hashutil.c:269 +#: access/hash/hashutil.c:268 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "\"%s\" 인덱스는 잘못된 해시 버전임" @@ -1231,104 +1412,114 @@ msgid "" "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "%s 연산자 패밀리(접근 방법: %s)에 cross-type 연산자가 빠졌음" -#: access/heap/heapam.c:2027 +#: access/heap/heapam.c:2204 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "병렬 작업자는 튜플을 추가 할 수 없음" -#: access/heap/heapam.c:2546 +#: access/heap/heapam.c:2723 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "병렬 작업 중에는 튜플을 지울 수 없음" -#: access/heap/heapam.c:2593 +#: access/heap/heapam.c:2770 #, c-format msgid "attempted to delete invisible tuple" msgstr "볼 수 없는 튜플을 삭제 하려고 함" -#: access/heap/heapam.c:3036 access/heap/heapam.c:5903 +#: access/heap/heapam.c:3218 access/heap/heapam.c:6454 access/index/genam.c:818 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "병렬 작업 중에 튜플 갱신은 할 수 없음" -#: access/heap/heapam.c:3164 +#: access/heap/heapam.c:3350 #, c-format msgid "attempted to update invisible tuple" msgstr "볼 수 없는 튜플을 변경하려고 함" -#: access/heap/heapam.c:4551 access/heap/heapam.c:4589 -#: access/heap/heapam.c:4854 access/heap/heapam_handler.c:467 +#: access/heap/heapam.c:4861 access/heap/heapam.c:4899 +#: access/heap/heapam.c:5164 access/heap/heapam_handler.c:468 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "\"%s\" 릴레이션의 잠금 정보를 구할 수 없음" -#: access/heap/heapam_handler.c:412 +#: access/heap/heapam.c:6267 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" msgstr "잠글 튜플은 동시 업데이트로 다른 파티션으로 이미 옮겨졌음" -#: access/heap/hio.c:536 access/heap/rewriteheap.c:659 +#: access/heap/hio.c:535 access/heap/rewriteheap.c:640 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "로우가 너무 큽니다: 크기 %zu, 최대값 %zu" -#: access/heap/rewriteheap.c:919 +#: access/heap/rewriteheap.c:885 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "\"%s\" 파일 쓰기 실패, %d / %d 기록함: %m." -#: access/heap/rewriteheap.c:1011 access/heap/rewriteheap.c:1128 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:2971 access/transam/xlog.c:3162 -#: access/transam/xlog.c:3938 access/transam/xlog.c:8744 -#: access/transam/xlogfuncs.c:702 backup/basebackup_server.c:151 -#: backup/basebackup_server.c:244 commands/dbcommands.c:518 -#: postmaster/postmaster.c:4557 postmaster/postmaster.c:5560 -#: replication/logical/origin.c:603 replication/slot.c:1777 -#: storage/file/copydir.c:157 storage/smgr/md.c:232 utils/time/snapmgr.c:1263 +#: 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:4111 +#: 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" msgstr "\"%s\" 파일을 만들 수 없음: %m" -#: access/heap/rewriteheap.c:1138 +#: access/heap/rewriteheap.c:1104 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "\"%s\" 파일을 %u 크기로 정리할 수 없음: %m" -#: access/heap/rewriteheap.c:1156 access/transam/timeline.c:384 +#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3021 access/transam/xlog.c:3218 -#: access/transam/xlog.c:3950 commands/dbcommands.c:530 -#: postmaster/postmaster.c:4567 postmaster/postmaster.c:4577 +#: 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:1767 -#: replication/slot.c:1812 storage/file/buffile.c:545 -#: storage/file/copydir.c:197 utils/init/miscinit.c:1605 -#: utils/init/miscinit.c:1616 utils/init/miscinit.c:1624 utils/misc/guc.c:4331 -#: utils/misc/guc.c:4362 utils/misc/guc.c:5490 utils/misc/guc.c:5508 -#: utils/time/snapmgr.c:1268 utils/time/snapmgr.c:1275 +#: 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" -#: access/heap/vacuumlazy.c:482 +#: access/heap/vacuumlazy.c:473 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "적극적으로 \"%s.%s.%s\" 청소 중" -#: access/heap/vacuumlazy.c:487 +#: access/heap/vacuumlazy.c:478 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 청소 중" -#: access/heap/vacuumlazy.c:635 +#: access/heap/vacuumlazy.c:626 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "\"%s.%s.%s\" 테이블 청소 끝남: 인덱스 탐색: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:637 #, c-format msgid "" "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": " @@ -1337,7 +1528,7 @@ msgstr "" "트랙젝션 ID 겹침 방지를 위한 적극적인 \"%s.%s.%s\" 테이블 자동 청소: 인덱스 " "탐색: %d\n" -#: access/heap/vacuumlazy.c:648 +#: access/heap/vacuumlazy.c:639 #, c-format msgid "" "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: " @@ -1345,29 +1536,29 @@ msgid "" msgstr "" "트랙젝션 ID 겹침 방지를 위한 \"%s.%s.%s\" 테이블 자동 청소: 인덱스 탐색: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:644 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "적극적인 \"%s.%s.%s\" 테이블 자동 청소: 인덱스 탐색: %d\n" -#: access/heap/vacuumlazy.c:655 +#: access/heap/vacuumlazy.c:646 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "\"%s.%s.%s\" 테이블 자동 청소: 인덱스 탐색: %d\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:653 #, c-format msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" msgstr "페이지: %u 삭제됨, %u 남음, %u 검사됨 (전체의 %.2f%%)\n" -#: access/heap/vacuumlazy.c:669 +#: access/heap/vacuumlazy.c:660 #, c-format msgid "" "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" msgstr "" "튜플: %.lld 삭제됨, %lld 남음, 아직 %lld 개의 튜플을 지워야하지만 못지웠음\n" -#: access/heap/vacuumlazy.c:675 +#: access/heap/vacuumlazy.c:666 #, c-format msgid "" "tuples missed: %lld dead from %u pages not removed due to cleanup lock " @@ -1376,37 +1567,37 @@ msgstr "" "놓친 튜플: %lld 개의 죽은 튜플이 %u 개의 페이지 안에 있음: cleanup 잠금 연결 " "때문\n" -#: access/heap/vacuumlazy.c:681 +#: access/heap/vacuumlazy.c:672 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" msgstr "삭제 가능한 컷오프: %u, which was %d XIDs old when operation ended\n" -#: access/heap/vacuumlazy.c:688 +#: access/heap/vacuumlazy.c:679 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "새 relfrozenxid: %u, which is %d XIDs ahead of previous value\n" -#: access/heap/vacuumlazy.c:696 +#: access/heap/vacuumlazy.c:687 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "새 relminmxid: %u, which is %d MXIDs ahead of previous value\n" -#: access/heap/vacuumlazy.c:699 +#: access/heap/vacuumlazy.c:690 #, c-format msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" msgstr "" "영구보관: 테이블의 %u개 페이지(전체의 %.2f%%)에서 %lld 개의 튜플을 영구 보관" "함\n" -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:698 msgid "index scan not needed: " msgstr "인덱스 검사 필요 없음: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:700 msgid "index scan needed: " msgstr "인덱스 검사 필요함: " -#: access/heap/vacuumlazy.c:711 +#: access/heap/vacuumlazy.c:702 #, c-format msgid "" "%u pages from table (%.2f%% of total) had %lld dead item identifiers " @@ -1414,21 +1605,21 @@ msgid "" msgstr "" "테이블의 %u개 페이지(전체의 %.2f%%)에서 %lld 개의 죽은 항목 식별자를 지웠음\n" -#: access/heap/vacuumlazy.c:716 +#: access/heap/vacuumlazy.c:707 msgid "index scan bypassed: " msgstr "인덱스 검사 통과됨: " -#: access/heap/vacuumlazy.c:718 +#: access/heap/vacuumlazy.c:709 msgid "index scan bypassed by failsafe: " msgstr "failsafe의 의해 인덱스 검사 통과됨: " -#: access/heap/vacuumlazy.c:720 +#: access/heap/vacuumlazy.c:711 #, c-format msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "" "테이블의 %u 개 페이지(전체의 %.2f%%)에서 %lld 개의 죽은 항목 식별자가 있음\n" -#: access/heap/vacuumlazy.c:735 +#: access/heap/vacuumlazy.c:726 #, c-format msgid "" "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u " @@ -1437,38 +1628,38 @@ msgstr "" "\"%s\" 인덱스: 페이지: 전체 가운데 %u, 새롭게 지운거 %u, 현재 지운거 %u, 재사" "용한 것 %u\n" -#: access/heap/vacuumlazy.c:747 commands/analyze.c:796 +#: 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 ms, 쓰기: %.3f ms\n" -#: access/heap/vacuumlazy.c:757 commands/analyze.c:799 +#: 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 MB/s, 평균 쓰기 속도: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:760 commands/analyze.c:801 +#: 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" -#: access/heap/vacuumlazy.c:765 +#: access/heap/vacuumlazy.c:756 #, c-format msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "WAL 사용량: %lld 레코드, %lld full page 이미지, %llu 바이트\n" -#: access/heap/vacuumlazy.c:769 commands/analyze.c:805 +#: access/heap/vacuumlazy.c:760 commands/analyze.c:803 #, c-format msgid "system usage: %s" msgstr "시스템 사용량: %s" -#: access/heap/vacuumlazy.c:2482 +#: 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:2642 +#: access/heap/vacuumlazy.c:2324 #, c-format msgid "" "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after " @@ -1477,12 +1668,12 @@ msgstr "" "\"%s.%s.%s\" 테이블의 불필요한 관리 작업은 통과했음, %d 번의 인덱스 검사로 굳" "이 필요 없음" -#: access/heap/vacuumlazy.c:2645 +#: 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:2646 +#: access/heap/vacuumlazy.c:2328 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or " @@ -1495,22 +1686,22 @@ msgstr "" "VACUUM 작업이 트랜잭션 ID가 증가하는 것을 따라 잡을 있는 다른 방법도 해 봐야 " "할 것 같습니다." -#: access/heap/vacuumlazy.c:2891 +#: access/heap/vacuumlazy.c:2590 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": 잠금 요청 충돌로 자료 비우기 작업을 중지합니다" -#: access/heap/vacuumlazy.c:2961 +#: access/heap/vacuumlazy.c:2660 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "\"%s\" 테이블: %u 에서 %u 페이지로 정리했음" -#: access/heap/vacuumlazy.c:3023 +#: access/heap/vacuumlazy.c:2722 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\" 테이블: 잠금 요청 충돌로 자료 비우기 작업이 지연되고 있음" -#: access/heap/vacuumlazy.c:3183 +#: access/heap/vacuumlazy.c:2841 #, c-format msgid "" "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary " @@ -1519,47 +1710,47 @@ msgstr "" "\"%s\" 청소 작업에서의 병렬 옵션은 무시함 --- 임시 테이블은 병렬 처리로 청소 " "할 수 없음" -#: access/heap/vacuumlazy.c:3399 +#: access/heap/vacuumlazy.c:3108 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "%u 블록 %u 오프셋 탐색 중 (해당 릴레이션: \"%s.%s\")" -#: access/heap/vacuumlazy.c:3402 +#: access/heap/vacuumlazy.c:3111 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "%u 블록(해당 릴레이션: \"%s.%s\")을 탐색 중" -#: access/heap/vacuumlazy.c:3406 +#: access/heap/vacuumlazy.c:3115 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "\"%s.%s\" 릴레이션을 탐색 중" -#: access/heap/vacuumlazy.c:3414 +#: 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:3417 +#: access/heap/vacuumlazy.c:3126 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "%u 블록(해당 릴레이션: \"%s.%s\")을 청소 중" -#: access/heap/vacuumlazy.c:3421 +#: access/heap/vacuumlazy.c:3130 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "\"%s.%s\" 릴레이션 청소 중" -#: access/heap/vacuumlazy.c:3426 commands/vacuumparallel.c:1074 +#: 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:3431 commands/vacuumparallel.c:1080 +#: 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\")을 정돈(clean up) 중" -#: access/heap/vacuumlazy.c:3437 +#: access/heap/vacuumlazy.c:3146 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "\"%s.%s\" 릴레이션을 %u 블럭으로 줄이는 중" @@ -1574,19 +1765,24 @@ msgstr "\"%s\" 접근 방법은 %s 자료형에는 쓸 수 없음" msgid "index access method \"%s\" does not have a handler" msgstr "\"%s\" 인덱스 접근 방법에 대한 핸들러가 없음" -#: access/index/genam.c:490 +#: access/index/genam.c:489 #, c-format msgid "transaction aborted during system catalog scan" msgstr "시스템 카탈로그 탐색 중 트랜잭션 중지됨" -#: access/index/indexam.c:142 catalog/objectaddress.c:1394 -#: commands/indexcmds.c:2867 commands/tablecmds.c:272 commands/tablecmds.c:296 -#: commands/tablecmds.c:17163 commands/tablecmds.c:18935 +#: access/index/genam.c:657 access/index/indexam.c:82 +#, c-format +msgid "cannot access index \"%s\" while it is being reindexed" +msgstr "reindex 시작할 때는 \"%s\" 인덱스를 접근할 없음" + +#: 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:19740 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" 개체는 인덱스가 아닙니다" -#: access/index/indexam.c:979 +#: access/index/indexam.c:1028 #, c-format msgid "operator class %s has no options" msgstr "%s 연산자 클래스는 옵션이 없습니다" @@ -1607,7 +1803,7 @@ msgid "This may be because of a non-immutable index expression." msgstr "이 문제는 non-immutable 인덱스 표현식 때문인듯 합니다." #: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 -#: parser/parse_utilcmd.c:2317 +#: parser/parse_utilcmd.c:2323 #, c-format msgid "index \"%s\" is not a btree" msgstr "\"%s\" 인덱스는 btree 인덱스가 아닙니다" @@ -1621,12 +1817,12 @@ msgstr "" "\"%s\" 인덱스의 버전이 틀립니다: 파일 버전 %d, 현재 버전 %d, 최소 지원 버전 " "%d" -#: access/nbtree/nbtpage.c:1866 +#: access/nbtree/nbtpage.c:1861 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "\"%s\" 인덱스에 반쯤 죽은(half-dead) 내부 페이지가 있음" -#: access/nbtree/nbtpage.c:1868 +#: access/nbtree/nbtpage.c:1863 #, c-format msgid "" "This can be caused by an interrupted VACUUM in version 9.3 or older, before " @@ -1635,7 +1831,7 @@ msgstr "" "이 문제는 9.3 버전 이하 환경에서 VACUUM 작업이 중지되고, 그 상태로 업그레이드" "되었을 가능성이 큽니다. 해당 인덱스를 다시 만드십시오." -#: access/nbtree/nbtutils.c:2662 +#: access/nbtree/nbtutils.c:5108 #, c-format msgid "" "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" @@ -1643,12 +1839,12 @@ msgstr "" "인덱스 행 크기(%zu)가 btree(%u 버전)의 최대값(%zu)을 초과함 (해당 인덱스: " "\"%s\")" -#: access/nbtree/nbtutils.c:2668 +#: 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:2672 +#: access/nbtree/nbtutils.c:5118 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1667,13 +1863,19 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에는 %s 자료형과 %s 자료형용 지원 함수가 " "빠졌음" +#: access/sequence/sequence.c:75 access/table/table.c:145 +#: optimizer/util/plancat.c:144 +#, c-format +msgid "cannot open relation \"%s\"" +msgstr "\"%s\" 릴레이션을 열 수 없음" + #: access/spgist/spgutils.c:245 #, c-format msgid "" "compress method must be defined when leaf type is different from input type" msgstr "입력 자료형에서 리프 유형이 다를 때 압축 방법은 반드시 정의해야 함" -#: access/spgist/spgutils.c:1008 +#: access/spgist/spgutils.c:1028 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST 내부 튜플 크기가 초과됨: 현재값 %zu, 최대값 %zu" @@ -1692,73 +1894,69 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %d 지원 함수가 %s 자료형용으로 없습니" "다." -#: access/table/table.c:145 optimizer/util/plancat.c:145 -#, c-format -msgid "cannot open relation \"%s\"" -msgstr "\"%s\" 릴레이션을 열 수 없음" - -#: access/table/tableam.c:265 +#: access/table/tableam.c:255 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u)가 바르지 않음, 해당 릴레이션: \"%s\"" -#: access/table/tableamapi.c:116 +#: access/table/tableamapi.c:109 #, c-format -msgid "%s cannot be empty." -msgstr "%s 값은 비워 둘 수 없음" +msgid "\"%s\" cannot be empty." +msgstr "\"%s\" 값은 비워 둘 수 없음" -#: access/table/tableamapi.c:123 access/transam/xlogrecovery.c:4774 +#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4858 #, c-format -msgid "%s is too long (maximum %d characters)." -msgstr "%s 설정값이 너무 깁니다 (최대 %d 문자)" +msgid "\"%s\" is too long (maximum %d characters)." +msgstr "\"%s\" 설정값이 너무 깁니다 (최대 %d 문자)" -#: access/table/tableamapi.c:146 +#: access/table/tableamapi.c:139 #, c-format msgid "table access method \"%s\" does not exist" msgstr "\"%s\" 테이블 접근 방법이 없습니다" -#: access/table/tableamapi.c:151 +#: access/table/tableamapi.c:144 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "\"%s\" 테이블 접근 방법이 없습니다." -#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:152 +#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:151 #, c-format msgid "sample percentage must be between 0 and 100" msgstr "샘플 퍼센트 값은 0에서 100 사이여야 함" -#: access/transam/commit_ts.c:279 +#: access/transam/commit_ts.c:287 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "%u 트랜잭션의 커밋 타임스탬프를 알 수 없음" -#: access/transam/commit_ts.c:377 +#: access/transam/commit_ts.c:385 #, c-format msgid "could not get commit timestamp data" msgstr "커밋 타임스탬프 자료를 찾을 수 없음" -#: access/transam/commit_ts.c:379 +#: access/transam/commit_ts.c:387 #, c-format msgid "" "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "운영 서버에서 \"%s\" 환경 설정 매개 변수를 설정했는지 확인하세요." -#: access/transam/commit_ts.c:381 +#: access/transam/commit_ts.c:389 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "\"%s\" 환경 설정 매개 변수를 지정하세요." -#: access/transam/multixact.c:1023 +#: access/transam/multixact.c:1091 #, c-format msgid "" -"database is not accepting commands that generate new MultiXactIds to avoid " +"database is not accepting commands that assign new MultiXactIds to avoid " "wraparound data loss in database \"%s\"" msgstr "" "\"%s\" 데이터베이스 자료 손실을 막기 위해 새로운 MultiXactId 만드는 작업을 " "더 이상 할 수 없습니다." -#: access/transam/multixact.c:1025 access/transam/multixact.c:1032 -#: access/transam/multixact.c:1056 access/transam/multixact.c:1065 +#: 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" @@ -1766,19 +1964,19 @@ msgid "" "drop stale replication slots." msgstr "" "해당 데이터베이스 단위로 VACUUM 작업을 진행하십시오.\n" -"또한 오래된 트랜잭션을 커밋또는 롤백하거나 잠긴 복제 슬롯을 지울 필요가 있습" +"또한 오래된 트랜잭션을 커밋 또는 롤백하거나 잠긴 복제 슬롯을 지울 필요가 있습" "니다." -#: access/transam/multixact.c:1030 +#: access/transam/multixact.c:1098 #, c-format msgid "" -"database is not accepting commands that generate new MultiXactIds to avoid " +"database is not accepting commands that assign new MultiXactIds to avoid " "wraparound data loss in database with OID %u" msgstr "" "%u OID 데이터베이스 자료 손실을 막기 위해 새로운 MultiXactId 만드는 작업을 " "더 이상 할 수 없습니다." -#: access/transam/multixact.c:1051 access/transam/multixact.c:2333 +#: 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 "" @@ -1787,7 +1985,7 @@ msgstr[0] "" "\"%s\" 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 VACUUM 작업을 해야 합니" "다." -#: access/transam/multixact.c:1060 access/transam/multixact.c:2342 +#: 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" @@ -1797,12 +1995,12 @@ msgstr[0] "" "%u OID 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 VACUUM 작업을 해야 합니" "다." -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1189 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "multixact \"회수\" 초과" -#: access/transam/multixact.c:1122 +#: access/transam/multixact.c:1190 #, c-format msgid "" "This command would create a multixact with %u members, but the remaining " @@ -1813,17 +2011,17 @@ msgid_plural "" msgstr[0] "" "이 명령은 %u 개의 multixact를 써야하는데, 쓸 수 있는 공간은 %u 개 뿐입니다." -#: access/transam/multixact.c:1127 +#: 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." +"\"vacuum_multixact_freeze_min_age\" and " +"\"vacuum_multixact_freeze_table_age\" settings." msgstr "" -"vacuum_multixact_freeze_min_age, vacuum_multixact_freeze_table_age 값을 조정" -"하고, %u OID 데이터베이스 대상으로 VACUUM 작업을 하십시오." +"\"vacuum_multixact_freeze_min_age\", \"vacuum_multixact_freeze_table_age\" 값" +"을 조정하고, %u OID 데이터베이스 대상으로 VACUUM 작업을 하십시오." -#: access/transam/multixact.c:1158 +#: access/transam/multixact.c:1226 #, c-format msgid "" "database with OID %u must be vacuumed before %d more multixact member is used" @@ -1834,42 +2032,41 @@ msgstr[0] "" "%u OID 데이터베이스는 %d 개의 멀티트랜잭션을 사용하기 전에 vacuum 작업을 해" "야 합니다." -#: access/transam/multixact.c:1163 +#: 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." +"\"vacuum_multixact_freeze_min_age\" and " +"\"vacuum_multixact_freeze_table_age\" settings." msgstr "" -"vacuum_multixact_freeze_min_age 설정값과 vacuum_multixact_freeze_table_age 값" -"을 줄여서 데이터베이스 단위로 VACUUM 작업을 진행하세요." +"\"vacuum_multixact_freeze_min_age\" 설정값과 " +"\"vacuum_multixact_freeze_table_age\" 값을 줄여서 데이터베이스 단위로 VACUUM " +"작업을 진행하세요." -#: access/transam/multixact.c:1302 +#: access/transam/multixact.c:1371 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "%u번 MultiXactId 더이상 없음 -- 번호 겹침 현상 발생" -#: access/transam/multixact.c:1308 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "%u번 MultiXactId를 만들 수 없음 -- 번호 겹침 현상 발생" -#: access/transam/multixact.c:2338 access/transam/multixact.c:2347 -#: access/transam/varsup.c:151 access/transam/varsup.c:158 -#: access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:2479 access/transam/multixact.c:2488 #, c-format msgid "" -"To avoid a database shutdown, execute a database-wide VACUUM in that " -"database.\n" +"To avoid MultiXactId 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 "" -"데이터베이스가 종료되지 않도록 하려면 데이터베이스 수준의 VACUUM을 실행하십시" +"MultiXactId 할당 실패를 피하려면, 데이터베이스 수준의 VACUUM을 실행하십시" "오.\n" -"또한 오래된 트랜잭션을 커밋또는 롤백 하거나, 잠긴 복제 슬롯을 지울 필요가 있" +"또한 오래된 트랜잭션을 커밋 또는 롤백 하거나, 잠긴 복제 슬롯을 지울 필요가 있" "습니다." -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2767 #, c-format msgid "" "MultiXact member wraparound protections are disabled because oldest " @@ -1878,19 +2075,19 @@ msgstr "" "가장 오래된 체크포인트 작업이 완료된 %u 멀티 트랜잭션 번호가 디스크에 없기 때" "문에, 멀티 트랜잭션 번호 겹침 방지 기능이 비활성화 되어 있습니다." -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2789 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "멀티 트랜잭션 번호 겹침 방지 기능이 활성화 되었음" -#: access/transam/multixact.c:3027 +#: access/transam/multixact.c:3180 #, c-format msgid "" "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "" "가장 오래된 멀티 트랜잭션 번호는 %u, 가장 최신 것은 %u, truncate 작업 건너뜀" -#: access/transam/multixact.c:3045 +#: access/transam/multixact.c:3198 #, c-format msgid "" "cannot truncate up to MultiXact %u because it does not exist on disk, " @@ -1899,163 +2096,168 @@ msgstr "" "디스크에 해당 멀티 트랜잭션 번호가 없어, %u 멀티 트랜잭션 번호로 truncate 못" "함, truncate 작업 건너뜀" -#: access/transam/multixact.c:3359 +#: access/transam/multixact.c:3517 #, c-format msgid "invalid MultiXactId: %u" msgstr "잘못된 MultiXactId: %u" -#: access/transam/parallel.c:729 access/transam/parallel.c:848 +#: access/transam/parallel.c:748 access/transam/parallel.c:867 #, c-format msgid "parallel worker failed to initialize" msgstr "병렬 작업자 초기화 실패" -#: access/transam/parallel.c:730 access/transam/parallel.c:849 +#: 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:910 +#: access/transam/parallel.c:929 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "병렬 트랜잭션 처리 중 postmaster 종료됨" -#: access/transam/parallel.c:1097 +#: access/transam/parallel.c:1116 #, c-format msgid "lost connection to parallel worker" msgstr "병렬 처리 작업자 프로세스 연결 끊김" -#: access/transam/parallel.c:1163 access/transam/parallel.c:1165 +#: access/transam/parallel.c:1172 access/transam/parallel.c:1174 msgid "parallel worker" msgstr "병렬 처리 작업자" -#: access/transam/parallel.c:1319 replication/logical/applyparallelworker.c:893 +#: 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:1324 replication/logical/applyparallelworker.c:899 +#: access/transam/parallel.c:1349 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "동적 공유 메모리 세그먼트에 잘못된 매직 번호가 있음" -#: access/transam/rmgr.c:84 +#: access/transam/rmgr.c:93 #, c-format msgid "resource manager with ID %d not registered" msgstr "%d ID의 자원 관리자가 등록되어 있지 않음" -#: access/transam/rmgr.c:85 +#: access/transam/rmgr.c:94 #, c-format msgid "" "Include the extension module that implements this resource manager in " -"shared_preload_libraries." +"\"shared_preload_libraries\"." msgstr "" -"이 자원 관리자 확장 모듈 라이브러리를 shared_preload_libraries 설정값으로 추" -"가해주세요." +"이 자원 관리자 구현하는 그 확장 모듈을 \"shared_preload_libraries\" 설정값으" +"로 추가해주세요." -#: access/transam/rmgr.c:101 +#: access/transam/rmgr.c:110 #, c-format msgid "custom resource manager name is invalid" msgstr "사용자 정의 자원 관리자 이름이 바르지 않음" -#: access/transam/rmgr.c:102 +#: access/transam/rmgr.c:111 #, c-format msgid "Provide a non-empty name for the custom resource manager." msgstr "사용자 정의 자원 관리자 이름은 비워둘 수 없습니다." -#: access/transam/rmgr.c:105 +#: access/transam/rmgr.c:114 #, c-format msgid "custom resource manager ID %d is out of range" msgstr "사용자 정의 자원 관리자 %d ID 번호의 범위가 벗어남" -#: access/transam/rmgr.c:106 +#: access/transam/rmgr.c:115 #, c-format msgid "Provide a custom resource manager ID between %d and %d." msgstr "사용자 정의 자원 관리자 ID는 %d 에서 %d 까지만 지정할 수 있음." -#: access/transam/rmgr.c:111 access/transam/rmgr.c:116 -#: access/transam/rmgr.c:128 +#: access/transam/rmgr.c:120 access/transam/rmgr.c:125 +#: access/transam/rmgr.c:137 #, c-format msgid "failed to register custom resource manager \"%s\" with ID %d" msgstr "\"%s\" 사용자 정의 자원 관리자를 %d ID로 등록할 수 없음" -#: access/transam/rmgr.c:112 +#: access/transam/rmgr.c:121 #, c-format msgid "" "Custom resource manager must be registered while initializing modules in " -"shared_preload_libraries." +"\"shared_preload_libraries\"." msgstr "" -"사용자 정의 자원 관리자를 사용하려면 먼저 shared_preload_libraries 설정값으" -"로 등록되어야 합니다." +"사용자 정의 자원 관리자를 사용하려면 먼저 \"shared_preload_libraries\" 설정값" +"으로 등록되어야 합니다." -#: access/transam/rmgr.c:117 +#: access/transam/rmgr.c:126 #, c-format msgid "Custom resource manager \"%s\" already registered with the same ID." msgstr "\"%s\" 사용자 정의 자원 관리자 ID가 이미 등록되어 있습니다." -#: access/transam/rmgr.c:129 +#: access/transam/rmgr.c:138 #, c-format msgid "Existing resource manager with ID %d has the same name." msgstr "%d ID 자원 관리자가 같은 이름입니다." -#: access/transam/rmgr.c:135 +#: access/transam/rmgr.c:144 #, c-format msgid "registered custom resource manager \"%s\" with ID %d" msgstr "\"%s\" 사용자 정의 자원 관리자가 %d ID로 등록됨" -#: access/transam/slru.c:714 +#: access/transam/slru.c:361 +#, c-format +msgid "\"%s\" must be a multiple of %d" +msgstr "\"%s\" 값은 %d의 배수여야 함" + +#: access/transam/slru.c:830 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "\"%s\" 파일 없음, 0으로 읽음" -#: access/transam/slru.c:946 access/transam/slru.c:952 -#: access/transam/slru.c:960 access/transam/slru.c:965 -#: access/transam/slru.c:972 access/transam/slru.c:977 -#: access/transam/slru.c:984 access/transam/slru.c:991 +#: 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:947 +#: access/transam/slru.c:1060 #, c-format msgid "Could not open file \"%s\": %m." msgstr "\"%s\" 파일을 열 수 없음: %m." -#: access/transam/slru.c:953 +#: 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:961 +#: 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:966 +#: 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:973 +#: 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:978 +#: 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:985 +#: access/transam/slru.c:1098 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "\"%s\" 파일 fsync 실패: %m." -#: access/transam/slru.c:992 +#: access/transam/slru.c:1105 #, c-format msgid "Could not close file \"%s\": %m." msgstr "\"%s\" 파일을 닫을 수 없음: %m." -#: access/transam/slru.c:1253 +#: access/transam/slru.c:1431 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "\"%s\" 디렉터리를 비울 수 없음: 랩어라운드 발생" @@ -2100,130 +2302,131 @@ msgstr "타임라인 ID는 하위 타임라인 ID보다 작아야 합니다." msgid "requested timeline %u is not in this server's history" msgstr "요청한 %u 타이라인이 이 서버 내역에는 없음" -#: access/transam/twophase.c:386 +#: access/transam/twophase.c:368 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "\"%s\" 트랜잭션 식별자가 너무 깁니다" -#: access/transam/twophase.c:393 +#: access/transam/twophase.c:375 #, c-format msgid "prepared transactions are disabled" msgstr "준비된 트랜잭션이 비활성화됨" -#: access/transam/twophase.c:394 +#: access/transam/twophase.c:376 #, c-format -msgid "Set max_prepared_transactions to a nonzero value." -msgstr "max_prepared_transactions 설정값을 0이 아닌 값으로 설정하십시오." +msgid "Set \"max_prepared_transactions\" to a nonzero value." +msgstr "\"max_prepared_transactions\" 설정값을 0이 아닌 값으로 설정하십시오." -#: access/transam/twophase.c:413 +#: access/transam/twophase.c:395 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "\"%s\" 이름의 트랜잭션 식별자가 이미 사용 중입니다" -#: access/transam/twophase.c:422 access/transam/twophase.c:2517 +#: access/transam/twophase.c:404 access/transam/twophase.c:2547 #, c-format msgid "maximum number of prepared transactions reached" msgstr "준비된 트랜잭션의 최대 개수를 모두 사용했습니다" -#: access/transam/twophase.c:423 access/transam/twophase.c:2518 +#: access/transam/twophase.c:405 access/transam/twophase.c:2548 #, c-format -msgid "Increase max_prepared_transactions (currently %d)." -msgstr "max_prepared_transactions 값을 늘려주세요 (현재 %d)." +msgid "Increase \"max_prepared_transactions\" (currently %d)." +msgstr "\"max_prepared_transactions\" 값을 늘려주세요 (현재 %d)." -#: access/transam/twophase.c:599 +#: access/transam/twophase.c:580 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "\"%s\" 이름의 준비된 트랜잭션 식별자가 여러 곳에서 쓰이고 있습니다" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:586 #, c-format msgid "permission denied to finish prepared transaction" msgstr "준비된 트랜잭션 끝내기 작업 권한 없음" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:587 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "해당 준비된 트랜잭션의 소유주이거나 superuser여야 합니다" -#: access/transam/twophase.c:617 +#: access/transam/twophase.c:598 #, c-format msgid "prepared transaction belongs to another database" msgstr "준비된 트랜잭션이 다른 데이터베이스에 속해 있음" -#: access/transam/twophase.c:618 +#: access/transam/twophase.c:599 #, c-format msgid "" "Connect to the database where the transaction was prepared to finish it." msgstr "작업을 마치려면 그 준비된 트랜잭션이 있는 데이터베이스에 연결하십시오." -#: access/transam/twophase.c:633 +#: access/transam/twophase.c:614 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "\"%s\" 이름의 준비된 트랜잭션이 없습니다" -#: access/transam/twophase.c:1168 +#: access/transam/twophase.c:1190 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "2단계 상태 파일 최대 길이를 초과함" -#: access/transam/twophase.c:1323 +#: access/transam/twophase.c:1345 #, c-format msgid "incorrect size of file \"%s\": %lld byte" msgid_plural "incorrect size of file \"%s\": %lld bytes" msgstr[0] "\"%s\" 파일 크기가 이상함: %lld 바이트" -#: access/transam/twophase.c:1332 +#: access/transam/twophase.c:1354 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "\"%s\" 파일의 CRC 값 맞춤 실패" -#: access/transam/twophase.c:1350 +#: access/transam/twophase.c:1372 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %lld" -#: access/transam/twophase.c:1365 +#: access/transam/twophase.c:1387 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "\"%s\" 파일에 잘못된 매직 번호가 저장되어 있음" -#: access/transam/twophase.c:1371 +#: access/transam/twophase.c:1393 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "\"%s\" 파일 크기가 이상함" -#: access/transam/twophase.c:1383 +#: access/transam/twophase.c:1405 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "계산된 CRC 체크섬 값이 파일에 \"%s\" 파일에 저장된 값과 다름" -#: access/transam/twophase.c:1413 access/transam/xlogrecovery.c:590 -#: replication/logical/logical.c:209 replication/walsender.c:687 +#: access/transam/twophase.c:1435 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:1423 +#: access/transam/twophase.c:1445 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%X, %s" -#: access/transam/twophase.c:1428 +#: access/transam/twophase.c:1450 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%X" -#: access/transam/twophase.c:1436 +#: access/transam/twophase.c:1458 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "WAL %X/%X 위치에 2단계 커밋 상태 자료가 없습니다" -#: access/transam/twophase.c:1732 +#: access/transam/twophase.c:1761 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "\"%s\" 파일을 다시 만들 수 없음: %m" -#: access/transam/twophase.c:1859 +#: access/transam/twophase.c:1888 #, c-format msgid "" "%u two-phase state file was written for a long-running prepared transaction" @@ -2232,48 +2435,48 @@ msgid_plural "" msgstr[0] "" "긴 실행 미리 준비된 트랜잭션 용 %u 개의 2단계 상태 파일이 저장되었음" -#: access/transam/twophase.c:2093 +#: access/transam/twophase.c:2123 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "공유 메모리에서 %u 준비된 트랜잭션을 복구함" -#: access/transam/twophase.c:2186 +#: access/transam/twophase.c:2216 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "%u 트랜잭션에서 사용하는 오래된 two-phase 상태정보 파일을 삭제함" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2223 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "" "%u 트랜잭션에서 사용하는 오래된 two-phase 상태정보를 공유 메모리에서 삭제함" -#: access/transam/twophase.c:2206 +#: access/transam/twophase.c:2236 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "%u 트랜잭션에서 사용하는 future two-phase 상태정보 파일을 삭제함" -#: access/transam/twophase.c:2213 +#: access/transam/twophase.c:2243 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "%u 트랜잭션에서 사용하는 future two-phase 상태정보를 메모리에서 삭제함" -#: access/transam/twophase.c:2238 +#: access/transam/twophase.c:2268 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "%u 트랜잭션에서 사용하는 two-phase 상태정보 파일이 손상되었음" -#: access/transam/twophase.c:2243 +#: access/transam/twophase.c:2273 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "%u 트랜잭션에서 사용하는 메모리에 있는 two-phase 상태정보가 손상되었음" -#: access/transam/twophase.c:2500 +#: access/transam/twophase.c:2530 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "%u 트랜잭션에서 사용하는 two-phase 상태정보 파일을 복구할 없음" -#: access/transam/twophase.c:2502 +#: access/transam/twophase.c:2532 #, c-format msgid "" "Two-phase state file has been found in WAL record %X/%X, but this " @@ -2282,223 +2485,261 @@ msgstr "" "WAL 레코드 %X/%X 에서 2PC 상태 파일을 찾았지만, 그 트랜잭션은 이미 디스크에 " "기록한 상태입니다." -#: access/transam/twophase.c:2510 jit/jit.c:205 utils/fmgr/dfmgr.c:209 -#: utils/fmgr/dfmgr.c:415 +#: access/transam/twophase.c:2540 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:129 +#: access/transam/varsup.c:156 #, c-format msgid "" -"database is not accepting commands to avoid wraparound data loss in database " -"\"%s\"" +"database is not accepting commands that assign new transaction IDs to avoid " +"wraparound data loss in database \"%s\"" +msgstr "" +"\"%s\" 데이터베이스 자료 손실을 막기 위해 새로운 트랜잭션 ID 만드는 작업을 " +"더 이상 할 수 없습니다." + +#: access/transam/varsup.c:163 +#, c-format +msgid "" +"database is not accepting commands that assign new transaction IDs to avoid " +"wraparound data loss in database with OID %u" msgstr "" -"\"%s\" 데이터베이스 트랜잭션 ID 겹침에 의한 자료 손실을 방지하기 위해 더 이" -"상 자료 조작 작업을 허용하지 않습니다" +"%u OID 데이터베이스 자료 손실을 막기 위해 새로운 트랜잭션 ID 만드는 작업을 " +"더 이상 할 수 없습니다." + +#: 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:131 access/transam/varsup.c:138 +#: access/transam/varsup.c:178 #, c-format msgid "" -"Stop the postmaster and vacuum that database in single-user mode.\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 "" -"postmaster를 중지하고 단일 사용자 모드로 서버를 실행한 뒤 VACUUM 작업을 하십" -"시오.\n" -"또한 오래된 트랜잭션을 커밋 또는 롤백하거나, 잠긴 복제 슬롯을 지울 필요가 있" +"트랜잭션 ID를 계속 할당할 수 있게 하려면 데이터베이스 수준의 VACUUM을 실행하" +"십시오.\n" +"또한 오래된 트랜잭션을 커밋 또는 롤백 하거나, 잠긴 복제 슬롯을 지울 필요가 있" "습니다." -#: access/transam/varsup.c:136 +#: access/transam/varsup.c:182 access/transam/varsup.c:497 +#, c-format +msgid "database with OID %u must be vacuumed within %u transactions" +msgstr "%u OID 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 청소해야 합니다" + +#: access/transam/varsup.c:185 access/transam/varsup.c:493 +#: access/transam/varsup.c:500 #, c-format msgid "" -"database is not accepting commands to avoid wraparound data loss in database " -"with OID %u" +"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 "" -"%u OID 데이터베이스에서 자료 겹침으로 발생할 수 있는 자료 손실을 방지하기 위" -"해 명령을 수락하지 않음" +"XID 할당 실패를 피하려면 데이터베이스 수준의 VACUUM을 실행하십시오.\n" +"또한 오래된 트랜잭션을 커밋 또는 롤백 하거나, 잠긴 복제 슬롯을 지울 필요가 있" +"습니다." -#: access/transam/varsup.c:148 access/transam/varsup.c:463 +#: access/transam/xact.c:649 #, c-format -msgid "database \"%s\" must be vacuumed within %u transactions" -msgstr "\"%s\" 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 청소해야 합니다" +msgid "cannot assign transaction IDs during a parallel operation" +msgstr "병렬 처리 중에는 트랜잭션 ID를 지정할 수 없음" -#: access/transam/varsup.c:155 access/transam/varsup.c:470 +#: access/transam/xact.c:840 #, c-format -msgid "database with OID %u must be vacuumed within %u transactions" -msgstr "%u OID 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 청소해야 합니다" +msgid "cannot modify data in a parallel worker" +msgstr "병렬 작업자는 자료 변경을 할 수 없음" + +#: access/transam/xact.c:1115 +#, c-format +msgid "cannot start commands during a parallel operation" +msgstr "병렬 처리 중에는 명령을 시작할 수 없음" -#: access/transam/xact.c:1102 +#: access/transam/xact.c:1123 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "하나의 트랜잭션 안에서는 2^32-2 개의 명령을 초과할 수 없음" -#: access/transam/xact.c:1643 +#: access/transam/xact.c:1664 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "커밋된 하위 트랜잭션 수(%d)가 최대치를 초과함" -#: access/transam/xact.c:2513 +#: access/transam/xact.c:2561 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "임시 개체 대해 실행된 트랜잭션을 PREPARE할 수 없음" -#: access/transam/xact.c:2523 +#: access/transam/xact.c:2571 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "스냅샷으로 내보낸 트랜잭션은 PREPARE 작업을 할 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3489 +#: access/transam/xact.c:3593 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s 명령은 트랜잭션 블럭안에서 실행할 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3499 +#: access/transam/xact.c:3603 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s 명령은 서브트랜잭션 블럭안에서 실행할 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3509 +#: access/transam/xact.c:3613 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s 절은 파이프라인에서 실행될 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3519 +#: access/transam/xact.c:3623 #, c-format msgid "%s cannot be executed from a function" msgstr "%s 절은 함수에서 실행될 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3590 access/transam/xact.c:3915 -#: access/transam/xact.c:3994 access/transam/xact.c:4117 -#: access/transam/xact.c:4268 access/transam/xact.c:4337 -#: access/transam/xact.c:4448 +#: access/transam/xact.c:3694 access/transam/xact.c:4019 +#: access/transam/xact.c:4098 access/transam/xact.c:4221 +#: access/transam/xact.c:4372 access/transam/xact.c:4441 +#: access/transam/xact.c:4552 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s 명령은 트랜잭션 블럭에서만 사용될 수 있음" -#: access/transam/xact.c:3801 +#: access/transam/xact.c:3905 #, c-format msgid "there is already a transaction in progress" msgstr "이미 트랜잭션 작업이 진행 중입니다" -#: access/transam/xact.c:3920 access/transam/xact.c:3999 -#: access/transam/xact.c:4122 +#: access/transam/xact.c:4024 access/transam/xact.c:4103 +#: access/transam/xact.c:4226 #, c-format msgid "there is no transaction in progress" msgstr "현재 트랜잭션 작업을 하지 않고 있습니다" -#: access/transam/xact.c:4010 +#: access/transam/xact.c:4114 #, c-format msgid "cannot commit during a parallel operation" msgstr "데이터베이스 트랜잭션을 commit 할 수 없음" -#: access/transam/xact.c:4133 +#: access/transam/xact.c:4237 #, c-format msgid "cannot abort during a parallel operation" msgstr "병렬 작업 중에는 중지 할 수 없음" -#: access/transam/xact.c:4232 +#: access/transam/xact.c:4336 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "병렬 작업 중에는 savepoint 지정을 할 수 없음" -#: access/transam/xact.c:4319 +#: access/transam/xact.c:4423 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "병렬 작업 중에는 savepoint를 지울 수 없음" -#: access/transam/xact.c:4329 access/transam/xact.c:4380 -#: access/transam/xact.c:4440 access/transam/xact.c:4489 +#: access/transam/xact.c:4433 access/transam/xact.c:4484 +#: access/transam/xact.c:4544 access/transam/xact.c:4593 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "\"%s\" 이름의 저장위치가 없음" -#: access/transam/xact.c:4386 access/transam/xact.c:4495 +#: access/transam/xact.c:4490 access/transam/xact.c:4599 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "현재 저장위치 수준에서 \"%s\" 이름의 저장위치가 없음" -#: access/transam/xact.c:4428 +#: access/transam/xact.c:4532 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "병렬 작업 중에는 savepoint 지정 취소 작업을 할 수 없음" -#: access/transam/xact.c:4556 -#, c-format -msgid "cannot start subtransactions during a parallel operation" -msgstr "병렬 처리 중에는 하위트랜잭션을 시작할 수 없음" - -#: access/transam/xact.c:4624 -#, c-format -msgid "cannot commit subtransactions during a parallel operation" -msgstr "병렬 처리 중에는 하위트랜잭션을 커밋할 수 없음" - -#: access/transam/xact.c:5270 +#: access/transam/xact.c:5376 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "하나의 트랜잭션 안에서는 2^32-1 개의 하위트랜잭션을 초과할 수 없음" -#: access/transam/xlog.c:1466 +#: access/transam/xlog.c:1542 #, c-format msgid "" "request to flush past end of generated WAL; request %X/%X, current position " "%X/%X" msgstr "생성된 WAL의 끝을 지난 flush 요청, 요청위치: %X/%X, 현재위치: %X/%X" +#: access/transam/xlog.c:1769 +#, c-format +msgid "" +"cannot read past end of generated WAL: requested %X/%X, current position %X/" +"%X" +msgstr "" +"생성된 WAL의 끝을 지나서 읽을 수 없음: 요청위치: %X/%X, 현재위치: %X/%X" + +#: 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 조각 파일은 1MB부터 1GB 사이 2^n 크기여야 합니다." + #: access/transam/xlog.c:2228 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "%s 로그 파일 쓰기 실패, 위치 %u, 길이 %zu: %m" +msgid "\"%s\" must be set to -1 during binary upgrade mode." +msgstr "바이너리 업그레이드 모드 중는 \"%s\" 값은 -1이어야 합니다." + +#: 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:3455 access/transam/xlogutils.c:833 -#: replication/walsender.c:2725 +#: 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 "요청한 %s WAL 조각 파일은 이미 지워졌음" -#: access/transam/xlog.c:3739 +#: access/transam/xlog.c:4061 #, c-format msgid "could not rename file \"%s\": %m" msgstr "\"%s\" 파일의 이름을 바꿀 수 없음: %m" -#: access/transam/xlog.c:3781 access/transam/xlog.c:3791 +#: 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:3797 +#: 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:3800 commands/dbcommands.c:3172 +#: 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:3867 +#: access/transam/xlog.c:4212 #, c-format msgid "could not generate secret authorization token" msgstr "비밀 인증 토큰을 만들 수 없음" -#: access/transam/xlog.c:4017 access/transam/xlog.c:4026 -#: access/transam/xlog.c:4050 access/transam/xlog.c:4057 -#: access/transam/xlog.c:4064 access/transam/xlog.c:4069 -#: access/transam/xlog.c:4076 access/transam/xlog.c:4083 -#: access/transam/xlog.c:4090 access/transam/xlog.c:4097 -#: access/transam/xlog.c:4104 access/transam/xlog.c:4111 -#: access/transam/xlog.c:4120 access/transam/xlog.c:4127 -#: utils/init/miscinit.c:1762 +#: 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:4018 +#: access/transam/xlog.c:4364 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -2507,7 +2748,7 @@ msgstr "" "데이터베이스 클러스터는 PG_CONTROL_VERSION %d (0x%08x)(으)로 초기화되었지만 " "서버는 PG_CONTROL_VERSION %d (0x%08x)(으)로 컴파일되었습니다." -#: access/transam/xlog.c:4022 +#: access/transam/xlog.c:4368 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -2515,7 +2756,7 @@ msgid "" msgstr "" "이것은 바이트 순서 불일치 문제일 수 있습니다. initdb 작업이 필요해 보입니다." -#: access/transam/xlog.c:4027 +#: access/transam/xlog.c:4374 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -2524,18 +2765,18 @@ msgstr "" "이 데이터베이스 클러스터는 PG_CONTROL_VERSION %d 버전으로 초기화 되었지만, 서" "버는 PG_CONTROL_VERSION %d 버전으로 컴파일 되어있습니다." -#: access/transam/xlog.c:4030 access/transam/xlog.c:4054 -#: access/transam/xlog.c:4061 access/transam/xlog.c:4066 +#: 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:4041 +#: access/transam/xlog.c:4389 #, c-format msgid "incorrect checksum in control file" msgstr "컨트롤 파일에 잘못된 체크섬 값이 있습니다" -#: access/transam/xlog.c:4051 +#: access/transam/xlog.c:4400 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -2544,7 +2785,7 @@ msgstr "" "이 데이터베이스 클러스터는 CATALOG_VERSION_NO %d 버전으로 초기화 되었지만, 서" "버는 CATALOG_VERSION_NO %d 버전으로 컴파일 되어있습니다." -#: access/transam/xlog.c:4058 +#: access/transam/xlog.c:4408 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -2553,7 +2794,7 @@ msgstr "" "이 데이터베이스 클러스터는 MAXALIGN %d (으)로 초기화 되었지만, 서버는 " "MAXALIGN %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4065 +#: access/transam/xlog.c:4416 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -2562,7 +2803,7 @@ msgstr "" "데이터베이스 클러스터와 서버 실행 파일이 서로 다른 부동 소수점 숫자 형식을 사" "용하고 있습니다." -#: access/transam/xlog.c:4070 +#: access/transam/xlog.c:4422 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -2571,18 +2812,18 @@ msgstr "" "이 데이터베이스 클러스터는 BLCKSZ %d (으)로 초기화 되었지만, 서버는 BLCKSZ " "%d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4073 access/transam/xlog.c:4080 -#: access/transam/xlog.c:4087 access/transam/xlog.c:4094 -#: access/transam/xlog.c:4101 access/transam/xlog.c:4108 -#: access/transam/xlog.c:4115 access/transam/xlog.c:4123 -#: access/transam/xlog.c:4130 +#: 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:4077 +#: access/transam/xlog.c:4430 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -2591,7 +2832,7 @@ msgstr "" "이 데이터베이스 클러스터는 RELSEG_SIZE %d (으)로 초기화 되었지만, 서버는 " "RELSEG_SIZE %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4084 +#: access/transam/xlog.c:4438 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -2600,7 +2841,7 @@ msgstr "" "이 데이터베이스 클러스터는 XLOG_BLCKSZ %d (으)로 초기화 되었지만, 서버는 " "XLOG_BLCKSZ %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4091 +#: access/transam/xlog.c:4446 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -2609,7 +2850,7 @@ msgstr "" "이 데이터베이스 클러스터는 NAMEDATALEN %d (으)로 초기화 되었지만, 서버는 " "NAMEDATALEN %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4098 +#: access/transam/xlog.c:4454 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -2618,7 +2859,7 @@ msgstr "" "이 데이터베이스 클러스터는 INDEX_MAX_KEYS %d (으)로 초기화 되었지만, 서버는 " "INDEX_MAX_KEYS %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4105 +#: access/transam/xlog.c:4462 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -2627,7 +2868,7 @@ msgstr "" "데이터베이스 클러스터는 TOAST_MAX_CHUNK_SIZE %d(으)로 초기화되었지만 서버는 " "TOAST_MAX_CHUNK_SIZE %d(으)로 컴파일 되었습니다." -#: access/transam/xlog.c:4112 +#: access/transam/xlog.c:4470 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -2636,7 +2877,7 @@ msgstr "" "이 데이터베이스 클러스터는 LOBLKSIZE %d(으)로 초기화 되었지만, 서버는 " "LOBLKSIZE %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4121 +#: access/transam/xlog.c:4480 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -2645,7 +2886,7 @@ msgstr "" "데이터베이스 클러스터는 USE_FLOAT8_BYVAL 없이 초기화되었지만, 서버는 " "USE_FLOAT8_BYVAL을 사용하여 컴파일되었습니다." -#: access/transam/xlog.c:4128 +#: access/transam/xlog.c:4488 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -2654,103 +2895,100 @@ msgstr "" "데이터베이스 클러스터는 USE_FLOAT8_BYVAL을 사용하여 초기화되었지만, 서버는 " "USE_FLOAT8_BYVAL 없이 컴파일되었습니다." -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4497 #, c-format -msgid "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"control file specifies %d byte" -msgid_plural "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"control file specifies %d bytes" -msgstr[0] "" -"WAL 조각 파일은 1MB부터 1GB 사이 2^n 크기여야 하지만, 컨트롤 파일에는 %d 바이" -"트로 지정되었음" +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 바이트)" -#: access/transam/xlog.c:4149 +#: 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\" 값의 최소 2배 이상이어야 함" -#: access/transam/xlog.c:4153 +#: 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\" 값의 최소 2배 이상이어야 함" -#: access/transam/xlog.c:4308 catalog/namespace.c:4335 -#: commands/tablespace.c:1216 commands/user.c:2536 commands/variable.c:72 -#: utils/error/elog.c:2205 +#: 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:4354 commands/user.c:2552 commands/variable.c:173 -#: utils/error/elog.c:2231 +#: 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:4768 +#: access/transam/xlog.c:5129 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "bootstrap 트랜잭션 로그 파일을 쓸 수 없음: %m" -#: access/transam/xlog.c:4776 +#: access/transam/xlog.c:5137 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "bootstrap 트랜잭션 로그 파일을 fsync할 수 없음: %m" -#: access/transam/xlog.c:4782 +#: access/transam/xlog.c:5143 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "bootstrap 트랜잭션 로그 파일을 닫을 수 없음: %m" -#: access/transam/xlog.c:4999 +#: access/transam/xlog.c:5368 #, c-format -msgid "WAL was generated with wal_level=minimal, cannot continue recovering" +msgid "" +"WAL was generated with \"wal_level=minimal\", cannot continue recovering" msgstr "" -"WAL 내용이 wal_level=minimal 설정으로 만들여졌습니다. 복원 작업을 계속 할 수 " -"없음" +"WAL 내용이 \"wal_level=minimal\" 설정으로 만들여졌습니다. 복구 작업을 계속 " +"할 수 없음" -#: access/transam/xlog.c:5000 +#: access/transam/xlog.c:5369 #, c-format -msgid "This happens if you temporarily set wal_level=minimal on the server." +msgid "" +"This happens if you temporarily set \"wal_level=minimal\" on the server." msgstr "" -"이 문제는 서버가 일시적으로 wal_level=minimal 설정으로 운영된 적이 있다면 발" -"생합니다." +"이 문제는 서버가 일시적으로 \"wal_level=minimal\" 설정으로 운영된 적이 있다" +"면 발생합니다." -#: access/transam/xlog.c:5001 +#: access/transam/xlog.c:5370 #, c-format -msgid "Use a backup taken after setting wal_level to higher than minimal." -msgstr "wal_level 값을 minimal 보다 높은 것으로 설정해서 백업하세요." +msgid "" +"Use a backup taken after setting \"wal_level\" to higher than \"minimal\"." +msgstr "\"wal_level\" 값을 \"minimal\" 보다 높은 것으로 설정해서 백업하세요." -#: access/transam/xlog.c:5065 +#: access/transam/xlog.c:5435 #, c-format msgid "control file contains invalid checkpoint location" msgstr "컨트롤 파일에 잘못된 체크포인트 위치가 있습니다" -#: access/transam/xlog.c:5076 +#: access/transam/xlog.c:5446 #, c-format msgid "database system was shut down at %s" msgstr "데이터베이스 시스템 마지막 가동 중지 시각: %s" -#: access/transam/xlog.c:5082 +#: access/transam/xlog.c:5452 #, c-format msgid "database system was shut down in recovery at %s" msgstr "복구 중 데이터베이스 시스템 마지막 가동 중지 시각: %s" -#: access/transam/xlog.c:5088 +#: access/transam/xlog.c:5458 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "" "데이터베이스 시스템 셧다운 작업이 비정상적으로 종료되었음; 마지막 운영시간: " "%s" -#: access/transam/xlog.c:5094 +#: access/transam/xlog.c:5464 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "데이터베이스 시스템 복구하는 도중 비정상적으로 가동 중지된 시각: %s" -#: access/transam/xlog.c:5096 +#: access/transam/xlog.c:5466 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -2759,12 +2997,12 @@ msgstr "" "이 사태는 몇몇 데이터가 손상되었을 의미할 수도 있습니다. 확인해 보고, 필요하" "다면, 마지막 백업 자료로 복구해서 사용하세요." -#: access/transam/xlog.c:5102 +#: 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:5104 +#: access/transam/xlog.c:5474 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -2773,22 +3011,22 @@ msgstr "" "이 사태로 몇몇 자료가 손상되었을 수도 있는데, 이런 경우라면,확인해 보고, 필요" "하다면, 마지막 백업 자료로 복구해서 사용하세요." -#: access/transam/xlog.c:5110 +#: access/transam/xlog.c:5480 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "데이터베이스 시스템이 비정상적으로 종료되었음; 마지막 운영시간: %s" -#: access/transam/xlog.c:5116 +#: access/transam/xlog.c:5487 #, c-format msgid "control file contains invalid database cluster state" msgstr "컨트롤 파일에 잘못된 데이터베이스 클러스터 상태값이 있습니다" -#: access/transam/xlog.c:5500 +#: access/transam/xlog.c:5875 #, c-format msgid "WAL ends before end of online backup" msgstr "온라인 백업 작업 끝나기전에 WAL 작업 종료됨" -#: access/transam/xlog.c:5501 +#: access/transam/xlog.c:5876 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -2797,39 +3035,39 @@ msgstr "" "온라인 백업 중 만들어진 WAL 조각 파일은 복구 작업에서 반드시 모두 있어야 합니" "다." -#: access/transam/xlog.c:5504 +#: access/transam/xlog.c:5880 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL이 일치하는 복구 지점 앞에서 종료됨" -#: access/transam/xlog.c:5550 +#: access/transam/xlog.c:5926 #, c-format msgid "selected new timeline ID: %u" msgstr "지정한 새 타임라인 ID: %u" -#: access/transam/xlog.c:5583 +#: access/transam/xlog.c:5959 #, c-format msgid "archive recovery complete" msgstr "아카이브 복구 완료" -#: access/transam/xlog.c:6189 +#: access/transam/xlog.c:6612 #, c-format msgid "shutting down" msgstr "서비스를 멈추고 있습니다" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6228 +#: access/transam/xlog.c:6651 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "restartpoint 시작:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6240 +#: 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:6305 +#: access/transam/xlog.c:6728 #, c-format msgid "" "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -2842,7 +3080,7 @@ msgstr "" "%03d s; 동기화 파일 개수: %d, 최장시간: %ld.%03d s, 평균시간: %ld.%03d s; 실" "제작업량: %d kB, 예상한작업량: %d kB; lsn=%X/%X, redo lsn=%X/%X" -#: access/transam/xlog.c:6328 +#: access/transam/xlog.c:6751 #, c-format msgid "" "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -2855,109 +3093,117 @@ msgstr "" "%03d s; 동기화 파일 개수: %d, 최장시간: %ld.%03d s, 평균시간: %ld.%03d s; 실" "제작업량: %d kB, 예상한작업량: %d kB; lsn=%X/%X, redo lsn=%X/%X" -#: access/transam/xlog.c:6766 +#: access/transam/xlog.c:7233 #, c-format msgid "" "concurrent write-ahead log activity while database system is shutting down" msgstr "데이터베이스 시스템이 중지되는 동안 동시 트랜잭션 로그가 활성화 되었음" -#: access/transam/xlog.c:7327 +#: access/transam/xlog.c:7818 #, c-format msgid "recovery restart point at %X/%X" msgstr "%X/%X에서 복구 작업 시작함" -#: access/transam/xlog.c:7329 +#: access/transam/xlog.c:7820 #, c-format msgid "Last completed transaction was at log time %s." msgstr "마지막 완료된 트랜잭션 기록 시간은 %s 입니다." -#: access/transam/xlog.c:7577 +#: access/transam/xlog.c:8082 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "\"%s\" 이름의 복구 위치는 %X/%X에 만들었음" -#: access/transam/xlog.c:7784 +#: access/transam/xlog.c:8289 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "온라인 백어이 취소되었음, 복구를 계속 할 수 없음" -#: access/transam/xlog.c:7841 +#: access/transam/xlog.c:8347 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "셧다운 체크포인트 레코드에 잘못된 타임라인 ID 값: %u (기대값: %u)" -#: access/transam/xlog.c:7899 +#: access/transam/xlog.c:8405 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "온라인 체크포인트 레코드에 잘못된 타임라인 ID 값: %u (기대값: %u)" -#: access/transam/xlog.c:7928 +#: access/transam/xlog.c:8434 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" -msgstr "복원끝 레코드에 잘못된 타임라인 ID 값: %u (기대값: %u)" +msgstr "복구끝 레코드에 잘못된 타임라인 ID 값: %u (기대값: %u)" -#: access/transam/xlog.c:8195 +#: access/transam/xlog.c:8705 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "\"%s\" write-through 파일을 fsync할 수 없음: %m" -#: access/transam/xlog.c:8200 +#: access/transam/xlog.c:8710 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "\"%s\" 파일 fdatasync 실패: %m" -#: access/transam/xlog.c:8285 access/transam/xlog.c:8608 +#: 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:8286 access/transam/xlog.c:8609 -#: access/transam/xlogfuncs.c:254 +#: 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." +msgid "" +"\"wal_level\" must be set to \"replica\" or \"logical\" at server start." msgstr "" -"wal_level 값을 \"replica\" 또는 \"logical\"로 지정하고 서버를 실행하십시오." +"\"wal_level\" 값을 \"replica\" 또는 \"logical\"로 지정하고 서버를 실행하십시" +"오." -#: access/transam/xlog.c:8291 +#: access/transam/xlog.c:8803 #, c-format msgid "backup label too long (max %d bytes)" msgstr "백업 라벨 이름이 너무 긺(최대 %d 바이트)" -#: access/transam/xlog.c:8412 +#: access/transam/xlog.c:8924 #, c-format msgid "" -"WAL generated with full_page_writes=off was replayed since last restartpoint" +"WAL generated with \"full_page_writes=off\" was replayed since last " +"restartpoint" msgstr "" -"마지막 재시작 위치부터 재반영된 WAL 내용이 full_page_writes=off 설정으로 만들" -"어진 내용입니다." +"마지막 재시작 위치부터 재반영된 WAL 내용이 \"full_page_writes=off\" 설정으로 " +"만들어진 내용입니다." -#: access/transam/xlog.c:8414 access/transam/xlog.c:8697 +#: 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." +"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 명령을 실행하고, " -"온라인 백업을 다시 해서 사용하세요." +"\"full_page_writes\" 설정을 활성화 하고, 주 서버에서 CHECKPOINT 명령을 실행하" +"고, 온라인 백업을 다시 해서 사용하세요." -#: access/transam/xlog.c:8481 backup/basebackup.c:1351 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:8488 backup/basebackup.c:1356 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:8647 backup/basebackup.c:1217 +#: 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:9172 backup/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "대기 서버가 온라인 백업 중 주 서버로 전환되었습니다" -#: access/transam/xlog.c:8648 backup/basebackup.c:1218 +#: 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. " @@ -2966,22 +3212,22 @@ msgstr "" "이런 경우, 해당 백업 자료가 손상되었을 가능성이 있습니다. 다른 백업본을 이용" "하세요." -#: access/transam/xlog.c:8695 +#: access/transam/xlog.c:9220 #, c-format msgid "" -"WAL generated with full_page_writes=off was replayed during online backup" +"WAL generated with \"full_page_writes=off\" was replayed during online backup" msgstr "" -"온라인 백업 도중 full_page_writes=off 설정으로 만들어진 WAL 내용이 재반영되었" -"습니다." +"온라인 백업 도중 \"full_page_writes=off\" 설정으로 만들어진 WAL 내용이 재반영" +"되었습니다." -#: access/transam/xlog.c:8811 +#: 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:8825 +#: access/transam/xlog.c:9350 #, c-format msgid "" "still waiting for all required WAL segments to be archived (%d seconds " @@ -2989,22 +3235,22 @@ msgid "" msgstr "" "필요한 WAL 조각 파일 아카이빙이 완료되기를 계속 기다리고 있음 (%d초 경과)" -#: access/transam/xlog.c:8827 +#: access/transam/xlog.c:9352 #, c-format msgid "" -"Check that your archive_command is executing properly. You can safely " +"Check that your \"archive_command\" is executing properly. You can safely " "cancel this backup, but the database backup will not be usable without all " "the WAL segments." msgstr "" -"archive_command 설정을 살펴보세요. 이 백업 작업은 안전하게 취소 할 수 있지" -"만, 데이터베이스 백업은 모든 WAL 조각 없이는 사용될 수 없습니다." +"\"archive_command\" 설정을 살펴보세요. 이 백업 작업은 안전하게 취소 할 수 있" +"지만, 데이터베이스 백업은 모든 WAL 조각 없이는 사용될 수 없습니다." -#: access/transam/xlog.c:8834 +#: access/transam/xlog.c:9359 #, c-format msgid "all required WAL segments have been archived" msgstr "모든 필요한 WAL 조각들이 아카이브 되었습니다." -#: access/transam/xlog.c:8838 +#: access/transam/xlog.c:9363 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -3014,28 +3260,28 @@ msgstr "" "모든 WAL 조각 파일들을 직접 찾아서 따로 보관해 두어야 바르게 복구 할 수 있습" "니다." -#: access/transam/xlog.c:8877 +#: access/transam/xlog.c:9402 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "" "pg_backup_stop 작업이 호출되기 전에 백엔드가 종료되어 백업을 중지합니다." -#: access/transam/xlogarchive.c:207 +#: access/transam/xlogarchive.c:213 #, c-format msgid "archive file \"%s\" has wrong size: %lld instead of %lld" msgstr "\"%s\" 아카이브 파일의 크기가 이상합니다: 현재값 %lld, 기대값 %lld" -#: access/transam/xlogarchive.c:216 +#: access/transam/xlogarchive.c:222 #, c-format msgid "restored log file \"%s\" from archive" msgstr "아카이브에서 \"%s\" 로그파일을 복구했음" -#: access/transam/xlogarchive.c:230 +#: access/transam/xlogarchive.c:236 #, c-format -msgid "restore_command returned a zero exit status, but stat() failed." -msgstr "restore_command 작업이 0을 반환했지만, stat() 작업 실패." +msgid "\"restore_command\" returned a zero exit status, but stat() failed." +msgstr "\"restore_command\" 작업이 0을 반환했지만, stat() 작업 실패." -#: access/transam/xlogarchive.c:262 +#: access/transam/xlogarchive.c:268 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "아카이브에서 \"%s\" 파일 복원 실패: %s" @@ -3043,180 +3289,182 @@ msgstr "아카이브에서 \"%s\" 파일 복원 실패: %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:340 +#: access/transam/xlogarchive.c:346 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:450 access/transam/xlogarchive.c:530 +#: access/transam/xlogarchive.c:456 access/transam/xlogarchive.c:536 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "\"%s\" archive status 파일을 만들 수 없습니다: %m" -#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:538 +#: access/transam/xlogarchive.c:464 access/transam/xlogarchive.c:544 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "\"%s\" archive status 파일에 쓸 수 없습니다: %m" -#: access/transam/xlogfuncs.c:75 backup/basebackup.c:973 +#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 #, c-format msgid "a backup is already in progress in this session" msgstr "이미 이 세션에서 백업 작업이 진행 중입니다" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:140 #, c-format msgid "backup is not in progress" msgstr "현재 백업 작업을 하지 않고 있습니다" -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "Did you call pg_backup_start()?" msgstr "pg_backup_start() 함수를 호출했나요?" -#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:248 -#: access/transam/xlogfuncs.c:287 access/transam/xlogfuncs.c:308 -#: access/transam/xlogfuncs.c:329 +#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 +#: access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:323 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "WAL 제어 함수는 복구 작업 중에는 실행 될 수 없음" -#: access/transam/xlogfuncs.c:215 access/transam/xlogfuncs.c:399 -#: access/transam/xlogfuncs.c:457 +#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:447 #, c-format msgid "%s cannot be executed during recovery." msgstr "복구 작업 중에는 %s 명령을 실행할 수 없습니다." -#: access/transam/xlogfuncs.c:221 +#: access/transam/xlogfuncs.c:215 #, c-format -msgid "pg_log_standby_snapshot() can only be used if wal_level >= replica" +msgid "" +"pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" msgstr "" -"pg_log_standby_snapshot() 함수는 wal_level >= replica 상태에서 사용될 수 있습" -"니다." +"pg_log_standby_snapshot() 함수는 \"wal_level\" >= \"replica\" 상태에서 사용" +"될 수 있습니다." -#: access/transam/xlogfuncs.c:253 +#: access/transam/xlogfuncs.c:247 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "WAL 수준이 복원 위치를 만들 수 없는 수준입니다" -#: access/transam/xlogfuncs.c:261 +#: access/transam/xlogfuncs.c:255 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "복원 위치 이름이 너무 깁니다. (최대값, %d 글자)" -#: access/transam/xlogfuncs.c:496 +#: access/transam/xlogfuncs.c:486 #, c-format msgid "invalid WAL file name \"%s\"" msgstr "잘못된 WAL 파일 이름: \"%s\"" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 -#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 -#: access/transam/xlogfuncs.c:689 +#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 +#: access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 +#: access/transam/xlogfuncs.c:679 #, c-format msgid "recovery is not in progress" msgstr "현재 복구 작업 상태가 아닙니다" -#: access/transam/xlogfuncs.c:533 access/transam/xlogfuncs.c:563 -#: access/transam/xlogfuncs.c:587 access/transam/xlogfuncs.c:610 -#: access/transam/xlogfuncs.c:690 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 +#: access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 +#: access/transam/xlogfuncs.c:680 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "복구 제어 함수는 복구 작업일 때만 실행할 수 있습니다." -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 #, c-format msgid "standby promotion is ongoing" msgstr "대기 서버가 운영 서버로 전환 중입니다." -#: access/transam/xlogfuncs.c:539 access/transam/xlogfuncs.c:569 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "%s 함수는 운영 전환 중에는 실행될 수 없음." -#: access/transam/xlogfuncs.c:695 +#: access/transam/xlogfuncs.c:685 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "\"wait_seconds\" 값은 음수나 0을 사용할 수 없음" -#: access/transam/xlogfuncs.c:715 storage/ipc/signalfuncs.c:260 +#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "postmaster로 시그널 보내기 실패: %m" -#: access/transam/xlogfuncs.c:751 +#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#, c-format +msgid "terminating connection due to unexpected postmaster exit" +msgstr "postmaster의 예상치 못한 종료로 연결을 종료합니다" + +#: access/transam/xlogfuncs.c:740 +#, c-format +msgid "while waiting on promotion" +msgstr "주 서버로 전환하는 것을 기다리는 중" + +#: access/transam/xlogfuncs.c:744 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" msgstr[0] "%d 초 이내에 운영 전환을 하지 못했습니다." -#: access/transam/xlogprefetcher.c:1092 +#: access/transam/xlogprefetcher.c:1088 #, c-format msgid "" -"recovery_prefetch is not supported on platforms that lack posix_fadvise()." +"\"recovery_prefetch\" is not supported on platforms that lack " +"posix_fadvise()." msgstr "" -"이 OS는 posix_fadvise() 함수를 지원하지 않아, recovery_prefetch 설정을 지원하" -"지 않습니다." +"이 OS는 posix_fadvise() 함수를 지원하지 않아, \"recovery_prefetch\" 설정을 지" +"원하지 않습니다." -#: access/transam/xlogreader.c:626 +#: access/transam/xlogreader.c:619 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "잘못된 레코드 오프셋: 위치 %X/%X, 기대값 %u, 실재값 %u" -#: access/transam/xlogreader.c:635 +#: access/transam/xlogreader.c:628 #, c-format msgid "contrecord is requested by %X/%X" msgstr "%X/%X에서 contrecord를 필요로 함" -#: access/transam/xlogreader.c:676 access/transam/xlogreader.c:1119 +#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 #, c-format msgid "invalid record length at %X/%X: expected at least %u, got %u" msgstr "잘못된 레코드 길이: 위치 %X/%X, 기대값 %u, 실재값 %u" -#: access/transam/xlogreader.c:705 -#, c-format -msgid "out of memory while trying to decode a record of length %u" -msgstr "%u 길이의 레코드를 디코딩하는 중 메모리 부족" - -#: access/transam/xlogreader.c:727 -#, c-format -msgid "record length %u at %X/%X too long" -msgstr "너무 긴 길이(%u)의 레코드가 %X/%X에 있음" - -#: access/transam/xlogreader.c:776 +#: access/transam/xlogreader.c:758 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%X 위치에 contrecord 플래그가 없음" -#: access/transam/xlogreader.c:789 +#: access/transam/xlogreader.c:771 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%X" -#: access/transam/xlogreader.c:1127 +#: access/transam/xlogreader.c:1142 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "잘못된 자원 관리 ID %u, 위치: %X/%X" -#: access/transam/xlogreader.c:1140 access/transam/xlogreader.c:1156 +#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "레코드의 잘못된 프리링크 %X/%X, 해당 레코드 %X/%X" -#: access/transam/xlogreader.c:1192 +#: access/transam/xlogreader.c:1209 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%X 레코드" -#: access/transam/xlogreader.c:1226 +#: access/transam/xlogreader.c:1243 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "%04X 매직 번호가 잘못됨, WAL 조각 파일 %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1241 access/transam/xlogreader.c:1283 +#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "잘못된 정보 비트 %04X, WAL 조각 파일 %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1257 +#: access/transam/xlogreader.c:1274 #, c-format msgid "" "WAL file is from different database system: WAL file database system " @@ -3225,7 +3473,7 @@ msgstr "" "WAL 파일이 다른 시스템의 것입니다. WAL 파일의 시스템 식별자는 %llu, " "pg_control 의 식별자는 %llu" -#: access/transam/xlogreader.c:1265 +#: access/transam/xlogreader.c:1282 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -3234,7 +3482,7 @@ msgstr "" "WAL 파일이 다른 데이터베이스 시스템의 것입니다: 페이지 헤더에 지정된 값이 잘" "못된 조각 크기임" -#: access/transam/xlogreader.c:1271 +#: access/transam/xlogreader.c:1288 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -3243,12 +3491,12 @@ msgstr "" "WAL 파일이 다른 데이터베이스 시스템의 것입니다: 페이지 헤더의 XLOG_BLCKSZ 값" "이 바르지 않음" -#: access/transam/xlogreader.c:1303 +#: access/transam/xlogreader.c:1320 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "잘못된 페이지 주소 %X/%X, WAL 조각 파일 %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1329 +#: access/transam/xlogreader.c:1346 #, c-format msgid "" "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, " @@ -3257,22 +3505,22 @@ msgstr "" "타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각 파일 %s, LSN %X/%X, offset " "%u" -#: access/transam/xlogreader.c:1735 +#: access/transam/xlogreader.c:1749 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "%u block_id는 범위를 벗어남, 위치 %X/%X" -#: access/transam/xlogreader.c:1759 +#: access/transam/xlogreader.c:1773 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%X 에 자료가 없음" -#: access/transam/xlogreader.c:1766 +#: access/transam/xlogreader.c:1780 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%X" -#: access/transam/xlogreader.c:1802 +#: access/transam/xlogreader.c:1816 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -3281,19 +3529,19 @@ msgstr "" "BKPIMAGE_HAS_HOLE 설정이 되어 있지만, 옵셋: %u, 길이: %u, 블록 이미지 길이: " "%u, 대상: %X/%X" -#: access/transam/xlogreader.c:1818 +#: access/transam/xlogreader.c:1832 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%X" -#: access/transam/xlogreader.c:1832 +#: access/transam/xlogreader.c:1846 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%X" -#: access/transam/xlogreader.c:1847 +#: access/transam/xlogreader.c:1861 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image " @@ -3302,147 +3550,160 @@ msgstr "" "BKPIMAGE_HAS_HOLE, BKPIMAGE_COMPRESSED 지정 안되어 있으나, 블록 이미지 길이" "는 %u, 대상: %X/%X" -#: access/transam/xlogreader.c:1863 +#: access/transam/xlogreader.c:1877 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%X 에 이전 릴레이션 없음" -#: access/transam/xlogreader.c:1875 +#: access/transam/xlogreader.c:1889 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "잘못된 block_id %u, 위치 %X/%X" -#: access/transam/xlogreader.c:1942 +#: access/transam/xlogreader.c:1956 #, c-format msgid "record with invalid length at %X/%X" msgstr "잘못된 레코드 길이, 위치 %X/%X" -#: access/transam/xlogreader.c:1968 +#: access/transam/xlogreader.c:1982 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "WAL 레코드에서 %d ID의 백업 블록을 찾을 수 없음" -#: access/transam/xlogreader.c:2052 +#: access/transam/xlogreader.c:2066 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "%X/%X 위치에 이미지를 복원할 수 없음 %d 블록이 잘못 지정됨" -#: access/transam/xlogreader.c:2059 +#: access/transam/xlogreader.c:2073 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "%X/%X 위치에 이미지를 복원할 수 없음, %d 블록의 상태가 이상함" -#: access/transam/xlogreader.c:2086 access/transam/xlogreader.c:2103 +#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 #, c-format msgid "" "could not restore image at %X/%X compressed with %s not supported by build, " "block %d" msgstr "%X/%X 위치에 압축된 이미지 복원 실패, %s 지원 하지 않음, 해당 블록: %d" -#: access/transam/xlogreader.c:2112 +#: access/transam/xlogreader.c:2126 #, c-format msgid "" "could not restore image at %X/%X compressed with unknown method, block %d" msgstr "알 수 없는 방법으로 이미지 압축 복원 실패: 위치 %X/%X, 블록 %d" -#: access/transam/xlogreader.c:2120 +#: access/transam/xlogreader.c:2134 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "이미지 압축 풀기 실패, 위치 %X/%X, 블록 %d" -#: access/transam/xlogrecovery.c:547 -#, c-format -msgid "entering standby mode" -msgstr "대기 모드로 전환합니다" - -#: access/transam/xlogrecovery.c:550 -#, c-format -msgid "starting point-in-time recovery to XID %u" -msgstr "%u XID까지 시점 기반 복구 작업을 시작합니다" - -#: access/transam/xlogrecovery.c:554 -#, c-format -msgid "starting point-in-time recovery to %s" -msgstr "%s 까지 시점 복구 작업을 시작합니다" - -#: access/transam/xlogrecovery.c:558 -#, c-format -msgid "starting point-in-time recovery to \"%s\"" -msgstr "\"%s\" 복구 대상 이름까지 시점 복구 작업을 시작합니다" - -#: access/transam/xlogrecovery.c:562 -#, c-format -msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" -msgstr "\"%X/%X\" 위치(LSN)까지 시점 복구 작업을 시작합니다" - -#: access/transam/xlogrecovery.c:566 -#, c-format -msgid "starting point-in-time recovery to earliest consistent point" -msgstr "동기화 할 수 있는 마지막 지점까지 시점 복구 작업을 시작합니다" - -#: access/transam/xlogrecovery.c:569 +#: access/transam/xlogrecovery.c:617 #, c-format -msgid "starting archive recovery" -msgstr "아카이브 복구 작업을 시작합니다" +msgid "" +"starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on " +"timeline ID %u" +msgstr "백업 복구 시작: 리두LSN=%X/%X, 체크포인트LSN=%X/%X, 타임라인ID=%u" -#: access/transam/xlogrecovery.c:653 +#: access/transam/xlogrecovery.c:649 #, c-format -msgid "could not find redo location referenced by checkpoint record" -msgstr "체크포인트 기록으로 참조하는 재실행 위치를 찾을 수 없음" +msgid "" +"could not find redo location %X/%X referenced by checkpoint record at %X/%X" +msgstr "%X/%X 위치의 redo lsn을 찾을 수 없음: 참조하는 체크포인트 레코드=%X/%X" -#: access/transam/xlogrecovery.c:654 access/transam/xlogrecovery.c:664 +#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 #, c-format msgid "" -"If you are restoring from a backup, touch \"%s/recovery.signal\" and add " -"required recovery options.\n" +"If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/" +"standby.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/" "backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if " "restoring from a backup." msgstr "" -"백업을 복원하려면, \"%s/recovery.signal\" 파일을 만들고, 복구 관련 옵션을 지" -"정하세요.\n" +"백업을 복원하려면, \"%s/recovery.signal\" 또는 \"%s/standby.signal\" 파일을 " +"만들고, 복구 관련 옵션을 지정하세요.\n" "백업 복원을 하는게 아니라면, \"%s/backup_label\" 파일을 지우고 사용할 수 있" "습니다.\n" "주의: 백업 복원 작업을 하는데, \"%s/backup_label\" 파일을 지운다면, 클러스터" "가 손상 될 수 있습니다." -#: access/transam/xlogrecovery.c:663 +#: access/transam/xlogrecovery.c:660 #, c-format -msgid "could not locate required checkpoint record" -msgstr "요청된 체크포인트 레코드의 위치를 바르게 잡을 수 없음" +msgid "could not locate required checkpoint record at %X/%X" +msgstr "요청된 체크포인트 레코드의 위치(%X/%X)를 잡을 수 없음" -#: access/transam/xlogrecovery.c:692 commands/tablespace.c:670 +#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" -#: access/transam/xlogrecovery.c:724 access/transam/xlogrecovery.c:730 +#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "\"%s\" 파일 무시함, \"%s\" 파일 없음" -#: access/transam/xlogrecovery.c:726 +#: access/transam/xlogrecovery.c:725 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿨습니다." -#: access/transam/xlogrecovery.c:732 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" -#: access/transam/xlogrecovery.c:786 +#: access/transam/xlogrecovery.c:770 +#, c-format +msgid "restarting backup recovery with redo LSN %X/%X" +msgstr "\"%X/%X\" redo LSN에서 백업 복구 작업을 다시 시작합니다" + +#: access/transam/xlogrecovery.c:795 +#, c-format +msgid "could not locate a valid checkpoint record at %X/%X" +msgstr "%X/%X에서 바른 체크포인트 레코드를 잡을 수 없음" + +#: access/transam/xlogrecovery.c:806 +#, c-format +msgid "entering standby mode" +msgstr "대기 모드로 전환합니다" + +#: access/transam/xlogrecovery.c:809 +#, c-format +msgid "starting point-in-time recovery to XID %u" +msgstr "%u XID까지 시점 기반 복구 작업을 시작합니다" + +#: access/transam/xlogrecovery.c:813 +#, c-format +msgid "starting point-in-time recovery to %s" +msgstr "%s 까지 시점 복구 작업을 시작합니다" + +#: access/transam/xlogrecovery.c:817 +#, c-format +msgid "starting point-in-time recovery to \"%s\"" +msgstr "\"%s\" 복구 대상 이름까지 시점 복구 작업을 시작합니다" + +#: access/transam/xlogrecovery.c:821 +#, c-format +msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" +msgstr "\"%X/%X\" 위치(LSN)까지 시점 복구 작업을 시작합니다" + +#: access/transam/xlogrecovery.c:825 +#, c-format +msgid "starting point-in-time recovery to earliest consistent point" +msgstr "동기화 할 수 있는 마지막 지점까지 시점 복구 작업을 시작합니다" + +#: access/transam/xlogrecovery.c:828 #, c-format -msgid "could not locate a valid checkpoint record" -msgstr "체크포인트 레코드의 위치를 바르게 잡을 수 없음" +msgid "starting archive recovery" +msgstr "아카이브 복구 작업을 시작합니다" -#: access/transam/xlogrecovery.c:810 +#: access/transam/xlogrecovery.c:849 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "요청한 %u 타임라인은 서버 타임라인의 하위가 아님" -#: access/transam/xlogrecovery.c:812 +#: access/transam/xlogrecovery.c:851 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -3451,7 +3712,7 @@ msgstr "" "마지막 체크포인트 위치는 %X/%X (%u 타임라인)입니다. 하지만, 요청받은 타임라" "인 내역파일에는 그 타임라인 %X/%X 위치에서 분기되었습니다." -#: access/transam/xlogrecovery.c:826 +#: access/transam/xlogrecovery.c:865 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -3459,22 +3720,22 @@ msgid "" msgstr "" "요청한 %u 타임라인은 %X/%X 최소 복구 위치가 없습니다, 기존 타임라인: %u" -#: access/transam/xlogrecovery.c:854 +#: access/transam/xlogrecovery.c:893 #, c-format msgid "invalid next transaction ID" msgstr "잘못된 다음 트랜잭션 ID" -#: access/transam/xlogrecovery.c:859 +#: access/transam/xlogrecovery.c:898 #, c-format msgid "invalid redo in checkpoint record" msgstr "체크포인트 레코드 안에 잘못된 redo 정보가 있음" -#: access/transam/xlogrecovery.c:870 +#: access/transam/xlogrecovery.c:909 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "운영 중지 체크포인트에서 잘못된 재실행 정보 발견" -#: access/transam/xlogrecovery.c:899 +#: access/transam/xlogrecovery.c:938 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -3482,18 +3743,18 @@ msgstr "" "데이터베이스 시스템이 정상적으로 종료되지 못했습니다, 자동 복구 작업을 진행합" "니다" -#: access/transam/xlogrecovery.c:903 +#: access/transam/xlogrecovery.c:942 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "%u 타임라인으로 비정상 중지에 대한 복구작업을 시작함, 기존 타임라인: %u" -#: access/transam/xlogrecovery.c:946 +#: access/transam/xlogrecovery.c:985 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label 파일 안에 컨트롤 파일과 일관성이 맞지 않는 자료가 있음" -#: access/transam/xlogrecovery.c:947 +#: access/transam/xlogrecovery.c:986 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -3502,22 +3763,22 @@ msgstr "" "이 문제는 백업 자료 자체가 손상 되었음을 말합니다. 다른 백업본으로 복구 작업" "을 진행해야 합니다." -#: access/transam/xlogrecovery.c:1001 +#: access/transam/xlogrecovery.c:1040 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "\"%s\" 복구 명령 파일을 사용하는 것을 지원하지 않습니다" -#: access/transam/xlogrecovery.c:1066 +#: access/transam/xlogrecovery.c:1105 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "단일 사용자 서버를 대상으로 대기 모드를 사용할 수 없습니다." -#: access/transam/xlogrecovery.c:1083 +#: access/transam/xlogrecovery.c:1122 #, c-format -msgid "specified neither primary_conninfo nor restore_command" -msgstr "primary_conninfo 설정도, restore_command 설정도 없음" +msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" +msgstr "\"primary_conninfo\" 설정도, \"restore_command\" 설정도 없음" -#: access/transam/xlogrecovery.c:1084 +#: access/transam/xlogrecovery.c:1123 #, c-format msgid "" "The database server will regularly poll the pg_wal subdirectory to check for " @@ -3526,101 +3787,122 @@ msgstr "" "데이터베이스 서버는 일반적으로 주 서버에서 발생한 트랜잭션 로그를 반영하기 위" "해 pg_wal 하위 디렉터리를 조사할 것입니다." -#: access/transam/xlogrecovery.c:1092 +#: access/transam/xlogrecovery.c:1131 #, c-format -msgid "must specify restore_command when standby mode is not enabled" +msgid "must specify \"restore_command\" when standby mode is not enabled" msgstr "" -"대기 모드를 활성화 하지 않았다면(standby_mode = off), restore_command 설정은 " -"반드시 있어야 함" +"대기 모드를 활성화 하지 않았다면(standby_mode = off), \"restore_command\" 설" +"정은 반드시 있어야 함" -#: access/transam/xlogrecovery.c:1130 +#: access/transam/xlogrecovery.c:1169 #, c-format msgid "recovery target timeline %u does not exist" msgstr "%u 복구 대상 타임라인이 없음" -#: access/transam/xlogrecovery.c:1213 access/transam/xlogrecovery.c:1220 -#: access/transam/xlogrecovery.c:1279 access/transam/xlogrecovery.c:1359 -#: access/transam/xlogrecovery.c:1383 +#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 +#: access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 +#: access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 #, c-format msgid "invalid data in file \"%s\"" msgstr "\"%s\" 파일에 유효하지 않은 자료가 있습니다" -#: access/transam/xlogrecovery.c:1280 +#: access/transam/xlogrecovery.c:1319 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "타임라인 ID가 %u 값으로 분석했지만, 기대값은 %u 임" -#: access/transam/xlogrecovery.c:1662 +#: access/transam/xlogrecovery.c:1330 #, c-format -msgid "redo starts at %X/%X" -msgstr "%X/%X에서 redo 작업 시작됨" +msgid "this is an incremental backup, not a data directory" +msgstr "이것은 증분 백업 디렉터리로 데이터 디렉터리가 아님" -#: access/transam/xlogrecovery.c:1675 +#: access/transam/xlogrecovery.c:1331 #, c-format -msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" +msgid "Use pg_combinebackup to reconstruct a valid data directory." +msgstr "" +"바른 데이터 디렉터리로 재구축하려면 pg_combinebackup 명령을 이용하세요." + +#: access/transam/xlogrecovery.c:1717 +#, c-format +msgid "unexpected record type found at redo point %X/%X" +msgstr "%X/%X redo 위치에 잘못된 레크드 형태가 발견됨" + +#: access/transam/xlogrecovery.c:1740 +#, c-format +msgid "redo starts at %X/%X" +msgstr "%X/%X에서 redo 작업 시작됨" + +#: access/transam/xlogrecovery.c:1753 +#, c-format +msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "redo 진행 중, 예상시간: %ld.%02d s, 현재 LSN: %X/%X" -#: access/transam/xlogrecovery.c:1767 +#: access/transam/xlogrecovery.c:1843 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "요청한 복구 중지 지점이 일치하는 복구 지점 앞에 있음" -#: access/transam/xlogrecovery.c:1799 +#: access/transam/xlogrecovery.c:1875 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "%X/%X에서 redo 작업 완료, 시스템 사용량: %s" -#: access/transam/xlogrecovery.c:1805 +#: access/transam/xlogrecovery.c:1881 #, c-format msgid "last completed transaction was at log time %s" msgstr "마지막 완료된 트랜잭션 기록 시간: %s" -#: access/transam/xlogrecovery.c:1814 +#: access/transam/xlogrecovery.c:1890 #, c-format msgid "redo is not required" msgstr "재반영해야 할 트랜잭션이 없음" -#: access/transam/xlogrecovery.c:1825 +#: access/transam/xlogrecovery.c:1901 #, c-format msgid "recovery ended before configured recovery target was reached" -msgstr "지정한 recovery target 도달 전에 복원 끝남" +msgstr "지정한 recovery target 도달 전에 복구 끝남" -#: access/transam/xlogrecovery.c:2019 +#: access/transam/xlogrecovery.c:2095 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "%X/%X에 빠진 contrecord를 건너뜀, %s에 덮어씀" -#: access/transam/xlogrecovery.c:2086 +#: access/transam/xlogrecovery.c:2162 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "잘못된 디렉터리 엔트리 \"%s\", 위치: %s" -#: access/transam/xlogrecovery.c:2088 +#: access/transam/xlogrecovery.c:2164 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "pg_tblspc/ 안 모든 디렉터리 엔트리는 심볼릭 링크여야 함" -#: access/transam/xlogrecovery.c:2089 +#: access/transam/xlogrecovery.c:2165 #, c-format msgid "" -"Remove those directories, or set allow_in_place_tablespaces to ON " +"Remove those directories, or set \"allow_in_place_tablespaces\" to ON " "transiently to let recovery complete." msgstr "" -"그 디렉터리를 지우든가, allow_in_place_tablespaces 설정을 ON으로 바꿔 임시로 " -"복원 작업을 완료하든가 하세요." +"그 디렉터리를 지우든가, \"allow_in_place_tablespaces\" 설정을 ON으로 바꿔 임" +"시로 복구 작업을 완료하든가 하세요." + +#: access/transam/xlogrecovery.c:2217 +#, c-format +msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" +msgstr "redo LSN %X/%X 부터 end LSN %X/%X 까지 백업 복구 완료" -#: access/transam/xlogrecovery.c:2163 +#: access/transam/xlogrecovery.c:2247 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "%X/%X 위치에서 복구 일관성을 맞춤" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2201 +#: access/transam/xlogrecovery.c:2285 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL redo 위치: %X/%X, 대상: %s" -#: access/transam/xlogrecovery.c:2299 +#: access/transam/xlogrecovery.c:2383 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -3628,12 +3910,12 @@ msgid "" msgstr "" "체크포인트 레코드에 예기치 않은 이전 타임라인ID %u(현재 타임라인ID: %u)" -#: access/transam/xlogrecovery.c:2308 +#: access/transam/xlogrecovery.c:2392 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "체크포인트 레코드에 예기치 않은 타임라인 ID %u이(가) 있음(%u 뒤)" -#: access/transam/xlogrecovery.c:2324 +#: access/transam/xlogrecovery.c:2408 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -3642,113 +3924,113 @@ msgstr "" "체크포인트 내역 안에 %u 타임라인 ID가 기대한 것과 다릅니다. 발생 위치: %X/%X " "(타임라인: %u) 최소 복구 위치 이전" -#: access/transam/xlogrecovery.c:2508 access/transam/xlogrecovery.c:2784 +#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 #, c-format msgid "recovery stopping after reaching consistency" msgstr "일관성을 다 맞추어 복구 작업을 중지합니다." -#: access/transam/xlogrecovery.c:2529 +#: access/transam/xlogrecovery.c:2613 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "복구 중지 위치(LSN): \"%X/%X\" 이전" -#: access/transam/xlogrecovery.c:2619 +#: access/transam/xlogrecovery.c:2703 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "%u 트랜잭션 커밋 전 복구 중지함, 시간 %s" -#: access/transam/xlogrecovery.c:2626 +#: access/transam/xlogrecovery.c:2710 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "%u 트랜잭션 중단 전 복구 중지함, 시간 %s" -#: access/transam/xlogrecovery.c:2679 +#: access/transam/xlogrecovery.c:2763 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "복구 중지함, 복구 위치 \"%s\", 시간 %s" -#: access/transam/xlogrecovery.c:2697 +#: access/transam/xlogrecovery.c:2781 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "복구 중지 위치(LSN): \"%X/%X\" 이후" -#: access/transam/xlogrecovery.c:2764 +#: access/transam/xlogrecovery.c:2848 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "%u 트랜잭션 커밋 후 복구 중지함, 시간 %s" -#: access/transam/xlogrecovery.c:2772 +#: access/transam/xlogrecovery.c:2856 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "%u 트랜잭션 중단 후 복구 중지함, 시간 %s" -#: access/transam/xlogrecovery.c:2853 +#: access/transam/xlogrecovery.c:2937 #, c-format msgid "pausing at the end of recovery" msgstr "복구 끝에 기다리는 중" -#: access/transam/xlogrecovery.c:2854 +#: access/transam/xlogrecovery.c:2938 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "운영 서버로 바꾸려면, pg_wal_replay_resume() 함수를 호출하세요." -#: access/transam/xlogrecovery.c:2857 access/transam/xlogrecovery.c:4594 +#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4678 #, c-format msgid "recovery has paused" msgstr "복구 작업이 일시 중지 됨" -#: access/transam/xlogrecovery.c:2858 +#: access/transam/xlogrecovery.c:2942 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "계속 진행하려면, pg_wal_replay_resume() 함수를 호출하세요." -#: access/transam/xlogrecovery.c:3121 +#: access/transam/xlogrecovery.c:3205 #, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" msgstr "예상치 못한 타임라인 ID %u, WAL 조각 파일: %s, LSN %X/%X, offset %u" -#: access/transam/xlogrecovery.c:3329 +#: access/transam/xlogrecovery.c:3413 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" msgstr "%s WAL 조각에서 읽기 실패, LSN %X/%X, offset %u: %m" -#: access/transam/xlogrecovery.c:3336 +#: access/transam/xlogrecovery.c:3420 #, c-format msgid "" "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" msgstr "%s WAL 조각에서 읽기 실패, LSN %X/%X, offset %u: read %d / %zu" -#: access/transam/xlogrecovery.c:3976 +#: access/transam/xlogrecovery.c:4060 #, c-format msgid "invalid checkpoint location" msgstr "잘못된 checkpoint 위치" -#: access/transam/xlogrecovery.c:3986 +#: access/transam/xlogrecovery.c:4070 #, c-format msgid "invalid checkpoint record" msgstr "잘못된 checkpoint 레코드" -#: access/transam/xlogrecovery.c:3992 +#: access/transam/xlogrecovery.c:4076 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "checkpoint 레코드에서 잘못된 자원 관리자 ID 발견" -#: access/transam/xlogrecovery.c:4000 +#: access/transam/xlogrecovery.c:4084 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "checkpoint 레코드에서 잘못된 xl_info 발견" -#: access/transam/xlogrecovery.c:4006 +#: access/transam/xlogrecovery.c:4090 #, c-format msgid "invalid length of checkpoint record" msgstr "checkpoint 레코드 길이가 잘못되었음" -#: access/transam/xlogrecovery.c:4060 +#: access/transam/xlogrecovery.c:4144 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "요청한 %u 타임라인은 %u 데이터베이스 시스템 타임라인의 하위가 아님" -#: access/transam/xlogrecovery.c:4074 +#: access/transam/xlogrecovery.c:4158 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " @@ -3757,28 +4039,28 @@ msgstr "" "복구 위치까지 복구하기 전에 새 타임라인 %u번으로 분기됨, 기존 데이터베이스 타" "임라인: %u, 기대한 복구 위치 %X/%X" -#: access/transam/xlogrecovery.c:4093 +#: access/transam/xlogrecovery.c:4177 #, c-format msgid "new target timeline is %u" msgstr "새 대상 타임라인: %u" -#: access/transam/xlogrecovery.c:4296 +#: access/transam/xlogrecovery.c:4380 #, c-format msgid "WAL receiver process shutdown requested" msgstr "WAL receiver 프로세스가 중지 요청을 받았습니다." -#: access/transam/xlogrecovery.c:4356 +#: access/transam/xlogrecovery.c:4440 #, c-format msgid "received promote request" msgstr "운영 전환 신호를 받았습니다." -#: access/transam/xlogrecovery.c:4585 +#: access/transam/xlogrecovery.c:4669 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "불충분한 서버 설정으로 hot standby 서버를 운영할 수 없음" -#: access/transam/xlogrecovery.c:4586 access/transam/xlogrecovery.c:4613 -#: access/transam/xlogrecovery.c:4643 +#: access/transam/xlogrecovery.c:4670 access/transam/xlogrecovery.c:4697 +#: access/transam/xlogrecovery.c:4727 #, c-format msgid "" "%s = %d is a lower setting than on the primary server, where its value was " @@ -3787,238 +4069,240 @@ msgstr "" "이 서버의 현재 %s = %d 설정은 주 서버의 설정값(%d)보다 낮게 설정 되어 있기 때" "문입니다." -#: access/transam/xlogrecovery.c:4595 +#: access/transam/xlogrecovery.c:4679 #, c-format msgid "If recovery is unpaused, the server will shut down." -msgstr "복원 후 멈춰 있을 수 없으면 서버는 종료될 것입니다." +msgstr "복구 후 멈춰 있을 수 없으면 서버는 종료될 것입니다." -#: access/transam/xlogrecovery.c:4596 +#: access/transam/xlogrecovery.c:4680 #, c-format msgid "" "You can then restart the server after making the necessary configuration " "changes." msgstr "환경 설정을 바꾸어 서버를 다시 시작할 수 있습니다." -#: access/transam/xlogrecovery.c:4607 +#: access/transam/xlogrecovery.c:4691 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "운영 서버로 전환할 수 없습니다. 설정이 불충분합니다." -#: access/transam/xlogrecovery.c:4617 +#: access/transam/xlogrecovery.c:4701 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "필요한 설정을 바꾸어 서버를 다시 시작하세요." -#: access/transam/xlogrecovery.c:4641 +#: access/transam/xlogrecovery.c:4725 #, c-format msgid "recovery aborted because of insufficient parameter settings" -msgstr "복원 작업이 불충분한 설정으로 중지 되었습니다." +msgstr "복구 작업이 불충분한 설정으로 중지 되었습니다." -#: access/transam/xlogrecovery.c:4647 +#: access/transam/xlogrecovery.c:4731 #, c-format msgid "" "You can restart the server after making the necessary configuration changes." msgstr "필요한 설정을 바꾸어 서버를 다시 시작할 수 있습니다." -#: access/transam/xlogrecovery.c:4689 +#: access/transam/xlogrecovery.c:4773 #, c-format msgid "multiple recovery targets specified" msgstr "복구 대상을 다중 지정했음" -#: access/transam/xlogrecovery.c:4690 +#: access/transam/xlogrecovery.c:4774 #, c-format msgid "" -"At most one of recovery_target, recovery_target_lsn, recovery_target_name, " -"recovery_target_time, recovery_target_xid may be set." +"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 이들 중 하나는 지정해야합니다." +"\"recovery_target\", \"recovery_target_lsn\", \"recovery_target_name\", " +"\"recovery_target_time\", \"recovery_target_xid\" 이들 중 하나는 지정해야합니" +"다." -#: access/transam/xlogrecovery.c:4701 +#: access/transam/xlogrecovery.c:4785 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "이 값으로는 \"immediate\" 만 허용합니다." -#: access/transam/xlogrecovery.c:4853 utils/adt/timestamp.c:186 -#: utils/adt/timestamp.c:439 +#: access/transam/xlogrecovery.c:4937 utils/adt/timestamp.c:202 +#: utils/adt/timestamp.c:455 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "타임스탬프 값이 범위를 벗어났음: \"%s\"" -#: access/transam/xlogrecovery.c:4898 +#: access/transam/xlogrecovery.c:4982 #, c-format -msgid "recovery_target_timeline is not a valid number." -msgstr "recovery_target_timeline 값으로 잘못된 숫자입니다." +msgid "\"recovery_target_timeline\" is not a valid number." +msgstr "\"recovery_target_timeline\" 값으로 잘못된 숫자입니다." -#: access/transam/xlogutils.c:1039 +#: access/transam/xlogutils.c:1032 #, c-format msgid "could not read from WAL segment %s, offset %d: %m" msgstr "%s WAL 조각에서 읽기 실패, offset %d: %m" -#: access/transam/xlogutils.c:1046 +#: access/transam/xlogutils.c:1039 #, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" msgstr "%s WAL 조각에서 읽기 실패, 위치: %d, %d 읽음(전체: %d)" -#: archive/shell_archive.c:96 +#: archive/shell_archive.c:98 #, c-format msgid "archive command failed with exit code %d" msgstr "아카이브 명령 실패, 종료 코드: %d" -#: archive/shell_archive.c:98 archive/shell_archive.c:108 -#: archive/shell_archive.c:114 archive/shell_archive.c:123 +#: archive/shell_archive.c:100 archive/shell_archive.c:110 +#: archive/shell_archive.c:116 archive/shell_archive.c:125 #, c-format msgid "The failed archive command was: %s" msgstr "실패한 아카이브 명령: %s" -#: archive/shell_archive.c:105 +#: archive/shell_archive.c:107 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "0x%X 예외로 인해 아카이브 명령이 종료됨" -#: archive/shell_archive.c:107 postmaster/postmaster.c:3678 +#: archive/shell_archive.c:109 postmaster/postmaster.c:3093 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16진수 값에 대한 설명은 C 포함 파일 \"ntstatus.h\"를 참조하십시오." -#: archive/shell_archive.c:112 +#: archive/shell_archive.c:114 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "%d번 시그널로 인해 아카이브 명령이 종료됨: %s" -#: archive/shell_archive.c:121 +#: archive/shell_archive.c:123 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "아카이브 명령이 인식할 수 없는 %d 상태로 종료됨" -#: backup/backup_manifest.c:253 +#: backup/backup_manifest.c:254 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "%u 타임라인이 끝이어야하는데, %u 타임라인임" -#: backup/backup_manifest.c:277 +#: backup/backup_manifest.c:278 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "시작 타임라인이 %u 여야하는데, %u 타임라인임" -#: backup/backup_manifest.c:304 +#: backup/backup_manifest.c:305 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "%u 시작 타임라인이 %u 타임라인 내역안에 없음" -#: backup/backup_manifest.c:355 +#: backup/backup_manifest.c:356 #, c-format msgid "could not rewind temporary file" msgstr "임시 파일을 되감을 수 없음" -#: backup/basebackup.c:470 +#: backup/basebackup.c:479 #, c-format msgid "could not find any WAL files" msgstr "어떤 WAL 파일도 찾을 수 없음" -#: backup/basebackup.c:485 backup/basebackup.c:500 backup/basebackup.c:509 +#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 #, c-format msgid "could not find WAL file \"%s\"" msgstr "\"%s\" WAL 파일 찾기 실패" -#: backup/basebackup.c:551 backup/basebackup.c:576 +#: backup/basebackup.c:560 backup/basebackup.c:585 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "\"%s\" WAL 파일의 크기가 알맞지 않음" -#: backup/basebackup.c:646 +#: backup/basebackup.c:656 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" msgstr[0] "%lld 전체 체크섬 검사 실패" -#: backup/basebackup.c:653 +#: backup/basebackup.c:663 #, c-format msgid "checksum verification failure during base backup" msgstr "베이스 백업 중 체크섬 검사 실패" -#: backup/basebackup.c:722 backup/basebackup.c:731 backup/basebackup.c:742 -#: backup/basebackup.c:759 backup/basebackup.c:768 backup/basebackup.c:779 -#: backup/basebackup.c:796 backup/basebackup.c:805 backup/basebackup.c:817 -#: backup/basebackup.c:841 backup/basebackup.c:855 backup/basebackup.c:866 -#: backup/basebackup.c:877 backup/basebackup.c:890 +#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 +#: backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 +#: backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 +#: backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 +#: backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 #, c-format msgid "duplicate option \"%s\"" msgstr "\"%s\" 옵션을 두 번 지정했습니다" -#: backup/basebackup.c:750 +#: backup/basebackup.c:761 #, c-format msgid "unrecognized checkpoint type: \"%s\"" msgstr "알 수 없는 체크포인트 종류: \"%s\"" -#: backup/basebackup.c:785 +#: backup/basebackup.c:793 +#, c-format +msgid "incremental backups cannot be taken unless WAL summarization is enabled" +msgstr "증분 백업은 summarize_wal=on 상태에서만 가능함" + +#: backup/basebackup.c:809 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "" "%d 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%d .. %d)를 벗어났습니다." -#: backup/basebackup.c:830 +#: backup/basebackup.c:854 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "인식할 수 없는 메니페스트 옵션 \"%s\"" -#: backup/basebackup.c:846 -#, c-format -msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "알 수 없는 체크섬 알고리즘: \"%s\"" - -#: backup/basebackup.c:881 +#: backup/basebackup.c:905 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "알 수 없는 압축 알고리즘: \"%s\"" -#: backup/basebackup.c:897 +#: backup/basebackup.c:921 #, c-format msgid "unrecognized base backup option: \"%s\"" msgstr "인식할 수 없는 베이스 백업 옵션: \"%s\"" -#: backup/basebackup.c:908 +#: backup/basebackup.c:932 #, c-format msgid "manifest checksums require a backup manifest" msgstr "매니페스트 체크섬은 하나의 백업 메니페스트를 필요로 함" -#: backup/basebackup.c:917 +#: backup/basebackup.c:941 #, c-format msgid "target detail cannot be used without target" msgstr "타켓 지정 없이 타켓 세부정보를 지정할 수 없음" -#: backup/basebackup.c:926 backup/basebackup_target.c:218 +#: backup/basebackup.c:950 backup/basebackup_target.c:218 #, c-format msgid "target \"%s\" does not accept a target detail" msgstr "\"%s\" 타켓은 타켓 세부정보를 지정할 수 없음" -#: backup/basebackup.c:937 +#: backup/basebackup.c:961 #, c-format msgid "compression detail cannot be specified unless compression is enabled" msgstr "압축을 사용하지 않으면 압축 세부 정보를 지정할 수 없음" -#: backup/basebackup.c:950 +#: backup/basebackup.c:974 #, c-format msgid "invalid compression specification: %s" msgstr "잘못된 압축 명세: %s" -#: backup/basebackup.c:1116 backup/basebackup.c:1294 +#: backup/basebackup.c:1024 +#, c-format +msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" +msgstr "증북 BASE_BACKUP 수행 전에 UPLOAD_MANIFEST 있어야 함" + +#: backup/basebackup.c:1157 backup/basebackup.c:1358 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "파일 또는 디렉터리 \"%s\"의 상태를 확인할 수 없음: %m" -#: backup/basebackup.c:1430 +#: backup/basebackup.c:1544 #, c-format msgid "skipping special file \"%s\"" msgstr "\"%s\" 특수 파일을 건너뜀" -#: backup/basebackup.c:1542 -#, c-format -msgid "invalid segment number %d in file \"%s\"" -msgstr "잘못된 조각 번호 %d, 해당 파일: \"%s\"" - -#: backup/basebackup.c:1574 +#: backup/basebackup.c:1751 #, c-format msgid "" "could not verify checksum in file \"%s\", block %u: read buffer size %d and " @@ -4027,7 +4311,13 @@ msgstr "" "\"%s\" 파일(%u 블록)에서 체크섬 검사 실패: 읽기 버퍼(%d)와 페이지 크기(%d)가 " "서로 다름" -#: backup/basebackup.c:1658 +#: backup/basebackup.c:1813 +#, c-format +msgid "file \"%s\" has a total of %d checksum verification failure" +msgid_plural "file \"%s\" has a total of %d checksum verification failures" +msgstr[0] "\"%s\" 파일에서 전체 %d 건 체크섬 검사 실패" + +#: backup/basebackup.c:1917 #, c-format msgid "" "checksum verification failed in file \"%s\", block %u: calculated %X but " @@ -4035,7 +4325,7 @@ msgid "" msgstr "" "\"%s\" 파일 체크섬 검사 실패(해당 블럭 %u): 계산된 체크섬 %X (기대값 %X)" -#: backup/basebackup.c:1665 +#: backup/basebackup.c:1924 #, c-format msgid "" "further checksum verification failures in file \"%s\" will not be reported" @@ -4043,24 +4333,23 @@ msgstr "" "계속해서 발생하는 \"%s\"에서의 체크섬 검사 실패는 더 이상 보고하지 않을 것입" "니다." -#: backup/basebackup.c:1721 -#, c-format -msgid "file \"%s\" has a total of %d checksum verification failure" -msgid_plural "file \"%s\" has a total of %d checksum verification failures" -msgstr[0] "\"%s\" 파일에서 전체 %d 건 체크섬 검사 실패" - -#: backup/basebackup.c:1767 +#: backup/basebackup.c:2048 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "tar 파일로 묶기에는 파일 이름이 너무 긺: \"%s\"" -#: backup/basebackup.c:1772 +#: backup/basebackup.c:2053 #, c-format msgid "" "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "" -"tar 포멧을 사용하기에는 심볼릭 링크의 대상 경로가 너무 깁니다: 파일 이름 \"%s" -"\", 대상 \"%s\"" +"tar 포멧을 사용하기에는 심볼릭 링크의 대상 경로가 너무 깁니다: 파일 이름 " +"\"%s\", 대상 \"%s\"" + +#: backup/basebackup.c:2127 +#, c-format +msgid "could not read file \"%s\": read %zd of %zu" +msgstr "\"%s\" 파일을 읽을 수 없음: %zd 읽음, 전체 %zu" #: backup/basebackup_gzip.c:67 #, c-format @@ -4072,55 +4361,148 @@ msgstr "gzip 압축 기능을 뺀 채로 서버가 만들어졌습니다." msgid "could not initialize compression library" msgstr "압축 라이브러리를 초기화할 수 없음" +#: backup/basebackup_incremental.c:294 +#, c-format +msgid "manifest contains no required WAL ranges" +msgstr "매니페스트에 필요한 WAL 범위가 없음" + +#: 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:414 +#, c-format +msgid "" +"manifest requires WAL from initial timeline %u starting at %X/%X, but that " +"timeline begins at %X/%X" +msgstr "" +"매니페스트에는 시작 타임라인이 %u번으로 %X/%X에 있다고 해서 그 WAL 파일이 필요한데, " +"그 타임라인은 %X/%X에 있음" + +#: 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 "" +"매니페스트에는 연결 타임라인이 %u번으로 %X/%X에 있다고 해서 그 WAL 파일이 필요한데, " +"그 타임라인은 %X/%X에 있음" + +#: 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 "" +"매니페스트에는 최종 타임라인이 %u번으로 %X/%X에 있다고 해서 그 WAL 파일이 필요한데, " +"이 백업은 %X/%X에서 시작됨" + +#: backup/basebackup_incremental.c:439 +#, c-format +msgid "" +"This can happen for incremental backups on a standby if there was little " +"activity since the previous backup." +msgstr "" +"이 현상은 이전 백업 이후 DB 사용이 거의 없었는데, 대기 서버에서 증분 백업을 " +"받는 경우 발생합니다." + +#: backup/basebackup_incremental.c:446 +#, c-format +msgid "" +"manifest requires WAL from non-final timeline %u ending at %X/%X, but this " +"server switched timelines at %X/%X" +msgstr "" +"매니페스트에는 %u 타임라인을 끝내는 것이 %X/%X에 있어 그 WAL 파일이 필요한데, " +"서버는 %X/%X에서 타임라인이 바뀌었음" + +#: 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 "" +"WAL 요약 정보에서는 %u번 타임라인은 %X/%X에서 %X/%X까지인데, " +"이 타임라인과 범위에 대한 요약을 못 찾음" + +#: 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 "" +"WAL 요약 정보에서는 %u번 타임라인은 %X/%X에서 %X/%X까지인데, " +"이 타임라인과 범위에 대한 요약이 불완전함" + +#: backup/basebackup_incremental.c:538 +#, c-format +msgid "The first unsummarized LSN in this range is %X/%X." +msgstr "이 범위 안의 첫번째 요약푼 LSN은 %X/%X입니다." + +#: backup/basebackup_incremental.c:938 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "백업 매니페이스 버전이 1인데, 이것은 증분 백업을 지원하지 않음" + +#: backup/basebackup_incremental.c:956 +#, c-format +msgid "" +"system identifier in backup manifest is %llu, but database system identifier " +"is %llu" +msgstr "" +"백업 매니페스트에는 시스템 식별자 번호가 %llu인데, 데이터베이스 시스템 식별자는 " +"%llu임" + #: backup/basebackup_lz4.c:67 #, c-format msgid "lz4 compression is not supported by this build" msgstr "lz4 기능을 뺀 채로 서버가 만들어졌습니다." -#: backup/basebackup_server.c:75 +#: backup/basebackup_server.c:73 #, c-format msgid "permission denied to create backup stored on server" msgstr "서버에 백업본을 만들기 위한 권한 없음" -#: backup/basebackup_server.c:76 +#: backup/basebackup_server.c:74 #, c-format msgid "" "Only roles with privileges of the \"%s\" role may create a backup stored on " "the server." msgstr "서버에 백업 결과를 파일로 저장하려면, \"%s\" 롤 구성원이어야 합니다." -#: backup/basebackup_server.c:91 +#: backup/basebackup_server.c:89 #, c-format msgid "relative path not allowed for backup stored on server" msgstr "백업을 서버에 저장할 경로 이름으로 상대경로는 사용할 수 없습니다" -#: backup/basebackup_server.c:104 commands/dbcommands.c:501 -#: commands/tablespace.c:163 commands/tablespace.c:179 -#: commands/tablespace.c:599 commands/tablespace.c:644 replication/slot.c:1704 +#: backup/basebackup_server.c:102 commands/dbcommands.c:477 +#: commands/tablespace.c:157 commands/tablespace.c:173 +#: commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" -#: backup/basebackup_server.c:117 +#: backup/basebackup_server.c:115 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "\"%s\" 디렉터리가 비어있지 않습니다." -#: backup/basebackup_server.c:125 utils/init/postinit.c:1164 +#: backup/basebackup_server.c:123 utils/init/postinit.c:1178 #, c-format msgid "could not access directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" -#: backup/basebackup_server.c:177 backup/basebackup_server.c:184 -#: backup/basebackup_server.c:270 backup/basebackup_server.c:277 -#: storage/smgr/md.c:504 storage/smgr/md.c:511 storage/smgr/md.c:593 -#: storage/smgr/md.c:615 storage/smgr/md.c:865 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 +#: backup/basebackup_server.c:268 backup/basebackup_server.c:275 +#: backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 +#: storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 #, c-format msgid "Check free disk space." msgstr "디스크 여유 공간을 확인해 주십시오." -#: backup/basebackup_server.c:181 backup/basebackup_server.c:274 +#: backup/basebackup_server.c:179 backup/basebackup_server.c:272 +#: backup/walsummary.c:309 #, c-format msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" msgstr "\"%s\" 파일 쓰기 실패: %d 바이트만 썼음(전체: %d), 해당 블록: %u" @@ -4150,248 +4532,248 @@ msgstr "압축 작업자 수를 %d 값으로 지정할 수 없음: %s" msgid "could not enable long-distance mode: %s" msgstr "long-distance 모드를 활성화 할 수 없음: %s" -#: bootstrap/bootstrap.c:243 postmaster/postmaster.c:721 tcop/postgres.c:3819 +#: backup/walsummaryfuncs.c:95 +#, c-format +msgid "invalid timeline %lld" +msgstr "잘못된 타임라인 번호 %lld" + +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 #, c-format msgid "--%s requires a value" msgstr "--%s 옵션은 해당 값을 지정해야 합니다" -#: bootstrap/bootstrap.c:248 postmaster/postmaster.c:726 tcop/postgres.c:3824 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 #, c-format msgid "-c %s requires a value" msgstr "-c %s 옵션은 해당 값을 지정해야 합니다" -#: bootstrap/bootstrap.c:289 -#, c-format -msgid "-X requires a power of two value between 1 MB and 1 GB" -msgstr "-X 값은 1 MB ~ 1 GB 사이 2^n 값이어야 함" - -#: bootstrap/bootstrap.c:295 postmaster/postmaster.c:844 -#: postmaster/postmaster.c:857 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 +#: postmaster/postmaster.c:759 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" -#: bootstrap/bootstrap.c:304 +#: bootstrap/bootstrap.c:291 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: 잘못된 명령행 인자\n" -#: catalog/aclchk.c:201 +#: catalog/aclchk.c:211 #, c-format msgid "grant options can only be granted to roles" msgstr "grant 옵션들은 롤에서만 지정될 수 있습니다" -#: catalog/aclchk.c:323 +#: catalog/aclchk.c:333 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")에 대한 권한이 부여되지 않았음" -#: catalog/aclchk.c:328 +#: catalog/aclchk.c:338 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "\"%s\"에 대한 권한이 부여되지 않았음" -#: catalog/aclchk.c:336 +#: catalog/aclchk.c:346 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")에 대한 일부 권한이 부여되지 않았음" -#: catalog/aclchk.c:341 +#: catalog/aclchk.c:351 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "\"%s\"에 대한 일부 권한이 부여되지 않았음" -#: catalog/aclchk.c:352 +#: catalog/aclchk.c:362 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")에 대한 권한을 취소할 수 없음" -#: catalog/aclchk.c:357 +#: catalog/aclchk.c:367 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "\"%s\"에 대한 권한을 취소할 수 없음" -#: catalog/aclchk.c:365 +#: catalog/aclchk.c:375 #, c-format msgid "" "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")의 일부 권한을 박탈할 수 없음" -#: catalog/aclchk.c:370 +#: catalog/aclchk.c:380 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "\"%s\"에 대한 일부 권한을 취소할 수 없음" -#: catalog/aclchk.c:402 +#: catalog/aclchk.c:412 #, c-format msgid "grantor must be current user" msgstr "권한 수여자는 현재 사용자여야합니다" -#: catalog/aclchk.c:470 catalog/aclchk.c:1045 +#: catalog/aclchk.c:480 catalog/aclchk.c:1055 #, c-format msgid "invalid privilege type %s for relation" msgstr "릴레이션의 %s 권한은 잘못된 종류임" -#: catalog/aclchk.c:474 catalog/aclchk.c:1049 +#: catalog/aclchk.c:484 catalog/aclchk.c:1059 #, c-format msgid "invalid privilege type %s for sequence" msgstr "시퀀스의 %s 권한은 잘못된 종류임" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:488 #, c-format msgid "invalid privilege type %s for database" msgstr "%s 권한은 데이터베이스에는 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:492 #, c-format msgid "invalid privilege type %s for domain" msgstr "%s 권한은 도메인에서 유효하지 않음" -#: catalog/aclchk.c:486 catalog/aclchk.c:1053 +#: catalog/aclchk.c:496 catalog/aclchk.c:1063 #, c-format msgid "invalid privilege type %s for function" msgstr "%s 권한은 함수에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:490 +#: catalog/aclchk.c:500 #, c-format msgid "invalid privilege type %s for language" msgstr "%s 권한은 프로시주얼 언어에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:494 +#: catalog/aclchk.c:504 #, c-format msgid "invalid privilege type %s for large object" msgstr "%s 권한은 대형 개체에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:498 catalog/aclchk.c:1069 +#: catalog/aclchk.c:508 catalog/aclchk.c:1079 #, c-format msgid "invalid privilege type %s for schema" msgstr "%s 권한은 스키마(schema)에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:502 catalog/aclchk.c:1057 +#: catalog/aclchk.c:512 catalog/aclchk.c:1067 #, c-format msgid "invalid privilege type %s for procedure" msgstr "프로시져용 %s 권한 종류가 잘못됨" -#: catalog/aclchk.c:506 catalog/aclchk.c:1061 +#: catalog/aclchk.c:516 catalog/aclchk.c:1071 #, c-format msgid "invalid privilege type %s for routine" msgstr "루틴용 %s 권한 종류가 잘못됨" -#: catalog/aclchk.c:510 +#: catalog/aclchk.c:520 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "%s 권한은 테이블스페이스에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:514 catalog/aclchk.c:1065 +#: catalog/aclchk.c:524 catalog/aclchk.c:1075 #, c-format msgid "invalid privilege type %s for type" msgstr "%s 권한은 자료형에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:518 +#: catalog/aclchk.c:528 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "%s 권한 형식은 외부 데이터 래퍼에 유효하지 않음" -#: catalog/aclchk.c:522 +#: catalog/aclchk.c:532 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "%s 권한 형식은 외부 서버에 유효하지 않음" -#: catalog/aclchk.c:526 +#: catalog/aclchk.c:536 #, c-format msgid "invalid privilege type %s for parameter" msgstr "잘못된 환경 설정 매개 변수용 권한 형태: %s" -#: catalog/aclchk.c:565 +#: catalog/aclchk.c:575 #, c-format msgid "column privileges are only valid for relations" msgstr "칼럼 권한은 릴레이션에서만 유효함" -#: catalog/aclchk.c:728 catalog/aclchk.c:3555 catalog/objectaddress.c:1092 -#: catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:287 +#: 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 large object 없음" -#: catalog/aclchk.c:1102 +#: catalog/aclchk.c:1112 #, c-format msgid "default privileges cannot be set for columns" msgstr "default privileges 설정은 칼럼 대상으로 할 수 없음" -#: catalog/aclchk.c:1138 +#: catalog/aclchk.c:1148 #, c-format msgid "permission denied to change default privileges" msgstr "default privileges 변경 권한 없음" -#: catalog/aclchk.c:1256 +#: catalog/aclchk.c:1266 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "GRANT/REVOKE ON SCHEMAS 구문을 쓸 때는 IN SCHEMA 구문을 쓸 수 없음" -#: catalog/aclchk.c:1595 catalog/catalog.c:631 catalog/objectaddress.c:1561 -#: catalog/pg_publication.c:533 commands/analyze.c:390 commands/copy.c:837 -#: commands/sequence.c:1663 commands/tablecmds.c:7339 commands/tablecmds.c:7495 -#: commands/tablecmds.c:7545 commands/tablecmds.c:7619 -#: commands/tablecmds.c:7689 commands/tablecmds.c:7801 -#: commands/tablecmds.c:7895 commands/tablecmds.c:7954 -#: commands/tablecmds.c:8043 commands/tablecmds.c:8073 -#: commands/tablecmds.c:8201 commands/tablecmds.c:8283 -#: commands/tablecmds.c:8417 commands/tablecmds.c:8525 -#: commands/tablecmds.c:12240 commands/tablecmds.c:12421 -#: commands/tablecmds.c:12582 commands/tablecmds.c:13744 -#: commands/tablecmds.c:16273 commands/trigger.c:949 parser/analyze.c:2518 -#: parser/parse_relation.c:737 parser/parse_target.c:1054 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3413 -#: parser/parse_utilcmd.c:3449 parser/parse_utilcmd.c:3491 utils/adt/acl.c:2876 -#: utils/adt/ruleutils.c:2799 +#: 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\" 릴레이션(relation)에 없음" -#: catalog/aclchk.c:1840 +#: catalog/aclchk.c:1862 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" 개체는 인덱스임" -#: catalog/aclchk.c:1847 commands/tablecmds.c:13901 commands/tablecmds.c:17172 +#: 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:1855 catalog/objectaddress.c:1401 commands/sequence.c:1171 -#: commands/tablecmds.c:254 commands/tablecmds.c:17136 utils/adt/acl.c:2084 -#: utils/adt/acl.c:2114 utils/adt/acl.c:2146 utils/adt/acl.c:2178 -#: utils/adt/acl.c:2206 utils/adt/acl.c:2236 +#: 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:1893 +#: catalog/aclchk.c:1915 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "\"%s\" 시퀀스는 USAGE, SELECT 및 UPDATE 권한만 지원함" -#: catalog/aclchk.c:1910 +#: catalog/aclchk.c:1932 #, c-format msgid "invalid privilege type %s for table" msgstr "%s 권한은 테이블에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:2072 +#: catalog/aclchk.c:2097 #, c-format msgid "invalid privilege type %s for column" msgstr "%s 권한 형식은 칼럼에서 유효하지 않음" -#: catalog/aclchk.c:2085 +#: catalog/aclchk.c:2110 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "\"%s\" 시퀀스는 SELECT 열 권한만 지원함" -#: catalog/aclchk.c:2275 +#: catalog/aclchk.c:2301 #, c-format msgid "language \"%s\" is not trusted" msgstr "\"%s\" 프로시주얼 언어는 안전하지 못합니다" -#: catalog/aclchk.c:2277 +#: catalog/aclchk.c:2303 #, c-format msgid "" "GRANT and REVOKE are not allowed on untrusted languages, because only " @@ -4400,400 +4782,411 @@ msgstr "" "안전하지 않은 프로시져 언어에 대해서는 GRANT 또는 REVOKE 작업을 허용하지 않습" "니다, 안전하지 않은 프로시져 언어는 슈퍼유저만 사용할 수 있기 때문입니다." -#: catalog/aclchk.c:2427 +#: catalog/aclchk.c:2454 #, c-format msgid "cannot set privileges of array types" msgstr "배열형 자료형에 권한 설정을 할 수 없음" -#: catalog/aclchk.c:2428 +#: catalog/aclchk.c:2455 #, c-format msgid "Set the privileges of the element type instead." msgstr "그 배열 요소에 해당하는 자료형에 대해서 접근 권한 설정을 하세요." -#: catalog/aclchk.c:2435 catalog/objectaddress.c:1667 +#: catalog/aclchk.c:2459 +#, c-format +msgid "cannot set privileges of multirange types" +msgstr "다중 범위 자료형에 권한 설정을 할 수 없음" + +#: catalog/aclchk.c:2460 +#, c-format +msgid "Set the privileges of the range type instead." +msgstr "해당하는 범위 자료형에 대해서 접근 권한 설정을 하세요." + +#: catalog/aclchk.c:2467 catalog/objectaddress.c:1629 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" 이름의 개체는 도메인이 아닙니다" -#: catalog/aclchk.c:2619 +#: catalog/aclchk.c:2653 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "알 수 없는 권한 타입 \"%s\"" -#: catalog/aclchk.c:2684 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for aggregate %s" msgstr "%s 집계함수에 대한 접근 권한 없음" -#: catalog/aclchk.c:2687 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for collation %s" msgstr "%s 정렬정의(collation) 접근 권한 없음" -#: catalog/aclchk.c:2690 +#: catalog/aclchk.c:2726 #, c-format msgid "permission denied for column %s" msgstr "%s 칼럼에 대한 접근 권한 없음" -#: catalog/aclchk.c:2693 +#: catalog/aclchk.c:2729 #, c-format msgid "permission denied for conversion %s" msgstr "%s 문자코드변환규칙(conversion) 접근 권한 없음" -#: catalog/aclchk.c:2696 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for database %s" msgstr "%s 데이터베이스 접근 권한 없음" -#: catalog/aclchk.c:2699 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for domain %s" msgstr "%s 도메인에 대한 접근 권한 없음" -#: catalog/aclchk.c:2702 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for event trigger %s" msgstr "%s 이벤트 트리거 접근 권한 없음" -#: catalog/aclchk.c:2705 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for extension %s" msgstr "%s 확장 모듈 접근 권한 없음" -#: catalog/aclchk.c:2708 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "%s 외부 데이터 래퍼 접근 권한 없음" -#: catalog/aclchk.c:2711 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for foreign server %s" msgstr "%s 외부 서버 접근 권한 없음" -#: catalog/aclchk.c:2714 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for foreign table %s" msgstr "%s 외부 테이블 접근 권한 없음" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for function %s" msgstr "%s 함수 접근 권한 없음" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2756 #, c-format msgid "permission denied for index %s" msgstr "%s 인덱스 접근 권한 없음" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2759 #, c-format msgid "permission denied for language %s" msgstr "%s 프로시주얼 언어 접근 권한 없음" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2762 #, c-format msgid "permission denied for large object %s" msgstr "%s 대형 개체 접근 권한 없음" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2765 #, c-format msgid "permission denied for materialized view %s" msgstr "%s 구체화된 뷰에 대한 접근 권한 없음" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2768 #, c-format msgid "permission denied for operator class %s" msgstr "%s 연산자 클래스 접근 권한 없음" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2771 #, c-format msgid "permission denied for operator %s" msgstr "%s 연산자 접근 권한 없음" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2774 #, c-format msgid "permission denied for operator family %s" msgstr "%s 연산자 패밀리 접근 권한 없음" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2777 #, c-format msgid "permission denied for parameter %s" msgstr "%s 환경 설정 매개 변수 접근 권한 없음" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2780 #, c-format msgid "permission denied for policy %s" msgstr "%s 정책에 대한 접근 권한 없음" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2783 #, c-format msgid "permission denied for procedure %s" msgstr "%s 프로시져에 대한 접근 권한 없음" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2786 #, c-format msgid "permission denied for publication %s" msgstr "%s 발행 접근 권한 없음" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2789 #, c-format msgid "permission denied for routine %s" msgstr "%s 루틴에 대한 접근 권한 없음" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2792 #, c-format msgid "permission denied for schema %s" msgstr "%s 스키마(schema) 접근 권한 없음" -#: catalog/aclchk.c:2759 commands/sequence.c:659 commands/sequence.c:885 -#: commands/sequence.c:927 commands/sequence.c:968 commands/sequence.c:1761 -#: commands/sequence.c:1810 +#: 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:2762 +#: catalog/aclchk.c:2798 #, c-format msgid "permission denied for statistics object %s" msgstr "%s 개체 통계정보 접근 권한 없음" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2801 #, c-format msgid "permission denied for subscription %s" msgstr "%s 구독 접근 권한 없음" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2804 #, c-format msgid "permission denied for table %s" msgstr "%s 테이블에 대한 접근 권한 없음" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2807 #, c-format msgid "permission denied for tablespace %s" msgstr "%s 테이블스페이스 접근 권한 없음" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2810 #, c-format msgid "permission denied for text search configuration %s" msgstr "%s 전문 검색 구성 접근 권한 없음" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2813 #, c-format msgid "permission denied for text search dictionary %s" msgstr "%s 전문 검색 사전 접근 권한 없음" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2816 #, c-format msgid "permission denied for type %s" msgstr "%s 자료형 접근 권한 없음" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2819 #, c-format msgid "permission denied for view %s" msgstr "%s 뷰에 대한 접근 권한 없음" -#: catalog/aclchk.c:2819 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of aggregate %s" msgstr "%s 집계함수의 소유주여야만 합니다" -#: catalog/aclchk.c:2822 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of collation %s" msgstr "%s 정렬정의(collation)의 소유주여야만 합니다" -#: catalog/aclchk.c:2825 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of conversion %s" msgstr "%s 문자코드변환규칙(conversion)의 소유주여야만 합니다" -#: catalog/aclchk.c:2828 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of database %s" msgstr "%s 데이터베이스의 소유주여야만 합니다" -#: catalog/aclchk.c:2831 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of domain %s" msgstr "%s 도메인의 소유주여야만 합니다" -#: catalog/aclchk.c:2834 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of event trigger %s" msgstr "%s 이벤트 트리거의 소유주여야만 합니다" -#: catalog/aclchk.c:2837 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of extension %s" msgstr "%s 확장 모듈의 소유주여야만 합니다" -#: catalog/aclchk.c:2840 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "%s 외부 데이터 래퍼의 소유주여야 함" -#: catalog/aclchk.c:2843 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of foreign server %s" msgstr "%s 외부 서버의 소유주여야 함" -#: catalog/aclchk.c:2846 +#: catalog/aclchk.c:2882 #, c-format msgid "must be owner of foreign table %s" msgstr "%s 외부 테이블의 소유주여야 함" -#: catalog/aclchk.c:2849 +#: catalog/aclchk.c:2885 #, c-format msgid "must be owner of function %s" msgstr "%s 함수의 소유주여야만 합니다" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2888 #, c-format msgid "must be owner of index %s" msgstr "%s 인덱스의 소유주여야만 합니다" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2891 #, c-format msgid "must be owner of language %s" msgstr "%s 프로시주얼 언어의 소유주여야만 합니다" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2894 #, c-format msgid "must be owner of large object %s" msgstr "%s 대형 개체의 소유주여야만 합니다" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2897 #, c-format msgid "must be owner of materialized view %s" msgstr "%s 구체화된 뷰의 소유주여야만 합니다" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2900 #, c-format msgid "must be owner of operator class %s" msgstr "%s 연산자 클래스의 소유주여야만 합니다" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2903 #, c-format msgid "must be owner of operator %s" msgstr "%s 연산자의 소유주여야만 합니다" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2906 #, c-format msgid "must be owner of operator family %s" msgstr "%s 연산자 패밀리의 소유주여야 함" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2909 #, c-format msgid "must be owner of procedure %s" msgstr "%s 프로시져의 소유주여야만 합니다" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2912 #, c-format msgid "must be owner of publication %s" msgstr "%s 발행의 소유주여야만 합니다" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2915 #, c-format msgid "must be owner of routine %s" msgstr "%s 루틴의 소유주여야만 합니다" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2918 #, c-format msgid "must be owner of sequence %s" msgstr "%s 시퀀스의 소유주여야만 합니다" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2921 #, c-format msgid "must be owner of subscription %s" msgstr "%s 구독의 소유주여야만 합니다" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2924 #, c-format msgid "must be owner of table %s" msgstr "%s 테이블의 소유주여야만 합니다" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2927 #, c-format msgid "must be owner of type %s" msgstr "%s 자료형의 소유주여야만 합니다" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2930 #, c-format msgid "must be owner of view %s" msgstr "%s 뷰의 소유주여야만 합니다" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2933 #, c-format msgid "must be owner of schema %s" msgstr "%s 스키마(schema)의 소유주여야만 합니다" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2936 #, c-format msgid "must be owner of statistics object %s" msgstr "%s 통계정보 개체의 소유주여야만 합니다" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2939 #, c-format msgid "must be owner of tablespace %s" msgstr "%s 테이블스페이스의 소유주여야만 합니다" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2942 #, c-format msgid "must be owner of text search configuration %s" msgstr "%s 전문 검색 구성의 소유주여야 함" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2945 #, c-format msgid "must be owner of text search dictionary %s" msgstr "%s 전문 검색 사전의 소유주여야 함" -#: catalog/aclchk.c:2923 +#: catalog/aclchk.c:2959 #, c-format msgid "must be owner of relation %s" msgstr "%s 릴레이션(relation)의 소유주여야만 합니다" -#: catalog/aclchk.c:2969 +#: catalog/aclchk.c:3005 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\") 접근 권한 없음" -#: catalog/aclchk.c:3104 catalog/aclchk.c:3979 catalog/aclchk.c:4011 +#: 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:3188 catalog/aclchk.c:3207 +#: catalog/aclchk.c:3245 catalog/aclchk.c:3264 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "%d번째 속성(해당 릴레이션 OID: %u)이 없음" -#: catalog/aclchk.c:3302 +#: 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 릴레이션(relation) 없음" -#: catalog/aclchk.c:3476 +#: catalog/aclchk.c:3550 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "OID %u 환경 설정 매개 변수 ACL이 없음" -#: catalog/aclchk.c:3640 commands/collationcmds.c:808 -#: commands/publicationcmds.c:1746 +#: 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:3705 utils/cache/typcache.c:385 utils/cache/typcache.c:440 +#: 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:449 +#: catalog/catalog.c:477 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "\"%s\" 릴레이션에서 사용되지 않는 OID를 여전히 찾는 중" -#: catalog/catalog.c:451 +#: catalog/catalog.c:479 #, c-format msgid "" "OID candidates have been checked %llu time, but no unused OID has been found " @@ -4804,63 +5197,63 @@ msgid_plural "" msgstr[0] "" "OID 후보를 뽑기 위해 %llu 번 시도했지만, 아직 사용되지 않는 OID를 찾지 못함" -#: catalog/catalog.c:476 +#: 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] "\"%s\" 릴레이션의 새 OID를 %llu 시도 끝에 배정함" -#: catalog/catalog.c:609 catalog/catalog.c:676 +#: catalog/catalog.c:637 catalog/catalog.c:704 #, c-format msgid "must be superuser to call %s()" msgstr "%s() 호출은 슈퍼유저만 할 수 있음" -#: catalog/catalog.c:618 +#: catalog/catalog.c:646 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() 함수는 시스템 카탈로그 대상 전용임" -#: catalog/catalog.c:623 parser/parse_utilcmd.c:2264 +#: 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:640 +#: catalog/catalog.c:668 #, c-format msgid "column \"%s\" is not of type oid" msgstr "\"%s\" 칼럼은 oid 자료형이 아님" -#: catalog/catalog.c:647 +#: catalog/catalog.c:675 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "\"%s\" 인덱스는 \"%s\" 칼럼용 인덱스가 아님" -#: catalog/dependency.c:546 catalog/pg_shdepend.c:658 +#: 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 개체는 데이터베이스 시스템에서 필요하기 때문에 삭제 될 수 없음" -#: catalog/dependency.c:838 catalog/dependency.c:1065 +#: catalog/dependency.c:789 catalog/dependency.c:1016 #, c-format msgid "cannot drop %s because %s requires it" msgstr "%s 삭제할 수 없음, %s에서 필요로함" -#: catalog/dependency.c:840 catalog/dependency.c:1067 +#: catalog/dependency.c:791 catalog/dependency.c:1018 #, c-format msgid "You can drop %s instead." msgstr "대신에, drop %s 명령을 사용할 수 있음." -#: catalog/dependency.c:1146 catalog/dependency.c:1155 +#: catalog/dependency.c:1097 catalog/dependency.c:1106 #, c-format msgid "%s depends on %s" msgstr "%s 의존대상: %s" -#: catalog/dependency.c:1170 catalog/dependency.c:1179 +#: catalog/dependency.c:1121 catalog/dependency.c:1130 #, c-format msgid "drop cascades to %s" msgstr "%s 개체가 덩달아 삭제됨" -#: catalog/dependency.c:1187 catalog/pg_shdepend.c:823 +#: catalog/dependency.c:1138 catalog/pg_shdepend.c:868 #, c-format msgid "" "\n" @@ -4872,97 +5265,98 @@ msgstr[0] "" "\n" "%d 개의 기타 개체들도 함께 처리함 (목록은 서버 로그에 기록됨)" -#: catalog/dependency.c:1199 +#: catalog/dependency.c:1150 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "기타 다른 개체들이 이 개체에 의존하고 있어, %s 삭제할 수 없음" -#: catalog/dependency.c:1202 catalog/dependency.c:1209 -#: catalog/dependency.c:1220 commands/tablecmds.c:1335 -#: commands/tablecmds.c:14386 commands/tablespace.c:466 commands/user.c:1309 -#: commands/vacuum.c:211 commands/view.c:446 libpq/auth.c:326 -#: replication/logical/applyparallelworker.c:1044 replication/syncrep.c:1017 -#: storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1358 utils/misc/guc.c:3120 -#: utils/misc/guc.c:3156 utils/misc/guc.c:3226 utils/misc/guc.c:6615 -#: utils/misc/guc.c:6649 utils/misc/guc.c:6683 utils/misc/guc.c:6726 -#: utils/misc/guc.c:6768 +#: 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" -#: catalog/dependency.c:1203 catalog/dependency.c:1210 +#: catalog/dependency.c:1154 catalog/dependency.c:1161 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "" "이 개체와 관계된 모든 개체들을 함께 삭제하려면 DROP ... CASCADE 명령을 사용하" "십시오" -#: catalog/dependency.c:1207 +#: catalog/dependency.c:1158 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "다른 개체가 원하는 개체를 사용하고 있으므로 해당 개체를 삭제할 수 없음" -#: catalog/dependency.c:1215 +#: catalog/dependency.c:1166 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "%d개의 다른 개체에 대한 관련 항목 삭제" -#: catalog/dependency.c:1899 +#: catalog/dependency.c:1850 #, c-format msgid "constant of the type %s cannot be used here" msgstr "%s 자료형은 여기서 사용할 수 없음" -#: catalog/dependency.c:2420 parser/parse_relation.c:3404 -#: parser/parse_relation.c:3414 +#: 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\"" -#: catalog/heap.c:324 +#: catalog/heap.c:325 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "\"%s.%s\" 만들 권한이 없음" -#: catalog/heap.c:326 +#: catalog/heap.c:327 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "시스템 카탈로그 변경은 현재 허용하지 않습니다." -#: catalog/heap.c:466 commands/tablecmds.c:2374 commands/tablecmds.c:3047 -#: commands/tablecmds.c:6922 +#: 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:484 commands/tablecmds.c:7229 +#: catalog/heap.c:485 commands/tablecmds.c:7432 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "\"%s\" 열 이름은 시스템 열 이름과 충돌합니다" -#: catalog/heap.c:500 +#: catalog/heap.c:501 #, c-format msgid "column name \"%s\" specified more than once" msgstr "\"%s\" 칼럼 이름이 여러 번 지정됨" #. translator: first %s is an integer not a name -#: catalog/heap.c:575 +#: catalog/heap.c:579 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "\"%s\" 파티션 키 칼럼은 %s 의사 자료형(pseudo-type)을 사용합니다" -#: catalog/heap.c:580 +#: catalog/heap.c:584 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "\"%s\" 칼럼은 %s 의사 자료형(pseudo-type)을 사용합니다" -#: catalog/heap.c:611 +#: catalog/heap.c:615 #, 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:666 +#: catalog/heap.c:670 #, c-format msgid "" "no collation was derived for partition key column %s with collatable type %s" @@ -4970,27 +5364,27 @@ msgstr "" "\"%s\" 파티션 키 칼럼에 사용하는 %s 자료형에서 사용할 정렬규칙을 결정할 수없" "습니다." -#: catalog/heap.c:672 commands/createas.c:203 commands/createas.c:512 +#: 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 "" "\"%s\" 칼럼에 사용하는 %s 자료형에서 사용할 정렬규칙을 결정할 수 없습니다." -#: catalog/heap.c:1148 catalog/index.c:887 commands/createas.c:408 -#: commands/tablecmds.c:3987 +#: 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\" 이름의 릴레이션(relation)이 이미 있습니다" -#: catalog/heap.c:1164 catalog/pg_type.c:434 catalog/pg_type.c:782 -#: catalog/pg_type.c:954 commands/typecmds.c:249 commands/typecmds.c:261 -#: commands/typecmds.c:754 commands/typecmds.c:1169 commands/typecmds.c:1395 -#: commands/typecmds.c:1575 commands/typecmds.c:2546 +#: catalog/heap.c:1177 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 #, c-format msgid "type \"%s\" already exists" msgstr "\"%s\" 자료형이 이미 있습니다" -#: catalog/heap.c:1165 +#: catalog/heap.c:1178 #, c-format msgid "" "A relation has an associated type of the same name, so you must use a name " @@ -4999,119 +5393,119 @@ msgstr "" "하나의 릴레이션은 그 이름과 같은 자료형과 관계합니다. 그래서, 이미 같은 이름" "의 자료형이 있다면 해당 릴레이션을 만들 수 없습니다. 다른 이름을 사용하세요." -#: catalog/heap.c:1205 +#: catalog/heap.c:1218 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, toast relfilenumber 값이 지정되지 않았습니다" -#: catalog/heap.c:1216 +#: catalog/heap.c:1229 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, pg_class 자료 OID 값이 지정되지 않았습니다" -#: catalog/heap.c:1226 +#: catalog/heap.c:1239 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, relfilenumber 값이 지정되지 않았습니다" -#: catalog/heap.c:2119 +#: 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:2563 catalog/index.c:901 catalog/pg_constraint.c:682 -#: commands/tablecmds.c:8900 +#: 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\" 릴레이션(relation)에서 사용되고 있습니다" -#: catalog/heap.c:2570 +#: catalog/heap.c:2581 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "\"%s\" 제약 조건이 비상속 제약 조건과 충돌합니다, 해당 릴레이션: \"%s\"" -#: catalog/heap.c:2581 +#: catalog/heap.c:2592 #, c-format msgid "" "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "\"%s\" 제약 조건이 상속 제약 조건과 충돌합니다, 해당 릴레이션: \"%s\"" -#: catalog/heap.c:2591 +#: 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:2596 +#: catalog/heap.c:2607 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "\"%s\" 제약 조건을 상속된 정의와 병합하는 중" -#: catalog/heap.c:2622 catalog/pg_constraint.c:811 commands/tablecmds.c:2672 -#: commands/tablecmds.c:3199 commands/tablecmds.c:6858 -#: commands/tablecmds.c:15208 commands/tablecmds.c:15349 +#: 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:2706 +#: catalog/heap.c:2717 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "\"%s\" 계산된 칼럼은 칼럼 생성 표현식에서는 사용될 수 없음" -#: catalog/heap.c:2708 +#: catalog/heap.c:2719 #, c-format msgid "A generated column cannot reference another generated column." msgstr "계산된 칼럼은 다른 계산된 칼럼을 참조할 수 없음" -#: catalog/heap.c:2714 +#: catalog/heap.c:2725 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "미리 계산된 칼럼 생성 표현식에 row 전체 변수는 사용할 수 없음" -#: catalog/heap.c:2715 +#: catalog/heap.c:2726 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "이 오류는 미리 계산된 칼럼 자체를 그 칼럼 값으로 지정할 때 발생합니다." -#: catalog/heap.c:2768 +#: catalog/heap.c:2781 #, c-format msgid "generation expression is not immutable" msgstr "미리 계산되는 생성 표현식 결과가 immutable이 아님" -#: catalog/heap.c:2796 rewrite/rewriteHandler.c:1297 +#: catalog/heap.c:2809 rewrite/rewriteHandler.c:1288 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "" "\"%s\" 칼럼의 자료형은 %s 인데, default 표현식에서는 %s 자료형을 사용했습니다" -#: catalog/heap.c:2801 commands/prepare.c:334 parser/analyze.c:2742 -#: parser/parse_target.c:593 parser/parse_target.c:874 -#: parser/parse_target.c:884 rewrite/rewriteHandler.c:1302 +#: 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:1293 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "다시 정의하거나 형변환자를 사용해보십시오" -#: catalog/heap.c:2848 +#: catalog/heap.c:2861 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "\"%s\" 테이블만이 체크 제약 조건에서 참조될 수 있습니다" -#: catalog/heap.c:3154 +#: catalog/heap.c:3167 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "ON COMMIT 및 외래 키 조합이 지원되지 않음" -#: catalog/heap.c:3155 +#: catalog/heap.c:3168 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -5119,493 +5513,493 @@ msgid "" msgstr "" "\"%s\" 테이블에서 \"%s\" 테이블을 참조하는데 ON COMMIT 설정이 같지 않습니다." -#: catalog/heap.c:3160 +#: catalog/heap.c:3173 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "" "_^_ 테이블 내용을 모두 삭제할 수 없음, 참조키(foreign key) 제약 조건 안에서" -#: catalog/heap.c:3161 +#: catalog/heap.c:3174 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "\"%s\" 테이블은 \"%s\" 개체를 참조합니다." -#: catalog/heap.c:3163 +#: 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:225 parser/parse_utilcmd.c:2170 +#: catalog/index.c:219 parser/parse_utilcmd.c:2176 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "\"%s\" 테이블에는 이미 기본키가 있습니다" -#: catalog/index.c:239 +#: catalog/index.c:233 #, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" msgstr "기본키(primary key)는 NULLS NOT DISTINCT 인덱스를 사용할 수 없음" -#: catalog/index.c:256 +#: catalog/index.c:250 #, c-format msgid "primary keys cannot be expressions" msgstr "기본키(primary key)를 표현할 수 없음" -#: catalog/index.c:273 +#: catalog/index.c:267 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "\"%s\" 파티션 키 칼럼에 NOT NULL 속성을 지정해야 함" -#: catalog/index.c:786 catalog/index.c:1942 +#: catalog/index.c:798 catalog/index.c:1915 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "시스템 카탈로그 테이블에는 사용자 정의 인덱스를 지정할 수 없습니다" -#: catalog/index.c:826 +#: catalog/index.c:838 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "\"%s\" 연산자 클래스용으로 자동 결정 가능한 정렬 규칙은 지원하지 않음" -#: catalog/index.c:841 +#: catalog/index.c:853 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "시스템 카탈로그 테이블은 잠금 없는 인덱스 만들기는 지원하지 않습니다" -#: catalog/index.c:850 catalog/index.c:1318 +#: catalog/index.c:862 catalog/index.c:1331 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "exclusion 제약 조건용 잠금 없는 인덱스 만들기는 지원하지 않습니다" -#: catalog/index.c:859 +#: catalog/index.c:871 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "" "공유되는 인덱스들은 initdb 명령으로 데이터베이스 클러스터를 만든 다음에는 만" "들 수 없습니다" -#: catalog/index.c:879 commands/createas.c:423 commands/sequence.c:158 +#: 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\" 이름의 릴레이션(relation)이 이미 있습니다, 건너뜀" -#: catalog/index.c:929 +#: catalog/index.c:941 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, pg_class 인덱스 OID 값이 지정되지 않았습니다" -#: catalog/index.c:939 utils/cache/relcache.c:3731 +#: catalog/index.c:951 utils/cache/relcache.c:3791 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, 인덱스 relfilenumber 값이 지정되지 않았습니다" -#: catalog/index.c:2241 +#: catalog/index.c:2214 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY 명령은 트랜잭션 내 가장 처음에 있어야 합니다" -#: catalog/index.c:3649 +#: catalog/index.c:3668 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "임시 테이블의 인덱스 재생성 작업은 다른 세션에서 할 수 없음" -#: catalog/index.c:3660 commands/indexcmds.c:3631 +#: catalog/index.c:3679 commands/indexcmds.c:3626 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "TOAST 테이블에 딸린 잘못된 인덱스에 대해 재색인 작업을 할 수 없음" -#: catalog/index.c:3676 commands/indexcmds.c:3511 commands/indexcmds.c:3655 -#: commands/tablecmds.c:3402 +#: 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:3820 +#: catalog/index.c:3832 #, c-format msgid "index \"%s\" was reindexed" msgstr "\"%s\" 인덱스가 다시 만들어졌음" -#: catalog/index.c:3957 +#: catalog/index.c:3998 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "" "TOAST 테이블에 지정된 유효하지 않은 \"%s.%s\" 인덱스는 재색인 작업을 할 수 없" "음, 건너뜀" -#: catalog/namespace.c:260 catalog/namespace.c:464 catalog/namespace.c:556 -#: commands/trigger.c:5718 +#: catalog/namespace.c:462 catalog/namespace.c:666 catalog/namespace.c:758 +#: commands/trigger.c:5731 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "서로 다른 데이터베이스간의 참조는 구현되어있지 않습니다: \"%s.%s.%s\"" -#: catalog/namespace.c:317 +#: catalog/namespace.c:519 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "임시 테이블은 스키마 이름을 지정할 수 없음" -#: catalog/namespace.c:398 +#: catalog/namespace.c:600 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "\"%s.%s\" 릴레이션의 잠금 정보를 구할 수 없음" -#: catalog/namespace.c:403 commands/lockcmds.c:144 commands/lockcmds.c:224 +#: 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:431 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\" 이름의 릴레이션(relation)이 없습니다" -#: catalog/namespace.c:436 parser/parse_relation.c:1443 +#: 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\" 이름의 릴레이션(relation)이 없습니다" -#: catalog/namespace.c:502 catalog/namespace.c:3073 commands/extension.c:1611 -#: commands/extension.c:1617 +#: 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:654 catalog/namespace.c:667 +#: catalog/namespace.c:856 catalog/namespace.c:869 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "다른 세션의 임시 스키마 안에는 릴레이션을 만들 수 없음" -#: catalog/namespace.c:658 +#: catalog/namespace.c:860 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "임시 스키마가 아닌 스키마에 임시 릴레이션을 만들 수 없음" -#: catalog/namespace.c:673 +#: catalog/namespace.c:875 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "임시 스키마 안에는 임시 릴레이션만 만들 수 있음" -#: catalog/namespace.c:2265 +#: catalog/namespace.c:2619 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "\"%s\" 통계정보 개체가 없음" -#: catalog/namespace.c:2388 +#: catalog/namespace.c:2761 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "\"%s\" 전문 검색 파서가 없음" -#: catalog/namespace.c:2514 utils/adt/regproc.c:1439 +#: catalog/namespace.c:2906 utils/adt/regproc.c:1459 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "\"%s\" 전문 검색 사전이 없음" -#: catalog/namespace.c:2641 +#: catalog/namespace.c:3052 #, c-format msgid "text search template \"%s\" does not exist" msgstr "\"%s\" 전문 검색 템플릿이 없음" -#: catalog/namespace.c:2767 commands/tsearchcmds.c:1162 -#: utils/adt/regproc.c:1329 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:2880 parser/parse_expr.c:832 parser/parse_target.c:1246 +#: 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:2886 parser/parse_expr.c:839 parser/parse_target.c:1253 -#: gram.y:18569 gram.y:18609 +#: catalog/namespace.c:3335 parser/parse_expr.c:875 parser/parse_target.c:1266 +#: gram.y:19181 gram.y:19221 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "적당하지 않은 qualified 이름 입니다 (너무 많은 점이 있네요): %s" -#: catalog/namespace.c:3016 +#: catalog/namespace.c:3465 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "임시 스키마로(에서) 개체를 이동할 수 없습니다" -#: catalog/namespace.c:3022 +#: catalog/namespace.c:3471 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "TOAST 스키마로(에서) 개체를 이동할 수 없습니다" -#: catalog/namespace.c:3095 commands/schemacmds.c:264 commands/schemacmds.c:344 -#: commands/tablecmds.c:1280 utils/adt/regproc.c:1668 +#: 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\" 스키마(schema) 없음" -#: catalog/namespace.c:3126 +#: catalog/namespace.c:3575 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "" "적당하지 않은 릴레이션(relation) 이름 입니다 (너무 많은 점이 있네요): %s" -#: catalog/namespace.c:3693 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\" 정렬정의(collation)가 \"%s\" 인코딩에서는 쓸 수 없음" -#: catalog/namespace.c:3748 +#: catalog/namespace.c:4071 #, c-format msgid "conversion \"%s\" does not exist" msgstr "\"%s\" 문자코드변환규칙(conversion) 없음" -#: catalog/namespace.c:4012 +#: catalog/namespace.c:4412 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "\"%s\" 데이터베이스에서 임시 파일을 만들 권한이 없음" -#: catalog/namespace.c:4028 +#: catalog/namespace.c:4428 #, c-format msgid "cannot create temporary tables during recovery" msgstr "복구 작업 중에는 임시 테이블을 만들 수 없음" -#: catalog/namespace.c:4034 +#: catalog/namespace.c:4434 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "병렬 작업 중에 임시 테이블을 만들 수 없음" -#: catalog/objectaddress.c:1409 commands/policy.c:96 commands/policy.c:376 -#: commands/tablecmds.c:248 commands/tablecmds.c:290 commands/tablecmds.c:2206 -#: commands/tablecmds.c:12357 +#: 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:1416 commands/tablecmds.c:260 -#: commands/tablecmds.c:17141 commands/view.c:119 +#: 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:1423 commands/matview.c:186 commands/tablecmds.c:266 -#: commands/tablecmds.c:17146 +#: 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\" 개체는 구체화된 뷰(materialized view)가 아닙니다" -#: catalog/objectaddress.c:1430 commands/tablecmds.c:284 -#: commands/tablecmds.c:17151 +#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 +#: commands/tablecmds.c:17861 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" 개체는 외부 테이블이 아님" -#: catalog/objectaddress.c:1471 +#: catalog/objectaddress.c:1433 #, c-format msgid "must specify relation and object name" msgstr "릴레이션과 개체 이름을 지정해야 합니다" -#: catalog/objectaddress.c:1547 catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 #, c-format msgid "column name must be qualified" msgstr "칼럼 이름으로 적당하지 않습니다" -#: catalog/objectaddress.c:1619 +#: catalog/objectaddress.c:1581 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")의 기본값을 지정하지 않았음" -#: catalog/objectaddress.c:1656 commands/functioncmds.c:137 -#: commands/tablecmds.c:276 commands/typecmds.c:274 commands/typecmds.c:3689 +#: 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:4441 +#: utils/adt/acl.c:4560 #, c-format msgid "type \"%s\" does not exist" msgstr "\"%s\" 자료형 없음" -#: catalog/objectaddress.c:1775 +#: catalog/objectaddress.c:1737 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "%d (%s, %s) 연산자(대상 %s) 없음" -#: catalog/objectaddress.c:1806 +#: catalog/objectaddress.c:1768 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "%d (%s, %s) 함수(대상 %s) 없음" -#: catalog/objectaddress.c:1857 catalog/objectaddress.c:1883 +#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "\"%s\" 사용자에 대한 사용자 맵핑 정보(대상 서버: \"%s\")가 없음" -#: catalog/objectaddress.c:1872 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:700 +#: 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\" 이름의 서버가 없음" -#: catalog/objectaddress.c:1939 +#: catalog/objectaddress.c:1901 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "\"%s\" 발행 릴레이션은 \"%s\" 발행에 없습니다." -#: catalog/objectaddress.c:1986 +#: catalog/objectaddress.c:1948 #, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" msgstr "\"%s\" 발행 스키마는 \"%s\" 발행에 없습니다." -#: catalog/objectaddress.c:2044 +#: catalog/objectaddress.c:2006 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "알 수 없는 기본 ACL 개체 타입 \"%c\"" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2007 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "유효한 개체 형태는 \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:2096 +#: catalog/objectaddress.c:2058 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "\"%s\" 사용자용 기본 ACL 없음. (해당 스키마: \"%s\", 해당 개체: %s)" -#: catalog/objectaddress.c:2101 +#: catalog/objectaddress.c:2063 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "\"%s\" 사용자용 기본 ACL 없음. (해당 개체: %s)" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2184 -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2201 #, c-format msgid "name or argument lists may not contain nulls" msgstr "이름이나 인자 목록에는 null이 포함되지 않아야 함" -#: catalog/objectaddress.c:2161 +#: catalog/objectaddress.c:2123 #, c-format msgid "unsupported object type \"%s\"" msgstr "\"%s\" 형 지원하지 않음" -#: catalog/objectaddress.c:2180 catalog/objectaddress.c:2197 -#: catalog/objectaddress.c:2262 catalog/objectaddress.c:2346 +#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 +#: catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 #, c-format msgid "name list length must be exactly %d" msgstr "이름 목록 길이는 %d 이어야 합니다." -#: catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2163 #, c-format msgid "large object OID may not be null" msgstr "대형 개체 OID는 null 값을 사용할 수 없음" -#: catalog/objectaddress.c:2210 catalog/objectaddress.c:2280 -#: catalog/objectaddress.c:2287 +#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 +#: catalog/objectaddress.c:2249 #, c-format msgid "name list length must be at least %d" msgstr "이름 목록 길이는 적어도 %d 개 이상이어야 함" -#: catalog/objectaddress.c:2273 catalog/objectaddress.c:2294 +#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 #, c-format msgid "argument list length must be exactly %d" msgstr "인자 목록은 %d 개여야 함" -#: catalog/objectaddress.c:2508 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 #, c-format msgid "must be owner of large object %u" msgstr "%u 대경 개체의 소유주여야만 합니다" -#: catalog/objectaddress.c:2523 commands/functioncmds.c:1561 +#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 #, c-format msgid "must be owner of type %s or type %s" msgstr "%s, %s 자료형의 소유주여야 합니다" -#: catalog/objectaddress.c:2550 catalog/objectaddress.c:2559 -#: catalog/objectaddress.c:2565 +#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 +#: catalog/objectaddress.c:2527 #, c-format msgid "permission denied" msgstr "권한 없음" -#: catalog/objectaddress.c:2551 catalog/objectaddress.c:2560 +#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 #, c-format msgid "The current user must have the %s attribute." msgstr "현재 사용자는 %s 속성이 있어야합니다." -#: catalog/objectaddress.c:2566 +#: catalog/objectaddress.c:2528 #, c-format msgid "The current user must have the %s option on role \"%s\"." msgstr "현재 사용자는 %s 옵션을 지정해야함, 해당 롤: \"%s\"" -#: catalog/objectaddress.c:2580 +#: catalog/objectaddress.c:2542 #, c-format msgid "must be superuser" msgstr "슈퍼유져여야함" -#: catalog/objectaddress.c:2649 +#: catalog/objectaddress.c:2611 #, c-format msgid "unrecognized object type \"%s\"" msgstr "알 수 없는 개체 형태 \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2941 +#: catalog/objectaddress.c:2928 #, c-format msgid "column %s of %s" msgstr " %s 칼럼(%s 의)" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2943 #, c-format msgid "function %s" msgstr "%s 함수" -#: catalog/objectaddress.c:2969 +#: catalog/objectaddress.c:2956 #, c-format msgid "type %s" msgstr "%s 자료형" -#: catalog/objectaddress.c:3006 +#: catalog/objectaddress.c:2993 #, c-format msgid "cast from %s to %s" msgstr "%s 자료형을 %s 자료형으로 바꾸는 작업" -#: catalog/objectaddress.c:3039 +#: catalog/objectaddress.c:3026 #, c-format msgid "collation %s" msgstr "collation %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3057 #, c-format msgid "constraint %s on %s" msgstr "%s 제약 조건(해당 개체: %s)" -#: catalog/objectaddress.c:3076 +#: catalog/objectaddress.c:3063 #, c-format msgid "constraint %s" msgstr "%s 제약 조건" -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3095 #, c-format msgid "conversion %s" msgstr "%s 문자코드변환규칙" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3130 +#: catalog/objectaddress.c:3117 #, c-format msgid "default value for %s" msgstr "%s 용 기본값" -#: catalog/objectaddress.c:3141 +#: catalog/objectaddress.c:3128 #, c-format msgid "language %s" msgstr "프로시주얼 언어 %s" -#: catalog/objectaddress.c:3149 +#: catalog/objectaddress.c:3136 #, c-format msgid "large object %u" msgstr "%u 대형 개체" -#: catalog/objectaddress.c:3162 +#: catalog/objectaddress.c:3149 #, c-format msgid "operator %s" msgstr "%s 연산자" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3186 #, c-format msgid "operator class %s for access method %s" msgstr "%s 연산자 클래스, %s 인덱스 액세스 방법" -#: catalog/objectaddress.c:3227 +#: catalog/objectaddress.c:3214 #, c-format msgid "access method %s" msgstr "%s 접근 방법" @@ -5614,7 +6008,7 @@ msgstr "%s 접근 방법" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3276 +#: catalog/objectaddress.c:3269 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "%d (%s, %s) 연산자 (연산자 패밀리: %s): %s" @@ -5623,239 +6017,239 @@ msgstr "%d (%s, %s) 연산자 (연산자 패밀리: %s): %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3333 +#: catalog/objectaddress.c:3334 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "%d (%s, %s) 함수 (연산자 패밀리: %s): %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3385 +#: catalog/objectaddress.c:3388 #, c-format msgid "rule %s on %s" msgstr "%s 룰(rule), 해당 테이블: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3431 +#: catalog/objectaddress.c:3434 #, c-format msgid "trigger %s on %s" msgstr "%s 트리거, 해당 테이블: %s" -#: catalog/objectaddress.c:3451 +#: catalog/objectaddress.c:3454 #, c-format msgid "schema %s" msgstr "%s 스키마" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3482 #, c-format msgid "statistics object %s" msgstr "%s 통계정보 개체" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3513 #, c-format msgid "text search parser %s" msgstr "%s 전문 검색 파서" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3544 #, c-format msgid "text search dictionary %s" msgstr "%s 전문 검색 사전" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3575 #, c-format msgid "text search template %s" msgstr "%s 전문 검색 템플릿" -#: catalog/objectaddress.c:3603 +#: catalog/objectaddress.c:3606 #, c-format msgid "text search configuration %s" msgstr "%s 전문 검색 구성" -#: catalog/objectaddress.c:3616 +#: catalog/objectaddress.c:3619 #, c-format msgid "role %s" msgstr "%s 롤" -#: catalog/objectaddress.c:3653 catalog/objectaddress.c:5505 +#: catalog/objectaddress.c:3656 catalog/objectaddress.c:5505 #, c-format msgid "membership of role %s in role %s" msgstr "%s 롤 구성원(해당 롤: %s)" -#: catalog/objectaddress.c:3674 +#: catalog/objectaddress.c:3677 #, c-format msgid "database %s" msgstr "%s 데이터베이스" -#: catalog/objectaddress.c:3690 +#: catalog/objectaddress.c:3693 #, c-format msgid "tablespace %s" msgstr "%s 테이블스페이스" -#: catalog/objectaddress.c:3701 +#: catalog/objectaddress.c:3704 #, c-format msgid "foreign-data wrapper %s" msgstr "%s 외부 데이터 래퍼" -#: catalog/objectaddress.c:3711 +#: catalog/objectaddress.c:3714 #, c-format msgid "server %s" msgstr "%s 서버" -#: catalog/objectaddress.c:3744 +#: catalog/objectaddress.c:3747 #, c-format msgid "user mapping for %s on server %s" msgstr "%s에 대한 사용자 매핑, 해당 서버: %s" -#: catalog/objectaddress.c:3796 +#: 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:3800 +#: catalog/objectaddress.c:3803 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "%s 롤이 새 테이블을 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3806 +#: 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:3810 +#: catalog/objectaddress.c:3813 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "%s 롤이 새 시퀀스를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3816 +#: 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:3820 +#: catalog/objectaddress.c:3823 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "%s 롤이 새 함수를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3826 +#: 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:3830 +#: catalog/objectaddress.c:3833 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "%s 롤이 새 자료형을 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3836 +#: catalog/objectaddress.c:3839 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "%s 롤이 새 시퀀스를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3843 +#: catalog/objectaddress.c:3846 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "%s 롤(해당 스키마: %s)의 기본 접근 권한" -#: catalog/objectaddress.c:3847 +#: catalog/objectaddress.c:3850 #, c-format msgid "default privileges belonging to role %s" msgstr "%s 롤의 기본 접근 권한" -#: catalog/objectaddress.c:3869 +#: catalog/objectaddress.c:3872 #, c-format msgid "extension %s" msgstr "%s 확장 모듈" -#: catalog/objectaddress.c:3886 +#: catalog/objectaddress.c:3889 #, c-format msgid "event trigger %s" msgstr "%s 이벤트 트리거" -#: catalog/objectaddress.c:3910 +#: catalog/objectaddress.c:3913 #, c-format msgid "parameter %s" msgstr "매개 변수 %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3953 +#: catalog/objectaddress.c:3956 #, c-format msgid "policy %s on %s" msgstr "%s 정책(%s 의)" -#: catalog/objectaddress.c:3967 +#: catalog/objectaddress.c:3970 #, c-format msgid "publication %s" msgstr "%s 발행" -#: catalog/objectaddress.c:3980 +#: 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:4011 +#: catalog/objectaddress.c:4014 #, c-format msgid "publication of %s in publication %s" msgstr "%s 발행 (해당 발행이름: %s)" -#: catalog/objectaddress.c:4024 +#: catalog/objectaddress.c:4027 #, c-format msgid "subscription %s" msgstr "%s 구독" -#: catalog/objectaddress.c:4045 +#: catalog/objectaddress.c:4048 #, c-format msgid "transform for %s language %s" msgstr "%s 형 변환자, 대상언어: %s" -#: catalog/objectaddress.c:4116 +#: catalog/objectaddress.c:4117 #, c-format msgid "table %s" msgstr "%s 테이블" -#: catalog/objectaddress.c:4121 +#: catalog/objectaddress.c:4122 #, c-format msgid "index %s" msgstr "%s 인덱스" -#: catalog/objectaddress.c:4125 +#: catalog/objectaddress.c:4126 #, c-format msgid "sequence %s" msgstr "%s 시퀀스" -#: catalog/objectaddress.c:4129 +#: catalog/objectaddress.c:4130 #, c-format msgid "toast table %s" msgstr "%s 토스트 테이블" -#: catalog/objectaddress.c:4133 +#: catalog/objectaddress.c:4134 #, c-format msgid "view %s" msgstr "%s 뷰" -#: catalog/objectaddress.c:4137 +#: catalog/objectaddress.c:4138 #, c-format msgid "materialized view %s" msgstr "%s 구체화된 뷰" -#: catalog/objectaddress.c:4141 +#: catalog/objectaddress.c:4142 #, c-format msgid "composite type %s" msgstr "%s 복합 자료형" -#: catalog/objectaddress.c:4145 +#: catalog/objectaddress.c:4146 #, c-format msgid "foreign table %s" msgstr "%s 외부 테이블" -#: catalog/objectaddress.c:4150 +#: catalog/objectaddress.c:4151 #, c-format msgid "relation %s" msgstr "%s 릴레이션" -#: catalog/objectaddress.c:4191 +#: catalog/objectaddress.c:4192 #, c-format msgid "operator family %s for access method %s" msgstr "%s 연산자 페밀리, 접근 방법: %s" @@ -5904,7 +6298,7 @@ msgstr "" msgid "return type of inverse transition function %s is not %s" msgstr "%s inverse transition 함수의 반환 자료형이 %s 형이 아닙니다." -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:3009 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2991 #, c-format msgid "" "strictness of aggregate's forward and inverse transition functions must match" @@ -5920,7 +6314,7 @@ msgstr "부가 인자를 쓰는 마침 함수는 STRICT 옵션이 없어야 함" msgid "return type of combine function %s is not %s" msgstr "%s combine 함수의 반환 자료형이 %s 형이 아닙니다" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3903 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3902 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "" @@ -5936,12 +6330,12 @@ msgstr "%s serialization 함수의 반환 자료형이 %s 형이 아닙니다." msgid "return type of deserialization function %s is not %s" msgstr "%s deserialization 함수의 반환 자료형이 %s 형이 아닙니다" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:191 catalog/pg_proc.c:225 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "결과 자료형을 결정할 수 없음" -#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:204 catalog/pg_proc.c:233 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "\"internal\" 의사-자료형의 사용이 안전하지 않습니다" @@ -5960,7 +6354,7 @@ msgstr "" msgid "sort operator can only be specified for single-argument aggregates" msgstr "정렬 연산자는 단일 인자 집계에만 지정할 수 있음" -#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:386 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "루틴 종류를 바꿀 수 없음" @@ -5985,13 +6379,13 @@ msgstr "\"%s\" 함수는 가상 집합 집계 함수입니다." msgid "cannot change number of direct arguments of an aggregate function" msgstr "집계 함수의 direct 인자 번호는 바꿀 수 없음" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:691 -#: commands/typecmds.c:1975 commands/typecmds.c:2021 commands/typecmds.c:2073 -#: commands/typecmds.c:2110 commands/typecmds.c:2144 commands/typecmds.c:2178 -#: commands/typecmds.c:2212 commands/typecmds.c:2241 commands/typecmds.c:2328 -#: commands/typecmds.c:2370 parser/parse_func.c:417 parser/parse_func.c:448 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:686 +#: commands/typecmds.c:1985 commands/typecmds.c:2031 commands/typecmds.c:2083 +#: commands/typecmds.c:2120 commands/typecmds.c:2154 commands/typecmds.c:2188 +#: commands/typecmds.c:2222 commands/typecmds.c:2251 commands/typecmds.c:2338 +#: commands/typecmds.c:2380 parser/parse_func.c:417 parser/parse_func.c:448 #: parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 -#: parser/parse_func.c:631 parser/parse_func.c:2171 parser/parse_func.c:2444 +#: parser/parse_func.c:631 parser/parse_func.c:2172 parser/parse_func.c:2445 #, c-format msgid "function %s does not exist" msgstr "%s 이름의 함수가 없음" @@ -6066,67 +6460,67 @@ msgstr "이 작업은 파티션 된 테이블 대상으로 지원하지 않습 msgid "This operation is not supported for partitioned indexes." msgstr "이 작업은 파티션 된 인덱스 대상으로 지원하지 않습니다." -#: catalog/pg_collation.c:102 catalog/pg_collation.c:160 +#: catalog/pg_collation.c:101 catalog/pg_collation.c:159 #, c-format msgid "collation \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 정렬규칙이 이미 있습니다, 건너뜀" -#: catalog/pg_collation.c:104 +#: catalog/pg_collation.c:103 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" msgstr "\"%s\" 정렬규칙이 \"%s\" 인코딩에 이미 지정되어 있습니다, 건너뜀" -#: catalog/pg_collation.c:112 catalog/pg_collation.c:167 +#: catalog/pg_collation.c:111 catalog/pg_collation.c:166 #, c-format msgid "collation \"%s\" already exists" msgstr "\"%s\" 정렬규칙이 이미 있습니다" -#: catalog/pg_collation.c:114 +#: catalog/pg_collation.c:113 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "\"%s\" 정렬규칙이 \"%s\" 인코딩에 이미 지정되어 있습니다" -#: catalog/pg_constraint.c:690 +#: catalog/pg_constraint.c:732 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "\"%s\" 제약 조건이 %s 도메인에 이미 지정되어 있습니다" -#: catalog/pg_constraint.c:890 catalog/pg_constraint.c:983 +#: catalog/pg_constraint.c:932 catalog/pg_constraint.c:1025 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 제약 조건은 \"%s\" 테이블에 없음" -#: catalog/pg_constraint.c:1083 +#: catalog/pg_constraint.c:1125 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "\"%s\" 제약 조건은 %s 도메인에 없음" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:64 #, c-format msgid "conversion \"%s\" already exists" msgstr "\"%s\" 이름의 변환규칙(conversion)이 이미 있음" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:77 #, c-format msgid "default conversion for %s to %s already exists" msgstr "%s 코드에서 %s 코드로 변환하는 기본 변환규칙(conversion)은 이미 있음" -#: catalog/pg_depend.c:222 commands/extension.c:3368 +#: catalog/pg_depend.c:224 commands/extension.c:3397 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s 개체는 \"%s\" 확장모듈에 이미 구성원입니다" -#: catalog/pg_depend.c:229 catalog/pg_depend.c:280 commands/extension.c:3408 +#: catalog/pg_depend.c:231 catalog/pg_depend.c:282 commands/extension.c:3437 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "\"%s\" 개체는 \"%s\" 확장 모듈의 구성 요소가 아닙니다" -#: catalog/pg_depend.c:232 +#: catalog/pg_depend.c:234 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "확장 모듈이 자기 소유 객체가 아닌 객체를 덮어 쓸 수는 없습니다." -#: catalog/pg_depend.c:283 +#: catalog/pg_depend.c:285 #, c-format msgid "" "An extension may only use CREATE ... IF NOT EXISTS to skip object creation " @@ -6135,53 +6529,53 @@ msgstr "" "이미 있는 객체와 충돌을 피하기 위해 이미 있는 객체 생성을 건너뛰려면, 확장 모" "듈에서 CREATE ... IF NOT EXISTS 구문을 사용해야합니다." -#: catalog/pg_depend.c:646 +#: catalog/pg_depend.c:648 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "%s 객체가 시스템 객체이기 때문에 의존성을 없앨 수 없습니다." -#: catalog/pg_enum.c:137 catalog/pg_enum.c:259 catalog/pg_enum.c:554 +#: catalog/pg_enum.c:175 catalog/pg_enum.c:314 catalog/pg_enum.c:624 #, c-format msgid "invalid enum label \"%s\"" msgstr "\"%s\" 열거형 라벨이 잘못됨" -#: catalog/pg_enum.c:138 catalog/pg_enum.c:260 catalog/pg_enum.c:555 +#: catalog/pg_enum.c:176 catalog/pg_enum.c:315 catalog/pg_enum.c:625 #, c-format msgid "Labels must be %d bytes or less." msgstr "라벨은 %d 바이트 이하여야 합니다." -#: catalog/pg_enum.c:288 +#: catalog/pg_enum.c:343 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 열거형 라벨이 이미 있음, 건너뜀" -#: catalog/pg_enum.c:295 catalog/pg_enum.c:598 +#: catalog/pg_enum.c:350 catalog/pg_enum.c:668 #, c-format msgid "enum label \"%s\" already exists" msgstr "\"%s\" 이름의 열거형 라벨이 이미 있음" -#: catalog/pg_enum.c:350 catalog/pg_enum.c:593 +#: catalog/pg_enum.c:405 catalog/pg_enum.c:663 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "\"%s\" 열거형 라벨이 없음" -#: catalog/pg_enum.c:408 +#: catalog/pg_enum.c:463 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_enum OID 값이 지정되지 않았습니다" -#: catalog/pg_enum.c:418 +#: catalog/pg_enum.c:473 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "" "ALTER TYPE ADD BEFORE/AFTER 구문은 이진 업그레이드 작업에서 호환하지 않습니다" -#: catalog/pg_inherits.c:593 +#: catalog/pg_inherits.c:592 #, c-format msgid "cannot detach partition \"%s\"" msgstr "\"%s\" 하위 파티션 테이블을 뗄 수 없음" -#: catalog/pg_inherits.c:595 +#: catalog/pg_inherits.c:594 #, c-format msgid "" "The partition is being detached concurrently or has an unfinished detach." @@ -6189,8 +6583,8 @@ msgstr "" "이 파티션은 이미 concurrently 옵션을 사용해서 떼기 작업을 했거나, 아직 떼기" "가 안 끝났습니다." -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4583 -#: commands/tablecmds.c:15464 +#: 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 " @@ -6199,12 +6593,12 @@ msgstr "" "보류 중인 떼기를 마치려면, ALTER TABLE ... DETACH PARTITION ... FINALIZE 명령" "을 사용하세요." -#: catalog/pg_inherits.c:600 +#: catalog/pg_inherits.c:599 #, c-format msgid "cannot complete detaching partition \"%s\"" msgstr "\"%s\" 파티션 떼기를 끝낼 수 없습니다" -#: catalog/pg_inherits.c:602 +#: catalog/pg_inherits.c:601 #, c-format msgid "There's no pending concurrent detach." msgstr "현재 보류 중인 떼기 작업이 없습니다." @@ -6214,113 +6608,128 @@ msgstr "현재 보류 중인 떼기 작업이 없습니다." msgid "schema \"%s\" already exists" msgstr "\"%s\" 이름의 스키마(schema)가 이미 있음" -#: catalog/pg_operator.c:219 catalog/pg_operator.c:361 +#: catalog/pg_operator.c:213 catalog/pg_operator.c:355 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "\"%s\" 타당한 연산자 이름이 아님" -#: catalog/pg_operator.c:370 +#: catalog/pg_operator.c:379 +#, c-format +msgid "operator %s already exists" +msgstr "%s 연산자가 이미 있음" + +#: catalog/pg_operator.c:445 commands/operatorcmds.c:600 +#, c-format +msgid "operator cannot be its own negator" +msgstr "연산자는 자신의 negator 연산자가 될 수 없음" + +#: catalog/pg_operator.c:572 #, c-format msgid "only binary operators can have commutators" msgstr "바이너리 연산자만이 commutator를 가질 수 있음" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:509 +#: catalog/pg_operator.c:576 #, c-format msgid "only binary operators can have join selectivity" msgstr "바이너리 연산자만이 join selectivity를 가질 수 있음" -#: catalog/pg_operator.c:378 +#: catalog/pg_operator.c:580 #, c-format msgid "only binary operators can merge join" msgstr "바이너리 연산자만이 merge join할 수 있음" -#: catalog/pg_operator.c:382 +#: catalog/pg_operator.c:584 #, c-format msgid "only binary operators can hash" msgstr "바이너리 연산자만이 해시할 수 있음" -#: catalog/pg_operator.c:393 +#: catalog/pg_operator.c:593 #, c-format msgid "only boolean operators can have negators" msgstr "불리언 연산자만 부정어를 포함할 수 있음" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:517 +#: catalog/pg_operator.c:597 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "불리언 연산자만 제한 선택을 포함할 수 있음" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:521 +#: catalog/pg_operator.c:601 #, c-format msgid "only boolean operators can have join selectivity" msgstr "불리언 연산자만 조인 선택을 포함할 수 있음" -#: catalog/pg_operator.c:405 +#: catalog/pg_operator.c:605 #, c-format msgid "only boolean operators can merge join" msgstr "불리언 연산자만 머지 조인을 지정할 수 있음" -#: catalog/pg_operator.c:409 +#: catalog/pg_operator.c:609 #, c-format msgid "only boolean operators can hash" msgstr "불리언 연산자만 해시를 지정할 수 있음" -#: catalog/pg_operator.c:421 +#: catalog/pg_operator.c:739 #, c-format -msgid "operator %s already exists" -msgstr "%s 연산자가 이미 있음" +msgid "commutator operator %s is already the commutator of operator %s" +msgstr "%s commutator 연산자는 이미 %s 연산자의 commutator임" -#: catalog/pg_operator.c:621 +#: catalog/pg_operator.c:744 #, c-format -msgid "operator cannot be its own negator or sort operator" -msgstr "연산자는 자신의 negator나 sort 연산자가 될 수 없습니다" +msgid "commutator operator %s is already the commutator of operator %u" +msgstr "%s commutator 연산자는 이미 %u 연산자의 commutator임" -#: catalog/pg_parameter_acl.c:53 +#: catalog/pg_operator.c:807 #, c-format -msgid "parameter ACL \"%s\" does not exist" -msgstr "\"%s\" 매개 변수 ACL이 없음" +msgid "negator operator %s is already the negator of operator %s" +msgstr "%s negator 연산자는 이미 %s 연산자의 negator임" + +#: catalog/pg_operator.c:812 +#, c-format +msgid "negator operator %s is already the negator of operator %u" +msgstr "%s negator 연산자는 이미 %u 연산자의 negator임" -#: catalog/pg_parameter_acl.c:88 +#: catalog/pg_parameter_acl.c:50 #, c-format -msgid "invalid parameter name \"%s\"" -msgstr "\"%s\" 이름은 잘못된 매개 변수 이름입니다." +msgid "parameter ACL \"%s\" does not exist" +msgstr "\"%s\" 매개 변수 ACL이 없음" -#: catalog/pg_proc.c:132 parser/parse_func.c:2233 +#: catalog/pg_proc.c:130 parser/parse_func.c:2234 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "함수는 %d개 이상의 인자를 사용할 수 없음" -#: catalog/pg_proc.c:376 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "이미 같은 인자 자료형을 사용하는 \"%s\" 함수가 있습니다" -#: catalog/pg_proc.c:388 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\" 개체는 집계 함수입니다" -#: catalog/pg_proc.c:390 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\" 개체는 함수입니다." -#: catalog/pg_proc.c:392 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\" 개체는 프로시져입니다." -#: catalog/pg_proc.c:394 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "\"%s\" 개체는 윈도우 함수입니다." -#: catalog/pg_proc.c:414 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "프로시져는 출력 매개 변수를 사용하도록 변경 할 수 없음" -#: catalog/pg_proc.c:415 catalog/pg_proc.c:445 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "이미 있는 함수의 리턴 자료형은 바꿀 수 없습니다" @@ -6329,115 +6738,115 @@ msgstr "이미 있는 함수의 리턴 자료형은 바꿀 수 없습니다" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:421 catalog/pg_proc.c:448 catalog/pg_proc.c:493 -#: catalog/pg_proc.c:519 catalog/pg_proc.c:543 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 +#: catalog/pg_proc.c:517 catalog/pg_proc.c:541 #, c-format msgid "Use %s %s first." msgstr "먼저 %s %s 명령을 사용하세요." -#: catalog/pg_proc.c:446 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "OUT 매개 변수에 정의된 행 형식이 다릅니다." -#: catalog/pg_proc.c:490 +#: catalog/pg_proc.c:488 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "\"%s\" 입력 매개 변수 이름을 바꿀 수 없음" -#: catalog/pg_proc.c:517 +#: catalog/pg_proc.c:515 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "기존 함수에서 매개 변수 기본 값을 제거할 수 없음" -#: catalog/pg_proc.c:541 +#: catalog/pg_proc.c:539 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "기존 매개 변수 기본 값의 데이터 형식을 바꿀 수 없음" -#: catalog/pg_proc.c:752 +#: catalog/pg_proc.c:750 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "\"%s\" 이름의 내장 함수가 없음" -#: catalog/pg_proc.c:845 +#: catalog/pg_proc.c:843 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL 함수는 %s 자료형을 리턴할 수 없음" -#: catalog/pg_proc.c:860 +#: catalog/pg_proc.c:858 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL 함수의 인자로 %s 자료형은 사용될 수 없습니다" -#: catalog/pg_proc.c:987 executor/functions.c:1466 +#: catalog/pg_proc.c:986 executor/functions.c:1468 #, c-format msgid "SQL function \"%s\"" msgstr "\"%s\" SQL 함수" -#: catalog/pg_publication.c:71 catalog/pg_publication.c:79 -#: catalog/pg_publication.c:87 catalog/pg_publication.c:93 +#: catalog/pg_publication.c:66 catalog/pg_publication.c:74 +#: catalog/pg_publication.c:82 catalog/pg_publication.c:88 #, c-format msgid "cannot add relation \"%s\" to publication" msgstr "\"%s\" 릴레이션을 발행에 추가할 수 없음" -#: catalog/pg_publication.c:81 +#: catalog/pg_publication.c:76 #, c-format msgid "This operation is not supported for system tables." msgstr "이 작업은 시스템 테이블 대상으로 지원하지 않습니다." -#: catalog/pg_publication.c:89 +#: catalog/pg_publication.c:84 #, c-format msgid "This operation is not supported for temporary tables." msgstr "이 작업은 임시 테이블 대상으로 지원하지 않습니다." -#: catalog/pg_publication.c:95 +#: catalog/pg_publication.c:90 #, c-format msgid "This operation is not supported for unlogged tables." msgstr "이 작업은 언로그드 테이블 대상으로 지원하지 않습니다." -#: catalog/pg_publication.c:109 catalog/pg_publication.c:117 +#: catalog/pg_publication.c:104 catalog/pg_publication.c:112 #, c-format msgid "cannot add schema \"%s\" to publication" msgstr "\"%s\" 스키마를 발행에 추가할 수 없음" -#: catalog/pg_publication.c:111 +#: catalog/pg_publication.c:106 #, c-format msgid "This operation is not supported for system schemas." msgstr "이 작업은 시스템 스키마 대상으로 지원하지 않습니다." -#: catalog/pg_publication.c:119 +#: catalog/pg_publication.c:114 #, c-format msgid "Temporary schemas cannot be replicated." msgstr "임시 스키마는 복제할 수 없습니다." -#: catalog/pg_publication.c:397 +#: catalog/pg_publication.c:392 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "\"%s\" 릴레이션은 이미 \"%s\" 발행에 포함되어 있습니다" -#: catalog/pg_publication.c:539 +#: catalog/pg_publication.c:534 #, c-format msgid "cannot use system column \"%s\" in publication column list" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 발행 칼럼 목록에 포함될 수 없습니다." -#: catalog/pg_publication.c:545 +#: catalog/pg_publication.c:540 #, c-format msgid "cannot use generated column \"%s\" in publication column list" msgstr "" "\"%s\" 칼럼은 미리 계산된 칼럼으로 발행 칼럼 목록에 포함될 수 없습니다." -#: catalog/pg_publication.c:551 +#: catalog/pg_publication.c:546 #, c-format msgid "duplicate column \"%s\" in publication column list" msgstr "\"%s\" 칼럼이 발행 칼럼 목록에 중복 되었습니다." -#: catalog/pg_publication.c:641 +#: catalog/pg_publication.c:636 #, c-format msgid "schema \"%s\" is already member of publication \"%s\"" msgstr "\"%s\" 스키마는 이미 \"%s\" 발행에 포함되어 있습니다" -#: catalog/pg_shdepend.c:830 +#: catalog/pg_shdepend.c:875 #, c-format msgid "" "\n" @@ -6446,50 +6855,57 @@ msgid_plural "" "\n" "and objects in %d other databases (see server log for list)" msgstr[0] "" +"\n" +", %d개의 다른 데이터테이스 소속 객체들 (목록은 서버 로그 참조)" -#: catalog/pg_shdepend.c:1177 +#: catalog/pg_shdepend.c:1222 #, c-format msgid "role %u was concurrently dropped" msgstr "%u 롤이 동시에 삭제되었음" -#: catalog/pg_shdepend.c:1189 +#: catalog/pg_shdepend.c:1234 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "%u 테이블스페이스는 현재 삭제되었습니다" -#: catalog/pg_shdepend.c:1203 +#: catalog/pg_shdepend.c:1248 #, c-format msgid "database %u was concurrently dropped" msgstr "%u 데이터베이스는 현재 삭제되었습니다" -#: catalog/pg_shdepend.c:1254 +#: catalog/pg_shdepend.c:1299 #, c-format msgid "owner of %s" msgstr "%s 개체의 소유주" -#: catalog/pg_shdepend.c:1256 +#: catalog/pg_shdepend.c:1301 #, c-format msgid "privileges for %s" -msgstr "\"%s\"에 대한 권한" +msgstr "%s에 대한 권한" + +#: catalog/pg_shdepend.c:1303 +#, c-format +msgid "initial privileges for %s" +msgstr "%s에 대한 초기 권한" -#: catalog/pg_shdepend.c:1258 +#: catalog/pg_shdepend.c:1305 #, c-format msgid "target of %s" msgstr "%s 개체 대상" -#: catalog/pg_shdepend.c:1260 +#: catalog/pg_shdepend.c:1307 #, c-format msgid "tablespace for %s" msgstr "%s 용 테이블스페이스" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1268 +#: catalog/pg_shdepend.c:1315 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d 개체(데이터베이스: %s)" -#: catalog/pg_shdepend.c:1332 +#: catalog/pg_shdepend.c:1379 #, c-format msgid "" "cannot drop objects owned by %s because they are required by the database " @@ -6498,7 +6914,7 @@ msgstr "" "%s 소유주의 개체 삭제는 그 데이터베이스 시스템에서 필요하기 때문에 삭제 될 " "수 없음" -#: catalog/pg_shdepend.c:1498 +#: catalog/pg_shdepend.c:1560 #, c-format msgid "" "cannot reassign ownership of objects owned by %s because they are required " @@ -6507,22 +6923,22 @@ msgstr "" "%s 소유주의 개체 삭제는 그 데이터베이스 시스템에서 필요하기 때문에 삭제 될 " "수 없음" -#: catalog/pg_subscription.c:424 +#: catalog/pg_subscription.c:438 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "\"%s\" 구독용 릴레이션 맵핑 삭제 실패" -#: catalog/pg_subscription.c:426 +#: catalog/pg_subscription.c:440 #, c-format msgid "" -"Table synchronization for relation \"%s\" is in progress and is in state \"%c" -"\"." +"Table synchronization for relation \"%s\" is in progress and is in state " +"\"%c\"." msgstr "\"%s\" 릴레이션의 동기화 작업은 현재 진행중이고, 상태가 \"%c\" 임." #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:433 +#: catalog/pg_subscription.c:447 #, c-format msgid "" "Use %s to enable subscription if not already enabled or use %s to drop the " @@ -6531,43 +6947,43 @@ msgstr "" "아직 활성화되지 않은 구독을 활성화 하기위해 %s 명령을 이용하거나, 해당 구독" "을 지우려면 %s 명령을 이용하세요." -#: catalog/pg_type.c:134 catalog/pg_type.c:474 +#: catalog/pg_type.c:133 catalog/pg_type.c:474 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_type OID 값이 지정되지 않았습니다" -#: catalog/pg_type.c:254 +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "잘못된 자료형의 내부 크기 %d" -#: catalog/pg_type.c:270 catalog/pg_type.c:278 catalog/pg_type.c:286 -#: catalog/pg_type.c:295 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "\"%c\" 정렬은 크기가 %d인 전달 값 형식에 유효하지 않음" -#: catalog/pg_type.c:302 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "내부 크기 %d은(는) 전달 값 형식에 유효하지 않음" -#: catalog/pg_type.c:312 catalog/pg_type.c:318 +#: catalog/pg_type.c:311 catalog/pg_type.c:317 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "\"%c\" 정렬은 가변 길이 형식에 유효하지 않음" -#: catalog/pg_type.c:326 commands/typecmds.c:4140 +#: catalog/pg_type.c:325 commands/typecmds.c:4363 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "_^_ 고정크기 자료형은 PLAIN 저장방법을 가져야만 합니다" -#: catalog/pg_type.c:955 +#: catalog/pg_type.c:978 #, c-format msgid "Failed while creating a multirange type for type \"%s\"." msgstr "\"%s\" 자료형용 다중 범위 자료형를 만들기 실패." -#: catalog/pg_type.c:956 +#: catalog/pg_type.c:979 #, c-format msgid "" "You can manually specify a multirange type name using the " @@ -6576,180 +6992,180 @@ msgstr "" "\"multirange_type_name\" 속성을 사용해서 이 다중 범위 자료형 이름을 직접 지정" "하세요." -#: catalog/storage.c:505 storage/buffer/bufmgr.c:1145 +#: catalog/storage.c:533 storage/buffer/bufmgr.c:1540 #, c-format msgid "invalid page in block %u of relation %s" msgstr "%u 블록(해당 릴레이션: %s)에 잘못된 페이지가 있음" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:167 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "순서 있는 집합 집계함수만 가상 집합 집계 함수로 쓸 수 있습니다." -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:192 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "\"%s\" 속성을 aggregate에서 알 수 없음" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:202 #, c-format msgid "aggregate stype must be specified" msgstr "aggregate stype 값을 지정하셔야 합니다" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:206 #, c-format msgid "aggregate sfunc must be specified" msgstr "aggregate sfunc 값을 지정하셔야 합니다" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:218 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "mstype 옵션을 사용하면 msfunc 옵션도 함께 지정 해야 함" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:222 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "mstype 옵션을 사용하면 minvfunc 옵션도 함께 지정 해야 함" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:229 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "msfunc 옵션은 mstype 옵션과 함께 사용해야 함" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:233 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "minvfunc 옵션은 mstype 옵션과 함께 사용해야 함" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:237 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "mfinalfunc 옵션은 mstype 옵션과 함께 사용해야 함" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:241 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "msspace 옵션은 mstype 옵션과 함께 사용해야 함" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:245 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "minitcond 옵션은 mstype 옵션과 함께 사용해야 함" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:274 #, c-format msgid "aggregate input type must be specified" msgstr "aggregate 입력 자료형을 지정해야 합니다" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:304 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "집계 입력 형식 지정에서 basetype이 중복됨" -#: commands/aggregatecmds.c:351 commands/aggregatecmds.c:392 +#: commands/aggregatecmds.c:347 commands/aggregatecmds.c:388 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "%s 자료형은 STYPE 자료형으로 사용할 수 없습니다" -#: commands/aggregatecmds.c:363 +#: commands/aggregatecmds.c:359 #, c-format msgid "" "serialization functions may be specified only when the aggregate transition " "data type is %s" msgstr "SERIALFUNC 함수는 STYPE 자료형이 %s 형일때만 지정할 수 있습니다." -#: commands/aggregatecmds.c:373 +#: commands/aggregatecmds.c:369 #, c-format msgid "" "must specify both or neither of serialization and deserialization functions" msgstr "" "SERIALFUNC, DESERIALFUNC 함수를 모두 지정하거나 모두 지정하지 않거나 하세요." -#: commands/aggregatecmds.c:438 commands/functioncmds.c:639 +#: commands/aggregatecmds.c:434 commands/functioncmds.c:634 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "\"parallel\" 옵션 값은 SAFE, RESTRICTED, UNSAFE 만 지정할 수 있음" -#: commands/aggregatecmds.c:494 +#: commands/aggregatecmds.c:490 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "\"%s\" 인자값은 READ_ONLY, SHAREABLE, READ_WRITE 셋 중 하나여야 함" -#: commands/alter.c:86 commands/event_trigger.c:174 +#: commands/alter.c:83 commands/event_trigger.c:191 #, c-format msgid "event trigger \"%s\" already exists" msgstr "\"%s\" 이름의 이벤트 트리거가 이미 있음" -#: commands/alter.c:89 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:92 commands/foreigncmds.c:884 +#: commands/alter.c:89 commands/foreigncmds.c:884 #, c-format msgid "server \"%s\" already exists" msgstr "\"%s\" 이름의 서버가 이미 있음" -#: commands/alter.c:95 commands/proclang.c:133 +#: commands/alter.c:92 commands/proclang.c:131 #, c-format msgid "language \"%s\" already exists" msgstr "\"%s\" 이름의 프로시주얼 언어가 이미 있습니다" -#: commands/alter.c:98 commands/publicationcmds.c:771 +#: commands/alter.c:95 commands/publicationcmds.c:764 #, c-format msgid "publication \"%s\" already exists" msgstr "\"%s\" 이름의 발행이 이미 있습니다" -#: commands/alter.c:101 commands/subscriptioncmds.c:657 +#: commands/alter.c:98 commands/subscriptioncmds.c:669 #, c-format msgid "subscription \"%s\" already exists" msgstr "\"%s\" 이름의 구독이 이미 있습니다" -#: commands/alter.c:124 +#: commands/alter.c:121 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 이름의 변환규칙(conversin)이 \"%s\" 스키마에 이미 있습니다" -#: commands/alter.c:128 +#: commands/alter.c:125 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 이름의 통계정보 개체는 \"%s\" 스키마에 이미 있습니다" -#: commands/alter.c:132 +#: commands/alter.c:129 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 파서가 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:136 +#: commands/alter.c:133 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 사전이 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:140 +#: commands/alter.c:137 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 템플릿이 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:144 +#: commands/alter.c:141 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 구성이 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:217 +#: commands/alter.c:214 #, c-format msgid "must be superuser to rename %s" msgstr "%s 이름 변경 작업은 슈퍼유저만 할 수 있음" -#: commands/alter.c:259 commands/subscriptioncmds.c:636 -#: commands/subscriptioncmds.c:1116 commands/subscriptioncmds.c:1198 -#: commands/subscriptioncmds.c:1830 +#: 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 는 슈퍼유저 전용임" -#: commands/alter.c:260 commands/subscriptioncmds.c:637 -#: commands/subscriptioncmds.c:1117 commands/subscriptioncmds.c:1199 -#: commands/subscriptioncmds.c:1831 +#: 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 " @@ -6758,7 +7174,7 @@ msgstr "" "구독 옵션으로 password_required 옵션값을 false 지정하거나 변경하는 것은 슈퍼" "유저만 할 수 있습니다." -#: commands/alter.c:775 +#: commands/alter.c:735 #, c-format msgid "must be superuser to set schema of %s" msgstr "%s의 스키마 지정은 슈퍼유져여야 합니다" @@ -6778,7 +7194,7 @@ msgstr "슈퍼유저만 접근 방법을 만들 수 있습니다." msgid "access method \"%s\" already exists" msgstr "\"%s\" 이름의 인덱스 접근 방법이 이미 있습니다." -#: commands/amcmds.c:154 commands/indexcmds.c:216 commands/indexcmds.c:839 +#: 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" @@ -6789,45 +7205,45 @@ msgstr "\"%s\" 인덱스 접근 방법이 없습니다" msgid "handler function is not specified" msgstr "핸들러 함수 부분이 빠졌습니다" -#: commands/amcmds.c:264 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:709 -#: parser/parse_clause.c:941 +#: commands/amcmds.c:264 commands/event_trigger.c:200 +#: commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:702 +#: parser/parse_clause.c:943 #, c-format msgid "function %s must return type %s" msgstr "%s 함수는 %s 자료형을 반환해야 함" -#: commands/analyze.c:228 +#: commands/analyze.c:217 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\" 건너뜀 --- 외부 테이블은 분석할 수 없음" -#: commands/analyze.c:245 +#: commands/analyze.c:234 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "" "\"%s\" 건너뜀 --- 테이블이 아니거나, 특수 시스템 테이블들은 분석할 수 없음" -#: commands/analyze.c:325 +#: commands/analyze.c:314 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "\"%s.%s\" 상속 관계 분석중" -#: commands/analyze.c:330 +#: commands/analyze.c:319 #, c-format msgid "analyzing \"%s.%s\"" msgstr "\"%s.%s\" 자료 통계 수집 중" -#: commands/analyze.c:395 +#: commands/analyze.c:385 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "\"%s\" 칼럼이 \"%s\" 릴레이션에서 두 번 이상 사용되었음" -#: commands/analyze.c:787 +#: commands/analyze.c:785 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "\"%s.%s.%s\" 테이블 자동 분석\n" -#: commands/analyze.c:1334 +#: commands/analyze.c:1300 #, c-format msgid "" "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead " @@ -6836,7 +7252,7 @@ msgstr "" "\"%s\": 탐색한 페이지: %d, 전체페이지: %u, 실자료: %.0f개, 쓰레기자료: %.0f" "개; 표본 추출 자료: %d개, 예상한 총 자료: %.0f개" -#: commands/analyze.c:1418 +#: commands/analyze.c:1384 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -6845,7 +7261,7 @@ msgstr "" "\"%s.%s\" 상속 나무의 통계 수집 건너뜀 --- 이 상속 나무에는 하위 테이블이 없" "음" -#: commands/analyze.c:1516 +#: commands/analyze.c:1482 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -6854,46 +7270,46 @@ msgstr "" "\"%s.%s\" 상속 나무의 통계 수집 건너뜀 --- 이 상속 나무에는 통계 수집할 하위 " "테이블이 없음" -#: commands/async.c:646 +#: commands/async.c:612 #, c-format msgid "channel name cannot be empty" msgstr "채널 이름은 비워둘 수 없음" -#: commands/async.c:652 +#: commands/async.c:618 #, c-format msgid "channel name too long" msgstr "채널 이름이 너무 긺" # # nonun 부분 begin -#: commands/async.c:657 +#: commands/async.c:623 #, c-format msgid "payload string too long" msgstr "payload 문자열이 너무 긺" -#: commands/async.c:876 +#: commands/async.c:842 #, c-format msgid "" "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "" "LISTEN, UNLISTEN 또는 NOTIFY 옵션으로 실행된 트랜잭션을 PREPARE할 수 없음" -#: commands/async.c:980 +#: commands/async.c:946 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "NOTIFY 큐에 너무 많은 알림이 있습니다" -#: commands/async.c:1602 +#: commands/async.c:1553 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "NOTIFY 큐 사용률: %.0f%%" -#: commands/async.c:1604 +#: commands/async.c:1555 #, c-format msgid "" "The server process with PID %d is among those with the oldest transactions." msgstr "%d PID 서버 프로세스가 가장 오래된 트랜잭션을 사용하고 있습니다." -#: commands/async.c:1607 +#: commands/async.c:1558 #, c-format msgid "" "The NOTIFY queue cannot be emptied until that process ends its current " @@ -6901,22 +7317,22 @@ msgid "" msgstr "" "이 프로세스의 현재 트랜잭션을 종료하지 않으면, NOTIFY 큐를 비울 수 없습니다" -#: commands/cluster.c:130 +#: commands/cluster.c:128 #, c-format msgid "unrecognized CLUSTER option \"%s\"" msgstr "알 수 없는 CLUSTER 옵션 \"%s\"" -#: commands/cluster.c:160 commands/cluster.c:433 +#: commands/cluster.c:159 commands/cluster.c:433 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "다른 세션의 임시 테이블은 cluster 작업을 할 수 없습니다" -#: commands/cluster.c:178 +#: commands/cluster.c:177 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "\"%s\" 테이블을 위한 previously clustered 인덱스가 없음" -#: commands/cluster.c:192 commands/tablecmds.c:14200 commands/tablecmds.c:16043 +#: 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\" 테이블에 없음" @@ -6931,7 +7347,7 @@ msgstr "공유된 카탈로그는 클러스터 작업을 할 수 없음" msgid "cannot vacuum temporary tables of other sessions" msgstr "다른 세션의 임시 테이블은 vacuum 작업을 할 수 없음" -#: commands/cluster.c:513 commands/tablecmds.c:16053 +#: commands/cluster.c:513 commands/tablecmds.c:16739 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" 개체는 \"%s\" 테이블을 위한 인덱스가 아님" @@ -6960,22 +7376,22 @@ msgstr "잘못된 \"%s\" 인덱스에 대해 클러스터링할 수 없음" msgid "cannot mark index clustered in partitioned table" msgstr "파티션된 테이블 대상으로 인덱스 클러스터 표시를 할 수 없음" -#: commands/cluster.c:950 +#: commands/cluster.c:956 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr " \"%s.%s\" 클러스터링 중 (사용 인덱스: \"%s\")" -#: commands/cluster.c:956 +#: commands/cluster.c:962 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "순차 탐색과 정렬을 이용해서 \"%s.%s\" 개체 클러스터링 중" -#: commands/cluster.c:961 +#: commands/cluster.c:967 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "\"%s.%s\" 청소 중" -#: commands/cluster.c:988 +#: commands/cluster.c:994 #, c-format msgid "" "\"%s.%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" @@ -6983,7 +7399,7 @@ msgstr "" "\"%s.%s\": 삭제가능한 %.0f개, 삭제불가능한 %.0f개의 행 버전을 %u 페이지에서 " "발견했음." -#: commands/cluster.c:993 +#: commands/cluster.c:999 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -6992,33 +7408,39 @@ msgstr "" "%.0f 개의 사용하지 않는 로우 버전을 아직 지우지 못했음.\n" "%s." -#: commands/collationcmds.c:112 +#: commands/cluster.c:1744 +#, c-format +msgid "permission denied to cluster \"%s\", skipping it" +msgstr "\"%s\" 클러스터 권한 없음, 건너뜀" + +#: commands/collationcmds.c:110 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "\"%s\" 연산자 속성을 처리할 수 없음" -#: commands/collationcmds.c:125 commands/collationcmds.c:131 -#: commands/define.c:389 commands/tablecmds.c:7876 -#: replication/pgoutput/pgoutput.c:310 replication/pgoutput/pgoutput.c:333 -#: replication/pgoutput/pgoutput.c:347 replication/pgoutput/pgoutput.c:357 -#: replication/pgoutput/pgoutput.c:367 replication/pgoutput/pgoutput.c:377 -#: replication/pgoutput/pgoutput.c:387 replication/walsender.c:996 -#: replication/walsender.c:1018 replication/walsender.c:1028 +#: 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" msgstr "상충하거나 중복된 옵션들" -#: commands/collationcmds.c:126 +#: commands/collationcmds.c:124 #, c-format msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." msgstr "LOCALE 값은 LC_COLLATE 또는 LC_CTYPE 값과 함께 지정할 수 없음" -#: commands/collationcmds.c:132 +#: commands/collationcmds.c:130 #, c-format msgid "FROM cannot be specified together with any other options." msgstr "FROM 구문은 다른 옵션들과 함께 사용될 수 없습니다." -#: commands/collationcmds.c:191 +#: commands/collationcmds.c:189 #, c-format msgid "collation \"default\" cannot be copied" msgstr "\"default\" 정렬규칙은 복사될 수 없음" @@ -7028,104 +7450,94 @@ msgstr "\"default\" 정렬규칙은 복사될 수 없음" msgid "unrecognized collation provider: %s" msgstr "알 수 없는 정렬규칙 제공자 이름: %s" -#: commands/collationcmds.c:253 -#, c-format -msgid "parameter \"lc_collate\" must be specified" -msgstr "\"lc_collate\" 옵션을 지정해야 함" - -#: commands/collationcmds.c:258 -#, c-format -msgid "parameter \"lc_ctype\" must be specified" -msgstr "\"lc_ctype\" 옵션을 지정해야 함" - -#: commands/collationcmds.c:265 +#: commands/collationcmds.c:253 commands/collationcmds.c:264 +#: commands/collationcmds.c:270 commands/collationcmds.c:278 #, c-format -msgid "parameter \"locale\" must be specified" -msgstr "\"locale\" 매개 변수를 지정해야 함" +msgid "parameter \"%s\" must be specified" +msgstr "\"%s\" 매개 변수를 지정해야 함" -#: commands/collationcmds.c:279 commands/dbcommands.c:1091 +#: commands/collationcmds.c:293 commands/dbcommands.c:1134 #, c-format msgid "using standard form \"%s\" for ICU locale \"%s\"" msgstr "\"%s\"에서 표준을 사용함(해당 ICU 로케일: \"%s\")" -#: commands/collationcmds.c:298 +#: commands/collationcmds.c:312 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "이 제공자는 DETERMINISTIC = false 옵션을 지원하지 않음" -#: commands/collationcmds.c:303 commands/dbcommands.c:1110 +#: commands/collationcmds.c:317 commands/dbcommands.c:1087 #, c-format msgid "ICU rules cannot be specified unless locale provider is ICU" msgstr "ICU 규칙은 로케일 제공자로 ICU로 지정했을 때만 사용할 수 있습니다." -#: commands/collationcmds.c:322 +#: commands/collationcmds.c:340 #, c-format msgid "current database's encoding is not supported with this provider" msgstr "이 제공자는 현재 데이터베이스 인코딩을 지원하지 않음" -#: commands/collationcmds.c:382 +#: commands/collationcmds.c:409 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 정렬규칙(대상 인코딩: \"%s\")이 \"%s\" 스키마 안에 이미 있음" -#: commands/collationcmds.c:393 +#: commands/collationcmds.c:420 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 정렬규칙이 \"%s\" 스키마에 이미 있습니다" -#: commands/collationcmds.c:418 +#: commands/collationcmds.c:445 #, c-format msgid "cannot refresh version of default collation" msgstr "기본 문자 정렬의 버전을 갱신할 수 없음" -#: commands/collationcmds.c:419 +#. translator: %s is an SQL command +#. translator: %s is an SQL ALTER command +#: 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 ALTER DATABASE ... REFRESH COLLATION VERSION instead." -msgstr "" -"대신에, ALTER DATABASE ... REFRESH COLLATION VERSION 명령을 사용하세요." +msgid "Use %s instead." +msgstr "대신에 %s 명령을 사용하십시오." -#: commands/collationcmds.c:446 commands/dbcommands.c:2488 +#: commands/collationcmds.c:480 commands/dbcommands.c:2566 #, c-format msgid "changing version from %s to %s" msgstr "%s에서 %s 버전으로 바꿉니다" -#: commands/collationcmds.c:461 commands/dbcommands.c:2501 +#: commands/collationcmds.c:495 commands/dbcommands.c:2579 #, c-format msgid "version has not changed" msgstr "버전이 바뀌지 않았습니다" -#: commands/collationcmds.c:494 commands/dbcommands.c:2667 +#: commands/collationcmds.c:528 commands/dbcommands.c:2749 #, c-format msgid "database with OID %u does not exist" msgstr "OID %u 데이터베이스 없음" -#: commands/collationcmds.c:515 +#: commands/collationcmds.c:554 #, c-format msgid "collation with OID %u does not exist" msgstr "OID %u 정렬정의(collation) 없음" -#: commands/collationcmds.c:803 +#: commands/collationcmds.c:848 #, c-format msgid "must be superuser to import system collations" msgstr "시스템 정렬규칙을 가져오려면 슈퍼유저여야함" -#: commands/collationcmds.c:831 commands/copyfrom.c:1654 commands/copyto.c:656 -#: libpq/be-secure-common.c:59 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "\"%s\" 명령을 실행할 수 없음: %m" - -#: commands/collationcmds.c:923 commands/collationcmds.c:1008 +#: commands/collationcmds.c:968 commands/collationcmds.c:1053 #, c-format msgid "no usable system locales were found" msgstr "사용할 수 있는 시스템 로케일이 없음" -#: commands/comment.c:61 commands/dbcommands.c:1612 commands/dbcommands.c:1824 -#: commands/dbcommands.c:1934 commands/dbcommands.c:2132 -#: commands/dbcommands.c:2370 commands/dbcommands.c:2461 -#: commands/dbcommands.c:2571 commands/dbcommands.c:3071 -#: utils/init/postinit.c:1021 utils/init/postinit.c:1085 -#: utils/init/postinit.c:1157 +#: 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\" 데이터베이스 없음" @@ -7135,315 +7547,270 @@ msgstr "\"%s\" 데이터베이스 없음" msgid "cannot set comment on relation \"%s\"" msgstr "\"%s\" 릴레이션에 주석을 달 수 없음" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:2028 +#: commands/constraint.c:61 utils/adt/ri_triggers.c:2019 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "\"%s\" 함수가 트리거 관리자에서 호출되지 않았음" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:2037 +#: commands/constraint.c:68 utils/adt/ri_triggers.c:2028 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "AFTER ROW에서 \"%s\" 함수를 실행해야 함" -#: commands/constraint.c:84 +#: commands/constraint.c:82 #, c-format msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "INSERT 또는 UPDATE에 대해 \"%s\" 함수를 실행해야 함" -#: commands/conversioncmds.c:69 +#: commands/conversioncmds.c:62 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "\"%s\" 원본 인코딩 없음" -#: commands/conversioncmds.c:76 +#: commands/conversioncmds.c:69 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "\"%s\" 대상 인코딩 없음" -#: commands/conversioncmds.c:89 +#: commands/conversioncmds.c:82 #, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" msgstr "\"SQL_ASCII\" 인코딩 변환은 지원하지 않습니다." -#: commands/conversioncmds.c:102 +#: commands/conversioncmds.c:95 #, c-format msgid "encoding conversion function %s must return type %s" msgstr "%s 인코딩 변환 함수는 %s 형을 반환해야 함" -#: commands/conversioncmds.c:132 +#: commands/conversioncmds.c:125 #, c-format msgid "" "encoding conversion function %s returned incorrect result for empty input" msgstr "빈 입력으로 %s 인코딩 변환 함수가 잘못된 결과를 반환했음" -#: commands/copy.c:86 +#: commands/copy.c:84 #, c-format msgid "permission denied to COPY to or from an external program" msgstr "외부 프로그램을 이용한 COPY to/from 작업 권한 없음" -#: commands/copy.c:87 +#: commands/copy.c:85 #, c-format msgid "" "Only roles with privileges of the \"%s\" role may COPY to or from an " "external program." msgstr "외부 프로그램을 이용하는 COPY 작업은 \"%s\" 롤 소속원만 허용합니다." -#: commands/copy.c:89 commands/copy.c:100 commands/copy.c:109 +#: commands/copy.c:87 commands/copy.c:98 commands/copy.c:107 #, c-format msgid "" "Anyone can COPY to stdout or from stdin. psql's \\copy command also works " "for anyone." msgstr "일반 사용자인데, 이 작업이 필요하면, psql의 \\copy 명령을 이용하세요" -#: commands/copy.c:97 +#: commands/copy.c:95 #, c-format msgid "permission denied to COPY from a file" msgstr "파일 내용 가져오는 COPY 작업 권한 없음" -#: commands/copy.c:98 +#: commands/copy.c:96 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY from a file." msgstr "" "파일을 읽어 COPY 명령으로 자료를 저장하려면, \"%s\" 롤 소속원이어야 합니다." -#: commands/copy.c:106 +#: commands/copy.c:104 #, c-format msgid "permission denied to COPY to a file" msgstr "파일로 저장하는 COPY 작업 권한 없음" -#: commands/copy.c:107 +#: commands/copy.c:105 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY to a file." msgstr "COPY 명령 결과를 파일로 저장하려면, \"%s\" 롤 소속원이어야 합니다." -#: commands/copy.c:195 +#: commands/copy.c:193 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "로우 단위 보안 기능으로 COPY FROM 명령을 사용할 수 없음" -#: commands/copy.c:196 +#: commands/copy.c:194 #, c-format msgid "Use INSERT statements instead." msgstr "대신에 INSERT 구문을 사용하십시오." -#: commands/copy.c:290 -#, c-format -msgid "MERGE not supported in COPY" -msgstr "COPY에서는 MERGE 구문을 지원하지 않습니다" - -#: commands/copy.c:383 +#: commands/copy.c:375 #, c-format msgid "cannot use \"%s\" with HEADER in COPY TO" msgstr "COPY TO 명령에서는 HEADER 값으로 \"%s\" 값을 사용할 수 없음" -#: commands/copy.c:392 +#: commands/copy.c:384 #, c-format msgid "%s requires a Boolean value or \"match\"" msgstr "%s 값은 불리언 값 또는 \"match\" 이어야 합니다." -#: commands/copy.c:451 +#. 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 %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:416 commands/copy.c:441 +#, c-format +msgid "COPY %s \"%s\" not recognized" +msgstr "COPY %s \"%s\" 구문은 지원하지 않음" + +#: commands/copy.c:502 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "\"%s\" COPY 양식은 지원하지 않음" -#: commands/copy.c:509 commands/copy.c:522 commands/copy.c:535 -#: commands/copy.c:554 +#: 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:566 +#: commands/copy.c:621 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "\"%s\" 옵션에 대한 인자는 인코딩 이름이어야 합니다." -#: commands/copy.c:573 commands/dbcommands.c:859 commands/dbcommands.c:2318 +#: commands/copy.c:642 commands/dbcommands.c:866 commands/dbcommands.c:2381 #, c-format msgid "option \"%s\" not recognized" msgstr "\"%s\" 옵션은 타당하지 않습니다." -#: commands/copy.c:585 +#. 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:590 -#, c-format -msgid "cannot specify NULL in BINARY mode" -msgstr "BINARY 모드에서는 NULL 값을 지정할 수 없음" - -#: commands/copy.c:595 +#: commands/copy.c:670 #, c-format -msgid "cannot specify DEFAULT in BINARY mode" -msgstr "BINARY 모드에서는 DEFAULT 지정할 수 없음" +msgid "only ON_ERROR STOP is allowed in BINARY mode" +msgstr "BINARY 모드에서는 ON_ERROR STOP만 허용함" -#: commands/copy.c:617 +#: commands/copy.c:692 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPY 구분자는 1바이트의 단일 문자여야 함" -#: commands/copy.c:624 +#: commands/copy.c:699 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY 명령에서 사용할 칼럼 구분자로 줄바꿈 문자들을 사용할 수 없습니다" -#: commands/copy.c:630 +#: commands/copy.c:705 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY null 표현에서 줄바꿈 또는 캐리지 리턴을 사용할 수 없음" -#: commands/copy.c:640 +#: commands/copy.c:715 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "COPY 기본 동작에서는 줄바꿈 또는 캐리지 리턴을 사용할 수 없음" -#: commands/copy.c:658 +#: commands/copy.c:733 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPY 구분자는 \"%s\"일 수 없음" -#: commands/copy.c:664 -#, c-format -msgid "cannot specify HEADER in BINARY mode" -msgstr "BINARY 모드에서는 HEADER 옵션을 지정할 수 없음" - -#: commands/copy.c:670 +#. 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 "COPY quote available only in CSV mode" -msgstr "COPY 따옴표는 CSV 모드에서만 사용할 수 있음" +msgid "COPY %s requires CSV mode" +msgstr "%s COPY 명령 옵션은 CSV 모드가 필요함" -#: commands/copy.c:675 +#: commands/copy.c:752 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPY 따옴표는 1바이트의 단일 문자여야 함" -#: commands/copy.c:680 +#: commands/copy.c:757 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPY 구분자 및 따옴표는 서로 달라야 함" -#: commands/copy.c:686 -#, c-format -msgid "COPY escape available only in CSV mode" -msgstr "COPY 이스케이프는 CSV 모드에서만 사용할 수 있음" - -#: commands/copy.c:691 +#: commands/copy.c:769 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPY 이스케이프는 1바이트의 단일 문자여야 함" -#: commands/copy.c:697 +#. 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 available only in CSV mode" -msgstr "COPY force quote는 CSV 모드에서만 사용할 수 있음" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "COPY 구분자는 %s 정의에 없어야 함" -#: commands/copy.c:701 +#. 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 quote only available using COPY TO" -msgstr "COPY force quote는 COPY TO에서만 사용할 수 있음" +msgid "CSV quote character must not appear in the %s specification" +msgstr "CSV 인용 문자는 %s 정의에 없어야 함" -#: commands/copy.c:707 +#: commands/copy.c:877 #, c-format -msgid "COPY force not null available only in CSV mode" -msgstr "COPY force not null은 CSV 모드에서만 사용할 수 있음" +msgid "NULL specification and DEFAULT specification cannot be the same" +msgstr "NULL 지정과 DEFAULT 지정이 같을 수는 없음" -#: commands/copy.c:711 +#: commands/copy.c:939 #, c-format -msgid "COPY force not null only available using COPY FROM" -msgstr "COPY force not null은 COPY FROM에서만 사용할 수 있음" +msgid "column \"%s\" is a generated column" +msgstr "\"%s\" 칼럼은 미리 계산된 칼럼임" -#: commands/copy.c:717 +#: commands/copy.c:941 #, c-format -msgid "COPY force null available only in CSV mode" -msgstr "COPY force null은 CSV 모드에서만 사용할 수 있음" +msgid "Generated columns cannot be used in COPY." +msgstr "미리 계산된 칼럼은 COPY 작업 대상이 아님" -#: commands/copy.c:722 +#: 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 "COPY force null only available using COPY FROM" -msgstr "COPY force null은 COPY FROM에서만 사용할 수 있음" +msgid "column \"%s\" does not exist" +msgstr "\"%s\" 이름의 칼럼은 없습니다" -#: commands/copy.c:728 -#, c-format -msgid "COPY delimiter must not appear in the NULL specification" -msgstr "COPY 구분자는 NULL 지정에 표시되지 않아야 함" - -#: commands/copy.c:735 -#, c-format -msgid "CSV quote character must not appear in the NULL specification" -msgstr "CSV 따옴표는 NULL 지정에 표시되지 않아야 함" - -#: commands/copy.c:742 -#, c-format -msgid "COPY DEFAULT only available using COPY FROM" -msgstr "COPY DEFAULT는 COPY FROM에서만 사용할 수 있음" - -#: commands/copy.c:748 -#, c-format -msgid "COPY delimiter must not appear in the DEFAULT specification" -msgstr "COPY 구분자는 DEFAULT 지정에 표시되지 않아야 함" - -#: commands/copy.c:755 -#, c-format -msgid "CSV quote character must not appear in the DEFAULT specification" -msgstr "CSV 따옴표는 DEFAULT 지정에 표시되지 않아야 함" - -#: commands/copy.c:763 -#, c-format -msgid "NULL specification and DEFAULT specification cannot be the same" -msgstr "NULL 지정과 DEFAULT 지정이 같을 수는 없음" - -#: commands/copy.c:825 -#, c-format -msgid "column \"%s\" is a generated column" -msgstr "\"%s\" 칼럼은 미리 계산된 칼럼임" - -#: commands/copy.c:827 -#, c-format -msgid "Generated columns cannot be used in COPY." -msgstr "미리 계산된 칼럼은 COPY 작업 대상이 아님" - -#: commands/copy.c:842 commands/indexcmds.c:1910 commands/statscmds.c:242 -#: commands/tablecmds.c:2405 commands/tablecmds.c:3127 -#: commands/tablecmds.c:3626 parser/parse_relation.c:3689 -#: parser/parse_relation.c:3699 parser/parse_relation.c:3717 -#: parser/parse_relation.c:3724 parser/parse_relation.c:3738 -#: utils/adt/tsvector_op.c:2855 -#, c-format -msgid "column \"%s\" does not exist" -msgstr "\"%s\" 이름의 칼럼은 없습니다" - -#: commands/copy.c:849 commands/tablecmds.c:2431 commands/trigger.c:958 -#: parser/parse_target.c:1070 parser/parse_target.c:1081 +#: 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\" 칼럼을 하나 이상 지정했음" -#: commands/copyfrom.c:122 +#: commands/copyfrom.c:118 #, c-format msgid "COPY %s" msgstr "COPY %s" -#: commands/copyfrom.c:130 +#: commands/copyfrom.c:126 #, c-format msgid "COPY %s, line %llu, column %s" msgstr "COPY %s, %llu번째 줄, %s 열" -#: commands/copyfrom.c:135 commands/copyfrom.c:181 +#: commands/copyfrom.c:131 commands/copyfrom.c:177 #, c-format msgid "COPY %s, line %llu" msgstr "COPY %s, %llu번째 줄" -#: commands/copyfrom.c:147 +#: commands/copyfrom.c:143 #, c-format msgid "COPY %s, line %llu, column %s: \"%s\"" msgstr "COPY %s, %llu번째 줄, %s 열: \"%s\"" -#: commands/copyfrom.c:157 +#: commands/copyfrom.c:153 #, c-format msgid "COPY %s, line %llu, column %s: null input" msgstr "COPY %s, %llu행, %s 열: null 입력" -#: commands/copyfrom.c:174 +#: commands/copyfrom.c:170 #, c-format msgid "COPY %s, line %llu: \"%s\"" msgstr "COPY %s, %llu번째 줄: \"%s\"" @@ -7494,17 +7861,27 @@ msgstr "" "현재 하위 트랜잭션에서 만들어지거나 비워진 테이블이 아니기 때문에 COPY " "FREEZE 작업을 할 수 없음" -#: commands/copyfrom.c:1411 +#: commands/copyfrom.c:1313 +#, c-format +msgid "%llu row was skipped due to data type incompatibility" +msgid_plural "%llu rows were skipped due to data type incompatibility" +msgstr[0] "%llu개의 로우가 자료형이 호환되지 않아 건너뜀" + +#. 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_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "\"%s\" FORCE_NOT_NULL 칼럼은 COPY에서 참조되지 않음" +msgid "%s column \"%s\" not referenced by COPY" +msgstr "%s 옵션(해당 칼럼: \"%s\")은 COPY에서 참조되지 않음" -#: commands/copyfrom.c:1434 +#: commands/copyfrom.c:1544 utils/mb/mbutils.c:385 #, c-format -msgid "FORCE_NULL column \"%s\" not referenced by COPY" -msgstr "\"%s\" FORCE_NULL 칼럼은 COPY에서 참조되지 않음" +msgid "" +"default conversion function for encoding \"%s\" to \"%s\" does not exist" +msgstr "" +"\"%s\" 인코딩을 \"%s\" 인코딩으로 변환할 기본 변환규칙(conversion)이 없음" -#: commands/copyfrom.c:1673 +#: commands/copyfrom.c:1742 #, c-format msgid "" "COPY FROM instructs the PostgreSQL server process to read a file. You may " @@ -7514,17 +7891,17 @@ msgstr "" "언트 쪽에 있는 파일을 읽어 처리 하려면, psql의 \\copy 내장 명령어를 사용하세" "요." -#: commands/copyfrom.c:1686 commands/copyto.c:708 +#: commands/copyfrom.c:1755 commands/copyto.c:706 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" 디렉터리임" -#: commands/copyfrom.c:1754 commands/copyto.c:306 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:1769 commands/copyto.c:311 +#: commands/copyfrom.c:1838 commands/copyto.c:304 #, c-format msgid "program \"%s\" failed" msgstr "\"%s\" 프로그램 실패" @@ -7565,19 +7942,19 @@ msgid "could not read from COPY file: %m" msgstr "COPY 명령에 사용할 파일을 읽을 수 없습니다: %m" #: commands/copyfromparse.c:278 commands/copyfromparse.c:303 -#: tcop/postgres.c:377 +#: 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 발견됨" -#: commands/copyfromparse.c:294 +#: commands/copyfromparse.c:294 replication/walsender.c:772 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "" "COPY 명령으로 stdin으로 자료를 가져오는 동안 예상치 않은 메시지 타입 0x%02X " "발견됨" -#: commands/copyfromparse.c:317 +#: commands/copyfromparse.c:317 replication/walsender.c:803 #, c-format msgid "COPY from stdin failed: %s" msgstr "COPY 명령에서 stdin으로 자료 가져오기 실패: %s" @@ -7593,19 +7970,19 @@ msgid "" "column name mismatch in header line field %d: got null value (\"%s\"), " "expected \"%s\"" msgstr "" -"헤더 %d 번째 필드의 칼럼 이름이 일치하지 않음: null 값 발견(\"%s\"), 기대값=" -"\"%s\"" +"헤더 %d 번째 필드의 칼럼 이름이 일치하지 않음: null 값 발견(\"%s\"), 기대값" +"=\"%s\"" #: commands/copyfromparse.c:808 #, c-format msgid "" "column name mismatch in header line field %d: got \"%s\", expected \"%s\"" msgstr "" -"헤더 줄 %d 번째 필드의 칼럼 이름이 일치하지 않음: 해당이름=\"%s\", 기대값=" -"\"%s\"" +"헤더 줄 %d 번째 필드의 칼럼 이름이 일치하지 않음: 해당이름=\"%s\", 기대값" +"=\"%s\"" -#: commands/copyfromparse.c:892 commands/copyfromparse.c:1512 -#: commands/copyfromparse.c:1768 +#: commands/copyfromparse.c:892 commands/copyfromparse.c:1554 +#: commands/copyfromparse.c:1810 #, c-format msgid "extra data after last expected column" msgstr "마지막 칼럼을 초과해서 또 다른 데이터가 있음" @@ -7615,196 +7992,212 @@ msgstr "마지막 칼럼을 초과해서 또 다른 데이터가 있음" msgid "missing data for column \"%s\"" msgstr "\"%s\" 칼럼의 자료가 빠졌음" -#: commands/copyfromparse.c:999 +#: commands/copyfromparse.c:990 +#, c-format +msgid "" +"skipping row due to data type incompatibility at line %llu for column " +"\"%s\": \"%s\"" +msgstr "" +"%llu 줄에서 자료형이 호환되지 않아, 로우를 건너 뜀(해당 칼럼: \"%s\"): \"%s\"" + +#: commands/copyfromparse.c:998 +#, c-format +msgid "" +"skipping row due to data type incompatibility at line %llu for column " +"\"%s\": null input" +msgstr "" +"%llu 줄에서 자료형이 호환되지 않아, 로우를 건너 뜀(해당 칼럼: \"%s\"): null 입력" + +#: commands/copyfromparse.c:1044 #, c-format msgid "received copy data after EOF marker" msgstr "EOF 표시 뒤에도 복사 데이터를 받았음" -#: commands/copyfromparse.c:1006 +#: commands/copyfromparse.c:1051 #, c-format msgid "row field count is %d, expected %d" msgstr "행(row) 필드 갯수가 %d 임, 예상값은 %d" -#: commands/copyfromparse.c:1294 commands/copyfromparse.c:1311 +#: commands/copyfromparse.c:1336 commands/copyfromparse.c:1353 #, c-format msgid "literal carriage return found in data" msgstr "데이터에 carriage return 값이 잘못되었음" -#: commands/copyfromparse.c:1295 commands/copyfromparse.c:1312 +#: commands/copyfromparse.c:1337 commands/copyfromparse.c:1354 #, c-format msgid "unquoted carriage return found in data" msgstr "데이터에 carriage return 값 표기가 잘못 되었음" -#: commands/copyfromparse.c:1297 commands/copyfromparse.c:1314 +#: commands/copyfromparse.c:1339 commands/copyfromparse.c:1356 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "carriage return값으로 \"\\r\" 문자를 사용하세요" -#: commands/copyfromparse.c:1298 commands/copyfromparse.c:1315 +#: commands/copyfromparse.c:1340 commands/copyfromparse.c:1357 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "" "carriage return 문자를 그대로 적용하려면, quoted CSV 필드를 사용하세요." -#: commands/copyfromparse.c:1327 +#: commands/copyfromparse.c:1369 #, c-format msgid "literal newline found in data" msgstr "데이터에 newline 값이 잘못되었음" -#: commands/copyfromparse.c:1328 +#: commands/copyfromparse.c:1370 #, c-format msgid "unquoted newline found in data" msgstr "데이터에 newline 값이 잘못 되었음" -#: commands/copyfromparse.c:1330 +#: commands/copyfromparse.c:1372 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "newline 값으로 \"\\n\" 문자를 사용하세요" -#: commands/copyfromparse.c:1331 +#: commands/copyfromparse.c:1373 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "newline 문자를 그대로 적용하려면, quoted CSV 필드를 사용하세요." -#: commands/copyfromparse.c:1377 commands/copyfromparse.c:1413 +#: commands/copyfromparse.c:1419 commands/copyfromparse.c:1455 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "end-of-copy 마크는 이전 newline 모양가 틀립니다" -#: commands/copyfromparse.c:1386 commands/copyfromparse.c:1402 +#: commands/copyfromparse.c:1428 commands/copyfromparse.c:1444 #, c-format msgid "end-of-copy marker corrupt" msgstr "end-of-copy 마크가 잘못되었음" -#: commands/copyfromparse.c:1704 commands/copyfromparse.c:1919 +#: commands/copyfromparse.c:1746 commands/copyfromparse.c:1961 #, c-format msgid "unexpected default marker in COPY data" msgstr "COPY 자료 안에 예상치 않은 기본 마커" -#: commands/copyfromparse.c:1705 commands/copyfromparse.c:1920 +#: commands/copyfromparse.c:1747 commands/copyfromparse.c:1962 #, c-format msgid "Column \"%s\" has no default value." msgstr "\"%s\" 칼럼은 DEFAULT 값이 없음." -#: commands/copyfromparse.c:1852 +#: commands/copyfromparse.c:1894 #, c-format msgid "unterminated CSV quoted field" msgstr "종료되지 않은 CSV 따옴표 필드" -#: commands/copyfromparse.c:1954 commands/copyfromparse.c:1973 +#: commands/copyfromparse.c:1996 commands/copyfromparse.c:2015 #, c-format msgid "unexpected EOF in COPY data" msgstr "복사 자료 안에 예상치 않은 EOF 발견" -#: commands/copyfromparse.c:1963 +#: commands/copyfromparse.c:2005 #, c-format msgid "invalid field size" msgstr "잘못된 필드 크기" -#: commands/copyfromparse.c:1986 +#: commands/copyfromparse.c:2028 #, c-format msgid "incorrect binary data format" msgstr "잘못된 바이너리 자료 포맷" -#: commands/copyto.c:236 +#: commands/copyto.c:229 #, c-format msgid "could not write to COPY program: %m" msgstr "COPY 프로그램으로 파일을 쓸 수 없습니다: %m" -#: commands/copyto.c:241 +#: commands/copyto.c:234 #, c-format msgid "could not write to COPY file: %m" msgstr "COPY 파일로로 파일을 쓸 수 없습니다: %m" -#: commands/copyto.c:386 +#: commands/copyto.c:379 #, c-format msgid "cannot copy from view \"%s\"" msgstr "\"%s\" 이름의 개체는 뷰(view)입니다. 자료를 내보낼 수 없습니다" -#: commands/copyto.c:388 commands/copyto.c:394 commands/copyto.c:400 -#: commands/copyto.c:411 +#: commands/copyto.c:381 commands/copyto.c:387 commands/copyto.c:393 +#: commands/copyto.c:404 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "COPY (SELECT ...) TO 변형을 시도하십시오." -#: commands/copyto.c:392 +#: commands/copyto.c:385 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "\"%s\" 이름의 개체는 구체화된 뷰입니다. 자료를 내보낼 수 없습니다" -#: commands/copyto.c:398 +#: commands/copyto.c:391 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "\"%s\" 이름의 개체는 외부 테이블입니다. 자료를 내보낼 수 없습니다" -#: commands/copyto.c:404 +#: commands/copyto.c:397 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "\"%s\" 이름의 개체는 시퀀스입니다. 자료를 내보낼 수 없습니다" -#: commands/copyto.c:409 +#: commands/copyto.c:402 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "\"%s\" 파티션 된 테이블에서 복사할 수 없음" -#: commands/copyto.c:415 +#: commands/copyto.c:408 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "" "\"%s\" 개체는 테이블이 아닌 릴레이션(relation)이기에 자료를 내보낼 수 없습니" "다" -#: commands/copyto.c:467 +#: commands/copyto.c:460 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "DO INSTEAD NOTHING 룰(rule)은 COPY 구문에서 지원하지 않습니다." -#: commands/copyto.c:481 +#: commands/copyto.c:474 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "선택적 DO INSTEAD 룰은 COPY 구문에서 지원하지 않음" -#: commands/copyto.c:485 +#: commands/copyto.c:478 #, c-format -msgid "DO ALSO rules are not supported for the COPY" -msgstr "DO ALSO 룰(rule)은 COPY 구문에서 지원하지 않습니다." +msgid "DO ALSO rules are not supported for COPY" +msgstr "DO ALSO 룰은 COPY 구문에서 지원하지 않음" -#: commands/copyto.c:490 +#: commands/copyto.c:483 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "다중 구문 DO INSTEAD 룰은 COPY 구문에서 지원하지 않음" -#: commands/copyto.c:500 +#: commands/copyto.c:493 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) 지원하지 않음" -#: commands/copyto.c:517 +#: commands/copyto.c:499 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "COPY 쿼리는 DDL, DCL 명령이 아니여야 함" + +#: commands/copyto.c:515 #, c-format msgid "COPY query must have a RETURNING clause" -msgstr "COPY 쿼리는 RETURNING 절이 있어야 합니다" +msgstr "COPY 쿼리는 RETURNING 절이 있어야 함" -#: commands/copyto.c:546 +#: commands/copyto.c:544 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "COPY 문에 의해 참조된 릴레이션이 변경 되었음" -#: commands/copyto.c:605 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "\"%s\" FORCE_QUOTE 칼럼은 COPY에서 참조되지 않음" - -#: commands/copyto.c:673 +#: commands/copyto.c:671 #, c-format msgid "relative path not allowed for COPY to file" -msgstr "COPY 명령에 사용할 파일 이름으로 상대경로는 사용할 수 없습니다" +msgstr "COPY 명령에 사용할 파일 이름으로 상대경로는 사용할 수 없음" -#: commands/copyto.c:692 +#: commands/copyto.c:690 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "\"%s\" 파일 열기 실패: %m" -#: commands/copyto.c:695 +#: commands/copyto.c:693 #, c-format msgid "" "COPY TO instructs the PostgreSQL server process to write a file. You may " @@ -7814,132 +8207,142 @@ msgstr "" "저장된다. 클라이언트 쪽에서 그 결과를 저장하려면, psql \\copy 명령으로 처리" "할 수 있다." -#: commands/createas.c:215 commands/createas.c:523 +#: commands/createas.c:210 commands/createas.c:516 #, c-format msgid "too many column names were specified" msgstr "너무 많은 칼럼 이름을 지정했습니다." -#: commands/createas.c:546 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "이 명령을 위한 정책은 아직 구현되어 있지 않습니다" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:829 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION 예약어는 이제 더이상 지원하지 않습니다" -#: commands/dbcommands.c:823 +#: commands/dbcommands.c:830 #, c-format msgid "Consider using tablespaces instead." msgstr "대신에 테이블스페이스를 이용하세요." -#: commands/dbcommands.c:848 +#: commands/dbcommands.c:855 #, c-format msgid "OIDs less than %u are reserved for system objects" msgstr "시스템 객체용으로 사용할 미리 예약된 최대 %u OID 보다 작을 수는 없음" -#: commands/dbcommands.c:879 utils/adt/ascii.c:146 +#: commands/dbcommands.c:886 utils/adt/ascii.c:146 #, c-format msgid "%d is not a valid encoding code" msgstr "%d 값은 잘못된 인코딩 코드임" -#: commands/dbcommands.c:890 utils/adt/ascii.c:128 +#: commands/dbcommands.c:897 utils/adt/ascii.c:128 #, c-format msgid "%s is not a valid encoding name" msgstr "%s 이름은 잘못된 인코딩 이름임" -#: commands/dbcommands.c:919 +#: commands/dbcommands.c:931 #, c-format msgid "unrecognized locale provider: %s" msgstr "알 수 없는 로케일 제공자 이름: %s" -#: commands/dbcommands.c:932 commands/dbcommands.c:2351 commands/user.c:300 -#: commands/user.c:740 +#: 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" -#: commands/dbcommands.c:953 +#: commands/dbcommands.c:965 #, c-format msgid "permission denied to create database" msgstr "데이터베이스를 만들 권한이 없음" -#: commands/dbcommands.c:977 +#: commands/dbcommands.c:989 #, c-format msgid "template database \"%s\" does not exist" msgstr "\"%s\" 템플릿 데이터베이스 없음" -#: commands/dbcommands.c:987 +#: commands/dbcommands.c:999 #, c-format msgid "cannot use invalid database \"%s\" as template" msgstr "\"%s\" 데이터베이스 잘못된 것으로 템플릿으로 사용할 수 없음" -#: commands/dbcommands.c:988 commands/dbcommands.c:2380 -#: utils/init/postinit.c:1100 +#: 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 명령을 사용하세요." -#: commands/dbcommands.c:999 +#: commands/dbcommands.c:1011 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "\"%s\" 데이터베이스를 복사할 권한이 없음" -#: commands/dbcommands.c:1016 +#: commands/dbcommands.c:1028 #, c-format msgid "invalid create database strategy \"%s\"" msgstr "잘못된 데이터베이스 만들기 전략: \"%s\"" -#: commands/dbcommands.c:1017 +#: commands/dbcommands.c:1029 #, c-format -msgid "Valid strategies are \"wal_log\", and \"file_copy\"." -msgstr "사용할 수 있는 값은 \"wal_log\" 또는 \"file_copy\" 입니다." +msgid "Valid strategies are \"wal_log\" and \"file_copy\"." +msgstr "사용할 수 있는 전략값은 \"wal_log\" 또는 \"file_copy\"" -#: commands/dbcommands.c:1043 +#: commands/dbcommands.c:1050 #, c-format msgid "invalid server encoding %d" msgstr "잘못된 서버 인코딩 %d" -#: commands/dbcommands.c:1049 +#: commands/dbcommands.c:1056 #, c-format msgid "invalid LC_COLLATE locale name: \"%s\"" msgstr "LC_COLLATE 로케일 이름이 잘못됨: \"%s\"" -#: commands/dbcommands.c:1050 commands/dbcommands.c:1056 +#: commands/dbcommands.c:1057 commands/dbcommands.c:1063 #, c-format msgid "If the locale name is specific to ICU, use ICU_LOCALE." msgstr "ICU 로케일 이름을 사용하려면, ICU_LOCALE을 사용하세요." -#: commands/dbcommands.c:1055 +#: commands/dbcommands.c:1062 #, c-format msgid "invalid LC_CTYPE locale name: \"%s\"" msgstr "LC_CTYPE 로케일 이름이 잘못됨: \"%s\"" -#: commands/dbcommands.c:1066 +#: commands/dbcommands.c:1074 +#, c-format +msgid "BUILTIN_LOCALE cannot be specified unless locale provider is builtin" +msgstr "BUILTIN_LOCALE 옵션은 로케일 제공자 중에 빌트인이 있어야 쓸 수 있음" + +#: commands/dbcommands.c:1082 +#, c-format +msgid "ICU locale cannot be specified unless locale provider is ICU" +msgstr "ICU 로케일은 ICU 로케일 제공자를 지정해야만 쓸 수 있습니다." + +#: commands/dbcommands.c:1100 +#, c-format +msgid "LOCALE or BUILTIN_LOCALE must be specified" +msgstr "LOCALE 또는 BUILTIN_LOCALE을 지정해야 합니다." + +#: commands/dbcommands.c:1109 #, c-format msgid "encoding \"%s\" is not supported with ICU provider" msgstr "\"%s\" 인코딩은 ICU 제공자에서 지원하지 않음" -#: commands/dbcommands.c:1076 +#: commands/dbcommands.c:1119 #, c-format msgid "LOCALE or ICU_LOCALE must be specified" msgstr "LOCALE 또는 ICU_LOCALE을 지정해야 합니다." -#: commands/dbcommands.c:1105 -#, c-format -msgid "ICU locale cannot be specified unless locale provider is ICU" -msgstr "ICU 로케일은 ICU 로케일 제공자를 지정해야만 쓸 수 있습니다." - -#: commands/dbcommands.c:1128 +#: commands/dbcommands.c:1163 #, c-format msgid "" "new encoding (%s) is incompatible with the encoding of the template database " "(%s)" msgstr "새 인코딩(%s)이 템플릿 데이터베이스의 인코딩(%s)과 호환되지 않음" -#: commands/dbcommands.c:1131 +#: commands/dbcommands.c:1166 #, c-format msgid "" "Use the same encoding as in the template database, or use template0 as " @@ -7948,7 +8351,7 @@ msgstr "" "템플릿 데이터베이스와 동일한 인코딩을 사용하거나 template0을 템플릿으로 사용" "하십시오." -#: commands/dbcommands.c:1136 +#: commands/dbcommands.c:1171 #, c-format msgid "" "new collation (%s) is incompatible with the collation of the template " @@ -7957,7 +8360,7 @@ msgstr "" "새 데이터 정렬 규칙 (%s)이 템플릿 데이터베이스의 데이터 정렬 규칙(%s)과 호환" "되지 않음" -#: commands/dbcommands.c:1138 +#: commands/dbcommands.c:1173 #, c-format msgid "" "Use the same collation as in the template database, or use template0 as " @@ -7966,14 +8369,14 @@ msgstr "" "템플릿 데이터베이스와 동일한 데이터 정렬 규칙을 사용하거나 template0을 템플릿" "으로 사용하십시오." -#: commands/dbcommands.c:1143 +#: commands/dbcommands.c:1178 #, c-format msgid "" "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database " "(%s)" msgstr "새 LC_CTYPE (%s)이 템플릿 데이터베이스의 LC_CTYPE (%s)과 호환되지 않음" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1180 #, c-format msgid "" "Use the same LC_CTYPE as in the template database, or use template0 as " @@ -7982,7 +8385,7 @@ msgstr "" "템플릿 데이터베이스와 동일한 LC_CTYPE을 사용하거나 template0을 템플릿으로 사" "용하십시오." -#: commands/dbcommands.c:1150 +#: commands/dbcommands.c:1185 #, c-format msgid "" "new locale provider (%s) does not match locale provider of the template " @@ -7990,7 +8393,7 @@ msgid "" msgstr "" "새 로케일 제공자(%s)는 템플릿 데이터베이스의 로케일 제공자(%s)와 같지 않음" -#: commands/dbcommands.c:1152 +#: commands/dbcommands.c:1187 #, c-format msgid "" "Use the same locale provider as in the template database, or use template0 " @@ -7999,7 +8402,7 @@ msgstr "" "템플릿 데이터베이스와 동일한 로케일 제공자를 사용하거나 template0을 템플릿으" "로 사용하십시오." -#: commands/dbcommands.c:1164 +#: commands/dbcommands.c:1199 #, c-format msgid "" "new ICU locale (%s) is incompatible with the ICU locale of the template " @@ -8007,7 +8410,7 @@ msgid "" msgstr "" "새 ICU 로케일(%s)이 템플릿 데이터베이스의 ICU 로케일(%s)과 호환되지 않음" -#: commands/dbcommands.c:1166 +#: commands/dbcommands.c:1201 #, c-format msgid "" "Use the same ICU locale as in the template database, or use template0 as " @@ -8016,7 +8419,7 @@ msgstr "" "템플릿 데이터베이스와 동일한 ICU 로케일을 사용하거나 template0을 템플릿으로 " "사용하십시오." -#: commands/dbcommands.c:1177 +#: commands/dbcommands.c:1212 #, c-format msgid "" "new ICU collation rules (%s) are incompatible with the ICU collation rules " @@ -8025,7 +8428,7 @@ msgstr "" "새 ICU 문자열 정렬 규칙 (%s)이 템플릿 데이터베이스의 ICU 문자열 정렬 규칙(%s)" "과 호환되지 않음" -#: commands/dbcommands.c:1179 +#: commands/dbcommands.c:1214 #, c-format msgid "" "Use the same ICU collation rules as in the template database, or use " @@ -8034,7 +8437,7 @@ msgstr "" "템플릿 데이터베이스와 동일한 ICU 문자열 정렬 규칙을 사용하거나 template0을 템" "플릿으로 사용하십시오." -#: commands/dbcommands.c:1202 +#: commands/dbcommands.c:1243 #, c-format msgid "" "template database \"%s\" has a collation version, but no actual collation " @@ -8043,12 +8446,12 @@ msgstr "" "\"%s\" 템플릿 데이터베이스에는 문자 정렬 규칙 버전이 있는데, 그 실제 버전을 " "알 수 없음" -#: commands/dbcommands.c:1207 +#: commands/dbcommands.c:1248 #, c-format msgid "template database \"%s\" has a collation version mismatch" msgstr "\"%s\" 템플릿 데이터베이스의 문자 정렬 규칙 버전이 바르지 않음" -#: commands/dbcommands.c:1209 +#: commands/dbcommands.c:1250 #, c-format msgid "" "The template database was created using collation version %s, but the " @@ -8057,7 +8460,7 @@ msgstr "" "템플릿 데이터베이스는 문자 정렬 규칙 버전이 %s 이고, 운영체제는 %s 버전을 지" "원합니다." -#: commands/dbcommands.c:1212 +#: commands/dbcommands.c:1253 #, c-format msgid "" "Rebuild all objects in the template database that use the default collation " @@ -8068,17 +8471,17 @@ msgstr "" "고, ALTER DATABASE %s REFRESH COLLATION VERSION 명령을 실행하거나, 바른 버전" "의 라이브러리를 사용해서 PostgreSQL 엔진을 다시 만드십시오." -#: commands/dbcommands.c:1248 commands/dbcommands.c:1980 +#: commands/dbcommands.c:1298 commands/dbcommands.c:2041 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global을 기본 테이블스페이스로 사용할 수 없음" -#: commands/dbcommands.c:1274 +#: commands/dbcommands.c:1324 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "새 \"%s\" 테이블스페이스를 지정할 수 없습니다." -#: commands/dbcommands.c:1276 +#: commands/dbcommands.c:1326 #, c-format msgid "" "There is a conflict because database \"%s\" already has some tables in this " @@ -8087,106 +8490,107 @@ msgstr "" "\"%s\" 데이터베이스 소속 몇몇 테이블들이 이 테이블스페이스안에 있어서 충돌이 " "일어납니다." -#: commands/dbcommands.c:1306 commands/dbcommands.c:1853 +#: commands/dbcommands.c:1356 commands/dbcommands.c:1912 #, c-format msgid "database \"%s\" already exists" msgstr "\"%s\" 이름의 데이터베이스는 이미 있음" -#: commands/dbcommands.c:1320 +#: commands/dbcommands.c:1370 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "\"%s\" 원본 데이터베이스를 다른 사용자가 액세스하기 시작했습니다" -#: commands/dbcommands.c:1342 +#: commands/dbcommands.c:1392 #, c-format msgid "database OID %u is already in use by database \"%s\"" msgstr "%u OID 데이터베이스는 이미 \"%s\" 데이터베이스가 쓰고 있음" -#: commands/dbcommands.c:1348 +#: commands/dbcommands.c:1398 #, c-format msgid "data directory with the specified OID %u already exists" msgstr "%u OID에 해당하는 데이터 디렉터리가 이미 있습니다." -#: commands/dbcommands.c:1520 commands/dbcommands.c:1535 +#: 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\" 로케일과 일치하지 않음" -#: commands/dbcommands.c:1523 +#: commands/dbcommands.c:1574 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "선택한 LC_CTYPE 설정에는 \"%s\" 인코딩이 필요합니다." -#: commands/dbcommands.c:1538 +#: commands/dbcommands.c:1589 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "선택한 LC_COLLATE 설정에는 \"%s\" 인코딩이 필요합니다." -#: commands/dbcommands.c:1619 +#: commands/dbcommands.c:1672 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "\"%s\" 데이터베이스 없음, 건너 뜀" -#: commands/dbcommands.c:1643 +#: commands/dbcommands.c:1696 #, c-format msgid "cannot drop a template database" msgstr "템플릿 데이터베이스는 삭제할 수 없습니다" -#: commands/dbcommands.c:1649 +#: commands/dbcommands.c:1702 #, c-format msgid "cannot drop the currently open database" msgstr "현재 열려 있는 데이터베이스는 삭제할 수 없습니다" -#: commands/dbcommands.c:1662 +#: commands/dbcommands.c:1715 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "\"%s\" 데이터베이스는 논리 복제 슬롯이 활성화 되어 있습니다" -#: commands/dbcommands.c:1664 +#: commands/dbcommands.c:1717 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "%d 개의 활성 슬롯이 있습니다." -#: commands/dbcommands.c:1678 +#: commands/dbcommands.c:1731 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "\"%s\" 데이터베이스가 논리 복제 구독으로 사용되었음" -#: commands/dbcommands.c:1680 +#: commands/dbcommands.c:1733 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "%d 개의 구독이 있습니다." -#: commands/dbcommands.c:1701 commands/dbcommands.c:1875 -#: commands/dbcommands.c:2002 +#: 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:1835 +#: commands/dbcommands.c:1894 #, c-format msgid "permission denied to rename database" msgstr "데이터베이스 이름을 바꿀 권한이 없습니다" -#: commands/dbcommands.c:1864 +#: commands/dbcommands.c:1923 #, c-format msgid "current database cannot be renamed" msgstr "현재 데이터베이스의 이름을 바꿀 수 없음" -#: commands/dbcommands.c:1958 +#: commands/dbcommands.c:2019 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "현재 열려 있는 데이터베이스의 테이블스페이스를 바꿀 수 없음" -#: commands/dbcommands.c:2064 +#: commands/dbcommands.c:2125 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "" "\"%s\" 데이터베이스의 일부 릴레이션들이 \"%s\" 테이블스페이스에 이미 있음" -#: commands/dbcommands.c:2066 +#: commands/dbcommands.c:2127 #, c-format msgid "" "You must move them back to the database's default tablespace before using " @@ -8195,39 +8599,39 @@ msgstr "" "이 명령을 사용하기 전에 데이터베이스의 기본 테이블스페이스로 다시 이동해야 합" "니다." -#: commands/dbcommands.c:2193 commands/dbcommands.c:2909 -#: commands/dbcommands.c:3209 commands/dbcommands.c:3322 +#: 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:2254 +#: commands/dbcommands.c:2317 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "알 수 없는 DROP DATABASE 옵션: \"%s\"" -#: commands/dbcommands.c:2332 +#: commands/dbcommands.c:2395 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "\"%s\" 옵션은 다른 옵션들과 함께 사용할 수 없습니다." -#: commands/dbcommands.c:2379 +#: commands/dbcommands.c:2443 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "잘못된 \"%s\" 데이터베이스에 대해 변경 작업을 할 수 없음" -#: commands/dbcommands.c:2396 +#: commands/dbcommands.c:2460 #, c-format msgid "cannot disallow connections for current database" msgstr "현재 데이터베이스 연결을 허용하지 않습니다." -#: commands/dbcommands.c:2611 +#: commands/dbcommands.c:2690 #, c-format msgid "permission denied to change owner of database" msgstr "데이터베이스 소유주를 바꿀 권한이 없습니다" -#: commands/dbcommands.c:3015 +#: commands/dbcommands.c:3105 #, c-format msgid "" "There are %d other session(s) and %d prepared transaction(s) using the " @@ -8235,448 +8639,458 @@ msgid "" msgstr "" "데이터베이스를 사용하는 %d개의 다른 세션과 %d개의 준비된 트랜잭션이 있습니다." -#: commands/dbcommands.c:3018 +#: 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개의 다른 세션이 있습니다." -#: commands/dbcommands.c:3023 storage/ipc/procarray.c:3798 +#: 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개의 준비된 트랜잭션이 있습니다." -#: commands/dbcommands.c:3165 +#: commands/dbcommands.c:3255 #, c-format msgid "missing directory \"%s\"" msgstr "\"%s\" 디렉터리가 빠졌음" -#: commands/dbcommands.c:3223 commands/tablespace.c:190 -#: commands/tablespace.c:639 +#: commands/dbcommands.c:3313 commands/tablespace.c:184 +#: commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "\"%s\" 디렉터리 상태를 파악할 수 없음: %m" -#: commands/define.c:54 commands/define.c:258 commands/define.c:290 -#: commands/define.c:318 commands/define.c:364 +#: commands/define.c:53 commands/define.c:257 commands/define.c:289 +#: commands/define.c:317 commands/define.c:363 #, c-format msgid "%s requires a parameter" msgstr "%s 매개 변수를 필요로 함" -#: commands/define.c:87 commands/define.c:98 commands/define.c:192 -#: commands/define.c:210 commands/define.c:225 commands/define.c:243 +#: commands/define.c:86 commands/define.c:97 commands/define.c:191 +#: commands/define.c:209 commands/define.c:224 commands/define.c:242 #, c-format msgid "%s requires a numeric value" msgstr "%s 숫자값을 필요로 함" -#: commands/define.c:154 +#: commands/define.c:153 #, c-format msgid "%s requires a Boolean value" msgstr "%s 값은 불리언 값이어야 합니다." -#: commands/define.c:168 commands/define.c:177 commands/define.c:327 +#: commands/define.c:167 commands/define.c:176 commands/define.c:326 #, c-format msgid "%s requires an integer value" msgstr "%s 하나의 정수값이 필요함" -#: commands/define.c:272 +#: commands/define.c:271 #, c-format msgid "argument of %s must be a name" msgstr "%s의 인자는 이름이어야 합니다" -#: commands/define.c:302 +#: commands/define.c:301 #, c-format msgid "argument of %s must be a type name" msgstr "%s의 인자는 자료형 이름이어야 합니다" -#: commands/define.c:348 +#: commands/define.c:347 #, c-format msgid "invalid argument for %s: \"%s\"" msgstr "%s의 잘못된 인자: \"%s\"" -#: commands/dropcmds.c:101 commands/functioncmds.c:1387 -#: utils/adt/ruleutils.c:2897 +#: commands/dropcmds.c:96 commands/functioncmds.c:1382 +#: utils/adt/ruleutils.c:2910 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" 함수는 집계 함수입니다" -#: commands/dropcmds.c:103 +#: commands/dropcmds.c:98 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "집계 함수는 DROP AGGREGATE 명령으로 삭제할 수 있습니다" -#: commands/dropcmds.c:158 commands/sequence.c:474 commands/tablecmds.c:3710 -#: commands/tablecmds.c:3868 commands/tablecmds.c:3920 -#: commands/tablecmds.c:16468 tcop/utility.c:1336 +#: 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:188 commands/dropcmds.c:287 commands/tablecmds.c:1285 +#: commands/dropcmds.c:183 commands/dropcmds.c:282 commands/tablecmds.c:1409 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "\"%s\" 스키마(schema) 없음, 건너뜀" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:277 +#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:286 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "\"%s\" 자료형 없음, 건너뜀" -#: commands/dropcmds.c:257 +#: commands/dropcmds.c:252 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "\"%s\" 인덱스 접근 방법 없음, 건너뜀" -#: commands/dropcmds.c:275 +#: commands/dropcmds.c:270 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "\"%s\" 정렬규칙 없음, 건너뜀" -#: commands/dropcmds.c:282 +#: commands/dropcmds.c:277 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "\"%s\" 문자코드변환규칙(conversion) 없음, 건너뜀" -#: commands/dropcmds.c:293 commands/statscmds.c:654 +#: commands/dropcmds.c:288 commands/statscmds.c:664 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "\"%s\" 통계정보 개체 없음, 무시함" -#: commands/dropcmds.c:300 +#: commands/dropcmds.c:295 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 파서가 없음, 건너뜀" -#: commands/dropcmds.c:307 +#: commands/dropcmds.c:302 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 사전이 없음, 건너뜀" -#: commands/dropcmds.c:314 +#: commands/dropcmds.c:309 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 템플릿이 없음, 건너뜀" -#: commands/dropcmds.c:321 +#: commands/dropcmds.c:316 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 구성이 없음, 건너뜀" -#: commands/dropcmds.c:326 +#: commands/dropcmds.c:321 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "\"%s\" 확장 모듈 없음, 건너 뜀" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "%s(%s) 함수가 없음, 건너뜀" -#: commands/dropcmds.c:349 +#: commands/dropcmds.c:344 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "%s(%s) 프로시져 없음, 건너뜀" -#: commands/dropcmds.c:362 +#: commands/dropcmds.c:357 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "%s(%s) 루틴 없음, 건너뜀" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:370 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "%s(%s) 집계 함수 없음, 건너뜀" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:383 #, c-format msgid "operator %s does not exist, skipping" msgstr "%s 연산자가 없음, 건너뜀" -#: commands/dropcmds.c:394 +#: commands/dropcmds.c:389 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "\"%s\" 프로시주얼 언어 없음, 건너뜀" -#: commands/dropcmds.c:403 +#: commands/dropcmds.c:398 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "%s 형에서 %s 형으로 바꾸는 형변환 규칙(cast)이 없음, 건너뜀" -#: commands/dropcmds.c:412 +#: commands/dropcmds.c:407 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "%s 형변환자 (사용언어 \"%s\") 없음, 건너뜀" -#: commands/dropcmds.c:420 +#: commands/dropcmds.c:415 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr " \"%s\" 트리거가 \"%s\" 릴레이션에 지정된 것이 없음, 건너뜀" -#: commands/dropcmds.c:429 +#: commands/dropcmds.c:424 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr " \"%s\" 정책이 \"%s\" 릴레이션에 지정된 것이 없음, 건너뜀" -#: commands/dropcmds.c:436 +#: commands/dropcmds.c:431 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "\"%s\" 이벤트 트리거 없음, 건너뜀" -#: commands/dropcmds.c:442 +#: commands/dropcmds.c:437 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr " \"%s\" 룰(rule)이 \"%s\" 릴레이션에 지정된 것이 없음, 건너뜀" -#: commands/dropcmds.c:449 +#: commands/dropcmds.c:444 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "\"%s\" 외부 자료 래퍼가 없음, 건너뜀" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1360 +#: commands/dropcmds.c:448 commands/foreigncmds.c:1360 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "\"%s\" 서버가 없음, 건너뜀" -#: commands/dropcmds.c:462 +#: commands/dropcmds.c:457 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "" "\"%s\" 연산자 클래스는 \"%s\" 인덱스 접근 방법에서 사용할 수 없음, 건너뜀" -#: commands/dropcmds.c:474 +#: commands/dropcmds.c:469 #, c-format msgid "" "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "\"%s\" 연산자 패밀리(\"%s\" 접근 방법)가 없음, 건너뜀" -#: commands/dropcmds.c:481 +#: commands/dropcmds.c:476 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "\"%s\" 발행 없음, 건너뜀" -#: commands/event_trigger.c:125 +#: commands/event_trigger.c:137 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "\"%s\" 이벤트 트리거를 만들 권한이 없음" -#: commands/event_trigger.c:127 +#: commands/event_trigger.c:139 #, c-format msgid "Must be superuser to create an event trigger." msgstr "슈퍼유저만 이벤트 트리거를 만들 수 있습니다." -#: commands/event_trigger.c:136 +#: commands/event_trigger.c:149 #, c-format msgid "unrecognized event name \"%s\"" msgstr "알 수 없는 이벤트 이름: \"%s\"" -#: commands/event_trigger.c:153 +#: commands/event_trigger.c:166 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "알 수 없는 필터 변수: \"%s\"" -#: commands/event_trigger.c:207 +#: commands/event_trigger.c:181 +#, c-format +msgid "tag filtering is not supported for login event triggers" +msgstr "태그 필터링은 로그인 이벤트 트리거용으로 쓸 수 없음" + +#: commands/event_trigger.c:224 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "\"%s\" 필터값은 \"%s\" 필터 변수으로 쓸 수 없음" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:213 commands/event_trigger.c:235 +#: commands/event_trigger.c:230 commands/event_trigger.c:252 #, c-format msgid "event triggers are not supported for %s" msgstr "%s 용 이벤트 트리거는 지원하지 않음" -#: commands/event_trigger.c:248 +#: commands/event_trigger.c:265 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "\"%s\" 필터 변수가 한 번 이상 사용되었습니다." -#: commands/event_trigger.c:376 commands/event_trigger.c:420 -#: commands/event_trigger.c:514 +#: 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:452 +#: commands/event_trigger.c:522 #, c-format msgid "event trigger with OID %u does not exist" msgstr "OID %u 이벤트 트리거가 없음" -#: commands/event_trigger.c:482 +#: commands/event_trigger.c:552 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "\"%s\" 이벤트 트리거 소유주를 변경할 권한이 없음" -#: commands/event_trigger.c:484 +#: commands/event_trigger.c:554 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "이벤트 트리거 소유주는 슈퍼유저여야 합니다." -#: commands/event_trigger.c:1304 +#: 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:1397 commands/event_trigger.c:1418 +#: 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:1831 +#: commands/event_trigger.c:1936 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s 개체는 이벤트 트리거 함수 안에서만 호출 되어야 합니다." -#: commands/explain.c:220 +#: commands/explain.c:241 commands/explain.c:266 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "\"%s\" EXPLAIN 옵션에서 쓸 수 없는 값: \"%s\"" -#: commands/explain.c:227 +#: commands/explain.c:273 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "잘못된 EXPLAIN 옵션: \"%s\"" -#: commands/explain.c:236 +#: commands/explain.c:282 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "WAL 옵션은 EXPLAIN ANALYZE에서만 쓸 수 있습니다." -#: commands/explain.c:245 +#: commands/explain.c:291 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "TIMING 옵션은 EXPLAIN ANALYZE에서만 쓸 수 있습니다." -#: commands/explain.c:251 +#: commands/explain.c:297 +#, c-format +msgid "EXPLAIN option SERIALIZE requires ANALYZE" +msgstr "SERIALIZE 옵션은 EXPLAIN ANALYZE에서만 쓸 수 있습니다." + +#: commands/explain.c:303 #, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" msgstr "" "EXPLAIN 옵션으로 ANALYZE 옵션과 GENERIC_PLAN 옵션을 함께 사용할 수 없습니다." -#: commands/extension.c:177 commands/extension.c:3033 +#: commands/extension.c:178 commands/extension.c:3031 #, c-format msgid "extension \"%s\" does not exist" msgstr "\"%s\" 이름의 확장 모듈이 없습니다" -#: commands/extension.c:276 commands/extension.c:285 commands/extension.c:297 -#: commands/extension.c:307 +#: commands/extension.c:277 commands/extension.c:286 commands/extension.c:298 +#: commands/extension.c:308 #, c-format msgid "invalid extension name: \"%s\"" msgstr "잘못된 확장 모듈 이름: \"%s\"" -#: commands/extension.c:277 +#: commands/extension.c:278 #, c-format msgid "Extension names must not be empty." msgstr "확장 모듈 이름을 지정하세요." -#: commands/extension.c:286 +#: commands/extension.c:287 #, c-format msgid "Extension names must not contain \"--\"." msgstr "확장 모듈 이름에 \"--\" 문자가 포함될 수 없습니다." -#: commands/extension.c:298 +#: commands/extension.c:299 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "확장 모듈 이름의 시작과 끝에는 \"-\" 문자를 사용할 수 없습니다." -#: commands/extension.c:308 +#: commands/extension.c:309 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "확장 모듈 이름에는 디렉터리 구분 문자를 사용할 수 없습니다." -#: commands/extension.c:323 commands/extension.c:332 commands/extension.c:341 -#: commands/extension.c:351 +#: commands/extension.c:324 commands/extension.c:333 commands/extension.c:342 +#: commands/extension.c:352 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "잘못된 확장 모듈 버전 이름: \"%s\"" -#: commands/extension.c:324 +#: commands/extension.c:325 #, c-format msgid "Version names must not be empty." msgstr "버전 이름은 비어있으면 안됩니다" -#: commands/extension.c:333 +#: commands/extension.c:334 #, c-format msgid "Version names must not contain \"--\"." msgstr "버전 이름에 \"--\" 문자가 포함될 수 없습니다." -#: commands/extension.c:342 +#: commands/extension.c:343 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "버전 이름의 앞 뒤에 \"-\" 문자를 쓸 수 없습니다." -#: commands/extension.c:352 +#: commands/extension.c:353 #, c-format msgid "Version names must not contain directory separator characters." msgstr "버전 이름에는 디렉터리 분리 문자를 쓸 수 없습니다." -#: commands/extension.c:506 +#: commands/extension.c:507 #, c-format msgid "extension \"%s\" is not available" msgstr "\"%s\" 이름의 확장 모듈을 사용할 수 없습니다" -#: commands/extension.c:507 +#: commands/extension.c:508 #, c-format msgid "Could not open extension control file \"%s\": %m." msgstr "\"%s\" 확장 모듈 제어 파일 열기 실패: %m." -#: commands/extension.c:509 +#: commands/extension.c:510 #, c-format msgid "" "The extension must first be installed on the system where PostgreSQL is " "running." msgstr "해당 확장 모듈은 PostgreSQL 시작 전에 먼저 설치 되어 있어야합니다." -#: commands/extension.c:513 +#: commands/extension.c:514 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "\"%s\" 확장 모듈 제어 파일 열기 실패: %m" -#: commands/extension.c:536 commands/extension.c:546 +#: commands/extension.c:537 commands/extension.c:547 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "\"%s\" 매개 변수는 이차 확장 모듈 제어 파일에서는 사용할 수 없습니다." -#: commands/extension.c:568 commands/extension.c:576 commands/extension.c:584 -#: utils/misc/guc.c:3098 +#: commands/extension.c:569 commands/extension.c:577 commands/extension.c:585 +#: utils/misc/guc.c:3147 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "\"%s\" 매개 변수의 값은 불리언 값이어야 합니다." -#: commands/extension.c:593 +#: commands/extension.c:594 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" 이름은 잘못된 인코딩 이름임" -#: commands/extension.c:607 commands/extension.c:622 +#: commands/extension.c:608 commands/extension.c:623 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "\"%s\" 매개 변수는 확장 모듈 이름 목록이어야 함" -#: commands/extension.c:629 +#: commands/extension.c:630 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "알 수 없는 \"%s\" 매개 변수가 \"%s\" 파일 안에 있습니다." -#: commands/extension.c:638 +#: commands/extension.c:639 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "" "\"relocatable\" 값이 true 인 경우 \"schema\" 매개 변수는 사용할 수 없습니다." -#: commands/extension.c:816 +#: commands/extension.c:817 #, c-format msgid "" "transaction control statements are not allowed within an extension script" msgstr "확장 모듈 스크립트 안에서는 트랜잭션 제어 구문은 사용할 수 없습니다." -#: commands/extension.c:896 +#: commands/extension.c:897 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "\"%s\" 확장 모듈을 만들 권한이 없습니다" -#: commands/extension.c:899 +#: commands/extension.c:900 #, c-format msgid "" "Must have CREATE privilege on current database to create this extension." @@ -8684,17 +9098,17 @@ msgstr "" "이 확장 모듈을 설치하려면 현재 데이터베이스에 대해서 CREATE 권한이 있어야 합" "니다." -#: commands/extension.c:900 +#: commands/extension.c:901 #, c-format msgid "Must be superuser to create this extension." msgstr "확장 모듈은 슈퍼유저만 만들 수 있습니다." -#: commands/extension.c:904 +#: commands/extension.c:905 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "\"%s\" 확장 모듈을 업데이트할 권한이 없습니다." -#: commands/extension.c:907 +#: commands/extension.c:908 #, c-format msgid "" "Must have CREATE privilege on current database to update this extension." @@ -8702,24 +9116,24 @@ msgstr "" "이 확장 모듈을 업데이트 하려면 현재 데이터베이스에 대해서 CREATE 권한이 있어" "야 합니다." -#: commands/extension.c:908 +#: commands/extension.c:909 #, c-format msgid "Must be superuser to update this extension." msgstr "슈퍼유저만 해당 모듈을 업데이트 할 수 있습니다." -#: commands/extension.c:1046 +#: commands/extension.c:1042 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "해당 모듈 소유주 이름에 잘못된 문자: \"%s\" 문자는 허용하지 않음" -#: commands/extension.c:1070 commands/extension.c:1097 +#: commands/extension.c:1066 commands/extension.c:1093 #, c-format msgid "" "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" msgstr "" "확장 모듈 \"%s\" 스키마 이름에 잘못된 문자: \"%s\" 문자는 허용하지 않음" -#: commands/extension.c:1292 +#: commands/extension.c:1288 #, c-format msgid "" "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" @@ -8727,96 +9141,96 @@ msgstr "" "\"%s\" 확장 모듈을 \"%s\" 버전에서 \"%s\" 버전으로 업데이트할 방법이 없습니" "다." -#: commands/extension.c:1500 commands/extension.c:3091 +#: commands/extension.c:1496 commands/extension.c:3089 #, c-format msgid "version to install must be specified" msgstr "설치할 버전을 지정해야 합니다." -#: commands/extension.c:1537 +#: commands/extension.c:1533 #, c-format msgid "" -"extension \"%s\" has no installation script nor update path for version \"%s" -"\"" +"extension \"%s\" has no installation script nor update path for version " +"\"%s\"" msgstr "" "\"%s\" 확장 모듈에는 \"%s\" 버전용 설치나 업데이트 스크립트가 없습니다." -#: commands/extension.c:1571 +#: commands/extension.c:1567 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "\"%s\" 확장 모듈은 \"%s\" 스키마 안에 설치되어야 합니다." -#: commands/extension.c:1731 +#: commands/extension.c:1727 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "\"%s\" 확장 모듈과 \"%s\" 확장 모듈이 서로 의존 관계입니다" -#: commands/extension.c:1736 +#: commands/extension.c:1732 #, c-format msgid "installing required extension \"%s\"" msgstr "\"%s\" 확장 모듈이 필요해서 실치 하는 중" -#: commands/extension.c:1759 +#: commands/extension.c:1755 #, c-format msgid "required extension \"%s\" is not installed" msgstr "\"%s\" 확장 모듈이 필요한데, 설치되어 있지 않습니다." -#: commands/extension.c:1762 +#: commands/extension.c:1758 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "" "필요한 모듈을 함께 설치하려면, CREATE EXTENSION ... CASCADE 구문을 사용하세" "요." -#: commands/extension.c:1797 +#: commands/extension.c:1793 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "\"%s\" 확장 모듈이 이미 있음, 건너뜀" -#: commands/extension.c:1804 +#: commands/extension.c:1800 #, c-format msgid "extension \"%s\" already exists" msgstr "\"%s\" 이름의 확장 모듈이 이미 있습니다" -#: commands/extension.c:1815 +#: commands/extension.c:1811 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "중첩된 CREATE EXTENSION 구문은 지원하지 않습니다." -#: commands/extension.c:1979 +#: commands/extension.c:1975 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "%s 의존개체들은 시스템 개체이기 때문에 삭제 될 수 없습니다" -#: commands/extension.c:2454 +#: commands/extension.c:2450 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "" "%s 함수는 CREATE EXTENSION 명령에서 내부적으로 사용하는 SQL 스크립트 내에서" "만 사용할 수 있습니다." -#: commands/extension.c:2466 +#: commands/extension.c:2462 #, c-format msgid "OID %u does not refer to a table" msgstr "%u OID 자료가 테이블에 없습니다" -#: commands/extension.c:2471 +#: commands/extension.c:2467 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "\"%s\" 테이블은 만들려고 하는 확장 모듈의 구성 요소가 아닙니다." -#: commands/extension.c:2817 +#: commands/extension.c:2813 #, c-format msgid "" "cannot move extension \"%s\" into schema \"%s\" because the extension " "contains the schema" msgstr "\"%s\" 확장 모듈이 \"%s\" 스키마에 이미 있어 옮길 수 없습니다." -#: commands/extension.c:2858 commands/extension.c:2952 +#: commands/extension.c:2854 commands/extension.c:2948 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "\"%s\" 확장 모듈은 SET SCHEMA 구문을 지원하지 않음" -#: commands/extension.c:2915 +#: commands/extension.c:2911 #, c-format msgid "" "cannot SET SCHEMA of extension \"%s\" because other extensions prevent it" @@ -8824,32 +9238,32 @@ msgstr "" "다른 확장 모듈이 해당 스키마를 선점하고 있어, \"%s\" 확장 모듈은 SET SCHEMA " "작업을 할 수 없음." -#: commands/extension.c:2917 +#: commands/extension.c:2913 #, c-format msgid "Extension \"%s\" requests no relocation of extension \"%s\"." msgstr "\"%s\" 확장 모듈은 \"%s\" 확장모듈의 위치 변경을 금지합니다." -#: commands/extension.c:2954 +#: commands/extension.c:2950 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s 개체가 확장 모듈 스키마인 \"%s\" 안에 없음" -#: commands/extension.c:3013 +#: commands/extension.c:3011 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "중첩된 ALTER EXTENSION 구문을 지원하지 않음" -#: commands/extension.c:3102 +#: commands/extension.c:3100 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "\"%s\" 버전의 \"%s\" 확장 모듈이 이미 설치 되어 있음" -#: commands/extension.c:3314 +#: commands/extension.c:3311 #, c-format msgid "cannot add an object of this type to an extension" msgstr "해당 확장 모듈에 이런 형태의 객체는 추가 할 수 없음" -#: commands/extension.c:3380 +#: commands/extension.c:3409 #, c-format msgid "" "cannot add schema \"%s\" to extension \"%s\" because the schema contains the " @@ -8858,7 +9272,12 @@ msgstr "" "\"%s\" 스키마에 \"%s\" 확장 모듈을 추가할 수 없음, 이미 해당 스키마 안에 포" "함되어 있음" -#: commands/extension.c:3474 +#: commands/extension.c:3491 commands/typecmds.c:4042 utils/fmgr/funcapi.c:725 +#, c-format +msgid "could not find multirange type for data type %s" +msgstr "%s 자료형용 multirange 형을 찾을 수 없음" + +#: commands/extension.c:3532 #, c-format msgid "file \"%s\" is too large" msgstr "\"%s\" 파일이 너무 큽니다." @@ -8888,7 +9307,7 @@ msgstr "슈퍼유저만 외부 자료 래퍼의 소유주를 바꿀 수 있습 msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "외부 자료 래퍼의 소유주는 슈퍼유저여야 합니다." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:678 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:691 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "\"%s\" 외부 자료 래퍼가 없음" @@ -8921,7 +9340,7 @@ msgstr "\"%s\" 외부 자료 래퍼를 변경할 권한이 없음" #: commands/foreigncmds.c:699 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." -msgstr "슈퍼유저만 외부 자료 래퍼를 변경할 수 있습니다." +msgstr "슈퍼유저만 외부 자료 래퍼를 바꿀 수 있습니다." #: commands/foreigncmds.c:730 #, c-format @@ -8966,7 +9385,7 @@ msgstr "\"%s\" 사용자 매핑이 \"%s\" 서버용으로 없음" msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "\"%s\" 사용자 매핑이 \"%s\" 서버용으로 없음, 건너뜀" -#: commands/foreigncmds.c:1507 foreign/foreign.c:391 +#: commands/foreigncmds.c:1507 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "\"%s\" 외부 자료 래퍼용 핸들러가 없음" @@ -8981,229 +9400,229 @@ msgstr "\"%s\" 외부 자료 래퍼는 IMPORT FOREIGN SCHEMA 구문을 지원하 msgid "importing foreign table \"%s\"" msgstr "\"%s\" 외부 테이블 가져 오는 중" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL 함수는 shell type %s 리턴할 수 없음" -#: commands/functioncmds.c:114 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "_^_ %s 리턴 자료형은 하나의 shell만 있습니다" -#: commands/functioncmds.c:143 parser/parse_type.c:354 +#: commands/functioncmds.c:138 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "\"%s\" 셸 형식에 대해 형식 한정자를 지정할 수 없음" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:144 #, c-format msgid "type \"%s\" is not yet defined" msgstr "\"%s\" 자료형이 아직 정의되지 않았음" -#: commands/functioncmds.c:150 +#: commands/functioncmds.c:145 #, c-format msgid "Creating a shell type definition." msgstr "셸 타입 정의를 만들고 있습니다" -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:244 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL 함수는 셸 타입 %s 수용할 수 없음" -#: commands/functioncmds.c:255 +#: commands/functioncmds.c:250 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "집계 함수는 셸 타입 %s 수용할 수 없음" -#: commands/functioncmds.c:260 +#: commands/functioncmds.c:255 #, c-format msgid "argument type %s is only a shell" msgstr "%s 인자 자료형은 단지 셸입니다" -#: commands/functioncmds.c:270 +#: commands/functioncmds.c:265 #, c-format msgid "type %s does not exist" msgstr "%s 자료형 없음" -#: commands/functioncmds.c:284 +#: commands/functioncmds.c:279 #, c-format msgid "aggregates cannot accept set arguments" msgstr "집계 함수는 세트 인자를 입력 인자로 쓸 수 없음" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:283 #, c-format msgid "procedures cannot accept set arguments" msgstr "프로시져에서는 집합 인자를 입력 인자로 쓸 수 없음" -#: commands/functioncmds.c:292 +#: commands/functioncmds.c:287 #, c-format msgid "functions cannot accept set arguments" msgstr "함수는 세트 인자를 쓸 수 없음" -#: commands/functioncmds.c:302 +#: commands/functioncmds.c:297 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "VARIADIC 매개 변수는 마지막 입력 매개 변수여야 함" -#: commands/functioncmds.c:322 +#: commands/functioncmds.c:317 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "VARIADIC 매개 변수는 마지막 매개 변수여야 함" -#: commands/functioncmds.c:347 +#: commands/functioncmds.c:342 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC 매개 변수는 배열이어야 함" -#: commands/functioncmds.c:392 +#: commands/functioncmds.c:387 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "\"%s\" 매개 변수가 여러 번 사용 됨" -#: commands/functioncmds.c:410 +#: commands/functioncmds.c:405 #, c-format msgid "only input parameters can have default values" msgstr "입력 매개 변수에서만 기본값을 사용할 수 있음" -#: commands/functioncmds.c:425 +#: commands/functioncmds.c:420 #, c-format msgid "cannot use table references in parameter default value" msgstr "입력 매개 변수 초기값으로 테이블 참조형은 사용할 수 없음" -#: commands/functioncmds.c:449 +#: commands/functioncmds.c:444 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "" "기본 값이 있는 입력 매개 변수 뒤에 오는 입력 매개 변수에도 기본 값이 있어야 " "함" -#: commands/functioncmds.c:459 +#: commands/functioncmds.c:454 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "프로시지 OUT 매개 변수는 기본값이 있는 매개 변수 뒤에 지정하면 안됨" -#: commands/functioncmds.c:601 commands/functioncmds.c:780 +#: commands/functioncmds.c:596 commands/functioncmds.c:775 #, c-format msgid "invalid attribute in procedure definition" msgstr "프로시져 정의에 잘못된 속성이 있음" -#: commands/functioncmds.c:697 +#: commands/functioncmds.c:692 #, c-format msgid "support function %s must return type %s" msgstr "%s support 함수는 %s 자료형을 반환해야 함" -#: commands/functioncmds.c:708 +#: commands/functioncmds.c:703 #, c-format msgid "must be superuser to specify a support function" msgstr "support 함수를 지정하려면 슈퍼유져여야 합니다" -#: commands/functioncmds.c:829 commands/functioncmds.c:1432 +#: commands/functioncmds.c:824 commands/functioncmds.c:1427 #, c-format msgid "COST must be positive" msgstr "COST는 양수여야 함" -#: commands/functioncmds.c:837 commands/functioncmds.c:1440 +#: commands/functioncmds.c:832 commands/functioncmds.c:1435 #, c-format msgid "ROWS must be positive" msgstr "ROWS는 양수여야 함" -#: commands/functioncmds.c:866 +#: commands/functioncmds.c:861 #, c-format msgid "no function body specified" msgstr "함수 본문(body) 부분이 빠졌습니다" -#: commands/functioncmds.c:871 +#: commands/functioncmds.c:866 #, c-format msgid "duplicate function body specified" msgstr "함수 본문(body) 부분을 중복 지정했습니다" -#: commands/functioncmds.c:876 +#: commands/functioncmds.c:871 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "함수의 language 값이 SQL일 때만 인라인 SQL 함수 본문을 쓸 수 있음" -#: commands/functioncmds.c:918 +#: commands/functioncmds.c:913 #, c-format msgid "" "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "" "따옴표 없는 함수 본문을 사용하는 SQL 함수는 다형 자료형 인자를 쓸 수 없음" -#: commands/functioncmds.c:944 commands/functioncmds.c:963 +#: commands/functioncmds.c:939 commands/functioncmds.c:958 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s 구문은 따옴표 없는 SQL 함수 본문 안에서 지원하지 않음" -#: commands/functioncmds.c:991 +#: commands/functioncmds.c:986 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "\"%s\" 언어에는 하나의 AS 항목만 필요함" -#: commands/functioncmds.c:1096 +#: commands/functioncmds.c:1091 #, c-format msgid "no language specified" msgstr "처리할 프로시주얼 언어를 지정하지 않았습니다" -#: commands/functioncmds.c:1104 commands/functioncmds.c:2105 -#: commands/proclang.c:237 +#: 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:1106 commands/functioncmds.c:2107 +#: commands/functioncmds.c:1101 commands/functioncmds.c:2119 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "" "데이터베이스 내에서 프로시주얼 언어를 사용하려면 먼저 CREATE EXTENSION 명령으" "로 사용할 언어를 등록하세요." -#: commands/functioncmds.c:1139 commands/functioncmds.c:1424 +#: commands/functioncmds.c:1134 commands/functioncmds.c:1419 #, c-format msgid "only superuser can define a leakproof function" msgstr "슈퍼유저만 leakproof 함수를 만들 수 있습니다" -#: commands/functioncmds.c:1190 +#: commands/functioncmds.c:1185 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "OUT 매개 변수로 인해 함수 결과 형식은 %s이어야 함" -#: commands/functioncmds.c:1203 +#: commands/functioncmds.c:1198 #, c-format msgid "function result type must be specified" msgstr "함수의 리턴 자료형을 지정해야 합니다" -#: commands/functioncmds.c:1256 commands/functioncmds.c:1444 +#: commands/functioncmds.c:1251 commands/functioncmds.c:1439 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "함수에서 세트를 반환하지 않는 경우 ROWS를 적용할 수 없음" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1546 #, c-format msgid "source data type %s is a pseudo-type" msgstr "%s 원본 자료형이 의사자료형(pseudo-type) 입니다" -#: commands/functioncmds.c:1553 +#: commands/functioncmds.c:1552 #, c-format msgid "target data type %s is a pseudo-type" msgstr "%s 대상 자료형이 의사자료형(pseudo-type) 입니다" -#: commands/functioncmds.c:1577 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "원본 자료형이 도메인이어서 자료형 변환을 무시합니다." -#: commands/functioncmds.c:1582 +#: commands/functioncmds.c:1581 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "대상 자료형이 도메인이어서 자료형 변환을 무시합니다." -#: commands/functioncmds.c:1607 +#: commands/functioncmds.c:1606 #, c-format msgid "cast function must take one to three arguments" msgstr "형변환 함수는 1-3개의 인자만 지정할 수 있습니다" -#: commands/functioncmds.c:1613 +#: commands/functioncmds.c:1612 #, c-format msgid "" "argument of cast function must match or be binary-coercible from source data " @@ -9212,17 +9631,17 @@ msgstr "" "형변환 함수의 인자로 쓸 자료형은 원본 자료형과 일치하거나 바이너리 차원으로 " "같은 자료형이어야 함" -#: commands/functioncmds.c:1617 +#: commands/functioncmds.c:1616 #, c-format msgid "second argument of cast function must be type %s" msgstr "형변화 함수의 두번째 인자 자료형은 반드시 %s 형이여야 합니다" -#: commands/functioncmds.c:1622 +#: commands/functioncmds.c:1621 #, c-format msgid "third argument of cast function must be type %s" msgstr "형변화 함수의 세번째 인자 자료형은 반드시 %s 형이여야 합니다" -#: commands/functioncmds.c:1629 +#: commands/functioncmds.c:1628 #, c-format msgid "" "return data type of cast function must match or be binary-coercible to " @@ -9231,219 +9650,228 @@ msgstr "" "형변환 함수의 반환 자료형은 대상 자료형과 일치하거나 바이너리 차원으로 같은 " "자료형이어야 함" -#: commands/functioncmds.c:1640 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not be volatile" msgstr "형변환 함수는 volatile 특성이 없어야 합니다" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1644 #, c-format msgid "cast function must be a normal function" msgstr "형변환 함수는 일반 함수여야 합니다" -#: commands/functioncmds.c:1649 +#: commands/functioncmds.c:1648 #, c-format msgid "cast function must not return a set" msgstr "형변환 함수는 세트(set)를 리턴할 수 없습니다" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1674 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "CREATE CAST ... WITHOUT FUNCTION 명령은 슈퍼유저만 실행할 수 있습니다" -#: commands/functioncmds.c:1690 +#: commands/functioncmds.c:1689 #, c-format msgid "source and target data types are not physically compatible" msgstr "원본 자료형과 대상 자료형이 서로 논리적인 호환성이 없습니다" -#: commands/functioncmds.c:1705 +#: commands/functioncmds.c:1709 #, c-format msgid "composite data types are not binary-compatible" msgstr "복합 자료형은 바이너리와 호환되지 않음" -#: commands/functioncmds.c:1711 -#, c-format -msgid "enum data types are not binary-compatible" -msgstr "열거 자료형은 바이너리와 호환되지 않음" - -#: commands/functioncmds.c:1717 +#: commands/functioncmds.c:1715 #, c-format msgid "array data types are not binary-compatible" msgstr "배열 자료형은 바이너리와 호환되지 않음" -#: commands/functioncmds.c:1734 +#: 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:1744 +#: commands/functioncmds.c:1756 #, c-format msgid "source data type and target data type are the same" msgstr "원본 자료형과 대상 자료형의 형태가 같습니다" -#: commands/functioncmds.c:1777 +#: commands/functioncmds.c:1789 #, c-format msgid "transform function must not be volatile" msgstr "형변환 함수는 volatile 특성이 없어야 합니다" -#: commands/functioncmds.c:1781 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must be a normal function" msgstr "형변환 함수는 일반 함수여야 합니다." -#: commands/functioncmds.c:1785 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must not return a set" msgstr "형변환 함수는 세트(set)를 리턴할 수 없습니다" -#: commands/functioncmds.c:1789 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must take one argument" msgstr "형변환 함수는 1개의 인자만 지정할 수 있습니다" -#: commands/functioncmds.c:1793 +#: commands/functioncmds.c:1805 #, c-format msgid "first argument of transform function must be type %s" msgstr "형변화 함수의 첫번째 인자 자료형은 반드시 %s 형이여야 합니다" -#: commands/functioncmds.c:1832 +#: commands/functioncmds.c:1844 #, c-format msgid "data type %s is a pseudo-type" msgstr "%s 자료형은 의사자료형(pseudo-type) 입니다" -#: commands/functioncmds.c:1838 +#: commands/functioncmds.c:1850 #, c-format msgid "data type %s is a domain" msgstr "%s 자료형은 도메인입니다" -#: commands/functioncmds.c:1878 +#: commands/functioncmds.c:1890 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "FROM SQL 함수의 반환 자료형은 %s 형이어야 함" -#: commands/functioncmds.c:1904 +#: commands/functioncmds.c:1916 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "TO SQL 함수의 반환 자료형은 변환 자료형이어야 함" -#: commands/functioncmds.c:1931 +#: commands/functioncmds.c:1943 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "%s 자료형(대상 언어: \"%s\")을 위한 형변환 규칙은 이미 있습니다." -#: commands/functioncmds.c:2017 +#: commands/functioncmds.c:2029 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "%s 자료형(대상 언어: \"%s\")을 위한 형변환 규칙은 없습니다." -#: commands/functioncmds.c:2041 +#: commands/functioncmds.c:2053 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "%s 함수는 이미 \"%s\" 스키마안에 있습니다" -#: commands/functioncmds.c:2092 +#: commands/functioncmds.c:2104 #, c-format msgid "no inline code specified" msgstr "내장 코드가 빠졌습니다" -#: commands/functioncmds.c:2138 +#: commands/functioncmds.c:2150 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "\"%s\" 프로시주얼 언어는 내장 코드 실행 기능을 지원하지 않습니다" -#: commands/functioncmds.c:2233 +#: 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개의 인자 이상을 전달할 수 없음" -#: commands/indexcmds.c:640 +#: commands/indexcmds.c:656 #, c-format msgid "must specify at least one column" msgstr "적어도 하나 이상의 칼럼을 지정해 주십시오" -#: commands/indexcmds.c:644 +#: commands/indexcmds.c:660 #, c-format msgid "cannot use more than %d columns in an index" msgstr "하나의 인덱스에서는 %d개보다 많은 칼럼을 사용할 수 없습니다" -#: commands/indexcmds.c:687 +#: commands/indexcmds.c:703 #, c-format msgid "cannot create index on relation \"%s\"" msgstr "\"%s\" 릴레이션 대상으로 인덱스를 만들 수 없음" -#: commands/indexcmds.c:713 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "\"%s\" 파티션된 테이블 대상으로 동시에 인덱스를 만들 수 없음" -#: commands/indexcmds.c:718 -#, c-format -msgid "cannot create exclusion constraints on partitioned table \"%s\"" -msgstr "\"%s\" 파티션된 테이블 대상으로 제외 제약조건을 만들 수 없음" - -#: commands/indexcmds.c:728 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "다른 세션의 임시 테이블에 인덱스를 만들 수는 없습니다" -#: commands/indexcmds.c:766 commands/tablecmds.c:784 commands/tablespace.c:1184 +#: 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:798 commands/tablecmds.c:819 commands/tablecmds.c:3409 +#: 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:831 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "사용하지 않는 \"rtree\" 방법을 \"gist\" 액세스 방법으로 대체하는 중" -#: commands/indexcmds.c:852 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "\"%s\" 인덱스 접근 방법은 고유 인덱스를 지원하지 않습니다" -#: commands/indexcmds.c:857 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "\"%s\" 인덱스 접근 방법은 포함된 칼럼을 지원하지 않습니다" -#: commands/indexcmds.c:862 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "\"%s\" 인덱스 접근 방법은 다중 열 인덱스를 지원하지 않습니다" -#: commands/indexcmds.c:867 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "\"%s\" 인덱스 접근 방법은 제외 제약 조건을 지원하지 않습니다" -#: commands/indexcmds.c:994 +#: commands/indexcmds.c:1007 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "\"%s\" 접근 방법을 사용하는 인덱스와 파티션 키가 일치하지 않습니다" -#: commands/indexcmds.c:1004 +#: commands/indexcmds.c:1017 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "파티션 키 정의에는 %s 제약조건을 지원하지 않음" -#: commands/indexcmds.c:1006 +#: commands/indexcmds.c:1019 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "%s 제약조건은 파티션 키 포함 표현식에 사용할 수 없습니다" -#: commands/indexcmds.c:1045 +#: 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:1085 #, c-format msgid "" "unique constraint on partitioned table must include all partitioning columns" msgstr "하위 테이블 용 유니크 제약조건에는 모든 파티션 칼럼이 포함되어야 함" -#: commands/indexcmds.c:1046 +#: commands/indexcmds.c:1086 #, c-format msgid "" "%s constraint on table \"%s\" lacks column \"%s\" which is part of the " @@ -9452,93 +9880,93 @@ msgstr "" "%s 제약조건(해당 테이블: \"%s\")에 기본키의 한 부분인 \"%s\" 칼럼이 빠져있습" "니다." -#: commands/indexcmds.c:1065 commands/indexcmds.c:1084 +#: commands/indexcmds.c:1105 commands/indexcmds.c:1124 #, c-format msgid "index creation on system columns is not supported" msgstr "시스템 카탈로그 테이블에 대한 인덱스 만들기는 지원하지 않습니다" -#: commands/indexcmds.c:1313 tcop/utility.c:1526 +#: commands/indexcmds.c:1354 tcop/utility.c:1515 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "\"%s\" 파티션된 테이블 대상으로 유니크 인덱스를 만들 수 없음" -#: commands/indexcmds.c:1315 tcop/utility.c:1528 +#: commands/indexcmds.c:1356 tcop/utility.c:1517 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "\"%s\" 테이블은 하위 테이블로 외부 테이블을 사용함." -#: commands/indexcmds.c:1827 +#: commands/indexcmds.c:1806 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "" "인덱스 술어(predicate)에서 사용하는 함수는 IMMUTABLE 특성이 있어야 합니다" -#: commands/indexcmds.c:1905 parser/parse_utilcmd.c:2513 -#: parser/parse_utilcmd.c:2648 +#: 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:1929 parser/parse_utilcmd.c:1812 +#: commands/indexcmds.c:1909 parser/parse_utilcmd.c:1807 #, c-format msgid "expressions are not supported in included columns" msgstr "포함된 칼럼에 쓰인 표현식을 지원하지 않음" -#: commands/indexcmds.c:1970 +#: commands/indexcmds.c:1950 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "인덱스 식(expression)에 사용하는 함수는 IMMUTABLE 특성이 있어야 합니다" -#: commands/indexcmds.c:1985 +#: commands/indexcmds.c:1965 #, c-format msgid "including column does not support a collation" msgstr "포함된 칼럼은 문자정렬규칙을 지원하지 않음" -#: commands/indexcmds.c:1989 +#: commands/indexcmds.c:1969 #, c-format msgid "including column does not support an operator class" msgstr "포함된 칼럼은 연산자 클래스를 지원하지 않음" -#: commands/indexcmds.c:1993 +#: commands/indexcmds.c:1973 #, c-format msgid "including column does not support ASC/DESC options" msgstr "포함된 칼럼은 ASC/DESC 옵션을 지원하지 않음" -#: commands/indexcmds.c:1997 +#: commands/indexcmds.c:1977 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "포함된 칼럼은 NULLS FIRST/LAST 옵션을 지원하지 않음" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2020 #, c-format msgid "could not determine which collation to use for index expression" msgstr "해당 인덱스에서 사용할 정렬규칙(collation)을 결정할 수 없습니다." -#: commands/indexcmds.c:2046 commands/tablecmds.c:17469 commands/typecmds.c:807 -#: parser/parse_expr.c:2722 parser/parse_type.c:568 parser/parse_utilcmd.c:3774 -#: utils/adt/misc.c:586 +#: 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 자료형은 collation 지원 안함" -#: commands/indexcmds.c:2111 +#: commands/indexcmds.c:2095 #, c-format msgid "operator %s is not commutative" msgstr "%s 연산자는 교환법칙이 성립하지 않습니다" -#: commands/indexcmds.c:2113 +#: commands/indexcmds.c:2097 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "" "exclude 제약조건용 인덱스를 만들 때는 교환법칙이 성립하는 연산자만 사용할 수 " "있습니다." -#: commands/indexcmds.c:2139 +#: commands/indexcmds.c:2123 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "%s 연산자는 \"%s\" 연산자 패밀리 구성원이 아닙니다." -#: commands/indexcmds.c:2142 +#: commands/indexcmds.c:2126 #, c-format msgid "" "The exclusion operator must be related to the index operator class for the " @@ -9546,25 +9974,25 @@ msgid "" msgstr "" "제외 연산자는 해당 제약 조건용 인덱스 연산자 클래스의 소속이어야 합니다." -#: commands/indexcmds.c:2177 +#: commands/indexcmds.c:2161 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "\"%s\" 접근 방법은 ASC/DESC 옵션을 지원하지 않음" -#: commands/indexcmds.c:2182 +#: 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:2228 commands/tablecmds.c:17494 -#: commands/tablecmds.c:17500 commands/typecmds.c:2301 +#: 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\" 인덱스 액세스 방법을 위한 기본 연산자 클래스(operator " "class)가 없습니다. " -#: commands/indexcmds.c:2230 +#: commands/indexcmds.c:2212 #, c-format msgid "" "You must specify an operator class for the index or define a default " @@ -9573,83 +10001,87 @@ msgstr "" "이 인덱스를 위한 연산자 클래스를 지정하거나 먼저 이 자료형을 위한 기본 연산" "자 클래스를 정의해 두어야 합니다" -#: commands/indexcmds.c:2259 commands/indexcmds.c:2267 +#: 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:2281 commands/typecmds.c:2289 +#: 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:2371 +#: commands/indexcmds.c:2353 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "%s 자료형을 위한 기본 연산자 클래스가 여러개 있습니다" -#: commands/indexcmds.c:2699 +#: commands/indexcmds.c:2681 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "알 수 없는 REINDEX 옵션: \"%s\"" -#: commands/indexcmds.c:2923 +#: commands/indexcmds.c:2913 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "\"%s\" 테이블에는 잠금 없는 재색인 작업을 할 대상 인덱스가 없음" -#: commands/indexcmds.c:2937 +#: commands/indexcmds.c:2927 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "\"%s\" 테이블에는 재색인 작업을 할 인덱스가 없습니다" -#: commands/indexcmds.c:2982 commands/indexcmds.c:3492 -#: commands/indexcmds.c:3620 +#: commands/indexcmds.c:2974 commands/indexcmds.c:3485 +#: commands/indexcmds.c:3615 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "시스템 카탈로그 테이블 대상으로 잠금 없는 인덱스를 만들 수 없음" -#: commands/indexcmds.c:3005 +#: commands/indexcmds.c:2998 #, c-format msgid "can only reindex the currently open database" msgstr "열려있는 현재 데이터베이스에서만 reindex 명령을 사용할 수 있습니다" -#: commands/indexcmds.c:3099 +#: commands/indexcmds.c:3090 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "" "시스템 카탈로그 테이블 대상으로 잠금 없는 재색인 작업을 할 수 없음, 모두 건너" "뜀" -#: commands/indexcmds.c:3132 +#: commands/indexcmds.c:3123 #, c-format msgid "cannot move system relations, skipping all" msgstr "시스템 릴레이션은 이동할 수 없습니다, 모두 건너뜀" -#: commands/indexcmds.c:3178 +#: commands/indexcmds.c:3169 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "\"%s.%s\" 파티션된 테이블 대상으로 인덱스 다시 만드는 중" -#: commands/indexcmds.c:3181 +#: commands/indexcmds.c:3172 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "\"%s.%s\" 파티션된 인덱스를 다시 만드는 중" -#: commands/indexcmds.c:3372 commands/indexcmds.c:4228 +#: commands/indexcmds.c:3365 commands/indexcmds.c:4241 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "\"%s.%s\" 테이블의 인덱스들을 다시 만들었습니다." -#: commands/indexcmds.c:3524 commands/indexcmds.c:3576 +#: commands/indexcmds.c:3517 commands/indexcmds.c:3570 #, c-format -msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" -msgstr "" -"유효하지 않은 \"%s.%s\" 인덱스는 잠금 없는 재색인 작업을 할 수 없음, 건너뜀" +msgid "skipping reindex of invalid index \"%s.%s\"" +msgstr "\"%s.%s\" 인덱스가 정상적이지 않아 인덱스 다시 만들기를 건너뜀" + +#: 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:3530 +#: commands/indexcmds.c:3524 #, c-format msgid "" "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" @@ -9657,49 +10089,49 @@ msgstr "" "\"%s.%s\" exclusion 제약조건을 대상으로 잠금 없는 재색인 작업을 할 수 없음, " "건너뜀" -#: commands/indexcmds.c:3685 +#: commands/indexcmds.c:3680 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "해당 개체에 대해서는 잠금 없는 재색인 작업을 할 수 없음" -#: commands/indexcmds.c:3706 +#: commands/indexcmds.c:3698 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "비공유 릴레이션은 \"%s\" 테이블스페이스로 이동할 수 없습니다" -#: commands/indexcmds.c:4209 commands/indexcmds.c:4221 +#: commands/indexcmds.c:4222 commands/indexcmds.c:4234 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "\"%s.%s\" 인덱스가 다시 만들어졌음" -#: commands/indexcmds.c:4211 commands/indexcmds.c:4230 +#: commands/indexcmds.c:4224 commands/indexcmds.c:4243 #, c-format msgid "%s." msgstr "%s." -#: commands/lockcmds.c:92 +#: commands/lockcmds.c:91 #, c-format msgid "cannot lock relation \"%s\"" msgstr "\"%s\" 릴레이션 잠그기 실패" -#: commands/matview.c:193 +#: commands/matview.c:206 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "" "구체화된 뷰의 자료가 정리되고 있을 때는 CONCURRENTLY 옵션을 사용할 수 없습니" "다." -#: commands/matview.c:199 gram.y:18306 +#: commands/matview.c:212 gram.y:18918 #, c-format msgid "%s and %s options cannot be used together" msgstr "%s 옵션과, %s 옵션을 함께 사용할 수 없습니다." -#: commands/matview.c:256 +#: commands/matview.c:269 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "\"%s\" 구체화된 뷰를 동시에 재갱신 할 수 없습니다." -#: commands/matview.c:259 +#: commands/matview.c:272 #, c-format msgid "" "Create a unique index with no WHERE clause on one or more columns of the " @@ -9708,7 +10140,7 @@ msgstr "" "구체화된 뷰의 하나 또는 하나 이상의 칼럼에 대한 WHERE 절 없는 고유 인덱스를 " "만드세요." -#: commands/matview.c:653 +#: commands/matview.c:666 #, c-format msgid "" "new data for materialized view \"%s\" contains duplicate rows without any " @@ -9717,7 +10149,7 @@ msgstr "" "\"%s\" 구체화된 뷰의 새 자료에 아무런 null 칼럼 없이 중복된 로우를 포함하고 " "있습니다" -#: commands/matview.c:655 +#: commands/matview.c:668 #, c-format msgid "Row: %s" msgstr "로우: %s" @@ -9783,7 +10215,7 @@ msgstr "슈퍼유저만 연산자 패밀리를 만들 수 있음" #: commands/opclasscmds.c:861 #, c-format msgid "must be superuser to alter an operator family" -msgstr "슈퍼유저만 연산자 패밀리를 변경할 수 있음" +msgstr "슈퍼유저만 연산자 패밀리를 바꿀 수 있음" #: commands/opclasscmds.c:919 #, c-format @@ -9929,35 +10361,35 @@ msgstr "연산자 번호 %d이(가) (%s,%s)에 대해 여러 번 표시됨" msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "%d(%s,%s) 연산자가 \"%s\" 연산자 패밀리에 이미 있음" -#: commands/opclasscmds.c:1566 +#: 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:1647 +#: 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:1687 +#: 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:1718 +#: commands/opclasscmds.c:1815 #, c-format msgid "" -"operator class \"%s\" for access method \"%s\" already exists in schema \"%s" -"\"" +"operator class \"%s\" for access method \"%s\" already exists in schema " +"\"%s\"" msgstr "" "\"%s\" 연산자 클래스(\"%s\" 액세스 방법을 사용하는)는 이미 \"%s\" 스키마 안" "에 있습니다" -#: commands/opclasscmds.c:1741 +#: commands/opclasscmds.c:1838 #, c-format msgid "" -"operator family \"%s\" for access method \"%s\" already exists in schema \"%s" -"\"" +"operator family \"%s\" for access method \"%s\" already exists in schema " +"\"%s\"" msgstr "\"%s\" 연산자 패밀리(접근 방법: \"%s\")가 \"%s\" 스키마에 이미 있음" #: commands/operatorcmds.c:113 commands/operatorcmds.c:121 @@ -9965,7 +10397,7 @@ msgstr "\"%s\" 연산자 패밀리(접근 방법: \"%s\")가 \"%s\" 스키마에 msgid "SETOF type not allowed for operator argument" msgstr "SETOF 형식은 연산자 인자에 허용되지 않음" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:481 +#: commands/operatorcmds.c:154 commands/operatorcmds.c:554 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "\"%s\" 연산자 속성을 처리할 수 없음" @@ -10005,53 +10437,70 @@ msgstr "%s 조인 예상 함수가 여러개 있습니다" msgid "join estimator function %s must return type %s" msgstr "%s 조인 예상 함수는 %s 자료형을 반환해야 함" -#: commands/operatorcmds.c:475 +#: commands/operatorcmds.c:388 parser/parse_oper.c:119 parser/parse_oper.c:637 +#: utils/adt/regproc.c:509 utils/adt/regproc.c:683 +#, c-format +msgid "operator does not exist: %s" +msgstr "연산자 없음: %s" + +#: commands/operatorcmds.c:396 parser/parse_oper.c:702 parser/parse_oper.c:815 +#, c-format +msgid "operator is only a shell: %s" +msgstr "연산자는 셸일 뿐임: %s" + +#: commands/operatorcmds.c:548 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "\"%s\" 연산자 속성 바꿀 수 없음" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:149 -#: commands/tablecmds.c:1616 commands/tablecmds.c:2219 -#: commands/tablecmds.c:3520 commands/tablecmds.c:6369 -#: commands/tablecmds.c:9181 commands/tablecmds.c:17062 -#: commands/tablecmds.c:17097 commands/trigger.c:323 commands/trigger.c:1339 -#: commands/trigger.c:1449 rewrite/rewriteDefine.c:275 -#: rewrite/rewriteDefine.c:786 rewrite/rewriteRemove.c:80 +#: commands/operatorcmds.c:615 commands/operatorcmds.c:622 +#: commands/operatorcmds.c:628 commands/operatorcmds.c:634 +#, c-format +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: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\" 시스템 카탈로그임" -#: commands/policy.c:172 +#: commands/policy.c:169 #, c-format msgid "ignoring specified roles other than PUBLIC" msgstr "PUBLIC 아닌 지정한 모든 롤 무시함" -#: commands/policy.c:173 +#: commands/policy.c:170 #, c-format msgid "All roles are members of the PUBLIC role." msgstr "모든 롤이 PUBLIC 롤의 소속입니다." -#: commands/policy.c:606 +#: commands/policy.c:603 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK 옵션은 SELECT나 DELETE 작업에 적용 될 수 없음" -#: commands/policy.c:615 commands/policy.c:918 +#: commands/policy.c:612 commands/policy.c:915 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "INSERT 구문에 대해서만 WITH CHECK 옵션을 허용합니다" -#: commands/policy.c:689 commands/policy.c:1141 +#: commands/policy.c:686 commands/policy.c:1138 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "\"%s\" 정책이 \"%s\" 테이블에 이미 지정되어있습니다" -#: commands/policy.c:890 commands/policy.c:1169 commands/policy.c:1240 +#: commands/policy.c:887 commands/policy.c:1166 commands/policy.c:1237 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 정책이 \"%s\" 테이블에 없음" -#: commands/policy.c:908 +#: commands/policy.c:905 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "USING 구문만 SELECT, DELETE 작업에 쓸 수 있음" @@ -10068,83 +10517,82 @@ msgstr "" "엄격한 보안 제한 작업 내에서 WITH HOLD 옵션을 사용하는 커서는 만들 수 없음" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2844 utils/adt/xml.c:3014 +#: executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "\"%s\" 이름의 커서가 없음" -#: commands/prepare.c:75 +#: commands/prepare.c:72 #, c-format msgid "invalid statement name: must not be empty" msgstr "잘못된 명령문 이름: 비어있으면 안됩니다" -#: commands/prepare.c:230 commands/prepare.c:235 +#: commands/prepare.c:227 commands/prepare.c:232 #, c-format msgid "prepared statement is not a SELECT" msgstr "준비된 명령문이 SELECT 구문이 아닙니다." -#: commands/prepare.c:295 +#: commands/prepare.c:292 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "prepared statement \"%s\"에 매개 변수 수가 틀렸습니다" -#: commands/prepare.c:297 +#: commands/prepare.c:294 #, c-format msgid "Expected %d parameters but got %d." msgstr "%d 개의 매개 변수가 요구되는데 %d 개만이 존재합니다" -#: commands/prepare.c:330 +#: commands/prepare.c:327 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "??? parameter $%d of type %s 는 expected type %s 로 강요할 수 없다" -#: commands/prepare.c:414 +#: commands/prepare.c:411 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "\"%s\" 이름의 준비된 명령문(prepared statement)이 이미 있습니다" -#: commands/prepare.c:453 +#: commands/prepare.c:450 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "\"%s\" 이름의 준비된 명령문(prepared statement) 없음" -#: commands/proclang.c:68 +#: commands/proclang.c:66 #, c-format msgid "must be superuser to create custom procedural language" msgstr "슈퍼유저만 사용자 지정 프로시저 언어를 만들 수 있음" -#: commands/publicationcmds.c:131 postmaster/postmaster.c:1208 -#: postmaster/postmaster.c:1306 storage/file/fd.c:3911 -#: utils/init/miscinit.c:1815 +#: 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\" 매개 변수 구문이 잘못 되었습니다" -#: commands/publicationcmds.c:150 +#: commands/publicationcmds.c:143 #, c-format msgid "unrecognized value for publication option \"%s\": \"%s\"" msgstr "발행용 \"%s\" 옵션에서 쓸 수 없는 값: \"%s\"" -#: commands/publicationcmds.c:164 +#: commands/publicationcmds.c:157 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "인식할 수 없는 발행 매개 변수: \"%s\"" -#: commands/publicationcmds.c:205 +#: commands/publicationcmds.c:198 #, c-format msgid "no schema has been selected for CURRENT_SCHEMA" msgstr "CURRENT_SCHEMA 용 실제 스키마 없음" -#: commands/publicationcmds.c:502 +#: commands/publicationcmds.c:495 msgid "System columns are not allowed." msgstr "시스템 칼럼은 허용하지 않음." -#: commands/publicationcmds.c:509 commands/publicationcmds.c:514 -#: commands/publicationcmds.c:531 +#: commands/publicationcmds.c:502 commands/publicationcmds.c:507 +#: commands/publicationcmds.c:524 msgid "User-defined operators are not allowed." msgstr "사용자 정의 연산자는 허용하지 않음." -#: commands/publicationcmds.c:555 +#: commands/publicationcmds.c:548 msgid "" "Only columns, constants, built-in operators, built-in data types, built-in " "collations, and immutable built-in functions are allowed." @@ -10152,39 +10600,39 @@ msgstr "" "칼럼, 상수, 내장 연산자, 내장 자료형, 내장 문자 정렬 규칙, 불변형 내장 함수" "만 허용합니다." -#: commands/publicationcmds.c:567 +#: commands/publicationcmds.c:560 msgid "User-defined types are not allowed." msgstr "사용자 정의 자료형은 허용하지 않음." -#: commands/publicationcmds.c:570 +#: commands/publicationcmds.c:563 msgid "User-defined or built-in mutable functions are not allowed." msgstr "사용자 정의나 내장 함수가 mutable 인 경우 허용하지 않음." -#: commands/publicationcmds.c:573 +#: commands/publicationcmds.c:566 msgid "User-defined collations are not allowed." msgstr "사용자 정의 문자 정렬 규칙은 허용하지 않음." -#: commands/publicationcmds.c:583 +#: commands/publicationcmds.c:576 #, c-format msgid "invalid publication WHERE expression" msgstr "잘못된 구독 WHERE 절 구문" -#: commands/publicationcmds.c:636 +#: commands/publicationcmds.c:629 #, c-format msgid "cannot use publication WHERE clause for relation \"%s\"" msgstr "\"%s\" 릴레이션용 구독 WHERE 절은 사용할 수 없음" -#: commands/publicationcmds.c:638 +#: commands/publicationcmds.c:631 #, c-format msgid "WHERE clause cannot be used for a partitioned table when %s is false." msgstr "%s 값이 false 일때, 파티션 된 테이블에서는 WHERE 절을 사용할 수 없음." -#: commands/publicationcmds.c:709 commands/publicationcmds.c:723 +#: commands/publicationcmds.c:702 commands/publicationcmds.c:716 #, c-format msgid "cannot use column list for relation \"%s.%s\" in publication \"%s\"" msgstr "\"%s.%s\" 릴레이션용 칼럼 목록을 사용할 수 없음(해당 구독: \"%s\")" -#: commands/publicationcmds.c:712 +#: commands/publicationcmds.c:705 #, c-format msgid "" "Column lists cannot be specified in publications containing FOR TABLES IN " @@ -10193,39 +10641,39 @@ msgstr "" "FOR TABLES IN SCHEMA 구문을 이용해서 구독을 만들 때는 칼럼 목록을 지정할 수 " "없습니다." -#: commands/publicationcmds.c:726 +#: commands/publicationcmds.c:719 #, c-format msgid "" "Column lists cannot be specified for partitioned tables when %s is false." msgstr "" "%s 값이 false 일때, 파티션 상위 테이블을 위한 칼럼 목록은 지정할 수 없습니다." -#: commands/publicationcmds.c:761 +#: commands/publicationcmds.c:754 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "FOR ALL TABLES 옵션의 발행을 만드려면 슈퍼유저여야만 합니다" -#: commands/publicationcmds.c:832 +#: commands/publicationcmds.c:825 #, c-format msgid "must be superuser to create FOR TABLES IN SCHEMA publication" msgstr "FOR TABLES IN SCHEMA 구문을 사용하는 구독은 슈퍼 유저만 쓸 수 있음" -#: commands/publicationcmds.c:868 +#: commands/publicationcmds.c:861 #, c-format -msgid "wal_level is insufficient to publish logical changes" -msgstr "wal_level 수준이 논리 변경 사항 발행을 하기에는 부족합니다" +msgid "\"wal_level\" is insufficient to publish logical changes" +msgstr "\"wal_level\" 수준이 논리 변경 사항 발행을 하기에는 부족합니다" -#: commands/publicationcmds.c:869 +#: commands/publicationcmds.c:862 #, c-format -msgid "Set wal_level to \"logical\" before creating subscriptions." -msgstr "wal_level 값을 \"logical\"로 바꾸고 구독을 만들세요" +msgid "Set \"wal_level\" to \"logical\" before creating subscriptions." +msgstr "\"wal_level\" 값을 \"logical\"로 바꾸고 구독을 만들세요" -#: commands/publicationcmds.c:965 commands/publicationcmds.c:973 +#: commands/publicationcmds.c:958 commands/publicationcmds.c:966 #, c-format msgid "cannot set parameter \"%s\" to false for publication \"%s\"" msgstr "\"%s\" 매개 변수 값으로 false를 지정할 수 없음, 해당 구독: \"%s\"" -#: commands/publicationcmds.c:968 +#: commands/publicationcmds.c:961 #, c-format msgid "" "The publication contains a WHERE clause for partitioned table \"%s\", which " @@ -10234,21 +10682,21 @@ msgstr "" "이 구독은 \"%s\" 파티션 상위테이블 대상 WHERE 절을 포함하고 있습니다. \"%s\" " "값이 false 때는 이 조건을 허용하지 않습니다." -#: commands/publicationcmds.c:976 +#: commands/publicationcmds.c:969 #, c-format msgid "" "The publication contains a column list for partitioned table \"%s\", which " "is not allowed when \"%s\" is false." msgstr "" -"이 구독은 \"%s\" 파티션 상위테이블 대상 칼럼 목록을 포함하고 있습니다. \"%s" -"\" 값이 false 때는 이런 사용을 허용하지 않습니다." +"이 구독은 \"%s\" 파티션 상위테이블 대상 칼럼 목록을 포함하고 있습니다. " +"\"%s\" 값이 false 때는 이런 사용을 허용하지 않습니다." -#: commands/publicationcmds.c:1299 +#: commands/publicationcmds.c:1292 #, c-format msgid "cannot add schema to publication \"%s\"" msgstr "\"%s\" 구독에 스키마는 추가 할 수 없음" -#: commands/publicationcmds.c:1301 +#: commands/publicationcmds.c:1294 #, c-format msgid "" "Schemas cannot be added if any tables that specify a column list are already " @@ -10257,79 +10705,79 @@ msgstr "" "이미 해당 발행에 한 부분으로 어떤 테이블의 칼럼 목록을 사용하고 있다면, 그 테" "이블이 있는 그 스키마는 스키마 단위로 발행에 추가 할 수 없습니다." -#: commands/publicationcmds.c:1349 +#: commands/publicationcmds.c:1342 #, c-format msgid "must be superuser to add or set schemas" msgstr "스키마 지정은 슈퍼유져여야 합니다" -#: commands/publicationcmds.c:1358 commands/publicationcmds.c:1366 +#: commands/publicationcmds.c:1351 commands/publicationcmds.c:1359 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "\"%s\" 발행은 FOR ALL TABLES 옵션으로 정의되어 있습니다." -#: commands/publicationcmds.c:1360 +#: commands/publicationcmds.c:1353 #, c-format msgid "Schemas cannot be added to or dropped from FOR ALL TABLES publications." msgstr "FOR ALL TABLES 발행에 스키마를 추가하거나 뺄 수 없습니다." -#: commands/publicationcmds.c:1368 +#: commands/publicationcmds.c:1361 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "" "FOR ALL TABLES 발행에 새 테이블을 추가하거나 한 테이블을 뺄 수 없습니다." -#: commands/publicationcmds.c:1392 commands/publicationcmds.c:1431 -#: commands/publicationcmds.c:1968 utils/cache/lsyscache.c:3592 +#: commands/publicationcmds.c:1385 commands/publicationcmds.c:1424 +#: commands/publicationcmds.c:1961 utils/cache/lsyscache.c:3634 #, c-format msgid "publication \"%s\" does not exist" msgstr "\"%s\" 이름의 발행은 없습니다" -#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1657 +#: commands/publicationcmds.c:1587 commands/publicationcmds.c:1650 #, c-format msgid "conflicting or redundant WHERE clauses for table \"%s\"" msgstr "\"%s\" 테이블 용 WHERE 절이 충돌나거나, 중복되었음" -#: commands/publicationcmds.c:1601 commands/publicationcmds.c:1669 +#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1662 #, c-format msgid "conflicting or redundant column lists for table \"%s\"" msgstr "\"%s\" 테이블 용 칼럼 목록이 충돌나거나, 중복되었음" -#: commands/publicationcmds.c:1803 +#: commands/publicationcmds.c:1796 #, c-format msgid "column list must not be specified in ALTER PUBLICATION ... DROP" msgstr "ALTER PUBLICATION ... DROP 구문에서는 칼럼 목록을 지정하지 말아야함" -#: commands/publicationcmds.c:1815 +#: commands/publicationcmds.c:1808 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "\"%s\" 릴레이션은 해당 발행에 포함되어 있지 않습니다" -#: commands/publicationcmds.c:1822 +#: commands/publicationcmds.c:1815 #, c-format msgid "cannot use a WHERE clause when removing a table from a publication" msgstr "발행에서 테이블을 뺄 때, WHERE 절은 사용할 수 없습니다." -#: commands/publicationcmds.c:1882 +#: commands/publicationcmds.c:1875 #, c-format msgid "tables from schema \"%s\" are not part of the publication" msgstr "\"%s\" 스키마의 테이블들은 해당 발행에 포함되어 있지 않습니다" -#: commands/publicationcmds.c:1925 commands/publicationcmds.c:1932 +#: commands/publicationcmds.c:1918 commands/publicationcmds.c:1925 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "\"%s\" 발행의 소유주를 바꿀 권한이 없습니다" -#: commands/publicationcmds.c:1927 +#: commands/publicationcmds.c:1920 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "FOR ALL TABLES 옵션용 발행의 소유주는 슈퍼유저여야만 합니다" -#: commands/publicationcmds.c:1934 +#: commands/publicationcmds.c:1927 #, c-format msgid "The owner of a FOR TABLES IN SCHEMA publication must be a superuser." msgstr "FOR ALL TABLES IN SCHEMA 구독의 소유주는 슈퍼유저여야만 합니다" -#: commands/publicationcmds.c:2000 +#: commands/publicationcmds.c:1993 #, c-format msgid "publication with OID %u does not exist" msgstr "OID %u 발행 없음" @@ -10376,158 +10824,158 @@ msgstr "이 객체 형태는 보안 라벨을 지원하지 않음" msgid "cannot set security label on relation \"%s\"" msgstr "\"%s\" 릴레이션에 보안 라벨을 지정할 수 없음" -#: commands/sequence.c:754 +#: commands/sequence.c:748 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%lld)" msgstr "nextval: \"%s\" 시퀀스의 최대값(%lld)이 되었습니다" -#: commands/sequence.c:773 +#: commands/sequence.c:767 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" msgstr "nextval: \"%s\" 시퀀스의 최소값(%lld)이 되었습니다" -#: commands/sequence.c:891 +#: commands/sequence.c:886 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "\"%s\" 시퀀스의 currval 값이 현재 세션에 지정되어 있지 않습니다" -#: commands/sequence.c:910 commands/sequence.c:916 +#: commands/sequence.c:905 commands/sequence.c:911 #, c-format msgid "lastval is not yet defined in this session" msgstr "이 세션에는 lastval 값이 아직까지 지정되지 않았습니다" -#: commands/sequence.c:996 +#: 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:1365 +#: commands/sequence.c:1357 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "잘못된 SEQUENCE NAME 시퀀스 옵션" -#: commands/sequence.c:1391 +#: commands/sequence.c:1383 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "식별 칼럼에 쓸 자료형은 smallint, integer, bigint 자료형만 쓸 수 있음" -#: commands/sequence.c:1392 +#: commands/sequence.c:1384 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "시퀀스에 쓸 자료형은 smallint, integer, bigint 자료형만 쓸 수 있음" -#: commands/sequence.c:1426 +#: commands/sequence.c:1418 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT 값은 0(zero)이 될 수 없습니다" -#: commands/sequence.c:1474 +#: 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:1506 +#: commands/sequence.c:1498 #, c-format msgid "MINVALUE (%lld) is out of range for sequence data type %s" msgstr "MAXVALUE (%lld) 값이 허용 범위 밖임, 해당 시퀀스 자료형: %s" -#: commands/sequence.c:1514 +#: commands/sequence.c:1506 #, c-format msgid "MINVALUE (%lld) must be less than MAXVALUE (%lld)" msgstr "MINVALUE (%lld) 값은 MAXVALUE (%lld) 값보다 작아야 합니다" -#: commands/sequence.c:1535 +#: commands/sequence.c:1527 #, c-format msgid "START value (%lld) cannot be less than MINVALUE (%lld)" msgstr "START 값(%lld)은 MINVALUE(%lld)보다 작을 수 없음" -#: commands/sequence.c:1541 +#: commands/sequence.c:1533 #, c-format msgid "START value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "START 값(%lld)은 MAXVALUE(%lld)보다 클 수 없음" -#: commands/sequence.c:1565 +#: commands/sequence.c:1557 #, c-format msgid "RESTART value (%lld) cannot be less than MINVALUE (%lld)" msgstr "RESTART 값(%lld)은 MINVALUE(%lld)보다 작을 수 없음" -#: commands/sequence.c:1571 +#: commands/sequence.c:1563 #, c-format msgid "RESTART value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "RESTART 값(%lld)은 MAXVALUE(%lld)보다 클 수 없음" -#: commands/sequence.c:1582 +#: commands/sequence.c:1574 #, c-format msgid "CACHE (%lld) must be greater than zero" msgstr "CACHE (%lld) 값은 0(zero)보다 커야 합니다" -#: commands/sequence.c:1618 +#: commands/sequence.c:1610 #, c-format msgid "invalid OWNED BY option" msgstr "잘못된 OWNED BY 옵션" -#: commands/sequence.c:1619 +#: 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:1644 +#: commands/sequence.c:1636 #, c-format msgid "sequence cannot be owned by relation \"%s\"" msgstr "\"%s\" 릴레이션의 소속 시퀀스가 될 수 없음" -#: commands/sequence.c:1652 +#: commands/sequence.c:1644 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "시퀀스 및 이 시퀀스가 연결된 테이블의 소유주가 같아야 함" -#: commands/sequence.c:1656 +#: commands/sequence.c:1648 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "시퀀스 및 이 시퀀스가 연결된 테이블이 같은 스키마에 있어야 함" -#: commands/sequence.c:1678 +#: commands/sequence.c:1670 #, c-format msgid "cannot change ownership of identity sequence" msgstr "식별 시퀀스의 소유주는 바꿀 수 없음" -#: commands/sequence.c:1679 commands/tablecmds.c:13891 -#: commands/tablecmds.c:16488 +#: 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\" 테이블에 종속되어 있습니다." -#: commands/statscmds.c:109 commands/statscmds.c:118 tcop/utility.c:1887 +#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1883 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "CREATE STATISTICS 명령에서는 하나의 릴레이션만 사용할 수 있음" -#: commands/statscmds.c:136 +#: commands/statscmds.c:133 #, c-format msgid "cannot define statistics for relation \"%s\"" msgstr "\"%s\" 릴레이션용 통계정보를 정의할 수 없음" -#: commands/statscmds.c:190 +#: commands/statscmds.c:187 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 통계정보 개체가 이미 있습니다, 건너뜀" -#: commands/statscmds.c:198 +#: commands/statscmds.c:195 #, c-format msgid "statistics object \"%s\" already exists" msgstr "\"%s\" 이름의 통계정보 개체가 이미 있음" -#: commands/statscmds.c:209 +#: commands/statscmds.c:206 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "통계정보 개체에서는 %d개보다 많은 칼럼을 사용할 수 없습니다" -#: commands/statscmds.c:250 commands/statscmds.c:273 commands/statscmds.c:307 +#: commands/statscmds.c:247 commands/statscmds.c:270 commands/statscmds.c:304 #, c-format msgid "statistics creation on system columns is not supported" msgstr "시스템 칼럼에 대한 통계정보 개체 만들기는 지원하지 않습니다" -#: commands/statscmds.c:257 commands/statscmds.c:280 +#: commands/statscmds.c:254 commands/statscmds.c:277 #, c-format msgid "" "column \"%s\" cannot be used in statistics because its type %s has no " @@ -10536,7 +10984,7 @@ msgstr "" "\"%s\" 칼럼은 사용자 통계정보 수집이 불가능합니다. %s 자료형은 기본 btree 연" "산자 클래스를 정의하지 않았습니다" -#: commands/statscmds.c:324 +#: commands/statscmds.c:321 #, c-format msgid "" "expression cannot be used in multivariate statistics because its type %s has " @@ -10545,7 +10993,7 @@ msgstr "" "%s 자료형에는 기본 btree 연산자 클래스가 없어서, 표현식은 다변적인 통계 정보" "에서 사용될 수 없음" -#: commands/statscmds.c:345 +#: commands/statscmds.c:342 #, c-format msgid "" "when building statistics on a single expression, statistics kinds may not be " @@ -10553,108 +11001,109 @@ msgid "" msgstr "" "단일 표현식으로 통계 정보를 만들 때, 통계 정보 종류는 지정할 수 없습니다." -#: commands/statscmds.c:374 +#: commands/statscmds.c:371 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "알 수 없는 통계정보 종류 \"%s\"" -#: commands/statscmds.c:403 +#: commands/statscmds.c:400 #, c-format msgid "extended statistics require at least 2 columns" msgstr "확장된 통계정보는 두 개 이상의 칼럼이 필요합니다." -#: commands/statscmds.c:421 +#: commands/statscmds.c:418 #, c-format msgid "duplicate column name in statistics definition" msgstr "통계정보 정의에서 사용하는 칼럼이 중복되었습니다" -#: commands/statscmds.c:456 +#: commands/statscmds.c:453 #, c-format msgid "duplicate expression in statistics definition" msgstr "통계정보 정의에서 표현식이 중복되었습니다" -#: commands/statscmds.c:619 commands/tablecmds.c:8180 +#: commands/statscmds.c:628 commands/tablecmds.c:8620 #, c-format msgid "statistics target %d is too low" msgstr "대상 통계값(%d)이 너무 낮습니다" -#: commands/statscmds.c:627 commands/tablecmds.c:8188 +#: commands/statscmds.c:636 commands/tablecmds.c:8628 #, c-format msgid "lowering statistics target to %d" msgstr "%d 값으로 대상 통계값을 낮춥니다" -#: commands/statscmds.c:650 +#: commands/statscmds.c:660 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "\"%s.%s\" 통계정보 개체 없음, 무시함" -#: commands/subscriptioncmds.c:271 commands/subscriptioncmds.c:359 +#: commands/subscriptioncmds.c:275 commands/subscriptioncmds.c:372 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "알 수 없는 구독 매개 변수: \"%s\"" -#: commands/subscriptioncmds.c:327 replication/pgoutput/pgoutput.c:398 +#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:404 #, c-format msgid "unrecognized origin value: \"%s\"" msgstr "알 수 없는 오리진 값: \"%s\"" -#: commands/subscriptioncmds.c:350 +#: commands/subscriptioncmds.c:363 #, c-format msgid "invalid WAL location (LSN): %s" msgstr "잘못된 WAL 위치 (LSN): %s" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:374 commands/subscriptioncmds.c:381 -#: commands/subscriptioncmds.c:388 commands/subscriptioncmds.c:410 -#: commands/subscriptioncmds.c:426 +#: commands/subscriptioncmds.c:387 commands/subscriptioncmds.c:394 +#: commands/subscriptioncmds.c:401 commands/subscriptioncmds.c:423 +#: commands/subscriptioncmds.c:439 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s 옵션과 %s 옵션은 함께 사용할 수 없음" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:416 commands/subscriptioncmds.c:432 +#: commands/subscriptioncmds.c:429 commands/subscriptioncmds.c:445 #, c-format msgid "subscription with %s must also set %s" msgstr "%s 구독하려면, %s 설정이 필요함" -#: commands/subscriptioncmds.c:494 +#: commands/subscriptioncmds.c:506 #, c-format msgid "could not receive list of publications from the publisher: %s" msgstr "발행자에게서 발행 목록을 받을 수 없음: %s" -#: commands/subscriptioncmds.c:526 +#: commands/subscriptioncmds.c:538 #, c-format msgid "publication %s does not exist on the publisher" msgid_plural "publications %s do not exist on the publisher" msgstr[0] "해당 발행자에게는 \"%s\" 이름의 발행은 없습니다" -#: commands/subscriptioncmds.c:614 +#: commands/subscriptioncmds.c:626 #, c-format msgid "permission denied to create subscription" msgstr "구독을 만들기 위한 권한 없음" -#: commands/subscriptioncmds.c:615 +#: commands/subscriptioncmds.c:627 #, c-format msgid "Only roles with privileges of the \"%s\" role may create subscriptions." msgstr "\"%s\" 롤이 부여된 사용자만 구독을 만들 수 있습니다." -#: commands/subscriptioncmds.c:745 commands/subscriptioncmds.c:878 -#: replication/logical/tablesync.c:1309 replication/logical/worker.c:4616 +#: commands/subscriptioncmds.c:758 commands/subscriptioncmds.c:891 +#: commands/subscriptioncmds.c:1524 replication/logical/tablesync.c:1345 +#: replication/logical/worker.c:4503 #, c-format msgid "could not connect to the publisher: %s" msgstr "발행 서버에 연결 할 수 없음: %s" -#: commands/subscriptioncmds.c:816 +#: commands/subscriptioncmds.c:829 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "\"%s\" 이름의 복제 슬롯이 없습니다" -#: commands/subscriptioncmds.c:828 +#: commands/subscriptioncmds.c:841 #, c-format msgid "subscription was created, but is not connected" msgstr "구독을 만들었지만, 발행 서버로 접속은 안했습니다." -#: commands/subscriptioncmds.c:829 +#: commands/subscriptioncmds.c:842 #, c-format msgid "" "To initiate replication, you must manually create the replication slot, " @@ -10663,23 +11112,29 @@ msgstr "" "복제 초기화 작업은 먼저 수동으로 복제 슬롯을 만들고, 구독을 활성화하고, 해당 " "구독을 새로고침 하는 순서로 진행합니다." -#: commands/subscriptioncmds.c:1096 commands/subscriptioncmds.c:1502 -#: commands/subscriptioncmds.c:1885 utils/cache/lsyscache.c:3642 +#: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1590 +#: commands/subscriptioncmds.c:1973 utils/cache/lsyscache.c:3684 #, c-format msgid "subscription \"%s\" does not exist" msgstr "\"%s\" 이름의 구독은 없습니다." -#: commands/subscriptioncmds.c:1152 +#: commands/subscriptioncmds.c:1166 commands/subscriptioncmds.c:1245 #, c-format msgid "cannot set %s for enabled subscription" msgstr "구독 활성화를 위해서는 %s 설정은 할 수 없음" -#: commands/subscriptioncmds.c:1227 +#: commands/subscriptioncmds.c:1233 +#, c-format +msgid "" +"cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "슬롯 이름 없이는 구독에 \"%s\" 옵션을 지정할 수 없음" + +#: commands/subscriptioncmds.c:1279 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "슬롯 이름 없이는 구독을 활성화 할 수 없음" -#: commands/subscriptioncmds.c:1271 commands/subscriptioncmds.c:1322 +#: commands/subscriptioncmds.c:1323 commands/subscriptioncmds.c:1374 #, c-format msgid "" "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" @@ -10687,14 +11142,14 @@ msgstr "" "비활성화 상태인 구독에 대해서는 ALTER SUBSCRIPTION 명령으로 갱신할 수 없습니" "다" -#: commands/subscriptioncmds.c:1272 +#: commands/subscriptioncmds.c:1324 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "" "ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false) 명령을 사용" "하세요." -#: commands/subscriptioncmds.c:1281 commands/subscriptioncmds.c:1336 +#: commands/subscriptioncmds.c:1333 commands/subscriptioncmds.c:1388 #, c-format msgid "" "ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase " @@ -10703,7 +11158,7 @@ msgstr "" "two_phase 값이 true인 상태에서는 ALTER SUBSCRIPTION 명령에서 refresh나 " "copy_data 옵션을 사용할 수 없습니다." -#: commands/subscriptioncmds.c:1282 +#: commands/subscriptioncmds.c:1334 #, c-format msgid "" "Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with " @@ -10713,13 +11168,7 @@ msgstr "" "copy_data = false 구문을 추가하거나 DROP/CREATE SUBSCRIPTION 작업을 하세요." #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1324 -#, c-format -msgid "Use %s instead." -msgstr "대신에 %s 명령을 사용하십시오." - -#. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1338 +#: commands/subscriptioncmds.c:1390 #, c-format msgid "" "Use %s with refresh = false, or with copy_data = false, or use DROP/CREATE " @@ -10728,7 +11177,7 @@ msgstr "" "%s 명령에서 refresh = false 또는 copy_data = false 옵션을 추가하거나, DROP/" "CREATE SUBSCRIPTION 작업을 하세요." -#: commands/subscriptioncmds.c:1360 +#: commands/subscriptioncmds.c:1412 #, c-format msgid "" "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" @@ -10736,7 +11185,7 @@ msgstr "" "비활성화 상태인 구독에 대해서는 ALTER SUBSCRIPTION ... REFRESH 명령을 허용하" "지 않습니다." -#: commands/subscriptioncmds.c:1385 +#: commands/subscriptioncmds.c:1437 #, c-format msgid "" "ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase " @@ -10745,7 +11194,7 @@ msgstr "" "two_phase 값이 true인 상태에서는 ALTER SUBSCRIPTION 명령에서 copy_data 옵션" "을 사용할 수 없습니다." -#: commands/subscriptioncmds.c:1386 +#: commands/subscriptioncmds.c:1438 #, c-format msgid "" "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/" @@ -10754,38 +11203,38 @@ msgstr "" "ALTER SUBSCRIPTION ... REFRESH 다음 copy_data = false 구문을 추가하거나 DROP/" "CREATE SUBSCRIPTION 작업을 하세요." -#: commands/subscriptioncmds.c:1421 +#: commands/subscriptioncmds.c:1473 #, c-format msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X" msgstr "" "WAL 위치 (LSN %X/%X)를 건너뛰려면, 그 값이 원본 LSN %X/%X 보다 커야합니다" -#: commands/subscriptioncmds.c:1506 +#: commands/subscriptioncmds.c:1594 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "\"%s\" 구독 없음, 건너뜀" -#: commands/subscriptioncmds.c:1775 +#: commands/subscriptioncmds.c:1863 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "발행에서 \"%s\" 복제 슬롯을 삭제했음" -#: commands/subscriptioncmds.c:1784 commands/subscriptioncmds.c:1792 +#: commands/subscriptioncmds.c:1872 commands/subscriptioncmds.c:1880 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "발행용 \"%s\" 복제 슬롯을 삭제 할 수 없음: %s" -#: commands/subscriptioncmds.c:1917 +#: commands/subscriptioncmds.c:2005 #, c-format msgid "subscription with OID %u does not exist" msgstr "OID %u 구독 없음" -#: commands/subscriptioncmds.c:1988 commands/subscriptioncmds.c:2113 +#: commands/subscriptioncmds.c:2076 commands/subscriptioncmds.c:2201 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "해당 발행자로부터 복제 테이블 목록을 구할 수 없음: %s" -#: commands/subscriptioncmds.c:2024 +#: commands/subscriptioncmds.c:2112 #, c-format msgid "" "subscription \"%s\" requested copy_data with origin = NONE but might copy " @@ -10794,7 +11243,7 @@ msgstr "" "\"%s\" 구독이 copy_data 옵션과 origin = NONE 설정을 요구했지만, copy 자료가 " "다른 오리진 것입니다." -#: commands/subscriptioncmds.c:2026 +#: commands/subscriptioncmds.c:2114 #, c-format msgid "" "The subscription being created subscribes to a publication (%s) that " @@ -10803,8 +11252,9 @@ msgid_plural "" "The subscription being created subscribes to publications (%s) that contain " "tables that are written to by other subscriptions." msgstr[0] "" +"만들어질 구독은 다른 구독에 의해 쓰여진 테이블이 포함된 발행(%s)을 구독합니다." -#: commands/subscriptioncmds.c:2029 +#: commands/subscriptioncmds.c:2117 #, c-format msgid "" "Verify that initial data copied from the publisher tables did not come from " @@ -10812,8 +11262,8 @@ msgid "" msgstr "" "복사된 초기 자료가 해당 발행의 다른 오리진에서 복사되었는지 확인하세요." -#: commands/subscriptioncmds.c:2135 replication/logical/tablesync.c:876 -#: replication/pgoutput/pgoutput.c:1115 +#: 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 " @@ -10822,15 +11272,15 @@ msgstr "" "서로 다른 발행에서 \"%s.%s\" 테이블에 대한 서로 다른 칼럼 목록을 사용할 수 없" "음." -#: commands/subscriptioncmds.c:2185 +#: commands/subscriptioncmds.c:2273 #, c-format msgid "" -"could not connect to publisher when attempting to drop replication slot \"%s" -"\": %s" +"could not connect to publisher when attempting to drop replication slot " +"\"%s\": %s" msgstr "\"%s\" 복제 슬롯을 삭제하는 중에는 발행 서버로 접속할 수 없음: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:2188 +#: commands/subscriptioncmds.c:2276 #, c-format msgid "" "Use %s to disable the subscription, and then use %s to disassociate it from " @@ -10839,189 +11289,194 @@ msgstr "" "구독을 중지하려면 %s 명령을 한 뒤, 슬롯 관계를 끊기 위해 %s 명령을 사용하세" "요." -#: commands/subscriptioncmds.c:2219 +#: commands/subscriptioncmds.c:2307 #, c-format msgid "publication name \"%s\" used more than once" msgstr "\"%s\" 발행 이름이 여러 번 사용 됨" -#: commands/subscriptioncmds.c:2263 +#: commands/subscriptioncmds.c:2351 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "\"%s\" 이름의 발행이 \"%s\" 구독 안에 이미 있습니다" -#: commands/subscriptioncmds.c:2277 +#: commands/subscriptioncmds.c:2365 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "\"%s\" 발행이 \"%s\" 구독 안에 없습니다" -#: commands/subscriptioncmds.c:2288 +#: commands/subscriptioncmds.c:2376 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "한 구독안에 있는 모든 발행은 지울 수 없음" -#: commands/subscriptioncmds.c:2345 +#: commands/subscriptioncmds.c:2433 #, c-format msgid "%s requires a Boolean value or \"parallel\"" msgstr "%s 값은 불리언 값 또는 \"parallel\" 이어야 합니다." -#: commands/tablecmds.c:246 commands/tablecmds.c:288 +#: commands/tablecmds.c:255 commands/tablecmds.c:297 #, c-format msgid "table \"%s\" does not exist" msgstr "\"%s\" 테이블 없음" -#: commands/tablecmds.c:247 commands/tablecmds.c:289 +#: commands/tablecmds.c:256 commands/tablecmds.c:298 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "\"%s\" 테이블 없음, 무시함" -#: commands/tablecmds.c:249 commands/tablecmds.c:291 +#: commands/tablecmds.c:258 commands/tablecmds.c:300 msgid "Use DROP TABLE to remove a table." msgstr "테이블을 삭제하려면, DROP TABLE 명령을 사용하세요." -#: commands/tablecmds.c:252 +#: commands/tablecmds.c:261 #, c-format msgid "sequence \"%s\" does not exist" msgstr "\"%s\" 시퀀스 없음" -#: commands/tablecmds.c:253 +#: commands/tablecmds.c:262 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "\"%s\" 시퀀스 없음, 무시함" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:264 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "시퀀스를 삭제하려면 DROP SEQUENCE 명령을 사용하세요." -#: commands/tablecmds.c:258 +#: commands/tablecmds.c:267 #, c-format msgid "view \"%s\" does not exist" msgstr "\"%s\" 뷰(view) 없음" -#: commands/tablecmds.c:259 +#: commands/tablecmds.c:268 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "\"%s\" 뷰(view) 없음, 무시함" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:270 msgid "Use DROP VIEW to remove a view." msgstr "뷰를 삭제하려면, DROP VIEW 명령을 사용하세요." -#: commands/tablecmds.c:264 +#: commands/tablecmds.c:273 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "\"%s\" 이름의 구체화된 뷰가 없음" -#: commands/tablecmds.c:265 +#: commands/tablecmds.c:274 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "\"%s\" 구체화된 뷰 없음, 건너뜀" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:276 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "구체화된 뷰를 삭제하려면, DROP MATERIALIZED VIEW 명령을 사용하세요." -#: commands/tablecmds.c:270 commands/tablecmds.c:294 commands/tablecmds.c:18978 -#: parser/parse_utilcmd.c:2245 +#: commands/tablecmds.c:279 commands/tablecmds.c:303 commands/tablecmds.c:19783 +#: parser/parse_utilcmd.c:2251 #, c-format msgid "index \"%s\" does not exist" msgstr "\"%s\" 인덱스 없음" -#: commands/tablecmds.c:271 commands/tablecmds.c:295 +#: commands/tablecmds.c:280 commands/tablecmds.c:304 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "\"%s\" 인덱스 없음, 무시함" -#: commands/tablecmds.c:273 commands/tablecmds.c:297 +#: commands/tablecmds.c:282 commands/tablecmds.c:306 msgid "Use DROP INDEX to remove an index." msgstr "인덱스를 삭제하려면, DROP INDEX 명령을 사용하세요." -#: commands/tablecmds.c:278 +#: commands/tablecmds.c:287 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" 개체는 자료형이 아님" -#: commands/tablecmds.c:279 +#: commands/tablecmds.c:288 msgid "Use DROP TYPE to remove a type." msgstr "자료형을 삭제하려면 DROP TYPE 명령을 사용하세요." -#: commands/tablecmds.c:282 commands/tablecmds.c:13730 -#: commands/tablecmds.c:16193 +#: commands/tablecmds.c:291 commands/tablecmds.c:14325 +#: commands/tablecmds.c:16886 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "\"%s\" 외부 테이블 없음" -#: commands/tablecmds.c:283 +#: commands/tablecmds.c:292 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "\"%s\" 외부 테이블 없음, 건너뜀" -#: commands/tablecmds.c:285 +#: commands/tablecmds.c:294 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "외부 테이블을 삭제하려면, DROP FOREIGN TABLE 명령을 사용하세요." -#: commands/tablecmds.c:700 +#: commands/tablecmds.c:734 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT 옵션은 임시 테이블에서만 사용될 수 있습니다" -#: commands/tablecmds.c:731 +#: commands/tablecmds.c:765 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "보안 제한 작업 내에서 임시 테이블을 만들 수 없음" -#: commands/tablecmds.c:767 commands/tablecmds.c:15038 +#: 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:955 -#, c-format -msgid "" -"specifying a table access method is not supported on a partitioned table" -msgstr "테이블 접근 방법은 파티션된 테이블에서는 사용할 수 없음" - -#: commands/tablecmds.c:1048 +#: commands/tablecmds.c:1067 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" 파티션 된 테이블 아님" -#: commands/tablecmds.c:1142 +#: commands/tablecmds.c:1161 #, c-format msgid "cannot partition using more than %d columns" msgstr "%d개보다 많은 칼럼을 이용해서 파티션할 수 없음" -#: commands/tablecmds.c:1198 +#: commands/tablecmds.c:1217 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "\"%s\" 파티션된 테이블의 외부 파티션을 만들 수 없음" -#: commands/tablecmds.c:1200 +#: commands/tablecmds.c:1219 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "\"%s\" 테이블은 유니크 인덱스를 포함 하고 있음." -#: commands/tablecmds.c:1365 +#: commands/tablecmds.c:1338 commands/tablecmds.c:13341 +#, c-format +msgid "too many array dimensions" +msgstr "너무 많은 배열 차수" + +#: 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:1489 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY 명령은 하나의 인덱스만 지울 수 있습니다" -#: commands/tablecmds.c:1369 +#: commands/tablecmds.c:1493 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY 명령에서는 CASCADE 옵션을 사용할 수 없음" -#: commands/tablecmds.c:1473 +#: commands/tablecmds.c:1597 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "" "\"%s\" 파티션된 테이블의 인덱스에 대해서는 CONCURRENTLY 옵션을 사용할 수 없음" -#: commands/tablecmds.c:1761 +#: commands/tablecmds.c:1885 #, c-format msgid "cannot truncate only a partitioned table" msgstr "파티션 된 테이블만 truncate 할 수 없음" -#: commands/tablecmds.c:1762 +#: commands/tablecmds.c:1886 #, c-format msgid "" "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions " @@ -11030,38 +11485,38 @@ msgstr "" "ONLY 옵션을 빼고 사용하거나, 하위 파티션 테이블을 대상으로 직접 TRUNCATE " "ONLY 명령을 사용하세요." -#: commands/tablecmds.c:1835 +#: commands/tablecmds.c:1959 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "\"%s\" 개체의 자료도 함께 삭제됨" -#: commands/tablecmds.c:2199 +#: commands/tablecmds.c:2320 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "\"%s\" 외부 테이블에 자료를 비울 수 없음" -#: commands/tablecmds.c:2256 +#: commands/tablecmds.c:2377 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "다른 세션의 임시 테이블 자료는 비울(truncate) 수 없습니다" -#: commands/tablecmds.c:2488 commands/tablecmds.c:14935 +#: commands/tablecmds.c:2606 commands/tablecmds.c:15642 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "\"%s\" 파티션 된 테이블로부터 상속할 수 없습니다" -#: commands/tablecmds.c:2493 +#: commands/tablecmds.c:2611 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "\"%s\" 파티션 테이블입니다, 그래서 상속 대상이 될 수 없습니다" -#: commands/tablecmds.c:2501 parser/parse_utilcmd.c:2475 -#: parser/parse_utilcmd.c:2617 +#: 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\" 릴레이션(relation)은 테이블도, 외부 테이블도 아닙니다" -#: commands/tablecmds.c:2513 +#: commands/tablecmds.c:2631 #, c-format msgid "" "cannot create a temporary relation as partition of permanent relation \"%s\"" @@ -11069,74 +11524,25 @@ msgstr "" "\"%s\" 테이블은 일반 테이블입니다. 임시 테이블을 이것의 파티션 테이블로 만들 " "수 없습니다" -#: commands/tablecmds.c:2522 commands/tablecmds.c:14914 +#: commands/tablecmds.c:2640 commands/tablecmds.c:15621 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "\"%s\" 임시 테이블입니다, 그래서 상속 대상이 될 수 없습니다" -#: commands/tablecmds.c:2532 commands/tablecmds.c:14922 +#: commands/tablecmds.c:2650 commands/tablecmds.c:15629 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "다른 세션의 임시 테이블입니다, 그래서 상속 대상이 될 수 없습니다" -#: commands/tablecmds.c:2585 -#, c-format -msgid "merging multiple inherited definitions of column \"%s\"" -msgstr "\"%s\" 칼럼이 중복되어 상속됩니다." - -#: commands/tablecmds.c:2597 -#, c-format -msgid "inherited column \"%s\" has a type conflict" -msgstr "상위 테이블에서 지정한 \"%s\" 칼럼의 자료형들이 일치하지 않습니다" - -#: commands/tablecmds.c:2599 commands/tablecmds.c:2628 -#: commands/tablecmds.c:2647 commands/tablecmds.c:2919 -#: commands/tablecmds.c:2955 commands/tablecmds.c:2971 -#: 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 -#, c-format -msgid "%s versus %s" -msgstr "%s 형과 %s 형" - -#: commands/tablecmds.c:2612 -#, c-format -msgid "inherited column \"%s\" has a collation conflict" -msgstr "상속 받은 \"%s\" 칼럼의 정렬규칙에서 충돌합니다." - -#: commands/tablecmds.c:2614 commands/tablecmds.c:2935 -#: commands/tablecmds.c:6849 -#, c-format -msgid "\"%s\" versus \"%s\"" -msgstr "\"%s\" 형과 \"%s\" 형" - -#: commands/tablecmds.c:2626 -#, c-format -msgid "inherited column \"%s\" has a storage parameter conflict" -msgstr "상속 받은 \"%s\" 칼럼의 스토리지 설정값에서 충돌합니다" - -#: commands/tablecmds.c:2645 commands/tablecmds.c:2969 -#, c-format -msgid "column \"%s\" has a compression method conflict" -msgstr "\"%s\" 칼럼의 압축 방법이 충돌합니다" - -#: commands/tablecmds.c:2661 -#, c-format -msgid "inherited column \"%s\" has a generation conflict" -msgstr "상속된 \"%s\" 칼럼에 대한 생성 충돌 발생" - -#: commands/tablecmds.c:2767 commands/tablecmds.c:2822 -#: commands/tablecmds.c:12456 parser/parse_utilcmd.c:1298 -#: parser/parse_utilcmd.c:1341 parser/parse_utilcmd.c:1740 -#: parser/parse_utilcmd.c:1848 +#: 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:2768 parser/parse_utilcmd.c:1299 +#: commands/tablecmds.c:2792 parser/parse_utilcmd.c:1266 #, c-format msgid "" "Generation expression for column \"%s\" contains a whole-row reference to " @@ -11145,85 +11551,55 @@ msgstr "" "\"%s\" 칼럼용 미리 계산된 칼럼 생성식에 \"%s\" 테이블 전체 로우 참조가 있습니" "다" -#: commands/tablecmds.c:2823 parser/parse_utilcmd.c:1342 +#: commands/tablecmds.c:2846 parser/parse_utilcmd.c:1309 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "\"%s\" 제약조건에 \"%s\" 테이블 전체 로우 참조가 있습니다" -#: commands/tablecmds.c:2901 -#, c-format -msgid "merging column \"%s\" with inherited definition" -msgstr "\"%s\" 칼럼을 상속된 정의와 병합하는 중" - -#: commands/tablecmds.c:2905 -#, c-format -msgid "moving and merging column \"%s\" with inherited definition" -msgstr "\"%s\" 칼럼을 상속된 정의와 이동, 병합하는 중" - -#: commands/tablecmds.c:2906 -#, c-format -msgid "User-specified column moved to the position of the inherited column." -msgstr "사용자 지정 칼럼이 상속된 칼럼의 위치로 이동되었습니다" - -#: commands/tablecmds.c:2917 -#, c-format -msgid "column \"%s\" has a type conflict" -msgstr "\"%s\" 칼럼의 자료형이 충돌합니다" - -#: commands/tablecmds.c:2933 -#, c-format -msgid "column \"%s\" has a collation conflict" -msgstr "\"%s\" 칼럼의 정렬규칙이 충돌합니다" - -#: commands/tablecmds.c:2953 -#, c-format -msgid "column \"%s\" has a storage parameter conflict" -msgstr "\"%s\" 칼럼의 스토리지 설정값이 충돌합니다" - -#: commands/tablecmds.c:2999 commands/tablecmds.c:3086 +#: 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:3004 commands/tablecmds.c:3091 +#: 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:3012 commands/tablecmds.c:3099 +#: commands/tablecmds.c:2969 commands/tablecmds.c:3240 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "" "\"%s\" 칼럼은 상속 받은 칼럼임. 미리 계산된 칼럼의 생성식을 사용할 수 없음" -#: commands/tablecmds.c:3014 commands/tablecmds.c:3101 +#: 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:3147 +#: commands/tablecmds.c:3017 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "상속 받는 \"%s\" 칼럼에 지정된 미리 계산된 생성식이 충돌합니다" -#: commands/tablecmds.c:3149 +#: commands/tablecmds.c:3019 #, c-format msgid "To resolve the conflict, specify a generation expression explicitly." msgstr "이 충돌을 피하려면, 명시적으로 미리 계산된 생성식을 지정하십시오." -#: commands/tablecmds.c:3153 +#: commands/tablecmds.c:3023 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "상속 받는 \"%s\" 칼럼의 default 값이 충돌함" -#: commands/tablecmds.c:3155 +#: commands/tablecmds.c:3025 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "이 충돌을 피하려면, default 값을 바르게 지정하십시오." -#: commands/tablecmds.c:3205 +#: commands/tablecmds.c:3080 #, c-format msgid "" "check constraint name \"%s\" appears multiple times but with different " @@ -11231,109 +11607,188 @@ msgid "" msgstr "" "\"%s\" 체크 제약 조건 이름이 여러 번 나타나지만, 각각 다른 식으로 되어있음" -#: commands/tablecmds.c:3418 +#: commands/tablecmds.c:3131 #, c-format -msgid "cannot move temporary tables of other sessions" -msgstr "다른 세션의 임시 테이블들은 이동할 수 없습니다" +msgid "merging column \"%s\" with inherited definition" +msgstr "\"%s\" 칼럼을 상속된 정의와 병합하는 중" -#: commands/tablecmds.c:3488 +#: commands/tablecmds.c:3135 #, c-format -msgid "cannot rename column of typed table" -msgstr "칼럼 이름을 바꿀 수 없음" +msgid "moving and merging column \"%s\" with inherited definition" +msgstr "\"%s\" 칼럼을 상속된 정의와 이동, 병합하는 중" -#: commands/tablecmds.c:3507 +#: commands/tablecmds.c:3136 #, c-format -msgid "cannot rename columns of relation \"%s\"" -msgstr "\"%s\" 릴레이션의 칼럼 이름을 바꿀 수 없음" +msgid "User-specified column moved to the position of the inherited column." +msgstr "사용자 지정 칼럼이 상속된 칼럼의 위치로 이동되었습니다" -#: commands/tablecmds.c:3602 +#: commands/tablecmds.c:3148 #, c-format -msgid "inherited column \"%s\" must be renamed in child tables too" -msgstr "하위 테이블에서도 상속된 \"%s\" 칼럼의 이름을 바꾸어야 함" +msgid "column \"%s\" has a type conflict" +msgstr "\"%s\" 칼럼의 자료형이 충돌합니다" -#: commands/tablecmds.c:3634 +#: 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: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 #, c-format -msgid "cannot rename system column \"%s\"" -msgstr "\"%s\" 이름의 칼럼은 시스템 칼럼입니다, 이름을 바꿀 수 없습니다" +msgid "%s versus %s" +msgstr "%s 형과 %s 형" -#: commands/tablecmds.c:3649 +#: commands/tablecmds.c:3162 +#, c-format +msgid "column \"%s\" has a collation conflict" +msgstr "\"%s\" 칼럼의 정렬규칙이 충돌합니다" + +#: commands/tablecmds.c:3164 commands/tablecmds.c:3326 +#: commands/tablecmds.c:7080 +#, c-format +msgid "\"%s\" versus \"%s\"" +msgstr "\"%s\" 형과 \"%s\" 형" + +#: commands/tablecmds.c:3182 +#, c-format +msgid "column \"%s\" has a storage parameter conflict" +msgstr "\"%s\" 칼럼의 스토리지 설정값이 충돌합니다" + +#: commands/tablecmds.c:3198 commands/tablecmds.c:3354 +#, c-format +msgid "column \"%s\" has a compression method conflict" +msgstr "\"%s\" 칼럼의 압축 방법이 충돌합니다" + +#: commands/tablecmds.c:3293 +#, c-format +msgid "merging multiple inherited definitions of column \"%s\"" +msgstr "\"%s\" 칼럼이 중복되어 상속됩니다." + +#: commands/tablecmds.c:3305 +#, c-format +msgid "inherited column \"%s\" has a type conflict" +msgstr "상위 테이블에서 지정한 \"%s\" 칼럼의 자료형들이 일치하지 않습니다" + +#: commands/tablecmds.c:3324 +#, c-format +msgid "inherited column \"%s\" has a collation conflict" +msgstr "상속 받은 \"%s\" 칼럼의 정렬규칙에서 충돌합니다." + +#: commands/tablecmds.c:3338 +#, c-format +msgid "inherited column \"%s\" has a storage parameter conflict" +msgstr "상속 받은 \"%s\" 칼럼의 스토리지 설정값에서 충돌합니다" + +#: commands/tablecmds.c:3366 +#, c-format +msgid "inherited column \"%s\" has a generation conflict" +msgstr "상속된 \"%s\" 칼럼에 대한 생성 충돌 발생" + +#: commands/tablecmds.c:3597 +#, c-format +msgid "cannot move temporary tables of other sessions" +msgstr "다른 세션의 임시 테이블들은 이동할 수 없습니다" + +#: commands/tablecmds.c:3670 +#, c-format +msgid "cannot rename column of typed table" +msgstr "칼럼 이름을 바꿀 수 없음" + +#: commands/tablecmds.c:3689 +#, c-format +msgid "cannot rename columns of relation \"%s\"" +msgstr "\"%s\" 릴레이션의 칼럼 이름을 바꿀 수 없음" + +#: commands/tablecmds.c:3784 +#, c-format +msgid "inherited column \"%s\" must be renamed in child tables too" +msgstr "하위 테이블에서도 상속된 \"%s\" 칼럼의 이름을 바꾸어야 함" + +#: commands/tablecmds.c:3816 +#, c-format +msgid "cannot rename system column \"%s\"" +msgstr "\"%s\" 이름의 칼럼은 시스템 칼럼입니다, 이름을 바꿀 수 없습니다" + +#: commands/tablecmds.c:3831 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "\"%s\" 이름의 칼럼은 상속 받은 칼럼입니다, 이름을 바꿀 수 없습니다" -#: commands/tablecmds.c:3801 +#: commands/tablecmds.c:3983 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "" "하위 테이블에서도 상속된 \"%s\" 제약조건은 하위 테이블에서도 이름이 바뀌어야 " "함" -#: commands/tablecmds.c:3808 +#: 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:4105 +#: 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:4114 +#: commands/tablecmds.c:4299 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "보류 중인 트리거 이벤트가 있으므로 %s \"%s\" 작업을 할 수 없음" -#: commands/tablecmds.c:4581 +#: commands/tablecmds.c:4325 +#, c-format +msgid "cannot alter temporary tables of other sessions" +msgstr "다른 세션의 임시 테이블에 대해서는 alter 작업을 할 수 없음" + +#: commands/tablecmds.c:4798 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "" "\"%s\" 파티션 테이블은 불완전한 detach 상태이기에 alter 작업을 할 수 없음" -#: commands/tablecmds.c:4774 commands/tablecmds.c:4789 +#: commands/tablecmds.c:5002 commands/tablecmds.c:5017 #, c-format msgid "cannot change persistence setting twice" msgstr "로그 사용/미사용 옵션을 중복 해서 지정했음" -#: commands/tablecmds.c:4810 -#, c-format -msgid "cannot change access method of a partitioned table" -msgstr "파티션 된 테이블의 접근 방법은 바꿀 수 없음" - -#: commands/tablecmds.c:4816 +#: commands/tablecmds.c:5038 #, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" msgstr "다중 SET ACCESS METHOD 구문은 사용할 수 없음" -#: commands/tablecmds.c:5537 +#: commands/tablecmds.c:5768 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "\"%s\" 시스템 릴레이션을 다시 쓰기(rewrite) 할 수 없음" -#: commands/tablecmds.c:5543 +#: commands/tablecmds.c:5774 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "카탈로그 테이블로 사용되어 \"%s\" 테이블을 rewrite 못함" -#: commands/tablecmds.c:5553 +#: commands/tablecmds.c:5786 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "다른 세션의 임시 테이블을 다시 쓰기(rewrite) 할 수 없음" -#: commands/tablecmds.c:6048 +#: commands/tablecmds.c:6281 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "\"%s\" 열(해당 릴레이션 \"%s\")의 자료 가운데 null 값이 있습니다" -#: commands/tablecmds.c:6065 +#: commands/tablecmds.c:6298 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "" "\"%s\" 체크 제약 조건(해당 릴레이션 \"%s\")을 위반하는 몇몇 자료가 있습니다" -#: commands/tablecmds.c:6084 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 " @@ -11341,173 +11796,173 @@ msgid "" msgstr "" "몇몇 자료가 \"%s\" 기본 파티션용에서 변경된 파티션 제약조건을 위배한 것 같음" -#: commands/tablecmds.c:6090 +#: 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:6352 +#: commands/tablecmds.c:6588 #, c-format msgid "ALTER action %s cannot be performed on relation \"%s\"" msgstr "%s ALTER 작업은 \"%s\" 릴레이션 대상으로 수행할 수 없음" -#: commands/tablecmds.c:6607 commands/tablecmds.c:6614 +#: 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\" 칼럼에서 해당 형식을 사용함)" +msgstr "\"%s\" 자료형 바꿀 수 없음(\"%s.%s\" 칼럼에서 해당 형식을 사용함)" -#: commands/tablecmds.c:6621 +#: commands/tablecmds.c:6857 #, c-format msgid "" "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" -"\"%s\" 외부 테이블을 변경할 수 없음(\"%s.%s\" 칼럼에서 해당 로우 형을 사용함)" +"\"%s\" 외부 테이블을 바꿀 수 없음(\"%s.%s\" 칼럼에서 해당 로우 형을 사용함)" -#: commands/tablecmds.c:6628 +#: commands/tablecmds.c:6864 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" -"\"%s\" 테이블을 변경할 수 없음(\"%s.%s\" 칼럼에서 해당 로우 형식을 사용함)" +"\"%s\" 테이블을 바꿀 수 없음(\"%s.%s\" 칼럼에서 해당 로우 형식을 사용함)" -#: commands/tablecmds.c:6684 +#: commands/tablecmds.c:6920 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "" -"\"%s\" 자료형을 변경할 수 없음, 이 자료형은 typed 테이블의 자료형이기 때문" +"\"%s\" 자료형을 바꿀 수 없음, 이 자료형은 typed 테이블의 자료형이기 때문" -#: commands/tablecmds.c:6686 +#: commands/tablecmds.c:6922 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "" "이 개체와 관계된 모든 개체들을 함께 변경하려면 ALTER ... CASCADE 명령을 사용" "하십시오" -#: commands/tablecmds.c:6732 +#: commands/tablecmds.c:6968 #, c-format msgid "type %s is not a composite type" msgstr "%s 자료형은 복합 자료형이 아닙니다" -#: commands/tablecmds.c:6759 +#: commands/tablecmds.c:6995 #, c-format msgid "cannot add column to typed table" msgstr "typed 테이블에는 칼럼을 추가 할 수 없음" -#: commands/tablecmds.c:6812 +#: commands/tablecmds.c:7043 #, c-format msgid "cannot add column to a partition" msgstr "파티션 테이블에는 칼럼을 추가 할 수 없습니다" -#: commands/tablecmds.c:6841 commands/tablecmds.c:15165 +#: 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:6847 commands/tablecmds.c:15172 +#: 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:6865 +#: commands/tablecmds.c:7096 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "\"%s\" 열(\"%s\" 하위)의 정의를 병합하는 중" -#: commands/tablecmds.c:6908 +#: commands/tablecmds.c:7149 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "하위 테이블에 재귀적으로 식별 칼럼을 추가할 수는 없음" -#: commands/tablecmds.c:7159 +#: commands/tablecmds.c:7362 #, c-format msgid "column must be added to child tables too" msgstr "하위 테이블에도 칼럼을 추가해야 함" -#: commands/tablecmds.c:7237 +#: commands/tablecmds.c:7440 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 칼럼이 \"%s\" 릴레이션에 이미 있습니다, 건너뜀" -#: commands/tablecmds.c:7244 +#: commands/tablecmds.c:7447 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "\"%s\" 이름의 칼럼은 \"%s\" 릴레이션에 이미 있습니다" -#: commands/tablecmds.c:7310 commands/tablecmds.c:12094 +#: 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:7311 commands/tablecmds.c:7628 -#: commands/tablecmds.c:8593 commands/tablecmds.c:12095 +#: 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:7348 commands/tablecmds.c:7554 -#: commands/tablecmds.c:7696 commands/tablecmds.c:7810 -#: commands/tablecmds.c:7904 commands/tablecmds.c:7963 -#: commands/tablecmds.c:8082 commands/tablecmds.c:8221 -#: commands/tablecmds.c:8291 commands/tablecmds.c:8425 -#: commands/tablecmds.c:12249 commands/tablecmds.c:13753 -#: commands/tablecmds.c:16282 +#: 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\" 칼럼은 시스템 칼럼입니다. 그래서 변경될 수 없습니다" +msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 그래서 바꿀 수 없습니다" -#: commands/tablecmds.c:7354 commands/tablecmds.c:7702 +#: commands/tablecmds.c:7556 commands/tablecmds.c:7902 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "\"%s\" 칼럼(해당 테이블: \"%s\")은 식별 칼럼입니다." -#: commands/tablecmds.c:7397 +#: commands/tablecmds.c:7597 #, c-format msgid "column \"%s\" is in a primary key" msgstr "\"%s\" 칼럼은 기본키 칼럼입니다" -#: commands/tablecmds.c:7402 +#: commands/tablecmds.c:7602 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "\"%s\" 칼럼 대상 인덱스는 복제 식별자로 사용 됨" -#: commands/tablecmds.c:7425 +#: commands/tablecmds.c:7625 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "파티션 테이블에서 \"%s\" 칼럼은 NOT NULL 속성으로 되어 있습니다" -#: commands/tablecmds.c:7625 commands/tablecmds.c:9077 +#: commands/tablecmds.c:7825 commands/tablecmds.c:9533 #, c-format msgid "constraint must be added to child tables too" msgstr "하위 테이블에도 제약 조건을 추가해야 함" -#: commands/tablecmds.c:7626 +#: commands/tablecmds.c:7826 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")은 이미 NOT NULL 속성이 없습니다." -#: commands/tablecmds.c:7704 -#, c-format -msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." -msgstr "" -"대신에, ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY 명령을 사용하세요." - -#: commands/tablecmds.c:7709 +#: commands/tablecmds.c:7911 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "\"%s\" 칼럼(해당 테이블: \"%s\")은 계산된 칼럼입니다." -#: commands/tablecmds.c:7712 +#: commands/tablecmds.c:8005 #, c-format -msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." -msgstr "" -"대신에, ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION 명령을 사용하세요." +msgid "cannot add identity to a column of only the partitioned table" +msgstr "상위 파티션 테이블 단독으로 식별자 속성의 칼럼을 지정할 수 없음" + +#: commands/tablecmds.c:8011 +#, c-format +msgid "cannot add identity to a column of a partition" +msgstr "한 하위 테이블에 식별자 속성의 칼럼을 지정할 수는 없음" -#: commands/tablecmds.c:7821 +#: commands/tablecmds.c:8039 #, c-format msgid "" "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity " @@ -11516,95 +11971,120 @@ msgstr "" "식별자 옵션을 사용하려면, \"%s\" 칼럼(해당 릴레이션: \"%s\")에 NOT NULL 옵션" "이 있어야 합니다." -#: commands/tablecmds.c:7827 +#: commands/tablecmds.c:8045 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 이미 식별 칼럼입니다" -#: commands/tablecmds.c:7833 +#: commands/tablecmds.c:8051 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 이미 default 입니다" -#: commands/tablecmds.c:7910 commands/tablecmds.c:7971 +#: commands/tablecmds.c:8112 +#, c-format +msgid "cannot change identity column of only the partitioned table" +msgstr "상위 파티션 테이블만 대상으로 식별자 속성 칼럼을 바꿀 수는 없음" + +#: commands/tablecmds.c:8118 +#, c-format +msgid "cannot change identity column of a partition" +msgstr "한 하위 파티션 테이블만 대상으로 식별자 속성 칼럼을 바꿀 수는 없음" + +#: commands/tablecmds.c:8163 commands/tablecmds.c:8259 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 식별 칼럼이 아닙니다" -#: commands/tablecmds.c:7976 +#: commands/tablecmds.c:8229 +#, c-format +msgid "cannot drop identity from a column of only the partitioned table" +msgstr "상위 파티션 테이블만 대상으로 식별자 속성 칼럼을 삭제할 수는 없음" + +#: commands/tablecmds.c:8235 +#, c-format +msgid "cannot drop identity from a column of a partition" +msgstr "한 하위 파티션 테이블만 대상으로 식별자 속성 칼럼을 삭제할 수는 없음" + +#: commands/tablecmds.c:8264 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 식별 칼럼이 아님, 건너뜀" -#: commands/tablecmds.c:8029 +#: commands/tablecmds.c:8358 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a generated column" +msgstr "\"%s\" 칼럼(해당 테이블: \"%s\")은 계산된 칼럼이 아님" + +#: 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:8051 +#: commands/tablecmds.c:8478 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "상속 받은 칼럼에서는 미리 계산된 표현식을 못 없앰" -#: commands/tablecmds.c:8090 +#: commands/tablecmds.c:8517 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")은 미리 계산된 칼럼이 아님" -#: commands/tablecmds.c:8095 +#: commands/tablecmds.c:8522 #, c-format msgid "" "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")은 미리 계산된 칼럼이 아님, 건너뜀" -#: commands/tablecmds.c:8168 +#: commands/tablecmds.c:8600 #, c-format msgid "cannot refer to non-index column by number" msgstr "숫자로 인덱스 사용하지 않는 칼럼을 참조할 수 없음" -#: commands/tablecmds.c:8211 +#: commands/tablecmds.c:8652 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "%d번째 칼럼이 없습니다. 해당 릴레이션: \"%s\"" -#: commands/tablecmds.c:8230 +#: commands/tablecmds.c:8671 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "" "\"%s\" 포함된 칼럼 (해당 인덱스: \"%s\") 관련 통계정보를 수정할 수 없음" -#: commands/tablecmds.c:8235 +#: commands/tablecmds.c:8676 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" "\"%s\" 비표현식 칼럼 (해당 인덱스: \"%s\") 관련 통계정보를 수정할 수 없음" -#: commands/tablecmds.c:8237 +#: commands/tablecmds.c:8678 #, c-format msgid "Alter statistics on table column instead." msgstr "대신에 테이블 칼럼 대상으로 통계정보를 수정하세요." -#: commands/tablecmds.c:8472 +#: commands/tablecmds.c:8924 #, c-format msgid "cannot drop column from typed table" msgstr "typed 테이블에서 칼럼을 삭제할 수 없음" -#: commands/tablecmds.c:8531 +#: commands/tablecmds.c:8987 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "\"%s\" 칼럼은 \"%s\" 릴레이션에 없음, 건너뜀" -#: commands/tablecmds.c:8544 +#: commands/tablecmds.c:9000 #, c-format msgid "cannot drop system column \"%s\"" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다, 삭제될 수 없습니다" -#: commands/tablecmds.c:8554 +#: commands/tablecmds.c:9010 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "\"%s\" 칼럼은 상속받은 칼럼입니다, 삭제될 수 없습니다" -#: commands/tablecmds.c:8567 +#: commands/tablecmds.c:9023 #, c-format msgid "" "cannot drop column \"%s\" because it is part of the partition key of " @@ -11612,14 +12092,14 @@ msgid "" msgstr "" "\"%s\" 칼럼은 \"%s\" 릴레이션의 파티션 키로 사용되고 있어 삭제 될 수 없음" -#: commands/tablecmds.c:8592 +#: commands/tablecmds.c:9048 #, c-format msgid "" "cannot drop column from only the partitioned table when partitions exist" msgstr "" "파티션 테이블이 있는 파티션된 테이블에서 그 테이블만 칼럼을 삭제 할 수 없음" -#: commands/tablecmds.c:8797 +#: commands/tablecmds.c:9253 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned " @@ -11628,7 +12108,7 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX 작업은 파티션 된 테이블 대상으로는 " "지원하지 않음" -#: commands/tablecmds.c:8822 +#: commands/tablecmds.c:9278 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" @@ -11636,7 +12116,7 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX 작업은 \"%s\" 인덱스를 \"%s\" 이름으" "로 바꿀 것입니다." -#: commands/tablecmds.c:9159 +#: commands/tablecmds.c:9615 #, c-format msgid "" "cannot use ONLY for foreign key on partitioned table \"%s\" referencing " @@ -11645,7 +12125,7 @@ msgstr "" "\"%s\" 파티션 상위 테이블의 참조키에는 ONLY 옵션을 사용할 수 없음. 이 테이블" "은 \"%s\" 릴레이션을 참조 함" -#: commands/tablecmds.c:9165 +#: commands/tablecmds.c:9621 #, c-format msgid "" "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing " @@ -11654,22 +12134,22 @@ msgstr "" "\"%s\" 파타션된 테이블에 NOT VALID 참조키를 추가할 수 없음 (참조 하는 테이" "블: \"%s\")" -#: commands/tablecmds.c:9168 +#: commands/tablecmds.c:9624 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "이 기능은 파티션 된 테이블 대상으로는 아직 지원하지 않습니다." -#: commands/tablecmds.c:9175 commands/tablecmds.c:9631 +#: commands/tablecmds.c:9631 commands/tablecmds.c:10092 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "참조된 \"%s\" 릴레이션은 테이블이 아닙니다" -#: commands/tablecmds.c:9198 +#: commands/tablecmds.c:9654 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "영구 저장용 테이블의 제약 조건은 영구 저장용 테이블을 참조 합니다." -#: commands/tablecmds.c:9205 +#: commands/tablecmds.c:9661 #, c-format msgid "" "constraints on unlogged tables may reference only permanent or unlogged " @@ -11678,155 +12158,176 @@ msgstr "" "unlogged 테이블의 제약 조건은 영구 저장용 테이블 또는 unlogged 테이블을 참조" "합니다." -#: commands/tablecmds.c:9211 +#: commands/tablecmds.c:9667 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "임시 테이블의 제약 조건은 임시 테이블에 대해서만 참조할 것입니다." -#: commands/tablecmds.c:9215 +#: commands/tablecmds.c:9671 #, c-format msgid "" "constraints on temporary tables must involve temporary tables of this session" msgstr "" "임시 테이블의 제약 조건은 이 세션용 임시 테이블에 대해서만 적용 됩니다." -#: commands/tablecmds.c:9279 commands/tablecmds.c:9285 +#: 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:9301 +#: commands/tablecmds.c:9757 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "참조키(foreign key) disagree를 위한 참조하는, 또는 참조되는 열 수" -#: commands/tablecmds.c:9408 +#: commands/tablecmds.c:9864 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "\"%s\" 참조키(foreign key) 제약 조건은 구현되어질 수 없습니다" -#: commands/tablecmds.c:9410 +#: commands/tablecmds.c:9866 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "" "\"%s\" 열과 \"%s\" 열 인덱스는 함께 사용할 수 없는 자료형입니다: %s and %s." -#: commands/tablecmds.c:9567 +#: commands/tablecmds.c:10035 #, c-format msgid "" "column \"%s\" referenced in ON DELETE SET action must be part of foreign key" msgstr "" "ON DELETE SET 동작을 지정하려는 \"%s\" 칼럼은 참조키의 한 부분이어야 합니다." -#: commands/tablecmds.c:9841 commands/tablecmds.c:10311 -#: parser/parse_utilcmd.c:791 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:10864 commands/tablecmds.c:11142 -#: commands/tablecmds.c:12051 commands/tablecmds.c:12126 +#: 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 "\"%s\" 제약 조건이 \"%s\" 릴레이션에 없습니다." -#: commands/tablecmds.c:10871 +#: commands/tablecmds.c:11423 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "\"%s\" 제약 조건(해당 테이블: \"%s\")은 참조키 제약조건이 아닙니다." -#: commands/tablecmds.c:10909 +#: commands/tablecmds.c:11461 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" -msgstr "\"%s\" 제약 조건(해당 테이블: \"%s\")을 변경할 수 없음" +msgstr "\"%s\" 제약 조건(해당 테이블: \"%s\")을 바꿀 수 없음" -#: commands/tablecmds.c:10912 +#: commands/tablecmds.c:11464 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "" "\"%s\" 제약 조건은 \"%s\" 제약 조건에서 파생되었음, 해당 릴레이션: \"%s\"" -#: commands/tablecmds.c:10914 +#: commands/tablecmds.c:11466 #, c-format msgid "You may alter the constraint it derives from instead." msgstr "대신에, 원 제약 조건을 변경 하세요." -#: commands/tablecmds.c:11150 +#: commands/tablecmds.c:11705 #, c-format msgid "" "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "" "\"%s\" 제약 조건(해당 테이블: \"%s\")은 참조키도 체크 제약 조건도 아닙니다." -#: commands/tablecmds.c:11227 +#: commands/tablecmds.c:11782 #, c-format msgid "constraint must be validated on child tables too" msgstr "하위 테이블에도 제약 조건이 유효해야 함" -#: commands/tablecmds.c:11314 +#: commands/tablecmds.c:11869 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "참조키(foreign key) 제약 조건에서 참조하는 \"%s\" 칼럼이 없음" -#: commands/tablecmds.c:11320 +#: commands/tablecmds.c:11875 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "시스템 칼럼은 참조키로 사용될 수 없음" -#: commands/tablecmds.c:11324 +#: commands/tablecmds.c:11879 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "참조키(foreign key)에서 %d 키 개수보다 많이 가질 수 없음" -#: commands/tablecmds.c:11389 +#: commands/tablecmds.c:11944 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "참조되는 \"%s\" 테이블의 지연 가능한 기본키를 사용할 수 없음" -#: commands/tablecmds.c:11406 +#: commands/tablecmds.c:11961 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "참조되는 \"%s\" 테이블에는 기본키(primary key)가 없습니다" -#: commands/tablecmds.c:11470 +#: commands/tablecmds.c:12029 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "참조키의 참조 칼럼 목록에 칼럼이 중복되면 안됩니다" -#: commands/tablecmds.c:11562 +#: commands/tablecmds.c:12121 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "참조되는 \"%s\" 테이블의 지연 가능한 유니크 제약 조건을 사용할 수 없음" -#: commands/tablecmds.c:11567 +#: commands/tablecmds.c:12126 #, c-format msgid "" "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "" "참조되는 \"%s\" 테이블을 위한 주워진 키와 일치하는 고유 제약 조건이 없습니다" -#: commands/tablecmds.c:12007 +#: commands/tablecmds.c:12565 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "상속된 \"%s\" 제약 조건(해당 테이블: \"%s\")을 삭제할 수 없음" -#: commands/tablecmds.c:12057 +#: commands/tablecmds.c:12615 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "\"%s\" 제약 조건(해당 테이블: \"%s\")이 없음, 건너뜀" -#: commands/tablecmds.c:12233 +#: commands/tablecmds.c:12790 #, c-format msgid "cannot alter column type of typed table" -msgstr "typed 테이블의 칼럼 자료형은 변경할 수 없음" +msgstr "typed 테이블의 칼럼 자료형은 바꿀 수 없음" + +#: 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:12260 +#: commands/tablecmds.c:12827 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "\"%s\" 이름의 칼럼은 상속 받은 칼럼입니다, 이름을 바꿀 수 없습니다" -#: commands/tablecmds.c:12269 +#: commands/tablecmds.c:12836 #, c-format msgid "" "cannot alter column \"%s\" because it is part of the partition key of " @@ -11835,7 +12336,7 @@ msgstr "" "\"%s\" 칼럼은 \"%s\" 테이블의 파티션 키 가운데 하나이기 때문에, alter 작업" "을 할 수 없음" -#: commands/tablecmds.c:12319 +#: commands/tablecmds.c:12886 #, c-format msgid "" "result of USING clause for column \"%s\" cannot be cast automatically to " @@ -11843,192 +12344,197 @@ msgid "" msgstr "" "\"%s\" 칼럼에서 쓰인 USING 절의 결과가 %s 자료형으로 자동 형변환을 할 수 없음" -#: commands/tablecmds.c:12322 +#: commands/tablecmds.c:12889 #, c-format msgid "You might need to add an explicit cast." msgstr "명시적 형변환을 해야할 것 같습니다." -#: commands/tablecmds.c:12326 +#: 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:12329 +#: commands/tablecmds.c:12897 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "\"USING %s::%s\" 구문을 추가해야 할 것 같습니다." -#: commands/tablecmds.c:12428 +#: commands/tablecmds.c:12996 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "" "\"%s\" 칼럼은 \"%s\" 테이블의 상속된 칼럼이기에 alter 작업을 할 수 없음" -#: commands/tablecmds.c:12457 +#: commands/tablecmds.c:13025 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING 표현식에서 전체 로우 테이블 참조를 포함하고 있습니다." -#: commands/tablecmds.c:12468 +#: commands/tablecmds.c:13036 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "하위 테이블에서도 상속된 \"%s\" 칼럼의 형식을 바꾸어야 함" -#: commands/tablecmds.c:12593 +#: commands/tablecmds.c:13161 #, c-format msgid "cannot alter type of column \"%s\" twice" -msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 그래서 변경될 수 없습니다" +msgstr "\"%s\" 칼럼의 자료형을 중복해서 바꿀 수는 없음" -#: commands/tablecmds.c:12631 +#: commands/tablecmds.c:13199 #, c-format msgid "" "generation expression for column \"%s\" cannot be cast automatically to type " "%s" msgstr "\"%s\" 칼럼의 생성 구문은 %s 형으로 자동 형변환할 수 없음" -#: commands/tablecmds.c:12636 +#: commands/tablecmds.c:13204 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "\"%s\" 칼럼의 기본 값을 %s 형으로 형변환할 수 없음" -#: commands/tablecmds.c:12717 +#: commands/tablecmds.c:13508 #, c-format -msgid "cannot alter type of a column used by a view or rule" -msgstr "뷰 또는 규칙에서 사용하는 칼럼의 형식을 변경할 수 없음" +msgid "cannot alter type of a column used by a function or procedure" +msgstr "함수나 프로시져에서 사용하는 칼럼의 자료형 변경은 할 수 없음" -#: commands/tablecmds.c:12718 commands/tablecmds.c:12737 -#: commands/tablecmds.c:12755 +#: 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:12736 +#: commands/tablecmds.c:13523 +#, c-format +msgid "cannot alter type of a column used by a view or rule" +msgstr "뷰 또는 규칙에서 사용하는 칼럼의 형식을 바꿀 수 없음" + +#: commands/tablecmds.c:13543 #, c-format msgid "cannot alter type of a column used in a trigger definition" -msgstr "트리거 정의에서 사용하는 칼럼의 자료형을 변경할 수 없음" +msgstr "트리거 정의에서 사용하는 칼럼의 자료형을 바꿀 수 없음" -#: commands/tablecmds.c:12754 +#: commands/tablecmds.c:13562 #, c-format msgid "cannot alter type of a column used in a policy definition" -msgstr "정책 정의에서 사용하는 칼럼의 자료형을 변경할 수 없음" +msgstr "정책 정의에서 사용하는 칼럼의 자료형을 바꿀 수 없음" -#: commands/tablecmds.c:12785 +#: commands/tablecmds.c:13593 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "미리 계산된 칼럼의 자료형을 바꿀 수 없음" -#: commands/tablecmds.c:12786 +#: commands/tablecmds.c:13594 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "\"%s\" 칼럼은 미리 계산된 칼럼인 \"%s\"에서 사용되고 있음." -#: commands/tablecmds.c:13861 commands/tablecmds.c:13873 +#: commands/tablecmds.c:13621 +#, c-format +msgid "cannot alter type of a column used by a publication WHERE clause" +msgstr "WHERE절이 있는 발행에서 사용되는 칼럼은 자료형을 바꿀 수 없음" + +#: commands/tablecmds.c:14456 commands/tablecmds.c:14468 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "\"%s\" 인덱스의 소유주를 바꿀 수 없음" -#: commands/tablecmds.c:13863 commands/tablecmds.c:13875 +#: commands/tablecmds.c:14458 commands/tablecmds.c:14470 #, c-format msgid "Change the ownership of the index's table instead." msgstr "대신에 그 인덱스의 해당 테이블 소유자을 변경하세요." -#: commands/tablecmds.c:13889 +#: commands/tablecmds.c:14484 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "\"%s\" 시퀀스의 소유주를 바꿀 수 없음" -#: commands/tablecmds.c:13903 commands/tablecmds.c:17173 -#: commands/tablecmds.c:17192 -#, c-format -msgid "Use ALTER TYPE instead." -msgstr "대신 ALTER TYPE을 사용하십시오." - -#: commands/tablecmds.c:13912 +#: commands/tablecmds.c:14509 #, c-format msgid "cannot change owner of relation \"%s\"" msgstr "\"%s\" 릴레이션의 소유주를 바꿀 수 없음" -#: commands/tablecmds.c:14274 +#: commands/tablecmds.c:14976 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "SET TABLESPACE 구문이 중복 사용되었습니다" -#: commands/tablecmds.c:14351 +#: commands/tablecmds.c:15053 #, c-format msgid "cannot set options for relation \"%s\"" msgstr "\"%s\" 릴레이션용 옵션을 지정할 수 없음" -#: commands/tablecmds.c:14385 commands/view.c:445 +#: 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:14635 +#: commands/tablecmds.c:15338 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "테이블스페이스에 테이블과 인덱스와 구체화된 뷰만 있습니다." -#: commands/tablecmds.c:14647 +#: commands/tablecmds.c:15350 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "" "해당 개체를 pg_global 테이블스페이스로 옮기거나 그 반대로 작업할 수 없음" -#: commands/tablecmds.c:14739 +#: commands/tablecmds.c:15442 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "\"%s.%s\" 릴레이션을 잠글 수 없어 중지 중입니다" -#: commands/tablecmds.c:14755 +#: commands/tablecmds.c:15458 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "검색조건에 일치하는 릴레이션이 \"%s\" 테이블스페이스에 없음" -#: commands/tablecmds.c:14873 +#: commands/tablecmds.c:15580 #, c-format msgid "cannot change inheritance of typed table" -msgstr "typed 테이블의 상속 정보는 변경할 수 없음" +msgstr "typed 테이블의 상속 정보는 바꿀 수 없음" -#: commands/tablecmds.c:14878 commands/tablecmds.c:15396 +#: commands/tablecmds.c:15585 commands/tablecmds.c:16085 #, c-format msgid "cannot change inheritance of a partition" msgstr "파티션 테이블의 상속 정보는 바꿀 수 없음" -#: commands/tablecmds.c:14883 +#: commands/tablecmds.c:15590 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "파티션된 테이블의 상속 정보는 바꿀 수 없음" -#: commands/tablecmds.c:14929 +#: commands/tablecmds.c:15636 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "다른 세션의 임시 테이블을 상속할 수 없음" -#: commands/tablecmds.c:14942 +#: commands/tablecmds.c:15649 #, c-format msgid "cannot inherit from a partition" msgstr "파티션 테이블에서 상속 할 수 없음" -#: commands/tablecmds.c:14964 commands/tablecmds.c:17813 +#: commands/tablecmds.c:15671 commands/tablecmds.c:18529 #, c-format msgid "circular inheritance not allowed" msgstr "순환 되는 상속은 허용하지 않습니다" -#: commands/tablecmds.c:14965 commands/tablecmds.c:17814 +#: commands/tablecmds.c:15672 commands/tablecmds.c:18530 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" 개체는 이미 \"%s\" 개체로부터 상속받은 상태입니다." -#: commands/tablecmds.c:14978 +#: commands/tablecmds.c:15685 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "" "\"%s\" 트리거(해당 테이블 \"%s\")은 하위테이블 상속과 관련되어 보호되고 있습" "니다." -#: commands/tablecmds.c:14980 +#: commands/tablecmds.c:15687 #, c-format msgid "" "ROW triggers with transition tables are not supported in inheritance " @@ -12036,119 +12542,119 @@ msgid "" msgstr "" "transition 테이블의 ROW 트리거들은 계층적 상속 테이블에서는 지원하지 않음" -#: commands/tablecmds.c:15183 +#: commands/tablecmds.c:15876 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "자식 테이블의 \"%s\" 칼럼은 NOT NULL 속성이 있어야 합니다" -#: commands/tablecmds.c:15192 +#: commands/tablecmds.c:15885 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "자식 테이블의 \"%s\" 칼럼은 미리 계산된 칼럼이어야 함" -#: commands/tablecmds.c:15197 +#: commands/tablecmds.c:15889 #, c-format msgid "column \"%s\" in child table must not be a generated column" msgstr "자식 테이블의 \"%s\" 칼럼은 미리 계산된 칼럼이 아니여야 합니다." -#: commands/tablecmds.c:15228 +#: commands/tablecmds.c:15927 #, c-format msgid "child table is missing column \"%s\"" msgstr "자식 테이블에는 \"%s\" 칼럼이 없습니다" -#: commands/tablecmds.c:15316 +#: commands/tablecmds.c:16008 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "\"%s\" 하위 테이블에 \"%s\" 체크 제약 조건에 대한 다른 정의가 있음" -#: commands/tablecmds.c:15324 +#: commands/tablecmds.c:16015 #, c-format msgid "" -"constraint \"%s\" conflicts with non-inherited constraint on child table \"%s" -"\"" +"constraint \"%s\" conflicts with non-inherited constraint on child table " +"\"%s\"" msgstr "" "\"%s\" 제약 조건이 \"%s\" 하위 테이블에 있는 비 상속 제약 조건과 충돌합니다" -#: commands/tablecmds.c:15335 +#: commands/tablecmds.c:16025 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "" "\"%s\" 제약 조건이 \"%s\" 하위 테이블에 있는 NOT VALID 제약 조건과 충돌합니다" -#: commands/tablecmds.c:15374 +#: commands/tablecmds.c:16063 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "자식 테이블에 \"%s\" 제약 조건이 없습니다" -#: commands/tablecmds.c:15460 +#: commands/tablecmds.c:16149 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "" "\"%s\" 하위 파티션과 \"%s.%s\" 상위 파티션 테이블과 분리 작업을 이미 진행, 지" "연 되고 있습니다." -#: commands/tablecmds.c:15489 commands/tablecmds.c:15537 +#: 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:15543 +#: commands/tablecmds.c:16230 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "\"%s\" 릴레이션은 \"%s\" 릴레이션의 부모가 아닙니다" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:16457 #, c-format msgid "typed tables cannot inherit" msgstr "typed 테이블은 상속할 수 없음" -#: commands/tablecmds.c:15801 +#: commands/tablecmds.c:16487 #, c-format msgid "table is missing column \"%s\"" msgstr "테이블에는 \"%s\" 칼럼이 없습니다" -#: commands/tablecmds.c:15812 +#: commands/tablecmds.c:16498 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "\"%s\" 칼럼은 \"%s\" 자료형입니다." -#: commands/tablecmds.c:15821 +#: commands/tablecmds.c:16507 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "\"%s\" 테이블의 \"%s\" 칼럼 자료형 틀립니다" -#: commands/tablecmds.c:15835 +#: commands/tablecmds.c:16521 #, c-format msgid "table has extra column \"%s\"" msgstr "\"%s\" 칼럼은 확장형입니다" -#: commands/tablecmds.c:15887 +#: commands/tablecmds.c:16573 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" 테이블은 typed 테이블이 아닙니다" -#: commands/tablecmds.c:16061 +#: commands/tablecmds.c:16747 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "\"%s\" 인덱스는 유니크 인덱스가 아니여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:16067 +#: commands/tablecmds.c:16753 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "\"%s\" non-immediate 인덱스는 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:16073 +#: commands/tablecmds.c:16759 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "\"%s\" 인덱스는 expression 인덱스여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:16079 +#: commands/tablecmds.c:16765 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "\"%s\" 인덱스가 부분인덱스여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16782 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column %d is a " @@ -12156,7 +12662,7 @@ msgid "" msgstr "" "\"%s\" 인덱스는 복제 식별자로 사용할 수 없음, %d 번째 칼럼이 시스템 칼럼임" -#: commands/tablecmds.c:16103 +#: commands/tablecmds.c:16789 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column \"%s\" is " @@ -12165,23 +12671,23 @@ msgstr "" "\"%s\" 인덱스는 복제 식별자로 사용할 수 없음, \"%s\" 칼럼이 null 값 사용가능 " "속성임" -#: commands/tablecmds.c:16348 +#: commands/tablecmds.c:17041 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "\"%s\" 테이블은 임시 테이블이기에, 통계 정보를 변경 할 수 없음" -#: commands/tablecmds.c:16372 +#: commands/tablecmds.c:17065 #, c-format msgid "" "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "\"%s\" 테이블은 발생에 사용하고 있어, unlogged 속성으로 바꿀 수 없음" -#: commands/tablecmds.c:16374 +#: commands/tablecmds.c:17067 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "unlogged 릴레이션 복제할 수 없습니다." -#: commands/tablecmds.c:16419 +#: commands/tablecmds.c:17112 #, c-format msgid "" "could not change table \"%s\" to logged because it references unlogged table " @@ -12190,7 +12696,7 @@ msgstr "" "\"%s\" 테이블이 \"%s\" unlogged 테이블을 참조하고 있어 logged 속성으로 바꿀 " "수 없음" -#: commands/tablecmds.c:16429 +#: commands/tablecmds.c:17122 #, c-format msgid "" "could not change table \"%s\" to unlogged because it references logged table " @@ -12199,93 +12705,87 @@ msgstr "" "\"%s\" 테이블이 \"%s\" logged 테이블을 참조하고 있어 unlogged 속성으로 바꿀 " "수 없음" -#: commands/tablecmds.c:16487 +#: commands/tablecmds.c:17180 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "소유된 시퀀스를 다른 스키마로 이동할 수 없음" -#: commands/tablecmds.c:16594 +#: commands/tablecmds.c:17288 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 릴레이션이 \"%s\" 스키마에 이미 있습니다" -#: commands/tablecmds.c:17006 +#: commands/tablecmds.c:17713 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" 개체는 테이블도 구체화된 뷰도 아닙니다" -#: commands/tablecmds.c:17156 +#: commands/tablecmds.c:17866 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" 개체는 복합 자료형입니다" -#: commands/tablecmds.c:17184 +#: commands/tablecmds.c:17896 #, c-format msgid "cannot change schema of index \"%s\"" msgstr "\"%s\" 인덱스의 스키마를 바꿀 수 없음" -#: commands/tablecmds.c:17186 commands/tablecmds.c:17198 +#: commands/tablecmds.c:17898 commands/tablecmds.c:17912 #, c-format msgid "Change the schema of the table instead." msgstr "대신에 그 인덱스의 해당 테이블 스키마를 변경하세요." -#: commands/tablecmds.c:17190 +#: commands/tablecmds.c:17902 #, c-format msgid "cannot change schema of composite type \"%s\"" msgstr "\"%s\" 복합 자료형의 스키마를 바꿀 수 없음" -#: commands/tablecmds.c:17196 +#: commands/tablecmds.c:17910 #, c-format msgid "cannot change schema of TOAST table \"%s\"" msgstr "\"%s\" TOAST 테이블의 스키마를 바꿀 수 없음" -#: commands/tablecmds.c:17228 +#: commands/tablecmds.c:17942 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "둘 이상의 칼럼을 사용할 \"list\" 파티션은 사용할 수 없습니다" -#: commands/tablecmds.c:17294 +#: commands/tablecmds.c:18008 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "\"%s\" 칼럼이 파티션 키로 사용되고 있지 않습니다" -#: commands/tablecmds.c:17302 +#: commands/tablecmds.c:18016 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 그래서 파티션 키로 사용될 수 없습니다" -#: commands/tablecmds.c:17313 commands/tablecmds.c:17427 +#: commands/tablecmds.c:18027 commands/tablecmds.c:18117 #, c-format msgid "cannot use generated column in partition key" msgstr "미리 계산된 칼럼은 파티션 키로 사용할 수 없음" -#: commands/tablecmds.c:17314 commands/tablecmds.c:17428 commands/trigger.c:663 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 +#: commands/tablecmds.c:18100 #, c-format -msgid "Column \"%s\" is a generated column." -msgstr "\"%s\" 칼럼은 미리 계산된 칼럼입니다." +msgid "partition key expressions cannot contain system column references" +msgstr "파티션 키 표현식에서는 시스템 칼럼 참조를 포함할 수 없습니다" -#: commands/tablecmds.c:17390 +#: commands/tablecmds.c:18147 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "파티션 키로 사용할 함수는 IMMUTABLE 특성이 있어야 합니다" -#: commands/tablecmds.c:17410 -#, c-format -msgid "partition key expressions cannot contain system column references" -msgstr "파티션 키 표현식에서는 시스템 칼럼 참조를 포함할 수 없습니다" - -#: commands/tablecmds.c:17440 +#: commands/tablecmds.c:18156 #, c-format msgid "cannot use constant expression as partition key" msgstr "파티션 키로 상수는 쓸 수 없습니다" -#: commands/tablecmds.c:17461 +#: commands/tablecmds.c:18177 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "파티션 표현식에 쓸 문자 정렬 규칙을 결정할 수 없습니다" -#: commands/tablecmds.c:17496 +#: commands/tablecmds.c:18212 #, c-format msgid "" "You must specify a hash operator class or define a default hash operator " @@ -12294,7 +12794,7 @@ msgstr "" "해당 자료형을 위한 해시 연산자 클래스를 지정하거나 기본 해시 연산자 클래스를 " "정의해 두어야 합니다" -#: commands/tablecmds.c:17502 +#: commands/tablecmds.c:18218 #, c-format msgid "" "You must specify a btree operator class or define a default btree operator " @@ -12303,121 +12803,134 @@ msgstr "" "해당 자료형을 위한 btree 연산자 클래스를 지정하거나 기본 btree 연산자 클래스" "를 정의해 두어야 합니다" -#: commands/tablecmds.c:17753 +#: commands/tablecmds.c:18469 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" 이름의 파티션 테이블이 이미 있습니다" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:18475 #, c-format msgid "cannot attach a typed table as partition" msgstr "파티션 테이블로 typed 테이블을 추가할 수 없음" -#: commands/tablecmds.c:17775 +#: commands/tablecmds.c:18491 #, c-format msgid "cannot attach inheritance child as partition" msgstr "파티션 테이블로 상속을 이용한 하위 테이블을 추가할 수 없음" -#: commands/tablecmds.c:17789 +#: commands/tablecmds.c:18505 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "파티션 테이블로 상속용 상위 테이블을 추가할 수 없음" -#: commands/tablecmds.c:17823 +#: commands/tablecmds.c:18539 #, c-format msgid "" "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "" "\"%s\" 테이블은 일반 테이블입니다, 임시 파티션 테이블을 추가할 수 없습니다" -#: commands/tablecmds.c:17831 +#: commands/tablecmds.c:18547 #, c-format msgid "" "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "" "\"%s\" 테이블은 임시 테이블입니다, 일반 파티션 테이블을 추가할 수 없습니다" -#: commands/tablecmds.c:17839 +#: commands/tablecmds.c:18555 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "다른 세션의 임시 테이블을 파티션 테이블로 추가할 수 없습니다" -#: commands/tablecmds.c:17846 +#: commands/tablecmds.c:18562 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "다른 세션의 임시 테이블을 파티션 테이블로 추가할 수 없습니다" -#: commands/tablecmds.c:17866 +#: commands/tablecmds.c:18582 +#, c-format +msgid "table \"%s\" being attached contains an identity column \"%s\"" +msgstr "" +"\"%s\" 테이블의 \"%s\" 칼럼에 식별자 속성이 있는데 하위 테이블이 되려고 합니" +"다." + +#: commands/tablecmds.c:18584 +#, c-format +msgid "The new partition may not contain an identity column." +msgstr "" +"새로 만들어지는 하위 테이블에는 해당 칼럼에 식별자 속성이 없을 수 있습니다." + +#: commands/tablecmds.c:18592 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "\"%s\" 테이블의 \"%s\" 칼럼이 상위 테이블인 \"%s\"에 없음" -#: commands/tablecmds.c:17869 +#: commands/tablecmds.c:18595 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "새 파티션 테이블은 상위 테이블의 칼럼과 동일해야 합니다." -#: commands/tablecmds.c:17881 +#: commands/tablecmds.c:18607 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "" "\"%s\" 트리거가 \"%s\" 테이블에 있어 파티션 테이블로 포함 될 수 없습니다" -#: commands/tablecmds.c:17883 +#: commands/tablecmds.c:18609 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "" "transition 테이블의 ROW 트리거들은 파티션 하위 테이블에서는 쓸 수 없습니다." -#: commands/tablecmds.c:18062 +#: commands/tablecmds.c:18785 #, c-format msgid "" "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "\"%s\" 외부 테이블을 파티션된 \"%s\" 테이블의 부분으로 추가 할 수 없음" -#: commands/tablecmds.c:18065 +#: commands/tablecmds.c:18788 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "\"%s\" 파티션 상위 테이블에 유니크 인덱스가 있습니다." -#: commands/tablecmds.c:18382 +#: commands/tablecmds.c:19110 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "기본 하위 파티션이 있을 때는 하위 파티션 테이블 분리 작업을 할 수 없음" -#: commands/tablecmds.c:18491 +#: commands/tablecmds.c:19219 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "\"%s\" 파티션 상위 테이블이 온라인 모드로 삭제 되었음" -#: commands/tablecmds.c:18497 +#: commands/tablecmds.c:19225 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "\"%s\" 파티션 하위 테이블이 온라인 모드로 삭제 되었음" -#: commands/tablecmds.c:19012 commands/tablecmds.c:19032 -#: commands/tablecmds.c:19053 commands/tablecmds.c:19072 -#: commands/tablecmds.c:19114 +#: commands/tablecmds.c:19817 commands/tablecmds.c:19837 +#: commands/tablecmds.c:19858 commands/tablecmds.c:19877 +#: commands/tablecmds.c:19919 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "\"%s\" 인덱스를 \"%s\" 인덱스의 파티션으로 추가할 수 없음" -#: commands/tablecmds.c:19015 +#: commands/tablecmds.c:19820 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "\"%s\" 인덱스는 이미 다른 인덱스에 추가되어 있음." -#: commands/tablecmds.c:19035 +#: commands/tablecmds.c:19840 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "\"%s\" 인덱스는 \"%s\" 테이블의 하위 파티션 대상 인덱스가 아닙니다." -#: commands/tablecmds.c:19056 +#: commands/tablecmds.c:19861 #, c-format msgid "The index definitions do not match." msgstr "인덱스 정의가 일치하지 않습니다." -#: commands/tablecmds.c:19075 +#: commands/tablecmds.c:19880 #, c-format msgid "" "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint " @@ -12426,393 +12939,393 @@ msgstr "" "\"%s\" 인덱스는 \"%s\" 테이블의 제약조건과 연결되어 있는데, \"%s\" 인덱스를 " "위한 제약조건이 없습니다." -#: commands/tablecmds.c:19117 +#: commands/tablecmds.c:19922 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "\"%s\" 파티션 용으로 다른 인덱스가 추가되어 있습니다." -#: commands/tablecmds.c:19353 +#: commands/tablecmds.c:20158 #, c-format msgid "column data type %s does not support compression" msgstr "%s 형의 칼럼 자료형은 압축을 지원하지 않음" -#: commands/tablecmds.c:19360 +#: commands/tablecmds.c:20165 #, c-format msgid "invalid compression method \"%s\"" msgstr "잘못된 압축 방법: \"%s\"" -#: commands/tablecmds.c:19386 +#: commands/tablecmds.c:20191 #, c-format msgid "invalid storage type \"%s\"" msgstr "잘못된 STORAGE 값: \"%s\"" -#: commands/tablecmds.c:19396 +#: commands/tablecmds.c:20201 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "%s 자료형의 column의 STORAGE 값은 반드시 PLAIN 이어야 합니다" -#: commands/tablespace.c:199 commands/tablespace.c:650 +#: commands/tablespace.c:193 commands/tablespace.c:644 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" 파일이 존재하지만 디렉터리가 아닙니다" -#: commands/tablespace.c:230 +#: commands/tablespace.c:224 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "\"%s\" 테이블스페이스를 만들 권한이 없습니다" -#: commands/tablespace.c:232 +#: commands/tablespace.c:226 #, c-format msgid "Must be superuser to create a tablespace." msgstr "테이블스페이스는 슈퍼유저만 만들 수 있습니다." -#: commands/tablespace.c:248 +#: commands/tablespace.c:242 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "테이블스페이스 위치에는 작은 따옴표를 사용할 수 없음" -#: commands/tablespace.c:261 +#: commands/tablespace.c:255 #, c-format msgid "tablespace location must be an absolute path" msgstr "테이블스페이스 경로는 절대경로여야 합니다" -#: commands/tablespace.c:273 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "테이블스페이스 경로가 너무 깁니다: \"%s\"" -#: commands/tablespace.c:280 +#: commands/tablespace.c:274 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "테이블스페이스 경로는 데이터 디렉터리 안에 있으면 안됩니다" -#: commands/tablespace.c:289 commands/tablespace.c:976 +#: commands/tablespace.c:283 commands/tablespace.c:970 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "\"%s\" 테이블스페이스 이름은 적당치 않습니다" -#: commands/tablespace.c:291 commands/tablespace.c:977 +#: commands/tablespace.c:285 commands/tablespace.c:971 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "\"pg_\" 문자로 시작하는 테이블스페이스는 시스템 테이블스페이스입니다." -#: commands/tablespace.c:310 commands/tablespace.c:998 +#: commands/tablespace.c:304 commands/tablespace.c:992 #, c-format msgid "tablespace \"%s\" already exists" msgstr "\"%s\" 이름의 테이블스페이스는 이미 있음" -#: commands/tablespace.c:326 +#: commands/tablespace.c:320 #, c-format msgid "pg_tablespace OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_tablespace OID 값이 지정되지 않음" -#: commands/tablespace.c:431 commands/tablespace.c:959 -#: commands/tablespace.c:1048 commands/tablespace.c:1117 -#: commands/tablespace.c:1263 commands/tablespace.c:1466 +#: commands/tablespace.c:425 commands/tablespace.c:953 +#: commands/tablespace.c:1042 commands/tablespace.c:1111 +#: commands/tablespace.c:1257 commands/tablespace.c:1460 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "\"%s\" 테이블스페이스 없음" -#: commands/tablespace.c:437 +#: commands/tablespace.c:431 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "\"%s\" 테이블스페이스 없음, 건너 뜀" -#: commands/tablespace.c:463 +#: commands/tablespace.c:457 #, c-format msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" msgstr "몇 객체들이 의존관계를 가져 \"%s\" 테이블스페이스를 삭제할 수 없음" -#: commands/tablespace.c:530 +#: commands/tablespace.c:524 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "\"%s\" 테이블스페이스는 비어있지 않음" -#: commands/tablespace.c:617 +#: commands/tablespace.c:611 #, c-format msgid "directory \"%s\" does not exist" msgstr "\"%s\" 디렉터리 없음" -#: commands/tablespace.c:618 +#: commands/tablespace.c:612 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "이 서버를 재시작하기 전에 이 테이블스페이스 용 디렉터리를 만드세요." -#: commands/tablespace.c:623 +#: commands/tablespace.c:617 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "\"%s\" 디렉터리 액세스 권한을 지정할 수 없음: %m" -#: commands/tablespace.c:655 +#: commands/tablespace.c:649 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "\"%s\" 디렉터리는 이미 테이블스페이스로 사용 중임" -#: commands/tablespace.c:833 commands/tablespace.c:919 +#: commands/tablespace.c:827 commands/tablespace.c:913 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 삭제할 수 없음: %m" -#: commands/tablespace.c:842 commands/tablespace.c:927 +#: commands/tablespace.c:836 commands/tablespace.c:921 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\" 디렉터리도, 심볼릭 링크도 아님" -#: commands/tablespace.c:1122 +#: commands/tablespace.c:1116 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "\"%s\" 테이블스페이스 없음" -#: commands/tablespace.c:1568 +#: commands/tablespace.c:1562 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "%u OID 테이블스페이스용 디렉터리는 삭제될 수 없음" -#: commands/tablespace.c:1570 +#: commands/tablespace.c:1564 #, c-format msgid "You can remove the directories manually if necessary." msgstr "필요하다면 OS 작업으로 그 디레터리를 삭제하세요" -#: commands/trigger.c:232 commands/trigger.c:243 +#: commands/trigger.c:225 commands/trigger.c:236 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" 개체는 테이블임" -#: commands/trigger.c:234 commands/trigger.c:245 +#: commands/trigger.c:227 commands/trigger.c:238 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "테이블에 INSTEAD OF 트리거는 설정할 수 없음" -#: commands/trigger.c:266 +#: commands/trigger.c:259 #, c-format msgid "\"%s\" is a partitioned table" msgstr "\"%s\" 개체는 파티션 상위 테이블임" -#: commands/trigger.c:268 +#: commands/trigger.c:261 #, c-format msgid "" "ROW triggers with transition tables are not supported on partitioned tables." msgstr "" "transition 테이블의 ROW 트리거들은 파티션 상위 테이블에서 지원하지 않음." -#: commands/trigger.c:280 commands/trigger.c:287 commands/trigger.c:451 +#: commands/trigger.c:273 commands/trigger.c:280 commands/trigger.c:444 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" 개체는 뷰임" -#: commands/trigger.c:282 +#: commands/trigger.c:275 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "뷰에 로우 단위 BEFORE, AFTER 트리거는 설정할 수 없음" -#: commands/trigger.c:289 +#: commands/trigger.c:282 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "뷰에 TRUNCATE 트리거는 설정할 수 없음" -#: commands/trigger.c:297 commands/trigger.c:309 commands/trigger.c:444 +#: commands/trigger.c:290 commands/trigger.c:302 commands/trigger.c:437 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" 개체는 외부 테이블임" -#: commands/trigger.c:299 +#: commands/trigger.c:292 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "외부테이블에 INSTEAD OF 트리거는 설정할 수 없음" -#: commands/trigger.c:311 +#: commands/trigger.c:304 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "외부 테이블에 제약 조건 트리거는 설정할 수 없음" -#: commands/trigger.c:316 commands/trigger.c:1332 commands/trigger.c:1439 +#: commands/trigger.c:309 commands/trigger.c:1325 commands/trigger.c:1432 #, c-format msgid "relation \"%s\" cannot have triggers" msgstr "\"%s\" 릴레이션에는 트리거를 지정할 수 없음" -#: commands/trigger.c:387 +#: commands/trigger.c:380 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "TRUNCATE FOR EACH ROW 트리거는 지원되지 않음" -#: commands/trigger.c:395 +#: commands/trigger.c:388 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "INSTEAD OF 트리거는 FOR EACH ROW 옵션으로 설정해야 함" -#: commands/trigger.c:399 +#: commands/trigger.c:392 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "INSTEAD OF 트리거는 WHEN 조건을 사용할 수 없음" -#: commands/trigger.c:403 +#: commands/trigger.c:396 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "INSTEAD OF 트리거는 칼럼 목록을 사용할 수 없음" -#: commands/trigger.c:432 +#: commands/trigger.c:425 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "REFERENCING 절에 ROW 변수 이름 붙이기를 지원하지 않습니다." -#: commands/trigger.c:433 +#: commands/trigger.c:426 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "이름 기반 전환 테이블은 OLD TABLE 또는 NEW TABLE 을 사용하세요." -#: commands/trigger.c:446 +#: commands/trigger.c:439 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "외부 테이블의 트리거들은 전환 테이블을 가질 수 없음." -#: commands/trigger.c:453 +#: commands/trigger.c:446 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "뷰에 정의한 트리거들은 전환 테이블을 가질 수 없음." -#: commands/trigger.c:469 +#: commands/trigger.c:462 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "" "ROW 트리거들이 있는 테이블을 파티션 테이블로 포함하는 기능은 지원하지 않습니" "다" -#: commands/trigger.c:473 +#: commands/trigger.c:466 #, c-format msgid "" "ROW triggers with transition tables are not supported on inheritance children" msgstr "전환 테이블용 ROW 트리거는 하위 상속 테이블에서는 지정할 수 없습니다." -#: commands/trigger.c:479 +#: commands/trigger.c:472 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "전환 테이블 이름은 AFTER 트리거에서만 사용할 수 있습니다." -#: commands/trigger.c:484 +#: commands/trigger.c:477 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "전환 테이블에서 TRUNCATE 트리거는 지원하지 않습니다" -#: commands/trigger.c:501 +#: commands/trigger.c:494 #, c-format msgid "" "transition tables cannot be specified for triggers with more than one event" msgstr "전환 테이블은 하나 이상의 이벤트에 대한 트리거를 지정할 수 없습니다" -#: commands/trigger.c:512 +#: commands/trigger.c:505 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "전환 테이블은 칼럼 목록들에 대한 트리거를 지정할 수 없습니다" -#: commands/trigger.c:529 +#: commands/trigger.c:522 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE 옵션은 INSERT 또는 UPDATE 트리거에서만 사용할 수 있습니다." -#: commands/trigger.c:534 +#: commands/trigger.c:527 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE 옵션은 중복해서 사용할 수 없음" -#: commands/trigger.c:544 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE 옵션은 DELETE 또는 UPDATE 트리거에서만 사용할 수 있습니다." -#: commands/trigger.c:549 +#: commands/trigger.c:542 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE 옵션은 중복해서 사용할 수 없음" -#: commands/trigger.c:559 +#: commands/trigger.c:552 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "OLD TABLE 과 NEW TABLE 뒤에 오는 이름이 같을 수는 없습니다." -#: commands/trigger.c:623 commands/trigger.c:636 +#: commands/trigger.c:616 commands/trigger.c:629 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "트리거의 WHEN 조건에는 칼럼 값을 참조할 수는 없음" -#: commands/trigger.c:628 +#: commands/trigger.c:621 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "INSERT 트리거에서의 WHEN 조건에는 OLD 값을 참조할 수 없음" -#: commands/trigger.c:641 +#: commands/trigger.c:634 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "DELETE 트리거에서의 WHEN 조건에는 NEW 값을 참조할 수 없음" -#: commands/trigger.c:646 +#: commands/trigger.c:639 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "WHEN 조건절이 있는 BEFORE 트리거는 NEW 시스템 칼럼을 참조할 수 없음" -#: commands/trigger.c:654 commands/trigger.c:662 +#: commands/trigger.c:647 commands/trigger.c:655 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "" "WHEN 조건절이 있는 BEFORE 트리거는 NEW 미리 계산된 칼럼을 참조할 수 없음" -#: commands/trigger.c:655 +#: commands/trigger.c:648 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "" "로우 전체 참조가 사용되었고, 그 테이블에는 미리 계산된 칼럼이 있습니다." -#: commands/trigger.c:770 commands/trigger.c:1614 +#: commands/trigger.c:763 commands/trigger.c:1607 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "\"%s\" 이름의 트리거가 \"%s\" 테이블에 이미 있습니다" -#: commands/trigger.c:783 +#: commands/trigger.c:776 #, c-format msgid "trigger \"%s\" for relation \"%s\" is an internal or a child trigger" msgstr "\"%s\" 트리거가 \"%s\" 테이블에 내장 또는 하위 트리거로 있음" -#: commands/trigger.c:802 +#: commands/trigger.c:795 #, c-format msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" msgstr " \"%s\" 트리거가 \"%s\" 릴레이션에 제약 조건 트리거로 있음" -#: commands/trigger.c:1404 commands/trigger.c:1557 commands/trigger.c:1838 +#: commands/trigger.c:1397 commands/trigger.c:1550 commands/trigger.c:1831 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 트리거는 \"%s\" 테이블에 없음" -#: commands/trigger.c:1529 +#: commands/trigger.c:1522 #, c-format msgid "cannot rename trigger \"%s\" on table \"%s\"" msgstr "\"%s\" 트리거(해당 테이블: \"%s\") 이름을 바꿀 수 없음" -#: commands/trigger.c:1531 +#: commands/trigger.c:1524 #, c-format msgid "Rename the trigger on the partitioned table \"%s\" instead." msgstr "대신에 상위 파티션 테이블인 \"%s\" 테이블의 트리거 이름을 바꾸세요." -#: commands/trigger.c:1631 +#: commands/trigger.c:1624 #, c-format msgid "renamed trigger \"%s\" on relation \"%s\"" msgstr "\"%s\" 트리거(해당 테이블: \"%s\") 이름을 바꿨음" -#: commands/trigger.c:1777 +#: commands/trigger.c:1770 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "액세스 권한 없음: \"%s\" 개체는 시스템 트리거임" -#: commands/trigger.c:2386 +#: commands/trigger.c:2379 #, c-format msgid "trigger function %u returned null value" msgstr "%u 트리거 함수가 null 값을 리턴했습니다" -#: commands/trigger.c:2446 commands/trigger.c:2664 commands/trigger.c:2917 -#: commands/trigger.c:3252 +#: commands/trigger.c:2439 commands/trigger.c:2657 commands/trigger.c:2910 +#: commands/trigger.c:3263 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENT 트리거는 리턴값이 있으면 안됩니다" -#: commands/trigger.c:2522 +#: commands/trigger.c:2515 #, c-format msgid "" "moving row to another partition during a BEFORE FOR EACH ROW trigger is not " @@ -12821,25 +13334,17 @@ msgstr "" "BEFORE FOR EACH ROW 트리거가 실행 중일 때 다른 파티션으로 로우는 옮기는 것은 " "지원 하지 않습니다." -#: commands/trigger.c:2523 +#: commands/trigger.c:2516 #, c-format msgid "" "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "" "\"%s\" 트리거가 실행되기 전에, 그 로우는 \"%s.%s\" 파티션에 있었습니다." -#: commands/trigger.c:3329 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:3330 executor/nodeModifyTable.c:1531 -#: executor/nodeModifyTable.c:1605 executor/nodeModifyTable.c:2364 -#: executor/nodeModifyTable.c:2447 executor/nodeModifyTable.c:3078 +#: 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 " @@ -12848,137 +13353,137 @@ msgstr "" "다른 로우를 변경하는 일을 BEFORE 트리거 대신에 AFTER 트리거 사용을 고려해 보" "십시오" -#: commands/trigger.c:3371 executor/nodeLockRows.c:228 -#: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:308 -#: executor/nodeModifyTable.c:1547 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:3379 executor/nodeModifyTable.c:1637 -#: executor/nodeModifyTable.c:2464 executor/nodeModifyTable.c:2613 -#: executor/nodeModifyTable.c:2966 +#: 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:4586 +#: commands/trigger.c:4601 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "보안 제한 작업 내에서는 지연 속성 트리거를 실행할 수 없음" -#: commands/trigger.c:5769 +#: commands/trigger.c:5782 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "\"%s\" 제약 조건은 DEFERRABLE 속성으로 만들어지지 않았습니다" -#: commands/trigger.c:5792 +#: commands/trigger.c:5805 #, c-format msgid "constraint \"%s\" does not exist" msgstr "\"%s\" 이름의 제약 조건이 없음" -#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:635 +#: commands/tsearchcmds.c:124 commands/tsearchcmds.c:641 #, c-format msgid "function %s should return type %s" msgstr "%s 함수는 %s 자료형을 반환해야 함" -#: commands/tsearchcmds.c:194 +#: commands/tsearchcmds.c:200 #, c-format msgid "must be superuser to create text search parsers" msgstr "슈퍼유저만 전문 검색 파서를 만들 수 있음" -#: commands/tsearchcmds.c:247 +#: commands/tsearchcmds.c:253 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "\"%s\" 전문 검색 파서 매개 변수를 인식할 수 없음" -#: commands/tsearchcmds.c:257 +#: commands/tsearchcmds.c:263 #, c-format msgid "text search parser start method is required" msgstr "텍스트 검색 파서 start 메서드가 필요함" -#: commands/tsearchcmds.c:262 +#: commands/tsearchcmds.c:268 #, c-format msgid "text search parser gettoken method is required" msgstr "텍스트 검색 파서 gettoken 메서드가 필요함" -#: commands/tsearchcmds.c:267 +#: commands/tsearchcmds.c:273 #, c-format msgid "text search parser end method is required" msgstr "텍스트 검색 파서 end 메서드가 필요함" -#: commands/tsearchcmds.c:272 +#: commands/tsearchcmds.c:278 #, c-format msgid "text search parser lextypes method is required" msgstr "텍스트 검색 파서 lextypes 메서드가 필요함" -#: commands/tsearchcmds.c:366 +#: commands/tsearchcmds.c:372 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "\"%s\" 전문 검색 템플릿이 옵션을 수락하지 않음" -#: commands/tsearchcmds.c:440 +#: commands/tsearchcmds.c:446 #, c-format msgid "text search template is required" msgstr "전문 검색 템플릿이 필요함" -#: commands/tsearchcmds.c:701 +#: commands/tsearchcmds.c:707 #, c-format msgid "must be superuser to create text search templates" msgstr "슈퍼유저만 전문 검색 템플릿을 만들 수 있음" -#: commands/tsearchcmds.c:743 +#: commands/tsearchcmds.c:749 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "\"%s\" 전문 검색 템플릿 매개 변수를 인식할 수 없음" -#: commands/tsearchcmds.c:753 +#: commands/tsearchcmds.c:759 #, c-format msgid "text search template lexize method is required" msgstr "전문 검색 템플릿 lexize 메서드가 필요함" -#: commands/tsearchcmds.c:933 +#: commands/tsearchcmds.c:939 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "\"%s\" 전문 검색 구성 매개 변수를 인식할 수 없음" -#: commands/tsearchcmds.c:940 +#: commands/tsearchcmds.c:946 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "PARSER 옵션과 COPY 옵션을 모두 지정할 수 없음" -#: commands/tsearchcmds.c:976 +#: commands/tsearchcmds.c:982 #, c-format msgid "text search parser is required" msgstr "전문 검색 파서가 필요함" -#: commands/tsearchcmds.c:1241 +#: commands/tsearchcmds.c:1277 #, c-format msgid "token type \"%s\" does not exist" msgstr "\"%s\" 토큰 형식이 없음" -#: commands/tsearchcmds.c:1501 +#: commands/tsearchcmds.c:1540 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "\"%s\" 토큰 형식에 대한 매핑이 없음" -#: commands/tsearchcmds.c:1507 +#: commands/tsearchcmds.c:1546 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "\"%s\" 토큰 형식에 대한 매핑이 없음, 건너뜀" -#: commands/tsearchcmds.c:1670 commands/tsearchcmds.c:1785 +#: commands/tsearchcmds.c:1707 commands/tsearchcmds.c:1822 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "잘못된 매개 변수 목록 형식: \"%s\"" -#: commands/typecmds.c:217 +#: commands/typecmds.c:221 #, c-format msgid "must be superuser to create a base type" msgstr "슈퍼유저만 기본 형식을 만들 수 있음" -#: commands/typecmds.c:275 +#: commands/typecmds.c:279 #, c-format msgid "" "Create the type as a shell type, then create its I/O functions, then do a " @@ -12987,127 +13492,127 @@ msgstr "" "쉘 타입으로 그 자료형을 만들고, 그것을 쓰기 위한 I/O 함수를 만들고, 끝으로 " "CREATE TYPE 명령을 사용해서 자료형을 만드세요." -#: commands/typecmds.c:327 commands/typecmds.c:1450 commands/typecmds.c:4257 +#: commands/typecmds.c:331 commands/typecmds.c:1460 commands/typecmds.c:4480 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "잘못된 \"%s\" 속성의 자료형" -#: commands/typecmds.c:382 +#: commands/typecmds.c:386 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "\"%s\" 형식 범주가 잘못됨: 단순 ASCII여야 함" -#: commands/typecmds.c:401 +#: commands/typecmds.c:405 #, c-format msgid "array element type cannot be %s" msgstr "배열 요소의 자료형으로 %s 자료형을 사용할 수 없습니다" -#: commands/typecmds.c:433 +#: commands/typecmds.c:437 #, c-format msgid "alignment \"%s\" not recognized" msgstr "잘못된 ALIGNMENT 값: \"%s\"" -#: commands/typecmds.c:450 commands/typecmds.c:4131 +#: commands/typecmds.c:454 commands/typecmds.c:4354 #, c-format msgid "storage \"%s\" not recognized" msgstr "잘못된 STORAGE 값: \"%s\"" -#: commands/typecmds.c:461 +#: commands/typecmds.c:465 #, c-format msgid "type input function must be specified" msgstr "자료형 입력 함수를 지정하십시오" -#: commands/typecmds.c:465 +#: commands/typecmds.c:469 #, c-format msgid "type output function must be specified" msgstr "자료형 출력 함수를 지정하십시오" -#: commands/typecmds.c:470 +#: commands/typecmds.c:474 #, c-format msgid "" "type modifier output function is useless without a type modifier input " "function" msgstr "형식 한정자 입력 함수가 없으면 형식 한정자 출력 함수는 의미가 없음" -#: commands/typecmds.c:512 +#: commands/typecmds.c:516 #, c-format msgid "element type cannot be specified without a subscripting function" msgstr "" "요소 자료형은 하위요소 지정 함수(subscripting function) 없이 정의할 수 없음" -#: commands/typecmds.c:781 +#: commands/typecmds.c:785 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" 자료형은 도메인의 기반 자료형이 아닙니다" -#: commands/typecmds.c:879 +#: commands/typecmds.c:883 #, c-format msgid "multiple default expressions" msgstr "default 표현식 여러개 있음" -#: commands/typecmds.c:942 commands/typecmds.c:951 +#: commands/typecmds.c:946 commands/typecmds.c:955 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "NULL/NOT NULL 조건이 함께 있음" -#: commands/typecmds.c:967 +#: commands/typecmds.c:971 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "도메인용 체크 제약 조건에는 NO INHERIT 옵션을 사용할 수 없음" -#: commands/typecmds.c:976 commands/typecmds.c:2956 +#: commands/typecmds.c:980 commands/typecmds.c:2940 #, c-format msgid "unique constraints not possible for domains" msgstr "고유 제약 조건은 도메인 정의에 사용할 수 없음" -#: commands/typecmds.c:982 commands/typecmds.c:2962 +#: commands/typecmds.c:986 commands/typecmds.c:2946 #, c-format msgid "primary key constraints not possible for domains" msgstr "기본키 제약 조건을 도메인 정의에 사용할 수 없음" -#: commands/typecmds.c:988 commands/typecmds.c:2968 +#: commands/typecmds.c:992 commands/typecmds.c:2952 #, c-format msgid "exclusion constraints not possible for domains" msgstr "exclusion 제약 조건은 도메인에는 사용할 수 없음" -#: commands/typecmds.c:994 commands/typecmds.c:2974 +#: commands/typecmds.c:998 commands/typecmds.c:2958 #, c-format msgid "foreign key constraints not possible for domains" msgstr "참조키(foreign key) 제약 조건은 도메인(domain) 정의에 사용할 수 없음" -#: commands/typecmds.c:1003 commands/typecmds.c:2983 +#: commands/typecmds.c:1007 commands/typecmds.c:2967 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "도메인에 대해 제약 조건 지연을 지정할 수 없음" -#: commands/typecmds.c:1317 utils/cache/typcache.c:2561 +#: commands/typecmds.c:1327 utils/cache/typcache.c:2570 #, c-format msgid "%s is not an enum" msgstr "%s 개체는 나열형이 아님" -#: commands/typecmds.c:1458 +#: commands/typecmds.c:1468 #, c-format msgid "type attribute \"subtype\" is required" msgstr "\"subtype\" 속성이 필요함" -#: commands/typecmds.c:1463 +#: commands/typecmds.c:1473 #, c-format msgid "range subtype cannot be %s" msgstr "range subtype은 %s 아니여야 함" -#: commands/typecmds.c:1482 +#: commands/typecmds.c:1492 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "" "range 형에 정렬 규칙을 지정했지만, 소속 자료형이 그 정렬 규칙을 지원하지 않습" "니다" -#: commands/typecmds.c:1492 +#: commands/typecmds.c:1502 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "미리 만들어진 쉘 타입 없는 canonical 함수를 지정할 수 없음" -#: commands/typecmds.c:1493 +#: commands/typecmds.c:1503 #, c-format msgid "" "Create the type as a shell type, then create its canonicalization function, " @@ -13116,92 +13621,92 @@ msgstr "" "먼저 쉘 타입 자료형을 만들고, canonical 함수를 만든 다음 CREATE TYPE 명령으" "로 해당 자료형을 만드세요." -#: commands/typecmds.c:1965 +#: commands/typecmds.c:1975 #, c-format msgid "type input function %s has multiple matches" msgstr "자료형 %s 입력 함수가 여러 개 있습니다" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1993 #, c-format msgid "type input function %s must return type %s" msgstr "자료형 %s 입력 함수의 %s 자료형을 반환해야 합니다" -#: commands/typecmds.c:1999 +#: commands/typecmds.c:2009 #, c-format msgid "type input function %s should not be volatile" msgstr "%s 자료형 입력 함수는 volatile 특성이 없어야 합니다" -#: commands/typecmds.c:2027 +#: commands/typecmds.c:2037 #, c-format msgid "type output function %s must return type %s" msgstr "%s 자료형 출력 함수는 %s 자료형을 반환해야 합니다" -#: commands/typecmds.c:2034 +#: commands/typecmds.c:2044 #, c-format msgid "type output function %s should not be volatile" msgstr "%s 자료형 출력 함수는 volatile 특성이 없어야 합니다" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2073 #, c-format msgid "type receive function %s has multiple matches" msgstr "%s 자료형 receive 함수가 여러 개 있습니다" -#: commands/typecmds.c:2081 +#: commands/typecmds.c:2091 #, c-format msgid "type receive function %s must return type %s" msgstr "%s 자료형 receive 함수는 %s 자료형을 반환해야 합니다" -#: commands/typecmds.c:2088 +#: commands/typecmds.c:2098 #, c-format msgid "type receive function %s should not be volatile" msgstr "%s 자료형 수신 함수는 volatile 특성이 없어야 합니다" -#: commands/typecmds.c:2116 +#: commands/typecmds.c:2126 #, c-format msgid "type send function %s must return type %s" msgstr "%s 자료형 전송 함수는 %s 자료형을 반환해야 합니다" -#: commands/typecmds.c:2123 +#: commands/typecmds.c:2133 #, c-format msgid "type send function %s should not be volatile" msgstr "%s 자료형 송신 함수는 volatile 특성이 없어야 합니다" -#: commands/typecmds.c:2150 +#: commands/typecmds.c:2160 #, c-format msgid "typmod_in function %s must return type %s" msgstr "%s typmod_in 함수는 %s 자료형을 반환해야 함" -#: commands/typecmds.c:2157 +#: commands/typecmds.c:2167 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "%s 자료형 형변환 입력 함수는 volatile 특성이 없어야 합니다" -#: commands/typecmds.c:2184 +#: commands/typecmds.c:2194 #, c-format msgid "typmod_out function %s must return type %s" msgstr "%s typmod_out 함수는 %s 자료형을 반환해야 함" -#: commands/typecmds.c:2191 +#: commands/typecmds.c:2201 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "%s 자료형 형변환 출력 함수는 volatile 특성이 없어야 합니다" -#: commands/typecmds.c:2218 +#: commands/typecmds.c:2228 #, c-format msgid "type analyze function %s must return type %s" msgstr "%s 자료형 분석 함수는 %s 자료형을 반환해야 함" -#: commands/typecmds.c:2247 +#: commands/typecmds.c:2257 #, c-format msgid "type subscripting function %s must return type %s" msgstr "%s subscripting 함수의 반환값 자료형은 %s 형이어야 함" -#: commands/typecmds.c:2257 +#: commands/typecmds.c:2267 #, c-format msgid "user-defined types cannot use subscripting function %s" msgstr "사용자 정의 자료형은 %s subscripting 함수에서 쓸 수 없음" -#: commands/typecmds.c:2303 +#: commands/typecmds.c:2313 #, c-format msgid "" "You must specify an operator class for the range type or define a default " @@ -13210,64 +13715,64 @@ msgstr "" "subtype을 위한 기본 연산자 클래스나 range 자료형을 위한 하나의 연산자 클래스" "를 지정해야 합니다" -#: commands/typecmds.c:2334 +#: commands/typecmds.c:2344 #, c-format msgid "range canonical function %s must return range type" msgstr "%s 범위 기준 함수는 range 자료형을 반환해야 합니다" -#: commands/typecmds.c:2340 +#: commands/typecmds.c:2350 #, c-format msgid "range canonical function %s must be immutable" msgstr "%s 범위 기준 함수는 immutable 속성이어야 합니다" -#: commands/typecmds.c:2376 +#: commands/typecmds.c:2386 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "%s 범위 하위 자료 비교 함수는 %s 자료형을 반환해야 합니다" -#: commands/typecmds.c:2383 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "%s 범위 하위 자료 비교 함수는 immutable 속성이어야 합니다" -#: commands/typecmds.c:2410 +#: commands/typecmds.c:2420 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_type 배열 OID 값이 지정되지 않았습니다" -#: commands/typecmds.c:2443 +#: commands/typecmds.c:2453 #, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" msgstr "" "이진 업그레이드 작업 때 pg_type multirange OID 값이 지정되지 않았습니다" -#: commands/typecmds.c:2476 +#: commands/typecmds.c:2486 #, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" msgstr "" "이진 업그레이드 작업 때 pg_type multirange 배열 OID 값이 지정되지 않았습니다" -#: commands/typecmds.c:2772 -#, c-format -msgid "column \"%s\" of table \"%s\" contains null values" -msgstr "\"%s\" 열(해당 테이블 \"%s\")의 자료 가운데 null 값이 있습니다" - -#: commands/typecmds.c:2885 commands/typecmds.c:3086 +#: commands/typecmds.c:2868 commands/typecmds.c:3093 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "\"%s\" 제약 조건 \"%s\" 도메인에 포함되어 있지 않습니다." -#: commands/typecmds.c:2889 +#: commands/typecmds.c:2872 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "\"%s\" 제약 조건 \"%s\" 도메인에 포함되어 있지 않음, 건너뜀" -#: commands/typecmds.c:3093 +#: commands/typecmds.c:3100 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "\"%s\" 제약 조건(해당 도메인: \"%s\")은 check 제약조건이 아님" -#: commands/typecmds.c:3194 +#: commands/typecmds.c:3180 +#, c-format +msgid "column \"%s\" of table \"%s\" contains null values" +msgstr "\"%s\" 열(해당 테이블 \"%s\")의 자료 가운데 null 값이 있습니다" + +#: commands/typecmds.c:3269 #, c-format msgid "" "column \"%s\" of table \"%s\" contains values that violate the new constraint" @@ -13275,140 +13780,147 @@ msgstr "" "\"%s\" 열(해당 테이블 \"%s\")의 자료 중에, 새 제약 조건을 위반하는 자료가 있" "습니다" -#: commands/typecmds.c:3423 commands/typecmds.c:3622 commands/typecmds.c:3703 -#: commands/typecmds.c:3889 +#: commands/typecmds.c:3498 commands/typecmds.c:3772 commands/typecmds.c:3857 +#: commands/typecmds.c:4073 #, c-format msgid "%s is not a domain" msgstr "\"%s\" 이름의 개체는 도메인이 아닙니다" -#: commands/typecmds.c:3455 +#: commands/typecmds.c:3532 commands/typecmds.c:3686 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "\"%s\" 제약 조건이 \"%s\" 도메인에 이미 지정되어 있습니다" -#: commands/typecmds.c:3506 +#: commands/typecmds.c:3583 #, c-format msgid "cannot use table references in domain check constraint" msgstr "도메인 용 체크 제약 조건에서는 테이블 참조를 사용할 수 없습니다" -#: commands/typecmds.c:3634 commands/typecmds.c:3715 commands/typecmds.c:4006 +#: commands/typecmds.c:3784 commands/typecmds.c:3869 commands/typecmds.c:4223 #, c-format msgid "%s is a table's row type" msgstr "%s 자료형은 테이블의 행 자료형(row type)입니다" -#: commands/typecmds.c:3636 commands/typecmds.c:3717 commands/typecmds.c:4008 -#, c-format -msgid "Use ALTER TABLE instead." -msgstr "대신 ALTER TABLE을 사용하십시오." - -#: commands/typecmds.c:3642 commands/typecmds.c:3723 commands/typecmds.c:3921 +#: commands/typecmds.c:3794 commands/typecmds.c:3879 commands/typecmds.c:4121 #, c-format msgid "cannot alter array type %s" -msgstr "%s 배열 형식을 변경할 수 없음" +msgstr "%s 배열 자료형을 바꿀 수 없음" -#: commands/typecmds.c:3644 commands/typecmds.c:3725 commands/typecmds.c:3923 +#: commands/typecmds.c:3796 commands/typecmds.c:3881 commands/typecmds.c:4123 #, c-format msgid "You can alter type %s, which will alter the array type as well." -msgstr "%s 형식을 변경할 수 있으며, 이렇게 하면 배열 형식도 변경됩니다." +msgstr "" +"%s 자료형을 바꿀 수 있으며, 이렇게 하면 해당 자료형 배열의 자료형도 변경됩니" +"다." -#: commands/typecmds.c:3991 +#: commands/typecmds.c:3892 +#, c-format +msgid "cannot alter multirange type %s" +msgstr "%s 다중 범위 자료형은 바꿀 수 없음" + +#: commands/typecmds.c:3895 +#, c-format +msgid "You can alter type %s, which will alter the multirange type as well." +msgstr "%s 자료형을 바꿀 수 있으며, 이렇게 하면 다중 범위 자료형도 변경됩니다." + +#: commands/typecmds.c:4202 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "%s 자료형이 이미 \"%s\" 스키마 안에 있습니다" -#: commands/typecmds.c:4159 +#: commands/typecmds.c:4382 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "저장 옵션을 PLAIN으로 바꿀 수 없음" -#: commands/typecmds.c:4252 +#: commands/typecmds.c:4475 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "\"%s\" 자료형 속성 바꿀 수 없음" -#: commands/typecmds.c:4270 +#: commands/typecmds.c:4493 #, c-format msgid "must be superuser to alter a type" msgstr "슈퍼유저만 자료형 속성을 바꿀 수 있음" -#: commands/typecmds.c:4291 commands/typecmds.c:4300 +#: commands/typecmds.c:4514 commands/typecmds.c:4523 #, c-format msgid "%s is not a base type" msgstr "\"%s\" 개체는 기본 자료형이 아님" -#: commands/user.c:201 +#: commands/user.c:200 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID는 더 이상 지정할 수 없음" -#: commands/user.c:319 commands/user.c:325 commands/user.c:331 -#: commands/user.c:337 commands/user.c:343 +#: commands/user.c:318 commands/user.c:324 commands/user.c:330 +#: commands/user.c:336 commands/user.c:342 #, c-format msgid "permission denied to create role" msgstr "롤 만들 권한 없음" -#: commands/user.c:320 +#: commands/user.c:319 #, c-format msgid "Only roles with the %s attribute may create roles." msgstr "%s 속성을 가지고 있는 롤만이 롤을 만들 수 있습니다." -#: commands/user.c:326 commands/user.c:332 commands/user.c:338 -#: commands/user.c:344 +#: commands/user.c:325 commands/user.c:331 commands/user.c:337 +#: commands/user.c:343 #, c-format msgid "" "Only roles with the %s attribute may create roles with the %s attribute." msgstr "%s 속성을 가지고 있는 롤만 %s 속성을 가진 롤을 만들 수 있습니다." -#: commands/user.c:355 commands/user.c:1393 commands/user.c:1400 -#: utils/adt/acl.c:5401 utils/adt/acl.c:5407 gram.y:16726 gram.y:16772 +#: commands/user.c:354 commands/user.c:1386 commands/user.c:1393 +#: utils/adt/acl.c:5574 utils/adt/acl.c:5580 gram.y:17310 gram.y:17356 #, c-format msgid "role name \"%s\" is reserved" msgstr "\"%s\" 롤 이름은 내부적으로 사용되고 있습니다" -#: commands/user.c:357 commands/user.c:1395 commands/user.c:1402 +#: commands/user.c:356 commands/user.c:1388 commands/user.c:1395 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "\"pg_\"로 시작하는 롤 이름은 사용할 수 없습니다." -#: commands/user.c:378 commands/user.c:1417 +#: commands/user.c:377 commands/user.c:1410 #, c-format msgid "role \"%s\" already exists" msgstr "\"%s\" 롤 이름이 이미 있습니다" -#: commands/user.c:440 commands/user.c:925 +#: commands/user.c:439 commands/user.c:924 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "비밀번호로 빈 문자열을 사용할 수 없습니다. 비밀번호를 없앱니다" -#: commands/user.c:469 +#: commands/user.c:468 #, c-format msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_authid OID 값이 지정되지 않았습니다" -#: commands/user.c:653 commands/user.c:1011 +#: commands/user.c:652 commands/user.c:1010 msgid "Cannot alter reserved roles." msgstr "예약된 롤은 수정할 수 없습니다." -#: commands/user.c:760 commands/user.c:766 commands/user.c:782 -#: commands/user.c:790 commands/user.c:804 commands/user.c:810 -#: commands/user.c:816 commands/user.c:825 commands/user.c:870 -#: commands/user.c:1033 commands/user.c:1044 +#: commands/user.c:759 commands/user.c:765 commands/user.c:781 +#: commands/user.c:789 commands/user.c:803 commands/user.c:809 +#: commands/user.c:815 commands/user.c:824 commands/user.c:869 +#: commands/user.c:1032 commands/user.c:1043 #, c-format msgid "permission denied to alter role" msgstr "롤 변경 권한 없음" -#: commands/user.c:761 commands/user.c:1034 +#: commands/user.c:760 commands/user.c:1033 #, c-format msgid "Only roles with the %s attribute may alter roles with the %s attribute." msgstr "%s 속성이 있는 롤만 %s 속성을 가진 롤을 바꿀 수 있습니다." -#: commands/user.c:767 commands/user.c:805 commands/user.c:811 -#: commands/user.c:817 +#: commands/user.c:766 commands/user.c:804 commands/user.c:810 +#: commands/user.c:816 #, c-format msgid "Only roles with the %s attribute may change the %s attribute." msgstr "%s 속성이 있는 롤만 %s 속성을 바꿀 수 있습니다." -#: commands/user.c:783 commands/user.c:1045 +#: commands/user.c:782 commands/user.c:1044 #, c-format msgid "" "Only roles with the %s attribute and the %s option on role \"%s\" may alter " @@ -13416,7 +13928,7 @@ msgid "" msgstr "" "%s 속성과 %s 옵션을 지정한 롤(해당 롤: \"%s\")만 이 롤을 수정할 수 있습니다." -#: commands/user.c:791 +#: commands/user.c:790 #, c-format msgid "" "To change another role's password, the current user must have the %s " @@ -13425,32 +13937,32 @@ msgstr "" "다른 롤의 비밀번호를 바꾸려면, 현재 사용자는 %s 속성과 %s 옵션이 지정된 롤이" "어야 합니다." -#: commands/user.c:826 +#: commands/user.c:825 #, c-format -msgid "Only roles with the %s option on role \"%s\" may add members." +msgid "Only roles with the %s option on role \"%s\" may add or drop members." msgstr "%s 옵션 (해당 롤: \"%s\")이 있는 롤만 구성원을 추가할 수 있습니다." -#: commands/user.c:871 +#: commands/user.c:870 #, c-format -msgid "The bootstrap user must have the %s attribute." -msgstr "부트스트랩 사용자는 %s 속성을 가지고 있어야 합니다." +msgid "The bootstrap superuser must have the %s attribute." +msgstr "부트스트랩 슈퍼유저는 %s 속성을 가지고 있어야 합니다." -#: commands/user.c:1076 +#: commands/user.c:1075 #, c-format msgid "permission denied to alter setting" msgstr "설정 변경 권한 없음" -#: commands/user.c:1077 +#: commands/user.c:1076 #, c-format msgid "Only roles with the %s attribute may alter settings globally." msgstr "%s 속성이 부여된 롤만 전역 환경 설정을 바꿀 수 있습니다." -#: commands/user.c:1101 commands/user.c:1173 commands/user.c:1179 +#: commands/user.c:1100 commands/user.c:1171 commands/user.c:1177 #, c-format msgid "permission denied to drop role" msgstr "롤을 삭제할 권한이 없습니다" -#: commands/user.c:1102 +#: commands/user.c:1101 #, c-format msgid "" "Only roles with the %s attribute and the %s option on the target roles may " @@ -13459,41 +13971,41 @@ msgstr "" "작업 롤은 %s 속성이 있어야하고, 삭제할 대상 롤을 %s 옵션이 있는 경우만 롤을 " "삭제 할 수 있음" -#: commands/user.c:1127 +#: commands/user.c:1125 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "DROP ROLE 명령으로 삭제할 수 없는 특별한 롤입니다" -#: commands/user.c:1137 commands/user.c:1364 commands/variable.c:836 -#: commands/variable.c:839 commands/variable.c:923 commands/variable.c:926 -#: utils/adt/acl.c:356 utils/adt/acl.c:376 utils/adt/acl.c:5256 -#: utils/adt/acl.c:5304 utils/adt/acl.c:5332 utils/adt/acl.c:5351 -#: utils/adt/regproc.c:1551 utils/init/miscinit.c:757 +#: 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\" 롤(role) 없음" -#: commands/user.c:1142 +#: commands/user.c:1140 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "\"%s\" 룰(rule) 없음, 건너 뜀" -#: commands/user.c:1155 commands/user.c:1159 +#: commands/user.c:1153 commands/user.c:1157 #, c-format msgid "current user cannot be dropped" msgstr "현재 사용자는 삭제 될 수 없습니다" -#: commands/user.c:1163 +#: commands/user.c:1161 #, c-format msgid "session user cannot be dropped" msgstr "세션 사용자는 삭제 될 수 없습니다" -#: commands/user.c:1174 +#: commands/user.c:1172 #, c-format msgid "Only roles with the %s attribute may drop roles with the %s attribute." msgstr "%s 속성이 있는 롤만 %s 속성을 가진 롤을 지울 수 있습니다." -#: commands/user.c:1180 +#: commands/user.c:1178 #, c-format msgid "" "Only roles with the %s attribute and the %s option on role \"%s\" may drop " @@ -13501,33 +14013,33 @@ msgid "" msgstr "" "%s 속성과 %s 옵션을 지정한 롤(해당 롤: \"%s\")만 이 롤을 지울 수 있습니다." -#: commands/user.c:1306 +#: commands/user.c:1299 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "기타 다른 개체들이 이 롤에 의존하고 있어, \"%s\" 롤을 삭제할 수 없음" -#: commands/user.c:1380 +#: commands/user.c:1373 #, c-format msgid "session user cannot be renamed" msgstr "세션 사용자의 이름은 바꿀 수 없습니다" -#: commands/user.c:1384 +#: commands/user.c:1377 #, c-format msgid "current user cannot be renamed" msgstr "현재 사용자의 이름은 바꿀 수 없습니다" -#: commands/user.c:1428 commands/user.c:1438 +#: commands/user.c:1421 commands/user.c:1431 #, c-format msgid "permission denied to rename role" msgstr "롤 이름 바꾸기 권한 없음" -#: commands/user.c:1429 +#: commands/user.c:1422 #, c-format msgid "" "Only roles with the %s attribute may rename roles with the %s attribute." msgstr "%s 속성을 가지고 있는 롤만 %s 속성을 가진 롤 이름을 바꿀 수 있습니다." -#: commands/user.c:1439 +#: commands/user.c:1432 #, c-format msgid "" "Only roles with the %s attribute and the %s option on role \"%s\" may rename " @@ -13535,137 +14047,137 @@ msgid "" msgstr "" "%s 속성과 %s 옵션을 가진 롤(해당 롤: \"%s\")만 이 롤 이름을 바꿀 수 있습니다." -#: commands/user.c:1461 +#: commands/user.c:1454 #, c-format msgid "MD5 password cleared because of role rename" msgstr "롤 이름이 변경 되어 MD5 암호를 지웠습니다" -#: commands/user.c:1525 gram.y:1260 +#: commands/user.c:1518 gram.y:1294 #, c-format msgid "unrecognized role option \"%s\"" msgstr "인식할 수 없는 롤 옵션 \"%s\"" -#: commands/user.c:1530 +#: commands/user.c:1523 #, c-format msgid "unrecognized value for role option \"%s\": \"%s\"" msgstr "\"%s\" 롤 옵션에서 쓸 수 없는 값: \"%s\"" -#: commands/user.c:1563 +#: commands/user.c:1556 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "GRANT/REVOKE ROLE에 열 이름을 포함할 수 없음" -#: commands/user.c:1603 +#: commands/user.c:1596 #, c-format msgid "permission denied to drop objects" msgstr "개체를 삭제할 권한이 없음" -#: commands/user.c:1604 +#: commands/user.c:1597 #, c-format msgid "Only roles with privileges of role \"%s\" may drop objects owned by it." msgstr "\"%s\" 롤의 권한을 가진 롤만 해당 객체를 삭제할 수 있습니다." -#: commands/user.c:1632 commands/user.c:1643 +#: commands/user.c:1625 commands/user.c:1636 #, c-format msgid "permission denied to reassign objects" msgstr "개체 권한을 재 지정할 권한이 없음" -#: commands/user.c:1633 +#: commands/user.c:1626 #, c-format msgid "" "Only roles with privileges of role \"%s\" may reassign objects owned by it." msgstr "\"%s\" 롤의 권한을 가진 롤만 해당 객체의 소유주를 바꿀 수 있습니다." -#: commands/user.c:1644 +#: commands/user.c:1637 #, c-format msgid "Only roles with privileges of role \"%s\" may reassign objects to it." msgstr "\"%s\" 롤의 권한을 가진 롤만 해당 객체를 다시 지정 할 수 있습니다." -#: commands/user.c:1740 +#: commands/user.c:1733 #, c-format msgid "role \"%s\" cannot be a member of any role" msgstr "\"%s\" 롤은 다른 롤의 맴버가 될 수 없음" -#: commands/user.c:1753 +#: commands/user.c:1746 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "\"%s\" 롤은 \"%s\" 롤의 구성원입니다" -#: commands/user.c:1793 commands/user.c:1819 +#: commands/user.c:1786 commands/user.c:1812 #, c-format msgid "%s option cannot be granted back to your own grantor" msgstr "%s 옵션은 이 롤에 권한 부여한 롤에게 다시 부여될 수 없습니다." -#: commands/user.c:1896 +#: commands/user.c:1889 #, c-format msgid "" "role \"%s\" has already been granted membership in role \"%s\" by role \"%s\"" msgstr "\"%s\" 롤은 \"%s\"롤의 구성원입니다, 해당 작업 롤: \"%s\"" -#: commands/user.c:2031 +#: commands/user.c:2024 #, c-format msgid "" "role \"%s\" has not been granted membership in role \"%s\" by role \"%s\"" msgstr "\"%s\" 롤은 \"%s\"롤의 구성원이 아닙니다, 해당 작업 롤: \"%s\"" -#: commands/user.c:2131 +#: commands/user.c:2124 #, c-format msgid "role \"%s\" cannot have explicit members" msgstr "\"%s\" 롤은 명시적 맴버를 가질 수 없음" -#: commands/user.c:2142 commands/user.c:2165 +#: commands/user.c:2135 commands/user.c:2158 #, c-format msgid "permission denied to grant role \"%s\"" msgstr "\"%s\" 롤 권한을 지정할 수 없음" -#: commands/user.c:2144 +#: commands/user.c:2137 #, c-format msgid "Only roles with the %s attribute may grant roles with the %s attribute." msgstr "%s 속성이 있는 롤만 %s 속성 권한을 부여할 수 있음." -#: commands/user.c:2149 commands/user.c:2172 +#: commands/user.c:2142 commands/user.c:2165 #, c-format msgid "permission denied to revoke role \"%s\"" msgstr "\"%s\" 롤 권한 회수할 수 없음" -#: commands/user.c:2151 +#: commands/user.c:2144 #, c-format msgid "" "Only roles with the %s attribute may revoke roles with the %s attribute." msgstr "%s 속성이 있는 롤만이 %s 속성 권한을 회수할 수 있음." -#: commands/user.c:2167 +#: commands/user.c:2160 #, c-format msgid "Only roles with the %s option on role \"%s\" may grant this role." msgstr "%s 옵션을 롤(해당 롤: \"%s\")만이 이 롤 권한을 부여할 수 있음." -#: commands/user.c:2174 +#: commands/user.c:2167 #, c-format msgid "Only roles with the %s option on role \"%s\" may revoke this role." msgstr "%s 옵션을 롤(해당 롤: \"%s\")만이 이 롤 권한을 회수할 수 있음." -#: commands/user.c:2254 commands/user.c:2263 +#: commands/user.c:2247 commands/user.c:2256 #, c-format msgid "permission denied to grant privileges as role \"%s\"" msgstr "\"%s\" 롤 권한을 부여할 수 없음" -#: commands/user.c:2256 +#: commands/user.c:2249 #, c-format msgid "" "Only roles with privileges of role \"%s\" may grant privileges as this role." msgstr "\"%s\" 롤 권한이 있는 롤만이 이 롤 권한을 부여할 수 있음." -#: commands/user.c:2265 +#: commands/user.c:2258 #, c-format msgid "The grantor must have the %s option on role \"%s\"." msgstr "권한 부여자는 %s 옵션(해당 롤: \"%s\")이 있어야 함" -#: commands/user.c:2273 +#: commands/user.c:2266 #, c-format msgid "permission denied to revoke privileges granted by role \"%s\"" msgstr "\"%s\" 롤이 부여한 권한을 회수 할 수 있는 권한 없음" -#: commands/user.c:2275 +#: commands/user.c:2268 #, c-format msgid "" "Only roles with privileges of role \"%s\" may revoke privileges granted by " @@ -13673,17 +14185,17 @@ msgid "" msgstr "" "\"%s\" 롤 권한이 있는 롤만이 이 롤에 의해 부여한 권한을 회수할 수 있음." -#: commands/user.c:2498 utils/adt/acl.c:1309 +#: commands/user.c:2491 utils/adt/acl.c:1324 #, c-format msgid "dependent privileges exist" msgstr "의존적인 권한이 존재합니다" -#: commands/user.c:2499 utils/adt/acl.c:1310 +#: commands/user.c:2492 utils/adt/acl.c:1325 #, c-format msgid "Use CASCADE to revoke them too." msgstr "그것들을 취소하려면 \"CASCADE\"를 사용하세요." -#: commands/vacuum.c:137 +#: commands/vacuum.c:134 #, c-format msgid "\"vacuum_buffer_usage_limit\" must be 0 or between %d kB and %d kB" msgstr "" @@ -13757,42 +14269,42 @@ msgstr "" msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s 명령은 VACUUM, ANALYZE 명령에서 실행 될 수 없음" -#: commands/vacuum.c:733 +#: commands/vacuum.c:730 #, c-format msgid "permission denied to vacuum \"%s\", skipping it" msgstr "\"%s\" 청소할 접근 권한 없음, 건너 뜀" -#: commands/vacuum.c:746 +#: commands/vacuum.c:743 #, c-format msgid "permission denied to analyze \"%s\", skipping it" msgstr "\"%s\" 통계정보 수집할 권한 없음, 건너 뜀" -#: commands/vacuum.c:824 commands/vacuum.c:921 +#: commands/vacuum.c:821 commands/vacuum.c:918 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "\"%s\" 개체 vacuum 건너뜀 --- 사용 가능한 잠금이 없음" -#: commands/vacuum.c:829 +#: commands/vacuum.c:826 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "\"%s\" 개체 vacuum 건너뜀 --- 해당 릴레이션 없음" -#: commands/vacuum.c:845 commands/vacuum.c:926 +#: commands/vacuum.c:842 commands/vacuum.c:923 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "\"%s\" 분석 건너뜀 --- 잠글 수 없음" -#: commands/vacuum.c:850 +#: commands/vacuum.c:847 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "\"%s\" 분석 건너뜀 --- 릴레이션어 없음" -#: commands/vacuum.c:1161 +#: commands/vacuum.c:1139 #, c-format msgid "cutoff for removing and freezing tuples is far in the past" msgstr "튜플을 지우고, 얼려버려기 위한 시작점이 너무 옛날 시점입니다." -#: commands/vacuum.c:1162 commands/vacuum.c:1167 +#: commands/vacuum.c:1140 commands/vacuum.c:1145 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -13805,41 +14317,41 @@ msgstr "" "합니다." # # search5 부분 -#: commands/vacuum.c:1166 +#: commands/vacuum.c:1144 #, c-format msgid "cutoff for freezing multixacts is far in the past" msgstr "영구 보관 처리할 multixact 값이 너무 옛날 것입니다." -#: commands/vacuum.c:1908 +#: commands/vacuum.c:1900 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "몇몇 데이터베이스가 20억 이상의 트랜잭션을 처리했음에도 불구하고 청소가되지 " "않았습니다" -#: commands/vacuum.c:1909 +#: commands/vacuum.c:1901 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "이미 트래잭션 ID 겹침 현상으로 자료 손실이 발생했을 수도 있습니다." -#: commands/vacuum.c:2078 +#: commands/vacuum.c:2080 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "\"%s\" 건너뜀 --- 테이블이 아닌 것 또는 특별 시스템 테이블 등은 청소할 수 없" "음" -#: commands/vacuum.c:2503 +#: commands/vacuum.c:2512 #, c-format -msgid "scanned index \"%s\" to remove %d row versions" -msgstr "\"%s\" 인덱스를 스캔해서 %d개의 행 버전들을 지웠습니다" +msgid "scanned index \"%s\" to remove %lld row versions" +msgstr "\"%s\" 인덱스를 스캔해서 %lld개의 행 버전을 지웠음" -#: commands/vacuum.c:2522 +#: commands/vacuum.c:2531 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "\"%s\" 인덱스는 %.0f 행 버전을 %u 페이지에서 포함하고 있습니다." -#: commands/vacuum.c:2526 +#: commands/vacuum.c:2535 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -13850,14 +14362,14 @@ msgstr "" "%u개 인덱스 페이지를 새롭게 삭제했습니다.\n" "%u개 인덱스 페이지를 현재 삭제해서, %u개 페이지를 다시 사용합니다." -#: commands/vacuumparallel.c:677 +#: 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)" -#: commands/vacuumparallel.c:683 +#: commands/vacuumparallel.c:713 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "" @@ -13920,7 +14432,7 @@ msgstr "쿼리보다 먼저 SET TRANSACTION ISOLATION LEVEL을 호출해야 함" msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "하위 트랜잭션에서 SET TRANSACTION ISOLATION LEVEL을 호출하지 않아야 함" -#: commands/variable.c:606 storage/lmgr/predicate.c:1629 +#: commands/variable.c:606 storage/lmgr/predicate.c:1685 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "읽기 전용 보조 서버 상태에서는 serializable 모드를 사용할 수 없음" @@ -13954,63 +14466,73 @@ msgstr "\"client_encoding\" 값을 지금은 바꿀 수 없음" #: commands/variable.c:781 #, c-format -msgid "cannot change client_encoding during a parallel operation" -msgstr "병렬 작업 중에는 client_encoding 설정을 할 수 없음" +msgid "cannot change \"client_encoding\" during a parallel operation" +msgstr "병렬 작업 중에는 \"client_encoding\" 설정을 할 수 없음" + +#: commands/variable.c:876 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "set session authorization \"%s\" 작업 권한 거부될 것임" + +#: commands/variable.c:881 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "set session authorization \"%s\" 작업 권한 없음" -#: commands/variable.c:948 +#: commands/variable.c:991 #, c-format msgid "permission will be denied to set role \"%s\"" -msgstr "권한이 \"%s\" 롤 권한 지정을 거부할 것입니다" +msgstr "set role \"%s\" 작업 권한 거부될 것임" -#: commands/variable.c:953 +#: commands/variable.c:996 #, c-format msgid "permission denied to set role \"%s\"" -msgstr "\"%s\" 롤 권한을 지정할 수 없음" +msgstr "set role \"%s\" 작업 권한 없음" -#: commands/variable.c:1153 +#: commands/variable.c:1200 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour 기능을 뺀 채로 서버가 만들어졌습니다." -#: commands/variable.c:1181 +#: commands/variable.c:1228 #, c-format msgid "" -"effective_io_concurrency must be set to 0 on platforms that lack " +"\"effective_io_concurrency\" must be set to 0 on platforms that lack " "posix_fadvise()." msgstr "" -"posix_fadvise() 함수에 문제가 있는 플랫폼에서는 effective_io_concurrency 설정" -"값이 0 이어야 합니다." +"posix_fadvise() 함수에 문제가 있는 플랫폼에서는 \"effective_io_concurrency\" " +"설정값이 0 이어야 합니다." -#: commands/variable.c:1194 +#: commands/variable.c:1241 #, c-format msgid "" -"maintenance_io_concurrency must be set to 0 on platforms that lack " +"\"maintenance_io_concurrency\" must be set to 0 on platforms that lack " "posix_fadvise()." msgstr "" -"posix_fadvise() 함수에 문제가 있는 플랫폼에서는 maintenance_io_concurrency 설" -"정값이 0 이어야 합니다." +"posix_fadvise() 함수에 문제가 있는 플랫폼에서는 " +"\"maintenance_io_concurrency\" 설정값이 0 이어야 합니다." -#: commands/variable.c:1207 +#: commands/variable.c:1254 #, c-format msgid "SSL is not supported by this build" msgstr "SSL 접속 기능을 뺀 채로 서버가 만들어졌습니다." -#: commands/view.c:84 +#: commands/view.c:79 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "\"%s\" 칼럼 자료 처리를 위한 정렬 규칙을 결정할 수 없음" -#: commands/view.c:279 commands/view.c:290 +#: commands/view.c:274 commands/view.c:285 #, c-format msgid "cannot drop columns from view" msgstr "뷰에서 칼럼을 삭제할 수 없음" -#: commands/view.c:295 +#: commands/view.c:290 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "뷰에서 \"%s\" 칼럼 이름을 \"%s\"(으)로 바꿀 수 없음" -#: commands/view.c:298 +#: commands/view.c:293 #, c-format msgid "" "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." @@ -14018,40 +14540,40 @@ msgstr "" "대신에 ALTER VIEW ... RENAME COLUMN ... 구문을 이용해서 뷰 칼럼 이름을 바꾸" "세요." -#: commands/view.c:309 +#: commands/view.c:304 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "뷰에서 \"%s\" 칼럼 자료형을을 %s에서 %s(으)로 바꿀 수 없음" -#: commands/view.c:323 +#: commands/view.c:318 #, c-format msgid "cannot change collation of view column \"%s\" from \"%s\" to \"%s\"" msgstr "" "뷰에서 \"%s\" 칼럼 자료형의 문자 정렬 규칙을 \"%s\"에서 \"%s\"(으)로 바꿀 수 " "없음" -#: commands/view.c:392 +#: commands/view.c:387 #, c-format msgid "views must not contain SELECT INTO" msgstr "뷰에는 SELECT INTO 구문을 포함할 수 없음" -#: commands/view.c:404 +#: commands/view.c:399 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "뷰로 사용될 쿼리의 WITH 절에는 자료 변경 구문이 있으면 안됩니다." -#: commands/view.c:474 +#: commands/view.c:469 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW 는 columns 보다는 좀더 많은 열 이름을 명시해야 한다" -#: commands/view.c:482 +#: commands/view.c:477 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "" "뷰는 저장 공간을 사용하지 않기 때문에 unlogged 속성을 지정할 수 없습니다." -#: commands/view.c:496 +#: commands/view.c:491 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "\"%s\" 뷰는 임시적인 뷰로 만들어집니다" @@ -14089,121 +14611,121 @@ msgstr "\"%s\" 커서가 로우에 놓여 있지 않음" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "\"%s\" 커서는 \"%s\" 테이블의 단순 업데이트 가능한 스캔이 아님" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2498 +#: 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:2510 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2567 #, c-format msgid "no value found for parameter %d" msgstr "%d번째 매개 변수 값이 없습니다" -#: executor/execExpr.c:637 executor/execExpr.c:644 executor/execExpr.c:650 -#: executor/execExprInterp.c:4234 executor/execExprInterp.c:4251 -#: executor/execExprInterp.c:4350 executor/nodeModifyTable.c:197 -#: executor/nodeModifyTable.c:208 executor/nodeModifyTable.c:225 -#: executor/nodeModifyTable.c:233 +#: 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:638 executor/nodeModifyTable.c:198 +#: executor/execExpr.c:643 executor/nodeModifyTable.c:204 #, c-format msgid "Query has too many columns." msgstr "쿼리에 칼럼이 너무 많습니다." -#: executor/execExpr.c:645 executor/nodeModifyTable.c:226 +#: executor/execExpr.c:650 executor/nodeModifyTable.c:232 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "쿼리에서 서수 위치 %d에 있는 삭제된 칼럼의 값을 제공합니다." -#: executor/execExpr.c:651 executor/execExprInterp.c:4252 -#: executor/nodeModifyTable.c:209 +#: 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 "" "테이블에는 %s 형식이 있는데(서수 위치 %d) 쿼리에는 %s이(가) 필요합니다." -#: executor/execExpr.c:1099 parser/parse_agg.c:827 +#: executor/execExpr.c:1104 parser/parse_agg.c:838 #, c-format msgid "window function calls cannot be nested" msgstr "윈도우 함수 호출을 중첩할 수 없음" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1649 #, c-format msgid "target type is not an array" msgstr "대상 자료형이 배열이 아닙니다." -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1989 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW() 칼럼은 %s 자료형을 가집니다. %s 자료형 대신에" -#: executor/execExpr.c:2574 executor/execSRF.c:719 parser/parse_func.c:138 -#: parser/parse_func.c:655 parser/parse_func.c:1032 +#: 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개의 인자를 전달할 수 있음" -#: executor/execExpr.c:2601 executor/execSRF.c:739 executor/functions.c:1066 -#: utils/adt/jsonfuncs.c:3780 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 "" "set-values 함수(테이블 리턴 함수)가 set 정의 없이 사용되었습니다 (테이블과 해" "당 열 alias 지정하세요)" -#: executor/execExpr.c:3007 parser/parse_node.c:277 parser/parse_node.c:327 +#: 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 "" "이 자료형은 subscript 형을 지원하지 않기 때문에, %s subscript 자료형을 사용" "할 수 없음" -#: executor/execExpr.c:3135 executor/execExpr.c:3157 +#: executor/execExpr.c:3214 executor/execExpr.c:3236 #, c-format msgid "type %s does not support subscripted assignment" msgstr "%s 자료형은 subscript 지정을 지원하지 않음" -#: executor/execExprInterp.c:1962 +#: executor/execExprInterp.c:2019 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%d 번째 속성(대상 자료형 %s)이 삭제되었음" -#: executor/execExprInterp.c:1968 +#: executor/execExprInterp.c:2025 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "%d 번째 속성(대상 자료형 %s)의 자료형이 잘못되었음" -#: executor/execExprInterp.c:1970 executor/execExprInterp.c:3104 -#: executor/execExprInterp.c:3150 +#: 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:2050 utils/adt/expandedrecord.c:99 -#: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1743 -#: utils/cache/typcache.c:1902 utils/cache/typcache.c:2049 -#: utils/fmgr/funcapi.c:561 +#: 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:2588 +#: executor/execExprInterp.c:2710 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF 구문은 이 테이블 형 대상으로 지원하지 않습니다." -#: executor/execExprInterp.c:2801 +#: executor/execExprInterp.c:2923 #, c-format msgid "cannot merge incompatible arrays" msgstr "배열 형태가 서로 틀려 병합할 수 없습니다" -#: executor/execExprInterp.c:2802 +#: executor/execExprInterp.c:2924 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -14212,59 +14734,79 @@ msgstr "" "%s 자료형의 요소로 구성된 배열은 %s 자료형의 요소로 구성된 ARRAY 구문에 포함" "될 수 없습니다." -#: executor/execExprInterp.c:2823 utils/adt/arrayfuncs.c:265 -#: utils/adt/arrayfuncs.c:575 utils/adt/arrayfuncs.c:1329 -#: utils/adt/arrayfuncs.c:3483 utils/adt/arrayfuncs.c:5567 -#: utils/adt/arrayfuncs.c:6084 utils/adt/arraysubs.c:150 +#: 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:2843 executor/execExprInterp.c:2878 +#: executor/execExprInterp.c:2965 executor/execExprInterp.c:3000 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" msgstr "다차원 배열에는 일치하는 차원이 포함된 배열 식이 있어야 함" -#: executor/execExprInterp.c:2855 utils/adt/array_expanded.c:274 -#: utils/adt/arrayfuncs.c:959 utils/adt/arrayfuncs.c:1568 -#: utils/adt/arrayfuncs.c:3285 utils/adt/arrayfuncs.c:3513 -#: utils/adt/arrayfuncs.c:6176 utils/adt/arrayfuncs.c:6517 -#: utils/adt/arrayutils.c:104 utils/adt/arrayutils.c:113 -#: utils/adt/arrayutils.c:120 +#: 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:3103 executor/execExprInterp.c:3149 +#: executor/execExprInterp.c:3225 executor/execExprInterp.c:3271 #, c-format msgid "attribute %d has wrong type" msgstr "%d 속성의 형식이 잘못됨" -#: executor/execExprInterp.c:3735 utils/adt/domains.c:155 +#: executor/execExprInterp.c:3857 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "%s 도메인에서는 null 값을 허용하지 않습니다" -#: executor/execExprInterp.c:3750 utils/adt/domains.c:193 +#: 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:4235 +#: executor/execExprInterp.c:4447 +#, c-format +msgid "no SQL/JSON item found for specified path of column \"%s\"" +msgstr "\"%s\" 칼럼에 지정한 패스에서는 SQL/JSON 아이템을 찾을 수 없음" + +#: executor/execExprInterp.c:4452 +#, 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 +#, 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개가 필요합니다." -#: executor/execExprInterp.c:4351 executor/execSRF.c:978 +#: executor/execExprInterp.c:4969 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "서수 위치 %d의 삭제된 속성에서 실제 스토리지 불일치가 발생합니다." -#: executor/execIndexing.c:588 +#: executor/execIndexing.c:593 #, c-format msgid "" "ON CONFLICT does not support deferrable unique constraints/exclusion " @@ -14273,32 +14815,32 @@ msgstr "" "지연 가능한 고유 제약조건이나 제외 제약 조건은 ON CONFLICT 판별자로 사용할 " "수 없습니다." -#: executor/execIndexing.c:865 +#: executor/execIndexing.c:870 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "\"%s\" exclusion 제약 조건을 만들 수 없음" -#: executor/execIndexing.c:868 +#: executor/execIndexing.c:873 #, c-format msgid "Key %s conflicts with key %s." msgstr "%s 키와 %s 가 충돌함" -#: executor/execIndexing.c:870 +#: executor/execIndexing.c:875 #, c-format msgid "Key conflicts exist." msgstr "키 충돌 발생" -#: executor/execIndexing.c:876 +#: executor/execIndexing.c:881 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "\"%s\" exclusion 제약 조건에 따라 키 값 충돌이 발생했습니다." -#: executor/execIndexing.c:879 +#: executor/execIndexing.c:884 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "%s 키가 이미 있는 %s 키와 충돌합니다." -#: executor/execIndexing.c:881 +#: executor/execIndexing.c:886 #, c-format msgid "Key conflicts with existing key." msgstr "키가 기존 키와 충돌함" @@ -14313,137 +14855,89 @@ msgstr "\"%s\" 시퀀스를 바꿀 수 없음" msgid "cannot change TOAST relation \"%s\"" msgstr "\"%s\" TOAST 릴레이션을 바꿀 수 없음" -#: executor/execMain.c:1063 rewrite/rewriteHandler.c:3079 -#: rewrite/rewriteHandler.c:3966 -#, c-format -msgid "cannot insert into view \"%s\"" -msgstr "\"%s\" 뷰에 자료를 입력할 수 없습니다" - -#: executor/execMain.c:1065 rewrite/rewriteHandler.c:3082 -#: rewrite/rewriteHandler.c:3969 -#, c-format -msgid "" -"To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " -"an unconditional ON INSERT DO INSTEAD rule." -msgstr "" -"뷰를 통해 자료를 입력하려면, INSTEAD OF INSERT 트리거나 ON INSERT DO INSTEAD " -"룰을 사용하세요" - -#: executor/execMain.c:1071 rewrite/rewriteHandler.c:3087 -#: rewrite/rewriteHandler.c:3974 -#, c-format -msgid "cannot update view \"%s\"" -msgstr "\"%s\" 뷰로는 자료를 갱신할 수 없습니다" - -#: executor/execMain.c:1073 rewrite/rewriteHandler.c:3090 -#: rewrite/rewriteHandler.c:3977 -#, c-format -msgid "" -"To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " -"unconditional ON UPDATE DO INSTEAD rule." -msgstr "" -"뷰 자료 갱신 기능은 INSTEAD OF UPDATE 트리거를 사용하거나, ON UPDATE DO " -"INSTEAD 속성으로 룰을 만들어서 사용해 보세요." - -#: executor/execMain.c:1079 rewrite/rewriteHandler.c:3095 -#: rewrite/rewriteHandler.c:3982 -#, c-format -msgid "cannot delete from view \"%s\"" -msgstr "\"%s\" 뷰로는 자료를 삭제할 수 없습니다" - -#: executor/execMain.c:1081 rewrite/rewriteHandler.c:3098 -#: rewrite/rewriteHandler.c:3985 -#, c-format -msgid "" -"To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " -"unconditional ON DELETE DO INSTEAD rule." -msgstr "" -"뷰 자료 삭제 기능은 INSTEAD OF DELETE 트리거를 사용하거나, ON DELETE DO " -"INSTEAD 속성으로 룰을 만들어서 사용해 보세요." - -#: executor/execMain.c:1092 +#: executor/execMain.c:1064 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "\"%s\" 구체화된 뷰를 바꿀 수 없음" -#: executor/execMain.c:1104 +#: executor/execMain.c:1076 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "\"%s\" 외부 테이블에 자료를 입력할 수 없음" -#: executor/execMain.c:1110 +#: executor/execMain.c:1082 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "\"%s\" 외부 테이블은 자료 입력을 허용하지 않음" -#: executor/execMain.c:1117 +#: executor/execMain.c:1089 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "\"%s\" 외부 테이블에 자료를 변경 할 수 없음" -#: executor/execMain.c:1123 +#: executor/execMain.c:1095 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "\"%s\" 외부 테이블은 자료 변경을 허용하지 않음" -#: executor/execMain.c:1130 +#: executor/execMain.c:1102 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "\"%s\" 외부 테이블에 자료를 삭제 할 수 없음" -#: executor/execMain.c:1136 +#: executor/execMain.c:1108 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "\"%s\" 외부 테이블은 자료 삭제를 허용하지 않음" -#: executor/execMain.c:1147 +#: executor/execMain.c:1119 #, c-format msgid "cannot change relation \"%s\"" msgstr "\"%s\" 릴레이션을 바꿀 수 없음" -#: executor/execMain.c:1174 +#: executor/execMain.c:1146 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "\"%s\" 시퀀스에서 로우를 잠글 수 없음" -#: executor/execMain.c:1181 +#: executor/execMain.c:1153 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "\"%s\" TOAST 릴레이션에서 로우를 잠글 수 없음" -#: executor/execMain.c:1188 +#: executor/execMain.c:1160 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "\"%s\" 뷰에서 로우를 잠글 수 없음" -#: executor/execMain.c:1196 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "\"%s\" 구체화된 뷰에서 로우를 잠글 수 없음" -#: executor/execMain.c:1205 executor/execMain.c:2708 +#: executor/execMain.c:1177 executor/execMain.c:2687 #: executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "\"%s\" 외부 테이블에서 로우를 잠글 수 없음" -#: executor/execMain.c:1211 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "\"%s\" 릴레이션에서 로우를 잠글 수 없음" -#: executor/execMain.c:1922 +#: executor/execMain.c:1901 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "새 자료가 \"%s\" 릴레이션의 파티션 제약 조건을 위반했습니다" -#: executor/execMain.c:1924 executor/execMain.c:2008 executor/execMain.c:2059 -#: executor/execMain.c:2169 +#: 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:2005 +#: executor/execMain.c:1984 #, c-format msgid "" "null value in column \"%s\" of relation \"%s\" violates not-null constraint" @@ -14451,28 +14945,28 @@ msgstr "" "\"%s\" 칼럼(해당 릴레이션 \"%s\")의 null 값이 not null 제약조건을 위반했습니" "다." -#: executor/execMain.c:2057 +#: executor/execMain.c:2036 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "새 자료가 \"%s\" 릴레이션의 \"%s\" 체크 제약 조건을 위반했습니다" -#: executor/execMain.c:2167 +#: executor/execMain.c:2146 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "새 자료가 \"%s\" 뷰의 체크 제약 조건을 위반했습니다" -#: executor/execMain.c:2177 +#: executor/execMain.c:2156 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "" "새 자료가 \"%s\" 로우 단위 보안 정책을 위반했습니다, 해당 테이블: \"%s\"" -#: executor/execMain.c:2182 +#: executor/execMain.c:2161 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "새 자료가 \"%s\" 테이블의 로우 단위 보안 정책을 위반했습니다." -#: executor/execMain.c:2190 +#: executor/execMain.c:2169 #, c-format msgid "" "target row violates row-level security policy \"%s\" (USING expression) for " @@ -14481,7 +14975,7 @@ msgstr "" "대상 로우가 \"%s\" 로우 단위 보안 정책(USING 절 사용)을 위반했습니다, 해당 테" "이블: \"%s\"" -#: executor/execMain.c:2195 +#: executor/execMain.c:2174 #, c-format msgid "" "target row violates row-level security policy (USING expression) for table " @@ -14490,7 +14984,7 @@ msgstr "" "대상 로우가 \"%s\" 테이블의 로우 단위 보안 정책(USING 절 사용)을 위반했습니" "다." -#: executor/execMain.c:2202 +#: executor/execMain.c:2181 #, c-format msgid "" "new row violates row-level security policy \"%s\" (USING expression) for " @@ -14499,25 +14993,25 @@ msgstr "" "새 자료가 \"%s\" 로우 단위 보안 정책(USING 절 사용)을 위반했습니다, 해당 테이" "블: \"%s\"" -#: executor/execMain.c:2207 +#: executor/execMain.c:2186 #, c-format msgid "" -"new row violates row-level security policy (USING expression) for table \"%s" -"\"" +"new row violates row-level security policy (USING expression) for table " +"\"%s\"" msgstr "" "새 자료가 \"%s\" 테이블의 로우 단위 보안 정책(USING 절 사용)을 위반했습니다." -#: executor/execPartition.c:330 +#: executor/execPartition.c:327 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "해당 로우를 위한 \"%s\" 릴레이션용 파티션이 없음" -#: executor/execPartition.c:333 +#: executor/execPartition.c:330 #, c-format msgid "Partition key of the failing row contains %s." msgstr "실패한 로우의 파티션 키 값: %s" -#: executor/execReplication.c:231 executor/execReplication.c:415 +#: executor/execReplication.c:272 executor/execReplication.c:456 #, c-format msgid "" "tuple to be locked was already moved to another partition due to concurrent " @@ -14525,50 +15019,50 @@ msgid "" msgstr "" "다른 업데이트 작업으로 잠굴 튜플이 이미 다른 파티션으로 이동되었음, 재시도함" -#: executor/execReplication.c:235 executor/execReplication.c:419 +#: executor/execReplication.c:276 executor/execReplication.c:460 #, c-format msgid "concurrent update, retrying" msgstr "동시 업데이트, 다시 시도 중" -#: executor/execReplication.c:241 executor/execReplication.c:425 +#: executor/execReplication.c:282 executor/execReplication.c:466 #, c-format msgid "concurrent delete, retrying" msgstr "동시 삭제, 다시 시도 중" -#: executor/execReplication.c:311 parser/parse_cte.c:308 -#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:1348 -#: utils/adt/array_userfuncs.c:1491 utils/adt/arrayfuncs.c:3832 -#: utils/adt/arrayfuncs.c:4387 utils/adt/arrayfuncs.c:6397 -#: utils/adt/rowtypes.c:1230 +#: 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 자료형에서 사용할 동등 연산자(equality operator)를 찾을 수 없습니다." -#: executor/execReplication.c:642 executor/execReplication.c:648 +#: executor/execReplication.c:687 executor/execReplication.c:693 #, c-format msgid "cannot update table \"%s\"" msgstr "\"%s\" 테이블에 자료를 변경 할 수 없음" -#: executor/execReplication.c:644 executor/execReplication.c:656 +#: 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:650 executor/execReplication.c:662 +#: 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:654 executor/execReplication.c:660 +#: executor/execReplication.c:699 executor/execReplication.c:705 #, c-format msgid "cannot delete from table \"%s\"" msgstr "\"%s\" 테이블에 자료를 삭제 할 수 없음" -#: executor/execReplication.c:680 +#: executor/execReplication.c:725 #, c-format msgid "" "cannot update table \"%s\" because it does not have a replica identity and " @@ -14577,52 +15071,52 @@ msgstr "" "\"%s\" 테이블 업데이트 실패, 이 테이블에는 복제용 식별자를 지정하지 않았거" "나, updates 옵션 없이 발행했습니다" -#: executor/execReplication.c:682 +#: 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:686 +#: 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\" 테이블 자료 삭제 실패, 복제 식별자와 deletes 발행을 안함" -#: executor/execReplication.c:688 +#: 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:704 +#: executor/execReplication.c:749 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "\"%s.%s\" 릴레이션은 논리 복제 대상이 될 수 없음" -#: executor/execSRF.c:316 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "함수 호출로 반환되는 로우가 같은 로우형의 전부가 아닙니다" -#: executor/execSRF.c:366 +#: executor/execSRF.c:365 #, c-format msgid "table-function protocol for value-per-call mode was not followed" msgstr "" "value-per-call 모드를 위한 테이블 함수 프로토콜이 뒤이어 오지 않았습니다" -#: executor/execSRF.c:374 executor/execSRF.c:668 +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "materialize 모드를 위한 테이블 함수 프로토콜이 뒤이어 오지 않았습니다" -#: executor/execSRF.c:381 executor/execSRF.c:686 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "알 수 없는 테이블-함수 리턴모드: %d" -#: executor/execSRF.c:895 +#: executor/execSRF.c:894 #, c-format msgid "" "function returning setof record called in context that cannot accept type " @@ -14630,35 +15124,45 @@ msgid "" msgstr "" "setof 레코드 반환 함수가 type 레코드를 허용하지 않는 컨텍스트에서 호출됨" -#: executor/execSRF.c:951 executor/execSRF.c:967 executor/execSRF.c:977 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "함수 반환 행과 쿼리 지정 반환 행이 일치하지 않음" -#: executor/execSRF.c:952 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "" "반환된 행에는 %d개 속성이 포함되어 있는데 쿼리에는 %d개가 필요합니다." -#: executor/execSRF.c:968 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "반환된 형식은 %s인데(서수 위치 %d) 쿼리에는 %s이(가) 필요합니다." -#: executor/execTuples.c:146 executor/execTuples.c:353 -#: executor/execTuples.c:521 executor/execTuples.c:713 +#: executor/execTuples.c:147 executor/execTuples.c:368 +#: executor/execTuples.c:563 executor/execTuples.c:772 #, c-format msgid "cannot retrieve a system column in this context" msgstr "이 컨텍스트에는 시스템 칼럼을 찾을 수 없음" -#: executor/execUtils.c:744 +#: executor/execTuples.c:163 executor/execTuples.c:580 +#, c-format +msgid "don't have transaction information for this type of tuple" +msgstr "튜플의 이런 형태에 대한 트랜잭션 정보가 없음" + +#: executor/execTuples.c:390 executor/execTuples.c:794 +#, c-format +msgid "don't have a storage tuple in this context" +msgstr "이 컨텍스트에는 a storage tuple 을 가질 수 없음." + +#: executor/execUtils.c:713 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "\"%s\" 구체화된 뷰가 아직 구체화되지 못했습니다." -#: executor/execUtils.c:746 +#: executor/execUtils.c:715 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "REFRESH MATERIALIZED VIEW 명령을 사용하세요." @@ -14668,117 +15172,118 @@ msgstr "REFRESH MATERIALIZED VIEW 명령을 사용하세요." 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 to/from 작업을 할 수 없음" #. 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 "SQL 함수에서는 %s 구문을 허용하지 않음" #. translator: %s is a SQL statement name -#: executor/functions.c:526 executor/spi.c:1742 executor/spi.c:2635 +#: 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 구문은 비휘발성 함수(non-volatile function)에서 허용하지 않습니다" -#: executor/functions.c:1450 +#: executor/functions.c:1452 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL 함수 \"%s\"의 문 %d" -#: executor/functions.c:1476 +#: executor/functions.c:1478 #, c-format msgid "SQL function \"%s\" during startup" msgstr "시작 중 SQL 함수 \"%s\"" -#: executor/functions.c:1561 +#: executor/functions.c:1563 #, c-format msgid "" "calling procedures with output arguments is not supported in SQL functions" msgstr "출력 인자를 포함한 프로시져 호출은 SQL 함수에서 지원하지 않습니다." -#: executor/functions.c:1694 executor/functions.c:1732 -#: executor/functions.c:1746 executor/functions.c:1836 -#: executor/functions.c:1869 executor/functions.c:1883 +#: 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:1696 +#: executor/functions.c:1700 #, c-format msgid "" -"Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." +"Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE " +"RETURNING." msgstr "" -"함수 내용의 맨 마지막 구문은 SELECT 또는 INSERT/UPDATE/DELETE RETURNING이어" -"야 합니다." +"함수 내용의 맨 마지막 구문은 SELECT 또는 INSERT/UPDATE/DELETE/MERGE RETURNING" +"이어야 합니다." -#: executor/functions.c:1734 +#: executor/functions.c:1738 #, c-format msgid "Final statement must return exactly one column." msgstr "맨 마지막 구문은 정확히 하나의 칼럼만 반환해야 합니다." -#: executor/functions.c:1748 +#: executor/functions.c:1752 #, c-format msgid "Actual return type is %s." msgstr "실재 반환 자료형은 %s" -#: executor/functions.c:1838 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns too many columns." msgstr "맨 마지막 구문이 너무 많은 칼럼을 반환합니다." -#: executor/functions.c:1871 +#: executor/functions.c:1880 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "" "맨 마지막 구문이 %s(기대되는 자료형: %s) 자료형을 %d 번째 칼럼에서 반환합니" "다." -#: executor/functions.c:1885 +#: executor/functions.c:1894 #, c-format msgid "Final statement returns too few columns." msgstr "맨 마지막 구문이 너무 적은 칼럼을 반환합니다." -#: executor/functions.c:1913 +#: executor/functions.c:1922 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "반환 자료형인 %s 자료형은 SQL 함수에서 지원되지 않음" -#: executor/nodeAgg.c:3937 executor/nodeWindowAgg.c:2993 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2975 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "%u OID 집계함수에 호환 가능한 입력 형식과 변환 형식이 있어야 함" -#: executor/nodeAgg.c:3967 parser/parse_agg.c:669 parser/parse_agg.c:697 +#: executor/nodeAgg.c:3966 parser/parse_agg.c:680 parser/parse_agg.c:708 #, c-format msgid "aggregate function calls cannot be nested" msgstr "집계 함수는 중첩되어 호출 할 수 없음" -#: executor/nodeCustom.c:154 executor/nodeCustom.c:165 +#: executor/nodeCustom.c:144 executor/nodeCustom.c:155 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "\"%s\" 이름의 칼럼 탐색은 MarkPos 기능을 지원하지 않음" -#: executor/nodeHashjoin.c:1143 executor/nodeHashjoin.c:1173 +#: executor/nodeHashjoin.c:1131 executor/nodeHashjoin.c:1161 #, c-format msgid "could not rewind hash-join temporary file" msgstr "해시-조인 임시 파일을 되감을 수 없음" -#: executor/nodeIndexonlyscan.c:238 +#: executor/nodeIndexonlyscan.c:239 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "lossy distance 함수들은 인덱스 단독 탐색을 지원하지 않음" -#: executor/nodeLimit.c:374 +#: executor/nodeLimit.c:373 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET은 음수가 아니어야 함" -#: executor/nodeLimit.c:400 +#: executor/nodeLimit.c:399 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT는 음수가 아니어야 함" @@ -14793,31 +15298,31 @@ msgstr "RIGHT JOIN은 병합-조인 가능 조인 조건에서만 지원됨" msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN은 병합-조인 가능 조인 조건에서만 지원됨" -#: executor/nodeModifyTable.c:234 +#: executor/nodeModifyTable.c:240 #, c-format msgid "Query has too few columns." msgstr "쿼리에 칼럼이 너무 적습니다." -#: executor/nodeModifyTable.c:1530 executor/nodeModifyTable.c:1604 +#: 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:1758 +#: executor/nodeModifyTable.c:1769 #, c-format msgid "invalid ON UPDATE specification" msgstr "잘못된 ON UPDATE 옵션" -#: executor/nodeModifyTable.c:1759 +#: 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 " @@ -14826,7 +15331,7 @@ 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\"." @@ -14834,18 +15339,19 @@ msgstr "" "참조키가 \"%s\" 하위 파티션 테이블을 대상으로 합니다. 상위 파티션 테이블은 " "\"%s\" 테이블입니다." -#: 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:2955 +#: 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 " @@ -14854,19 +15360,7 @@ msgstr "" "동일한 명령 내에서 삽입하도록 제안된 행에 중복된 제한 값이 없는지 확인하십시" "오." -#: executor/nodeModifyTable.c:2957 -#, c-format -msgid "Ensure that not more than one source row matches any one target row." -msgstr "둘 이상의 소스 행이 하나의 대상 행과 일치하지 않는지 확인하십시오." - -#: executor/nodeModifyTable.c:3038 -#, c-format -msgid "" -"tuple to be deleted was already moved to another partition due to concurrent " -"update" -msgstr "동시 업데이트로 삭제할 튜플이 이미 다른 파티션으로 옮겨졌음" - -#: executor/nodeModifyTable.c:3077 +#: executor/nodeModifyTable.c:3131 executor/nodeModifyTable.c:3301 #, c-format msgid "" "tuple to be updated or deleted was already modified by an operation " @@ -14875,12 +15369,24 @@ msgstr "" "현재 명령으로 실행된 트리거 작업으로 변경하거나 지울 자료가 이미 바뀌었습니" "다." -#: executor/nodeSamplescan.c:260 +#: 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:3209 +#, c-format +msgid "" +"tuple to be merged was already moved to another partition due to concurrent " +"update" +msgstr "합병될 튜플이 동시 업데이트로 이미 다른 파티션으로 옮겨졌음" + +#: executor/nodeSamplescan.c:244 #, c-format msgid "TABLESAMPLE parameter cannot be null" msgstr "TABLESAMPLE 절에는 반드시 부가 옵션값들이 있어야 합니다" -#: executor/nodeSamplescan.c:272 +#: executor/nodeSamplescan.c:256 #, c-format msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "TABLESAMPLE REPEATABLE 절은 더 이상의 부가 옵션을 쓰면 안됩니다." @@ -14891,7 +15397,7 @@ msgstr "TABLESAMPLE REPEATABLE 절은 더 이상의 부가 옵션을 쓰면 안 msgid "more than one row returned by a subquery used as an expression" msgstr "표현식에 사용된 서브쿼리 결과가 하나 이상의 행을 리턴했습니다" -#: executor/nodeTableFuncscan.c:375 +#: executor/nodeTableFuncscan.c:370 #, c-format msgid "namespace URI must not be null" msgstr "네임스페이스 URI 값은 null 일 수 없습니다." @@ -14901,17 +15407,17 @@ msgstr "네임스페이스 URI 값은 null 일 수 없습니다." msgid "row filter expression must not be null" msgstr "로우 필터 표현식은 null값이 아니여야 함" -#: executor/nodeTableFuncscan.c:415 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "column filter expression must not be null" msgstr "칼럼 필터 표현식은 null값이 아니여야 함" -#: executor/nodeTableFuncscan.c:416 +#: executor/nodeTableFuncscan.c:417 #, c-format msgid "Filter for column \"%s\" is null." msgstr "\"%s\" 칼럼용 필터가 null입니다." -#: executor/nodeTableFuncscan.c:506 +#: executor/nodeTableFuncscan.c:507 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "\"%s\" 칼럼은 null 값을 허용하지 않습니다" @@ -14941,84 +15447,84 @@ msgstr "프래임 끝 위치값으로 null 값을 사용할 수 없습니다." msgid "frame ending offset must not be negative" msgstr "프래임 끝 위치값으로 음수 값을 사용할 수 없습니다." -#: executor/nodeWindowAgg.c:2909 +#: executor/nodeWindowAgg.c:2891 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "%s 집계 함수는 윈도우 함수로 사용될 수 없습니다" -#: executor/spi.c:242 executor/spi.c:342 +#: executor/spi.c:241 executor/spi.c:341 #, c-format msgid "invalid transaction termination" msgstr "잘못된 트랜잭션 마침" -#: executor/spi.c:257 +#: executor/spi.c:256 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "하위트랜잭션이 활성화 된 상태에서는 커밋 할 수 없음" -#: executor/spi.c:348 +#: executor/spi.c:347 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "하위트랜잭션이 활성화 된 상태에서는 롤백 할 수 없음" -#: executor/spi.c:472 +#: executor/spi.c:471 #, c-format msgid "transaction left non-empty SPI stack" msgstr "트랜잭션이 비어있지 않은 SPI 스택을 남겼습니다" -#: executor/spi.c:473 executor/spi.c:533 +#: executor/spi.c:472 executor/spi.c:532 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "\"SPI_finish\" 호출이 빠졌는지 확인하세요" -#: executor/spi.c:532 +#: executor/spi.c:531 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "하위 트랜잭션이 비어있지 않은 SPI 스택을 남겼습니다" -#: executor/spi.c:1600 +#: 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:1610 +#: executor/spi.c:1612 #, c-format msgid "cannot open %s query as cursor" msgstr "%s 쿼리로 커서를 열 수 없음." -#: executor/spi.c:1716 +#: 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:1717 parser/analyze.c:2912 +#: executor/spi.c:1719 parser/analyze.c:2928 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "스크롤 가능 커서는 READ ONLY여야 합니다." -#: executor/spi.c:2474 +#: 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:2548 +#: executor/spi.c:2570 #, c-format msgid "%s query does not return tuples" msgstr "%s 쿼리는 집합을 반환할 수 없습니다." -#: executor/spi.c:2963 +#: executor/spi.c:2987 #, c-format msgid "SQL expression \"%s\"" msgstr "SQL 표현식: \"%s\"" -#: executor/spi.c:2968 +#: executor/spi.c:2992 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL 지정: \"%s\"" -#: executor/spi.c:2971 +#: executor/spi.c:2995 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL 구문: \"%s\"" @@ -15028,28 +15534,34 @@ msgstr "SQL 구문: \"%s\"" msgid "could not send tuple to shared-memory queue" msgstr "공유 메모리 큐로 튜플을 보낼 수 없음" -#: foreign/foreign.c:222 +#: foreign/foreign.c:225 #, c-format -msgid "user mapping not found for \"%s\"" -msgstr "\"%s\"에 대한 사용자 매핑을 찾을 수 없음" +msgid "user mapping not found for user \"%s\", server \"%s\"" +msgstr "\"%s\"에 대한 사용자 매핑을 \"%s\" 서버에서 찾을 수 없음" -#: foreign/foreign.c:647 storage/file/fd.c:3931 +#: 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 "non-system 외부 테이블을 접근하는 것은 제한되었음" + +#: foreign/foreign.c:660 #, c-format msgid "invalid option \"%s\"" msgstr "\"%s\" 옵션이 잘못됨" -#: foreign/foreign.c:649 +#: foreign/foreign.c:662 #, c-format msgid "Perhaps you meant the option \"%s\"." msgstr "아마 \"%s\" 옵션을 뜻하는 것 같습니다." -#: foreign/foreign.c:651 +#: foreign/foreign.c:664 #, c-format msgid "There are no valid options in this context." msgstr "이 컨텍스트에서 유효한 옵션이 없음." -#: lib/dshash.c:254 utils/mmgr/dsa.c:715 utils/mmgr/dsa.c:737 -#: utils/mmgr/dsa.c:818 +#: lib/dshash.c:254 utils/mmgr/dsa.c:708 utils/mmgr/dsa.c:730 +#: utils/mmgr/dsa.c:811 #, c-format msgid "Failed on DSA request of size %zu." msgstr "크기가 %zu인 DSA 요청에서 오류가 발생했습니다." @@ -15059,77 +15571,77 @@ msgstr "크기가 %zu인 DSA 요청에서 오류가 발생했습니다." msgid "expected SASL response, got message type %d" msgstr "SASL 응답이 필요한데 메시지 형식 %d을(를) 받음" -#: libpq/auth-scram.c:270 +#: libpq/auth-scram.c:263 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "클라이언트가 잘못된 SASL 인증 메카니즘을 선택했음" -#: libpq/auth-scram.c:294 libpq/auth-scram.c:543 libpq/auth-scram.c:554 +#: libpq/auth-scram.c:287 libpq/auth-scram.c:536 libpq/auth-scram.c:547 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "\"%s\" 사용자에 대한 잘못된 SCRAM secret" -#: libpq/auth-scram.c:305 +#: libpq/auth-scram.c:298 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "\"%s\" 사용자용 바른 SCRAM secret이 없습니다." -#: libpq/auth-scram.c:385 libpq/auth-scram.c:390 libpq/auth-scram.c:744 -#: libpq/auth-scram.c:752 libpq/auth-scram.c:857 libpq/auth-scram.c:870 -#: libpq/auth-scram.c:880 libpq/auth-scram.c:988 libpq/auth-scram.c:995 -#: libpq/auth-scram.c:1010 libpq/auth-scram.c:1025 libpq/auth-scram.c:1039 -#: libpq/auth-scram.c:1057 libpq/auth-scram.c:1072 libpq/auth-scram.c:1386 -#: libpq/auth-scram.c:1394 +#: libpq/auth-scram.c:378 libpq/auth-scram.c:383 libpq/auth-scram.c:737 +#: libpq/auth-scram.c:745 libpq/auth-scram.c:850 libpq/auth-scram.c:863 +#: libpq/auth-scram.c:873 libpq/auth-scram.c:981 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1003 libpq/auth-scram.c:1018 libpq/auth-scram.c:1032 +#: libpq/auth-scram.c:1050 libpq/auth-scram.c:1065 libpq/auth-scram.c:1379 +#: libpq/auth-scram.c:1387 #, c-format msgid "malformed SCRAM message" msgstr "SCRAM 메시지가 형식에 맞지 않습니다" -#: libpq/auth-scram.c:386 +#: libpq/auth-scram.c:379 #, c-format msgid "The message is empty." msgstr "메시지가 비었습니다." -#: libpq/auth-scram.c:391 +#: libpq/auth-scram.c:384 #, c-format msgid "Message length does not match input length." msgstr "메시지 길이가 입력 길이와 같지 않습니다." -#: libpq/auth-scram.c:423 +#: libpq/auth-scram.c:416 #, c-format msgid "invalid SCRAM response" msgstr "잘못된 SCRAM 응답" -#: libpq/auth-scram.c:424 +#: libpq/auth-scram.c:417 #, c-format msgid "Nonce does not match." msgstr "토큰 불일치" -#: libpq/auth-scram.c:500 +#: libpq/auth-scram.c:493 #, c-format msgid "could not generate random salt" msgstr "무작위 솔트 생성 실패" -#: libpq/auth-scram.c:745 +#: libpq/auth-scram.c:738 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "\"%c\" 속성이어야 하는데, \"%s\" 임." -#: libpq/auth-scram.c:753 libpq/auth-scram.c:881 +#: libpq/auth-scram.c:746 libpq/auth-scram.c:874 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "\"%c\" 속성에는 \"=\" 문자가 와야 합니다." -#: libpq/auth-scram.c:858 +#: libpq/auth-scram.c:851 #, c-format msgid "Attribute expected, but found end of string." msgstr "속성값이 와야하는데, 문자열 끝이 발견되었음." -#: libpq/auth-scram.c:871 +#: libpq/auth-scram.c:864 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "속성값이 와야하는데, \"%s\" 잘못된 문자가 발견되었음." -#: libpq/auth-scram.c:989 libpq/auth-scram.c:1011 +#: libpq/auth-scram.c:982 libpq/auth-scram.c:1004 #, c-format msgid "" "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not " @@ -15138,17 +15650,17 @@ msgstr "" "해당 클라이언트가 SCRAM-SHA-256-PLUS 규약을 선택했는데, SCRAM 메시지에 채널 " "바인딩 데이터가 없습니다." -#: libpq/auth-scram.c:996 libpq/auth-scram.c:1026 +#: libpq/auth-scram.c:989 libpq/auth-scram.c:1019 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "쉼표가 와야하는데, \"%s\" 문자가 발견되었음." -#: libpq/auth-scram.c:1017 +#: libpq/auth-scram.c:1010 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "SCRAM 채널 바인딩 협상 오류" -#: libpq/auth-scram.c:1018 +#: libpq/auth-scram.c:1011 #, c-format msgid "" "The client supports SCRAM channel binding but thinks the server does not. " @@ -15157,7 +15669,7 @@ msgstr "" "해당 클라이언트는 SCRAM 채널 바인딩을 지원하지만, 서버는 그렇지 않은 것 같습" "니다. 그런데, 이 서버는 채널 바인딩을 지원합니다." -#: libpq/auth-scram.c:1040 +#: libpq/auth-scram.c:1033 #, c-format msgid "" "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM " @@ -15166,153 +15678,153 @@ msgstr "" "해당 클라이언트가 채널 바인딩을 하지 않는 SCRAM-SHA-256 규약을 선택했는데, " "SCRAM 메시지에 채널 바인딩 데이터가 있습니다." -#: libpq/auth-scram.c:1051 +#: libpq/auth-scram.c:1044 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "지원하지 않는 SCRAM 채널 바인드 종류 \"%s\"" -#: libpq/auth-scram.c:1058 +#: libpq/auth-scram.c:1051 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "예상치 못한 채널 바인딩 플래그 \"%s\"." -#: libpq/auth-scram.c:1068 +#: libpq/auth-scram.c:1061 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "" "클라이언트는 authorization identity를 사용하지만, 이것을 지원하지 않습니다." -#: libpq/auth-scram.c:1073 +#: libpq/auth-scram.c:1066 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "client-first-message 안에 \"%s\" 속성이 잘못됨" -#: libpq/auth-scram.c:1089 +#: libpq/auth-scram.c:1082 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "클라이언트가 지원하지 않는 SCRAM 확장을 요구합니다." -#: libpq/auth-scram.c:1103 +#: libpq/auth-scram.c:1096 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "SCRAM 토큰에 인쇄할 수 없는 문자가 있음" -#: libpq/auth-scram.c:1234 +#: libpq/auth-scram.c:1227 #, c-format msgid "could not generate random nonce" msgstr "무작위 토큰을 만들 수 없음" -#: libpq/auth-scram.c:1244 +#: libpq/auth-scram.c:1237 #, c-format msgid "could not encode random nonce" msgstr "임의 nonce를 인코드할 수 없음" -#: libpq/auth-scram.c:1350 +#: libpq/auth-scram.c:1343 #, c-format msgid "SCRAM channel binding check failed" msgstr "SCRAM 채널 바인딩 검사 실패" -#: libpq/auth-scram.c:1368 +#: libpq/auth-scram.c:1361 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "client-final-message 안에 예상치 못한 SCRAM 채널 바인딩 속성이 있음" -#: libpq/auth-scram.c:1387 +#: libpq/auth-scram.c:1380 #, c-format msgid "Malformed proof in client-final-message." msgstr "client-final-message 안에 잘못된 증명" -#: libpq/auth-scram.c:1395 +#: libpq/auth-scram.c:1388 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "client-final-message 끝에 추가로 쓸모 없는 값이 있음" -#: libpq/auth.c:271 +#: libpq/auth.c:269 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "사용자 \"%s\"의 인증을 실패했습니다: 호스트 거부됨" -#: libpq/auth.c:274 +#: libpq/auth.c:272 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 \"trust\" 인증을 실패했습니다." -#: libpq/auth.c:277 +#: libpq/auth.c:275 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 Ident 인증을 실패했습니다." -#: libpq/auth.c:280 +#: libpq/auth.c:278 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 peer 인증을 실패했습니다." -#: libpq/auth.c:285 +#: libpq/auth.c:283 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 password 인증을 실패했습니다" -#: libpq/auth.c:290 +#: libpq/auth.c:288 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "\"%s\" 사용자에 대한 GSSAPI 인증을 실패했습니다." -#: libpq/auth.c:293 +#: libpq/auth.c:291 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "\"%s\" 사용자에 대한 SSPI 인증을 실패했습니다." -#: libpq/auth.c:296 +#: libpq/auth.c:294 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 PAM 인증을 실패했습니다." -#: libpq/auth.c:299 +#: libpq/auth.c:297 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "\"%s\" 사용자에 대한 BSD 인증을 실패했습니다." -#: libpq/auth.c:302 +#: libpq/auth.c:300 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "\"%s\" 사용자의 LDAP 인증을 실패했습니다." -#: libpq/auth.c:305 +#: libpq/auth.c:303 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 인증서 인증을 실패했습니다" -#: libpq/auth.c:308 +#: libpq/auth.c:306 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 RADIUS 인증을 실패했습니다." -#: libpq/auth.c:311 +#: libpq/auth.c:309 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "사용자 \"%s\"의 인증을 실패했습니다: 잘못된 인증 방법" -#: libpq/auth.c:315 +#: libpq/auth.c:313 #, c-format msgid "Connection matched file \"%s\" line %d: \"%s\"" msgstr "\"%s\" 파일의 %d번째 줄에 지정한 인증 설정이 사용됨: \"%s\"" -#: libpq/auth.c:359 +#: libpq/auth.c:357 #, c-format msgid "authentication identifier set more than once" msgstr "인증 식별자가 여러 번 사용 됨" -#: libpq/auth.c:360 +#: libpq/auth.c:358 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "이전 식별자: \"%s\"; 새 식별자: \"%s\"" -#: libpq/auth.c:370 +#: libpq/auth.c:368 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "연결 인증됨: 식별자=\"%s\" 인증방법=%s (%s:%d)" -#: libpq/auth.c:410 +#: libpq/auth.c:408 #, c-format msgid "" "client certificates can only be checked if a root certificate store is " @@ -15320,25 +15832,25 @@ msgid "" msgstr "" "루트 인증서 저장소가 사용 가능한 경우에만 클라이언트 인증서를 검사할 수 있음" -#: libpq/auth.c:421 +#: libpq/auth.c:419 #, c-format msgid "connection requires a valid client certificate" msgstr "연결에 유효한 클라이언트 인증서가 필요함" -#: libpq/auth.c:452 libpq/auth.c:498 +#: libpq/auth.c:450 libpq/auth.c:496 msgid "GSS encryption" msgstr "GSS 암호화" -#: libpq/auth.c:455 libpq/auth.c:501 +#: libpq/auth.c:453 libpq/auth.c:499 msgid "SSL encryption" msgstr "SSL 암호화" -#: libpq/auth.c:457 libpq/auth.c:503 +#: libpq/auth.c:455 libpq/auth.c:501 msgid "no encryption" msgstr "암호화 안함" #. translator: last %s describes encryption state -#: libpq/auth.c:463 +#: libpq/auth.c:461 #, c-format msgid "" "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" @@ -15347,289 +15859,288 @@ msgstr "" "에 따라 거부됩니다" #. translator: last %s describes encryption state -#: libpq/auth.c:470 +#: libpq/auth.c:468 #, c-format msgid "" -"pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s" -"\", %s" +"pg_hba.conf rejects connection for host \"%s\", user \"%s\", database " +"\"%s\", %s" msgstr "" "호스트 \"%s\", 사용자 \"%s\", 데이터베이스 \"%s\", %s 연결이 pg_hba.conf 파" "일 설정에 따라 거부됩니다" -#: libpq/auth.c:508 +#: libpq/auth.c:506 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "" "클라이언트 IP 주소가 \"%s\" 이름으로 확인됨, 호스트 이름 확인 기능으로 맞음" -#: libpq/auth.c:511 +#: libpq/auth.c:509 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "" "클라이언트 IP 주소가 \"%s\" 이름으로 확인됨, 호스트 이름 확인 기능 사용안함" -#: libpq/auth.c:514 +#: libpq/auth.c:512 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "" "클라이언트 IP 주소가 \"%s\" 이름으로 확인됨, 호스트 이름 확인 기능으로 틀림" -#: libpq/auth.c:517 +#: libpq/auth.c:515 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "\"%s\" 클라이언트 호스트 이름을 %s IP 주소로 전환할 수 없음." -#: libpq/auth.c:522 +#: libpq/auth.c:520 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "클라이언트 IP 주소를 파악할 수 없음: 대상 호스트 이름: %s" #. translator: last %s describes encryption state -#: libpq/auth.c:530 +#: libpq/auth.c:528 #, c-format msgid "" -"no pg_hba.conf entry for replication connection from host \"%s\", user \"%s" -"\", %s" +"no pg_hba.conf entry for replication connection from host \"%s\", user " +"\"%s\", %s" msgstr "" "호스트 \"%s\", 사용자 \"%s\", %s 연결이 복제용 연결로 pg_hba.conf 파일에 설정" "되어 있지 않습니다" #. translator: last %s describes encryption state -#: libpq/auth.c:538 +#: libpq/auth.c:536 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "호스트 \"%s\", 사용자 \"%s\", 데이터베이스 \"%s\", %s 연결에 대한 설정이 " "pg_hba.conf 파일에 없습니다." -#: libpq/auth.c:711 +#: libpq/auth.c:656 +#, c-format +msgid "connection authenticated: user=\"%s\" method=%s (%s:%d)" +msgstr "연결 인증됨: 사용자=\"%s\" 인증방법=%s (%s:%d)" + +#: libpq/auth.c:725 #, c-format msgid "expected password response, got message type %d" msgstr "메시지 타입 %d를 얻는 예상된 암호 응답" -#: libpq/auth.c:732 +#: libpq/auth.c:746 #, c-format msgid "invalid password packet size" msgstr "유효하지 않은 암호 패킷 사이즈" -#: libpq/auth.c:750 +#: libpq/auth.c:764 #, c-format msgid "empty password returned by client" msgstr "비어있는 암호는 클라이언트에 의해 돌려보냈습니다" -#: libpq/auth.c:879 libpq/hba.c:1727 -#, c-format -msgid "" -"MD5 authentication is not supported when \"db_user_namespace\" is enabled" -msgstr "\"db_user_namespace\"가 사용 가능한 경우 MD5 인증은 지원되지 않음" - -#: libpq/auth.c:885 +#: libpq/auth.c:892 #, c-format msgid "could not generate random MD5 salt" msgstr "무작위 MD5 솔트 생성 실패" -#: libpq/auth.c:936 libpq/be-secure-gssapi.c:540 +#: libpq/auth.c:943 libpq/be-secure-gssapi.c:540 #, c-format msgid "could not set environment: %m" msgstr "환경변수를 지정할 수 없음: %m" -#: libpq/auth.c:975 +#: libpq/auth.c:982 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS 응답이 필요한데 메시지 형식 %d을(를) 받음" -#: libpq/auth.c:1041 +#: libpq/auth.c:1048 msgid "accepting GSS security context failed" msgstr "GSS 보안 컨텍스트를 수락하지 못함" -#: libpq/auth.c:1082 +#: libpq/auth.c:1089 msgid "retrieving GSS user name failed" msgstr "GSS 사용자 이름을 검색하지 못함" -#: libpq/auth.c:1228 +#: libpq/auth.c:1235 msgid "could not acquire SSPI credentials" msgstr "SSPI 자격 증명을 가져올 수 없음" -#: libpq/auth.c:1253 +#: libpq/auth.c:1260 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI 응답이 필요한데 메시지 형식 %d을(를) 받음" -#: libpq/auth.c:1331 +#: libpq/auth.c:1338 msgid "could not accept SSPI security context" msgstr "SSPI 보안 컨텍스트를 수락할 수 없음" -#: libpq/auth.c:1372 +#: libpq/auth.c:1379 msgid "could not get token from SSPI security context" msgstr "SSPI 보안 컨텍스트에서 토큰을 가져올 수 없음" -#: libpq/auth.c:1508 libpq/auth.c:1527 +#: libpq/auth.c:1515 libpq/auth.c:1534 #, c-format msgid "could not translate name" msgstr "이름을 변환할 수 없음" -#: libpq/auth.c:1540 +#: libpq/auth.c:1547 #, c-format msgid "realm name too long" msgstr "realm 이름이 너무 긺" -#: libpq/auth.c:1555 +#: libpq/auth.c:1562 #, c-format msgid "translated account name too long" msgstr "변환된 접속자 이름이 너무 깁니다" -#: libpq/auth.c:1734 +#: libpq/auth.c:1741 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "Ident 연결에 소켓을 생성할 수 없습니다: %m" -#: libpq/auth.c:1749 +#: libpq/auth.c:1756 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "로컬 주소 \"%s\"에 바인드할 수 없습니다: %m" -#: libpq/auth.c:1761 +#: libpq/auth.c:1768 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "주소 \"%s\", 포트 %s의 Ident 서버에게 연결할 수 없습니다: %m" -#: libpq/auth.c:1783 +#: libpq/auth.c:1790 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "주소 \"%s\", 포트 %s의 Ident 서버에게 질의를 보낼 수 없습니다: %m" -#: libpq/auth.c:1800 +#: libpq/auth.c:1807 #, c-format msgid "" "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "주소 \"%s\", 포트 %s의 Ident 서버로부터 응답을 받지 못했습니다: %m" -#: libpq/auth.c:1810 +#: libpq/auth.c:1817 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "Ident 서버로부터 잘못된 형태의 응답를 보냈습니다: \"%s\"" -#: libpq/auth.c:1863 +#: libpq/auth.c:1870 #, c-format msgid "peer authentication is not supported on this platform" msgstr "이 플랫폼에서는 peer 인증이 지원되지 않음" -#: libpq/auth.c:1867 +#: libpq/auth.c:1874 #, c-format msgid "could not get peer credentials: %m" msgstr "신뢰성 피어를 얻을 수 없습니다: %m" -#: libpq/auth.c:1879 +#: libpq/auth.c:1886 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "UID %ld 해당하는 사용자를 찾을 수 없음: %s" -#: libpq/auth.c:1981 +#: libpq/auth.c:1988 #, c-format msgid "error from underlying PAM layer: %s" msgstr "잠재적인 PAM 레이어에서의 에러: %s" -#: libpq/auth.c:1992 +#: libpq/auth.c:1999 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "지원하지 않는 PAM conversation %d/\"%s\"" -#: libpq/auth.c:2049 +#: libpq/auth.c:2056 #, c-format msgid "could not create PAM authenticator: %s" msgstr "PAM 인증자를 생성할 수 없습니다: %s" -#: libpq/auth.c:2060 +#: libpq/auth.c:2067 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) 실패: %s" -#: libpq/auth.c:2092 +#: libpq/auth.c:2099 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) 실패: %s" -#: libpq/auth.c:2104 +#: libpq/auth.c:2111 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) 실패: %s" -#: libpq/auth.c:2117 +#: libpq/auth.c:2124 #, c-format msgid "pam_authenticate failed: %s" msgstr "PAM 인증 실패: %s" -#: libpq/auth.c:2130 +#: libpq/auth.c:2137 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt 실패: %s" -#: libpq/auth.c:2141 +#: libpq/auth.c:2148 #, c-format msgid "could not release PAM authenticator: %s" msgstr "PAM 인증자를 릴리즈할 수 없습니다: %s" -#: libpq/auth.c:2221 +#: libpq/auth.c:2228 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "LDAP 초기화 실패: 오류번호 %d" -#: libpq/auth.c:2258 +#: libpq/auth.c:2265 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "ldapbasedn에서 도메인 이름을 뽑을 수 없음" -#: libpq/auth.c:2266 +#: libpq/auth.c:2273 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "\"%s\"용 LDAP 인증 작업에서 DNS SRV 레코드를 찾을 수 없음" -#: libpq/auth.c:2268 +#: libpq/auth.c:2275 #, c-format msgid "Set an LDAP server name explicitly." msgstr "명시적으로 LDAP 서버 이름을 지정하세요." -#: libpq/auth.c:2320 +#: libpq/auth.c:2327 #, c-format msgid "could not initialize LDAP: %s" msgstr "LDAP 초기화 실패: %s" -#: libpq/auth.c:2330 +#: libpq/auth.c:2337 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldap 인증으로 사용할 수 없는 LDAP 라이브러리" -#: libpq/auth.c:2338 +#: libpq/auth.c:2345 #, c-format msgid "could not initialize LDAP: %m" msgstr "LDAP 초기화 실패: %m" -#: libpq/auth.c:2348 +#: libpq/auth.c:2355 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "LDAP 프로토콜 버전을 지정할 수 없음: %s" -#: libpq/auth.c:2364 +#: libpq/auth.c:2371 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "LDAP TLS 세션을 시작할 수 없음: %s" -#: libpq/auth.c:2441 +#: libpq/auth.c:2448 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP 서버도 ldapbasedn도 지정하지 않았음" -#: libpq/auth.c:2448 +#: libpq/auth.c:2455 #, c-format msgid "LDAP server not specified" msgstr "LDAP 서버가 지정되지 않음" -#: libpq/auth.c:2510 +#: libpq/auth.c:2517 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "LDAP 인증을 위한 사용자 이름에 사용할 수 없는 문자가 있습니다" -#: libpq/auth.c:2527 +#: libpq/auth.c:2534 #, c-format msgid "" "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": " @@ -15638,55 +16149,50 @@ msgstr "" "\"%s\" ldapbinddn (해당 서버: \"%s\") 설정에 대한 LDAP 바인드 초기화를 할 수 " "없음: %s" -#: libpq/auth.c:2557 +#: libpq/auth.c:2564 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "\"%s\" 필터로 LDAP 검색 실패함, 대상 서버: \"%s\": %s" -#: libpq/auth.c:2573 +#: libpq/auth.c:2580 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "\"%s\" LDAP 사용자가 없음" -#: libpq/auth.c:2574 +#: libpq/auth.c:2581 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "\"%s\" 필터로 \"%s\" 서버에서 LDAP 검색을 했으나, 해당 자료가 없음" -#: libpq/auth.c:2578 +#: libpq/auth.c:2585 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "\"%s\" LDAP 사용자가 유일하지 않습니다" -#: libpq/auth.c:2579 +#: libpq/auth.c:2586 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "" "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "\"%s\" 필터로 \"%s\" 서버에서 LDAP 검색 결과 %d 항목을 반환함" -#: libpq/auth.c:2599 +#: libpq/auth.c:2606 #, c-format msgid "" "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "\"%s\" 첫번째 항목 조회용 dn 값을 \"%s\" 서버에서 찾을 수 없음: %s" -#: libpq/auth.c:2620 -#, c-format -msgid "could not unbind after searching for user \"%s\" on server \"%s\"" -msgstr "\"%s\" 사용자 검색 후 unbind 작업을 \"%s\" 서버에서 할 수 없음" - -#: libpq/auth.c:2651 +#: libpq/auth.c:2633 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "\"%s\" 사용자의 \"%s\" LDAP 서버 로그인 실패: %s" -#: libpq/auth.c:2683 +#: libpq/auth.c:2665 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP 진단: %s" -#: libpq/auth.c:2721 +#: libpq/auth.c:2703 #, c-format msgid "" "certificate authentication failed for user \"%s\": client certificate " @@ -15695,14 +16201,14 @@ msgstr "" "\"%s\" 사용자에 대한 인증서 로그인 실패: 클라이언트 인증서에 사용자 이름이 없" "음" -#: libpq/auth.c:2742 +#: libpq/auth.c:2724 #, c-format msgid "" "certificate authentication failed for user \"%s\": unable to retrieve " "subject DN" msgstr "사용자 \"%s\"의 인증서 인증을 실패했습니다: DN 주체가 없음" -#: libpq/auth.c:2765 +#: libpq/auth.c:2747 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": DN " @@ -15711,108 +16217,108 @@ msgstr "" "\"%s\" 사용자를 위한 인증서 유효성 검사(clientcert=verify-full)를 실패 함: " "DN 같지 않음" -#: libpq/auth.c:2770 +#: libpq/auth.c:2752 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": CN " "mismatch" msgstr "\"%s\" 사용자를 위한 인증서 유효성 검사를 실패 함: CN 같지 않음" -#: libpq/auth.c:2872 +#: libpq/auth.c:2854 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS 서버가 지정되지 않음" -#: libpq/auth.c:2879 +#: libpq/auth.c:2861 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS 비밀키가 지정되지 않음" -#: libpq/auth.c:2893 +#: libpq/auth.c:2875 #, c-format msgid "" "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS 인증은 %d 글자 보다 큰 비밀번호 인증을 지원하지 않습니다" -#: libpq/auth.c:2995 libpq/hba.c:2369 +#: libpq/auth.c:2977 libpq/hba.c:2352 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "\"%s\" RADIUS 서버 이름을 주소로 바꿀 수 없음: %s" -#: libpq/auth.c:3009 +#: libpq/auth.c:2991 #, c-format msgid "could not generate random encryption vector" msgstr "무작위 암호화 벡터를 만들 수 없음" -#: libpq/auth.c:3046 +#: libpq/auth.c:3028 #, c-format msgid "could not perform MD5 encryption of password: %s" msgstr "비밀번호의 MD5 암호를 만들 수 없음: %s" # translator: %s is IPv4, IPv6, or Unix -#: libpq/auth.c:3073 +#: libpq/auth.c:3055 #, c-format msgid "could not create RADIUS socket: %m" msgstr "RADIUS 소켓을 생성할 수 없습니다: %m" # translator: %s is IPv4, IPv6, or Unix -#: libpq/auth.c:3089 +#: libpq/auth.c:3071 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "RADIUS 소켓에 바인드할 수 없습니다: %m" -#: libpq/auth.c:3099 +#: libpq/auth.c:3081 #, c-format msgid "could not send RADIUS packet: %m" msgstr "RADIUS 패킷을 보낼 수 없음: %m" -#: libpq/auth.c:3133 libpq/auth.c:3159 +#: libpq/auth.c:3115 libpq/auth.c:3141 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "%s 에서 RADIUS 응답 대기 시간 초과" # translator: %s is IPv4, IPv6, or Unix -#: libpq/auth.c:3152 +#: libpq/auth.c:3134 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "RADIUS 소켓 상태를 확인할 수 없음: %m" -#: libpq/auth.c:3182 +#: libpq/auth.c:3164 #, c-format msgid "could not read RADIUS response: %m" msgstr "RADIUS 응답을 읽을 수 없음: %m" -#: libpq/auth.c:3190 +#: libpq/auth.c:3172 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "%s에서 RADIUS 응답이 바르지 않은 포트로부터 보내졌음: %d" -#: libpq/auth.c:3198 +#: libpq/auth.c:3180 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "%s에서 RADIUS 응답이 너무 짧음: %d" -#: libpq/auth.c:3205 +#: libpq/auth.c:3187 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "%s에서 RADIUS 응답 길이가 이상함: %d (실재 길이: %d)" -#: libpq/auth.c:3213 +#: libpq/auth.c:3195 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "%s에서 RADIUS 응답이 요청과 다름: %d (기대값: %d)" -#: libpq/auth.c:3238 +#: libpq/auth.c:3220 #, c-format msgid "could not perform MD5 encryption of received packet: %s" msgstr "받은 패킷을 대상으로 MD5 암호화 작업할 수 없음: %s" -#: libpq/auth.c:3248 +#: libpq/auth.c:3230 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "%s에서 RADIUS 응답의 MD5 값이 이상함" -#: libpq/auth.c:3266 +#: libpq/auth.c:3248 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "%s에서 RADIUS 응답이 바르지 않은 값임 (%d), 대상 사용자: \"%s\"" @@ -15869,51 +16375,38 @@ msgstr "서버 파일 \"%s\"에 쓸 수 없습니다: %m" msgid "large object read request is too large" msgstr "대형 개체 읽기 요청이 너무 큽니다" -#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:262 utils/adt/genfile.c:294 -#: utils/adt/genfile.c:315 +#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:248 utils/adt/genfile.c:269 #, c-format msgid "requested length cannot be negative" msgstr "요청한 길이는 음수일 수 없음" -#: libpq/be-fsstubs.c:871 storage/large_object/inv_api.c:299 -#: storage/large_object/inv_api.c:311 storage/large_object/inv_api.c:508 -#: storage/large_object/inv_api.c:619 storage/large_object/inv_api.c:809 -#, c-format -msgid "permission denied for large object %u" -msgstr "%u 대형 개체에 대한 접근 권한 없음" - -#: libpq/be-secure-common.c:71 -#, c-format -msgid "could not read from command \"%s\": %m" -msgstr "\"%s\" 명령에서 읽을 수 없음: %m" - -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:94 #, c-format msgid "command \"%s\" failed" msgstr "\"%s\" 명령 실패" -#: libpq/be-secure-common.c:119 +#: libpq/be-secure-common.c:123 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "비밀키 \"%s\"에 액세스할 수 없습니다: %m" -#: libpq/be-secure-common.c:129 +#: libpq/be-secure-common.c:133 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "\"%s\" 개인 키 파일은 일반 파일이 아님" -#: libpq/be-secure-common.c:155 +#: libpq/be-secure-common.c:159 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "" "\"%s\" 개인 키 파일의 소유주는 데이터베이스 사용자이거나 root 여야 합니다." -#: libpq/be-secure-common.c:165 +#: libpq/be-secure-common.c:169 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "\"%s\" 개인 키 파일에 그룹 또는 익명 액세스 권한이 있음" -#: libpq/be-secure-common.c:167 +#: libpq/be-secure-common.c:171 #, c-format msgid "" "File must have permissions u=rw (0600) or less if owned by the database " @@ -15923,16 +16416,16 @@ msgstr "" "(0600) 또는 더 작게 설정하고, root가 소유주라면 u=rw,g=r (0640) 권한으로 지정" "하세요" -#: libpq/be-secure-gssapi.c:204 +#: libpq/be-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "GSSAPI 감싸기 오류" -#: libpq/be-secure-gssapi.c:211 +#: libpq/be-secure-gssapi.c:208 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "GSSAPI 출력 메시지는 기밀성을 유지하면 안됩니다." -#: libpq/be-secure-gssapi.c:218 libpq/be-secure-gssapi.c:634 +#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:634 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "서버가 너무 큰 GSSAPI 패킷을 보내려고 합니다(%zu > %zu)." @@ -15964,17 +16457,17 @@ msgstr "GSSAPI 보안 내용을 받아드릴 수 없음" msgid "GSSAPI size check error" msgstr "GSSAPI 크기 검사 오류" -#: libpq/be-secure-openssl.c:125 +#: libpq/be-secure-openssl.c:131 #, c-format msgid "could not create SSL context: %s" msgstr "SSL 컨텍스트 정보를 생성할 수 없습니다: %s" -#: libpq/be-secure-openssl.c:151 +#: libpq/be-secure-openssl.c:157 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "서버 인증서 파일 \"%s\"을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:177 #, c-format msgid "" "private key file \"%s\" cannot be reloaded because it requires a passphrase" @@ -15982,102 +16475,102 @@ msgstr "" "\"%s\" 개인 키 파일은 비밀번호를 입력해야 해서 자동으로 다시 불러올 수 없습니" "다." -#: libpq/be-secure-openssl.c:176 +#: libpq/be-secure-openssl.c:182 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "비밀키 파일 \"%s\"을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:185 +#: libpq/be-secure-openssl.c:191 #, c-format msgid "check of private key failed: %s" msgstr "비밀키의 확인 실패: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:198 libpq/be-secure-openssl.c:221 +#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "\"%s\" 의 \"%s\" 설정 기능을 빼고 빌드 되었음" -#: libpq/be-secure-openssl.c:208 +#: libpq/be-secure-openssl.c:214 #, c-format msgid "could not set minimum SSL protocol version" msgstr "최소 SSL 프로토콜 버전을 설정할 수 없음" -#: libpq/be-secure-openssl.c:231 +#: libpq/be-secure-openssl.c:237 #, c-format msgid "could not set maximum SSL protocol version" msgstr "최대 SSL 프로토콜 버전을 설정할 수 없음" -#: libpq/be-secure-openssl.c:247 +#: libpq/be-secure-openssl.c:253 #, c-format msgid "could not set SSL protocol version range" msgstr "SSL 프로토콜 버전 범위를 지정할 수 없음" -#: libpq/be-secure-openssl.c:248 +#: libpq/be-secure-openssl.c:254 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\" 값은 \"%s\" 보다 높을 수 없음" -#: libpq/be-secure-openssl.c:285 +#: libpq/be-secure-openssl.c:307 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "cipher 목록을 설정할 수 없음 (유요한 cipher가 없음)" -#: libpq/be-secure-openssl.c:305 +#: 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:354 +#: libpq/be-secure-openssl.c:376 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "\"%s\" SSL 인증서 회수 목록 파일을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:362 +#: libpq/be-secure-openssl.c:384 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "\"%s\" SSL 인증서 회수 목록 디렉터리를 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:370 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "" -"could not load SSL certificate revocation list file \"%s\" or directory \"%s" -"\": %s" +"could not load SSL certificate revocation list file \"%s\" or directory " +"\"%s\": %s" msgstr "" "\"%s\" SSL 인증서 회수 목록 파일이나 \"%s\" 디렉터리를 불러들일 수 없습니다: " "%s" -#: libpq/be-secure-openssl.c:428 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "SSL연결을 초기화할 수 없습니다: SSL 컨텍스트를 설정 못함" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:464 #, c-format msgid "could not initialize SSL connection: %s" msgstr "SSL연결을 초기화할 수 없습니다: %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:472 #, c-format msgid "could not set SSL socket: %s" msgstr "SSL 소켓을 지정할 수 없습니다: %s" -#: libpq/be-secure-openssl.c:502 +#: libpq/be-secure-openssl.c:528 #, c-format msgid "could not accept SSL connection: %m" msgstr "SSL 연결을 받아드릴 수 없습니다: %m" -#: libpq/be-secure-openssl.c:506 libpq/be-secure-openssl.c:561 +#: 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:545 +#: libpq/be-secure-openssl.c:573 #, c-format msgid "could not accept SSL connection: %s" msgstr "SSL 연결을 받아드릴 수 없습니다: %s" -#: libpq/be-secure-openssl.c:549 +#: libpq/be-secure-openssl.c:577 #, c-format msgid "" "This may indicate that the client does not support any SSL protocol version " @@ -16086,359 +16579,359 @@ msgstr "" "이런 경우는 클라이언트가 %s부터 %s까지 SSL 프로토콜 버전을 지원하지 않는 경우" "에 발생하기도 합니다." -#: libpq/be-secure-openssl.c:566 libpq/be-secure-openssl.c:746 -#: libpq/be-secure-openssl.c:810 +#: 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:612 +#: libpq/be-secure-openssl.c:622 +#, c-format +msgid "received SSL connection request with unexpected ALPN protocol" +msgstr "수신된 SSL 연결은 예상치 않은 ALPN 프로토콜을 요구함" + +#: libpq/be-secure-openssl.c:666 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL 인증서의 일반 이름에 포함된 null이 있음" -#: libpq/be-secure-openssl.c:652 +#: libpq/be-secure-openssl.c:712 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "SSL 인증서의 식별자 이름에 포함된 null이 있음" -#: libpq/be-secure-openssl.c:735 libpq/be-secure-openssl.c:794 +#: 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:976 +#: libpq/be-secure-openssl.c:1038 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "\"%s\" DH 매개 변수 파일을 열 수 없습니다: %m" -#: libpq/be-secure-openssl.c:988 +#: libpq/be-secure-openssl.c:1050 #, c-format msgid "could not load DH parameters file: %s" msgstr "DH 매개 변수 파일을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:998 +#: libpq/be-secure-openssl.c:1060 #, c-format msgid "invalid DH parameters: %s" msgstr "잘못된 DH 매개 변수: %s" -#: libpq/be-secure-openssl.c:1007 +#: libpq/be-secure-openssl.c:1069 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "잘못된 DH 매개 변수값: p는 prime 아님" -#: libpq/be-secure-openssl.c:1016 +#: libpq/be-secure-openssl.c:1078 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "잘못된 DH 매개 변수값: 타당한 생성자도 아니고, 안전한 prime도 아님" -#: libpq/be-secure-openssl.c:1152 +#: 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:1189 +#: libpq/be-secure-openssl.c:1251 #, c-format msgid "" "Failed certificate data (unverified): subject \"%s\", serial number %s, " "issuer \"%s\"." msgstr "" -"데이터 인증 실패 (검증 안됨): subject \"%s\", serial number %s, issuer \"%s" -"\"." +"데이터 인증 실패 (검증 안됨): subject \"%s\", serial number %s, issuer " +"\"%s\"." -#: libpq/be-secure-openssl.c:1190 +#: libpq/be-secure-openssl.c:1252 msgid "unknown" msgstr "알수없음" -#: libpq/be-secure-openssl.c:1281 +#: libpq/be-secure-openssl.c:1389 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: DH 매개 변수 불러오기 실패" -#: libpq/be-secure-openssl.c:1289 +#: 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:1316 +#: libpq/be-secure-openssl.c:1424 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: 알 수 없는 curve 이름: %s" -#: libpq/be-secure-openssl.c:1325 +#: libpq/be-secure-openssl.c:1433 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: 키 생성 실패" -#: libpq/be-secure-openssl.c:1353 +#: libpq/be-secure-openssl.c:1461 msgid "no SSL error reported" msgstr "SSL 오류 없음" -#: libpq/be-secure-openssl.c:1357 +#: libpq/be-secure-openssl.c:1479 #, c-format msgid "SSL error code %lu" msgstr "SSL 오류 번호 %lu" -#: libpq/be-secure-openssl.c:1516 +#: libpq/be-secure-openssl.c:1636 #, c-format msgid "could not create BIO" msgstr "BIO 만들기 실패" -#: libpq/be-secure-openssl.c:1526 +#: 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:1534 +#: libpq/be-secure-openssl.c:1654 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "ASN1_OBJECT 구조체에서 %d NID를 변환할 수 없음" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 -#, c-format -msgid "terminating connection due to unexpected postmaster exit" -msgstr "postmaster의 예상치 못한 종료로 연결을 종료합니다" - -#: libpq/crypt.c:49 +#: libpq/crypt.c:48 #, c-format msgid "Role \"%s\" does not exist." msgstr "\"%s\" 롤 없음" -#: libpq/crypt.c:59 +#: libpq/crypt.c:58 #, c-format msgid "User \"%s\" has no password assigned." msgstr "\"%s\" 사용자 비밀번호가 아직 할당되지 않음" -#: libpq/crypt.c:77 +#: libpq/crypt.c:76 #, c-format msgid "User \"%s\" has an expired password." msgstr "\"%s\" 사용자 비밀번호가 기한 만료되었습니다." -#: libpq/crypt.c:183 +#: libpq/crypt.c:182 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "\"%s\" 사용자의 비밀번호는 MD5 인증용이 아닙니다." -#: libpq/crypt.c:204 libpq/crypt.c:246 libpq/crypt.c:266 +#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 #, c-format msgid "Password does not match for user \"%s\"." msgstr "\"%s\" 사용자의 비밀번호가 틀립니다." -#: libpq/crypt.c:285 +#: libpq/crypt.c:284 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "\"%s\" 사용자의 비밀번호 암호화 기법을 알 수 없습니다." -#: libpq/hba.c:332 +#: libpq/hba.c:327 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "\"%s\" 정규식이 잘못됨: %s" -#: libpq/hba.c:334 libpq/hba.c:666 libpq/hba.c:1250 libpq/hba.c:1270 -#: libpq/hba.c:1293 libpq/hba.c:1306 libpq/hba.c:1359 libpq/hba.c:1387 -#: libpq/hba.c:1395 libpq/hba.c:1407 libpq/hba.c:1428 libpq/hba.c:1441 -#: libpq/hba.c:1466 libpq/hba.c:1493 libpq/hba.c:1505 libpq/hba.c:1564 -#: libpq/hba.c:1584 libpq/hba.c:1598 libpq/hba.c:1618 libpq/hba.c:1629 -#: libpq/hba.c:1644 libpq/hba.c:1663 libpq/hba.c:1679 libpq/hba.c:1691 -#: libpq/hba.c:1728 libpq/hba.c:1769 libpq/hba.c:1782 libpq/hba.c:1804 -#: libpq/hba.c:1816 libpq/hba.c:1834 libpq/hba.c:1884 libpq/hba.c:1928 -#: libpq/hba.c:1939 libpq/hba.c:1955 libpq/hba.c:1972 libpq/hba.c:1983 -#: libpq/hba.c:2002 libpq/hba.c:2018 libpq/hba.c:2034 libpq/hba.c:2093 -#: libpq/hba.c:2110 libpq/hba.c:2123 libpq/hba.c:2135 libpq/hba.c:2154 -#: libpq/hba.c:2240 libpq/hba.c:2258 libpq/hba.c:2352 libpq/hba.c:2371 -#: libpq/hba.c:2400 libpq/hba.c:2413 libpq/hba.c:2436 libpq/hba.c:2458 -#: libpq/hba.c:2472 tsearch/ts_locale.c:243 +#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 +#: libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 +#: libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 +#: libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 +#: libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 +#: libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 +#: libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 libpq/hba.c:1799 +#: libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 +#: libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 +#: libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 +#: libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 +#: libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 +#: libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 +#: tsearch/ts_locale.c:241 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "%d번째 줄(\"%s\" 환경 설정 파일)" -#: libpq/hba.c:462 +#: libpq/hba.c:457 #, c-format msgid "skipping missing authentication file \"%s\"" msgstr "\"%s\" 인증 설정파일이 없으나 건너뜀" -#: libpq/hba.c:614 +#: libpq/hba.c:609 #, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" msgstr "\"%s\" 파일을 열 수 없습니다: 최대 디렉터리 깊이를 초과했음" -#: libpq/hba.c:1221 +#: libpq/hba.c:1216 #, c-format msgid "error enumerating network interfaces: %m" msgstr "네트워크 인터페이스 이뮬레이트 하기 실패: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1248 +#: libpq/hba.c:1243 #, c-format msgid "" "authentication option \"%s\" is only valid for authentication methods %s" msgstr "\"%s\" 인증 옵션은 %s 인증 방법에만 유효함" -#: libpq/hba.c:1268 +#: libpq/hba.c:1263 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "\"%s\" 인증 방법의 경우 \"%s\" 인자를 설정해야 함" -#: libpq/hba.c:1292 +#: libpq/hba.c:1287 #, c-format msgid "missing entry at end of line" msgstr "줄의 끝 라인에 빠진 엔트리가 있음" -#: libpq/hba.c:1305 +#: libpq/hba.c:1300 #, c-format msgid "multiple values in ident field" msgstr "ident 자리에 여러 값이 있음" -#: libpq/hba.c:1357 +#: libpq/hba.c:1352 #, c-format msgid "multiple values specified for connection type" msgstr "연결 형식 자리에 여러 값이 있음" -#: libpq/hba.c:1358 +#: libpq/hba.c:1353 #, c-format msgid "Specify exactly one connection type per line." msgstr "한 줄에 하나의 연결 형태만 지정해야 합니다" -#: libpq/hba.c:1385 +#: libpq/hba.c:1380 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "SSL 기능이 꺼져있어 hostssl 설정을 사용할 수 없습니다" -#: libpq/hba.c:1386 +#: libpq/hba.c:1381 #, c-format -msgid "Set ssl = on in postgresql.conf." -msgstr "postgresql.conf 파일에 ssl = on 설정을 하세요." +msgid "Set \"ssl = on\" in postgresql.conf." +msgstr "postgresql.conf 파일에 \"ssl = on\" 설정을 하세요." -#: libpq/hba.c:1394 +#: libpq/hba.c:1389 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "" "이 서버는 ssl 접속 기능을 지원하지 않아 hostssl 인증을 지원하지 않습니다." -#: libpq/hba.c:1406 +#: libpq/hba.c:1401 #, c-format msgid "" "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "" "이 서버는 GSSAPI 접속 기능을 지원하지 않아 hostgssenc 레코드가 적당하지 않음" -#: libpq/hba.c:1426 +#: libpq/hba.c:1421 #, c-format msgid "invalid connection type \"%s\"" msgstr "\"%s\" 값은 잘못된 연결 형식입니다" -#: libpq/hba.c:1440 +#: libpq/hba.c:1435 #, c-format msgid "end-of-line before database specification" msgstr "데이터베이스 지정 전에 줄 끝에 도달함" -#: libpq/hba.c:1465 +#: libpq/hba.c:1460 #, c-format msgid "end-of-line before role specification" msgstr "롤 지정 전에 줄 끝에 도달함" -#: libpq/hba.c:1492 +#: libpq/hba.c:1487 #, c-format msgid "end-of-line before IP address specification" msgstr "IP 주소 지정 전에 줄 끝에 도달함" -#: libpq/hba.c:1503 +#: libpq/hba.c:1498 #, c-format msgid "multiple values specified for host address" msgstr "호스트 주소 부분에 여러 값이 지정됨" -#: libpq/hba.c:1504 +#: libpq/hba.c:1499 #, c-format msgid "Specify one address range per line." msgstr "한 줄에 하나의 주소 범위가 있어야 합니다." -#: libpq/hba.c:1562 +#: libpq/hba.c:1557 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "\"%s\" 형태는 잘못된 IP 주소 형태입니다: %s" -#: libpq/hba.c:1582 +#: libpq/hba.c:1577 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "호스트 이름과 CIDR 마스크는 함께 쓸 수 없습니다: \"%s\"" -#: libpq/hba.c:1596 +#: libpq/hba.c:1591 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "\"%s\" 주소에 잘못된 CIDR 마스크가 있음" -#: libpq/hba.c:1616 +#: libpq/hba.c:1611 #, c-format msgid "end-of-line before netmask specification" msgstr "넷마스크 지정 전에 줄 끝에 도달함" -#: libpq/hba.c:1617 +#: libpq/hba.c:1612 #, c-format msgid "" "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "주소 범위는 CIDR 표기법을 쓰거나 넷마스크 표기법을 쓰세요" -#: libpq/hba.c:1628 +#: libpq/hba.c:1623 #, c-format msgid "multiple values specified for netmask" msgstr "넷마스크 부분에 여러 값이 지정됨" -#: libpq/hba.c:1642 +#: libpq/hba.c:1637 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "잘못된 IP 마스크, \"%s\": %s" -#: libpq/hba.c:1662 +#: libpq/hba.c:1657 #, c-format msgid "IP address and mask do not match" msgstr "IP 주소와 마스크가 맞지 않습니다" -#: libpq/hba.c:1678 +#: libpq/hba.c:1673 #, c-format msgid "end-of-line before authentication method" msgstr "인증 방법 전에 줄 끝에 도달함" -#: libpq/hba.c:1689 +#: libpq/hba.c:1684 #, c-format msgid "multiple values specified for authentication type" msgstr "인증 방법 부분에 여러 값이 지정됨" -#: libpq/hba.c:1690 +#: libpq/hba.c:1685 #, c-format msgid "Specify exactly one authentication type per line." msgstr "하나의 인증 방법에 대해서 한 줄씩 지정해야 합니다" -#: libpq/hba.c:1767 +#: libpq/hba.c:1750 #, c-format msgid "invalid authentication method \"%s\"" msgstr "\"%s\" 인증 방법이 잘못됨" -#: libpq/hba.c:1780 +#: libpq/hba.c:1763 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "\"%s\" 인증 방법이 잘못됨: 이 서버에서 지원되지 않음" -#: libpq/hba.c:1803 +#: libpq/hba.c:1786 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "gssapi 인증은 로컬 소켓에서 지원되지 않음" -#: libpq/hba.c:1815 +#: libpq/hba.c:1798 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "peer 인증은 로컬 소켓에서만 지원함" -#: libpq/hba.c:1833 +#: libpq/hba.c:1816 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "cert 인증은 hostssl 연결에서만 지원됨" -#: libpq/hba.c:1883 +#: libpq/hba.c:1866 #, c-format msgid "authentication option not in name=value format: %s" msgstr "인증 옵션이 이름=값 형태가 아님: %s" -#: libpq/hba.c:1927 +#: libpq/hba.c:1910 #, c-format msgid "" "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, " @@ -16447,31 +16940,31 @@ msgstr "" "ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, " "ldapsearchfilter, ldapurl 옵션은 ldapprefix 옵션과 함께 사용할 수 없음" -#: libpq/hba.c:1938 +#: libpq/hba.c:1921 #, c-format msgid "" -"authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix" -"\", or \"ldapsuffix\" to be set" +"authentication method \"ldap\" requires argument \"ldapbasedn\", " +"\"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "" "\"ldap\" 인증 방법의 경우 \"ldapbasedn\", \"ldapprefix\", \"ldapsuffix\"옵션" "이 있어야 함" -#: libpq/hba.c:1954 +#: libpq/hba.c:1937 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ldapsearchattribute 옵션은 ldapsearchfilter 옵션과 함께 사용할 수 없음" -#: libpq/hba.c:1971 +#: libpq/hba.c:1954 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "RADIUS 서버 목록은 비어 있을 수 없음" -#: libpq/hba.c:1982 +#: libpq/hba.c:1965 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "RADIUS 비밀키 목록은 비어 있을 수 없음" -#: libpq/hba.c:1999 +#: libpq/hba.c:1982 #, c-format msgid "" "the number of RADIUS secrets (%d) must be 1 or the same as the number of " @@ -16479,209 +16972,217 @@ msgid "" msgstr "" "RADIUS 비밀번호 개수(%d)는 하나이거나, RADIUS 서버 개수(%d)와 같아야 함" -#: libpq/hba.c:2015 +#: libpq/hba.c:1998 #, c-format msgid "" "the number of RADIUS ports (%d) must be 1 or the same as the number of " "RADIUS servers (%d)" msgstr "RADIUS 포트 개수(%d)는 하나이거나, RADIUS 서버 개수(%d)와 같아야 함" -#: libpq/hba.c:2031 +#: libpq/hba.c:2014 #, c-format msgid "" "the number of RADIUS identifiers (%d) must be 1 or the same as the number of " "RADIUS servers (%d)" msgstr "RADIUS 계정 개수(%d)는 하나이거나, RADIUS 서버 개수(%d)와 같아야 함" -#: libpq/hba.c:2083 +#: libpq/hba.c:2066 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi 및 cert" -#: libpq/hba.c:2092 +#: libpq/hba.c:2075 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert는 \"hostssl\" 행에 대해서만 구성할 수 있음" -#: libpq/hba.c:2109 +#: libpq/hba.c:2092 #, c-format msgid "" "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "" "\"cert\" 인증을 사용하는 경우 clientcert 값은 \"verify-full\" 만 허용함" -#: libpq/hba.c:2122 +#: libpq/hba.c:2105 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "잘못된 clientcert 값: \"%s\"" -#: libpq/hba.c:2134 +#: libpq/hba.c:2117 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname 설정은 \"hostssl\" 줄에만 지정할 수 있음" -#: libpq/hba.c:2153 +#: libpq/hba.c:2136 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "잘못된 clientname 값: \"%s\"" -#: libpq/hba.c:2186 +#: libpq/hba.c:2169 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "\"%s\" LDAP URL을 분석할 수 없음: %s" -#: libpq/hba.c:2197 +#: libpq/hba.c:2180 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "지원하지 않는 LDAP URL 스킴: %s" -#: libpq/hba.c:2221 +#: libpq/hba.c:2204 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "이 플랫폼에서는 LDAP URL 기능을 지원하지 않음." -#: libpq/hba.c:2239 +#: libpq/hba.c:2222 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "잘못된 ldapscheme 값: \"%s\"" -#: libpq/hba.c:2257 +#: libpq/hba.c:2240 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "LDAP 포트 번호가 잘못됨: \"%s\"" -#: libpq/hba.c:2303 libpq/hba.c:2310 +#: libpq/hba.c:2286 libpq/hba.c:2293 msgid "gssapi and sspi" msgstr "gssapi 및 sspi" -#: libpq/hba.c:2319 libpq/hba.c:2328 +#: libpq/hba.c:2302 libpq/hba.c:2311 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2350 +#: libpq/hba.c:2333 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "RADIUS 서버 목록 분석 실패: \"%s\"" -#: libpq/hba.c:2398 +#: libpq/hba.c:2381 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "RADIUS 서버 포트 목록 분석 실패: \"%s\"" -#: libpq/hba.c:2412 +#: libpq/hba.c:2395 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "RADIUS 포트 번호가 잘못됨: \"%s\"" # translator: %s is IPv4, IPv6, or Unix -#: libpq/hba.c:2434 +#: libpq/hba.c:2417 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "RADIUS 서버 비밀키 목록 분석 실패: \"%s\"" -#: libpq/hba.c:2456 +#: libpq/hba.c:2439 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "RADIUS 서버 식별자 목록 분석 실패: \"%s\"" -#: libpq/hba.c:2470 +#: libpq/hba.c:2453 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "알 수 없는 인증 옵션 이름: \"%s\"" -#: libpq/hba.c:2662 +#: libpq/hba.c:2645 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "\"%s\" 설정 파일에 구성 항목이 없음" -#: libpq/hba.c:2815 +#: libpq/hba.c:2798 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "\"%s\"에 대한 정규식 일치 실패: %s" -#: libpq/hba.c:2839 +#: libpq/hba.c:2822 #, c-format msgid "" "regular expression \"%s\" has no subexpressions as requested by " "backreference in \"%s\"" msgstr "\"%s\" 정규식에는 \"%s\"의 backreference에서 요청된 하위 식이 없음" -#: libpq/hba.c:2942 +#: libpq/hba.c:2925 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "제공된 사용자 이름(%s) 및 인증된 사용자 이름(%s)이 일치하지 않음" -#: libpq/hba.c:2962 +#: libpq/hba.c:2945 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "\"%s\" 사용자맵 파일에 \"%s\" 사용자를 \"%s\" 사용자로 인증할 설정이 없음" -#: libpq/pqcomm.c:200 +#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 +#: libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 +#: libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 +#: libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "%s(%s) 실패: %m" + +#: libpq/pqcomm.c:296 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "소켓을 nonblocking 모드로 지정할 수 없음: %m" -#: libpq/pqcomm.c:361 +#: libpq/pqcomm.c:456 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "\"%s\" 유닉스 도메인 소켓 경로가 너무 깁니다 (최대 %d 바이트)" -#: libpq/pqcomm.c:381 +#: libpq/pqcomm.c:476 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "호스트 이름 \"%s\", 서비스 \"%s\"를 변환할 수 없습니다. 주소 : %s" -#: libpq/pqcomm.c:385 +#: libpq/pqcomm.c:480 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "서비스 \"%s\"를 변환할 수 없습니다. 주소 : %s" -#: libpq/pqcomm.c:412 +#: libpq/pqcomm.c:502 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "최대 접속자 수 MAXLISTEN (%d) 초과로 더 이상 접속이 불가능합니다" -#: libpq/pqcomm.c:421 +#: libpq/pqcomm.c:511 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:424 +#: libpq/pqcomm.c:514 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:517 msgid "Unix" msgstr "유닉스" -#: libpq/pqcomm.c:431 +#: libpq/pqcomm.c:521 #, c-format msgid "unrecognized address family %d" msgstr "%d는 인식되지 않는 가족 주소입니다" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:455 +#: libpq/pqcomm.c:545 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "%s 소켓 만들기 실패, 대상 주소: \"%s\": %m" #. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:481 libpq/pqcomm.c:499 +#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "%s(%s) 실패, 연결 종류: %s, 대상 주소: \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:522 +#: libpq/pqcomm.c:615 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "%s 바인드 실패, 대상 주소: \"%s\": %m" -#: libpq/pqcomm.c:526 +#: libpq/pqcomm.c:619 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "다른 postmaster 가 포트 %d에서 이미 실행중인것 같습니다?" -#: libpq/pqcomm.c:528 +#: libpq/pqcomm.c:621 #, c-format msgid "" "Is another postmaster already running on port %d? If not, wait a few seconds " @@ -16691,131 +17192,123 @@ msgstr "" "를 기다렸다가 다시 시도해보십시오." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:557 +#: libpq/pqcomm.c:650 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "%s 리슨 실패, 대상 주소: \"%s\": %m" # translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:565 +#: libpq/pqcomm.c:658 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "\"%s\" 유닉스 도메인 소켓으로 접속을 허용합니다" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:570 +#: libpq/pqcomm.c:663 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "%s, 주소: \"%s\", 포트 %d 번으로 접속을 허용합니다" -#: libpq/pqcomm.c:659 +#: libpq/pqcomm.c:753 #, c-format msgid "group \"%s\" does not exist" msgstr "\"%s\" 그룹 없음" -#: libpq/pqcomm.c:669 +#: libpq/pqcomm.c:763 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "파일 \"%s\" 의 그룹을 세팅할 수 없습니다: %m" -#: libpq/pqcomm.c:680 +#: libpq/pqcomm.c:774 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "파일 \"%s\" 의 퍼미션을 세팅할 수 없습니다: %m" -#: libpq/pqcomm.c:708 +#: libpq/pqcomm.c:803 #, c-format msgid "could not accept new connection: %m" msgstr "새로운 연결을 생성할 수 없습니다: %m" -#: libpq/pqcomm.c:748 libpq/pqcomm.c:757 libpq/pqcomm.c:789 libpq/pqcomm.c:799 -#: libpq/pqcomm.c:1624 libpq/pqcomm.c:1669 libpq/pqcomm.c:1709 -#: libpq/pqcomm.c:1753 libpq/pqcomm.c:1792 libpq/pqcomm.c:1831 -#: libpq/pqcomm.c:1867 libpq/pqcomm.c:1906 -#, c-format -msgid "%s(%s) failed: %m" -msgstr "%s(%s) 실패: %m" - -#: libpq/pqcomm.c:903 +#: libpq/pqcomm.c:885 #, c-format msgid "there is no client connection" msgstr "클라이언트 연결이 없음" -#: libpq/pqcomm.c:954 libpq/pqcomm.c:1050 +#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 #, c-format msgid "could not receive data from client: %m" msgstr "클라이언트에게 데이터를 받을 수 없습니다: %m" -#: libpq/pqcomm.c:1155 tcop/postgres.c:4405 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "프로토콜 동기화 작업 실패로 연결을 종료합니다" -#: libpq/pqcomm.c:1221 +#: libpq/pqcomm.c:1215 #, c-format msgid "unexpected EOF within message length word" msgstr "예상치 못한 EOF가 메시지의 길이 워드안에서 발생했습니다." -#: libpq/pqcomm.c:1231 +#: libpq/pqcomm.c:1225 #, c-format msgid "invalid message length" msgstr "메시지의 길이가 유효하지 않습니다" -#: libpq/pqcomm.c:1253 libpq/pqcomm.c:1266 +#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 #, c-format msgid "incomplete message from client" msgstr "클라이언트으로부터의 완전하지 못한 메시지입니다" -#: libpq/pqcomm.c:1377 +#: libpq/pqcomm.c:1401 #, c-format msgid "could not send data to client: %m" msgstr "클라이언트에게 데이터를 보낼 수 없습니다: %m" -#: libpq/pqcomm.c:1592 +#: libpq/pqcomm.c:1616 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s) 실패: 오류 코드 %d" -#: libpq/pqcomm.c:1681 +#: libpq/pqcomm.c:1705 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "keepalive idle time 지정하는 것은 지원하지 않음" -#: libpq/pqcomm.c:1765 libpq/pqcomm.c:1840 libpq/pqcomm.c:1915 +#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s) 지원하지 않음" -#: libpq/pqformat.c:407 +#: libpq/pqformat.c:404 #, c-format msgid "no data left in message" msgstr "메시지에 아무런 데이터가 없습니다" -#: libpq/pqformat.c:518 libpq/pqformat.c:536 libpq/pqformat.c:557 -#: utils/adt/array_userfuncs.c:799 utils/adt/arrayfuncs.c:1506 -#: utils/adt/rowtypes.c:615 +#: 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/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "부족한 데이터는 메시지 안에 넣어져 있습니다" -#: libpq/pqformat.c:598 libpq/pqformat.c:627 +#: libpq/pqformat.c:595 libpq/pqformat.c:624 #, c-format msgid "invalid string in message" msgstr "메시지안에 유효하지 않은 문자열이 있습니다" -#: libpq/pqformat.c:643 +#: libpq/pqformat.c:640 #, c-format msgid "invalid message format" msgstr "메시지 포맷이 유효하지 않습니다." # # search5 끝 # # advance 부분 -#: main/main.c:235 +#: main/main.c:236 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup 작업 실패: %d\n" -#: main/main.c:329 +#: main/main.c:324 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -16824,7 +17317,7 @@ msgstr "" "%s 프로그램은 PostgreSQL 서버입니다.\n" "\n" -#: main/main.c:330 +#: main/main.c:325 #, c-format msgid "" "Usage:\n" @@ -16835,107 +17328,107 @@ msgstr "" " %s [옵션]...\n" "\n" -#: main/main.c:331 +#: main/main.c:326 #, c-format msgid "Options:\n" msgstr "옵션들:\n" -#: main/main.c:332 +#: main/main.c:327 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS 공유 버퍼 개수\n" -#: main/main.c:333 +#: main/main.c:328 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE 실시간 매개 변수 지정\n" -#: main/main.c:334 +#: main/main.c:329 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME 실시간 매개 변수 값을 보여주고 마침\n" -#: main/main.c:335 +#: main/main.c:330 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 디버깅 수준\n" -#: main/main.c:336 +#: main/main.c:331 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR 데이터 디렉터리\n" -#: main/main.c:337 +#: main/main.c:332 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e 날짜 입력 양식이 유럽형(DMY)을 사용함\n" -#: main/main.c:338 +#: main/main.c:333 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsync 기능 끔\n" -#: main/main.c:339 +#: main/main.c:334 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME 서버로 사용할 호스트 이름 또는 IP\n" -#: main/main.c:340 +#: main/main.c:335 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr " -i TCP/IP 연결 사용함 (옛 버전 호환용)\n" -#: main/main.c:341 +#: main/main.c:336 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY 유닉스 도메인 소켓 위치\n" -#: main/main.c:343 +#: main/main.c:338 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL 연결 기능 사용함\n" -#: main/main.c:345 +#: main/main.c:340 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT 최대 동시 연결 개수\n" -#: main/main.c:346 +#: main/main.c:341 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT 서버 포트 번호\n" -#: main/main.c:347 +#: main/main.c:342 #, c-format msgid " -s show statistics after each query\n" msgstr " -s 각 쿼리 뒤에 통계정보를 보여줌\n" -#: main/main.c:348 +#: main/main.c:343 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM 정렬작업에 사용할 메모리 크기(kb 단위)를 지정\n" -#: main/main.c:349 +#: main/main.c:344 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보 보여주고 마침\n" -#: main/main.c:350 +#: main/main.c:345 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE 실시간 매개 변수 지정\n" -#: main/main.c:351 +#: main/main.c:346 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config 서버 환경 설정값에 대한 설명을 보여주고 마침\n" -#: main/main.c:352 +#: main/main.c:347 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: main/main.c:354 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -16944,27 +17437,27 @@ msgstr "" "\n" "개발자 옵션들:\n" -#: main/main.c:355 +#: 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:356 +#: main/main.c:351 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O 시스템 테이블의 구조를 바꿀 수 있도록 함\n" -#: main/main.c:357 +#: main/main.c:352 #, c-format msgid " -P disable system indexes\n" msgstr " -P 시스템 인덱스들을 사용하지 않음\n" -#: main/main.c:358 +#: 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:359 +#: main/main.c:354 #, c-format msgid "" " -T send SIGABRT to all backend processes if one dies\n" @@ -16972,13 +17465,13 @@ msgstr "" " -T 하나의 하위 서버 프로세스가 비정상으로 마치며 모든\n" " 다른 백엔드 프로세스에게 SIGABRT 신호를 보냄\n" -#: main/main.c:360 +#: main/main.c:355 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr "" " -W NUM 디버그 작업을 위해 지정한 숫자의 초만큼 기다린다\n" -#: main/main.c:362 +#: main/main.c:357 #, c-format msgid "" "\n" @@ -16987,28 +17480,28 @@ msgstr "" "\n" "단일사용자 모드에서 사용할 수 있는 옵션들:\n" -#: main/main.c:363 +#: main/main.c:358 #, c-format msgid "" " --single selects single-user mode (must be first argument)\n" msgstr " --single 단일 사용자 모드 선택 (인자의 첫번째로 와야함)\n" -#: main/main.c:364 +#: main/main.c:359 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME 데이터베이스 이름 (초기값: 사용자이름)\n" -#: main/main.c:365 +#: main/main.c:360 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 디버깅 수준\n" -#: main/main.c:366 +#: main/main.c:361 #, c-format msgid " -E echo statement before execution\n" msgstr " -E 실행하기 전에 작업명령을 출력함\n" -#: main/main.c:367 +#: main/main.c:362 #, c-format msgid "" " -j do not use newline as interactive query delimiter\n" @@ -17016,14 +17509,14 @@ msgstr "" " -j 대화형 쿼리의 명령 실행 구분 문자로 줄바꿈문자를 쓰지 않" "음\n" -#: main/main.c:368 main/main.c:374 +#: 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 쪽으로 보내는 내용을 FILENAME 파일로 저장" "함\n" -#: main/main.c:370 +#: main/main.c:365 #, c-format msgid "" "\n" @@ -17032,25 +17525,25 @@ msgstr "" "\n" "부트스트랩 모드에서 사용할 수 있는 옵션들:\n" -#: main/main.c:371 +#: main/main.c:366 #, c-format msgid "" " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot 부트스트랩 모드로 실행 (첫번째 인자로 와야함)\n" -#: main/main.c:372 +#: main/main.c:367 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr " --check 체크 모드 선택 (첫번째 인자로 와야함)\n" -#: main/main.c:373 +#: main/main.c:368 #, c-format msgid "" " DBNAME database name (mandatory argument in bootstrapping " "mode)\n" msgstr " DBNAME 데이터베이스 이름 (부트스트랩 모드에서 필수)\n" -#: main/main.c:376 +#: main/main.c:371 #, c-format msgid "" "\n" @@ -17067,12 +17560,12 @@ msgstr "" "\n" "문제점 보고 주소: <%s>\n" -#: main/main.c:380 +#: main/main.c:375 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: main/main.c:391 +#: main/main.c:386 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -17085,12 +17578,12 @@ msgstr "" "반드시 일반 사용자 ID(시스템 관리자 권한이 없는 ID)로 서버를 실행하십시오.\n" "Server를 어떻게 안전하게 기동하는가 하는 것은 문서를 참조하시기 바랍니다.\n" -#: main/main.c:408 +#: main/main.c:403 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: real 또는 effective user ID 들은 반드시 일치되어야 한다.\n" -#: main/main.c:415 +#: main/main.c:410 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -17114,20 +17607,15 @@ msgstr "\"%s\" 이름의 확장가능한 노드 형이 이미 있습니다" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "\"%s\" ExtensibleNodeMethods가 등록되어 있지 않음" -#: nodes/makefuncs.c:153 statistics/extended_stats.c:2335 +#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "\"%s\" 릴레이션에 해당하는 복합 자료형이 없음" -#: nodes/makefuncs.c:879 -#, c-format -msgid "unrecognized JSON encoding: %s" -msgstr "알 수 없는 JSON 인코딩: %s" - -#: nodes/nodeFuncs.c:116 nodes/nodeFuncs.c:147 parser/parse_coerce.c:2567 +#: 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:2049 parser/parse_func.c:710 parser/parse_oper.c:883 -#: utils/fmgr/funcapi.c:661 +#: 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 에 대해서는 배열 자료형을 사용할 수 없습니다" @@ -17142,7 +17630,7 @@ msgstr "\"%s\" 포탈의 매개 변수: %s" msgid "unnamed portal with parameters: %s" msgstr "이름 없는 포탈의 매개 변수: %s" -#: optimizer/path/joinrels.c:973 +#: optimizer/path/joinrels.c:972 #, c-format msgid "" "FULL JOIN is only supported with merge-joinable or hash-joinable join " @@ -17151,14 +17639,14 @@ msgstr "" "FULL JOIN 구문은 머지 조인이나, 해시 조인이 가능한 상황에서만 사용할 수 있습" "니다" -#: optimizer/plan/createplan.c:7111 parser/parse_merge.c:182 -#: parser/parse_merge.c:189 +#: optimizer/plan/createplan.c:7175 parser/parse_merge.c:203 +#: rewrite/rewriteHandler.c:1702 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 MERGE 명령을 실행할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1408 +#: optimizer/plan/initsplan.c:1407 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "" @@ -17166,92 +17654,92 @@ msgstr "" "다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1361 parser/analyze.c:1761 parser/analyze.c:2018 -#: parser/analyze.c:3231 +#: optimizer/plan/planner.c:1380 parser/analyze.c:1771 parser/analyze.c:2029 +#: parser/analyze.c:3247 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s 구문은 UNION/INTERSECT/EXCEPT 예약어들과 함께 사용할 수 없습니다." -#: optimizer/plan/planner.c:2082 optimizer/plan/planner.c:4040 +#: 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:2083 optimizer/plan/planner.c:4041 -#: optimizer/plan/planner.c:4681 optimizer/prep/prepunion.c:1053 +#: 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:4680 +#: optimizer/plan/planner.c:4789 #, c-format msgid "could not implement DISTINCT" msgstr "DISTINCT를 구현할 수 없음" -#: optimizer/plan/planner.c:6019 +#: optimizer/plan/planner.c:6134 #, c-format msgid "could not implement window PARTITION BY" msgstr "창 PARTITION BY를 구현할 수 없음" -#: optimizer/plan/planner.c:6020 +#: optimizer/plan/planner.c:6135 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "창 분할 칼럼은 정렬 가능한 데이터 형식이어야 합니다." -#: optimizer/plan/planner.c:6024 +#: optimizer/plan/planner.c:6139 #, c-format msgid "could not implement window ORDER BY" msgstr "창 ORDER BY를 구현할 수 없음" -#: optimizer/plan/planner.c:6025 +#: optimizer/plan/planner.c:6140 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "창 순서 지정 칼럼은 정렬 가능한 데이터 형식이어야 합니다." -#: optimizer/prep/prepunion.c:516 +#: optimizer/prep/prepunion.c:467 #, c-format msgid "could not implement recursive UNION" msgstr "재귀 UNION을 구현할 수 없음" -#: optimizer/prep/prepunion.c:517 +#: optimizer/prep/prepunion.c:468 #, c-format msgid "All column datatypes must be hashable." msgstr "모든 열 데이터 형식은 해시 가능해야 합니다." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1052 +#: optimizer/prep/prepunion.c:1319 #, c-format msgid "could not implement %s" msgstr "%s 구문은 구현할 수 없음" -#: optimizer/util/clauses.c:4856 +#: optimizer/util/clauses.c:4963 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "\"%s\" SQL 함수를 인라인으로 바꾸는 중" -#: optimizer/util/plancat.c:154 +#: optimizer/util/plancat.c:153 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "복구 작업 중에는 임시 테이블이나, 언로그드 테이블을 접근할 수 없음" -#: optimizer/util/plancat.c:726 +#: optimizer/util/plancat.c:768 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "전체 로우 유니크 인덱스 인터페이스 규약은 지원하지 않습니다." -#: optimizer/util/plancat.c:743 +#: optimizer/util/plancat.c:785 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ON CONFLICT 처리를 위해 관련된 인덱스가 없습니다" -#: optimizer/util/plancat.c:793 +#: 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:898 +#: optimizer/util/plancat.c:945 #, c-format msgid "" "there is no unique or exclusion constraint matching the ON CONFLICT " @@ -17259,23 +17747,23 @@ msgid "" msgstr "" "ON CONFLICT 절을 사용하는 경우, unique 나 exclude 제약 조건이 있어야 함" -#: parser/analyze.c:826 parser/analyze.c:1540 +#: parser/analyze.c:824 parser/analyze.c:1550 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUES 목록은 모두 같은 길이여야 함" -#: parser/analyze.c:1028 +#: parser/analyze.c:1027 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT 구문에 target columns 보다 더 많은 표현식이 존재하고 있다" -#: parser/analyze.c:1046 +#: parser/analyze.c:1045 #, c-format msgid "INSERT has more target columns than expressions" msgstr "" "INSERT 구문에 target columns 보다 더 많은 표현식(expressions)이 존재하고 있다" -#: parser/analyze.c:1050 +#: parser/analyze.c:1049 #, c-format msgid "" "The insertion source is a row expression containing the same number of " @@ -17284,40 +17772,40 @@ msgstr "" "삽입 소스는 INSERT 작업에서 기대하는 칼럼 수와 같은 로우 표현식입니다. 실수" "로 괄호를 추가한 것은 아닌지 확인하세요." -#: parser/analyze.c:1347 parser/analyze.c:1734 +#: parser/analyze.c:1357 parser/analyze.c:1744 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO 구문은 여기서는 사용할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1663 parser/analyze.c:3463 +#: parser/analyze.c:1673 parser/analyze.c:3479 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s 구문은 VALUES 에 적용할 수 없음" -#: parser/analyze.c:1900 +#: parser/analyze.c:1911 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "UNION/INTERSECT/EXCEPT ORDER BY 절이 잘못됨" -#: parser/analyze.c:1901 +#: parser/analyze.c:1912 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "결과 열 이름만 사용할 수 있고 식 또는 함수는 사용할 수 없습니다." -#: parser/analyze.c:1902 +#: parser/analyze.c:1913 #, c-format msgid "" "Add the expression/function to every SELECT, or move the UNION into a FROM " "clause." msgstr "모든 SELECT에 식/함수를 추가하거나 UNION을 FROM 절로 이동하십시오." -#: parser/analyze.c:2008 +#: parser/analyze.c:2019 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO 는 UNION/INTERSECT/EXCEPT 의 첫번째 SELECT 에만 허용된다" -#: parser/analyze.c:2080 +#: parser/analyze.c:2091 #, c-format msgid "" "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of " @@ -17326,34 +17814,39 @@ msgstr "" "UNION/INTERSECT/EXCEPT 멤버 문에서 같은 쿼리 수준의 다른 관계를 참조할 수 없" "음" -#: parser/analyze.c:2167 +#: parser/analyze.c:2178 #, c-format msgid "each %s query must have the same number of columns" msgstr "각각의 %s query 는 같은 수의 columns 를 가져야 한다." -#: parser/analyze.c:2573 +#: parser/analyze.c:2535 +#, c-format +msgid "SET target columns cannot be qualified with the relation name." +msgstr "SET 대상 칼럼들은 해당 릴레이션 이름으로 한정할 수 없습니다." + +#: parser/analyze.c:2589 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING 절에는 적어도 하나 이상의 칼럼이 있어야 합니다" -#: parser/analyze.c:2676 +#: parser/analyze.c:2692 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" -msgstr[0] "" +msgstr[0] "지정된 소스가 %d개의 칼럼을 반환했음" -#: parser/analyze.c:2737 +#: parser/analyze.c:2753 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "변수 \"%s\" 는 %s 자료형인데 표현식은 %s 자료형입니다." #. translator: %s is a SQL keyword -#: parser/analyze.c:2862 parser/analyze.c:2870 +#: parser/analyze.c:2878 parser/analyze.c:2886 #, c-format msgid "cannot specify both %s and %s" msgstr "%s, %s 둘다를 명시할 수 없다" -#: parser/analyze.c:2890 +#: parser/analyze.c:2906 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "" @@ -17361,331 +17854,331 @@ msgstr "" "다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2898 +#: parser/analyze.c:2914 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s 구문은 지원되지 않음" -#: parser/analyze.c:2901 +#: parser/analyze.c:2917 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "보류 가능 커서는 READ ONLY여야 합니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2909 +#: parser/analyze.c:2925 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s 구문은 지원되지 않음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2920 +#: parser/analyze.c:2936 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s 구문이 잘못됨" -#: parser/analyze.c:2923 +#: parser/analyze.c:2939 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "민감하지 않은 커서는 READ ONLY여야 합니다." -#: parser/analyze.c:3017 +#: parser/analyze.c:3033 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "" "구체화된 뷰 정의에 사용한 WITH 절 안에는 자료 변경 구문이 없어야 합니다" -#: parser/analyze.c:3027 +#: parser/analyze.c:3043 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "구체화된 뷰는 임시 테이블이나 뷰를 사용할 수 없습니다" -#: parser/analyze.c:3037 +#: parser/analyze.c:3053 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "구체화딘 뷰는 바운드 매개 변수를 이용해서 정의할 수 없습니다" -#: parser/analyze.c:3049 +#: parser/analyze.c:3065 #, c-format msgid "materialized views cannot be unlogged" msgstr "구체화된 뷰는 UNLOGGED 옵션을 사용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3238 +#: parser/analyze.c:3254 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s 절은 DISTINCT 절과 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3245 +#: parser/analyze.c:3261 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s 절은 GROUP BY 절과 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3252 +#: parser/analyze.c:3268 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s 절은 HAVING 절과 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3259 +#: parser/analyze.c:3275 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s 절은 집계 함수와 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3266 +#: parser/analyze.c:3282 #, c-format msgid "%s is not allowed with window functions" msgstr "%s 절은 윈도우 함수와 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3273 +#: parser/analyze.c:3289 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s 절은 대상 목록에서 세트 반환 함수와 함께 사용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3372 +#: parser/analyze.c:3388 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s 절에는 unqualified 릴레이션 이름을 지정해야 합니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3436 +#: parser/analyze.c:3452 #, c-format msgid "%s cannot be applied to a join" msgstr "%s 절은 조인을 적용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3445 +#: parser/analyze.c:3461 #, c-format msgid "%s cannot be applied to a function" msgstr "%s 절은 함수에 적용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3454 +#: parser/analyze.c:3470 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s 절은 테이블 함수에 적용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3472 +#: parser/analyze.c:3488 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s 절은 WITH 쿼리에 적용할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3481 +#: parser/analyze.c:3497 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s 절은 named tuplestore에 적용할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3501 +#: parser/analyze.c:3517 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "\"%s\" 릴레이션 (대상 구문: %s) 이 FROM 절 내에 없습니다" -#: parser/parse_agg.c:221 parser/parse_oper.c:227 +#: parser/parse_agg.c:210 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "%s 자료형에서 사용할 순서 정하는 연산자를 찾을 수 없습니다." -#: parser/parse_agg.c:223 +#: parser/parse_agg.c:212 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "" "DISTINCT와 함께 작업하는 집계 작업은 그 입력 자료가 정렬될 수 있어야 합니다" -#: parser/parse_agg.c:258 +#: parser/parse_agg.c:270 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING 인자로는 32개 이내로 지정해야 합니다" -#: parser/parse_agg.c:361 +#: parser/parse_agg.c:373 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "JOIN 조건문에서는 집계 함수가 허용되지 않습니다" -#: parser/parse_agg.c:363 +#: parser/parse_agg.c:375 msgid "grouping operations are not allowed in JOIN conditions" msgstr "JOIN 조건문에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:375 +#: 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:377 +#: 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:382 +#: parser/parse_agg.c:392 msgid "aggregate functions are not allowed in functions in FROM" msgstr "FROM 절 내의 함수 표현식 내에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:384 +#: parser/parse_agg.c:394 msgid "grouping operations are not allowed in functions in FROM" msgstr "FROM 절 내의 함수 표현식 내에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:402 msgid "aggregate functions are not allowed in policy expressions" msgstr "정책 표현식에서는 집계 함수 사용을 허용하지 않습니다" -#: parser/parse_agg.c:394 +#: parser/parse_agg.c:404 msgid "grouping operations are not allowed in policy expressions" msgstr "정책 표현식에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:411 +#: parser/parse_agg.c:421 msgid "aggregate functions are not allowed in window RANGE" msgstr "윈도우 RANGE 안에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:413 +#: parser/parse_agg.c:423 msgid "grouping operations are not allowed in window RANGE" msgstr "윈도우 RANGE 안에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:418 +#: parser/parse_agg.c:428 msgid "aggregate functions are not allowed in window ROWS" msgstr "윈도우 ROWS 안에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:420 +#: parser/parse_agg.c:430 msgid "grouping operations are not allowed in window ROWS" msgstr "윈도우 ROWS 안에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:425 +#: parser/parse_agg.c:435 msgid "aggregate functions are not allowed in window GROUPS" msgstr "윈도우 GROUPS 안에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:427 +#: parser/parse_agg.c:437 msgid "grouping operations are not allowed in window GROUPS" msgstr "윈도우 GROUPS 안에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:440 +#: parser/parse_agg.c:450 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "MERGE WHEN 조건절에 집계 함수가 허용되지 않습니다" -#: parser/parse_agg.c:442 +#: parser/parse_agg.c:452 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "MERGE WHEN 조건절에 그룹핑 작업이 허용되지 않습니다" -#: parser/parse_agg.c:468 +#: parser/parse_agg.c:479 msgid "aggregate functions are not allowed in check constraints" msgstr "체크 제약 조건에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:470 +#: parser/parse_agg.c:481 msgid "grouping operations are not allowed in check constraints" msgstr "체크 제약 조건에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:477 +#: parser/parse_agg.c:488 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "DEFAULT 표현식에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:479 +#: parser/parse_agg.c:490 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "DEFAULT 표현식에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:484 +#: parser/parse_agg.c:495 msgid "aggregate functions are not allowed in index expressions" msgstr "인덱스 표현식에서는 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:486 +#: parser/parse_agg.c:497 msgid "grouping operations are not allowed in index expressions" msgstr "인덱스 표현식에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:491 +#: parser/parse_agg.c:502 msgid "aggregate functions are not allowed in index predicates" msgstr "집계 함수는 함수 기반 인덱스의 함수로 사용할 수 없습니다" -#: parser/parse_agg.c:493 +#: parser/parse_agg.c:504 msgid "grouping operations are not allowed in index predicates" msgstr "그룹핑 작업은 함수 기반 인덱스의 함수로 사용할 수 없습니다" -#: parser/parse_agg.c:498 +#: parser/parse_agg.c:509 msgid "aggregate functions are not allowed in statistics expressions" msgstr "정책 표현식에서는 집계 함수 사용을 허용하지 않습니다" -#: parser/parse_agg.c:500 +#: parser/parse_agg.c:511 msgid "grouping operations are not allowed in statistics expressions" msgstr "통계 정보 표현식에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:505 +#: parser/parse_agg.c:516 msgid "aggregate functions are not allowed in transform expressions" msgstr "transform 식(expression)에 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:507 +#: parser/parse_agg.c:518 msgid "grouping operations are not allowed in transform expressions" msgstr "transform 식(expression)에 그룹핑 작업를 사용할 수 없습니다" -#: parser/parse_agg.c:512 +#: parser/parse_agg.c:523 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "EXECUTE 매개 변수로 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:514 +#: parser/parse_agg.c:525 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "EXECUTE 매개 변수로 그룹핑 작업을 사용할 수 없습니다" -#: parser/parse_agg.c:519 +#: parser/parse_agg.c:530 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "트리거의 WHEN 조건절에 집계 함수가 허용되지 않습니다" -#: parser/parse_agg.c:521 +#: parser/parse_agg.c:532 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "트리거의 WHEN 조건절에 그룹핑 작업이 허용되지 않습니다" -#: parser/parse_agg.c:526 +#: parser/parse_agg.c:537 msgid "aggregate functions are not allowed in partition bound" msgstr "파티션 범위 표현식에는 집계 함수가 허용되지 않습니다" -#: parser/parse_agg.c:528 +#: parser/parse_agg.c:539 msgid "grouping operations are not allowed in partition bound" msgstr "파티션 범위 표현식에는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:533 +#: parser/parse_agg.c:544 msgid "aggregate functions are not allowed in partition key expressions" msgstr "파티션 키 표현식에서는 집계 함수가 허용되지 않습니다" -#: parser/parse_agg.c:535 +#: parser/parse_agg.c:546 msgid "grouping operations are not allowed in partition key expressions" msgstr "파티션 키 표현식에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:541 +#: parser/parse_agg.c:552 msgid "aggregate functions are not allowed in column generation expressions" msgstr "미리 계산된 칼럼 표현식에서는 집계 함수 사용을 허용하지 않습니다" -#: parser/parse_agg.c:543 +#: parser/parse_agg.c:554 msgid "grouping operations are not allowed in column generation expressions" msgstr "미리 계산된 칼럼 표현식에서는 그룹핑 연산이 허용되지 않습니다" -#: parser/parse_agg.c:549 +#: parser/parse_agg.c:560 msgid "aggregate functions are not allowed in CALL arguments" msgstr "CALL 매개 변수로 집계 함수를 사용할 수 없습니다" -#: parser/parse_agg.c:551 +#: parser/parse_agg.c:562 msgid "grouping operations are not allowed in CALL arguments" msgstr "CALL 매개 변수로 그룹핑 연산을 사용할 수 없습니다" -#: parser/parse_agg.c:557 +#: parser/parse_agg.c:568 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "COPY FROM WHERE 조건문에서는 집계 함수가 허용되지 않습니다" -#: parser/parse_agg.c:559 +#: 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:586 parser/parse_clause.c:1956 +#: 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:589 +#: parser/parse_agg.c:600 #, c-format msgid "grouping operations are not allowed in %s" msgstr "그룹핑 작업은 %s 절에서 사용할 수 없습니다." -#: parser/parse_agg.c:690 +#: parser/parse_agg.c:701 #, c-format msgid "" "outer-level aggregate cannot contain a lower-level variable in its direct " @@ -17693,119 +18186,119 @@ msgid "" msgstr "" "출력 수준 집계는 그 직접적인 인자 안에 저수준 변수를 포함할 수 없습니다." -#: parser/parse_agg.c:768 +#: parser/parse_agg.c:779 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "집계 함수 호출은 집합 반환 함수 호출을 포함할 수 없음" -#: parser/parse_agg.c:769 parser/parse_expr.c:1700 parser/parse_expr.c:2182 -#: parser/parse_func.c:884 +#: 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 "집합 반환 함수를 LATERAL FROM 쪽으로 옮겨서 구현할 수도 있습니다." -#: parser/parse_agg.c:774 +#: parser/parse_agg.c:785 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "집계 함수 호출은 윈도우 함수 호출을 포함할 수 없음" -#: parser/parse_agg.c:853 +#: parser/parse_agg.c:864 msgid "window functions are not allowed in JOIN conditions" msgstr "윈도우 함수는 JOIN 조건에 사용할 수 없음" -#: parser/parse_agg.c:860 +#: parser/parse_agg.c:871 msgid "window functions are not allowed in functions in FROM" msgstr "윈도우 함수는 FROM 절에 있는 함수로 사용할 수 없음" -#: parser/parse_agg.c:866 +#: parser/parse_agg.c:877 msgid "window functions are not allowed in policy expressions" msgstr "윈도우 함수는 정책 식에 사용할 수 없음" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:890 msgid "window functions are not allowed in window definitions" msgstr "윈도우 함수는 윈도우 함수 정의에 사용할 수 없음" -#: parser/parse_agg.c:890 +#: parser/parse_agg.c:901 msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "윈도우 함수는 MERGE WHEN 조건절에서 사용할 수 없음" -#: parser/parse_agg.c:914 +#: parser/parse_agg.c:926 msgid "window functions are not allowed in check constraints" msgstr "윈도우 함수는 check 제약조건에 사용할 수 없음" -#: parser/parse_agg.c:918 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in DEFAULT expressions" msgstr "윈도우 함수는 DEFAULT 식에서 사용할 수 없음" -#: parser/parse_agg.c:921 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in index expressions" msgstr "윈도우 함수는 인덱스 식에서 사용할 수 없음" -#: parser/parse_agg.c:924 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in statistics expressions" msgstr "윈도우 함수는 통계 정보식에 사용할 수 없음" -#: parser/parse_agg.c:927 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in index predicates" msgstr "윈도우 함수는 함수 기반 인덱스에서 사용할 수 없음" -#: parser/parse_agg.c:930 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in transform expressions" msgstr "윈도우 함수는 transform 식에서 사용할 수 없음" -#: parser/parse_agg.c:933 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in EXECUTE parameters" msgstr "윈도우 함수는 EXECUTE 매개 변수 설정 값으로 사용할 수 없음" -#: parser/parse_agg.c:936 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "윈도우 함수는 트리거의 WHEN 조건절에서 사용할 수 없음" -#: parser/parse_agg.c:939 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in partition bound" msgstr "윈도우 함수는 파티션 범위 표현식에서 사용할 수 없음" -#: parser/parse_agg.c:942 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in partition key expressions" msgstr "윈도우 함수는 파티션 키 표현식에서 사용할 수 없음" -#: parser/parse_agg.c:945 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in CALL arguments" msgstr "윈도우 함수는 CALL 매개 변수 설정 값으로 사용할 수 없음" -#: parser/parse_agg.c:948 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "윈도우 함수는 COPY FROM WHERE 조건에 사용할 수 없음" -#: parser/parse_agg.c:951 +#: 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:974 parser/parse_clause.c:1965 +#: 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:1008 parser/parse_clause.c:2798 +#: parser/parse_agg.c:1020 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "\"%s\" 윈도우 함수가 없음" -#: parser/parse_agg.c:1096 +#: parser/parse_agg.c:1108 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "너무 많은 그룹핑 세트가 있습니다 (최대값 4096)" -#: parser/parse_agg.c:1236 +#: 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:1429 +#: parser/parse_agg.c:1441 #, c-format msgid "" "column \"%s.%s\" must appear in the GROUP BY clause or be used in an " @@ -17814,60 +18307,60 @@ msgstr "" "column \"%s.%s\" 는 반드시 GROUP BY 절내에 있어야 하던지 또는 집계 함수 내에" "서 사용되어져야 한다" -#: parser/parse_agg.c:1432 +#: 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:1437 +#: parser/parse_agg.c:1449 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "" "subquery 가 outer query 에서 그룹화 되지 않은 열인 \"%s.%s\"를 사용합니다" -#: parser/parse_agg.c:1601 +#: parser/parse_agg.c:1613 #, c-format msgid "" "arguments to GROUPING must be grouping expressions of the associated query " "level" msgstr "GROUPING의 인자는 그 관련 쿼리 수준의 그룹핑 표현식이어야 합니다." -#: parser/parse_clause.c:195 +#: parser/parse_clause.c:193 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "\"%s\" 릴레이션은 자료 변경 구문의 대상이 될 수 없음" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2552 +#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "집합 변환 함수는 FROM 절의 최상위 수준에서만 사용할 수 있습니다." -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:609 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "다중 칼럼 정의 목록은 같은 함수용으로 허용하지 않음" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:642 #, c-format msgid "" "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "" "여러 함수를 사용하는 ROWS FROM() 구문에는 칼럼 정의 목록을 지정하면 안됩니다." -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:643 #, c-format msgid "" "Put a separate column definition list for each function inside ROWS FROM()." msgstr "ROWS FROM() 안 각 함수용 칼럼 정의 목록을 구분해 주세요." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:649 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "" "여러 인자를 사용하는 UNNEST()에서는 칼럼 정의 목록을 사용할 수 없습니다." -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:650 #, c-format msgid "" "Use separate UNNEST() calls inside ROWS FROM(), and attach a column " @@ -17875,153 +18368,153 @@ msgid "" msgstr "" "ROWS FROM() 안에 UNNEST() 호출을 분리하고, 각각 칼럼 정의 목록을 추가하세요." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:657 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY 구문은 칼럼 정의 목록과 함께 쓸 수 없습니다." -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:658 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "ROWS FROM() 안에 칼럼 정의 목록을 넣으세요." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:762 parser/parse_jsontable.c:295 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "하나의 FOR ORDINALITY 칼럼만 허용합니다." -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:823 #, c-format msgid "column name \"%s\" is not unique" msgstr "\"%s\" 칼럼은 유일성을 가지지 못합니다(not unique)" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:865 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "\"%s\" 네임스페이스는 유일성을 가지지 못합니다(not unique)" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:875 #, c-format msgid "only one default namespace is allowed" msgstr "기본 네임스페이스는 하나만 허용합니다" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:935 #, c-format msgid "tablesample method %s does not exist" msgstr "\"%s\" 테이블 샘플링 방법이 없습니다" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:957 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "\"%s\" 테이블 샘플링 방법 %d개 인자를 지정해야함, (현재 %d개)" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:991 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "\"%s\" 테이블 샘플링 방법은 REPEATABLE 옵션을 지원하지 않음" -#: parser/parse_clause.c:1138 +#: parser/parse_clause.c:1144 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "TABLESAMPLE 절은 테이블과 구체화된 뷰에서만 사용할 수 있습니다" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1331 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "USING 절 내에 열 이름 \"%s\" 가 한번 이상 사용되었습니다" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1346 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "left table 내에 common column 이름 \"%s\" 가 한번 이상 사용되었다" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1355 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "USING 조건절에서 지정한 \"%s\" 칼럼이 왼쪽 테이블에 없음" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1370 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "common column name \"%s\"가 right table 에 한번 이상 사용되었다" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1379 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "USING 조건절에서 지정한 \"%s\" 칼럼이 오른쪽 테이블에 없음" -#: parser/parse_clause.c:1901 +#: parser/parse_clause.c:1907 #, c-format msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "FETCH FIRST ... WITH TIES 절 안에 로우가 null 이면 안됩니다." #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:1932 #, c-format msgid "argument of %s must not contain variables" msgstr "%s 의 인자로 변수를 포함할 수 없습니다." #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2091 +#: parser/parse_clause.c:2097 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s \"%s\" 가 명확하지 않은 표현입니다." #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2119 +#: parser/parse_clause.c:2125 #, c-format msgid "non-integer constant in %s" msgstr "정수가 아닌 상수가 %s 에 포함되어 있습니다" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2141 +#: parser/parse_clause.c:2147 #, c-format msgid "%s position %d is not in select list" msgstr "%s position %d 가 select list 에 포함되어 있지 않습니다" -#: parser/parse_clause.c:2580 +#: parser/parse_clause.c:2586 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE 인자로는 12개 이하의 인자만 허용합니다" -#: parser/parse_clause.c:2786 +#: parser/parse_clause.c:2792 #, c-format msgid "window \"%s\" is already defined" msgstr "\"%s\" 이름의 윈도우 함수가 이미 정의됨" -#: parser/parse_clause.c:2847 +#: parser/parse_clause.c:2853 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "\"%s\" 창의 PARTITION BY 절을 재정의할 수 없음" -#: parser/parse_clause.c:2859 +#: parser/parse_clause.c:2865 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "\"%s\" 창의 ORDER BY 절을 재정의할 수 없음" -#: parser/parse_clause.c:2889 parser/parse_clause.c:2895 +#: parser/parse_clause.c:2895 parser/parse_clause.c:2901 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "프래임 절이 있어, \"%s\" 윈도우를 복사할 수 없음." -#: parser/parse_clause.c:2897 +#: parser/parse_clause.c:2903 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "OVER 절에 괄호가 빠졌음" -#: parser/parse_clause.c:2917 +#: parser/parse_clause.c:2923 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "PRECEDING/FOLLOWING 옵셋용 RANGE는 하나의 ORDER BY 칼럼이 필요합니다." -#: parser/parse_clause.c:2940 +#: parser/parse_clause.c:2946 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "GROUPS 모드는 ORDER BY 구문이 필요함" -#: parser/parse_clause.c:3011 +#: parser/parse_clause.c:3016 #, c-format msgid "" "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument " @@ -18030,75 +18523,75 @@ msgstr "" "DISTINCT, ORDER BY 표현식을 집계 함수와 쓸 때는, 반드시 select list 에 나타나" "야만 합니다" -#: parser/parse_clause.c:3012 +#: parser/parse_clause.c:3017 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "SELECT DISTINCT, ORDER BY 표현식을 위해서 반드시 select list 에 나타나야만 합" "니다" -#: parser/parse_clause.c:3044 +#: parser/parse_clause.c:3049 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "DISTINCT 예약어로 집계를 할 경우 적어도 하나의 인자는 있어야 함" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3050 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT 구문은 적어도 한 개 이상의 칼럼이 있어야 합니다" -#: parser/parse_clause.c:3111 parser/parse_clause.c:3143 +#: parser/parse_clause.c:3116 parser/parse_clause.c:3148 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "" "SELECT DISTINCT ON 표현식은 반드시 초기 ORDER BY 표현식과 일치하여야 한다" -#: parser/parse_clause.c:3221 +#: parser/parse_clause.c:3226 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC 예약어는 ON CONFLICT 절과 함께 사용할 수 없습니다." -#: parser/parse_clause.c:3227 +#: parser/parse_clause.c:3232 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST 절은 ON CONFLICT 절과 함께 사용할 수 없습니다." -#: parser/parse_clause.c:3306 +#: parser/parse_clause.c:3311 #, c-format msgid "" "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE 구문에는 추론 명세나 제약조건 이름이 필요합니다." -#: parser/parse_clause.c:3307 +#: parser/parse_clause.c:3312 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "사용예, ON CONFLICT (칼럼이름)." -#: parser/parse_clause.c:3318 +#: parser/parse_clause.c:3323 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT 절은 시스템 카탈로그 테이블에서는 사용할 수 없습니다" -#: parser/parse_clause.c:3326 +#: parser/parse_clause.c:3331 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "" "\"%s\" 테이블에는 ON CONFLICT 기능을 사용할 수 없습니다. 이 테이블은 카탈로" "그 테이블로 사용됩니다." -#: parser/parse_clause.c:3457 +#: parser/parse_clause.c:3462 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "%s 연산자는 유효한 순서 지정 연산자가 아님" -#: parser/parse_clause.c:3459 +#: parser/parse_clause.c:3464 #, c-format msgid "" "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "" "순서 지정 연산자는 btree 연산자 패밀리의 \"<\" or \">\" 멤버여야 합니다." -#: parser/parse_clause.c:3770 +#: parser/parse_clause.c:3775 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" @@ -18106,7 +18599,7 @@ msgstr "" "PRECEDING/FOLLOWING 옵셋과 함께 쓰는 RANGE 구문은 칼럼의 %s 자로형을 지원하" "지 않습니다." -#: parser/parse_clause.c:3776 +#: parser/parse_clause.c:3781 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s " @@ -18115,12 +18608,12 @@ msgstr "" "PRECEDING/FOLLOWING 옵셋과 함께 쓰는 RANGE 구문은 %s 자료형 칼럼과 %s 옵셋 형" "식을 지원하지 않습니다." -#: parser/parse_clause.c:3779 +#: parser/parse_clause.c:3784 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "옵셋 값을 적당한 자료형으로 변환하세요." -#: parser/parse_clause.c:3784 +#: parser/parse_clause.c:3789 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for " @@ -18129,15 +18622,15 @@ msgstr "" "PRECEDING/FOLLOWING 옵셋과 함께 쓰는 RANGE 구문이 %s 자료형 칼럼과 %s 옵셋 형" "식 계산에서 여러 가지로 해석될 수 있습니다." -#: parser/parse_clause.c:3787 +#: parser/parse_clause.c:3792 #, c-format 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:2083 parser/parse_expr.c:2691 parser/parse_expr.c:3497 -#: parser/parse_target.c:985 +#: 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 자료형으로 형변환할 수 없습니다." @@ -18196,19 +18689,19 @@ msgid "arguments declared \"%s\" are not all alike" msgstr "\"%s\" 로 선언된 인자들이 모두 같지 않습니다." #: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 -#: utils/fmgr/funcapi.c:592 +#: utils/fmgr/funcapi.c:600 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "%s 이름으로 선언된 인자가 array가 아니고, %s 자료형입니다" #: parser/parse_coerce.c:2282 parser/parse_coerce.c:2432 -#: utils/fmgr/funcapi.c:606 +#: utils/fmgr/funcapi.c:614 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "%s 로 선언된 인자가 range 자료형이 아니고, %s 자료형입니다" #: parser/parse_coerce.c:2316 parser/parse_coerce.c:2396 -#: parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:624 utils/fmgr/funcapi.c:689 +#: parser/parse_coerce.c:2529 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 로 선언된 인자가 multirange 자료형이 아니고, %s 자료형입니다" @@ -18365,28 +18858,23 @@ msgstr "\"%s\" 쿼리에 대한 재귀 참조가 INTERSECT 내에 표시되지 msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "\"%s\" 쿼리에 대한 재귀 참조가 EXCEPT 내에 표시되지 않아야 함" -#: parser/parse_cte.c:133 -#, c-format -msgid "MERGE not supported in WITH query" -msgstr "WITH 쿼리 안에 MERGE 구문은 쓸 수 없음" - -#: parser/parse_cte.c:143 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "\"%s\" WITH 쿼리 이름이 여러 번 지정됨" -#: parser/parse_cte.c:314 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "%s 자료형용 부등식 연산자를 알 수 없음" -#: parser/parse_cte.c:341 +#: parser/parse_cte.c:335 #, c-format msgid "" "WITH clause containing a data-modifying statement must be at the top level" msgstr "자료를 변경하는 구문이 있는 WITH 절은 최상위 수준에 있어야 합니다" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:384 #, c-format msgid "" "recursive query \"%s\" column %d has type %s in non-recursive term but type " @@ -18395,12 +18883,12 @@ msgstr "" "\"%s\" 재귀 쿼리의 %d 번째 칼럼은 비재귀 조건에 %s 자료형을 포함하는데 전체적" "으로는 %s 자료형임" -#: parser/parse_cte.c:396 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "비재귀 조건의 출력을 올바른 형식으로 형변환하십시오." -#: parser/parse_cte.c:401 +#: parser/parse_cte.c:395 #, c-format msgid "" "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term " @@ -18409,42 +18897,42 @@ msgstr "" "\"%s\" 재귀 쿼리의 %d 번째 칼럼은 비재귀 조건에 %s 자료형을 포함하는데 전체적" "으로는 %s 자료형임" -#: parser/parse_cte.c:405 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "" "비 재귀형 요소들의 문자 정렬 규칙을 지정할 때는 COLLATE 절을 추가하세요." -#: parser/parse_cte.c:426 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "WITH 쿼리가 재귀 쿼리 형식이 아님" -#: parser/parse_cte.c:457 +#: parser/parse_cte.c:451 #, c-format msgid "" "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "" "SEARCH 또는 CYCLE 절을 사용할 때는 UNION 왼쪽 구문은 SELECT 여야 합니다." -#: parser/parse_cte.c:462 +#: parser/parse_cte.c:456 #, c-format msgid "" "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "" "SEARCH 또는 CYCLE 절을 사용할 때는 UNION 오른쪽 구문은 SELECT 여야 합니다." -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "\"%s\" search용 칼럼이 WITH 쿼리 칼럼 목록에 없음" -#: parser/parse_cte.c:484 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "\"%s\" search용 칼럼을 하나 이상 지정했음" -#: parser/parse_cte.c:493 +#: parser/parse_cte.c:487 #, c-format msgid "" "search sequence column name \"%s\" already used in WITH query column list" @@ -18452,163 +18940,171 @@ msgstr "" "\"%s\" 이름의 search sequence 칼럼 이름은 WITH 쿼리 칼럼 목록 안에서 이미 사" "용되고 있습니다." -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "\"%s\" cycle용 칼럼이 WITH 쿼리 칼럼 목록에 없습니다" -#: parser/parse_cte.c:517 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "\"%s\" cycle용 칼럼을 하나 이상 지정했음" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "" "\"%s\" cycle mark 칼럼 이름이 WITH 쿼리 칼럼 목록 안에서 이미 사용되고 있습니" "다." -#: parser/parse_cte.c:533 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "" "\"%s\" cycle path 칼럼 이름이 WITH 쿼리 칼럼 목록 안에서 이미 사용되고 있습니" "다." -#: parser/parse_cte.c:541 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "cycle mark 칼럼 이름과 cycle path 칼럼 이름이 같습니다." -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "search sequence 칼럼 이름과 cycle mark 칼럼 이름이 같습니다." -#: parser/parse_cte.c:558 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "search sequence 칼럼 이름과 cycle path 칼럼 이름이 같습니다." -#: parser/parse_cte.c:642 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "" "\"%s\" WITH 쿼리에는 %d개의 칼럼을 사용할 수 있는데 %d개의 칼럼이 지정됨" -#: parser/parse_cte.c:822 +#: parser/parse_cte.c:816 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "WITH 항목 간의 상호 재귀가 구현되지 않음" -#: parser/parse_cte.c:874 +#: parser/parse_cte.c:868 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "\"%s\" 재귀 쿼리에 자료 변경 구문이 포함될 수 없습니다." -#: parser/parse_cte.c:882 +#: parser/parse_cte.c:876 #, c-format msgid "" "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] " "recursive-term" msgstr "\"%s\" 재귀 쿼리에 비재귀 조건 형태의 UNION [ALL] 재귀 조건이 없음" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:911 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "재귀 쿼리의 ORDER BY가 구현되지 않음" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:917 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "재귀 쿼리의 OFFSET이 구현되지 않음" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:923 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "재귀 쿼리의 LIMIT가 구현되지 않음" -#: parser/parse_cte.c:944 +#: 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:1001 +#: parser/parse_cte.c:1008 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "\"%s\" 쿼리에 대한 재귀 참조가 여러 번 표시되지 않아야 함" -#: parser/parse_expr.c:294 +#: parser/parse_expr.c:313 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "이 영역에서는 DEFAULT를 사용할 수 없습니다" -#: parser/parse_expr.c:371 parser/parse_relation.c:3688 -#: parser/parse_relation.c:3698 parser/parse_relation.c:3716 -#: parser/parse_relation.c:3723 parser/parse_relation.c:3737 +#: 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:383 +#: parser/parse_expr.c:418 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "\"%s\" 칼럼은 %s 자료형을 찾을 수 없음" -#: parser/parse_expr.c:389 +#: parser/parse_expr.c:424 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "레코드 데이터 형식에서 \"%s\" 칼럼을 식별할 수 없음" -#: parser/parse_expr.c:395 +#: parser/parse_expr.c:430 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "" ".%s 표현이 %s 자료형 사용되었는데, 이는 복소수형 (complex type)이 아닙니다" -#: parser/parse_expr.c:426 parser/parse_target.c:733 +#: 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:548 +#: parser/parse_expr.c:584 msgid "cannot use column reference in DEFAULT expression" msgstr "DEFAULT 표현식에서는 열 reference를 사용할 수 없음" -#: parser/parse_expr.c:551 +#: parser/parse_expr.c:587 msgid "cannot use column reference in partition bound expression" msgstr "파티션 범위 표현식에서 칼럼 참조를 사용할 수 없음" -#: parser/parse_expr.c:810 parser/parse_relation.c:833 -#: parser/parse_relation.c:915 parser/parse_target.c:1225 +#: 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:866 parser/parse_param.c:110 parser/parse_param.c:142 +#: 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:1066 +#. 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 "NULIF 절은 불리언 값을 얻기 위해서 = 연산자를 필요로 합니다" +msgid "%s requires = operator to yield boolean" +msgstr "%s 절은 불리언 값을 얻기 위해서 = 연산자를 필요로 합니다" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1072 parser/parse_expr.c:3007 +#: parser/parse_expr.c:1109 parser/parse_expr.c:3072 #, c-format msgid "%s must not return a set" msgstr "%s에서는 집합을 반환할 수 없습니다." -#: parser/parse_expr.c:1457 parser/parse_expr.c:1489 +#: parser/parse_expr.c:1395 +#, c-format +msgid "" +"MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" +msgstr "" +"MERGE_ACTION()은 MERGE 명령의 RETURNING 목록 안에서만 사용될 수 있음" + +#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 #, c-format msgid "number of columns does not match number of values" msgstr "칼럼의 개수와, values의 개수가 틀립니다" -#: parser/parse_expr.c:1503 +#: parser/parse_expr.c:1565 #, c-format msgid "" "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() " @@ -18617,222 +19113,350 @@ msgstr "" "다중 칼럼 UPDATE 요소를 위한 소스는 서브셀렉트나 ROW() 표현식이어야 합니다." #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1698 parser/parse_expr.c:2180 parser/parse_func.c:2677 +#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "%s 안에서는 집합 반환 함수를 사용할 수 없음" -#: parser/parse_expr.c:1761 +#: parser/parse_expr.c:1824 msgid "cannot use subquery in check constraint" msgstr "체크 제약 조건에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1765 +#: parser/parse_expr.c:1828 msgid "cannot use subquery in DEFAULT expression" msgstr "DEFAULT 식에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1768 +#: parser/parse_expr.c:1831 msgid "cannot use subquery in index expression" msgstr "인덱스 식(expression)에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1771 +#: parser/parse_expr.c:1834 msgid "cannot use subquery in index predicate" msgstr "인덱스 술어(predicate)에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1774 +#: parser/parse_expr.c:1837 msgid "cannot use subquery in statistics expression" msgstr "통계 정보 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1777 +#: parser/parse_expr.c:1840 msgid "cannot use subquery in transform expression" msgstr "transform 식(expression)에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1780 +#: parser/parse_expr.c:1843 msgid "cannot use subquery in EXECUTE parameter" msgstr "EXECUTE 매개 변수로 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1783 +#: parser/parse_expr.c:1846 msgid "cannot use subquery in trigger WHEN condition" msgstr "트리거 WHEN 조건절에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1786 +#: parser/parse_expr.c:1849 msgid "cannot use subquery in partition bound" msgstr "파티션 범위 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1789 +#: parser/parse_expr.c:1852 msgid "cannot use subquery in partition key expression" msgstr "파티션 키 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1792 +#: parser/parse_expr.c:1855 msgid "cannot use subquery in CALL argument" msgstr "CALL 매개 변수로 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1795 +#: parser/parse_expr.c:1858 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "COPY FROM WHERE 조건절에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1798 +#: parser/parse_expr.c:1861 msgid "cannot use subquery in column generation expression" msgstr "미리 계산된 칼럼 생성 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1851 parser/parse_expr.c:3628 +#: parser/parse_expr.c:1914 parser/parse_expr.c:3764 #, c-format msgid "subquery must return only one column" msgstr "subquery는 오로지 한개의 열만을 돌려 주어야 합니다." -#: parser/parse_expr.c:1922 +#: parser/parse_expr.c:1985 #, c-format msgid "subquery has too many columns" msgstr "subquery 에가 너무 많은 칼럼을 가집니다" -#: parser/parse_expr.c:1927 +#: parser/parse_expr.c:1990 #, c-format msgid "subquery has too few columns" msgstr "subquery 에 명시된 열 수가 너무 적다" -#: parser/parse_expr.c:2023 +#: parser/parse_expr.c:2086 #, c-format msgid "cannot determine type of empty array" msgstr "빈 배열의 자료형을 확인할 수 없음" -#: parser/parse_expr.c:2024 +#: parser/parse_expr.c:2087 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "원하는 형식으로 명시적으로 형변환하십시오(예: ARRAY[]::integer[])." -#: parser/parse_expr.c:2038 +#: parser/parse_expr.c:2101 #, c-format msgid "could not find element type for data type %s" msgstr "%s 자료형의 요소 자료형을 찾을 수 없음" -#: parser/parse_expr.c:2121 +#: parser/parse_expr.c:2184 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW 표현식은 최대 %d 개의 항목을 지정할 수 있습니다" -#: parser/parse_expr.c:2326 +#: parser/parse_expr.c:2389 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "이름이 지정되지 않은 XML 속성 값은 열 참조여야 함" -#: parser/parse_expr.c:2327 +#: parser/parse_expr.c:2390 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "이름이 지정되지 않은 XML 요소 값은 열 참조여야 함" -#: parser/parse_expr.c:2342 +#: parser/parse_expr.c:2405 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "\"%s\" XML 속성 이름이 여러 번 표시됨" -#: parser/parse_expr.c:2450 +#: parser/parse_expr.c:2513 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "XMLSERIALIZE 결과를 %s 형으로 바꿀 수 없음" -#: parser/parse_expr.c:2764 parser/parse_expr.c:2960 +#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 #, c-format msgid "unequal number of entries in row expressions" msgstr "행 표현식에서 항목 수가 일치하지 않습니다" -#: parser/parse_expr.c:2774 +#: parser/parse_expr.c:2837 #, c-format msgid "cannot compare rows of zero length" msgstr "길이가 영(0)인 행들은 비교할 수 없습니다" -#: parser/parse_expr.c:2799 +#: parser/parse_expr.c:2862 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "행 비교 연산자는 불리언형을 리턴해야 합니다. %s 자료형을 사용할 수 없습니다" -#: parser/parse_expr.c:2806 +#: parser/parse_expr.c:2869 #, c-format msgid "row comparison operator must not return a set" msgstr "행 비교 연산자는 set을 리턴할 수 없습니다" -#: parser/parse_expr.c:2865 parser/parse_expr.c:2906 +#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "%s 행 비교 연산자의 구문을 분석할 수 없습니다" -#: parser/parse_expr.c:2867 +#: parser/parse_expr.c:2930 #, c-format msgid "" "Row comparison operators must be associated with btree operator families." msgstr "로우 비교 연산자를 btree 연산자 패밀리와 연결해야 함" -#: parser/parse_expr.c:2908 +#: parser/parse_expr.c:2971 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "여러 가지 등식들이 성립할 수 있는 가능성이 있습니다" -#: parser/parse_expr.c:3001 -#, c-format -msgid "IS DISTINCT FROM requires = operator to yield boolean" -msgstr "" -"IS DISTINCT FROM 절에서 불리언 값을 얻기 위해서 = 연산자를 필요로 합니다" - -#: parser/parse_expr.c:3239 +#: parser/parse_expr.c:3306 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "JSON ENCODING 절은 입력 자료형이 bytea 일때만 허용합니다." -#: parser/parse_expr.c:3261 +#: parser/parse_expr.c:3370 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "" "FORMAT JSON 절과 관련된 자료형이 문자열이 아닌 자료형인 경우는 사용할 수 없습" "니다." -#: parser/parse_expr.c:3262 +#: parser/parse_expr.c:3371 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "" "FORMAT JSON 절과 관련된 자료형이 문자열이 아닌 자료형인 경우는 사용할 수 없습" "니다." -#: parser/parse_expr.c:3335 +#: parser/parse_expr.c:3460 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "비 문자열 출력 형으로 JSON 포멧을 사용할 수 없음" -#: parser/parse_expr.c:3348 +#: parser/parse_expr.c:3473 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "이진 자료형이 아닌 출력 자료형을 위한 JSON 인코딩을 지정할 수 없음" -#: parser/parse_expr.c:3353 +#: parser/parse_expr.c:3478 #, c-format msgid "unsupported JSON encoding" msgstr "지원하지 않는 JSON 인코딩" -#: parser/parse_expr.c:3354 +#: parser/parse_expr.c:3479 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "UTF8 JSON 인코딩만 지원합니다." -#: parser/parse_expr.c:3391 +#: parser/parse_expr.c:3516 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "SQL/JSON 함수들은 SETOF 반환 자료형을 지원하지 않음" -#: parser/parse_expr.c:3712 parser/parse_func.c:865 +#: 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: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:3934 +#: parser/parse_expr.c:4072 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "" "이진 자료형이 아닌 입력 자료형을 위한 JSON FORMAT ENCODING 구문을 사용할 수 " "없음" -#: parser/parse_expr.c:3954 +#: parser/parse_expr.c:4092 #, c-format msgid "cannot use type %s in IS JSON predicate" msgstr "IS JSON 술어(predicate)에 %s 자료형을 사용할 수 없음" +#: parser/parse_expr.c:4118 parser/parse_expr.c:4239 +#, c-format +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 "json 또는 jsonb 형을 반환하세요." + +#: parser/parse_expr.c:4168 +#, c-format +msgid "cannot use non-string types with WITH UNIQUE KEYS clause" +msgstr "문자열이 아닌 자료형은 WITH UNIQUE KEYS 절과 함께 사용할 수 없음" + +#: parser/parse_expr.c:4242 +#, c-format +msgid "Try returning a string type or bytea." +msgstr "문자열이나 bytea 자료형을 반환하도록 하세요." + +#: parser/parse_expr.c:4307 +#, c-format +msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" +msgstr "%s()의 RETURNING 절안에는 FORMAT JSON 옵션을 지정할 수 없음" + +#: parser/parse_expr.c:4320 +#, c-format +msgid "" +"SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" +msgstr "WITH WRAPPER 옵션을 사용할 때는 SQL/JSON QUOTES 옵션을 지정하면 안됨" + +#. 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 "" +"%s 옵션(대상: %s)에는 ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT, 또는 " +"DEFAULT 표현식만 쓸 수 있음" + +#. 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 "" +"포멧된 칼럼용 %s 옵션에는 ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT, 또는 " +"DEFAULT 표현식만 쓸 수 있음" + +#: parser/parse_expr.c:4395 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for %s." +msgstr "%s 옵션 값으로는 ERROR, TRUE, FALSE, 또는 UNKNOWN 만 쓸 수 있음: 대상=%s" + +#. 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 "EXISTS 칼럼용 %s 옵션에는 ERROR, TRUE, FALSE, 또는 UNKNOWN 만 쓸 수 있음." + +#. 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 "%s 옵션 값으로는 ERROR, NULL, 또는 DEFAULT 만 쓸 수 있음: 대상=%s" + +#. 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 "스칼라 칼럼용 %s 옵션에는 ERROR, NULL, 또는 DEFAULT 만 쓸 수 있음." + + +#: 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:4707 +#, c-format +msgid "" +"can only specify a constant, non-aggregate function, or operator expression " +"for DEFAULT" +msgstr "" +"DEFAULT로는 상수, 비집계 함수, 또는 연산자 표현식만 쓸 수 있음" + +#: parser/parse_expr.c:4712 +#, c-format +msgid "DEFAULT expression must not contain column references" +msgstr "DEFAULT 표현식에서는 칼럼 참조를 포함할 수 없습니다" + +#: parser/parse_expr.c:4717 +#, c-format +msgid "DEFAULT expression must not return a set" +msgstr "DEFAULT 표현식에서는 집합을 반환할 수 없습니다." + +#: 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" @@ -18843,7 +19467,7 @@ msgstr "\"%s\" 이름의 매개 변수가 여러 번 사용 됨" msgid "positional argument cannot follow named argument" msgstr "위치 기반 인자 뒤에 이름 기반 인자를 쓸 수 없습니다." -#: parser/parse_func.c:287 parser/parse_func.c:2367 +#: parser/parse_func.c:287 parser/parse_func.c:2368 #, c-format msgid "%s is not a procedure" msgstr "%s 개체는 프로시져가 아님" @@ -18992,7 +19616,7 @@ msgstr "" "른 위치에 쓰지 않은 것 같습니다. ORDER BY 절은 모든 집계용 인자들 맨 뒤에 있" "어야 합니다." -#: parser/parse_func.c:622 parser/parse_func.c:2410 +#: parser/parse_func.c:622 parser/parse_func.c:2411 #, c-format msgid "procedure %s does not exist" msgstr "\"%s\" 프로시져 없음" @@ -19020,7 +19644,7 @@ msgstr "" msgid "VARIADIC argument must be an array" msgstr "VARIADIC 매개 변수는 배열이어야 함" -#: parser/parse_func.c:791 parser/parse_func.c:855 +#: parser/parse_func.c:791 parser/parse_func.c:856 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) 사용할 때는 이 함수가 매개 변수 없는 집계 함수여야 합니다" @@ -19035,237 +19659,238 @@ msgstr "집계 함수는 세트를 반환할 수 없음" msgid "aggregates cannot use named arguments" msgstr "집계 함수는 인자 이름을 사용할 수 없음" -#: parser/parse_func.c:845 +#: parser/parse_func.c:846 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "윈도우 함수에 대해 DISTINCT가 구현되지 않음" -#: parser/parse_func.c:874 +#: parser/parse_func.c:875 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "비집계 윈도우 함수에 대해 FILTER가 구현되지 않음" -#: parser/parse_func.c:883 +#: parser/parse_func.c:884 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "윈도우 함수 호출에 집합 반환 함수 호출을 포함할 수 없음" -#: parser/parse_func.c:891 +#: parser/parse_func.c:892 #, c-format msgid "window functions cannot return sets" msgstr "윈도우 함수는 세트를 반환할 수 없음" -#: parser/parse_func.c:2166 parser/parse_func.c:2439 +#: parser/parse_func.c:2167 parser/parse_func.c:2440 #, c-format msgid "could not find a function named \"%s\"" msgstr "\"%s\" 함수를 찾을 수 없음" -#: parser/parse_func.c:2180 parser/parse_func.c:2457 +#: parser/parse_func.c:2181 parser/parse_func.c:2458 #, c-format msgid "function name \"%s\" is not unique" msgstr "\"%s\" 함수 이름은 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2182 parser/parse_func.c:2460 +#: parser/parse_func.c:2183 parser/parse_func.c:2461 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2226 +#: parser/parse_func.c:2227 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "프로시져는 %d개 이상의 인자를 사용할 수 없음" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2358 #, c-format msgid "%s is not a function" msgstr "%s 이름의 개체는 함수가 아닙니다" -#: parser/parse_func.c:2377 +#: parser/parse_func.c:2378 #, c-format msgid "function %s is not an aggregate" msgstr "%s 함수는 집계 함수가 아닙니다" -#: parser/parse_func.c:2405 +#: parser/parse_func.c:2406 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "\"%s\" 이름의 프로시져를 찾을 수 없음" -#: parser/parse_func.c:2419 +#: parser/parse_func.c:2420 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "\"%s\" 이름의 집계 함수를 찾을 수 없음" -#: parser/parse_func.c:2424 +#: parser/parse_func.c:2425 #, c-format msgid "aggregate %s(*) does not exist" msgstr "%s(*) 집계 함수 없음" -#: parser/parse_func.c:2429 +#: parser/parse_func.c:2430 #, c-format msgid "aggregate %s does not exist" msgstr "%s 집계 함수 없음" -#: parser/parse_func.c:2465 +#: parser/parse_func.c:2466 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "\"%s\" 프로시져는 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2468 +#: parser/parse_func.c:2469 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "해당 프로시져의 입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2473 +#: parser/parse_func.c:2474 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "\"%s\" 집계 함수가 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2476 +#: parser/parse_func.c:2477 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "해당 집계 함수의 입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2481 +#: parser/parse_func.c:2482 #, c-format msgid "routine name \"%s\" is not unique" msgstr "\"%s\" 루틴 이름은 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2484 +#: parser/parse_func.c:2485 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "해당 루틴의 입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2539 +#: parser/parse_func.c:2540 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "집합 반환 함수는 JOIN 조건에 사용할 수 없음" -#: parser/parse_func.c:2560 +#: parser/parse_func.c:2561 msgid "set-returning functions are not allowed in policy expressions" msgstr "집합 반환 함수는 정책 식에 사용할 수 없음" -#: parser/parse_func.c:2576 +#: parser/parse_func.c:2577 msgid "set-returning functions are not allowed in window definitions" msgstr "집합 반환 함수는 윈도우 함수 정의에 사용할 수 없음" -#: parser/parse_func.c:2613 +#: parser/parse_func.c:2615 msgid "set-returning functions are not allowed in MERGE WHEN conditions" msgstr "집합 반환 함수는 MERGE WHEN 조건절에서 사용할 수 없음" -#: parser/parse_func.c:2617 +#: parser/parse_func.c:2619 msgid "set-returning functions are not allowed in check constraints" msgstr "집합 반환 함수는 check 제약조건에 사용할 수 없음" -#: parser/parse_func.c:2621 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "집합 반환 함수는 DEFAULT 식에서 사용할 수 없음" -#: parser/parse_func.c:2624 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index expressions" msgstr "집합 반환 함수는 인덱스 식에서 사용할 수 없음" -#: parser/parse_func.c:2627 +#: parser/parse_func.c:2629 msgid "set-returning functions are not allowed in index predicates" msgstr "집합 반환 함수는 함수 기반 인덱스에서 사용할 수 없음" -#: parser/parse_func.c:2630 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in statistics expressions" msgstr "집합 반환 함수는 통계 정보 식에 사용할 수 없음" -#: parser/parse_func.c:2633 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in transform expressions" msgstr "집합 반환 함수는 transform 식에서 사용할 수 없음" -#: parser/parse_func.c:2636 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "집합 반환 함수는 EXECUTE 매개 변수 설정 값으로 사용할 수 없음" -#: parser/parse_func.c:2639 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "집합 반환 함수는 트리거의 WHEN 조건절에서 사용할 수 없음" -#: parser/parse_func.c:2642 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition bound" msgstr "집합 반환 함수는 파티션 범위 식에서 사용할 수 없음" -#: parser/parse_func.c:2645 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in partition key expressions" msgstr "집합 반환 함수는 인덱스 식에서 사용할 수 없음" -#: parser/parse_func.c:2648 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in CALL arguments" msgstr "집합 반환 함수는 CALL 명령의 인자로 사용할 수 없음" -#: parser/parse_func.c:2651 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "집합 반환 함수는 COPY FROM WHERE 조건절에 사용할 수 없음" -#: parser/parse_func.c:2654 +#: parser/parse_func.c:2656 msgid "" "set-returning functions are not allowed in column generation expressions" msgstr "집합 반환 함수는 미리 계산된 칼럼의 생성식에 사용할 수 없음" -#: parser/parse_merge.c:119 +#: parser/parse_jsontable.c:95 +#, c-format +msgid "" +"Only EMPTY [ ARRAY ] or ERROR is allowed in the top-level ON ERROR clause." +msgstr "" +"EMPTY [ ARRAY ] 또는 ERROR는 최상위 수준 ON ERROR 절에서만 쓸 수 있음" + +#: parser/parse_jsontable.c:189 parser/parse_jsontable.c:203 +#, c-format +msgid "duplicate JSON_TABLE column or path name: %s" +msgstr "JSON_TABLE 칼럼이나 패스 이름이 중복됨: %s" + +#: parser/parse_merge.c:129 #, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" msgstr "MERGE 명령에서는 WITH RECURSIVE 구문을 지원하지 않습니다." -#: parser/parse_merge.c:161 +#: parser/parse_merge.c:176 #, c-format msgid "unreachable WHEN clause specified after unconditional WHEN clause" msgstr "" "WHEN 조건절 판단을 하지 못하는 상황에서 그 뒤에 오는 조건 검사는 할 수 없습니" "다." -#: parser/parse_merge.c:191 -#, c-format -msgid "MERGE is not supported for relations with rules." -msgstr "MERGE 명령은 룰을 사용하는 릴레이션에서 사용할 수 없습니다." - -#: parser/parse_merge.c:208 +#: parser/parse_merge.c:222 #, c-format msgid "name \"%s\" specified more than once" msgstr "\"%s\" 이름이 한번 이상 명시되어 있습니다." -#: parser/parse_merge.c:210 +#: parser/parse_merge.c:224 #, c-format msgid "The name is used both as MERGE target table and data source." msgstr "이 이름이 MERGE 타켓 테이블과 데이터 소스 두 곳 모두 사용되었습니다." -#: parser/parse_node.c:87 +#: parser/parse_node.c:82 #, c-format msgid "target lists can have at most %d entries" msgstr "대상 목록은 최대 %d 개의 항목을 지정할 수 있습니다" -#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#: parser/parse_oper.c:114 parser/parse_oper.c:678 #, c-format msgid "postfix operators are not supported" msgstr "postfix 연산자는 지원하지 않습니다" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:509 -#: utils/adt/regproc.c:683 -#, c-format -msgid "operator does not exist: %s" -msgstr "연산자 없음: %s" - -#: parser/parse_oper.c:229 +#: parser/parse_oper.c:217 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "" "명시적으로 순차연산자(ordering operator) 를 사용하던지, 또는 query 를 수정하" "도록 하세요." -#: parser/parse_oper.c:485 +#: parser/parse_oper.c:473 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "이 연산자는 실행시에 형 강제전화이 필요합니다: %s" -#: parser/parse_oper.c:641 +#: parser/parse_oper.c:629 #, c-format msgid "operator is not unique: %s" msgstr "연산자가 고유하지 않습니다: %s" -#: parser/parse_oper.c:643 +#: parser/parse_oper.c:631 #, c-format msgid "" "Could not choose a best candidate operator. You might need to add explicit " @@ -19274,7 +19899,7 @@ msgstr "" "가장 적당한 연산자를 선택할 수 없습니다. 명시적 형변환자를 추가해야 할 수도 " "있습니다." -#: parser/parse_oper.c:652 +#: parser/parse_oper.c:640 #, c-format msgid "" "No operator matches the given name and argument type. You might need to add " @@ -19283,7 +19908,7 @@ msgstr "" "지정된 이름 및 인자 형식과 일치하는 연산자가 없습니다. 명시적 형변환자를 추가" "해야 할 수도 있습니다." -#: parser/parse_oper.c:654 +#: parser/parse_oper.c:642 #, c-format msgid "" "No operator matches the given name and argument types. You might need to add " @@ -19292,22 +19917,17 @@ msgstr "" "지정된 이름 및 인자 형식과 일치하는 연산자가 없습니다. 명시적 형변환자를 추가" "해야 할 수도 있습니다." -#: parser/parse_oper.c:714 parser/parse_oper.c:828 -#, c-format -msgid "operator is only a shell: %s" -msgstr "연산자는 셸일 뿐임: %s" - -#: parser/parse_oper.c:816 +#: parser/parse_oper.c:803 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) 는 우측에 배열이 있어야 합니다." -#: parser/parse_oper.c:858 +#: parser/parse_oper.c:844 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) 는 불리언을 얻기 위한 연산자가 필요합니다." -#: parser/parse_oper.c:863 +#: parser/parse_oper.c:849 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) 는 set 을 return 하지 않는 연산자가 요구 됩니다." @@ -19317,7 +19937,7 @@ msgstr "op ANY/ALL (array) 는 set 을 return 하지 않는 연산자가 요구 msgid "inconsistent types deduced for parameter $%d" msgstr "inconsistent types deduced for parameter $%d" -#: 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 매개 변수의 자료형을 알수가 없습니다." @@ -19337,13 +19957,13 @@ msgstr "테이블 참조 %u 가 명확하지 않습니다 (ambiguous)." msgid "table name \"%s\" specified more than once" msgstr "테이블 이름 \"%s\" 가 한번 이상 명시되어 있습니다." -#: parser/parse_relation.c:494 parser/parse_relation.c:3630 -#: parser/parse_relation.c:3639 +#: parser/parse_relation.c:494 parser/parse_relation.c:3633 +#: parser/parse_relation.c:3642 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "\"%s\" 테이블을 사용하는 FROM 절에 대한 참조가 잘못 되었습니다." -#: parser/parse_relation.c:498 parser/parse_relation.c:3641 +#: parser/parse_relation.c:498 parser/parse_relation.c:3644 #, c-format msgid "" "There is an entry for table \"%s\", but it cannot be referenced from this " @@ -19373,7 +19993,7 @@ msgid "cannot use system column \"%s\" in MERGE WHEN condition" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. MERGE WHEN 조건절에서 사용될 수 없음" #: parser/parse_relation.c:1236 parser/parse_relation.c:1691 -#: parser/parse_relation.c:2388 +#: parser/parse_relation.c:2384 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "" @@ -19394,92 +20014,92 @@ msgstr "" "WITH RECURSIVE를 사용하거나 WITH 항목의 순서를 변경하여 정방향 참조를 제거하" "십시오." -#: parser/parse_relation.c:1834 +#: parser/parse_relation.c:1833 #, c-format msgid "" "a column definition list is redundant for a function with OUT parameters" msgstr "칼럼 정의 목록이 OUT 매개 변수를 사용하는 함수에서 중복되었음" -#: parser/parse_relation.c:1840 +#: parser/parse_relation.c:1839 #, c-format msgid "" "a column definition list is redundant for a function returning a named " "composite type" msgstr "칼럼 정의 목록이 이름 기반 복합 자료형을 반환하는 함수에서 중복되었음" -#: parser/parse_relation.c:1847 +#: parser/parse_relation.c:1846 #, c-format msgid "" "a column definition list is only allowed for functions returning \"record\"" msgstr "" "칼럼 정의 목록는 오로지 \"record\" 를 리턴하는 함수 내에서만 허용됩니다." -#: parser/parse_relation.c:1858 +#: parser/parse_relation.c:1857 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "칼럼 정의 목록은 \"record\" 를 리턴하는 함수를 필요로 합니다" -#: parser/parse_relation.c:1895 +#: parser/parse_relation.c:1894 #, c-format msgid "column definition lists can have at most %d entries" msgstr "칼럼 정의 목록은 최대 %d 개의 항목을 지정할 수 있습니다" -#: parser/parse_relation.c:1955 +#: parser/parse_relation.c:1954 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "" "FROM 절 내의 함수 \"%s\" 에 지원되지 않는 return 자료형 %s 이 있습니다." -#: parser/parse_relation.c:1982 parser/parse_relation.c:2068 +#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 #, c-format msgid "functions in FROM can return at most %d columns" msgstr "FROM 절에 쓰는 함수는 최대 %d개의 칼럼을 반환하는 것이여야 함" -#: parser/parse_relation.c:2098 +#: parser/parse_relation.c:2096 #, c-format msgid "%s function has %d columns available but %d columns specified" msgstr "%s 함수는 %d 개의 칼럼을 반환하는데, %d 개의 칼럼만 명시되었습니다." -#: parser/parse_relation.c:2180 +#: parser/parse_relation.c:2177 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "" "VALUES 뒤에 오는 \"%s\" 구문에는 %d개의 칼럼이 있는데, 지정한 칼럼은 %d개 입" "니다" -#: parser/parse_relation.c:2246 +#: parser/parse_relation.c:2242 #, c-format msgid "joins can have at most %d columns" msgstr "조인에는 최대 %d개의 칼럼을 포함할 수 있음" -#: parser/parse_relation.c:2271 +#: parser/parse_relation.c:2267 #, c-format msgid "" "join expression \"%s\" has %d columns available but %d columns specified" msgstr "" "\"%s\" 조인식에는 %d 개의 칼럼이 있는데, %d 개의 칼럼만 명시되었습니다." -#: parser/parse_relation.c:2361 +#: parser/parse_relation.c:2357 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "\"%s\" WITH 쿼리에 RETURNING 절이 없습니다." -#: parser/parse_relation.c:3632 +#: parser/parse_relation.c:3635 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "아 \"%s\" alias를 참조해야 할 것 같습니다." -#: parser/parse_relation.c:3644 +#: parser/parse_relation.c:3647 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." msgstr "그 테이블을 참조하려면, 서브쿼리에 LATERAL 예약어를 사용하세요." -#: parser/parse_relation.c:3650 +#: parser/parse_relation.c:3653 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "테이블 \"%s\"에 FROM 절이 빠져 있습니다." -#: parser/parse_relation.c:3690 +#: parser/parse_relation.c:3693 #, c-format msgid "" "There are columns named \"%s\", but they are in tables that cannot be " @@ -19488,12 +20108,12 @@ msgstr "" "\"%s\" 이름의 칼럼이 테이블에 있지만, 이 쿼리의 이 부분에서는 참조될 수 없습" "니다." -#: parser/parse_relation.c:3692 +#: parser/parse_relation.c:3695 #, c-format msgid "Try using a table-qualified name." msgstr "테이블을 지정할 수 있는 이름을 사용하세요." -#: parser/parse_relation.c:3700 +#: parser/parse_relation.c:3703 #, c-format msgid "" "There is a column named \"%s\" in table \"%s\", but it cannot be referenced " @@ -19502,48 +20122,48 @@ msgstr "" "\"%s\" 이름의 칼럼이 \"%s\" 테이블에 있지만, 이 쿼리의 이 부분에서는 참조될 " "수 없습니다." -#: parser/parse_relation.c:3703 +#: parser/parse_relation.c:3706 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." msgstr "해당 칼럼을 참조하려면, LATERAL 옵션이 있는 서브쿼리를 사용하세요." -#: parser/parse_relation.c:3705 +#: parser/parse_relation.c:3708 #, c-format msgid "To reference that column, you must use a table-qualified name." msgstr "해당 칼럼을 참조하려면, 테이블 지정 이름을 사용하세요." -#: parser/parse_relation.c:3725 +#: parser/parse_relation.c:3728 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "아마 \"%s.%s\" 칼럼을 참조하는 것 같습니다." -#: parser/parse_relation.c:3739 +#: parser/parse_relation.c:3742 #, c-format msgid "" "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "아마 \"%s.%s\" 칼럼이나 \"%s.%s\" 칼럼을 참조하는 것 같습니다." -#: parser/parse_target.c:481 parser/parse_target.c:796 +#: parser/parse_target.c:480 parser/parse_target.c:795 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "시스템 열 \"%s\"에 할당할 수 없습니다." -#: parser/parse_target.c:509 +#: parser/parse_target.c:508 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "배열 요소를 DEFAULT 로 설정할 수 없습니다." -#: parser/parse_target.c:514 +#: parser/parse_target.c:513 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "하위필드를 DEFAULT로 설정할 수 없습니다." -#: parser/parse_target.c:588 +#: parser/parse_target.c:587 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "열 \"%s\"은(는) %s 자료형인데 표현식은 %s 자료형입니다." -#: parser/parse_target.c:780 +#: parser/parse_target.c:779 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a " @@ -19552,7 +20172,7 @@ msgstr "" "\"%s\" 필드 (대상 열 \"%s\")를 지정할 수 없음, %s 자료형은 복합자료형이 아니" "기 때문" -#: parser/parse_target.c:789 +#: parser/parse_target.c:788 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because there is no such " @@ -19561,7 +20181,7 @@ msgstr "" "\"%s\" 필드 (대상 열 \"%s\")를 지정할 수 없음, %s 자료형에서 그런 칼럼을 찾" "을 수 없음" -#: parser/parse_target.c:869 +#: parser/parse_target.c:877 #, c-format msgid "" "subscripted assignment to \"%s\" requires type %s but expression is of type " @@ -19569,12 +20189,12 @@ msgid "" msgstr "" "\"%s\" subscript 자료형은 %s 형이 필요하지만, 현재 표현식은 %s 자료형입니다" -#: parser/parse_target.c:879 +#: parser/parse_target.c:887 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "하위필드 \"%s\" 는 %s 자료형인데 표현식은 %s 자료형입니다." -#: parser/parse_target.c:1314 +#: parser/parse_target.c:1327 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "테이블이 명시되지 않은 SELECT * 구문은 유효하지 않습니다." @@ -19596,8 +20216,8 @@ msgstr "" msgid "type reference %s converted to %s" msgstr "ype reference %s 가 %s 로 변환되었습니다." -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:390 -#: utils/cache/typcache.c:445 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 +#: utils/cache/typcache.c:452 #, c-format msgid "type \"%s\" is only a shell" msgstr "자료형 \"%s\" 는 오로지 shell 에만 있습니다. " @@ -19617,72 +20237,77 @@ msgstr "자료형 한정자는 단순 상수 또는 식별자여야 함" msgid "invalid type name \"%s\"" msgstr "\"%s\" 자료형 이름은 유효하지 않은 자료형입니다." -#: parser/parse_utilcmd.c:264 +#: parser/parse_utilcmd.c:263 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "상속 하위 테이블로 파티션된 테이블을 만들 수 없음" -#: parser/parse_utilcmd.c:580 +#: 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 "serial 배열이 구현되지 않음" -#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 -#: parser/parse_utilcmd.c:730 +#: 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 "NULL/NOT NULL 선언이 서로 충돌합니다 : column \"%s\" of table \"%s\"" -#: parser/parse_utilcmd.c:683 +#: parser/parse_utilcmd.c:714 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 여러 개의 기본 값이 지정됨" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:731 #, c-format msgid "identity columns are not supported on typed tables" msgstr "" "식별 칼럼은 타입드 테이블(typed table - 자료형으로써 테이블)에서는 쓸 수 없음" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:735 #, c-format msgid "identity columns are not supported on partitions" msgstr "식별 칼럼은 파티션된 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:713 +#: parser/parse_utilcmd.c:744 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 여러 개의 식별자 지정이 사용되었음" -#: parser/parse_utilcmd.c:743 +#: parser/parse_utilcmd.c:774 #, c-format msgid "generated columns are not supported on typed tables" msgstr "" "미리 계산된 칼럼은 타입드 테이블(typed table - 자료형으로써 테이블)에서는 쓸 " "수 없음" -#: parser/parse_utilcmd.c:747 +#: parser/parse_utilcmd.c:778 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 여러 개의 생성식이 지정됨" -#: parser/parse_utilcmd.c:765 parser/parse_utilcmd.c:880 +#: 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:774 parser/parse_utilcmd.c:890 +#: 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:819 +#: parser/parse_utilcmd.c:850 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 default와 식별자 정의가 함께 있음" -#: parser/parse_utilcmd.c:827 +#: parser/parse_utilcmd.c:858 #, c-format msgid "" "both default and generation expression specified for column \"%s\" of table " @@ -19691,7 +20316,7 @@ msgstr "" "\"%s\" 칼럼(해당 테이블 \"%s\")에 대해 default 정의와 미리 계산된 표현식이 함" "께 있음" -#: parser/parse_utilcmd.c:835 +#: parser/parse_utilcmd.c:866 #, c-format msgid "" "both identity and generation expression specified for column \"%s\" of table " @@ -19700,115 +20325,105 @@ msgstr "" "\"%s\" 칼럼(해당 테이블 \"%s\")에 대해 identity 정의와 미리 계산된 표현식이 " "함께 있음" -#: parser/parse_utilcmd.c:900 +#: parser/parse_utilcmd.c:931 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "제외 제약 조건은 외부 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:906 -#, c-format -msgid "exclusion constraints are not supported on partitioned 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 "\"%s\" 릴레이션은 LIKE 절에서 바르지 않음" -#: parser/parse_utilcmd.c:1741 parser/parse_utilcmd.c:1849 +#: parser/parse_utilcmd.c:1736 parser/parse_utilcmd.c:1844 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "\"%s\" 인덱스는 전체 로우 테이블 참조를 포함하고 있습니다." -#: parser/parse_utilcmd.c:2236 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "CREATE TABLE 명령에서 이미 있는 인덱스는 사용할 수 없습니다." -#: parser/parse_utilcmd.c:2256 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "\"%s\" 인덱스는 이미 한 제약 조건에서 사용 중입니다." -#: parser/parse_utilcmd.c:2271 -#, c-format -msgid "index \"%s\" is not valid" -msgstr "\"%s\" 인덱스는 사용가능 상태가 아님" - -#: parser/parse_utilcmd.c:2277 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" 개체는 유니크 인덱스가 아닙니다" -#: parser/parse_utilcmd.c:2278 parser/parse_utilcmd.c:2285 -#: parser/parse_utilcmd.c:2292 parser/parse_utilcmd.c:2369 +#: 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:2284 +#: parser/parse_utilcmd.c:2290 #, c-format msgid "index \"%s\" contains expressions" msgstr "\"%s\" 인덱스에 표현식이 포함되어 있음" -#: parser/parse_utilcmd.c:2291 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" 개체는 부분 인덱스임" -#: parser/parse_utilcmd.c:2303 +#: parser/parse_utilcmd.c:2309 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" 개체는 지연가능한 인덱스임" -#: parser/parse_utilcmd.c:2304 +#: parser/parse_utilcmd.c:2310 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" "지연 가능한 인덱스를 사용해서 지연 불가능한 제약 조건은 만들 수 없습니다." -#: parser/parse_utilcmd.c:2368 +#: parser/parse_utilcmd.c:2374 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "\"%s\" 인덱스 %d 번째 칼럼의 기본 정렬 방법이 없음" -#: parser/parse_utilcmd.c:2525 +#: parser/parse_utilcmd.c:2531 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "기본키 제약 조건에서 \"%s\" 칼럼이 두 번 지정되었습니다" -#: parser/parse_utilcmd.c:2531 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "고유 제약 조건에서 \"%s\" 칼럼이 두 번 지정되었습니다" -#: parser/parse_utilcmd.c:2878 +#: 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:2950 +#: parser/parse_utilcmd.c:2943 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "통계 정보 식은 참조되는 테이블만 대상이어야 함" -#: parser/parse_utilcmd.c:2993 +#: parser/parse_utilcmd.c:2986 #, c-format msgid "rules on materialized views are not supported" msgstr "구체화된 뷰에서의 룰은 지원하지 않음" -#: parser/parse_utilcmd.c:3053 +#: parser/parse_utilcmd.c:3046 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "룰에서 지정한 WHERE 조건에 다른 릴레이션에 대한 참조를 포함할 수 없음" -#: parser/parse_utilcmd.c:3125 +#: parser/parse_utilcmd.c:3118 #, c-format msgid "" "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE " @@ -19817,154 +20432,154 @@ msgstr "" "룰에서 지정한 WHERE 조건이 있는 규칙에는 SELECT, INSERT, UPDATE 또는 DELETE " "작업만 포함할 수 있음" -#: parser/parse_utilcmd.c:3143 parser/parse_utilcmd.c:3244 -#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1087 +#: parser/parse_utilcmd.c:3136 parser/parse_utilcmd.c:3237 +#: rewrite/rewriteHandler.c:544 rewrite/rewriteManip.c:1095 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "conditional UNION/INTERSECT/EXCEPT 구문은 구현되어 있지 않다" -#: parser/parse_utilcmd.c:3161 +#: parser/parse_utilcmd.c:3154 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECT 룰은 OLD를 사용할 수 없음" -#: parser/parse_utilcmd.c:3165 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECT 룰은 NEW를 사용할 수 없음" -#: parser/parse_utilcmd.c:3174 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERT 룰은 OLD를 사용할 수 없음" -#: parser/parse_utilcmd.c:3180 +#: parser/parse_utilcmd.c:3173 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETE 룰은 NEW를 사용할 수 없음" -#: parser/parse_utilcmd.c:3208 +#: parser/parse_utilcmd.c:3201 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "WITH 쿼리 안에서 OLD 예약어를 참조할 수 없습니다." -#: parser/parse_utilcmd.c:3215 +#: parser/parse_utilcmd.c:3208 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "WITH 쿼리 안에서 NEW 예약어를 참조할 수 없습니다." -#: parser/parse_utilcmd.c:3667 +#: parser/parse_utilcmd.c:3664 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "DEFERABLE 절이 잘못 놓여져 있습니다" -#: parser/parse_utilcmd.c:3672 parser/parse_utilcmd.c:3687 +#: 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:3682 +#: parser/parse_utilcmd.c:3679 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "NOT DEFERABLE 절이 잘못 놓여 있습니다" -#: parser/parse_utilcmd.c:3695 parser/parse_utilcmd.c:3721 gram.y:5990 +#: parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 gram.y:6114 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "INITIALLY DEFERRED 로 선언된 조건문은 반드시 DEFERABLE 여야만 한다" -#: parser/parse_utilcmd.c:3703 +#: parser/parse_utilcmd.c:3700 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "INITIALLY DEFERRED 절이 잘못 놓여 있습니다" -#: parser/parse_utilcmd.c:3708 parser/parse_utilcmd.c:3734 +#: 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:3729 +#: parser/parse_utilcmd.c:3726 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "INITIALLY IMMEDIATE 절이 잘못 놓여 있습니다" -#: parser/parse_utilcmd.c:3922 +#: parser/parse_utilcmd.c:3919 #, c-format msgid "" "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE 구문에 명시된 schema (%s) 가 생성된 (%s) 의 것과 다릅니다" -#: parser/parse_utilcmd.c:3957 +#: parser/parse_utilcmd.c:3954 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" 개체는 파티션된 테이블이 아님" -#: parser/parse_utilcmd.c:3964 +#: parser/parse_utilcmd.c:3961 #, c-format msgid "table \"%s\" is not partitioned" msgstr "\"%s\" 테이블은 파티션되어 있지 않음" -#: parser/parse_utilcmd.c:3971 +#: parser/parse_utilcmd.c:3968 #, c-format msgid "index \"%s\" is not partitioned" msgstr "\"%s\" 인덱스는 파티션 된 인덱스가 아님" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "해시 파티션된 테이블은 기본 파티션을 가질 수 없음" -#: parser/parse_utilcmd.c:4028 +#: parser/parse_utilcmd.c:4025 #, c-format msgid "invalid bound specification for a hash partition" msgstr "해시 파티션용 범위 명세가 잘못됨" -#: parser/parse_utilcmd.c:4034 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 "해시 파티션용 모듈은 영(0)보다 큰 정수 값이어야 함" -#: parser/parse_utilcmd.c:4041 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 "해시 파티션용 나머지 처리기는 modulus 보다 작아야 함" -#: parser/parse_utilcmd.c:4054 +#: parser/parse_utilcmd.c:4051 #, c-format msgid "invalid bound specification for a list partition" msgstr "list 파티션을 위한 범위 설정이 잘못됨" -#: parser/parse_utilcmd.c:4107 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "invalid bound specification for a range partition" msgstr "range 파티션을 위한 범위 설정이 잘못됨" -#: parser/parse_utilcmd.c:4113 +#: parser/parse_utilcmd.c:4110 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM에는 파티션 칼럼 당 딱 하나의 값만 지정해야 함" -#: parser/parse_utilcmd.c:4117 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO에는 파티션 칼럼 당 딱 하나의 값만 지정해야 함" -#: parser/parse_utilcmd.c:4231 +#: parser/parse_utilcmd.c:4228 #, c-format msgid "cannot specify NULL in range bound" msgstr "range 범위에는 NULL 값을 사용할 수 없음" -#: parser/parse_utilcmd.c:4280 +#: parser/parse_utilcmd.c:4277 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "MAXVALUE 뒤에 오는 모든 범위는 MAXVALUE 여야합니다." -#: parser/parse_utilcmd.c:4287 +#: parser/parse_utilcmd.c:4284 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "MINVALUE 뒤에 오는 모든 범위는 MINVALUE 여야합니다." -#: parser/parse_utilcmd.c:4330 +#: parser/parse_utilcmd.c:4327 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "지정된 값은 %s 형으로 형변환 할 수 없음, 해당 칼럼: \"%s\"" @@ -19977,12 +20592,12 @@ msgstr "UESCAPE 표현식은 앞에 한글자만 있어야합니다." msgid "invalid Unicode escape character" msgstr "잘못된 유니코드 이스케이프 문자" -#: parser/parser.c:347 scan.l:1390 +#: parser/parser.c:347 scan.l:1393 #, c-format msgid "invalid Unicode escape value" msgstr "잘못된 유니코드 이스케이프 값" -#: parser/parser.c:494 utils/adt/varlena.c:6505 scan.l:701 +#: parser/parser.c:494 utils/adt/varlena.c:6640 scan.l:716 #, c-format msgid "invalid Unicode escape" msgstr "잘못된 유니코드 이스케이프 값" @@ -19992,8 +20607,8 @@ msgstr "잘못된 유니코드 이스케이프 값" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "유니코드 이스케이프는 \\XXXX 또는 \\+XXXXXX 형태여야 합니다." -#: parser/parser.c:523 utils/adt/varlena.c:6530 scan.l:662 scan.l:678 -#: scan.l:694 +#: parser/parser.c:523 utils/adt/varlena.c:6665 scan.l:677 scan.l:693 +#: scan.l:709 #, c-format msgid "invalid Unicode surrogate pair" msgstr "잘못된 유니코드 대리 쌍" @@ -20003,28 +20618,28 @@ msgstr "잘못된 유니코드 대리 쌍" msgid "identifier \"%s\" will be truncated to \"%.*s\"" msgstr "\"%s\" 식별자는 \"%.*s\"(으)로 잘림" -#: partitioning/partbounds.c:2921 +#: partitioning/partbounds.c:2920 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "\"%s\" 파티션이 \"%s\" 기본 파티션과 겹칩니다." -#: partitioning/partbounds.c:2973 partitioning/partbounds.c:2992 -#: partitioning/partbounds.c:3014 +#: partitioning/partbounds.c:2972 partitioning/partbounds.c:2991 +#: partitioning/partbounds.c:3013 #, c-format msgid "" "every hash partition modulus must be a factor of the next larger modulus" msgstr "모든 해시 파티션 구분값은 최대값보다 작아야합니다." -#: partitioning/partbounds.c:2974 partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:2973 partitioning/partbounds.c:3014 #, c-format msgid "" "The new modulus %d is not a factor of %d, the modulus of existing partition " "\"%s\"." msgstr "" -"새 해시 파티션 구분값(나머지값) %d 값은 %d의 인수가 아닙니다. 이미 있는 \"%s" -"\" 하위 파티션은 이 값을 구분값으로 사용합니다." +"새 해시 파티션 구분값(나머지값) %d 값은 %d의 인수가 아닙니다. 이미 있는 " +"\"%s\" 하위 파티션은 이 값을 구분값으로 사용합니다." -#: partitioning/partbounds.c:2993 +#: partitioning/partbounds.c:2992 #, c-format msgid "" "The new modulus %d is not divisible by %d, the modulus of existing partition " @@ -20033,22 +20648,22 @@ msgstr "" "새 해시 구분값 %d 값은 %d 값으로 나눌 수 없습니다. 이미 있는 \"%s\" 하위 파티" "션은 이 값을 나누기 값으로 사용합니다." -#: partitioning/partbounds.c:3128 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "\"%s\" 파티션용 범위 지정이 비어있습니다." -#: partitioning/partbounds.c:3130 +#: partitioning/partbounds.c:3129 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "하한값(%s)은 상한값(%s)과 같거나 커야 합니다" -#: 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 " @@ -20057,32 +20672,32 @@ msgstr "" "\"%s\" 외부 테이블 탐색은 생략함, 이 테이블은 \"%s\" 기본 파티션 테이블의 파" "티션이기 때문" -#: 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 "해시 파티션용 나머지 구분값은 0보다 크거나 같은 정수값이어야 함" -#: 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 "파티션 키의 %d 번째 칼럼 자료형은 %s 형이지만, %s 형의 값이 지정되었음" -#: 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 " @@ -20091,23 +20706,23 @@ msgstr "" "파티션 키로 사용하는 %d 번째 칼럼의 자료형은 \"%s\" 형이지만, 지정한 값은 " "\"%s\" 자료형을 사용했습니다." -#: port/pg_sema.c:209 port/pg_shmem.c:708 port/posix_sema.c:209 -#: port/sysv_sema.c:323 port/sysv_shmem.c:708 +#: 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" -#: port/pg_shmem.c:223 port/sysv_shmem.c:223 +#: port/pg_shmem.c:224 port/sysv_shmem.c:224 #, c-format msgid "could not create shared memory segment: %m" msgstr "공유 메모리 세그먼트를 만들 수 없음: %m" -#: port/pg_shmem.c:224 port/sysv_shmem.c:224 +#: port/pg_shmem.c:225 port/sysv_shmem.c:225 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "shmget(키=%lu, 크기=%zu, 0%o) 시스템 콜 실패" -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " @@ -20120,7 +20735,7 @@ msgstr "" "값보다 크거나, SHMMIN 값보다 적은 경우 발생합니다.\n" "공유 메모리 설정에 대한 보다 자세한 내용은 PostgreSQL 문서를 참조하십시오." -#: port/pg_shmem.c:235 port/sysv_shmem.c:235 +#: port/pg_shmem.c:236 port/sysv_shmem.c:236 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " @@ -20133,7 +20748,7 @@ msgstr "" "큰 경우 발생합니다. 커널 환경 변수인 SHMALL 값을 좀 더 크게 설정하세요.\n" "공유 메모리 설정에 대한 보다 자세한 내용은 PostgreSQL 문서를 참조하십시오." -#: port/pg_shmem.c:241 port/sysv_shmem.c:241 +#: port/pg_shmem.c:242 port/sysv_shmem.c:242 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs " @@ -20149,62 +20764,63 @@ msgstr "" "확보하세요.\n" "공유 메모리 설정에 대한 보다 자세한 내용은 PostgreSQL 문서를 참조하십시오." -#: port/pg_shmem.c:583 port/sysv_shmem.c:583 port/win32_shmem.c:641 +#: port/pg_shmem.c:584 port/sysv_shmem.c:584 port/win32_shmem.c:646 #, c-format -msgid "huge_page_size must be 0 on this platform." -msgstr "huge_page_size 값은 이 플랫폼에서는 0이어야 합니다." +msgid "\"huge_page_size\" must be 0 on this platform." +msgstr "\"huge_page_size\" 값은 이 플랫폼에서는 0이어야 합니다." -#: port/pg_shmem.c:646 port/sysv_shmem.c:646 +#: port/pg_shmem.c:655 port/sysv_shmem.c:655 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "가용 공유 메모리 확보 실패: %m" -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:657 port/sysv_shmem.c:657 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " "segment exceeded available memory, swap space, or huge pages. To reduce the " "request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, " -"perhaps by reducing shared_buffers or max_connections." +"perhaps by reducing \"shared_buffers\" or \"max_connections\"." msgstr "" "이 오류는 일반적으로 PostgreSQL에서 사용할 공유 메모리를 확보하지 못 했을 때 " "발생합니다(물리 메모리, 스왑, huge page). 현재 요구 크기(%zu 바이트)를 좀 줄" -"여 보십시오. 줄이는 방법은, shared_buffers 값을 줄이거나 max_connections 값" +"여 보십시오. 줄이는 방법은, \"shared_buffers\"나 \"max_connections\" 값" "을 줄여 보십시오." -#: port/pg_shmem.c:716 port/sysv_shmem.c:716 +#: port/pg_shmem.c:725 port/sysv_shmem.c:725 #, c-format msgid "huge pages not supported on this platform" msgstr "huge page 기능은 이 플랫폼에서 지원되지 않음" -#: port/pg_shmem.c:723 port/sysv_shmem.c:723 +#: port/pg_shmem.c:732 port/sysv_shmem.c:732 #, c-format -msgid "huge pages not supported with the current shared_memory_type setting" -msgstr "현재 shared_memory_type 설정은 huge page 사용을 지원하지 않습니다." +msgid "" +"huge pages not supported with the current \"shared_memory_type\" setting" +msgstr "현재 \"shared_memory_type\" 설정은 huge page 사용을 지원하지 않습니다." -#: port/pg_shmem.c:783 port/sysv_shmem.c:783 utils/init/miscinit.c:1351 +#: 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 키, %lu ID)이 여전히 사용중입니다" -#: port/pg_shmem.c:786 port/sysv_shmem.c:786 utils/init/miscinit.c:1353 +#: 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 "" "\"%s\" 데이터 디렉터리를 사용하는 옛 서버 프로세스들을 모두 중지시키세요." -#: 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 " @@ -20212,7 +20828,7 @@ msgid "" "(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" +"\"max_connections\" parameter.\n" "The PostgreSQL documentation contains more information about configuring " "your system for PostgreSQL." msgstr "" @@ -20221,11 +20837,11 @@ msgstr "" "이 오류는 시스템에서 지정한 최소 세마포어 수(SEMMNI)가 너무 크거나, 최대 세마" "포어 수(SEMMNS)가 너무 적어서 서버를 실행할 수 없을 때 발생합니다. 이에 따" "라, 정상적으로 서버가 실행되려면, 시스템 값들을 조정할 필요가 있습니다. 아니" -"면, 다른 방법으로, PostgreSQL의 환경 설정에서 max_connections 값을 줄여서 세" +"면, 다른 방법으로, PostgreSQL의 환경 설정에서 \"max_connections\" 값을 줄여서 세" "마포어 사용 수를 줄여보십시오.\n" "보다 자세한 내용은 PostgreSQL 관리자 메뉴얼을 참조 하십시오." -#: 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. " @@ -20360,62 +20976,52 @@ msgstr "실패한 시스템 호출은 DuplicateHandle입니다." msgid "Failed system call was MapViewOfFileEx." msgstr "실패한 시스템 호출은 MapViewOfFileEx입니다." -#: postmaster/autovacuum.c:417 -#, c-format -msgid "could not fork autovacuum launcher process: %m" -msgstr "autovacuum 실행기 프로세스를 실행할 수 없음: %m" - -#: postmaster/autovacuum.c:764 +#: postmaster/autovacuum.c:686 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "autovacuum 작업자가 너무 오래전에 시작되어 중지됨" -#: postmaster/autovacuum.c:1489 -#, c-format -msgid "could not fork autovacuum worker process: %m" -msgstr "autovacuum 작업자 프로세스를 실행할 수 없음: %m" - -#: postmaster/autovacuum.c:2334 +#: postmaster/autovacuum.c:2203 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "" "autovacuum: 더 이상 사용하지 않는 \"%s.%s.%s\" 임시 테이블을 삭제하는 중" -#: postmaster/autovacuum.c:2570 +#: postmaster/autovacuum.c:2439 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 테이블 대상으로 자동 vacuum 작업 함" -#: postmaster/autovacuum.c:2573 +#: postmaster/autovacuum.c:2442 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 테이블 자동 분석" -#: postmaster/autovacuum.c:2767 +#: postmaster/autovacuum.c:2636 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 릴레이션 작업 항목 작업 중" -#: postmaster/autovacuum.c:3381 +#: postmaster/autovacuum.c:3254 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "서버 설정 정보가 잘못되어 자동 청소 작업이 실행되지 못했습니다." -#: postmaster/autovacuum.c:3382 +#: postmaster/autovacuum.c:3255 #, c-format msgid "Enable the \"track_counts\" option." msgstr "\"track_counts\" 옵션을 사용하십시오." -#: postmaster/bgworker.c:259 +#: postmaster/bgworker.c:260 #, c-format msgid "" -"inconsistent background worker state (max_worker_processes=%d, total_slots=" -"%d)" +"inconsistent background worker state (max_worker_processes=%d, " +"total_slots=%d)" msgstr "" -"백그라운드 작업자의 정합성이 맞지 않음 (max_worker_processes=%d, total_slots=" -"%d)" +"백그라운드 작업자의 정합성이 맞지 않음 (max_worker_processes=%d, " +"total_slots=%d)" -#: postmaster/bgworker.c:669 +#: postmaster/bgworker.c:651 #, c-format msgid "" "background worker \"%s\": background workers without shared memory access " @@ -20424,7 +21030,7 @@ msgstr "" "\"%s\" 백그라운드 작업자: 공유 메모리 접근 않는 백그라운드 작업자를 지원하지 " "않음" -#: postmaster/bgworker.c:680 +#: postmaster/bgworker.c:662 #, c-format msgid "" "background worker \"%s\": cannot request database access if starting at " @@ -20433,31 +21039,31 @@ msgstr "" "\"%s\" 백그라운드 작업자: postmaster 시작 중인 상태라면, 데이터베이스 접근을 " "요청할 수 없음" -#: postmaster/bgworker.c:694 +#: postmaster/bgworker.c:676 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "\"%s\" 백그라운드 작업자: 잘못된 재실행 간격" -#: postmaster/bgworker.c:709 +#: postmaster/bgworker.c:691 #, c-format msgid "" "background worker \"%s\": parallel workers may not be configured for restart" msgstr "\"%s\" 백그라운드 작업자: 이 병렬 작업자는 재실행 설정이 없음" -#: postmaster/bgworker.c:733 tcop/postgres.c:3255 +#: postmaster/bgworker.c:715 tcop/postgres.c:3312 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "관리자 명령에 의해 \"%s\" 백그라운드 작업자를 종료합니다." -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:888 #, c-format msgid "" -"background worker \"%s\": must be registered in shared_preload_libraries" +"background worker \"%s\": must be registered in \"shared_preload_libraries\"" msgstr "" -"\"%s\" 백그라운드 작업자: 먼저 shared_preload_libraries 설정값으로 등록되어" +"\"%s\" 백그라운드 작업자: 먼저 \"shared_preload_libraries\" 설정값으로 등록되어" "야 합니다." -#: postmaster/bgworker.c:902 +#: postmaster/bgworker.c:911 #, c-format msgid "" "background worker \"%s\": only dynamic background workers can request " @@ -20465,230 +21071,319 @@ msgid "" msgstr "" "\"%s\" 백그라운드 작업자: 동적 백그라운드 작업자만 알림을 요청할 수 있음" -#: postmaster/bgworker.c:917 +#: postmaster/bgworker.c:926 #, c-format msgid "too many background workers" msgstr "백그라운드 작업자가 너무 많음" -#: postmaster/bgworker.c:918 +#: postmaster/bgworker.c:927 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "" "Up to %d background workers can be registered with the current settings." msgstr[0] "현재 설정으로는 %d개의 백그라운드 작업자를 사용할 수 있습니다." -#: postmaster/bgworker.c:922 +#: 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:431 +#: postmaster/checkpointer.c:441 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "체크포인트가 너무 자주 발생함 (%d초 간격)" -#: postmaster/checkpointer.c:435 -#, c-format -msgid "Consider increasing the configuration parameter \"max_wal_size\"." -msgstr "\"max_wal_size\" 환경 매개 변수 값을 좀 느려보십시오." - -#: postmaster/checkpointer.c:1059 +#: postmaster/checkpointer.c:1067 #, c-format msgid "checkpoint request failed" msgstr "체크포인트 요청 실패" -#: postmaster/checkpointer.c:1060 +#: postmaster/checkpointer.c:1068 #, c-format msgid "Consult recent messages in the server log for details." msgstr "더 자세한 것은 서버 로그 파일을 살펴보십시오." -#: postmaster/pgarch.c:416 +#: postmaster/launch_backend.c:381 #, c-format -msgid "archive_mode enabled, yet archiving is not configured" -msgstr "archive_mode가 활성화 되었는데 아카이브 관련 세부 설정이 되어있지 않음" +msgid "could not execute server process \"%s\": %m" +msgstr "\"%s\" 서버 프로세스를 실행할 수 없음: %m" -#: postmaster/pgarch.c:438 +#: postmaster/launch_backend.c:434 #, c-format -msgid "removed orphan archive status file \"%s\"" -msgstr "필요 없는 \"%s\" 아카이브 상태 파일이 삭제됨" +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "백엔드 매개 변수 맵핑 파일을 만들 수 없음: 오류 코드 %lu" -#: postmaster/pgarch.c:448 +#: postmaster/launch_backend.c:442 #, c-format -msgid "" -"removal of orphan archive status file \"%s\" failed too many times, will try " -"again later" -msgstr "" -"필요 없는 \"%s\" 아카이브 상태 파일 삭제 작업이 계속 실패하고 있습니다. 다음" -"에 또 시도할 것입니다." +msgid "could not map backend parameter memory: error code %lu" +msgstr "백엔드 매개 변수 메모리를 맵핑할 수 없음: 오류 코드 %lu" -#: postmaster/pgarch.c:484 +#: postmaster/launch_backend.c:459 #, c-format -msgid "" +msgid "subprocess command line too long" +msgstr "서브프로세스 명령행이 너무 깁니다." + +#: postmaster/launch_backend.c:477 +#, c-format +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "CreateProcess() 호출 실패: %m (오류 코드 %lu)" + +#: postmaster/launch_backend.c:504 +#, c-format +msgid "could not unmap view of backend parameter file: error code %lu" +msgstr "백엔드 매개 변수 파일의 view를 unmap할 수 없음: 오류 코드 %lu" + +#: postmaster/launch_backend.c:508 +#, c-format +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "백엔드 매개 변수 파일을 닫을 수 없음: 오류 코드 %lun" + +#: postmaster/launch_backend.c:530 +#, c-format +msgid "giving up after too many tries to reserve shared memory" +msgstr "공유 메모리 확보 작업을 여러 번 시도했으나 실패 함" + +#: postmaster/launch_backend.c:531 +#, c-format +msgid "This might be caused by ASLR or antivirus software." +msgstr "이 현상은 ASLR 또는 바이러스 검사 소프트웨어 때문일 수 있습니다." + +#: postmaster/launch_backend.c:834 +#, c-format +msgid "could not duplicate socket %d for use in backend: error code %d" +msgstr "백엔드에서 사용하기 위해 %d 소켓을 복사할 수 없음: 오류 코드 %d" + +#: postmaster/launch_backend.c:866 +#, c-format +msgid "could not create inherited socket: error code %d\n" +msgstr "상속된 소켓을 만들 수 없음: 오류 코드 %d\n" + +#: 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:901 +#, c-format +msgid "could not read from backend variables file \"%s\": %m\n" +msgstr "\"%s\" 백엔드 변수 파일을 읽을 수 없음: %m\n" + +#: 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:924 +#, c-format +msgid "could not remove file \"%s\": %m\n" +msgstr "\"%s\" 파일을 삭제할 수 없음: %m\n" + +#: postmaster/launch_backend.c:940 +#, c-format +msgid "could not map view of backend variables: error code %lu\n" +msgstr "백엔드 변수 파일의 view를 map할 수 없음: 오류 코드 %lu\n" + +#: postmaster/launch_backend.c:959 +#, c-format +msgid "could not unmap view of backend variables: error code %lu\n" +msgstr "백엔드 변수 파일의 view를 unmap할 수 없음: 오류 코드 %lu\n" + +#: postmaster/launch_backend.c:966 +#, c-format +msgid "could not close handle to backend parameter variables: error code %lu\n" +msgstr "백엔드 변수 파일을 닫을 수 없음: 오류 코드 %lu\n" + +#: postmaster/pgarch.c:428 +#, c-format +msgid "\"archive_mode\" enabled, yet archiving is not configured" +msgstr "\"archive_mode\"가 활성화 되었지만 아카이브 관련 세부 설정이 되어있지 않음" + +#: postmaster/pgarch.c:452 +#, c-format +msgid "removed orphan archive status file \"%s\"" +msgstr "필요 없는 \"%s\" 아카이브 상태 파일이 삭제됨" + +#: postmaster/pgarch.c:462 +#, c-format +msgid "" +"removal of orphan archive status file \"%s\" failed too many times, will try " +"again later" +msgstr "" +"필요 없는 \"%s\" 아카이브 상태 파일 삭제 작업이 계속 실패하고 있습니다. 다음" +"에 또 시도할 것입니다." + +#: postmaster/pgarch.c:498 +#, c-format +msgid "" "archiving write-ahead log file \"%s\" failed too many times, will try again " "later" msgstr "" "\"%s\" 트랜잭션 로그 파일 아카이브 작업이 계속 실패하고 있습니다. 다음에 또 " "시도할 것입니다." -#: postmaster/pgarch.c:791 postmaster/pgarch.c:830 +#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 #, c-format -msgid "both archive_command and archive_library set" -msgstr "archive_command, archive_library 두 설정 모두 값을 지정했습니다." +msgid "both \"archive_command\" and \"archive_library\" set" +msgstr "\"archive_command\", \"archive_library\" 두 설정 모두 값을 지정했습니다." -#: postmaster/pgarch.c:792 postmaster/pgarch.c:831 +#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 #, c-format -msgid "Only one of archive_command, archive_library may be set." -msgstr "archive_command, archive_library 둘 중 하나만 지정하세요." +msgid "Only one of \"archive_command\", \"archive_library\" may be set." +msgstr "\"archive_command\", \"archive_library\" 둘 중 하나만 지정하세요." -#: postmaster/pgarch.c:809 +#: postmaster/pgarch.c:897 #, c-format msgid "" "restarting archiver process because value of \"archive_library\" was changed" msgstr "" "\"archive_library\" 설정값이 바뀌어서 archiver 프로세스를 다시 시작 합니다." -#: postmaster/pgarch.c:846 +#: postmaster/pgarch.c:934 #, c-format msgid "archive modules have to define the symbol %s" msgstr "아카이브 모듈은 %s 심볼을 정의해야합니다." -#: postmaster/pgarch.c:852 +#: postmaster/pgarch.c:940 #, c-format msgid "archive modules must register an archive callback" msgstr "아카이브 모듈은 아카이브 콜백 함수를 등록해야합니다." -#: postmaster/postmaster.c:759 +#: postmaster/postmaster.c:661 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: -f 옵션의 잘못된 인자: \"%s\"\n" -#: postmaster/postmaster.c:832 +#: postmaster/postmaster.c:734 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: -t 옵션의 잘못된 인자: \"%s\"\n" -#: postmaster/postmaster.c:855 +#: postmaster/postmaster.c:757 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: 잘못된 인자: \"%s\"\n" -#: postmaster/postmaster.c:923 +#: postmaster/postmaster.c:825 #, c-format msgid "" -"%s: superuser_reserved_connections (%d) plus reserved_connections (%d) must " -"be less than max_connections (%d)\n" +"%s: \"superuser_reserved_connections\" (%d) plus \"reserved_connections\" " +"(%d) must be less than \"max_connections\" (%d)\n" msgstr "" -"%s: superuser_reserved_connections (%d) 값 + reserved_connections (%d) 값은 " -"max_connections(%d) 값보다 작아야함\n" +"%s: \"superuser_reserved_connections\" (%d) 값 + \"reserved_connections\" (%d) 값은 " +"\"max_connections\" (%d) 값보다 작아야함\n" -#: postmaster/postmaster.c:931 +#: postmaster/postmaster.c:833 #, c-format -msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" -msgstr "wal_level 값이 \"minimal\"일 때는 아카이브 작업을 할 수 없습니다." +msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" +msgstr "\"wal_level\" 값이 \"minimal\"일 때는 아카이브 작업을 할 수 없습니다." -#: postmaster/postmaster.c:934 +#: postmaster/postmaster.c:836 #, c-format msgid "" -"WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or " -"\"logical\"" +"WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be " +"\"replica\" or \"logical\"" msgstr "" -"WAL 스트리밍 작업(max_wal_senders > 0 인경우)은 wal_level 값이 \"replica\" 또" +"WAL 스트리밍 작업(\"max_wal_senders\" > 0 인경우)은 \"wal_level\" 값이 \"replica\" 또" "는 \"logical\" 이어야 합니다." -#: postmaster/postmaster.c:942 +#: postmaster/postmaster.c:839 +#, c-format +msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" +msgstr "\"wal_level\" 값이 \"minimal\"일 때는 아카이브 작업을 할 수 없습니다." + +#: postmaster/postmaster.c:847 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: 잘못된 datetoken 테이블들, 복구하십시오.\n" -#: postmaster/postmaster.c:1099 +#: postmaster/postmaster.c:1004 #, c-format msgid "could not create I/O completion port for child queue" msgstr "하위 대기열에 대해 I/O 완료 포트를 만들 수 없음" -#: postmaster/postmaster.c:1175 +#: postmaster/postmaster.c:1069 #, c-format msgid "ending log output to stderr" msgstr "stderr 쪽 로그 출력을 중지합니다." -#: postmaster/postmaster.c:1176 +#: postmaster/postmaster.c:1070 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "자세한 로그는 \"%s\" 쪽으로 기록됩니다." -#: postmaster/postmaster.c:1187 +#: postmaster/postmaster.c:1081 #, c-format msgid "starting %s" msgstr "%s 서버를 시작합니다." -#: postmaster/postmaster.c:1239 +#: postmaster/postmaster.c:1143 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "\"%s\" 응당 소켓을 만들 수 없습니다" -#: postmaster/postmaster.c:1245 +#: postmaster/postmaster.c:1149 #, c-format msgid "could not create any TCP/IP sockets" msgstr "TCP/IP 소켓을 만들 수 없습니다." -#: postmaster/postmaster.c:1277 +#: postmaster/postmaster.c:1181 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() 실패: 오류 코드 %ld" -#: postmaster/postmaster.c:1328 +#: postmaster/postmaster.c:1234 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "\"%s\" 디렉터리에 유닉스 도메인 소켓을 만들 수 없습니다" -#: postmaster/postmaster.c:1334 +#: postmaster/postmaster.c:1240 #, c-format msgid "could not create any Unix-domain sockets" msgstr "유닉스 도메인 소켓을 만들 수 없습니다" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1251 #, c-format msgid "no socket created for listening" msgstr "서버 접속 대기 작업을 위한 소켓을 만들 수 없음" -#: postmaster/postmaster.c:1376 +#: postmaster/postmaster.c:1282 #, c-format -msgid "%s: could not change permissions of external PID file \"%s\": %s\n" -msgstr "%s: \"%s\" 외부 PID 파일의 접근 권한을 바꿀 수 없음: %s\n" +msgid "%s: could not change permissions of external PID file \"%s\": %m\n" +msgstr "%s: \"%s\" 외부 PID 파일의 접근 권한을 바꿀 수 없음: %m\n" -#: postmaster/postmaster.c:1380 +#: postmaster/postmaster.c:1286 #, c-format -msgid "%s: could not write external PID file \"%s\": %s\n" -msgstr "%s: 외부 pid 파일 \"%s\" 를 쓸 수 없음: %s\n" +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:1408 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1314 utils/init/postinit.c:221 #, c-format msgid "could not load %s" msgstr "%s 파일을 로드 할 수 없음" -#: postmaster/postmaster.c:1434 +#: postmaster/postmaster.c:1340 #, c-format msgid "postmaster became multithreaded during startup" msgstr "포스트마스터가 시작하면서 멀티쓰레드 환경이 되었습니다." -#: postmaster/postmaster.c:1435 +#: postmaster/postmaster.c:1341 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "LC_ALL 환경 설정값으로 알맞은 로케일 이름을 지정하세요." -#: postmaster/postmaster.c:1536 +#: postmaster/postmaster.c:1440 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: 실행 가능 경로를 확정할 수 없음" -#: postmaster/postmaster.c:1543 +#: postmaster/postmaster.c:1447 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: 실행가능한 postgres 프로그램을 찾을 수 없습니다" -#: postmaster/postmaster.c:1566 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1470 utils/misc/tzparser.c:341 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -20697,558 +21392,375 @@ msgstr "" "이 문제는 PostgreSQL 설치가 불완전하게 되었거나, \"%s\" 파일이 올바른 위치에 " "있지 않아서 발생했습니다." -#: postmaster/postmaster.c:1593 +#: postmaster/postmaster.c:1497 #, c-format msgid "" "%s: could not find the database system\n" "Expected to find it in the directory \"%s\",\n" -"but could not open file \"%s\": %s\n" +"but could not open file \"%s\": %m\n" msgstr "" "%s: 데이터베이스 시스템을 찾을 수 없습니다\n" "\"%s\" 디렉터리 안에 해당 자료가 있기를 기대했는데,\n" -"\"%s\" 파일을 열 수가 없었습니다: %s\n" +"\"%s\" 파일을 열 수가 없었습니다: %m\n" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1890 +#: postmaster/postmaster.c:1787 #, c-format msgid "issuing %s to recalcitrant children" msgstr "하위 프로세스 정리를 위해 %s 신호 보냄" -#: postmaster/postmaster.c:1912 +#: postmaster/postmaster.c:1809 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "데이터 디렉터리 잠금 파일이 잘못되어 즉시 종료 작업을 진행합니다." -#: postmaster/postmaster.c:1987 postmaster/postmaster.c:2015 -#, c-format -msgid "incomplete startup packet" -msgstr "아직 완료되지 않은 시작 패킷" - -#: postmaster/postmaster.c:1999 postmaster/postmaster.c:2032 -#, c-format -msgid "invalid length of startup packet" -msgstr "시작 패킷의 길이가 잘못 되었습니다" - -#: postmaster/postmaster.c:2061 -#, c-format -msgid "failed to send SSL negotiation response: %m" -msgstr "SSL 연결 작업에 오류가 발생했습니다: %m" - -#: postmaster/postmaster.c:2079 -#, c-format -msgid "received unencrypted data after SSL request" -msgstr "SSL 요청 뒤에 암호화 되지 않은 데이터를 받았음" - -#: postmaster/postmaster.c:2080 postmaster/postmaster.c:2124 -#, c-format -msgid "" -"This could be either a client-software bug or evidence of an attempted man-" -"in-the-middle attack." -msgstr "" -"이 현상은 클라이언트 소프트웨어 버그이거나, 중간자 공격으로 발생했을 것입니" -"다." - -#: postmaster/postmaster.c:2105 -#, c-format -msgid "failed to send GSSAPI negotiation response: %m" -msgstr "GSSAPI 협상 응답을 보내지 못했습니다: %m" - -#: postmaster/postmaster.c:2123 -#, c-format -msgid "received unencrypted data after GSSAPI encryption request" -msgstr "GSSAPI 암호화 요청 뒤에 암호화 되지 않은 데이터를 받았습니다." - -#: postmaster/postmaster.c:2147 -#, c-format -msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" -msgstr "" -"지원하지 않는 frontend 프로토콜 %u.%u: 서버에서 지원하는 프로토콜 %u.0 .. %u." -"%u" - -#: postmaster/postmaster.c:2214 -#, c-format -msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." -msgstr "사용할 수 있는 값: \"false\", 0, \"true\", 1, \"database\"." - -#: postmaster/postmaster.c:2255 -#, c-format -msgid "invalid startup packet layout: expected terminator as last byte" -msgstr "잘못된 시작 패킷 레이아웃: 마지막 바이트로 종결문자가 발견되었음" - -#: postmaster/postmaster.c:2272 -#, c-format -msgid "no PostgreSQL user name specified in startup packet" -msgstr "시작 패킷에서 지정한 사용자는 PostgreSQL 사용자 이름이 아닙니다" - -#: postmaster/postmaster.c:2336 -#, c-format -msgid "the database system is starting up" -msgstr "데이터베이스 시스템이 새로 가동 중입니다." - -#: postmaster/postmaster.c:2342 -#, c-format -msgid "the database system is not yet accepting connections" -msgstr "해당 데이터베이스 시스템은 아직 접속을 허용하지 않습니다." - -#: postmaster/postmaster.c:2343 -#, c-format -msgid "Consistent recovery state has not been yet reached." -msgstr "일관성 복원 작업을 아직 끝내지 못했습니다." - -#: postmaster/postmaster.c:2347 -#, c-format -msgid "the database system is not accepting connections" -msgstr "해당 데이터베이스 시스템은 접속을 허용하지 않습니다." - -#: postmaster/postmaster.c:2348 -#, c-format -msgid "Hot standby mode is disabled." -msgstr "Hot standby 모드가 비활성화 되었습니다." - -#: postmaster/postmaster.c:2353 -#, c-format -msgid "the database system is shutting down" -msgstr "데이터베이스 시스템이 중지 중입니다" - -#: postmaster/postmaster.c:2358 -#, c-format -msgid "the database system is in recovery mode" -msgstr "데이터베이스 시스템이 자동 복구 작업 중입니다." - -#: postmaster/postmaster.c:2363 storage/ipc/procarray.c:491 -#: storage/ipc/sinvaladt.c:306 storage/lmgr/proc.c:353 -#, c-format -msgid "sorry, too many clients already" -msgstr "최대 동시 접속자 수를 초과했습니다." - -#: postmaster/postmaster.c:2450 +#: postmaster/postmaster.c:1872 #, c-format msgid "wrong key in cancel request for process %d" msgstr "프로세스 %d에 대한 취소 요청에 잘못된 키가 있음" -#: postmaster/postmaster.c:2462 +#: postmaster/postmaster.c:1884 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "취소 요청의 PID %d과(와) 일치하는 프로세스가 없음" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2104 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP 신호를 받아서, 환경설정파일을 다시 읽고 있습니다." #. translator: %s is a configuration file -#: postmaster/postmaster.c:2753 postmaster/postmaster.c:2757 +#: postmaster/postmaster.c:2132 postmaster/postmaster.c:2136 #, c-format msgid "%s was not reloaded" msgstr "%s 파일을 다시 불러오지 않았음" -#: postmaster/postmaster.c:2767 +#: postmaster/postmaster.c:2146 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL 설정이 다시 로드되지 않았음" -#: postmaster/postmaster.c:2857 +#: postmaster/postmaster.c:2232 #, c-format msgid "received smart shutdown request" msgstr "smart 중지 요청을 받았습니다." -#: postmaster/postmaster.c:2898 +#: postmaster/postmaster.c:2273 #, c-format msgid "received fast shutdown request" msgstr "fast 중지 요청을 받았습니다." -#: postmaster/postmaster.c:2916 +#: postmaster/postmaster.c:2291 #, c-format msgid "aborting any active transactions" msgstr "모든 활성화 되어있는 트랜잭션을 중지하고 있습니다." -#: postmaster/postmaster.c:2940 +#: postmaster/postmaster.c:2315 #, c-format msgid "received immediate shutdown request" msgstr "immediate 중지 요청을 받았습니다." -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:2387 #, c-format msgid "shutdown at recovery target" msgstr "복구 타겟에서 중지함" -#: postmaster/postmaster.c:3034 postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:2405 postmaster/postmaster.c:2441 msgid "startup process" msgstr "시작 프로세스" -#: postmaster/postmaster.c:3037 +#: postmaster/postmaster.c:2408 #, c-format msgid "aborting startup due to startup process failure" msgstr "시작 프로세스 실패 때문에 서버 시작이 중지 되었습니다" -#: postmaster/postmaster.c:3110 +#: postmaster/postmaster.c:2483 #, c-format msgid "database system is ready to accept connections" msgstr "이제 데이터베이스 서버로 접속할 수 있습니다" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:2504 msgid "background writer process" msgstr "백그라운드 writer 프로세스" -#: postmaster/postmaster.c:3178 +#: postmaster/postmaster.c:2551 msgid "checkpointer process" msgstr "체크포인트 프로세스" -#: postmaster/postmaster.c:3194 +#: postmaster/postmaster.c:2567 msgid "WAL writer process" msgstr "WAL 쓰기 프로세스" -#: postmaster/postmaster.c:3209 +#: postmaster/postmaster.c:2582 msgid "WAL receiver process" msgstr "WAL 수신 프로세스" -#: postmaster/postmaster.c:3224 +#: postmaster/postmaster.c:2596 +msgid "WAL summarizer process" +msgstr "WAL 요약 프로세스" + +#: postmaster/postmaster.c:2611 msgid "autovacuum launcher process" msgstr "autovacuum 실행기 프로세스" -#: postmaster/postmaster.c:3242 +#: postmaster/postmaster.c:2629 msgid "archiver process" msgstr "archiver 프로세스" -#: postmaster/postmaster.c:3255 +#: postmaster/postmaster.c:2642 msgid "system logger process" msgstr "시스템 로그 프로세스" -#: postmaster/postmaster.c:3312 +#: postmaster/postmaster.c:2659 +msgid "slot sync worker process" +msgstr "슬롯 동기화 작업 프로세스" + +#: postmaster/postmaster.c:2715 #, c-format msgid "background worker \"%s\"" msgstr "백그라운드 작업자 \"%s\"" -#: postmaster/postmaster.c:3391 postmaster/postmaster.c:3411 -#: postmaster/postmaster.c:3418 postmaster/postmaster.c:3436 +#: postmaster/postmaster.c:2794 postmaster/postmaster.c:2814 +#: postmaster/postmaster.c:2821 postmaster/postmaster.c:2839 msgid "server process" msgstr "서버 프로세스" -#: postmaster/postmaster.c:3490 +#: postmaster/postmaster.c:2893 #, 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:3665 +#: postmaster/postmaster.c:3080 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) 프로그램은 %d 코드로 마쳤습니다" -#: postmaster/postmaster.c:3667 postmaster/postmaster.c:3679 -#: postmaster/postmaster.c:3689 postmaster/postmaster.c:3700 +#: postmaster/postmaster.c:3082 postmaster/postmaster.c:3094 +#: postmaster/postmaster.c:3104 postmaster/postmaster.c:3115 #, 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:3676 +#: postmaster/postmaster.c:3091 #, 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:3686 +#: postmaster/postmaster.c:3101 #, 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:3698 +#: postmaster/postmaster.c:3113 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) 프로세스가 인식할 수 없는 %d 상태로 종료됨" -#: postmaster/postmaster.c:3906 +#: postmaster/postmaster.c:3329 #, c-format msgid "abnormal database system shutdown" msgstr "비정상적인 데이터베이스 시스템 서비스를 중지" -#: postmaster/postmaster.c:3932 +#: postmaster/postmaster.c:3355 #, c-format msgid "shutting down due to startup process failure" msgstr "시작 작업 실패로 중지합니다." -#: postmaster/postmaster.c:3938 +#: postmaster/postmaster.c:3361 #, c-format -msgid "shutting down because restart_after_crash is off" -msgstr "restart_after_crash 값이 off 로 지정되어 중지합니다." +msgid "shutting down because \"restart_after_crash\" is off" +msgstr "\"restart_after_crash\" 값이 off 로 지정되어 중지합니다." -#: postmaster/postmaster.c:3950 +#: postmaster/postmaster.c:3373 #, c-format msgid "all server processes terminated; reinitializing" msgstr "모든 서버 프로세스가 중지 되었습니다; 재 초기화 중" -#: postmaster/postmaster.c:4144 postmaster/postmaster.c:5462 -#: postmaster/postmaster.c:5860 +#: postmaster/postmaster.c:3572 postmaster/postmaster.c:3982 +#: postmaster/postmaster.c:4371 #, c-format msgid "could not generate random cancel key" msgstr "무작위 취소 키를 만들 수 없음" -#: postmaster/postmaster.c:4206 +#: postmaster/postmaster.c:3605 #, c-format msgid "could not fork new process for connection: %m" msgstr "연결을 위한 새 프로세스 할당(fork) 실패: %m" -#: postmaster/postmaster.c:4248 +#: postmaster/postmaster.c:3647 msgid "could not fork new process for connection: " msgstr "연결을 위한 새 프로세스 할당(fork) 실패: " -#: postmaster/postmaster.c:4354 -#, c-format -msgid "connection received: host=%s port=%s" -msgstr "접속 수락: host=%s port=%s" - -#: postmaster/postmaster.c:4359 -#, c-format -msgid "connection received: host=%s" -msgstr "접속 수락: host=%s" - -#: postmaster/postmaster.c:4596 -#, c-format -msgid "could not execute server process \"%s\": %m" -msgstr "\"%s\" 서버 프로세스를 실행할 수 없음: %m" - -#: postmaster/postmaster.c:4654 -#, c-format -msgid "could not create backend parameter file mapping: error code %lu" -msgstr "백엔드 매개 변수 맵핑 파일을 만들 수 없음: 오류 코드 %lu" - -#: postmaster/postmaster.c:4663 -#, c-format -msgid "could not map backend parameter memory: error code %lu" -msgstr "백엔드 매개 변수 메모리를 맵핑할 수 없음: 오류 코드 %lu" - -#: postmaster/postmaster.c:4690 -#, c-format -msgid "subprocess command line too long" -msgstr "서브프로세스 명령행이 너무 깁니다." - -#: postmaster/postmaster.c:4708 -#, c-format -msgid "CreateProcess() call failed: %m (error code %lu)" -msgstr "CreateProcess() 호출 실패: %m (오류 코드 %lu)" - -#: postmaster/postmaster.c:4735 -#, c-format -msgid "could not unmap view of backend parameter file: error code %lu" -msgstr "백엔드 매개 변수 파일의 view를 unmap할 수 없음: 오류 코드 %lu" - -#: postmaster/postmaster.c:4739 -#, c-format -msgid "could not close handle to backend parameter file: error code %lu" -msgstr "백엔드 매개 변수 파일을 닫을 수 없음: 오류 코드 %lun" - -#: postmaster/postmaster.c:4761 -#, c-format -msgid "giving up after too many tries to reserve shared memory" -msgstr "공유 메모리 확보 작업을 여러 번 시도했으나 실패 함" - -#: postmaster/postmaster.c:4762 -#, c-format -msgid "This might be caused by ASLR or antivirus software." -msgstr "이 현상은 ASLR 또는 바이러스 검사 소프트웨어 때문일 수 있습니다." - -#: postmaster/postmaster.c:4935 -#, c-format -msgid "SSL configuration could not be loaded in child process" -msgstr "하위 프로세스에서 SSL 환경 설정을 못했음" - -#: postmaster/postmaster.c:5060 +#: postmaster/postmaster.c:3681 #, c-format msgid "Please report this to <%s>." msgstr "이 내용을 <%s> 주소로 보고하십시오." -#: postmaster/postmaster.c:5128 +#: postmaster/postmaster.c:3749 #, c-format msgid "database system is ready to accept read-only connections" msgstr "데이터베이스 시스템이 읽기 전용으로 연결을 수락할 준비가 되었습니다." -#: postmaster/postmaster.c:5386 -#, c-format -msgid "could not fork startup process: %m" -msgstr "시작 프로세스 할당(fork) 실패: %m" - -#: postmaster/postmaster.c:5390 -#, c-format -msgid "could not fork archiver process: %m" -msgstr "archiver 프로세스를 할당(fork)할 수 없음: %m" - -#: postmaster/postmaster.c:5394 -#, c-format -msgid "could not fork background writer process: %m" -msgstr "background writer 프로세스를 할당(fork)할 수 없습니다: %m" - -#: postmaster/postmaster.c:5398 -#, c-format -msgid "could not fork checkpointer process: %m" -msgstr "checkpointer 프로세스를 할당(fork)할 수 없습니다: %m" - -#: postmaster/postmaster.c:5402 -#, c-format -msgid "could not fork WAL writer process: %m" -msgstr "WAL writer 프로세스를 할당(fork)할 수 없음: %m" - -#: postmaster/postmaster.c:5406 -#, c-format -msgid "could not fork WAL receiver process: %m" -msgstr "WAL 수신 프로세스를 할당(fork)할 수 없음: %m" - -#: postmaster/postmaster.c:5410 +#: postmaster/postmaster.c:3932 #, c-format -msgid "could not fork process: %m" -msgstr "프로세스 할당(fork) 실패: %m" +msgid "could not fork \"%s\" process: %m" +msgstr "\"%s\" 프로세스 할당(fork) 실패: %m" -#: postmaster/postmaster.c:5611 postmaster/postmaster.c:5638 +#: postmaster/postmaster.c:4170 postmaster/postmaster.c:4204 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "백그라운드 프로세스 초기화 중에 데이터베이스 연결 요구 사항이 충족되지 않았습" "니다." -#: postmaster/postmaster.c:5622 postmaster/postmaster.c:5649 +#: postmaster/postmaster.c:4180 postmaster/postmaster.c:4214 #, c-format msgid "invalid processing mode in background worker" msgstr "백그라운드 작업자에서 잘못된 프로세싱 모드가 사용됨" -#: postmaster/postmaster.c:5734 +#: postmaster/postmaster.c:4274 #, c-format -msgid "could not fork worker process: %m" -msgstr "작업자 프로세스를 할당(fork)할 수 없음: %m" +msgid "could not fork background worker process: %m" +msgstr "백그라운드 작업자 프로세스를 할당(fork)할 수 없습니다: %m" -#: postmaster/postmaster.c:5846 +#: postmaster/postmaster.c:4357 #, c-format -msgid "no slot available for new worker process" -msgstr "새 작업자 프로세스에서 쓸 슬롯이 없음" +msgid "no slot available for new background worker process" +msgstr "새 백그라운드 작업자 프로세스에서 쓸 슬롯이 없음" -#: postmaster/postmaster.c:6177 -#, c-format -msgid "could not duplicate socket %d for use in backend: error code %d" -msgstr "백엔드에서 사용하기 위해 %d 소켓을 복사할 수 없음: 오류 코드 %d" - -#: postmaster/postmaster.c:6209 -#, c-format -msgid "could not create inherited socket: error code %d\n" -msgstr "상속된 소켓을 만들 수 없음: 오류 코드 %d\n" - -#: postmaster/postmaster.c:6238 -#, c-format -msgid "could not open backend variables file \"%s\": %s\n" -msgstr "\"%s\" 백엔드 변수 파일을 열 수 없음: %s\n" - -#: postmaster/postmaster.c:6245 -#, c-format -msgid "could not read from backend variables file \"%s\": %s\n" -msgstr "\"%s\" 백엔드 변수 파일을 읽을 수 없음: %s\n" - -#: postmaster/postmaster.c:6254 -#, c-format -msgid "could not remove file \"%s\": %s\n" -msgstr "\"%s\" 파일을 삭제할 수 없음: %s\n" - -#: postmaster/postmaster.c:6271 -#, c-format -msgid "could not map view of backend variables: error code %lu\n" -msgstr "백엔드 변수 파일의 view를 map할 수 없음: 오류 코드 %lu\n" - -#: postmaster/postmaster.c:6280 -#, c-format -msgid "could not unmap view of backend variables: error code %lu\n" -msgstr "백엔드 변수 파일의 view를 unmap할 수 없음: 오류 코드 %lu\n" - -#: postmaster/postmaster.c:6287 -#, c-format -msgid "could not close handle to backend parameter variables: error code %lu\n" -msgstr "백엔드 변수 파일을 닫을 수 없음: 오류 코드 %lu\n" - -#: postmaster/postmaster.c:6446 +#: postmaster/postmaster.c:4620 #, c-format msgid "could not read exit code for process\n" msgstr "프로세스의 종료 코드를 읽을 수 없음\n" -#: postmaster/postmaster.c:6488 +#: postmaster/postmaster.c:4662 #, c-format msgid "could not post child completion status\n" msgstr "하위 완료 상태를 게시할 수 없음\n" -#: postmaster/syslogger.c:501 postmaster/syslogger.c:1222 +#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 #, c-format msgid "could not read from logger pipe: %m" msgstr "로그 파이프에서 읽기 실패: %m" -#: postmaster/syslogger.c:598 postmaster/syslogger.c:612 +#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 #, c-format msgid "could not create pipe for syslog: %m" msgstr "syslog에서 사용할 파이프를 만들 수 없습니다: %m" -#: postmaster/syslogger.c:677 +#: postmaster/syslogger.c:712 #, c-format msgid "could not fork system logger: %m" msgstr "시스템 로거(logger)를 확보하질 못 했습니다: %m" -#: postmaster/syslogger.c:713 +#: postmaster/syslogger.c:731 #, c-format msgid "redirecting log output to logging collector process" msgstr "서버 로그를 로그 수집 프로세스로 보냅니다." -#: postmaster/syslogger.c:714 +#: postmaster/syslogger.c:732 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "이제부터 서버 로그는 \"%s\" 디렉터리에 보관됩니다." -#: postmaster/syslogger.c:722 +#: postmaster/syslogger.c:740 #, c-format msgid "could not redirect stdout: %m" msgstr "표준출력을 redirect 하지 못했습니다: %m" -#: postmaster/syslogger.c:727 postmaster/syslogger.c:744 +#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 #, c-format msgid "could not redirect stderr: %m" msgstr "표준오류(stderr)를 redirect 하지 못했습니다: %m" -#: postmaster/syslogger.c:1177 +#: postmaster/syslogger.c:1128 #, c-format -msgid "could not write to log file: %s\n" -msgstr "로그파일 쓰기 실패: %s\n" +msgid "could not write to log file: %m\n" +msgstr "로그파일 쓰기 실패: %m\n" -#: postmaster/syslogger.c:1295 +#: postmaster/syslogger.c:1246 #, c-format msgid "could not open log file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: postmaster/syslogger.c:1385 +#: postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "" "로그파일 자동 교체 기능을 금지합니다(교체하려면 SIGHUP 시그널을 사용함)" -#: regex/regc_pg_locale.c:242 +#: postmaster/walsummarizer.c:740 +#, c-format +msgid "WAL summarization is not progressing" +msgstr "WAL 요약정보 처리 작업이 진행 중이지 않음" + +#: 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 "" +"요약정보 처리 작업은 %X/%X에서 필요한데, 디스크의 %X/%X, 메모리의 %X/%X에서 멈추어 있음" + +#: 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] "" +"%X/%X에서 여전히 %ld초 동안 WAL 요약정보 처리 작업이 멈춰 있음" + +#: postmaster/walsummarizer.c:760 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "요약정보 처리 작업이 디스크의 %X/%X에, 메모리의 %X/%X에 다달았음" + +#: postmaster/walsummarizer.c:1000 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "%X/%X 뒤에 올바른 레코드를 찾을 수 없음" + +#: postmaster/walsummarizer.c:1045 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X: %s" +msgstr "%u번 타임라인의 %X/%X에서 WAL를 읽을 수 없음: %s" + +#: postmaster/walsummarizer.c:1051 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X" +msgstr "타임라인 %u, 위치 %X/%X 에서 WAL를 읽을 없음" + +#: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "정규식 처리에 쓰일 정렬규칙(collation)을 찾을 수 없음" -#: regex/regc_pg_locale.c:265 +#: regex/regc_pg_locale.c:262 #, c-format msgid "nondeterministic collations are not supported for regular expressions" msgstr "정규식 처리에 쓰일 비결정 정렬규칙(collation)을 지원하지 않음" -#: replication/libpqwalreceiver/libpqwalreceiver.c:197 -#: replication/libpqwalreceiver/libpqwalreceiver.c:280 +#: replication/libpqwalreceiver/libpqwalreceiver.c:267 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 #, c-format msgid "password is required" msgstr "비밀번호가 필요함" -#: replication/libpqwalreceiver/libpqwalreceiver.c:198 +#: replication/libpqwalreceiver/libpqwalreceiver.c:268 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." msgstr "해당 서버로 비밀번호 없이 접속한다며, 일반 사용자는 접속할 수 없음" -#: replication/libpqwalreceiver/libpqwalreceiver.c:199 +#: replication/libpqwalreceiver/libpqwalreceiver.c:269 #, c-format msgid "" "Target server's authentication method must be changed, or set " @@ -21257,27 +21769,28 @@ msgstr "" "대상 서버의 인증 방법을 바꾸거나, 또는 구독 속성으로 password_required=false " "로 지정하세요." -#: replication/libpqwalreceiver/libpqwalreceiver.c:211 +#: replication/libpqwalreceiver/libpqwalreceiver.c:285 #, c-format msgid "could not clear search path: %s" msgstr "search path를 지울 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:257 +#: replication/libpqwalreceiver/libpqwalreceiver.c:331 +#: replication/libpqwalreceiver/libpqwalreceiver.c:517 #, c-format msgid "invalid connection string syntax: %s" msgstr "잘못된 연결 문자열 구문: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:281 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Non-superusers must provide a password in the connection string." msgstr "일반 사용자로 접속한다면, 연결 문자열에 비밀번호를 지정하세요." -#: replication/libpqwalreceiver/libpqwalreceiver.c:307 +#: replication/libpqwalreceiver/libpqwalreceiver.c:386 #, c-format msgid "could not parse connection string: %s" msgstr "접속 문자열을 분석할 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:380 +#: replication/libpqwalreceiver/libpqwalreceiver.c:459 #, c-format msgid "" "could not receive database system identifier and timeline ID from the " @@ -21285,13 +21798,13 @@ msgid "" msgstr "" "주 서버에서 데이터베이스 시스템 식별번호와 타임라인 번호를 받을 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:392 -#: replication/libpqwalreceiver/libpqwalreceiver.c:635 +#: replication/libpqwalreceiver/libpqwalreceiver.c:476 +#: replication/libpqwalreceiver/libpqwalreceiver.c:763 #, c-format msgid "invalid response from primary server" msgstr "주 서버에서 잘못된 응답이 왔음" -#: replication/libpqwalreceiver/libpqwalreceiver.c:393 +#: replication/libpqwalreceiver/libpqwalreceiver.c:477 #, c-format msgid "" "Could not identify system: got %d rows and %d fields, expected %d rows and " @@ -21300,86 +21813,91 @@ msgstr "" "시스템을 식별할 수 없음: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " "이상" -#: replication/libpqwalreceiver/libpqwalreceiver.c:478 -#: replication/libpqwalreceiver/libpqwalreceiver.c:485 -#: replication/libpqwalreceiver/libpqwalreceiver.c:515 +#: replication/libpqwalreceiver/libpqwalreceiver.c:606 +#: replication/libpqwalreceiver/libpqwalreceiver.c:613 +#: replication/libpqwalreceiver/libpqwalreceiver.c:643 #, c-format msgid "could not start WAL streaming: %s" msgstr "WAL 스트리밍 작업을 시작할 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:667 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "주 서버로 스트리밍 종료 메시지를 보낼 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:562 +#: replication/libpqwalreceiver/libpqwalreceiver.c:690 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "스트리밍 종료 요청에 대한 잘못된 응답을 받음" -#: replication/libpqwalreceiver/libpqwalreceiver.c:577 +#: replication/libpqwalreceiver/libpqwalreceiver.c:705 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "COPY 스트리밍 종료 중 오류 발생: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:587 +#: replication/libpqwalreceiver/libpqwalreceiver.c:715 #, c-format msgid "error reading result of streaming command: %s" msgstr "스트리밍 명령에 대한 결과 처리에서 오류 발생: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:596 -#: replication/libpqwalreceiver/libpqwalreceiver.c:832 +#: replication/libpqwalreceiver/libpqwalreceiver.c:724 +#: replication/libpqwalreceiver/libpqwalreceiver.c:957 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "CommandComplete 작업 후 예상치 못한 결과를 받음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:623 +#: replication/libpqwalreceiver/libpqwalreceiver.c:751 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "주 서버에서 타임라인 내역 파일을 받을 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:636 +#: replication/libpqwalreceiver/libpqwalreceiver.c:764 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "2개의 칼럼으로 된 하나의 튜플을 예상하지만, %d 튜플 (%d 칼럼)을 수신함" -#: replication/libpqwalreceiver/libpqwalreceiver.c:795 -#: replication/libpqwalreceiver/libpqwalreceiver.c:848 -#: replication/libpqwalreceiver/libpqwalreceiver.c:855 +#: replication/libpqwalreceiver/libpqwalreceiver.c:920 +#: replication/libpqwalreceiver/libpqwalreceiver.c:973 +#: replication/libpqwalreceiver/libpqwalreceiver.c:980 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL 스트림에서 자료 받기 실패: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:875 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 #, c-format msgid "could not send data to WAL stream: %s" msgstr "WAL 스트림에 데이터를 보낼 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:967 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "\"%s\" 복제 슬롯을 만들 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1013 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#, c-format +msgid "could not alter replication slot \"%s\": %s" +msgstr "\"%s\" 복제 슬롯을 변경할 수 없음: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 #, c-format msgid "invalid query response" msgstr "잘못된 쿼리 응답" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1014 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d개의 칼럼을 예상하지만, %d개의 칼럼을 수신함" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1084 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 #, c-format msgid "the query interface requires a database connection" msgstr "이 쿼리 인터페이스는 데이터베이스 연결이 필요합니다" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1115 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 msgid "empty query" msgstr "빈 쿼리" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1121 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 msgid "unexpected pipeline mode" msgstr "예기치 않은 파이프라인 모드" @@ -21390,33 +21908,33 @@ msgid "" "finished" msgstr "\"%s\" 구독을 위한 논리 복제 병렬 반영 작업자가 일을 끝냄" -#: replication/logical/applyparallelworker.c:825 +#: replication/logical/applyparallelworker.c:822 #, c-format msgid "lost connection to the logical replication apply worker" msgstr "논리 복제 반영 작업자 연결 끊김" -#: replication/logical/applyparallelworker.c:1027 -#: replication/logical/applyparallelworker.c:1029 +#: replication/logical/applyparallelworker.c:1024 +#: replication/logical/applyparallelworker.c:1026 msgid "logical replication parallel apply worker" msgstr "논리 복제 병렬 반영 작업자" -#: replication/logical/applyparallelworker.c:1043 +#: replication/logical/applyparallelworker.c:1040 #, c-format msgid "logical replication parallel apply worker exited due to error" msgstr "논리 복제 병렬 반영 작업자가 오류로 종료되었음" -#: replication/logical/applyparallelworker.c:1130 -#: replication/logical/applyparallelworker.c:1303 +#: replication/logical/applyparallelworker.c:1127 +#: replication/logical/applyparallelworker.c:1300 #, c-format msgid "lost connection to the logical replication parallel apply worker" msgstr "논리 복제 병렬 반영 작업자 연결 끊김" -#: replication/logical/applyparallelworker.c:1183 +#: replication/logical/applyparallelworker.c:1180 #, c-format msgid "could not send data to shared-memory queue" msgstr "공유 메모리 큐로 데이터를 보낼 수 없음" -#: replication/logical/applyparallelworker.c:1218 +#: replication/logical/applyparallelworker.c:1215 #, c-format msgid "" "logical replication apply worker will serialize the remaining changes of " @@ -21425,44 +21943,45 @@ msgstr "" "논리 복제 반영 작업자는 %u 원격 트랜잭션의 남아 있는 변경 사항을 파일로 직렬" "화 할 것입니다." -#: replication/logical/decode.c:180 replication/logical/logical.c:140 +#: replication/logical/decode.c:177 replication/logical/logical.c:141 #, c-format msgid "" -"logical decoding on standby requires wal_level >= logical on the primary" +"logical decoding on standby requires \"wal_level\" >= \"logical\" on the " +"primary" msgstr "" -"대기 서버에서 논리적 디코딩은 주서버 설정이 wal_level >= logical 이어야 함" +"대기 서버에서 논리적 디코딩은 주서버 설정이 \"wal_level\" >= \"logical\" 이어야 함" -#: replication/logical/launcher.c:331 +#: replication/logical/launcher.c:334 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "" "max_replication_slots = 0 설정 때문에 논리 복제 작업자를 시작 할 수 없습니다" -#: replication/logical/launcher.c:424 +#: replication/logical/launcher.c:427 #, c-format msgid "out of logical replication worker slots" msgstr "더 이상의 논리 복제 작업자용 슬롯이 없습니다" -#: replication/logical/launcher.c:425 replication/logical/launcher.c:499 -#: replication/slot.c:1297 storage/lmgr/lock.c:964 storage/lmgr/lock.c:1002 -#: storage/lmgr/lock.c:2787 storage/lmgr/lock.c:4172 storage/lmgr/lock.c:4237 -#: storage/lmgr/lock.c:4587 storage/lmgr/predicate.c:2413 -#: storage/lmgr/predicate.c:2428 storage/lmgr/predicate.c:3825 +#: 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 설정값을 늘릴 필요가 있습니다." +msgid "You might need to increase \"%s\"." +msgstr "\"%s\" 설정값을 늘릴 필요가 있습니다." -#: replication/logical/launcher.c:498 +#: replication/logical/launcher.c:513 #, c-format msgid "out of background worker slots" msgstr "백그라운 작업자 슬롯이 모자랍니다" -#: replication/logical/launcher.c:705 +#: replication/logical/launcher.c:720 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "%d 번 논리 복제 작업자 슬롯이 비어있습니다, 붙일 수 없습니다." -#: replication/logical/launcher.c:714 +#: replication/logical/launcher.c:729 #, c-format msgid "" "logical replication worker slot %d is already used by another worker, cannot " @@ -21471,27 +21990,27 @@ msgstr "" "%d 번 논리 복제 작업자 슬롯을 이미 다른 작업자가 쓰고 있습니다. 붙일 수 없습" "니다." -#: replication/logical/logical.c:120 +#: replication/logical/logical.c:121 #, c-format -msgid "logical decoding requires wal_level >= logical" -msgstr "논리적 디코딩 기능은 wal_level 값이 logical 이상이어야 함" +msgid "logical decoding requires \"wal_level\" >= \"logical\"" +msgstr "논리적 디코딩 기능은 \"wal_level\" 값이 \"logical\" 이상이어야 함" -#: replication/logical/logical.c:125 +#: replication/logical/logical.c:126 #, c-format msgid "logical decoding requires a database connection" msgstr "논리적 디코딩 기능은 데이터베이스 연결이 필요합니다" -#: replication/logical/logical.c:363 replication/logical/logical.c:517 +#: 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:368 replication/logical/logical.c:522 +#: 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:375 +#: replication/logical/logical.c:377 #, c-format msgid "" "cannot create logical replication slot in transaction that has performed " @@ -21499,92 +22018,108 @@ msgid "" msgstr "" "자료 변경 작업이 있는 트랜잭션 안에서는 논리적 복제 슬롯을 만들 수 없음" -#: replication/logical/logical.c:534 replication/logical/logical.c:541 +#: replication/logical/logical.c:540 +#, c-format +msgid "cannot use replication slot \"%s\" for logical decoding" +msgstr "논리적 디코딩에서는 \"%s\" 슬롯을 사용할 수 없음" + +#: replication/logical/logical.c:542 replication/slot.c:798 +#: replication/slot.c:829 +#, c-format +msgid "This replication slot is being synchronized from the primary server." +msgstr "이 복제 슬롯은 해당 주 서버로부터 동기화 되었습니다." + +#: replication/logical/logical.c:543 +#, c-format +msgid "Specify another replication slot." +msgstr "다른 복제 슬롯을 지정하세요." + +#: 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:536 +#: 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:543 +#: replication/logical/logical.c:563 #, c-format msgid "" "This slot has been invalidated because it was conflicting with recovery." msgstr "" -"이 슬롯은 복원 작업으로 충돌이 일어나 사용할 수 없는 것으로 처리했습니다." +"이 슬롯은 복구 작업으로 충돌이 일어나 사용할 수 없는 것으로 처리했습니다." -#: replication/logical/logical.c:608 +#: replication/logical/logical.c:628 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "\"%s\" 이름의 논리적 복제 슬롯을 만드는 중" -#: replication/logical/logical.c:610 +#: replication/logical/logical.c:630 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "" "%X/%X 이후 트랜잭션 커밋 정보를 스트리밍 하는 중, %X/%X 위치부터 WAL 읽는 중" -#: replication/logical/logical.c:758 +#: replication/logical/logical.c:778 #, c-format msgid "" "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "" "슬롯: \"%s\", 출력 플러그인: \"%s\", 해당 콜백함수: %s, 관련 LSN: %X/%X" -#: replication/logical/logical.c:764 +#: replication/logical/logical.c:784 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "슬롯: \"%s\", 출력 플러그인: \"%s\", 해당 콜백함수: %s" -#: replication/logical/logical.c:935 replication/logical/logical.c:980 -#: replication/logical/logical.c:1025 replication/logical/logical.c:1071 +#: 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 "준비 시간에 논리 복제가 %s 콜백을 필요로 합니다." -#: replication/logical/logical.c:1303 replication/logical/logical.c:1352 -#: replication/logical/logical.c:1393 replication/logical/logical.c:1479 -#: replication/logical/logical.c:1528 +#: 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 "논리적 스트리밍이 %s 콜백을 필요로 합니다" -#: replication/logical/logical.c:1438 +#: replication/logical/logical.c:1458 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "준비 시간에 논리적 스트리밍이 %s 콜백을 필요로 합니다" -#: replication/logical/logicalfuncs.c:126 +#: replication/logical/logicalfuncs.c:123 #, c-format msgid "slot name must not be null" msgstr "슬롯 이름으로 null 값을 사용할 수 없습니다" -#: replication/logical/logicalfuncs.c:142 +#: replication/logical/logicalfuncs.c:139 #, c-format msgid "options array must not be null" msgstr "옵션 배열은 null 값을 사용할 수 없습니다." -#: replication/logical/logicalfuncs.c:159 +#: replication/logical/logicalfuncs.c:156 #, c-format msgid "array must be one-dimensional" msgstr "배열은 일차원 배열이어야 합니다" -#: replication/logical/logicalfuncs.c:165 +#: replication/logical/logicalfuncs.c:162 #, c-format msgid "array must not contain nulls" msgstr "배열에는 null 값을 포함할 수 없습니다" -#: replication/logical/logicalfuncs.c:180 utils/adt/json.c:1484 -#: utils/adt/jsonb.c:1403 +#: 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 "배열은 그 요소의 개수가 짝수여야 함" -#: replication/logical/logicalfuncs.c:227 +#: replication/logical/logicalfuncs.c:224 #, c-format msgid "" "logical decoding output plugin \"%s\" produces binary output, but function " @@ -21596,9 +22131,10 @@ msgstr "" #: replication/logical/origin.c:190 #, c-format msgid "" -"cannot query or manipulate replication origin when max_replication_slots = 0" +"cannot query or manipulate replication origin when \"max_replication_slots\" " +"is 0" msgstr "" -"max_replication_slots = 0 상황에서는 복제 오리진을 질의하거나 관리할 수 없음" +"\"max_replication_slots\" = 0 상황에서는 복제 오리진을 질의하거나 관리할 수 없음" #: replication/logical/origin.c:195 #, c-format @@ -21632,9 +22168,10 @@ msgstr "복제 체크포인트의 잘못된 매직 번호: %u, 기대값: %u" #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase max_replication_slots" +msgid "" +"could not find free replication state, increase \"max_replication_slots\"" msgstr "" -"사용 가능한 복제 슬롯이 부족합니다. max_replication_slots 값을 늘리세요" +"사용 가능한 복제 슬롯이 부족합니다. \"max_replication_slots\" 값을 늘리세요" #: replication/logical/origin.c:806 #, c-format @@ -21646,57 +22183,57 @@ msgstr "%d 노드 %X/%X 위치로 복제 상태가 복구됨" msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "복제 슬롯 체크포인트의 체크섬 값이 잘못됨: %u, 기대값 %u" -#: replication/logical/origin.c:944 replication/logical/origin.c:1141 +#: replication/logical/origin.c:944 replication/logical/origin.c:1143 #, c-format msgid "replication origin with ID %d is already active for PID %d" msgstr "%d ID의 복제 오리진이 %d PID 프로세스가 사용중입니다." -#: replication/logical/origin.c:955 replication/logical/origin.c:1153 +#: replication/logical/origin.c:955 replication/logical/origin.c:1156 #, c-format msgid "" "could not find free replication state slot for replication origin with ID %d" msgstr "%d ID 복제 오리진을 위한 여유 복제 슬롯을 찾을 수 없음" -#: replication/logical/origin.c:957 replication/logical/origin.c:1155 -#: replication/slot.c:2093 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 +#: replication/slot.c:2384 #, c-format -msgid "Increase max_replication_slots and try again." -msgstr "max_replication_slots 값을 늘린 후 다시 시도해 보세요" +msgid "Increase \"max_replication_slots\" and try again." +msgstr "\"max_replication_slots\" 값을 늘린 후 다시 시도해 보세요" -#: replication/logical/origin.c:1112 +#: replication/logical/origin.c:1114 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "하나가 이미 설정되어 더 이상 복제 오리진 설정을 할 수 없음" -#: replication/logical/origin.c:1196 replication/logical/origin.c:1412 -#: replication/logical/origin.c:1432 +#: replication/logical/origin.c:1199 replication/logical/origin.c:1415 +#: replication/logical/origin.c:1435 #, c-format msgid "no replication origin is configured" msgstr "복제 오리진 설정이 없습니다" -#: replication/logical/origin.c:1282 +#: replication/logical/origin.c:1285 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "\"%s\" 복제 오리진 이름은 사용할 수 없음" -#: replication/logical/origin.c:1284 +#: replication/logical/origin.c:1287 #, c-format msgid "" "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." msgstr "" "\"%s\", \"%s\", \"pg_\"로 시작하는 오리진 이름은 미리 예약된 이름입니다." -#: replication/logical/relation.c:240 +#: replication/logical/relation.c:242 #, c-format msgid "\"%s\"" msgstr "\"%s\"" -#: replication/logical/relation.c:243 +#: replication/logical/relation.c:245 #, c-format msgid ", \"%s\"" msgstr ", \"%s\"" -#: replication/logical/relation.c:249 +#: replication/logical/relation.c:251 #, c-format msgid "" "logical replication target relation \"%s.%s\" is missing replicated column: " @@ -21706,7 +22243,7 @@ msgid_plural "" "%s" msgstr[0] "\"%s.%s\" 이름의 논리 복제 대상 릴레이션에 관련된 칼럼이 빠졌음: %s" -#: replication/logical/relation.c:304 +#: replication/logical/relation.c:306 #, c-format msgid "" "logical replication target relation \"%s.%s\" uses system columns in REPLICA " @@ -21715,117 +22252,272 @@ msgstr "" "\"%s.%s\" 논리 복제 대상 릴레이션이 REPLICA IDENTITY 인덱스에서 시스템 칼럼" "을 사용하고 있습니다." -#: replication/logical/relation.c:396 +#: replication/logical/relation.c:398 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "\"%s.%s\" 이름의 논리 복제 대상 릴레이션이 없습니다." -#: replication/logical/reorderbuffer.c:3936 +#: replication/logical/reorderbuffer.c:3999 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "%u XID 내용을 데이터 파일에 쓸 수 없음: %m" -#: replication/logical/reorderbuffer.c:4282 -#: replication/logical/reorderbuffer.c:4307 +#: replication/logical/reorderbuffer.c:4345 +#: replication/logical/reorderbuffer.c:4370 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "reorderbuffer 처리용 파일에서 읽기 실패: %m" -#: replication/logical/reorderbuffer.c:4286 -#: replication/logical/reorderbuffer.c:4311 +#: 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 "" "reorderbuffer 처리용 파일에서 읽기 실패: %d 바이트 읽음, 기대값 %u 바이트" -#: replication/logical/reorderbuffer.c:4561 +#: replication/logical/reorderbuffer.c:4624 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "\"%s\" 파일을 지울 수 없음, pg_replslot/%s/xid* 삭제 작업 중: %m" -#: replication/logical/reorderbuffer.c:5057 +#: replication/logical/reorderbuffer.c:5120 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "\"%s\" 파일에서 읽기 실패: %d 바이트 읽음, 기대값 %d 바이트" -#: replication/logical/snapbuild.c:639 +#: replication/logical/slotsync.c:215 +#, c-format +msgid "" +"could not synchronize replication slot \"%s\" because remote slot precedes " +"local slot" +msgstr "원격 슬롯이 로컬 슬롯 보다 우선이어서 복제 슬롯(\"%s\")을 동기화 할 수 없음" + +#: replication/logical/slotsync.c:217 +#, c-format +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 "" +"원격 슬롯에는 LSN %X/%X, catalog xmin %u 정보가 있지만, " +"로컬 슬롯은 LSN %X/%X, catalog xmin %u 상태입니다." + +#: replication/logical/slotsync.c:459 +#, c-format +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "\"%s\" 복제 슬롯을 %u OID 데이터베이스에서 삭제했음" + +#: replication/logical/slotsync.c:579 +#, c-format +msgid "could not synchronize replication slot \"%s\"" +msgstr "\"%s\" 복제 슬롯을 동기화 할 수 없음" + +#: replication/logical/slotsync.c:580 +#, c-format +msgid "" +"Logical decoding could not find consistent point from local slot's LSN %X/%X." +msgstr "논리적 디코딩이 로컬 슬롯 %X/%X에서 일관성 위치를 찾지 못함" + +#: replication/logical/slotsync.c:589 +#, c-format +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "새롭게 만들어진 \"%s\" 복제 슬롯은 이제 동기화 준비 상태임" + +#: replication/logical/slotsync.c:628 +#, 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 "" +"슬롯 동기화가 건너뜀, 수신된 슬롯 동기화 LSN은 %X/%X(해당 슬롯: \"%s\")인데 " +"이는 대기 서버 위치인 %X/%X 보다 앞섭니다." + +#: replication/logical/slotsync.c:650 +#, c-format +msgid "" +"exiting from slot synchronization because same name slot \"%s\" already " +"exists on the standby" +msgstr "" +"\"%s\" 이름의 슬롯이 대기 서버에도 이미 있어, 슬롯 동기화 작업이 이미 있음" + +#: replication/logical/slotsync.c:819 +#, c-format +msgid "could not fetch failover logical slots info from the primary server: %s" +msgstr "주 서버에서 failover 논리 복제 슬롯을 찾지 못했음: %s" + +#: replication/logical/slotsync.c:965 +#, c-format +msgid "" +"could not fetch primary_slot_name \"%s\" info from the primary server: %s" +msgstr "주 서버에서 \"%s\" primary_slot_name을 찾지 못했음: %s" + +#: replication/logical/slotsync.c:967 +#, c-format +msgid "Check if primary_slot_name is configured correctly." +msgstr "primary_slot_name 설정값을 확인하세요." + +#: replication/logical/slotsync.c:987 +#, c-format +msgid "cannot synchronize replication slots from a standby server" +msgstr "대기 서버에서 복제 슬롯을 동기화 할 수 없음" + +#. translator: second %s is a GUC variable name +#: replication/logical/slotsync.c:996 +#, c-format +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 "" +"replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "" +"복제 슬롯 동기화는 \"%s\" 설정을 필요로 합니다. 해당 환경 설정 변수: \"%s\"" + +#: replication/logical/slotsync.c:1050 +#, 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:1063 replication/logical/slotsync.c:1091 +#, c-format +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 "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 "" +"replication slot synchronization worker will shut down because \"%s\" is " +"disabled" +msgstr "" +"\"%s\" 설정이 비활성화되어 복제 슬롯 동기화 작업이 중지될 것임" + +#: replication/logical/slotsync.c:1138 +#, c-format +msgid "" +"replication slot synchronization worker will restart because of a parameter " +"change" +msgstr "" +"매개 변수가 바뀌어서 복제 슬롯 동기화 작업이 중지될 것임" + +#: replication/logical/slotsync.c:1162 +#, c-format +msgid "" +"replication slot synchronization worker is shutting down on receiving SIGINT" +msgstr "" +"SIGINT 신호를 받아 복제 슬롯 동기화 작업자를 종료함" + +#: replication/logical/slotsync.c:1287 +#, c-format +msgid "cannot synchronize replication slots when standby promotion is ongoing" +msgstr "대기 서버가 주 서버로 전환 중이여서 복제 슬롯 동기화를 할 수 없음" + +#: replication/logical/slotsync.c:1295 +#, c-format +msgid "cannot synchronize replication slots concurrently" +msgstr "복제 슬롯을 동시에 동기화 할 수 없음" + +#: replication/logical/slotsync.c:1403 +#, c-format +msgid "slot sync worker started" +msgstr "슬롯 동기화 작업자 시작됨" + +#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 +#: replication/walreceiver.c:307 +#, c-format +msgid "could not connect to the primary server: %s" +msgstr "주 서버에 연결 할 수 없음: %s" + +#: replication/logical/snapbuild.c:653 #, c-format msgid "initial slot snapshot too large" msgstr "초기 슬롯 스냅샷이 너무 큽니다." -#: replication/logical/snapbuild.c:693 +#: 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] "" +"추출된 논리 디코딩 스냅샷: \"%s\" 스냅샷, %u개 트랜잭션 ID" -#: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480 -#: replication/logical/snapbuild.c:1996 +#: 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 "논리적 디코딩 이어서 시작할 위치: %X/%X" -#: replication/logical/snapbuild.c:1390 +#: replication/logical/snapbuild.c:1406 #, c-format msgid "There are no running transactions." msgstr "실행할 트랜잭션이 없음" -#: replication/logical/snapbuild.c:1432 +#: replication/logical/snapbuild.c:1453 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "논리적 디코딩 시작 위치: %X/%X" -#: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458 +#: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "(대략 %d개) %u 보다 오래된 트랜잭션이 종료되길 기다리고 있습니다." -#: replication/logical/snapbuild.c:1456 +#: replication/logical/snapbuild.c:1477 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "논리적 디코딩을 이어서 시작할 위치: %X/%X" -#: replication/logical/snapbuild.c:1482 +#: replication/logical/snapbuild.c:1503 #, c-format msgid "There are no old transactions anymore." msgstr "더이상 오래된 트랜잭션이 없습니다." -#: replication/logical/snapbuild.c:1883 +#: replication/logical/snapbuild.c:1904 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "\"%s\" snapbuild 상태 파일의 매직 번호가 이상함: 현재값 %u, 기대값 %u" -#: replication/logical/snapbuild.c:1889 +#: replication/logical/snapbuild.c:1910 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "\"%s\" snapbuild 상태 파일의 버전이 이상함: 현재값 %u, 기대값 %u" -#: replication/logical/snapbuild.c:1930 +#: replication/logical/snapbuild.c:1951 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" "\"%s\" snapbuild 상태 파일의 체크섬이 일치하지 않음: 조회값 %u, 기대값 %u" -#: replication/logical/snapbuild.c:1998 +#: replication/logical/snapbuild.c:2019 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "저장된 스냅샷을 이용해서 논리적 디코딩을 시작할 것입니다." -#: replication/logical/snapbuild.c:2105 +#: replication/logical/snapbuild.c:2126 #, c-format msgid "could not parse file name \"%s\"" msgstr "\"%s\" 파일 이름을 분석할 수 없음" -#: replication/logical/tablesync.c:153 +#: replication/logical/tablesync.c:161 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " "table \"%s\" has finished" msgstr "\"%s\" 구독용 논리 복제 테이블 동기화 작업자가, \"%s\" 테이블 완료함" -#: replication/logical/tablesync.c:622 +#: replication/logical/tablesync.c:641 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart so " @@ -21834,44 +22526,44 @@ msgstr "" "two_phase 활성화를 위해 \"%s\" 구독을 위해 논리 복제 적용 작업자가 다시 시작" "됩니다." -#: replication/logical/tablesync.c:797 replication/logical/tablesync.c:939 +#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "\"%s.%s\" 테이블용 테이블 정보를 구할 수 없습니다, 해당 발행: %s" -#: replication/logical/tablesync.c:804 +#: replication/logical/tablesync.c:834 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr " \"%s.%s\" 테이블이 발행 안에 없습니다." -#: replication/logical/tablesync.c:862 +#: replication/logical/tablesync.c:892 #, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" msgstr "\"%s.%s\" 테이블용 칼럼 목록 정보를 구할 수 없습니다, 해당 발행: %s" -#: replication/logical/tablesync.c:1041 +#: replication/logical/tablesync.c:1071 #, c-format msgid "" "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: " "%s" msgstr "\"%s.%s\" 테이블용 WHERE 절을 구할 수 없습니다, 해당 발행: %s" -#: replication/logical/tablesync.c:1192 +#: replication/logical/tablesync.c:1230 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "\"%s.%s\" 테이블용 초기 자료 복사를 시작할 수 없습니다: %s" -#: replication/logical/tablesync.c:1393 +#: replication/logical/tablesync.c:1429 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "발행 서버에서는 테이블 복사 트랜잭션을 시작할 수 없음: %s" -#: replication/logical/tablesync.c:1435 +#: replication/logical/tablesync.c:1472 #, c-format msgid "replication origin \"%s\" already exists" msgstr "\"%s\" 이름의 복제 오리진이 이미 있습니다." -#: replication/logical/tablesync.c:1468 replication/logical/worker.c:2374 +#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 #, c-format msgid "" "user \"%s\" cannot replicate into relation with row-level security enabled: " @@ -21880,18 +22572,18 @@ msgstr "" "\"%s\" 사용자는 로우 수준 보안 활성화 상태에서 릴레이션으로 복제할 수 없음: " "\"%s\"" -#: replication/logical/tablesync.c:1481 +#: replication/logical/tablesync.c:1518 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "발행 서버에서 테이블 복사 트랜잭션을 마칠 수 없음: %s" -#: replication/logical/worker.c:499 +#: replication/logical/worker.c:481 #, c-format msgid "" "logical replication parallel apply worker for subscription \"%s\" will stop" msgstr "\"%s\" 구독을 위한 논리 복제 병렬 반영 작업자가 중지됩니다." -#: replication/logical/worker.c:501 +#: replication/logical/worker.c:483 #, c-format msgid "" "Cannot handle streamed replication transactions using parallel apply workers " @@ -21900,12 +22592,12 @@ msgstr "" "모든 테이블 동기화 끝나기 전까지는 병렬 반영 작업자를 사용하는 스트리밍 복제 " "트랜잭셕은 처리할 수 없습니다." -#: replication/logical/worker.c:863 replication/logical/worker.c:978 +#: replication/logical/worker.c:852 replication/logical/worker.c:967 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "%d 번째 논리 복제 칼럼 안에 잘못된 바이너리 자료 형식 발견됨" -#: replication/logical/worker.c:2513 +#: replication/logical/worker.c:2500 #, c-format msgid "" "publisher did not send replica identity column expected by the logical " @@ -21914,7 +22606,7 @@ msgstr "" "발행 서버에서 \"%s.%s\" 논리 복제 대상 릴레이션의 복제 식별자 칼럼을 보내지 " "않았습니다." -#: replication/logical/worker.c:2520 +#: replication/logical/worker.c:2507 #, c-format msgid "" "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY " @@ -21925,22 +22617,22 @@ msgstr "" "KEY 도 없고, 발행 쪽 해당 테이블에 REPLICA IDENTITY FULL 속성 칼럼도 없습니" "다." -#: replication/logical/worker.c:3384 +#: replication/logical/worker.c:3371 #, c-format msgid "invalid logical replication message type \"??? (%d)\"" msgstr "잘못된 논리 복제 메시지 형태 \"??? (%d)\"" -#: replication/logical/worker.c:3556 +#: replication/logical/worker.c:3543 #, c-format msgid "data stream from publisher has ended" msgstr "발행 서버로부터의 데이터 스트림이 끝났습니다" -#: replication/logical/worker.c:3713 +#: replication/logical/worker.c:3697 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "시간 제한으로 논리 복제 작업자를 중지합니다." -#: replication/logical/worker.c:3907 +#: replication/logical/worker.c:3891 #, c-format msgid "" "logical replication worker for subscription \"%s\" will stop because the " @@ -21949,7 +22641,7 @@ msgstr "" "\"%s\" 구독이 지워졌기 때문에, 해당 구독용 논리 복제 작업자가 중지 될 것입니" "다." -#: replication/logical/worker.c:3920 +#: replication/logical/worker.c:3905 #, c-format msgid "" "logical replication worker for subscription \"%s\" will stop because the " @@ -21958,7 +22650,7 @@ msgstr "" "\"%s\" 구독이 비활성화 되었기 때문에, 해당 구독용 논리 복제 작업자가 중지 될 " "것입니다." -#: replication/logical/worker.c:3951 +#: replication/logical/worker.c:3936 #, c-format msgid "" "logical replication parallel apply worker for subscription \"%s\" will stop " @@ -21967,7 +22659,7 @@ msgstr "" "매개 변수가 바뀌어서 \"%s\" 구독을 위해 논리 복제 병렬 반영 작업자가 중지 될 " "것입니다." -#: replication/logical/worker.c:3955 +#: replication/logical/worker.c:3940 #, c-format msgid "" "logical replication worker for subscription \"%s\" will restart because of a " @@ -21975,8 +22667,31 @@ msgid "" msgstr "" "매개 변수가 바뀌어서 \"%s\" 구독을 위해 논리 복제 작업자가 중지 될 것입니다." +#: replication/logical/worker.c:3954 +#, c-format +msgid "" +"logical replication parallel apply worker for subscription \"%s\" will stop " +"because the subscription owner's superuser privileges have been revoked" +msgstr "" +"구독 소유주의 슈퍼유저 권한이 회수되어 \"%s\" 구독용 논리 복제 병렬 반영 " +"작업자가 중지 될 것임" + +#: replication/logical/worker.c:3958 +#, c-format +msgid "" +"logical replication worker for subscription \"%s\" will restart because the " +"subscription owner's superuser privileges have been revoked" +msgstr "" +"구독 소유주의 슈퍼유저 권한이 회수되어 \"%s\" 구독용 논리 복제 병렬 반영 " +"작업자가 재실행 될 것임" + #: replication/logical/worker.c:4478 #, c-format +msgid "subscription has no replication slot set" +msgstr "구독에서 사용할 복제 슬롯 세트가 없습니다." + +#: replication/logical/worker.c:4591 +#, c-format msgid "" "logical replication worker for subscription %u will not start because the " "subscription was removed during startup" @@ -21984,7 +22699,7 @@ msgstr "" "해당 구독이 시작하는 사이 지워져서 구독번호 %u 번용 논리 복제 작업자가 작동되" "지 못했습니다." -#: replication/logical/worker.c:4493 +#: replication/logical/worker.c:4607 #, c-format msgid "" "logical replication worker for subscription \"%s\" will not start because " @@ -21992,7 +22707,7 @@ msgid "" msgstr "" "\"%s\" 구독이 시작되는 사이 지워져서 논리 복제 작업자가 작동되지 못했습니다." -#: replication/logical/worker.c:4510 +#: replication/logical/worker.c:4631 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " @@ -22001,124 +22716,125 @@ msgstr "" "\"%s\" 구독, \"%s\" 테이블을 위한 논리 복제 테이블 동기화 작업자가 시작되었습" "니다." -#: replication/logical/worker.c:4515 +#: replication/logical/worker.c:4636 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "\"%s\" 구독을 위한 논리 복제 반영 작업자가 시작되었습니다." -#: replication/logical/worker.c:4590 -#, c-format -msgid "subscription has no replication slot set" -msgstr "구독에서 사용할 복제 슬롯 세트가 없습니다." - -#: replication/logical/worker.c:4757 +#: replication/logical/worker.c:4758 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "\"%s\" 구독이 오류로 비활성화 되었습니다." -#: replication/logical/worker.c:4805 +#: replication/logical/worker.c:4806 #, c-format msgid "logical replication starts skipping transaction at LSN %X/%X" msgstr "%X/%X LSN 에서 트랜잭션 건너 뛰어 논리 복제를 시작함" -#: replication/logical/worker.c:4819 +#: replication/logical/worker.c:4820 #, c-format msgid "logical replication completed skipping transaction at LSN %X/%X" msgstr "논리 복제가 %X/%X LSN까지 트랜잭션을 건너뛰었습니다." -#: replication/logical/worker.c:4901 +#: replication/logical/worker.c:4902 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "\"%s\" 이름의 구독의 LSN 건너뛰기 완료함" -#: replication/logical/worker.c:4902 +#: 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 "원력 트랜잭션 마침 WAL 위치 %X/%X LSN이 skip-LSN %X/%X와 같지 않음" -#: replication/logical/worker.c:4928 +#: replication/logical/worker.c:4940 #, c-format msgid "" -"processing remote data for replication origin \"%s\" during message type \"%s" -"\"" +"processing remote data for replication origin \"%s\" during message type " +"\"%s\"" msgstr "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\"" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:4944 #, c-format msgid "" -"processing remote data for replication origin \"%s\" during message type \"%s" -"\" in transaction %u" +"processing remote data for replication origin \"%s\" during message type " +"\"%s\" in transaction %u" msgstr "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해" "당 트랜잭션: %u" -#: replication/logical/worker.c:4937 +#: 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" +"processing remote data for replication origin \"%s\" during message type " +"\"%s\" in transaction %u, finished at %X/%X" msgstr "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해" "당 트랜잭션: %u, 마침 위치: %X/%X" -#: replication/logical/worker.c:4948 +#: 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" +"processing remote data for replication origin \"%s\" during message type " +"\"%s\" for replication target relation \"%s.%s\" in transaction %u" msgstr "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해" "당 복제 대상 릴레이션: \"%s.%s\", 해당 트랜잭션: %u" -#: replication/logical/worker.c:4955 +#: 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" +"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 "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해" "당 복제 대상 릴레이션: \"%s.%s\", 해당 트랜잭션: %u, 마침 위치: %X/%X" -#: replication/logical/worker.c:4966 +#: 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" +"processing remote data for replication origin \"%s\" during message type " +"\"%s\" for replication target relation \"%s.%s\" column \"%s\" in " +"transaction %u" msgstr "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해" "당 복제 대상 릴레이션: \"%s.%s\", 해당 칼럼 \"%s\", 해당 트랜잭션: %u" -#: replication/logical/worker.c:4974 +#: 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" +"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 "" "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해" "당 복제 대상 릴레이션: \"%s.%s\", 해당 칼럼 \"%s\", 해당 트랜잭션: %u, 마침 " "위치: %X/%X" -#: replication/pgoutput/pgoutput.c:318 +#: replication/pgoutput/pgoutput.c:322 #, c-format msgid "invalid proto_version" msgstr "잘못된 proto_version" -#: replication/pgoutput/pgoutput.c:323 +#: replication/pgoutput/pgoutput.c:327 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_verson \"%s\" 범위 벗어남" -#: replication/pgoutput/pgoutput.c:340 +#: replication/pgoutput/pgoutput.c:344 #, c-format msgid "invalid publication_names syntax" msgstr "잘못된 publication_names 구문" -#: replication/pgoutput/pgoutput.c:443 +#: replication/pgoutput/pgoutput.c:414 replication/pgoutput/pgoutput.c:418 +#, c-format +msgid "option \"%s\" missing" +msgstr "\"%s\" 옵션 빠졌음" + +#: replication/pgoutput/pgoutput.c:478 #, c-format msgid "" "client sent proto_version=%d but server only supports protocol %d or lower" @@ -22126,7 +22842,7 @@ msgstr "" "클라이언트가 proto_version=%d 값을 보냈지만, %d 버전 또는 그 이하 버전 프로토" "콜만 지원합니다." -#: replication/pgoutput/pgoutput.c:449 +#: replication/pgoutput/pgoutput.c:484 #, c-format msgid "" "client sent proto_version=%d but server only supports protocol %d or higher" @@ -22134,12 +22850,7 @@ msgstr "" "클라이언트가 proto_version=%d 값을 보냈지만, %d 버전 또는 그 이상 버전 프로토" "콜만 지원합니다." -#: replication/pgoutput/pgoutput.c:455 -#, c-format -msgid "publication_names parameter missing" -msgstr "publication_names 매개 변수가 빠졌음" - -#: replication/pgoutput/pgoutput.c:469 +#: replication/pgoutput/pgoutput.c:499 #, c-format msgid "" "requested proto_version=%d does not support streaming, need %d or higher" @@ -22147,7 +22858,7 @@ msgstr "" "요청한 %d 버전 proto_version은 스트리밍을 지원하지 않습니다. %d 또는 그 이상 " "버전이 필요합니다." -#: replication/pgoutput/pgoutput.c:475 +#: replication/pgoutput/pgoutput.c:505 #, c-format msgid "" "requested proto_version=%d does not support parallel streaming, need %d or " @@ -22156,12 +22867,12 @@ msgstr "" "요청한 proto_version=%d 값은 스트리밍을 지원하지 않습니다. %d 또는 그 이상 버" "전이 필요합니다." -#: replication/pgoutput/pgoutput.c:480 +#: replication/pgoutput/pgoutput.c:510 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "스트리밍을 요청했지만, 출력 플러그인이 지원하지 않습니다." -#: replication/pgoutput/pgoutput.c:497 +#: replication/pgoutput/pgoutput.c:524 #, c-format msgid "" "requested proto_version=%d does not support two-phase commit, need %d or " @@ -22170,27 +22881,27 @@ msgstr "" "요청한 proto_version=%d 값은 2PC를 지원하지 않습니다. %d 또는 그 이상 버전이 " "필요합니다." -#: replication/pgoutput/pgoutput.c:502 +#: replication/pgoutput/pgoutput.c:529 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "2PC를 요청했지만, 출력 플러그인이 지원하지 않습니다." -#: replication/slot.c:207 +#: replication/slot.c:260 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "\"%s\" 복제 슬롯 이름이 너무 짧음" -#: replication/slot.c:216 +#: replication/slot.c:269 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "\"%s\" 복제 슬롯 이름이 너무 긺" -#: replication/slot.c:229 +#: replication/slot.c:282 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "\"%s\" 복제 슬롯 이름에 사용할 수 없는 문자가 있음" -#: replication/slot.c:231 +#: replication/slot.c:284 #, c-format msgid "" "Replication slot names may only contain lower case letters, numbers, and the " @@ -22199,193 +22910,314 @@ msgstr "" "복제 슬롯 이름으로 사용할 수 있는 문자는 영문 소문자, 숫자, 밑줄(_) 문자입니" "다." -#: replication/slot.c:285 +#: replication/slot.c:333 +#, c-format +msgid "cannot enable failover for a replication slot created on the standby" +msgstr "대기 서버에서 만들어진 복제 슬롯에는 failover 설정을 활성화 할 수 없음" + +#: replication/slot.c:345 replication/slot.c:849 +#, c-format +msgid "cannot enable failover for a temporary replication slot" +msgstr "임시 복제 슬롯에는 failover 설정을 활성화 할 수 없음" + +#: replication/slot.c:370 #, c-format msgid "replication slot \"%s\" already exists" msgstr "\"%s\" 이름의 복제 슬롯이 이미 있습니다." -#: replication/slot.c:295 +#: replication/slot.c:380 #, c-format msgid "all replication slots are in use" msgstr "모든 복제 슬롯이 사용 중입니다." -#: replication/slot.c:296 +#: replication/slot.c:381 #, c-format -msgid "Free one or increase max_replication_slots." -msgstr "하나를 비우든지, max_replication_slots 설정값을 늘리세요." +msgid "Free one or increase \"max_replication_slots\"." +msgstr "하나를 비우든지, \"max_replication_slots\" 설정값을 늘리세요." -#: replication/slot.c:474 replication/slotfuncs.c:736 -#: utils/activity/pgstat_replslot.c:55 utils/adt/genfile.c:774 +#: 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\" 이름의 복제 슬롯이 없습니다" -#: replication/slot.c:520 replication/slot.c:1110 +#: replication/slot.c:606 replication/slot.c:1337 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "\"%s\" 이름의 복제 슬롯을 %d PID 프로세스가 사용중입니다." -#: replication/slot.c:756 replication/slot.c:1645 replication/slot.c:2028 +#: replication/slot.c:638 +#, c-format +msgid "acquired logical replication slot \"%s\"" +msgstr "\"%s\" 논리 복제 슬롯을 획득함" + +#: replication/slot.c:640 +#, c-format +msgid "acquired physical replication slot \"%s\"" +msgstr "\"%s\" 물리 복제 슬롯을 획득함" + +#: replication/slot.c:729 +#, c-format +msgid "released logical replication slot \"%s\"" +msgstr "\"%s\" 논리 복제 슬롯을 반환함" + +#: replication/slot.c:731 +#, c-format +msgid "released physical replication slot \"%s\"" +msgstr "\"%s\" 물리 복제 슬롯을 반환함" + +#: replication/slot.c:797 +#, c-format +msgid "cannot drop replication slot \"%s\"" +msgstr "\"%s\" 복제 슬롯을 삭제할 수 없음" + +#: replication/slot.c:816 +#, c-format +msgid "cannot use %s with a physical replication slot" +msgstr "물리 복제 슬롯과 함께 %s 사용할 수 없음" + +#: replication/slot.c:828 +#, c-format +msgid "cannot alter replication slot \"%s\"" +msgstr "\"%s\" 복제 슬롯을 변경 할 수 없음" + +#: replication/slot.c:838 +#, c-format +msgid "cannot enable failover for a replication slot on the standby" +msgstr "대기 서버의 복제 슬롯에는 failover 설정을 활성화 할 수 없음" + +#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 #, c-format msgid "could not remove directory \"%s\"" msgstr "\"%s\" 디렉터리를 삭제할 수 없음" -#: replication/slot.c:1145 +#: replication/slot.c:1372 #, c-format -msgid "replication slots can only be used if max_replication_slots > 0" -msgstr "복제 슬롯은 max_replication_slots > 0 상태에서 사용될 수 있습니다." +msgid "replication slots can only be used if \"max_replication_slots\" > 0" +msgstr "복제 슬롯은 \"max_replication_slots\" > 0 상태에서만 사용할 수 있음" -#: replication/slot.c:1150 +#: replication/slot.c:1377 #, c-format -msgid "replication slots can only be used if wal_level >= replica" -msgstr "복제 슬롯은 wal_level >= replica 상태에서 사용될 수 있습니다." +msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" +msgstr "복제 슬롯은 \"wal_level\" >= \"replica\" 상태에서만 사용할 수 있음" -#: replication/slot.c:1162 +#: replication/slot.c:1389 #, c-format msgid "permission denied to use replication slots" msgstr "복제 슬롯을 사용할 권한 없음" -#: replication/slot.c:1163 +#: replication/slot.c:1390 #, c-format msgid "Only roles with the %s attribute may use replication slots." msgstr "복제 슬롯은 %s 속성을 가진 롤만 사용할 수 있습니다." -#: replication/slot.c:1271 +#: replication/slot.c:1498 #, c-format msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." msgstr[0] "" "해당 슬롯 restart_lsn %X/%X 값은 %llu 바이트로 그 크기를 초과했습니다." -#: replication/slot.c:1279 +#: replication/slot.c:1506 #, c-format msgid "The slot conflicted with xid horizon %u." msgstr "해당 슬롯이 xid horizon %u 값으로 충돌합니다." -#: replication/slot.c:1284 +#: replication/slot.c:1511 msgid "" -"Logical decoding on standby requires wal_level >= logical on the primary " -"server." +"Logical decoding on standby requires \"wal_level\" >= \"logical\" on the " +"primary server." msgstr "" -"대기 서버의 논리적 디코딩 기능은 주서버의 wal_level >= logical 설정이 필요합" +"대기 서버의 논리적 디코딩 기능은 주서버의 \"wal_level\" >= \"logical\" 설정이 필요합" "니다." -#: replication/slot.c:1292 +#: replication/slot.c:1519 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "%d번 프로세스를 중지합니다. \"%s\" 복제 슬롯이 삭제될 것입니다." -#: replication/slot.c:1294 +#: replication/slot.c:1521 #, c-format msgid "invalidating obsolete replication slot \"%s\"" msgstr "\"%s\" 복제 슬롯이 사용되지 않아 삭제될 것입니다." -#: replication/slot.c:1966 +#: replication/slot.c:2249 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "\"%s\" 복제 슬롯 파일의 매직 번호가 이상합니다: 현재값 %u, 기대값 %u" -#: replication/slot.c:1973 +#: replication/slot.c:2256 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "\"%s\" 복제 슬롯 파일은 지원하지 않는 %u 버전 파일입니다" -#: replication/slot.c:1980 +#: replication/slot.c:2263 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "\"%s\" 복제 슬롯 파일이 %u 길이로 손상되었습니다." -#: replication/slot.c:2016 +#: replication/slot.c:2299 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "\"%s\" 복제 슬롯 파일의 체크섬 값이 이상합니다: 현재값 %u, 기대값 %u" -#: replication/slot.c:2050 +#: replication/slot.c:2333 #, c-format -msgid "logical replication slot \"%s\" exists, but wal_level < logical" -msgstr "\"%s\" 논리 복제 슬롯이 있지만, wal_level < logical" +msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" +msgstr "\"%s\" 논리 복제 슬롯이 있지만, \"wal_level\" < \"logical\" 설정임" -#: replication/slot.c:2052 +#: replication/slot.c:2335 #, c-format -msgid "Change wal_level to be logical or higher." -msgstr "wal_level 값을 logical 또는 그 이상으로 지정하세요." +msgid "Change \"wal_level\" to be \"logical\" or higher." +msgstr "\"wal_level\" 값을 \"logical\" 또는 그 이상으로 지정하세요." -#: replication/slot.c:2056 +#: replication/slot.c:2339 #, c-format -msgid "physical replication slot \"%s\" exists, but wal_level < replica" -msgstr "\"%s\" 물리 복제 슬롯이 있지만, wal_level < replica" +msgid "" +"physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" +msgstr "\"%s\" 물리 복제 슬롯이 있지만, \"wal_level\" < \"replica\" 설정임" -#: replication/slot.c:2058 +#: replication/slot.c:2341 #, c-format -msgid "Change wal_level to be replica or higher." -msgstr "wal_level 값을 replica 또는 그 이상으로 지정하세요." +msgid "Change \"wal_level\" to be \"replica\" or higher." +msgstr "\"wal_level\" 값을 \"replica\" 또는 그 이상으로 지정하세요." -#: replication/slot.c:2092 +#: replication/slot.c:2383 #, c-format msgid "too many replication slots active before shutdown" msgstr "서버 중지 전에 너무 많은 복제 슬롯이 활성화 상태입니다" -#: replication/slotfuncs.c:601 +#: replication/slot.c:2458 +#, c-format +msgid "\"%s\" is not a physical replication slot" +msgstr "\"%s\" 슬롯은 물리 복제 슬롯이 아님" + +#: replication/slot.c:2635 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "\"%s\" 복제 슬롯에는 \"%s\" 매개 변수 설정이 없음" + +#: replication/slot.c:2637 replication/slot.c:2671 replication/slot.c:2686 +#, c-format +msgid "" +"Logical replication is waiting on the standby associated with replication " +"slot \"%s\"." +msgstr "논리 복제가 \"%s\" 복제 슬롯과 연결된 대기 서버에서 대기 중" + +#: replication/slot.c:2639 +#, c-format +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "\"%s\" 이름의 복제 슬롯을 만들든가, \"%s\" 설정을 바꾸세요." + +#: replication/slot.c:2649 +#, c-format +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "\"%s\" 논리 복제 슬롯을 \"%s\" 설정에 지정할 수 없음" + +#: replication/slot.c:2651 +#, c-format +msgid "" +"Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "논리 복제가 \"%s\" 복제 슬롯 수정을 기다리고 있습니다." + +#: replication/slot.c:2653 +#, c-format +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "\"%s\" 논리 복제 슬롯을 \"%s\" 설정에서 빼세요." + +#: replication/slot.c:2669 +#, c-format +msgid "" +"physical replication slot \"%s\" specified in parameter \"%s\" has been " +"invalidated" +msgstr "\"%s\" 물리 복제 슬롯이 \"%s\" 설정에서 invalid 상태가 되었음" + +#: replication/slot.c:2673 +#, c-format +msgid "" +"Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "\"%s\" 복제 슬롯을 삭제하고 다시 만들거나, \"%s\" 설정을 바꾸세요." + +#: replication/slot.c:2684 +#, c-format +msgid "" +"replication slot \"%s\" specified in parameter \"%s\" does not have " +"active_pid" +msgstr "\"%s\" 복제 슬롯(\"%s\" 설정에 지정된)에 대응하는 active_pid가 없음" + +#: replication/slot.c:2688 +#, c-format +msgid "" +"Start the standby associated with the replication slot \"%s\", or amend " +"parameter \"%s\"." +msgstr "\"%s\" 복제 슬롯과 관계된 대기 서버를 시작하거나, \"%s\" 설정을 바꾸세요." + +#: replication/slotfuncs.c:526 #, c-format msgid "invalid target WAL LSN" msgstr "잘못된 대상 WAL LSN" -#: replication/slotfuncs.c:623 +#: replication/slotfuncs.c:548 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "\"%s\" 이름의 복제 슬롯은 사용할 수 없음" -#: replication/slotfuncs.c:625 +#: replication/slotfuncs.c:550 #, c-format msgid "" "This slot has never previously reserved WAL, or it has been invalidated." msgstr "이 슬롯은 한 번도 WAL를 예약한 적이 없거나, 잘못된 것임" -#: replication/slotfuncs.c:641 +#: replication/slotfuncs.c:566 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "복제 슬롯 위치를 %X/%X 로 바꿀 수 없습니다. 최소값은 %X/%X" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:673 #, c-format msgid "" "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "물리 복제 슬롯(\"%s\")을 논리 복제 슬롯으로 복사할 수 없음" -#: replication/slotfuncs.c:750 +#: replication/slotfuncs.c:675 #, c-format msgid "" "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "논리 복제 슬롯(\"%s\")을 물리 복제 슬롯으로 복사할 수 없음" -#: replication/slotfuncs.c:757 +#: replication/slotfuncs.c:682 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "WAL을 확보하지 않은 복제 슬롯은 복사할 수 없음" -#: replication/slotfuncs.c:834 +#: replication/slotfuncs.c:768 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "\"%s\" 복제 슬롯을 복사할 수 없음" -#: replication/slotfuncs.c:836 +#: replication/slotfuncs.c:770 #, c-format msgid "" "The source replication slot was modified incompatibly during the copy " "operation." msgstr "복사 작업 중 원본 복제 슬롯이 비정상적으로 변경되었습니다." -#: replication/slotfuncs.c:842 +#: replication/slotfuncs.c:776 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "논리 복제가 끝나지 않은 \"%s\" 슬롯은 복사할 수 없음" -#: replication/slotfuncs.c:844 +#: replication/slotfuncs.c:778 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "원본 복제 슬롯의 confirmed_flush_lsn 값이 타당할 때 다시 시도하세요." -#: replication/syncrep.c:262 +#: replication/slotfuncs.c:877 +#, c-format +msgid "replication slots can only be synchronized to a standby server" +msgstr "복제 슬롯은 대기 서버에만 동기화 될 수 있음" + +#: replication/syncrep.c:261 #, c-format msgid "" "canceling the wait for synchronous replication and terminating connection " @@ -22393,7 +23225,7 @@ msgid "" msgstr "" "관리자 명령에 의해 동기식 복제의 대기 작업과 접속 끊기 작업을 취소합니다." -#: replication/syncrep.c:263 replication/syncrep.c:280 +#: replication/syncrep.c:262 replication/syncrep.c:279 #, c-format msgid "" "The transaction has already committed locally, but might not have been " @@ -22402,209 +23234,204 @@ msgstr "" "주 서버에서는 이 트랜잭션이 커밋되었지만, 복제용 대기 서버에서는 아직 커밋 되" "지 않았을 가능성이 있습니다." -#: replication/syncrep.c:279 +#: replication/syncrep.c:278 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "사용자 요청에 의해 동기식 복제 작업을 취소합니다." -#: replication/syncrep.c:486 +#: replication/syncrep.c:485 #, c-format -msgid "standby \"%s\" is now a synchronous standby with priority %u" -msgstr "\"%s\" 대기 서버의 동기식 복제 우선순위가 %u 로 변경되었습니다." +msgid "standby \"%s\" is now a synchronous standby with priority %d" +msgstr "\"%s\" 대기 서버의 동기식 복제 우선순위가 %d 순위로 변경되었음" -#: replication/syncrep.c:490 +#: replication/syncrep.c:489 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "\"%s\" 대기 서버가 동기식 대기 서버 후보가 되었습니다" -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1013 #, c-format -msgid "synchronous_standby_names parser failed" -msgstr "synchronous_standby_names 값을 분석할 수 없음" +msgid "\"synchronous_standby_names\" parser failed" +msgstr "\"synchronous_standby_names\" 값을 분석할 수 없음" -#: replication/syncrep.c:1025 +#: replication/syncrep.c:1019 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "동기식 대기 서버 수 (%d)는 0보다 커야 합니다." -#: replication/walreceiver.c:180 +#: replication/walreceiver.c:176 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "관리자 명령으로 인해 WAL 수신기를 종료합니다." -#: replication/walreceiver.c:305 -#, c-format -msgid "could not connect to the primary server: %s" -msgstr "주 서버에 연결 할 수 없음: %s" - -#: replication/walreceiver.c:352 +#: replication/walreceiver.c:354 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "데이터베이스 시스템 식별번호가 주 서버와 대기 서버가 서로 다름" -#: replication/walreceiver.c:353 +#: replication/walreceiver.c:355 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "주 서버: %s, 대기 서버: %s." -#: replication/walreceiver.c:364 +#: replication/walreceiver.c:366 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "" "주 서버의 제일 최신의 타임라인은 %u 인데, 복구 타임라인 %u 보다 옛것입니다" -#: replication/walreceiver.c:417 +#: replication/walreceiver.c:419 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "주 서버의 WAL 스트리밍 시작 위치: %X/%X (타임라인 %u)" -#: replication/walreceiver.c:421 +#: replication/walreceiver.c:423 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "WAL 스트리밍 재시작 위치: %X/%X (타임라인 %u)" -#: replication/walreceiver.c:457 +#: replication/walreceiver.c:458 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "WAL 스트리밍 계속할 수 없음, 복구가 이미 종료됨" -#: replication/walreceiver.c:501 +#: replication/walreceiver.c:502 #, c-format msgid "replication terminated by primary server" msgstr "주 서버에 의해서 복제가 끝남" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:503 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "타임라인 %u, 위치 %X/%X 에서 WAL 끝에 도달함" -#: replication/walreceiver.c:592 +#: replication/walreceiver.c:593 #, c-format msgid "terminating walreceiver due to timeout" msgstr "시간 제한으로 wal 수신기를 중지합니다." -#: replication/walreceiver.c:624 +#: replication/walreceiver.c:625 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "주 서버에는 요청 받은 %u 타임라인의 WAL가 더 이상 없습니다." -#: replication/walreceiver.c:640 replication/walreceiver.c:1066 +#: replication/walreceiver.c:641 replication/walreceiver.c:1071 #, c-format msgid "could not close WAL segment %s: %m" msgstr "%s WAL 조각 파일을 닫을 수 없음: %m" -#: replication/walreceiver.c:759 +#: replication/walreceiver.c:760 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "주 서버에서 %u 타임라인용 타임라인 내역 파일을 가져옵니다." -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:959 #, c-format -msgid "could not write to WAL segment %s at offset %u, length %lu: %m" -msgstr "%s WAL 조각 파일 쓰기 실패: 위치 %u, 길이 %lu: %m" +msgid "could not write to WAL segment %s at offset %d, length %lu: %m" +msgstr "%s WAL 조각 파일 쓰기 실패: 위치 %d, 길이 %lu: %m" -#: replication/walsender.c:519 +#: replication/walsender.c:531 #, c-format msgid "cannot use %s with a logical replication slot" msgstr "논리 복제 슬롯으로 %s 사용할 수 없음" -#: replication/walsender.c:623 storage/smgr/md.c:1529 +#: replication/walsender.c:635 storage/smgr/md.c:1735 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "\"%s\" 파일의 끝을 찾을 수 없음: %m" -#: replication/walsender.c:627 +#: replication/walsender.c:639 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "\"%s\" 파일에서 시작 위치를 찾을 수 없음: %m" -#: replication/walsender.c:704 +#: replication/walsender.c:853 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "물리적 복제에서 논리적 복제 슬롯을 사용할 수 없음" -#: replication/walsender.c:770 +#: replication/walsender.c:919 #, c-format msgid "" "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "요청된 %X/%X 시작 위치(타임라인 %u)가 이 서버 내역에 없습니다." -#: replication/walsender.c:773 +#: replication/walsender.c:922 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "이 서버의 시작 위치: 타임라인 %u, 위치 %X/%X" -#: replication/walsender.c:817 +#: replication/walsender.c:966 #, c-format msgid "" "requested starting point %X/%X is ahead of the WAL flush position of this " "server %X/%X" msgstr "%X/%X 위치는 서버의 %X/%X 보다 미래의 것입니다." -#: replication/walsender.c:1010 +#: replication/walsender.c:1160 #, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" msgstr "\"%s\" CREATE_REPLICATION_SLOT 옵션에서 쓸 수 없는 값: \"%s\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1095 +#: replication/walsender.c:1266 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s 명령은 트랜잭션 블럭안에서 실행할 수 없음" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1105 +#: replication/walsender.c:1276 #, c-format msgid "%s must be called inside a transaction" msgstr "%s 명령은 트랜잭션 블럭안에서 실행할 수 있음" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1111 +#: replication/walsender.c:1282 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s 구문은 격리 수준이 REPEATABLE READ 일때만 사용할 수 있습니다." #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1116 +#: replication/walsender.c:1287 #, c-format msgid "%s must be called in a read-only transaction" msgstr "%s 명령은 읽기 전용 트랜잭션 블럭안에서만 실행할 수 있음" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1122 +#: replication/walsender.c:1293 #, c-format msgid "%s must be called before any query" msgstr "어떤 쿼리보다 먼저 %s 명령을 호출해야 함" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1128 +#: replication/walsender.c:1299 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s 명령은 서브트랜잭션 블럭안에서 실행할 수 없음" -#: replication/walsender.c:1275 +#: replication/walsender.c:1472 #, c-format msgid "terminating walsender process after promotion" msgstr "운영전환 뒤 wal 송신기 프로세스를 중지합니다." -#: replication/walsender.c:1696 +#: replication/walsender.c:2000 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "WAL 송신기가 중지 중일 때는 새 명령을 실행할 수 없습니다." -#: replication/walsender.c:1731 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "물리적 복제를 위한 WAL 송신기에서 SQL 명령을 실행할 수 없음" -#: replication/walsender.c:1764 +#: replication/walsender.c:2068 #, c-format msgid "received replication command: %s" msgstr "수신된 복제 명령: %s" -#: replication/walsender.c:1772 tcop/fastpath.c:209 tcop/postgres.c:1138 -#: tcop/postgres.c:1496 tcop/postgres.c:1736 tcop/postgres.c:2210 -#: tcop/postgres.c:2648 tcop/postgres.c:2726 +#: 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 " @@ -22613,215 +23440,215 @@ msgstr "" "현재 트랜잭션은 중지되어 있습니다. 이 트랜잭션을 종료하기 전까지는 모든 명령" "이 무시될 것입니다" -#: replication/walsender.c:1914 replication/walsender.c:1949 +#: replication/walsender.c:2233 replication/walsender.c:2268 #, c-format msgid "unexpected EOF on standby connection" msgstr "대기 서버 연결에서 예상치 못한 EOF 발견함" -#: replication/walsender.c:1937 +#: replication/walsender.c:2256 #, c-format msgid "invalid standby message type \"%c\"" msgstr "잘못된 대기 서버 메시지 형태 \"%c\"" -#: replication/walsender.c:2026 +#: replication/walsender.c:2345 #, c-format msgid "unexpected message type \"%c\"" msgstr "예상치 못한 메시지 형태: \"%c\"" -#: replication/walsender.c:2439 +#: replication/walsender.c:2759 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "복제 시간 제한으로 wal 송신기 프로세스를 종료합니다." -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:842 +#: rewrite/rewriteDefine.c:104 rewrite/rewriteDefine.c:835 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "\"%s\" 이름의 룰(rule)이 \"%s\" 테이블에 이미 지정되어있습니다" -#: rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:780 +#: rewrite/rewriteDefine.c:261 rewrite/rewriteDefine.c:773 #, c-format msgid "relation \"%s\" cannot have rules" msgstr "\"%s\" 릴레이션은 룰을 지정할 수 없음" -#: rewrite/rewriteDefine.c:299 +#: rewrite/rewriteDefine.c:292 #, c-format msgid "rule actions on OLD are not implemented" msgstr "OLD에 대한 실행 룰(rule)은 아직 구현되지 않았습니다" -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:293 #, c-format msgid "Use views or triggers instead." msgstr "대신에 뷰나 트리거를 사용하십시오." -#: rewrite/rewriteDefine.c:304 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on NEW are not implemented" msgstr "NEW에 대한 실행 룰(rule)은 아직 구현되지 않았습니다" -#: rewrite/rewriteDefine.c:305 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use triggers instead." msgstr "대신에 트리거를 사용하십시오." -#: rewrite/rewriteDefine.c:319 +#: rewrite/rewriteDefine.c:312 #, c-format msgid "relation \"%s\" cannot have ON SELECT rules" msgstr "\"%s\" 릴레이션은 ON SELECT 룰을 지정할 수 없음" -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "SELECT 에서 INSTEAD NOTHING 룰(rule)은 구현되지 않았습니다" -#: rewrite/rewriteDefine.c:330 +#: rewrite/rewriteDefine.c:323 #, c-format msgid "Use views instead." msgstr "대신에 뷰를 사용하십시오." -#: rewrite/rewriteDefine.c:338 +#: rewrite/rewriteDefine.c:331 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "SELECT에 대한 다중 실행 룰(rule)은 구현되지 않았습니다" -#: rewrite/rewriteDefine.c:348 +#: rewrite/rewriteDefine.c:341 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "" "SELECT에 대한 룰(rule)은 그 지정에 INSTEAD SELECT 실행규칙을 지정해야만합니다" -#: rewrite/rewriteDefine.c:356 +#: rewrite/rewriteDefine.c:349 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "SELECT 룰에는 WITH 절 안에 자료 변경 구문을 포함할 수 없습니다." -#: rewrite/rewriteDefine.c:364 +#: rewrite/rewriteDefine.c:357 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "" "이벤트 자격(event qualifications)은 SELECT 룰(rule)에서 구현되지 않았습니다" -#: rewrite/rewriteDefine.c:391 +#: rewrite/rewriteDefine.c:384 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" 이름의 뷰가 이미 있습니다" -#: rewrite/rewriteDefine.c:415 +#: rewrite/rewriteDefine.c:408 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "\"%s\" 위한 뷰 룰(view rule)의 이름은 \"%s\" 여야만합니다" -#: rewrite/rewriteDefine.c:442 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "하나의 rule에서 여러개의 RETURNING 목록을 지정할 수 없습니다" -#: rewrite/rewriteDefine.c:447 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "RETURNING 목록은 conditional rule에서는 지원하지 않습니다" -#: rewrite/rewriteDefine.c:451 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "RETURNING 목록은 non-INSTEAD rule에서는 지원하지 않습니다" -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:458 #, c-format msgid "non-view rule for \"%s\" must not be named \"%s\"" msgstr "\"%s\" 위한 뷰가 아닌 룰 이름은 \"%s\" 아니여야 합니다." -#: rewrite/rewriteDefine.c:539 +#: rewrite/rewriteDefine.c:532 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "SELECT 룰(rule)의 대상 목록이 너무 많은 엔트리를 가지고 있습니다" -#: rewrite/rewriteDefine.c:540 +#: rewrite/rewriteDefine.c:533 #, c-format msgid "RETURNING list has too many entries" msgstr "RETURNING 목록이 너무 많은 항목를 가지고 있습니다" -#: rewrite/rewriteDefine.c:567 +#: rewrite/rewriteDefine.c:560 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "뷰에서 삭제된 칼럼을 포함하고 있는 릴레이션을 변환할 수 없습니다" -#: rewrite/rewriteDefine.c:568 +#: rewrite/rewriteDefine.c:561 #, c-format msgid "" "cannot create a RETURNING list for a relation containing dropped columns" msgstr "" "릴레이션에 삭제된 칼럼을 포함하고 있는 RETURNING 목록을 만들 수 없습니다." -#: rewrite/rewriteDefine.c:574 +#: rewrite/rewriteDefine.c:567 #, c-format msgid "" "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "SELECT 룰(rule)의 대상 엔트리 번호가(%d)가 \"%s\" 칼럼 이름과 틀립니다" -#: rewrite/rewriteDefine.c:576 +#: rewrite/rewriteDefine.c:569 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "SELECT 대상 엔트리 이름은 \"%s\" 입니다." -#: rewrite/rewriteDefine.c:585 +#: rewrite/rewriteDefine.c:578 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "SELECT 룰(rule)의 대상 엔트리 번호(%d)가 \"%s\" 칼럼 자료형과 틀립니다" -#: rewrite/rewriteDefine.c:587 +#: rewrite/rewriteDefine.c:580 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "RETURNING 목록의 %d번째 항목의 자료형이 \"%s\" 칼럼 자료형과 틀립니다" -#: rewrite/rewriteDefine.c:590 rewrite/rewriteDefine.c:614 +#: rewrite/rewriteDefine.c:583 rewrite/rewriteDefine.c:607 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "SELECT 대상 엔트리 자료형은 %s 형이지만, 칼럼 자료형은 %s 형입니다." -#: rewrite/rewriteDefine.c:593 rewrite/rewriteDefine.c:618 +#: rewrite/rewriteDefine.c:586 rewrite/rewriteDefine.c:611 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "RETURNING 목록은 %s 자료형이지만, 칼럼 자료형은 %s 형입니다." -#: rewrite/rewriteDefine.c:609 +#: rewrite/rewriteDefine.c:602 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "SELECT 룰(rule)의 대상 엔트리 번호(%d)가 \"%s\" 칼럼 크기와 틀립니다" -#: rewrite/rewriteDefine.c:611 +#: rewrite/rewriteDefine.c:604 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "RETURNING 목록의 %d번째 항목의 크기가 \"%s\" 칼럼 크기와 틀립니다" -#: rewrite/rewriteDefine.c:628 +#: rewrite/rewriteDefine.c:621 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "SELECT 룰(rule)의 대상 목록이 너무 적은 엔트리를 가지고 있습니다" -#: rewrite/rewriteDefine.c:629 +#: rewrite/rewriteDefine.c:622 #, c-format msgid "RETURNING list has too few entries" msgstr "RETURNING 목록에 너무 적은 항목이 있습니다" -#: rewrite/rewriteDefine.c:718 rewrite/rewriteDefine.c:833 -#: rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:711 rewrite/rewriteDefine.c:826 +#: rewrite/rewriteSupport.c:108 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr " \"%s\" 룰(rule)이 \"%s\" 관계(relation)에 지정된 것이 없음" -#: rewrite/rewriteDefine.c:852 +#: rewrite/rewriteDefine.c:845 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "ON SELECT 룰의 이름 바꾸기는 허용하지 않습니다" -#: rewrite/rewriteHandler.c:583 +#: rewrite/rewriteHandler.c:588 #, c-format msgid "" "WITH query name \"%s\" appears in both a rule action and the query being " "rewritten" msgstr "\"%s\" 이름의 WITH 쿼리가 룰 동작과 쿼리 재작성 두 곳 모두에 보입니다." -#: rewrite/rewriteHandler.c:610 +#: rewrite/rewriteHandler.c:615 #, c-format msgid "" "INSERT ... SELECT rule actions are not supported for queries having data-" @@ -22829,107 +23656,117 @@ msgid "" msgstr "" "INSERT...SELECT 룰 액션에는 WITH 절 안에 자료 변경 구문을 지원하지 않습니다." -#: rewrite/rewriteHandler.c:663 +#: rewrite/rewriteHandler.c:668 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "multiple rule에 RETURNING 목록을 지정할 수 없습니다" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:939 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "\"%s\" 칼럼에 non-DEFAULT 값을 입력할 수 없습니다" -#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:902 rewrite/rewriteHandler.c:968 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "\"%s\" 칼럼은 GENERATED ALWAYS 속성의 식별자 칼럼입니다." -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:904 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "이 속성을 무시하려면, OVERRIDING SYSTEM VALUE 옵션을 사용하세요." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: 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:1116 rewrite/rewriteHandler.c:1134 +#: rewrite/rewriteHandler.c:1121 rewrite/rewriteHandler.c:1139 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "같은 \"%s\" 열에 지정값(assignment)이 중복되었습니다" -#: rewrite/rewriteHandler.c:2119 rewrite/rewriteHandler.c:4040 +#: rewrite/rewriteHandler.c:1704 +#, c-format +msgid "MERGE is not supported for relations with rules." +msgstr "MERGE 명령은 룰을 사용하는 릴레이션에서 사용할 수 없습니다." + +#: rewrite/rewriteHandler.c:1744 rewrite/rewriteHandler.c:3284 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "\"%s\"는 non-system 뷰로 접근이 제한됨" + +#: rewrite/rewriteHandler.c:2144 rewrite/rewriteHandler.c:4276 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "" "\"%s\" 릴레이션(relation)에서 지정된 룰에서 잘못된 재귀호출이 발견되었습니다" -#: rewrite/rewriteHandler.c:2204 +#: rewrite/rewriteHandler.c:2249 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "\"%s\" 릴레이션의 정책에서 무한 재귀 호출이 발견 됨" -#: rewrite/rewriteHandler.c:2524 +#: rewrite/rewriteHandler.c:2611 msgid "Junk view columns are not updatable." msgstr "정크 뷰 칼럼은 업데이트할 수 없습니다." -#: rewrite/rewriteHandler.c:2529 +#: rewrite/rewriteHandler.c:2616 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "뷰의 바탕이 되는 릴레이션의 칼럼이 아닌 뷰 칼럼은 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2532 +#: rewrite/rewriteHandler.c:2619 msgid "View columns that refer to system columns are not updatable." msgstr "시스템 칼럼이 원본인 뷰 칼럼은 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2535 +#: rewrite/rewriteHandler.c:2622 msgid "View columns that return whole-row references are not updatable." msgstr "로우 전체를 참조하는 뷰 칼럼은 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2596 +#: rewrite/rewriteHandler.c:2683 msgid "Views containing DISTINCT are not automatically updatable." msgstr "DISTINCT 조건이 있는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2599 +#: rewrite/rewriteHandler.c:2686 msgid "Views containing GROUP BY are not automatically updatable." msgstr "GROUP BY 절이 있는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2602 +#: rewrite/rewriteHandler.c:2689 msgid "Views containing HAVING are not automatically updatable." msgstr "HAVING 절이 있는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2605 +#: rewrite/rewriteHandler.c:2692 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "UNION, INTERSECT, EXCEPT를 포함하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2608 +#: rewrite/rewriteHandler.c:2695 msgid "Views containing WITH are not automatically updatable." msgstr "WITH 절을 포함하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2611 +#: rewrite/rewriteHandler.c:2698 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "" "LIMIT 또는 OFFSET 구문을 포함하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2623 +#: rewrite/rewriteHandler.c:2710 msgid "Views that return aggregate functions are not automatically updatable." msgstr "집계 함수를 반환하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2626 +#: rewrite/rewriteHandler.c:2713 msgid "Views that return window functions are not automatically updatable." msgstr "윈도우 함수를 반환하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2629 +#: rewrite/rewriteHandler.c:2716 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "집합 반환 함수를 반환하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2636 rewrite/rewriteHandler.c:2640 -#: rewrite/rewriteHandler.c:2648 +#: rewrite/rewriteHandler.c:2723 rewrite/rewriteHandler.c:2727 +#: rewrite/rewriteHandler.c:2735 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." @@ -22937,32 +23774,122 @@ msgstr "" "단일 테이블 또는 단일 뷰를 SELECT 하지 않는 뷰는 자동으로 업데이트 될 수 없습" "니다." -#: rewrite/rewriteHandler.c:2651 +#: rewrite/rewriteHandler.c:2738 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "TABLESAMPLE 구문을 포함하는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:2675 +#: rewrite/rewriteHandler.c:2762 msgid "Views that have no updatable columns are not automatically updatable." msgstr "업데이트 가능한 칼럼이 없는 뷰는 자동으로 업데이트 될 수 없습니다." -#: rewrite/rewriteHandler.c:3155 +#: rewrite/rewriteHandler.c:3143 rewrite/rewriteHandler.c:3178 +#, c-format +msgid "cannot insert into view \"%s\"" +msgstr "\"%s\" 뷰에 자료를 입력할 수 없습니다" + +#: rewrite/rewriteHandler.c:3146 +#, c-format +msgid "" +"To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " +"an unconditional ON INSERT DO INSTEAD rule." +msgstr "" +"뷰를 통해 자료를 입력하려면, INSTEAD OF INSERT 트리거나 ON INSERT DO INSTEAD " +"룰을 사용하세요" + +#: rewrite/rewriteHandler.c:3151 rewrite/rewriteHandler.c:3187 +#, c-format +msgid "cannot update view \"%s\"" +msgstr "\"%s\" 뷰로는 자료를 갱신할 수 없습니다" + +#: rewrite/rewriteHandler.c:3154 +#, c-format +msgid "" +"To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " +"unconditional ON UPDATE DO INSTEAD rule." +msgstr "" +"뷰 자료 갱신 기능은 INSTEAD OF UPDATE 트리거를 사용하거나, ON UPDATE DO " +"INSTEAD 속성으로 룰을 만들어서 사용해 보세요." + +#: rewrite/rewriteHandler.c:3159 rewrite/rewriteHandler.c:3196 +#, c-format +msgid "cannot delete from view \"%s\"" +msgstr "\"%s\" 뷰로는 자료를 삭제할 수 없습니다" + +#: rewrite/rewriteHandler.c:3162 +#, c-format +msgid "" +"To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " +"unconditional ON DELETE DO INSTEAD rule." +msgstr "" +"뷰 자료 삭제 기능은 INSTEAD OF DELETE 트리거를 사용하거나, ON DELETE DO " +"INSTEAD 속성으로 룰을 만들어서 사용해 보세요." + +#: rewrite/rewriteHandler.c:3181 +#, 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:3190 +#, c-format +msgid "" +"To enable updating the view using MERGE, provide an INSTEAD OF UPDATE " +"trigger." +msgstr "뷰를 통해 자료를 변경하려면, MERGE나 INSTEAD OF INSERT 트리거를 사용하세요" + +#: rewrite/rewriteHandler.c:3199 +#, c-format +msgid "" +"To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE " +"trigger." +msgstr "뷰를 통해 자료를 삭제하려면, MERGE나 INSTEAD OF INSERT 트리거를 사용하세요" + +#: rewrite/rewriteHandler.c:3374 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "\"%s\" 칼럼 (해당 뷰: \"%s\")에 자료를 입력할 수 없습니다" -#: rewrite/rewriteHandler.c:3163 +#: rewrite/rewriteHandler.c:3382 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "\"%s\" 칼럼 (해당 뷰: \"%s\")에 자료를 갱신할 수 없습니다" -#: rewrite/rewriteHandler.c:3667 +#: rewrite/rewriteHandler.c:3390 +#, c-format +msgid "cannot merge into column \"%s\" of view \"%s\"" +msgstr "\"%s\" 칼럼 (해당 뷰: \"%s\")에 병합할 수 없음" + +#: rewrite/rewriteHandler.c:3418 +#, c-format +msgid "cannot merge into view \"%s\"" +msgstr "\"%s\" 뷰에 병합할 수 없음" + +#: rewrite/rewriteHandler.c:3420 +#, c-format +msgid "" +"MERGE is not supported for views with INSTEAD OF triggers for some actions " +"but not all." +msgstr "" +"MERGE 명령은 몇몇 action용 INSTEAD OF 트리거가 있는 뷰를 지원하지 않음" + +#: rewrite/rewriteHandler.c:3421 +#, 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:3934 #, c-format msgid "" "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in " "WITH" msgstr "DO INSTEAD NOTIFY 룰에서는 WITH 절 안에 자료 변경 구문이 없어야 합니다" -#: rewrite/rewriteHandler.c:3678 +#: rewrite/rewriteHandler.c:3945 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -22970,19 +23897,19 @@ msgid "" msgstr "" "DO INSTEAD NOTHING 룰에서는 WITH 절 안에 자료 변경 구문이 없어야 합니다" -#: rewrite/rewriteHandler.c:3692 +#: rewrite/rewriteHandler.c:3959 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " "in WITH" msgstr "선택적 DO INSTEAD 룰에서는 WITH 절 안에 자료 변경 구문이 없어야 합니다" -#: rewrite/rewriteHandler.c:3696 +#: rewrite/rewriteHandler.c:3963 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "DO ALSO 룰에서는 WITH 절 안에 자료 변경 구문이 없어야 합니다" -#: rewrite/rewriteHandler.c:3701 +#: rewrite/rewriteHandler.c:3968 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -22991,20 +23918,18 @@ msgstr "" "여러 구문으로 구성된 DO INSTEAD 룰에서는 WITH 절 안에 자료 변경 구문이 없어" "야 합니다" -#: rewrite/rewriteHandler.c:3968 rewrite/rewriteHandler.c:3976 -#: rewrite/rewriteHandler.c:3984 -#, c-format +#: rewrite/rewriteHandler.c:4228 msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "" "선택적 DO INSTEAD 룰을 포함한 뷰는 자동 업데이트 기능을 사용할 수 없습니다." -#: rewrite/rewriteHandler.c:4089 +#: rewrite/rewriteHandler.c:4325 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 INSERT RETURNING 관련을 구성할 수 없음" -#: rewrite/rewriteHandler.c:4091 +#: rewrite/rewriteHandler.c:4327 #, c-format msgid "" "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." @@ -23012,12 +23937,12 @@ msgstr "" "RETURNING 절에서는 무조건 ON INSERT DO INSTEAD 속성으로 rule이 사용되어야 합" "니다." -#: rewrite/rewriteHandler.c:4096 +#: rewrite/rewriteHandler.c:4332 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 UPDATE RETURNING 관련을 구성할 수 없습니다." -#: rewrite/rewriteHandler.c:4098 +#: rewrite/rewriteHandler.c:4334 #, c-format msgid "" "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." @@ -23025,12 +23950,12 @@ msgstr "" "RETURNING 절에서는 무조건 ON UPDATE DO INSTEAD 속성으로 rule이 사용되어야 합" "니다." -#: rewrite/rewriteHandler.c:4103 +#: rewrite/rewriteHandler.c:4339 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 DELETE RETURNING 관련을 구성할 수 없습니다." -#: rewrite/rewriteHandler.c:4105 +#: rewrite/rewriteHandler.c:4341 #, c-format msgid "" "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." @@ -23038,7 +23963,7 @@ msgstr "" "TURNING 절에서는 무조건 ON DELETE DO INSTEAD 속성으로 rule이 사용되어야 합니" "다" -#: rewrite/rewriteHandler.c:4123 +#: rewrite/rewriteHandler.c:4359 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " @@ -23047,7 +23972,7 @@ msgstr "" "INSERT 또는 UPDATE 룰이 지정된 테이블을 대상으로 INSERT ... ON CONFLICT 구문" "은 사용할 수 없습니다." -#: rewrite/rewriteHandler.c:4180 +#: rewrite/rewriteHandler.c:4416 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -23056,19 +23981,19 @@ msgstr "" "WITH 절은 다중 쿼리 작업을 하는 룰로 재작성되는 쿼리 안에서는 사용할 수 없습" "니다." -#: rewrite/rewriteManip.c:1075 +#: rewrite/rewriteManip.c:1083 #, c-format msgid "conditional utility statements are not implemented" msgstr "" "조건 유틸리티 명령 구문(conditional utility statement)은 구현되어있지 않습니" "다" -#: rewrite/rewriteManip.c:1419 +#: rewrite/rewriteManip.c:1430 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "뷰에 대한 WHERE CURRENT OF 구문이 구현되지 않음" -#: rewrite/rewriteManip.c:1754 +#: rewrite/rewriteManip.c:1765 #, c-format msgid "" "NEW variables in ON UPDATE rules cannot reference columns that are part of a " @@ -23112,84 +24037,79 @@ msgstr "인식할 수 없는 Snowball 매개 변수: \"%s\"" msgid "missing Language parameter" msgstr "Language 매개 변수가 누락됨" -#: statistics/extended_stats.c:179 +#: statistics/extended_stats.c:176 #, c-format msgid "" "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "\"%s.%s\" 통계정보 개체를 계산 할 수 없음: 대상 릴레이션: \"%s.%s\"" -#: statistics/mcv.c:1372 +#: statistics/mcv.c:1368 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "반환 자료형이 record인데 함수가 그 자료형으로 반환하지 않음" -#: storage/buffer/bufmgr.c:612 storage/buffer/bufmgr.c:769 +#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "다른 세션의 임시 테이블에 액세스할 수 없음" -#: storage/buffer/bufmgr.c:1137 +#: storage/buffer/bufmgr.c:1532 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "" "%u 블록(해당 릴레이션: %s)에 잘못된 페이지 헤더가 있음, 페이지를 삭제하는 중" -#: storage/buffer/bufmgr.c:1931 storage/buffer/localbuf.c:359 +#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "%s 릴레이션은 %u개 블록을 초과하여 확장할 수 없음" -#: storage/buffer/bufmgr.c:1998 +#: storage/buffer/bufmgr.c:2348 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "%u 블록(해당 릴레이션: %s)에 EOF 범위를 넘는 예기치 않은 데이터가 있음" -#: storage/buffer/bufmgr.c:2000 +#: storage/buffer/bufmgr.c:2350 #, c-format msgid "" "This has been seen to occur with buggy kernels; consider updating your " "system." msgstr "이 문제는 커널의 문제로 알려졌습니다. 시스템을 업데이트하십시오." -#: storage/buffer/bufmgr.c:5219 +#: storage/buffer/bufmgr.c:5653 #, c-format msgid "could not write block %u of %s" msgstr "%u/%s 블록을 쓸 수 없음" -#: storage/buffer/bufmgr.c:5221 +#: storage/buffer/bufmgr.c:5655 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "여러 번 실패 --- 쓰기 오류가 영구적일 수 있습니다." -#: storage/buffer/bufmgr.c:5243 storage/buffer/bufmgr.c:5263 +#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 #, c-format msgid "writing block %u of relation %s" msgstr "%u 블록(해당 릴레이션: %s)을 쓰는 중" -#: storage/buffer/bufmgr.c:5593 -#, c-format -msgid "snapshot too old" -msgstr "스냅샷 너무 오래됨" - -#: storage/buffer/localbuf.c:219 +#: storage/buffer/localbuf.c:220 #, c-format msgid "no empty local buffer available" msgstr "비어 있는 로컬 버퍼가 없습니다" -#: storage/buffer/localbuf.c:592 +#: storage/buffer/localbuf.c:597 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "병렬 작업 중에 임시 테이블에 액세스할 수 없음" -#: storage/buffer/localbuf.c:699 +#: storage/buffer/localbuf.c:712 #, c-format msgid "" "\"temp_buffers\" cannot be changed after any temporary tables have been " "accessed in the session." msgstr "" "해당 세션에서 어떤 임시 테이블도 사용하고 있지 않아야 \"temp_buffers\" 설정" -"을 변경할 수 있습니다." +"을 바꿀 수 있습니다." #: storage/file/buffile.c:338 #, c-format @@ -23206,43 +24126,43 @@ msgstr "\"%s\" 파일 세트를 읽을 수 없음: %zu 바이트만 읽음 (전 msgid "could not read from temporary file: read only %zu of %zu bytes" msgstr "임시 파일을 읽을 수 없음: %zu 바이트만 읽음 (전체: %zu)" -#: storage/file/buffile.c:774 storage/file/buffile.c:895 +#: storage/file/buffile.c:774 storage/file/buffile.c:877 #, c-format msgid "" "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "\"%s\" 임시 파일의 크기를 알 수 없음, 버퍼파일: \"%s\": %m" -#: storage/file/buffile.c:974 +#: storage/file/buffile.c:956 #, c-format msgid "could not delete fileset \"%s\": %m" msgstr "\"%s\" 파일 세트를 지울 수 없음: %m" -#: storage/file/buffile.c:992 storage/smgr/md.c:338 storage/smgr/md.c:1041 +#: 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" -#: storage/file/fd.c:537 storage/file/fd.c:609 storage/file/fd.c:645 +#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 #, c-format msgid "could not flush dirty data: %m" msgstr "dirty 자료를 flush 할 수 없음: %m" -#: storage/file/fd.c:567 +#: storage/file/fd.c:613 #, c-format msgid "could not determine dirty data size: %m" msgstr "dirty 자료 크기를 확인할 수 없음: %m" -#: storage/file/fd.c:619 +#: storage/file/fd.c:665 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "자료 flush 작업 도중 munmap() 호출 실패: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:983 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit 실패: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1073 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "" @@ -23250,91 +24170,86 @@ msgstr "" "그램에서 너무 많은 파일을 열어 두고 있습니다. 다른 프로그램들을 좀 닫고 다시 " "시도해 보십시오" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1074 #, c-format msgid "System allows %d, server needs at least %d." msgstr "시스템 허용치 %d, 서버 최소 허용치 %d." -#: storage/file/fd.c:1116 storage/file/fd.c:2565 storage/file/fd.c:2674 -#: storage/file/fd.c:2825 +#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 +#: storage/file/fd.c:2878 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "" "열려 있는 파일이 너무 많습니다: %m; 다른 프로그램들을 좀 닫고 다시 시도해 보" "십시오" -#: storage/file/fd.c:1490 +#: storage/file/fd.c:1536 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "임시 파일: 경로 \"%s\", 크기 %lu" -#: storage/file/fd.c:1629 +#: storage/file/fd.c:1675 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "\"%s\" 임시 디렉터리를 만들 수 없음: %m" -#: storage/file/fd.c:1636 +#: storage/file/fd.c:1682 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "\"%s\" 임시 하위 디렉터리를 만들 수 없음: %m" -#: storage/file/fd.c:1833 +#: storage/file/fd.c:1879 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 만들 수 없습니다: %m" -#: storage/file/fd.c:1869 +#: storage/file/fd.c:1915 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 열 수 없음: %m" -#: storage/file/fd.c:1910 +#: storage/file/fd.c:1956 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 지울 수 없음: %m" -#: storage/file/fd.c:1998 +#: storage/file/fd.c:2044 #, c-format msgid "could not delete file \"%s\": %m" msgstr "\"%s\" 파일을 지울 수 없음: %m" -#: storage/file/fd.c:2185 +#: storage/file/fd.c:2234 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "임시 파일 크기가 temp_file_limit (%dkB)를 초과했습니다" -#: storage/file/fd.c:2541 storage/file/fd.c:2600 +#: storage/file/fd.c:2594 storage/file/fd.c:2653 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "maxAllocatedDescs (%d) 초과됨, \"%s\" 파일 열기 시도 중에." -#: storage/file/fd.c:2645 +#: storage/file/fd.c:2698 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "maxAllocatedDescs (%d) 초과됨, \"%s\" 명령을 시도 중에." -#: storage/file/fd.c:2801 +#: storage/file/fd.c:2854 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "maxAllocatedDescs (%d) 초과됨, \"%s\" 디렉터리 열기 시도 중에." -#: storage/file/fd.c:3331 +#: storage/file/fd.c:3384 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "임시 디렉터리에서 예상치 못한 파일 발견: \"%s\"" -#: storage/file/fd.c:3449 +#: storage/file/fd.c:3502 #, c-format msgid "" "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" msgstr "데이터 디렉터리 동기화(syncfs), 소요 시간: %ld.%02d s, 현재 경로: %s" -#: storage/file/fd.c:3463 -#, c-format -msgid "could not synchronize file system for file \"%s\": %m" -msgstr "\"%s\" 파일 대상으로 파일 시스템 동기화를 할 수 없습니다: %m" - -#: storage/file/fd.c:3676 +#: storage/file/fd.c:3729 #, c-format msgid "" "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: " @@ -23342,29 +24257,40 @@ msgid "" msgstr "" "데이터 디렉터리 동기화(pre-fsync), 소요 시간: %ld.%02d s, 현재 경로: %s" -#: storage/file/fd.c:3708 +#: storage/file/fd.c:3761 #, c-format msgid "" "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "데이터 디렉터리 동기화(fsync), 소요 시간: %ld.%02d s, 현재 경로: %s" -#: storage/file/fd.c:3897 +#: storage/file/fd.c:3950 +#, c-format +msgid "\"debug_io_direct\" is not supported on this platform." +msgstr "\"debug_io_direct\" 설정은 이 플랫폼에서 지원되지 않음" + +#: storage/file/fd.c:3964 +#, c-format +msgid "Invalid list syntax in parameter \"%s\"" +msgstr "\"%s\" 매개 변수의 값으로 목록 문법이 잘못됨" + +#: storage/file/fd.c:3984 #, c-format -msgid "debug_io_direct is not supported on this platform." -msgstr "debug_io_direct 설정은 이 플랫폼에서 지원되지 않음" +msgid "Invalid option \"%s\"" +msgstr "\"%s\" 옵션이 잘못됨" -#: storage/file/fd.c:3944 +#: storage/file/fd.c:3997 #, c-format msgid "" -"debug_io_direct is not supported for WAL because XLOG_BLCKSZ is too small" +"\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" msgstr "" -"XLOG_BLCKSZ 값이 너무 작은 WAL을 사용하고 있어 debug_io_direct 기능을 지원하" +"XLOG_BLCKSZ 값이 너무 작은 WAL을 사용하고 있어 \"debug_io_direct\" 기능을 지원하" "지 않습니다." -#: storage/file/fd.c:3951 +#: storage/file/fd.c:4004 #, c-format -msgid "debug_io_direct is not supported for data because BLCKSZ is too small" -msgstr "BLCKSZ 값이 너무 작아 debug_io_direct 기능을 지원하지 않습니다." +msgid "" +"\"debug_io_direct\" is not supported for data because BLCKSZ is too small" +msgstr "BLCKSZ 값이 너무 작아 \"debug_io_direct\" 기능을 지원하지 않습니다." #: storage/file/reinit.c:145 #, c-format @@ -23382,22 +24308,22 @@ msgid "" msgstr "" "로그 안남기는 릴레이션 재설정 (cleanup), 소요 시간: %ld.%02d s, 현재 경로: %s" -#: storage/file/sharedfileset.c:79 +#: storage/file/sharedfileset.c:73 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "SharedFileSet 확보 실패, 이미 삭제되었음" -#: storage/ipc/dsm.c:352 +#: storage/ipc/dsm.c:379 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "동적 공유 메모리 제어 조각이 손상되었음" -#: storage/ipc/dsm.c:417 +#: storage/ipc/dsm.c:444 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "동적 공유 메모리 제어 조각이 타당하지 않음" -#: storage/ipc/dsm.c:599 +#: storage/ipc/dsm.c:626 #, c-format msgid "too many dynamic shared memory segments" msgstr "너무 많은 동적 공유 메모리 조각이 있음" @@ -23457,18 +24383,44 @@ msgstr "\"%s\" 공유 메모리 조각을 닫을 수 없음: %m" msgid "could not duplicate handle for \"%s\": %m" msgstr "\"%s\" 용 헨들러를 이중화 할 수 없음: %m" -#: storage/ipc/procarray.c:3796 +#: storage/ipc/dsm_registry.c:142 +#, c-format +msgid "DSM segment name cannot be empty" +msgstr "DSM 조각 이름은 비워둘 수 없음" + +#: storage/ipc/dsm_registry.c:146 +#, c-format +msgid "DSM segment name too long" +msgstr "DSM 조각 이름이 너무 긺" + +#: storage/ipc/dsm_registry.c:150 +#, c-format +msgid "DSM segment size must be nonzero" +msgstr "DSM 조각 크기는 0이 아니여야 함" + +#: storage/ipc/dsm_registry.c:176 +#, c-format +msgid "requested DSM segment size does not match size of existing segment" +msgstr "요청된 DSM 조각 크기는 기존 조각 크기와 맞지 않음" + +#: 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:3857 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "\"%s\" 데이터베이스가 미리 준비된 트랜잭션에서 사용중임" -#: storage/ipc/procarray.c:3828 storage/ipc/procarray.c:3837 -#: storage/ipc/signalfuncs.c:230 storage/ipc/signalfuncs.c:237 +#: 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:3829 storage/ipc/signalfuncs.c:231 +#: 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 " @@ -23476,50 +24428,50 @@ msgid "" msgstr "" "%s 속성이 있는 롤만이 %s 속성을 가진 롤이 실행한 쿼리를 중지 할 수 있습니다." -#: storage/ipc/procarray.c:3838 storage/ipc/signalfuncs.c:238 +#: 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 "\"%s\" 롤 권한이 있는 롤만 프로세스를 종료할 수 있습니다." -#: storage/ipc/procsignal.c:420 +#: storage/ipc/procsignal.c:416 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "" "%d PID 백엔드 프로세스가 ProcSignalBarrier 작업을 수락하기를 기다리고 있음" -#: storage/ipc/shm_mq.c:384 +#: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" msgstr "공유 메모리 큐를 통해 %zu 크기의 메시지를 보낼 수 없음" -#: storage/ipc/shm_mq.c:719 +#: storage/ipc/shm_mq.c:718 #, c-format msgid "invalid message size %zu in shared memory queue" msgstr "동적 공유 메모리 큐에 메시지 길이(%zu)가 잘못됨" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:963 -#: storage/lmgr/lock.c:1001 storage/lmgr/lock.c:2786 storage/lmgr/lock.c:4171 -#: storage/lmgr/lock.c:4236 storage/lmgr/lock.c:4586 -#: storage/lmgr/predicate.c:2412 storage/lmgr/predicate.c:2427 -#: storage/lmgr/predicate.c:3824 storage/lmgr/predicate.c:4871 -#: utils/hash/dynahash.c:1107 +#: 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 "공유 메모리 부족" -#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 +#: storage/ipc/shmem.c:161 storage/ipc/shmem.c:257 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "공유 메모리가 부족함 (%zu 바이트가 필요함)" -#: storage/ipc/shmem.c:445 +#: storage/ipc/shmem.c:436 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "\"%s\" 자료 구조체용 ShmemIndex 항목을 만들 수 없음" -#: storage/ipc/shmem.c:460 +#: storage/ipc/shmem.c:451 #, c-format msgid "" "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, " @@ -23527,13 +24479,13 @@ msgid "" msgstr "" "\"%s\" 자료 구조체용 ShmemIndex 항목 크기가 잘못됨: 기대값 %zu, 현재값 %zu" -#: storage/ipc/shmem.c:479 +#: storage/ipc/shmem.c:470 #, c-format msgid "" "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "\"%s\" 자료 구조체용 공유 메모리가 부족함 (%zu 바이트가 필요함)" -#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 +#: storage/ipc/shmem.c:502 storage/ipc/shmem.c:521 #, c-format msgid "requested shared memory size overflows size_t" msgstr "지정한 공유 메모리 사이즈가 size_t 크기를 초과했습니다" @@ -23543,18 +24495,18 @@ msgstr "지정한 공유 메모리 사이즈가 size_t 크기를 초과했습니 msgid "PID %d is not a PostgreSQL backend process" msgstr "PID %d 프로그램은 PostgreSQL 백엔드 프로세스가 아닙니다" -#: storage/ipc/signalfuncs.c:104 storage/lmgr/proc.c:1379 -#: utils/adt/mcxtfuncs.c:190 +#: 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 프로세스로 시스템신호(signal)를 보낼 수 없습니다: %m" -#: storage/ipc/signalfuncs.c:124 storage/ipc/signalfuncs.c:131 +#: storage/ipc/signalfuncs.c:129 storage/ipc/signalfuncs.c:136 #, c-format msgid "permission denied to cancel query" msgstr "쿼리 중지 권한 없음" -#: storage/ipc/signalfuncs.c:125 +#: storage/ipc/signalfuncs.c:130 #, c-format msgid "" "Only roles with the %s attribute may cancel queries of roles with the %s " @@ -23562,115 +24514,111 @@ msgid "" msgstr "" "%s 속성이 있는 롤만이 %s 속성이 있는 롤이 실행한 쿼리를 중지 할 수 있습니다." -#: storage/ipc/signalfuncs.c:132 +#: storage/ipc/signalfuncs.c:137 #, c-format msgid "" "Only roles with privileges of the role whose query is being canceled or with " "privileges of the \"%s\" role may cancel this query." msgstr "쿼리 실행 중지 작업은 \"%s\" 롤 권한이 부여된 롤만 할 수 있습니다." -#: storage/ipc/signalfuncs.c:174 +#: storage/ipc/signalfuncs.c:179 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "%d PID 백엔드 프로세스의 존재를 확인할 수 없음: %m" -#: storage/ipc/signalfuncs.c:192 +#: storage/ipc/signalfuncs.c:197 #, c-format msgid "backend with PID %d did not terminate within %lld millisecond" msgid_plural "backend with PID %d did not terminate within %lld milliseconds" msgstr[0] "%d PID 백엔드 프로세스를 %lld ms 내에 종료하지 못했음" -#: storage/ipc/signalfuncs.c:223 +#: storage/ipc/signalfuncs.c:228 #, c-format msgid "\"timeout\" must not be negative" msgstr "\"timeout\" 값은 음수가 아니어야 함" -#: storage/ipc/signalfuncs.c:279 -#, c-format -msgid "must be superuser to rotate log files with adminpack 1.0" -msgstr "adminpack 1.0 확장 모듈로 로그 전환하려면 슈퍼유저여야 합니다." - -#. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:281 utils/adt/genfile.c:250 -#, c-format -msgid "Consider using %s, which is part of core, instead." -msgstr "대신에 %s 내장 함수를 사용할 것을 권고합니다." - -#: storage/ipc/signalfuncs.c:287 storage/ipc/signalfuncs.c:307 +#: storage/ipc/signalfuncs.c:285 #, c-format msgid "rotation not possible because log collection not active" msgstr "로그 수집이 활성 상태가 아니므로 회전할 수 없음" -#: storage/ipc/standby.c:330 +#: storage/ipc/standby.c:329 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "%ld.%03d ms 기다린 뒤에도 여전히 복구 중: %s" -#: storage/ipc/standby.c:339 +#: storage/ipc/standby.c:338 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "%ld.%03d ms 기다려서 복구 완료: %s" -#: storage/ipc/standby.c:921 tcop/postgres.c:3384 +#: storage/ipc/standby.c:920 tcop/postgres.c:3196 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "복구 작업 중 충돌이 발생해 작업을 중지합니다." -#: storage/ipc/standby.c:922 tcop/postgres.c:2533 +#: storage/ipc/standby.c:921 tcop/postgres.c:2557 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "복구 작업 중 사용자 트랜잭션이 버퍼 데드락을 만들었습니다." -#: storage/ipc/standby.c:1488 +#: storage/ipc/standby.c:1486 msgid "unknown reason" msgstr "알 수 없는 이유" -#: storage/ipc/standby.c:1493 +#: storage/ipc/standby.c:1491 msgid "recovery conflict on buffer pin" msgstr "버퍼 핀에서 복구 충돌" -#: storage/ipc/standby.c:1496 +#: storage/ipc/standby.c:1494 msgid "recovery conflict on lock" msgstr "잠금에서 복구 충돌" -#: storage/ipc/standby.c:1499 +#: storage/ipc/standby.c:1497 msgid "recovery conflict on tablespace" msgstr "테이블스페이스에서 복구 충돌" -#: storage/ipc/standby.c:1502 +#: storage/ipc/standby.c:1500 msgid "recovery conflict on snapshot" msgstr "스냅샷에서 복구 충돌" -#: storage/ipc/standby.c:1505 +#: storage/ipc/standby.c:1503 msgid "recovery conflict on replication slot" msgstr "복제 슬롯에서 복구 충돌" -#: storage/ipc/standby.c:1508 +#: storage/ipc/standby.c:1506 msgid "recovery conflict on buffer deadlock" msgstr "버퍼 데드락에서 복구 충돌" -#: storage/ipc/standby.c:1511 +#: storage/ipc/standby.c:1509 msgid "recovery conflict on database" msgstr "데이터베이스에서 복구 충돌" -#: storage/large_object/inv_api.c:191 +#: storage/large_object/inv_api.c:190 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "" "OID %u (해당 페이지 %d) 를 위한 pg_largeobject 항목의 %d 크기의 데이터 필드" "가 잘못되었음" -#: storage/large_object/inv_api.c:274 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "대형 개체를 열기 위한 플래그가 잘못 됨: %d" -#: storage/large_object/inv_api.c:457 +#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 +#: storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 +#: storage/large_object/inv_api.c:807 +#, c-format +msgid "permission denied for large object %u" +msgstr "%u 대형 개체에 대한 접근 권한 없음" + +#: storage/large_object/inv_api.c:455 #, c-format msgid "invalid whence setting: %d" msgstr "잘못된 이동 위치: %d" -#: storage/large_object/inv_api.c:629 +#: storage/large_object/inv_api.c:627 #, c-format msgid "invalid large object write request size: %d" msgstr "유효하지 않은 대형 개체의 쓰기 요청된 크기: %d" @@ -23697,119 +24645,119 @@ msgstr "deadlock 발생했음" msgid "See server log for query details." msgstr "쿼리 상세 정보는 서버 로그를 참조하십시오." -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플(해당 릴레이션 \"%s\")을 갱신하는 중에 발생" -#: storage/lmgr/lmgr.c:862 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플(해당 릴레이션 \"%s\")을 삭제하는 중에 발생" -#: storage/lmgr/lmgr.c:865 +#: storage/lmgr/lmgr.c:854 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플을 \"%s\" 릴레이션에서 잠그는 중에 발생" -#: storage/lmgr/lmgr.c:868 +#: 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:871 +#: storage/lmgr/lmgr.c:860 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플 인덱스(해당 릴레이션 \"%s\")를 삽입하는 중에 발생" -#: storage/lmgr/lmgr.c:874 +#: storage/lmgr/lmgr.c:863 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플(해당 릴레이션: \"%s\")의 고유성을 검사하는 중에 발생" -#: storage/lmgr/lmgr.c:877 +#: storage/lmgr/lmgr.c:866 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 갱신된 튜플(해당 릴레이션: \"%s\")을 재확인하는 중에 발생" -#: storage/lmgr/lmgr.c:880 +#: storage/lmgr/lmgr.c:869 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" "%u,%u 튜플(해당 릴레이션: \"%s\")의 제외 제약 조건을 검사하는 중에 발생" -#: storage/lmgr/lmgr.c:1174 +#: storage/lmgr/lmgr.c:1239 #, c-format msgid "relation %u of database %u" msgstr "릴레이션 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1180 +#: storage/lmgr/lmgr.c:1245 #, c-format msgid "extension of relation %u of database %u" msgstr "%u 관계(%u 데이터베이스) 확장" -#: storage/lmgr/lmgr.c:1186 +#: storage/lmgr/lmgr.c:1251 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "데이터베이스 %u의 pg_database.datfrozenxid" -#: storage/lmgr/lmgr.c:1191 +#: storage/lmgr/lmgr.c:1256 #, c-format msgid "page %u of relation %u of database %u" msgstr "페이지 %u, 릴레이션 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1198 +#: storage/lmgr/lmgr.c:1263 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "튜플 (%u,%u), 릴레이션 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1206 +#: storage/lmgr/lmgr.c:1271 #, c-format msgid "transaction %u" msgstr "트랜잭션 %u" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1276 #, c-format msgid "virtual transaction %d/%u" msgstr "가상 트랜잭션 %d/%u" -#: storage/lmgr/lmgr.c:1217 +#: storage/lmgr/lmgr.c:1282 #, c-format msgid "speculative token %u of transaction %u" msgstr "%u 위험한 토큰, 대상 트랜잭션 %u" -#: storage/lmgr/lmgr.c:1223 +#: storage/lmgr/lmgr.c:1288 #, c-format msgid "object %u of class %u of database %u" msgstr "개체 %u, 클래스 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1231 +#: storage/lmgr/lmgr.c:1296 #, c-format msgid "user lock [%u,%u,%u]" msgstr "user lock [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1238 +#: storage/lmgr/lmgr.c:1303 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "advisory lock [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1246 +#: 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:1253 +#: storage/lmgr/lmgr.c:1318 #, c-format msgid "unrecognized locktag type %d" msgstr "알 수 없는 locktag 형태 %d" -#: storage/lmgr/lock.c:791 +#: storage/lmgr/lock.c:812 #, c-format msgid "" "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "복구 작업 중 데이터베이스 객체 대상 %s 잠금 상태 취득 실패" -#: storage/lmgr/lock.c:793 +#: storage/lmgr/lock.c:814 #, c-format msgid "" "Only RowExclusiveLock or less can be acquired on database objects during " @@ -23818,7 +24766,7 @@ msgstr "" "복구 중에는 해당 객체를 RowExclusiveLock 또는 그 보다 낮은 수준의 잠금만 할 " "수 있습니다." -#: storage/lmgr/lock.c:3235 storage/lmgr/lock.c:3303 storage/lmgr/lock.c:3419 +#: 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 " @@ -23827,19 +24775,19 @@ msgstr "" "세션 수준과 트랜잭션 수준, 이 두 수준의 잠금을 같은 객체 대상으로 할 경우 " "PREPARE 작업은 할 수 없습니다." -#: storage/lmgr/predicate.c:649 +#: storage/lmgr/predicate.c:653 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "읽기/쓰기 충돌을 기록하기 위한 RWConflictPool 안에 충분한 요소가 없음" -#: storage/lmgr/predicate.c:650 storage/lmgr/predicate.c:675 +#: storage/lmgr/predicate.c:654 storage/lmgr/predicate.c:679 #, c-format msgid "" "You might need to run fewer transactions at a time or increase " -"max_connections." -msgstr "동시 발생하는 트랜잭션 수를 줄이든가, max_connections 값을 늘리세요." +"\"max_connections\"." +msgstr "동시 발생하는 트랜잭션 수를 줄이든가, \"max_connections\" 값을 늘리세요." -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/predicate.c:678 #, c-format msgid "" "not enough elements in RWConflictPool to record a potential read/write " @@ -23848,13 +24796,13 @@ msgstr "" "필수적인 읽기/쓰기 충돌을 기록하기 위한 RWConflictPool 안에 충분한 요소가 없" "음" -#: storage/lmgr/predicate.c:1630 +#: storage/lmgr/predicate.c:1686 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "" "\"default_transaction_isolation\" 설정값이 \"serializable\"로 지정되었습니다." -#: storage/lmgr/predicate.c:1631 +#: storage/lmgr/predicate.c:1687 #, c-format msgid "" "You can use \"SET default_transaction_isolation = 'repeatable read'\" to " @@ -23863,50 +24811,50 @@ msgstr "" "이 기본값은 \"SET default_transaction_isolation = 'repeatable read'\" 명령으" "로 바꿀 수 있습니다." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1738 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "" "스냅샷 가져오기 트랜잭션은 READ ONLY DEFERRABLE 속성이 아니여야 합니다." -#: storage/lmgr/predicate.c:1761 utils/time/snapmgr.c:570 -#: utils/time/snapmgr.c:576 +#: 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:1762 utils/time/snapmgr.c:577 +#: storage/lmgr/predicate.c:1818 utils/time/snapmgr.c:542 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "%d PID 소스 프로세스는 더이상 실행 중이지 않습니다." -#: storage/lmgr/predicate.c:3935 storage/lmgr/predicate.c:3971 -#: storage/lmgr/predicate.c:4004 storage/lmgr/predicate.c:4012 -#: storage/lmgr/predicate.c:4051 storage/lmgr/predicate.c:4281 -#: storage/lmgr/predicate.c:4600 storage/lmgr/predicate.c:4612 -#: storage/lmgr/predicate.c:4659 storage/lmgr/predicate.c:4695 +#: 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 "트랜잭션간 읽기/쓰기 의존성 때문에 serialize 접근을 할 수 없음" -#: storage/lmgr/predicate.c:3937 storage/lmgr/predicate.c:3973 -#: storage/lmgr/predicate.c:4006 storage/lmgr/predicate.c:4014 -#: storage/lmgr/predicate.c:4053 storage/lmgr/predicate.c:4283 -#: storage/lmgr/predicate.c:4602 storage/lmgr/predicate.c:4614 -#: storage/lmgr/predicate.c:4661 storage/lmgr/predicate.c:4697 +#: 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:349 +#: storage/lmgr/proc.c:353 #, c-format msgid "" -"number of requested standby connections exceeds max_wal_senders (currently " -"%d)" -msgstr "대기 서버 연결 수가 max_wal_senders 설정값(현재 %d)을 초과했습니다" +"number of requested standby connections exceeds \"max_wal_senders\" " +"(currently %d)" +msgstr "대기 서버 연결 수가 \"max_wal_senders\" 설정값(현재 %d)을 초과했습니다" -#: storage/lmgr/proc.c:1472 +#: storage/lmgr/proc.c:1546 #, c-format msgid "" "process %d avoided deadlock for %s on %s by rearranging queue order after " @@ -23915,23 +24863,23 @@ msgstr "" "%d PID 프로세스는 %s(%s)에 대해 교착 상태가 발생하지 않도록 %ld.%03dms 후에 " "대기열 순서를 다시 조정함" -#: storage/lmgr/proc.c:1487 +#: storage/lmgr/proc.c:1561 #, c-format msgid "" "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "%d PID 프로세스에서 %s(%s) 대기중 %ld.%03dms 후에 교착 상태를 감지함" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1570 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "%d PID 프로세스에서 여전히 %s(%s) 작업을 기다리고 있음(%ld.%03dms 후)" -#: storage/lmgr/proc.c:1503 +#: storage/lmgr/proc.c:1577 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "%d PID 프로세스가 %s(%s) 작업을 위해 잠금 취득함(%ld.%03dms 후)" -#: storage/lmgr/proc.c:1520 +#: storage/lmgr/proc.c:1594 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "프로세스 %d에서 %s(%s)을(를) 취득하지 못함(%ld.%03dms 후)" @@ -23964,69 +24912,213 @@ msgstr "손상된 아이템 길이: 전체 %u, 사용가능한 공간 %u" msgid "corrupted line pointer: offset = %u, size = %u" msgstr "손상된 줄 위치: 오프셋 = %u, 크기 = %u" -#: storage/smgr/md.c:487 storage/smgr/md.c:549 +#: storage/smgr/md.c:485 storage/smgr/md.c:547 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "\"%s\" 파일을 %u개 블록을 초과하여 확장할 수 없음" -#: storage/smgr/md.c:502 storage/smgr/md.c:613 +#: storage/smgr/md.c:500 storage/smgr/md.c:611 #, c-format msgid "could not extend file \"%s\": %m" msgstr "\"%s\" 파일을 확장할 수 없음: %m" -#: storage/smgr/md.c:508 +#: storage/smgr/md.c:506 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "\"%s\" 파일을 확장할 수 없음: %d/%d바이트만 %u 블록에 썼음" -#: storage/smgr/md.c:591 +#: storage/smgr/md.c:589 #, c-format msgid "could not extend file \"%s\" with FileFallocate(): %m" msgstr "FileFallocate() 함수로 \"%s\" 파일을 확장할 수 없음: %m" -#: storage/smgr/md.c:782 -#, c-format -msgid "could not read block %u in file \"%s\": %m" -msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %m" - -#: storage/smgr/md.c:798 +#: storage/smgr/md.c:869 #, c-format -msgid "could not read block %u in file \"%s\": read only %d of %d bytes" -msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %d / %d 바이트만 읽음" +msgid "could not read blocks %u..%u in file \"%s\": %m" +msgstr "%u..%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %m" -#: storage/smgr/md.c:856 +#: storage/smgr/md.c:895 #, c-format -msgid "could not write block %u in file \"%s\": %m" -msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %m" +msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" +msgstr "%u..%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %zu / %zu 바이트만 읽음" -#: storage/smgr/md.c:861 +#: storage/smgr/md.c:995 #, c-format -msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" -msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %d / %d 바이트만 씀" +msgid "could not write blocks %u..%u in file \"%s\": %m" +msgstr "%u..%u 블럭을 \"%s\" 파일에 쓸 수 없음: %m" -#: storage/smgr/md.c:1012 +#: storage/smgr/md.c:1165 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "\"%s\" 파일을 %u 블럭으로 비울 수 없음: 현재 %u 블럭 뿐 임" -#: storage/smgr/md.c:1067 +#: storage/smgr/md.c:1220 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "\"%s\" 파일을 %u 블럭으로 정리할 수 없음: %m" -#: storage/smgr/md.c:1494 +#: storage/smgr/md.c:1700 #, c-format msgid "" "could not open file \"%s\" (target block %u): previous segment is only %u " "blocks" msgstr "\"%s\" 파일을 열기 실패(대상 블록: %u): 이전 조각은 %u 블럭 뿐임" -#: storage/smgr/md.c:1508 +#: storage/smgr/md.c:1714 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "\"%s\" 파일을 열기 실패(대상 블록: %u): %m" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2132 +#: tcop/backend_startup.c:85 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "하위 프로세스에서 SSL 환경 설정을 못했음" + +#: tcop/backend_startup.c:208 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "접속 수락: host=%s port=%s" + +#: tcop/backend_startup.c:213 +#, c-format +msgid "connection received: host=%s" +msgstr "접속 수락: host=%s" + +#: tcop/backend_startup.c:277 +#, c-format +msgid "the database system is starting up" +msgstr "데이터베이스 시스템이 새로 가동 중입니다." + +#: tcop/backend_startup.c:283 +#, c-format +msgid "the database system is not yet accepting connections" +msgstr "해당 데이터베이스 시스템은 아직 접속을 허용하지 않습니다." + +#: tcop/backend_startup.c:284 +#, c-format +msgid "Consistent recovery state has not been yet reached." +msgstr "일관성 복구 작업을 아직 끝내지 못했습니다." + +#: tcop/backend_startup.c:288 +#, c-format +msgid "the database system is not accepting connections" +msgstr "해당 데이터베이스 시스템은 접속을 허용하지 않습니다." + +#: tcop/backend_startup.c:289 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "Hot standby 모드가 비활성화 되었습니다." + +#: tcop/backend_startup.c:294 +#, c-format +msgid "the database system is shutting down" +msgstr "데이터베이스 시스템이 중지 중입니다" + +#: tcop/backend_startup.c:299 +#, c-format +msgid "the database system is in recovery mode" +msgstr "데이터베이스 시스템이 자동 복구 작업 중입니다." + +#: tcop/backend_startup.c:414 +#, c-format +msgid "" +"received direct SSL connection request without ALPN protocol negotiation " +"extension" +msgstr "" +"수신된 직접 SSL 연결은 ALPN 프로토콜 채결 확장 없이 요청되었음" + +#: tcop/backend_startup.c:420 +#, c-format +msgid "direct SSL connection accepted" +msgstr "직접 SSL 연결 수락됨" + +#: tcop/backend_startup.c:430 +#, c-format +msgid "direct SSL connection rejected" +msgstr "직접 SSL 연결 거절됨" + +#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 +#, c-format +msgid "incomplete startup packet" +msgstr "아직 완료되지 않은 시작 패킷" + +#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 +#, c-format +msgid "invalid length of startup packet" +msgstr "시작 패킷의 길이가 잘못 되었습니다" + +#: tcop/backend_startup.c:573 +#, c-format +msgid "SSLRequest accepted" +msgstr "SSLRequest 수락됨" + +#: tcop/backend_startup.c:576 +#, c-format +msgid "SSLRequest rejected" +msgstr "SSLRequest 거절됨" + +#: tcop/backend_startup.c:585 +#, c-format +msgid "failed to send SSL negotiation response: %m" +msgstr "SSL 연결 작업에 오류가 발생했습니다: %m" + +#: tcop/backend_startup.c:603 +#, c-format +msgid "received unencrypted data after SSL request" +msgstr "SSL 요청 뒤에 암호화 되지 않은 데이터를 받았음" + +#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 +#, c-format +msgid "" +"This could be either a client-software bug or evidence of an attempted man-" +"in-the-middle attack." +msgstr "" +"이 현상은 클라이언트 소프트웨어 버그이거나, 중간자 공격으로 발생했을 것입니" +"다." + +#: tcop/backend_startup.c:627 +#, c-format +msgid "GSSENCRequest accepted" +msgstr "GSSENCRequest 수락됨" + +#: tcop/backend_startup.c:630 +#, c-format +msgid "GSSENCRequest rejected" +msgstr "GSSENCRequest 거절됨" + +#: tcop/backend_startup.c:639 +#, c-format +msgid "failed to send GSSAPI negotiation response: %m" +msgstr "GSSAPI 협상 응답을 보내지 못했습니다: %m" + +#: tcop/backend_startup.c:657 +#, c-format +msgid "received unencrypted data after GSSAPI encryption request" +msgstr "GSSAPI 암호화 요청 뒤에 암호화 되지 않은 데이터를 받았습니다." + +#: tcop/backend_startup.c:681 +#, c-format +msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" +msgstr "" +"지원하지 않는 frontend 프로토콜 %u.%u: 서버에서 지원하는 프로토콜 %u.0 .. %u." +"%u" + +#: tcop/backend_startup.c:744 +#, c-format +msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." +msgstr "사용할 수 있는 값: \"false\", 0, \"true\", 1, \"database\"." + +#: tcop/backend_startup.c:785 +#, c-format +msgid "invalid startup packet layout: expected terminator as last byte" +msgstr "잘못된 시작 패킷 레이아웃: 마지막 바이트로 종결문자가 발견되었음" + +#: tcop/backend_startup.c:802 +#, c-format +msgid "no PostgreSQL user name specified in startup packet" +msgstr "시작 패킷에서 지정한 사용자는 PostgreSQL 사용자 이름이 아닙니다" + +#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "OID %u 함수 없음" @@ -24041,8 +25133,8 @@ msgstr "fastpath 인터페이스를 이용한 \"%s\" 함수 호출 실패" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "fastpath 함수 호출: \"%s\" (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 -#: tcop/postgres.c:2059 tcop/postgres.c:2309 +#: 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 ms" @@ -24072,42 +25164,42 @@ msgstr "함수 호출 메시지 안에 있는 잘못된 %d 인자 크기" msgid "incorrect binary data format in function argument %d" msgstr "함수 인자 %d 안에 잘못된 바이너리 자료 형식 발견됨" -#: tcop/postgres.c:463 tcop/postgres.c:4882 +#: tcop/postgres.c:467 tcop/postgres.c:5012 #, c-format msgid "invalid frontend message type %d" msgstr "잘못된 frontend 메시지 형태 %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 ms 명령 구문: %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 ms %s 구문분석: %s" -#: tcop/postgres.c:1672 tcop/postgres.c:2629 +#: tcop/postgres.c:1677 tcop/postgres.c:2653 #, c-format msgid "unnamed prepared statement does not exist" msgstr "이름없는 준비된 명령 구문(unnamed prepared statement) 없음" -#: tcop/postgres.c:1713 +#: tcop/postgres.c:1729 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "바인드 메시지는 %d 매개 변수 형태지만, %d 매개 변수여야함" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1735 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -24116,115 +25208,115 @@ msgstr "" "바인드 메시지는 %d개의 매개 변수를 지원하지만, \"%s\" 준비된 명령 구문" "(prepared statement)에서는%d 개의 매개 변수가 필요합니다" -#: tcop/postgres.c:1937 +#: tcop/postgres.c:1949 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "바인드 매개 변수 %d 안에 잘못된 바이너리 자료 형태가 있음" -#: tcop/postgres.c:2064 +#: tcop/postgres.c:2076 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "실행시간: %s ms %s%s%s 접속: %s" -#: tcop/postgres.c:2118 tcop/postgres.c:2712 +#: tcop/postgres.c:2131 tcop/postgres.c:2735 #, c-format msgid "portal \"%s\" does not exist" msgstr "\"%s\" portal 없음" -#: tcop/postgres.c:2189 +#: tcop/postgres.c:2213 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2191 tcop/postgres.c:2317 +#: tcop/postgres.c:2215 tcop/postgres.c:2341 msgid "execute fetch from" msgstr "자료뽑기" -#: tcop/postgres.c:2192 tcop/postgres.c:2318 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute" msgstr "쿼리실행" -#: tcop/postgres.c:2314 +#: tcop/postgres.c:2338 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "수행시간: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2462 +#: tcop/postgres.c:2486 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2487 +#: tcop/postgres.c:2511 #, c-format -msgid "parameters: %s" +msgid "Parameters: %s" msgstr "매개 변수: %s" -#: tcop/postgres.c:2502 +#: tcop/postgres.c:2526 #, c-format -msgid "abort reason: recovery conflict" +msgid "Abort reason: recovery conflict" msgstr "중지 이유: 복구 충돌" -#: tcop/postgres.c:2518 +#: tcop/postgres.c:2542 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "사용자가 너무 오랫동안 공유 버퍼 핀을 붙잡고 있습니다." -#: tcop/postgres.c:2521 +#: tcop/postgres.c:2545 #, c-format msgid "User was holding a relation lock for too long." msgstr "사용자가 너무 오랫동안 릴레이션 잠금을 하고 있습니다." -#: tcop/postgres.c:2524 +#: tcop/postgres.c:2548 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "삭제할 테이블스페이스를 사용자가 사용했거나, 사용하고 있습니다." -#: tcop/postgres.c:2527 +#: tcop/postgres.c:2551 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "사용자 쿼리가 삭제해야할 로우 버전를 볼 필요가 있는 것 같습니다." -#: tcop/postgres.c:2530 +#: tcop/postgres.c:2554 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "사용자가 잘못된 논리 복제 슬롯을 사용했습니다." -#: tcop/postgres.c:2536 +#: tcop/postgres.c:2560 #, c-format msgid "User was connected to a database that must be dropped." msgstr "삭제 되어져야할 데이터베이스에 사용자가 접속해 있습니다." -#: tcop/postgres.c:2575 +#: tcop/postgres.c:2599 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "\"%s\" 포탈 $%d 매개 변수 = %s" -#: tcop/postgres.c:2578 +#: tcop/postgres.c:2602 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "\"%s\" 포탈 $%d 매개 변수" -#: tcop/postgres.c:2584 +#: tcop/postgres.c:2608 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "이름없는 포탈 $%d 매개 변수 = %s" -#: tcop/postgres.c:2587 +#: tcop/postgres.c:2611 #, c-format msgid "unnamed portal parameter $%d" msgstr "이름없는 포탈 $%d 매개 변수" -#: tcop/postgres.c:2932 +#: tcop/postgres.c:2955 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "예상치 못한 SIGQUIT 신호로 연결을 끝냅니다" -#: tcop/postgres.c:2938 +#: tcop/postgres.c:2961 #, c-format msgid "terminating connection because of crash of another server process" msgstr "다른 서버 프로세스가 손상을 입어 현재 연결을 중지합니다" -#: tcop/postgres.c:2939 +#: tcop/postgres.c:2962 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -24235,24 +25327,24 @@ msgstr "" "와의 연결을 끊으라는 명령을 보냈습니다. 왜냐하면, 다른 서버 프로세스가 비정상" "적으로 중지되어 공유 메모리가 손상되었을 가능성이 있기 때문입니다" -#: tcop/postgres.c:2943 tcop/postgres.c:3310 +#: 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:2950 +#: tcop/postgres.c:2973 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "immediate 종료 명령으로 연결을 끝냅니다" -#: tcop/postgres.c:3036 +#: tcop/postgres.c:3051 #, c-format msgid "floating-point exception" msgstr "부동소수점 예외발생" -#: tcop/postgres.c:3037 +#: tcop/postgres.c:3052 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -24261,72 +25353,77 @@ msgstr "" "잘못된 부동소수점 작업이 감지 되었습니다. 이것은 아마도 결과값 범위초과나 0으" "로 나누는 작업과 같은 잘못된 연산 때문에 발생한 것 같습니다" -#: tcop/postgres.c:3214 +#: tcop/postgres.c:3217 +#, c-format +msgid "terminating connection due to conflict with recovery" +msgstr "복구 작업 중 충돌로 연결을 끝냅니다" + +#: tcop/postgres.c:3289 #, c-format msgid "canceling authentication due to timeout" msgstr "시간 초과로 인증 작업을 취소합니다." -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3293 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "관리자 명령으로 인해 자동 청소 프로세스를 끝냅니다" -#: tcop/postgres.c:3222 +#: tcop/postgres.c:3297 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "관리자 요청에 의해서 논리 복제 작업자를 끝냅니다" -#: tcop/postgres.c:3239 tcop/postgres.c:3249 tcop/postgres.c:3308 -#, c-format -msgid "terminating connection due to conflict with recovery" -msgstr "복구 작업 중 충돌로 연결을 끝냅니다" - -#: tcop/postgres.c:3260 +#: tcop/postgres.c:3317 #, c-format msgid "terminating connection due to administrator command" msgstr "관리자 요청에 의해서 연결을 끝냅니다" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3348 #, c-format msgid "connection to client lost" msgstr "서버로부터 연결이 끊어졌습니다." -#: tcop/postgres.c:3361 +#: tcop/postgres.c:3400 #, c-format msgid "canceling statement due to lock timeout" msgstr "잠금 대기 시간 초과로 작업을 취소합니다." -#: tcop/postgres.c:3368 +#: tcop/postgres.c:3407 #, c-format msgid "canceling statement due to statement timeout" msgstr "명령실행시간 초과로 작업을 취소합니다." -#: tcop/postgres.c:3375 +#: tcop/postgres.c:3414 #, c-format msgid "canceling autovacuum task" msgstr "자동 청소 작업을 취소하는 중" -#: tcop/postgres.c:3398 +#: tcop/postgres.c:3427 #, c-format msgid "canceling statement due to user request" msgstr "사용자 요청에 의해 작업을 취소합니다." -#: tcop/postgres.c:3412 +#: tcop/postgres.c:3448 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "idle-in-transaction 시간 초과로 연결을 끝냅니다" -#: tcop/postgres.c:3423 +#: tcop/postgres.c:3461 +#, c-format +msgid "terminating connection due to transaction timeout" +msgstr "트랜잭션 시간(transaction_timeout) 초과로 연결을 끝냅니다" + +#: tcop/postgres.c:3474 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "idle-session 시간 초과로 연결을 끝냅니다" -#: tcop/postgres.c:3514 +#: tcop/postgres.c:3564 #, c-format msgid "stack depth limit exceeded" msgstr "스택 깊이를 초과했습니다" -#: tcop/postgres.c:3515 +#: tcop/postgres.c:3565 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -24335,29 +25432,29 @@ msgstr "" "먼저 OS에서 지원하는 스택 depth 최대값을 확인한 뒤, 허용범위 안에서 " "\"max_stack_depth\" (현재값: %dkB) 매개 변수 값의 설정치를 증가시키세요." -#: tcop/postgres.c:3562 +#: tcop/postgres.c:3612 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\" 값은 %ldkB를 초과할 수 없습니다" -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3614 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " "equivalent." msgstr "OS의 \"ulimit -s\" 명령과 같은 것으로 스택 깊이를 늘려주십시오." -#: tcop/postgres.c:3587 +#: 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 이어야 합니다." +msgid "\"client_connection_check_interval\" must be set to 0 on this platform." +msgstr "이 플랫폼에서는 \"client_connection_check_interval\" 값은 0 이어야 합니다." -#: tcop/postgres.c:3608 +#: tcop/postgres.c:3658 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "\"log_statement_stats\" 값이 true 일 때는 이 값을 활성화할 수 없습니다" -#: tcop/postgres.c:3623 +#: tcop/postgres.c:3673 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -24366,54 +25463,54 @@ msgstr "" "\"log_parser_stats\", \"log_planner_stats\", \"log_executor_stats\" 설정값들 " "중 하나가 true 일 때는 \"log_statement_stats\" 설정을 활성화할 수 없습니다" -#: tcop/postgres.c:3971 +#: tcop/postgres.c:4098 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "서버 프로세스의 명령행 인자가 잘못되었습니다: %s" -#: tcop/postgres.c:3972 tcop/postgres.c:3978 +#: tcop/postgres.c:4099 tcop/postgres.c:4105 #, c-format msgid "Try \"%s --help\" for more information." msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." -#: tcop/postgres.c:3976 +#: tcop/postgres.c:4103 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: 잘못된 명령행 인자: %s" -#: tcop/postgres.c:4029 +#: tcop/postgres.c:4156 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: 데이터베이스와 사용자를 지정하지 않았습니다" -#: tcop/postgres.c:4779 +#: tcop/postgres.c:4909 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "잘못된 CLOSE 메시지 서브타입 %d" -#: tcop/postgres.c:4816 +#: tcop/postgres.c:4946 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "잘못된 DESCRIBE 메시지 서브타입 %d" -#: tcop/postgres.c:4903 +#: tcop/postgres.c:5033 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "복제 연결에서는 fastpath 함수 호출을 지원하지 않습니다" -#: tcop/postgres.c:4907 +#: tcop/postgres.c:5037 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "복제 연결에서는 확장된 쿼리 프로토콜을 지원하지 않습니다" -#: tcop/postgres.c:5087 +#: tcop/postgres.c:5217 #, c-format msgid "" -"disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s" -"%s" +"disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s " +"host=%s%s%s" msgstr "" -"연결종료: 세션 시간: %d:%02d:%02d.%03d 사용자=%s 데이터베이스=%s 호스트=%s%s" -"%s" +"연결종료: 세션 시간: %d:%02d:%02d.%03d 사용자=%s 데이터베이스=%s 호스트" +"=%s%s%s" #: tcop/pquery.c:641 #, c-format @@ -24421,54 +25518,54 @@ msgid "bind message has %d result formats but query has %d columns" msgstr "" "바인드 메시지는 %d 결과 포멧을 가지고 있고, 쿼리는 %d 칼럼을 가지고 있습니다" -#: 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 "" "뒤로 이동 가능한 커서를 만드려면 SCROLL 옵션을 추가해서 커서를 만드세요." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:417 +#: tcop/utility.c:410 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "읽기 전용 트랜잭션에서는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:435 +#: tcop/utility.c:428 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "병렬 처리 작업에서는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:454 +#: tcop/utility.c:447 #, c-format msgid "cannot execute %s during recovery" msgstr "복구 작업 중에는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:472 +#: tcop/utility.c:465 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "보안 제한 작업 내에서 %s을(를) 실행할 수 없음" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:828 +#: tcop/utility.c:821 #, c-format msgid "cannot execute %s within a background process" msgstr "백그라운드 프로세스에서는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg CHECKPOINT -#: tcop/utility.c:954 +#: tcop/utility.c:947 #, c-format msgid "permission denied to execute %s command" msgstr "%s 명령 실행 권한 없음" -#: tcop/utility.c:956 +#: tcop/utility.c:949 #, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." msgstr "이 명령 실행은 \"%s\" 롤 권한이 있는 롤만 할 수 있습니다." @@ -24621,13 +25718,13 @@ msgstr "\"long\" 플래그 값을 포함하는 잘못된 affix 플래그: \"%s\" msgid "could not open dictionary file \"%s\": %m" msgstr "\"%s\" 사전 파일을 열 수 없음: %m" -#: tsearch/spell.c:749 utils/adt/regexp.c:224 jsonpath_gram.y:559 +#: tsearch/spell.c:749 utils/adt/regexp.c:223 jsonpath_gram.y:629 #, c-format msgid "invalid regular expression: %s" msgstr "잘못된 정규식: %s" #: tsearch/spell.c:963 tsearch/spell.c:980 tsearch/spell.c:997 -#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18123 gram.y:18140 +#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18735 gram.y:18752 #, c-format msgid "syntax error" msgstr "구문 오류" @@ -24665,18 +25762,18 @@ msgstr "alias 수가 지정한 %d 개수를 초과함" msgid "affix file contains both old-style and new-style commands" msgstr "affix 파일에 옛방식과 새방식 명령이 함께 있습니다" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:278 utils/adt/tsvector_op.c:1128 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "" "문자열이 너무 길어서 tsvector에 사용할 수 없음(%d바이트, 최대 %d바이트)" -#: tsearch/ts_locale.c:238 +#: tsearch/ts_locale.c:236 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "%d번째 줄(해당 파일: \"%s\"): \"%s\"" -#: tsearch/ts_locale.c:317 +#: tsearch/ts_locale.c:315 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "wchar_t에서 서버 인코딩으로 변환하지 못함: %m" @@ -24703,72 +25800,72 @@ msgstr "\"%s\" 전문 검색 구성 파일 이름이 잘못됨" msgid "could not open stop-word file \"%s\": %m" msgstr "\"%s\" 중지 단어 파일을 열 수 없음: %m" -#: tsearch/wparser.c:308 tsearch/wparser.c:396 tsearch/wparser.c:473 +#: tsearch/wparser.c:306 tsearch/wparser.c:394 tsearch/wparser.c:471 #, c-format msgid "text search parser does not support headline creation" msgstr "전문 검색 분석기에서 헤드라인 작성을 지원하지 않음" -#: tsearch/wparser_def.c:2663 +#: tsearch/wparser_def.c:2664 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "인식할 수 없는 headline 매개 변수: \"%s\"" -#: tsearch/wparser_def.c:2673 +#: tsearch/wparser_def.c:2674 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords는 MaxWords보다 작아야 함" -#: tsearch/wparser_def.c:2677 +#: tsearch/wparser_def.c:2678 #, c-format msgid "MinWords should be positive" msgstr "MinWords는 양수여야 함" -#: tsearch/wparser_def.c:2681 +#: tsearch/wparser_def.c:2682 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord는 0보다 크거나 같아야 함" -#: tsearch/wparser_def.c:2685 +#: tsearch/wparser_def.c:2686 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments는 0보다 크거나 같아야 함" -#: utils/activity/pgstat.c:438 +#: utils/activity/pgstat.c:435 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "\"%s\" 매개 변수 통계 파일을 지울 수 없음: %m" -#: 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\" 통계 파일이 손상되었음" @@ -24778,116 +25875,126 @@ msgstr "\"%s\" 통계 파일이 손상되었음" msgid "function call to dropped function" msgstr "삭제될 함수를 호출함" -#: utils/activity/pgstat_xact.c:363 +#: utils/activity/pgstat_xact.c:362 #, c-format msgid "resetting existing statistics for kind %s, db=%u, oid=%u" msgstr "%s 종류의 기존 통계 정보를 초기화합니다, db=%u, oid=%u" +#: 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 custom wait events" +msgstr "너무 많은 사용자 대기 이벤트" + # # nonun 부분 begin -#: utils/adt/acl.c:177 utils/adt/name.c:93 +#: utils/adt/acl.c:183 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "식별자(identifier)가 너무 깁니다." -#: utils/adt/acl.c:178 utils/adt/name.c:94 +#: utils/adt/acl.c:184 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "식별자(Identifier)는 %d 글자 이상일 수 없습니다." -#: utils/adt/acl.c:266 +#: utils/adt/acl.c:272 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "알 수 없는 않은 키워드: \"%s\"" -#: utils/adt/acl.c:267 +#: utils/adt/acl.c:273 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL 키워드는 \"group\" 또는 \"user\" 중에 하나여야 합니다." -#: utils/adt/acl.c:275 +#: utils/adt/acl.c:281 #, c-format msgid "missing name" msgstr "이름이 빠졌습니다." -#: utils/adt/acl.c:276 +#: utils/adt/acl.c:282 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "이름은 \"group\" 또는 \"user\" 키워드 뒤에 있어야 합니다." -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:288 #, c-format msgid "missing \"=\" sign" msgstr "\"=\" 기호가 빠졌습니다." -#: utils/adt/acl.c:341 +#: utils/adt/acl.c:350 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "잘못된 조건: \"%s\" 중에 한 가지여야 합니다." -#: utils/adt/acl.c:371 +#: utils/adt/acl.c:380 #, c-format msgid "a name must follow the \"/\" sign" msgstr "이름은 \"/\"기호 뒤에 있어야 합니다." -#: utils/adt/acl.c:383 +#: utils/adt/acl.c:392 #, c-format msgid "defaulting grantor to user ID %u" msgstr "%u 사용자 ID에서 기본 권한자로 할당하고 있습니다" -#: utils/adt/acl.c:569 +#: utils/adt/acl.c:578 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL 배열에 잘못된 자료형을 사용하고 있습니다" -#: utils/adt/acl.c:573 +#: utils/adt/acl.c:582 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL 배열은 일차원 배열이어야 합니다" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:586 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL 배열에는 null 값을 포함할 수 없습니다" -#: utils/adt/acl.c:606 +#: utils/adt/acl.c:615 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "ACL 설정 정보 끝에 끝에 쓸모 없는 내용들이 더 포함되어있습니다" -#: utils/adt/acl.c:1248 +#: utils/adt/acl.c:1263 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "부여 옵션을 해당 부여자에게 다시 부여할 수 없음" -#: utils/adt/acl.c:1564 +#: utils/adt/acl.c:1579 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert 더이상 지원하지 않음" -#: utils/adt/acl.c:1574 +#: utils/adt/acl.c:1589 #, c-format msgid "aclremove is no longer supported" msgstr "aclremovie 더이상 지원하지 않음" -#: utils/adt/acl.c:1693 +#: utils/adt/acl.c:1709 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "알 수 없는 권한 타입: \"%s\"" -#: utils/adt/acl.c:3476 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:5023 +#: utils/adt/acl.c:5196 #, c-format 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:878 utils/adt/json.c:694 utils/adt/json.c:831 -#: utils/adt/json.c:869 utils/adt/jsonb.c:1139 utils/adt/jsonb.c:1211 -#: utils/adt/jsonb.c:1629 utils/adt/jsonb.c:1817 utils/adt/jsonb.c:1827 +#: utils/adt/array_userfuncs.c:866 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 "입력 자료형을 결정할 수 없음" @@ -24898,17 +26005,17 @@ msgid "input data type is not an array" msgstr "입력 자료형이 배열이 아닙니다." #: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 -#: utils/adt/float.c:1228 utils/adt/float.c:1302 utils/adt/float.c:4117 -#: utils/adt/float.c:4155 utils/adt/int.c:778 utils/adt/int.c:800 +#: 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:1257 utils/adt/numeric.c:1901 utils/adt/numeric.c:4388 -#: utils/adt/rangetypes.c:1481 utils/adt/rangetypes.c:1494 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1132 -#: utils/adt/varlena.c:3134 +#: 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 "정수 범위를 벗어남" @@ -24948,269 +26055,280 @@ msgstr "차원(배열 깊이)이 다른 배열들을 서로 합칠 수 없습니 msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "차원(배열 깊이)이 다른 배열들을 서로 합칠 수 없습니다" -#: utils/adt/array_userfuncs.c:987 utils/adt/array_userfuncs.c:995 -#: utils/adt/arrayfuncs.c:5590 utils/adt/arrayfuncs.c:5596 +#: 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 "배열 차수가 서로 틀린 배열은 누적할 수 없음" -#: utils/adt/array_userfuncs.c:1286 utils/adt/array_userfuncs.c:1440 +#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "다차원 배열에서 요소 검색 기능은 지원하지 않음" -#: utils/adt/array_userfuncs.c:1315 +#: utils/adt/array_userfuncs.c:1301 #, c-format msgid "initial position must not be null" msgstr "초기 위치값은 null값이 아니여야 함" -#: utils/adt/array_userfuncs.c:1688 +#: utils/adt/array_userfuncs.c:1674 #, c-format msgid "sample size must be between 0 and %d" msgstr "샘플 크기는 0에서 %d 사이여야 함" -#: utils/adt/arrayfuncs.c:273 utils/adt/arrayfuncs.c:287 -#: utils/adt/arrayfuncs.c:298 utils/adt/arrayfuncs.c:320 -#: utils/adt/arrayfuncs.c:337 utils/adt/arrayfuncs.c:351 -#: utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:366 -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:521 -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:547 -#: utils/adt/arrayfuncs.c:568 utils/adt/arrayfuncs.c:598 -#: utils/adt/arrayfuncs.c:605 utils/adt/arrayfuncs.c:613 -#: utils/adt/arrayfuncs.c:647 utils/adt/arrayfuncs.c:670 -#: utils/adt/arrayfuncs.c:690 utils/adt/arrayfuncs.c:807 -#: utils/adt/arrayfuncs.c:816 utils/adt/arrayfuncs.c:846 -#: utils/adt/arrayfuncs.c:861 utils/adt/arrayfuncs.c:914 +#: utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:273 +#: utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:307 +#: utils/adt/arrayfuncs.c:440 utils/adt/arrayfuncs.c:454 +#: utils/adt/arrayfuncs.c:466 utils/adt/arrayfuncs.c:636 +#: utils/adt/arrayfuncs.c:668 utils/adt/arrayfuncs.c:703 +#: utils/adt/arrayfuncs.c:718 utils/adt/arrayfuncs.c:777 +#: utils/adt/arrayfuncs.c:782 utils/adt/arrayfuncs.c:870 +#: utils/adt/arrayfuncs.c:897 utils/adt/arrayfuncs.c:904 +#: utils/adt/arrayfuncs.c:941 #, c-format msgid "malformed array literal: \"%s\"" msgstr "비정상적인 배열 문자: \"%s\"" -#: utils/adt/arrayfuncs.c:274 -#, c-format -msgid "\"[\" must introduce explicitly-specified array dimensions." -msgstr "배열 차원 정의는 \"[\" 문자로 시작해야 합니다." - -#: utils/adt/arrayfuncs.c:288 +#: utils/adt/arrayfuncs.c:265 #, c-format -msgid "Missing array dimension value." -msgstr "배열 차원(배열 깊이) 값이 빠졌습니다." +msgid "Array value must start with \"{\" or dimension information." +msgstr "배열값은 \"{\" 또는 배열 깊이 정보로 시작되어야 합니다" -#: utils/adt/arrayfuncs.c:299 utils/adt/arrayfuncs.c:338 +#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:467 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "배열 차원(배열 깊이) 표현에서 \"%s\" 문자가 빠졌습니다." -#: utils/adt/arrayfuncs.c:308 utils/adt/arrayfuncs.c:2933 -#: utils/adt/arrayfuncs.c:2965 utils/adt/arrayfuncs.c:2980 +#: utils/adt/arrayfuncs.c:285 #, c-format -msgid "upper bound cannot be less than lower bound" -msgstr "상한값은 하한값보다 작을 수 없습니다" +msgid "Array contents must start with \"{\"." +msgstr "배열형은 \"{\" 문자로 시작해야 합니다." -#: utils/adt/arrayfuncs.c:321 +#: utils/adt/arrayfuncs.c:308 utils/adt/multirangetypes.c:292 #, c-format -msgid "Array value must start with \"{\" or dimension information." -msgstr "배열값은 \"{\" 또는 배열 깊이 정보로 시작되어야 합니다" +msgid "Junk after closing right brace." +msgstr "오른쪽 닫기 괄호 뒤에 정크" -#: utils/adt/arrayfuncs.c:352 +#: utils/adt/arrayfuncs.c:431 utils/adt/arrayfuncs.c:643 #, c-format -msgid "Array contents must start with \"{\"." -msgstr "배열형은 \"{\" 문자로 시작해야 합니다." +msgid "number of array dimensions exceeds the maximum allowed (%d)" +msgstr "배열 차원이 최대치(%d)를 초과했음" -#: utils/adt/arrayfuncs.c:360 utils/adt/arrayfuncs.c:367 +#: utils/adt/arrayfuncs.c:441 #, c-format -msgid "Specified array dimensions do not match array contents." -msgstr "지정한 배열 차원에 해당하는 배열이 없습니다." +msgid "\"[\" must introduce explicitly-specified array dimensions." +msgstr "배열 차원 정의는 \"[\" 문자로 시작해야 합니다." -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:533 -#: utils/adt/multirangetypes.c:166 utils/adt/rangetypes.c:2405 -#: utils/adt/rangetypes.c:2413 utils/adt/rowtypes.c:219 -#: utils/adt/rowtypes.c:230 +#: utils/adt/arrayfuncs.c:455 #, c-format -msgid "Unexpected end of input." -msgstr "입력의 예상치 못한 종료." +msgid "Missing array dimension value." +msgstr "배열 차원(배열 깊이) 값이 빠졌습니다." + +#: 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 "상한값은 하한값보다 작을 수 없습니다" + +#: utils/adt/arrayfuncs.c:487 +#, c-format +msgid "array upper bound is too large: %d" +msgstr "배열 upper bound가 너무 큽니다: %d" + +#: utils/adt/arrayfuncs.c:538 +#, c-format +msgid "array bound is out of integer range" +msgstr "배열 bound가 정수 범위를 초과했음" -#: utils/adt/arrayfuncs.c:522 utils/adt/arrayfuncs.c:569 -#: utils/adt/arrayfuncs.c:599 utils/adt/arrayfuncs.c:648 +#: utils/adt/arrayfuncs.c:637 utils/adt/arrayfuncs.c:669 +#: utils/adt/arrayfuncs.c:704 utils/adt/arrayfuncs.c:898 #, c-format msgid "Unexpected \"%c\" character." msgstr "예기치 않은 \"%c\" 문자" -#: utils/adt/arrayfuncs.c:548 utils/adt/arrayfuncs.c:671 +#: utils/adt/arrayfuncs.c:719 #, c-format msgid "Unexpected array element." msgstr "예기치 않은 배열 요소" -#: utils/adt/arrayfuncs.c:606 +#: utils/adt/arrayfuncs.c:778 #, c-format -msgid "Unmatched \"%c\" character." -msgstr "짝이 안 맞는 \"%c\" 문자" +msgid "Specified array dimensions do not match array contents." +msgstr "지정한 배열 차원에 해당하는 배열이 없습니다." -#: utils/adt/arrayfuncs.c:614 utils/adt/jsonfuncs.c:2553 +#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2598 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "다차원 배열에는 일치하는 차원이 포함된 배열 식이 있어야 함" -#: utils/adt/arrayfuncs.c:691 utils/adt/multirangetypes.c:293 +#: utils/adt/arrayfuncs.c:871 utils/adt/arrayfuncs.c:905 #, c-format -msgid "Junk after closing right brace." -msgstr "오른쪽 닫기 괄호 뒤에 정크" +msgid "Incorrectly quoted array element." +msgstr "바르지 않은 따옴표 배열 요소입니다." + +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 +#: utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 +#: utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#, c-format +msgid "Unexpected end of input." +msgstr "입력의 예상치 못한 종료." -#: utils/adt/arrayfuncs.c:1325 utils/adt/arrayfuncs.c:3479 -#: utils/adt/arrayfuncs.c:6080 +#: 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" -#: utils/adt/arrayfuncs.c:1336 +#: utils/adt/arrayfuncs.c:1312 #, c-format msgid "invalid array flags" msgstr "잘못된 배열 플래그" -#: utils/adt/arrayfuncs.c:1358 +#: utils/adt/arrayfuncs.c:1334 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "이진 자료에 있는 배열 요소 자료형이 %u (%s) 입니다. 기대값: %u (%s)" -#: utils/adt/arrayfuncs.c:1402 utils/adt/multirangetypes.c:451 -#: utils/adt/rangetypes.c:344 utils/cache/lsyscache.c:2916 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 #, c-format msgid "no binary input function available for type %s" msgstr "%s 자료형에서 사용할 바이너리 입력 함수가 없습니다." -#: utils/adt/arrayfuncs.c:1542 +#: utils/adt/arrayfuncs.c:1509 #, c-format msgid "improper binary format in array element %d" msgstr "%d 번째 배열 요소의 포맷이 부적절합니다." -#: utils/adt/arrayfuncs.c:1623 utils/adt/multirangetypes.c:456 -#: utils/adt/rangetypes.c:349 utils/cache/lsyscache.c:2949 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 #, c-format msgid "no binary output function available for type %s" msgstr "%s 자료형에서 사용할 바이너리 출력 함수가 없습니다." -#: utils/adt/arrayfuncs.c:2102 +#: utils/adt/arrayfuncs.c:2067 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "특정 크기로 배열을 절단하는 기능은 구현되지 않습니다." -#: utils/adt/arrayfuncs.c:2280 utils/adt/arrayfuncs.c:2302 -#: utils/adt/arrayfuncs.c:2351 utils/adt/arrayfuncs.c:2589 -#: utils/adt/arrayfuncs.c:2911 utils/adt/arrayfuncs.c:6066 -#: utils/adt/arrayfuncs.c:6092 utils/adt/arrayfuncs.c:6103 -#: utils/adt/json.c:1497 utils/adt/json.c:1569 utils/adt/jsonb.c:1416 -#: utils/adt/jsonb.c:1500 utils/adt/jsonfuncs.c:4434 utils/adt/jsonfuncs.c:4587 -#: utils/adt/jsonfuncs.c:4698 utils/adt/jsonfuncs.c:4746 +#: 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 "잘못된 배열 하위 스크립트(1,2...차원 배열 표시 문제)" -#: utils/adt/arrayfuncs.c:2285 utils/adt/arrayfuncs.c:2393 -#: utils/adt/arrayfuncs.c:2656 utils/adt/arrayfuncs.c:2970 +#: 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 "배열 하위 스크립트 범위를 초과했습니다" -#: utils/adt/arrayfuncs.c:2290 +#: utils/adt/arrayfuncs.c:2255 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "고정 길이 배열의 요소에 null 값을 지정할 수 없음" -#: utils/adt/arrayfuncs.c:2858 +#: utils/adt/arrayfuncs.c:2855 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "고정된 크기의 배열의 조각을 업데이트 하는 기능은 구현되지 않았습니다." -#: utils/adt/arrayfuncs.c:2889 +#: utils/adt/arrayfuncs.c:2886 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "배열 나누기 서브스크립트는 반드시 둘다 범위안에 있어야 합니다" -#: utils/adt/arrayfuncs.c:2890 +#: utils/adt/arrayfuncs.c:2887 #, c-format msgid "" "When assigning to a slice of an empty array value, slice boundaries must be " "fully specified." msgstr "빈 배열 대상으로 자르기를 할 때는 자르기 범위가 전체여야 합니다." -#: utils/adt/arrayfuncs.c:2901 utils/adt/arrayfuncs.c:2997 +#: utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:3017 #, c-format msgid "source array too small" msgstr "원본 배열이 너무 작습니다." -#: utils/adt/arrayfuncs.c:3637 +#: utils/adt/arrayfuncs.c:3657 #, c-format msgid "null array element not allowed in this context" msgstr "이 구문에서는 배열의 null 요소를 허용하지 않습니다" -#: utils/adt/arrayfuncs.c:3808 utils/adt/arrayfuncs.c:3979 -#: utils/adt/arrayfuncs.c:4370 +#: 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:4157 utils/adt/multirangetypes.c:2806 -#: utils/adt/multirangetypes.c:2878 utils/adt/rangetypes.c:1354 -#: utils/adt/rangetypes.c:1418 utils/adt/rowtypes.c:1885 +#: 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:4285 utils/adt/rowtypes.c:2006 +#: 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:5480 +#: utils/adt/arrayfuncs.c:5506 #, c-format msgid "data type %s is not an array type" msgstr "%s 자료형은 배열이 아닙니다." -#: utils/adt/arrayfuncs.c:5535 +#: utils/adt/arrayfuncs.c:5561 #, c-format msgid "cannot accumulate null arrays" msgstr "null 배열을 누적할 수 없음" -#: utils/adt/arrayfuncs.c:5563 +#: utils/adt/arrayfuncs.c:5589 #, c-format msgid "cannot accumulate empty arrays" msgstr "빈 배열을 누적할 수 없음" -#: utils/adt/arrayfuncs.c:5964 utils/adt/arrayfuncs.c:6004 +#: utils/adt/arrayfuncs.c:5990 utils/adt/arrayfuncs.c:6030 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "차원 배열 또는 하한 배열은 NULL일 수 없음" -#: utils/adt/arrayfuncs.c:6067 utils/adt/arrayfuncs.c:6093 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "Dimension array must be one dimensional." msgstr "차원 배열은 일차원 배열이어야 합니다." -#: utils/adt/arrayfuncs.c:6072 utils/adt/arrayfuncs.c:6098 +#: utils/adt/arrayfuncs.c:6098 utils/adt/arrayfuncs.c:6124 #, c-format msgid "dimension values cannot be null" msgstr "차원 값은 null일 수 없음" -#: utils/adt/arrayfuncs.c:6104 +#: utils/adt/arrayfuncs.c:6130 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "하한 배열의 크기가 차원 배열과 다릅니다." -#: utils/adt/arrayfuncs.c:6382 +#: utils/adt/arrayfuncs.c:6411 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "다차원 배열에서 요소 삭제기능은 지원되지 않음" -#: utils/adt/arrayfuncs.c:6659 +#: utils/adt/arrayfuncs.c:6688 #, c-format msgid "thresholds must be one-dimensional array" msgstr "threshold 값은 1차원 배열이어야 합니다." -#: utils/adt/arrayfuncs.c:6664 +#: utils/adt/arrayfuncs.c:6693 #, c-format msgid "thresholds array must not contain NULLs" msgstr "threshold 배열에는 null이 포함되지 않아야 함" -#: utils/adt/arrayfuncs.c:6897 +#: utils/adt/arrayfuncs.c:6926 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "요소 자름 수는 0부터 %d까지입니다" @@ -25225,22 +26343,22 @@ msgstr "배열 요소 번호는 정수형이어야 합니다." msgid "array subscript in assignment must not be null" msgstr "배열 요소 지정하는 번호값으로 null 값을 사용할 수 없습니다" -#: utils/adt/arrayutils.c:161 +#: utils/adt/arrayutils.c:140 #, c-format msgid "array lower bound is too large: %d" msgstr "배열 lower bound가 너무 큽니다: %d" -#: utils/adt/arrayutils.c:263 +#: utils/adt/arrayutils.c:242 #, c-format msgid "typmod array must be type cstring[]" msgstr "typmod 배열은 cstring[] 형식이어야 함" -#: utils/adt/arrayutils.c:268 +#: utils/adt/arrayutils.c:247 #, c-format msgid "typmod array must be one-dimensional" msgstr "typmod 배열은 일차원 배열이어야 함" -#: utils/adt/arrayutils.c:273 +#: utils/adt/arrayutils.c:252 #, c-format msgid "typmod array must not contain nulls" msgstr "typmod 배열에는 null이 포함되지 않아야 함" @@ -25251,48 +26369,52 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "%s 인코딩을 ASCII 인코딩으로의 변환은 지원하지 않습니다." #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:4017 -#: utils/adt/float.c:206 utils/adt/float.c:293 utils/adt/float.c:307 -#: utils/adt/float.c:412 utils/adt/float.c:495 utils/adt/float.c:509 +#: 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:183 utils/adt/mac.c:94 utils/adt/mac8.c:225 -#: utils/adt/network.c:99 utils/adt/numeric.c:795 utils/adt/numeric.c:7136 -#: utils/adt/numeric.c:7339 utils/adt/numeric.c:8286 utils/adt/numutils.c:357 -#: utils/adt/numutils.c:619 utils/adt/numutils.c:881 utils/adt/numutils.c:920 -#: utils/adt/numutils.c:942 utils/adt/numutils.c:1006 utils/adt/numutils.c:1028 -#: utils/adt/pg_lsn.c:74 utils/adt/tid.c:72 utils/adt/tid.c:80 -#: utils/adt/tid.c:94 utils/adt/tid.c:103 utils/adt/timestamp.c:494 -#: utils/adt/uuid.c:135 utils/adt/xid8funcs.c:354 +#: 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:360 #, 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:351 -#: utils/adt/numutils.c:613 utils/adt/numutils.c:875 utils/adt/numutils.c:926 -#: utils/adt/numutils.c:965 utils/adt/numutils.c:1012 +#: 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 "입력한 \"%s\" 값은 %s 자료형 범위를 초과했습니다" +msgid "money out of range" +msgstr "money 자료형 값 범위를 벗어남" -#: 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:105 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:515 utils/adt/int8.c:573 -#: utils/adt/int8.c:943 utils/adt/int8.c:1023 utils/adt/int8.c:1085 -#: utils/adt/int8.c:1165 utils/adt/numeric.c:3175 utils/adt/numeric.c:3198 -#: utils/adt/numeric.c:3283 utils/adt/numeric.c:3301 utils/adt/numeric.c:3397 -#: utils/adt/numeric.c:8835 utils/adt/numeric.c:9148 utils/adt/numeric.c:9496 -#: utils/adt/numeric.c:9612 utils/adt/numeric.c:11122 -#: utils/adt/timestamp.c:3406 +#: 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 "0으로는 나눌수 없습니다." +#: 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 "입력한 \"%s\" 값은 %s 자료형 범위를 초과했습니다" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" @@ -25303,161 +26425,189 @@ msgstr "\"char\" 범위를 벗어났습니다." msgid "could not compute %s hash: %s" msgstr "%s 해시 계산 실패: %s" -#: utils/adt/date.c:63 utils/adt/timestamp.c:100 utils/adt/varbit.c:105 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "잘못된 자료형 한정자" -#: utils/adt/date.c:75 +#: utils/adt/date.c:76 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s 정밀도로 음수를 사용할 수 없습니다" -#: utils/adt/date.c:81 +#: utils/adt/date.c:82 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s 정밀도는 최대값(%d)으로 줄였습니다" -#: utils/adt/date.c:166 utils/adt/date.c:174 utils/adt/formatting.c:4241 -#: utils/adt/formatting.c:4250 utils/adt/formatting.c:4363 -#: utils/adt/formatting.c:4373 +#: 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 #, c-format msgid "date out of range: \"%s\"" msgstr "날짜 범위가 벗어났음: \"%s\"" -#: utils/adt/date.c:221 utils/adt/date.c:519 utils/adt/date.c:543 -#: utils/adt/rangetypes.c:1577 utils/adt/rangetypes.c:1592 utils/adt/xml.c:2460 +#: 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 "날짜가 범위를 벗어남" -#: utils/adt/date.c:267 utils/adt/timestamp.c:582 +#: utils/adt/date.c:268 utils/adt/timestamp.c:598 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "날짜 필드의 값이 범위를 벗어남: %d-%02d-%02d" -#: utils/adt/date.c:274 utils/adt/date.c:283 utils/adt/timestamp.c:588 +#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "날짜 범위가 벗어났음: %d-%02d-%02d" -#: utils/adt/date.c:494 +#: utils/adt/date.c:495 #, c-format msgid "cannot subtract infinite dates" msgstr "무한 날짜를 뺄 수 없음" -#: utils/adt/date.c:592 utils/adt/date.c:655 utils/adt/date.c:691 -#: utils/adt/date.c:2885 utils/adt/date.c:2895 +#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 +#: utils/adt/date.c:2906 utils/adt/date.c:2916 #, c-format msgid "date out of range for timestamp" msgstr "날짜가 타임스탬프 범위를 벗어남" -#: utils/adt/date.c:1121 utils/adt/date.c:1204 utils/adt/date.c:1220 -#: utils/adt/date.c:2206 utils/adt/date.c:2990 utils/adt/timestamp.c:4097 -#: utils/adt/timestamp.c:4290 utils/adt/timestamp.c:4432 -#: utils/adt/timestamp.c:4685 utils/adt/timestamp.c:4886 -#: utils/adt/timestamp.c:4933 utils/adt/timestamp.c:5157 -#: utils/adt/timestamp.c:5204 utils/adt/timestamp.c:5334 +#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 +#: utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 +#: utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 +#: utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 +#: utils/adt/timestamp.c:6070 #, c-format msgid "unit \"%s\" not supported for type %s" msgstr "\"%s\" 단위는 %s 자료형의 값 단위로 지원하지 않음" -#: utils/adt/date.c:1229 utils/adt/date.c:2222 utils/adt/date.c:3010 -#: utils/adt/timestamp.c:4111 utils/adt/timestamp.c:4307 -#: utils/adt/timestamp.c:4446 utils/adt/timestamp.c:4645 -#: utils/adt/timestamp.c:4942 utils/adt/timestamp.c:5213 -#: utils/adt/timestamp.c:5395 +#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 +#: utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 +#: utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 +#: utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 +#: utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 #, c-format msgid "unit \"%s\" not recognized for type %s" msgstr "\"%s\" 는 %s 자료형의 단위로 인식될 수 없음" -#: utils/adt/date.c:1313 utils/adt/date.c:1359 utils/adt/date.c:1918 -#: utils/adt/date.c:1949 utils/adt/date.c:1978 utils/adt/date.c:2848 -#: utils/adt/date.c:3080 utils/adt/datetime.c:424 utils/adt/datetime.c:1809 -#: utils/adt/formatting.c:4081 utils/adt/formatting.c:4117 -#: utils/adt/formatting.c:4210 utils/adt/formatting.c:4339 utils/adt/json.c:467 -#: utils/adt/json.c:506 utils/adt/timestamp.c:232 utils/adt/timestamp.c:264 -#: utils/adt/timestamp.c:700 utils/adt/timestamp.c:709 -#: utils/adt/timestamp.c:787 utils/adt/timestamp.c:820 -#: utils/adt/timestamp.c:2933 utils/adt/timestamp.c:2954 -#: utils/adt/timestamp.c:2967 utils/adt/timestamp.c:2976 -#: utils/adt/timestamp.c:2984 utils/adt/timestamp.c:3045 -#: utils/adt/timestamp.c:3068 utils/adt/timestamp.c:3081 -#: utils/adt/timestamp.c:3092 utils/adt/timestamp.c:3100 -#: utils/adt/timestamp.c:3801 utils/adt/timestamp.c:3925 -#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4105 -#: utils/adt/timestamp.c:4198 utils/adt/timestamp.c:4301 -#: utils/adt/timestamp.c:4750 utils/adt/timestamp.c:5024 -#: utils/adt/timestamp.c:5463 utils/adt/timestamp.c:5473 -#: utils/adt/timestamp.c:5478 utils/adt/timestamp.c:5484 -#: utils/adt/timestamp.c:5517 utils/adt/timestamp.c:5604 -#: utils/adt/timestamp.c:5645 utils/adt/timestamp.c:5649 -#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 -#: utils/adt/timestamp.c:5713 utils/adt/timestamp.c:5747 utils/adt/xml.c:2482 -#: utils/adt/xml.c:2489 utils/adt/xml.c:2509 utils/adt/xml.c:2516 +#: 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:2574 +#: utils/adt/xml.c:2581 utils/adt/xml.c:2601 utils/adt/xml.c:2608 #, c-format msgid "timestamp out of range" msgstr "타임스탬프 범위를 벗어남" -#: utils/adt/date.c:1535 utils/adt/date.c:2343 utils/adt/formatting.c:4431 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 #, c-format msgid "time out of range" msgstr "시간 범위를 벗어남" -#: utils/adt/date.c:1587 utils/adt/timestamp.c:597 +#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "시간 필드의 값이 범위를 벗어남: %d:%02d:%02g" -#: utils/adt/date.c:2107 utils/adt/date.c:2647 utils/adt/float.c:1042 -#: utils/adt/float.c:1118 utils/adt/int.c:635 utils/adt/int.c:682 -#: utils/adt/int.c:717 utils/adt/int8.c:414 utils/adt/numeric.c:2579 -#: utils/adt/timestamp.c:3455 utils/adt/timestamp.c:3482 -#: utils/adt/timestamp.c:3513 +#: utils/adt/date.c:2020 +#, c-format +msgid "cannot convert infinite interval to time" +msgstr "infinite interval 자료형은 time 자료형으로 변환할 수 없음" + +#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#, c-format +msgid "cannot add infinite interval to time" +msgstr "infinite interval 자료형 + time 자료형 계산은 할 수 없음" + +#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#, c-format +msgid "cannot subtract infinite interval from time" +msgstr "infinite interval 자료형 - 시간 자료형 계산은 할 수 없음" + +#: 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 "윈도우 함수에서 앞에 오거나 뒤에 따라오는 크기가 잘못됨" -#: utils/adt/date.c:2351 +#: utils/adt/date.c:2360 #, c-format msgid "time zone displacement out of range" msgstr "타임 존 변위가 범위를 벗어남" -#: utils/adt/date.c:3110 utils/adt/timestamp.c:5506 utils/adt/timestamp.c:5736 +#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#, c-format +msgid "interval time zone \"%s\" must be finite" +msgstr "" +"\"%s\" 시간대 간격(interval time zone) 값은 유한해야 함" + +#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "" "\"%s\" 시간대 간격(interval time zone) 값으로 달(month) 또는 일(day)을 포함" "할 수 없습니다" -#: utils/adt/datetime.c:3223 utils/adt/datetime.c:4002 -#: utils/adt/datetime.c:4008 utils/adt/timestamp.c:512 +#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 +#: utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 #, c-format msgid "time zone \"%s\" not recognized" msgstr "\"%s\" 이름의 시간대는 없습니다." -#: utils/adt/datetime.c:3976 utils/adt/datetime.c:3983 +#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "날짜/시간 필드의 값이 범위를 벗어남: \"%s\"" -#: utils/adt/datetime.c:3985 +#: utils/adt/datetime.c:4110 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "날짜 표현 방식(\"datestyle\")을 다른 것으로 사용하고 있는 듯 합니다." -#: utils/adt/datetime.c:3990 +#: utils/adt/datetime.c:4115 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "interval 필드의 값이 범위를 벗어남: \"%s\"" -#: utils/adt/datetime.c:3996 +#: utils/adt/datetime.c:4121 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "표준시간대 범위를 벗어남: \"%s\"" -#: utils/adt/datetime.c:4010 +#: utils/adt/datetime.c:4135 #, c-format msgid "" "This time zone name appears in the configuration file for time zone " @@ -25470,24 +26620,24 @@ msgstr "" msgid "invalid Datum pointer" msgstr "잘못된 Datum 포인터" -#: utils/adt/dbsize.c:761 utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:764 utils/adt/dbsize.c:840 #, c-format msgid "invalid size: \"%s\"" msgstr "잘못된 크기: \"%s\"" -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:841 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "잘못된 크기 단위: \"%s\"" -#: utils/adt/dbsize.c:839 +#: utils/adt/dbsize.c:842 #, c-format msgid "" "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." msgstr "" "유효한 단위는 \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\"입니다." -#: utils/adt/domains.c:92 +#: utils/adt/domains.c:95 #, c-format msgid "type %s is not a domain" msgstr "%s 자료형은 도메인이 아닙니다" @@ -25537,10 +26687,10 @@ msgstr "base64 마침 조합이 잘못되었음" msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "입력값에 여백 처리값이 빠졌거나, 자료가 손상되었습니다." -#: utils/adt/encode.c:492 utils/adt/encode.c:557 utils/adt/jsonfuncs.c:648 -#: utils/adt/varlena.c:331 utils/adt/varlena.c:372 jsonpath_gram.y:528 -#: jsonpath_scan.l:629 jsonpath_scan.l:640 jsonpath_scan.l:650 -#: jsonpath_scan.l:701 +#: 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 jsonpath_gram.y:266 +#: jsonpath_gram.y:598 jsonpath_scan.l:640 jsonpath_scan.l:651 +#: jsonpath_scan.l:661 jsonpath_scan.l:712 #, c-format msgid "invalid input syntax for type %s" msgstr "%s 자료형에 대한 잘못된 입력 구문" @@ -25577,357 +26727,352 @@ msgstr "실제 열거형의 자료형을 확인할 수 없음" msgid "enum %s contains no values" msgstr "\"%s\" 열거형 자료에 값이 없음" -#: utils/adt/float.c:89 +#: utils/adt/float.c:83 #, c-format msgid "value out of range: overflow" msgstr "값이 범위를 벗어남: 오버플로" -#: utils/adt/float.c:97 +#: utils/adt/float.c:91 #, c-format msgid "value out of range: underflow" msgstr "값이 범위를 벗어남: 언더플로" -#: utils/adt/float.c:286 +#: utils/adt/float.c:280 #, c-format msgid "\"%s\" is out of range for type real" msgstr "\"%s\"는 real 자료형의 범위를 벗어납니다." -#: utils/adt/float.c:488 +#: utils/adt/float.c:482 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\"는 double precision 자료형의 범위를 벗어납니다." -#: utils/adt/float.c:1253 utils/adt/float.c:1327 utils/adt/int.c:355 +#: 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:1278 utils/adt/numeric.c:4500 utils/adt/numeric.c:4505 +#: 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:1453 utils/adt/numeric.c:3693 utils/adt/numeric.c:10027 +#: 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:1521 utils/adt/numeric.c:3981 utils/adt/numeric.c:4093 +#: 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 "0의 음수 거듭제곱이 정의되어 있지 않음" -#: utils/adt/float.c:1525 utils/adt/numeric.c:3985 utils/adt/numeric.c:10918 +#: 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:1701 utils/adt/float.c:1734 utils/adt/numeric.c:3893 -#: utils/adt/numeric.c:10698 +#: 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 "0의 대수를 구할 수 없습니다." -#: utils/adt/float.c:1705 utils/adt/float.c:1738 utils/adt/numeric.c:3831 -#: utils/adt/numeric.c:3888 utils/adt/numeric.c:10702 +#: 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 "음수의 대수를 구할 수 없습니다." -#: utils/adt/float.c:1771 utils/adt/float.c:1802 utils/adt/float.c:1897 -#: utils/adt/float.c:1924 utils/adt/float.c:1952 utils/adt/float.c:1979 -#: utils/adt/float.c:2126 utils/adt/float.c:2163 utils/adt/float.c:2333 -#: utils/adt/float.c:2389 utils/adt/float.c:2454 utils/adt/float.c:2511 -#: utils/adt/float.c:2702 utils/adt/float.c:2726 +#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 +#: utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 +#: utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 +#: utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 +#: utils/adt/float.c:2696 utils/adt/float.c:2720 #, c-format msgid "input is out of range" msgstr "입력값이 범위를 벗어났습니다." -#: utils/adt/float.c:2867 -#, c-format -msgid "setseed parameter %g is out of allowed range [-1,1]" -msgstr "%g setseed 매개 변수가 [-1,1] 범위를 벗어났습니다." - -#: utils/adt/float.c:4095 utils/adt/numeric.c:1841 +#: utils/adt/float.c:4000 utils/adt/numeric.c:1857 #, c-format msgid "count must be greater than zero" msgstr "카운트 값은 0 보다 커야 합니다" -#: utils/adt/float.c:4100 utils/adt/numeric.c:1852 +#: utils/adt/float.c:4005 utils/adt/numeric.c:1868 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "피연산자, 하한 및 상한은 NaN일 수 없음" -#: utils/adt/float.c:4106 utils/adt/numeric.c:1857 +#: 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:4172 utils/adt/numeric.c:1871 +#: utils/adt/float.c:4077 utils/adt/numeric.c:1887 #, c-format msgid "lower bound cannot equal upper bound" msgstr "하한값은 상한값과 같을 수 없습니다" -#: utils/adt/formatting.c:519 +#: utils/adt/formatting.c:530 #, c-format msgid "invalid format specification for an interval value" msgstr "간격 값에 대한 형식 지정이 잘못됨" -#: utils/adt/formatting.c:520 +#: utils/adt/formatting.c:531 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "간격이 특정 달력 날짜에 연결되어 있지 않습니다." -#: utils/adt/formatting.c:1150 +#: utils/adt/formatting.c:1161 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\"는 사용된 마지막 패턴이어야 합니다." -#: utils/adt/formatting.c:1158 +#: utils/adt/formatting.c:1169 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\"는 \"PR\" 앞에 있어야 합니다." -#: utils/adt/formatting.c:1174 +#: utils/adt/formatting.c:1185 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\"은 \"PR\" 앞에 있어야 합니다." -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1212 #, c-format msgid "multiple decimal points" msgstr "소숫점이 여러개 있습니다." -#: utils/adt/formatting.c:1205 utils/adt/formatting.c:1288 +#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "\"V\" 와 소숫점을 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1217 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" twice" msgstr "\"S\"를 두 번 사용할 수 없음" -#: utils/adt/formatting.c:1221 +#: utils/adt/formatting.c:1232 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "\"S\" 와 \"PL\"/\"MI\"/\"SG\"/\"PR\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1241 +#: utils/adt/formatting.c:1252 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "\"S\" 와 \"MI\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1251 +#: utils/adt/formatting.c:1262 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "\"S\" 와 \"PL\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1261 +#: utils/adt/formatting.c:1272 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "\"S\" 와 \"SG\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1270 +#: utils/adt/formatting.c:1281 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "\"PR\" 와 \"S\"/\"PL\"/\"MI\"/\"SG\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1296 +#: utils/adt/formatting.c:1307 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "\"EEEE\"를 두 번 사용할 수 없음" -#: utils/adt/formatting.c:1302 +#: utils/adt/formatting.c:1313 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\"는 다른 포맷과 호환하지 않습니다" -#: utils/adt/formatting.c:1303 +#: utils/adt/formatting.c:1314 #, c-format msgid "" "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "\"EEEE\"는 숫자와 소수점 패턴, 이 두 형식과 함께 사용되어야 합니다." -#: utils/adt/formatting.c:1387 +#: utils/adt/formatting.c:1398 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "잘못된 datetime 양식 구분자: \"%s\"" -#: utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1525 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\"는 숫자가 아닙니다." -#: utils/adt/formatting.c:1592 +#: utils/adt/formatting.c:1603 #, c-format msgid "case conversion failed: %s" msgstr "잘못된 형 변환 규칙: %s" -#: utils/adt/formatting.c:1646 utils/adt/formatting.c:1768 -#: utils/adt/formatting.c:1891 +#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 +#: utils/adt/formatting.c:1989 #, c-format msgid "could not determine which collation to use for %s function" msgstr "%s 함수에서 사용할 정렬규칙(collation)을 결정할 수 없음" -#: utils/adt/formatting.c:2274 +#: utils/adt/formatting.c:2410 #, c-format msgid "invalid combination of date conventions" msgstr "날짜 변환을 위한 잘못된 조합" -#: utils/adt/formatting.c:2275 +#: utils/adt/formatting.c:2411 #, c-format msgid "" "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "" "형식 템플릿에 그레고리오력과 ISO week date 변환을 함께 사용하지 마십시오." -#: utils/adt/formatting.c:2297 +#: utils/adt/formatting.c:2433 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "형식 문자열에서 \"%s\" 필드의 값이 충돌함" -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2435 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "이 값은 동일한 필드 형식의 이전 설정과 모순됩니다." -#: utils/adt/formatting.c:2366 +#: utils/adt/formatting.c:2502 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "소스 문자열이 너무 짧아서 \"%s\" 형식 필드에 사용할 수 없음" -#: utils/adt/formatting.c:2368 +#: utils/adt/formatting.c:2504 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "필드에 %d자가 필요한데 %d자만 남았습니다." -#: utils/adt/formatting.c:2370 utils/adt/formatting.c:2384 +#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 #, c-format msgid "" "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "소스 문자열이 고정 너비가 아닌 경우 \"FM\" 한정자를 사용해 보십시오." -#: utils/adt/formatting.c:2380 utils/adt/formatting.c:2393 -#: utils/adt/formatting.c:2614 +#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 +#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "\"%s\" 값은 \"%s\"에 유효하지 않음" -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2518 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "필드에 %d자가 필요한데 %d자만 구문 분석할 수 있습니다." -#: utils/adt/formatting.c:2395 +#: utils/adt/formatting.c:2531 #, c-format msgid "Value must be an integer." msgstr "값은 정수여야 합니다." -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2536 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "소스 문자열의 \"%s\" 값이 범위를 벗어남" -#: utils/adt/formatting.c:2402 +#: utils/adt/formatting.c:2538 #, c-format msgid "Value must be in the range %d to %d." msgstr "값은 %d에서 %d 사이의 범위에 있어야 합니다." -#: utils/adt/formatting.c:2616 +#: utils/adt/formatting.c:2752 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "지정된 값이 이 필드에 허용되는 값과 일치하지 않습니다." -#: utils/adt/formatting.c:2832 utils/adt/formatting.c:2852 -#: utils/adt/formatting.c:2872 utils/adt/formatting.c:2892 -#: utils/adt/formatting.c:2911 utils/adt/formatting.c:2930 -#: utils/adt/formatting.c:2954 utils/adt/formatting.c:2972 -#: utils/adt/formatting.c:2990 utils/adt/formatting.c:3008 -#: utils/adt/formatting.c:3025 utils/adt/formatting.c:3042 +#: 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 #, c-format msgid "localized string format value too long" msgstr "자국어화 문자열 포멧 값이 너무 깁니다" -#: utils/adt/formatting.c:3322 +#: utils/adt/formatting.c:3458 #, c-format msgid "unmatched format separator \"%c\"" msgstr "맞지 않는 구분자 포멧 \"%c\"" -#: utils/adt/formatting.c:3383 +#: utils/adt/formatting.c:3519 #, c-format msgid "unmatched format character \"%s\"" msgstr "짝이 안 맞는 \"%s\" 문자" -#: utils/adt/formatting.c:3491 +#: utils/adt/formatting.c:3652 #, c-format -msgid "formatting field \"%s\" is only supported in to_char" -msgstr "\"%s\" 필드 양식은 to_char 함수에서만 지원합니다." +msgid "Time zone abbreviation is not recognized." +msgstr "시간대 약어를 알 수 없습니다." -#: utils/adt/formatting.c:3665 +#: utils/adt/formatting.c:3853 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "\"Y,YYY\"에 대한 입력 문자열이 잘못됨" -#: utils/adt/formatting.c:3754 +#: utils/adt/formatting.c:3942 #, c-format msgid "input string is too short for datetime format" msgstr "입력 문자열이 datetime 양식용으로는 너무 짧습니다" -#: utils/adt/formatting.c:3762 +#: utils/adt/formatting.c:3950 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "날짜 및 시간 형식 후 입력 문자열에 남은 문자가 있습니다." -#: utils/adt/formatting.c:4319 +#: utils/adt/formatting.c:4494 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "timestamptz 자료형을 위한 입력 문자열에 시간대가 누락되었습니다." -#: utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4500 #, c-format msgid "timestamptz out of range" msgstr "timestamptz 범위를 벗어남" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4528 #, c-format msgid "datetime format is zoned but not timed" msgstr "datetime 양식이 지역시간대값이 있는데, 시간값이 아님" -#: utils/adt/formatting.c:4411 +#: utils/adt/formatting.c:4577 #, c-format msgid "missing time zone in input string for type timetz" msgstr "timetz 자료형을 위한 입력 문자열에 시간대가 누락되었습니다." -#: utils/adt/formatting.c:4417 +#: utils/adt/formatting.c:4583 #, c-format msgid "timetz out of range" msgstr "timetz 범위를 벗어남" -#: utils/adt/formatting.c:4443 +#: utils/adt/formatting.c:4609 #, c-format msgid "datetime format is not dated and not timed" msgstr "날짜시간 형식이 날짜도 아니고, 시간도 아닙니다." -#: utils/adt/formatting.c:4575 +#: utils/adt/formatting.c:4786 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "시간 \"%d\"은(는) 12시간제에 유효하지 않음" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4788 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "24시간제를 사용하거나 1에서 12 사이의 시간을 지정하십시오." -#: utils/adt/formatting.c:4689 +#: utils/adt/formatting.c:4900 #, c-format msgid "cannot calculate day of year without year information" msgstr "연도 정보 없이 몇번째 날(day of year) 인지 계산할 수 없습니다." -#: utils/adt/formatting.c:5621 +#: utils/adt/formatting.c:5852 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" 입력 양식은 지원되지 않습니다." -#: utils/adt/formatting.c:5633 +#: utils/adt/formatting.c:5864 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" 입력 양식은 지원되지 않습니다." @@ -25959,12 +27104,7 @@ msgstr "\"%s\" 파일에서 seek 작업을 할 수 없음: %m" msgid "file length too large" msgstr "파일 길이가 너무 깁니다" -#: utils/adt/genfile.c:248 -#, c-format -msgid "must be superuser to read files with adminpack 1.0" -msgstr "adminpack 1.0 확장 모듈을 사용할 때는 파일을 읽으려면 슈퍼유져여야함" - -#: utils/adt/genfile.c:702 +#: utils/adt/genfile.c:656 #, c-format msgid "tablespace with OID %u does not exist" msgstr "OID %u 테이블스페이스 없음" @@ -26020,295 +27160,295 @@ msgstr "적어도 2개의 point들이 필요합니다." msgid "invalid int2vector data" msgstr "잘못된 int2vector 자료" -#: utils/adt/int.c:1529 utils/adt/int8.c:1404 utils/adt/numeric.c:1749 -#: utils/adt/timestamp.c:5797 utils/adt/timestamp.c:5879 +#: 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 "단계 크기는 0일 수 없음" -#: utils/adt/int8.c:449 utils/adt/int8.c:472 utils/adt/int8.c:486 -#: utils/adt/int8.c:500 utils/adt/int8.c:531 utils/adt/int8.c:555 -#: utils/adt/int8.c:637 utils/adt/int8.c:705 utils/adt/int8.c:711 -#: utils/adt/int8.c:737 utils/adt/int8.c:751 utils/adt/int8.c:775 -#: utils/adt/int8.c:788 utils/adt/int8.c:900 utils/adt/int8.c:914 -#: utils/adt/int8.c:928 utils/adt/int8.c:959 utils/adt/int8.c:981 -#: utils/adt/int8.c:995 utils/adt/int8.c:1009 utils/adt/int8.c:1042 -#: utils/adt/int8.c:1056 utils/adt/int8.c:1070 utils/adt/int8.c:1101 -#: utils/adt/int8.c:1123 utils/adt/int8.c:1137 utils/adt/int8.c:1151 -#: utils/adt/int8.c:1313 utils/adt/int8.c:1348 utils/adt/numeric.c:4459 -#: utils/adt/rangetypes.c:1528 utils/adt/rangetypes.c:1541 +#: 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: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의 범위를 벗어났습니다." -#: utils/adt/int8.c:1361 +#: utils/adt/int8.c:1360 #, c-format msgid "OID out of range" msgstr "OID의 범위를 벗어났습니다." -#: utils/adt/json.c:320 utils/adt/jsonb.c:781 +#: utils/adt/json.c:202 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "" "키 값은 스칼라 형이어야 함. 배열, 복합 자료형, json 형은 사용할 수 없음" -#: utils/adt/json.c:1113 utils/adt/json.c:1123 utils/fmgr/funcapi.c:2082 +#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 #, c-format msgid "could not determine data type for argument %d" msgstr "%d번째 인자의 자료형을 알수가 없습니다." -#: utils/adt/json.c:1146 utils/adt/json.c:1337 utils/adt/json.c:1513 -#: utils/adt/json.c:1591 utils/adt/jsonb.c:1432 utils/adt/jsonb.c:1522 +#: 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 "개체 키 값으로 null 을 허용하지 않음" -#: utils/adt/json.c:1189 utils/adt/json.c:1352 +#: 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:1297 utils/adt/jsonb.c:1233 +#: 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:1299 utils/adt/jsonb.c:1235 +#: 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 함수의 인자들은 각각 key, value 쌍으로 있어야 합니다." -#: utils/adt/json.c:1491 utils/adt/jsonb.c:1410 +#: utils/adt/json.c:1427 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "배열은 두개의 칼럼이어야 함" -#: utils/adt/json.c:1580 utils/adt/jsonb.c:1511 +#: utils/adt/json.c:1516 utils/adt/jsonb.c:1412 #, c-format msgid "mismatched array dimensions" msgstr "배열 차수가 안맞음" -#: utils/adt/json.c:1764 utils/adt/jsonb_util.c:1958 +#: utils/adt/json.c:1702 utils/adt/jsonb_util.c:1956 #, c-format msgid "duplicate JSON object key value" msgstr "JSON 객체 키 값 중복" -#: utils/adt/jsonb.c:294 +#: utils/adt/jsonb.c:282 #, c-format msgid "string too long to represent as jsonb string" msgstr "jsonb 문자열로 길이를 초과함" -#: utils/adt/jsonb.c:295 +#: utils/adt/jsonb.c:283 #, c-format msgid "" "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "구현상 제한으로 jsonb 문자열은 %d 바이트를 넘을 수 없습니다." -#: utils/adt/jsonb.c:1252 +#: utils/adt/jsonb.c:1153 #, c-format msgid "argument %d: key must not be null" msgstr "%d 번째 인자: 키 값은 null이면 안됩니다." -#: utils/adt/jsonb.c:1843 +#: utils/adt/jsonb.c:1744 #, c-format msgid "field name must not be null" msgstr "필드 이름이 null 이면 안됩니다" -#: utils/adt/jsonb.c:1905 +#: utils/adt/jsonb.c:1806 #, c-format msgid "object keys must be strings" msgstr "개체 키는 문자열이어야 합니다" -#: utils/adt/jsonb.c:2116 +#: utils/adt/jsonb.c:2017 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "jsonb null 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:2117 +#: utils/adt/jsonb.c:2018 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "jsonb 문자열 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:2118 +#: utils/adt/jsonb.c:2019 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "jsonb 숫자 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:2119 +#: utils/adt/jsonb.c:2020 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "jsonb 불리언 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:2120 +#: utils/adt/jsonb.c:2021 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "jsonb 배열 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:2121 +#: utils/adt/jsonb.c:2022 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "jsonb object 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:2122 +#: utils/adt/jsonb.c:2023 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "jsonb object나 배열 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb_util.c:758 +#: utils/adt/jsonb_util.c:756 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "jsonb 개체 쌍의 개수가 최대치를 초과함 (%zu)" -#: utils/adt/jsonb_util.c:799 +#: utils/adt/jsonb_util.c:797 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "jsonb 배열 요소 개수가 최대치를 초과함 (%zu)" -#: utils/adt/jsonb_util.c:1673 utils/adt/jsonb_util.c:1693 +#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" msgstr "jsonb 배열 요소 총 크기가 최대치를 초과함 (%d 바이트)" -#: utils/adt/jsonb_util.c:1754 utils/adt/jsonb_util.c:1789 -#: utils/adt/jsonb_util.c:1809 +#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 +#: utils/adt/jsonb_util.c:1807 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" msgstr "jsonb 개체 요소들의 총 크기가 최대치를 초과함 (%d 바이트)" -#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:151 +#: utils/adt/jsonbsubs.c:67 utils/adt/jsonbsubs.c:148 #, c-format msgid "jsonb subscript does not support slices" msgstr "jsonb 서브스크립트가 slice를 지원하지 않음" -#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:117 +#: utils/adt/jsonbsubs.c:100 utils/adt/jsonbsubs.c:114 #, c-format msgid "subscript type %s is not supported" msgstr "%s 자료형은 서브스크립트를 지원하지 않음" -#: utils/adt/jsonbsubs.c:104 +#: utils/adt/jsonbsubs.c:101 #, c-format msgid "jsonb subscript must be coercible to only one type, integer or text." msgstr "jsonb 서브스크립트로는 숫자 또는 문자열 중 하나만 쓸 수 있음" -#: utils/adt/jsonbsubs.c:118 +#: utils/adt/jsonbsubs.c:115 #, c-format msgid "jsonb subscript must be coercible to either integer or text." msgstr "jsonb 서브스크립트로는 숫자 또는 문자열 중 하나만 쓸 수 있음" -#: utils/adt/jsonbsubs.c:139 +#: utils/adt/jsonbsubs.c:136 #, c-format msgid "jsonb subscript must have text type" msgstr "배열 서브스크립트는 반드시 문자열이어야합니다." -#: utils/adt/jsonbsubs.c:207 +#: utils/adt/jsonbsubs.c:204 #, c-format msgid "jsonb subscript in assignment must not be null" msgstr "jsonb 서브스크립트로 null 값이 올 수 없음" -#: utils/adt/jsonfuncs.c:572 utils/adt/jsonfuncs.c:821 -#: utils/adt/jsonfuncs.c:2429 utils/adt/jsonfuncs.c:2881 -#: utils/adt/jsonfuncs.c:3676 utils/adt/jsonfuncs.c:4018 +#: 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:577 utils/adt/jsonfuncs.c:806 -#: utils/adt/jsonfuncs.c:2883 utils/adt/jsonfuncs.c:3663 +#: 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:636 jsonpath_scan.l:596 +#: utils/adt/jsonfuncs.c:647 jsonpath_scan.l:607 #, c-format msgid "unsupported Unicode escape sequence" msgstr "지원하지 않는 유니코드 이스케이프 조합" -#: utils/adt/jsonfuncs.c:713 +#: 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:1875 utils/adt/jsonfuncs.c:1912 +#: 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:1879 utils/adt/jsonfuncs.c:1898 +#: 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:1978 +#: utils/adt/jsonfuncs.c:1986 #, c-format msgid "cannot call %s on a non-object" msgstr "비개체형에서 %s 호출 할 수 없음" -#: utils/adt/jsonfuncs.c:2166 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct an array as an object" msgstr "배열을 객체로 해체할 수 없음" -#: utils/adt/jsonfuncs.c:2180 +#: utils/adt/jsonfuncs.c:2188 #, c-format msgid "cannot deconstruct a scalar" msgstr "스칼라형으로 재구축할 수 없음" -#: utils/adt/jsonfuncs.c:2225 +#: utils/adt/jsonfuncs.c:2233 #, c-format msgid "cannot extract elements from a scalar" msgstr "스칼라형에서 요소를 추출할 수 없음" -#: utils/adt/jsonfuncs.c:2229 +#: utils/adt/jsonfuncs.c:2237 #, c-format msgid "cannot extract elements from an object" msgstr "개체형에서 요소를 추출할 수 없음" -#: utils/adt/jsonfuncs.c:2414 utils/adt/jsonfuncs.c:3896 +#: 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:2488 utils/adt/jsonfuncs.c:2493 -#: utils/adt/jsonfuncs.c:2510 utils/adt/jsonfuncs.c:2516 +#: 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:2489 +#: utils/adt/jsonfuncs.c:2516 #, c-format msgid "See the value of key \"%s\"." msgstr "\"%s\" 키의 값을 지정하세요" -#: utils/adt/jsonfuncs.c:2511 +#: utils/adt/jsonfuncs.c:2539 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "%s 배열 요소, 해당 키: \"%s\" 참조" -#: utils/adt/jsonfuncs.c:2517 +#: utils/adt/jsonfuncs.c:2545 #, c-format msgid "See the array element %s." msgstr "배열 요소: %s 참조" -#: utils/adt/jsonfuncs.c:2552 +#: 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:3389 +#: utils/adt/jsonfuncs.c:3647 #, c-format msgid "first argument of %s must be a row type" msgstr "%s의 첫번째 인자는 row 형이어야 합니다" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3413 +#: utils/adt/jsonfuncs.c:3671 #, c-format msgid "could not determine row type for result of %s" msgstr "%s 함수의 반환 로우 자료형을 알수가 없음" -#: utils/adt/jsonfuncs.c:3415 +#: utils/adt/jsonfuncs.c:3673 #, c-format msgid "" "Provide a non-null record argument, or call the function in the FROM clause " @@ -26317,52 +27457,52 @@ msgstr "" "non-null 레코드 인자를 지정하거나, 함수를 호출 할 때 FROM 절에서 칼럼 정의 목" "록도 함께 지정해야 합니다." -#: utils/adt/jsonfuncs.c:3785 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 "materialize 모드가 필요합니다만, 이 구문에서는 허용되지 않습니다" -#: utils/adt/jsonfuncs.c:3913 utils/adt/jsonfuncs.c:3997 +#: 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:3946 +#: utils/adt/jsonfuncs.c:4223 #, c-format msgid "cannot call %s on an object" msgstr "개체에서 %s 호출할 수 없음" -#: utils/adt/jsonfuncs.c:4380 utils/adt/jsonfuncs.c:4439 -#: utils/adt/jsonfuncs.c:4519 +#: 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:4524 +#: utils/adt/jsonfuncs.c:4800 #, c-format msgid "cannot delete from object using integer index" msgstr "인덱스 번호를 사용해서 개체에서 삭제 할 수 없음" -#: utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4751 +#: utils/adt/jsonfuncs.c:4868 utils/adt/jsonfuncs.c:5027 #, c-format msgid "cannot set path in scalar" msgstr "스칼라형에는 path 를 지정할 수 없음" -#: utils/adt/jsonfuncs.c:4633 utils/adt/jsonfuncs.c:4675 +#: 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 "" -"null_value_treatment 값은 \"delete_key\", \"return_target\", \"use_json_null" -"\" 또는 \"raise_exception\" 이어야 합니다." +"null_value_treatment 값은 \"delete_key\", \"return_target\", " +"\"use_json_null\" 또는 \"raise_exception\" 이어야 합니다." -#: utils/adt/jsonfuncs.c:4646 +#: utils/adt/jsonfuncs.c:4922 #, c-format msgid "JSON value must not be null" msgstr "JSON 값으로 null을 사용할 수 없음" -#: utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonfuncs.c:4923 #, c-format msgid "" "Exception was raised because null_value_treatment is \"raise_exception\"." @@ -26370,7 +27510,7 @@ msgstr "" "null_value_treatment 설정값이 \"raise_exception\"으로 되어 있어 예외를 일으켰" "습니다." -#: utils/adt/jsonfuncs.c:4648 +#: utils/adt/jsonfuncs.c:4924 #, c-format msgid "" "To avoid, either change the null_value_treatment argument or ensure that an " @@ -26379,231 +27519,335 @@ msgstr "" "이 상황을 피하려면, null_value_treatment 설정을 바꾸든지, SQL NULL 값을 사용" "하지 않아야 합니다." -#: utils/adt/jsonfuncs.c:4703 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "cannot delete path in scalar" msgstr "스칼라형에서 path를 지울 수 없음" -#: utils/adt/jsonfuncs.c:4917 +#: utils/adt/jsonfuncs.c:5193 #, c-format msgid "path element at position %d is null" msgstr "%d 위치의 path 요소는 null 입니다." -#: utils/adt/jsonfuncs.c:4936 utils/adt/jsonfuncs.c:4967 -#: utils/adt/jsonfuncs.c:5040 +#: 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:4937 utils/adt/jsonfuncs.c:4968 +#: 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 "path assumes key는 복합 자료형인데, 스칼라 값이 사용되고 있습니다." -#: utils/adt/jsonfuncs.c:5041 +#: utils/adt/jsonfuncs.c:5317 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "키 값을 변경하려면, jsonb_set 함수를 사용하세요." -#: utils/adt/jsonfuncs.c:5145 +#: utils/adt/jsonfuncs.c:5421 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "%d 번째 위치의 path 요소는 정수가 아님: \"%s\"" -#: utils/adt/jsonfuncs.c:5162 +#: utils/adt/jsonfuncs.c:5438 #, c-format msgid "path element at position %d is out of range: %d" msgstr "%d 번째 위치의 path 요소는 범위를 벗어남: %d" -#: utils/adt/jsonfuncs.c:5314 +#: utils/adt/jsonfuncs.c:5590 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "잘못된 플래그 자료형, 배열이나, 스칼라 형만 허용합니다." -#: utils/adt/jsonfuncs.c:5321 +#: utils/adt/jsonfuncs.c:5597 #, c-format msgid "flag array element is not a string" msgstr "플래그 배열 요소가 문자열이 아님" -#: utils/adt/jsonfuncs.c:5322 utils/adt/jsonfuncs.c:5344 +#: utils/adt/jsonfuncs.c:5598 utils/adt/jsonfuncs.c:5620 #, c-format msgid "" -"Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all" -"\"." +"Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and " +"\"all\"." msgstr "" "사용 가능한 값: \"string\", \"numeric\", \"boolean\", \"key\", \"all\"." -#: utils/adt/jsonfuncs.c:5342 +#: utils/adt/jsonfuncs.c:5618 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "플래그 배열 안에 잘못된 플래그: \"%s\"" -#: utils/adt/jsonpath.c:382 +#: utils/adt/jsonpath.c:389 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ 기호는 루트 표현식에서는 사용할 수 없음" -#: utils/adt/jsonpath.c:388 +#: utils/adt/jsonpath.c:395 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST 키워드는 배열 하위 스크립트 전용임" -#: utils/adt/jsonpath_exec.c:361 +#: utils/adt/jsonpath_exec.c:491 #, c-format msgid "single boolean result is expected" msgstr "단일 불리언 반환값이 예상 됨" -#: utils/adt/jsonpath_exec.c:557 +#: utils/adt/jsonpath_exec.c:851 #, c-format -msgid "\"vars\" argument is not an object" -msgstr "\"vars\" 인자가 객체가 아닙니다." +msgid "jsonpath wildcard array accessor can only be applied to an array" +msgstr "jsonpath wildcard array accessor는 하나의 배열을 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:558 +#: utils/adt/jsonpath_exec.c:874 #, c-format -msgid "" -"Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." -msgstr "jsonpath 매개 변수는 \"vars\" 객체의 키-값 쌍으로 인코드 되어야합니다." +msgid "jsonpath wildcard member accessor can only be applied to an object" +msgstr "jsonpath wildcard member accessor는 하나의 객체를 대상으로 합니다." + +#: utils/adt/jsonpath_exec.c:923 +#, c-format +msgid "jsonpath array subscript is out of bounds" +msgstr "jsonpath 배열 하위 스크립트 범위를 초과했습니다" + +#: utils/adt/jsonpath_exec.c:980 +#, c-format +msgid "jsonpath array accessor can only be applied to an array" +msgstr "jsonpath array accessor는 하나의 배열을 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:675 +#: utils/adt/jsonpath_exec.c:1044 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSON 객체 안에 \"%s\" 이름의 키가 없습니다." -#: utils/adt/jsonpath_exec.c:687 +#: utils/adt/jsonpath_exec.c:1056 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "jsonpath member accessor는 하나의 객체를 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:716 +#: utils/adt/jsonpath_exec.c:1114 #, c-format -msgid "jsonpath wildcard array accessor can only be applied to an array" -msgstr "jsonpath wildcard array accessor는 하나의 배열을 대상으로 합니다." +msgid "jsonpath item method .%s() can only be applied to an array" +msgstr "jsonpath .%s() item method는 하나의 배열을 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:764 +#: utils/adt/jsonpath_exec.c:1167 utils/adt/jsonpath_exec.c:1193 #, c-format -msgid "jsonpath array subscript is out of bounds" -msgstr "jsonpath 배열 하위 스크립트 범위를 초과했습니다" +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:821 +#: 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 "jsonpath array accessor can only be applied to an array" -msgstr "jsonpath array accessor는 하나의 배열을 대상으로 합니다." +msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" +msgstr "jsonpath item method .%s()용으로 NaN 또는 Infinity는 허용하지 않음" -#: utils/adt/jsonpath_exec.c:873 +#: 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 wildcard member accessor can only be applied to an object" -msgstr "jsonpath wildcard member accessor는 하나의 객체를 대상으로 합니다." +msgid "" +"jsonpath item method .%s() can only be applied to a string or numeric value" +msgstr "jsonpath item method .%s() 대상은 문자열이나, 숫자 값만 허용합니다." -#: utils/adt/jsonpath_exec.c:1007 +#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 #, c-format -msgid "jsonpath item method .%s() can only be applied to an array" -msgstr "jsonpath .%s() item method는 하나의 배열을 대상으로 합니다." +msgid "" +"argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" +msgstr "" +"\"%s\" 인자(대상 jsonpath 아이템 메서드: .%s())는 바르지 않은 bigint형임" -#: utils/adt/jsonpath_exec.c:1060 +#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 #, c-format msgid "" -"numeric argument of jsonpath item method .%s() is out of range for type " -"double precision" +"argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" msgstr "" -"jsonpath 아이템 메서드 .%s() 의 숫자 인자가 double precision 형의 범위를 벗어" -"남" +"\"%s\" 인자(대상 jsonpath 아이템 메서드: .%s())는 바르지 않은 boolean형임" + +#: utils/adt/jsonpath_exec.c:1386 +#, c-format +msgid "" +"jsonpath item method .%s() can only be applied to a boolean, string, or " +"numeric value" +msgstr "jsonpath item method .%s() 대상은 불리언, 문자열이나, 숫자 값만 허용합니다." -#: utils/adt/jsonpath_exec.c:1081 +#: utils/adt/jsonpath_exec.c:1439 utils/adt/jsonpath_exec.c:1528 #, c-format msgid "" -"string argument of jsonpath item method .%s() is not a valid representation " -"of a double precision number" +"argument \"%s\" of jsonpath item method .%s() is invalid for type numeric" msgstr "" -"jsonpath item method .%s()의 문자열 인자가 double precision 숫자로 표현되는 " -"형식이 아닙니다." +"\"%s\" 인자(대상 jsonpath 아이템 메서드: .%s())는 바르지 않은 numeric형임" -#: utils/adt/jsonpath_exec.c:1094 +#: utils/adt/jsonpath_exec.c:1487 #, c-format msgid "" -"jsonpath item method .%s() can only be applied to a string or numeric value" -msgstr "jsonpath item method .%s() 대상은 문자열이나, 숫자 값만 허용합니다." +"precision of jsonpath item method .%s() is out of range for type integer" +msgstr "" +"jsonpath 아이템 메서드 .%s() 의 precision이 정수 범위를 벗어남" + +#: utils/adt/jsonpath_exec.c:1501 +#, c-format +msgid "scale of jsonpath item method .%s() is out of range for type integer" +msgstr "" +"jsonpath 아이템 메서드 .%s() 의 스케일이 정수 범위를 벗어남" + +#: 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 "" +"\"%s\" 인자(대상 jsonpath 아이템 메서드: .%s())는 바르지 않은 integer형임" + +#: utils/adt/jsonpath_exec.c:1648 +#, c-format +msgid "" +"jsonpath item method .%s() can only be applied to a boolean, string, " +"numeric, or datetime value" +msgstr "jsonpath item method .%s() 대상은 불리언, 문자열이나, 숫자 값만 허용합니다." -#: utils/adt/jsonpath_exec.c:1584 +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "jsonpath %s 연산자의 왼쪽 값이 단일 숫자값이 아닙니다." -#: utils/adt/jsonpath_exec.c:1591 +#: utils/adt/jsonpath_exec.c:2144 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "jsonpath %s 연산자의 오른쪽 값이 단일 숫자값이 아닙니다." -#: utils/adt/jsonpath_exec.c:1659 +#: utils/adt/jsonpath_exec.c:2212 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "jsonpath %s 단항 연산용 값이 숫자가 아닙니다." -#: utils/adt/jsonpath_exec.c:1758 +#: utils/adt/jsonpath_exec.c:2311 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "jsonpath .%s() 항목 메서드는 숫자값만 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:1798 +#: utils/adt/jsonpath_exec.c:2357 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "jsonpath .%s() 항목 메서드는 문자열만 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:1901 +#: utils/adt/jsonpath_exec.c:2450 +#, c-format +msgid "" +"time precision of jsonpath item method .%s() is out of range for type integer" +msgstr "" +"jsonpath 아이템 메서드 .%s()의 time precision이 정수 범위를 벗어남" + +#: 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 "datetime format is not recognized: \"%s\"" -msgstr "알 수 없는 datetime 양식: \"%s\"" +msgid "%s format is not recognized: \"%s\"" +msgstr "%s 포멧은 알 수 없음: \"%s\"" -#: utils/adt/jsonpath_exec.c:1903 +#: utils/adt/jsonpath_exec.c:2486 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "입력 자료 형식을 지정하는 datetime 템플릿 인자를 사용하세요." -#: utils/adt/jsonpath_exec.c:1971 +#: 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 "" +"jsonpath 아이템 메서드 .%s() 의 time precision이 잘못됨" +"남" + +#: utils/adt/jsonpath_exec.c:2840 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "jsonpath .%s() 항목 메서드는 객체만 대상으로 합니다." -#: utils/adt/jsonpath_exec.c:2153 +#: 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:3158 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "\"%s\" jsonpath 변수 찾기 실패" -#: utils/adt/jsonpath_exec.c:2417 +#: utils/adt/jsonpath_exec.c:3211 +#, c-format +msgid "\"vars\" argument is not an object" +msgstr "\"vars\" 인자가 객체가 아닙니다." + +#: utils/adt/jsonpath_exec.c:3212 +#, c-format +msgid "" +"Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgstr "jsonpath 매개 변수는 \"vars\" 객체의 키-값 쌍으로 인코드 되어야합니다." + +#: utils/adt/jsonpath_exec.c:3475 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "jsonpath 배열 첨자가 단일 숫자값이 아닙니다." -#: utils/adt/jsonpath_exec.c:2429 +#: utils/adt/jsonpath_exec.c:3487 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "jsonpath 배열 하위 스크립트가 정수 범위를 초과했음" -#: utils/adt/jsonpath_exec.c:2606 +#: utils/adt/jsonpath_exec.c:3671 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "지역 시간대 지정 없이는 %s에서 %s로 값을 바꿀 수 없습니다." -#: utils/adt/jsonpath_exec.c:2608 +#: utils/adt/jsonpath_exec.c:3673 #, c-format msgid "Use *_tz() function for time zone support." msgstr "지역 시간대를 지정하려면, *_tz() 함수를 사용하세요." +#: utils/adt/jsonpath_exec.c:3981 +#, c-format +msgid "" +"JSON path expression for column \"%s\" should return single item without " +"wrapper" +msgstr "" +"\"%s\" 칼럼의 JSON 패스 표현식은 wrapper 없이 단일 아이템을 반환해야 함" + +#: utils/adt/jsonpath_exec.c:3983 utils/adt/jsonpath_exec.c:3988 +#, c-format +msgid "Use the WITH WRAPPER clause to wrap SQL/JSON items into an array." +msgstr "SQL/JSON 아이템을 배열로 만들려면, WITH WRAPPER 절을 사용하세요." + +#: utils/adt/jsonpath_exec.c:3987 +#, c-format +msgid "" +"JSON path expression in JSON_QUERY should return single item without wrapper" +msgstr "" +"JSON_QUERY 안 JSON 패스 표현식은 wrapper 없이 단일 아이템을 반환해야 함" + +#: 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" +msgstr "\"%s\" 칼럼을 위한 JSON 패스 표현식은 단일 스칼라 아이템을 반환해야 함" + +#: 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" +msgstr "JSON_VALUE 안 JSON 패스 표현식은 단일 스칼라 아이템을 반환해야 함" + #: utils/adt/levenshtein.c:132 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "levenshtein 인자값으로 그 길이가 %d 문자의 최대 길이를 초과했음" -#: utils/adt/like.c:161 +#: utils/adt/like.c:159 #, c-format msgid "nondeterministic collations are not supported for LIKE" msgstr "LIKE 연산에서 사용할 비결정 정렬규칙(collation)은 지원하지 않음" -#: utils/adt/like.c:190 utils/adt/like_support.c:1024 +#: utils/adt/like.c:188 utils/adt/like_support.c:1023 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "ILIKE 연산에서 사용할 정렬규칙(collation)을 결정할 수 없음" -#: utils/adt/like.c:202 +#: utils/adt/like.c:200 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "ILIKE 연산에서 사용할 비결정 정렬규칙(collation)은 지원하지 않음" @@ -26613,22 +27857,22 @@ msgstr "ILIKE 연산에서 사용할 비결정 정렬규칙(collation)은 지원 msgid "LIKE pattern must not end with escape character" msgstr "LIKE 패턴은 이스케이프 문자로 끝나지 않아야 함" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "잘못된 이스케이프 문자열" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:802 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "이스케이프 문자열은 비어있거나 한개의 문자여야 합니다." -#: utils/adt/like_support.c:1014 +#: utils/adt/like_support.c:1013 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "bytea 형식에서는 대/소문자를 구분하지 않는 일치가 지원되지 않음" -#: utils/adt/like_support.c:1115 +#: utils/adt/like_support.c:1114 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "bytea 형식에서는 정규식 일치가 지원되지 않음" @@ -26638,12 +27882,12 @@ msgstr "bytea 형식에서는 정규식 일치가 지원되지 않음" msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "\"macaddr\"에 대한 잘못된 옥텟(octet) 값: \"%s\"" -#: utils/adt/mac8.c:554 +#: utils/adt/mac8.c:555 #, c-format msgid "macaddr8 data out of range to convert to macaddr" msgstr "macaddr8 자료가 macaddr 형으로 변환하기에는 그 범위가 너무 넓습니다." -#: utils/adt/mac8.c:555 +#: utils/adt/mac8.c:556 #, c-format msgid "" "Only addresses that have FF and FE as values in the 4th and 5th bytes from " @@ -26653,7 +27897,7 @@ msgstr "" "macaddr8에서 macaddr 형으로 변환 할 수 있는 값은 왼쪽에서 4번째, 5번째 바이트" "가 FF와 FE 값(예: xx:xx:xx:ff:fe:xx:xx:xx)인 경우일 때만입니다." -#: utils/adt/mcxtfuncs.c:182 +#: utils/adt/mcxtfuncs.c:173 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d 프로그램은 PostgreSQL 서버 프로세스가 아닙니다" @@ -26686,76 +27930,76 @@ msgstr "예약됨" #: utils/adt/misc.c:477 msgid "can be bare label" -msgstr "" +msgstr "베어 라벨 가능" #: utils/adt/misc.c:482 msgid "requires AS" msgstr "AS 필요함" -#: utils/adt/misc.c:853 utils/adt/misc.c:867 utils/adt/misc.c:906 -#: utils/adt/misc.c:912 utils/adt/misc.c:918 utils/adt/misc.c:941 +#: utils/adt/misc.c:897 utils/adt/misc.c:911 utils/adt/misc.c:950 +#: utils/adt/misc.c:956 utils/adt/misc.c:962 utils/adt/misc.c:985 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "문자열이 타당한 식별자가 아님: \"%s\"" -#: utils/adt/misc.c:855 +#: utils/adt/misc.c:899 #, c-format msgid "String has unclosed double quotes." msgstr "문자열 표기에서 큰따옴표 짝이 안맞습니다." -#: utils/adt/misc.c:869 +#: utils/adt/misc.c:913 #, c-format msgid "Quoted identifier must not be empty." msgstr "인용부호 있는 식별자: 비어있으면 안됩니다" -#: utils/adt/misc.c:908 +#: utils/adt/misc.c:952 #, c-format msgid "No valid identifier before \".\"." msgstr "\".\" 전에 타당한 식별자가 없음" -#: utils/adt/misc.c:914 +#: utils/adt/misc.c:958 #, c-format msgid "No valid identifier after \".\"." msgstr "\".\" 뒤에 타당한 식별자 없음" -#: utils/adt/misc.c:974 +#: utils/adt/misc.c:1018 #, c-format msgid "log format \"%s\" is not supported" msgstr "\"%s\" 양식의 로그는 지원하지 않습니다" -#: utils/adt/misc.c:975 +#: utils/adt/misc.c:1019 #, c-format msgid "The supported log formats are \"stderr\", \"csvlog\", and \"jsonlog\"." msgstr "사용할 수 있는 로그 양식은 \"stderr\", \"csvlog\", \"jsonlog\" 입니다." -#: utils/adt/multirangetypes.c:151 utils/adt/multirangetypes.c:164 -#: utils/adt/multirangetypes.c:193 utils/adt/multirangetypes.c:267 -#: utils/adt/multirangetypes.c:291 +#: utils/adt/multirangetypes.c:150 utils/adt/multirangetypes.c:163 +#: utils/adt/multirangetypes.c:192 utils/adt/multirangetypes.c:266 +#: utils/adt/multirangetypes.c:290 #, c-format msgid "malformed multirange literal: \"%s\"" msgstr "비정상적인 multirange 문자열: \"%s\"" -#: utils/adt/multirangetypes.c:153 +#: utils/adt/multirangetypes.c:152 #, c-format msgid "Missing left brace." msgstr "왼쪽 중괄호가 필요합니다." -#: utils/adt/multirangetypes.c:195 +#: utils/adt/multirangetypes.c:194 #, c-format msgid "Expected range start." msgstr "범위 시작값 없음" -#: utils/adt/multirangetypes.c:269 +#: utils/adt/multirangetypes.c:268 #, c-format msgid "Expected comma or end of multirange." msgstr "multirange 구분자(,) 또는 끝이 없습니다." -#: utils/adt/multirangetypes.c:982 +#: utils/adt/multirangetypes.c:981 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "다중 차원 배열은 다중 범위 자료형으로 구성할 수 없습니다." -#: utils/adt/multirangetypes.c:1008 +#: utils/adt/multirangetypes.c:1007 #, c-format msgid "multirange values cannot contain null members" msgstr "multirange의 한 범위로 null 값이 올 수 없음" @@ -26834,102 +28078,122 @@ msgstr "결과가 범위를 벗어났습니다." msgid "cannot subtract inet values of different sizes" msgstr "inet 값에서 서로 크기가 틀리게 부분 추출(subtract)할 수 없음" -#: utils/adt/numeric.c:785 utils/adt/numeric.c:3643 utils/adt/numeric.c:7131 -#: utils/adt/numeric.c:7334 utils/adt/numeric.c:7806 utils/adt/numeric.c:10501 -#: utils/adt/numeric.c:10975 utils/adt/numeric.c:11069 -#: utils/adt/numeric.c:11203 +#: 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:1098 +#: utils/adt/numeric.c:1106 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "외부 \"numeric\" 값의 부호가 잘못됨" -#: utils/adt/numeric.c:1104 +#: utils/adt/numeric.c:1112 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "외부 \"numeric\" 값의 잘못된 스케일" -#: utils/adt/numeric.c:1113 +#: utils/adt/numeric.c:1121 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "외부 \"numeric\" 값의 숫자가 잘못됨" -#: utils/adt/numeric.c:1328 utils/adt/numeric.c:1342 +#: utils/adt/numeric.c:1336 utils/adt/numeric.c:1350 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "NUMERIC 정밀도 %d 값은 범위(1 .. %d)를 벗어났습니다." -#: utils/adt/numeric.c:1333 +#: utils/adt/numeric.c:1341 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "NUMERIC 스케일 %d 값은 %d부터 %d까지 입니다." -#: utils/adt/numeric.c:1351 +#: utils/adt/numeric.c:1359 #, c-format msgid "invalid NUMERIC type modifier" msgstr "잘못된 NUMERIC 형식 한정자" -#: utils/adt/numeric.c:1709 +#: utils/adt/numeric.c:1725 #, c-format msgid "start value cannot be NaN" msgstr "시작값은 NaN 일 수 없음" -#: utils/adt/numeric.c:1713 +#: utils/adt/numeric.c:1729 #, c-format msgid "start value cannot be infinity" msgstr "시작 값은 무한일 수 없음" -#: utils/adt/numeric.c:1720 +#: utils/adt/numeric.c:1736 #, c-format msgid "stop value cannot be NaN" msgstr "종료값은 NaN 일 수 없음" -#: utils/adt/numeric.c:1724 +#: utils/adt/numeric.c:1740 #, c-format msgid "stop value cannot be infinity" msgstr "종료값은 무한일 수 없음" -#: utils/adt/numeric.c:1737 +#: utils/adt/numeric.c:1753 #, c-format msgid "step size cannot be NaN" msgstr "단계 크기는 NaN 일 수 없음" -#: utils/adt/numeric.c:1741 +#: utils/adt/numeric.c:1757 #, c-format msgid "step size cannot be infinity" msgstr "단계 크기는 무한일 수 없음" -#: utils/adt/numeric.c:3633 +#: utils/adt/numeric.c:3649 #, c-format msgid "factorial of a negative number is undefined" msgstr "음수 거듭제곱이 정의되어 있지 않음" -#: utils/adt/numeric.c:4366 utils/adt/numeric.c:4446 utils/adt/numeric.c:4487 -#: utils/adt/numeric.c:4683 +#: utils/adt/numeric.c:4256 +#, c-format +msgid "lower bound cannot be NaN" +msgstr "lower bound는 NaN 일 수 없음" + +#: utils/adt/numeric.c:4260 +#, c-format +msgid "lower bound cannot be infinity" +msgstr "lower bound는 무한일 수 없음" + +#: utils/adt/numeric.c:4267 +#, c-format +msgid "upper bound cannot be NaN" +msgstr "upper bound는 NaN 일 수 없음" + +#: utils/adt/numeric.c:4271 +#, c-format +msgid "upper bound cannot be infinity" +msgstr "upper bound는 무한일 수 없음" + +#: 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:4370 utils/adt/numeric.c:4450 utils/adt/numeric.c:4491 -#: utils/adt/numeric.c:4687 +#: 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:4696 +#: utils/adt/numeric.c:4789 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn 값의 범위를 벗어났습니다." -#: utils/adt/numeric.c:7896 utils/adt/numeric.c:7947 +#: utils/adt/numeric.c:7981 utils/adt/numeric.c:8032 #, c-format msgid "numeric field overflow" msgstr "수치 필드 오버플로우" -#: utils/adt/numeric.c:7897 +#: utils/adt/numeric.c:7982 #, c-format msgid "" "A field with precision %d, scale %d must round to an absolute value less " @@ -26938,12 +28202,18 @@ msgstr "" "전체 자릿수 %d, 소수 자릿수 %d의 필드는 %s%d보다 작은 절대 값으로 반올림해야 " "합니다." -#: utils/adt/numeric.c:7948 +#: utils/adt/numeric.c:8033 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "전체 자릿수 %d, 소수 자릿수 %d의 필드는 무한 값을 처리할 수 없음." -#: utils/adt/oid.c:216 +#: 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 "lower bound는 upper bound보다 작거나 같아야 함" + +#: utils/adt/oid.c:217 #, c-format msgid "invalid oidvector data" msgstr "잘못된 oidvector 자료" @@ -26973,36 +28243,41 @@ msgstr "요청한 문자가 너무 커서 인코딩할 수 없음: %u" msgid "requested character not valid for encoding: %u" msgstr "요청한 문자가 인코딩용으로 타당치 않음: %u" -#: utils/adt/orderedsetaggs.c:448 utils/adt/orderedsetaggs.c:553 -#: utils/adt/orderedsetaggs.c:693 +#: utils/adt/orderedsetaggs.c:446 utils/adt/orderedsetaggs.c:551 +#: utils/adt/orderedsetaggs.c:691 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "%g 퍼센트 값이 0과 1사이가 아닙니다." -#: utils/adt/pg_locale.c:1406 +#: utils/adt/pg_locale.c:326 utils/adt/pg_locale.c:358 +#, c-format +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "\"%s\" 로케일 이름에 사용할 수 없는 문자(non-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:1417 utils/adt/pg_locale.c:2831 -#: utils/adt/pg_locale.c:2904 +#: 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:1446 +#: utils/adt/pg_locale.c:1546 #, c-format msgid "could not create locale \"%s\": %m" msgstr "\"%s\" 로케일을 만들 수 없음: %m" -#: utils/adt/pg_locale.c:1449 +#: utils/adt/pg_locale.c:1549 #, c-format msgid "" -"The operating system could not find any locale data for the locale name \"%s" -"\"." +"The operating system could not find any locale data for the locale name " +"\"%s\"." msgstr "운영체제에서 \"%s\" 로케일 이름에 대한 로케일 파일을 찾을 수 없습니다." -#: utils/adt/pg_locale.c:1564 +#: utils/adt/pg_locale.c:1670 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -27011,22 +28286,17 @@ msgstr "" "이 플랫폼에서는 서로 다른 정렬규칙(collation)과 문자집합(ctype)을 함께 쓸 수 " "없습니다." -#: utils/adt/pg_locale.c:1573 -#, c-format -msgid "collation provider LIBC is not supported on this platform" -msgstr "이 플랫폼에서는 LIBC 문자 정렬 제공자 기능(ICU)을 지원하지 않음." - -#: utils/adt/pg_locale.c:1614 +#: utils/adt/pg_locale.c:1717 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "\"%s\" 문자 정렬 규칙은 버전이 없는데 버전을 지정했음" -#: utils/adt/pg_locale.c:1620 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "\"%s\" 문자 정렬 규칙은 버전이 맞지 않음" -#: utils/adt/pg_locale.c:1622 +#: utils/adt/pg_locale.c:1725 #, c-format msgid "" "The collation in the database was created using version %s, but the " @@ -27035,7 +28305,7 @@ msgstr "" "데이터베이스를 만들때 %s 버전으로 문자 정렬 규칙을 만들었는데, 현재 OS는 %s " "버전을 제공하고 있습니다." -#: utils/adt/pg_locale.c:1625 +#: utils/adt/pg_locale.c:1728 #, c-format msgid "" "Rebuild all objects affected by this collation and run ALTER COLLATION %s " @@ -27045,224 +28315,235 @@ msgstr "" "VERSION 명령을 실행하거나, 바른 라이브러리 버전을 지정해서, PostgreSQL을 빌드" "하세요." -#: utils/adt/pg_locale.c:1691 +#: 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:1814 #, c-format msgid "could not load locale \"%s\"" -msgstr "\"%s\" 로케일을 만들 수 없음: %m" +msgstr "\"%s\" 로케일을 불러올 수 없음" -#: utils/adt/pg_locale.c:1716 +#: utils/adt/pg_locale.c:1839 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "\"%s\" 로케일용 정렬 변환 규칙을 구할 수 없음: 오류 코드 %lu" -#: utils/adt/pg_locale.c:1772 utils/adt/pg_locale.c:1785 +#: 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 "UTF-16 인코딩으로 문자열을 변환할 수 없음: 오류번호 %lu" -#: utils/adt/pg_locale.c:1799 +#: utils/adt/pg_locale.c:1920 #, c-format msgid "could not compare Unicode strings: %m" msgstr "유니코드 문자열 비교 실패: %m" -#: utils/adt/pg_locale.c:1980 +#: utils/adt/pg_locale.c:2094 #, c-format msgid "collation failed: %s" msgstr "문자열 정렬: %s" -#: utils/adt/pg_locale.c:2201 utils/adt/pg_locale.c:2233 +#: 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:2474 +#: 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:2495 utils/adt/pg_locale.c:2511 +#: utils/adt/pg_locale.c:2656 utils/adt/pg_locale.c:2672 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "\"%s\" 로케일용 문자 정렬 규칙 열기 실패: %s" -#: utils/adt/pg_locale.c:2536 +#: utils/adt/pg_locale.c:2697 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "\"%s\" 인코딩은 ICU 기능을 지원하지 않음" -#: utils/adt/pg_locale.c:2543 +#: utils/adt/pg_locale.c:2704 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "\"%s\" 인코딩용 ICU 변환기 열기 실패: %s" -#: utils/adt/pg_locale.c:2561 utils/adt/pg_locale.c:2580 -#: utils/adt/pg_locale.c:2636 utils/adt/pg_locale.c:2647 +#: 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:2822 +#: 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:2863 +#: utils/adt/pg_locale.c:3024 #, c-format msgid "could not get language from ICU locale \"%s\": %s" msgstr "\"%s\" ICU 로케일에서 언어 찾기 실패: %s" -#: utils/adt/pg_locale.c:2865 utils/adt/pg_locale.c:2894 +#: 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:2892 +#: utils/adt/pg_locale.c:3053 #, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" msgstr "\"%s\" ICU 로케일은 알 수 없는 \"%s\" 언어를 사용합니다." -#: utils/adt/pg_locale.c:3073 +#: utils/adt/pg_locale.c:3204 #, c-format msgid "invalid multibyte character for locale" msgstr "로케일을 위한 잘못된 멀티바이트 문자" -#: utils/adt/pg_locale.c:3074 +#: utils/adt/pg_locale.c:3205 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " "encoding." msgstr "서버의 LC_CTYPE 로케일은 이 데이터베이스 인코딩과 호환되지 않습니다." -#: utils/adt/pg_lsn.c:263 +#: utils/adt/pg_lsn.c:262 #, c-format msgid "cannot add NaN to pg_lsn" msgstr "NaN 값을 pg_lsn 형으로 변환할 수 없습니다" -#: utils/adt/pg_lsn.c:297 +#: utils/adt/pg_lsn.c:296 #, c-format msgid "cannot subtract NaN from pg_lsn" msgstr "pg_lsn 에서는 NaN 형을 빼낼 수 없습니다" -#: utils/adt/pg_upgrade_support.c:29 +#: utils/adt/pg_upgrade_support.c:39 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "함수는 서버가 이진 업그레이드 상태에서만 호출 될 수 있습니다" -#: utils/adt/pgstatfuncs.c:254 +#: utils/adt/pgstatfuncs.c:252 #, c-format msgid "invalid command name: \"%s\"" msgstr "잘못된 명령어 이름: \"%s\"" -#: utils/adt/pgstatfuncs.c:1774 +#: utils/adt/pgstatfuncs.c:1739 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "알 수 없는 리셋 타겟: \"%s\"" -#: utils/adt/pgstatfuncs.c:1775 +#: utils/adt/pgstatfuncs.c:1740 #, c-format msgid "" -"Target must be \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", or " -"\"wal\"." +"Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", " +"\"recovery_prefetch\", \"slru\", or \"wal\"." msgstr "" -"사용 가능한 타겟은 \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch" -"\", \"wal\" 입니다." +"사용 가능한 타겟은 \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", " +"\"recovery_prefetch\", \"slru\", \"wal\" 입니다." -#: utils/adt/pgstatfuncs.c:1857 +#: utils/adt/pgstatfuncs.c:1822 #, c-format msgid "invalid subscription OID %u" msgstr "잘못된 구독 OID %u" -#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 +#: utils/adt/pseudorandomfuncs.c:69 +#, c-format +msgid "setseed parameter %g is out of allowed range [-1,1]" +msgstr "%g setseed 매개 변수가 [-1,1] 범위를 벗어났습니다." + +#: utils/adt/pseudotypes.c:55 utils/adt/pseudotypes.c:89 #, c-format msgid "cannot display a value of type %s" msgstr "%s 자료형의 값은 표시할 수 없음" -#: utils/adt/pseudotypes.c:310 +#: utils/adt/pseudotypes.c:307 #, c-format msgid "cannot accept a value of a shell type" msgstr "셸 형태 값은 사용할 수 없음" -#: utils/adt/pseudotypes.c:320 +#: utils/adt/pseudotypes.c:317 #, c-format msgid "cannot display a value of a shell type" msgstr "shell 형식의 값은 표시할 수 없음" -#: utils/adt/rangetypes.c:415 +#: utils/adt/rangetypes.c:422 #, c-format msgid "range constructor flags argument must not be null" msgstr "range 자료형 구성자 플래그 인자로 null을 사용할 수 없음" -#: utils/adt/rangetypes.c:1014 +#: utils/adt/rangetypes.c:1021 #, c-format msgid "result of range difference would not be contiguous" msgstr "범위 차이 결과가 연속적이지 않습니다." -#: utils/adt/rangetypes.c:1075 +#: utils/adt/rangetypes.c:1082 #, c-format msgid "result of range union would not be contiguous" msgstr "범위 결합 결과가 연속적이지 않습니다." -#: utils/adt/rangetypes.c:1750 +#: utils/adt/rangetypes.c:1757 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "range 자료형의 하한값은 상한값과 같거나 작아야 합니다" -#: utils/adt/rangetypes.c:2197 utils/adt/rangetypes.c:2210 -#: utils/adt/rangetypes.c:2224 +#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 +#: utils/adt/rangetypes.c:2283 #, c-format msgid "invalid range bound flags" msgstr "잘못된 range 구성 플래그" -#: utils/adt/rangetypes.c:2198 utils/adt/rangetypes.c:2211 -#: utils/adt/rangetypes.c:2225 +#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 +#: utils/adt/rangetypes.c:2284 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "유효한 값은 \"[]\", \"[)\", \"(]\", \"()\"." -#: utils/adt/rangetypes.c:2293 utils/adt/rangetypes.c:2310 -#: utils/adt/rangetypes.c:2325 utils/adt/rangetypes.c:2345 -#: utils/adt/rangetypes.c:2356 utils/adt/rangetypes.c:2403 -#: utils/adt/rangetypes.c:2411 +#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 +#: utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 +#: utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "malformed range literal: \"%s\"" msgstr "비정상적인 range 문자: \"%s\"" -#: utils/adt/rangetypes.c:2295 +#: utils/adt/rangetypes.c:2354 #, c-format msgid "Junk after \"empty\" key word." msgstr " \"empty\" 키워드 뒤에 정크가 있음" -#: utils/adt/rangetypes.c:2312 +#: utils/adt/rangetypes.c:2371 #, c-format msgid "Missing left parenthesis or bracket." msgstr "왼쪽 괄호가 빠졌음" -#: utils/adt/rangetypes.c:2327 +#: utils/adt/rangetypes.c:2386 #, c-format msgid "Missing comma after lower bound." msgstr "하한값 뒤에 쉼표가 빠졌음" -#: utils/adt/rangetypes.c:2347 +#: utils/adt/rangetypes.c:2406 #, c-format msgid "Too many commas." msgstr "칼럼이 너무 많습니다." -#: utils/adt/rangetypes.c:2358 +#: utils/adt/rangetypes.c:2417 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "오른쪽 괄호 다음에 정크가 있음" -#: utils/adt/regexp.c:305 utils/adt/regexp.c:1997 utils/adt/varlena.c:4270 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 #, c-format msgid "regular expression failed: %s" msgstr "잘못된 정규식: %s" -#: utils/adt/regexp.c:446 utils/adt/regexp.c:681 +#: utils/adt/regexp.c:445 utils/adt/regexp.c:680 #, c-format msgid "invalid regular expression option: \"%.*s\"" msgstr "잘못된 정규식 옵션: \"%.*s\"" -#: utils/adt/regexp.c:683 +#: utils/adt/regexp.c:682 #, c-format msgid "" "If you meant to use regexp_replace() with a start parameter, cast the fourth " @@ -27271,15 +28552,15 @@ msgstr "" "시작 위치를 지정하려는 regexp_replace() 함수 사용인 경우, 네번째 인자는 정수" "형을 지정해야합니다." -#: utils/adt/regexp.c:717 utils/adt/regexp.c:726 utils/adt/regexp.c:1083 -#: utils/adt/regexp.c:1147 utils/adt/regexp.c:1156 utils/adt/regexp.c:1165 -#: utils/adt/regexp.c:1174 utils/adt/regexp.c:1854 utils/adt/regexp.c:1863 -#: utils/adt/regexp.c:1872 utils/misc/guc.c:6610 utils/misc/guc.c:6644 +#: 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" -#: utils/adt/regexp.c:937 +#: utils/adt/regexp.c:936 #, c-format msgid "" "SQL regular expression may not contain more than two escape-double-quote " @@ -27288,19 +28569,19 @@ msgstr "" "SQL 정규 표현식에서는 두 개 이상의 이스케이프 큰 따옴표 구분자를 쓸 수 없음" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:1094 utils/adt/regexp.c:1185 utils/adt/regexp.c:1272 -#: utils/adt/regexp.c:1311 utils/adt/regexp.c:1699 utils/adt/regexp.c:1754 -#: utils/adt/regexp.c:1883 +#: utils/adt/regexp.c:1093 utils/adt/regexp.c:1184 utils/adt/regexp.c:1271 +#: utils/adt/regexp.c:1310 utils/adt/regexp.c:1698 utils/adt/regexp.c:1753 +#: utils/adt/regexp.c:1882 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s 함수는 \"global\" 옵션을 지원하지 않음" -#: utils/adt/regexp.c:1313 +#: utils/adt/regexp.c:1312 #, c-format msgid "Use the regexp_matches function instead." msgstr "대신에 regexp_matches 함수를 사용하세요." -#: utils/adt/regexp.c:1501 +#: utils/adt/regexp.c:1500 #, c-format msgid "too many regular expression matches" msgstr "너무 많음 정규식 매치" @@ -27315,18 +28596,18 @@ msgstr "\"%s\"(이)라는 함수가 두 개 이상 있음" msgid "more than one operator named %s" msgstr "%s(이)라는 연산자가 두 개 이상 있음" -#: utils/adt/regproc.c:670 gram.y:8841 +#: utils/adt/regproc.c:670 gram.y:8992 #, c-format msgid "missing argument" msgstr "인자가 빠졌음" -#: utils/adt/regproc.c:671 gram.y:8842 +#: utils/adt/regproc.c:671 gram.y:8993 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "단항 연산자에서 인자 없음을 표시할 때는 NONE 인자를 사용하세요." -#: utils/adt/regproc.c:675 utils/adt/regproc.c:2009 utils/adt/ruleutils.c:10013 -#: utils/adt/ruleutils.c:10226 +#: 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 "인자가 너무 많습니다" @@ -27336,66 +28617,66 @@ msgstr "인자가 너무 많습니다" msgid "Provide two argument types for operator." msgstr "연산자를 위해서는 두개의 인자 자료형을 지정하십시오." -#: utils/adt/regproc.c:1544 utils/adt/regproc.c:1661 utils/adt/regproc.c:1790 -#: utils/adt/regproc.c:1795 utils/adt/varlena.c:3410 utils/adt/varlena.c:3415 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 +#: utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 #, c-format msgid "invalid name syntax" msgstr "잘못된 이름 구문" -#: utils/adt/regproc.c:1904 +#: utils/adt/regproc.c:1924 #, c-format msgid "expected a left parenthesis" msgstr "왼쪽 괄호가 필요합니다." -#: utils/adt/regproc.c:1922 +#: utils/adt/regproc.c:1942 #, c-format msgid "expected a right parenthesis" msgstr "오른쪽 괄호가 필요합니다." -#: utils/adt/regproc.c:1941 +#: utils/adt/regproc.c:1961 #, c-format msgid "expected a type name" msgstr "자료형 이름을 지정하십시오" -#: utils/adt/regproc.c:1973 +#: utils/adt/regproc.c:1993 #, c-format msgid "improper type name" msgstr "부적절한 형식 이름" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1625 -#: utils/adt/ri_triggers.c:2610 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 +#: utils/adt/ri_triggers.c:2601 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" "\"%s\" 테이블에서 자료 추가, 갱신 작업이 \"%s\" 참조키(foreign key) 제약 조건" "을 위배했습니다" -#: utils/adt/ri_triggers.c:309 utils/adt/ri_triggers.c:1628 +#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL에 null 키 값과 nonnull 키 값을 함께 사용할 수 없습니다." -#: utils/adt/ri_triggers.c:2045 +#: utils/adt/ri_triggers.c:2036 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "INSERT에 대해 \"%s\" 함수를 실행해야 함" -#: utils/adt/ri_triggers.c:2051 +#: utils/adt/ri_triggers.c:2042 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "UPDATE에 대해 \"%s\" 함수를 실행해야 함" -#: utils/adt/ri_triggers.c:2057 +#: utils/adt/ri_triggers.c:2048 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "DELETE에 대해 \"%s\" 함수를 실행해야 함" -#: utils/adt/ri_triggers.c:2080 +#: utils/adt/ri_triggers.c:2071 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "\"%s\" 트리거(해당 테이블: \"%s\")에 대한 pg_constraint 항목이 없음" -#: utils/adt/ri_triggers.c:2082 +#: utils/adt/ri_triggers.c:2073 #, c-format msgid "" "Remove this referential integrity trigger and its mates, then do ALTER TABLE " @@ -27404,12 +28685,12 @@ msgstr "" "해당 트리거 관련 개체를 제거한 후 ALTER TABLE ADD CONSTRAINT 명령으로 추가하" "세요" -#: utils/adt/ri_triggers.c:2112 gram.y:4223 +#: utils/adt/ri_triggers.c:2103 gram.y:4340 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL 기능은 아직 구현 안되었습니다" -#: utils/adt/ri_triggers.c:2435 +#: utils/adt/ri_triggers.c:2426 #, c-format msgid "" "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave " @@ -27418,32 +28699,32 @@ msgstr "" "\"%s\"에 대한 참조 무결성 쿼리(제약조건: \"%s\", 해당 릴레이션: \"%s\")를 실" "행하면 예기치 않은 결과가 발생함" -#: utils/adt/ri_triggers.c:2439 +#: utils/adt/ri_triggers.c:2430 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "이 문제는 주로 룰이 재작성 되었을 때 발생합니다." -#: utils/adt/ri_triggers.c:2600 +#: utils/adt/ri_triggers.c:2591 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "\"%s\" 파티션 지우기는 \"%s\" 참조키 제약조건을 위반함" -#: utils/adt/ri_triggers.c:2603 utils/adt/ri_triggers.c:2628 +#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "(%s)=(%s) 키가 \"%s\" 테이블에서 여전히 참조됩니다." -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2605 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "(%s)=(%s) 키가 \"%s\" 테이블에 없습니다." -#: utils/adt/ri_triggers.c:2617 +#: utils/adt/ri_triggers.c:2608 #, c-format msgid "Key is not present in table \"%s\"." msgstr "\"%s\" 테이블에 키가 없습니다." -#: utils/adt/ri_triggers.c:2623 +#: utils/adt/ri_triggers.c:2614 #, c-format msgid "" "update or delete on table \"%s\" violates foreign key constraint \"%s\" on " @@ -27452,66 +28733,66 @@ msgstr "" "\"%s\" 테이블의 자료 갱신, 삭제 작업이 \"%s\" 참조키(foreign key) 제약 조건 " "- \"%s\" 테이블 - 을 위반했습니다" -#: utils/adt/ri_triggers.c:2631 +#: utils/adt/ri_triggers.c:2622 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "\"%s\" 테이블에서 키가 여전히 참조됩니다." -#: utils/adt/rowtypes.c:106 utils/adt/rowtypes.c:510 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:509 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "익명 복합 형식의 입력이 구현되어 있지 않음" -#: utils/adt/rowtypes.c:159 utils/adt/rowtypes.c:191 utils/adt/rowtypes.c:217 -#: utils/adt/rowtypes.c:228 utils/adt/rowtypes.c:286 utils/adt/rowtypes.c:297 +#: utils/adt/rowtypes.c:158 utils/adt/rowtypes.c:190 utils/adt/rowtypes.c:216 +#: utils/adt/rowtypes.c:227 utils/adt/rowtypes.c:285 utils/adt/rowtypes.c:296 #, c-format msgid "malformed record literal: \"%s\"" msgstr "비정상적인 레코드 문자: \"%s\"" -#: utils/adt/rowtypes.c:160 +#: utils/adt/rowtypes.c:159 #, c-format msgid "Missing left parenthesis." msgstr "왼쪽 괄호가 필요합니다." -#: utils/adt/rowtypes.c:192 +#: utils/adt/rowtypes.c:191 #, c-format msgid "Too few columns." msgstr "칼럼이 너무 적습니다." -#: utils/adt/rowtypes.c:287 +#: utils/adt/rowtypes.c:286 #, c-format msgid "Too many columns." msgstr "칼럼이 너무 많습니다." -#: utils/adt/rowtypes.c:298 +#: utils/adt/rowtypes.c:297 #, c-format msgid "Junk after right parenthesis." msgstr "오른쪽 괄호가 필요합니다." -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:558 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "열 수(%d)가 최대값(%d)을 초과했습니다" -#: utils/adt/rowtypes.c:601 +#: utils/adt/rowtypes.c:599 #, c-format msgid "" "binary data has type %u (%s) instead of expected %u (%s) in record column %d" msgstr "바이너리 자료형이 %u (%s) 임. 기대 자료형: %u (%s), 해당 칼럼: %d" -#: utils/adt/rowtypes.c:668 +#: utils/adt/rowtypes.c:660 #, c-format msgid "improper binary format in record column %d" msgstr "%d 번째 레코드 열에서 잘못된 바이너리 포맷이 있습니다" -#: utils/adt/rowtypes.c:959 utils/adt/rowtypes.c:1205 utils/adt/rowtypes.c:1463 -#: utils/adt/rowtypes.c:1709 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 +#: utils/adt/rowtypes.c:1699 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "서로 다른 열 형식 %s과(와) %s(레코드 열 %d)을(를) 비교할 수 없음" -#: utils/adt/rowtypes.c:1050 utils/adt/rowtypes.c:1275 -#: utils/adt/rowtypes.c:1560 utils/adt/rowtypes.c:1745 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 +#: utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "칼럼 수가 서로 다른 레코드 자료형을 비교할 수 없음" @@ -27531,113 +28812,139 @@ msgstr "expression이 하나 이상의 릴레이션 변수를 포함하고 있 msgid "expression contains variables" msgstr "expression이 변수들을 포함하고 있음" -#: utils/adt/ruleutils.c:5227 +#: utils/adt/ruleutils.c:5246 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "\"%s\" 룰은 %d 이벤트 형태를 지원하지 않습니다" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:128 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "TIMESTAMP(%d)%s 정밀도로 음수를 사용할 수 없습니다" -#: utils/adt/timestamp.c:118 +#: utils/adt/timestamp.c:134 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s 정밀도는 최대값(%d)으로 줄였습니다" -#: utils/adt/timestamp.c:378 +#: utils/adt/timestamp.c:394 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "타임스탬프(%d) 정밀도는 %d에서 %d 사이여야 함" -#: utils/adt/timestamp.c:496 +#: utils/adt/timestamp.c:512 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "숫자형 타임 존 형식은 처음에 \"-\" 또는 \"+\" 문자가 있어야 합니다." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:524 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "\"%s\" 숫자형 타임 존 범위 벗어남" -#: utils/adt/timestamp.c:609 utils/adt/timestamp.c:619 -#: utils/adt/timestamp.c:627 +#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 +#: utils/adt/timestamp.c:643 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "타임스탬프 값이 범위를 벗어났음: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:728 +#: utils/adt/timestamp.c:744 #, c-format msgid "timestamp cannot be NaN" msgstr "타임스탬프 값으로 NaN 값을 지정할 수 없음" -#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:758 +#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "타임스탬프 값이 범위를 벗어났음: \"%g\"" -#: utils/adt/timestamp.c:1065 utils/adt/timestamp.c:1098 +#: 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: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 "간격이 범위를 벗어남" + +#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 #, c-format msgid "invalid INTERVAL type modifier" msgstr "잘못된 INTERVAL 형식 한정자" -#: utils/adt/timestamp.c:1081 +#: utils/adt/timestamp.c:1110 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d) 정밀도로 음수값이 올 수 없습니다" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1116 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d) 정밀도는 허용 최대치(%d)로 감소 되었습니다" -#: utils/adt/timestamp.c:1473 +#: utils/adt/timestamp.c:1506 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "간격(%d) 정밀도는 %d에서 %d 사이여야 함" -#: utils/adt/timestamp.c:2703 -#, c-format -msgid "cannot subtract infinite timestamps" -msgstr "타임스탬프 무한값을 추출 할 수 없음" - -#: utils/adt/timestamp.c:3956 utils/adt/timestamp.c:4139 +#: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 #, c-format msgid "origin out of range" msgstr "오리진의 범위를 벗어났습니다." -#: utils/adt/timestamp.c:3961 utils/adt/timestamp.c:4144 +#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#, c-format +msgid "timestamps cannot be binned into infinite intervals" +msgstr "timestamp값은 무한 interval 형으로 바인드할 수 없음" + +#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "timestamp값은 월이나 년을 포함하는 interval 형으로 바인드할 수 없음" -#: utils/adt/timestamp.c:3968 utils/adt/timestamp.c:4151 +#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 #, c-format msgid "stride must be greater than zero" msgstr "stride 값은 0 보다 커야 합니다" -#: utils/adt/timestamp.c:4434 +#: utils/adt/timestamp.c:5091 #, c-format msgid "Months usually have fractional weeks." msgstr "달에는 보통 분수형태의 주간이 있습니다." -#: utils/adt/trigfuncs.c:42 +#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#, c-format +msgid "step size cannot be infinite" +msgstr "단계 크기는 무한일 수 없음" + +#: utils/adt/trigfuncs.c:41 #, c-format msgid "suppress_redundant_updates_trigger: must be called as trigger" msgstr "suppress_redundant_updates_trigger: 트리거로 호출되어야 함" -#: utils/adt/trigfuncs.c:48 +#: utils/adt/trigfuncs.c:47 #, c-format msgid "suppress_redundant_updates_trigger: must be called on update" msgstr "suppress_redundant_updates_trigger: 업데이트 시 호출되어야 함" -#: utils/adt/trigfuncs.c:54 +#: utils/adt/trigfuncs.c:53 #, c-format msgid "suppress_redundant_updates_trigger: must be called before update" msgstr "suppress_redundant_updates_trigger: 업데이트 전에 호출되어야 함" -#: utils/adt/trigfuncs.c:60 +#: utils/adt/trigfuncs.c:59 #, c-format msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: 각 행에 대해 호출되어야 함" @@ -27654,32 +28961,32 @@ msgstr "분석 작업에서 사용한 거리값은 %d 보다 클 수 없습니 msgid "no operand in tsquery: \"%s\"" msgstr "tsquery에 피연산자가 없음: \"%s\"" -#: utils/adt/tsquery.c:558 +#: utils/adt/tsquery.c:554 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "tsquery의 값이 너무 큼: \"%s\"" -#: utils/adt/tsquery.c:563 +#: utils/adt/tsquery.c:559 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "tsquery의 피연산자가 너무 긺: \"%s\"" -#: utils/adt/tsquery.c:591 +#: utils/adt/tsquery.c:587 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "tsquery의 단어가 너무 긺: \"%s\"" -#: utils/adt/tsquery.c:717 utils/adt/tsvector_parser.c:147 +#: utils/adt/tsquery.c:713 utils/adt/tsvector_parser.c:147 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "tsquery에 구문 오류가 있음: \"%s\"" -#: utils/adt/tsquery.c:883 +#: utils/adt/tsquery.c:879 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "텍스트 검색 쿼리에 어휘소가 포함되어 있지 않음: \"%s\"" -#: utils/adt/tsquery.c:894 utils/adt/tsquery_util.c:376 +#: utils/adt/tsquery.c:890 utils/adt/tsquery_util.c:376 #, c-format msgid "tsquery is too large" msgstr "tsquery 길이가 너무 깁니다" @@ -27718,73 +29025,73 @@ msgstr "가중치 배열에는 null이 포함되지 않아야 함" msgid "weight out of range" msgstr "가중치가 범위를 벗어남" -#: utils/adt/tsvector.c:217 +#: utils/adt/tsvector.c:216 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "단어가 너무 긺(%ld바이트, 최대 %ld바이트)" -#: utils/adt/tsvector.c:224 +#: utils/adt/tsvector.c:223 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "" "문자열이 너무 길어서 tsvector에 사용할 수 없음(%ld바이트, 최대 %ld바이트)" -#: utils/adt/tsvector_op.c:773 +#: utils/adt/tsvector_op.c:771 #, c-format msgid "lexeme array may not contain nulls" msgstr "어휘소 배열에는 null이 포함되지 않아야 함" -#: utils/adt/tsvector_op.c:778 +#: utils/adt/tsvector_op.c:776 #, c-format msgid "lexeme array may not contain empty strings" msgstr "어휘소 배열에는 빈문자열이 포함되지 않아야 함" -#: utils/adt/tsvector_op.c:847 +#: utils/adt/tsvector_op.c:845 #, c-format msgid "weight array may not contain nulls" msgstr "가중치 배열에는 null이 포함되지 않아야 함" -#: utils/adt/tsvector_op.c:871 +#: utils/adt/tsvector_op.c:869 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "알 수 없는 가중치: \"%c\"" -#: utils/adt/tsvector_op.c:2601 +#: utils/adt/tsvector_op.c:2599 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "ts_stat 쿼리는 하나의 tsvector 칼럼을 반환해야 함" -#: utils/adt/tsvector_op.c:2790 +#: utils/adt/tsvector_op.c:2788 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "\"%s\" tsvector 칼럼이 없음" -#: utils/adt/tsvector_op.c:2797 +#: utils/adt/tsvector_op.c:2795 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "\"%s\" 칼럼은 tsvector 형식이 아님" -#: utils/adt/tsvector_op.c:2809 +#: utils/adt/tsvector_op.c:2807 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "\"%s\" 구성 칼럼이 없음" -#: utils/adt/tsvector_op.c:2815 +#: utils/adt/tsvector_op.c:2813 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "\"%s\" 칼럼은 regconfig 형이 아님" -#: utils/adt/tsvector_op.c:2822 +#: utils/adt/tsvector_op.c:2820 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "\"%s\" 구성 칼럼은 null이 아니어야 함" -#: utils/adt/tsvector_op.c:2835 +#: utils/adt/tsvector_op.c:2833 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "\"%s\" 텍스트 검색 구성 이름이 스키마로 한정되어야 함" -#: utils/adt/tsvector_op.c:2860 +#: utils/adt/tsvector_op.c:2858 #, c-format msgid "column \"%s\" is not of a character type" msgstr "\"%s\" 칼럼은 문자형이 아님" @@ -27804,17 +29111,17 @@ msgstr "이스케이프 문자가 없음: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "tsvector에 잘못된 위치 정보가 있음: \"%s\"" -#: utils/adt/uuid.c:413 +#: utils/adt/uuid.c:418 #, c-format msgid "could not generate random values" msgstr "무작위 값 생성 실패" -#: utils/adt/varbit.c:110 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "%s 자료형의 길이는 최소 1 이상이어야 합니다" -#: utils/adt/varbit.c:115 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "%s 자료형의 길이는 최대 %d 이하여야 합니다" @@ -27850,9 +29157,9 @@ msgstr "외부 비트 문자열의 길이가 잘못되었습니다" msgid "bit string too long for type bit varying(%d)" msgstr "비트 문자열이 너무 깁니다(해당 자료형 bit varying(%d))" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:908 -#: utils/adt/varlena.c:971 utils/adt/varlena.c:1128 utils/adt/varlena.c:3052 -#: utils/adt/varlena.c:3130 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 +#: utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 +#: utils/adt/varlena.c:3133 #, c-format msgid "negative substring length not allowed" msgstr "substring에서 음수 길이는 허용하지 않음" @@ -27877,194 +29184,200 @@ msgstr "서로 크기가 틀린 비트 문자열은 XOR 연산을 할 수 없습 msgid "bit index %d out of valid range (0..%d)" msgstr "비트 %d 인덱스의 범위를 벗어남 (0..%d)" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3334 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 #, c-format msgid "new bit must be 0 or 1" msgstr "새 비트값은 0 또는 1 이어야 합니다" -#: utils/adt/varchar.c:162 utils/adt/varchar.c:313 +#: utils/adt/varchar.c:161 utils/adt/varchar.c:312 #, c-format msgid "value too long for type character(%d)" msgstr "character(%d) 자료형에 너무 긴 자료를 담으려고 합니다." -#: utils/adt/varchar.c:476 utils/adt/varchar.c:640 +#: utils/adt/varchar.c:475 utils/adt/varchar.c:639 #, c-format msgid "value too long for type character varying(%d)" msgstr "character varying(%d) 자료형에 너무 긴 자료를 담으려고 합니다." -#: utils/adt/varchar.c:738 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "문자열 비교 작업에 사용할 정렬규칙(collation)을 결정할 수 없음" -#: utils/adt/varlena.c:1227 utils/adt/varlena.c:1806 +#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "문자열 검색 작업에 사용할 비결정 정렬규칙(collation)을 지원하지 않음" -#: utils/adt/varlena.c:3218 utils/adt/varlena.c:3285 +#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "%d 인덱스의 범위를 벗어남, 0..%d" -#: utils/adt/varlena.c:3249 utils/adt/varlena.c:3321 +#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "%lld 인덱스의 범위를 벗어남, 0..%lld" -#: utils/adt/varlena.c:4382 +#: utils/adt/varlena.c:4385 #, c-format msgid "field position must not be zero" msgstr "필드 위치 값은 0 이 아니여야 함" -#: utils/adt/varlena.c:5554 +#: utils/adt/varlena.c:5630 #, c-format msgid "unterminated format() type specifier" msgstr "마무리 안된 format() 형 식별자" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5689 utils/adt/varlena.c:5810 +#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "하나의 \"%%\" 문자를 표시하려면, \"%%%%\" 형태로 사용하세요" -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5808 +#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "인식할 수 없는 format() 형 식별자 \"%.*s\"" -#: utils/adt/varlena.c:5700 utils/adt/varlena.c:5757 +#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 #, c-format msgid "too few arguments for format()" msgstr "format() 작업을 위한 인자가 너무 적음" -#: utils/adt/varlena.c:5853 utils/adt/varlena.c:6035 +#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 #, c-format msgid "number is out of range" msgstr "수치 범위를 벗어남" -#: utils/adt/varlena.c:5916 utils/adt/varlena.c:5944 +#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "" "format 함수에서 사용할 수 있는 인자 위치 번호는 0이 아니라, 1부터 시작합니다" -#: utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:6013 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "넓이 인자 위치값은 \"$\" 문자로 끝나야 합니다" -#: utils/adt/varlena.c:5982 +#: utils/adt/varlena.c:6058 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "null 값은 SQL 식별자로 포멧될 수 없음" -#: utils/adt/varlena.c:6190 +#: utils/adt/varlena.c:6266 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "" "유니코드 normalization 작업은 서버 인코딩이 UTF8 일때만 할 수 있습니다." -#: utils/adt/varlena.c:6203 +#: utils/adt/varlena.c:6279 #, c-format msgid "invalid normalization form: %s" msgstr "잘못된 normalization 형식: %s" -#: utils/adt/varlena.c:6406 utils/adt/varlena.c:6441 utils/adt/varlena.c:6476 +#: utils/adt/varlena.c:6324 +#, c-format +msgid "Unicode categorization can only be performed if server encoding is UTF8" +msgstr "" +"유니코드 분류 작업은 서버 인코딩이 UTF8 일때만 할 수 있습니다." + +#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 #, c-format msgid "invalid Unicode code point: %04X" msgstr "잘못된 유니코드 코드 포인트: %04X" -#: utils/adt/varlena.c:6506 +#: utils/adt/varlena.c:6641 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "" "유니코드 이스케이프는 \\XXXX, \\+XXXXXX, \\uXXXX, 또는 \\UXXXXXXXX 형태여야 " "합니다." -#: utils/adt/windowfuncs.c:442 +#: utils/adt/windowfuncs.c:443 #, c-format msgid "argument of ntile must be greater than zero" msgstr "ntile의 인자는 0보다 커야 함" -#: utils/adt/windowfuncs.c:706 +#: utils/adt/windowfuncs.c:707 #, c-format msgid "argument of nth_value must be greater than zero" msgstr "nth_value의 인자는 0보다 커야 함" -#: utils/adt/xid8funcs.c:125 +#: utils/adt/xid8funcs.c:124 #, c-format msgid "transaction ID %llu is in the future" msgstr "%llu 트랜잭션 ID는 미래의 것입니다" -#: utils/adt/xid8funcs.c:547 +#: utils/adt/xid8funcs.c:553 #, c-format msgid "invalid external pg_snapshot data" msgstr "외부 pg_snapshot 자료가 잘못됨" -#: utils/adt/xml.c:228 +#: utils/adt/xml.c:238 #, c-format msgid "unsupported XML feature" msgstr "지원되지 않는 XML 기능" -#: utils/adt/xml.c:229 +#: utils/adt/xml.c:239 #, c-format msgid "This functionality requires the server to be built with libxml support." msgstr "이 기능을 사용하려면 libxml 지원으로 서버를 빌드해야 합니다." -#: utils/adt/xml.c:248 utils/mb/mbutils.c:628 +#: utils/adt/xml.c:258 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "\"%s\" 인코딩 이름이 잘못됨" -#: utils/adt/xml.c:496 utils/adt/xml.c:501 +#: utils/adt/xml.c:506 utils/adt/xml.c:511 #, c-format msgid "invalid XML comment" msgstr "잘못된 XML 주석" -#: utils/adt/xml.c:660 +#: utils/adt/xml.c:697 #, c-format msgid "not an XML document" msgstr "XML 문서가 아님" -#: utils/adt/xml.c:956 utils/adt/xml.c:979 +#: utils/adt/xml.c:1008 utils/adt/xml.c:1031 #, c-format msgid "invalid XML processing instruction" msgstr "잘못된 XML 처리 명령" -#: utils/adt/xml.c:957 +#: utils/adt/xml.c:1009 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "XML 처리 명령 대상 이름은 \"%s\"일 수 없습니다." -#: utils/adt/xml.c:980 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "XML 처리 명령에는 \"?>\"를 포함할 수 없습니다." -#: utils/adt/xml.c:1059 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "xmlvalidate가 구현되어 있지 않음" -#: utils/adt/xml.c:1115 +#: utils/adt/xml.c:1167 #, c-format msgid "could not initialize XML library" msgstr "XML 라이브러리를 초기화할 수 없음" -#: utils/adt/xml.c:1116 +#: utils/adt/xml.c:1168 #, c-format msgid "" "libxml2 has incompatible char type: sizeof(char)=%zu, sizeof(xmlChar)=%zu." msgstr "" -"libxml2에 호환되지 않는 문자 자료형 있음: sizeof(char)=%zu, sizeof(xmlChar)=" -"%zu" +"libxml2에 호환되지 않는 문자 자료형 있음: sizeof(char)=%zu, " +"sizeof(xmlChar)=%zu" -#: utils/adt/xml.c:1202 +#: utils/adt/xml.c:1254 #, c-format msgid "could not set up XML error handler" msgstr "XML 오류 핸들러를 설정할 수 없음" -#: utils/adt/xml.c:1203 +#: utils/adt/xml.c:1255 #, c-format msgid "" "This probably indicates that the version of libxml2 being used is not " @@ -28073,121 +29386,126 @@ msgstr "" "이 문제는 PostgreSQL 서버를 만들 때 사용한 libxml2 헤더 파일이 호환성이 없는 " "것 같습니다." -#: utils/adt/xml.c:2189 +#: utils/adt/xml.c:2281 msgid "Invalid character value." msgstr "잘못된 문자 값입니다." -#: utils/adt/xml.c:2192 +#: utils/adt/xml.c:2284 msgid "Space required." msgstr "공간이 필요합니다." -#: utils/adt/xml.c:2195 +#: utils/adt/xml.c:2287 msgid "standalone accepts only 'yes' or 'no'." msgstr "독립 실행형은 'yes' 또는 'no'만 허용합니다." -#: utils/adt/xml.c:2198 +#: utils/adt/xml.c:2290 msgid "Malformed declaration: missing version." msgstr "선언 형식이 잘못됨: 버전이 누락되었습니다." -#: utils/adt/xml.c:2201 +#: utils/adt/xml.c:2293 msgid "Missing encoding in text declaration." msgstr "텍스트 선언에서 인코딩이 누락되었습니다." -#: utils/adt/xml.c:2204 +#: utils/adt/xml.c:2296 msgid "Parsing XML declaration: '?>' expected." msgstr "XML 선언 구문 분석 중: '?>'가 필요합니다." -#: utils/adt/xml.c:2207 +#: utils/adt/xml.c:2299 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "인식할 수 없는 libxml 오류 코드: %d." -#: utils/adt/xml.c:2461 +#: utils/adt/xml.c:2553 #, c-format msgid "XML does not support infinite date values." msgstr "XML은 무한 날짜 값을 지원하지 않습니다." -#: utils/adt/xml.c:2483 utils/adt/xml.c:2510 +#: 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:2926 +#: utils/adt/xml.c:3018 #, c-format msgid "invalid query" msgstr "잘못된 쿼리" -#: utils/adt/xml.c:4266 +#: utils/adt/xml.c:3110 +#, c-format +msgid "portal \"%s\" does not return tuples" +msgstr "\"%s\" 포털은 집합을 반환할 수 없습니다." + +#: utils/adt/xml.c:4362 #, c-format msgid "invalid array for XML namespace mapping" msgstr "XML 네임스페이스 매핑에 사용할 배열이 잘못됨" -#: utils/adt/xml.c:4267 +#: utils/adt/xml.c:4363 #, c-format msgid "" "The array must be two-dimensional with length of the second axis equal to 2." msgstr "" "이 배열은 key, value로 구성된 배열을 요소로 하는 2차원 배열이어야 합니다." -#: utils/adt/xml.c:4291 +#: utils/adt/xml.c:4387 #, c-format msgid "empty XPath expression" msgstr "XPath 식이 비어 있음" -#: utils/adt/xml.c:4343 +#: utils/adt/xml.c:4439 #, c-format msgid "neither namespace name nor URI may be null" msgstr "네임스페이스 이름 및 URI는 null일 수 없음" -#: utils/adt/xml.c:4350 +#: utils/adt/xml.c:4446 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" "이름 \"%s\" 및 URI \"%s\"을(를) 사용하여 XML 네임스페이스를 등록할 수 없음" -#: utils/adt/xml.c:4693 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "DEFAULT 네임스페이스는 지원하지 않습니다." -#: utils/adt/xml.c:4722 +#: utils/adt/xml.c:4824 #, c-format msgid "row path filter must not be empty string" msgstr "로우 경로 필터는 비어있으면 안됩니다" -#: utils/adt/xml.c:4753 +#: utils/adt/xml.c:4858 #, c-format msgid "column path filter must not be empty string" msgstr "칼럼 경로 필터는 비어있으면 안됩니다" -#: utils/adt/xml.c:4897 +#: utils/adt/xml.c:5005 #, c-format msgid "more than one value returned by column XPath expression" msgstr "칼럼 XPath 표현식에 사용된 결과가 하나 이상의 값을 사용합니다" -#: utils/cache/lsyscache.c:1043 +#: utils/cache/lsyscache.c:1017 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "%s 형에서 %s 형으로 바꾸는 형변환 규칙(cast)가 없음" # # nonun 부분 end -#: utils/cache/lsyscache.c:2845 utils/cache/lsyscache.c:2878 -#: utils/cache/lsyscache.c:2911 utils/cache/lsyscache.c:2944 +#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 +#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 #, c-format msgid "type %s is only a shell" msgstr "%s 형식은 셸일 뿐임" -#: utils/cache/lsyscache.c:2850 +#: utils/cache/lsyscache.c:2892 #, c-format msgid "no input function available for type %s" msgstr "%s 자료형을 위한 입력 함수가 없습니다" -#: utils/cache/lsyscache.c:2883 +#: utils/cache/lsyscache.c:2925 #, c-format msgid "no output function available for type %s" msgstr "%s 자료형을 위한 출력 함수가 없습니다" -#: utils/cache/partcache.c:219 +#: utils/cache/partcache.c:216 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d for " @@ -28196,32 +29514,32 @@ msgstr "" "\"%s\" 연산자 클래스(접근 방법: %s)에는 %d 개의 지원 지원 함수(해당 자료형 " "%s)가 빠졌습니다" -#: utils/cache/plancache.c:724 +#: utils/cache/plancache.c:747 #, c-format msgid "cached plan must not change result type" msgstr "캐시된 계획에서 결과 형식을 바꾸지 않아야 함" -#: utils/cache/relcache.c:3741 +#: utils/cache/relcache.c:3801 #, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, 힙 relfilenumber 값이 지정되지 않았습니다" -#: utils/cache/relcache.c:3749 +#: utils/cache/relcache.c:3809 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "바이너리 업그레이드 모드 중에 새 relfilenumber 값 요청이 실패" -#: utils/cache/relcache.c:6495 +#: utils/cache/relcache.c:6539 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "\"%s\" 릴레이션-캐시 초기화 파일을 만들 수 없음: %m" -#: utils/cache/relcache.c:6497 +#: utils/cache/relcache.c:6541 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "어쨌든 계속하는데, 뭔가 잘못 된 것이 있습니다." -#: utils/cache/relcache.c:6819 +#: utils/cache/relcache.c:6871 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "\"%s\" 캐쉬 파일을 삭제할 수 없음: %m" @@ -28231,17 +29549,17 @@ msgstr "\"%s\" 캐쉬 파일을 삭제할 수 없음: %m" msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "릴레이션 맵핑을 변경하는 트랜잭셜을 PREPARE할 수 없음" -#: utils/cache/relmapper.c:850 +#: utils/cache/relmapper.c:852 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "\"%s\" 릴레이션 맵핑 파일에 잘못된 데이터가 있습니다" -#: utils/cache/relmapper.c:860 +#: utils/cache/relmapper.c:862 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "\"%s\" 릴레이션 맵핑 파일에 잘못된 checksum 값이 있음" -#: utils/cache/typcache.c:1803 utils/fmgr/funcapi.c:566 +#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "레코드 형식이 등록되지 않았음" @@ -28256,102 +29574,102 @@ msgstr "TRAP: ExceptionalCondition: %d PID 안에 잘못된 인자\n" msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" msgstr "TRAP: Assert 실패(\"%s\"), 파일: \"%s\", 줄: %d, PID: %d\n" -#: utils/error/elog.c:416 +#: utils/error/elog.c:415 #, c-format msgid "error occurred before error message processing is available\n" msgstr "오류 메시지 처리가 활성화 되기 전에 오류가 발생했습니다\n" -#: utils/error/elog.c:2092 +#: utils/error/elog.c:2134 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "stderr 로 사용하기 위해 \"%s\" 파일 다시 열기 실패: %m" -#: utils/error/elog.c:2105 +#: utils/error/elog.c:2147 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "표준출력(stdout)으로 사용하기 위해 \"%s\" 파일 다시 열기 실패: %m" -#: utils/error/elog.c:2141 +#: utils/error/elog.c:2183 #, c-format -msgid "invalid character" +msgid "Invalid character" msgstr "잘못된 문자" -#: utils/error/elog.c:2847 utils/error/elog.c:2874 utils/error/elog.c:2890 +#: utils/error/elog.c:2889 utils/error/elog.c:2916 utils/error/elog.c:2932 msgid "[unknown]" msgstr "[알수없음]" -#: utils/error/elog.c:3163 utils/error/elog.c:3484 utils/error/elog.c:3591 +#: utils/error/elog.c:3202 utils/error/elog.c:3526 utils/error/elog.c:3633 msgid "missing error text" msgstr "오류 내용을 뺍니다" -#: utils/error/elog.c:3166 utils/error/elog.c:3169 +#: utils/error/elog.c:3205 utils/error/elog.c:3208 #, c-format msgid " at character %d" msgstr " %d 번째 문자 부근" -#: utils/error/elog.c:3179 utils/error/elog.c:3186 +#: utils/error/elog.c:3218 utils/error/elog.c:3225 msgid "DETAIL: " msgstr "상세정보: " -#: utils/error/elog.c:3193 +#: utils/error/elog.c:3232 msgid "HINT: " msgstr "힌트: " -#: utils/error/elog.c:3200 +#: utils/error/elog.c:3239 msgid "QUERY: " msgstr "쿼리:" -#: utils/error/elog.c:3207 +#: utils/error/elog.c:3246 msgid "CONTEXT: " msgstr "내용: " -#: utils/error/elog.c:3217 +#: utils/error/elog.c:3256 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "위치: %s, %s:%d\n" -#: utils/error/elog.c:3224 +#: utils/error/elog.c:3263 #, c-format msgid "LOCATION: %s:%d\n" msgstr "위치: %s:%d\n" -#: utils/error/elog.c:3231 +#: utils/error/elog.c:3270 msgid "BACKTRACE: " msgstr "역추적: " -#: utils/error/elog.c:3243 +#: utils/error/elog.c:3282 msgid "STATEMENT: " msgstr "명령 구문: " -#: utils/error/elog.c:3636 +#: utils/error/elog.c:3678 msgid "DEBUG" msgstr "디버그" -#: utils/error/elog.c:3640 +#: utils/error/elog.c:3682 msgid "LOG" msgstr "로그" -#: utils/error/elog.c:3643 +#: utils/error/elog.c:3685 msgid "INFO" msgstr "정보" -#: utils/error/elog.c:3646 +#: utils/error/elog.c:3688 msgid "NOTICE" msgstr "알림" -#: utils/error/elog.c:3650 +#: utils/error/elog.c:3692 msgid "WARNING" msgstr "경고" -#: utils/error/elog.c:3653 +#: utils/error/elog.c:3695 msgid "ERROR" msgstr "오류" -#: utils/error/elog.c:3656 +#: utils/error/elog.c:3698 msgid "FATAL" msgstr "치명적오류" -#: utils/error/elog.c:3659 +#: utils/error/elog.c:3701 msgid "PANIC" msgstr "손상" @@ -28424,22 +29742,22 @@ msgstr "매직 블록에 예기치 않은 길이 또는 여백 차이가 있습 msgid "incompatible library \"%s\": magic block mismatch" msgstr "\"%s\" 라이브러리는 사용할 수 없습니다: magic black 틀림" -#: utils/fmgr/dfmgr.c:492 +#: utils/fmgr/dfmgr.c:475 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "\"%s\" 라이브러리 사용이 금지되어있습니다" -#: utils/fmgr/dfmgr.c:518 +#: utils/fmgr/dfmgr.c:501 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "동적 라이브러리 경로에서 잘못된 매크로 이름: %s" -#: utils/fmgr/dfmgr.c:558 +#: utils/fmgr/dfmgr.c:541 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "\"dynamic_library_path\" 매개 변수 값으로 길이가 0인 값을 사용했음" -#: utils/fmgr/dfmgr.c:577 +#: utils/fmgr/dfmgr.c:560 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "\"dynamic_library_path\" 매개 변수 값으로 절대 경로를 사용할 수 없음" @@ -28465,146 +29783,136 @@ msgstr "SQL 호출 가능한 함수는 PG_FUNCTION_INFO_V1(함수명) 정의를 msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "%d 알수 없는 API 버전이 \"%s\" 함수에 의해서 보고되었음" -#: utils/fmgr/fmgr.c:2080 +#: utils/fmgr/fmgr.c:2109 #, c-format msgid "operator class options info is absent in function call context" msgstr "연산자 클래스 옵션 정보가 함수 호출 컨텍스트에서 빠졌음" -#: utils/fmgr/fmgr.c:2147 +#: utils/fmgr/fmgr.c:2176 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "" "%u OID 언어 유효성 검사 함수가 %u OID 프로시져 언어용으로 호출되었음, 원래 언" "어는 %u" -#: utils/fmgr/funcapi.c:489 +#: utils/fmgr/funcapi.c:496 #, c-format msgid "" "could not determine actual result type for function \"%s\" declared to " "return type %s" msgstr "\"%s\" 함수의 실재 리턴 자료형을 알 수 없음, 정의된 리턴 자료형: %s" -#: utils/fmgr/funcapi.c:634 +#: utils/fmgr/funcapi.c:642 #, c-format msgid "argument declared %s does not contain a range type but type %s" msgstr "%s 로 선언된 인자가 range 자료형이 아니고, %s 자료형입니다" -#: utils/fmgr/funcapi.c:717 -#, c-format -msgid "could not find multirange type for data type %s" -msgstr "%s 자료형용 multirange 형을 찾을 수 없음" - -#: utils/fmgr/funcapi.c:1921 utils/fmgr/funcapi.c:1953 +#: utils/fmgr/funcapi.c:1929 utils/fmgr/funcapi.c:1961 #, c-format msgid "number of aliases does not match number of columns" msgstr "alias 수가 열 수와 틀립니다" -#: utils/fmgr/funcapi.c:1947 +#: utils/fmgr/funcapi.c:1955 #, c-format msgid "no column alias was provided" msgstr "열 별칭이 제공되지 않았음" -#: utils/fmgr/funcapi.c:1971 +#: utils/fmgr/funcapi.c:1979 #, c-format msgid "could not determine row description for function returning record" msgstr "레코드를 리턴하는 함수를 위한 행(row) 구성 정보를 구할 수 없음" -#: utils/init/miscinit.c:347 +#: utils/init/miscinit.c:353 #, c-format msgid "data directory \"%s\" does not exist" msgstr "\"%s\" 데이터 디렉터리 없음" -#: utils/init/miscinit.c:352 +#: utils/init/miscinit.c:358 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "\"%s\" 디렉터리 읽기 권한 없음: %m" -#: utils/init/miscinit.c:360 +#: utils/init/miscinit.c:366 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "지정한 \"%s\" 데이터 디렉터리는 디렉터리가 아님" -#: utils/init/miscinit.c:376 +#: utils/init/miscinit.c:382 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "\"%s\" 데이터 디렉터리 소유주가 잘못 되었습니다." -#: utils/init/miscinit.c:378 +#: 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:396 +#: utils/init/miscinit.c:402 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "\"%s\" 데이터 디렉터리 접근 권한에 문제가 있습니다." -#: utils/init/miscinit.c:398 +#: 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,o=rx (0750) 값이어야 합니다." -#: utils/init/miscinit.c:456 +#: utils/init/miscinit.c:462 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: utils/init/miscinit.c:693 utils/misc/guc.c:3548 +#: utils/init/miscinit.c:720 utils/misc/guc.c:3650 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "보안 제한 작업 내에서 \"%s\" 매개 변수를 설정할 수 없음" -#: utils/init/miscinit.c:765 +#: utils/init/miscinit.c:807 #, c-format msgid "role with OID %u does not exist" msgstr "%u OID 롤이 없음" -#: utils/init/miscinit.c:795 +#: utils/init/miscinit.c:853 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "\"%s\" 롤은 접속을 허용하지 않음" -#: utils/init/miscinit.c:813 +#: utils/init/miscinit.c:874 #, c-format msgid "too many connections for role \"%s\"" msgstr "\"%s\" 롤의 최대 동시 접속수를 초과했습니다" -#: utils/init/miscinit.c:912 -#, c-format -msgid "permission denied to set session authorization" -msgstr "세션 인증을 지정하기 위한 권한이 없음" - -#: utils/init/miscinit.c:995 +#: utils/init/miscinit.c:1045 #, c-format msgid "invalid role OID: %u" msgstr "잘못된 롤 OID: %u" -#: utils/init/miscinit.c:1142 +#: utils/init/miscinit.c:1192 #, c-format msgid "database system is shut down" msgstr "데이터베이스 시스템 서비스를 중지했습니다" -#: utils/init/miscinit.c:1229 +#: utils/init/miscinit.c:1279 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "\"%s\" 잠금 파일을 만들 수 없음: %m" -#: utils/init/miscinit.c:1243 +#: utils/init/miscinit.c:1293 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: utils/init/miscinit.c:1250 +#: utils/init/miscinit.c:1300 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "\"%s\" 잠금 파일을 읽을 수 없음: %m" -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1309 #, c-format msgid "lock file \"%s\" is empty" msgstr "\"%s\" 잠금 파일이 비었음" -#: utils/init/miscinit.c:1260 +#: utils/init/miscinit.c:1310 #, c-format msgid "" "Either another server is starting, or the lock file is the remnant of a " @@ -28613,43 +29921,43 @@ msgstr "" "다른 서버가 실행 중이거나, 이전 서버 시작 작업을 실패 해서 잠금 파일이 남아 " "있는 경우입니다." -#: utils/init/miscinit.c:1304 +#: utils/init/miscinit.c:1354 #, c-format msgid "lock file \"%s\" already exists" msgstr "\"%s\" 잠금 파일이 이미 있음" -#: utils/init/miscinit.c:1308 +#: 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:1310 +#: 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:1313 +#: 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:1315 +#: 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:1366 +#: utils/init/miscinit.c:1416 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "\"%s\" 옛 잠금 파일을 삭제할 수 없음: %m" -#: utils/init/miscinit.c:1368 +#: utils/init/miscinit.c:1418 #, c-format msgid "" "The file seems accidentally left over, but it could not be removed. Please " @@ -28659,48 +29967,48 @@ msgstr "" "셸 명령을 이용해서 파일을 삭제 하고 다시 시도해 보십시오. - 내용 참 거시기 하" "네" -#: utils/init/miscinit.c:1405 utils/init/miscinit.c:1419 -#: utils/init/miscinit.c:1430 +#: 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:1541 utils/init/miscinit.c:1683 utils/misc/guc.c:5580 +#: 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:1671 +#: utils/init/miscinit.c:1721 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "\"%s\" 파일을 열 수 없음: %m; 어째든 계속 진행함" -#: utils/init/miscinit.c:1696 +#: 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:1735 utils/init/miscinit.c:1751 +#: 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:1737 +#: utils/init/miscinit.c:1787 #, c-format msgid "File \"%s\" is missing." msgstr "\"%s\" 파일이 없습니다." -#: utils/init/miscinit.c:1753 +#: utils/init/miscinit.c:1803 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "\"%s\" 파일에 잘못된 자료가 기록되어 있습니다." -#: utils/init/miscinit.c:1755 +#: utils/init/miscinit.c:1805 #, c-format msgid "You might need to initdb." msgstr "initdb 명령을 실행해 새 클러스터를 만들어야 할 수도 있습니다." -#: utils/init/miscinit.c:1763 +#: utils/init/miscinit.c:1813 #, c-format msgid "" "The data directory was initialized by PostgreSQL version %s, which is not " @@ -28783,17 +30091,17 @@ msgstr "\"%s\" 데이터베이스 액세스 권한 없음" 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 " @@ -28802,14 +30110,14 @@ msgstr "" "데이터베이스가 setlocale()에서 인식할 수 없는 LC_COLLATE \"%s\"(으)로 초기화" "되었습니다." -#: 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 " @@ -28818,12 +30126,12 @@ msgstr "" "setlocale()에서 인식할 수 없는 \"%s\" LC_CTYPE 값으로 데이터베이스가 초기화되" "었습니다." -#: utils/init/postinit.c:475 +#: utils/init/postinit.c:493 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "\"%s\" 데이터베이스의 문자 정렬 규칙은 버전이 맞지 않음" -#: utils/init/postinit.c:477 +#: utils/init/postinit.c:495 #, c-format msgid "" "The database was created using collation version %s, but the operating " @@ -28832,7 +30140,7 @@ msgstr "" "데이터베이스를 만들때 %s 버전으로 문자 정렬 규칙을 만들었는데, 현재 OS는 %s " "버전을 제공하고 있습니다." -#: utils/init/postinit.c:480 +#: utils/init/postinit.c:498 #, c-format msgid "" "Rebuild all objects in this database that use the default collation and run " @@ -28843,59 +30151,59 @@ msgstr "" "VERSION 명령을 실행하거나, 바른 라이브러리 버전을 지정해서, PostgreSQL을 빌드" "하세요." -#: utils/init/postinit.c:891 +#: utils/init/postinit.c:904 #, c-format msgid "no roles are defined in this database system" msgstr "이 데이터베이스에는 어떠한 롤 정의도 없습니다" -#: utils/init/postinit.c:892 +#: 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:928 +#: utils/init/postinit.c:942 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "슈퍼유저만 바이너리 업그레이드 모드 중에 연결 할 수 있음" -#: utils/init/postinit.c:949 +#: 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:955 +#: utils/init/postinit.c:968 #, c-format msgid "" -"remaining connection slots are reserved for roles with privileges of the \"%s" -"\" role" +"remaining connection slots are reserved for roles with privileges of the " +"\"%s\" role" msgstr "남은 연결 슬롯은 \"%s\" 롤 권한이 있는 롤용으로 남겨 놓았음" -#: utils/init/postinit.c:967 +#: utils/init/postinit.c:980 #, c-format msgid "permission denied to start WAL sender" msgstr "WAL 송신기 시작할 권한 없음" -#: utils/init/postinit.c:968 +#: utils/init/postinit.c:981 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." msgstr "WAL 송시기 시작은 %s 속성이 있는 롤만 할 수 있습니다." -#: utils/init/postinit.c:1086 +#: utils/init/postinit.c:1099 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "삭제되었거나 이름이 바뀐 것 같습니다." -#: utils/init/postinit.c:1090 +#: utils/init/postinit.c:1103 #, c-format msgid "database %u does not exist" msgstr "%u 데이터베이스가 없음" -#: utils/init/postinit.c:1099 +#: utils/init/postinit.c:1112 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "잘못된 \"%s\" 데이터베이스로 접속할 수 없음" -#: utils/init/postinit.c:1159 +#: utils/init/postinit.c:1173 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "데이터베이스 디렉터리에 \"%s\" 하위 디렉터리가 없습니다" @@ -28922,55 +30230,48 @@ msgstr "%d은(는) ISO 8859 문자 집합에 대한 예기치 않은 인코딩 I msgid "unexpected encoding ID %d for WIN character sets" msgstr "%d은(는) WIN 문자 집합에 대한 예기치 않은 인코딩 ID임" -#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "%s 인코딩과 %s 인코딩 사이의 변환은 지원하지 않습니다" -#: utils/mb/mbutils.c:386 -#, c-format -msgid "" -"default conversion function for encoding \"%s\" to \"%s\" does not exist" -msgstr "" -"\"%s\" 인코딩을 \"%s\" 인코딩으로 변환할 기본 변환규칙(conversion)이 없음" - -#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 -#: utils/mb/mbutils.c:843 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "%d바이트의 문자열은 너무 길어서 인코딩 규칙에 맞지 않습니다." -#: utils/mb/mbutils.c:569 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "\"%s\" 원본 인코딩 이름이 타당치 못함" -#: utils/mb/mbutils.c:574 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "\"%s\" 대상 인코딩 이름이 타당치 못함" -#: utils/mb/mbutils.c:714 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "\"%s\" 인코딩에서 사용할 수 없는 바이트: 0x%02x" -#: utils/mb/mbutils.c:878 +#: utils/mb/mbutils.c:877 #, c-format msgid "invalid Unicode code point" msgstr "잘못된 유니코드 코드 포인트" -#: utils/mb/mbutils.c:1204 +#: utils/mb/mbutils.c:1201 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset 실패" -#: utils/mb/mbutils.c:1725 +#: utils/mb/mbutils.c:1718 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "\"%s\" 인코딩에서 사용할 수 없는 문자가 있음: %s" -#: utils/mb/mbutils.c:1758 +#: utils/mb/mbutils.c:1751 #, c-format msgid "" "character with byte sequence %s in encoding \"%s\" has no equivalent in " @@ -28989,13 +30290,13 @@ msgstr "비어 있는 환경 설정 디렉터리 이름: \"%s\"" msgid "could not open configuration directory \"%s\": %m" msgstr "\"%s\" 환경 설정 디렉터리를 열 수 없습니다: %m" -#: utils/misc/guc.c:115 +#: utils/misc/guc.c:122 msgid "" "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "" "이 매개 변수에 유효한 단위는 \"B\", \"kB\", \"MB\",\"GB\", \"TB\" 입니다." -#: utils/misc/guc.c:152 +#: utils/misc/guc.c:159 msgid "" "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", " "and \"d\"." @@ -29003,50 +30304,50 @@ msgstr "" "이 매개 변수에 유효한 단위는 \"us\", \"ms\", \"s\", \"min\", \"h\", \"d\" 입" "니다." -#: utils/misc/guc.c:421 +#: utils/misc/guc.c:430 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "알 수 없는 환경 매개 변수 이름 \"%s\", 해당 파일: \"%s\", 줄번호: %d" -#: utils/misc/guc.c:461 utils/misc/guc.c:3406 utils/misc/guc.c:3646 -#: utils/misc/guc.c:3744 utils/misc/guc.c:3842 utils/misc/guc.c:3966 -#: utils/misc/guc.c:4069 +#: 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\" 매개 변수는 서버 재실행 없이 지금 변경 될 수 없음" -#: utils/misc/guc.c:497 +#: utils/misc/guc.c:506 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "환경설정 파일에 \"%s\" 매개 변수가 빠졌음, 초기값을 사용함" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:571 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "\"%s\" 매개 변수 값을 \"%s\"(으)로 바꿨음" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:613 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "\"%s\" 환경 설정파일에 오류가 있음" -#: utils/misc/guc.c:609 +#: utils/misc/guc.c:618 #, c-format msgid "" "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "\"%s\" 환경 설정 파일에 오류가 있어 새로 변경될 설정이 없습니다" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:623 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "\"%s\" 환경 설정 파일에 오류가 있어 아무 설정도 반영되지 않았습니다." -#: utils/misc/guc.c:1211 utils/misc/guc.c:1227 +#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "알 수 없는 환경 매개 변수 이름 \"%s\"" -#: utils/misc/guc.c:1213 +#: utils/misc/guc.c:1141 #, c-format msgid "" "Custom parameter names must be two or more simple identifiers separated by " @@ -29055,22 +30356,22 @@ msgstr "" "사용자 정의 환경 설정 변수 이름은 두 글자 이상의 식별자 이름과 점(.)을 구분자" "로 하는 이름이어야 합니다." -#: utils/misc/guc.c:1229 +#: utils/misc/guc.c:1157 #, c-format msgid "\"%s\" is a reserved prefix." msgstr "\"%s\" 이름은 예약된 접두사입니다." -#: utils/misc/guc.c:1243 +#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "알 수 없는 환경 매개 변수 이름: \"%s\"" -#: utils/misc/guc.c:1765 +#: utils/misc/guc.c:1802 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: \"%s\" 디렉터리에 액세스할 수 없음: %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: \"%s\" 디렉터리에 액세스할 수 없음: %m\n" -#: utils/misc/guc.c:1770 +#: utils/misc/guc.c:1806 #, c-format msgid "" "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" @@ -29078,7 +30379,7 @@ msgstr "" "initdb 명령이나, pg_basebackup 명령으로 PostgreSQL 데이터 디렉터리를 초기화 " "하세요.\n" -#: utils/misc/guc.c:1794 +#: utils/misc/guc.c:1830 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -29090,12 +30391,12 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:1817 +#: utils/misc/guc.c:1853 #, c-format -msgid "%s: could not access the server configuration file \"%s\": %s\n" -msgstr "%s: \"%s\" 환경 설정 파일을 접근할 수 없습니다: %s\n" +msgid "%s: could not access the server configuration file \"%s\": %m\n" +msgstr "%s: \"%s\" 환경 설정 파일을 접근할 수 없습니다: %m\n" -#: utils/misc/guc.c:1845 +#: utils/misc/guc.c:1881 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -29108,7 +30409,7 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1933 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -29121,7 +30422,7 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:1928 +#: utils/misc/guc.c:1964 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -29134,123 +30435,135 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:2894 +#: utils/misc/guc.c:2943 msgid "Value exceeds integer range." msgstr "값이 정수 범위를 초과합니다." -#: utils/misc/guc.c:3130 +#: utils/misc/guc.c:3185 #, c-format -msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" -msgstr "%d%s%s 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%d .. %d)를 벗어남" +msgid "" +"%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" +msgstr "%d%s%s 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%d%s%s .. %d%s%s)를 벗어남" -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3226 #, c-format -msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" -msgstr "%g%s%s 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%g .. %g)를 벗어남" +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:3366 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:3383 utils/misc/guc.c:4530 +#: utils/misc/guc.c:3481 utils/misc/guc.c:4696 #, c-format msgid "parameter \"%s\" cannot be changed" -msgstr "\"%s\" 매개 변수는 변경될 수 없음" +msgstr "\"%s\" 매개 변수는 바꿀 수 없음" -#: utils/misc/guc.c:3416 +#: utils/misc/guc.c:3514 #, c-format msgid "parameter \"%s\" cannot be changed now" -msgstr "\"%s\" 매개 변수는 지금 변경 될 수 없음" +msgstr "\"%s\" 매개 변수는 지금 바꿀 수 없음" -#: utils/misc/guc.c:3443 utils/misc/guc.c:3501 utils/misc/guc.c:4506 -#: utils/misc/guc.c:6546 +#: 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:3481 +#: utils/misc/guc.c:3583 #, c-format msgid "parameter \"%s\" cannot be set after connection start" -msgstr "\"%s\" 매개 변수값은 연결 시작한 뒤에는 변경할 수 없습니다" +msgstr "\"%s\" 매개 변수값은 연결 시작한 뒤에는 바꿀 수 없습니다" -#: utils/misc/guc.c:3540 +#: utils/misc/guc.c:3642 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "보안 정의자 함수 내에서 \"%s\" 매개 변수를 설정할 수 없음" -#: utils/misc/guc.c:3561 +#: utils/misc/guc.c:3663 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "\"%s\" 매개 변수는 리셋할 수 없음" -#: utils/misc/guc.c:3568 +#: utils/misc/guc.c:3670 #, c-format msgid "parameter \"%s\" cannot be set locally in functions" msgstr "\"%s\" 매개 변수값은 함수 안에서 지역적으로 지정할 수 없습니다" -#: utils/misc/guc.c:4212 utils/misc/guc.c:4259 utils/misc/guc.c:5266 +#: 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:4213 utils/misc/guc.c:4260 utils/misc/guc.c:5267 +#: 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:4496 +#: utils/misc/guc.c:4629 +#, c-format +msgid "ALTER SYSTEM is not allowed in this environment" +msgstr "ALTER SYSTEM 명령은 이 환경에서는 허용하지 않음" + +#: 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:4562 +#: 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:4608 +#: utils/misc/guc.c:4785 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "\"%s\" 파일의 내용을 분석할 수 없음" -#: utils/misc/guc.c:4790 +#: utils/misc/guc.c:4967 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "\"%s\" 매개 변수를 다시 정의하려고 함" -#: utils/misc/guc.c:5129 +#: utils/misc/guc.c:5306 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "알 수 없는 환경 매개 변수 이름 \"%s\", 이 설정은 지웁니다." -#: utils/misc/guc.c:5131 +#: utils/misc/guc.c:5308 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "\"%s\" 이름은 현재 예약된 접두사입니다." -#: utils/misc/guc.c:6000 +#: utils/misc/guc.c:6179 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "\"%s\" 매개 변수 값을 \"%s\" (으)로 바꾸는 중" -#: utils/misc/guc.c:6169 +#: utils/misc/guc.c:6348 #, c-format msgid "parameter \"%s\" could not be set" msgstr "\"%s\" 매개 변수는 설정할 수 없음" -#: utils/misc/guc.c:6259 +#: utils/misc/guc.c:6438 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "지정한 \"%s\" 매개 변수값의 구문분석을 실패했습니다." -#: utils/misc/guc.c:6678 +#: 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" @@ -29266,59 +30579,59 @@ msgstr "SET %s 명령은 하나의 값만 지정해야 합니다" msgid "SET requires parameter name" msgstr "SET 명령은 매개 변수 이름이 필요합니다" -#: utils/misc/guc_tables.c:662 +#: utils/misc/guc_tables.c:676 msgid "Ungrouped" msgstr "소속그룹없음" -#: utils/misc/guc_tables.c:664 +#: utils/misc/guc_tables.c:677 msgid "File Locations" msgstr "파일 위치" -#: utils/misc/guc_tables.c:666 +#: utils/misc/guc_tables.c:678 msgid "Connections and Authentication / Connection Settings" msgstr "연결과 인증 / 연결 설정" -#: utils/misc/guc_tables.c:668 +#: utils/misc/guc_tables.c:679 msgid "Connections and Authentication / TCP Settings" msgstr "연결과 인증 / TCP 설정" -#: utils/misc/guc_tables.c:670 +#: utils/misc/guc_tables.c:680 msgid "Connections and Authentication / Authentication" msgstr "연결과 인증 / 인증" -#: utils/misc/guc_tables.c:672 +#: utils/misc/guc_tables.c:681 msgid "Connections and Authentication / SSL" msgstr "연결과 인증 / SSL" -#: utils/misc/guc_tables.c:674 +#: utils/misc/guc_tables.c:682 msgid "Resource Usage / Memory" msgstr "자원 사용량 / 메모리" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:683 msgid "Resource Usage / Disk" msgstr "자원 사용량 / 디스크" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:684 msgid "Resource Usage / Kernel Resources" msgstr "자원 사용량 / 커널 자원" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:685 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "자원 사용량 / 비용기반 청소 지연" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:686 msgid "Resource Usage / Background Writer" msgstr "자원 사용량 / 백그라운드 쓰기" -#: utils/misc/guc_tables.c:684 +#: utils/misc/guc_tables.c:687 msgid "Resource Usage / Asynchronous Behavior" msgstr "자원 사용량 / 비동기 기능" -#: utils/misc/guc_tables.c:686 +#: utils/misc/guc_tables.c:688 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead 로그 / 설정값" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:689 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead 로그 / 체크포인트" @@ -29326,199 +30639,203 @@ msgstr "Write-Ahead 로그 / 체크포인트" msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead 로그 / 아카이브" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:691 msgid "Write-Ahead Log / Recovery" msgstr "Write-Ahead 로그 / 복구" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:692 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead 로그 / 아카이브 복구" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:693 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead 로그 / 복구 대상" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:694 +msgid "Write-Ahead Log / Summarization" +msgstr "Write-Ahead 로그 / 요약" + +#: utils/misc/guc_tables.c:695 msgid "Replication / Sending Servers" msgstr "복제 / 보내기 서버" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:696 msgid "Replication / Primary Server" msgstr "복제 / 주 서버" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:697 msgid "Replication / Standby Servers" msgstr "복제 / 대기 서버" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:698 msgid "Replication / Subscribers" msgstr "복제 / 구독" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:699 msgid "Query Tuning / Planner Method Configuration" msgstr "쿼리 튜닝 / 실행계획기 메서드 설정" -#: utils/misc/guc_tables.c:708 +#: utils/misc/guc_tables.c:700 msgid "Query Tuning / Planner Cost Constants" msgstr "쿼리 튜닝 / 실행계획기 비용 상수" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:701 msgid "Query Tuning / Genetic Query Optimizer" msgstr "쿼리 튜닝 / 일반적인 쿼리 최적화기" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:702 msgid "Query Tuning / Other Planner Options" msgstr "쿼리 튜닝 / 기타 실행계획기 옵션들" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:703 msgid "Reporting and Logging / Where to Log" msgstr "보고와 로그 / 로그 위치" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:704 msgid "Reporting and Logging / When to Log" msgstr "보고와 로그 / 로그 시점" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:705 msgid "Reporting and Logging / What to Log" msgstr "보고와 로그 / 로그 내용" -#: utils/misc/guc_tables.c:720 +#: utils/misc/guc_tables.c:706 msgid "Reporting and Logging / Process Title" msgstr "보고와 로그 / 프로세스 타이틀" -#: utils/misc/guc_tables.c:722 +#: utils/misc/guc_tables.c:707 msgid "Statistics / Monitoring" msgstr "통계 / 모니터링" -#: utils/misc/guc_tables.c:724 +#: utils/misc/guc_tables.c:708 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "통계 / 쿼리 및 인덱스 누적 통계" -#: utils/misc/guc_tables.c:726 +#: utils/misc/guc_tables.c:709 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc_tables.c:728 +#: utils/misc/guc_tables.c:710 msgid "Client Connection Defaults / Statement Behavior" msgstr "클라이언트 연결 초기값 / 구문 특성" -#: utils/misc/guc_tables.c:730 +#: utils/misc/guc_tables.c:711 msgid "Client Connection Defaults / Locale and Formatting" msgstr "클라이언트 연결 초기값 / 로케일과 출력양식" -#: utils/misc/guc_tables.c:732 +#: utils/misc/guc_tables.c:712 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "클라이언트 연결 초기값 / 공유 라이브러리 미리 로딩" -#: utils/misc/guc_tables.c:734 +#: utils/misc/guc_tables.c:713 msgid "Client Connection Defaults / Other Defaults" msgstr "클라이언트 연결 초기값 / 기타 초기값" -#: utils/misc/guc_tables.c:736 +#: utils/misc/guc_tables.c:714 msgid "Lock Management" msgstr "잠금 관리" -#: utils/misc/guc_tables.c:738 +#: utils/misc/guc_tables.c:715 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "버전과 플랫폼 호환성 / 이전 PostgreSQL 버전" -#: utils/misc/guc_tables.c:740 +#: utils/misc/guc_tables.c:716 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "버전과 플랫폼 호환성 / 다른 플랫폼과 클라이언트" -#: utils/misc/guc_tables.c:742 +#: utils/misc/guc_tables.c:717 msgid "Error Handling" msgstr "오류 처리" -#: utils/misc/guc_tables.c:744 +#: utils/misc/guc_tables.c:718 msgid "Preset Options" msgstr "프리셋 옵션들" -#: utils/misc/guc_tables.c:746 +#: utils/misc/guc_tables.c:719 msgid "Customized Options" msgstr "사용자 정의 옵션들" -#: utils/misc/guc_tables.c:748 +#: utils/misc/guc_tables.c:720 msgid "Developer Options" msgstr "개발자 옵션들" -#: utils/misc/guc_tables.c:805 +#: utils/misc/guc_tables.c:775 msgid "Enables the planner's use of sequential-scan plans." msgstr "실행계획자가 순차적-스캔(sequential-sca) 계획을 사용함" -#: utils/misc/guc_tables.c:815 +#: utils/misc/guc_tables.c:785 msgid "Enables the planner's use of index-scan plans." msgstr "실행계획자가 인덱스-스캔 계획을 사용함." -#: utils/misc/guc_tables.c:825 +#: utils/misc/guc_tables.c:795 msgid "Enables the planner's use of index-only-scan plans." msgstr "실행계획자가 인덱스-전용-탐색 계획을 사용함." -#: utils/misc/guc_tables.c:835 +#: utils/misc/guc_tables.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "실행계획기가 bitmap-scan 계획을 사용하도록 함" -#: utils/misc/guc_tables.c:845 +#: utils/misc/guc_tables.c:815 msgid "Enables the planner's use of TID scan plans." msgstr "실행계획자가 TID 스캔 계획을 사용함" -#: utils/misc/guc_tables.c:855 +#: utils/misc/guc_tables.c:825 msgid "Enables the planner's use of explicit sort steps." msgstr "실행계획자가 명시 정렬 단계(explicit sort step)를 사용함" -#: utils/misc/guc_tables.c:865 +#: utils/misc/guc_tables.c:835 msgid "Enables the planner's use of incremental sort steps." msgstr "실행계획자가 증분 정렬 단계(incremental sort step)를 사용함" -#: utils/misc/guc_tables.c:875 +#: utils/misc/guc_tables.c:845 msgid "Enables the planner's use of hashed aggregation plans." msgstr "실행계획자가 해시된 집계 계획을 사용함" -#: utils/misc/guc_tables.c:885 +#: utils/misc/guc_tables.c:855 msgid "Enables the planner's use of materialization." msgstr "실행계획자가 materialization 계획을 사용함" -#: utils/misc/guc_tables.c:895 +#: utils/misc/guc_tables.c:865 msgid "Enables the planner's use of memoization." msgstr "실행계획자가 memoization 계획을 사용함" -#: utils/misc/guc_tables.c:905 +#: utils/misc/guc_tables.c:875 msgid "Enables the planner's use of nested-loop join plans." msgstr "실행계획자가 근접순환 조인(nested-loop join) 계획을 사용함" -#: utils/misc/guc_tables.c:915 +#: utils/misc/guc_tables.c:885 msgid "Enables the planner's use of merge join plans." msgstr "실행계획자가 병합 조인(merge join) 계획을 사용함" -#: utils/misc/guc_tables.c:925 +#: utils/misc/guc_tables.c:895 msgid "Enables the planner's use of hash join plans." msgstr "실행계획자가 해시 조인(hash join) 계획을 사용함" -#: utils/misc/guc_tables.c:935 +#: utils/misc/guc_tables.c:905 msgid "Enables the planner's use of gather merge plans." msgstr "실행계획자가 병합 수집(gather merge) 계획을 사용함" -#: utils/misc/guc_tables.c:945 +#: utils/misc/guc_tables.c:915 msgid "Enables partitionwise join." msgstr "partitionwise join 활성화" -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:925 msgid "Enables partitionwise aggregation and grouping." msgstr "partitionwise 집계 및 그룹핑 활성화" -#: utils/misc/guc_tables.c:965 +#: utils/misc/guc_tables.c:935 msgid "Enables the planner's use of parallel append plans." msgstr "실행계획자가 병렬 추가 계획을 사용함" -#: utils/misc/guc_tables.c:975 +#: utils/misc/guc_tables.c:945 msgid "Enables the planner's use of parallel hash plans." msgstr "실행계획자가 병렬 해시 계획을 사용함" -#: utils/misc/guc_tables.c:985 +#: utils/misc/guc_tables.c:955 msgid "Enables plan-time and execution-time partition pruning." msgstr "파티션 프루닝 계획수립 및 실행 시간 활성화" -#: utils/misc/guc_tables.c:986 +#: 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." @@ -29526,7 +30843,7 @@ msgstr "" "쿼리 실행 계획기와 실행기가 조회해야할 파티션들이 어떤 것들인지 쿼리에서 범위" "를 판단하는 것을 허용함" -#: utils/misc/guc_tables.c:997 +#: 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." @@ -29534,7 +30851,7 @@ msgstr "" "ORDER BY / DISTINCT 집계 함수 처리를 위해 미리 정렬된 입력을 제공하는 계획을 " "생성하는 실행 계획기 기능을 활성화함" -#: utils/misc/guc_tables.c:1000 +#: 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, " @@ -29544,49 +30861,64 @@ msgstr "" "정렬된 입력을 제공하는 계획을 작성할 수 있습니다. 비활성화하면 쿼리 실행 중" "에 암묵적인 정렬을 항상 합니다." -#: utils/misc/guc_tables.c:1012 +#: utils/misc/guc_tables.c:982 msgid "Enables the planner's use of async append plans." msgstr "실행계획자가 비동기 추가 계획을 사용함" -#: utils/misc/guc_tables.c:1022 +#: utils/misc/guc_tables.c:992 +msgid "Enables reordering of GROUP BY keys." +msgstr "GROUP BY 키들의 재정렬 활성화" + +#: utils/misc/guc_tables.c:1002 msgid "Enables genetic query optimization." msgstr "유전적 쿼리 최적화(GEQO)를 사용함" -#: utils/misc/guc_tables.c:1023 +#: utils/misc/guc_tables.c:1003 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "이 알고리즘은 실행계획기의 과도한 작업 비용을 낮춥니다" -#: utils/misc/guc_tables.c:1034 +#: utils/misc/guc_tables.c:1017 msgid "Shows whether the current user is a superuser." msgstr "현재 사용자가 슈퍼유저인지 보여줍니다." -#: utils/misc/guc_tables.c:1044 +#: utils/misc/guc_tables.c:1032 +msgid "Allows running the ALTER SYSTEM command." +msgstr "ALTER SYSTEM 명령 실행 허용" + +#: 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 "다른 방법으로 전역 환경설정 값을 관리하는 환경에서는 off로 설정할 수 있습니다." + +#: utils/misc/guc_tables.c:1043 msgid "Enables advertising the server via Bonjour." msgstr "Bonjour 서버 사용" -#: utils/misc/guc_tables.c:1053 +#: utils/misc/guc_tables.c:1052 msgid "Collects transaction commit time." msgstr "트랜잭션 커밋 시간을 수집함" -#: utils/misc/guc_tables.c:1062 +#: utils/misc/guc_tables.c:1061 msgid "Enables SSL connections." msgstr "SSL 연결을 가능하게 함." -#: utils/misc/guc_tables.c:1071 -msgid "Controls whether ssl_passphrase_command is called during server reload." +#: utils/misc/guc_tables.c:1070 +msgid "" +"Controls whether \"ssl_passphrase_command\" is called during server reload." msgstr "" -"서버 reload 작업 중 ssl_passphrase_command 로 지정한 명령을 실행 할 것인지를 " +"서버 reload 작업 중 \"ssl_passphrase_command\" 로 지정한 명령을 실행 할 것인지를 " "제어함." -#: utils/misc/guc_tables.c:1080 +#: utils/misc/guc_tables.c:1079 msgid "Give priority to server ciphersuite order." msgstr "SSL 인증 알고리즘 우선 순위를 정함" -#: utils/misc/guc_tables.c:1089 +#: utils/misc/guc_tables.c:1088 msgid "Forces synchronization of updates to disk." msgstr "강제로 변경된 버퍼 자료를 디스크와 동기화 시킴." -#: utils/misc/guc_tables.c:1090 +#: 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 " @@ -29598,11 +30930,11 @@ msgstr "" "스템의 비정상적인 동작이나, 하드웨어에서 오류가 발생되었을 경우에도 자료를 안" "전하게 지킬 수 있도록 도와줄 것입니다." -#: utils/misc/guc_tables.c:1101 +#: utils/misc/guc_tables.c:1100 msgid "Continues processing after a checksum failure." msgstr "체크섬 실패 후 처리 계속 함" -#: utils/misc/guc_tables.c:1102 +#: 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 " @@ -29617,51 +30949,51 @@ msgstr "" "니다. 이 설정은 데이터 클러스터에서 체크섬 기능이 활성화 되어 있는 경우에만 " "영향을 받습니다." -#: utils/misc/guc_tables.c:1116 +#: utils/misc/guc_tables.c:1115 msgid "Continues processing past damaged page headers." msgstr "손상된 자료 헤더 발견시 작업 진행 여부 선택" -#: utils/misc/guc_tables.c:1117 +#: 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." +"error, aborting the current transaction. Setting \"zero_damaged_pages\" to " +"true causes the system to instead report a warning, zero out the damaged " +"page, and continue processing. This behavior will destroy data, namely all " +"the rows on the damaged page." msgstr "" "일반적으로 손상된 페이지 헤더를 발견하게 되면, PostgreSQL에서는 오류를 발생하" -"고, 현재 트랜잭션을 중지합니다. zero_damaged_pages 값을 true로 지정하면, 이" +"고, 현재 트랜잭션을 중지합니다. \"zero_damaged_pages\" 값을 true로 지정하면, 이" "런 손상된 페이지를 발견하면, 경고 메시지를 보여주고, 그 페이지의 크기를 0으" "로 만들고 작업을 계속 진행합니다. 이 기능을 사용한다 함은 손상된 자료를 없애" "겠다는 것을 의미합니다. 이것은 곧 저장되어있는 자료가 삭제 될 수도 있음을 의" "미하기도 합니다." -#: utils/misc/guc_tables.c:1130 +#: utils/misc/guc_tables.c:1129 msgid "Continues recovery after an invalid pages failure." msgstr "잘못된 페이지 실패 후 복구 계속 함" -#: utils/misc/guc_tables.c:1131 +#: 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 " +"Setting \"ignore_invalid_pages\" to true causes the system to ignore invalid " "page references in WAL records (but still report a warning), and continue " "recovery. This behavior may cause crashes, data loss, propagate or hide " "corruption, or other serious problems. Only has an effect during recovery or " "in standby mode." msgstr "" "PostgreSQL은 WAL 기반 복구 작업에서 해당 페이지가 잘못되어 있으면, PANIC 오류" -"를 내고 복구 작업을 중지하고 멈춥니다. ignore_invalid_pages 값을 true로 지" +"를 내고 복구 작업을 중지하고 멈춥니다. \"ignore_invalid_pages\" 값을 true로 지" "정하면, 이런 손상된 페이지가 있을 때, 경고 메시지를 보여주고, 복구 작업 계속 " "진행합니다. 이 기능을 사용하면 서버 비정상 종료나 자료 손실 숨은 손상, 기타 " "심각한 문제가 일어 날 수 있습니다. 이 설정은 복구 작업 때나 대기 모드 상태에" "서만 작동합니다." -#: utils/misc/guc_tables.c:1149 +#: utils/misc/guc_tables.c:1148 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "체크포인트 후 처음 수정할 때 전체 페이지를 WAL에 씁니다." -#: utils/misc/guc_tables.c:1150 +#: 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 " @@ -29673,7 +31005,7 @@ msgstr "" "없을 수도 있습니다. 이 옵션은 안전하게 복구가 가능하도록 체크포인트 후 처음 " "수정한 페이지는 그 페이지 전체를 WAL에 씁니다." -#: utils/misc/guc_tables.c:1163 +#: utils/misc/guc_tables.c:1162 msgid "" "Writes full pages to WAL when first modified after a checkpoint, even for a " "non-critical modification." @@ -29681,102 +31013,106 @@ msgstr "" "체크포인트 작업 후 자료 페이지에 첫 변경이 있는 경우, 치명적인 변경이 아닐지" "라도 해당 페이지 전체를 기록합니다." -#: utils/misc/guc_tables.c:1173 +#: utils/misc/guc_tables.c:1172 msgid "Writes zeroes to new WAL files before first use." msgstr "처음 사용 되기 전에 WAL 파일을 0으로 채웁니다." -#: utils/misc/guc_tables.c:1183 +#: utils/misc/guc_tables.c:1182 msgid "Recycles WAL files by renaming them." msgstr "파일 이름 변경으로 WAL 파일을 재사용합니다." -#: utils/misc/guc_tables.c:1193 +#: utils/misc/guc_tables.c:1192 msgid "Logs each checkpoint." msgstr "체크포인트 관련 정보를 기록합니다." -#: utils/misc/guc_tables.c:1202 +#: utils/misc/guc_tables.c:1201 msgid "Logs each successful connection." msgstr "연결 성공한 정보들 모두를 기록함" -#: utils/misc/guc_tables.c:1211 +#: utils/misc/guc_tables.c:1210 +msgid "Logs details of pre-authentication connection handshake." +msgstr "연결 맺기를 위한 사전 인증작업 관련 세부사항을 기록합니다." + +#: utils/misc/guc_tables.c:1220 msgid "Logs end of a session, including duration." msgstr "기간을 포함하여 세션의 끝을 기록합니다." -#: utils/misc/guc_tables.c:1220 +#: utils/misc/guc_tables.c:1229 msgid "Logs each replication command." msgstr "복제 관련 작업 내역을 기록합니다." -#: utils/misc/guc_tables.c:1229 +#: utils/misc/guc_tables.c:1238 msgid "Shows whether the running server has assertion checks enabled." msgstr "서버가 assertion 검사 기능이 활성화 되어 실행되는지 보여 줌" -#: utils/misc/guc_tables.c:1240 +#: utils/misc/guc_tables.c:1249 msgid "Terminate session on any error." msgstr "어떤 오류가 생기면 세션을 종료함" -#: utils/misc/guc_tables.c:1249 +#: utils/misc/guc_tables.c:1258 msgid "Reinitialize server after backend crash." msgstr "백엔드가 비정상 종료되면 서버를 재초기화함" -#: utils/misc/guc_tables.c:1258 +#: utils/misc/guc_tables.c:1267 msgid "Remove temporary files after backend crash." msgstr "백엔드 비정상 종료 뒤에는 임시 파일을 지웁니다." -#: utils/misc/guc_tables.c:1268 +#: 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:1278 +#: utils/misc/guc_tables.c:1287 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "멈춘 하위 프로세스에게 SIGKILL 대신에 SIGABRT 신호를 보냄" -#: utils/misc/guc_tables.c:1289 +#: utils/misc/guc_tables.c:1298 msgid "Logs the duration of each completed SQL statement." msgstr "SQL 명령 구문의 실행완료 시간을 기록함" -#: utils/misc/guc_tables.c:1298 +#: utils/misc/guc_tables.c:1307 msgid "Logs each query's parse tree." msgstr "각 쿼리의 구문 분석 트리를 기록합니다." -#: utils/misc/guc_tables.c:1307 +#: utils/misc/guc_tables.c:1316 msgid "Logs each query's rewritten parse tree." msgstr "각 쿼리의 재작성된 구문 분석 트리를 기록합니다." -#: utils/misc/guc_tables.c:1316 +#: utils/misc/guc_tables.c:1325 msgid "Logs each query's execution plan." msgstr "각 쿼리의 실행 계획을 기록합니다." -#: utils/misc/guc_tables.c:1325 +#: utils/misc/guc_tables.c:1334 msgid "Indents parse and plan tree displays." msgstr "구문과 실행계획을 보여 줄때, 들여쓰기를 함." -#: utils/misc/guc_tables.c:1334 +#: utils/misc/guc_tables.c:1343 msgid "Writes parser performance statistics to the server log." msgstr "구문분석 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc_tables.c:1343 +#: utils/misc/guc_tables.c:1352 msgid "Writes planner performance statistics to the server log." msgstr "실행계획자 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc_tables.c:1352 +#: utils/misc/guc_tables.c:1361 msgid "Writes executor performance statistics to the server log." msgstr "실행자 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc_tables.c:1361 +#: utils/misc/guc_tables.c:1370 msgid "Writes cumulative performance statistics to the server log." msgstr "누적 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc_tables.c:1371 +#: utils/misc/guc_tables.c:1380 msgid "" "Logs system resource usage statistics (memory and CPU) on various B-tree " "operations." msgstr "다양한 B트리 작업에 자원(메모리, CPU) 사용 통계를 기록에 남기" -#: utils/misc/guc_tables.c:1383 +#: utils/misc/guc_tables.c:1392 msgid "Collects information about executing commands." msgstr "명령 실행에 대한 정보를 수집함" -#: utils/misc/guc_tables.c:1384 +#: 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." @@ -29784,67 +31120,67 @@ msgstr "" "각 세션에서 사용하고 있는 현재 실행 중인 명령의 수행 시간, 명령 내용등에 대" "한 정보를 수집하도록 함" -#: utils/misc/guc_tables.c:1394 +#: utils/misc/guc_tables.c:1403 msgid "Collects statistics on database activity." msgstr "데이터베이스 활동에 대한 통계를 수집합니다." -#: utils/misc/guc_tables.c:1403 +#: utils/misc/guc_tables.c:1412 msgid "Collects timing statistics for database I/O activity." msgstr "데이터베이스 I/O 활동에 대한 통계를 수집합니다." -#: utils/misc/guc_tables.c:1412 +#: utils/misc/guc_tables.c:1421 msgid "Collects timing statistics for WAL I/O activity." msgstr "WAL I/O 활동에 작업 시간 통계를 수집합니다." -#: utils/misc/guc_tables.c:1422 +#: utils/misc/guc_tables.c:1431 msgid "Updates the process title to show the active SQL command." msgstr "활성 SQL 명령을 표시하도록 프로세스 제목을 업데이트합니다." -#: utils/misc/guc_tables.c:1423 +#: 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 "" "서버가 새 SQL 명령을 받을 때마다 프로세스 제목이 업데이트될 수 있도록 합니다." -#: utils/misc/guc_tables.c:1432 +#: utils/misc/guc_tables.c:1441 msgid "Starts the autovacuum subprocess." msgstr "자동 청소 하위 프로세스를 실행함" -#: utils/misc/guc_tables.c:1442 +#: utils/misc/guc_tables.c:1451 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "LISTEN, NOTIFY 명령 사용을 위한 디버깅 출력을 만듦." -#: utils/misc/guc_tables.c:1454 +#: utils/misc/guc_tables.c:1463 msgid "Emits information about lock usage." msgstr "잠금 사용 정보를 로그로 남김" -#: utils/misc/guc_tables.c:1464 +#: utils/misc/guc_tables.c:1473 msgid "Emits information about user lock usage." msgstr "사용자 잠금 사용 정보를 로그로 남김" -#: utils/misc/guc_tables.c:1474 +#: utils/misc/guc_tables.c:1483 msgid "Emits information about lightweight lock usage." msgstr "가벼운 잠금 사용 정보를 로그로 남김" -#: utils/misc/guc_tables.c:1484 +#: utils/misc/guc_tables.c:1493 msgid "" "Dumps information about all current locks when a deadlock timeout occurs." msgstr "교착 잠금 시간 제한 상황이 발생하면 그 때의 모든 잠금 정보를 보여줌" -#: utils/misc/guc_tables.c:1496 +#: utils/misc/guc_tables.c:1505 msgid "Logs long lock waits." msgstr "긴 잠금 대기를 기록합니다." -#: utils/misc/guc_tables.c:1505 +#: utils/misc/guc_tables.c:1514 msgid "Logs standby recovery conflict waits." msgstr "대기 서버 복구 충돌에 따른 대기 정보를 로그에 남깁니다." -#: utils/misc/guc_tables.c:1514 +#: utils/misc/guc_tables.c:1523 msgid "Logs the host name in the connection logs." msgstr "연결 기록에서 호스트 이름을 기록함." -#: utils/misc/guc_tables.c:1515 +#: 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 " @@ -29855,11 +31191,11 @@ msgstr "" "true로 바꾼다면, 이 IP의 호스트 이름을 구해서 이 이름을 사용합니다 이것의 성" "능은 OS의 IP에서 이름구하기 성능과 관계됩니다." -#: utils/misc/guc_tables.c:1526 +#: utils/misc/guc_tables.c:1535 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "\"표현식=NULL\" 식을 \"표현식 IS NULL\"로 취급함." -#: utils/misc/guc_tables.c:1527 +#: 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 " @@ -29870,10 +31206,6 @@ msgstr "" "표현식 = NULL 구문을 표현식 IS NULL 구문으로 바꾸어서 처리하도록 해서 계산에 " "따라 true, false를 반환합니다." -#: utils/misc/guc_tables.c:1539 -msgid "Enables per-database user names." -msgstr "per-database 사용자 이름 활성화." - #: utils/misc/guc_tables.c:1548 msgid "Sets the default read-only status of new transactions." msgstr "새로운 트랜잭션의 상태를 초기값으로 읽기전용으로 설정합니다." @@ -29984,29 +31316,33 @@ msgid "Sets whether to include or exclude transaction with recovery target." msgstr "복구 대상에서 트랜잭션을 포함할지 제외할지 선택합니다." #: utils/misc/guc_tables.c:1778 +msgid "Starts the WAL summarizer process to enable incremental backup." +msgstr "증분 백업을 허용하기 위해 WAL 요약 프로세스를 시작합니다." + +#: utils/misc/guc_tables.c:1788 msgid "Allows connections and queries during recovery." msgstr "복구 중에서도 접속과 쿼리 사용을 허용함" -#: utils/misc/guc_tables.c:1788 +#: 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:1798 +#: utils/misc/guc_tables.c:1808 msgid "Shows whether hot standby is currently active." msgstr "hot standby 가 활성화 되었는지 보여줌" -#: utils/misc/guc_tables.c:1809 +#: utils/misc/guc_tables.c:1819 msgid "Allows modifications of the structure of system tables." msgstr "시스템 테이블의 구조를 수정할 수 있도록 합니다." -#: utils/misc/guc_tables.c:1820 +#: utils/misc/guc_tables.c:1830 msgid "Disables reading from system indexes." msgstr "시스템 인덱스 읽기를 금지함" -#: utils/misc/guc_tables.c:1821 +#: 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." @@ -30014,16 +31350,16 @@ msgstr "" "이 설정이 활성화 되어도 그 인덱스는 갱신되어 사용하는데는 안전합니다. 하지" "만 서버가 전체적으로 늦어질 수 있습니다." -#: utils/misc/guc_tables.c:1832 +#: utils/misc/guc_tables.c:1842 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "테이블스페이스를 pg_tblspc 안에 바로 만듦, 테스팅용" -#: utils/misc/guc_tables.c:1843 +#: utils/misc/guc_tables.c:1853 msgid "" "Enables backward compatibility mode for privilege checks on large objects." msgstr "대형 개체에 대한 접근 권한 검사를 위한 하위 호환성이 있게 함" -#: utils/misc/guc_tables.c:1844 +#: 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." @@ -30031,84 +31367,99 @@ msgstr "" "PostgreSQL 9.0 이전 버전의 호환성을 위해 대형 개체에 대한 읽기, 변경 시 접근 " "권한 검사를 안 하도록 설정함" -#: utils/misc/guc_tables.c:1854 +#: utils/misc/guc_tables.c:1864 msgid "When generating SQL fragments, quote all identifiers." msgstr "SQL 구문을 만들 때, 모든 식별자는 따옴표를 사용함" -#: utils/misc/guc_tables.c:1864 +#: utils/misc/guc_tables.c:1874 msgid "Shows whether data checksums are turned on for this cluster." msgstr "이 클러스터에서 자료 체크섬 기능을 사용하는지 보여줌" -#: utils/misc/guc_tables.c:1875 +#: utils/misc/guc_tables.c:1885 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "syslog 사용시 메시지 중복을 방지하기 위해 일련 번호를 매깁니다." -#: utils/misc/guc_tables.c:1885 +#: 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:1895 +#: utils/misc/guc_tables.c:1905 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Gather와 Gather Merge 작업을 서브플랜에서도 할지를 제어함." -#: utils/misc/guc_tables.c:1896 +#: utils/misc/guc_tables.c:1906 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "서브플랜에서 gather 노드를 실행할지, 단지 튜플만 모을지 지정" -#: utils/misc/guc_tables.c:1906 +#: utils/misc/guc_tables.c:1916 msgid "Allow JIT compilation." msgstr "JIT 짜깁기 허용" -#: utils/misc/guc_tables.c:1917 +#: utils/misc/guc_tables.c:1927 msgid "Register JIT-compiled functions with debugger." msgstr "디버거용 JIT 컴파일된 함수 등록" -#: utils/misc/guc_tables.c:1934 +#: utils/misc/guc_tables.c:1944 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "LLVM bitcode 출력에 JIT 디버깅 정보 함께 기록" -#: utils/misc/guc_tables.c:1945 +#: utils/misc/guc_tables.c:1955 msgid "Allow JIT compilation of expressions." msgstr "표현식의 JIT 짜깁기 허용" -#: utils/misc/guc_tables.c:1956 +#: utils/misc/guc_tables.c:1966 msgid "Register JIT-compiled functions with perf profiler." msgstr "perf 프로파일러용 JIT 컴파일된 함수 등록" -#: utils/misc/guc_tables.c:1973 +#: utils/misc/guc_tables.c:1983 msgid "Allow JIT compilation of tuple deforming." msgstr "튜플 deform에 JIT 짜깁기 허용" -#: utils/misc/guc_tables.c:1984 +#: utils/misc/guc_tables.c:1994 msgid "Whether to continue running after a failure to sync data files." msgstr "데이터 파일 동기화 작업 실패 뒤에도 실행을 계속할지 선택함" -#: utils/misc/guc_tables.c:1993 +#: 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 "" "WAL 수신기가 영구 슬롯 설정이 되어 있지 않을 때, 임시 복제 슬롯을 만들지 지정" -#: utils/misc/guc_tables.c:2011 +#: utils/misc/guc_tables.c:2012 +msgid "Enables event triggers." +msgstr "이벤트 트리거 활성화합니다." + +#: utils/misc/guc_tables.c:2013 +msgid "When enabled, event triggers will fire for all applicable statements." +msgstr "활성화 되면, 구현 가능한 모든 구문에 대해서 이벤트 트리거가 실행됩니다." + +#: utils/misc/guc_tables.c:2022 +msgid "" +"Enables a physical standby to synchronize logical failover replication slots " +"from the primary server." +msgstr "" +"물리 복제 대기 서버가 주 서버로부터 논리 failover 복제 슬롯 동기화 하도록 합니다." + +#: utils/misc/guc_tables.c:2040 msgid "" "Sets the amount of time to wait before forcing a switch to the next WAL file." msgstr "다음 WAL 파일로 강제 전환하기 전에 대기할 시간 지정" -#: utils/misc/guc_tables.c:2022 +#: 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:2024 utils/misc/guc_tables.c:2658 +#: 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:2033 +#: utils/misc/guc_tables.c:2062 msgid "Sets the default statistics target." msgstr "기본 통계 대상을 지정합니다." -#: utils/misc/guc_tables.c:2034 +#: 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." @@ -30116,12 +31467,12 @@ msgstr "" "특정 칼럼을 지정하지 않고 ALTER TABLE SET STATISTICS 명령을 사용했을 때, 통" "계 대상이 될 칼럼을 지정합니다." -#: utils/misc/guc_tables.c:2043 +#: utils/misc/guc_tables.c:2072 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "이 크기를 초과할 경우 하위 쿼리가 축소되지 않는 FROM 목록 크기를 설정합니다." -#: utils/misc/guc_tables.c:2045 +#: 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." @@ -30129,12 +31480,12 @@ msgstr "" "결과 FROM 목록에 포함된 항목이 이 개수를 넘지 않는 경우 계획 관리자가 하" "위 쿼리를 상위 쿼리에 병합합니다." -#: utils/misc/guc_tables.c:2056 +#: utils/misc/guc_tables.c:2085 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "이 크기를 초과할 경우 JOIN 구문이 결합되지 않는 FROM 목록 크기를 설정합니다." -#: utils/misc/guc_tables.c:2058 +#: 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." @@ -30142,32 +31493,32 @@ msgstr "" "결과 목록에 포함된 항목이 이 개수를 넘지 않을 때마다 계획 관리자가 명시" "적 JOIN 구문을 FROM 항목 목록에 결합합니다." -#: utils/misc/guc_tables.c:2069 +#: utils/misc/guc_tables.c:2098 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" "이 임계값을 초과할 경우 GEQO가 사용되는 FROM 항목의 임계값을 설정합니다." -#: utils/misc/guc_tables.c:2079 +#: utils/misc/guc_tables.c:2108 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: 다른 GEQO 매개 변수의 기본 값을 설정하는 데 사용됩니다." -#: utils/misc/guc_tables.c:2089 +#: utils/misc/guc_tables.c:2118 msgid "GEQO: number of individuals in the population." msgstr "GEQO: 모집단의 개인 수입니다." -#: utils/misc/guc_tables.c:2090 utils/misc/guc_tables.c:2100 +#: utils/misc/guc_tables.c:2119 utils/misc/guc_tables.c:2129 msgid "Zero selects a suitable default value." msgstr "0을 지정하면 적절한 기본 값이 선택됩니다." -#: utils/misc/guc_tables.c:2099 +#: utils/misc/guc_tables.c:2128 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: 알고리즘의 반복 수입니다." -#: utils/misc/guc_tables.c:2111 +#: 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:2122 +#: utils/misc/guc_tables.c:2151 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing archived WAL data." @@ -30175,38 +31526,38 @@ msgstr "" "읽기 전용 보조 서버가 아카이브된 WAL 자료를 처리할 때, 지연될 수 있는 최대 시" "간" -#: utils/misc/guc_tables.c:2133 +#: 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 "" "읽기 전용 보조 서버가 스트림 WAL 자료를 처리할 때, 지연될 수 있는 최대 시간" -#: utils/misc/guc_tables.c:2144 +#: utils/misc/guc_tables.c:2173 msgid "Sets the minimum delay for applying changes during recovery." msgstr "변경 사항 반영을 위한 최소 지연 시간 지정" -#: utils/misc/guc_tables.c:2155 +#: utils/misc/guc_tables.c:2184 msgid "" "Sets the maximum interval between WAL receiver status reports to the sending " "server." msgstr "WAL 정보를 보내는 서버에게 WAL 수신기 상태를 보고하는 최대 간격" -#: utils/misc/guc_tables.c:2166 +#: utils/misc/guc_tables.c:2195 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "" "WAL 정보를 보내는 서버로부터 보낸 자료를 받기위해 기다릴 수 있는 최대 허용 시" "간을 설정합니다." -#: utils/misc/guc_tables.c:2177 +#: utils/misc/guc_tables.c:2206 msgid "Sets the maximum number of concurrent connections." msgstr "최대 동시 접속수를 지정합니다." -#: utils/misc/guc_tables.c:2188 +#: utils/misc/guc_tables.c:2217 msgid "Sets the number of connection slots reserved for superusers." msgstr "superuser 동시 접속수를 지정합니다." -#: utils/misc/guc_tables.c:2198 +#: utils/misc/guc_tables.c:2227 msgid "" "Sets the number of connection slots reserved for roles with privileges of " "pg_use_reserved_connections." @@ -30214,45 +31565,92 @@ msgstr "" "pg_use_reserved_connections 권한이 있는 롤의 예약된 연결 슬롯 수를 설정합니" "다." -#: utils/misc/guc_tables.c:2209 +#: utils/misc/guc_tables.c:2238 msgid "Amount of dynamic shared memory reserved at startup." msgstr "시작시 확보할 동적 공유 메모리 크기" -#: utils/misc/guc_tables.c:2224 +#: utils/misc/guc_tables.c:2253 msgid "Sets the number of shared memory buffers used by the server." msgstr "서버에서 사용할 공유 메모리 버퍼 개수를 지정함" -#: utils/misc/guc_tables.c:2235 +#: utils/misc/guc_tables.c:2264 msgid "Sets the buffer pool size for VACUUM, ANALYZE, and autovacuum." msgstr "VACUUM, ANALYZE, autovacuum 작업용 버퍼 풀 크기를 설정합니다." -#: utils/misc/guc_tables.c:2246 +#: 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 "서버의 메인 공유 메모리 영역 크기를 보여줌(MB 단위로 근사값처리함)" -#: utils/misc/guc_tables.c:2257 +#: utils/misc/guc_tables.c:2286 msgid "Shows the number of huge pages needed for the main shared memory area." msgstr "메인 공유 메모리 영역용 huge 페이지 개수를 보여줌" -#: utils/misc/guc_tables.c:2258 +#: utils/misc/guc_tables.c:2287 msgid "-1 indicates that the value could not be determined." msgstr "-1 은 사용하지 않음을 뜻함" -#: utils/misc/guc_tables.c:2268 +#: 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: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 "이 값을 shared_buffers의 일부로 하려면 0을 지정합니다." + +#: utils/misc/guc_tables.c:2308 +msgid "" +"Sets the size of the dedicated buffer pool used for the MultiXact member " +"cache." +msgstr "MultiXact 번호 캐시용 버퍼 풀 크기 지정" + +#: utils/misc/guc_tables.c:2319 +msgid "" +"Sets the size of the dedicated buffer pool used for the MultiXact offset " +"cache." +msgstr "MultiXact offset 캐시용 버퍼 풀 크기 지정" + +#: utils/misc/guc_tables.c:2330 +msgid "" +"Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY " +"message cache." +msgstr "LISTEN/NOTIFY 메시지 캐시용 버퍼 풀 크기 지정" + +#: 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:2352 +msgid "" +"Sets the size of the dedicated buffer pool used for the subtransaction cache." +msgstr "하위트랜잭션 캐시를 위한 버퍼 풀 크기를 지정합니다." + +#: 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:2374 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "각 세션에서 사용하는 임시 버퍼의 최대 개수를 지정" -#: utils/misc/guc_tables.c:2279 +#: utils/misc/guc_tables.c:2385 msgid "Sets the TCP port the server listens on." msgstr "TCP 포트 번호를 지정함." -#: utils/misc/guc_tables.c:2289 +#: utils/misc/guc_tables.c:2395 msgid "Sets the access permissions of the Unix-domain socket." msgstr "유닉스 도메인 소켓 파일의 액세스 권한을 지정함" -#: utils/misc/guc_tables.c:2290 +#: 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 " @@ -30263,11 +31661,11 @@ msgstr "" "수 값은 chmod 및 umask 시스템 호출에서 수락되는 형태의 숫자 모드 지정이어야 " "합니다. (일반적인 8진수 형식을 사용하려면 숫자가 0으로 시작해야 합니다.)" -#: utils/misc/guc_tables.c:2304 +#: utils/misc/guc_tables.c:2410 msgid "Sets the file permissions for log files." msgstr "로그 파일의 파일 접근 권한을 지정합니다." -#: utils/misc/guc_tables.c:2305 +#: 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 " @@ -30277,11 +31675,11 @@ msgstr "" "이어야 합니다. (일반적인 8진수 형식을 사용하려면 숫자가 0으로 시작해야 합니" "다.)" -#: utils/misc/guc_tables.c:2319 +#: utils/misc/guc_tables.c:2425 msgid "Shows the mode of the data directory." msgstr "데이터 디렉터리의 모드값을 보여줌" -#: utils/misc/guc_tables.c:2320 +#: 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 " @@ -30291,11 +31689,11 @@ msgstr "" "이어야 합니다. (일반적인 8진수 형식을 사용하려면 숫자가 0으로 시작해야 합니" "다.)" -#: utils/misc/guc_tables.c:2333 +#: utils/misc/guc_tables.c:2439 msgid "Sets the maximum memory to be used for query workspaces." msgstr "쿼리 작업공간을 위해 사용될 메모리의 최대값을 지정함." -#: utils/misc/guc_tables.c:2334 +#: 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." @@ -30303,128 +31701,136 @@ msgstr "" "임시 디스크 파일로 전환하기 전에 각 내부 정렬 작업과 해시 테이블에서 이 크기" "의 메모리를 사용할 수 있습니다." -#: utils/misc/guc_tables.c:2346 +#: utils/misc/guc_tables.c:2457 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "관리 작업을 위해 사용될 메모리의 최대값을 지정함." -#: utils/misc/guc_tables.c:2347 +#: 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:2357 +#: utils/misc/guc_tables.c:2468 msgid "Sets the maximum memory to be used for logical decoding." msgstr "논리 디코딩 작업을 위해 사용될 메모리의 최대값을 지정함." -#: utils/misc/guc_tables.c:2358 +#: 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:2374 +#: utils/misc/guc_tables.c:2485 msgid "Sets the maximum stack depth, in kilobytes." msgstr "스택깊이(KB 단위) 최대값을 지정합니다." -#: utils/misc/guc_tables.c:2385 +#: 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:2386 +#: utils/misc/guc_tables.c:2497 msgid "-1 means no limit." msgstr "-1은 제한 없음" -#: utils/misc/guc_tables.c:2396 +#: utils/misc/guc_tables.c:2507 msgid "Vacuum cost for a page found in the buffer cache." msgstr "버퍼 캐시에 있는 페이지의 청소 비용입니다." -#: utils/misc/guc_tables.c:2406 +#: utils/misc/guc_tables.c:2517 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "버퍼 캐시에 없는 페이지의 청소 비용입니다." -#: utils/misc/guc_tables.c:2416 +#: utils/misc/guc_tables.c:2527 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "청소로 페이지 변경 시 부과되는 비용입니다." -#: utils/misc/guc_tables.c:2426 +#: utils/misc/guc_tables.c:2537 msgid "Vacuum cost amount available before napping." msgstr "청소가 중지되는 청소 비용 합계입니다." -#: utils/misc/guc_tables.c:2436 +#: utils/misc/guc_tables.c:2547 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "자동 청소에 대한 청소가 중지되는 청소 비용 합계입니다." -#: utils/misc/guc_tables.c:2446 +#: 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:2459 +#: utils/misc/guc_tables.c:2570 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "동시에 준비된 트랜잭션 최대 개수 지정" -#: utils/misc/guc_tables.c:2470 +#: utils/misc/guc_tables.c:2581 msgid "Sets the minimum OID of tables for tracking locks." msgstr "잠금 추적을 위한 테이블의 최소 OID 지정" -#: utils/misc/guc_tables.c:2471 +#: utils/misc/guc_tables.c:2582 msgid "Is used to avoid output on system tables." msgstr "시스템 테이블 출력 방지용" -#: utils/misc/guc_tables.c:2480 +#: utils/misc/guc_tables.c:2591 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "무조건 잠금 추적용 테이블 OID 지정" -#: utils/misc/guc_tables.c:2492 +#: utils/misc/guc_tables.c:2603 msgid "Sets the maximum allowed duration of any statement." msgstr "모든 쿼리문에 적용되는 허용되는 최대 수행시간" -#: utils/misc/guc_tables.c:2493 utils/misc/guc_tables.c:2504 -#: utils/misc/guc_tables.c:2515 utils/misc/guc_tables.c:2526 +#: 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:2503 +#: utils/misc/guc_tables.c:2614 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "모든 잠금에 적용되는 기다리는 최대 대기 시간" -#: utils/misc/guc_tables.c:2514 +#: utils/misc/guc_tables.c:2625 msgid "" "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "idle-in-transaction 상태로 있을 수 있는 최대 시간 지정" -#: utils/misc/guc_tables.c:2525 +#: 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:2647 msgid "" "Sets the maximum allowed idle time between queries, when not in a " "transaction." msgstr "idle 상태로 있을 수 있는 최대 시간 지정" -#: utils/misc/guc_tables.c:2536 +#: utils/misc/guc_tables.c:2658 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "VACUUM에서 테이블 행을 동결할 때까지의 최소 기간입니다." -#: utils/misc/guc_tables.c:2546 +#: utils/misc/guc_tables.c:2668 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" "VACUUM에서 튜플을 동결하기 위해 전체 테이블을 스캔할 때까지의 기간입니다." -#: utils/misc/guc_tables.c:2556 +#: utils/misc/guc_tables.c:2678 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "VACUUM에서 테이블 MultiXactId 동결할 때까지의 최소 기간입니다." -#: utils/misc/guc_tables.c:2566 +#: utils/misc/guc_tables.c:2688 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "VACUUM에서 튜플을 동결하기 위해 전체 테이블을 스캔할 때까지의 멀티트랜잭션 기" "간입니다." -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2698 msgid "" "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" "VACUUM 작업에서 트랜잭션ID 겹침 방지를 피하기 위한 freeze 작업을 하는 테이블 " "나이" -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2707 msgid "" "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound " "outage." @@ -30432,40 +31838,40 @@ msgstr "" "VACUUM 작업에서 트랜잭션ID 겹침 방지를 피하기 위한 freeze 작업을 하는 멀티트" "랜잭션 나이" -#: utils/misc/guc_tables.c:2598 +#: utils/misc/guc_tables.c:2720 msgid "Sets the maximum number of locks per transaction." msgstr "하나의 트랜잭션에서 사용할 수 있는 최대 잠금 횟수를 지정함." -#: utils/misc/guc_tables.c:2599 +#: 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." +"\"max_locks_per_transaction\" objects per server process or prepared " +"transaction will need to be locked at any one time." msgstr "" "공유 잠금 테이블은 한 번에 잠궈야 할 고유 개체 수가 " -"max_locks_per_transaction * (max_connections 또는 미리 준비된 트랜잭션 수)를 " +"\"max_locks_per_transaction\" * (\"max_connections\" 또는 미리 준비된 트랜잭션 수)를 " "넘지 않는다는 가정 하에 크기가 지정됩니다." -#: utils/misc/guc_tables.c:2610 +#: utils/misc/guc_tables.c:2732 msgid "Sets the maximum number of predicate locks per transaction." msgstr "하나의 트랜잭션에서 사용할 수 있는 최대 잠금 횟수를 지정함." -#: utils/misc/guc_tables.c:2611 +#: 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 " +"\"max_pred_locks_per_transaction\" objects per server process or prepared " "transaction will need to be locked at any one time." msgstr "" "공유 predicate 잠금 테이블은 한 번에 잠궈야 할 고유 개체 수가 " -"max_pred_locks_per_transaction * (max_connections 또는 미리 준비된 트랜잭션 " +"\"max_pred_locks_per_transaction\" * (\"max_connections\" 또는 미리 준비된 트랜잭션 " "수)를 넘지 않는다는 가정 하에 크기가 지정됩니다." -#: utils/misc/guc_tables.c:2622 +#: utils/misc/guc_tables.c:2744 msgid "" "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "릴레이션 당 최대 predicate-lock 페이지와 튜플 수 지정" -#: utils/misc/guc_tables.c:2623 +#: 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." @@ -30473,11 +31879,11 @@ msgstr "" "한 연결에서 같은 릴레이션 대상으로 이 값보다 큰 페이지와 튜플을 잠근다면, 그 " "잠금은 릴레이션 수준 잠금으로 변경 된다." -#: utils/misc/guc_tables.c:2633 +#: utils/misc/guc_tables.c:2755 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "페이지당 predicate-lock 튜플 최대 수 지정." -#: utils/misc/guc_tables.c:2634 +#: 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." @@ -30485,49 +31891,53 @@ msgstr "" "한 연결에서 같은 페이지 대상으로 이 값보다 튜플을 잠근다면, 그 잠금은 페이지 " "수준 잠금으로 변경 된다." -#: utils/misc/guc_tables.c:2644 +#: utils/misc/guc_tables.c:2766 msgid "Sets the maximum allowed time to complete client authentication." msgstr "클라이언트 인증을 완료할 수 있는 최대 허용 시간을 설정합니다." -#: utils/misc/guc_tables.c:2656 +#: 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:2668 +#: 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:2800 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "복구에서 WAL 미리 읽을 버퍼 크기" -#: utils/misc/guc_tables.c:2669 +#: utils/misc/guc_tables.c:2801 msgid "" "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." msgstr "" "참조된 데이터 블록을 미리 가져오기 위해 WAL에서 미리 읽을 수 있는 최대 거리." -#: utils/misc/guc_tables.c:2679 +#: utils/misc/guc_tables.c:2811 msgid "Sets the size of WAL files held for standby servers." msgstr "대기 서버를 위해 보관하고 있을 WAL 파일 크기를 지정" -#: utils/misc/guc_tables.c:2690 +#: utils/misc/guc_tables.c:2822 msgid "Sets the minimum size to shrink the WAL to." msgstr "WAL 최소 크기" -#: utils/misc/guc_tables.c:2702 +#: utils/misc/guc_tables.c:2834 msgid "Sets the WAL size that triggers a checkpoint." msgstr "체크포인트 작업을 할 WAL 크기 지정" -#: utils/misc/guc_tables.c:2714 +#: utils/misc/guc_tables.c:2846 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "자동 WAL 체크포인트 사이의 최대 간격을 설정합니다." -#: utils/misc/guc_tables.c:2725 +#: utils/misc/guc_tables.c:2857 msgid "" "Sets the maximum time before warning if checkpoints triggered by WAL volume " "happen too frequently." msgstr "" "WAL 기록 때문에 자주 발생하는 체크포인트 경고를 보이지 않는 최대 시간 지정" -#: utils/misc/guc_tables.c:2727 +#: 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 " @@ -30537,69 +31947,76 @@ msgstr "" "용이 꽉 차는 사태가 발생하면 경고 메시지를 서버 로그에 남깁니다. 이 값을 0으" "로 지정하면 경고 남기지 않음" -#: utils/misc/guc_tables.c:2740 utils/misc/guc_tables.c:2958 -#: utils/misc/guc_tables.c:2998 +#: 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:2751 +#: utils/misc/guc_tables.c:2883 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" "WAL 기능을 위해 공유 메모리에서 사용할 디스크 페이지 버퍼 개수를 지정함." -#: utils/misc/guc_tables.c:2762 +#: utils/misc/guc_tables.c:2884 +msgid "" +"Specify -1 to have this value determined as a fraction of shared_buffers." +msgstr "shared_buffers 일부로 지정하려면 -1" + +#: utils/misc/guc_tables.c:2894 msgid "Time between WAL flushes performed in the WAL writer." msgstr "WAL 기록자가 지정 시간 만큼 쉬고 쓰기 작업을 반복함" -#: utils/misc/guc_tables.c:2773 +#: utils/misc/guc_tables.c:2905 msgid "Amount of WAL written out by WAL writer that triggers a flush." -msgstr "" +msgstr "WAL 쓰기 프로세스가 이 양만큼 쓰고 flush 합니다." -#: utils/misc/guc_tables.c:2784 +#: utils/misc/guc_tables.c:2916 msgid "Minimum size of new file to fsync instead of writing WAL." -msgstr "" +msgstr "WAL 쓰기 대신해서 fsync할 새 파일의 최소 크기" -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2927 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "동시에 작동할 WAL 송신 프로세스 최대 수 지정" -#: utils/misc/guc_tables.c:2806 +#: utils/misc/guc_tables.c:2938 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "동시에 사용할 수 있는 복제 슬롯 최대 수 지정" -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2948 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "복제 슬롯을 위해 보관할 최대 WAL 크기 지정" -#: utils/misc/guc_tables.c:2817 +#: 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 "" +"디스크에서 WAL이 이 정도의 공간을 차지하면 복제 슬롯은 실패로 표시되고, " +"WAL 조각 파일들은 삭제 또는 재활용 됩니다." -#: utils/misc/guc_tables.c:2829 +#: utils/misc/guc_tables.c:2961 msgid "Sets the maximum time to wait for WAL replication." msgstr "WAL 복제를 위해 기다릴 최대 시간 설정" -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2972 msgid "" "Sets the delay in microseconds between transaction commit and flushing WAL " "to disk." msgstr "" "트랜잭션과 트랜잭션 로그의 적용 사이의 간격을 microsecond 단위로 지정함" -#: utils/misc/guc_tables.c:2852 +#: utils/misc/guc_tables.c:2984 msgid "" "Sets the minimum number of concurrent open transactions required before " -"performing commit_delay." -msgstr "commit_delay 처리하기 전에 있는 최소 동시 열려 있는 트랜잭션 개수." +"performing \"commit_delay\"." +msgstr "\"commit_delay\" 처리하기 전에 있는 최소 동시 열려 있는 트랜잭션 개수." -#: utils/misc/guc_tables.c:2863 +#: utils/misc/guc_tables.c:2995 msgid "Sets the number of digits displayed for floating-point values." msgstr "부동소수형 값을 표기할 때 " -#: utils/misc/guc_tables.c:2864 +#: 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 " @@ -30610,7 +32027,7 @@ msgstr "" "은 정수여야 합니다(FLT_DIG or DBL_DIG as appropriate - 무슨 말인지). 음수면 " "그 만큼 소숫점 자리를 더 많이 생략해서 정확도를 떨어뜨립니다." -#: utils/misc/guc_tables.c:2876 +#: 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." @@ -30618,20 +32035,20 @@ msgstr "" "log_statement_sample_rate 설정으로 수집할 로그 가운데, 기록할 최소 쿼리 수행 " "시간" -#: utils/misc/guc_tables.c:2879 +#: utils/misc/guc_tables.c:3011 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "0을 지정하면 모든 쿼리를 로깅하고, -1을 지정하면 이 기능이 해제됩니다." -#: utils/misc/guc_tables.c:2889 +#: 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:2891 +#: utils/misc/guc_tables.c:3023 msgid "Zero prints all queries. -1 turns this feature off." msgstr "0을 지정하면 모든 쿼리를 로깅하고, -1을 지정하면 이 기능이 해제됩니다." -#: utils/misc/guc_tables.c:2901 +#: utils/misc/guc_tables.c:3033 msgid "" "Sets the minimum execution time above which autovacuum actions will be " "logged." @@ -30639,192 +32056,192 @@ msgstr "" "이 시간을 초과할 경우 자동 청소 작업 로그를 남길 최소 실행 시간을 설정합니" "다." -#: utils/misc/guc_tables.c:2903 +#: utils/misc/guc_tables.c:3035 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "" "0을 지정하면 모든 작업을 로깅하고, -1을 지정하면 자동 청소관련 로그를 남기지 " "않음" -#: utils/misc/guc_tables.c:2913 +#: 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:2915 utils/misc/guc_tables.c:2927 +#: 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:2925 +#: 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:2937 +#: utils/misc/guc_tables.c:3069 msgid "Background writer sleep time between rounds." msgstr "백그라운드 기록자의 잠자는 시간" -#: utils/misc/guc_tables.c:2948 +#: utils/misc/guc_tables.c:3080 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "라운드당 플러시할 백그라운드 작성기 최대 LRU 페이지 수입니다." -#: utils/misc/guc_tables.c:2971 +#: 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:2985 +#: utils/misc/guc_tables.c:3117 msgid "" -"A variant of effective_io_concurrency that is used for maintenance work." +"A variant of \"effective_io_concurrency\" that is used for maintenance work." msgstr "" +"유지보수 작업에 사용되는 \"effective_io_concurrency\"의 변형입니다." -#: utils/misc/guc_tables.c:3011 +#: utils/misc/guc_tables.c:3132 +msgid "Limit on the size of data reads and writes." +msgstr "데이터 읽기 쓰기 크기의 제한을 겁니다." + +#: utils/misc/guc_tables.c:3157 msgid "Maximum number of concurrent worker processes." msgstr "동시 작업자 프로세스의 최대 수" -#: utils/misc/guc_tables.c:3023 +#: utils/misc/guc_tables.c:3169 msgid "Maximum number of logical replication worker processes." msgstr "논리 복제 작업자 프로세스의 최대 수" -#: utils/misc/guc_tables.c:3035 +#: utils/misc/guc_tables.c:3181 msgid "Maximum number of table synchronization workers per subscription." msgstr "구독을 위한 테이블 동기화 작업자의 최대 수" -#: utils/misc/guc_tables.c:3047 +#: utils/misc/guc_tables.c:3193 msgid "Maximum number of parallel apply workers per subscription." msgstr "구독을 위한 테이블 병렬 동기화 작업자의 최대 수" -#: utils/misc/guc_tables.c:3057 +#: 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:3069 +#: 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:3081 +#: utils/misc/guc_tables.c:3227 msgid "Shows the maximum number of function arguments." msgstr "함수 인자의 최대 갯수를 보여줍니다" -#: utils/misc/guc_tables.c:3092 +#: utils/misc/guc_tables.c:3238 msgid "Shows the maximum number of index keys." msgstr "인덱스 키의 최대개수를 보여줍니다." -#: utils/misc/guc_tables.c:3103 +#: utils/misc/guc_tables.c:3249 msgid "Shows the maximum identifier length." msgstr "최대 식별자 길이를 표시합니다." -#: utils/misc/guc_tables.c:3114 +#: utils/misc/guc_tables.c:3260 msgid "Shows the size of a disk block." msgstr "디스크 블록의 크기를 표시합니다." -#: utils/misc/guc_tables.c:3125 +#: utils/misc/guc_tables.c:3271 msgid "Shows the number of pages per disk file." msgstr "디스크 파일당 페이지 수를 표시합니다." -#: utils/misc/guc_tables.c:3136 +#: utils/misc/guc_tables.c:3282 msgid "Shows the block size in the write ahead log." msgstr "미리 쓰기 로그의 블록 크기를 표시합니다." -#: utils/misc/guc_tables.c:3147 +#: utils/misc/guc_tables.c:3293 msgid "" "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "" +"실패한 시도 후 WAL 검색을 다시 시도하기 전에 기다리는 시간을 설정합니다." -#: utils/misc/guc_tables.c:3159 +#: utils/misc/guc_tables.c:3305 msgid "Shows the size of write ahead log segments." msgstr "미리 쓰기 로그 세그먼트당 페이지 크기를 표시합니다." -#: utils/misc/guc_tables.c:3172 +#: utils/misc/guc_tables.c:3318 +msgid "Time for which WAL summary files should be kept." +msgstr "WAL 요약 파일을 보관해야 하는 시간입니다." + +#: utils/misc/guc_tables.c:3331 msgid "Time to sleep between autovacuum runs." msgstr "자동 청소 실행 사이의 절전 모드 시간입니다." -#: utils/misc/guc_tables.c:3182 +#: utils/misc/guc_tables.c:3341 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "청소 전의 최소 튜플 업데이트 또는 삭제 수입니다." -#: utils/misc/guc_tables.c:3191 +#: utils/misc/guc_tables.c:3350 msgid "" "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert " "vacuums." msgstr "청소를 위한 최소 튜플 삽입 수입니다. -1은 insert는 vacuum에서 제외" -#: utils/misc/guc_tables.c:3200 +#: utils/misc/guc_tables.c:3359 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "통계 정보 수집을 위한 최소 튜플 삽입, 업데이트 또는 삭제 수입니다." -#: utils/misc/guc_tables.c:3210 +#: utils/misc/guc_tables.c:3369 msgid "" "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "" "트랜잭션 ID 겹침 방지를 위해 테이블에 대해 autovacuum 작업을 수행할 테이블 나" "이를 지정합니다." -#: utils/misc/guc_tables.c:3222 +#: utils/misc/guc_tables.c:3381 msgid "" "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "" "멀티 트랜잭션 ID 겹침 방지를 위해 테이블에 대해 autovacuum 작업을 수행할 트랜" "잭션 나이를 지정합니다." -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3391 msgid "" "Sets the maximum number of simultaneously running autovacuum worker " "processes." msgstr "동시에 작업할 수 있는 autovacuum 작업자 최대 수 지정" -#: utils/misc/guc_tables.c:3242 +#: utils/misc/guc_tables.c:3401 msgid "" "Sets the maximum number of parallel processes per maintenance operation." msgstr "유지보수 작업에서 사용할 병렬 프로세스 최대 수를 지정" -#: utils/misc/guc_tables.c:3252 +#: utils/misc/guc_tables.c:3411 msgid "Sets the maximum number of parallel processes per executor node." msgstr "실행 노드당 최대 병렬 처리 수 지정" -#: utils/misc/guc_tables.c:3263 +#: 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:3274 +#: utils/misc/guc_tables.c:3433 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "각 autovacuum 작업자 프로세스가 사용할 메모리 최대치" -#: utils/misc/guc_tables.c:3285 -msgid "" -"Time before a snapshot is too old to read pages changed after the snapshot " -"was taken." -msgstr "" - -#: utils/misc/guc_tables.c:3286 -msgid "A value of -1 disables this feature." -msgstr "이 값이 -1 이면 이 기능 사용 안함" - -#: utils/misc/guc_tables.c:3296 +#: utils/misc/guc_tables.c:3444 msgid "Time between issuing TCP keepalives." msgstr "TCP 연결 유지 실행 간격입니다." -#: utils/misc/guc_tables.c:3297 utils/misc/guc_tables.c:3308 -#: utils/misc/guc_tables.c:3432 +#: 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:3307 +#: utils/misc/guc_tables.c:3455 msgid "Time between TCP keepalive retransmits." msgstr "TCP keepalive 시간 설정" -#: utils/misc/guc_tables.c:3318 +#: utils/misc/guc_tables.c:3466 msgid "SSL renegotiation is no longer supported; this can only be 0." -msgstr "" +msgstr "SSL 재협상은 더 이상 지원되지 않습니다. 이 값은 0만 가능합니다." -#: utils/misc/guc_tables.c:3329 +#: utils/misc/guc_tables.c:3477 msgid "Maximum number of TCP keepalive retransmits." msgstr "TCP keepalive 확인 최대 횟수" -#: utils/misc/guc_tables.c:3330 +#: 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." @@ -30832,15 +32249,15 @@ msgstr "" "연결이 중단된 것으로 간주되기 전에 연결 유지 요청을 위한 연속적인 keepalive " "패킷 전송 수. 0을 지정하면 시스템 기본 값이 사용됩니다." -#: utils/misc/guc_tables.c:3341 +#: utils/misc/guc_tables.c:3489 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "정확한 GIN 기준 검색에 허용되는 최대 결과 수를 설정합니다." -#: utils/misc/guc_tables.c:3352 +#: 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:3353 +#: 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 " @@ -30849,85 +32266,89 @@ msgstr "" "즉, PostgreSQL에서 사용하는 총 캐시 크기입니다(커널 캐시와 공유 버퍼 모두 포" "함). 이 값은 디스크 페이지 단위로 측정되며, 일반적으로 각각 8kB입니다." -#: utils/misc/guc_tables.c:3364 +#: utils/misc/guc_tables.c:3512 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "병렬 조회를 위한 최소 테이블 자료량 지정" -#: utils/misc/guc_tables.c:3365 +#: 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:3375 +#: utils/misc/guc_tables.c:3523 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "병렬 조회를 위한 최소 인덱스 자료량 지정" -#: utils/misc/guc_tables.c:3376 +#: 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:3387 +#: utils/misc/guc_tables.c:3535 msgid "Shows the server version as an integer." msgstr "서버 버전을 정수형으로 보여줍니다" -#: utils/misc/guc_tables.c:3398 +#: 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:3399 +#: utils/misc/guc_tables.c:3547 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "0을 지정하면 모든 파일이 기록됩니다. 기본 값은 -1로, 이 기능이 해제됩니다." -#: utils/misc/guc_tables.c:3409 +#: 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:3420 +#: utils/misc/guc_tables.c:3568 msgid "Sets the maximum size of the pending list for GIN index." msgstr "GIN 인덱스를 위한 팬딩(pending) 목록의 최대 크기 지정" -#: utils/misc/guc_tables.c:3431 +#: utils/misc/guc_tables.c:3579 msgid "TCP user timeout." -msgstr "" +msgstr "TCP 사용자 제한시간." -#: utils/misc/guc_tables.c:3442 +#: utils/misc/guc_tables.c:3590 msgid "The size of huge page that should be requested." -msgstr "" +msgstr "요청되는 huge page 크기" -#: utils/misc/guc_tables.c:3453 +#: utils/misc/guc_tables.c:3601 msgid "Aggressively flush system caches for debugging purposes." -msgstr "" +msgstr "디버킹 처리를 위해 적극적으로 시스템 캐시를 비웁니다." -#: utils/misc/guc_tables.c:3476 +#: utils/misc/guc_tables.c:3624 msgid "" "Sets the time interval between checks for disconnection while running " "queries." msgstr "쿼리 실행 중에 연결을 끊을지 검사하는 간격을 지정합니다." -#: utils/misc/guc_tables.c:3487 +#: utils/misc/guc_tables.c:3635 msgid "Time between progress updates for long-running startup operations." msgstr "연결 작업이 오래 진행되는 경우 진행 상태 갱신 주기" -#: utils/misc/guc_tables.c:3489 +#: utils/misc/guc_tables.c:3637 msgid "0 turns this feature off." msgstr "0을 지정하면 이 기능이 해제됩니다." -#: utils/misc/guc_tables.c:3499 +#: utils/misc/guc_tables.c:3647 msgid "Sets the iteration count for SCRAM secret generation." msgstr "SCRAM 비밀번호 생성용 이터레이션 수를 지정합니다." -#: utils/misc/guc_tables.c:3519 +#: 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:3530 +#: utils/misc/guc_tables.c:3678 msgid "" "Sets the planner's estimate of the cost of a nonsequentially fetched disk " "page." @@ -30935,11 +32356,11 @@ msgstr "" "비순차적으로 접근하는 디스크 페이지에 대한 계획 관리자의 예상 비용을 설정합니" "다." -#: utils/misc/guc_tables.c:3541 +#: 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:3552 +#: utils/misc/guc_tables.c:3700 msgid "" "Sets the planner's estimate of the cost of processing each index entry " "during an index scan." @@ -30947,7 +32368,7 @@ msgstr "" "실행 계획기의 비용 계산에 사용될 인덱스 스캔으로 각 인덱스 항목을 처리하는 예" "상 처리 비용을 설정합니다." -#: utils/misc/guc_tables.c:3563 +#: utils/misc/guc_tables.c:3711 msgid "" "Sets the planner's estimate of the cost of processing each operator or " "function call." @@ -30955,7 +32376,7 @@ msgstr "" "실행 계획기의 비용 계산에 사용될 함수 호출이나 연산자 연산 처리하는 예상 처" "리 비용을 설정합니다." -#: utils/misc/guc_tables.c:3574 +#: 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." @@ -30963,7 +32384,7 @@ msgstr "" "각 튜플(행)을 작업자에서 리더 백엔드로 보내는 예상 비용을 실행계획기에 설정합" "니다." -#: utils/misc/guc_tables.c:3585 +#: utils/misc/guc_tables.c:3733 msgid "" "Sets the planner's estimate of the cost of starting up worker processes for " "parallel query." @@ -30971,71 +32392,71 @@ msgstr "" "병렬 쿼리를 위해 작업자 프로세스 시작하는데 드는 예상 비용을 실행계획기에 설" "정합니다." -#: utils/misc/guc_tables.c:3597 +#: utils/misc/guc_tables.c:3745 msgid "Perform JIT compilation if query is more expensive." msgstr "쿼리 수행 예상 비용이 이 값보다 크면, JIT 짜깁기를 수행" -#: utils/misc/guc_tables.c:3598 +#: utils/misc/guc_tables.c:3746 msgid "-1 disables JIT compilation." msgstr "-1 = JIT 짜깁기 안함" -#: utils/misc/guc_tables.c:3608 +#: utils/misc/guc_tables.c:3756 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "쿼리 수행 예상 비용이 이 값보다 크면, JIT-컴파일된 함수 최적화 함" -#: utils/misc/guc_tables.c:3609 +#: utils/misc/guc_tables.c:3757 msgid "-1 disables optimization." msgstr "-1 = 최적화 비활성화" -#: utils/misc/guc_tables.c:3619 +#: utils/misc/guc_tables.c:3767 msgid "Perform JIT inlining if query is more expensive." msgstr "쿼리 수행 예상 비용이 이 값보다 크면, JIT 인라인 작업 수행" -#: utils/misc/guc_tables.c:3620 +#: utils/misc/guc_tables.c:3768 msgid "-1 disables inlining." msgstr "-1 = 인라인 기능 끔" -#: utils/misc/guc_tables.c:3630 +#: 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:3642 +#: 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:3654 +#: utils/misc/guc_tables.c:3802 msgid "GEQO: selective pressure within the population." msgstr "GEQO: 모집단 내의 선택 압력입니다." -#: utils/misc/guc_tables.c:3665 +#: utils/misc/guc_tables.c:3813 msgid "GEQO: seed for random path selection." msgstr "GEQO: 무작위 경로 선택을 위한 씨드" -#: utils/misc/guc_tables.c:3676 -msgid "Multiple of work_mem to use for hash tables." -msgstr "테이블 해시 작업에서 쓸 work_mem 값의 배율" +#: utils/misc/guc_tables.c:3824 +msgid "Multiple of \"work_mem\" to use for hash tables." +msgstr "테이블 해시 작업에서 쓸 \"work_mem\" 값의 배율" -#: utils/misc/guc_tables.c:3687 +#: utils/misc/guc_tables.c:3835 msgid "Multiple of the average buffer usage to free per round." msgstr "라운드당 해제할 평균 버퍼 사용의 배수입니다." -#: utils/misc/guc_tables.c:3697 +#: utils/misc/guc_tables.c:3845 msgid "Sets the seed for random-number generation." msgstr "난수 생성 속도를 설정합니다." -#: utils/misc/guc_tables.c:3708 +#: utils/misc/guc_tables.c:3856 msgid "Vacuum cost delay in milliseconds." msgstr "청소 비용 지연(밀리초)입니다." -#: utils/misc/guc_tables.c:3719 +#: utils/misc/guc_tables.c:3867 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "자동 청소에 대한 청소 비용 지연(밀리초)입니다." -#: utils/misc/guc_tables.c:3730 +#: utils/misc/guc_tables.c:3878 msgid "" "Number of tuple updates or deletes prior to vacuum as a fraction of " "reltuples." @@ -31043,11 +32464,11 @@ msgstr "" "vacuum 작업을 진행할 update, delete 작업량을 전체 자료에 대한 분수값으로 지정" "합니다." -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3888 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." -msgstr "" +msgstr "vacuum을 위한 전체 튜플 대비 insert 튜플의 비율" -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3898 msgid "" "Number of tuple inserts, updates, or deletes prior to analyze as a fraction " "of reltuples." @@ -31055,147 +32476,148 @@ msgstr "" "통계 수집 작업을 진행할 insert, update, delete 작업량을 전체 자료에 대한 분수" "값으로 지정합니다." -#: utils/misc/guc_tables.c:3760 +#: utils/misc/guc_tables.c:3908 msgid "" "Time spent flushing dirty buffers during checkpoint, as fraction of " "checkpoint interval." msgstr "체크포인트 반복 주기 안에 작업을 완료할 분수값(1=100%)" -#: utils/misc/guc_tables.c:3770 -msgid "Fraction of statements exceeding log_min_duration_sample to be logged." -msgstr "" +#: utils/misc/guc_tables.c:3918 +msgid "" +"Fraction of statements exceeding \"log_min_duration_sample\" to be logged." +msgstr "\"log_min_duration_sample\" 로그의 비율" -#: utils/misc/guc_tables.c:3771 +#: 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:3780 +#: utils/misc/guc_tables.c:3928 msgid "Sets the fraction of transactions from which to log all statements." msgstr "모든 구문을 로그로 남기려고 할 때, 그 남길 비율" -#: utils/misc/guc_tables.c:3781 +#: 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 "0.0(모두 안 남김) 부터 1.0 (모두 남김)까지 지정할 수 있습니다." -#: utils/misc/guc_tables.c:3800 +#: utils/misc/guc_tables.c:3948 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "WAL 파일을 아카이빙하기 위해 호출될 셸 명령을 설정합니다." -#: utils/misc/guc_tables.c:3801 +#: utils/misc/guc_tables.c:3949 msgid "This is used only if \"archive_library\" is not set." msgstr "이 설정은 \"archive_library\" 설정이 안되어 있을 때만 작동합니다." -#: utils/misc/guc_tables.c:3810 +#: utils/misc/guc_tables.c:3958 msgid "Sets the library that will be called to archive a WAL file." msgstr "WAL 파일을 아카이빙하기 위해 호출될 셸 명령을 설정합니다." -#: utils/misc/guc_tables.c:3811 +#: utils/misc/guc_tables.c:3959 msgid "An empty string indicates that \"archive_command\" should be used." msgstr "\"archive_command\" 설정값은 빈 문자열이어야 합니다." -#: utils/misc/guc_tables.c:3820 +#: 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:3830 +#: 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:3840 +#: 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:3850 +#: utils/misc/guc_tables.c:3998 msgid "Specifies the timeline to recover into." msgstr "복구할 타임라인을 지정합니다." -#: utils/misc/guc_tables.c:3860 +#: utils/misc/guc_tables.c:4008 msgid "" "Set to \"immediate\" to end recovery as soon as a consistent state is " "reached." msgstr "복구를 끝내는 지점을 가장 최근으로 하려면, \"immediate\"로 지정하세요." -#: utils/misc/guc_tables.c:3869 +#: utils/misc/guc_tables.c:4017 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "복구를 끝낼 마지막 트랜잭션 ID 지정" -#: utils/misc/guc_tables.c:3878 +#: utils/misc/guc_tables.c:4026 msgid "Sets the time stamp up to which recovery will proceed." msgstr "복구를 끝낼 마지막 시간 지정" -#: utils/misc/guc_tables.c:3887 +#: utils/misc/guc_tables.c:4035 msgid "Sets the named restore point up to which recovery will proceed." -msgstr "복구를 끝낼 복원 지점 이름 지정" +msgstr "복구를 끝낼 복구 지점 이름 지정" -#: utils/misc/guc_tables.c:3896 +#: utils/misc/guc_tables.c:4044 msgid "" "Sets the LSN of the write-ahead log location up to which recovery will " "proceed." msgstr "복구용 미리 쓰기 로그의 복구 지점 LSN 지정" -#: utils/misc/guc_tables.c:3906 +#: 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:3917 +#: 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:3927 +#: utils/misc/guc_tables.c:4075 msgid "Sets the client's character set encoding." msgstr "클라이언트 문자 세트 인코딩을 지정함" -#: utils/misc/guc_tables.c:3938 +#: utils/misc/guc_tables.c:4086 msgid "Controls information prefixed to each log line." msgstr "각 로그 줄 앞에 추가할 정보를 제어합니다." -#: utils/misc/guc_tables.c:3939 +#: utils/misc/guc_tables.c:4087 msgid "If blank, no prefix is used." msgstr "비워 두면 접두사가 사용되지 않습니다." -#: utils/misc/guc_tables.c:3948 +#: utils/misc/guc_tables.c:4096 msgid "Sets the time zone to use in log messages." msgstr "로그 메시지에 사용할 표준 시간대를 설정합니다." -#: utils/misc/guc_tables.c:3958 +#: utils/misc/guc_tables.c:4106 msgid "Sets the display format for date and time values." msgstr "날짜와 시간 값을 나타내는 모양을 지정합니다." -#: utils/misc/guc_tables.c:3959 +#: utils/misc/guc_tables.c:4107 msgid "Also controls interpretation of ambiguous date inputs." msgstr "또한 모호한 날짜 입력의 해석을 제어합니다." -#: utils/misc/guc_tables.c:3970 +#: utils/misc/guc_tables.c:4118 msgid "Sets the default table access method for new tables." msgstr "새 테이블에서 사용할 기본 테이블 접근 방법을 지정합니다." -#: utils/misc/guc_tables.c:3981 +#: utils/misc/guc_tables.c:4129 msgid "Sets the default tablespace to create tables and indexes in." msgstr "테이블 및 인덱스를 만들 기본 테이블스페이스를 설정합니다." -#: utils/misc/guc_tables.c:3982 +#: utils/misc/guc_tables.c:4130 msgid "An empty string selects the database's default tablespace." msgstr "빈 문자열을 지정하면 데이터베이스의 기본 테이블스페이스가 선택됩니다." -#: utils/misc/guc_tables.c:3992 +#: 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:4003 +#: utils/misc/guc_tables.c:4151 msgid "" "Sets whether a CREATEROLE user automatically grants the role to themselves, " "and with which options." msgstr "CREATEROLE 권한이 있는 사용자가 자동으로 스스로에게 부여할 옵션 지정" -#: utils/misc/guc_tables.c:4015 +#: utils/misc/guc_tables.c:4163 msgid "Sets the path for dynamically loadable modules." msgstr "동적으로 불러올 수 있는 모듈들이 있는 경로를 지정함." -#: utils/misc/guc_tables.c:4016 +#: 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 " @@ -31205,68 +32627,68 @@ msgstr "" "가 없는 경우(즉, 이름에 슬래시 기호가 없는 경우) 시스템은 이 경로에서 지정한 " "파일을 검색합니다." -#: utils/misc/guc_tables.c:4029 +#: utils/misc/guc_tables.c:4177 msgid "Sets the location of the Kerberos server key file." msgstr "Kerberos 서버 키 파일의 위치를 지정함." -#: utils/misc/guc_tables.c:4040 +#: utils/misc/guc_tables.c:4188 msgid "Sets the Bonjour service name." msgstr "Bonjour 서비스 이름을 지정" -#: utils/misc/guc_tables.c:4050 +#: utils/misc/guc_tables.c:4198 msgid "Sets the language in which messages are displayed." msgstr "보여질 메시지로 사용할 언어 지정." -#: utils/misc/guc_tables.c:4060 +#: utils/misc/guc_tables.c:4208 msgid "Sets the locale for formatting monetary amounts." msgstr "통화금액 표현 양식으로 사용할 로케일 지정." -#: utils/misc/guc_tables.c:4070 +#: utils/misc/guc_tables.c:4218 msgid "Sets the locale for formatting numbers." msgstr "숫자 표현 양식으로 사용할 로케일 지정." -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4228 msgid "Sets the locale for formatting date and time values." msgstr "날짜와 시간 값을 표현할 양식으로 사용할 로케일 지정." -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4238 msgid "Lists shared libraries to preload into each backend." msgstr "각각의 백엔드에 미리 불러올 공유 라이브러리들을 지정합니다" -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4249 msgid "Lists shared libraries to preload into server." msgstr "서버에 미리 불러올 공유 라이브러리들을 지정합니다" -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4260 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "" "각각의 백엔드에 미리 불러올 접근제한 없는 공유 라이브러리들을 지정합니다" -#: utils/misc/guc_tables.c:4123 +#: 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:4135 +#: utils/misc/guc_tables.c:4283 msgid "Shows the server (database) character set encoding." msgstr "서버 (데이터베이스) 문자 세트 인코딩 보여줌" -#: utils/misc/guc_tables.c:4147 +#: utils/misc/guc_tables.c:4295 msgid "Shows the server version." msgstr "서버 버전 보임." -#: utils/misc/guc_tables.c:4159 +#: utils/misc/guc_tables.c:4307 msgid "Sets the current role." msgstr "현재 롤을 지정" -#: utils/misc/guc_tables.c:4171 +#: utils/misc/guc_tables.c:4319 msgid "Sets the session user name." msgstr "세션 사용자 이름 지정." -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4330 msgid "Sets the destination for server log output." msgstr "서버 로그 출력을 위한 대상을 지정합니다." -#: utils/misc/guc_tables.c:4183 +#: utils/misc/guc_tables.c:4331 msgid "" "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", " "\"jsonlog\", and \"eventlog\", depending on the platform." @@ -31274,138 +32696,138 @@ msgstr "" "유효한 값은 플랫폼에 따라 \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\" 및 " "\"eventlog\"의 조합입니다." -#: utils/misc/guc_tables.c:4194 +#: utils/misc/guc_tables.c:4342 msgid "Sets the destination directory for log files." msgstr "로그 파일의 대상 디렉터리를 설정합니다." -#: utils/misc/guc_tables.c:4195 +#: 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:4205 +#: utils/misc/guc_tables.c:4353 msgid "Sets the file name pattern for log files." msgstr "로그 파일의 파일 이름 패턴을 설정합니다." -#: utils/misc/guc_tables.c:4216 +#: 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:4227 +#: 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:4238 +#: utils/misc/guc_tables.c:4386 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "시간대(time zone)를 지정함." -#: utils/misc/guc_tables.c:4248 +#: utils/misc/guc_tables.c:4396 msgid "Selects a file of time zone abbreviations." msgstr "표준 시간대 약어 파일을 선택합니다." -#: utils/misc/guc_tables.c:4258 +#: utils/misc/guc_tables.c:4406 msgid "Sets the owning group of the Unix-domain socket." msgstr "유닉스 도메인 소켓의 소유주를 지정" -#: utils/misc/guc_tables.c:4259 +#: 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:4269 +#: utils/misc/guc_tables.c:4417 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "유닉스 도메인 소켓을 만들 디렉터리를 지정합니다." -#: utils/misc/guc_tables.c:4280 +#: 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:4295 +#: utils/misc/guc_tables.c:4443 msgid "Sets the server's data directory." msgstr "서버의 데이터 디렉터리 위치를 지정합니다." -#: utils/misc/guc_tables.c:4306 +#: utils/misc/guc_tables.c:4454 msgid "Sets the server's main configuration file." msgstr "서버의 기본 환경설정 파일 경로를 지정합니다." -#: utils/misc/guc_tables.c:4317 +#: utils/misc/guc_tables.c:4465 msgid "Sets the server's \"hba\" configuration file." msgstr "서버의 \"hba\" 구성 파일을 설정합니다." -#: utils/misc/guc_tables.c:4328 +#: utils/misc/guc_tables.c:4476 msgid "Sets the server's \"ident\" configuration file." msgstr "서버의 \"ident\" 구성 파일을 설정합니다." -#: utils/misc/guc_tables.c:4339 +#: utils/misc/guc_tables.c:4487 msgid "Writes the postmaster PID to the specified file." msgstr "postmaster PID가 기록된 파일의 경로를 지정합니다." -#: utils/misc/guc_tables.c:4350 +#: utils/misc/guc_tables.c:4498 msgid "Shows the name of the SSL library." msgstr "SSL 라이브러리 이름을 보여줌" -#: utils/misc/guc_tables.c:4365 +#: utils/misc/guc_tables.c:4513 msgid "Location of the SSL server certificate file." msgstr "서버 인증서 파일 위치를 지정함" -#: utils/misc/guc_tables.c:4375 +#: utils/misc/guc_tables.c:4523 msgid "Location of the SSL server private key file." msgstr "SSL 서버 개인 키 파일의 위치를 지정함." -#: utils/misc/guc_tables.c:4385 +#: utils/misc/guc_tables.c:4533 msgid "Location of the SSL certificate authority file." msgstr "SSL 인증 authority 파일 위치" -#: utils/misc/guc_tables.c:4395 +#: utils/misc/guc_tables.c:4543 msgid "Location of the SSL certificate revocation list file." msgstr "SSL 인증서 파기 목록 파일의 위치" -#: utils/misc/guc_tables.c:4405 +#: utils/misc/guc_tables.c:4553 msgid "Location of the SSL certificate revocation list directory." msgstr "SSL 인증서 파기 목록 디렉터리 위치" -#: utils/misc/guc_tables.c:4415 +#: utils/misc/guc_tables.c:4563 msgid "" "Number of synchronous standbys and list of names of potential synchronous " "ones." -msgstr "" +msgstr "동기식 복제용 대기 서버 수와 운영 서버 전환 대상이 되는 서버 이름 목록" -#: utils/misc/guc_tables.c:4426 +#: utils/misc/guc_tables.c:4574 msgid "Sets default text search configuration." msgstr "기본 텍스트 검색 구성을 설정합니다." -#: utils/misc/guc_tables.c:4436 +#: utils/misc/guc_tables.c:4584 msgid "Sets the list of allowed SSL ciphers." msgstr "허용되는 SSL 암호 목록을 설정합니다." -#: utils/misc/guc_tables.c:4451 +#: utils/misc/guc_tables.c:4599 msgid "Sets the curve to use for ECDH." msgstr "ECDH에 사용할 curve 설정" -#: utils/misc/guc_tables.c:4466 +#: utils/misc/guc_tables.c:4614 msgid "Location of the SSL DH parameters file." msgstr "SSL DH 매개 변수 파일의 위치." -#: utils/misc/guc_tables.c:4477 +#: utils/misc/guc_tables.c:4625 msgid "Command to obtain passphrases for SSL." msgstr "SSL 비밀번호 입력을 위한 명령" -#: utils/misc/guc_tables.c:4488 +#: utils/misc/guc_tables.c:4636 msgid "Sets the application name to be reported in statistics and logs." msgstr "통계정보와 로그에 포함될 응용프로그램 이름 지정" -#: utils/misc/guc_tables.c:4499 +#: 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:4510 +#: utils/misc/guc_tables.c:4658 msgid "" "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "WAL 동시성 검사 완료용 WAL 자원 관리자 지정" -#: utils/misc/guc_tables.c:4511 +#: 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." @@ -31413,32 +32835,51 @@ msgstr "" "풀페이지 이미지가 모든 데이터 블록을 위해 기록될 것이며 WAL 재반영 결과를 이" "중 검증을 합니다." -#: utils/misc/guc_tables.c:4521 +#: utils/misc/guc_tables.c:4669 msgid "JIT provider to use." msgstr "사용할 JIT 제공자" -#: utils/misc/guc_tables.c:4532 +#: utils/misc/guc_tables.c:4680 msgid "Log backtrace for errors in these functions." msgstr "이 함수들 안에 오류 추적용 로그를 남김" -#: utils/misc/guc_tables.c:4543 +#: utils/misc/guc_tables.c:4691 msgid "Use direct I/O for file access." msgstr "파일 접근을 위해 직접 I/O를 사용합니다." -#: utils/misc/guc_tables.c:4563 +#: utils/misc/guc_tables.c:4702 +msgid "" +"Lists streaming replication standby server replication slot names that " +"logical WAL sender processes will wait for." +msgstr "" +"논리 WAL 송신 프로세스가 기다릴 스트리밍 복제 대기 서버 복제 슬롯 이름 목록" + +#: 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 "" +"논리 WAL 송신 프로세스는 지정된 복제 슬롯이 WAL 수신을 확인한 후에만 " +"디코딩된 변경 사항을 출력 플러그인으로 전송합니다." + +#: utils/misc/guc_tables.c:4716 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "지정된 종류의 non-system 릴레이션에 대한 접근을 금지합니다." + +#: utils/misc/guc_tables.c:4736 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "문자열에서 \"\\'\" 문자 사용을 허용할 것인지를 정하세요" -#: utils/misc/guc_tables.c:4573 +#: utils/misc/guc_tables.c:4746 msgid "Sets the output format for bytea." msgstr "bytea 값의 표시 형식을 설정합니다." -#: utils/misc/guc_tables.c:4583 +#: utils/misc/guc_tables.c:4756 msgid "Sets the message levels that are sent to the client." msgstr "클라이언트 측에 보여질 메시지 수준을 지정함." -#: utils/misc/guc_tables.c:4584 utils/misc/guc_tables.c:4680 -#: utils/misc/guc_tables.c:4691 utils/misc/guc_tables.c:4763 +#: 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." @@ -31446,118 +32887,114 @@ msgstr "" "각 수준은 이 수준 뒤에 있는 모든 수준이 포함됩니다. 수준이 뒤에 있을수록 전송" "되는 메시지 수가 적습니다." -#: utils/misc/guc_tables.c:4594 +#: utils/misc/guc_tables.c:4767 msgid "Enables in-core computation of query identifiers." msgstr "query_id를 내부적으로 사용함" -#: utils/misc/guc_tables.c:4604 +#: utils/misc/guc_tables.c:4777 msgid "Enables the planner to use constraints to optimize queries." msgstr "실행계획기가 쿼리 최적화 작업에서 제약 조건을 사용하도록 함" -#: utils/misc/guc_tables.c:4605 +#: 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:4616 +#: utils/misc/guc_tables.c:4789 msgid "Sets the default compression method for compressible values." msgstr "압축 가능한 값을 압축하기 위한 기본 압축 방법을 지정합니다." -#: utils/misc/guc_tables.c:4627 +#: utils/misc/guc_tables.c:4800 msgid "Sets the transaction isolation level of each new transaction." msgstr "각 새 트랜잭션의 트랜잭션 격리 수준을 설정합니다." -#: utils/misc/guc_tables.c:4637 +#: utils/misc/guc_tables.c:4810 msgid "Sets the current transaction's isolation level." msgstr "현재 트랜잭션 독립성 수준(isolation level)을 지정함." -#: utils/misc/guc_tables.c:4648 +#: utils/misc/guc_tables.c:4821 msgid "Sets the display format for interval values." msgstr "간격 값의 표시 형식을 설정합니다." -#: utils/misc/guc_tables.c:4659 +#: utils/misc/guc_tables.c:4832 msgid "Log level for reporting invalid ICU locale strings." -msgstr "" +msgstr "잘못된 ICU 로케일 설정을 보고할 로그 수준" -#: utils/misc/guc_tables.c:4669 +#: utils/misc/guc_tables.c:4842 msgid "Sets the verbosity of logged messages." msgstr "기록되는 메시지의 상세 정도를 지정합니다." -#: utils/misc/guc_tables.c:4679 +#: utils/misc/guc_tables.c:4852 msgid "Sets the message levels that are logged." msgstr "서버 로그에 기록될 메시지 수준을 지정함." -#: utils/misc/guc_tables.c:4690 +#: 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:4701 +#: utils/misc/guc_tables.c:4874 msgid "Sets the type of statements logged." msgstr "서버로그에 기록될 구문 종류를 지정합니다." -#: utils/misc/guc_tables.c:4711 +#: utils/misc/guc_tables.c:4884 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "syslog 기능을 사용할 때, 사용할 syslog \"facility\" 값을 지정." -#: utils/misc/guc_tables.c:4722 +#: utils/misc/guc_tables.c:4895 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "트리거 및 다시 쓰기 규칙에 대한 세션의 동작을 설정합니다." -#: utils/misc/guc_tables.c:4732 +#: utils/misc/guc_tables.c:4905 msgid "Sets the current transaction's synchronization level." msgstr "현재 트랜잭션 격리 수준(isolation level)을 지정함." -#: utils/misc/guc_tables.c:4742 -msgid "Allows archiving of WAL files using archive_command." -msgstr "archive_command를 사용하여 WAL 파일을 따로 보관하도록 설정합니다." +#: utils/misc/guc_tables.c:4915 +msgid "Allows archiving of WAL files using \"archive_command\"." +msgstr "\"archive_command\"를 사용하여 WAL 파일을 따로 보관하도록 설정합니다." -#: utils/misc/guc_tables.c:4752 +#: utils/misc/guc_tables.c:4925 msgid "Sets the action to perform upon reaching the recovery target." -msgstr "" +msgstr "복구 타켓에 도달했을 때 수행할 액션을 지정합니다." -#: utils/misc/guc_tables.c:4762 -msgid "Enables logging of recovery-related debugging information." -msgstr "복구 작업과 관련된 디버깅 정보를 기록하도록 합니다." - -#: utils/misc/guc_tables.c:4779 +#: utils/misc/guc_tables.c:4935 msgid "Collects function-level statistics on database activity." msgstr "데이터베이스 활동에 대한 함수 수준 통계를 수집합니다." -#: utils/misc/guc_tables.c:4790 +#: utils/misc/guc_tables.c:4946 msgid "Sets the consistency of accesses to statistics data." msgstr "통계 자료 접근의 동시성을 지정합니다." -#: utils/misc/guc_tables.c:4800 +#: 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:4810 +#: utils/misc/guc_tables.c:4966 msgid "Sets the level of information written to the WAL." msgstr "WAL에 저장할 내용 수준을 지정합니다." -#: utils/misc/guc_tables.c:4820 +#: utils/misc/guc_tables.c:4976 msgid "Selects the dynamic shared memory implementation used." msgstr "사용할 동적 공유 메모리 관리방식을 선택합니다." -#: utils/misc/guc_tables.c:4830 +#: 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:4840 +#: utils/misc/guc_tables.c:4996 msgid "Selects the method used for forcing WAL updates to disk." msgstr "디스크에 대한 강제 WAL 업데이트에 사용되는 방법을 선택합니다." -#: utils/misc/guc_tables.c:4850 +#: utils/misc/guc_tables.c:5006 msgid "Sets how binary values are to be encoded in XML." msgstr "XML에서 바이너리 값이 인코딩되는 방식을 설정합니다." -#: utils/misc/guc_tables.c:4860 +#: 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." @@ -31565,77 +33002,92 @@ msgstr "" "암시적 구문 분석 및 직렬화 작업의 XML 데이터를 문서 또는 내용 조각으로 간주할" "지 여부를 설정합니다." -#: utils/misc/guc_tables.c:4871 +#: utils/misc/guc_tables.c:5027 msgid "Use of huge pages on Linux or Windows." msgstr "리눅스 또는 Windows huge 페이지 사용 여부" -#: utils/misc/guc_tables.c:4881 +#: utils/misc/guc_tables.c:5037 +msgid "Indicates the status of huge pages." +msgstr "huge page 상태를 보고할지 지정" + +#: utils/misc/guc_tables.c:5048 msgid "Prefetch referenced blocks during recovery." msgstr "복구 작업 중에 참조하는 블록을 미리 준비하는 방법." -#: utils/misc/guc_tables.c:4882 +#: utils/misc/guc_tables.c:5049 msgid "Look ahead in the WAL to find references to uncached data." msgstr "따라잡지 못한 데이터를 WAL에서 미리 준비함" -#: utils/misc/guc_tables.c:4891 +#: utils/misc/guc_tables.c:5058 msgid "Forces the planner's use parallel query nodes." msgstr "병렬 쿼리를 강제로 사용하도록 지정합니다." -#: utils/misc/guc_tables.c:4892 +#: 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:4904 +#: utils/misc/guc_tables.c:5071 msgid "Chooses the algorithm for encrypting passwords." -msgstr "" +msgstr "비밀번호 암호화 알고리즘 선택" -#: utils/misc/guc_tables.c:4914 +#: utils/misc/guc_tables.c:5081 msgid "Controls the planner's selection of custom or generic plan." -msgstr "" +msgstr "실행계획기가 사용자 정의 계획이나, 일반적 계획을 선택하는 것을 조정함" -#: utils/misc/guc_tables.c:4915 +#: 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:4927 +#: utils/misc/guc_tables.c:5094 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "사용할 최소 SSL/TLS 프로토콜 버전을 지정합니다." -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:5106 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "사용할 최대 SSL/TLS 프로토콜 버전을 지정합니다." -#: utils/misc/guc_tables.c:4951 +#: utils/misc/guc_tables.c:5118 msgid "" "Sets the method for synchronizing the data directory before crash recovery." msgstr "" +"충돌 복구 전에 데이터 디렉토리를 동기화하는 방법을 설정합니다." -#: utils/misc/guc_tables.c:4960 +#: utils/misc/guc_tables.c:5127 msgid "" "Forces immediate streaming or serialization of changes in large transactions." msgstr "" +"대량 트랜잭션에서 변경 사항을 강제로 즉시 스트리밍하거나 직렬화합니다." -#: utils/misc/guc_tables.c:4961 +#: 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 "" +"발행 서버에서 논리 디코딩의 각 변경 사항을 스트리밍하거나 직렬화할 수 있습니다. " +"구독 서버에서 파일에 대한 모든 변경 사항을 직렬화할 수 있으며, " +"병렬 반영 작업자에게 트랜잭션이 끝날 때 읽고 적용하도록 알립니다." #: utils/misc/help_config.c:129 #, c-format msgid "internal error: unrecognized run-time parameter type\n" msgstr "내부 오류: 알 수 없는 실시간 서버 설정 변수\n" -#: utils/misc/pg_controldata.c:48 utils/misc/pg_controldata.c:86 -#: utils/misc/pg_controldata.c:175 utils/misc/pg_controldata.c:214 +#: utils/misc/pg_controldata.c:50 utils/misc/pg_controldata.c:90 +#: utils/misc/pg_controldata.c:181 utils/misc/pg_controldata.c:222 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "계산된 CRC 체크섬 값이 파일에 저장된 값과 다름" @@ -31643,7 +33095,7 @@ msgstr "계산된 CRC 체크섬 값이 파일에 저장된 값과 다름" #: utils/misc/pg_rusage.c:64 #, c-format msgid "CPU: user: %d.%02d s, system: %d.%02d s, elapsed: %d.%02d s" -msgstr "" +msgstr "CPU: user: %d.%02d s, system: %d.%02d s, elapsed: %d.%02d s" #: utils/misc/rls.c:127 #, c-format @@ -31659,12 +33111,12 @@ msgstr "" "테이블 소유주를 위해 정책을 비활성하려면, ALTER TABLE NO FORCE ROW LEVEL " "SECURITY 명령을 사용하세요" -#: utils/misc/timeout.c:524 +#: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" msgstr "시간 초과로 더이상 추가할 수 없음" -#: utils/misc/tzparser.c:60 +#: utils/misc/tzparser.c:61 #, c-format msgid "" "time zone abbreviation \"%s\" is too long (maximum %d characters) in time " @@ -31673,144 +33125,143 @@ msgstr "" "\"%s\" 타임 존 이름이 너무 깁니다(최대 %d자) (\"%s\" 타임 존 파일의 %d번째 줄" "에 있음)." -#: utils/misc/tzparser.c:72 +#: utils/misc/tzparser.c:73 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "" "%d 타임 존 오프셋 값이 범위를 벗어났습니다(\"%s\" 타임 존 파일의 %d번째 줄에 " "있음)." -#: utils/misc/tzparser.c:111 +#: utils/misc/tzparser.c:112 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "\"%s\" time zone 파일의 %d번째 줄에 time zone 생략형이 빠졌음" -#: utils/misc/tzparser.c:120 +#: utils/misc/tzparser.c:121 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "\"%s\" time zone 파일의 %d번째 줄에 time zone 옵셋이 빠졌음" -#: utils/misc/tzparser.c:132 +#: utils/misc/tzparser.c:133 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "" "\"%s\" 표준 시간대 파일의 %d번째 줄에서 표준 시간대 오프셋 숫자가 잘못됨" -#: utils/misc/tzparser.c:168 +#: utils/misc/tzparser.c:169 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "\"%s\" time zone 파일의 %d번째 줄에 구문 오류" -#: utils/misc/tzparser.c:236 +#: utils/misc/tzparser.c:237 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "표준 시간대 약어 \"%s\"은(는) 배수로 정의됨" -#: utils/misc/tzparser.c:238 +#: utils/misc/tzparser.c:239 #, c-format msgid "" -"Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s" -"\", line %d." +"Entry in time zone file \"%s\", line %d, conflicts with entry in file " +"\"%s\", line %d." msgstr "" "\"%s\" 타임 존 파일의 %d번째 줄에 있는 항목이 \"%s\" 파일의 %d번째 줄에 있는 " "항목과 충돌합니다." -#: utils/misc/tzparser.c:300 +#: utils/misc/tzparser.c:301 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "잘못된 time zone 파일 이름: \"%s\"" -#: utils/misc/tzparser.c:313 +#: utils/misc/tzparser.c:314 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "\"%s\" 파일에서 time zone 파일 재귀호출 최대치를 초과했음" -#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 +#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "\"%s\" time zone 파일을 읽을 수 없음: %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:377 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "\"%s\" 표준 시간대 파일의 %d번째 줄이 너무 깁니다." -#: utils/misc/tzparser.c:400 +#: utils/misc/tzparser.c:401 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "\"%s\" 표준 시간대 파일의 %d번째 줄에 파일 이름이 없는 @INCLUDE가 있음" -#: utils/mmgr/aset.c:446 utils/mmgr/generation.c:206 utils/mmgr/slab.c:367 +#: utils/mmgr/aset.c:452 utils/mmgr/bump.c:184 utils/mmgr/generation.c:216 +#: utils/mmgr/slab.c:371 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "\"%s\" 메모리 컨텍스트를 만드는 동안 오류가 발생했습니다." -#: utils/mmgr/dsa.c:532 utils/mmgr/dsa.c:1346 +#: utils/mmgr/dsa.c:523 utils/mmgr/dsa.c:1364 #, c-format msgid "could not attach to dynamic shared area" msgstr "동적 공유 메모리 영역을 할당할 수 없음" -#: utils/mmgr/mcxt.c:1047 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1121 -#: utils/mmgr/mcxt.c:1159 utils/mmgr/mcxt.c:1247 utils/mmgr/mcxt.c:1278 -#: utils/mmgr/mcxt.c:1314 utils/mmgr/mcxt.c:1503 utils/mmgr/mcxt.c:1548 -#: utils/mmgr/mcxt.c:1605 +#: utils/mmgr/mcxt.c:1155 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "크기가 %zu인 요청에서 오류가 발생했습니다. 해당 메모리 컨텍스트 \"%s\"" -#: utils/mmgr/mcxt.c:1210 +#: utils/mmgr/mcxt.c:1299 #, c-format msgid "logging memory contexts of PID %d" -msgstr "" +msgstr "%d번 PID의 메모리 현황을 로깅함" -#: utils/mmgr/portalmem.c:188 +#: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" msgstr "\"%s\" 이름의 커서가 이미 있음" -#: utils/mmgr/portalmem.c:192 +#: utils/mmgr/portalmem.c:191 #, c-format msgid "closing existing cursor \"%s\"" msgstr "이미 있는 \"%s\" 커서를 닫습니다" -#: utils/mmgr/portalmem.c:402 +#: utils/mmgr/portalmem.c:401 #, c-format msgid "portal \"%s\" cannot be run" msgstr "\"%s\" portal 실행할 수 없음" -#: utils/mmgr/portalmem.c:480 +#: utils/mmgr/portalmem.c:479 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "\"%s\" 선점된 포털을 삭제할 수 없음" -#: utils/mmgr/portalmem.c:488 +#: utils/mmgr/portalmem.c:487 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "\"%s\" 활성 포털을 삭제할 수 없음" -#: utils/mmgr/portalmem.c:739 +#: utils/mmgr/portalmem.c:738 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "WITH HOLD 옵션으로 커서를 만든 트랜잭션을 PREPARE할 수 없음" -#: utils/mmgr/portalmem.c:1230 +#: utils/mmgr/portalmem.c:1232 #, c-format msgid "" "cannot perform transaction commands inside a cursor loop that is not read-" "only" msgstr "" +"읽기 전용이 아닌 커서 루프 내에서 트랜잭션 명령을 수행할 수 없습니다" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %ld of temporary file" -msgstr "임시 파일의 %ld 블럭을 찾을 수 없음" +msgid "could not seek to block %lld of temporary file" +msgstr "임시 파일의 %lld 블럭을 찾을 수 없음" -#: utils/sort/sharedtuplestore.c:467 +#: utils/sort/sharedtuplestore.c:466 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "공유된 tuplestore 임시 파일에서 예상치 못한 청크" -#: utils/sort/sharedtuplestore.c:549 +#: utils/sort/sharedtuplestore.c:548 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "공유 tuplestore 임시 파일에서 %u 블록을 찾을 수 없음" @@ -31820,17 +33271,17 @@ msgstr "공유 tuplestore 임시 파일에서 %u 블록을 찾을 수 없음" msgid "cannot have more than %d runs for an external sort" msgstr "외부 정렬을 위해 %d 개 이상의 런을 만들 수 없음" -#: utils/sort/tuplesortvariants.c:1363 +#: utils/sort/tuplesortvariants.c:1552 #, c-format msgid "could not create unique index \"%s\"" msgstr "\"%s\" 고유 인덱스를 만들 수 없음" -#: utils/sort/tuplesortvariants.c:1365 +#: utils/sort/tuplesortvariants.c:1554 #, c-format msgid "Key %s is duplicated." msgstr "%s 키가 중복됨" -#: utils/sort/tuplesortvariants.c:1366 +#: utils/sort/tuplesortvariants.c:1555 #, c-format msgid "Duplicate keys exist." msgstr "중복된 키가 있음" @@ -31844,32 +33295,32 @@ msgstr "중복된 키가 있음" msgid "could not seek in tuplestore temporary file" msgstr "tuplestore 임시 파일에서 seek 작업을 할 수 없음" -#: utils/time/snapmgr.c:571 +#: utils/time/snapmgr.c:536 #, c-format msgid "The source transaction is not running anymore." msgstr "소스 트랜잭션이 더 이상 실행중이지 않음" -#: utils/time/snapmgr.c:1166 +#: utils/time/snapmgr.c:1136 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "서브트랜잭션에서 스냅샷을 내보낼 수 없음" -#: utils/time/snapmgr.c:1325 utils/time/snapmgr.c:1330 -#: utils/time/snapmgr.c:1335 utils/time/snapmgr.c:1350 -#: utils/time/snapmgr.c:1355 utils/time/snapmgr.c:1360 -#: utils/time/snapmgr.c:1375 utils/time/snapmgr.c:1380 -#: utils/time/snapmgr.c:1385 utils/time/snapmgr.c:1487 -#: utils/time/snapmgr.c:1503 utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 +#: utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 +#: utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "\"%s\" 파일에 유효하지 않은 스냅샷 자료가 있습니다" -#: utils/time/snapmgr.c:1422 +#: utils/time/snapmgr.c:1393 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "쿼리보다 먼저 SET TRANSACTION SNAPSHOP 명령을 호출해야 함" -#: utils/time/snapmgr.c:1431 +#: utils/time/snapmgr.c:1402 #, c-format msgid "" "a snapshot-importing transaction must have isolation level SERIALIZABLE or " @@ -31878,12 +33329,17 @@ msgstr "" "스냅샷 가져오기 트랜잭션은 그 격리 수준이 SERIALIZABLE 또는 REPEATABLE READ " "여야 함" -#: utils/time/snapmgr.c:1440 utils/time/snapmgr.c:1449 +#: utils/time/snapmgr.c:1411 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "잘못된 스냅샷 식별자: \"%s\"" -#: utils/time/snapmgr.c:1541 +#: utils/time/snapmgr.c:1426 +#, c-format +msgid "snapshot \"%s\" does not exist" +msgstr "\"%s\" 이름의 스냅샷이 없음" + +#: utils/time/snapmgr.c:1524 #, c-format msgid "" "a serializable transaction cannot import a snapshot from a non-serializable " @@ -31892,7 +33348,7 @@ msgstr "" "직렬화 가능한 트랜잭션은 직렬화 가능하지 않은 트랜잭션에서 스냅샷을 가져올 " "수 없음" -#: utils/time/snapmgr.c:1545 +#: utils/time/snapmgr.c:1528 #, c-format msgid "" "a non-read-only serializable transaction cannot import a snapshot from a " @@ -31900,365 +33356,383 @@ msgid "" msgstr "" "읽기-쓰기 직렬화된 트랜잭션이 읽기 전용 트랜잭션의 스냅샷을 가져올 수 없음" -#: utils/time/snapmgr.c:1560 +#: utils/time/snapmgr.c:1543 #, c-format msgid "cannot import a snapshot from a different database" msgstr "서로 다른 데이터베이스를 대상으로는 스냅샷을 가져올 수 없음" -#: gram.y:1197 +#: gram.y:1231 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD 옵션은 더이상 지원하지 않음" -#: gram.y:1198 +#: gram.y:1232 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." -msgstr "" +msgstr "비밀번호를 암호화된 형태로 저장하려면 UNENCRYPTED를 빼세요." -#: gram.y:1525 gram.y:1541 +#: 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:1693 +#: gram.y:1727 #, c-format msgid "current database cannot be changed" msgstr "현재 데이터베이스를 바꿀 수 없음" -#: gram.y:1826 +#: gram.y:1860 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "" "지역시간대 간격(time zone interval) 값은 시(HOUR) 또는 시분(HOUR TO MINUTE) " "값이어야 합니다" -#: gram.y:2443 +#: gram.y:2487 #, c-format msgid "column number must be in range from 1 to %d" msgstr "칼럼 번호는 1 - %d 사이의 범위에 있어야 합니다." -#: gram.y:3039 +#: gram.y:3083 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "\"%s\" 시퀀스 옵션은 지원되지 않음" -#: gram.y:3068 +#: gram.y:3122 #, c-format msgid "modulus for hash partition provided more than once" msgstr "해시 파티션용 모듈을 한 번 이상 지정했습니다" -#: gram.y:3077 +#: gram.y:3131 #, c-format msgid "remainder for hash partition provided more than once" msgstr "해시 파티션용 나머지 처리기를 한 번 이상 지정했습니다" -#: gram.y:3084 +#: gram.y:3138 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "잘못된 해시 파티션 범위 명세 \"%s\"" -#: gram.y:3092 +#: gram.y:3146 #, c-format msgid "modulus for hash partition must be specified" msgstr "해시 파티션용 모듈을 지정하세요" -#: gram.y:3096 +#: gram.y:3150 #, c-format msgid "remainder for hash partition must be specified" msgstr "해시 파티션용 나머지 처리기를 지정하세요" -#: gram.y:3304 gram.y:3338 +#: gram.y:3358 gram.y:3392 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "PROGRAM 옵션과 STDIN/STDOUT 옵션은 함께 쓸 수 없습니다" -#: gram.y:3310 +#: gram.y:3364 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "WHERE 절은 COPY TO 구문을 허용하지 않음" -#: gram.y:3649 gram.y:3656 gram.y:12821 gram.y:12829 +#: 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:3932 +#: gram.y:3995 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" -msgstr "" +msgstr "계산된 칼럼을 사용하려면, GENERATED ALWAYS 옵션이 있어야 함" -#: gram.y:4315 +#: gram.y:4432 #, c-format msgid "a column list with %s is only supported for ON DELETE actions" msgstr "%s의 칼럼 목록은 ON DELETE 액션용으로만 지원합니다." -#: gram.y:5027 +#: gram.y:5151 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM 구문은 지원하지 않습니다." -#: gram.y:5725 +#: gram.y:5849 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "인식할 수 없는 로우 단위 보안 옵션 \"%s\"" -#: gram.y:5726 +#: gram.y:5850 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." -msgstr "" +msgstr "PERMISSIVE 또는 RESTRICTIVE 정책만 현재 지원합니다." -#: gram.y:5811 +#: gram.y:5935 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER 구문은 지원하지 않습니다." -#: gram.y:5848 +#: gram.y:5972 msgid "duplicate trigger events specified" msgstr "중복 트리거 이벤트가 지정됨" -#: gram.y:5997 +#: gram.y:6121 #, c-format msgid "conflicting constraint properties" msgstr "제약조건 속성이 충돌함" -#: gram.y:6096 +#: gram.y:6220 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION 명령은 아직 구현 되지 않았습니다" -#: gram.y:6504 +#: gram.y:6537 +#, c-format +msgid "dropping an enum value is not implemented" +msgstr "구현되지 않은 enum 값을 삭제 중" + +#: gram.y:6655 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK는 더 이상 필요하지 않음" -#: gram.y:6505 +#: gram.y:6656 #, c-format msgid "Update your data type." msgstr "자료형을 업데이트하십시오." -#: gram.y:8378 +#: gram.y:8529 #, c-format msgid "aggregates cannot have output arguments" msgstr "집계 함수는 output 인자를 지정할 수 없음" -#: gram.y:11054 gram.y:11073 +#: gram.y:11221 gram.y:11240 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION 구문은 재귀적인 뷰에서 지원하지 않습니다" -#: gram.y:12960 +#: gram.y:13162 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,# 구문은 지원하지 않습니다." -#: gram.y:12961 +#: gram.y:13163 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "LIMIT # OFFSET # 구문을 사용하세요." -#: gram.y:13821 +#: gram.y:14038 #, c-format msgid "only one DEFAULT value is allowed" -msgstr "" +msgstr "DEFAULT 값은 하나만 허용함" -#: gram.y:13830 +#: gram.y:14047 #, c-format msgid "only one PATH value per column is allowed" -msgstr "" +msgstr "PATH 값은 칼럼당 하나만 허용함" -#: gram.y:13839 +#: gram.y:14056 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "NULL/NOT NULL 선언이 서로 충돌합니다 : \"%s\" 칼럼" -#: gram.y:13848 +#: gram.y:14065 #, c-format msgid "unrecognized column option \"%s\"" msgstr "인식할 수 없는 칼럼 옵션 \"%s\"" -#: gram.y:14102 +#: gram.y:14147 +#, c-format +msgid "only string constants are supported in JSON_TABLE path specification" +msgstr "JSON_TABLE 경로 명세에서는 문자열 상수만 지원함" + +#: gram.y:14469 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "실수형 자료의 정밀도 값으로는 적어도 1 bit 이상을 지정해야 합니다." -#: gram.y:14111 +#: gram.y:14478 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "실수형 자료의 정밀도 값으로 최대 54 bit 까지입니다." -#: gram.y:14614 +#: gram.y:14995 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "OVERLAPS 식의 왼쪽에 있는 매개 변수 수가 잘못됨" -#: gram.y:14619 +#: gram.y:15000 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "OVERLAPS 식의 오른쪽에 있는 매개 변수 수가 잘못됨" -#: gram.y:14796 +#: gram.y:15177 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE 술어는 아직 구현되지 못했습니다" -#: gram.y:15212 +#: gram.y:15591 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "WITHIN GROUP 구문 안에서 중복된 ORDER BY 구문은 허용하지 않습니다" -#: gram.y:15217 +#: gram.y:15596 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT과 WITHIN GROUP을 함께 쓸 수 없습니다" -#: gram.y:15222 +#: gram.y:15601 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC과 WITHIN GROUP을 함께 쓸 수 없습니다" -#: gram.y:15856 gram.y:15880 +#: gram.y:16328 gram.y:16352 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "프레임 시작은 UNBOUNDED FOLLOWING일 수 없음" -#: gram.y:15861 +#: gram.y:16333 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "따라오는 로우의 프레임 시작은 현재 로우의 끝일 수 없습니다" -#: gram.y:15885 +#: gram.y:16357 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "프레임 끝은 UNBOUNDED PRECEDING일 수 없음" -#: gram.y:15891 +#: gram.y:16363 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "현재 로우의 프레임 시작은 선행하는 로우를 가질 수 없습니다" -#: gram.y:15898 +#: gram.y:16370 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "따라오는 로우의 프레임 시작은 선행하는 로우를 가질 수 없습니다" -#: gram.y:16659 +#: gram.y:16919 +#, c-format +msgid "unrecognized JSON encoding: %s" +msgstr "알 수 없는 JSON 인코딩: %s" + +#: gram.y:17243 #, c-format msgid "type modifier cannot have parameter name" msgstr "자료형 한정자는 매개 변수 이름을 사용할 수 없음" -#: gram.y:16665 +#: gram.y:17249 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "자료형 한정자는 ORDER BY 구문을 사용할 수 없음" -#: gram.y:16733 gram.y:16740 gram.y:16747 +#: 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:16837 gram.y:18294 +#: gram.y:17421 gram.y:18906 #, c-format msgid "WITH TIES cannot be specified without ORDER BY clause" -msgstr "" +msgstr "WITH TIES 절은 ORDER BY 절과 함께 사용되어야 함" -#: gram.y:17973 gram.y:18160 +#: gram.y:18597 gram.y:18772 msgid "improper use of \"*\"" msgstr "\"*\" 사용이 잘못됨" -#: gram.y:18224 +#: 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 "" +"VARIADIC 직접 인자가 있는 정렬된 집합 집계 함수는 동일한 자료형의 VARIADIC " +"집계된 인자가 하나 있어야 합니다." -#: gram.y:18261 +#: gram.y:18873 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "중복된 ORDER BY 구문은 허용하지 않습니다" -#: gram.y:18272 +#: gram.y:18884 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "중복된 OFFSET 구문은 허용하지 않습니다" -#: gram.y:18281 +#: gram.y:18893 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "중복된 LIMIT 구문은 허용하지 않습니다" -#: gram.y:18290 +#: gram.y:18902 #, c-format msgid "multiple limit options not allowed" msgstr "중복된 limit 옵션은 허용하지 않음" -#: gram.y:18317 +#: gram.y:18929 #, c-format msgid "multiple WITH clauses not allowed" msgstr "중복된 WITH 절은 허용하지 않음" -#: gram.y:18510 +#: gram.y:19122 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "OUT 및 INOUT 인자는 TABLE 함수에 사용할 수 없음" -#: gram.y:18643 +#: gram.y:19255 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "중복된 COLLATE 구문은 허용하지 않습니다" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18681 gram.y:18694 +#: gram.y:19293 gram.y:19306 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s 제약조건에는 DEFERRABLE 옵션을 쓸 수 없음" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18707 +#: gram.y:19319 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s 제약조건에는 NOT VALID 옵션을 쓸 수 없음" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18720 +#: gram.y:19332 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s 제약조건에는 NO INHERIT 옵션을 쓸 수 없음" -#: gram.y:18742 +#: gram.y:19354 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "알 수 없는 파티션 규칙 \"%s\"" -#: gram.y:18766 +#: gram.y:19378 #, c-format msgid "invalid publication object list" msgstr "잘못된 발행 객체 목록" -#: gram.y:18767 +#: gram.y:19379 #, c-format msgid "" "One of TABLE or TABLES IN SCHEMA must be specified before a standalone table " "or schema name." msgstr "" +"TABLE이나 TABLES IN SCHEMA 중 하나가 독립 테이블이나 스키마 이름 앞에 있어야 합니다." -#: gram.y:18783 +#: gram.y:19395 #, c-format msgid "invalid table name" msgstr "잘못된 테이블 이름" -#: gram.y:18804 +#: gram.y:19416 #, c-format msgid "WHERE clause not allowed for schema" msgstr "WHERE 절은 스키마용으로 허용하지 않음" -#: gram.y:18811 +#: gram.y:19423 #, c-format msgid "column specification not allowed for schema" msgstr "칼럼 명세는 스키마용으로 허용하지 않음" -#: gram.y:18825 +#: gram.y:19437 #, c-format msgid "invalid schema name" msgstr "잘못된 스키마 이름" @@ -32304,12 +33778,17 @@ msgstr "\"%s\" 파일 %u 줄에서 구문 오류 있음, \"%s\" 토큰 부근" msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "구문 오류가 너무 많습니다. \"%s\" 파일을 무시합니다" -#: jsonpath_gram.y:529 +#: jsonpath_gram.y:267 +#, c-format +msgid ".decimal() can only have an optional precision[,scale]." +msgstr ".decimal() 함수는 precision[,scale] 만 선택적으로 쓸 수 있음." + +#: jsonpath_gram.y:599 #, c-format msgid "Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate." msgstr "LIKE_REGEX 구문에서 알 수 없는 플래그 문자: \"%.*s\"" -#: jsonpath_gram.y:607 +#: jsonpath_gram.y:677 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "XQuery \"x\" 플래그 (확장된 정규 표현식)는 구현되지 않았습니다." @@ -32326,7 +33805,7 @@ msgstr "잘못된 16진수 문자 순차연결" msgid "unexpected end after backslash" msgstr "백슬래시 뒤 예기치 않은 줄 끝" -#: jsonpath_scan.l:201 repl_scanner.l:209 scan.l:741 +#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:756 msgid "unterminated quoted string" msgstr "마무리 안된 따옴표 안의 문자열" @@ -32338,8 +33817,8 @@ msgstr "주석 뒤 예기치 않은 줄 끝" msgid "invalid numeric literal" msgstr "잘못된 숫자 문자열" -#: jsonpath_scan.l:325 jsonpath_scan.l:331 jsonpath_scan.l:337 scan.l:1049 -#: scan.l:1053 scan.l:1057 scan.l:1061 scan.l:1065 scan.l:1069 scan.l:1073 +#: 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 "숫자 뒤에 쓸모 없는 값이 더 있음" @@ -32355,70 +33834,70 @@ msgstr "%s, jsonpath 입력 끝부분" msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s, jsonpath 입력 \"%s\" 부근" -#: jsonpath_scan.l:557 +#: jsonpath_scan.l:568 msgid "invalid input" msgstr "잘못된 입력" -#: jsonpath_scan.l:583 +#: jsonpath_scan.l:594 msgid "invalid hexadecimal digit" msgstr "잘못된 16진수" -#: jsonpath_scan.l:614 +#: jsonpath_scan.l:625 #, c-format msgid "could not convert Unicode to server encoding" msgstr "유니코드를 서버 인코딩으로 바꿀 수 없음" -#: repl_gram.y:301 repl_gram.y:333 +#: repl_gram.y:318 repl_gram.y:359 #, c-format msgid "invalid timeline %u" msgstr "잘못된 타임라인: %u" -#: repl_scanner.l:152 +#: repl_scanner.l:154 msgid "invalid streaming start location" msgstr "잘못된 스트리밍 시작 위치" # # advance 끝 -#: scan.l:482 +#: scan.l:497 msgid "unterminated /* comment" msgstr "마무리 안된 /* 주석" -#: scan.l:502 +#: scan.l:517 msgid "unterminated bit string literal" msgstr "마무리 안된 비트 문자열 문자" -#: scan.l:516 +#: scan.l:531 msgid "unterminated hexadecimal string literal" msgstr "마무리 안된 16진수 문자열 문자" -#: scan.l:566 +#: scan.l:581 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "유니코드 이스케이프와 함께 문자열 상수를 사용하는 것은 안전하지 않음" -#: scan.l:567 +#: scan.l:582 #, c-format msgid "" "String constants with Unicode escapes cannot be used when " -"standard_conforming_strings is off." +"\"standard_conforming_strings\" is off." msgstr "" -"standard_conforming_strings = off 인 경우 문자열 상수 표기에서 유니코드 이스" +"\"standard_conforming_strings\" = off 인 경우 문자열 상수 표기에서 유니코드 이스" "케이프를 사용할 수 없습니다." -#: scan.l:628 +#: scan.l:643 msgid "unhandled previous state in xqs" msgstr "xqs 안에 처리할 수 없는 이전 상태" -#: scan.l:702 +#: scan.l:717 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "유니코드 이스케이프는 \\uXXXX 또는 \\UXXXXXXXX 형태여야 합니다." -#: scan.l:713 +#: scan.l:728 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "문자열 안에 \\' 사용이 안전하지 않습니다" -#: scan.l:714 +#: scan.l:729 #, c-format msgid "" "Use '' to write quotes in strings. \\' is insecure in client-only encodings." @@ -32426,176 +33905,92 @@ msgstr "" "작은 따옴표는 '' 형태로 사용하십시오. \\' 표기법은 클라이언트 전용 인코딩에" "서 안전하지 않습니다." -#: scan.l:786 +#: scan.l:801 msgid "unterminated dollar-quoted string" msgstr "마무리 안된 달러-따옴표 안의 문자열" -#: scan.l:803 scan.l:813 +#: scan.l:818 scan.l:828 msgid "zero-length delimited identifier" msgstr "길이가 0인 구분 식별자" -#: scan.l:824 syncrep_scanner.l:101 +#: scan.l:839 syncrep_scanner.l:101 msgid "unterminated quoted identifier" msgstr "마무리 안된 따옴표 안의 식별자" # # nonun 부분 begin -#: scan.l:987 +#: scan.l:1002 msgid "operator too long" msgstr "연산자가 너무 깁니다." -#: scan.l:1000 +#: scan.l:1015 msgid "trailing junk after parameter" msgstr "매개 변수 뒤에 쓸모 없는 값이 더 있음" -#: scan.l:1021 +#: scan.l:1036 msgid "invalid hexadecimal integer" msgstr "잘못된 16진수" -#: scan.l:1025 +#: scan.l:1040 msgid "invalid octal integer" msgstr "잘못된 8진수" -#: scan.l:1029 +#: scan.l:1044 msgid "invalid binary integer" msgstr "잘못된 바이너리 숫자" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1236 +#: 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:1244 +#: scan.l:1247 #, c-format msgid "%s at or near \"%s\"" msgstr "%s, \"%s\" 부근" -#: scan.l:1434 +#: scan.l:1439 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "문자열 안에 있는 \\' 문자는 표준이 아닙니다" -#: scan.l:1435 +#: scan.l:1440 #, c-format msgid "" "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "작은 따옴표는 '' 형태니, 인용부호 표기법(E'...') 형태로 사용하십시오." -#: scan.l:1444 +#: scan.l:1449 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "문자열 안에 있는 \\\\ 문자는 표준이 아닙니다" -#: scan.l:1445 +#: scan.l:1450 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "백슬래시 표기는 인용부호 표기법으로 사용하세요, 예, E'\\\\'." -#: scan.l:1459 +#: scan.l:1464 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "문자열 안에 비표준 escape 문자를 사용하고 있습니다" -#: scan.l:1460 +#: scan.l:1465 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "인용부호 표기법을 사용하세요, 예, E'\\r\\n'." #, c-format -#~ msgid "FORMAT JSON has no effect for json and jsonb types" +#~ msgid "removing future two-phase state file of epoch %u for transaction %u" #~ msgstr "" -#~ "json, jsonb 자료형에서는 FORMAT JSON 지정이 아무런 영향을 끼치지 못합니다." - -#, c-format -#~ msgid "Subscribed publication %s is subscribing to other publications." -#~ msgid_plural "" -#~ "Subscribed publications %s are subscribing to other publications." -#~ msgstr[0] "%s 구독은 이미 다른 발행을 구독하고 있습니다." - -#, c-format -#~ msgid "duplicate JSON key %s" -#~ msgstr "중복된 JSON 키 %s" - -#, c-format -#~ msgid "duplicate JSON object key" -#~ msgstr "JSON 객체 키 중복" - -#, c-format -#~ msgid "authentication file token too long, skipping: \"%s\"" -#~ msgstr "인증 파일의 토큰이 너무 길어서 건너뜁니다: \"%s\"" - -#~ msgid "logical replication table synchronization worker" -#~ msgstr "논리 복제 테이블 동기화 작업자" - -#~ msgid "logical replication apply worker" -#~ msgstr "논리 복제 반영 작업자" - -#, c-format -#~ msgid "" -#~ "%s for subscription \"%s\" will restart because of a parameter change" -#~ msgstr "매개 변수가 바뀌어서 %s(해당 구독: \"%s\")가 다시 시작됩니다." - -#, c-format -#~ msgid "%s for subscription \"%s\" has started" -#~ msgstr "%s가 \"%s\" 구독용으로 시작되었음" - -#, c-format -#~ msgid "could not set compression flag for %s: %s" -#~ msgstr "%s 용 압축 플래그를 지정할 수 없음: %s" - -#, c-format -#~ msgid "permission denied to cluster \"%s\", skipping it" -#~ msgstr "\"%s\" 클러스터 권한 없음, 건너뜀" - -#, c-format -#~ msgid "unexpected DEFAULT in COPY data" -#~ msgstr "COPY 자료 안에 예상치 못한 DEFAULT" - -#, c-format -#~ msgid "must be a superuser to terminate superuser process" -#~ msgstr "슈퍼유저의 세션을 정리하려면 슈퍼유저여야 합니다." - -#~ msgid "invalid unicode sequence" -#~ msgstr "잘못된 유니코드 이스케이프" - -#~ msgid "unexpected end of quoted string" -#~ msgstr "따옴표 뒤 예기치 않은 줄 끝" - -#, c-format -#~ msgid "missing contrecord at %X/%X" -#~ msgstr "%X/%X 위치에 contrecord 없음" - -#, c-format -#~ msgid "unable to map dynamic shared memory segment" -#~ msgstr "동적 공유 메모리 세그먼트를 할당할 수 없음" - -#, c-format -#~ msgid "bad magic number in dynamic shared memory segment" -#~ msgstr "동적 공유 메모리 세그먼트에 잘못된 매직 번호가 있음" - -#, c-format -#~ msgid "You might need to increase max_logical_replication_workers." -#~ msgstr "max_logical_replication_workers 값을 늘리세요." - -#, c-format -#~ msgid "You might need to increase max_worker_processes." -#~ msgstr "max_worker_processes 값을 늘리세요." - -#, c-format -#~ msgid "You might need to increase max_slot_wal_keep_size." -#~ msgstr "max_slot_wal_keep_size 값을 늘리세요." +#~ "epoch %u의 future two-phase 상태정보 파일을 삭제함, 대상 트랜잭션: %u" #, c-format -#~ msgid "You might need to increase max_locks_per_transaction." -#~ msgstr "max_locks_per_transaction을 늘려야 할 수도 있습니다." +#~ msgid "removing past two-phase state file of epoch %u for transaction %u" +#~ msgstr "epoch %u의 past two-phase 상태정보 파일을 삭제함, 대상 트랜잭션: %u" #, c-format -#~ msgid "You might need to increase max_pred_locks_per_transaction." -#~ msgstr "max_pred_locks_per_transaction 값을 늘려야 할 수도 있습니다." - -#~ msgid "Shows the collation order locale." -#~ msgstr "데이터 정렬 순서 로케일을 표시합니다." - -#~ msgid "Shows the character classification and case conversion locale." -#~ msgstr "문자 분류 및 대/소문자 변환 로케일을 표시합니다." +#~ msgid "removing past two-phase state from memory for transaction %u" +#~ msgstr "" +#~ "%u 트랜잭션에서 사용하는 past two-phase 상태정보를 메모리에서 삭제함" diff --git a/src/backend/po/ru.po b/src/backend/po/ru.po index 85d9a1535a411..f8e7152cd84f1 100644 --- a/src/backend/po/ru.po +++ b/src/backend/po/ru.po @@ -4,14 +4,14 @@ # Serguei A. Mokhov , 2001-2005. # Oleg Bartunov , 2004-2005. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. -# Maxim Yablokov , 2021, 2022. +# Alexander Lakhin , 2012-2025. +# Maxim Yablokov , 2021, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: postgres (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-04 10:36+0300\n" -"PO-Revision-Date: 2024-05-04 10:47+0300\n" +"POT-Creation-Date: 2025-02-08 07:44+0200\n" +"PO-Revision-Date: 2025-02-08 08:50+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -21,6 +21,11 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +#: ../common/binaryheap.c:121 ../common/binaryheap.c:159 +#, c-format +msgid "out of binary heap slots" +msgstr "недостаточно слотов в двоичной куче" + #: ../common/compression.c:132 ../common/compression.c:141 #: ../common/compression.c:150 #, c-format @@ -82,64 +87,66 @@ msgstr "алгоритм сжатия \"%s\" не поддерживает ре msgid "not recorded" msgstr "не записано" -#: ../common/controldata_utils.c:79 ../common/controldata_utils.c:83 -#: commands/copyfrom.c:1687 commands/extension.c:3480 utils/adt/genfile.c:123 +#: ../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:94 ../common/controldata_utils.c:96 +#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1347 access/transam/xlog.c:3195 -#: access/transam/xlog.c:3998 access/transam/xlogrecovery.c:1225 -#: access/transam/xlogrecovery.c:1317 access/transam/xlogrecovery.c:1354 -#: access/transam/xlogrecovery.c:1414 backup/basebackup.c:1846 -#: commands/extension.c:3490 libpq/hba.c:769 replication/logical/origin.c:745 -#: replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5050 -#: replication/logical/snapbuild.c:2031 replication/slot.c:1980 -#: replication/slot.c:2021 replication/walsender.c:643 +#: 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:984 utils/cache/relmapper.c:830 +#: 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:102 ../common/controldata_utils.c:105 -#: access/transam/xlog.c:3200 access/transam/xlog.c:4003 -#: backup/basebackup.c:1850 replication/logical/origin.c:750 -#: replication/logical/origin.c:789 replication/logical/snapbuild.c:2036 -#: replication/slot.c:1984 replication/slot.c:2025 replication/walsender.c:648 -#: utils/cache/relmapper.c:834 +#: ../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:114 ../common/controldata_utils.c:118 -#: ../common/controldata_utils.c:263 ../common/controldata_utils.c:266 -#: access/heap/rewriteheap.c:1175 access/heap/rewriteheap.c:1280 +#: ../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:1359 -#: access/transam/twophase.c:1771 access/transam/xlog.c:3041 -#: access/transam/xlog.c:3235 access/transam/xlog.c:3240 -#: access/transam/xlog.c:3376 access/transam/xlog.c:3968 -#: access/transam/xlog.c:4887 commands/copyfrom.c:1747 commands/copyto.c:332 +#: 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:5102 -#: replication/logical/snapbuild.c:1798 replication/logical/snapbuild.c:1922 -#: replication/slot.c:1871 replication/slot.c:2032 replication/walsender.c:658 -#: storage/file/copydir.c:208 storage/file/copydir.c:213 storage/file/fd.c:782 -#: storage/file/fd.c:3700 storage/file/fd.c:3806 utils/cache/relmapper.c:842 -#: utils/cache/relmapper.c:957 +#: 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" msgstr "не удалось закрыть файл \"%s\": %m" -#: ../common/controldata_utils.c:154 +#: ../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "несоответствие порядка байт" -#: ../common/controldata_utils.c:156 +#: ../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -153,141 +160,157 @@ msgstr "" "этой программой. В этом случае результаты будут неверными и\n" "установленный PostgreSQL будет несовместим с этим каталогом данных." -#: ../common/controldata_utils.c:211 ../common/controldata_utils.c:216 -#: ../common/file_utils.c:228 ../common/file_utils.c:287 -#: ../common/file_utils.c:361 access/heap/rewriteheap.c:1263 -#: access/transam/timeline.c:111 access/transam/timeline.c:251 -#: access/transam/timeline.c:348 access/transam/twophase.c:1303 -#: access/transam/xlog.c:2948 access/transam/xlog.c:3111 -#: access/transam/xlog.c:3150 access/transam/xlog.c:3343 -#: access/transam/xlog.c:3988 access/transam/xlogrecovery.c:4213 -#: access/transam/xlogrecovery.c:4316 access/transam/xlogutils.c:838 -#: backup/basebackup.c:538 backup/basebackup.c:1516 libpq/hba.c:629 -#: postmaster/syslogger.c:1560 replication/logical/origin.c:735 -#: replication/logical/reorderbuffer.c:3706 -#: replication/logical/reorderbuffer.c:4257 -#: replication/logical/reorderbuffer.c:5030 -#: replication/logical/snapbuild.c:1753 replication/logical/snapbuild.c:1863 -#: replication/slot.c:1952 replication/walsender.c:616 -#: replication/walsender.c:2731 storage/file/copydir.c:151 -#: storage/file/fd.c:757 storage/file/fd.c:3457 storage/file/fd.c:3687 -#: storage/file/fd.c:3777 storage/smgr/md.c:663 utils/cache/relmapper.c:819 -#: utils/cache/relmapper.c:936 utils/error/elog.c:2086 -#: utils/init/miscinit.c:1537 utils/init/miscinit.c:1671 -#: utils/init/miscinit.c:1748 utils/misc/guc.c:4609 utils/misc/guc.c:4659 +#: ../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:232 ../common/controldata_utils.c:235 -#: access/transam/twophase.c:1744 access/transam/twophase.c:1753 -#: access/transam/xlog.c:8757 access/transam/xlogfuncs.c:708 -#: backup/basebackup_server.c:175 backup/basebackup_server.c:268 -#: postmaster/postmaster.c:5573 postmaster/syslogger.c:1571 -#: postmaster/syslogger.c:1584 postmaster/syslogger.c:1597 -#: utils/cache/relmapper.c:948 +#: ../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:249 ../common/controldata_utils.c:254 -#: ../common/file_utils.c:299 ../common/file_utils.c:369 -#: access/heap/rewriteheap.c:959 access/heap/rewriteheap.c:1169 -#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1765 -#: access/transam/xlog.c:3034 access/transam/xlog.c:3229 -#: access/transam/xlog.c:3961 access/transam/xlog.c:8147 -#: access/transam/xlog.c:8192 backup/basebackup_server.c:209 -#: commands/dbcommands.c:515 replication/logical/snapbuild.c:1791 -#: replication/slot.c:1857 replication/slot.c:1962 storage/file/fd.c:774 -#: storage/file/fd.c:3798 storage/smgr/md.c:1135 storage/smgr/md.c:1180 -#: storage/sync/sync.c:451 utils/misc/guc.c:4379 +#: ../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\": %m" -#: ../common/cryptohash.c:261 ../common/cryptohash_openssl.c:133 -#: ../common/cryptohash_openssl.c:332 ../common/exec.c:550 ../common/exec.c:595 -#: ../common/exec.c:687 ../common/hmac.c:309 ../common/hmac.c:325 -#: ../common/hmac_openssl.c:132 ../common/hmac_openssl.c:327 -#: ../common/md5_common.c:155 ../common/psprintf.c:143 -#: ../common/scram-common.c:269 ../common/stringinfo.c:305 ../port/path.c:751 -#: ../port/path.c:789 ../port/path.c:806 access/transam/twophase.c:1412 -#: access/transam/xlogrecovery.c:589 lib/dshash.c:253 libpq/auth.c:1343 -#: libpq/auth.c:1387 libpq/auth.c:1944 libpq/be-secure-gssapi.c:524 -#: postmaster/bgworker.c:352 postmaster/bgworker.c:934 -#: postmaster/postmaster.c:2537 postmaster/postmaster.c:4130 -#: postmaster/postmaster.c:5498 postmaster/postmaster.c:5869 -#: replication/libpqwalreceiver/libpqwalreceiver.c:361 -#: replication/logical/logical.c:208 replication/walsender.c:686 -#: storage/buffer/localbuf.c:601 storage/file/fd.c:866 storage/file/fd.c:1397 -#: storage/file/fd.c:1558 storage/file/fd.c:2478 storage/ipc/procarray.c:1449 -#: storage/ipc/procarray.c:2231 storage/ipc/procarray.c:2238 -#: storage/ipc/procarray.c:2737 storage/ipc/procarray.c:3373 -#: utils/adt/formatting.c:1690 utils/adt/formatting.c:1812 -#: utils/adt/formatting.c:1935 utils/adt/pg_locale.c:473 -#: utils/adt/pg_locale.c:637 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:514 -#: utils/hash/dynahash.c:614 utils/hash/dynahash.c:1111 utils/mb/mbutils.c:402 -#: utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 -#: utils/misc/guc.c:640 utils/misc/guc.c:665 utils/misc/guc.c:1053 -#: utils/misc/guc.c:4357 utils/misc/tzparser.c:476 utils/mmgr/aset.c:445 -#: utils/mmgr/dsa.c:714 utils/mmgr/dsa.c:736 utils/mmgr/dsa.c:817 -#: utils/mmgr/generation.c:205 utils/mmgr/mcxt.c:1046 utils/mmgr/mcxt.c:1082 -#: utils/mmgr/mcxt.c:1120 utils/mmgr/mcxt.c:1158 utils/mmgr/mcxt.c:1246 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/mcxt.c:1313 utils/mmgr/mcxt.c:1502 -#: utils/mmgr/mcxt.c:1547 utils/mmgr/mcxt.c:1604 utils/mmgr/slab.c:366 +#: ../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 "нехватка памяти" #: ../common/cryptohash.c:266 ../common/cryptohash.c:272 -#: ../common/cryptohash_openssl.c:344 ../common/cryptohash_openssl.c:352 -#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:339 -#: ../common/hmac_openssl.c:347 +#: ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 +#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 +#: ../common/hmac_openssl.c:377 msgid "success" msgstr "успех" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:346 -#: ../common/hmac_openssl.c:341 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 +#: ../common/hmac_openssl.c:371 msgid "destination buffer too small" msgstr "буфер назначения слишком мал" -#: ../common/cryptohash_openssl.c:348 ../common/hmac_openssl.c:343 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 msgid "OpenSSL failure" msgstr "ошибка OpenSSL" -#: ../common/exec.c:172 +#: ../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "неверный исполняемый файл \"%s\": %m" -#: ../common/exec.c:215 +#: ../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не удалось прочитать исполняемый файл \"%s\": %m" -#: ../common/exec.c:223 +#: ../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../common/exec.c:250 +#: ../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не удалось преобразовать относительный путь \"%s\" в абсолютный: %m" -#: ../common/exec.c:412 libpq/pqcomm.c:724 storage/ipc/latch.c:1134 -#: storage/ipc/latch.c:1314 storage/ipc/latch.c:1547 storage/ipc/latch.c:1709 -#: storage/ipc/latch.c:1835 +#: ../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" + +#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не удалось прочитать вывод команды \"%s\": %m" + +#: ../common/exec.c:397 +#, c-format +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: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:791 -#: ../port/path.c:808 utils/misc/ps_status.c:195 utils/misc/ps_status.c:203 -#: utils/misc/ps_status.c:230 utils/misc/ps_status.c:238 +#: ../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" @@ -297,39 +320,51 @@ msgstr "нехватка памяти\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:447 -#: ../common/file_utils.c:451 access/transam/twophase.c:1315 -#: access/transam/xlogarchive.c:112 access/transam/xlogarchive.c:236 -#: backup/basebackup.c:346 backup/basebackup.c:544 backup/basebackup.c:615 -#: commands/copyfrom.c:1697 commands/copyto.c:702 commands/extension.c:3469 -#: commands/tablespace.c:810 commands/tablespace.c:899 postmaster/pgarch.c:590 -#: replication/logical/snapbuild.c:1649 storage/file/fd.c:1922 -#: storage/file/fd.c:2008 storage/file/fd.c:3511 utils/adt/dbsize.c:106 -#: utils/adt/dbsize.c:258 utils/adt/dbsize.c:338 utils/adt/genfile.c:483 -#: utils/adt/genfile.c:658 utils/adt/misc.c:340 +#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#, c-format +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: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" -#: ../common/file_utils.c:162 ../common/pgfnames.c:48 ../common/rmtree.c:63 -#: commands/tablespace.c:734 commands/tablespace.c:744 -#: postmaster/postmaster.c:1564 storage/file/fd.c:2880 -#: storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#, c-format +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: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" -#: ../common/file_utils.c:196 ../common/pgfnames.c:69 ../common/rmtree.c:104 -#: storage/file/fd.c:2892 +#: ../common/file_utils.c:169 ../common/file_utils.c:315 +#: ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: ../common/file_utils.c:379 access/transam/xlogarchive.c:390 -#: postmaster/pgarch.c:746 postmaster/syslogger.c:1608 -#: replication/logical/snapbuild.c:1810 replication/slot.c:723 -#: replication/slot.c:1743 replication/slot.c:1885 storage/file/fd.c:792 -#: utils/time/snapmgr.c:1284 +#: ../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" @@ -338,75 +373,92 @@ msgstr "не удалось переименовать файл \"%s\" в \"%s\" msgid "internal error" msgstr "внутренняя ошибка" -#: ../common/jsonapi.c:1144 +#: ../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "" +"Инкрементальный лексический анализатор не подходит для нисходящего " +"рекурсивного разбора." + +#: ../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "" +"Для инкрементального разбора требуется инкрементальный лексический " +"анализатор." + +#: ../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "" +"Слишком большая вложенность JSON, максимальная допустимая глубина: 6400." + +#: ../common/jsonapi.c:2127 #, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "Неверная спецпоследовательность: \"\\%s\"." +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "Неверная спецпоследовательность: \"\\%.*s\"." -#: ../common/jsonapi.c:1147 +#: ../common/jsonapi.c:2131 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: ../common/jsonapi.c:1150 +#: ../common/jsonapi.c:2135 #, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Ожидался конец текста, но обнаружено продолжение \"%.*s\"." -#: ../common/jsonapi.c:1153 +#: ../common/jsonapi.c:2138 #, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1156 +#: ../common/jsonapi.c:2141 #, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1159 +#: ../common/jsonapi.c:2144 #, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "Ожидалось \":\", но обнаружено \"%s\"." +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Ожидалось \":\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1162 +#: ../common/jsonapi.c:2147 #, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Ожидалось значение JSON, но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1165 +#: ../common/jsonapi.c:2150 msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: ../common/jsonapi.c:1167 +#: ../common/jsonapi.c:2152 #, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Ожидалась строка или \"}\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1170 +#: ../common/jsonapi.c:2155 #, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1173 +#: ../common/jsonapi.c:2158 #, c-format -msgid "Expected string, but found \"%s\"." -msgstr "Ожидалась строка, но обнаружено \"%s\"." +msgid "Expected string, but found \"%.*s\"." +msgstr "Ожидалась строка, но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:1176 +#: ../common/jsonapi.c:2161 #, c-format -msgid "Token \"%s\" is invalid." -msgstr "Ошибочный элемент текста \"%s\"." +msgid "Token \"%.*s\" is invalid." +msgstr "Ошибочный элемент \"%.*s\"." -#: ../common/jsonapi.c:1179 jsonpath_scan.l:597 +#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: ../common/jsonapi.c:1181 +#: ../common/jsonapi.c:2166 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: ../common/jsonapi.c:1184 +#: ../common/jsonapi.c:2169 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -414,20 +466,20 @@ msgstr "" "Спецкоды Unicode для значений выше 007F можно использовать только с " "кодировкой UTF8." -#: ../common/jsonapi.c:1187 +#: ../common/jsonapi.c:2178 #, c-format msgid "" "Unicode escape value could not be translated to the server's encoding %s." msgstr "Спецкод Unicode нельзя преобразовать в серверную кодировку %s." -#: ../common/jsonapi.c:1190 jsonpath_scan.l:630 +#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: ../common/jsonapi.c:1192 jsonpath_scan.l:641 jsonpath_scan.l:651 -#: jsonpath_scan.l:702 +#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." @@ -452,11 +504,168 @@ msgstr "подробности: " msgid "hint: " msgstr "подсказка: " +#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "не удалось подготовить контекст контрольной суммы манифеста" + +#: ../common/parse_manifest.c:203 ../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "неожиданный конец манифеста" + +#: ../common/parse_manifest.c:209 ../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "не удалось изменить контекст контрольной суммы манифеста" + +#: ../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "неожиданное начало объекта" + +#: ../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "неожиданный конец объекта" + +#: ../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "неожиданное начало массива" + +#: ../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "неожиданный конец массива" + +#: ../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "ожидалось указание версии" + +#: ../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "нераспознанное поле на верхнем уровне" + +#: ../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "неизвестное поле для файла" + +#: ../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "неизвестное поле в указании диапазона WAL" + +#: ../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "неожиданное поле объекта" + +#: ../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "неожиданное скалярное значение" + +#: ../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "версия манифеста не является целым числом" + +#: ../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "неожиданная версия манифеста" + +#: ../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "идентификатор системы в манифесте не является целым числом" + +#: ../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "отсутствует указание пути" + +#: ../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "путь задан в обычном виде и в закодированном" + +#: ../common/parse_manifest.c:666 +msgid "missing size" +msgstr "отсутствует указание размера" + +#: ../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "не задан алгоритм расчёта контрольной суммы" + +#: ../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "не удалось декодировать имя файла" + +#: ../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "размер файла не является целочисленным" + +#: ../common/parse_manifest.c:699 backup/basebackup.c:870 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нераспознанный алгоритм расчёта контрольных сумм: \"%s\"" + +#: ../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "неверная контрольная сумма для файла \"%s\": \"%s\"" + +#: ../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "отсутствует линия времени" + +#: ../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "отсутствует начальный LSN" + +#: ../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "отсутствует конечный LSN" + +#: ../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "линия времени задана не целым числом" + +#: ../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "не удалось разобрать начальный LSN" + +#: ../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "не удалось разобрать конечный LSN" + +#: ../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "ожидалось как минимум 2 строки" + +#: ../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "последняя строка не оканчивается символом новой строки" + +#: ../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "не удалось завершить расчёт контрольной суммы манифеста" + +#: ../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "в манифесте нет контрольной суммы" + +#: ../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "неверная контрольная сумма в манифесте: \"%s\"" + +#: ../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "ошибка контрольной суммы манифеста" + +#: ../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 -#: postmaster/postmaster.c:2211 utils/misc/guc.c:3120 utils/misc/guc.c:3156 -#: utils/misc/guc.c:3226 utils/misc/guc.c:4556 utils/misc/guc.c:6738 -#: utils/misc/guc.c:6779 +#: 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\"" @@ -517,46 +726,46 @@ msgstr "не удалось перезапуститься с ограничен msgid "could not get exit code from subprocess: error code %lu" msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" -#: ../common/rmtree.c:95 access/heap/rewriteheap.c:1248 -#: access/transam/twophase.c:1704 access/transam/xlogarchive.c:120 -#: access/transam/xlogarchive.c:400 postmaster/postmaster.c:1143 -#: postmaster/syslogger.c:1537 replication/logical/origin.c:591 -#: replication/logical/reorderbuffer.c:4526 -#: replication/logical/snapbuild.c:1691 replication/logical/snapbuild.c:2125 -#: replication/slot.c:1936 storage/file/fd.c:832 storage/file/fd.c:3325 -#: storage/file/fd.c:3387 storage/file/reinit.c:262 storage/ipc/dsm.c:316 -#: storage/smgr/md.c:383 storage/smgr/md.c:442 storage/sync/sync.c:248 -#: utils/time/snapmgr.c:1608 +#: ../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" msgstr "не удалось стереть файл \"%s\": %m" -#: ../common/rmtree.c:122 commands/tablespace.c:773 commands/tablespace.c:786 -#: commands/tablespace.c:821 commands/tablespace.c:911 storage/file/fd.c:3317 -#: storage/file/fd.c:3726 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 +#: commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 +#: storage/file/fd.c:3779 #, c-format 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 "не удалось закодировать ключ сервера" -#: ../common/stringinfo.c:306 +#: ../common/stringinfo.c:315 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "" "Не удалось увеличить строковый буфер (в буфере байт: %d, требовалось ещё %d)." -#: ../common/stringinfo.c:310 +#: ../common/stringinfo.c:319 #, c-format msgid "" "out of memory\n" @@ -573,7 +782,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../common/username.c:45 libpq/auth.c:1879 +#: ../common/username.c:45 libpq/auth.c:1888 msgid "user does not exist" msgstr "пользователь не существует" @@ -610,7 +819,7 @@ msgstr "дочерний процесс завершён по сигналу %d: #: ../common/wait_error.c:82 #, c-format msgid "child process exited with unrecognized status %d" -msgstr "дочерний процесс завершился с нераспознанным состоянием %d" +msgstr "дочерний процесс завершился с нераспознанным кодом состояния %d" #: ../port/chklocale.c:283 #, c-format @@ -670,22 +879,22 @@ msgstr "" "Возможно, работе СУБД мешает антивирус, программа резервного копирования или " "что-то подобное." -#: ../port/path.c:775 +#: ../port/path.c:852 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "не удалось определить текущий рабочий каталог: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "не удалось определить текущий рабочий каталог: %m\n" #: ../port/strerror.c:72 #, c-format msgid "operating system error %d" msgstr "ошибка ОС %d" -#: ../port/thread.c:50 ../port/thread.c:86 +#: ../port/user.c:43 ../port/user.c:79 #, c-format msgid "could not look up local user ID %d: %s" msgstr "найти локального пользователя по идентификатору (%d) не удалось: %s" -#: ../port/thread.c:55 ../port/thread.c:91 +#: ../port/user.c:48 ../port/user.c:84 #, c-format msgid "local user with ID %d does not exist" msgstr "локальный пользователь с ID %d не существует" @@ -707,7 +916,7 @@ msgid "could not check access token membership: error code %lu\n" msgstr "" "не удалось проверить вхождение в маркере безопасности (код ошибки: %lu)\n" -#: access/brin/brin.c:216 +#: access/brin/brin.c:405 #, c-format msgid "" "request for BRIN range summarization for index \"%s\" page %u was not " @@ -716,72 +925,72 @@ msgstr "" "запрос на расчёт сводки диапазона BRIN для индекса \"%s\" страницы %u не был " "записан" -#: access/brin/brin.c:1036 access/brin/brin.c:1143 access/gin/ginfast.c:1039 -#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:214 -#: access/transam/xlogfuncs.c:247 access/transam/xlogfuncs.c:286 -#: access/transam/xlogfuncs.c:307 access/transam/xlogfuncs.c:328 -#: access/transam/xlogfuncs.c:398 access/transam/xlogfuncs.c:456 +#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 +#: access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 +#: access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 +#: access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 #, c-format msgid "recovery is in progress" msgstr "идёт процесс восстановления" -#: access/brin/brin.c:1037 access/brin/brin.c:1144 +#: access/brin/brin.c:1386 access/brin/brin.c:1494 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Функции управления BRIN нельзя использовать в процессе восстановления." -#: access/brin/brin.c:1042 access/brin/brin.c:1149 +#: access/brin/brin.c:1391 access/brin/brin.c:1499 #, c-format msgid "block number out of range: %lld" msgstr "номер блока вне диапазона: %lld" -#: access/brin/brin.c:1086 access/brin/brin.c:1175 +#: access/brin/brin.c:1436 access/brin/brin.c:1525 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" - это не индекс BRIN" -#: access/brin/brin.c:1102 access/brin/brin.c:1191 +#: access/brin/brin.c:1452 access/brin/brin.c:1541 #, c-format msgid "could not open parent table of index \"%s\"" msgstr "не удалось открыть родительскую таблицу индекса \"%s\"" -#: access/brin/brin.c:1111 access/brin/brin.c:1207 access/gin/ginfast.c:1084 -#: parser/parse_utilcmd.c:2280 +#: 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\" - нерабочий" -#: access/brin/brin_bloom.c:752 access/brin/brin_bloom.c:794 -#: access/brin/brin_minmax_multi.c:2985 access/brin/brin_minmax_multi.c:3122 -#: statistics/dependencies.c:663 statistics/dependencies.c:716 -#: statistics/mcv.c:1484 statistics/mcv.c:1515 statistics/mvdistinct.c:344 -#: statistics/mvdistinct.c:397 utils/adt/pseudotypes.c:43 -#: utils/adt/pseudotypes.c:77 utils/adt/tsgistidx.c:93 +#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 +#: access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 +#: statistics/dependencies.c:661 statistics/dependencies.c:714 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 +#: utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format msgid "cannot accept a value of type %s" msgstr "значение типа %s нельзя ввести" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 -#: access/brin/brin_pageops.c:852 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1462 access/spgist/spgdoinsert.c:2002 -#: access/spgist/spgdoinsert.c:2279 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 +#: access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 +#: access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 +#: access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "" "размер строки индекса (%zu) больше предельного размера (%zu) (индекс \"%s\")" -#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 +#: access/brin/brin_revmap.c:383 access/brin/brin_revmap.c:389 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "испорченный индекс BRIN: несогласованность в карте диапазонов" -#: access/brin/brin_revmap.c:593 +#: access/brin/brin_revmap.c:583 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "неожиданный тип страницы 0x%04X в BRIN-индексе \"%s\" (блок: %u)" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 +#: access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 #: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "" @@ -791,8 +1000,8 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит функцию %s с " "неправильным опорным номером %d" -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 +#: access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 #: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "" @@ -802,8 +1011,8 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит функцию %s с " "неподходящим объявлением для опорного номера %d" -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 +#: access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 #: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "" @@ -813,7 +1022,7 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит оператор %s с " "неправильным номером стратегии %d" -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 #: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 #: access/spgist/spgvalidate.c:237 #, c-format @@ -824,8 +1033,8 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит некорректное " "определение ORDER BY для оператора %s" -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 +#: access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 #: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "" @@ -860,31 +1069,31 @@ msgstr "" msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "в классе операторов \"%s\" метода доступа %s нет оператора(ов)" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:274 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 +#: access/gist/gistvalidate.c:273 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d" msgstr "в классе операторов \"%s\" метода доступа %s нет опорной функции %d" -#: access/common/attmap.c:122 +#: access/common/attmap.c:121 #, c-format msgid "Returned type %s does not match expected type %s in column %d." msgstr "Возвращаемый тип %s не соответствует ожидаемому типу %s в столбце %d." -#: access/common/attmap.c:150 +#: access/common/attmap.c:149 #, c-format msgid "" "Number of returned columns (%d) does not match expected column count (%d)." msgstr "" "Число возвращённых столбцов (%d) не соответствует ожидаемому числу (%d)." -#: access/common/attmap.c:234 access/common/attmap.c:246 +#: access/common/attmap.c:233 access/common/attmap.c:245 #, c-format msgid "could not convert row type" msgstr "не удалось преобразовать тип строки" -#: access/common/attmap.c:235 +#: access/common/attmap.c:234 #, c-format msgid "" "Attribute \"%s\" of type %s does not match corresponding attribute of type " @@ -892,12 +1101,12 @@ msgid "" msgstr "" "Атрибут \"%s\" типа %s несовместим с соответствующим атрибутом типа %s." -#: access/common/attmap.c:247 +#: access/common/attmap.c:246 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "Атрибут \"%s\" типа %s не существует в типе %s." -#: access/common/heaptuple.c:1133 access/common/heaptuple.c:1468 +#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "число столбцов (%d) превышает предел (%d)" @@ -907,122 +1116,110 @@ msgstr "число столбцов (%d) превышает предел (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "число столбцов индекса (%d) превышает предел (%d)" -#: access/common/indextuple.c:209 access/spgist/spgutils.c:957 +#: 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:292 tcop/fastpath.c:107 tcop/fastpath.c:454 -#: tcop/postgres.c:1944 +#: 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" -#: access/common/reloptions.c:521 access/common/reloptions.c:532 +#: access/common/reloptions.c:519 access/common/reloptions.c:530 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Допускаются только значения \"on\", \"off\" и \"auto\"." -#: access/common/reloptions.c:543 +#: access/common/reloptions.c:541 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "Допускаются только значения \"local\" и \"cascaded\"." -#: access/common/reloptions.c:691 +#: access/common/reloptions.c:689 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "превышен предел пользовательских типов реляционных параметров" -#: access/common/reloptions.c:1233 +#: access/common/reloptions.c:1231 #, c-format msgid "RESET must not include values for parameters" msgstr "В RESET не должно передаваться значение параметров" -#: access/common/reloptions.c:1265 +#: access/common/reloptions.c:1263 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "нераспознанное пространство имён параметров \"%s\"" -#: access/common/reloptions.c:1302 commands/variable.c:1167 +#: access/common/reloptions.c:1300 commands/variable.c:1214 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "таблицы со свойством WITH OIDS не поддерживаются" -#: access/common/reloptions.c:1470 +#: access/common/reloptions.c:1468 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "нераспознанный параметр \"%s\"" -#: access/common/reloptions.c:1582 +#: access/common/reloptions.c:1580 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "параметр \"%s\" указан неоднократно" -#: access/common/reloptions.c:1598 +#: access/common/reloptions.c:1596 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "неверное значение для логического параметра \"%s\": %s" -#: access/common/reloptions.c:1610 +#: access/common/reloptions.c:1608 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "неверное значение для целочисленного параметра \"%s\": %s" -#: access/common/reloptions.c:1616 access/common/reloptions.c:1636 +#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "значение %s вне допустимых пределов параметра \"%s\"" -#: access/common/reloptions.c:1618 +#: access/common/reloptions.c:1616 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Допускаются значения только от \"%d\" до \"%d\"." -#: access/common/reloptions.c:1630 +#: access/common/reloptions.c:1628 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "неверное значение для численного параметра \"%s\": %s" -#: access/common/reloptions.c:1638 +#: access/common/reloptions.c:1636 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Допускаются значения только от \"%f\" до \"%f\"." -#: access/common/reloptions.c:1660 +#: access/common/reloptions.c:1658 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "неверное значение для параметра-перечисления \"%s\": %s" -#: access/common/reloptions.c:1991 +#: access/common/reloptions.c:1989 #, c-format msgid "cannot specify storage parameters for a partitioned table" msgstr "задать параметры хранения для секционированной таблицы нельзя" -#: access/common/reloptions.c:1992 +#: access/common/reloptions.c:1990 #, c-format msgid "Specify storage parameters for its leaf partitions instead." msgstr "Задайте параметры хранения для её конечных секций." -#: access/common/toast_compression.c:33 +#: access/common/toast_compression.c:31 #, c-format msgid "compression method lz4 not supported" msgstr "метод сжатия lz4 не поддерживается" -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:32 #, c-format msgid "This functionality requires the server to be built with lz4 support." msgstr "Для этой функциональности в сервере не хватает поддержки lz4." -#: access/common/tupdesc.c:837 commands/tablecmds.c:6956 -#: commands/tablecmds.c:13027 -#, c-format -msgid "too many array dimensions" -msgstr "слишком много размерностей массива" - -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1913 -#, c-format -msgid "column \"%s\" cannot be declared SETOF" -msgstr "столбец \"%s\" не может быть объявлен как SETOF" - #: access/gin/ginbulk.c:44 #, c-format msgid "posting list is too long" @@ -1030,25 +1227,25 @@ msgstr "слишком длинный список указателей" #: access/gin/ginbulk.c:45 #, c-format -msgid "Reduce maintenance_work_mem." -msgstr "Уменьшите maintenance_work_mem." +msgid "Reduce \"maintenance_work_mem\"." +msgstr "Уменьшите \"maintenance_work_mem\"." -#: access/gin/ginfast.c:1040 +#: access/gin/ginfast.c:1041 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "Очередь записей GIN нельзя очистить в процессе восстановления." -#: access/gin/ginfast.c:1047 +#: access/gin/ginfast.c:1048 #, c-format msgid "\"%s\" is not a GIN index" msgstr "\"%s\" - это не индекс GIN" -#: access/gin/ginfast.c:1058 +#: access/gin/ginfast.c:1059 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "обращаться к временным индексам других сеансов нельзя" -#: access/gin/ginget.c:273 access/nbtree/nbtinsert.c:762 +#: access/gin/ginget.c:271 access/nbtree/nbtinsert.c:762 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "не удалось повторно найти кортеж в индексе \"%s\"" @@ -1064,14 +1261,14 @@ msgstr "" msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Для исправления выполните REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:146 executor/execExpr.c:2169 -#: utils/adt/arrayfuncs.c:4045 utils/adt/arrayfuncs.c:6732 -#: utils/adt/rowtypes.c:984 +#: 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" -#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 #: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "" @@ -1081,7 +1278,7 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит опорную функцию %s с " "межтиповой регистрацией" -#: access/gin/ginvalidate.c:260 +#: access/gin/ginvalidate.c:258 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d or " @@ -1089,18 +1286,18 @@ msgid "" msgstr "" "в классе операторов \"%s\" метода доступа %s нет опорной функции %d или %d" -#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 #: access/spgist/spgvalidate.c:387 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "номер опорной функции %d не подходит для метода доступа %s" -#: access/gist/gist.c:759 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "индекс \"%s\" содержит внутренний кортеж, отмеченный как ошибочный" -#: access/gist/gist.c:761 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 #, c-format msgid "" "This is caused by an incomplete page split at crash recovery before " @@ -1109,16 +1306,16 @@ msgstr "" "Это вызвано неполным разделением страницы при восстановлении после сбоя в " "PostgreSQL до версии 9.1." -#: access/gist/gist.c:762 access/gist/gistutil.c:801 access/gist/gistutil.c:812 -#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:227 -#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 -#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:813 +#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 +#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 +#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 +#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 #: access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "Пожалуйста, выполните REINDEX для него." -#: access/gist/gist.c:1195 +#: access/gist/gist.c:1196 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "исправление неполного разделения в индексе \"%s\" (блок: %u)" @@ -1138,19 +1335,19 @@ msgstr "" "разработчиками или попробуйте указать этот столбец в команде CREATE INDEX " "вторым." -#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 +#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 #: access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "в индексе \"%s\" неожиданно оказалась нулевая страница в блоке %u" -#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 -#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:821 +#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 +#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "индекс \"%s\" содержит испорченную страницу в блоке %u" -#: access/gist/gistvalidate.c:203 +#: access/gist/gistvalidate.c:202 #, c-format msgid "" "operator family \"%s\" of access method %s contains unsupported ORDER BY " @@ -1159,7 +1356,7 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит неподдерживаемое " "определение ORDER BY для оператора %s" -#: access/gist/gistvalidate.c:214 +#: access/gist/gistvalidate.c:213 #, c-format msgid "" "operator family \"%s\" of access method %s contains incorrect ORDER BY " @@ -1168,32 +1365,32 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит некорректное " "определение ORDER BY для оператора %s" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:333 -#: utils/adt/varchar.c:1009 utils/adt/varchar.c:1064 +#: 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:280 access/hash/hashfunc.c:334 catalog/heap.c:671 -#: catalog/heap.c:677 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:2015 commands/tablecmds.c:17527 commands/view.c:86 -#: regex/regc_pg_locale.c:243 utils/adt/formatting.c:1648 -#: utils/adt/formatting.c:1770 utils/adt/formatting.c:1893 utils/adt/like.c:191 -#: utils/adt/like_support.c:1025 utils/adt/varchar.c:739 -#: utils/adt/varchar.c:1010 utils/adt/varchar.c:1065 utils/adt/varlena.c:1518 +#: 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." msgstr "Задайте правило сортировки явно в предложении COLLATE." -#: access/hash/hashinsert.c:86 +#: access/hash/hashinsert.c:84 #, c-format msgid "index row size %zu exceeds hash maximum %zu" msgstr "размер строки индекса (%zu) больше предельного размера хеша (%zu)" -#: access/hash/hashinsert.c:88 access/spgist/spgdoinsert.c:2006 -#: access/spgist/spgdoinsert.c:2283 access/spgist/spgutils.c:1018 +#: 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 "Значения, не умещающиеся в страницу буфера, нельзя проиндексировать." @@ -1208,17 +1405,17 @@ msgstr "неверный номер блока переполнения: %u" msgid "out of overflow pages in hash index \"%s\"" msgstr "в хеш-индексе \"%s\" не хватает страниц переполнения" -#: access/hash/hashsearch.c:315 +#: access/hash/hashsearch.c:311 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "хеш-индексы не поддерживают сканирование всего индекса" -#: access/hash/hashutil.c:263 +#: access/hash/hashutil.c:262 #, c-format msgid "index \"%s\" is not a hash index" msgstr "индекс \"%s\" не является хеш-индексом" -#: access/hash/hashutil.c:269 +#: access/hash/hashutil.c:268 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "индекс \"%s\" имеет неправильную версию хеша" @@ -1239,38 +1436,48 @@ msgid "" msgstr "" "в семействе операторов \"%s\" метода доступа %s нет межтипового оператора(ов)" -#: access/heap/heapam.c:2038 +#: access/heap/heapam.c:2206 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "вставлять кортежи в параллельном исполнителе нельзя" -#: access/heap/heapam.c:2557 +#: access/heap/heapam.c:2725 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "удалять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:2604 +#: access/heap/heapam.c:2772 #, c-format msgid "attempted to delete invisible tuple" msgstr "попытка удаления невидимого кортежа" -#: access/heap/heapam.c:3052 access/heap/heapam.c:5921 +#: 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:3180 +#: access/heap/heapam.c:3397 #, c-format msgid "attempted to update invisible tuple" msgstr "попытка изменения невидимого кортежа" -#: access/heap/heapam.c:4569 access/heap/heapam.c:4607 -#: access/heap/heapam.c:4872 access/heap/heapam_handler.c:467 +#: 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_handler.c:412 +#: 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 " @@ -1279,66 +1486,67 @@ msgstr "" "кортеж, подлежащий блокировке, был перемещён в другую секцию в результате " "параллельного изменения" -#: access/heap/hio.c:536 access/heap/rewriteheap.c:659 +#: access/heap/hio.c:535 access/heap/rewriteheap.c:640 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "размер строки (%zu) превышает предел (%zu)" -#: access/heap/rewriteheap.c:919 +#: access/heap/rewriteheap.c:885 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "не удалось записать в файл \"%s\" (записано байт: %d из %d): %m" -#: access/heap/rewriteheap.c:1011 access/heap/rewriteheap.c:1128 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:2973 access/transam/xlog.c:3164 -#: access/transam/xlog.c:3940 access/transam/xlog.c:8746 -#: access/transam/xlogfuncs.c:702 backup/basebackup_server.c:151 -#: backup/basebackup_server.c:244 commands/dbcommands.c:495 -#: postmaster/postmaster.c:4557 postmaster/postmaster.c:5560 -#: replication/logical/origin.c:603 replication/slot.c:1804 -#: storage/file/copydir.c:157 storage/smgr/md.c:232 utils/time/snapmgr.c:1263 +#: 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" msgstr "не удалось создать файл \"%s\": %m" -#: access/heap/rewriteheap.c:1138 +#: access/heap/rewriteheap.c:1104 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "не удалось обрезать файл \"%s\" до нужного размера (%u): %m" -#: access/heap/rewriteheap.c:1156 access/transam/timeline.c:384 +#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3023 access/transam/xlog.c:3220 -#: access/transam/xlog.c:3952 commands/dbcommands.c:507 -#: postmaster/postmaster.c:4567 postmaster/postmaster.c:4577 +#: 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:1767 -#: replication/slot.c:1839 storage/file/buffile.c:545 -#: storage/file/copydir.c:197 utils/init/miscinit.c:1612 -#: utils/init/miscinit.c:1623 utils/init/miscinit.c:1631 utils/misc/guc.c:4340 -#: utils/misc/guc.c:4371 utils/misc/guc.c:5507 utils/misc/guc.c:5525 -#: utils/time/snapmgr.c:1268 utils/time/snapmgr.c:1275 +#: 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" -#: access/heap/vacuumlazy.c:480 +#: access/heap/vacuumlazy.c:473 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "агрессивная очистка \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:485 +#: access/heap/vacuumlazy.c:478 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "очистка \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:633 +#: access/heap/vacuumlazy.c:626 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "закончена очистка \"%s.%s.%s\": сканирований индекса: %d\n" -#: access/heap/vacuumlazy.c:644 +#: access/heap/vacuumlazy.c:637 #, c-format msgid "" "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": " @@ -1347,7 +1555,7 @@ msgstr "" "автоматическая агрессивная очистка, предотвращающая зацикливание, таблицы " "\"%s.%s.%s\": сканирований индекса: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:639 #, c-format msgid "" "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: " @@ -1356,27 +1564,27 @@ msgstr "" "автоматическая очистка, предотвращающая зацикливание, таблицы \"%s.%s.%s\": " "сканирований индекса: %d\n" -#: access/heap/vacuumlazy.c:651 +#: access/heap/vacuumlazy.c:644 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "" "автоматическая агрессивная очистка таблицы \"%s.%s.%s\": сканирований " "индекса: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:646 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "" "автоматическая очистка таблицы \"%s.%s.%s\": сканирований индекса: %d\n" -#: access/heap/vacuumlazy.c:660 +#: access/heap/vacuumlazy.c:653 #, c-format msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" msgstr "" "страниц удалено: %u, осталось: %u, просканировано: %u (%.2f%% от общего " "числа)\n" -#: access/heap/vacuumlazy.c:667 +#: access/heap/vacuumlazy.c:660 #, c-format msgid "" "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" @@ -1384,7 +1592,7 @@ msgstr "" "версий строк: удалено: %lld, осталось: %lld, «мёртвых», но ещё не подлежащих " "удалению: %lld\n" -#: access/heap/vacuumlazy.c:673 +#: access/heap/vacuumlazy.c:666 #, c-format msgid "" "tuples missed: %lld dead from %u pages not removed due to cleanup lock " @@ -1393,43 +1601,43 @@ msgstr "" "из-за конфликта блокировки очистки пропущено версий строк: %lld, на " "страницах: %u\n" -#: access/heap/vacuumlazy.c:679 +#: access/heap/vacuumlazy.c:672 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" msgstr "" "XID отсечки удаления: %u, на момент завершения операции он имел возраст: %d " "XID\n" -#: access/heap/vacuumlazy.c:686 +#: access/heap/vacuumlazy.c:679 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "" "новое значение relfrozenxid: %u, оно продвинулось вперёд от предыдущего " "значения на %d XID\n" -#: access/heap/vacuumlazy.c:694 +#: access/heap/vacuumlazy.c:687 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "" "новое значение relminmxid: %u, оно продвинулось вперёд от предыдущего " "значения на %d MXID\n" -#: access/heap/vacuumlazy.c:697 +#: access/heap/vacuumlazy.c:690 #, c-format msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" msgstr "" "замораживание: на страницах таблицы (%u, %.2f%% от общего числа) заморожено " "кортежей: %lld\n" -#: access/heap/vacuumlazy.c:705 +#: access/heap/vacuumlazy.c:698 msgid "index scan not needed: " msgstr "сканирование индекса не требуется: " -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:700 msgid "index scan needed: " msgstr "сканирование индекса требуется: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:702 #, c-format msgid "" "%u pages from table (%.2f%% of total) had %lld dead item identifiers " @@ -1438,22 +1646,22 @@ msgstr "" "на страницах таблицы (%u, %.2f%% от общего числа) удалено мёртвых " "идентификаторов элементов: %lld\n" -#: access/heap/vacuumlazy.c:714 +#: access/heap/vacuumlazy.c:707 msgid "index scan bypassed: " msgstr "сканирование индекса пропущено: " -#: access/heap/vacuumlazy.c:716 +#: access/heap/vacuumlazy.c:709 msgid "index scan bypassed by failsafe: " msgstr "сканирование индекса пропущено из-за защиты: " -#: access/heap/vacuumlazy.c:718 +#: access/heap/vacuumlazy.c:711 #, c-format msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "" "на страницах таблицы (%u, %.2f%% от общего числа) находится мёртвых " "идентификаторов элементов: %lld\n" -#: access/heap/vacuumlazy.c:733 +#: access/heap/vacuumlazy.c:726 #, c-format msgid "" "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u " @@ -1462,43 +1670,43 @@ msgstr "" "индекс \"%s\": всего страниц: %u, сейчас удалено: %u, удалено на данный " "момент: %u, свободно: %u\n" -#: access/heap/vacuumlazy.c:745 commands/analyze.c:796 +#: access/heap/vacuumlazy.c:738 commands/analyze.c:794 #, c-format msgid "I/O timings: read: %.3f ms, write: %.3f ms\n" msgstr "время ввода/вывода: чтение: %.3f мс, запись: %.3f мс\n" -#: access/heap/vacuumlazy.c:755 commands/analyze.c:799 +#: 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:758 commands/analyze.c:801 +#: 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" -#: access/heap/vacuumlazy.c:763 +#: access/heap/vacuumlazy.c:756 #, c-format msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "" "использование WAL: записей: %lld, полных образов страниц: %lld, байт: %llu\n" -#: access/heap/vacuumlazy.c:767 commands/analyze.c:805 +#: access/heap/vacuumlazy.c:760 commands/analyze.c:803 #, c-format msgid "system usage: %s" msgstr "нагрузка системы: %s" -#: access/heap/vacuumlazy.c:2476 +#: 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:2636 +#: access/heap/vacuumlazy.c:2324 #, c-format msgid "" "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after " @@ -1507,12 +1715,12 @@ msgstr "" "несущественная операция обслуживания таблицы \"%s.%s.%s\" пропускается в " "качестве меры защиты после %d сканирований индекса" -#: access/heap/vacuumlazy.c:2639 +#: 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:2640 +#: access/heap/vacuumlazy.c:2328 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or " @@ -1525,23 +1733,23 @@ msgstr "" "Также можно рассмотреть другие способы обеспечения производительности " "VACUUM, соответствующей скорости выделения идентификаторов транзакций." -#: access/heap/vacuumlazy.c:2885 +#: access/heap/vacuumlazy.c:2590 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": остановка усечения из-за конфликтующего запроса блокировки" -#: access/heap/vacuumlazy.c:2955 +#: access/heap/vacuumlazy.c:2660 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "таблица \"%s\": усечение (было страниц: %u, стало: %u)" -#: access/heap/vacuumlazy.c:3017 +#: access/heap/vacuumlazy.c:2722 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "" "таблица \"%s\": приостановка усечения из-за конфликтующего запроса блокировки" -#: access/heap/vacuumlazy.c:3177 +#: access/heap/vacuumlazy.c:2841 #, c-format msgid "" "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary " @@ -1550,47 +1758,47 @@ msgstr "" "отключение параллельного режима очистки \"%s\" --- создавать временные " "таблицы в параллельном режиме нельзя" -#: access/heap/vacuumlazy.c:3393 +#: access/heap/vacuumlazy.c:3108 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "при сканировании блока %u (смещение %u) отношения \"%s.%s\"" -#: access/heap/vacuumlazy.c:3396 +#: access/heap/vacuumlazy.c:3111 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "при сканировании блока %u отношения \"%s.%s\"" -#: access/heap/vacuumlazy.c:3400 +#: access/heap/vacuumlazy.c:3115 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "при сканировании отношения \"%s.%s\"" -#: access/heap/vacuumlazy.c:3408 +#: 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:3411 +#: access/heap/vacuumlazy.c:3126 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "при очистке блока %u отношения \"%s.%s\"" -#: access/heap/vacuumlazy.c:3415 +#: access/heap/vacuumlazy.c:3130 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "при очистке отношения \"%s.%s\"" -#: access/heap/vacuumlazy.c:3420 commands/vacuumparallel.c:1074 +#: 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:3425 commands/vacuumparallel.c:1080 +#: 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:3431 +#: access/heap/vacuumlazy.c:3146 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "при усечении отношения \"%s.%s\" до %u блок." @@ -1605,24 +1813,24 @@ msgstr "метод доступа \"%s\" имеет не тип %s" msgid "index access method \"%s\" does not have a handler" msgstr "для метода доступа индекса \"%s\" не задан обработчик" -#: access/index/genam.c:490 +#: access/index/genam.c:489 #, c-format msgid "transaction aborted during system catalog scan" msgstr "транзакция прервана во время сканирования системного каталога" -#: access/index/genam.c:658 access/index/indexam.c:87 +#: 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:208 catalog/objectaddress.c:1394 -#: commands/indexcmds.c:2843 commands/tablecmds.c:272 commands/tablecmds.c:296 -#: commands/tablecmds.c:17222 commands/tablecmds.c:19000 +#: 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\" - это не индекс" -#: access/index/indexam.c:1021 +#: access/index/indexam.c:1028 #, c-format msgid "operator class %s has no options" msgstr "у класса операторов %s нет параметров" @@ -1643,7 +1851,7 @@ msgid "This may be because of a non-immutable index expression." msgstr "Возможно, это вызвано переменной природой индексного выражения." #: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 -#: parser/parse_utilcmd.c:2326 +#: parser/parse_utilcmd.c:2323 #, c-format msgid "index \"%s\" is not a btree" msgstr "индекс \"%s\" не является b-деревом" @@ -1657,12 +1865,12 @@ msgstr "" "несовпадение версии в индексе \"%s\": версия файла: %d, версия кода: %d, " "минимальная поддерживаемая версия: %d" -#: access/nbtree/nbtpage.c:1866 +#: access/nbtree/nbtpage.c:1861 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "индекс \"%s\" содержит полумёртвую внутреннюю страницу" -#: access/nbtree/nbtpage.c:1868 +#: access/nbtree/nbtpage.c:1863 #, c-format msgid "" "This can be caused by an interrupted VACUUM in version 9.3 or older, before " @@ -1671,7 +1879,7 @@ msgstr "" "Причиной тому могло быть прерывание операции VACUUM в версии 9.3 или старее, " "до обновления. Этот индекс нужно перестроить (REINDEX)." -#: access/nbtree/nbtutils.c:2677 +#: access/nbtree/nbtutils.c:5108 #, c-format msgid "" "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" @@ -1679,12 +1887,12 @@ msgstr "" "размер строки индекса (%zu) больше предельного для btree версии %u размера " "(%zu) (индекс \"%s\")" -#: access/nbtree/nbtutils.c:2683 +#: 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:2687 +#: access/nbtree/nbtutils.c:5118 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1705,7 +1913,13 @@ msgstr "" "в семействе операторов \"%s\" метода доступа %s нет опорной функции для " "типов %s и %s" -#: access/spgist/spgutils.c:243 +#: access/sequence/sequence.c:75 access/table/table.c:145 +#: optimizer/util/plancat.c:144 +#, c-format +msgid "cannot open relation \"%s\"" +msgstr "открыть отношение \"%s\" нельзя" + +#: access/spgist/spgutils.c:245 #, c-format msgid "" "compress method must be defined when leaf type is different from input type" @@ -1713,7 +1927,7 @@ msgstr "" "метод сжатия должен быть определён, когда тип листьев отличается от входного " "типа" -#: access/spgist/spgutils.c:1015 +#: access/spgist/spgutils.c:1028 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "внутренний размер кортежа SP-GiST (%zu) превышает максимум (%zu)" @@ -1734,75 +1948,71 @@ msgstr "" "в семействе операторов \"%s\" метода доступа %s нет опорной функции %d для " "типа %s" -#: access/table/table.c:145 optimizer/util/plancat.c:145 -#, c-format -msgid "cannot open relation \"%s\"" -msgstr "открыть отношение \"%s\" нельзя" - -#: access/table/tableam.c:265 +#: access/table/tableam.c:255 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "идентификатор кортежа (%u, %u) недопустим для отношения \"%s\"" -#: access/table/tableamapi.c:116 +#: access/table/tableamapi.c:109 #, c-format -msgid "%s cannot be empty." -msgstr "Значение %s не может быть пустым." +msgid "\"%s\" cannot be empty." +msgstr "Значение \"%s\" не может быть пустым." # well-spelled: симв -#: access/table/tableamapi.c:123 access/transam/xlogrecovery.c:4808 +#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4859 #, c-format -msgid "%s is too long (maximum %d characters)." -msgstr "Длина %s превышает предел (%d симв.)." +msgid "\"%s\" is too long (maximum %d characters)." +msgstr "Длина \"%s\" превышает предел (%d симв.)." -#: access/table/tableamapi.c:146 +#: access/table/tableamapi.c:139 #, c-format msgid "table access method \"%s\" does not exist" msgstr "табличный метод доступа \"%s\" не существует" -#: access/table/tableamapi.c:151 +#: access/table/tableamapi.c:144 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "Табличный метод доступа \"%s\" не существует." -#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:152 +#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:151 #, c-format msgid "sample percentage must be between 0 and 100" msgstr "процент выборки должен задаваться числом от 0 до 100" -#: access/transam/commit_ts.c:279 +#: access/transam/commit_ts.c:287 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "не удалось получить метку времени фиксации транзакции %u" -#: access/transam/commit_ts.c:377 +#: access/transam/commit_ts.c:385 #, c-format msgid "could not get commit timestamp data" msgstr "не удалось получить отметку времени фиксации" -#: access/transam/commit_ts.c:379 +#: access/transam/commit_ts.c:387 #, c-format msgid "" "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "" "Убедитесь, что в конфигурации ведущего сервера установлен параметр \"%s\"." -#: access/transam/commit_ts.c:381 +#: access/transam/commit_ts.c:389 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Убедитесь, что в конфигурации установлен параметр \"%s\"." -#: access/transam/multixact.c:1023 +#: access/transam/multixact.c:1091 #, c-format msgid "" -"database is not accepting commands that generate new MultiXactIds to avoid " +"database is not accepting commands that assign new MultiXactIds to avoid " "wraparound data loss in database \"%s\"" msgstr "" -"база данных не принимает команды, создающие новые MultiXactId, во избежание " -"потери данных из-за зацикливания в базе данных \"%s\"" +"база данных не принимает команды, назначающие новые MultiXactId, во " +"избежание потери данных из-за зацикливания в базе данных \"%s\"" -#: access/transam/multixact.c:1025 access/transam/multixact.c:1032 -#: access/transam/multixact.c:1056 access/transam/multixact.c:1065 +#: 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" @@ -1813,16 +2023,16 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:1030 +#: access/transam/multixact.c:1098 #, c-format msgid "" -"database is not accepting commands that generate new MultiXactIds to avoid " +"database is not accepting commands that assign new MultiXactIds to avoid " "wraparound data loss in database with OID %u" msgstr "" -"база данных не принимает команды, создающие новые MultiXactId, во избежание " -"потери данных из-за зацикливания в базе данных с OID %u" +"база данных не принимает команды, назначающие новые MultiXactId, во " +"избежание потери данных из-за зацикливания в базе данных с OID %u" -#: access/transam/multixact.c:1051 access/transam/multixact.c:2333 +#: 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 "" @@ -1837,7 +2047,7 @@ msgstr[2] "" "база данных \"%s\" должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1060 access/transam/multixact.c:2342 +#: 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" @@ -1853,12 +2063,12 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1189 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "слишком много членов мультитранзакции" -#: access/transam/multixact.c:1122 +#: access/transam/multixact.c:1190 #, c-format msgid "" "This command would create a multixact with %u members, but the remaining " @@ -1876,17 +2086,17 @@ msgstr[2] "" "Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " "оставшегося места хватает только для %u." -#: access/transam/multixact.c:1127 +#: 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." +"\"vacuum_multixact_freeze_min_age\" and " +"\"vacuum_multixact_freeze_table_age\" settings." msgstr "" "Выполните очистку (VACUUM) всей базы данных с OID %u, уменьшив значения " -"vacuum_multixact_freeze_min_age и vacuum_multixact_freeze_table_age." +"\"vacuum_multixact_freeze_min_age\" и \"vacuum_multixact_freeze_table_age\"." -#: access/transam/multixact.c:1158 +#: access/transam/multixact.c:1226 #, c-format msgid "" "database with OID %u must be vacuumed before %d more multixact member is used" @@ -1903,41 +2113,40 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, пока не использованы оставшиеся " "члены мультитранзакций (%d)" -#: access/transam/multixact.c:1163 +#: 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." +"\"vacuum_multixact_freeze_min_age\" and " +"\"vacuum_multixact_freeze_table_age\" settings." msgstr "" "Выполните очистку (VACUUM) всей этой базы данных, уменьшив значения " -"vacuum_multixact_freeze_min_age и vacuum_multixact_freeze_table_age." +"\"vacuum_multixact_freeze_min_age\" и \"vacuum_multixact_freeze_table_age\"." -#: access/transam/multixact.c:1302 +#: access/transam/multixact.c:1371 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u прекратил существование: видимо, произошло зацикливание" -#: access/transam/multixact.c:1308 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ещё не был создан: видимо, произошло зацикливание" -#: access/transam/multixact.c:2338 access/transam/multixact.c:2347 -#: access/transam/varsup.c:151 access/transam/varsup.c:158 -#: access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:2479 access/transam/multixact.c:2488 #, c-format msgid "" -"To avoid a database shutdown, execute a database-wide VACUUM in that " -"database.\n" +"To avoid MultiXactId 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 "" -"Во избежание отключения базы данных выполните очистку (VACUUM) всей базы.\n" +"Во избежание сбоев при назначении MultiXactId, выполните очистку (VACUUM) " +"всей базы.\n" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2767 #, c-format msgid "" "MultiXact member wraparound protections are disabled because oldest " @@ -1946,12 +2155,12 @@ msgstr "" "Защита от зацикливания членов мультитранзакций отключена, так как старейшая " "отмеченная мультитранзакция %u не найдена на диске" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2789 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Защита от зацикливания мультитранзакций сейчас включена" -#: access/transam/multixact.c:3027 +#: access/transam/multixact.c:3180 #, c-format msgid "" "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" @@ -1959,7 +2168,7 @@ msgstr "" "старейшая мультитранзакция %u не найдена, новейшая мультитранзакция: %u, " "усечение пропускается" -#: access/transam/multixact.c:3045 +#: access/transam/multixact.c:3198 #, c-format msgid "" "cannot truncate up to MultiXact %u because it does not exist on disk, " @@ -1968,167 +2177,172 @@ msgstr "" "выполнить усечение до мультитранзакции %u нельзя ввиду её отсутствия на " "диске, усечение пропускается" -#: access/transam/multixact.c:3359 +#: access/transam/multixact.c:3517 #, c-format msgid "invalid MultiXactId: %u" msgstr "неверный MultiXactId: %u" -#: access/transam/parallel.c:729 access/transam/parallel.c:848 +#: access/transam/parallel.c:748 access/transam/parallel.c:867 #, c-format msgid "parallel worker failed to initialize" msgstr "не удалось инициализировать параллельный исполнитель" -#: access/transam/parallel.c:730 access/transam/parallel.c:849 +#: 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:910 +#: access/transam/parallel.c:929 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster завершился в процессе параллельной транзакции" -#: access/transam/parallel.c:1097 +#: access/transam/parallel.c:1116 #, c-format msgid "lost connection to parallel worker" msgstr "потеряно подключение к параллельному исполнителю" -#: access/transam/parallel.c:1163 access/transam/parallel.c:1165 +#: access/transam/parallel.c:1172 access/transam/parallel.c:1174 msgid "parallel worker" msgstr "параллельный исполнитель" -#: access/transam/parallel.c:1319 replication/logical/applyparallelworker.c:893 +#: 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:1324 replication/logical/applyparallelworker.c:899 +#: access/transam/parallel.c:1349 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неверное магическое число в динамическом сегменте разделяемой памяти" -#: access/transam/rmgr.c:84 +#: access/transam/rmgr.c:93 #, c-format msgid "resource manager with ID %d not registered" msgstr "менеджер ресурсов с ID %d не зарегистрирован" -#: access/transam/rmgr.c:85 +#: access/transam/rmgr.c:94 #, c-format msgid "" "Include the extension module that implements this resource manager in " -"shared_preload_libraries." +"\"shared_preload_libraries\"." msgstr "" -"Включите в shared_preload_libraries модуль расширения, в котором реализован " -"данный менеджер ресурсов." +"Включите в \"shared_preload_libraries\" модуль расширения, в котором " +"реализован данный менеджер ресурсов." -#: access/transam/rmgr.c:101 +#: access/transam/rmgr.c:110 #, c-format msgid "custom resource manager name is invalid" msgstr "неверное имя пользовательского менеджера ресурсов" -#: access/transam/rmgr.c:102 +#: access/transam/rmgr.c:111 #, c-format msgid "Provide a non-empty name for the custom resource manager." msgstr "Задайте непустое имя для менеджера ресурсов." -#: access/transam/rmgr.c:105 +#: access/transam/rmgr.c:114 #, c-format msgid "custom resource manager ID %d is out of range" msgstr "идентификатор пользовательского менеджера ресурсов %d вне диапазона" -#: access/transam/rmgr.c:106 +#: access/transam/rmgr.c:115 #, c-format msgid "Provide a custom resource manager ID between %d and %d." msgstr "Задайте идентификатор менеджера ресурсов от %d до %d." -#: access/transam/rmgr.c:111 access/transam/rmgr.c:116 -#: access/transam/rmgr.c:128 +#: access/transam/rmgr.c:120 access/transam/rmgr.c:125 +#: access/transam/rmgr.c:137 #, c-format msgid "failed to register custom resource manager \"%s\" with ID %d" msgstr "" "не удалось зарегистрировать пользовательский менеджер ресурсов \"%s\" с ID %d" -#: access/transam/rmgr.c:112 +#: access/transam/rmgr.c:121 #, c-format msgid "" "Custom resource manager must be registered while initializing modules in " -"shared_preload_libraries." +"\"shared_preload_libraries\"." msgstr "" "Пользовательский менеджер ресурсов должен быть зарегистрирован при " -"инициализации модулей в shared_preload_libraries." +"инициализации модулей в \"shared_preload_libraries\"." -#: access/transam/rmgr.c:117 +#: access/transam/rmgr.c:126 #, c-format msgid "Custom resource manager \"%s\" already registered with the same ID." msgstr "" "Пользовательский менеджер ресурсов \"%s\" уже зарегистрирован с тем же ID." -#: access/transam/rmgr.c:129 +#: access/transam/rmgr.c:138 #, c-format msgid "Existing resource manager with ID %d has the same name." msgstr "Существующий менеджер ресурсов с ID %d имеет то же имя." -#: access/transam/rmgr.c:135 +#: access/transam/rmgr.c:144 #, c-format msgid "registered custom resource manager \"%s\" with ID %d" msgstr "зарегистрирован пользовательский менеджер ресурсов \"%s\" с ID %d" -#: access/transam/slru.c:714 +#: access/transam/slru.c:361 +#, c-format +msgid "\"%s\" must be a multiple of %d" +msgstr "значение \"%s\" должно быть кратно %d" + +#: access/transam/slru.c:830 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "файл \"%s\" не существует, считается нулевым" -#: access/transam/slru.c:946 access/transam/slru.c:952 -#: access/transam/slru.c:960 access/transam/slru.c:965 -#: access/transam/slru.c:972 access/transam/slru.c:977 -#: access/transam/slru.c:984 access/transam/slru.c:991 +#: 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:947 +#: access/transam/slru.c:1060 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Не удалось открыть файл \"%s\": %m." -#: access/transam/slru.c:953 +#: 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:961 +#: 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:966 +#: 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:973 +#: 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:978 +#: 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:985 +#: access/transam/slru.c:1098 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Не удалось синхронизировать с ФС файл \"%s\": %m." -#: access/transam/slru.c:992 +#: access/transam/slru.c:1105 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Не удалось закрыть файл \"%s\": %m." -#: access/transam/slru.c:1253 +#: access/transam/slru.c:1431 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "не удалось очистить каталог \"%s\": видимо, произошло зацикливание" @@ -2174,59 +2388,60 @@ msgstr "" msgid "requested timeline %u is not in this server's history" msgstr "в истории сервера нет запрошенной линии времени %u" -#: access/transam/twophase.c:386 +#: access/transam/twophase.c:368 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "идентификатор транзакции \"%s\" слишком длинный" -#: access/transam/twophase.c:393 +#: access/transam/twophase.c:375 #, c-format msgid "prepared transactions are disabled" msgstr "подготовленные транзакции отключены" -#: access/transam/twophase.c:394 +#: access/transam/twophase.c:376 #, c-format -msgid "Set max_prepared_transactions to a nonzero value." -msgstr "Установите ненулевое значение параметра max_prepared_transactions." +msgid "Set \"max_prepared_transactions\" to a nonzero value." +msgstr "Установите ненулевое значение параметра \"max_prepared_transactions\"." -#: access/transam/twophase.c:413 +#: access/transam/twophase.c:395 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "идентификатор транзакции \"%s\" уже используется" -#: access/transam/twophase.c:422 access/transam/twophase.c:2517 +#: access/transam/twophase.c:404 access/transam/twophase.c:2531 #, c-format msgid "maximum number of prepared transactions reached" msgstr "достигнут предел числа подготовленных транзакций" -#: access/transam/twophase.c:423 access/transam/twophase.c:2518 +#: access/transam/twophase.c:405 access/transam/twophase.c:2532 #, c-format -msgid "Increase max_prepared_transactions (currently %d)." -msgstr "Увеличьте параметр max_prepared_transactions (текущее значение %d)." +msgid "Increase \"max_prepared_transactions\" (currently %d)." +msgstr "" +"Увеличьте параметр \"max_prepared_transactions\" (текущее значение %d)." -#: access/transam/twophase.c:599 +#: access/transam/twophase.c:580 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "подготовленная транзакция с идентификатором \"%s\" занята" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:586 #, c-format msgid "permission denied to finish prepared transaction" -msgstr "нет доступа для завершения подготовленной транзакции" +msgstr "нет прав для завершения подготовленной транзакции" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:587 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "" "Это разрешено только суперпользователю и пользователю, подготовившему " "транзакцию." -#: access/transam/twophase.c:617 +#: access/transam/twophase.c:598 #, c-format msgid "prepared transaction belongs to another database" msgstr "подготовленная транзакция относится к другой базе данных" -#: access/transam/twophase.c:618 +#: access/transam/twophase.c:599 #, c-format msgid "" "Connect to the database where the transaction was prepared to finish it." @@ -2235,17 +2450,17 @@ msgstr "" "подготовлена." # [SM]: TO REVIEW -#: access/transam/twophase.c:633 +#: access/transam/twophase.c:614 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "подготовленной транзакции с идентификатором \"%s\" нет" -#: access/transam/twophase.c:1168 +#: access/transam/twophase.c:1174 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "превышен предельный размер файла состояния 2PC" -#: access/transam/twophase.c:1323 +#: access/transam/twophase.c:1329 #, c-format msgid "incorrect size of file \"%s\": %lld byte" msgid_plural "incorrect size of file \"%s\": %lld bytes" @@ -2253,62 +2468,63 @@ msgstr[0] "некорректный размер файла \"%s\": %lld Б" msgstr[1] "некорректный размер файла \"%s\": %lld Б" msgstr[2] "некорректный размер файла \"%s\": %lld Б" -#: access/transam/twophase.c:1332 +#: access/transam/twophase.c:1338 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "некорректное выравнивание смещения CRC для файла \"%s\"" -#: access/transam/twophase.c:1350 +#: 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:1365 +#: access/transam/twophase.c:1371 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "в файле \"%s\" содержится неверная сигнатура" -#: access/transam/twophase.c:1371 +#: access/transam/twophase.c:1377 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "в файле \"%s\" содержится неверный размер" -#: access/transam/twophase.c:1383 +#: 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:1413 access/transam/xlogrecovery.c:590 -#: replication/logical/logical.c:209 replication/walsender.c:687 +#: 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 "Не удалось разместить обработчик журнала транзакций." -#: access/transam/twophase.c:1423 +#: access/transam/twophase.c:1429 #, 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:1428 +#: access/transam/twophase.c:1434 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%X" -#: access/transam/twophase.c:1436 +#: 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:1732 +#: access/transam/twophase.c:1745 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "пересоздать файл \"%s\" не удалось: %m" -#: access/transam/twophase.c:1859 +#: access/transam/twophase.c:1872 #, c-format msgid "" "%u two-phase state file was written for a long-running prepared transaction" @@ -2321,47 +2537,47 @@ msgstr[1] "" msgstr[2] "" "для длительных подготовленных транзакций записано файлов состояния 2PC: %u" -#: access/transam/twophase.c:2093 +#: access/transam/twophase.c:2107 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "восстановление подготовленной транзакции %u из разделяемой памяти" -#: access/transam/twophase.c:2186 +#: access/transam/twophase.c:2200 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "удаление устаревшего файла состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2207 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "удаление из памяти устаревшего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2206 +#: access/transam/twophase.c:2220 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "удаление файла будущего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2213 +#: access/transam/twophase.c:2227 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "удаление из памяти будущего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2238 +#: access/transam/twophase.c:2252 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "испорчен файл состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2243 +#: access/transam/twophase.c:2257 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "испорчено состояние 2PC в памяти для транзакции %u" -#: access/transam/twophase.c:2500 +#: access/transam/twophase.c:2514 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "не удалось восстановить файл состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2502 +#: access/transam/twophase.c:2516 #, c-format msgid "" "Two-phase state file has been found in WAL record %X/%X, but this " @@ -2370,172 +2586,194 @@ msgstr "" "Для WAL-записи %X/%X найден файл состояния двухфазной фиксации, но эта " "транзакция уже была восстановлена с диска." -#: access/transam/twophase.c:2510 jit/jit.c:205 utils/fmgr/dfmgr.c:209 -#: utils/fmgr/dfmgr.c:415 +#: 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" +msgstr "ошибка при обращении к файлу \"%s\": %m" -#: access/transam/varsup.c:129 +#: access/transam/varsup.c:156 #, c-format msgid "" -"database is not accepting commands to avoid wraparound data loss in database " +"database is not accepting commands that assign new transaction IDs to avoid " +"wraparound data loss in database \"%s\"" +msgstr "" +"база данных не принимает команды, назначающие новые идентификаторы " +"транзакций, во избежание потери данных из-за зацикливания в базе данных " "\"%s\"" + +#: access/transam/varsup.c:163 +#, c-format +msgid "" +"database is not accepting commands that assign new transaction IDs to avoid " +"wraparound data loss in database with OID %u" +msgstr "" +"база данных не принимает команды, назначающие новые идентификаторы " +"транзакций, во избежание потери данных из-за зацикливания в базе данных с " +"OID %u" + +#: access/transam/varsup.c:175 access/transam/varsup.c:490 +#, c-format +msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "" -"база данных не принимает команды во избежание потери данных из-за " -"зацикливания транзакций в базе данных \"%s\"" +"база данных \"%s\" должна быть очищена (предельное число транзакций: %u)" -#: access/transam/varsup.c:131 access/transam/varsup.c:138 +#: access/transam/varsup.c:178 #, c-format msgid "" -"Stop the postmaster and vacuum that database in single-user mode.\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 "" -"Остановите управляющий процесс (postmaster) и выполните очистку (VACUUM) " -"базы данных в монопольном режиме.\n" +"Во избежание сбоев при назначении идентификаторов транзакций, выполните " +"очистку (VACUUM) всей базы.\n" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/varsup.c:136 +#: access/transam/varsup.c:182 access/transam/varsup.c:497 #, c-format -msgid "" -"database is not accepting commands to avoid wraparound data loss in database " -"with OID %u" +msgid "database with OID %u must be vacuumed within %u transactions" msgstr "" -"база данных не принимает команды во избежание потери данных из-за " -"зацикливания транзакций в базе данных с OID %u" +"база данных с OID %u должна быть очищена (предельное число транзакций: %u)" -#: access/transam/varsup.c:148 access/transam/varsup.c:463 +#: access/transam/varsup.c:185 access/transam/varsup.c:493 +#: access/transam/varsup.c:500 #, c-format -msgid "database \"%s\" must be vacuumed within %u transactions" +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 "" -"база данных \"%s\" должна быть очищена (предельное число транзакций: %u)" +"Во избежание сбоев при назначении XID, выполните очистку (VACUUM) всей " +"базы.\n" +"Возможно, вам также придётся зафиксировать или откатить старые " +"подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/varsup.c:155 access/transam/varsup.c:470 +#: access/transam/xact.c:649 #, c-format -msgid "database with OID %u must be vacuumed within %u transactions" +msgid "cannot assign transaction IDs during a parallel operation" msgstr "" -"база данных с OID %u должна быть очищена (предельное число транзакций: %u)" +"идентификаторы транзакций не могут назначаться во время параллельных операций" + +#: access/transam/xact.c:840 +#, c-format +msgid "cannot modify data in a parallel worker" +msgstr "модифицировать данные в параллельном исполнителе нельзя" -#: access/transam/xact.c:1102 +#: access/transam/xact.c:1115 +#, c-format +msgid "cannot start commands during a parallel operation" +msgstr "начинать команды во время параллельной операции нельзя" + +#: access/transam/xact.c:1123 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "в одной транзакции не может быть больше 2^32-2 команд" -#: access/transam/xact.c:1643 +#: access/transam/xact.c:1664 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "превышен предел числа зафиксированных подтранзакций (%d)" -#: access/transam/xact.c:2513 +#: access/transam/xact.c:2561 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "" "нельзя выполнить PREPARE для транзакции, оперирующей с временными объектами" -#: access/transam/xact.c:2523 +#: access/transam/xact.c:2571 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "нельзя выполнить PREPARE для транзакции, снимки которой экспортированы" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3490 +#: access/transam/xact.c:3593 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s не может выполняться внутри блока транзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3500 +#: access/transam/xact.c:3603 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s не может выполняться внутри подтранзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3510 +#: access/transam/xact.c:3613 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s нельзя выполнять в конвейере" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3520 +#: access/transam/xact.c:3623 #, c-format msgid "%s cannot be executed from a function" msgstr "%s нельзя выполнять внутри функции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3591 access/transam/xact.c:3916 -#: access/transam/xact.c:3995 access/transam/xact.c:4118 -#: access/transam/xact.c:4269 access/transam/xact.c:4338 -#: access/transam/xact.c:4449 +#: access/transam/xact.c:3694 access/transam/xact.c:4019 +#: access/transam/xact.c:4098 access/transam/xact.c:4221 +#: access/transam/xact.c:4372 access/transam/xact.c:4441 +#: access/transam/xact.c:4552 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s может выполняться только внутри блоков транзакций" -#: access/transam/xact.c:3802 +#: access/transam/xact.c:3905 #, c-format msgid "there is already a transaction in progress" msgstr "транзакция уже выполняется" -#: access/transam/xact.c:3921 access/transam/xact.c:4000 -#: access/transam/xact.c:4123 +#: access/transam/xact.c:4024 access/transam/xact.c:4103 +#: access/transam/xact.c:4226 #, c-format msgid "there is no transaction in progress" msgstr "нет незавершённой транзакции" -#: access/transam/xact.c:4011 +#: access/transam/xact.c:4114 #, c-format msgid "cannot commit during a parallel operation" msgstr "фиксировать транзакции во время параллельных операций нельзя" -#: access/transam/xact.c:4134 +#: access/transam/xact.c:4237 #, c-format msgid "cannot abort during a parallel operation" msgstr "прерывание во время параллельных операций невозможно" -#: access/transam/xact.c:4233 +#: access/transam/xact.c:4336 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "определять точки сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4320 +#: access/transam/xact.c:4423 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "высвобождать точки сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4330 access/transam/xact.c:4381 -#: access/transam/xact.c:4441 access/transam/xact.c:4490 +#: access/transam/xact.c:4433 access/transam/xact.c:4484 +#: access/transam/xact.c:4544 access/transam/xact.c:4593 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "точка сохранения \"%s\" не существует" -#: access/transam/xact.c:4387 access/transam/xact.c:4496 +#: access/transam/xact.c:4490 access/transam/xact.c:4599 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "" "точка сохранения \"%s\" на текущем уровне точек сохранения не существует" -#: access/transam/xact.c:4429 +#: access/transam/xact.c:4532 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "откатиться к точке сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4557 -#, c-format -msgid "cannot start subtransactions during a parallel operation" -msgstr "запускать подтранзакции во время параллельных операций нельзя" - -#: access/transam/xact.c:4625 -#, c-format -msgid "cannot commit subtransactions during a parallel operation" -msgstr "фиксировать подтранзакции во время параллельных операций нельзя" - -#: access/transam/xact.c:5271 +#: access/transam/xact.c:5376 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "в одной транзакции не может быть больше 2^32-1 подтранзакций" -#: access/transam/xlog.c:1468 +#: access/transam/xlog.c:1542 #, c-format msgid "" "request to flush past end of generated WAL; request %X/%X, current position " @@ -2544,55 +2782,78 @@ msgstr "" "запрос на сброс данных за концом сгенерированного WAL; запрошена позиция %X/" "%X, текущая позиция %X/%X" -#: access/transam/xlog.c:2230 +#: access/transam/xlog.c:1769 +#, c-format +msgid "" +"cannot read past end of generated WAL: requested %X/%X, current position %X/" +"%X" +msgstr "" +"чтение за концом сгенерированного WAL невозможно: запрошена позиция %X/%X, " +"текущая позиция %X/%X" + +#: 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 должен задаваться степенью 2 в интервале от 1 МБ до 1 ГБ." + +#: 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:2477 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "не удалось записать в файл журнала %s (смещение: %u, длина: %zu): %m" +msgid "could not write to log file \"%s\" at offset %u, length %zu: %m" +msgstr "" +"не удалось записать в файл журнала \"%s\" (смещение: %u, длина: %zu): %m" -#: access/transam/xlog.c:3457 access/transam/xlogutils.c:833 -#: replication/walsender.c:2725 +#: 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:3741 +#: access/transam/xlog.c:4061 #, c-format msgid "could not rename file \"%s\": %m" msgstr "не удалось переименовать файл \"%s\": %m" -#: access/transam/xlog.c:3783 access/transam/xlog.c:3793 +#: 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:3799 +#: 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:3802 commands/dbcommands.c:3172 +#: 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:3869 +#: access/transam/xlog.c:4212 #, c-format msgid "could not generate secret authorization token" msgstr "не удалось сгенерировать случайное число для аутентификации" -#: access/transam/xlog.c:4019 access/transam/xlog.c:4028 -#: access/transam/xlog.c:4052 access/transam/xlog.c:4059 -#: access/transam/xlog.c:4066 access/transam/xlog.c:4071 -#: access/transam/xlog.c:4078 access/transam/xlog.c:4085 -#: access/transam/xlog.c:4092 access/transam/xlog.c:4099 -#: access/transam/xlog.c:4106 access/transam/xlog.c:4113 -#: access/transam/xlog.c:4122 access/transam/xlog.c:4129 -#: utils/init/miscinit.c:1769 +#: 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:4020 +#: access/transam/xlog.c:4364 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -2601,7 +2862,7 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d (0x%08x), но " "сервер скомпилирован с PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4024 +#: access/transam/xlog.c:4368 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -2610,7 +2871,7 @@ msgstr "" "Возможно, проблема вызвана разным порядком байт. Кажется, вам надо выполнить " "initdb." -#: access/transam/xlog.c:4029 +#: access/transam/xlog.c:4374 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -2619,18 +2880,18 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d, но сервер " "скомпилирован с PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4032 access/transam/xlog.c:4056 -#: access/transam/xlog.c:4063 access/transam/xlog.c:4068 +#: 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:4043 +#: access/transam/xlog.c:4389 #, c-format msgid "incorrect checksum in control file" msgstr "ошибка контрольной суммы в файле pg_control" -#: access/transam/xlog.c:4053 +#: access/transam/xlog.c:4400 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -2639,7 +2900,7 @@ msgstr "" "Кластер баз данных был инициализирован с CATALOG_VERSION_NO %d, но сервер " "скомпилирован с CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4060 +#: access/transam/xlog.c:4408 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -2648,7 +2909,7 @@ msgstr "" "Кластер баз данных был инициализирован с MAXALIGN %d, но сервер " "скомпилирован с MAXALIGN %d." -#: access/transam/xlog.c:4067 +#: access/transam/xlog.c:4416 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -2657,7 +2918,7 @@ msgstr "" "Кажется, в кластере баз данных и в программе сервера используются разные " "форматы чисел с плавающей точкой." -#: access/transam/xlog.c:4072 +#: access/transam/xlog.c:4422 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -2666,16 +2927,16 @@ msgstr "" "Кластер баз данных был инициализирован с BLCKSZ %d, но сервер скомпилирован " "с BLCKSZ %d." -#: access/transam/xlog.c:4075 access/transam/xlog.c:4082 -#: access/transam/xlog.c:4089 access/transam/xlog.c:4096 -#: access/transam/xlog.c:4103 access/transam/xlog.c:4110 -#: access/transam/xlog.c:4117 access/transam/xlog.c:4125 -#: access/transam/xlog.c:4132 +#: 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:4079 +#: access/transam/xlog.c:4430 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -2684,7 +2945,7 @@ msgstr "" "Кластер баз данных был инициализирован с RELSEG_SIZE %d, но сервер " "скомпилирован с RELSEG_SIZE %d." -#: access/transam/xlog.c:4086 +#: access/transam/xlog.c:4438 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -2693,7 +2954,7 @@ msgstr "" "Кластер баз данных был инициализирован с XLOG_BLCKSZ %d, но сервер " "скомпилирован с XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4093 +#: access/transam/xlog.c:4446 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -2702,7 +2963,7 @@ msgstr "" "Кластер баз данных был инициализирован с NAMEDATALEN %d, но сервер " "скомпилирован с NAMEDATALEN %d." -#: access/transam/xlog.c:4100 +#: access/transam/xlog.c:4454 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -2711,7 +2972,7 @@ msgstr "" "Кластер баз данных был инициализирован с INDEX_MAX_KEYS %d, но сервер " "скомпилирован с INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4107 +#: access/transam/xlog.c:4462 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -2720,7 +2981,7 @@ msgstr "" "Кластер баз данных был инициализирован с TOAST_MAX_CHUNK_SIZE %d, но сервер " "скомпилирован с TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4114 +#: access/transam/xlog.c:4470 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -2729,7 +2990,7 @@ msgstr "" "Кластер баз данных был инициализирован с LOBLKSIZE %d, но сервер " "скомпилирован с LOBLKSIZE %d." -#: access/transam/xlog.c:4123 +#: access/transam/xlog.c:4480 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -2738,7 +2999,7 @@ msgstr "" "Кластер баз данных был инициализирован без USE_FLOAT8_BYVAL, но сервер " "скомпилирован с USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4130 +#: access/transam/xlog.c:4488 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -2747,107 +3008,100 @@ msgstr "" "Кластер баз данных был инициализирован с USE_FLOAT8_BYVAL, но сервер был " "скомпилирован без USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4139 +#: access/transam/xlog.c:4497 #, c-format -msgid "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"control file specifies %d byte" -msgid_plural "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"control file specifies %d bytes" -msgstr[0] "" -"размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " -"ГБ, но в управляющем файле указано значение: %d" -msgstr[1] "" -"размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " -"ГБ, но в управляющем файле указано значение: %d" -msgstr[2] "" -"размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " -"ГБ, но в управляющем файле указано значение: %d" +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 Б)" +msgstr[2] "управляющий файл содержит неверный размер сегмента WAL (%d Б)" -#: access/transam/xlog.c:4151 +#: 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:4155 +#: 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:4310 catalog/namespace.c:4335 -#: commands/tablespace.c:1216 commands/user.c:2530 commands/variable.c:72 -#: utils/error/elog.c:2209 +#: 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:4356 commands/user.c:2546 commands/variable.c:173 -#: utils/error/elog.c:2235 +#: 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:4770 +#: access/transam/xlog.c:5129 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "не удалось записать начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:4778 +#: access/transam/xlog.c:5137 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "не удалось сбросить на диск начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:4784 +#: access/transam/xlog.c:5143 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "не удалось закрыть начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5001 +#: access/transam/xlog.c:5368 #, c-format -msgid "WAL was generated with wal_level=minimal, cannot continue recovering" +msgid "" +"WAL was generated with \"wal_level=minimal\", cannot continue recovering" msgstr "" -"WAL был создан с параметром wal_level=minimal, продолжение восстановления " -"невозможно" +"WAL был создан с параметром \"wal_level=minimal\", продолжение " +"восстановления невозможно" -#: access/transam/xlog.c:5002 +#: access/transam/xlog.c:5369 #, c-format -msgid "This happens if you temporarily set wal_level=minimal on the server." -msgstr "Это происходит, если вы на время устанавливали wal_level=minimal." +msgid "" +"This happens if you temporarily set \"wal_level=minimal\" on the server." +msgstr "Это происходит, если вы на время устанавливали \"wal_level=minimal\"." -#: access/transam/xlog.c:5003 +#: access/transam/xlog.c:5370 #, c-format -msgid "Use a backup taken after setting wal_level to higher than minimal." +msgid "" +"Use a backup taken after setting \"wal_level\" to higher than \"minimal\"." msgstr "" -"Используйте резервную копию, сделанную после переключения wal_level на любой " -"уровень выше minimal." +"Используйте резервную копию, сделанную после переключения \"wal_level\" на " +"любой уровень выше \"minimal\"." -#: access/transam/xlog.c:5067 +#: access/transam/xlog.c:5435 #, c-format msgid "control file contains invalid checkpoint location" msgstr "файл pg_control содержит неправильную позицию контрольной точки" -#: access/transam/xlog.c:5078 +#: access/transam/xlog.c:5446 #, c-format msgid "database system was shut down at %s" msgstr "система БД была выключена: %s" -#: access/transam/xlog.c:5084 +#: access/transam/xlog.c:5452 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система БД была выключена в процессе восстановления: %s" -#: access/transam/xlog.c:5090 +#: access/transam/xlog.c:5458 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "выключение системы БД было прервано; последний момент работы: %s" -#: access/transam/xlog.c:5096 +#: access/transam/xlog.c:5464 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "работа системы БД была прервана во время восстановления: %s" -#: access/transam/xlog.c:5098 +#: access/transam/xlog.c:5466 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -2856,14 +3110,14 @@ msgstr "" "Это скорее всего означает, что некоторые данные повреждены и вам придётся " "восстановить БД из последней резервной копии." -#: access/transam/xlog.c:5104 +#: 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:5106 +#: access/transam/xlog.c:5474 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -2872,22 +3126,22 @@ msgstr "" "Если это происходит постоянно, возможно, какие-то данные были испорчены и " "для восстановления стоит выбрать более раннюю точку." -#: access/transam/xlog.c:5112 +#: access/transam/xlog.c:5480 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "работа системы БД была прервана; последний момент работы: %s" -#: access/transam/xlog.c:5118 +#: access/transam/xlog.c:5487 #, c-format msgid "control file contains invalid database cluster state" msgstr "файл pg_control содержит неверный код состояния кластера" -#: access/transam/xlog.c:5502 +#: access/transam/xlog.c:5875 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL закончился без признака окончания копирования" -#: access/transam/xlog.c:5503 +#: access/transam/xlog.c:5876 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -2896,40 +3150,40 @@ msgstr "" "Все журналы WAL, созданные во время резервного копирования \"на ходу\", " "должны быть в наличии для восстановления." -#: access/transam/xlog.c:5506 +#: access/transam/xlog.c:5880 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL закончился до согласованной точки восстановления" -#: access/transam/xlog.c:5552 +#: access/transam/xlog.c:5926 #, c-format msgid "selected new timeline ID: %u" msgstr "выбранный ID новой линии времени: %u" -#: access/transam/xlog.c:5585 +#: access/transam/xlog.c:5959 #, c-format msgid "archive recovery complete" msgstr "восстановление архива завершено" -#: access/transam/xlog.c:6191 +#: access/transam/xlog.c:6612 #, c-format msgid "shutting down" msgstr "выключение" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6230 +#: 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:6242 +#: 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" # well-spelled: синхр -#: access/transam/xlog.c:6307 +#: access/transam/xlog.c:6728 #, c-format msgid "" "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -2944,7 +3198,7 @@ msgstr "" "lsn=%X/%X, lsn redo=%X/%X" # well-spelled: синхр -#: access/transam/xlog.c:6330 +#: access/transam/xlog.c:6751 #, c-format msgid "" "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -2958,7 +3212,7 @@ msgstr "" "=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB; " "lsn=%X/%X, lsn redo=%X/%X" -#: access/transam/xlog.c:6768 +#: access/transam/xlog.c:7233 #, c-format msgid "" "concurrent write-ahead log activity while database system is shutting down" @@ -2966,111 +3220,119 @@ msgstr "" "во время выключения системы баз данных отмечена активность в журнале " "предзаписи" -#: access/transam/xlog.c:7329 +#: access/transam/xlog.c:7818 #, c-format msgid "recovery restart point at %X/%X" msgstr "точка перезапуска восстановления в позиции %X/%X" -#: access/transam/xlog.c:7331 +#: access/transam/xlog.c:7820 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Последняя завершённая транзакция была выполнена в %s." -#: access/transam/xlog.c:7579 +#: access/transam/xlog.c:8082 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка восстановления \"%s\" создана в позиции %X/%X" -#: access/transam/xlog.c:7786 +#: access/transam/xlog.c:8289 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "" "резервное копирование \"на ходу\" было отменено, продолжить восстановление " "нельзя" -#: access/transam/xlog.c:7843 +#: access/transam/xlog.c:8347 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи точки выключения" -#: access/transam/xlog.c:7901 +#: access/transam/xlog.c:8405 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи точки активности" -#: access/transam/xlog.c:7930 +#: access/transam/xlog.c:8434 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи конец-" "восстановления" -#: access/transam/xlog.c:8197 +#: access/transam/xlog.c:8705 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл сквозной записи %s: %m" -#: access/transam/xlog.c:8202 +#: access/transam/xlog.c:8710 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС данные (fdatasync) файла \"%s\": %m" -#: access/transam/xlog.c:8287 access/transam/xlog.c:8610 +#: 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:8288 access/transam/xlog.c:8611 -#: access/transam/xlogfuncs.c:254 +#: 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\" при запуске сервера." +msgid "" +"\"wal_level\" must be set to \"replica\" or \"logical\" at server start." +msgstr "" +"Параметр \"wal_level\" должен иметь значение \"replica\" или \"logical\" при " +"запуске сервера." -#: access/transam/xlog.c:8293 +#: access/transam/xlog.c:8803 #, c-format msgid "backup label too long (max %d bytes)" msgstr "длина метки резервной копии превышает предел (%d байт)" -#: access/transam/xlog.c:8414 +#: access/transam/xlog.c:8924 #, c-format msgid "" -"WAL generated with full_page_writes=off was replayed since last restartpoint" +"WAL generated with \"full_page_writes=off\" was replayed since last " +"restartpoint" msgstr "" -"После последней точки перезапуска был воспроизведён WAL, созданный в режиме " -"full_page_writes=off." +"после последней точки перезапуска был воспроизведён WAL, созданный в режиме " +"\"full_page_writes=off\"" -#: access/transam/xlog.c:8416 access/transam/xlog.c:8699 +#: 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." +"not be used. Enable \"full_page_writes\" and run CHECKPOINT on the primary, " +"and then try an online backup again." msgstr "" -"Это означает, что резервная копия, сделанная на дежурном сервере, испорчена " -"и использовать её не следует. Включите режим full_page_writes и выполните " +"Это означает, что резервная копия, сделанная на ведомом сервере, испорчена и " +"использовать её не следует. Включите режим \"full_page_writes\" и выполните " "CHECKPOINT на ведущем сервере, а затем попробуйте резервное копирование \"на " "ходу\" ещё раз." -#: access/transam/xlog.c:8483 backup/basebackup.c:1355 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:8490 backup/basebackup.c:1360 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:8649 backup/basebackup.c:1221 +#: 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:9172 backup/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "" -"дежурный сервер был повышен в процессе резервного копирования \"на ходу\"" +"ведомый сервер был повышен в процессе резервного копирования \"на ходу\"" -#: access/transam/xlog.c:8650 backup/basebackup.c:1222 +#: 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. " @@ -3079,21 +3341,21 @@ msgstr "" "Это означает, что создаваемая резервная копия испорчена и использовать её не " "следует. Попробуйте резервное копирование \"на ходу\" ещё раз." -#: access/transam/xlog.c:8697 +#: access/transam/xlog.c:9220 #, c-format msgid "" -"WAL generated with full_page_writes=off was replayed during online backup" +"WAL generated with \"full_page_writes=off\" was replayed during online backup" msgstr "" -"В процессе резервного копирования \"на ходу\" был воспроизведён WAL, " -"созданный в режиме full_page_writes=off" +"в процессе резервного копирования \"на ходу\" был воспроизведён WAL, " +"созданный в режиме \"full_page_writes=off\"" -#: access/transam/xlog.c:8813 +#: 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:8827 +#: access/transam/xlog.c:9350 #, c-format msgid "" "still waiting for all required WAL segments to be archived (%d seconds " @@ -3101,23 +3363,23 @@ msgid "" msgstr "" "продолжается ожидание архивации всех нужных сегментов WAL (прошло %d сек.)" -#: access/transam/xlog.c:8829 +#: access/transam/xlog.c:9352 #, c-format msgid "" -"Check that your archive_command is executing properly. You can safely " +"Check that your \"archive_command\" is executing properly. You can safely " "cancel this backup, but the database backup will not be usable without all " "the WAL segments." msgstr "" -"Проверьте, правильно ли работает команда archive_command. Операцию " +"Проверьте, правильно ли работает команда \"archive_command\". Операцию " "копирования можно отменить безопасно, но резервная копия базы будет " "непригодна без всех сегментов WAL." -#: access/transam/xlog.c:8836 +#: access/transam/xlog.c:9359 #, c-format msgid "all required WAL segments have been archived" msgstr "все нужные сегменты WAL заархивированы" -#: access/transam/xlog.c:8840 +#: access/transam/xlog.c:9363 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -3126,31 +3388,31 @@ msgstr "" "архивация WAL не настроена; вы должны обеспечить копирование всех требуемых " "сегментов WAL другими средствами для получения резервной копии" -#: access/transam/xlog.c:8879 +#: access/transam/xlog.c:9402 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "" "прерывание резервного копирования из-за завершения обслуживающего процесса " "до вызова pg_backup_stop" -#: access/transam/xlogarchive.c:214 +#: access/transam/xlogarchive.c:213 #, c-format msgid "archive file \"%s\" has wrong size: %lld instead of %lld" msgstr "файл архива \"%s\" имеет неправильный размер: %lld вместо %lld" -#: access/transam/xlogarchive.c:223 +#: access/transam/xlogarchive.c:222 #, c-format msgid "restored log file \"%s\" from archive" msgstr "файл журнала \"%s\" восстановлен из архива" -#: access/transam/xlogarchive.c:237 +#: access/transam/xlogarchive.c:236 #, c-format -msgid "restore_command returned a zero exit status, but stat() failed." +msgid "\"restore_command\" returned a zero exit status, but stat() failed." msgstr "" -"Команда restore_command возвратила нулевой код состояния, но stat() выдала " -"ошибку." +"Команда \"restore_command\" возвратила нулевой код состояния, но stat() " +"выдала ошибку." -#: access/transam/xlogarchive.c:269 +#: access/transam/xlogarchive.c:268 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "восстановить файл \"%s\" из архива не удалось: %s" @@ -3158,109 +3420,120 @@ msgstr "восстановить файл \"%s\" из архива не удал #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:347 +#: access/transam/xlogarchive.c:346 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:457 access/transam/xlogarchive.c:537 +#: access/transam/xlogarchive.c:456 access/transam/xlogarchive.c:536 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "не удалось создать файл состояния архива \"%s\": %m" -#: access/transam/xlogarchive.c:465 access/transam/xlogarchive.c:545 +#: access/transam/xlogarchive.c:464 access/transam/xlogarchive.c:544 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "не удалось записать файл состояния архива \"%s\": %m" -#: access/transam/xlogfuncs.c:75 backup/basebackup.c:973 +#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 #, c-format msgid "a backup is already in progress in this session" msgstr "резервное копирование уже выполняется в этом сеансе" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:140 #, c-format msgid "backup is not in progress" msgstr "резервное копирование не выполняется" -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "Did you call pg_backup_start()?" msgstr "Вы вызывали pg_backup_start()?" -#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:248 -#: access/transam/xlogfuncs.c:287 access/transam/xlogfuncs.c:308 -#: access/transam/xlogfuncs.c:329 +#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 +#: access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:323 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "Функции управления WAL нельзя использовать в процессе восстановления." -#: access/transam/xlogfuncs.c:215 access/transam/xlogfuncs.c:399 -#: access/transam/xlogfuncs.c:457 +#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:447 #, c-format msgid "%s cannot be executed during recovery." msgstr "выполнить %s во время восстановления нельзя." -#: access/transam/xlogfuncs.c:221 +#: access/transam/xlogfuncs.c:215 #, c-format -msgid "pg_log_standby_snapshot() can only be used if wal_level >= replica" +msgid "" +"pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" msgstr "" -"pg_log_standby_snapshot() можно использовать, только если wal_level >= " -"replica" +"pg_log_standby_snapshot() можно использовать, только если \"wal_level\" >= " +"\"replica\"" -#: access/transam/xlogfuncs.c:253 +#: access/transam/xlogfuncs.c:247 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "Выбранный уровень WAL не достаточен для создания точки восстановления" # well-spelled: симв -#: access/transam/xlogfuncs.c:261 +#: access/transam/xlogfuncs.c:255 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "значение для точки восстановления превышает предел (%d симв.)" -#: access/transam/xlogfuncs.c:496 +#: access/transam/xlogfuncs.c:486 #, c-format msgid "invalid WAL file name \"%s\"" msgstr "неправильное имя файла WAL \"%s\"" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 -#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 -#: access/transam/xlogfuncs.c:689 +#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 +#: access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 +#: access/transam/xlogfuncs.c:679 #, c-format msgid "recovery is not in progress" msgstr "восстановление не выполняется" -#: access/transam/xlogfuncs.c:533 access/transam/xlogfuncs.c:563 -#: access/transam/xlogfuncs.c:587 access/transam/xlogfuncs.c:610 -#: access/transam/xlogfuncs.c:690 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 +#: access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 +#: access/transam/xlogfuncs.c:680 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "" "Функции управления восстановлением можно использовать только в процессе " "восстановления." -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 #, c-format msgid "standby promotion is ongoing" msgstr "производится повышение ведомого" -#: access/transam/xlogfuncs.c:539 access/transam/xlogfuncs.c:569 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "%s нельзя выполнять, когда производится повышение." -#: access/transam/xlogfuncs.c:695 +#: access/transam/xlogfuncs.c:685 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "значение \"wait_seconds\" не должно быть отрицательным или нулевым" -#: access/transam/xlogfuncs.c:715 storage/ipc/signalfuncs.c:265 +#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "отправить сигнал процессу postmaster не удалось: %m" -#: access/transam/xlogfuncs.c:751 +#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#, c-format +msgid "terminating connection due to unexpected postmaster exit" +msgstr "закрытие подключения из-за неожиданного завершения главного процесса" + +#: access/transam/xlogfuncs.c:740 +#, c-format +msgid "while waiting on promotion" +msgstr "в процессе ожидания повышения" + +#: access/transam/xlogfuncs.c:744 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" @@ -3268,71 +3541,72 @@ msgstr[0] "повышение сервера не завершилось за %d msgstr[1] "повышение сервера не завершилось за %d секунды" msgstr[2] "повышение сервера не завершилось за %d секунд" -#: access/transam/xlogprefetcher.c:1092 +#: access/transam/xlogprefetcher.c:1088 #, c-format msgid "" -"recovery_prefetch is not supported on platforms that lack posix_fadvise()." +"\"recovery_prefetch\" is not supported on platforms that lack " +"posix_fadvise()." msgstr "" -"recovery_prefetch не поддерживается на платформах, где отсутствует " +"\"recovery_prefetch\" не поддерживается на платформах, где отсутствует " "posix_fadvise()." -#: access/transam/xlogreader.c:621 +#: access/transam/xlogreader.c:619 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "" "неверное смещение записи в позиции %X/%X: ожидалось минимум %u, получено %u" -#: access/transam/xlogreader.c:630 +#: access/transam/xlogreader.c:628 #, c-format msgid "contrecord is requested by %X/%X" msgstr "в позиции %X/%X запрошено продолжение записи" -#: access/transam/xlogreader.c:671 access/transam/xlogreader.c:1136 +#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 #, c-format msgid "invalid record length at %X/%X: expected at least %u, got %u" msgstr "" "неверная длина записи в позиции %X/%X: ожидалось минимум %u, получено %u" -#: access/transam/xlogreader.c:760 +#: access/transam/xlogreader.c:758 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: access/transam/xlogreader.c:773 +#: access/transam/xlogreader.c:771 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X" -#: access/transam/xlogreader.c:1144 +#: access/transam/xlogreader.c:1142 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X" -#: access/transam/xlogreader.c:1157 access/transam/xlogreader.c:1173 +#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X" -#: access/transam/xlogreader.c:1211 +#: access/transam/xlogreader.c:1209 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции " "%X/%X" -#: access/transam/xlogreader.c:1245 +#: access/transam/xlogreader.c:1243 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "" "неверное магическое число %04X в сегменте WAL %s, LSN %X/%X, смещение %u" -#: access/transam/xlogreader.c:1260 access/transam/xlogreader.c:1302 +#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "" "неверные информационные биты %04X в сегменте WAL %s, LSN %X/%X, смещение %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1274 #, c-format msgid "" "WAL file is from different database system: WAL file database system " @@ -3341,7 +3615,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД " "%llu, а идентификатор системы pg_control: %llu" -#: access/transam/xlogreader.c:1284 +#: access/transam/xlogreader.c:1282 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -3350,7 +3624,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный размер сегмента в заголовке " "страницы" -#: access/transam/xlogreader.c:1290 +#: access/transam/xlogreader.c:1288 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -3359,12 +3633,12 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы" -#: access/transam/xlogreader.c:1322 +#: access/transam/xlogreader.c:1320 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте WAL %s, LSN %X/%X, смещение %u" -#: access/transam/xlogreader.c:1348 +#: access/transam/xlogreader.c:1346 #, c-format msgid "" "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, " @@ -3373,23 +3647,23 @@ msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте WAL " "%s, LSN %X/%X, смещение %u" -#: access/transam/xlogreader.c:1754 +#: access/transam/xlogreader.c:1749 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" -#: access/transam/xlogreader.c:1778 +#: access/transam/xlogreader.c:1773 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" -#: access/transam/xlogreader.c:1785 +#: access/transam/xlogreader.c:1780 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "" "BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X" -#: access/transam/xlogreader.c:1821 +#: access/transam/xlogreader.c:1816 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -3398,21 +3672,21 @@ msgstr "" "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u " "при длине образа блока %u в позиции %X/%X" -#: access/transam/xlogreader.c:1837 +#: access/transam/xlogreader.c:1832 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина " "%u в позиции %X/%X" -#: access/transam/xlogreader.c:1851 +#: access/transam/xlogreader.c:1846 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_COMPRESSED установлен, но длина образа блока равна %u в позиции %X/" "%X" -#: access/transam/xlogreader.c:1866 +#: access/transam/xlogreader.c:1861 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image " @@ -3421,41 +3695,41 @@ msgstr "" "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_COMPRESSED не установлены, но длина образа " "блока равна %u в позиции %X/%X" -#: access/transam/xlogreader.c:1882 +#: access/transam/xlogreader.c:1877 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "" "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" "%X" -#: access/transam/xlogreader.c:1894 +#: access/transam/xlogreader.c:1889 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "неверный идентификатор блока %u в позиции %X/%X" -#: access/transam/xlogreader.c:1961 +#: access/transam/xlogreader.c:1956 #, c-format msgid "record with invalid length at %X/%X" msgstr "запись с неверной длиной в позиции %X/%X" -#: access/transam/xlogreader.c:1987 +#: access/transam/xlogreader.c:1982 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "не удалось найти копию блока с ID %d в записи журнала WAL" -#: access/transam/xlogreader.c:2071 +#: access/transam/xlogreader.c:2066 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "" "не удалось восстановить образ в позиции %X/%X с указанным неверным блоком %d" -#: access/transam/xlogreader.c:2078 +#: access/transam/xlogreader.c:2073 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "" "не удалось восстановить образ в позиции %X/%X с неверным состоянием, блок %d" -#: access/transam/xlogreader.c:2105 access/transam/xlogreader.c:2122 +#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 #, c-format msgid "" "could not restore image at %X/%X compressed with %s not supported by build, " @@ -3464,7 +3738,7 @@ msgstr "" "не удалось восстановить образ в позиции %X/%X, сжатый методом %s, который не " "поддерживается этой сборкой, блок %d" -#: access/transam/xlogreader.c:2131 +#: access/transam/xlogreader.c:2126 #, c-format msgid "" "could not restore image at %X/%X compressed with unknown method, block %d" @@ -3472,49 +3746,12 @@ msgstr "" "не удалось восстановить образ в позиции %X/%X, сжатый неизвестным методом, " "блок %d" -#: access/transam/xlogreader.c:2139 +#: access/transam/xlogreader.c:2134 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "не удалось развернуть образ в позиции %X/%X, блок %d" -#: access/transam/xlogrecovery.c:547 -#, c-format -msgid "entering standby mode" -msgstr "переход в режим резервного сервера" - -#: access/transam/xlogrecovery.c:550 -#, c-format -msgid "starting point-in-time recovery to XID %u" -msgstr "начинается восстановление точки во времени до XID %u" - -#: access/transam/xlogrecovery.c:554 -#, c-format -msgid "starting point-in-time recovery to %s" -msgstr "начинается восстановление точки во времени до %s" - -#: access/transam/xlogrecovery.c:558 -#, c-format -msgid "starting point-in-time recovery to \"%s\"" -msgstr "начинается восстановление точки во времени до \"%s\"" - -#: access/transam/xlogrecovery.c:562 -#, c-format -msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" -msgstr "" -"начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%X\"" - -#: access/transam/xlogrecovery.c:566 -#, c-format -msgid "starting point-in-time recovery to earliest consistent point" -msgstr "" -"начинается восстановление точки во времени до первой точки согласованности" - -#: access/transam/xlogrecovery.c:569 -#, c-format -msgid "starting archive recovery" -msgstr "начинается восстановление архива" - -#: access/transam/xlogrecovery.c:637 +#: access/transam/xlogrecovery.c:617 #, c-format msgid "" "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on " @@ -3523,68 +3760,108 @@ msgstr "" "начинается восстановление копии с LSN redo %X/%X, LSN контрольной точки %X/" "%X, на линии времени %u" -#: access/transam/xlogrecovery.c:669 +#: access/transam/xlogrecovery.c:649 #, c-format -msgid "could not find redo location referenced by checkpoint record" -msgstr "не удалось найти положение REDO, указанное записью контрольной точки" +msgid "" +"could not find redo location %X/%X referenced by checkpoint record at %X/%X" +msgstr "" +"не удалось найти положение REDO %X/%X, указанное в записи контрольной точки " +"в %X/%X" -#: access/transam/xlogrecovery.c:670 access/transam/xlogrecovery.c:680 +#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 #, c-format msgid "" -"If you are restoring from a backup, touch \"%s/recovery.signal\" and add " -"required recovery options.\n" +"If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/" +"standby.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/" "backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if " "restoring from a backup." msgstr "" -"Если вы восстанавливаете резервную копию, создайте \"%s/recovery.signal\" и " -"задайте обязательные параметры восстановления.\n" +"Если вы восстанавливаете резервную копию, создайте \"%s/recovery.signal\" " +"или \"%s/standby.signal\" и задайте обязательные параметры восстановления.\n" "В других случаях попытайтесь удалить файл \"%s/backup_label\".\n" "Будьте осторожны: при восстановлении резервной копии удаление \"%s/" "backup_label\" приведёт к повреждению кластера." -#: access/transam/xlogrecovery.c:679 +#: access/transam/xlogrecovery.c:660 #, c-format -msgid "could not locate required checkpoint record" -msgstr "не удалось считать нужную запись контрольной точки" +msgid "could not locate required checkpoint record at %X/%X" +msgstr "не удалось найти нужную запись контрольной точки в %X/%X" -#: access/transam/xlogrecovery.c:708 commands/tablespace.c:670 +#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: access/transam/xlogrecovery.c:740 access/transam/xlogrecovery.c:746 +#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "файл \"%s\" игнорируется ввиду отсутствия файла \"%s\"" -#: access/transam/xlogrecovery.c:742 +#: access/transam/xlogrecovery.c:725 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" был переименован в \"%s\"." -#: access/transam/xlogrecovery.c:748 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\" (%m)." -#: access/transam/xlogrecovery.c:787 +#: access/transam/xlogrecovery.c:770 #, c-format msgid "restarting backup recovery with redo LSN %X/%X" msgstr "перезапуск восстановления копии с LSN redo %X/%X" -#: access/transam/xlogrecovery.c:812 +#: access/transam/xlogrecovery.c:795 +#, c-format +msgid "could not locate a valid checkpoint record at %X/%X" +msgstr "не удалось найти корректную запись контрольной точки в %X/%X" + +#: access/transam/xlogrecovery.c:806 +#, c-format +msgid "entering standby mode" +msgstr "переход в режим резервного сервера" + +#: access/transam/xlogrecovery.c:809 +#, c-format +msgid "starting point-in-time recovery to XID %u" +msgstr "начинается восстановление точки во времени до XID %u" + +#: access/transam/xlogrecovery.c:813 +#, c-format +msgid "starting point-in-time recovery to %s" +msgstr "начинается восстановление точки во времени до %s" + +#: access/transam/xlogrecovery.c:817 +#, c-format +msgid "starting point-in-time recovery to \"%s\"" +msgstr "начинается восстановление точки во времени до \"%s\"" + +#: access/transam/xlogrecovery.c:821 +#, c-format +msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" +msgstr "" +"начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%X\"" + +#: access/transam/xlogrecovery.c:825 #, c-format -msgid "could not locate a valid checkpoint record" -msgstr "не удалось считать правильную запись контрольной точки" +msgid "starting point-in-time recovery to earliest consistent point" +msgstr "" +"начинается восстановление точки во времени до первой точки согласованности" + +#: access/transam/xlogrecovery.c:828 +#, c-format +msgid "starting archive recovery" +msgstr "начинается восстановление архива" -#: access/transam/xlogrecovery.c:836 +#: access/transam/xlogrecovery.c:849 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "в истории сервера нет ответвления запрошенной линии времени %u" -#: access/transam/xlogrecovery.c:838 +#: access/transam/xlogrecovery.c:851 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -3593,7 +3870,7 @@ msgstr "" "Последняя контрольная точка: %X/%X на линии времени %u, но в истории " "запрошенной линии времени сервер ответвился с этой линии в %X/%X." -#: access/transam/xlogrecovery.c:852 +#: access/transam/xlogrecovery.c:865 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -3602,22 +3879,22 @@ msgstr "" "запрошенная линия времени %u не содержит минимальную точку восстановления %X/" "%X на линии времени %u" -#: access/transam/xlogrecovery.c:880 +#: access/transam/xlogrecovery.c:893 #, c-format msgid "invalid next transaction ID" msgstr "неверный ID следующей транзакции" -#: access/transam/xlogrecovery.c:885 +#: access/transam/xlogrecovery.c:898 #, c-format msgid "invalid redo in checkpoint record" msgstr "неверная запись REDO в контрольной точке" -#: access/transam/xlogrecovery.c:896 +#: access/transam/xlogrecovery.c:909 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "неверная запись REDO в контрольной точке выключения" -#: access/transam/xlogrecovery.c:925 +#: access/transam/xlogrecovery.c:938 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -3625,19 +3902,19 @@ msgstr "" "система БД была остановлена нештатно; производится автоматическое " "восстановление" -#: access/transam/xlogrecovery.c:929 +#: access/transam/xlogrecovery.c:942 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "восстановление после сбоя начинается на линии времени %u, целевая линия " "времени: %u" -#: access/transam/xlogrecovery.c:972 +#: access/transam/xlogrecovery.c:985 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label содержит данные, не согласованные с файлом pg_control" -#: access/transam/xlogrecovery.c:973 +#: access/transam/xlogrecovery.c:986 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -3646,24 +3923,24 @@ msgstr "" "Это означает, что резервная копия повреждена и для восстановления БД " "придётся использовать другую копию." -#: access/transam/xlogrecovery.c:1027 +#: access/transam/xlogrecovery.c:1040 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "" "использование файла с конфигурацией восстановления \"%s\" не поддерживается" -#: access/transam/xlogrecovery.c:1092 +#: access/transam/xlogrecovery.c:1105 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "" "режим резервного сервера не поддерживается однопользовательским сервером" -#: access/transam/xlogrecovery.c:1109 +#: access/transam/xlogrecovery.c:1122 #, c-format -msgid "specified neither primary_conninfo nor restore_command" -msgstr "не указано ни primary_conninfo, ни restore_command" +msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" +msgstr "не указано ни \"primary_conninfo\", ни \"restore_command\"" -#: access/transam/xlogrecovery.c:1110 +#: access/transam/xlogrecovery.c:1123 #, c-format msgid "" "The database server will regularly poll the pg_wal subdirectory to check for " @@ -3672,111 +3949,128 @@ msgstr "" "Сервер БД будет регулярно опрашивать подкаталог pg_wal и проверять " "содержащиеся в нём файлы." -#: access/transam/xlogrecovery.c:1118 +#: access/transam/xlogrecovery.c:1131 #, c-format -msgid "must specify restore_command when standby mode is not enabled" +msgid "must specify \"restore_command\" when standby mode is not enabled" msgstr "" -"необходимо задать restore_command, если не выбран режим резервного сервера" +"необходимо задать \"restore_command\", если не выбран режим резервного " +"сервера" -#: access/transam/xlogrecovery.c:1156 +#: access/transam/xlogrecovery.c:1169 #, c-format msgid "recovery target timeline %u does not exist" msgstr "целевая линия времени для восстановления %u не существует" -#: access/transam/xlogrecovery.c:1239 access/transam/xlogrecovery.c:1246 -#: access/transam/xlogrecovery.c:1305 access/transam/xlogrecovery.c:1385 -#: access/transam/xlogrecovery.c:1409 +#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 +#: access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 +#: access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 #, c-format msgid "invalid data in file \"%s\"" msgstr "неверные данные в файле \"%s\"" -#: access/transam/xlogrecovery.c:1306 +#: access/transam/xlogrecovery.c:1319 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Получен идентификатор линии времени %u, но ожидался %u." -#: access/transam/xlogrecovery.c:1688 +#: access/transam/xlogrecovery.c:1330 +#, c-format +msgid "this is an incremental backup, not a data directory" +msgstr "это каталог инкрементальной копии, не каталог данных" + +#: access/transam/xlogrecovery.c:1331 +#, c-format +msgid "Use pg_combinebackup to reconstruct a valid data directory." +msgstr "" +"Реконструируйте полноценный каталог данных, используя pg_combinebackup." + +#: access/transam/xlogrecovery.c:1717 +#, c-format +msgid "unexpected record type found at redo point %X/%X" +msgstr "в точке redo %X/%X обнаружена запись неожиданного типа" + +#: access/transam/xlogrecovery.c:1740 #, c-format msgid "redo starts at %X/%X" msgstr "запись REDO начинается со смещения %X/%X" -#: access/transam/xlogrecovery.c:1701 +#: access/transam/xlogrecovery.c:1753 #, c-format msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "" "выполняется воспроизведение, прошло времени: %ld.%02d с, текущий LSN: %X/%X" -#: access/transam/xlogrecovery.c:1793 +#: access/transam/xlogrecovery.c:1843 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "запрошенная точка остановки восстановления предшествует согласованной точке " "восстановления" -#: access/transam/xlogrecovery.c:1825 +#: access/transam/xlogrecovery.c:1875 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "записи REDO обработаны до смещения %X/%X, нагрузка системы: %s" -#: access/transam/xlogrecovery.c:1831 +#: access/transam/xlogrecovery.c:1881 #, c-format msgid "last completed transaction was at log time %s" msgstr "последняя завершённая транзакция была выполнена в %s" -#: access/transam/xlogrecovery.c:1840 +#: access/transam/xlogrecovery.c:1890 #, c-format msgid "redo is not required" msgstr "данные REDO не требуются" -#: access/transam/xlogrecovery.c:1851 +#: access/transam/xlogrecovery.c:1901 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "восстановление окончилось до достижения заданной цели восстановления" -#: access/transam/xlogrecovery.c:2045 +#: access/transam/xlogrecovery.c:2095 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "" "успешно пропущена отсутствующая запись contrecord в %X/%X, перезаписанная в " "%s" -#: access/transam/xlogrecovery.c:2112 +#: access/transam/xlogrecovery.c:2162 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "в %2$s обнаружен недопустимый элемент-каталог \"%1$s\"" -#: access/transam/xlogrecovery.c:2114 +#: access/transam/xlogrecovery.c:2164 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "" "Все элементы-каталоги в pg_tblspc/ должны быть символическими ссылками." -#: access/transam/xlogrecovery.c:2115 +#: access/transam/xlogrecovery.c:2165 #, c-format msgid "" -"Remove those directories, or set allow_in_place_tablespaces to ON " +"Remove those directories, or set \"allow_in_place_tablespaces\" to ON " "transiently to let recovery complete." msgstr "" -"Удалите эти каталоги или на время установите в allow_in_place_tablespaces " -"значение ON, чтобы восстановление завершилось." +"Удалите эти каталоги или на время установите в " +"\"allow_in_place_tablespaces\" значение ON, чтобы восстановление завершилось." -#: access/transam/xlogrecovery.c:2167 +#: access/transam/xlogrecovery.c:2217 #, c-format msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" msgstr "завершено восстановление копии с LSN redo %X/%X и конечным LSN %X/%X" -#: access/transam/xlogrecovery.c:2197 +#: access/transam/xlogrecovery.c:2247 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "согласованное состояние восстановления достигнуто в позиции %X/%X" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2235 +#: access/transam/xlogrecovery.c:2285 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "запись REDO в WAL в позиции %X/%X для %s" -#: access/transam/xlogrecovery.c:2333 +#: access/transam/xlogrecovery.c:2383 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -3785,13 +4079,13 @@ msgstr "" "неожиданный ID предыдущей линии времени %u (ID текущей линии времени %u) в " "записи контрольной точки" -#: access/transam/xlogrecovery.c:2342 +#: access/transam/xlogrecovery.c:2392 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "неожиданный ID линии времени %u (после %u) в записи контрольной точки" # skip-rule: capital-letter-first -#: access/transam/xlogrecovery.c:2358 +#: access/transam/xlogrecovery.c:2408 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -3800,83 +4094,83 @@ msgstr "" "неожиданный ID линии времени %u в записи контрольной точки, до достижения " "минимальной к. т. %X/%X на линии времени %u" -#: access/transam/xlogrecovery.c:2542 access/transam/xlogrecovery.c:2818 +#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 #, c-format msgid "recovery stopping after reaching consistency" msgstr "" "восстановление останавливается после достижения согласованного состояния" -#: access/transam/xlogrecovery.c:2563 +#: access/transam/xlogrecovery.c:2613 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается перед позицией в WAL (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2653 +#: access/transam/xlogrecovery.c:2703 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "" "восстановление останавливается перед фиксированием транзакции %u, время %s" -#: access/transam/xlogrecovery.c:2660 +#: access/transam/xlogrecovery.c:2710 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "" "восстановление останавливается перед прерыванием транзакции %u, время %s" -#: access/transam/xlogrecovery.c:2713 +#: access/transam/xlogrecovery.c:2763 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "восстановление останавливается в точке восстановления \"%s\", время %s" -#: access/transam/xlogrecovery.c:2731 +#: access/transam/xlogrecovery.c:2781 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается после позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2798 +#: access/transam/xlogrecovery.c:2848 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "" "восстановление останавливается после фиксирования транзакции %u, время %s" -#: access/transam/xlogrecovery.c:2806 +#: access/transam/xlogrecovery.c:2856 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "" "восстановление останавливается после прерывания транзакции %u, время %s" -#: access/transam/xlogrecovery.c:2887 +#: access/transam/xlogrecovery.c:2937 #, c-format msgid "pausing at the end of recovery" msgstr "остановка в конце восстановления" -#: access/transam/xlogrecovery.c:2888 +#: access/transam/xlogrecovery.c:2938 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Выполните pg_wal_replay_resume() для повышения." -#: access/transam/xlogrecovery.c:2891 access/transam/xlogrecovery.c:4628 +#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4679 #, c-format msgid "recovery has paused" msgstr "восстановление приостановлено" -#: access/transam/xlogrecovery.c:2892 +#: access/transam/xlogrecovery.c:2942 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Выполните pg_wal_replay_resume() для продолжения." -#: access/transam/xlogrecovery.c:3155 +#: access/transam/xlogrecovery.c:3205 #, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" msgstr "" "неожиданный ID линии времени %u в сегменте WAL %s, LSN %X/%X, смещение %u" -#: access/transam/xlogrecovery.c:3363 +#: access/transam/xlogrecovery.c:3413 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" msgstr "не удалось прочитать сегмент WAL %s, LSN %X/%X, смещение %u: %m" -#: access/transam/xlogrecovery.c:3370 +#: access/transam/xlogrecovery.c:3420 #, c-format msgid "" "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" @@ -3884,38 +4178,38 @@ msgstr "" "не удалось прочитать сегмент WAL %s, LSN %X/%X, смещение %u (прочитано байт: " "%d из %zu)" -#: access/transam/xlogrecovery.c:4010 +#: access/transam/xlogrecovery.c:4061 #, c-format msgid "invalid checkpoint location" msgstr "неверное положение контрольной точки" -#: access/transam/xlogrecovery.c:4020 +#: access/transam/xlogrecovery.c:4071 #, c-format msgid "invalid checkpoint record" msgstr "неверная запись контрольной точки" -#: access/transam/xlogrecovery.c:4026 +#: access/transam/xlogrecovery.c:4077 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "неверный ID менеджера ресурсов в записи контрольной точки" -#: access/transam/xlogrecovery.c:4034 +#: access/transam/xlogrecovery.c:4085 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "неверные флаги xl_info в записи контрольной точки" -#: access/transam/xlogrecovery.c:4040 +#: access/transam/xlogrecovery.c:4091 #, c-format msgid "invalid length of checkpoint record" msgstr "неверная длина записи контрольной точки" -#: access/transam/xlogrecovery.c:4094 +#: 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:4108 +#: access/transam/xlogrecovery.c:4159 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " @@ -3924,30 +4218,30 @@ msgstr "" "новая линия времени %u ответвилась от текущей линии времени базы данных %u " "до текущей точки восстановления %X/%X" -#: access/transam/xlogrecovery.c:4127 +#: access/transam/xlogrecovery.c:4178 #, c-format msgid "new target timeline is %u" msgstr "новая целевая линия времени %u" -#: access/transam/xlogrecovery.c:4330 +#: access/transam/xlogrecovery.c:4381 #, c-format msgid "WAL receiver process shutdown requested" msgstr "получен запрос на выключение процесса приёмника WAL" -#: access/transam/xlogrecovery.c:4390 +#: access/transam/xlogrecovery.c:4441 #, c-format msgid "received promote request" msgstr "получен запрос повышения статуса" -#: access/transam/xlogrecovery.c:4619 +#: access/transam/xlogrecovery.c:4670 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "" "режим горячего резерва невозможен из-за отсутствия достаточных значений " "параметров" -#: access/transam/xlogrecovery.c:4620 access/transam/xlogrecovery.c:4647 -#: access/transam/xlogrecovery.c:4677 +#: 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 " @@ -3955,12 +4249,12 @@ msgid "" msgstr "" "Параметр %s = %d меньше, чем на ведущем сервере, где его значение было %d." -#: access/transam/xlogrecovery.c:4629 +#: access/transam/xlogrecovery.c:4680 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "В случае возобновления восстановления сервер отключится." -#: access/transam/xlogrecovery.c:4630 +#: access/transam/xlogrecovery.c:4681 #, c-format msgid "" "You can then restart the server after making the necessary configuration " @@ -3969,24 +4263,24 @@ msgstr "" "Затем вы можете перезапустить сервер после внесения необходимых изменений " "конфигурации." -#: access/transam/xlogrecovery.c:4641 +#: access/transam/xlogrecovery.c:4692 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "повышение невозможно из-за отсутствия достаточных значений параметров" -#: access/transam/xlogrecovery.c:4651 +#: access/transam/xlogrecovery.c:4702 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "" "Перезапустите сервер после внесения необходимых изменений конфигурации." -#: access/transam/xlogrecovery.c:4675 +#: access/transam/xlogrecovery.c:4726 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "" "восстановление прервано из-за отсутствия достаточных значений параметров" -#: access/transam/xlogrecovery.c:4681 +#: access/transam/xlogrecovery.c:4732 #, c-format msgid "" "You can restart the server after making the necessary configuration changes." @@ -3994,66 +4288,67 @@ msgstr "" "Вы можете перезапустить сервер после внесения необходимых изменений " "конфигурации." -#: access/transam/xlogrecovery.c:4723 +#: access/transam/xlogrecovery.c:4774 #, c-format msgid "multiple recovery targets specified" msgstr "указано несколько целей восстановления" -#: access/transam/xlogrecovery.c:4724 +#: 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." +"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." +"Может быть указана только одна из целей: \"recovery_target\", " +"\"recovery_target_lsn\", \"recovery_target_name\", \"recovery_target_time\", " +"\"recovery_target_xid\"." -#: access/transam/xlogrecovery.c:4735 +#: access/transam/xlogrecovery.c:4786 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Единственное допустимое значение: \"immediate\"." -#: access/transam/xlogrecovery.c:4887 utils/adt/timestamp.c:186 -#: utils/adt/timestamp.c:439 +#: access/transam/xlogrecovery.c:4938 utils/adt/timestamp.c:202 +#: utils/adt/timestamp.c:455 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp вне диапазона: \"%s\"" -#: access/transam/xlogrecovery.c:4932 +#: access/transam/xlogrecovery.c:4983 #, c-format -msgid "recovery_target_timeline is not a valid number." -msgstr "recovery_target_timeline не является допустимым числом." +msgid "\"recovery_target_timeline\" is not a valid number." +msgstr "Значение \"recovery_target_timeline\" не является допустимым числом." -#: access/transam/xlogutils.c:1039 +#: access/transam/xlogutils.c:1032 #, c-format msgid "could not read from WAL segment %s, offset %d: %m" msgstr "не удалось прочитать из сегмента WAL %s по смещению %d: %m" -#: access/transam/xlogutils.c:1046 +#: access/transam/xlogutils.c:1039 #, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" msgstr "" "не удалось прочитать из сегмента WAL %s по смещению %d (прочитано байт: %d " "из %d)" -#: archive/shell_archive.c:96 +#: archive/shell_archive.c:98 #, c-format msgid "archive command failed with exit code %d" msgstr "команда архивации завершилась ошибкой с кодом %d" -#: archive/shell_archive.c:98 archive/shell_archive.c:108 -#: archive/shell_archive.c:114 archive/shell_archive.c:123 +#: archive/shell_archive.c:100 archive/shell_archive.c:110 +#: archive/shell_archive.c:116 archive/shell_archive.c:125 #, c-format msgid "The failed archive command was: %s" msgstr "Команда архивации с ошибкой: %s" -#: archive/shell_archive.c:105 +#: archive/shell_archive.c:107 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "команда архивации была прервана исключением 0x%X" -#: archive/shell_archive.c:107 postmaster/postmaster.c:3678 +#: 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." @@ -4061,52 +4356,52 @@ msgstr "" "Описание этого шестнадцатеричного значения ищите во включаемом C-файле " "\"ntstatus.h\"" -#: archive/shell_archive.c:112 +#: archive/shell_archive.c:114 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "команда архивации завершена по сигналу %d: %s" -#: archive/shell_archive.c:121 +#: archive/shell_archive.c:123 #, c-format msgid "archive command exited with unrecognized status %d" -msgstr "команда архивации завершилась с неизвестным кодом состояния %d" +msgstr "команда архивации завершилась с нераспознанным кодом состояния %d" -#: backup/backup_manifest.c:253 +#: backup/backup_manifest.c:254 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "ожидался конец линии времени %u, но обнаружена линия времени %u" -#: backup/backup_manifest.c:277 +#: backup/backup_manifest.c:278 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "ожидалось начало линии времени %u, но обнаружена линия времени %u" -#: backup/backup_manifest.c:304 +#: backup/backup_manifest.c:305 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "начальная линия времени %u не найдена в истории линии времени %u" -#: backup/backup_manifest.c:355 +#: backup/backup_manifest.c:356 #, c-format msgid "could not rewind temporary file" msgstr "не удалось переместиться во временном файле" -#: backup/basebackup.c:470 +#: backup/basebackup.c:479 #, c-format msgid "could not find any WAL files" msgstr "не удалось найти ни одного файла WAL" -#: backup/basebackup.c:485 backup/basebackup.c:500 backup/basebackup.c:509 +#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 #, c-format msgid "could not find WAL file \"%s\"" msgstr "не удалось найти файл WAL \"%s\"" -#: backup/basebackup.c:551 backup/basebackup.c:576 +#: backup/basebackup.c:560 backup/basebackup.c:585 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "неприемлемый размер файла WAL \"%s\"" -#: backup/basebackup.c:646 +#: backup/basebackup.c:656 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" @@ -4114,93 +4409,95 @@ msgstr[0] "всего ошибок контрольных сумм: %lld" msgstr[1] "всего ошибок контрольных сумм: %lld" msgstr[2] "всего ошибок контрольных сумм: %lld" -#: backup/basebackup.c:653 +#: backup/basebackup.c:663 #, c-format msgid "checksum verification failure during base backup" msgstr "при базовом резервном копировании выявлены ошибки контрольных сумм" -#: backup/basebackup.c:722 backup/basebackup.c:731 backup/basebackup.c:742 -#: backup/basebackup.c:759 backup/basebackup.c:768 backup/basebackup.c:779 -#: backup/basebackup.c:796 backup/basebackup.c:805 backup/basebackup.c:817 -#: backup/basebackup.c:841 backup/basebackup.c:855 backup/basebackup.c:866 -#: backup/basebackup.c:877 backup/basebackup.c:890 +#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 +#: backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 +#: backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 +#: backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 +#: backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 #, c-format msgid "duplicate option \"%s\"" msgstr "повторяющийся параметр \"%s\"" -#: backup/basebackup.c:750 +#: backup/basebackup.c:761 #, c-format msgid "unrecognized checkpoint type: \"%s\"" msgstr "нераспознанный тип контрольной точки: \"%s\"" -#: backup/basebackup.c:785 +#: backup/basebackup.c:793 +#, c-format +msgid "incremental backups cannot be taken unless WAL summarization is enabled" +msgstr "" +"сделать инкрементальную копию можно, только когда включено обобщение WAL" + +#: backup/basebackup.c:809 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d вне диапазона, допустимого для параметра \"%s\" (%d .. %d)" -#: backup/basebackup.c:830 +#: backup/basebackup.c:854 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "нераспознанный параметр в манифесте: \"%s\"" -#: backup/basebackup.c:846 -#, c-format -msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "нераспознанный алгоритм расчёта контрольных сумм: \"%s\"" - -#: backup/basebackup.c:881 +#: backup/basebackup.c:905 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "нераспознанный алгоритм сжатия: \"%s\"" -#: backup/basebackup.c:897 +#: backup/basebackup.c:921 #, c-format msgid "unrecognized base backup option: \"%s\"" msgstr "нераспознанный параметр операции базового копирования: \"%s\"" -#: backup/basebackup.c:908 +#: backup/basebackup.c:932 #, c-format msgid "manifest checksums require a backup manifest" msgstr "контрольные суммы не могут рассчитываться без манифеста копии" # skip-rule: capital-letter-first -#: backup/basebackup.c:917 +#: backup/basebackup.c:941 #, c-format msgid "target detail cannot be used without target" msgstr "доп. информацию о получателе нельзя задать без указания получателя" # skip-rule: capital-letter-first -#: backup/basebackup.c:926 backup/basebackup_target.c:218 +#: backup/basebackup.c:950 backup/basebackup_target.c:218 #, c-format msgid "target \"%s\" does not accept a target detail" msgstr "получатель \"%s\" не принимает доп. информацию" -#: backup/basebackup.c:937 +#: backup/basebackup.c:961 #, c-format msgid "compression detail cannot be specified unless compression is enabled" msgstr "параметры сжатия нельзя указывать, если не включено сжатие" -#: backup/basebackup.c:950 +#: backup/basebackup.c:974 #, c-format msgid "invalid compression specification: %s" msgstr "неправильное указание сжатия: %s" -#: backup/basebackup.c:1116 backup/basebackup.c:1298 +#: backup/basebackup.c:1024 +#, c-format +msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" +msgstr "" +"инкрементальной команде BASE_BACKUP должна предшествовать UPLOAD_MANIFEST" + +#: backup/basebackup.c:1157 backup/basebackup.c:1358 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "не удалось получить информацию о файле или каталоге \"%s\": %m" -#: backup/basebackup.c:1434 +#: backup/basebackup.c:1544 #, c-format msgid "skipping special file \"%s\"" msgstr "специальный файл \"%s\" пропускается" -#: backup/basebackup.c:1546 -#, c-format -msgid "invalid segment number %d in file \"%s\"" -msgstr "неверный номер сегмента %d в файле \"%s\"" - -#: backup/basebackup.c:1578 +#: backup/basebackup.c:1751 #, c-format msgid "" "could not verify checksum in file \"%s\", block %u: read buffer size %d and " @@ -4209,7 +4506,15 @@ msgstr "" "не удалось проверить контрольную сумму в файле \"%s\", блоке %u: размер " "прочитанного буфера (%d) отличается от размера страницы (%d)" -#: backup/basebackup.c:1662 +#: backup/basebackup.c:1813 +#, c-format +msgid "file \"%s\" has a total of %d checksum verification failure" +msgid_plural "file \"%s\" has a total of %d checksum verification failures" +msgstr[0] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" +msgstr[1] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" +msgstr[2] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" + +#: backup/basebackup.c:1917 #, c-format msgid "" "checksum verification failed in file \"%s\", block %u: calculated %X but " @@ -4218,27 +4523,19 @@ msgstr "" "ошибка контрольной суммы в файле \"%s\", блоке %u: вычислено значение %X, но " "ожидалось %X" -#: backup/basebackup.c:1669 +#: backup/basebackup.c:1924 #, c-format msgid "" "further checksum verification failures in file \"%s\" will not be reported" msgstr "" "о дальнейших ошибках контрольных сумм в файле \"%s\" сообщаться не будет" -#: backup/basebackup.c:1725 -#, c-format -msgid "file \"%s\" has a total of %d checksum verification failure" -msgid_plural "file \"%s\" has a total of %d checksum verification failures" -msgstr[0] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" -msgstr[1] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" -msgstr[2] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" - -#: backup/basebackup.c:1771 +#: backup/basebackup.c:2048 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "слишком длинное имя файла для формата tar: \"%s\"" -#: backup/basebackup.c:1776 +#: backup/basebackup.c:2053 #, c-format msgid "" "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" @@ -4246,6 +4543,11 @@ msgstr "" "цель символической ссылки слишком длинная для формата tar: имя файла \"%s\", " "цель \"%s\"" +#: backup/basebackup.c:2127 +#, c-format +msgid "could not read file \"%s\": read %zd of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %zd из %zu)" + #: backup/basebackup_gzip.c:67 #, c-format msgid "gzip compression is not supported by this build" @@ -4256,17 +4558,110 @@ msgstr "сжатие gzip не поддерживается в данной сб msgid "could not initialize compression library" msgstr "не удалось инициализировать библиотеку сжатия" +#: backup/basebackup_incremental.c:294 +#, c-format +msgid "manifest contains no required WAL ranges" +msgstr "в манифесте не указаны нужные диапазоны WAL" + +#: 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: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: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: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:439 +#, c-format +msgid "" +"This can happen for incremental backups on a standby if there was little " +"activity since the previous backup." +msgstr "" +"Такая ситуация возможна, когда инкрементальная копия создаётся на резервном " +"сервере при незначительной активности после создания предыдущей копии." + +#: backup/basebackup_incremental.c:446 +#, 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: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 "" +"требуются обобщения WAL для линии времени %u с позиции %X/%X по %X/%X, но " +"они не найдены" + +#: 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 "" +"требуются обобщения WAL для линии времени %u с позиции %X/%X по %X/%X, но " +"обобщения для этой линии времени и этого диапазона LSN неполные" + +#: backup/basebackup_incremental.c:538 +#, c-format +msgid "The first unsummarized LSN in this range is %X/%X." +msgstr "Первый необобщённый LSN в этом диапазоне: %X/%X." + +#: backup/basebackup_incremental.c:938 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "" +"с версией 1 манифеста копии инкрементальное копирование не поддерживается" + +#: backup/basebackup_incremental.c:956 +#, c-format +msgid "" +"system identifier in backup manifest is %llu, but database system identifier " +"is %llu" +msgstr "" +"в манифесте копии указан идентификатор системы: %llu, но идентификатор " +"системы базы данных: %llu" + #: backup/basebackup_lz4.c:67 #, c-format msgid "lz4 compression is not supported by this build" msgstr "сжатие lz4 не поддерживается в данной сборке" -#: backup/basebackup_server.c:75 +#: backup/basebackup_server.c:73 #, c-format msgid "permission denied to create backup stored on server" msgstr "нет прав для создания копии, сохраняемой на сервере" -#: backup/basebackup_server.c:76 +#: backup/basebackup_server.c:74 #, c-format msgid "" "Only roles with privileges of the \"%s\" role may create a backup stored on " @@ -4275,40 +4670,41 @@ msgstr "" "Создавать копии, сохраняемые на сервере, могут только роли с правами роли " "\"%s\"." -#: backup/basebackup_server.c:91 +#: backup/basebackup_server.c:89 #, c-format msgid "relative path not allowed for backup stored on server" msgstr "" "для копии, сохраняемой на стороне сервера, нельзя указывать относительный " "путь" -#: backup/basebackup_server.c:104 commands/dbcommands.c:478 -#: commands/tablespace.c:163 commands/tablespace.c:179 -#: commands/tablespace.c:599 commands/tablespace.c:644 replication/slot.c:1731 +#: backup/basebackup_server.c:102 commands/dbcommands.c:477 +#: commands/tablespace.c:157 commands/tablespace.c:173 +#: commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: backup/basebackup_server.c:117 +#: backup/basebackup_server.c:115 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" существует, но он не пуст" -#: backup/basebackup_server.c:125 utils/init/postinit.c:1164 +#: backup/basebackup_server.c:123 utils/init/postinit.c:1178 #, c-format msgid "could not access directory \"%s\": %m" -msgstr "ошибка доступа к каталогу \"%s\": %m" +msgstr "ошибка при обращении к каталогу \"%s\": %m" -#: backup/basebackup_server.c:177 backup/basebackup_server.c:184 -#: backup/basebackup_server.c:270 backup/basebackup_server.c:277 -#: storage/smgr/md.c:504 storage/smgr/md.c:511 storage/smgr/md.c:593 -#: storage/smgr/md.c:615 storage/smgr/md.c:865 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 +#: backup/basebackup_server.c:268 backup/basebackup_server.c:275 +#: backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 +#: storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 #, c-format msgid "Check free disk space." msgstr "Проверьте, есть ли место на диске." -#: backup/basebackup_server.c:181 backup/basebackup_server.c:274 +#: backup/basebackup_server.c:179 backup/basebackup_server.c:272 +#: backup/walsummary.c:309 #, c-format msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" msgstr "" @@ -4340,252 +4736,251 @@ msgstr "не удалось установить для zstd число пото msgid "could not enable long-distance mode: %s" msgstr "не удалось включить режим большой дистанции: %s" -#: bootstrap/bootstrap.c:243 postmaster/postmaster.c:721 tcop/postgres.c:3819 +#: backup/walsummaryfuncs.c:95 +#, c-format +msgid "invalid timeline %lld" +msgstr "неверная линия времени %lld" + +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 #, c-format msgid "--%s requires a value" msgstr "для --%s требуется значение" -#: bootstrap/bootstrap.c:248 postmaster/postmaster.c:726 tcop/postgres.c:3824 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" -#: bootstrap/bootstrap.c:289 -#, c-format -msgid "-X requires a power of two value between 1 MB and 1 GB" -msgstr "" -"для -X требуется число, равное степени двух, в интервале от 1 МБ до 1 ГБ" - -#: bootstrap/bootstrap.c:295 postmaster/postmaster.c:844 -#: postmaster/postmaster.c:857 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 +#: postmaster/postmaster.c:759 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: bootstrap/bootstrap.c:304 +#: bootstrap/bootstrap.c:291 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: неверные аргументы командной строки\n" -#: catalog/aclchk.c:201 +#: catalog/aclchk.c:211 #, c-format msgid "grant options can only be granted to roles" msgstr "право назначения прав можно давать только ролям" -#: catalog/aclchk.c:323 +#: catalog/aclchk.c:333 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для столбца \"%s\" отношения \"%s\" не были назначены никакие права" -#: catalog/aclchk.c:328 +#: catalog/aclchk.c:338 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "для объекта \"%s\" не были назначены никакие права" -#: catalog/aclchk.c:336 +#: catalog/aclchk.c:346 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "" "для столбца \"%s\" отношения \"%s\" были назначены не все запрошенные права" -#: catalog/aclchk.c:341 +#: catalog/aclchk.c:351 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "для объекта \"%s\" были назначены не все запрошенные права" -#: catalog/aclchk.c:352 +#: catalog/aclchk.c:362 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для столбца \"%s\" отношения \"%s\" не были отозваны никакие права" -#: catalog/aclchk.c:357 +#: catalog/aclchk.c:367 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "для объекта \"%s\" не были отозваны никакие права" -#: catalog/aclchk.c:365 +#: catalog/aclchk.c:375 #, c-format msgid "" "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для столбца \"%s\" отношения \"%s\" были отозваны не все права" -#: catalog/aclchk.c:370 +#: catalog/aclchk.c:380 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "для объекта \"%s\" были отозваны не все права" -#: catalog/aclchk.c:402 +#: catalog/aclchk.c:412 #, c-format msgid "grantor must be current user" msgstr "праводателем должен быть текущий пользователь" -#: catalog/aclchk.c:470 catalog/aclchk.c:1045 +#: catalog/aclchk.c:480 catalog/aclchk.c:1055 #, c-format msgid "invalid privilege type %s for relation" msgstr "право %s неприменимо для отношений" -#: catalog/aclchk.c:474 catalog/aclchk.c:1049 +#: catalog/aclchk.c:484 catalog/aclchk.c:1059 #, c-format msgid "invalid privilege type %s for sequence" msgstr "право %s неприменимо для последовательностей" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:488 #, c-format msgid "invalid privilege type %s for database" msgstr "право %s неприменимо для баз данных" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:492 #, c-format msgid "invalid privilege type %s for domain" msgstr "право %s неприменимо для домена" -#: catalog/aclchk.c:486 catalog/aclchk.c:1053 +#: catalog/aclchk.c:496 catalog/aclchk.c:1063 #, c-format msgid "invalid privilege type %s for function" msgstr "право %s неприменимо для функций" -#: catalog/aclchk.c:490 +#: catalog/aclchk.c:500 #, c-format msgid "invalid privilege type %s for language" msgstr "право %s неприменимо для языков" -#: catalog/aclchk.c:494 +#: catalog/aclchk.c:504 #, c-format msgid "invalid privilege type %s for large object" msgstr "право %s неприменимо для больших объектов" -#: catalog/aclchk.c:498 catalog/aclchk.c:1069 +#: catalog/aclchk.c:508 catalog/aclchk.c:1079 #, c-format msgid "invalid privilege type %s for schema" msgstr "право %s неприменимо для схем" -#: catalog/aclchk.c:502 catalog/aclchk.c:1057 +#: catalog/aclchk.c:512 catalog/aclchk.c:1067 #, c-format msgid "invalid privilege type %s for procedure" msgstr "право %s неприменимо для процедур" -#: catalog/aclchk.c:506 catalog/aclchk.c:1061 +#: catalog/aclchk.c:516 catalog/aclchk.c:1071 #, c-format msgid "invalid privilege type %s for routine" msgstr "право %s неприменимо для подпрограмм" -#: catalog/aclchk.c:510 +#: catalog/aclchk.c:520 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "право %s неприменимо для табличных пространств" -#: catalog/aclchk.c:514 catalog/aclchk.c:1065 +#: catalog/aclchk.c:524 catalog/aclchk.c:1075 #, c-format msgid "invalid privilege type %s for type" msgstr "право %s неприменимо для типа" -#: catalog/aclchk.c:518 +#: catalog/aclchk.c:528 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "право %s неприменимо для обёрток сторонних данных" -#: catalog/aclchk.c:522 +#: catalog/aclchk.c:532 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "право %s неприменимо для сторонних серверов" -#: catalog/aclchk.c:526 +#: catalog/aclchk.c:536 #, c-format msgid "invalid privilege type %s for parameter" msgstr "неверный тип прав %s для параметра" -#: catalog/aclchk.c:565 +#: catalog/aclchk.c:575 #, c-format msgid "column privileges are only valid for relations" msgstr "права для столбцов применимы только к отношениям" -#: catalog/aclchk.c:728 catalog/aclchk.c:3555 catalog/objectaddress.c:1092 -#: catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:286 +#: 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:1102 +#: catalog/aclchk.c:1112 #, c-format msgid "default privileges cannot be set for columns" msgstr "права по умолчанию нельзя определить для столбцов" -#: catalog/aclchk.c:1138 +#: catalog/aclchk.c:1148 #, c-format msgid "permission denied to change default privileges" msgstr "нет полномочий для изменения прав доступа по умолчанию" -#: catalog/aclchk.c:1256 +#: 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:1595 catalog/catalog.c:631 catalog/objectaddress.c:1561 -#: catalog/pg_publication.c:533 commands/analyze.c:390 commands/copy.c:837 -#: commands/sequence.c:1663 commands/tablecmds.c:7342 commands/tablecmds.c:7498 -#: commands/tablecmds.c:7548 commands/tablecmds.c:7622 -#: commands/tablecmds.c:7692 commands/tablecmds.c:7808 -#: commands/tablecmds.c:7902 commands/tablecmds.c:7961 -#: commands/tablecmds.c:8050 commands/tablecmds.c:8080 -#: commands/tablecmds.c:8208 commands/tablecmds.c:8290 -#: commands/tablecmds.c:8424 commands/tablecmds.c:8536 -#: commands/tablecmds.c:12261 commands/tablecmds.c:12442 -#: commands/tablecmds.c:12603 commands/tablecmds.c:13798 -#: commands/tablecmds.c:16329 commands/trigger.c:949 parser/analyze.c:2529 -#: parser/parse_relation.c:737 parser/parse_target.c:1068 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3422 -#: parser/parse_utilcmd.c:3458 parser/parse_utilcmd.c:3500 utils/adt/acl.c:2876 -#: utils/adt/ruleutils.c:2797 +#: 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:1840 +#: catalog/aclchk.c:1862 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" - это индекс" -#: catalog/aclchk.c:1847 commands/tablecmds.c:13955 commands/tablecmds.c:17231 +#: 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:1855 catalog/objectaddress.c:1401 commands/sequence.c:1171 -#: commands/tablecmds.c:254 commands/tablecmds.c:17195 utils/adt/acl.c:2084 -#: utils/adt/acl.c:2114 utils/adt/acl.c:2146 utils/adt/acl.c:2178 -#: utils/adt/acl.c:2206 utils/adt/acl.c:2236 +#: 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:1893 +#: catalog/aclchk.c:1915 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "" "для последовательности \"%s\" применимы только права USAGE, SELECT и UPDATE" -#: catalog/aclchk.c:1910 +#: catalog/aclchk.c:1932 #, c-format msgid "invalid privilege type %s for table" msgstr "право %s неприменимо для таблиц" -#: catalog/aclchk.c:2072 +#: catalog/aclchk.c:2097 #, c-format msgid "invalid privilege type %s for column" msgstr "право %s неприменимо для столбцов" -#: catalog/aclchk.c:2085 +#: catalog/aclchk.c:2110 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "для последовательности \"%s\" применимо только право SELECT" # TO REVIEW -#: catalog/aclchk.c:2275 +#: catalog/aclchk.c:2301 #, c-format msgid "language \"%s\" is not trusted" msgstr "язык \"%s\" не является доверенным" -#: catalog/aclchk.c:2277 +#: catalog/aclchk.c:2303 #, c-format msgid "" "GRANT and REVOKE are not allowed on untrusted languages, because only " @@ -4594,400 +4989,411 @@ msgstr "" "GRANT и REVOKE не допускаются для недоверенных языков, так как использовать " "такие языки могут только суперпользователи." -#: catalog/aclchk.c:2427 +#: catalog/aclchk.c:2454 #, c-format msgid "cannot set privileges of array types" msgstr "для типов массивов нельзя определить права" -#: catalog/aclchk.c:2428 +#: catalog/aclchk.c:2455 #, c-format msgid "Set the privileges of the element type instead." msgstr "Вместо этого установите права для типа элемента." -#: catalog/aclchk.c:2435 catalog/objectaddress.c:1667 +#: catalog/aclchk.c:2459 +#, c-format +msgid "cannot set privileges of multirange types" +msgstr "для мультидиапазонных типов нельзя определить права" + +#: catalog/aclchk.c:2460 +#, c-format +msgid "Set the privileges of the range type instead." +msgstr "Вместо этого установите права для диапазонного типа." + +#: catalog/aclchk.c:2467 catalog/objectaddress.c:1629 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" - это не домен" -#: catalog/aclchk.c:2619 +#: catalog/aclchk.c:2653 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "нераспознанное право: \"%s\"" -#: catalog/aclchk.c:2684 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for aggregate %s" msgstr "нет доступа к агрегату %s" -#: catalog/aclchk.c:2687 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for collation %s" msgstr "нет доступа к правилу сортировки %s" -#: catalog/aclchk.c:2690 +#: catalog/aclchk.c:2726 #, c-format msgid "permission denied for column %s" msgstr "нет доступа к столбцу %s" -#: catalog/aclchk.c:2693 +#: catalog/aclchk.c:2729 #, c-format msgid "permission denied for conversion %s" msgstr "нет доступа к преобразованию %s" -#: catalog/aclchk.c:2696 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for database %s" msgstr "нет доступа к базе данных %s" -#: catalog/aclchk.c:2699 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for domain %s" msgstr "нет доступа к домену %s" -#: catalog/aclchk.c:2702 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for event trigger %s" msgstr "нет доступа к событийному триггеру %s" -#: catalog/aclchk.c:2705 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for extension %s" msgstr "нет доступа к расширению %s" -#: catalog/aclchk.c:2708 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "нет доступа к обёртке сторонних данных %s" -#: catalog/aclchk.c:2711 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for foreign server %s" msgstr "нет доступа к стороннему серверу %s" -#: catalog/aclchk.c:2714 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for foreign table %s" msgstr "нет доступа к сторонней таблице %s" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for function %s" msgstr "нет доступа к функции %s" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2756 #, c-format msgid "permission denied for index %s" msgstr "нет доступа к индексу %s" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2759 #, c-format msgid "permission denied for language %s" msgstr "нет доступа к языку %s" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2762 #, c-format msgid "permission denied for large object %s" msgstr "нет доступа к большому объекту %s" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2765 #, c-format msgid "permission denied for materialized view %s" msgstr "нет доступа к материализованному представлению %s" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2768 #, c-format msgid "permission denied for operator class %s" msgstr "нет доступа к классу операторов %s" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2771 #, c-format msgid "permission denied for operator %s" msgstr "нет доступа к оператору %s" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2774 #, c-format msgid "permission denied for operator family %s" msgstr "нет доступа к семейству операторов %s" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2777 #, c-format msgid "permission denied for parameter %s" msgstr "нет доступа к параметру %s" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2780 #, c-format msgid "permission denied for policy %s" msgstr "нет доступа к политике %s" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2783 #, c-format msgid "permission denied for procedure %s" msgstr "нет доступа к процедуре %s" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2786 #, c-format msgid "permission denied for publication %s" msgstr "нет доступа к публикации %s" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2789 #, c-format msgid "permission denied for routine %s" msgstr "нет доступа к подпрограмме %s" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2792 #, c-format msgid "permission denied for schema %s" msgstr "нет доступа к схеме %s" -#: catalog/aclchk.c:2759 commands/sequence.c:659 commands/sequence.c:885 -#: commands/sequence.c:927 commands/sequence.c:968 commands/sequence.c:1761 -#: commands/sequence.c:1810 +#: 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:2762 +#: catalog/aclchk.c:2798 #, c-format msgid "permission denied for statistics object %s" msgstr "нет доступа к объекту статистики %s" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2801 #, c-format msgid "permission denied for subscription %s" msgstr "нет доступа к подписке %s" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2804 #, c-format msgid "permission denied for table %s" msgstr "нет доступа к таблице %s" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2807 #, c-format msgid "permission denied for tablespace %s" msgstr "нет доступа к табличному пространству %s" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2810 #, c-format msgid "permission denied for text search configuration %s" msgstr "нет доступа к конфигурации текстового поиска %s" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2813 #, c-format msgid "permission denied for text search dictionary %s" msgstr "нет доступа к словарю текстового поиска %s" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2816 #, c-format msgid "permission denied for type %s" msgstr "нет доступа к типу %s" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2819 #, c-format msgid "permission denied for view %s" msgstr "нет доступа к представлению %s" -#: catalog/aclchk.c:2819 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of aggregate %s" msgstr "нужно быть владельцем агрегата %s" -#: catalog/aclchk.c:2822 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of collation %s" msgstr "нужно быть владельцем правила сортировки %s" -#: catalog/aclchk.c:2825 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of conversion %s" msgstr "нужно быть владельцем преобразования %s" -#: catalog/aclchk.c:2828 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of database %s" msgstr "нужно быть владельцем базы %s" -#: catalog/aclchk.c:2831 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of domain %s" msgstr "нужно быть владельцем домена %s" -#: catalog/aclchk.c:2834 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of event trigger %s" msgstr "нужно быть владельцем событийного триггера %s" -#: catalog/aclchk.c:2837 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of extension %s" msgstr "нужно быть владельцем расширения %s" -#: catalog/aclchk.c:2840 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "нужно быть владельцем обёртки сторонних данных %s" -#: catalog/aclchk.c:2843 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of foreign server %s" msgstr "нужно быть \"владельцем\" стороннего сервера %s" -#: catalog/aclchk.c:2846 +#: catalog/aclchk.c:2882 #, c-format msgid "must be owner of foreign table %s" msgstr "нужно быть владельцем сторонней таблицы %s" -#: catalog/aclchk.c:2849 +#: catalog/aclchk.c:2885 #, c-format msgid "must be owner of function %s" msgstr "нужно быть владельцем функции %s" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2888 #, c-format msgid "must be owner of index %s" msgstr "нужно быть владельцем индекса %s" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2891 #, c-format msgid "must be owner of language %s" msgstr "нужно быть владельцем языка %s" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2894 #, c-format msgid "must be owner of large object %s" msgstr "нужно быть владельцем большого объекта %s" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2897 #, c-format msgid "must be owner of materialized view %s" msgstr "нужно быть владельцем материализованного представления %s" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2900 #, c-format msgid "must be owner of operator class %s" msgstr "нужно быть владельцем класса операторов %s" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2903 #, c-format msgid "must be owner of operator %s" msgstr "нужно быть владельцем оператора %s" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2906 #, c-format msgid "must be owner of operator family %s" msgstr "нужно быть владельцем семейства операторов %s" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2909 #, c-format msgid "must be owner of procedure %s" msgstr "нужно быть владельцем процедуры %s" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2912 #, c-format msgid "must be owner of publication %s" msgstr "нужно быть владельцем публикации %s" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2915 #, c-format msgid "must be owner of routine %s" msgstr "нужно быть владельцем подпрограммы %s" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2918 #, c-format msgid "must be owner of sequence %s" msgstr "нужно быть владельцем последовательности %s" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2921 #, c-format msgid "must be owner of subscription %s" msgstr "нужно быть владельцем подписки %s" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2924 #, c-format msgid "must be owner of table %s" msgstr "нужно быть владельцем таблицы %s" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2927 #, c-format msgid "must be owner of type %s" msgstr "нужно быть владельцем типа %s" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2930 #, c-format msgid "must be owner of view %s" msgstr "нужно быть владельцем представления %s" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2933 #, c-format msgid "must be owner of schema %s" msgstr "нужно быть владельцем схемы %s" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2936 #, c-format msgid "must be owner of statistics object %s" msgstr "нужно быть владельцем объекта статистики %s" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2939 #, c-format msgid "must be owner of tablespace %s" msgstr "нужно быть владельцем табличного пространства %s" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2942 #, c-format msgid "must be owner of text search configuration %s" msgstr "нужно быть владельцем конфигурации текстового поиска %s" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2945 #, c-format msgid "must be owner of text search dictionary %s" msgstr "нужно быть владельцем словаря текстового поиска %s" -#: catalog/aclchk.c:2923 +#: catalog/aclchk.c:2959 #, c-format msgid "must be owner of relation %s" msgstr "нужно быть владельцем отношения %s" -#: catalog/aclchk.c:2969 +#: catalog/aclchk.c:3005 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "нет доступа к столбцу \"%s\" отношения \"%s\"" -#: catalog/aclchk.c:3104 catalog/aclchk.c:3984 catalog/aclchk.c:4015 +#: 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:3188 catalog/aclchk.c:3207 +#: catalog/aclchk.c:3245 catalog/aclchk.c:3264 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "атрибут %d отношения с OID %u не существует" -#: catalog/aclchk.c:3302 +#: 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:3476 +#: catalog/aclchk.c:3550 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "ACL параметра с OID %u не существует" -#: catalog/aclchk.c:3640 commands/collationcmds.c:813 -#: commands/publicationcmds.c:1746 +#: 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:3705 utils/cache/typcache.c:390 utils/cache/typcache.c:445 +#: 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:449 +#: catalog/catalog.c:477 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "продолжается поиск неиспользованного OID в отношении \"%s\"" -#: catalog/catalog.c:451 +#: catalog/catalog.c:479 #, c-format msgid "" "OID candidates have been checked %llu time, but no unused OID has been found " @@ -5005,7 +5411,7 @@ msgstr[2] "" "Потенциальные OID были проверены %llu раз, но неиспользуемые OID ещё не были " "найдены." -#: catalog/catalog.c:476 +#: 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" @@ -5013,57 +5419,57 @@ msgstr[0] "новый OID был назначен в отношении \"%s\" msgstr[1] "новый OID был назначен в отношении \"%s\" после %llu попыток" msgstr[2] "новый OID был назначен в отношении \"%s\" после %llu попыток" -#: catalog/catalog.c:609 catalog/catalog.c:676 +#: catalog/catalog.c:637 catalog/catalog.c:704 #, c-format msgid "must be superuser to call %s()" msgstr "вызывать %s() может только суперпользователь" -#: catalog/catalog.c:618 +#: catalog/catalog.c:646 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() можно использовать только для системных каталогов" -#: catalog/catalog.c:623 parser/parse_utilcmd.c:2273 +#: 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:640 +#: catalog/catalog.c:668 #, c-format msgid "column \"%s\" is not of type oid" msgstr "столбец \"%s\" имеет тип не oid" -#: catalog/catalog.c:647 +#: catalog/catalog.c:675 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "индекс \"%s\" не является индексом столбца \"%s\"" -#: catalog/dependency.c:553 catalog/pg_shdepend.c:658 +#: 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 нельзя, так как он нужен системе баз данных" -#: catalog/dependency.c:845 catalog/dependency.c:1072 +#: catalog/dependency.c:789 catalog/dependency.c:1016 #, c-format msgid "cannot drop %s because %s requires it" msgstr "удалить объект %s нельзя, так как он нужен объекту %s" -#: catalog/dependency.c:847 catalog/dependency.c:1074 +#: catalog/dependency.c:791 catalog/dependency.c:1018 #, c-format msgid "You can drop %s instead." msgstr "Однако можно удалить %s." -#: catalog/dependency.c:1153 catalog/dependency.c:1162 +#: catalog/dependency.c:1097 catalog/dependency.c:1106 #, c-format msgid "%s depends on %s" msgstr "%s зависит от объекта %s" -#: catalog/dependency.c:1177 catalog/dependency.c:1186 +#: catalog/dependency.c:1121 catalog/dependency.c:1130 #, c-format msgid "drop cascades to %s" msgstr "удаление распространяется на объект %s" -#: catalog/dependency.c:1194 catalog/pg_shdepend.c:823 +#: catalog/dependency.c:1138 catalog/pg_shdepend.c:868 #, c-format msgid "" "\n" @@ -5081,36 +5487,37 @@ msgstr[2] "" "\n" "и ещё %d объектов (см. список в протоколе сервера)" -#: catalog/dependency.c:1206 +#: catalog/dependency.c:1150 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "удалить объект %s нельзя, так как от него зависят другие объекты" -#: catalog/dependency.c:1209 catalog/dependency.c:1216 -#: catalog/dependency.c:1227 commands/tablecmds.c:1331 -#: commands/tablecmds.c:14442 commands/tablespace.c:466 commands/user.c:1303 -#: commands/vacuum.c:211 commands/view.c:446 libpq/auth.c:326 -#: replication/logical/applyparallelworker.c:1044 replication/syncrep.c:1017 -#: storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1366 utils/misc/guc.c:3122 -#: utils/misc/guc.c:3158 utils/misc/guc.c:3228 utils/misc/guc.c:6632 -#: utils/misc/guc.c:6666 utils/misc/guc.c:6700 utils/misc/guc.c:6743 -#: utils/misc/guc.c:6785 +#: 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" -#: catalog/dependency.c:1210 catalog/dependency.c:1217 +#: catalog/dependency.c:1154 catalog/dependency.c:1161 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Для удаления зависимых объектов используйте DROP ... CASCADE." -#: catalog/dependency.c:1214 +#: catalog/dependency.c:1158 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "" "удалить запрошенные объекты нельзя, так как от них зависят другие объекты" -#: catalog/dependency.c:1222 +#: catalog/dependency.c:1166 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" @@ -5118,61 +5525,61 @@ msgstr[0] "удаление распространяется на ещё %d об msgstr[1] "удаление распространяется на ещё %d объекта" msgstr[2] "удаление распространяется на ещё %d объектов" -#: catalog/dependency.c:1906 +#: catalog/dependency.c:1850 #, c-format msgid "constant of the type %s cannot be used here" msgstr "константу типа %s здесь использовать нельзя" -#: catalog/dependency.c:2431 parser/parse_relation.c:3413 -#: parser/parse_relation.c:3423 +#: 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\" не существует" -#: catalog/heap.c:324 +#: catalog/heap.c:325 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "нет прав для создания отношения \"%s.%s\"" -#: catalog/heap.c:326 +#: catalog/heap.c:327 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Изменение системного каталога в текущем состоянии запрещено." -#: catalog/heap.c:466 commands/tablecmds.c:2370 commands/tablecmds.c:3043 -#: commands/tablecmds.c:6925 +#: 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:484 commands/tablecmds.c:7232 +#: catalog/heap.c:485 commands/tablecmds.c:7432 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "имя столбца \"%s\" конфликтует с системным столбцом" -#: catalog/heap.c:500 +#: catalog/heap.c:501 #, c-format msgid "column name \"%s\" specified more than once" msgstr "имя столбца \"%s\" указано неоднократно" #. translator: first %s is an integer not a name -#: catalog/heap.c:578 +#: catalog/heap.c:579 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "столбец \"%s\" ключа разбиения имеет псевдотип %s" -#: catalog/heap.c:583 +#: catalog/heap.c:584 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "столбец \"%s\" имеет псевдотип %s" -#: catalog/heap.c:614 +#: catalog/heap.c:615 #, 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:669 +#: catalog/heap.c:670 #, c-format msgid "" "no collation was derived for partition key column %s with collatable type %s" @@ -5180,28 +5587,28 @@ msgstr "" "для входящего в ключ разбиения столбца \"%s\" с сортируемым типом %s не " "удалось получить правило сортировки" -#: catalog/heap.c:675 commands/createas.c:203 commands/createas.c:512 +#: 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 "" "для столбца \"%s\" с сортируемым типом %s не удалось получить правило " "сортировки" -#: catalog/heap.c:1151 catalog/index.c:887 commands/createas.c:408 -#: commands/tablecmds.c:3983 +#: 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\" уже существует" -#: catalog/heap.c:1167 catalog/pg_type.c:434 catalog/pg_type.c:782 -#: catalog/pg_type.c:954 commands/typecmds.c:249 commands/typecmds.c:261 -#: commands/typecmds.c:754 commands/typecmds.c:1169 commands/typecmds.c:1395 -#: commands/typecmds.c:1575 commands/typecmds.c:2546 +#: catalog/heap.c:1177 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 #, c-format msgid "type \"%s\" already exists" msgstr "тип \"%s\" уже существует" -#: catalog/heap.c:1168 +#: catalog/heap.c:1178 #, c-format msgid "" "A relation has an associated type of the same name, so you must use a name " @@ -5210,54 +5617,54 @@ msgstr "" "С отношением уже связан тип с таким же именем; выберите имя, не " "конфликтующее с существующими типами." -#: catalog/heap.c:1208 +#: catalog/heap.c:1218 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "" "значение relfilenumber для TOAST не задано в режиме двоичного обновления" -#: catalog/heap.c:1219 +#: catalog/heap.c:1229 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "значение OID кучи в pg_class не задано в режиме двоичного обновления" -#: catalog/heap.c:1229 +#: catalog/heap.c:1239 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "значение relfilenumber не задано в режиме двоичного обновления" -#: catalog/heap.c:2122 +#: catalog/heap.c:2130 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "" "добавить ограничение NO INHERIT к секционированной таблице \"%s\" нельзя" -#: catalog/heap.c:2397 +#: catalog/heap.c:2402 #, c-format msgid "check constraint \"%s\" already exists" msgstr "ограничение-проверка \"%s\" уже существует" -#: catalog/heap.c:2567 catalog/index.c:901 catalog/pg_constraint.c:682 -#: commands/tablecmds.c:8911 +#: 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:2574 +#: catalog/heap.c:2581 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2585 +#: catalog/heap.c:2592 #, c-format msgid "" "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с наследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2595 +#: catalog/heap.c:2602 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" @@ -5265,71 +5672,71 @@ msgstr "" "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "таблицы \"%s\"" -#: catalog/heap.c:2600 +#: catalog/heap.c:2607 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "слияние ограничения \"%s\" с унаследованным определением" -#: catalog/heap.c:2626 catalog/pg_constraint.c:811 commands/tablecmds.c:2668 -#: commands/tablecmds.c:3195 commands/tablecmds.c:6857 -#: commands/tablecmds.c:15264 commands/tablecmds.c:15405 +#: 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:2710 +#: catalog/heap.c:2717 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "" "использовать генерируемый столбец \"%s\" в выражении генерируемого столбца " "нельзя" -#: catalog/heap.c:2712 +#: catalog/heap.c:2719 #, c-format msgid "A generated column cannot reference another generated column." msgstr "" "Генерируемый столбец не может ссылаться на другой генерируемый столбец." -#: catalog/heap.c:2718 +#: catalog/heap.c:2725 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "" "в выражении генерируемого столбца нельзя использовать переменные «вся строка»" -#: catalog/heap.c:2719 +#: catalog/heap.c:2726 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "" "Это сделало бы генерируемый столбец зависимым от собственного значения." -#: catalog/heap.c:2774 +#: catalog/heap.c:2781 #, c-format msgid "generation expression is not immutable" msgstr "генерирующее выражение не является постоянным" -#: catalog/heap.c:2802 rewrite/rewriteHandler.c:1297 +#: 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:2807 commands/prepare.c:334 parser/analyze.c:2753 -#: parser/parse_target.c:593 parser/parse_target.c:883 -#: parser/parse_target.c:893 rewrite/rewriteHandler.c:1302 +#: 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:2854 +#: catalog/heap.c:2861 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в ограничении-проверке можно ссылаться только на таблицу \"%s\"" -#: catalog/heap.c:3160 +#: catalog/heap.c:3167 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "неподдерживаемое сочетание внешнего ключа с ON COMMIT" -#: catalog/heap.c:3161 +#: catalog/heap.c:3168 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -5337,501 +5744,501 @@ msgid "" msgstr "" "Таблица \"%s\" ссылается на \"%s\", и для них задан разный режим ON COMMIT." -#: catalog/heap.c:3166 +#: catalog/heap.c:3173 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "опустошить таблицу, на которую ссылается внешний ключ, нельзя" -#: catalog/heap.c:3167 +#: catalog/heap.c:3174 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблица \"%s\" ссылается на \"%s\"." -#: catalog/heap.c:3169 +#: 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:225 parser/parse_utilcmd.c:2179 +#: catalog/index.c:219 parser/parse_utilcmd.c:2176 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "таблица \"%s\" не может иметь несколько первичных ключей" -#: catalog/index.c:239 +#: catalog/index.c:233 #, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" msgstr "для первичных ключей нельзя использовать индексы с NULLS NOT DISTINCT" -#: catalog/index.c:256 +#: catalog/index.c:250 #, c-format msgid "primary keys cannot be expressions" msgstr "первичные ключи не могут быть выражениями" -#: catalog/index.c:273 +#: catalog/index.c:267 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "столбец первичного ключа \"%s\" не помечен как NOT NULL" -#: catalog/index.c:786 catalog/index.c:1942 +#: catalog/index.c:798 catalog/index.c:1915 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "" "пользовательские индексы в таблицах системного каталога не поддерживаются" -#: catalog/index.c:826 +#: catalog/index.c:838 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "" "недетерминированные правила сортировки не поддерживаются для класса " "операторов \"%s\"" -#: catalog/index.c:841 +#: catalog/index.c:853 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "" "параллельное создание индекса в таблицах системного каталога не " "поддерживается" -#: catalog/index.c:850 catalog/index.c:1318 +#: catalog/index.c:862 catalog/index.c:1331 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "" "параллельное создание индекса для ограничений-исключений не поддерживается" -#: catalog/index.c:859 +#: catalog/index.c:871 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "нельзя создать разделяемые индексы после initdb" -#: catalog/index.c:879 commands/createas.c:423 commands/sequence.c:158 +#: 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\" уже существует, пропускается" -#: catalog/index.c:929 +#: catalog/index.c:941 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "" "значение OID индекса в pg_class не задано в режиме двоичного обновления" -#: catalog/index.c:939 utils/cache/relcache.c:3731 +#: catalog/index.c:951 utils/cache/relcache.c:3791 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "" "значение relfilenumber для индекса не задано в режиме двоичного обновления" -#: catalog/index.c:2241 +#: catalog/index.c:2214 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY должен быть первым действием в транзакции" -#: catalog/index.c:3675 +#: catalog/index.c:3668 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "переиндексировать временные таблицы других сеансов нельзя" -#: catalog/index.c:3686 commands/indexcmds.c:3607 +#: catalog/index.c:3679 commands/indexcmds.c:3626 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "перестроить нерабочий индекс в таблице TOAST нельзя" -#: catalog/index.c:3702 commands/indexcmds.c:3487 commands/indexcmds.c:3631 -#: commands/tablecmds.c:3398 +#: 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:3846 +#: catalog/index.c:3832 #, c-format msgid "index \"%s\" was reindexed" msgstr "индекс \"%s\" был перестроен" -#: catalog/index.c:3983 +#: catalog/index.c:3998 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "" "перестроить нерабочий индекс \"%s.%s\" в таблице TOAST нельзя, он " "пропускается" -#: catalog/namespace.c:260 catalog/namespace.c:464 catalog/namespace.c:556 -#: commands/trigger.c:5736 +#: 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:317 +#: catalog/namespace.c:519 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "для временных таблиц имя схемы не указывается" -#: catalog/namespace.c:398 +#: catalog/namespace.c:600 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "не удалось получить блокировку таблицы \"%s.%s\"" -#: catalog/namespace.c:403 commands/lockcmds.c:144 commands/lockcmds.c:224 +#: 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:431 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:436 parser/parse_relation.c:1443 +#: 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:502 catalog/namespace.c:3073 commands/extension.c:1611 -#: commands/extension.c:1617 +#: 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:654 catalog/namespace.c:667 +#: catalog/namespace.c:856 catalog/namespace.c:869 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "во временных схемах других сеансов нельзя создавать отношения" -#: catalog/namespace.c:658 +#: catalog/namespace.c:860 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "создавать временные отношения можно только во временных схемах" -#: catalog/namespace.c:673 +#: catalog/namespace.c:875 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "во временных схемах можно создавать только временные отношения" -#: catalog/namespace.c:2265 +#: catalog/namespace.c:2619 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "объект статистики \"%s\" не существует" -#: catalog/namespace.c:2388 +#: catalog/namespace.c:2761 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "анализатор текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2514 utils/adt/regproc.c:1439 +#: catalog/namespace.c:2906 utils/adt/regproc.c:1459 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "словарь текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2641 +#: catalog/namespace.c:3052 #, c-format msgid "text search template \"%s\" does not exist" msgstr "шаблон текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2767 commands/tsearchcmds.c:1168 -#: utils/adt/regproc.c:1329 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:2880 parser/parse_expr.c:832 parser/parse_target.c:1260 +#: 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:2886 parser/parse_expr.c:839 parser/parse_target.c:1267 -#: gram.y:18569 gram.y:18609 +#: catalog/namespace.c:3335 parser/parse_expr.c:875 parser/parse_target.c:1266 +#: gram.y:19181 gram.y:19221 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" -#: catalog/namespace.c:3016 +#: catalog/namespace.c:3465 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "перемещать объекты в/из внутренних схем нельзя" -#: catalog/namespace.c:3022 +#: catalog/namespace.c:3471 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "перемещать объекты в/из схем TOAST нельзя" -#: catalog/namespace.c:3095 commands/schemacmds.c:264 commands/schemacmds.c:344 -#: commands/tablecmds.c:1276 utils/adt/regproc.c:1668 +#: 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:3126 +#: catalog/namespace.c:3575 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неверное имя отношения (слишком много компонентов): %s" -#: catalog/namespace.c:3693 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:3748 +#: catalog/namespace.c:4071 #, c-format msgid "conversion \"%s\" does not exist" msgstr "преобразование \"%s\" не существует" -#: catalog/namespace.c:4012 +#: catalog/namespace.c:4412 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "нет прав для создания временных таблиц в базе \"%s\"" -#: catalog/namespace.c:4028 +#: catalog/namespace.c:4428 #, c-format msgid "cannot create temporary tables during recovery" msgstr "создавать временные таблицы в процессе восстановления нельзя" -#: catalog/namespace.c:4034 +#: catalog/namespace.c:4434 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "создавать временные таблицы во время параллельных операций нельзя" -#: catalog/objectaddress.c:1409 commands/policy.c:96 commands/policy.c:376 -#: commands/tablecmds.c:248 commands/tablecmds.c:290 commands/tablecmds.c:2202 -#: commands/tablecmds.c:12378 +#: 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:1416 commands/tablecmds.c:260 -#: commands/tablecmds.c:17200 commands/view.c:119 +#: 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:1423 commands/matview.c:186 commands/tablecmds.c:266 -#: commands/tablecmds.c:17205 +#: 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:1430 commands/tablecmds.c:284 -#: commands/tablecmds.c:17210 +#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 +#: commands/tablecmds.c:17861 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" - это не сторонняя таблица" -#: catalog/objectaddress.c:1471 +#: catalog/objectaddress.c:1433 #, c-format msgid "must specify relation and object name" msgstr "необходимо указать имя отношения и объекта" -#: catalog/objectaddress.c:1547 catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 #, c-format msgid "column name must be qualified" msgstr "имя столбца нужно указать в полной форме" -#: catalog/objectaddress.c:1619 +#: catalog/objectaddress.c:1581 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "" "значение по умолчанию для столбца \"%s\" отношения \"%s\" не существует" -#: catalog/objectaddress.c:1656 commands/functioncmds.c:137 -#: commands/tablecmds.c:276 commands/typecmds.c:274 commands/typecmds.c:3691 +#: 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:4441 +#: utils/adt/acl.c:4560 #, c-format msgid "type \"%s\" does not exist" msgstr "тип \"%s\" не существует" -#: catalog/objectaddress.c:1775 +#: catalog/objectaddress.c:1737 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "оператор %d (%s, %s) из семейства %s не существует" -#: catalog/objectaddress.c:1806 +#: catalog/objectaddress.c:1768 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "функция %d (%s, %s) из семейства %s не существует" -#: catalog/objectaddress.c:1857 catalog/objectaddress.c:1883 +#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "сопоставление для пользователя \"%s\" на сервере \"%s\" не существует" -#: catalog/objectaddress.c:1872 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:700 +#: 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\" не существует" -#: catalog/objectaddress.c:1939 +#: catalog/objectaddress.c:1901 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "публикуемое отношение \"%s\" в публикации \"%s\" не существует" -#: catalog/objectaddress.c:1986 +#: catalog/objectaddress.c:1948 #, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" msgstr "публикуемая схема \"%s\" в публикации \"%s\" не существует" -#: catalog/objectaddress.c:2044 +#: catalog/objectaddress.c:2006 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "нераспознанный тип объекта ACL по умолчанию: \"%c\"" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2007 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Допустимые типы объектов: \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:2096 +#: catalog/objectaddress.c:2058 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "" "ACL по умолчанию для пользователя \"%s\" в схеме \"%s\" для объекта %s не " "существует" -#: catalog/objectaddress.c:2101 +#: catalog/objectaddress.c:2063 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "" "ACL по умолчанию для пользователя \"%s\" и для объекта %s не существует" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2184 -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2201 #, c-format msgid "name or argument lists may not contain nulls" msgstr "списки имён и аргументов не должны содержать NULL" -#: catalog/objectaddress.c:2161 +#: catalog/objectaddress.c:2123 #, c-format msgid "unsupported object type \"%s\"" msgstr "неподдерживаемый тип объекта: \"%s\"" -#: catalog/objectaddress.c:2180 catalog/objectaddress.c:2197 -#: catalog/objectaddress.c:2262 catalog/objectaddress.c:2346 +#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 +#: catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 #, c-format msgid "name list length must be exactly %d" msgstr "длина списка имён должна быть равна %d" -#: catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2163 #, c-format msgid "large object OID may not be null" msgstr "OID большого объекта не может быть NULL" -#: catalog/objectaddress.c:2210 catalog/objectaddress.c:2280 -#: catalog/objectaddress.c:2287 +#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 +#: catalog/objectaddress.c:2249 #, c-format msgid "name list length must be at least %d" msgstr "длина списка аргументов должна быть не меньше %d" -#: catalog/objectaddress.c:2273 catalog/objectaddress.c:2294 +#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 #, c-format msgid "argument list length must be exactly %d" msgstr "длина списка аргументов должна быть равна %d" -#: catalog/objectaddress.c:2508 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 #, c-format msgid "must be owner of large object %u" msgstr "нужно быть владельцем большого объекта %u" -#: catalog/objectaddress.c:2523 commands/functioncmds.c:1561 +#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 #, c-format msgid "must be owner of type %s or type %s" msgstr "это разрешено только владельцу типа %s или %s" -#: catalog/objectaddress.c:2550 catalog/objectaddress.c:2559 -#: catalog/objectaddress.c:2565 +#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 +#: catalog/objectaddress.c:2527 #, c-format msgid "permission denied" msgstr "нет доступа" -#: catalog/objectaddress.c:2551 catalog/objectaddress.c:2560 +#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 #, c-format msgid "The current user must have the %s attribute." msgstr "Текущий пользователь должен иметь атрибут %s." -#: catalog/objectaddress.c:2566 +#: catalog/objectaddress.c:2528 #, c-format msgid "The current user must have the %s option on role \"%s\"." msgstr "Текущий пользователь должен иметь привилегию %s для роли \"%s\"." -#: catalog/objectaddress.c:2580 +#: catalog/objectaddress.c:2542 #, c-format msgid "must be superuser" msgstr "требуются права суперпользователя" -#: catalog/objectaddress.c:2649 +#: catalog/objectaddress.c:2611 #, c-format msgid "unrecognized object type \"%s\"" msgstr "нераспознанный тип объекта \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2941 +#: catalog/objectaddress.c:2928 #, c-format msgid "column %s of %s" msgstr "столбец %s отношения %s" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2943 #, c-format msgid "function %s" msgstr "функция %s" -#: catalog/objectaddress.c:2969 +#: catalog/objectaddress.c:2956 #, c-format msgid "type %s" msgstr "тип %s" -#: catalog/objectaddress.c:3006 +#: catalog/objectaddress.c:2993 #, c-format msgid "cast from %s to %s" msgstr "приведение %s к %s" -#: catalog/objectaddress.c:3039 +#: catalog/objectaddress.c:3026 #, c-format msgid "collation %s" msgstr "правило сортировки %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3057 #, c-format msgid "constraint %s on %s" msgstr "ограничение %s в отношении %s" -#: catalog/objectaddress.c:3076 +#: catalog/objectaddress.c:3063 #, c-format msgid "constraint %s" msgstr "ограничение %s" -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3095 #, c-format msgid "conversion %s" msgstr "преобразование %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3130 +#: catalog/objectaddress.c:3117 #, c-format msgid "default value for %s" msgstr "значение по умолчанию для %s" -#: catalog/objectaddress.c:3141 +#: catalog/objectaddress.c:3128 #, c-format msgid "language %s" msgstr "язык %s" -#: catalog/objectaddress.c:3149 +#: catalog/objectaddress.c:3136 #, c-format msgid "large object %u" msgstr "большой объект %u" -#: catalog/objectaddress.c:3162 +#: catalog/objectaddress.c:3149 #, c-format msgid "operator %s" msgstr "оператор %s" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3186 #, c-format msgid "operator class %s for access method %s" msgstr "класс операторов %s для метода доступа %s" -#: catalog/objectaddress.c:3227 +#: catalog/objectaddress.c:3214 #, c-format msgid "access method %s" msgstr "метод доступа %s" @@ -5840,7 +6247,7 @@ msgstr "метод доступа %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3276 +#: catalog/objectaddress.c:3269 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "оператор %d (%s, %s) из семейства \"%s\": %s" @@ -5849,241 +6256,241 @@ msgstr "оператор %d (%s, %s) из семейства \"%s\": %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3333 +#: catalog/objectaddress.c:3334 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "функция %d (%s, %s) из семейства \"%s\": %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3385 +#: 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:3431 +#: catalog/objectaddress.c:3434 #, c-format msgid "trigger %s on %s" msgstr "триггер %s в отношении %s" -#: catalog/objectaddress.c:3451 +#: catalog/objectaddress.c:3454 #, c-format msgid "schema %s" msgstr "схема %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3482 #, c-format msgid "statistics object %s" msgstr "объект статистики %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3513 #, c-format msgid "text search parser %s" msgstr "анализатор текстового поиска %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3544 #, c-format msgid "text search dictionary %s" msgstr "словарь текстового поиска %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3575 #, c-format msgid "text search template %s" msgstr "шаблон текстового поиска %s" -#: catalog/objectaddress.c:3603 +#: catalog/objectaddress.c:3606 #, c-format msgid "text search configuration %s" msgstr "конфигурация текстового поиска %s" -#: catalog/objectaddress.c:3616 +#: catalog/objectaddress.c:3619 #, c-format msgid "role %s" msgstr "роль %s" -#: catalog/objectaddress.c:3653 catalog/objectaddress.c:5505 +#: catalog/objectaddress.c:3656 catalog/objectaddress.c:5505 #, c-format msgid "membership of role %s in role %s" msgstr "членство роли %s в роли %s" -#: catalog/objectaddress.c:3674 +#: catalog/objectaddress.c:3677 #, c-format msgid "database %s" msgstr "база данных %s" -#: catalog/objectaddress.c:3690 +#: catalog/objectaddress.c:3693 #, c-format msgid "tablespace %s" msgstr "табличное пространство %s" -#: catalog/objectaddress.c:3701 +#: catalog/objectaddress.c:3704 #, c-format msgid "foreign-data wrapper %s" msgstr "обёртка сторонних данных %s" -#: catalog/objectaddress.c:3711 +#: catalog/objectaddress.c:3714 #, c-format msgid "server %s" msgstr "сервер %s" -#: catalog/objectaddress.c:3744 +#: catalog/objectaddress.c:3747 #, c-format msgid "user mapping for %s on server %s" msgstr "сопоставление для пользователя %s на сервере %s" -#: catalog/objectaddress.c:3796 +#: 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:3800 +#: catalog/objectaddress.c:3803 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "права по умолчанию для новых отношений, принадлежащих роли %s" -#: catalog/objectaddress.c:3806 +#: 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:3810 +#: catalog/objectaddress.c:3813 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "" "права по умолчанию для новых последовательностей, принадлежащих роли %s" -#: catalog/objectaddress.c:3816 +#: 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:3820 +#: catalog/objectaddress.c:3823 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "права по умолчанию для новых функций, принадлежащих роли %s" -#: catalog/objectaddress.c:3826 +#: 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:3830 +#: catalog/objectaddress.c:3833 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "права по умолчанию для новых типов, принадлежащих роли %s" -#: catalog/objectaddress.c:3836 +#: catalog/objectaddress.c:3839 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "права по умолчанию для новых схем, принадлежащих роли %s" -#: catalog/objectaddress.c:3843 +#: catalog/objectaddress.c:3846 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых объектов, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3847 +#: catalog/objectaddress.c:3850 #, c-format msgid "default privileges belonging to role %s" msgstr "права по умолчанию для новых объектов, принадлежащих роли %s" -#: catalog/objectaddress.c:3869 +#: catalog/objectaddress.c:3872 #, c-format msgid "extension %s" msgstr "расширение %s" -#: catalog/objectaddress.c:3886 +#: catalog/objectaddress.c:3889 #, c-format msgid "event trigger %s" msgstr "событийный триггер %s" -#: catalog/objectaddress.c:3910 +#: catalog/objectaddress.c:3913 #, c-format msgid "parameter %s" msgstr "параметр %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3953 +#: catalog/objectaddress.c:3956 #, c-format msgid "policy %s on %s" msgstr "политика %s отношения %s" -#: catalog/objectaddress.c:3967 +#: catalog/objectaddress.c:3970 #, c-format msgid "publication %s" msgstr "публикация %s" -#: catalog/objectaddress.c:3980 +#: 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:4011 +#: catalog/objectaddress.c:4014 #, c-format msgid "publication of %s in publication %s" msgstr "публикуемое отношение %s в публикации %s" -#: catalog/objectaddress.c:4024 +#: catalog/objectaddress.c:4027 #, c-format msgid "subscription %s" msgstr "подписка %s" -#: catalog/objectaddress.c:4045 +#: catalog/objectaddress.c:4048 #, c-format msgid "transform for %s language %s" msgstr "преобразование для %s, языка %s" -#: catalog/objectaddress.c:4116 +#: catalog/objectaddress.c:4117 #, c-format msgid "table %s" msgstr "таблица %s" -#: catalog/objectaddress.c:4121 +#: catalog/objectaddress.c:4122 #, c-format msgid "index %s" msgstr "индекс %s" -#: catalog/objectaddress.c:4125 +#: catalog/objectaddress.c:4126 #, c-format msgid "sequence %s" msgstr "последовательность %s" -#: catalog/objectaddress.c:4129 +#: catalog/objectaddress.c:4130 #, c-format msgid "toast table %s" msgstr "TOAST-таблица %s" -#: catalog/objectaddress.c:4133 +#: catalog/objectaddress.c:4134 #, c-format msgid "view %s" msgstr "представление %s" -#: catalog/objectaddress.c:4137 +#: catalog/objectaddress.c:4138 #, c-format msgid "materialized view %s" msgstr "материализованное представление %s" -#: catalog/objectaddress.c:4141 +#: catalog/objectaddress.c:4142 #, c-format msgid "composite type %s" msgstr "составной тип %s" -#: catalog/objectaddress.c:4145 +#: catalog/objectaddress.c:4146 #, c-format msgid "foreign table %s" msgstr "сторонняя таблица %s" -#: catalog/objectaddress.c:4150 +#: catalog/objectaddress.c:4151 #, c-format msgid "relation %s" msgstr "отношение %s" -#: catalog/objectaddress.c:4191 +#: catalog/objectaddress.c:4192 #, c-format msgid "operator family %s for access method %s" msgstr "семейство операторов %s для метода доступа %s" @@ -6136,7 +6543,7 @@ msgstr "" msgid "return type of inverse transition function %s is not %s" msgstr "обратная функция перехода %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:3009 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2991 #, c-format msgid "" "strictness of aggregate's forward and inverse transition functions must match" @@ -6155,7 +6562,7 @@ msgstr "" msgid "return type of combine function %s is not %s" msgstr "комбинирующая функция %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3903 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3902 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "" @@ -6172,12 +6579,12 @@ msgstr "функция сериализации %s должна возвраща msgid "return type of deserialization function %s is not %s" msgstr "функция десериализации %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:191 catalog/pg_proc.c:225 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "не удалось определить тип результата" -#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:204 catalog/pg_proc.c:233 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "небезопасное использование псевдотипа \"internal\"" @@ -6198,7 +6605,7 @@ msgstr "" "оператор сортировки можно указать только для агрегатных функций с одним " "аргументом" -#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:386 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "тип подпрограммы изменить нельзя" @@ -6223,13 +6630,13 @@ msgstr "\"%s\" — гипотезирующая агрегатная функц msgid "cannot change number of direct arguments of an aggregate function" msgstr "изменить число непосредственных аргументов агрегатной функции нельзя" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:691 -#: commands/typecmds.c:1975 commands/typecmds.c:2021 commands/typecmds.c:2073 -#: commands/typecmds.c:2110 commands/typecmds.c:2144 commands/typecmds.c:2178 -#: commands/typecmds.c:2212 commands/typecmds.c:2241 commands/typecmds.c:2328 -#: commands/typecmds.c:2370 parser/parse_func.c:417 parser/parse_func.c:448 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:686 +#: commands/typecmds.c:1985 commands/typecmds.c:2031 commands/typecmds.c:2083 +#: commands/typecmds.c:2120 commands/typecmds.c:2154 commands/typecmds.c:2188 +#: commands/typecmds.c:2222 commands/typecmds.c:2251 commands/typecmds.c:2338 +#: commands/typecmds.c:2380 parser/parse_func.c:417 parser/parse_func.c:448 #: parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 -#: parser/parse_func.c:631 parser/parse_func.c:2171 parser/parse_func.c:2444 +#: parser/parse_func.c:631 parser/parse_func.c:2172 parser/parse_func.c:2445 #, c-format msgid "function %s does not exist" msgstr "функция %s не существует" @@ -6306,69 +6713,69 @@ msgstr "Эта операция не поддерживается для сек msgid "This operation is not supported for partitioned indexes." msgstr "Эта операция не поддерживается для секционированных индексов." -#: catalog/pg_collation.c:102 catalog/pg_collation.c:160 +#: catalog/pg_collation.c:101 catalog/pg_collation.c:159 #, c-format msgid "collation \"%s\" already exists, skipping" msgstr "правило сортировки \"%s\" уже существует, пропускается" -#: catalog/pg_collation.c:104 +#: catalog/pg_collation.c:103 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" msgstr "" "правило сортировки \"%s\" для кодировки \"%s\" уже существует, пропускается" -#: catalog/pg_collation.c:112 catalog/pg_collation.c:167 +#: catalog/pg_collation.c:111 catalog/pg_collation.c:166 #, c-format msgid "collation \"%s\" already exists" msgstr "правило сортировки \"%s\" уже существует" -#: catalog/pg_collation.c:114 +#: catalog/pg_collation.c:113 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "правило сортировки \"%s\" для кодировки \"%s\" уже существует" -#: catalog/pg_constraint.c:690 +#: catalog/pg_constraint.c:732 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "ограничение \"%s\" для домена %s уже существует" -#: catalog/pg_constraint.c:890 catalog/pg_constraint.c:983 +#: catalog/pg_constraint.c:932 catalog/pg_constraint.c:1025 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "ограничение \"%s\" для таблицы \"%s\" не существует" -#: catalog/pg_constraint.c:1083 +#: catalog/pg_constraint.c:1125 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "ограничение \"%s\" для домена %s не существует" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:64 #, c-format msgid "conversion \"%s\" already exists" msgstr "преобразование \"%s\" уже существует" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:77 #, c-format msgid "default conversion for %s to %s already exists" msgstr "преобразование по умолчанию из %s в %s уже существует" -#: catalog/pg_depend.c:222 commands/extension.c:3368 +#: catalog/pg_depend.c:224 commands/extension.c:3397 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s уже относится к расширению \"%s\"" -#: catalog/pg_depend.c:229 catalog/pg_depend.c:280 commands/extension.c:3408 +#: catalog/pg_depend.c:231 catalog/pg_depend.c:282 commands/extension.c:3437 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s не относится к расширению \"%s\"" -#: catalog/pg_depend.c:232 +#: catalog/pg_depend.c:234 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "" "Расширениям не разрешается заменять объекты, которые им не принадлежат." -#: catalog/pg_depend.c:283 +#: catalog/pg_depend.c:285 #, c-format msgid "" "An extension may only use CREATE ... IF NOT EXISTS to skip object creation " @@ -6377,55 +6784,55 @@ msgstr "" "Расширение может выполнять CREATE ... IF NOT EXISTS только для того, чтобы " "не создавать объект, когда оно уже владеет конфликтующим объектом." -#: catalog/pg_depend.c:646 +#: catalog/pg_depend.c:648 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "" "ликвидировать зависимость от объекта %s нельзя, так как это системный объект" -#: catalog/pg_enum.c:137 catalog/pg_enum.c:259 catalog/pg_enum.c:554 +#: catalog/pg_enum.c:175 catalog/pg_enum.c:314 catalog/pg_enum.c:624 #, c-format msgid "invalid enum label \"%s\"" msgstr "неверная метка в перечислении \"%s\"" -#: catalog/pg_enum.c:138 catalog/pg_enum.c:260 catalog/pg_enum.c:555 +#: catalog/pg_enum.c:176 catalog/pg_enum.c:315 catalog/pg_enum.c:625 #, c-format msgid "Labels must be %d bytes or less." msgstr "Длина метки не должна превышать %d байт." -#: catalog/pg_enum.c:288 +#: catalog/pg_enum.c:343 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "метка перечисления \"%s\" уже существует, пропускается" -#: catalog/pg_enum.c:295 catalog/pg_enum.c:598 +#: catalog/pg_enum.c:350 catalog/pg_enum.c:668 #, c-format msgid "enum label \"%s\" already exists" msgstr "метка перечисления \"%s\" уже существует" -#: catalog/pg_enum.c:350 catalog/pg_enum.c:593 +#: catalog/pg_enum.c:405 catalog/pg_enum.c:663 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "в перечислении нет метки\"%s\"" -#: catalog/pg_enum.c:408 +#: catalog/pg_enum.c:463 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "значение OID в pg_enum не задано в режиме двоичного обновления" -#: catalog/pg_enum.c:418 +#: catalog/pg_enum.c:473 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "" "конструкция ALTER TYPE ADD BEFORE/AFTER несовместима с двоичным обновлением " "данных" -#: catalog/pg_inherits.c:593 +#: catalog/pg_inherits.c:592 #, c-format msgid "cannot detach partition \"%s\"" msgstr "отсоединить секцию \"%s\" нельзя" -#: catalog/pg_inherits.c:595 +#: catalog/pg_inherits.c:594 #, c-format msgid "" "The partition is being detached concurrently or has an unfinished detach." @@ -6433,8 +6840,8 @@ msgstr "" "Эта секция отсоединяется параллельно или для неё не была завершена операция " "отсоединения." -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4579 -#: commands/tablecmds.c:15520 +#: 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 " @@ -6443,12 +6850,12 @@ msgstr "" "Чтобы завершить неоконченную операцию отсоединения, выполните команду ALTER " "TABLE ... DETACH PARTITION ... FINALIZE." -#: catalog/pg_inherits.c:600 +#: catalog/pg_inherits.c:599 #, c-format msgid "cannot complete detaching partition \"%s\"" msgstr "завершить отсоединение секции \"%s\" нельзя" -#: catalog/pg_inherits.c:602 +#: catalog/pg_inherits.c:601 #, c-format msgid "There's no pending concurrent detach." msgstr "На данный момент все операции отсоединения завершены." @@ -6458,84 +6865,98 @@ msgstr "На данный момент все операции отсоедин msgid "schema \"%s\" already exists" msgstr "схема \"%s\" уже существует" -#: catalog/pg_operator.c:219 catalog/pg_operator.c:361 +#: catalog/pg_operator.c:213 catalog/pg_operator.c:355 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "имя \"%s\" недопустимо для оператора" -#: catalog/pg_operator.c:370 +#: catalog/pg_operator.c:379 +#, c-format +msgid "operator %s already exists" +msgstr "оператор %s уже существует" + +#: catalog/pg_operator.c:445 commands/operatorcmds.c:600 +#, c-format +msgid "operator cannot be its own negator" +msgstr "оператор не может быть обратным к себе" + +#: catalog/pg_operator.c:572 #, c-format msgid "only binary operators can have commutators" msgstr "коммутативную операцию можно определить только для бинарных операторов" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:509 +#: catalog/pg_operator.c:576 #, c-format msgid "only binary operators can have join selectivity" msgstr "" "функцию оценки соединения можно определить только для бинарных операторов" -#: catalog/pg_operator.c:378 +#: catalog/pg_operator.c:580 #, c-format msgid "only binary operators can merge join" msgstr "" "поддержку соединения слиянием можно обозначить только для бинарных операторов" -#: catalog/pg_operator.c:382 +#: catalog/pg_operator.c:584 #, c-format msgid "only binary operators can hash" msgstr "поддержку хеша можно обозначить только для бинарных операторов" -#: catalog/pg_operator.c:393 +#: catalog/pg_operator.c:593 #, c-format msgid "only boolean operators can have negators" msgstr "обратную операцию можно определить только для логических операторов" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:517 +#: catalog/pg_operator.c:597 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "" "функцию оценки ограничения можно определить только для логических операторов" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:521 +#: catalog/pg_operator.c:601 #, c-format msgid "only boolean operators can have join selectivity" msgstr "" "функцию оценки соединения можно определить только для логических операторов" -#: catalog/pg_operator.c:405 +#: catalog/pg_operator.c:605 #, c-format msgid "only boolean operators can merge join" msgstr "" "поддержку соединения слиянием можно обозначить только для логических " "операторов" -#: catalog/pg_operator.c:409 +#: catalog/pg_operator.c:609 #, c-format msgid "only boolean operators can hash" msgstr "поддержку хеша можно обозначить только для логических операторов" -#: catalog/pg_operator.c:421 +#: catalog/pg_operator.c:739 #, c-format -msgid "operator %s already exists" -msgstr "оператор %s уже существует" +msgid "commutator operator %s is already the commutator of operator %s" +msgstr "коммутирующий оператор %s уже является коммутирующим для оператора %s" -#: catalog/pg_operator.c:621 +#: catalog/pg_operator.c:744 #, c-format -msgid "operator cannot be its own negator or sort operator" -msgstr "" -"оператор не может быть обратным к себе или собственным оператором сортировки" +msgid "commutator operator %s is already the commutator of operator %u" +msgstr "коммутирующий оператор %s уже является коммутирующим для оператора %u" -#: catalog/pg_parameter_acl.c:53 +#: catalog/pg_operator.c:807 #, c-format -msgid "parameter ACL \"%s\" does not exist" -msgstr "ACL параметра \"%s\" не существует" +msgid "negator operator %s is already the negator of operator %s" +msgstr "обратный оператор %s уже является обратным для оператора %s" + +#: catalog/pg_operator.c:812 +#, c-format +msgid "negator operator %s is already the negator of operator %u" +msgstr "обратный оператор %s уже является обратным для оператора %u" -#: catalog/pg_parameter_acl.c:88 +#: catalog/pg_parameter_acl.c:50 #, c-format -msgid "invalid parameter name \"%s\"" -msgstr "неверное имя параметра \"%s\"" +msgid "parameter ACL \"%s\" does not exist" +msgstr "ACL параметра \"%s\" не существует" -#: catalog/pg_proc.c:132 parser/parse_func.c:2233 +#: catalog/pg_proc.c:130 parser/parse_func.c:2234 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -6543,37 +6964,37 @@ msgstr[0] "функции не могут иметь больше %d аргум msgstr[1] "функции не могут иметь больше %d аргументов" msgstr[2] "функции не могут иметь больше %d аргументов" -#: catalog/pg_proc.c:376 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "функция \"%s\" с аргументами таких типов уже существует" -#: catalog/pg_proc.c:388 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\" — агрегатная функция." -#: catalog/pg_proc.c:390 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\" — функция." -#: catalog/pg_proc.c:392 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\" — процедура." -#: catalog/pg_proc.c:394 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "\"%s\" — оконная функция." -#: catalog/pg_proc.c:414 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "определить выходные параметры для процедуры нельзя" -#: catalog/pg_proc.c:415 catalog/pg_proc.c:445 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "изменить тип возврата существующей функции нельзя" @@ -6582,118 +7003,118 @@ msgstr "изменить тип возврата существующей фун #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:421 catalog/pg_proc.c:448 catalog/pg_proc.c:493 -#: catalog/pg_proc.c:519 catalog/pg_proc.c:543 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 +#: catalog/pg_proc.c:517 catalog/pg_proc.c:541 #, c-format msgid "Use %s %s first." msgstr "Сначала выполните %s %s." -#: catalog/pg_proc.c:446 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Параметры OUT определяют другой тип строки." -#: catalog/pg_proc.c:490 +#: catalog/pg_proc.c:488 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "изменить имя входного параметра \"%s\" нельзя" -#: catalog/pg_proc.c:517 +#: catalog/pg_proc.c:515 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "" "для существующей функции нельзя убрать значения параметров по умолчанию" -#: catalog/pg_proc.c:541 +#: catalog/pg_proc.c:539 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "" "для существующего значения параметра по умолчанию нельзя изменить тип данных" -#: catalog/pg_proc.c:752 +#: catalog/pg_proc.c:750 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "встроенной функции \"%s\" нет" -#: catalog/pg_proc.c:845 +#: catalog/pg_proc.c:843 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL-функции не могут возвращать тип %s" -#: catalog/pg_proc.c:860 +#: catalog/pg_proc.c:858 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL-функции не могут иметь аргументы типа %s" -#: catalog/pg_proc.c:988 executor/functions.c:1467 +#: catalog/pg_proc.c:986 executor/functions.c:1468 #, c-format msgid "SQL function \"%s\"" msgstr "SQL-функция \"%s\"" -#: catalog/pg_publication.c:71 catalog/pg_publication.c:79 -#: catalog/pg_publication.c:87 catalog/pg_publication.c:93 +#: catalog/pg_publication.c:66 catalog/pg_publication.c:74 +#: catalog/pg_publication.c:82 catalog/pg_publication.c:88 #, c-format msgid "cannot add relation \"%s\" to publication" msgstr "добавить отношение \"%s\" в публикацию нельзя" -#: catalog/pg_publication.c:81 +#: catalog/pg_publication.c:76 #, c-format msgid "This operation is not supported for system tables." msgstr "Эта операция не поддерживается для системных таблиц." -#: catalog/pg_publication.c:89 +#: catalog/pg_publication.c:84 #, c-format msgid "This operation is not supported for temporary tables." msgstr "Эта операция не поддерживается для временных таблиц." -#: catalog/pg_publication.c:95 +#: catalog/pg_publication.c:90 #, c-format msgid "This operation is not supported for unlogged tables." msgstr "Эта операция не поддерживается для нежурналируемых таблиц." -#: catalog/pg_publication.c:109 catalog/pg_publication.c:117 +#: catalog/pg_publication.c:104 catalog/pg_publication.c:112 #, c-format msgid "cannot add schema \"%s\" to publication" msgstr "добавить схему \"%s\" в публикацию нельзя" -#: catalog/pg_publication.c:111 +#: catalog/pg_publication.c:106 #, c-format msgid "This operation is not supported for system schemas." msgstr "Эта операция не поддерживается для системных схем." -#: catalog/pg_publication.c:119 +#: catalog/pg_publication.c:114 #, c-format msgid "Temporary schemas cannot be replicated." msgstr "Временные схемы нельзя реплицировать." -#: catalog/pg_publication.c:397 +#: catalog/pg_publication.c:392 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "отношение \"%s\" уже включено в публикацию \"%s\"" -#: catalog/pg_publication.c:539 +#: catalog/pg_publication.c:534 #, c-format msgid "cannot use system column \"%s\" in publication column list" msgstr "" "в списке публикуемых столбцов нельзя использовать системный столбец \"%s\"" -#: catalog/pg_publication.c:545 +#: catalog/pg_publication.c:540 #, c-format msgid "cannot use generated column \"%s\" in publication column list" msgstr "" "в списке публикуемых столбцов нельзя использовать генерируемый столбец \"%s\"" -#: catalog/pg_publication.c:551 +#: catalog/pg_publication.c:546 #, c-format msgid "duplicate column \"%s\" in publication column list" msgstr "в списке публикуемых столбцов повторяется столбец \"%s\"" -#: catalog/pg_publication.c:641 +#: catalog/pg_publication.c:636 #, c-format msgid "schema \"%s\" is already member of publication \"%s\"" msgstr "схема \"%s\" уже включена в публикацию \"%s\"" -#: catalog/pg_shdepend.c:830 +#: catalog/pg_shdepend.c:875 #, c-format msgid "" "\n" @@ -6711,43 +7132,48 @@ msgstr[2] "" "\n" "и объекты в %d других базах данных (см. список в протоколе сервера)" -#: catalog/pg_shdepend.c:1177 +#: catalog/pg_shdepend.c:1222 #, c-format msgid "role %u was concurrently dropped" msgstr "роль %u удалена другим процессом" -#: catalog/pg_shdepend.c:1189 +#: catalog/pg_shdepend.c:1234 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "табличное пространство %u удалено другим процессом" -#: catalog/pg_shdepend.c:1203 +#: catalog/pg_shdepend.c:1248 #, c-format msgid "database %u was concurrently dropped" msgstr "база данных %u удалена другим процессом" -#: catalog/pg_shdepend.c:1254 +#: catalog/pg_shdepend.c:1299 #, c-format msgid "owner of %s" msgstr "владелец объекта %s" -#: catalog/pg_shdepend.c:1256 +#: catalog/pg_shdepend.c:1301 #, c-format msgid "privileges for %s" msgstr "права доступа к объекту %s" -#: catalog/pg_shdepend.c:1258 +#: catalog/pg_shdepend.c:1303 +#, c-format +msgid "initial privileges for %s" +msgstr "начальные права для %s" + +#: catalog/pg_shdepend.c:1305 #, c-format msgid "target of %s" msgstr "субъект политики %s" -#: catalog/pg_shdepend.c:1260 +#: catalog/pg_shdepend.c:1307 #, c-format msgid "tablespace for %s" msgstr "табличное пространство для %s" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1268 +#: catalog/pg_shdepend.c:1315 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" @@ -6755,7 +7181,7 @@ msgstr[0] "%d объект (%s)" msgstr[1] "%d объекта (%s)" msgstr[2] "%d объектов (%s)" -#: catalog/pg_shdepend.c:1332 +#: catalog/pg_shdepend.c:1379 #, c-format msgid "" "cannot drop objects owned by %s because they are required by the database " @@ -6764,7 +7190,7 @@ msgstr "" "удалить объекты, принадлежащие роли %s, нельзя, так как они нужны системе " "баз данных" -#: catalog/pg_shdepend.c:1498 +#: catalog/pg_shdepend.c:1560 #, c-format msgid "" "cannot reassign ownership of objects owned by %s because they are required " @@ -6773,12 +7199,12 @@ msgstr "" "изменить владельца объектов, принадлежащих роли %s, нельзя, так как они " "нужны системе баз данных" -#: catalog/pg_subscription.c:424 +#: catalog/pg_subscription.c:438 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "удалить сопоставление отношений для подписки \"%s\" не получилось" -#: catalog/pg_subscription.c:426 +#: catalog/pg_subscription.c:440 #, c-format msgid "" "Table synchronization for relation \"%s\" is in progress and is in state " @@ -6788,7 +7214,7 @@ msgstr "Выполняется синхронизация отношения \"% #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:433 +#: catalog/pg_subscription.c:447 #, c-format msgid "" "Use %s to enable subscription if not already enabled or use %s to drop the " @@ -6797,45 +7223,45 @@ msgstr "" "Выполните %s, чтобы включить подписку, если она ещё не включена, либо %s, " "чтобы удалить её." -#: catalog/pg_type.c:134 catalog/pg_type.c:474 +#: catalog/pg_type.c:133 catalog/pg_type.c:474 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "значение OID в pg_type не задано в режиме двоичного обновления" -#: catalog/pg_type.c:254 +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "неверный внутренний размер типа: %d" -#: catalog/pg_type.c:270 catalog/pg_type.c:278 catalog/pg_type.c:286 -#: catalog/pg_type.c:295 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "" "выравнивание \"%c\" не подходит для типа, передаваемого по значению (с " "размером: %d)" -#: catalog/pg_type.c:302 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "внутренний размер %d не подходит для типа, передаваемого по значению" -#: catalog/pg_type.c:312 catalog/pg_type.c:318 +#: catalog/pg_type.c:311 catalog/pg_type.c:317 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "выравнивание \"%c\" не подходит для типа переменной длины" -#: catalog/pg_type.c:326 commands/typecmds.c:4146 +#: catalog/pg_type.c:325 commands/typecmds.c:4363 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "для типов постоянного размера применим только режим хранения PLAIN" -#: catalog/pg_type.c:955 +#: catalog/pg_type.c:978 #, c-format msgid "Failed while creating a multirange type for type \"%s\"." msgstr "Ошибка при создании мультидиапазонного типа для типа \"%s\"." -#: catalog/pg_type.c:956 +#: catalog/pg_type.c:979 #, c-format msgid "" "You can manually specify a multirange type name using the " @@ -6844,82 +7270,82 @@ msgstr "" "Имя мультидиапазонного типа можно указать вручную, воспользовавшись " "атрибутом \"multirange_type_name\"." -#: catalog/storage.c:505 storage/buffer/bufmgr.c:1145 +#: catalog/storage.c:533 storage/buffer/bufmgr.c:1540 #, c-format msgid "invalid page in block %u of relation %s" msgstr "неверная страница в блоке %u отношения %s" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:167 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "гипотезирующими могут быть только сортирующие агрегатные функции" -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:192 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "нераспознанный атрибут \"%s\" в определении агрегатной функции" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:202 #, c-format msgid "aggregate stype must be specified" msgstr "в определении агрегата требуется stype" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:206 #, c-format msgid "aggregate sfunc must be specified" msgstr "в определении агрегата требуется sfunc" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:218 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "в определении агрегата требуется msfunc, если указан mstype" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:222 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "в определении агрегата требуется minvfunc, если указан mstype" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:229 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "msfunc для агрегата не должна указываться без mstype" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:233 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "minvfunc для агрегата не должна указываться без mstype" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:237 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "mfinalfunc для агрегата не должна указываться без mstype" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:241 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "msspace для агрегата не должна указываться без mstype" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:245 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "minitcond для агрегата не должна указываться без mstype" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:274 #, c-format msgid "aggregate input type must be specified" msgstr "в определении агрегата требуется входной тип" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:304 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "в определении агрегата с указанием входного типа не нужен базовый тип" -#: commands/aggregatecmds.c:351 commands/aggregatecmds.c:392 +#: commands/aggregatecmds.c:347 commands/aggregatecmds.c:388 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "переходным типом агрегата не может быть %s" -#: commands/aggregatecmds.c:363 +#: commands/aggregatecmds.c:359 #, c-format msgid "" "serialization functions may be specified only when the aggregate transition " @@ -6928,100 +7354,100 @@ msgstr "" "функции сериализации могут задаваться, только когда переходный тип данных " "агрегата - %s" -#: commands/aggregatecmds.c:373 +#: commands/aggregatecmds.c:369 #, c-format msgid "" "must specify both or neither of serialization and deserialization functions" msgstr "функции сериализации и десериализации должны задаваться совместно" -#: commands/aggregatecmds.c:438 commands/functioncmds.c:639 +#: commands/aggregatecmds.c:434 commands/functioncmds.c:634 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "" "параметр \"parallel\" должен иметь значение SAFE, RESTRICTED или UNSAFE" -#: commands/aggregatecmds.c:494 +#: commands/aggregatecmds.c:490 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "" "параметр \"%s\" должен иметь характеристику READ_ONLY, SHAREABLE или " "READ_WRITE" -#: commands/alter.c:86 commands/event_trigger.c:174 +#: commands/alter.c:83 commands/event_trigger.c:191 #, c-format msgid "event trigger \"%s\" already exists" msgstr "событийный триггер \"%s\" уже существует" -#: commands/alter.c:89 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:92 commands/foreigncmds.c:884 +#: commands/alter.c:89 commands/foreigncmds.c:884 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" уже существует" -#: commands/alter.c:95 commands/proclang.c:133 +#: commands/alter.c:92 commands/proclang.c:131 #, c-format msgid "language \"%s\" already exists" msgstr "язык \"%s\" уже существует" -#: commands/alter.c:98 commands/publicationcmds.c:771 +#: commands/alter.c:95 commands/publicationcmds.c:764 #, c-format msgid "publication \"%s\" already exists" msgstr "публикация \"%s\" уже существует" -#: commands/alter.c:101 commands/subscriptioncmds.c:657 +#: commands/alter.c:98 commands/subscriptioncmds.c:669 #, c-format msgid "subscription \"%s\" already exists" msgstr "подписка \"%s\" уже существует" -#: commands/alter.c:124 +#: commands/alter.c:121 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "преобразование \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:128 +#: commands/alter.c:125 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "объект статистики \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:132 +#: commands/alter.c:129 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "анализатор текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:136 +#: commands/alter.c:133 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "словарь текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:140 +#: commands/alter.c:137 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "шаблон текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:144 +#: commands/alter.c:141 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "конфигурация текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:217 +#: commands/alter.c:214 #, c-format msgid "must be superuser to rename %s" msgstr "переименовать \"%s\" может только суперпользователь" -#: commands/alter.c:259 commands/subscriptioncmds.c:636 -#: commands/subscriptioncmds.c:1116 commands/subscriptioncmds.c:1198 -#: commands/subscriptioncmds.c:1837 +#: 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 может только суперпользователь" -#: commands/alter.c:260 commands/subscriptioncmds.c:637 -#: commands/subscriptioncmds.c:1117 commands/subscriptioncmds.c:1199 -#: commands/subscriptioncmds.c:1838 +#: 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 " @@ -7030,7 +7456,7 @@ msgstr "" "Подписки с параметром password_required option, равным false, могут " "создавать или изменять только суперпользователи." -#: commands/alter.c:775 +#: commands/alter.c:735 #, c-format msgid "must be superuser to set schema of %s" msgstr "для назначения схемы объекта %s нужно быть суперпользователем" @@ -7038,7 +7464,7 @@ msgstr "для назначения схемы объекта %s нужно бы #: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" -msgstr "нет прав на создание метода доступа \"%s\"" +msgstr "нет прав для создания метода доступа \"%s\"" #: commands/amcmds.c:62 #, c-format @@ -7050,7 +7476,7 @@ msgstr "Для создания метода доступа нужно быть msgid "access method \"%s\" already exists" msgstr "метод доступа \"%s\" уже существует" -#: commands/amcmds.c:154 commands/indexcmds.c:216 commands/indexcmds.c:839 +#: 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" @@ -7061,46 +7487,46 @@ msgstr "метод доступа \"%s\" не существует" msgid "handler function is not specified" msgstr "не указана функция-обработчик" -#: commands/amcmds.c:264 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:709 -#: parser/parse_clause.c:941 +#: commands/amcmds.c:264 commands/event_trigger.c:200 +#: commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:702 +#: parser/parse_clause.c:943 #, c-format msgid "function %s must return type %s" msgstr "функция %s должна возвращать тип %s" -#: commands/analyze.c:228 +#: commands/analyze.c:217 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\" пропускается --- анализировать эту стороннюю таблицу нельзя" -#: commands/analyze.c:245 +#: commands/analyze.c:234 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "" "\"%s\" пропускается --- анализировать не таблицы или специальные системные " "таблицы нельзя" -#: commands/analyze.c:325 +#: commands/analyze.c:314 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "анализируется дерево наследования \"%s.%s\"" -#: commands/analyze.c:330 +#: commands/analyze.c:319 #, c-format msgid "analyzing \"%s.%s\"" msgstr "анализируется \"%s.%s\"" -#: commands/analyze.c:395 +#: commands/analyze.c:385 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "столбец \"%s\" отношения \"%s\" указан неоднократно" -#: commands/analyze.c:787 +#: commands/analyze.c:785 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "автоматический анализ таблицы \"%s.%s.%s\"\n" -#: commands/analyze.c:1334 +#: commands/analyze.c:1300 #, c-format msgid "" "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead " @@ -7110,7 +7536,7 @@ msgstr "" "%.0f, \"мёртвых\" строк: %.0f; строк в выборке: %d, примерное общее число " "строк: %.0f" -#: commands/analyze.c:1418 +#: commands/analyze.c:1384 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -7119,7 +7545,7 @@ msgstr "" "пропускается анализ дерева наследования \"%s.%s\" --- это дерево " "наследования не содержит дочерних таблиц" -#: commands/analyze.c:1516 +#: commands/analyze.c:1482 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -7128,22 +7554,22 @@ msgstr "" "пропускается анализ дерева наследования \"%s.%s\" --- это дерево " "наследования не содержит анализируемых дочерних таблиц" -#: commands/async.c:646 +#: commands/async.c:612 #, c-format msgid "channel name cannot be empty" msgstr "имя канала не может быть пустым" -#: commands/async.c:652 +#: commands/async.c:618 #, c-format msgid "channel name too long" msgstr "слишком длинное имя канала" -#: commands/async.c:657 +#: commands/async.c:623 #, c-format msgid "payload string too long" msgstr "слишком длинная строка сообщения-нагрузки" -#: commands/async.c:876 +#: commands/async.c:842 #, c-format msgid "" "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" @@ -7151,17 +7577,17 @@ msgstr "" "выполнить PREPARE для транзакции с командами LISTEN, UNLISTEN или NOTIFY " "нельзя" -#: commands/async.c:980 +#: commands/async.c:946 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "слишком много уведомлений в очереди NOTIFY" -#: commands/async.c:1602 +#: commands/async.c:1553 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "очередь NOTIFY заполнена на %.0f%%" -#: commands/async.c:1604 +#: commands/async.c:1555 #, c-format msgid "" "The server process with PID %d is among those with the oldest transactions." @@ -7169,7 +7595,7 @@ msgstr "" "В число серверных процессов с самыми старыми транзакциями входит процесс с " "PID %d." -#: commands/async.c:1607 +#: commands/async.c:1558 #, c-format msgid "" "The NOTIFY queue cannot be emptied until that process ends its current " @@ -7178,22 +7604,22 @@ msgstr "" "Очередь NOTIFY можно будет освободить, только когда этот процесс завершит " "текущую транзакцию." -#: commands/cluster.c:130 +#: commands/cluster.c:128 #, c-format msgid "unrecognized CLUSTER option \"%s\"" msgstr "нераспознанный параметр CLUSTER: \"%s\"" -#: commands/cluster.c:160 commands/cluster.c:433 +#: commands/cluster.c:159 commands/cluster.c:433 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "кластеризовать временные таблицы других сеансов нельзя" -#: commands/cluster.c:178 +#: commands/cluster.c:177 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "таблица \"%s\" ранее не кластеризовалась по какому-либо индексу" -#: commands/cluster.c:192 commands/tablecmds.c:14256 commands/tablecmds.c:16099 +#: 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\" не существует" @@ -7208,7 +7634,7 @@ msgstr "кластеризовать разделяемый каталог не msgid "cannot vacuum temporary tables of other sessions" msgstr "очищать временные таблицы других сеансов нельзя" -#: commands/cluster.c:513 commands/tablecmds.c:16109 +#: commands/cluster.c:513 commands/tablecmds.c:16739 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" не является индексом таблицы \"%s\"" @@ -7236,23 +7662,23 @@ msgstr "нельзя кластеризовать таблицу по невер msgid "cannot mark index clustered in partitioned table" msgstr "пометить индекс как кластеризованный в секционированной таблице нельзя" -#: commands/cluster.c:950 +#: commands/cluster.c:956 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "кластеризация \"%s.%s\" путём сканирования индекса \"%s\"" -#: commands/cluster.c:956 +#: commands/cluster.c:962 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "" "кластеризация \"%s.%s\" путём последовательного сканирования и сортировки" -#: commands/cluster.c:961 +#: commands/cluster.c:967 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "очистка \"%s.%s\"" -#: commands/cluster.c:988 +#: commands/cluster.c:994 #, c-format msgid "" "\"%s.%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" @@ -7260,7 +7686,7 @@ msgstr "" "\"%s.%s\": найдено удаляемых версий строк: %.0f, неудаляемых: %.0f, " "просмотрено страниц: %u" -#: commands/cluster.c:993 +#: commands/cluster.c:999 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -7269,33 +7695,39 @@ msgstr "" "В данный момент нельзя удалить \"мёртвых\" строк %.0f.\n" "%s." -#: commands/collationcmds.c:112 +#: commands/cluster.c:1744 +#, c-format +msgid "permission denied to cluster \"%s\", skipping it" +msgstr "нет прав для кластеризации отношения \"%s\", оно пропускается" + +#: commands/collationcmds.c:110 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "атрибут COLLATION \"%s\" не распознан" -#: commands/collationcmds.c:125 commands/collationcmds.c:131 -#: commands/define.c:389 commands/tablecmds.c:7883 -#: replication/pgoutput/pgoutput.c:309 replication/pgoutput/pgoutput.c:332 -#: replication/pgoutput/pgoutput.c:346 replication/pgoutput/pgoutput.c:356 -#: replication/pgoutput/pgoutput.c:366 replication/pgoutput/pgoutput.c:376 -#: replication/pgoutput/pgoutput.c:386 replication/walsender.c:996 -#: replication/walsender.c:1018 replication/walsender.c:1028 +#: 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" msgstr "конфликтующие или избыточные параметры" -#: commands/collationcmds.c:126 +#: commands/collationcmds.c:124 #, c-format msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." msgstr "LOCALE нельзя указать вместе с LC_COLLATE или LC_CTYPE." -#: commands/collationcmds.c:132 +#: commands/collationcmds.c:130 #, c-format msgid "FROM cannot be specified together with any other options." msgstr "FROM нельзя задать вместе с каким-либо другим параметром." -#: commands/collationcmds.c:191 +#: commands/collationcmds.c:189 #, c-format msgid "collation \"default\" cannot be copied" msgstr "правило сортировки \"default\" нельзя скопировать" @@ -7305,103 +7737,97 @@ msgstr "правило сортировки \"default\" нельзя скопи msgid "unrecognized collation provider: %s" msgstr "нераспознанный провайдер правил сортировки: %s" -#: commands/collationcmds.c:253 commands/collationcmds.c:259 -#: commands/collationcmds.c:267 +#: commands/collationcmds.c:253 commands/collationcmds.c:264 +#: commands/collationcmds.c:270 commands/collationcmds.c:278 #, c-format msgid "parameter \"%s\" must be specified" msgstr "необходимо указать параметр \"%s\"" -#: commands/collationcmds.c:282 commands/dbcommands.c:1091 +#: commands/collationcmds.c:293 commands/dbcommands.c:1134 #, c-format msgid "using standard form \"%s\" for ICU locale \"%s\"" msgstr "используется стандартная форма \"%s\" локали ICU \"%s\"" -#: commands/collationcmds.c:301 +#: commands/collationcmds.c:312 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "" "недетерминированные правила сортировки не поддерживаются данным провайдером" -#: commands/collationcmds.c:306 commands/dbcommands.c:1110 +#: commands/collationcmds.c:317 commands/dbcommands.c:1087 #, c-format msgid "ICU rules cannot be specified unless locale provider is ICU" msgstr "правила ICU можно указать, только если выбран провайдер локали ICU" -#: commands/collationcmds.c:325 +#: commands/collationcmds.c:340 #, c-format msgid "current database's encoding is not supported with this provider" msgstr "кодировка текущей БД не поддерживается данным провайдером" -#: commands/collationcmds.c:385 +#: commands/collationcmds.c:409 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "" "правило сортировки \"%s\" для кодировки \"%s\" уже существует в схеме \"%s\"" -#: commands/collationcmds.c:396 +#: commands/collationcmds.c:420 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "правило сортировки \"%s\" уже существует в схеме \"%s\"" -#: commands/collationcmds.c:421 +#: commands/collationcmds.c:445 #, c-format msgid "cannot refresh version of default collation" msgstr "нельзя обновить версию правила сортировки по умолчанию" #. translator: %s is an SQL command #. translator: %s is an SQL ALTER command -#: commands/collationcmds.c:423 commands/subscriptioncmds.c:1331 -#: commands/tablecmds.c:7708 commands/tablecmds.c:7718 -#: commands/tablecmds.c:13958 commands/tablecmds.c:17233 -#: commands/tablecmds.c:17254 commands/typecmds.c:3637 commands/typecmds.c:3720 -#: commands/typecmds.c:4013 +#: 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:451 commands/dbcommands.c:2488 +#: commands/collationcmds.c:480 commands/dbcommands.c:2566 #, c-format msgid "changing version from %s to %s" msgstr "изменение версии с %s на %s" -#: commands/collationcmds.c:466 commands/dbcommands.c:2501 +#: commands/collationcmds.c:495 commands/dbcommands.c:2579 #, c-format msgid "version has not changed" msgstr "версия не была изменена" -#: commands/collationcmds.c:499 commands/dbcommands.c:2667 +#: commands/collationcmds.c:528 commands/dbcommands.c:2749 #, c-format msgid "database with OID %u does not exist" msgstr "база данных с OID %u не существует" -#: commands/collationcmds.c:520 +#: commands/collationcmds.c:554 #, c-format msgid "collation with OID %u does not exist" msgstr "правило сортировки с OID %u не существует" -#: commands/collationcmds.c:808 +#: commands/collationcmds.c:848 #, c-format msgid "must be superuser to import system collations" msgstr "" "импортировать системные правила сортировки может только суперпользователь" -#: commands/collationcmds.c:836 commands/copyfrom.c:1671 commands/copyto.c:656 -#: libpq/be-secure-common.c:59 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "не удалось выполнить команду \"%s\": %m" - -#: commands/collationcmds.c:928 commands/collationcmds.c:1013 +#: commands/collationcmds.c:968 commands/collationcmds.c:1053 #, c-format msgid "no usable system locales were found" msgstr "пригодные системные локали не найдены" -#: commands/comment.c:61 commands/dbcommands.c:1612 commands/dbcommands.c:1824 -#: commands/dbcommands.c:1934 commands/dbcommands.c:2132 -#: commands/dbcommands.c:2370 commands/dbcommands.c:2461 -#: commands/dbcommands.c:2571 commands/dbcommands.c:3071 -#: utils/init/postinit.c:1021 utils/init/postinit.c:1085 -#: utils/init/postinit.c:1157 +#: 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\" не существует" @@ -7411,42 +7837,42 @@ msgstr "база данных \"%s\" не существует" msgid "cannot set comment on relation \"%s\"" msgstr "задать комментарий для отношения \"%s\" нельзя" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:2028 +#: commands/constraint.c:61 utils/adt/ri_triggers.c:2019 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "функция \"%s\" была вызвана не менеджером триггеров" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:2037 +#: commands/constraint.c:68 utils/adt/ri_triggers.c:2028 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "функция \"%s\" должна запускаться в триггере AFTER для строк" -#: commands/constraint.c:84 +#: commands/constraint.c:82 #, c-format msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "функция \"%s\" должна запускаться для INSERT или UPDATE" -#: commands/conversioncmds.c:69 +#: commands/conversioncmds.c:62 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "исходная кодировка \"%s\" не существует" -#: commands/conversioncmds.c:76 +#: commands/conversioncmds.c:69 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "целевая кодировка \"%s\" не существует" -#: commands/conversioncmds.c:89 +#: commands/conversioncmds.c:82 #, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" msgstr "преобразование кодировки из/в \"SQL_ASCII\" не поддерживается" -#: commands/conversioncmds.c:102 +#: commands/conversioncmds.c:95 #, c-format msgid "encoding conversion function %s must return type %s" msgstr "функция преобразования кодировки %s должна возвращать тип %s" -#: commands/conversioncmds.c:132 +#: commands/conversioncmds.c:125 #, c-format msgid "" "encoding conversion function %s returned incorrect result for empty input" @@ -7454,12 +7880,12 @@ msgstr "" "функция преобразования кодировки %s возвратила некорректный результат для " "пустой строки" -#: commands/copy.c:86 +#: commands/copy.c:84 #, c-format msgid "permission denied to COPY to or from an external program" msgstr "нет прав для выполнения COPY с внешней программой" -#: commands/copy.c:87 +#: commands/copy.c:85 #, c-format msgid "" "Only roles with privileges of the \"%s\" role may COPY to or from an " @@ -7468,7 +7894,7 @@ msgstr "" "Использовать COPY с внешними программами могут только роли с правами роли " "\"%s\"." -#: commands/copy.c:89 commands/copy.c:100 commands/copy.c:109 +#: commands/copy.c:87 commands/copy.c:98 commands/copy.c:107 #, c-format msgid "" "Anyone can COPY to stdout or from stdin. psql's \\copy command also works " @@ -7477,262 +7903,216 @@ msgstr "" "Не имея административных прав, можно использовать COPY с stdout и stdin (а " "также команду psql \\copy)." -#: commands/copy.c:97 +#: commands/copy.c:95 #, c-format msgid "permission denied to COPY from a file" msgstr "нет прав для выполнения COPY с чтением файла" -#: commands/copy.c:98 +#: commands/copy.c:96 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY from a file." msgstr "" "Выполнять COPY с чтением файла могут только роли с правами роли \"%s\"." -#: commands/copy.c:106 +#: commands/copy.c:104 #, c-format msgid "permission denied to COPY to a file" msgstr "нет прав для выполнения COPY с записью в файл" -#: commands/copy.c:107 +#: commands/copy.c:105 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY to a file." msgstr "" "Выполнять COPY с записью в файл могут только роли с правами роли \"%s\"." -#: commands/copy.c:195 +#: commands/copy.c:193 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM не поддерживается с защитой на уровне строк." -#: commands/copy.c:196 +#: commands/copy.c:194 #, c-format msgid "Use INSERT statements instead." msgstr "Используйте операторы INSERT." -#: commands/copy.c:290 -#, c-format -msgid "MERGE not supported in COPY" -msgstr "MERGE не поддерживается в COPY" - -#: commands/copy.c:383 +#: commands/copy.c:375 #, c-format msgid "cannot use \"%s\" with HEADER in COPY TO" msgstr "использовать \"%s\" с параметром HEADER в COPY TO нельзя" -#: commands/copy.c:392 +#: commands/copy.c:384 #, c-format msgid "%s requires a Boolean value or \"match\"" msgstr "%s требует логическое значение или \"match\"" -#: commands/copy.c:451 +#. 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 %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:416 commands/copy.c:441 +#, c-format +msgid "COPY %s \"%s\" not recognized" +msgstr "параметр COPY %s \"%s\" не распознан" + +#: commands/copy.c:502 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "формат \"%s\" для COPY не распознан" -#: commands/copy.c:509 commands/copy.c:522 commands/copy.c:535 -#: commands/copy.c:554 +#: 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:566 +#: commands/copy.c:621 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом параметра \"%s\" должно быть название допустимой кодировки" -#: commands/copy.c:573 commands/dbcommands.c:859 commands/dbcommands.c:2318 +#: commands/copy.c:642 commands/dbcommands.c:866 commands/dbcommands.c:2381 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не распознан" -#: commands/copy.c:585 -#, c-format -msgid "cannot specify DELIMITER in BINARY mode" -msgstr "в режиме BINARY нельзя указывать DELIMITER" - -#: commands/copy.c:590 +#. 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 NULL in BINARY mode" -msgstr "в режиме BINARY нельзя указывать NULL" +msgid "cannot specify %s in BINARY mode" +msgstr "в режиме BINARY нельзя указывать %s" -#: commands/copy.c:595 +#: commands/copy.c:670 #, c-format -msgid "cannot specify DEFAULT in BINARY mode" -msgstr "в режиме BINARY нельзя указывать DEFAULT" +msgid "only ON_ERROR STOP is allowed in BINARY mode" +msgstr "в режиме BINARY допускается только ON_ERROR STOP" -#: commands/copy.c:617 +#: commands/copy.c:692 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "разделитель для COPY должен быть однобайтным символом" -#: commands/copy.c:624 +#: commands/copy.c:699 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "" "разделителем для COPY не может быть символ новой строки или возврата каретки" -#: commands/copy.c:630 +#: commands/copy.c:705 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "" "представление NULL для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:640 +#: commands/copy.c:715 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "" "представление DEFAULT для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:658 +#: commands/copy.c:733 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "\"%s\" не может быть разделителем для COPY" -#: commands/copy.c:664 -#, c-format -msgid "cannot specify HEADER in BINARY mode" -msgstr "в режиме BINARY нельзя использовать HEADER" - -#: commands/copy.c:670 +#. 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 "COPY quote available only in CSV mode" -msgstr "определить кавычки для COPY можно только в режиме CSV" +msgid "COPY %s requires CSV mode" +msgstr "для COPY %s требуется режим CSV" -#: commands/copy.c:675 +#: commands/copy.c:752 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "символ кавычек для COPY должен быть однобайтным" -#: commands/copy.c:680 +#: commands/copy.c:757 #, c-format msgid "COPY delimiter and quote must be different" msgstr "символ кавычек для COPY должен отличаться от разделителя" -#: commands/copy.c:686 -#, c-format -msgid "COPY escape available only in CSV mode" -msgstr "определить спецсимвол для COPY можно только в режиме CSV" - -#: commands/copy.c:691 +#: commands/copy.c:769 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "спецсимвол для COPY должен быть однобайтным" -#: commands/copy.c:697 -#, c-format -msgid "COPY force quote available only in CSV mode" -msgstr "параметр force quote для COPY можно использовать только в режиме CSV" - -#: commands/copy.c:701 -#, c-format -msgid "COPY force quote only available using COPY TO" -msgstr "параметр force quote для COPY можно использовать только с COPY TO" - -#: commands/copy.c:707 -#, c-format -msgid "COPY force not null available only in CSV mode" -msgstr "" -"параметр force not null для COPY можно использовать только в режиме CSV" - -#: commands/copy.c:711 -#, c-format -msgid "COPY force not null only available using COPY FROM" -msgstr "параметр force not null для COPY можно использовать только с COPY FROM" - -#: commands/copy.c:717 -#, c-format -msgid "COPY force null available only in CSV mode" -msgstr "параметр force null для COPY можно использовать только в режиме CSV" - -#: commands/copy.c:722 -#, c-format -msgid "COPY force null only available using COPY FROM" -msgstr "параметр force null для COPY можно использовать только с COPY FROM" - -#: commands/copy.c:728 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:823 commands/copy.c:859 #, c-format -msgid "COPY delimiter must not appear in the NULL specification" -msgstr "разделитель для COPY не должен присутствовать в представлении NULL" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "символ разделителя для COPY не должен присутствовать в указании %s" -#: commands/copy.c:735 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:832 commands/copy.c:868 #, c-format -msgid "CSV quote character must not appear in the NULL specification" -msgstr "символ кавычек в CSV не должен присутствовать в представлении NULL" +msgid "CSV quote character must not appear in the %s specification" +msgstr "символ кавычек в CSV не должен присутствовать в указании %s" -#: commands/copy.c:742 -#, c-format -msgid "COPY DEFAULT only available using COPY FROM" -msgstr "параметр DEFAULT для COPY можно использовать только с COPY FROM" - -#: commands/copy.c:748 -#, c-format -msgid "COPY delimiter must not appear in the DEFAULT specification" -msgstr "разделитель для COPY не должен присутствовать в представлении DEFAULT" - -#: commands/copy.c:755 -#, c-format -msgid "CSV quote character must not appear in the DEFAULT specification" -msgstr "символ кавычек в CSV не должен присутствовать в представлении DEFAULT" - -#: commands/copy.c:763 +#: commands/copy.c:877 #, c-format msgid "NULL specification and DEFAULT specification cannot be the same" msgstr "представления NULL и DEFAULT не могут быть одинаковыми" -#: commands/copy.c:825 +#: commands/copy.c:939 #, c-format msgid "column \"%s\" is a generated column" msgstr "столбец \"%s\" — генерируемый" -#: commands/copy.c:827 +#: commands/copy.c:941 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Генерируемые столбцы нельзя использовать в COPY." -#: commands/copy.c:842 commands/indexcmds.c:1886 commands/statscmds.c:242 -#: commands/tablecmds.c:2401 commands/tablecmds.c:3123 -#: commands/tablecmds.c:3622 parser/parse_relation.c:3698 -#: parser/parse_relation.c:3708 parser/parse_relation.c:3726 -#: parser/parse_relation.c:3733 parser/parse_relation.c:3747 -#: utils/adt/tsvector_op.c:2855 +#: 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:849 commands/tablecmds.c:2427 commands/trigger.c:958 -#: parser/parse_target.c:1084 parser/parse_target.c:1095 +#: 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\" указан неоднократно" -#: commands/copyfrom.c:122 +#: commands/copyfrom.c:118 #, c-format msgid "COPY %s" msgstr "COPY %s" -#: commands/copyfrom.c:130 +#: commands/copyfrom.c:126 #, c-format msgid "COPY %s, line %llu, column %s" msgstr "COPY %s, строка %llu, столбец %s" -#: commands/copyfrom.c:135 commands/copyfrom.c:181 +#: commands/copyfrom.c:131 commands/copyfrom.c:177 #, c-format msgid "COPY %s, line %llu" msgstr "COPY %s, строка %llu" -#: commands/copyfrom.c:147 +#: commands/copyfrom.c:143 #, c-format msgid "COPY %s, line %llu, column %s: \"%s\"" msgstr "COPY %s, строка %llu, столбец %s: \"%s\"" -#: commands/copyfrom.c:157 +#: commands/copyfrom.c:153 #, c-format msgid "COPY %s, line %llu, column %s: null input" msgstr "COPY %s, строка %llu, столбец %s: значение NULL" -#: commands/copyfrom.c:174 +#: commands/copyfrom.c:170 #, c-format msgid "COPY %s, line %llu: \"%s\"" msgstr "COPY %s, строка %llu: \"%s\"" @@ -7783,24 +8163,29 @@ msgstr "" "выполнить COPY FREEZE нельзя, так как таблица не была создана или усечена в " "текущей подтранзакции" -#: commands/copyfrom.c:1414 +#: commands/copyfrom.c:1313 #, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "столбец FORCE_NOT_NULL \"%s\" не фигурирует в COPY" +msgid "%llu row was skipped due to data type incompatibility" +msgid_plural "%llu rows were skipped due to data type incompatibility" +msgstr[0] "из-за несовместимости типов данных пропущена %llu строка" +msgstr[1] "из-за несовместимости типов данных пропущены %llu строки" +msgstr[2] "из-за несовместимости типов данных пропущены %llu строк" -#: commands/copyfrom.c:1437 +#. 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:1490 utils/mb/mbutils.c:386 +#: 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:1690 +#: commands/copyfrom.c:1742 #, c-format msgid "" "COPY FROM instructs the PostgreSQL server process to read a file. You may " @@ -7810,17 +8195,17 @@ msgstr "" "файла. Возможно, на самом деле вам нужно клиентское средство, например, " "\\copy в psql." -#: commands/copyfrom.c:1703 commands/copyto.c:708 +#: commands/copyfrom.c:1755 commands/copyto.c:706 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" - это каталог" -#: commands/copyfrom.c:1771 commands/copyto.c:306 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:1786 commands/copyto.c:311 +#: commands/copyfrom.c:1838 commands/copyto.c:304 #, c-format msgid "program \"%s\" failed" msgstr "сбой программы \"%s\"" @@ -7861,17 +8246,17 @@ msgid "could not read from COPY file: %m" msgstr "не удалось прочитать файл COPY: %m" #: commands/copyfromparse.c:278 commands/copyfromparse.c:303 -#: tcop/postgres.c:377 +#: 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 "неожиданный обрыв соединения с клиентом при открытой транзакции" -#: commands/copyfromparse.c:294 +#: commands/copyfromparse.c:294 replication/walsender.c:772 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "неожиданный тип сообщения 0x%02X при вводе данных COPY из stdin" -#: commands/copyfromparse.c:317 +#: commands/copyfromparse.c:317 replication/walsender.c:803 #, c-format msgid "COPY from stdin failed: %s" msgstr "ошибка при вводе данных COPY из stdin: %s" @@ -7898,8 +8283,8 @@ msgstr "" "несоответствие имени столбца в поле %d строки заголовка: получено \"%s\", " "ожидалось \"%s\"" -#: commands/copyfromparse.c:892 commands/copyfromparse.c:1512 -#: commands/copyfromparse.c:1768 +#: commands/copyfromparse.c:892 commands/copyfromparse.c:1554 +#: commands/copyfromparse.c:1810 #, c-format msgid "extra data after last expected column" msgstr "лишние данные после содержимого последнего столбца" @@ -7909,193 +8294,211 @@ msgstr "лишние данные после содержимого послед msgid "missing data for column \"%s\"" msgstr "нет данных для столбца \"%s\"" -#: commands/copyfromparse.c:999 +#: commands/copyfromparse.c:990 #, c-format -msgid "received copy data after EOF marker" -msgstr "после маркера конца файла продолжаются данные COPY" +msgid "" +"skipping row due to data type incompatibility at line %llu for column " +"\"%s\": \"%s\"" +msgstr "" +"строка пропускается из-за несовместимости данных в строке %llu, столбце " +"\"%s\": \"%s\"" + +#: commands/copyfromparse.c:998 +#, c-format +msgid "" +"skipping row due to data type incompatibility at line %llu for column " +"\"%s\": null input" +msgstr "" +"строка пропускается из-за несовместимости данных в строке %llu, столбце " +"\"%s\": значение null" + +#: commands/copyfromparse.c:1044 +#, c-format +msgid "received copy data after EOF marker" +msgstr "после маркера конца файла продолжаются данные COPY" -#: commands/copyfromparse.c:1006 +#: commands/copyfromparse.c:1051 #, c-format msgid "row field count is %d, expected %d" msgstr "количество полей в строке: %d, ожидалось: %d" -#: commands/copyfromparse.c:1294 commands/copyfromparse.c:1311 +#: commands/copyfromparse.c:1336 commands/copyfromparse.c:1353 #, c-format msgid "literal carriage return found in data" msgstr "в данных обнаружен явный возврат каретки" -#: commands/copyfromparse.c:1295 commands/copyfromparse.c:1312 +#: commands/copyfromparse.c:1337 commands/copyfromparse.c:1354 #, c-format msgid "unquoted carriage return found in data" msgstr "в данных обнаружен возврат каретки не в кавычках" -#: commands/copyfromparse.c:1297 commands/copyfromparse.c:1314 +#: commands/copyfromparse.c:1339 commands/copyfromparse.c:1356 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Представьте возврат каретки как \"\\r\"." -#: commands/copyfromparse.c:1298 commands/copyfromparse.c:1315 +#: commands/copyfromparse.c:1340 commands/copyfromparse.c:1357 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Заключите возврат каретки в кавычки CSV." -#: commands/copyfromparse.c:1327 +#: commands/copyfromparse.c:1369 #, c-format msgid "literal newline found in data" msgstr "в данных обнаружен явный символ новой строки" -#: commands/copyfromparse.c:1328 +#: commands/copyfromparse.c:1370 #, c-format msgid "unquoted newline found in data" msgstr "в данных обнаружен явный символ новой строки не в кавычках" -#: commands/copyfromparse.c:1330 +#: commands/copyfromparse.c:1372 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Представьте символ новой строки как \"\\n\"." -#: commands/copyfromparse.c:1331 +#: commands/copyfromparse.c:1373 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Заключите символ новой строки в кавычки CSV." -#: commands/copyfromparse.c:1377 commands/copyfromparse.c:1413 +#: commands/copyfromparse.c:1419 commands/copyfromparse.c:1455 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "маркер \"конец копии\" не соответствует предыдущему стилю новой строки" -#: commands/copyfromparse.c:1386 commands/copyfromparse.c:1402 +#: commands/copyfromparse.c:1428 commands/copyfromparse.c:1444 #, c-format msgid "end-of-copy marker corrupt" msgstr "маркер \"конец копии\" испорчен" -#: commands/copyfromparse.c:1704 commands/copyfromparse.c:1919 +#: commands/copyfromparse.c:1746 commands/copyfromparse.c:1961 #, c-format msgid "unexpected default marker in COPY data" msgstr "неожиданный маркер DEFAULT в данных COPY" -#: commands/copyfromparse.c:1705 commands/copyfromparse.c:1920 +#: commands/copyfromparse.c:1747 commands/copyfromparse.c:1962 #, c-format msgid "Column \"%s\" has no default value." msgstr "Для столбца \"%s\" не определено значение по умолчанию." -#: commands/copyfromparse.c:1852 +#: commands/copyfromparse.c:1894 #, c-format msgid "unterminated CSV quoted field" msgstr "незавершённое поле в кавычках CSV" -#: commands/copyfromparse.c:1954 commands/copyfromparse.c:1973 +#: commands/copyfromparse.c:1996 commands/copyfromparse.c:2015 #, c-format msgid "unexpected EOF in COPY data" msgstr "неожиданный конец данных COPY" -#: commands/copyfromparse.c:1963 +#: commands/copyfromparse.c:2005 #, c-format msgid "invalid field size" msgstr "неверный размер поля" -#: commands/copyfromparse.c:1986 +#: commands/copyfromparse.c:2028 #, c-format msgid "incorrect binary data format" msgstr "неверный двоичный формат данных" -#: commands/copyto.c:236 +#: commands/copyto.c:229 #, c-format msgid "could not write to COPY program: %m" msgstr "не удалось записать в канал программы COPY: %m" -#: commands/copyto.c:241 +#: commands/copyto.c:234 #, c-format msgid "could not write to COPY file: %m" msgstr "не удалось записать в файл COPY: %m" -#: commands/copyto.c:386 +#: commands/copyto.c:379 #, c-format msgid "cannot copy from view \"%s\"" msgstr "копировать из представления \"%s\" нельзя" -#: commands/copyto.c:388 commands/copyto.c:394 commands/copyto.c:400 -#: commands/copyto.c:411 +#: commands/copyto.c:381 commands/copyto.c:387 commands/copyto.c:393 +#: commands/copyto.c:404 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Попробуйте вариацию COPY (SELECT ...) TO." -#: commands/copyto.c:392 +#: commands/copyto.c:385 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "копировать из материализованного представления \"%s\" нельзя" -#: commands/copyto.c:398 +#: commands/copyto.c:391 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "копировать из сторонней таблицы \"%s\" нельзя" -#: commands/copyto.c:404 +#: commands/copyto.c:397 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "копировать из последовательности \"%s\" нельзя" -#: commands/copyto.c:409 +#: commands/copyto.c:402 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "копировать из секционированной таблицы \"%s\" нельзя" -#: commands/copyto.c:415 +#: commands/copyto.c:408 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "копировать из отношения \"%s\", не являющегося таблицей, нельзя" -#: commands/copyto.c:467 +#: commands/copyto.c:460 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "правила DO INSTEAD NOTHING не поддерживаются с COPY" -#: commands/copyto.c:481 +#: commands/copyto.c:474 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "условные правила DO INSTEAD не поддерживаются с COPY" -#: commands/copyto.c:485 +#: commands/copyto.c:478 #, c-format -msgid "DO ALSO rules are not supported for the COPY" +msgid "DO ALSO rules are not supported for COPY" msgstr "правила DO ALSO не поддерживаются с COPY" -#: commands/copyto.c:490 +#: commands/copyto.c:483 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "составные правила DO INSTEAD не поддерживаются с COPY" -#: commands/copyto.c:500 +#: commands/copyto.c:493 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) не поддерживается" -#: commands/copyto.c:517 +#: commands/copyto.c:499 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "служебная команда в запросе COPY не допускается" + +#: commands/copyto.c:515 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "в запросе COPY должно быть предложение RETURNING" -#: commands/copyto.c:546 +#: commands/copyto.c:544 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "отношение, задействованное в операторе COPY, изменилось" -#: commands/copyto.c:605 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "столбец FORCE_QUOTE \"%s\" не фигурирует в COPY" - -#: commands/copyto.c:673 +#: commands/copyto.c:671 #, c-format msgid "relative path not allowed for COPY to file" msgstr "при выполнении COPY в файл нельзя указывать относительный путь" -#: commands/copyto.c:692 +#: commands/copyto.c:690 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не удалось открыть файл \"%s\" для записи: %m" -#: commands/copyto.c:695 +#: commands/copyto.c:693 #, c-format msgid "" "COPY TO instructs the PostgreSQL server process to write a file. You may " @@ -8105,124 +8508,135 @@ msgstr "" "Возможно, на самом деле вам нужно клиентское средство, например, \\copy в " "psql." -#: commands/createas.c:215 commands/createas.c:523 +#: commands/createas.c:210 commands/createas.c:516 #, c-format msgid "too many column names were specified" msgstr "указано слишком много имён столбцов" -#: commands/createas.c:546 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "политики для этой команды ещё не реализованы" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:829 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION больше не поддерживается" -#: commands/dbcommands.c:823 +#: commands/dbcommands.c:830 #, c-format msgid "Consider using tablespaces instead." msgstr "Рассмотрите возможность использования табличных пространств." -#: commands/dbcommands.c:848 +#: commands/dbcommands.c:855 #, c-format msgid "OIDs less than %u are reserved for system objects" msgstr "значения OID меньше %u зарезервированы для системных объектов" -#: commands/dbcommands.c:879 utils/adt/ascii.c:146 +#: commands/dbcommands.c:886 utils/adt/ascii.c:146 #, c-format msgid "%d is not a valid encoding code" msgstr "%d не является верным кодом кодировки" -#: commands/dbcommands.c:890 utils/adt/ascii.c:128 +#: commands/dbcommands.c:897 utils/adt/ascii.c:128 #, c-format msgid "%s is not a valid encoding name" msgstr "%s не является верным названием кодировки" -#: commands/dbcommands.c:919 +#: commands/dbcommands.c:931 #, c-format msgid "unrecognized locale provider: %s" msgstr "нераспознанный провайдер локали: %s" -#: commands/dbcommands.c:932 commands/dbcommands.c:2351 commands/user.c:300 -#: commands/user.c:740 +#: 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" -#: commands/dbcommands.c:953 +#: commands/dbcommands.c:965 #, c-format msgid "permission denied to create database" -msgstr "нет прав на создание базы данных" +msgstr "нет прав для создания базы данных" -#: commands/dbcommands.c:977 +#: commands/dbcommands.c:989 #, c-format msgid "template database \"%s\" does not exist" msgstr "шаблон базы данных \"%s\" не существует" -#: commands/dbcommands.c:987 +#: commands/dbcommands.c:999 #, c-format msgid "cannot use invalid database \"%s\" as template" msgstr "использовать некорректную базу \"%s\" в качестве шаблона нельзя" -#: commands/dbcommands.c:988 commands/dbcommands.c:2380 -#: utils/init/postinit.c:1100 +#: 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 для удаления некорректных баз данных." -#: commands/dbcommands.c:999 +#: commands/dbcommands.c:1011 #, c-format msgid "permission denied to copy database \"%s\"" -msgstr "нет прав на копирование базы данных \"%s\"" +msgstr "нет прав для копирования базы данных \"%s\"" -#: commands/dbcommands.c:1016 +#: commands/dbcommands.c:1028 #, c-format msgid "invalid create database strategy \"%s\"" msgstr "неверная стратегия создания БД \"%s\"" -#: commands/dbcommands.c:1017 +#: commands/dbcommands.c:1029 #, c-format msgid "Valid strategies are \"wal_log\" and \"file_copy\"." msgstr "Возможные стратегии: \"wal_log\" и \"file_copy\"." -#: commands/dbcommands.c:1043 +#: commands/dbcommands.c:1050 #, c-format msgid "invalid server encoding %d" msgstr "неверная кодировка для сервера: %d" -#: commands/dbcommands.c:1049 +#: commands/dbcommands.c:1056 #, c-format msgid "invalid LC_COLLATE locale name: \"%s\"" msgstr "неверное имя локали LC_COLLATE: \"%s\"" -#: commands/dbcommands.c:1050 commands/dbcommands.c:1056 +#: commands/dbcommands.c:1057 commands/dbcommands.c:1063 #, c-format msgid "If the locale name is specific to ICU, use ICU_LOCALE." msgstr "Если эта локаль свойственна ICU, используйте ICU_LOCALE." -#: commands/dbcommands.c:1055 +#: commands/dbcommands.c:1062 #, c-format msgid "invalid LC_CTYPE locale name: \"%s\"" msgstr "неверное имя локали LC_CTYPE: \"%s\"" -#: commands/dbcommands.c:1066 +#: commands/dbcommands.c:1074 +#, c-format +msgid "BUILTIN_LOCALE cannot be specified unless locale provider is builtin" +msgstr "" +"BUILTIN_LOCALE можно указать, только если выбран встроенный провайдер локали" + +#: commands/dbcommands.c:1082 +#, c-format +msgid "ICU locale cannot be specified unless locale provider is ICU" +msgstr "локаль ICU можно указать, только если выбран провайдер локали ICU" + +#: commands/dbcommands.c:1100 +#, c-format +msgid "LOCALE or BUILTIN_LOCALE must be specified" +msgstr "необходимо указать LOCALE или BUILTIN_LOCALE" + +#: commands/dbcommands.c:1109 #, c-format msgid "encoding \"%s\" is not supported with ICU provider" msgstr "кодировка \"%s\" не поддерживается провайдером ICU" -#: commands/dbcommands.c:1076 +#: commands/dbcommands.c:1119 #, c-format msgid "LOCALE or ICU_LOCALE must be specified" msgstr "необходимо задать LOCALE или ICU_LOCALE" -#: commands/dbcommands.c:1105 -#, c-format -msgid "ICU locale cannot be specified unless locale provider is ICU" -msgstr "локаль ICU можно указать, только если выбран провайдер локали ICU" - -#: commands/dbcommands.c:1128 +#: commands/dbcommands.c:1163 #, c-format msgid "" "new encoding (%s) is incompatible with the encoding of the template database " @@ -8230,7 +8644,7 @@ msgid "" msgstr "" "новая кодировка (%s) несовместима с кодировкой шаблона базы данных (%s)" -#: commands/dbcommands.c:1131 +#: commands/dbcommands.c:1166 #, c-format msgid "" "Use the same encoding as in the template database, or use template0 as " @@ -8239,7 +8653,7 @@ msgstr "" "Используйте кодировку шаблона базы данных или выберите в качестве шаблона " "template0." -#: commands/dbcommands.c:1136 +#: commands/dbcommands.c:1171 #, c-format msgid "" "new collation (%s) is incompatible with the collation of the template " @@ -8248,7 +8662,7 @@ msgstr "" "новое правило сортировки (%s) несовместимо с правилом в шаблоне базы данных " "(%s)" -#: commands/dbcommands.c:1138 +#: commands/dbcommands.c:1173 #, c-format msgid "" "Use the same collation as in the template database, or use template0 as " @@ -8257,7 +8671,7 @@ msgstr "" "Используйте то же правило сортировки, что и в шаблоне базы данных, или " "выберите в качестве шаблона template0." -#: commands/dbcommands.c:1143 +#: commands/dbcommands.c:1178 #, c-format msgid "" "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database " @@ -8266,7 +8680,7 @@ msgstr "" "новый параметр LC_CTYPE (%s) несовместим с LC_CTYPE в шаблоне базы данных " "(%s)" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1180 #, c-format msgid "" "Use the same LC_CTYPE as in the template database, or use template0 as " @@ -8275,7 +8689,7 @@ msgstr "" "Используйте тот же LC_CTYPE, что и в шаблоне базы данных, или выберите в " "качестве шаблона template0." -#: commands/dbcommands.c:1150 +#: commands/dbcommands.c:1185 #, c-format msgid "" "new locale provider (%s) does not match locale provider of the template " @@ -8284,7 +8698,7 @@ msgstr "" "новый провайдер локали (%s) не соответствует провайдеру локали в базе-" "шаблоне (%s)" -#: commands/dbcommands.c:1152 +#: commands/dbcommands.c:1187 #, c-format msgid "" "Use the same locale provider as in the template database, or use template0 " @@ -8293,14 +8707,14 @@ msgstr "" "Используйте тот же провайдер локали, что и в базе-шаблоне, или выберите в " "качестве шаблона template0." -#: commands/dbcommands.c:1164 +#: commands/dbcommands.c:1199 #, c-format msgid "" "new ICU locale (%s) is incompatible with the ICU locale of the template " "database (%s)" msgstr "новая локаль ICU (%s) несовместима с локалью ICU в базе-шаблоне (%s)" -#: commands/dbcommands.c:1166 +#: commands/dbcommands.c:1201 #, c-format msgid "" "Use the same ICU locale as in the template database, or use template0 as " @@ -8309,7 +8723,7 @@ msgstr "" "Используйте ту же локаль ICU, что и в базе-шаблоне, или выберите в качестве " "шаблона template0." -#: commands/dbcommands.c:1177 +#: commands/dbcommands.c:1212 #, c-format msgid "" "new ICU collation rules (%s) are incompatible with the ICU collation rules " @@ -8318,7 +8732,7 @@ msgstr "" "новые правила сортировки ICU (%s) несовместимы с правилами сортировки в " "шаблоне базы данных (%s)" -#: commands/dbcommands.c:1179 +#: commands/dbcommands.c:1214 #, c-format msgid "" "Use the same ICU collation rules as in the template database, or use " @@ -8327,7 +8741,7 @@ msgstr "" "Используйте те же правила сортировки, что и в шаблоне базы данных, или " "выберите в качестве шаблона template0." -#: commands/dbcommands.c:1202 +#: commands/dbcommands.c:1243 #, c-format msgid "" "template database \"%s\" has a collation version, but no actual collation " @@ -8336,13 +8750,13 @@ msgstr "" "в шаблоне \"%s\" имеется версия правила сортировки, но фактическую версию " "правила сортировки определить нельзя" -#: commands/dbcommands.c:1207 +#: commands/dbcommands.c:1248 #, c-format msgid "template database \"%s\" has a collation version mismatch" msgstr "" "в базе-шаблоне \"%s\" обнаружено несоответствие версии правила сортировки" -#: commands/dbcommands.c:1209 +#: commands/dbcommands.c:1250 #, c-format msgid "" "The template database was created using collation version %s, but the " @@ -8351,7 +8765,7 @@ msgstr "" "База-шаблон была создана с версией правила сортировки %s, но операционная " "система предоставляет версию %s." -#: commands/dbcommands.c:1212 +#: commands/dbcommands.c:1253 #, c-format msgid "" "Rebuild all objects in the template database that use the default collation " @@ -8362,18 +8776,18 @@ msgstr "" "сортировки, и выполните ALTER DATABASE %s REFRESH COLLATION VERSION, либо " "соберите PostgreSQL с правильной версией библиотеки." -#: commands/dbcommands.c:1248 commands/dbcommands.c:1980 +#: commands/dbcommands.c:1298 commands/dbcommands.c:2041 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "" "pg_global нельзя использовать в качестве табличного пространства по умолчанию" -#: commands/dbcommands.c:1274 +#: commands/dbcommands.c:1324 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "не удалось назначить новое табличное пространство по умолчанию \"%s\"" -#: commands/dbcommands.c:1276 +#: commands/dbcommands.c:1326 #, c-format msgid "" "There is a conflict because database \"%s\" already has some tables in this " @@ -8382,62 +8796,63 @@ msgstr "" "База данных \"%s\" содержит таблицы, которые уже находятся в этом табличном " "пространстве." -#: commands/dbcommands.c:1306 commands/dbcommands.c:1853 +#: commands/dbcommands.c:1356 commands/dbcommands.c:1912 #, c-format msgid "database \"%s\" already exists" msgstr "база данных \"%s\" уже существует" -#: commands/dbcommands.c:1320 +#: commands/dbcommands.c:1370 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "исходная база \"%s\" занята другими пользователями" -#: commands/dbcommands.c:1342 +#: commands/dbcommands.c:1392 #, c-format msgid "database OID %u is already in use by database \"%s\"" msgstr "OID базы данных %u уже используется базой данных \"%s\"" -#: commands/dbcommands.c:1348 +#: commands/dbcommands.c:1398 #, c-format msgid "data directory with the specified OID %u already exists" msgstr "каталог данных с указанным OID %u уже существует" -#: commands/dbcommands.c:1520 commands/dbcommands.c:1535 +#: 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\"" -#: commands/dbcommands.c:1523 +#: commands/dbcommands.c:1574 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "Для выбранного параметра LC_CTYPE требуется кодировка \"%s\"." -#: commands/dbcommands.c:1538 +#: commands/dbcommands.c:1589 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "Для выбранного параметра LC_COLLATE требуется кодировка \"%s\"." -#: commands/dbcommands.c:1619 +#: commands/dbcommands.c:1672 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "база данных \"%s\" не существует, пропускается" -#: commands/dbcommands.c:1643 +#: commands/dbcommands.c:1696 #, c-format msgid "cannot drop a template database" msgstr "удалить шаблон базы данных нельзя" -#: commands/dbcommands.c:1649 +#: commands/dbcommands.c:1702 #, c-format msgid "cannot drop the currently open database" msgstr "удалить базу данных, открытую в данный момент, нельзя" -#: commands/dbcommands.c:1662 +#: commands/dbcommands.c:1715 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "база \"%s\" используется активным слотом логической репликации" -#: commands/dbcommands.c:1664 +#: commands/dbcommands.c:1717 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." @@ -8445,12 +8860,12 @@ msgstr[0] "Обнаружен %d активный слот." msgstr[1] "Обнаружены %d активных слота." msgstr[2] "Обнаружено %d активных слотов." -#: commands/dbcommands.c:1678 +#: commands/dbcommands.c:1731 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "база \"%s\" используется в подписке с логической репликацией" -#: commands/dbcommands.c:1680 +#: commands/dbcommands.c:1733 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." @@ -8458,36 +8873,36 @@ msgstr[0] "Обнаружена %d подписка." msgstr[1] "Обнаружены %d подписки." msgstr[2] "Обнаружено %d подписок." -#: commands/dbcommands.c:1701 commands/dbcommands.c:1875 -#: commands/dbcommands.c:2002 +#: 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:1835 +#: commands/dbcommands.c:1894 #, c-format msgid "permission denied to rename database" -msgstr "нет прав на переименование базы данных" +msgstr "нет прав для переименования базы данных" -#: commands/dbcommands.c:1864 +#: commands/dbcommands.c:1923 #, c-format msgid "current database cannot be renamed" msgstr "нельзя переименовать текущую базу данных" -#: commands/dbcommands.c:1958 +#: commands/dbcommands.c:2019 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "" "изменить табличное пространство открытой в данный момент базы данных нельзя" -#: commands/dbcommands.c:2064 +#: commands/dbcommands.c:2125 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "" "некоторые отношения базы данных \"%s\" уже находятся в табличном " "пространстве \"%s\"" -#: commands/dbcommands.c:2066 +#: commands/dbcommands.c:2127 #, c-format msgid "" "You must move them back to the database's default tablespace before using " @@ -8496,38 +8911,38 @@ msgstr "" "Прежде чем выполнять эту команду, вы должны вернуть их назад в табличное " "пространство по умолчанию для этой базы данных." -#: commands/dbcommands.c:2193 commands/dbcommands.c:2909 -#: commands/dbcommands.c:3209 commands/dbcommands.c:3322 +#: 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:2254 +#: commands/dbcommands.c:2317 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "нераспознанный параметр DROP DATABASE: \"%s\"" -#: commands/dbcommands.c:2332 +#: commands/dbcommands.c:2395 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "параметр \"%s\" нельзя задать с другими параметрами" -#: commands/dbcommands.c:2379 +#: commands/dbcommands.c:2443 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "изменить свойства некорректной базы \"%s\" нельзя" -#: commands/dbcommands.c:2396 +#: commands/dbcommands.c:2460 #, c-format msgid "cannot disallow connections for current database" msgstr "запретить подключения к текущей базе данных нельзя" -#: commands/dbcommands.c:2611 +#: commands/dbcommands.c:2690 #, c-format msgid "permission denied to change owner of database" -msgstr "нет прав на изменение владельца базы данных" +msgstr "нет прав для изменения владельца базы данных" -#: commands/dbcommands.c:3015 +#: commands/dbcommands.c:3105 #, c-format msgid "" "There are %d other session(s) and %d prepared transaction(s) using the " @@ -8536,7 +8951,7 @@ msgstr "" "С этой базой данных связаны другие сеансы (%d) и подготовленные транзакции " "(%d)." -#: commands/dbcommands.c:3018 +#: 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." @@ -8544,7 +8959,7 @@ msgstr[0] "Эта база данных используется ещё в %d с msgstr[1] "Эта база данных используется ещё в %d сеансах." msgstr[2] "Эта база данных используется ещё в %d сеансах." -#: commands/dbcommands.c:3023 storage/ipc/procarray.c:3797 +#: 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." @@ -8552,204 +8967,204 @@ msgstr[0] "С этой базой данных связана %d подгото msgstr[1] "С этой базой данных связаны %d подготовленные транзакции." msgstr[2] "С этой базой данных связаны %d подготовленных транзакций." -#: commands/dbcommands.c:3165 +#: commands/dbcommands.c:3255 #, c-format msgid "missing directory \"%s\"" msgstr "отсутствует каталог \"%s\"" -#: commands/dbcommands.c:3223 commands/tablespace.c:190 -#: commands/tablespace.c:639 +#: commands/dbcommands.c:3313 commands/tablespace.c:184 +#: commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "не удалось получить информацию о каталоге \"%s\": %m" -#: commands/define.c:54 commands/define.c:258 commands/define.c:290 -#: commands/define.c:318 commands/define.c:364 +#: commands/define.c:53 commands/define.c:257 commands/define.c:289 +#: commands/define.c:317 commands/define.c:363 #, c-format msgid "%s requires a parameter" msgstr "%s требует параметр" -#: commands/define.c:87 commands/define.c:98 commands/define.c:192 -#: commands/define.c:210 commands/define.c:225 commands/define.c:243 +#: commands/define.c:86 commands/define.c:97 commands/define.c:191 +#: commands/define.c:209 commands/define.c:224 commands/define.c:242 #, c-format msgid "%s requires a numeric value" msgstr "%s требует числовое значение" -#: commands/define.c:154 +#: commands/define.c:153 #, c-format msgid "%s requires a Boolean value" msgstr "%s требует логическое значение" -#: commands/define.c:168 commands/define.c:177 commands/define.c:327 +#: commands/define.c:167 commands/define.c:176 commands/define.c:326 #, c-format msgid "%s requires an integer value" msgstr "%s требует целое значение" -#: commands/define.c:272 +#: commands/define.c:271 #, c-format msgid "argument of %s must be a name" msgstr "аргументом %s должно быть имя" -#: commands/define.c:302 +#: commands/define.c:301 #, c-format msgid "argument of %s must be a type name" msgstr "аргументом %s должно быть имя типа" -#: commands/define.c:348 +#: commands/define.c:347 #, c-format msgid "invalid argument for %s: \"%s\"" msgstr "неверный аргумент для %s: \"%s\"" -#: commands/dropcmds.c:101 commands/functioncmds.c:1387 -#: utils/adt/ruleutils.c:2895 +#: commands/dropcmds.c:96 commands/functioncmds.c:1382 +#: utils/adt/ruleutils.c:2910 #, c-format msgid "\"%s\" is an aggregate function" msgstr "функция \"%s\" является агрегатной" -#: commands/dropcmds.c:103 +#: commands/dropcmds.c:98 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Используйте DROP AGGREGATE для удаления агрегатных функций." -#: commands/dropcmds.c:158 commands/sequence.c:474 commands/tablecmds.c:3706 -#: commands/tablecmds.c:3864 commands/tablecmds.c:3916 -#: commands/tablecmds.c:16524 tcop/utility.c:1336 +#: 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:188 commands/dropcmds.c:287 commands/tablecmds.c:1281 +#: commands/dropcmds.c:183 commands/dropcmds.c:282 commands/tablecmds.c:1409 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "схема \"%s\" не существует, пропускается" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:277 +#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:286 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "тип \"%s\" не существует, пропускается" -#: commands/dropcmds.c:257 +#: commands/dropcmds.c:252 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "метод доступа \"%s\" не существует, пропускается" -#: commands/dropcmds.c:275 +#: commands/dropcmds.c:270 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "правило сортировки \"%s\" не существует, пропускается" -#: commands/dropcmds.c:282 +#: commands/dropcmds.c:277 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "преобразование \"%s\" не существует, пропускается" -#: commands/dropcmds.c:293 commands/statscmds.c:654 +#: commands/dropcmds.c:288 commands/statscmds.c:664 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "объект статистики \"%s\" не существует, пропускается" -#: commands/dropcmds.c:300 +#: commands/dropcmds.c:295 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "анализатор текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:307 +#: commands/dropcmds.c:302 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "словарь текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:314 +#: commands/dropcmds.c:309 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "шаблон текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:321 +#: commands/dropcmds.c:316 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "конфигурация текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:326 +#: commands/dropcmds.c:321 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "расширение \"%s\" не существует, пропускается" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "функция %s(%s) не существует, пропускается" -#: commands/dropcmds.c:349 +#: commands/dropcmds.c:344 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "процедура %s(%s) не существует, пропускается" -#: commands/dropcmds.c:362 +#: commands/dropcmds.c:357 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "подпрограмма %s(%s) не существует, пропускается" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:370 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "агрегатная функция %s(%s) не существует, пропускается" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:383 #, c-format msgid "operator %s does not exist, skipping" msgstr "оператор %s не существует, пропускается" -#: commands/dropcmds.c:394 +#: commands/dropcmds.c:389 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "язык \"%s\" не существует, пропускается" -#: commands/dropcmds.c:403 +#: commands/dropcmds.c:398 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "приведение %s к типу %s не существует, пропускается" -#: commands/dropcmds.c:412 +#: commands/dropcmds.c:407 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "преобразование для типа %s, языка \"%s\" не существует, пропускается" -#: commands/dropcmds.c:420 +#: commands/dropcmds.c:415 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "триггер \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:429 +#: commands/dropcmds.c:424 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr "политика \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:436 +#: commands/dropcmds.c:431 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "событийный триггер \"%s\" не существует, пропускается" -#: commands/dropcmds.c:442 +#: commands/dropcmds.c:437 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "правило \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:449 +#: commands/dropcmds.c:444 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "обёртка сторонних данных \"%s\" не существует, пропускается" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1360 +#: commands/dropcmds.c:448 commands/foreigncmds.c:1360 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "сервер \"%s\" не существует, пропускается" -#: commands/dropcmds.c:462 +#: commands/dropcmds.c:457 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "" "класс операторов \"%s\" не существует для метода доступа \"%s\", пропускается" -#: commands/dropcmds.c:474 +#: commands/dropcmds.c:469 #, c-format msgid "" "operator family \"%s\" does not exist for access method \"%s\", skipping" @@ -8757,179 +9172,189 @@ msgstr "" "семейство операторов \"%s\" не существует для метода доступа \"%s\", " "пропускается" -#: commands/dropcmds.c:481 +#: commands/dropcmds.c:476 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "публикация \"%s\" не существует, пропускается" -#: commands/event_trigger.c:125 +#: commands/event_trigger.c:137 #, c-format msgid "permission denied to create event trigger \"%s\"" -msgstr "нет прав на создание событийного триггера \"%s\"" +msgstr "нет прав для создания событийного триггера \"%s\"" -#: commands/event_trigger.c:127 +#: commands/event_trigger.c:139 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Для создания событийного триггера нужно быть суперпользователем." -#: commands/event_trigger.c:136 +#: commands/event_trigger.c:149 #, c-format msgid "unrecognized event name \"%s\"" msgstr "нераспознанное имя события \"%s\"" -#: commands/event_trigger.c:153 +#: commands/event_trigger.c:166 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "нераспознанная переменная фильтра \"%s\"" -#: commands/event_trigger.c:207 +#: commands/event_trigger.c:181 +#, c-format +msgid "tag filtering is not supported for login event triggers" +msgstr "фильтрация по тегу для событийных триггеров входа не поддерживается" + +#: commands/event_trigger.c:224 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "значение фильтра \"%s\" неприемлемо для переменной фильтра \"%s\"" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:213 commands/event_trigger.c:235 +#: commands/event_trigger.c:230 commands/event_trigger.c:252 #, c-format msgid "event triggers are not supported for %s" msgstr "для %s событийные триггеры не поддерживаются" -#: commands/event_trigger.c:248 +#: commands/event_trigger.c:265 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "переменная фильтра \"%s\" указана больше одного раза" -#: commands/event_trigger.c:376 commands/event_trigger.c:420 -#: commands/event_trigger.c:514 +#: 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:452 +#: commands/event_trigger.c:522 #, c-format msgid "event trigger with OID %u does not exist" msgstr "событийный триггер с OID %u не существует" -#: commands/event_trigger.c:482 +#: commands/event_trigger.c:552 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" -msgstr "нет прав на изменение владельца событийного триггера \"%s\"" +msgstr "нет прав для изменения владельца событийного триггера \"%s\"" -#: commands/event_trigger.c:484 +#: commands/event_trigger.c:554 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Владельцем событийного триггера должен быть суперпользователь." -#: commands/event_trigger.c:1304 +#: 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:1397 commands/event_trigger.c:1418 +#: 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:1831 +#: commands/event_trigger.c:1936 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции" -#: commands/explain.c:220 +#: 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:227 +#: commands/explain.c:273 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "нераспознанный параметр EXPLAIN: \"%s\"" -#: commands/explain.c:236 +#: commands/explain.c:282 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "параметр WAL оператора EXPLAIN требует указания ANALYZE" -#: commands/explain.c:245 +#: commands/explain.c:291 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "параметр TIMING оператора EXPLAIN требует указания ANALYZE" -#: commands/explain.c:251 +#: commands/explain.c:297 +#, c-format +msgid "EXPLAIN option SERIALIZE requires ANALYZE" +msgstr "параметр SERIALIZE оператора EXPLAIN требует указания ANALYZE" + +#: commands/explain.c:303 #, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" msgstr "" "параметры ANALYZE и GENERIC_PLAN оператора EXPLAIN нельзя использовать " "одновременно" -#: commands/extension.c:177 commands/extension.c:3033 +#: commands/extension.c:178 commands/extension.c:3031 #, c-format msgid "extension \"%s\" does not exist" msgstr "расширение \"%s\" не существует" -#: commands/extension.c:276 commands/extension.c:285 commands/extension.c:297 -#: commands/extension.c:307 +#: commands/extension.c:277 commands/extension.c:286 commands/extension.c:298 +#: commands/extension.c:308 #, c-format msgid "invalid extension name: \"%s\"" msgstr "неверное имя расширения: \"%s\"" -#: commands/extension.c:277 +#: commands/extension.c:278 #, c-format msgid "Extension names must not be empty." msgstr "Имя расширения не может быть пустым." -#: commands/extension.c:286 +#: commands/extension.c:287 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Имя расширения не может содержать \"--\"." -#: commands/extension.c:298 +#: commands/extension.c:299 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Имя расширения не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:308 +#: commands/extension.c:309 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Имя расширения не может содержать разделители пути." -#: commands/extension.c:323 commands/extension.c:332 commands/extension.c:341 -#: commands/extension.c:351 +#: commands/extension.c:324 commands/extension.c:333 commands/extension.c:342 +#: commands/extension.c:352 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "неверный идентификатор версии расширения: \"%s\"" -#: commands/extension.c:324 +#: commands/extension.c:325 #, c-format msgid "Version names must not be empty." msgstr "Идентификатор версии не может быть пустым." -#: commands/extension.c:333 +#: commands/extension.c:334 #, c-format msgid "Version names must not contain \"--\"." msgstr "Идентификатор версии не может содержать \"--\"." -#: commands/extension.c:342 +#: commands/extension.c:343 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "" "Идентификатор версии не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:352 +#: commands/extension.c:353 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Идентификатор версии не может содержать разделители пути." -#: commands/extension.c:506 +#: commands/extension.c:507 #, c-format msgid "extension \"%s\" is not available" msgstr "расширение \"%s\" отсутствует" -#: commands/extension.c:507 +#: commands/extension.c:508 #, c-format msgid "Could not open extension control file \"%s\": %m." msgstr "Не удалось открыть управляющий файл расширения \"%s\": %m." -#: commands/extension.c:509 +#: commands/extension.c:510 #, c-format msgid "" "The extension must first be installed on the system where PostgreSQL is " @@ -8937,91 +9362,91 @@ msgid "" msgstr "" "Сначала расширение нужно установить в системе, где работает PostgreSQL." -#: commands/extension.c:513 +#: commands/extension.c:514 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "не удалось открыть управляющий файл расширения \"%s\": %m" -#: commands/extension.c:536 commands/extension.c:546 +#: commands/extension.c:537 commands/extension.c:547 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "" "параметр \"%s\" нельзя задавать в дополнительном управляющем файле расширения" -#: commands/extension.c:568 commands/extension.c:576 commands/extension.c:584 -#: utils/misc/guc.c:3100 +#: commands/extension.c:569 commands/extension.c:577 commands/extension.c:585 +#: utils/misc/guc.c:3147 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "параметр \"%s\" требует логическое значение" -#: commands/extension.c:593 +#: commands/extension.c:594 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" не является верным названием кодировки" -#: commands/extension.c:607 commands/extension.c:622 +#: commands/extension.c:608 commands/extension.c:623 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "параметр \"%s\" должен содержать список имён расширений" -#: commands/extension.c:629 +#: commands/extension.c:630 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "нераспознанный параметр \"%s\" в файле \"%s\"" -#: commands/extension.c:638 +#: commands/extension.c:639 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "" "параметр \"schema\" не может быть указан вместе с \"relocatable\" = true" -#: commands/extension.c:816 +#: commands/extension.c:817 #, c-format msgid "" "transaction control statements are not allowed within an extension script" msgstr "в скрипте расширения не должно быть операторов управления транзакциями" -#: commands/extension.c:896 +#: commands/extension.c:897 #, c-format msgid "permission denied to create extension \"%s\"" -msgstr "нет прав на создание расширения \"%s\"" +msgstr "нет прав для создания расширения \"%s\"" -#: commands/extension.c:899 +#: commands/extension.c:900 #, c-format msgid "" "Must have CREATE privilege on current database to create this extension." msgstr "Для создания этого расширения нужно иметь право CREATE в текущей базе." -#: commands/extension.c:900 +#: commands/extension.c:901 #, c-format msgid "Must be superuser to create this extension." msgstr "Для создания этого расширения нужно быть суперпользователем." -#: commands/extension.c:904 +#: commands/extension.c:905 #, c-format msgid "permission denied to update extension \"%s\"" -msgstr "нет прав на изменение расширения \"%s\"" +msgstr "нет прав для изменения расширения \"%s\"" -#: commands/extension.c:907 +#: commands/extension.c:908 #, c-format msgid "" "Must have CREATE privilege on current database to update this extension." msgstr "" "Для обновления этого расширения нужно иметь право CREATE в текущей базе." -#: commands/extension.c:908 +#: commands/extension.c:909 #, c-format msgid "Must be superuser to update this extension." msgstr "Для изменения этого расширения нужно быть суперпользователем." -#: commands/extension.c:1046 +#: commands/extension.c:1042 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "" "недопустимый символ в имени владельца расширения: имя не должно содержать " "\"%s\"" -#: commands/extension.c:1070 commands/extension.c:1097 +#: commands/extension.c:1066 commands/extension.c:1093 #, c-format msgid "" "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" @@ -9029,7 +9454,7 @@ msgstr "" "недопустимый символ в имени схемы расширения \"%s\": имя не должно содержать " "\"%s\"" -#: commands/extension.c:1292 +#: commands/extension.c:1288 #, c-format msgid "" "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" @@ -9037,12 +9462,12 @@ msgstr "" "для расширения \"%s\" не определён путь обновления с версии \"%s\" до версии " "\"%s\"" -#: commands/extension.c:1500 commands/extension.c:3091 +#: commands/extension.c:1496 commands/extension.c:3089 #, c-format msgid "version to install must be specified" msgstr "нужно указать версию для установки" -#: commands/extension.c:1537 +#: commands/extension.c:1533 #, c-format msgid "" "extension \"%s\" has no installation script nor update path for version " @@ -9051,71 +9476,71 @@ msgstr "" "для расширения \"%s\" не определён путь установки или обновления для версии " "\"%s\"" -#: commands/extension.c:1571 +#: commands/extension.c:1567 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "расширение \"%s\" должно устанавливаться в схему \"%s\"" -#: commands/extension.c:1731 +#: commands/extension.c:1727 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "выявлена циклическая зависимость между расширениями \"%s\" и \"%s\"" -#: commands/extension.c:1736 +#: commands/extension.c:1732 #, c-format msgid "installing required extension \"%s\"" msgstr "установка требуемого расширения \"%s\"" -#: commands/extension.c:1759 +#: commands/extension.c:1755 #, c-format msgid "required extension \"%s\" is not installed" msgstr "требуемое расширение \"%s\" не установлено" -#: commands/extension.c:1762 +#: commands/extension.c:1758 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "" "Выполните CREATE EXTENSION ... CASCADE, чтобы установить также требуемые " "расширения." -#: commands/extension.c:1797 +#: commands/extension.c:1793 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "расширение \"%s\" уже существует, пропускается" -#: commands/extension.c:1804 +#: commands/extension.c:1800 #, c-format msgid "extension \"%s\" already exists" msgstr "расширение \"%s\" уже существует" -#: commands/extension.c:1815 +#: commands/extension.c:1811 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "вложенные операторы CREATE EXTENSION не поддерживаются" -#: commands/extension.c:1979 +#: commands/extension.c:1975 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "удалить расширение \"%s\" нельзя, так как это модифицируемый объект" -#: commands/extension.c:2454 +#: commands/extension.c:2450 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "" "%s можно вызывать только из SQL-скрипта, запускаемого командой CREATE " "EXTENSION" -#: commands/extension.c:2466 +#: commands/extension.c:2462 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u не относится к таблице" -#: commands/extension.c:2471 +#: commands/extension.c:2467 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "таблица \"%s\" не относится к созданному расширению" -#: commands/extension.c:2817 +#: commands/extension.c:2813 #, c-format msgid "" "cannot move extension \"%s\" into schema \"%s\" because the extension " @@ -9124,12 +9549,12 @@ msgstr "" "переместить расширение \"%s\" в схему \"%s\" нельзя, так как оно содержит " "схему" -#: commands/extension.c:2858 commands/extension.c:2952 +#: commands/extension.c:2854 commands/extension.c:2948 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "расширение \"%s\" не поддерживает SET SCHEMA" -#: commands/extension.c:2915 +#: commands/extension.c:2911 #, c-format msgid "" "cannot SET SCHEMA of extension \"%s\" because other extensions prevent it" @@ -9137,32 +9562,32 @@ msgstr "" "выполнить SET SCHEMA для расширения \"%s\" нельзя, так как этому " "препятствуют другие расширения" -#: commands/extension.c:2917 +#: commands/extension.c:2913 #, c-format msgid "Extension \"%s\" requests no relocation of extension \"%s\"." msgstr "Расширение \"%s\" не допускает перемещения расширения \"%s\"." -#: commands/extension.c:2954 +#: commands/extension.c:2950 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "объект %s не принадлежит схеме расширения \"%s\"" -#: commands/extension.c:3013 +#: commands/extension.c:3011 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "вложенные операторы ALTER EXTENSION не поддерживаются" -#: commands/extension.c:3102 +#: commands/extension.c:3100 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "версия \"%s\" расширения \"%s\" уже установлена" -#: commands/extension.c:3314 +#: commands/extension.c:3311 #, c-format msgid "cannot add an object of this type to an extension" msgstr "добавить объект этого типа к расширению нельзя" -#: commands/extension.c:3380 +#: commands/extension.c:3409 #, c-format msgid "" "cannot add schema \"%s\" to extension \"%s\" because the schema contains the " @@ -9171,7 +9596,12 @@ msgstr "" "добавить схему \"%s\" к расширению \"%s\" нельзя, так как схема содержит " "расширение" -#: commands/extension.c:3474 +#: commands/extension.c:3491 commands/typecmds.c:4042 utils/fmgr/funcapi.c:725 +#, c-format +msgid "could not find multirange type for data type %s" +msgstr "тип мультидиапазона для типа данных %s не найден" + +#: commands/extension.c:3532 #, c-format msgid "file \"%s\" is too large" msgstr "файл \"%s\" слишком большой" @@ -9189,7 +9619,7 @@ msgstr "параметр \"%s\" указан неоднократно" #: commands/foreigncmds.c:221 commands/foreigncmds.c:229 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" -msgstr "нет прав на изменение владельца обёртки сторонних данных \"%s\"" +msgstr "нет прав для изменения владельца обёртки сторонних данных \"%s\"" #: commands/foreigncmds.c:223 #, c-format @@ -9202,7 +9632,7 @@ msgstr "" msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Владельцем обёртки сторонних данных должен быть суперпользователь." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:678 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:691 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "обёртка сторонних данных \"%s\" не существует" @@ -9220,7 +9650,7 @@ msgstr "сторонний сервер с OID %u не существует" #: commands/foreigncmds.c:580 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" -msgstr "нет прав на создание обёртки сторонних данных \"%s\"" +msgstr "нет прав для создания обёртки сторонних данных \"%s\"" #: commands/foreigncmds.c:582 #, c-format @@ -9230,7 +9660,7 @@ msgstr "Для создания обёртки сторонних данных #: commands/foreigncmds.c:697 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" -msgstr "нет прав на изменение обёртки сторонних данных \"%s\"" +msgstr "нет прав для изменения обёртки сторонних данных \"%s\"" #: commands/foreigncmds.c:699 #, c-format @@ -9284,7 +9714,7 @@ msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" не существует, " "пропускается" -#: commands/foreigncmds.c:1507 foreign/foreign.c:391 +#: commands/foreigncmds.c:1507 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "обёртка сторонних данных \"%s\" не имеет обработчика" @@ -9299,151 +9729,151 @@ msgstr "обёртка сторонних данных \"%s\" не поддер msgid "importing foreign table \"%s\"" msgstr "импорт сторонней таблицы \"%s\"" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-функция не может возвращать тип-пустышку %s" -#: commands/functioncmds.c:114 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "возвращаемый тип %s - лишь пустышка" -#: commands/functioncmds.c:143 parser/parse_type.c:354 +#: commands/functioncmds.c:138 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "для типа-пустышки \"%s\" нельзя указать модификатор типа" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:144 #, c-format msgid "type \"%s\" is not yet defined" msgstr "тип \"%s\" ещё не определён" -#: commands/functioncmds.c:150 +#: commands/functioncmds.c:145 #, c-format msgid "Creating a shell type definition." msgstr "Создание определения типа-пустышки." -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:244 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-функция не может принимать значение типа-пустышки %s" -#: commands/functioncmds.c:255 +#: commands/functioncmds.c:250 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "агрегатная функция не может принимать значение типа-пустышки %s" -#: commands/functioncmds.c:260 +#: commands/functioncmds.c:255 #, c-format msgid "argument type %s is only a shell" msgstr "тип аргумента %s - лишь пустышка" -#: commands/functioncmds.c:270 +#: commands/functioncmds.c:265 #, c-format msgid "type %s does not exist" msgstr "тип %s не существует" -#: commands/functioncmds.c:284 +#: commands/functioncmds.c:279 #, c-format msgid "aggregates cannot accept set arguments" msgstr "агрегатные функции не принимают в аргументах множества" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:283 #, c-format msgid "procedures cannot accept set arguments" msgstr "процедуры не принимают в аргументах множества" -#: commands/functioncmds.c:292 +#: commands/functioncmds.c:287 #, c-format msgid "functions cannot accept set arguments" msgstr "функции не принимают аргументы-множества" -#: commands/functioncmds.c:302 +#: commands/functioncmds.c:297 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "параметр VARIADIC должен быть последним в списке входных параметров" -#: commands/functioncmds.c:322 +#: commands/functioncmds.c:317 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "параметр VARIADIC должен быть последним в списке параметров" -#: commands/functioncmds.c:347 +#: commands/functioncmds.c:342 #, c-format msgid "VARIADIC parameter must be an array" msgstr "параметр VARIADIC должен быть массивом" -#: commands/functioncmds.c:392 +#: commands/functioncmds.c:387 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "имя параметра \"%s\" указано неоднократно" -#: commands/functioncmds.c:410 +#: commands/functioncmds.c:405 #, c-format msgid "only input parameters can have default values" msgstr "значения по умолчанию могут быть только у входных параметров" -#: commands/functioncmds.c:425 +#: commands/functioncmds.c:420 #, c-format msgid "cannot use table references in parameter default value" msgstr "в значениях параметров по умолчанию нельзя ссылаться на таблицы" -#: commands/functioncmds.c:449 +#: commands/functioncmds.c:444 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "" "входные параметры, следующие за параметром со значением по умолчанию, также " "должны иметь значения по умолчанию" -#: commands/functioncmds.c:459 +#: commands/functioncmds.c:454 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "" "в объявлении процедуры параметры OUT не могут находиться после параметра со " "значением по умолчанию" -#: commands/functioncmds.c:601 commands/functioncmds.c:780 +#: commands/functioncmds.c:596 commands/functioncmds.c:775 #, c-format msgid "invalid attribute in procedure definition" msgstr "некорректный атрибут в определении процедуры" -#: commands/functioncmds.c:697 +#: commands/functioncmds.c:692 #, c-format msgid "support function %s must return type %s" msgstr "вспомогательная функция %s должна возвращать тип %s" -#: commands/functioncmds.c:708 +#: commands/functioncmds.c:703 #, c-format msgid "must be superuser to specify a support function" msgstr "для указания вспомогательной функции нужно быть суперпользователем" -#: commands/functioncmds.c:829 commands/functioncmds.c:1432 +#: commands/functioncmds.c:824 commands/functioncmds.c:1427 #, c-format msgid "COST must be positive" msgstr "значение COST должно быть положительным" -#: commands/functioncmds.c:837 commands/functioncmds.c:1440 +#: commands/functioncmds.c:832 commands/functioncmds.c:1435 #, c-format msgid "ROWS must be positive" msgstr "значение ROWS должно быть положительным" -#: commands/functioncmds.c:866 +#: commands/functioncmds.c:861 #, c-format msgid "no function body specified" msgstr "не указано тело функции" -#: commands/functioncmds.c:871 +#: commands/functioncmds.c:866 #, c-format msgid "duplicate function body specified" msgstr "тело функции задано неоднократно" -#: commands/functioncmds.c:876 +#: commands/functioncmds.c:871 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "встроенное тело функции SQL допускается только для языка SQL" -#: commands/functioncmds.c:918 +#: commands/functioncmds.c:913 #, c-format msgid "" "SQL function with unquoted function body cannot have polymorphic arguments" @@ -9451,84 +9881,84 @@ msgstr "" "у SQL-функции с телом, задаваемым не в кавычках, не может быть полиморфных " "аргументов" -#: commands/functioncmds.c:944 commands/functioncmds.c:963 +#: commands/functioncmds.c:939 commands/functioncmds.c:958 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "" "%s на данный момент не поддерживается в теле SQL-функции, задаваемом не в " "кавычках" -#: commands/functioncmds.c:991 +#: commands/functioncmds.c:986 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "для языка \"%s\" нужно только одно выражение AS" -#: commands/functioncmds.c:1096 +#: commands/functioncmds.c:1091 #, c-format msgid "no language specified" msgstr "язык не указан" -#: commands/functioncmds.c:1104 commands/functioncmds.c:2105 -#: commands/proclang.c:237 +#: 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:1106 commands/functioncmds.c:2107 +#: commands/functioncmds.c:1101 commands/functioncmds.c:2119 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Выполните CREATE EXTENSION, чтобы загрузить язык в базу данных." -#: commands/functioncmds.c:1139 commands/functioncmds.c:1424 +#: commands/functioncmds.c:1134 commands/functioncmds.c:1419 #, c-format msgid "only superuser can define a leakproof function" msgstr "" "только суперпользователь может определить функцию с атрибутом LEAKPROOF" -#: commands/functioncmds.c:1190 +#: commands/functioncmds.c:1185 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "" "результат функции должен иметь тип %s (в соответствии с параметрами OUT)" -#: commands/functioncmds.c:1203 +#: commands/functioncmds.c:1198 #, c-format msgid "function result type must be specified" msgstr "необходимо указать тип результата функции" -#: commands/functioncmds.c:1256 commands/functioncmds.c:1444 +#: commands/functioncmds.c:1251 commands/functioncmds.c:1439 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "указание ROWS неприменимо, когда функция возвращает не множество" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1546 #, c-format msgid "source data type %s is a pseudo-type" msgstr "исходный тип данных %s является псевдотипом" -#: commands/functioncmds.c:1553 +#: commands/functioncmds.c:1552 #, c-format msgid "target data type %s is a pseudo-type" msgstr "целевой тип данных %s является псевдотипом" -#: commands/functioncmds.c:1577 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "" "приведение будет проигнорировано, так как исходные данные имеют тип домен" -#: commands/functioncmds.c:1582 +#: commands/functioncmds.c:1581 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "" "приведение будет проигнорировано, так как целевые данные имеют тип домен" -#: commands/functioncmds.c:1607 +#: commands/functioncmds.c:1606 #, c-format msgid "cast function must take one to three arguments" msgstr "функция приведения должна принимать от одного до трёх аргументов" -#: commands/functioncmds.c:1613 +#: commands/functioncmds.c:1612 #, c-format msgid "" "argument of cast function must match or be binary-coercible from source data " @@ -9537,17 +9967,17 @@ msgstr "" "аргумент функции приведения должен совпадать или быть двоично-совместимым с " "исходным типом данных" -#: commands/functioncmds.c:1617 +#: commands/functioncmds.c:1616 #, c-format msgid "second argument of cast function must be type %s" msgstr "второй аргумент функции приведения должен иметь тип %s" -#: commands/functioncmds.c:1622 +#: commands/functioncmds.c:1621 #, c-format msgid "third argument of cast function must be type %s" msgstr "третий аргумент функции приведения должен иметь тип %s" -#: commands/functioncmds.c:1629 +#: commands/functioncmds.c:1628 #, c-format msgid "" "return data type of cast function must match or be binary-coercible to " @@ -9556,127 +9986,132 @@ msgstr "" "тип возвращаемых данных функции приведения должен совпадать или быть двоично-" "совместимым с целевым типом данных" -#: commands/functioncmds.c:1640 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not be volatile" msgstr "функция приведения не может быть изменчивой (volatile)" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1644 #, c-format msgid "cast function must be a normal function" msgstr "функция приведения должна быть обычной функцией" -#: commands/functioncmds.c:1649 +#: commands/functioncmds.c:1648 #, c-format msgid "cast function must not return a set" msgstr "функция приведения не может возвращать множество" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1674 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "для создания приведения WITHOUT FUNCTION нужно быть суперпользователем" -#: commands/functioncmds.c:1690 +#: commands/functioncmds.c:1689 #, c-format msgid "source and target data types are not physically compatible" msgstr "исходный и целевой типы данных несовместимы физически" -#: commands/functioncmds.c:1705 +#: commands/functioncmds.c:1709 #, c-format msgid "composite data types are not binary-compatible" msgstr "составные типы данных несовместимы на двоичном уровне" -#: commands/functioncmds.c:1711 -#, c-format -msgid "enum data types are not binary-compatible" -msgstr "типы-перечисления несовместимы на двоичном уровне" - -#: commands/functioncmds.c:1717 +#: commands/functioncmds.c:1715 #, c-format msgid "array data types are not binary-compatible" msgstr "типы-массивы несовместимы на двоичном уровне" -#: commands/functioncmds.c:1734 +#: 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:1744 +#: commands/functioncmds.c:1756 #, c-format msgid "source data type and target data type are the same" msgstr "исходный тип данных совпадает с целевым" -#: commands/functioncmds.c:1777 +#: commands/functioncmds.c:1789 #, c-format msgid "transform function must not be volatile" msgstr "функция преобразования не может быть изменчивой" -#: commands/functioncmds.c:1781 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must be a normal function" msgstr "функция преобразования должна быть обычной функцией" -#: commands/functioncmds.c:1785 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must not return a set" msgstr "функция преобразования не может возвращать множество" -#: commands/functioncmds.c:1789 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must take one argument" msgstr "функция преобразования должна принимать один аргумент" -#: commands/functioncmds.c:1793 +#: commands/functioncmds.c:1805 #, c-format msgid "first argument of transform function must be type %s" msgstr "первый аргумент функции преобразования должен иметь тип %s" -#: commands/functioncmds.c:1832 +#: commands/functioncmds.c:1844 #, c-format msgid "data type %s is a pseudo-type" msgstr "тип данных %s является псевдотипом" -#: commands/functioncmds.c:1838 +#: commands/functioncmds.c:1850 #, c-format msgid "data type %s is a domain" msgstr "тип данных \"%s\" является доменом" -#: commands/functioncmds.c:1878 +#: commands/functioncmds.c:1890 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "результат функции FROM SQL должен иметь тип %s" -#: commands/functioncmds.c:1904 +#: commands/functioncmds.c:1916 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "результат функции TO SQL должен иметь тип данных преобразования" -#: commands/functioncmds.c:1931 +#: commands/functioncmds.c:1943 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "преобразование для типа %s, языка \"%s\" уже существует" -#: commands/functioncmds.c:2017 +#: commands/functioncmds.c:2029 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "преобразование для типа %s, языка \"%s\" не существует" -#: commands/functioncmds.c:2041 +#: commands/functioncmds.c:2053 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "функция %s уже существует в схеме \"%s\"" -#: commands/functioncmds.c:2092 +#: commands/functioncmds.c:2104 #, c-format msgid "no inline code specified" msgstr "нет внедрённого кода" -#: commands/functioncmds.c:2138 +#: commands/functioncmds.c:2150 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "язык \"%s\" не поддерживает выполнение внедрённого кода" -#: commands/functioncmds.c:2233 +#: 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" @@ -9684,97 +10119,100 @@ msgstr[0] "процедуре нельзя передать больше %d ар msgstr[1] "процедуре нельзя передать больше %d аргументов" msgstr[2] "процедуре нельзя передать больше %d аргументов" -#: commands/indexcmds.c:640 +#: commands/indexcmds.c:656 #, c-format msgid "must specify at least one column" msgstr "нужно указать минимум один столбец" -#: commands/indexcmds.c:644 +#: commands/indexcmds.c:660 #, c-format msgid "cannot use more than %d columns in an index" msgstr "число столбцов в индексе не может превышать %d" -#: commands/indexcmds.c:687 +#: commands/indexcmds.c:703 #, c-format msgid "cannot create index on relation \"%s\"" msgstr "создать индекс для отношения \"%s\" нельзя" -#: commands/indexcmds.c:713 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "" "создать индекс в секционированной таблице \"%s\" параллельным способом нельзя" -#: commands/indexcmds.c:718 -#, c-format -msgid "cannot create exclusion constraints on partitioned table \"%s\"" -msgstr "" -"создать ограничение-исключение в секционированной таблице \"%s\" нельзя" - -#: commands/indexcmds.c:728 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "создавать индексы во временных таблицах других сеансов нельзя" -#: commands/indexcmds.c:766 commands/tablecmds.c:784 commands/tablespace.c:1184 +#: 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:798 commands/tablecmds.c:815 commands/tablecmds.c:3405 +#: 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:831 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "устаревший метод доступа \"rtree\" подменяется методом \"gist\"" -#: commands/indexcmds.c:852 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "метод доступа \"%s\" не поддерживает уникальные индексы" -#: commands/indexcmds.c:857 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "метод доступа \"%s\" не поддерживает включаемые столбцы" -#: commands/indexcmds.c:862 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "метод доступа \"%s\" не поддерживает индексы по многим столбцам" -#: commands/indexcmds.c:867 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "метод доступа \"%s\" не поддерживает ограничения-исключения" -#: commands/indexcmds.c:994 +#: commands/indexcmds.c:1007 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "" "сопоставить ключ секционирования с индексом, использующим метод доступа " "\"%s\", нельзя" -#: commands/indexcmds.c:1004 +#: commands/indexcmds.c:1017 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "" "неподдерживаемое ограничение \"%s\" с определением ключа секционирования" -#: commands/indexcmds.c:1006 +#: commands/indexcmds.c:1019 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "" "Ограничения %s не могут использоваться, когда ключи секционирования включают " "выражения." -#: commands/indexcmds.c:1048 +#: 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:1085 #, c-format msgid "" "unique constraint on partitioned table must include all partitioning columns" @@ -9782,7 +10220,7 @@ msgstr "" "ограничение уникальности в секционированной таблице должно включать все " "секционирующие столбцы" -#: commands/indexcmds.c:1049 +#: commands/indexcmds.c:1086 #, c-format msgid "" "%s constraint on table \"%s\" lacks column \"%s\" which is part of the " @@ -9791,92 +10229,92 @@ msgstr "" "В ограничении %s таблицы \"%s\" не хватает столбца \"%s\", входящего в ключ " "секционирования." -#: commands/indexcmds.c:1068 commands/indexcmds.c:1087 +#: commands/indexcmds.c:1105 commands/indexcmds.c:1124 #, c-format msgid "index creation on system columns is not supported" msgstr "создание индекса для системных столбцов не поддерживается" -#: commands/indexcmds.c:1316 tcop/utility.c:1526 +#: commands/indexcmds.c:1354 tcop/utility.c:1515 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "создать уникальный индекс в секционированной таблице \"%s\" нельзя" -#: commands/indexcmds.c:1318 tcop/utility.c:1528 +#: commands/indexcmds.c:1356 tcop/utility.c:1517 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Таблица \"%s\" содержит секции, являющиеся сторонними таблицами." -#: commands/indexcmds.c:1803 +#: commands/indexcmds.c:1806 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функции в предикате индекса должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1881 parser/parse_utilcmd.c:2522 -#: parser/parse_utilcmd.c:2657 +#: 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:1905 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1909 parser/parse_utilcmd.c:1807 #, c-format msgid "expressions are not supported in included columns" msgstr "выражения во включаемых столбцах не поддерживаются" -#: commands/indexcmds.c:1946 +#: commands/indexcmds.c:1950 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "функции в индексном выражении должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1961 +#: commands/indexcmds.c:1965 #, c-format msgid "including column does not support a collation" msgstr "включаемые столбцы не поддерживают правила сортировки" -#: commands/indexcmds.c:1965 +#: commands/indexcmds.c:1969 #, c-format msgid "including column does not support an operator class" msgstr "включаемые столбцы не поддерживают классы операторов" -#: commands/indexcmds.c:1969 +#: commands/indexcmds.c:1973 #, c-format msgid "including column does not support ASC/DESC options" msgstr "включаемые столбцы не поддерживают сортировку ASC/DESC" -#: commands/indexcmds.c:1973 +#: commands/indexcmds.c:1977 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "включаемые столбцы не поддерживают указания NULLS FIRST/LAST" -#: commands/indexcmds.c:2014 +#: commands/indexcmds.c:2020 #, c-format msgid "could not determine which collation to use for index expression" msgstr "не удалось определить правило сортировки для индексного выражения" -#: commands/indexcmds.c:2022 commands/tablecmds.c:17534 commands/typecmds.c:807 -#: parser/parse_expr.c:2722 parser/parse_type.c:568 parser/parse_utilcmd.c:3783 -#: utils/adt/misc.c:586 +#: 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 не поддерживает сортировку (COLLATION)" -#: commands/indexcmds.c:2087 +#: commands/indexcmds.c:2095 #, c-format msgid "operator %s is not commutative" msgstr "оператор %s не коммутативен" -#: commands/indexcmds.c:2089 +#: commands/indexcmds.c:2097 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "" "В ограничениях-исключениях могут использоваться только коммутативные " "операторы." -#: commands/indexcmds.c:2115 +#: commands/indexcmds.c:2123 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "оператор \"%s\" не входит в семейство операторов \"%s\"" -#: commands/indexcmds.c:2118 +#: commands/indexcmds.c:2126 #, c-format msgid "" "The exclusion operator must be related to the index operator class for the " @@ -9885,25 +10323,25 @@ msgstr "" "Оператор исключения для ограничения должен относиться к классу операторов " "индекса." -#: commands/indexcmds.c:2153 +#: commands/indexcmds.c:2161 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "метод доступа \"%s\" не поддерживает сортировку ASC/DESC" -#: commands/indexcmds.c:2158 +#: 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:2204 commands/tablecmds.c:17559 -#: commands/tablecmds.c:17565 commands/typecmds.c:2301 +#: 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:2206 +#: commands/indexcmds.c:2212 #, c-format msgid "" "You must specify an operator class for the index or define a default " @@ -9912,86 +10350,89 @@ msgstr "" "Вы должны указать класс операторов для индекса или определить класс " "операторов по умолчанию для этого типа данных." -#: commands/indexcmds.c:2235 commands/indexcmds.c:2243 +#: 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:2257 commands/typecmds.c:2289 +#: 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:2347 +#: commands/indexcmds.c:2353 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "" "для типа данных %s определено несколько классов операторов по умолчанию" -#: commands/indexcmds.c:2675 +#: commands/indexcmds.c:2681 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "нераспознанный параметр REINDEX: \"%s\"" -#: commands/indexcmds.c:2899 +#: commands/indexcmds.c:2913 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "" "в таблице \"%s\" нет индексов, которые можно переиндексировать неблокирующим " "способом" -#: commands/indexcmds.c:2913 +#: commands/indexcmds.c:2927 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "в таблице \"%s\" нет индексов для переиндексации" -#: commands/indexcmds.c:2958 commands/indexcmds.c:3468 -#: commands/indexcmds.c:3596 +#: commands/indexcmds.c:2974 commands/indexcmds.c:3485 +#: commands/indexcmds.c:3615 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Переиндексировать системные каталоги неблокирующим способом нельзя" -#: commands/indexcmds.c:2981 +#: commands/indexcmds.c:2998 #, c-format msgid "can only reindex the currently open database" msgstr "переиндексировать можно только текущую базу данных" -#: commands/indexcmds.c:3075 +#: commands/indexcmds.c:3090 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "" "все системные каталоги пропускаются, так как их нельзя переиндексировать " "неблокирующим способом" -#: commands/indexcmds.c:3108 +#: commands/indexcmds.c:3123 #, c-format msgid "cannot move system relations, skipping all" msgstr "переместить системные отношения нельзя, все они пропускаются" -#: commands/indexcmds.c:3154 +#: commands/indexcmds.c:3169 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "при переиндексировании секционированной таблицы \"%s.%s\"" -#: commands/indexcmds.c:3157 +#: commands/indexcmds.c:3172 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "при перестроении секционированного индекса \"%s.%s\"" -#: commands/indexcmds.c:3348 commands/indexcmds.c:4204 +#: commands/indexcmds.c:3365 commands/indexcmds.c:4241 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблица \"%s.%s\" переиндексирована" -#: commands/indexcmds.c:3500 commands/indexcmds.c:3552 +#: commands/indexcmds.c:3517 commands/indexcmds.c:3570 #, c-format -msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" -msgstr "" -"перестроить нерабочий индекс \"%s.%s\" неблокирующим способом нельзя, он " -"пропускается" +msgid "skipping reindex of invalid index \"%s.%s\"" +msgstr "индекс \"%s.%s\" — нерабочий, переиндексация пропускается" + +#: 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:3506 +#: commands/indexcmds.c:3524 #, c-format msgid "" "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" @@ -9999,51 +10440,51 @@ msgstr "" "перестроить индекс ограничения-исключения \"%s.%s\" неблокирующим способом " "нельзя, он пропускается" -#: commands/indexcmds.c:3661 +#: commands/indexcmds.c:3680 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "переиндексировать отношение такого типа неблокирующим способом нельзя" -#: commands/indexcmds.c:3682 +#: commands/indexcmds.c:3698 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "" "переместить отношение, не являющееся разделяемым, в табличное пространство " "\"%s\" нельзя" -#: commands/indexcmds.c:4185 commands/indexcmds.c:4197 +#: commands/indexcmds.c:4222 commands/indexcmds.c:4234 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "индекс \"%s.%s\" был перестроен" -#: commands/indexcmds.c:4187 commands/indexcmds.c:4206 +#: commands/indexcmds.c:4224 commands/indexcmds.c:4243 #, c-format msgid "%s." msgstr "%s." -#: commands/lockcmds.c:92 +#: commands/lockcmds.c:91 #, c-format msgid "cannot lock relation \"%s\"" msgstr "заблокировать отношение \"%s\" нельзя" -#: commands/matview.c:193 +#: commands/matview.c:206 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "" "CONCURRENTLY нельзя использовать, когда материализованное представление не " "наполнено" -#: commands/matview.c:199 gram.y:18306 +#: commands/matview.c:212 gram.y:18918 #, c-format msgid "%s and %s options cannot be used together" msgstr "параметры %s и %s исключают друг друга" -#: commands/matview.c:256 +#: commands/matview.c:269 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "обновить материализованное представление \"%s\" параллельно нельзя" -#: commands/matview.c:259 +#: commands/matview.c:272 #, c-format msgid "" "Create a unique index with no WHERE clause on one or more columns of the " @@ -10052,7 +10493,7 @@ msgstr "" "Создайте уникальный индекс без предложения WHERE для одного или нескольких " "столбцов материализованного представления." -#: commands/matview.c:653 +#: commands/matview.c:666 #, c-format msgid "" "new data for materialized view \"%s\" contains duplicate rows without any " @@ -10061,7 +10502,7 @@ msgstr "" "новые данные для материализованного представления \"%s\" содержат " "дублирующиеся строки (без учёта столбцов с NULL)" -#: commands/matview.c:655 +#: commands/matview.c:668 #, c-format msgid "Row: %s" msgstr "Строка: %s" @@ -10276,22 +10717,22 @@ msgstr "номер оператора %d для (%s,%s) дублируется" msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "оператор %d(%s,%s) уже существует в семействе \"%s\"" -#: commands/opclasscmds.c:1566 +#: 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:1647 +#: 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:1687 +#: 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:1718 +#: commands/opclasscmds.c:1815 #, c-format msgid "" "operator class \"%s\" for access method \"%s\" already exists in schema " @@ -10300,7 +10741,7 @@ msgstr "" "класс операторов \"%s\" для метода доступа \"%s\" уже существует в схеме " "\"%s\"" -#: commands/opclasscmds.c:1741 +#: commands/opclasscmds.c:1838 #, c-format msgid "" "operator family \"%s\" for access method \"%s\" already exists in schema " @@ -10314,7 +10755,7 @@ msgstr "" msgid "SETOF type not allowed for operator argument" msgstr "аргументом оператора не может быть тип SETOF" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:481 +#: commands/operatorcmds.c:154 commands/operatorcmds.c:554 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "атрибут оператора \"%s\" не распознан" @@ -10354,53 +10795,70 @@ msgstr "функция оценки соединения %s присутству msgid "join estimator function %s must return type %s" msgstr "функция оценки соединения %s должна возвращать тип %s" -#: commands/operatorcmds.c:475 +#: commands/operatorcmds.c:388 parser/parse_oper.c:119 parser/parse_oper.c:637 +#: utils/adt/regproc.c:509 utils/adt/regproc.c:683 +#, c-format +msgid "operator does not exist: %s" +msgstr "оператор не существует: %s" + +#: commands/operatorcmds.c:396 parser/parse_oper.c:702 parser/parse_oper.c:815 +#, c-format +msgid "operator is only a shell: %s" +msgstr "оператор \"%s\" - лишь оболочка" + +#: commands/operatorcmds.c:548 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "атрибут оператора \"%s\" нельзя изменить" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:149 -#: commands/tablecmds.c:1612 commands/tablecmds.c:2215 -#: commands/tablecmds.c:3516 commands/tablecmds.c:6365 -#: commands/tablecmds.c:9192 commands/tablecmds.c:17121 -#: commands/tablecmds.c:17156 commands/trigger.c:323 commands/trigger.c:1339 -#: commands/trigger.c:1449 rewrite/rewriteDefine.c:275 -#: rewrite/rewriteDefine.c:786 rewrite/rewriteRemove.c:80 +#: commands/operatorcmds.c:615 commands/operatorcmds.c:622 +#: commands/operatorcmds.c:628 commands/operatorcmds.c:634 +#, c-format +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: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\" - это системный каталог" -#: commands/policy.c:172 +#: commands/policy.c:169 #, c-format msgid "ignoring specified roles other than PUBLIC" msgstr "все указанные роли, кроме PUBLIC, игнорируются" -#: commands/policy.c:173 +#: commands/policy.c:170 #, c-format msgid "All roles are members of the PUBLIC role." msgstr "Роль PUBLIC включает в себя все остальные роли." -#: commands/policy.c:606 +#: commands/policy.c:603 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK нельзя применить к SELECT или DELETE" -#: commands/policy.c:615 commands/policy.c:918 +#: commands/policy.c:612 commands/policy.c:915 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "для INSERT допускается только выражение WITH CHECK" -#: commands/policy.c:689 commands/policy.c:1141 +#: commands/policy.c:686 commands/policy.c:1138 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "политика \"%s\" для таблицы \"%s\" уже существует" -#: commands/policy.c:890 commands/policy.c:1169 commands/policy.c:1240 +#: commands/policy.c:887 commands/policy.c:1166 commands/policy.c:1237 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "политика \"%s\" для таблицы \"%s\" не существует" -#: commands/policy.c:908 +#: commands/policy.c:905 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "для SELECT, DELETE допускается только выражение USING" @@ -10418,87 +10876,86 @@ msgstr "" "HOLD" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2854 utils/adt/xml.c:3024 +#: executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" -#: commands/prepare.c:75 +#: commands/prepare.c:72 #, c-format msgid "invalid statement name: must not be empty" msgstr "неверный оператор: имя не должно быть пустым" # [SM]: TO REVIEW -#: commands/prepare.c:230 commands/prepare.c:235 +#: commands/prepare.c:227 commands/prepare.c:232 #, c-format msgid "prepared statement is not a SELECT" msgstr "подготовленный оператор - не SELECT" -#: commands/prepare.c:295 +#: commands/prepare.c:292 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "неверное число параметров для подготовленного оператора \"%s\"" -#: commands/prepare.c:297 +#: commands/prepare.c:294 #, c-format msgid "Expected %d parameters but got %d." msgstr "Ожидалось параметров: %d, получено: %d." -#: commands/prepare.c:330 +#: commands/prepare.c:327 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "параметр $%d типа %s нельзя привести к ожидаемому типу %s" # [SM]: TO REVIEW -#: commands/prepare.c:414 +#: commands/prepare.c:411 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "подготовленный оператор \"%s\" уже существует" # [SM]: TO REVIEW -#: commands/prepare.c:453 +#: commands/prepare.c:450 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "подготовленный оператор \"%s\" не существует" -#: commands/proclang.c:68 +#: commands/proclang.c:66 #, c-format msgid "must be superuser to create custom procedural language" msgstr "" "для создания дополнительного процедурного языка нужно быть суперпользователем" -#: commands/publicationcmds.c:131 postmaster/postmaster.c:1208 -#: postmaster/postmaster.c:1306 storage/file/fd.c:3911 -#: utils/init/miscinit.c:1822 +#: 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\"" -#: commands/publicationcmds.c:150 +#: commands/publicationcmds.c:143 #, c-format msgid "unrecognized value for publication option \"%s\": \"%s\"" msgstr "нераспознанное значение параметра публикации \"%s\": \"%s\"" -#: commands/publicationcmds.c:164 +#: commands/publicationcmds.c:157 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "нераспознанный параметр репликации: \"%s\"" -#: commands/publicationcmds.c:205 +#: commands/publicationcmds.c:198 #, c-format msgid "no schema has been selected for CURRENT_SCHEMA" msgstr "для CURRENT_SCHEMA требуется, чтобы была выбрана схема" -#: commands/publicationcmds.c:502 +#: commands/publicationcmds.c:495 msgid "System columns are not allowed." msgstr "Системные столбцы не допускаются." -#: commands/publicationcmds.c:509 commands/publicationcmds.c:514 -#: commands/publicationcmds.c:531 +#: commands/publicationcmds.c:502 commands/publicationcmds.c:507 +#: commands/publicationcmds.c:524 msgid "User-defined operators are not allowed." msgstr "Пользовательские операторы не допускаются." -#: commands/publicationcmds.c:555 +#: commands/publicationcmds.c:548 msgid "" "Only columns, constants, built-in operators, built-in data types, built-in " "collations, and immutable built-in functions are allowed." @@ -10506,43 +10963,43 @@ msgstr "" "Допускаются только столбцы, константы, встроенные операторы, встроенные типы " "данных, встроенные правила сортировки и встроенные постоянные функции." -#: commands/publicationcmds.c:567 +#: commands/publicationcmds.c:560 msgid "User-defined types are not allowed." msgstr "Пользовательские типы не допускаются." -#: commands/publicationcmds.c:570 +#: commands/publicationcmds.c:563 msgid "User-defined or built-in mutable functions are not allowed." msgstr "Пользовательские или встроенные непостоянные функции не допускаются." -#: commands/publicationcmds.c:573 +#: commands/publicationcmds.c:566 msgid "User-defined collations are not allowed." msgstr "Пользовательские правила сортировки не допускаются." -#: commands/publicationcmds.c:583 +#: commands/publicationcmds.c:576 #, c-format msgid "invalid publication WHERE expression" msgstr "неверное выражение в предложении WHERE публикации" -#: commands/publicationcmds.c:636 +#: commands/publicationcmds.c:629 #, c-format msgid "cannot use publication WHERE clause for relation \"%s\"" msgstr "" "использовать в публикации предложение WHERE для отношения \"%s\" нельзя" -#: commands/publicationcmds.c:638 +#: commands/publicationcmds.c:631 #, c-format msgid "WHERE clause cannot be used for a partitioned table when %s is false." msgstr "" "Предложение WHERE нельзя использовать для секционированной таблицы, когда %s " "равен false." -#: commands/publicationcmds.c:709 commands/publicationcmds.c:723 +#: commands/publicationcmds.c:702 commands/publicationcmds.c:716 #, c-format msgid "cannot use column list for relation \"%s.%s\" in publication \"%s\"" msgstr "" "использовать список столбцов отношения \"%s.%s\" в публикации \"%s\" нельзя" -#: commands/publicationcmds.c:712 +#: commands/publicationcmds.c:705 #, c-format msgid "" "Column lists cannot be specified in publications containing FOR TABLES IN " @@ -10551,7 +11008,7 @@ msgstr "" "Списки столбцов нельзя задавать в публикациях, содержащих элементы FOR " "TABLES IN SCHEMA." -#: commands/publicationcmds.c:726 +#: commands/publicationcmds.c:719 #, c-format msgid "" "Column lists cannot be specified for partitioned tables when %s is false." @@ -10559,34 +11016,34 @@ msgstr "" "Списки столбцов нельзя задавать для секционированных таблиц, когда %s равен " "false." -#: commands/publicationcmds.c:761 +#: commands/publicationcmds.c:754 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "для создания публикации всех таблиц нужно быть суперпользователем" -#: commands/publicationcmds.c:832 +#: commands/publicationcmds.c:825 #, c-format msgid "must be superuser to create FOR TABLES IN SCHEMA publication" msgstr "" "для создания публикации вида FOR ALL TABLES IN SCHEMA нужно быть " "суперпользователем" -#: commands/publicationcmds.c:868 +#: commands/publicationcmds.c:861 #, c-format -msgid "wal_level is insufficient to publish logical changes" -msgstr "уровень wal_level недостаточен для публикации логических изменений" +msgid "\"wal_level\" is insufficient to publish logical changes" +msgstr "уровень \"wal_level\" недостаточен для публикации логических изменений" -#: commands/publicationcmds.c:869 +#: commands/publicationcmds.c:862 #, c-format -msgid "Set wal_level to \"logical\" before creating subscriptions." -msgstr "Задайте для wal_level значение \"logical\" до создания подписок." +msgid "Set \"wal_level\" to \"logical\" before creating subscriptions." +msgstr "Задайте для \"wal_level\" значение \"logical\" до создания подписок." -#: commands/publicationcmds.c:965 commands/publicationcmds.c:973 +#: commands/publicationcmds.c:958 commands/publicationcmds.c:966 #, c-format msgid "cannot set parameter \"%s\" to false for publication \"%s\"" msgstr "параметру \"%s\" публикации \"%s\" нельзя присвоить false" -#: commands/publicationcmds.c:968 +#: commands/publicationcmds.c:961 #, c-format msgid "" "The publication contains a WHERE clause for partitioned table \"%s\", which " @@ -10595,7 +11052,7 @@ msgstr "" "Публикация содержит предложение WHERE для секционированной таблицы \"%s\", " "что не допускается, когда \"%s\" равен false." -#: commands/publicationcmds.c:976 +#: commands/publicationcmds.c:969 #, c-format msgid "" "The publication contains a column list for partitioned table \"%s\", which " @@ -10604,12 +11061,12 @@ msgstr "" "Публикация содержит список столбцов для секционированной таблицы \"%s\", что " "не допускается, когда \"%s\" равен false." -#: commands/publicationcmds.c:1299 +#: commands/publicationcmds.c:1292 #, c-format msgid "cannot add schema to publication \"%s\"" msgstr "добавить схему в публикацию \"%s\" нельзя" -#: commands/publicationcmds.c:1301 +#: commands/publicationcmds.c:1294 #, c-format msgid "" "Schemas cannot be added if any tables that specify a column list are already " @@ -10618,82 +11075,82 @@ msgstr "" "Схемы нельзя добавлять в публикацию, если в неё уже добавлены таблицы, для " "которых задан список столбцов." -#: commands/publicationcmds.c:1349 +#: commands/publicationcmds.c:1342 #, c-format msgid "must be superuser to add or set schemas" msgstr "для добавления или замены схем нужно быть суперпользователем" -#: commands/publicationcmds.c:1358 commands/publicationcmds.c:1366 +#: commands/publicationcmds.c:1351 commands/publicationcmds.c:1359 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "публикация \"%s\" определена для всех таблиц (FOR ALL TABLES)" -#: commands/publicationcmds.c:1360 +#: commands/publicationcmds.c:1353 #, c-format msgid "Schemas cannot be added to or dropped from FOR ALL TABLES publications." msgstr "В публикации вида FOR ALL TABLES нельзя добавлять или удалять таблицы." -#: commands/publicationcmds.c:1368 +#: commands/publicationcmds.c:1361 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "В публикации всех таблиц нельзя добавлять или удалять таблицы." -#: commands/publicationcmds.c:1392 commands/publicationcmds.c:1431 -#: commands/publicationcmds.c:1968 utils/cache/lsyscache.c:3592 +#: commands/publicationcmds.c:1385 commands/publicationcmds.c:1424 +#: commands/publicationcmds.c:1961 utils/cache/lsyscache.c:3634 #, c-format msgid "publication \"%s\" does not exist" msgstr "публикация \"%s\" не существует" -#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1657 +#: commands/publicationcmds.c:1587 commands/publicationcmds.c:1650 #, c-format msgid "conflicting or redundant WHERE clauses for table \"%s\"" msgstr "конфликтующие или избыточные предложения WHERE для таблицы \"%s\"" -#: commands/publicationcmds.c:1601 commands/publicationcmds.c:1669 +#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1662 #, c-format msgid "conflicting or redundant column lists for table \"%s\"" msgstr "конфликтующие или избыточные списки столбцов для таблицы \"%s\"" -#: commands/publicationcmds.c:1803 +#: commands/publicationcmds.c:1796 #, c-format msgid "column list must not be specified in ALTER PUBLICATION ... DROP" msgstr "в ALTER PUBLICATION ... DROP не должен задаваться список столбцов" -#: commands/publicationcmds.c:1815 +#: commands/publicationcmds.c:1808 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "отношение \"%s\" не включено в публикацию" -#: commands/publicationcmds.c:1822 +#: commands/publicationcmds.c:1815 #, c-format msgid "cannot use a WHERE clause when removing a table from a publication" msgstr "использовать WHERE при удалении таблицы из публикации нельзя" -#: commands/publicationcmds.c:1882 +#: commands/publicationcmds.c:1875 #, c-format msgid "tables from schema \"%s\" are not part of the publication" msgstr "таблицы из схемы \"%s\" не являются частью публикации" -#: commands/publicationcmds.c:1925 commands/publicationcmds.c:1932 +#: commands/publicationcmds.c:1918 commands/publicationcmds.c:1925 #, c-format msgid "permission denied to change owner of publication \"%s\"" -msgstr "нет прав на изменение владельца публикации \"%s\"" +msgstr "нет прав для изменения владельца публикации \"%s\"" -#: commands/publicationcmds.c:1927 +#: commands/publicationcmds.c:1920 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "" "Владельцем публикации всех таблиц (FOR ALL TABLES) должен быть " "суперпользователь." -#: commands/publicationcmds.c:1934 +#: commands/publicationcmds.c:1927 #, c-format msgid "The owner of a FOR TABLES IN SCHEMA publication must be a superuser." msgstr "" "Владельцем публикации вида FOR TABLES IN SCHEMA должен быть " "суперпользователь." -#: commands/publicationcmds.c:2000 +#: commands/publicationcmds.c:1993 #, c-format msgid "publication with OID %u does not exist" msgstr "публикация с OID %u не существует" @@ -10741,170 +11198,170 @@ msgstr "метки безопасности не поддерживаются д msgid "cannot set security label on relation \"%s\"" msgstr "задать метку безопасности для отношения \"%s\" нельзя" -#: commands/sequence.c:754 +#: commands/sequence.c:748 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%lld)" msgstr "" "функция nextval достигла максимума для последовательности \"%s\" (%lld)" -#: commands/sequence.c:773 +#: commands/sequence.c:767 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" msgstr "функция nextval достигла минимума для последовательности \"%s\" (%lld)" -#: commands/sequence.c:891 +#: commands/sequence.c:886 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "" "текущее значение (currval) для последовательности \"%s\" ещё не определено в " "этом сеансе" -#: commands/sequence.c:910 commands/sequence.c:916 +#: commands/sequence.c:905 commands/sequence.c:911 #, c-format msgid "lastval is not yet defined in this session" msgstr "последнее значение (lastval) ещё не определено в этом сеансе" -#: commands/sequence.c:996 +#: 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:1365 +#: commands/sequence.c:1357 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "неверное свойство последовательности SEQUENCE NAME" -#: commands/sequence.c:1391 +#: commands/sequence.c:1383 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "" "типом столбца идентификации может быть только smallint, integer или bigint" -#: commands/sequence.c:1392 +#: commands/sequence.c:1384 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "" "типом последовательности может быть только smallint, integer или bigint" -#: commands/sequence.c:1426 +#: commands/sequence.c:1418 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT не может быть нулевым" -#: commands/sequence.c:1474 +#: 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:1506 +#: 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:1514 +#: commands/sequence.c:1506 #, c-format msgid "MINVALUE (%lld) must be less than MAXVALUE (%lld)" msgstr "MINVALUE (%lld) должно быть меньше MAXVALUE (%lld)" -#: commands/sequence.c:1535 +#: commands/sequence.c:1527 #, c-format msgid "START value (%lld) cannot be less than MINVALUE (%lld)" msgstr "значение START (%lld) не может быть меньше MINVALUE (%lld)" -#: commands/sequence.c:1541 +#: commands/sequence.c:1533 #, c-format msgid "START value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "значение START (%lld) не может быть больше MAXVALUE (%lld)" -#: commands/sequence.c:1565 +#: commands/sequence.c:1557 #, c-format msgid "RESTART value (%lld) cannot be less than MINVALUE (%lld)" msgstr "значение RESTART (%lld) не может быть меньше MINVALUE (%lld)" -#: commands/sequence.c:1571 +#: commands/sequence.c:1563 #, c-format msgid "RESTART value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "значение RESTART (%lld) не может быть больше MAXVALUE (%lld)" -#: commands/sequence.c:1582 +#: commands/sequence.c:1574 #, c-format msgid "CACHE (%lld) must be greater than zero" msgstr "значение CACHE (%lld) должно быть больше нуля" -#: commands/sequence.c:1618 +#: commands/sequence.c:1610 #, c-format msgid "invalid OWNED BY option" msgstr "неверное указание OWNED BY" # skip-rule: no-space-after-period -#: commands/sequence.c:1619 +#: 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:1644 +#: commands/sequence.c:1636 #, c-format msgid "sequence cannot be owned by relation \"%s\"" msgstr "последовательность не может принадлежать отношению \"%s\"" -#: commands/sequence.c:1652 +#: commands/sequence.c:1644 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "" "последовательность должна иметь того же владельца, что и таблица, с которой " "она связана" -#: commands/sequence.c:1656 +#: commands/sequence.c:1648 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "" "последовательность должна быть в той же схеме, что и таблица, с которой она " "связана" -#: commands/sequence.c:1678 +#: commands/sequence.c:1670 #, c-format msgid "cannot change ownership of identity sequence" msgstr "сменить владельца последовательности идентификации нельзя" -#: commands/sequence.c:1679 commands/tablecmds.c:13945 -#: commands/tablecmds.c:16544 +#: 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\"." -#: commands/statscmds.c:109 commands/statscmds.c:118 tcop/utility.c:1887 +#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1883 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "в CREATE STATISTICS можно указать только одно отношение" -#: commands/statscmds.c:136 +#: commands/statscmds.c:133 #, c-format msgid "cannot define statistics for relation \"%s\"" msgstr "для отношения \"%s\" нельзя определить объект статистики" -#: commands/statscmds.c:190 +#: commands/statscmds.c:187 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "объект статистики \"%s\" уже существует, пропускается" -#: commands/statscmds.c:198 +#: commands/statscmds.c:195 #, c-format msgid "statistics object \"%s\" already exists" msgstr "объект статистики \"%s\" уже существует" -#: commands/statscmds.c:209 +#: commands/statscmds.c:206 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "в статистике не может быть больше %d столбцов" -#: commands/statscmds.c:250 commands/statscmds.c:273 commands/statscmds.c:307 +#: commands/statscmds.c:247 commands/statscmds.c:270 commands/statscmds.c:304 #, c-format msgid "statistics creation on system columns is not supported" msgstr "создание статистики для системных столбцов не поддерживается" -#: commands/statscmds.c:257 commands/statscmds.c:280 +#: commands/statscmds.c:254 commands/statscmds.c:277 #, c-format msgid "" "column \"%s\" cannot be used in statistics because its type %s has no " @@ -10913,7 +11370,7 @@ msgstr "" "столбец \"%s\" нельзя использовать в статистике, так как для его типа %s не " "определён класс операторов B-дерева по умолчанию" -#: commands/statscmds.c:324 +#: commands/statscmds.c:321 #, c-format msgid "" "expression cannot be used in multivariate statistics because its type %s has " @@ -10922,7 +11379,7 @@ msgstr "" "выражение нельзя использовать в многовариантной статистике, так как для его " "типа %s не определён класс операторов btree по умолчанию" -#: commands/statscmds.c:345 +#: commands/statscmds.c:342 #, c-format msgid "" "when building statistics on a single expression, statistics kinds may not be " @@ -10931,76 +11388,76 @@ msgstr "" "при построении статистики по единственному выражению указывать виды " "статистики нельзя" -#: commands/statscmds.c:374 +#: commands/statscmds.c:371 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "нераспознанный вид статистики \"%s\"" -#: commands/statscmds.c:403 +#: commands/statscmds.c:400 #, c-format msgid "extended statistics require at least 2 columns" msgstr "для расширенной статистики требуются минимум 2 столбца" -#: commands/statscmds.c:421 +#: commands/statscmds.c:418 #, c-format msgid "duplicate column name in statistics definition" msgstr "повторяющееся имя столбца в определении статистики" -#: commands/statscmds.c:456 +#: commands/statscmds.c:453 #, c-format msgid "duplicate expression in statistics definition" msgstr "повторяющееся выражение в определении статистики" -#: commands/statscmds.c:619 commands/tablecmds.c:8187 +#: commands/statscmds.c:628 commands/tablecmds.c:8620 #, c-format msgid "statistics target %d is too low" msgstr "ориентир статистики слишком мал (%d)" -#: commands/statscmds.c:627 commands/tablecmds.c:8195 +#: commands/statscmds.c:636 commands/tablecmds.c:8628 #, c-format msgid "lowering statistics target to %d" msgstr "ориентир статистики снижается до %d" -#: commands/statscmds.c:650 +#: commands/statscmds.c:660 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "объект статистики \"%s.%s\" не существует, пропускается" -#: commands/subscriptioncmds.c:271 commands/subscriptioncmds.c:359 +#: commands/subscriptioncmds.c:275 commands/subscriptioncmds.c:372 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "нераспознанный параметр подписки: \"%s\"" -#: commands/subscriptioncmds.c:327 replication/pgoutput/pgoutput.c:395 +#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:404 #, c-format msgid "unrecognized origin value: \"%s\"" msgstr "нераспознанное значение origin: \"%s\"" -#: commands/subscriptioncmds.c:350 +#: commands/subscriptioncmds.c:363 #, c-format msgid "invalid WAL location (LSN): %s" msgstr "неверная позиция в WAL (LSN): %s" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:374 commands/subscriptioncmds.c:381 -#: commands/subscriptioncmds.c:388 commands/subscriptioncmds.c:410 -#: commands/subscriptioncmds.c:426 +#: commands/subscriptioncmds.c:387 commands/subscriptioncmds.c:394 +#: commands/subscriptioncmds.c:401 commands/subscriptioncmds.c:423 +#: commands/subscriptioncmds.c:439 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "указания %s и %s являются взаимоисключающими" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:416 commands/subscriptioncmds.c:432 +#: commands/subscriptioncmds.c:429 commands/subscriptioncmds.c:445 #, c-format msgid "subscription with %s must also set %s" msgstr "для подписки с параметром %s необходимо также задать %s" -#: commands/subscriptioncmds.c:494 +#: commands/subscriptioncmds.c:506 #, c-format msgid "could not receive list of publications from the publisher: %s" msgstr "не удалось получить список публикаций с публикующего сервера: %s" -#: commands/subscriptioncmds.c:526 +#: commands/subscriptioncmds.c:538 #, c-format msgid "publication %s does not exist on the publisher" msgid_plural "publications %s do not exist on the publisher" @@ -11008,33 +11465,34 @@ msgstr[0] "публикация %s не существует на публику msgstr[1] "публикации %s не существуют на публикующем сервере" msgstr[2] "публикации %s не существуют на публикующем сервере" -#: commands/subscriptioncmds.c:614 +#: commands/subscriptioncmds.c:626 #, c-format msgid "permission denied to create subscription" msgstr "нет прав для создания подписки" -#: commands/subscriptioncmds.c:615 +#: commands/subscriptioncmds.c:627 #, c-format msgid "Only roles with privileges of the \"%s\" role may create subscriptions." msgstr "Создавать подписки могут только роли с правами роли \"%s\"." -#: commands/subscriptioncmds.c:745 commands/subscriptioncmds.c:878 -#: replication/logical/tablesync.c:1334 replication/logical/worker.c:4616 +#: commands/subscriptioncmds.c:758 commands/subscriptioncmds.c:891 +#: commands/subscriptioncmds.c:1524 replication/logical/tablesync.c:1345 +#: replication/logical/worker.c:4503 #, c-format msgid "could not connect to the publisher: %s" msgstr "не удалось подключиться к серверу публикации: %s" -#: commands/subscriptioncmds.c:816 +#: commands/subscriptioncmds.c:829 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "на сервере публикации создан слот репликации \"%s\"" -#: commands/subscriptioncmds.c:828 +#: commands/subscriptioncmds.c:841 #, c-format msgid "subscription was created, but is not connected" msgstr "подписка создана, но не подключена" -#: commands/subscriptioncmds.c:829 +#: commands/subscriptioncmds.c:842 #, c-format msgid "" "To initiate replication, you must manually create the replication slot, " @@ -11043,36 +11501,43 @@ msgstr "" "Чтобы начать репликацию, вы должны вручную создать слот репликации, включить " "подписку, а затем обновить её." -#: commands/subscriptioncmds.c:1096 commands/subscriptioncmds.c:1509 -#: commands/subscriptioncmds.c:1892 utils/cache/lsyscache.c:3642 +#: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1590 +#: commands/subscriptioncmds.c:1973 utils/cache/lsyscache.c:3684 #, c-format msgid "subscription \"%s\" does not exist" msgstr "подписка \"%s\" не существует" -#: commands/subscriptioncmds.c:1152 +#: commands/subscriptioncmds.c:1166 commands/subscriptioncmds.c:1245 #, c-format msgid "cannot set %s for enabled subscription" msgstr "для включённой подписки нельзя задать %s" -#: commands/subscriptioncmds.c:1234 +#: commands/subscriptioncmds.c:1233 +#, c-format +msgid "" +"cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "" +"задать параметр \"%s\" для подписки, для которой не задано имя слота, нельзя" + +#: commands/subscriptioncmds.c:1279 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "включить подписку, для которой не задано имя слота, нельзя" -#: commands/subscriptioncmds.c:1278 commands/subscriptioncmds.c:1329 +#: commands/subscriptioncmds.c:1323 commands/subscriptioncmds.c:1374 #, c-format msgid "" "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "" "ALTER SUBSCRIPTION с обновлением для отключённых подписок не допускается" -#: commands/subscriptioncmds.c:1279 +#: commands/subscriptioncmds.c:1324 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "" "Выполните ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:1288 commands/subscriptioncmds.c:1343 +#: commands/subscriptioncmds.c:1333 commands/subscriptioncmds.c:1388 #, c-format msgid "" "ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase " @@ -11081,7 +11546,7 @@ msgstr "" "ALTER SUBSCRIPTION с параметром публикации refresh в режиме copy_data не " "допускается, когда включён параметр two_phase" -#: commands/subscriptioncmds.c:1289 +#: commands/subscriptioncmds.c:1334 #, c-format msgid "" "Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with " @@ -11091,7 +11556,7 @@ msgstr "" "copy_data = false либо выполните DROP/CREATE SUBSCRIPTION." #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1345 +#: commands/subscriptioncmds.c:1390 #, c-format msgid "" "Use %s with refresh = false, or with copy_data = false, or use DROP/CREATE " @@ -11100,13 +11565,13 @@ msgstr "" "Выполните %s с refresh = false или с copy_data = false либо выполните DROP/" "CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1367 +#: commands/subscriptioncmds.c:1412 #, c-format msgid "" "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH для отключённых подписок не допускается" -#: commands/subscriptioncmds.c:1392 +#: commands/subscriptioncmds.c:1437 #, c-format msgid "" "ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase " @@ -11115,7 +11580,7 @@ msgstr "" "ALTER SUBSCRIPTION ... REFRESH в режиме copy_data не допускается, когда " "включён параметр two_phase" -#: commands/subscriptioncmds.c:1393 +#: commands/subscriptioncmds.c:1438 #, c-format msgid "" "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/" @@ -11124,39 +11589,39 @@ msgstr "" "Выполните ALTER SUBSCRIPTION ... REFRESH с copy_data = false либо выполните " "DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1428 +#: commands/subscriptioncmds.c:1473 #, c-format msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X" msgstr "" "позиция пропуска в WAL (LSN %X/%X) должна быть больше начального LSN %X/%X" -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1594 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "подписка \"%s\" не существует, пропускается" -#: commands/subscriptioncmds.c:1782 +#: commands/subscriptioncmds.c:1863 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "слот репликации \"%s\" удалён на сервере репликации" -#: commands/subscriptioncmds.c:1791 commands/subscriptioncmds.c:1799 +#: commands/subscriptioncmds.c:1872 commands/subscriptioncmds.c:1880 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "слот репликации \"%s\" на сервере публикации не был удалён: %s" -#: commands/subscriptioncmds.c:1924 +#: commands/subscriptioncmds.c:2005 #, c-format msgid "subscription with OID %u does not exist" msgstr "подписка с OID %u не существует" -#: commands/subscriptioncmds.c:1995 commands/subscriptioncmds.c:2120 +#: commands/subscriptioncmds.c:2076 commands/subscriptioncmds.c:2201 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "" "не удалось получить список реплицируемых таблиц с сервера репликации: %s" -#: commands/subscriptioncmds.c:2031 +#: commands/subscriptioncmds.c:2112 #, c-format msgid "" "subscription \"%s\" requested copy_data with origin = NONE but might copy " @@ -11165,7 +11630,7 @@ msgstr "" "для подписки \"%s\" выбран режим copy_data с origin = NONE, но в неё могут " "попасть данные из другого источника" -#: commands/subscriptioncmds.c:2033 +#: commands/subscriptioncmds.c:2114 #, c-format msgid "" "The subscription being created subscribes to a publication (%s) that " @@ -11183,7 +11648,7 @@ msgstr[2] "" "Создаваемая подписка связана с публикациями (%s), содержащими таблицы, в " "которые записывают другие подписки." -#: commands/subscriptioncmds.c:2036 +#: commands/subscriptioncmds.c:2117 #, c-format msgid "" "Verify that initial data copied from the publisher tables did not come from " @@ -11192,8 +11657,8 @@ msgstr "" "Убедитесь, что начальные данные, скопированные из таблиц публикации, " "поступили не из других источников." -#: commands/subscriptioncmds.c:2142 replication/logical/tablesync.c:893 -#: replication/pgoutput/pgoutput.c:1112 +#: 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 " @@ -11202,7 +11667,7 @@ msgstr "" "использовать различные списки столбцов таблицы \"%s.%s\" в разных " "публикациях нельзя" -#: commands/subscriptioncmds.c:2192 +#: commands/subscriptioncmds.c:2273 #, c-format msgid "" "could not connect to publisher when attempting to drop replication slot " @@ -11212,7 +11677,7 @@ msgstr "" "\"%s\": %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:2195 +#: commands/subscriptioncmds.c:2276 #, c-format msgid "" "Use %s to disable the subscription, and then use %s to disassociate it from " @@ -11221,194 +11686,197 @@ msgstr "" "Выполните %s, чтобы отключить подписку, а затем выполните %s, чтобы отвязать " "её от слота." -#: commands/subscriptioncmds.c:2226 +#: commands/subscriptioncmds.c:2307 #, c-format msgid "publication name \"%s\" used more than once" msgstr "имя публикации \"%s\" используется неоднократно" -#: commands/subscriptioncmds.c:2270 +#: commands/subscriptioncmds.c:2351 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "публикация \"%s\" уже имеется в подписке \"%s\"" -#: commands/subscriptioncmds.c:2284 +#: commands/subscriptioncmds.c:2365 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "публикация \"%s\" отсутствует в подписке \"%s\"" -#: commands/subscriptioncmds.c:2295 +#: commands/subscriptioncmds.c:2376 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "удалить все публикации из подписки нельзя" -#: commands/subscriptioncmds.c:2352 +#: commands/subscriptioncmds.c:2433 #, c-format msgid "%s requires a Boolean value or \"parallel\"" msgstr "%s требует логическое значение или \"parallel\"" -#: commands/tablecmds.c:246 commands/tablecmds.c:288 +#: commands/tablecmds.c:255 commands/tablecmds.c:297 #, c-format msgid "table \"%s\" does not exist" msgstr "таблица \"%s\" не существует" -#: commands/tablecmds.c:247 commands/tablecmds.c:289 +#: commands/tablecmds.c:256 commands/tablecmds.c:298 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "таблица \"%s\" не существует, пропускается" -#: commands/tablecmds.c:249 commands/tablecmds.c:291 +#: commands/tablecmds.c:258 commands/tablecmds.c:300 msgid "Use DROP TABLE to remove a table." msgstr "Выполните DROP TABLE для удаления таблицы." -#: commands/tablecmds.c:252 +#: commands/tablecmds.c:261 #, c-format msgid "sequence \"%s\" does not exist" msgstr "последовательность \"%s\" не существует" -#: commands/tablecmds.c:253 +#: commands/tablecmds.c:262 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "последовательность \"%s\" не существует, пропускается" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:264 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Выполните DROP SEQUENCE для удаления последовательности." -#: commands/tablecmds.c:258 +#: commands/tablecmds.c:267 #, c-format msgid "view \"%s\" does not exist" msgstr "представление \"%s\" не существует" -#: commands/tablecmds.c:259 +#: commands/tablecmds.c:268 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "представление \"%s\" не существует, пропускается" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:270 msgid "Use DROP VIEW to remove a view." msgstr "Выполните DROP VIEW для удаления представления." -#: commands/tablecmds.c:264 +#: commands/tablecmds.c:273 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "материализованное представление \"%s\" не существует" -#: commands/tablecmds.c:265 +#: commands/tablecmds.c:274 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "материализованное представление \"%s\" не существует, пропускается" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:276 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "" "Выполните DROP MATERIALIZED VIEW для удаления материализованного " "представления." -#: commands/tablecmds.c:270 commands/tablecmds.c:294 commands/tablecmds.c:19043 -#: parser/parse_utilcmd.c:2254 +#: 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\" не существует" -#: commands/tablecmds.c:271 commands/tablecmds.c:295 +#: commands/tablecmds.c:280 commands/tablecmds.c:304 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "индекс \"%s\" не существует, пропускается" -#: commands/tablecmds.c:273 commands/tablecmds.c:297 +#: commands/tablecmds.c:282 commands/tablecmds.c:306 msgid "Use DROP INDEX to remove an index." msgstr "Выполните DROP INDEX для удаления индекса." -#: commands/tablecmds.c:278 +#: commands/tablecmds.c:287 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" - это не тип" -#: commands/tablecmds.c:279 +#: commands/tablecmds.c:288 msgid "Use DROP TYPE to remove a type." msgstr "Выполните DROP TYPE для удаления типа." -#: commands/tablecmds.c:282 commands/tablecmds.c:13784 -#: commands/tablecmds.c:16249 +#: commands/tablecmds.c:291 commands/tablecmds.c:14325 +#: commands/tablecmds.c:16886 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "сторонняя таблица \"%s\" не существует" -#: commands/tablecmds.c:283 +#: commands/tablecmds.c:292 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "сторонняя таблица \"%s\" не существует, пропускается" -#: commands/tablecmds.c:285 +#: commands/tablecmds.c:294 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Выполните DROP FOREIGN TABLE для удаления сторонней таблицы." -#: commands/tablecmds.c:700 +#: commands/tablecmds.c:734 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT можно использовать только для временных таблиц" -#: commands/tablecmds.c:731 +#: commands/tablecmds.c:765 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "" "в рамках операции с ограничениями по безопасности нельзя создать временную " "таблицу" -#: commands/tablecmds.c:767 commands/tablecmds.c:15094 +#: 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:951 -#, c-format -msgid "" -"specifying a table access method is not supported on a partitioned table" -msgstr "" -"указание табличного метода доступа для секционированных таблиц не " -"поддерживаются" - -#: commands/tablecmds.c:1044 +#: commands/tablecmds.c:1067 #, c-format msgid "\"%s\" is not partitioned" msgstr "отношение \"%s\" не является секционированным" -#: commands/tablecmds.c:1138 +#: commands/tablecmds.c:1161 #, c-format msgid "cannot partition using more than %d columns" msgstr "число столбцов в ключе секционирования не может превышать %d" -#: commands/tablecmds.c:1194 +#: commands/tablecmds.c:1217 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "создать стороннюю секцию для секционированной таблицы \"%s\" нельзя" -#: commands/tablecmds.c:1196 +#: commands/tablecmds.c:1219 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "Таблица \"%s\" содержит индексы, являющиеся уникальными." -#: commands/tablecmds.c:1361 +#: commands/tablecmds.c:1338 commands/tablecmds.c:13341 +#, c-format +msgid "too many array dimensions" +msgstr "слишком много размерностей массива" + +#: 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:1489 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY не поддерживает удаление нескольких объектов" -#: commands/tablecmds.c:1365 +#: commands/tablecmds.c:1493 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY не поддерживает режим CASCADE" -#: commands/tablecmds.c:1469 +#: commands/tablecmds.c:1597 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "удалить секционированный индекс \"%s\" параллельным способом нельзя" -#: commands/tablecmds.c:1757 +#: commands/tablecmds.c:1885 #, c-format msgid "cannot truncate only a partitioned table" msgstr "опустошить собственно секционированную таблицу нельзя" -#: commands/tablecmds.c:1758 +#: commands/tablecmds.c:1886 #, c-format msgid "" "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions " @@ -11417,39 +11885,39 @@ msgstr "" "Не указывайте ключевое слово ONLY или выполните TRUNCATE ONLY " "непосредственно для секций." -#: commands/tablecmds.c:1831 +#: commands/tablecmds.c:1959 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "опустошение распространяется на таблицу %s" -#: commands/tablecmds.c:2195 +#: commands/tablecmds.c:2320 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "опустошить стороннюю таблицу \"%s\" нельзя" -#: commands/tablecmds.c:2252 +#: commands/tablecmds.c:2377 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "временные таблицы других сеансов нельзя опустошить" -#: commands/tablecmds.c:2484 commands/tablecmds.c:14991 +#: commands/tablecmds.c:2606 commands/tablecmds.c:15642 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "наследование от секционированной таблицы \"%s\" не допускается" -#: commands/tablecmds.c:2489 +#: commands/tablecmds.c:2611 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "наследование от секции \"%s\" не допускается" -#: commands/tablecmds.c:2497 parser/parse_utilcmd.c:2484 -#: parser/parse_utilcmd.c:2626 +#: 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:2509 +#: commands/tablecmds.c:2631 #, c-format msgid "" "cannot create a temporary relation as partition of permanent relation \"%s\"" @@ -11457,74 +11925,25 @@ msgstr "" "создать временное отношение в качестве секции постоянного отношения \"%s\" " "нельзя" -#: commands/tablecmds.c:2518 commands/tablecmds.c:14970 +#: commands/tablecmds.c:2640 commands/tablecmds.c:15621 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "временное отношение \"%s\" не может наследоваться" -#: commands/tablecmds.c:2528 commands/tablecmds.c:14978 +#: commands/tablecmds.c:2650 commands/tablecmds.c:15629 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "наследование от временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:2581 -#, c-format -msgid "merging multiple inherited definitions of column \"%s\"" -msgstr "слияние нескольких наследованных определений столбца \"%s\"" - -#: commands/tablecmds.c:2593 -#, c-format -msgid "inherited column \"%s\" has a type conflict" -msgstr "конфликт типов в наследованном столбце \"%s\"" - -#: commands/tablecmds.c:2595 commands/tablecmds.c:2624 -#: commands/tablecmds.c:2643 commands/tablecmds.c:2915 -#: commands/tablecmds.c:2951 commands/tablecmds.c:2967 -#: 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 -#, c-format -msgid "%s versus %s" -msgstr "%s и %s" - -#: commands/tablecmds.c:2608 -#, c-format -msgid "inherited column \"%s\" has a collation conflict" -msgstr "конфликт правил сортировки в наследованном столбце \"%s\"" - -#: commands/tablecmds.c:2610 commands/tablecmds.c:2931 -#: commands/tablecmds.c:6848 -#, c-format -msgid "\"%s\" versus \"%s\"" -msgstr "\"%s\" и \"%s\"" - -#: commands/tablecmds.c:2622 -#, c-format -msgid "inherited column \"%s\" has a storage parameter conflict" -msgstr "конфликт параметров хранения в наследованном столбце \"%s\"" - -#: commands/tablecmds.c:2641 commands/tablecmds.c:2965 -#, c-format -msgid "column \"%s\" has a compression method conflict" -msgstr "в столбце \"%s\" возник конфликт методов сжатия" - -#: commands/tablecmds.c:2657 -#, c-format -msgid "inherited column \"%s\" has a generation conflict" -msgstr "конфликт свойства генерирования в наследованном столбце \"%s\"" - -#: commands/tablecmds.c:2763 commands/tablecmds.c:2818 -#: commands/tablecmds.c:12477 parser/parse_utilcmd.c:1307 -#: parser/parse_utilcmd.c:1350 parser/parse_utilcmd.c:1749 -#: parser/parse_utilcmd.c:1857 +#: 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:2764 parser/parse_utilcmd.c:1308 +#: commands/tablecmds.c:2792 parser/parse_utilcmd.c:1266 #, c-format msgid "" "Generation expression for column \"%s\" contains a whole-row reference to " @@ -11533,89 +11952,58 @@ msgstr "" "Генерирующее выражение столбца \"%s\" ссылается на тип всей строки в таблице " "\"%s\"." -#: commands/tablecmds.c:2819 parser/parse_utilcmd.c:1351 +#: commands/tablecmds.c:2846 parser/parse_utilcmd.c:1309 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Ограничение \"%s\" ссылается на тип всей строки в таблице \"%s\"." -#: commands/tablecmds.c:2897 -#, c-format -msgid "merging column \"%s\" with inherited definition" -msgstr "слияние столбца \"%s\" с наследованным определением" - -#: commands/tablecmds.c:2901 -#, c-format -msgid "moving and merging column \"%s\" with inherited definition" -msgstr "перемещение и слияние столбца \"%s\" с наследуемым определением" - -#: commands/tablecmds.c:2902 -#, c-format -msgid "User-specified column moved to the position of the inherited column." -msgstr "" -"Определённый пользователем столбец перемещён в позицию наследуемого столбца." - -#: commands/tablecmds.c:2913 -#, c-format -msgid "column \"%s\" has a type conflict" -msgstr "конфликт типов в столбце \"%s\"" - -#: commands/tablecmds.c:2929 -#, c-format -msgid "column \"%s\" has a collation conflict" -msgstr "конфликт правил сортировки в столбце \"%s\"" - -#: commands/tablecmds.c:2949 -#, c-format -msgid "column \"%s\" has a storage parameter conflict" -msgstr "конфликт параметров хранения в столбце \"%s\"" - -#: commands/tablecmds.c:2995 commands/tablecmds.c:3082 +#: 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:3000 commands/tablecmds.c:3087 +#: 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:3008 commands/tablecmds.c:3095 +#: commands/tablecmds.c:2969 commands/tablecmds.c:3240 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "для дочернего столбца \"%s\" указано генерирующее выражение" -#: commands/tablecmds.c:3010 commands/tablecmds.c:3097 +#: 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:3143 +#: commands/tablecmds.c:3017 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "столбец \"%s\" наследует конфликтующие генерирующие выражения" -#: commands/tablecmds.c:3145 +#: commands/tablecmds.c:3019 #, c-format msgid "To resolve the conflict, specify a generation expression explicitly." msgstr "Для разрешения конфликта укажите генерирующее выражение явно." -#: commands/tablecmds.c:3149 +#: commands/tablecmds.c:3023 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "столбец \"%s\" наследует конфликтующие значения по умолчанию" -#: commands/tablecmds.c:3151 +#: commands/tablecmds.c:3025 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Для решения конфликта укажите желаемое значение по умолчанию." -#: commands/tablecmds.c:3201 +#: commands/tablecmds.c:3080 #, c-format msgid "" "check constraint name \"%s\" appears multiple times but with different " @@ -11624,113 +12012,193 @@ msgstr "" "имя ограничения-проверки \"%s\" фигурирует несколько раз, но с разными " "выражениями" -#: commands/tablecmds.c:3414 +#: commands/tablecmds.c:3131 #, c-format -msgid "cannot move temporary tables of other sessions" -msgstr "перемещать временные таблицы других сеансов нельзя" +msgid "merging column \"%s\" with inherited definition" +msgstr "слияние столбца \"%s\" с наследованным определением" -#: commands/tablecmds.c:3484 +#: commands/tablecmds.c:3135 #, c-format -msgid "cannot rename column of typed table" -msgstr "переименовать столбец типизированной таблицы нельзя" +msgid "moving and merging column \"%s\" with inherited definition" +msgstr "перемещение и слияние столбца \"%s\" с наследуемым определением" -#: commands/tablecmds.c:3503 +#: commands/tablecmds.c:3136 #, c-format -msgid "cannot rename columns of relation \"%s\"" -msgstr "переименовывать столбцы отношения \"%s\" нельзя" +msgid "User-specified column moved to the position of the inherited column." +msgstr "" +"Определённый пользователем столбец перемещён в позицию наследуемого столбца." -#: commands/tablecmds.c:3598 +#: commands/tablecmds.c:3148 #, c-format -msgid "inherited column \"%s\" must be renamed in child tables too" -msgstr "" -"наследованный столбец \"%s\" должен быть также переименован в дочерних " -"таблицах" +msgid "column \"%s\" has a type conflict" +msgstr "конфликт типов в столбце \"%s\"" -#: commands/tablecmds.c:3630 +#: 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 "cannot rename system column \"%s\"" -msgstr "нельзя переименовать системный столбец \"%s\"" +msgid "%s versus %s" +msgstr "%s и %s" -#: commands/tablecmds.c:3645 +#: commands/tablecmds.c:3162 #, c-format -msgid "cannot rename inherited column \"%s\"" -msgstr "нельзя переименовать наследованный столбец \"%s\"" +msgid "column \"%s\" has a collation conflict" +msgstr "конфликт правил сортировки в столбце \"%s\"" -#: commands/tablecmds.c:3797 +#: commands/tablecmds.c:3164 commands/tablecmds.c:3326 +#: commands/tablecmds.c:7080 #, c-format -msgid "inherited constraint \"%s\" must be renamed in child tables too" -msgstr "" -"наследуемое ограничение \"%s\" должно быть также переименовано в дочерних " -"таблицах" +msgid "\"%s\" versus \"%s\"" +msgstr "\"%s\" и \"%s\"" -#: commands/tablecmds.c:3804 +#: commands/tablecmds.c:3182 #, c-format -msgid "cannot rename inherited constraint \"%s\"" -msgstr "нельзя переименовать наследованное ограничение \"%s\"" +msgid "column \"%s\" has a storage parameter conflict" +msgstr "конфликт параметров хранения в столбце \"%s\"" -#. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4101 +#: commands/tablecmds.c:3198 commands/tablecmds.c:3354 #, c-format -msgid "" -"cannot %s \"%s\" because it is being used by active queries in this session" -msgstr "" -"нельзя выполнить %s \"%s\", так как этот объект используется активными " -"запросами в данном сеансе" +msgid "column \"%s\" has a compression method conflict" +msgstr "в столбце \"%s\" возник конфликт методов сжатия" -#. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4110 +#: commands/tablecmds.c:3293 #, c-format -msgid "cannot %s \"%s\" because it has pending trigger events" -msgstr "" -"нельзя выполнить %s \"%s\", так как с этим объектом связаны отложенные " -"события триггеров" +msgid "merging multiple inherited definitions of column \"%s\"" +msgstr "слияние нескольких наследованных определений столбца \"%s\"" -#: commands/tablecmds.c:4577 +#: commands/tablecmds.c:3305 #, c-format -msgid "cannot alter partition \"%s\" with an incomplete detach" -msgstr "нельзя изменить секцию \"%s\", которая не полностью отсоединена" +msgid "inherited column \"%s\" has a type conflict" +msgstr "конфликт типов в наследованном столбце \"%s\"" -#: commands/tablecmds.c:4770 commands/tablecmds.c:4785 +#: commands/tablecmds.c:3324 #, c-format -msgid "cannot change persistence setting twice" -msgstr "изменить характеристику хранения дважды нельзя" +msgid "inherited column \"%s\" has a collation conflict" +msgstr "конфликт правил сортировки в наследованном столбце \"%s\"" + +#: commands/tablecmds.c:3338 +#, c-format +msgid "inherited column \"%s\" has a storage parameter conflict" +msgstr "конфликт параметров хранения в наследованном столбце \"%s\"" + +#: commands/tablecmds.c:3366 +#, c-format +msgid "inherited column \"%s\" has a generation conflict" +msgstr "конфликт свойства генерирования в наследованном столбце \"%s\"" + +#: commands/tablecmds.c:3597 +#, c-format +msgid "cannot move temporary tables of other sessions" +msgstr "перемещать временные таблицы других сеансов нельзя" + +#: commands/tablecmds.c:3670 +#, c-format +msgid "cannot rename column of typed table" +msgstr "переименовать столбец типизированной таблицы нельзя" + +#: commands/tablecmds.c:3689 +#, c-format +msgid "cannot rename columns of relation \"%s\"" +msgstr "переименовывать столбцы отношения \"%s\" нельзя" + +#: commands/tablecmds.c:3784 +#, c-format +msgid "inherited column \"%s\" must be renamed in child tables too" +msgstr "" +"наследованный столбец \"%s\" должен быть также переименован в дочерних " +"таблицах" + +#: commands/tablecmds.c:3816 +#, c-format +msgid "cannot rename system column \"%s\"" +msgstr "нельзя переименовать системный столбец \"%s\"" + +#: commands/tablecmds.c:3831 +#, c-format +msgid "cannot rename inherited column \"%s\"" +msgstr "нельзя переименовать наследованный столбец \"%s\"" + +#: commands/tablecmds.c:3983 +#, c-format +msgid "inherited constraint \"%s\" must be renamed in child tables too" +msgstr "" +"наследуемое ограничение \"%s\" должно быть также переименовано в дочерних " +"таблицах" + +#: 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: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:4299 +#, c-format +msgid "cannot %s \"%s\" because it has pending trigger events" +msgstr "" +"нельзя выполнить %s \"%s\", так как с этим объектом связаны отложенные " +"события триггеров" -#: commands/tablecmds.c:4806 +#: commands/tablecmds.c:4325 #, c-format -msgid "cannot change access method of a partitioned table" -msgstr "менять метод доступа для секционированной таблицы нельзя" +msgid "cannot alter temporary tables of other sessions" +msgstr "модифицировать временные таблицы других сеансов нельзя" -#: commands/tablecmds.c:4812 +#: commands/tablecmds.c:4798 +#, c-format +msgid "cannot alter partition \"%s\" with an incomplete detach" +msgstr "нельзя изменить секцию \"%s\", которая не полностью отсоединена" + +#: commands/tablecmds.c:5002 commands/tablecmds.c:5017 +#, c-format +msgid "cannot change persistence setting twice" +msgstr "изменить характеристику хранения дважды нельзя" + +#: commands/tablecmds.c:5038 #, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" msgstr "множественные подкоманды SET ACCESS METHOD не допускаются" -#: commands/tablecmds.c:5533 +#: commands/tablecmds.c:5768 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "перезаписать системное отношение \"%s\" нельзя" -#: commands/tablecmds.c:5539 +#: commands/tablecmds.c:5774 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "перезаписать таблицу \"%s\", используемую как таблицу каталога, нельзя" -#: commands/tablecmds.c:5549 +#: commands/tablecmds.c:5786 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "перезаписывать временные таблицы других сеансов нельзя" -#: commands/tablecmds.c:6044 +#: commands/tablecmds.c:6281 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "столбец \"%s\" отношения \"%s\" содержит значения NULL" -#: commands/tablecmds.c:6061 +#: commands/tablecmds.c:6298 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "ограничение-проверку \"%s\" отношения \"%s\" нарушает некоторая строка" -#: commands/tablecmds.c:6080 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 " @@ -11739,24 +12207,24 @@ msgstr "" "изменённое ограничение секции для секции по умолчанию \"%s\" будет нарушено " "некоторыми строками" -#: commands/tablecmds.c:6086 +#: 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:6348 +#: commands/tablecmds.c:6588 #, c-format msgid "ALTER action %s cannot be performed on relation \"%s\"" msgstr "действие ALTER %s нельзя выполнить с отношением \"%s\"" -#: commands/tablecmds.c:6603 commands/tablecmds.c:6610 +#: 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:6617 +#: commands/tablecmds.c:6857 #, c-format msgid "" "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" @@ -11764,77 +12232,77 @@ msgstr "" "изменить стороннюю таблицу \"%s\" нельзя, так как столбец \"%s.%s\" " "задействует тип её строки" -#: commands/tablecmds.c:6624 +#: 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:6680 +#: 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:6682 +#: commands/tablecmds.c:6922 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "" "Чтобы изменить также типизированные таблицы, выполните ALTER ... CASCADE." -#: commands/tablecmds.c:6728 +#: commands/tablecmds.c:6968 #, c-format msgid "type %s is not a composite type" msgstr "тип %s не является составным" -#: commands/tablecmds.c:6755 +#: commands/tablecmds.c:6995 #, c-format msgid "cannot add column to typed table" msgstr "добавить столбец в типизированную таблицу нельзя" -#: commands/tablecmds.c:6811 +#: commands/tablecmds.c:7043 #, c-format msgid "cannot add column to a partition" msgstr "добавить столбец в секцию нельзя" -#: commands/tablecmds.c:6840 commands/tablecmds.c:15221 +#: 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:6846 commands/tablecmds.c:15228 +#: 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:6864 +#: commands/tablecmds.c:7096 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "объединение определений столбца \"%s\" для потомка \"%s\"" -#: commands/tablecmds.c:6911 +#: commands/tablecmds.c:7149 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "" "добавить столбец идентификации в таблицу, у которой есть дочерние, нельзя" -#: commands/tablecmds.c:7162 +#: commands/tablecmds.c:7362 #, c-format msgid "column must be added to child tables too" msgstr "столбец также должен быть добавлен к дочерним таблицам" -#: commands/tablecmds.c:7240 +#: commands/tablecmds.c:7440 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "столбец \"%s\" отношения \"%s\" уже существует, пропускается" -#: commands/tablecmds.c:7247 +#: commands/tablecmds.c:7447 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "столбец \"%s\" отношения \"%s\" уже существует" -#: commands/tablecmds.c:7313 commands/tablecmds.c:12115 +#: commands/tablecmds.c:7513 commands/tablecmds.c:12652 #, c-format msgid "" "cannot remove constraint from only the partitioned table when partitions " @@ -11843,59 +12311,73 @@ msgstr "" "удалить ограничение только из секционированной таблицы, когда существуют " "секции, нельзя" -#: commands/tablecmds.c:7314 commands/tablecmds.c:7631 -#: commands/tablecmds.c:8604 commands/tablecmds.c:12116 +#: 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:7351 commands/tablecmds.c:7557 -#: commands/tablecmds.c:7699 commands/tablecmds.c:7817 -#: commands/tablecmds.c:7911 commands/tablecmds.c:7970 -#: commands/tablecmds.c:8089 commands/tablecmds.c:8228 -#: commands/tablecmds.c:8298 commands/tablecmds.c:8432 -#: commands/tablecmds.c:12270 commands/tablecmds.c:13807 -#: commands/tablecmds.c:16338 +#: 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:7357 commands/tablecmds.c:7705 +#: commands/tablecmds.c:7556 commands/tablecmds.c:7902 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "столбец \"%s\" отношения \"%s\" является столбцом идентификации" -#: commands/tablecmds.c:7400 +#: commands/tablecmds.c:7597 #, c-format msgid "column \"%s\" is in a primary key" msgstr "столбец \"%s\" входит в первичный ключ" -#: commands/tablecmds.c:7405 +#: commands/tablecmds.c:7602 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "столбец \"%s\" входит в индекс, используемый для идентификации реплики" -#: commands/tablecmds.c:7428 +#: commands/tablecmds.c:7625 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "столбец \"%s\" в родительской таблице помечен как NOT NULL" -#: commands/tablecmds.c:7628 commands/tablecmds.c:9088 +#: commands/tablecmds.c:7825 commands/tablecmds.c:9533 #, c-format msgid "constraint must be added to child tables too" msgstr "ограничение также должно быть добавлено к дочерним таблицам" -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7826 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Столбец \"%s\" отношения \"%s\" уже имеет свойство NOT NULL." -#: commands/tablecmds.c:7714 +#: commands/tablecmds.c:7911 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "столбец \"%s\" отношения \"%s\" является генерируемым" -#: commands/tablecmds.c:7828 +#: commands/tablecmds.c:8005 +#, c-format +msgid "cannot add identity to a column of only the partitioned table" +msgstr "" +"сделать столбцом идентификации столбец одной лишь секционированной таблицы " +"нельзя" + +#: commands/tablecmds.c:8011 +#, c-format +msgid "cannot add identity to a column of a partition" +msgstr "сделать столбцом идентификации столбец одной секции нельзя" + +#: commands/tablecmds.c:8039 #, c-format msgid "" "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity " @@ -11904,46 +12386,74 @@ msgstr "" "столбец \"%s\" отношения \"%s\" должен быть объявлен как NOT NULL, чтобы его " "можно было сделать столбцом идентификации" -#: commands/tablecmds.c:7834 +#: commands/tablecmds.c:8045 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "столбец \"%s\" отношения \"%s\" уже является столбцом идентификации" -#: commands/tablecmds.c:7840 +#: commands/tablecmds.c:8051 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "столбец \"%s\" отношения \"%s\" уже имеет значение по умолчанию" -#: commands/tablecmds.c:7917 commands/tablecmds.c:7978 +#: commands/tablecmds.c:8112 +#, c-format +msgid "cannot change identity column of only the partitioned table" +msgstr "" +"изменить столбец идентификации для одной лишь секционированной таблицы нельзя" + +#: commands/tablecmds.c:8118 +#, c-format +msgid "cannot change identity column of a partition" +msgstr "изменить столбец идентификации для одной секции нельзя" + +#: commands/tablecmds.c:8163 commands/tablecmds.c:8259 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "столбец \"%s\" отношения \"%s\" не является столбцом идентификации" -#: commands/tablecmds.c:7983 +#: commands/tablecmds.c:8229 +#, c-format +msgid "cannot drop identity from a column of only the partitioned table" +msgstr "" +"лишить свойства идентификации столбец одной лишь секционированной таблицы " +"нельзя" + +#: commands/tablecmds.c:8235 +#, c-format +msgid "cannot drop identity from a column of a partition" +msgstr "лишить свойства идентификации столбец одной секции нельзя" + +#: commands/tablecmds.c:8264 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "" "столбец \"%s\" отношения \"%s\" не является столбцом идентификации, " "пропускается" -#: commands/tablecmds.c:8036 +#: commands/tablecmds.c:8358 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a generated column" +msgstr "столбец \"%s\" отношения \"%s\" не является генерируемым столбцом" + +#: 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:8058 +#: commands/tablecmds.c:8478 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "нельзя удалить генерирующее выражение из наследуемого столбца" -#: commands/tablecmds.c:8097 +#: commands/tablecmds.c:8517 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "" "столбец \"%s\" отношения \"%s\" не является сохранённым генерируемым столбцом" -#: commands/tablecmds.c:8102 +#: commands/tablecmds.c:8522 #, c-format msgid "" "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" @@ -11951,53 +12461,53 @@ msgstr "" "столбец \"%s\" отношения \"%s\" пропускается, так как не является " "сохранённым генерируемым столбцом" -#: commands/tablecmds.c:8175 +#: commands/tablecmds.c:8600 #, c-format msgid "cannot refer to non-index column by number" msgstr "по номеру можно ссылаться только на столбец в индексе" -#: commands/tablecmds.c:8218 +#: commands/tablecmds.c:8652 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "столбец с номером %d отношения \"%s\" не существует" -#: commands/tablecmds.c:8237 +#: commands/tablecmds.c:8671 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "изменить статистику включённого столбца \"%s\" индекса \"%s\" нельзя" -#: commands/tablecmds.c:8242 +#: commands/tablecmds.c:8676 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" "изменить статистику столбца \"%s\" (не выражения) индекса \"%s\" нельзя" -#: commands/tablecmds.c:8244 +#: commands/tablecmds.c:8678 #, c-format msgid "Alter statistics on table column instead." msgstr "Вместо этого измените статистику для столбца в таблице." -#: commands/tablecmds.c:8479 +#: commands/tablecmds.c:8924 #, c-format msgid "cannot drop column from typed table" msgstr "нельзя удалить столбец в типизированной таблице" -#: commands/tablecmds.c:8542 +#: commands/tablecmds.c:8987 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "столбец \"%s\" в таблице\"%s\" не существует, пропускается" -#: commands/tablecmds.c:8555 +#: commands/tablecmds.c:9000 #, c-format msgid "cannot drop system column \"%s\"" msgstr "нельзя удалить системный столбец \"%s\"" -#: commands/tablecmds.c:8565 +#: commands/tablecmds.c:9010 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "нельзя удалить наследованный столбец \"%s\"" -#: commands/tablecmds.c:8578 +#: commands/tablecmds.c:9023 #, c-format msgid "" "cannot drop column \"%s\" because it is part of the partition key of " @@ -12006,7 +12516,7 @@ msgstr "" "удалить столбец \"%s\" нельзя, так как он входит в ключ разбиения отношения " "\"%s\"" -#: commands/tablecmds.c:8603 +#: commands/tablecmds.c:9048 #, c-format msgid "" "cannot drop column from only the partitioned table when partitions exist" @@ -12014,7 +12524,7 @@ msgstr "" "удалить столбец только из секционированной таблицы, когда существуют секции, " "нельзя" -#: commands/tablecmds.c:8808 +#: commands/tablecmds.c:9253 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned " @@ -12023,14 +12533,14 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX не поддерживается с " "секционированными таблицами" -#: commands/tablecmds.c:8833 +#: 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:9170 +#: commands/tablecmds.c:9615 #, c-format msgid "" "cannot use ONLY for foreign key on partitioned table \"%s\" referencing " @@ -12039,7 +12549,7 @@ msgstr "" "нельзя использовать ONLY для стороннего ключа в секционированной таблице " "\"%s\", ссылающегося на отношение \"%s\"" -#: commands/tablecmds.c:9176 +#: commands/tablecmds.c:9621 #, c-format msgid "" "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing " @@ -12048,25 +12558,25 @@ msgstr "" "нельзя добавить с характеристикой NOT VALID сторонний ключ в " "секционированной таблице \"%s\", ссылающийся на отношение \"%s\"" -#: commands/tablecmds.c:9179 +#: commands/tablecmds.c:9624 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "" "Эта функциональность с секционированными таблицами пока не поддерживается." -#: commands/tablecmds.c:9186 commands/tablecmds.c:9642 +#: commands/tablecmds.c:9631 commands/tablecmds.c:10092 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "указанный объект \"%s\" не является таблицей" -#: commands/tablecmds.c:9209 +#: commands/tablecmds.c:9654 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "" "ограничения в постоянных таблицах могут ссылаться только на постоянные " "таблицы" -#: commands/tablecmds.c:9216 +#: commands/tablecmds.c:9661 #, c-format msgid "" "constraints on unlogged tables may reference only permanent or unlogged " @@ -12075,13 +12585,13 @@ msgstr "" "ограничения в нежурналируемых таблицах могут ссылаться только на постоянные " "или нежурналируемые таблицы" -#: commands/tablecmds.c:9222 +#: commands/tablecmds.c:9667 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "ограничения во временных таблицах могут ссылаться только на временные таблицы" -#: commands/tablecmds.c:9226 +#: commands/tablecmds.c:9671 #, c-format msgid "" "constraints on temporary tables must involve temporary tables of this session" @@ -12089,7 +12599,7 @@ msgstr "" "ограничения во временных таблицах должны ссылаться только на временные " "таблицы текущего сеанса" -#: commands/tablecmds.c:9290 commands/tablecmds.c:9296 +#: commands/tablecmds.c:9735 commands/tablecmds.c:9741 #, c-format msgid "" "invalid %s action for foreign key constraint containing generated column" @@ -12097,22 +12607,22 @@ msgstr "" "некорректное действие %s для ограничения внешнего ключа, содержащего " "генерируемый столбец" -#: commands/tablecmds.c:9312 +#: commands/tablecmds.c:9757 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "число столбцов в источнике и назначении внешнего ключа не совпадает" -#: commands/tablecmds.c:9419 +#: commands/tablecmds.c:9864 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "ограничение внешнего ключа \"%s\" нельзя реализовать" -#: commands/tablecmds.c:9421 +#: 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:9578 +#: commands/tablecmds.c:10035 #, c-format msgid "" "column \"%s\" referenced in ON DELETE SET action must be part of foreign key" @@ -12120,40 +12630,49 @@ msgstr "" "столбец \"%s\", фигурирующий в действии ON DELETE SET, должен входить во " "внешний ключ" -#: commands/tablecmds.c:9852 commands/tablecmds.c:10322 -#: parser/parse_utilcmd.c:800 parser/parse_utilcmd.c:929 +#: 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:10875 commands/tablecmds.c:11156 -#: commands/tablecmds.c:12072 commands/tablecmds.c:12147 +#: 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 "ограничение \"%s\" в таблице \"%s\" не существует" -#: commands/tablecmds.c:10882 +#: commands/tablecmds.c:11423 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "ограничение \"%s\" в таблице \"%s\" не является внешним ключом" -#: commands/tablecmds.c:10920 +#: commands/tablecmds.c:11461 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "изменить ограничение \"%s\" таблицы \"%s\" нельзя" -#: commands/tablecmds.c:10923 +#: commands/tablecmds.c:11464 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "" "Ограничение \"%s\" является производным от ограничения \"%s\" таблицы \"%s\"." -#: commands/tablecmds.c:10925 +#: commands/tablecmds.c:11466 #, c-format msgid "You may alter the constraint it derives from instead." msgstr "Вместо этого вы можете изменить родительское ограничение." -#: commands/tablecmds.c:11164 +#: commands/tablecmds.c:11705 #, c-format msgid "" "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" @@ -12161,51 +12680,51 @@ msgstr "" "ограничение \"%s\" в таблице \"%s\" не является внешним ключом или " "ограничением-проверкой" -#: commands/tablecmds.c:11241 +#: commands/tablecmds.c:11782 #, c-format msgid "constraint must be validated on child tables too" msgstr "ограничение также должно соблюдаться в дочерних таблицах" -#: commands/tablecmds.c:11328 +#: commands/tablecmds.c:11869 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "столбец \"%s\", указанный в ограничении внешнего ключа, не существует" -#: commands/tablecmds.c:11334 +#: commands/tablecmds.c:11875 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "системные столбцы нельзя использовать во внешних ключах" -#: commands/tablecmds.c:11338 +#: commands/tablecmds.c:11879 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "во внешнем ключе не может быть больше %d столбцов" -#: commands/tablecmds.c:11403 +#: commands/tablecmds.c:11944 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "" "использовать откладываемый первичный ключ в целевой внешней таблице \"%s\" " "нельзя" -#: commands/tablecmds.c:11420 +#: commands/tablecmds.c:11961 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "в целевой внешней таблице \"%s\" нет первичного ключа" -#: commands/tablecmds.c:11488 +#: commands/tablecmds.c:12029 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "в списке столбцов внешнего ключа не должно быть повторений" -#: commands/tablecmds.c:11580 +#: commands/tablecmds.c:12121 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "использовать откладываемое ограничение уникальности в целевой внешней " "таблице \"%s\" нельзя" -#: commands/tablecmds.c:11585 +#: commands/tablecmds.c:12126 #, c-format msgid "" "there is no unique constraint matching given keys for referenced table \"%s\"" @@ -12213,27 +12732,39 @@ msgstr "" "в целевой внешней таблице \"%s\" нет ограничения уникальности, " "соответствующего данным ключам" -#: commands/tablecmds.c:12028 +#: commands/tablecmds.c:12565 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "удалить наследованное ограничение \"%s\" таблицы \"%s\" нельзя" -#: commands/tablecmds.c:12078 +#: commands/tablecmds.c:12615 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" в таблице \"%s\" не существует, пропускается" -#: commands/tablecmds.c:12254 +#: commands/tablecmds.c:12790 #, c-format msgid "cannot alter column type of typed table" msgstr "изменить тип столбца в типизированной таблице нельзя" -#: commands/tablecmds.c:12281 +#: 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:12290 +#: commands/tablecmds.c:12836 #, c-format msgid "" "cannot alter column \"%s\" because it is part of the partition key of " @@ -12242,7 +12773,7 @@ msgstr "" "изменить столбец \"%s\" нельзя, так как он входит в ключ разбиения отношения " "\"%s\"" -#: commands/tablecmds.c:12340 +#: commands/tablecmds.c:12886 #, c-format msgid "" "result of USING clause for column \"%s\" cannot be cast automatically to " @@ -12250,45 +12781,45 @@ msgid "" msgstr "" "результат USING для столбца \"%s\" нельзя автоматически привести к типу %s" -#: commands/tablecmds.c:12343 +#: commands/tablecmds.c:12889 #, c-format msgid "You might need to add an explicit cast." msgstr "Возможно, необходимо добавить явное приведение." -#: commands/tablecmds.c:12347 +#: commands/tablecmds.c:12893 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "столбец \"%s\" нельзя автоматически привести к типу %s" # skip-rule: double-colons #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:12350 +#: commands/tablecmds.c:12897 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Возможно, необходимо указать \"USING %s::%s\"." -#: commands/tablecmds.c:12449 +#: commands/tablecmds.c:12996 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "изменить наследованный столбец \"%s\" отношения \"%s\" нельзя" -#: commands/tablecmds.c:12478 +#: commands/tablecmds.c:13025 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "Выражение USING ссылается на тип всей строки таблицы." -#: commands/tablecmds.c:12489 +#: commands/tablecmds.c:13036 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "" "тип наследованного столбца \"%s\" должен быть изменён и в дочерних таблицах" -#: commands/tablecmds.c:12614 +#: commands/tablecmds.c:13161 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "нельзя изменить тип столбца \"%s\" дважды" -#: commands/tablecmds.c:12652 +#: commands/tablecmds.c:13199 #, c-format msgid "" "generation expression for column \"%s\" cannot be cast automatically to type " @@ -12297,160 +12828,160 @@ msgstr "" "генерирующее выражение для столбца \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:12657 +#: commands/tablecmds.c:13204 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "значение по умолчанию для столбца \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:12745 +#: commands/tablecmds.c:13508 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "изменить тип столбца, задействованного в функции или процедуре, нельзя" -#: commands/tablecmds.c:12746 commands/tablecmds.c:12760 -#: commands/tablecmds.c:12779 commands/tablecmds.c:12797 -#: commands/tablecmds.c:12855 +#: 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:12759 +#: commands/tablecmds.c:13523 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "" "изменить тип столбца, задействованного в представлении или правиле, нельзя" -#: commands/tablecmds.c:12778 +#: commands/tablecmds.c:13543 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "изменить тип столбца, задействованного в определении триггера, нельзя" -#: commands/tablecmds.c:12796 +#: commands/tablecmds.c:13562 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "изменить тип столбца, задействованного в определении политики, нельзя" -#: commands/tablecmds.c:12827 +#: commands/tablecmds.c:13593 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "изменить тип столбца, задействованного в генерируемом столбце, нельзя" -#: commands/tablecmds.c:12828 +#: commands/tablecmds.c:13594 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Столбец \"%s\" используется генерируемым столбцом \"%s\"." -#: commands/tablecmds.c:12854 +#: commands/tablecmds.c:13621 #, c-format msgid "cannot alter type of a column used by a publication WHERE clause" msgstr "" "изменить тип столбца, задействованного в заданном для публикации предложении " "WHERE, нельзя" -#: commands/tablecmds.c:13915 commands/tablecmds.c:13927 +#: commands/tablecmds.c:14456 commands/tablecmds.c:14468 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "сменить владельца индекса \"%s\" нельзя" -#: commands/tablecmds.c:13917 commands/tablecmds.c:13929 +#: commands/tablecmds.c:14458 commands/tablecmds.c:14470 #, c-format msgid "Change the ownership of the index's table instead." msgstr "Однако возможно сменить владельца таблицы, содержащей этот индекс." -#: commands/tablecmds.c:13943 +#: commands/tablecmds.c:14484 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "сменить владельца последовательности \"%s\" нельзя" -#: commands/tablecmds.c:13968 +#: commands/tablecmds.c:14509 #, c-format msgid "cannot change owner of relation \"%s\"" msgstr "сменить владельца отношения \"%s\" нельзя" -#: commands/tablecmds.c:14330 +#: commands/tablecmds.c:14976 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "в одной инструкции не может быть несколько подкоманд SET TABLESPACE" -#: commands/tablecmds.c:14407 +#: commands/tablecmds.c:15053 #, c-format msgid "cannot set options for relation \"%s\"" msgstr "задать параметры отношения \"%s\" нельзя" -#: commands/tablecmds.c:14441 commands/view.c:445 +#: 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:14691 +#: commands/tablecmds.c:15338 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "" "в табличных пространствах есть только таблицы, индексы и материализованные " "представления" -#: commands/tablecmds.c:14703 +#: commands/tablecmds.c:15350 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "перемещать объекты в/из табличного пространства pg_global нельзя" -#: commands/tablecmds.c:14795 +#: commands/tablecmds.c:15442 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "" "обработка прерывается из-за невозможности заблокировать отношение \"%s.%s\"" -#: commands/tablecmds.c:14811 +#: commands/tablecmds.c:15458 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "в табличном пространстве \"%s\" не найдены подходящие отношения" -#: commands/tablecmds.c:14929 +#: commands/tablecmds.c:15580 #, c-format msgid "cannot change inheritance of typed table" msgstr "изменить наследование типизированной таблицы нельзя" -#: commands/tablecmds.c:14934 commands/tablecmds.c:15452 +#: commands/tablecmds.c:15585 commands/tablecmds.c:16085 #, c-format msgid "cannot change inheritance of a partition" msgstr "изменить наследование секции нельзя" -#: commands/tablecmds.c:14939 +#: commands/tablecmds.c:15590 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "изменить наследование секционированной таблицы нельзя" -#: commands/tablecmds.c:14985 +#: commands/tablecmds.c:15636 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "наследование для временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:14998 +#: commands/tablecmds.c:15649 #, c-format msgid "cannot inherit from a partition" msgstr "наследование от секции невозможно" -#: commands/tablecmds.c:15020 commands/tablecmds.c:17878 +#: commands/tablecmds.c:15671 commands/tablecmds.c:18529 #, c-format msgid "circular inheritance not allowed" msgstr "циклическое наследование недопустимо" -#: commands/tablecmds.c:15021 commands/tablecmds.c:17879 +#: commands/tablecmds.c:15672 commands/tablecmds.c:18530 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" уже является потомком \"%s\"." -#: commands/tablecmds.c:15034 +#: commands/tablecmds.c:15685 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "" "триггер \"%s\" не позволяет таблице \"%s\" стать потомком в иерархии " "наследования" -#: commands/tablecmds.c:15036 +#: commands/tablecmds.c:15687 #, c-format msgid "" "ROW triggers with transition tables are not supported in inheritance " @@ -12459,34 +12990,34 @@ msgstr "" "Триггеры ROW с переходными таблицами не поддерживаются в иерархиях " "наследования." -#: commands/tablecmds.c:15239 +#: commands/tablecmds.c:15876 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "столбец \"%s\" в дочерней таблице должен быть помечен как NOT NULL" -#: commands/tablecmds.c:15248 +#: commands/tablecmds.c:15885 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "столбец \"%s\" в дочерней таблице должен быть генерируемым" -#: commands/tablecmds.c:15253 +#: commands/tablecmds.c:15889 #, c-format msgid "column \"%s\" in child table must not be a generated column" msgstr "столбец \"%s\" в дочерней таблице должен быть не генерируемым" -#: commands/tablecmds.c:15284 +#: commands/tablecmds.c:15927 #, c-format msgid "child table is missing column \"%s\"" msgstr "в дочерней таблице не хватает столбца \"%s\"" -#: commands/tablecmds.c:15372 +#: commands/tablecmds.c:16008 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "" "дочерняя таблица \"%s\" содержит другое определение ограничения-проверки " "\"%s\"" -#: commands/tablecmds.c:15380 +#: commands/tablecmds.c:16015 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on child table " @@ -12495,7 +13026,7 @@ msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением дочерней таблицы " "\"%s\"" -#: commands/tablecmds.c:15391 +#: commands/tablecmds.c:16025 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" @@ -12503,82 +13034,82 @@ msgstr "" "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "дочерней таблицы \"%s\"" -#: commands/tablecmds.c:15430 +#: commands/tablecmds.c:16063 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "в дочерней таблице не хватает ограничения \"%s\"" -#: commands/tablecmds.c:15516 +#: commands/tablecmds.c:16149 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "" "секция \"%s\" уже ожидает отсоединения от секционированной таблицы \"%s.%s\"" -#: commands/tablecmds.c:15545 commands/tablecmds.c:15593 +#: 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:15599 +#: commands/tablecmds.c:16230 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "отношение \"%s\" не является предком отношения \"%s\"" -#: commands/tablecmds.c:15827 +#: commands/tablecmds.c:16457 #, c-format msgid "typed tables cannot inherit" msgstr "типизированные таблицы не могут наследоваться" -#: commands/tablecmds.c:15857 +#: commands/tablecmds.c:16487 #, c-format msgid "table is missing column \"%s\"" msgstr "в таблице не хватает столбца \"%s\"" -#: commands/tablecmds.c:15868 +#: commands/tablecmds.c:16498 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "таблица содержит столбец \"%s\", тогда как тип требует \"%s\"" -#: commands/tablecmds.c:15877 +#: commands/tablecmds.c:16507 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "таблица \"%s\" содержит столбец \"%s\" другого типа" -#: commands/tablecmds.c:15891 +#: commands/tablecmds.c:16521 #, c-format msgid "table has extra column \"%s\"" msgstr "таблица содержит лишний столбец \"%s\"" -#: commands/tablecmds.c:15943 +#: commands/tablecmds.c:16573 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" - это не типизированная таблица" -#: commands/tablecmds.c:16117 +#: commands/tablecmds.c:16747 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать неуникальный индекс \"%s\"" -#: commands/tablecmds.c:16123 +#: commands/tablecmds.c:16753 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать не непосредственный индекс " "\"%s\"" -#: commands/tablecmds.c:16129 +#: commands/tablecmds.c:16759 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать индекс с выражением \"%s\"" -#: commands/tablecmds.c:16135 +#: commands/tablecmds.c:16765 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "для идентификации реплики нельзя использовать частичный индекс \"%s\"" -#: commands/tablecmds.c:16152 +#: commands/tablecmds.c:16782 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column %d is a " @@ -12587,7 +13118,7 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как столбец " "%d - системный" -#: commands/tablecmds.c:16159 +#: commands/tablecmds.c:16789 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column \"%s\" is " @@ -12596,13 +13127,13 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как столбец " "\"%s\" допускает NULL" -#: commands/tablecmds.c:16404 +#: commands/tablecmds.c:17041 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "" "изменить состояние журналирования таблицы %s нельзя, так как она временная" -#: commands/tablecmds.c:16428 +#: commands/tablecmds.c:17065 #, c-format msgid "" "cannot change table \"%s\" to unlogged because it is part of a publication" @@ -12610,12 +13141,12 @@ msgstr "" "таблицу \"%s\" нельзя сделать нежурналируемой, так как она включена в " "публикацию" -#: commands/tablecmds.c:16430 +#: commands/tablecmds.c:17067 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Нежурналируемые отношения не поддерживают репликацию." -#: commands/tablecmds.c:16475 +#: commands/tablecmds.c:17112 #, c-format msgid "" "could not change table \"%s\" to logged because it references unlogged table " @@ -12624,7 +13155,7 @@ msgstr "" "не удалось сделать таблицу \"%s\" журналируемой, так как она ссылается на " "нежурналируемую таблицу \"%s\"" -#: commands/tablecmds.c:16485 +#: commands/tablecmds.c:17122 #, c-format msgid "" "could not change table \"%s\" to unlogged because it references logged table " @@ -12633,97 +13164,91 @@ msgstr "" "не удалось сделать таблицу \"%s\" нежурналируемой, так как она ссылается на " "журналируемую таблицу \"%s\"" -#: commands/tablecmds.c:16543 +#: commands/tablecmds.c:17180 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "переместить последовательность с владельцем в другую схему нельзя" -#: commands/tablecmds.c:16645 +#: commands/tablecmds.c:17288 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "отношение \"%s\" уже существует в схеме \"%s\"" -#: commands/tablecmds.c:17065 +#: commands/tablecmds.c:17713 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" - это не таблица и не материализованное представление" -#: commands/tablecmds.c:17215 +#: commands/tablecmds.c:17866 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" - это не составной тип" -#: commands/tablecmds.c:17245 +#: commands/tablecmds.c:17896 #, c-format msgid "cannot change schema of index \"%s\"" msgstr "сменить схему индекса \"%s\" нельзя" -#: commands/tablecmds.c:17247 commands/tablecmds.c:17261 +#: commands/tablecmds.c:17898 commands/tablecmds.c:17912 #, c-format msgid "Change the schema of the table instead." msgstr "Однако возможно сменить владельца таблицы." -#: commands/tablecmds.c:17251 +#: commands/tablecmds.c:17902 #, c-format msgid "cannot change schema of composite type \"%s\"" msgstr "сменить схему составного типа \"%s\" нельзя" -#: commands/tablecmds.c:17259 +#: commands/tablecmds.c:17910 #, c-format msgid "cannot change schema of TOAST table \"%s\"" msgstr "сменить схему TOAST-таблицы \"%s\" нельзя" -#: commands/tablecmds.c:17291 +#: commands/tablecmds.c:17942 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "стратегия секционирования по списку не поддерживает несколько столбцов" -#: commands/tablecmds.c:17357 +#: commands/tablecmds.c:18008 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "столбец \"%s\", упомянутый в ключе секционирования, не существует" -#: commands/tablecmds.c:17365 +#: commands/tablecmds.c:18016 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "системный столбец \"%s\" нельзя использовать в ключе секционирования" -#: commands/tablecmds.c:17376 commands/tablecmds.c:17466 +#: commands/tablecmds.c:18027 commands/tablecmds.c:18117 #, c-format msgid "cannot use generated column in partition key" msgstr "генерируемый столбец нельзя использовать в ключе секционирования" -#: commands/tablecmds.c:17377 commands/tablecmds.c:17467 commands/trigger.c:663 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "Столбец \"%s\" является генерируемым." - -#: commands/tablecmds.c:17449 +#: commands/tablecmds.c:18100 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "" "выражения ключей секционирования не могут содержать ссылки на системный " "столбец" -#: commands/tablecmds.c:17496 +#: commands/tablecmds.c:18147 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "функции в выражении ключа секционирования должны быть помечены как IMMUTABLE" -#: commands/tablecmds.c:17505 +#: commands/tablecmds.c:18156 #, c-format msgid "cannot use constant expression as partition key" msgstr "" "в качестве ключа секционирования нельзя использовать константное выражение" -#: commands/tablecmds.c:17526 +#: commands/tablecmds.c:18177 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "не удалось определить правило сортировки для выражения секционирования" -#: commands/tablecmds.c:17561 +#: commands/tablecmds.c:18212 #, c-format msgid "" "You must specify a hash operator class or define a default hash operator " @@ -12732,7 +13257,7 @@ msgstr "" "Вы должны указать класс операторов хеширования или определить класс " "операторов хеширования по умолчанию для этого типа данных." -#: commands/tablecmds.c:17567 +#: commands/tablecmds.c:18218 #, c-format msgid "" "You must specify a btree operator class or define a default btree operator " @@ -12741,27 +13266,27 @@ msgstr "" "Вы должны указать класс операторов B-дерева или определить класс операторов " "B-дерева по умолчанию для этого типа данных." -#: commands/tablecmds.c:17818 +#: commands/tablecmds.c:18469 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" уже является секцией" -#: commands/tablecmds.c:17824 +#: commands/tablecmds.c:18475 #, c-format msgid "cannot attach a typed table as partition" msgstr "подключить типизированную таблицу в качестве секции нельзя" -#: commands/tablecmds.c:17840 +#: commands/tablecmds.c:18491 #, c-format msgid "cannot attach inheritance child as partition" msgstr "подключить потомок в иерархии наследования в качестве секции нельзя" -#: commands/tablecmds.c:17854 +#: commands/tablecmds.c:18505 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "подключить родитель в иерархии наследования в качестве секции нельзя" -#: commands/tablecmds.c:17888 +#: commands/tablecmds.c:18539 #, c-format msgid "" "cannot attach a temporary relation as partition of permanent relation \"%s\"" @@ -12769,7 +13294,7 @@ msgstr "" "подключить временное отношение в качестве секции постоянного отношения " "\"%s\" нельзя" -#: commands/tablecmds.c:17896 +#: commands/tablecmds.c:18547 #, c-format msgid "" "cannot attach a permanent relation as partition of temporary relation \"%s\"" @@ -12777,92 +13302,102 @@ msgstr "" "подключить постоянное отношение в качестве секции временного отношения " "\"%s\" нельзя" -#: commands/tablecmds.c:17904 +#: commands/tablecmds.c:18555 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "подключить секцию к временному отношению в другом сеансе нельзя" -#: commands/tablecmds.c:17911 +#: commands/tablecmds.c:18562 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "" "подключить временное отношение из другого сеанса в качестве секции нельзя" -#: commands/tablecmds.c:17931 +#: commands/tablecmds.c:18582 +#, c-format +msgid "table \"%s\" being attached contains an identity column \"%s\"" +msgstr "присоединяемая таблица \"%s\" содержит столбец идентификации \"%s\"" + +#: commands/tablecmds.c:18584 +#, c-format +msgid "The new partition may not contain an identity column." +msgstr "Новая секция не может содержать столбец идентификации." + +#: commands/tablecmds.c:18592 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "" "таблица \"%s\" содержит столбец \"%s\", отсутствующий в родителе \"%s\"" -#: commands/tablecmds.c:17934 +#: commands/tablecmds.c:18595 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "" "Новая секция может содержать только столбцы, имеющиеся в родительской " "таблице." -#: commands/tablecmds.c:17946 +#: commands/tablecmds.c:18607 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "триггер \"%s\" не позволяет сделать таблицу \"%s\" секцией" -#: commands/tablecmds.c:17948 +#: commands/tablecmds.c:18609 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "Триггеры ROW с переходными таблицами для секций не поддерживаются." -#: commands/tablecmds.c:18127 +#: commands/tablecmds.c:18785 #, c-format msgid "" "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "" "нельзя присоединить стороннюю таблицу \"%s\" в качестве секции таблицы \"%s\"" -#: commands/tablecmds.c:18130 +#: commands/tablecmds.c:18788 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Секционированная таблица \"%s\" содержит уникальные индексы." -#: commands/tablecmds.c:18447 +#: commands/tablecmds.c:19110 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "" "секции нельзя отсоединять в режиме CONCURRENTLY, когда существует секция по " "умолчанию" -#: commands/tablecmds.c:18556 +#: commands/tablecmds.c:19219 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "секционированная таблица \"%s\" была параллельно удалена" -#: commands/tablecmds.c:18562 +#: commands/tablecmds.c:19225 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "секция \"%s\" была параллельно удалена" -#: commands/tablecmds.c:19077 commands/tablecmds.c:19097 -#: commands/tablecmds.c:19118 commands/tablecmds.c:19137 -#: commands/tablecmds.c:19179 +#: 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:19080 +#: commands/tablecmds.c:19842 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Индекс \"%s\" уже присоединён к другому индексу." -#: commands/tablecmds.c:19100 +#: 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:19121 +#: commands/tablecmds.c:19883 #, c-format msgid "The index definitions do not match." msgstr "Определения индексов не совпадают." -#: commands/tablecmds.c:19140 +#: commands/tablecmds.c:19902 #, c-format msgid "" "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint " @@ -12871,172 +13406,172 @@ msgstr "" "Индекс \"%s\" принадлежит ограничению в таблице \"%s\", но для индекса " "\"%s\" ограничения нет." -#: commands/tablecmds.c:19182 +#: commands/tablecmds.c:19944 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "К секции \"%s\" уже присоединён другой индекс." -#: commands/tablecmds.c:19418 +#: commands/tablecmds.c:20180 #, c-format msgid "column data type %s does not support compression" msgstr "тим данных столбца %s не поддерживает сжатие" -#: commands/tablecmds.c:19425 +#: commands/tablecmds.c:20187 #, c-format msgid "invalid compression method \"%s\"" msgstr "неверный метод сжатия \"%s\"" -#: commands/tablecmds.c:19451 +#: commands/tablecmds.c:20213 #, c-format msgid "invalid storage type \"%s\"" msgstr "неверный тип хранилища \"%s\"" -#: commands/tablecmds.c:19461 +#: commands/tablecmds.c:20223 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип данных столбца %s совместим только с хранилищем PLAIN" -#: commands/tablespace.c:199 commands/tablespace.c:650 +#: commands/tablespace.c:193 commands/tablespace.c:644 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" существует, но это не каталог" -#: commands/tablespace.c:230 +#: commands/tablespace.c:224 #, c-format msgid "permission denied to create tablespace \"%s\"" -msgstr "нет прав на создание табличного пространства \"%s\"" +msgstr "нет прав для создания табличного пространства \"%s\"" -#: commands/tablespace.c:232 +#: commands/tablespace.c:226 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Для создания табличного пространства нужно быть суперпользователем." -#: commands/tablespace.c:248 +#: commands/tablespace.c:242 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "в пути к табличному пространству не должно быть одинарных кавычек" -#: commands/tablespace.c:261 +#: commands/tablespace.c:255 #, c-format msgid "tablespace location must be an absolute path" msgstr "путь к табличному пространству должен быть абсолютным" -#: commands/tablespace.c:273 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "путь к табличному пространству \"%s\" слишком длинный" -#: commands/tablespace.c:280 +#: commands/tablespace.c:274 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "табличное пространство не должно располагаться внутри каталога данных" -#: commands/tablespace.c:289 commands/tablespace.c:976 +#: commands/tablespace.c:283 commands/tablespace.c:970 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "неприемлемое имя табличного пространства: \"%s\"" -#: commands/tablespace.c:291 commands/tablespace.c:977 +#: commands/tablespace.c:285 commands/tablespace.c:971 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Префикс \"pg_\" зарезервирован для системных табличных пространств." -#: commands/tablespace.c:310 commands/tablespace.c:998 +#: commands/tablespace.c:304 commands/tablespace.c:992 #, c-format msgid "tablespace \"%s\" already exists" msgstr "табличное пространство \"%s\" уже существует" -#: commands/tablespace.c:326 +#: commands/tablespace.c:320 #, c-format msgid "pg_tablespace OID value not set when in binary upgrade mode" msgstr "значение OID в pg_tablespace не задано в режиме двоичного обновления" -#: commands/tablespace.c:431 commands/tablespace.c:959 -#: commands/tablespace.c:1048 commands/tablespace.c:1117 -#: commands/tablespace.c:1263 commands/tablespace.c:1466 +#: commands/tablespace.c:425 commands/tablespace.c:953 +#: commands/tablespace.c:1042 commands/tablespace.c:1111 +#: commands/tablespace.c:1257 commands/tablespace.c:1460 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "табличное пространство \"%s\" не существует" -#: commands/tablespace.c:437 +#: commands/tablespace.c:431 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "табличное пространство \"%s\" не существует, пропускается" -#: commands/tablespace.c:463 +#: commands/tablespace.c:457 #, c-format msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" msgstr "" "табличное пространство \"%s\" нельзя удалить, так как есть зависящие от него " "объекты" -#: commands/tablespace.c:530 +#: commands/tablespace.c:524 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "табличное пространство \"%s\" не пусто" -#: commands/tablespace.c:617 +#: commands/tablespace.c:611 #, c-format msgid "directory \"%s\" does not exist" msgstr "каталог \"%s\" не существует" -#: commands/tablespace.c:618 +#: commands/tablespace.c:612 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "" "Создайте этот каталог для табличного пространства до перезапуска сервера." -#: commands/tablespace.c:623 +#: commands/tablespace.c:617 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не удалось установить права для каталога \"%s\": %m" -#: commands/tablespace.c:655 +#: commands/tablespace.c:649 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "каталог \"%s\" уже используется как табличное пространство" -#: commands/tablespace.c:833 commands/tablespace.c:919 +#: commands/tablespace.c:827 commands/tablespace.c:913 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "ошибка при удалении символической ссылки \"%s\": %m" -#: commands/tablespace.c:842 commands/tablespace.c:927 +#: commands/tablespace.c:836 commands/tablespace.c:921 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\" - это не каталог или символическая ссылка" -#: commands/tablespace.c:1122 +#: commands/tablespace.c:1116 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Табличное пространство \"%s\" не существует." -#: commands/tablespace.c:1568 +#: commands/tablespace.c:1562 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "удалить каталоги табличного пространства %u не удалось" -#: commands/tablespace.c:1570 +#: commands/tablespace.c:1564 #, c-format msgid "You can remove the directories manually if necessary." msgstr "При необходимости вы можете удалить их вручную." -#: commands/trigger.c:232 commands/trigger.c:243 +#: commands/trigger.c:225 commands/trigger.c:236 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" - это таблица" -#: commands/trigger.c:234 commands/trigger.c:245 +#: commands/trigger.c:227 commands/trigger.c:238 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "У таблиц не может быть триггеров INSTEAD OF." -#: commands/trigger.c:266 +#: commands/trigger.c:259 #, c-format msgid "\"%s\" is a partitioned table" msgstr "\"%s\" - секционированная таблица" -#: commands/trigger.c:268 +#: commands/trigger.c:261 #, c-format msgid "" "ROW triggers with transition tables are not supported on partitioned tables." @@ -13044,88 +13579,88 @@ msgstr "" "Триггеры ROW с переходными таблицами не поддерживаются в секционированных " "таблицах." -#: commands/trigger.c:280 commands/trigger.c:287 commands/trigger.c:451 +#: commands/trigger.c:273 commands/trigger.c:280 commands/trigger.c:444 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" - это представление" -#: commands/trigger.c:282 +#: commands/trigger.c:275 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "У представлений не может быть строковых триггеров BEFORE/AFTER." -#: commands/trigger.c:289 +#: commands/trigger.c:282 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "У представлений не может быть триггеров TRUNCATE." -#: commands/trigger.c:297 commands/trigger.c:309 commands/trigger.c:444 +#: commands/trigger.c:290 commands/trigger.c:302 commands/trigger.c:437 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" - сторонняя таблица" -#: commands/trigger.c:299 +#: commands/trigger.c:292 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "У сторонних таблиц не может быть триггеров INSTEAD OF." -#: commands/trigger.c:311 +#: commands/trigger.c:304 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "У сторонних таблиц не может быть ограничивающих триггеров." -#: commands/trigger.c:316 commands/trigger.c:1332 commands/trigger.c:1439 +#: commands/trigger.c:309 commands/trigger.c:1325 commands/trigger.c:1432 #, c-format msgid "relation \"%s\" cannot have triggers" msgstr "в отношении \"%s\" не может быть триггеров" -#: commands/trigger.c:387 +#: commands/trigger.c:380 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "триггеры TRUNCATE FOR EACH ROW не поддерживаются" -#: commands/trigger.c:395 +#: commands/trigger.c:388 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "триггеры INSTEAD OF должны иметь тип FOR EACH ROW" -#: commands/trigger.c:399 +#: commands/trigger.c:392 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "триггеры INSTEAD OF несовместимы с условиями WHEN" -#: commands/trigger.c:403 +#: commands/trigger.c:396 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "для триггеров INSTEAD OF нельзя задать список столбцов" -#: commands/trigger.c:432 +#: commands/trigger.c:425 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "" "указание переменной типа кортеж в предложении REFERENCING не поддерживается" -#: commands/trigger.c:433 +#: commands/trigger.c:426 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "Используйте OLD TABLE или NEW TABLE для именования переходных таблиц." -#: commands/trigger.c:446 +#: commands/trigger.c:439 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Триггеры сторонних таблиц не могут использовать переходные таблицы." -#: commands/trigger.c:453 +#: commands/trigger.c:446 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Триггеры представлений не могут использовать переходные таблицы." -#: commands/trigger.c:469 +#: commands/trigger.c:462 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "триггеры ROW с переходными таблицами для секций не поддерживаются" -#: commands/trigger.c:473 +#: commands/trigger.c:466 #, c-format msgid "" "ROW triggers with transition tables are not supported on inheritance children" @@ -13133,17 +13668,17 @@ msgstr "" "триггеры ROW с переходными таблицами для потомков в иерархии наследования не " "поддерживаются" -#: commands/trigger.c:479 +#: commands/trigger.c:472 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "имя переходной таблицы можно задать только для триггера AFTER" -#: commands/trigger.c:484 +#: commands/trigger.c:477 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "триггеры TRUNCATE с переходными таблицами не поддерживаются" -#: commands/trigger.c:501 +#: commands/trigger.c:494 #, c-format msgid "" "transition tables cannot be specified for triggers with more than one event" @@ -13151,127 +13686,127 @@ msgstr "" "переходные таблицы нельзя задать для триггеров, назначаемых для нескольких " "событий" -#: commands/trigger.c:512 +#: commands/trigger.c:505 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "переходные таблицы нельзя задать для триггеров со списками столбцов" -#: commands/trigger.c:529 +#: commands/trigger.c:522 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE можно задать только для триггеров INSERT или UPDATE" -#: commands/trigger.c:534 +#: commands/trigger.c:527 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE нельзя задать несколько раз" -#: commands/trigger.c:544 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE можно задать только для триггеров DELETE или UPDATE" -#: commands/trigger.c:549 +#: commands/trigger.c:542 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE нельзя задать несколько раз" -#: commands/trigger.c:559 +#: commands/trigger.c:552 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "имя OLD TABLE не должно совпадать с именем NEW TABLE" -#: commands/trigger.c:623 commands/trigger.c:636 +#: commands/trigger.c:616 commands/trigger.c:629 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "" "в условии WHEN для операторного триггера нельзя ссылаться на значения " "столбцов" -#: commands/trigger.c:628 +#: commands/trigger.c:621 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "в условии WHEN для триггера INSERT нельзя ссылаться на значения OLD" -#: commands/trigger.c:641 +#: commands/trigger.c:634 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "в условии WHEN для триггера DELETE нельзя ссылаться на значения NEW" -#: commands/trigger.c:646 +#: commands/trigger.c:639 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "" "в условии WHEN для триггера BEFORE нельзя ссылаться на системные столбцы NEW" -#: commands/trigger.c:654 commands/trigger.c:662 +#: commands/trigger.c:647 commands/trigger.c:655 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "" "в условии WHEN для триггера BEFORE нельзя ссылаться на генерируемые столбцы " "NEW" -#: commands/trigger.c:655 +#: commands/trigger.c:648 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "" "Используется ссылка на всю строку таблицы, а таблица содержит генерируемые " "столбцы." -#: commands/trigger.c:770 commands/trigger.c:1614 +#: commands/trigger.c:763 commands/trigger.c:1607 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "триггер \"%s\" для отношения \"%s\" уже существует" -#: commands/trigger.c:783 +#: commands/trigger.c:776 #, c-format msgid "trigger \"%s\" for relation \"%s\" is an internal or a child trigger" msgstr "триггер \"%s\" для отношения \"%s\" является внутренним или дочерним" -#: commands/trigger.c:802 +#: commands/trigger.c:795 #, c-format msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" msgstr "" "триггер \"%s\" для отношения \"%s\" является триггером, реализующим " "ограничение" -#: commands/trigger.c:1404 commands/trigger.c:1557 commands/trigger.c:1838 +#: commands/trigger.c:1397 commands/trigger.c:1550 commands/trigger.c:1831 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "триггер \"%s\" для таблицы \"%s\" не существует" -#: commands/trigger.c:1529 +#: commands/trigger.c:1522 #, c-format msgid "cannot rename trigger \"%s\" on table \"%s\"" msgstr "переименовать триггер \"%s\" в таблице \"%s\" нельзя" -#: commands/trigger.c:1531 +#: commands/trigger.c:1524 #, c-format msgid "Rename the trigger on the partitioned table \"%s\" instead." msgstr "Однако можно переименовать триггер в секционированной таблице \"%s\"." -#: commands/trigger.c:1631 +#: commands/trigger.c:1624 #, c-format msgid "renamed trigger \"%s\" on relation \"%s\"" msgstr "триггер \"%s\" в отношении \"%s\" переименован" -#: commands/trigger.c:1777 +#: commands/trigger.c:1770 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "нет доступа: \"%s\" - это системный триггер" -#: commands/trigger.c:2386 +#: commands/trigger.c:2379 #, c-format msgid "trigger function %u returned null value" msgstr "триггерная функция %u вернула значение NULL" -#: commands/trigger.c:2446 commands/trigger.c:2664 commands/trigger.c:2917 -#: commands/trigger.c:3270 +#: commands/trigger.c:2439 commands/trigger.c:2657 commands/trigger.c:2910 +#: commands/trigger.c:3263 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "триггер BEFORE STATEMENT не может возвращать значение" -#: commands/trigger.c:2522 +#: commands/trigger.c:2515 #, c-format msgid "" "moving row to another partition during a BEFORE FOR EACH ROW trigger is not " @@ -13279,7 +13814,7 @@ msgid "" msgstr "" "в триггере BEFORE FOR EACH ROW нельзя перемещать строку в другую секцию" -#: commands/trigger.c:2523 +#: commands/trigger.c:2516 #, c-format msgid "" "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." @@ -13287,20 +13822,10 @@ msgstr "" "До выполнения триггера \"%s\" строка должна была находиться в секции \"%s." "%s\"." -#: commands/trigger.c:3347 executor/nodeModifyTable.c:2369 -#: executor/nodeModifyTable.c:2452 -#, c-format -msgid "" -"tuple to be updated was already modified by an operation triggered by the " -"current command" -msgstr "" -"кортеж, который должен быть изменён, уже модифицирован в операции, вызванной " -"текущей командой" - -#: commands/trigger.c:3348 executor/nodeModifyTable.c:1535 -#: executor/nodeModifyTable.c:1609 executor/nodeModifyTable.c:2370 -#: executor/nodeModifyTable.c:2453 executor/nodeModifyTable.c:2990 -#: executor/nodeModifyTable.c:3117 +#: 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 " @@ -13309,34 +13834,34 @@ msgstr "" "Возможно, для распространения изменений в другие строки следует использовать " "триггер AFTER вместо BEFORE." -#: commands/trigger.c:3389 executor/nodeLockRows.c:228 -#: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:308 -#: executor/nodeModifyTable.c:1551 executor/nodeModifyTable.c:2387 -#: executor/nodeModifyTable.c:2595 +#: 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:3397 executor/nodeModifyTable.c:1641 -#: executor/nodeModifyTable.c:2470 executor/nodeModifyTable.c:2619 -#: executor/nodeModifyTable.c:3008 +#: 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:4604 +#: commands/trigger.c:4599 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "" "в рамках операции с ограничениями по безопасности нельзя вызвать отложенный " "триггер" -#: commands/trigger.c:5787 +#: commands/trigger.c:5780 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "ограничение \"%s\" не является откладываемым" -#: commands/trigger.c:5810 +#: commands/trigger.c:5803 #, c-format msgid "constraint \"%s\" does not exist" msgstr "ограничение \"%s\" не существует" @@ -13437,12 +13962,12 @@ msgstr "сопоставление для типа фрагмента \"%s\" н msgid "invalid parameter list format: \"%s\"" msgstr "неверный формат списка параметров: \"%s\"" -#: commands/typecmds.c:217 +#: commands/typecmds.c:221 #, c-format msgid "must be superuser to create a base type" msgstr "для создания базового типа нужно быть суперпользователем" -#: commands/typecmds.c:275 +#: commands/typecmds.c:279 #, c-format msgid "" "Create the type as a shell type, then create its I/O functions, then do a " @@ -13451,42 +13976,42 @@ msgstr "" "Создайте тип в виде оболочки, затем определите для него функции ввода-вывода " "и в завершение выполните полноценную команду CREATE TYPE." -#: commands/typecmds.c:327 commands/typecmds.c:1450 commands/typecmds.c:4263 +#: commands/typecmds.c:331 commands/typecmds.c:1460 commands/typecmds.c:4480 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "атрибут типа \"%s\" не распознан" -#: commands/typecmds.c:382 +#: commands/typecmds.c:386 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "неверная категория типа \"%s\": допустим только ASCII-символ" -#: commands/typecmds.c:401 +#: commands/typecmds.c:405 #, c-format msgid "array element type cannot be %s" msgstr "типом элемента массива не может быть %s" -#: commands/typecmds.c:433 +#: commands/typecmds.c:437 #, c-format msgid "alignment \"%s\" not recognized" msgstr "тип выравнивания \"%s\" не распознан" -#: commands/typecmds.c:450 commands/typecmds.c:4137 +#: commands/typecmds.c:454 commands/typecmds.c:4354 #, c-format msgid "storage \"%s\" not recognized" msgstr "неизвестная стратегия хранения \"%s\"" -#: commands/typecmds.c:461 +#: commands/typecmds.c:465 #, c-format msgid "type input function must be specified" msgstr "необходимо указать функцию ввода типа" -#: commands/typecmds.c:465 +#: commands/typecmds.c:469 #, c-format msgid "type output function must be specified" msgstr "необходимо указать функцию вывода типа" -#: commands/typecmds.c:470 +#: commands/typecmds.c:474 #, c-format msgid "" "type modifier output function is useless without a type modifier input " @@ -13495,89 +14020,89 @@ msgstr "" "функция вывода модификатора типа бесполезна без функции ввода модификатора " "типа" -#: commands/typecmds.c:512 +#: commands/typecmds.c:516 #, c-format msgid "element type cannot be specified without a subscripting function" msgstr "" "тип элемента нельзя задать без указания обработчика обращения по индексу" -#: commands/typecmds.c:781 +#: commands/typecmds.c:785 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" - неподходящий базовый тип для домена" -#: commands/typecmds.c:879 +#: commands/typecmds.c:883 #, c-format msgid "multiple default expressions" msgstr "неоднократное определение значения типа по умолчанию" -#: commands/typecmds.c:942 commands/typecmds.c:951 +#: commands/typecmds.c:946 commands/typecmds.c:955 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "конфликтующие ограничения NULL/NOT NULL" -#: commands/typecmds.c:967 +#: commands/typecmds.c:971 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "" "ограничения-проверки для доменов не могут иметь характеристики NO INHERIT" -#: commands/typecmds.c:976 commands/typecmds.c:2956 +#: commands/typecmds.c:980 commands/typecmds.c:2940 #, c-format msgid "unique constraints not possible for domains" msgstr "ограничения уникальности невозможны для доменов" -#: commands/typecmds.c:982 commands/typecmds.c:2962 +#: commands/typecmds.c:986 commands/typecmds.c:2946 #, c-format msgid "primary key constraints not possible for domains" msgstr "ограничения первичного ключа невозможны для доменов" -#: commands/typecmds.c:988 commands/typecmds.c:2968 +#: commands/typecmds.c:992 commands/typecmds.c:2952 #, c-format msgid "exclusion constraints not possible for domains" msgstr "ограничения-исключения невозможны для доменов" -#: commands/typecmds.c:994 commands/typecmds.c:2974 +#: commands/typecmds.c:998 commands/typecmds.c:2958 #, c-format msgid "foreign key constraints not possible for domains" msgstr "ограничения внешних ключей невозможны для доменов" -#: commands/typecmds.c:1003 commands/typecmds.c:2983 +#: commands/typecmds.c:1007 commands/typecmds.c:2967 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "" "возможность определения отложенных ограничений для доменов не поддерживается" -#: commands/typecmds.c:1317 utils/cache/typcache.c:2567 +#: commands/typecmds.c:1327 utils/cache/typcache.c:2570 #, c-format msgid "%s is not an enum" msgstr "\"%s\" не является перечислением" -#: commands/typecmds.c:1458 +#: commands/typecmds.c:1468 #, c-format msgid "type attribute \"subtype\" is required" msgstr "требуется атрибут типа \"subtype\"" -#: commands/typecmds.c:1463 +#: commands/typecmds.c:1473 #, c-format msgid "range subtype cannot be %s" msgstr "%s не может быть подтипом диапазона" -#: commands/typecmds.c:1482 +#: commands/typecmds.c:1492 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "" "указано правило сортировки для диапазона, но подтип не поддерживает " "сортировку" -#: commands/typecmds.c:1492 +#: commands/typecmds.c:1502 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "" "функцию получения канонического диапазона нельзя задать без предварительно " "созданного типа-пустышки" -#: commands/typecmds.c:1493 +#: commands/typecmds.c:1503 #, c-format msgid "" "Create the type as a shell type, then create its canonicalization function, " @@ -13586,96 +14111,96 @@ msgstr "" "Создайте тип в виде оболочки, затем определите для него функции приведения к " "каноническому виду и в завершение выполните полноценную команду CREATE TYPE." -#: commands/typecmds.c:1965 +#: commands/typecmds.c:1975 #, c-format msgid "type input function %s has multiple matches" msgstr "функция ввода типа %s присутствует в нескольких экземплярах" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1993 #, c-format msgid "type input function %s must return type %s" msgstr "функция ввода типа %s должна возвращать тип %s" -#: commands/typecmds.c:1999 +#: commands/typecmds.c:2009 #, c-format msgid "type input function %s should not be volatile" msgstr "функция ввода типа %s не должна быть изменчивой" -#: commands/typecmds.c:2027 +#: commands/typecmds.c:2037 #, c-format msgid "type output function %s must return type %s" msgstr "функция вывода типа %s должна возвращать тип %s" -#: commands/typecmds.c:2034 +#: commands/typecmds.c:2044 #, c-format msgid "type output function %s should not be volatile" msgstr "функция вывода типа %s не должна быть изменчивой" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2073 #, c-format msgid "type receive function %s has multiple matches" msgstr "функция получения типа %s присутствует в нескольких экземплярах" -#: commands/typecmds.c:2081 +#: commands/typecmds.c:2091 #, c-format msgid "type receive function %s must return type %s" msgstr "функция получения типа %s должна возвращать тип %s" -#: commands/typecmds.c:2088 +#: commands/typecmds.c:2098 #, c-format msgid "type receive function %s should not be volatile" msgstr "функция получения типа %s не должна быть изменчивой" -#: commands/typecmds.c:2116 +#: commands/typecmds.c:2126 #, c-format msgid "type send function %s must return type %s" msgstr "функция отправки типа %s должна возвращать тип %s" -#: commands/typecmds.c:2123 +#: commands/typecmds.c:2133 #, c-format msgid "type send function %s should not be volatile" msgstr "функция отправки типа %s не должна быть изменчивой" -#: commands/typecmds.c:2150 +#: commands/typecmds.c:2160 #, c-format msgid "typmod_in function %s must return type %s" msgstr "функция TYPMOD_IN %s должна возвращать тип %s" -#: commands/typecmds.c:2157 +#: commands/typecmds.c:2167 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "функция ввода модификатора типа %s не должна быть изменчивой" -#: commands/typecmds.c:2184 +#: commands/typecmds.c:2194 #, c-format msgid "typmod_out function %s must return type %s" msgstr "функция TYPMOD_OUT %s должна возвращать тип %s" -#: commands/typecmds.c:2191 +#: commands/typecmds.c:2201 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "функция вывода модификатора типа %s не должна быть изменчивой" -#: commands/typecmds.c:2218 +#: commands/typecmds.c:2228 #, c-format msgid "type analyze function %s must return type %s" msgstr "функция анализа типа %s должна возвращать тип %s" -#: commands/typecmds.c:2247 +#: commands/typecmds.c:2257 #, c-format msgid "type subscripting function %s must return type %s" msgstr "" "функция %s, реализующая для типа обращение по индексу, должна возвращать тип " "%s" -#: commands/typecmds.c:2257 +#: commands/typecmds.c:2267 #, c-format msgid "user-defined types cannot use subscripting function %s" msgstr "" "для пользовательских типов нельзя использовать функцию-обработчик обращения " "по индексу %s" -#: commands/typecmds.c:2303 +#: commands/typecmds.c:2313 #, c-format msgid "" "You must specify an operator class for the range type or define a default " @@ -13684,207 +14209,218 @@ msgstr "" "Вы должны указать класс операторов для типа диапазона или определить класс " "операторов по умолчанию для этого подтипа." -#: commands/typecmds.c:2334 +#: commands/typecmds.c:2344 #, c-format msgid "range canonical function %s must return range type" msgstr "" "функция получения канонического диапазона %s должна возвращать диапазон" -#: commands/typecmds.c:2340 +#: commands/typecmds.c:2350 #, c-format msgid "range canonical function %s must be immutable" msgstr "" "функция получения канонического диапазона %s должна быть постоянной " "(IMMUTABLE)" -#: commands/typecmds.c:2376 +#: commands/typecmds.c:2386 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "функция различий для подтипа диапазона (%s) должна возвращать тип %s" -#: commands/typecmds.c:2383 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "" "функция различий для подтипа диапазона (%s) должна быть постоянной " "(IMMUTABLE)" -#: commands/typecmds.c:2410 +#: commands/typecmds.c:2420 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "значение OID массива в pg_type не задано в режиме двоичного обновления" -#: commands/typecmds.c:2443 +#: commands/typecmds.c:2453 #, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" msgstr "" "значение OID мультидиапазона в pg_type не задано в режиме двоичного " "обновления" -#: commands/typecmds.c:2476 +#: commands/typecmds.c:2486 #, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" msgstr "" "значение OID массива мультидиапазонов в pg_type не задано в режиме двоичного " "обновления" -#: commands/typecmds.c:2772 -#, c-format -msgid "column \"%s\" of table \"%s\" contains null values" -msgstr "столбец \"%s\" таблицы \"%s\" содержит значения NULL" - -#: commands/typecmds.c:2885 commands/typecmds.c:3086 +#: commands/typecmds.c:2868 commands/typecmds.c:3093 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "ограничение \"%s\" для домена \"%s\" не существует" -#: commands/typecmds.c:2889 +#: commands/typecmds.c:2872 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" для домена \"%s\" не существует, пропускается" -#: commands/typecmds.c:3093 +#: commands/typecmds.c:3100 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "" "ограничение \"%s\" для домена \"%s\" не является ограничением-проверкой" -#: commands/typecmds.c:3194 +#: commands/typecmds.c:3180 +#, c-format +msgid "column \"%s\" of table \"%s\" contains null values" +msgstr "столбец \"%s\" таблицы \"%s\" содержит значения NULL" + +#: commands/typecmds.c:3269 #, c-format msgid "" "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "" "столбец \"%s\" таблицы \"%s\" содержит значения, нарушающие новое ограничение" -#: commands/typecmds.c:3423 commands/typecmds.c:3622 commands/typecmds.c:3705 -#: commands/typecmds.c:3893 +#: commands/typecmds.c:3498 commands/typecmds.c:3772 commands/typecmds.c:3857 +#: commands/typecmds.c:4073 #, c-format msgid "%s is not a domain" msgstr "\"%s\" - это не домен" -#: commands/typecmds.c:3455 +#: commands/typecmds.c:3532 commands/typecmds.c:3686 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "ограничение \"%s\" для домена \"%s\" уже существует" -#: commands/typecmds.c:3506 +#: commands/typecmds.c:3583 #, c-format msgid "cannot use table references in domain check constraint" msgstr "в ограничении-проверке для домена нельзя ссылаться на таблицы" -#: commands/typecmds.c:3634 commands/typecmds.c:3717 commands/typecmds.c:4010 +#: commands/typecmds.c:3784 commands/typecmds.c:3869 commands/typecmds.c:4223 #, c-format msgid "%s is a table's row type" msgstr "%s - это тип строк таблицы" -#: commands/typecmds.c:3644 commands/typecmds.c:3727 commands/typecmds.c:3925 +#: commands/typecmds.c:3794 commands/typecmds.c:3879 commands/typecmds.c:4121 #, c-format msgid "cannot alter array type %s" msgstr "изменить тип массива \"%s\" нельзя" -#: commands/typecmds.c:3646 commands/typecmds.c:3729 commands/typecmds.c:3927 +#: commands/typecmds.c:3796 commands/typecmds.c:3881 commands/typecmds.c:4123 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Однако можно изменить тип %s, что повлечёт изменение типа массива." -#: commands/typecmds.c:3995 +#: commands/typecmds.c:3892 +#, c-format +msgid "cannot alter multirange type %s" +msgstr "изменить мультидиапазонный тип %s нельзя" + +#: commands/typecmds.c:3895 +#, c-format +msgid "You can alter type %s, which will alter the multirange type as well." +msgstr "" +"Однако можно изменить тип %s, что повлечёт изменение мультидиапазонного типа." + +#: commands/typecmds.c:4202 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "тип \"%s\" уже существует в схеме \"%s\"" -#: commands/typecmds.c:4165 +#: commands/typecmds.c:4382 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "сменить вариант хранения типа на PLAIN нельзя" -#: commands/typecmds.c:4258 +#: commands/typecmds.c:4475 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "у типа нельзя изменить атрибут \"%s\"" -#: commands/typecmds.c:4276 +#: commands/typecmds.c:4493 #, c-format msgid "must be superuser to alter a type" msgstr "для модификации типа нужно быть суперпользователем" -#: commands/typecmds.c:4297 commands/typecmds.c:4306 +#: commands/typecmds.c:4514 commands/typecmds.c:4523 #, c-format msgid "%s is not a base type" msgstr "%s — не базовый тип" -#: commands/user.c:201 +#: commands/user.c:200 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID уже не нужно указывать" -#: commands/user.c:319 commands/user.c:325 commands/user.c:331 -#: commands/user.c:337 commands/user.c:343 +#: commands/user.c:318 commands/user.c:324 commands/user.c:330 +#: commands/user.c:336 commands/user.c:342 #, c-format msgid "permission denied to create role" msgstr "нет прав для создания роли" -#: commands/user.c:320 +#: commands/user.c:319 #, c-format msgid "Only roles with the %s attribute may create roles." msgstr "Создавать роли могут только роли с атрибутом %s." -#: commands/user.c:326 commands/user.c:332 commands/user.c:338 -#: commands/user.c:344 +#: commands/user.c:325 commands/user.c:331 commands/user.c:337 +#: commands/user.c:343 #, c-format msgid "" "Only roles with the %s attribute may create roles with the %s attribute." msgstr "Создавать роли с атрибутом %s могут только роли с атрибутом %s." -#: commands/user.c:355 commands/user.c:1387 commands/user.c:1394 -#: utils/adt/acl.c:5401 utils/adt/acl.c:5407 gram.y:16726 gram.y:16772 +#: commands/user.c:354 commands/user.c:1386 commands/user.c:1393 +#: utils/adt/acl.c:5574 utils/adt/acl.c:5580 gram.y:17310 gram.y:17356 #, c-format msgid "role name \"%s\" is reserved" msgstr "имя роли \"%s\" зарезервировано" -#: commands/user.c:357 commands/user.c:1389 commands/user.c:1396 +#: commands/user.c:356 commands/user.c:1388 commands/user.c:1395 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Имена ролей, начинающиеся с \"pg_\", зарезервированы." -#: commands/user.c:378 commands/user.c:1411 +#: commands/user.c:377 commands/user.c:1410 #, c-format msgid "role \"%s\" already exists" msgstr "роль \"%s\" уже существует" -#: commands/user.c:440 commands/user.c:925 +#: commands/user.c:439 commands/user.c:924 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "пустая строка не является допустимым паролем; пароль сбрасывается" -#: commands/user.c:469 +#: commands/user.c:468 #, c-format msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "значение OID в pg_authid не задано в режиме двоичного обновления" -#: commands/user.c:653 commands/user.c:1011 +#: commands/user.c:652 commands/user.c:1010 msgid "Cannot alter reserved roles." msgstr "Изменять зарезервированные роли нельзя." -#: commands/user.c:760 commands/user.c:766 commands/user.c:782 -#: commands/user.c:790 commands/user.c:804 commands/user.c:810 -#: commands/user.c:816 commands/user.c:825 commands/user.c:870 -#: commands/user.c:1033 commands/user.c:1044 +#: commands/user.c:759 commands/user.c:765 commands/user.c:781 +#: commands/user.c:789 commands/user.c:803 commands/user.c:809 +#: commands/user.c:815 commands/user.c:824 commands/user.c:869 +#: commands/user.c:1032 commands/user.c:1043 #, c-format msgid "permission denied to alter role" msgstr "нет прав для изменения роли" -#: commands/user.c:761 commands/user.c:1034 +#: commands/user.c:760 commands/user.c:1033 #, c-format msgid "Only roles with the %s attribute may alter roles with the %s attribute." msgstr "Изменять роли с атрибутом %s могут только роли с атрибутом %s." -#: commands/user.c:767 commands/user.c:805 commands/user.c:811 -#: commands/user.c:817 +#: commands/user.c:766 commands/user.c:804 commands/user.c:810 +#: commands/user.c:816 #, c-format msgid "Only roles with the %s attribute may change the %s attribute." msgstr "Изменять атрибут %s могут только роли с атрибутом %s." -#: commands/user.c:783 commands/user.c:1045 +#: commands/user.c:782 commands/user.c:1044 #, c-format msgid "" "Only roles with the %s attribute and the %s option on role \"%s\" may alter " @@ -13893,7 +14429,7 @@ msgstr "" "Изменять эту роль могут только роли с атрибутом %s и привилегией %s для роли " "\"%s\"." -#: commands/user.c:791 +#: commands/user.c:790 #, c-format msgid "" "To change another role's password, the current user must have the %s " @@ -13902,32 +14438,34 @@ msgstr "" "Чтобы сменить пароль другой роли, текущий пользователь должен иметь атрибут " "%s и привилегию %s для этой роли." -#: commands/user.c:826 +#: commands/user.c:825 #, c-format -msgid "Only roles with the %s option on role \"%s\" may add members." -msgstr "Добавлять членов могут только роли с привилегией %s для роли \"%s\"." +msgid "Only roles with the %s option on role \"%s\" may add or drop members." +msgstr "" +"Добавлять или удалять членов могут только роли с привилегией %s для роли " +"\"%s\"." -#: commands/user.c:871 +#: commands/user.c:870 #, c-format -msgid "The bootstrap user must have the %s attribute." -msgstr "Стартовый пользователь должен иметь атрибут %s." +msgid "The bootstrap superuser must have the %s attribute." +msgstr "Стартовый суперпользователь должен иметь атрибут %s." -#: commands/user.c:1076 +#: commands/user.c:1075 #, c-format msgid "permission denied to alter setting" msgstr "нет прав для изменения параметров" -#: commands/user.c:1077 +#: commands/user.c:1076 #, c-format msgid "Only roles with the %s attribute may alter settings globally." msgstr "Изменять параметры глобально могут только роли с атрибутом %s." -#: commands/user.c:1101 commands/user.c:1172 commands/user.c:1178 +#: commands/user.c:1100 commands/user.c:1171 commands/user.c:1177 #, c-format msgid "permission denied to drop role" msgstr "нет прав для удаления роли" -#: commands/user.c:1102 +#: commands/user.c:1101 #, c-format msgid "" "Only roles with the %s attribute and the %s option on the target roles may " @@ -13936,41 +14474,41 @@ msgstr "" "Удалять роли могут только роли с атрибутом %s и с привилегией %s для целевых " "ролей." -#: commands/user.c:1126 +#: commands/user.c:1125 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "использовать специальную роль в DROP ROLE нельзя" -#: commands/user.c:1136 commands/user.c:1358 commands/variable.c:836 -#: commands/variable.c:839 commands/variable.c:923 commands/variable.c:926 -#: utils/adt/acl.c:356 utils/adt/acl.c:376 utils/adt/acl.c:5256 -#: utils/adt/acl.c:5304 utils/adt/acl.c:5332 utils/adt/acl.c:5351 -#: utils/adt/regproc.c:1551 utils/init/miscinit.c:756 +#: 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\" не существует" -#: commands/user.c:1141 +#: commands/user.c:1140 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "роль \"%s\" не существует, пропускается" -#: commands/user.c:1154 commands/user.c:1158 +#: commands/user.c:1153 commands/user.c:1157 #, c-format msgid "current user cannot be dropped" msgstr "пользователь не может удалить сам себя" -#: commands/user.c:1162 +#: commands/user.c:1161 #, c-format msgid "session user cannot be dropped" msgstr "пользователя текущего сеанса нельзя удалить" -#: commands/user.c:1173 +#: commands/user.c:1172 #, c-format msgid "Only roles with the %s attribute may drop roles with the %s attribute." msgstr "Только роли с атрибутом %s могут удалять роли с атрибутом %s." -#: commands/user.c:1179 +#: commands/user.c:1178 #, c-format msgid "" "Only roles with the %s attribute and the %s option on role \"%s\" may drop " @@ -13979,33 +14517,33 @@ msgstr "" "Эту роль могут удалить только роли с атрибутом %s и привилегией %s для роли " "\"%s\"." -#: commands/user.c:1300 +#: commands/user.c:1299 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "роль \"%s\" нельзя удалить, так как есть зависящие от неё объекты" -#: commands/user.c:1374 +#: commands/user.c:1373 #, c-format msgid "session user cannot be renamed" msgstr "пользователя текущего сеанса нельзя переименовать" -#: commands/user.c:1378 +#: commands/user.c:1377 #, c-format msgid "current user cannot be renamed" msgstr "пользователь не может переименовать сам себя" -#: commands/user.c:1422 commands/user.c:1432 +#: commands/user.c:1421 commands/user.c:1431 #, c-format msgid "permission denied to rename role" -msgstr "нет прав на переименование роли" +msgstr "нет прав для переименования роли" -#: commands/user.c:1423 +#: commands/user.c:1422 #, c-format msgid "" "Only roles with the %s attribute may rename roles with the %s attribute." msgstr "Только роли с атрибутом %s могут переименовывать роли с атрибутом %s." -#: commands/user.c:1433 +#: commands/user.c:1432 #, c-format msgid "" "Only roles with the %s attribute and the %s option on role \"%s\" may rename " @@ -14014,43 +14552,43 @@ msgstr "" "Переименовать эту роль могут только роли с атрибутом %s и привилегией %s для " "роли \"%s\"." -#: commands/user.c:1455 +#: commands/user.c:1454 #, c-format msgid "MD5 password cleared because of role rename" msgstr "в результате переименования роли очищен MD5-хеш пароля" -#: commands/user.c:1519 gram.y:1260 +#: commands/user.c:1518 gram.y:1294 #, c-format msgid "unrecognized role option \"%s\"" msgstr "нераспознанный параметр роли \"%s\"" -#: commands/user.c:1524 +#: commands/user.c:1523 #, c-format msgid "unrecognized value for role option \"%s\": \"%s\"" msgstr "нераспознанное значение для параметра роли \"%s\": \"%s\"" -#: commands/user.c:1557 +#: commands/user.c:1556 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "в GRANT/REVOKE ROLE нельзя включать названия столбцов" -#: commands/user.c:1597 +#: commands/user.c:1596 #, c-format msgid "permission denied to drop objects" -msgstr "нет прав на удаление объектов" +msgstr "нет прав для удаления объектов" -#: commands/user.c:1598 +#: commands/user.c:1597 #, c-format msgid "Only roles with privileges of role \"%s\" may drop objects owned by it." msgstr "" "Только роли с правами роли \"%s\" могут удалять принадлежащие ей объекты." -#: commands/user.c:1626 commands/user.c:1637 +#: commands/user.c:1625 commands/user.c:1636 #, c-format msgid "permission denied to reassign objects" msgstr "нет прав для переназначения объектов" -#: commands/user.c:1627 +#: commands/user.c:1626 #, c-format msgid "" "Only roles with privileges of role \"%s\" may reassign objects owned by it." @@ -14058,102 +14596,102 @@ msgstr "" "Только роли с правами роли \"%s\" могут поменять владельца принадлежащих ей " "объектов." -#: commands/user.c:1638 +#: commands/user.c:1637 #, c-format msgid "Only roles with privileges of role \"%s\" may reassign objects to it." msgstr "" "Только роли с правами роли \"%s\" могут назначать её владельцем объектов." -#: commands/user.c:1734 +#: commands/user.c:1733 #, c-format msgid "role \"%s\" cannot be a member of any role" msgstr "роль \"%s\" не может быть членом другой роли" -#: commands/user.c:1747 +#: commands/user.c:1746 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "роль \"%s\" включена в роль \"%s\"" -#: commands/user.c:1787 commands/user.c:1813 +#: commands/user.c:1786 commands/user.c:1812 #, c-format msgid "%s option cannot be granted back to your own grantor" msgstr "привилегию %s нельзя вернуть тому, кто назначил её вам" -#: commands/user.c:1890 +#: commands/user.c:1889 #, c-format msgid "" "role \"%s\" has already been granted membership in role \"%s\" by role \"%s\"" msgstr "роль \"%s\" уже назначена членом роли \"%s\" ролью \"%s\"" -#: commands/user.c:2025 +#: commands/user.c:2024 #, c-format msgid "" "role \"%s\" has not been granted membership in role \"%s\" by role \"%s\"" msgstr "роль \"%s\" не была назначена членом роли \"%s\" ролью \"%s\"" -#: commands/user.c:2125 +#: commands/user.c:2124 #, c-format msgid "role \"%s\" cannot have explicit members" msgstr "роль \"%s\" не может содержать явных членов" -#: commands/user.c:2136 commands/user.c:2159 +#: commands/user.c:2135 commands/user.c:2158 #, c-format msgid "permission denied to grant role \"%s\"" msgstr "нет прав для назначения членства в роли \"%s\"" -#: commands/user.c:2138 +#: commands/user.c:2137 #, c-format msgid "Only roles with the %s attribute may grant roles with the %s attribute." msgstr "" "Только роли с атрибутом %s могут назначать членов в ролях с атрибутов %s." -#: commands/user.c:2143 commands/user.c:2166 +#: commands/user.c:2142 commands/user.c:2165 #, c-format msgid "permission denied to revoke role \"%s\"" msgstr "нет прав для лишения членства в роли \"%s\"" -#: commands/user.c:2145 +#: commands/user.c:2144 #, c-format msgid "" "Only roles with the %s attribute may revoke roles with the %s attribute." msgstr "" "Только роли с атрибутом %s могут лишать членства в ролях с атрибутом %s." -#: commands/user.c:2161 +#: commands/user.c:2160 #, c-format msgid "Only roles with the %s option on role \"%s\" may grant this role." msgstr "" "Только роли с привилегией %s для роли \"%s\" могут назначать членов в ней." -#: commands/user.c:2168 +#: commands/user.c:2167 #, c-format msgid "Only roles with the %s option on role \"%s\" may revoke this role." msgstr "" "Только роли с привилегией %s для роли \"%s\" могут лишать членства в ней." -#: commands/user.c:2248 commands/user.c:2257 +#: commands/user.c:2247 commands/user.c:2256 #, c-format msgid "permission denied to grant privileges as role \"%s\"" msgstr "нет полномочий для назначения прав доступа роли \"%s\"" -#: commands/user.c:2250 +#: commands/user.c:2249 #, c-format msgid "" "Only roles with privileges of role \"%s\" may grant privileges as this role." msgstr "" "Только роли с правами роли \"%s\" могут назначать права от имени этой роли." -#: commands/user.c:2259 +#: commands/user.c:2258 #, c-format msgid "The grantor must have the %s option on role \"%s\"." msgstr "Праводатель должен иметь привилегию %s для роли \"%s\"." -#: commands/user.c:2267 +#: commands/user.c:2266 #, c-format msgid "permission denied to revoke privileges granted by role \"%s\"" msgstr "нет полномочий для отзыва прав доступа, назначенных ролью \"%s\"" -#: commands/user.c:2269 +#: commands/user.c:2268 #, c-format msgid "" "Only roles with privileges of role \"%s\" may revoke privileges granted by " @@ -14161,17 +14699,17 @@ msgid "" msgstr "" "Только роли с правами роли \"%s\" могут отзывать права от имени этой роли." -#: commands/user.c:2492 utils/adt/acl.c:1309 +#: commands/user.c:2491 utils/adt/acl.c:1324 #, c-format msgid "dependent privileges exist" msgstr "существуют зависимые права" -#: commands/user.c:2493 utils/adt/acl.c:1310 +#: commands/user.c:2492 utils/adt/acl.c:1325 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Используйте CASCADE, чтобы отозвать и их." -#: commands/vacuum.c:137 +#: commands/vacuum.c:134 #, c-format msgid "\"vacuum_buffer_usage_limit\" must be 0 or between %d kB and %d kB" msgstr "" @@ -14246,42 +14784,42 @@ msgstr "ONLY_DATABASE_STATS нельзя задавать с другими па msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s нельзя выполнить в ходе VACUUM или ANALYZE" -#: commands/vacuum.c:733 +#: commands/vacuum.c:730 #, c-format msgid "permission denied to vacuum \"%s\", skipping it" msgstr "нет доступа для очистки отношения \"%s\", оно пропускается" -#: commands/vacuum.c:746 +#: commands/vacuum.c:743 #, c-format msgid "permission denied to analyze \"%s\", skipping it" msgstr "нет доступа для анализа отношения \"%s\", оно пропускается" -#: commands/vacuum.c:824 commands/vacuum.c:921 +#: commands/vacuum.c:821 commands/vacuum.c:918 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "очистка \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:829 +#: commands/vacuum.c:826 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "очистка \"%s\" пропускается --- это отношение более не существует" -#: commands/vacuum.c:845 commands/vacuum.c:926 +#: commands/vacuum.c:842 commands/vacuum.c:923 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "анализ \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:850 +#: commands/vacuum.c:847 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "анализ \"%s\" пропускается --- это отношение более не существует" -#: commands/vacuum.c:1161 +#: commands/vacuum.c:1139 #, c-format msgid "cutoff for removing and freezing tuples is far in the past" msgstr "момент отсечки для удаления и замораживания кортежей далеко в прошлом" -#: commands/vacuum.c:1162 commands/vacuum.c:1167 +#: commands/vacuum.c:1140 commands/vacuum.c:1145 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -14293,42 +14831,42 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: commands/vacuum.c:1166 +#: commands/vacuum.c:1144 #, c-format msgid "cutoff for freezing multixacts is far in the past" msgstr "момент отсечки для замораживания мультитранзакций далеко в прошлом" -#: commands/vacuum.c:1912 +#: commands/vacuum.c:1900 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "есть базы данных, которые не очищались на протяжении более чем 2 миллиардов " "транзакций" -#: commands/vacuum.c:1913 +#: commands/vacuum.c:1901 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" "Возможно, вы уже потеряли данные в результате зацикливания ID транзакций." -#: commands/vacuum.c:2082 +#: commands/vacuum.c:2080 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "\"%s\" пропускается --- очищать не таблицы или специальные системные таблицы " "нельзя" -#: commands/vacuum.c:2507 +#: commands/vacuum.c:2512 #, c-format -msgid "scanned index \"%s\" to remove %d row versions" -msgstr "просканирован индекс \"%s\", удалено версий строк: %d" +msgid "scanned index \"%s\" to remove %lld row versions" +msgstr "просканирован индекс \"%s\", удалено версий строк: %lld" -#: commands/vacuum.c:2526 +#: commands/vacuum.c:2531 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "индекс \"%s\" теперь содержит версий строк: %.0f, в страницах: %u" -#: commands/vacuum.c:2530 +#: commands/vacuum.c:2535 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -14340,7 +14878,7 @@ msgstr "" "На данный момент удалено страниц индекса: %u, из них свободны для " "использования: %u." -#: commands/vacuumparallel.c:677 +#: commands/vacuumparallel.c:707 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "" @@ -14355,7 +14893,7 @@ msgstr[2] "" "запущено %d параллельных процессов очистки для очистки индекса " "(планировалось: %d)" -#: commands/vacuumparallel.c:683 +#: commands/vacuumparallel.c:713 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "" @@ -14432,7 +14970,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:1629 +#: commands/variable.c:606 storage/lmgr/predicate.c:1685 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "использовать сериализуемый режим в горячем резерве нельзя" @@ -14467,65 +15005,76 @@ msgstr "Изменить клиентскую кодировку сейчас н #: commands/variable.c:781 #, c-format -msgid "cannot change client_encoding during a parallel operation" -msgstr "изменить клиентскую кодировку во время параллельной операции нельзя" +msgid "cannot change \"client_encoding\" during a parallel operation" +msgstr "" +"изменить параметр \"client_encoding\" во время параллельной операции нельзя" + +#: commands/variable.c:876 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "в доступе для смены объекта авторизации \"%s\" будет отказано" + +#: commands/variable.c:881 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "нет доступа для смены объекта авторизации в сеансе \"%s\"" -#: commands/variable.c:948 +#: commands/variable.c:991 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "нет прав установить роль \"%s\"" -#: commands/variable.c:953 +#: commands/variable.c:996 #, c-format msgid "permission denied to set role \"%s\"" msgstr "нет прав установить роль \"%s\"" -#: commands/variable.c:1153 +#: commands/variable.c:1200 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour не поддерживается в данной сборке" -#: commands/variable.c:1181 +#: commands/variable.c:1228 #, c-format msgid "" -"effective_io_concurrency must be set to 0 on platforms that lack " +"\"effective_io_concurrency\" must be set to 0 on platforms that lack " "posix_fadvise()." msgstr "" -"Значение effective_io_concurrency должно равняться 0 на платформах, где " -"отсутствует lack posix_fadvise()." +"Значение \"effective_io_concurrency\" должно равняться 0 на платформах, где " +"отсутствует posix_fadvise()." -#: commands/variable.c:1194 +#: commands/variable.c:1241 #, c-format msgid "" -"maintenance_io_concurrency must be set to 0 on platforms that lack " +"\"maintenance_io_concurrency\" must be set to 0 on platforms that lack " "posix_fadvise()." msgstr "" -"Значение maintenance_io_concurrency должно равняться 0 на платформах, где " -"отсутствует lack posix_fadvise()." +"Значение \"maintenance_io_concurrency\" должно равняться 0 на платформах, " +"где отсутствует posix_fadvise()." -#: commands/variable.c:1207 +#: commands/variable.c:1254 #, c-format msgid "SSL is not supported by this build" msgstr "SSL не поддерживается в данной сборке" -#: commands/view.c:84 +#: commands/view.c:79 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "" "не удалось определить правило сортировки для столбца представления \"%s\"" -#: commands/view.c:279 commands/view.c:290 +#: commands/view.c:274 commands/view.c:285 #, c-format msgid "cannot drop columns from view" msgstr "удалять столбцы из представления нельзя" -#: commands/view.c:295 +#: commands/view.c:290 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "изменить имя столбца \"%s\" на \"%s\" в представлении нельзя" # skip-rule: space-before-ellipsis -#: commands/view.c:298 +#: commands/view.c:293 #, c-format msgid "" "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." @@ -14533,40 +15082,40 @@ msgstr "" "Чтобы изменить имя столбца представления, выполните ALTER VIEW ... RENAME " "COLUMN ..." -#: commands/view.c:309 +#: commands/view.c:304 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "изменить тип столбца представления \"%s\" с %s на %s нельзя" -#: commands/view.c:323 +#: commands/view.c:318 #, c-format msgid "cannot change collation of view column \"%s\" from \"%s\" to \"%s\"" msgstr "" "изменить правило сортировки для столбца представления \"%s\" с \"%s\" на " "\"%s\" нельзя" -#: commands/view.c:392 +#: commands/view.c:387 #, c-format msgid "views must not contain SELECT INTO" msgstr "представления не должны содержать SELECT INTO" -#: commands/view.c:404 +#: commands/view.c:399 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "представления не должны содержать операторы, изменяющие данные в WITH" -#: commands/view.c:474 +#: commands/view.c:469 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "в CREATE VIEW указано больше имён столбцов, чем самих столбцов" -#: commands/view.c:482 +#: commands/view.c:477 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "" "представления не могут быть нежурналируемыми, так как они нигде не хранятся" -#: commands/view.c:496 +#: commands/view.c:491 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "представление \"%s\" будет создано как временное" @@ -14604,7 +15153,7 @@ msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "" "для курсора \"%s\" не выполняется обновляемое сканирование таблицы \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2498 +#: 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)" @@ -14612,56 +15161,56 @@ msgstr "" "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2510 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2567 #, c-format msgid "no value found for parameter %d" msgstr "не найдено значение параметра %d" -#: executor/execExpr.c:637 executor/execExpr.c:644 executor/execExpr.c:650 -#: executor/execExprInterp.c:4234 executor/execExprInterp.c:4251 -#: executor/execExprInterp.c:4350 executor/nodeModifyTable.c:197 -#: executor/nodeModifyTable.c:208 executor/nodeModifyTable.c:225 -#: executor/nodeModifyTable.c:233 +#: 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:638 executor/nodeModifyTable.c:198 +#: executor/execExpr.c:643 executor/nodeModifyTable.c:204 #, c-format msgid "Query has too many columns." msgstr "Запрос возвращает больше столбцов." -#: executor/execExpr.c:645 executor/nodeModifyTable.c:226 +#: executor/execExpr.c:650 executor/nodeModifyTable.c:232 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" "Запрос выдаёт значение для удалённого столбца (с порядковым номером %d)." -#: executor/execExpr.c:651 executor/execExprInterp.c:4252 -#: executor/nodeModifyTable.c:209 +#: 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 "" "В таблице определён тип %s (номер столбца: %d), а в запросе предполагается " "%s." -#: executor/execExpr.c:1099 parser/parse_agg.c:838 +#: executor/execExpr.c:1104 parser/parse_agg.c:838 #, c-format msgid "window function calls cannot be nested" msgstr "вложенные вызовы оконных функций недопустимы" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1649 #, c-format msgid "target type is not an array" msgstr "целевой тип не является массивом" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1989 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "столбец ROW() имеет тип %s, а должен - %s" -#: executor/execExpr.c:2574 executor/execSRF.c:719 parser/parse_func.c:138 -#: parser/parse_func.c:655 parser/parse_func.c:1032 +#: 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" @@ -14669,60 +15218,60 @@ msgstr[0] "функции нельзя передать больше %d аргу msgstr[1] "функции нельзя передать больше %d аргументов" msgstr[2] "функции нельзя передать больше %d аргументов" -#: executor/execExpr.c:2601 executor/execSRF.c:739 executor/functions.c:1067 -#: utils/adt/jsonfuncs.c:3780 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:3007 parser/parse_node.c:277 parser/parse_node.c:327 +#: 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 "" "к элементам типа %s нельзя обращаться по индексам, так как он это не " "поддерживает" -#: executor/execExpr.c:3135 executor/execExpr.c:3157 +#: executor/execExpr.c:3214 executor/execExpr.c:3236 #, c-format msgid "type %s does not support subscripted assignment" msgstr "тип %s не поддерживает изменение элемента по индексу" -#: executor/execExprInterp.c:1962 +#: executor/execExprInterp.c:2019 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "атрибут %d типа %s был удалён" -#: executor/execExprInterp.c:1968 +#: executor/execExprInterp.c:2025 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "атрибут %d типа %s имеет неправильный тип" -#: executor/execExprInterp.c:1970 executor/execExprInterp.c:3104 -#: executor/execExprInterp.c:3150 +#: 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:2050 utils/adt/expandedrecord.c:99 -#: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1749 -#: utils/cache/typcache.c:1908 utils/cache/typcache.c:2055 +#: 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:2588 +#: executor/execExprInterp.c:2710 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиц такого типа не поддерживается" -#: executor/execExprInterp.c:2801 +#: executor/execExprInterp.c:2923 #, c-format msgid "cannot merge incompatible arrays" msgstr "не удалось объединить несовместимые массивы" -#: executor/execExprInterp.c:2802 +#: executor/execExprInterp.c:2924 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -14731,16 +15280,15 @@ msgstr "" "Массив с типом элементов %s нельзя включить в конструкцию ARRAY с типом " "элементов %s." -#: executor/execExprInterp.c:2823 utils/adt/arrayfuncs.c:266 -#: utils/adt/arrayfuncs.c:576 utils/adt/arrayfuncs.c:1330 -#: utils/adt/arrayfuncs.c:3532 utils/adt/arrayfuncs.c:5616 -#: utils/adt/arrayfuncs.c:6133 utils/adt/arraysubs.c:150 +#: 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:2843 executor/execExprInterp.c:2878 +#: executor/execExprInterp.c:2965 executor/execExprInterp.c:3000 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" @@ -14748,35 +15296,53 @@ msgstr "" "для многомерных массивов должны задаваться выражения с соответствующими " "размерностями" -#: executor/execExprInterp.c:2855 utils/adt/array_expanded.c:274 -#: utils/adt/arrayfuncs.c:960 utils/adt/arrayfuncs.c:1569 -#: utils/adt/arrayfuncs.c:2377 utils/adt/arrayfuncs.c:2392 -#: utils/adt/arrayfuncs.c:2654 utils/adt/arrayfuncs.c:2670 -#: utils/adt/arrayfuncs.c:2978 utils/adt/arrayfuncs.c:2993 -#: utils/adt/arrayfuncs.c:3334 utils/adt/arrayfuncs.c:3562 -#: utils/adt/arrayfuncs.c:6225 utils/adt/arrayfuncs.c:6566 -#: utils/adt/arrayutils.c:98 utils/adt/arrayutils.c:107 -#: utils/adt/arrayutils.c:114 +#: 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:3103 executor/execExprInterp.c:3149 +#: executor/execExprInterp.c:3225 executor/execExprInterp.c:3271 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d имеет неверный тип" -#: executor/execExprInterp.c:3735 utils/adt/domains.c:155 +#: executor/execExprInterp.c:3857 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускает значения null" -#: executor/execExprInterp.c:3750 utils/adt/domains.c:193 +#: 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:4235 +#: executor/execExprInterp.c:4447 +#, c-format +msgid "no SQL/JSON item found for specified path of column \"%s\"" +msgstr "по заданному для столбца \"%s\" пути не найден элемент SQL/JSON" + +#: executor/execExprInterp.c:4452 +#, 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 +#, 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." @@ -14784,14 +15350,14 @@ msgstr[0] "Строка таблицы содержит %d атрибут, а в msgstr[1] "Строка таблицы содержит %d атрибута, а в запросе ожидается %d." msgstr[2] "Строка таблицы содержит %d атрибутов, а в запросе ожидается %d." -#: executor/execExprInterp.c:4351 executor/execSRF.c:978 +#: executor/execExprInterp.c:4969 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" "Несоответствие параметров физического хранения удалённого атрибута (под " "номером %d)." -#: executor/execIndexing.c:588 +#: executor/execIndexing.c:593 #, c-format msgid "" "ON CONFLICT does not support deferrable unique constraints/exclusion " @@ -14800,32 +15366,32 @@ msgstr "" "ON CONFLICT не поддерживает откладываемые ограничения уникальности/" "ограничения-исключения в качестве определяющего индекса" -#: executor/execIndexing.c:865 +#: executor/execIndexing.c:870 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "не удалось создать ограничение-исключение \"%s\"" -#: executor/execIndexing.c:868 +#: executor/execIndexing.c:873 #, c-format msgid "Key %s conflicts with key %s." msgstr "Ключ %s конфликтует с ключом %s." -#: executor/execIndexing.c:870 +#: executor/execIndexing.c:875 #, c-format msgid "Key conflicts exist." msgstr "Обнаружен конфликт ключей." -#: executor/execIndexing.c:876 +#: executor/execIndexing.c:881 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "конфликтующее значение ключа нарушает ограничение-исключение \"%s\"" -#: executor/execIndexing.c:879 +#: executor/execIndexing.c:884 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "Ключ %s конфликтует с существующим ключом %s." -#: executor/execIndexing.c:881 +#: executor/execIndexing.c:886 #, c-format msgid "Key conflicts with existing key." msgstr "Ключ конфликтует с уже существующим." @@ -14840,167 +15406,119 @@ msgstr "последовательность \"%s\" изменить нельз msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1063 rewrite/rewriteHandler.c:3079 -#: rewrite/rewriteHandler.c:3966 -#, c-format -msgid "cannot insert into view \"%s\"" -msgstr "вставить данные в представление \"%s\" нельзя" - -#: executor/execMain.c:1065 rewrite/rewriteHandler.c:3082 -#: rewrite/rewriteHandler.c:3969 -#, c-format -msgid "" -"To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " -"an unconditional ON INSERT DO INSTEAD rule." -msgstr "" -"Чтобы представление допускало добавление данных, установите триггер INSTEAD " -"OF INSERT или безусловное правило ON INSERT DO INSTEAD." - -#: executor/execMain.c:1071 rewrite/rewriteHandler.c:3087 -#: rewrite/rewriteHandler.c:3974 -#, c-format -msgid "cannot update view \"%s\"" -msgstr "изменить данные в представлении \"%s\" нельзя" - -#: executor/execMain.c:1073 rewrite/rewriteHandler.c:3090 -#: rewrite/rewriteHandler.c:3977 -#, c-format -msgid "" -"To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " -"unconditional ON UPDATE DO INSTEAD rule." -msgstr "" -"Чтобы представление допускало изменение данных, установите триггер INSTEAD " -"OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." - -#: executor/execMain.c:1079 rewrite/rewriteHandler.c:3095 -#: rewrite/rewriteHandler.c:3982 -#, c-format -msgid "cannot delete from view \"%s\"" -msgstr "удалить данные из представления \"%s\" нельзя" - -#: executor/execMain.c:1081 rewrite/rewriteHandler.c:3098 -#: rewrite/rewriteHandler.c:3985 -#, c-format -msgid "" -"To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " -"unconditional ON DELETE DO INSTEAD rule." -msgstr "" -"Чтобы представление допускало удаление данных, установите триггер INSTEAD OF " -"DELETE или безусловное правило ON DELETE DO INSTEAD." - -#: executor/execMain.c:1092 +#: executor/execMain.c:1064 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "изменить материализованное представление \"%s\" нельзя" -#: executor/execMain.c:1104 +#: executor/execMain.c:1076 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "вставлять данные в стороннюю таблицу \"%s\" нельзя" -#: executor/execMain.c:1110 +#: executor/execMain.c:1082 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "сторонняя таблица \"%s\" не допускает добавления" -#: executor/execMain.c:1117 +#: executor/execMain.c:1089 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "изменять данные в сторонней таблице \"%s\"" -#: executor/execMain.c:1123 +#: executor/execMain.c:1095 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "сторонняя таблица \"%s\" не допускает изменения" -#: executor/execMain.c:1130 +#: executor/execMain.c:1102 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "удалять данные из сторонней таблицы \"%s\" нельзя" -#: executor/execMain.c:1136 +#: executor/execMain.c:1108 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "сторонняя таблица \"%s\" не допускает удаления" -#: executor/execMain.c:1147 +#: executor/execMain.c:1119 #, c-format msgid "cannot change relation \"%s\"" msgstr "отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1174 +#: executor/execMain.c:1146 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "блокировать строки в последовательности \"%s\" нельзя" -#: executor/execMain.c:1181 +#: executor/execMain.c:1153 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "блокировать строки в TOAST-отношении \"%s\" нельзя" -#: executor/execMain.c:1188 +#: executor/execMain.c:1160 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "блокировать строки в представлении \"%s\" нельзя" -#: executor/execMain.c:1196 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокировать строки в материализованном представлении \"%s\" нельзя" -#: executor/execMain.c:1205 executor/execMain.c:2708 +#: executor/execMain.c:1177 executor/execMain.c:2687 #: executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "блокировать строки в сторонней таблице \"%s\" нельзя" -#: executor/execMain.c:1211 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "блокировать строки в отношении \"%s\" нельзя" -#: executor/execMain.c:1922 +#: executor/execMain.c:1901 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "новая строка в отношении \"%s\" нарушает ограничение секции" -#: executor/execMain.c:1924 executor/execMain.c:2008 executor/execMain.c:2059 -#: executor/execMain.c:2169 +#: 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:2005 +#: executor/execMain.c:1984 #, c-format msgid "" "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "" "значение NULL в столбце \"%s\" отношения \"%s\" нарушает ограничение NOT NULL" -#: executor/execMain.c:2057 +#: executor/execMain.c:2036 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новая строка в отношении \"%s\" нарушает ограничение-проверку \"%s\"" -#: executor/execMain.c:2167 +#: executor/execMain.c:2146 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "новая строка нарушает ограничение-проверку для представления \"%s\"" -#: executor/execMain.c:2177 +#: executor/execMain.c:2156 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" для таблицы " "\"%s\"" -#: executor/execMain.c:2182 +#: executor/execMain.c:2161 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк для таблицы \"%s\"" -#: executor/execMain.c:2190 +#: executor/execMain.c:2169 #, c-format msgid "" "target row violates row-level security policy \"%s\" (USING expression) for " @@ -15009,7 +15527,7 @@ msgstr "" "целевая строка нарушает политику защиты на уровне строк \"%s\" (выражение " "USING) для таблицы \"%s\"" -#: executor/execMain.c:2195 +#: executor/execMain.c:2174 #, c-format msgid "" "target row violates row-level security policy (USING expression) for table " @@ -15018,7 +15536,7 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк (выражение USING) для " "таблицы \"%s\"" -#: executor/execMain.c:2202 +#: executor/execMain.c:2181 #, c-format msgid "" "new row violates row-level security policy \"%s\" (USING expression) for " @@ -15027,7 +15545,7 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" (выражение " "USING) для таблицы \"%s\"" -#: executor/execMain.c:2207 +#: executor/execMain.c:2186 #, c-format msgid "" "new row violates row-level security policy (USING expression) for table " @@ -15036,17 +15554,17 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк (выражение USING) для " "таблицы \"%s\"" -#: executor/execPartition.c:330 +#: executor/execPartition.c:327 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "для строки не найдена секция в отношении \"%s\"" -#: executor/execPartition.c:333 +#: executor/execPartition.c:330 #, c-format msgid "Partition key of the failing row contains %s." msgstr "Ключ секционирования для неподходящей строки содержит %s." -#: executor/execReplication.c:231 executor/execReplication.c:415 +#: executor/execReplication.c:272 executor/execReplication.c:456 #, c-format msgid "" "tuple to be locked was already moved to another partition due to concurrent " @@ -15055,31 +15573,31 @@ msgstr "" "кортеж, подлежащий блокировке, был перемещён в другую секцию в результате " "параллельного изменения; следует повторная попытка" -#: executor/execReplication.c:235 executor/execReplication.c:419 +#: executor/execReplication.c:276 executor/execReplication.c:460 #, c-format msgid "concurrent update, retrying" msgstr "параллельное изменение; следует повторная попытка" -#: executor/execReplication.c:241 executor/execReplication.c:425 +#: executor/execReplication.c:282 executor/execReplication.c:466 #, c-format msgid "concurrent delete, retrying" msgstr "параллельное удаление; следует повторная попытка" -#: executor/execReplication.c:311 parser/parse_cte.c:308 -#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:1348 -#: utils/adt/array_userfuncs.c:1491 utils/adt/arrayfuncs.c:3881 -#: utils/adt/arrayfuncs.c:4436 utils/adt/arrayfuncs.c:6446 -#: utils/adt/rowtypes.c:1230 +#: 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:642 executor/execReplication.c:648 +#: executor/execReplication.c:687 executor/execReplication.c:693 #, c-format msgid "cannot update table \"%s\"" msgstr "изменять данные в таблице \"%s\" нельзя" -#: executor/execReplication.c:644 executor/execReplication.c:656 +#: executor/execReplication.c:689 executor/execReplication.c:701 #, c-format msgid "" "Column used in the publication WHERE expression is not part of the replica " @@ -15088,7 +15606,7 @@ msgstr "" "Столбец, фигурирующий в выражении WHERE публикации, не входит в " "идентификатор реплики." -#: executor/execReplication.c:650 executor/execReplication.c:662 +#: executor/execReplication.c:695 executor/execReplication.c:707 #, c-format msgid "" "Column list used by the publication does not cover the replica identity." @@ -15096,12 +15614,12 @@ msgstr "" "Список столбцов, используемых в публикации, не покрывает идентификатор " "реплики." -#: executor/execReplication.c:654 executor/execReplication.c:660 +#: executor/execReplication.c:699 executor/execReplication.c:705 #, c-format msgid "cannot delete from table \"%s\"" msgstr "удалять данные из таблицы \"%s\" нельзя" -#: executor/execReplication.c:680 +#: executor/execReplication.c:725 #, c-format msgid "" "cannot update table \"%s\" because it does not have a replica identity and " @@ -15110,14 +15628,14 @@ msgstr "" "изменение в таблице \"%s\" невозможно, так как в ней отсутствует " "идентификатор реплики, но она публикует изменения" -#: executor/execReplication.c:682 +#: executor/execReplication.c:727 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "" "Чтобы эта таблица поддерживала изменение, установите REPLICA IDENTITY, " "выполнив ALTER TABLE." -#: executor/execReplication.c:686 +#: executor/execReplication.c:731 #, c-format msgid "" "cannot delete from table \"%s\" because it does not have a replica identity " @@ -15126,7 +15644,7 @@ msgstr "" "удаление из таблицы \"%s\" невозможно, так как в ней отсутствует " "идентификатор реплики, но она публикует удаления" -#: executor/execReplication.c:688 +#: executor/execReplication.c:733 #, c-format msgid "" "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." @@ -15134,34 +15652,34 @@ msgstr "" "Чтобы эта таблица поддерживала удаление, установите REPLICA IDENTITY, " "выполнив ALTER TABLE." -#: executor/execReplication.c:704 +#: executor/execReplication.c:749 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "" "в качестве целевого отношения для логической репликации нельзя использовать " "\"%s.%s\"" -#: executor/execSRF.c:316 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "строки, возвращённые функцией, имеют разные типы" -#: executor/execSRF.c:366 +#: executor/execSRF.c:365 #, c-format msgid "table-function protocol for value-per-call mode was not followed" msgstr "нарушение протокола табличной функции в режиме вызов-значение" -#: executor/execSRF.c:374 executor/execSRF.c:668 +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "нарушение протокола табличной функции в режиме материализации" -#: executor/execSRF.c:381 executor/execSRF.c:686 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "нераспознанный режим возврата табличной функции: %d" -#: executor/execSRF.c:895 +#: executor/execSRF.c:894 #, c-format msgid "" "function returning setof record called in context that cannot accept type " @@ -15170,12 +15688,12 @@ msgstr "" "функция, возвращающая запись SET OF, вызвана в контексте, не допускающем " "этот тип" -#: executor/execSRF.c:951 executor/execSRF.c:967 executor/execSRF.c:977 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "тип результат функции отличается от типа строки-результата запроса" -#: executor/execSRF.c:952 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." @@ -15185,23 +15703,33 @@ msgstr[1] "" msgstr[2] "" "Возвращённая строка содержит %d атрибутов, но запрос предполагает %d." -#: executor/execSRF.c:968 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Возвращён тип %s (номер столбца: %d), а в запросе предполагается %s." -#: executor/execTuples.c:146 executor/execTuples.c:353 -#: executor/execTuples.c:521 executor/execTuples.c:713 +#: executor/execTuples.c:147 executor/execTuples.c:368 +#: executor/execTuples.c:563 executor/execTuples.c:772 #, c-format msgid "cannot retrieve a system column in this context" msgstr "системный столбец нельзя получить в данном контексте" -#: executor/execUtils.c:744 +#: executor/execTuples.c:163 executor/execTuples.c:580 +#, c-format +msgid "don't have transaction information for this type of tuple" +msgstr "для этого типа кортежей транзакционная информация отсутствует" + +#: executor/execTuples.c:390 executor/execTuples.c:794 +#, c-format +msgid "don't have a storage tuple in this context" +msgstr "в данном контексте хранимый кортеж отсутствует" + +#: executor/execUtils.c:713 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "материализованное представление \"%s\" не было наполнено" -#: executor/execUtils.c:746 +#: executor/execUtils.c:715 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Примените команду REFRESH MATERIALIZED VIEW." @@ -15211,119 +15739,120 @@ msgstr "Примените команду REFRESH MATERIALIZED VIEW." 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:1742 executor/spi.c:2635 +#: 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 нельзя использовать в не изменчивой (volatile) функции" -#: 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:1710 executor/functions.c:1748 -#: executor/functions.c:1762 executor/functions.c:1857 -#: executor/functions.c:1890 executor/functions.c:1904 +#: 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:1712 +#: executor/functions.c:1700 #, c-format msgid "" -"Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." -msgstr "" -"Последним оператором в функции должен быть SELECT или INSERT/UPDATE/DELETE " +"Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE " "RETURNING." +msgstr "" +"Последним оператором в функции должен быть SELECT или INSERT/UPDATE/DELETE/" +"MERGE RETURNING." -#: executor/functions.c:1750 +#: executor/functions.c:1738 #, c-format msgid "Final statement must return exactly one column." msgstr "Последний оператор должен возвращать один столбец." -#: executor/functions.c:1764 +#: executor/functions.c:1752 #, c-format msgid "Actual return type is %s." msgstr "Фактический тип возврата: %s." -#: executor/functions.c:1859 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns too many columns." msgstr "Последний оператор возвращает слишком много столбцов." -#: executor/functions.c:1892 +#: executor/functions.c:1880 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Последний оператор возвращает %s вместо %s для столбца %d." -#: executor/functions.c:1906 +#: executor/functions.c:1894 #, c-format msgid "Final statement returns too few columns." msgstr "Последний оператор возвращает слишком мало столбцов." -#: executor/functions.c:1934 +#: executor/functions.c:1922 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "для SQL-функций тип возврата %s не поддерживается" -#: executor/nodeAgg.c:3937 executor/nodeWindowAgg.c:2993 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2975 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "" "агрегатная функция %u должна иметь совместимые входной и переходный типы" -#: executor/nodeAgg.c:3967 parser/parse_agg.c:680 parser/parse_agg.c:708 +#: executor/nodeAgg.c:3966 parser/parse_agg.c:680 parser/parse_agg.c:708 #, c-format msgid "aggregate function calls cannot be nested" msgstr "вложенные вызовы агрегатных функций недопустимы" -#: executor/nodeCustom.c:154 executor/nodeCustom.c:165 +#: executor/nodeCustom.c:144 executor/nodeCustom.c:155 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "нестандартное сканирование \"%s\" не поддерживает MarkPos" -#: executor/nodeHashjoin.c:1143 executor/nodeHashjoin.c:1173 +#: executor/nodeHashjoin.c:1131 executor/nodeHashjoin.c:1161 #, c-format msgid "could not rewind hash-join temporary file" msgstr "не удалось переместиться во временном файле хеш-соединения" -#: executor/nodeIndexonlyscan.c:240 +#: executor/nodeIndexonlyscan.c:239 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "" "функции неточного расстояния не поддерживаются в сканировании только по " "индексу" -#: executor/nodeLimit.c:374 +#: executor/nodeLimit.c:373 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET не может быть отрицательным" -#: executor/nodeLimit.c:400 +#: executor/nodeLimit.c:399 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT не может быть отрицательным" @@ -15341,12 +15870,12 @@ msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "" "FULL JOIN поддерживается только с условиями, допускающими соединение слиянием" -#: executor/nodeModifyTable.c:234 +#: executor/nodeModifyTable.c:240 #, c-format msgid "Query has too few columns." msgstr "Запрос возвращает меньше столбцов." -#: executor/nodeModifyTable.c:1534 executor/nodeModifyTable.c:1608 +#: executor/nodeModifyTable.c:1540 executor/nodeModifyTable.c:1614 #, c-format msgid "" "tuple to be deleted was already modified by an operation triggered by the " @@ -15355,12 +15884,12 @@ msgstr "" "кортеж, который должен быть удалён, уже модифицирован в операции, вызванной " "текущей командой" -#: executor/nodeModifyTable.c:1763 +#: executor/nodeModifyTable.c:1769 #, c-format msgid "invalid ON UPDATE specification" msgstr "неверное указание ON UPDATE" -#: executor/nodeModifyTable.c:1764 +#: executor/nodeModifyTable.c:1770 #, c-format msgid "" "The result tuple would appear in a different partition than the original " @@ -15369,7 +15898,7 @@ msgstr "" "Результирующий кортеж окажется перемещённым из секции исходного кортежа в " "другую." -#: executor/nodeModifyTable.c:2223 +#: executor/nodeModifyTable.c:2226 #, c-format msgid "" "cannot move tuple across partitions when a non-root ancestor of the source " @@ -15378,26 +15907,26 @@ msgstr "" "нельзя переместить кортеж между секциями, когда внешний ключ непосредственно " "ссылается на предка исходной секции, который не является корнем иерархии" -#: executor/nodeModifyTable.c:2224 +#: executor/nodeModifyTable.c:2227 #, c-format msgid "" "A foreign key points to ancestor \"%s\" but not the root ancestor \"%s\"." msgstr "" "Внешний ключ ссылается на предка \"%s\", а не на корневого предка \"%s\"." -#: executor/nodeModifyTable.c:2227 +#: 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:2573 executor/nodeModifyTable.c:2996 -#: executor/nodeModifyTable.c:3123 +#: 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:2575 +#: executor/nodeModifyTable.c:2598 #, c-format msgid "" "Ensure that no rows proposed for insertion within the same command have " @@ -15406,7 +15935,7 @@ msgstr "" "Проверьте, не содержат ли строки, которые должна добавить команда, " "дублирующиеся значения, подпадающие под ограничения." -#: executor/nodeModifyTable.c:2989 executor/nodeModifyTable.c:3116 +#: executor/nodeModifyTable.c:3131 executor/nodeModifyTable.c:3301 #, c-format msgid "" "tuple to be updated or deleted was already modified by an operation " @@ -15415,28 +15944,28 @@ msgstr "" "кортеж, который должен быть изменён или удалён, уже модифицирован в " "операции, вызванной текущей командой" -#: executor/nodeModifyTable.c:2998 executor/nodeModifyTable.c:3125 +#: 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:3080 +#: executor/nodeModifyTable.c:3209 #, c-format msgid "" -"tuple to be deleted was already moved to another partition due to concurrent " +"tuple to be merged was already moved to another partition due to concurrent " "update" msgstr "" -"кортеж, подлежащий удалению, был перемещён в другую секцию в результате " +"кортеж, подлежащий объединению, был перемещён в другую секцию в результате " "параллельного изменения" -#: executor/nodeSamplescan.c:260 +#: executor/nodeSamplescan.c:244 #, c-format msgid "TABLESAMPLE parameter cannot be null" msgstr "параметр TABLESAMPLE не может быть NULL" -#: executor/nodeSamplescan.c:272 +#: executor/nodeSamplescan.c:256 #, c-format msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "параметр TABLESAMPLE REPEATABLE не может быть NULL" @@ -15447,7 +15976,7 @@ msgstr "параметр TABLESAMPLE REPEATABLE не может быть NULL" msgid "more than one row returned by a subquery used as an expression" msgstr "подзапрос в выражении вернул больше одной строки" -#: executor/nodeTableFuncscan.c:375 +#: executor/nodeTableFuncscan.c:370 #, c-format msgid "namespace URI must not be null" msgstr "URI пространства имён должен быть не NULL" @@ -15457,17 +15986,17 @@ msgstr "URI пространства имён должен быть не NULL" msgid "row filter expression must not be null" msgstr "выражение отбора строк должно быть не NULL" -#: executor/nodeTableFuncscan.c:415 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "column filter expression must not be null" msgstr "выражение отбора столбца должно быть не NULL" -#: executor/nodeTableFuncscan.c:416 +#: executor/nodeTableFuncscan.c:417 #, c-format msgid "Filter for column \"%s\" is null." msgstr "Для столбца \"%s\" задано выражение NULL." -#: executor/nodeTableFuncscan.c:506 +#: executor/nodeTableFuncscan.c:507 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "в столбце \"%s\" не допускается NULL" @@ -15497,86 +16026,86 @@ msgstr "смещение конца рамки не может быть NULL" msgid "frame ending offset must not be negative" msgstr "смещение конца рамки не может быть отрицательным" -#: executor/nodeWindowAgg.c:2909 +#: executor/nodeWindowAgg.c:2891 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "" "агрегатная функция %s не поддерживает использование в качестве оконной " "функции" -#: executor/spi.c:242 executor/spi.c:342 +#: executor/spi.c:241 executor/spi.c:341 #, c-format msgid "invalid transaction termination" msgstr "неверное завершение транзакции" -#: executor/spi.c:257 +#: executor/spi.c:256 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "фиксировать транзакцию при наличии активных подтранзакций нельзя" -#: executor/spi.c:348 +#: executor/spi.c:347 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "откатить транзакцию при наличии активных подтранзакций нельзя" -#: executor/spi.c:472 +#: executor/spi.c:471 #, c-format msgid "transaction left non-empty SPI stack" msgstr "после транзакции остался непустой стек SPI" -#: executor/spi.c:473 executor/spi.c:533 +#: executor/spi.c:472 executor/spi.c:532 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Проверьте наличие вызова \"SPI_finish\"." -#: executor/spi.c:532 +#: executor/spi.c:531 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "после подтранзакции остался непустой стек SPI" -#: executor/spi.c:1600 +#: 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:1610 +#: executor/spi.c:1612 #, c-format msgid "cannot open %s query as cursor" msgstr "не удалось открыть запрос %s как курсор" -#: executor/spi.c:1716 +#: 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:1717 parser/analyze.c:2923 +#: executor/spi.c:1719 parser/analyze.c:2928 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Прокручиваемые курсоры должны быть READ ONLY." -#: executor/spi.c:2474 +#: 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:2548 +#: executor/spi.c:2570 #, c-format msgid "%s query does not return tuples" msgstr "запрос %s не возвращает кортежи" -#: executor/spi.c:2963 +#: executor/spi.c:2987 #, c-format msgid "SQL expression \"%s\"" msgstr "SQL-выражение \"%s\"" -#: executor/spi.c:2968 +#: executor/spi.c:2992 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "присваивание PL/pgSQL \"%s\"" -#: executor/spi.c:2971 +#: executor/spi.c:2995 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-оператор: \"%s\"" @@ -15586,28 +16115,34 @@ msgstr "SQL-оператор: \"%s\"" msgid "could not send tuple to shared-memory queue" msgstr "не удалось передать кортеж в очередь в разделяемой памяти" -#: foreign/foreign.c:222 +#: foreign/foreign.c:225 +#, c-format +msgid "user mapping not found for user \"%s\", server \"%s\"" +msgstr "сопоставление для пользователя \"%s\", сервера \"%s\" не найдено" + +#: foreign/foreign.c:336 optimizer/plan/createplan.c:7153 +#: optimizer/util/plancat.c:540 #, c-format -msgid "user mapping not found for \"%s\"" -msgstr "сопоставление пользователя для \"%s\" не найдено" +msgid "access to non-system foreign table is restricted" +msgstr "доступ к несистемным сторонним таблицам ограничен" -#: foreign/foreign.c:647 storage/file/fd.c:3931 +#: foreign/foreign.c:660 #, c-format msgid "invalid option \"%s\"" msgstr "неверный параметр \"%s\"" -#: foreign/foreign.c:649 +#: foreign/foreign.c:662 #, c-format msgid "Perhaps you meant the option \"%s\"." msgstr "Возможно, предполагался параметр \"%s\"." -#: foreign/foreign.c:651 +#: foreign/foreign.c:664 #, c-format msgid "There are no valid options in this context." msgstr "В данном контексте недопустимы никакие параметры." -#: lib/dshash.c:254 utils/mmgr/dsa.c:715 utils/mmgr/dsa.c:737 -#: utils/mmgr/dsa.c:818 +#: lib/dshash.c:254 utils/mmgr/dsa.c:708 utils/mmgr/dsa.c:730 +#: utils/mmgr/dsa.c:811 #, c-format msgid "Failed on DSA request of size %zu." msgstr "Ошибка при запросе памяти DSA (%zu Б)." @@ -15617,77 +16152,77 @@ msgstr "Ошибка при запросе памяти DSA (%zu Б)." msgid "expected SASL response, got message type %d" msgstr "ожидался ответ SASL, но получено сообщение %d" -#: libpq/auth-scram.c:270 +#: libpq/auth-scram.c:263 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "клиент выбрал неверный механизм аутентификации SASL" -#: libpq/auth-scram.c:294 libpq/auth-scram.c:543 libpq/auth-scram.c:554 +#: libpq/auth-scram.c:287 libpq/auth-scram.c:536 libpq/auth-scram.c:547 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "неверная запись секрета SCRAM для пользователя \"%s\"" -#: libpq/auth-scram.c:305 +#: libpq/auth-scram.c:298 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "Для пользователя \"%s\" нет подходящей записи секрета SCRAM." -#: libpq/auth-scram.c:385 libpq/auth-scram.c:390 libpq/auth-scram.c:744 -#: libpq/auth-scram.c:752 libpq/auth-scram.c:857 libpq/auth-scram.c:870 -#: libpq/auth-scram.c:880 libpq/auth-scram.c:988 libpq/auth-scram.c:995 -#: libpq/auth-scram.c:1010 libpq/auth-scram.c:1025 libpq/auth-scram.c:1039 -#: libpq/auth-scram.c:1057 libpq/auth-scram.c:1072 libpq/auth-scram.c:1386 -#: libpq/auth-scram.c:1394 +#: libpq/auth-scram.c:378 libpq/auth-scram.c:383 libpq/auth-scram.c:737 +#: libpq/auth-scram.c:745 libpq/auth-scram.c:850 libpq/auth-scram.c:863 +#: libpq/auth-scram.c:873 libpq/auth-scram.c:981 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1003 libpq/auth-scram.c:1018 libpq/auth-scram.c:1032 +#: libpq/auth-scram.c:1050 libpq/auth-scram.c:1065 libpq/auth-scram.c:1379 +#: libpq/auth-scram.c:1387 #, c-format msgid "malformed SCRAM message" msgstr "неправильное сообщение SCRAM" -#: libpq/auth-scram.c:386 +#: libpq/auth-scram.c:379 #, c-format msgid "The message is empty." msgstr "Сообщение пустое." -#: libpq/auth-scram.c:391 +#: libpq/auth-scram.c:384 #, c-format msgid "Message length does not match input length." msgstr "Длина сообщения не соответствует входной длине." -#: libpq/auth-scram.c:423 +#: libpq/auth-scram.c:416 #, c-format msgid "invalid SCRAM response" msgstr "неверный ответ SCRAM" -#: libpq/auth-scram.c:424 +#: libpq/auth-scram.c:417 #, c-format msgid "Nonce does not match." msgstr "Разовый код не совпадает." -#: libpq/auth-scram.c:500 +#: libpq/auth-scram.c:493 #, c-format msgid "could not generate random salt" msgstr "не удалось сгенерировать случайную соль" -#: libpq/auth-scram.c:745 +#: libpq/auth-scram.c:738 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "Ожидался атрибут \"%c\", но обнаружено \"%s\"." -#: libpq/auth-scram.c:753 libpq/auth-scram.c:881 +#: libpq/auth-scram.c:746 libpq/auth-scram.c:874 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Ожидался символ \"=\" для атрибута \"%c\"." -#: libpq/auth-scram.c:858 +#: libpq/auth-scram.c:851 #, c-format msgid "Attribute expected, but found end of string." msgstr "Ожидался атрибут, но обнаружен конец строки." -#: libpq/auth-scram.c:871 +#: libpq/auth-scram.c:864 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "Ожидался атрибут, но обнаружен неправильный символ \"%s\"." -#: libpq/auth-scram.c:989 libpq/auth-scram.c:1011 +#: libpq/auth-scram.c:982 libpq/auth-scram.c:1004 #, c-format msgid "" "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not " @@ -15696,17 +16231,17 @@ msgstr "" "Клиент выбрал алгоритм SCRAM-SHA-256-PLUS, но в сообщении SCRAM отсутствуют " "данные связывания каналов." -#: libpq/auth-scram.c:996 libpq/auth-scram.c:1026 +#: libpq/auth-scram.c:989 libpq/auth-scram.c:1019 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "Ожидалась запятая, но обнаружен символ \"%s\"." -#: libpq/auth-scram.c:1017 +#: libpq/auth-scram.c:1010 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "Ошибка согласования связывания каналов SCRAM" -#: libpq/auth-scram.c:1018 +#: libpq/auth-scram.c:1011 #, c-format msgid "" "The client supports SCRAM channel binding but thinks the server does not. " @@ -15715,7 +16250,7 @@ msgstr "" "Клиент поддерживает связывание каналов SCRAM, но полагает, что оно не " "поддерживается сервером. Однако сервер тоже поддерживает связывание каналов." -#: libpq/auth-scram.c:1040 +#: libpq/auth-scram.c:1033 #, c-format msgid "" "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM " @@ -15724,155 +16259,155 @@ msgstr "" "Клиент выбрал алгоритм SCRAM-SHA-256 без связывания каналов, но сообщение " "SCRAM содержит данные связывания каналов." -#: libpq/auth-scram.c:1051 +#: libpq/auth-scram.c:1044 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "неподдерживаемый тип связывания каналов SCRAM \"%s\"" -#: libpq/auth-scram.c:1058 +#: libpq/auth-scram.c:1051 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "Неожиданный флаг связывания каналов \"%s\"." -#: libpq/auth-scram.c:1068 +#: libpq/auth-scram.c:1061 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "клиент передал идентификатор для авторизации, но это не поддерживается" -#: libpq/auth-scram.c:1073 +#: libpq/auth-scram.c:1066 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "Неожиданный атрибут \"%s\" в первом сообщении клиента." -#: libpq/auth-scram.c:1089 +#: libpq/auth-scram.c:1082 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "клиенту требуется неподдерживаемое расширение SCRAM" -#: libpq/auth-scram.c:1103 +#: libpq/auth-scram.c:1096 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "непечатаемые символы в разовом коде SCRAM" -#: libpq/auth-scram.c:1234 +#: libpq/auth-scram.c:1227 #, c-format msgid "could not generate random nonce" msgstr "не удалось сгенерировать разовый код" -#: libpq/auth-scram.c:1244 +#: libpq/auth-scram.c:1237 #, c-format msgid "could not encode random nonce" msgstr "не удалось оформить разовый код" -#: libpq/auth-scram.c:1350 +#: libpq/auth-scram.c:1343 #, c-format msgid "SCRAM channel binding check failed" msgstr "ошибка проверки связывания каналов SCRAM" -#: libpq/auth-scram.c:1368 +#: libpq/auth-scram.c:1361 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "" "неожиданный атрибут связывания каналов в последнем сообщении клиента SCRAM" -#: libpq/auth-scram.c:1387 +#: libpq/auth-scram.c:1380 #, c-format msgid "Malformed proof in client-final-message." msgstr "Некорректное подтверждение в последнем сообщении клиента." -#: libpq/auth-scram.c:1395 +#: libpq/auth-scram.c:1388 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "Мусор в конце последнего сообщения клиента." -#: libpq/auth.c:271 +#: libpq/auth.c:269 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "" "пользователь \"%s\" не прошёл проверку подлинности: не разрешённый компьютер" -#: libpq/auth.c:274 +#: libpq/auth.c:272 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (\"trust\")" -#: libpq/auth.c:277 +#: libpq/auth.c:275 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (Ident)" -#: libpq/auth.c:280 +#: libpq/auth.c:278 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (Peer)" -#: libpq/auth.c:285 +#: libpq/auth.c:283 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (по паролю)" -#: libpq/auth.c:290 +#: libpq/auth.c:288 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (GSSAPI)" -#: libpq/auth.c:293 +#: libpq/auth.c:291 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (SSPI)" -#: libpq/auth.c:296 +#: libpq/auth.c:294 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (PAM)" -#: libpq/auth.c:299 +#: libpq/auth.c:297 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (BSD)" -#: libpq/auth.c:302 +#: libpq/auth.c:300 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (LDAP)" -#: libpq/auth.c:305 +#: libpq/auth.c:303 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (по сертификату)" -#: libpq/auth.c:308 +#: libpq/auth.c:306 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (RADIUS)" -#: libpq/auth.c:311 +#: libpq/auth.c:309 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "" "пользователь \"%s\" не прошёл проверку подлинности: неверный метод проверки" -#: libpq/auth.c:315 +#: libpq/auth.c:313 #, c-format msgid "Connection matched file \"%s\" line %d: \"%s\"" msgstr "Подключение соответствует строке %2$d в \"%1$s\": \"%3$s\"" -#: libpq/auth.c:359 +#: libpq/auth.c:357 #, c-format msgid "authentication identifier set more than once" msgstr "аутентификационный идентификатор указан повторно" -#: libpq/auth.c:360 +#: libpq/auth.c:358 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "предыдущий идентификатор: \"%s\"; новый: \"%s\"" -#: libpq/auth.c:370 +#: libpq/auth.c:368 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "соединение аутентифицировано: идентификатор=\"%s\" метод=%s (%s:%d)" -#: libpq/auth.c:410 +#: libpq/auth.c:408 #, c-format msgid "" "client certificates can only be checked if a root certificate store is " @@ -15881,25 +16416,25 @@ msgstr "" "сертификаты клиентов могут проверяться, только если доступно хранилище " "корневых сертификатов" -#: libpq/auth.c:421 +#: libpq/auth.c:419 #, c-format msgid "connection requires a valid client certificate" msgstr "для подключения требуется годный сертификат клиента" -#: libpq/auth.c:452 libpq/auth.c:498 +#: libpq/auth.c:450 libpq/auth.c:496 msgid "GSS encryption" msgstr "Шифрование GSS" -#: libpq/auth.c:455 libpq/auth.c:501 +#: libpq/auth.c:453 libpq/auth.c:499 msgid "SSL encryption" msgstr "Шифрование SSL" -#: libpq/auth.c:457 libpq/auth.c:503 +#: libpq/auth.c:455 libpq/auth.c:501 msgid "no encryption" msgstr "без шифрования" #. translator: last %s describes encryption state -#: libpq/auth.c:463 +#: libpq/auth.c:461 #, c-format msgid "" "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" @@ -15908,7 +16443,7 @@ msgstr "" "пользователь \"%s\", \"%s\"" #. translator: last %s describes encryption state -#: libpq/auth.c:470 +#: libpq/auth.c:468 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database " @@ -15917,38 +16452,38 @@ msgstr "" "pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " "база данных \"%s\", %s" -#: libpq/auth.c:508 +#: libpq/auth.c:506 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "" "IP-адрес клиента разрешается в \"%s\", соответствует прямому преобразованию." -#: libpq/auth.c:511 +#: libpq/auth.c:509 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "" "IP-адрес клиента разрешается в \"%s\", прямое преобразование не проверялось." -#: libpq/auth.c:514 +#: libpq/auth.c:512 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "" "IP-адрес клиента разрешается в \"%s\", это не соответствует прямому " "преобразованию." -#: libpq/auth.c:517 +#: libpq/auth.c:515 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "" "Преобразовать имя клиентского компьютера \"%s\" в IP-адрес не удалось: %s." -#: libpq/auth.c:522 +#: libpq/auth.c:520 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Получить имя компьютера из IP-адреса клиента не удалось: %s." #. translator: last %s describes encryption state -#: libpq/auth.c:530 +#: libpq/auth.c:528 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user " @@ -15958,245 +16493,242 @@ msgstr "" "компьютера \"%s\" для пользователя \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:538 +#: libpq/auth.c:536 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "в pg_hba.conf нет записи для компьютера \"%s\", пользователя \"%s\", базы " "\"%s\", %s" -#: libpq/auth.c:711 +#: libpq/auth.c:656 +#, c-format +msgid "connection authenticated: user=\"%s\" method=%s (%s:%d)" +msgstr "соединение аутентифицировано: пользователь=\"%s\" метод=%s (%s:%d)" + +#: libpq/auth.c:725 #, c-format msgid "expected password response, got message type %d" msgstr "ожидался ответ с паролем, но получено сообщение %d" -#: libpq/auth.c:732 +#: libpq/auth.c:746 #, c-format msgid "invalid password packet size" msgstr "неверный размер пакета с паролем" -#: libpq/auth.c:750 +#: libpq/auth.c:764 #, c-format msgid "empty password returned by client" msgstr "клиент возвратил пустой пароль" -#: libpq/auth.c:877 libpq/hba.c:1727 -#, c-format -msgid "" -"MD5 authentication is not supported when \"db_user_namespace\" is enabled" -msgstr "" -"проверка подлинности MD5 не поддерживается, когда включён режим " -"\"db_user_namespace\"" - -#: libpq/auth.c:883 +#: libpq/auth.c:892 #, c-format msgid "could not generate random MD5 salt" msgstr "не удалось сгенерировать случайную соль для MD5" -#: libpq/auth.c:934 libpq/be-secure-gssapi.c:540 +#: libpq/auth.c:943 libpq/be-secure-gssapi.c:540 #, c-format msgid "could not set environment: %m" msgstr "не удалось задать переменную окружения: %m" -#: libpq/auth.c:973 +#: libpq/auth.c:982 #, c-format msgid "expected GSS response, got message type %d" msgstr "ожидался ответ GSS, но получено сообщение %d" -#: libpq/auth.c:1039 +#: libpq/auth.c:1048 msgid "accepting GSS security context failed" msgstr "принять контекст безопасности GSS не удалось" -#: libpq/auth.c:1080 +#: libpq/auth.c:1089 msgid "retrieving GSS user name failed" msgstr "получить имя пользователя GSS не удалось" -#: libpq/auth.c:1226 +#: libpq/auth.c:1235 msgid "could not acquire SSPI credentials" msgstr "не удалось получить удостоверение SSPI" -#: libpq/auth.c:1251 +#: libpq/auth.c:1260 #, c-format msgid "expected SSPI response, got message type %d" msgstr "ожидался ответ SSPI, но получено сообщение %d" -#: libpq/auth.c:1329 +#: libpq/auth.c:1338 msgid "could not accept SSPI security context" msgstr "принять контекст безопасности SSPI не удалось" -#: libpq/auth.c:1370 +#: libpq/auth.c:1379 msgid "could not get token from SSPI security context" msgstr "не удалось получить маркер из контекста безопасности SSPI" -#: libpq/auth.c:1506 libpq/auth.c:1525 +#: libpq/auth.c:1515 libpq/auth.c:1534 #, c-format msgid "could not translate name" msgstr "не удалось преобразовать имя" -#: libpq/auth.c:1538 +#: libpq/auth.c:1547 #, c-format msgid "realm name too long" msgstr "имя области слишком длинное" -#: libpq/auth.c:1553 +#: libpq/auth.c:1562 #, c-format msgid "translated account name too long" msgstr "преобразованное имя учётной записи слишком длинное" -#: libpq/auth.c:1732 +#: libpq/auth.c:1741 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "не удалось создать сокет для подключения к серверу Ident: %m" -#: libpq/auth.c:1747 +#: libpq/auth.c:1756 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "не удалось привязаться к локальному адресу \"%s\": %m" -#: libpq/auth.c:1759 +#: libpq/auth.c:1768 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "не удалось подключиться к серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1781 +#: libpq/auth.c:1790 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось отправить запрос серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1798 +#: libpq/auth.c:1807 #, c-format msgid "" "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось получить ответ от сервера Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1808 +#: libpq/auth.c:1817 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "неверно форматированный ответ от сервера Ident: \"%s\"" -#: libpq/auth.c:1861 +#: libpq/auth.c:1870 #, c-format msgid "peer authentication is not supported on this platform" msgstr "проверка подлинности peer в этой ОС не поддерживается" -#: libpq/auth.c:1865 +#: libpq/auth.c:1874 #, c-format msgid "could not get peer credentials: %m" msgstr "не удалось получить данные пользователя через механизм peer: %m" -#: libpq/auth.c:1877 +#: libpq/auth.c:1886 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "найти локального пользователя по идентификатору (%ld) не удалось: %s" -#: libpq/auth.c:1979 +#: libpq/auth.c:1988 #, c-format msgid "error from underlying PAM layer: %s" msgstr "ошибка в нижележащем слое PAM: %s" -#: libpq/auth.c:1990 +#: libpq/auth.c:1999 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "неподдерживаемое сообщение ответа PAM %d/\"%s\"" -#: libpq/auth.c:2047 +#: libpq/auth.c:2056 #, c-format msgid "could not create PAM authenticator: %s" msgstr "не удалось создать аутентификатор PAM: %s" -#: libpq/auth.c:2058 +#: libpq/auth.c:2067 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "ошибка в pam_set_item(PAM_USER): %s" -#: libpq/auth.c:2090 +#: libpq/auth.c:2099 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "ошибка в pam_set_item(PAM_RHOST): %s" -#: libpq/auth.c:2102 +#: libpq/auth.c:2111 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "ошибка в pam_set_item(PAM_CONV): %s" -#: libpq/auth.c:2115 +#: libpq/auth.c:2124 #, c-format msgid "pam_authenticate failed: %s" msgstr "ошибка в pam_authenticate: %s" -#: libpq/auth.c:2128 +#: libpq/auth.c:2137 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "ошибка в pam_acct_mgmt: %s" -#: libpq/auth.c:2139 +#: libpq/auth.c:2148 #, c-format msgid "could not release PAM authenticator: %s" msgstr "не удалось освободить аутентификатор PAM: %s" -#: libpq/auth.c:2219 +#: libpq/auth.c:2228 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "не удалось инициализировать LDAP (код ошибки: %d)" -#: libpq/auth.c:2256 +#: libpq/auth.c:2265 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "не удалось извлечь имя домена из ldapbasedn" -#: libpq/auth.c:2264 +#: libpq/auth.c:2273 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "для аутентификации LDAP не удалось найти записи DNS SRV для \"%s\"" -#: libpq/auth.c:2266 +#: libpq/auth.c:2275 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Задайте имя сервера LDAP явным образом." -#: libpq/auth.c:2318 +#: libpq/auth.c:2327 #, c-format msgid "could not initialize LDAP: %s" msgstr "не удалось инициализировать LDAP: %s" -#: libpq/auth.c:2328 +#: libpq/auth.c:2337 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "протокол ldaps с текущей библиотекой LDAP не поддерживается" -#: libpq/auth.c:2336 +#: libpq/auth.c:2345 #, c-format msgid "could not initialize LDAP: %m" msgstr "не удалось инициализировать LDAP: %m" -#: libpq/auth.c:2346 +#: libpq/auth.c:2355 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "не удалось задать версию протокола LDAP: %s" -#: libpq/auth.c:2362 +#: libpq/auth.c:2371 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "не удалось начать сеанс LDAP TLS: %s" -#: libpq/auth.c:2439 +#: libpq/auth.c:2448 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP-сервер не задан и значение ldapbasedn не определено" -#: libpq/auth.c:2446 +#: libpq/auth.c:2455 #, c-format msgid "LDAP server not specified" msgstr "LDAP-сервер не определён" -#: libpq/auth.c:2508 +#: libpq/auth.c:2517 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "недопустимый символ в имени пользователя для проверки подлинности LDAP" -#: libpq/auth.c:2525 +#: libpq/auth.c:2534 #, c-format msgid "" "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": " @@ -16205,28 +16737,28 @@ msgstr "" "не удалось выполнить начальную привязку LDAP для ldapbinddn \"%s\" на " "сервере \"%s\": %s" -#: libpq/auth.c:2555 +#: libpq/auth.c:2564 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "" "не удалось выполнить LDAP-поиск по фильтру \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2571 +#: libpq/auth.c:2580 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "в LDAP нет пользователя \"%s\"" -#: libpq/auth.c:2572 +#: libpq/auth.c:2581 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" не вернул результатов" -#: libpq/auth.c:2576 +#: libpq/auth.c:2585 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "пользователь LDAP \"%s\" не уникален" -#: libpq/auth.c:2577 +#: libpq/auth.c:2586 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "" @@ -16235,7 +16767,7 @@ msgstr[0] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" msgstr[1] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" вернул %d записи." msgstr[2] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" вернул %d записей." -#: libpq/auth.c:2597 +#: libpq/auth.c:2606 #, c-format msgid "" "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" @@ -16243,24 +16775,18 @@ msgstr "" "не удалось получить dn для первого результата, соответствующего \"%s\" на " "сервере \"%s\": %s" -#: libpq/auth.c:2618 -#, c-format -msgid "could not unbind after searching for user \"%s\" on server \"%s\"" -msgstr "" -"не удалось отвязаться после поиска пользователя \"%s\" на сервере \"%s\"" - -#: libpq/auth.c:2649 +#: libpq/auth.c:2633 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "" "ошибка при регистрации в LDAP пользователя \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2681 +#: libpq/auth.c:2665 #, c-format msgid "LDAP diagnostics: %s" msgstr "Диагностика LDAP: %s" -#: libpq/auth.c:2719 +#: libpq/auth.c:2703 #, c-format msgid "" "certificate authentication failed for user \"%s\": client certificate " @@ -16269,7 +16795,7 @@ msgstr "" "ошибка проверки подлинности пользователя \"%s\" по сертификату: сертификат " "клиента не содержит имя пользователя" -#: libpq/auth.c:2740 +#: libpq/auth.c:2724 #, c-format msgid "" "certificate authentication failed for user \"%s\": unable to retrieve " @@ -16278,7 +16804,7 @@ msgstr "" "пользователь \"%s\" не прошёл проверку подлинности по сертификату: не " "удалось получить DN субъекта" -#: libpq/auth.c:2763 +#: libpq/auth.c:2747 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": DN " @@ -16287,7 +16813,7 @@ msgstr "" "проверка сертификата (clientcert=verify-full) для пользователя \"%s\" не " "прошла: отличается DN" -#: libpq/auth.c:2768 +#: libpq/auth.c:2752 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": CN " @@ -16296,99 +16822,99 @@ msgstr "" "проверка сертификата (clientcert=verify-full) для пользователя \"%s\" не " "прошла: отличается CN" -#: libpq/auth.c:2870 +#: libpq/auth.c:2854 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-сервер не определён" -#: libpq/auth.c:2877 +#: libpq/auth.c:2861 #, c-format msgid "RADIUS secret not specified" msgstr "секрет RADIUS не определён" # well-spelled: симв -#: libpq/auth.c:2891 +#: libpq/auth.c:2875 #, c-format msgid "" "RADIUS authentication does not support passwords longer than %d characters" msgstr "проверка подлинности RADIUS не поддерживает пароли длиннее %d симв." -#: libpq/auth.c:2993 libpq/hba.c:2369 +#: libpq/auth.c:2977 libpq/hba.c:2352 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "не удалось преобразовать имя сервера RADIUS \"%s\" в адрес: %s" -#: libpq/auth.c:3007 +#: libpq/auth.c:2991 #, c-format msgid "could not generate random encryption vector" msgstr "не удалось сгенерировать случайный вектор шифрования" -#: libpq/auth.c:3044 +#: libpq/auth.c:3028 #, c-format msgid "could not perform MD5 encryption of password: %s" msgstr "не удалось вычислить MD5-хеш пароля: %s" -#: libpq/auth.c:3071 +#: libpq/auth.c:3055 #, c-format msgid "could not create RADIUS socket: %m" msgstr "не удалось создать сокет RADIUS: %m" -#: libpq/auth.c:3087 +#: libpq/auth.c:3071 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "не удалось привязаться к локальному сокету RADIUS: %m" -#: libpq/auth.c:3097 +#: libpq/auth.c:3081 #, c-format msgid "could not send RADIUS packet: %m" msgstr "не удалось отправить пакет RADIUS: %m" -#: libpq/auth.c:3131 libpq/auth.c:3157 +#: libpq/auth.c:3115 libpq/auth.c:3141 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "превышено время ожидания ответа RADIUS от %s" -#: libpq/auth.c:3150 +#: libpq/auth.c:3134 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "не удалось проверить состояние сокета RADIUS: %m" -#: libpq/auth.c:3180 +#: libpq/auth.c:3164 #, c-format msgid "could not read RADIUS response: %m" msgstr "не удалось прочитать ответ RADIUS: %m" -#: libpq/auth.c:3188 +#: libpq/auth.c:3172 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "ответ RADIUS от %s был отправлен с неверного порта: %d" -#: libpq/auth.c:3196 +#: libpq/auth.c:3180 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "слишком короткий ответ RADIUS от %s: %d" -#: libpq/auth.c:3203 +#: libpq/auth.c:3187 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "в ответе RADIUS от %s испорчена длина: %d (фактическая длина %d)" -#: libpq/auth.c:3211 +#: libpq/auth.c:3195 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "пришёл ответ RADIUS от %s на другой запрос: %d (ожидался %d)" -#: libpq/auth.c:3236 +#: libpq/auth.c:3220 #, c-format msgid "could not perform MD5 encryption of received packet: %s" msgstr "не удалось вычислить MD5-хеш для принятого пакета: %s" -#: libpq/auth.c:3246 +#: libpq/auth.c:3230 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "ответ RADIUS от %s содержит неверную подпись MD5" -#: libpq/auth.c:3264 +#: libpq/auth.c:3248 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "ответ RADIUS от %s содержит неверный код (%d) для пользователя \"%s\"" @@ -16449,52 +16975,39 @@ msgstr "не удалось записать файл сервера \"%s\": %m" msgid "large object read request is too large" msgstr "при чтении большого объекта запрошен чрезмерный размер" -#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:262 utils/adt/genfile.c:294 -#: utils/adt/genfile.c:315 +#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:248 utils/adt/genfile.c:269 #, c-format msgid "requested length cannot be negative" msgstr "запрошенная длина не может быть отрицательной" -#: libpq/be-fsstubs.c:871 storage/large_object/inv_api.c:298 -#: storage/large_object/inv_api.c:310 storage/large_object/inv_api.c:507 -#: storage/large_object/inv_api.c:618 storage/large_object/inv_api.c:808 -#, c-format -msgid "permission denied for large object %u" -msgstr "нет доступа к большому объекту %u" - -#: libpq/be-secure-common.c:71 -#, c-format -msgid "could not read from command \"%s\": %m" -msgstr "не удалось прочитать вывод команды \"%s\": %m" - -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:94 #, c-format msgid "command \"%s\" failed" msgstr "ошибка команды \"%s\"" -#: libpq/be-secure-common.c:119 +#: libpq/be-secure-common.c:123 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "не удалось обратиться к файлу закрытого ключа \"%s\": %m" -#: libpq/be-secure-common.c:129 +#: libpq/be-secure-common.c:133 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "файл закрытого ключа \"%s\" - не обычный файл" -#: libpq/be-secure-common.c:155 +#: libpq/be-secure-common.c:159 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "" "файл закрытого ключа \"%s\" должен принадлежать пользователю, запускающему " "сервер, или root" -#: libpq/be-secure-common.c:165 +#: libpq/be-secure-common.c:169 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "к файлу закрытого ключа \"%s\" имеют доступ все или группа" -#: libpq/be-secure-common.c:167 +#: libpq/be-secure-common.c:171 #, c-format msgid "" "File must have permissions u=rw (0600) or less if owned by the database " @@ -16545,82 +17058,82 @@ msgstr "принять контекст безопасности GSSAPI не у msgid "GSSAPI size check error" msgstr "ошибка проверки размера в GSSAPI" -#: libpq/be-secure-openssl.c:125 +#: libpq/be-secure-openssl.c:131 #, c-format msgid "could not create SSL context: %s" msgstr "не удалось создать контекст SSL: %s" -#: libpq/be-secure-openssl.c:151 +#: libpq/be-secure-openssl.c:157 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "не удалось загрузить сертификат сервера \"%s\": %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:177 #, c-format msgid "" "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "" "файл закрытого ключа \"%s\" нельзя перезагрузить, так как он защищён паролем" -#: libpq/be-secure-openssl.c:176 +#: libpq/be-secure-openssl.c:182 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "не удалось загрузить файл закрытого ключа \"%s\": %s" -#: libpq/be-secure-openssl.c:185 +#: libpq/be-secure-openssl.c:191 #, c-format msgid "check of private key failed: %s" msgstr "ошибка при проверке закрытого ключа: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:198 libpq/be-secure-openssl.c:221 +#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "для параметра \"%s\" значение \"%s\" не поддерживается в данной сборке" -#: libpq/be-secure-openssl.c:208 +#: libpq/be-secure-openssl.c:214 #, c-format msgid "could not set minimum SSL protocol version" msgstr "не удалось задать минимальную версию протокола SSL" -#: libpq/be-secure-openssl.c:231 +#: libpq/be-secure-openssl.c:237 #, c-format msgid "could not set maximum SSL protocol version" msgstr "не удалось задать максимальную версию протокола SSL" -#: libpq/be-secure-openssl.c:247 +#: libpq/be-secure-openssl.c:253 #, c-format msgid "could not set SSL protocol version range" msgstr "не удалось задать диапазон версий протокола SSL" -#: libpq/be-secure-openssl.c:248 +#: libpq/be-secure-openssl.c:254 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "Версия \"%s\" не может быть выше \"%s\"" -#: libpq/be-secure-openssl.c:285 +#: 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:305 +#: libpq/be-secure-openssl.c:327 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "не удалось загрузить файл корневых сертификатов \"%s\": %s" -#: libpq/be-secure-openssl.c:354 +#: libpq/be-secure-openssl.c:376 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "" "не удалось загрузить список отзыва сертификатов SSL из файла \"%s\": %s" -#: libpq/be-secure-openssl.c:362 +#: libpq/be-secure-openssl.c:384 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "" "не удалось загрузить списки отзыва сертификатов SSL из каталога \"%s\": %s" -#: libpq/be-secure-openssl.c:370 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "" "could not load SSL certificate revocation list file \"%s\" or directory " @@ -16629,38 +17142,38 @@ msgstr "" "не удалось загрузить списки отзыва сертификатов SSL из файла \"%s\" или " "каталога \"%s\": %s" -#: libpq/be-secure-openssl.c:428 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "" "инициализировать SSL-подключение не удалось: контекст SSL не установлен" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:464 #, c-format msgid "could not initialize SSL connection: %s" msgstr "инициализировать SSL-подключение не удалось: %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:472 #, c-format msgid "could not set SSL socket: %s" msgstr "не удалось создать SSL-сокет: %s" -#: libpq/be-secure-openssl.c:503 +#: libpq/be-secure-openssl.c:528 #, c-format msgid "could not accept SSL connection: %m" msgstr "не удалось принять SSL-подключение: %m" -#: libpq/be-secure-openssl.c:507 libpq/be-secure-openssl.c:562 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "не удалось принять SSL-подключение: обрыв данных" -#: libpq/be-secure-openssl.c:546 +#: libpq/be-secure-openssl.c:573 #, c-format msgid "could not accept SSL connection: %s" msgstr "не удалось принять SSL-подключение: %s" -#: libpq/be-secure-openssl.c:550 +#: libpq/be-secure-openssl.c:577 #, c-format msgid "" "This may indicate that the client does not support any SSL protocol version " @@ -16669,60 +17182,65 @@ msgstr "" "Это может указывать на то, что клиент не поддерживает ни одну версию " "протокола SSL между %s и %s." -#: libpq/be-secure-openssl.c:567 libpq/be-secure-openssl.c:756 -#: libpq/be-secure-openssl.c:826 +#: 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:613 +#: libpq/be-secure-openssl.c:622 +#, c-format +msgid "received SSL connection request with unexpected ALPN protocol" +msgstr "получен запрос на SSL-подключение с неизвестным протоколом ALPN" + +#: libpq/be-secure-openssl.c:666 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Имя SSL-сертификата включает нулевой байт" -#: libpq/be-secure-openssl.c:659 +#: libpq/be-secure-openssl.c:712 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "уникальное имя (DN) в SSL-сертификате содержит нулевой байт" -#: libpq/be-secure-openssl.c:745 libpq/be-secure-openssl.c:810 +#: 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:987 +#: 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:999 +#: libpq/be-secure-openssl.c:1050 #, c-format msgid "could not load DH parameters file: %s" msgstr "не удалось загрузить файл параметров DH: %s" -#: libpq/be-secure-openssl.c:1009 +#: libpq/be-secure-openssl.c:1060 #, c-format msgid "invalid DH parameters: %s" msgstr "неверные параметры DH: %s" -#: libpq/be-secure-openssl.c:1018 +#: libpq/be-secure-openssl.c:1069 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "неверные параметры DH: p - не простое число" -#: libpq/be-secure-openssl.c:1027 +#: libpq/be-secure-openssl.c:1078 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "" "неверные параметры DH: нет подходящего генератора или небезопасное простое " "число" -#: libpq/be-secure-openssl.c:1163 +#: 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:1200 +#: libpq/be-secure-openssl.c:1251 #, c-format msgid "" "Failed certificate data (unverified): subject \"%s\", serial number %s, " @@ -16731,178 +17249,173 @@ msgstr "" "Данные ошибочного сертификата (непроверенные): субъект \"%s\", серийный " "номер %s, издатель \"%s\"." -#: libpq/be-secure-openssl.c:1201 +#: libpq/be-secure-openssl.c:1252 msgid "unknown" msgstr "н/д" -#: libpq/be-secure-openssl.c:1292 +#: libpq/be-secure-openssl.c:1389 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: не удалось загрузить параметры DH" -#: libpq/be-secure-openssl.c:1300 +#: 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:1327 +#: libpq/be-secure-openssl.c:1424 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: нераспознанное имя кривой: %s" -#: libpq/be-secure-openssl.c:1336 +#: libpq/be-secure-openssl.c:1433 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: не удалось создать ключ" -#: libpq/be-secure-openssl.c:1364 +#: libpq/be-secure-openssl.c:1461 msgid "no SSL error reported" msgstr "нет сообщения об ошибке SSL" -#: libpq/be-secure-openssl.c:1381 +#: libpq/be-secure-openssl.c:1479 #, c-format msgid "SSL error code %lu" msgstr "код ошибки SSL: %lu" -#: libpq/be-secure-openssl.c:1540 +#: libpq/be-secure-openssl.c:1636 #, c-format msgid "could not create BIO" msgstr "не удалось создать BIO" -#: libpq/be-secure-openssl.c:1550 +#: libpq/be-secure-openssl.c:1646 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "не удалось получить NID для объекта ASN1_OBJECT" -#: libpq/be-secure-openssl.c:1558 +#: libpq/be-secure-openssl.c:1654 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "не удалось преобразовать NID %d в структуру ASN1_OBJECT" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 -#, c-format -msgid "terminating connection due to unexpected postmaster exit" -msgstr "закрытие подключения из-за неожиданного завершения главного процесса" - -#: libpq/crypt.c:49 +#: libpq/crypt.c:48 #, c-format msgid "Role \"%s\" does not exist." msgstr "Роль \"%s\" не существует." -#: libpq/crypt.c:59 +#: libpq/crypt.c:58 #, c-format msgid "User \"%s\" has no password assigned." msgstr "Пользователь \"%s\" не имеет пароля." -#: libpq/crypt.c:77 +#: libpq/crypt.c:76 #, c-format msgid "User \"%s\" has an expired password." msgstr "Срок действия пароля пользователя \"%s\" истёк." -#: libpq/crypt.c:183 +#: libpq/crypt.c:182 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "" "Пользователь \"%s\" имеет пароль, неподходящий для аутентификации по MD5." -#: libpq/crypt.c:204 libpq/crypt.c:246 libpq/crypt.c:266 +#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 #, c-format msgid "Password does not match for user \"%s\"." msgstr "Пароль не подходит для пользователя \"%s\"." -#: libpq/crypt.c:285 +#: libpq/crypt.c:284 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "Пароль пользователя \"%s\" представлен в неизвестном формате." -#: libpq/hba.c:332 +#: libpq/hba.c:327 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "неверное регулярное выражение \"%s\": %s" -#: libpq/hba.c:334 libpq/hba.c:666 libpq/hba.c:1250 libpq/hba.c:1270 -#: libpq/hba.c:1293 libpq/hba.c:1306 libpq/hba.c:1359 libpq/hba.c:1387 -#: libpq/hba.c:1395 libpq/hba.c:1407 libpq/hba.c:1428 libpq/hba.c:1441 -#: libpq/hba.c:1466 libpq/hba.c:1493 libpq/hba.c:1505 libpq/hba.c:1564 -#: libpq/hba.c:1584 libpq/hba.c:1598 libpq/hba.c:1618 libpq/hba.c:1629 -#: libpq/hba.c:1644 libpq/hba.c:1663 libpq/hba.c:1679 libpq/hba.c:1691 -#: libpq/hba.c:1728 libpq/hba.c:1769 libpq/hba.c:1782 libpq/hba.c:1804 -#: libpq/hba.c:1816 libpq/hba.c:1834 libpq/hba.c:1884 libpq/hba.c:1928 -#: libpq/hba.c:1939 libpq/hba.c:1955 libpq/hba.c:1972 libpq/hba.c:1983 -#: libpq/hba.c:2002 libpq/hba.c:2018 libpq/hba.c:2034 libpq/hba.c:2093 -#: libpq/hba.c:2110 libpq/hba.c:2123 libpq/hba.c:2135 libpq/hba.c:2154 -#: libpq/hba.c:2240 libpq/hba.c:2258 libpq/hba.c:2352 libpq/hba.c:2371 -#: libpq/hba.c:2400 libpq/hba.c:2413 libpq/hba.c:2436 libpq/hba.c:2458 -#: libpq/hba.c:2472 tsearch/ts_locale.c:243 +#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 +#: libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 +#: libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 +#: libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 +#: libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 +#: libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 +#: libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 libpq/hba.c:1799 +#: libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 +#: libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 +#: libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 +#: libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 +#: libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 +#: libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 +#: tsearch/ts_locale.c:241 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "строка %d файла конфигурации \"%s\"" -#: libpq/hba.c:462 +#: libpq/hba.c:457 #, c-format msgid "skipping missing authentication file \"%s\"" msgstr "отсутствующий файл настройки аутентификации \"%s\" пропускается" -#: libpq/hba.c:614 +#: libpq/hba.c:609 #, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" msgstr "открыть файл \"%s\" не удалось: превышен предел вложенности" -#: libpq/hba.c:1221 +#: libpq/hba.c:1216 #, c-format msgid "error enumerating network interfaces: %m" msgstr "ошибка при перечислении сетевых интерфейсов: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1248 +#: libpq/hba.c:1243 #, c-format msgid "" "authentication option \"%s\" is only valid for authentication methods %s" msgstr "параметр проверки подлинности \"%s\" допускается только для методов %s" -#: libpq/hba.c:1268 +#: libpq/hba.c:1263 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "" "для метода проверки подлинности \"%s\" требуется определить аргумент \"%s\"" -#: libpq/hba.c:1292 +#: libpq/hba.c:1287 #, c-format msgid "missing entry at end of line" msgstr "отсутствует запись в конце строки" -#: libpq/hba.c:1305 +#: libpq/hba.c:1300 #, c-format msgid "multiple values in ident field" msgstr "множественные значения в поле ident" -#: libpq/hba.c:1357 +#: libpq/hba.c:1352 #, c-format msgid "multiple values specified for connection type" msgstr "для типа подключения указано несколько значений" -#: libpq/hba.c:1358 +#: libpq/hba.c:1353 #, c-format msgid "Specify exactly one connection type per line." msgstr "Определите в строке единственный тип подключения." -#: libpq/hba.c:1385 +#: libpq/hba.c:1380 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "запись с hostssl недействительна, так как поддержка SSL отключена" -#: libpq/hba.c:1386 +#: libpq/hba.c:1381 #, c-format -msgid "Set ssl = on in postgresql.conf." -msgstr "Установите ssl = on в postgresql.conf." +msgid "Set \"ssl = on\" in postgresql.conf." +msgstr "Установите \"ssl = on\" в postgresql.conf." -#: libpq/hba.c:1394 +#: libpq/hba.c:1389 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "" "запись с hostssl недействительна, так как SSL не поддерживается в этой сборке" -#: libpq/hba.c:1406 +#: libpq/hba.c:1401 #, c-format msgid "" "hostgssenc record cannot match because GSSAPI is not supported by this build" @@ -16910,126 +17423,126 @@ msgstr "" "запись с hostgssenc недействительна, так как GSSAPI не поддерживается в этой " "сборке" -#: libpq/hba.c:1426 +#: libpq/hba.c:1421 #, c-format msgid "invalid connection type \"%s\"" msgstr "неверный тип подключения \"%s\"" -#: libpq/hba.c:1440 +#: libpq/hba.c:1435 #, c-format msgid "end-of-line before database specification" msgstr "конец строки перед определением базы данных" -#: libpq/hba.c:1465 +#: libpq/hba.c:1460 #, c-format msgid "end-of-line before role specification" msgstr "конец строки перед определением роли" -#: libpq/hba.c:1492 +#: libpq/hba.c:1487 #, c-format msgid "end-of-line before IP address specification" msgstr "конец строки перед определением IP-адресов" -#: libpq/hba.c:1503 +#: libpq/hba.c:1498 #, c-format msgid "multiple values specified for host address" msgstr "для адреса узла указано несколько значений" -#: libpq/hba.c:1504 +#: libpq/hba.c:1499 #, c-format msgid "Specify one address range per line." msgstr "Определите в строке один диапазон адресов." -#: libpq/hba.c:1562 +#: libpq/hba.c:1557 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "неверный IP-адрес \"%s\": %s" -#: libpq/hba.c:1582 +#: libpq/hba.c:1577 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "указать одновременно и имя узла, и маску CIDR нельзя: \"%s\"" -#: libpq/hba.c:1596 +#: libpq/hba.c:1591 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "неверная маска CIDR в адресе \"%s\"" -#: libpq/hba.c:1616 +#: libpq/hba.c:1611 #, c-format msgid "end-of-line before netmask specification" msgstr "конец строки перед определением маски сети" -#: libpq/hba.c:1617 +#: libpq/hba.c:1612 #, c-format msgid "" "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "" "Укажите диапазон адресов в формате CIDR или задайте отдельную маску сети." -#: libpq/hba.c:1628 +#: libpq/hba.c:1623 #, c-format msgid "multiple values specified for netmask" msgstr "для сетевой маски указано несколько значений" -#: libpq/hba.c:1642 +#: libpq/hba.c:1637 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "неверная маска IP \"%s\": %s" -#: libpq/hba.c:1662 +#: libpq/hba.c:1657 #, c-format msgid "IP address and mask do not match" msgstr "IP-адрес не соответствует маске" -#: libpq/hba.c:1678 +#: libpq/hba.c:1673 #, c-format msgid "end-of-line before authentication method" msgstr "конец строки перед методом проверки подлинности" -#: libpq/hba.c:1689 +#: libpq/hba.c:1684 #, c-format msgid "multiple values specified for authentication type" msgstr "для типа проверки подлинности указано несколько значений" -#: libpq/hba.c:1690 +#: libpq/hba.c:1685 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Определите в строке единственный тип проверки подлинности." -#: libpq/hba.c:1767 +#: libpq/hba.c:1750 #, c-format msgid "invalid authentication method \"%s\"" msgstr "неверный метод проверки подлинности \"%s\"" -#: libpq/hba.c:1780 +#: libpq/hba.c:1763 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "" "неверный метод проверки подлинности \"%s\": не поддерживается в этой сборке" -#: libpq/hba.c:1803 +#: libpq/hba.c:1786 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "проверка подлинности gssapi для локальных сокетов не поддерживается" -#: libpq/hba.c:1815 +#: libpq/hba.c:1798 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "проверка подлинности peer поддерживается только для локальных сокетов" -#: libpq/hba.c:1833 +#: libpq/hba.c:1816 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "" "проверка подлинности cert поддерживается только для подключений hostssl" -#: libpq/hba.c:1883 +#: libpq/hba.c:1866 #, c-format msgid "authentication option not in name=value format: %s" msgstr "параметр проверки подлинности указан не в формате имя=значение: %s" -#: libpq/hba.c:1927 +#: libpq/hba.c:1910 #, c-format msgid "" "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, " @@ -17038,7 +17551,7 @@ msgstr "" "нельзя использовать ldapbasedn, ldapbinddn, ldapbindpasswd, " "ldapsearchattribute, ldapsearchfilter или ldapurl вместе с ldapprefix" -#: libpq/hba.c:1938 +#: libpq/hba.c:1921 #, c-format msgid "" "authentication method \"ldap\" requires argument \"ldapbasedn\", " @@ -17047,22 +17560,22 @@ msgstr "" "для метода проверки подлинности \"ldap\" требуется установить аргументы " "\"ldapbasedn\" и \"ldapprefix\" или \"ldapsuffix\"" -#: libpq/hba.c:1954 +#: libpq/hba.c:1937 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "нельзя использовать ldapsearchattribute вместе с ldapsearchfilter" -#: libpq/hba.c:1971 +#: libpq/hba.c:1954 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "список серверов RADIUS не может быть пустым" -#: libpq/hba.c:1982 +#: libpq/hba.c:1965 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "список секретов RADIUS не может быть пустым" -#: libpq/hba.c:1999 +#: libpq/hba.c:1982 #, c-format msgid "" "the number of RADIUS secrets (%d) must be 1 or the same as the number of " @@ -17071,7 +17584,7 @@ msgstr "" "количество секретов RADIUS (%d) должно равняться 1 или количеству серверов " "RADIUS (%d)" -#: libpq/hba.c:2015 +#: libpq/hba.c:1998 #, c-format msgid "" "the number of RADIUS ports (%d) must be 1 or the same as the number of " @@ -17080,7 +17593,7 @@ msgstr "" "количество портов RADIUS (%d) должно равняться 1 или количеству серверов " "RADIUS (%d)" -#: libpq/hba.c:2031 +#: libpq/hba.c:2014 #, c-format msgid "" "the number of RADIUS identifiers (%d) must be 1 or the same as the number of " @@ -17089,16 +17602,16 @@ msgstr "" "количество идентификаторов RADIUS (%d) должно равняться 1 или количеству " "серверов RADIUS (%d)" -#: libpq/hba.c:2083 +#: libpq/hba.c:2066 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi и cert" -#: libpq/hba.c:2092 +#: libpq/hba.c:2075 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert можно определить только в строках \"hostssl\"" -#: libpq/hba.c:2109 +#: libpq/hba.c:2092 #, c-format msgid "" "clientcert only accepts \"verify-full\" when using \"cert\" authentication" @@ -17106,95 +17619,95 @@ msgstr "" "с проверкой подлинности \"cert\" для clientcert допускается только значение " "\"verify-full\"" -#: libpq/hba.c:2122 +#: libpq/hba.c:2105 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "неверное значение для clientcert: \"%s\"" -#: libpq/hba.c:2134 +#: libpq/hba.c:2117 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname можно определить только в строках \"hostssl\"" -#: libpq/hba.c:2153 +#: libpq/hba.c:2136 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "неверное значение для clientname: \"%s\"" -#: libpq/hba.c:2186 +#: libpq/hba.c:2169 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "не удалось разобрать URL-адрес LDAP \"%s\": %s" -#: libpq/hba.c:2197 +#: libpq/hba.c:2180 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "неподдерживаемая схема в URL-адресе LDAP: %s" -#: libpq/hba.c:2221 +#: libpq/hba.c:2204 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URL-адреса LDAP не поддерживаются в этой ОС" -#: libpq/hba.c:2239 +#: libpq/hba.c:2222 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "неверное значение ldapscheme: \"%s\"" -#: libpq/hba.c:2257 +#: libpq/hba.c:2240 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "неверный номер порта LDAP: \"%s\"" -#: libpq/hba.c:2303 libpq/hba.c:2310 +#: libpq/hba.c:2286 libpq/hba.c:2293 msgid "gssapi and sspi" msgstr "gssapi и sspi" -#: libpq/hba.c:2319 libpq/hba.c:2328 +#: libpq/hba.c:2302 libpq/hba.c:2311 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2350 +#: libpq/hba.c:2333 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "не удалось разобрать список серверов RADIUS \"%s\"" -#: libpq/hba.c:2398 +#: libpq/hba.c:2381 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "не удалось разобрать список портов RADIUS \"%s\"" -#: libpq/hba.c:2412 +#: libpq/hba.c:2395 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "неверный номер порта RADIUS: \"%s\"" -#: libpq/hba.c:2434 +#: libpq/hba.c:2417 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "не удалось разобрать список секретов RADIUS \"%s\"" -#: libpq/hba.c:2456 +#: libpq/hba.c:2439 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "не удалось разобрать список идентификаторов RADIUS \"%s\"" -#: libpq/hba.c:2470 +#: libpq/hba.c:2453 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "нераспознанное имя атрибута проверки подлинности: \"%s\"" -#: libpq/hba.c:2662 +#: libpq/hba.c:2645 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "файл конфигурации \"%s\" не содержит записей" -#: libpq/hba.c:2815 +#: libpq/hba.c:2798 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "ошибка при поиске по регулярному выражению для \"%s\": %s" -#: libpq/hba.c:2839 +#: libpq/hba.c:2822 #, c-format msgid "" "regular expression \"%s\" has no subexpressions as requested by " @@ -17203,88 +17716,96 @@ msgstr "" "в регулярном выражении \"%s\" нет подвыражений, требуемых для обратной " "ссылки в \"%s\"" -#: libpq/hba.c:2942 +#: libpq/hba.c:2925 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" "указанное имя пользователя (%s) не совпадает с именем прошедшего проверку " "(%s)" -#: libpq/hba.c:2962 +#: libpq/hba.c:2945 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "нет соответствия в файле сопоставлений \"%s\" для пользователя \"%s\", " "прошедшего проверку как \"%s\"" -#: libpq/pqcomm.c:196 +#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 +#: libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 +#: libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 +#: libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "ошибка в %s(%s): %m" + +#: libpq/pqcomm.c:296 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "не удалось перевести сокет в неблокирующий режим: %m" -#: libpq/pqcomm.c:357 +#: libpq/pqcomm.c:456 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "длина пути Unix-сокета \"%s\" превышает предел (%d байт)" -#: libpq/pqcomm.c:377 +#: libpq/pqcomm.c:476 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "перевести имя узла \"%s\", службы \"%s\" в адрес не удалось: %s" -#: libpq/pqcomm.c:381 +#: libpq/pqcomm.c:480 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "не удалось перевести имя службы \"%s\" в адрес: %s" -#: libpq/pqcomm.c:408 +#: libpq/pqcomm.c:502 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "" "не удалось привязаться ко всем запрошенным адресам: превышен предел " "MAXLISTEN (%d)" -#: libpq/pqcomm.c:417 +#: libpq/pqcomm.c:511 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:420 +#: libpq/pqcomm.c:514 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:423 +#: libpq/pqcomm.c:517 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:521 #, c-format msgid "unrecognized address family %d" msgstr "нераспознанное семейство адресов: %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:451 +#: libpq/pqcomm.c:545 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "не удалось создать сокет %s для адреса \"%s\": %m" #. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:477 libpq/pqcomm.c:495 +#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "ошибка в %s(%s) для адреса %s \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:518 +#: libpq/pqcomm.c:615 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "не удалось привязаться к адресу %s \"%s\": %m" -#: libpq/pqcomm.c:522 +#: libpq/pqcomm.c:619 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "Возможно, порт %d занят другим процессом postmaster?" -#: libpq/pqcomm.c:524 +#: libpq/pqcomm.c:621 #, c-format msgid "" "Is another postmaster already running on port %d? If not, wait a few seconds " @@ -17294,128 +17815,120 @@ msgstr "" "попытку через несколько секунд." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:553 +#: libpq/pqcomm.c:650 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "не удалось привязаться к адресу %s \"%s\": %m" -#: libpq/pqcomm.c:561 +#: libpq/pqcomm.c:658 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "для приёма подключений открыт Unix-сокет \"%s\"" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:566 +#: libpq/pqcomm.c:663 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "для приёма подключений по адресу %s \"%s\" открыт порт %d" -#: libpq/pqcomm.c:655 +#: libpq/pqcomm.c:753 #, c-format msgid "group \"%s\" does not exist" msgstr "группа \"%s\" не существует" -#: libpq/pqcomm.c:665 +#: libpq/pqcomm.c:763 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "не удалось установить группу для файла \"%s\": %m" -#: libpq/pqcomm.c:676 +#: libpq/pqcomm.c:774 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "не удалось установить права доступа для файла \"%s\": %m" -#: libpq/pqcomm.c:704 +#: libpq/pqcomm.c:803 #, c-format msgid "could not accept new connection: %m" msgstr "не удалось принять новое подключение: %m" -#: libpq/pqcomm.c:744 libpq/pqcomm.c:753 libpq/pqcomm.c:785 libpq/pqcomm.c:795 -#: libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 -#: libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 -#: libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 -#, c-format -msgid "%s(%s) failed: %m" -msgstr "ошибка в %s(%s): %m" - -#: libpq/pqcomm.c:899 +#: libpq/pqcomm.c:885 #, c-format msgid "there is no client connection" msgstr "нет клиентского подключения" -#: libpq/pqcomm.c:955 libpq/pqcomm.c:1056 +#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 #, c-format msgid "could not receive data from client: %m" msgstr "не удалось получить данные от клиента: %m" -#: libpq/pqcomm.c:1161 tcop/postgres.c:4405 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "закрытие подключения из-за потери синхронизации протокола" -#: libpq/pqcomm.c:1227 +#: libpq/pqcomm.c:1215 #, c-format msgid "unexpected EOF within message length word" msgstr "неожиданный обрыв данных в слове длины сообщения" -#: libpq/pqcomm.c:1237 +#: libpq/pqcomm.c:1225 #, c-format msgid "invalid message length" msgstr "неверная длина сообщения" -#: libpq/pqcomm.c:1259 libpq/pqcomm.c:1272 +#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 #, c-format msgid "incomplete message from client" msgstr "неполное сообщение от клиента" -#: libpq/pqcomm.c:1383 +#: libpq/pqcomm.c:1401 #, c-format msgid "could not send data to client: %m" msgstr "не удалось послать данные клиенту: %m" -#: libpq/pqcomm.c:1598 +#: libpq/pqcomm.c:1616 #, c-format msgid "%s(%s) failed: error code %d" msgstr "ошибка в %s(%s): код ошибки %d" -#: libpq/pqcomm.c:1687 +#: libpq/pqcomm.c:1705 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "изменение значения keepalives_idle не поддерживается" -#: libpq/pqcomm.c:1771 libpq/pqcomm.c:1846 libpq/pqcomm.c:1921 +#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s) не поддерживается" -#: libpq/pqformat.c:407 +#: libpq/pqformat.c:404 #, c-format msgid "no data left in message" msgstr "в сообщении не осталось данных" -#: libpq/pqformat.c:518 libpq/pqformat.c:536 libpq/pqformat.c:557 -#: utils/adt/array_userfuncs.c:799 utils/adt/arrayfuncs.c:1507 -#: utils/adt/rowtypes.c:615 +#: 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/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "недостаточно данных осталось в сообщении" -#: libpq/pqformat.c:598 libpq/pqformat.c:627 +#: libpq/pqformat.c:595 libpq/pqformat.c:624 #, c-format msgid "invalid string in message" msgstr "неверная строка в сообщении" -#: libpq/pqformat.c:643 +#: libpq/pqformat.c:640 #, c-format msgid "invalid message format" msgstr "неверный формат сообщения" -#: main/main.c:235 +#: main/main.c:236 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: ошибка WSAStartup: %d\n" -#: main/main.c:329 +#: main/main.c:324 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -17424,7 +17937,7 @@ msgstr "" "%s - сервер PostgreSQL.\n" "\n" -#: main/main.c:330 +#: main/main.c:325 #, c-format msgid "" "Usage:\n" @@ -17435,110 +17948,110 @@ msgstr "" " %s [ПАРАМЕТР]...\n" "\n" -#: main/main.c:331 +#: main/main.c:326 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: main/main.c:332 +#: main/main.c:327 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ЧИСЛО_БУФ число разделяемых буферов\n" -#: main/main.c:333 +#: main/main.c:328 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:334 +#: main/main.c:329 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C ИМЯ вывести значение параметра выполнения и выйти\n" -#: main/main.c:335 +#: main/main.c:330 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 уровень отладочных сообщений\n" -#: main/main.c:336 +#: main/main.c:331 #, c-format msgid " -D DATADIR database directory\n" -msgstr " -D КАТАЛОГ каталог с данными\n" +msgstr " -D КАТ_ДАННЫХ каталог с данными\n" # well-spelled: ДМГ -#: main/main.c:337 +#: main/main.c:332 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e использовать европейский формат дат (ДМГ)\n" -#: main/main.c:338 +#: main/main.c:333 #, c-format msgid " -F turn fsync off\n" msgstr " -F выключить синхронизацию с ФС\n" -#: main/main.c:339 +#: 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:340 +#: main/main.c:335 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr "" " -i включить соединения TCP/IP (устаревший параметр)\n" -#: main/main.c:341 +#: main/main.c:336 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k КАТАЛОГ расположение Unix-сокетов\n" -#: main/main.c:343 +#: main/main.c:338 #, c-format msgid " -l enable SSL connections\n" msgstr " -l разрешить SSL-подключения\n" # well-spelled: ПОДКЛ -#: main/main.c:345 +#: main/main.c:340 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N МАКС_ПОДКЛ предельное число подключений\n" -#: main/main.c:346 +#: main/main.c:341 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p ПОРТ номер порта для приёма подключений\n" -#: main/main.c:347 +#: main/main.c:342 #, c-format msgid " -s show statistics after each query\n" msgstr " -s показывать статистику после каждого запроса\n" -#: main/main.c:348 +#: 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:349 +#: main/main.c:344 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: main/main.c:350 +#: main/main.c:345 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:351 +#: main/main.c:346 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config вывести параметры конфигурации и выйти\n" -#: main/main.c:352 +#: main/main.c:347 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: main/main.c:354 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -17547,27 +18060,27 @@ msgstr "" "\n" "Параметры для разработчиков:\n" -#: main/main.c:355 +#: 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:356 +#: main/main.c:351 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O разрешить изменять структуру системных таблиц\n" -#: main/main.c:357 +#: main/main.c:352 #, c-format msgid " -P disable system indexes\n" msgstr " -P отключить системные индексы\n" -#: main/main.c:358 +#: 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:359 +#: main/main.c:354 #, c-format msgid "" " -T send SIGABRT to all backend processes if one dies\n" @@ -17575,13 +18088,13 @@ msgstr "" " -T посылать сигнал SIGABRT всем серверным процессам\n" " при отключении одного\n" -#: main/main.c:360 +#: 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:362 +#: main/main.c:357 #, c-format msgid "" "\n" @@ -17590,7 +18103,7 @@ msgstr "" "\n" "Параметры для монопольного режима:\n" -#: main/main.c:363 +#: main/main.c:358 #, c-format msgid "" " --single selects single-user mode (must be first argument)\n" @@ -17598,22 +18111,22 @@ msgstr "" " --single включить монопольный режим\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:364 +#: main/main.c:359 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " ИМЯ_БД база данных (по умолчанию - имя пользователя)\n" -#: main/main.c:365 +#: main/main.c:360 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 переопределить уровень отладочных сообщений\n" -#: main/main.c:366 +#: main/main.c:361 #, c-format msgid " -E echo statement before execution\n" msgstr " -E выводить SQL-операторы перед выполнением\n" -#: main/main.c:367 +#: main/main.c:362 #, c-format msgid "" " -j do not use newline as interactive query delimiter\n" @@ -17621,12 +18134,12 @@ msgstr "" " -j не считать конец строки разделителем интерактивных " "запросов\n" -#: main/main.c:368 main/main.c:374 +#: main/main.c:363 main/main.c:369 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r ИМЯ_ФАЙЛА перенаправить STDOUT и STDERR в указанный файл\n" -#: main/main.c:370 +#: main/main.c:365 #, c-format msgid "" "\n" @@ -17635,7 +18148,7 @@ msgstr "" "\n" "Параметры для режима инициализации:\n" -#: main/main.c:371 +#: main/main.c:366 #, c-format msgid "" " --boot selects bootstrapping mode (must be first argument)\n" @@ -17643,14 +18156,14 @@ msgstr "" " --boot включить режим инициализации\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:372 +#: main/main.c:367 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr "" " --check включить режим проверки (этот аргумент должен быть " "первым)\n" -#: main/main.c:373 +#: main/main.c:368 #, c-format msgid "" " DBNAME database name (mandatory argument in bootstrapping " @@ -17658,7 +18171,7 @@ msgid "" msgstr "" " ИМЯ_БД имя базы данных (необходимо в режиме инициализации)\n" -#: main/main.c:376 +#: main/main.c:371 #, c-format msgid "" "\n" @@ -17675,12 +18188,12 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: main/main.c:380 +#: main/main.c:375 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: main/main.c:391 +#: main/main.c:386 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -17693,12 +18206,12 @@ msgstr "" "должен запускать обычный пользователь. Подробнее о том, как\n" "правильно запускать сервер, вы можете узнать в документации.\n" -#: main/main.c:408 +#: main/main.c:403 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: фактический и эффективный ID пользователя должны совпадать\n" -#: main/main.c:415 +#: main/main.c:410 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -17723,19 +18236,14 @@ msgstr "расширенный тип узла \"%s\" уже существуе msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "методы расширенного узла \"%s\" не зарегистрированы" -#: nodes/makefuncs.c:153 statistics/extended_stats.c:2335 +#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "отношение \"%s\" не имеет составного типа" -#: nodes/makefuncs.c:879 -#, c-format -msgid "unrecognized JSON encoding: %s" -msgstr "нераспознанная кодировка JSON: %s" - -#: nodes/nodeFuncs.c:116 nodes/nodeFuncs.c:147 parser/parse_coerce.c:2567 -#: parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 -#: parser/parse_expr.c:2049 parser/parse_func.c:710 parser/parse_oper.c:883 +#: 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" @@ -17751,7 +18259,7 @@ msgstr "портал \"%s\" с параметрами: %s" msgid "unnamed portal with parameters: %s" msgstr "неименованный портал с параметрами: %s" -#: optimizer/path/joinrels.c:973 +#: optimizer/path/joinrels.c:972 #, c-format msgid "" "FULL JOIN is only supported with merge-joinable or hash-joinable join " @@ -17760,32 +18268,32 @@ msgstr "" "FULL JOIN поддерживается только с условиями, допускающими соединение " "слиянием или хеш-соединение" -#: optimizer/plan/createplan.c:7111 parser/parse_merge.c:187 -#: parser/parse_merge.c:194 +#: optimizer/plan/createplan.c:7175 parser/parse_merge.c:203 +#: rewrite/rewriteHandler.c:1680 #, c-format msgid "cannot execute MERGE on relation \"%s\"" -msgstr "выполнить MERGE для отношение \"%s\" нельзя" +msgstr "выполнить MERGE для отношения \"%s\" нельзя" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1408 +#: optimizer/plan/initsplan.c:1407 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s не может применяться к NULL-содержащей стороне внешнего соединения" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1361 parser/analyze.c:1772 parser/analyze.c:2029 -#: parser/analyze.c:3242 +#: optimizer/plan/planner.c:1380 parser/analyze.c:1771 parser/analyze.c:2029 +#: parser/analyze.c:3247 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s несовместимо с UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2076 optimizer/plan/planner.c:4035 +#: 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:2077 optimizer/plan/planner.c:4036 -#: optimizer/plan/planner.c:4676 optimizer/prep/prepunion.c:1053 +#: 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 " @@ -17794,77 +18302,77 @@ msgstr "" "Одни типы данных поддерживают только хеширование, а другие - только " "сортировку." -#: optimizer/plan/planner.c:4675 +#: optimizer/plan/planner.c:4789 #, c-format msgid "could not implement DISTINCT" msgstr "не удалось реализовать DISTINCT" -#: optimizer/plan/planner.c:6014 +#: optimizer/plan/planner.c:6134 #, c-format msgid "could not implement window PARTITION BY" msgstr "не удалось реализовать PARTITION BY для окна" -#: optimizer/plan/planner.c:6015 +#: optimizer/plan/planner.c:6135 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Столбцы, разбивающие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/planner.c:6019 +#: optimizer/plan/planner.c:6139 #, c-format msgid "could not implement window ORDER BY" msgstr "не удалось реализовать ORDER BY для окна" -#: optimizer/plan/planner.c:6020 +#: optimizer/plan/planner.c:6140 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Столбцы, сортирующие окна, должны иметь сортируемые типы данных." -#: optimizer/prep/prepunion.c:516 +#: optimizer/prep/prepunion.c:467 #, c-format msgid "could not implement recursive UNION" msgstr "не удалось реализовать рекурсивный UNION" -#: optimizer/prep/prepunion.c:517 +#: optimizer/prep/prepunion.c:468 #, c-format msgid "All column datatypes must be hashable." msgstr "Все столбцы должны иметь хешируемые типы данных." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1052 +#: optimizer/prep/prepunion.c:1319 #, c-format msgid "could not implement %s" msgstr "не удалось реализовать %s" -#: optimizer/util/clauses.c:4933 +#: optimizer/util/clauses.c:4963 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "внедрённая в код SQL-функция \"%s\"" -#: optimizer/util/plancat.c:154 +#: optimizer/util/plancat.c:153 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "" "обращаться к временным или нежурналируемым отношениям в процессе " "восстановления нельзя" -#: optimizer/util/plancat.c:726 +#: optimizer/util/plancat.c:768 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "" "указания со ссылкой на всю строку для выбора уникального индекса не " "поддерживаются" -#: optimizer/util/plancat.c:743 +#: optimizer/util/plancat.c:785 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ограничению в ON CONFLICT не соответствует индекс" -#: optimizer/util/plancat.c:793 +#: 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:898 +#: optimizer/util/plancat.c:945 #, c-format msgid "" "there is no unique or exclusion constraint matching the ON CONFLICT " @@ -17873,22 +18381,22 @@ msgstr "" "нет уникального ограничения или ограничения-исключения, соответствующего " "указанию ON CONFLICT" -#: parser/analyze.c:826 parser/analyze.c:1551 +#: parser/analyze.c:824 parser/analyze.c:1550 #, c-format msgid "VALUES lists must all be the same length" msgstr "списки VALUES должны иметь одинаковую длину" -#: parser/analyze.c:1028 +#: parser/analyze.c:1027 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT содержит больше выражений, чем целевых столбцов" -#: parser/analyze.c:1046 +#: parser/analyze.c:1045 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT содержит больше целевых столбцов, чем выражений" -#: parser/analyze.c:1050 +#: parser/analyze.c:1049 #, c-format msgid "" "The insertion source is a row expression containing the same number of " @@ -17897,13 +18405,13 @@ msgstr "" "Источником данных является строка, включающая столько же столбцов, сколько " "требуется для INSERT. Вы намеренно использовали скобки?" -#: parser/analyze.c:1358 parser/analyze.c:1745 +#: parser/analyze.c:1357 parser/analyze.c:1744 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO здесь не допускается" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1674 parser/analyze.c:3474 +#: parser/analyze.c:1673 parser/analyze.c:3479 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s нельзя применять к VALUES" @@ -17947,12 +18455,17 @@ msgstr "" msgid "each %s query must have the same number of columns" msgstr "все запросы в %s должны возвращать одинаковое число столбцов" -#: parser/analyze.c:2584 +#: parser/analyze.c:2535 +#, c-format +msgid "SET target columns cannot be qualified with the relation name." +msgstr "К именам целевых столбцов в SET нельзя добавлять имя отношения." + +#: parser/analyze.c:2589 #, c-format msgid "RETURNING must have at least one column" msgstr "в RETURNING должен быть минимум один столбец" -#: parser/analyze.c:2687 +#: parser/analyze.c:2692 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" @@ -17960,234 +18473,234 @@ msgstr[0] "источник присваиваемого значения выд msgstr[1] "источник присваиваемого значения выдал %d столбца" msgstr[2] "источник присваиваемого значения выдал %d столбцов" -#: parser/analyze.c:2748 +#: parser/analyze.c:2753 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "переменная \"%s\" имеет тип %s, а выражение - тип %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2873 parser/analyze.c:2881 +#: parser/analyze.c:2878 parser/analyze.c:2886 #, c-format msgid "cannot specify both %s and %s" msgstr "указать %s и %s одновременно нельзя" -#: parser/analyze.c:2901 +#: parser/analyze.c:2906 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR не может содержать операторы, изменяющие данные, в WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2909 +#: parser/analyze.c:2914 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s не поддерживается" -#: parser/analyze.c:2912 +#: parser/analyze.c:2917 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Сохраняемые курсоры должны быть READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2920 +#: parser/analyze.c:2925 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s не поддерживается" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2931 +#: parser/analyze.c:2936 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s не допускается" -#: parser/analyze.c:2934 +#: parser/analyze.c:2939 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Независимые курсоры должны быть READ ONLY." -#: parser/analyze.c:3028 +#: parser/analyze.c:3033 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "" "в материализованных представлениях не должны использоваться операторы, " "изменяющие данные в WITH" -#: parser/analyze.c:3038 +#: parser/analyze.c:3043 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "" "в материализованных представлениях не должны использоваться временные " "таблицы и представления" -#: parser/analyze.c:3048 +#: parser/analyze.c:3053 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "" "определять материализованные представления со связанными параметрами нельзя" -#: parser/analyze.c:3060 +#: parser/analyze.c:3065 #, c-format msgid "materialized views cannot be unlogged" msgstr "материализованные представления не могут быть нежурналируемыми" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3249 +#: parser/analyze.c:3254 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s несовместимо с предложением DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3256 +#: parser/analyze.c:3261 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s несовместимо с предложением GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3263 +#: parser/analyze.c:3268 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s несовместимо с предложением HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3270 +#: parser/analyze.c:3275 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s несовместимо с агрегатными функциями" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3277 +#: parser/analyze.c:3282 #, c-format msgid "%s is not allowed with window functions" msgstr "%s несовместимо с оконными функциями" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3284 +#: parser/analyze.c:3289 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "" "%s не допускается с функциями, возвращающие множества, в списке результатов" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3383 +#: parser/analyze.c:3388 #, c-format msgid "%s must specify unqualified relation names" msgstr "для %s нужно указывать неполные имена отношений" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3447 +#: parser/analyze.c:3452 #, c-format msgid "%s cannot be applied to a join" msgstr "%s нельзя применить к соединению" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3456 +#: parser/analyze.c:3461 #, c-format msgid "%s cannot be applied to a function" msgstr "%s нельзя применить к функции" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3465 +#: parser/analyze.c:3470 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s нельзя применить к табличной функции" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3483 +#: parser/analyze.c:3488 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s нельзя применить к запросу WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3492 +#: parser/analyze.c:3497 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s нельзя применить к именованному хранилищу кортежей" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3512 +#: parser/analyze.c:3517 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "отношение \"%s\" в определении %s отсутствует в предложении FROM" -#: parser/parse_agg.c:209 parser/parse_oper.c:227 +#: parser/parse_agg.c:210 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "для типа %s не удалось найти оператор сортировки" -#: parser/parse_agg.c:211 +#: parser/parse_agg.c:212 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Агрегатным функциям с DISTINCT необходимо сортировать входные данные." -#: parser/parse_agg.c:269 +#: parser/parse_agg.c:270 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "у GROUPING должно быть меньше 32 аргументов" -#: parser/parse_agg.c:372 +#: parser/parse_agg.c:373 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "агрегатные функции нельзя применять в условиях JOIN" -#: parser/parse_agg.c:374 +#: parser/parse_agg.c:375 msgid "grouping operations are not allowed in JOIN conditions" msgstr "операции группировки нельзя применять в условиях JOIN" -#: parser/parse_agg.c:386 +#: 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:388 +#: 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:393 +#: parser/parse_agg.c:392 msgid "aggregate functions are not allowed in functions in FROM" msgstr "агрегатные функции нельзя применять в функциях во FROM" -#: parser/parse_agg.c:395 +#: parser/parse_agg.c:394 msgid "grouping operations are not allowed in functions in FROM" msgstr "операции группировки нельзя применять в функциях во FROM" -#: parser/parse_agg.c:403 +#: parser/parse_agg.c:402 msgid "aggregate functions are not allowed in policy expressions" msgstr "агрегатные функции нельзя применять в выражениях политик" -#: parser/parse_agg.c:405 +#: parser/parse_agg.c:404 msgid "grouping operations are not allowed in policy expressions" msgstr "операции группировки нельзя применять в выражениях политик" -#: parser/parse_agg.c:422 +#: parser/parse_agg.c:421 msgid "aggregate functions are not allowed in window RANGE" msgstr "агрегатные функции нельзя применять в указании RANGE для окна" -#: parser/parse_agg.c:424 +#: parser/parse_agg.c:423 msgid "grouping operations are not allowed in window RANGE" msgstr "операции группировки нельзя применять в указании RANGE для окна" -#: parser/parse_agg.c:429 +#: parser/parse_agg.c:428 msgid "aggregate functions are not allowed in window ROWS" msgstr "агрегатные функции нельзя применять в указании ROWS для окна" -#: parser/parse_agg.c:431 +#: parser/parse_agg.c:430 msgid "grouping operations are not allowed in window ROWS" msgstr "операции группировки нельзя применять в указании ROWS для окна" -#: parser/parse_agg.c:436 +#: parser/parse_agg.c:435 msgid "aggregate functions are not allowed in window GROUPS" msgstr "агрегатные функции нельзя применять в указании GROUPS для окна" -#: parser/parse_agg.c:438 +#: parser/parse_agg.c:437 msgid "grouping operations are not allowed in window GROUPS" msgstr "операции группировки нельзя применять в указании GROUPS для окна" -#: parser/parse_agg.c:451 +#: parser/parse_agg.c:450 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "агрегатные функции нельзя применять в условиях MERGE WHEN" -#: parser/parse_agg.c:453 +#: parser/parse_agg.c:452 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "операции группировки нельзя применять в условиях MERGE WHEN" @@ -18298,7 +18811,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "операции группировки нельзя применять в условиях COPY FROM WHERE" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:597 parser/parse_clause.c:1956 +#: parser/parse_agg.c:597 parser/parse_clause.c:1962 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "агрегатные функции нельзя применять в конструкции %s" @@ -18325,8 +18838,8 @@ msgstr "" "вызовы агрегатных функций не могут включать вызовы функций, возвращающих " "множества" -#: parser/parse_agg.c:780 parser/parse_expr.c:1700 parser/parse_expr.c:2182 -#: parser/parse_func.c:884 +#: 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 " @@ -18360,82 +18873,82 @@ msgstr "оконные функции нельзя применять в опр msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "оконные функции нельзя применять в условиях MERGE WHEN" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:926 msgid "window functions are not allowed in check constraints" msgstr "оконные функции нельзя применять в ограничениях-проверках" -#: parser/parse_agg.c:929 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in DEFAULT expressions" msgstr "оконные функции нельзя применять в выражениях DEFAULT" -#: parser/parse_agg.c:932 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in index expressions" msgstr "оконные функции нельзя применять в выражениях индексов" -#: parser/parse_agg.c:935 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in statistics expressions" msgstr "оконные функции нельзя применять в выражениях статистики" -#: parser/parse_agg.c:938 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in index predicates" msgstr "оконные функции нельзя применять в предикатах индексов" -#: parser/parse_agg.c:941 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in transform expressions" msgstr "оконные функции нельзя применять в выражениях преобразований" -#: parser/parse_agg.c:944 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in EXECUTE parameters" msgstr "оконные функции нельзя применять в параметрах EXECUTE" -#: parser/parse_agg.c:947 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "оконные функции нельзя применять в условиях WHEN для триггеров" -#: parser/parse_agg.c:950 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in partition bound" msgstr "оконные функции нельзя применять в выражении границы секции" -#: parser/parse_agg.c:953 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in partition key expressions" msgstr "оконные функции нельзя применять в выражениях ключа секционирования" -#: parser/parse_agg.c:956 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in CALL arguments" msgstr "оконные функции нельзя применять в аргументах CALL" -#: parser/parse_agg.c:959 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "оконные функции нельзя применять в условиях COPY FROM WHERE" -#: parser/parse_agg.c:962 +#: 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:985 parser/parse_clause.c:1965 +#: 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:1019 parser/parse_clause.c:2798 +#: parser/parse_agg.c:1020 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "окно \"%s\" не существует" -#: parser/parse_agg.c:1107 +#: parser/parse_agg.c:1108 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "слишком много наборов группирования (при максимуме 4096)" -#: parser/parse_agg.c:1247 +#: 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:1440 +#: parser/parse_agg.c:1441 #, c-format msgid "" "column \"%s.%s\" must appear in the GROUP BY clause or be used in an " @@ -18444,7 +18957,7 @@ msgstr "" "столбец \"%s.%s\" должен фигурировать в предложении GROUP BY или " "использоваться в агрегатной функции" -#: parser/parse_agg.c:1443 +#: parser/parse_agg.c:1444 #, c-format msgid "" "Direct arguments of an ordered-set aggregate must use only grouped columns." @@ -18452,13 +18965,13 @@ msgstr "" "Прямые аргументы сортирующей агрегатной функции могут включать только " "группируемые столбцы." -#: parser/parse_agg.c:1448 +#: parser/parse_agg.c:1449 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "" "подзапрос использует негруппированный столбец \"%s.%s\" из внешнего запроса" -#: parser/parse_agg.c:1612 +#: parser/parse_agg.c:1613 #, c-format msgid "" "arguments to GROUPING must be grouping expressions of the associated query " @@ -18467,25 +18980,25 @@ msgstr "" "аргументами GROUPING должны быть выражения группирования для " "соответствующего уровня запроса" -#: parser/parse_clause.c:195 +#: parser/parse_clause.c:193 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "отношение \"%s\" не может быть целевым в операторе, изменяющем данные" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2552 +#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "" "функции, возвращающие множества, должны находиться на верхнем уровне FROM" -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:609 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "" "для одной и той же функции нельзя задать разные списки с определениями " "столбцов" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:642 #, c-format msgid "" "ROWS FROM() with multiple functions cannot have a column definition list" @@ -18493,7 +19006,7 @@ msgstr "" "у ROWS FROM() с несколькими функциями не может быть списка с определениями " "столбцов" -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:643 #, c-format msgid "" "Put a separate column definition list for each function inside ROWS FROM()." @@ -18501,14 +19014,14 @@ msgstr "" "Добавьте отдельные списки с определениями столбцов для каждой функции в ROWS " "FROM()." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:649 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "" "у UNNEST() с несколькими аргументами не может быть списка с определениями " "столбцов" -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:650 #, c-format msgid "" "Use separate UNNEST() calls inside ROWS FROM(), and attach a column " @@ -18517,43 +19030,43 @@ msgstr "" "Напишите отдельные вызовы UNNEST() внутри ROWS FROM() и добавьте список " "определений столбцов к каждому." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:657 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "" "WITH ORDINALITY нельзя использовать со списком с определениями столбцов" -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:658 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Поместите список определений столбцов внутрь ROWS FROM()." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:762 parser/parse_jsontable.c:295 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "FOR ORDINALITY допускается только для одного столбца" -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:823 #, c-format msgid "column name \"%s\" is not unique" msgstr "имя столбца \"%s\" не уникально" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:865 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "имя пространства имён \"%s\" не уникально" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:875 #, c-format msgid "only one default namespace is allowed" msgstr "допускается только одно пространство имён по умолчанию" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:935 #, c-format msgid "tablesample method %s does not exist" msgstr "метод %s для получения выборки не существует" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:957 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" @@ -18561,104 +19074,104 @@ msgstr[0] "метод %s для получения выборки требует msgstr[1] "метод %s для получения выборки требует аргументов: %d, получено: %d" msgstr[2] "метод %s для получения выборки требует аргументов: %d, получено: %d" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:991 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "метод %s для получения выборки не поддерживает REPEATABLE" -#: parser/parse_clause.c:1138 +#: parser/parse_clause.c:1144 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "" "предложение TABLESAMPLE можно применять только к таблицам и " "материализованным представлениям" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1331 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "имя столбца \"%s\" фигурирует в предложении USING неоднократно" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1346 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "имя общего столбца \"%s\" фигурирует в таблице слева неоднократно" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1355 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "в таблице слева нет столбца \"%s\", указанного в предложении USING" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1370 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "имя общего столбца \"%s\" фигурирует в таблице справа неоднократно" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1379 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "в таблице справа нет столбца \"%s\", указанного в предложении USING" -#: parser/parse_clause.c:1901 +#: parser/parse_clause.c:1907 #, c-format msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "" "количество строк в FETCH FIRST ... WITH TIES должно быть отличным от NULL" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:1932 #, c-format msgid "argument of %s must not contain variables" msgstr "аргумент %s не может содержать переменные" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2091 +#: parser/parse_clause.c:2097 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "выражение %s \"%s\" неоднозначно" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2119 +#: parser/parse_clause.c:2125 #, c-format msgid "non-integer constant in %s" msgstr "не целочисленная константа в %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2141 +#: parser/parse_clause.c:2147 #, c-format msgid "%s position %d is not in select list" msgstr "в списке выборки %s нет элемента %d" -#: parser/parse_clause.c:2580 +#: parser/parse_clause.c:2586 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE имеет ограничение в 12 элементов" -#: parser/parse_clause.c:2786 +#: parser/parse_clause.c:2792 #, c-format msgid "window \"%s\" is already defined" msgstr "окно \"%s\" уже определено" -#: parser/parse_clause.c:2847 +#: parser/parse_clause.c:2853 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "переопределить предложение PARTITION BY для окна \"%s\" нельзя" -#: parser/parse_clause.c:2859 +#: parser/parse_clause.c:2865 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "переопределить предложение ORDER BY для окна \"%s\" нельзя" -#: parser/parse_clause.c:2889 parser/parse_clause.c:2895 +#: parser/parse_clause.c:2895 parser/parse_clause.c:2901 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "скопировать окно \"%s\", имеющее предложение рамки, нельзя" -#: parser/parse_clause.c:2897 +#: parser/parse_clause.c:2903 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Уберите скобки в предложении OVER." -#: parser/parse_clause.c:2917 +#: parser/parse_clause.c:2923 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" @@ -18666,12 +19179,12 @@ msgstr "" "для RANGE со смещением PRECEDING/FOLLOWING требуется ровно один столбец в " "ORDER BY" -#: parser/parse_clause.c:2940 +#: parser/parse_clause.c:2946 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "для режима GROUPS требуется предложение ORDER BY" -#: parser/parse_clause.c:3011 +#: parser/parse_clause.c:3016 #, c-format msgid "" "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument " @@ -18680,68 +19193,68 @@ msgstr "" "для агрегатной функции с DISTINCT, выражения ORDER BY должны быть в списке " "аргументов" -#: parser/parse_clause.c:3012 +#: parser/parse_clause.c:3017 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "в конструкции SELECT DISTINCT выражения ORDER BY должны быть в списке выборки" -#: parser/parse_clause.c:3044 +#: parser/parse_clause.c:3049 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "агрегатной функции с DISTINCT нужен минимум один аргумент" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3050 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "в SELECT DISTINCT нужен минимум один столбец" -#: parser/parse_clause.c:3111 parser/parse_clause.c:3143 +#: parser/parse_clause.c:3116 parser/parse_clause.c:3148 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "" "выражения SELECT DISTINCT ON должны соответствовать начальным выражениям " "ORDER BY" -#: parser/parse_clause.c:3221 +#: parser/parse_clause.c:3226 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC нельзя использовать в ON CONFLICT" -#: parser/parse_clause.c:3227 +#: parser/parse_clause.c:3232 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST нельзя использовать в ON CONFLICT" -#: parser/parse_clause.c:3306 +#: parser/parse_clause.c:3311 #, c-format msgid "" "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "" "в ON CONFLICT DO UPDATE требуется наводящее указание или имя ограничения" -#: parser/parse_clause.c:3307 +#: parser/parse_clause.c:3312 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Например: ON CONFLICT (имя_столбца)." -#: parser/parse_clause.c:3318 +#: parser/parse_clause.c:3323 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT с таблицами системного каталога не поддерживается" -#: parser/parse_clause.c:3326 +#: parser/parse_clause.c:3331 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "" "ON CONFLICT не поддерживается для таблицы \"%s\", служащей таблицей каталога" -#: parser/parse_clause.c:3457 +#: parser/parse_clause.c:3462 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "оператор %s не годится для сортировки" -#: parser/parse_clause.c:3459 +#: parser/parse_clause.c:3464 #, c-format msgid "" "Ordering operators must be \"<\" or \">\" members of btree operator families." @@ -18749,14 +19262,14 @@ msgstr "" "Операторы сортировки должны быть членами \"<\" или \">\" семейств операторов " "btree." -#: parser/parse_clause.c:3770 +#: parser/parse_clause.c:3775 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "" "RANGE со смещением PRECEDING/FOLLOWING не поддерживается для типа столбца %s" -#: parser/parse_clause.c:3776 +#: parser/parse_clause.c:3781 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s " @@ -18765,12 +19278,12 @@ msgstr "" "RANGE со смещением PRECEDING/FOLLOWING не поддерживается для типа столбца %s " "и типа смещения %s" -#: parser/parse_clause.c:3779 +#: parser/parse_clause.c:3784 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Приведите значение смещения к подходящему типу." -#: parser/parse_clause.c:3784 +#: parser/parse_clause.c:3789 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for " @@ -18779,15 +19292,15 @@ msgstr "" "RANGE со смещением PRECEDING/FOLLOWING допускает несколько интерпретаций для " "типа столбца %s и типа смещения %s" -#: parser/parse_clause.c:3787 +#: parser/parse_clause.c:3792 #, c-format 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:2083 parser/parse_expr.c:2691 parser/parse_expr.c:3497 -#: parser/parse_target.c:999 +#: 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 нельзя" @@ -18822,112 +19335,112 @@ msgid "argument of %s must not return a set" msgstr "аргумент конструкции %s не должен возвращать множество" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1383 +#: parser/parse_coerce.c:1420 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "в конструкции %s типы %s и %s не имеют общего" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, c-format msgid "argument types %s and %s cannot be matched" msgstr "типы аргументов %s и %s не имеют общего" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1551 +#: parser/parse_coerce.c:1588 #, c-format msgid "%s could not convert type %s to %s" msgstr "в конструкции %s нельзя преобразовать тип %s в %s" -#: parser/parse_coerce.c:2154 parser/parse_coerce.c:2174 -#: parser/parse_coerce.c:2194 parser/parse_coerce.c:2215 -#: parser/parse_coerce.c:2270 parser/parse_coerce.c:2304 +#: parser/parse_coerce.c:2191 parser/parse_coerce.c:2211 +#: parser/parse_coerce.c:2231 parser/parse_coerce.c:2252 +#: parser/parse_coerce.c:2307 parser/parse_coerce.c:2341 #, c-format msgid "arguments declared \"%s\" are not all alike" msgstr "аргументы, объявленные как \"%s\", должны быть однотипными" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 #: utils/fmgr/funcapi.c: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 +#: 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 "аргумент, объявленный как \"%s\", не согласуется с аргументом %s" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" "не удалось определить полиморфный тип, так как входные аргументы имеют тип %s" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "" "в нарушение объявления \"anynonarray\" соответствующий аргумент оказался " "массивом: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2535 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "" "в нарушение объявления \"anyenum\" соответствующий аргумент оказался не " "перечислением: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "" "аргументы семейства anycompatible не могут быть приведены к общему типу" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 -#: parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 -#: parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2614 parser/parse_coerce.c:2635 +#: parser/parse_coerce.c:2685 parser/parse_coerce.c:2690 +#: parser/parse_coerce.c:2754 parser/parse_coerce.c:2766 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "" "не удалось определить полиморфный тип %s, так как входные аргументы имеют " "тип %s" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "тип %s (anycompatiblerange) не соответствует типу %s (anycompatible)" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "" "тип %s (anycompatiblemultirange) не соответствует типу %s (anycompatible)" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "" "в нарушение объявления \"anycompatiblenonarray\" соответствующий аргумент " "оказался массивом: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, c-format msgid "" "A result of type %s requires at least one input of type anyrange or " @@ -18936,7 +19449,7 @@ msgstr "" "Для результата типа %s требуется минимум один аргумент типа anyrange или " "anymultirange." -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format msgid "" "A result of type %s requires at least one input of type anycompatiblerange " @@ -18945,7 +19458,7 @@ msgstr "" "Для результата типа %s требуется минимум один аргумент типа " "anycompatiblerange или anycompatiblemultirange." -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format msgid "" "A result of type %s requires at least one input of type anyelement, " @@ -18954,7 +19467,7 @@ msgstr "" "Для результата типа %s требуется минимум один аргумент типа anyelement, " "anyarray, anynonarray, anyenum, anyrange или anymultirange." -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "" "A result of type %s requires at least one input of type anycompatible, " @@ -18965,7 +19478,7 @@ msgstr "" "anycompatiblearray, anycompatiblenonarray, anycompatiblerange или " "anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "" "Для результата типа internal требуется минимум один аргумент типа internal." @@ -19024,22 +19537,17 @@ msgstr "рекурсивная ссылка на запрос \"%s\" не дол msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "рекурсивная ссылка на запрос \"%s\" не должна фигурировать в EXCEPT" -#: parser/parse_cte.c:133 -#, c-format -msgid "MERGE not supported in WITH query" -msgstr "MERGE не поддерживается в запросе WITH" - -#: parser/parse_cte.c:143 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "имя запроса WITH \"%s\" указано неоднократно" -#: parser/parse_cte.c:314 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "не удалось найти оператор неравенства для типа %s" -#: parser/parse_cte.c:341 +#: parser/parse_cte.c:335 #, c-format msgid "" "WITH clause containing a data-modifying statement must be at the top level" @@ -19047,7 +19555,7 @@ msgstr "" "предложение WITH, содержащее оператор, изменяющий данные, должно быть на " "верхнем уровне" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:384 #, c-format msgid "" "recursive query \"%s\" column %d has type %s in non-recursive term but type " @@ -19056,12 +19564,12 @@ msgstr "" "в рекурсивном запросе \"%s\" столбец %d имеет тип %s в нерекурсивной части, " "но в результате тип %s" -#: parser/parse_cte.c:396 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Приведите результат нерекурсивной части к правильному типу." -#: parser/parse_cte.c:401 +#: parser/parse_cte.c:395 #, c-format msgid "" "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term " @@ -19070,43 +19578,43 @@ msgstr "" "в рекурсивном запросе \"%s\" у столбца %d правило сортировки \"%s\" в не " "рекурсивной части, но в результате правило \"%s\"" -#: parser/parse_cte.c:405 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "" "Измените правило сортировки в нерекурсивной части, добавив предложение " "COLLATE." -#: parser/parse_cte.c:426 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "запрос WITH не рекурсивный" -#: parser/parse_cte.c:457 +#: parser/parse_cte.c:451 #, c-format msgid "" "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "" "с предложением SEARCH или CYCLE в левой стороне UNION должен быть SELECT" -#: parser/parse_cte.c:462 +#: parser/parse_cte.c:456 #, c-format msgid "" "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "" "с предложением SEARCH или CYCLE в правой стороне UNION должен быть SELECT" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "столбец поиска \"%s\" отсутствует в списке столбцов запроса WITH" -#: parser/parse_cte.c:484 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "столбец поиска \"%s\" указан неоднократно" -#: parser/parse_cte.c:493 +#: parser/parse_cte.c:487 #, c-format msgid "" "search sequence column name \"%s\" already used in WITH query column list" @@ -19114,64 +19622,64 @@ msgstr "" "имя столбца последовательности поиска \"%s\" уже используется в списке " "столбцов запроса WITH" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "столбец цикла \"%s\" отсутствует в списке столбцов запроса WITH" -#: parser/parse_cte.c:517 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "столбец цикла \"%s\" указан неоднократно" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "" "имя столбца пометки цикла \"%s\" уже используется в списке столбцов запроса " "WITH" -#: parser/parse_cte.c:533 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "" "имя столбца пути цикла \"%s\" уже используется в списке столбцов запроса WITH" -#: parser/parse_cte.c:541 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "имя столбца пометки цикла совпадает с именем столбца пути цикла" -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "" "имя столбца последовательности поиска совпадает с именем столбца пометки " "цикла" -#: parser/parse_cte.c:558 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "" "имя столбца последовательности поиска совпадает с именем столбца пути цикла" -#: parser/parse_cte.c:642 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "запрос WITH \"%s\" содержит столбцов: %d, но указано: %d" -#: parser/parse_cte.c:822 +#: parser/parse_cte.c:816 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "взаимная рекурсия между элементами WITH не реализована" -#: parser/parse_cte.c:874 +#: parser/parse_cte.c:868 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "" "рекурсивный запрос \"%s\" не должен содержать операторов, изменяющих данные" -#: parser/parse_cte.c:882 +#: parser/parse_cte.c:876 #, c-format msgid "" "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] " @@ -19180,102 +19688,110 @@ msgstr "" "рекурсивный запрос \"%s\" должен иметь форму {нерекурсивная часть} UNION " "[ALL] {рекурсивная часть}" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:911 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:917 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:923 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:944 +#: 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:1001 +#: parser/parse_cte.c:1008 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "рекурсивная ссылка на запрос \"%s\" указана неоднократно" -#: parser/parse_expr.c:294 +#: parser/parse_expr.c:313 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT не допускается в данном контексте" -#: parser/parse_expr.c:371 parser/parse_relation.c:3697 -#: parser/parse_relation.c:3707 parser/parse_relation.c:3725 -#: parser/parse_relation.c:3732 parser/parse_relation.c:3746 +#: 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:383 +#: parser/parse_expr.c:418 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "столбец \"%s\" не найден в типе данных %s" -#: parser/parse_expr.c:389 +#: parser/parse_expr.c:424 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "не удалось идентифицировать столбец \"%s\" в типе записи" # skip-rule: space-before-period -#: parser/parse_expr.c:395 +#: parser/parse_expr.c:430 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "" "запись имени столбца .%s применена к типу %s, который не является составным" -#: parser/parse_expr.c:426 parser/parse_target.c:733 +#: 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:548 +#: parser/parse_expr.c:584 msgid "cannot use column reference in DEFAULT expression" msgstr "в выражении DEFAULT (по умолчанию) нельзя ссылаться на столбцы" -#: parser/parse_expr.c:551 +#: parser/parse_expr.c:587 msgid "cannot use column reference in partition bound expression" msgstr "в выражении границы секции нельзя ссылаться на столбцы" -#: parser/parse_expr.c:810 parser/parse_relation.c:833 -#: parser/parse_relation.c:915 parser/parse_target.c:1239 +#: 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:866 parser/parse_param.c:110 parser/parse_param.c:142 +#: 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:1066 +#. 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 "для NULLIF требуется, чтобы оператор = возвращал логическое значение" +msgid "%s requires = operator to yield boolean" +msgstr "для %s требуется, чтобы оператор = возвращал логическое значение" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1072 parser/parse_expr.c:3007 +#: parser/parse_expr.c:1109 parser/parse_expr.c:3072 #, c-format msgid "%s must not return a set" msgstr "%s не должна возвращать множество" -#: parser/parse_expr.c:1457 parser/parse_expr.c:1489 +#: parser/parse_expr.c:1395 +#, c-format +msgid "" +"MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" +msgstr "" +"MERGE_ACTION() может использоваться только в списке RETURNING команды MERGE" + +#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 #, c-format msgid "number of columns does not match number of values" msgstr "число столбцов не равно числу значений" -#: parser/parse_expr.c:1503 +#: parser/parse_expr.c:1565 #, c-format msgid "" "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() " @@ -19285,224 +19801,357 @@ msgstr "" "SELECT или выражение ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1698 parser/parse_expr.c:2180 parser/parse_func.c:2677 +#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "функции, возвращающие множества, нельзя применять в конструкции %s" -#: parser/parse_expr.c:1761 +#: parser/parse_expr.c:1824 msgid "cannot use subquery in check constraint" msgstr "в ограничении-проверке нельзя использовать подзапросы" -#: parser/parse_expr.c:1765 +#: parser/parse_expr.c:1828 msgid "cannot use subquery in DEFAULT expression" msgstr "в выражении DEFAULT нельзя использовать подзапросы" -#: parser/parse_expr.c:1768 +#: parser/parse_expr.c:1831 msgid "cannot use subquery in index expression" msgstr "в индексном выражении нельзя использовать подзапросы" -#: parser/parse_expr.c:1771 +#: parser/parse_expr.c:1834 msgid "cannot use subquery in index predicate" msgstr "в предикате индекса нельзя использовать подзапросы" -#: parser/parse_expr.c:1774 +#: parser/parse_expr.c:1837 msgid "cannot use subquery in statistics expression" msgstr "в выражении статистики нельзя использовать подзапросы" -#: parser/parse_expr.c:1777 +#: parser/parse_expr.c:1840 msgid "cannot use subquery in transform expression" msgstr "нельзя использовать подзапрос в выражении преобразования" -#: parser/parse_expr.c:1780 +#: parser/parse_expr.c:1843 msgid "cannot use subquery in EXECUTE parameter" msgstr "в качестве параметра EXECUTE нельзя использовать подзапрос" -#: parser/parse_expr.c:1783 +#: parser/parse_expr.c:1846 msgid "cannot use subquery in trigger WHEN condition" msgstr "в условии WHEN для триггера нельзя использовать подзапросы" -#: parser/parse_expr.c:1786 +#: parser/parse_expr.c:1849 msgid "cannot use subquery in partition bound" msgstr "в выражении границы секции нельзя использовать подзапросы" -#: parser/parse_expr.c:1789 +#: parser/parse_expr.c:1852 msgid "cannot use subquery in partition key expression" msgstr "в выражении ключа секционирования нельзя использовать подзапросы" -#: parser/parse_expr.c:1792 +#: parser/parse_expr.c:1855 msgid "cannot use subquery in CALL argument" msgstr "в качестве аргумента CALL нельзя использовать подзапрос" -#: parser/parse_expr.c:1795 +#: parser/parse_expr.c:1858 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "в условии COPY FROM WHERE нельзя использовать подзапросы" -#: parser/parse_expr.c:1798 +#: parser/parse_expr.c:1861 msgid "cannot use subquery in column generation expression" msgstr "в выражении генерируемого столбца нельзя использовать подзапросы" -#: parser/parse_expr.c:1851 parser/parse_expr.c:3628 +#: parser/parse_expr.c:1914 parser/parse_expr.c:3764 #, c-format msgid "subquery must return only one column" msgstr "подзапрос должен вернуть только один столбец" -#: parser/parse_expr.c:1922 +#: parser/parse_expr.c:1985 #, c-format msgid "subquery has too many columns" msgstr "в подзапросе слишком много столбцов" -#: parser/parse_expr.c:1927 +#: parser/parse_expr.c:1990 #, c-format msgid "subquery has too few columns" msgstr "в подзапросе недостаточно столбцов" -#: parser/parse_expr.c:2023 +#: parser/parse_expr.c:2086 #, c-format msgid "cannot determine type of empty array" msgstr "тип пустого массива определить нельзя" -#: parser/parse_expr.c:2024 +#: parser/parse_expr.c:2087 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "" "Приведите его к желаемому типу явным образом, например ARRAY[]::integer[]." -#: parser/parse_expr.c:2038 +#: parser/parse_expr.c:2101 #, c-format msgid "could not find element type for data type %s" msgstr "не удалось определить тип элемента для типа данных %s" -#: parser/parse_expr.c:2121 +#: parser/parse_expr.c:2184 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "число элементов в выражениях ROW ограничено %d" -#: parser/parse_expr.c:2326 +#: parser/parse_expr.c:2389 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "вместо значения XML-атрибута без имени должен указываться столбец" -#: parser/parse_expr.c:2327 +#: parser/parse_expr.c:2390 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "вместо значения XML-элемента без имени должен указываться столбец" -#: parser/parse_expr.c:2342 +#: parser/parse_expr.c:2405 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "имя XML-атрибута \"%s\" указано неоднократно" -#: parser/parse_expr.c:2450 +#: parser/parse_expr.c:2513 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "привести результат XMLSERIALIZE к типу %s нельзя" -#: parser/parse_expr.c:2764 parser/parse_expr.c:2960 +#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 #, c-format msgid "unequal number of entries in row expressions" msgstr "разное число элементов в строках" -#: parser/parse_expr.c:2774 +#: parser/parse_expr.c:2837 #, c-format msgid "cannot compare rows of zero length" msgstr "строки нулевой длины сравнивать нельзя" -#: parser/parse_expr.c:2799 +#: parser/parse_expr.c:2862 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "оператор сравнения строк должен выдавать результат логического типа, а не %s" -#: parser/parse_expr.c:2806 +#: parser/parse_expr.c:2869 #, c-format msgid "row comparison operator must not return a set" msgstr "оператор сравнения строк не должен возвращать множество" -#: parser/parse_expr.c:2865 parser/parse_expr.c:2906 +#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "не удалось выбрать интерпретацию оператора сравнения строк %s" -#: parser/parse_expr.c:2867 +#: parser/parse_expr.c:2930 #, c-format msgid "" "Row comparison operators must be associated with btree operator families." msgstr "" "Операторы сравнения строк должны быть связаны с семейством операторов btree." -#: parser/parse_expr.c:2908 +#: parser/parse_expr.c:2971 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Оказалось несколько равноценных кандидатур." -#: parser/parse_expr.c:3001 -#, c-format -msgid "IS DISTINCT FROM requires = operator to yield boolean" -msgstr "" -"для IS DISTINCT FROM требуется, чтобы оператор = возвращал логическое " -"значение" - -#: parser/parse_expr.c:3239 +#: parser/parse_expr.c:3306 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "" "предложение JSON ENCODING можно добавить только для входного типа bytea" -#: parser/parse_expr.c:3261 +#: parser/parse_expr.c:3370 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "" "с неявным предложением FORMAT JSON можно использовать только строковые типы" -#: parser/parse_expr.c:3262 +#: parser/parse_expr.c:3371 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "" "с явным предложением FORMAT JSON можно использовать только строковые типы" -#: parser/parse_expr.c:3335 +#: parser/parse_expr.c:3460 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "формат JSON можно использовать, только если возвращаемый тип строковый" -#: parser/parse_expr.c:3348 +#: parser/parse_expr.c:3473 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "" "кодировку JSON можно использовать, только если возвращаемый тип — bytea" -#: parser/parse_expr.c:3353 +#: parser/parse_expr.c:3478 #, c-format msgid "unsupported JSON encoding" msgstr "неподдерживаемая кодировка JSON" -#: parser/parse_expr.c:3354 +#: parser/parse_expr.c:3479 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "Для JSON поддерживается только кодировка UTF-8." -#: parser/parse_expr.c:3391 +#: parser/parse_expr.c:3516 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "функции SQL/JSON не могут возвращать типы SETOF" -#: parser/parse_expr.c:3712 parser/parse_func.c:865 +#: 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: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:3934 +#: parser/parse_expr.c:4072 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "" "предложение JSON FORMAT ENCODING можно использовать только с типом bytea" -#: parser/parse_expr.c:3954 +#: parser/parse_expr.c:4092 #, c-format msgid "cannot use type %s in IS JSON predicate" msgstr "в предикате IS JSON нельзя использовать тип %s" +#: parser/parse_expr.c:4118 parser/parse_expr.c:4239 +#, c-format +msgid "cannot use type %s in RETURNING clause of %s" +msgstr "тип %s нельзя использовать в предложении RETURNING функции %s" + +#: parser/parse_expr.c:4120 +#, c-format +msgid "Try returning json or jsonb." +msgstr "Попробуйте возвратить тип json или jsonb." + +#: parser/parse_expr.c:4168 +#, c-format +msgid "cannot use non-string types with WITH UNIQUE KEYS clause" +msgstr "" +"с предложением WITH UNIQUE KEYS можно использовать только строковые типы " +"данных" + +#: parser/parse_expr.c:4242 +#, c-format +msgid "Try returning a string type or bytea." +msgstr "Попробуйте возвратить строковый тип или bytea." + +#: parser/parse_expr.c:4307 +#, c-format +msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" +msgstr "FORMAT JSON не может указываться в предложении RETURNING %s()" + +#: parser/parse_expr.c:4320 +#, c-format +msgid "" +"SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" +msgstr "" +"когда используется WITH WRAPPER, поведение QUOTES в SQL/JSON задать нельзя" + +#. 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 "" +"В %s для %s допускается только ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT или " +"выражение DEFAULT." + +#. 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 "" +"В %s для форматируемых столбцов допускается только ERROR, NULL, EMPTY ARRAY, " +"EMPTY OBJECT или выражение DEFAULT." + +#: parser/parse_expr.c:4395 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for %s." +msgstr "В %s для %s допускается только ERROR, TRUE, FALSE или UNKNOWN." + +#. 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 "" +"В %s для столбцов в EXISTS допускается только ERROR, TRUE, FALSE или UNKNOWN." + +#. 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 "В %s для %s допускается только ERROR, NULL или выражение DEFAULT." + +#. 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 "" +"В %s для скалярных столбцов допускается только ERROR, NULL или выражение " +"DEFAULT." + +#: 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:4707 +#, c-format +msgid "" +"can only specify a constant, non-aggregate function, or operator expression " +"for DEFAULT" +msgstr "" +"в DEFAULT может задаваться только константа, вызов не агрегатной функции или " +"выражение с оператором" + +#: parser/parse_expr.c:4712 +#, c-format +msgid "DEFAULT expression must not contain column references" +msgstr "выражения в DEFAULT не могут содержать ссылки на столбцы" + +#: parser/parse_expr.c:4717 +#, c-format +msgid "DEFAULT expression must not return a set" +msgstr "выражение в DEFAULT не может возвращать множество" + +#: 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" @@ -19513,7 +20162,7 @@ msgstr "имя аргумента \"%s\" используется неоднок msgid "positional argument cannot follow named argument" msgstr "нумерованный аргумент не может следовать за именованным аргументом" -#: parser/parse_func.c:287 parser/parse_func.c:2367 +#: parser/parse_func.c:287 parser/parse_func.c:2368 #, c-format msgid "%s is not a procedure" msgstr "\"%s\" — не процедура" @@ -19675,7 +20324,7 @@ msgstr "" "Возможно, неверно расположено предложение ORDER BY - оно должно следовать за " "всеми обычными аргументами функции." -#: parser/parse_func.c:622 parser/parse_func.c:2410 +#: parser/parse_func.c:622 parser/parse_func.c:2411 #, c-format msgid "procedure %s does not exist" msgstr "процедура %s не существует" @@ -19703,7 +20352,7 @@ msgstr "" msgid "VARIADIC argument must be an array" msgstr "параметр VARIADIC должен быть массивом" -#: parser/parse_func.c:791 parser/parse_func.c:855 +#: parser/parse_func.c:791 parser/parse_func.c:856 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "агрегатная функция без параметров должна вызываться так: %s(*)" @@ -19718,44 +20367,44 @@ msgstr "агрегатные функции не могут возвращать msgid "aggregates cannot use named arguments" msgstr "у агрегатных функций не может быть именованных аргументов" -#: parser/parse_func.c:845 +#: parser/parse_func.c:846 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "предложение DISTINCT для оконных функций не реализовано" -#: parser/parse_func.c:874 +#: parser/parse_func.c:875 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "предложение FILTER для не агрегатных оконных функций не реализовано" -#: parser/parse_func.c:883 +#: parser/parse_func.c:884 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "" "вызовы оконных функций не могут включать вызовы функций, возвращающих " "множества" -#: parser/parse_func.c:891 +#: parser/parse_func.c:892 #, c-format msgid "window functions cannot return sets" msgstr "оконные функции не могут возвращать множества" -#: parser/parse_func.c:2166 parser/parse_func.c:2439 +#: parser/parse_func.c:2167 parser/parse_func.c:2440 #, c-format msgid "could not find a function named \"%s\"" msgstr "не удалось найти функцию с именем \"%s\"" -#: parser/parse_func.c:2180 parser/parse_func.c:2457 +#: parser/parse_func.c:2181 parser/parse_func.c:2458 #, c-format msgid "function name \"%s\" is not unique" msgstr "имя функции \"%s\" не уникально" -#: parser/parse_func.c:2182 parser/parse_func.c:2460 +#: parser/parse_func.c:2183 parser/parse_func.c:2461 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Задайте список аргументов для однозначного выбора функции." -#: parser/parse_func.c:2226 +#: parser/parse_func.c:2227 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" @@ -19763,207 +20412,209 @@ msgstr[0] "процедуры допускают не более %d аргуме msgstr[1] "процедуры допускают не более %d аргументов" msgstr[2] "процедуры допускают не более %d аргументов" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2358 #, c-format msgid "%s is not a function" msgstr "%s — не функция" -#: parser/parse_func.c:2377 +#: parser/parse_func.c:2378 #, c-format msgid "function %s is not an aggregate" msgstr "функция \"%s\" не является агрегатной" -#: parser/parse_func.c:2405 +#: parser/parse_func.c:2406 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "не удалось найти процедуру с именем \"%s\"" -#: parser/parse_func.c:2419 +#: parser/parse_func.c:2420 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "не удалось найти агрегат с именем \"%s\"" -#: parser/parse_func.c:2424 +#: parser/parse_func.c:2425 #, c-format msgid "aggregate %s(*) does not exist" msgstr "агрегатная функция %s(*) не существует" -#: parser/parse_func.c:2429 +#: parser/parse_func.c:2430 #, c-format msgid "aggregate %s does not exist" msgstr "агрегатная функция %s не существует" -#: parser/parse_func.c:2465 +#: parser/parse_func.c:2466 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "имя процедуры \"%s\" не уникально" -#: parser/parse_func.c:2468 +#: parser/parse_func.c:2469 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Задайте список аргументов для однозначного выбора процедуры." -#: parser/parse_func.c:2473 +#: parser/parse_func.c:2474 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "имя агрегатной функции \"%s\" не уникально" -#: parser/parse_func.c:2476 +#: parser/parse_func.c:2477 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Задайте список аргументов для однозначного выбора агрегатной функции." -#: parser/parse_func.c:2481 +#: parser/parse_func.c:2482 #, c-format msgid "routine name \"%s\" is not unique" msgstr "имя подпрограммы \"%s\" не уникально" -#: parser/parse_func.c:2484 +#: parser/parse_func.c:2485 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Задайте список аргументов для однозначного выбора подпрограммы." -#: parser/parse_func.c:2539 +#: parser/parse_func.c:2540 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "функции, возвращающие множества, нельзя применять в условиях JOIN" -#: parser/parse_func.c:2560 +#: parser/parse_func.c:2561 msgid "set-returning functions are not allowed in policy expressions" msgstr "функции, возвращающие множества, нельзя применять в выражениях политик" -#: parser/parse_func.c:2576 +#: parser/parse_func.c:2577 msgid "set-returning functions are not allowed in window definitions" msgstr "функции, возвращающие множества, нельзя применять в определении окна" -#: parser/parse_func.c:2613 +#: parser/parse_func.c:2615 msgid "set-returning functions are not allowed in MERGE WHEN conditions" msgstr "" "функции, возвращающие множества, нельзя применять в условиях MERGE WHEN" -#: parser/parse_func.c:2617 +#: parser/parse_func.c:2619 msgid "set-returning functions are not allowed in check constraints" msgstr "" "функции, возвращающие множества, нельзя применять в ограничениях-проверках" -#: parser/parse_func.c:2621 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "функции, возвращающие множества, нельзя применять в выражениях DEFAULT" -#: parser/parse_func.c:2624 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях индексов" -#: parser/parse_func.c:2627 +#: parser/parse_func.c:2629 msgid "set-returning functions are not allowed in index predicates" msgstr "" "функции, возвращающие множества, нельзя применять в предикатах индексов" -#: parser/parse_func.c:2630 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in statistics expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях статистики" -#: parser/parse_func.c:2633 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in transform expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях преобразований" -#: parser/parse_func.c:2636 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "функции, возвращающие множества, нельзя применять в параметрах EXECUTE" -#: parser/parse_func.c:2639 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "" "функции, возвращающие множества, нельзя применять в условиях WHEN для " "триггеров" -#: parser/parse_func.c:2642 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition bound" msgstr "" "функции, возвращающие множества, нельзя применять в выражении границы секции" -#: parser/parse_func.c:2645 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in partition key expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях ключа " "секционирования" -#: parser/parse_func.c:2648 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in CALL arguments" msgstr "функции, возвращающие множества, нельзя применять в аргументах CALL" -#: parser/parse_func.c:2651 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "" "функции, возвращающие множества, нельзя применять в условиях COPY FROM WHERE" -#: parser/parse_func.c:2654 +#: parser/parse_func.c:2656 msgid "" "set-returning functions are not allowed in column generation expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях генерируемых " "столбцов" -#: parser/parse_merge.c:119 +#: parser/parse_jsontable.c:95 +#, c-format +msgid "" +"Only EMPTY [ ARRAY ] or ERROR is allowed in the top-level ON ERROR clause." +msgstr "" +"На верхнем уровне предложения ON ERROR допускается только EMPTY [ ARRAY ] " +"или ERROR." + +#: parser/parse_jsontable.c:189 parser/parse_jsontable.c:203 +#, c-format +msgid "duplicate JSON_TABLE column or path name: %s" +msgstr "повторяющийся столбец или имя пути в JSON_TABLE: %s" + +#: parser/parse_merge.c:129 #, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" msgstr "предложение WITH RECURSIVE не поддерживается с оператором MERGE" -#: parser/parse_merge.c:166 +#: parser/parse_merge.c:176 #, c-format msgid "unreachable WHEN clause specified after unconditional WHEN clause" msgstr "" "после безусловного предложения WHEN указано недостижимое предложение WHEN" -#: parser/parse_merge.c:196 -#, c-format -msgid "MERGE is not supported for relations with rules." -msgstr "MERGE не поддерживается для отношений с правилами." - -#: parser/parse_merge.c:213 +#: parser/parse_merge.c:222 #, c-format msgid "name \"%s\" specified more than once" msgstr "имя \"%s\" указано больше одного раза" -#: parser/parse_merge.c:215 +#: parser/parse_merge.c:224 #, c-format msgid "The name is used both as MERGE target table and data source." msgstr "Это имя используется и в целевой таблице, и в источнике данных MERGE." -#: parser/parse_node.c:87 +#: parser/parse_node.c:82 #, c-format msgid "target lists can have at most %d entries" msgstr "число элементов в целевом списке ограничено %d" -#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#: parser/parse_oper.c:114 parser/parse_oper.c:678 #, c-format msgid "postfix operators are not supported" msgstr "постфиксные операторы не поддерживаются" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:509 -#: utils/adt/regproc.c:683 -#, c-format -msgid "operator does not exist: %s" -msgstr "оператор не существует: %s" - -#: parser/parse_oper.c:229 +#: parser/parse_oper.c:217 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Используйте явный оператор сортировки или измените запрос." -#: parser/parse_oper.c:485 +#: parser/parse_oper.c:473 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "оператору требуется приведение типов во время выполнения: %s" -#: parser/parse_oper.c:641 +#: parser/parse_oper.c:629 #, c-format msgid "operator is not unique: %s" msgstr "оператор не уникален: %s" -#: parser/parse_oper.c:643 +#: parser/parse_oper.c:631 #, c-format msgid "" "Could not choose a best candidate operator. You might need to add explicit " @@ -19972,7 +20623,7 @@ msgstr "" "Не удалось выбрать лучшую кандидатуру оператора. Возможно, вам следует " "добавить явные приведения типов." -#: parser/parse_oper.c:652 +#: parser/parse_oper.c:640 #, c-format msgid "" "No operator matches the given name and argument type. You might need to add " @@ -19981,7 +20632,7 @@ msgstr "" "Оператор с данным именем и типом аргумента не найден. Возможно, вам следует " "добавить явное приведение типа." -#: parser/parse_oper.c:654 +#: parser/parse_oper.c:642 #, c-format msgid "" "No operator matches the given name and argument types. You might need to add " @@ -19990,24 +20641,19 @@ msgstr "" "Оператор с данными именем и типами аргументов не найден. Возможно, вам " "следует добавить явные приведения типов." -#: parser/parse_oper.c:714 parser/parse_oper.c:828 -#, c-format -msgid "operator is only a shell: %s" -msgstr "оператор \"%s\" - лишь оболочка" - -#: parser/parse_oper.c:816 +#: parser/parse_oper.c:803 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "для операторов ANY/ALL (с массивом) требуется массив справа" -#: parser/parse_oper.c:858 +#: parser/parse_oper.c:844 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "" "для операторов ANY/ALL (с массивом) требуется, чтобы оператор = возвращал " "логическое значение" -#: parser/parse_oper.c:863 +#: parser/parse_oper.c:849 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "" @@ -20019,7 +20665,7 @@ msgstr "" msgid "inconsistent types deduced for parameter $%d" msgstr "для параметра $%d выведены несогласованные типы" -#: 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" @@ -20039,13 +20685,13 @@ msgstr "ссылка на таблицу %u неоднозначна" msgid "table name \"%s\" specified more than once" msgstr "имя таблицы \"%s\" указано больше одного раза" -#: parser/parse_relation.c:494 parser/parse_relation.c:3639 -#: parser/parse_relation.c:3648 +#: parser/parse_relation.c:494 parser/parse_relation.c:3633 +#: parser/parse_relation.c:3642 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "в элементе предложения FROM неверная ссылка на таблицу \"%s\"" -#: parser/parse_relation.c:498 parser/parse_relation.c:3650 +#: parser/parse_relation.c:498 parser/parse_relation.c:3644 #, c-format msgid "" "There is an entry for table \"%s\", but it cannot be referenced from this " @@ -20077,7 +20723,7 @@ msgid "cannot use system column \"%s\" in MERGE WHEN condition" msgstr "системный столбец \"%s\" нельзя использовать в условии MERGE WHEN" #: parser/parse_relation.c:1236 parser/parse_relation.c:1691 -#: parser/parse_relation.c:2388 +#: parser/parse_relation.c:2384 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "в таблице \"%s\" содержится столбцов: %d, но указано: %d" @@ -20099,13 +20745,13 @@ msgstr "" "Используйте WITH RECURSIVE или исключите ссылки вперёд, переупорядочив " "элементы WITH." -#: parser/parse_relation.c:1834 +#: parser/parse_relation.c:1833 #, c-format msgid "" "a column definition list is redundant for a function with OUT parameters" msgstr "список определений столбцов не нужен для функции с параметрами OUT" -#: parser/parse_relation.c:1840 +#: parser/parse_relation.c:1839 #, c-format msgid "" "a column definition list is redundant for a function returning a named " @@ -20114,79 +20760,79 @@ msgstr "" "список определений столбцов не нужен для функции, возвращающий именованный " "составной тип" -#: parser/parse_relation.c:1847 +#: parser/parse_relation.c:1846 #, c-format msgid "" "a column definition list is only allowed for functions returning \"record\"" msgstr "" "список определений столбцов может быть только у функций, возвращающих запись" -#: parser/parse_relation.c:1858 +#: parser/parse_relation.c:1857 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "" "у функций, возвращающих запись, должен быть список определений столбцов" -#: parser/parse_relation.c:1895 +#: parser/parse_relation.c:1894 #, c-format msgid "column definition lists can have at most %d entries" msgstr "число элементов в списках определения столбцов ограничено %d" -#: parser/parse_relation.c:1955 +#: parser/parse_relation.c:1954 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "" "функция \"%s\", используемая во FROM, возвращает неподдерживаемый тип %s" -#: parser/parse_relation.c:1982 parser/parse_relation.c:2068 +#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 #, c-format msgid "functions in FROM can return at most %d columns" msgstr "число столбцов, возвращаемых функциями во FROM, ограничено %d" -#: parser/parse_relation.c:2098 +#: parser/parse_relation.c:2096 #, c-format msgid "%s function has %d columns available but %d columns specified" msgstr "функция %s выдаёт столбцов: %d, но указано: %d" -#: parser/parse_relation.c:2180 +#: parser/parse_relation.c:2177 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "в списках VALUES \"%s\" содержится столбцов: %d, но указано: %d" -#: parser/parse_relation.c:2246 +#: parser/parse_relation.c:2242 #, c-format msgid "joins can have at most %d columns" msgstr "число столбцов в соединениях ограничено %d" -#: parser/parse_relation.c:2271 +#: parser/parse_relation.c:2267 #, c-format msgid "" "join expression \"%s\" has %d columns available but %d columns specified" msgstr "в выражении соединения \"%s\" имеется столбцов: %d, но указано: %d" -#: parser/parse_relation.c:2361 +#: parser/parse_relation.c:2357 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "в запросе \"%s\" в WITH нет предложения RETURNING" -#: parser/parse_relation.c:3641 +#: parser/parse_relation.c:3635 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Возможно, предполагалась ссылка на псевдоним таблицы \"%s\"." -#: parser/parse_relation.c:3653 +#: parser/parse_relation.c:3647 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." msgstr "" "Чтобы обратиться к этой таблице, нужно добавить для данного подзапроса " "пометку LATERAL." -#: parser/parse_relation.c:3659 +#: parser/parse_relation.c:3653 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "таблица \"%s\" отсутствует в предложении FROM" -#: parser/parse_relation.c:3699 +#: parser/parse_relation.c:3693 #, c-format msgid "" "There are columns named \"%s\", but they are in tables that cannot be " @@ -20195,12 +20841,12 @@ msgstr "" "Имеются столбцы с именем \"%s\", но они относятся к таблицам, к которым " "нельзя обратиться из этой части запроса." -#: parser/parse_relation.c:3701 +#: parser/parse_relation.c:3695 #, c-format msgid "Try using a table-qualified name." msgstr "Попробуйте использовать имя с указанием таблицы." -#: parser/parse_relation.c:3709 +#: parser/parse_relation.c:3703 #, c-format msgid "" "There is a column named \"%s\" in table \"%s\", but it cannot be referenced " @@ -20209,52 +20855,52 @@ msgstr "" "Столбец \"%s\" есть в таблице \"%s\", но на него нельзя ссылаться из этой " "части запроса." -#: parser/parse_relation.c:3712 +#: parser/parse_relation.c:3706 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." msgstr "" "Чтобы обратиться к этому столбцу, нужно добавить для данного подзапроса " "пометку LATERAL." -#: parser/parse_relation.c:3714 +#: parser/parse_relation.c:3708 #, c-format msgid "To reference that column, you must use a table-qualified name." msgstr "" "Чтобы обратиться к этому столбцу, нужно использовать имя с указанием таблицы." -#: parser/parse_relation.c:3734 +#: parser/parse_relation.c:3728 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Возможно, предполагалась ссылка на столбец \"%s.%s\"." -#: parser/parse_relation.c:3748 +#: parser/parse_relation.c:3742 #, c-format msgid "" "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "" "Возможно, предполагалась ссылка на столбец \"%s.%s\" или столбец \"%s.%s\"." -#: parser/parse_target.c:481 parser/parse_target.c:796 +#: parser/parse_target.c:480 parser/parse_target.c:795 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "присвоить значение системному столбцу \"%s\" нельзя" -#: parser/parse_target.c:509 +#: parser/parse_target.c:508 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "элементу массива нельзя присвоить значение по умолчанию" -#: parser/parse_target.c:514 +#: parser/parse_target.c:513 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "вложенному полю нельзя присвоить значение по умолчанию" -#: parser/parse_target.c:588 +#: parser/parse_target.c:587 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "столбец \"%s\" имеет тип %s, а выражение - %s" -#: parser/parse_target.c:780 +#: parser/parse_target.c:779 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a " @@ -20263,7 +20909,7 @@ msgstr "" "присвоить значение полю \"%s\" столбца \"%s\" нельзя, так как тип %s не " "является составным" -#: parser/parse_target.c:789 +#: parser/parse_target.c:788 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because there is no such " @@ -20272,7 +20918,7 @@ msgstr "" "присвоить значение полю \"%s\" столбца \"%s\" нельзя, так как в типе данных " "%s нет такого столбца" -#: parser/parse_target.c:878 +#: parser/parse_target.c:877 #, c-format msgid "" "subscripted assignment to \"%s\" requires type %s but expression is of type " @@ -20281,12 +20927,12 @@ msgstr "" "для присваивания \"%s\" значения по индексу требуется тип %s, однако " "выражение имеет тип %s" -#: parser/parse_target.c:888 +#: parser/parse_target.c:887 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "вложенное поле \"%s\" имеет тип %s, а выражение - %s" -#: parser/parse_target.c:1328 +#: parser/parse_target.c:1327 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * должен ссылаться на таблицы" @@ -20306,8 +20952,8 @@ msgstr "неправильное указание %%TYPE (слишком мно msgid "type reference %s converted to %s" msgstr "ссылка на тип %s преобразована в тип %s" -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:395 -#: utils/cache/typcache.c:450 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 +#: utils/cache/typcache.c:452 #, c-format msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" является пустышкой" @@ -20327,74 +20973,79 @@ msgstr "модификатором типа должна быть простая msgid "invalid type name \"%s\"" msgstr "неверное имя типа \"%s\"" -#: parser/parse_utilcmd.c:264 +#: parser/parse_utilcmd.c:263 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "создать секционированную таблицу в виде потомка нельзя" -#: parser/parse_utilcmd.c:589 +#: 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 "массивы с типом serial не реализованы" -#: parser/parse_utilcmd.c:668 parser/parse_utilcmd.c:680 -#: parser/parse_utilcmd.c:739 +#: 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 "конфликт NULL/NOT NULL в объявлении столбца \"%s\" таблицы \"%s\"" -#: parser/parse_utilcmd.c:692 +#: parser/parse_utilcmd.c:714 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" указано несколько значений по умолчанию" -#: parser/parse_utilcmd.c:709 +#: parser/parse_utilcmd.c:731 #, c-format msgid "identity columns are not supported on typed tables" msgstr "столбцы идентификации не поддерживаются с типизированными таблицами" -#: parser/parse_utilcmd.c:713 +#: parser/parse_utilcmd.c:735 #, c-format msgid "identity columns are not supported on partitions" msgstr "столбцы идентификации не поддерживаются с секциями" -#: parser/parse_utilcmd.c:722 +#: parser/parse_utilcmd.c:744 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" свойство identity задано неоднократно" -#: parser/parse_utilcmd.c:752 +#: parser/parse_utilcmd.c:774 #, c-format msgid "generated columns are not supported on typed tables" msgstr "генерируемые столбцы не поддерживаются с типизированными таблицами" -#: parser/parse_utilcmd.c:756 +#: parser/parse_utilcmd.c:778 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" указано несколько генерирующих выражений" -#: parser/parse_utilcmd.c:774 parser/parse_utilcmd.c:889 +#: 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:783 parser/parse_utilcmd.c:899 +#: 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:828 +#: parser/parse_utilcmd.c:850 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" задано и значение по умолчанию, и свойство " "identity" -#: parser/parse_utilcmd.c:836 +#: parser/parse_utilcmd.c:858 #, c-format msgid "" "both default and generation expression specified for column \"%s\" of table " @@ -20403,7 +21054,7 @@ msgstr "" "для столбца \"%s\" таблицы \"%s\" задано и значение по умолчанию, и " "генерирующее выражение" -#: parser/parse_utilcmd.c:844 +#: parser/parse_utilcmd.c:866 #, c-format msgid "" "both identity and generation expression specified for column \"%s\" of table " @@ -20412,93 +21063,88 @@ msgstr "" "для столбца \"%s\" таблицы \"%s\" задано и генерирующее выражение, и " "свойство identity" -#: parser/parse_utilcmd.c:909 +#: parser/parse_utilcmd.c:931 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "ограничения-исключения для сторонних таблиц не поддерживаются" -#: parser/parse_utilcmd.c:915 -#, c-format -msgid "exclusion constraints are not supported on partitioned tables" -msgstr "ограничения-исключения для секционированных таблиц не поддерживаются" - -#: parser/parse_utilcmd.c:980 +#: parser/parse_utilcmd.c:996 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE при создании сторонних таблиц не поддерживается" -#: parser/parse_utilcmd.c:993 +#: parser/parse_utilcmd.c:1009 #, c-format msgid "relation \"%s\" is invalid in LIKE clause" msgstr "отношение \"%s\" не подходит для предложения LIKE" -#: parser/parse_utilcmd.c:1750 parser/parse_utilcmd.c:1858 +#: parser/parse_utilcmd.c:1736 parser/parse_utilcmd.c:1844 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Индекс \"%s\" ссылается на тип всей строки таблицы." -#: parser/parse_utilcmd.c:2245 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "в CREATE TABLE нельзя использовать существующий индекс" -#: parser/parse_utilcmd.c:2265 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "индекс \"%s\" уже связан с ограничением" -#: parser/parse_utilcmd.c:2286 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" не является уникальным индексом" -#: parser/parse_utilcmd.c:2287 parser/parse_utilcmd.c:2294 -#: parser/parse_utilcmd.c:2301 parser/parse_utilcmd.c:2378 +#: 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:2293 +#: parser/parse_utilcmd.c:2290 #, c-format msgid "index \"%s\" contains expressions" msgstr "индекс \"%s\" содержит выражения" -#: parser/parse_utilcmd.c:2300 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" - частичный индекс" -#: parser/parse_utilcmd.c:2312 +#: parser/parse_utilcmd.c:2309 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" - откладываемый индекс" -#: parser/parse_utilcmd.c:2313 +#: parser/parse_utilcmd.c:2310 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" "Создать не откладываемое ограничение на базе откладываемого индекса нельзя." -#: parser/parse_utilcmd.c:2377 +#: parser/parse_utilcmd.c:2374 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "" "в индексе \"%s\" для столбца номер %d не определено поведение сортировки по " "умолчанию" -#: parser/parse_utilcmd.c:2534 +#: parser/parse_utilcmd.c:2531 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "столбец \"%s\" фигурирует в первичном ключе дважды" -#: parser/parse_utilcmd.c:2540 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "столбец \"%s\" фигурирует в ограничении уникальности дважды" -#: parser/parse_utilcmd.c:2887 +#: parser/parse_utilcmd.c:2871 #, c-format msgid "" "index expressions and predicates can refer only to the table being indexed" @@ -20506,22 +21152,22 @@ msgstr "" "индексные выражения и предикаты могут ссылаться только на индексируемую " "таблицу" -#: parser/parse_utilcmd.c:2959 +#: parser/parse_utilcmd.c:2943 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "выражения статистики могут ссылаться только на целевую таблицу" -#: parser/parse_utilcmd.c:3002 +#: parser/parse_utilcmd.c:2986 #, c-format msgid "rules on materialized views are not supported" msgstr "правила для материализованных представлений не поддерживаются" -#: parser/parse_utilcmd.c:3062 +#: parser/parse_utilcmd.c:3046 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "в условиях WHERE для правил нельзя ссылаться на другие отношения" -#: parser/parse_utilcmd.c:3134 +#: parser/parse_utilcmd.c:3118 #, c-format msgid "" "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE " @@ -20530,158 +21176,158 @@ msgstr "" "правила с условиями WHERE могут содержать только действия SELECT, INSERT, " "UPDATE или DELETE" -#: parser/parse_utilcmd.c:3152 parser/parse_utilcmd.c:3253 -#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1087 +#: 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:3170 +#: parser/parse_utilcmd.c:3154 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "в правиле ON SELECT нельзя использовать OLD" -#: parser/parse_utilcmd.c:3174 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "в правиле ON SELECT нельзя использовать NEW" -#: parser/parse_utilcmd.c:3183 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "в правиле ON INSERT нельзя использовать OLD" -#: parser/parse_utilcmd.c:3189 +#: parser/parse_utilcmd.c:3173 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "в правиле ON DELETE нельзя использовать NEW" -#: parser/parse_utilcmd.c:3217 +#: parser/parse_utilcmd.c:3201 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "в запросе WITH нельзя ссылаться на OLD" -#: parser/parse_utilcmd.c:3224 +#: parser/parse_utilcmd.c:3208 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "в запросе WITH нельзя ссылаться на NEW" -#: parser/parse_utilcmd.c:3676 +#: parser/parse_utilcmd.c:3664 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "предложение DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:3681 parser/parse_utilcmd.c:3696 +#: 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:3691 +#: parser/parse_utilcmd.c:3679 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "предложение NOT DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:3704 parser/parse_utilcmd.c:3730 gram.y:5990 +#: parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 gram.y:6114 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "" "ограничение с характеристикой INITIALLY DEFERRED должно быть объявлено как " "DEFERRABLE" -#: parser/parse_utilcmd.c:3712 +#: parser/parse_utilcmd.c:3700 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "предложение INITIALLY DEFERRED расположено неправильно" -#: parser/parse_utilcmd.c:3717 parser/parse_utilcmd.c:3743 +#: 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:3738 +#: parser/parse_utilcmd.c:3726 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "предложение INITIALLY IMMEDIATE расположено неправильно" -#: parser/parse_utilcmd.c:3931 +#: parser/parse_utilcmd.c:3919 #, c-format msgid "" "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "в CREATE указана схема (%s), отличная от создаваемой (%s)" -#: parser/parse_utilcmd.c:3966 +#: parser/parse_utilcmd.c:3954 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" — не секционированная таблица" -#: parser/parse_utilcmd.c:3973 +#: parser/parse_utilcmd.c:3961 #, c-format msgid "table \"%s\" is not partitioned" msgstr "таблица \"%s\" не является секционированной" -#: parser/parse_utilcmd.c:3980 +#: parser/parse_utilcmd.c:3968 #, c-format msgid "index \"%s\" is not partitioned" msgstr "индекс \"%s\" не секционирован" -#: parser/parse_utilcmd.c:4020 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "у секционированной по хешу таблицы не может быть секции по умолчанию" -#: parser/parse_utilcmd.c:4037 +#: parser/parse_utilcmd.c:4025 #, c-format msgid "invalid bound specification for a hash partition" msgstr "неправильное указание ограничения для хеш-секции" -#: parser/parse_utilcmd.c:4043 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:4050 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:4063 +#: parser/parse_utilcmd.c:4051 #, c-format msgid "invalid bound specification for a list partition" msgstr "неправильное указание ограничения для секции по списку" -#: parser/parse_utilcmd.c:4116 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "invalid bound specification for a range partition" msgstr "неправильное указание ограничения для секции по диапазону" -#: parser/parse_utilcmd.c:4122 +#: parser/parse_utilcmd.c:4110 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "" "во FROM должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:4126 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "" "в TO должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:4240 +#: parser/parse_utilcmd.c:4228 #, c-format msgid "cannot specify NULL in range bound" msgstr "указать NULL в диапазонном ограничении нельзя" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4277 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "за границей MAXVALUE могут следовать только границы MAXVALUE" -#: parser/parse_utilcmd.c:4296 +#: parser/parse_utilcmd.c:4284 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "за границей MINVALUE могут следовать только границы MINVALUE" -#: parser/parse_utilcmd.c:4339 +#: parser/parse_utilcmd.c:4327 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "указанное значение нельзя привести к типу %s столбца \"%s\"" @@ -20694,12 +21340,12 @@ msgstr "За UESCAPE должна следовать простая строко msgid "invalid Unicode escape character" msgstr "неверный символ спецкода Unicode" -#: parser/parser.c:347 scan.l:1390 +#: parser/parser.c:347 scan.l:1393 #, c-format msgid "invalid Unicode escape value" msgstr "неверное значение спецкода Unicode" -#: parser/parser.c:494 utils/adt/varlena.c:6505 scan.l:701 +#: parser/parser.c:494 utils/adt/varlena.c:6640 scan.l:716 #, c-format msgid "invalid Unicode escape" msgstr "неверный спецкод Unicode" @@ -20709,8 +21355,8 @@ msgstr "неверный спецкод Unicode" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Спецкоды Unicode должны иметь вид \\XXXX или \\+XXXXXX." -#: parser/parser.c:523 utils/adt/varlena.c:6530 scan.l:662 scan.l:678 -#: scan.l:694 +#: parser/parser.c:523 utils/adt/varlena.c:6665 scan.l:677 scan.l:693 +#: scan.l:709 #, c-format msgid "invalid Unicode surrogate pair" msgstr "неверная суррогатная пара Unicode" @@ -20720,20 +21366,20 @@ msgstr "неверная суррогатная пара Unicode" msgid "identifier \"%s\" will be truncated to \"%.*s\"" msgstr "идентификатор \"%s\" будет усечён до \"%.*s\"" -#: partitioning/partbounds.c:2921 +#: partitioning/partbounds.c:2920 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "секция \"%s\" конфликтует с существующей секцией по умолчанию \"%s\"" -#: partitioning/partbounds.c:2973 partitioning/partbounds.c:2992 -#: partitioning/partbounds.c:3014 +#: partitioning/partbounds.c:2972 partitioning/partbounds.c:2991 +#: partitioning/partbounds.c:3013 #, c-format msgid "" "every hash partition modulus must be a factor of the next larger modulus" msgstr "" "модуль каждой хеш-секции должен быть делителем модулей, превышающих его" -#: partitioning/partbounds.c:2974 partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:2973 partitioning/partbounds.c:3014 #, c-format msgid "" "The new modulus %d is not a factor of %d, the modulus of existing partition " @@ -20741,29 +21387,29 @@ msgid "" msgstr "" "Новый модуль %d не является делителем %d, модуля существующей секции \"%s\"." -#: partitioning/partbounds.c:2993 +#: partitioning/partbounds.c:2992 #, c-format msgid "" "The new modulus %d is not divisible by %d, the modulus of existing partition " "\"%s\"." msgstr "Новый модуль %d не делится на %d, модуль существующей секции \"%s\"." -#: partitioning/partbounds.c:3128 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "для секции \"%s\" заданы границы, образующие пустой диапазон" -#: partitioning/partbounds.c:3130 +#: partitioning/partbounds.c:3129 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "Указанная нижняя граница %s больше или равна верхней границе %s." -#: 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 " @@ -20772,19 +21418,19 @@ msgstr "" "пропущено сканирование сторонней таблицы \"%s\", являющейся секцией секции " "по умолчанию \"%s\"" -#: 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 " @@ -20793,7 +21439,7 @@ 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" @@ -20801,7 +21447,7 @@ msgstr "" "столбец %d ключа секционирования имеет тип %s, но для него передано значение " "типа %s" -#: 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 " @@ -20810,23 +21456,23 @@ msgstr "" "столбец %d ключа секционирования имеет тип \"%s\", но для него передано " "значение типа \"%s\"" -#: port/pg_sema.c:209 port/pg_shmem.c:708 port/posix_sema.c:209 -#: port/sysv_sema.c:323 port/sysv_shmem.c:708 +#: 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" -#: port/pg_shmem.c:223 port/sysv_shmem.c:223 +#: port/pg_shmem.c:224 port/sysv_shmem.c:224 #, c-format msgid "could not create shared memory segment: %m" msgstr "не удалось создать сегмент разделяемой памяти: %m" -#: port/pg_shmem.c:224 port/sysv_shmem.c:224 +#: port/pg_shmem.c:225 port/sysv_shmem.c:225 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "Ошибка в системном вызове shmget(ключ=%lu, размер=%zu, 0%o)." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " @@ -20840,7 +21486,7 @@ msgstr "" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: port/pg_shmem.c:235 port/sysv_shmem.c:235 +#: port/pg_shmem.c:236 port/sysv_shmem.c:236 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " @@ -20855,7 +21501,7 @@ msgstr "" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: port/pg_shmem.c:241 port/sysv_shmem.c:241 +#: port/pg_shmem.c:242 port/sysv_shmem.c:242 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs " @@ -20872,49 +21518,51 @@ msgstr "" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: port/pg_shmem.c:583 port/sysv_shmem.c:583 port/win32_shmem.c:641 +#: port/pg_shmem.c:584 port/sysv_shmem.c:584 port/win32_shmem.c:646 #, c-format -msgid "huge_page_size must be 0 on this platform." -msgstr "Значение huge_page_size должно равняться 0 на этой платформе." +msgid "\"huge_page_size\" must be 0 on this platform." +msgstr "Значение \"huge_page_size\" должно равняться 0 на этой платформе." -#: port/pg_shmem.c:646 port/sysv_shmem.c:646 +#: port/pg_shmem.c:655 port/sysv_shmem.c:655 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "не удалось получить анонимную разделяемую память: %m" -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:657 port/sysv_shmem.c:657 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " "segment exceeded available memory, swap space, or huge pages. To reduce the " "request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, " -"perhaps by reducing shared_buffers or max_connections." +"perhaps by reducing \"shared_buffers\" or \"max_connections\"." msgstr "" "Эта ошибка обычно возникает, когда PostgreSQL запрашивает сегмент " "разделяемой памяти, превышая объём доступной физической либо виртуальной " "памяти или огромных страниц. Для уменьшения запроса (текущий размер: %zu Б) " "можно снизить использование разделяемой памяти, возможно, уменьшив " -"shared_buffers или max_connections." +"\"shared_buffers\" или \"max_connections\"." -#: port/pg_shmem.c:716 port/sysv_shmem.c:716 +#: port/pg_shmem.c:725 port/sysv_shmem.c:725 #, c-format msgid "huge pages not supported on this platform" msgstr "огромные страницы на этой платформе не поддерживаются" -#: port/pg_shmem.c:723 port/sysv_shmem.c:723 +#: port/pg_shmem.c:732 port/sysv_shmem.c:732 #, c-format -msgid "huge pages not supported with the current shared_memory_type setting" +msgid "" +"huge pages not supported with the current \"shared_memory_type\" setting" msgstr "" -"огромные страницы не поддерживаются с текущим значением shared_memory_type" +"огромные страницы не поддерживаются с текущим значением " +"\"shared_memory_type\"" -#: port/pg_shmem.c:783 port/sysv_shmem.c:783 utils/init/miscinit.c:1358 +#: 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:786 port/sysv_shmem.c:786 utils/init/miscinit.c:1360 +#: 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\"." @@ -20922,17 +21570,17 @@ msgstr "" "Завершите все старые серверные процессы, работающие с каталогом данных " "\"%s\"." -#: 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 " @@ -20940,18 +21588,19 @@ msgid "" "(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" +"\"max_connections\" parameter.\n" "The PostgreSQL documentation contains more information about configuring " "your system for PostgreSQL." msgstr "" "Эта ошибка НЕ означает, что на диске нет места. Вероятнее всего, превышен " "предел числа установленных семафоров (SEMMNI), либо общего числа семафоров " "(SEMMNS) в системе. Увеличьте соответствующий параметр ядра или уменьшите " -"потребность PostgreSQL в семафорах, уменьшив его параметр max_connections.\n" +"потребность PostgreSQL в семафорах, уменьшив его параметр " +"\"max_connections\".\n" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: 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. " @@ -21093,53 +21742,43 @@ msgstr "Ошибка в системном вызове DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Ошибка в системном вызове MapViewOfFileEx." -#: postmaster/autovacuum.c:418 -#, c-format -msgid "could not fork autovacuum launcher process: %m" -msgstr "породить процесс запуска автоочистки не удалось: %m" - -#: postmaster/autovacuum.c:765 +#: postmaster/autovacuum.c:686 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "процесс автоочистки запускался слишком долго; его запуск отменён" -#: postmaster/autovacuum.c:1490 -#, c-format -msgid "could not fork autovacuum worker process: %m" -msgstr "не удалось породить рабочий процесс автоочистки: %m" - # skip-rule: capital-letter-first -#: postmaster/autovacuum.c:2353 +#: postmaster/autovacuum.c:2203 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "автоочистка: удаление устаревшей врем. таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2589 +#: postmaster/autovacuum.c:2439 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматическая очистка таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2592 +#: postmaster/autovacuum.c:2442 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматический анализ таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2786 +#: postmaster/autovacuum.c:2636 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "обработка рабочей записи для отношения \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3400 +#: postmaster/autovacuum.c:3254 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистка не запущена из-за неправильной конфигурации" -#: postmaster/autovacuum.c:3401 +#: postmaster/autovacuum.c:3255 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Включите параметр \"track_counts\"." -#: postmaster/bgworker.c:259 +#: postmaster/bgworker.c:260 #, c-format msgid "" "inconsistent background worker state (max_worker_processes=%d, " @@ -21148,7 +21787,7 @@ msgstr "" "несогласованное состояние фонового рабочего процесса " "(max_worker_processes=%d, total_slots=%d)" -#: postmaster/bgworker.c:669 +#: postmaster/bgworker.c:651 #, c-format msgid "" "background worker \"%s\": background workers without shared memory access " @@ -21157,7 +21796,7 @@ msgstr "" "фоновый процесс \"%s\": фоновые процессы, не обращающиеся к общей памяти, не " "поддерживаются" -#: postmaster/bgworker.c:680 +#: postmaster/bgworker.c:662 #, c-format msgid "" "background worker \"%s\": cannot request database access if starting at " @@ -21166,12 +21805,12 @@ msgstr "" "фоновый процесс \"%s\" не может получить доступ к БД, если он запущен при " "старте главного процесса" -#: postmaster/bgworker.c:694 +#: postmaster/bgworker.c:676 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "фоновый процесс \"%s\": неправильный интервал перезапуска" -#: postmaster/bgworker.c:709 +#: postmaster/bgworker.c:691 #, c-format msgid "" "background worker \"%s\": parallel workers may not be configured for restart" @@ -21179,19 +21818,20 @@ msgstr "" "фоновый процесс \"%s\": параллельные исполнители не могут быть настроены для " "перезапуска" -#: postmaster/bgworker.c:733 tcop/postgres.c:3255 +#: postmaster/bgworker.c:715 tcop/postgres.c:3312 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершение фонового процесса \"%s\" по команде администратора" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:888 #, c-format msgid "" -"background worker \"%s\": must be registered in shared_preload_libraries" +"background worker \"%s\": must be registered in \"shared_preload_libraries\"" msgstr "" -"фоновой процесс \"%s\" должен быть зарегистрирован в shared_preload_libraries" +"фоновой процесс \"%s\" должен быть зарегистрирован в " +"\"shared_preload_libraries\"" -#: postmaster/bgworker.c:902 +#: postmaster/bgworker.c:911 #, c-format msgid "" "background worker \"%s\": only dynamic background workers can request " @@ -21200,12 +21840,12 @@ msgstr "" "фоновый процесс \"%s\": только динамические фоновые процессы могут " "запрашивать уведомление" -#: postmaster/bgworker.c:917 +#: postmaster/bgworker.c:926 #, c-format msgid "too many background workers" msgstr "слишком много фоновых процессов" -#: postmaster/bgworker.c:918 +#: postmaster/bgworker.c:927 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "" @@ -21217,13 +21857,12 @@ msgstr[1] "" msgstr[2] "" "Максимально возможное число фоновых процессов при текущих параметрах: %d." -#: postmaster/bgworker.c:922 +#: 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:431 +#: postmaster/checkpointer.c:441 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -21231,209 +21870,310 @@ msgstr[0] "контрольные точки происходят слишком msgstr[1] "контрольные точки происходят слишком часто (через %d сек.)" msgstr[2] "контрольные точки происходят слишком часто (через %d сек.)" -#: postmaster/checkpointer.c:435 -#, c-format -msgid "Consider increasing the configuration parameter \"max_wal_size\"." -msgstr "Возможно, стоит увеличить параметр \"max_wal_size\"." - -#: postmaster/checkpointer.c:1059 +#: postmaster/checkpointer.c:1067 #, c-format msgid "checkpoint request failed" msgstr "сбой при запросе контрольной точки" -#: postmaster/checkpointer.c:1060 +#: postmaster/checkpointer.c:1068 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Смотрите подробности в протоколе сервера." -#: postmaster/pgarch.c:416 +#: postmaster/launch_backend.c:381 #, c-format -msgid "archive_mode enabled, yet archiving is not configured" -msgstr "режим архивации включён, но архивирование ещё не настроено" +msgid "could not execute server process \"%s\": %m" +msgstr "запустить серверный процесс \"%s\" не удалось: %m" -#: postmaster/pgarch.c:438 +#: postmaster/launch_backend.c:434 #, c-format -msgid "removed orphan archive status file \"%s\"" -msgstr "удалён ненужный файл состояния архива \"%s\"" +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "" +"создать отображение файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/pgarch.c:448 +#: postmaster/launch_backend.c:442 #, c-format -msgid "" -"removal of orphan archive status file \"%s\" failed too many times, will try " -"again later" +msgid "could not map backend parameter memory: error code %lu" msgstr "" -"удалить ненужный файл состояния архива \"%s\" не получилось много раз " -"подряд; следующая попытка будет сделана позже" +"отобразить файл серверных параметров в память не удалось (код ошибки: %lu)" -#: postmaster/pgarch.c:484 +#: postmaster/launch_backend.c:459 #, c-format -msgid "" -"archiving write-ahead log file \"%s\" failed too many times, will try again " -"later" -msgstr "" -"заархивировать файл журнала предзаписи \"%s\" не удалось много раз подряд; " -"следующая попытка будет сделана позже" +msgid "subprocess command line too long" +msgstr "слишком длинная командная строка подпроцесса" -#: postmaster/pgarch.c:791 postmaster/pgarch.c:830 +#: postmaster/launch_backend.c:477 #, c-format -msgid "both archive_command and archive_library set" -msgstr "archive_command и archive_library заданы одновременно" +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "ошибка в CreateProcess(): %m (код ошибки: %lu)" -#: postmaster/pgarch.c:792 postmaster/pgarch.c:831 +#: postmaster/launch_backend.c:504 #, c-format -msgid "Only one of archive_command, archive_library may be set." +msgid "could not unmap view of backend parameter file: error code %lu" msgstr "" -"Только один из параметров archive_command, archive_library может иметь " -"значение." +"отключить отображение файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/pgarch.c:809 +#: postmaster/launch_backend.c:508 #, c-format -msgid "" -"restarting archiver process because value of \"archive_library\" was changed" +msgid "could not close handle to backend parameter file: error code %lu" msgstr "" -"процесс архиватора перезапускается, так как было изменено значение " -"\"archive_library\"" +"закрыть указатель файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/pgarch.c:846 +#: postmaster/launch_backend.c:530 #, c-format -msgid "archive modules have to define the symbol %s" -msgstr "в модулях архивирования должен объявляться символ %s" +msgid "giving up after too many tries to reserve shared memory" +msgstr "" +"число повторных попыток резервирования разделяемой памяти достигло предела" -#: postmaster/pgarch.c:852 +#: postmaster/launch_backend.c:531 #, c-format -msgid "archive modules must register an archive callback" -msgstr "модули архивирования должны регистрировать обработчик вызова архивации" +msgid "This might be caused by ASLR or antivirus software." +msgstr "Это может быть вызвано антивирусным ПО или механизмом ASLR." -#: postmaster/postmaster.c:759 +#: postmaster/launch_backend.c:834 #, c-format -msgid "%s: invalid argument for option -f: \"%s\"\n" -msgstr "%s: неверный аргумент для параметра -f: \"%s\"\n" +msgid "could not duplicate socket %d for use in backend: error code %d" +msgstr "" +"продублировать сокет %d для серверного процесса не удалось (код ошибки: %d)" -#: postmaster/postmaster.c:832 +#: postmaster/launch_backend.c:866 #, c-format -msgid "%s: invalid argument for option -t: \"%s\"\n" -msgstr "%s: неверный аргумент для параметра -t: \"%s\"\n" +msgid "could not create inherited socket: error code %d\n" +msgstr "создать наследуемый сокет не удалось (код ошибки: %d)\n" -#: postmaster/postmaster.c:855 +#: postmaster/launch_backend.c:895 #, c-format -msgid "%s: invalid argument: \"%s\"\n" -msgstr "%s: неверный аргумент: \"%s\"\n" +msgid "could not open backend variables file \"%s\": %m\n" +msgstr "открыть файл серверных переменных \"%s\" не удалось: %m\n" -#: postmaster/postmaster.c:923 +#: postmaster/launch_backend.c:901 #, 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) плюс reserved_connections " -"(%d) должно быть меньше max_connections (%d)\n" +msgid "could not read from backend variables file \"%s\": %m\n" +msgstr "прочитать файл серверных переменных \"%s\" не удалось: %m\n" -#: postmaster/postmaster.c:931 +#: postmaster/launch_backend.c:912 #, c-format -msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" -msgstr "Архивацию WAL нельзя включить, если установлен wal_level \"minimal\"" +msgid "could not read startup data from backend variables file \"%s\": %m\n" +msgstr "" +"прочитать стартовые данные из файла серверных переменных \"%s\" не удалось: " +"%m\n" -#: postmaster/postmaster.c:934 +#: postmaster/launch_backend.c:924 #, c-format -msgid "" -"WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or " -"\"logical\"" -msgstr "" -"Для потоковой трансляции WAL (max_wal_senders > 0) wal_level должен быть " -"\"replica\" или \"logical\"" +msgid "could not remove file \"%s\": %m\n" +msgstr "не удалось стереть файл \"%s\": %m\n" -#: postmaster/postmaster.c:942 +#: postmaster/launch_backend.c:940 #, c-format -msgid "%s: invalid datetoken tables, please fix\n" -msgstr "%s: ошибка в таблицах маркеров времени, требуется исправление\n" +msgid "could not map view of backend variables: error code %lu\n" +msgstr "отобразить файл серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:1099 +#: postmaster/launch_backend.c:959 #, c-format -msgid "could not create I/O completion port for child queue" -msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" +msgid "could not unmap view of backend variables: error code %lu\n" +msgstr "" +"отключить отображение файла серверных переменных не удалось (код ошибки: " +"%lu)\n" -#: postmaster/postmaster.c:1175 +#: postmaster/launch_backend.c:966 +#, c-format +msgid "could not close handle to backend parameter variables: error code %lu\n" +msgstr "" +"закрыть указатель файла серверных переменных не удалось (код ошибки: %lu)\n" + +#: postmaster/pgarch.c:428 +#, c-format +msgid "\"archive_mode\" enabled, yet archiving is not configured" +msgstr "параметр \"archive_mode\" включён, но архивирование ещё не настроено" + +#: postmaster/pgarch.c:452 +#, c-format +msgid "removed orphan archive status file \"%s\"" +msgstr "удалён ненужный файл состояния архива \"%s\"" + +#: postmaster/pgarch.c:462 +#, c-format +msgid "" +"removal of orphan archive status file \"%s\" failed too many times, will try " +"again later" +msgstr "" +"удалить ненужный файл состояния архива \"%s\" не получилось много раз " +"подряд; следующая попытка будет сделана позже" + +#: postmaster/pgarch.c:498 +#, c-format +msgid "" +"archiving write-ahead log file \"%s\" failed too many times, will try again " +"later" +msgstr "" +"заархивировать файл журнала предзаписи \"%s\" не удалось много раз подряд; " +"следующая попытка будет сделана позже" + +#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 +#, c-format +msgid "both \"archive_command\" and \"archive_library\" set" +msgstr "\"archive_command\" и \"archive_library\" заданы одновременно" + +#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 +#, c-format +msgid "Only one of \"archive_command\", \"archive_library\" may be set." +msgstr "" +"Только один из параметров \"archive_command\", \"archive_library\" может " +"иметь значение." + +#: postmaster/pgarch.c:897 +#, c-format +msgid "" +"restarting archiver process because value of \"archive_library\" was changed" +msgstr "" +"процесс архиватора перезапускается, так как было изменено значение " +"\"archive_library\"" + +#: postmaster/pgarch.c:934 +#, c-format +msgid "archive modules have to define the symbol %s" +msgstr "в модулях архивирования должен объявляться символ %s" + +#: postmaster/pgarch.c:940 +#, c-format +msgid "archive modules must register an archive callback" +msgstr "модули архивирования должны регистрировать обработчик вызова архивации" + +#: postmaster/postmaster.c:661 +#, c-format +msgid "%s: invalid argument for option -f: \"%s\"\n" +msgstr "%s: неверный аргумент для параметра -f: \"%s\"\n" + +#: postmaster/postmaster.c:734 +#, c-format +msgid "%s: invalid argument for option -t: \"%s\"\n" +msgstr "%s: неверный аргумент для параметра -t: \"%s\"\n" + +#: postmaster/postmaster.c:757 +#, c-format +msgid "%s: invalid argument: \"%s\"\n" +msgstr "%s: неверный аргумент: \"%s\"\n" + +#: postmaster/postmaster.c:825 +#, 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) плюс " +"\"reserved_connections\" (%d) должно быть меньше \"max_connections\" (%d)\n" + +#: postmaster/postmaster.c:833 +#, c-format +msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" +msgstr "архивацию WAL нельзя включить, если \"wal_level\" = \"minimal\"" + +#: postmaster/postmaster.c:836 +#, c-format +msgid "" +"WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be " +"\"replica\" or \"logical\"" +msgstr "" +"для потоковой трансляции WAL (\"max_wal_senders\" > 0) \"wal_level\" должен " +"быть \"replica\" или \"logical\"" + +#: postmaster/postmaster.c:839 +#, c-format +msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" +msgstr "обобщение WAL нельзя включить, если выбран \"wal_level\" \"minimal\"" + +#: postmaster/postmaster.c:847 +#, c-format +msgid "%s: invalid datetoken tables, please fix\n" +msgstr "%s: ошибка в таблицах маркеров времени, требуется исправление\n" + +#: postmaster/postmaster.c:1004 +#, c-format +msgid "could not create I/O completion port for child queue" +msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" + +#: postmaster/postmaster.c:1069 #, c-format msgid "ending log output to stderr" msgstr "завершение вывода в stderr" -#: postmaster/postmaster.c:1176 +#: postmaster/postmaster.c:1070 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "В дальнейшем протокол будет выводиться в \"%s\"." -#: postmaster/postmaster.c:1187 +#: postmaster/postmaster.c:1081 #, c-format msgid "starting %s" msgstr "запускается %s" -#: postmaster/postmaster.c:1239 +#: postmaster/postmaster.c:1143 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не удалось создать принимающий сокет для \"%s\"" -#: postmaster/postmaster.c:1245 +#: postmaster/postmaster.c:1149 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не удалось создать сокеты TCP/IP" -#: postmaster/postmaster.c:1277 +#: postmaster/postmaster.c:1181 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "функция DNSServiceRegister() выдала ошибку с кодом %ld" -#: postmaster/postmaster.c:1328 +#: postmaster/postmaster.c:1234 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не удалось создать Unix-сокет в каталоге \"%s\"" -#: postmaster/postmaster.c:1334 +#: postmaster/postmaster.c:1240 #, c-format msgid "could not create any Unix-domain sockets" msgstr "ни один Unix-сокет создать не удалось" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1251 #, c-format msgid "no socket created for listening" msgstr "отсутствуют принимающие сокеты" -#: postmaster/postmaster.c:1376 +#: postmaster/postmaster.c:1282 #, c-format -msgid "%s: could not change permissions of external PID file \"%s\": %s\n" -msgstr "%s: не удалось поменять права для внешнего файла PID \"%s\": %s\n" +msgid "%s: could not change permissions of external PID file \"%s\": %m\n" +msgstr "%s: не удалось поменять права для внешнего файла PID \"%s\": %m\n" -#: postmaster/postmaster.c:1380 +#: postmaster/postmaster.c:1286 #, c-format -msgid "%s: could not write external PID file \"%s\": %s\n" -msgstr "%s: не удалось записать внешний файл PID \"%s\": %s\n" +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:1408 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1314 utils/init/postinit.c:221 #, c-format msgid "could not load %s" msgstr "не удалось загрузить %s" -#: postmaster/postmaster.c:1434 +#: postmaster/postmaster.c:1342 #, c-format msgid "postmaster became multithreaded during startup" msgstr "процесс postmaster стал многопоточным при запуске" -#: postmaster/postmaster.c:1435 +#: 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:1536 +#: postmaster/postmaster.c:1442 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: не удалось найти путь к собственному исполняемому файлу" -#: postmaster/postmaster.c:1543 +#: postmaster/postmaster.c:1449 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: подходящий исполняемый файл postgres не найден" -#: postmaster/postmaster.c:1566 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1472 utils/misc/tzparser.c:341 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -21442,574 +22182,383 @@ msgstr "" "Возможно, PostgreSQL установлен не полностью или файла \"%s\" нет в " "положенном месте." -#: postmaster/postmaster.c:1593 +#: postmaster/postmaster.c:1499 #, c-format msgid "" "%s: could not find the database system\n" "Expected to find it in the directory \"%s\",\n" -"but could not open file \"%s\": %s\n" +"but could not open file \"%s\": %m\n" msgstr "" "%s: не найдена система баз данных\n" "Ожидалось найти её в каталоге \"%s\",\n" -"но открыть файл \"%s\" не удалось: %s\n" +"но открыть файл \"%s\" не удалось: %m\n" # well-spelled: неподчиняющимся #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1890 +#: postmaster/postmaster.c:1789 #, c-format msgid "issuing %s to recalcitrant children" msgstr "неподчиняющимся потомкам посылается %s" -#: postmaster/postmaster.c:1912 +#: postmaster/postmaster.c:1811 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "" "немедленное отключение из-за ошибочного файла блокировки каталога данных" -#: postmaster/postmaster.c:1987 postmaster/postmaster.c:2015 -#, c-format -msgid "incomplete startup packet" -msgstr "неполный стартовый пакет" - -#: postmaster/postmaster.c:1999 postmaster/postmaster.c:2032 -#, c-format -msgid "invalid length of startup packet" -msgstr "неверная длина стартового пакета" - -#: postmaster/postmaster.c:2061 -#, c-format -msgid "failed to send SSL negotiation response: %m" -msgstr "не удалось отправить ответ в процессе SSL-согласования: %m" - -#: postmaster/postmaster.c:2079 -#, c-format -msgid "received unencrypted data after SSL request" -msgstr "после запроса SSL получены незашифрованные данные" - -#: postmaster/postmaster.c:2080 postmaster/postmaster.c:2124 -#, c-format -msgid "" -"This could be either a client-software bug or evidence of an attempted man-" -"in-the-middle attack." -msgstr "" -"Это может свидетельствовать об ошибке в клиентском ПО или о попытке атаки " -"MITM." - -#: postmaster/postmaster.c:2105 -#, c-format -msgid "failed to send GSSAPI negotiation response: %m" -msgstr "не удалось отправить ответ в процессе согласования GSSAPI: %m" - -#: postmaster/postmaster.c:2123 -#, c-format -msgid "received unencrypted data after GSSAPI encryption request" -msgstr "после запроса шифрования GSSAPI получены незашифрованные данные" - -#: postmaster/postmaster.c:2147 -#, c-format -msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" -msgstr "" -"неподдерживаемый протокол клиентского приложения %u.%u; сервер поддерживает " -"%u.0 - %u.%u" - -#: postmaster/postmaster.c:2214 -#, c-format -msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." -msgstr "Допустимые значения: \"false\", 0, \"true\", 1, \"database\"." - -#: postmaster/postmaster.c:2255 -#, c-format -msgid "invalid startup packet layout: expected terminator as last byte" -msgstr "" -"неверная структура стартового пакета: последним байтом должен быть терминатор" - -#: postmaster/postmaster.c:2272 -#, c-format -msgid "no PostgreSQL user name specified in startup packet" -msgstr "в стартовом пакете не указано имя пользователя PostgreSQL" - -#: postmaster/postmaster.c:2336 -#, c-format -msgid "the database system is starting up" -msgstr "система баз данных запускается" - -#: postmaster/postmaster.c:2342 -#, c-format -msgid "the database system is not yet accepting connections" -msgstr "система БД ещё не принимает подключения" - -#: postmaster/postmaster.c:2343 -#, c-format -msgid "Consistent recovery state has not been yet reached." -msgstr "Согласованное состояние восстановления ещё не достигнуто." - -#: postmaster/postmaster.c:2347 -#, c-format -msgid "the database system is not accepting connections" -msgstr "система БД не принимает подключения" - -#: postmaster/postmaster.c:2348 -#, c-format -msgid "Hot standby mode is disabled." -msgstr "Режим горячего резерва отключён." - -#: postmaster/postmaster.c:2353 -#, c-format -msgid "the database system is shutting down" -msgstr "система баз данных останавливается" - -#: postmaster/postmaster.c:2358 -#, c-format -msgid "the database system is in recovery mode" -msgstr "система баз данных в режиме восстановления" - -#: postmaster/postmaster.c:2363 storage/ipc/procarray.c:491 -#: storage/ipc/sinvaladt.c:306 storage/lmgr/proc.c:353 -#, c-format -msgid "sorry, too many clients already" -msgstr "извините, уже слишком много клиентов" - -#: postmaster/postmaster.c:2450 +#: postmaster/postmaster.c:1874 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильный ключ в запросе на отмену процесса %d" -#: postmaster/postmaster.c:2462 +#: postmaster/postmaster.c:1886 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "процесс с кодом %d, полученным в запросе на отмену, не найден" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2106 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "получен SIGHUP, файлы конфигурации перезагружаются" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2753 postmaster/postmaster.c:2757 +#: postmaster/postmaster.c:2134 postmaster/postmaster.c:2138 #, c-format msgid "%s was not reloaded" msgstr "%s не был перезагружен" -#: postmaster/postmaster.c:2767 +#: postmaster/postmaster.c:2148 #, c-format msgid "SSL configuration was not reloaded" msgstr "конфигурация SSL не была перезагружена" -#: postmaster/postmaster.c:2857 +#: postmaster/postmaster.c:2234 #, c-format msgid "received smart shutdown request" msgstr "получен запрос на \"вежливое\" выключение" -#: postmaster/postmaster.c:2898 +#: postmaster/postmaster.c:2275 #, c-format msgid "received fast shutdown request" msgstr "получен запрос на быстрое выключение" -#: postmaster/postmaster.c:2916 +#: postmaster/postmaster.c:2293 #, c-format msgid "aborting any active transactions" msgstr "прерывание всех активных транзакций" -#: postmaster/postmaster.c:2940 +#: postmaster/postmaster.c:2317 #, c-format msgid "received immediate shutdown request" msgstr "получен запрос на немедленное выключение" -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:2389 #, c-format msgid "shutdown at recovery target" msgstr "выключение при достижении цели восстановления" -#: postmaster/postmaster.c:3034 postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:2407 postmaster/postmaster.c:2443 msgid "startup process" msgstr "стартовый процесс" -#: postmaster/postmaster.c:3037 +#: postmaster/postmaster.c:2410 #, c-format msgid "aborting startup due to startup process failure" msgstr "прерывание запуска из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:3110 +#: postmaster/postmaster.c:2485 #, c-format msgid "database system is ready to accept connections" msgstr "система БД готова принимать подключения" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:2506 msgid "background writer process" msgstr "процесс фоновой записи" -#: postmaster/postmaster.c:3178 +#: postmaster/postmaster.c:2553 msgid "checkpointer process" msgstr "процесс контрольных точек" -#: postmaster/postmaster.c:3194 +#: postmaster/postmaster.c:2569 msgid "WAL writer process" msgstr "процесс записи WAL" -#: postmaster/postmaster.c:3209 +#: postmaster/postmaster.c:2584 msgid "WAL receiver process" msgstr "процесс считывания WAL" -#: postmaster/postmaster.c:3224 +#: postmaster/postmaster.c:2598 +msgid "WAL summarizer process" +msgstr "процесс обобщения WAL" + +#: postmaster/postmaster.c:2613 msgid "autovacuum launcher process" msgstr "процесс запуска автоочистки" -#: postmaster/postmaster.c:3242 +#: postmaster/postmaster.c:2631 msgid "archiver process" msgstr "процесс архивации" -#: postmaster/postmaster.c:3255 +#: postmaster/postmaster.c:2644 msgid "system logger process" msgstr "процесс системного протоколирования" -#: postmaster/postmaster.c:3312 +#: postmaster/postmaster.c:2661 +msgid "slot sync worker process" +msgstr "рабочий процесс синхронизации слотов" + +#: postmaster/postmaster.c:2717 #, c-format msgid "background worker \"%s\"" msgstr "фоновый процесс \"%s\"" -#: postmaster/postmaster.c:3391 postmaster/postmaster.c:3411 -#: postmaster/postmaster.c:3418 postmaster/postmaster.c:3436 +#: postmaster/postmaster.c:2796 postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2823 postmaster/postmaster.c:2841 msgid "server process" msgstr "процесс сервера" -#: postmaster/postmaster.c:3490 +#: 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:3665 +#: postmaster/postmaster.c:3082 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершился с кодом выхода %d" -#: postmaster/postmaster.c:3667 postmaster/postmaster.c:3679 -#: postmaster/postmaster.c:3689 postmaster/postmaster.c:3700 +#: 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:3676 +#: 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:3686 +#: 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:3698 +#: postmaster/postmaster.c:3115 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" -msgstr "%s (PID %d) завершился с неизвестным кодом состояния %d" +msgstr "%s (PID %d) завершился с нераспознанным кодом состояния %d" -#: postmaster/postmaster.c:3906 +#: postmaster/postmaster.c:3331 #, c-format msgid "abnormal database system shutdown" msgstr "аварийное выключение системы БД" -#: postmaster/postmaster.c:3932 +#: postmaster/postmaster.c:3357 #, c-format msgid "shutting down due to startup process failure" msgstr "сервер останавливается из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:3938 +#: postmaster/postmaster.c:3363 #, c-format -msgid "shutting down because restart_after_crash is off" -msgstr "сервер останавливается, так как параметр restart_after_crash равен off" +msgid "shutting down because \"restart_after_crash\" is off" +msgstr "сервер останавливается, так как \"restart_after_crash\" = \"off\"" -#: postmaster/postmaster.c:3950 +#: postmaster/postmaster.c:3375 #, c-format msgid "all server processes terminated; reinitializing" msgstr "все серверные процессы завершены... переинициализация" -#: postmaster/postmaster.c:4144 postmaster/postmaster.c:5462 -#: postmaster/postmaster.c:5860 +#: 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:4206 +#: postmaster/postmaster.c:3607 #, c-format msgid "could not fork new process for connection: %m" msgstr "породить новый процесс для соединения не удалось: %m" -#: postmaster/postmaster.c:4248 +#: postmaster/postmaster.c:3649 msgid "could not fork new process for connection: " msgstr "породить новый процесс для соединения не удалось: " -#: postmaster/postmaster.c:4354 +#: postmaster/postmaster.c:3683 #, c-format -msgid "connection received: host=%s port=%s" -msgstr "принято подключение: узел=%s порт=%s" +msgid "postmaster became multithreaded" +msgstr "процесс postmaster стал многопоточным" -#: postmaster/postmaster.c:4359 -#, c-format -msgid "connection received: host=%s" -msgstr "принято подключение: узел=%s" - -#: postmaster/postmaster.c:4596 -#, c-format -msgid "could not execute server process \"%s\": %m" -msgstr "запустить серверный процесс \"%s\" не удалось: %m" - -#: postmaster/postmaster.c:4654 -#, c-format -msgid "could not create backend parameter file mapping: error code %lu" -msgstr "" -"создать отображение файла серверных параметров не удалось (код ошибки: %lu)" - -#: postmaster/postmaster.c:4663 -#, c-format -msgid "could not map backend parameter memory: error code %lu" -msgstr "" -"отобразить файл серверных параметров в память не удалось (код ошибки: %lu)" - -#: postmaster/postmaster.c:4690 -#, c-format -msgid "subprocess command line too long" -msgstr "слишком длинная командная строка подпроцесса" - -#: postmaster/postmaster.c:4708 -#, c-format -msgid "CreateProcess() call failed: %m (error code %lu)" -msgstr "ошибка в CreateProcess(): %m (код ошибки: %lu)" - -#: postmaster/postmaster.c:4735 -#, c-format -msgid "could not unmap view of backend parameter file: error code %lu" -msgstr "" -"отключить отображение файла серверных параметров не удалось (код ошибки: %lu)" - -#: postmaster/postmaster.c:4739 -#, c-format -msgid "could not close handle to backend parameter file: error code %lu" -msgstr "" -"закрыть указатель файла серверных параметров не удалось (код ошибки: %lu)" - -#: postmaster/postmaster.c:4761 -#, c-format -msgid "giving up after too many tries to reserve shared memory" -msgstr "" -"число повторных попыток резервирования разделяемой памяти достигло предела" - -#: postmaster/postmaster.c:4762 -#, c-format -msgid "This might be caused by ASLR or antivirus software." -msgstr "Это может быть вызвано антивирусным ПО или механизмом ASLR." - -#: postmaster/postmaster.c:4935 -#, c-format -msgid "SSL configuration could not be loaded in child process" -msgstr "не удалось загрузить конфигурацию SSL в дочерний процесс" - -#: postmaster/postmaster.c:5060 -#, c-format -msgid "Please report this to <%s>." -msgstr "Пожалуйста, напишите об этой ошибке по адресу <%s>." - -#: postmaster/postmaster.c:5128 +#: postmaster/postmaster.c:3752 #, c-format msgid "database system is ready to accept read-only connections" msgstr "система БД готова принимать подключения в режиме \"только чтение\"" -#: postmaster/postmaster.c:5386 -#, c-format -msgid "could not fork startup process: %m" -msgstr "породить стартовый процесс не удалось: %m" - -#: postmaster/postmaster.c:5390 +#: postmaster/postmaster.c:3935 #, c-format -msgid "could not fork archiver process: %m" -msgstr "породить процесс архиватора не удалось: %m" +msgid "could not fork \"%s\" process: %m" +msgstr "породить процесс \"%s\" не удалось: %m" -#: postmaster/postmaster.c:5394 -#, c-format -msgid "could not fork background writer process: %m" -msgstr "породить процесс фоновой записи не удалось: %m" - -#: postmaster/postmaster.c:5398 -#, c-format -msgid "could not fork checkpointer process: %m" -msgstr "породить процесс контрольных точек не удалось: %m" - -#: postmaster/postmaster.c:5402 -#, c-format -msgid "could not fork WAL writer process: %m" -msgstr "породить процесс записи WAL не удалось: %m" - -#: postmaster/postmaster.c:5406 -#, c-format -msgid "could not fork WAL receiver process: %m" -msgstr "породить процесс считывания WAL не удалось: %m" - -#: postmaster/postmaster.c:5410 -#, c-format -msgid "could not fork process: %m" -msgstr "породить процесс не удалось: %m" - -#: postmaster/postmaster.c:5611 postmaster/postmaster.c:5638 +#: postmaster/postmaster.c:4173 postmaster/postmaster.c:4207 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "при регистрации фонового процесса не указывалось, что ему требуется " "подключение к БД" -#: postmaster/postmaster.c:5622 postmaster/postmaster.c:5649 +#: postmaster/postmaster.c:4183 postmaster/postmaster.c:4217 #, c-format msgid "invalid processing mode in background worker" msgstr "неправильный режим обработки в фоновом процессе" -#: postmaster/postmaster.c:5734 -#, c-format -msgid "could not fork worker process: %m" -msgstr "породить рабочий процесс не удалось: %m" - -#: postmaster/postmaster.c:5846 -#, c-format -msgid "no slot available for new worker process" -msgstr "для нового рабочего процесса не нашлось свободного слота" - -#: postmaster/postmaster.c:6177 -#, c-format -msgid "could not duplicate socket %d for use in backend: error code %d" -msgstr "" -"продублировать сокет %d для серверного процесса не удалось (код ошибки: %d)" - -#: postmaster/postmaster.c:6209 -#, c-format -msgid "could not create inherited socket: error code %d\n" -msgstr "создать наследуемый сокет не удалось (код ошибки: %d)\n" - -#: postmaster/postmaster.c:6238 -#, c-format -msgid "could not open backend variables file \"%s\": %s\n" -msgstr "открыть файл серверных переменных \"%s\" не удалось: %s\n" - -#: postmaster/postmaster.c:6245 -#, c-format -msgid "could not read from backend variables file \"%s\": %s\n" -msgstr "прочитать файл серверных переменных \"%s\" не удалось: %s\n" - -#: postmaster/postmaster.c:6254 -#, c-format -msgid "could not remove file \"%s\": %s\n" -msgstr "не удалось стереть файл \"%s\": %s\n" - -#: postmaster/postmaster.c:6271 -#, c-format -msgid "could not map view of backend variables: error code %lu\n" -msgstr "отобразить файл серверных переменных не удалось (код ошибки: %lu)\n" - -#: postmaster/postmaster.c:6280 +#: postmaster/postmaster.c:4277 #, c-format -msgid "could not unmap view of backend variables: error code %lu\n" -msgstr "" -"отключить отображение файла серверных переменных не удалось (код ошибки: " -"%lu)\n" +msgid "could not fork background worker process: %m" +msgstr "породить фоновый рабочий процесс не удалось: %m" -#: postmaster/postmaster.c:6287 +#: postmaster/postmaster.c:4360 #, c-format -msgid "could not close handle to backend parameter variables: error code %lu\n" -msgstr "" -"закрыть указатель файла серверных переменных не удалось (код ошибки: %lu)\n" +msgid "no slot available for new background worker process" +msgstr "для нового фонового рабочего процесса нет свободного слота" -#: postmaster/postmaster.c:6446 +#: postmaster/postmaster.c:4623 #, c-format msgid "could not read exit code for process\n" msgstr "прочитать код завершения процесса не удалось\n" -#: postmaster/postmaster.c:6488 +#: postmaster/postmaster.c:4665 #, c-format msgid "could not post child completion status\n" msgstr "отправить состояние завершения потомка не удалось\n" -#: postmaster/syslogger.c:501 postmaster/syslogger.c:1222 +#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 #, c-format msgid "could not read from logger pipe: %m" msgstr "не удалось прочитать из канала протоколирования: %m" -#: postmaster/syslogger.c:598 postmaster/syslogger.c:612 +#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 #, c-format msgid "could not create pipe for syslog: %m" msgstr "не удалось создать канал для syslog: %m" -#: postmaster/syslogger.c:677 +#: postmaster/syslogger.c:712 #, c-format msgid "could not fork system logger: %m" msgstr "не удалось породить процесс системного протоколирования: %m" -#: postmaster/syslogger.c:713 +#: postmaster/syslogger.c:731 #, c-format msgid "redirecting log output to logging collector process" msgstr "передача вывода в протокол процессу сбора протоколов" -#: postmaster/syslogger.c:714 +#: postmaster/syslogger.c:732 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "В дальнейшем протоколы будут выводиться в каталог \"%s\"." -#: postmaster/syslogger.c:722 +#: postmaster/syslogger.c:740 #, c-format msgid "could not redirect stdout: %m" msgstr "не удалось перенаправить stdout: %m" -#: postmaster/syslogger.c:727 postmaster/syslogger.c:744 +#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 #, c-format msgid "could not redirect stderr: %m" msgstr "не удалось перенаправить stderr: %m" -#: postmaster/syslogger.c:1177 +#: postmaster/syslogger.c:1128 #, c-format -msgid "could not write to log file: %s\n" -msgstr "не удалось записать в файл протокола: %s\n" +msgid "could not write to log file: %m\n" +msgstr "не удалось записать в файл протокола: %m\n" -#: postmaster/syslogger.c:1295 +#: postmaster/syslogger.c:1246 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не удалось открыть файл протокола \"%s\": %m" -#: postmaster/syslogger.c:1385 +#: postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "отключение автопрокрутки (чтобы включить, передайте SIGHUP)" -#: regex/regc_pg_locale.c:242 +#: postmaster/walsummarizer.c:740 +#, c-format +msgid "WAL summarization is not progressing" +msgstr "процесс обобщения WAL не продвигается" + +#: 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 "" +"Обобщение должно охватить %X/%X, но оно остановилось на позиции %X/%X на " +"диске и %X/%X в памяти." + +#: 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] "ожидание обобщения позиции %X/%X продолжается %ld сек." +msgstr[1] "ожидание обобщения позиции %X/%X продолжается %ld сек." +msgstr[2] "ожидание обобщения позиции %X/%X продолжается %ld сек." + +#: postmaster/walsummarizer.c:760 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "Процесс обобщения достиг позиции %X/%X на диске и %X/%X в памяти." + +#: postmaster/walsummarizer.c:1000 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "не удалось найти корректную запись после %X/%X" + +#: 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:1051 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X" +msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%X" + +#: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "" "не удалось определить, какое правило сортировки использовать для регулярного " "выражения" -#: regex/regc_pg_locale.c:265 +#: regex/regc_pg_locale.c:262 #, c-format msgid "nondeterministic collations are not supported for regular expressions" msgstr "" "недетерминированные правила сортировки не поддерживаются для регулярных " "выражений" -#: replication/libpqwalreceiver/libpqwalreceiver.c:245 -#: replication/libpqwalreceiver/libpqwalreceiver.c:332 +#: replication/libpqwalreceiver/libpqwalreceiver.c:267 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 #, c-format msgid "password is required" msgstr "требуется пароль" -#: replication/libpqwalreceiver/libpqwalreceiver.c:246 +#: replication/libpqwalreceiver/libpqwalreceiver.c:268 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." msgstr "" "Только суперпользователи могут подключаться к серверу, не требующему пароль." -#: replication/libpqwalreceiver/libpqwalreceiver.c:247 +#: replication/libpqwalreceiver/libpqwalreceiver.c:269 #, c-format msgid "" "Target server's authentication method must be changed, or set " @@ -22018,29 +22567,30 @@ msgstr "" "Необходимо сменить метод аутентификации на целевом сервере или задать " "password_required=false в параметрах подписки." -#: replication/libpqwalreceiver/libpqwalreceiver.c:259 +#: replication/libpqwalreceiver/libpqwalreceiver.c:285 #, c-format msgid "could not clear search path: %s" msgstr "не удалось очистить путь поиска: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:305 +#: replication/libpqwalreceiver/libpqwalreceiver.c:331 +#: replication/libpqwalreceiver/libpqwalreceiver.c:517 #, c-format msgid "invalid connection string syntax: %s" msgstr "ошибочный синтаксис строки подключения: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:333 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Non-superusers must provide a password in the connection string." msgstr "" "Пользователи, не являющиеся суперпользователями, должны задавать пароль в " "строке соединения." -#: replication/libpqwalreceiver/libpqwalreceiver.c:360 +#: replication/libpqwalreceiver/libpqwalreceiver.c:386 #, c-format msgid "could not parse connection string: %s" msgstr "не удалось разобрать строку подключения: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:433 +#: replication/libpqwalreceiver/libpqwalreceiver.c:459 #, c-format msgid "" "could not receive database system identifier and timeline ID from the " @@ -22049,13 +22599,13 @@ msgstr "" "не удалось получить идентификатор СУБД и код линии времени с главного " "сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:449 -#: replication/libpqwalreceiver/libpqwalreceiver.c:692 +#: replication/libpqwalreceiver/libpqwalreceiver.c:476 +#: replication/libpqwalreceiver/libpqwalreceiver.c:763 #, c-format msgid "invalid response from primary server" msgstr "неверный ответ главного сервера" -#: replication/libpqwalreceiver/libpqwalreceiver.c:450 +#: replication/libpqwalreceiver/libpqwalreceiver.c:477 #, c-format msgid "" "Could not identify system: got %d rows and %d fields, expected %d rows and " @@ -22064,86 +22614,91 @@ msgstr "" "Не удалось идентифицировать систему, получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))." -#: replication/libpqwalreceiver/libpqwalreceiver.c:535 -#: replication/libpqwalreceiver/libpqwalreceiver.c:542 -#: replication/libpqwalreceiver/libpqwalreceiver.c:572 +#: replication/libpqwalreceiver/libpqwalreceiver.c:606 +#: replication/libpqwalreceiver/libpqwalreceiver.c:613 +#: replication/libpqwalreceiver/libpqwalreceiver.c:643 #, c-format msgid "could not start WAL streaming: %s" msgstr "не удалось начать трансляцию WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:596 +#: replication/libpqwalreceiver/libpqwalreceiver.c:667 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "не удалось отправить главному серверу сообщение о конце передачи: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:619 +#: replication/libpqwalreceiver/libpqwalreceiver.c:690 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "неожиданный набор данных после конца передачи" -#: replication/libpqwalreceiver/libpqwalreceiver.c:634 +#: replication/libpqwalreceiver/libpqwalreceiver.c:705 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ошибка при остановке потоковой операции COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:644 +#: replication/libpqwalreceiver/libpqwalreceiver.c:715 #, c-format msgid "error reading result of streaming command: %s" msgstr "ошибка при чтении результата команды передачи: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:653 -#: replication/libpqwalreceiver/libpqwalreceiver.c:889 +#: replication/libpqwalreceiver/libpqwalreceiver.c:724 +#: replication/libpqwalreceiver/libpqwalreceiver.c:957 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "неожиданный результат после CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:680 +#: replication/libpqwalreceiver/libpqwalreceiver.c:751 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "не удалось получить файл истории линии времени с главного сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:693 +#: replication/libpqwalreceiver/libpqwalreceiver.c:764 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Ожидался 1 кортеж с 2 полями, однако получено кортежей: %d, полей: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:852 -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 -#: replication/libpqwalreceiver/libpqwalreceiver.c:912 +#: replication/libpqwalreceiver/libpqwalreceiver.c:920 +#: replication/libpqwalreceiver/libpqwalreceiver.c:973 +#: replication/libpqwalreceiver/libpqwalreceiver.c:980 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не удалось получить данные из потока WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:932 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 #, c-format msgid "could not send data to WAL stream: %s" msgstr "не удалось отправить данные в поток WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1024 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "не удалось создать слот репликации \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1070 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#, c-format +msgid "could not alter replication slot \"%s\": %s" +msgstr "не удалось изменить свойства слота репликации \"%s\": %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 #, c-format msgid "invalid query response" msgstr "неверный ответ на запрос" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1071 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Ожидалось полей: %d, получено: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1141 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 #, c-format msgid "the query interface requires a database connection" msgstr "для интерфейса запросов требуется подключение к БД" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1172 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 msgid "empty query" msgstr "пустой запрос" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1178 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 msgid "unexpected pipeline mode" msgstr "неожиданный режим канала" @@ -22156,35 +22711,35 @@ msgstr "" "параллельный применяющий процесс логической репликации для подписки \"%s\" " "завершён" -#: replication/logical/applyparallelworker.c:825 +#: replication/logical/applyparallelworker.c:822 #, c-format msgid "lost connection to the logical replication apply worker" msgstr "потеряна связь с применяющим процессом логической репликации" -#: replication/logical/applyparallelworker.c:1027 -#: replication/logical/applyparallelworker.c:1029 +#: replication/logical/applyparallelworker.c:1024 +#: replication/logical/applyparallelworker.c:1026 msgid "logical replication parallel apply worker" msgstr "параллельный применяющий процесс логической репликации" -#: replication/logical/applyparallelworker.c:1043 +#: replication/logical/applyparallelworker.c:1040 #, c-format msgid "logical replication parallel apply worker exited due to error" msgstr "" "параллельный применяющий процесс логической репликации завершён из-за ошибки" -#: replication/logical/applyparallelworker.c:1130 -#: replication/logical/applyparallelworker.c:1303 +#: replication/logical/applyparallelworker.c:1127 +#: replication/logical/applyparallelworker.c:1300 #, c-format msgid "lost connection to the logical replication parallel apply worker" msgstr "" "потеряна связь с параллельным применяющим процессом логическим репликации" -#: replication/logical/applyparallelworker.c:1183 +#: replication/logical/applyparallelworker.c:1180 #, c-format msgid "could not send data to shared-memory queue" msgstr "не удалось передать данные в очередь в разделяемой памяти" -#: replication/logical/applyparallelworker.c:1218 +#: replication/logical/applyparallelworker.c:1215 #, c-format msgid "" "logical replication apply worker will serialize the remaining changes of " @@ -22193,47 +22748,48 @@ msgstr "" "применяющий процесс логической репликации будет сериализовывать остальное " "содержимое удалённой транзакции %u в файл" -#: replication/logical/decode.c:180 replication/logical/logical.c:140 +#: replication/logical/decode.c:177 replication/logical/logical.c:141 #, c-format msgid "" -"logical decoding on standby requires wal_level >= logical on the primary" +"logical decoding on standby requires \"wal_level\" >= \"logical\" on the " +"primary" msgstr "" -"для логического декодирования на ведомом сервере требуется wal_level >= " -"logical на ведущем" +"для логического декодирования на ведомом сервере требуется \"wal_level\" >= " +"\"logical\" на ведущем" -#: replication/logical/launcher.c:331 +#: replication/logical/launcher.c:334 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "" "нельзя запустить процессы-обработчики логической репликации при " "max_replication_slots = 0" -#: replication/logical/launcher.c:424 +#: replication/logical/launcher.c:427 #, c-format msgid "out of logical replication worker slots" msgstr "недостаточно слотов для процессов логической репликации" -#: replication/logical/launcher.c:425 replication/logical/launcher.c:499 -#: replication/slot.c:1297 storage/lmgr/lock.c:964 storage/lmgr/lock.c:1002 -#: storage/lmgr/lock.c:2787 storage/lmgr/lock.c:4172 storage/lmgr/lock.c:4237 -#: storage/lmgr/lock.c:4587 storage/lmgr/predicate.c:2413 -#: storage/lmgr/predicate.c:2428 storage/lmgr/predicate.c:3825 +#: 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." +msgid "You might need to increase \"%s\"." +msgstr "Возможно, следует увеличить параметр \"%s\"." -#: replication/logical/launcher.c:498 +#: replication/logical/launcher.c:513 #, c-format msgid "out of background worker slots" msgstr "недостаточно слотов для фоновых рабочих процессов" -#: replication/logical/launcher.c:705 +#: replication/logical/launcher.c:720 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "" "слот обработчика логической репликации %d пуст, подключиться к нему нельзя" -#: replication/logical/launcher.c:714 +#: replication/logical/launcher.c:729 #, c-format msgid "" "logical replication worker slot %d is already used by another worker, cannot " @@ -22242,28 +22798,28 @@ msgstr "" "слот обработчика логической репликации %d уже занят другим процессом, " "подключиться к нему нельзя" -#: replication/logical/logical.c:120 +#: replication/logical/logical.c:121 #, c-format -msgid "logical decoding requires wal_level >= logical" -msgstr "для логического декодирования требуется wal_level >= logical" +msgid "logical decoding requires \"wal_level\" >= \"logical\"" +msgstr "для логического декодирования требуется \"wal_level\" >= \"logical\"" -#: replication/logical/logical.c:125 +#: replication/logical/logical.c:126 #, c-format msgid "logical decoding requires a database connection" msgstr "для логического декодирования требуется подключение к БД" -#: replication/logical/logical.c:363 replication/logical/logical.c:517 +#: 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:368 replication/logical/logical.c:522 +#: 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:375 +#: replication/logical/logical.c:377 #, c-format msgid "" "cannot create logical replication slot in transaction that has performed " @@ -22271,12 +22827,29 @@ msgid "" msgstr "" "нельзя создать слот логической репликации в транзакции, осуществляющей запись" -#: replication/logical/logical.c:534 replication/logical/logical.c:541 +#: replication/logical/logical.c:540 +#, c-format +msgid "cannot use replication slot \"%s\" for logical decoding" +msgstr "" +"слот репликации \"%s\" нельзя использовать для логического декодирования" + +#: replication/logical/logical.c:542 replication/slot.c:798 +#: replication/slot.c:829 +#, c-format +msgid "This replication slot is being synchronized from the primary server." +msgstr "Этот слот репликации синхронизируется с ведущего сервера." + +#: replication/logical/logical.c:543 +#, c-format +msgid "Specify another replication slot." +msgstr "Укажите другой слот репликации." + +#: 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:536 +#: replication/logical/logical.c:556 #, c-format msgid "" "This slot has been invalidated because it exceeded the maximum reserved size." @@ -22284,81 +22857,81 @@ msgstr "" "Этот слот был аннулирован из-за превышения максимального зарезервированного " "размера." -#: replication/logical/logical.c:543 +#: replication/logical/logical.c:563 #, c-format msgid "" "This slot has been invalidated because it was conflicting with recovery." msgstr "Этот слот был аннулирован из-за конфликта с восстановлением." -#: replication/logical/logical.c:608 +#: replication/logical/logical.c:628 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "начинается логическое декодирование для слота \"%s\"" -#: replication/logical/logical.c:610 +#: replication/logical/logical.c:630 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Передача транзакций, фиксируемых после %X/%X, чтение WAL с %X/%X." -#: replication/logical/logical.c:758 +#: replication/logical/logical.c:778 #, c-format msgid "" "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "" "слот \"%s\", модуль вывода \"%s\", в обработчике %s, связанный LSN: %X/%X" -#: replication/logical/logical.c:764 +#: replication/logical/logical.c:784 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "слот \"%s\", модуль вывода \"%s\", в обработчике %s" -#: replication/logical/logical.c:935 replication/logical/logical.c:980 -#: replication/logical/logical.c:1025 replication/logical/logical.c:1071 +#: 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 "для логической репликации во время подготовки требуется обработчик %s" -#: replication/logical/logical.c:1303 replication/logical/logical.c:1352 -#: replication/logical/logical.c:1393 replication/logical/logical.c:1479 -#: replication/logical/logical.c:1528 +#: 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 "для логической потоковой репликации требуется обработчик %s" -#: replication/logical/logical.c:1438 +#: replication/logical/logical.c:1458 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "" "для логической потоковой репликации во время подготовки требуется обработчик " "%s" -#: replication/logical/logicalfuncs.c:126 +#: replication/logical/logicalfuncs.c:123 #, c-format msgid "slot name must not be null" msgstr "имя слота не может быть NULL" -#: replication/logical/logicalfuncs.c:142 +#: replication/logical/logicalfuncs.c:139 #, c-format msgid "options array must not be null" msgstr "массив параметров не может быть NULL" -#: replication/logical/logicalfuncs.c:159 +#: replication/logical/logicalfuncs.c:156 #, c-format msgid "array must be one-dimensional" msgstr "массив должен быть одномерным" -#: replication/logical/logicalfuncs.c:165 +#: replication/logical/logicalfuncs.c:162 #, c-format msgid "array must not contain nulls" msgstr "массив не должен содержать элементы null" -#: replication/logical/logicalfuncs.c:180 utils/adt/json.c:1484 -#: utils/adt/jsonb.c:1403 +#: 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 "в массиве должно быть чётное число элементов" -#: replication/logical/logicalfuncs.c:227 +#: replication/logical/logicalfuncs.c:224 #, c-format msgid "" "logical decoding output plugin \"%s\" produces binary output, but function " @@ -22370,10 +22943,11 @@ msgstr "" #: replication/logical/origin.c:190 #, c-format msgid "" -"cannot query or manipulate replication origin when max_replication_slots = 0" +"cannot query or manipulate replication origin when \"max_replication_slots\" " +"is 0" msgstr "" "запрашивать или модифицировать источники репликации при " -"max_replication_slots = 0 нельзя" +"\"max_replication_slots\" = 0 нельзя" #: replication/logical/origin.c:195 #, c-format @@ -22410,10 +22984,11 @@ msgstr "" #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase max_replication_slots" +msgid "" +"could not find free replication state, increase \"max_replication_slots\"" msgstr "" "не удалось найти свободную ячейку для состояния репликации, увеличьте " -"max_replication_slots" +"\"max_replication_slots\"" #: replication/logical/origin.c:806 #, c-format @@ -22427,12 +23002,12 @@ msgstr "" "неверная контрольная сумма файла контрольной точки для слота репликации (%u " "вместо %u)" -#: replication/logical/origin.c:944 replication/logical/origin.c:1141 +#: replication/logical/origin.c:944 replication/logical/origin.c:1143 #, c-format msgid "replication origin with ID %d is already active for PID %d" msgstr "источник репликации с ID %d уже занят процессом с PID %d" -#: replication/logical/origin.c:955 replication/logical/origin.c:1153 +#: replication/logical/origin.c:955 replication/logical/origin.c:1156 #, c-format msgid "" "could not find free replication state slot for replication origin with ID %d" @@ -22440,29 +23015,29 @@ msgstr "" "не удалось найти свободный слот состояния репликации для источника " "репликации с ID %d" -#: replication/logical/origin.c:957 replication/logical/origin.c:1155 -#: replication/slot.c:2120 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 +#: replication/slot.c:2384 #, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Увеличьте параметр max_replication_slots и повторите попытку." +msgid "Increase \"max_replication_slots\" and try again." +msgstr "Увеличьте параметр \"max_replication_slots\" и повторите попытку." -#: replication/logical/origin.c:1112 +#: replication/logical/origin.c:1114 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "нельзя настроить источник репликации, когда он уже настроен" -#: replication/logical/origin.c:1196 replication/logical/origin.c:1412 -#: replication/logical/origin.c:1432 +#: replication/logical/origin.c:1199 replication/logical/origin.c:1415 +#: replication/logical/origin.c:1435 #, c-format msgid "no replication origin is configured" msgstr "ни один источник репликации не настроен" -#: replication/logical/origin.c:1282 +#: replication/logical/origin.c:1285 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "имя источника репликации \"%s\" зарезервировано" -#: replication/logical/origin.c:1284 +#: replication/logical/origin.c:1287 #, c-format msgid "" "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." @@ -22470,17 +23045,17 @@ msgstr "" "Имена источников \"%s\", \"%s\", а также имена, начинающиеся с \"pg_\", " "зарезервированы." -#: replication/logical/relation.c:240 +#: replication/logical/relation.c:242 #, c-format msgid "\"%s\"" msgstr "\"%s\"" -#: replication/logical/relation.c:243 +#: replication/logical/relation.c:245 #, c-format msgid ", \"%s\"" msgstr ", \"%s\"" -#: replication/logical/relation.c:249 +#: replication/logical/relation.c:251 #, c-format msgid "" "logical replication target relation \"%s.%s\" is missing replicated column: " @@ -22498,7 +23073,7 @@ msgstr[2] "" "в целевом отношении логической репликации (\"%s.%s\") отсутствуют " "реплицируемые столбцы: %s" -#: replication/logical/relation.c:304 +#: replication/logical/relation.c:306 #, c-format msgid "" "logical replication target relation \"%s.%s\" uses system columns in REPLICA " @@ -22507,50 +23082,217 @@ msgstr "" "в целевом отношении логической репликации (\"%s.%s\") в индексе REPLICA " "IDENTITY используются системные столбцы" -#: replication/logical/relation.c:396 +#: replication/logical/relation.c:398 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "целевое отношение логической репликации \"%s.%s\" не существует" -#: replication/logical/reorderbuffer.c:3936 +#: 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:4282 -#: replication/logical/reorderbuffer.c:4307 +#: replication/logical/reorderbuffer.c:4345 +#: replication/logical/reorderbuffer.c:4370 #, c-format msgid "could not read from reorderbuffer spill file: %m" -msgstr "не удалось прочитать из файла подкачки буфера пересортировки: %m" +msgstr "не удалось прочитать файл подкачки буфера пересортировки: %m" -#: replication/logical/reorderbuffer.c:4286 -#: replication/logical/reorderbuffer.c:4311 +#: 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 "" -"не удалось прочитать из файла подкачки буфера пересортировки (прочитано " -"байт: %d, требовалось: %u)" +"не удалось прочитать файл подкачки буфера пересортировки (прочитано байт: " +"%d, требовалось: %u)" -#: replication/logical/reorderbuffer.c:4561 +#: replication/logical/reorderbuffer.c:4624 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "" "ошибка при удалении файла \"%s\" в процессе удаления pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:5057 +#: replication/logical/reorderbuffer.c:5120 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d, требовалось: %d)" + +#: replication/logical/slotsync.c:215 +#, c-format +msgid "" +"could not synchronize replication slot \"%s\" because remote slot precedes " +"local slot" +msgstr "" +"синхронизировать слот репликации \"%s\" не удалось, так как состояние " +"удалённого слота предшествует локальному" + +#: replication/logical/slotsync.c:217 +#, c-format +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 "" +"Для удалённого слота текущий LSN %X/%X и xmin каталога %u, тогда как для " +"локального — LSN %X/%X и xmin каталога %u." + +#: replication/logical/slotsync.c:459 +#, c-format +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "слот репликации \"%s\" базы данных с OID %u удалён" + +#: replication/logical/slotsync.c:579 +#, c-format +msgid "could not synchronize replication slot \"%s\"" +msgstr "не удалось синхронизировать слот репликации \"%s\"" + +#: replication/logical/slotsync.c:580 +#, c-format +msgid "" +"Logical decoding could not find consistent point from local slot's LSN %X/%X." msgstr "" -"не удалось прочитать из файла \"%s\" (прочитано байт: %d, требовалось: %d)" +"При логическом декодировании не удалось найти точку согласованности от LSN " +"локального слота %X/%X." -#: replication/logical/snapbuild.c:639 +#: replication/logical/slotsync.c:589 +#, c-format +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "созданный слот репликации \"%s\" сейчас готов к синхронизации" + +#: replication/logical/slotsync.c:628 +#, 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 "" +"синхронизация слота пропускается, потому что полученная позиция LSN %X/%X " +"для слота \"%s\" предшествует позиции %X/%X на резервном сервере" + +#: replication/logical/slotsync.c:650 +#, c-format +msgid "" +"exiting from slot synchronization because same name slot \"%s\" already " +"exists on the standby" +msgstr "" +"синхронизация слота отменяется, потому что слот с таким же именем \"%s\" уже " +"существует на резервном сервере" + +#: replication/logical/slotsync.c:819 +#, c-format +msgid "could not fetch failover logical slots info from the primary server: %s" +msgstr "" +"не удалось получить информацию о переносимых логических слотах с главного " +"сервера: %s" + +#: replication/logical/slotsync.c:965 +#, 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:967 +#, c-format +msgid "Check if primary_slot_name is configured correctly." +msgstr "Проверьте правильность настройки primary_slot_name." + +#: replication/logical/slotsync.c:987 +#, c-format +msgid "cannot synchronize replication slots from a standby server" +msgstr "синхронизировать слоты репликации с резервного сервера нельзя" + +#. translator: second %s is a GUC variable name +#: replication/logical/slotsync.c:996 +#, c-format +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 "" +"replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "для синхронизации слотов репликации требуется указание \"%s\" в \"%s\"" + +#: replication/logical/slotsync.c:1050 +#, 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:1063 replication/logical/slotsync.c:1091 +#, c-format +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 "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 "" +"replication slot synchronization worker will shut down because \"%s\" is " +"disabled" +msgstr "" +"процесс синхронизации слотов репликации будет остановлен, так как \"%s\" " +"отключён" + +#: replication/logical/slotsync.c:1138 +#, c-format +msgid "" +"replication slot synchronization worker will restart because of a parameter " +"change" +msgstr "" +"процесс синхронизации слотов репликации будет перезапущен вследствие " +"изменения параметров" + +#: replication/logical/slotsync.c:1162 +#, c-format +msgid "" +"replication slot synchronization worker is shutting down on receiving SIGINT" +msgstr "" +"процесс синхронизации слотов репликации останавливается, получив сигнал " +"SIGINT" + +#: replication/logical/slotsync.c:1287 +#, c-format +msgid "cannot synchronize replication slots when standby promotion is ongoing" +msgstr "" +"синхронизировать слоты репликации, когда выполняется повышение резервного " +"сервера, нельзя" + +#: replication/logical/slotsync.c:1295 +#, c-format +msgid "cannot synchronize replication slots concurrently" +msgstr "многопоточная синхронизация слотов репликации не поддерживается" + +#: replication/logical/slotsync.c:1403 +#, c-format +msgid "slot sync worker started" +msgstr "рабочий процесс синхронизации слотов запущен" + +#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 +#: replication/walreceiver.c:307 +#, c-format +msgid "could not connect to the primary server: %s" +msgstr "не удалось подключиться к главному серверу: %s" + +#: replication/logical/snapbuild.c:653 #, c-format msgid "initial slot snapshot too large" msgstr "изначальный снимок слота слишком большой" # skip-rule: capital-letter-first -#: replication/logical/snapbuild.c:693 +#: replication/logical/snapbuild.c:707 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "" @@ -22562,68 +23304,68 @@ msgstr[1] "" msgstr[2] "" "экспортирован снимок логического декодирования: \"%s\" (ид. транзакций: %u)" -#: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480 -#: replication/logical/snapbuild.c:1996 +#: 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 "процесс логического декодирования достиг точки согласованности в %X/%X" -#: replication/logical/snapbuild.c:1390 +#: replication/logical/snapbuild.c:1406 #, c-format msgid "There are no running transactions." msgstr "Больше активных транзакций нет." -#: replication/logical/snapbuild.c:1432 +#: replication/logical/snapbuild.c:1453 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "" "процесс логического декодирования нашёл начальную стартовую точку в %X/%X" -#: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458 +#: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Ожидание транзакций (примерно %d), старее %u до конца." -#: replication/logical/snapbuild.c:1456 +#: replication/logical/snapbuild.c:1477 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "" "при логическом декодировании найдена начальная точка согласованности в %X/%X" -#: replication/logical/snapbuild.c:1482 +#: replication/logical/snapbuild.c:1503 #, c-format msgid "There are no old transactions anymore." msgstr "Больше старых транзакций нет." -#: replication/logical/snapbuild.c:1883 +#: replication/logical/snapbuild.c:1904 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "" "файл состояния snapbuild \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/logical/snapbuild.c:1889 +#: replication/logical/snapbuild.c:1910 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "" "файл состояния snapbuild \"%s\" имеет неправильную версию (%u вместо %u)" -#: replication/logical/snapbuild.c:1930 +#: replication/logical/snapbuild.c:1951 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" "в файле состояния snapbuild \"%s\" неверная контрольная сумма (%u вместо %u)" -#: replication/logical/snapbuild.c:1998 +#: replication/logical/snapbuild.c:2019 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Логическое декодирование начнётся с сохранённого снимка." -#: replication/logical/snapbuild.c:2105 +#: replication/logical/snapbuild.c:2126 #, c-format msgid "could not parse file name \"%s\"" msgstr "не удалось разобрать имя файла \"%s\"" -#: replication/logical/tablesync.c:160 +#: replication/logical/tablesync.c:161 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " @@ -22632,7 +23374,7 @@ msgstr "" "процесс синхронизации таблицы при логической репликации для подписки \"%s\", " "таблицы \"%s\" закончил обработку" -#: replication/logical/tablesync.c:639 +#: replication/logical/tablesync.c:641 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart so " @@ -22641,25 +23383,25 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "перезапущен, чтобы можно было включить режим two_phase" -#: replication/logical/tablesync.c:814 replication/logical/tablesync.c:956 +#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "" "не удалось получить информацию о таблице \"%s.%s\" с сервера публикации: %s" -#: replication/logical/tablesync.c:821 +#: replication/logical/tablesync.c:834 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "таблица \"%s.%s\" не найдена на сервере публикации" -#: replication/logical/tablesync.c:879 +#: replication/logical/tablesync.c:892 #, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" msgstr "" "не удалось получить информацию о списке столбцов таблицы \"%s.%s\" с сервера " "публикации: %s" -#: replication/logical/tablesync.c:1058 +#: replication/logical/tablesync.c:1071 #, c-format msgid "" "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: " @@ -22668,25 +23410,25 @@ msgstr "" "не удалось получить информацию о предложении WHERE таблицы \"%s.%s\" с " "сервера публикации: %s" -#: replication/logical/tablesync.c:1217 +#: replication/logical/tablesync.c:1230 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "" "не удалось начать копирование начального содержимого таблицы \"%s.%s\": %s" -#: replication/logical/tablesync.c:1418 +#: replication/logical/tablesync.c:1429 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "" "при копировании таблицы не удалось начать транзакцию на сервере публикации: " "%s" -#: replication/logical/tablesync.c:1460 +#: replication/logical/tablesync.c:1472 #, c-format msgid "replication origin \"%s\" already exists" msgstr "источник репликации \"%s\" уже существует" -#: replication/logical/tablesync.c:1493 replication/logical/worker.c:2374 +#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 #, c-format msgid "" "user \"%s\" cannot replicate into relation with row-level security enabled: " @@ -22695,14 +23437,14 @@ msgstr "" "пользователь \"%s\" не может реплицировать данные в отношение с включённой " "защитой на уровне строк: \"%s\"" -#: replication/logical/tablesync.c:1506 +#: replication/logical/tablesync.c:1518 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "" "при копировании таблицы не удалось завершить транзакцию на сервере " "публикации: %s" -#: replication/logical/worker.c:499 +#: replication/logical/worker.c:481 #, c-format msgid "" "logical replication parallel apply worker for subscription \"%s\" will stop" @@ -22710,7 +23452,7 @@ msgstr "" "параллельный применяющий процесс логической репликации для подписки \"%s\" " "будет остановлен" -#: replication/logical/worker.c:501 +#: replication/logical/worker.c:483 #, c-format msgid "" "Cannot handle streamed replication transactions using parallel apply workers " @@ -22720,13 +23462,13 @@ msgstr "" "транзакций репликации, передаваемых в потоке, пока все таблицы не " "синхронизированы." -#: replication/logical/worker.c:863 replication/logical/worker.c:978 +#: replication/logical/worker.c:852 replication/logical/worker.c:967 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "" "неправильный формат двоичных данных для столбца логической репликации %d" -#: replication/logical/worker.c:2513 +#: replication/logical/worker.c:2500 #, c-format msgid "" "publisher did not send replica identity column expected by the logical " @@ -22735,7 +23477,7 @@ msgstr "" "сервер публикации не передал столбец идентификации реплики, ожидаемый для " "целевого отношения логической репликации \"%s.%s\"" -#: replication/logical/worker.c:2520 +#: replication/logical/worker.c:2507 #, c-format msgid "" "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY " @@ -22746,22 +23488,22 @@ msgstr "" "IDENTITY, ни ключа PRIMARY KEY, и публикуемое отношение не имеет " "характеристики REPLICA IDENTITY FULL" -#: replication/logical/worker.c:3384 +#: replication/logical/worker.c:3371 #, c-format msgid "invalid logical replication message type \"??? (%d)\"" msgstr "неверный тип сообщения логической репликации \"??? (%d)\"" -#: replication/logical/worker.c:3556 +#: replication/logical/worker.c:3543 #, c-format msgid "data stream from publisher has ended" msgstr "поток данных с сервера публикации закончился" -#: replication/logical/worker.c:3713 +#: replication/logical/worker.c:3697 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "завершение обработчика логической репликации из-за тайм-аута" -#: replication/logical/worker.c:3907 +#: replication/logical/worker.c:3891 #, c-format msgid "" "logical replication worker for subscription \"%s\" will stop because the " @@ -22770,7 +23512,7 @@ msgstr "" "процесс логической репликации для подписки \"%s\" будет остановлен, так как " "подписка была удалена" -#: replication/logical/worker.c:3920 +#: replication/logical/worker.c:3905 #, c-format msgid "" "logical replication worker for subscription \"%s\" will stop because the " @@ -22779,7 +23521,7 @@ msgstr "" "процесс логической репликации для подписки \"%s\" будет остановлен, так как " "подписка была отключена" -#: replication/logical/worker.c:3951 +#: replication/logical/worker.c:3936 #, c-format msgid "" "logical replication parallel apply worker for subscription \"%s\" will stop " @@ -22788,7 +23530,7 @@ msgstr "" "параллельный применяющий процесс логической репликации для подписки \"%s\" " "будет остановлен вследствие изменения параметров" -#: replication/logical/worker.c:3955 +#: replication/logical/worker.c:3940 #, c-format msgid "" "logical replication worker for subscription \"%s\" will restart because of a " @@ -22797,8 +23539,32 @@ msgstr "" "процесс логической репликации для подписки \"%s\" будет перезапущен " "вследствие изменения параметров" +#: replication/logical/worker.c:3954 +#, c-format +msgid "" +"logical replication parallel apply worker for subscription \"%s\" will stop " +"because the subscription owner's superuser privileges have been revoked" +msgstr "" +"процесс параллельного применения изменений логической репликации для " +"подписки \"%s\" будет остановлен, потому что владелец подписки был лишён " +"прав суперпользователя" + +#: replication/logical/worker.c:3958 +#, c-format +msgid "" +"logical replication worker for subscription \"%s\" will restart because the " +"subscription owner's superuser privileges have been revoked" +msgstr "" +"процесс логической репликации для подписки \"%s\" будет перезапущен, потому " +"что владелец подписки был лишён прав суперпользователя" + #: replication/logical/worker.c:4478 #, c-format +msgid "subscription has no replication slot set" +msgstr "для подписки не задан слот репликации" + +#: replication/logical/worker.c:4591 +#, c-format msgid "" "logical replication worker for subscription %u will not start because the " "subscription was removed during startup" @@ -22806,7 +23572,7 @@ msgstr "" "процесс логической репликации для подписки %u не будет запущен, так как " "подписка была удалена при старте" -#: replication/logical/worker.c:4493 +#: replication/logical/worker.c:4607 #, c-format msgid "" "logical replication worker for subscription \"%s\" will not start because " @@ -22815,7 +23581,7 @@ msgstr "" "процесс логической репликации для подписки \"%s\" не будет запущен, так как " "подписка была отключена при старте" -#: replication/logical/worker.c:4510 +#: replication/logical/worker.c:4631 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " @@ -22824,40 +23590,35 @@ msgstr "" "процесс синхронизации таблицы при логической репликации для подписки \"%s\", " "таблицы \"%s\" запущен" -#: replication/logical/worker.c:4515 +#: replication/logical/worker.c:4636 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "" "запускается применяющий процесс логической репликации для подписки \"%s\"" -#: replication/logical/worker.c:4590 -#, c-format -msgid "subscription has no replication slot set" -msgstr "для подписки не задан слот репликации" - -#: replication/logical/worker.c:4757 +#: replication/logical/worker.c:4758 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "подписка \"%s\" была отключена из-за ошибки" -#: replication/logical/worker.c:4805 +#: 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:4819 +#: 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:4901 +#: replication/logical/worker.c:4902 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "значение skip-LSN для подписки \"%s\" очищено" -#: replication/logical/worker.c:4902 +#: replication/logical/worker.c:4903 #, c-format msgid "" "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN " @@ -22866,7 +23627,7 @@ msgstr "" "Позиция завершения удалённой транзакции в WAL (LSN) %X/%X не совпала со " "значением skip-LSN %X/%X." -#: replication/logical/worker.c:4928 +#: replication/logical/worker.c:4940 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22875,7 +23636,7 @@ msgstr "" "обработка внешних данных для источника репликации \"%s\" в контексте " "сообщения типа \"%s\"" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:4944 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22884,7 +23645,7 @@ msgstr "" "обработка внешних данных из источника репликации \"%s\" в контексте " "сообщения типа \"%s\" в транзакции %u" -#: replication/logical/worker.c:4937 +#: replication/logical/worker.c:4949 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22893,7 +23654,7 @@ msgstr "" "обработка внешних данных для источника репликации \"%s\" в контексте " "сообщения типа \"%s\" в транзакции %u, конечная позиция %X/%X" -#: replication/logical/worker.c:4948 +#: replication/logical/worker.c:4960 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22903,7 +23664,7 @@ msgstr "" "сообщения типа \"%s\" для целевого отношения репликации \"%s.%s\" в " "транзакции %u" -#: replication/logical/worker.c:4955 +#: replication/logical/worker.c:4967 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22914,7 +23675,7 @@ msgstr "" "сообщения типа \"%s\" для целевого отношения репликации \"%s.%s\" в " "транзакции %u, конечная позиция %X/%X" -#: replication/logical/worker.c:4966 +#: replication/logical/worker.c:4978 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22925,7 +23686,7 @@ msgstr "" "сообщения типа \"%s\" для целевого отношения репликации \"%s.%s\", столбца " "\"%s\", в транзакции %u" -#: replication/logical/worker.c:4974 +#: replication/logical/worker.c:4986 #, c-format msgid "" "processing remote data for replication origin \"%s\" during message type " @@ -22936,22 +23697,27 @@ msgstr "" "сообщения типа \"%s\" для целевого отношения репликации \"%s.%s\", столбца " "\"%s\", в транзакции %u, конечная позиция %X/%X" -#: replication/pgoutput/pgoutput.c:317 +#: replication/pgoutput/pgoutput.c:322 #, c-format msgid "invalid proto_version" msgstr "неверное значение proto_version" -#: replication/pgoutput/pgoutput.c:322 +#: replication/pgoutput/pgoutput.c:327 #, c-format msgid "proto_version \"%s\" out of range" msgstr "значение proto_verson \"%s\" вне диапазона" -#: replication/pgoutput/pgoutput.c:339 +#: replication/pgoutput/pgoutput.c:344 #, c-format msgid "invalid publication_names syntax" msgstr "неверный синтаксис publication_names" -#: replication/pgoutput/pgoutput.c:440 +#: replication/pgoutput/pgoutput.c:414 replication/pgoutput/pgoutput.c:418 +#, c-format +msgid "option \"%s\" missing" +msgstr "параметр \"%s\" отсутствует" + +#: replication/pgoutput/pgoutput.c:478 #, c-format msgid "" "client sent proto_version=%d but server only supports protocol %d or lower" @@ -22959,7 +23725,7 @@ msgstr "" "клиент передал proto_version=%d, но сервер поддерживает только протокол %d и " "ниже" -#: replication/pgoutput/pgoutput.c:446 +#: replication/pgoutput/pgoutput.c:484 #, c-format msgid "" "client sent proto_version=%d but server only supports protocol %d or higher" @@ -22967,12 +23733,7 @@ msgstr "" "клиент передал proto_version=%d, но сервер поддерживает только протокол %d и " "выше" -#: replication/pgoutput/pgoutput.c:452 -#, c-format -msgid "publication_names parameter missing" -msgstr "отсутствует параметр publication_names" - -#: replication/pgoutput/pgoutput.c:466 +#: replication/pgoutput/pgoutput.c:499 #, c-format msgid "" "requested proto_version=%d does not support streaming, need %d or higher" @@ -22980,7 +23741,7 @@ msgstr "" "запрошенная версия proto_version=%d не поддерживает потоковую передачу, " "требуется версия %d или выше" -#: replication/pgoutput/pgoutput.c:472 +#: replication/pgoutput/pgoutput.c:505 #, c-format msgid "" "requested proto_version=%d does not support parallel streaming, need %d or " @@ -22989,12 +23750,12 @@ msgstr "" "запрошенная версия proto_version=%d не поддерживает параллельную потоковую " "передачу, требуется версия %d или выше" -#: replication/pgoutput/pgoutput.c:477 +#: replication/pgoutput/pgoutput.c:510 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "запрошена потоковая передача, но она не поддерживается модулем вывода" -#: replication/pgoutput/pgoutput.c:494 +#: replication/pgoutput/pgoutput.c:524 #, c-format msgid "" "requested proto_version=%d does not support two-phase commit, need %d or " @@ -23003,27 +23764,27 @@ msgstr "" "запрошенная версия proto_version=%d не поддерживает двухфазную фиксацию, " "требуется версия %d или выше" -#: replication/pgoutput/pgoutput.c:499 +#: replication/pgoutput/pgoutput.c:529 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "запрошена двухфазная фиксация, но она не поддерживается модулем вывода" -#: replication/slot.c:207 +#: replication/slot.c:260 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "имя слота репликации \"%s\" слишком короткое" -#: replication/slot.c:216 +#: replication/slot.c:269 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "имя слота репликации \"%s\" слишком длинное" -#: replication/slot.c:229 +#: replication/slot.c:282 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "имя слота репликации \"%s\" содержит недопустимый символ" -#: replication/slot.c:231 +#: replication/slot.c:284 #, c-format msgid "" "Replication slot names may only contain lower case letters, numbers, and the " @@ -23032,59 +23793,112 @@ msgstr "" "Имя слота репликации может содержать только буквы в нижнем регистре, цифры и " "знак подчёркивания." -#: replication/slot.c:285 +#: replication/slot.c:333 +#, c-format +msgid "cannot enable failover for a replication slot created on the standby" +msgstr "" +"слот репликации, созданный на ведомом сервере, не может быть переносимым" + +#: replication/slot.c:345 replication/slot.c:849 +#, c-format +msgid "cannot enable failover for a temporary replication slot" +msgstr "временный слот репликации не может быть переносимым" + +#: replication/slot.c:370 #, c-format msgid "replication slot \"%s\" already exists" msgstr "слот репликации \"%s\" уже существует" -#: replication/slot.c:295 +#: replication/slot.c:380 #, c-format msgid "all replication slots are in use" msgstr "используются все слоты репликации" -#: replication/slot.c:296 +#: replication/slot.c:381 #, c-format -msgid "Free one or increase max_replication_slots." -msgstr "Освободите ненужные или увеличьте параметр max_replication_slots." +msgid "Free one or increase \"max_replication_slots\"." +msgstr "Освободите ненужный или увеличьте параметр \"max_replication_slots\"." -#: replication/slot.c:474 replication/slotfuncs.c:736 -#: utils/activity/pgstat_replslot.c:55 utils/adt/genfile.c:774 +#: 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\" не существует" -#: replication/slot.c:520 replication/slot.c:1110 +#: replication/slot.c:606 replication/slot.c:1337 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "слот репликации \"%s\" занят процессом с PID %d" -#: replication/slot.c:756 replication/slot.c:1672 replication/slot.c:2055 +#: replication/slot.c:638 +#, c-format +msgid "acquired logical replication slot \"%s\"" +msgstr "получен слот логической репликации \"%s\"" + +#: replication/slot.c:640 +#, c-format +msgid "acquired physical replication slot \"%s\"" +msgstr "получен слот физической репликации \"%s\"" + +#: replication/slot.c:729 +#, c-format +msgid "released logical replication slot \"%s\"" +msgstr "освобождён слот логической репликации \"%s\"" + +#: replication/slot.c:731 +#, c-format +msgid "released physical replication slot \"%s\"" +msgstr "освобождён слот физической репликации \"%s\"" + +#: replication/slot.c:797 +#, c-format +msgid "cannot drop replication slot \"%s\"" +msgstr "удалить слот репликации \"%s\" нельзя" + +#: replication/slot.c:816 +#, c-format +msgid "cannot use %s with a physical replication slot" +msgstr "выполнить %s со слотом физической репликации нельзя" + +#: replication/slot.c:828 +#, c-format +msgid "cannot alter replication slot \"%s\"" +msgstr "изменить слот репликации \"%s\" нельзя" + +#: replication/slot.c:838 +#, c-format +msgid "cannot enable failover for a replication slot on the standby" +msgstr "сделать переносимым слот репликации на ведомом сервере нельзя" + +#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 #, c-format msgid "could not remove directory \"%s\"" msgstr "ошибка при удалении каталога \"%s\"" -#: replication/slot.c:1145 +#: replication/slot.c:1372 #, c-format -msgid "replication slots can only be used if max_replication_slots > 0" +msgid "replication slots can only be used if \"max_replication_slots\" > 0" msgstr "" -"слоты репликации можно использовать, только если max_replication_slots > 0" +"слоты репликации можно использовать, только если \"max_replication_slots\" > " +"0" -#: replication/slot.c:1150 +#: replication/slot.c:1377 #, c-format -msgid "replication slots can only be used if wal_level >= replica" -msgstr "слоты репликации можно использовать, только если wal_level >= replica" +msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" +msgstr "" +"слоты репликации можно использовать, только если \"wal_level\" >= \"replica\"" -#: replication/slot.c:1162 +#: replication/slot.c:1389 #, c-format msgid "permission denied to use replication slots" msgstr "нет прав для использования слотов репликации" -#: replication/slot.c:1163 +#: replication/slot.c:1390 #, c-format msgid "Only roles with the %s attribute may use replication slots." msgstr "Использовать слоты репликации могут только роли с атрибутом %s." -#: replication/slot.c:1271 +#: replication/slot.c:1498 #, c-format msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." @@ -23092,99 +23906,178 @@ msgstr[0] "Позиция restart_lsn %X/%X слота превысила пре msgstr[1] "Позиция restart_lsn %X/%X слота превысила предел на %llu Б." msgstr[2] "Позиция restart_lsn %X/%X слота превысила предел на %llu Б." -#: replication/slot.c:1279 +#: replication/slot.c:1506 #, c-format msgid "The slot conflicted with xid horizon %u." msgstr "Слот конфликтует с горизонтом xid %u." -#: replication/slot.c:1284 +#: replication/slot.c:1511 msgid "" -"Logical decoding on standby requires wal_level >= logical on the primary " -"server." +"Logical decoding on standby requires \"wal_level\" >= \"logical\" on the " +"primary server." msgstr "" -"Для логического декодирования на ведомом сервере требуется wal_level >= " -"logical на ведущем." +"Для логического декодирования на ведомом сервере требуется \"wal_level\" >= " +"\"logical\" на ведущем." -#: replication/slot.c:1292 +#: replication/slot.c:1519 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "завершение процесса %d для освобождения слота репликации \"%s\"" -#: replication/slot.c:1294 +#: replication/slot.c:1521 #, c-format msgid "invalidating obsolete replication slot \"%s\"" msgstr "аннулирование устаревшего слота репликации \"%s\"" -#: replication/slot.c:1993 +#: replication/slot.c:2249 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "" "файл слота репликации \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/slot.c:2000 +#: replication/slot.c:2256 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "файл состояния snapbuild \"%s\" имеет неподдерживаемую версию %u" -#: replication/slot.c:2007 +#: replication/slot.c:2263 +#, c-format +msgid "replication slot file \"%s\" has corrupted length %u" +msgstr "у файла слота репликации \"%s\" неверная длина: %u" + +#: replication/slot.c:2299 +#, c-format +msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" +msgstr "" +"в файле слота репликации \"%s\" неверная контрольная сумма (%u вместо %u)" + +#: replication/slot.c:2333 +#, c-format +msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" +msgstr "" +"существует слот логической репликации \"%s\", но \"wal_level\" < \"logical\"" + +#: replication/slot.c:2335 +#, c-format +msgid "Change \"wal_level\" to be \"logical\" or higher." +msgstr "Смените \"wal_level\" на \"logical\" или более высокий уровень." + +#: replication/slot.c:2339 +#, c-format +msgid "" +"physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" +msgstr "" +"существует слот физической репликации \"%s\", но \"wal_level\" < \"replica\"" + +#: replication/slot.c:2341 +#, c-format +msgid "Change \"wal_level\" to be \"replica\" or higher." +msgstr "Смените \"wal_level\" на \"replica\" или более высокий уровень." + +#: replication/slot.c:2383 +#, c-format +msgid "too many replication slots active before shutdown" +msgstr "перед завершением активно слишком много слотов репликации" + +#: replication/slot.c:2458 +#, c-format +msgid "\"%s\" is not a physical replication slot" +msgstr "\"%s\" не является слотом физической репликации" + +#: replication/slot.c:2635 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "слот репликации \"%s\", указанный в параметре \"%s\", не существует" + +#: replication/slot.c:2637 replication/slot.c:2671 replication/slot.c:2686 +#, c-format +msgid "" +"Logical replication is waiting on the standby associated with replication " +"slot \"%s\"." +msgstr "" +"Логическая репликация ожидает резервного сервера, связанного со слотом " +"репликации \"%s\"." + +#: replication/slot.c:2639 #, c-format -msgid "replication slot file \"%s\" has corrupted length %u" -msgstr "у файла слота репликации \"%s\" неверная длина: %u" +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "Создайте слот репликации \"%s\" или опустите параметр \"%s\"." -#: replication/slot.c:2043 +#: replication/slot.c:2649 #, c-format -msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" msgstr "" -"в файле слота репликации \"%s\" неверная контрольная сумма (%u вместо %u)" +"слот логической репликации \"%s\" не может быть указан в параметре \"%s\"" -#: replication/slot.c:2077 +#: replication/slot.c:2651 #, c-format -msgid "logical replication slot \"%s\" exists, but wal_level < logical" -msgstr "существует слот логической репликации \"%s\", но wal_level < logical" +msgid "" +"Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "Логическая репликация ожидает исправления слота репликации \"%s\"." -#: replication/slot.c:2079 +#: replication/slot.c:2653 #, c-format -msgid "Change wal_level to be logical or higher." -msgstr "Смените wal_level на logical или более высокий уровень." +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "" +"Удалите указание слота логической репликации \"%s\" из параметра \"%s\"." -#: replication/slot.c:2083 +#: replication/slot.c:2669 #, c-format -msgid "physical replication slot \"%s\" exists, but wal_level < replica" -msgstr "существует слот физической репликации \"%s\", но wal_level < replica" +msgid "" +"physical replication slot \"%s\" specified in parameter \"%s\" has been " +"invalidated" +msgstr "" +"слот физической репликации \"%s\", указанный в параметре \"%s\", был " +"аннулирован" -#: replication/slot.c:2085 +#: replication/slot.c:2673 #, c-format -msgid "Change wal_level to be replica or higher." -msgstr "Смените wal_level на replica или более высокий уровень." +msgid "" +"Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "" +"Удалите и пересоздайте слот репликации \"%s\" или опустите параметр \"%s\"." -#: replication/slot.c:2119 +#: replication/slot.c:2684 #, c-format -msgid "too many replication slots active before shutdown" -msgstr "перед завершением активно слишком много слотов репликации" +msgid "" +"replication slot \"%s\" specified in parameter \"%s\" does not have " +"active_pid" +msgstr "" +"у слота репликации \"%s\", указанного в параметре \"%s\", нулевое значение " +"active_pid" + +#: replication/slot.c:2688 +#, c-format +msgid "" +"Start the standby associated with the replication slot \"%s\", or amend " +"parameter \"%s\"." +msgstr "" +"Запустите резервный сервер, связанный со слотом репликации \"%s\", или " +"опустите параметр \"%s\"." -#: replication/slotfuncs.c:601 +#: replication/slotfuncs.c:526 #, c-format msgid "invalid target WAL LSN" msgstr "неверный целевой LSN" -#: replication/slotfuncs.c:623 +#: replication/slotfuncs.c:548 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "слот репликации \"%s\" нельзя продвинуть вперёд" -#: replication/slotfuncs.c:625 +#: replication/slotfuncs.c:550 #, c-format msgid "" "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Для этого слота ранее не резервировался WAL либо слот был аннулирован." -#: replication/slotfuncs.c:641 +#: replication/slotfuncs.c:566 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "" "продвинуть слот репликации к позиции %X/%X нельзя, минимальная позиция: %X/%X" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:673 #, c-format msgid "" "cannot copy physical replication slot \"%s\" as a logical replication slot" @@ -23192,7 +24085,7 @@ msgstr "" "слот физической репликации \"%s\" нельзя скопировать как слот логической " "репликации" -#: replication/slotfuncs.c:750 +#: replication/slotfuncs.c:675 #, c-format msgid "" "cannot copy logical replication slot \"%s\" as a physical replication slot" @@ -23200,17 +24093,17 @@ msgstr "" "слот логической репликации \"%s\" нельзя скопировать как слот физической " "репликации" -#: replication/slotfuncs.c:757 +#: replication/slotfuncs.c:682 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "скопировать слот репликации, для которого не резервируется WAL, нельзя" -#: replication/slotfuncs.c:834 +#: replication/slotfuncs.c:768 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "не удалось скопировать слот репликации \"%s\"" -#: replication/slotfuncs.c:836 +#: replication/slotfuncs.c:770 #, c-format msgid "" "The source replication slot was modified incompatibly during the copy " @@ -23219,21 +24112,26 @@ msgstr "" "Исходный слот репликации был модифицирован несовместимым образом во время " "копирования." -#: replication/slotfuncs.c:842 +#: replication/slotfuncs.c:776 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "" "скопировать слот логической репликации \"%s\" в незавершённом состоянии " "нельзя" -#: replication/slotfuncs.c:844 +#: replication/slotfuncs.c:778 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "" "Повторите попытку, когда для исходного слота репликации будет определена " "позиция confirmed_flush_lsn." -#: replication/syncrep.c:262 +#: replication/slotfuncs.c:877 +#, c-format +msgid "replication slots can only be synchronized to a standby server" +msgstr "слоты репликации могут синхронизироваться только с резервным сервером" + +#: replication/syncrep.c:261 #, c-format msgid "" "canceling the wait for synchronous replication and terminating connection " @@ -23242,7 +24140,7 @@ msgstr "" "отмена ожидания синхронной репликации и закрытие соединения по команде " "администратора" -#: replication/syncrep.c:263 replication/syncrep.c:280 +#: replication/syncrep.c:262 replication/syncrep.c:279 #, c-format msgid "" "The transaction has already committed locally, but might not have been " @@ -23251,147 +24149,142 @@ msgstr "" "Транзакция уже была зафиксирована локально, но, возможно, не была " "реплицирована на резервный сервер." -#: replication/syncrep.c:279 +#: replication/syncrep.c:278 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "отмена ожидания синхронной репликации по запросу пользователя" -#: replication/syncrep.c:486 +#: replication/syncrep.c:485 #, c-format -msgid "standby \"%s\" is now a synchronous standby with priority %u" -msgstr "резервный сервер \"%s\" стал синхронным с приоритетом %u" +msgid "standby \"%s\" is now a synchronous standby with priority %d" +msgstr "резервный сервер \"%s\" стал синхронным с приоритетом %d" -#: replication/syncrep.c:490 +#: replication/syncrep.c:489 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "" "резервный сервер \"%s\" стал кандидатом для включения в кворум синхронных " "резервных" -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1013 #, c-format -msgid "synchronous_standby_names parser failed" -msgstr "ошибка при разборе synchronous_standby_names" +msgid "\"synchronous_standby_names\" parser failed" +msgstr "ошибка при разборе \"synchronous_standby_names\"" -#: replication/syncrep.c:1025 +#: replication/syncrep.c:1019 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "число синхронных резервных серверов (%d) должно быть больше нуля" -#: replication/walreceiver.c:180 +#: replication/walreceiver.c:176 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "завершение процесса считывания журнала по команде администратора" -#: replication/walreceiver.c:305 -#, c-format -msgid "could not connect to the primary server: %s" -msgstr "не удалось подключиться к главному серверу: %s" - -#: replication/walreceiver.c:352 +#: replication/walreceiver.c:354 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "идентификаторы СУБД на главном и резервном серверах различаются" -#: replication/walreceiver.c:353 +#: replication/walreceiver.c:355 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "Идентификатор на главном сервере: %s, на резервном: %s." -#: replication/walreceiver.c:364 +#: replication/walreceiver.c:366 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "" "последняя линия времени %u на главном сервере отстаёт от восстанавливаемой " "линии времени %u" -#: replication/walreceiver.c:417 +#: replication/walreceiver.c:419 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "" "начало передачи журнала с главного сервера, с позиции %X/%X на линии времени " "%u" -#: replication/walreceiver.c:421 +#: replication/walreceiver.c:423 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "перезапуск передачи журнала с позиции %X/%X на линии времени %u" -#: replication/walreceiver.c:457 +#: replication/walreceiver.c:458 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "продолжить передачу WAL нельзя, восстановление уже окончено" -#: replication/walreceiver.c:501 +#: replication/walreceiver.c:502 #, c-format msgid "replication terminated by primary server" msgstr "репликация прекращена главным сервером" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:503 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "На линии времени %u в %X/%X достигнут конец журнала." -#: replication/walreceiver.c:592 +#: replication/walreceiver.c:593 #, c-format msgid "terminating walreceiver due to timeout" msgstr "завершение приёма журнала из-за тайм-аута" -#: replication/walreceiver.c:624 +#: replication/walreceiver.c:625 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "" "на главном сервере больше нет журналов для запрошенной линии времени %u" -#: replication/walreceiver.c:640 replication/walreceiver.c:1066 +#: replication/walreceiver.c:641 replication/walreceiver.c:1071 #, c-format msgid "could not close WAL segment %s: %m" msgstr "не удалось закрыть сегмент WAL %s: %m" -#: replication/walreceiver.c:759 +#: replication/walreceiver.c:760 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "загрузка файла истории для линии времени %u с главного сервера" -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:959 #, c-format -msgid "could not write to WAL segment %s at offset %u, length %lu: %m" -msgstr "не удалось записать в сегмент WAL %s (смещение %u, длина %lu): %m" +msgid "could not write to WAL segment %s at offset %d, length %lu: %m" +msgstr "не удалось записать в сегмент WAL %s (смещение %d, длина %lu): %m" -#: replication/walsender.c:519 +#: replication/walsender.c:531 #, c-format msgid "cannot use %s with a logical replication slot" msgstr "использовать %s со слотом логической репликации нельзя" -#: replication/walsender.c:623 storage/smgr/md.c:1529 +#: replication/walsender.c:635 storage/smgr/md.c:1735 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "не удалось перейти к концу файла \"%s\": %m" -#: replication/walsender.c:627 +#: replication/walsender.c:639 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "не удалось перейти к началу файла \"%s\": %m" -#: replication/walsender.c:704 +#: replication/walsender.c:853 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "" "слот логической репликации нельзя использовать для физической репликации" -#: replication/walsender.c:770 +#: replication/walsender.c:919 #, c-format msgid "" "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "" "в истории сервера нет запрошенной начальной точки %X/%X на линии времени %u" -#: replication/walsender.c:773 +#: replication/walsender.c:922 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "История этого сервера ответвилась от линии времени %u в %X/%X." -#: replication/walsender.c:817 +#: replication/walsender.c:966 #, c-format msgid "" "requested starting point %X/%X is ahead of the WAL flush position of this " @@ -23400,75 +24293,75 @@ msgstr "" "запрошенная начальная точка %X/%X впереди позиции сброшенных данных журнала " "на этом сервере (%X/%X)" -#: replication/walsender.c:1010 +#: replication/walsender.c:1160 #, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" msgstr "" "нераспознанное значение для параметра CREATE_REPLICATION_SLOT \"%s\": \"%s\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1095 +#: replication/walsender.c:1266 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s требуется выполнять не в транзакции" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1105 +#: replication/walsender.c:1276 #, c-format msgid "%s must be called inside a transaction" msgstr "%s требуется выполнять внутри транзакции" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1111 +#: replication/walsender.c:1282 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s требуется выполнять в транзакции уровня изоляции REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1116 +#: replication/walsender.c:1287 #, c-format msgid "%s must be called in a read-only transaction" msgstr "%s требуется выполнять внутри транзакции только для чтения" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1122 +#: replication/walsender.c:1293 #, c-format msgid "%s must be called before any query" msgstr "%s требуется выполнять до каких-либо запросов" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1128 +#: replication/walsender.c:1299 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s требуется вызывать не в подтранзакции" -#: replication/walsender.c:1275 +#: replication/walsender.c:1472 #, c-format msgid "terminating walsender process after promotion" msgstr "завершение процесса передачи журнала после повышения" -#: replication/walsender.c:1696 +#: replication/walsender.c:2000 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "" "нельзя выполнять новые команды, пока процесс передачи WAL находится в режиме " "остановки" -#: replication/walsender.c:1731 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "" "нельзя выполнять команды SQL в процессе, передающем WAL для физической " "репликации" -#: replication/walsender.c:1764 +#: replication/walsender.c:2068 #, c-format msgid "received replication command: %s" msgstr "получена команда репликации: %s" -#: replication/walsender.c:1772 tcop/fastpath.c:209 tcop/postgres.c:1138 -#: tcop/postgres.c:1496 tcop/postgres.c:1736 tcop/postgres.c:2210 -#: tcop/postgres.c:2648 tcop/postgres.c:2726 +#: 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 " @@ -23476,147 +24369,147 @@ msgid "" msgstr "" "текущая транзакция прервана, команды до конца блока транзакции игнорируются" -#: replication/walsender.c:1914 replication/walsender.c:1949 +#: replication/walsender.c:2233 replication/walsender.c:2268 #, c-format msgid "unexpected EOF on standby connection" msgstr "неожиданный обрыв соединения с резервным сервером" -#: replication/walsender.c:1937 +#: replication/walsender.c:2256 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неверный тип сообщения резервного сервера: \"%c\"" -#: replication/walsender.c:2026 +#: replication/walsender.c:2345 #, c-format msgid "unexpected message type \"%c\"" msgstr "неожиданный тип сообщения \"%c\"" -#: replication/walsender.c:2439 +#: replication/walsender.c:2759 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершение процесса передачи журнала из-за тайм-аута репликации" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:842 +#: rewrite/rewriteDefine.c:104 rewrite/rewriteDefine.c:835 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "правило \"%s\" для отношения \"%s\" уже существует" -#: rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:780 +#: rewrite/rewriteDefine.c:261 rewrite/rewriteDefine.c:773 #, c-format msgid "relation \"%s\" cannot have rules" msgstr "к отношению \"%s\" не могут применяться правила" -#: rewrite/rewriteDefine.c:299 +#: rewrite/rewriteDefine.c:292 #, c-format msgid "rule actions on OLD are not implemented" msgstr "действия правил для OLD не реализованы" -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:293 #, c-format msgid "Use views or triggers instead." msgstr "Воспользуйтесь представлениями или триггерами." -#: rewrite/rewriteDefine.c:304 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on NEW are not implemented" msgstr "действия правил для NEW не реализованы" -#: rewrite/rewriteDefine.c:305 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use triggers instead." msgstr "Воспользуйтесь триггерами." -#: rewrite/rewriteDefine.c:319 +#: rewrite/rewriteDefine.c:312 #, c-format msgid "relation \"%s\" cannot have ON SELECT rules" msgstr "к отношению \"%s\" не могут применяться правила ON SELECT" -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "правила INSTEAD NOTHING для SELECT не реализованы" -#: rewrite/rewriteDefine.c:330 +#: rewrite/rewriteDefine.c:323 #, c-format msgid "Use views instead." msgstr "Воспользуйтесь представлениями." -#: rewrite/rewriteDefine.c:338 +#: rewrite/rewriteDefine.c:331 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "множественные действия в правилах для SELECT не поддерживаются" -#: rewrite/rewriteDefine.c:348 +#: rewrite/rewriteDefine.c:341 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "в правилах для SELECT должно быть действие INSTEAD SELECT" -#: rewrite/rewriteDefine.c:356 +#: rewrite/rewriteDefine.c:349 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "" "правила для SELECT не должны содержать операторы, изменяющие данные, в WITH" -#: rewrite/rewriteDefine.c:364 +#: rewrite/rewriteDefine.c:357 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "в правилах для SELECT не может быть условий" -#: rewrite/rewriteDefine.c:391 +#: rewrite/rewriteDefine.c:384 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" уже является представлением" -#: rewrite/rewriteDefine.c:415 +#: rewrite/rewriteDefine.c:408 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "правило представления для \"%s\" должно называться \"%s\"" -#: rewrite/rewriteDefine.c:442 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "в правиле нельзя указать несколько списков RETURNING" -#: rewrite/rewriteDefine.c:447 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "списки RETURNING в условных правилах не поддерживаются" -#: rewrite/rewriteDefine.c:451 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "списки RETURNING поддерживаются только в правилах INSTEAD" -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:458 #, c-format msgid "non-view rule for \"%s\" must not be named \"%s\"" msgstr "" "не относящееся к представлению правило для \"%s\" не может называться \"%s\"" -#: rewrite/rewriteDefine.c:539 +#: rewrite/rewriteDefine.c:532 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "список результата правила для SELECT содержит слишком много столбцов" -#: rewrite/rewriteDefine.c:540 +#: rewrite/rewriteDefine.c:533 #, c-format msgid "RETURNING list has too many entries" msgstr "список RETURNING содержит слишком много столбцов" -#: rewrite/rewriteDefine.c:567 +#: rewrite/rewriteDefine.c:560 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "" "преобразовать отношение, содержащее удалённые столбцы, в представление нельзя" -#: rewrite/rewriteDefine.c:568 +#: rewrite/rewriteDefine.c:561 #, c-format msgid "" "cannot create a RETURNING list for a relation containing dropped columns" msgstr "" "создать список RETURNING для отношения, содержащего удалённые столбцы, нельзя" -#: rewrite/rewriteDefine.c:574 +#: rewrite/rewriteDefine.c:567 #, c-format msgid "" "SELECT rule's target entry %d has different column name from column \"%s\"" @@ -23624,67 +24517,67 @@ msgstr "" "элементу %d результата правила для SELECT присвоено имя, отличное от имени " "столбца \"%s\"" -#: rewrite/rewriteDefine.c:576 +#: rewrite/rewriteDefine.c:569 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "Имя элемента результата SELECT: \"%s\"." -#: rewrite/rewriteDefine.c:585 +#: rewrite/rewriteDefine.c:578 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "" "элемент %d результата правила для SELECT имеет тип, отличный от типа столбца " "\"%s\"" -#: rewrite/rewriteDefine.c:587 +#: rewrite/rewriteDefine.c:580 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "элемент %d списка RETURNING имеет тип, отличный от типа столбца \"%s\"" -#: rewrite/rewriteDefine.c:590 rewrite/rewriteDefine.c:614 +#: rewrite/rewriteDefine.c:583 rewrite/rewriteDefine.c:607 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "Элемент результата SELECT имеет тип %s, тогда как тип столбца - %s." -#: rewrite/rewriteDefine.c:593 rewrite/rewriteDefine.c:618 +#: rewrite/rewriteDefine.c:586 rewrite/rewriteDefine.c:611 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Элемент списка RETURNING имеет тип %s, тогда как тип столбца - %s." -#: rewrite/rewriteDefine.c:609 +#: rewrite/rewriteDefine.c:602 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "" "элемент %d результата правила для SELECT имеет размер, отличный от столбца " "\"%s\"" -#: rewrite/rewriteDefine.c:611 +#: rewrite/rewriteDefine.c:604 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "элемент %d списка RETURNING имеет размер, отличный от столбца \"%s\"" -#: rewrite/rewriteDefine.c:628 +#: rewrite/rewriteDefine.c:621 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "список результата правила для SELECT содержит недостаточно элементов" -#: rewrite/rewriteDefine.c:629 +#: rewrite/rewriteDefine.c:622 #, c-format msgid "RETURNING list has too few entries" msgstr "список RETURNING содержит недостаточно элементов" -#: rewrite/rewriteDefine.c:718 rewrite/rewriteDefine.c:833 -#: rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:711 rewrite/rewriteDefine.c:826 +#: rewrite/rewriteSupport.c:108 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "правило \"%s\" для отношения\"%s\" не существует" -#: rewrite/rewriteDefine.c:852 +#: rewrite/rewriteDefine.c:845 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "переименовывать правило ON SELECT нельзя" -#: rewrite/rewriteHandler.c:583 +#: rewrite/rewriteHandler.c:588 #, c-format msgid "" "WITH query name \"%s\" appears in both a rule action and the query being " @@ -23693,7 +24586,7 @@ msgstr "" "имя запроса WITH \"%s\" оказалось и в действии правила, и в переписываемом " "запросе" -#: rewrite/rewriteHandler.c:610 +#: rewrite/rewriteHandler.c:615 #, c-format msgid "" "INSERT ... SELECT rule actions are not supported for queries having data-" @@ -23702,113 +24595,123 @@ msgstr "" "правила INSERT ... SELECT не поддерживаются для запросов с операторами, " "изменяющими данные, в WITH" -#: rewrite/rewriteHandler.c:663 +#: rewrite/rewriteHandler.c:668 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING можно определить только для одного правила" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:939 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "в столбец \"%s\" можно вставить только значение по умолчанию" -#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:902 rewrite/rewriteHandler.c:968 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" "Столбец \"%s\" является столбцом идентификации со свойством GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:904 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для переопределения укажите OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: 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:1116 rewrite/rewriteHandler.c:1134 +#: rewrite/rewriteHandler.c:1109 rewrite/rewriteHandler.c:1127 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "многочисленные присвоения одному столбцу \"%s\"" -#: rewrite/rewriteHandler.c:2119 rewrite/rewriteHandler.c:4040 +#: rewrite/rewriteHandler.c:1682 +#, c-format +msgid "MERGE is not supported for relations with rules." +msgstr "MERGE не поддерживается для отношений с правилами." + +#: rewrite/rewriteHandler.c:1722 rewrite/rewriteHandler.c:3262 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "доступ к несистемному представлению \"%s\" ограничен" + +#: rewrite/rewriteHandler.c:2122 rewrite/rewriteHandler.c:4254 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2204 +#: rewrite/rewriteHandler.c:2227 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в политике для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2524 +#: rewrite/rewriteHandler.c:2589 msgid "Junk view columns are not updatable." msgstr "Утилизируемые столбцы представлений не обновляются." -#: rewrite/rewriteHandler.c:2529 +#: rewrite/rewriteHandler.c:2594 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "Столбцы представлений, не являющиеся столбцами базовых отношений, не " "обновляются." -#: rewrite/rewriteHandler.c:2532 +#: rewrite/rewriteHandler.c:2597 msgid "View columns that refer to system columns are not updatable." msgstr "" "Столбцы представлений, ссылающиеся на системные столбцы, не обновляются." -#: rewrite/rewriteHandler.c:2535 +#: rewrite/rewriteHandler.c:2600 msgid "View columns that return whole-row references are not updatable." msgstr "" "Столбцы представлений, возвращающие ссылки на всю строку, не обновляются." -#: rewrite/rewriteHandler.c:2596 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Представления с DISTINCT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2599 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Представления с GROUP BY не обновляются автоматически." -#: rewrite/rewriteHandler.c:2602 +#: rewrite/rewriteHandler.c:2667 msgid "Views containing HAVING are not automatically updatable." msgstr "Представления с HAVING не обновляются автоматически." -#: rewrite/rewriteHandler.c:2605 +#: rewrite/rewriteHandler.c:2670 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "Представления с UNION, INTERSECT или EXCEPT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2608 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing WITH are not automatically updatable." msgstr "Представления с WITH не обновляются автоматически." -#: rewrite/rewriteHandler.c:2611 +#: rewrite/rewriteHandler.c:2676 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Представления с LIMIT или OFFSET не обновляются автоматически." -#: rewrite/rewriteHandler.c:2623 +#: rewrite/rewriteHandler.c:2688 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" "Представления, возвращающие агрегатные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2626 +#: rewrite/rewriteHandler.c:2691 msgid "Views that return window functions are not automatically updatable." msgstr "" "Представления, возвращающие оконные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2629 +#: rewrite/rewriteHandler.c:2694 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" "Представления, возвращающие функции с результатом-множеством, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2636 rewrite/rewriteHandler.c:2640 -#: rewrite/rewriteHandler.c:2648 +#: 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." @@ -23816,27 +24719,124 @@ msgstr "" "Представления, выбирающие данные не из одной таблицы или представления, не " "обновляются автоматически." -#: rewrite/rewriteHandler.c:2651 +#: rewrite/rewriteHandler.c:2716 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Представления, содержащие TABLESAMPLE, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2675 +#: rewrite/rewriteHandler.c:2740 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" "Представления, не содержащие обновляемых столбцов, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:3155 +#: rewrite/rewriteHandler.c:3121 rewrite/rewriteHandler.c:3156 +#, c-format +msgid "cannot insert into view \"%s\"" +msgstr "вставить данные в представление \"%s\" нельзя" + +#: 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 "" +"Чтобы представление допускало добавление данных, установите триггер INSTEAD " +"OF INSERT или безусловное правило ON INSERT DO INSTEAD." + +#: rewrite/rewriteHandler.c:3129 rewrite/rewriteHandler.c:3165 +#, c-format +msgid "cannot update view \"%s\"" +msgstr "изменить данные в представлении \"%s\" нельзя" + +#: 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 "" +"Чтобы представление допускало изменение данных, установите триггер INSTEAD " +"OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." + +#: rewrite/rewriteHandler.c:3137 rewrite/rewriteHandler.c:3174 +#, c-format +msgid "cannot delete from view \"%s\"" +msgstr "удалить данные из представления \"%s\" нельзя" + +#: 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 "" +"Чтобы представление допускало удаление данных, установите триггер INSTEAD OF " +"DELETE или безусловное правило ON DELETE DO INSTEAD." + +#: 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: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: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:3352 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставить данные в столбец \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3163 +#: rewrite/rewriteHandler.c:3360 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "изменить данные в столбце \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3667 +#: rewrite/rewriteHandler.c:3368 +#, c-format +msgid "cannot merge into column \"%s\" of view \"%s\"" +msgstr "столбец \"%s\" представления \"%s\" не допускает объединение данных" + +#: rewrite/rewriteHandler.c:3396 +#, c-format +msgid "cannot merge into view \"%s\"" +msgstr "представление \"%s\" не допускает объединение данных" + +#: rewrite/rewriteHandler.c:3398 +#, c-format +msgid "" +"MERGE is not supported for views with INSTEAD OF triggers for some actions " +"but not all." +msgstr "" +"MERGE не поддерживается для представлений, имеющих триггеры INSTEAD OF для " +"некоторых, но не всех действий." + +#: 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:3912 #, c-format msgid "" "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in " @@ -23845,7 +24845,7 @@ msgstr "" "правила DO INSTEAD NOTIFY не поддерживаются в операторах, изменяющих данные, " "в WITH" -#: rewrite/rewriteHandler.c:3678 +#: rewrite/rewriteHandler.c:3923 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -23854,7 +24854,7 @@ msgstr "" "правила DO INSTEAD NOTHING не поддерживаются в операторах, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3692 +#: rewrite/rewriteHandler.c:3937 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " @@ -23863,13 +24863,13 @@ msgstr "" "условные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3696 +#: rewrite/rewriteHandler.c:3941 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "правила DO ALSO не поддерживаются для операторов, изменяющих данные, в WITH" -#: rewrite/rewriteHandler.c:3701 +#: rewrite/rewriteHandler.c:3946 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -23878,52 +24878,50 @@ msgstr "" "составные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3968 rewrite/rewriteHandler.c:3976 -#: rewrite/rewriteHandler.c:3984 -#, c-format +#: rewrite/rewriteHandler.c:4206 msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "" "Представления в сочетании с правилами DO INSTEAD с условиями не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:4089 +#: rewrite/rewriteHandler.c:4303 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "выполнить INSERT RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4091 +#: rewrite/rewriteHandler.c:4305 #, 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:4096 +#: rewrite/rewriteHandler.c:4310 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "выполнить UPDATE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4098 +#: rewrite/rewriteHandler.c:4312 #, 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:4103 +#: rewrite/rewriteHandler.c:4317 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "выполнить DELETE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4105 +#: rewrite/rewriteHandler.c:4319 #, 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:4123 +#: rewrite/rewriteHandler.c:4337 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " @@ -23932,7 +24930,7 @@ msgstr "" "INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для " "которой заданы правила INSERT или UPDATE" -#: rewrite/rewriteHandler.c:4180 +#: rewrite/rewriteHandler.c:4394 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -23941,17 +24939,17 @@ msgstr "" "WITH нельзя использовать в запросе, преобразованном правилами в несколько " "запросов" -#: rewrite/rewriteManip.c:1075 +#: rewrite/rewriteManip.c:1084 #, c-format msgid "conditional utility statements are not implemented" msgstr "условные служебные операторы не реализованы" -#: rewrite/rewriteManip.c:1419 +#: rewrite/rewriteManip.c:1431 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "условие WHERE CURRENT OF для представлений не реализовано" -#: rewrite/rewriteManip.c:1754 +#: rewrite/rewriteManip.c:1767 #, c-format msgid "" "NEW variables in ON UPDATE rules cannot reference columns that are part of a " @@ -23995,41 +24993,41 @@ msgstr "нераспознанный параметр Snowball: \"%s\"" msgid "missing Language parameter" msgstr "отсутствует параметр Language" -#: statistics/extended_stats.c:179 +#: statistics/extended_stats.c:176 #, c-format msgid "" "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "" "объект статистики \"%s.%s\" не может быть вычислен для отношения \"%s.%s\"" -#: statistics/mcv.c:1372 +#: statistics/mcv.c:1368 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: storage/buffer/bufmgr.c:612 storage/buffer/bufmgr.c:769 +#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "обращаться к временным таблицам других сеансов нельзя" -#: storage/buffer/bufmgr.c:1137 +#: storage/buffer/bufmgr.c:1532 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "неверная страница в блоке %u отношения %s; страница обнуляется" -#: storage/buffer/bufmgr.c:1931 storage/buffer/localbuf.c:359 +#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "не удалось увеличить отношение \"%s\" до блока %u" -#: storage/buffer/bufmgr.c:1998 +#: storage/buffer/bufmgr.c:2348 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "неожиданные данные после EOF в блоке %u отношения %s" -#: storage/buffer/bufmgr.c:2000 +#: storage/buffer/bufmgr.c:2350 #, c-format msgid "" "This has been seen to occur with buggy kernels; consider updating your " @@ -24038,37 +25036,32 @@ msgstr "" "Эта ситуация может возникать из-за ошибок в ядре; возможно, вам следует " "обновить ОС." -#: storage/buffer/bufmgr.c:5219 +#: storage/buffer/bufmgr.c:5653 #, c-format msgid "could not write block %u of %s" msgstr "не удалось запись блок %u файла %s" -#: storage/buffer/bufmgr.c:5221 +#: storage/buffer/bufmgr.c:5655 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Множественные сбои - возможно, постоянная ошибка записи." -#: storage/buffer/bufmgr.c:5243 storage/buffer/bufmgr.c:5263 +#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 #, c-format msgid "writing block %u of relation %s" msgstr "запись блока %u отношения %s" -#: storage/buffer/bufmgr.c:5593 -#, c-format -msgid "snapshot too old" -msgstr "снимок слишком стар" - -#: storage/buffer/localbuf.c:219 +#: storage/buffer/localbuf.c:220 #, c-format msgid "no empty local buffer available" msgstr "нет пустого локального буфера" -#: storage/buffer/localbuf.c:592 +#: storage/buffer/localbuf.c:597 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "обращаться к временным таблицам во время параллельных операций нельзя" -#: storage/buffer/localbuf.c:699 +#: storage/buffer/localbuf.c:712 #, c-format msgid "" "\"temp_buffers\" cannot be changed after any temporary tables have been " @@ -24094,7 +25087,7 @@ msgstr "" msgid "could not read from temporary file: read only %zu of %zu bytes" msgstr "не удалось прочитать временный файл (прочитано байт: %zu из %zu)" -#: storage/file/buffile.c:774 storage/file/buffile.c:895 +#: storage/file/buffile.c:774 storage/file/buffile.c:877 #, c-format msgid "" "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" @@ -24102,115 +25095,115 @@ msgstr "" "не удалось определить размер временного файла \"%s\", входящего в BufFile " "\"%s\": %m" -#: storage/file/buffile.c:974 +#: storage/file/buffile.c:956 #, c-format msgid "could not delete fileset \"%s\": %m" msgstr "ошибка удаления набора файлов \"%s\": %m" -#: storage/file/buffile.c:992 storage/smgr/md.c:338 storage/smgr/md.c:1041 +#: 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" -#: storage/file/fd.c:537 storage/file/fd.c:609 storage/file/fd.c:645 +#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 #, c-format msgid "could not flush dirty data: %m" msgstr "не удалось сбросить грязные данные: %m" -#: storage/file/fd.c:567 +#: storage/file/fd.c:613 #, c-format msgid "could not determine dirty data size: %m" msgstr "не удалось определить размер грязных данных: %m" -#: storage/file/fd.c:619 +#: storage/file/fd.c:665 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "ошибка в munmap() при сбросе данных на диск: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:983 #, c-format msgid "getrlimit failed: %m" msgstr "ошибка в getrlimit(): %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1073 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "недостаточно дескрипторов файлов для запуска серверного процесса" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1074 #, c-format msgid "System allows %d, server needs at least %d." msgstr "Система может выделить: %d, серверу требуется минимум: %d." -#: storage/file/fd.c:1116 storage/file/fd.c:2565 storage/file/fd.c:2674 -#: storage/file/fd.c:2825 +#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 +#: storage/file/fd.c:2878 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "нехватка дескрипторов файлов: %m; освободите их и повторите попытку" -#: storage/file/fd.c:1490 +#: storage/file/fd.c:1536 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "временный файл: путь \"%s\", размер %lu" -#: storage/file/fd.c:1629 +#: storage/file/fd.c:1675 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "не удалось создать временный каталог \"%s\": %m" -#: storage/file/fd.c:1636 +#: storage/file/fd.c:1682 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "не удалось создать временный подкаталог \"%s\": %m" -#: storage/file/fd.c:1833 +#: storage/file/fd.c:1879 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "не удалось создать временный файл \"%s\": %m" -#: storage/file/fd.c:1869 +#: storage/file/fd.c:1915 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "не удалось открыть временный файл \"%s\": %m" -#: storage/file/fd.c:1910 +#: storage/file/fd.c:1956 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "ошибка удаления временного файла \"%s\": %m" -#: storage/file/fd.c:1998 +#: storage/file/fd.c:2044 #, c-format msgid "could not delete file \"%s\": %m" msgstr "ошибка удаления файла \"%s\": %m" -#: storage/file/fd.c:2185 +#: storage/file/fd.c:2234 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "размер временного файла превышает предел temp_file_limit (%d КБ)" -#: storage/file/fd.c:2541 storage/file/fd.c:2600 +#: storage/file/fd.c:2594 storage/file/fd.c:2653 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "превышен предел maxAllocatedDescs (%d) при попытке открыть файл \"%s\"" -#: storage/file/fd.c:2645 +#: storage/file/fd.c:2698 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке выполнить команду \"%s\"" -#: storage/file/fd.c:2801 +#: storage/file/fd.c:2854 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке открыть каталог \"%s\"" -#: storage/file/fd.c:3331 +#: storage/file/fd.c:3384 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "в каталоге временных файлов обнаружен неуместный файл: \"%s\"" -#: storage/file/fd.c:3449 +#: storage/file/fd.c:3502 #, c-format msgid "" "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" @@ -24218,12 +25211,7 @@ msgstr "" "синхронизация каталога данных (syncfs), прошло времени: %ld.%02d с, текущий " "путь: %s" -#: storage/file/fd.c:3463 -#, c-format -msgid "could not synchronize file system for file \"%s\": %m" -msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" - -#: storage/file/fd.c:3676 +#: storage/file/fd.c:3729 #, c-format msgid "" "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: " @@ -24232,7 +25220,7 @@ msgstr "" "синхронизация каталога данных (подготовка к fsync), прошло времени: %ld.%02d " "с, текущий путь: %s" -#: storage/file/fd.c:3708 +#: storage/file/fd.c:3761 #, c-format msgid "" "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" @@ -24240,25 +25228,36 @@ msgstr "" "синхронизация каталога данных (fsync), прошло времени: %ld.%02d с, текущий " "путь: %s" -#: storage/file/fd.c:3897 +#: storage/file/fd.c:3950 #, c-format -msgid "debug_io_direct is not supported on this platform." -msgstr "Параметр debug_io_direct на этой платформе не поддерживается." +msgid "\"debug_io_direct\" is not supported on this platform." +msgstr "Параметр \"debug_io_direct\" не поддерживается в этой ОС." -#: storage/file/fd.c:3944 +#: storage/file/fd.c:3964 +#, c-format +msgid "Invalid list syntax in parameter \"%s\"" +msgstr "Неверный формат списка в параметре \"%s\"." + +#: storage/file/fd.c:3984 +#, c-format +msgid "Invalid option \"%s\"" +msgstr "Неверный параметр \"%s\"." + +#: storage/file/fd.c:3997 #, c-format msgid "" -"debug_io_direct is not supported for WAL because XLOG_BLCKSZ is too small" +"\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" msgstr "" -"режим debug_io_direct не поддерживается для WAL из-за слишком маленького " +"режим \"debug_io_direct\" не поддерживается для WAL из-за слишком маленького " "размера XLOG_BLCKSZ" -#: storage/file/fd.c:3951 +#: storage/file/fd.c:4004 #, c-format -msgid "debug_io_direct is not supported for data because BLCKSZ is too small" +msgid "" +"\"debug_io_direct\" is not supported for data because BLCKSZ is too small" msgstr "" -"режим debug_io_direct не поддерживается для данных из-за слишком маленького " -"размера BLCKSZ" +"режим \"debug_io_direct\" не поддерживается для данных из-за слишком " +"маленького размера BLCKSZ" #: storage/file/reinit.c:145 #, c-format @@ -24278,22 +25277,22 @@ msgstr "" "сброс нежурналируемых отношений (очистка), прошло времени: %ld.%02d s, " "текущий путь: %s" -#: storage/file/sharedfileset.c:79 +#: storage/file/sharedfileset.c:73 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "не удалось подключиться к уже уничтоженному набору SharedFileSet" -#: storage/ipc/dsm.c:352 +#: storage/ipc/dsm.c:379 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "сегмент управления динамической разделяемой памятью испорчен" -#: storage/ipc/dsm.c:417 +#: storage/ipc/dsm.c:444 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "сегмент управления динамической разделяемой памятью не в порядке" -#: storage/ipc/dsm.c:599 +#: storage/ipc/dsm.c:626 #, c-format msgid "too many dynamic shared memory segments" msgstr "слишком много сегментов динамической разделяемой памяти" @@ -24354,18 +25353,46 @@ msgstr "не удалось закрыть сегмент разделяемой msgid "could not duplicate handle for \"%s\": %m" msgstr "не удалось продублировать указатель для \"%s\": %m" -#: storage/ipc/procarray.c:3795 +#: storage/ipc/dsm_registry.c:142 +#, c-format +msgid "DSM segment name cannot be empty" +msgstr "имя DSM-сегмента не может быть пустым" + +#: storage/ipc/dsm_registry.c:146 +#, c-format +msgid "DSM segment name too long" +msgstr "имя DSM-сегмента слишком длинное" + +#: storage/ipc/dsm_registry.c:150 +#, c-format +msgid "DSM segment size must be nonzero" +msgstr "размер DSM-сегмента должен быть ненулевым" + +#: storage/ipc/dsm_registry.c:176 +#, c-format +msgid "requested DSM segment size does not match size of existing segment" +msgstr "" +"запрошенный размер сегмента DSM не совпадает с размером существующего " +"сегмента" + +#: 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:3857 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "база \"%s\" используется подготовленными транзакциями" -#: storage/ipc/procarray.c:3827 storage/ipc/procarray.c:3836 +#: 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:3828 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 " @@ -24374,7 +25401,7 @@ msgstr "" "Только роли с атрибутом %s могут завершать процессы, принадлежащие ролям с " "атрибутом %s." -#: storage/ipc/procarray.c:3837 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 " @@ -24383,45 +25410,45 @@ msgstr "" "Только роли с правами роли, которой принадлежит процесс, или с правами роли " "\"%s\" могут завершить этот процесс." -#: storage/ipc/procsignal.c:420 +#: storage/ipc/procsignal.c:416 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "" "продолжается ожидание получения сигнала ProcSignalBarrier обслуживающим " "процессом с PID %d" -#: storage/ipc/shm_mq.c:384 +#: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" msgstr "" "не удалось передать сообщение размером %zu через очередь в разделяемой памяти" -#: storage/ipc/shm_mq.c:719 +#: storage/ipc/shm_mq.c:718 #, c-format msgid "invalid message size %zu in shared memory queue" msgstr "неверный размер сообщения %zu в очереди в разделяемой памяти" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:963 -#: storage/lmgr/lock.c:1001 storage/lmgr/lock.c:2786 storage/lmgr/lock.c:4171 -#: storage/lmgr/lock.c:4236 storage/lmgr/lock.c:4586 -#: storage/lmgr/predicate.c:2412 storage/lmgr/predicate.c:2427 -#: storage/lmgr/predicate.c:3824 storage/lmgr/predicate.c:4871 -#: utils/hash/dynahash.c:1107 +#: 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 "нехватка разделяемой памяти" -#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 +#: storage/ipc/shmem.c:161 storage/ipc/shmem.c:257 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "нехватка разделяемой памяти (требовалось байт: %zu)" -#: storage/ipc/shmem.c:445 +#: storage/ipc/shmem.c:436 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "не удалось создать запись ShmemIndex для структуры данных \"%s\"" -#: storage/ipc/shmem.c:460 +#: storage/ipc/shmem.c:451 #, c-format msgid "" "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, " @@ -24430,7 +25457,7 @@ msgstr "" "размер записи ShmemIndex не соответствует структуре данных " "\"%s\" (ожидалось: %zu, фактически: %zu)" -#: storage/ipc/shmem.c:479 +#: storage/ipc/shmem.c:470 #, c-format msgid "" "not enough shared memory for data structure \"%s\" (%zu bytes requested)" @@ -24438,7 +25465,7 @@ msgstr "" "недостаточно разделяемой памяти для структуры данных \"%s\" (требовалось " "байт: %zu)" -#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 +#: storage/ipc/shmem.c:502 storage/ipc/shmem.c:521 #, c-format msgid "requested shared memory size overflows size_t" msgstr "запрошенный размер разделяемой памяти не умещается в size_t" @@ -24448,8 +25475,8 @@ msgstr "запрошенный размер разделяемой памяти msgid "PID %d is not a PostgreSQL backend process" msgstr "PID %d не относится к обслуживающему процессу PostgreSQL" -#: storage/ipc/signalfuncs.c:109 storage/lmgr/proc.c:1387 -#: utils/adt/mcxtfuncs.c:190 +#: 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" @@ -24495,96 +25522,90 @@ msgstr[2] "обслуживающий процесс с PID %d не заверш msgid "\"timeout\" must not be negative" msgstr "\"timeout\" не может быть отрицательным" -#: storage/ipc/signalfuncs.c:284 -#, c-format -msgid "must be superuser to rotate log files with adminpack 1.0" -msgstr "" -"прокручивать файлы протоколов, используя adminpack 1.0, может только " -"суперпользователь" - -#. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:286 utils/adt/genfile.c:250 -#, c-format -msgid "Consider using %s, which is part of core, instead." -msgstr "Рассмотрите возможность использования функции %s, включённой в ядро." - -#: storage/ipc/signalfuncs.c:292 storage/ipc/signalfuncs.c:312 +#: storage/ipc/signalfuncs.c:285 #, c-format msgid "rotation not possible because log collection not active" msgstr "прокрутка невозможна, так как протоколирование отключено" -#: storage/ipc/standby.c:330 +#: storage/ipc/standby.c:329 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "процесс восстановления продолжает ожидание после %ld.%03d мс: %s" -#: storage/ipc/standby.c:339 +#: storage/ipc/standby.c:338 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "процесс восстановления завершил ожидание после %ld.%03d мс: %s" -#: storage/ipc/standby.c:921 tcop/postgres.c:3384 +#: storage/ipc/standby.c:920 tcop/postgres.c:3196 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "" "выполнение оператора отменено из-за конфликта с процессом восстановления" -#: storage/ipc/standby.c:922 tcop/postgres.c:2533 +#: storage/ipc/standby.c:921 tcop/postgres.c:2557 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" "Транзакция пользователя привела к взаимоблокировке с процессом " "восстановления." -#: storage/ipc/standby.c:1488 +#: storage/ipc/standby.c:1486 msgid "unknown reason" msgstr "причина неизвестна" -#: storage/ipc/standby.c:1493 +#: storage/ipc/standby.c:1491 msgid "recovery conflict on buffer pin" msgstr "конфликт восстановления при закреплении буфера" -#: storage/ipc/standby.c:1496 +#: storage/ipc/standby.c:1494 msgid "recovery conflict on lock" msgstr "конфликт восстановления при получении блокировки" -#: storage/ipc/standby.c:1499 +#: storage/ipc/standby.c:1497 msgid "recovery conflict on tablespace" msgstr "конфликт восстановления при обращении к табличному пространству" -#: storage/ipc/standby.c:1502 +#: storage/ipc/standby.c:1500 msgid "recovery conflict on snapshot" msgstr "конфликт восстановления при получении снимка" -#: storage/ipc/standby.c:1505 +#: storage/ipc/standby.c:1503 msgid "recovery conflict on replication slot" msgstr "конфликт восстановления со слотом репликации" -#: storage/ipc/standby.c:1508 +#: storage/ipc/standby.c:1506 msgid "recovery conflict on buffer deadlock" msgstr "конфликт восстановления из-за взаимной блокировки буфера" -#: storage/ipc/standby.c:1511 +#: storage/ipc/standby.c:1509 msgid "recovery conflict on database" msgstr "конфликт восстановления при обращении к базе данных" -#: storage/large_object/inv_api.c:191 +#: storage/large_object/inv_api.c:190 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "" "в записи pg_largeobject для OID %u, стр. %d неверный размер поля данных (%d)" -#: storage/large_object/inv_api.c:273 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "неверные флаги для открытия большого объекта: %d" -#: storage/large_object/inv_api.c:456 +#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 +#: storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 +#: storage/large_object/inv_api.c:807 +#, c-format +msgid "permission denied for large object %u" +msgstr "нет доступа к большому объекту %u" + +#: storage/large_object/inv_api.c:455 #, c-format msgid "invalid whence setting: %d" msgstr "неверное значение ориентира: %d" -#: storage/large_object/inv_api.c:628 +#: storage/large_object/inv_api.c:627 #, c-format msgid "invalid large object write request size: %d" msgstr "неверный размер записи большого объекта: %d" @@ -24610,113 +25631,113 @@ msgstr "обнаружена взаимоблокировка" msgid "See server log for query details." msgstr "Подробности запроса смотрите в протоколе сервера." -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "при изменении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:862 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "при удалении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:865 +#: storage/lmgr/lmgr.c:854 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "при блокировке кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:868 +#: 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:871 +#: storage/lmgr/lmgr.c:860 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "при добавлении кортежа индекса (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:874 +#: storage/lmgr/lmgr.c:863 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "при проверке уникальности кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:877 +#: storage/lmgr/lmgr.c:866 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "при перепроверке изменённого кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:880 +#: storage/lmgr/lmgr.c:869 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" "при проверке ограничения-исключения для кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:1212 +#: storage/lmgr/lmgr.c:1239 #, c-format msgid "relation %u of database %u" msgstr "отношение %u базы данных %u" -#: storage/lmgr/lmgr.c:1218 +#: storage/lmgr/lmgr.c:1245 #, c-format msgid "extension of relation %u of database %u" msgstr "расширение отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1224 +#: storage/lmgr/lmgr.c:1251 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid базы %u" -#: storage/lmgr/lmgr.c:1229 +#: storage/lmgr/lmgr.c:1256 #, c-format msgid "page %u of relation %u of database %u" msgstr "страница %u отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1236 +#: storage/lmgr/lmgr.c:1263 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "кортеж (%u,%u) отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1244 +#: storage/lmgr/lmgr.c:1271 #, c-format msgid "transaction %u" msgstr "транзакция %u" -#: storage/lmgr/lmgr.c:1249 +#: storage/lmgr/lmgr.c:1276 #, c-format msgid "virtual transaction %d/%u" msgstr "виртуальная транзакция %d/%u" -#: storage/lmgr/lmgr.c:1255 +#: storage/lmgr/lmgr.c:1282 #, c-format msgid "speculative token %u of transaction %u" msgstr "спекулятивный маркер %u транзакции %u" -#: storage/lmgr/lmgr.c:1261 +#: storage/lmgr/lmgr.c:1288 #, c-format msgid "object %u of class %u of database %u" msgstr "объект %u класса %u базы данных %u" -#: storage/lmgr/lmgr.c:1269 +#: storage/lmgr/lmgr.c:1296 #, c-format msgid "user lock [%u,%u,%u]" msgstr "пользовательская блокировка [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1276 +#: storage/lmgr/lmgr.c:1303 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "рекомендательная блокировка [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1284 +#: 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:1291 +#: storage/lmgr/lmgr.c:1318 #, c-format msgid "unrecognized locktag type %d" msgstr "нераспознанный тип блокировки %d" -#: storage/lmgr/lock.c:791 +#: storage/lmgr/lock.c:812 #, c-format msgid "" "cannot acquire lock mode %s on database objects while recovery is in progress" @@ -24724,7 +25745,7 @@ msgstr "" "пока выполняется восстановление, нельзя получить блокировку объектов базы " "данных в режиме %s" -#: storage/lmgr/lock.c:793 +#: storage/lmgr/lock.c:814 #, c-format msgid "" "Only RowExclusiveLock or less can be acquired on database objects during " @@ -24733,7 +25754,7 @@ msgstr "" "В процессе восстановления для объектов базы данных может быть получена " "только блокировка RowExclusiveLock или менее сильная." -#: storage/lmgr/lock.c:3235 storage/lmgr/lock.c:3303 storage/lmgr/lock.c:3419 +#: 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 " @@ -24742,21 +25763,21 @@ msgstr "" "нельзя выполнить PREPARE, удерживая блокировки на уровне сеанса и на уровне " "транзакции для одного объекта" -#: storage/lmgr/predicate.c:649 +#: storage/lmgr/predicate.c:653 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "в пуле недостаточно элементов для записи о конфликте чтения/записи" -#: storage/lmgr/predicate.c:650 storage/lmgr/predicate.c:675 +#: storage/lmgr/predicate.c:654 storage/lmgr/predicate.c:679 #, c-format msgid "" "You might need to run fewer transactions at a time or increase " -"max_connections." +"\"max_connections\"." msgstr "" -"Попробуйте уменьшить число транзакций в секунду или увеличить параметр " -"max_connections." +"Попробуйте уменьшить число одновременных транзакций или увеличить параметр " +"\"max_connections\"." -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/predicate.c:678 #, c-format msgid "" "not enough elements in RWConflictPool to record a potential read/write " @@ -24765,13 +25786,13 @@ msgstr "" "в пуле недостаточно элементов для записи о потенциальном конфликте чтения/" "записи" -#: storage/lmgr/predicate.c:1630 +#: storage/lmgr/predicate.c:1686 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "" "Параметр \"default_transaction_isolation\" имеет значение \"serializable\"." -#: storage/lmgr/predicate.c:1631 +#: storage/lmgr/predicate.c:1687 #, c-format msgid "" "You can use \"SET default_transaction_isolation = 'repeatable read'\" to " @@ -24780,27 +25801,27 @@ msgstr "" "Чтобы изменить режим по умолчанию, выполните \"SET " "default_transaction_isolation = 'repeatable read'\"." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1738 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "транзакция, импортирующая снимок, не должна быть READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1761 utils/time/snapmgr.c:570 -#: utils/time/snapmgr.c:576 +#: 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:1762 utils/time/snapmgr.c:577 +#: 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:3935 storage/lmgr/predicate.c:3971 -#: storage/lmgr/predicate.c:4004 storage/lmgr/predicate.c:4012 -#: storage/lmgr/predicate.c:4051 storage/lmgr/predicate.c:4281 -#: storage/lmgr/predicate.c:4600 storage/lmgr/predicate.c:4612 -#: storage/lmgr/predicate.c:4659 storage/lmgr/predicate.c:4695 +#: 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" @@ -24808,25 +25829,25 @@ msgstr "" "не удалось сериализовать доступ из-за зависимостей чтения/записи между " "транзакциями" -#: storage/lmgr/predicate.c:3937 storage/lmgr/predicate.c:3973 -#: storage/lmgr/predicate.c:4006 storage/lmgr/predicate.c:4014 -#: storage/lmgr/predicate.c:4053 storage/lmgr/predicate.c:4283 -#: storage/lmgr/predicate.c:4602 storage/lmgr/predicate.c:4614 -#: storage/lmgr/predicate.c:4661 storage/lmgr/predicate.c:4697 +#: 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:349 +#: storage/lmgr/proc.c:353 #, c-format msgid "" -"number of requested standby connections exceeds max_wal_senders (currently " -"%d)" +"number of requested standby connections exceeds " +"\"max_wal_senders\" (currently %d)" msgstr "" -"число запрошенных подключений резервных серверов превосходит max_wal_senders " -"(сейчас: %d)" +"число запрошенных подключений резервных серверов превышает " +"\"max_wal_senders\" (сейчас: %d)" -#: storage/lmgr/proc.c:1480 +#: storage/lmgr/proc.c:1546 #, c-format msgid "" "process %d avoided deadlock for %s on %s by rearranging queue order after " @@ -24835,7 +25856,7 @@ msgstr "" "процесс %d избежал взаимоблокировки, ожидая в режиме %s блокировку \"%s\", " "изменив порядок очереди через %ld.%03d мс" -#: storage/lmgr/proc.c:1495 +#: storage/lmgr/proc.c:1561 #, c-format msgid "" "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" @@ -24843,121 +25864,266 @@ msgstr "" "процесс %d обнаружил взаимоблокировку, ожидая в режиме %s блокировку \"%s\" " "в течение %ld.%03d мс" -#: storage/lmgr/proc.c:1504 +#: storage/lmgr/proc.c:1570 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "" "процесс %d продолжает ожидать в режиме %s блокировку \"%s\" в течение %ld." "%03d мс" -#: storage/lmgr/proc.c:1511 +#: storage/lmgr/proc.c:1577 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "процесс %d получил в режиме %s блокировку \"%s\" через %ld.%03d мс" -#: storage/lmgr/proc.c:1528 +#: storage/lmgr/proc.c:1594 +#, c-format +msgid "process %d failed to acquire %s on %s after %ld.%03d ms" +msgstr "" +"процесс %d не смог получить в режиме %s блокировку \"%s\" за %ld.%03d мс" + +#: storage/page/bufpage.c:152 +#, c-format +msgid "page verification failed, calculated checksum %u but expected %u" +msgstr "" +"ошибка проверки страницы: получена контрольная сумма %u, а ожидалась - %u" + +#: storage/page/bufpage.c:217 storage/page/bufpage.c:730 +#: storage/page/bufpage.c:1073 storage/page/bufpage.c:1208 +#: storage/page/bufpage.c:1314 storage/page/bufpage.c:1426 +#, c-format +msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" +msgstr "" +"испорченные указатели страницы: нижний = %u, верхний = %u, спецобласть = %u" + +#: storage/page/bufpage.c:759 +#, c-format +msgid "corrupted line pointer: %u" +msgstr "испорченный линейный указатель: %u" + +#: storage/page/bufpage.c:789 storage/page/bufpage.c:1266 +#, c-format +msgid "corrupted item lengths: total %u, available space %u" +msgstr "испорченный размер элемента (общий размер: %u, доступно: %u)" + +#: storage/page/bufpage.c:1092 storage/page/bufpage.c:1233 +#: storage/page/bufpage.c:1330 storage/page/bufpage.c:1442 +#, c-format +msgid "corrupted line pointer: offset = %u, size = %u" +msgstr "испорченный линейный указатель: смещение = %u, размер = %u" + +#: storage/smgr/md.c:485 storage/smgr/md.c:547 +#, c-format +msgid "cannot extend file \"%s\" beyond %u blocks" +msgstr "не удалось увеличить файл \"%s\" до блока %u" + +#: storage/smgr/md.c:500 storage/smgr/md.c:611 +#, c-format +msgid "could not extend file \"%s\": %m" +msgstr "не удалось увеличить файл \"%s\": %m" + +#: storage/smgr/md.c:506 +#, c-format +msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" +msgstr "не удалось увеличить файл \"%s\" (записано байт: %d из %d) в блоке %u" + +#: storage/smgr/md.c:589 +#, c-format +msgid "could not extend file \"%s\" with FileFallocate(): %m" +msgstr "не удалось увеличить файл \"%s\" посредством FileFallocate(): %m" + +#: storage/smgr/md.c:869 +#, c-format +msgid "could not read blocks %u..%u in file \"%s\": %m" +msgstr "не удалось прочитать блоки %u..%u в файле \"%s\": %m" + +#: storage/smgr/md.c:895 +#, c-format +msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" +msgstr "" +"не удалось прочитать блоки %u..%u в файле \"%s\" (прочитано байт: %zu из %zu)" + +#: storage/smgr/md.c:995 +#, c-format +msgid "could not write blocks %u..%u in file \"%s\": %m" +msgstr "не удалось записать блоки %u..%u в файл \"%s\": %m" + +#: storage/smgr/md.c:1165 +#, c-format +msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" +msgstr "" +"не удалось обрезать файл \"%s\" (требуемая длина в блоках: %u, но сейчас он " +"содержит %u)" + +#: storage/smgr/md.c:1220 +#, c-format +msgid "could not truncate file \"%s\" to %u blocks: %m" +msgstr "не удалось обрезать файл \"%s\" до нужного числа блоков (%u): %m" + +#: storage/smgr/md.c:1700 +#, c-format +msgid "" +"could not open file \"%s\" (target block %u): previous segment is only %u " +"blocks" +msgstr "" +"не удалось открыть файл file \"%s\" (целевой блок %u): недостаточно блоков в " +"предыдущем сегменте (всего %u)" + +#: storage/smgr/md.c:1714 +#, c-format +msgid "could not open file \"%s\" (target block %u): %m" +msgstr "не удалось открыть файл file \"%s\" (целевой блок %u): %m" + +#: tcop/backend_startup.c:85 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "не удалось загрузить конфигурацию SSL в дочерний процесс" + +#: tcop/backend_startup.c:208 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "принято подключение: узел=%s порт=%s" + +#: tcop/backend_startup.c:213 +#, c-format +msgid "connection received: host=%s" +msgstr "принято подключение: узел=%s" + +#: tcop/backend_startup.c:277 +#, c-format +msgid "the database system is starting up" +msgstr "система баз данных запускается" + +#: tcop/backend_startup.c:283 +#, c-format +msgid "the database system is not yet accepting connections" +msgstr "система БД ещё не принимает подключения" + +#: tcop/backend_startup.c:284 +#, c-format +msgid "Consistent recovery state has not been yet reached." +msgstr "Согласованное состояние восстановления ещё не достигнуто." + +#: tcop/backend_startup.c:288 +#, c-format +msgid "the database system is not accepting connections" +msgstr "система БД не принимает подключения" + +#: tcop/backend_startup.c:289 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "Режим горячего резерва отключён." + +#: tcop/backend_startup.c:294 +#, c-format +msgid "the database system is shutting down" +msgstr "система баз данных останавливается" + +#: tcop/backend_startup.c:299 +#, c-format +msgid "the database system is in recovery mode" +msgstr "система баз данных в режиме восстановления" + +#: tcop/backend_startup.c:414 #, c-format -msgid "process %d failed to acquire %s on %s after %ld.%03d ms" -msgstr "" -"процесс %d не смог получить в режиме %s блокировку \"%s\" за %ld.%03d мс" +msgid "" +"received direct SSL connection request without ALPN protocol negotiation " +"extension" +msgstr "получен запрос прямого SSL-соединения, но в нём нет расширения ALPN" -#: storage/page/bufpage.c:152 +#: tcop/backend_startup.c:420 #, c-format -msgid "page verification failed, calculated checksum %u but expected %u" -msgstr "" -"ошибка проверки страницы: получена контрольная сумма %u, а ожидалась - %u" +msgid "direct SSL connection accepted" +msgstr "запрос прямого SSL-соединения принят" -#: storage/page/bufpage.c:217 storage/page/bufpage.c:730 -#: storage/page/bufpage.c:1073 storage/page/bufpage.c:1208 -#: storage/page/bufpage.c:1314 storage/page/bufpage.c:1426 +#: tcop/backend_startup.c:430 #, c-format -msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" -msgstr "" -"испорченные указатели страницы: нижний = %u, верхний = %u, спецобласть = %u" +msgid "direct SSL connection rejected" +msgstr "запрос прямого SSL-соединения отвергнут" -#: storage/page/bufpage.c:759 +#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 #, c-format -msgid "corrupted line pointer: %u" -msgstr "испорченный линейный указатель: %u" +msgid "incomplete startup packet" +msgstr "неполный стартовый пакет" -#: storage/page/bufpage.c:789 storage/page/bufpage.c:1266 +#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 #, c-format -msgid "corrupted item lengths: total %u, available space %u" -msgstr "испорченный размер элемента (общий размер: %u, доступно: %u)" +msgid "invalid length of startup packet" +msgstr "неверная длина стартового пакета" -#: storage/page/bufpage.c:1092 storage/page/bufpage.c:1233 -#: storage/page/bufpage.c:1330 storage/page/bufpage.c:1442 +#: tcop/backend_startup.c:573 #, c-format -msgid "corrupted line pointer: offset = %u, size = %u" -msgstr "испорченный линейный указатель: смещение = %u, размер = %u" +msgid "SSLRequest accepted" +msgstr "SSLRequest принят" -#: storage/smgr/md.c:487 storage/smgr/md.c:549 +#: tcop/backend_startup.c:576 #, c-format -msgid "cannot extend file \"%s\" beyond %u blocks" -msgstr "не удалось увеличить файл \"%s\" до блока %u" +msgid "SSLRequest rejected" +msgstr "SSLRequest отвергнут" -#: storage/smgr/md.c:502 storage/smgr/md.c:613 +#: tcop/backend_startup.c:585 #, c-format -msgid "could not extend file \"%s\": %m" -msgstr "не удалось увеличить файл \"%s\": %m" +msgid "failed to send SSL negotiation response: %m" +msgstr "не удалось отправить ответ в процессе SSL-согласования: %m" -#: storage/smgr/md.c:508 +#: tcop/backend_startup.c:603 #, c-format -msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" -msgstr "не удалось увеличить файл \"%s\" (записано байт: %d из %d) в блоке %u" +msgid "received unencrypted data after SSL request" +msgstr "после запроса SSL получены незашифрованные данные" -#: storage/smgr/md.c:591 +#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 #, c-format -msgid "could not extend file \"%s\" with FileFallocate(): %m" -msgstr "не удалось увеличить файл \"%s\" посредством FileFallocate(): %m" +msgid "" +"This could be either a client-software bug or evidence of an attempted man-" +"in-the-middle attack." +msgstr "" +"Это может свидетельствовать об ошибке в клиентском ПО или о попытке атаки " +"MITM." -#: storage/smgr/md.c:782 +#: tcop/backend_startup.c:627 #, c-format -msgid "could not read block %u in file \"%s\": %m" -msgstr "не удалось прочитать блок %u в файле \"%s\": %m" +msgid "GSSENCRequest accepted" +msgstr "GSSENCRequest принят" -#: storage/smgr/md.c:798 +#: tcop/backend_startup.c:630 #, c-format -msgid "could not read block %u in file \"%s\": read only %d of %d bytes" -msgstr "не удалось прочитать блок %u в файле \"%s\" (прочитано байт: %d из %d)" +msgid "GSSENCRequest rejected" +msgstr "GSSENCRequest отвергнут" -#: storage/smgr/md.c:856 +#: tcop/backend_startup.c:639 #, c-format -msgid "could not write block %u in file \"%s\": %m" -msgstr "не удалось записать блок %u в файл \"%s\": %m" +msgid "failed to send GSSAPI negotiation response: %m" +msgstr "не удалось отправить ответ в процессе согласования GSSAPI: %m" -#: storage/smgr/md.c:861 +#: tcop/backend_startup.c:657 #, c-format -msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" -msgstr "не удалось записать блок %u в файл \"%s\" (записано байт: %d из %d)" +msgid "received unencrypted data after GSSAPI encryption request" +msgstr "после запроса шифрования GSSAPI получены незашифрованные данные" -#: storage/smgr/md.c:1012 +#: tcop/backend_startup.c:681 #, c-format -msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" +msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "" -"не удалось обрезать файл \"%s\" (требуемая длина в блоках: %u, но сейчас он " -"содержит %u)" +"неподдерживаемый протокол клиентского приложения %u.%u; сервер поддерживает " +"%u.0 - %u.%u" -#: storage/smgr/md.c:1067 +#: tcop/backend_startup.c:744 #, c-format -msgid "could not truncate file \"%s\" to %u blocks: %m" -msgstr "не удалось обрезать файл \"%s\" до нужного числа блоков (%u): %m" +msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." +msgstr "Допустимые значения: \"false\", 0, \"true\", 1, \"database\"." -#: storage/smgr/md.c:1494 +#: tcop/backend_startup.c:785 #, c-format -msgid "" -"could not open file \"%s\" (target block %u): previous segment is only %u " -"blocks" +msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" -"не удалось открыть файл file \"%s\" (целевой блок %u): недостаточно блоков в " -"предыдущем сегменте (всего %u)" +"неверная структура стартового пакета: последним байтом должен быть терминатор" -#: storage/smgr/md.c:1508 +#: tcop/backend_startup.c:802 #, c-format -msgid "could not open file \"%s\" (target block %u): %m" -msgstr "не удалось открыть файл file \"%s\" (целевой блок %u): %m" +msgid "no PostgreSQL user name specified in startup packet" +msgstr "в стартовом пакете не указано имя пользователя PostgreSQL" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2132 +#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "функция с OID %u не существует" @@ -24972,8 +26138,8 @@ msgstr "вызвать функцию \"%s\" через интерфейс fastp msgid "fastpath function call: \"%s\" (OID %u)" msgstr "вызов функции (через fastpath): \"%s\" (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 -#: tcop/postgres.c:2059 tcop/postgres.c:2309 +#: 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 мс" @@ -25008,44 +26174,44 @@ msgstr "неверный размер аргумента (%d) в сообщен msgid "incorrect binary data format in function argument %d" msgstr "неправильный формат двоичных данных в аргументе функции %d" -#: tcop/postgres.c:463 tcop/postgres.c:4882 +#: 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" # [SM]: TO REVIEW -#: tcop/postgres.c:1672 tcop/postgres.c:2629 +#: 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 "" "неверное число форматов параметров в сообщении Bind (%d, а параметров %d)" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1735 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -25054,120 +26220,120 @@ msgstr "" "в сообщении Bind передано неверное число параметров (%d, а подготовленный " "оператор \"%s\" требует %d)" -#: tcop/postgres.c:1937 +#: tcop/postgres.c:1949 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "неверный формат двоичных данных в параметре Bind %d" -#: tcop/postgres.c:2064 +#: tcop/postgres.c:2076 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "продолжительность: %s мс, сообщение Bind %s%s%s: %s" -#: tcop/postgres.c:2118 tcop/postgres.c:2712 +#: tcop/postgres.c:2131 tcop/postgres.c:2735 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не существует" -#: tcop/postgres.c:2189 +#: tcop/postgres.c:2213 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2191 tcop/postgres.c:2317 +#: tcop/postgres.c:2215 tcop/postgres.c:2341 msgid "execute fetch from" msgstr "выборка из" -#: tcop/postgres.c:2192 tcop/postgres.c:2318 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute" msgstr "выполнение" -#: tcop/postgres.c:2314 +#: tcop/postgres.c:2338 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "продолжительность: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2462 +#: tcop/postgres.c:2486 #, c-format msgid "prepare: %s" msgstr "подготовка: %s" -#: tcop/postgres.c:2487 +#: tcop/postgres.c:2511 #, c-format -msgid "parameters: %s" -msgstr "параметры: %s" +msgid "Parameters: %s" +msgstr "Параметры: %s" -#: tcop/postgres.c:2502 +#: tcop/postgres.c:2526 #, c-format -msgid "abort reason: recovery conflict" -msgstr "причина прерывания: конфликт при восстановлении" +msgid "Abort reason: recovery conflict" +msgstr "Причина прерывания: конфликт при восстановлении" -#: tcop/postgres.c:2518 +#: tcop/postgres.c:2542 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Пользователь удерживал фиксатор разделяемого буфера слишком долго." -#: tcop/postgres.c:2521 +#: tcop/postgres.c:2545 #, c-format msgid "User was holding a relation lock for too long." msgstr "Пользователь удерживал блокировку таблицы слишком долго." -#: tcop/postgres.c:2524 +#: tcop/postgres.c:2548 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" "Пользователь использовал табличное пространство, которое должно быть удалено." -#: tcop/postgres.c:2527 +#: tcop/postgres.c:2551 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "Запросу пользователя нужно было видеть версии строк, которые должны быть " "удалены." -#: tcop/postgres.c:2530 +#: tcop/postgres.c:2554 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "" "Пользователь использовал слот логической репликации, который должен быть " "аннулирован." -#: tcop/postgres.c:2536 +#: tcop/postgres.c:2560 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Пользователь был подключён к базе данных, которая должна быть удалена." -#: tcop/postgres.c:2575 +#: tcop/postgres.c:2599 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "портал \"%s\", параметр $%d = %s" -#: tcop/postgres.c:2578 +#: tcop/postgres.c:2602 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "портал \"%s\", параметр $%d" -#: tcop/postgres.c:2584 +#: tcop/postgres.c:2608 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "неименованный портал, параметр $%d = %s" -#: tcop/postgres.c:2587 +#: tcop/postgres.c:2611 #, c-format msgid "unnamed portal parameter $%d" msgstr "неименованный портал, параметр $%d" -#: tcop/postgres.c:2932 +#: tcop/postgres.c:2955 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "закрытие подключения из-за неожиданного сигнала SIGQUIT" -#: tcop/postgres.c:2938 +#: tcop/postgres.c:2961 #, c-format msgid "terminating connection because of crash of another server process" msgstr "закрытие подключения из-за краха другого серверного процесса" -#: tcop/postgres.c:2939 +#: tcop/postgres.c:2962 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -25178,7 +26344,7 @@ msgstr "" "транзакцию и завершиться, так как другой серверный процесс завершился " "аварийно и, возможно, разрушил разделяемую память." -#: tcop/postgres.c:2943 tcop/postgres.c:3310 +#: 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 " @@ -25187,18 +26353,18 @@ msgstr "" "Вы сможете переподключиться к базе данных и повторить вашу команду сию " "минуту." -#: tcop/postgres.c:2950 +#: tcop/postgres.c:2973 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "" "закрытие подключения вследствие получения команды для немедленного отключения" -#: tcop/postgres.c:3036 +#: tcop/postgres.c:3051 #, c-format msgid "floating-point exception" msgstr "исключение в операции с плавающей точкой" -#: tcop/postgres.c:3037 +#: tcop/postgres.c:3052 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -25208,72 +26374,77 @@ msgstr "" "оказался вне допустимых рамок или произошла ошибка вычисления, например, " "деление на ноль." -#: tcop/postgres.c:3214 +#: tcop/postgres.c:3217 +#, c-format +msgid "terminating connection due to conflict with recovery" +msgstr "закрытие подключения из-за конфликта с процессом восстановления" + +#: tcop/postgres.c:3289 #, c-format msgid "canceling authentication due to timeout" msgstr "отмена проверки подлинности из-за тайм-аута" -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3293 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "прекращение процесса автоочистки по команде администратора" -#: tcop/postgres.c:3222 +#: tcop/postgres.c:3297 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "завершение обработчика логической репликации по команде администратора" -#: tcop/postgres.c:3239 tcop/postgres.c:3249 tcop/postgres.c:3308 -#, c-format -msgid "terminating connection due to conflict with recovery" -msgstr "закрытие подключения из-за конфликта с процессом восстановления" - -#: tcop/postgres.c:3260 +#: tcop/postgres.c:3317 #, c-format msgid "terminating connection due to administrator command" msgstr "закрытие подключения по команде администратора" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3348 #, c-format msgid "connection to client lost" msgstr "подключение к клиенту потеряно" -#: tcop/postgres.c:3361 +#: tcop/postgres.c:3400 #, c-format msgid "canceling statement due to lock timeout" msgstr "выполнение оператора отменено из-за тайм-аута блокировки" -#: tcop/postgres.c:3368 +#: tcop/postgres.c:3407 #, c-format msgid "canceling statement due to statement timeout" msgstr "выполнение оператора отменено из-за тайм-аута" -#: tcop/postgres.c:3375 +#: tcop/postgres.c:3414 #, c-format msgid "canceling autovacuum task" msgstr "отмена задачи автоочистки" -#: tcop/postgres.c:3398 +#: tcop/postgres.c:3427 #, c-format msgid "canceling statement due to user request" msgstr "выполнение оператора отменено по запросу пользователя" -#: tcop/postgres.c:3412 +#: tcop/postgres.c:3448 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "закрытие подключения из-за тайм-аута простоя в транзакции" -#: tcop/postgres.c:3423 +#: tcop/postgres.c:3461 +#, c-format +msgid "terminating connection due to transaction timeout" +msgstr "закрытие подключения из-за тайм-аута транзакции" + +#: tcop/postgres.c:3474 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "закрытие подключения из-за тайм-аута простоя сеанса" -#: tcop/postgres.c:3514 +#: tcop/postgres.c:3564 #, c-format msgid "stack depth limit exceeded" msgstr "превышен предел глубины стека" -#: tcop/postgres.c:3515 +#: tcop/postgres.c:3565 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -25283,12 +26454,12 @@ msgstr "" "КБ), предварительно убедившись, что ОС предоставляет достаточный размер " "стека." -#: tcop/postgres.c:3562 +#: tcop/postgres.c:3612 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значение \"max_stack_depth\" не должно превышать %ld КБ." -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3614 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " @@ -25297,20 +26468,20 @@ msgstr "" "Увеличьте предел глубины стека в системе с помощью команды \"ulimit -s\" или " "эквивалента в вашей ОС." -#: tcop/postgres.c:3587 +#: tcop/postgres.c:3637 #, c-format -msgid "client_connection_check_interval must be set to 0 on this platform." +msgid "\"client_connection_check_interval\" must be set to 0 on this platform." msgstr "" -"Значение client_connection_check_interval должно равняться 0 на этой " +"Значение \"client_connection_check_interval\" должно равняться 0 на этой " "платформе." -#: tcop/postgres.c:3608 +#: tcop/postgres.c:3658 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "" "Этот параметр нельзя включить, когда \"log_statement_stats\" равен true." -#: tcop/postgres.c:3623 +#: tcop/postgres.c:3673 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -25320,49 +26491,49 @@ msgstr "" "\"log_parser_stats\", \"log_planner_stats\" или \"log_executor_stats\" равны " "true." -#: tcop/postgres.c:3971 +#: tcop/postgres.c:4098 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неверный аргумент командной строки для серверного процесса: %s" -#: tcop/postgres.c:3972 tcop/postgres.c:3978 +#: tcop/postgres.c:4099 tcop/postgres.c:4105 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: tcop/postgres.c:3976 +#: tcop/postgres.c:4103 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неверный аргумент командной строки: %s" -#: tcop/postgres.c:4029 +#: tcop/postgres.c:4156 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: не указаны ни база данных, ни пользователь" -#: tcop/postgres.c:4779 +#: tcop/postgres.c:4909 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неверный подтип сообщения CLOSE: %d" -#: tcop/postgres.c:4816 +#: tcop/postgres.c:4946 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неверный подтип сообщения DESCRIBE: %d" -#: tcop/postgres.c:4903 +#: tcop/postgres.c:5033 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "" "вызовы функций через fastpath не поддерживаются для реплицирующих соединений" -#: tcop/postgres.c:4907 +#: tcop/postgres.c:5037 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" "протокол расширенных запросов не поддерживается для реплицирующих соединений" -#: tcop/postgres.c:5087 +#: tcop/postgres.c:5217 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s " @@ -25378,53 +26549,53 @@ msgstr "" "число форматов результатов в сообщении Bind (%d) не равно числу столбцов в " "запросе (%d)" -#: 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 "Добавьте в его объявление SCROLL, чтобы он мог перемещаться назад." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:417 +#: tcop/utility.c:410 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "в транзакции в режиме \"только чтение\" нельзя выполнить %s" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:435 +#: tcop/utility.c:428 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "выполнить %s во время параллельных операций нельзя" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:454 +#: tcop/utility.c:447 #, c-format msgid "cannot execute %s during recovery" msgstr "выполнить %s во время восстановления нельзя" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:472 +#: tcop/utility.c:465 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "в рамках операции с ограничениями по безопасности нельзя выполнить %s" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:828 +#: tcop/utility.c:821 #, c-format msgid "cannot execute %s within a background process" msgstr "выполнять %s в фоновом процессе нельзя" #. translator: %s is name of a SQL command, eg CHECKPOINT -#: tcop/utility.c:954 +#: tcop/utility.c:947 #, c-format msgid "permission denied to execute %s command" msgstr "нет прав для выполнения команды %s" -#: tcop/utility.c:956 +#: tcop/utility.c:949 #, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." msgstr "Выполнять эту команду могут только роли с правами роли \"%s\"." @@ -25579,13 +26750,13 @@ msgstr "неверный флаг аффиксов \"%s\" со значение msgid "could not open dictionary file \"%s\": %m" msgstr "не удалось открыть файл словаря \"%s\": %m" -#: tsearch/spell.c:749 utils/adt/regexp.c:224 jsonpath_gram.y:559 +#: tsearch/spell.c:749 utils/adt/regexp.c:223 jsonpath_gram.y:629 #, c-format msgid "invalid regular expression: %s" msgstr "неверное регулярное выражение: %s" #: tsearch/spell.c:963 tsearch/spell.c:980 tsearch/spell.c:997 -#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18123 gram.y:18140 +#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18735 gram.y:18752 #, c-format msgid "syntax error" msgstr "ошибка синтаксиса" @@ -25625,17 +26796,17 @@ msgstr "количество псевдонимов превышает зада msgid "affix file contains both old-style and new-style commands" msgstr "файл аффиксов содержит команды и в старом, и в новом стиле" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:278 utils/adt/tsvector_op.c:1128 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "строка слишком длинна для tsvector (%d Б, при максимуме %d)" -#: tsearch/ts_locale.c:238 +#: tsearch/ts_locale.c:236 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "строка %d файла конфигурации \"%s\": \"%s\"" -#: tsearch/ts_locale.c:317 +#: tsearch/ts_locale.c:315 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "преобразовать wchar_t в кодировку сервера не удалось: %m" @@ -25662,37 +26833,32 @@ msgstr "неверное имя файла конфигурации тексто msgid "could not open stop-word file \"%s\": %m" msgstr "не удалось открыть файл стоп-слов \"%s\": %m" -#: tsearch/wparser.c:308 tsearch/wparser.c:396 tsearch/wparser.c:473 +#: tsearch/wparser.c:306 tsearch/wparser.c:394 tsearch/wparser.c:471 #, c-format msgid "text search parser does not support headline creation" msgstr "анализатор текстового поиска не поддерживает создание выдержек" -#: tsearch/wparser_def.c:2663 +#: tsearch/wparser_def.c:2664 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "нераспознанный параметр функции выдержки: \"%s\"" -#: tsearch/wparser_def.c:2673 +#: 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:2677 +#: 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:2681 +#: tsearch/wparser_def.c:2682 tsearch/wparser_def.c:2686 #, c-format -msgid "ShortWord should be >= 0" -msgstr "Значение ShortWord должно быть >= 0" +msgid "%s must be >= 0" +msgstr "%s должно быть >= 0" -#: tsearch/wparser_def.c:2685 -#, c-format -msgid "MaxFragments should be >= 0" -msgstr "Значение MaxFragments должно быть >= 0" - -#: utils/activity/pgstat.c:438 +#: utils/activity/pgstat.c:435 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "ошибка удаления постоянного файла статистики \"%s\": %m" @@ -25707,28 +26873,28 @@ msgstr "неверный вид статистики: \"%s\"" msgid "could not open temporary statistics file \"%s\": %m" msgstr "не удалось открыть временный файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1447 +#: utils/activity/pgstat.c:1455 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "не удалось записать во временный файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1456 +#: utils/activity/pgstat.c:1464 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "не удалось закрыть временный файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1464 +#: 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:1513 +#: utils/activity/pgstat.c:1521 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "не удалось открыть файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1675 +#: utils/activity/pgstat.c:1683 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "файл статистики \"%s\" испорчен" @@ -25738,115 +26904,125 @@ msgstr "файл статистики \"%s\" испорчен" msgid "function call to dropped function" msgstr "вызвана функция, которая была удалена" -#: utils/activity/pgstat_xact.c:363 +#: utils/activity/pgstat_xact.c:362 #, c-format msgid "resetting existing statistics for kind %s, db=%u, oid=%u" msgstr "сбрасывается существующая статистика вида %s, db=%u, oid=%u" -#: utils/adt/acl.c:177 utils/adt/name.c:93 +#: 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 custom wait events" +msgstr "слишком много пользовательских событий ожидания" + +#: utils/adt/acl.c:183 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "слишком длинный идентификатор" -#: utils/adt/acl.c:178 utils/adt/name.c:94 +#: utils/adt/acl.c:184 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Идентификатор должен быть короче %d байт." -#: utils/adt/acl.c:266 +#: utils/adt/acl.c:272 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "нераспознанное ключевое слово: \"%s\"" -#: utils/adt/acl.c:267 +#: utils/adt/acl.c:273 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Ключевым словом ACL должно быть \"group\" или \"user\"." -#: utils/adt/acl.c:275 +#: utils/adt/acl.c:281 #, c-format msgid "missing name" msgstr "отсутствует имя" -#: utils/adt/acl.c:276 +#: utils/adt/acl.c:282 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "За ключевыми словами \"group\" или \"user\" должно следовать имя." -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:288 #, c-format msgid "missing \"=\" sign" msgstr "отсутствует знак \"=\"" -#: utils/adt/acl.c:341 +#: utils/adt/acl.c:350 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "неверный символ режима: должен быть один из \"%s\"" -#: utils/adt/acl.c:371 +#: utils/adt/acl.c:380 #, c-format msgid "a name must follow the \"/\" sign" msgstr "за знаком \"/\" должно следовать имя" -#: utils/adt/acl.c:383 +#: utils/adt/acl.c:392 #, c-format msgid "defaulting grantor to user ID %u" msgstr "назначившим права считается пользователь с ID %u" -#: utils/adt/acl.c:569 +#: utils/adt/acl.c:578 #, c-format msgid "ACL array contains wrong data type" msgstr "Массив ACL содержит неверный тип данных" -#: utils/adt/acl.c:573 +#: utils/adt/acl.c:582 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "Массивы ACL должны быть одномерными" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:586 #, c-format msgid "ACL arrays must not contain null values" msgstr "Массивы ACL не должны содержать значения null" -#: utils/adt/acl.c:606 +#: utils/adt/acl.c:615 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "лишний мусор в конце спецификации ACL" -#: utils/adt/acl.c:1248 +#: utils/adt/acl.c:1263 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "привилегию назначения прав нельзя вернуть тому, кто назначил её вам" -#: utils/adt/acl.c:1564 +#: utils/adt/acl.c:1579 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert больше не поддерживается" -#: utils/adt/acl.c:1574 +#: utils/adt/acl.c:1589 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove больше не поддерживается" -#: utils/adt/acl.c:1693 +#: utils/adt/acl.c:1709 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "нераспознанный тип прав: \"%s\"" -#: utils/adt/acl.c:3476 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:5023 +#: utils/adt/acl.c:5196 #, c-format 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:878 utils/adt/json.c:694 utils/adt/json.c:831 -#: utils/adt/json.c:869 utils/adt/jsonb.c:1139 utils/adt/jsonb.c:1211 -#: utils/adt/jsonb.c:1629 utils/adt/jsonb.c:1817 utils/adt/jsonb.c:1827 +#: utils/adt/array_userfuncs.c:866 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 "не удалось определить тип входных данных" @@ -25857,17 +27033,17 @@ msgid "input data type is not an array" msgstr "тип входных данных не является массивом" #: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 -#: utils/adt/float.c:1228 utils/adt/float.c:1302 utils/adt/float.c:4117 -#: utils/adt/float.c:4155 utils/adt/int.c:778 utils/adt/int.c:800 +#: 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:1272 utils/adt/numeric.c:1901 utils/adt/numeric.c:4388 -#: utils/adt/rangetypes.c:1481 utils/adt/rangetypes.c:1494 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1132 -#: utils/adt/varlena.c:3134 +#: 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 "целое вне диапазона" @@ -25907,188 +27083,199 @@ msgstr "Массивы с разными размерностями элемен msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Массивы с разными размерностями несовместимы для соединения." -#: utils/adt/array_userfuncs.c:987 utils/adt/array_userfuncs.c:995 -#: utils/adt/arrayfuncs.c:5639 utils/adt/arrayfuncs.c:5645 +#: 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 "аккумулировать массивы различной размерности нельзя" -#: utils/adt/array_userfuncs.c:1286 utils/adt/array_userfuncs.c:1440 +#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "поиск элементов в многомерных массивах не поддерживается" -#: utils/adt/array_userfuncs.c:1315 +#: utils/adt/array_userfuncs.c:1301 #, c-format msgid "initial position must not be null" msgstr "начальная позиция не может быть NULL" -#: utils/adt/array_userfuncs.c:1688 +#: utils/adt/array_userfuncs.c:1674 #, c-format msgid "sample size must be between 0 and %d" msgstr "размер выборки должен задаваться числом от 0 до %d" -#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:288 -#: utils/adt/arrayfuncs.c:299 utils/adt/arrayfuncs.c:321 -#: utils/adt/arrayfuncs.c:338 utils/adt/arrayfuncs.c:352 -#: utils/adt/arrayfuncs.c:360 utils/adt/arrayfuncs.c:367 -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:522 -#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:548 -#: utils/adt/arrayfuncs.c:569 utils/adt/arrayfuncs.c:599 -#: utils/adt/arrayfuncs.c:606 utils/adt/arrayfuncs.c:614 -#: utils/adt/arrayfuncs.c:648 utils/adt/arrayfuncs.c:671 -#: utils/adt/arrayfuncs.c:691 utils/adt/arrayfuncs.c:808 -#: utils/adt/arrayfuncs.c:817 utils/adt/arrayfuncs.c:847 -#: utils/adt/arrayfuncs.c:862 utils/adt/arrayfuncs.c:915 +#: utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:273 +#: utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:307 +#: utils/adt/arrayfuncs.c:440 utils/adt/arrayfuncs.c:454 +#: utils/adt/arrayfuncs.c:466 utils/adt/arrayfuncs.c:636 +#: utils/adt/arrayfuncs.c:668 utils/adt/arrayfuncs.c:703 +#: utils/adt/arrayfuncs.c:718 utils/adt/arrayfuncs.c:777 +#: utils/adt/arrayfuncs.c:782 utils/adt/arrayfuncs.c:870 +#: utils/adt/arrayfuncs.c:897 utils/adt/arrayfuncs.c:904 +#: utils/adt/arrayfuncs.c:941 #, c-format msgid "malformed array literal: \"%s\"" msgstr "ошибочный литерал массива: \"%s\"" -#: utils/adt/arrayfuncs.c:275 -#, c-format -msgid "\"[\" must introduce explicitly-specified array dimensions." -msgstr "За \"[\" должны следовать явно задаваемые размерности массива." - -#: utils/adt/arrayfuncs.c:289 +#: utils/adt/arrayfuncs.c:265 #, c-format -msgid "Missing array dimension value." -msgstr "Отсутствует значение размерности массива." +msgid "Array value must start with \"{\" or dimension information." +msgstr "Значение массива должно начинаться с \"{\" или указания размерности." -#: utils/adt/arrayfuncs.c:300 utils/adt/arrayfuncs.c:339 +#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:467 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "После размерностей массива отсутствует \"%s\"." -#: utils/adt/arrayfuncs.c:309 utils/adt/arrayfuncs.c:2969 -#: utils/adt/arrayfuncs.c:3014 utils/adt/arrayfuncs.c:3029 +#: utils/adt/arrayfuncs.c:285 #, c-format -msgid "upper bound cannot be less than lower bound" -msgstr "верхняя граница не может быть меньше нижней" +msgid "Array contents must start with \"{\"." +msgstr "Содержимое массива должно начинаться с \"{\"." -#: utils/adt/arrayfuncs.c:322 +#: utils/adt/arrayfuncs.c:308 utils/adt/multirangetypes.c:292 #, c-format -msgid "Array value must start with \"{\" or dimension information." -msgstr "Значение массива должно начинаться с \"{\" или указания размерности." +msgid "Junk after closing right brace." +msgstr "Мусор после закрывающей фигурной скобки." -#: utils/adt/arrayfuncs.c:353 +#: utils/adt/arrayfuncs.c:431 utils/adt/arrayfuncs.c:643 #, c-format -msgid "Array contents must start with \"{\"." -msgstr "Содержимое массива должно начинаться с \"{\"." +msgid "number of array dimensions exceeds the maximum allowed (%d)" +msgstr "число размерностей массива превышает предел (%d)" -#: utils/adt/arrayfuncs.c:361 utils/adt/arrayfuncs.c:368 +#: utils/adt/arrayfuncs.c:441 #, c-format -msgid "Specified array dimensions do not match array contents." -msgstr "Указанные размерности массива не соответствуют его содержимому." +msgid "\"[\" must introduce explicitly-specified array dimensions." +msgstr "За \"[\" должны следовать явно задаваемые размерности массива." -#: utils/adt/arrayfuncs.c:508 utils/adt/arrayfuncs.c:534 -#: utils/adt/multirangetypes.c:166 utils/adt/rangetypes.c:2405 -#: utils/adt/rangetypes.c:2413 utils/adt/rowtypes.c:219 -#: utils/adt/rowtypes.c:230 +#: utils/adt/arrayfuncs.c:455 #, c-format -msgid "Unexpected end of input." -msgstr "Неожиданный конец ввода." +msgid "Missing array dimension value." +msgstr "Отсутствует значение размерности массива." + +#: 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 "верхняя граница не может быть меньше нижней" + +#: utils/adt/arrayfuncs.c:487 +#, c-format +msgid "array upper bound is too large: %d" +msgstr "верхняя граница массива слишком велика: %d" + +#: utils/adt/arrayfuncs.c:538 +#, c-format +msgid "array bound is out of integer range" +msgstr "граница массива вне целочисленного диапазона" -#: utils/adt/arrayfuncs.c:523 utils/adt/arrayfuncs.c:570 -#: utils/adt/arrayfuncs.c:600 utils/adt/arrayfuncs.c:649 +#: utils/adt/arrayfuncs.c:637 utils/adt/arrayfuncs.c:669 +#: utils/adt/arrayfuncs.c:704 utils/adt/arrayfuncs.c:898 #, c-format msgid "Unexpected \"%c\" character." msgstr "Неожиданный знак \"%c\"." -#: utils/adt/arrayfuncs.c:549 utils/adt/arrayfuncs.c:672 +#: utils/adt/arrayfuncs.c:719 #, c-format msgid "Unexpected array element." msgstr "Неожиданный элемент массива." -#: utils/adt/arrayfuncs.c:607 +#: utils/adt/arrayfuncs.c:778 #, c-format -msgid "Unmatched \"%c\" character." -msgstr "Непарный знак \"%c\"." +msgid "Specified array dimensions do not match array contents." +msgstr "Указанные размерности массива не соответствуют его содержимому." -#: utils/adt/arrayfuncs.c:615 utils/adt/jsonfuncs.c:2553 +#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2598 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "" "Для многомерных массивов должны задаваться вложенные массивы с " "соответствующими размерностями." -#: utils/adt/arrayfuncs.c:692 utils/adt/multirangetypes.c:293 +#: utils/adt/arrayfuncs.c:871 utils/adt/arrayfuncs.c:905 #, c-format -msgid "Junk after closing right brace." -msgstr "Мусор после закрывающей фигурной скобки." +msgid "Incorrectly quoted array element." +msgstr "Элемент массива заключён в кавычки некорректно." + +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 +#: utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 +#: utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#, c-format +msgid "Unexpected end of input." +msgstr "Неожиданный конец ввода." -#: utils/adt/arrayfuncs.c:1326 utils/adt/arrayfuncs.c:3528 -#: utils/adt/arrayfuncs.c:6129 +#: 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" -#: utils/adt/arrayfuncs.c:1337 +#: utils/adt/arrayfuncs.c:1312 #, c-format msgid "invalid array flags" msgstr "неверные флаги массива" -#: utils/adt/arrayfuncs.c:1359 +#: utils/adt/arrayfuncs.c:1334 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "" "с бинарными данными связан тип элемента массива %u (%s) вместо ожидаемого %u " "(%s)" -#: utils/adt/arrayfuncs.c:1403 utils/adt/multirangetypes.c:451 -#: utils/adt/rangetypes.c:344 utils/cache/lsyscache.c:2916 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 #, c-format msgid "no binary input function available for type %s" msgstr "для типа %s нет функции ввода двоичных данных" -#: utils/adt/arrayfuncs.c:1543 +#: utils/adt/arrayfuncs.c:1509 #, c-format msgid "improper binary format in array element %d" msgstr "неподходящий двоичный формат в элементе массива %d" -#: utils/adt/arrayfuncs.c:1624 utils/adt/multirangetypes.c:456 -#: utils/adt/rangetypes.c:349 utils/cache/lsyscache.c:2949 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 #, c-format msgid "no binary output function available for type %s" msgstr "для типа %s нет функции вывода двоичных данных" -#: utils/adt/arrayfuncs.c:2103 +#: utils/adt/arrayfuncs.c:2067 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "разрезание массивов постоянной длины не поддерживается" -#: utils/adt/arrayfuncs.c:2281 utils/adt/arrayfuncs.c:2303 -#: utils/adt/arrayfuncs.c:2352 utils/adt/arrayfuncs.c:2606 -#: utils/adt/arrayfuncs.c:2944 utils/adt/arrayfuncs.c:6115 -#: utils/adt/arrayfuncs.c:6141 utils/adt/arrayfuncs.c:6152 -#: utils/adt/json.c:1497 utils/adt/json.c:1569 utils/adt/jsonb.c:1416 -#: utils/adt/jsonb.c:1500 utils/adt/jsonfuncs.c:4434 utils/adt/jsonfuncs.c:4587 -#: utils/adt/jsonfuncs.c:4698 utils/adt/jsonfuncs.c:4746 +#: 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:2286 utils/adt/arrayfuncs.c:2410 -#: utils/adt/arrayfuncs.c:2689 utils/adt/arrayfuncs.c:3019 +#: 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 "индекс массива вне диапазона" -#: utils/adt/arrayfuncs.c:2291 +#: utils/adt/arrayfuncs.c:2255 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "нельзя присвоить значение null элементу массива фиксированной длины" -#: utils/adt/arrayfuncs.c:2891 +#: utils/adt/arrayfuncs.c:2855 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "изменения в срезах массивов фиксированной длины не поддерживаются" -#: utils/adt/arrayfuncs.c:2922 +#: utils/adt/arrayfuncs.c:2886 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "в указании среза массива должны быть заданы обе границы" -#: utils/adt/arrayfuncs.c:2923 +#: utils/adt/arrayfuncs.c:2887 #, c-format msgid "" "When assigning to a slice of an empty array value, slice boundaries must be " @@ -26097,85 +27284,85 @@ msgstr "" "При присвоении значений срезу в пустом массиве, должны полностью задаваться " "обе границы." -#: utils/adt/arrayfuncs.c:2934 utils/adt/arrayfuncs.c:3046 +#: utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:3017 #, c-format msgid "source array too small" msgstr "исходный массив слишком мал" -#: utils/adt/arrayfuncs.c:3686 +#: utils/adt/arrayfuncs.c:3657 #, c-format msgid "null array element not allowed in this context" msgstr "элемент массива null недопустим в данном контексте" -#: utils/adt/arrayfuncs.c:3857 utils/adt/arrayfuncs.c:4028 -#: utils/adt/arrayfuncs.c:4419 +#: 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:4206 utils/adt/multirangetypes.c:2806 -#: utils/adt/multirangetypes.c:2878 utils/adt/rangetypes.c:1354 -#: utils/adt/rangetypes.c:1418 utils/adt/rowtypes.c:1885 +#: 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:4334 utils/adt/rowtypes.c:2006 +#: 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:5529 +#: utils/adt/arrayfuncs.c:5506 #, c-format msgid "data type %s is not an array type" msgstr "тип данных %s не является типом массива" -#: utils/adt/arrayfuncs.c:5584 +#: utils/adt/arrayfuncs.c:5561 #, c-format msgid "cannot accumulate null arrays" msgstr "аккумулировать NULL-массивы нельзя" -#: utils/adt/arrayfuncs.c:5612 +#: utils/adt/arrayfuncs.c:5589 #, c-format msgid "cannot accumulate empty arrays" msgstr "аккумулировать пустые массивы нельзя" -#: utils/adt/arrayfuncs.c:6013 utils/adt/arrayfuncs.c:6053 +#: utils/adt/arrayfuncs.c:5990 utils/adt/arrayfuncs.c:6030 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "массив размерностей или массив нижних границ не может быть null" -#: utils/adt/arrayfuncs.c:6116 utils/adt/arrayfuncs.c:6142 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "Dimension array must be one dimensional." msgstr "Массив размерностей должен быть одномерным." -#: utils/adt/arrayfuncs.c:6121 utils/adt/arrayfuncs.c:6147 +#: utils/adt/arrayfuncs.c:6098 utils/adt/arrayfuncs.c:6124 #, c-format msgid "dimension values cannot be null" msgstr "значения размерностей не могут быть null" -#: utils/adt/arrayfuncs.c:6153 +#: utils/adt/arrayfuncs.c:6130 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Массив нижних границ и массив размерностей имеют разные размеры." -#: utils/adt/arrayfuncs.c:6431 +#: utils/adt/arrayfuncs.c:6411 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "удаление элементов из многомерных массивов не поддерживается" -#: utils/adt/arrayfuncs.c:6708 +#: utils/adt/arrayfuncs.c:6688 #, c-format msgid "thresholds must be one-dimensional array" msgstr "границы должны задаваться одномерным массивом" -#: utils/adt/arrayfuncs.c:6713 +#: utils/adt/arrayfuncs.c:6693 #, c-format msgid "thresholds array must not contain NULLs" msgstr "массив границ не должен содержать NULL" -#: utils/adt/arrayfuncs.c:6946 +#: utils/adt/arrayfuncs.c:6926 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "число удаляемых элементов должно быть от 0 до %d" @@ -26190,22 +27377,22 @@ msgstr "индекс элемента массива должен быть це msgid "array subscript in assignment must not be null" msgstr "индекс элемента массива в присваивании не может быть NULL" -#: utils/adt/arrayutils.c:155 +#: utils/adt/arrayutils.c:140 #, c-format msgid "array lower bound is too large: %d" msgstr "нижняя граница массива слишком велика: %d" -#: utils/adt/arrayutils.c:257 +#: utils/adt/arrayutils.c:242 #, c-format msgid "typmod array must be type cstring[]" msgstr "массив typmod должен иметь тип cstring[]" -#: utils/adt/arrayutils.c:262 +#: utils/adt/arrayutils.c:247 #, c-format msgid "typmod array must be one-dimensional" msgstr "массив typmod должен быть одномерным" -#: utils/adt/arrayutils.c:267 +#: utils/adt/arrayutils.c:252 #, c-format msgid "typmod array must not contain nulls" msgstr "массив typmod не должен содержать элементы null" @@ -26216,48 +27403,52 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "преобразование кодировки из %s в ASCII не поддерживается" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:4017 -#: utils/adt/float.c:206 utils/adt/float.c:293 utils/adt/float.c:307 -#: utils/adt/float.c:412 utils/adt/float.c:495 utils/adt/float.c:509 +#: 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:183 utils/adt/mac.c:94 utils/adt/mac8.c:225 -#: utils/adt/network.c:99 utils/adt/numeric.c:795 utils/adt/numeric.c:7136 -#: utils/adt/numeric.c:7339 utils/adt/numeric.c:8286 utils/adt/numutils.c:357 -#: utils/adt/numutils.c:619 utils/adt/numutils.c:881 utils/adt/numutils.c:920 -#: utils/adt/numutils.c:942 utils/adt/numutils.c:1006 utils/adt/numutils.c:1028 -#: utils/adt/pg_lsn.c:74 utils/adt/tid.c:72 utils/adt/tid.c:80 -#: utils/adt/tid.c:94 utils/adt/tid.c:103 utils/adt/timestamp.c:494 -#: utils/adt/uuid.c:135 utils/adt/xid8funcs.c:362 +#: 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:351 -#: utils/adt/numutils.c:613 utils/adt/numutils.c:875 utils/adt/numutils.c:926 -#: utils/adt/numutils.c:965 utils/adt/numutils.c:1012 +#: 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 "значение \"%s\" вне диапазона для типа %s" +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:105 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:515 utils/adt/int8.c:573 -#: utils/adt/int8.c:958 utils/adt/int8.c:1038 utils/adt/int8.c:1100 -#: utils/adt/int8.c:1180 utils/adt/numeric.c:3175 utils/adt/numeric.c:3198 -#: utils/adt/numeric.c:3283 utils/adt/numeric.c:3301 utils/adt/numeric.c:3397 -#: utils/adt/numeric.c:8835 utils/adt/numeric.c:9148 utils/adt/numeric.c:9496 -#: utils/adt/numeric.c:9612 utils/adt/numeric.c:11122 -#: utils/adt/timestamp.c:3442 +#: 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 "значение \"%s\" вне диапазона для типа %s" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" @@ -26268,164 +27459,187 @@ msgstr "значение \"char\" вне диапазона" msgid "could not compute %s hash: %s" msgstr "не удалось вычислить хеш %s: %s" -#: utils/adt/date.c:63 utils/adt/timestamp.c:100 utils/adt/varbit.c:105 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "неверный модификатор типа" -#: utils/adt/date.c:75 +#: utils/adt/date.c:76 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s: точность должна быть неотрицательной" -#: utils/adt/date.c:81 +#: utils/adt/date.c:82 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/date.c:166 utils/adt/date.c:174 utils/adt/formatting.c:4241 -#: utils/adt/formatting.c:4250 utils/adt/formatting.c:4363 -#: utils/adt/formatting.c:4373 +#: 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 #, c-format msgid "date out of range: \"%s\"" msgstr "дата вне диапазона: \"%s\"" -#: utils/adt/date.c:221 utils/adt/date.c:519 utils/adt/date.c:543 -#: utils/adt/rangetypes.c:1577 utils/adt/rangetypes.c:1592 utils/adt/xml.c:2470 +#: 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 "дата вне диапазона" -#: utils/adt/date.c:267 utils/adt/timestamp.c:582 +#: utils/adt/date.c:268 utils/adt/timestamp.c:598 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "значение поля типа date вне диапазона: %d-%02d-%02d" -#: utils/adt/date.c:274 utils/adt/date.c:283 utils/adt/timestamp.c:588 +#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "дата вне диапазона: %d-%02d-%02d" -#: utils/adt/date.c:494 +#: utils/adt/date.c:495 #, c-format msgid "cannot subtract infinite dates" msgstr "вычитать бесконечные даты нельзя" -#: utils/adt/date.c:592 utils/adt/date.c:655 utils/adt/date.c:691 -#: utils/adt/date.c:2885 utils/adt/date.c:2895 +#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 +#: utils/adt/date.c:2906 utils/adt/date.c:2916 #, c-format msgid "date out of range for timestamp" msgstr "дата вне диапазона для типа timestamp" -#: utils/adt/date.c:1121 utils/adt/date.c:1204 utils/adt/date.c:1220 -#: utils/adt/date.c:2206 utils/adt/date.c:2990 utils/adt/timestamp.c:4172 -#: utils/adt/timestamp.c:4382 utils/adt/timestamp.c:4524 -#: utils/adt/timestamp.c:4777 utils/adt/timestamp.c:4978 -#: utils/adt/timestamp.c:5025 utils/adt/timestamp.c:5249 -#: utils/adt/timestamp.c:5296 utils/adt/timestamp.c:5426 +#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 +#: utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 +#: utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 +#: utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 +#: utils/adt/timestamp.c:6070 #, c-format msgid "unit \"%s\" not supported for type %s" msgstr "единица \"%s\" для типа %s не поддерживается" -#: utils/adt/date.c:1229 utils/adt/date.c:2222 utils/adt/date.c:3010 -#: utils/adt/timestamp.c:4186 utils/adt/timestamp.c:4399 -#: utils/adt/timestamp.c:4538 utils/adt/timestamp.c:4737 -#: utils/adt/timestamp.c:5034 utils/adt/timestamp.c:5305 -#: utils/adt/timestamp.c:5487 +#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 +#: utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 +#: utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 +#: utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 +#: utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 #, c-format msgid "unit \"%s\" not recognized for type %s" msgstr "единица \"%s\" для типа %s не распознана" -#: utils/adt/date.c:1313 utils/adt/date.c:1359 utils/adt/date.c:1918 -#: utils/adt/date.c:1949 utils/adt/date.c:1978 utils/adt/date.c:2848 -#: utils/adt/date.c:3080 utils/adt/datetime.c:424 utils/adt/datetime.c:1809 -#: utils/adt/formatting.c:4081 utils/adt/formatting.c:4117 -#: utils/adt/formatting.c:4210 utils/adt/formatting.c:4339 utils/adt/json.c:467 -#: utils/adt/json.c:506 utils/adt/timestamp.c:232 utils/adt/timestamp.c:264 -#: utils/adt/timestamp.c:700 utils/adt/timestamp.c:709 -#: utils/adt/timestamp.c:787 utils/adt/timestamp.c:820 -#: utils/adt/timestamp.c:2933 utils/adt/timestamp.c:2938 -#: utils/adt/timestamp.c:2957 utils/adt/timestamp.c:2970 -#: utils/adt/timestamp.c:2981 utils/adt/timestamp.c:2987 -#: utils/adt/timestamp.c:2993 utils/adt/timestamp.c:2998 -#: utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 -#: utils/adt/timestamp.c:3085 utils/adt/timestamp.c:3098 -#: utils/adt/timestamp.c:3112 utils/adt/timestamp.c:3120 -#: utils/adt/timestamp.c:3126 utils/adt/timestamp.c:3131 -#: utils/adt/timestamp.c:3859 utils/adt/timestamp.c:3983 -#: utils/adt/timestamp.c:4054 utils/adt/timestamp.c:4090 -#: utils/adt/timestamp.c:4180 utils/adt/timestamp.c:4254 -#: utils/adt/timestamp.c:4290 utils/adt/timestamp.c:4393 -#: utils/adt/timestamp.c:4842 utils/adt/timestamp.c:5116 -#: utils/adt/timestamp.c:5555 utils/adt/timestamp.c:5565 -#: utils/adt/timestamp.c:5570 utils/adt/timestamp.c:5576 -#: utils/adt/timestamp.c:5609 utils/adt/timestamp.c:5696 -#: utils/adt/timestamp.c:5737 utils/adt/timestamp.c:5741 -#: utils/adt/timestamp.c:5795 utils/adt/timestamp.c:5799 -#: utils/adt/timestamp.c:5805 utils/adt/timestamp.c:5839 utils/adt/xml.c:2492 -#: utils/adt/xml.c:2499 utils/adt/xml.c:2519 utils/adt/xml.c:2526 +#: 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:2574 +#: utils/adt/xml.c:2581 utils/adt/xml.c:2601 utils/adt/xml.c:2608 #, c-format msgid "timestamp out of range" msgstr "timestamp вне диапазона" -#: utils/adt/date.c:1535 utils/adt/date.c:2343 utils/adt/formatting.c:4431 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 #, c-format msgid "time out of range" msgstr "время вне диапазона" -#: utils/adt/date.c:1587 utils/adt/timestamp.c:597 +#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "значение поля типа time вне диапазона: %d:%02d:%02g" -#: utils/adt/date.c:2107 utils/adt/date.c:2647 utils/adt/float.c:1042 -#: utils/adt/float.c:1118 utils/adt/int.c:635 utils/adt/int.c:682 -#: utils/adt/int.c:717 utils/adt/int8.c:414 utils/adt/numeric.c:2579 -#: utils/adt/timestamp.c:3513 utils/adt/timestamp.c:3540 -#: utils/adt/timestamp.c:3571 +#: utils/adt/date.c:2020 +#, c-format +msgid "cannot convert infinite interval to time" +msgstr "бесконечный интервал нельзя привести к типу time" + +#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#, c-format +msgid "cannot add infinite interval to time" +msgstr "бесконечный интервал нельзя добавить к значению time" + +#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#, c-format +msgid "cannot subtract infinite interval from time" +msgstr "бесконечный интервал нельзя вычесть из значения time" + +#: 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 "неверное смещение PRECEDING или FOLLOWING в оконной функции" -#: utils/adt/date.c:2351 +#: utils/adt/date.c:2360 #, c-format msgid "time zone displacement out of range" msgstr "смещение часового пояса вне диапазона" -#: utils/adt/date.c:3111 utils/adt/timestamp.c:5598 utils/adt/timestamp.c:5828 +#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#, c-format +msgid "interval time zone \"%s\" must be finite" +msgstr "задающий часовой пояс интервал \"%s\" должен быть конечным" + +#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "" "интервал \"%s\", задающий часовой пояс, не должен содержать дней или месяцев" -#: utils/adt/datetime.c:3223 utils/adt/datetime.c:4002 -#: utils/adt/datetime.c:4008 utils/adt/timestamp.c:512 +#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 +#: utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 #, c-format msgid "time zone \"%s\" not recognized" msgstr "часовой пояс \"%s\" не распознан" -#: utils/adt/datetime.c:3976 utils/adt/datetime.c:3983 +#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "значение поля типа date/time вне диапазона: \"%s\"" -#: utils/adt/datetime.c:3985 +#: utils/adt/datetime.c:4110 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Возможно, вам нужно изменить настройку \"datestyle\"." -#: utils/adt/datetime.c:3990 +#: utils/adt/datetime.c:4115 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "значение поля interval вне диапазона: \"%s\"" -#: utils/adt/datetime.c:3996 +#: utils/adt/datetime.c:4121 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "смещение часового пояса вне диапазона: \"%s\"" -#: utils/adt/datetime.c:4010 +#: utils/adt/datetime.c:4135 #, c-format msgid "" "This time zone name appears in the configuration file for time zone " @@ -26434,22 +27648,22 @@ msgstr "" "Это имя часового пояса фигурирует в файле конфигурации часового пояса с " "кодом \"%s\"." -#: utils/adt/datum.c:91 utils/adt/datum.c:103 +#: utils/adt/datum.c:90 utils/adt/datum.c:102 #, c-format msgid "invalid Datum pointer" msgstr "неверный указатель Datum" -#: utils/adt/dbsize.c:761 utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:764 utils/adt/dbsize.c:840 #, c-format msgid "invalid size: \"%s\"" msgstr "некорректная величина: \"%s\"" -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:841 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Неверная единица измерения величины: \"%s\"." -#: utils/adt/dbsize.c:839 +#: utils/adt/dbsize.c:842 #, c-format msgid "" "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." @@ -26457,7 +27671,7 @@ msgstr "" "Допустимые единицы измерения: \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", " "\"TB\" и \"PB\"." -#: utils/adt/domains.c:92 +#: utils/adt/domains.c:95 #, c-format msgid "type %s is not a domain" msgstr "тип \"%s\" не является доменом" @@ -26508,10 +27722,10 @@ msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "" "Входные данные лишены выравнивания, обрезаны или повреждены иным образом." -#: utils/adt/encode.c:492 utils/adt/encode.c:557 utils/adt/jsonfuncs.c:648 -#: utils/adt/varlena.c:331 utils/adt/varlena.c:372 jsonpath_gram.y:528 -#: jsonpath_scan.l:629 jsonpath_scan.l:640 jsonpath_scan.l:650 -#: jsonpath_scan.l:701 +#: 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 jsonpath_gram.y:266 +#: jsonpath_gram.y:598 jsonpath_scan.l:640 jsonpath_scan.l:651 +#: jsonpath_scan.l:661 jsonpath_scan.l:712 #, c-format msgid "invalid input syntax for type %s" msgstr "неверный синтаксис для типа %s" @@ -26549,205 +27763,200 @@ msgstr "не удалось определить фактический тип msgid "enum %s contains no values" msgstr "перечисление %s не содержит значений" -#: utils/adt/float.c:89 +#: utils/adt/float.c:83 #, c-format msgid "value out of range: overflow" msgstr "значение вне диапазона: переполнение" -#: utils/adt/float.c:97 +#: utils/adt/float.c:91 #, c-format msgid "value out of range: underflow" msgstr "значение вне диапазона: антипереполнение" -#: utils/adt/float.c:286 +#: utils/adt/float.c:280 #, c-format msgid "\"%s\" is out of range for type real" msgstr "\"%s\" вне диапазона для типа real" -#: utils/adt/float.c:488 +#: utils/adt/float.c:482 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\" вне диапазона для типа double precision" -#: utils/adt/float.c:1253 utils/adt/float.c:1327 utils/adt/int.c:355 +#: 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:1293 utils/adt/numeric.c:4500 utils/adt/numeric.c:4505 +#: 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:1453 utils/adt/numeric.c:3693 utils/adt/numeric.c:10027 +#: 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:1521 utils/adt/numeric.c:3981 utils/adt/numeric.c:4093 +#: 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:1525 utils/adt/numeric.c:3985 utils/adt/numeric.c:10918 +#: 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:1701 utils/adt/float.c:1734 utils/adt/numeric.c:3893 -#: utils/adt/numeric.c:10698 +#: 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:1705 utils/adt/float.c:1738 utils/adt/numeric.c:3831 -#: utils/adt/numeric.c:3888 utils/adt/numeric.c:10702 +#: 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 "вычислить логарифм отрицательного числа нельзя" -#: utils/adt/float.c:1771 utils/adt/float.c:1802 utils/adt/float.c:1897 -#: utils/adt/float.c:1924 utils/adt/float.c:1952 utils/adt/float.c:1979 -#: utils/adt/float.c:2126 utils/adt/float.c:2163 utils/adt/float.c:2333 -#: utils/adt/float.c:2389 utils/adt/float.c:2454 utils/adt/float.c:2511 -#: utils/adt/float.c:2702 utils/adt/float.c:2726 +#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 +#: utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 +#: utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 +#: utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 +#: utils/adt/float.c:2696 utils/adt/float.c:2720 #, c-format msgid "input is out of range" msgstr "введённое значение вне диапазона" -#: utils/adt/float.c:2867 -#, c-format -msgid "setseed parameter %g is out of allowed range [-1,1]" -msgstr "параметр setseed %g вне допустимого диапазона [-1,1]" - -#: utils/adt/float.c:4095 utils/adt/numeric.c:1841 +#: utils/adt/float.c:4000 utils/adt/numeric.c:1857 #, c-format msgid "count must be greater than zero" msgstr "счётчик должен быть больше нуля" -#: utils/adt/float.c:4100 utils/adt/numeric.c:1852 +#: utils/adt/float.c:4005 utils/adt/numeric.c:1868 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "операнд, нижняя и верхняя границы не могут быть NaN" -#: utils/adt/float.c:4106 utils/adt/numeric.c:1857 +#: 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:4172 utils/adt/numeric.c:1871 +#: utils/adt/float.c:4077 utils/adt/numeric.c:1887 #, c-format msgid "lower bound cannot equal upper bound" msgstr "нижняя граница не может равняться верхней" -#: utils/adt/formatting.c:519 +#: utils/adt/formatting.c:530 #, c-format msgid "invalid format specification for an interval value" msgstr "неправильная спецификация формата для целого числа" -#: utils/adt/formatting.c:520 +#: utils/adt/formatting.c:531 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "Интервалы не привязываются к определённым календарным датам." -#: utils/adt/formatting.c:1150 +#: utils/adt/formatting.c:1161 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" может быть только последним шаблоном" -#: utils/adt/formatting.c:1158 +#: utils/adt/formatting.c:1169 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" должна стоять до \"PR\"" -#: utils/adt/formatting.c:1174 +#: utils/adt/formatting.c:1185 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" должен стоять до \"PR\"" -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1212 #, c-format msgid "multiple decimal points" msgstr "многочисленные десятичные точки" -#: utils/adt/formatting.c:1205 utils/adt/formatting.c:1288 +#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "нельзя использовать \"V\" вместе с десятичной точкой" -#: utils/adt/formatting.c:1217 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" twice" msgstr "нельзя использовать \"S\" дважды" -#: utils/adt/formatting.c:1221 +#: utils/adt/formatting.c:1232 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "нельзя использовать \"S\" вместе с \"PL\"/\"MI\"/\"SG\"/\"PR\"" -#: utils/adt/formatting.c:1241 +#: utils/adt/formatting.c:1252 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "нельзя использовать \"S\" вместе с \"MI\"" -#: utils/adt/formatting.c:1251 +#: utils/adt/formatting.c:1262 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "нельзя использовать \"S\" вместе с \"PL\"" -#: utils/adt/formatting.c:1261 +#: utils/adt/formatting.c:1272 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "нельзя использовать \"S\" вместе с \"SG\"" -#: utils/adt/formatting.c:1270 +#: utils/adt/formatting.c:1281 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "нельзя использовать \"PR\" вместе с \"S\"/\"PL\"/\"MI\"/\"SG\"" -#: utils/adt/formatting.c:1296 +#: utils/adt/formatting.c:1307 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "нельзя использовать \"EEEE\" дважды" -#: utils/adt/formatting.c:1302 +#: utils/adt/formatting.c:1313 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" несовместим с другими форматами" -#: utils/adt/formatting.c:1303 +#: utils/adt/formatting.c:1314 #, c-format msgid "" "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "" "\"EEEE\" может использоваться только с шаблонами цифр и десятичной точки." -#: utils/adt/formatting.c:1387 +#: utils/adt/formatting.c:1398 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "неверный разделитель в формате datetime: \"%s\"" -#: utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1525 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" не является числом" -#: utils/adt/formatting.c:1592 +#: utils/adt/formatting.c:1603 #, c-format msgid "case conversion failed: %s" msgstr "преобразовать регистр не удалось: %s" -#: utils/adt/formatting.c:1646 utils/adt/formatting.c:1768 -#: utils/adt/formatting.c:1891 +#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 +#: utils/adt/formatting.c:1989 #, c-format msgid "could not determine which collation to use for %s function" msgstr "" "не удалось определить, какое правило сортировки использовать для функции %s" -#: utils/adt/formatting.c:2274 +#: utils/adt/formatting.c:2410 #, c-format msgid "invalid combination of date conventions" msgstr "неверное сочетание стилей дат" -#: utils/adt/formatting.c:2275 +#: utils/adt/formatting.c:2411 #, c-format msgid "" "Do not mix Gregorian and ISO week date conventions in a formatting template." @@ -26755,27 +27964,27 @@ msgstr "" "Не смешивайте Григорианский стиль дат (недель) с ISO в одном шаблоне " "форматирования." -#: utils/adt/formatting.c:2297 +#: utils/adt/formatting.c:2433 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "конфликтующие значения поля \"%s\" в строке форматирования" -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2435 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Это значение противоречит предыдущему значению поля того же типа." -#: utils/adt/formatting.c:2366 +#: utils/adt/formatting.c:2502 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "входная строка короче, чем требует поле форматирования \"%s\"" -#: utils/adt/formatting.c:2368 +#: utils/adt/formatting.c:2504 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Требуется символов: %d, а осталось только %d." -#: utils/adt/formatting.c:2370 utils/adt/formatting.c:2384 +#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 #, c-format msgid "" "If your source string is not fixed-width, try using the \"FM\" modifier." @@ -26783,132 +27992,132 @@ msgstr "" "Если входная строка имеет переменную длину, попробуйте использовать " "модификатор \"FM\"." -#: utils/adt/formatting.c:2380 utils/adt/formatting.c:2393 -#: utils/adt/formatting.c:2614 +#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 +#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "неверное значение \"%s\" для \"%s\"" -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2518 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Поле должно поглотить символов: %d, но удалось разобрать только %d." -#: utils/adt/formatting.c:2395 +#: utils/adt/formatting.c:2531 #, c-format msgid "Value must be an integer." msgstr "Значение должно быть целым числом." -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2536 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "значение \"%s\" во входной строке вне диапазона" -#: utils/adt/formatting.c:2402 +#: utils/adt/formatting.c:2538 #, c-format msgid "Value must be in the range %d to %d." msgstr "Значение должно быть в интервале %d..%d." -#: utils/adt/formatting.c:2616 +#: utils/adt/formatting.c:2752 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "" "Данное значение не соответствует ни одному из допустимых значений для этого " "поля." -#: utils/adt/formatting.c:2832 utils/adt/formatting.c:2852 -#: utils/adt/formatting.c:2872 utils/adt/formatting.c:2892 -#: utils/adt/formatting.c:2911 utils/adt/formatting.c:2930 -#: utils/adt/formatting.c:2954 utils/adt/formatting.c:2972 -#: utils/adt/formatting.c:2990 utils/adt/formatting.c:3008 -#: utils/adt/formatting.c:3025 utils/adt/formatting.c:3042 +#: 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 #, c-format msgid "localized string format value too long" msgstr "слишком длинное значение формата локализованной строки" -#: utils/adt/formatting.c:3322 +#: utils/adt/formatting.c:3458 #, c-format msgid "unmatched format separator \"%c\"" msgstr "нет соответствия для заданного в формате разделителя \"%c\"" -#: utils/adt/formatting.c:3383 +#: utils/adt/formatting.c:3519 #, c-format msgid "unmatched format character \"%s\"" msgstr "нет соответствия для заданного в формате символа \"%s\"" -#: utils/adt/formatting.c:3491 +#: utils/adt/formatting.c:3652 #, c-format -msgid "formatting field \"%s\" is only supported in to_char" -msgstr "поле форматирования \"%s\" поддерживается только в функции to_char" +msgid "Time zone abbreviation is not recognized." +msgstr "Сокращённое название часового пояса не распознано." -#: utils/adt/formatting.c:3665 +#: utils/adt/formatting.c:3853 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ошибка синтаксиса в значении для шаблона \"Y,YYY\"" -#: utils/adt/formatting.c:3754 +#: utils/adt/formatting.c:3942 #, c-format msgid "input string is too short for datetime format" msgstr "входная строка короче, чем требует формат datetime" -#: utils/adt/formatting.c:3762 +#: utils/adt/formatting.c:3950 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "" "после разбора формата datetime во входной строке остались дополнительные " "символы" -#: utils/adt/formatting.c:4319 +#: utils/adt/formatting.c:4494 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "во входной строке для типа timestamptz нет указания часового пояса" -#: utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4500 #, c-format msgid "timestamptz out of range" msgstr "значение timestamptz вне диапазона" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4528 #, c-format msgid "datetime format is zoned but not timed" msgstr "в формате datetime указан часовой пояс, но отсутствует время" -#: utils/adt/formatting.c:4411 +#: utils/adt/formatting.c:4577 #, c-format msgid "missing time zone in input string for type timetz" msgstr "во входной строке для типа timetz нет указания часового пояса" -#: utils/adt/formatting.c:4417 +#: utils/adt/formatting.c:4583 #, c-format msgid "timetz out of range" msgstr "значение timetz вне диапазона" -#: utils/adt/formatting.c:4443 +#: utils/adt/formatting.c:4609 #, c-format msgid "datetime format is not dated and not timed" msgstr "в формате datetime нет ни даты, ни времени" -#: utils/adt/formatting.c:4575 +#: utils/adt/formatting.c:4786 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "час \"%d\" не соответствует 12-часовому формату времени" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4788 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Используйте 24-часовой формат или передавайте часы от 1 до 12." -#: utils/adt/formatting.c:4689 +#: utils/adt/formatting.c:4900 #, c-format msgid "cannot calculate day of year without year information" msgstr "нельзя рассчитать день года без информации о годе" -#: utils/adt/formatting.c:5621 +#: utils/adt/formatting.c:5852 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" не поддерживается при вводе" -#: utils/adt/formatting.c:5633 +#: utils/adt/formatting.c:5864 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" не поддерживается при вводе" @@ -26940,12 +28149,7 @@ msgstr "не удалось переместиться в файле \"%s\": %m" msgid "file length too large" msgstr "длина файла слишком велика" -#: utils/adt/genfile.c:248 -#, c-format -msgid "must be superuser to read files with adminpack 1.0" -msgstr "читать файлы, используя adminpack 1.0, может только суперпользователь" - -#: utils/adt/genfile.c:702 +#: utils/adt/genfile.c:656 #, c-format msgid "tablespace with OID %u does not exist" msgstr "табличное пространство с OID %u не существует" @@ -27001,298 +28205,298 @@ msgstr "точек должно быть минимум 2" msgid "invalid int2vector data" msgstr "неверные данные int2vector" -#: utils/adt/int.c:1529 utils/adt/int8.c:1419 utils/adt/numeric.c:1749 -#: utils/adt/timestamp.c:5889 utils/adt/timestamp.c:5971 +#: 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:449 utils/adt/int8.c:472 utils/adt/int8.c:486 -#: utils/adt/int8.c:500 utils/adt/int8.c:531 utils/adt/int8.c:555 -#: utils/adt/int8.c:637 utils/adt/int8.c:705 utils/adt/int8.c:711 -#: utils/adt/int8.c:737 utils/adt/int8.c:751 utils/adt/int8.c:775 -#: utils/adt/int8.c:788 utils/adt/int8.c:915 utils/adt/int8.c:929 -#: utils/adt/int8.c:943 utils/adt/int8.c:974 utils/adt/int8.c:996 -#: utils/adt/int8.c:1010 utils/adt/int8.c:1024 utils/adt/int8.c:1057 -#: utils/adt/int8.c:1071 utils/adt/int8.c:1085 utils/adt/int8.c:1116 -#: utils/adt/int8.c:1138 utils/adt/int8.c:1152 utils/adt/int8.c:1166 -#: utils/adt/int8.c:1328 utils/adt/int8.c:1363 utils/adt/numeric.c:4459 -#: utils/adt/rangetypes.c:1528 utils/adt/rangetypes.c:1541 +#: 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: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 вне диапазона" -#: utils/adt/int8.c:1376 +#: utils/adt/int8.c:1360 #, c-format msgid "OID out of range" msgstr "OID вне диапазона" -#: utils/adt/json.c:320 utils/adt/jsonb.c:781 +#: utils/adt/json.c:202 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "" "значением ключа должен быть скаляр (не массив, композитный тип или json)" -#: utils/adt/json.c:1113 utils/adt/json.c:1123 utils/fmgr/funcapi.c:2090 +#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 #, c-format msgid "could not determine data type for argument %d" msgstr "не удалось определить тип данных аргумента %d" -#: utils/adt/json.c:1146 utils/adt/json.c:1337 utils/adt/json.c:1513 -#: utils/adt/json.c:1591 utils/adt/jsonb.c:1432 utils/adt/jsonb.c:1522 +#: 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 "значение null не может быть ключом объекта" -#: utils/adt/json.c:1189 utils/adt/json.c:1352 +#: 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:1297 utils/adt/jsonb.c:1233 +#: 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:1299 utils/adt/jsonb.c:1235 +#: 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:1491 utils/adt/jsonb.c:1410 +#: utils/adt/json.c:1427 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "массив должен иметь два столбца" -#: utils/adt/json.c:1580 utils/adt/jsonb.c:1511 +#: utils/adt/json.c:1516 utils/adt/jsonb.c:1412 #, c-format msgid "mismatched array dimensions" msgstr "неподходящие размерности массива" -#: utils/adt/json.c:1764 utils/adt/jsonb_util.c:1958 +#: utils/adt/json.c:1702 utils/adt/jsonb_util.c:1956 #, c-format msgid "duplicate JSON object key value" msgstr "повторяющиеся ключи в объекте JSON" -#: utils/adt/jsonb.c:294 +#: utils/adt/jsonb.c:282 #, c-format msgid "string too long to represent as jsonb string" msgstr "слишком длинная строка для представления в виде строки jsonb" -#: utils/adt/jsonb.c:295 +#: utils/adt/jsonb.c:283 #, c-format msgid "" "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "" "Из-за ограничений реализации строки jsonb не могут быть длиннее %d байт." -#: utils/adt/jsonb.c:1252 +#: utils/adt/jsonb.c:1153 #, c-format msgid "argument %d: key must not be null" msgstr "аргумент %d: ключ не может быть NULL" -#: utils/adt/jsonb.c:1843 +#: utils/adt/jsonb.c:1744 #, c-format msgid "field name must not be null" msgstr "имя поля не может быть NULL" -#: utils/adt/jsonb.c:1905 +#: utils/adt/jsonb.c:1806 #, c-format msgid "object keys must be strings" msgstr "ключи объектов должны быть строковыми" -#: utils/adt/jsonb.c:2116 +#: utils/adt/jsonb.c:2017 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "привести значение jsonb null к типу %s нельзя" -#: utils/adt/jsonb.c:2117 +#: utils/adt/jsonb.c:2018 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "привести строку jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:2118 +#: utils/adt/jsonb.c:2019 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "привести числовое значение jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:2119 +#: utils/adt/jsonb.c:2020 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "привести логическое значение jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:2120 +#: utils/adt/jsonb.c:2021 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "привести массив jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:2121 +#: utils/adt/jsonb.c:2022 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "привести объект jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:2122 +#: utils/adt/jsonb.c:2023 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "привести массив или объект jsonb к типу %s нельзя" -#: utils/adt/jsonb_util.c:758 +#: utils/adt/jsonb_util.c:756 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "число пар объекта jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:799 +#: utils/adt/jsonb_util.c:797 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "число элементов массива jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:1673 utils/adt/jsonb_util.c:1693 +#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" msgstr "общий размер элементов массива jsonb превышает предел (%d байт)" -#: utils/adt/jsonb_util.c:1754 utils/adt/jsonb_util.c:1789 -#: utils/adt/jsonb_util.c:1809 +#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 +#: utils/adt/jsonb_util.c:1807 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" msgstr "общий размер элементов объекта jsonb превышает предел (%d байт)" -#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:151 +#: utils/adt/jsonbsubs.c:67 utils/adt/jsonbsubs.c:148 #, c-format msgid "jsonb subscript does not support slices" msgstr "jsonb не поддерживает обращение по индексу к срезам" -#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:117 +#: utils/adt/jsonbsubs.c:100 utils/adt/jsonbsubs.c:114 #, c-format msgid "subscript type %s is not supported" msgstr "индекс элемента имеет неподдерживаемый тип %s" -#: utils/adt/jsonbsubs.c:104 +#: utils/adt/jsonbsubs.c:101 #, c-format msgid "jsonb subscript must be coercible to only one type, integer or text." msgstr "" "Индекс элемента в jsonb должен приводиться только к одному типу, integer или " "text." -#: utils/adt/jsonbsubs.c:118 +#: utils/adt/jsonbsubs.c:115 #, c-format msgid "jsonb subscript must be coercible to either integer or text." msgstr "Индекс элемента в jsonb должен приводиться к типу integer или text." -#: utils/adt/jsonbsubs.c:139 +#: utils/adt/jsonbsubs.c:136 #, c-format msgid "jsonb subscript must have text type" msgstr "индекс элемента jsonb должен иметь текстовый тип" -#: utils/adt/jsonbsubs.c:207 +#: utils/adt/jsonbsubs.c:204 #, c-format msgid "jsonb subscript in assignment must not be null" msgstr "индекс элемента jsonb в присваивании не может быть NULL" -#: utils/adt/jsonfuncs.c:572 utils/adt/jsonfuncs.c:821 -#: utils/adt/jsonfuncs.c:2429 utils/adt/jsonfuncs.c:2881 -#: utils/adt/jsonfuncs.c:3676 utils/adt/jsonfuncs.c:4018 +#: 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:577 utils/adt/jsonfuncs.c:806 -#: utils/adt/jsonfuncs.c:2883 utils/adt/jsonfuncs.c:3663 +#: 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:636 jsonpath_scan.l:596 +#: utils/adt/jsonfuncs.c:647 jsonpath_scan.l:607 #, c-format msgid "unsupported Unicode escape sequence" msgstr "неподдерживаемая спецпоследовательность Unicode" -#: utils/adt/jsonfuncs.c:713 +#: 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:1875 utils/adt/jsonfuncs.c:1912 +#: 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:1879 utils/adt/jsonfuncs.c:1898 +#: 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:1978 +#: utils/adt/jsonfuncs.c:1986 #, c-format msgid "cannot call %s on a non-object" msgstr "вызывать %s с не объектом нельзя" -#: utils/adt/jsonfuncs.c:2166 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct an array as an object" msgstr "извлечь массив в виде объекта нельзя" -#: utils/adt/jsonfuncs.c:2180 +#: utils/adt/jsonfuncs.c:2188 #, c-format msgid "cannot deconstruct a scalar" msgstr "извлечь скаляр нельзя" -#: utils/adt/jsonfuncs.c:2225 +#: utils/adt/jsonfuncs.c:2233 #, c-format msgid "cannot extract elements from a scalar" msgstr "извлечь элементы из скаляра нельзя" -#: utils/adt/jsonfuncs.c:2229 +#: utils/adt/jsonfuncs.c:2237 #, c-format msgid "cannot extract elements from an object" msgstr "извлечь элементы из объекта нельзя" -#: utils/adt/jsonfuncs.c:2414 utils/adt/jsonfuncs.c:3896 +#: 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:2488 utils/adt/jsonfuncs.c:2493 -#: utils/adt/jsonfuncs.c:2510 utils/adt/jsonfuncs.c:2516 +#: 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:2489 +#: utils/adt/jsonfuncs.c:2516 #, c-format msgid "See the value of key \"%s\"." msgstr "Проверьте значение ключа \"%s\"." -#: utils/adt/jsonfuncs.c:2511 +#: utils/adt/jsonfuncs.c:2539 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Проверьте элемент массива %s ключа \"%s\"." -#: utils/adt/jsonfuncs.c:2517 +#: utils/adt/jsonfuncs.c:2545 #, c-format msgid "See the array element %s." msgstr "Проверьте элемент массива %s." -#: utils/adt/jsonfuncs.c:2552 +#: 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:3389 +#: 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:3413 +#: utils/adt/jsonfuncs.c:3671 #, c-format msgid "could not determine row type for result of %s" msgstr "не удалось определить тип строки для результата %s" -#: utils/adt/jsonfuncs.c:3415 +#: utils/adt/jsonfuncs.c:3673 #, c-format msgid "" "Provide a non-null record argument, or call the function in the FROM clause " @@ -27301,38 +28505,38 @@ msgstr "" "Передайте отличный от NULL аргумент-запись или вызовите эту функцию в " "предложении FROM, используя список определений столбцов." -#: utils/adt/jsonfuncs.c:3785 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:3913 utils/adt/jsonfuncs.c:3997 +#: 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:3946 +#: utils/adt/jsonfuncs.c:4223 #, c-format msgid "cannot call %s on an object" msgstr "вызывать %s с объектом нельзя" -#: utils/adt/jsonfuncs.c:4380 utils/adt/jsonfuncs.c:4439 -#: utils/adt/jsonfuncs.c:4519 +#: 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:4524 +#: utils/adt/jsonfuncs.c:4800 #, c-format msgid "cannot delete from object using integer index" msgstr "удаление из объекта по числовому индексу невозможно" -#: utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4751 +#: utils/adt/jsonfuncs.c:4868 utils/adt/jsonfuncs.c:5027 #, c-format msgid "cannot set path in scalar" msgstr "задать путь в скаляре нельзя" -#: utils/adt/jsonfuncs.c:4633 utils/adt/jsonfuncs.c:4675 +#: utils/adt/jsonfuncs.c:4909 utils/adt/jsonfuncs.c:4951 #, c-format msgid "" "null_value_treatment must be \"delete_key\", \"return_target\", " @@ -27341,12 +28545,12 @@ msgstr "" "значением null_value_treatment должно быть \"delete_key\", " "\"return_target\", \"use_json_null\" или \"raise_exception\"" -#: utils/adt/jsonfuncs.c:4646 +#: utils/adt/jsonfuncs.c:4922 #, c-format msgid "JSON value must not be null" msgstr "значение JSON не может быть NULL" -#: utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonfuncs.c:4923 #, c-format msgid "" "Exception was raised because null_value_treatment is \"raise_exception\"." @@ -27354,7 +28558,7 @@ msgstr "" "Выдано исключение, так как значением null_value_treatment является " "\"raise_exception\"." -#: utils/adt/jsonfuncs.c:4648 +#: utils/adt/jsonfuncs.c:4924 #, c-format msgid "" "To avoid, either change the null_value_treatment argument or ensure that an " @@ -27363,55 +28567,55 @@ msgstr "" "Чтобы исключения не было, либо измените аргумент null_value_treatment, либо " "не допускайте передачи SQL NULL." -#: utils/adt/jsonfuncs.c:4703 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "cannot delete path in scalar" msgstr "удалить путь в скаляре нельзя" -#: utils/adt/jsonfuncs.c:4917 +#: utils/adt/jsonfuncs.c:5193 #, c-format msgid "path element at position %d is null" msgstr "элемент пути в позиции %d равен NULL" -#: utils/adt/jsonfuncs.c:4936 utils/adt/jsonfuncs.c:4967 -#: utils/adt/jsonfuncs.c:5040 +#: 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:4937 utils/adt/jsonfuncs.c:4968 +#: 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:5041 +#: utils/adt/jsonfuncs.c:5317 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Попробуйте применить функцию jsonb_set для замены значения ключа." -#: utils/adt/jsonfuncs.c:5145 +#: utils/adt/jsonfuncs.c:5421 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "элемент пути в позиции %d - не целочисленный: \"%s\"" -#: utils/adt/jsonfuncs.c:5162 +#: utils/adt/jsonfuncs.c:5438 #, c-format msgid "path element at position %d is out of range: %d" msgstr "элемент пути в позиции %d вне диапазона: %d" -#: utils/adt/jsonfuncs.c:5314 +#: utils/adt/jsonfuncs.c:5590 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "неверный тип флага, допускаются только массивы и скаляры" -#: utils/adt/jsonfuncs.c:5321 +#: utils/adt/jsonfuncs.c:5597 #, c-format msgid "flag array element is not a string" msgstr "элемент массива флагов не является строкой" -#: utils/adt/jsonfuncs.c:5322 utils/adt/jsonfuncs.c:5344 +#: utils/adt/jsonfuncs.c:5598 utils/adt/jsonfuncs.c:5620 #, c-format msgid "" "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and " @@ -27419,197 +28623,313 @@ msgid "" msgstr "" "Допустимые значения: \"string\", \"numeric\", \"boolean\", \"key\" и \"all\"." -#: utils/adt/jsonfuncs.c:5342 +#: utils/adt/jsonfuncs.c:5618 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "неверный флаг в массиве флагов: \"%s\"" -#: utils/adt/jsonpath.c:382 +#: utils/adt/jsonpath.c:389 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ не допускается в корневых выражениях" -#: utils/adt/jsonpath.c:388 +#: utils/adt/jsonpath.c:395 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST принимается только в качестве индекса массива" -#: utils/adt/jsonpath_exec.c:361 +#: utils/adt/jsonpath_exec.c:491 #, c-format msgid "single boolean result is expected" msgstr "ожидался единственный булевский результат" -#: utils/adt/jsonpath_exec.c:557 +#: utils/adt/jsonpath_exec.c:851 #, c-format -msgid "\"vars\" argument is not an object" -msgstr "аргумент \"vars\" не является объектом" +msgid "jsonpath wildcard array accessor can only be applied to an array" +msgstr "" +"выражение обращения по звёздочке в jsonpath может применяться только к " +"массиву" -#: utils/adt/jsonpath_exec.c:558 +#: utils/adt/jsonpath_exec.c:874 #, c-format -msgid "" -"Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "" -"Параметры jsonpath должны передаваться в виде пар ключ-значение в объекте " -"\"vars\"." +"выражение обращения по звёздочке в jsonpath может применяться только к " +"объекту" + +#: utils/adt/jsonpath_exec.c:923 +#, c-format +msgid "jsonpath array subscript is out of bounds" +msgstr "индекс массива в jsonpath вне диапазона" + +#: utils/adt/jsonpath_exec.c:980 +#, c-format +msgid "jsonpath array accessor can only be applied to an array" +msgstr "" +"выражение обращения к массиву в jsonpath может применяться только к массиву" -#: utils/adt/jsonpath_exec.c:675 +#: utils/adt/jsonpath_exec.c:1044 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSON-объект не содержит ключ \"%s\"" -#: utils/adt/jsonpath_exec.c:687 +#: utils/adt/jsonpath_exec.c:1056 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "" "выражение обращения к члену в jsonpath может применяться только к объекту" -#: utils/adt/jsonpath_exec.c:716 +# skip-rule: space-before-period +#: utils/adt/jsonpath_exec.c:1114 #, c-format -msgid "jsonpath wildcard array accessor can only be applied to an array" +msgid "jsonpath item method .%s() can only be applied to an array" +msgstr "метод .%s() в jsonpath может применяться только к массиву" + +#: 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 "" -"выражение обращения по звёздочке в jsonpath может применяться только к " -"массиву" +"аргумент \"%s\" метода элемента jsonpath .%s() некорректен для типа double " +"precision" -#: utils/adt/jsonpath_exec.c:764 +#: 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 "jsonpath array subscript is out of bounds" -msgstr "индекс массива в jsonpath вне диапазона" +msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" +msgstr "метод элемента jsonpath .%s() не принимает значения NaN и Infinity" + +# skip-rule: space-before-period +#: 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 "" +"метод .%s() в jsonpath может применяться только к строковому или числовому " +"значению" -#: utils/adt/jsonpath_exec.c:821 +#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 #, c-format -msgid "jsonpath array accessor can only be applied to an array" +msgid "" +"argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" msgstr "" -"выражение обращения к массиву в jsonpath может применяться только к массиву" +"аргумент \"%s\" метода элемента jsonpath .%s() не подходит для типа bigint" -#: utils/adt/jsonpath_exec.c:873 +#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 #, c-format -msgid "jsonpath wildcard member accessor can only be applied to an object" +msgid "" +"argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" msgstr "" -"выражение обращения по звёздочке в jsonpath может применяться только к " -"объекту" +"аргумент \"%s\" метода элемента jsonpath .%s() не подходит для типа boolean" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1007 +#: utils/adt/jsonpath_exec.c:1386 #, c-format -msgid "jsonpath item method .%s() can only be applied to an array" -msgstr "метод .%s() в jsonpath может применяться только к массиву" +msgid "" +"jsonpath item method .%s() can only be applied to a boolean, string, or " +"numeric value" +msgstr "" +"метод .%s() в jsonpath может применяться только к булевскому, строковому или " +"числовому значению" + +#: 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 "" +"аргумент \"%s\" метода элемента jsonpath .%s() не подходит для типа numeric" -#: utils/adt/jsonpath_exec.c:1060 +#: utils/adt/jsonpath_exec.c:1487 #, c-format msgid "" -"numeric argument of jsonpath item method .%s() is out of range for type " -"double precision" +"precision of jsonpath item method .%s() is out of range for type integer" +msgstr "точность в аргументе метода jsonpath .%s() вне диапазона типа integer" + +#: utils/adt/jsonpath_exec.c:1501 +#, c-format +msgid "scale of jsonpath item method .%s() is out of range for type integer" msgstr "" -"числовой аргумент метода элемента jsonpath .%s() вне диапазона для типа " -"double precision" +"масштаб в аргументе метода элемента jsonpath .%s() вне диапазона типа integer" -#: utils/adt/jsonpath_exec.c:1081 +#: utils/adt/jsonpath_exec.c:1561 utils/adt/jsonpath_exec.c:1585 #, c-format msgid "" -"string argument of jsonpath item method .%s() is not a valid representation " -"of a double precision number" +"argument \"%s\" of jsonpath item method .%s() is invalid for type integer" msgstr "" -"строковый аргумент метода элемента jsonpath .%s() не является представлением " -"значения double precision" +"аргумент \"%s\" метода элемента jsonpath .%s() не подходит для типа integer" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1094 +#: utils/adt/jsonpath_exec.c:1648 #, c-format msgid "" -"jsonpath item method .%s() can only be applied to a string or numeric value" +"jsonpath item method .%s() can only be applied to a boolean, string, " +"numeric, or datetime value" msgstr "" -"метод .%s() в jsonpath может применяться только к строковому или числовому " -"значению" +"метод .%s() в jsonpath может применяться только к булевскому, строковому, " +"числовому значению или к дате/времени" -#: utils/adt/jsonpath_exec.c:1587 +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "" "левый операнд оператора %s в jsonpath не является одним числовым значением" -#: utils/adt/jsonpath_exec.c:1594 +#: utils/adt/jsonpath_exec.c:2144 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "" "правый операнд оператора %s в jsonpath не является одним числовым значением" -#: utils/adt/jsonpath_exec.c:1662 +#: utils/adt/jsonpath_exec.c:2212 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "" "операнд унарного оператора %s в jsonpath не является числовым значением" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1761 +#: utils/adt/jsonpath_exec.c:2311 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "метод .%s() в jsonpath может применяться только к числовому значению" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1801 +#: utils/adt/jsonpath_exec.c:2357 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "метод .%s() в jsonpath может применяться только к строке" -#: utils/adt/jsonpath_exec.c:1904 +#: utils/adt/jsonpath_exec.c:2450 +#, c-format +msgid "" +"time precision of jsonpath item method .%s() is out of range for type integer" +msgstr "" +"точность времени в аргументе метода jsonpath .%s() вне диапазона типа integer" + +#: 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 "datetime format is not recognized: \"%s\"" -msgstr "формат datetime не распознан: \"%s\"" +msgid "%s format is not recognized: \"%s\"" +msgstr "формат %s не распознан: \"%s\"" -#: utils/adt/jsonpath_exec.c:1906 +#: utils/adt/jsonpath_exec.c:2486 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "" "Воспользуйтесь аргументом datetime для указания формата входных данных." +#: 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 "точность времени в аргументе метода jsonpath .%s() некорректная" + # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1974 +#: utils/adt/jsonpath_exec.c:2840 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "метод .%s() в jsonpath может применяться только к объекту" -#: utils/adt/jsonpath_exec.c:2156 +#: 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:3158 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "не удалось найти в jsonpath переменную \"%s\"" -#: utils/adt/jsonpath_exec.c:2420 +#: utils/adt/jsonpath_exec.c:3211 +#, c-format +msgid "\"vars\" argument is not an object" +msgstr "аргумент \"vars\" не является объектом" + +#: utils/adt/jsonpath_exec.c:3212 +#, c-format +msgid "" +"Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgstr "" +"Параметры jsonpath должны передаваться в виде пар ключ-значение в объекте " +"\"vars\"." + +#: utils/adt/jsonpath_exec.c:3475 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "индекс элемента в jsonpath не является одним числовым значением" -#: utils/adt/jsonpath_exec.c:2432 +#: utils/adt/jsonpath_exec.c:3487 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "индекс массива в jsonpath вне целочисленного диапазона" -#: utils/adt/jsonpath_exec.c:2609 +#: utils/adt/jsonpath_exec.c:3671 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "значение %s нельзя преобразовать в %s без сведений о часовом поясе" -#: utils/adt/jsonpath_exec.c:2611 +#: utils/adt/jsonpath_exec.c:3673 #, c-format msgid "Use *_tz() function for time zone support." msgstr "Для передачи часового пояса используйте функцию *_tz()." +#: utils/adt/jsonpath_exec.c:3981 +#, c-format +msgid "" +"JSON path expression for column \"%s\" must return single item when no " +"wrapper is requested" +msgstr "" +"выражение пути JSON для столбца \"%s\" в отсутствие обёртки должно " +"возвращать одиночный элемент" + +#: utils/adt/jsonpath_exec.c:3983 utils/adt/jsonpath_exec.c:3988 +#, c-format +msgid "Use the WITH WRAPPER clause to wrap SQL/JSON items into an array." +msgstr "" +"Используйте предложение WITH WRAPPER, чтобы обернуть элементы SQL/JSON в " +"массив." + +#: utils/adt/jsonpath_exec.c:3987 +#, c-format +msgid "" +"JSON path expression in JSON_QUERY must return single item when no wrapper " +"is requested" +msgstr "" +"выражение пути JSON в JSON_QUERY в отсутствие обёртки должно возвращать " +"одиночный элемент" + +#: utils/adt/jsonpath_exec.c:4045 utils/adt/jsonpath_exec.c:4069 +#, c-format +msgid "JSON path expression for column \"%s\" must return single scalar item" +msgstr "" +"выражение пути JSON для столбца \"%s\" должно возвращать один скалярный " +"элемент" + +#: utils/adt/jsonpath_exec.c:4050 utils/adt/jsonpath_exec.c:4074 +#, c-format +msgid "JSON path expression in JSON_VALUE must return single scalar item" +msgstr "" +"выражение пути JSON в JSON_VALUE должно возвращать один скалярный элемент" + # well-spelled: симв #: utils/adt/levenshtein.c:132 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "длина аргумента levenshtein() превышает максимум (%d симв.)" -#: utils/adt/like.c:161 +#: utils/adt/like.c:159 #, c-format msgid "nondeterministic collations are not supported for LIKE" msgstr "недетерминированные правила сортировки не поддерживаются для LIKE" -#: utils/adt/like.c:190 utils/adt/like_support.c:1024 +#: utils/adt/like.c:188 utils/adt/like_support.c:1023 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "не удалось определить, какой порядок сортировки использовать для ILIKE" -#: utils/adt/like.c:202 +#: utils/adt/like.c:200 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "недетерминированные правила сортировки не поддерживаются для ILIKE" @@ -27619,22 +28939,22 @@ msgstr "недетерминированные правила сортировк msgid "LIKE pattern must not end with escape character" msgstr "шаблон LIKE не должен заканчиваться защитным символом" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "неверный защитный символ" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:802 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "Защитный символ должен быть пустым или состоять из одного байта." -#: utils/adt/like_support.c:1014 +#: utils/adt/like_support.c:1013 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "регистронезависимое сравнение не поддерживается для типа bytea" -#: utils/adt/like_support.c:1115 +#: utils/adt/like_support.c:1114 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "сравнение с регулярными выражениями не поддерживается для типа bytea" @@ -27644,12 +28964,12 @@ msgstr "сравнение с регулярными выражениями не msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "неверный октет в значении типа macaddr: \"%s\"" -#: utils/adt/mac8.c:554 +#: utils/adt/mac8.c:555 #, c-format msgid "macaddr8 data out of range to convert to macaddr" msgstr "значение в macaddr8 не допускает преобразование в macaddr" -#: utils/adt/mac8.c:555 +#: utils/adt/mac8.c:556 #, c-format msgid "" "Only addresses that have FF and FE as values in the 4th and 5th bytes from " @@ -27659,7 +28979,7 @@ msgstr "" "Преобразование из macaddr8 в macaddr возможно только для адресов, содержащих " "FF и FE в 4-ом и 5-ом байтах слева, например xx:xx:xx:ff:fe:xx:xx:xx." -#: utils/adt/mcxtfuncs.c:182 +#: utils/adt/mcxtfuncs.c:173 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d не относится к серверному процессу PostgreSQL" @@ -27698,70 +29018,70 @@ msgstr "может быть открытой меткой" msgid "requires AS" msgstr "требует AS" -#: utils/adt/misc.c:853 utils/adt/misc.c:867 utils/adt/misc.c:906 -#: utils/adt/misc.c:912 utils/adt/misc.c:918 utils/adt/misc.c:941 +#: utils/adt/misc.c:897 utils/adt/misc.c:911 utils/adt/misc.c:950 +#: utils/adt/misc.c:956 utils/adt/misc.c:962 utils/adt/misc.c:985 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "строка не является допустимым идентификатором: \"%s\"" -#: utils/adt/misc.c:855 +#: utils/adt/misc.c:899 #, c-format msgid "String has unclosed double quotes." msgstr "В строке не закрыты кавычки." -#: utils/adt/misc.c:869 +#: utils/adt/misc.c:913 #, c-format msgid "Quoted identifier must not be empty." msgstr "Идентификатор в кавычках не может быть пустым." -#: utils/adt/misc.c:908 +#: utils/adt/misc.c:952 #, c-format msgid "No valid identifier before \".\"." msgstr "Перед \".\" нет допустимого идентификатора." -#: utils/adt/misc.c:914 +#: utils/adt/misc.c:958 #, c-format msgid "No valid identifier after \".\"." msgstr "После \".\" нет допустимого идентификатора." -#: utils/adt/misc.c:974 +#: utils/adt/misc.c:1018 #, c-format msgid "log format \"%s\" is not supported" msgstr "формат журнала \"%s\" не поддерживается" -#: utils/adt/misc.c:975 +#: utils/adt/misc.c:1019 #, c-format msgid "The supported log formats are \"stderr\", \"csvlog\", and \"jsonlog\"." msgstr "Поддерживаются форматы журналов \"stderr\", \"csvlog\" и \"jsonlog\"." -#: utils/adt/multirangetypes.c:151 utils/adt/multirangetypes.c:164 -#: utils/adt/multirangetypes.c:193 utils/adt/multirangetypes.c:267 -#: utils/adt/multirangetypes.c:291 +#: utils/adt/multirangetypes.c:150 utils/adt/multirangetypes.c:163 +#: utils/adt/multirangetypes.c:192 utils/adt/multirangetypes.c:266 +#: utils/adt/multirangetypes.c:290 #, c-format msgid "malformed multirange literal: \"%s\"" msgstr "ошибочный литерал мультидиапазона: \"%s\"" -#: utils/adt/multirangetypes.c:153 +#: utils/adt/multirangetypes.c:152 #, c-format msgid "Missing left brace." msgstr "Отсутствует левая фигурная скобка." -#: utils/adt/multirangetypes.c:195 +#: utils/adt/multirangetypes.c:194 #, c-format msgid "Expected range start." msgstr "Ожидалось начало диапазона." -#: utils/adt/multirangetypes.c:269 +#: utils/adt/multirangetypes.c:268 #, c-format msgid "Expected comma or end of multirange." msgstr "Ожидалась запятая или конец мультидиапазона." -#: utils/adt/multirangetypes.c:982 +#: utils/adt/multirangetypes.c:981 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "мультидиапазоны нельзя получить из массивов мультидиапазонов" -#: utils/adt/multirangetypes.c:1008 +#: utils/adt/multirangetypes.c:1007 #, c-format msgid "multirange values cannot contain null members" msgstr "мультидиапазоны не могут содержать элементы NULL" @@ -27840,102 +29160,122 @@ msgstr "результат вне диапазона" msgid "cannot subtract inet values of different sizes" msgstr "нельзя вычитать значения inet разного размера" -#: utils/adt/numeric.c:785 utils/adt/numeric.c:3643 utils/adt/numeric.c:7131 -#: utils/adt/numeric.c:7334 utils/adt/numeric.c:7806 utils/adt/numeric.c:10501 -#: utils/adt/numeric.c:10975 utils/adt/numeric.c:11069 -#: utils/adt/numeric.c:11203 +#: 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 "значение переполняет формат numeric" -#: utils/adt/numeric.c:1098 +#: utils/adt/numeric.c:1106 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "неверный знак во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:1104 +#: utils/adt/numeric.c:1112 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "неверный порядок числа во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:1113 +#: utils/adt/numeric.c:1121 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "неверная цифра во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:1328 utils/adt/numeric.c:1342 +#: utils/adt/numeric.c:1336 utils/adt/numeric.c:1350 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "точность NUMERIC %d должна быть между 1 и %d" -#: utils/adt/numeric.c:1333 +#: utils/adt/numeric.c:1341 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "порядок NUMERIC %d должен быть между %d и %d" -#: utils/adt/numeric.c:1351 +#: utils/adt/numeric.c:1359 #, c-format msgid "invalid NUMERIC type modifier" msgstr "неверный модификатор типа NUMERIC" -#: utils/adt/numeric.c:1709 +#: utils/adt/numeric.c:1725 #, c-format msgid "start value cannot be NaN" msgstr "начальное значение не может быть NaN" -#: utils/adt/numeric.c:1713 +#: utils/adt/numeric.c:1729 #, c-format msgid "start value cannot be infinity" msgstr "начальное значение не может быть бесконечностью" -#: utils/adt/numeric.c:1720 +#: utils/adt/numeric.c:1736 #, c-format msgid "stop value cannot be NaN" msgstr "конечное значение не может быть NaN" -#: utils/adt/numeric.c:1724 +#: utils/adt/numeric.c:1740 #, c-format msgid "stop value cannot be infinity" msgstr "конечное значение не может быть бесконечностью" -#: utils/adt/numeric.c:1737 +#: utils/adt/numeric.c:1753 #, c-format msgid "step size cannot be NaN" msgstr "размер шага не может быть NaN" -#: utils/adt/numeric.c:1741 +#: utils/adt/numeric.c:1757 #, c-format msgid "step size cannot be infinity" msgstr "размер шага не может быть бесконечностью" -#: utils/adt/numeric.c:3633 +#: utils/adt/numeric.c:3649 #, c-format msgid "factorial of a negative number is undefined" msgstr "факториал отрицательного числа даёт неопределённость" -#: utils/adt/numeric.c:4366 utils/adt/numeric.c:4446 utils/adt/numeric.c:4487 -#: utils/adt/numeric.c:4683 +#: utils/adt/numeric.c:4256 +#, c-format +msgid "lower bound cannot be NaN" +msgstr "нижняя граница не может быть NaN" + +#: utils/adt/numeric.c:4260 +#, c-format +msgid "lower bound cannot be infinity" +msgstr "нижняя граница не может быть бесконечностью" + +#: utils/adt/numeric.c:4267 +#, c-format +msgid "upper bound cannot be NaN" +msgstr "верхняя граница не может быть NaN" + +#: utils/adt/numeric.c:4271 +#, c-format +msgid "upper bound cannot be infinity" +msgstr "верхняя граница не может быть бесконечностью" + +#: 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:4370 utils/adt/numeric.c:4450 utils/adt/numeric.c:4491 -#: utils/adt/numeric.c:4687 +#: 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:4696 +#: utils/adt/numeric.c:4789 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn вне диапазона" -#: utils/adt/numeric.c:7896 utils/adt/numeric.c:7947 +#: utils/adt/numeric.c:7981 utils/adt/numeric.c:8032 #, c-format msgid "numeric field overflow" msgstr "переполнение поля numeric" -#: utils/adt/numeric.c:7897 +#: utils/adt/numeric.c:7982 #, c-format msgid "" "A field with precision %d, scale %d must round to an absolute value less " @@ -27944,13 +29284,19 @@ msgstr "" "Поле с точностью %d, порядком %d должно округляться до абсолютного значения " "меньше чем %s%d." -#: utils/adt/numeric.c:7948 +#: utils/adt/numeric.c:8033 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "" "Поле с точностью %d, порядком %d не может содержать значение бесконечности." -#: utils/adt/oid.c:216 +#: 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 "нижняя граница должна быть меньше или равна верхней" + +#: utils/adt/oid.c:217 #, c-format msgid "invalid oidvector data" msgstr "неверные данные oidvector" @@ -27980,37 +29326,42 @@ msgstr "код запрошенного символа слишком велик msgid "requested character not valid for encoding: %u" msgstr "запрошенный символ не подходит для кодировки: %u" -#: utils/adt/orderedsetaggs.c:448 utils/adt/orderedsetaggs.c:553 -#: utils/adt/orderedsetaggs.c:693 +#: utils/adt/orderedsetaggs.c:446 utils/adt/orderedsetaggs.c:551 +#: utils/adt/orderedsetaggs.c:691 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "значение перцентиля %g лежит не в диапазоне 0..1" -#: utils/adt/pg_locale.c:1410 +#: 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:1421 utils/adt/pg_locale.c:2831 -#: utils/adt/pg_locale.c:2904 +#: 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:1450 +#: utils/adt/pg_locale.c:1546 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не удалось создать локаль \"%s\": %m" -#: utils/adt/pg_locale.c:1453 +#: utils/adt/pg_locale.c:1549 #, c-format msgid "" "The operating system could not find any locale data for the locale name " "\"%s\"." msgstr "Операционная система не может найти данные локали с именем \"%s\"." -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1670 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -28019,22 +29370,17 @@ msgstr "" "правила сортировки с разными значениями collate и ctype не поддерживаются на " "этой платформе" -#: utils/adt/pg_locale.c:1577 -#, c-format -msgid "collation provider LIBC is not supported on this platform" -msgstr "провайдер правил сортировки LIBC не поддерживается на этой платформе" - -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1717 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "для правила сортировки \"%s\", лишённого версии, была записана версия" -#: utils/adt/pg_locale.c:1624 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "несовпадение версии для правила сортировки \"%s\"" -#: utils/adt/pg_locale.c:1626 +#: utils/adt/pg_locale.c:1725 #, c-format msgid "" "The collation in the database was created using version %s, but the " @@ -28043,7 +29389,7 @@ msgstr "" "Правило сортировки в базе данных было создано с версией %s, но операционная " "система предоставляет версию %s." -#: utils/adt/pg_locale.c:1629 +#: utils/adt/pg_locale.c:1728 #, c-format msgid "" "Rebuild all objects affected by this collation and run ALTER COLLATION %s " @@ -28053,92 +29399,98 @@ msgstr "" "ALTER COLLATION %s REFRESH VERSION либо соберите PostgreSQL с правильной " "версией библиотеки." -#: utils/adt/pg_locale.c:1695 +#: 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:1814 #, c-format msgid "could not load locale \"%s\"" msgstr "не удалось загрузить локаль \"%s\"" -#: utils/adt/pg_locale.c:1720 +#: utils/adt/pg_locale.c:1839 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "" "не удалось получить версию правила сортировки для локали \"%s\" (код ошибки: " "%lu)" -#: utils/adt/pg_locale.c:1776 utils/adt/pg_locale.c:1789 +#: 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 "не удалось преобразовать строку в UTF-16 (код ошибки: %lu)" -#: utils/adt/pg_locale.c:1803 +#: utils/adt/pg_locale.c:1920 #, c-format msgid "could not compare Unicode strings: %m" msgstr "не удалось сравнить строки в Unicode: %m" -#: utils/adt/pg_locale.c:1984 +#: utils/adt/pg_locale.c:2094 #, c-format msgid "collation failed: %s" msgstr "ошибка в библиотеке сортировки: %s" -#: utils/adt/pg_locale.c:2205 utils/adt/pg_locale.c:2237 +#: 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:2474 +#: 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:2495 utils/adt/pg_locale.c:2511 +#: utils/adt/pg_locale.c:2656 utils/adt/pg_locale.c:2672 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "не удалось открыть сортировщик для локали \"%s\": %s" -#: utils/adt/pg_locale.c:2536 +#: utils/adt/pg_locale.c:2697 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "ICU не поддерживает кодировку \"%s\"" -#: utils/adt/pg_locale.c:2543 +#: 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:2561 utils/adt/pg_locale.c:2580 -#: utils/adt/pg_locale.c:2636 utils/adt/pg_locale.c:2647 +#: 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:2822 +#: 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:2863 +#: 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:2865 utils/adt/pg_locale.c:2894 +#: 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:2892 +#: 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:3073 +#: utils/adt/pg_locale.c:3204 #, c-format msgid "invalid multibyte character for locale" msgstr "неверный многобайтный символ для локали" -#: utils/adt/pg_locale.c:3074 +#: utils/adt/pg_locale.c:3205 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " @@ -28146,137 +29498,142 @@ msgid "" msgstr "" "Параметр локали сервера LC_CTYPE, возможно, несовместим с кодировкой БД." -#: utils/adt/pg_lsn.c:263 +#: utils/adt/pg_lsn.c:262 #, c-format msgid "cannot add NaN to pg_lsn" msgstr "нельзя добавить NaN к pg_lsn" -#: utils/adt/pg_lsn.c:297 +#: utils/adt/pg_lsn.c:296 #, c-format msgid "cannot subtract NaN from pg_lsn" msgstr "нельзя вычесть NaN из pg_lsn" -#: utils/adt/pg_upgrade_support.c:29 +#: utils/adt/pg_upgrade_support.c:39 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "" "функцию можно вызывать только когда сервер в режиме двоичного обновления" -#: utils/adt/pgstatfuncs.c:254 +#: utils/adt/pgstatfuncs.c:252 #, c-format msgid "invalid command name: \"%s\"" msgstr "неверное имя команды: \"%s\"" -#: utils/adt/pgstatfuncs.c:1774 +#: utils/adt/pgstatfuncs.c:1739 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "запрошен сброс неизвестного счётчика: \"%s\"" -#: utils/adt/pgstatfuncs.c:1775 +#: utils/adt/pgstatfuncs.c:1740 #, c-format msgid "" -"Target must be \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", or " -"\"wal\"." +"Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", " +"\"recovery_prefetch\", \"slru\", or \"wal\"." msgstr "" "Допустимые счётчики: \"archiver\", \"bgwriter\", \"io\", " -"\"recovery_prefetch\" и \"wal\"." +"\"recovery_prefetch\", \"slru\" и \"wal\"." -#: utils/adt/pgstatfuncs.c:1857 +#: utils/adt/pgstatfuncs.c:1822 #, c-format msgid "invalid subscription OID %u" msgstr "неверный OID подписки %u" -#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 +#: utils/adt/pseudorandomfuncs.c:69 +#, c-format +msgid "setseed parameter %g is out of allowed range [-1,1]" +msgstr "параметр setseed %g вне допустимого диапазона [-1,1]" + +#: utils/adt/pseudotypes.c:55 utils/adt/pseudotypes.c:89 #, c-format msgid "cannot display a value of type %s" msgstr "значение типа %s нельзя вывести" -#: utils/adt/pseudotypes.c:310 +#: utils/adt/pseudotypes.c:307 #, c-format msgid "cannot accept a value of a shell type" msgstr "значение типа shell нельзя ввести" -#: utils/adt/pseudotypes.c:320 +#: utils/adt/pseudotypes.c:317 #, c-format msgid "cannot display a value of a shell type" msgstr "значение типа shell нельзя вывести" -#: utils/adt/rangetypes.c:415 +#: utils/adt/rangetypes.c:422 #, c-format msgid "range constructor flags argument must not be null" msgstr "аргумент flags конструктора диапазона не может быть NULL" -#: utils/adt/rangetypes.c:1014 +#: utils/adt/rangetypes.c:1021 #, c-format msgid "result of range difference would not be contiguous" msgstr "результат вычитания диапазонов будет не непрерывным" -#: utils/adt/rangetypes.c:1075 +#: utils/adt/rangetypes.c:1082 #, c-format msgid "result of range union would not be contiguous" msgstr "результат объединения диапазонов будет не непрерывным" -#: utils/adt/rangetypes.c:1750 +#: utils/adt/rangetypes.c:1757 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "нижняя граница диапазона должна быть меньше или равна верхней" -#: utils/adt/rangetypes.c:2197 utils/adt/rangetypes.c:2210 -#: utils/adt/rangetypes.c:2224 +#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 +#: utils/adt/rangetypes.c:2283 #, c-format msgid "invalid range bound flags" msgstr "неверные флаги границ диапазона" -#: utils/adt/rangetypes.c:2198 utils/adt/rangetypes.c:2211 -#: utils/adt/rangetypes.c:2225 +#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 +#: utils/adt/rangetypes.c:2284 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Допустимые значения: \"[]\", \"[)\", \"(]\" и \"()\"." -#: utils/adt/rangetypes.c:2293 utils/adt/rangetypes.c:2310 -#: utils/adt/rangetypes.c:2325 utils/adt/rangetypes.c:2345 -#: utils/adt/rangetypes.c:2356 utils/adt/rangetypes.c:2403 -#: utils/adt/rangetypes.c:2411 +#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 +#: utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 +#: utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "malformed range literal: \"%s\"" msgstr "ошибочный литерал диапазона: \"%s\"" -#: utils/adt/rangetypes.c:2295 +#: utils/adt/rangetypes.c:2354 #, c-format msgid "Junk after \"empty\" key word." msgstr "Мусор после ключевого слова \"empty\"." -#: utils/adt/rangetypes.c:2312 +#: utils/adt/rangetypes.c:2371 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Отсутствует левая скобка (круглая или квадратная)." -#: utils/adt/rangetypes.c:2327 +#: utils/adt/rangetypes.c:2386 #, c-format msgid "Missing comma after lower bound." msgstr "Отсутствует запятая после нижней границы." -#: utils/adt/rangetypes.c:2347 +#: utils/adt/rangetypes.c:2406 #, c-format msgid "Too many commas." msgstr "Слишком много запятых." -#: utils/adt/rangetypes.c:2358 +#: utils/adt/rangetypes.c:2417 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Мусор после правой скобки." -#: utils/adt/regexp.c:305 utils/adt/regexp.c:1997 utils/adt/varlena.c:4270 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 #, c-format msgid "regular expression failed: %s" msgstr "ошибка в регулярном выражении: %s" -#: utils/adt/regexp.c:446 utils/adt/regexp.c:681 +#: utils/adt/regexp.c:445 utils/adt/regexp.c:680 #, c-format msgid "invalid regular expression option: \"%.*s\"" msgstr "неверный параметр регулярного выражения: \"%.*s\"" -#: utils/adt/regexp.c:683 +#: utils/adt/regexp.c:682 #, c-format msgid "" "If you meant to use regexp_replace() with a start parameter, cast the fourth " @@ -28285,15 +29642,15 @@ msgstr "" "Если вы хотите вызвать regexp_replace() с параметром start, явно приведите " "четвёртый аргумент к целочисленному типу." -#: utils/adt/regexp.c:717 utils/adt/regexp.c:726 utils/adt/regexp.c:1083 -#: utils/adt/regexp.c:1147 utils/adt/regexp.c:1156 utils/adt/regexp.c:1165 -#: utils/adt/regexp.c:1174 utils/adt/regexp.c:1854 utils/adt/regexp.c:1863 -#: utils/adt/regexp.c:1872 utils/misc/guc.c:6627 utils/misc/guc.c:6661 +#: 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" -#: utils/adt/regexp.c:937 +#: utils/adt/regexp.c:936 #, c-format msgid "" "SQL regular expression may not contain more than two escape-double-quote " @@ -28303,19 +29660,19 @@ msgstr "" "(экранированных кавычек)" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:1094 utils/adt/regexp.c:1185 utils/adt/regexp.c:1272 -#: utils/adt/regexp.c:1311 utils/adt/regexp.c:1699 utils/adt/regexp.c:1754 -#: utils/adt/regexp.c:1883 +#: utils/adt/regexp.c:1093 utils/adt/regexp.c:1184 utils/adt/regexp.c:1271 +#: utils/adt/regexp.c:1310 utils/adt/regexp.c:1698 utils/adt/regexp.c:1753 +#: utils/adt/regexp.c:1882 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s не поддерживает режим \"global\"" -#: utils/adt/regexp.c:1313 +#: utils/adt/regexp.c:1312 #, c-format msgid "Use the regexp_matches function instead." msgstr "Вместо неё используйте функцию regexp_matches." -#: utils/adt/regexp.c:1501 +#: utils/adt/regexp.c:1500 #, c-format msgid "too many regular expression matches" msgstr "слишком много совпадений для регулярного выражения" @@ -28330,19 +29687,19 @@ msgstr "имя \"%s\" имеют несколько функций" msgid "more than one operator named %s" msgstr "имя %s имеют несколько операторов" -#: utils/adt/regproc.c:670 gram.y:8841 +#: utils/adt/regproc.c:670 gram.y:8992 #, c-format msgid "missing argument" msgstr "отсутствует аргумент" -#: utils/adt/regproc.c:671 gram.y:8842 +#: utils/adt/regproc.c:671 gram.y:8993 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "" "Чтобы обозначить отсутствующий аргумент унарного оператора, укажите NONE." -#: utils/adt/regproc.c:675 utils/adt/regproc.c:2009 utils/adt/ruleutils.c:10021 -#: utils/adt/ruleutils.c:10234 +#: 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 "слишком много аргументов" @@ -28352,65 +29709,65 @@ msgstr "слишком много аргументов" msgid "Provide two argument types for operator." msgstr "Предоставьте для оператора два типа аргументов." -#: utils/adt/regproc.c:1544 utils/adt/regproc.c:1661 utils/adt/regproc.c:1790 -#: utils/adt/regproc.c:1795 utils/adt/varlena.c:3410 utils/adt/varlena.c:3415 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 +#: utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 #, c-format msgid "invalid name syntax" msgstr "ошибка синтаксиса в имени" -#: utils/adt/regproc.c:1904 +#: utils/adt/regproc.c:1924 #, c-format msgid "expected a left parenthesis" msgstr "ожидалась левая скобка" -#: utils/adt/regproc.c:1922 +#: utils/adt/regproc.c:1942 #, c-format msgid "expected a right parenthesis" msgstr "ожидалась правая скобка" -#: utils/adt/regproc.c:1941 +#: utils/adt/regproc.c:1961 #, c-format msgid "expected a type name" msgstr "ожидалось имя типа" -#: utils/adt/regproc.c:1973 +#: utils/adt/regproc.c:1993 #, c-format msgid "improper type name" msgstr "ошибочное имя типа" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1625 -#: utils/adt/ri_triggers.c:2610 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 +#: utils/adt/ri_triggers.c:2601 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" "INSERT или UPDATE в таблице \"%s\" нарушает ограничение внешнего ключа \"%s\"" -#: utils/adt/ri_triggers.c:309 utils/adt/ri_triggers.c:1628 +#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL не позволяет смешивать в значении ключа null и не null." -#: utils/adt/ri_triggers.c:2045 +#: utils/adt/ri_triggers.c:2036 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "функция \"%s\" должна запускаться для INSERT" -#: utils/adt/ri_triggers.c:2051 +#: utils/adt/ri_triggers.c:2042 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "функция \"%s\" должна запускаться для UPDATE" -#: utils/adt/ri_triggers.c:2057 +#: utils/adt/ri_triggers.c:2048 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "функция \"%s\" должна запускаться для DELETE" -#: utils/adt/ri_triggers.c:2080 +#: utils/adt/ri_triggers.c:2071 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "для триггера \"%s\" таблицы \"%s\" нет записи pg_constraint" -#: utils/adt/ri_triggers.c:2082 +#: utils/adt/ri_triggers.c:2073 #, c-format msgid "" "Remove this referential integrity trigger and its mates, then do ALTER TABLE " @@ -28419,12 +29776,12 @@ msgstr "" "Удалите этот триггер ссылочной целостности и связанные объекты, а затем " "выполните ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2112 gram.y:4223 +#: utils/adt/ri_triggers.c:2103 gram.y:4340 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "выражение MATCH PARTIAL ещё не реализовано" -#: utils/adt/ri_triggers.c:2435 +#: utils/adt/ri_triggers.c:2426 #, c-format msgid "" "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave " @@ -28433,33 +29790,33 @@ msgstr "" "неожиданный результат запроса ссылочной целостности к \"%s\" из ограничения " "\"%s\" таблицы \"%s\"" -#: utils/adt/ri_triggers.c:2439 +#: utils/adt/ri_triggers.c:2430 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Скорее всего это вызвано правилом, переписавшим запрос." -#: utils/adt/ri_triggers.c:2600 +#: utils/adt/ri_triggers.c:2591 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "" "при удалении секции \"%s\" нарушается ограничение внешнего ключа \"%s\"" -#: utils/adt/ri_triggers.c:2603 utils/adt/ri_triggers.c:2628 +#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "На ключ (%s)=(%s) всё ещё есть ссылки в таблице \"%s\"." -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2605 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Ключ (%s)=(%s) отсутствует в таблице \"%s\"." -#: utils/adt/ri_triggers.c:2617 +#: utils/adt/ri_triggers.c:2608 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Ключ отсутствует в таблице \"%s\"." -#: utils/adt/ri_triggers.c:2623 +#: utils/adt/ri_triggers.c:2614 #, c-format msgid "" "update or delete on table \"%s\" violates foreign key constraint \"%s\" on " @@ -28468,48 +29825,48 @@ msgstr "" "UPDATE или DELETE в таблице \"%s\" нарушает ограничение внешнего ключа " "\"%s\" таблицы \"%s\"" -#: utils/adt/ri_triggers.c:2631 +#: utils/adt/ri_triggers.c:2622 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "На ключ всё ещё есть ссылки в таблице \"%s\"." -#: utils/adt/rowtypes.c:106 utils/adt/rowtypes.c:510 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:509 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "ввод анонимных составных типов не реализован" -#: utils/adt/rowtypes.c:159 utils/adt/rowtypes.c:191 utils/adt/rowtypes.c:217 -#: utils/adt/rowtypes.c:228 utils/adt/rowtypes.c:286 utils/adt/rowtypes.c:297 +#: utils/adt/rowtypes.c:158 utils/adt/rowtypes.c:190 utils/adt/rowtypes.c:216 +#: utils/adt/rowtypes.c:227 utils/adt/rowtypes.c:285 utils/adt/rowtypes.c:296 #, c-format msgid "malformed record literal: \"%s\"" msgstr "ошибка в литерале записи: \"%s\"" -#: utils/adt/rowtypes.c:160 +#: utils/adt/rowtypes.c:159 #, c-format msgid "Missing left parenthesis." msgstr "Отсутствует левая скобка." -#: utils/adt/rowtypes.c:192 +#: utils/adt/rowtypes.c:191 #, c-format msgid "Too few columns." msgstr "Слишком мало столбцов." -#: utils/adt/rowtypes.c:287 +#: utils/adt/rowtypes.c:286 #, c-format msgid "Too many columns." msgstr "Слишком много столбцов." -#: utils/adt/rowtypes.c:298 +#: utils/adt/rowtypes.c:297 #, c-format msgid "Junk after right parenthesis." msgstr "Мусор после правой скобки." -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:558 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "неверное число столбцов: %d, ожидалось: %d" -#: utils/adt/rowtypes.c:601 +#: utils/adt/rowtypes.c:599 #, c-format msgid "" "binary data has type %u (%s) instead of expected %u (%s) in record column %d" @@ -28517,168 +29874,177 @@ msgstr "" "с бинарными данными связан тип %u (%s) вместо ожидаемого %u (%s) в столбце " "записи %d" -#: utils/adt/rowtypes.c:668 +#: utils/adt/rowtypes.c:660 #, c-format msgid "improper binary format in record column %d" msgstr "неподходящий двоичный формат в столбце записи %d" -#: utils/adt/rowtypes.c:959 utils/adt/rowtypes.c:1205 utils/adt/rowtypes.c:1463 -#: utils/adt/rowtypes.c:1709 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 +#: utils/adt/rowtypes.c:1699 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "не удалось сравнить различные типы столбцов %s и %s, столбец записи %d" -#: utils/adt/rowtypes.c:1050 utils/adt/rowtypes.c:1275 -#: utils/adt/rowtypes.c:1560 utils/adt/rowtypes.c:1745 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 +#: utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "сравнивать типы записей с разным числом столбцов нельзя" -#: utils/adt/ruleutils.c:2679 +#: utils/adt/ruleutils.c:2694 #, c-format msgid "input is a query, not an expression" msgstr "на вход поступил запрос, а не выражение" -#: utils/adt/ruleutils.c:2691 +#: utils/adt/ruleutils.c:2706 #, c-format msgid "expression contains variables of more than one relation" msgstr "выражение содержит переменные из нескольких отношений" -#: utils/adt/ruleutils.c:2698 +#: utils/adt/ruleutils.c:2713 #, c-format msgid "expression contains variables" msgstr "выражение содержит переменные" -#: utils/adt/ruleutils.c:5228 +#: utils/adt/ruleutils.c:5246 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "правило \"%s\" имеет неподдерживаемый тип событий %d" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:128 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "TIMESTAMP(%d)%s: точность должна быть неотрицательна" -#: utils/adt/timestamp.c:118 +#: utils/adt/timestamp.c:134 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/timestamp.c:378 +#: utils/adt/timestamp.c:394 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "точность timestamp(%d) должна быть между %d и %d" -#: utils/adt/timestamp.c:496 +#: utils/adt/timestamp.c:512 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "" "Запись числового часового пояса должна начинаться с символа \"-\" или \"+\"." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:524 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "числовой часовой пояс \"%s\" вне диапазона" -#: utils/adt/timestamp.c:609 utils/adt/timestamp.c:619 -#: utils/adt/timestamp.c:627 +#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 +#: utils/adt/timestamp.c:643 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp вне диапазона: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:728 +#: utils/adt/timestamp.c:744 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp не может быть NaN" -#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:758 +#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp вне диапазона: \"%g\"" -#: utils/adt/timestamp.c:941 utils/adt/timestamp.c:1518 -#: utils/adt/timestamp.c:2708 utils/adt/timestamp.c:2778 -#: utils/adt/timestamp.c:2795 utils/adt/timestamp.c:2848 -#: utils/adt/timestamp.c:2887 utils/adt/timestamp.c:3215 -#: utils/adt/timestamp.c:3220 utils/adt/timestamp.c:3225 -#: utils/adt/timestamp.c:3275 utils/adt/timestamp.c:3282 -#: utils/adt/timestamp.c:3289 utils/adt/timestamp.c:3309 -#: utils/adt/timestamp.c:3316 utils/adt/timestamp.c:3323 -#: utils/adt/timestamp.c:3410 utils/adt/timestamp.c:3485 -#: utils/adt/timestamp.c:3854 utils/adt/timestamp.c:3978 -#: utils/adt/timestamp.c:4026 utils/adt/timestamp.c:4036 -#: utils/adt/timestamp.c:4226 utils/adt/timestamp.c:4236 -#: utils/adt/timestamp.c:4532 +#: 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: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 "interval вне диапазона" -#: utils/adt/timestamp.c:1065 utils/adt/timestamp.c:1098 +#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 #, c-format msgid "invalid INTERVAL type modifier" msgstr "неверный модификатор типа INTERVAL" -#: utils/adt/timestamp.c:1081 +#: utils/adt/timestamp.c:1110 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d): точность должна быть неотрицательна" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1116 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d): точность уменьшена до максимально возможной: %d" -#: utils/adt/timestamp.c:1473 +#: utils/adt/timestamp.c:1506 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "точность interval(%d) должна быть между %d и %d" -#: utils/adt/timestamp.c:2703 -#, c-format -msgid "cannot subtract infinite timestamps" -msgstr "вычитать бесконечные значения timestamp нельзя" - -#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4215 +#: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 #, c-format msgid "origin out of range" msgstr "начало вне диапазона" -#: utils/adt/timestamp.c:4020 utils/adt/timestamp.c:4220 +#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#, c-format +msgid "timestamps cannot be binned into infinite intervals" +msgstr "значения timestamp нельзя подогнать под бесконечные интервалы" + +#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "" "значения timestamp нельзя подогнать под интервалы, содержащие месяцы или годы" -#: utils/adt/timestamp.c:4031 utils/adt/timestamp.c:4231 +#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 #, c-format msgid "stride must be greater than zero" msgstr "шаг должен быть больше нуля" -#: utils/adt/timestamp.c:4526 +#: utils/adt/timestamp.c:5091 #, c-format msgid "Months usually have fractional weeks." msgstr "В месяцах обычно дробное количество недель." -#: utils/adt/trigfuncs.c:42 +#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#, c-format +msgid "step size cannot be infinite" +msgstr "размер шага не может быть бесконечным" + +#: utils/adt/trigfuncs.c:41 #, c-format msgid "suppress_redundant_updates_trigger: must be called as trigger" msgstr "" "функция suppress_redundant_updates_trigger должна вызываться как триггер" -#: utils/adt/trigfuncs.c:48 +#: utils/adt/trigfuncs.c:47 #, c-format msgid "suppress_redundant_updates_trigger: must be called on update" msgstr "" "функция suppress_redundant_updates_trigger должна вызываться при обновлении" -#: utils/adt/trigfuncs.c:54 +#: utils/adt/trigfuncs.c:53 #, c-format msgid "suppress_redundant_updates_trigger: must be called before update" msgstr "" "функция suppress_redundant_updates_trigger должна вызываться перед " "обновлением" -#: utils/adt/trigfuncs.c:60 +#: utils/adt/trigfuncs.c:59 #, c-format msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "" @@ -28699,32 +30065,32 @@ msgstr "" msgid "no operand in tsquery: \"%s\"" msgstr "нет оператора в tsquery: \"%s\"" -#: utils/adt/tsquery.c:558 +#: utils/adt/tsquery.c:554 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "слишком большое значение в tsquery: \"%s\"" -#: utils/adt/tsquery.c:563 +#: utils/adt/tsquery.c:559 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "слишком длинный операнд в tsquery: \"%s\"" -#: utils/adt/tsquery.c:591 +#: utils/adt/tsquery.c:587 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "слишком длинное слово в tsquery: \"%s\"" -#: utils/adt/tsquery.c:717 utils/adt/tsvector_parser.c:147 +#: utils/adt/tsquery.c:713 utils/adt/tsvector_parser.c:147 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "ошибка синтаксиса в tsquery: \"%s\"" -#: utils/adt/tsquery.c:883 +#: utils/adt/tsquery.c:879 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "запрос поиска текста не содержит лексемы: \"%s\"" -#: utils/adt/tsquery.c:894 utils/adt/tsquery_util.c:376 +#: utils/adt/tsquery.c:890 utils/adt/tsquery_util.c:376 #, c-format msgid "tsquery is too large" msgstr "tsquery слишком большой" @@ -28763,72 +30129,72 @@ msgstr "массив весов не может содержать null" msgid "weight out of range" msgstr "вес вне диапазона" -#: utils/adt/tsvector.c:217 +#: utils/adt/tsvector.c:216 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "слово слишком длинное (%ld Б, при максимуме %ld)" -#: utils/adt/tsvector.c:224 +#: utils/adt/tsvector.c:223 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "строка слишком длинна для tsvector (%ld Б, при максимуме %ld)" -#: utils/adt/tsvector_op.c:773 +#: utils/adt/tsvector_op.c:771 #, c-format msgid "lexeme array may not contain nulls" msgstr "массив лексем не может содержать элементы null" -#: utils/adt/tsvector_op.c:778 +#: utils/adt/tsvector_op.c:776 #, c-format msgid "lexeme array may not contain empty strings" msgstr "массив лексем не должен содержать пустые строки" -#: utils/adt/tsvector_op.c:847 +#: utils/adt/tsvector_op.c:845 #, c-format msgid "weight array may not contain nulls" msgstr "массив весов не может содержать элементы null" -#: utils/adt/tsvector_op.c:871 +#: utils/adt/tsvector_op.c:869 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "нераспознанный вес: \"%c\"" -#: utils/adt/tsvector_op.c:2601 +#: utils/adt/tsvector_op.c:2599 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "запрос ts_stat должен вернуть один столбец tsvector" -#: utils/adt/tsvector_op.c:2790 +#: utils/adt/tsvector_op.c:2788 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "столбец \"%s\" типа tsvector не существует" -#: utils/adt/tsvector_op.c:2797 +#: utils/adt/tsvector_op.c:2795 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "столбец \"%s\" должен иметь тип tsvector" -#: utils/adt/tsvector_op.c:2809 +#: utils/adt/tsvector_op.c:2807 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "столбец конфигурации \"%s\" не существует" -#: utils/adt/tsvector_op.c:2815 +#: utils/adt/tsvector_op.c:2813 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "столбец \"%s\" должен иметь тип regconfig" -#: utils/adt/tsvector_op.c:2822 +#: utils/adt/tsvector_op.c:2820 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "значение столбца конфигурации \"%s\" не должно быть null" -#: utils/adt/tsvector_op.c:2835 +#: utils/adt/tsvector_op.c:2833 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "имя конфигурации текстового поиска \"%s\" должно указываться со схемой" -#: utils/adt/tsvector_op.c:2860 +#: utils/adt/tsvector_op.c:2858 #, c-format msgid "column \"%s\" is not of a character type" msgstr "столбец \"%s\" имеет не символьный тип" @@ -28849,17 +30215,17 @@ msgstr "нет спец. символа \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "неверная информация о позиции в tsvector: \"%s\"" -#: utils/adt/uuid.c:413 +#: utils/adt/uuid.c:418 #, c-format msgid "could not generate random values" msgstr "не удалось сгенерировать случайные значения" -#: utils/adt/varbit.c:110 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "длина значения типа %s должна быть как минимум 1" -#: utils/adt/varbit.c:115 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "длина значения типа %s не может превышать %d" @@ -28894,9 +30260,9 @@ msgstr "неверная длина во внешней строке битов" msgid "bit string too long for type bit varying(%d)" msgstr "строка битов не умещается в тип bit varying(%d)" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:908 -#: utils/adt/varlena.c:971 utils/adt/varlena.c:1128 utils/adt/varlena.c:3052 -#: utils/adt/varlena.c:3130 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 +#: utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 +#: utils/adt/varlena.c:3133 #, c-format msgid "negative substring length not allowed" msgstr "подстрока должна иметь неотрицательную длину" @@ -28922,106 +30288,113 @@ msgstr "" msgid "bit index %d out of valid range (0..%d)" msgstr "индекс бита %d вне диапазона 0..%d" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3334 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 #, c-format msgid "new bit must be 0 or 1" msgstr "значением бита должен быть 0 или 1" -#: utils/adt/varchar.c:162 utils/adt/varchar.c:313 +#: utils/adt/varchar.c:161 utils/adt/varchar.c:312 #, c-format msgid "value too long for type character(%d)" msgstr "значение не умещается в тип character(%d)" -#: utils/adt/varchar.c:476 utils/adt/varchar.c:640 +#: utils/adt/varchar.c:475 utils/adt/varchar.c:639 #, c-format msgid "value too long for type character varying(%d)" msgstr "значение не умещается в тип character varying(%d)" -#: utils/adt/varchar.c:738 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "" "не удалось определить, какое правило сортировки использовать для сравнения " "строк" -#: utils/adt/varlena.c:1227 utils/adt/varlena.c:1806 +#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "" "недетерминированные правила сортировки не поддерживаются для поиска подстрок" -#: utils/adt/varlena.c:3218 utils/adt/varlena.c:3285 +#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "индекс %d вне диапазона 0..%d" -#: utils/adt/varlena.c:3249 utils/adt/varlena.c:3321 +#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "индекс %lld вне диапазона 0..%lld" -#: utils/adt/varlena.c:4382 +#: utils/adt/varlena.c:4385 #, c-format msgid "field position must not be zero" msgstr "позиция поля должна быть отлична от 0" -#: utils/adt/varlena.c:5554 +#: utils/adt/varlena.c:5630 #, c-format msgid "unterminated format() type specifier" msgstr "незавершённый спецификатор типа format()" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5689 utils/adt/varlena.c:5810 +#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Для представления одного знака \"%%\" запишите \"%%%%\"." -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5808 +#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "нераспознанный спецификатор типа format(): \"%.*s\"" -#: utils/adt/varlena.c:5700 utils/adt/varlena.c:5757 +#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 #, c-format msgid "too few arguments for format()" msgstr "мало аргументов для format()" -#: utils/adt/varlena.c:5853 utils/adt/varlena.c:6035 +#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 #, c-format msgid "number is out of range" msgstr "число вне диапазона" -#: utils/adt/varlena.c:5916 utils/adt/varlena.c:5944 +#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "формат ссылается на аргумент 0, но аргументы нумеруются с 1" -#: utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:6013 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "указание аргумента ширины должно оканчиваться \"$\"" -#: utils/adt/varlena.c:5982 +#: utils/adt/varlena.c:6058 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "значения null нельзя представить в виде SQL-идентификатора" -#: utils/adt/varlena.c:6190 +#: utils/adt/varlena.c:6266 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "" "нормализацию Unicode можно выполнять, только если кодировка сервера — UTF8" -#: utils/adt/varlena.c:6203 +#: utils/adt/varlena.c:6279 #, c-format msgid "invalid normalization form: %s" msgstr "неверная форма нормализации: %s" -#: utils/adt/varlena.c:6406 utils/adt/varlena.c:6441 utils/adt/varlena.c:6476 +# well-spelled: категоризацию +#: utils/adt/varlena.c:6324 +#, c-format +msgid "Unicode categorization can only be performed if server encoding is UTF8" +msgstr "" +"категоризацию Unicode можно выполнять, только если кодировка сервера — UTF8" + +#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 #, c-format msgid "invalid Unicode code point: %04X" msgstr "неверный код символа Unicode: %04X" -#: utils/adt/varlena.c:6506 +#: utils/adt/varlena.c:6641 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "" @@ -29032,17 +30405,17 @@ msgstr "" msgid "argument of ntile must be greater than zero" msgstr "аргумент ntile должен быть больше нуля" -#: utils/adt/windowfuncs.c:723 +#: utils/adt/windowfuncs.c:707 #, c-format msgid "argument of nth_value must be greater than zero" msgstr "аргумент nth_value должен быть больше нуля" -#: utils/adt/xid8funcs.c:126 +#: utils/adt/xid8funcs.c:120 #, c-format msgid "transaction ID %llu is in the future" msgstr "ID транзакции %llu относится к будущему" -#: utils/adt/xid8funcs.c:555 +#: utils/adt/xid8funcs.c:522 #, c-format msgid "invalid external pg_snapshot data" msgstr "неверное внешнее представление pg_snapshot" @@ -29057,7 +30430,7 @@ msgstr "XML-функции не поддерживаются" msgid "This functionality requires the server to be built with libxml support." msgstr "Для этой функциональности в сервере не хватает поддержки libxml." -#: utils/adt/xml.c:258 utils/mb/mbutils.c:628 +#: utils/adt/xml.c:258 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "неверное имя кодировки: \"%s\"" @@ -29067,37 +30440,37 @@ msgstr "неверное имя кодировки: \"%s\"" msgid "invalid XML comment" msgstr "ошибка в XML-комментарии" -#: utils/adt/xml.c:670 +#: utils/adt/xml.c:697 #, c-format msgid "not an XML document" msgstr "не XML-документ" -#: utils/adt/xml.c:966 utils/adt/xml.c:989 +#: utils/adt/xml.c:1008 utils/adt/xml.c:1031 #, c-format msgid "invalid XML processing instruction" msgstr "неправильная XML-инструкция обработки (PI)" -#: utils/adt/xml.c:967 +#: utils/adt/xml.c:1009 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "назначением XML-инструкции обработки (PI) не может быть \"%s\"." -#: utils/adt/xml.c:990 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "XML-инструкция обработки (PI) не может содержать \"?>\"." -#: utils/adt/xml.c:1069 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "функция xmlvalidate не реализована" -#: utils/adt/xml.c:1125 +#: utils/adt/xml.c:1167 #, c-format msgid "could not initialize XML library" msgstr "не удалось инициализировать библиотеку XML" -#: utils/adt/xml.c:1126 +#: utils/adt/xml.c:1168 #, c-format msgid "" "libxml2 has incompatible char type: sizeof(char)=%zu, sizeof(xmlChar)=%zu." @@ -29105,12 +30478,12 @@ msgstr "" "В libxml2 оказался несовместимый тип char: sizeof(char)=%zu, " "sizeof(xmlChar)=%zu." -#: utils/adt/xml.c:1212 +#: utils/adt/xml.c:1254 #, c-format msgid "could not set up XML error handler" msgstr "не удалось установить обработчик XML-ошибок" -#: utils/adt/xml.c:1213 +#: utils/adt/xml.c:1255 #, c-format msgid "" "This probably indicates that the version of libxml2 being used is not " @@ -29119,125 +30492,125 @@ msgstr "" "Возможно, это означает, что используемая версия libxml2 несовместима с " "заголовочными файлами libxml2, с которыми был собран PostgreSQL." -#: utils/adt/xml.c:2199 +#: utils/adt/xml.c:2281 msgid "Invalid character value." msgstr "Неверный символ." -#: utils/adt/xml.c:2202 +#: utils/adt/xml.c:2284 msgid "Space required." msgstr "Требуется пробел." -#: utils/adt/xml.c:2205 +#: utils/adt/xml.c:2287 msgid "standalone accepts only 'yes' or 'no'." msgstr "значениями атрибута standalone могут быть только 'yes' и 'no'." -#: utils/adt/xml.c:2208 +#: utils/adt/xml.c:2290 msgid "Malformed declaration: missing version." msgstr "Ошибочное объявление: не указана версия." -#: utils/adt/xml.c:2211 +#: utils/adt/xml.c:2293 msgid "Missing encoding in text declaration." msgstr "В объявлении не указана кодировка." -#: utils/adt/xml.c:2214 +#: utils/adt/xml.c:2296 msgid "Parsing XML declaration: '?>' expected." msgstr "Ошибка при разборе XML-объявления: ожидается '?>'." -#: utils/adt/xml.c:2217 +#: utils/adt/xml.c:2299 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Нераспознанный код ошибки libxml: %d." -#: utils/adt/xml.c:2471 +#: utils/adt/xml.c:2553 #, c-format msgid "XML does not support infinite date values." msgstr "XML не поддерживает бесконечность в датах." -#: utils/adt/xml.c:2493 utils/adt/xml.c:2520 +#: utils/adt/xml.c:2575 utils/adt/xml.c:2602 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML не поддерживает бесконечность в timestamp." -#: utils/adt/xml.c:2936 +#: utils/adt/xml.c:3018 #, c-format msgid "invalid query" msgstr "неверный запрос" -#: utils/adt/xml.c:3028 +#: utils/adt/xml.c:3110 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "портал \"%s\" не возвращает кортежи" -#: utils/adt/xml.c:4280 +#: utils/adt/xml.c:4362 #, c-format msgid "invalid array for XML namespace mapping" msgstr "неправильный массив с сопоставлениями пространств имён XML" -#: utils/adt/xml.c:4281 +#: utils/adt/xml.c:4363 #, c-format msgid "" "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Массив должен быть двухмерным и содержать 2 элемента по второй оси." -#: utils/adt/xml.c:4305 +#: utils/adt/xml.c:4387 #, c-format msgid "empty XPath expression" msgstr "пустое выражение XPath" -#: utils/adt/xml.c:4357 +#: utils/adt/xml.c:4439 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ни префикс, ни URI пространства имён не может быть null" -#: utils/adt/xml.c:4364 +#: utils/adt/xml.c:4446 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" "не удалось зарегистрировать пространство имён XML с префиксом \"%s\" и URI " "\"%s\"" -#: utils/adt/xml.c:4707 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "пространство имён DEFAULT не поддерживается" -#: utils/adt/xml.c:4736 +#: utils/adt/xml.c:4824 #, c-format msgid "row path filter must not be empty string" msgstr "путь отбираемых строк не должен быть пустым" -#: utils/adt/xml.c:4767 +#: utils/adt/xml.c:4858 #, c-format msgid "column path filter must not be empty string" msgstr "путь отбираемого столбца не должен быть пустым" -#: utils/adt/xml.c:4911 +#: utils/adt/xml.c:5005 #, c-format msgid "more than one value returned by column XPath expression" msgstr "выражение XPath, отбирающее столбец, возвратило более одного значения" -#: utils/cache/lsyscache.c:1043 +#: utils/cache/lsyscache.c:1017 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "приведение типа %s к типу %s не существует" -#: utils/cache/lsyscache.c:2845 utils/cache/lsyscache.c:2878 -#: utils/cache/lsyscache.c:2911 utils/cache/lsyscache.c:2944 +#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 +#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 #, c-format msgid "type %s is only a shell" msgstr "тип %s является пустышкой" -#: utils/cache/lsyscache.c:2850 +#: utils/cache/lsyscache.c:2892 #, c-format msgid "no input function available for type %s" msgstr "для типа %s нет функции ввода" -#: utils/cache/lsyscache.c:2883 +#: utils/cache/lsyscache.c:2925 #, c-format msgid "no output function available for type %s" msgstr "для типа %s нет функции вывода" -#: utils/cache/partcache.c:219 +#: utils/cache/partcache.c:216 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d for " @@ -29246,56 +30619,56 @@ msgstr "" "в классе операторов \"%s\" метода доступа %s нет опорной функции %d для типа " "%s" -#: utils/cache/plancache.c:724 +#: utils/cache/plancache.c:747 #, c-format msgid "cached plan must not change result type" msgstr "в кешированном плане не должен изменяться тип результата" -#: utils/cache/relcache.c:3741 +#: utils/cache/relcache.c:3801 #, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" msgstr "" "значение relfilenumber для кучи не задано в режиме двоичного обновления" -#: utils/cache/relcache.c:3749 +#: utils/cache/relcache.c:3809 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "" "неожиданный запрос нового значения relfilenumber в режиме двоичного " "обновления" -#: utils/cache/relcache.c:6495 +#: utils/cache/relcache.c:6539 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "создать файл инициализации для кеша отношений \"%s\" не удалось: %m" -#: utils/cache/relcache.c:6497 +#: utils/cache/relcache.c:6541 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Продолжаем всё равно, хотя что-то не так." -#: utils/cache/relcache.c:6819 +#: utils/cache/relcache.c:6871 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "не удалось стереть файл кеша \"%s\": %m" -#: utils/cache/relmapper.c:597 +#: utils/cache/relmapper.c:596 #, c-format msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "" "выполнить PREPARE для транзакции, изменившей сопоставление отношений, нельзя" -#: utils/cache/relmapper.c:853 +#: utils/cache/relmapper.c:852 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "файл сопоставления отношений \"%s\" содержит неверные данные" -#: utils/cache/relmapper.c:863 +#: utils/cache/relmapper.c:862 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "ошибка контрольной суммы в файле сопоставления отношений \"%s\"" -#: utils/cache/typcache.c:1809 utils/fmgr/funcapi.c:574 +#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "тип записи не зарегистрирован" @@ -29310,102 +30683,102 @@ msgstr "ЛОВУШКА: Исключительное условие: невер msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" msgstr "ЛОВУШКА: нарушение Assert(\"%s\"), файл: \"%s\", строка: %d, PID: %d\n" -#: utils/error/elog.c:416 +#: utils/error/elog.c:415 #, c-format msgid "error occurred before error message processing is available\n" msgstr "произошла ошибка до готовности подсистемы обработки сообщений\n" -#: utils/error/elog.c:2096 +#: utils/error/elog.c:2134 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "открыть файл \"%s\" как stderr не удалось: %m" -#: utils/error/elog.c:2109 +#: utils/error/elog.c:2147 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "открыть файл \"%s\" как stdout не удалось: %m" -#: utils/error/elog.c:2145 +#: utils/error/elog.c:2183 #, c-format -msgid "invalid character" -msgstr "неверный символ" +msgid "Invalid character" +msgstr "Недопустимый символ" -#: utils/error/elog.c:2851 utils/error/elog.c:2878 utils/error/elog.c:2894 +#: utils/error/elog.c:2889 utils/error/elog.c:2916 utils/error/elog.c:2932 msgid "[unknown]" msgstr "[н/д]" -#: utils/error/elog.c:3167 utils/error/elog.c:3488 utils/error/elog.c:3595 +#: utils/error/elog.c:3202 utils/error/elog.c:3526 utils/error/elog.c:3633 msgid "missing error text" msgstr "отсутствует текст ошибки" -#: utils/error/elog.c:3170 utils/error/elog.c:3173 +#: utils/error/elog.c:3205 utils/error/elog.c:3208 #, c-format msgid " at character %d" msgstr " (символ %d)" -#: utils/error/elog.c:3183 utils/error/elog.c:3190 +#: utils/error/elog.c:3218 utils/error/elog.c:3225 msgid "DETAIL: " msgstr "ПОДРОБНОСТИ: " -#: utils/error/elog.c:3197 +#: utils/error/elog.c:3232 msgid "HINT: " msgstr "ПОДСКАЗКА: " -#: utils/error/elog.c:3204 +#: utils/error/elog.c:3239 msgid "QUERY: " msgstr "ЗАПРОС: " -#: utils/error/elog.c:3211 +#: utils/error/elog.c:3246 msgid "CONTEXT: " msgstr "КОНТЕКСТ: " -#: utils/error/elog.c:3221 +#: utils/error/elog.c:3256 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "ПОЛОЖЕНИЕ: %s, %s:%d\n" -#: utils/error/elog.c:3228 +#: utils/error/elog.c:3263 #, c-format msgid "LOCATION: %s:%d\n" msgstr "ПОЛОЖЕНИЕ: %s:%d\n" -#: utils/error/elog.c:3235 +#: utils/error/elog.c:3270 msgid "BACKTRACE: " msgstr "СТЕК: " -#: utils/error/elog.c:3247 +#: utils/error/elog.c:3282 msgid "STATEMENT: " msgstr "ОПЕРАТОР: " -#: utils/error/elog.c:3640 +#: utils/error/elog.c:3678 msgid "DEBUG" msgstr "ОТЛАДКА" -#: utils/error/elog.c:3644 +#: utils/error/elog.c:3682 msgid "LOG" msgstr "СООБЩЕНИЕ" -#: utils/error/elog.c:3647 +#: utils/error/elog.c:3685 msgid "INFO" msgstr "ИНФОРМАЦИЯ" -#: utils/error/elog.c:3650 +#: utils/error/elog.c:3688 msgid "NOTICE" msgstr "ЗАМЕЧАНИЕ" -#: utils/error/elog.c:3654 +#: utils/error/elog.c:3692 msgid "WARNING" msgstr "ПРЕДУПРЕЖДЕНИЕ" -#: utils/error/elog.c:3657 +#: utils/error/elog.c:3695 msgid "ERROR" msgstr "ОШИБКА" -#: utils/error/elog.c:3660 +#: utils/error/elog.c:3698 msgid "FATAL" msgstr "ВАЖНО" -#: utils/error/elog.c:3663 +#: utils/error/elog.c:3701 msgid "PANIC" msgstr "ПАНИКА" @@ -29478,22 +30851,22 @@ msgstr "Отличительный блок имеет неверную длин msgid "incompatible library \"%s\": magic block mismatch" msgstr "несовместимая библиотека \"%s\": несоответствие отличительного блока" -#: utils/fmgr/dfmgr.c:492 +#: utils/fmgr/dfmgr.c:475 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "доступ к библиотеке \"%s\" не разрешён" -#: utils/fmgr/dfmgr.c:518 +#: utils/fmgr/dfmgr.c:501 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "неправильный макрос в пути динамической библиотеки: %s" -#: utils/fmgr/dfmgr.c:558 +#: utils/fmgr/dfmgr.c:541 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "параметр dynamic_library_path содержит компонент нулевой длины" -#: utils/fmgr/dfmgr.c:577 +#: utils/fmgr/dfmgr.c:560 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "" @@ -29524,14 +30897,14 @@ msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "" "версия API (%d), выданная информационной функцией \"%s\", не поддерживается" -#: utils/fmgr/fmgr.c:2080 +#: utils/fmgr/fmgr.c:2109 #, c-format msgid "operator class options info is absent in function call context" msgstr "" "информация о параметрах класса операторов отсутствует в контексте вызова " "функции" -#: utils/fmgr/fmgr.c:2147 +#: utils/fmgr/fmgr.c:2176 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "функция языковой проверки %u вызвана для языка %u (а не %u)" @@ -29551,11 +30924,6 @@ msgid "argument declared %s does not contain a range type but type %s" msgstr "" "аргумент, объявленный как \"%s\", содержит не диапазонный тип, а тип %s" -#: utils/fmgr/funcapi.c:725 -#, c-format -msgid "could not find multirange type for data type %s" -msgstr "тип мультидиапазона для типа данных %s не найден" - #: utils/fmgr/funcapi.c:1929 utils/fmgr/funcapi.c:1961 #, c-format msgid "number of aliases does not match number of columns" @@ -29571,105 +30939,100 @@ msgstr "псевдоним столбца не указан" msgid "could not determine row description for function returning record" msgstr "не удалось определить описание строки для функции, возвращающей запись" -#: utils/init/miscinit.c:346 +#: utils/init/miscinit.c:353 #, c-format msgid "data directory \"%s\" does not exist" msgstr "каталог данных \"%s\" не существует" -#: utils/init/miscinit.c:351 +#: utils/init/miscinit.c:358 #, c-format msgid "could not read permissions of directory \"%s\": %m" -msgstr "не удалось считать права на каталог \"%s\": %m" +msgstr "не удалось прочитать права на каталог \"%s\": %m" -#: utils/init/miscinit.c:359 +#: utils/init/miscinit.c:366 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "указанный каталог данных \"%s\" не существует" -#: utils/init/miscinit.c:375 +#: utils/init/miscinit.c:382 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "владелец каталога данных \"%s\" определён неверно" -#: utils/init/miscinit.c:377 +#: 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:395 +#: utils/init/miscinit.c:402 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "для каталога данных \"%s\" установлены неправильные права доступа" -#: utils/init/miscinit.c:397 +#: 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:455 +#: utils/init/miscinit.c:462 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: utils/init/miscinit.c:692 utils/misc/guc.c:3557 +#: utils/init/miscinit.c:720 utils/misc/guc.c:3650 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" "параметр \"%s\" нельзя задать в рамках операции с ограничениями по " "безопасности" -#: utils/init/miscinit.c:764 +#: utils/init/miscinit.c:807 #, c-format msgid "role with OID %u does not exist" msgstr "роль с OID %u не существует" -#: utils/init/miscinit.c:794 +#: utils/init/miscinit.c:853 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "для роли \"%s\" вход запрещён" -#: utils/init/miscinit.c:812 +#: utils/init/miscinit.c:874 #, c-format msgid "too many connections for role \"%s\"" msgstr "слишком много подключений для роли \"%s\"" -#: utils/init/miscinit.c:919 -#, c-format -msgid "permission denied to set session authorization" -msgstr "нет прав для смены объекта авторизации в сеансе" - -#: utils/init/miscinit.c:1002 +#: utils/init/miscinit.c:1045 #, c-format msgid "invalid role OID: %u" msgstr "неверный OID роли: %u" -#: utils/init/miscinit.c:1149 +#: utils/init/miscinit.c:1192 #, c-format msgid "database system is shut down" msgstr "система БД выключена" -#: utils/init/miscinit.c:1236 +#: utils/init/miscinit.c:1279 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "не удалось создать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1250 +#: utils/init/miscinit.c:1293 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "не удалось открыть файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1257 +#: utils/init/miscinit.c:1300 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "не удалось прочитать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1266 +#: utils/init/miscinit.c:1309 #, c-format msgid "lock file \"%s\" is empty" msgstr "файл блокировки \"%s\" пуст" -#: utils/init/miscinit.c:1267 +#: utils/init/miscinit.c:1310 #, c-format msgid "" "Either another server is starting, or the lock file is the remnant of a " @@ -29678,38 +31041,38 @@ msgstr "" "Либо сейчас запускается другой сервер, либо этот файл остался в результате " "сбоя при предыдущем запуске." -#: utils/init/miscinit.c:1311 +#: utils/init/miscinit.c:1354 #, c-format msgid "lock file \"%s\" already exists" msgstr "файл блокировки \"%s\" уже существует" -#: utils/init/miscinit.c:1315 +#: 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:1317 +#: 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:1320 +#: 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:1322 +#: 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:1373 +#: utils/init/miscinit.c:1416 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "не удалось стереть старый файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1375 +#: utils/init/miscinit.c:1418 #, c-format msgid "" "The file seems accidentally left over, but it could not be removed. Please " @@ -29718,48 +31081,48 @@ msgstr "" "Кажется, файл сохранился по ошибке, но удалить его не получилось. " "Пожалуйста, удалите файл вручную и повторите попытку." -#: utils/init/miscinit.c:1412 utils/init/miscinit.c:1426 -#: utils/init/miscinit.c:1437 +#: 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:1548 utils/init/miscinit.c:1690 utils/misc/guc.c:5597 +#: 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:1678 +#: utils/init/miscinit.c:1721 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "не удалось открыть файл \"%s\": %m; ошибка игнорируется" -#: utils/init/miscinit.c:1703 +#: 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:1742 utils/init/miscinit.c:1758 +#: 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:1744 +#: utils/init/miscinit.c:1787 #, c-format msgid "File \"%s\" is missing." msgstr "Файл \"%s\" отсутствует." -#: utils/init/miscinit.c:1760 +#: utils/init/miscinit.c:1803 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Файл \"%s\" содержит неприемлемые данные." -#: utils/init/miscinit.c:1762 +#: utils/init/miscinit.c:1805 #, c-format msgid "You might need to initdb." msgstr "Возможно, вам нужно выполнить initdb." -#: utils/init/miscinit.c:1770 +#: utils/init/miscinit.c:1813 #, c-format msgid "" "The data directory was initialized by PostgreSQL version %s, which is not " @@ -29844,17 +31207,17 @@ msgstr "доступ к базе \"%s\" запрещён" 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 " @@ -29863,7 +31226,7 @@ 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." @@ -29871,7 +31234,7 @@ 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 " @@ -29880,12 +31243,12 @@ msgstr "" "База данных была инициализирована с параметром LC_CTYPE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:475 +#: utils/init/postinit.c:493 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "несовпадение версии для правила сортировки в базе данных \"%s\"" -#: utils/init/postinit.c:477 +#: utils/init/postinit.c:495 #, c-format msgid "" "The database was created using collation version %s, but the operating " @@ -29894,7 +31257,7 @@ msgstr "" "База данных была создана с версией правила сортировки %s, но операционная " "система предоставляет версию %s." -#: utils/init/postinit.c:480 +#: utils/init/postinit.c:498 #, c-format msgid "" "Rebuild all objects in this database that use the default collation and run " @@ -29905,31 +31268,31 @@ msgstr "" "сортировки, и выполните ALTER DATABASE %s REFRESH COLLATION VERSION, либо " "соберите PostgreSQL с правильной версией библиотеки." -#: utils/init/postinit.c:891 +#: utils/init/postinit.c:904 #, c-format msgid "no roles are defined in this database system" msgstr "в этой системе баз данных не создано ни одной роли" -#: utils/init/postinit.c:892 +#: utils/init/postinit.c:905 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Вы должны немедленно выполнить CREATE USER \"%s\" CREATEUSER;." -#: utils/init/postinit.c:928 +#: utils/init/postinit.c:942 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "" "нужно быть суперпользователем, чтобы подключиться в режиме двоичного " "обновления" -#: utils/init/postinit.c:949 +#: 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:955 +#: utils/init/postinit.c:968 #, c-format msgid "" "remaining connection slots are reserved for roles with privileges of the " @@ -29938,32 +31301,32 @@ msgstr "" "оставшиеся слоты подключений зарезервированы для подключений ролей с правами " "роли \"%s\"" -#: utils/init/postinit.c:967 +#: utils/init/postinit.c:980 #, c-format msgid "permission denied to start WAL sender" msgstr "нет прав для запуска процесса, передающего WAL" -#: utils/init/postinit.c:968 +#: utils/init/postinit.c:981 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." msgstr "Только роли с атрибутом %s могут запускать процессы, передающие WAL." -#: utils/init/postinit.c:1086 +#: utils/init/postinit.c:1099 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Похоже, она только что была удалена или переименована." -#: utils/init/postinit.c:1090 +#: utils/init/postinit.c:1103 #, c-format msgid "database %u does not exist" msgstr "база данных %u не существует" -#: utils/init/postinit.c:1099 +#: utils/init/postinit.c:1112 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "подключиться к некорректной базе \"%s\" нельзя" -#: utils/init/postinit.c:1159 +#: utils/init/postinit.c:1173 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Подкаталог базы данных \"%s\" отсутствует." @@ -29990,48 +31353,48 @@ msgstr "неожиданный ID кодировки %d для наборов с msgid "unexpected encoding ID %d for WIN character sets" msgstr "неожиданный ID кодировки %d для наборов символов WIN" -#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "преобразование %s <-> %s не поддерживается" -#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 -#: utils/mb/mbutils.c:843 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Строка из %d байт слишком длинна для преобразования кодировки." -#: utils/mb/mbutils.c:569 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "неверное имя исходной кодировки: \"%s\"" -#: utils/mb/mbutils.c:574 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "неверное имя кодировки результата: \"%s\"" -#: utils/mb/mbutils.c:714 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "недопустимое байтовое значение для кодировки \"%s\": 0x%02x" -#: utils/mb/mbutils.c:878 +#: utils/mb/mbutils.c:877 #, c-format msgid "invalid Unicode code point" msgstr "неверный код Unicode" -#: utils/mb/mbutils.c:1204 +#: utils/mb/mbutils.c:1201 #, c-format msgid "bind_textdomain_codeset failed" msgstr "ошибка в bind_textdomain_codeset" -#: utils/mb/mbutils.c:1725 +#: utils/mb/mbutils.c:1718 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "неверная последовательность байт для кодировки \"%s\": %s" -#: utils/mb/mbutils.c:1758 +#: utils/mb/mbutils.c:1751 #, c-format msgid "" "character with byte sequence %s in encoding \"%s\" has no equivalent in " @@ -30050,14 +31413,14 @@ msgstr "пустое имя каталога конфигурации: \"%s\"" msgid "could not open configuration directory \"%s\": %m" msgstr "открыть каталог конфигурации \"%s\" не удалось: %m" -#: utils/misc/guc.c:115 +#: utils/misc/guc.c:122 msgid "" "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "" "Допустимые единицы измерения для этого параметра: \"B\", \"kB\", \"MB\", " "\"GB\" и \"TB\"." -#: utils/misc/guc.c:152 +#: utils/misc/guc.c:159 msgid "" "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", " "and \"d\"." @@ -30065,36 +31428,36 @@ msgstr "" "Допустимые единицы измерения для этого параметра: \"us\", \"ms\", \"s\", " "\"min\", \"h\" и \"d\"." -#: utils/misc/guc.c:421 +#: utils/misc/guc.c:430 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "нераспознанный параметр конфигурации \"%s\" в файле \"%s\", строке %d" -#: utils/misc/guc.c:461 utils/misc/guc.c:3411 utils/misc/guc.c:3655 -#: utils/misc/guc.c:3753 utils/misc/guc.c:3851 utils/misc/guc.c:3975 -#: utils/misc/guc.c:4078 +#: 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\" изменяется только при перезапуске сервера" -#: utils/misc/guc.c:497 +#: utils/misc/guc.c:506 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "" "параметр \"%s\" удалён из файла конфигурации, он принимает значение по " "умолчанию" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:571 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "параметр \"%s\" принял значение \"%s\"" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:613 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "файл конфигурации \"%s\" содержит ошибки" -#: utils/misc/guc.c:609 +#: utils/misc/guc.c:618 #, c-format msgid "" "configuration file \"%s\" contains errors; unaffected changes were applied" @@ -30102,17 +31465,17 @@ msgstr "" "файл конфигурации \"%s\" содержит ошибки; были применены не зависимые " "изменения" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:623 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "файл конфигурации \"%s\" содержит ошибки; изменения не были применены" -#: utils/misc/guc.c:1211 utils/misc/guc.c:1227 +#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "неверное имя параметра конфигурации: \"%s\"" -#: utils/misc/guc.c:1213 +#: utils/misc/guc.c:1141 #, c-format msgid "" "Custom parameter names must be two or more simple identifiers separated by " @@ -30121,22 +31484,22 @@ msgstr "" "Имена нестандартных параметров должны состоять из двух или более простых " "идентификаторов, разделённых точками." -#: utils/misc/guc.c:1229 +#: utils/misc/guc.c:1157 #, c-format msgid "\"%s\" is a reserved prefix." msgstr "\"%s\" — зарезервированный префикс." -#: utils/misc/guc.c:1243 +#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "нераспознанный параметр конфигурации: \"%s\"" -#: utils/misc/guc.c:1767 +#: utils/misc/guc.c:1802 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: ошибка доступа к каталогу \"%s\": %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: ошибка при обращении к каталогу \"%s\": %m\n" -#: utils/misc/guc.c:1772 +#: utils/misc/guc.c:1806 #, c-format msgid "" "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" @@ -30144,7 +31507,7 @@ msgstr "" "Запустите initdb или pg_basebackup для инициализации каталога данных " "PostgreSQL.\n" -#: utils/misc/guc.c:1796 +#: utils/misc/guc.c:1830 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -30155,12 +31518,12 @@ msgstr "" "Вы должны указать его расположение в параметре --config-file или -D, либо " "установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:1819 +#: utils/misc/guc.c:1853 #, c-format -msgid "%s: could not access the server configuration file \"%s\": %s\n" -msgstr "%s не может открыть файл конфигурации сервера \"%s\": %s\n" +msgid "%s: could not access the server configuration file \"%s\": %m\n" +msgstr "%s не может открыть файл конфигурации сервера \"%s\": %m\n" -#: utils/misc/guc.c:1847 +#: utils/misc/guc.c:1881 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -30171,7 +31534,7 @@ msgstr "" "Их расположение можно задать как значение \"data_directory\" в файле \"%s\", " "либо передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:1899 +#: utils/misc/guc.c:1933 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -30182,7 +31545,7 @@ msgstr "" "Его расположение можно задать как значение \"hba_file\" в файле \"%s\", либо " "передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:1930 +#: utils/misc/guc.c:1964 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -30193,124 +31556,138 @@ msgstr "" "Его расположение можно задать как значение \"ident_file\" в файле \"%s\", " "либо передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:2896 +#: utils/misc/guc.c:2943 msgid "Value exceeds integer range." msgstr "Значение выходит за рамки целых чисел." -#: utils/misc/guc.c:3132 +#: utils/misc/guc.c:3185 #, c-format -msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" -msgstr "%d%s%s вне диапазона, допустимого для параметра \"%s\" (%d .. %d)" +msgid "" +"%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" +msgstr "" +"%d%s%s вне диапазона, допустимого для параметра \"%s\" (%d%s%s .. %d%s%s)" -#: utils/misc/guc.c:3168 +#: utils/misc/guc.c:3226 #, c-format -msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" -msgstr "%g%s%s вне диапазона, допустимого для параметра \"%s\" (%g .. %g)" +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:3369 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:3388 utils/misc/guc.c:4539 +#: utils/misc/guc.c:3481 utils/misc/guc.c:4696 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "параметр \"%s\" нельзя изменить" -#: utils/misc/guc.c:3421 +#: utils/misc/guc.c:3514 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "параметр \"%s\" нельзя изменить сейчас" -#: utils/misc/guc.c:3448 utils/misc/guc.c:3510 utils/misc/guc.c:4515 -#: utils/misc/guc.c:6563 +#: 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:3490 +#: utils/misc/guc.c:3583 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "параметр \"%s\" нельзя задать после установления соединения" -#: utils/misc/guc.c:3549 +#: utils/misc/guc.c:3642 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "" "параметр \"%s\" нельзя задать в функции с контекстом безопасности " "определившего" -#: utils/misc/guc.c:3570 +#: utils/misc/guc.c:3663 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "параметр \"%s\" нельзя сбросить" -#: utils/misc/guc.c:3577 +#: utils/misc/guc.c:3670 #, c-format msgid "parameter \"%s\" cannot be set locally in functions" msgstr "параметр \"%s\" нельзя задавать локально в функциях" -#: utils/misc/guc.c:4221 utils/misc/guc.c:4268 utils/misc/guc.c:5282 +#: 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:4222 utils/misc/guc.c:4269 utils/misc/guc.c:5283 +#: 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:4505 +#: utils/misc/guc.c:4629 +#, c-format +msgid "ALTER SYSTEM is not allowed in this environment" +msgstr "команда ALTER SYSTEM запрещена в этом окружении" + +#: 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:4571 +#: 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:4617 +#: utils/misc/guc.c:4785 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "не удалось разобрать содержимое файла \"%s\"" -#: utils/misc/guc.c:4799 +#: utils/misc/guc.c:4967 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "попытка переопределить параметр \"%s\"" -#: utils/misc/guc.c:5138 +#: utils/misc/guc.c:5306 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "неверное имя параметра конфигурации: \"%s\", он удаляется" -#: utils/misc/guc.c:5140 +#: utils/misc/guc.c:5308 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "Теперь \"%s\" — зарезервированный префикс." -#: utils/misc/guc.c:6017 +#: utils/misc/guc.c:6179 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "при назначении параметру \"%s\" значения \"%s\"" -#: utils/misc/guc.c:6186 +#: utils/misc/guc.c:6348 #, c-format msgid "parameter \"%s\" could not be set" msgstr "параметр \"%s\" нельзя установить" -#: utils/misc/guc.c:6276 +#: utils/misc/guc.c:6438 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "не удалось разобрать значение параметра \"%s\"" -#: utils/misc/guc.c:6695 +#: 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" @@ -30326,59 +31703,59 @@ msgstr "SET %s принимает только один аргумент" msgid "SET requires parameter name" msgstr "SET требует имя параметра" -#: utils/misc/guc_tables.c:662 +#: utils/misc/guc_tables.c:676 msgid "Ungrouped" msgstr "Разное" -#: utils/misc/guc_tables.c:664 +#: utils/misc/guc_tables.c:677 msgid "File Locations" msgstr "Расположения файлов" -#: utils/misc/guc_tables.c:666 +#: utils/misc/guc_tables.c:678 msgid "Connections and Authentication / Connection Settings" msgstr "Подключения и аутентификация / Параметры подключений" -#: utils/misc/guc_tables.c:668 +#: utils/misc/guc_tables.c:679 msgid "Connections and Authentication / TCP Settings" msgstr "Подключения и аутентификация / Параметры TCP" -#: utils/misc/guc_tables.c:670 +#: utils/misc/guc_tables.c:680 msgid "Connections and Authentication / Authentication" msgstr "Подключения и аутентификация / Аутентификация" -#: utils/misc/guc_tables.c:672 +#: utils/misc/guc_tables.c:681 msgid "Connections and Authentication / SSL" msgstr "Подключения и аутентификация / SSL" -#: utils/misc/guc_tables.c:674 +#: utils/misc/guc_tables.c:682 msgid "Resource Usage / Memory" msgstr "Использование ресурсов / Память" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:683 msgid "Resource Usage / Disk" msgstr "Использование ресурсов / Диск" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:684 msgid "Resource Usage / Kernel Resources" msgstr "Использование ресурсов / Ресурсы ядра" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:685 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Использование ресурсов / Задержка очистки по стоимости" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:686 msgid "Resource Usage / Background Writer" msgstr "Использование ресурсов / Фоновая запись" -#: utils/misc/guc_tables.c:684 +#: utils/misc/guc_tables.c:687 msgid "Resource Usage / Asynchronous Behavior" msgstr "Использование ресурсов / Асинхронное поведение" -#: utils/misc/guc_tables.c:686 +#: utils/misc/guc_tables.c:688 msgid "Write-Ahead Log / Settings" msgstr "Журнал WAL / Параметры" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:689 msgid "Write-Ahead Log / Checkpoints" msgstr "Журнал WAL / Контрольные точки" @@ -30386,210 +31763,214 @@ msgstr "Журнал WAL / Контрольные точки" msgid "Write-Ahead Log / Archiving" msgstr "Журнал WAL / Архивация" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:691 msgid "Write-Ahead Log / Recovery" msgstr "Журнал WAL / Восстановление" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:692 msgid "Write-Ahead Log / Archive Recovery" msgstr "Журнал WAL / Восстановление из архива" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:693 msgid "Write-Ahead Log / Recovery Target" msgstr "Журнал WAL / Цель восстановления" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:694 +msgid "Write-Ahead Log / Summarization" +msgstr "Журнал WAL / Обобщение" + +#: utils/misc/guc_tables.c:695 msgid "Replication / Sending Servers" msgstr "Репликация / Передающие серверы" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:696 msgid "Replication / Primary Server" msgstr "Репликация / Ведущий сервер" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:697 msgid "Replication / Standby Servers" msgstr "Репликация / Резервные серверы" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:698 msgid "Replication / Subscribers" msgstr "Репликация / Подписчики" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:699 msgid "Query Tuning / Planner Method Configuration" msgstr "Настройка запросов / Конфигурация методов планировщика" -#: utils/misc/guc_tables.c:708 +#: utils/misc/guc_tables.c:700 msgid "Query Tuning / Planner Cost Constants" msgstr "Настройка запросов / Константы стоимости для планировщика" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:701 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Настройка запросов / Генетический оптимизатор запросов" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:702 msgid "Query Tuning / Other Planner Options" msgstr "Настройка запросов / Другие параметры планировщика" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:703 msgid "Reporting and Logging / Where to Log" msgstr "Отчёты и протоколы / Куда записывать" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:704 msgid "Reporting and Logging / When to Log" msgstr "Отчёты и протоколы / Когда записывать" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:705 msgid "Reporting and Logging / What to Log" msgstr "Отчёты и протоколы / Что записывать" -#: utils/misc/guc_tables.c:720 +#: utils/misc/guc_tables.c:706 msgid "Reporting and Logging / Process Title" msgstr "Отчёты и протоколы / Заголовок процесса" -#: utils/misc/guc_tables.c:722 +#: utils/misc/guc_tables.c:707 msgid "Statistics / Monitoring" msgstr "Статистика / Мониторинг" -#: utils/misc/guc_tables.c:724 +#: utils/misc/guc_tables.c:708 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "Статистика / Накопительная статистика по запросам и индексам" -#: utils/misc/guc_tables.c:726 +#: utils/misc/guc_tables.c:709 msgid "Autovacuum" msgstr "Автоочистка" -#: utils/misc/guc_tables.c:728 +#: utils/misc/guc_tables.c:710 msgid "Client Connection Defaults / Statement Behavior" msgstr "Параметры клиентских подключений по умолчанию / Поведение команд" -#: utils/misc/guc_tables.c:730 +#: utils/misc/guc_tables.c:711 msgid "Client Connection Defaults / Locale and Formatting" msgstr "" "Параметры клиентских подключений по умолчанию / Языковая среда и форматы" -#: utils/misc/guc_tables.c:732 +#: utils/misc/guc_tables.c:712 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "" "Параметры клиентских подключений по умолчанию / Предзагрузка разделяемых " "библиотек" -#: utils/misc/guc_tables.c:734 +#: utils/misc/guc_tables.c:713 msgid "Client Connection Defaults / Other Defaults" msgstr "Параметры клиентских подключений по умолчанию / Другие параметры" -#: utils/misc/guc_tables.c:736 +#: utils/misc/guc_tables.c:714 msgid "Lock Management" msgstr "Управление блокировками" -#: utils/misc/guc_tables.c:738 +#: utils/misc/guc_tables.c:715 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Версия и совместимость платформ / Предыдущие версии PostgreSQL" -#: utils/misc/guc_tables.c:740 +#: utils/misc/guc_tables.c:716 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Версия и совместимость платформ / Другие платформы и клиенты" -#: utils/misc/guc_tables.c:742 +#: utils/misc/guc_tables.c:717 msgid "Error Handling" msgstr "Обработка ошибок" -#: utils/misc/guc_tables.c:744 +#: utils/misc/guc_tables.c:718 msgid "Preset Options" msgstr "Предопределённые параметры" -#: utils/misc/guc_tables.c:746 +#: utils/misc/guc_tables.c:719 msgid "Customized Options" msgstr "Внесистемные параметры" -#: utils/misc/guc_tables.c:748 +#: utils/misc/guc_tables.c:720 msgid "Developer Options" msgstr "Параметры для разработчиков" -#: utils/misc/guc_tables.c:805 +#: utils/misc/guc_tables.c:775 msgid "Enables the planner's use of sequential-scan plans." msgstr "" "Разрешает планировщику использовать планы последовательного сканирования." -#: utils/misc/guc_tables.c:815 +#: utils/misc/guc_tables.c:785 msgid "Enables the planner's use of index-scan plans." msgstr "Разрешает планировщику использовать планы сканирования по индексу." -#: utils/misc/guc_tables.c:825 +#: utils/misc/guc_tables.c:795 msgid "Enables the planner's use of index-only-scan plans." msgstr "Разрешает планировщику использовать планы сканирования только индекса." -#: utils/misc/guc_tables.c:835 +#: utils/misc/guc_tables.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "" "Разрешает планировщику использовать планы сканирования по битовой карте." -#: utils/misc/guc_tables.c:845 +#: utils/misc/guc_tables.c:815 msgid "Enables the planner's use of TID scan plans." msgstr "Разрешает планировщику использовать планы сканирования TID." -#: utils/misc/guc_tables.c:855 +#: utils/misc/guc_tables.c:825 msgid "Enables the planner's use of explicit sort steps." msgstr "Разрешает планировщику использовать шаги с явной сортировкой." -#: utils/misc/guc_tables.c:865 +#: utils/misc/guc_tables.c:835 msgid "Enables the planner's use of incremental sort steps." msgstr "" "Разрешает планировщику использовать шаги с инкрементальной сортировкой." -#: utils/misc/guc_tables.c:875 +#: utils/misc/guc_tables.c:845 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Разрешает планировщику использовать планы агрегирования по хешу." -#: utils/misc/guc_tables.c:885 +#: utils/misc/guc_tables.c:855 msgid "Enables the planner's use of materialization." msgstr "Разрешает планировщику использовать материализацию." # well-spelled: мемоизацию -#: utils/misc/guc_tables.c:895 +#: utils/misc/guc_tables.c:865 msgid "Enables the planner's use of memoization." msgstr "Разрешает планировщику использовать мемоизацию." -#: utils/misc/guc_tables.c:905 +#: utils/misc/guc_tables.c:875 msgid "Enables the planner's use of nested-loop join plans." msgstr "" "Разрешает планировщику использовать планы соединения с вложенными циклами." -#: utils/misc/guc_tables.c:915 +#: utils/misc/guc_tables.c:885 msgid "Enables the planner's use of merge join plans." msgstr "Разрешает планировщику использовать планы соединения слиянием." -#: utils/misc/guc_tables.c:925 +#: utils/misc/guc_tables.c:895 msgid "Enables the planner's use of hash join plans." msgstr "Разрешает планировщику использовать планы соединения по хешу." -#: utils/misc/guc_tables.c:935 +#: utils/misc/guc_tables.c:905 msgid "Enables the planner's use of gather merge plans." msgstr "Разрешает планировщику использовать планы сбора слиянием." -#: utils/misc/guc_tables.c:945 +#: utils/misc/guc_tables.c:915 msgid "Enables partitionwise join." msgstr "Включает соединения с учётом секционирования." -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:925 msgid "Enables partitionwise aggregation and grouping." msgstr "Включает агрегирование и группировку с учётом секционирования." -#: utils/misc/guc_tables.c:965 +#: utils/misc/guc_tables.c:935 msgid "Enables the planner's use of parallel append plans." msgstr "Разрешает планировщику использовать планы параллельного добавления." -#: utils/misc/guc_tables.c:975 +#: utils/misc/guc_tables.c:945 msgid "Enables the planner's use of parallel hash plans." msgstr "" "Разрешает планировщику использовать планы параллельного соединения по хешу." -#: utils/misc/guc_tables.c:985 +#: utils/misc/guc_tables.c:955 msgid "Enables plan-time and execution-time partition pruning." msgstr "" "Включает устранение секций во время планирования и во время выполнения " "запросов." -#: utils/misc/guc_tables.c:986 +#: 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." @@ -30597,7 +31978,7 @@ msgstr "" "Разрешает планировщику и исполнителю запросов сопоставлять границы секций с " "условиями в запросе и выделять отдельные секции для сканирования." -#: utils/misc/guc_tables.c:997 +#: 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." @@ -30605,7 +31986,7 @@ msgstr "" "Включает в планировщике возможность формировать планы, подающие ранее " "сортированные данные на вход агрегирующим функциям с ORDER BY / DISTINCT." -#: utils/misc/guc_tables.c:1000 +#: 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, " @@ -30616,49 +31997,66 @@ msgstr "" "данные. Когда этот параметр отключён, во время выполнения всегда неявно " "производится сортировка." -#: utils/misc/guc_tables.c:1012 +#: utils/misc/guc_tables.c:982 msgid "Enables the planner's use of async append plans." msgstr "Разрешает планировщику использовать планы асинхронного добавления." -#: utils/misc/guc_tables.c:1022 +#: utils/misc/guc_tables.c:992 +msgid "Enables reordering of GROUP BY keys." +msgstr "Включает переупорядочивание ключей GROUP BY." + +#: utils/misc/guc_tables.c:1002 msgid "Enables genetic query optimization." msgstr "Включает генетическую оптимизацию запросов." -#: utils/misc/guc_tables.c:1023 +#: utils/misc/guc_tables.c:1003 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Этот алгоритм пытается построить план без полного перебора." -#: utils/misc/guc_tables.c:1034 +#: utils/misc/guc_tables.c:1017 msgid "Shows whether the current user is a superuser." msgstr "Показывает, является ли текущий пользователь суперпользователем." -#: utils/misc/guc_tables.c:1044 +#: utils/misc/guc_tables.c:1032 +msgid "Allows running the ALTER SYSTEM command." +msgstr "Разрешает выполнять команду ALTER SYSTEM." + +#: 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:1043 msgid "Enables advertising the server via Bonjour." msgstr "Включает объявление сервера посредством Bonjour." -#: utils/misc/guc_tables.c:1053 +#: utils/misc/guc_tables.c:1052 msgid "Collects transaction commit time." msgstr "Записывает время фиксации транзакций." -#: utils/misc/guc_tables.c:1062 +#: utils/misc/guc_tables.c:1061 msgid "Enables SSL connections." msgstr "Разрешает SSL-подключения." -#: utils/misc/guc_tables.c:1071 -msgid "Controls whether ssl_passphrase_command is called during server reload." +#: utils/misc/guc_tables.c:1070 +msgid "" +"Controls whether \"ssl_passphrase_command\" is called during server reload." msgstr "" -"Определяет, будет ли вызываться ssl_passphrase_command при перезагрузке " +"Определяет, будет ли вызываться \"ssl_passphrase_command\" при перезагрузке " "сервера." -#: utils/misc/guc_tables.c:1080 +#: utils/misc/guc_tables.c:1079 msgid "Give priority to server ciphersuite order." msgstr "Назначает более приоритетным набор шифров сервера." -#: utils/misc/guc_tables.c:1089 +#: utils/misc/guc_tables.c:1088 msgid "Forces synchronization of updates to disk." msgstr "Принудительная запись изменений на диск." -#: utils/misc/guc_tables.c:1090 +#: 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 " @@ -30669,11 +32067,11 @@ msgstr "" "обеспечивающую физическую запись данных на диск. Тем самым гарантируется, " "что кластер БД придёт в целостное состояние после отказа ОС или оборудования." -#: utils/misc/guc_tables.c:1101 +#: utils/misc/guc_tables.c:1100 msgid "Continues processing after a checksum failure." msgstr "Продолжает обработку при ошибке контрольной суммы." -#: utils/misc/guc_tables.c:1102 +#: 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 " @@ -30687,34 +32085,34 @@ msgstr "" "что может привести к сбоям или другим серьёзным проблемам. Это имеет место, " "только если включён контроль целостности страниц." -#: utils/misc/guc_tables.c:1116 +#: utils/misc/guc_tables.c:1115 msgid "Continues processing past damaged page headers." msgstr "Продолжает обработку при повреждении заголовков страниц." -#: utils/misc/guc_tables.c:1117 +#: 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." +"error, aborting the current transaction. Setting \"zero_damaged_pages\" to " +"true causes the system to instead report a warning, zero out the damaged " +"page, and continue processing. This behavior will destroy data, namely all " +"the rows on the damaged page." msgstr "" "Обнаруживая повреждённый заголовок страницы, PostgreSQL обычно сообщает об " -"ошибке и прерывает текущую транзакцию. Но если zero_damaged_pages равен " +"ошибке и прерывает текущую транзакцию. Но если \"zero_damaged_pages\" равен " "true, система выдаст предупреждение, обнулит повреждённую страницу и " "продолжит работу. Это приведёт к потере данных, а именно строк в " "повреждённой странице." -#: utils/misc/guc_tables.c:1130 +#: utils/misc/guc_tables.c:1129 msgid "Continues recovery after an invalid pages failure." msgstr "" "Продолжает восстановление после ошибок, связанных с неправильными страницами." -#: utils/misc/guc_tables.c:1131 +#: 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 " +"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 " @@ -30722,19 +32120,19 @@ msgid "" msgstr "" "Обнаруживая в записях WAL ссылки на неправильные страницы во время " "восстановления, PostgreSQL выдаёт ошибку уровня ПАНИКА и прерывает " -"восстановление. Если ignore_invalid_pages равен true, система игнорирует " +"восстановление. Если \"ignore_invalid_pages\" равен true, система игнорирует " "такие некорректные ссылки (но всё же выдаёт предупреждение) и продолжает " "восстановление. Это может привести к краху сервера, потере данных, " "распространению или сокрытию повреждения данных и другим серьёзным " "проблемам. Данный параметр действует только при восстановлении или в режиме " "резервного сервера." -#: utils/misc/guc_tables.c:1149 +#: utils/misc/guc_tables.c:1148 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" "Запись полных страниц в WAL при первом изменении после контрольной точки." -#: utils/misc/guc_tables.c:1150 +#: 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 " @@ -30747,7 +32145,7 @@ msgstr "" "при первом изменении после контрольной точки, что позволяет полностью " "восстановить данные." -#: utils/misc/guc_tables.c:1163 +#: utils/misc/guc_tables.c:1162 msgid "" "Writes full pages to WAL when first modified after a checkpoint, even for a " "non-critical modification." @@ -30755,93 +32153,98 @@ msgstr "" "Запись полных страниц в WAL при первом изменении после контрольной точки, " "даже при некритическом изменении." -#: utils/misc/guc_tables.c:1173 +#: utils/misc/guc_tables.c:1172 msgid "Writes zeroes to new WAL files before first use." msgstr "Записывать нули в новые файлы WAL перед первым использованием." -#: utils/misc/guc_tables.c:1183 +#: utils/misc/guc_tables.c:1182 msgid "Recycles WAL files by renaming them." msgstr "Перерабатывать файлы WAL, производя переименование." -#: utils/misc/guc_tables.c:1193 +#: utils/misc/guc_tables.c:1192 msgid "Logs each checkpoint." msgstr "Протоколировать каждую контрольную точку." -#: utils/misc/guc_tables.c:1202 +#: utils/misc/guc_tables.c:1201 msgid "Logs each successful connection." msgstr "Протоколировать устанавливаемые соединения." -#: utils/misc/guc_tables.c:1211 +#: utils/misc/guc_tables.c:1210 +msgid "Logs details of pre-authentication connection handshake." +msgstr "" +"Протоколировать сообщения об установлении соединения до аутентификации." + +#: utils/misc/guc_tables.c:1220 msgid "Logs end of a session, including duration." msgstr "Протоколировать конец сеанса, отмечая длительность." -#: utils/misc/guc_tables.c:1220 +#: utils/misc/guc_tables.c:1229 msgid "Logs each replication command." msgstr "Протоколировать каждую команду репликации." -#: utils/misc/guc_tables.c:1229 +#: utils/misc/guc_tables.c:1238 msgid "Shows whether the running server has assertion checks enabled." msgstr "Показывает, включены ли проверки истинности на работающем сервере." -#: utils/misc/guc_tables.c:1240 +#: utils/misc/guc_tables.c:1249 msgid "Terminate session on any error." msgstr "Завершать сеансы при любой ошибке." -#: utils/misc/guc_tables.c:1249 +#: utils/misc/guc_tables.c:1258 msgid "Reinitialize server after backend crash." msgstr "Перезапускать систему БД при аварии серверного процесса." -#: utils/misc/guc_tables.c:1258 +#: utils/misc/guc_tables.c:1267 msgid "Remove temporary files after backend crash." msgstr "Удалять временные файлы после аварии обслуживающего процесса." -#: utils/misc/guc_tables.c:1268 +#: utils/misc/guc_tables.c:1277 msgid "Send SIGABRT not SIGQUIT to child processes after backend crash." msgstr "" "Посылать дочерним процессам SIGABRT, а не SIGQUIT при сбое серверного " "процесса." -#: utils/misc/guc_tables.c:1278 +#: utils/misc/guc_tables.c:1287 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "Посылать SIGABRT, а не SIGKILL зависшим дочерним процессам." -#: utils/misc/guc_tables.c:1289 +#: utils/misc/guc_tables.c:1298 msgid "Logs the duration of each completed SQL statement." msgstr "Протоколировать длительность каждого выполненного SQL-оператора." -#: utils/misc/guc_tables.c:1298 +#: utils/misc/guc_tables.c:1307 msgid "Logs each query's parse tree." msgstr "Протоколировать дерево разбора для каждого запроса." -#: utils/misc/guc_tables.c:1307 +#: utils/misc/guc_tables.c:1316 msgid "Logs each query's rewritten parse tree." msgstr "Протоколировать перезаписанное дерево разбора для каждого запроса." -#: utils/misc/guc_tables.c:1316 +#: utils/misc/guc_tables.c:1325 msgid "Logs each query's execution plan." msgstr "Протоколировать план выполнения каждого запроса." -#: utils/misc/guc_tables.c:1325 +#: utils/misc/guc_tables.c:1334 msgid "Indents parse and plan tree displays." msgstr "Отступы при отображении деревьев разбора и плана запросов." -#: utils/misc/guc_tables.c:1334 +#: utils/misc/guc_tables.c:1343 msgid "Writes parser performance statistics to the server log." msgstr "Запись статистики разбора запросов в протокол сервера." -#: utils/misc/guc_tables.c:1343 +#: utils/misc/guc_tables.c:1352 msgid "Writes planner performance statistics to the server log." msgstr "Запись статистики планирования в протокол сервера." -#: utils/misc/guc_tables.c:1352 +#: utils/misc/guc_tables.c:1361 msgid "Writes executor performance statistics to the server log." msgstr "Запись статистики выполнения запросов в протокол сервера." -#: utils/misc/guc_tables.c:1361 +#: utils/misc/guc_tables.c:1370 msgid "Writes cumulative performance statistics to the server log." msgstr "Запись общей статистики производительности в протокол сервера." -#: utils/misc/guc_tables.c:1371 +#: utils/misc/guc_tables.c:1380 msgid "" "Logs system resource usage statistics (memory and CPU) on various B-tree " "operations." @@ -30849,11 +32252,11 @@ msgstr "" "Фиксировать статистику использования системных ресурсов (памяти и " "процессора) при различных операциях с b-деревом." -#: utils/misc/guc_tables.c:1383 +#: utils/misc/guc_tables.c:1392 msgid "Collects information about executing commands." msgstr "Собирает информацию о выполняющихся командах." -#: utils/misc/guc_tables.c:1384 +#: 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." @@ -30861,70 +32264,70 @@ msgstr "" "Включает сбор информации о командах, выполняющихся во всех сеансах, а также " "время запуска команды." -#: utils/misc/guc_tables.c:1394 +#: utils/misc/guc_tables.c:1403 msgid "Collects statistics on database activity." msgstr "Собирает статистику активности в БД." -#: utils/misc/guc_tables.c:1403 +#: utils/misc/guc_tables.c:1412 msgid "Collects timing statistics for database I/O activity." msgstr "Собирает статистику по времени активности ввода/вывода." -#: utils/misc/guc_tables.c:1412 +#: utils/misc/guc_tables.c:1421 msgid "Collects timing statistics for WAL I/O activity." msgstr "Собирает статистику по времени активности ввода/вывода WAL." -#: utils/misc/guc_tables.c:1422 +#: utils/misc/guc_tables.c:1431 msgid "Updates the process title to show the active SQL command." msgstr "Выводит в заголовок процесса активную SQL-команду." -#: utils/misc/guc_tables.c:1423 +#: 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 "Отражает в заголовке процесса каждую SQL-команду, поступающую серверу." -#: utils/misc/guc_tables.c:1432 +#: utils/misc/guc_tables.c:1441 msgid "Starts the autovacuum subprocess." msgstr "Запускает подпроцесс автоочистки." -#: utils/misc/guc_tables.c:1442 +#: utils/misc/guc_tables.c:1451 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Генерирует отладочные сообщения для LISTEN и NOTIFY." -#: utils/misc/guc_tables.c:1454 +#: utils/misc/guc_tables.c:1463 msgid "Emits information about lock usage." msgstr "Выдавать информацию о применяемых блокировках." -#: utils/misc/guc_tables.c:1464 +#: utils/misc/guc_tables.c:1473 msgid "Emits information about user lock usage." msgstr "Выдавать информацию о применяемых пользовательских блокировках." -#: utils/misc/guc_tables.c:1474 +#: utils/misc/guc_tables.c:1483 msgid "Emits information about lightweight lock usage." msgstr "Выдавать информацию о применяемых лёгких блокировках." -#: utils/misc/guc_tables.c:1484 +#: utils/misc/guc_tables.c:1493 msgid "" "Dumps information about all current locks when a deadlock timeout occurs." msgstr "" "Выводить информацию обо всех текущих блокировках в случае тайм-аута при " "взаимоблокировке." -#: utils/misc/guc_tables.c:1496 +#: utils/misc/guc_tables.c:1505 msgid "Logs long lock waits." msgstr "Протоколировать длительные ожидания в блокировках." -#: utils/misc/guc_tables.c:1505 +#: utils/misc/guc_tables.c:1514 msgid "Logs standby recovery conflict waits." msgstr "" "Протоколировать события ожидания разрешения конфликтов при восстановлении на " "ведомом." -#: utils/misc/guc_tables.c:1514 +#: utils/misc/guc_tables.c:1523 msgid "Logs the host name in the connection logs." msgstr "Записывать имя узла в протоколы подключений." -#: utils/misc/guc_tables.c:1515 +#: 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 " @@ -30936,11 +32339,11 @@ msgstr "" "параметр, но учтите, что это может значительно повлиять на " "производительность." -#: utils/misc/guc_tables.c:1526 +#: 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:1527 +#: 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 " @@ -30952,10 +32355,6 @@ msgstr "" "совпадает с NULL, и false в противном случае. По правилам expr = NULL всегда " "должно возвращать null (неопределённость)." -#: utils/misc/guc_tables.c:1539 -msgid "Enables per-database user names." -msgstr "Включает связывание имён пользователей с базами данных." - #: utils/misc/guc_tables.c:1548 msgid "Sets the default read-only status of new transactions." msgstr "" @@ -31012,10 +32411,10 @@ msgstr "" #: utils/misc/guc_tables.c:1632 msgid "" -"Start a subprocess to capture stderr output and/or csvlogs into log files." +"Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." msgstr "" -"Запускает подпроцесс для чтения stderr и/или csv-файлов и записи в файлы " -"протоколов." +"Запускает подпроцесс для чтения stderr, csvlog и/или jsonlog и записи в " +"файлы протоколов." #: utils/misc/guc_tables.c:1641 msgid "Truncate existing log files of same name during log rotation." @@ -31071,11 +32470,17 @@ msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Определяет, включать ли транзакцию в целевую точку восстановления." #: utils/misc/guc_tables.c:1778 +msgid "Starts the WAL summarizer process to enable incremental backup." +msgstr "" +"Запускает процесс обобщения WAL, необходимый для инкрементального " +"копирования." + +#: utils/misc/guc_tables.c:1788 msgid "Allows connections and queries during recovery." msgstr "" "Разрешает принимать новые подключения и запросы в процессе восстановления." -#: utils/misc/guc_tables.c:1788 +#: utils/misc/guc_tables.c:1798 msgid "" "Allows feedback from a hot standby to the primary that will avoid query " "conflicts." @@ -31083,19 +32488,19 @@ msgstr "" "Разрешает обратную связь сервера горячего резерва с основным для " "предотвращения конфликтов при длительных запросах." -#: utils/misc/guc_tables.c:1798 +#: utils/misc/guc_tables.c:1808 msgid "Shows whether hot standby is currently active." msgstr "Показывает, активен ли в настоящий момент режим горячего резерва." -#: utils/misc/guc_tables.c:1809 +#: utils/misc/guc_tables.c:1819 msgid "Allows modifications of the structure of system tables." msgstr "Разрешает модифицировать структуру системных таблиц." -#: utils/misc/guc_tables.c:1820 +#: utils/misc/guc_tables.c:1830 msgid "Disables reading from system indexes." msgstr "Запрещает использование системных индексов." -#: utils/misc/guc_tables.c:1821 +#: 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." @@ -31103,20 +32508,20 @@ msgstr "" "При этом индексы продолжают обновляться, так что данное поведение безопасно. " "Худшее следствие - замедление." -#: utils/misc/guc_tables.c:1832 +#: utils/misc/guc_tables.c:1842 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "" "Позволяет размещать табличные пространства внутри pg_tblspc; предназначается " "для тестирования." -#: utils/misc/guc_tables.c:1843 +#: utils/misc/guc_tables.c:1853 msgid "" "Enables backward compatibility mode for privilege checks on large objects." msgstr "" "Включает режим обратной совместимости при проверке привилегий для больших " "объектов." -#: utils/misc/guc_tables.c:1844 +#: 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." @@ -31124,66 +32529,66 @@ msgstr "" "Пропускает проверки привилегий при чтении или изменении больших объектов " "(для совместимости с версиями PostgreSQL до 9.0)." -#: utils/misc/guc_tables.c:1854 +#: utils/misc/guc_tables.c:1864 msgid "When generating SQL fragments, quote all identifiers." msgstr "" "Генерируя SQL-фрагменты, заключать все идентификаторы в двойные кавычки." -#: utils/misc/guc_tables.c:1864 +#: utils/misc/guc_tables.c:1874 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Показывает, включён ли в этом кластере контроль целостности данных." -#: utils/misc/guc_tables.c:1875 +#: utils/misc/guc_tables.c:1885 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "" "Добавлять последовательный номер в сообщения syslog во избежание подавления " "повторов." -#: utils/misc/guc_tables.c:1885 +#: 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:1895 +#: utils/misc/guc_tables.c:1905 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "" "Определяет, будут ли узлы сбора и сбора слиянием также выполнять подпланы." -#: utils/misc/guc_tables.c:1896 +#: utils/misc/guc_tables.c:1906 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "" "Должны ли узлы сбора также выполнять подпланы или только собирать кортежи?" -#: utils/misc/guc_tables.c:1906 +#: utils/misc/guc_tables.c:1916 msgid "Allow JIT compilation." msgstr "Включить JIT-компиляцию." -#: utils/misc/guc_tables.c:1917 +#: utils/misc/guc_tables.c:1927 msgid "Register JIT-compiled functions with debugger." msgstr "Регистрировать JIT-скомпилированные функции в отладчике." -#: utils/misc/guc_tables.c:1934 +#: utils/misc/guc_tables.c:1944 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Выводить битовый код LLVM для облегчения отладки JIT." -#: utils/misc/guc_tables.c:1945 +#: utils/misc/guc_tables.c:1955 msgid "Allow JIT compilation of expressions." msgstr "Включить JIT-компиляцию выражений." -#: utils/misc/guc_tables.c:1956 +#: utils/misc/guc_tables.c:1966 msgid "Register JIT-compiled functions with perf profiler." msgstr "Регистрировать JIT-компилируемые функции в профилировщике perf." -#: utils/misc/guc_tables.c:1973 +#: utils/misc/guc_tables.c:1983 msgid "Allow JIT compilation of tuple deforming." msgstr "Разрешить JIT-компиляцию кода преобразования кортежей." -#: utils/misc/guc_tables.c:1984 +#: utils/misc/guc_tables.c:1994 msgid "Whether to continue running after a failure to sync data files." msgstr "Продолжать работу после ошибки при сохранении файлов данных на диске." -#: utils/misc/guc_tables.c:1993 +#: utils/misc/guc_tables.c:2003 msgid "" "Sets whether a WAL receiver should create a temporary replication slot if no " "permanent slot is configured." @@ -31191,28 +32596,46 @@ msgstr "" "Определяет, должен ли приёмник WAL создавать временный слот репликации, если " "не настроен постоянный слот." -#: utils/misc/guc_tables.c:2011 +#: utils/misc/guc_tables.c:2012 +msgid "Enables event triggers." +msgstr "Включает событийные триггеры." + +#: utils/misc/guc_tables.c:2013 +msgid "When enabled, event triggers will fire for all applicable statements." +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:2040 msgid "" "Sets the amount of time to wait before forcing a switch to the next WAL file." msgstr "" "Задаёт время задержки перед принудительным переключением на следующий файл " "WAL." -#: utils/misc/guc_tables.c:2022 +#: 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:2024 utils/misc/guc_tables.c:2658 +#: 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:2033 +#: utils/misc/guc_tables.c:2062 msgid "Sets the default statistics target." msgstr "Устанавливает ориентир статистики по умолчанию." -#: utils/misc/guc_tables.c:2034 +#: 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." @@ -31220,13 +32643,13 @@ msgstr "" "Это значение распространяется на столбцы таблицы, для которых ориентир " "статистики не задан явно через ALTER TABLE SET STATISTICS." -#: utils/misc/guc_tables.c:2043 +#: utils/misc/guc_tables.c:2072 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "Задаёт предел для списка FROM, при превышении которого подзапросы не " "сворачиваются." -#: utils/misc/guc_tables.c:2045 +#: 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." @@ -31234,13 +32657,13 @@ msgstr "" "Планировщик объединит вложенные запросы с внешними, если в полученном списке " "FROM будет не больше заданного числа элементов." -#: utils/misc/guc_tables.c:2056 +#: utils/misc/guc_tables.c:2085 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "Задаёт предел для списка FROM, при превышении которого конструкции JOIN " "сохраняются." -#: utils/misc/guc_tables.c:2058 +#: 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." @@ -31248,34 +32671,34 @@ msgstr "" "Планировщик будет сносить явные конструкции JOIN в списки FROM, пока в " "результирующем списке не больше заданного числа элементов." -#: utils/misc/guc_tables.c:2069 +#: utils/misc/guc_tables.c:2098 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" "Задаёт предел для списка FROM, при превышении которого применяется GEQO." -#: utils/misc/guc_tables.c:2079 +#: utils/misc/guc_tables.c:2108 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" "GEQO: оценка усилий для планирования, задающая значения по умолчанию для " "других параметров GEQO." -#: utils/misc/guc_tables.c:2089 +#: utils/misc/guc_tables.c:2118 msgid "GEQO: number of individuals in the population." msgstr "GEQO: число особей в популяции." -#: utils/misc/guc_tables.c:2090 utils/misc/guc_tables.c:2100 +#: 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:2099 +#: utils/misc/guc_tables.c:2128 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: число итераций алгоритма." -#: utils/misc/guc_tables.c:2111 +#: 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:2122 +#: utils/misc/guc_tables.c:2151 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing archived WAL data." @@ -31283,7 +32706,7 @@ msgstr "" "Задаёт максимальную задержку до отмены запроса, когда сервер горячего " "резерва обрабатывает данные WAL из архива." -#: utils/misc/guc_tables.c:2133 +#: utils/misc/guc_tables.c:2162 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing streamed WAL data." @@ -31291,13 +32714,13 @@ msgstr "" "Задаёт максимальную задержку до отмены запроса, когда сервер горячего " "резерва обрабатывает данные WAL из потока." -#: utils/misc/guc_tables.c:2144 +#: utils/misc/guc_tables.c:2173 msgid "Sets the minimum delay for applying changes during recovery." msgstr "" "Задаёт минимальную задержку для применения изменений в процессе " "восстановления." -#: utils/misc/guc_tables.c:2155 +#: utils/misc/guc_tables.c:2184 msgid "" "Sets the maximum interval between WAL receiver status reports to the sending " "server." @@ -31305,21 +32728,21 @@ msgstr "" "Задаёт максимальный интервал между отчётами о состоянии приёмника WAL, " "отправляемыми передающему серверу." -#: utils/misc/guc_tables.c:2166 +#: 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:2177 +#: utils/misc/guc_tables.c:2206 msgid "Sets the maximum number of concurrent connections." msgstr "Задаёт максимально возможное число подключений." -#: utils/misc/guc_tables.c:2188 +#: utils/misc/guc_tables.c:2217 msgid "Sets the number of connection slots reserved for superusers." msgstr "" "Определяет, сколько слотов подключений забронировано для суперпользователей." -#: utils/misc/guc_tables.c:2198 +#: utils/misc/guc_tables.c:2227 msgid "" "Sets the number of connection slots reserved for roles with privileges of " "pg_use_reserved_connections." @@ -31327,19 +32750,19 @@ msgstr "" "Определяет, сколько слотов подключений забронировано для ролей с правом " "pg_use_reserved_connections." -#: utils/misc/guc_tables.c:2209 +#: utils/misc/guc_tables.c:2238 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Объём динамической разделяемой памяти, резервируемый при запуске." -#: utils/misc/guc_tables.c:2224 +#: utils/misc/guc_tables.c:2253 msgid "Sets the number of shared memory buffers used by the server." msgstr "Задаёт количество буферов в разделяемой памяти, используемых сервером." -#: utils/misc/guc_tables.c:2235 +#: 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:2246 +#: utils/misc/guc_tables.c:2275 msgid "" "Shows the size of the server's main shared memory area (rounded up to the " "nearest MB)." @@ -31347,29 +32770,90 @@ msgstr "" "Показывает объём основной области общей памяти сервера (округляется до " "ближайшего значения в мегабайтах)." -#: utils/misc/guc_tables.c:2257 +#: 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:2258 +#: utils/misc/guc_tables.c:2287 msgid "-1 indicates that the value could not be determined." msgstr "Значение -1 показывает, что определить это количество не удалось." -#: utils/misc/guc_tables.c:2268 +#: 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: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 "При значении 0 это число определяется как процент от shared_buffers." + +#: utils/misc/guc_tables.c:2308 +msgid "" +"Sets the size of the dedicated buffer pool used for the MultiXact member " +"cache." +msgstr "" +"Задаёт размер выделенного пула буферов, используемых для кеширования " +"членства в MultiXact." + +#: utils/misc/guc_tables.c:2319 +msgid "" +"Sets the size of the dedicated buffer pool used for the MultiXact offset " +"cache." +msgstr "" +"Задаёт размер выделенного пула буферов, используемых для кеширования " +"смещений MultiXact." + +#: utils/misc/guc_tables.c:2330 +msgid "" +"Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY " +"message cache." +msgstr "" +"Задаёт размер выделенного пула буферов, используемых для кеширования " +"сообщений LISTEN/NOTIFY." + +#: 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:2352 +msgid "" +"Sets the size of the dedicated buffer pool used for the subtransaction cache." +msgstr "" +"Задаёт размер выделенного пула буферов, используемых для кеширования " +"подтранзакций." + +#: 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:2374 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Задаёт предельное число временных буферов на один сеанс." -#: utils/misc/guc_tables.c:2279 +#: utils/misc/guc_tables.c:2385 msgid "Sets the TCP port the server listens on." msgstr "Задаёт TCP-порт для работы сервера." -#: utils/misc/guc_tables.c:2289 +#: utils/misc/guc_tables.c:2395 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Задаёт права доступа для Unix-сокета." -#: utils/misc/guc_tables.c:2290 +#: 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 " @@ -31381,11 +32865,11 @@ msgstr "" "воспринимаемом системными функциями chmod и umask. (Чтобы использовать " "привычный восьмеричный формат, добавьте в начало ноль (0).)" -#: utils/misc/guc_tables.c:2304 +#: utils/misc/guc_tables.c:2410 msgid "Sets the file permissions for log files." msgstr "Задаёт права доступа к файлам протоколов." -#: utils/misc/guc_tables.c:2305 +#: 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 " @@ -31395,11 +32879,11 @@ msgstr "" "функциями chmod и umask. (Чтобы использовать привычный восьмеричный формат, " "добавьте в начало ноль (0).)" -#: utils/misc/guc_tables.c:2319 +#: utils/misc/guc_tables.c:2425 msgid "Shows the mode of the data directory." msgstr "Показывает режим каталога данных." -#: utils/misc/guc_tables.c:2320 +#: 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 " @@ -31409,11 +32893,11 @@ msgstr "" "функциями chmod и umask. (Чтобы использовать привычный восьмеричный формат, " "добавьте в начало ноль (0).)" -#: utils/misc/guc_tables.c:2333 +#: utils/misc/guc_tables.c:2439 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Задаёт предельный объём памяти для рабочих пространств запросов." -#: utils/misc/guc_tables.c:2334 +#: 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." @@ -31421,19 +32905,19 @@ msgstr "" "Такой объём памяти может использоваться каждой внутренней операцией " "сортировки и таблицей хешей до переключения на временные файлы на диске." -#: utils/misc/guc_tables.c:2346 +#: utils/misc/guc_tables.c:2457 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Задаёт предельный объём памяти для операций по обслуживанию." -#: utils/misc/guc_tables.c:2347 +#: 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:2357 +#: utils/misc/guc_tables.c:2468 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Задаёт предельный объём памяти для логического декодирования." -#: utils/misc/guc_tables.c:2358 +#: utils/misc/guc_tables.c:2469 msgid "" "This much memory can be used by each internal reorder buffer before spilling " "to disk." @@ -31441,85 +32925,94 @@ msgstr "" "Такой объём памяти может использоваться каждым внутренним буфером " "пересортировки до вымещения данных на диск." -#: utils/misc/guc_tables.c:2374 +#: utils/misc/guc_tables.c:2485 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Задаёт максимальную глубину стека (в КБ)." -#: utils/misc/guc_tables.c:2385 +#: 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:2386 +#: utils/misc/guc_tables.c:2497 msgid "-1 means no limit." msgstr "-1 отключает ограничение." -#: utils/misc/guc_tables.c:2396 +#: utils/misc/guc_tables.c:2507 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Стоимость очистки для страницы, найденной в кеше." -#: utils/misc/guc_tables.c:2406 +#: utils/misc/guc_tables.c:2517 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Стоимость очистки для страницы, не найденной в кеше." -#: utils/misc/guc_tables.c:2416 +#: utils/misc/guc_tables.c:2527 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Стоимость очистки для страницы, которая не была \"грязной\"." -#: utils/misc/guc_tables.c:2426 +#: utils/misc/guc_tables.c:2537 msgid "Vacuum cost amount available before napping." msgstr "Суммарная стоимость очистки, при которой нужна передышка." -#: utils/misc/guc_tables.c:2436 +#: utils/misc/guc_tables.c:2547 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "" "Суммарная стоимость очистки, при которой нужна передышка, для автоочистки." -#: utils/misc/guc_tables.c:2446 +#: 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:2459 +#: utils/misc/guc_tables.c:2570 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Задаёт предельное число одновременно подготовленных транзакций." -#: utils/misc/guc_tables.c:2470 +#: utils/misc/guc_tables.c:2581 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Задаёт минимальный OID таблиц, для которых отслеживаются блокировки." -#: utils/misc/guc_tables.c:2471 +#: utils/misc/guc_tables.c:2582 msgid "Is used to avoid output on system tables." msgstr "Применяется для игнорирования системных таблиц." -#: utils/misc/guc_tables.c:2480 +#: utils/misc/guc_tables.c:2591 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Задаёт OID таблицы для безусловного отслеживания блокировок." -#: utils/misc/guc_tables.c:2492 +#: utils/misc/guc_tables.c:2603 msgid "Sets the maximum allowed duration of any statement." msgstr "Задаёт предельную длительность для любого оператора." -#: utils/misc/guc_tables.c:2493 utils/misc/guc_tables.c:2504 -#: utils/misc/guc_tables.c:2515 utils/misc/guc_tables.c:2526 +#: 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 "Нулевое значение отключает тайм-аут." -#: utils/misc/guc_tables.c:2503 +#: utils/misc/guc_tables.c:2614 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Задаёт максимальную продолжительность ожидания блокировок." -#: utils/misc/guc_tables.c:2514 +#: 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:2525 +#: 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:2647 msgid "" "Sets the maximum allowed idle time between queries, when not in a " "transaction." @@ -31527,37 +33020,37 @@ msgstr "" "Задаёт предельно допустимую длительность простоя между запросами вне " "транзакций." -#: utils/misc/guc_tables.c:2536 +#: utils/misc/guc_tables.c:2658 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "" "Минимальный возраст строк таблицы, при котором VACUUM может их заморозить." -#: utils/misc/guc_tables.c:2546 +#: utils/misc/guc_tables.c:2668 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Возраст, при котором VACUUM должен сканировать всю таблицу с целью " "заморозить кортежи." -#: utils/misc/guc_tables.c:2556 +#: utils/misc/guc_tables.c:2678 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "" "Минимальный возраст, при котором VACUUM будет замораживать MultiXactId в " "строке таблицы." -#: utils/misc/guc_tables.c:2566 +#: utils/misc/guc_tables.c:2688 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Возраст multixact, при котором VACUUM должен сканировать всю таблицу с целью " "заморозить кортежи." -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2698 msgid "" "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" "Возраст, при котором VACUUM должен включить защиту от зацикливания во " "избежание отказа." -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2707 msgid "" "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound " "outage." @@ -31565,44 +33058,44 @@ msgstr "" "Возраст мультитранзакций, при котором VACUUM должен включить защиту от " "зацикливания во избежание отказа." -#: utils/misc/guc_tables.c:2598 +#: utils/misc/guc_tables.c:2720 msgid "Sets the maximum number of locks per transaction." msgstr "Задаёт предельное число блокировок на транзакцию." -#: utils/misc/guc_tables.c:2599 +#: 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." +"\"max_locks_per_transaction\" objects per server process or prepared " +"transaction will need to be locked at any one time." msgstr "" "Размер разделяемой таблицы блокировок выбирается из предположения, что в " "один момент времени потребуется заблокировать не более " -"max_locks_per_transaction объектов для одного серверного процесса или " +"\"max_locks_per_transaction\" объектов для одного серверного процесса или " "подготовленной транзакции." -#: utils/misc/guc_tables.c:2610 +#: utils/misc/guc_tables.c:2732 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Задаёт предельное число предикатных блокировок на транзакцию." -#: utils/misc/guc_tables.c:2611 +#: 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 " +"\"max_pred_locks_per_transaction\" objects per server process or prepared " "transaction will need to be locked at any one time." msgstr "" "Размер разделяемой таблицы предикатных блокировок выбирается из " "предположения, что в один момент времени потребуется заблокировать не более " -"max_pred_locks_per_transaction объектов для одного серверного процесса или " -"подготовленной транзакции." +"\"max_pred_locks_per_transaction\" объектов для одного серверного процесса " +"или подготовленной транзакции." -#: utils/misc/guc_tables.c:2622 +#: 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:2623 +#: 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." @@ -31610,13 +33103,13 @@ msgstr "" "Если одним соединением блокируется больше этого общего числа страниц и " "кортежей, эти блокировки заменяются блокировкой на уровне отношения." -#: utils/misc/guc_tables.c:2633 +#: utils/misc/guc_tables.c:2755 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "" "Задаёт максимальное число кортежей, блокируемых предикатными блокировками в " "одной странице." -#: utils/misc/guc_tables.c:2634 +#: 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." @@ -31624,45 +33117,50 @@ msgstr "" "Если одним соединением блокируется больше этого числа кортежей на одной " "странице, эти блокировки заменяются блокировкой на уровне страницы." -#: utils/misc/guc_tables.c:2644 +#: utils/misc/guc_tables.c:2766 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Ограничивает время, за которое клиент должен пройти аутентификацию." -#: utils/misc/guc_tables.c:2656 +#: 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:2668 +#: 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:2800 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "Размер буфера для упреждающего чтения WAL во время восстановления." -#: utils/misc/guc_tables.c:2669 +#: utils/misc/guc_tables.c:2801 msgid "" "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." msgstr "" "Максимальный объём WAL, прочитываемый наперёд для осуществления предвыборки " "изменяемых блоков данных." -#: utils/misc/guc_tables.c:2679 +#: utils/misc/guc_tables.c:2811 msgid "Sets the size of WAL files held for standby servers." msgstr "" "Определяет предельный объём файлов WAL, сохраняемых для резервных серверов." -#: utils/misc/guc_tables.c:2690 +#: utils/misc/guc_tables.c:2822 msgid "Sets the minimum size to shrink the WAL to." msgstr "Задаёт минимальный размер WAL при сжатии." -#: utils/misc/guc_tables.c:2702 +#: utils/misc/guc_tables.c:2834 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Задаёт размер WAL, при котором инициируется контрольная точка." -#: utils/misc/guc_tables.c:2714 +#: utils/misc/guc_tables.c:2846 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "" "Задаёт максимальное время между автоматическими контрольными точками WAL." -#: utils/misc/guc_tables.c:2725 +#: utils/misc/guc_tables.c:2857 msgid "" "Sets the maximum time before warning if checkpoints triggered by WAL volume " "happen too frequently." @@ -31670,7 +33168,7 @@ msgstr "" "Задаёт максимальный интервал, в котором выдаётся предупреждение о том, что " "контрольные точки, вызванные активностью WAL, происходят слишком часто." -#: utils/misc/guc_tables.c:2727 +#: 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 " @@ -31680,49 +33178,54 @@ msgstr "" "контрольными точками, вызванными заполнением файлов сегментов WAL, меньше " "заданного значения. Нулевое значение отключает эти предупреждения." -#: utils/misc/guc_tables.c:2740 utils/misc/guc_tables.c:2958 -#: utils/misc/guc_tables.c:2998 +#: 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:2751 +#: utils/misc/guc_tables.c:2883 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Задаёт число буферов дисковых страниц в разделяемой памяти для WAL." -#: utils/misc/guc_tables.c:2762 +#: utils/misc/guc_tables.c:2884 +msgid "" +"Specify -1 to have this value determined as a fraction of shared_buffers." +msgstr "При значении -1 это число определяется как процент от shared_buffers." + +#: utils/misc/guc_tables.c:2894 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Задержка между сбросом WAL в процессе, записывающем WAL." -#: utils/misc/guc_tables.c:2773 +#: utils/misc/guc_tables.c:2905 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "" "Объём WAL, обработанный пишущим WAL процессом, при котором инициируется " "сброс журнала на диск." -#: utils/misc/guc_tables.c:2784 +#: utils/misc/guc_tables.c:2916 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "" "Размер нового файла, при достижении которого файл не пишется в WAL, а " "сбрасывается на диск." -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2927 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" "Задаёт предельное число одновременно работающих процессов передачи WAL." -#: utils/misc/guc_tables.c:2806 +#: utils/misc/guc_tables.c:2938 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Задаёт предельное число одновременно существующих слотов репликации." -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2948 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "" "Задаёт максимальный размер WAL, который могут резервировать слоты репликации." -#: utils/misc/guc_tables.c:2817 +#: 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." @@ -31731,11 +33234,11 @@ msgstr "" "помечены как нерабочие, а сегменты будут освобождены для удаления или " "переработки." -#: utils/misc/guc_tables.c:2829 +#: utils/misc/guc_tables.c:2961 msgid "Sets the maximum time to wait for WAL replication." msgstr "Задаёт предельное время ожидания репликации WAL." -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2972 msgid "" "Sets the delay in microseconds between transaction commit and flushing WAL " "to disk." @@ -31743,19 +33246,19 @@ msgstr "" "Задаёт задержку в микросекундах между фиксированием транзакций и сбросом WAL " "на диск." -#: utils/misc/guc_tables.c:2852 +#: utils/misc/guc_tables.c:2984 msgid "" "Sets the minimum number of concurrent open transactions required before " -"performing commit_delay." +"performing \"commit_delay\"." msgstr "" "Задаёт минимальное число одновременно открытых транзакций, которое требуется " -"для применения commit_delay." +"для применения \"commit_delay\"." -#: utils/misc/guc_tables.c:2863 +#: utils/misc/guc_tables.c:2995 msgid "Sets the number of digits displayed for floating-point values." msgstr "Задаёт число выводимых цифр для чисел с плавающей точкой." -#: utils/misc/guc_tables.c:2864 +#: 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 " @@ -31767,7 +33270,7 @@ msgstr "" "(FLT_DIG или DBL_DIG соответственно). Положительное значение включает режим " "точного вывода." -#: utils/misc/guc_tables.c:2876 +#: 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." @@ -31776,22 +33279,22 @@ msgstr "" "которого он выводится в журнал. Выборка определяется параметром " "log_statement_sample_rate." -#: utils/misc/guc_tables.c:2879 +#: utils/misc/guc_tables.c:3011 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "При 0 выводятся все запросы в выборке; -1 отключает эти сообщения." -#: utils/misc/guc_tables.c:2889 +#: 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:2891 +#: utils/misc/guc_tables.c:3023 msgid "Zero prints all queries. -1 turns this feature off." msgstr "При 0 выводятся все запросы; -1 отключает эти сообщения." -#: utils/misc/guc_tables.c:2901 +#: utils/misc/guc_tables.c:3033 msgid "" "Sets the minimum execution time above which autovacuum actions will be " "logged." @@ -31799,12 +33302,12 @@ msgstr "" "Задаёт предельное время выполнения автоочистки, при превышении которого эта " "операция протоколируется в журнале." -#: utils/misc/guc_tables.c:2903 +#: utils/misc/guc_tables.c:3035 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "" "При 0 протоколируются все операции автоочистки; -1 отключает эти сообщения." -#: utils/misc/guc_tables.c:2913 +#: utils/misc/guc_tables.c:3045 msgid "" "Sets the maximum length in bytes of data logged for bind parameter values " "when logging statements." @@ -31812,11 +33315,11 @@ msgstr "" "Задаёт максимальный размер данных (в байтах), выводимых в значениях " "привязанных параметров при протоколировании операторов." -#: utils/misc/guc_tables.c:2915 utils/misc/guc_tables.c:2927 +#: 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:2925 +#: 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." @@ -31824,17 +33327,17 @@ msgstr "" "Задаёт максимальный размер данных (в байтах), выводимых в значениях " "привязанных параметров при протоколировании операторов в случае ошибки." -#: utils/misc/guc_tables.c:2937 +#: utils/misc/guc_tables.c:3069 msgid "Background writer sleep time between rounds." msgstr "Время простоя в процессе фоновой записи между подходами." -#: utils/misc/guc_tables.c:2948 +#: utils/misc/guc_tables.c:3080 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "" "Максимальное число LRU-страниц, сбрасываемых за один подход, в процессе " "фоновой записи." -#: utils/misc/guc_tables.c:2971 +#: utils/misc/guc_tables.c:3103 msgid "" "Number of simultaneous requests that can be handled efficiently by the disk " "subsystem." @@ -31842,89 +33345,97 @@ msgstr "" "Число одновременных запросов, которые могут быть эффективно обработаны " "дисковой подсистемой." -#: utils/misc/guc_tables.c:2985 +#: utils/misc/guc_tables.c:3117 msgid "" -"A variant of effective_io_concurrency that is used for maintenance work." +"A variant of \"effective_io_concurrency\" that is used for maintenance work." msgstr "" -"Вариация параметра effective_io_concurrency, предназначенная для операций " -"обслуживания БД." +"Вариация параметра \"effective_io_concurrency\", предназначенная для " +"операций обслуживания БД." -#: utils/misc/guc_tables.c:3011 +#: utils/misc/guc_tables.c:3132 +msgid "Limit on the size of data reads and writes." +msgstr "Предельный размер для операций чтения и записи данных." + +#: utils/misc/guc_tables.c:3157 msgid "Maximum number of concurrent worker processes." msgstr "Задаёт максимально возможное число рабочих процессов." -#: utils/misc/guc_tables.c:3023 +#: utils/misc/guc_tables.c:3169 msgid "Maximum number of logical replication worker processes." msgstr "" "Задаёт максимально возможное число рабочих процессов логической репликации." -#: utils/misc/guc_tables.c:3035 +#: utils/misc/guc_tables.c:3181 msgid "Maximum number of table synchronization workers per subscription." msgstr "" "Задаёт максимально возможное число процессов синхронизации таблиц для одной " "подписки." -#: utils/misc/guc_tables.c:3047 +#: utils/misc/guc_tables.c:3193 msgid "Maximum number of parallel apply workers per subscription." msgstr "" "Задаёт максимально возможное число параллельных применяющих процессов для " "одной подписки." -#: utils/misc/guc_tables.c:3057 +#: 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:3069 +#: 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:3081 +#: utils/misc/guc_tables.c:3227 msgid "Shows the maximum number of function arguments." msgstr "Показывает максимально возможное число аргументов функций." -#: utils/misc/guc_tables.c:3092 +#: utils/misc/guc_tables.c:3238 msgid "Shows the maximum number of index keys." msgstr "Показывает максимально возможное число ключей в индексе." -#: utils/misc/guc_tables.c:3103 +#: utils/misc/guc_tables.c:3249 msgid "Shows the maximum identifier length." msgstr "Показывает максимально возможную длину идентификатора." -#: utils/misc/guc_tables.c:3114 +#: utils/misc/guc_tables.c:3260 msgid "Shows the size of a disk block." msgstr "Показывает размер дискового блока." -#: utils/misc/guc_tables.c:3125 +#: utils/misc/guc_tables.c:3271 msgid "Shows the number of pages per disk file." msgstr "Показывает число страниц в одном файле." -#: utils/misc/guc_tables.c:3136 +#: utils/misc/guc_tables.c:3282 msgid "Shows the block size in the write ahead log." msgstr "Показывает размер блока в журнале WAL." -#: utils/misc/guc_tables.c:3147 +#: utils/misc/guc_tables.c:3293 msgid "" "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "" "Задаёт время задержки перед повторной попыткой обращения к WAL после неудачи." -#: utils/misc/guc_tables.c:3159 +#: utils/misc/guc_tables.c:3305 msgid "Shows the size of write ahead log segments." msgstr "Показывает размер сегментов журнала предзаписи." -#: utils/misc/guc_tables.c:3172 +#: utils/misc/guc_tables.c:3318 +msgid "Time for which WAL summary files should be kept." +msgstr "Время, в течение которого должны сохраняться файлы обобщения WAL." + +#: utils/misc/guc_tables.c:3331 msgid "Time to sleep between autovacuum runs." msgstr "Время простоя между запусками автоочистки." -#: utils/misc/guc_tables.c:3182 +#: utils/misc/guc_tables.c:3341 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Минимальное число изменений или удалений кортежей, вызывающее очистку." -#: utils/misc/guc_tables.c:3191 +#: utils/misc/guc_tables.c:3350 msgid "" "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert " "vacuums." @@ -31932,27 +33443,27 @@ msgstr "" "Минимальное число добавлений кортежей, вызывающее очистку; при -1 такая " "очистка отключается." -#: utils/misc/guc_tables.c:3200 +#: utils/misc/guc_tables.c:3359 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "" "Минимальное число добавлений, изменений или удалений кортежей, вызывающее " "анализ." -#: utils/misc/guc_tables.c:3210 +#: utils/misc/guc_tables.c:3369 msgid "" "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "" "Возраст, при котором необходима автоочистка таблицы для предотвращения " "зацикливания ID транзакций." -#: utils/misc/guc_tables.c:3222 +#: utils/misc/guc_tables.c:3381 msgid "" "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "" "Возраст multixact, при котором необходима автоочистка таблицы для " "предотвращения зацикливания multixact." -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3391 msgid "" "Sets the maximum number of simultaneously running autovacuum worker " "processes." @@ -31960,65 +33471,53 @@ msgstr "" "Задаёт предельное число одновременно выполняющихся рабочих процессов " "автоочистки." -#: utils/misc/guc_tables.c:3242 +#: utils/misc/guc_tables.c:3401 msgid "" "Sets the maximum number of parallel processes per maintenance operation." msgstr "" "Задаёт максимальное число параллельных процессов на одну операцию " "обслуживания." -#: utils/misc/guc_tables.c:3252 +#: utils/misc/guc_tables.c:3411 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Задаёт максимальное число параллельных процессов на узел исполнителя." -#: utils/misc/guc_tables.c:3263 +#: 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:3274 +#: 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:3285 -msgid "" -"Time before a snapshot is too old to read pages changed after the snapshot " -"was taken." -msgstr "" -"Срок, по истечении которого снимок считается слишком старым для получения " -"страниц, изменённых после создания снимка." - -#: utils/misc/guc_tables.c:3286 -msgid "A value of -1 disables this feature." -msgstr "Значение -1 отключает это поведение." - -#: utils/misc/guc_tables.c:3296 +#: utils/misc/guc_tables.c:3444 msgid "Time between issuing TCP keepalives." msgstr "Интервал между TCP-пакетами пульса (keep-alive)." -#: utils/misc/guc_tables.c:3297 utils/misc/guc_tables.c:3308 -#: utils/misc/guc_tables.c:3432 +#: 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 "При нулевом значении действует системный параметр." -#: utils/misc/guc_tables.c:3307 +#: utils/misc/guc_tables.c:3455 msgid "Time between TCP keepalive retransmits." msgstr "Интервал между повторениями TCP-пакетов пульса (keep-alive)." -#: utils/misc/guc_tables.c:3318 +#: 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:3329 +#: utils/misc/guc_tables.c:3477 msgid "Maximum number of TCP keepalive retransmits." msgstr "Максимальное число повторений TCP-пакетов пульса (keep-alive)." -#: utils/misc/guc_tables.c:3330 +#: 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." @@ -32027,15 +33526,15 @@ msgstr "" "чем соединение будет считаться пропавшим. При нулевом значении действует " "системный параметр." -#: utils/misc/guc_tables.c:3341 +#: utils/misc/guc_tables.c:3489 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Ограничивает результат точного поиска с использованием GIN." -#: utils/misc/guc_tables.c:3352 +#: 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:3353 +#: 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 " @@ -32045,12 +33544,12 @@ msgstr "" "попадают файлы данных PostgreSQL. Размер задаётся в дисковых страницах " "(обычно это 8 КБ)." -#: utils/misc/guc_tables.c:3364 +#: utils/misc/guc_tables.c:3512 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "" "Задаёт минимальный объём данных в таблице для параллельного сканирования." -#: utils/misc/guc_tables.c:3365 +#: 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." @@ -32059,12 +33558,12 @@ msgstr "" "задано этим ограничением, он исключает параллельное сканирование из " "рассмотрения." -#: utils/misc/guc_tables.c:3375 +#: utils/misc/guc_tables.c:3523 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "" "Задаёт минимальный объём данных в индексе для параллельного сканирования." -#: utils/misc/guc_tables.c:3376 +#: 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." @@ -32073,68 +33572,68 @@ msgstr "" "задано этим ограничением, он исключает параллельное сканирование из " "рассмотрения." -#: utils/misc/guc_tables.c:3387 +#: utils/misc/guc_tables.c:3535 msgid "Shows the server version as an integer." msgstr "Показывает версию сервера в виде целого числа." -#: utils/misc/guc_tables.c:3398 +#: 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:3399 +#: utils/misc/guc_tables.c:3547 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "При 0 отмечаются все файлы; при -1 эти сообщения отключаются (по умолчанию)." -#: utils/misc/guc_tables.c:3409 +#: 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:3420 +#: utils/misc/guc_tables.c:3568 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Задаёт максимальный размер списка-очереди для GIN-индекса." -#: utils/misc/guc_tables.c:3431 +#: utils/misc/guc_tables.c:3579 msgid "TCP user timeout." msgstr "Пользовательский таймаут TCP." -#: utils/misc/guc_tables.c:3442 +#: utils/misc/guc_tables.c:3590 msgid "The size of huge page that should be requested." msgstr "Запрашиваемый размер огромных страниц." -#: utils/misc/guc_tables.c:3453 +#: utils/misc/guc_tables.c:3601 msgid "Aggressively flush system caches for debugging purposes." msgstr "Включает агрессивный сброс системных кешей для целей отладки." -#: utils/misc/guc_tables.c:3476 +#: utils/misc/guc_tables.c:3624 msgid "" "Sets the time interval between checks for disconnection while running " "queries." msgstr "" "Задаёт интервал между проверками подключения во время выполнения запросов." -#: utils/misc/guc_tables.c:3487 +#: utils/misc/guc_tables.c:3635 msgid "Time between progress updates for long-running startup operations." msgstr "" "Интервал между обновлениями состояния длительных операций, выполняемых при " "запуске." -#: utils/misc/guc_tables.c:3489 +#: utils/misc/guc_tables.c:3637 msgid "0 turns this feature off." msgstr "При 0 эта функциональность отключается." -#: utils/misc/guc_tables.c:3499 +#: utils/misc/guc_tables.c:3647 msgid "Sets the iteration count for SCRAM secret generation." msgstr "Задаёт количество итераций для формирования секрета SCRAM." -#: utils/misc/guc_tables.c:3519 +#: 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:3530 +#: utils/misc/guc_tables.c:3678 msgid "" "Sets the planner's estimate of the cost of a nonsequentially fetched disk " "page." @@ -32142,13 +33641,13 @@ msgstr "" "Задаёт для планировщика ориентир стоимости непоследовательного чтения " "страницы." -#: utils/misc/guc_tables.c:3541 +#: 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:3552 +#: utils/misc/guc_tables.c:3700 msgid "" "Sets the planner's estimate of the cost of processing each index entry " "during an index scan." @@ -32156,7 +33655,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого элемента " "индекса в процессе сканирования индекса." -#: utils/misc/guc_tables.c:3563 +#: utils/misc/guc_tables.c:3711 msgid "" "Sets the planner's estimate of the cost of processing each operator or " "function call." @@ -32164,7 +33663,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого оператора или " "вызова функции." -#: utils/misc/guc_tables.c:3574 +#: 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." @@ -32172,7 +33671,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости передачи каждого кортежа (строки) " "ведущему процессу от рабочего." -#: utils/misc/guc_tables.c:3585 +#: utils/misc/guc_tables.c:3733 msgid "" "Sets the planner's estimate of the cost of starting up worker processes for " "parallel query." @@ -32180,40 +33679,40 @@ msgstr "" "Задаёт для планировщика ориентир стоимости запуска рабочих процессов для " "параллельного выполнения запроса." -#: utils/misc/guc_tables.c:3597 +#: utils/misc/guc_tables.c:3745 msgid "Perform JIT compilation if query is more expensive." msgstr "Стоимость запроса, при превышении которой производится JIT-компиляция." -#: utils/misc/guc_tables.c:3598 +#: utils/misc/guc_tables.c:3746 msgid "-1 disables JIT compilation." msgstr "-1 отключает JIT-компиляцию." -#: utils/misc/guc_tables.c:3608 +#: utils/misc/guc_tables.c:3756 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "" "Стоимость запроса, при превышении которой оптимизируются JIT-" "скомпилированные функции." -#: utils/misc/guc_tables.c:3609 +#: utils/misc/guc_tables.c:3757 msgid "-1 disables optimization." msgstr "-1 отключает оптимизацию." -#: utils/misc/guc_tables.c:3619 +#: utils/misc/guc_tables.c:3767 msgid "Perform JIT inlining if query is more expensive." msgstr "Стоимость запроса, при которой выполняется встраивание JIT." -#: utils/misc/guc_tables.c:3620 +#: utils/misc/guc_tables.c:3768 msgid "-1 disables inlining." msgstr "-1 отключает встраивание кода." -#: utils/misc/guc_tables.c:3630 +#: 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:3642 +#: utils/misc/guc_tables.c:3790 msgid "" "Sets the planner's estimate of the average size of a recursive query's " "working table." @@ -32221,37 +33720,37 @@ msgstr "" "Задаёт для планировщика ориентир среднего размера рабочей таблицы в " "рекурсивном запросе." -#: utils/misc/guc_tables.c:3654 +#: utils/misc/guc_tables.c:3802 msgid "GEQO: selective pressure within the population." msgstr "GEQO: селективное давление в популяции." -#: utils/misc/guc_tables.c:3665 +#: utils/misc/guc_tables.c:3813 msgid "GEQO: seed for random path selection." msgstr "GEQO: отправное значение для случайного выбора пути." -#: utils/misc/guc_tables.c:3676 -msgid "Multiple of work_mem to use for hash tables." -msgstr "Множитель work_mem, определяющий объём памяти для хеш-таблиц." +#: utils/misc/guc_tables.c:3824 +msgid "Multiple of \"work_mem\" to use for hash tables." +msgstr "Множитель \"work_mem\", определяющий объём памяти для хеш-таблиц." -#: utils/misc/guc_tables.c:3687 +#: utils/misc/guc_tables.c:3835 msgid "Multiple of the average buffer usage to free per round." msgstr "" "Множитель для среднего числа использованных буферов, определяющий число " "буферов, освобождаемых за один подход." -#: utils/misc/guc_tables.c:3697 +#: utils/misc/guc_tables.c:3845 msgid "Sets the seed for random-number generation." msgstr "Задаёт отправное значение для генератора случайных чисел." -#: utils/misc/guc_tables.c:3708 +#: utils/misc/guc_tables.c:3856 msgid "Vacuum cost delay in milliseconds." msgstr "Задержка очистки (в миллисекундах)." -#: utils/misc/guc_tables.c:3719 +#: utils/misc/guc_tables.c:3867 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Задержка очистки для автоочистки (в миллисекундах)." -#: utils/misc/guc_tables.c:3730 +#: utils/misc/guc_tables.c:3878 msgid "" "Number of tuple updates or deletes prior to vacuum as a fraction of " "reltuples." @@ -32259,13 +33758,13 @@ msgstr "" "Отношение числа обновлений или удалений кортежей к reltuples, определяющее " "потребность в очистке." -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3888 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "" "Отношение числа добавлений кортежей к reltuples, определяющее потребность в " "очистке." -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3898 msgid "" "Number of tuple inserts, updates, or deletes prior to analyze as a fraction " "of reltuples." @@ -32273,7 +33772,7 @@ msgstr "" "Отношение числа добавлений, обновлений или удалений кортежей к reltuples, " "определяющее потребность в анализе." -#: utils/misc/guc_tables.c:3760 +#: utils/misc/guc_tables.c:3908 msgid "" "Time spent flushing dirty buffers during checkpoint, as fraction of " "checkpoint interval." @@ -32281,25 +33780,26 @@ msgstr "" "Отношение продолжительности сброса \"грязных\" буферов во время контрольной " "точки к интервалу контрольных точек." -#: utils/misc/guc_tables.c:3770 -msgid "Fraction of statements exceeding log_min_duration_sample to be logged." +#: utils/misc/guc_tables.c:3918 +msgid "" +"Fraction of statements exceeding \"log_min_duration_sample\" to be logged." msgstr "" "Доля записываемых в журнал операторов с длительностью, превышающей " -"log_min_duration_sample." +"\"log_min_duration_sample\"." -#: utils/misc/guc_tables.c:3771 +#: 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:3780 +#: utils/misc/guc_tables.c:3928 msgid "Sets the fraction of transactions from which to log all statements." msgstr "" "Задаёт долю транзакций, все операторы которых будут записываться в журнал " "сервера." -#: utils/misc/guc_tables.c:3781 +#: utils/misc/guc_tables.c:3929 msgid "" "Use a value between 0.0 (never log) and 1.0 (log all statements for all " "transactions)." @@ -32307,48 +33807,48 @@ msgstr "" "Значение 0.0 означает — не записывать никакие транзакции, а значение 1.0 — " "записывать все операторы всех транзакций." -#: utils/misc/guc_tables.c:3800 +#: utils/misc/guc_tables.c:3948 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Задаёт команду оболочки, вызываемую для архивации файла WAL." -#: utils/misc/guc_tables.c:3801 +#: utils/misc/guc_tables.c:3949 msgid "This is used only if \"archive_library\" is not set." msgstr "Это параметр используется, только если не задан \"archive_library\"." -#: utils/misc/guc_tables.c:3810 +#: utils/misc/guc_tables.c:3958 msgid "Sets the library that will be called to archive a WAL file." msgstr "Задаёт библиотеку, вызываемую для архивации файла WAL." -#: utils/misc/guc_tables.c:3811 +#: utils/misc/guc_tables.c:3959 msgid "An empty string indicates that \"archive_command\" should be used." msgstr "" "Пустая строка указывает, что должен использоваться параметр " "\"archive_command\"." -#: utils/misc/guc_tables.c:3820 +#: 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:3830 +#: 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:3840 +#: 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:3850 +#: utils/misc/guc_tables.c:3998 msgid "Specifies the timeline to recover into." msgstr "Указывает линию времени для выполнения восстановления." -#: utils/misc/guc_tables.c:3860 +#: utils/misc/guc_tables.c:4008 msgid "" "Set to \"immediate\" to end recovery as soon as a consistent state is " "reached." @@ -32356,24 +33856,24 @@ msgstr "" "Задайте значение \"immediate\", чтобы восстановление остановилось сразу " "после достижения согласованного состояния." -#: utils/misc/guc_tables.c:3869 +#: utils/misc/guc_tables.c:4017 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "" "Задаёт идентификатор транзакции, вплоть до которой будет производиться " "восстановление." -#: utils/misc/guc_tables.c:3878 +#: utils/misc/guc_tables.c:4026 msgid "Sets the time stamp up to which recovery will proceed." msgstr "" "Задаёт момент времени, вплоть до которого будет производиться восстановление." -#: utils/misc/guc_tables.c:3887 +#: utils/misc/guc_tables.c:4035 msgid "Sets the named restore point up to which recovery will proceed." msgstr "" "Задаёт именованную точку восстановления, до которой будет производиться " "восстановление." -#: utils/misc/guc_tables.c:3896 +#: utils/misc/guc_tables.c:4044 msgid "" "Sets the LSN of the write-ahead log location up to which recovery will " "proceed." @@ -32381,61 +33881,61 @@ msgstr "" "Задаёт в виде LSN позицию в журнале предзаписи, до которой будет " "производиться восстановление." -#: utils/misc/guc_tables.c:3906 +#: 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:3917 +#: 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:3927 +#: utils/misc/guc_tables.c:4075 msgid "Sets the client's character set encoding." msgstr "Задаёт кодировку символов, используемую клиентом." -#: utils/misc/guc_tables.c:3938 +#: utils/misc/guc_tables.c:4086 msgid "Controls information prefixed to each log line." msgstr "Определяет содержимое префикса каждой строки протокола." -#: utils/misc/guc_tables.c:3939 +#: utils/misc/guc_tables.c:4087 msgid "If blank, no prefix is used." msgstr "При пустом значении префикс также отсутствует." -#: utils/misc/guc_tables.c:3948 +#: utils/misc/guc_tables.c:4096 msgid "Sets the time zone to use in log messages." msgstr "Задаёт часовой пояс для вывода времени в сообщениях протокола." -#: utils/misc/guc_tables.c:3958 +#: utils/misc/guc_tables.c:4106 msgid "Sets the display format for date and time values." msgstr "Устанавливает формат вывода дат и времени." -#: utils/misc/guc_tables.c:3959 +#: utils/misc/guc_tables.c:4107 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Также помогает разбирать неоднозначно заданные вводимые даты." -#: utils/misc/guc_tables.c:3970 +#: utils/misc/guc_tables.c:4118 msgid "Sets the default table access method for new tables." msgstr "Задаёт табличный метод доступа по умолчанию для новых таблиц." -#: utils/misc/guc_tables.c:3981 +#: utils/misc/guc_tables.c:4129 msgid "Sets the default tablespace to create tables and indexes in." msgstr "" "Задаёт табличное пространство по умолчанию для новых таблиц и индексов." -#: utils/misc/guc_tables.c:3982 +#: utils/misc/guc_tables.c:4130 msgid "An empty string selects the database's default tablespace." msgstr "При пустом значении используется табличное пространство базы данных." -#: utils/misc/guc_tables.c:3992 +#: 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:4003 +#: utils/misc/guc_tables.c:4151 msgid "" "Sets whether a CREATEROLE user automatically grants the role to themselves, " "and with which options." @@ -32443,11 +33943,11 @@ msgstr "" "Определяет, будет ли пользователь CREATEROLE автоматически включать себя в " "создаваемую роль и с какими параметрами." -#: utils/misc/guc_tables.c:4015 +#: utils/misc/guc_tables.c:4163 msgid "Sets the path for dynamically loadable modules." msgstr "Задаёт путь для динамически загружаемых модулей." -#: utils/misc/guc_tables.c:4016 +#: 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 " @@ -32457,71 +33957,71 @@ msgstr "" "указан путь (нет символа '/'), система будет искать этот файл в заданном " "пути." -#: utils/misc/guc_tables.c:4029 +#: utils/misc/guc_tables.c:4177 msgid "Sets the location of the Kerberos server key file." msgstr "Задаёт размещение файла с ключом Kerberos для данного сервера." -#: utils/misc/guc_tables.c:4040 +#: utils/misc/guc_tables.c:4188 msgid "Sets the Bonjour service name." msgstr "Задаёт название службы Bonjour." -#: utils/misc/guc_tables.c:4050 +#: utils/misc/guc_tables.c:4198 msgid "Sets the language in which messages are displayed." msgstr "Задаёт язык выводимых сообщений." -#: utils/misc/guc_tables.c:4060 +#: utils/misc/guc_tables.c:4208 msgid "Sets the locale for formatting monetary amounts." msgstr "Задаёт локаль для форматирования денежных сумм." -#: utils/misc/guc_tables.c:4070 +#: utils/misc/guc_tables.c:4218 msgid "Sets the locale for formatting numbers." msgstr "Задаёт локаль для форматирования чисел." -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4228 msgid "Sets the locale for formatting date and time values." msgstr "Задаёт локаль для форматирования дат и времени." -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4238 msgid "Lists shared libraries to preload into each backend." msgstr "" "Список разделяемых библиотек, заранее загружаемых в каждый обслуживающий " "процесс." -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4249 msgid "Lists shared libraries to preload into server." msgstr "Список разделяемых библиотек, заранее загружаемых в память сервера." -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4260 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "" "Список непривилегированных разделяемых библиотек, заранее загружаемых в " "каждый обслуживающий процесс." -#: utils/misc/guc_tables.c:4123 +#: 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:4135 +#: utils/misc/guc_tables.c:4283 msgid "Shows the server (database) character set encoding." msgstr "Показывает кодировку символов сервера (базы данных)." -#: utils/misc/guc_tables.c:4147 +#: utils/misc/guc_tables.c:4295 msgid "Shows the server version." msgstr "Показывает версию сервера." -#: utils/misc/guc_tables.c:4159 +#: utils/misc/guc_tables.c:4307 msgid "Sets the current role." msgstr "Задаёт текущую роль." -#: utils/misc/guc_tables.c:4171 +#: utils/misc/guc_tables.c:4319 msgid "Sets the session user name." msgstr "Задаёт имя пользователя в сеансе." -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4330 msgid "Sets the destination for server log output." msgstr "Определяет, куда будет выводиться протокол сервера." -#: utils/misc/guc_tables.c:4183 +#: utils/misc/guc_tables.c:4331 msgid "" "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", " "\"jsonlog\", and \"eventlog\", depending on the platform." @@ -32529,24 +34029,24 @@ msgstr "" "Значение может включать сочетание слов \"stderr\", \"syslog\", \"csvlog\", " "\"jsonlog\" и \"eventlog\", в зависимости от платформы." -#: utils/misc/guc_tables.c:4194 +#: utils/misc/guc_tables.c:4342 msgid "Sets the destination directory for log files." msgstr "Задаёт целевой каталог для файлов протоколов." -#: utils/misc/guc_tables.c:4195 +#: 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:4205 +#: utils/misc/guc_tables.c:4353 msgid "Sets the file name pattern for log files." msgstr "Задаёт шаблон имени для файлов протоколов." -#: utils/misc/guc_tables.c:4216 +#: utils/misc/guc_tables.c:4364 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Задаёт имя программы для идентификации сообщений PostgreSQL в syslog." -#: utils/misc/guc_tables.c:4227 +#: utils/misc/guc_tables.c:4375 msgid "" "Sets the application name used to identify PostgreSQL messages in the event " "log." @@ -32554,121 +34054,121 @@ msgstr "" "Задаёт имя приложения для идентификации сообщений PostgreSQL в журнале " "событий." -#: utils/misc/guc_tables.c:4238 +#: utils/misc/guc_tables.c:4386 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "" "Задаёт часовой пояс для вывода и разбора строкового представления времени." -#: utils/misc/guc_tables.c:4248 +#: utils/misc/guc_tables.c:4396 msgid "Selects a file of time zone abbreviations." msgstr "Выбирает файл с сокращёнными названиями часовых поясов." -#: utils/misc/guc_tables.c:4258 +#: utils/misc/guc_tables.c:4406 msgid "Sets the owning group of the Unix-domain socket." msgstr "Задаёт группу-владельца Unix-сокета." -#: utils/misc/guc_tables.c:4259 +#: 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:4269 +#: utils/misc/guc_tables.c:4417 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Задаёт каталоги, где будут создаваться Unix-сокеты." -#: utils/misc/guc_tables.c:4280 +#: 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:4295 +#: utils/misc/guc_tables.c:4443 msgid "Sets the server's data directory." msgstr "Определяет каталог данных сервера." -#: utils/misc/guc_tables.c:4306 +#: utils/misc/guc_tables.c:4454 msgid "Sets the server's main configuration file." msgstr "Определяет основной файл конфигурации сервера." -#: utils/misc/guc_tables.c:4317 +#: utils/misc/guc_tables.c:4465 msgid "Sets the server's \"hba\" configuration file." msgstr "Задаёт путь к файлу конфигурации \"hba\"." -#: utils/misc/guc_tables.c:4328 +#: utils/misc/guc_tables.c:4476 msgid "Sets the server's \"ident\" configuration file." msgstr "Задаёт путь к файлу конфигурации \"ident\"." -#: utils/misc/guc_tables.c:4339 +#: utils/misc/guc_tables.c:4487 msgid "Writes the postmaster PID to the specified file." msgstr "Файл, в который будет записан код процесса postmaster." -#: utils/misc/guc_tables.c:4350 +#: utils/misc/guc_tables.c:4498 msgid "Shows the name of the SSL library." msgstr "Показывает имя библиотеки SSL." -#: utils/misc/guc_tables.c:4365 +#: utils/misc/guc_tables.c:4513 msgid "Location of the SSL server certificate file." msgstr "Размещение файла сертификата сервера для SSL." -#: utils/misc/guc_tables.c:4375 +#: utils/misc/guc_tables.c:4523 msgid "Location of the SSL server private key file." msgstr "Размещение файла с закрытым ключом сервера для SSL." -#: utils/misc/guc_tables.c:4385 +#: utils/misc/guc_tables.c:4533 msgid "Location of the SSL certificate authority file." msgstr "Размещение файла центра сертификации для SSL." -#: utils/misc/guc_tables.c:4395 +#: utils/misc/guc_tables.c:4543 msgid "Location of the SSL certificate revocation list file." msgstr "Размещение файла со списком отзыва сертификатов для SSL." -#: utils/misc/guc_tables.c:4405 +#: utils/misc/guc_tables.c:4553 msgid "Location of the SSL certificate revocation list directory." msgstr "Размещение каталога со списками отзыва сертификатов для SSL." -#: utils/misc/guc_tables.c:4415 +#: 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:4426 +#: utils/misc/guc_tables.c:4574 msgid "Sets default text search configuration." msgstr "Задаёт конфигурацию текстового поиска по умолчанию." -#: utils/misc/guc_tables.c:4436 +#: utils/misc/guc_tables.c:4584 msgid "Sets the list of allowed SSL ciphers." msgstr "Задаёт список допустимых алгоритмов шифрования для SSL." -#: utils/misc/guc_tables.c:4451 +#: utils/misc/guc_tables.c:4599 msgid "Sets the curve to use for ECDH." msgstr "Задаёт кривую для ECDH." -#: utils/misc/guc_tables.c:4466 +#: utils/misc/guc_tables.c:4614 msgid "Location of the SSL DH parameters file." msgstr "Размещение файла с параметрами SSL DH." -#: utils/misc/guc_tables.c:4477 +#: utils/misc/guc_tables.c:4625 msgid "Command to obtain passphrases for SSL." msgstr "Команда, позволяющая получить пароль для SSL." -#: utils/misc/guc_tables.c:4488 +#: utils/misc/guc_tables.c:4636 msgid "Sets the application name to be reported in statistics and logs." msgstr "" "Задаёт имя приложения, которое будет выводиться в статистике и протоколах." -#: utils/misc/guc_tables.c:4499 +#: 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:4510 +#: utils/misc/guc_tables.c:4658 msgid "" "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "" "Задаёт перечень менеджеров ресурсов WAL, для которых выполняются проверки " "целостности WAL." -#: utils/misc/guc_tables.c:4511 +#: 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." @@ -32676,32 +34176,53 @@ msgstr "" "При этом в журнал будут записываться образы полных страниц для всех блоков " "данных для сверки с результатами воспроизведения WAL." -#: utils/misc/guc_tables.c:4521 +#: utils/misc/guc_tables.c:4669 msgid "JIT provider to use." msgstr "Используемый провайдер JIT." -#: utils/misc/guc_tables.c:4532 +#: utils/misc/guc_tables.c:4680 msgid "Log backtrace for errors in these functions." msgstr "Записывать в журнал стек в случае ошибок в перечисленных функциях." -#: utils/misc/guc_tables.c:4543 +#: utils/misc/guc_tables.c:4691 msgid "Use direct I/O for file access." msgstr "Использовать прямой ввод/вывод для работы с файлами." -#: utils/misc/guc_tables.c:4563 +#: 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 "" +"Процессы передачи логических изменений из WAL будут передавать " +"декодированные изменения модулям вывода только после того, как указанные " +"слоты репликации подтвердят получение WAL." + +#: utils/misc/guc_tables.c:4716 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "Запрещает доступ к несистемным отношениям указанных видов." + +#: utils/misc/guc_tables.c:4736 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Определяет, можно ли использовать \"\\'\" в текстовых строках." -#: utils/misc/guc_tables.c:4573 +#: utils/misc/guc_tables.c:4746 msgid "Sets the output format for bytea." msgstr "Задаёт формат вывода данных типа bytea." -#: utils/misc/guc_tables.c:4583 +#: utils/misc/guc_tables.c:4756 msgid "Sets the message levels that are sent to the client." msgstr "Ограничивает уровень сообщений, передаваемых клиенту." -#: utils/misc/guc_tables.c:4584 utils/misc/guc_tables.c:4680 -#: utils/misc/guc_tables.c:4691 utils/misc/guc_tables.c:4763 +#: 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." @@ -32709,16 +34230,16 @@ msgstr "" "Каждый уровень включает все последующие. Чем выше уровень, тем меньше " "сообщений." -#: utils/misc/guc_tables.c:4594 +#: utils/misc/guc_tables.c:4767 msgid "Enables in-core computation of query identifiers." msgstr "Включает внутреннее вычисление идентификаторов запросов." -#: utils/misc/guc_tables.c:4604 +#: utils/misc/guc_tables.c:4777 msgid "Enables the planner to use constraints to optimize queries." msgstr "" "Разрешает планировщику оптимизировать запросы, полагаясь на ограничения." -#: utils/misc/guc_tables.c:4605 +#: utils/misc/guc_tables.c:4778 msgid "" "Table scans will be skipped if their constraints guarantee that no rows " "match the query." @@ -32726,93 +34247,88 @@ msgstr "" "Сканирование таблицы не будет выполняться, если её ограничения гарантируют, " "что запросу не удовлетворяют никакие строки." -#: utils/misc/guc_tables.c:4616 +#: utils/misc/guc_tables.c:4789 msgid "Sets the default compression method for compressible values." msgstr "Задаёт выбираемый по умолчанию метод сжатия для сжимаемых значений." -#: utils/misc/guc_tables.c:4627 +#: utils/misc/guc_tables.c:4800 msgid "Sets the transaction isolation level of each new transaction." msgstr "Задаёт уровень изоляции транзакций для новых транзакций." -#: utils/misc/guc_tables.c:4637 +#: utils/misc/guc_tables.c:4810 msgid "Sets the current transaction's isolation level." msgstr "Задаёт текущий уровень изоляции транзакций." -#: utils/misc/guc_tables.c:4648 +#: utils/misc/guc_tables.c:4821 msgid "Sets the display format for interval values." msgstr "Задаёт формат отображения для внутренних значений." -#: utils/misc/guc_tables.c:4659 +#: utils/misc/guc_tables.c:4832 msgid "Log level for reporting invalid ICU locale strings." msgstr "Уровень протоколирования сообщений о некорректных строках локалей ICU." -#: utils/misc/guc_tables.c:4669 +#: utils/misc/guc_tables.c:4842 msgid "Sets the verbosity of logged messages." msgstr "Задаёт детализацию протоколируемых сообщений." -#: utils/misc/guc_tables.c:4679 +#: utils/misc/guc_tables.c:4852 msgid "Sets the message levels that are logged." msgstr "Ограничивает уровни протоколируемых сообщений." -#: utils/misc/guc_tables.c:4690 +#: utils/misc/guc_tables.c:4863 msgid "" "Causes all statements generating error at or above this level to be logged." msgstr "" "Включает протоколирование для SQL-операторов, выполненных с ошибкой этого " "или большего уровня." -#: utils/misc/guc_tables.c:4701 +#: utils/misc/guc_tables.c:4874 msgid "Sets the type of statements logged." msgstr "Задаёт тип протоколируемых операторов." -#: utils/misc/guc_tables.c:4711 +#: utils/misc/guc_tables.c:4884 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Задаёт получателя сообщений, отправляемых в syslog." -#: utils/misc/guc_tables.c:4722 +#: utils/misc/guc_tables.c:4895 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "" "Задаёт режим срабатывания триггеров и правил перезаписи для текущего сеанса." -#: utils/misc/guc_tables.c:4732 +#: utils/misc/guc_tables.c:4905 msgid "Sets the current transaction's synchronization level." msgstr "Задаёт уровень синхронизации текущей транзакции." -#: utils/misc/guc_tables.c:4742 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Разрешает архивацию файлов WAL командой archive_command." +#: utils/misc/guc_tables.c:4915 +msgid "Allows archiving of WAL files using \"archive_command\"." +msgstr "Разрешает архивацию файлов WAL с использованием \"archive_command\"." -#: utils/misc/guc_tables.c:4752 +#: utils/misc/guc_tables.c:4925 msgid "Sets the action to perform upon reaching the recovery target." msgstr "" "Задаёт действие, которое будет выполняться по достижении цели восстановления." -#: utils/misc/guc_tables.c:4762 -msgid "Enables logging of recovery-related debugging information." -msgstr "" -"Включает протоколирование отладочной информации, связанной с репликацией." - -#: utils/misc/guc_tables.c:4779 +#: utils/misc/guc_tables.c:4935 msgid "Collects function-level statistics on database activity." msgstr "Включает сбор статистики активности в БД на уровне функций." -#: utils/misc/guc_tables.c:4790 +#: utils/misc/guc_tables.c:4946 msgid "Sets the consistency of accesses to statistics data." msgstr "Задаёт режим согласования доступа к данным статистики." -#: utils/misc/guc_tables.c:4800 +#: 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:4810 +#: utils/misc/guc_tables.c:4966 msgid "Sets the level of information written to the WAL." msgstr "Задаёт уровень информации, записываемой в WAL." -#: utils/misc/guc_tables.c:4820 +#: utils/misc/guc_tables.c:4976 msgid "Selects the dynamic shared memory implementation used." msgstr "Выбирает используемую реализацию динамической разделяемой памяти." -#: utils/misc/guc_tables.c:4830 +#: utils/misc/guc_tables.c:4986 msgid "" "Selects the shared memory implementation used for the main shared memory " "region." @@ -32820,15 +34336,15 @@ msgstr "" "Выбирает реализацию разделяемой памяти для управления основным блоком " "разделяемой памяти." -#: utils/misc/guc_tables.c:4840 +#: utils/misc/guc_tables.c:4996 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Выбирает метод принудительной записи изменений в WAL на диск." -#: utils/misc/guc_tables.c:4850 +#: utils/misc/guc_tables.c:5006 msgid "Sets how binary values are to be encoded in XML." msgstr "Определяет, как должны кодироваться двоичные значения в XML." -#: utils/misc/guc_tables.c:4860 +#: 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." @@ -32836,23 +34352,27 @@ msgstr "" "Определяет, следует ли рассматривать XML-данные в неявных операциях разбора " "и сериализации как документы или как фрагменты содержания." -#: utils/misc/guc_tables.c:4871 +#: utils/misc/guc_tables.c:5027 msgid "Use of huge pages on Linux or Windows." msgstr "Включает использование огромных страниц в Linux и в Windows." -#: utils/misc/guc_tables.c:4881 +#: utils/misc/guc_tables.c:5037 +msgid "Indicates the status of huge pages." +msgstr "Показывает состояние использования огромных страниц." + +#: utils/misc/guc_tables.c:5048 msgid "Prefetch referenced blocks during recovery." msgstr "Осуществлять предвыборку изменяемых блоков в процессе восстановления." -#: utils/misc/guc_tables.c:4882 +#: utils/misc/guc_tables.c:5049 msgid "Look ahead in the WAL to find references to uncached data." msgstr "Прочитывать WAL наперёд для вычисления ещё не кешированных блоков." -#: utils/misc/guc_tables.c:4891 +#: utils/misc/guc_tables.c:5058 msgid "Forces the planner's use parallel query nodes." msgstr "Принудительно включает в планировщике узлы параллельного выполнения." -#: utils/misc/guc_tables.c:4892 +#: 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 " @@ -32862,15 +34382,15 @@ msgstr "" "выполнения, так как планировщик будет строить планы с передачей кортежей " "между параллельными исполнителями и основным процессом." -#: utils/misc/guc_tables.c:4904 +#: utils/misc/guc_tables.c:5071 msgid "Chooses the algorithm for encrypting passwords." msgstr "Выбирает алгоритм шифрования паролей." -#: utils/misc/guc_tables.c:4914 +#: utils/misc/guc_tables.c:5081 msgid "Controls the planner's selection of custom or generic plan." msgstr "Управляет выбором специализированных или общих планов планировщиком." -#: utils/misc/guc_tables.c:4915 +#: 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 " @@ -32880,30 +34400,30 @@ msgstr "" "планы, и планировщик пытается выбрать лучший вариант. Этот параметр " "позволяет переопределить поведение по умолчанию." -#: utils/misc/guc_tables.c:4927 +#: utils/misc/guc_tables.c:5094 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "" "Задаёт минимальную версию протокола SSL/TLS, которая может использоваться." -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:5106 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "" "Задаёт максимальную версию протокола SSL/TLS, которая может использоваться." -#: utils/misc/guc_tables.c:4951 +#: utils/misc/guc_tables.c:5118 msgid "" "Sets the method for synchronizing the data directory before crash recovery." msgstr "" "Задаёт метод синхронизации каталога данных перед восстановления после сбоя." -#: utils/misc/guc_tables.c:4960 +#: utils/misc/guc_tables.c:5127 msgid "" "Forces immediate streaming or serialization of changes in large transactions." msgstr "" "Включает непосредственную передачу или сериализацию изменений в больших " "транзакциях." -#: utils/misc/guc_tables.c:4961 +#: 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 " @@ -32921,8 +34441,8 @@ msgstr "" msgid "internal error: unrecognized run-time parameter type\n" msgstr "внутренняя ошибка: нераспознанный тип параметра времени выполнения\n" -#: utils/misc/pg_controldata.c:51 utils/misc/pg_controldata.c:91 -#: utils/misc/pg_controldata.c:182 utils/misc/pg_controldata.c:223 +#: utils/misc/pg_controldata.c:50 utils/misc/pg_controldata.c:90 +#: utils/misc/pg_controldata.c:181 utils/misc/pg_controldata.c:222 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "" @@ -32951,12 +34471,12 @@ msgstr "" "Чтобы отключить политику для владельца таблицы, воспользуйтесь командой " "ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:524 +#: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" msgstr "добавить другие причины тайм-аута нельзя" -#: utils/misc/tzparser.c:60 +#: utils/misc/tzparser.c:61 #, c-format msgid "" "time zone abbreviation \"%s\" is too long (maximum %d characters) in time " @@ -32965,44 +34485,44 @@ msgstr "" "краткое обозначение часового пояса \"%s\" должно содержать меньше символов " "(максимум %d) (файл часовых поясов \"%s\", строка %d)" -#: utils/misc/tzparser.c:72 +#: utils/misc/tzparser.c:73 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "" "смещение часового пояса %d выходит за рамки (файл часовых поясов \"%s\", " "строка %d)" -#: utils/misc/tzparser.c:111 +#: utils/misc/tzparser.c:112 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "" "отсутствует краткое обозначение часового пояса (файл часовых поясов \"%s\", " "строка %d)" -#: utils/misc/tzparser.c:120 +#: utils/misc/tzparser.c:121 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "" "отсутствует смещение часового пояса (файл часовых поясов \"%s\", строка %d)" -#: utils/misc/tzparser.c:132 +#: utils/misc/tzparser.c:133 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "" "смещение часового пояса должно быть числом (файл часовых поясов \"%s\", " "строка %d)" -#: utils/misc/tzparser.c:168 +#: utils/misc/tzparser.c:169 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "ошибка синтаксиса в файле часовых поясов \"%s\", строке %d" -#: utils/misc/tzparser.c:236 +#: utils/misc/tzparser.c:237 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "краткое обозначение часового пояса \"%s\" определено неоднократно" -#: utils/misc/tzparser.c:238 +#: utils/misc/tzparser.c:239 #, c-format msgid "" "Entry in time zone file \"%s\", line %d, conflicts with entry in file " @@ -33011,86 +34531,84 @@ msgstr "" "Запись в файле часовых поясов \"%s\", строке %d, противоречит записи в файле " "\"%s\", строке %d." -#: utils/misc/tzparser.c:300 +#: utils/misc/tzparser.c:301 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "неправильное имя файла часовых поясов: \"%s\"" -#: utils/misc/tzparser.c:313 +#: utils/misc/tzparser.c:314 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "предел вложенности файлов часовых поясов превышен в файле \"%s\"" -#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 +#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "прочитать файл часовых поясов \"%s\" не удалось: %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:377 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "слишком длинная строка в файле часовых поясов \"%s\" (строка %d)" -#: utils/misc/tzparser.c:400 +#: utils/misc/tzparser.c:401 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "" "в @INCLUDE не указано имя файла (файл часовых поясов \"%s\", строка %d)" -#: utils/mmgr/aset.c:446 utils/mmgr/generation.c:206 utils/mmgr/slab.c:367 +#: utils/mmgr/aset.c:452 utils/mmgr/bump.c:184 utils/mmgr/generation.c:216 +#: utils/mmgr/slab.c:371 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Ошибка при создании контекста памяти \"%s\"." -#: utils/mmgr/dsa.c:532 utils/mmgr/dsa.c:1350 +#: utils/mmgr/dsa.c:523 utils/mmgr/dsa.c:1364 #, c-format msgid "could not attach to dynamic shared area" msgstr "не удалось подключиться к динамической разделяемой области" -#: utils/mmgr/mcxt.c:1047 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1121 -#: utils/mmgr/mcxt.c:1159 utils/mmgr/mcxt.c:1247 utils/mmgr/mcxt.c:1278 -#: utils/mmgr/mcxt.c:1314 utils/mmgr/mcxt.c:1503 utils/mmgr/mcxt.c:1548 -#: utils/mmgr/mcxt.c:1605 +#: utils/mmgr/mcxt.c:1155 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Ошибка при запросе блока размером %zu в контексте памяти \"%s\"." -#: utils/mmgr/mcxt.c:1210 +#: utils/mmgr/mcxt.c:1299 #, c-format msgid "logging memory contexts of PID %d" msgstr "вывод информации о памяти процесса с PID %d" -#: utils/mmgr/portalmem.c:188 +#: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" msgstr "курсор \"%s\" уже существует" -#: utils/mmgr/portalmem.c:192 +#: utils/mmgr/portalmem.c:191 #, c-format msgid "closing existing cursor \"%s\"" msgstr "существующий курсор (\"%s\") закрывается" -#: utils/mmgr/portalmem.c:402 +#: utils/mmgr/portalmem.c:401 #, c-format msgid "portal \"%s\" cannot be run" msgstr "портал \"%s\" не может быть запущен" -#: utils/mmgr/portalmem.c:480 +#: utils/mmgr/portalmem.c:479 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "удалить закреплённый портал \"%s\" нельзя" -#: utils/mmgr/portalmem.c:488 +#: utils/mmgr/portalmem.c:487 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "удалить активный портал \"%s\" нельзя" -#: utils/mmgr/portalmem.c:739 +#: utils/mmgr/portalmem.c:738 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "нельзя выполнить PREPARE для транзакции, создавшей курсор WITH HOLD" -#: utils/mmgr/portalmem.c:1230 +#: utils/mmgr/portalmem.c:1232 #, c-format msgid "" "cannot perform transaction commands inside a cursor loop that is not read-" @@ -33101,15 +34619,15 @@ msgstr "" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %ld of temporary file" -msgstr "не удалось переместиться к блоку %ld временного файла" +msgid "could not seek to block %lld of temporary file" +msgstr "не удалось переместиться к блоку %lld временного файла" -#: utils/sort/sharedtuplestore.c:467 +#: utils/sort/sharedtuplestore.c:466 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "неожиданный фрагмент в файле общего временного хранилища кортежей" -#: utils/sort/sharedtuplestore.c:549 +#: utils/sort/sharedtuplestore.c:548 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "" @@ -33121,17 +34639,17 @@ msgstr "" msgid "cannot have more than %d runs for an external sort" msgstr "число потоков данных для внешней сортировки не может превышать %d" -#: utils/sort/tuplesortvariants.c:1363 +#: utils/sort/tuplesortvariants.c:1552 #, c-format msgid "could not create unique index \"%s\"" msgstr "создать уникальный индекс \"%s\" не удалось" -#: utils/sort/tuplesortvariants.c:1365 +#: utils/sort/tuplesortvariants.c:1554 #, c-format msgid "Key %s is duplicated." msgstr "Ключ %s дублируется." -#: utils/sort/tuplesortvariants.c:1366 +#: utils/sort/tuplesortvariants.c:1555 #, c-format msgid "Duplicate keys exist." msgstr "Данные содержат дублирующиеся ключи." @@ -33145,32 +34663,32 @@ msgstr "Данные содержат дублирующиеся ключи." msgid "could not seek in tuplestore temporary file" msgstr "не удалось переместиться во временном файле хранилища кортежей" -#: utils/time/snapmgr.c:571 +#: utils/time/snapmgr.c:536 #, c-format msgid "The source transaction is not running anymore." msgstr "Исходная транзакция уже не выполняется." -#: utils/time/snapmgr.c:1166 +#: utils/time/snapmgr.c:1136 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "экспортировать снимок из вложенной транзакции нельзя" -#: utils/time/snapmgr.c:1325 utils/time/snapmgr.c:1330 -#: utils/time/snapmgr.c:1335 utils/time/snapmgr.c:1350 -#: utils/time/snapmgr.c:1355 utils/time/snapmgr.c:1360 -#: utils/time/snapmgr.c:1375 utils/time/snapmgr.c:1380 -#: utils/time/snapmgr.c:1385 utils/time/snapmgr.c:1487 -#: utils/time/snapmgr.c:1503 utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 +#: utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 +#: utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "неверные данные снимка в файле \"%s\"" -#: utils/time/snapmgr.c:1422 +#: utils/time/snapmgr.c:1393 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "команда SET TRANSACTION SNAPSHOT должна выполняться до запросов" -#: utils/time/snapmgr.c:1431 +#: utils/time/snapmgr.c:1402 #, c-format msgid "" "a snapshot-importing transaction must have isolation level SERIALIZABLE or " @@ -33179,12 +34697,17 @@ msgstr "" "транзакция, импортирующая снимок, должна иметь уровень изоляции SERIALIZABLE " "или REPEATABLE READ" -#: utils/time/snapmgr.c:1440 utils/time/snapmgr.c:1449 +#: utils/time/snapmgr.c:1411 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "неверный идентификатор снимка: \"%s\"" -#: utils/time/snapmgr.c:1541 +#: utils/time/snapmgr.c:1426 +#, c-format +msgid "snapshot \"%s\" does not exist" +msgstr "снимок \"%s\" не существует" + +#: utils/time/snapmgr.c:1524 #, c-format msgid "" "a serializable transaction cannot import a snapshot from a non-serializable " @@ -33192,7 +34715,7 @@ msgid "" msgstr "" "сериализуемая транзакция не может импортировать снимок из не сериализуемой" -#: utils/time/snapmgr.c:1545 +#: utils/time/snapmgr.c:1528 #, c-format msgid "" "a non-read-only serializable transaction cannot import a snapshot from a " @@ -33201,279 +34724,294 @@ msgstr "" "сериализуемая транзакция в режиме \"чтение-запись\" не может импортировать " "снимок из транзакции в режиме \"только чтение\"" -#: utils/time/snapmgr.c:1560 +#: utils/time/snapmgr.c:1543 #, c-format msgid "cannot import a snapshot from a different database" msgstr "нельзя импортировать снимок из другой базы данных" -#: gram.y:1197 +#: gram.y:1231 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "вариант UNENCRYPTED PASSWORD более не поддерживается" -#: gram.y:1198 +#: gram.y:1232 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "" "Удалите слово UNENCRYPTED, чтобы сохранить пароль в зашифрованном виде." -#: gram.y:1525 gram.y:1541 +#: 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:1693 +#: gram.y:1727 #, c-format msgid "current database cannot be changed" msgstr "сменить текущую базу данных нельзя" -#: gram.y:1826 +#: gram.y:1860 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "" "интервал, задающий часовой пояс, должен иметь точность HOUR или HOUR TO " "MINUTE" -#: gram.y:2443 +#: gram.y:2487 #, c-format msgid "column number must be in range from 1 to %d" msgstr "номер столбца должен быть в диапазоне от 1 до %d" -#: gram.y:3039 +#: gram.y:3083 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "параметр последовательности \"%s\" здесь не поддерживается" -#: gram.y:3068 +#: gram.y:3122 #, c-format msgid "modulus for hash partition provided more than once" msgstr "модуль для хеш-секции указан неоднократно" -#: gram.y:3077 +#: gram.y:3131 #, c-format msgid "remainder for hash partition provided more than once" msgstr "остаток для хеш-секции указан неоднократно" -#: gram.y:3084 +#: gram.y:3138 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "нераспознанное указание ограничения хеш-секции \"%s\"" -#: gram.y:3092 +#: gram.y:3146 #, c-format msgid "modulus for hash partition must be specified" msgstr "необходимо указать модуль для хеш-секции" -#: gram.y:3096 +#: gram.y:3150 #, c-format msgid "remainder for hash partition must be specified" msgstr "необходимо указать остаток для хеш-секции" -#: gram.y:3304 gram.y:3338 +#: gram.y:3358 gram.y:3392 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "указания STDIN/STDOUT несовместимы с PROGRAM" -#: gram.y:3310 +#: gram.y:3364 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "предложение WHERE не допускается с COPY TO" -#: gram.y:3649 gram.y:3656 gram.y:12821 gram.y:12829 +#: 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:3932 +#: gram.y:3995 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "для генерируемого столбца должно указываться GENERATED ALWAYS" -#: gram.y:4315 +#: gram.y:4432 #, c-format msgid "a column list with %s is only supported for ON DELETE actions" msgstr "список столбцов с %s поддерживается только для действий ON DELETE" -#: gram.y:5027 +#: gram.y:5151 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM более не поддерживается" -#: gram.y:5725 +#: gram.y:5849 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "нераспознанный вариант политики безопасности строк \"%s\"" -#: gram.y:5726 +#: gram.y:5850 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "" "В настоящее время поддерживаются только политики PERMISSIVE и RESTRICTIVE." -#: gram.y:5811 +#: gram.y:5935 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER не поддерживается" -#: gram.y:5848 +#: gram.y:5972 msgid "duplicate trigger events specified" msgstr "события триггера повторяются" -#: gram.y:5997 +#: gram.y:6121 #, c-format msgid "conflicting constraint properties" msgstr "противоречащие характеристики ограничения" -#: gram.y:6096 +#: gram.y:6220 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "оператор CREATE ASSERTION ещё не реализован" -#: gram.y:6504 +#: gram.y:6537 +#, c-format +msgid "dropping an enum value is not implemented" +msgstr "удаление значения из перечисления не поддерживается" + +#: gram.y:6655 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK более не требуется" -#: gram.y:6505 +#: gram.y:6656 #, c-format msgid "Update your data type." msgstr "Обновите тип данных." -#: gram.y:8378 +#: gram.y:8529 #, c-format msgid "aggregates cannot have output arguments" msgstr "у агрегатных функций не может быть выходных аргументов" -#: gram.y:11054 gram.y:11073 +#: gram.y:11221 gram.y:11240 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "" "предложение WITH CHECK OPTION не поддерживается для рекурсивных представлений" -#: gram.y:12960 +#: gram.y:13162 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "синтаксис LIMIT #,# не поддерживается" -#: gram.y:12961 +#: gram.y:13163 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Используйте отдельные предложения LIMIT и OFFSET." -#: gram.y:13821 +#: gram.y:14038 #, c-format msgid "only one DEFAULT value is allowed" msgstr "допускается только одно значение DEFAULT" -#: gram.y:13830 +#: gram.y:14047 #, c-format msgid "only one PATH value per column is allowed" msgstr "для столбца допускается только одно значение PATH" -#: gram.y:13839 +#: gram.y:14056 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "" "конфликтующие или избыточные объявления NULL/NOT NULL для столбца \"%s\"" -#: gram.y:13848 +#: gram.y:14065 #, c-format msgid "unrecognized column option \"%s\"" msgstr "нераспознанный параметр столбца \"%s\"" -#: gram.y:14102 +#: gram.y:14147 +#, c-format +msgid "only string constants are supported in JSON_TABLE path specification" +msgstr "в указании пути JSON_TABLE поддерживаются только строковые константы" + +#: gram.y:14469 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "тип float должен иметь точность минимум 1 бит" -#: gram.y:14111 +#: gram.y:14478 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "тип float должен иметь точность меньше 54 бит" -#: gram.y:14614 +#: gram.y:14995 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "неверное число параметров в левой части выражения OVERLAPS" -#: gram.y:14619 +#: gram.y:15000 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "неверное число параметров в правой части выражения OVERLAPS" -#: gram.y:14796 +#: gram.y:15177 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "предикат UNIQUE ещё не реализован" -#: gram.y:15212 +#: gram.y:15591 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "ORDER BY с WITHIN GROUP можно указать только один раз" -#: gram.y:15217 +#: gram.y:15596 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT нельзя использовать с WITHIN GROUP" -#: gram.y:15222 +#: gram.y:15601 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC нельзя использовать с WITHIN GROUP" -#: gram.y:15856 gram.y:15880 +#: gram.y:16328 gram.y:16352 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "началом рамки не может быть UNBOUNDED FOLLOWING" -#: gram.y:15861 +#: gram.y:16333 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "" "рамка, начинающаяся со следующей строки, не может заканчиваться текущей" -#: gram.y:15885 +#: gram.y:16357 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "концом рамки не может быть UNBOUNDED PRECEDING" -#: gram.y:15891 +#: gram.y:16363 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "" "рамка, начинающаяся с текущей строки, не может иметь предшествующих строк" -#: gram.y:15898 +#: gram.y:16370 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "" "рамка, начинающаяся со следующей строки, не может иметь предшествующих строк" -#: gram.y:16659 +#: gram.y:16919 +#, c-format +msgid "unrecognized JSON encoding: %s" +msgstr "нераспознанная кодировка JSON: %s" + +#: gram.y:17243 #, c-format msgid "type modifier cannot have parameter name" msgstr "параметр функции-модификатора типа должен быть безымянным" -#: gram.y:16665 +#: gram.y:17249 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "модификатор типа не может включать ORDER BY" -#: gram.y:16733 gram.y:16740 gram.y:16747 +#: 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:16837 gram.y:18294 +#: 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:17973 gram.y:18160 +#: gram.y:18597 gram.y:18772 msgid "improper use of \"*\"" msgstr "недопустимое использование \"*\"" -#: gram.y:18224 +#: gram.y:18836 #, c-format msgid "" "an ordered-set aggregate with a VARIADIC direct argument must have one " @@ -33482,70 +35020,70 @@ msgstr "" "сортирующая агрегатная функция с непосредственным аргументом VARIADIC должна " "иметь один агрегатный аргумент VARIADIC того же типа данных" -#: gram.y:18261 +#: gram.y:18873 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "ORDER BY можно указать только один раз" -#: gram.y:18272 +#: gram.y:18884 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "OFFSET можно указать только один раз" -#: gram.y:18281 +#: gram.y:18893 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "LIMIT можно указать только один раз" -#: gram.y:18290 +#: gram.y:18902 #, c-format msgid "multiple limit options not allowed" msgstr "параметры LIMIT можно указать только один раз" -#: gram.y:18317 +#: gram.y:18929 #, c-format msgid "multiple WITH clauses not allowed" msgstr "WITH можно указать только один раз" -#: gram.y:18510 +#: gram.y:19122 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "в табличных функциях не может быть аргументов OUT и INOUT" -#: gram.y:18643 +#: gram.y:19255 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "COLLATE можно указать только один раз" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18681 gram.y:18694 +#: gram.y:19293 gram.y:19306 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "ограничения %s не могут иметь характеристики DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18707 +#: gram.y:19319 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "ограничения %s не могут иметь характеристики NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18720 +#: gram.y:19332 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "ограничения %s не могут иметь характеристики NO INHERIT" -#: gram.y:18742 +#: gram.y:19354 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "нераспознанная стратегия секционирования \"%s\"" -#: gram.y:18766 +#: gram.y:19378 #, c-format msgid "invalid publication object list" msgstr "неверный список объектов публикации" -#: gram.y:18767 +#: gram.y:19379 #, c-format msgid "" "One of TABLE or TABLES IN SCHEMA must be specified before a standalone table " @@ -33554,22 +35092,22 @@ msgstr "" "Перед именем отдельной таблицы или схемы нужно указать TABLE либо TABLES IN " "SCHEMA." -#: gram.y:18783 +#: gram.y:19395 #, c-format msgid "invalid table name" msgstr "неверное имя таблицы" -#: gram.y:18804 +#: gram.y:19416 #, c-format msgid "WHERE clause not allowed for schema" msgstr "предложение WHERE не допускается для схемы" -#: gram.y:18811 +#: gram.y:19423 #, c-format msgid "column specification not allowed for schema" msgstr "указание столбца не допускается для схемы" -#: gram.y:18825 +#: gram.y:19437 #, c-format msgid "invalid schema name" msgstr "неверное имя схемы" @@ -33618,12 +35156,18 @@ msgstr "" "обнаружено слишком много синтаксических ошибок, обработка файла \"%s\" " "прекращается" -#: jsonpath_gram.y:529 +# skip-rule: space-after-comma, space-before-period +#: jsonpath_gram.y:267 +#, c-format +msgid ".decimal() can only have an optional precision[,scale]." +msgstr "Аргументами .decimal() могут быть только точность[,масштаб]." + +#: jsonpath_gram.y:599 #, c-format msgid "Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate." msgstr "Нераспознанный символ флага \"%.*s\" в предикате LIKE_REGEX." -#: jsonpath_gram.y:607 +#: jsonpath_gram.y:677 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "" @@ -33641,7 +35185,7 @@ msgstr "неверная последовательность шестнадца msgid "unexpected end after backslash" msgstr "неожиданный конец строки после обратной косой черты" -#: jsonpath_scan.l:201 repl_scanner.l:209 scan.l:741 +#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:756 msgid "unterminated quoted string" msgstr "незавершённая строка в кавычках" @@ -33653,8 +35197,8 @@ msgstr "неожиданный конец комментария" msgid "invalid numeric literal" msgstr "неверная числовая строка" -#: jsonpath_scan.l:325 jsonpath_scan.l:331 jsonpath_scan.l:337 scan.l:1049 -#: scan.l:1053 scan.l:1057 scan.l:1061 scan.l:1065 scan.l:1069 scan.l:1073 +#: 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 "мусорное содержимое после числовой константы" @@ -33670,70 +35214,70 @@ msgstr "%s в конце аргумента jsonpath" msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s в строке jsonpath (примерное положение: \"%s\")" -#: jsonpath_scan.l:557 +#: jsonpath_scan.l:568 msgid "invalid input" msgstr "некорректные входные данные" -#: jsonpath_scan.l:583 +#: jsonpath_scan.l:594 msgid "invalid hexadecimal digit" msgstr "неверная шестнадцатеричная цифра" -#: jsonpath_scan.l:614 +#: jsonpath_scan.l:625 #, c-format msgid "could not convert Unicode to server encoding" msgstr "не удалось преобразовать символ Unicode в серверную кодировку" -#: repl_gram.y:301 repl_gram.y:333 +#: repl_gram.y:318 repl_gram.y:359 #, c-format msgid "invalid timeline %u" msgstr "неверная линия времени %u" -#: repl_scanner.l:152 +#: repl_scanner.l:154 msgid "invalid streaming start location" msgstr "неверная позиция начала потока" -#: scan.l:482 +#: scan.l:497 msgid "unterminated /* comment" msgstr "незавершённый комментарий /*" -#: scan.l:502 +#: scan.l:517 msgid "unterminated bit string literal" msgstr "оборванная битовая строка" -#: scan.l:516 +#: scan.l:531 msgid "unterminated hexadecimal string literal" msgstr "оборванная шестнадцатеричная строка" -#: scan.l:566 +#: scan.l:581 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "небезопасное использование строковой константы со спецкодами Unicode" -#: scan.l:567 +#: scan.l:582 #, c-format msgid "" "String constants with Unicode escapes cannot be used when " -"standard_conforming_strings is off." +"\"standard_conforming_strings\" is off." msgstr "" "Строки со спецкодами Unicode нельзя использовать, когда параметр " -"standard_conforming_strings выключен." +"\"standard_conforming_strings\" выключен." -#: scan.l:628 +#: scan.l:643 msgid "unhandled previous state in xqs" msgstr "" "необрабатываемое предыдущее состояние при обнаружении закрывающего апострофа" -#: scan.l:702 +#: scan.l:717 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Спецкоды Unicode должны иметь вид \\uXXXX или \\UXXXXXXXX." -#: scan.l:713 +#: scan.l:728 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "небезопасное использование символа \\' в строке" -#: scan.l:714 +#: scan.l:729 #, c-format msgid "" "Use '' to write quotes in strings. \\' is insecure in client-only encodings." @@ -33741,56 +35285,56 @@ msgstr "" "Записывайте апостроф в строке в виде ''. Запись \\' небезопасна для " "исключительно клиентских кодировок." -#: scan.l:786 +#: scan.l:801 msgid "unterminated dollar-quoted string" msgstr "незавершённая строка с $" -#: scan.l:803 scan.l:813 +#: scan.l:818 scan.l:828 msgid "zero-length delimited identifier" msgstr "пустой идентификатор в кавычках" -#: scan.l:824 syncrep_scanner.l:101 +#: scan.l:839 syncrep_scanner.l:101 msgid "unterminated quoted identifier" msgstr "незавершённый идентификатор в кавычках" -#: scan.l:987 +#: scan.l:1002 msgid "operator too long" msgstr "слишком длинный оператор" -#: scan.l:1000 +#: scan.l:1015 msgid "trailing junk after parameter" msgstr "мусорное содержимое после параметра" -#: scan.l:1021 +#: scan.l:1036 msgid "invalid hexadecimal integer" msgstr "неверное шестнадцатеричное целое" -#: scan.l:1025 +#: scan.l:1040 msgid "invalid octal integer" msgstr "неверное восьмеричное целое" -#: scan.l:1029 +#: scan.l:1044 msgid "invalid binary integer" msgstr "неверное двоичное целое" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1236 +#: 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:1244 +#: scan.l:1247 #, c-format msgid "%s at or near \"%s\"" msgstr "%s (примерное положение: \"%s\")" -#: scan.l:1434 +#: scan.l:1439 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "нестандартное применение \\' в строке" -#: scan.l:1435 +#: scan.l:1440 #, c-format msgid "" "Use '' to write quotes in strings, or use the escape string syntax (E'...')." @@ -33798,27 +35342,323 @@ msgstr "" "Записывайте апостроф в строках в виде '' или используйте синтаксис спецстрок " "(E'...')." -#: scan.l:1444 +#: scan.l:1449 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "нестандартное применение \\\\ в строке" -#: scan.l:1445 +#: scan.l:1450 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "" "Используйте для записи обратных слэшей синтаксис спецстрок, например E'\\\\'." -#: scan.l:1459 +#: scan.l:1464 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "нестандартное использование спецсимвола в строке" -#: scan.l:1460 +#: scan.l:1465 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Используйте для записи спецсимволов синтаксис спецстрок E'\\r\\n'." +#, c-format +#~ msgid "cannot use RETURNING type %s in %s" +#~ msgstr "использовать в RETURNING тип %s в %s нельзя" + +#, c-format +#~ msgid "Please report this to <%s>." +#~ msgstr "Пожалуйста, напишите об этой ошибке по адресу <%s>." + +#, c-format +#~ msgid "MinWords should be less than MaxWords" +#~ msgstr "Значение MinWords должно быть меньше MaxWords" + +#, c-format +#~ msgid "MinWords should be positive" +#~ msgstr "Значение MinWords должно быть положительным" + +#, c-format +#~ msgid "ShortWord should be >= 0" +#~ msgstr "Значение ShortWord должно быть >= 0" + +#, c-format +#~ msgid "MaxFragments should be >= 0" +#~ msgstr "Значение MaxFragments должно быть >= 0" + +#, c-format +#~ msgid "" +#~ "database is not accepting commands to avoid wraparound data loss in " +#~ "database \"%s\"" +#~ msgstr "" +#~ "база данных не принимает команды во избежание потери данных из-за " +#~ "зацикливания транзакций в базе данных \"%s\"" + +#, c-format +#~ msgid "" +#~ "Stop the postmaster and vacuum that database in single-user mode.\n" +#~ "You might also need to commit or roll back old prepared transactions, or " +#~ "drop stale replication slots." +#~ msgstr "" +#~ "Остановите управляющий процесс (postmaster) и выполните очистку (VACUUM) " +#~ "базы данных в монопольном режиме.\n" +#~ "Возможно, вам также придётся зафиксировать или откатить старые " +#~ "подготовленные транзакции и удалить неиспользуемые слоты репликации." + +#, c-format +#~ msgid "" +#~ "database is not accepting commands to avoid wraparound data loss in " +#~ "database with OID %u" +#~ msgstr "" +#~ "база данных не принимает команды во избежание потери данных из-за " +#~ "зацикливания транзакций в базе данных с OID %u" + +#, c-format +#~ msgid "cannot commit subtransactions during a parallel operation" +#~ msgstr "фиксировать подтранзакции во время параллельных операций нельзя" + +#, c-format +#~ msgid "invalid segment number %d in file \"%s\"" +#~ msgstr "неверный номер сегмента %d в файле \"%s\"" + +#, c-format +#~ msgid "-X requires a power of two value between 1 MB and 1 GB" +#~ msgstr "" +#~ "для -X требуется число, равное степени двух, в интервале от 1 МБ до 1 ГБ" + +#, c-format +#~ msgid "invalid parameter name \"%s\"" +#~ msgstr "неверное имя параметра \"%s\"" + +#, c-format +#~ msgid "MERGE not supported in COPY" +#~ msgstr "MERGE не поддерживается в COPY" + +#, c-format +#~ msgid "cannot specify DELIMITER in BINARY mode" +#~ msgstr "в режиме BINARY нельзя указывать DELIMITER" + +#, c-format +#~ msgid "cannot specify DEFAULT in BINARY mode" +#~ msgstr "в режиме BINARY нельзя указывать DEFAULT" + +#, c-format +#~ msgid "cannot specify HEADER in BINARY mode" +#~ msgstr "в режиме BINARY нельзя использовать HEADER" + +#, c-format +#~ msgid "COPY quote available only in CSV mode" +#~ msgstr "определить кавычки для COPY можно только в режиме CSV" + +#, c-format +#~ msgid "COPY escape available only in CSV mode" +#~ msgstr "определить спецсимвол для COPY можно только в режиме CSV" + +#, c-format +#~ msgid "COPY force quote available only in CSV mode" +#~ msgstr "" +#~ "параметр force quote для COPY можно использовать только в режиме CSV" + +#, c-format +#~ msgid "COPY force quote only available using COPY TO" +#~ msgstr "параметр force quote для COPY можно использовать только с COPY TO" + +#, c-format +#~ msgid "COPY force not null available only in CSV mode" +#~ msgstr "" +#~ "параметр force not null для COPY можно использовать только в режиме CSV" + +#, c-format +#~ msgid "COPY force not null only available using COPY FROM" +#~ msgstr "" +#~ "параметр force not null для COPY можно использовать только с COPY FROM" + +#, c-format +#~ msgid "COPY force null available only in CSV mode" +#~ msgstr "параметр force null для COPY можно использовать только в режиме CSV" + +#, c-format +#~ msgid "COPY force null only available using COPY FROM" +#~ msgstr "параметр force null для COPY можно использовать только с COPY FROM" + +#, c-format +#~ msgid "COPY DEFAULT only available using COPY FROM" +#~ msgstr "параметр DEFAULT для COPY можно использовать только с COPY FROM" + +#, c-format +#~ msgid "COPY delimiter must not appear in the DEFAULT specification" +#~ msgstr "" +#~ "разделитель для COPY не должен присутствовать в представлении DEFAULT" + +#, c-format +#~ msgid "CSV quote character must not appear in the DEFAULT specification" +#~ msgstr "" +#~ "символ кавычек в CSV не должен присутствовать в представлении DEFAULT" + +#, 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 "cannot create exclusion constraints on partitioned table \"%s\"" +#~ msgstr "" +#~ "создать ограничение-исключение в секционированной таблице \"%s\" нельзя" + +#, c-format +#~ msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" +#~ msgstr "" +#~ "перестроить нерабочий индекс \"%s.%s\" неблокирующим способом нельзя, он " +#~ "пропускается" + +#, c-format +#~ msgid "" +#~ "specifying a table access method is not supported on a partitioned table" +#~ msgstr "" +#~ "указание табличного метода доступа для секционированных таблиц не " +#~ "поддерживаются" + +#, c-format +#~ msgid "cannot change access method of a partitioned table" +#~ msgstr "менять метод доступа для секционированной таблицы нельзя" + +#, c-format +#~ msgid "" +#~ "MD5 authentication is not supported when \"db_user_namespace\" is enabled" +#~ msgstr "" +#~ "проверка подлинности MD5 не поддерживается, когда включён режим " +#~ "\"db_user_namespace\"" + +#, c-format +#~ msgid "could not unbind after searching for user \"%s\" on server \"%s\"" +#~ msgstr "" +#~ "не удалось отвязаться после поиска пользователя \"%s\" на сервере \"%s\"" + +#, c-format +#~ msgid "MERGE not supported in WITH query" +#~ msgstr "MERGE не поддерживается в запросе WITH" + +#, c-format +#~ msgid "IS DISTINCT FROM requires = operator to yield boolean" +#~ msgstr "" +#~ "для IS DISTINCT FROM требуется, чтобы оператор = возвращал логическое " +#~ "значение" + +#, c-format +#~ msgid "could not fork autovacuum launcher process: %m" +#~ msgstr "породить процесс запуска автоочистки не удалось: %m" + +#, c-format +#~ msgid "could not fork autovacuum worker process: %m" +#~ msgstr "не удалось породить рабочий процесс автоочистки: %m" + +#, c-format +#~ msgid "" +#~ "Consider increasing the configuration parameter \"max_worker_processes\"." +#~ msgstr "Возможно, стоит увеличить параметр \"max_worker_processes\"." + +#, c-format +#~ msgid "could not fork startup process: %m" +#~ msgstr "породить стартовый процесс не удалось: %m" + +#, c-format +#~ msgid "could not fork archiver process: %m" +#~ msgstr "породить процесс архиватора не удалось: %m" + +#, c-format +#~ msgid "could not fork checkpointer process: %m" +#~ msgstr "породить процесс контрольных точек не удалось: %m" + +#, c-format +#~ msgid "could not fork WAL writer process: %m" +#~ msgstr "породить процесс записи WAL не удалось: %m" + +#, c-format +#~ msgid "could not fork WAL receiver process: %m" +#~ msgstr "породить процесс считывания WAL не удалось: %m" + +#, c-format +#~ msgid "could not fork worker process: %m" +#~ msgstr "породить рабочий процесс не удалось: %m" + +#, c-format +#~ msgid "could not remove file \"%s\": %s\n" +#~ msgstr "не удалось стереть файл \"%s\": %s\n" + +#, c-format +#~ msgid "publication_names parameter missing" +#~ msgstr "отсутствует параметр publication_names" + +#, c-format +#~ msgid "snapshot too old" +#~ msgstr "снимок слишком стар" + +#, c-format +#~ msgid "must be superuser to rotate log files with adminpack 1.0" +#~ msgstr "" +#~ "прокручивать файлы протоколов, используя adminpack 1.0, может только " +#~ "суперпользователь" + +#, c-format +#~ msgid "Consider using %s, which is part of core, instead." +#~ msgstr "" +#~ "Рассмотрите возможность использования функции %s, включённой в ядро." + +#, c-format +#~ msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" +#~ msgstr "не удалось записать блок %u в файл \"%s\" (записано байт: %d из %d)" + +#, c-format +#~ msgid "Unmatched \"%c\" character." +#~ msgstr "Непарный знак \"%c\"." + +#, c-format +#~ msgid "formatting field \"%s\" is only supported in to_char" +#~ msgstr "поле форматирования \"%s\" поддерживается только в функции to_char" + +#, c-format +#~ msgid "must be superuser to read files with adminpack 1.0" +#~ msgstr "" +#~ "читать файлы, используя adminpack 1.0, может только суперпользователь" + +#, c-format +#~ msgid "" +#~ "string argument of jsonpath item method .%s() is not a valid " +#~ "representation of a double precision number" +#~ msgstr "" +#~ "строковый аргумент метода элемента jsonpath .%s() не является " +#~ "представлением значения double precision" + +#, c-format +#~ msgid "collation provider LIBC is not supported on this platform" +#~ msgstr "" +#~ "провайдер правил сортировки LIBC не поддерживается на этой платформе" + +#, c-format +#~ msgid "cannot subtract infinite timestamps" +#~ msgstr "вычитать бесконечные значения timestamp нельзя" + +#~ msgid "Enables per-database user names." +#~ msgstr "Включает связывание имён пользователей с базами данных." + +#~ msgid "" +#~ "Time before a snapshot is too old to read pages changed after the " +#~ "snapshot was taken." +#~ msgstr "" +#~ "Срок, по истечении которого снимок считается слишком старым для получения " +#~ "страниц, изменённых после создания снимка." + +#~ msgid "A value of -1 disables this feature." +#~ msgstr "Значение -1 отключает это поведение." + +#~ msgid "Enables logging of recovery-related debugging information." +#~ msgstr "" +#~ "Включает протоколирование отладочной информации, связанной с репликацией." + #, c-format #~ msgid "out of memory while trying to decode a record of length %u" #~ msgstr "не удалось выделить память для декодирования записи длины %u" @@ -34216,10 +36056,6 @@ msgstr "Используйте для записи спецсимволов си #~ "слот \"%s\" аннулируется, так как его позиция restart_lsn %X/%X превышает " #~ "max_slot_wal_keep_size" -#, c-format -#~ msgid "cannot read from logical replication slot \"%s\"" -#~ msgstr "прочитать из слота логической репликации \"%s\" нельзя" - #, c-format #~ msgid "cannot convert partitioned table \"%s\" to a view" #~ msgstr "" @@ -34450,9 +36286,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "oidvector has too many elements" #~ msgstr "oidvector содержит слишком много элементов" -#~ msgid "Enables reordering of GROUP BY keys." -#~ msgstr "Включает переупорядочивание ключей GROUP BY." - #~ msgid "unknown compression option \"%s\"" #~ msgstr "неизвестный параметр сжатия \"%s\"" @@ -34522,14 +36355,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "JSON_TABLE path name is not allowed here" #~ msgstr "SELECT ... INTO здесь не допускается" -#, fuzzy -#~ msgid "JSON path expression must be type %s, not type %s" -#~ msgstr "аргумент конструкции %s должен иметь тип %s, а не %s" - -#, fuzzy -#~ msgid "cannot cast DEFAULT expression type %s to %s" -#~ msgstr "привести тип %s к %s нельзя" - #, fuzzy #~ msgid "JSON_TABLE() is not yet implemented for the json type" #~ msgstr "REINDEX для секционированных индексов ещё не реализован" @@ -34538,10 +36363,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "%s() is not yet implemented for the json type" #~ msgstr "политики для этой команды ещё не реализованы" -#, fuzzy -#~ msgid "cannot use RETURNING type %s in %s" -#~ msgstr "привести тип %s к %s нельзя" - #, fuzzy #~ msgid "invalid JSON_TABLE plan" #~ msgstr "неверное указание OWNED BY" @@ -34988,9 +36809,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "Writes temporary statistics files to the specified directory." #~ msgstr "Каталог, в который будут записываться временные файлы статистики." -#~ msgid "must be superuser to execute ALTER SYSTEM command" -#~ msgstr "выполнить команду ALTER SYSTEM может только суперпользователь" - #~ msgid "" #~ "query-specified return tuple and function return type are not compatible" #~ msgstr "" @@ -35767,9 +37585,6 @@ msgstr "Используйте для записи спецсимволов си #~ "Этот параметр определяет, нужно ли шифровать пароли, заданные в CREATE " #~ "USER или ALTER USER без указания ENCRYPTED или UNENCRYPTED." -#~ msgid "\"%s\" cannot be lower than \"%s\"." -#~ msgstr "Версия \"%s\" не может быть ниже \"%s\"." - #~ msgid "could not write to temporary file: %m" #~ msgstr "не удалось записать во временный файл: %m" @@ -36287,9 +38102,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "using previous checkpoint record at %X/%X" #~ msgstr "используется предыдущая запись контрольной точки по смещению %X/%X" -#~ msgid "invalid secondary checkpoint link in control file" -#~ msgstr "неверная ссылка на вторичную контрольную точку в файле pg_control" - #~ msgid "invalid secondary checkpoint record" #~ msgstr "неверная запись вторичной контрольной точки" @@ -36400,9 +38212,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "data directory \"%s\" has group or world access" #~ msgstr "к каталогу данных \"%s\" имеют доступ все или группа" -#~ msgid "worker process" -#~ msgstr "рабочий процесс" - #~ msgid "built-in type %u not found" #~ msgstr "встроенный тип %u не найден" @@ -36417,13 +38226,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgstr "" #~ "тип данных \"%s.%s\", требуемый для логической репликации, не существует" -#~ msgid "" -#~ "logical replication could not find row for delete in replication target " -#~ "relation \"%s\"" -#~ msgstr "" -#~ "при логической репликации не удалось найти строку для удаления в целевом " -#~ "отношении репликации \"%s\"" - #~ msgid "memory for serializable conflict tracking is nearly exhausted" #~ msgstr "" #~ "память для отслеживания конфликтов сериализации практически исчерпана" @@ -36848,9 +38650,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "Proceeding with relation creation anyway." #~ msgstr "Несмотря на это, создание отношения продолжается." -#~ msgid "default expression must not return a set" -#~ msgstr "выражение по умолчанию не может возвращать множество" - #~ msgid "access method name cannot be qualified" #~ msgstr "имя метода доступа не может быть составным" @@ -37503,21 +39302,12 @@ msgstr "Используйте для записи спецсимволов си #~ "Для архивации WAL (archive_mode=on) wal_level должен быть \"archive\", " #~ "\"hot_standby\" или \"logical\"" -#~ msgid "postmaster became multithreaded" -#~ msgstr "процесс postmaster стал многопоточным" - #~ msgid "could not determine input data types" #~ msgstr "не удалось определить типы входных данных" #~ msgid "neither input type is an array" #~ msgstr "входной тип так же не является массивом" -#~ msgid "unexpected \"=\"" -#~ msgstr "неожиданный знак \"=\"" - -#~ msgid "invalid symbol" -#~ msgstr "неверный символ" - #~ msgid "" #~ "must be superuser or have the same role to cancel queries running in " #~ "other server processes" @@ -37574,11 +39364,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgstr "" #~ "распознать идентификатор локального пользователя (%ld) не удалось: %s" -#~ msgid "cannot use physical replication slot created for logical decoding" -#~ msgstr "" -#~ "для логического декодирования нельзя использовать созданный физический " -#~ "слот репликации" - #~ msgid "" #~ "incomplete read from reorderbuffer spill file: read %d instead of %u bytes" #~ msgstr "" @@ -38065,9 +39850,6 @@ msgstr "Используйте для записи спецсимволов си #~ "Недостаточно памяти для переназначения блокировок подготовленных " #~ "транзакций." -#~ msgid "\"interval\" time zone \"%s\" not valid" -#~ msgstr "\"интервал\" содержит неверный часовой пояс \"%s\"" - #~ msgid "inconsistent use of year %04d and \"BC\"" #~ msgstr "несогласованное использование в годе %04d и \"BC\"" diff --git a/src/backend/po/sv.po b/src/backend/po/sv.po index 2d2e2272672d8..db87d04a3c232 100644 --- a/src/backend/po/sv.po +++ b/src/backend/po/sv.po @@ -1,5 +1,5 @@ # Swedish message translation file for postgresql -# Dennis Björklund , 2002, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Dennis Björklund , 2002, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025. # # Många av termerna är tekniska termer som refererar till begrepp i SQL-satser # och liknande. Om man översätter vissa av dessa så kommer det bli väldigt @@ -21,10 +21,10 @@ # hänvisas till och inte någon annan städning. msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 16\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-23 02:45+0000\n" -"PO-Revision-Date: 2023-09-23 15:32+0200\n" +"POT-Creation-Date: 2025-02-12 13:46+0000\n" +"PO-Revision-Date: 2025-02-12 20:52+0100\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -33,6 +33,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: ../common/binaryheap.c:121 ../common/binaryheap.c:159 +#, c-format +msgid "out of binary heap slots" +msgstr "slut på slottar i binär-heap" + #: ../common/compression.c:132 ../common/compression.c:141 #: ../common/compression.c:150 #, c-format @@ -90,64 +95,66 @@ msgstr "komprimeringsalgoritmen \"%s\" stöder inte långdistansläge" msgid "not recorded" msgstr "ej sparad" -#: ../common/controldata_utils.c:69 ../common/controldata_utils.c:73 -#: commands/copyfrom.c:1670 commands/extension.c:3480 utils/adt/genfile.c:123 +#: ../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 "kunde inte öppna filen \"%s\" för läsning: %m" -#: ../common/controldata_utils.c:84 ../common/controldata_utils.c:86 +#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1347 access/transam/xlog.c:3193 -#: access/transam/xlog.c:3996 access/transam/xlogrecovery.c:1199 -#: access/transam/xlogrecovery.c:1291 access/transam/xlogrecovery.c:1328 -#: access/transam/xlogrecovery.c:1388 backup/basebackup.c:1842 -#: commands/extension.c:3490 libpq/hba.c:769 replication/logical/origin.c:745 -#: replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5050 -#: replication/logical/snapbuild.c:2031 replication/slot.c:1953 -#: replication/slot.c:1994 replication/walsender.c:643 +#: 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:984 utils/cache/relmapper.c:827 +#: 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 "kunde inte läsa fil \"%s\": %m" -#: ../common/controldata_utils.c:92 ../common/controldata_utils.c:95 -#: access/transam/xlog.c:3198 access/transam/xlog.c:4001 -#: backup/basebackup.c:1846 replication/logical/origin.c:750 -#: replication/logical/origin.c:789 replication/logical/snapbuild.c:2036 -#: replication/slot.c:1957 replication/slot.c:1998 replication/walsender.c:648 -#: utils/cache/relmapper.c:831 +#: ../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 "kunde inte läsa fil \"%s\": läste %d av %zu" -#: ../common/controldata_utils.c:104 ../common/controldata_utils.c:108 -#: ../common/controldata_utils.c:233 ../common/controldata_utils.c:236 -#: access/heap/rewriteheap.c:1175 access/heap/rewriteheap.c:1280 +#: ../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:1359 -#: access/transam/twophase.c:1771 access/transam/xlog.c:3039 -#: access/transam/xlog.c:3233 access/transam/xlog.c:3238 -#: access/transam/xlog.c:3374 access/transam/xlog.c:3966 -#: access/transam/xlog.c:4885 commands/copyfrom.c:1730 commands/copyto.c:332 +#: 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:5102 -#: replication/logical/snapbuild.c:1798 replication/logical/snapbuild.c:1922 -#: replication/slot.c:1844 replication/slot.c:2005 replication/walsender.c:658 -#: storage/file/copydir.c:208 storage/file/copydir.c:213 storage/file/fd.c:782 -#: storage/file/fd.c:3700 storage/file/fd.c:3806 utils/cache/relmapper.c:839 -#: utils/cache/relmapper.c:945 +#: 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" msgstr "kunde inte stänga fil \"%s\": %m" -#: ../common/controldata_utils.c:124 +#: ../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "byte-ordning stämmer inte" -#: ../common/controldata_utils.c:126 +#: ../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -160,141 +167,157 @@ msgstr "" "inte detta program. I så fall kan nedanstående resultat vara felaktiga\n" "och PostgreSQL-installationen vara inkompatibel med databaskatalogen." -#: ../common/controldata_utils.c:181 ../common/controldata_utils.c:186 -#: ../common/file_utils.c:228 ../common/file_utils.c:287 -#: ../common/file_utils.c:361 access/heap/rewriteheap.c:1263 -#: access/transam/timeline.c:111 access/transam/timeline.c:251 -#: access/transam/timeline.c:348 access/transam/twophase.c:1303 -#: access/transam/xlog.c:2946 access/transam/xlog.c:3109 -#: access/transam/xlog.c:3148 access/transam/xlog.c:3341 -#: access/transam/xlog.c:3986 access/transam/xlogrecovery.c:4179 -#: access/transam/xlogrecovery.c:4282 access/transam/xlogutils.c:838 -#: backup/basebackup.c:538 backup/basebackup.c:1512 libpq/hba.c:629 -#: postmaster/syslogger.c:1560 replication/logical/origin.c:735 -#: replication/logical/reorderbuffer.c:3706 -#: replication/logical/reorderbuffer.c:4257 -#: replication/logical/reorderbuffer.c:5030 -#: replication/logical/snapbuild.c:1753 replication/logical/snapbuild.c:1863 -#: replication/slot.c:1925 replication/walsender.c:616 -#: replication/walsender.c:2731 storage/file/copydir.c:151 -#: storage/file/fd.c:757 storage/file/fd.c:3457 storage/file/fd.c:3687 -#: storage/file/fd.c:3777 storage/smgr/md.c:663 utils/cache/relmapper.c:816 -#: utils/cache/relmapper.c:924 utils/error/elog.c:2082 -#: utils/init/miscinit.c:1530 utils/init/miscinit.c:1664 -#: utils/init/miscinit.c:1741 utils/misc/guc.c:4600 utils/misc/guc.c:4650 +#: ../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 "kunde inte öppna fil \"%s\": %m" -#: ../common/controldata_utils.c:202 ../common/controldata_utils.c:205 -#: access/transam/twophase.c:1744 access/transam/twophase.c:1753 -#: access/transam/xlog.c:8755 access/transam/xlogfuncs.c:708 -#: backup/basebackup_server.c:175 backup/basebackup_server.c:268 -#: postmaster/postmaster.c:5573 postmaster/syslogger.c:1571 -#: postmaster/syslogger.c:1584 postmaster/syslogger.c:1597 -#: utils/cache/relmapper.c:936 +#: ../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 "kunde inte skriva fil \"%s\": %m" -#: ../common/controldata_utils.c:219 ../common/controldata_utils.c:224 -#: ../common/file_utils.c:299 ../common/file_utils.c:369 -#: access/heap/rewriteheap.c:959 access/heap/rewriteheap.c:1169 -#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1765 -#: access/transam/xlog.c:3032 access/transam/xlog.c:3227 -#: access/transam/xlog.c:3959 access/transam/xlog.c:8145 -#: access/transam/xlog.c:8190 backup/basebackup_server.c:209 -#: replication/logical/snapbuild.c:1791 replication/slot.c:1830 -#: replication/slot.c:1935 storage/file/fd.c:774 storage/file/fd.c:3798 -#: storage/smgr/md.c:1135 storage/smgr/md.c:1180 storage/sync/sync.c:451 -#: utils/misc/guc.c:4370 +#: ../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 "kunde inte fsync:a fil \"%s\": %m" -#: ../common/cryptohash.c:261 ../common/cryptohash_openssl.c:133 -#: ../common/cryptohash_openssl.c:332 ../common/exec.c:550 ../common/exec.c:595 -#: ../common/exec.c:687 ../common/hmac.c:309 ../common/hmac.c:325 -#: ../common/hmac_openssl.c:132 ../common/hmac_openssl.c:327 -#: ../common/md5_common.c:155 ../common/psprintf.c:143 -#: ../common/scram-common.c:258 ../common/stringinfo.c:305 ../port/path.c:751 -#: ../port/path.c:789 ../port/path.c:806 access/transam/twophase.c:1412 -#: access/transam/xlogrecovery.c:589 lib/dshash.c:253 libpq/auth.c:1345 -#: libpq/auth.c:1389 libpq/auth.c:1946 libpq/be-secure-gssapi.c:524 -#: postmaster/bgworker.c:352 postmaster/bgworker.c:934 -#: postmaster/postmaster.c:2537 postmaster/postmaster.c:4130 -#: postmaster/postmaster.c:5498 postmaster/postmaster.c:5869 -#: replication/libpqwalreceiver/libpqwalreceiver.c:308 -#: replication/logical/logical.c:208 replication/walsender.c:686 -#: storage/buffer/localbuf.c:601 storage/file/fd.c:866 storage/file/fd.c:1397 -#: storage/file/fd.c:1558 storage/file/fd.c:2478 storage/ipc/procarray.c:1449 -#: storage/ipc/procarray.c:2232 storage/ipc/procarray.c:2239 -#: storage/ipc/procarray.c:2738 storage/ipc/procarray.c:3374 -#: utils/adt/formatting.c:1690 utils/adt/formatting.c:1812 -#: utils/adt/formatting.c:1935 utils/adt/pg_locale.c:473 -#: utils/adt/pg_locale.c:637 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:514 -#: utils/hash/dynahash.c:614 utils/hash/dynahash.c:1111 utils/mb/mbutils.c:402 -#: utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 -#: utils/misc/guc.c:640 utils/misc/guc.c:665 utils/misc/guc.c:1053 -#: utils/misc/guc.c:4348 utils/misc/tzparser.c:476 utils/mmgr/aset.c:445 -#: utils/mmgr/dsa.c:714 utils/mmgr/dsa.c:736 utils/mmgr/dsa.c:817 -#: utils/mmgr/generation.c:205 utils/mmgr/mcxt.c:1046 utils/mmgr/mcxt.c:1082 -#: utils/mmgr/mcxt.c:1120 utils/mmgr/mcxt.c:1158 utils/mmgr/mcxt.c:1246 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/mcxt.c:1313 utils/mmgr/mcxt.c:1502 -#: utils/mmgr/mcxt.c:1547 utils/mmgr/mcxt.c:1604 utils/mmgr/slab.c:366 +#: ../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 "slut på minne" #: ../common/cryptohash.c:266 ../common/cryptohash.c:272 -#: ../common/cryptohash_openssl.c:344 ../common/cryptohash_openssl.c:352 -#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:339 -#: ../common/hmac_openssl.c:347 +#: ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 +#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 +#: ../common/hmac_openssl.c:377 msgid "success" msgstr "lyckades" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:346 -#: ../common/hmac_openssl.c:341 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 +#: ../common/hmac_openssl.c:371 msgid "destination buffer too small" msgstr "destinationsbuffer för liten" -#: ../common/cryptohash_openssl.c:348 ../common/hmac_openssl.c:343 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 msgid "OpenSSL failure" msgstr "OpenSSL-fel" -#: ../common/exec.c:172 +#: ../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "ogiltig binär \"%s\": %m" -#: ../common/exec.c:215 +#: ../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "kunde inte läsa binär \"%s\": %m" -#: ../common/exec.c:223 +#: ../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "kunde inte hitta en \"%s\" att köra" -#: ../common/exec.c:250 +#: ../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "kunde inte konvertera sökvägen \"%s\" till en absolut sökväg: %m" -#: ../common/exec.c:412 libpq/pqcomm.c:728 storage/ipc/latch.c:1128 -#: storage/ipc/latch.c:1308 storage/ipc/latch.c:1541 storage/ipc/latch.c:1703 -#: storage/ipc/latch.c:1829 +#: ../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 "kunde inte köra kommandot \"%s\": %m" + +#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "kunde inte läsa från kommando \"%s\": %m" + +#: ../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "ingen data returnerades från kommandot \"%s\"" + +#: ../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() misslyckades: %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:791 -#: ../port/path.c:808 utils/misc/ps_status.c:168 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:203 utils/misc/ps_status.c:211 +#: ../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 "slut på minne\n" @@ -304,39 +327,51 @@ msgstr "slut på minne\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kan inte duplicera null-pekare (internt fel)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:447 -#: ../common/file_utils.c:451 access/transam/twophase.c:1315 -#: access/transam/xlogarchive.c:112 access/transam/xlogarchive.c:229 -#: backup/basebackup.c:346 backup/basebackup.c:544 backup/basebackup.c:615 -#: commands/copyfrom.c:1680 commands/copyto.c:702 commands/extension.c:3469 -#: commands/tablespace.c:810 commands/tablespace.c:899 postmaster/pgarch.c:590 -#: replication/logical/snapbuild.c:1649 storage/file/fd.c:1922 -#: storage/file/fd.c:2008 storage/file/fd.c:3511 utils/adt/dbsize.c:106 -#: utils/adt/dbsize.c:258 utils/adt/dbsize.c:338 utils/adt/genfile.c:483 -#: utils/adt/genfile.c:658 utils/adt/misc.c:340 +#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" + +#: ../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 "kunde inte göra stat() på fil \"%s\": %m" -#: ../common/file_utils.c:162 ../common/pgfnames.c:48 ../common/rmtree.c:63 -#: commands/tablespace.c:734 commands/tablespace.c:744 -#: postmaster/postmaster.c:1564 storage/file/fd.c:2880 -#: storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "detta bygge stöder inte synkmetod \"%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: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 "kunde inte öppna katalog \"%s\": %m" -#: ../common/file_utils.c:196 ../common/pgfnames.c:69 ../common/rmtree.c:104 -#: storage/file/fd.c:2892 +#: ../common/file_utils.c:169 ../common/file_utils.c:315 +#: ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 #, c-format msgid "could not read directory \"%s\": %m" msgstr "kunde inte läsa katalog \"%s\": %m" -#: ../common/file_utils.c:379 access/transam/xlogarchive.c:383 -#: postmaster/pgarch.c:746 postmaster/syslogger.c:1608 -#: replication/logical/snapbuild.c:1810 replication/slot.c:723 -#: replication/slot.c:1716 replication/slot.c:1858 storage/file/fd.c:792 -#: utils/time/snapmgr.c:1284 +#: ../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 "kunde inte döpa om fil \"%s\" till \"%s\": %m" @@ -345,90 +380,102 @@ msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" msgid "internal error" msgstr "internt fel" -#: ../common/jsonapi.c:1144 +#: ../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "Recursive-descent-parser kan inte använda inkrementell lexer." + +#: ../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "Inkrementell parser kräver en inkrementell lexer." + +#: ../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON nästlad för djupt, maximal tillåtet djup är 6400." + +#: ../common/jsonapi.c:2127 #, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "Escape-sekvens \"\\%s\" är ogiltig." +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "Escape-sekvens \"\\%.*s\" är ogiltig." -#: ../common/jsonapi.c:1147 +#: ../common/jsonapi.c:2131 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Tecken med värde 0x%02x måste escape:as." -#: ../common/jsonapi.c:1150 +#: ../common/jsonapi.c:2135 #, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "Förväntade slut på indata, men hittade \"%s\"." +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Förväntade slut på indata, men hittade \"%.*s\"." -#: ../common/jsonapi.c:1153 +#: ../common/jsonapi.c:2138 #, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "Färväntade array-element eller \"]\", men hittade \"%s\"." +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Färväntade array-element eller \"]\", men hittade \"%.*s\"." -#: ../common/jsonapi.c:1156 +#: ../common/jsonapi.c:2141 #, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "Förväntade \",\" eller \"]\", men hittade \"%s\"." +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Förväntade \",\" eller \"]\", men hittade \"%.*s\"." -#: ../common/jsonapi.c:1159 +#: ../common/jsonapi.c:2144 #, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "Förväntade sig \":\" men hittade \"%s\"." +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Förväntade sig \":\" men hittade \"%.*s\"." -#: ../common/jsonapi.c:1162 +#: ../common/jsonapi.c:2147 #, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "Förväntade JSON-värde, men hittade \"%s\"." +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Förväntade JSON-värde, men hittade \"%.*s\"." -#: ../common/jsonapi.c:1165 +#: ../common/jsonapi.c:2150 msgid "The input string ended unexpectedly." msgstr "Indatasträngen avslutades oväntat." -#: ../common/jsonapi.c:1167 +#: ../common/jsonapi.c:2152 #, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "Färväntade sträng eller \"}\", men hittade \"%s\"." +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Färväntade sträng eller \"}\", men hittade \"%.*s\"." -#: ../common/jsonapi.c:1170 +#: ../common/jsonapi.c:2155 #, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "Förväntade sig \",\" eller \"}\" men hittade \"%s\"." +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Förväntade sig \",\" eller \"}\" men hittade \"%.*s\"." -#: ../common/jsonapi.c:1173 +#: ../common/jsonapi.c:2158 #, c-format -msgid "Expected string, but found \"%s\"." -msgstr "Förväntade sträng, men hittade \"%s\"." +msgid "Expected string, but found \"%.*s\"." +msgstr "Förväntade sträng, men hittade \"%.*s\"." -#: ../common/jsonapi.c:1176 +#: ../common/jsonapi.c:2161 #, c-format -msgid "Token \"%s\" is invalid." -msgstr "Token \"%s\" är ogiltig." +msgid "Token \"%.*s\" is invalid." +msgstr "Token \"%.*s\" är ogiltig." -#: ../common/jsonapi.c:1179 jsonpath_scan.l:597 +#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kan inte konverteras till text." -#: ../common/jsonapi.c:1181 +#: ../common/jsonapi.c:2166 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\" måste följas av fyra hexdecimala siffror." -#: ../common/jsonapi.c:1184 +#: ../common/jsonapi.c:2169 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Escape-värden för unicode kan inte användas för kodpunkter med värde över 007F när kodningen inte är UTF8." -#: ../common/jsonapi.c:1187 +#: ../common/jsonapi.c:2178 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "Escape-värde för unicode kan inte översättas till serverns kodning %s." -#: ../common/jsonapi.c:1190 jsonpath_scan.l:630 +#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicodes övre surrogathalva får inte komma efter en övre surrogathalva." -#: ../common/jsonapi.c:1192 jsonpath_scan.l:641 jsonpath_scan.l:651 -#: jsonpath_scan.l:702 +#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicodes lägre surrogathalva måste följa en övre surrogathalva." @@ -453,11 +500,168 @@ msgstr "detalj: " msgid "hint: " msgstr "tips: " +#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "kunde inte initiera kontrollsumma för backup-manifest" + +#: ../common/parse_manifest.c:203 ../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "manifestet avslutades oväntat" + +#: ../common/parse_manifest.c:209 ../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "kunde inte uppdatera kontrollsumma för backup-manifest" + +#: ../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "oväntad objektstart" + +#: ../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "oväntat objektslut" + +#: ../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "oväntad array-start" + +#: ../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "oväntat array-slut" + +#: ../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "förväntade en versionsindikator" + +#: ../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "okänt toppnivåfält" + +#: ../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "oväntat filfält" + +#: ../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "oväntat WAL-intervall-fält" + +#: ../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "oväntat objektfält" + +#: ../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "oväntad skalar" + +#: ../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "manifestversion är inte ett heltal" + +#: ../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "oväntad manifestversion" + +#: ../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "manifestets systemidentifierare är inte ett heltal" + +#: ../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "saknas sökväg" + +#: ../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "både sökväg och kodad sökväg" + +#: ../common/parse_manifest.c:666 +msgid "missing size" +msgstr "saknar storlek" + +#: ../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "kontrollsumma utan algoritm" + +#: ../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "kunde inte avkoda filnamn" + +#: ../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "filstorlek är inte ett haltal" + +#: ../common/parse_manifest.c:699 backup/basebackup.c:870 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "okänd algoritm för kontrollsumma: \"%s\"" + +#: ../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "ogiltig kontrollsumma för fil \"%s\": \"%s\"" + +#: ../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "saknar tidslinje" + +#: ../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "saknar start-LSN" + +#: ../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "saknar slut-LSN" + +#: ../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "tidslinje är inte ett heltal" + +#: ../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "kunde inte parsa start-LSN" + +#: ../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "kunde inte parsa slut-LSN" + +#: ../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "förväntade minst två rader" + +#: ../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "sista raden är inte nyradsterminerad" + +#: ../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "kunde inte göra klart kontrollsumma för backup-manifest" + +#: ../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "manifestet har ingen kontrollsumma" + +#: ../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "ogiltig kontrollsumma för manifest: \"%s\"" + +#: ../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "kontrollsumma för manifest matchar inte" + +#: ../common/parse_manifest.c:891 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "kunde inte parsa backup-manifest: %s" + #: ../common/percentrepl.c:79 ../common/percentrepl.c:85 #: ../common/percentrepl.c:118 ../common/percentrepl.c:124 -#: postmaster/postmaster.c:2211 utils/misc/guc.c:3118 utils/misc/guc.c:3154 -#: utils/misc/guc.c:3224 utils/misc/guc.c:4547 utils/misc/guc.c:6721 -#: utils/misc/guc.c:6762 +#: 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 "ogiltigt värde för parameter \"%s\": \"%s\"" @@ -517,45 +721,45 @@ msgstr "kunde inte köra igen med token för begränsad åtkomst: felkod %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "kunde inte hämta statuskod för underprocess: felkod %lu" -#: ../common/rmtree.c:95 access/heap/rewriteheap.c:1248 -#: access/transam/twophase.c:1704 access/transam/xlogarchive.c:120 -#: access/transam/xlogarchive.c:393 postmaster/postmaster.c:1143 -#: postmaster/syslogger.c:1537 replication/logical/origin.c:591 -#: replication/logical/reorderbuffer.c:4526 -#: replication/logical/snapbuild.c:1691 replication/logical/snapbuild.c:2125 -#: replication/slot.c:1909 storage/file/fd.c:832 storage/file/fd.c:3325 -#: storage/file/fd.c:3387 storage/file/reinit.c:262 storage/ipc/dsm.c:316 -#: storage/smgr/md.c:383 storage/smgr/md.c:442 storage/sync/sync.c:248 -#: utils/time/snapmgr.c:1608 +#: ../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" msgstr "kunde inte ta bort fil \"%s\": %m" -#: ../common/rmtree.c:122 commands/tablespace.c:773 commands/tablespace.c:786 -#: commands/tablespace.c:821 commands/tablespace.c:911 storage/file/fd.c:3317 -#: storage/file/fd.c:3726 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 +#: commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 +#: storage/file/fd.c:3779 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "kunde inte ta bort katalog \"%s\": %m" -#: ../common/scram-common.c:271 +#: ../common/scram-common.c:281 msgid "could not encode salt" msgstr "kunde inte koda saltet" -#: ../common/scram-common.c:287 +#: ../common/scram-common.c:297 msgid "could not encode stored key" msgstr "kunde inte koda den lagrade nyckeln" -#: ../common/scram-common.c:304 +#: ../common/scram-common.c:314 msgid "could not encode server key" msgstr "kunde inte koda servernyckeln" -#: ../common/stringinfo.c:306 +#: ../common/stringinfo.c:315 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "Kan inte utöka strängbuffer som innehåller %d byte med ytterligare %d bytes." -#: ../common/stringinfo.c:310 +#: ../common/stringinfo.c:319 #, c-format msgid "" "out of memory\n" @@ -571,7 +775,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "kunde inte slå upp effektivt användar-id %ld: %s" -#: ../common/username.c:45 libpq/auth.c:1881 +#: ../common/username.c:45 libpq/auth.c:1888 msgid "user does not exist" msgstr "användaren finns inte" @@ -663,22 +867,22 @@ msgstr "Fortsätter att försöka i 30 sekunder." msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "Du kan ha antivirus, backup eller liknande mjukvara som stör databassystemet" -#: ../port/path.c:775 +#: ../port/path.c:852 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "kunde inte fastställa nuvarande arbetskatalog: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "kunde inte fastställa nuvarande arbetskatalog: %m\n" #: ../port/strerror.c:72 #, c-format msgid "operating system error %d" msgstr "operativsystemfel %d" -#: ../port/thread.c:50 ../port/thread.c:86 +#: ../port/user.c:43 ../port/user.c:79 #, c-format msgid "could not look up local user ID %d: %s" msgstr "kunde inte slå upp lokalt användar-id %d: %s" -#: ../port/thread.c:55 ../port/thread.c:91 +#: ../port/user.c:48 ../port/user.c:84 #, c-format msgid "local user with ID %d does not exist" msgstr "lokal användare med ID %d existerar inte" @@ -698,115 +902,104 @@ msgstr "kunde inte hämta SID för PowerUser-grupp: felkod %lu\n" msgid "could not check access token membership: error code %lu\n" msgstr "kunde inte kontrollera access-token-medlemskap: felkod %lu\n" -#: access/brin/brin.c:216 +#: access/brin/brin.c:405 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "förfrågan efter BRIN-intervallsummering för index \"%s\" sida %u har inte spelats in" -#: access/brin/brin.c:1036 access/brin/brin.c:1137 access/gin/ginfast.c:1040 -#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:214 -#: access/transam/xlogfuncs.c:247 access/transam/xlogfuncs.c:286 -#: access/transam/xlogfuncs.c:307 access/transam/xlogfuncs.c:328 -#: access/transam/xlogfuncs.c:398 access/transam/xlogfuncs.c:456 +#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 +#: access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 +#: access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 +#: access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 #, c-format msgid "recovery is in progress" msgstr "återställning pågår" -#: access/brin/brin.c:1037 access/brin/brin.c:1138 +#: access/brin/brin.c:1386 access/brin/brin.c:1494 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "BRIN-kontrollfunktioner kan inte köras under återställning." -#: access/brin/brin.c:1042 access/brin/brin.c:1143 +#: access/brin/brin.c:1391 access/brin/brin.c:1499 #, c-format msgid "block number out of range: %lld" msgstr "blocknummer är utanför giltigt intervall: %lld" -#: access/brin/brin.c:1086 access/brin/brin.c:1169 +#: access/brin/brin.c:1436 access/brin/brin.c:1525 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" är inte ett BRIN-index" -#: access/brin/brin.c:1102 access/brin/brin.c:1185 +#: access/brin/brin.c:1452 access/brin/brin.c:1541 #, c-format msgid "could not open parent table of index \"%s\"" msgstr "kunde inte öppna föräldratabell för index \"%s\"" -#: access/brin/brin_bloom.c:750 access/brin/brin_bloom.c:792 -#: access/brin/brin_minmax_multi.c:3011 access/brin/brin_minmax_multi.c:3148 -#: statistics/dependencies.c:663 statistics/dependencies.c:716 -#: statistics/mcv.c:1484 statistics/mcv.c:1515 statistics/mvdistinct.c:344 -#: statistics/mvdistinct.c:397 utils/adt/pseudotypes.c:43 -#: utils/adt/pseudotypes.c:77 utils/adt/tsgistidx.c:93 +#: access/brin/brin.c:1461 access/brin/brin.c:1557 access/gin/ginfast.c:1085 +#: parser/parse_utilcmd.c:2277 #, c-format -msgid "cannot accept a value of type %s" -msgstr "kan inte acceptera ett värde av type %s" +msgid "index \"%s\" is not valid" +msgstr "index \"%s\" är inte giltigt" -#: access/brin/brin_minmax_multi.c:2171 access/brin/brin_minmax_multi.c:2178 -#: access/brin/brin_minmax_multi.c:2185 utils/adt/timestamp.c:941 -#: utils/adt/timestamp.c:1518 utils/adt/timestamp.c:2708 -#: utils/adt/timestamp.c:2778 utils/adt/timestamp.c:2795 -#: utils/adt/timestamp.c:2848 utils/adt/timestamp.c:2887 -#: utils/adt/timestamp.c:3184 utils/adt/timestamp.c:3189 -#: utils/adt/timestamp.c:3194 utils/adt/timestamp.c:3244 -#: utils/adt/timestamp.c:3251 utils/adt/timestamp.c:3258 -#: utils/adt/timestamp.c:3278 utils/adt/timestamp.c:3285 -#: utils/adt/timestamp.c:3292 utils/adt/timestamp.c:3322 -#: utils/adt/timestamp.c:3330 utils/adt/timestamp.c:3374 -#: utils/adt/timestamp.c:3796 utils/adt/timestamp.c:3920 -#: utils/adt/timestamp.c:4440 +#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 +#: access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 +#: statistics/dependencies.c:661 statistics/dependencies.c:714 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 +#: utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format -msgid "interval out of range" -msgstr "interval utanför giltigt intervall" +msgid "cannot accept a value of type %s" +msgstr "kan inte acceptera ett värde av type %s" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 -#: access/brin/brin_pageops.c:852 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1442 access/spgist/spgdoinsert.c:2002 -#: access/spgist/spgdoinsert.c:2279 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 +#: access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 +#: access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 +#: access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "indexradstorlek %zu överstiger maximum %zu för index \"%s\"" -#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 +#: access/brin/brin_revmap.c:383 access/brin/brin_revmap.c:389 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "trasigt BRIN-index: inkonsistent intervall-map" -#: access/brin/brin_revmap.c:593 +#: access/brin/brin_revmap.c:583 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "oväntad sidtyp 0x%04X i BRIN-index \"%s\" block %u" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 +#: access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 #: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "operatorfamilj \"%s\" för accessmetod %s innehåller funktion %s med ogiltigt supportnummer %d" -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 +#: access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 #: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "operatorfamilj \"%s\" för accessmetod %s innehåller funktion %s med felaktig signatur för supportnummer %d" -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 +#: access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 #: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "operatorfamilj \"%s\" för accessmetod %s innehåller operator %s med ogiltigt strateginummer %d" -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 #: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 #: access/spgist/spgvalidate.c:237 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "operatorfamilj \"%s\" för accessmetod %s innehåller ogiltig ORDER BY-specifikatioon för operator %s" -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 +#: access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 #: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" @@ -829,38 +1022,38 @@ msgstr "operatorfamilj \"%s\" för accessmetod %s saknas supportfunktion(er) f msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "operatorklass \"%s\" för accessmetoden %s saknar operator(er)" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:274 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 +#: access/gist/gistvalidate.c:273 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "operatorklass \"%s\" för accessmetod %s saknar supportfunktion %d" -#: access/common/attmap.c:122 +#: access/common/attmap.c:121 #, c-format msgid "Returned type %s does not match expected type %s in column %d." msgstr "Returnerad typ %s matchar inte förväntad type %s i kolumn %d." -#: access/common/attmap.c:150 +#: access/common/attmap.c:149 #, c-format msgid "Number of returned columns (%d) does not match expected column count (%d)." msgstr "Antalet returnerade kolumner (%d) matchar inte förväntat antal kolumner (%d)." -#: access/common/attmap.c:234 access/common/attmap.c:246 +#: access/common/attmap.c:233 access/common/attmap.c:245 #, c-format msgid "could not convert row type" msgstr "kunde inte konvertera radtypen" -#: access/common/attmap.c:235 +#: access/common/attmap.c:234 #, c-format msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." msgstr "Attribut \"%s\" för typ %s matchar inte motsvarande attribut för typ %s." -#: access/common/attmap.c:247 +#: access/common/attmap.c:246 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "Attribut \"%s\" i typ %s finns inte i typ %s." -#: access/common/heaptuple.c:1124 access/common/heaptuple.c:1459 +#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "antalet kolumner (%d) överskrider gränsen (%d)" @@ -870,122 +1063,110 @@ msgstr "antalet kolumner (%d) överskrider gränsen (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "antalet indexerade kolumner (%d) överskrider gränsen (%d)" -#: access/common/indextuple.c:209 access/spgist/spgutils.c:950 +#: access/common/indextuple.c:209 access/spgist/spgutils.c:970 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "indexrad kräver %zu byte, maximal storlek är %zu" -#: access/common/printtup.c:292 tcop/fastpath.c:107 tcop/fastpath.c:454 -#: tcop/postgres.c:1944 +#: 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 "ej stödd formatkod: %d" -#: access/common/reloptions.c:521 access/common/reloptions.c:532 +#: access/common/reloptions.c:519 access/common/reloptions.c:530 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Giltiga värden är \"on\", \"off\" och \"auto\"." -#: access/common/reloptions.c:543 +#: access/common/reloptions.c:541 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "Giltiga värden är \"local\" och \"cascaded\"." -#: access/common/reloptions.c:691 +#: access/common/reloptions.c:689 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "överskriden gräns för användardefinierade relationsparametertyper" -#: access/common/reloptions.c:1233 +#: access/common/reloptions.c:1231 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET får inte ha med värden på parametrar" -#: access/common/reloptions.c:1265 +#: access/common/reloptions.c:1263 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "okänd parameternamnrymd \"%s\"" -#: access/common/reloptions.c:1302 commands/variable.c:1167 +#: access/common/reloptions.c:1300 commands/variable.c:1214 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "tabeller deklarerade med WITH OIDS stöds inte" -#: access/common/reloptions.c:1470 +#: access/common/reloptions.c:1468 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "okänd parameter \"%s\"" -#: access/common/reloptions.c:1582 +#: access/common/reloptions.c:1580 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "parameter \"%s\" angiven mer än en gång" -#: access/common/reloptions.c:1598 +#: access/common/reloptions.c:1596 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "ogiltigt värde för booleansk flagga \"%s\": \"%s\"" -#: access/common/reloptions.c:1610 +#: access/common/reloptions.c:1608 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "ogiltigt värde för heltalsflagga \"%s\": \"%s\"" -#: access/common/reloptions.c:1616 access/common/reloptions.c:1636 +#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "värdet %s är utanför sitt intervall för flaggan \"%s\"" -#: access/common/reloptions.c:1618 +#: access/common/reloptions.c:1616 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Giltiga värden är mellan \"%d\" och \"%d\"." -#: access/common/reloptions.c:1630 +#: access/common/reloptions.c:1628 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "ogiltigt värde för flyttalsflagga \"%s\": %s" -#: access/common/reloptions.c:1638 +#: access/common/reloptions.c:1636 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Giltiga värden är mellan \"%f\" och \"%f\"." -#: access/common/reloptions.c:1660 +#: access/common/reloptions.c:1658 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "ogiltigt värde för enum-flagga \"%s\": %s" -#: access/common/reloptions.c:1991 +#: access/common/reloptions.c:1989 #, c-format msgid "cannot specify storage parameters for a partitioned table" msgstr "kan inte ange lagringsparametrar för partitionerad tabell" -#: access/common/reloptions.c:1992 +#: access/common/reloptions.c:1990 #, c-format msgid "Specify storage parameters for its leaf partitions instead." msgstr "Ange lagringsparametrar för dess löv-partition istället." -#: access/common/toast_compression.c:33 +#: access/common/toast_compression.c:31 #, c-format msgid "compression method lz4 not supported" msgstr "komprimeringsmetod lz4 stöds ej" -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:32 #, c-format msgid "This functionality requires the server to be built with lz4 support." msgstr "Denna funktionalitet kräver att servern byggts med lz4-stöd." -#: access/common/tupdesc.c:837 commands/tablecmds.c:6953 -#: commands/tablecmds.c:12973 -#, c-format -msgid "too many array dimensions" -msgstr "för många array-dimensioner" - -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1913 -#, c-format -msgid "column \"%s\" cannot be declared SETOF" -msgstr "kolumn \"%s\" kan inte deklareras som SETOF" - #: access/gin/ginbulk.c:44 #, c-format msgid "posting list is too long" @@ -993,8 +1174,8 @@ msgstr "post-listan är för lång" #: access/gin/ginbulk.c:45 #, c-format -msgid "Reduce maintenance_work_mem." -msgstr "Minska maintenance_work_mem." +msgid "Reduce \"maintenance_work_mem\"." +msgstr "Minska \"maintenance_work_mem\"." #: access/gin/ginfast.c:1041 #, c-format @@ -1011,7 +1192,7 @@ msgstr "\"%s\" är inte ett GIN-index" msgid "cannot access temporary indexes of other sessions" msgstr "kan inte flytta temporära index tillhörande andra sessioner" -#: access/gin/ginget.c:273 access/nbtree/nbtinsert.c:762 +#: access/gin/ginget.c:271 access/nbtree/nbtinsert.c:762 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "misslyckades att återfinna tuple i index \"%s\"" @@ -1026,50 +1207,50 @@ msgstr "gamla GIN-index stöder inte hela-index-scan eller sökningar efter null msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "För att fixa detta, kör REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:146 executor/execExpr.c:2169 -#: utils/adt/arrayfuncs.c:3996 utils/adt/arrayfuncs.c:6683 -#: utils/adt/rowtypes.c:984 +#: 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 "kunde inte hitta någon jämförelsefunktion för typen %s" -#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 #: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "operatorfamilj \"%s\" för accessmetod %s innehåller supportfunktion %s med olika vänster- och höger-inputtyper" -#: access/gin/ginvalidate.c:260 +#: access/gin/ginvalidate.c:258 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "operatorklass \"%s\" för accessmetod \"%s\" saknar supportfunktion %d eller %d" -#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 #: access/spgist/spgvalidate.c:387 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "supportfunktionsnummer %d är ogiltig för accessmetod %s" -#: access/gist/gist.c:759 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "index \"%s\" innehåller en inre tupel som är markerad ogiltig" -#: access/gist/gist.c:761 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Detta orsakas av en inkomplett siduppdelning under krashåterställning körd innan uppdatering till PostgreSQL 9.1." -#: access/gist/gist.c:762 access/gist/gistutil.c:801 access/gist/gistutil.c:812 -#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:227 -#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 -#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:813 +#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 +#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 +#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 +#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 #: access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "Var vänlig och kör REINDEX på det." -#: access/gist/gist.c:1176 +#: access/gist/gist.c:1196 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "lagar ofärdig split i index \"%s\", block %u" @@ -1084,52 +1265,52 @@ msgstr "picksplit-metod för kolumn %d i index \"%s\" misslyckades" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "Indexet är inte optimalt. För att optimera det, kontakta en utvecklare eller försök använda kolumnen som det andra värdet i CREATE INDEX-kommandot." -#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 +#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 #: access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "index \"%s\" innehåller en oväntad nollställd sida vid block %u" -#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 -#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:821 +#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 +#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "index \"%s\" har en trasig sida vid block %u" -#: access/gist/gistvalidate.c:203 +#: access/gist/gistvalidate.c:202 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "operatorfamiljen \"%s\" för accessmetod %s innehåller en ORDER BY som inte stöds för operator %s" -#: access/gist/gistvalidate.c:214 +#: access/gist/gistvalidate.c:213 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "operatorfamiljen \"%s\" för accessmetod %s innehåller en inkorrekt ORDER BY \"opfamiily\"-specifikation för operator %s" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:333 -#: utils/adt/varchar.c:1009 utils/adt/varchar.c:1064 +#: 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 "kunde inte bestämma vilken jämförelse (collation) som skall användas för sträng-hashning" -#: access/hash/hashfunc.c:280 access/hash/hashfunc.c:334 catalog/heap.c:668 -#: catalog/heap.c:674 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:2039 commands/tablecmds.c:17462 commands/view.c:86 -#: regex/regc_pg_locale.c:243 utils/adt/formatting.c:1648 -#: utils/adt/formatting.c:1770 utils/adt/formatting.c:1893 utils/adt/like.c:191 -#: utils/adt/like_support.c:1025 utils/adt/varchar.c:739 -#: utils/adt/varchar.c:1010 utils/adt/varchar.c:1065 utils/adt/varlena.c:1518 +#: 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." msgstr "Använd en COLLATE-klausul för att sätta jämförelsen explicit." -#: access/hash/hashinsert.c:86 +#: access/hash/hashinsert.c:84 #, c-format msgid "index row size %zu exceeds hash maximum %zu" msgstr "indexradstorlek %zu överstiger hash-maximum %zu" -#: access/hash/hashinsert.c:88 access/spgist/spgdoinsert.c:2006 -#: access/spgist/spgdoinsert.c:2283 access/spgist/spgutils.c:1011 +#: 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 "Värden större än en buffert-sida kan inte indexeras." @@ -1144,17 +1325,17 @@ msgstr "ogiltigt overflow-blocknummer %u" msgid "out of overflow pages in hash index \"%s\"" msgstr "slut på överspillsidor i hash-index \"%s\"" -#: access/hash/hashsearch.c:315 +#: access/hash/hashsearch.c:311 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "hash-index stöder inte hela-index-scans" -#: access/hash/hashutil.c:263 +#: access/hash/hashutil.c:262 #, c-format msgid "index \"%s\" is not a hash index" msgstr "index \"%s\" är inte ett hashträd" -#: access/hash/hashutil.c:269 +#: access/hash/hashutil.c:268 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "index \"%s\" har fel hash-version" @@ -1169,228 +1350,235 @@ msgstr "operatorfamilj \"%s\" för accessmetod %s saknar supportfunktion för op msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "operatorfamilj \"%s\" för accessmetod %s saknar mellan-typ-operator(er)" -#: access/heap/heapam.c:2027 +#: access/heap/heapam.c:2206 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "kan inte lägga till tupler i en parellell arbetare" -#: access/heap/heapam.c:2546 +#: access/heap/heapam.c:2725 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "kan inte radera tupler under en parallell operation" -#: access/heap/heapam.c:2593 +#: access/heap/heapam.c:2772 #, c-format msgid "attempted to delete invisible tuple" msgstr "försökte ta bort en osynlig tuple" -#: access/heap/heapam.c:3036 access/heap/heapam.c:5903 +#: 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 "kan inte uppdatera tupler under en parallell operation" -#: access/heap/heapam.c:3164 +#: access/heap/heapam.c:3397 #, c-format msgid "attempted to update invisible tuple" msgstr "försökte uppdatera en osynlig tuple" -#: access/heap/heapam.c:4551 access/heap/heapam.c:4589 -#: access/heap/heapam.c:4854 access/heap/heapam_handler.c:467 +#: 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 "kunde inte låsa rad i relationen \"%s\"" -#: access/heap/heapam_handler.c:412 +#: 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 "tupel som skall uppdateras hade redan ändrats av en operation som triggats av aktuellt kommando" + +#: access/heap/heapam_handler.c:413 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "tupel som skall låsas har redan flyttats till en annan partition av en samtida uppdatering" -#: access/heap/hio.c:536 access/heap/rewriteheap.c:659 +#: access/heap/hio.c:535 access/heap/rewriteheap.c:640 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "raden är för stor: storlek %zu, maximal storlek %zu" -#: access/heap/rewriteheap.c:919 +#: access/heap/rewriteheap.c:885 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "kunde inte skriva till fil \"%s\", skrev %d av %d: %m." -#: access/heap/rewriteheap.c:1011 access/heap/rewriteheap.c:1128 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:2971 access/transam/xlog.c:3162 -#: access/transam/xlog.c:3938 access/transam/xlog.c:8744 -#: access/transam/xlogfuncs.c:702 backup/basebackup_server.c:151 -#: backup/basebackup_server.c:244 commands/dbcommands.c:518 -#: postmaster/postmaster.c:4557 postmaster/postmaster.c:5560 -#: replication/logical/origin.c:603 replication/slot.c:1777 -#: storage/file/copydir.c:157 storage/smgr/md.c:232 utils/time/snapmgr.c:1263 +#: 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" msgstr "kunde inte skapa fil \"%s\": %m" -#: access/heap/rewriteheap.c:1138 +#: access/heap/rewriteheap.c:1104 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "kunde inte trunkera fil \"%s\" till %u: %m" -#: access/heap/rewriteheap.c:1156 access/transam/timeline.c:384 +#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3021 access/transam/xlog.c:3218 -#: access/transam/xlog.c:3950 commands/dbcommands.c:530 -#: postmaster/postmaster.c:4567 postmaster/postmaster.c:4577 +#: 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:1767 -#: replication/slot.c:1812 storage/file/buffile.c:545 -#: storage/file/copydir.c:197 utils/init/miscinit.c:1605 -#: utils/init/miscinit.c:1616 utils/init/miscinit.c:1624 utils/misc/guc.c:4331 -#: utils/misc/guc.c:4362 utils/misc/guc.c:5490 utils/misc/guc.c:5508 -#: utils/time/snapmgr.c:1268 utils/time/snapmgr.c:1275 +#: 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 "kunde inte skriva till fil \"%s\": %m" -#: access/heap/vacuumlazy.c:482 +#: access/heap/vacuumlazy.c:473 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "aggressiv vaccum av \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:487 +#: access/heap/vacuumlazy.c:478 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "kör vaccum på \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:635 +#: access/heap/vacuumlazy.c:626 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "avslutade vacuum av \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:637 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk aggressiv vacuum för att förhindra \"wraparound\" av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:648 +#: access/heap/vacuumlazy.c:639 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk vacuum för att förhindra \"wraparound\" av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:644 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk vacuum av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:655 +#: access/heap/vacuumlazy.c:646 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk vacuum av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:653 #, c-format msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" msgstr "sidor: %u borttagna, %u kvar, %u skannade (%-2f%% av totala antalet)\n" -#: access/heap/vacuumlazy.c:669 +#: access/heap/vacuumlazy.c:660 #, c-format msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" msgstr "tupler: %lld borttagna, %lld kvar, %lld är döda men ännu inte möjliga att ta bort\n" -#: access/heap/vacuumlazy.c:675 +#: access/heap/vacuumlazy.c:666 #, c-format msgid "tuples missed: %lld dead from %u pages not removed due to cleanup lock contention\n" msgstr "tupler missade: %lld döda från %u sidor som inte tagits bort på grund av låstvister vid städning\n" -#: access/heap/vacuumlazy.c:681 +#: access/heap/vacuumlazy.c:672 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" msgstr "gräns för borttagning: %u, som var %d XID:er gammal när operationen avslutades\n" -#: access/heap/vacuumlazy.c:688 +#: access/heap/vacuumlazy.c:679 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "ny relfrozenxid: %u, som är %d XID:er före tidigare värde\n" -#: access/heap/vacuumlazy.c:696 +#: access/heap/vacuumlazy.c:687 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "ny relminmxid: %u, som är %d MXID:er för tidigare värde\n" -#: access/heap/vacuumlazy.c:699 +#: access/heap/vacuumlazy.c:690 #, c-format msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" msgstr "frysta: %u sidor i tabellen (%.2f%% av totalt) hade %lld frysta tupler\n" -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:698 msgid "index scan not needed: " msgstr "index-scan behövdes inte: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:700 msgid "index scan needed: " msgstr "index-scan behövdes: " -#: access/heap/vacuumlazy.c:711 +#: access/heap/vacuumlazy.c:702 #, c-format msgid "%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "%u sidor i tabell (%.2f%% av totalt) hade %lld döda postidentifierare borttagna\n" -#: access/heap/vacuumlazy.c:716 +#: access/heap/vacuumlazy.c:707 msgid "index scan bypassed: " msgstr "index-scan överhoppad: " -#: access/heap/vacuumlazy.c:718 +#: access/heap/vacuumlazy.c:709 msgid "index scan bypassed by failsafe: " msgstr "index-scan överhoppad av felsäkerhetsfunktion: " -#: access/heap/vacuumlazy.c:720 +#: access/heap/vacuumlazy.c:711 #, c-format msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "%u sidor från tabell (%.2f%% totalt) har %lld döda postidentifierare\n" -#: access/heap/vacuumlazy.c:735 +#: access/heap/vacuumlazy.c:726 #, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "index \"%s\": sidor: %u totalt, %u tidigare borttagna, %u nuvarande borttagna, %u återanvändbara\n" -#: access/heap/vacuumlazy.c:747 commands/analyze.c:796 +#: 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-timing: läs: %.3f ms, skriv: %.3f ms\n" -#: access/heap/vacuumlazy.c:757 commands/analyze.c:799 +#: 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 "snitt läshastighet: %.3f MB/s, snitt skrivhastighet: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:760 commands/analyze.c:801 +#: access/heap/vacuumlazy.c:751 commands/analyze.c:799 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "bufferanvändning: %lld träffar, %lld missar, %lld nersmutsade\n" -#: access/heap/vacuumlazy.c:765 +#: access/heap/vacuumlazy.c:756 #, c-format msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "WAL-användning: %lld poster, %lld hela sidor, %llu bytes\n" -#: access/heap/vacuumlazy.c:769 commands/analyze.c:805 +#: access/heap/vacuumlazy.c:760 commands/analyze.c:803 #, c-format msgid "system usage: %s" msgstr "systemanvändning: %s" -#: access/heap/vacuumlazy.c:2482 +#: access/heap/vacuumlazy.c:2170 #, c-format msgid "table \"%s\": removed %lld dead item identifiers in %u pages" msgstr "tabell \"%s\": tog bort %lld döda postidentifierare i %u sidor" -#: access/heap/vacuumlazy.c:2642 +#: access/heap/vacuumlazy.c:2324 #, c-format msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "hoppar över ej nödvändigt underhåll av tabell \"%s.%s.%s\" som skyddsåtgärd efter %d index-scan" -#: access/heap/vacuumlazy.c:2645 +#: access/heap/vacuumlazy.c:2327 #, c-format msgid "The table's relfrozenxid or relminmxid is too far in the past." msgstr "Tabellens relfrozenxid eller relminmxid är för långt bak i tiden." -#: access/heap/vacuumlazy.c:2646 +#: access/heap/vacuumlazy.c:2328 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" @@ -1399,67 +1587,67 @@ msgstr "" "Överväg att öka konfigurationsparametern \"maintenance_work_mem\" eller \"autovacuum_work_mem\".\n" "Du kan också överväga andra metoder för att VACUUM skall hinna med allokeringen av transactions-ID." -#: access/heap/vacuumlazy.c:2891 +#: access/heap/vacuumlazy.c:2590 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": stoppar trunkering pga konfliktande låskrav" -#: access/heap/vacuumlazy.c:2961 +#: access/heap/vacuumlazy.c:2660 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "tabell \"%s\": trunkerade %u till %u sidor" -#: access/heap/vacuumlazy.c:3023 +#: access/heap/vacuumlazy.c:2722 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "tabell \"%s\": pausar trunkering pga konfliktande låskrav" -#: access/heap/vacuumlazy.c:3183 +#: access/heap/vacuumlazy.c:2841 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "stänger av parallell-flaggan för vacuumn på \"%s\" --- kan inte köra vacuum på temporära tabeller parallellt" -#: access/heap/vacuumlazy.c:3399 +#: access/heap/vacuumlazy.c:3108 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "vid skanning av block %u offset %u i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3402 +#: access/heap/vacuumlazy.c:3111 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "vid skanning av block %u i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3406 +#: access/heap/vacuumlazy.c:3115 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "vid skanning av relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3414 +#: access/heap/vacuumlazy.c:3123 #, c-format msgid "while vacuuming block %u offset %u of relation \"%s.%s\"" msgstr "vid vacuum av block %u offset %u i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3417 +#: access/heap/vacuumlazy.c:3126 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "vid vacuum av block %u i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3421 +#: access/heap/vacuumlazy.c:3130 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "vid vacuum av relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3426 commands/vacuumparallel.c:1074 +#: access/heap/vacuumlazy.c:3135 commands/vacuumparallel.c:1112 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "vid vaccum av index \"%s\" i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3431 commands/vacuumparallel.c:1080 +#: access/heap/vacuumlazy.c:3140 commands/vacuumparallel.c:1118 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "vid uppstädning av index \"%s\" i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3437 +#: access/heap/vacuumlazy.c:3146 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "vid trunkering av relation \"%s.%s\" till %u block" @@ -1474,19 +1662,24 @@ msgstr "accessmetod \"%s\" har inte typ %s" msgid "index access method \"%s\" does not have a handler" msgstr "indexaccessmetod \"%s\" har ingen hanterare" -#: access/index/genam.c:490 +#: access/index/genam.c:489 #, c-format msgid "transaction aborted during system catalog scan" msgstr "transaktionen avbruten under scan av systemkatalog" -#: access/index/indexam.c:142 catalog/objectaddress.c:1394 -#: commands/indexcmds.c:2867 commands/tablecmds.c:272 commands/tablecmds.c:296 -#: commands/tablecmds.c:17163 commands/tablecmds.c:18935 +#: access/index/genam.c:657 access/index/indexam.c:82 +#, c-format +msgid "cannot access index \"%s\" while it is being reindexed" +msgstr "kan inte använda index \"%s\" som håller på att indexeras om" + +#: 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\" är inte ett index" -#: access/index/indexam.c:979 +#: access/index/indexam.c:1028 #, c-format msgid "operator class %s has no options" msgstr "operatorklass %s har inga flaggor" @@ -1507,7 +1700,7 @@ msgid "This may be because of a non-immutable index expression." msgstr "Det kan bero på ett icke-immutable indexuttryck." #: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 -#: parser/parse_utilcmd.c:2317 +#: parser/parse_utilcmd.c:2323 #, c-format msgid "index \"%s\" is not a btree" msgstr "index \"%s\" är inte ett btree" @@ -1517,27 +1710,27 @@ msgstr "index \"%s\" är inte ett btree" msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "versionsfel i index \"%s\": filversion %d, aktuell version %d, minsta supportade version %d" -#: access/nbtree/nbtpage.c:1866 +#: access/nbtree/nbtpage.c:1861 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "index \"%s\" innehåller en halvdöd intern sida" -#: access/nbtree/nbtpage.c:1868 +#: access/nbtree/nbtpage.c:1863 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Detta kan ha orsakats av en avbruten VACUUM i version 9.3 eller äldre, innan uppdatering. Vänligen REINDEX:era det." -#: access/nbtree/nbtutils.c:2662 +#: access/nbtree/nbtutils.c:5108 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "indexradstorlek %zu överstiger btree version %u maximum %zu för index \"%s\"" -#: access/nbtree/nbtutils.c:2668 +#: access/nbtree/nbtutils.c:5114 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Indexrad refererar tupel (%u,%u) i relation \"%s\"." -#: access/nbtree/nbtutils.c:2672 +#: access/nbtree/nbtutils.c:5118 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1552,12 +1745,18 @@ msgstr "" msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "operatorfamilj \"%s\" för accessmetod %s saknar supportfunktioner för typerna %s och %s" +#: access/sequence/sequence.c:75 access/table/table.c:145 +#: optimizer/util/plancat.c:144 +#, c-format +msgid "cannot open relation \"%s\"" +msgstr "kan inte öppna relationen \"%s\"" + #: access/spgist/spgutils.c:245 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "komprimeringsmetod måste definieras när lövtypen skiljer sig från indatatypen" -#: access/spgist/spgutils.c:1008 +#: access/spgist/spgutils.c:1028 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST inre tuplestorlek %zu överstiger maximala %zu" @@ -1572,314 +1771,313 @@ msgstr "SP-GiST lövdatatyp %s matchar deklarerad typ %s" msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "operatorfamilj \"%s\" för accessmetod %s saknar supportfunktion %d för typ %s" -#: access/table/table.c:145 optimizer/util/plancat.c:145 -#, c-format -msgid "cannot open relation \"%s\"" -msgstr "kan inte öppna relationen \"%s\"" - -#: access/table/tableam.c:265 +#: access/table/tableam.c:255 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u) är inte giltigt för relation \"%s\"" -#: access/table/tableamapi.c:116 +#: access/table/tableamapi.c:109 #, c-format -msgid "%s cannot be empty." -msgstr "%s får inte vara tom." +msgid "\"%s\" cannot be empty." +msgstr "\"%s\" får inte vara tom." -#: access/table/tableamapi.c:123 access/transam/xlogrecovery.c:4774 +#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4859 #, c-format -msgid "%s is too long (maximum %d characters)." -msgstr "%s är för lång (maximalt %d tecken)." +msgid "\"%s\" is too long (maximum %d characters)." +msgstr "\"%s\" är för lång (maximalt %d tecken)." -#: access/table/tableamapi.c:146 +#: access/table/tableamapi.c:139 #, c-format msgid "table access method \"%s\" does not exist" msgstr "tabellaccessmetod \"%s\" existerar inte" -#: access/table/tableamapi.c:151 +#: access/table/tableamapi.c:144 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "Tabellaccessmetod \"%s\" existerar inte." -#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:152 +#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:151 #, c-format msgid "sample percentage must be between 0 and 100" msgstr "urvalsprocent måste vara mellan 0 och 100" -#: access/transam/commit_ts.c:279 +#: access/transam/commit_ts.c:287 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "kan inte hämta commit-tidsstämpel för transaktion %u" -#: access/transam/commit_ts.c:377 +#: access/transam/commit_ts.c:385 #, c-format msgid "could not get commit timestamp data" msgstr "kunde inte hämta commit-tidsstämpeldata" -#: access/transam/commit_ts.c:379 +#: access/transam/commit_ts.c:387 #, c-format msgid "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "Se till att konfigurationsparametern \"%s\" är satt på primär-servern." -#: access/transam/commit_ts.c:381 +#: access/transam/commit_ts.c:389 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Se till att konfigurationsparametern \"%s\" är satt." -#: access/transam/multixact.c:1023 +#: access/transam/multixact.c:1091 #, c-format -msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" -msgstr "databasen tar inte emot kommandon som genererar nya MultiXactId:er för att förhinda dataförlust vid \"wraparound\" i databasen \"%s\"" +msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"" +msgstr "databasen tar inte emot kommandon som tilldelar nya MultiXactId:er för att förhinda dataförlust vid \"wraparound\" i databasen \"%s\"" -#: access/transam/multixact.c:1025 access/transam/multixact.c:1032 -#: access/transam/multixact.c:1056 access/transam/multixact.c:1065 +#: 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" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." msgstr "" -"Utför en hela databasen-VACUUM i den databasen.\n" +"Utför en databas-VACUUM i hela den databasen.\n" "Du kan också behöva commit:a eller rulla tillbaka gamla förberedda transaktioner eller slänga gamla replikeringsslottar." -#: access/transam/multixact.c:1030 +#: access/transam/multixact.c:1098 #, c-format -msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" -msgstr "databasen tar inte emot kommandon som genererar nya MultiXactId:er för att förhinda dataförlust vid \"wraparound\" i databasen med OID %u" +msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database with OID %u" +msgstr "databasen tar inte emot kommandon som tilldelar nya MultiXactId:er för att förhinda dataförlust vid \"wraparound\" i databasen med OID %u" -#: access/transam/multixact.c:1051 access/transam/multixact.c:2333 +#: 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] "databasen \"%s\" måste städas innan ytterligare %u MultiXactId används" msgstr[1] "databasen \"%s\" måste städas innan ytterligare %u MultiXactId:er används" -#: access/transam/multixact.c:1060 access/transam/multixact.c:2342 +#: 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] "databas med OID %u måste städas (vacuum) innan %u till MultiXactId används" msgstr[1] "databas med OID %u måste städas (vacuum) innan %u till MultiXactId:er används" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1189 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "multixact \"members\"-gräns överskriden" -#: access/transam/multixact.c:1122 +#: 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] "Detta kommando skapar en multixact med %u medlemmar, men återstående utrymmer räcker bara till %u medlem." msgstr[1] "Detta kommando skapar en multixact med %u medlemmar, men återstående utrymmer räcker bara till %u medlemmar." -#: access/transam/multixact.c:1127 +#: 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 "Kör en hela-databas-VACUUM i databas med OID %u med reducerade iställningar vacuum_multixact_freeze_min_age och vacuum_multixact_freeze_table_age." +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 "Kör en databas-VACUUM i hela databasen med OID %u med reducerade inställningar för \"vacuum_multixact_freeze_min_age\" och \"vacuum_multixact_freeze_table_age\"." -#: access/transam/multixact.c:1158 +#: 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] "databas med OID %u måste städas innan %d mer multixact-medlem används" msgstr[1] "databas med OID %u måste städas innan %d fler multixact-medlemmar används" -#: access/transam/multixact.c:1163 +#: 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 "Kör en hela-databas-VACUUM i den databasen med reducerade inställningar för vacuum_multixact_freeze_min_age och vacuum_multixact_freeze_table_age." +msgid "Execute a database-wide VACUUM in that database with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." +msgstr "Kör en databas-VACUUM i hela den databasen med reducerade inställningar för \"vacuum_multixact_freeze_min_age\" och \"vacuum_multixact_freeze_table_age\"." -#: access/transam/multixact.c:1302 +#: access/transam/multixact.c:1371 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u finns inte längre -- troligen en wraparound" -#: access/transam/multixact.c:1308 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u har inte skapats än -- troligen en wraparound" -#: access/transam/multixact.c:2338 access/transam/multixact.c:2347 -#: access/transam/varsup.c:151 access/transam/varsup.c:158 -#: access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:2479 access/transam/multixact.c:2488 #, c-format msgid "" -"To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" +"To avoid MultiXactId 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 "" -"För att undvika att databasen stängs ner, utför en hela databas-VACCUM i den databasen.\n" +"För att undvika fel vid tilldelning av MultiXactId så utför en databas-VACCUM för hela den databasen.\n" "Du kan också behöva commit:a eller rulla tillbaka gamla förberedda transaktioner eller slänga gamla replikeringsslottar." -#: access/transam/multixact.c:2622 +#: 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 "MultiXact-medlems wraparound-skydd är avslagen eftersom äldsta checkpoint:ade MultiXact %u inte finns på disk" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2789 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "MultiXact-medlems wraparound-skydd är nu påslagen" -#: access/transam/multixact.c:3027 +#: access/transam/multixact.c:3180 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "äldsta MultiXact %u hittas inte, tidigast MultiXact %u, skippar trunkering" -#: access/transam/multixact.c:3045 +#: access/transam/multixact.c:3198 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "kan inte trunkera upp till %u eftersom den inte finns på disk, skippar trunkering" -#: access/transam/multixact.c:3359 +#: access/transam/multixact.c:3517 #, c-format msgid "invalid MultiXactId: %u" msgstr "ogiltig MultiXactId: %u" -#: access/transam/parallel.c:729 access/transam/parallel.c:848 +#: access/transam/parallel.c:748 access/transam/parallel.c:867 #, c-format msgid "parallel worker failed to initialize" msgstr "parallell arbetare misslyckades med initiering" -#: access/transam/parallel.c:730 access/transam/parallel.c:849 +#: access/transam/parallel.c:749 access/transam/parallel.c:868 #, c-format msgid "More details may be available in the server log." msgstr "Fler detaljer kan finnas i serverloggen." -#: access/transam/parallel.c:910 +#: access/transam/parallel.c:929 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster avslutade under en parallell transaktion" -#: access/transam/parallel.c:1097 +#: access/transam/parallel.c:1116 #, c-format msgid "lost connection to parallel worker" msgstr "tappad kopplingen till parallell arbetare" -#: access/transam/parallel.c:1163 access/transam/parallel.c:1165 +#: access/transam/parallel.c:1172 access/transam/parallel.c:1174 msgid "parallel worker" msgstr "parallell arbetare" -#: access/transam/parallel.c:1319 replication/logical/applyparallelworker.c:893 +#: access/transam/parallel.c:1344 replication/logical/applyparallelworker.c:890 #, c-format msgid "could not map dynamic shared memory segment" msgstr "kunde inte skapa dynamiskt delat minnessegment: %m" -#: access/transam/parallel.c:1324 replication/logical/applyparallelworker.c:899 +#: access/transam/parallel.c:1349 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "ogiltigt magiskt nummer i dynamiskt delat minnessegment" -#: access/transam/rmgr.c:84 +#: access/transam/rmgr.c:93 #, c-format msgid "resource manager with ID %d not registered" msgstr "resurshanterare med ID %d är inte registrerad" -#: access/transam/rmgr.c:85 +#: access/transam/rmgr.c:94 #, c-format -msgid "Include the extension module that implements this resource manager in shared_preload_libraries." -msgstr "Inkludera utökningsmodulen som implementerar denna resurshanterar i shared_preload_libraries." +msgid "Include the extension module that implements this resource manager in \"shared_preload_libraries\"." +msgstr "Inkludera utökningsmodulen som implementerar denna resurshanterare i \"shared_preload_libraries\"." -#: access/transam/rmgr.c:101 +#: access/transam/rmgr.c:110 #, c-format msgid "custom resource manager name is invalid" msgstr "namn på egendefinierad resurshanterare är ogiltigt" -#: access/transam/rmgr.c:102 +#: access/transam/rmgr.c:111 #, c-format msgid "Provide a non-empty name for the custom resource manager." msgstr "Ange ett icke-tomt namn för den egendefinierade resurshanteraren." -#: access/transam/rmgr.c:105 +#: access/transam/rmgr.c:114 #, c-format msgid "custom resource manager ID %d is out of range" msgstr "egendefinierat resurshanterar-ID %d är utanför giltigt intervall" -#: access/transam/rmgr.c:106 +#: access/transam/rmgr.c:115 #, c-format msgid "Provide a custom resource manager ID between %d and %d." msgstr "Ange ett egendefinierat resurshanterar-ID mellan %d och %d." -#: access/transam/rmgr.c:111 access/transam/rmgr.c:116 -#: access/transam/rmgr.c:128 +#: access/transam/rmgr.c:120 access/transam/rmgr.c:125 +#: access/transam/rmgr.c:137 #, c-format msgid "failed to register custom resource manager \"%s\" with ID %d" msgstr "misslyckades med att registera en egendefinierad resurshanterare \"%s\" med ID %d" -#: access/transam/rmgr.c:112 +#: access/transam/rmgr.c:121 #, c-format -msgid "Custom resource manager must be registered while initializing modules in shared_preload_libraries." -msgstr "Egendefinierad resurshanterare måste vara registerad när man initierar moduler i shared_preload_libraries." +msgid "Custom resource manager must be registered while initializing modules in \"shared_preload_libraries\"." +msgstr "Egendefinierad resurshanterare måste vara registerad när man initierar moduler i \"shared_preload_libraries\"." -#: access/transam/rmgr.c:117 +#: access/transam/rmgr.c:126 #, c-format msgid "Custom resource manager \"%s\" already registered with the same ID." msgstr "Egendefinierad resurshanterare \"%s\" är redan registrerade med samma ID." -#: access/transam/rmgr.c:129 +#: access/transam/rmgr.c:138 #, c-format msgid "Existing resource manager with ID %d has the same name." msgstr "Det finns redan en resurshanterare med ID %d som har samma namn." -#: access/transam/rmgr.c:135 +#: access/transam/rmgr.c:144 #, c-format msgid "registered custom resource manager \"%s\" with ID %d" msgstr "registrerade egendefinerad resurshanterare \"%s\" med ID %d" -#: access/transam/slru.c:714 +#: access/transam/slru.c:361 +#, c-format +msgid "\"%s\" must be a multiple of %d" +msgstr "\"%s\" måste vara en multiple av \"%d\"" + +#: access/transam/slru.c:830 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "filen \"%s\" existerar inte, läses som nollor" -#: access/transam/slru.c:946 access/transam/slru.c:952 -#: access/transam/slru.c:960 access/transam/slru.c:965 -#: access/transam/slru.c:972 access/transam/slru.c:977 -#: access/transam/slru.c:984 access/transam/slru.c:991 +#: 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 "kunde inte läsa status på transaktion %u" -#: access/transam/slru.c:947 +#: access/transam/slru.c:1060 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Kunde inte öppna fil \"%s\": %m." -#: access/transam/slru.c:953 +#: access/transam/slru.c:1066 #, c-format msgid "Could not seek in file \"%s\" to offset %d: %m." msgstr "Kunde inte söka i fil \"%s\" till offset %d: %m." -#: access/transam/slru.c:961 +#: access/transam/slru.c:1074 #, c-format msgid "Could not read from file \"%s\" at offset %d: %m." msgstr "Kunde inte läsa från fil \"%s\" på offset %d: %m." -#: access/transam/slru.c:966 +#: access/transam/slru.c:1079 #, c-format msgid "Could not read from file \"%s\" at offset %d: read too few bytes." msgstr "Kunde inte läsa från fil \"%s\" på offset %d: läste för få bytes." -#: access/transam/slru.c:973 +#: access/transam/slru.c:1086 #, c-format msgid "Could not write to file \"%s\" at offset %d: %m." msgstr "Kunde inte skriva till fil \"%s\" på offset %d: %m." -#: access/transam/slru.c:978 +#: access/transam/slru.c:1091 #, c-format msgid "Could not write to file \"%s\" at offset %d: wrote too few bytes." msgstr "Kunde inte skriva till fil \"%s\" på offset %d: skrev för få bytes." -#: access/transam/slru.c:985 +#: access/transam/slru.c:1098 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Kunde inte fsync:a fil \"%s\": %m." -#: access/transam/slru.c:992 +#: access/transam/slru.c:1105 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Kunde inte stänga fil \"%s\": %m." -#: access/transam/slru.c:1253 +#: access/transam/slru.c:1431 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "Kunde inte trunkera katalog \"%s\": trolig wraparound" @@ -1924,788 +2122,824 @@ msgstr "Tidslinje-ID:er måste vara mindre än barnens tidslinje-ID:er." msgid "requested timeline %u is not in this server's history" msgstr "efterfrågad tidslinje %u finns inte i denna servers historik" -#: access/transam/twophase.c:386 +#: access/transam/twophase.c:368 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "transaktionsidentifierare \"%s\" är för lång" -#: access/transam/twophase.c:393 +#: access/transam/twophase.c:375 #, c-format msgid "prepared transactions are disabled" msgstr "förberedda transaktioner är avslagna" -#: access/transam/twophase.c:394 +#: access/transam/twophase.c:376 #, c-format -msgid "Set max_prepared_transactions to a nonzero value." -msgstr "Sätt max_prepared_transactions till ett ickenollvärde." +msgid "Set \"max_prepared_transactions\" to a nonzero value." +msgstr "Sätt \"max_prepared_transactions\" till ett värde som inte är noll." -#: access/transam/twophase.c:413 +#: access/transam/twophase.c:395 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "transaktionsidentifierare \"%s\" används redan" -#: access/transam/twophase.c:422 access/transam/twophase.c:2517 +#: access/transam/twophase.c:404 access/transam/twophase.c:2531 #, c-format msgid "maximum number of prepared transactions reached" msgstr "maximalt antal förberedda transaktioner har uppnåtts" -#: access/transam/twophase.c:423 access/transam/twophase.c:2518 +#: access/transam/twophase.c:405 access/transam/twophase.c:2532 #, c-format -msgid "Increase max_prepared_transactions (currently %d)." -msgstr "Öka max_prepared_transactions (nu %d)." +msgid "Increase \"max_prepared_transactions\" (currently %d)." +msgstr "Öka \"max_prepared_transactions\" (nu %d)." -#: access/transam/twophase.c:599 +#: access/transam/twophase.c:580 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "förberedd transaktion med identifierare \"%s\" är upptagen" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:586 #, c-format msgid "permission denied to finish prepared transaction" msgstr "rättighet saknas för att slutföra förberedd transaktion" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:587 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Måste vara superuser eller den användare som förberedde transaktionen" -#: access/transam/twophase.c:617 +#: access/transam/twophase.c:598 #, c-format msgid "prepared transaction belongs to another database" msgstr "förberedda transaktionen tillhör en annan databas" -#: access/transam/twophase.c:618 +#: access/transam/twophase.c:599 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Anslut till databasen där transaktionen var förberedd för att slutföra den." -#: access/transam/twophase.c:633 +#: access/transam/twophase.c:614 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "förberedd transaktion med identifierare \"%s\" finns inte" -#: access/transam/twophase.c:1168 +#: access/transam/twophase.c:1174 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "tvåfas-statusfilens maximala längd överskriden" -#: access/transam/twophase.c:1323 +#: 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] "felaktig storlek på fil \"%s\": %lld byte" msgstr[1] "felaktig storlek på fil \"%s\": %lld bytes" -#: access/transam/twophase.c:1332 +#: access/transam/twophase.c:1338 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "inkorrekt justering (alignment) av CRC-offset för fil \"%s\"" -#: access/transam/twophase.c:1350 +#: access/transam/twophase.c:1356 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "kunde inte läsa fil \"%s\": läste %d av %lld" -#: access/transam/twophase.c:1365 +#: access/transam/twophase.c:1371 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "felaktigt magiskt nummer lagrat i fil \"%s\"" -#: access/transam/twophase.c:1371 +#: access/transam/twophase.c:1377 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "felaktig storlek lagrad i fil \"%s\"" -#: access/transam/twophase.c:1383 +#: access/transam/twophase.c:1389 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "beräknad CRC-checksumma matchar inte värdet som är lagrat i filen \"%s\"" -#: access/transam/twophase.c:1413 access/transam/xlogrecovery.c:590 -#: replication/logical/logical.c:209 replication/walsender.c:687 +#: 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 "Misslyckades vid allokering av en WAL-läs-processor." -#: access/transam/twophase.c:1423 +#: access/transam/twophase.c:1429 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "kunde inte läsa tvåfas-status från WAL vid %X/%X: %s" -#: access/transam/twophase.c:1428 +#: access/transam/twophase.c:1434 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "kunde inte läsa tvåfas-status från WAL vid %X/%X" -#: access/transam/twophase.c:1436 +#: access/transam/twophase.c:1442 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "förväntad tvåfas-statusdata finns inte i WAL vid %X/%X" -#: access/transam/twophase.c:1732 +#: access/transam/twophase.c:1745 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "kan inte återskapa fil \"%s\": %m" -#: access/transam/twophase.c:1859 +#: 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 tvåfas-statusfil skrevs för långkörande förberedd transkation" msgstr[1] "%u tvåfas-statusfiler skrevs för långkörande förberedda transaktioner" -#: access/transam/twophase.c:2093 +#: access/transam/twophase.c:2107 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "återskapar förberedd transaktion %u från delat minne" -#: access/transam/twophase.c:2186 +#: access/transam/twophase.c:2200 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "tar bort död tvåfas-statusfil för transaktioon %u" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2207 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "tar bort död tvåfas-statusfil från minne för transaktion %u" -#: access/transam/twophase.c:2206 +#: access/transam/twophase.c:2220 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "tar bort framtida tvåfas-statusfil för transaktion %u" -#: access/transam/twophase.c:2213 +#: access/transam/twophase.c:2227 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "tar bort framtida tvåfas-statusfil från minne för transaktion %u" -#: access/transam/twophase.c:2238 +#: access/transam/twophase.c:2252 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "korrupt tvåfas-statusfil för transaktion %u" -#: access/transam/twophase.c:2243 +#: access/transam/twophase.c:2257 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "korrupt tvåfas-status i minnet för transaktion %u" -#: access/transam/twophase.c:2500 +#: access/transam/twophase.c:2514 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "kunde inte återställa tvåfas-statusfil för transaktion %u" -#: access/transam/twophase.c:2502 +#: 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 "Statefil för tvåfas har hittats i WAL-post %X/%X men denna transaktion har redan återställts från disk." -#: access/transam/twophase.c:2510 jit/jit.c:205 utils/fmgr/dfmgr.c:209 -#: utils/fmgr/dfmgr.c:415 +#: 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 "kunde inte komma åt filen \"%s\": %m" -#: access/transam/varsup.c:129 +#: access/transam/varsup.c:156 +#, c-format +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database \"%s\"" +msgstr "databasen tar inte emot kommandon som tilldelar nya transaktions-ID för att förhinda dataförlust vid \"wraparound\" i databasen \"%s\"" + +#: access/transam/varsup.c:163 +#, c-format +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database with OID %u" +msgstr "databasen tar inte emot kommandon som tilldelar nya transaktions-ID för att förhinda dataförlust vid \"wraparound\" i databasen med OID %u" + +#: access/transam/varsup.c:175 access/transam/varsup.c:490 #, c-format -msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" -msgstr "databasen tar inte emot kommandon för att förhinda dataförlust vid \"wraparound\" i databasen \"%s\"" +msgid "database \"%s\" must be vacuumed within %u transactions" +msgstr "databas \"%s\" måste städas (vacuum) inom %u transaktioner" -#: access/transam/varsup.c:131 access/transam/varsup.c:138 +#: access/transam/varsup.c:178 #, c-format msgid "" -"Stop the postmaster and vacuum that database in single-user mode.\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 "" -"Stoppa postmaster och städa (vacuum) den databasen i enanvändarläge.\n" -"Du kan också behöva commit:a eller rulla tillbaka förberedda transaktioner eller slänga gamla replikeringsslottar." +"För att undvika fel vid tilldelning av transaktions-ID så utför en databas-VACCUM för hela den databasen.\n" +"Du kan också behöva commit:a eller rulla tillbaka gamla förberedda transaktioner eller slänga gamla replikeringsslottar." -#: access/transam/varsup.c:136 +#: access/transam/varsup.c:182 access/transam/varsup.c:497 #, c-format -msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" -msgstr "databasen tar inte emot kommandon för att förhinda dataförlust vid wraparound i databas med OID %u" +msgid "database with OID %u must be vacuumed within %u transactions" +msgstr "databas med OID %u måste städas (vacuum) inom %u transaktioner" -#: access/transam/varsup.c:148 access/transam/varsup.c:463 +#: access/transam/varsup.c:185 access/transam/varsup.c:493 +#: access/transam/varsup.c:500 #, c-format -msgid "database \"%s\" must be vacuumed within %u transactions" -msgstr "databas \"%s\" måste städas (vacuum) inom %u transaktioner" +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 "" +"För att undvika fel vid tilldelning av XID så utför en databas-VACCUM för hela den databasen.\n" +"Du kan också behöva commit:a eller rulla tillbaka gamla förberedda transaktioner eller slänga gamla replikeringsslottar." -#: access/transam/varsup.c:155 access/transam/varsup.c:470 +#: access/transam/xact.c:649 #, c-format -msgid "database with OID %u must be vacuumed within %u transactions" -msgstr "databas med OID %u måste städas (vacuum) inom %u transaktioner" +msgid "cannot assign transaction IDs during a parallel operation" +msgstr "can inte tilldela transaktions-ID under en parallell operation" + +#: access/transam/xact.c:840 +#, c-format +msgid "cannot modify data in a parallel worker" +msgstr "kan inte modifiera data i en parellell arbetare" + +#: access/transam/xact.c:1115 +#, c-format +msgid "cannot start commands during a parallel operation" +msgstr "kan inte starta kommandon under en parallell operation" -#: access/transam/xact.c:1102 +#: access/transam/xact.c:1123 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "kan inte ha mer än 2^32-2 kommandon i en transaktion" -#: access/transam/xact.c:1643 +#: access/transam/xact.c:1664 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "maximalt antal commit:ade undertransaktioner (%d) överskridet" -#: access/transam/xact.c:2513 +#: access/transam/xact.c:2561 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "kan inte göra PREPARE på en transaktion som har arbetat med temporära objekt" -#: access/transam/xact.c:2523 +#: access/transam/xact.c:2571 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "kan inte göra PREPARE på en transaktion som har exporterade snapshots" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3490 +#: access/transam/xact.c:3593 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s kan inte köras i ett transaktionsblock" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3500 +#: access/transam/xact.c:3603 #, c-format msgid "%s cannot run inside a subtransaction" -msgstr "%s kan inte köras i ett undertransaktionsblock" +msgstr "%s kan inte köras i en undertransaktion" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3510 +#: access/transam/xact.c:3613 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s kan inte köras inuti en pipeline" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3520 +#: access/transam/xact.c:3623 #, c-format msgid "%s cannot be executed from a function" msgstr "%s kan inte köras från en funktion" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3591 access/transam/xact.c:3916 -#: access/transam/xact.c:3995 access/transam/xact.c:4118 -#: access/transam/xact.c:4269 access/transam/xact.c:4338 -#: access/transam/xact.c:4449 +#: access/transam/xact.c:3694 access/transam/xact.c:4019 +#: access/transam/xact.c:4098 access/transam/xact.c:4221 +#: access/transam/xact.c:4372 access/transam/xact.c:4441 +#: access/transam/xact.c:4552 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s kan bara användas i transaktionsblock" -#: access/transam/xact.c:3802 +#: access/transam/xact.c:3905 #, c-format msgid "there is already a transaction in progress" msgstr "det är redan en transaktion igång" -#: access/transam/xact.c:3921 access/transam/xact.c:4000 -#: access/transam/xact.c:4123 +#: access/transam/xact.c:4024 access/transam/xact.c:4103 +#: access/transam/xact.c:4226 #, c-format msgid "there is no transaction in progress" msgstr "ingen transaktion pågår" -#: access/transam/xact.c:4011 +#: access/transam/xact.c:4114 #, c-format msgid "cannot commit during a parallel operation" msgstr "kan inte commit:a under en parallell operation" -#: access/transam/xact.c:4134 +#: access/transam/xact.c:4237 #, c-format msgid "cannot abort during a parallel operation" msgstr "can inte avbryta under en parallell operation" -#: access/transam/xact.c:4233 +#: access/transam/xact.c:4336 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "kan inte definiera sparpunkter under en parallell operation" -#: access/transam/xact.c:4320 +#: access/transam/xact.c:4423 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "kan inte frigöra en sparpunkt under en parallell operation" -#: access/transam/xact.c:4330 access/transam/xact.c:4381 -#: access/transam/xact.c:4441 access/transam/xact.c:4490 +#: access/transam/xact.c:4433 access/transam/xact.c:4484 +#: access/transam/xact.c:4544 access/transam/xact.c:4593 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "sparpunkt \"%s\" existerar inte" -#: access/transam/xact.c:4387 access/transam/xact.c:4496 +#: access/transam/xact.c:4490 access/transam/xact.c:4599 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "sparpunkt \"%s\" finns inte inom aktuell sparpunktsnivå" -#: access/transam/xact.c:4429 +#: access/transam/xact.c:4532 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "kan inte rulla tillbaka till sparpunkt under en parallell operation" -#: access/transam/xact.c:4557 +#: access/transam/xact.c:5376 #, c-format -msgid "cannot start subtransactions during a parallel operation" -msgstr "kan inte starta subtransaktioner under en parallell operation" +msgid "cannot have more than 2^32-1 subtransactions in a transaction" +msgstr "kan inte ha mer än 2^32-1 undertransaktioner i en transaktion" -#: access/transam/xact.c:4625 +#: access/transam/xlog.c:1542 #, c-format -msgid "cannot commit subtransactions during a parallel operation" -msgstr "kan inte commit:a subtransaktioner undert en parallell operation" +msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" +msgstr "förfrågan att flush:a efter slutet av genererad WAL; efterfrågad %X/%X, aktuell position %X/%X" -#: access/transam/xact.c:5271 +#: access/transam/xlog.c:1769 #, c-format -msgid "cannot have more than 2^32-1 subtransactions in a transaction" -msgstr "kan inte ha mer än 2^32-1 subtransaktioner i en transaktion" +msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X" +msgstr "kan inte läsa efter slutet av genererad WAL; efterfrågad %X/%X, aktuell position %X/%X" -#: access/transam/xlog.c:1466 +#: access/transam/xlog.c:2210 access/transam/xlog.c:4501 #, c-format -msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" -msgstr "förfrågan att flush:a efter slutet av genererad WAL; efterfrågad %X/%X, aktuell position %X/%X" +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "WAL-segmentstorleken måste vara en tvåpotens mellan 1 MB och 1 GB." #: access/transam/xlog.c:2228 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "kunde inte skriva till loggfil %s vid offset %u, längd %zu: %m" +msgid "\"%s\" must be set to -1 during binary upgrade mode." +msgstr "\"%s\" måsta vara satt till -1 i binärt uppgraderingsläge" + +#: access/transam/xlog.c:2477 +#, c-format +msgid "could not write to log file \"%s\" at offset %u, length %zu: %m" +msgstr "kunde inte skriva till loggfil \"%s\" vid offset %u, längd %zu: %m" -#: access/transam/xlog.c:3455 access/transam/xlogutils.c:833 -#: replication/walsender.c:2725 +#: 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 "efterfrågat WAL-segment %s har redan tagits bort" -#: access/transam/xlog.c:3739 +#: access/transam/xlog.c:4061 #, c-format msgid "could not rename file \"%s\": %m" msgstr "kunde inte byta namn på fil \"%s\": %m" -#: access/transam/xlog.c:3781 access/transam/xlog.c:3791 +#: 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 "krävd WAL-katalog \"%s\" finns inte" -#: access/transam/xlog.c:3797 +#: access/transam/xlog.c:4121 access/transam/xlog.c:4142 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "skapar saknad WAL-katalog \"%s\"" -#: access/transam/xlog.c:3800 commands/dbcommands.c:3172 +#: 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 "kunde inte skapa saknad katalog \"%s\": %m" -#: access/transam/xlog.c:3867 +#: access/transam/xlog.c:4212 #, c-format msgid "could not generate secret authorization token" msgstr "kunde inte generera hemligt auktorisationstoken" -#: access/transam/xlog.c:4017 access/transam/xlog.c:4026 -#: access/transam/xlog.c:4050 access/transam/xlog.c:4057 -#: access/transam/xlog.c:4064 access/transam/xlog.c:4069 -#: access/transam/xlog.c:4076 access/transam/xlog.c:4083 -#: access/transam/xlog.c:4090 access/transam/xlog.c:4097 -#: access/transam/xlog.c:4104 access/transam/xlog.c:4111 -#: access/transam/xlog.c:4120 access/transam/xlog.c:4127 -#: utils/init/miscinit.c:1762 +#: 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 "databasfilerna är inkompatibla med servern" -#: access/transam/xlog.c:4018 +#: 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 "Databasklustret initierades med PG_CONTROL_VERSION %d (0x%08x), men servern kompilerades med PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4022 +#: 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 "Detta kan orsakas av en felaktig byte-ordning. Du behöver troligen köra initdb." -#: access/transam/xlog.c:4027 +#: 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 "Databasklustret initierades med PG_CONTROL_VERSION %d, men servern kompilerades med PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4030 access/transam/xlog.c:4054 -#: access/transam/xlog.c:4061 access/transam/xlog.c:4066 +#: 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 "Du behöver troligen köra initdb." -#: access/transam/xlog.c:4041 +#: access/transam/xlog.c:4389 #, c-format msgid "incorrect checksum in control file" msgstr "ogiltig kontrollsumma kontrollfil" -#: access/transam/xlog.c:4051 +#: 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 "Databasklustret initierades med CATALOG_VERSION_NO %d, men servern kompilerades med CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4058 +#: 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 "Databasklustret initierades med MAXALIGN %d, men servern kompilerades med MAXALIGN %d." -#: access/transam/xlog.c:4065 +#: 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 "Databasklustret verkar använda en annan flyttalsrepresentation än vad serverprogrammet gör." -#: access/transam/xlog.c:4070 +#: 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 "Databasklustret initierades med BLCKSZ %d, men servern kompilerades med BLCKSZ %d." -#: access/transam/xlog.c:4073 access/transam/xlog.c:4080 -#: access/transam/xlog.c:4087 access/transam/xlog.c:4094 -#: access/transam/xlog.c:4101 access/transam/xlog.c:4108 -#: access/transam/xlog.c:4115 access/transam/xlog.c:4123 -#: access/transam/xlog.c:4130 +#: 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 "Det verkar som om du måste kompilera om eller köra initdb." -#: access/transam/xlog.c:4077 +#: 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 "Databasklustret initierades med RELSEG_SIZE %d, men servern kompilerades med RELSEG_SIZE %d." -#: access/transam/xlog.c:4084 +#: 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 "Databasklustret initierades med XLOG_BLCKSZ %d, men servern kompilerades med XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4091 +#: 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 "Databasklustret initierades med NAMEDATALEN %d, men servern kompilerades med NAMEDATALEN %d." -#: access/transam/xlog.c:4098 +#: 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 "Databasklustret initierades med INDEX_MAX_KEYS %d, men servern kompilerades med INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4105 +#: 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 "Databasklustret initierades med TOAST_MAX_CHUNK_SIZE %d, men servern kompilerades med TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4112 +#: 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 "Databasklustret initierades med LOBLKSIZE %d, men servern kompilerades med LOBLKSIZE %d." -#: access/transam/xlog.c:4121 +#: 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 "Databasklustret initierades utan USE_FLOAT8_BYVAL, men servern kompilerades med USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4128 +#: 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 "Databasklustret initierades med USE_FLOAT8_BYVAL, men servern kompilerades utan USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4497 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" -msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" -msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" +msgid "invalid WAL segment size in control file (%d byte)" +msgid_plural "invalid WAL segment size in control file (%d bytes)" +msgstr[0] "ogiltigt WAL-segmentstorlek i kontrollfil (%d byte)" +msgstr[1] "ogiltigt WAL-segmentstorlek i kontrollfil (%d byte)" -#: access/transam/xlog.c:4149 +#: access/transam/xlog.c:4510 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"min_wal_size\" måste vara minst dubbla \"wal_segment_size\"" -#: access/transam/xlog.c:4153 +#: access/transam/xlog.c:4514 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"max_wal_size\" måste vara minst dubbla \"wal_segment_size\"" -#: access/transam/xlog.c:4308 catalog/namespace.c:4335 -#: commands/tablespace.c:1216 commands/user.c:2536 commands/variable.c:72 -#: utils/error/elog.c:2205 +#: 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 "List-syntaxen är ogiltig." -#: access/transam/xlog.c:4354 commands/user.c:2552 commands/variable.c:173 -#: utils/error/elog.c:2231 +#: 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 "Okänt nyckelord: \"%s\"" -#: access/transam/xlog.c:4768 +#: access/transam/xlog.c:5129 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "kunde inte skriva bootstrap-write-ahead-loggfil: %m" -#: access/transam/xlog.c:4776 +#: access/transam/xlog.c:5137 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "kunde inte fsync:a bootstrap-write-ahead-loggfil: %m" -#: access/transam/xlog.c:4782 +#: access/transam/xlog.c:5143 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "kunde inte stänga bootstrap-write-ahead-loggfil: %m" -#: access/transam/xlog.c:4999 +#: access/transam/xlog.c:5368 #, c-format -msgid "WAL was generated with wal_level=minimal, cannot continue recovering" -msgstr "WAL genererades med wal_level=minimal, kan inte fortsätta återställande" +msgid "WAL was generated with \"wal_level=minimal\", cannot continue recovering" +msgstr "WAL genererades med \"wal_level=minimal\", kan inte fortsätta återställande" -#: access/transam/xlog.c:5000 +#: access/transam/xlog.c:5369 #, c-format -msgid "This happens if you temporarily set wal_level=minimal on the server." -msgstr "Detta händer om du temporärt sätter wal_level=minimal på servern." +msgid "This happens if you temporarily set \"wal_level=minimal\" on the server." +msgstr "Detta händer om du temporärt sätter \"wal_level=minimal\" på servern." -#: access/transam/xlog.c:5001 +#: access/transam/xlog.c:5370 #, c-format -msgid "Use a backup taken after setting wal_level to higher than minimal." -msgstr "Använd en backup som är tagen efter att inställningen wal_level satts till ett högre värde än minimal." +msgid "Use a backup taken after setting \"wal_level\" to higher than \"minimal\"." +msgstr "Använd en backup som är tagen efter att inställningen \"wal_level\" satts till ett högre värde än \"minimal\"." -#: access/transam/xlog.c:5065 +#: access/transam/xlog.c:5435 #, c-format msgid "control file contains invalid checkpoint location" msgstr "kontrollfil innehåller ogiltig checkpoint-position" -#: access/transam/xlog.c:5076 +#: access/transam/xlog.c:5446 #, c-format msgid "database system was shut down at %s" msgstr "databassystemet stängdes ner vid %s" -#: access/transam/xlog.c:5082 +#: access/transam/xlog.c:5452 #, c-format msgid "database system was shut down in recovery at %s" msgstr "databassystemet stängdes ner under återställning vid %s" -#: access/transam/xlog.c:5088 +#: access/transam/xlog.c:5458 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "nedstängning av databasen avbröts; senast kända upptidpunkt vid %s" -#: access/transam/xlog.c:5094 +#: access/transam/xlog.c:5464 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "databassystemet avbröts under återställning vid %s" -#: access/transam/xlog.c:5096 +#: 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 "Det betyder troligen att en del data är förstörd och du behöver återställa databasen från den senaste backup:en." -#: access/transam/xlog.c:5102 +#: access/transam/xlog.c:5472 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "databassystemet avbröts under återställning vid loggtid %s" -#: access/transam/xlog.c:5104 +#: 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 "Om detta har hänt mer än en gång så kan data vara korrupt och du kanske måste återställa till ett tidigare återställningsmål." -#: access/transam/xlog.c:5110 +#: access/transam/xlog.c:5480 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "databassystemet avbröts; senast kända upptidpunkt vid %s" -#: access/transam/xlog.c:5116 +#: access/transam/xlog.c:5487 #, c-format msgid "control file contains invalid database cluster state" msgstr "kontrollfil innehåller ogiltigt databasklustertillstånd" -#: access/transam/xlog.c:5500 +#: access/transam/xlog.c:5875 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL slutar före sluttiden av online-backup:en" -#: access/transam/xlog.c:5501 +#: access/transam/xlog.c:5876 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Alla genererade WAL under tiden online-backup:en togs måste vara tillgängliga vid återställning." -#: access/transam/xlog.c:5504 +#: access/transam/xlog.c:5880 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL avslutas innan konstistent återställningspunkt" -#: access/transam/xlog.c:5550 +#: access/transam/xlog.c:5926 #, c-format msgid "selected new timeline ID: %u" msgstr "valt nytt tidslinje-ID: %u" -#: access/transam/xlog.c:5583 +#: access/transam/xlog.c:5959 #, c-format msgid "archive recovery complete" msgstr "arkivåterställning klar" -#: access/transam/xlog.c:6189 +#: access/transam/xlog.c:6612 #, c-format msgid "shutting down" msgstr "stänger ner" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6228 +#: access/transam/xlog.c:6651 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "restartpoint startar:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6240 +#: access/transam/xlog.c:6663 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "checkpoint startar:%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:6305 +#: 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 "restartpoint klar: skrev %d buffers (%.1f%%); %d WAL-fil(er) tillagda, %d borttagna, %d recyclade; skriv=%ld.%03d s, synk=%ld.%03d s, totalt=%ld.%03d s; synk-filer=%d, längsta=%ld.%03d s, genomsnitt=%ld.%03d s; distans=%d kB, estimat=%d kB; lsn=%X/%X, redo-lsn=%X/%X" -#: access/transam/xlog.c:6328 +#: 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 "checkpoint klar: skrev %d buffers (%.1f%%); %d WAL-fil(er) tillagda, %d borttagna, %d recyclade; skriv=%ld.%03d s, synk=%ld.%03d s, totalt=%ld.%03d s; synk-filer=%d, längsta=%ld.%03d s, genomsnitt=%ld.%03d s; distans=%d kB, estimat=%d kB; lsn=%X/%X, redo-lsn=%X/%X" -#: access/transam/xlog.c:6766 +#: access/transam/xlog.c:7233 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "samtidig write-ahead-logg-aktivitet när databassystemet stängs ner" -#: access/transam/xlog.c:7327 +#: access/transam/xlog.c:7818 #, c-format msgid "recovery restart point at %X/%X" msgstr "återställningens omstartspunkt vid %X/%X" -#: access/transam/xlog.c:7329 +#: access/transam/xlog.c:7820 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Senaste kompletta transaktionen var vid loggtid %s" -#: access/transam/xlog.c:7577 +#: access/transam/xlog.c:8082 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "återställningspunkt \"%s\" skapad vid %X/%X" -#: access/transam/xlog.c:7784 +#: access/transam/xlog.c:8289 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "online-backup avbröts, återställning kan inte fortsätta" -#: access/transam/xlog.c:7841 +#: access/transam/xlog.c:8347 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "oväntad tidslinje-ID %u (skall vara %u) i checkpoint-post för nedstängning" -#: access/transam/xlog.c:7899 +#: access/transam/xlog.c:8405 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "oväntad tidslinje-ID %u (skall vara %u) i checkpoint-post för online" -#: access/transam/xlog.c:7928 +#: access/transam/xlog.c:8434 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" msgstr "oväntad tidslinje-ID %u (skall vara %u) i post för slutet av återställning" -#: access/transam/xlog.c:8195 +#: access/transam/xlog.c:8705 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "kunde inte fsync:a skriv-igenom-loggfil \"%s\": %m" -#: access/transam/xlog.c:8200 +#: access/transam/xlog.c:8710 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "kunde inte fdatasync:a fil \"%s\": %m" -#: access/transam/xlog.c:8285 access/transam/xlog.c:8608 +#: access/transam/xlog.c:8797 access/transam/xlog.c:9133 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "WAL-nivå inte tillräcklig för att kunna skapa en online-backup" -#: access/transam/xlog.c:8286 access/transam/xlog.c:8609 -#: access/transam/xlogfuncs.c:254 +#: 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 måste vara satt till \"replica\" eller \"logical\" vid serverstart." +msgid "\"wal_level\" must be set to \"replica\" or \"logical\" at server start." +msgstr "\"wal_level\" måste vara satt till \"replica\" eller \"logical\" vid serverstart." -#: access/transam/xlog.c:8291 +#: access/transam/xlog.c:8803 #, c-format msgid "backup label too long (max %d bytes)" msgstr "backup-etikett för lång (max %d byte)" -#: access/transam/xlog.c:8412 +#: access/transam/xlog.c:8924 #, c-format -msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" -msgstr "WAL skapad med full_page_writes=off har återspelats sedab senaste omstartpunkten" +msgid "WAL generated with \"full_page_writes=off\" was replayed since last restartpoint" +msgstr "WAL skapad med \"full_page_writes=off\" har återspelats sedan senaste omstartpunkten" -#: access/transam/xlog.c:8414 access/transam/xlog.c:8697 +#: 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 "Det betyder att backup:en som tas på standby:en är trasig och inte skall användas. Slå på full_page_writes och kör CHECKPOINT på primären och försök sedan ta en ny online-backup igen." +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 "Det betyder att backup:en som tas på standby:en är trasig och inte skall användas. Slå på \"full_page_writes\" och kör CHECKPOINT på primären och försök sedan ta en ny online-backup igen." -#: access/transam/xlog.c:8481 backup/basebackup.c:1351 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 "kan inte läsa symbolisk länk \"%s\": %m" -#: access/transam/xlog.c:8488 backup/basebackup.c:1356 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 "mål för symbolisk länk \"%s\" är för lång" -#: access/transam/xlog.c:8647 backup/basebackup.c:1217 +#: access/transam/xlog.c:9134 +#, c-format +msgid "wal_level must be set to \"replica\" or \"logical\" at server start." +msgstr "wal_level måste vara satt till \"replica\" eller \"logical\" vid serverstart." + +#: access/transam/xlog.c:9172 backup/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "standby:en befordrades under online-backup" -#: access/transam/xlog.c:8648 backup/basebackup.c:1218 +#: 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 "Det betyder att backupen som tas är trasig och inte skall användas. Försök ta en ny online-backup." -#: access/transam/xlog.c:8695 +#: access/transam/xlog.c:9220 #, c-format -msgid "WAL generated with full_page_writes=off was replayed during online backup" -msgstr "WAL skapad med full_page_writes=off återspelades under online-backup" +msgid "WAL generated with \"full_page_writes=off\" was replayed during online backup" +msgstr "WAL skapad med \"full_page_writes=off\" återspelades under online-backup" -#: access/transam/xlog.c:8811 +#: access/transam/xlog.c:9336 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "base_backup klar, väntar på att de WAL-segment som krävs blir arkiverade" -#: access/transam/xlog.c:8825 +#: access/transam/xlog.c:9350 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "väntar fortfarande på att alla krävda WAL-segments skall bli arkiverade (%d sekunder har gått)" -#: access/transam/xlog.c:8827 +#: 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 "Kontrollera att ditt archive_command kör som det skall. Du kan avbryta denna backup på ett säkert sätt men databasbackup:en kommer inte vara användbart utan att alla WAL-segment finns." +msgid "Check that your \"archive_command\" is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." +msgstr "Kontrollera att ditt \"archive_command\" kör som det skall. Du kan avbryta denna backup på ett säkert sätt men databasbackup:en kommer inte vara användbar utan att alla WAL-segment finns." -#: access/transam/xlog.c:8834 +#: access/transam/xlog.c:9359 #, c-format msgid "all required WAL segments have been archived" msgstr "alla krävda WAL-segments har arkiverats" -#: access/transam/xlog.c:8838 +#: 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 "WAL-arkivering är inte påslagen; du måste se till att alla krävda WAL-segment har kopierats på annat sätt för att backup:en skall vara komplett" -#: access/transam/xlog.c:8877 +#: access/transam/xlog.c:9402 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "avbryter backup på grund av att backend:en stoppades innan pg_backup_stop anropades" -#: access/transam/xlogarchive.c:207 +#: access/transam/xlogarchive.c:213 #, c-format msgid "archive file \"%s\" has wrong size: %lld instead of %lld" msgstr "arkivfil \"%s\" har fel storlek: %lld istället för %lld" -#: access/transam/xlogarchive.c:216 +#: access/transam/xlogarchive.c:222 #, c-format msgid "restored log file \"%s\" from archive" msgstr "återställd logfil \"%s\" från arkiv" -#: access/transam/xlogarchive.c:230 +#: access/transam/xlogarchive.c:236 #, c-format -msgid "restore_command returned a zero exit status, but stat() failed." -msgstr "restore_command returnerade exit-kod noll men stat() misslyckades." +msgid "\"restore_command\" returned a zero exit status, but stat() failed." +msgstr "\"restore_command\" returnerade exit-kod noll men stat() misslyckades." -#: access/transam/xlogarchive.c:262 +#: access/transam/xlogarchive.c:268 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "kunde inte återställa fil \"%s\" från arkiv: %s" @@ -2713,926 +2947,961 @@ msgstr "kunde inte återställa fil \"%s\" från arkiv: %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:340 +#: access/transam/xlogarchive.c:346 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:450 access/transam/xlogarchive.c:530 +#: access/transam/xlogarchive.c:456 access/transam/xlogarchive.c:536 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "kunde inte skapa arkiveringsstatusfil \"%s\": %m" -#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:538 +#: access/transam/xlogarchive.c:464 access/transam/xlogarchive.c:544 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "kunde inte skriva arkiveringsstatusfil \"%s\": %m" -#: access/transam/xlogfuncs.c:75 backup/basebackup.c:973 +#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 #, c-format msgid "a backup is already in progress in this session" msgstr "en backup är redan på gång i denna session" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:140 #, c-format msgid "backup is not in progress" msgstr "ingen backup är på gång" -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "Did you call pg_backup_start()?" msgstr "Anropade du pg_backup_start()?" -#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:248 -#: access/transam/xlogfuncs.c:287 access/transam/xlogfuncs.c:308 -#: access/transam/xlogfuncs.c:329 +#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 +#: access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:323 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "WAL-kontrollfunktioner kan inte köras under återställning." -#: access/transam/xlogfuncs.c:215 access/transam/xlogfuncs.c:399 -#: access/transam/xlogfuncs.c:457 +#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:447 #, c-format msgid "%s cannot be executed during recovery." msgstr "%s kan inte köras under återställning" -#: access/transam/xlogfuncs.c:221 +#: access/transam/xlogfuncs.c:215 #, c-format -msgid "pg_log_standby_snapshot() can only be used if wal_level >= replica" -msgstr "pg_log_standby_snapshot() kan bara användas om wal_level >= replica" +msgid "pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" +msgstr "pg_log_standby_snapshot() kan bara användas om \"wal_level\" >= \"replica\"" -#: access/transam/xlogfuncs.c:253 +#: access/transam/xlogfuncs.c:247 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "WAL-nivån är inte tillräcklig för att skapa en återställningspunkt" -#: access/transam/xlogfuncs.c:261 +#: access/transam/xlogfuncs.c:255 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "värdet för långt för en återställningspunkt (maximalt %d tecken)" -#: access/transam/xlogfuncs.c:496 +#: access/transam/xlogfuncs.c:486 #, c-format msgid "invalid WAL file name \"%s\"" msgstr "ogiltigt WAL-filnamn \"%s\"" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 -#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 -#: access/transam/xlogfuncs.c:689 +#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 +#: access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 +#: access/transam/xlogfuncs.c:679 #, c-format msgid "recovery is not in progress" msgstr "återställning är inte i gång" -#: access/transam/xlogfuncs.c:533 access/transam/xlogfuncs.c:563 -#: access/transam/xlogfuncs.c:587 access/transam/xlogfuncs.c:610 -#: access/transam/xlogfuncs.c:690 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 +#: access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 +#: access/transam/xlogfuncs.c:680 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Återställningskontrollfunktioner kan bara köras under återställning." -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 #, c-format msgid "standby promotion is ongoing" -msgstr "standby-befordring pågår" +msgstr "standby-befordran pågår" -#: access/transam/xlogfuncs.c:539 access/transam/xlogfuncs.c:569 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "%s kan inte köras efter att befordran startats." -#: access/transam/xlogfuncs.c:695 +#: access/transam/xlogfuncs.c:685 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "\"wait_seconds\" får inte vara negativ eller noll" -#: access/transam/xlogfuncs.c:715 storage/ipc/signalfuncs.c:260 +#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "misslyckades med att sända en signal till postmaster: %m" -#: access/transam/xlogfuncs.c:751 +#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#, c-format +msgid "terminating connection due to unexpected postmaster exit" +msgstr "avslutar anslutning på grund av att postmaster stängde oväntat ner" + +#: access/transam/xlogfuncs.c:740 +#, c-format +msgid "while waiting on promotion" +msgstr "vid väntan på befordran" + +#: access/transam/xlogfuncs.c:744 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" msgstr[0] "servern befordrades inte inom %d sekund" msgstr[1] "servern befordrades inte inom %d sekunder" -#: access/transam/xlogprefetcher.c:1092 +#: access/transam/xlogprefetcher.c:1088 #, c-format -msgid "recovery_prefetch is not supported on platforms that lack posix_fadvise()." -msgstr "recovery_prefetch stöds inte på plattformar som saknar posix_fadvise()." +msgid "\"recovery_prefetch\" is not supported on platforms that lack posix_fadvise()." +msgstr "\"recovery_prefetch\" stöds inte på plattformar som saknar posix_fadvise()." -#: access/transam/xlogreader.c:610 +#: access/transam/xlogreader.c:619 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u" -#: access/transam/xlogreader.c:619 +#: access/transam/xlogreader.c:628 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord är begärd vid %X/%X" -#: access/transam/xlogreader.c:740 +#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 +#, c-format +msgid "invalid record length at %X/%X: expected at least %u, got %u" +msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u" + +#: access/transam/xlogreader.c:758 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "det finns ingen contrecord-flagga vid %X/%X" -#: access/transam/xlogreader.c:753 +#: access/transam/xlogreader.c:771 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%X" -#: access/transam/xlogreader.c:812 -#, c-format -msgid "record length %u at %X/%X too long" -msgstr "postlängd %u vid %X/%X är för lång" - -#: access/transam/xlogreader.c:878 -#, c-format -msgid "out of memory while trying to decode a record of length %u" -msgstr "slut på minne vid avkodning av post med längden %u" - -#: access/transam/xlogreader.c:1130 -#, c-format -msgid "invalid record length at %X/%X: expected at least %u, got %u" -msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u" - -#: access/transam/xlogreader.c:1138 +#: access/transam/xlogreader.c:1142 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ogiltigt resurshanterar-ID %u vid %X/%X" -#: access/transam/xlogreader.c:1151 access/transam/xlogreader.c:1167 +#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "post med inkorrekt prev-link %X/%X vid %X/%X" -#: access/transam/xlogreader.c:1203 +#: access/transam/xlogreader.c:1209 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X" -#: access/transam/xlogreader.c:1237 +#: access/transam/xlogreader.c:1243 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1252 access/transam/xlogreader.c:1294 +#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1268 +#: access/transam/xlogreader.c:1274 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-fil är från ett annat databassystem: WAL-filens databassystemidentifierare är %llu, pg_control databassystemidentifierare är %llu" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1282 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt segmentstorlek i sidhuvud" -#: access/transam/xlogreader.c:1282 +#: access/transam/xlogreader.c:1288 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhuvud" -#: access/transam/xlogreader.c:1314 +#: access/transam/xlogreader.c:1320 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "oväntad sidadress %X/%X i WAL-segment %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1340 +#: access/transam/xlogreader.c:1346 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u" msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%X, offset %u" -#: access/transam/xlogreader.c:1746 +#: access/transam/xlogreader.c:1749 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "\"ej i sekvens\"-block_id %u vid %X/%X" -#: access/transam/xlogreader.c:1770 +#: access/transam/xlogreader.c:1773 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%X" -#: access/transam/xlogreader.c:1777 +#: access/transam/xlogreader.c:1780 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%X" -#: access/transam/xlogreader.c:1813 +#: access/transam/xlogreader.c:1816 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%X" -#: access/transam/xlogreader.c:1829 +#: access/transam/xlogreader.c:1832 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%X" -#: access/transam/xlogreader.c:1843 +#: access/transam/xlogreader.c:1846 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%X" -#: access/transam/xlogreader.c:1858 +#: access/transam/xlogreader.c:1861 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X" msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%X" -#: access/transam/xlogreader.c:1874 +#: access/transam/xlogreader.c:1877 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%X" -#: access/transam/xlogreader.c:1886 +#: access/transam/xlogreader.c:1889 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ogiltig block_id %u vid %X/%X" -#: access/transam/xlogreader.c:1953 +#: access/transam/xlogreader.c:1956 #, c-format msgid "record with invalid length at %X/%X" msgstr "post med ogiltig längd vid %X/%X" -#: access/transam/xlogreader.c:1979 +#: access/transam/xlogreader.c:1982 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "kunde inte hitta backup-block med ID %d i WAL-post" -#: access/transam/xlogreader.c:2063 +#: access/transam/xlogreader.c:2066 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt block %d angivet" -#: access/transam/xlogreader.c:2070 +#: access/transam/xlogreader.c:2073 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt state, block %d" -#: access/transam/xlogreader.c:2097 access/transam/xlogreader.c:2114 +#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 #, c-format msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d" msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med %s stöds inte av bygget, block %d" -#: access/transam/xlogreader.c:2123 +#: access/transam/xlogreader.c:2126 #, c-format msgid "could not restore image at %X/%X compressed with unknown method, block %d" msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med okänd metod, block %d" -#: access/transam/xlogreader.c:2131 +#: access/transam/xlogreader.c:2134 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "kunde inte packa upp avbild vid %X/%X, block %d" -#: access/transam/xlogrecovery.c:547 -#, c-format -msgid "entering standby mode" -msgstr "går in i standby-läge" - -#: access/transam/xlogrecovery.c:550 -#, c-format -msgid "starting point-in-time recovery to XID %u" -msgstr "startar point-in-time-återställning till XID %u" - -#: access/transam/xlogrecovery.c:554 -#, c-format -msgid "starting point-in-time recovery to %s" -msgstr "startar point-in-time-återställning till %s" - -#: access/transam/xlogrecovery.c:558 -#, c-format -msgid "starting point-in-time recovery to \"%s\"" -msgstr "startar point-in-time-återställning till \"%s\"" - -#: access/transam/xlogrecovery.c:562 -#, c-format -msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" -msgstr "startar point-in-time-återställning till WAL-position (LSN) \"%X/%X\"" - -#: access/transam/xlogrecovery.c:566 -#, c-format -msgid "starting point-in-time recovery to earliest consistent point" -msgstr "startar point-in-time-återställning till tidigast konsistenta punkt" - -#: access/transam/xlogrecovery.c:569 +#: access/transam/xlogrecovery.c:617 #, c-format -msgid "starting archive recovery" -msgstr "Startar arkivåterställning" +msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u" +msgstr "startar backupåterställning med redo LSN %X/%X, checkpoint LSN %X/%X, på tidslinje ID %u" -#: access/transam/xlogrecovery.c:653 +#: access/transam/xlogrecovery.c:649 #, c-format -msgid "could not find redo location referenced by checkpoint record" -msgstr "kunde inte hitta redo-position refererad av checkpoint-post" +msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X" +msgstr "kunde inte hitta redo-position %X/%X refererad av checkpoint-post vid %X/%X" -#: access/transam/xlogrecovery.c:654 access/transam/xlogrecovery.c:664 +#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 #, c-format msgid "" -"If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" +"If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup." msgstr "" -"Om du återställer från en backup, gör touch på \"%s/recovery.signal\" och lägg till\n" +"Om du återställer från en backup, gör touch på \"%s/recovery.signal\" eller \"%s/standby.signal\" och lägg till\n" "önskade återställningsalternativ. Om du inte återställer från en backup, försök ta\n" "bort filen \"%s/backup_label\". Var försiktig: borttagning av \"%s/backup_label\"\n" "kommer resultera i ett trasigt kluster om du återställer från en backup." -#: access/transam/xlogrecovery.c:663 +#: access/transam/xlogrecovery.c:660 #, c-format -msgid "could not locate required checkpoint record" -msgstr "kunde inte hitta den checkpoint-post som krävs" +msgid "could not locate required checkpoint record at %X/%X" +msgstr "kunde inte hitta den checkpoint-post som krävs vid %X/%X" -#: access/transam/xlogrecovery.c:692 commands/tablespace.c:670 +#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "kan inte skapa symbolisk länk \"%s\": %m" -#: access/transam/xlogrecovery.c:724 access/transam/xlogrecovery.c:730 +#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "hoppar över fil \"%s\" då ingen fil \"%s\" finns" -#: access/transam/xlogrecovery.c:726 +#: access/transam/xlogrecovery.c:725 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Filen \"%s\" döptes om till \"%s\"." -#: access/transam/xlogrecovery.c:732 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Kunde inte döpa om fil \"%s\" till \"%s\": %m" -#: access/transam/xlogrecovery.c:786 +#: access/transam/xlogrecovery.c:770 +#, c-format +msgid "restarting backup recovery with redo LSN %X/%X" +msgstr "startar om backupåterställning med redo LSN %X/%X" + +#: access/transam/xlogrecovery.c:795 +#, c-format +msgid "could not locate a valid checkpoint record at %X/%X" +msgstr "kunde inte hitta en giltig checkpoint-post vid %X/%X" + +#: access/transam/xlogrecovery.c:806 +#, c-format +msgid "entering standby mode" +msgstr "går in i standby-läge" + +#: access/transam/xlogrecovery.c:809 +#, c-format +msgid "starting point-in-time recovery to XID %u" +msgstr "startar point-in-time-återställning till XID %u" + +#: access/transam/xlogrecovery.c:813 +#, c-format +msgid "starting point-in-time recovery to %s" +msgstr "startar point-in-time-återställning till %s" + +#: access/transam/xlogrecovery.c:817 +#, c-format +msgid "starting point-in-time recovery to \"%s\"" +msgstr "startar point-in-time-återställning till \"%s\"" + +#: access/transam/xlogrecovery.c:821 +#, c-format +msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" +msgstr "startar point-in-time-återställning till WAL-position (LSN) \"%X/%X\"" + +#: access/transam/xlogrecovery.c:825 +#, c-format +msgid "starting point-in-time recovery to earliest consistent point" +msgstr "startar point-in-time-återställning till tidigast konsistenta punkt" + +#: access/transam/xlogrecovery.c:828 #, c-format -msgid "could not locate a valid checkpoint record" -msgstr "kunde inte hitta en giltig checkpoint-post" +msgid "starting archive recovery" +msgstr "Startar arkivåterställning" -#: access/transam/xlogrecovery.c:810 +#: access/transam/xlogrecovery.c:849 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "efterfrågad tidslinje %u är inte ett barn till denna servers historik" -#: access/transam/xlogrecovery.c:812 +#: access/transam/xlogrecovery.c:851 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Senaste checkpoint är vid %X/%X på tidslinje %u, men i historiken för efterfrågad tidslinje så avvek servern från den tidslinjen vid %X/%X." -#: access/transam/xlogrecovery.c:826 +#: access/transam/xlogrecovery.c:865 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "efterfågan tidslinje %u innehåller inte minimal återställningspunkt %X/%X på tidslinje %u" -#: access/transam/xlogrecovery.c:854 +#: access/transam/xlogrecovery.c:893 #, c-format msgid "invalid next transaction ID" msgstr "nästa transaktions-ID ogiltig" -#: access/transam/xlogrecovery.c:859 +#: access/transam/xlogrecovery.c:898 #, c-format msgid "invalid redo in checkpoint record" msgstr "ogiltig redo i checkpoint-post" -#: access/transam/xlogrecovery.c:870 +#: access/transam/xlogrecovery.c:909 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ogiltig redo-post i nedstängnings-checkpoint" -#: access/transam/xlogrecovery.c:899 +#: access/transam/xlogrecovery.c:938 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "databassystemet stängdes inte ned korrekt; automatisk återställning pågår" -#: access/transam/xlogrecovery.c:903 +#: access/transam/xlogrecovery.c:942 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "krashåterställning startar i tidslinje %u och har måltidslinje %u" -#: access/transam/xlogrecovery.c:946 +#: access/transam/xlogrecovery.c:985 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label innehåller data som inte stämmer med kontrollfil" -#: access/transam/xlogrecovery.c:947 +#: access/transam/xlogrecovery.c:986 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Det betyder att backup:en är trasig och du behöver använda en annan backup för att återställa." -#: access/transam/xlogrecovery.c:1001 +#: access/transam/xlogrecovery.c:1040 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "använda återställningskommandofil \"%s\" stöds inte" -#: access/transam/xlogrecovery.c:1066 +#: access/transam/xlogrecovery.c:1105 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "standby-läge stöd inte av enanvändarservrar" -#: access/transam/xlogrecovery.c:1083 +#: access/transam/xlogrecovery.c:1122 #, c-format -msgid "specified neither primary_conninfo nor restore_command" -msgstr "angav varken primary_conninfo eller restore_command" +msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" +msgstr "angav varken \"primary_conninfo\" eller \"restore_command\"" -#: access/transam/xlogrecovery.c:1084 +#: access/transam/xlogrecovery.c:1123 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Databasservern kommer med jämna mellanrum att poll:a pg_wal-underkatalogen för att se om filer placerats där." -#: access/transam/xlogrecovery.c:1092 +#: access/transam/xlogrecovery.c:1131 #, c-format -msgid "must specify restore_command when standby mode is not enabled" -msgstr "måste ange restore_command när standby-läge inte är påslaget" +msgid "must specify \"restore_command\" when standby mode is not enabled" +msgstr "måste ange \"restore_command\" när standby-läge inte är påslaget" -#: access/transam/xlogrecovery.c:1130 +#: access/transam/xlogrecovery.c:1169 #, c-format msgid "recovery target timeline %u does not exist" msgstr "återställningsmåltidslinje %u finns inte" -#: access/transam/xlogrecovery.c:1213 access/transam/xlogrecovery.c:1220 -#: access/transam/xlogrecovery.c:1279 access/transam/xlogrecovery.c:1359 -#: access/transam/xlogrecovery.c:1383 +#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 +#: access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 +#: access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 #, c-format msgid "invalid data in file \"%s\"" msgstr "felaktig data i fil \"%s\"" -#: access/transam/xlogrecovery.c:1280 +#: access/transam/xlogrecovery.c:1319 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Parsad tidslinje-ID är %u men förväntade sig %u." -#: access/transam/xlogrecovery.c:1662 +#: access/transam/xlogrecovery.c:1330 +#, c-format +msgid "this is an incremental backup, not a data directory" +msgstr "detta är en inkrementell backup, inte en datakatalog" + +#: access/transam/xlogrecovery.c:1331 +#, c-format +msgid "Use pg_combinebackup to reconstruct a valid data directory." +msgstr "Använd pg_combinebackup för att återskapa en giltig datakatalog." + +#: access/transam/xlogrecovery.c:1717 +#, c-format +msgid "unexpected record type found at redo point %X/%X" +msgstr "oväntad typ på post hittad vid redo-punkt %X/%X" + +#: access/transam/xlogrecovery.c:1740 #, c-format msgid "redo starts at %X/%X" msgstr "redo startar vid %X/%X" -#: access/transam/xlogrecovery.c:1675 +#: access/transam/xlogrecovery.c:1753 #, c-format msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "redo pågår, förbrukad tid: %ld.%02d s, nuvarande LSN: %X/%X" -#: access/transam/xlogrecovery.c:1767 +#: access/transam/xlogrecovery.c:1843 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "efterfrågad återställningsstoppunkt är före en konsistent återställningspunkt" -#: access/transam/xlogrecovery.c:1799 +#: access/transam/xlogrecovery.c:1875 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "redo gjord vid %X/%X systemanvändning: %s" -#: access/transam/xlogrecovery.c:1805 +#: access/transam/xlogrecovery.c:1881 #, c-format msgid "last completed transaction was at log time %s" msgstr "senaste kompletta transaktionen var vid loggtid %s" -#: access/transam/xlogrecovery.c:1814 +#: access/transam/xlogrecovery.c:1890 #, c-format msgid "redo is not required" msgstr "redo behövs inte" -#: access/transam/xlogrecovery.c:1825 +#: access/transam/xlogrecovery.c:1901 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "återställning avslutades innan det konfigurerade återställningsmålet nåddes" -#: access/transam/xlogrecovery.c:2019 +#: access/transam/xlogrecovery.c:2095 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "lyckades hoppa över saknad contrecord vid %X/%X, överskriven vid %s" -#: access/transam/xlogrecovery.c:2086 +#: access/transam/xlogrecovery.c:2162 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "Oväntat katalogpost \"%s\" hittades i %s" -#: access/transam/xlogrecovery.c:2088 +#: access/transam/xlogrecovery.c:2164 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Alla katalogposter i pg_tblspc/ skall vara symboliska länkar" -#: access/transam/xlogrecovery.c:2089 +#: access/transam/xlogrecovery.c:2165 +#, c-format +msgid "Remove those directories, or set \"allow_in_place_tablespaces\" to ON transiently to let recovery complete." +msgstr "Ta bort dessa kataloger eller sätt \"allow_in_place_tablespaces\" temporärt till ON och låt återställningen gå klart." + +#: access/transam/xlogrecovery.c:2217 #, c-format -msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." -msgstr "Ta bort dessa kataloger eller sätt allow_in_place_tablespaces temporärt till ON och låt återställningen gå klart." +msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" +msgstr "slutförde backupåterställning vid redo-LSN %X/%X och slut-LSN %X/%X" -#: access/transam/xlogrecovery.c:2163 +#: access/transam/xlogrecovery.c:2247 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistent återställningstillstånd uppnått vid %X/%X" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2201 +#: access/transam/xlogrecovery.c:2285 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-redo vid %X/%X för %s" -#: access/transam/xlogrecovery.c:2299 +#: access/transam/xlogrecovery.c:2383 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "oväntad föregående tidslinje-ID %u (nuvarande tidslinje-ID %u) i checkpoint-post" -#: access/transam/xlogrecovery.c:2308 +#: access/transam/xlogrecovery.c:2392 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "oväntad tidslinje-ID %u (efter %u) i checkpoint-post" -#: access/transam/xlogrecovery.c:2324 +#: access/transam/xlogrecovery.c:2408 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "oväntad tidslinje-ID %u i checkpoint-post, innan vi nått minimal återställningspunkt %X/%X på tidslinje %u" -#: access/transam/xlogrecovery.c:2508 access/transam/xlogrecovery.c:2784 +#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 #, c-format msgid "recovery stopping after reaching consistency" msgstr "återställning stoppad efter att ha uppnått konsistens" -#: access/transam/xlogrecovery.c:2529 +#: access/transam/xlogrecovery.c:2613 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "återställning stoppad före WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2619 +#: access/transam/xlogrecovery.c:2703 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "återställning stoppad före commit av transaktion %u, tid %s" -#: access/transam/xlogrecovery.c:2626 +#: access/transam/xlogrecovery.c:2710 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "återställning stoppad före abort av transaktion %u, tid %s" -#: access/transam/xlogrecovery.c:2679 +#: access/transam/xlogrecovery.c:2763 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "återställning stoppad vid återställningspunkt \"%s\", tid %s" -#: access/transam/xlogrecovery.c:2697 +#: access/transam/xlogrecovery.c:2781 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "återställning stoppad efter WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2764 +#: access/transam/xlogrecovery.c:2848 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "återställning stoppad efter commit av transaktion %u, tid %s" -#: access/transam/xlogrecovery.c:2772 +#: access/transam/xlogrecovery.c:2856 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "återställning stoppad efter abort av transaktion %u, tid %s" -#: access/transam/xlogrecovery.c:2853 +#: access/transam/xlogrecovery.c:2937 #, c-format msgid "pausing at the end of recovery" msgstr "pausar vid slutet av återställning" -#: access/transam/xlogrecovery.c:2854 +#: access/transam/xlogrecovery.c:2938 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Kör pg_wal_replay_resume() för att befordra." -#: access/transam/xlogrecovery.c:2857 access/transam/xlogrecovery.c:4594 +#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4679 #, c-format msgid "recovery has paused" msgstr "återställning har pausats" -#: access/transam/xlogrecovery.c:2858 +#: access/transam/xlogrecovery.c:2942 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Kör pg_wal_replay_resume() för att fortsätta." -#: access/transam/xlogrecovery.c:3121 +#: access/transam/xlogrecovery.c:3205 #, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" msgstr "oväntad tidslinje-ID %u i WAL-segment %s, LSN %X/%X, offset %u" -#: access/transam/xlogrecovery.c:3329 +#: access/transam/xlogrecovery.c:3413 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" msgstr "kunde inte läsa från WAL-segment %s, LSN %X/%X, offset %u: %m" -#: access/transam/xlogrecovery.c:3336 +#: access/transam/xlogrecovery.c:3420 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" msgstr "kunde inte läsa från WAL-segment %s, LSN %X/%X, offset %u, läste %d av %zu" -#: access/transam/xlogrecovery.c:3976 +#: access/transam/xlogrecovery.c:4061 #, c-format msgid "invalid checkpoint location" msgstr "ogiltig checkpoint-position" -#: access/transam/xlogrecovery.c:3986 +#: access/transam/xlogrecovery.c:4071 #, c-format msgid "invalid checkpoint record" msgstr "ogiltig checkpoint-post" -#: access/transam/xlogrecovery.c:3992 +#: access/transam/xlogrecovery.c:4077 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ogiltig resurshanterar-ID i checkpoint-post" -#: access/transam/xlogrecovery.c:4000 +#: access/transam/xlogrecovery.c:4085 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ogiltig xl_info i checkpoint-post" -#: access/transam/xlogrecovery.c:4006 +#: access/transam/xlogrecovery.c:4091 #, c-format msgid "invalid length of checkpoint record" msgstr "ogiltig längd på checkpoint-post" -#: access/transam/xlogrecovery.c:4060 +#: access/transam/xlogrecovery.c:4145 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "ny tidslinje %u är inte ett barn till databasens systemtidslinje %u" -#: access/transam/xlogrecovery.c:4074 +#: 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 "ny tidslinje %u skapad från aktuella databasens systemtidslinje %u innan nuvarande återställningspunkt %X/%X" -#: access/transam/xlogrecovery.c:4093 +#: access/transam/xlogrecovery.c:4178 #, c-format msgid "new target timeline is %u" msgstr "ny måltidslinje är %u" -#: access/transam/xlogrecovery.c:4296 +#: access/transam/xlogrecovery.c:4381 #, c-format msgid "WAL receiver process shutdown requested" msgstr "nedstängning av WAL-mottagarprocess efterfrågad" -#: access/transam/xlogrecovery.c:4356 +#: access/transam/xlogrecovery.c:4441 #, c-format msgid "received promote request" -msgstr "tog emot förfrågan om befordring" +msgstr "tog emot förfrågan om befordran" -#: access/transam/xlogrecovery.c:4585 +#: access/transam/xlogrecovery.c:4670 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "hot standby är inte möjligt på grund av otillräckliga parameterinställningar" -#: access/transam/xlogrecovery.c:4586 access/transam/xlogrecovery.c:4613 -#: access/transam/xlogrecovery.c:4643 +#: 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 har ett lägre värde än på primärservern där värdet var %d." -#: access/transam/xlogrecovery.c:4595 +#: access/transam/xlogrecovery.c:4680 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Om återställning avpausas så kommer servern stänga ner." -#: access/transam/xlogrecovery.c:4596 +#: access/transam/xlogrecovery.c:4681 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Du kan då återstarta servern efter att ha gjort de nödvändiga konfigurationsändringarna." -#: access/transam/xlogrecovery.c:4607 +#: access/transam/xlogrecovery.c:4692 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "befordran är inte möjligt på grund av otillräckliga parameterinställningar" -#: access/transam/xlogrecovery.c:4617 +#: access/transam/xlogrecovery.c:4702 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Starta om servern efter att ha gjort de nödvändiga konfigurationsändringarna." -#: access/transam/xlogrecovery.c:4641 +#: access/transam/xlogrecovery.c:4726 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "återställning avbruten på grund av otillräckliga parametervärden" -#: access/transam/xlogrecovery.c:4647 +#: access/transam/xlogrecovery.c:4732 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Du kan starta om servern efter att du gjort de nödvändiga konfigurationsändringarna." -#: access/transam/xlogrecovery.c:4689 +#: access/transam/xlogrecovery.c:4774 #, c-format msgid "multiple recovery targets specified" msgstr "multipla återställningsmål angivna" -#: access/transam/xlogrecovery.c:4690 +#: 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 "Som mest en av recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time och recovery_target_xid kan sättas." +msgid "At most one of \"recovery_target\", \"recovery_target_lsn\", \"recovery_target_name\", \"recovery_target_time\", \"recovery_target_xid\" may be set." +msgstr "Som mest en av \"recovery_target\", \"recovery_target_lsn\", \"recovery_target_name\", \"recovery_target_time\" och \"recovery_target_xid\" kan sättas." -#: access/transam/xlogrecovery.c:4701 +#: access/transam/xlogrecovery.c:4786 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Det enda tillåtna värdet är \"immediate\"." -#: access/transam/xlogrecovery.c:4853 utils/adt/timestamp.c:186 -#: utils/adt/timestamp.c:439 +#: access/transam/xlogrecovery.c:4938 utils/adt/timestamp.c:202 +#: utils/adt/timestamp.c:455 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp utanför giltigt intervall: \"%s\"" -#: access/transam/xlogrecovery.c:4898 +#: access/transam/xlogrecovery.c:4983 #, c-format -msgid "recovery_target_timeline is not a valid number." -msgstr "recovery_target_timeline är inte ett giltigt nummer." +msgid "\"recovery_target_timeline\" is not a valid number." +msgstr "\"recovery_target_timeline\" är inte ett giltigt nummer." -#: access/transam/xlogutils.c:1039 +#: access/transam/xlogutils.c:1032 #, c-format msgid "could not read from WAL segment %s, offset %d: %m" msgstr "kunde inte läsa från WAL-segment %s, offset %d: %m" -#: access/transam/xlogutils.c:1046 +#: access/transam/xlogutils.c:1039 #, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" msgstr "kunde inte läsa från WAL-segment %s, offset %d, läste %d av %d" -#: archive/shell_archive.c:96 +#: archive/shell_archive.c:98 #, c-format msgid "archive command failed with exit code %d" msgstr "arkiveringskommando misslyckades med felkod %d" -#: archive/shell_archive.c:98 archive/shell_archive.c:108 -#: archive/shell_archive.c:114 archive/shell_archive.c:123 +#: archive/shell_archive.c:100 archive/shell_archive.c:110 +#: archive/shell_archive.c:116 archive/shell_archive.c:125 #, c-format msgid "The failed archive command was: %s" msgstr "Det misslyckade arkiveringskommandot var: %s" -#: archive/shell_archive.c:105 +#: archive/shell_archive.c:107 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "arkiveringskommandot terminerades med avbrott 0x%X" -#: archive/shell_archive.c:107 postmaster/postmaster.c:3678 +#: 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 "Se C-include-fil \"ntstatus.h\" för en beskrivning av det hexdecimala värdet." -#: archive/shell_archive.c:112 +#: archive/shell_archive.c:114 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "arkiveringskommandot terminerades av signal %d: %s" -#: archive/shell_archive.c:121 +#: archive/shell_archive.c:123 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "arkiveringskommandot avslutade med okänd statuskod %d" -#: backup/backup_manifest.c:253 +#: backup/backup_manifest.c:254 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "förväntade sluttidslinje %u men hittade tidslinje %u" -#: backup/backup_manifest.c:277 +#: backup/backup_manifest.c:278 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "förväntade starttidslinje %u men hittade tidslinje %u" -#: backup/backup_manifest.c:304 +#: backup/backup_manifest.c:305 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "starttidslinje %u hittades inte i historiken för tidslinje %u" -#: backup/backup_manifest.c:355 +#: backup/backup_manifest.c:356 #, c-format msgid "could not rewind temporary file" msgstr "kunde inte spola tillbaka temporär fil" -#: backup/basebackup.c:470 +#: backup/basebackup.c:479 #, c-format msgid "could not find any WAL files" msgstr "kunde inte hitta några WAL-filer" -#: backup/basebackup.c:485 backup/basebackup.c:500 backup/basebackup.c:509 +#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 #, c-format msgid "could not find WAL file \"%s\"" msgstr "kunde inte hitta WAL-fil \"%s\"" -#: backup/basebackup.c:551 backup/basebackup.c:576 +#: backup/basebackup.c:560 backup/basebackup.c:585 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "oväntad WAL-filstorlek \"%s\"" -#: backup/basebackup.c:646 +#: backup/basebackup.c:656 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" msgstr[0] "totalt %lld verifieringsfel av checksumma" msgstr[1] "totalt %lld verifieringsfel av checksumma" -#: backup/basebackup.c:653 +#: backup/basebackup.c:663 #, c-format msgid "checksum verification failure during base backup" msgstr "misslyckad verifiering av checksumma under basbackup" -#: backup/basebackup.c:722 backup/basebackup.c:731 backup/basebackup.c:742 -#: backup/basebackup.c:759 backup/basebackup.c:768 backup/basebackup.c:779 -#: backup/basebackup.c:796 backup/basebackup.c:805 backup/basebackup.c:817 -#: backup/basebackup.c:841 backup/basebackup.c:855 backup/basebackup.c:866 -#: backup/basebackup.c:877 backup/basebackup.c:890 +#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 +#: backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 +#: backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 +#: backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 +#: backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 #, c-format msgid "duplicate option \"%s\"" msgstr "duplicerad flagga \"%s\"" -#: backup/basebackup.c:750 +#: backup/basebackup.c:761 #, c-format msgid "unrecognized checkpoint type: \"%s\"" msgstr "okänd checkpoint-typ: \"%s\"" -#: backup/basebackup.c:785 +#: backup/basebackup.c:793 +#, c-format +msgid "incremental backups cannot be taken unless WAL summarization is enabled" +msgstr "inkrementella backup:er kan inte tas om inte WAL-summering är påslagen" + +#: backup/basebackup.c:809 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d är utanför giltigt intervall för parameter \"%s\" (%d .. %d)" -#: backup/basebackup.c:830 +#: backup/basebackup.c:854 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "okänd manifestflagga: \"%s\"" -#: backup/basebackup.c:846 -#, c-format -msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "okänd algoritm för kontrollsumma: \"%s\"" - -#: backup/basebackup.c:881 +#: backup/basebackup.c:905 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "okänd komprimeringsalgoritm: \"%s\"" -#: backup/basebackup.c:897 +#: backup/basebackup.c:921 #, c-format msgid "unrecognized base backup option: \"%s\"" msgstr "okänd basbackupflagga: \"%s\"" -#: backup/basebackup.c:908 +#: backup/basebackup.c:932 #, c-format msgid "manifest checksums require a backup manifest" msgstr "manifestchecksummor kräver ett backup-manifest" -#: backup/basebackup.c:917 +#: backup/basebackup.c:941 #, c-format msgid "target detail cannot be used without target" msgstr "målinställningar kan inte användas utan ett mål" -#: backup/basebackup.c:926 backup/basebackup_target.c:218 +#: backup/basebackup.c:950 backup/basebackup_target.c:218 #, c-format msgid "target \"%s\" does not accept a target detail" msgstr "målet \"%s\" stöder inte målinställningar" -#: backup/basebackup.c:937 +#: backup/basebackup.c:961 #, c-format msgid "compression detail cannot be specified unless compression is enabled" msgstr "komprimeringsinställning kan inte anges om komprimering inte är påslagen" -#: backup/basebackup.c:950 +#: backup/basebackup.c:974 #, c-format msgid "invalid compression specification: %s" msgstr "ogiltig inställning för komprimering: %s" -#: backup/basebackup.c:1116 backup/basebackup.c:1294 +#: backup/basebackup.c:1024 +#, c-format +msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" +msgstr "måste UPLOAD_MANIFEST innan befordran av en inkrementell BASE_BACKUP" + +#: backup/basebackup.c:1157 backup/basebackup.c:1358 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "kunde inte ta status på fil eller katalog \"%s\": %m" -#: backup/basebackup.c:1430 +#: backup/basebackup.c:1544 #, c-format msgid "skipping special file \"%s\"" msgstr "hoppar över specialfil \"%s\"" -#: backup/basebackup.c:1542 -#, c-format -msgid "invalid segment number %d in file \"%s\"" -msgstr "ogiltigt segmentnummer %d i fil \"%s\"" - -#: backup/basebackup.c:1574 +#: backup/basebackup.c:1751 #, c-format msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" msgstr "kunde inte verifiera checksumma i fil \"%s\", block %u: läsbufferstorlek %d och sidstorlek %d skiljer sig åt" -#: backup/basebackup.c:1658 +#: backup/basebackup.c:1813 +#, c-format +msgid "file \"%s\" has a total of %d checksum verification failure" +msgid_plural "file \"%s\" has a total of %d checksum verification failures" +msgstr[0] "filen \"%s\" har totalt %d kontrollerad felaktiga checksumma" +msgstr[1] "filen \"%s\" har totalt %d kontrollerade felaktiga checksummor" + +#: backup/basebackup.c:1917 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "checksumkontroll misslyckades i fil \"%s\", block %u: beräknade %X men förväntade %X" -#: backup/basebackup.c:1665 +#: backup/basebackup.c:1924 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "ytterligare kontroller av checksummor i fil \"%s\" kommer inte rapporteras" -#: backup/basebackup.c:1721 -#, c-format -msgid "file \"%s\" has a total of %d checksum verification failure" -msgid_plural "file \"%s\" has a total of %d checksum verification failures" -msgstr[0] "filen \"%s\" har totalt %d kontrollerad felaktiga checksumma" -msgstr[1] "filen \"%s\" har totalt %d kontrollerade felaktiga checksummor" - -#: backup/basebackup.c:1767 +#: backup/basebackup.c:2048 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "filnamnet är för långt för tar-format: \"%s\"" -#: backup/basebackup.c:1772 +#: backup/basebackup.c:2053 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "mål för symbolisk länk är för långt för tar-format: filnamn \"%s\", mål \"%s\"" +#: backup/basebackup.c:2127 +#, c-format +msgid "could not read file \"%s\": read %zd of %zu" +msgstr "kunde inte läsa fil \"%s\": läste %zd av %zu" + #: backup/basebackup_gzip.c:67 #, c-format msgid "gzip compression is not supported by this build" @@ -3643,53 +3912,114 @@ msgstr "gzip-komprimering stöds inte av detta bygge" msgid "could not initialize compression library" msgstr "kunde inte initierar komprimeringsbibliotek" +#: backup/basebackup_incremental.c:294 +#, c-format +msgid "manifest contains no required WAL ranges" +msgstr "manifestet innehåller inga WAL-intervall som krävs" + +#: backup/basebackup_incremental.c:349 +#, c-format +msgid "timeline %u found in manifest, but not in this server's history" +msgstr "tidslinje %u hittades i manifest men inte i denna servers historik" + +#: 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 "manifestet kräver WAL från initiala tidslinjen %u vid start %X/%X men den tidslinjen börjar vid %X/%X" + +#: 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 "manifestet kräver WAL från tidslinje %u att fortsätta med som startar vid %X/%X men den tidslinjen börjar vid %X/%X" + +#: 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 "manifestet kräver WAL från avslutande tidslinje %u som slutar vid %X/%X, men denna backup startar vid %X/%X" + +#: backup/basebackup_incremental.c:439 +#, c-format +msgid "This can happen for incremental backups on a standby if there was little activity since the previous backup." +msgstr "Detta kan hända vid inkrementella backuper på en standby om det är lite aktivitet från föregående backup." + +#: backup/basebackup_incremental.c:446 +#, c-format +msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X" +msgstr "manifestet kräver WAL från en icke avslutande tidslinje %u som slutar vid %X/%X men denns server bytte tidslinje vid %X/%X" + +#: 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 "WAL-summering krävs för tidslinje %u från %X/%X till %X/%X men inga summeringar för den tidslinjen och det LSN-intervallet finns" + +#: 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 "WAL-summering krävs för tidslinje %u från %X/%X till %X/%X men summeringar för den tidslinjen och det LSN-intervallet är inkompletta" + +#: backup/basebackup_incremental.c:538 +#, c-format +msgid "The first unsummarized LSN in this range is %X/%X." +msgstr "Den första icke summerade LSN i detta intervall är %X/%X." + +#: backup/basebackup_incremental.c:938 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "backupmanifest version 1 stöder inte inkrementell backup" + +#: backup/basebackup_incremental.c:956 +#, c-format +msgid "system identifier in backup manifest is %llu, but database system identifier is %llu" +msgstr "manifestets systemidentifierare är %llu men databasens systemidentifierare är %llu" + #: backup/basebackup_lz4.c:67 #, c-format msgid "lz4 compression is not supported by this build" msgstr "lz4-komprimering stöds inte av detta bygge" -#: backup/basebackup_server.c:75 +#: backup/basebackup_server.c:73 #, c-format msgid "permission denied to create backup stored on server" msgstr "rättighet saknas för att skapa backup som lagras på servern" -#: backup/basebackup_server.c:76 +#: backup/basebackup_server.c:74 #, c-format msgid "Only roles with privileges of the \"%s\" role may create a backup stored on the server." msgstr "Bara roller med rättigheter från rollen \"%s\" får skapa backup som lagras på servern." -#: backup/basebackup_server.c:91 +#: backup/basebackup_server.c:89 #, c-format msgid "relative path not allowed for backup stored on server" msgstr "relativ sökväg tillåts inte för backup som sparas på servern" -#: backup/basebackup_server.c:104 commands/dbcommands.c:501 -#: commands/tablespace.c:163 commands/tablespace.c:179 -#: commands/tablespace.c:599 commands/tablespace.c:644 replication/slot.c:1704 +#: backup/basebackup_server.c:102 commands/dbcommands.c:477 +#: commands/tablespace.c:157 commands/tablespace.c:173 +#: commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "kunde inte skapa katalog \"%s\": %m" -#: backup/basebackup_server.c:117 +#: backup/basebackup_server.c:115 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "katalogen \"%s\" existerar men är inte tom" -#: backup/basebackup_server.c:125 utils/init/postinit.c:1164 +#: backup/basebackup_server.c:123 utils/init/postinit.c:1178 #, c-format msgid "could not access directory \"%s\": %m" msgstr "kunde inte komma åt katalog \"%s\": %m" -#: backup/basebackup_server.c:177 backup/basebackup_server.c:184 -#: backup/basebackup_server.c:270 backup/basebackup_server.c:277 -#: storage/smgr/md.c:504 storage/smgr/md.c:511 storage/smgr/md.c:593 -#: storage/smgr/md.c:615 storage/smgr/md.c:865 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 +#: backup/basebackup_server.c:268 backup/basebackup_server.c:275 +#: backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 +#: storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 #, c-format msgid "Check free disk space." msgstr "Kontrollera ledigt diskutrymme." -#: backup/basebackup_server.c:181 backup/basebackup_server.c:274 +#: backup/basebackup_server.c:179 backup/basebackup_server.c:272 +#: backup/walsummary.c:309 #, c-format msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" msgstr "kunde inte skriva fil \"%s\": skrev bara %d av %d byte vid offset %u" @@ -3719,709 +4049,720 @@ msgstr "kunde inte sätta komprimeringens arbetarantal till %d: %s" msgid "could not enable long-distance mode: %s" msgstr "kunde inte aktivera långdistansläge: %s" -#: bootstrap/bootstrap.c:243 postmaster/postmaster.c:721 tcop/postgres.c:3819 +#: backup/walsummaryfuncs.c:95 +#, c-format +msgid "invalid timeline %lld" +msgstr "ogiltig tidslinje %lld" + +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 #, c-format msgid "--%s requires a value" msgstr "--%s kräver ett värde" -#: bootstrap/bootstrap.c:248 postmaster/postmaster.c:726 tcop/postgres.c:3824 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 #, c-format msgid "-c %s requires a value" msgstr "-c %s kräver ett värde" -#: bootstrap/bootstrap.c:289 -#, c-format -msgid "-X requires a power of two value between 1 MB and 1 GB" -msgstr "-X kräver ett tvåpotensvärde mellan 1 MB och 1 GB" - -#: bootstrap/bootstrap.c:295 postmaster/postmaster.c:844 -#: postmaster/postmaster.c:857 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 +#: postmaster/postmaster.c:759 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Försök med \"%s --help\" för mer information.\n" -#: bootstrap/bootstrap.c:304 +#: bootstrap/bootstrap.c:291 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: ogiltigt kommandoradsargument\n" -#: catalog/aclchk.c:201 +#: catalog/aclchk.c:211 #, c-format msgid "grant options can only be granted to roles" msgstr "\"grant option\" kan bara ges till roller" -#: catalog/aclchk.c:323 +#: catalog/aclchk.c:333 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "inga rättigheter givna för kolumn \"%s\" i relation \"%s\"" -#: catalog/aclchk.c:328 +#: catalog/aclchk.c:338 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "inga rättigheter gavs till \"%s\"" -#: catalog/aclchk.c:336 +#: catalog/aclchk.c:346 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "inte alla rättigheter givna för kolumn \"%s\" i relation \"%s\"" -#: catalog/aclchk.c:341 +#: catalog/aclchk.c:351 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "inte alla rättigheter givna för \"%s\"" -#: catalog/aclchk.c:352 +#: catalog/aclchk.c:362 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "inga rättigheter kunde tas tillbaka från kolumn \"%s\" i relation \"%s\"" -#: catalog/aclchk.c:357 +#: catalog/aclchk.c:367 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "inga rättigheter kunde tas tillbaka från \"%s\"" -#: catalog/aclchk.c:365 +#: catalog/aclchk.c:375 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "inte alla rättigheter kunde tas tillbaka från kolumn \"%s\" i relation \"%s\"" -#: catalog/aclchk.c:370 +#: catalog/aclchk.c:380 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "inte alla rättigheter kunde tas tillbaka från \"%s\"" -#: catalog/aclchk.c:402 +#: catalog/aclchk.c:412 #, c-format msgid "grantor must be current user" msgstr "utfärdare måste vara den aktiva användaren" -#: catalog/aclchk.c:470 catalog/aclchk.c:1045 +#: catalog/aclchk.c:480 catalog/aclchk.c:1055 #, c-format msgid "invalid privilege type %s for relation" msgstr "ogiltig privilegietyp %s för relation" -#: catalog/aclchk.c:474 catalog/aclchk.c:1049 +#: catalog/aclchk.c:484 catalog/aclchk.c:1059 #, c-format msgid "invalid privilege type %s for sequence" msgstr "ogiltig privilegietyp %s för sekvens" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:488 #, c-format msgid "invalid privilege type %s for database" msgstr "ogiltig privilegietyp %s för databas" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:492 #, c-format msgid "invalid privilege type %s for domain" msgstr "ogiltig privilegietyp %s för domän" -#: catalog/aclchk.c:486 catalog/aclchk.c:1053 +#: catalog/aclchk.c:496 catalog/aclchk.c:1063 #, c-format msgid "invalid privilege type %s for function" msgstr "ogiltig privilegietyp %s för funktion" -#: catalog/aclchk.c:490 +#: catalog/aclchk.c:500 #, c-format msgid "invalid privilege type %s for language" msgstr "ogiltig privilegietyp %s för språk" -#: catalog/aclchk.c:494 +#: catalog/aclchk.c:504 #, c-format msgid "invalid privilege type %s for large object" msgstr "ogiltig privilegietyp %s för stort objekt" -#: catalog/aclchk.c:498 catalog/aclchk.c:1069 +#: catalog/aclchk.c:508 catalog/aclchk.c:1079 #, c-format msgid "invalid privilege type %s for schema" msgstr "ogiltig privilegietyp %s för schema" -#: catalog/aclchk.c:502 catalog/aclchk.c:1057 +#: catalog/aclchk.c:512 catalog/aclchk.c:1067 #, c-format msgid "invalid privilege type %s for procedure" msgstr "ogiltig rättighetstyp %s för procedur" -#: catalog/aclchk.c:506 catalog/aclchk.c:1061 +#: catalog/aclchk.c:516 catalog/aclchk.c:1071 #, c-format msgid "invalid privilege type %s for routine" msgstr "ogiltig rättighetstyp %s för rutin" -#: catalog/aclchk.c:510 +#: catalog/aclchk.c:520 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "ogiltig privilegietyp %s för tabellutrymme" -#: catalog/aclchk.c:514 catalog/aclchk.c:1065 +#: catalog/aclchk.c:524 catalog/aclchk.c:1075 #, c-format msgid "invalid privilege type %s for type" msgstr "ogiltig privilegietyp %s för typ" -#: catalog/aclchk.c:518 +#: catalog/aclchk.c:528 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "ogiltig privilegietyp %s för främmande data-omvandlare" -#: catalog/aclchk.c:522 +#: catalog/aclchk.c:532 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "ogiltig privilegietyp %s för främmande server" -#: catalog/aclchk.c:526 +#: catalog/aclchk.c:536 #, c-format msgid "invalid privilege type %s for parameter" msgstr "ogiltig privilegietyp %s för parameter" -#: catalog/aclchk.c:565 +#: catalog/aclchk.c:575 #, c-format msgid "column privileges are only valid for relations" msgstr "kolumnprivilegier är bara giltiga för relationer" -#: catalog/aclchk.c:728 catalog/aclchk.c:3555 catalog/objectaddress.c:1092 -#: catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:287 +#: 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 "stort objekt %u existerar inte" -#: catalog/aclchk.c:1102 +#: catalog/aclchk.c:1112 #, c-format msgid "default privileges cannot be set for columns" msgstr "standardrättigheter kan inte sättas för kolumner" -#: catalog/aclchk.c:1138 +#: catalog/aclchk.c:1148 #, c-format msgid "permission denied to change default privileges" msgstr "rättighet saknas för att ändra standardrättigheter" -#: catalog/aclchk.c:1256 +#: catalog/aclchk.c:1266 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "kan inte använda IN SCHEMA-klausul samtidigt som GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1595 catalog/catalog.c:631 catalog/objectaddress.c:1561 -#: catalog/pg_publication.c:533 commands/analyze.c:390 commands/copy.c:837 -#: commands/sequence.c:1663 commands/tablecmds.c:7339 commands/tablecmds.c:7495 -#: commands/tablecmds.c:7545 commands/tablecmds.c:7619 -#: commands/tablecmds.c:7689 commands/tablecmds.c:7801 -#: commands/tablecmds.c:7895 commands/tablecmds.c:7954 -#: commands/tablecmds.c:8043 commands/tablecmds.c:8073 -#: commands/tablecmds.c:8201 commands/tablecmds.c:8283 -#: commands/tablecmds.c:8417 commands/tablecmds.c:8525 -#: commands/tablecmds.c:12240 commands/tablecmds.c:12421 -#: commands/tablecmds.c:12582 commands/tablecmds.c:13744 -#: commands/tablecmds.c:16273 commands/trigger.c:949 parser/analyze.c:2518 -#: parser/parse_relation.c:737 parser/parse_target.c:1054 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3413 -#: parser/parse_utilcmd.c:3449 parser/parse_utilcmd.c:3491 utils/adt/acl.c:2876 -#: utils/adt/ruleutils.c:2799 +#: 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 "kolumn \"%s\" i relation \"%s\" existerar inte" -#: catalog/aclchk.c:1840 +#: catalog/aclchk.c:1862 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" är ett index" -#: catalog/aclchk.c:1847 commands/tablecmds.c:13901 commands/tablecmds.c:17172 +#: catalog/aclchk.c:1869 commands/tablecmds.c:14496 commands/tablecmds.c:17882 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" är en composite-typ" -#: catalog/aclchk.c:1855 catalog/objectaddress.c:1401 commands/sequence.c:1171 -#: commands/tablecmds.c:254 commands/tablecmds.c:17136 utils/adt/acl.c:2084 -#: utils/adt/acl.c:2114 utils/adt/acl.c:2146 utils/adt/acl.c:2178 -#: utils/adt/acl.c:2206 utils/adt/acl.c:2236 +#: 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\" är inte en sekvens" -#: catalog/aclchk.c:1893 +#: catalog/aclchk.c:1915 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "sekvensen \"%s\" stöder bara USAGE-, SELECT- och UPDATE-rättigheter" -#: catalog/aclchk.c:1910 +#: catalog/aclchk.c:1932 #, c-format msgid "invalid privilege type %s for table" msgstr "ogiltig rättighetstyp %s för tabell" -#: catalog/aclchk.c:2072 +#: catalog/aclchk.c:2097 #, c-format msgid "invalid privilege type %s for column" msgstr "ogitligt rättighetstyp %s för kolumn" -#: catalog/aclchk.c:2085 +#: catalog/aclchk.c:2110 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "sekvensen \"%s\" stöder bara kolumnrättigheten SELECT" -#: catalog/aclchk.c:2275 +#: catalog/aclchk.c:2301 #, c-format msgid "language \"%s\" is not trusted" msgstr "språket \"%s\" är inte betrott" -#: catalog/aclchk.c:2277 +#: 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 och REVOKE är inte tillåtna på icke betrodda språk då bara en superuser kan använda icke betrodda språk." -#: catalog/aclchk.c:2427 +#: catalog/aclchk.c:2454 #, c-format msgid "cannot set privileges of array types" msgstr "kan inte sätta privilegier för array-typer" -#: catalog/aclchk.c:2428 +#: catalog/aclchk.c:2455 #, c-format msgid "Set the privileges of the element type instead." msgstr "Sätt rättigheter för elementtypen istället." -#: catalog/aclchk.c:2435 catalog/objectaddress.c:1667 +#: catalog/aclchk.c:2459 +#, c-format +msgid "cannot set privileges of multirange types" +msgstr "kan inte sätta privilegier för multirange-typer" + +#: catalog/aclchk.c:2460 +#, c-format +msgid "Set the privileges of the range type instead." +msgstr "Sätt rättigheter för range-typen istället." + +#: catalog/aclchk.c:2467 catalog/objectaddress.c:1629 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" är inte en domän" -#: catalog/aclchk.c:2619 +#: catalog/aclchk.c:2653 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "okänd privilegietyp \"%s\"" -#: catalog/aclchk.c:2684 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for aggregate %s" msgstr "rättighet saknas för aggregat %s" -#: catalog/aclchk.c:2687 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for collation %s" msgstr "rättighet saknas för jämförelse %s" -#: catalog/aclchk.c:2690 +#: catalog/aclchk.c:2726 #, c-format msgid "permission denied for column %s" msgstr "rättighet saknas för kolumn %s" -#: catalog/aclchk.c:2693 +#: catalog/aclchk.c:2729 #, c-format msgid "permission denied for conversion %s" msgstr "rättighet saknas för konvertering %s" -#: catalog/aclchk.c:2696 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for database %s" msgstr "rättighet saknas för databas %s" -#: catalog/aclchk.c:2699 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for domain %s" msgstr "rättighet saknas för domän %s" -#: catalog/aclchk.c:2702 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for event trigger %s" msgstr "rättighet saknas för händelsetrigger %s" -#: catalog/aclchk.c:2705 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for extension %s" msgstr "rättighet saknas för utökning %s" -#: catalog/aclchk.c:2708 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "rättighet saknas för främmande data-omvandlare %s" -#: catalog/aclchk.c:2711 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for foreign server %s" msgstr "rättighet saknas för främmande server %s" -#: catalog/aclchk.c:2714 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for foreign table %s" msgstr "rättighet saknas för främmande tabell %s" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for function %s" msgstr "rättighet saknas för funktion %s" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2756 #, c-format msgid "permission denied for index %s" msgstr "rättighet saknas för index %s" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2759 #, c-format msgid "permission denied for language %s" msgstr "rättighet saknas för språk %s" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2762 #, c-format msgid "permission denied for large object %s" msgstr "rättighet saknas för stort objekt %s" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2765 #, c-format msgid "permission denied for materialized view %s" msgstr "rättighet saknas för materialiserad vy %s" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2768 #, c-format msgid "permission denied for operator class %s" msgstr "rättighet saknas för operatorklasss %s" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2771 #, c-format msgid "permission denied for operator %s" msgstr "rättighet saknas för operator %s" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2774 #, c-format msgid "permission denied for operator family %s" msgstr "rättighet saknas för operatorfamilj %s" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2777 #, c-format msgid "permission denied for parameter %s" msgstr "rättighet saknas för parametern %s" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2780 #, c-format msgid "permission denied for policy %s" msgstr "rättighet saknas för policy %s" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2783 #, c-format msgid "permission denied for procedure %s" msgstr "rättighet saknas för procedur %s" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2786 #, c-format msgid "permission denied for publication %s" msgstr "rättighet saknas för publicering %s" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2789 #, c-format msgid "permission denied for routine %s" msgstr "rättighet saknas för rutin %s" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2792 #, c-format msgid "permission denied for schema %s" msgstr "rättighet saknas för schema %s" -#: catalog/aclchk.c:2759 commands/sequence.c:659 commands/sequence.c:885 -#: commands/sequence.c:927 commands/sequence.c:968 commands/sequence.c:1761 -#: commands/sequence.c:1810 +#: 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 "rättighet saknas för sekvens %s" -#: catalog/aclchk.c:2762 +#: catalog/aclchk.c:2798 #, c-format msgid "permission denied for statistics object %s" msgstr "rättighet saknas för statistikobjekt %s" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2801 #, c-format msgid "permission denied for subscription %s" msgstr "rättighet saknas för prenumeration %s" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2804 #, c-format msgid "permission denied for table %s" msgstr "rättighet saknas för tabell %s" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2807 #, c-format msgid "permission denied for tablespace %s" msgstr "rättighet saknas för tabellutrymme %s" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2810 #, c-format msgid "permission denied for text search configuration %s" msgstr "rättighet saknas för textsökkonfigurering %s" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2813 #, c-format msgid "permission denied for text search dictionary %s" msgstr "rättighet saknas för textsökordlista %s" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2816 #, c-format msgid "permission denied for type %s" msgstr "rättighet saknas för typ %s" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2819 #, c-format msgid "permission denied for view %s" msgstr "rättighet saknas för vy %s" -#: catalog/aclchk.c:2819 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of aggregate %s" msgstr "måste vara ägaren till aggregatet %s" -#: catalog/aclchk.c:2822 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of collation %s" msgstr "måste vara ägaren till jämförelsen %s" -#: catalog/aclchk.c:2825 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of conversion %s" msgstr "måste vara ägaren till konverteringen %s" -#: catalog/aclchk.c:2828 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of database %s" msgstr "måste vara ägaren till databasen %s" -#: catalog/aclchk.c:2831 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of domain %s" msgstr "måste vara ägaren av domänen %s" -#: catalog/aclchk.c:2834 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of event trigger %s" msgstr "måste vara ägaren till händelsetrigger %s" -#: catalog/aclchk.c:2837 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of extension %s" msgstr "måste vara ägaren till utökningen %s" -#: catalog/aclchk.c:2840 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "måste vara ägaren till främmande data-omvandlaren %s" -#: catalog/aclchk.c:2843 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of foreign server %s" msgstr "måste vara ägaren till främmande servern %s" -#: catalog/aclchk.c:2846 +#: catalog/aclchk.c:2882 #, c-format msgid "must be owner of foreign table %s" msgstr "måste vara ägaren till främmande tabellen %s" -#: catalog/aclchk.c:2849 +#: catalog/aclchk.c:2885 #, c-format msgid "must be owner of function %s" msgstr "måste vara ägaren till funktionen %s" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2888 #, c-format msgid "must be owner of index %s" msgstr "måste vara ägaren till indexet %s" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2891 #, c-format msgid "must be owner of language %s" msgstr "måste vara ägaren till språket %s" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2894 #, c-format msgid "must be owner of large object %s" msgstr "måste vara ägaren till stora objektet %s" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2897 #, c-format msgid "must be owner of materialized view %s" msgstr "måste vara ägaren till den materialiserade vyn %s" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2900 #, c-format msgid "must be owner of operator class %s" msgstr "måste vara ägaren till operatorklassen %s" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2903 #, c-format msgid "must be owner of operator %s" msgstr "måste vara ägaren till operatorn %s" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2906 #, c-format msgid "must be owner of operator family %s" msgstr "måste vara ägaren till operatorfamiljen %s" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2909 #, c-format msgid "must be owner of procedure %s" msgstr "måste vara ägaren till proceduren %s" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2912 #, c-format msgid "must be owner of publication %s" msgstr "måste vara ägaren till publiceringen %s" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2915 #, c-format msgid "must be owner of routine %s" msgstr "måste vara ägaren till rutinen %s" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2918 #, c-format msgid "must be owner of sequence %s" msgstr "måste vara ägaren till sekvensen %s" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2921 #, c-format msgid "must be owner of subscription %s" msgstr "måste vara ägaren till prenumerationen %s" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2924 #, c-format msgid "must be owner of table %s" msgstr "måste vara ägaren till tabellen %s" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2927 #, c-format msgid "must be owner of type %s" msgstr "måste vara ägaren till typen %s" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2930 #, c-format msgid "must be owner of view %s" msgstr "måste vara ägaren till vyn %s" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2933 #, c-format msgid "must be owner of schema %s" msgstr "måste vara ägaren till schemat %s" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2936 #, c-format msgid "must be owner of statistics object %s" msgstr "måste vara ägaren till statistikobjektet %s" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2939 #, c-format msgid "must be owner of tablespace %s" msgstr "måste vara ägaren till tabellutrymmet %s" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2942 #, c-format msgid "must be owner of text search configuration %s" msgstr "måste vara ägaren till textsökkonfigurationen %s" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2945 #, c-format msgid "must be owner of text search dictionary %s" msgstr "måste vara ägaren till textsökordlistan %s" -#: catalog/aclchk.c:2923 +#: catalog/aclchk.c:2959 #, c-format msgid "must be owner of relation %s" msgstr "måste vara ägaren till relationen %s" -#: catalog/aclchk.c:2969 +#: catalog/aclchk.c:3005 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "rättighet saknas för kolumn \"%s\" i relation \"%s\"" -#: catalog/aclchk.c:3104 catalog/aclchk.c:3979 catalog/aclchk.c:4011 +#: catalog/aclchk.c:3162 catalog/aclchk.c:4170 catalog/aclchk.c:4201 #, c-format msgid "%s with OID %u does not exist" msgstr "%s med OID %u existerar inte" -#: catalog/aclchk.c:3188 catalog/aclchk.c:3207 +#: catalog/aclchk.c:3245 catalog/aclchk.c:3264 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "attribut %d i relation med OID %u existerar inte" -#: catalog/aclchk.c:3302 +#: catalog/aclchk.c:3302 catalog/aclchk.c:3365 catalog/aclchk.c:4004 #, c-format msgid "relation with OID %u does not exist" msgstr "relation med OID %u existerar inte" -#: catalog/aclchk.c:3476 +#: catalog/aclchk.c:3550 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "parameter ACL med OID %u existerar inte" -#: catalog/aclchk.c:3640 commands/collationcmds.c:808 -#: commands/publicationcmds.c:1746 +#: catalog/aclchk.c:3723 commands/collationcmds.c:853 +#: commands/publicationcmds.c:1739 #, c-format msgid "schema with OID %u does not exist" msgstr "schema med OID %u existerar inte" -#: catalog/aclchk.c:3705 utils/cache/typcache.c:390 utils/cache/typcache.c:445 +#: 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 "typ med OID %u existerar inte" -#: catalog/catalog.c:449 +#: catalog/catalog.c:477 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "letar fortfarande efter en oanvänd OID i relationen \"%s\"" -#: catalog/catalog.c:451 +#: 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-kandidater har kontrollerats %llu gång men inga oanvända OID:er har hittats än." msgstr[1] "OID-kandidater har kontrollerats %llu gånger men inga oanvända OID:er har hittats än." -#: catalog/catalog.c:476 +#: 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] "ny OID har tilldelats i relation \"%s\" after %llu försök" msgstr[1] "ny OID har tilldelats i relation \"%s\" after %llu försök" -#: catalog/catalog.c:609 catalog/catalog.c:676 +#: catalog/catalog.c:637 catalog/catalog.c:704 #, c-format msgid "must be superuser to call %s()" msgstr "måste vara en superuser för att anropa %s()" -#: catalog/catalog.c:618 +#: catalog/catalog.c:646 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() kan bara användas på systemkataloger" -#: catalog/catalog.c:623 parser/parse_utilcmd.c:2264 +#: catalog/catalog.c:651 parser/parse_utilcmd.c:2270 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "index \"%s\" tillhör inte tabell \"%s\"" -#: catalog/catalog.c:640 +#: catalog/catalog.c:668 #, c-format msgid "column \"%s\" is not of type oid" msgstr "kolumnen \"%s\" är inte av typen oid" -#: catalog/catalog.c:647 +#: catalog/catalog.c:675 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "index \"%s\" är inte indexet för kolumnen \"%s\"" -#: catalog/dependency.c:546 catalog/pg_shdepend.c:658 +#: catalog/dependency.c:497 catalog/pg_shdepend.c:703 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "kan inte ta bort %s eftersom den krävs av databassystemet" -#: catalog/dependency.c:838 catalog/dependency.c:1065 +#: catalog/dependency.c:789 catalog/dependency.c:1016 #, c-format msgid "cannot drop %s because %s requires it" msgstr "kan inte ta bort %s eftersom %s behöver den" -#: catalog/dependency.c:840 catalog/dependency.c:1067 +#: catalog/dependency.c:791 catalog/dependency.c:1018 #, c-format msgid "You can drop %s instead." msgstr "Du kan ta bort %s i stället." -#: catalog/dependency.c:1146 catalog/dependency.c:1155 +#: catalog/dependency.c:1097 catalog/dependency.c:1106 #, c-format msgid "%s depends on %s" msgstr "%s beror på %s" -#: catalog/dependency.c:1170 catalog/dependency.c:1179 +#: catalog/dependency.c:1121 catalog/dependency.c:1130 #, c-format msgid "drop cascades to %s" msgstr "drop svämmar över (cascades) till %s" -#: catalog/dependency.c:1187 catalog/pg_shdepend.c:823 +#: catalog/dependency.c:1138 catalog/pg_shdepend.c:868 #, c-format msgid "" "\n" @@ -4436,714 +4777,715 @@ msgstr[1] "" "\n" "och %d andra objekt (se serverloggen för en lista)" -#: catalog/dependency.c:1199 +#: catalog/dependency.c:1150 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "kan inte ta bort %s eftersom andra objekt beror på den" -#: catalog/dependency.c:1202 catalog/dependency.c:1209 -#: catalog/dependency.c:1220 commands/tablecmds.c:1335 -#: commands/tablecmds.c:14386 commands/tablespace.c:466 commands/user.c:1309 -#: commands/vacuum.c:211 commands/view.c:446 libpq/auth.c:326 -#: replication/logical/applyparallelworker.c:1044 replication/syncrep.c:1017 -#: storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1358 utils/misc/guc.c:3120 -#: utils/misc/guc.c:3156 utils/misc/guc.c:3226 utils/misc/guc.c:6615 -#: utils/misc/guc.c:6649 utils/misc/guc.c:6683 utils/misc/guc.c:6726 -#: utils/misc/guc.c:6768 +#: 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" -#: catalog/dependency.c:1203 catalog/dependency.c:1210 +#: catalog/dependency.c:1154 catalog/dependency.c:1161 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Använd DROP ... CASCADE för att ta bort de beroende objekten också." -#: catalog/dependency.c:1207 +#: catalog/dependency.c:1158 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "kan inte ta bort önskade objekt eftersom andra objekt beror på dem" -#: catalog/dependency.c:1215 +#: catalog/dependency.c:1166 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "drop svämmar över (cascades) till %d andra objekt" msgstr[1] "drop svämmar över (cascades) till %d andra objekt" -#: catalog/dependency.c:1899 +#: catalog/dependency.c:1850 #, c-format msgid "constant of the type %s cannot be used here" msgstr "konstant av typen %s kan inte användas här" -#: catalog/dependency.c:2420 parser/parse_relation.c:3404 -#: parser/parse_relation.c:3414 +#: 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 "kolumn %d i relation \"%s\" finns inte" -#: catalog/heap.c:324 +#: catalog/heap.c:325 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "rättighet saknas för att skapa \"%s.%s\"" -#: catalog/heap.c:326 +#: catalog/heap.c:327 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Systemkatalogändringar är för tillfället inte tillåtna." -#: catalog/heap.c:466 commands/tablecmds.c:2374 commands/tablecmds.c:3047 -#: commands/tablecmds.c:6922 +#: 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 "tabeller kan ha som mest %d kolumner" -#: catalog/heap.c:484 commands/tablecmds.c:7229 +#: catalog/heap.c:485 commands/tablecmds.c:7432 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "kolumnnamn \"%s\" står i konflikt med ett systemkolumnnamn" -#: catalog/heap.c:500 +#: catalog/heap.c:501 #, c-format msgid "column name \"%s\" specified more than once" msgstr "kolumnnamn \"%s\" angiven mer än en gång" #. translator: first %s is an integer not a name -#: catalog/heap.c:575 +#: catalog/heap.c:579 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "partitionsnyckelkolumn \"%s\" har pseudo-typ %s" -#: catalog/heap.c:580 +#: catalog/heap.c:584 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "kolumn \"%s\" har pseudo-typ %s" -#: catalog/heap.c:611 +#: catalog/heap.c:615 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "composite-typ %s kan inte vara en del av sig själv" #. translator: first %s is an integer not a name -#: catalog/heap.c:666 +#: catalog/heap.c:670 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "ingen jämförelse kunde härledas för partitionsnyckelkolumn %s med jämförelsetyp %s" -#: catalog/heap.c:672 commands/createas.c:203 commands/createas.c:512 +#: 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 "ingen jämförelse kunde härledas för kolumn \"%s\" med jämförelsetyp %s" -#: catalog/heap.c:1148 catalog/index.c:887 commands/createas.c:408 -#: commands/tablecmds.c:3987 +#: catalog/heap.c:1161 catalog/index.c:899 commands/createas.c:401 +#: commands/tablecmds.c:4171 #, c-format msgid "relation \"%s\" already exists" msgstr "relationen \"%s\" finns redan" -#: catalog/heap.c:1164 catalog/pg_type.c:434 catalog/pg_type.c:782 -#: catalog/pg_type.c:954 commands/typecmds.c:249 commands/typecmds.c:261 -#: commands/typecmds.c:754 commands/typecmds.c:1169 commands/typecmds.c:1395 -#: commands/typecmds.c:1575 commands/typecmds.c:2546 +#: catalog/heap.c:1177 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 #, c-format msgid "type \"%s\" already exists" msgstr "typen \"%s\" existerar redan" -#: catalog/heap.c:1165 +#: catalog/heap.c:1178 #, 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 "En relation har en associerad typ med samma namn så du måste använda ett namn som inte krockar med någon existerande typ." -#: catalog/heap.c:1205 +#: catalog/heap.c:1218 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "relfile-nummervärde för toast är inte satt i binärt uppgraderingsläge" -#: catalog/heap.c:1216 +#: catalog/heap.c:1229 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "pg_class heap OID-värde är inte satt i binärt uppgraderingsläge" -#: catalog/heap.c:1226 +#: catalog/heap.c:1239 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "relfile-nummervärde är inte satt i binärt uppgraderingsläge" -#: catalog/heap.c:2119 +#: catalog/heap.c:2130 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "kan inte lägga till NO INHERIT-villkor till partitionerad tabell \"%s\"" -#: catalog/heap.c:2393 +#: catalog/heap.c:2402 #, c-format msgid "check constraint \"%s\" already exists" msgstr "check-villkor \"%s\" finns redan" -#: catalog/heap.c:2563 catalog/index.c:901 catalog/pg_constraint.c:682 -#: commands/tablecmds.c:8900 +#: 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 "integritetsvillkor \"%s\" för relation \"%s\" finns redan" -#: catalog/heap.c:2570 +#: catalog/heap.c:2581 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "villkor \"%s\" står i konflikt med icke-ärvt villkor på relation \"%s\"" -#: catalog/heap.c:2581 +#: catalog/heap.c:2592 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "villkor \"%s\" står i konflikt med ärvt villkor på relation \"%s\"" -#: catalog/heap.c:2591 +#: catalog/heap.c:2602 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "villkor \"%s\" står i konflikt med NOT VALID-villkor på relation \"%s\"" -#: catalog/heap.c:2596 +#: catalog/heap.c:2607 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "slår samman villkor \"%s\" med ärvd definition" -#: catalog/heap.c:2622 catalog/pg_constraint.c:811 commands/tablecmds.c:2672 -#: commands/tablecmds.c:3199 commands/tablecmds.c:6858 -#: commands/tablecmds.c:15208 commands/tablecmds.c:15349 +#: 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 "för många föräldrar i arv" -#: catalog/heap.c:2706 +#: catalog/heap.c:2717 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "kan inte använda genererad kolumn \"%s\" i kolumngenereringsuttryck" -#: catalog/heap.c:2708 +#: catalog/heap.c:2719 #, c-format msgid "A generated column cannot reference another generated column." msgstr "En genererad kolumn kan inte referera till en annan genererad kolumn." -#: catalog/heap.c:2714 +#: catalog/heap.c:2725 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "kan inte använda hela-raden-variabel i kolumngenereringsuttryck" -#: catalog/heap.c:2715 +#: catalog/heap.c:2726 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Detta skulle leda till att den genererade kolumnen beror på sitt eget värde." -#: catalog/heap.c:2768 +#: catalog/heap.c:2781 #, c-format msgid "generation expression is not immutable" msgstr "genereringsuttryck är inte immutable" -#: catalog/heap.c:2796 rewrite/rewriteHandler.c:1297 +#: 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 "kolumn \"%s\" har typ %s men default-uttryck har typen %s" -#: catalog/heap.c:2801 commands/prepare.c:334 parser/analyze.c:2742 -#: parser/parse_target.c:593 parser/parse_target.c:874 -#: parser/parse_target.c:884 rewrite/rewriteHandler.c:1302 +#: 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 "Du måste skriva om eller typomvandla uttrycket." -#: catalog/heap.c:2848 +#: catalog/heap.c:2861 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "bara tabell \"%s\" kan refereras i check-villkoret" -#: catalog/heap.c:3154 +#: catalog/heap.c:3167 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "inget stöd för kombinationen ON COMMIT och främmande nyckel" -#: catalog/heap.c:3155 +#: catalog/heap.c:3168 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "Tabell \"%s\" refererar till \"%s\", men de har inte samma ON COMMIT-inställning." -#: catalog/heap.c:3160 +#: catalog/heap.c:3173 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "kan inte trunkera en tabell som refererars till i ett främmande nyckelvillkor" -#: catalog/heap.c:3161 +#: catalog/heap.c:3174 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Tabell \"%s\" refererar till \"%s\"." -#: catalog/heap.c:3163 +#: catalog/heap.c:3176 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunkera tabellen \"%s\" samtidigt, eller använd TRUNCATE ... CASCADE." -#: catalog/index.c:225 parser/parse_utilcmd.c:2170 +#: catalog/index.c:219 parser/parse_utilcmd.c:2176 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "multipla primärnycklar för tabell \"%s\" tillåts inte" -#: catalog/index.c:239 +#: catalog/index.c:233 #, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" msgstr "primärnycklar kan inte använda NULLS NOT DISTINCT-index" -#: catalog/index.c:256 +#: catalog/index.c:250 #, c-format msgid "primary keys cannot be expressions" msgstr "primärnycklar kan inte vara uttryck" -#: catalog/index.c:273 +#: catalog/index.c:267 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "primärnyckelkolumn \"%s\" är inte markerad NOT NULL" -#: catalog/index.c:786 catalog/index.c:1942 +#: catalog/index.c:798 catalog/index.c:1915 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "användardefinierade index på systemkatalogen är inte möjligt" -#: catalog/index.c:826 +#: catalog/index.c:838 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "ickedeterministiska jämförelser (collation) stöds inte för operatorklass \"%s\"" -#: catalog/index.c:841 +#: catalog/index.c:853 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "samtida indexskapande på systemkatalogtabeller stöds inte" -#: catalog/index.c:850 catalog/index.c:1318 +#: catalog/index.c:862 catalog/index.c:1331 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "samtida indexskapande för uteslutningsvillkor stöds inte" -#: catalog/index.c:859 +#: catalog/index.c:871 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "delade index kan inte skapas efter initdb" -#: catalog/index.c:879 commands/createas.c:423 commands/sequence.c:158 +#: 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 "relationen \"%s\" finns redan, hoppar över" -#: catalog/index.c:929 +#: catalog/index.c:941 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "pg_class index OID-värde är inte satt i binärt uppgraderingsläge" -#: catalog/index.c:939 utils/cache/relcache.c:3731 +#: catalog/index.c:951 utils/cache/relcache.c:3791 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "relfile-nummervärde för index är inte satt i binärt uppgraderingsläge" -#: catalog/index.c:2241 +#: catalog/index.c:2214 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY måste vara första operationen i transaktion" -#: catalog/index.c:3649 +#: catalog/index.c:3668 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "kan inte omindexera temporära tabeller som tillhör andra sessioner" -#: catalog/index.c:3660 commands/indexcmds.c:3631 +#: catalog/index.c:3679 commands/indexcmds.c:3626 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "kan inte omindexera angivet index i TOAST-tabell" -#: catalog/index.c:3676 commands/indexcmds.c:3511 commands/indexcmds.c:3655 -#: commands/tablecmds.c:3402 +#: 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 "kan inte flytta systemrelation \"%s\"" -#: catalog/index.c:3820 +#: catalog/index.c:3832 #, c-format msgid "index \"%s\" was reindexed" msgstr "index \"%s\" omindexerades" -#: catalog/index.c:3957 +#: catalog/index.c:3998 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "kan inte omindexera ogiltigt index \"%s.%s\" på TOAST-tabell, hoppar över" -#: catalog/namespace.c:260 catalog/namespace.c:464 catalog/namespace.c:556 -#: commands/trigger.c:5718 +#: 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 "referenser till andra databaser är inte implementerat: \"%s.%s.%s\"" -#: catalog/namespace.c:317 +#: catalog/namespace.c:519 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "temporära tabeller kan inte anges med ett schemanamn" -#: catalog/namespace.c:398 +#: catalog/namespace.c:600 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "kunde inte ta lås på relationen \"%s.%s\"" -#: catalog/namespace.c:403 commands/lockcmds.c:144 commands/lockcmds.c:224 +#: catalog/namespace.c:605 commands/lockcmds.c:143 commands/lockcmds.c:223 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "kunde inte ta lås på relationen \"%s\"" -#: catalog/namespace.c:431 parser/parse_relation.c:1430 +#: catalog/namespace.c:633 parser/parse_relation.c:1430 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "relationen \"%s.%s\" existerar inte" -#: catalog/namespace.c:436 parser/parse_relation.c:1443 +#: 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 "relationen \"%s\" existerar inte" -#: catalog/namespace.c:502 catalog/namespace.c:3073 commands/extension.c:1611 -#: commands/extension.c:1617 +#: 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 "inget schema har valts för att skapa i" -#: catalog/namespace.c:654 catalog/namespace.c:667 +#: catalog/namespace.c:856 catalog/namespace.c:869 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "kan inte skapa relationer i temporära scheman som tillhör andra sessioner" -#: catalog/namespace.c:658 +#: catalog/namespace.c:860 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "kan inte skapa temporär relation i icke-temporärt schema" -#: catalog/namespace.c:673 +#: catalog/namespace.c:875 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "bara temporära relationer får skapas i temporära scheman" -#: catalog/namespace.c:2265 +#: catalog/namespace.c:2619 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "statistikobjektet \"%s\" existerar inte" -#: catalog/namespace.c:2388 +#: catalog/namespace.c:2761 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "textsökparser \"%s\" finns inte" -#: catalog/namespace.c:2514 utils/adt/regproc.c:1439 +#: catalog/namespace.c:2906 utils/adt/regproc.c:1459 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "textsökkatalog \"%s\" finns inte" -#: catalog/namespace.c:2641 +#: catalog/namespace.c:3052 #, c-format msgid "text search template \"%s\" does not exist" msgstr "textsökmall \"%s\" finns inte" -#: catalog/namespace.c:2767 commands/tsearchcmds.c:1162 -#: utils/adt/regproc.c:1329 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 "textsökkonfiguration \"%s\" finns inte" -#: catalog/namespace.c:2880 parser/parse_expr.c:832 parser/parse_target.c:1246 +#: 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 "referenser till andra databaser är inte implementerat: %s" -#: catalog/namespace.c:2886 gram.y:18569 gram.y:18609 parser/parse_expr.c:839 -#: parser/parse_target.c:1253 +#: 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 "ej korrekt kvalificerat namn (för många namn med punkt): %s" -#: catalog/namespace.c:3016 +#: catalog/namespace.c:3465 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "kan inte flytta objekt in eller ut från temporära scheman" -#: catalog/namespace.c:3022 +#: catalog/namespace.c:3471 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "kan inte flytta objekt in eller ut från TOAST-schema" -#: catalog/namespace.c:3095 commands/schemacmds.c:264 commands/schemacmds.c:344 -#: commands/tablecmds.c:1280 utils/adt/regproc.c:1668 +#: 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 "schema \"%s\" existerar inte" -#: catalog/namespace.c:3126 +#: catalog/namespace.c:3575 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "ej korrekt relationsnamn (för många namn med punkt): %s" -#: catalog/namespace.c:3693 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 "jämförelse \"%s\" för kodning \"%s\" finns inte" -#: catalog/namespace.c:3748 +#: catalog/namespace.c:4071 #, c-format msgid "conversion \"%s\" does not exist" msgstr "konvertering \"%s\" finns inte" -#: catalog/namespace.c:4012 +#: catalog/namespace.c:4412 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "rättighet saknas för att skapa temporära tabeller i databasen \"%s\"" -#: catalog/namespace.c:4028 +#: catalog/namespace.c:4428 #, c-format msgid "cannot create temporary tables during recovery" msgstr "kan inte skapa temptabeller under återställning" -#: catalog/namespace.c:4034 +#: catalog/namespace.c:4434 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "kan inte skapa temporära tabeller under en parallell operation" -#: catalog/objectaddress.c:1409 commands/policy.c:96 commands/policy.c:376 -#: commands/tablecmds.c:248 commands/tablecmds.c:290 commands/tablecmds.c:2206 -#: commands/tablecmds.c:12357 +#: 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\" är inte en tabell" -#: catalog/objectaddress.c:1416 commands/tablecmds.c:260 -#: commands/tablecmds.c:17141 commands/view.c:119 +#: 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\" är inte en vy" -#: catalog/objectaddress.c:1423 commands/matview.c:186 commands/tablecmds.c:266 -#: commands/tablecmds.c:17146 +#: 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\" är inte en materialiserad vy" -#: catalog/objectaddress.c:1430 commands/tablecmds.c:284 -#: commands/tablecmds.c:17151 +#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 +#: commands/tablecmds.c:17861 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" är inte en främmande tabell" -#: catalog/objectaddress.c:1471 +#: catalog/objectaddress.c:1433 #, c-format msgid "must specify relation and object name" msgstr "måste ange relation och objektnamn" -#: catalog/objectaddress.c:1547 catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 #, c-format msgid "column name must be qualified" msgstr "kolumnnamn måste vara kvalificerat" -#: catalog/objectaddress.c:1619 +#: catalog/objectaddress.c:1581 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "standardvärde för kolumn \"%s\" i relation \"%s\" existerar inte" -#: catalog/objectaddress.c:1656 commands/functioncmds.c:137 -#: commands/tablecmds.c:276 commands/typecmds.c:274 commands/typecmds.c:3689 +#: 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:4441 +#: utils/adt/acl.c:4560 #, c-format msgid "type \"%s\" does not exist" msgstr "typen \"%s\" existerar inte" -#: catalog/objectaddress.c:1775 +#: catalog/objectaddress.c:1737 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "operator %d (%s, %s) för %s finns inte" -#: catalog/objectaddress.c:1806 +#: catalog/objectaddress.c:1768 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "funktion %d (%s, %s) för %s finns inte" -#: catalog/objectaddress.c:1857 catalog/objectaddress.c:1883 +#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "användarmappning för användare \"%s\" på server \"%s\" finns inte" -#: catalog/objectaddress.c:1872 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:700 +#: 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 "server \"%s\" finns inte" -#: catalog/objectaddress.c:1939 +#: catalog/objectaddress.c:1901 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "publiceringsrelation \"%s\" i publicering \"%s\" finns inte" -#: catalog/objectaddress.c:1986 +#: catalog/objectaddress.c:1948 #, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" msgstr "publiceringsschema \"%s\" i publicering \"%s\" finns inte" -#: catalog/objectaddress.c:2044 +#: catalog/objectaddress.c:2006 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "okänd standard-ACL-objekttyp \"%c\"" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2007 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Giltiga objekttyper är \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:2096 +#: catalog/objectaddress.c:2058 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "standard ACL för användare \"%s\" i schema \"%s\" på %s finns inte" -#: catalog/objectaddress.c:2101 +#: catalog/objectaddress.c:2063 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "standard ACL för användare \"%s\" på %s finns inte" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2184 -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2201 #, c-format msgid "name or argument lists may not contain nulls" msgstr "namn eller argumentlistor får inte innehålla null" -#: catalog/objectaddress.c:2161 +#: catalog/objectaddress.c:2123 #, c-format msgid "unsupported object type \"%s\"" msgstr "ej stöd för objekttyp \"%s\"" -#: catalog/objectaddress.c:2180 catalog/objectaddress.c:2197 -#: catalog/objectaddress.c:2262 catalog/objectaddress.c:2346 +#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 +#: catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 #, c-format msgid "name list length must be exactly %d" msgstr "namnlistlängen måste vara exakt %d" -#: catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2163 #, c-format msgid "large object OID may not be null" msgstr "stort objekt-OID får inte vara null" -#: catalog/objectaddress.c:2210 catalog/objectaddress.c:2280 -#: catalog/objectaddress.c:2287 +#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 +#: catalog/objectaddress.c:2249 #, c-format msgid "name list length must be at least %d" msgstr "namnlistlängden måste vara minst %d" -#: catalog/objectaddress.c:2273 catalog/objectaddress.c:2294 +#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 #, c-format msgid "argument list length must be exactly %d" msgstr "argumentlistans längd måste vara exakt %d" -#: catalog/objectaddress.c:2508 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 #, c-format msgid "must be owner of large object %u" msgstr "måste vara ägaren till stort objekt %u" -#: catalog/objectaddress.c:2523 commands/functioncmds.c:1561 +#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 #, c-format msgid "must be owner of type %s or type %s" msgstr "måste vara ägaren till typ %s eller typ %s" -#: catalog/objectaddress.c:2550 catalog/objectaddress.c:2559 -#: catalog/objectaddress.c:2565 +#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 +#: catalog/objectaddress.c:2527 #, c-format msgid "permission denied" msgstr "rättighet saknas" -#: catalog/objectaddress.c:2551 catalog/objectaddress.c:2560 +#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 #, c-format msgid "The current user must have the %s attribute." msgstr "Aktuella användaren måste ha attributet %s." -#: catalog/objectaddress.c:2566 +#: catalog/objectaddress.c:2528 #, c-format msgid "The current user must have the %s option on role \"%s\"." msgstr "Aktuella användaren måste ha flaggan %s på rollen \"%s\"." -#: catalog/objectaddress.c:2580 +#: catalog/objectaddress.c:2542 #, c-format msgid "must be superuser" msgstr "måste vara en superuser" -#: catalog/objectaddress.c:2649 +#: catalog/objectaddress.c:2611 #, c-format msgid "unrecognized object type \"%s\"" msgstr "okänd objekttyp \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2941 +#: catalog/objectaddress.c:2928 #, c-format msgid "column %s of %s" msgstr "kolumn %s av %s" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2943 #, c-format msgid "function %s" msgstr "funktion %s" -#: catalog/objectaddress.c:2969 +#: catalog/objectaddress.c:2956 #, c-format msgid "type %s" msgstr "typ %s" -#: catalog/objectaddress.c:3006 +#: catalog/objectaddress.c:2993 #, c-format msgid "cast from %s to %s" msgstr "typomvandling från %s till %s" -#: catalog/objectaddress.c:3039 +#: catalog/objectaddress.c:3026 #, c-format msgid "collation %s" msgstr "jämförelse %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3057 #, c-format msgid "constraint %s on %s" msgstr "villkor %s på %s" -#: catalog/objectaddress.c:3076 +#: catalog/objectaddress.c:3063 #, c-format msgid "constraint %s" msgstr "villkor %s" -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3095 #, c-format msgid "conversion %s" msgstr "konvertering %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3130 +#: catalog/objectaddress.c:3117 #, c-format msgid "default value for %s" msgstr "default-värde för %s" -#: catalog/objectaddress.c:3141 +#: catalog/objectaddress.c:3128 #, c-format msgid "language %s" msgstr "språk %s" -#: catalog/objectaddress.c:3149 +#: catalog/objectaddress.c:3136 #, c-format msgid "large object %u" msgstr "stort objekt %u" -#: catalog/objectaddress.c:3162 +#: catalog/objectaddress.c:3149 #, c-format msgid "operator %s" msgstr "operator %s" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3186 #, c-format msgid "operator class %s for access method %s" msgstr "operatorklass %s för accessmetod %s" -#: catalog/objectaddress.c:3227 +#: catalog/objectaddress.c:3214 #, c-format msgid "access method %s" msgstr "accessmetod %s" @@ -5152,7 +5494,7 @@ msgstr "accessmetod %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3276 +#: catalog/objectaddress.c:3269 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "operator %d (%s, %s) för %s: %s" @@ -5161,236 +5503,236 @@ msgstr "operator %d (%s, %s) för %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3333 +#: catalog/objectaddress.c:3334 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "funktion %d (%s, %s) för %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3385 +#: catalog/objectaddress.c:3388 #, c-format msgid "rule %s on %s" msgstr "regel %s på %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3431 +#: catalog/objectaddress.c:3434 #, c-format msgid "trigger %s on %s" msgstr "trigger %s på %s" -#: catalog/objectaddress.c:3451 +#: catalog/objectaddress.c:3454 #, c-format msgid "schema %s" msgstr "schema %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3482 #, c-format msgid "statistics object %s" msgstr "statistikobjekt %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3513 #, c-format msgid "text search parser %s" msgstr "textsökparser %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3544 #, c-format msgid "text search dictionary %s" msgstr "textsökordlista %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3575 #, c-format msgid "text search template %s" msgstr "textsökmall %s" -#: catalog/objectaddress.c:3603 +#: catalog/objectaddress.c:3606 #, c-format msgid "text search configuration %s" msgstr "textsökkonfiguration %s" -#: catalog/objectaddress.c:3616 +#: catalog/objectaddress.c:3619 #, c-format msgid "role %s" msgstr "roll %s" -#: catalog/objectaddress.c:3653 catalog/objectaddress.c:5505 +#: catalog/objectaddress.c:3656 catalog/objectaddress.c:5505 #, c-format msgid "membership of role %s in role %s" msgstr "medlemskap av rollen %s i rollen %s" -#: catalog/objectaddress.c:3674 +#: catalog/objectaddress.c:3677 #, c-format msgid "database %s" msgstr "databas %s" -#: catalog/objectaddress.c:3690 +#: catalog/objectaddress.c:3693 #, c-format msgid "tablespace %s" msgstr "tabellutrymme %s" -#: catalog/objectaddress.c:3701 +#: catalog/objectaddress.c:3704 #, c-format msgid "foreign-data wrapper %s" msgstr "främmande data-omvandlare %s" -#: catalog/objectaddress.c:3711 +#: catalog/objectaddress.c:3714 #, c-format msgid "server %s" msgstr "server %s" -#: catalog/objectaddress.c:3744 +#: catalog/objectaddress.c:3747 #, c-format msgid "user mapping for %s on server %s" msgstr "användarmappning för %s på server %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3799 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "standardrättigheter för nya relationer som tillhör rollen %s i schema %s" -#: catalog/objectaddress.c:3800 +#: catalog/objectaddress.c:3803 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "standardrättigheter för nya relationer som tillhör rollen %s" -#: catalog/objectaddress.c:3806 +#: catalog/objectaddress.c:3809 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "standardrättigheter för nya sekvenser som tillhör rollen %s i schema %s" -#: catalog/objectaddress.c:3810 +#: catalog/objectaddress.c:3813 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "standardrättigheter för nya sekvenser som tillhör rollen %s" -#: catalog/objectaddress.c:3816 +#: catalog/objectaddress.c:3819 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "standardrättigheter för nya funktioner som tillhör rollen %s i schema %s" -#: catalog/objectaddress.c:3820 +#: catalog/objectaddress.c:3823 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "standardrättigheter för nya funktioner som tillhör rollen %s" -#: catalog/objectaddress.c:3826 +#: catalog/objectaddress.c:3829 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "standardrättigheter för nya typer som tillhör rollen %s i schema %s" -#: catalog/objectaddress.c:3830 +#: catalog/objectaddress.c:3833 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "standardrättigheter för nya typer som tillhör rollen %s" -#: catalog/objectaddress.c:3836 +#: catalog/objectaddress.c:3839 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr " %zu)" msgstr "servern försöke skicka för stort GSSAPI-paket (%zu > %zu)" @@ -15235,810 +15692,810 @@ msgstr "kunde inte acceptera GSSSPI-säkerhetskontext" msgid "GSSAPI size check error" msgstr "GSSAPI-fel vid kontroll av storlek" -#: libpq/be-secure-openssl.c:125 +#: libpq/be-secure-openssl.c:131 #, c-format msgid "could not create SSL context: %s" msgstr "kunde inte skapa SSL-kontext: %s" -#: libpq/be-secure-openssl.c:151 +#: libpq/be-secure-openssl.c:157 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "kunde inte ladda serverns certifikatfil \"%s\": %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:177 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "privat nyckelfil \"%s\" kan inte laddas om eftersom den kräver en lösenordsfras" -#: libpq/be-secure-openssl.c:176 +#: libpq/be-secure-openssl.c:182 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "kunde inte läsa in privata nyckelfilen \"%s\": %s" -#: libpq/be-secure-openssl.c:185 +#: libpq/be-secure-openssl.c:191 #, c-format msgid "check of private key failed: %s" msgstr "kontroll av privat nyckel misslyckades: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:198 libpq/be-secure-openssl.c:221 +#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "\"%s\"-inställning \"%s\" stöds inte av detta bygge" -#: libpq/be-secure-openssl.c:208 +#: libpq/be-secure-openssl.c:214 #, c-format msgid "could not set minimum SSL protocol version" msgstr "kunde inte sätta minimal SSL-protokollversion" -#: libpq/be-secure-openssl.c:231 +#: libpq/be-secure-openssl.c:237 #, c-format msgid "could not set maximum SSL protocol version" msgstr "kunde inte sätta maximal SSL-protokollversion" -#: libpq/be-secure-openssl.c:247 +#: libpq/be-secure-openssl.c:253 #, c-format msgid "could not set SSL protocol version range" msgstr "kunde inte sätta SSL-protokollversionsintervall" -#: libpq/be-secure-openssl.c:248 +#: libpq/be-secure-openssl.c:254 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\" får inte vara högre än \"%s\"" -#: libpq/be-secure-openssl.c:285 +#: libpq/be-secure-openssl.c:307 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "kunde inte sätta kryptolistan (inga giltiga krypton är tillgängliga)" -#: libpq/be-secure-openssl.c:305 +#: libpq/be-secure-openssl.c:327 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "kunde inte ladda root-certifikatfilen \"%s\": %s" -#: libpq/be-secure-openssl.c:354 +#: libpq/be-secure-openssl.c:376 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "kunde inte ladda fil \"%s\" med certifikatåterkallningslista för SSL: %s" -#: libpq/be-secure-openssl.c:362 +#: libpq/be-secure-openssl.c:384 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "kunde inte ladda katalog \"%s\" för certifikatåterkallning: %s" -#: libpq/be-secure-openssl.c:370 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "kunde inte ladda fil \"%s\" eller katalog \"%s\" med certifikatåterkallning för SSL: %s" -#: libpq/be-secure-openssl.c:428 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "kunde inte initiera SSL-uppkoppling: SSL-kontex ej uppsatt" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:464 #, c-format msgid "could not initialize SSL connection: %s" msgstr "kunde inte initiera SSL-uppkoppling: %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:472 #, c-format msgid "could not set SSL socket: %s" msgstr "kunde inte sätta SSL-uttag (socket): %s" -#: libpq/be-secure-openssl.c:502 +#: libpq/be-secure-openssl.c:528 #, c-format msgid "could not accept SSL connection: %m" msgstr "kunde inte acceptera SSL-uppkoppling: %m" -#: libpq/be-secure-openssl.c:506 libpq/be-secure-openssl.c:561 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "kunde inte starta SSL-anslutning: hittade EOF" -#: libpq/be-secure-openssl.c:545 +#: libpq/be-secure-openssl.c:573 #, c-format msgid "could not accept SSL connection: %s" msgstr "kunde inte acceptera SSL-uppkoppling: %s" -#: libpq/be-secure-openssl.c:549 +#: 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 "Detta kan tyda på att servern inte stöder någon SSL-protokolversion mellan %s och %s." -#: libpq/be-secure-openssl.c:566 libpq/be-secure-openssl.c:755 -#: libpq/be-secure-openssl.c:819 +#: 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 "okänd SSL-felkod: %d" -#: libpq/be-secure-openssl.c:612 +#: libpq/be-secure-openssl.c:622 +#, c-format +msgid "received SSL connection request with unexpected ALPN protocol" +msgstr "tog emot anslutningsförfrågan för SSL med oväntat ALPN-protokoll" + +#: libpq/be-secure-openssl.c:666 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL-certifikatets \"comman name\" innehåller null-värden" -#: libpq/be-secure-openssl.c:658 +#: libpq/be-secure-openssl.c:712 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "SSL-certifikatets utskiljande namn innehåller null-värden" -#: libpq/be-secure-openssl.c:744 libpq/be-secure-openssl.c:803 +#: libpq/be-secure-openssl.c:798 libpq/be-secure-openssl.c:863 #, c-format msgid "SSL error: %s" msgstr "SSL-fel: %s" -#: libpq/be-secure-openssl.c:985 +#: libpq/be-secure-openssl.c:1038 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "kunde inte öppna DH-parameterfil \"%s\": %m" -#: libpq/be-secure-openssl.c:997 +#: libpq/be-secure-openssl.c:1050 #, c-format msgid "could not load DH parameters file: %s" msgstr "kunde inte ladda DH-parameterfil: %s" -#: libpq/be-secure-openssl.c:1007 +#: libpq/be-secure-openssl.c:1060 #, c-format msgid "invalid DH parameters: %s" msgstr "ogiltiga DH-parametrar: %s" -#: libpq/be-secure-openssl.c:1016 +#: libpq/be-secure-openssl.c:1069 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "ogiltiga DH-parametrar: p är inte ett primtal" -#: libpq/be-secure-openssl.c:1025 +#: libpq/be-secure-openssl.c:1078 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "ogiltiga DH-parametrar: varken lämplig generator eller säkert primtal" -#: libpq/be-secure-openssl.c:1161 +#: libpq/be-secure-openssl.c:1214 #, c-format msgid "Client certificate verification failed at depth %d: %s." msgstr "Klientcertifikat-autentisering misslyckades vid djupet %d: %s." -#: libpq/be-secure-openssl.c:1198 +#: libpq/be-secure-openssl.c:1251 #, c-format msgid "Failed certificate data (unverified): subject \"%s\", serial number %s, issuer \"%s\"." msgstr "Felaktig certifikatdata (ej verifierad): ämne \"%s\", serienummer %s, utställare \"%s\"." -#: libpq/be-secure-openssl.c:1199 +#: libpq/be-secure-openssl.c:1252 msgid "unknown" msgstr "okänd" -#: libpq/be-secure-openssl.c:1290 +#: libpq/be-secure-openssl.c:1389 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: kunde inte ladda DH-parametrar" -#: libpq/be-secure-openssl.c:1298 +#: libpq/be-secure-openssl.c:1397 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: kunde inte sätta DH-parametrar: %s" -#: libpq/be-secure-openssl.c:1325 +#: libpq/be-secure-openssl.c:1424 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: okänt kurvnamn: %s" -#: libpq/be-secure-openssl.c:1334 +#: libpq/be-secure-openssl.c:1433 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: kunde inte skapa nyckel" -#: libpq/be-secure-openssl.c:1362 +#: libpq/be-secure-openssl.c:1461 msgid "no SSL error reported" msgstr "inget SSL-fel rapporterat" -#: libpq/be-secure-openssl.c:1366 +#: libpq/be-secure-openssl.c:1479 #, c-format msgid "SSL error code %lu" msgstr "SSL-felkod %lu" -#: libpq/be-secure-openssl.c:1525 +#: libpq/be-secure-openssl.c:1636 #, c-format msgid "could not create BIO" msgstr "kunde inte skapa BIO" -#: libpq/be-secure-openssl.c:1535 +#: libpq/be-secure-openssl.c:1646 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "kunde inte hämta NID för ASN1_OBJECT-objekt" -#: libpq/be-secure-openssl.c:1543 +#: libpq/be-secure-openssl.c:1654 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "kunde inte konvertera NID %d till en ASN1_OBJECT-struktur" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 -#, c-format -msgid "terminating connection due to unexpected postmaster exit" -msgstr "avslutar anslutning på grund av att postmaster stängde oväntat ner" - -#: libpq/crypt.c:49 +#: libpq/crypt.c:48 #, c-format msgid "Role \"%s\" does not exist." msgstr "Rollen \"%s\" finns inte." -#: libpq/crypt.c:59 +#: libpq/crypt.c:58 #, c-format msgid "User \"%s\" has no password assigned." msgstr "Användaren \"%s\" har inget lösenord satt." -#: libpq/crypt.c:77 +#: libpq/crypt.c:76 #, c-format msgid "User \"%s\" has an expired password." msgstr "Användaren \"%s\" har ett utgånget lösenord." -#: libpq/crypt.c:183 +#: libpq/crypt.c:182 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "Användaren \"%s\" har ett lösenord som inte kan användas med MD5-autentisering." -#: libpq/crypt.c:204 libpq/crypt.c:246 libpq/crypt.c:266 +#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 #, c-format msgid "Password does not match for user \"%s\"." msgstr "Lösenordet matchar inte för användare \"%s\"." -#: libpq/crypt.c:285 +#: libpq/crypt.c:284 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "Lösenordet för användare \"%s\" är på ett okänt format." -#: libpq/hba.c:332 +#: libpq/hba.c:327 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "ogiltigt reguljärt uttryck \"%s\": %s" -#: libpq/hba.c:334 libpq/hba.c:666 libpq/hba.c:1250 libpq/hba.c:1270 -#: libpq/hba.c:1293 libpq/hba.c:1306 libpq/hba.c:1359 libpq/hba.c:1387 -#: libpq/hba.c:1395 libpq/hba.c:1407 libpq/hba.c:1428 libpq/hba.c:1441 -#: libpq/hba.c:1466 libpq/hba.c:1493 libpq/hba.c:1505 libpq/hba.c:1564 -#: libpq/hba.c:1584 libpq/hba.c:1598 libpq/hba.c:1618 libpq/hba.c:1629 -#: libpq/hba.c:1644 libpq/hba.c:1663 libpq/hba.c:1679 libpq/hba.c:1691 -#: libpq/hba.c:1728 libpq/hba.c:1769 libpq/hba.c:1782 libpq/hba.c:1804 -#: libpq/hba.c:1816 libpq/hba.c:1834 libpq/hba.c:1884 libpq/hba.c:1928 -#: libpq/hba.c:1939 libpq/hba.c:1955 libpq/hba.c:1972 libpq/hba.c:1983 -#: libpq/hba.c:2002 libpq/hba.c:2018 libpq/hba.c:2034 libpq/hba.c:2093 -#: libpq/hba.c:2110 libpq/hba.c:2123 libpq/hba.c:2135 libpq/hba.c:2154 -#: libpq/hba.c:2240 libpq/hba.c:2258 libpq/hba.c:2352 libpq/hba.c:2371 -#: libpq/hba.c:2400 libpq/hba.c:2413 libpq/hba.c:2436 libpq/hba.c:2458 -#: libpq/hba.c:2472 tsearch/ts_locale.c:243 +#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 +#: libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 +#: libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 +#: libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 +#: libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 +#: libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 +#: libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 libpq/hba.c:1799 +#: libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 +#: libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 +#: libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 +#: libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 +#: libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 +#: libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 +#: tsearch/ts_locale.c:241 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "rad %d i konfigurationsfil \"%s\"" -#: libpq/hba.c:462 +#: libpq/hba.c:457 #, c-format msgid "skipping missing authentication file \"%s\"" msgstr "hoppar över saknad autentiseringsfil \"%s\"" -#: libpq/hba.c:614 +#: libpq/hba.c:609 #, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" msgstr "kunde inte öppna filen \"%s\": maximalt nästlingsdjup överskridet" -#: libpq/hba.c:1221 +#: libpq/hba.c:1216 #, c-format msgid "error enumerating network interfaces: %m" msgstr "fel vid uppräkning av nätverksinterface: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1248 +#: libpq/hba.c:1243 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "autentiseringsflagga \"%s\" är bara giltig för autentiseringsmetoder %s" -#: libpq/hba.c:1268 +#: libpq/hba.c:1263 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "autentiseringsmetod \"%s\" kräver att argumentet \"%s\" är satt" -#: libpq/hba.c:1292 +#: libpq/hba.c:1287 #, c-format msgid "missing entry at end of line" msgstr "saknar post vid slutet av raden" -#: libpq/hba.c:1305 +#: libpq/hba.c:1300 #, c-format msgid "multiple values in ident field" msgstr "multipla värden i ident-fält" -#: libpq/hba.c:1357 +#: libpq/hba.c:1352 #, c-format msgid "multiple values specified for connection type" msgstr "multipla värden angivna för anslutningstyp" -#: libpq/hba.c:1358 +#: libpq/hba.c:1353 #, c-format msgid "Specify exactly one connection type per line." msgstr "Ange exakt en anslutningstyp per rad." -#: libpq/hba.c:1385 +#: libpq/hba.c:1380 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "hostssl-post kan inte matcha då SSL är avslaget" -#: libpq/hba.c:1386 +#: libpq/hba.c:1381 #, c-format -msgid "Set ssl = on in postgresql.conf." -msgstr "Sätt ssl = on i postgresql.conf." +msgid "Set \"ssl = on\" in postgresql.conf." +msgstr "Sätt \"ssl = on\" i postgresql.conf." -#: libpq/hba.c:1394 +#: libpq/hba.c:1389 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "hostssl-post kan inte matcha då SSL inte stöds i detta bygge" -#: libpq/hba.c:1406 +#: libpq/hba.c:1401 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "hostgssenc-post kan inte matcha då GSSAPI inte stöds i detta bygge" -#: libpq/hba.c:1426 +#: libpq/hba.c:1421 #, c-format msgid "invalid connection type \"%s\"" msgstr "ogiltig anslutningstyp \"%s\"" -#: libpq/hba.c:1440 +#: libpq/hba.c:1435 #, c-format msgid "end-of-line before database specification" msgstr "slut-på-rad innan databasspecifikation" -#: libpq/hba.c:1465 +#: libpq/hba.c:1460 #, c-format msgid "end-of-line before role specification" msgstr "slut-på-rad innan rollspecifikation" -#: libpq/hba.c:1492 +#: libpq/hba.c:1487 #, c-format msgid "end-of-line before IP address specification" msgstr "slut-på-rad före IP-adressangivelse" -#: libpq/hba.c:1503 +#: libpq/hba.c:1498 #, c-format msgid "multiple values specified for host address" msgstr "multipla värden angivna för värdnamn" -#: libpq/hba.c:1504 +#: libpq/hba.c:1499 #, c-format msgid "Specify one address range per line." msgstr "Ange ett adressintervall per rad." -#: libpq/hba.c:1562 +#: libpq/hba.c:1557 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "ogiltig IP-adress \"%s\": %s" -#: libpq/hba.c:1582 +#: libpq/hba.c:1577 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "får inte ange både värdnamn och CIDR-mask: \"%s\"" -#: libpq/hba.c:1596 +#: libpq/hba.c:1591 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "ogiltig CIDR-mask i adress \"%s\"" -#: libpq/hba.c:1616 +#: libpq/hba.c:1611 #, c-format msgid "end-of-line before netmask specification" msgstr "slut-på-fil innan nätmask-angivelse" -#: libpq/hba.c:1617 +#: libpq/hba.c:1612 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Ange adressintervall på CIDR-format eller ange en separat nätmask." -#: libpq/hba.c:1628 +#: libpq/hba.c:1623 #, c-format msgid "multiple values specified for netmask" msgstr "multipla värden angivna för nätmask" -#: libpq/hba.c:1642 +#: libpq/hba.c:1637 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "ogiltig IP-mask \"%s\": %s" -#: libpq/hba.c:1662 +#: libpq/hba.c:1657 #, c-format msgid "IP address and mask do not match" msgstr "IP-adress och mask matchar inte varandra" -#: libpq/hba.c:1678 +#: libpq/hba.c:1673 #, c-format msgid "end-of-line before authentication method" msgstr "slut-på-rad innan autentiseringsmetod" -#: libpq/hba.c:1689 +#: libpq/hba.c:1684 #, c-format msgid "multiple values specified for authentication type" msgstr "multipla värden angivna för autentiseringstyp" -#: libpq/hba.c:1690 +#: libpq/hba.c:1685 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Ange exakt en autentiseringstyp per rad." -#: libpq/hba.c:1767 +#: libpq/hba.c:1750 #, c-format msgid "invalid authentication method \"%s\"" msgstr "ogiltig autentiseringsmetod \"%s\"" -#: libpq/hba.c:1780 +#: libpq/hba.c:1763 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "ogiltig autentiseringsmetod \"%s\": stöds inte av detta bygge" -#: libpq/hba.c:1803 +#: libpq/hba.c:1786 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "gssapi-autentisering stöds ej på lokala uttag (socket)" -#: libpq/hba.c:1815 +#: libpq/hba.c:1798 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "peer-autentisering stöds bara på logala uttag (socket)" -#: libpq/hba.c:1833 +#: libpq/hba.c:1816 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "cert-autentisering stöds bara för hostssl-anslutningar" -#: libpq/hba.c:1883 +#: libpq/hba.c:1866 #, c-format msgid "authentication option not in name=value format: %s" msgstr "autentiseringsflagga et på formatet namn=värde: %s" -#: libpq/hba.c:1927 +#: libpq/hba.c:1910 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "kan inte använda ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter eller ldapurl tillsammans med ldapprefix" -#: libpq/hba.c:1938 +#: libpq/hba.c:1921 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "autentiseringsmetoden \"ldap\" kräver att argumenten \"ldapbasedn\", \"ldapprefix\" eller \"ldapsuffix\" är satta" -#: libpq/hba.c:1954 +#: libpq/hba.c:1937 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "kan inte använda ldapsearchattribute tillsammans med ldapsearchfilter" -#: libpq/hba.c:1971 +#: libpq/hba.c:1954 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "listan med RADIUS-servrar kan inte vara tom" -#: libpq/hba.c:1982 +#: libpq/hba.c:1965 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "listan med RADIUS-hemligheter kan inte vara tom" -#: libpq/hba.c:1999 +#: libpq/hba.c:1982 #, c-format msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "antalet RADIUS-hemligheter (%d) måste vara 1 eller samma som antalet RADIUS-servrar (%d)" -#: libpq/hba.c:2015 +#: libpq/hba.c:1998 #, c-format msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "antalet RADIUS-portar (%d) måste vara 1 eller samma som antalet RADIUS-servrar (%d)" -#: libpq/hba.c:2031 +#: libpq/hba.c:2014 #, c-format msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "antalet RADIUS-identifierare (%d) måste vara 1 eller samma som antalet RADIUS-servrar (%d)" -#: libpq/hba.c:2083 +#: libpq/hba.c:2066 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi och cert" -#: libpq/hba.c:2092 +#: libpq/hba.c:2075 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert kan bara konfigureras för \"hostssl\"-rader" -#: libpq/hba.c:2109 +#: libpq/hba.c:2092 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "clientcert tillåter bara \"verify-full\" när man använder \"cert\"-autentisering" -#: libpq/hba.c:2122 +#: libpq/hba.c:2105 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "ogiltigt värde för clientcert: \"%s\"" -#: libpq/hba.c:2134 +#: libpq/hba.c:2117 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname kan bara konfigureras för \"hostssl\"-rader" -#: libpq/hba.c:2153 +#: libpq/hba.c:2136 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "ogiltigt värde för clientname: \"%s\"" -#: libpq/hba.c:2186 +#: libpq/hba.c:2169 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "kunde inte parsa LDAP-URL \"%s\": %s" -#: libpq/hba.c:2197 +#: libpq/hba.c:2180 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "ej stöd för LDAP-URL-schema: %s" -#: libpq/hba.c:2221 +#: libpq/hba.c:2204 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "LDAP-URL:er stöds inte på denna platform" -#: libpq/hba.c:2239 +#: libpq/hba.c:2222 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "ogiltigt ldap-schema-värde: \"%s\"" -#: libpq/hba.c:2257 +#: libpq/hba.c:2240 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "ogiltigt LDAP-portnummer \"%s\"" -#: libpq/hba.c:2303 libpq/hba.c:2310 +#: libpq/hba.c:2286 libpq/hba.c:2293 msgid "gssapi and sspi" msgstr "gssapi och sspi" -#: libpq/hba.c:2319 libpq/hba.c:2328 +#: libpq/hba.c:2302 libpq/hba.c:2311 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2350 +#: libpq/hba.c:2333 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "kunde inte parsa RADIUS-serverlista \"%s\"" -#: libpq/hba.c:2398 +#: libpq/hba.c:2381 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "kunde inte parsa RADIUS-portlista \"%s\"" -#: libpq/hba.c:2412 +#: libpq/hba.c:2395 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "ogiltigt RADIUS-portnummer: \"%s\"" -#: libpq/hba.c:2434 +#: libpq/hba.c:2417 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "kunde inte parsa RADIUS-hemlighetlista: \"%s\"" -#: libpq/hba.c:2456 +#: libpq/hba.c:2439 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "kunde inte parsa RADIUS-identifierarlista: \"%s\"" -#: libpq/hba.c:2470 +#: libpq/hba.c:2453 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "okänd autentiseringsflaggnamn: \"%s\"" -#: libpq/hba.c:2662 +#: libpq/hba.c:2645 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "konfigurationsfil \"%s\" innehåller inga poster" -#: libpq/hba.c:2815 +#: libpq/hba.c:2798 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "matchning av reguljärt uttryck för \"%s\" misslyckades: %s" -#: libpq/hba.c:2839 +#: libpq/hba.c:2822 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "reguljärt uttryck \"%s\" har inga deluttryck som krävs för bakåtreferens i \"%s\"" -#: libpq/hba.c:2942 +#: libpq/hba.c:2925 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "givet användarnamn (%s) och autentiserat användarnamn (%s) matchar inte" -#: libpq/hba.c:2962 +#: libpq/hba.c:2945 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "ingen träff i användarmappning \"%s\" för användare \"%s\" autentiserad som \"%s\"" -#: libpq/pqcomm.c:200 +#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 +#: libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 +#: libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 +#: libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "%s(%s) misslyckades: %m" + +#: libpq/pqcomm.c:296 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "kunde inte sätta uttag (socket) till ickeblockerande läge: %m" -#: libpq/pqcomm.c:361 +#: libpq/pqcomm.c:456 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Sökväg till unixdomänuttag \"%s\" är för lång (maximalt %d byte)" -#: libpq/pqcomm.c:381 +#: libpq/pqcomm.c:476 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "kunde inte översätta värdnamn \"%s\", service \"%s\" till adress: %s" -#: libpq/pqcomm.c:385 +#: libpq/pqcomm.c:480 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "kunde inte översätta service \"%s\" till adress: %s" -#: libpq/pqcomm.c:412 +#: libpq/pqcomm.c:502 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "kunde inte binda till alla efterfrågade adresser: MAXLISTEN (%d) överskriden" -#: libpq/pqcomm.c:421 +#: libpq/pqcomm.c:511 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:424 +#: libpq/pqcomm.c:514 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:517 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:431 +#: libpq/pqcomm.c:521 #, c-format msgid "unrecognized address family %d" msgstr "ej igenkänd adressfamilj %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:455 +#: libpq/pqcomm.c:545 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "kunde inte skapa %s-uttag för adress \"%s\": %m" #. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:481 libpq/pqcomm.c:499 +#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "%s(%s) misslyckades för %s-adress \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:522 +#: libpq/pqcomm.c:615 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "kunde inte binda %s-adress \"%s\": %m" -#: libpq/pqcomm.c:526 +#: libpq/pqcomm.c:619 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "Kör en annan postmaster redan på port %d?" -#: libpq/pqcomm.c:528 +#: libpq/pqcomm.c:621 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "Kör en annan postmaster redan på port %d? Om inte, vänta några sekunder och försök igen." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:557 +#: libpq/pqcomm.c:650 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "kunde inte lyssna på %s-adress \"%s\": %m" -#: libpq/pqcomm.c:565 +#: libpq/pqcomm.c:658 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "lyssnar på Unix-uttag (socket) \"%s\"" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:570 +#: libpq/pqcomm.c:663 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "lyssnar på %s-adress \"%s\", port %d" -#: libpq/pqcomm.c:659 +#: libpq/pqcomm.c:753 #, c-format msgid "group \"%s\" does not exist" msgstr "gruppen \"%s\" existerar inte" -#: libpq/pqcomm.c:669 +#: libpq/pqcomm.c:763 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "kunde inte sätta gruppen på filen \"%s\": %m" -#: libpq/pqcomm.c:680 +#: libpq/pqcomm.c:774 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "kunde inte sätta rättigheter på filen \"%s\": %m" -#: libpq/pqcomm.c:708 +#: libpq/pqcomm.c:803 #, c-format msgid "could not accept new connection: %m" msgstr "kunde inte acceptera ny uppkoppling: %m" -#: libpq/pqcomm.c:748 libpq/pqcomm.c:757 libpq/pqcomm.c:789 libpq/pqcomm.c:799 -#: libpq/pqcomm.c:1624 libpq/pqcomm.c:1669 libpq/pqcomm.c:1709 -#: libpq/pqcomm.c:1753 libpq/pqcomm.c:1792 libpq/pqcomm.c:1831 -#: libpq/pqcomm.c:1867 libpq/pqcomm.c:1906 -#, c-format -msgid "%s(%s) failed: %m" -msgstr "%s(%s) misslyckades: %m" - -#: libpq/pqcomm.c:903 +#: libpq/pqcomm.c:885 #, c-format msgid "there is no client connection" msgstr "det finns ingen klientanslutning" -#: libpq/pqcomm.c:954 libpq/pqcomm.c:1050 +#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 #, c-format msgid "could not receive data from client: %m" msgstr "kunde inte ta emot data från klient: %m" -#: libpq/pqcomm.c:1155 tcop/postgres.c:4405 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "stänger anslutning då protokollsynkroniseringen tappades" -#: libpq/pqcomm.c:1221 +#: libpq/pqcomm.c:1215 #, c-format msgid "unexpected EOF within message length word" msgstr "oväntat EOF inom meddelandelängdord" -#: libpq/pqcomm.c:1231 +#: libpq/pqcomm.c:1225 #, c-format msgid "invalid message length" msgstr "ogiltig meddelandelängd" -#: libpq/pqcomm.c:1253 libpq/pqcomm.c:1266 +#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 #, c-format msgid "incomplete message from client" msgstr "inkomplett meddelande från klient" -#: libpq/pqcomm.c:1377 +#: libpq/pqcomm.c:1401 #, c-format msgid "could not send data to client: %m" msgstr "kunde inte skicka data till klient: %m" -#: libpq/pqcomm.c:1592 +#: libpq/pqcomm.c:1616 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s) misslyckades: felkod %d" -#: libpq/pqcomm.c:1681 +#: libpq/pqcomm.c:1705 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "sätta idle-tid på keepalive stöds inte" -#: libpq/pqcomm.c:1765 libpq/pqcomm.c:1840 libpq/pqcomm.c:1915 +#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s) stöds inte" -#: libpq/pqformat.c:407 +#: libpq/pqformat.c:404 #, c-format msgid "no data left in message" msgstr "ingen data kvar i meddelandet" -#: libpq/pqformat.c:518 libpq/pqformat.c:536 libpq/pqformat.c:557 -#: utils/adt/array_userfuncs.c:799 utils/adt/arrayfuncs.c:1506 -#: utils/adt/rowtypes.c:615 +#: 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/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "otillräckligt med data kvar i meddelande" -#: libpq/pqformat.c:598 libpq/pqformat.c:627 +#: libpq/pqformat.c:595 libpq/pqformat.c:624 #, c-format msgid "invalid string in message" msgstr "ogiltig sträng i meddelande" -#: libpq/pqformat.c:643 +#: libpq/pqformat.c:640 #, c-format msgid "invalid message format" msgstr "ogiltigt meddelandeformat" -#: main/main.c:235 +#: main/main.c:236 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup misslyckades: %d\n" -#: main/main.c:329 +#: main/main.c:324 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -16047,7 +16504,7 @@ msgstr "" "%s är PostgreSQL-servern.\n" "\n" -#: main/main.c:330 +#: main/main.c:325 #, c-format msgid "" "Usage:\n" @@ -16058,107 +16515,107 @@ msgstr "" " %s [FLAGGA]...\n" "\n" -#: main/main.c:331 +#: main/main.c:326 #, c-format msgid "Options:\n" msgstr "Flaggor:\n" -#: main/main.c:332 +#: main/main.c:327 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS antalet delade buffertar\n" -#: main/main.c:333 +#: main/main.c:328 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAMN=VÄRDE sätt körparameter\n" -#: main/main.c:334 +#: main/main.c:329 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAMN skriv ut värde av runtime-parameter, avsluta sen\n" -#: main/main.c:335 +#: main/main.c:330 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 debug-nivå\n" -#: main/main.c:336 +#: main/main.c:331 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR databaskatalog\n" -#: main/main.c:337 +#: main/main.c:332 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e använd europeiskt datumformat för indata (DMY)\n" -#: main/main.c:338 +#: main/main.c:333 #, c-format msgid " -F turn fsync off\n" msgstr " -F slå av fsync\n" -#: main/main.c:339 +#: main/main.c:334 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h VÄRDNAMN värdnamn eller IP-adress att lyssna på\n" -#: main/main.c:340 +#: main/main.c:335 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr " -i tillåt TCP/IP-uppkopplingar (obsolet)\n" -#: main/main.c:341 +#: main/main.c:336 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k KATALOG plats för unix-domän-uttag (socket)\n" -#: main/main.c:343 +#: main/main.c:338 #, c-format msgid " -l enable SSL connections\n" msgstr " -l tillåt SSL-anslutningar\n" -#: main/main.c:345 +#: main/main.c:340 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-ANSLUT maximalt antal tillåtna anslutningar\n" -#: main/main.c:346 +#: main/main.c:341 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT portnummer att lyssna på\n" -#: main/main.c:347 +#: main/main.c:342 #, c-format msgid " -s show statistics after each query\n" msgstr " -s visa statistik efter varje fråga\n" -#: main/main.c:348 +#: main/main.c:343 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM ställ in mängden minne för sorteringar (i kB)\n" -#: main/main.c:349 +#: main/main.c:344 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: main/main.c:350 +#: main/main.c:345 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAMN=VÄRDE sätt parameter (som används under körning)\n" -#: main/main.c:351 +#: main/main.c:346 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config beskriv konfigurationsparametrar, avsluta sedan\n" -#: main/main.c:352 +#: main/main.c:347 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: main/main.c:354 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -16167,37 +16624,37 @@ msgstr "" "\n" "Utvecklarflaggor:\n" -#: main/main.c:355 +#: 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 förbjud användning av vissa plan-typer\n" -#: main/main.c:356 +#: main/main.c:351 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O tillåt strukturändring av systemtabeller\n" -#: main/main.c:357 +#: main/main.c:352 #, c-format msgid " -P disable system indexes\n" msgstr " -P stäng av systemindex\n" -#: main/main.c:358 +#: main/main.c:353 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex visa tidtagning efter varje fråga\n" -#: main/main.c:359 +#: main/main.c:354 #, c-format msgid " -T send SIGABRT to all backend processes if one dies\n" msgstr " -T skicka SIGABRT till alla serverprocesser om en dör\n" -#: main/main.c:360 +#: main/main.c:355 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NUM vänta NUM sekunder för att tillåta att en debugger kopplas in\n" -#: main/main.c:362 +#: main/main.c:357 #, c-format msgid "" "\n" @@ -16206,37 +16663,37 @@ msgstr "" "\n" "Flaggor för enanvändarläge:\n" -#: main/main.c:363 +#: main/main.c:358 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single väljer enanvändarläge (måste vara första argumentet)\n" -#: main/main.c:364 +#: main/main.c:359 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAMN databasnamn (standard är användarnamnet)\n" -#: main/main.c:365 +#: main/main.c:360 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 överskugga debug-nivå\n" -#: main/main.c:366 +#: main/main.c:361 #, c-format msgid " -E echo statement before execution\n" msgstr " -E skriv ut sats före körning\n" -#: main/main.c:367 +#: main/main.c:362 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j använd inte nyrad som en interaktiv frågeavskiljare\n" -#: main/main.c:368 main/main.c:374 +#: main/main.c:363 main/main.c:369 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILNAMN skicka stdout och stderr till angiven fil\n" -#: main/main.c:370 +#: main/main.c:365 #, c-format msgid "" "\n" @@ -16245,22 +16702,22 @@ msgstr "" "\n" "Flaggor för bootstrap-läge:\n" -#: main/main.c:371 +#: main/main.c:366 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot väljer bootstrap-läge (måste vara första argumentet)\n" -#: main/main.c:372 +#: main/main.c:367 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr " --check väljer kontrolläge (måste vara första argumentet)\n" -#: main/main.c:373 +#: main/main.c:368 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAMN databasnamn (krävs i bootstrap-läge)\n" -#: main/main.c:376 +#: main/main.c:371 #, c-format msgid "" "\n" @@ -16276,12 +16733,12 @@ msgstr "" "\n" "Rapportera buggar till <%s>.\n" -#: main/main.c:380 +#: main/main.c:375 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: main/main.c:391 +#: main/main.c:386 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -16294,12 +16751,12 @@ msgstr "" "ev. säkehetsproblem. Se dokumentationen för mer information om hur man\n" "startar servern på rätt sätt.\n" -#: main/main.c:408 +#: main/main.c:403 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: riktig och effektiv användar-ID måste matcha varandra\n" -#: main/main.c:415 +#: main/main.c:410 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -16324,20 +16781,15 @@ msgstr "utökningsbar nodtyp \"%s\" finns redan" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\" har inte registerats" -#: nodes/makefuncs.c:153 statistics/extended_stats.c:2335 +#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "relationen \"%s\" har ingen composite-typ" -#: nodes/makefuncs.c:879 -#, c-format -msgid "unrecognized JSON encoding: %s" -msgstr "okänd JSON-kodning: %s" - -#: nodes/nodeFuncs.c:116 nodes/nodeFuncs.c:147 parser/parse_coerce.c:2567 -#: parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 -#: parser/parse_expr.c:2049 parser/parse_func.c:710 parser/parse_oper.c:883 -#: utils/fmgr/funcapi.c:661 +#: 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 "kunde inte hitta array-typ för datatyp %s" @@ -16352,931 +16804,936 @@ msgstr "portal \"%s\" med parametrar: %s" msgid "unnamed portal with parameters: %s" msgstr "ej namngiven portal med parametrar: %s" -#: optimizer/path/joinrels.c:973 +#: optimizer/path/joinrels.c:972 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN stöds bara med villkor som är merge-joinbara eller hash-joinbara" -#: optimizer/plan/createplan.c:7111 parser/parse_merge.c:182 -#: parser/parse_merge.c:189 +#: optimizer/plan/createplan.c:7175 parser/parse_merge.c:203 +#: rewrite/rewriteHandler.c:1680 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "kan inte utföra MERGE på relation \"%s\"" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1408 +#: optimizer/plan/initsplan.c:1407 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s kan inte appliceras på den nullbara sidan av en outer join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1361 parser/analyze.c:1761 parser/analyze.c:2018 -#: parser/analyze.c:3231 +#: optimizer/plan/planner.c:1380 parser/analyze.c:1771 parser/analyze.c:2029 +#: parser/analyze.c:3247 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s tillåts inte med UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2082 optimizer/plan/planner.c:4040 +#: optimizer/plan/planner.c:2121 optimizer/plan/planner.c:4108 #, c-format msgid "could not implement GROUP BY" msgstr "kunde inte implementera GROUP BY" -#: optimizer/plan/planner.c:2083 optimizer/plan/planner.c:4041 -#: optimizer/plan/planner.c:4681 optimizer/prep/prepunion.c:1053 +#: 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 "Några av datatyperna stöder bara hash:ning medan andra bara stöder sortering." -#: optimizer/plan/planner.c:4680 +#: optimizer/plan/planner.c:4789 #, c-format msgid "could not implement DISTINCT" msgstr "kunde inte implementera DISTINCT" -#: optimizer/plan/planner.c:6019 +#: optimizer/plan/planner.c:6134 #, c-format msgid "could not implement window PARTITION BY" msgstr "kunde inte implementera fönster-PARTITION BY" -#: optimizer/plan/planner.c:6020 +#: optimizer/plan/planner.c:6135 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Fönsterpartitioneringskolumner måsta ha en sorterbar datatyp." -#: optimizer/plan/planner.c:6024 +#: optimizer/plan/planner.c:6139 #, c-format msgid "could not implement window ORDER BY" msgstr "kunde inte implementera fönster-ORDER BY" -#: optimizer/plan/planner.c:6025 +#: optimizer/plan/planner.c:6140 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fönsterordningskolumner måste ha en sorterbar datatyp." -#: optimizer/prep/prepunion.c:516 +#: optimizer/prep/prepunion.c:467 #, c-format msgid "could not implement recursive UNION" msgstr "kunde inte implementera rekursiv UNION" -#: optimizer/prep/prepunion.c:517 +#: optimizer/prep/prepunion.c:468 #, c-format msgid "All column datatypes must be hashable." msgstr "Alla kolumndatatyper måsta vara hash-bara." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1052 +#: optimizer/prep/prepunion.c:1319 #, c-format msgid "could not implement %s" msgstr "kunde inte implementera %s" -#: optimizer/util/clauses.c:4856 +#: optimizer/util/clauses.c:4963 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "SQL-funktion \"%s\" vid inline:ing" -#: optimizer/util/plancat.c:154 +#: optimizer/util/plancat.c:153 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "kan inte accessa temporära eller ologgade relationer under återställning" -#: optimizer/util/plancat.c:726 +#: optimizer/util/plancat.c:768 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "inferens av unikt index för hel rad stöds inte" -#: optimizer/util/plancat.c:743 +#: optimizer/util/plancat.c:785 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "villkor för ON CONFLICT-klausul har inget associerat index" -#: optimizer/util/plancat.c:793 +#: optimizer/util/plancat.c:835 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE stöds inte med uteslutningsvillkor" -#: optimizer/util/plancat.c:898 +#: optimizer/util/plancat.c:945 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "finns inget unik eller uteslutningsvillkor som matchar ON CONFLICT-specifikationen" -#: parser/analyze.c:826 parser/analyze.c:1540 +#: parser/analyze.c:824 parser/analyze.c:1550 #, c-format msgid "VALUES lists must all be the same length" msgstr "VÄRDE-listor måste alla ha samma längd" -#: parser/analyze.c:1028 +#: parser/analyze.c:1027 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT har fler uttryck än målkolumner" -#: parser/analyze.c:1046 +#: parser/analyze.c:1045 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT har fler målkolumner än uttryck" -#: parser/analyze.c:1050 +#: parser/analyze.c:1049 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "Imatningskällan är ett raduttryck som innehåller samma antal kolumner som INSERT:en förväntade sig. Glömde du använda extra parenteser?" -#: parser/analyze.c:1347 parser/analyze.c:1734 +#: parser/analyze.c:1357 parser/analyze.c:1744 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO tillåts inte här" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1663 parser/analyze.c:3463 +#: parser/analyze.c:1673 parser/analyze.c:3479 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s kan inte appliceras på VÄRDEN" -#: parser/analyze.c:1900 +#: parser/analyze.c:1911 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "ogiltig UNION/INTERSECT/EXCEPT ORDER BY-klausul" -#: parser/analyze.c:1901 +#: parser/analyze.c:1912 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Bara kolumnnamn i resultatet kan användas, inte uttryck eller funktioner." -#: parser/analyze.c:1902 +#: parser/analyze.c:1913 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Lägg till uttrycket/funktionen till varje SELECT eller flytta UNION:en in i en FROM-klausul." -#: parser/analyze.c:2008 +#: parser/analyze.c:2019 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO tillåts bara i den första SELECT i UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:2080 +#: parser/analyze.c:2091 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "UNION/INTERSECT/EXCEPT-medlemssats kan inte referera till andra relationer på samma frågenivå" -#: parser/analyze.c:2167 +#: parser/analyze.c:2178 #, c-format msgid "each %s query must have the same number of columns" msgstr "varje %s-fråga måste ha samma antal kolumner" -#: parser/analyze.c:2573 +#: parser/analyze.c:2535 +#, c-format +msgid "SET target columns cannot be qualified with the relation name." +msgstr "målkolumner för SET kan inte kvalifiiceras med ett relationsnamn." + +#: parser/analyze.c:2589 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING måste ha minst en kolumn" -#: parser/analyze.c:2676 +#: parser/analyze.c:2692 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" msgstr[0] "tilldelningskälla returnerade %d kolumn" msgstr[1] "tilldelningskälla returnerade %d kolumner" -#: parser/analyze.c:2737 +#: parser/analyze.c:2753 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "variabeln \"%s\" har typ %s men uttrycket har typ %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2862 parser/analyze.c:2870 +#: parser/analyze.c:2878 parser/analyze.c:2886 #, c-format msgid "cannot specify both %s and %s" msgstr "kan inte ange både %s och %s" -#: parser/analyze.c:2890 +#: parser/analyze.c:2906 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR får inte innehålla datamodifierande satser i WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2898 +#: parser/analyze.c:2914 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s stöds inte" -#: parser/analyze.c:2901 +#: parser/analyze.c:2917 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Hållbara markörer måste vara READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2909 +#: parser/analyze.c:2925 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s stöds inte" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2920 +#: parser/analyze.c:2936 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s är inte giltig" -#: parser/analyze.c:2923 +#: parser/analyze.c:2939 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Okänsliga markörer måste vara READ ONLY." -#: parser/analyze.c:3017 +#: parser/analyze.c:3033 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "materialiserade vyer får inte innehålla datamodifierande satser i WITH" -#: parser/analyze.c:3027 +#: parser/analyze.c:3043 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "materialiserade vyer får inte använda temporära tabeller eller vyer" -#: parser/analyze.c:3037 +#: parser/analyze.c:3053 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "materialiserade vyer kan inte defineras med bundna parametrar" -#: parser/analyze.c:3049 +#: parser/analyze.c:3065 #, c-format msgid "materialized views cannot be unlogged" msgstr "materialiserad vyer kan inte vara ologgade" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3238 +#: parser/analyze.c:3254 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s tillåts inte med DISTINCT-klausul" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3245 +#: parser/analyze.c:3261 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s tillåts inte med GROUP BY-klausul" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3252 +#: parser/analyze.c:3268 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s tillåts inte med HAVING-klausul" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3259 +#: parser/analyze.c:3275 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s tillåts inte med aggregatfunktioner" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3266 +#: parser/analyze.c:3282 #, c-format msgid "%s is not allowed with window functions" msgstr "%s tillåts inte med fönsterfunktioner" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3273 +#: parser/analyze.c:3289 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s tillåts inte med mängdreturnerande funktioner i mållistan" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3372 +#: parser/analyze.c:3388 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s: måste ange okvalificerade relationsnamn" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3436 +#: parser/analyze.c:3452 #, c-format msgid "%s cannot be applied to a join" msgstr "%s kan inte appliceras på en join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3445 +#: parser/analyze.c:3461 #, c-format msgid "%s cannot be applied to a function" msgstr "%s kan inte appliceras på en funktion" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3454 +#: parser/analyze.c:3470 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s kan inte appliceras på tabellfunktion" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3472 +#: parser/analyze.c:3488 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s kan inte appliceras på en WITH-fråga" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3481 +#: parser/analyze.c:3497 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s kan inte appliceras på en namngiven tupellagring" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3501 +#: parser/analyze.c:3517 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "relationen \"%s\" i %s-klausul hittades inte i FROM-klausul" -#: parser/parse_agg.c:221 parser/parse_oper.c:227 +#: parser/parse_agg.c:210 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "kunde inte identifiera en jämförelseoperator för typ %s" -#: parser/parse_agg.c:223 +#: parser/parse_agg.c:212 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Aggregat med DISTINCT måste kunna sortera sina indata." -#: parser/parse_agg.c:258 +#: parser/parse_agg.c:270 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING måste ha färre än 32 argument" -#: parser/parse_agg.c:361 +#: parser/parse_agg.c:373 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "aggregatfunktioner tillåts inte i JOIN-villkor" -#: parser/parse_agg.c:363 +#: parser/parse_agg.c:375 msgid "grouping operations are not allowed in JOIN conditions" msgstr "gruppoperationer tillåts inte i JOIN-villkor" -#: parser/parse_agg.c:375 +#: parser/parse_agg.c:385 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "aggregatfunktioner tillåts inte i FROM-klausul på sin egen frågenivå" -#: parser/parse_agg.c:377 +#: parser/parse_agg.c:387 msgid "grouping operations are not allowed in FROM clause of their own query level" msgstr "gruppoperationer tillåts inte i FROM-klausul på sin egen frågenivå" -#: parser/parse_agg.c:382 +#: parser/parse_agg.c:392 msgid "aggregate functions are not allowed in functions in FROM" msgstr "aggregatfunktioner tillåts inte i funktioner i FROM" -#: parser/parse_agg.c:384 +#: parser/parse_agg.c:394 msgid "grouping operations are not allowed in functions in FROM" msgstr "gruppoperationer tillåts inte i funktioner i FROM" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:402 msgid "aggregate functions are not allowed in policy expressions" msgstr "aggregatfunktioner tillåts inte i policyuttryck" -#: parser/parse_agg.c:394 +#: parser/parse_agg.c:404 msgid "grouping operations are not allowed in policy expressions" msgstr "gruppoperationer tillåts inte i policyuttryck" -#: parser/parse_agg.c:411 +#: parser/parse_agg.c:421 msgid "aggregate functions are not allowed in window RANGE" msgstr "aggregatfunktioner tillåts inte i fönster-RANGE" -#: parser/parse_agg.c:413 +#: parser/parse_agg.c:423 msgid "grouping operations are not allowed in window RANGE" msgstr "grupperingsoperationer tillåts inte i fönster-RANGE" -#: parser/parse_agg.c:418 +#: parser/parse_agg.c:428 msgid "aggregate functions are not allowed in window ROWS" msgstr "aggregatfunktioner tillåts inte i fönster-RADER" -#: parser/parse_agg.c:420 +#: parser/parse_agg.c:430 msgid "grouping operations are not allowed in window ROWS" msgstr "grupperingsfunktioner tillåts inte i fönster-RADER" -#: parser/parse_agg.c:425 +#: parser/parse_agg.c:435 msgid "aggregate functions are not allowed in window GROUPS" msgstr "aggregatfunktioner tillåts inte i fönster-GROUPS" -#: parser/parse_agg.c:427 +#: parser/parse_agg.c:437 msgid "grouping operations are not allowed in window GROUPS" msgstr "grupperingsfunktioner tillåts inte i fönster-GROUPS" -#: parser/parse_agg.c:440 +#: parser/parse_agg.c:450 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "aggregatfunktioner tillåts inte i MERGE WHEN-villkor" -#: parser/parse_agg.c:442 +#: parser/parse_agg.c:452 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "gruppoperationer tillåts inte i MERGE WHEN-villkor" -#: parser/parse_agg.c:468 +#: parser/parse_agg.c:479 msgid "aggregate functions are not allowed in check constraints" msgstr "aggregatfunktioner tillåts inte i check-villkor" -#: parser/parse_agg.c:470 +#: parser/parse_agg.c:481 msgid "grouping operations are not allowed in check constraints" msgstr "gruppoperationer tillåts inte i check-villkor" -#: parser/parse_agg.c:477 +#: parser/parse_agg.c:488 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "aggregatfunktioner tillåts inte i DEFAULT-uttryck" -#: parser/parse_agg.c:479 +#: parser/parse_agg.c:490 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "grupperingsoperationer tillåts inte i DEFAULT-uttryck" -#: parser/parse_agg.c:484 +#: parser/parse_agg.c:495 msgid "aggregate functions are not allowed in index expressions" msgstr "aggregatfunktioner tillåts inte i indexuttryck" -#: parser/parse_agg.c:486 +#: parser/parse_agg.c:497 msgid "grouping operations are not allowed in index expressions" msgstr "gruppoperationer tillåts inte i indexuttryck" -#: parser/parse_agg.c:491 +#: parser/parse_agg.c:502 msgid "aggregate functions are not allowed in index predicates" msgstr "aggregatfunktionsanrop tillåts inte i indexpredikat" -#: parser/parse_agg.c:493 +#: parser/parse_agg.c:504 msgid "grouping operations are not allowed in index predicates" msgstr "gruppoperationer tillåts inte i indexpredikat" -#: parser/parse_agg.c:498 +#: parser/parse_agg.c:509 msgid "aggregate functions are not allowed in statistics expressions" msgstr "aggregatfunktioner tillåts inte i statistikuttryck" -#: parser/parse_agg.c:500 +#: parser/parse_agg.c:511 msgid "grouping operations are not allowed in statistics expressions" msgstr "gruppoperationer tillåts inte i statistikuttryck" -#: parser/parse_agg.c:505 +#: parser/parse_agg.c:516 msgid "aggregate functions are not allowed in transform expressions" msgstr "aggregatfunktioner tillåts inte i transform-uttryck" -#: parser/parse_agg.c:507 +#: parser/parse_agg.c:518 msgid "grouping operations are not allowed in transform expressions" msgstr "gruppoperationer tillåts inte i transforme-uttryck" -#: parser/parse_agg.c:512 +#: parser/parse_agg.c:523 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "aggregatfunktioner tillåts inte i EXECUTE-parametrar" -#: parser/parse_agg.c:514 +#: parser/parse_agg.c:525 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "gruppoperationer tillåts inte i EXECUTE-parametrar" -#: parser/parse_agg.c:519 +#: parser/parse_agg.c:530 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "aggregatfunktioner tillåts inte i WHEN-villkor" -#: parser/parse_agg.c:521 +#: parser/parse_agg.c:532 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "gruppoperationer tillåts inte i WHEN-villkor" -#: parser/parse_agg.c:526 +#: parser/parse_agg.c:537 msgid "aggregate functions are not allowed in partition bound" msgstr "aggregatfunktioner tillåts inte i partitionsgräns" -#: parser/parse_agg.c:528 +#: parser/parse_agg.c:539 msgid "grouping operations are not allowed in partition bound" msgstr "gruppoperationer tillåts inte i partitionsgräns" -#: parser/parse_agg.c:533 +#: parser/parse_agg.c:544 msgid "aggregate functions are not allowed in partition key expressions" msgstr "aggregatfunktioner tillåts inte i partitionsnyckeluttryck" -#: parser/parse_agg.c:535 +#: parser/parse_agg.c:546 msgid "grouping operations are not allowed in partition key expressions" msgstr "gruppoperationer tillåts inte i partitionsnyckeluttryck" -#: parser/parse_agg.c:541 +#: parser/parse_agg.c:552 msgid "aggregate functions are not allowed in column generation expressions" msgstr "aggregatfunktioner tillåts inte i kolumngenereringsuttryck" -#: parser/parse_agg.c:543 +#: parser/parse_agg.c:554 msgid "grouping operations are not allowed in column generation expressions" msgstr "gruppoperationer tillåts inte i kolumngenereringsuttryck" -#: parser/parse_agg.c:549 +#: parser/parse_agg.c:560 msgid "aggregate functions are not allowed in CALL arguments" msgstr "aggregatfunktioner tillåts inte i CALL-argument" -#: parser/parse_agg.c:551 +#: parser/parse_agg.c:562 msgid "grouping operations are not allowed in CALL arguments" msgstr "gruppoperationer tillåts inte i CALL-argument" -#: parser/parse_agg.c:557 +#: parser/parse_agg.c:568 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "aggregatfunktioner tillåts inte i COPY FROM WHERE-villkor" -#: parser/parse_agg.c:559 +#: parser/parse_agg.c:570 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "gruppoperationer tillåts inte i COPY FROM WHERE-villkor" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:586 parser/parse_clause.c:1956 +#: parser/parse_agg.c:597 parser/parse_clause.c:1962 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "aggregatfunktioner tillåts inte i %s" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:589 +#: parser/parse_agg.c:600 #, c-format msgid "grouping operations are not allowed in %s" msgstr "gruppoperationer tillåts inte i %s" -#: parser/parse_agg.c:690 +#: parser/parse_agg.c:701 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "yttre aggregat kan inte innehålla inre variabel i sitt direkta argument" -#: parser/parse_agg.c:768 +#: parser/parse_agg.c:779 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "aggregatfunktionsanrop kan inte innehålla mängdreturnerande funktionsanrop" -#: parser/parse_agg.c:769 parser/parse_expr.c:1700 parser/parse_expr.c:2182 -#: parser/parse_func.c:884 +#: 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 "Du kanske kan flytta den mängdreturnerande funktionen in i en LATERAL FROM-konstruktion." -#: parser/parse_agg.c:774 +#: parser/parse_agg.c:785 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "aggregatfunktionsanrop kan inte innehålla fönsterfunktionanrop" -#: parser/parse_agg.c:853 +#: parser/parse_agg.c:864 msgid "window functions are not allowed in JOIN conditions" msgstr "fönsterfunktioner tillåts inte i JOIN-villkor" -#: parser/parse_agg.c:860 +#: parser/parse_agg.c:871 msgid "window functions are not allowed in functions in FROM" msgstr "fönsterfunktioner tillåts inte i funktioner i FROM" -#: parser/parse_agg.c:866 +#: parser/parse_agg.c:877 msgid "window functions are not allowed in policy expressions" msgstr "fönsterfunktioner tillåts inte i policy-uttryck" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:890 msgid "window functions are not allowed in window definitions" msgstr "fönsterfunktioner tillåts inte i fönsterdefinitioner" -#: parser/parse_agg.c:890 +#: parser/parse_agg.c:901 msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "fönsterfunktioner tillåts inte i MERGE WHEN-villkor" -#: parser/parse_agg.c:914 +#: parser/parse_agg.c:926 msgid "window functions are not allowed in check constraints" msgstr "fönsterfunktioner tillåts inte i check-villkor" -#: parser/parse_agg.c:918 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in DEFAULT expressions" msgstr "fönsterfunktioner tillåts inte i DEFAULT-uttryck" -#: parser/parse_agg.c:921 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in index expressions" msgstr "fönsterfunktioner tillåts inte i indexuttryck" -#: parser/parse_agg.c:924 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in statistics expressions" msgstr "fönsterfunktioner tillåts inte i statistikuttryck" -#: parser/parse_agg.c:927 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in index predicates" msgstr "fönsterfunktioner tillåts inte i indexpredikat" -#: parser/parse_agg.c:930 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in transform expressions" msgstr "fönsterfunktioner tillåts inte i transform-uttrycket" -#: parser/parse_agg.c:933 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in EXECUTE parameters" msgstr "fönsterfunktioner tillåts inte i EXECUTE-parametrar" -#: parser/parse_agg.c:936 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "fönsterfunktioner tillåts inte i WHEN-villkor" -#: parser/parse_agg.c:939 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in partition bound" msgstr "fönsterfunktioner tillåts inte i partitiongräns" -#: parser/parse_agg.c:942 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in partition key expressions" msgstr "fönsterfunktioner tillåts inte i partitionsnyckeluttryck" -#: parser/parse_agg.c:945 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in CALL arguments" msgstr "fönsterfunktioner tillåts inte i CALL-argument" -#: parser/parse_agg.c:948 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "fönsterfunktioner tillåts inte i COPY FROM WHERE-villkor" -#: parser/parse_agg.c:951 +#: parser/parse_agg.c:963 msgid "window functions are not allowed in column generation expressions" msgstr "fönsterfunktioner tillåts inte i kolumngenereringsuttryck" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:974 parser/parse_clause.c:1965 +#: parser/parse_agg.c:986 parser/parse_clause.c:1971 #, c-format msgid "window functions are not allowed in %s" msgstr "fönsterfunktioner tillåts inte i %s" -#: parser/parse_agg.c:1008 parser/parse_clause.c:2798 +#: parser/parse_agg.c:1020 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "fönster \"%s\" finns inte" -#: parser/parse_agg.c:1096 +#: parser/parse_agg.c:1108 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "för många grupperingsmängder (maximalt 4096)" -#: parser/parse_agg.c:1236 +#: parser/parse_agg.c:1248 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "aggregatfunktioner tillåts inte i en rekursiv frågas rekursiva term" -#: parser/parse_agg.c:1429 +#: 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 "kolumn \"%s.%s\" måste stå med i GROUP BY-klausulen eller användas i en aggregatfunktion" -#: parser/parse_agg.c:1432 +#: parser/parse_agg.c:1444 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Direkta argument till en sorterad-mängd-aggregat får bara använda grupperade kolumner." -#: parser/parse_agg.c:1437 +#: parser/parse_agg.c:1449 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "underfråga använder ogrupperad kolumn \"%s.%s\" från yttre fråga" -#: parser/parse_agg.c:1601 +#: parser/parse_agg.c:1613 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "argument till GROUPING måste vare grupputtryck på den tillhörande frågenivån" -#: parser/parse_clause.c:195 +#: parser/parse_clause.c:193 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "relationen \"%s\" kan inte vara målet för en modifierande sats" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2552 +#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "mängdreturnerande funktioner måste vara på toppnivå i FROM" -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:609 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "multipla kolumndefinitionslistor tillåts inte i samma funktion" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:642 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() med multipla funktioner kan inte ha en kolumndefinitionslista" -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:643 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Lägg till en separat kolumndefinitionslista för varje funktion inne i ROWS FROM()." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:649 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() med multipla argument kan inte ha en kolumndefinitionslista" -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:650 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Använd separata UNNEST()-anrop inne i ROWS FROM() och koppla en kolumndefinitionslista till varje." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:657 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY kan inte användas tillsammans med en kolumndefinitionslista" -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:658 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Placera kolumndefinitionslistan inne i ROWS FROM()." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:762 parser/parse_jsontable.c:295 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "bara en FOR ORDINALITY-kolumn tillåts" -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:823 #, c-format msgid "column name \"%s\" is not unique" msgstr "kolumnnamn \"%s\" är inte unikt" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:865 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "namespace-namn \"%s\" är inte unikt" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:875 #, c-format msgid "only one default namespace is allowed" msgstr "bara ett standard-namespace tillåts" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:935 #, c-format msgid "tablesample method %s does not exist" msgstr "tabellsamplingsmetod \"%s\" existerar inte" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:957 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "tabellsamplingsmetod %s kräver %d argument, inte %d" msgstr[1] "tabellsamplingsmetod %s kräver %d argument, inte %d" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:991 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "tabellsamplingsmetod %s stöder inte REPEATABLE" -#: parser/parse_clause.c:1138 +#: parser/parse_clause.c:1144 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "TABLESAMPLE-klausul kan bara appliceras på tabeller och materialiserade vyer" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1331 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "kolumnnamn \"%s\" angivet mer än en gång i USING-klausul" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1346 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "gemensamt kolumnnamn \"%s\" finns mer än en gång i vänstra tabellen" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1355 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "kolumn \"%s\" angiven i USING-klausul finns inte i den vänstra tabellen" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1370 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "gemensamt kolumnnamn \"%s\" finns mer än en gång i högra tabellen" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1379 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "kolumn \"%s\" angiven i USING-klausul finns inte i den högra tabellen" -#: parser/parse_clause.c:1901 +#: parser/parse_clause.c:1907 #, c-format msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "radantal kan inte vara null i FETCH FIRST ... WITH TIES-klausul" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:1932 #, c-format msgid "argument of %s must not contain variables" msgstr "argumentet till %s får inte innehålla variabler" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2091 +#: parser/parse_clause.c:2097 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s \"%s\" är tvetydig" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2119 +#: parser/parse_clause.c:2125 #, c-format msgid "non-integer constant in %s" msgstr "ej heltalskonstant i %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2141 +#: parser/parse_clause.c:2147 #, c-format msgid "%s position %d is not in select list" msgstr "%s-position %d finns inte i select-listan" -#: parser/parse_clause.c:2580 +#: parser/parse_clause.c:2586 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE är begränsad till 12 element" -#: parser/parse_clause.c:2786 +#: parser/parse_clause.c:2792 #, c-format msgid "window \"%s\" is already defined" msgstr "fönster \"%s\" är redan definierad" -#: parser/parse_clause.c:2847 +#: parser/parse_clause.c:2853 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "kan inte övertrumfa PARTITION BY-klausul för fönster \"%s\"" -#: parser/parse_clause.c:2859 +#: parser/parse_clause.c:2865 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "kan inte övertrumfa ORDER BY-klausul för fönster \"%s\"" -#: parser/parse_clause.c:2889 parser/parse_clause.c:2895 +#: parser/parse_clause.c:2895 parser/parse_clause.c:2901 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "kan inte kopiera fönster \"%s\" då det har en fönsterramklausul" -#: parser/parse_clause.c:2897 +#: parser/parse_clause.c:2903 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Ta bort parenteserna i denna OVER-klausul." -#: parser/parse_clause.c:2917 +#: parser/parse_clause.c:2923 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "RANGE med offset PRECEDING/FOLLOWING kräver exakt en ORDER BY-kolumn" -#: parser/parse_clause.c:2940 +#: parser/parse_clause.c:2946 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "GROUPS-läge kräver en ORDER BY-klausul" -#: parser/parse_clause.c:3011 +#: parser/parse_clause.c:3016 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "i ett aggregat med DISTINCT så måste ORDER BY-uttryck finnas i argumentlistan" -#: parser/parse_clause.c:3012 +#: parser/parse_clause.c:3017 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "i SELECT DISTINCT så måste ORDER BY-uttryck finnas i select-listan" -#: parser/parse_clause.c:3044 +#: parser/parse_clause.c:3049 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "ett aggregat med DISTINCT måste ha minst ett argument" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3050 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT måste ha minst en kolumn" -#: parser/parse_clause.c:3111 parser/parse_clause.c:3143 +#: parser/parse_clause.c:3116 parser/parse_clause.c:3148 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "SELECT DISTINCT ON-uttrycken måste matcha de initiala ORDER BY-uttrycken" -#: parser/parse_clause.c:3221 +#: parser/parse_clause.c:3226 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC tillåts inte i ON CONFLICT-klausul" -#: parser/parse_clause.c:3227 +#: parser/parse_clause.c:3232 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST tillåts inte i ON CONFLICT-klausul" -#: parser/parse_clause.c:3306 +#: parser/parse_clause.c:3311 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE kräver inferensangivelse eller villkorsnamn" -#: parser/parse_clause.c:3307 +#: parser/parse_clause.c:3312 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Till exempel, ON CONFLICT (kolumnnamn)." -#: parser/parse_clause.c:3318 +#: parser/parse_clause.c:3323 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT stöds inte för systemkatalogtabeller" -#: parser/parse_clause.c:3326 +#: parser/parse_clause.c:3331 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT stöds inte på tabell \"%s\" som används som katalogtabell" -#: parser/parse_clause.c:3457 +#: parser/parse_clause.c:3462 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "operator %s är inte en giltig sorteringsoperator" -#: parser/parse_clause.c:3459 +#: parser/parse_clause.c:3464 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Sorteringsoperationer måste vara \"<\"- eller \">\"-medlemmar i btree-operatorfamiljer." -#: parser/parse_clause.c:3770 +#: parser/parse_clause.c:3775 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE med offset PRECEDING/FOLLOWING stöds inte för kolumntyp %s" -#: parser/parse_clause.c:3776 +#: parser/parse_clause.c:3781 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE med offset PRECEDING/FOLLOWING stöd inte av kolumntyp %s och offset-typ %s" -#: parser/parse_clause.c:3779 +#: parser/parse_clause.c:3784 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Typomvandla offset-värdet till lämplig typ." -#: parser/parse_clause.c:3784 +#: parser/parse_clause.c:3789 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE med offset PRECEDING/FOLLOWING har multipla tolkingar för kolumntyp %s och offset-typ %s" -#: parser/parse_clause.c:3787 +#: parser/parse_clause.c:3792 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Typomvandla offset-värdet till exakt den önskade typen." #: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 #: parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 -#: parser/parse_expr.c:2083 parser/parse_expr.c:2691 parser/parse_expr.c:3497 -#: parser/parse_target.c:985 +#: 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 "kan inte omvandla typ %s till %s" @@ -17311,121 +17768,121 @@ msgid "argument of %s must not return a set" msgstr "argumentet till %s får inte returnera en mängd" #. 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 typer %s och %s matchar inte" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, c-format msgid "argument types %s and %s cannot be matched" msgstr "argumenttyperna %s och %s matchar inte" #. 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 kan inte konvertera typ %s till %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 "argument deklarerade \"%s\" är inte alla likadana" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 -#: utils/fmgr/funcapi.c:592 +#: 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 "argumentet deklarerad %s är inte en array utan typ %s" -#: parser/parse_coerce.c:2282 parser/parse_coerce.c:2432 -#: utils/fmgr/funcapi.c:606 +#: 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 "argumentet deklarerad %s är inte en intervalltyp utan typ %s" -#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2396 -#: parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:624 utils/fmgr/funcapi.c:689 +#: 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 "argumentet deklarerad %s är inte en multirange-typ utan typ %s" -#: parser/parse_coerce.c:2353 +#: parser/parse_coerce.c:2390 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "kan inte bestämma elementtypen av \"anyarray\"-argument" -#: 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 "argument deklarerad %s är inte konsistent med argument deklarerad %s" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "kunde inte bestämma en polymorf typ då indata har typ %s" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "typen som matchar anynonarray är en array-typ: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2535 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "typen som matchar anyenum är inte en enum-typ: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "argument till en anycompatible-familj kan inte typomvandlas till en vanlig typ" -#: 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 "kunde inte bestämma en polymorf typ %s då indata har typ %s" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "anycompatiblerange-typ %s matchar inte anycompatiblerange-typ %s" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "anycompatiblemultirange-typ %s matchar inte anycompatible-typ %s" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "typen som matchar anycompatiblenonarray är en array-typ: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, c-format msgid "A result of type %s requires at least one input of type anyrange or anymultirange." msgstr "Ett resultat av typen %s kräver minst en indata med typen anyrange eller anymultirange." -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." msgstr "Ett resultat av typ %s kräver minst en indata av typen anycompatiblerange eller anycompatiblemultirange." -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." msgstr "Ett resultat av typ %s kräver minst en indata av typen anyelement, anyarray, anynonarray, anyenum, anyrange eller anymultirange." -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "Ett resultat av typ %s kräver minst en indata av typ anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange eller anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "Ett resultat av typ internal kräver minst en indata av typ internal." @@ -17471,471 +17928,586 @@ msgstr "rekursiv referens till fråga \"%s\" får inte finnas i en INTERSECT" msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "rekursiv referens till fråga \"%s\" får inte finnas i en EXCEPT" -#: parser/parse_cte.c:133 -#, c-format -msgid "MERGE not supported in WITH query" -msgstr "MERGE stöds inte i WITH-fråga" - -#: parser/parse_cte.c:143 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "WITH-frågenamn \"%s\" angivet mer än en gång" -#: parser/parse_cte.c:314 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "kunde inte hitta en olikhetsoperator för typ %s" -#: parser/parse_cte.c:341 +#: parser/parse_cte.c:335 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "WITH-klausul som innehåller en datamodifierande sats måste vara på toppnivå" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:384 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "rekursiv fråga \"%s\" kolumn %d har typ %s i den ickerekursiva termen med typ %s totalt sett" -#: parser/parse_cte.c:396 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Typomvandla utdatan för den ickerekursiva termen till korrekt typ." -#: parser/parse_cte.c:401 +#: parser/parse_cte.c:395 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "rekursiv fråga \"%s\" kolumn %d har jämförelse (collation) \"%s\" i en icke-rekursiv term men jämförelse \"%s\" totalt sett" -#: parser/parse_cte.c:405 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Använd en COLLATE-klausul för att sätta jämförelse för den icke-rekursiva termen." -#: parser/parse_cte.c:426 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "WITH-fråga är inte rekursiv" -#: parser/parse_cte.c:457 +#: parser/parse_cte.c:451 #, c-format msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "med en SEARCH- eller CYCLE-klausul så måste vänstersidan av en UNION vara en SELECT" -#: parser/parse_cte.c:462 +#: parser/parse_cte.c:456 #, c-format msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "med en SEARCH- eller CYCLE-klausul så måste högersidan av en UNION vara en SELECT" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "sökkolumn \"%s\" finns inte med i kolumnlistan för WITH-fråga" -#: parser/parse_cte.c:484 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "sökkolumn \"%s\" angiven mer än en gång" -#: parser/parse_cte.c:493 +#: parser/parse_cte.c:487 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "namn på söksekvensenskolumn \"%s\" används redan i kolumnlistan till WITH-fråga" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "cycle-kolumn \"%s\" finns inte i kolumnlistan i WITH-fråga" -#: parser/parse_cte.c:517 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "cycle-kolumn \"%s\" angiven mer än en gång" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "mark-kolumnnamn \"%s\" för cycle används redan i kolumnlistan i WITH-fråga" -#: parser/parse_cte.c:533 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "path-kolumnnamn \"%s\" för cycle används redan i kolumnlistan i WITH-fråga" -#: parser/parse_cte.c:541 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "mark-kolumnnamn och path-kolumnnamn i cycle är båda samma" -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "namn på söksekvenskolumn och namn på mark-kolumn i cycle är båda samma" -#: parser/parse_cte.c:558 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "namn på söksekvenskolumn och namn på path-kolumn i cycle är båda samma" -#: parser/parse_cte.c:642 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "WITH-fråga \"%s\" har %d kolumner tillgängliga men %d kolumner angivna" -#: parser/parse_cte.c:822 +#: parser/parse_cte.c:816 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "ömsesidig rekursion mellan WITH-poster är inte implementerat" -#: parser/parse_cte.c:874 +#: parser/parse_cte.c:868 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "rekursiv fråga \"%s\" får inte innehålla datamodifierande satser" -#: parser/parse_cte.c:882 +#: parser/parse_cte.c:876 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "rekursiv fråga \"%s\" är inte på formen icke-rekursiv-term UNION [ALL] rekursiv-term" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:911 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY i en rekursiv fråga är inte implementerat" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:917 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET i en rekursiv fråga är inte implementerat" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:923 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT i en rekursiv fråga är inte implementerat" -#: parser/parse_cte.c:944 +#: parser/parse_cte.c:929 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE i en rekursiv fråga är inte implementerat" -#: parser/parse_cte.c:1001 +#: parser/parse_cte.c:1008 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "rekursiv referens till fråga \"%s\" får inte finnas med mer än en gång" -#: parser/parse_expr.c:294 +#: parser/parse_expr.c:313 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT tillåts inte i detta kontext" -#: parser/parse_expr.c:371 parser/parse_relation.c:3688 -#: parser/parse_relation.c:3698 parser/parse_relation.c:3716 -#: parser/parse_relation.c:3723 parser/parse_relation.c:3737 +#: 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 "kolumnen %s.%s finns inte" -#: parser/parse_expr.c:383 +#: parser/parse_expr.c:418 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "kolumn \"%s\" fanns inte i datatypen %s" -#: parser/parse_expr.c:389 +#: parser/parse_expr.c:424 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "kunde inte hitta kolumnen \"%s\" i record-datatyp" -#: parser/parse_expr.c:395 +#: parser/parse_expr.c:430 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "kolumnotation .%s använd på typ %s som inte är en sammanslagen typ" -#: parser/parse_expr.c:426 parser/parse_target.c:733 +#: parser/parse_expr.c:461 parser/parse_target.c:732 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "radexpansion via \"*\" stöds inte här" -#: parser/parse_expr.c:548 +#: parser/parse_expr.c:584 msgid "cannot use column reference in DEFAULT expression" msgstr "kan inte använda kolumnreferenser i DEFAULT-uttryck" -#: parser/parse_expr.c:551 +#: parser/parse_expr.c:587 msgid "cannot use column reference in partition bound expression" msgstr "kan inte använda kolumnreferenser i partitionsgränsuttryck" -#: parser/parse_expr.c:810 parser/parse_relation.c:833 -#: parser/parse_relation.c:915 parser/parse_target.c:1225 +#: 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 "kolumnreferens \"%s\" är tvetydig" -#: parser/parse_expr.c:866 parser/parse_param.c:110 parser/parse_param.c:142 +#: 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 "det finns ingen parameter $%d" -#: parser/parse_expr.c:1066 +#. 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 "NULLIF kräver att =-operatorn returnerar boolean" +msgid "%s requires = operator to yield boolean" +msgstr "%s kräver att operatorn = returnerar boolean" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1072 parser/parse_expr.c:3007 +#: parser/parse_expr.c:1109 parser/parse_expr.c:3072 #, c-format msgid "%s must not return a set" msgstr "%s får inte returnera en mängd" -#: parser/parse_expr.c:1457 parser/parse_expr.c:1489 +#: parser/parse_expr.c:1395 +#, c-format +msgid "MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" +msgstr "MERGE_ACTION() kan bara användas i RETURNING-listan för ett MERGE-kommando" + +#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 #, c-format msgid "number of columns does not match number of values" msgstr "antalet kolumner matchar inte antalet värden" -#: parser/parse_expr.c:1503 +#: parser/parse_expr.c:1565 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "källa till en multiple-kolumn-UPDATE-post måste vara en sub-SELECT eller ROW()-uttryck" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1698 parser/parse_expr.c:2180 parser/parse_func.c:2677 +#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "mängdreturnerande funktioner tillåts inte i %s" -#: parser/parse_expr.c:1761 +#: parser/parse_expr.c:1824 msgid "cannot use subquery in check constraint" msgstr "kan inte använda subfråga i check-villkor" -#: parser/parse_expr.c:1765 +#: parser/parse_expr.c:1828 msgid "cannot use subquery in DEFAULT expression" msgstr "kan inte använda underfråga i DEFAULT-uttryck" -#: parser/parse_expr.c:1768 +#: parser/parse_expr.c:1831 msgid "cannot use subquery in index expression" msgstr "kan inte använda subfråga i indexuttryck" -#: parser/parse_expr.c:1771 +#: parser/parse_expr.c:1834 msgid "cannot use subquery in index predicate" msgstr "kan inte använda subfråga i indexpredikat" -#: parser/parse_expr.c:1774 +#: parser/parse_expr.c:1837 msgid "cannot use subquery in statistics expression" msgstr "kan inte använda underfråga i statistikuttryck" -#: parser/parse_expr.c:1777 +#: parser/parse_expr.c:1840 msgid "cannot use subquery in transform expression" msgstr "kan inte använda underfråga i transformeringsuttrycket" -#: parser/parse_expr.c:1780 +#: parser/parse_expr.c:1843 msgid "cannot use subquery in EXECUTE parameter" msgstr "kan inte använda subfråga i EXECUTE-parameter" -#: parser/parse_expr.c:1783 +#: parser/parse_expr.c:1846 msgid "cannot use subquery in trigger WHEN condition" msgstr "kan inte använda subfråga i triggerns WHEN-villkor" -#: parser/parse_expr.c:1786 +#: parser/parse_expr.c:1849 msgid "cannot use subquery in partition bound" msgstr "kan inte använda underfråga i partitionsgräns" -#: parser/parse_expr.c:1789 +#: parser/parse_expr.c:1852 msgid "cannot use subquery in partition key expression" msgstr "kan inte använda underfråga i partitionsnyckeluttryck" -#: parser/parse_expr.c:1792 +#: parser/parse_expr.c:1855 msgid "cannot use subquery in CALL argument" msgstr "kan inte använda subfråga i CALL-argument" -#: parser/parse_expr.c:1795 +#: parser/parse_expr.c:1858 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "kan inte använda subfråga i COPY FROM WHERE-villkor" -#: parser/parse_expr.c:1798 +#: parser/parse_expr.c:1861 msgid "cannot use subquery in column generation expression" msgstr "kan inte använda subfråga i kolumngenereringsuttryck" -#: parser/parse_expr.c:1851 parser/parse_expr.c:3628 +#: parser/parse_expr.c:1914 parser/parse_expr.c:3764 #, c-format msgid "subquery must return only one column" msgstr "underfråga kan bara returnera en kolumn" -#: parser/parse_expr.c:1922 +#: parser/parse_expr.c:1985 #, c-format msgid "subquery has too many columns" msgstr "underfråga har för många kolumner" -#: parser/parse_expr.c:1927 +#: parser/parse_expr.c:1990 #, c-format msgid "subquery has too few columns" msgstr "underfråga har för få kolumner" -#: parser/parse_expr.c:2023 +#: parser/parse_expr.c:2086 #, c-format msgid "cannot determine type of empty array" msgstr "kan inte bestämma typen av en tom array" -#: parser/parse_expr.c:2024 +#: parser/parse_expr.c:2087 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Typomvandla explicit till den önskade typen, till exempel ARRAY[]::integer[]." -#: parser/parse_expr.c:2038 +#: parser/parse_expr.c:2101 #, c-format msgid "could not find element type for data type %s" msgstr "kunde inte hitta elementtyp för datatyp %s" -#: parser/parse_expr.c:2121 +#: parser/parse_expr.c:2184 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW-uttryck kan ha som mest %d poster" -#: parser/parse_expr.c:2326 +#: parser/parse_expr.c:2389 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "onamnat XML-attributvärde måste vara en kolumnreferens" -#: parser/parse_expr.c:2327 +#: parser/parse_expr.c:2390 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "onamnat XML-elementvärde måste vara en kolumnreferens" -#: parser/parse_expr.c:2342 +#: parser/parse_expr.c:2405 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML-attributnamn \"%s\" finns med mer än en gång" -#: parser/parse_expr.c:2450 +#: parser/parse_expr.c:2513 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "kan inte typomvandla XMLSERIALIZE-resultat till %s" -#: parser/parse_expr.c:2764 parser/parse_expr.c:2960 +#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 #, c-format msgid "unequal number of entries in row expressions" msgstr "olika antal element i raduttryck" -#: parser/parse_expr.c:2774 +#: parser/parse_expr.c:2837 #, c-format msgid "cannot compare rows of zero length" msgstr "kan inte jämföra rader med längden noll" -#: parser/parse_expr.c:2799 +#: parser/parse_expr.c:2862 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "operator för radjämförelse måste resultera i typen boolean, inte %s" -#: parser/parse_expr.c:2806 +#: parser/parse_expr.c:2869 #, c-format msgid "row comparison operator must not return a set" msgstr "radjämförelseoperator får inte returnera en mängd" -#: parser/parse_expr.c:2865 parser/parse_expr.c:2906 +#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "kunde inte lista ut tolkning av radjämförelseoperator %s" -#: parser/parse_expr.c:2867 +#: parser/parse_expr.c:2930 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Radjämförelseoperatorer måste vara associerade med btreee-operatorfamiljer." -#: parser/parse_expr.c:2908 +#: parser/parse_expr.c:2971 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Det finns flera lika sannolika kandidater." -#: parser/parse_expr.c:3001 -#, c-format -msgid "IS DISTINCT FROM requires = operator to yield boolean" -msgstr "IS DISTINCT FROM kräver att operatorn = ger tillbaka en boolean" - -#: parser/parse_expr.c:3239 +#: parser/parse_expr.c:3306 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "JSON ENCODING tillåts bara för input-typen bytea" -#: parser/parse_expr.c:3261 +#: parser/parse_expr.c:3370 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "kan inte använda icke-strängtyper med implicit FORMAT JSON-klausul" -#: parser/parse_expr.c:3262 +#: parser/parse_expr.c:3371 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "kan inte använda icke-strängtyper med explicit FORMAT JSON-klausul" -#: parser/parse_expr.c:3335 +#: parser/parse_expr.c:3460 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "kan inte använda JSON-formatet för utddata som inte är strängar" -#: parser/parse_expr.c:3348 +#: parser/parse_expr.c:3473 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "kan inte sätta JSON-kodning för utdata-typer som inte är bytea" -#: parser/parse_expr.c:3353 +#: parser/parse_expr.c:3478 #, c-format msgid "unsupported JSON encoding" msgstr "ej stödd JSON-kodning" -#: parser/parse_expr.c:3354 +#: parser/parse_expr.c:3479 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "Enbart JSON-kodningen UTF8 stöds." -#: parser/parse_expr.c:3391 +#: parser/parse_expr.c:3516 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "returtyp SETOF stöds inte för SQL/JSON-funktioner" -#: parser/parse_expr.c:3712 parser/parse_func.c:865 +#: parser/parse_expr.c:3521 +#, c-format +msgid "returning pseudo-types is not supported in SQL/JSON functions" +msgstr "pseudo-typer stöds inte som resultat för SQL/JSON-funktioner" + +#: parser/parse_expr.c:3849 parser/parse_func.c:866 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "aggregat-ORDER BY är inte implementerat för fönsterfunktioner" -#: parser/parse_expr.c:3934 +#: parser/parse_expr.c:4072 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "kan inte använda JSON FORMAT ENCODING för indatatyper som inte är bytea" -#: parser/parse_expr.c:3954 +#: parser/parse_expr.c:4092 #, c-format msgid "cannot use type %s in IS JSON predicate" msgstr "kan inte använda typen %s i ett IS JSON-predikat" -#: parser/parse_func.c:194 +#: parser/parse_expr.c:4118 parser/parse_expr.c:4239 #, c-format -msgid "argument name \"%s\" used more than once" -msgstr "argumentnamn \"%s\" angivet mer än en gång" +msgid "cannot use type %s in RETURNING clause of %s" +msgstr "kan inte använda typen %s i RETURNING-klausul för %s" -#: parser/parse_func.c:205 +#: parser/parse_expr.c:4120 #, c-format -msgid "positional argument cannot follow named argument" -msgstr "positionella argument kan inte komma efter namngivna argument" +msgid "Try returning json or jsonb." +msgstr "Försök returnera json eller jsonb." -#: parser/parse_func.c:287 parser/parse_func.c:2367 +#: parser/parse_expr.c:4168 #, c-format -msgid "%s is not a procedure" -msgstr "%s är inte en procedur" +msgid "cannot use non-string types with WITH UNIQUE KEYS clause" +msgstr "kan inte använda icke-strängtyper med WITH UNIQUE KEYS-klausul" -#: parser/parse_func.c:291 +#: parser/parse_expr.c:4242 #, c-format -msgid "To call a function, use SELECT." -msgstr "För att anropa en funktion, använd SELECT." +msgid "Try returning a string type or bytea." +msgstr "Försök returnera en strängtyp eller bytea." -#: parser/parse_func.c:297 +#: parser/parse_expr.c:4307 #, c-format -msgid "%s is a procedure" -msgstr "\"%s\" är en procedur" +msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" +msgstr "kan inte ange FORMAT JSON i RETURNING-klausul för %s()" -#: parser/parse_func.c:301 +#: parser/parse_expr.c:4320 #, c-format -msgid "To call a procedure, use CALL." -msgstr "För att anropa en procedur, använd CALL" +msgid "SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" +msgstr "SQL/JSON QUOTES får inte anges tillsammans med WITH WRAPPER" -#: parser/parse_func.c:315 +#. 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 "%s(*) specified, but %s is not an aggregate function" -msgstr "%s(*) angivet, men %s är inte en aggregatfunktion" +msgid "invalid %s behavior" +msgstr "ogiltig %s-angivelse" + +#. 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 "Bara uttrycken ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT eller DEFAULT tillåts i %s för %s." + +#. 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 "ogiltig %s-angivelse för kolumn \"%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 "Bara uttrycken ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT eller DEFAULT tillåts i %s för formatterade kolumner." + +#: parser/parse_expr.c:4395 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for %s." +msgstr "Bara ERROR, TRUE, FALSE eller UNKNOWN tillåts i %s för %s." + +#. 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 "Bara ERROR, TRUE, FALSE eller UNKNOWN tillåts i %s för EXISTS-kolumner." + +#. 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 "Bara uttrycken ERROR, NULL eller DEFAULT tillåts i %s för %s." + +#. 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 "Bara uttrycken ERROR, NULL eller DEFAULT tillåts i %s för skalära kolumner." + +#: parser/parse_expr.c:4489 +#, c-format +msgid "JSON path expression must be of type %s, not of type %s" +msgstr "Uttryck för JSON-sökväg måste vara av typ %s, inte av typ %s" + +#: parser/parse_expr.c:4707 +#, c-format +msgid "can only specify a constant, non-aggregate function, or operator expression for DEFAULT" +msgstr "kan bara ange en konstant, en icke-aggregat-funktion eller ett operatoruttryck för DEFAULT" + +#: parser/parse_expr.c:4712 +#, c-format +msgid "DEFAULT expression must not contain column references" +msgstr "DEFAULT-uttryck får inte innehålla kolumnreferenser" + +#: parser/parse_expr.c:4717 +#, c-format +msgid "DEFAULT expression must not return a set" +msgstr "DEFAULT-uttryck får inte returnera en mängd" + +#: parser/parse_expr.c:4793 parser/parse_expr.c:4802 +#, c-format +msgid "cannot cast behavior expression of type %s to %s" +msgstr "kan inte omvandla uttryck av typ %s till %s" + +#: parser/parse_expr.c:4796 +#, c-format +msgid "You will need to explicitly cast the expression to type %s." +msgstr "Du måste explicit omvandla uttrycket till typen %s." + +#: parser/parse_func.c:194 +#, c-format +msgid "argument name \"%s\" used more than once" +msgstr "argumentnamn \"%s\" angivet mer än en gång" + +#: parser/parse_func.c:205 +#, c-format +msgid "positional argument cannot follow named argument" +msgstr "positionella argument kan inte komma efter namngivna argument" + +#: parser/parse_func.c:287 parser/parse_func.c:2368 +#, c-format +msgid "%s is not a procedure" +msgstr "%s är inte en procedur" + +#: parser/parse_func.c:291 +#, c-format +msgid "To call a function, use SELECT." +msgstr "För att anropa en funktion, använd SELECT." + +#: parser/parse_func.c:297 +#, c-format +msgid "%s is a procedure" +msgstr "\"%s\" är en procedur" + +#: parser/parse_func.c:301 +#, c-format +msgid "To call a procedure, use CALL." +msgstr "För att anropa en procedur, använd CALL" + +#: parser/parse_func.c:315 +#, c-format +msgid "%s(*) specified, but %s is not an aggregate function" +msgstr "%s(*) angivet, men %s är inte en aggregatfunktion" #: parser/parse_func.c:322 #, c-format @@ -18031,7 +18603,7 @@ msgstr "Kunde inte välja en bästa kandidatfunktion: Du kan behöva lägga till msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Ingen aggregatfunktion matchar det givna namnet och argumenttyperna. Kanske har du placerat ORDER BY på fel plats; ORDER BY måste komma efter alla vanliga argument till aggregatet." -#: parser/parse_func.c:622 parser/parse_func.c:2410 +#: parser/parse_func.c:622 parser/parse_func.c:2411 #, c-format msgid "procedure %s does not exist" msgstr "proceduren \"%s\" finns inte" @@ -18051,7 +18623,7 @@ msgstr "Ingen funktion matchar det angivna namnet och argumenttyperna. Du kan be msgid "VARIADIC argument must be an array" msgstr "VARIADIC-argument måste vara en array" -#: parser/parse_func.c:791 parser/parse_func.c:855 +#: parser/parse_func.c:791 parser/parse_func.c:856 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) måste användas för att anropa en parameterlös aggregatfunktion" @@ -18066,263 +18638,257 @@ msgstr "aggregat kan inte returnera mängder" msgid "aggregates cannot use named arguments" msgstr "aggregat kan inte använda namngivna argument" -#: parser/parse_func.c:845 +#: parser/parse_func.c:846 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT är inte implementerad för fönsterfunktioner" -#: parser/parse_func.c:874 +#: parser/parse_func.c:875 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER är inte implementerat för icke-aggregat-fönsterfunktioner" -#: parser/parse_func.c:883 +#: parser/parse_func.c:884 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "fönsterfunktioner kan inte innehålla funtionsanrop till funktioner som returnerar mängder" -#: parser/parse_func.c:891 +#: parser/parse_func.c:892 #, c-format msgid "window functions cannot return sets" msgstr "fönsterfunktioner kan inte returnera mängder" -#: parser/parse_func.c:2166 parser/parse_func.c:2439 +#: parser/parse_func.c:2167 parser/parse_func.c:2440 #, c-format msgid "could not find a function named \"%s\"" msgstr "kunde inte hitta funktion med namn \"%s\"" -#: parser/parse_func.c:2180 parser/parse_func.c:2457 +#: parser/parse_func.c:2181 parser/parse_func.c:2458 #, c-format msgid "function name \"%s\" is not unique" msgstr "funktionsnamn \"%s\" är inte unikt" -#: parser/parse_func.c:2182 parser/parse_func.c:2460 +#: parser/parse_func.c:2183 parser/parse_func.c:2461 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Ange argumentlistan för att välja funktionen entydigt." -#: parser/parse_func.c:2226 +#: parser/parse_func.c:2227 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "procedurer kan inte ha mer än %d argument" msgstr[1] "procedurer kan inte ha mer än %d argument" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2358 #, c-format msgid "%s is not a function" msgstr "%s är inte en funktion" -#: parser/parse_func.c:2377 +#: parser/parse_func.c:2378 #, c-format msgid "function %s is not an aggregate" msgstr "funktionen %s är inte en aggregatfunktion" -#: parser/parse_func.c:2405 +#: parser/parse_func.c:2406 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "kunde inte hitta en procedur med namn \"%s\"" -#: parser/parse_func.c:2419 +#: parser/parse_func.c:2420 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "kunde inte hitta ett aggregat med namn \"%s\"" -#: parser/parse_func.c:2424 +#: parser/parse_func.c:2425 #, c-format msgid "aggregate %s(*) does not exist" msgstr "aggregatfunktion %s(*) existerar inte" -#: parser/parse_func.c:2429 +#: parser/parse_func.c:2430 #, c-format msgid "aggregate %s does not exist" msgstr "aggregatfunktion %s existerar inte" -#: parser/parse_func.c:2465 +#: parser/parse_func.c:2466 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "procedurnamn \"%s\" är inte unikt" -#: parser/parse_func.c:2468 +#: parser/parse_func.c:2469 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Ange argumentlistan för att välja proceduren entydigt." -#: parser/parse_func.c:2473 +#: parser/parse_func.c:2474 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "aggregatnamn \"%s\" är inte unikt" -#: parser/parse_func.c:2476 +#: parser/parse_func.c:2477 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Ange argumentlistan för att välja aggregatet entydigt." -#: parser/parse_func.c:2481 +#: parser/parse_func.c:2482 #, c-format msgid "routine name \"%s\" is not unique" msgstr "rutinnamn \"%s\" är inte unikt" -#: parser/parse_func.c:2484 +#: parser/parse_func.c:2485 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Ange argumentlistan för att välja rutinen entydigt." -#: parser/parse_func.c:2539 +#: parser/parse_func.c:2540 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "mängdreturnerande funktioner tillåts inte i JOIN-villkor" -#: parser/parse_func.c:2560 +#: parser/parse_func.c:2561 msgid "set-returning functions are not allowed in policy expressions" msgstr "mängdreturnerande funktioner tillåts inte i policy-uttryck" -#: parser/parse_func.c:2576 +#: parser/parse_func.c:2577 msgid "set-returning functions are not allowed in window definitions" msgstr "mängdreturnerande funktioner tillåts inte i fönsterdefinitioner" -#: parser/parse_func.c:2613 +#: parser/parse_func.c:2615 msgid "set-returning functions are not allowed in MERGE WHEN conditions" msgstr "mängdreturnerande funktioner tillåts inte i MERGE WHEN-villkor" -#: parser/parse_func.c:2617 +#: parser/parse_func.c:2619 msgid "set-returning functions are not allowed in check constraints" msgstr "mängdreturnerande funktioner tillåts inte i check-villkor" -#: parser/parse_func.c:2621 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "mängdreturnerande funktioner tillåts inte i DEFAULT-uttryck" -#: parser/parse_func.c:2624 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index expressions" msgstr "mängdreturnerande funktioner tillåts inte i indexuttryck" -#: parser/parse_func.c:2627 +#: parser/parse_func.c:2629 msgid "set-returning functions are not allowed in index predicates" msgstr "mängdreturnerande funktioner tillåts inte i indexpredukat" -#: parser/parse_func.c:2630 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in statistics expressions" msgstr "mängdreturnerande funktioner tillåts inte i statistikuttryck" -#: parser/parse_func.c:2633 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in transform expressions" msgstr "mängdreturnerande funktioner tillåts inte i transformuttryck" -#: parser/parse_func.c:2636 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "mängdreturnerande funktioner tillåts inte i EXECUTE-parametrar" -#: parser/parse_func.c:2639 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "mängdreturnerande funktioner tillåts inte i WHEN-villkor" -#: parser/parse_func.c:2642 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition bound" msgstr "mängdreturnerande funktioner tillåts inte i partitionsgräns" -#: parser/parse_func.c:2645 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in partition key expressions" msgstr "mängdreturnerande funktioner tillåts inte i partitionsnyckeluttryck" -#: parser/parse_func.c:2648 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in CALL arguments" msgstr "mängdreturnerande funktioner tillåts inte i CALL-argument" -#: parser/parse_func.c:2651 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "mängdreturnerande funktioner tillåts inte i COPY FROM WHERE-villkor" -#: parser/parse_func.c:2654 +#: parser/parse_func.c:2656 msgid "set-returning functions are not allowed in column generation expressions" msgstr "mängdreturnerande funktioner tillåts inte i kolumngenereringsuttryck" -#: parser/parse_merge.c:119 +#: parser/parse_jsontable.c:95 +#, c-format +msgid "Only EMPTY [ ARRAY ] or ERROR is allowed in the top-level ON ERROR clause." +msgstr "Enbart EMPTY [ ARRAY ] eller ERROR tillåts på toppnivå i ON ERROR-klausul." + +#: parser/parse_jsontable.c:189 parser/parse_jsontable.c:203 +#, c-format +msgid "duplicate JSON_TABLE column or path name: %s" +msgstr "duplicerad JSON_TABLE-kolumn eller sökvägsnamn: %s" + +#: parser/parse_merge.c:129 #, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" msgstr "WHERE RECURSIVE stöds inte i MERGE-satser" -#: parser/parse_merge.c:161 +#: parser/parse_merge.c:176 #, c-format msgid "unreachable WHEN clause specified after unconditional WHEN clause" msgstr "onåbar WHEN-klausul har angivits efter en ej villkorlig WHEN-klausul" -#: parser/parse_merge.c:191 -#, c-format -msgid "MERGE is not supported for relations with rules." -msgstr "MERGE stöds inte för relationer med regler." - -#: parser/parse_merge.c:208 +#: parser/parse_merge.c:222 #, c-format msgid "name \"%s\" specified more than once" msgstr "namnet \"%s\" angivet mer än en gång" -#: parser/parse_merge.c:210 +#: parser/parse_merge.c:224 #, c-format msgid "The name is used both as MERGE target table and data source." msgstr "Namnet används både som MERGE-måltabell och som datakälla." -#: parser/parse_node.c:87 +#: parser/parse_node.c:82 #, c-format msgid "target lists can have at most %d entries" msgstr "mållista kan ha som mest %d poster" -#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#: parser/parse_oper.c:114 parser/parse_oper.c:678 #, c-format msgid "postfix operators are not supported" msgstr "postfix-operatorer stöds inte" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:509 -#: utils/adt/regproc.c:683 -#, c-format -msgid "operator does not exist: %s" -msgstr "operator existerar inte: %s" - -#: parser/parse_oper.c:229 +#: parser/parse_oper.c:217 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Använd en explicit ordningsoperator eller ändra frågan." -#: parser/parse_oper.c:485 +#: parser/parse_oper.c:473 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "operator kräver run-time-typomvandling: %s" -#: parser/parse_oper.c:641 +#: parser/parse_oper.c:629 #, c-format msgid "operator is not unique: %s" msgstr "operatorn är inte unik: %s" -#: parser/parse_oper.c:643 +#: parser/parse_oper.c:631 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "Kunde inte välja en bästa kandidatoperator. Du behöver troligen lägga till en explicit typomvandling." -#: parser/parse_oper.c:652 +#: parser/parse_oper.c:640 #, c-format msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." msgstr "Ingen operator matchar det angivna namnet och argumenttyp. Du kan behöva lägga till explicita typomvandlingar." -#: parser/parse_oper.c:654 +#: parser/parse_oper.c:642 #, c-format msgid "No operator matches the given name and argument types. You might need to add explicit type casts." msgstr "Ingen operator matchar det angivna namnet och argumenttyperna. Du kan behöva lägga till explicita typomvandlingar." -#: parser/parse_oper.c:714 parser/parse_oper.c:828 -#, c-format -msgid "operator is only a shell: %s" -msgstr "operator är bara en shell-typ: %s" - -#: parser/parse_oper.c:816 +#: parser/parse_oper.c:803 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) kräver en array på höger sida" -#: parser/parse_oper.c:858 +#: parser/parse_oper.c:844 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) kräver att operatorn returnerar en boolean" -#: parser/parse_oper.c:863 +#: parser/parse_oper.c:849 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) kräver att operatorn inte returnerar en mängd" @@ -18332,7 +18898,7 @@ msgstr "op ANY/ALL (array) kräver att operatorn inte returnerar en mängd" msgid "inconsistent types deduced for parameter $%d" msgstr "inkonsistenta typer härledda för parameter $%d" -#: 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 "kunde inte lista ut datatypen för parameter $%d" @@ -18352,13 +18918,13 @@ msgstr "tabellreferens %u är tvetydig" msgid "table name \"%s\" specified more than once" msgstr "tabellnamn \"%s\" angivet mer än en gång" -#: parser/parse_relation.c:494 parser/parse_relation.c:3630 -#: parser/parse_relation.c:3639 +#: parser/parse_relation.c:494 parser/parse_relation.c:3633 +#: parser/parse_relation.c:3642 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "ogiltig referens till FROM-klausulpost för tabell \"%s\"" -#: parser/parse_relation.c:498 parser/parse_relation.c:3641 +#: parser/parse_relation.c:498 parser/parse_relation.c:3644 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Det finns en post för tabell \"%s\" men den kan inte refereras till från denna del av frågan." @@ -18384,7 +18950,7 @@ msgid "cannot use system column \"%s\" in MERGE WHEN condition" msgstr "kan inte använda systemkolumn \"%s\" i MERGE WHEN-villkor" #: parser/parse_relation.c:1236 parser/parse_relation.c:1691 -#: parser/parse_relation.c:2388 +#: parser/parse_relation.c:2384 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "tabell \"%s\" har %d kolumner tillgängliga men %d kolumner angivna" @@ -18399,157 +18965,157 @@ msgstr "Det finns en WITH-post med namn \"%s\" men den kan inte refereras till f msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Använd WITH RECURSIVE eller ändra ordning på WITH-posterna för att ta bort framåt-referenser." -#: parser/parse_relation.c:1834 +#: parser/parse_relation.c:1833 #, c-format msgid "a column definition list is redundant for a function with OUT parameters" msgstr "en kolumndefinitionslista är redundant för en funktion med OUT-parametrar" -#: parser/parse_relation.c:1840 +#: parser/parse_relation.c:1839 #, c-format msgid "a column definition list is redundant for a function returning a named composite type" msgstr "en kolumndefinitionslista är redundant för en funktion som returnerar en namngiven composite-typ" -#: parser/parse_relation.c:1847 +#: parser/parse_relation.c:1846 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "en kolumndefinitionslista tillåts bara för funktioner som returnerar \"record\"" -#: parser/parse_relation.c:1858 +#: parser/parse_relation.c:1857 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "en kolumndefinitionslista krävs för funktioner som returnerar \"record\"" -#: parser/parse_relation.c:1895 +#: parser/parse_relation.c:1894 #, c-format msgid "column definition lists can have at most %d entries" msgstr "kolumndefinitionslistor kan ha som mest %d poster" -#: parser/parse_relation.c:1955 +#: parser/parse_relation.c:1954 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "funktion \"%s\" i FROM har en icke stödd returtyp %s" -#: parser/parse_relation.c:1982 parser/parse_relation.c:2068 +#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 #, c-format msgid "functions in FROM can return at most %d columns" msgstr "funktioner i FROM kan returnera som mest %d kolumner" -#: parser/parse_relation.c:2098 +#: parser/parse_relation.c:2096 #, c-format msgid "%s function has %d columns available but %d columns specified" msgstr "funktionen %s har %d kolumner tillgängliga men %d kolumner angivna" -#: parser/parse_relation.c:2180 +#: parser/parse_relation.c:2177 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "VALUES-lista \"%s\" har %d kolumner tillgängliga men %d kolumner angivna" -#: parser/parse_relation.c:2246 +#: parser/parse_relation.c:2242 #, c-format msgid "joins can have at most %d columns" msgstr "joins kan ha som mest %d kolumner" -#: parser/parse_relation.c:2271 +#: parser/parse_relation.c:2267 #, c-format msgid "join expression \"%s\" has %d columns available but %d columns specified" msgstr "join-uttryck \"%s\" har %d kolumner tillgängliga men %d kolumner angivna" -#: parser/parse_relation.c:2361 +#: parser/parse_relation.c:2357 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH-fråga \"%s\" har ingen RETURNING-klausul" -#: parser/parse_relation.c:3632 +#: parser/parse_relation.c:3635 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Kanske tänkte du referera till tabellaliaset \"%s\"." -#: parser/parse_relation.c:3644 +#: parser/parse_relation.c:3647 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." msgstr "För att referera till den tabellen så måste denna subfråga markeras som LATERAL." -#: parser/parse_relation.c:3650 +#: parser/parse_relation.c:3653 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "saknar FROM-klausulpost för tabell \"%s\"" -#: parser/parse_relation.c:3690 +#: parser/parse_relation.c:3693 #, c-format msgid "There are columns named \"%s\", but they are in tables that cannot be referenced from this part of the query." msgstr "Det finns kolumner med namn \"%s\", men de är i tabeller som inte kan refereras till från denna del av frågan." -#: parser/parse_relation.c:3692 +#: parser/parse_relation.c:3695 #, c-format msgid "Try using a table-qualified name." msgstr "Försök med ett tabell-prefixat namn." -#: parser/parse_relation.c:3700 +#: parser/parse_relation.c:3703 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Det finns en kolumn med namn \"%s\" i tabell \"%s\" men den kan inte refereras till från denna del av frågan." -#: parser/parse_relation.c:3703 +#: parser/parse_relation.c:3706 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." msgstr "För att referera till den kolumnen så måste denna subfråga markeras som LATERAL." -#: parser/parse_relation.c:3705 +#: parser/parse_relation.c:3708 #, c-format msgid "To reference that column, you must use a table-qualified name." msgstr "För att referera till den kolumnen så måste du använda ett tabell-prefixat namn." -#: parser/parse_relation.c:3725 +#: parser/parse_relation.c:3728 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Kanske tänkte du referera till kolumnen \"%s.%s\"." -#: parser/parse_relation.c:3739 +#: parser/parse_relation.c:3742 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Kanske tänkte du referera till kolumnen \"%s.%s\" eller kolumnen \"%s.%s\"." -#: parser/parse_target.c:481 parser/parse_target.c:796 +#: parser/parse_target.c:480 parser/parse_target.c:795 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "kan inte skriva till systemkolumn \"%s\"" -#: parser/parse_target.c:509 +#: parser/parse_target.c:508 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "kan inte sätta ett array-element till DEFAULT" -#: parser/parse_target.c:514 +#: parser/parse_target.c:513 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "kan inte sätta ett underfält till DEFAULT" -#: parser/parse_target.c:588 +#: parser/parse_target.c:587 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "kolumn \"%s\" har typ %s men uttrycket är av typ %s" -#: parser/parse_target.c:780 +#: parser/parse_target.c:779 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "kan inte tilldela till fält \"%s\" i kolumn \"%s\" då dess typ %s inte är en composit-typ" -#: parser/parse_target.c:789 +#: parser/parse_target.c:788 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "kan inte tilldela till fält \"%s\" i kolumn \"%s\" då det inte finns någon sådan kolumn i datatypen %s" -#: parser/parse_target.c:869 +#: parser/parse_target.c:877 #, c-format msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "tilldelning med array-index till \"%s\" kräver typ %s men uttrycket har typ %s" -#: parser/parse_target.c:879 +#: parser/parse_target.c:887 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "underfält \"%s\" har typ %s men uttrycket har typ %s" -#: parser/parse_target.c:1314 +#: parser/parse_target.c:1327 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * utan tabeller angivna är inte giltigt" @@ -18569,8 +19135,8 @@ msgstr "dålig %%TYPE-referens (för många punktade namn): %s" msgid "type reference %s converted to %s" msgstr "typreferens %s konverterad till %s" -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:395 -#: utils/cache/typcache.c:450 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 +#: utils/cache/typcache.c:452 #, c-format msgid "type \"%s\" is only a shell" msgstr "typ \"%s\" är bara ett skal" @@ -18590,330 +19156,325 @@ msgstr "typmodifierare måste vare enkla konstanter eller identifierare" msgid "invalid type name \"%s\"" msgstr "ogiltigt typnamn \"%s\"" -#: parser/parse_utilcmd.c:264 +#: parser/parse_utilcmd.c:263 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "kan inte skapa partitionerad tabell som barnarv" -#: parser/parse_utilcmd.c:580 +#: parser/parse_utilcmd.c:475 +#, c-format +msgid "cannot set logged status of a temporary sequence" +msgstr "kan inte sätta loggningsstatus för en temporär sekvens" + +#: parser/parse_utilcmd.c:611 #, c-format msgid "array of serial is not implemented" msgstr "array med serial är inte implementerat" -#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 -#: parser/parse_utilcmd.c:730 +#: 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 "motstridiga NULL/NOT NULL-villkor för kolumnen \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:683 +#: parser/parse_utilcmd.c:714 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "multipla default-värden angivna för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:731 #, c-format msgid "identity columns are not supported on typed tables" msgstr "identitetskolumner stöds inte på typade tabeller" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:735 #, c-format msgid "identity columns are not supported on partitions" msgstr "identitetskolumner stöds inte för partitioner" -#: parser/parse_utilcmd.c:713 +#: parser/parse_utilcmd.c:744 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "multipla identitetspecifikationer för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:743 +#: parser/parse_utilcmd.c:774 #, c-format msgid "generated columns are not supported on typed tables" msgstr "genererade kolumner stöds inte på typade tabeller" -#: parser/parse_utilcmd.c:747 +#: parser/parse_utilcmd.c:778 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "multipla genereringsklausuler angivna för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:765 parser/parse_utilcmd.c:880 +#: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:911 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "primärnyckelvillkor stöds inte på främmande tabeller" -#: parser/parse_utilcmd.c:774 parser/parse_utilcmd.c:890 +#: parser/parse_utilcmd.c:805 parser/parse_utilcmd.c:921 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "unika villkor stöds inte på främmande tabeller" -#: parser/parse_utilcmd.c:819 +#: parser/parse_utilcmd.c:850 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "både default och identity angiven för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:827 +#: parser/parse_utilcmd.c:858 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "både default och genereringsuttryck angiven för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:835 +#: parser/parse_utilcmd.c:866 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "både identity och genereringsuttryck angiven för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:900 +#: parser/parse_utilcmd.c:931 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "uteslutningsvillkor stöds inte på främmande tabeller" -#: parser/parse_utilcmd.c:906 -#, c-format -msgid "exclusion constraints are not supported on partitioned tables" -msgstr "uteslutningsvillkor stöds inte för partitionerade tabeller" - -#: parser/parse_utilcmd.c:971 +#: parser/parse_utilcmd.c:996 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE stöds inte för att skapa främmande tabeller" -#: parser/parse_utilcmd.c:984 +#: parser/parse_utilcmd.c:1009 #, c-format msgid "relation \"%s\" is invalid in LIKE clause" msgstr "relationen \"%s\" är ogiltig i LIKE-klausul" -#: parser/parse_utilcmd.c:1741 parser/parse_utilcmd.c:1849 +#: parser/parse_utilcmd.c:1736 parser/parse_utilcmd.c:1844 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Index \"%s\" innehåller en hela-raden-referens." -#: parser/parse_utilcmd.c:2236 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "kan inte använda ett existerande index i CREATE TABLE" -#: parser/parse_utilcmd.c:2256 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "index \"%s\" är redan associerad med ett villkor" -#: parser/parse_utilcmd.c:2271 -#, c-format -msgid "index \"%s\" is not valid" -msgstr "index \"%s\" är inte giltigt" - -#: parser/parse_utilcmd.c:2277 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" är inte ett unikt index" -#: parser/parse_utilcmd.c:2278 parser/parse_utilcmd.c:2285 -#: parser/parse_utilcmd.c:2292 parser/parse_utilcmd.c:2369 +#: 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 "Kan inte skapa en primärnyckel eller ett unikt villkor med hjälp av ett sådant index." -#: parser/parse_utilcmd.c:2284 +#: parser/parse_utilcmd.c:2290 #, c-format msgid "index \"%s\" contains expressions" msgstr "index \"%s\" innehåller uttryck" -#: parser/parse_utilcmd.c:2291 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" är ett partiellt index" -#: parser/parse_utilcmd.c:2303 +#: parser/parse_utilcmd.c:2309 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" är ett \"deferrable\" index" -#: parser/parse_utilcmd.c:2304 +#: parser/parse_utilcmd.c:2310 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Kan inte skapa ett icke-\"deferrable\" integritetsvillkor från ett \"deferrable\" index." -#: parser/parse_utilcmd.c:2368 +#: parser/parse_utilcmd.c:2374 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "index \"%s\" kolumn nummer %d har ingen standard för sorteringsbeteende" -#: parser/parse_utilcmd.c:2525 +#: parser/parse_utilcmd.c:2531 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "kolumn \"%s\" finns med två gånger i primära nyckel-villkoret" -#: parser/parse_utilcmd.c:2531 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "kolumn \"%s\" finns med två gånger i unique-villkoret" -#: parser/parse_utilcmd.c:2878 +#: parser/parse_utilcmd.c:2871 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "indexuttryck och predikat kan bara referera till tabellen som indexeras" -#: parser/parse_utilcmd.c:2950 +#: parser/parse_utilcmd.c:2943 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "statistikuttryck kan bara referera till tabellen som är refererad" -#: parser/parse_utilcmd.c:2993 +#: parser/parse_utilcmd.c:2986 #, c-format msgid "rules on materialized views are not supported" msgstr "regler på materialiserade vyer stöds inte" -#: parser/parse_utilcmd.c:3053 +#: parser/parse_utilcmd.c:3046 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "WHERE-villkor i regel kan inte innehålla referenser till andra relationer" -#: parser/parse_utilcmd.c:3125 +#: parser/parse_utilcmd.c:3118 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "regler med WHERE-villkor kan bara innehålla SELECT-, INSERT-, UPDATE- eller DELETE-handlingar" -#: parser/parse_utilcmd.c:3143 parser/parse_utilcmd.c:3244 -#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1087 +#: 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-satser med villkor är inte implementerat" -#: parser/parse_utilcmd.c:3161 +#: parser/parse_utilcmd.c:3154 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECT-regel kan inte använda OLD" -#: parser/parse_utilcmd.c:3165 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECT-regel kan inte använda NEW" -#: parser/parse_utilcmd.c:3174 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERT-regel kan inte använda OLD" -#: parser/parse_utilcmd.c:3180 +#: parser/parse_utilcmd.c:3173 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETE-regel kan inte använda NEW" -#: parser/parse_utilcmd.c:3208 +#: parser/parse_utilcmd.c:3201 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "kan inte referera till OLD i WITH-fråga" -#: parser/parse_utilcmd.c:3215 +#: parser/parse_utilcmd.c:3208 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "kan inte referera till NEW i WITH-fråga" -#: parser/parse_utilcmd.c:3667 +#: parser/parse_utilcmd.c:3664 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "felplacerad DEFERRABLE-klausul" -#: parser/parse_utilcmd.c:3672 parser/parse_utilcmd.c:3687 +#: parser/parse_utilcmd.c:3669 parser/parse_utilcmd.c:3684 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "multipla DEFERRABLE/NOT DEFERRABLE-klausuler tillåts inte" -#: parser/parse_utilcmd.c:3682 +#: parser/parse_utilcmd.c:3679 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "felplacerad NOT DEFERRABLE-klausul" -#: parser/parse_utilcmd.c:3703 +#: parser/parse_utilcmd.c:3700 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "felplacerad INITIALLY DEFERRED-klausul" -#: parser/parse_utilcmd.c:3708 parser/parse_utilcmd.c:3734 +#: parser/parse_utilcmd.c:3705 parser/parse_utilcmd.c:3731 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "multipla INITIALLY IMMEDIATE/DEFERRED-klausuler tillåts inte" -#: parser/parse_utilcmd.c:3729 +#: parser/parse_utilcmd.c:3726 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "felplacerad klausul INITIALLY IMMEDIATE" -#: parser/parse_utilcmd.c:3922 +#: parser/parse_utilcmd.c:3919 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE anger ett schema (%s) som skiljer sig från det som skapas (%s)" -#: parser/parse_utilcmd.c:3957 +#: parser/parse_utilcmd.c:3954 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" är inte en partitionerad tabell" -#: parser/parse_utilcmd.c:3964 +#: parser/parse_utilcmd.c:3961 #, c-format msgid "table \"%s\" is not partitioned" msgstr "tabell \"%s\" är inte partitionerad" -#: parser/parse_utilcmd.c:3971 +#: parser/parse_utilcmd.c:3968 #, c-format msgid "index \"%s\" is not partitioned" msgstr "index \"%s\" är inte partitionerad" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "en hash-partitionerad tabell får inte ha en standardpartition" -#: parser/parse_utilcmd.c:4028 +#: parser/parse_utilcmd.c:4025 #, c-format msgid "invalid bound specification for a hash partition" msgstr "ogiltig gränsangivelse för hash-partition" -#: parser/parse_utilcmd.c:4034 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 "modulo för hash-partition vara ett heltalsvärde större än noll" -#: parser/parse_utilcmd.c:4041 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 "rest för hash-partition måste vara lägre än modulo" -#: parser/parse_utilcmd.c:4054 +#: parser/parse_utilcmd.c:4051 #, c-format msgid "invalid bound specification for a list partition" msgstr "ogiltig gränsangivelse för listpartition" -#: parser/parse_utilcmd.c:4107 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "invalid bound specification for a range partition" msgstr "ogiltig gränsangivelse för range-partition" -#: parser/parse_utilcmd.c:4113 +#: parser/parse_utilcmd.c:4110 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM måste ge exakt ett värde per partitionerande kolumn" -#: parser/parse_utilcmd.c:4117 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO måste ge exakt ett värde per partitionerande kolumn" -#: parser/parse_utilcmd.c:4231 +#: parser/parse_utilcmd.c:4228 #, c-format msgid "cannot specify NULL in range bound" msgstr "kan inte ange NULL i range-gräns" -#: parser/parse_utilcmd.c:4280 +#: parser/parse_utilcmd.c:4277 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "varje gräns efter MAXVALUE måste också vara MAXVALUE" -#: parser/parse_utilcmd.c:4287 +#: parser/parse_utilcmd.c:4284 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "varje gräns efter MINVALUE måste också vara MINVALUE" -#: parser/parse_utilcmd.c:4330 +#: parser/parse_utilcmd.c:4327 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "angivet värde kan inte typomvandlas till typ %s för kolumn \"%s\"" @@ -18926,12 +19487,12 @@ msgstr "UESCAPE måste följas av en enkel stränglitteral" msgid "invalid Unicode escape character" msgstr "ogiltigt Unicode-escapetecken" -#: parser/parser.c:347 scan.l:1390 +#: parser/parser.c:347 scan.l:1393 #, c-format msgid "invalid Unicode escape value" msgstr "ogiltigt Unicode-escapevärde" -#: parser/parser.c:494 scan.l:701 utils/adt/varlena.c:6505 +#: parser/parser.c:494 scan.l:716 utils/adt/varlena.c:6640 #, c-format msgid "invalid Unicode escape" msgstr "ogiltig Unicode-escapesekvens" @@ -18941,8 +19502,8 @@ msgstr "ogiltig Unicode-escapesekvens" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Unicode-escapesekvenser måste vara \\XXXX eller \\+XXXXXX." -#: parser/parser.c:523 scan.l:662 scan.l:678 scan.l:694 -#: utils/adt/varlena.c:6530 +#: 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 "ogiltigt Unicode-surrogatpar" @@ -18952,89 +19513,89 @@ msgstr "ogiltigt Unicode-surrogatpar" msgid "identifier \"%s\" will be truncated to \"%.*s\"" msgstr "identifierare \"%s\" kommer trunkeras till \"%.*s\"" -#: partitioning/partbounds.c:2921 +#: partitioning/partbounds.c:2920 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "partition \"%s\" står i konflikt med existerande default-partition \"%s\"" -#: partitioning/partbounds.c:2973 partitioning/partbounds.c:2992 -#: partitioning/partbounds.c:3014 +#: partitioning/partbounds.c:2972 partitioning/partbounds.c:2991 +#: partitioning/partbounds.c:3013 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "varje hash-partition-modulo måste vara en faktror av näste högre modulo" -#: partitioning/partbounds.c:2974 partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:2973 partitioning/partbounds.c:3014 #, c-format msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." msgstr "Ny modulon %d är inte en faktor av %d som är modulo för den existerande partitionen \"%s\"." -#: partitioning/partbounds.c:2993 +#: partitioning/partbounds.c:2992 #, c-format msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "Ny modulon %d är inte delbar med %d som är modulo för den existerande paritionen \"%s\"." -#: partitioning/partbounds.c:3128 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "tom intervallsgräns angiven för partition \"%s\"" -#: partitioning/partbounds.c:3130 +#: partitioning/partbounds.c:3129 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." -msgstr "Angiven lägre gräns %s är större än eller lika med övre gräns %s." +msgstr "Angiven undre gräns %s är större än eller lika med övre gräns %s." -#: partitioning/partbounds.c:3238 +#: partitioning/partbounds.c:3237 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "partition \"%s\" skulle överlappa partition \"%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 "hoppade över skanning av främmand tabell \"%s\" som er en partition för standardpartitionen \"%s\"" -#: 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 "rest för hash-partition måste vara ett heltalsvärde större än eller lika med noll" -#: partitioning/partbounds.c:4831 +#: partitioning/partbounds.c:4830 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "\"%s\" är inte en hash-partitionerad tabell" -#: 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 "antalet partitioneringskolumner (%d) stämmer inte med antalet partioneringsnycklas som angivits (%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 "kolumn %d i partitioneringsnyckeln har typ %s men använt värde har typ %s" -#: 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 "kolumn %d i partitioneringsnyckeln har typ \"%s\" men använt värde har typ \"%s\"" -#: port/pg_sema.c:209 port/pg_shmem.c:708 port/posix_sema.c:209 -#: port/sysv_sema.c:323 port/sysv_shmem.c:708 +#: 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 "kunde inte göra stat() på datakatalog \"%s\": %m" -#: port/pg_shmem.c:223 port/sysv_shmem.c:223 +#: port/pg_shmem.c:224 port/sysv_shmem.c:224 #, c-format msgid "could not create shared memory segment: %m" msgstr "kunde inte skapa delat minnessegment: %m" -#: port/pg_shmem.c:224 port/sysv_shmem.c:224 +#: port/pg_shmem.c:225 port/sysv_shmem.c:225 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "Misslyckade systemanropet var semget(key=%lu, size=%zu, 0%o)." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" @@ -19043,7 +19604,7 @@ msgstr "" "Felet betyder vanligen att PostgreSQLs begäran av delat minnessegment överskred kärnans SHMMAX-parameter eller möjligen att det är lägre än kärnans SHMMIN-parameter.\n" "PostgreSQLs dokumentation innehåller mer information om konfigueration av delat minne." -#: port/pg_shmem.c:235 port/sysv_shmem.c:235 +#: port/pg_shmem.c:236 port/sysv_shmem.c:236 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" @@ -19052,7 +19613,7 @@ msgstr "" "Felet betyder vanligen att PostgreSQLs begäran av delat minnessegment överskred kärnans SHMALL-parameter. Du kan behöva rekonfigurera kärnan med ett större SHMALL.\n" "PostgreSQLs dokumentation innehåller mer information om konfigueration av delat minne." -#: port/pg_shmem.c:241 port/sysv_shmem.c:241 +#: port/pg_shmem.c:242 port/sysv_shmem.c:242 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" @@ -19061,59 +19622,59 @@ msgstr "" "Felet betyder *inte* att diskutrymmet tagit slut. Felet sker aningen om alla tillgängliga ID-nummer för delat minne tagit slut och då behöver du öka kärnans SHMMNI-parameter eller för att systemets totala gräns för delat minne ha nåtts.\n" "PostgreSQLs dokumentation innehåller mer information om konfigueration av delat minne." -#: port/pg_shmem.c:583 port/sysv_shmem.c:583 port/win32_shmem.c:641 +#: port/pg_shmem.c:584 port/sysv_shmem.c:584 port/win32_shmem.c:646 #, c-format -msgid "huge_page_size must be 0 on this platform." -msgstr "huge_page_size måste vara 0 på denna plattform." +msgid "\"huge_page_size\" must be 0 on this platform." +msgstr "\"huge_page_size\" måste vara 0 på denna plattform." -#: port/pg_shmem.c:646 port/sysv_shmem.c:646 +#: port/pg_shmem.c:655 port/sysv_shmem.c:655 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "kunde inte mappa anonymt delat minne: %m" -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:657 port/sysv_shmem.c:657 #, c-format -msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." -msgstr "Detta fel betyder vanligtvis att PostgreSQL:s begäran av delat minnessegment överskrider mängden tillgängligt minne, swap eller stora sidor. För att minska begärd storlek (nu %zu byte) minska PostgreSQL:s användning av delat minne t.ex. genom att dra ner på shared_buffers eller max_connections." +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing \"shared_buffers\" or \"max_connections\"." +msgstr "Detta fel betyder vanligtvis att PostgreSQL:s begäran av delat minnessegment överskrider mängden tillgängligt minne, swap eller stora sidor. För att minska begärd storlek (nu %zu byte) minska PostgreSQL:s användning av delat minne t.ex. genom att dra ner på \"shared_buffers\" eller \"max_connections\"." -#: port/pg_shmem.c:716 port/sysv_shmem.c:716 +#: port/pg_shmem.c:725 port/sysv_shmem.c:725 #, c-format msgid "huge pages not supported on this platform" msgstr "stora sidor stöds inte på denna plattform" -#: port/pg_shmem.c:723 port/sysv_shmem.c:723 +#: port/pg_shmem.c:732 port/sysv_shmem.c:732 #, c-format -msgid "huge pages not supported with the current shared_memory_type setting" -msgstr "stora sidor stöds inte vid nuvarande inställning av shared_memory_type" +msgid "huge pages not supported with the current \"shared_memory_type\" setting" +msgstr "stora sidor stöds inte vid nuvarande inställning av \"shared_memory_type\"" -#: port/pg_shmem.c:783 port/sysv_shmem.c:783 utils/init/miscinit.c:1351 +#: 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 "redan existerande delat minnesblock (nyckel %lu, ID %lu) används fortfarande" -#: port/pg_shmem.c:786 port/sysv_shmem.c:786 utils/init/miscinit.c:1353 +#: 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 "Stäng ner gamla serverprocesser som hör ihop med datakatalogen \"%s\"." -#: port/sysv_sema.c:120 +#: port/sysv_sema.c:126 #, c-format msgid "could not create semaphores: %m" msgstr "kan inte skapa semafor: %m" -#: port/sysv_sema.c:121 +#: port/sysv_sema.c:127 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "Misslyckade systemanropet var 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" +"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 "Detta fel betyder *inte* att disken blivit full. Detta fel kommer när systemgränsen för maximalt antal semaforvektorer (SEMMNI) överskridits eller när systemets globala maximum för semaforer (SEMMNS) överskridits. Du behöver öka respektive kernel-parameter. Alternativt kan du minska PostgreSQL:s användning av semaforer genom att dra ner på parametern max_connections. PostgreSQL:s dokumentation innehåller mer information om hur du konfigurerar systemet för PostgreSQL." +msgstr "Detta fel betyder *inte* att disken blivit full. Detta fel kommer när systemgränsen för maximalt antal semaforvektorer (SEMMNI) överskridits eller när systemets globala maximum för semaforer (SEMMNS) överskridits. Du behöver öka respektive kernel-parameter. Alternativt kan du minska PostgreSQL:s användning av semaforer genom att dra ner på parametern \"max_connections\". PostgreSQL:s dokumentation innehåller mer information om hur du konfigurerar systemet för PostgreSQL." -#: 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 "Du kan behöva öka kärnans SEMVMX-värde till minst %d. Se PostgreSQL:s dokumentation för mer information." @@ -19238,972 +19799,877 @@ msgstr "Misslyckat systemanrop var DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Misslyckat systemanrop var MapViewOfFileEx." -#: postmaster/autovacuum.c:417 -#, c-format -msgid "could not fork autovacuum launcher process: %m" -msgstr "kunde inte starta autovacuum-process: %m" - -#: postmaster/autovacuum.c:764 +#: postmaster/autovacuum.c:686 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "autovacuum-arbetaren tog för lång tid på sig att starta; avbruten" -#: postmaster/autovacuum.c:1489 -#, c-format -msgid "could not fork autovacuum worker process: %m" -msgstr "kunde inte starta autovacuum-arbetsprocess: %m" - -#: postmaster/autovacuum.c:2334 +#: postmaster/autovacuum.c:2203 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: slänger övergiven temptabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2570 +#: postmaster/autovacuum.c:2439 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisk vacuum av tabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2573 +#: postmaster/autovacuum.c:2442 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisk analys av tabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2767 +#: postmaster/autovacuum.c:2636 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "processar arbetspost för relation \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3381 +#: postmaster/autovacuum.c:3254 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum har inte startats på grund av en felkonfigurering" -#: postmaster/autovacuum.c:3382 +#: postmaster/autovacuum.c:3255 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Slå på flaggan \"track_counts\"." -#: postmaster/bgworker.c:259 +#: postmaster/bgworker.c:260 #, c-format msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" msgstr "inkonsistent tillstånd i bakgrundsarbetare (max_worker_processes=%d, total_slots=%d)" -#: postmaster/bgworker.c:669 +#: postmaster/bgworker.c:651 #, c-format msgid "background worker \"%s\": background workers without shared memory access are not supported" msgstr "bakgrundsarbetare \"%s\": bakgrundsarbetare utan access till delat minne stöds inte" -#: postmaster/bgworker.c:680 +#: postmaster/bgworker.c:662 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "bakgrundsarbetare \"%s\" kan inte få databasaccess om den startar när postmaster startar" -#: postmaster/bgworker.c:694 +#: postmaster/bgworker.c:676 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "bakgrundsarbetare \"%s\": ogiltigt omstartsintervall" -#: postmaster/bgworker.c:709 +#: postmaster/bgworker.c:691 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "bakgrundsarbetare \"%s\": parallella arbetare kan inte konfigureras för omstart" -#: postmaster/bgworker.c:733 tcop/postgres.c:3255 +#: postmaster/bgworker.c:715 tcop/postgres.c:3312 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminerar bakgrundsarbetare \"%s\" pga administratörskommando" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:888 #, c-format -msgid "background worker \"%s\": must be registered in shared_preload_libraries" -msgstr "bakgrundsarbetare \"%s\": måste vara registrerad i shared_preload_libraries" +msgid "background worker \"%s\": must be registered in \"shared_preload_libraries\"" +msgstr "bakgrundsarbetare \"%s\": måste vara registrerad i \"shared_preload_libraries\"" -#: postmaster/bgworker.c:902 +#: postmaster/bgworker.c:911 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "bakgrundsarbetare \"%s\": bara dynamiska bakgrundsarbetare kan be om notifiering" -#: postmaster/bgworker.c:917 +#: postmaster/bgworker.c:926 #, c-format msgid "too many background workers" msgstr "för många bakgrundsarbetare" -#: postmaster/bgworker.c:918 +#: postmaster/bgworker.c:927 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Upp till %d bakgrundsarbetare kan registreras med nuvarande inställning." msgstr[1] "Upp till %d bakgrundsarbetare kan registreras med nuvarande inställning." -#: postmaster/bgworker.c:922 +#: postmaster/bgworker.c:931 postmaster/checkpointer.c:445 #, c-format -msgid "Consider increasing the configuration parameter \"max_worker_processes\"." -msgstr "Överväg att öka konfigurationsparametern \"max_worker_processes\"." +msgid "Consider increasing the configuration parameter \"%s\"." +msgstr "Överväg att öka konfigurationsparametern \"%s\"." -#: postmaster/checkpointer.c:431 +#: postmaster/checkpointer.c:441 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "checkpoint:s sker för ofta (%d sekund emellan)" msgstr[1] "checkpoint:s sker för ofta (%d sekunder emellan)" -#: postmaster/checkpointer.c:435 -#, c-format -msgid "Consider increasing the configuration parameter \"max_wal_size\"." -msgstr "Överväg att öka konfigurationsparametern \"max_wal_size\"." - -#: postmaster/checkpointer.c:1059 +#: postmaster/checkpointer.c:1067 #, c-format msgid "checkpoint request failed" msgstr "checkpoint-behgäran misslyckades" -#: postmaster/checkpointer.c:1060 +#: postmaster/checkpointer.c:1068 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Se senaste meddelanden i serverloggen för mer information." -#: postmaster/pgarch.c:416 +#: postmaster/launch_backend.c:381 +#, c-format +msgid "could not execute server process \"%s\": %m" +msgstr "kunde inte köra serverprocess \"%s\": %m" + +#: postmaster/launch_backend.c:434 +#, c-format +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "kunde inte skapa fil-mapping för backend-parametrar: felkod %lu" + +#: postmaster/launch_backend.c:442 +#, c-format +msgid "could not map backend parameter memory: error code %lu" +msgstr "kunde inte mappa minne för backend-parametrar: felkod %lu" + +#: postmaster/launch_backend.c:459 +#, c-format +msgid "subprocess command line too long" +msgstr "subprocessens kommando är för långt" + +#: postmaster/launch_backend.c:477 +#, c-format +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "Anrop till CreateProcess() misslyckades: %m (felkod %lu)" + +#: postmaster/launch_backend.c:504 +#, c-format +msgid "could not unmap view of backend parameter file: error code %lu" +msgstr "kunde inte avmappa vy för backend:ens parameterfil: felkod %lu" + +#: postmaster/launch_backend.c:508 +#, c-format +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "kunde inte stänga \"handle\" till backend:ens parameterfil: felkod %lu" + +#: postmaster/launch_backend.c:530 #, c-format -msgid "archive_mode enabled, yet archiving is not configured" -msgstr "archive_mode är påslagen, men ändå är arkivering inte konfigurerad" +msgid "giving up after too many tries to reserve shared memory" +msgstr "ger upp efter för många försök att reservera delat minne" + +#: postmaster/launch_backend.c:531 +#, c-format +msgid "This might be caused by ASLR or antivirus software." +msgstr "Detta kan orsakas av ASLR eller antivirusprogram." + +#: postmaster/launch_backend.c:834 +#, c-format +msgid "could not duplicate socket %d for use in backend: error code %d" +msgstr "kunde inte duplicera uttag (socket) %d för att använda i backend: felkod %d" + +#: postmaster/launch_backend.c:866 +#, c-format +msgid "could not create inherited socket: error code %d\n" +msgstr "kunde inte skapa ärvt uttag (socket): felkod %d\n" + +#: postmaster/launch_backend.c:895 +#, c-format +msgid "could not open backend variables file \"%s\": %m\n" +msgstr "kunde inte öppna bakändans variabelfil \"%s\": %m\n" + +#: postmaster/launch_backend.c:901 +#, c-format +msgid "could not read from backend variables file \"%s\": %m\n" +msgstr "kunde inte läsa från bakändans variabelfil \"%s\": %m\n" + +#: postmaster/launch_backend.c:912 +#, c-format +msgid "could not read startup data from backend variables file \"%s\": %m\n" +msgstr "kunde inte uppstartsdata från bakändans variabelfil \"%s\": %m\n" + +#: postmaster/launch_backend.c:924 +#, c-format +msgid "could not remove file \"%s\": %m\n" +msgstr "kunde inte ta bort fil \"%s\": %m\n" + +#: postmaster/launch_backend.c:940 +#, c-format +msgid "could not map view of backend variables: error code %lu\n" +msgstr "kunde inte mappa in vy för bakgrundsvariabler: felkod %lu\n" + +#: postmaster/launch_backend.c:959 +#, c-format +msgid "could not unmap view of backend variables: error code %lu\n" +msgstr "kunde inte avmappa vy för bakgrundsvariabler: felkod %lu\n" + +#: postmaster/launch_backend.c:966 +#, c-format +msgid "could not close handle to backend parameter variables: error code %lu\n" +msgstr "kunde inte stänga \"handle\" till backend:ens parametervariabler: felkod %lu\n" + +#: postmaster/pgarch.c:428 +#, c-format +msgid "\"archive_mode\" enabled, yet archiving is not configured" +msgstr "\"archive_mode\" är påslagen, men ändå är arkivering inte konfigurerad" -#: postmaster/pgarch.c:438 +#: postmaster/pgarch.c:452 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "tog bort övergiven arkivstatusfil \"%s\": %m" -#: postmaster/pgarch.c:448 +#: postmaster/pgarch.c:462 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "borttagning av övergiven arkivstatusfil \"%s\" misslyckades för många gånger, kommer försöka igen senare" -#: postmaster/pgarch.c:484 +#: postmaster/pgarch.c:498 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "arkivering av write-ahead-logg-fil \"%s\" misslyckades för många gånger, kommer försöka igen senare" -#: postmaster/pgarch.c:791 postmaster/pgarch.c:830 +#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 #, c-format -msgid "both archive_command and archive_library set" -msgstr "både archive_command och archive_library är satt" +msgid "both \"archive_command\" and \"archive_library\" set" +msgstr "både \"archive_command\" och \"archive_library\" är satt" -#: postmaster/pgarch.c:792 postmaster/pgarch.c:831 +#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 #, c-format -msgid "Only one of archive_command, archive_library may be set." -msgstr "Bara en av archive_command och archive_library får sättas." +msgid "Only one of \"archive_command\", \"archive_library\" may be set." +msgstr "Bara en av \"archive_command\" och \"archive_library\" får sättas." -#: postmaster/pgarch.c:809 +#: postmaster/pgarch.c:897 #, c-format msgid "restarting archiver process because value of \"archive_library\" was changed" msgstr "startar om arkiveringsprocess då värdet på \"archive_library\" har ändrats" -#: postmaster/pgarch.c:846 +#: postmaster/pgarch.c:934 #, c-format msgid "archive modules have to define the symbol %s" msgstr "arkiveringsmoduler måste definiera symbolen %s" -#: postmaster/pgarch.c:852 +#: postmaster/pgarch.c:940 #, c-format msgid "archive modules must register an archive callback" msgstr "arkiveringsmoduler måste registrera en arkiverings-callback" -#: postmaster/postmaster.c:759 +#: postmaster/postmaster.c:661 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ogiltigt argument till flagga -f: \"%s\"\n" -#: postmaster/postmaster.c:832 +#: postmaster/postmaster.c:734 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ogiltigt argument till flagga -t: \"%s\"\n" -#: postmaster/postmaster.c:855 +#: postmaster/postmaster.c:757 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ogiltigt argument: \"%s\"\n" -#: postmaster/postmaster.c:923 +#: postmaster/postmaster.c:825 +#, 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) måste vara mindre än \"max_connections\" (%d)\n" + +#: postmaster/postmaster.c:833 #, 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) måste vara mindre än max_connections (%d)\n" +msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" +msgstr "WAL-arkivering kan inte slås på när \"wal_level\" är \"minimal\"" -#: postmaster/postmaster.c:931 +#: postmaster/postmaster.c:836 #, c-format -msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" -msgstr "WAL-arkivering kan inte slås på när wal_level är \"minimal\"" +msgid "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be \"replica\" or \"logical\"" +msgstr "WAL-strömning (\"max_wal_senders\" > 0) kräver att \"wal_level\" är \"replica\" eller \"logical\"" -#: postmaster/postmaster.c:934 +#: postmaster/postmaster.c:839 #, c-format -msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" -msgstr "WAL-strömning (max_wal_senders > 0) kräver wal_level \"replica\" eller \"logical\"" +msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" +msgstr "WAL kan inte summeras när \"wal_level\" är \"minimal\"" -#: postmaster/postmaster.c:942 +#: postmaster/postmaster.c:847 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ogiltiga datumtokentabeller, det behöver lagas\n" -#: postmaster/postmaster.c:1099 +#: postmaster/postmaster.c:1004 #, c-format msgid "could not create I/O completion port for child queue" msgstr "kunde inte skapa \"I/O completion port\" för barnkö" -#: postmaster/postmaster.c:1175 +#: postmaster/postmaster.c:1069 #, c-format msgid "ending log output to stderr" msgstr "avslutar loggutmatning till stderr" -#: postmaster/postmaster.c:1176 +#: postmaster/postmaster.c:1070 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Framtida loggutmatning kommer gå till logg-destination \"%s\"." -#: postmaster/postmaster.c:1187 +#: postmaster/postmaster.c:1081 #, c-format msgid "starting %s" msgstr "startar %s" -#: postmaster/postmaster.c:1239 +#: postmaster/postmaster.c:1143 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "kunde inte skapa lyssnande uttag (socket) för \"%s\"" -#: postmaster/postmaster.c:1245 +#: postmaster/postmaster.c:1149 #, c-format msgid "could not create any TCP/IP sockets" msgstr "kunde inte skapa TCP/IP-uttag (socket)" -#: postmaster/postmaster.c:1277 +#: postmaster/postmaster.c:1181 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() misslyckades: felkod %ld" -#: postmaster/postmaster.c:1328 +#: postmaster/postmaster.c:1234 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "kunde inte skapa unix-domän-uttag (socket) i katalog \"%s\"" -#: postmaster/postmaster.c:1334 +#: postmaster/postmaster.c:1240 #, c-format msgid "could not create any Unix-domain sockets" msgstr "kunde inte skapa något Unix-domän-uttag (socket)" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1251 #, c-format msgid "no socket created for listening" msgstr "inget uttag (socket) skapat för lyssnande" -#: postmaster/postmaster.c:1376 +#: postmaster/postmaster.c:1282 #, c-format -msgid "%s: could not change permissions of external PID file \"%s\": %s\n" -msgstr "%s: kunde inte ändra rättigheter på extern PID-fil \"%s\": %s\n" +msgid "%s: could not change permissions of external PID file \"%s\": %m\n" +msgstr "%s: kunde inte ändra rättigheter på extern PID-fil \"%s\": %m\n" -#: postmaster/postmaster.c:1380 +#: postmaster/postmaster.c:1286 #, c-format -msgid "%s: could not write external PID file \"%s\": %s\n" -msgstr "%s: kunde inte skriva extern PID-fil \"%s\": %s\n" +msgid "%s: could not write external PID file \"%s\": %m\n" +msgstr "%s: kunde inte skriva extern PID-fil \"%s\": %m\n" #. translator: %s is a configuration file -#: postmaster/postmaster.c:1408 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1314 utils/init/postinit.c:221 #, c-format msgid "could not load %s" msgstr "kunde inte ladda \"%s\"" -#: postmaster/postmaster.c:1434 +#: postmaster/postmaster.c:1342 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster blev flertrådad under uppstart" -#: postmaster/postmaster.c:1435 +#: postmaster/postmaster.c:1343 postmaster/postmaster.c:3684 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Sätt omgivningsvariabeln LC_ALL till en giltig lokal." -#: postmaster/postmaster.c:1536 +#: postmaster/postmaster.c:1442 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: kunde inte hitta min egna körbara fils sökväg" -#: postmaster/postmaster.c:1543 +#: postmaster/postmaster.c:1449 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: kunde inte hitta matchande postgres-binär" -#: postmaster/postmaster.c:1566 utils/misc/tzparser.c:340 +#: 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 "Detta tyder på en inkomplett PostgreSQL-installation alternativt att filen \"%s\" har flyttats bort från sin korrekta plats." -#: postmaster/postmaster.c:1593 +#: postmaster/postmaster.c:1499 #, c-format msgid "" "%s: could not find the database system\n" "Expected to find it in the directory \"%s\",\n" -"but could not open file \"%s\": %s\n" +"but could not open file \"%s\": %m\n" msgstr "" "%s: kunde inte hitta databassystemet\n" "Förväntade mig att hitta det i katalogen \"%s\",\n" -"men kunde inte öppna filen \"%s\": %s\n" +"men kunde inte öppna filen \"%s\": %m\n" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1890 +#: postmaster/postmaster.c:1789 #, c-format msgid "issuing %s to recalcitrant children" msgstr "skickar %s till motsträviga barn" -#: postmaster/postmaster.c:1912 +#: postmaster/postmaster.c:1811 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "stänger ner omedelbart då datakatalogens låsfil är ogiltig" -#: postmaster/postmaster.c:1987 postmaster/postmaster.c:2015 -#, c-format -msgid "incomplete startup packet" -msgstr "ofullständigt startuppaket" - -#: postmaster/postmaster.c:1999 postmaster/postmaster.c:2032 -#, c-format -msgid "invalid length of startup packet" -msgstr "ogiltig längd på startuppaket" - -#: postmaster/postmaster.c:2061 -#, c-format -msgid "failed to send SSL negotiation response: %m" -msgstr "misslyckades att skicka SSL-förhandlingssvar: %m" - -#: postmaster/postmaster.c:2079 -#, c-format -msgid "received unencrypted data after SSL request" -msgstr "tog emot okrypterad data efter SSL-förfrågan" - -#: postmaster/postmaster.c:2080 postmaster/postmaster.c:2124 -#, c-format -msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." -msgstr "Detta kan antingen vara en bug i klientens mjukvara eller bevis på ett försök att utföra en attack av typen man-in-the-middle." - -#: postmaster/postmaster.c:2105 -#, c-format -msgid "failed to send GSSAPI negotiation response: %m" -msgstr "misslyckades att skicka GSSAPI-förhandlingssvar: %m" - -#: postmaster/postmaster.c:2123 -#, c-format -msgid "received unencrypted data after GSSAPI encryption request" -msgstr "tog emot okrypterad data efter GSSAPI-krypteringsförfrågan" - -#: postmaster/postmaster.c:2147 -#, c-format -msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" -msgstr "inget stöd för framändans protokoll %u.%u: servern stöder %u.0 till %u.%u" - -#: postmaster/postmaster.c:2214 -#, c-format -msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." -msgstr "Giltiga värden är: \"false\", 0, \"true\", 1, \"database\"." - -#: postmaster/postmaster.c:2255 -#, c-format -msgid "invalid startup packet layout: expected terminator as last byte" -msgstr "ogiltig startpaketlayout: förväntade en terminator som sista byte" - -#: postmaster/postmaster.c:2272 -#, c-format -msgid "no PostgreSQL user name specified in startup packet" -msgstr "inget PostgreSQL-användarnamn angivet i startuppaketet" - -#: postmaster/postmaster.c:2336 -#, c-format -msgid "the database system is starting up" -msgstr "databassystemet startar upp" - -#: postmaster/postmaster.c:2342 -#, c-format -msgid "the database system is not yet accepting connections" -msgstr "databassystemet tar ännu inte emot anslutningar" - -#: postmaster/postmaster.c:2343 -#, c-format -msgid "Consistent recovery state has not been yet reached." -msgstr "Konsistent återställningstillstånd har ännu inte uppnåtts." - -#: postmaster/postmaster.c:2347 -#, c-format -msgid "the database system is not accepting connections" -msgstr "databassystemet tar inte emot anslutningar" - -#: postmaster/postmaster.c:2348 -#, c-format -msgid "Hot standby mode is disabled." -msgstr "Hot standby-läge är avstängt." - -#: postmaster/postmaster.c:2353 -#, c-format -msgid "the database system is shutting down" -msgstr "databassystemet stänger ner" - -#: postmaster/postmaster.c:2358 -#, c-format -msgid "the database system is in recovery mode" -msgstr "databassystemet är återställningsläge" - -#: postmaster/postmaster.c:2363 storage/ipc/procarray.c:491 -#: storage/ipc/sinvaladt.c:306 storage/lmgr/proc.c:353 -#, c-format -msgid "sorry, too many clients already" -msgstr "ledsen, för många klienter" - -#: postmaster/postmaster.c:2450 +#: postmaster/postmaster.c:1874 #, c-format msgid "wrong key in cancel request for process %d" msgstr "fel nyckel i avbrytbegäran för process %d" -#: postmaster/postmaster.c:2462 +#: postmaster/postmaster.c:1886 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d i avbrytbegäran matchade inte någon process" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2106 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "mottog SIGHUP, läser om konfigurationsfiler" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2753 postmaster/postmaster.c:2757 +#: postmaster/postmaster.c:2134 postmaster/postmaster.c:2138 #, c-format msgid "%s was not reloaded" msgstr "%s laddades inte om" -#: postmaster/postmaster.c:2767 +#: postmaster/postmaster.c:2148 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-konfiguration laddades inte om" -#: postmaster/postmaster.c:2857 +#: postmaster/postmaster.c:2234 #, c-format msgid "received smart shutdown request" msgstr "tog emot förfrågan om att stänga ner smart" -#: postmaster/postmaster.c:2898 +#: postmaster/postmaster.c:2275 #, c-format msgid "received fast shutdown request" msgstr "tog emot förfrågan om att stänga ner snabbt" -#: postmaster/postmaster.c:2916 +#: postmaster/postmaster.c:2293 #, c-format msgid "aborting any active transactions" msgstr "avbryter aktiva transaktioner" -#: postmaster/postmaster.c:2940 +#: postmaster/postmaster.c:2317 #, c-format msgid "received immediate shutdown request" msgstr "mottog begäran för omedelbar nedstängning" -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:2389 #, c-format msgid "shutdown at recovery target" msgstr "nedstängs vid återställningsmål" -#: postmaster/postmaster.c:3034 postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:2407 postmaster/postmaster.c:2443 msgid "startup process" msgstr "uppstartprocess" -#: postmaster/postmaster.c:3037 +#: postmaster/postmaster.c:2410 #, c-format msgid "aborting startup due to startup process failure" msgstr "avbryter uppstart på grund av fel i startprocessen" -#: postmaster/postmaster.c:3110 +#: postmaster/postmaster.c:2485 #, c-format msgid "database system is ready to accept connections" msgstr "databassystemet är redo att ta emot anslutningar" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:2506 msgid "background writer process" msgstr "bakgrundsskrivarprocess" -#: postmaster/postmaster.c:3178 +#: postmaster/postmaster.c:2553 msgid "checkpointer process" msgstr "checkpoint-process" -#: postmaster/postmaster.c:3194 +#: postmaster/postmaster.c:2569 msgid "WAL writer process" msgstr "WAL-skrivarprocess" -#: postmaster/postmaster.c:3209 +#: postmaster/postmaster.c:2584 msgid "WAL receiver process" msgstr "WAL-mottagarprocess" -#: postmaster/postmaster.c:3224 +#: postmaster/postmaster.c:2598 +msgid "WAL summarizer process" +msgstr "WAL-summeringsprocess" + +#: postmaster/postmaster.c:2613 msgid "autovacuum launcher process" msgstr "autovacuum-startprocess" -#: postmaster/postmaster.c:3242 +#: postmaster/postmaster.c:2631 msgid "archiver process" msgstr "arkiveringsprocess" -#: postmaster/postmaster.c:3255 +#: postmaster/postmaster.c:2644 msgid "system logger process" msgstr "system-logg-process" -#: postmaster/postmaster.c:3312 +#: postmaster/postmaster.c:2661 +msgid "slot sync worker process" +msgstr "arbetarprocess för slotsynkronisering" + +#: postmaster/postmaster.c:2717 #, c-format msgid "background worker \"%s\"" msgstr "bakgrundsarbetare \"%s\"" -#: postmaster/postmaster.c:3391 postmaster/postmaster.c:3411 -#: postmaster/postmaster.c:3418 postmaster/postmaster.c:3436 +#: postmaster/postmaster.c:2796 postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2823 postmaster/postmaster.c:2841 msgid "server process" msgstr "serverprocess" -#: postmaster/postmaster.c:3490 +#: postmaster/postmaster.c:2895 #, c-format msgid "terminating any other active server processes" msgstr "avslutar andra aktiva serverprocesser" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3665 +#: postmaster/postmaster.c:3082 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) avslutade med felkod %d" -#: postmaster/postmaster.c:3667 postmaster/postmaster.c:3679 -#: postmaster/postmaster.c:3689 postmaster/postmaster.c:3700 +#: 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 "Misslyckad process körde: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3676 +#: postmaster/postmaster.c:3093 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) terminerades av avbrott 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3686 +#: postmaster/postmaster.c:3103 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) terminerades av signal %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3698 +#: postmaster/postmaster.c:3115 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) avslutade med okänd status %d" -#: postmaster/postmaster.c:3906 +#: postmaster/postmaster.c:3331 #, c-format msgid "abnormal database system shutdown" msgstr "ej normal databasnedstängning" -#: postmaster/postmaster.c:3932 +#: postmaster/postmaster.c:3357 #, c-format msgid "shutting down due to startup process failure" msgstr "stänger ner på grund av fel i startprocessen" -#: postmaster/postmaster.c:3938 +#: postmaster/postmaster.c:3363 #, c-format -msgid "shutting down because restart_after_crash is off" -msgstr "stänger ner då restart_after_crash är av" +msgid "shutting down because \"restart_after_crash\" is off" +msgstr "stänger ner då \"restart_after_crash\" är av" -#: postmaster/postmaster.c:3950 +#: postmaster/postmaster.c:3375 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alla serverprocesser är avslutade; initierar på nytt" -#: postmaster/postmaster.c:4144 postmaster/postmaster.c:5462 -#: postmaster/postmaster.c:5860 +#: postmaster/postmaster.c:3574 postmaster/postmaster.c:3985 +#: postmaster/postmaster.c:4374 #, c-format msgid "could not generate random cancel key" msgstr "kunde inte skapa slumpad avbrytningsnyckel" -#: postmaster/postmaster.c:4206 +#: postmaster/postmaster.c:3607 #, c-format msgid "could not fork new process for connection: %m" msgstr "kunde inte fork():a ny process for uppkoppling: %m" -#: postmaster/postmaster.c:4248 +#: postmaster/postmaster.c:3649 msgid "could not fork new process for connection: " msgstr "kunde inte fork():a ny process for uppkoppling: " -#: postmaster/postmaster.c:4354 +#: postmaster/postmaster.c:3683 #, c-format -msgid "connection received: host=%s port=%s" -msgstr "ansluting mottagen: värd=%s port=%s" +msgid "postmaster became multithreaded" +msgstr "postmaster blev flertrådad" -#: postmaster/postmaster.c:4359 +#: postmaster/postmaster.c:3752 #, c-format -msgid "connection received: host=%s" -msgstr "ansluting mottagen: värd=%s" +msgid "database system is ready to accept read-only connections" +msgstr "databassystemet är redo att ta emot read-only-anslutningar" -#: postmaster/postmaster.c:4596 +#: postmaster/postmaster.c:3935 #, c-format -msgid "could not execute server process \"%s\": %m" -msgstr "kunde inte köra serverprocess \"%s\": %m" +msgid "could not fork \"%s\" process: %m" +msgstr "kunde inte fork:a \"%s\"-process: %m" -#: postmaster/postmaster.c:4654 -#, c-format -msgid "could not create backend parameter file mapping: error code %lu" -msgstr "kunde inte skapa fil-mapping för backend-parametrar: felkod %lu" - -#: postmaster/postmaster.c:4663 -#, c-format -msgid "could not map backend parameter memory: error code %lu" -msgstr "kunde inte mappa minne för backend-parametrar: felkod %lu" - -#: postmaster/postmaster.c:4690 -#, c-format -msgid "subprocess command line too long" -msgstr "subprocessens kommando är för långt" - -#: postmaster/postmaster.c:4708 -#, c-format -msgid "CreateProcess() call failed: %m (error code %lu)" -msgstr "Anrop till CreateProcess() misslyckades: %m (felkod %lu)" - -#: postmaster/postmaster.c:4735 -#, c-format -msgid "could not unmap view of backend parameter file: error code %lu" -msgstr "kunde inte avmappa vy för backend:ens parameterfil: felkod %lu" - -#: postmaster/postmaster.c:4739 -#, c-format -msgid "could not close handle to backend parameter file: error code %lu" -msgstr "kunde inte stänga \"handle\" till backend:ens parameterfil: felkod %lu" - -#: postmaster/postmaster.c:4761 -#, c-format -msgid "giving up after too many tries to reserve shared memory" -msgstr "ger upp efter för många försök att reservera delat minne" - -#: postmaster/postmaster.c:4762 -#, c-format -msgid "This might be caused by ASLR or antivirus software." -msgstr "Detta kan orsakas av ASLR eller antivirusprogram." - -#: postmaster/postmaster.c:4935 -#, c-format -msgid "SSL configuration could not be loaded in child process" -msgstr "SSL-konfigurering kunde inte laddas i barnprocess" - -#: postmaster/postmaster.c:5060 -#, c-format -msgid "Please report this to <%s>." -msgstr "Rapportera gärna detta till <%s>." - -#: postmaster/postmaster.c:5128 -#, c-format -msgid "database system is ready to accept read-only connections" -msgstr "databassystemet är redo att ta emot read-only-anslutningar" - -#: postmaster/postmaster.c:5386 -#, c-format -msgid "could not fork startup process: %m" -msgstr "kunde inte starta startup-processen: %m" - -#: postmaster/postmaster.c:5390 -#, c-format -msgid "could not fork archiver process: %m" -msgstr "kunde inte fork:a arkivprocess: %m" - -#: postmaster/postmaster.c:5394 -#, c-format -msgid "could not fork background writer process: %m" -msgstr "kunde inte starta process för bakgrundsskrivare: %m" - -#: postmaster/postmaster.c:5398 -#, c-format -msgid "could not fork checkpointer process: %m" -msgstr "kunde inte fork:a bakgrundsprocess: %m" - -#: postmaster/postmaster.c:5402 -#, c-format -msgid "could not fork WAL writer process: %m" -msgstr "kunde inte fork:a WAL-skrivprocess: %m" - -#: postmaster/postmaster.c:5406 -#, c-format -msgid "could not fork WAL receiver process: %m" -msgstr "kunde inte fork:a WAL-mottagarprocess: %m" - -#: postmaster/postmaster.c:5410 -#, c-format -msgid "could not fork process: %m" -msgstr "kunde inte fork:a process: %m" - -#: postmaster/postmaster.c:5611 postmaster/postmaster.c:5638 +#: postmaster/postmaster.c:4173 postmaster/postmaster.c:4207 #, c-format msgid "database connection requirement not indicated during registration" msgstr "krav på databasanslutning fanns inte med vid registering" -#: postmaster/postmaster.c:5622 postmaster/postmaster.c:5649 +#: postmaster/postmaster.c:4183 postmaster/postmaster.c:4217 #, c-format msgid "invalid processing mode in background worker" msgstr "ogiltigt processläge i bakgrundsarbetare" -#: postmaster/postmaster.c:5734 -#, c-format -msgid "could not fork worker process: %m" -msgstr "kunde inte starta (fork) arbetarprocess: %m" - -#: postmaster/postmaster.c:5846 -#, c-format -msgid "no slot available for new worker process" -msgstr "ingen slot tillgänglig för ny arbetsprocess" - -#: postmaster/postmaster.c:6177 -#, c-format -msgid "could not duplicate socket %d for use in backend: error code %d" -msgstr "kunde inte duplicera uttag (socket) %d för att använda i backend: felkod %d" - -#: postmaster/postmaster.c:6209 -#, c-format -msgid "could not create inherited socket: error code %d\n" -msgstr "kunde inte skapa ärvt uttag (socket): felkod %d\n" - -#: postmaster/postmaster.c:6238 -#, c-format -msgid "could not open backend variables file \"%s\": %s\n" -msgstr "kunde inte öppna bakändans variabelfil \"%s\": %s\n" - -#: postmaster/postmaster.c:6245 -#, c-format -msgid "could not read from backend variables file \"%s\": %s\n" -msgstr "kunde inte läsa från bakändans variabelfil \"%s\": %s\n" - -#: postmaster/postmaster.c:6254 -#, c-format -msgid "could not remove file \"%s\": %s\n" -msgstr "kunde inte ta bort fil \"%s\": %s\n" - -#: postmaster/postmaster.c:6271 -#, c-format -msgid "could not map view of backend variables: error code %lu\n" -msgstr "kunde inte mappa in vy för bakgrundsvariabler: felkod %lu\n" - -#: postmaster/postmaster.c:6280 +#: postmaster/postmaster.c:4277 #, c-format -msgid "could not unmap view of backend variables: error code %lu\n" -msgstr "kunde inte avmappa vy för bakgrundsvariabler: felkod %lu\n" +msgid "could not fork background worker process: %m" +msgstr "kunde inte fork:a process för bakgrundsarbete: %m" -#: postmaster/postmaster.c:6287 +#: postmaster/postmaster.c:4360 #, c-format -msgid "could not close handle to backend parameter variables: error code %lu\n" -msgstr "kunde inte stänga \"handle\" till backend:ens parametervariabler: felkod %lu\n" +msgid "no slot available for new background worker process" +msgstr "ingen slot tillgänglig till ny process för bakgrundsarbete" -#: postmaster/postmaster.c:6446 +#: postmaster/postmaster.c:4623 #, c-format msgid "could not read exit code for process\n" msgstr "kunde inte läsa avslutningskod för process\n" -#: postmaster/postmaster.c:6488 +#: postmaster/postmaster.c:4665 #, c-format msgid "could not post child completion status\n" msgstr "kunde inte skicka barnets avslutningsstatus\n" -#: postmaster/syslogger.c:501 postmaster/syslogger.c:1222 +#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 #, c-format msgid "could not read from logger pipe: %m" msgstr "kunde inte läsa från loggrör (pipe): %m" -#: postmaster/syslogger.c:598 postmaster/syslogger.c:612 +#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 #, c-format msgid "could not create pipe for syslog: %m" msgstr "kunde inte skapa rör (pipe) för syslog: %m" -#: postmaster/syslogger.c:677 +#: postmaster/syslogger.c:712 #, c-format msgid "could not fork system logger: %m" msgstr "kunde inte fork:a systemloggaren: %m" -#: postmaster/syslogger.c:713 +#: postmaster/syslogger.c:731 #, c-format msgid "redirecting log output to logging collector process" msgstr "omdirigerar loggutmatning till logginsamlingsprocess" -#: postmaster/syslogger.c:714 +#: postmaster/syslogger.c:732 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "Framtida loggutmatning kommer dyka upp i katalog \"%s\"." -#: postmaster/syslogger.c:722 +#: postmaster/syslogger.c:740 #, c-format msgid "could not redirect stdout: %m" msgstr "kunde inte omdirigera stdout: %m" -#: postmaster/syslogger.c:727 postmaster/syslogger.c:744 +#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 #, c-format msgid "could not redirect stderr: %m" msgstr "kunde inte omdirigera stderr: %m" -#: postmaster/syslogger.c:1177 +#: postmaster/syslogger.c:1128 #, c-format -msgid "could not write to log file: %s\n" -msgstr "kunde inte skriva till loggfil: %s\n" +msgid "could not write to log file: %m\n" +msgstr "kunde inte skriva till loggfil: %m\n" -#: postmaster/syslogger.c:1295 +#: postmaster/syslogger.c:1246 #, c-format msgid "could not open log file \"%s\": %m" msgstr "kunde inte öppna loggfil \"%s\": %m" -#: postmaster/syslogger.c:1385 +#: postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "stänger av automatisk rotation (använd SIGHUP för att slå på igen)" -#: regex/regc_pg_locale.c:242 +#: postmaster/walsummarizer.c:740 +#, c-format +msgid "WAL summarization is not progressing" +msgstr "WAL-summering avancerar inte" + +#: 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 "Summering krävs till %X/%X men har fastnat vid %X/%X på disk och vid %X/%X i minnet." + +#: 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] "väntar fortfarande på WAL-summering till %X/%X efter %ld sekund" +msgstr[1] "väntar fortfarande på WAL-summering till %X/%X efter %ld sekunder" + +#: postmaster/walsummarizer.c:760 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "Summering har nått %X/%X på disk och %X/%X i minnet." + +#: postmaster/walsummarizer.c:1000 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "kunde inte hitta en giltig post efter %X/%X" + +#: postmaster/walsummarizer.c:1045 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X: %s" +msgstr "kunde inte läsa WAL från tidslinje %u vid %X/%X: %s" + +#: postmaster/walsummarizer.c:1051 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X" +msgstr "kunde inte läsa WAL från tidslinje %u vid %X/%X" + +#: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "kunde inte bestämma vilken jämförelse (collation) som skall användas för reguljära uttryck" -#: regex/regc_pg_locale.c:265 +#: regex/regc_pg_locale.c:262 #, c-format msgid "nondeterministic collations are not supported for regular expressions" msgstr "ickedeterministiska jämförelser (collation) stöds inte för reguljära uttryck" -#: repl_gram.y:301 repl_gram.y:333 +#: repl_gram.y:318 repl_gram.y:359 #, c-format msgid "invalid timeline %u" msgstr "ogiltig tidslinje %u" -#: repl_scanner.l:152 +#: repl_scanner.l:154 msgid "invalid streaming start location" msgstr "ogiltig startposition för strömning" -#: replication/libpqwalreceiver/libpqwalreceiver.c:197 -#: replication/libpqwalreceiver/libpqwalreceiver.c:280 +#: replication/libpqwalreceiver/libpqwalreceiver.c:267 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 #, c-format msgid "password is required" msgstr "lösenord krävs" -#: replication/libpqwalreceiver/libpqwalreceiver.c:198 +#: replication/libpqwalreceiver/libpqwalreceiver.c:268 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." msgstr "Icke superanvändare kan inte ansluta till servern om den inte kräver lösenord." -#: replication/libpqwalreceiver/libpqwalreceiver.c:199 +#: replication/libpqwalreceiver/libpqwalreceiver.c:269 #, c-format msgid "Target server's authentication method must be changed, or set password_required=false in the subscription parameters." msgstr "Målserverns autentiseringsmetod måste ändras eller så måste man sätta password_required=false i prenumerationens parametrar." -#: replication/libpqwalreceiver/libpqwalreceiver.c:211 +#: replication/libpqwalreceiver/libpqwalreceiver.c:285 #, c-format msgid "could not clear search path: %s" msgstr "kunde inte nollställa sökväg: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:257 +#: replication/libpqwalreceiver/libpqwalreceiver.c:331 +#: replication/libpqwalreceiver/libpqwalreceiver.c:517 #, c-format msgid "invalid connection string syntax: %s" msgstr "ogiltig anslutningssträngsyntax %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:281 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Non-superusers must provide a password in the connection string." msgstr "Icke superanvändare måste ange ett lösenord i anslutningssträngen." -#: replication/libpqwalreceiver/libpqwalreceiver.c:307 +#: replication/libpqwalreceiver/libpqwalreceiver.c:386 #, c-format msgid "could not parse connection string: %s" msgstr "kunde inte parsa anslutningssträng: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:380 +#: replication/libpqwalreceiver/libpqwalreceiver.c:459 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "kunde inte hämta databassystemidentifierare och tidslinje-ID från primära servern: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:392 -#: replication/libpqwalreceiver/libpqwalreceiver.c:635 +#: replication/libpqwalreceiver/libpqwalreceiver.c:476 +#: replication/libpqwalreceiver/libpqwalreceiver.c:763 #, c-format msgid "invalid response from primary server" msgstr "ogiltigt svar från primär server" -#: replication/libpqwalreceiver/libpqwalreceiver.c:393 +#: replication/libpqwalreceiver/libpqwalreceiver.c:477 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "Kunde inte identifiera system: fick %d rader och %d fält, förväntade %d rader och %d eller fler fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:478 -#: replication/libpqwalreceiver/libpqwalreceiver.c:485 -#: replication/libpqwalreceiver/libpqwalreceiver.c:515 +#: replication/libpqwalreceiver/libpqwalreceiver.c:606 +#: replication/libpqwalreceiver/libpqwalreceiver.c:613 +#: replication/libpqwalreceiver/libpqwalreceiver.c:643 #, c-format msgid "could not start WAL streaming: %s" msgstr "kunde inte starta WAL-strömning: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:667 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "kunde inte skicka meddelandet end-of-streaming till primären: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:562 +#: replication/libpqwalreceiver/libpqwalreceiver.c:690 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "oväntad resultatmängd efter end-of-streaming" -#: replication/libpqwalreceiver/libpqwalreceiver.c:577 +#: replication/libpqwalreceiver/libpqwalreceiver.c:705 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "fel vid nestängning av strömmande COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:587 +#: replication/libpqwalreceiver/libpqwalreceiver.c:715 #, c-format msgid "error reading result of streaming command: %s" msgstr "fel vid läsning av resultat från strömningskommando: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:596 -#: replication/libpqwalreceiver/libpqwalreceiver.c:832 +#: replication/libpqwalreceiver/libpqwalreceiver.c:724 +#: replication/libpqwalreceiver/libpqwalreceiver.c:957 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "oväntat resultat efter CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:623 +#: replication/libpqwalreceiver/libpqwalreceiver.c:751 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "kan inte ta emot fil med tidslinjehistorik från primära servern: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:636 +#: replication/libpqwalreceiver/libpqwalreceiver.c:764 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Förväntade 1 tupel med 2 fält, fick %d tupler med %d fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:795 -#: replication/libpqwalreceiver/libpqwalreceiver.c:848 -#: replication/libpqwalreceiver/libpqwalreceiver.c:855 +#: replication/libpqwalreceiver/libpqwalreceiver.c:920 +#: replication/libpqwalreceiver/libpqwalreceiver.c:973 +#: replication/libpqwalreceiver/libpqwalreceiver.c:980 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "kunde inte ta emot data från WAL-ström: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:875 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 #, c-format msgid "could not send data to WAL stream: %s" msgstr "kunde inte skicka data till WAL-ström: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:967 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "kunde inte skapa replikeringsslot \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1013 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#, c-format +msgid "could not alter replication slot \"%s\": %s" +msgstr "kunde inte ändra replikeringsslot \"%s\": %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 #, c-format msgid "invalid query response" msgstr "ogiltigt frågerespons" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1014 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Förväntade %d fält, fick %d fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1084 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 #, c-format msgid "the query interface requires a database connection" msgstr "frågeinterface:et kräver en databasanslutning" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1115 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 msgid "empty query" msgstr "tom fråga" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1121 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 msgid "unexpected pipeline mode" msgstr "oväntat pipeline-läge" @@ -20212,189 +20678,205 @@ msgstr "oväntat pipeline-läge" msgid "logical replication parallel apply worker for subscription \"%s\" has finished" msgstr "logisk replikerings parallella ändringsapplicerare för prenumeration \"%s\" har avslutat" -#: replication/logical/applyparallelworker.c:825 +#: replication/logical/applyparallelworker.c:822 #, c-format msgid "lost connection to the logical replication apply worker" msgstr "tappade anslutning till den logiska replikeringens ändringsapplicerare" -#: replication/logical/applyparallelworker.c:1027 -#: replication/logical/applyparallelworker.c:1029 +#: replication/logical/applyparallelworker.c:1024 +#: replication/logical/applyparallelworker.c:1026 msgid "logical replication parallel apply worker" msgstr "logisk replikerings ändringsapplicerare" -#: replication/logical/applyparallelworker.c:1043 +#: replication/logical/applyparallelworker.c:1040 #, c-format msgid "logical replication parallel apply worker exited due to error" msgstr "logiska replikeringens ändringsappliceraren avslutade på grund av ett fel" -#: replication/logical/applyparallelworker.c:1130 -#: replication/logical/applyparallelworker.c:1303 +#: replication/logical/applyparallelworker.c:1127 +#: replication/logical/applyparallelworker.c:1300 #, c-format msgid "lost connection to the logical replication parallel apply worker" msgstr "tappade anslutning till den logiska replikeringens parallella ändringsapplicerare" -#: replication/logical/applyparallelworker.c:1183 +#: replication/logical/applyparallelworker.c:1180 #, c-format msgid "could not send data to shared-memory queue" msgstr "kunde inte skicka data till kö i delat minne" -#: replication/logical/applyparallelworker.c:1218 +#: replication/logical/applyparallelworker.c:1215 #, c-format msgid "logical replication apply worker will serialize the remaining changes of remote transaction %u to a file" msgstr "logiska replikeringens ändringsapplicerare kommer spara ner återstående ändringarna av fjärrtransaktion %u til en fil" -#: replication/logical/decode.c:180 replication/logical/logical.c:140 +#: replication/logical/decode.c:177 replication/logical/logical.c:141 #, c-format -msgid "logical decoding on standby requires wal_level >= logical on the primary" -msgstr "logisk avkodning på standby kräver wal_level >= logical på primären" +msgid "logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary" +msgstr "logisk avkodning på standby kräver \"wal_level\" >= \"logical\" på primären" -#: replication/logical/launcher.c:331 +#: replication/logical/launcher.c:334 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "kan inte starta logisk replikeringsarbetare när max_replication_slots = 0" -#: replication/logical/launcher.c:424 +#: replication/logical/launcher.c:427 #, c-format msgid "out of logical replication worker slots" msgstr "slut på logiska replikeringsarbetarslots" -#: replication/logical/launcher.c:425 replication/logical/launcher.c:499 -#: replication/slot.c:1297 storage/lmgr/lock.c:964 storage/lmgr/lock.c:1002 -#: storage/lmgr/lock.c:2787 storage/lmgr/lock.c:4172 storage/lmgr/lock.c:4237 -#: storage/lmgr/lock.c:4587 storage/lmgr/predicate.c:2413 -#: storage/lmgr/predicate.c:2428 storage/lmgr/predicate.c:3825 +#: 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 "Du kan behöva öka %s." +msgid "You might need to increase \"%s\"." +msgstr "Du kan behöva öka \"%s\"." -#: replication/logical/launcher.c:498 +#: replication/logical/launcher.c:513 #, c-format msgid "out of background worker slots" msgstr "slut på bakgrundsarbetarslots" -#: replication/logical/launcher.c:705 +#: replication/logical/launcher.c:720 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "logisk replikeringsarbetarslot %d är tom, kan inte ansluta" -#: replication/logical/launcher.c:714 +#: replication/logical/launcher.c:729 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "logiisk replikeringsarbetarslot %d används redan av en annan arbetare, kan inte ansluta" -#: replication/logical/logical.c:120 +#: replication/logical/logical.c:121 #, c-format -msgid "logical decoding requires wal_level >= logical" -msgstr "logisk avkodning kräver wal_level >= logical" +msgid "logical decoding requires \"wal_level\" >= \"logical\"" +msgstr "logisk avkodning kräver \"wal_level\" >= \"logical\"" -#: replication/logical/logical.c:125 +#: replication/logical/logical.c:126 #, c-format msgid "logical decoding requires a database connection" msgstr "logisk avkodning kräver en databasanslutning" -#: replication/logical/logical.c:363 replication/logical/logical.c:517 +#: replication/logical/logical.c:365 replication/logical/logical.c:519 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "kan inte använda fysisk replikeringsslot för logisk avkodning" -#: replication/logical/logical.c:368 replication/logical/logical.c:522 +#: replication/logical/logical.c:370 replication/logical/logical.c:529 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "replikeringsslot \"%s\" har inte skapats i denna databasen" -#: replication/logical/logical.c:375 +#: replication/logical/logical.c:377 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "kan inte skapa logisk replikeringsslot i transaktion som redan har utfört skrivningar" -#: replication/logical/logical.c:534 replication/logical/logical.c:541 +#: replication/logical/logical.c:540 +#, c-format +msgid "cannot use replication slot \"%s\" for logical decoding" +msgstr "kan inte använda replikeringsslot \"%s\" för logisk avkodning" + +#: replication/logical/logical.c:542 replication/slot.c:798 +#: replication/slot.c:829 +#, c-format +msgid "This replication slot is being synchronized from the primary server." +msgstr "Denna replikeringsslot synkroniseras från primära servern." + +#: replication/logical/logical.c:543 +#, c-format +msgid "Specify another replication slot." +msgstr "Ange en annan replikeringsslot." + +#: replication/logical/logical.c:554 replication/logical/logical.c:561 #, c-format msgid "can no longer get changes from replication slot \"%s\"" msgstr "kan inte längre få ändringar från replikeringsslot \"%s\"" -#: replication/logical/logical.c:536 +#: replication/logical/logical.c:556 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Denna slot har invaliderats då den överskred maximal reserverad storlek." -#: replication/logical/logical.c:543 +#: replication/logical/logical.c:563 #, c-format msgid "This slot has been invalidated because it was conflicting with recovery." msgstr "Denna slot har invaliderats den var i konflikt med återställningen." -#: replication/logical/logical.c:608 +#: replication/logical/logical.c:628 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "startar logisk avkodning för slot \"%s\"" -#: replication/logical/logical.c:610 +#: replication/logical/logical.c:630 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Strömmar transaktioner commit:ade efter %X/%X, läser WAL från %X/%X" -#: replication/logical/logical.c:758 +#: replication/logical/logical.c:778 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "slot \"%s\", utdata-plugin \"%s\", i callback:en %s, associerad LSN %X/%X" -#: replication/logical/logical.c:764 +#: replication/logical/logical.c:784 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "slot \"%s\", utdata-plugin \"%s\", i callback:en %s" -#: replication/logical/logical.c:935 replication/logical/logical.c:980 -#: replication/logical/logical.c:1025 replication/logical/logical.c:1071 +#: 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 "logisk replikering vid prepare-tillfället kräver en %s-callback" -#: replication/logical/logical.c:1303 replication/logical/logical.c:1352 -#: replication/logical/logical.c:1393 replication/logical/logical.c:1479 -#: replication/logical/logical.c:1528 +#: 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 "logisk strömning kräven en %s-callback" -#: replication/logical/logical.c:1438 +#: replication/logical/logical.c:1458 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "logisk strömning vid prepare-tillfället kräver en %s-callback" -#: replication/logical/logicalfuncs.c:126 +#: replication/logical/logicalfuncs.c:123 #, c-format msgid "slot name must not be null" msgstr "slot-namn får inte vara null" -#: replication/logical/logicalfuncs.c:142 +#: replication/logical/logicalfuncs.c:139 #, c-format msgid "options array must not be null" msgstr "flagg-array får inte vara null" -#: replication/logical/logicalfuncs.c:159 +#: replication/logical/logicalfuncs.c:156 #, c-format msgid "array must be one-dimensional" msgstr "array:en måste vara endimensionell" -#: replication/logical/logicalfuncs.c:165 +#: replication/logical/logicalfuncs.c:162 #, c-format msgid "array must not contain nulls" msgstr "array:en får inte innehålla null" -#: replication/logical/logicalfuncs.c:180 utils/adt/json.c:1484 -#: utils/adt/jsonb.c:1403 +#: 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 "array:en måste ha ett jämnt antal element" -#: replication/logical/logicalfuncs.c:227 +#: replication/logical/logicalfuncs.c:224 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "utdata-plugin \"%s\" för logisk avkodning producerar binär utdata men funktionen \"%s\" förväntar sig textdata" #: replication/logical/origin.c:190 #, c-format -msgid "cannot query or manipulate replication origin when max_replication_slots = 0" -msgstr "kan inte se eller ändra replikeringskällor när max_replication_slots = 0" +msgid "cannot query or manipulate replication origin when \"max_replication_slots\" is 0" +msgstr "kan inte se eller ändra replikeringskällor när \"max_replication_slots\" är 0" #: replication/logical/origin.c:195 #, c-format @@ -20428,8 +20910,8 @@ msgstr "replikeringscheckpoint har fel magiskt tal %u istället för %u" #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase max_replication_slots" -msgstr "kunde inte hitta ledig replikeringsplats, öka max_replication_slots" +msgid "could not find free replication state, increase \"max_replication_slots\"" +msgstr "kunde inte hitta ledig replikeringsplats, öka \"max_replication_slots\"" #: replication/logical/origin.c:806 #, c-format @@ -20441,1233 +20923,1549 @@ msgstr "återställde replikeringstillstånd för nod %d till %X/%X" msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "replikeringsslot-checkpoint har felaktig kontrollsumma %u, förväntade %u" -#: replication/logical/origin.c:944 replication/logical/origin.c:1141 +#: replication/logical/origin.c:944 replication/logical/origin.c:1143 #, c-format msgid "replication origin with ID %d is already active for PID %d" msgstr "replikeringskälla med ID %d är redan aktiv för PID %d" -#: replication/logical/origin.c:955 replication/logical/origin.c:1153 +#: replication/logical/origin.c:955 replication/logical/origin.c:1156 #, c-format msgid "could not find free replication state slot for replication origin with ID %d" msgstr "kunde inte hitta ledig replikerings-state-slot för replikerings-origin med ID %d" -#: replication/logical/origin.c:957 replication/logical/origin.c:1155 -#: replication/slot.c:2093 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 +#: replication/slot.c:2384 #, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Öka max_replication_slots och försök igen." +msgid "Increase \"max_replication_slots\" and try again." +msgstr "Öka \"max_replication_slots\" och försök igen." -#: replication/logical/origin.c:1112 +#: replication/logical/origin.c:1114 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "kan inte ställa in replikeringskälla när en redan är inställd" -#: replication/logical/origin.c:1196 replication/logical/origin.c:1412 -#: replication/logical/origin.c:1432 +#: replication/logical/origin.c:1199 replication/logical/origin.c:1415 +#: replication/logical/origin.c:1435 #, c-format msgid "no replication origin is configured" msgstr "ingen replikeringskälla är konfigurerad" -#: replication/logical/origin.c:1282 +#: replication/logical/origin.c:1285 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "replikeringskällnamn \"%s\" är reserverat" -#: replication/logical/origin.c:1284 +#: replication/logical/origin.c:1287 #, c-format msgid "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." msgstr "Källnamn \"%s\", \"%s\" och namn som startar med \"pg_\" är reserverade." -#: replication/logical/relation.c:240 +#: replication/logical/relation.c:242 #, c-format msgid "\"%s\"" msgstr "\"%s\"" -#: replication/logical/relation.c:243 +#: replication/logical/relation.c:245 #, c-format msgid ", \"%s\"" msgstr ", \"%s\"" -#: replication/logical/relation.c:249 +#: replication/logical/relation.c:251 #, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" msgstr[0] "destinationsrelation \"%s.%s\" för logisk replikering saknar en replikerad kolumn: %s" msgstr[1] "destinationsrelation \"%s.%s\" för logisk replikering saknar några replikerade kolumner: %s" -#: replication/logical/relation.c:304 +#: replication/logical/relation.c:306 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "destinationsrelation \"%s.%s\" för logisk replikering använder systemkolumner i REPLICA IDENTITY-index" -#: replication/logical/relation.c:396 +#: replication/logical/relation.c:398 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "destinationsrelation \"%s.%s\" för logisk replikering finns inte" -#: replication/logical/reorderbuffer.c:3936 +#: replication/logical/reorderbuffer.c:3999 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "kunde inte skriva till datafil för XID %u: %m" -#: replication/logical/reorderbuffer.c:4282 -#: replication/logical/reorderbuffer.c:4307 +#: replication/logical/reorderbuffer.c:4345 +#: replication/logical/reorderbuffer.c:4370 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "kunde inte läsa från reorderbuffer spill-fil: %m" -#: replication/logical/reorderbuffer.c:4286 -#: replication/logical/reorderbuffer.c:4311 +#: 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 "kunde inte läsa från reorderbuffer spill-fil: läste %d istället för %u byte" -#: replication/logical/reorderbuffer.c:4561 +#: replication/logical/reorderbuffer.c:4624 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "kunde inte radera fil \"%s\" vid borttagning av pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:5057 +#: replication/logical/reorderbuffer.c:5120 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "kunde inte läsa från fil \"%s\": läste %d istället för %d byte" -#: replication/logical/snapbuild.c:639 +#: replication/logical/slotsync.c:215 +#, c-format +msgid "could not synchronize replication slot \"%s\" because remote slot precedes local slot" +msgstr "kunde inte synkronisera replikeringsslot \"%s\" då fjärrslotten ligger tidigare än den lokala slotten" + +#: replication/logical/slotsync.c:217 +#, c-format +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 "Fjärrslotten har LSN %X/%X och katalog-xmin %u men lokala slotten har LSN %X/%X och katalog-xmin %u." + +#: replication/logical/slotsync.c:459 +#, c-format +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "slängde replikerings-slot \"%s\" för databas med OID %u" + +#: replication/logical/slotsync.c:579 +#, c-format +msgid "could not synchronize replication slot \"%s\"" +msgstr "kunde inte synkronisera replikeringsslot \"%s\"" + +#: replication/logical/slotsync.c:580 +#, c-format +msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X." +msgstr "Logisk avkodning kunde inte hitta en konsistent punkt från lokala slottens LSN %X/%X" + +#: replication/logical/slotsync.c:589 +#, c-format +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "nyskapad replikeringsslot \"%s\" är redo för synk nu" + +#: replication/logical/slotsync.c:628 +#, 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 "hoppar över slotsynkronisering då den mottagna slottens synk-LSN %X/%X för slot \"%s\" är längre fram än standby-positionen %X/%X" + +#: replication/logical/slotsync.c:650 +#, c-format +msgid "exiting from slot synchronization because same name slot \"%s\" already exists on the standby" +msgstr "avslutar slotsynkronisering då samma slotnamn \"%s\" redan finns på standby:en" + +#: replication/logical/slotsync.c:819 +#, c-format +msgid "could not fetch failover logical slots info from the primary server: %s" +msgstr "kan inte hämta logisk slot för failover från primära servern: %s" + +#: replication/logical/slotsync.c:965 +#, c-format +msgid "could not fetch primary_slot_name \"%s\" info from the primary server: %s" +msgstr "kan inte hämta info för primary_slot_name \"%s\" från primära servern: %s" + +#: replication/logical/slotsync.c:967 +#, c-format +msgid "Check if primary_slot_name is configured correctly." +msgstr "Kontrollera att primary_slot_name är korrekt konfigurerad." + +#: replication/logical/slotsync.c:987 +#, c-format +msgid "cannot synchronize replication slots from a standby server" +msgstr "kan inte synkronisera replikeringsslottar från en standby-server" + +#. translator: second %s is a GUC variable name +#: replication/logical/slotsync.c:996 +#, c-format +msgid "replication slot \"%s\" specified by \"%s\" does not exist on primary server" +msgstr "replikeringsslot \"%s\" angiven av %s finns inte på den primära servern." + +#. translator: first %s is a connection option; second %s is a GUC +#. variable name +#. +#: replication/logical/slotsync.c:1029 +#, c-format +msgid "replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "synkronisering av replikeringsslot kräver att \"%s\" anges i %s" + +#: replication/logical/slotsync.c:1050 +#, c-format +msgid "replication slot synchronization requires \"wal_level\" >= \"logical\"" +msgstr "synkronisering av replikeringsslot kräver at \"wal_level\" >= \"logical\"" + +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1063 replication/logical/slotsync.c:1091 +#, c-format +msgid "replication slot synchronization requires \"%s\" to be set" +msgstr "synkronisering av replikeringsslot kräver att \"%s\" också anges" + +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1077 +#, c-format +msgid "replication slot synchronization requires \"%s\" to be enabled" +msgstr "synkronisering av replikeringsslot kräver att \"%s\" också slås på" + +#. translator: %s is a GUC variable name +#: replication/logical/slotsync.c:1129 +#, c-format +msgid "replication slot synchronization worker will shut down because \"%s\" is disabled" +msgstr "arbetare för synkronisering av replikeringsslot kommer stängas ner då \"%s\" är avslagen" + +#: replication/logical/slotsync.c:1138 +#, c-format +msgid "replication slot synchronization worker will restart because of a parameter change" +msgstr "arbetare för synkronisering av replikeringsslot kommer startas om då parametrar ändrats" + +#: replication/logical/slotsync.c:1162 +#, c-format +msgid "replication slot synchronization worker is shutting down on receiving SIGINT" +msgstr "arbetare för synkronisering av replikeringsslot stänger ner efter mottagning av SIGINT" + +#: replication/logical/slotsync.c:1287 +#, c-format +msgid "cannot synchronize replication slots when standby promotion is ongoing" +msgstr "kan inte synkronisera replikeringsslot när befordran av standby pågår" + +#: replication/logical/slotsync.c:1295 +#, c-format +msgid "cannot synchronize replication slots concurrently" +msgstr "kan inte synkronisera replikeringsslottar parallellt" + +#: replication/logical/slotsync.c:1403 +#, c-format +msgid "slot sync worker started" +msgstr "arbetare för slot-synk startad" + +#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 +#: replication/walreceiver.c:307 +#, c-format +msgid "could not connect to the primary server: %s" +msgstr "kunde inte ansluta till primärserver: %s" + +#: replication/logical/snapbuild.c:653 #, c-format msgid "initial slot snapshot too large" msgstr "initialt slot-snapshot är för stort" -#: replication/logical/snapbuild.c:693 +#: 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] "exporterade logisk avkodnings-snapshot: \"%s\" med %u transaktions-ID" msgstr[1] "exporterade logisk avkodnings-snapshot: \"%s\" med %u transaktions-ID" -#: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480 -#: replication/logical/snapbuild.c:1996 +#: 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 "logisk avkodning hittade konsistent punkt vid %X/%X" -#: replication/logical/snapbuild.c:1390 +#: replication/logical/snapbuild.c:1406 #, c-format msgid "There are no running transactions." msgstr "Det finns inga körande transaktioner." -#: replication/logical/snapbuild.c:1432 +#: replication/logical/snapbuild.c:1453 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "logisk avkodning hittade initial startpunkt vid %X/%X" -#: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458 +#: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Väntar på att transaktioner (cirka %d) äldre än %u skall gå klart." -#: replication/logical/snapbuild.c:1456 +#: replication/logical/snapbuild.c:1477 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "logisk avkodning hittade initial konsistent punkt vid %X/%X" -#: replication/logical/snapbuild.c:1482 +#: replication/logical/snapbuild.c:1503 #, c-format msgid "There are no old transactions anymore." msgstr "Det finns inte längre några gamla transaktioner." -#: replication/logical/snapbuild.c:1883 +#: replication/logical/snapbuild.c:1904 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "snapbuild-state-fil \"%s\" har fel magiskt tal: %u istället för %u" -#: replication/logical/snapbuild.c:1889 +#: replication/logical/snapbuild.c:1910 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "snapbuild-state-fil \"%s\" har en ej stödd version: %u istället för %u" -#: replication/logical/snapbuild.c:1930 +#: replication/logical/snapbuild.c:1951 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "checksumma stämmer inte för snapbuild-state-fil \"%s\": är %u, skall vara %u" -#: replication/logical/snapbuild.c:1998 +#: replication/logical/snapbuild.c:2019 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Logisk avkodning kommer starta med sparat snapshot." -#: replication/logical/snapbuild.c:2105 +#: replication/logical/snapbuild.c:2126 #, c-format msgid "could not parse file name \"%s\"" msgstr "kunde inte parsa filnamn \"%s\"" -#: replication/logical/tablesync.c:153 +#: replication/logical/tablesync.c:161 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "logisk replikerings tabellsynkroniseringsarbetare för prenumeration \"%s\", tabell \"%s\" är klar" -#: replication/logical/tablesync.c:622 +#: replication/logical/tablesync.c:641 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart so that two_phase can be enabled" msgstr "arbetarprocess för uppspelning av logisk replikering av prenumeration \"%s\" kommer starta om så att two_phase kan slås på" -#: replication/logical/tablesync.c:797 replication/logical/tablesync.c:939 +#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "kunde inte hämta tabellinfo för tabell \"%s.%s\" från publicerare: %s" -#: replication/logical/tablesync.c:804 +#: replication/logical/tablesync.c:834 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "tabell \"%s.%s\" hittades inte hos publicerare" -#: replication/logical/tablesync.c:862 +#: replication/logical/tablesync.c:892 #, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" msgstr "kunde inte hämta kolumlista för tabell \"%s.%s\" från publicerare: %s" -#: replication/logical/tablesync.c:1041 +#: replication/logical/tablesync.c:1071 #, c-format msgid "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: %s" msgstr "kunde inte hämta tabells WHERE-klausul för tabell \"%s.%s\" från publicerare: %s" -#: replication/logical/tablesync.c:1192 +#: replication/logical/tablesync.c:1230 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "kunde inte starta initial innehållskopiering för tabell \"%s.%s\": %s" -#: replication/logical/tablesync.c:1393 +#: replication/logical/tablesync.c:1429 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "tabellkopiering kunde inte starta transaktion på publiceraren: %s" -#: replication/logical/tablesync.c:1435 +#: replication/logical/tablesync.c:1472 #, c-format msgid "replication origin \"%s\" already exists" msgstr "replikeringsurspring \"%s\" finns redan" -#: replication/logical/tablesync.c:1468 replication/logical/worker.c:2374 +#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 #, c-format msgid "user \"%s\" cannot replicate into relation with row-level security enabled: \"%s\"" msgstr "användaren \"%s\" kan inte replikera in i en relation med radsäkerhet påslagen: \"%s\"" -#: replication/logical/tablesync.c:1481 +#: replication/logical/tablesync.c:1518 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "tabellkopiering kunde inte slutföra transaktion på publiceraren: %s" -#: replication/logical/worker.c:499 +#: replication/logical/worker.c:481 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop" msgstr "logiska replikeringens parallella ändringsapplicerare för prenumeration \"%s\" kommer stoppa" -#: replication/logical/worker.c:501 +#: replication/logical/worker.c:483 #, c-format msgid "Cannot handle streamed replication transactions using parallel apply workers until all tables have been synchronized." msgstr "Kan inte hantera strömmade replikerade transaktioner med parallell ändringsapplicerare innan alla tabeller har synkroniserats." -#: replication/logical/worker.c:863 replication/logical/worker.c:978 +#: replication/logical/worker.c:852 replication/logical/worker.c:967 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "inkorrekt binärt dataformat i logisk replikeringskolumn %d" -#: replication/logical/worker.c:2513 +#: replication/logical/worker.c:2500 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "publicerare skickade inte identitetskolumn för replika som förväntades av den logiska replikeringens målrelation \"%s.%s\"" -#: replication/logical/worker.c:2520 +#: replication/logical/worker.c:2507 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "logisk replikeringsmålrelation \"%s.%s\" har varken REPLICA IDENTITY-index eller PRIMARY KEY och den publicerade relationen har inte REPLICA IDENTITY FULL" -#: replication/logical/worker.c:3384 +#: replication/logical/worker.c:3371 #, c-format msgid "invalid logical replication message type \"??? (%d)\"" msgstr "ogiltig logisk replikeringsmeddelandetyp \"??? (%d)\"" -#: replication/logical/worker.c:3556 +#: replication/logical/worker.c:3543 #, c-format msgid "data stream from publisher has ended" msgstr "dataströmmen från publiceraren har avslutats" -#: replication/logical/worker.c:3713 +#: replication/logical/worker.c:3697 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "avslutar logisk replikeringsarbetare på grund av timeout" -#: replication/logical/worker.c:3907 +#: replication/logical/worker.c:3891 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was removed" msgstr "logiska replikerings ändringsapplicerare för prenumeration \"%s\" kommer att stoppa då prenumerationen har tagits bort" -#: replication/logical/worker.c:3920 +#: replication/logical/worker.c:3905 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "logiska replikerings ändringsapplicerare för prenumeration \"%s\" kommer att stoppa då prenumerationen har stängts av" -#: replication/logical/worker.c:3951 +#: replication/logical/worker.c:3936 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because of a parameter change" msgstr "logiska replikeringens ändringsapplicerare för prenumeration \"%s\" kommer att stoppa på grund av ändrade parametrar" -#: replication/logical/worker.c:3955 +#: replication/logical/worker.c:3940 #, c-format msgid "logical replication worker for subscription \"%s\" will restart because of a parameter change" msgstr "logiska replikeringens ändringsapplicerare för prenumeration \"%s\" kommer att startas om på grund av ändrade parametrar" +#: replication/logical/worker.c:3954 +#, c-format +msgid "logical replication parallel apply worker for subscription \"%s\" will stop because the subscription owner's superuser privileges have been revoked" +msgstr "logiska replikerings parallella ändringsapplicerare för prenumeration \"%s\" kommer att stoppa då prenumerationens ägare har blivit av med superuser-rättigheten" + +#: replication/logical/worker.c:3958 +#, c-format +msgid "logical replication worker for subscription \"%s\" will restart because the subscription owner's superuser privileges have been revoked" +msgstr "logiska replikerings ändringsapplicerare för prenumeration \"%s\" kommer att startas om då prenumerationens ägare har blivit av med superuser-rättigheten" + #: replication/logical/worker.c:4478 #, c-format +msgid "subscription has no replication slot set" +msgstr "prenumeration har ingen replikeringsslot angiven" + +#: replication/logical/worker.c:4591 +#, c-format msgid "logical replication worker for subscription %u will not start because the subscription was removed during startup" msgstr "logiska replikeringens ändringsapplicerare för prenumeration %u kommer inte att startas då prenumerationen togs bort i uppstarten" -#: replication/logical/worker.c:4493 +#: replication/logical/worker.c:4607 #, c-format msgid "logical replication worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "logiska replikeringens ändringsapplicerare för prenumeration \"%s\" kommer inte att startas då prenumerationen stängdes av i uppstarten" -#: replication/logical/worker.c:4510 +#: replication/logical/worker.c:4631 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "logisk replikerings tabellsynkroniseringsarbetare för prenumeration \"%s\", tabell \"%s\" har startat" -#: replication/logical/worker.c:4515 +#: replication/logical/worker.c:4636 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "logiska replikeringens ändringsapplicerare för prenumeration \"%s\" har startat" -#: replication/logical/worker.c:4590 -#, c-format -msgid "subscription has no replication slot set" -msgstr "prenumeration har ingen replikeringsslot angiven" - -#: replication/logical/worker.c:4757 +#: replication/logical/worker.c:4758 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "prenumeration \"%s\" har avaktiverats på grund av ett fel" -#: replication/logical/worker.c:4805 +#: replication/logical/worker.c:4806 #, c-format msgid "logical replication starts skipping transaction at LSN %X/%X" msgstr "logisk replikering börjar hoppa över transaktion vid LSN %X/%X" -#: replication/logical/worker.c:4819 +#: replication/logical/worker.c:4820 #, c-format msgid "logical replication completed skipping transaction at LSN %X/%X" msgstr "logisk replikering har slutfört överhoppande av transaktionen vid LSN %X/%X" -#: replication/logical/worker.c:4901 +#: replication/logical/worker.c:4902 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "överhoppnings-LSN för logiska prenumerationen \"%s\" har nollställts" -#: replication/logical/worker.c:4902 +#: 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 "Fjärrtransaktionens slut-WAL-position (LSN) %X/%X matchade inte överhoppnings-LSN %X/%X." -#: replication/logical/worker.c:4928 +#: replication/logical/worker.c:4940 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\"" msgstr "processar fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\"" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:4944 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u" msgstr "processar fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" i transaktion %u" -#: replication/logical/worker.c:4937 +#: 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 "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" i transaktion %u blev klar vid %X/%X" -#: replication/logical/worker.c:4948 +#: 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 "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" i transaktion %u" -#: replication/logical/worker.c:4955 +#: 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 "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" i transaktion %u blev klart vid %X/%X" -#: replication/logical/worker.c:4966 +#: 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 "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" kolumn \"%s\" i transaktion %u" -#: replication/logical/worker.c:4974 +#: 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 "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" kolumn \"%s\" i transaktion %u blev klart vid %X/%X" -#: replication/pgoutput/pgoutput.c:318 +#: replication/pgoutput/pgoutput.c:322 #, c-format msgid "invalid proto_version" msgstr "ogiltig proto_version" -#: replication/pgoutput/pgoutput.c:323 +#: replication/pgoutput/pgoutput.c:327 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\" är utanför giltigt intervall" -#: replication/pgoutput/pgoutput.c:340 +#: replication/pgoutput/pgoutput.c:344 #, c-format msgid "invalid publication_names syntax" msgstr "ogiltig publication_names-syntax" -#: replication/pgoutput/pgoutput.c:443 +#: replication/pgoutput/pgoutput.c:414 replication/pgoutput/pgoutput.c:418 +#, c-format +msgid "option \"%s\" missing" +msgstr "flaggan \"%s\" saknas." + +#: replication/pgoutput/pgoutput.c:478 #, c-format msgid "client sent proto_version=%d but server only supports protocol %d or lower" msgstr "klienten skickade proto_version=%d men servern stöder bara protokoll %d eller lägre" -#: replication/pgoutput/pgoutput.c:449 +#: replication/pgoutput/pgoutput.c:484 #, c-format msgid "client sent proto_version=%d but server only supports protocol %d or higher" msgstr "klienten skickade proto_version=%d men servern stöder bara protokoll %d eller högre" -#: replication/pgoutput/pgoutput.c:455 -#, c-format -msgid "publication_names parameter missing" -msgstr "saknar parameter publication_names" - -#: replication/pgoutput/pgoutput.c:469 +#: replication/pgoutput/pgoutput.c:499 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "efterfrågade proto_version=%d stöder inte strömning, kräver %d eller högre" -#: replication/pgoutput/pgoutput.c:475 +#: replication/pgoutput/pgoutput.c:505 #, c-format msgid "requested proto_version=%d does not support parallel streaming, need %d or higher" msgstr "efterfrågade proto_version=%d stöder inte parallell strömning, kräver %d eller högre" -#: replication/pgoutput/pgoutput.c:480 +#: replication/pgoutput/pgoutput.c:510 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "ströming begärdes men det stöds inte av utdata-plugin:en" -#: replication/pgoutput/pgoutput.c:497 +#: replication/pgoutput/pgoutput.c:524 #, c-format msgid "requested proto_version=%d does not support two-phase commit, need %d or higher" msgstr "efterfrågade proto_version=%d stöder inte tvåfas-commit, kräver %d eller högre" -#: replication/pgoutput/pgoutput.c:502 +#: replication/pgoutput/pgoutput.c:529 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "tvåfas-commit begärdes men det stöds inte av utdata-plugin:en" -#: replication/slot.c:207 +#: replication/slot.c:260 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "replikeringsslotnamn \"%s\" är för kort" -#: replication/slot.c:216 +#: replication/slot.c:269 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "replikeringsslotnamn \"%s\" är för långt" -#: replication/slot.c:229 +#: replication/slot.c:282 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "replikeringsslotnamn \"%s\" innehåller ogiltiga tecken" -#: replication/slot.c:231 +#: replication/slot.c:284 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Replikeringsslotnamn får bara innehålla små bokstäver, nummer och understreck." -#: replication/slot.c:285 +#: replication/slot.c:333 +#, c-format +msgid "cannot enable failover for a replication slot created on the standby" +msgstr "kan inte aktivera failover för en replikeringsslot som skapats på standby:en" + +#: replication/slot.c:345 replication/slot.c:849 +#, c-format +msgid "cannot enable failover for a temporary replication slot" +msgstr "kan inte aktivera failover för en temporär repllikeringsslot" + +#: replication/slot.c:370 #, c-format msgid "replication slot \"%s\" already exists" msgstr "replikeringsslot \"%s\" finns redan" -#: replication/slot.c:295 +#: replication/slot.c:380 #, c-format msgid "all replication slots are in use" msgstr "alla replikeringsslots används" -#: replication/slot.c:296 +#: replication/slot.c:381 #, c-format -msgid "Free one or increase max_replication_slots." -msgstr "Frigör en eller öka max_replication_slots." +msgid "Free one or increase \"max_replication_slots\"." +msgstr "Frigör en eller öka \"max_replication_slots\"." -#: replication/slot.c:474 replication/slotfuncs.c:736 -#: utils/activity/pgstat_replslot.c:55 utils/adt/genfile.c:774 +#: 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 "replikeringsslot \"%s\" existerar inte" -#: replication/slot.c:520 replication/slot.c:1110 +#: replication/slot.c:606 replication/slot.c:1337 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "replikeringsslot \"%s\" är aktiv för PID %d" -#: replication/slot.c:756 replication/slot.c:1645 replication/slot.c:2028 +#: replication/slot.c:638 +#, c-format +msgid "acquired logical replication slot \"%s\"" +msgstr "tog logisk replikeringsslot \"%s\"" + +#: replication/slot.c:640 +#, c-format +msgid "acquired physical replication slot \"%s\"" +msgstr "tog fysisk replikeringsslot \"%s\"" + +#: replication/slot.c:729 +#, c-format +msgid "released logical replication slot \"%s\"" +msgstr "släppte logisk replikeringsslot \"%s\"" + +#: replication/slot.c:731 +#, c-format +msgid "released physical replication slot \"%s\"" +msgstr "släppte fysisk replikeringsslot \"%s\"" + +#: replication/slot.c:797 +#, c-format +msgid "cannot drop replication slot \"%s\"" +msgstr "kan inte slänga replikeringsslot \"%s\"" + +#: replication/slot.c:816 +#, c-format +msgid "cannot use %s with a physical replication slot" +msgstr "kan inte använda %s med en fysisk replikeringsslot" + +#: replication/slot.c:828 +#, c-format +msgid "cannot alter replication slot \"%s\"" +msgstr "kan inte ändra replikeringsslot \"%s\"" + +#: replication/slot.c:838 +#, c-format +msgid "cannot enable failover for a replication slot on the standby" +msgstr "kan inte aktivera failover för en replikeringsslot på standby:en" + +#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 #, c-format msgid "could not remove directory \"%s\"" msgstr "kunde inte ta bort katalog \"%s\"" -#: replication/slot.c:1145 +#: replication/slot.c:1372 #, c-format -msgid "replication slots can only be used if max_replication_slots > 0" -msgstr "replikeringsslots kan bara användas om max_replication_slots > 0" +msgid "replication slots can only be used if \"max_replication_slots\" > 0" +msgstr "replikeringsslots kan bara användas om \"max_replication_slots\" > 0" -#: replication/slot.c:1150 +#: replication/slot.c:1377 #, c-format -msgid "replication slots can only be used if wal_level >= replica" -msgstr "replikeringsslots kan bara användas om wal_level >= replica" +msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" +msgstr "replikeringsslots kan bara användas om \"wal_level\" >= \"replica\"" -#: replication/slot.c:1162 +#: replication/slot.c:1389 #, c-format msgid "permission denied to use replication slots" msgstr "rättighet saknas för att använda replikeringsslottar" -#: replication/slot.c:1163 +#: replication/slot.c:1390 #, c-format msgid "Only roles with the %s attribute may use replication slots." msgstr "Bara roller med attributet %s får använda replikeringsslottar." -#: replication/slot.c:1271 +#: replication/slot.c:1498 #, c-format msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." msgstr[0] "Slottens restart_lsn %X/%X överskrider gränsen på %llu byte." msgstr[1] "Slottens restart_lsn %X/%X överskrider gränsen på %llu bytes." -#: replication/slot.c:1279 +#: replication/slot.c:1506 #, c-format msgid "The slot conflicted with xid horizon %u." msgstr "Slotten är i konflikt med xid-horisont %u." -#: replication/slot.c:1284 -msgid "Logical decoding on standby requires wal_level >= logical on the primary server." -msgstr "logisk avkodning på standby kräver wal_level >= logical på primären" +#: replication/slot.c:1511 +msgid "Logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary server." +msgstr "logisk avkodning på standby kräver \"wal_level\" >= \"logical\" på primären" -#: replication/slot.c:1292 +#: replication/slot.c:1519 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "avslutar process %d för att frigöra replikeringsslot \"%s\"" -#: replication/slot.c:1294 +#: replication/slot.c:1521 #, c-format msgid "invalidating obsolete replication slot \"%s\"" msgstr "invaliderar obsolet replikeringssslot \"%s\"" -#: replication/slot.c:1966 +#: replication/slot.c:2249 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "replikeringsslotfil \"%s\" har fel magiskt nummer: %u istället för %u" -#: replication/slot.c:1973 +#: replication/slot.c:2256 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "replikeringsslotfil \"%s\" har en icke stödd version %u" -#: replication/slot.c:1980 +#: replication/slot.c:2263 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "replikeringsslotfil \"%s\" har felaktig längd %u" -#: replication/slot.c:2016 +#: replication/slot.c:2299 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "kontrollsummefel för replikeringsslot-fil \"%s\": är %u, skall vara %u" -#: replication/slot.c:2050 +#: replication/slot.c:2333 #, c-format -msgid "logical replication slot \"%s\" exists, but wal_level < logical" -msgstr "logisk replikeringsslot \"%s\" finns men wal_level < replica" +msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" +msgstr "logisk replikeringsslot \"%s\" finns men \"wal_level\" < \"replica\"" -#: replication/slot.c:2052 +#: replication/slot.c:2335 #, c-format -msgid "Change wal_level to be logical or higher." -msgstr "Ändra wal_level till logical eller högre." +msgid "Change \"wal_level\" to be \"logical\" or higher." +msgstr "Ändra \"wal_level\" till \"logical\" eller högre." -#: replication/slot.c:2056 +#: replication/slot.c:2339 #, c-format -msgid "physical replication slot \"%s\" exists, but wal_level < replica" -msgstr "fysisk replikeringsslot \"%s\" finns men wal_level < replica" +msgid "physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" +msgstr "fysisk replikeringsslot \"%s\" finns men \"wal_level\" < \"replica\"" -#: replication/slot.c:2058 +#: replication/slot.c:2341 #, c-format -msgid "Change wal_level to be replica or higher." -msgstr "Ändra wal_level till replica eller högre." +msgid "Change \"wal_level\" to be \"replica\" or higher." +msgstr "Ändra \"wal_level\" till \"replica\" eller högre." -#: replication/slot.c:2092 +#: replication/slot.c:2383 #, c-format msgid "too many replication slots active before shutdown" msgstr "för många aktiva replikeringsslottar innan nerstängning" -#: replication/slotfuncs.c:601 +#: replication/slot.c:2458 +#, c-format +msgid "\"%s\" is not a physical replication slot" +msgstr "\"%s\" är inte en fysisk replikeringsslot" + +#: replication/slot.c:2635 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "replikeringsslot \"%s\" som angivits i parametern \"%s\" existerar inte" + +#: replication/slot.c:2637 replication/slot.c:2671 replication/slot.c:2686 +#, c-format +msgid "Logical replication is waiting on the standby associated with replication slot \"%s\"." +msgstr "Logisk replikering väntar på standby associerad med replikeringsslot \"%s\"." + +#: replication/slot.c:2639 +#, c-format +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "Skapa replikeringsslotten \"%s\" eller ändra parametern \"%s\"" + +#: replication/slot.c:2649 +#, c-format +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "kan inte ange logisk replikeringsslot \"%s\" i parametern \"%s\"" + +#: replication/slot.c:2651 +#, c-format +msgid "Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "Logiska replikering väntar på rättning av replikeringsslot \"%s\"" + +#: replication/slot.c:2653 +#, c-format +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "Ta bort logisk replikeringsslot \"%s\" från parametern \"%s\"" + +#: replication/slot.c:2669 +#, c-format +msgid "physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated" +msgstr "fysisk replikeringsslot \"%s\" angiven i parametern \"%s\" har invaliderats" + +#: replication/slot.c:2673 +#, c-format +msgid "Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "Släng och återskapa replikeringsslotten \"%s\" eller ändra parametern %s." + +#: replication/slot.c:2684 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not have active_pid" +msgstr "replikeringsslot \"%s\" angiven i parametern \"%s\" har inte active_pid" + +#: replication/slot.c:2688 +#, c-format +msgid "Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "Starta standby associerad med replikeringsslot \"%s\" eller ändra parametern \"%s\"." + +#: replication/slotfuncs.c:526 #, c-format msgid "invalid target WAL LSN" msgstr "ogiltig mål-LSN för WAL" -#: replication/slotfuncs.c:623 +#: replication/slotfuncs.c:548 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "replikeringsslot \"%s\" kan inte avanceras" -#: replication/slotfuncs.c:625 +#: replication/slotfuncs.c:550 #, c-format msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Denna slot har aldrig tidigare reserverat WAL eller så har den invaliderats." -#: replication/slotfuncs.c:641 +#: replication/slotfuncs.c:566 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "kan inte flytta fram replikeringsslot till %X/%X, minimum är %X/%X" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:673 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "kan inte kopiera fysisk replikeringsslot \"%s\" som en logisk replikeringsslot" -#: replication/slotfuncs.c:750 +#: replication/slotfuncs.c:675 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "kan inte kopiera logisk replikeringsslot \"%s\" som en fysisk replikeringsslot" -#: replication/slotfuncs.c:757 +#: replication/slotfuncs.c:682 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "kan inte kopiera en replikeringsslot som inte tidigare har reserverat WAL" -#: replication/slotfuncs.c:834 +#: replication/slotfuncs.c:768 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "kunde inte kopiera replikeringsslot \"%s\"" -#: replication/slotfuncs.c:836 +#: replication/slotfuncs.c:770 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "Källreplikeringsslotten ändrades på ett inkompatibelt sätt under copy-operationen." -#: replication/slotfuncs.c:842 +#: replication/slotfuncs.c:776 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "kan inte kopiera ej slutförd replikeringsslot \"%s\"" -#: replication/slotfuncs.c:844 +#: replication/slotfuncs.c:778 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Försök igen när källreplikeringsslottens confirmed_flush_lsn är giltig." -#: replication/syncrep.c:262 +#: replication/slotfuncs.c:877 +#, c-format +msgid "replication slots can only be synchronized to a standby server" +msgstr "replikerings-slot kan bara synkroniseras till en standby-server" + +#: replication/syncrep.c:261 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "avbryter väntan på synkron replikering samt avslutar anslutning på grund av ett administratörskommando" -#: replication/syncrep.c:263 replication/syncrep.c:280 +#: replication/syncrep.c:262 replication/syncrep.c:279 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "Transaktionen har redan commit:ats lokalt men har kanske inte replikerats till standby:en." -#: replication/syncrep.c:279 +#: replication/syncrep.c:278 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "avbryter väntan på synkron replikering efter användarens önskemål" -#: replication/syncrep.c:486 +#: replication/syncrep.c:485 #, c-format -msgid "standby \"%s\" is now a synchronous standby with priority %u" -msgstr "standby \"%s\" är nu en synkron standby med prioritet %u" +msgid "standby \"%s\" is now a synchronous standby with priority %d" +msgstr "standby \"%s\" är nu en synkron standby med prioritet %d" -#: replication/syncrep.c:490 +#: replication/syncrep.c:489 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "standby \"%s\" är nu en kvorumkandidat för synkron standby" -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1013 #, c-format -msgid "synchronous_standby_names parser failed" -msgstr "synchronous_standby_names-parser misslyckades" +msgid "\"synchronous_standby_names\" parser failed" +msgstr "\"synchronous_standby_names\"-parser misslyckades" -#: replication/syncrep.c:1025 +#: replication/syncrep.c:1019 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "antal synkrona standbys (%d) måste vara fler än noll" -#: replication/walreceiver.c:180 +#: replication/walreceiver.c:176 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "avslutar wal-mottagarprocessen på grund av ett administratörskommando" -#: replication/walreceiver.c:305 -#, c-format -msgid "could not connect to the primary server: %s" -msgstr "kunde inte ansluta till primärserver: %s" - -#: replication/walreceiver.c:352 +#: replication/walreceiver.c:354 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "databassystemets identifierare skiljer sig åt mellan primären och standby:en" -#: replication/walreceiver.c:353 +#: replication/walreceiver.c:355 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "Primärens identifierare är %s, standby:ens identifierare är %s." -#: replication/walreceiver.c:364 +#: replication/walreceiver.c:366 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "högsta tidslinjen %u i primären är efter återställningstidslinjen %u" -#: replication/walreceiver.c:417 +#: replication/walreceiver.c:419 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "startade strömning av WAL från primären vid %X/%X på tidslinje %u" -#: replication/walreceiver.c:421 +#: replication/walreceiver.c:423 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "återstartade WAL-strömning vid %X/%X på tidslinje %u" -#: replication/walreceiver.c:457 +#: replication/walreceiver.c:458 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "kan inte fortsätta WAL-strömning, återställning har redan avslutats" -#: replication/walreceiver.c:501 +#: replication/walreceiver.c:502 #, c-format msgid "replication terminated by primary server" msgstr "replikering avslutad av primär server" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:503 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Slut på WAL nådd på tidslinje %u vid %X/%X." -#: replication/walreceiver.c:592 +#: replication/walreceiver.c:593 #, c-format msgid "terminating walreceiver due to timeout" msgstr "avslutar wal-mottagare på grund av timeout" -#: replication/walreceiver.c:624 +#: replication/walreceiver.c:625 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "primär server har ingen mer WAL på efterfrågad tidslinje %u" -#: replication/walreceiver.c:640 replication/walreceiver.c:1066 +#: replication/walreceiver.c:641 replication/walreceiver.c:1071 #, c-format msgid "could not close WAL segment %s: %m" msgstr "kunde inte stänga WAL-segment %s: %m" -#: replication/walreceiver.c:759 +#: replication/walreceiver.c:760 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "hämtar tidslinjehistorikfil för tidslinje %u från primära servern" -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:959 #, c-format -msgid "could not write to WAL segment %s at offset %u, length %lu: %m" -msgstr "kunde inte skriva till WAL-segment %s på offset %u, längd %lu: %m" +msgid "could not write to WAL segment %s at offset %d, length %lu: %m" +msgstr "kunde inte skriva till WAL-segment %s på offset %d, längd %lu: %m" -#: replication/walsender.c:519 +#: replication/walsender.c:531 #, c-format msgid "cannot use %s with a logical replication slot" msgstr "kan inte använda %s med logisk replikeringsslot" -#: replication/walsender.c:623 storage/smgr/md.c:1529 +#: replication/walsender.c:635 storage/smgr/md.c:1735 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "kunde inte söka (seek) till slutet av filen \"%s\": %m" -#: replication/walsender.c:627 +#: replication/walsender.c:639 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "kunde inte söka till början av filen \"%s\": %m" -#: replication/walsender.c:704 +#: replication/walsender.c:853 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "kan inte använda logisk replikeringsslot för fysisk replikering" -#: replication/walsender.c:770 +#: replication/walsender.c:919 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "efterfrågad startpunkt %X/%X på tidslinje %u finns inte i denna servers historik" -#: replication/walsender.c:773 +#: replication/walsender.c:922 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Denna servers historik delade sig från tidslinje %u vid %X/%X." -#: replication/walsender.c:817 +#: replication/walsender.c:966 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "efterfrågad startpunkt %X/%X är längre fram än denna servers flush:ade WAL-skrivposition %X/%X" -#: replication/walsender.c:1010 +#: replication/walsender.c:1160 #, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" msgstr "okänt värde för CREATE_REPLICATION_SLOT-flagga \"%s\": \"%s\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1095 +#: replication/walsender.c:1266 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s får inte anropas i en transaktion" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1105 +#: replication/walsender.c:1276 #, c-format msgid "%s must be called inside a transaction" msgstr "%s måste anropas i en transaktion" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1111 +#: replication/walsender.c:1282 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s måste anropas i transaktions REPEATABLE READ-isolationsläge" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1116 +#: replication/walsender.c:1287 #, c-format msgid "%s must be called in a read-only transaction" msgstr "%s måste anropas i en read-only-transaktion" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1122 +#: replication/walsender.c:1293 #, c-format msgid "%s must be called before any query" msgstr "%s måste anropas innan någon fråga" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1128 +#: replication/walsender.c:1299 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s får inte anropas i en undertransaktion" -#: replication/walsender.c:1275 +#: replication/walsender.c:1472 #, c-format msgid "terminating walsender process after promotion" -msgstr "stänger ner walsender-process efter befordring" +msgstr "stänger ner walsender-process efter befordran" -#: replication/walsender.c:1696 +#: replication/walsender.c:2000 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "kan inte utföra nya kommandon när WAL-sändare är i stopp-läge" -#: replication/walsender.c:1731 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "kan inte köra SQL-kommandon i WAL-sändare för fysisk replikering" -#: replication/walsender.c:1764 +#: replication/walsender.c:2068 #, c-format msgid "received replication command: %s" msgstr "tog emot replikeringskommando: %s" -#: replication/walsender.c:1772 tcop/fastpath.c:209 tcop/postgres.c:1138 -#: tcop/postgres.c:1496 tcop/postgres.c:1736 tcop/postgres.c:2210 -#: tcop/postgres.c:2648 tcop/postgres.c:2726 +#: 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 "aktuella transaktionen har avbrutits, alla kommandon ignoreras tills slutet på transaktionen" -#: replication/walsender.c:1914 replication/walsender.c:1949 +#: replication/walsender.c:2233 replication/walsender.c:2268 #, c-format msgid "unexpected EOF on standby connection" msgstr "oväntat EOF från standby-anslutning" -#: replication/walsender.c:1937 +#: replication/walsender.c:2256 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ogiltigt standby-meddelandetyp \"%c\"" -#: replication/walsender.c:2026 +#: replication/walsender.c:2345 #, c-format msgid "unexpected message type \"%c\"" msgstr "oväntad meddelandetyp \"%c\"" -#: replication/walsender.c:2439 +#: replication/walsender.c:2759 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "avslutar walsender-process på grund av replikerings-timeout" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:842 +#: rewrite/rewriteDefine.c:104 rewrite/rewriteDefine.c:835 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "regel \"%s\" för relation \"%s\" existerar redan" -#: rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:780 +#: rewrite/rewriteDefine.c:261 rewrite/rewriteDefine.c:773 #, c-format msgid "relation \"%s\" cannot have rules" msgstr "relationen \"%s\" kan inte ha regler" -#: rewrite/rewriteDefine.c:299 +#: rewrite/rewriteDefine.c:292 #, c-format msgid "rule actions on OLD are not implemented" msgstr "regelhandlingar på OLD är inte implementerat" -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:293 #, c-format msgid "Use views or triggers instead." msgstr "Använd vyer eller triggrar istället." -#: rewrite/rewriteDefine.c:304 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on NEW are not implemented" msgstr "regelhandlingar på NEW är inte implementerat" -#: rewrite/rewriteDefine.c:305 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use triggers instead." msgstr "Använd triggrar istället." -#: rewrite/rewriteDefine.c:319 +#: rewrite/rewriteDefine.c:312 #, c-format msgid "relation \"%s\" cannot have ON SELECT rules" msgstr "relationen \"%s\" kan inte ha ON SELECT-regler" -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "INSTEAD NOTHING-regler på SELECT är inte implementerat ännu" -#: rewrite/rewriteDefine.c:330 +#: rewrite/rewriteDefine.c:323 #, c-format msgid "Use views instead." msgstr "Använd vyer istället." -#: rewrite/rewriteDefine.c:338 +#: rewrite/rewriteDefine.c:331 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "flera regelhandlingar på SELECT är inte implementerat" -#: rewrite/rewriteDefine.c:348 +#: rewrite/rewriteDefine.c:341 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "regler på SELECT måste ha handlingen INSTEAD SELECT" -#: rewrite/rewriteDefine.c:356 +#: rewrite/rewriteDefine.c:349 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "regler på SELECT får inte innehålla datamodifierande satser i WITH" -#: rewrite/rewriteDefine.c:364 +#: rewrite/rewriteDefine.c:357 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "händelsebegränsningar är inte implementerat för regler på SELECT" -#: rewrite/rewriteDefine.c:391 +#: rewrite/rewriteDefine.c:384 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" är redan en vy" -#: rewrite/rewriteDefine.c:415 +#: rewrite/rewriteDefine.c:408 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "vy-regel (rule) för \"%s\" måste ha namnet \"%s\"" -#: rewrite/rewriteDefine.c:442 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "kan inte ha flera RETURNING-listor i en regel" -#: rewrite/rewriteDefine.c:447 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "RETURNING-listor stöds inte i villkorade regler" -#: rewrite/rewriteDefine.c:451 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "RETURNING-listor stöds inte i icke-INSTEAD-regler" -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:458 #, c-format msgid "non-view rule for \"%s\" must not be named \"%s\"" msgstr "regel (rule) för icke-vy \"%s\" får inte ha namnet \"%s\"" -#: rewrite/rewriteDefine.c:539 +#: rewrite/rewriteDefine.c:532 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "SELECT-regelns mållista har för många poster" -#: rewrite/rewriteDefine.c:540 +#: rewrite/rewriteDefine.c:533 #, c-format msgid "RETURNING list has too many entries" msgstr "RETURNING-lista har för många element" -#: rewrite/rewriteDefine.c:567 +#: rewrite/rewriteDefine.c:560 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "kan inte konvertera en relation som har borttagna kolumner till en vy" -#: rewrite/rewriteDefine.c:568 +#: rewrite/rewriteDefine.c:561 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "kan inte skapa en RETURNING-lista för relationer som innehåller borttagna kolumner" -#: rewrite/rewriteDefine.c:574 +#: rewrite/rewriteDefine.c:567 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "SELECT-regels målpost %d har ett annat kolumnnamn än kolumnen \"%s\"" -#: rewrite/rewriteDefine.c:576 +#: rewrite/rewriteDefine.c:569 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "SELECT-målpost har namn \"%s\"." -#: rewrite/rewriteDefine.c:585 +#: rewrite/rewriteDefine.c:578 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "SELECT-regels målpot %d har en annan typ än kolumnen \"%s\"" -#: rewrite/rewriteDefine.c:587 +#: rewrite/rewriteDefine.c:580 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "RETURNING-listans post %d har en annan typ än kolumnen \"%s\"" -#: rewrite/rewriteDefine.c:590 rewrite/rewriteDefine.c:614 +#: rewrite/rewriteDefine.c:583 rewrite/rewriteDefine.c:607 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "SELECT-målpost har typ %s men kolumnen har typ %s." -#: rewrite/rewriteDefine.c:593 rewrite/rewriteDefine.c:618 +#: rewrite/rewriteDefine.c:586 rewrite/rewriteDefine.c:611 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "RETURNING-listpost har typ %s men kolumnen har typ %s." -#: rewrite/rewriteDefine.c:609 +#: rewrite/rewriteDefine.c:602 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "SELECT-regelns målpost %d har en annan storlek än kolumnen \"%s\"" -#: rewrite/rewriteDefine.c:611 +#: rewrite/rewriteDefine.c:604 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "RETURNING-listpost %d har en annan storlek än kolumnen\"%s\"" -#: rewrite/rewriteDefine.c:628 +#: rewrite/rewriteDefine.c:621 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "SELECT-regels mållista har för få element" -#: rewrite/rewriteDefine.c:629 +#: rewrite/rewriteDefine.c:622 #, c-format msgid "RETURNING list has too few entries" msgstr "RETURNING-lista har för få element" -#: rewrite/rewriteDefine.c:718 rewrite/rewriteDefine.c:833 -#: rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:711 rewrite/rewriteDefine.c:826 +#: rewrite/rewriteSupport.c:108 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "regel \"%s\" för relation \"%s\" existerar inte" -#: rewrite/rewriteDefine.c:852 +#: rewrite/rewriteDefine.c:845 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "byta namn på en ON SELECT-regel tillåts inte" -#: rewrite/rewriteHandler.c:583 +#: rewrite/rewriteHandler.c:588 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "WITH-frågenamn \"%s\" finns både i en regelhändelse och i frågan som skrivs om" -#: rewrite/rewriteHandler.c:610 +#: 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-regler stöds inte för frågor som har datamodifierande satser i WITH" -#: rewrite/rewriteHandler.c:663 +#: rewrite/rewriteHandler.c:668 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "kan inte ha RETURNING-listor i multipla regler" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:939 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "kan inte sätta in ett icke-DEFAULT-värde i kolumn \"%s\"" -#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:902 rewrite/rewriteHandler.c:968 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "Kolumn \"%s\" är en identitetskolumn definierad som GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:904 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Använd OVERRIDING SYSTEM VALUE för att överskugga." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: rewrite/rewriteHandler.c:966 rewrite/rewriteHandler.c:974 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "kolumn \"%s\" kan bara uppdateras till DEFAULT" -#: rewrite/rewriteHandler.c:1116 rewrite/rewriteHandler.c:1134 +#: rewrite/rewriteHandler.c:1109 rewrite/rewriteHandler.c:1127 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "flera tilldelningar till samma kolumn \"%s\"" -#: rewrite/rewriteHandler.c:2119 rewrite/rewriteHandler.c:4040 +#: rewrite/rewriteHandler.c:1682 +#, c-format +msgid "MERGE is not supported for relations with rules." +msgstr "MERGE stöds inte för relationer med regler." + +#: rewrite/rewriteHandler.c:1722 rewrite/rewriteHandler.c:3262 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "access till icke-system vy \"%s\" är begränsad" + +#: rewrite/rewriteHandler.c:2122 rewrite/rewriteHandler.c:4254 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "oändlig rekursion detekterad i reglerna för relation \"%s\"" -#: rewrite/rewriteHandler.c:2204 +#: rewrite/rewriteHandler.c:2227 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "oändlig rekursion detekterad i policy för relation \"%s\"" -#: rewrite/rewriteHandler.c:2524 +#: rewrite/rewriteHandler.c:2589 msgid "Junk view columns are not updatable." msgstr "Skräpkolumner i vy är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2529 +#: rewrite/rewriteHandler.c:2594 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Vykolumner som inte är kolumner i dess basrelation är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2532 +#: rewrite/rewriteHandler.c:2597 msgid "View columns that refer to system columns are not updatable." msgstr "Vykolumner som refererar till systemkolumner är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2535 +#: rewrite/rewriteHandler.c:2600 msgid "View columns that return whole-row references are not updatable." msgstr "Vykolumner som returnerar hel-rad-referenser är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2596 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Vyer som innehåller DISTINCT är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2599 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Vyer som innehåller GROUP BY är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2602 +#: rewrite/rewriteHandler.c:2667 msgid "Views containing HAVING are not automatically updatable." msgstr "Vyer som innehåller HAVING är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2605 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Vyer som innehåller UNION, INTERSECT eller EXCEPT är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2608 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing WITH are not automatically updatable." msgstr "Vyer som innehåller WITH är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2611 +#: rewrite/rewriteHandler.c:2676 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Vyer som innehåller LIMIT eller OFFSET är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2623 +#: rewrite/rewriteHandler.c:2688 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Vyer som returnerar aggregatfunktioner är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2626 +#: rewrite/rewriteHandler.c:2691 msgid "Views that return window functions are not automatically updatable." msgstr "Vyer som returnerar fönsterfunktioner uppdateras inte automatiskt." -#: rewrite/rewriteHandler.c:2629 +#: rewrite/rewriteHandler.c:2694 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Vyer som returnerar mängd-returnerande funktioner är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2636 rewrite/rewriteHandler.c:2640 -#: rewrite/rewriteHandler.c:2648 +#: 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 "Vyer som inte läser från en ensam tabell eller vy är inte automatiskt uppdateringsbar." -#: rewrite/rewriteHandler.c:2651 +#: rewrite/rewriteHandler.c:2716 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Vyer som innehåller TABLESAMPLE är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2675 +#: rewrite/rewriteHandler.c:2740 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Vyer som inte har några uppdateringsbara kolumner är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:3155 +#: rewrite/rewriteHandler.c:3121 rewrite/rewriteHandler.c:3156 #, c-format -msgid "cannot insert into column \"%s\" of view \"%s\"" -msgstr "kan inte insert:a i kolumn \"%s\" i vy \"%s\"" +msgid "cannot insert into view \"%s\"" +msgstr "kan inte sätta in i vy \"%s\"" -#: rewrite/rewriteHandler.c:3163 +#: rewrite/rewriteHandler.c:3124 #, c-format -msgid "cannot update column \"%s\" of view \"%s\"" -msgstr "kan inte uppdatera kolumn \"%s\" i view \"%s\"" +msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." +msgstr "För att tillåta insättning i en vy så skapa en INSTEAD OF INSERT-trigger eller en villkorslös ON INSERT DO INSTEAD-regel." -#: rewrite/rewriteHandler.c:3667 +#: rewrite/rewriteHandler.c:3129 rewrite/rewriteHandler.c:3165 #, c-format -msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" -msgstr "DO INSTEAD NOTIFY-regler stöds inte för datamodifierande satser i WITH" +msgid "cannot update view \"%s\"" +msgstr "kan inte uppdatera vy \"%s\"" -#: rewrite/rewriteHandler.c:3678 +#: rewrite/rewriteHandler.c:3132 #, c-format -msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" -msgstr "DO INSTEAD NOTHING-regler stöds inte för datamodifierande satser i WITH" +msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." +msgstr "För att tillåta uppdatering av en vy så skapa en INSTEAD OF UPDATE-trigger eller en villkorslös ON UPDATE DO INSTEAD-regel." -#: rewrite/rewriteHandler.c:3692 +#: rewrite/rewriteHandler.c:3137 rewrite/rewriteHandler.c:3174 #, c-format -msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" -msgstr "villkorliga DO INSTEAD-regler stöds inte för datamodifierande satser i WITH" +msgid "cannot delete from view \"%s\"" +msgstr "kan inte radera från vy \"%s\"" -#: rewrite/rewriteHandler.c:3696 +#: rewrite/rewriteHandler.c:3140 #, c-format -msgid "DO ALSO rules are not supported for data-modifying statements in WITH" -msgstr "DO ALSO-regler stöds inte för datamodifierande satser i WITH" +msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." +msgstr "För att tillåta bortagning i en vy så skapa en INSTEAD OF DELETE-trigger eller en villkorslös ON DELETE DO INSTEAD-regel." -#: rewrite/rewriteHandler.c:3701 +#: rewrite/rewriteHandler.c:3159 +#, c-format +msgid "To enable inserting into the view using MERGE, provide an INSTEAD OF INSERT trigger." +msgstr "För att tillåta insert till en vy med MERGE så krävs en INSTEAD OF INSERT-trigger." + +#: rewrite/rewriteHandler.c:3168 +#, c-format +msgid "To enable updating the view using MERGE, provide an INSTEAD OF UPDATE trigger." +msgstr "För att tillåta uppdatering av en vy så krävs en INSTEAD OF UPDATE-trigger." + +#: rewrite/rewriteHandler.c:3177 +#, c-format +msgid "To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE trigger." +msgstr "För att tillåta borttagning från en vy så krävs en INSTEAD OF DELETE-trigger." + +#: rewrite/rewriteHandler.c:3352 +#, c-format +msgid "cannot insert into column \"%s\" of view \"%s\"" +msgstr "kan inte insert:a i kolumn \"%s\" i vy \"%s\"" + +#: rewrite/rewriteHandler.c:3360 +#, c-format +msgid "cannot update column \"%s\" of view \"%s\"" +msgstr "kan inte uppdatera kolumn \"%s\" i view \"%s\"" + +#: rewrite/rewriteHandler.c:3368 +#, c-format +msgid "cannot merge into column \"%s\" of view \"%s\"" +msgstr "kan inte merge:a till kolumn \"%s\" i vy \"%s\"" + +#: rewrite/rewriteHandler.c:3396 +#, c-format +msgid "cannot merge into view \"%s\"" +msgstr "kan inte merge:a till vy \"%s\"" + +#: rewrite/rewriteHandler.c:3398 +#, c-format +msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions but not all." +msgstr "MERGE stöds inte för vyer med INSTEAD OF-trigger för vissa actions men inte för andra." + +#: 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 "För att tillåta merge till en vy så antingen skapa en full uppsättning INSTEAD OF-triggers eller släng de befintliga INSERT OF-triggers." + +#: rewrite/rewriteHandler.c:3912 +#, c-format +msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" +msgstr "DO INSTEAD NOTIFY-regler stöds inte för datamodifierande satser i WITH" + +#: rewrite/rewriteHandler.c:3923 +#, c-format +msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" +msgstr "DO INSTEAD NOTHING-regler stöds inte för datamodifierande satser i WITH" + +#: rewrite/rewriteHandler.c:3937 +#, c-format +msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" +msgstr "villkorliga DO INSTEAD-regler stöds inte för datamodifierande satser i WITH" + +#: rewrite/rewriteHandler.c:3941 +#, c-format +msgid "DO ALSO rules are not supported for data-modifying statements in WITH" +msgstr "DO ALSO-regler stöds inte för datamodifierande satser i WITH" + +#: rewrite/rewriteHandler.c:3946 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "fler-satsiga DO INSTEAD-regler stöds inte för datamodifierande satser i WITH" -#: rewrite/rewriteHandler.c:3968 rewrite/rewriteHandler.c:3976 -#: rewrite/rewriteHandler.c:3984 -#, c-format +#: rewrite/rewriteHandler.c:4206 msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Vyer med villkorliga DO INSTEAD-regler är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:4089 +#: rewrite/rewriteHandler.c:4303 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "kan inte utföra INSERT RETURNING på relation \"%s\"" -#: rewrite/rewriteHandler.c:4091 +#: rewrite/rewriteHandler.c:4305 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "Du behöver en villkorslös ON INSERT DO INSTEAD-regel med en RETURNING-klausul." -#: rewrite/rewriteHandler.c:4096 +#: rewrite/rewriteHandler.c:4310 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "kan inte utföra UPDATE RETURNING på relation \"%s\"" -#: rewrite/rewriteHandler.c:4098 +#: rewrite/rewriteHandler.c:4312 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "Du behöver en villkorslös ON UPDATE DO INSTEAD-regel med en RETURNING-klausul." -#: rewrite/rewriteHandler.c:4103 +#: rewrite/rewriteHandler.c:4317 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "kan inte utföra DELETE RETURNING på relation \"%s\"" -#: rewrite/rewriteHandler.c:4105 +#: rewrite/rewriteHandler.c:4319 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "Du behöver en villkorslös ON DELETE DO INSTEAD-regel med en RETURNING-klausul." -#: rewrite/rewriteHandler.c:4123 +#: rewrite/rewriteHandler.c:4337 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT med ON CONFLICT-klausul kan inte användas med tabell som har INSERT- eller UPDATE-regler" -#: rewrite/rewriteHandler.c:4180 +#: rewrite/rewriteHandler.c:4394 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH kan inte användas i en fråga där regler skrivit om den till flera olika frågor" -#: rewrite/rewriteManip.c:1075 +#: rewrite/rewriteManip.c:1084 #, c-format msgid "conditional utility statements are not implemented" msgstr "villkorliga hjälpsatser är inte implementerat" -#: rewrite/rewriteManip.c:1419 +#: rewrite/rewriteManip.c:1431 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF för en vy är inte implementerat" -#: rewrite/rewriteManip.c:1754 +#: 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 "NEW-variabler i ON UPDATE-regler kan inte referera till kolumner som är del av en multiple uppdatering i subjektets UPDATE-kommando" @@ -21677,117 +22475,117 @@ msgstr "NEW-variabler i ON UPDATE-regler kan inte referera till kolumner som är 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 "med en SEARCH- eller CYCLE-klausul så måste rekursiva referensen till WITH-fråga \"%s\" vara på toppnivå eller i dess högra SELECT" -#: scan.l:482 +#: scan.l:497 msgid "unterminated /* comment" msgstr "ej avslutad /*-kommentar" -#: scan.l:502 +#: scan.l:517 msgid "unterminated bit string literal" msgstr "ej avslutad bitsträngslitteral" -#: scan.l:516 +#: scan.l:531 msgid "unterminated hexadecimal string literal" msgstr "ej avslutad hexadecimal stränglitteral" -#: scan.l:566 +#: scan.l:581 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "osäker användning av strängkonstand med Unicode-escape:r" -#: scan.l:567 +#: scan.l:582 #, c-format -msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." -msgstr "Strängkonstanter som innehåller Unicode-escapesekvenser kan inte användas när standard_conforming_strings är av." +msgid "String constants with Unicode escapes cannot be used when \"standard_conforming_strings\" is off." +msgstr "Strängkonstanter som innehåller Unicode-escapesekvenser kan inte användas när \"standard_conforming_strings\" är av." -#: scan.l:628 +#: scan.l:643 msgid "unhandled previous state in xqs" msgstr "tidigare state i xqs som ej kan hanteras" -#: scan.l:702 +#: scan.l:717 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Unicode-escapesekvenser måste vara \\uXXXX eller \\UXXXXXXXX." -#: scan.l:713 +#: scan.l:728 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "osäker användning av \\' i stränglitteral" -#: scan.l:714 +#: scan.l:729 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "Använd '' för att inkludera ett enkelcitattecken i en sträng. \\' är inte säkert i klient-teckenkodning." -#: scan.l:786 +#: scan.l:801 msgid "unterminated dollar-quoted string" msgstr "icke terminerad dollarciterad sträng" -#: scan.l:803 scan.l:813 +#: scan.l:818 scan.l:828 msgid "zero-length delimited identifier" msgstr "noll-längds avdelad identifierare" -#: scan.l:824 syncrep_scanner.l:101 +#: scan.l:839 syncrep_scanner.l:101 msgid "unterminated quoted identifier" msgstr "icke terminerad citerad identifierare" -#: scan.l:987 +#: scan.l:1002 msgid "operator too long" msgstr "operatorn är för lång" -#: scan.l:1000 +#: scan.l:1015 msgid "trailing junk after parameter" msgstr "skräptecken kommer efter parameter" -#: scan.l:1021 +#: scan.l:1036 msgid "invalid hexadecimal integer" msgstr "ogiltigt hexdecimalt heltal" -#: scan.l:1025 +#: scan.l:1040 msgid "invalid octal integer" msgstr "ogiltigt oktalt heltal" -#: scan.l:1029 +#: scan.l:1044 msgid "invalid binary integer" msgstr "ogiltigt binärt heltal" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1236 +#: scan.l:1239 #, c-format msgid "%s at end of input" msgstr "%s vid slutet av indatan" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1244 +#: scan.l:1247 #, c-format msgid "%s at or near \"%s\"" msgstr "%s vid eller nära \"%s\"" -#: scan.l:1434 +#: scan.l:1439 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "ickestandard användning av \\' i stränglitteral" -#: scan.l:1435 +#: scan.l:1440 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "Använd '' för att skriva citattecken i strängar eller använd escape-strängsyntac (E'...')." -#: scan.l:1444 +#: scan.l:1449 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "ickestandard användning av \\\\ i strängslitteral" -#: scan.l:1445 +#: scan.l:1450 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "Använd escape-strängsyntax för bakstreck, dvs. E'\\\\'." -#: scan.l:1459 +#: scan.l:1464 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "ickestandard användning av escape i stränglitteral" -#: scan.l:1460 +#: scan.l:1465 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Använd escape-strängsyntax, dvs E'\\r\\n'." @@ -21818,72 +22616,67 @@ msgstr "okänd Snowball-parameter: \"%s\"" msgid "missing Language parameter" msgstr "saknar parameter \"Language\"" -#: statistics/extended_stats.c:179 +#: statistics/extended_stats.c:176 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "statistikobjekt \"%s.%s\" kunde inte beräknas för relation \"%s.%s\"" -#: statistics/mcv.c:1372 +#: statistics/mcv.c:1368 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "en funktion med post som värde anropades i sammanhang där poster inte kan godtagas." -#: storage/buffer/bufmgr.c:612 storage/buffer/bufmgr.c:769 +#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "får inte röra temporära tabeller som tillhör andra sessioner" -#: storage/buffer/bufmgr.c:1137 +#: storage/buffer/bufmgr.c:1532 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "felaktig sida i block %u för relation %s; nollställer sidan" -#: storage/buffer/bufmgr.c:1931 storage/buffer/localbuf.c:359 +#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "kan inte utöka relation %s utöver %u block" -#: storage/buffer/bufmgr.c:1998 +#: storage/buffer/bufmgr.c:2348 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "oväntad data efter EOF i block %u för relation %s" -#: storage/buffer/bufmgr.c:2000 +#: storage/buffer/bufmgr.c:2350 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Detta beteende har observerats med buggiga kärnor; fundera på att uppdatera ditt system." -#: storage/buffer/bufmgr.c:5219 +#: storage/buffer/bufmgr.c:5653 #, c-format msgid "could not write block %u of %s" msgstr "kunde inte skriva block %u av %s" -#: storage/buffer/bufmgr.c:5221 +#: storage/buffer/bufmgr.c:5655 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Multipla fel --- skrivfelet kan vara permanent." -#: storage/buffer/bufmgr.c:5243 storage/buffer/bufmgr.c:5263 +#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 #, c-format msgid "writing block %u of relation %s" msgstr "skriver block %u i relation %s" -#: storage/buffer/bufmgr.c:5593 -#, c-format -msgid "snapshot too old" -msgstr "snapshot för gammal" - -#: storage/buffer/localbuf.c:219 +#: storage/buffer/localbuf.c:220 #, c-format msgid "no empty local buffer available" msgstr "ingen tom lokal buffer tillgänglig" -#: storage/buffer/localbuf.c:592 +#: storage/buffer/localbuf.c:597 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "kan inte komma åt temporära tabeller under en parallell operation" -#: storage/buffer/localbuf.c:699 +#: storage/buffer/localbuf.c:712 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "\"temp_buffers\" kan inte ändras efter att man använt temporära tabeller i sessionen." @@ -21903,152 +22696,157 @@ msgstr "kunde inte läsa från filmängd \"%s\": läste bara %zu av %zu byte" msgid "could not read from temporary file: read only %zu of %zu bytes" msgstr "kunde inte läsa från temporärfil: läste bara %zu av %zu byte" -#: storage/file/buffile.c:774 storage/file/buffile.c:895 +#: storage/file/buffile.c:774 storage/file/buffile.c:877 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "kunde inte bestämma storlek på temporär fil \"%s\" från BufFile \"%s\": %m" -#: storage/file/buffile.c:974 +#: storage/file/buffile.c:956 #, c-format msgid "could not delete fileset \"%s\": %m" msgstr "kunde inte radera filmängd \"%s\": %m" -#: storage/file/buffile.c:992 storage/smgr/md.c:338 storage/smgr/md.c:1041 +#: 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 "kunde inte trunkera fil \"%s\": %m" -#: storage/file/fd.c:537 storage/file/fd.c:609 storage/file/fd.c:645 +#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 #, c-format msgid "could not flush dirty data: %m" msgstr "kunde inte flush:a smutsig data: %m" -#: storage/file/fd.c:567 +#: storage/file/fd.c:613 #, c-format msgid "could not determine dirty data size: %m" msgstr "kunde inte lista ut storlek på smutsig data: %m" -#: storage/file/fd.c:619 +#: storage/file/fd.c:665 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "kunde inte göra munmap() vid flush:ning av data: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:983 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit misslyckades: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1073 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "otillräckligt antal fildeskriptorer tillgängligt för att starta serverprocessen" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1074 #, c-format msgid "System allows %d, server needs at least %d." msgstr "Systemet tillåter %d, servern behöver minst %d." -#: storage/file/fd.c:1116 storage/file/fd.c:2565 storage/file/fd.c:2674 -#: storage/file/fd.c:2825 +#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 +#: storage/file/fd.c:2878 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "slut på fildeskriptorer: %m; frigör och försök igen" -#: storage/file/fd.c:1490 +#: storage/file/fd.c:1536 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "temporär fil: sökväg \"%s\", storlek %lu" -#: storage/file/fd.c:1629 +#: storage/file/fd.c:1675 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "kunde inte skapa temporär katalog \"%s\": %m" -#: storage/file/fd.c:1636 +#: storage/file/fd.c:1682 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "kunde inte skapa temporär underkatalog \"%s\": %m" -#: storage/file/fd.c:1833 +#: storage/file/fd.c:1879 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "kan inte skapa temporär fil \"%s\": %m" -#: storage/file/fd.c:1869 +#: storage/file/fd.c:1915 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "kunde inte öppna temporär fil \"%s\": %m" # unlink refererar till unix-funktionen unlink() så den översätter vi inte -#: storage/file/fd.c:1910 +#: storage/file/fd.c:1956 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "kunde inte unlink:a temporär fil \"%s\": %m" -#: storage/file/fd.c:1998 +#: storage/file/fd.c:2044 #, c-format msgid "could not delete file \"%s\": %m" msgstr "kunde inte radera fil \"%s\": %m" -#: storage/file/fd.c:2185 +#: storage/file/fd.c:2234 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "storlek på temporär fil överskrider temp_file_limit (%dkB)" -#: storage/file/fd.c:2541 storage/file/fd.c:2600 +#: storage/file/fd.c:2594 storage/file/fd.c:2653 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "överskred maxAllocatedDescs (%d) vid försök att öppna fil \"%s\"" -#: storage/file/fd.c:2645 +#: storage/file/fd.c:2698 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "överskred maxAllocatedDescs (%d) vid försök att köra kommando \"%s\"" -#: storage/file/fd.c:2801 +#: storage/file/fd.c:2854 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "överskred maxAllocatedDescs (%d) vid försök att öppna katalog \"%s\"" -#: storage/file/fd.c:3331 +#: storage/file/fd.c:3384 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "oväntad fil hittades i katalogen för temporära filer: \"%s\"" -#: storage/file/fd.c:3449 +#: storage/file/fd.c:3502 #, c-format msgid "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" msgstr "synkroniserar datakatalog (syncfs), förbrukad tid: %ld.%02d s, aktuell sökväg: %s" -#: storage/file/fd.c:3463 -#, c-format -msgid "could not synchronize file system for file \"%s\": %m" -msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" - -#: storage/file/fd.c:3676 +#: storage/file/fd.c:3729 #, c-format msgid "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "synkroniserar datakatalog (pre-fsync), förbrukad tid: %ld.%02d s, aktuell sökväg: %s" -#: storage/file/fd.c:3708 +#: storage/file/fd.c:3761 #, c-format msgid "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "synkroniserar datakatalog (fsync), förbrukad tid: %ld.%02d s, aktuell sökväg: %s" -#: storage/file/fd.c:3897 +#: storage/file/fd.c:3950 +#, c-format +msgid "\"debug_io_direct\" is not supported on this platform." +msgstr "\"debug_io_direct\" stöds inte på denna plattform." + +#: storage/file/fd.c:3964 +#, c-format +msgid "Invalid list syntax in parameter \"%s\"" +msgstr "Ogiltigt listsyntax för parameter \"%s\"" + +#: storage/file/fd.c:3984 #, c-format -msgid "debug_io_direct is not supported on this platform." -msgstr "debug_io_direct stöds inte på denna plattform." +msgid "Invalid option \"%s\"" +msgstr "Ogiltig flagga \"%s\"" -#: storage/file/fd.c:3944 +#: storage/file/fd.c:3997 #, c-format -msgid "debug_io_direct is not supported for WAL because XLOG_BLCKSZ is too small" -msgstr "debug_io_direct stöds inte för WAL då XLOG_BLCKSZ är för liten" +msgid "\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" +msgstr "\"debug_io_direct\" stöds inte för WAL då XLOG_BLCKSZ är för liten" -#: storage/file/fd.c:3951 +#: storage/file/fd.c:4004 #, c-format -msgid "debug_io_direct is not supported for data because BLCKSZ is too small" -msgstr "debug_io_direct stöds inte för data då BLCKSZ är för liten" +msgid "\"debug_io_direct\" is not supported for data because BLCKSZ is too small" +msgstr "\"debug_io_direct\" stöds inte för data då BLCKSZ är för liten" #: storage/file/reinit.c:145 #, c-format @@ -22060,22 +22858,22 @@ msgstr "nollställer ologgade relationer (init), förbrukad tid %ld.%02d s, aktu msgid "resetting unlogged relations (cleanup), elapsed time: %ld.%02d s, current path: %s" msgstr "nollställer ologgade relationer (cleanup), förbrukad tid %ld.%02d s, aktuell sökväg: %s" -#: storage/file/sharedfileset.c:79 +#: storage/file/sharedfileset.c:73 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "kunde inte koppla till en SharedFileSet som redan tagits bort" -#: storage/ipc/dsm.c:352 +#: storage/ipc/dsm.c:379 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "dynamiskt delat minnes kontrollsegment är korrupt" -#: storage/ipc/dsm.c:417 +#: storage/ipc/dsm.c:444 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "dynamiskt delat minnes kontrollsegment är inte giltigt" -#: storage/ipc/dsm.c:599 +#: storage/ipc/dsm.c:626 #, c-format msgid "too many dynamic shared memory segments" msgstr "för många dynamiska delade minnessegment" @@ -22135,73 +22933,99 @@ msgstr "kunde inte stänga delat minnessegment \"%s\": %m" msgid "could not duplicate handle for \"%s\": %m" msgstr "kunde inte duplicera handle för \"%s\": %m" -#: storage/ipc/procarray.c:3796 +#: storage/ipc/dsm_registry.c:142 +#, c-format +msgid "DSM segment name cannot be empty" +msgstr "Namn på DSM-segment får inte vara tomt" + +#: storage/ipc/dsm_registry.c:146 +#, c-format +msgid "DSM segment name too long" +msgstr "Namn på DSM-segment är för långt" + +#: storage/ipc/dsm_registry.c:150 +#, c-format +msgid "DSM segment size must be nonzero" +msgstr "Storlek på DSM-segment får inte vara noll" + +#: storage/ipc/dsm_registry.c:176 +#, c-format +msgid "requested DSM segment size does not match size of existing segment" +msgstr "efterfrågad storlek på DSM-segment matchar inte storleken på nuvarande segment" + +#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:357 +#: tcop/backend_startup.c:304 +#, c-format +msgid "sorry, too many clients already" +msgstr "ledsen, för många klienter" + +#: storage/ipc/procarray.c:3857 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "databasen \"%s\" används av förberedda transationer" -#: storage/ipc/procarray.c:3828 storage/ipc/procarray.c:3837 -#: storage/ipc/signalfuncs.c:230 storage/ipc/signalfuncs.c:237 +#: 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 "rättighet saknas för att avsluta process" -#: storage/ipc/procarray.c:3829 storage/ipc/signalfuncs.c:231 +#: 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 "Bara roller med attributet %s får terminera processer för roller som har attributet %s." -#: storage/ipc/procarray.c:3838 storage/ipc/signalfuncs.c:238 +#: 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 "Bara roller med rättigheter från rollen vars process kommer termineras eller med rättigheter från rollen \"%s\" får terminera denna process." -#: storage/ipc/procsignal.c:420 +#: storage/ipc/procsignal.c:416 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "väntare fortfarande på att backend:en med PID %d skall acceptera ProcSignalBarrier" -#: storage/ipc/shm_mq.c:384 +#: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" msgstr "kan inte skicka ett meddelande med storlek %zu via kö i delat minne" -#: storage/ipc/shm_mq.c:719 +#: storage/ipc/shm_mq.c:718 #, c-format msgid "invalid message size %zu in shared memory queue" msgstr "ogiltig meddelandestorlek %zu i kö i delat minne" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:963 -#: storage/lmgr/lock.c:1001 storage/lmgr/lock.c:2786 storage/lmgr/lock.c:4171 -#: storage/lmgr/lock.c:4236 storage/lmgr/lock.c:4586 -#: storage/lmgr/predicate.c:2412 storage/lmgr/predicate.c:2427 -#: storage/lmgr/predicate.c:3824 storage/lmgr/predicate.c:4871 -#: utils/hash/dynahash.c:1107 +#: 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 "slut på delat minne" -#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 +#: storage/ipc/shmem.c:161 storage/ipc/shmem.c:257 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "slut på delat minne (%zu byte efterfrågat)" -#: storage/ipc/shmem.c:445 +#: storage/ipc/shmem.c:436 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "kunde inte skapa ShmemIndex-post för datastrukturen \"%s\"" -#: storage/ipc/shmem.c:460 +#: storage/ipc/shmem.c:451 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "ShmemIndex-poststorlek är fel för datastruktur \"%s\": förväntade %zu var %zu" -#: storage/ipc/shmem.c:479 +#: storage/ipc/shmem.c:470 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "otillräckligt delat minne för datastruktur \"%s\" (efterfrågade %zu byte)" -#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 +#: storage/ipc/shmem.c:502 storage/ipc/shmem.c:521 #, c-format msgid "requested shared memory size overflows size_t" msgstr "efterfrågad delat minnesstorlek överskrider size_t" @@ -22211,128 +23035,124 @@ msgstr "efterfrågad delat minnesstorlek överskrider size_t" msgid "PID %d is not a PostgreSQL backend process" msgstr "PID %d är inte en PostgreSQL backend-process" -#: storage/ipc/signalfuncs.c:104 storage/lmgr/proc.c:1379 -#: utils/adt/mcxtfuncs.c:190 +#: 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 "kunde inte skicka signal till process %d: %m" -#: storage/ipc/signalfuncs.c:124 storage/ipc/signalfuncs.c:131 +#: storage/ipc/signalfuncs.c:129 storage/ipc/signalfuncs.c:136 #, c-format msgid "permission denied to cancel query" msgstr "rättighet saknas för att avbryta fråga" -#: storage/ipc/signalfuncs.c:125 +#: storage/ipc/signalfuncs.c:130 #, c-format msgid "Only roles with the %s attribute may cancel queries of roles with the %s attribute." msgstr "Bara roller med attributet %s får avbryta frågor åt roller med attributet %s." -#: storage/ipc/signalfuncs.c:132 +#: storage/ipc/signalfuncs.c:137 #, c-format msgid "Only roles with privileges of the role whose query is being canceled or with privileges of the \"%s\" role may cancel this query." msgstr "Bara roller med rättigheter från rollen vars fråga kommer avbrytas eller med rättigheter från rollen \"%s\" får avbryta denna fråga." -#: storage/ipc/signalfuncs.c:174 +#: storage/ipc/signalfuncs.c:179 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "kunde inte kontrollera existensen av en backend med PID %d: %m" -#: storage/ipc/signalfuncs.c:192 +#: storage/ipc/signalfuncs.c:197 #, c-format msgid "backend with PID %d did not terminate within %lld millisecond" msgid_plural "backend with PID %d did not terminate within %lld milliseconds" msgstr[0] "backend med PID %d terminerade inte inom %lld millisekund" msgstr[1] "backend med PID %d terminerade inte inom %lld millisekunder" -#: storage/ipc/signalfuncs.c:223 +#: storage/ipc/signalfuncs.c:228 #, c-format msgid "\"timeout\" must not be negative" msgstr "\"timeout\" kan inte vara negativ" -#: storage/ipc/signalfuncs.c:279 -#, c-format -msgid "must be superuser to rotate log files with adminpack 1.0" -msgstr "måste vara superuser för att rotera loggfiler med adminpack 1.0" - -#. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:281 utils/adt/genfile.c:250 -#, c-format -msgid "Consider using %s, which is part of core, instead." -msgstr "Du kanske kan använda %s istället som är en del av core." - -#: storage/ipc/signalfuncs.c:287 storage/ipc/signalfuncs.c:307 +#: storage/ipc/signalfuncs.c:285 #, c-format msgid "rotation not possible because log collection not active" msgstr "rotering är inte möjligt då logginsamling inte är aktiverad" -#: storage/ipc/standby.c:330 +#: storage/ipc/standby.c:329 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "återställning väntar fortfarande efter %ld.%03d ms: %s" -#: storage/ipc/standby.c:339 +#: storage/ipc/standby.c:338 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "återställning slutade vänta efter efter %ld.%03d ms: %s" -#: storage/ipc/standby.c:921 tcop/postgres.c:3384 +#: storage/ipc/standby.c:920 tcop/postgres.c:3196 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "avbryter sats på grund av konflikt med återställning" -#: storage/ipc/standby.c:922 tcop/postgres.c:2533 +#: storage/ipc/standby.c:921 tcop/postgres.c:2557 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Användartransaktion orsakade deadlock för buffer vid återställning." -#: storage/ipc/standby.c:1488 +#: storage/ipc/standby.c:1486 msgid "unknown reason" msgstr "okänt skäl" -#: storage/ipc/standby.c:1493 +#: storage/ipc/standby.c:1491 msgid "recovery conflict on buffer pin" msgstr "återställningskonflikt vid bufferfastlåsning" -#: storage/ipc/standby.c:1496 +#: storage/ipc/standby.c:1494 msgid "recovery conflict on lock" msgstr "återställningskonflikt vid lås" -#: storage/ipc/standby.c:1499 +#: storage/ipc/standby.c:1497 msgid "recovery conflict on tablespace" msgstr "återställningskonflikt vid tabellutrymme" -#: storage/ipc/standby.c:1502 +#: storage/ipc/standby.c:1500 msgid "recovery conflict on snapshot" msgstr "återställningskonflikt vid snapshot" -#: storage/ipc/standby.c:1505 +#: storage/ipc/standby.c:1503 msgid "recovery conflict on replication slot" msgstr "återställningskonflikt vid replikeringsslot" -#: storage/ipc/standby.c:1508 +#: storage/ipc/standby.c:1506 msgid "recovery conflict on buffer deadlock" msgstr "återställningskonflikt vid bufferdeadlock" -#: storage/ipc/standby.c:1511 +#: storage/ipc/standby.c:1509 msgid "recovery conflict on database" msgstr "återställningskonflikt vid databas" -#: storage/large_object/inv_api.c:191 +#: storage/large_object/inv_api.c:190 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "pg_largeobject-post för OID %u, sida %d har ogiltig datafältstorlek %d" -#: storage/large_object/inv_api.c:274 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "ogiltiga flaggor för att öppna stort objekt: %d" -#: storage/large_object/inv_api.c:457 +#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 +#: storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 +#: storage/large_object/inv_api.c:807 +#, c-format +msgid "permission denied for large object %u" +msgstr "rättighet saknas för stort objekt %u" + +#: storage/large_object/inv_api.c:455 #, c-format msgid "invalid whence setting: %d" msgstr "ogiltig whence-inställning: %d" -#: storage/large_object/inv_api.c:629 +#: storage/large_object/inv_api.c:627 #, c-format msgid "invalid large object write request size: %d" msgstr "ogiltig storlek för stort objects skrivningbegäran: %d" @@ -22357,211 +23177,211 @@ msgstr "deadlock upptäckt" msgid "See server log for query details." msgstr "Se server-logg för frågedetaljer." -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "vid uppdatering av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:862 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "vid borttagning av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:865 +#: storage/lmgr/lmgr.c:854 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "vid låsning av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:868 +#: storage/lmgr/lmgr.c:857 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "vid låsning av uppdaterad version (%u,%u) av tupel i relation \"%s\"" -#: storage/lmgr/lmgr.c:871 +#: storage/lmgr/lmgr.c:860 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "vid insättning av indextupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:874 +#: storage/lmgr/lmgr.c:863 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "vid kontroll av unikhet av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:877 +#: storage/lmgr/lmgr.c:866 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "vid återkontroll av uppdaterad tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:880 +#: storage/lmgr/lmgr.c:869 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "vid kontroll av uteslutningsvillkor av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:1174 +#: storage/lmgr/lmgr.c:1239 #, c-format msgid "relation %u of database %u" msgstr "relation %u i databasen %u" -#: storage/lmgr/lmgr.c:1180 +#: storage/lmgr/lmgr.c:1245 #, c-format msgid "extension of relation %u of database %u" msgstr "utökning av relation %u i databas %u" -#: storage/lmgr/lmgr.c:1186 +#: storage/lmgr/lmgr.c:1251 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid för databas %u" -#: storage/lmgr/lmgr.c:1191 +#: storage/lmgr/lmgr.c:1256 #, c-format msgid "page %u of relation %u of database %u" msgstr "sida %u i relation %u i databas %u" -#: storage/lmgr/lmgr.c:1198 +#: storage/lmgr/lmgr.c:1263 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "tuple (%u,%u) i relation %u i databas %u" -#: storage/lmgr/lmgr.c:1206 +#: storage/lmgr/lmgr.c:1271 #, c-format msgid "transaction %u" msgstr "transaktion %u" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1276 #, c-format msgid "virtual transaction %d/%u" msgstr "vituell transaktion %d/%u" -#: storage/lmgr/lmgr.c:1217 +#: storage/lmgr/lmgr.c:1282 #, c-format msgid "speculative token %u of transaction %u" msgstr "spekulativ token %u för transaktion %u" -#: storage/lmgr/lmgr.c:1223 +#: storage/lmgr/lmgr.c:1288 #, c-format msgid "object %u of class %u of database %u" msgstr "objekt %u av klass %u i databas %u" -#: storage/lmgr/lmgr.c:1231 +#: storage/lmgr/lmgr.c:1296 #, c-format msgid "user lock [%u,%u,%u]" msgstr "användarlås [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1238 +#: storage/lmgr/lmgr.c:1303 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "rådgivande lås [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1246 +#: storage/lmgr/lmgr.c:1311 #, c-format msgid "remote transaction %u of subscription %u of database %u" msgstr "fjärrtransaktion %u för prenumeration %u i databas %u" -#: storage/lmgr/lmgr.c:1253 +#: storage/lmgr/lmgr.c:1318 #, c-format msgid "unrecognized locktag type %d" msgstr "okänd låsetikettyp %d" -#: storage/lmgr/lock.c:791 +#: storage/lmgr/lock.c:812 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "kan inte ta låsläge %s på databasobjekt när återställning pågår" -#: storage/lmgr/lock.c:793 +#: storage/lmgr/lock.c:814 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Bara RowExclusiveLock eller lägre kan tas på databasobjekt under återställning." -#: storage/lmgr/lock.c:3235 storage/lmgr/lock.c:3303 storage/lmgr/lock.c:3419 +#: 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 "kan inte göra PREPARE samtidigt som vi håller lås på sessionsnivå och transaktionsnivå för samma objekt" -#: storage/lmgr/predicate.c:649 +#: storage/lmgr/predicate.c:653 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "ej tillräckligt med element i RWConflictPool för att spara ner en läs/skriv-konflikt" -#: storage/lmgr/predicate.c:650 storage/lmgr/predicate.c:675 +#: storage/lmgr/predicate.c:654 storage/lmgr/predicate.c:679 #, c-format -msgid "You might need to run fewer transactions at a time or increase max_connections." -msgstr "Du kan behöva köra färre samtidiga transaktioner eller öka max_connections." +msgid "You might need to run fewer transactions at a time or increase \"max_connections\"." +msgstr "Du kan behöva köra färre samtidiga transaktioner eller öka \"max_connections\"." -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/predicate.c:678 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "ej tillräckligt med element i RWConflictPool för att spara ner en potentiell läs/skriv-konflikt" -#: storage/lmgr/predicate.c:1630 +#: storage/lmgr/predicate.c:1686 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "\"default_transaction_isolation\" är satt till \"serializable\"." -#: storage/lmgr/predicate.c:1631 +#: storage/lmgr/predicate.c:1687 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Du kan använda \"SET default_transaction_isolation = 'repeatable read'\" för att ändra standardvärdet." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1738 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "en snapshot-importerande transaktion får inte vara READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1761 utils/time/snapmgr.c:570 -#: utils/time/snapmgr.c:576 +#: 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 "kunde inte importera efterfrågat snapshot" -#: storage/lmgr/predicate.c:1762 utils/time/snapmgr.c:577 +#: storage/lmgr/predicate.c:1818 utils/time/snapmgr.c:542 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "Källprocessen med PID %d kör inte längre." -#: storage/lmgr/predicate.c:3935 storage/lmgr/predicate.c:3971 -#: storage/lmgr/predicate.c:4004 storage/lmgr/predicate.c:4012 -#: storage/lmgr/predicate.c:4051 storage/lmgr/predicate.c:4281 -#: storage/lmgr/predicate.c:4600 storage/lmgr/predicate.c:4612 -#: storage/lmgr/predicate.c:4659 storage/lmgr/predicate.c:4695 +#: 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 "kunde inte serialisera åtkomst på grund av läs/skriv-beroenden bland transaktionerna" -#: storage/lmgr/predicate.c:3937 storage/lmgr/predicate.c:3973 -#: storage/lmgr/predicate.c:4006 storage/lmgr/predicate.c:4014 -#: storage/lmgr/predicate.c:4053 storage/lmgr/predicate.c:4283 -#: storage/lmgr/predicate.c:4602 storage/lmgr/predicate.c:4614 -#: storage/lmgr/predicate.c:4661 storage/lmgr/predicate.c:4697 +#: 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 "Transaktionen kan lyckas om den körs igen." -#: storage/lmgr/proc.c:349 +#: storage/lmgr/proc.c:353 #, c-format -msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" -msgstr "antalet efterfrågade standby-anslutningar överskrider max_wal_senders (nu %d)" +msgid "number of requested standby connections exceeds \"max_wal_senders\" (currently %d)" +msgstr "antalet efterfrågade standby-anslutningar överskrider \"max_wal_senders\" (nu %d)" -#: storage/lmgr/proc.c:1472 +#: 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 "process %d undvek deadlock på %s för %s genom att kasta om köordningen efter %ld.%03d ms" -#: storage/lmgr/proc.c:1487 +#: storage/lmgr/proc.c:1561 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "process %d upptäckte deadlock medan den väntade på %s för %s efter %ld.%03d ms" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1570 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "process %d väntar fortfarande på %s för %s efter %ld.%03d ms" -#: storage/lmgr/proc.c:1503 +#: storage/lmgr/proc.c:1577 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "process %d fick %s på %s efter %ld.%03d ms" -#: storage/lmgr/proc.c:1520 +#: storage/lmgr/proc.c:1594 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "process %d misslyckades att ta %s på %s efter %ld.%03d ms" @@ -22594,67 +23414,202 @@ msgstr "trasiga postlängder: totalt %u, tillgänglig plats %u" msgid "corrupted line pointer: offset = %u, size = %u" msgstr "korrupt radpekare: offset = %u, storlek = %u" -#: storage/smgr/md.c:487 storage/smgr/md.c:549 +#: storage/smgr/md.c:485 storage/smgr/md.c:547 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "kan inte utöka fil \"%s\" utöver %u block" -#: storage/smgr/md.c:502 storage/smgr/md.c:613 +#: storage/smgr/md.c:500 storage/smgr/md.c:611 #, c-format msgid "could not extend file \"%s\": %m" msgstr "kunde inte utöka fil \"%s\": %m" -#: storage/smgr/md.c:508 +#: storage/smgr/md.c:506 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "kunde inte utöka fil \"%s\": skrev bara %d av %d byte vid block %u" -#: storage/smgr/md.c:591 +#: storage/smgr/md.c:589 #, c-format msgid "could not extend file \"%s\" with FileFallocate(): %m" msgstr "kunde inte utöka fil \"%s\" med FileFallocate(): %m" -#: storage/smgr/md.c:782 -#, c-format -msgid "could not read block %u in file \"%s\": %m" -msgstr "kunde inte läsa block %u i fil \"%s\": %m" - -#: storage/smgr/md.c:798 +#: storage/smgr/md.c:869 #, c-format -msgid "could not read block %u in file \"%s\": read only %d of %d bytes" -msgstr "kunde inte läsa block %u i fil \"%s\": läste bara %d av %d byte" +msgid "could not read blocks %u..%u in file \"%s\": %m" +msgstr "kunde inte läsa block %u..%u i fil \"%s\": %m" -#: storage/smgr/md.c:856 +#: storage/smgr/md.c:895 #, c-format -msgid "could not write block %u in file \"%s\": %m" -msgstr "kunde inte skriva block %u i fil \"%s\": %m" +msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" +msgstr "kunde inte läsa block %u..%u i fil \"%s\": läste bara %zu av %zu byte" -#: storage/smgr/md.c:861 +#: storage/smgr/md.c:995 #, c-format -msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" -msgstr "kunde inte skriva block %u i fil \"%s\": skrev bara %d av %d byte" +msgid "could not write blocks %u..%u in file \"%s\": %m" +msgstr "kunde inte skriva block %u..%u i fil \"%s\": %m" -#: storage/smgr/md.c:1012 +#: storage/smgr/md.c:1165 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "kunde inte trunkera fil \"%s\" till %u block: den är bara %u block nu" -#: storage/smgr/md.c:1067 +#: storage/smgr/md.c:1220 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "kunde inte trunkera fil \"%s\" till %u block: %m" -#: storage/smgr/md.c:1494 +#: storage/smgr/md.c:1700 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "kunde inte öppna fil \"%s\" (målblock %u): föregående segment är bara %u block" -#: storage/smgr/md.c:1508 +#: storage/smgr/md.c:1714 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "kunde inte öppna fil \"%s\" (målblock %u): %m" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2132 +#: tcop/backend_startup.c:85 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "SSL-konfigurering kunde inte laddas i barnprocess" + +#: tcop/backend_startup.c:208 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "ansluting mottagen: värd=%s port=%s" + +#: tcop/backend_startup.c:213 +#, c-format +msgid "connection received: host=%s" +msgstr "ansluting mottagen: värd=%s" + +#: tcop/backend_startup.c:277 +#, c-format +msgid "the database system is starting up" +msgstr "databassystemet startar upp" + +#: tcop/backend_startup.c:283 +#, c-format +msgid "the database system is not yet accepting connections" +msgstr "databassystemet tar ännu inte emot anslutningar" + +#: tcop/backend_startup.c:284 +#, c-format +msgid "Consistent recovery state has not been yet reached." +msgstr "Konsistent återställningstillstånd har ännu inte uppnåtts." + +#: tcop/backend_startup.c:288 +#, c-format +msgid "the database system is not accepting connections" +msgstr "databassystemet tar inte emot anslutningar" + +#: tcop/backend_startup.c:289 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "Hot standby-läge är avstängt." + +#: tcop/backend_startup.c:294 +#, c-format +msgid "the database system is shutting down" +msgstr "databassystemet stänger ner" + +#: tcop/backend_startup.c:299 +#, c-format +msgid "the database system is in recovery mode" +msgstr "databassystemet är återställningsläge" + +#: tcop/backend_startup.c:414 +#, c-format +msgid "received direct SSL connection request without ALPN protocol negotiation extension" +msgstr "förfrågan för direkt SSL-anslutning har mottagits utan utökning för ALPN-protokollförhandling" + +#: tcop/backend_startup.c:420 +#, c-format +msgid "direct SSL connection accepted" +msgstr "direkt SSL-anslutning accepterad" + +#: tcop/backend_startup.c:430 +#, c-format +msgid "direct SSL connection rejected" +msgstr "direkt SSL-anslutning avvisad" + +#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 +#, c-format +msgid "incomplete startup packet" +msgstr "ofullständigt startuppaket" + +#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 +#, c-format +msgid "invalid length of startup packet" +msgstr "ogiltig längd på startuppaket" + +#: tcop/backend_startup.c:573 +#, c-format +msgid "SSLRequest accepted" +msgstr "SSLRequest accepterad" + +#: tcop/backend_startup.c:576 +#, c-format +msgid "SSLRequest rejected" +msgstr "SSLRequest nekad" + +#: tcop/backend_startup.c:585 +#, c-format +msgid "failed to send SSL negotiation response: %m" +msgstr "misslyckades att skicka SSL-förhandlingssvar: %m" + +#: tcop/backend_startup.c:603 +#, c-format +msgid "received unencrypted data after SSL request" +msgstr "tog emot okrypterad data efter SSL-förfrågan" + +#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 +#, c-format +msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." +msgstr "Detta kan antingen vara en bug i klientens mjukvara eller bevis på ett försök att utföra en attack av typen man-in-the-middle." + +#: tcop/backend_startup.c:627 +#, c-format +msgid "GSSENCRequest accepted" +msgstr "GSSENCRequest accepterad" + +#: tcop/backend_startup.c:630 +#, c-format +msgid "GSSENCRequest rejected" +msgstr "GSSENCRequest nekad" + +#: tcop/backend_startup.c:639 +#, c-format +msgid "failed to send GSSAPI negotiation response: %m" +msgstr "misslyckades att skicka GSSAPI-förhandlingssvar: %m" + +#: tcop/backend_startup.c:657 +#, c-format +msgid "received unencrypted data after GSSAPI encryption request" +msgstr "tog emot okrypterad data efter GSSAPI-krypteringsförfrågan" + +#: tcop/backend_startup.c:681 +#, c-format +msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" +msgstr "inget stöd för framändans protokoll %u.%u: servern stöder %u.0 till %u.%u" + +#: tcop/backend_startup.c:744 +#, c-format +msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." +msgstr "Giltiga värden är: \"false\", 0, \"true\", 1, \"database\"." + +#: tcop/backend_startup.c:785 +#, c-format +msgid "invalid startup packet layout: expected terminator as last byte" +msgstr "ogiltig startpaketlayout: förväntade en terminator som sista byte" + +#: tcop/backend_startup.c:802 +#, c-format +msgid "no PostgreSQL user name specified in startup packet" +msgstr "inget PostgreSQL-användarnamn angivet i startuppaketet" + +#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "funktionen med OID %u existerar inte" @@ -22669,8 +23624,8 @@ msgstr "kan inte anropa funktionen \"%s\" via fastpath-interface" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "fastpath funktionsanrop: \"%s\" (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 -#: tcop/postgres.c:2059 tcop/postgres.c:2309 +#: 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 "varaktighet %s ms" @@ -22700,315 +23655,320 @@ msgstr "ogiltig argumentstorlek %d i funktionsaropsmeddelande" msgid "incorrect binary data format in function argument %d" msgstr "inkorrekt binärt dataformat i funktionsargument %d" -#: tcop/postgres.c:463 tcop/postgres.c:4882 +#: tcop/postgres.c:467 tcop/postgres.c:5012 #, c-format msgid "invalid frontend message type %d" msgstr "ogiltig frontend-meddelandetyp %d" -#: tcop/postgres.c:1072 +#: tcop/postgres.c:1076 #, c-format msgid "statement: %s" msgstr "sats: %s" -#: tcop/postgres.c:1370 +#: tcop/postgres.c:1374 #, c-format msgid "duration: %s ms statement: %s" msgstr "varaktighet: %s ms sats: %s" -#: tcop/postgres.c:1476 +#: tcop/postgres.c:1480 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "kan inte stoppa in multipla kommandon i en förberedd sats" -#: tcop/postgres.c:1606 +#: tcop/postgres.c:1610 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "varaktighet: %s ms parse %s: %s" -#: tcop/postgres.c:1672 tcop/postgres.c:2629 +#: tcop/postgres.c:1677 tcop/postgres.c:2653 #, c-format msgid "unnamed prepared statement does not exist" msgstr "förberedd sats utan namn existerar inte" -#: tcop/postgres.c:1713 +#: tcop/postgres.c:1729 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "bind-meddelande har %d parameterformat men %d parametrar" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1735 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "bind-meddelande ger %d parametrar men förberedd sats \"%s\" kräver %d" -#: tcop/postgres.c:1937 +#: tcop/postgres.c:1949 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "inkorrekt binärdataformat i bind-parameter %d" -#: tcop/postgres.c:2064 +#: tcop/postgres.c:2076 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "varaktighet: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:2118 tcop/postgres.c:2712 +#: tcop/postgres.c:2131 tcop/postgres.c:2735 #, c-format msgid "portal \"%s\" does not exist" msgstr "portal \"%s\" existerar inte" -#: tcop/postgres.c:2189 +#: tcop/postgres.c:2213 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2191 tcop/postgres.c:2317 +#: tcop/postgres.c:2215 tcop/postgres.c:2341 msgid "execute fetch from" msgstr "kör hämtning från" -#: tcop/postgres.c:2192 tcop/postgres.c:2318 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute" msgstr "kör" -#: tcop/postgres.c:2314 +#: tcop/postgres.c:2338 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "varaktighet: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2462 +#: tcop/postgres.c:2486 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2487 +#: tcop/postgres.c:2511 #, c-format -msgid "parameters: %s" -msgstr "parametrar: %s" +msgid "Parameters: %s" +msgstr "Parametrar: %s" -#: tcop/postgres.c:2502 +#: tcop/postgres.c:2526 #, c-format -msgid "abort reason: recovery conflict" -msgstr "abortskäl: återställningskonflikt" +msgid "Abort reason: recovery conflict" +msgstr "Abortskäl: återställningskonflikt" -#: tcop/postgres.c:2518 +#: tcop/postgres.c:2542 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Användaren höll delad bufferfastlåsning för länge." -#: tcop/postgres.c:2521 +#: tcop/postgres.c:2545 #, c-format msgid "User was holding a relation lock for too long." msgstr "Användare höll ett relationslås för länge." -#: tcop/postgres.c:2524 +#: tcop/postgres.c:2548 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "Användaren använde eller har använt ett tablespace som tagits bort." -#: tcop/postgres.c:2527 +#: tcop/postgres.c:2551 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "Användarfrågan kan ha behövt se radversioner som har tagits bort." -#: tcop/postgres.c:2530 +#: tcop/postgres.c:2554 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "Användaren använde en logisk replikeringsslot som måste invalideras." -#: tcop/postgres.c:2536 +#: tcop/postgres.c:2560 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Användare var ansluten till databas som måste slängas." -#: tcop/postgres.c:2575 +#: tcop/postgres.c:2599 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "portal \"%s\" parameter $%d = %s" -#: tcop/postgres.c:2578 +#: tcop/postgres.c:2602 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "portal \"%s\" parameter $%d" -#: tcop/postgres.c:2584 +#: tcop/postgres.c:2608 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "ej namngiven portalparameter $%d = %s" -#: tcop/postgres.c:2587 +#: tcop/postgres.c:2611 #, c-format msgid "unnamed portal parameter $%d" msgstr "ej namngiven portalparameter $%d" -#: tcop/postgres.c:2932 +#: tcop/postgres.c:2955 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "stänger anslutning på grund av oväntad SIGQUIT-signal" -#: tcop/postgres.c:2938 +#: tcop/postgres.c:2961 #, c-format msgid "terminating connection because of crash of another server process" msgstr "avbryter anslutning på grund av en krash i en annan serverprocess" -#: tcop/postgres.c:2939 +#: 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 "Postmastern har sagt åt denna serverprocess att rulla tillbaka den aktuella transaktionen och avsluta då en annan process har avslutats onormalt och har eventuellt trasat sönder delat minne." -#: tcop/postgres.c:2943 tcop/postgres.c:3310 +#: 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 "Du kan strax återansluta till databasen och upprepa kommandot." -#: tcop/postgres.c:2950 +#: tcop/postgres.c:2973 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "stänger anslutning på grund av kommando för omedelbar nedstängning" -#: tcop/postgres.c:3036 +#: tcop/postgres.c:3051 #, c-format msgid "floating-point exception" msgstr "flyttalsavbrott" -#: tcop/postgres.c:3037 +#: 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 "En ogiltig flyttalsoperation har signalerats. Detta beror troligen på ett resultat som är utanför giltigt intervall eller en ogiltig operation så som division med noll." -#: tcop/postgres.c:3214 +#: tcop/postgres.c:3217 +#, c-format +msgid "terminating connection due to conflict with recovery" +msgstr "avslutar anslutning på grund av konflikt med återställning" + +#: tcop/postgres.c:3289 #, c-format msgid "canceling authentication due to timeout" msgstr "avbryter autentisering på grund av timeout" -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3293 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "avslutar autovacuum-process på grund av ett administratörskommando" -#: tcop/postgres.c:3222 +#: tcop/postgres.c:3297 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "avslutar logisk replikeringsarbetare på grund av ett administratörskommando" -#: tcop/postgres.c:3239 tcop/postgres.c:3249 tcop/postgres.c:3308 -#, c-format -msgid "terminating connection due to conflict with recovery" -msgstr "avslutar anslutning på grund av konflikt med återställning" - -#: tcop/postgres.c:3260 +#: tcop/postgres.c:3317 #, c-format msgid "terminating connection due to administrator command" msgstr "avslutar anslutning på grund av ett administratörskommando" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3348 #, c-format msgid "connection to client lost" msgstr "anslutning till klient har brutits" -#: tcop/postgres.c:3361 +#: tcop/postgres.c:3400 #, c-format msgid "canceling statement due to lock timeout" msgstr "avbryter sats på grund av lås-timeout" -#: tcop/postgres.c:3368 +#: tcop/postgres.c:3407 #, c-format msgid "canceling statement due to statement timeout" msgstr "avbryter sats på grund av sats-timeout" -#: tcop/postgres.c:3375 +#: tcop/postgres.c:3414 #, c-format msgid "canceling autovacuum task" msgstr "avbryter autovacuum-uppgift" -#: tcop/postgres.c:3398 +#: tcop/postgres.c:3427 #, c-format msgid "canceling statement due to user request" msgstr "avbryter sats på användares begäran" -#: tcop/postgres.c:3412 +#: tcop/postgres.c:3448 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "terminerar anslutning på grund av idle-in-transaction-timeout" -#: tcop/postgres.c:3423 +#: tcop/postgres.c:3461 +#, c-format +msgid "terminating connection due to transaction timeout" +msgstr "terminerar anslutning på grund av transaktionstimeout" + +#: tcop/postgres.c:3474 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "stänger anslutning på grund av idle-session-timeout" -#: tcop/postgres.c:3514 +#: tcop/postgres.c:3564 #, c-format msgid "stack depth limit exceeded" msgstr "maximalt stackdjup överskridet" -#: tcop/postgres.c:3515 +#: 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 "Öka konfigurationsparametern \"max_stack_depth\" (nu %dkB) efter att ha undersökt att plattformens gräns för stackdjup är tillräcklig." -#: tcop/postgres.c:3562 +#: tcop/postgres.c:3612 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\" får ej överskrida %ldkB." -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3614 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Öka plattformens stackdjupbegränsning via \"ulimit -s\" eller motsvarande." -#: tcop/postgres.c:3587 +#: tcop/postgres.c:3637 #, c-format -msgid "client_connection_check_interval must be set to 0 on this platform." -msgstr "client_connection_check_interval måste sättas till 0 på denna plattform." +msgid "\"client_connection_check_interval\" must be set to 0 on this platform." +msgstr "\"client_connection_check_interval\" måste sättas till 0 på denna plattform." -#: tcop/postgres.c:3608 +#: tcop/postgres.c:3658 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kan inte slå på parameter när \"log_statement_stats\" är satt." -#: tcop/postgres.c:3623 +#: 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 "Kan inte slå på \"log_statement_stats\" när \"log_parser_stats\", \"log_planner_stats\" eller \"log_executor_stats\" är satta." -#: tcop/postgres.c:3971 +#: tcop/postgres.c:4098 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ogiltigt kommandoradsargument för serverprocess: %s" -#: tcop/postgres.c:3972 tcop/postgres.c:3978 +#: tcop/postgres.c:4099 tcop/postgres.c:4105 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: tcop/postgres.c:3976 +#: tcop/postgres.c:4103 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ogiltigt kommandoradsargument: %s" -#: tcop/postgres.c:4029 +#: tcop/postgres.c:4156 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: ingen databas eller användarnamn angivet" -#: tcop/postgres.c:4779 +#: tcop/postgres.c:4909 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ogiltig subtyp %d för CLOSE-meddelande" -#: tcop/postgres.c:4816 +#: tcop/postgres.c:4946 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ogiltig subtyp %d för DESCRIBE-meddelande" -#: tcop/postgres.c:4903 +#: tcop/postgres.c:5033 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "fastpath-funktionsanrop stöds inte i en replikeringsanslutning" -#: tcop/postgres.c:4907 +#: tcop/postgres.c:5037 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "utökat frågeprotokoll stöds inte i en replikeringsanslutning" -#: tcop/postgres.c:5087 +#: tcop/postgres.c:5217 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "nedkoppling: sessionstid: %d:%02d:%02d.%03d användare=%s databas=%s värd=%s%s%s" @@ -23018,53 +23978,53 @@ msgstr "nedkoppling: sessionstid: %d:%02d:%02d.%03d användare=%s databas=%s vä msgid "bind message has %d result formats but query has %d columns" msgstr "bind-meddelande har %d resultatformat men frågan har %d kolumner" -#: 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 "markör kan bara hoppa framåt" -#: 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 "Deklarera den med flaggan SCROLL för att kunna traversera bakåt." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:417 +#: tcop/utility.c:410 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "kan inte köra %s i read-only-transaktion" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:435 +#: tcop/utility.c:428 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "kan inte köra %s under parallell operation" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:454 +#: tcop/utility.c:447 #, c-format msgid "cannot execute %s during recovery" msgstr "kan inte köra %s under återställning" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:472 +#: tcop/utility.c:465 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "kan inte köra %s inom säkerhetsbegränsad operation" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:828 +#: tcop/utility.c:821 #, c-format msgid "cannot execute %s within a background process" msgstr "kan inte köra %s i en bakgrundsprocess" #. translator: %s is name of a SQL command, eg CHECKPOINT -#: tcop/utility.c:954 +#: tcop/utility.c:947 #, c-format msgid "permission denied to execute %s command" msgstr "rättighet saknas för köra kommandot %s" -#: tcop/utility.c:956 +#: tcop/utility.c:949 #, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." msgstr "Bara roller med rättigheter från rollen \"%s\" får köra detta kommando." @@ -23127,7 +24087,7 @@ msgstr "kunde inte öppna synonymordboksfil \"%s\": %m" #: tsearch/dict_thesaurus.c:212 #, c-format msgid "unexpected delimiter" -msgstr "oväntad avdelare" +msgstr "oväntad separator" #: tsearch/dict_thesaurus.c:262 tsearch/dict_thesaurus.c:278 #, c-format @@ -23246,17 +24206,17 @@ msgstr "antalet alias överskriver angivet antal %d" msgid "affix file contains both old-style and new-style commands" msgstr "affix-fil innehåller kommandon på gammalt och nytt format" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:278 utils/adt/tsvector_op.c:1128 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "strängen är för lång för tsvector (%d byte, max %d byte)" -#: tsearch/ts_locale.c:238 +#: tsearch/ts_locale.c:236 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "rad %d i konfigureringsfil \"%s\": \"%s\"" -#: tsearch/ts_locale.c:317 +#: tsearch/ts_locale.c:315 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "konvertering från wchar_t till serverkodning misslyckades: %m" @@ -23283,72 +24243,67 @@ msgstr "ogiltigt filnamn \"%s\" till textsökkonfiguration" msgid "could not open stop-word file \"%s\": %m" msgstr "kunde inte öppna stoppordsfil \"%s\": %m" -#: tsearch/wparser.c:308 tsearch/wparser.c:396 tsearch/wparser.c:473 +#: tsearch/wparser.c:306 tsearch/wparser.c:394 tsearch/wparser.c:471 #, c-format msgid "text search parser does not support headline creation" msgstr "textsökparsern stöder inte skapande av rubriker" -#: tsearch/wparser_def.c:2663 +#: tsearch/wparser_def.c:2664 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "okänd rubrikparameter: \"%s\"" -#: tsearch/wparser_def.c:2673 -#, c-format -msgid "MinWords should be less than MaxWords" -msgstr "MinWords skall vara mindre än MaxWords" - -#: tsearch/wparser_def.c:2677 +#: tsearch/wparser_def.c:2674 #, c-format -msgid "MinWords should be positive" -msgstr "MinWords skall vara positiv" +msgid "%s must be less than %s" +msgstr "%s måste vara mindre än %s" -#: tsearch/wparser_def.c:2681 +#: tsearch/wparser_def.c:2678 #, c-format -msgid "ShortWord should be >= 0" -msgstr "ShortWord skall vara >= 0" +msgid "%s must be positive" +msgstr "%s måste vara positiv" -#: tsearch/wparser_def.c:2685 +#: tsearch/wparser_def.c:2682 tsearch/wparser_def.c:2686 #, c-format -msgid "MaxFragments should be >= 0" -msgstr "MaxFragments skall vara >= 0" +msgid "%s must be >= 0" +msgstr "%s måste vara >= 0" -#: utils/activity/pgstat.c:438 +#: utils/activity/pgstat.c:435 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "kunde inte radera permanent statistikfil \"%s\": %m" -#: utils/activity/pgstat.c:1252 +#: utils/activity/pgstat.c:1255 #, c-format msgid "invalid statistics kind: \"%s\"" msgstr "ogiltig statistiktyp \"%s\"" -#: utils/activity/pgstat.c:1332 +#: utils/activity/pgstat.c:1335 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "kunde inte öppna temporär statistikfil \"%s\": %m" -#: utils/activity/pgstat.c:1444 +#: utils/activity/pgstat.c:1455 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "kunde inte skriva temporär statistikfil \"%s\": %m" -#: utils/activity/pgstat.c:1453 +#: utils/activity/pgstat.c:1464 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "kunde inte stänga temporär statistikfil \"%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 "kunde inte döpa om temporär statistikfil \"%s\" till \"%s\": %m" -#: utils/activity/pgstat.c:1510 +#: utils/activity/pgstat.c:1521 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "kunde inte öppna statistikfil \"%s\": %m" -#: utils/activity/pgstat.c:1672 +#: utils/activity/pgstat.c:1683 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "korrupt statistikfil \"%s\"" @@ -23358,115 +24313,125 @@ msgstr "korrupt statistikfil \"%s\"" msgid "function call to dropped function" msgstr "funktionsanrop till borttagen funktion" -#: utils/activity/pgstat_xact.c:363 +#: utils/activity/pgstat_xact.c:362 #, c-format msgid "resetting existing statistics for kind %s, db=%u, oid=%u" msgstr "återställer existerande statistik för typ %s, db=%u, oid=%u" -#: utils/adt/acl.c:177 utils/adt/name.c:93 +#: utils/activity/wait_event.c:207 utils/activity/wait_event.c:232 +#, c-format +msgid "wait event \"%s\" already exists in type \"%s\"" +msgstr "wait event \"%s\" finns redan i type \"%s\"" + +#: utils/activity/wait_event.c:246 +#, c-format +msgid "too many custom wait events" +msgstr "för många egendefinierade wait event" + +#: utils/adt/acl.c:183 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "identifieraren för lång" -#: utils/adt/acl.c:178 utils/adt/name.c:94 +#: utils/adt/acl.c:184 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Identifierare måste vara mindre än %d tecken." -#: utils/adt/acl.c:266 +#: utils/adt/acl.c:272 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "okänt nyckelord: \"%s\"" -#: utils/adt/acl.c:267 +#: utils/adt/acl.c:273 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL-nyckelord måste vara \"group\" eller \"user\"." -#: utils/adt/acl.c:275 +#: utils/adt/acl.c:281 #, c-format msgid "missing name" msgstr "namn saknas" -#: utils/adt/acl.c:276 +#: utils/adt/acl.c:282 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Ett namn måste följa efter nyckelorden \"group\" resp. \"user\"." -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:288 #, c-format msgid "missing \"=\" sign" msgstr "saknar \"=\"-tecken" -#: utils/adt/acl.c:341 +#: utils/adt/acl.c:350 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "ogiltigt lägestecken: måste vara en av \"%s\"" -#: utils/adt/acl.c:371 +#: utils/adt/acl.c:380 #, c-format msgid "a name must follow the \"/\" sign" msgstr "ett namn måste följa på tecknet \"/\"" -#: utils/adt/acl.c:383 +#: utils/adt/acl.c:392 #, c-format msgid "defaulting grantor to user ID %u" msgstr "sätter fullmaktsgivaranvändar-ID till standardvärdet %u" -#: utils/adt/acl.c:569 +#: utils/adt/acl.c:578 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL-array innehåller fel datatyp" -#: utils/adt/acl.c:573 +#: utils/adt/acl.c:582 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL-array:er måste vara endimensionella" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:586 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL-array:er får inte innehålla null-värden" -#: utils/adt/acl.c:606 +#: utils/adt/acl.c:615 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "skräp vid slutet av ACL-angivelse" -#: utils/adt/acl.c:1248 +#: utils/adt/acl.c:1263 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "fullmaksgivarflaggor kan inte ges tillbaka till den som givit det till dig" -#: utils/adt/acl.c:1564 +#: utils/adt/acl.c:1579 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert stöds inte länge" -#: utils/adt/acl.c:1574 +#: utils/adt/acl.c:1589 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove stöds inte längre" -#: utils/adt/acl.c:1693 +#: utils/adt/acl.c:1709 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "okänd privilegietyp: \"%s\"" -#: utils/adt/acl.c:3476 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 "funktionen \"%s\" finns inte" -#: utils/adt/acl.c:5023 +#: utils/adt/acl.c:5196 #, c-format msgid "must be able to SET ROLE \"%s\"" msgstr "måste kunna utföra SET ROLE \"%s\"" #: utils/adt/array_userfuncs.c:102 utils/adt/array_userfuncs.c:489 -#: utils/adt/array_userfuncs.c:878 utils/adt/json.c:694 utils/adt/json.c:831 -#: utils/adt/json.c:869 utils/adt/jsonb.c:1139 utils/adt/jsonb.c:1211 -#: utils/adt/jsonb.c:1629 utils/adt/jsonb.c:1817 utils/adt/jsonb.c:1827 +#: utils/adt/array_userfuncs.c:866 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 "kan inte bestämma indatatyp" @@ -23477,17 +24442,17 @@ msgid "input data type is not an array" msgstr "indatatyp är inte en array" #: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 -#: utils/adt/float.c:1228 utils/adt/float.c:1302 utils/adt/float.c:4117 -#: utils/adt/float.c:4155 utils/adt/int.c:778 utils/adt/int.c:800 +#: 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:1257 utils/adt/numeric.c:1901 utils/adt/numeric.c:4388 -#: utils/adt/rangetypes.c:1481 utils/adt/rangetypes.c:1494 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1132 -#: utils/adt/varlena.c:3134 +#: 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 "heltal utanför giltigt intervall" @@ -23524,267 +24489,278 @@ msgstr "Array:er med olika elementdimensioner är inte kompatibla för sammaslag msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Array:er med olika dimensioner fungerar inte vid konkatenering." -#: utils/adt/array_userfuncs.c:987 utils/adt/array_userfuncs.c:995 -#: utils/adt/arrayfuncs.c:5590 utils/adt/arrayfuncs.c:5596 +#: 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 "kan inte ackumulera arrayer med olika dimensioner" -#: utils/adt/array_userfuncs.c:1286 utils/adt/array_userfuncs.c:1440 +#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "sökning efter element i en multidimensionell array stöds inte" -#: utils/adt/array_userfuncs.c:1315 +#: utils/adt/array_userfuncs.c:1301 #, c-format msgid "initial position must not be null" msgstr "initiala positionen får ej vara null" -#: utils/adt/array_userfuncs.c:1688 +#: utils/adt/array_userfuncs.c:1674 #, c-format msgid "sample size must be between 0 and %d" msgstr "samplingsstorleken måste vara mellan 0 och %d" -#: utils/adt/arrayfuncs.c:273 utils/adt/arrayfuncs.c:287 -#: utils/adt/arrayfuncs.c:298 utils/adt/arrayfuncs.c:320 -#: utils/adt/arrayfuncs.c:337 utils/adt/arrayfuncs.c:351 -#: utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:366 -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:521 -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:547 -#: utils/adt/arrayfuncs.c:568 utils/adt/arrayfuncs.c:598 -#: utils/adt/arrayfuncs.c:605 utils/adt/arrayfuncs.c:613 -#: utils/adt/arrayfuncs.c:647 utils/adt/arrayfuncs.c:670 -#: utils/adt/arrayfuncs.c:690 utils/adt/arrayfuncs.c:807 -#: utils/adt/arrayfuncs.c:816 utils/adt/arrayfuncs.c:846 -#: utils/adt/arrayfuncs.c:861 utils/adt/arrayfuncs.c:914 +#: utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:273 +#: utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:307 +#: utils/adt/arrayfuncs.c:440 utils/adt/arrayfuncs.c:454 +#: utils/adt/arrayfuncs.c:466 utils/adt/arrayfuncs.c:636 +#: utils/adt/arrayfuncs.c:668 utils/adt/arrayfuncs.c:703 +#: utils/adt/arrayfuncs.c:718 utils/adt/arrayfuncs.c:777 +#: utils/adt/arrayfuncs.c:782 utils/adt/arrayfuncs.c:870 +#: utils/adt/arrayfuncs.c:897 utils/adt/arrayfuncs.c:904 +#: utils/adt/arrayfuncs.c:941 #, c-format msgid "malformed array literal: \"%s\"" msgstr "felaktig array-literal: \"%s\"" -#: utils/adt/arrayfuncs.c:274 -#, c-format -msgid "\"[\" must introduce explicitly-specified array dimensions." -msgstr "\"[\" måste införa explicit angivna array-dimensioner." - -#: utils/adt/arrayfuncs.c:288 +#: utils/adt/arrayfuncs.c:265 #, c-format -msgid "Missing array dimension value." -msgstr "Saknar värde i array-dimension." +msgid "Array value must start with \"{\" or dimension information." +msgstr "Array-värde måste starta med \"{\" eller dimensionsinformation" -#: utils/adt/arrayfuncs.c:299 utils/adt/arrayfuncs.c:338 +#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:467 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "Saknar \"%s\" efter array-dimensioner." -#: utils/adt/arrayfuncs.c:308 utils/adt/arrayfuncs.c:2933 -#: utils/adt/arrayfuncs.c:2965 utils/adt/arrayfuncs.c:2980 +#: utils/adt/arrayfuncs.c:285 #, c-format -msgid "upper bound cannot be less than lower bound" -msgstr "övre gränsen kan inte vara lägre än undre gränsen" +msgid "Array contents must start with \"{\"." +msgstr "Array-innehåll måste starta med \"{\"." -#: utils/adt/arrayfuncs.c:321 +#: utils/adt/arrayfuncs.c:308 utils/adt/multirangetypes.c:292 #, c-format -msgid "Array value must start with \"{\" or dimension information." -msgstr "Array-värde måste starta med \"{\" eller dimensionsinformation" +msgid "Junk after closing right brace." +msgstr "Skräp efter avslutande höger parentes." -#: utils/adt/arrayfuncs.c:352 +#: utils/adt/arrayfuncs.c:431 utils/adt/arrayfuncs.c:643 #, c-format -msgid "Array contents must start with \"{\"." -msgstr "Array-innehåll måste starta med \"{\"." +msgid "number of array dimensions exceeds the maximum allowed (%d)" +msgstr "antal array-dimensioner överskriver maximalt tillåtna (%d)" -#: utils/adt/arrayfuncs.c:360 utils/adt/arrayfuncs.c:367 +#: utils/adt/arrayfuncs.c:441 #, c-format -msgid "Specified array dimensions do not match array contents." -msgstr "Angivna array-dimensioner matchar inte array-innehållet." +msgid "\"[\" must introduce explicitly-specified array dimensions." +msgstr "\"[\" måste införa explicit angivna array-dimensioner." -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:533 -#: utils/adt/multirangetypes.c:166 utils/adt/rangetypes.c:2405 -#: utils/adt/rangetypes.c:2413 utils/adt/rowtypes.c:219 -#: utils/adt/rowtypes.c:230 +#: utils/adt/arrayfuncs.c:455 #, c-format -msgid "Unexpected end of input." -msgstr "oväntat slut på indata." +msgid "Missing array dimension value." +msgstr "Saknar värde i array-dimension." + +#: 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 "övre gränsen kan inte vara lägre än undre gränsen" + +#: utils/adt/arrayfuncs.c:487 +#, c-format +msgid "array upper bound is too large: %d" +msgstr "övre gräns för array är för stor: %d" + +#: utils/adt/arrayfuncs.c:538 +#, c-format +msgid "array bound is out of integer range" +msgstr "array-gräns är utanför giltigt interval för integer" -#: utils/adt/arrayfuncs.c:522 utils/adt/arrayfuncs.c:569 -#: utils/adt/arrayfuncs.c:599 utils/adt/arrayfuncs.c:648 +#: utils/adt/arrayfuncs.c:637 utils/adt/arrayfuncs.c:669 +#: utils/adt/arrayfuncs.c:704 utils/adt/arrayfuncs.c:898 #, c-format msgid "Unexpected \"%c\" character." msgstr "oväntat tecken \"%c\"." -#: utils/adt/arrayfuncs.c:548 utils/adt/arrayfuncs.c:671 +#: utils/adt/arrayfuncs.c:719 #, c-format msgid "Unexpected array element." msgstr "Oväntat array-element." -#: utils/adt/arrayfuncs.c:606 +#: utils/adt/arrayfuncs.c:778 #, c-format -msgid "Unmatched \"%c\" character." -msgstr "Icke matchat tecken \"%c\"." +msgid "Specified array dimensions do not match array contents." +msgstr "Angivna array-dimensioner matchar inte array-innehållet." -#: utils/adt/arrayfuncs.c:614 utils/adt/jsonfuncs.c:2553 +#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2598 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Flerdimensionella array:er måste ha underarray:er med matchande dimensioner." -#: utils/adt/arrayfuncs.c:691 utils/adt/multirangetypes.c:293 +#: utils/adt/arrayfuncs.c:871 utils/adt/arrayfuncs.c:905 #, c-format -msgid "Junk after closing right brace." -msgstr "Skräp efter avslutande höger parentes." +msgid "Incorrectly quoted array element." +msgstr "Felaktigt quote:at array-element." + +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 +#: utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 +#: utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#, c-format +msgid "Unexpected end of input." +msgstr "oväntat slut på indata." -#: utils/adt/arrayfuncs.c:1325 utils/adt/arrayfuncs.c:3479 -#: utils/adt/arrayfuncs.c:6080 +#: utils/adt/arrayfuncs.c:1301 utils/adt/arrayfuncs.c:3499 +#: utils/adt/arrayfuncs.c:6106 #, c-format msgid "invalid number of dimensions: %d" msgstr "felaktigt antal dimensioner: %d" -#: utils/adt/arrayfuncs.c:1336 +#: utils/adt/arrayfuncs.c:1312 #, c-format msgid "invalid array flags" msgstr "ogiltiga array-flaggor" -#: utils/adt/arrayfuncs.c:1358 +#: utils/adt/arrayfuncs.c:1334 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "binär data har array-elementtyp typ %u (%s) istället för förväntade %u (%s)" -#: utils/adt/arrayfuncs.c:1402 utils/adt/multirangetypes.c:451 -#: utils/adt/rangetypes.c:344 utils/cache/lsyscache.c:2916 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 #, c-format msgid "no binary input function available for type %s" msgstr "ingen binär indatafunktion finns för typen %s" -#: utils/adt/arrayfuncs.c:1542 +#: utils/adt/arrayfuncs.c:1509 #, c-format msgid "improper binary format in array element %d" msgstr "felaktigt binärt format i array-element %d" -#: utils/adt/arrayfuncs.c:1623 utils/adt/multirangetypes.c:456 -#: utils/adt/rangetypes.c:349 utils/cache/lsyscache.c:2949 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 #, c-format msgid "no binary output function available for type %s" msgstr "det saknas en binär output-funktion för typen %s" -#: utils/adt/arrayfuncs.c:2102 +#: utils/adt/arrayfuncs.c:2067 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "slice av fixlängd-array är inte implementerat" -#: utils/adt/arrayfuncs.c:2280 utils/adt/arrayfuncs.c:2302 -#: utils/adt/arrayfuncs.c:2351 utils/adt/arrayfuncs.c:2589 -#: utils/adt/arrayfuncs.c:2911 utils/adt/arrayfuncs.c:6066 -#: utils/adt/arrayfuncs.c:6092 utils/adt/arrayfuncs.c:6103 -#: utils/adt/json.c:1497 utils/adt/json.c:1569 utils/adt/jsonb.c:1416 -#: utils/adt/jsonb.c:1500 utils/adt/jsonfuncs.c:4434 utils/adt/jsonfuncs.c:4587 -#: utils/adt/jsonfuncs.c:4698 utils/adt/jsonfuncs.c:4746 +#: 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 "fel antal array-indexeringar" -#: utils/adt/arrayfuncs.c:2285 utils/adt/arrayfuncs.c:2393 -#: utils/adt/arrayfuncs.c:2656 utils/adt/arrayfuncs.c:2970 +#: 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 "array-index utanför giltigt område" -#: utils/adt/arrayfuncs.c:2290 +#: utils/adt/arrayfuncs.c:2255 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "kan inte tilldela null-värde till ett element i en array med fast längd" -#: utils/adt/arrayfuncs.c:2858 +#: utils/adt/arrayfuncs.c:2855 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "uppdatering av slice på fixlängd-array är inte implementerat" -#: utils/adt/arrayfuncs.c:2889 +#: utils/adt/arrayfuncs.c:2886 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "array-slice-index måste inkludera båda gränser" -#: utils/adt/arrayfuncs.c:2890 +#: utils/adt/arrayfuncs.c:2887 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Vid tilldelning till en slice av en tom array så måste slice-gränserna anges" -#: utils/adt/arrayfuncs.c:2901 utils/adt/arrayfuncs.c:2997 +#: utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:3017 #, c-format msgid "source array too small" msgstr "käll-array för liten" -#: utils/adt/arrayfuncs.c:3637 +#: utils/adt/arrayfuncs.c:3657 #, c-format msgid "null array element not allowed in this context" msgstr "null-element i arrayer stöds inte i detta kontext" -#: utils/adt/arrayfuncs.c:3808 utils/adt/arrayfuncs.c:3979 -#: utils/adt/arrayfuncs.c:4370 +#: 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 "kan inte jämföra arrayer med olika elementtyper" -#: utils/adt/arrayfuncs.c:4157 utils/adt/multirangetypes.c:2806 -#: utils/adt/multirangetypes.c:2878 utils/adt/rangetypes.c:1354 -#: utils/adt/rangetypes.c:1418 utils/adt/rowtypes.c:1885 +#: 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 "kunde inte hitta en hash-funktion för typ %s" -#: utils/adt/arrayfuncs.c:4285 utils/adt/rowtypes.c:2006 +#: utils/adt/arrayfuncs.c:4305 utils/adt/rowtypes.c:1996 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "kunde inte hitta en utökad hash-funktion för typ %s" -#: utils/adt/arrayfuncs.c:5480 +#: utils/adt/arrayfuncs.c:5506 #, c-format msgid "data type %s is not an array type" msgstr "datatypen %s är inte en arraytyp" -#: utils/adt/arrayfuncs.c:5535 +#: utils/adt/arrayfuncs.c:5561 #, c-format msgid "cannot accumulate null arrays" msgstr "kan inte ackumulera null-array:er" -#: utils/adt/arrayfuncs.c:5563 +#: utils/adt/arrayfuncs.c:5589 #, c-format msgid "cannot accumulate empty arrays" msgstr "kan inte ackumulera tomma array:er" -#: utils/adt/arrayfuncs.c:5964 utils/adt/arrayfuncs.c:6004 +#: utils/adt/arrayfuncs.c:5990 utils/adt/arrayfuncs.c:6030 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "dimensionsarray eller undre gränsarray kan inte vara null" -#: utils/adt/arrayfuncs.c:6067 utils/adt/arrayfuncs.c:6093 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "Dimension array must be one dimensional." msgstr "Dimensionsarray måste vara endimensionell." -#: utils/adt/arrayfuncs.c:6072 utils/adt/arrayfuncs.c:6098 +#: utils/adt/arrayfuncs.c:6098 utils/adt/arrayfuncs.c:6124 #, c-format msgid "dimension values cannot be null" msgstr "dimensionsvärden kan inte vara null" -#: utils/adt/arrayfuncs.c:6104 +#: utils/adt/arrayfuncs.c:6130 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Undre arraygräns har annan storlek än dimensionsarray." -#: utils/adt/arrayfuncs.c:6382 +#: utils/adt/arrayfuncs.c:6411 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "borttagning av element från en multidimensionell array stöds inte" -#: utils/adt/arrayfuncs.c:6659 +#: utils/adt/arrayfuncs.c:6688 #, c-format msgid "thresholds must be one-dimensional array" msgstr "gränsvärden måste vara en endimensionell array" -#: utils/adt/arrayfuncs.c:6664 +#: utils/adt/arrayfuncs.c:6693 #, c-format msgid "thresholds array must not contain NULLs" msgstr "gränsvärdesarray får inte innehålla NULLL-värden" -#: utils/adt/arrayfuncs.c:6897 +#: utils/adt/arrayfuncs.c:6926 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "antal element att trimma måste vara mellan 0 och %d" @@ -23799,22 +24775,22 @@ msgstr "array-index måste ha typen integer" msgid "array subscript in assignment must not be null" msgstr "array-index i tilldelning kan inte vara null" -#: utils/adt/arrayutils.c:161 +#: utils/adt/arrayutils.c:140 #, c-format msgid "array lower bound is too large: %d" -msgstr "lägre gräns för array är för stor: %d" +msgstr "undre gräns för array är för stor: %d" -#: utils/adt/arrayutils.c:263 +#: utils/adt/arrayutils.c:242 #, c-format msgid "typmod array must be type cstring[]" msgstr "typmod-array måste ha typ cstring[]" -#: utils/adt/arrayutils.c:268 +#: utils/adt/arrayutils.c:247 #, c-format msgid "typmod array must be one-dimensional" msgstr "typmod-array måste vara endimensionell" -#: utils/adt/arrayutils.c:273 +#: utils/adt/arrayutils.c:252 #, c-format msgid "typmod array must not contain nulls" msgstr "typmod-arrayen får inte innehålla null-värden" @@ -23825,48 +24801,52 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "kodningskonvertering från %s till ASCII stöds inte" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:4017 -#: utils/adt/float.c:206 utils/adt/float.c:293 utils/adt/float.c:307 -#: utils/adt/float.c:412 utils/adt/float.c:495 utils/adt/float.c:509 +#: 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:183 utils/adt/mac.c:94 utils/adt/mac8.c:225 -#: utils/adt/network.c:99 utils/adt/numeric.c:795 utils/adt/numeric.c:7136 -#: utils/adt/numeric.c:7339 utils/adt/numeric.c:8286 utils/adt/numutils.c:357 -#: utils/adt/numutils.c:619 utils/adt/numutils.c:881 utils/adt/numutils.c:920 -#: utils/adt/numutils.c:942 utils/adt/numutils.c:1006 utils/adt/numutils.c:1028 -#: utils/adt/pg_lsn.c:74 utils/adt/tid.c:72 utils/adt/tid.c:80 -#: utils/adt/tid.c:94 utils/adt/tid.c:103 utils/adt/timestamp.c:494 -#: utils/adt/uuid.c:135 utils/adt/xid8funcs.c:354 +#: 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 "ogiltig indatasyntax för type %s: \"%s\"" -#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int.c:180 utils/adt/numutils.c:351 -#: utils/adt/numutils.c:613 utils/adt/numutils.c:875 utils/adt/numutils.c:926 -#: utils/adt/numutils.c:965 utils/adt/numutils.c:1012 +#: 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 "värdet \"%s\" är utanför giltigt intervall för typen %s" +msgid "money out of range" +msgstr "money utanför giltigt intervall" -#: 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:105 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:515 utils/adt/int8.c:573 -#: utils/adt/int8.c:943 utils/adt/int8.c:1023 utils/adt/int8.c:1085 -#: utils/adt/int8.c:1165 utils/adt/numeric.c:3175 utils/adt/numeric.c:3198 -#: utils/adt/numeric.c:3283 utils/adt/numeric.c:3301 utils/adt/numeric.c:3397 -#: utils/adt/numeric.c:8835 utils/adt/numeric.c:9148 utils/adt/numeric.c:9496 -#: utils/adt/numeric.c:9612 utils/adt/numeric.c:11122 -#: utils/adt/timestamp.c:3406 +#: 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 "division med noll" +#: 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 "värdet \"%s\" är utanför giltigt intervall för typen %s" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" @@ -23877,159 +24857,186 @@ msgstr "\"char\" utanför sitt intervall" msgid "could not compute %s hash: %s" msgstr "kunde inte beräkna %s-hash: %s" -#: utils/adt/date.c:63 utils/adt/timestamp.c:100 utils/adt/varbit.c:105 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "ogiltig typmodifierare" -#: utils/adt/date.c:75 +#: utils/adt/date.c:76 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s-precisionen får inte vara negativ" -#: utils/adt/date.c:81 +#: utils/adt/date.c:82 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s-precisionen reducerad till maximalt tillåtna, %d" -#: utils/adt/date.c:166 utils/adt/date.c:174 utils/adt/formatting.c:4241 -#: utils/adt/formatting.c:4250 utils/adt/formatting.c:4363 -#: utils/adt/formatting.c:4373 +#: 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 #, c-format msgid "date out of range: \"%s\"" msgstr "datum utanför giltigt intervall \"%s\"" -#: utils/adt/date.c:221 utils/adt/date.c:519 utils/adt/date.c:543 -#: utils/adt/rangetypes.c:1577 utils/adt/rangetypes.c:1592 utils/adt/xml.c:2460 +#: 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 "datum utanför giltigt intervall" -#: utils/adt/date.c:267 utils/adt/timestamp.c:582 +#: utils/adt/date.c:268 utils/adt/timestamp.c:598 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "datumfältvärde utanför giltigt område: %d-%02d-%02d" -#: utils/adt/date.c:274 utils/adt/date.c:283 utils/adt/timestamp.c:588 +#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "datum utanför giltigt område: %d-%02d-%02d" -#: utils/adt/date.c:494 +#: utils/adt/date.c:495 #, c-format msgid "cannot subtract infinite dates" msgstr "kan inte subtrahera oändliga datum" -#: utils/adt/date.c:592 utils/adt/date.c:655 utils/adt/date.c:691 -#: utils/adt/date.c:2885 utils/adt/date.c:2895 +#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 +#: utils/adt/date.c:2906 utils/adt/date.c:2916 #, c-format msgid "date out of range for timestamp" msgstr "datum utanför filtigt område för timestamp" -#: utils/adt/date.c:1121 utils/adt/date.c:1204 utils/adt/date.c:1220 -#: utils/adt/date.c:2206 utils/adt/date.c:2990 utils/adt/timestamp.c:4097 -#: utils/adt/timestamp.c:4290 utils/adt/timestamp.c:4432 -#: utils/adt/timestamp.c:4685 utils/adt/timestamp.c:4886 -#: utils/adt/timestamp.c:4933 utils/adt/timestamp.c:5157 -#: utils/adt/timestamp.c:5204 utils/adt/timestamp.c:5334 +#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 +#: utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 +#: utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 +#: utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 +#: utils/adt/timestamp.c:6070 #, c-format msgid "unit \"%s\" not supported for type %s" msgstr "enheten \"%s\" stöds inte för typen %s" -#: utils/adt/date.c:1229 utils/adt/date.c:2222 utils/adt/date.c:3010 -#: utils/adt/timestamp.c:4111 utils/adt/timestamp.c:4307 -#: utils/adt/timestamp.c:4446 utils/adt/timestamp.c:4645 -#: utils/adt/timestamp.c:4942 utils/adt/timestamp.c:5213 -#: utils/adt/timestamp.c:5395 +#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 +#: utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 +#: utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 +#: utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 +#: utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 #, c-format msgid "unit \"%s\" not recognized for type %s" msgstr "enheten \"%s\" känns inte igen för typen %s" -#: utils/adt/date.c:1313 utils/adt/date.c:1359 utils/adt/date.c:1918 -#: utils/adt/date.c:1949 utils/adt/date.c:1978 utils/adt/date.c:2848 -#: utils/adt/date.c:3080 utils/adt/datetime.c:424 utils/adt/datetime.c:1809 -#: utils/adt/formatting.c:4081 utils/adt/formatting.c:4117 -#: utils/adt/formatting.c:4210 utils/adt/formatting.c:4339 utils/adt/json.c:467 -#: utils/adt/json.c:506 utils/adt/timestamp.c:232 utils/adt/timestamp.c:264 -#: utils/adt/timestamp.c:700 utils/adt/timestamp.c:709 -#: utils/adt/timestamp.c:787 utils/adt/timestamp.c:820 -#: utils/adt/timestamp.c:2933 utils/adt/timestamp.c:2954 -#: utils/adt/timestamp.c:2967 utils/adt/timestamp.c:2976 -#: utils/adt/timestamp.c:2984 utils/adt/timestamp.c:3045 -#: utils/adt/timestamp.c:3068 utils/adt/timestamp.c:3081 -#: utils/adt/timestamp.c:3092 utils/adt/timestamp.c:3100 -#: utils/adt/timestamp.c:3801 utils/adt/timestamp.c:3925 -#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4105 -#: utils/adt/timestamp.c:4198 utils/adt/timestamp.c:4301 -#: utils/adt/timestamp.c:4750 utils/adt/timestamp.c:5024 -#: utils/adt/timestamp.c:5463 utils/adt/timestamp.c:5473 -#: utils/adt/timestamp.c:5478 utils/adt/timestamp.c:5484 -#: utils/adt/timestamp.c:5517 utils/adt/timestamp.c:5604 -#: utils/adt/timestamp.c:5645 utils/adt/timestamp.c:5649 -#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 -#: utils/adt/timestamp.c:5713 utils/adt/timestamp.c:5747 utils/adt/xml.c:2482 -#: utils/adt/xml.c:2489 utils/adt/xml.c:2509 utils/adt/xml.c:2516 +#: 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:2574 +#: utils/adt/xml.c:2581 utils/adt/xml.c:2601 utils/adt/xml.c:2608 #, c-format msgid "timestamp out of range" msgstr "timestamp utanför giltigt intervall" -#: utils/adt/date.c:1535 utils/adt/date.c:2343 utils/adt/formatting.c:4431 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 #, c-format msgid "time out of range" msgstr "time utanför giltigt intervall" -#: utils/adt/date.c:1587 utils/adt/timestamp.c:597 +#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "time-värde utanför giltigt område: %d:%02d:%02g" -#: utils/adt/date.c:2107 utils/adt/date.c:2647 utils/adt/float.c:1042 -#: utils/adt/float.c:1118 utils/adt/int.c:635 utils/adt/int.c:682 -#: utils/adt/int.c:717 utils/adt/int8.c:414 utils/adt/numeric.c:2579 -#: utils/adt/timestamp.c:3455 utils/adt/timestamp.c:3482 -#: utils/adt/timestamp.c:3513 +#: utils/adt/date.c:2020 +#, c-format +msgid "cannot convert infinite interval to time" +msgstr "kan inte konvertera oändligt intervall till time" + +#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#, c-format +msgid "cannot add infinite interval to time" +msgstr "kan inte addera oändligt intervall till time" + +#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#, c-format +msgid "cannot subtract infinite interval from time" +msgstr "kan inte subtrahera oändligt intervall från time" + +#: 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 "ogiltig föregående eller efterföljande storlek i fönsterfunktion" -#: utils/adt/date.c:2351 +#: utils/adt/date.c:2360 #, c-format msgid "time zone displacement out of range" msgstr "tidszonförskjutning utanför giltigt intervall" -#: utils/adt/date.c:3110 utils/adt/timestamp.c:5506 utils/adt/timestamp.c:5736 +#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#, c-format +msgid "interval time zone \"%s\" must be finite" +msgstr "intervalltidszonen \"%s\" måste vara ändlig" + +#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "intervalltidszonen \"%s\" kan inte inkludera månader eller år" -#: utils/adt/datetime.c:3223 utils/adt/datetime.c:4002 -#: utils/adt/datetime.c:4008 utils/adt/timestamp.c:512 +#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 +#: utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 #, c-format msgid "time zone \"%s\" not recognized" msgstr "tidszon \"%s\" känns inte igen" -#: utils/adt/datetime.c:3976 utils/adt/datetime.c:3983 +#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "datum/tid-värde utanför giltigt område: \"%s\"" -#: utils/adt/datetime.c:3985 +#: utils/adt/datetime.c:4110 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Du kanske behöver en annan inställning av variabeln \"datestyle\"." -#: utils/adt/datetime.c:3990 +#: utils/adt/datetime.c:4115 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "intervall-värde utanför giltigt område: \"%s\"" -#: utils/adt/datetime.c:3996 +#: utils/adt/datetime.c:4121 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "tidszonförskjutning itanför sitt intervall: \"%s\"" -#: utils/adt/datetime.c:4010 +#: utils/adt/datetime.c:4135 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Detta tidszonsnamn finns i konfigurationsfilen för tidszonsförkortning \"%s\"." @@ -24039,22 +25046,22 @@ msgstr "Detta tidszonsnamn finns i konfigurationsfilen för tidszonsförkortning msgid "invalid Datum pointer" msgstr "ogiltigt Datum-pekare" -#: utils/adt/dbsize.c:761 utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:764 utils/adt/dbsize.c:840 #, c-format msgid "invalid size: \"%s\"" msgstr "ogiltig storlek: \"%s\"" -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:841 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Ogiltig storleksenhet: \"%s\"." -#: utils/adt/dbsize.c:839 +#: utils/adt/dbsize.c:842 #, c-format msgid "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." msgstr "Giltiga enheter är \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\" och \"PB\"." -#: utils/adt/domains.c:92 +#: utils/adt/domains.c:95 #, c-format msgid "type %s is not a domain" msgstr "typen %s är inte en domän" @@ -24136,353 +25143,348 @@ msgstr "kunde inte bestämma den verkliga enum-typen" msgid "enum %s contains no values" msgstr "enum %s innehåller inga värden" -#: utils/adt/float.c:89 +#: utils/adt/float.c:83 #, c-format msgid "value out of range: overflow" msgstr "värde utanför giltigt intervall: overflow" -#: utils/adt/float.c:97 +#: utils/adt/float.c:91 #, c-format msgid "value out of range: underflow" msgstr "värde utanför giltigt intervall: underflow" -#: utils/adt/float.c:286 +#: utils/adt/float.c:280 #, c-format msgid "\"%s\" is out of range for type real" msgstr "\"%s\" är utanför giltigt intervall för typen real" -#: utils/adt/float.c:488 +#: utils/adt/float.c:482 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\" är utanför giltigt intervall för typen double precision" -#: utils/adt/float.c:1253 utils/adt/float.c:1327 utils/adt/int.c:355 +#: 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:1278 utils/adt/numeric.c:4500 utils/adt/numeric.c:4505 +#: utils/adt/int8.c:1277 utils/adt/numeric.c:4593 utils/adt/numeric.c:4598 #, c-format msgid "smallint out of range" msgstr "smallint utanför sitt intervall" -#: utils/adt/float.c:1453 utils/adt/numeric.c:3693 utils/adt/numeric.c:10027 +#: 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 "kan inte ta kvadratroten av ett negativt tal" -#: utils/adt/float.c:1521 utils/adt/numeric.c:3981 utils/adt/numeric.c:4093 +#: 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 "noll upphöjt med ett negativt tal är odefinierat" -#: utils/adt/float.c:1525 utils/adt/numeric.c:3985 utils/adt/numeric.c:10918 +#: 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 "ett negativt tal upphöjt i en icke-negativ potens ger ett komplext resultat" -#: utils/adt/float.c:1701 utils/adt/float.c:1734 utils/adt/numeric.c:3893 -#: utils/adt/numeric.c:10698 +#: 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 "kan inte ta logartimen av noll" -#: utils/adt/float.c:1705 utils/adt/float.c:1738 utils/adt/numeric.c:3831 -#: utils/adt/numeric.c:3888 utils/adt/numeric.c:10702 +#: 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 "kan inte ta logaritmen av ett negativt tal" -#: utils/adt/float.c:1771 utils/adt/float.c:1802 utils/adt/float.c:1897 -#: utils/adt/float.c:1924 utils/adt/float.c:1952 utils/adt/float.c:1979 -#: utils/adt/float.c:2126 utils/adt/float.c:2163 utils/adt/float.c:2333 -#: utils/adt/float.c:2389 utils/adt/float.c:2454 utils/adt/float.c:2511 -#: utils/adt/float.c:2702 utils/adt/float.c:2726 +#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 +#: utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 +#: utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 +#: utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 +#: utils/adt/float.c:2696 utils/adt/float.c:2720 #, c-format msgid "input is out of range" msgstr "indata är utanför giltigt intervall" -#: utils/adt/float.c:2867 -#, c-format -msgid "setseed parameter %g is out of allowed range [-1,1]" -msgstr "setseed-parameter %g är utanför giltigt intervall [-1,1]" - -#: utils/adt/float.c:4095 utils/adt/numeric.c:1841 +#: utils/adt/float.c:4000 utils/adt/numeric.c:1857 #, c-format msgid "count must be greater than zero" msgstr "antal måste vara större än noll" -#: utils/adt/float.c:4100 utils/adt/numeric.c:1852 +#: utils/adt/float.c:4005 utils/adt/numeric.c:1868 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" -msgstr "operand, lägre gräns och övre gräns kan inte vara NaN" +msgstr "operand, undre gräns och övre gräns kan inte vara NaN" -#: utils/adt/float.c:4106 utils/adt/numeric.c:1857 +#: utils/adt/float.c:4011 utils/adt/numeric.c:1873 #, c-format msgid "lower and upper bounds must be finite" -msgstr "lägre och övre gräns måste vara ändliga" +msgstr "undre och övre gräns måste vara ändliga" -#: utils/adt/float.c:4172 utils/adt/numeric.c:1871 +#: utils/adt/float.c:4077 utils/adt/numeric.c:1887 #, c-format msgid "lower bound cannot equal upper bound" -msgstr "lägre gräns kan inte vara samma som övre gräns" +msgstr "undre gräns kan inte vara samma som övre gräns" -#: utils/adt/formatting.c:519 +#: utils/adt/formatting.c:530 #, c-format msgid "invalid format specification for an interval value" msgstr "ogiltig formatspecifikation för ett intervallvärdei" -#: utils/adt/formatting.c:520 +#: utils/adt/formatting.c:531 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "Intervaller är inte kopplade till specifika kalenderdatum." -#: utils/adt/formatting.c:1150 +#: utils/adt/formatting.c:1161 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" måste vara det sista mönstret som används" -#: utils/adt/formatting.c:1158 +#: utils/adt/formatting.c:1169 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" måste vara före \"PR\"" -#: utils/adt/formatting.c:1174 +#: utils/adt/formatting.c:1185 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" måste vara före \"PR\"" -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1212 #, c-format msgid "multiple decimal points" msgstr "multipla decimalpunkter" -#: utils/adt/formatting.c:1205 utils/adt/formatting.c:1288 +#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "kan inte använda \"V\" ach decimalpunkt tillsammans" -#: utils/adt/formatting.c:1217 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" twice" msgstr "kan inte använda \"S\" två gånger" -#: utils/adt/formatting.c:1221 +#: utils/adt/formatting.c:1232 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "kan inte använda \"S\" och \"PL\"/\"MI\"/\"SG\"/\"PR\" tillsammans" -#: utils/adt/formatting.c:1241 +#: utils/adt/formatting.c:1252 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "kan inte använda \"S\" och \"MI\" tillsammans." -#: utils/adt/formatting.c:1251 +#: utils/adt/formatting.c:1262 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "kan inte använda \"S\" och \"PL\" tillsammans." -#: utils/adt/formatting.c:1261 +#: utils/adt/formatting.c:1272 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "kan inte använda \"S\" och \"SG\" tillsammans." -#: utils/adt/formatting.c:1270 +#: utils/adt/formatting.c:1281 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "kan inte använda \"PR\" och \"S\"/\"PL\"/\"MI\"/\"SG\" tillsammans." -#: utils/adt/formatting.c:1296 +#: utils/adt/formatting.c:1307 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "kan inte använda \"EEEE\" två gånger" -#: utils/adt/formatting.c:1302 +#: utils/adt/formatting.c:1313 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" är inkompatibel med andra format" -#: utils/adt/formatting.c:1303 +#: utils/adt/formatting.c:1314 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "\"EEEE\" får bara användas tillsammans med siffror- och decimalpunkts-mönster." -#: utils/adt/formatting.c:1387 +#: utils/adt/formatting.c:1398 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "ogiltigt formatseparator för datetime: \"%s\"" -#: utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1525 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" är inte ett nummer" -#: utils/adt/formatting.c:1592 +#: utils/adt/formatting.c:1603 #, c-format msgid "case conversion failed: %s" msgstr "case-konvertering misslyckades: %s" -#: utils/adt/formatting.c:1646 utils/adt/formatting.c:1768 -#: utils/adt/formatting.c:1891 +#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 +#: utils/adt/formatting.c:1989 #, c-format msgid "could not determine which collation to use for %s function" msgstr "kunde inte bestämma jämförelse (collation) för funktionen %s" -#: utils/adt/formatting.c:2274 +#: utils/adt/formatting.c:2410 #, c-format msgid "invalid combination of date conventions" msgstr "ogiltig kombination av datumkonventioner" -#: utils/adt/formatting.c:2275 +#: utils/adt/formatting.c:2411 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "Blanda inte datumkonventionerna Gregoriansk och ISO-veckor i formatteringsmall." -#: utils/adt/formatting.c:2297 +#: utils/adt/formatting.c:2433 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "värden för \"%s\" i formatsträng står i konflikt med varandra" -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2435 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Detta värde motsäger en tidigare inställning för samma fälttyp." -#: utils/adt/formatting.c:2366 +#: utils/adt/formatting.c:2502 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "källsträngen är för kort för formatfält \"%s\"" -#: utils/adt/formatting.c:2368 +#: utils/adt/formatting.c:2504 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Fältet kräver %d tecken men bara %d återstår." -#: utils/adt/formatting.c:2370 utils/adt/formatting.c:2384 +#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Om din källsträng inte är av fast längd så testa med modifieraren \"FM\"." -#: utils/adt/formatting.c:2380 utils/adt/formatting.c:2393 -#: utils/adt/formatting.c:2614 +#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 +#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "ogiltigt värde \"%s\" för \"%s\"" -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2518 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Fältet kräver %d tecken men bara %d kunde parsas." -#: utils/adt/formatting.c:2395 +#: utils/adt/formatting.c:2531 #, c-format msgid "Value must be an integer." msgstr "Värdet måste vara ett heltal." -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2536 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "värdet för \"%s\" i källsträng är utanför giltigt intervall" -#: utils/adt/formatting.c:2402 +#: utils/adt/formatting.c:2538 #, c-format msgid "Value must be in the range %d to %d." msgstr "Värdet måste vara i intervallet %d till %d." -#: utils/adt/formatting.c:2616 +#: utils/adt/formatting.c:2752 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "Det givna värdet matchar inget av de tillåtna värdena för detta fält." -#: utils/adt/formatting.c:2832 utils/adt/formatting.c:2852 -#: utils/adt/formatting.c:2872 utils/adt/formatting.c:2892 -#: utils/adt/formatting.c:2911 utils/adt/formatting.c:2930 -#: utils/adt/formatting.c:2954 utils/adt/formatting.c:2972 -#: utils/adt/formatting.c:2990 utils/adt/formatting.c:3008 -#: utils/adt/formatting.c:3025 utils/adt/formatting.c:3042 +#: 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 #, c-format msgid "localized string format value too long" msgstr "lokaliserat strängformatvärde är för långt" -#: utils/adt/formatting.c:3322 +#: utils/adt/formatting.c:3458 #, c-format msgid "unmatched format separator \"%c\"" msgstr "ej matchande formatteringsseparator \"%c\"" -#: utils/adt/formatting.c:3383 +#: utils/adt/formatting.c:3519 #, c-format msgid "unmatched format character \"%s\"" msgstr "ej matchande formatteringstecken \"%s\"" -#: utils/adt/formatting.c:3491 +#: utils/adt/formatting.c:3652 #, c-format -msgid "formatting field \"%s\" is only supported in to_char" -msgstr "formateringsfält \"%s\" stöds bara i to_char" +msgid "Time zone abbreviation is not recognized." +msgstr "Känner inte igen förkortning för tidszon." -#: utils/adt/formatting.c:3665 +#: utils/adt/formatting.c:3853 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ogiltig indatasträng för \"Y,YYY\"" -#: utils/adt/formatting.c:3754 +#: utils/adt/formatting.c:3942 #, c-format msgid "input string is too short for datetime format" msgstr "indatasträngen är för kort för datetime-formatet" -#: utils/adt/formatting.c:3762 +#: utils/adt/formatting.c:3950 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "efterföljande tecken finns kvar i indatasträngen efter datetime-formattering" -#: utils/adt/formatting.c:4319 +#: utils/adt/formatting.c:4494 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "saknar tidszon i indatasträngen för typen timestamptz" -#: utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4500 #, c-format msgid "timestamptz out of range" msgstr "timestamptz utanför giltigt intervall" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4528 #, c-format msgid "datetime format is zoned but not timed" msgstr "datetime-format har zon men inte tid" -#: utils/adt/formatting.c:4411 +#: utils/adt/formatting.c:4577 #, c-format msgid "missing time zone in input string for type timetz" msgstr "saknar tidszon i indatasträng för typ timetz" -#: utils/adt/formatting.c:4417 +#: utils/adt/formatting.c:4583 #, c-format msgid "timetz out of range" msgstr "timetz utanför giltigt intervall" -#: utils/adt/formatting.c:4443 +#: utils/adt/formatting.c:4609 #, c-format msgid "datetime format is not dated and not timed" msgstr "datetime-format har inte datum och inte tid" -#: utils/adt/formatting.c:4575 +#: utils/adt/formatting.c:4786 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "timmen \"%d\" är ogiltigt för en 12-timmars-klocka" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4788 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Använd en 24-timmars-klocka eller ange en timme mellan 1 och 12." -#: utils/adt/formatting.c:4689 +#: utils/adt/formatting.c:4900 #, c-format msgid "cannot calculate day of year without year information" msgstr "kan inte beräkna dag på året utan årsinformation" -#: utils/adt/formatting.c:5621 +#: utils/adt/formatting.c:5852 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" stöds inte för indata" -#: utils/adt/formatting.c:5633 +#: utils/adt/formatting.c:5864 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" stöds inte för indata" @@ -24514,12 +25516,7 @@ msgstr "kunde inte söka (seek) i fil \"%s\": %m" msgid "file length too large" msgstr "fillängd är för stor" -#: utils/adt/genfile.c:248 -#, c-format -msgid "must be superuser to read files with adminpack 1.0" -msgstr "måste vara superuser för att läsa filer med adminpack 1.0" - -#: utils/adt/genfile.c:702 +#: utils/adt/genfile.c:656 #, c-format msgid "tablespace with OID %u does not exist" msgstr "tabellutrymme med OID %u finns inte" @@ -24575,555 +25572,640 @@ msgstr "måste efterfråga minst 2 punkter" msgid "invalid int2vector data" msgstr "ogiltig int2vector-data" -#: utils/adt/int.c:1529 utils/adt/int8.c:1404 utils/adt/numeric.c:1749 -#: utils/adt/timestamp.c:5797 utils/adt/timestamp.c:5879 +#: 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 "stegstorleken kan inte vara noll" -#: utils/adt/int8.c:449 utils/adt/int8.c:472 utils/adt/int8.c:486 -#: utils/adt/int8.c:500 utils/adt/int8.c:531 utils/adt/int8.c:555 -#: utils/adt/int8.c:637 utils/adt/int8.c:705 utils/adt/int8.c:711 -#: utils/adt/int8.c:737 utils/adt/int8.c:751 utils/adt/int8.c:775 -#: utils/adt/int8.c:788 utils/adt/int8.c:900 utils/adt/int8.c:914 -#: utils/adt/int8.c:928 utils/adt/int8.c:959 utils/adt/int8.c:981 -#: utils/adt/int8.c:995 utils/adt/int8.c:1009 utils/adt/int8.c:1042 -#: utils/adt/int8.c:1056 utils/adt/int8.c:1070 utils/adt/int8.c:1101 -#: utils/adt/int8.c:1123 utils/adt/int8.c:1137 utils/adt/int8.c:1151 -#: utils/adt/int8.c:1313 utils/adt/int8.c:1348 utils/adt/numeric.c:4459 -#: utils/adt/rangetypes.c:1528 utils/adt/rangetypes.c:1541 +#: 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: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 utanför sitt intervall" -#: utils/adt/int8.c:1361 +#: utils/adt/int8.c:1360 #, c-format msgid "OID out of range" msgstr "OID utanför sitt intervall" -#: utils/adt/json.c:320 utils/adt/jsonb.c:781 +#: utils/adt/json.c:202 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "nyckelvärde måste vara skalär, inte array, composite eller json" -#: utils/adt/json.c:1113 utils/adt/json.c:1123 utils/fmgr/funcapi.c:2082 +#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 #, c-format msgid "could not determine data type for argument %d" msgstr "kunde inte lista ut datatypen för argument %d" -#: utils/adt/json.c:1146 utils/adt/json.c:1337 utils/adt/json.c:1513 -#: utils/adt/json.c:1591 utils/adt/jsonb.c:1432 utils/adt/jsonb.c:1522 +#: 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 "null-värde tillåts inte som objektnyckel" -#: utils/adt/json.c:1189 utils/adt/json.c:1352 +#: utils/adt/json.c:1117 utils/adt/json.c:1288 #, c-format msgid "duplicate JSON object key value: %s" msgstr "duplicerat nyckelvärde i JSON objekt: %s" -#: utils/adt/json.c:1297 utils/adt/jsonb.c:1233 +#: utils/adt/json.c:1226 utils/adt/jsonb.c:1134 #, c-format msgid "argument list must have even number of elements" msgstr "argumentlistan måste ha ett jämt antal element" #. translator: %s is a SQL function name -#: utils/adt/json.c:1299 utils/adt/jsonb.c:1235 +#: 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 "Argumenten till %s måste bestå av varannan nyckel och varannat värde." -#: utils/adt/json.c:1491 utils/adt/jsonb.c:1410 +#: utils/adt/json.c:1427 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "array:en måste ha två kolumner" -#: utils/adt/json.c:1580 utils/adt/jsonb.c:1511 +#: utils/adt/json.c:1516 utils/adt/jsonb.c:1412 #, c-format msgid "mismatched array dimensions" msgstr "array-dimensionerna stämmer inte" -#: utils/adt/json.c:1764 utils/adt/jsonb_util.c:1958 +#: utils/adt/json.c:1702 utils/adt/jsonb_util.c:1956 #, c-format msgid "duplicate JSON object key value" msgstr "duplicerat nyckelvärde i JSON objekt" -#: utils/adt/jsonb.c:294 +#: utils/adt/jsonb.c:282 #, c-format msgid "string too long to represent as jsonb string" msgstr "strängen är för lång för att representeras som en jsonb-sträng" -#: utils/adt/jsonb.c:295 +#: utils/adt/jsonb.c:283 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "På grund av en implementationsbegränsning så kan jsonb-strängar inte överstiga %d byte." -#: utils/adt/jsonb.c:1252 +#: utils/adt/jsonb.c:1153 #, c-format msgid "argument %d: key must not be null" msgstr "argument %d: nyckeln får inte vara null" -#: utils/adt/jsonb.c:1843 +#: utils/adt/jsonb.c:1744 #, c-format msgid "field name must not be null" msgstr "fältnamnet får inte vara null" -#: utils/adt/jsonb.c:1905 +#: utils/adt/jsonb.c:1806 #, c-format msgid "object keys must be strings" msgstr "objektnycklar måste vara strängar" -#: utils/adt/jsonb.c:2116 +#: utils/adt/jsonb.c:2017 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "kan inte typomvandla jsonb-null till type %s" -#: utils/adt/jsonb.c:2117 +#: utils/adt/jsonb.c:2018 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "kan inte typomvandla jsonb-sträng till typ %s" -#: utils/adt/jsonb.c:2118 +#: utils/adt/jsonb.c:2019 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "kan inte typomvandla jsonb-numeric till typ %s" -#: utils/adt/jsonb.c:2119 +#: utils/adt/jsonb.c:2020 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "kan inte typomvandla jsonb-boolean till typ %s" -#: utils/adt/jsonb.c:2120 +#: utils/adt/jsonb.c:2021 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "kan inte typomvandla jsonb-array till typ %s" -#: utils/adt/jsonb.c:2121 +#: utils/adt/jsonb.c:2022 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "kan inte typomvandla jsonb-objekt till typ %s" -#: utils/adt/jsonb.c:2122 +#: utils/adt/jsonb.c:2023 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "kan inte typomvandla jsonb-array eller objekt till typ %s" -#: utils/adt/jsonb_util.c:758 +#: utils/adt/jsonb_util.c:756 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "antalet jsonb-objektpar överskrider det maximalt tillåtna (%zu)" -#: utils/adt/jsonb_util.c:799 +#: utils/adt/jsonb_util.c:797 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "antalet jsonb-array-element överskrider det maximalt tillåtna (%zu)" -#: utils/adt/jsonb_util.c:1673 utils/adt/jsonb_util.c:1693 +#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" msgstr "total storleken på element i jsonb-array överskrider maximala %d byte" -#: utils/adt/jsonb_util.c:1754 utils/adt/jsonb_util.c:1789 -#: utils/adt/jsonb_util.c:1809 +#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 +#: utils/adt/jsonb_util.c:1807 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" msgstr "total storleken på element i jsonb-objekt överskrider maximala %d byte" -#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:151 +#: utils/adt/jsonbsubs.c:67 utils/adt/jsonbsubs.c:148 #, c-format msgid "jsonb subscript does not support slices" msgstr "array-index-syntax för jsonb stöder inte slices" -#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:117 +#: utils/adt/jsonbsubs.c:100 utils/adt/jsonbsubs.c:114 #, c-format msgid "subscript type %s is not supported" msgstr "array-index-typ %s stöds inte" -#: utils/adt/jsonbsubs.c:104 +#: utils/adt/jsonbsubs.c:101 #, c-format msgid "jsonb subscript must be coercible to only one type, integer or text." msgstr "array-index för jsonb måste vara konverterbar till en av typerna integer eller text." -#: utils/adt/jsonbsubs.c:118 +#: utils/adt/jsonbsubs.c:115 #, c-format msgid "jsonb subscript must be coercible to either integer or text." msgstr "array-index för jsonb måste vara konverterbar till antingen integer eller text." -#: utils/adt/jsonbsubs.c:139 +#: utils/adt/jsonbsubs.c:136 #, c-format msgid "jsonb subscript must have text type" msgstr "array-index för jsonb måste ha typen text" -#: utils/adt/jsonbsubs.c:207 +#: utils/adt/jsonbsubs.c:204 #, c-format msgid "jsonb subscript in assignment must not be null" msgstr "array-index för jsonb i tilldelning kan inte vara null" -#: utils/adt/jsonfuncs.c:572 utils/adt/jsonfuncs.c:821 -#: utils/adt/jsonfuncs.c:2429 utils/adt/jsonfuncs.c:2881 -#: utils/adt/jsonfuncs.c:3676 utils/adt/jsonfuncs.c:4018 +#: 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 "kan inte anropa %s på en skalär" -#: utils/adt/jsonfuncs.c:577 utils/adt/jsonfuncs.c:806 -#: utils/adt/jsonfuncs.c:2883 utils/adt/jsonfuncs.c:3663 +#: 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 "kan inte anropa %s på en array" -#: utils/adt/jsonfuncs.c:713 +#: utils/adt/jsonfuncs.c:724 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "JSON-data, rad %d: %s%s%s" -#: utils/adt/jsonfuncs.c:1875 utils/adt/jsonfuncs.c:1912 +#: utils/adt/jsonfuncs.c:1883 utils/adt/jsonfuncs.c:1920 #, c-format msgid "cannot get array length of a scalar" msgstr "kan inte hämta array-längd på skalär" -#: utils/adt/jsonfuncs.c:1879 utils/adt/jsonfuncs.c:1898 +#: utils/adt/jsonfuncs.c:1887 utils/adt/jsonfuncs.c:1906 #, c-format msgid "cannot get array length of a non-array" msgstr "kan inte hämta array-längd på icke-array" -#: utils/adt/jsonfuncs.c:1978 +#: utils/adt/jsonfuncs.c:1986 #, c-format msgid "cannot call %s on a non-object" msgstr "kan inte anropa %s på ett icke-objekt" -#: utils/adt/jsonfuncs.c:2166 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct an array as an object" msgstr "kan inte dekonstruera en array som ett objekt" -#: utils/adt/jsonfuncs.c:2180 +#: utils/adt/jsonfuncs.c:2188 #, c-format msgid "cannot deconstruct a scalar" msgstr "kan inte dekonstruera en skalär" -#: utils/adt/jsonfuncs.c:2225 +#: utils/adt/jsonfuncs.c:2233 #, c-format msgid "cannot extract elements from a scalar" msgstr "kan inte extrahera element från en skalär" -#: utils/adt/jsonfuncs.c:2229 +#: utils/adt/jsonfuncs.c:2237 #, c-format msgid "cannot extract elements from an object" msgstr "kan inte extrahera element från ett objekt" -#: utils/adt/jsonfuncs.c:2414 utils/adt/jsonfuncs.c:3896 +#: utils/adt/jsonfuncs.c:2424 utils/adt/jsonfuncs.c:4173 #, c-format msgid "cannot call %s on a non-array" msgstr "kan inte anropa %s på icke-array" -#: utils/adt/jsonfuncs.c:2488 utils/adt/jsonfuncs.c:2493 -#: utils/adt/jsonfuncs.c:2510 utils/adt/jsonfuncs.c:2516 +#: 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 "förväntade JSON-array" -#: utils/adt/jsonfuncs.c:2489 +#: utils/adt/jsonfuncs.c:2516 #, c-format msgid "See the value of key \"%s\"." msgstr "Se värdetypen för nyckel \"%s\"" -#: utils/adt/jsonfuncs.c:2511 +#: utils/adt/jsonfuncs.c:2539 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Se array-element %s för nyckel \"%s\"." -#: utils/adt/jsonfuncs.c:2517 +#: utils/adt/jsonfuncs.c:2545 #, c-format msgid "See the array element %s." msgstr "Se array-element %s." -#: utils/adt/jsonfuncs.c:2552 +#: utils/adt/jsonfuncs.c:2597 #, c-format msgid "malformed JSON array" msgstr "felaktig JSON-array" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3389 +#: utils/adt/jsonfuncs.c:3647 #, c-format msgid "first argument of %s must be a row type" msgstr "första argumentet till %s måste vara en radtyp" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3413 +#: utils/adt/jsonfuncs.c:3671 #, c-format msgid "could not determine row type for result of %s" msgstr "kunde inte lista ut radtyp för resultat av %s" -#: utils/adt/jsonfuncs.c:3415 +#: 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 "Ange en icke-null record som argument eller anropa funktionen i FROM-klausulen med en kolumndefinitionslista." -#: utils/adt/jsonfuncs.c:3785 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 "materialiserat läge krävs, men stöds inte i detta kontext" -#: utils/adt/jsonfuncs.c:3913 utils/adt/jsonfuncs.c:3997 +#: utils/adt/jsonfuncs.c:4190 utils/adt/jsonfuncs.c:4274 #, c-format msgid "argument of %s must be an array of objects" msgstr "argumentet till %s måste vara en array med objekt" -#: utils/adt/jsonfuncs.c:3946 +#: utils/adt/jsonfuncs.c:4223 #, c-format msgid "cannot call %s on an object" msgstr "kan inte anropa %s på ett objekt" -#: utils/adt/jsonfuncs.c:4380 utils/adt/jsonfuncs.c:4439 -#: utils/adt/jsonfuncs.c:4519 +#: utils/adt/jsonfuncs.c:4656 utils/adt/jsonfuncs.c:4715 +#: utils/adt/jsonfuncs.c:4795 #, c-format msgid "cannot delete from scalar" msgstr "kan inte radera från en skalär" -#: utils/adt/jsonfuncs.c:4524 +#: utils/adt/jsonfuncs.c:4800 #, c-format msgid "cannot delete from object using integer index" msgstr "kan inte radera från objekt genom att använda heltalsindex" -#: utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4751 +#: utils/adt/jsonfuncs.c:4868 utils/adt/jsonfuncs.c:5027 #, c-format msgid "cannot set path in scalar" msgstr "kan inte sätta sökväg i skalär" -#: utils/adt/jsonfuncs.c:4633 utils/adt/jsonfuncs.c:4675 +#: 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 "null_value_treatment måste vara \"delete_key\", \"return_target\", \"use_json_null\" eller \"raise_exception\"" -#: utils/adt/jsonfuncs.c:4646 +#: utils/adt/jsonfuncs.c:4922 #, c-format msgid "JSON value must not be null" msgstr "JSON-värde får inte vara null" -#: utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonfuncs.c:4923 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "Avbrott utlöstes då null_value_treatment är \"raise_exception\"." -#: utils/adt/jsonfuncs.c:4648 +#: 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 "För att undvika detta så ändra null_value_treatment-argumentet eller se till att ett SQL-NULL inte skickas." -#: utils/adt/jsonfuncs.c:4703 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "cannot delete path in scalar" msgstr "kan inte radera sökväg i skalär" -#: utils/adt/jsonfuncs.c:4917 +#: utils/adt/jsonfuncs.c:5193 #, c-format msgid "path element at position %d is null" msgstr "sökvägselement vid position %d är null" -#: utils/adt/jsonfuncs.c:4936 utils/adt/jsonfuncs.c:4967 -#: utils/adt/jsonfuncs.c:5040 +#: utils/adt/jsonfuncs.c:5212 utils/adt/jsonfuncs.c:5243 +#: utils/adt/jsonfuncs.c:5316 #, c-format msgid "cannot replace existing key" msgstr "kan inte ersätta befintlig nyckel" -#: utils/adt/jsonfuncs.c:4937 utils/adt/jsonfuncs.c:4968 +#: 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 "Sökvägen förväntar sig att nyckeln är ett sammansatt objekt men det är ett skalärt värde." -#: utils/adt/jsonfuncs.c:5041 +#: utils/adt/jsonfuncs.c:5317 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Försök använda funktionen jsonb_set för att ersätta nyckelvärde." -#: utils/adt/jsonfuncs.c:5145 +#: utils/adt/jsonfuncs.c:5421 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "sökvägselement vid position %d är inte ett heltal: \"%s\"" -#: utils/adt/jsonfuncs.c:5162 +#: utils/adt/jsonfuncs.c:5438 #, c-format msgid "path element at position %d is out of range: %d" msgstr "sökvägselement vid position %d är utanför giltigt intervall: %d\"" -#: utils/adt/jsonfuncs.c:5314 +#: utils/adt/jsonfuncs.c:5590 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "fel flaggtyp, bara array:er och skalärer tillåts" -#: utils/adt/jsonfuncs.c:5321 +#: utils/adt/jsonfuncs.c:5597 #, c-format msgid "flag array element is not a string" msgstr "flaggelement i arrayen är inte en sträng" -#: utils/adt/jsonfuncs.c:5322 utils/adt/jsonfuncs.c:5344 +#: utils/adt/jsonfuncs.c:5598 utils/adt/jsonfuncs.c:5620 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Möjliga värden är: \"string\", \"numeric\", \"boolean\", \"key\" samt \"all\"." -#: utils/adt/jsonfuncs.c:5342 +#: utils/adt/jsonfuncs.c:5618 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "fel flagga i flagg-array: \"%s\"" -#: utils/adt/jsonpath.c:382 +#: utils/adt/jsonpath.c:389 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ är inte tillåten i rotuttryck" -#: utils/adt/jsonpath.c:388 +#: utils/adt/jsonpath.c:395 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST tillåts bara i array-indexeringar" -#: utils/adt/jsonpath_exec.c:361 +#: utils/adt/jsonpath_exec.c:491 #, c-format msgid "single boolean result is expected" msgstr "förväntade ett booleanskt resultat" -#: utils/adt/jsonpath_exec.c:557 +#: utils/adt/jsonpath_exec.c:851 #, c-format -msgid "\"vars\" argument is not an object" -msgstr "\"variabel\"-argumentet är inte ett objekt" +msgid "jsonpath wildcard array accessor can only be applied to an array" +msgstr "jsonpaths arrayväljare med wildcard kan bara applcieras på en array" -#: utils/adt/jsonpath_exec.c:558 +#: utils/adt/jsonpath_exec.c:874 #, c-format -msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." -msgstr "Jsonpath-parametrar skall kodas som nyckel-värde-par av \"variabel\"-objekt." +msgid "jsonpath wildcard member accessor can only be applied to an object" +msgstr "jsonpaths medlemsväljare med wildcard kan bara appliceras på ett objekt" + +#: utils/adt/jsonpath_exec.c:923 +#, c-format +msgid "jsonpath array subscript is out of bounds" +msgstr "array-index för jsonpath är utanför giltigt område" + +#: utils/adt/jsonpath_exec.c:980 +#, c-format +msgid "jsonpath array accessor can only be applied to an array" +msgstr "jsonpaths arrayväljare kan bara appliceras på en array" -#: utils/adt/jsonpath_exec.c:675 +#: utils/adt/jsonpath_exec.c:1044 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSON-objekt innehåller inte nyckeln \"%s\"" -#: utils/adt/jsonpath_exec.c:687 +#: utils/adt/jsonpath_exec.c:1056 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "jsonpaths medlemsväljare kan bara appliceras på ett objekt" -#: utils/adt/jsonpath_exec.c:716 +#: utils/adt/jsonpath_exec.c:1114 #, c-format -msgid "jsonpath wildcard array accessor can only be applied to an array" -msgstr "jsonpaths arrayväljare med wildcard kan bara applcieras på en array" +msgid "jsonpath item method .%s() can only be applied to an array" +msgstr "jsonpaths elementmetod .%s() kan bara applicerars på en array" -#: utils/adt/jsonpath_exec.c:764 +#: utils/adt/jsonpath_exec.c:1167 utils/adt/jsonpath_exec.c:1193 #, c-format -msgid "jsonpath array subscript is out of bounds" -msgstr "array-index för jsonpath är utanför giltigt område" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type double precision" +msgstr "argumentet \"%s\" till jsonpaths elementmetod .%s() är ogiltig för typen double precision" -#: utils/adt/jsonpath_exec.c:821 +#: 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 "jsonpath array accessor can only be applied to an array" -msgstr "jsonpaths arrayväljare kan bara appliceras på en array" +msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" +msgstr "NaN eller Infinity tillåts inte för jsonpaths elementmetod .%s()" -#: utils/adt/jsonpath_exec.c:873 +#: 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 wildcard member accessor can only be applied to an object" -msgstr "jsonpaths medlemsväljare med wildcard kan bara appliceras på ett objekt" +msgid "jsonpath item method .%s() can only be applied to a string or numeric value" +msgstr "jsonpaths elementmetod .%s() kan bara applicerars på en sträng eller ett numeriskt värde" -#: utils/adt/jsonpath_exec.c:1007 +#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 #, c-format -msgid "jsonpath item method .%s() can only be applied to an array" -msgstr "jsonpaths elementmetod .%s() lkan bara applicerar på en array" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" +msgstr "argumentet \"%s\" till jsonpaths elementmetod .%s() är ogiltig för typen bigint" -#: utils/adt/jsonpath_exec.c:1060 +#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 #, c-format -msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" -msgstr "numeriskt argument till jsonpaths elementmetod .%s() är utanför giltigt intervall för typen double precision" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" +msgstr "argumentet \"%s\" till jsonpaths elementmetod .%s() är ogiltig för typen boolean" -#: utils/adt/jsonpath_exec.c:1081 +#: utils/adt/jsonpath_exec.c:1386 #, c-format -msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" -msgstr "strängargument till jsonpaths elementmetod .%s() är inte en giltig representation av ett double precision-nummer" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, or numeric value" +msgstr "jsonpaths elementmetod .%s() kan bara appliceras på en boolean, sträng eller ett numeriskt värde" -#: utils/adt/jsonpath_exec.c:1094 +#: utils/adt/jsonpath_exec.c:1439 utils/adt/jsonpath_exec.c:1528 #, c-format -msgid "jsonpath item method .%s() can only be applied to a string or numeric value" -msgstr "jsonpaths elementmetod .%s() kan bara applicerar på en sträng eller ett numeriskt värde" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type numeric" +msgstr "argumentet \"%s\" till jsonpaths elementmetod .%s() är ogiltig för typen numeric" + +#: utils/adt/jsonpath_exec.c:1487 +#, c-format +msgid "precision of jsonpath item method .%s() is out of range for type integer" +msgstr "precisionen för jsonpaths elementmetod .%s() är utanför giltigt intervall för typen integer" + +#: utils/adt/jsonpath_exec.c:1501 +#, c-format +msgid "scale of jsonpath item method .%s() is out of range for type integer" +msgstr "skalan för jsonpaths elementmetod .%s() är utanför giltigt intervall för typen integer" + +#: 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 "argumentet \"%s\" till jsonpaths elementmetod .%s() är ogiltig för typen integer" + +#: utils/adt/jsonpath_exec.c:1648 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a boolean, string, numeric, or datetime value" +msgstr "jsonpaths elementmetod .%s() kan bara applicerars på en boolean, sträng eller ett datetime-värde" -#: utils/adt/jsonpath_exec.c:1584 +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "vänster operand på jsonpath-operator %s är inte ett ensamt numeriskt värde" -#: utils/adt/jsonpath_exec.c:1591 +#: utils/adt/jsonpath_exec.c:2144 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "höger operand på jsonpath-operator %s är inte ett ensamt numeriskt värde" -#: utils/adt/jsonpath_exec.c:1659 +#: utils/adt/jsonpath_exec.c:2212 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "operand till unär jsonpath-operator %s är inte ett numeriskt värde" -#: utils/adt/jsonpath_exec.c:1758 +#: utils/adt/jsonpath_exec.c:2311 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "jsonpaths elementmetod .%s() kan bara appliceras på ett numeriskt värde" -#: utils/adt/jsonpath_exec.c:1798 +#: utils/adt/jsonpath_exec.c:2357 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" -msgstr "jsonpaths elementmetod .%s() lkan bara applicerar på en sträng" +msgstr "jsonpaths elementmetod .%s() kan bara appliceras på en sträng" + +#: utils/adt/jsonpath_exec.c:2450 +#, c-format +msgid "time precision of jsonpath item method .%s() is out of range for type integer" +msgstr "tidsprecisionen till jsonpaths elementmetod .%s() är utanför giltigt intervall för typen integer" -#: utils/adt/jsonpath_exec.c:1901 +#: 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 "datetime format is not recognized: \"%s\"" -msgstr "datetime-format känns inte igen: \"%s\"" +msgid "%s format is not recognized: \"%s\"" +msgstr "%s-format känns inte igen: \"%s\"" -#: utils/adt/jsonpath_exec.c:1903 +#: utils/adt/jsonpath_exec.c:2486 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "Använd ett datetime-mallargument för att ange indataformatet." -#: utils/adt/jsonpath_exec.c:1971 +#: 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 "tidsprecisionen till jsonpaths elementmetod .%s() är ogiltigt" + +#: utils/adt/jsonpath_exec.c:2840 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "elementmetod .%s() för jsonpath kan bara appliceras på ett objekt" -#: utils/adt/jsonpath_exec.c:2153 +#: utils/adt/jsonpath_exec.c:3124 +#, c-format +msgid "could not convert value of type %s to jsonpath" +msgstr "kunde inte konvertera värde av typ %s till jsonpath" + +#: utils/adt/jsonpath_exec.c:3158 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "kunde inte hitta jsonpath-variabel \"%s\"" -#: utils/adt/jsonpath_exec.c:2417 +#: utils/adt/jsonpath_exec.c:3211 +#, c-format +msgid "\"vars\" argument is not an object" +msgstr "\"variabel\"-argumentet är inte ett objekt" + +#: utils/adt/jsonpath_exec.c:3212 +#, c-format +msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgstr "Jsonpath-parametrar skall kodas som nyckel-värde-par av \"variabel\"-objekt." + +#: utils/adt/jsonpath_exec.c:3475 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "array-index för jsonpath är inte ett ensamt numeriskt värde" -#: utils/adt/jsonpath_exec.c:2429 +#: utils/adt/jsonpath_exec.c:3487 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "array-index för jsonpath är utanför giltigt interval för integer" -#: utils/adt/jsonpath_exec.c:2606 +#: utils/adt/jsonpath_exec.c:3671 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "kan inte konvertera värde från %s till %s utan att använda tidszon" -#: utils/adt/jsonpath_exec.c:2608 +#: utils/adt/jsonpath_exec.c:3673 #, c-format msgid "Use *_tz() function for time zone support." msgstr "ANvända *_tz()-funktioner som stöder tidszon." +#: utils/adt/jsonpath_exec.c:3981 +#, c-format +msgid "JSON path expression for column \"%s\" must return single item when no wrapper is requested" +msgstr "Uttryck för JSON-sökväg för kolumn \"%s\" skall returnera exakt ett värde när wrapper inte efterfrågas" + +#: utils/adt/jsonpath_exec.c:3983 utils/adt/jsonpath_exec.c:3988 +#, c-format +msgid "Use the WITH WRAPPER clause to wrap SQL/JSON items into an array." +msgstr "Använd klausulen WITH WRAPPER för att packa SQL/JSON-poster in i en array." + +#: utils/adt/jsonpath_exec.c:3987 +#, c-format +msgid "JSON path expression in JSON_QUERY must return single item when no wrapper is requested" +msgstr "Uttryck för JSON-sökväg i JSON_QUERY skall returnera exakt ett värde när wrapper inte efterfrågas" + +#: utils/adt/jsonpath_exec.c:4045 utils/adt/jsonpath_exec.c:4069 +#, c-format +msgid "JSON path expression for column \"%s\" must return single scalar item" +msgstr "Uttryck för JSON-sökväg för kolumn \"%s\" skall returnera exakt ett skalärt värde" + +#: utils/adt/jsonpath_exec.c:4050 utils/adt/jsonpath_exec.c:4074 +#, c-format +msgid "JSON path expression in JSON_VALUE must return single scalar item" +msgstr "Uttryck för JSON-sökväg i JSON_VALUE skall returnera exakt ett skalärt värde" + #: utils/adt/levenshtein.c:132 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "levenshtein-argument överskrider maximala längden på %d tecken" -#: utils/adt/like.c:161 +#: utils/adt/like.c:159 #, c-format msgid "nondeterministic collations are not supported for LIKE" msgstr "ickedeterministiska jämförelser (collation) stöds inte för LIKE" -#: utils/adt/like.c:190 utils/adt/like_support.c:1024 +#: utils/adt/like.c:188 utils/adt/like_support.c:1023 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "kunde inte bestämma vilken jämförelse (collation) som skall användas för ILIKE" -#: utils/adt/like.c:202 +#: utils/adt/like.c:200 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "ickedeterministiska jämförelser (collation) stöds inte för ILIKE" @@ -25133,22 +26215,22 @@ msgstr "ickedeterministiska jämförelser (collation) stöds inte för ILIKE" msgid "LIKE pattern must not end with escape character" msgstr "LIKE-mönster för inte sluta med ett escape-tecken" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "ogiltig escape-sträng" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:802 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "Escape-sträng måste vara tom eller ett tecken." -#: utils/adt/like_support.c:1014 +#: utils/adt/like_support.c:1013 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "matchning utan skiftlägeskänslighet stöds inte för typen bytea" -#: utils/adt/like_support.c:1115 +#: utils/adt/like_support.c:1114 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "matching med reguljär-uttryck stöds inte för typen bytea" @@ -25158,17 +26240,17 @@ msgstr "matching med reguljär-uttryck stöds inte för typen bytea" msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "ogiltigt oktet-värde i \"macaddr\"-värde: \"%s\"" -#: utils/adt/mac8.c:554 +#: utils/adt/mac8.c:555 #, c-format msgid "macaddr8 data out of range to convert to macaddr" msgstr "macaddr8-data utanför giltigt intervall för att konverteras till macaddr" -#: utils/adt/mac8.c:555 +#: utils/adt/mac8.c:556 #, c-format msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Bara adresser som har FF och FE som värden i 4:e och 5:e byten från vänster, till exempel xx:xx:xx:ff:fe:xx:xx:xx, är möjliga att konvertera från macaddr8 till macaddr." -#: utils/adt/mcxtfuncs.c:182 +#: utils/adt/mcxtfuncs.c:173 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d är inte en PostgreSQL serverprocess" @@ -25207,70 +26289,70 @@ msgstr "kan vara en enkelt namn" msgid "requires AS" msgstr "kräver AS" -#: utils/adt/misc.c:853 utils/adt/misc.c:867 utils/adt/misc.c:906 -#: utils/adt/misc.c:912 utils/adt/misc.c:918 utils/adt/misc.c:941 +#: utils/adt/misc.c:897 utils/adt/misc.c:911 utils/adt/misc.c:950 +#: utils/adt/misc.c:956 utils/adt/misc.c:962 utils/adt/misc.c:985 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "sträng är inte en giltig identifierare: \"%s\"" -#: utils/adt/misc.c:855 +#: utils/adt/misc.c:899 #, c-format msgid "String has unclosed double quotes." msgstr "Sträng har ej avslutade dubbla citattecken." -#: utils/adt/misc.c:869 +#: utils/adt/misc.c:913 #, c-format msgid "Quoted identifier must not be empty." msgstr "Citerad identifierare får inte vara tom." -#: utils/adt/misc.c:908 +#: utils/adt/misc.c:952 #, c-format msgid "No valid identifier before \".\"." msgstr "Ingen giltig indentifierare innan \".\"." -#: utils/adt/misc.c:914 +#: utils/adt/misc.c:958 #, c-format msgid "No valid identifier after \".\"." msgstr "Ingen giltig identifierare efter \".\"." -#: utils/adt/misc.c:974 +#: utils/adt/misc.c:1018 #, c-format msgid "log format \"%s\" is not supported" msgstr "loggformat \"%s\" stöds inte" -#: utils/adt/misc.c:975 +#: utils/adt/misc.c:1019 #, c-format msgid "The supported log formats are \"stderr\", \"csvlog\", and \"jsonlog\"." msgstr "Loggformat som stöds är \"stderr\", \"csvlog\" och \"jsonlog\"." -#: utils/adt/multirangetypes.c:151 utils/adt/multirangetypes.c:164 -#: utils/adt/multirangetypes.c:193 utils/adt/multirangetypes.c:267 -#: utils/adt/multirangetypes.c:291 +#: utils/adt/multirangetypes.c:150 utils/adt/multirangetypes.c:163 +#: utils/adt/multirangetypes.c:192 utils/adt/multirangetypes.c:266 +#: utils/adt/multirangetypes.c:290 #, c-format msgid "malformed multirange literal: \"%s\"" msgstr "trasig multirange-litteral: \"%s\"" -#: utils/adt/multirangetypes.c:153 +#: utils/adt/multirangetypes.c:152 #, c-format msgid "Missing left brace." msgstr "Saknar vänster krullparentes" -#: utils/adt/multirangetypes.c:195 +#: utils/adt/multirangetypes.c:194 #, c-format msgid "Expected range start." msgstr "Förväntade range-start" -#: utils/adt/multirangetypes.c:269 +#: utils/adt/multirangetypes.c:268 #, c-format msgid "Expected comma or end of multirange." msgstr "Oväntat komma eller slut på multirange." -#: utils/adt/multirangetypes.c:982 +#: utils/adt/multirangetypes.c:981 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "multiranges kan inte skapas från en multidimensionell array" -#: utils/adt/multirangetypes.c:1008 +#: utils/adt/multirangetypes.c:1007 #, c-format msgid "multirange values cannot contain null members" msgstr "multirange-värden kan inte innehålla null-medlemmar" @@ -25349,112 +26431,138 @@ msgstr "resultatet är utanför giltigt intervall" msgid "cannot subtract inet values of different sizes" msgstr "kan inte subtrahera inet-värden av olika storlek" -#: utils/adt/numeric.c:785 utils/adt/numeric.c:3643 utils/adt/numeric.c:7131 -#: utils/adt/numeric.c:7334 utils/adt/numeric.c:7806 utils/adt/numeric.c:10501 -#: utils/adt/numeric.c:10975 utils/adt/numeric.c:11069 -#: utils/adt/numeric.c:11203 +#: 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 "overflow på värde i formatet numeric" -#: utils/adt/numeric.c:1098 +#: utils/adt/numeric.c:1106 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "ogiltigt tecken i externt \"numric\"-värde" -#: utils/adt/numeric.c:1104 +#: utils/adt/numeric.c:1112 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "ogiltig skala i externt \"numeric\"-värde" -#: utils/adt/numeric.c:1113 +#: utils/adt/numeric.c:1121 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "felaktig siffra i externt numeriskt (\"numeric\") värde " -#: utils/adt/numeric.c:1328 utils/adt/numeric.c:1342 +#: utils/adt/numeric.c:1336 utils/adt/numeric.c:1350 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "Precisionen %d för NUMERIC måste vara mellan 1 och %d" -#: utils/adt/numeric.c:1333 +#: utils/adt/numeric.c:1341 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "Skalan %d för NUMERIC måste vara mellan %d och %d" -#: utils/adt/numeric.c:1351 +#: utils/adt/numeric.c:1359 #, c-format msgid "invalid NUMERIC type modifier" msgstr "ogiltig typmodifierare för NUMERIC" -#: utils/adt/numeric.c:1709 +#: utils/adt/numeric.c:1725 #, c-format msgid "start value cannot be NaN" msgstr "startvärde får inte vara NaN" -#: utils/adt/numeric.c:1713 +#: utils/adt/numeric.c:1729 #, c-format msgid "start value cannot be infinity" msgstr "startvärde får inte vara oändligt" -#: utils/adt/numeric.c:1720 +#: utils/adt/numeric.c:1736 #, c-format msgid "stop value cannot be NaN" msgstr "stoppvärde får inte vara NaN" -#: utils/adt/numeric.c:1724 +#: utils/adt/numeric.c:1740 #, c-format msgid "stop value cannot be infinity" msgstr "stoppvärde får inte vara oändligt" -#: utils/adt/numeric.c:1737 +#: utils/adt/numeric.c:1753 #, c-format msgid "step size cannot be NaN" msgstr "stegstorlek får inte vara NaN" -#: utils/adt/numeric.c:1741 +#: utils/adt/numeric.c:1757 #, c-format msgid "step size cannot be infinity" msgstr "stegstorlek får inte vara oändligt" -#: utils/adt/numeric.c:3633 +#: utils/adt/numeric.c:3649 #, c-format msgid "factorial of a negative number is undefined" msgstr "fakultet av ett negativt tal är odefinierat" -#: utils/adt/numeric.c:4366 utils/adt/numeric.c:4446 utils/adt/numeric.c:4487 -#: utils/adt/numeric.c:4683 +#: utils/adt/numeric.c:4256 +#, c-format +msgid "lower bound cannot be NaN" +msgstr "undre gräns kan inte vara NaN" + +#: utils/adt/numeric.c:4260 +#, c-format +msgid "lower bound cannot be infinity" +msgstr "undre gräns kan inte vara oändlig" + +#: utils/adt/numeric.c:4267 +#, c-format +msgid "upper bound cannot be NaN" +msgstr "övre gräns kan inte vara NaN" + +#: utils/adt/numeric.c:4271 +#, c-format +msgid "upper bound cannot be infinity" +msgstr "övre gräns kan inte vara oändlig" + +#: 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 "kan inte konvertera NaN till %s" -#: utils/adt/numeric.c:4370 utils/adt/numeric.c:4450 utils/adt/numeric.c:4491 -#: utils/adt/numeric.c:4687 +#: 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 "kan inte konvertera oändlighet till %s" -#: utils/adt/numeric.c:4696 +#: utils/adt/numeric.c:4789 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn är utanför giltigt intervall" -#: utils/adt/numeric.c:7896 utils/adt/numeric.c:7947 +#: utils/adt/numeric.c:7981 utils/adt/numeric.c:8032 #, c-format msgid "numeric field overflow" msgstr "overflow i numeric-fält" -#: utils/adt/numeric.c:7897 +#: 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 "Ett fält med precision %d, skala %d måste avrundas till ett absolut värde mindre än %s%d." -#: utils/adt/numeric.c:7948 +#: utils/adt/numeric.c:8033 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "Ett fält med precision %d, skala %d kan inte innehålla ett oändligt värde." -#: utils/adt/oid.c:216 +#: 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 "undre gräns måste vara mindre eller lika med övre gräns" + +#: utils/adt/oid.c:217 #, c-format msgid "invalid oidvector data" msgstr "ogiltig oidvector-data" @@ -25484,306 +26592,317 @@ msgstr "efterfrågat tecken är för stort för kodning: %u" msgid "requested character not valid for encoding: %u" msgstr "efterfrågat tecken är inte giltigt för kodning: %u" -#: utils/adt/orderedsetaggs.c:448 utils/adt/orderedsetaggs.c:553 -#: utils/adt/orderedsetaggs.c:693 +#: utils/adt/orderedsetaggs.c:446 utils/adt/orderedsetaggs.c:551 +#: utils/adt/orderedsetaggs.c:691 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "percentil-värde %g är inte mellan 0 och 1" -#: utils/adt/pg_locale.c:1410 +#: utils/adt/pg_locale.c:326 utils/adt/pg_locale.c:358 +#, c-format +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "lokalnamn \"%s\" innehåller tecken som ej är ASCII" + +#: utils/adt/pg_locale.c:1507 #, c-format msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" msgstr "kunde inte öppna jämförelse för lokal \"%s\" med regler \"%s\": %s" -#: utils/adt/pg_locale.c:1421 utils/adt/pg_locale.c:2831 -#: utils/adt/pg_locale.c:2904 +#: 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 stöds inte av detta bygge" -#: utils/adt/pg_locale.c:1450 +#: utils/adt/pg_locale.c:1546 #, c-format msgid "could not create locale \"%s\": %m" msgstr "kunde inte skapa locale \"%s\": %m" -#: utils/adt/pg_locale.c:1453 +#: utils/adt/pg_locale.c:1549 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Operativsystemet kunde inte hitta någon lokaldata för lokalnamnet \"%s\"." -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1670 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "jämförelser (collations) med olika collate- och ctype-värden stöds inte på denna plattform" -#: utils/adt/pg_locale.c:1577 -#, c-format -msgid "collation provider LIBC is not supported on this platform" -msgstr "leverantören LIBC för jämförelse (collation) stöds inte på denna plattform" - -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1717 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "jämförelse (collation) \"%s\" har ingen version men en version har lagrats" -#: utils/adt/pg_locale.c:1624 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "jämförelse (collation) \"%s\" har en version som inte matchar" -#: utils/adt/pg_locale.c:1626 +#: 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 "Jämförelsen (collation) i databasen har skapats med version %s men operativsystemet har version %s." -#: utils/adt/pg_locale.c:1629 +#: 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 "Bygg om alla objekt som påverkas av denna jämförelse (collation) och kör ALTER COLLATION %s REFRESH VERSION eller bygg PostgreSQL med rätt bibliotekversion." -#: utils/adt/pg_locale.c:1695 +#: 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 "ogiltigt lokalnamn \"%s\" för inbyggd leverantör" + +#: utils/adt/pg_locale.c:1814 #, c-format msgid "could not load locale \"%s\"" msgstr "kunde inte skapa locale \"%s\"" -#: utils/adt/pg_locale.c:1720 +#: utils/adt/pg_locale.c:1839 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "kunde inte hitta jämförelseversion (collation) för lokal \"%s\": felkod %lu" -#: utils/adt/pg_locale.c:1776 utils/adt/pg_locale.c:1789 +#: 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 "kunde inte konvertera sträng till UTF-16: felkod %lu" -#: utils/adt/pg_locale.c:1803 +#: utils/adt/pg_locale.c:1920 #, c-format msgid "could not compare Unicode strings: %m" msgstr "kunde inte jämföra Unicode-strängar: %m" -#: utils/adt/pg_locale.c:1984 +#: utils/adt/pg_locale.c:2094 #, c-format msgid "collation failed: %s" msgstr "jämförelse misslyckades: %s" -#: utils/adt/pg_locale.c:2205 utils/adt/pg_locale.c:2237 +#: utils/adt/pg_locale.c:2313 utils/adt/pg_locale.c:2345 #, c-format msgid "sort key generation failed: %s" msgstr "generering av sorteringsnyckel misslyckades: %s" -#: utils/adt/pg_locale.c:2474 +#: utils/adt/pg_locale.c:2635 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "kunde inte härleda språk från lokalen \"%s\": %s" -#: utils/adt/pg_locale.c:2495 utils/adt/pg_locale.c:2511 +#: utils/adt/pg_locale.c:2656 utils/adt/pg_locale.c:2672 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "kunde inte öppna jämförelse för lokal \"%s\": %s" -#: utils/adt/pg_locale.c:2536 +#: utils/adt/pg_locale.c:2697 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "kodning \"%s\" stöds inte av ICU" -#: utils/adt/pg_locale.c:2543 +#: utils/adt/pg_locale.c:2704 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "kunde inte öppna ICU-konverterare för kodning \"%s\": %s" -#: utils/adt/pg_locale.c:2561 utils/adt/pg_locale.c:2580 -#: utils/adt/pg_locale.c:2636 utils/adt/pg_locale.c:2647 +#: 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 misslyckades: %s" -#: utils/adt/pg_locale.c:2822 +#: utils/adt/pg_locale.c:2983 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "kunde inte konvertera lokalnamn \"%s\" till språktagg: %s" -#: utils/adt/pg_locale.c:2863 +#: utils/adt/pg_locale.c:3024 #, c-format msgid "could not get language from ICU locale \"%s\": %s" msgstr "kunde inte härleda språk från ICU-lokalen \"%s\": %s" -#: utils/adt/pg_locale.c:2865 utils/adt/pg_locale.c:2894 +#: 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 "För att stänga av validering av ICU-lokal, sätt parameter \"%s\" till \"%s\"" -#: utils/adt/pg_locale.c:2892 +#: utils/adt/pg_locale.c:3053 #, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" msgstr "ICU-lokalen \"%s\" har ett okänt språk \"%s\"" -#: utils/adt/pg_locale.c:3073 +#: utils/adt/pg_locale.c:3204 #, c-format msgid "invalid multibyte character for locale" msgstr "ogiltigt multibyte-tecken för lokalen" -#: utils/adt/pg_locale.c:3074 +#: utils/adt/pg_locale.c:3205 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Serverns LC_CTYPE-lokal är troligen inkompatibel med databasens teckenkodning." -#: utils/adt/pg_lsn.c:263 +#: utils/adt/pg_lsn.c:262 #, c-format msgid "cannot add NaN to pg_lsn" msgstr "kan inte addera NaN till pg_lsn" -#: utils/adt/pg_lsn.c:297 +#: utils/adt/pg_lsn.c:296 #, c-format msgid "cannot subtract NaN from pg_lsn" msgstr "kan inte subtrahera Nan från pg_lsn" -#: utils/adt/pg_upgrade_support.c:29 +#: utils/adt/pg_upgrade_support.c:39 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "funktionen kan bara anropas när servern är i binärt uppgraderingsläge" -#: utils/adt/pgstatfuncs.c:254 +#: utils/adt/pgstatfuncs.c:252 #, c-format msgid "invalid command name: \"%s\"" msgstr "ogiltigt kommandonamn: \"%s\"" -#: utils/adt/pgstatfuncs.c:1774 +#: utils/adt/pgstatfuncs.c:1739 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "okänt återställningsmål \"%s\"" -#: utils/adt/pgstatfuncs.c:1775 +#: utils/adt/pgstatfuncs.c:1740 #, c-format -msgid "Target must be \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", or \"wal\"." -msgstr "Målet måste vara \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\" eller \"wal\"." +msgid "Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\"." +msgstr "Målet måste vara \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\" eller \"wal\"." -#: utils/adt/pgstatfuncs.c:1857 +#: utils/adt/pgstatfuncs.c:1822 #, c-format msgid "invalid subscription OID %u" msgstr "ogiltigt prenumerations-OID: %u" -#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 +#: utils/adt/pseudorandomfuncs.c:69 +#, c-format +msgid "setseed parameter %g is out of allowed range [-1,1]" +msgstr "setseed-parameter %g är utanför giltigt intervall [-1,1]" + +#: utils/adt/pseudotypes.c:55 utils/adt/pseudotypes.c:89 #, c-format msgid "cannot display a value of type %s" msgstr "kan inte visa ett värde av typ %s" -#: utils/adt/pseudotypes.c:310 +#: utils/adt/pseudotypes.c:307 #, c-format msgid "cannot accept a value of a shell type" msgstr "kan inte acceptera ett värde av typen shell" -#: utils/adt/pseudotypes.c:320 +#: utils/adt/pseudotypes.c:317 #, c-format msgid "cannot display a value of a shell type" msgstr "kan inte visa ett värde av typen shell" -#: utils/adt/rangetypes.c:415 +#: utils/adt/rangetypes.c:422 #, c-format msgid "range constructor flags argument must not be null" msgstr "konstruktorflaggargument till range får inte vara null" -#: utils/adt/rangetypes.c:1014 +#: utils/adt/rangetypes.c:1021 #, c-format msgid "result of range difference would not be contiguous" msgstr "resultatet av range-skillnad skulle inte vara angränsande" -#: utils/adt/rangetypes.c:1075 +#: utils/adt/rangetypes.c:1082 #, c-format msgid "result of range union would not be contiguous" msgstr "resultatet av range-union skulle inte vara angränsande" -#: utils/adt/rangetypes.c:1750 +#: utils/adt/rangetypes.c:1757 #, c-format msgid "range lower bound must be less than or equal to range upper bound" -msgstr "lägre gräns för range måste vara lägre eller lika med övre gräns för range" +msgstr "undre gräns för range måste vara lägre eller lika med övre gräns för range" -#: utils/adt/rangetypes.c:2197 utils/adt/rangetypes.c:2210 -#: utils/adt/rangetypes.c:2224 +#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 +#: utils/adt/rangetypes.c:2283 #, c-format msgid "invalid range bound flags" msgstr "ogiltig gränsflagga för range" -#: utils/adt/rangetypes.c:2198 utils/adt/rangetypes.c:2211 -#: utils/adt/rangetypes.c:2225 +#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 +#: utils/adt/rangetypes.c:2284 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Giltiga värden är \"[]\", \"[)\", \"(]\" och \"()\"." -#: utils/adt/rangetypes.c:2293 utils/adt/rangetypes.c:2310 -#: utils/adt/rangetypes.c:2325 utils/adt/rangetypes.c:2345 -#: utils/adt/rangetypes.c:2356 utils/adt/rangetypes.c:2403 -#: utils/adt/rangetypes.c:2411 +#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 +#: utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 +#: utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "malformed range literal: \"%s\"" msgstr "trasig range-litteral: \"%s\"" -#: utils/adt/rangetypes.c:2295 +#: utils/adt/rangetypes.c:2354 #, c-format msgid "Junk after \"empty\" key word." msgstr "Skräp efter nyckelordet \"empty\"." -#: utils/adt/rangetypes.c:2312 +#: utils/adt/rangetypes.c:2371 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Saknar vänster parentes eller hakparentes." -#: utils/adt/rangetypes.c:2327 +#: utils/adt/rangetypes.c:2386 #, c-format msgid "Missing comma after lower bound." -msgstr "Saknar komma efter lägre gräns." +msgstr "Saknar komma efter undre gräns." -#: utils/adt/rangetypes.c:2347 +#: utils/adt/rangetypes.c:2406 #, c-format msgid "Too many commas." msgstr "För många komman." -#: utils/adt/rangetypes.c:2358 +#: utils/adt/rangetypes.c:2417 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Skräp efter höger parentes eller hakparentes." -#: utils/adt/regexp.c:305 utils/adt/regexp.c:1997 utils/adt/varlena.c:4270 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 #, c-format msgid "regular expression failed: %s" msgstr "reguljärt uttryck misslyckades: %s" -#: utils/adt/regexp.c:446 utils/adt/regexp.c:681 +#: utils/adt/regexp.c:445 utils/adt/regexp.c:680 #, c-format msgid "invalid regular expression option: \"%.*s\"" msgstr "ogiltigt flagga till reguljärt uttryck: \"%.*s\"" -#: utils/adt/regexp.c:683 +#: utils/adt/regexp.c:682 #, c-format msgid "If you meant to use regexp_replace() with a start parameter, cast the fourth argument to integer explicitly." msgstr "Om du menade att använda regexp_replace() med en startstartparameter så cast:a fjärde argumentet uttryckligen till integer." -#: utils/adt/regexp.c:717 utils/adt/regexp.c:726 utils/adt/regexp.c:1083 -#: utils/adt/regexp.c:1147 utils/adt/regexp.c:1156 utils/adt/regexp.c:1165 -#: utils/adt/regexp.c:1174 utils/adt/regexp.c:1854 utils/adt/regexp.c:1863 -#: utils/adt/regexp.c:1872 utils/misc/guc.c:6610 utils/misc/guc.c:6644 +#: 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 "ogiltigt värde för parameter \"%s\": %d" -#: utils/adt/regexp.c:937 +#: utils/adt/regexp.c:936 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "Regulart uttryck i SQL får inte innehålla mer än två dubbelcitat-escape-separatorer" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:1094 utils/adt/regexp.c:1185 utils/adt/regexp.c:1272 -#: utils/adt/regexp.c:1311 utils/adt/regexp.c:1699 utils/adt/regexp.c:1754 -#: utils/adt/regexp.c:1883 +#: utils/adt/regexp.c:1093 utils/adt/regexp.c:1184 utils/adt/regexp.c:1271 +#: utils/adt/regexp.c:1310 utils/adt/regexp.c:1698 utils/adt/regexp.c:1753 +#: utils/adt/regexp.c:1882 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s stöder inte \"global\"-flaggan" -#: utils/adt/regexp.c:1313 +#: utils/adt/regexp.c:1312 #, c-format msgid "Use the regexp_matches function instead." msgstr "Använd regexp_matches-funktionen istället." -#: utils/adt/regexp.c:1501 +#: utils/adt/regexp.c:1500 #, c-format msgid "too many regular expression matches" msgstr "för många reguljära uttryck matchar" @@ -25798,8 +26917,8 @@ msgstr "mer än en funktion med namn %s" msgid "more than one operator named %s" msgstr "mer än en operator med namn %s" -#: utils/adt/regproc.c:675 utils/adt/regproc.c:2009 utils/adt/ruleutils.c:10020 -#: utils/adt/ruleutils.c:10233 +#: 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 "för många argument" @@ -25809,162 +26928,162 @@ msgstr "för många argument" msgid "Provide two argument types for operator." msgstr "Ange två argumenttyper för operatorn." -#: utils/adt/regproc.c:1544 utils/adt/regproc.c:1661 utils/adt/regproc.c:1790 -#: utils/adt/regproc.c:1795 utils/adt/varlena.c:3410 utils/adt/varlena.c:3415 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 +#: utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 #, c-format msgid "invalid name syntax" msgstr "ogiltig namnsyntax" -#: utils/adt/regproc.c:1904 +#: utils/adt/regproc.c:1924 #, c-format msgid "expected a left parenthesis" msgstr "förväntade en vänsterparentes" -#: utils/adt/regproc.c:1922 +#: utils/adt/regproc.c:1942 #, c-format msgid "expected a right parenthesis" msgstr "förväntade en högreparentes" -#: utils/adt/regproc.c:1941 +#: utils/adt/regproc.c:1961 #, c-format msgid "expected a type name" msgstr "förväntade ett typnamn" -#: utils/adt/regproc.c:1973 +#: utils/adt/regproc.c:1993 #, c-format msgid "improper type name" msgstr "olämpligt typnamn" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1625 -#: utils/adt/ri_triggers.c:2610 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 +#: utils/adt/ri_triggers.c:2601 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "insert eller update på tabell \"%s\" bryter mot främmande nyckel-villkoret \"%s\"" -#: utils/adt/ri_triggers.c:309 utils/adt/ri_triggers.c:1628 +#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL tillåter inte att man blandar null och icke-null-värden." -#: utils/adt/ri_triggers.c:2045 +#: utils/adt/ri_triggers.c:2036 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "funktionen \"%s\" måste köras för INSERT" -#: utils/adt/ri_triggers.c:2051 +#: utils/adt/ri_triggers.c:2042 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "funktionen \"%s\" måste köras för UPDATE" -#: utils/adt/ri_triggers.c:2057 +#: utils/adt/ri_triggers.c:2048 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "funktionen \"%s\" måste köras för DELETE" -#: utils/adt/ri_triggers.c:2080 +#: utils/adt/ri_triggers.c:2071 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "ingen pg_constraint-post för trigger \"%s\" på tabell \"%s\"" -#: utils/adt/ri_triggers.c:2082 +#: utils/adt/ri_triggers.c:2073 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Ta bort denna trigger för referensiell integritet och dess kollegor, gör sen ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2435 +#: utils/adt/ri_triggers.c:2426 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "referentiell integritetsfråga på \"%s\" från villkor \"%s\" på \"%s\" gav oväntat resultat" -#: utils/adt/ri_triggers.c:2439 +#: utils/adt/ri_triggers.c:2430 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Detta beror troligen på att en regel har skrivit om frågan." -#: utils/adt/ri_triggers.c:2600 +#: utils/adt/ri_triggers.c:2591 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "borttagning av partition \"%s\" bryter mot främmande nyckel-villkoret \"%s\"" -#: utils/adt/ri_triggers.c:2603 utils/adt/ri_triggers.c:2628 +#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "Nyckeln (%s)=(%s) refereras fortfarande till från tabell \"%s\"." -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2605 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Nyckel (%s)=(%s) finns inte i tabellen \"%s\"." -#: utils/adt/ri_triggers.c:2617 +#: utils/adt/ri_triggers.c:2608 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Nyckeln finns inte i tabellen \"%s\"." -#: utils/adt/ri_triggers.c:2623 +#: utils/adt/ri_triggers.c:2614 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update eller delete på tabell \"%s\" bryter mot främmande nyckel-villkoret \"%s\" för tabell \"%s\"" -#: utils/adt/ri_triggers.c:2631 +#: utils/adt/ri_triggers.c:2622 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "Nyckel refereras fortfarande till från tabell \"%s\"." -#: utils/adt/rowtypes.c:106 utils/adt/rowtypes.c:510 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:509 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "inläsning av annonym composite-typ är inte implementerat" -#: utils/adt/rowtypes.c:159 utils/adt/rowtypes.c:191 utils/adt/rowtypes.c:217 -#: utils/adt/rowtypes.c:228 utils/adt/rowtypes.c:286 utils/adt/rowtypes.c:297 +#: utils/adt/rowtypes.c:158 utils/adt/rowtypes.c:190 utils/adt/rowtypes.c:216 +#: utils/adt/rowtypes.c:227 utils/adt/rowtypes.c:285 utils/adt/rowtypes.c:296 #, c-format msgid "malformed record literal: \"%s\"" msgstr "felaktig postliteral: \"%s\"" -#: utils/adt/rowtypes.c:160 +#: utils/adt/rowtypes.c:159 #, c-format msgid "Missing left parenthesis." msgstr "Saknar vänster parentes" -#: utils/adt/rowtypes.c:192 +#: utils/adt/rowtypes.c:191 #, c-format msgid "Too few columns." msgstr "För få kolumner." -#: utils/adt/rowtypes.c:287 +#: utils/adt/rowtypes.c:286 #, c-format msgid "Too many columns." msgstr "För många kolumner." -#: utils/adt/rowtypes.c:298 +#: utils/adt/rowtypes.c:297 #, c-format msgid "Junk after right parenthesis." msgstr "Skräp efter höger parentes" -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:558 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "fel antal kolumner: %d, förväntade %d" -#: utils/adt/rowtypes.c:601 +#: utils/adt/rowtypes.c:599 #, c-format msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" msgstr "binär data har typ %u (%s) istället för förväntad %u (%s) i postkolumn %d" -#: utils/adt/rowtypes.c:668 +#: utils/adt/rowtypes.c:660 #, c-format msgid "improper binary format in record column %d" msgstr "felaktigt binärt format i postkolumn %d" -#: utils/adt/rowtypes.c:959 utils/adt/rowtypes.c:1205 utils/adt/rowtypes.c:1463 -#: utils/adt/rowtypes.c:1709 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 +#: utils/adt/rowtypes.c:1699 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "kan inte jämföra olika kolumntyper %s och %s vid postkolumn %d" -#: utils/adt/rowtypes.c:1050 utils/adt/rowtypes.c:1275 -#: utils/adt/rowtypes.c:1560 utils/adt/rowtypes.c:1745 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 +#: utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "kan inte jämföra record-typer med olika antal kolumner" @@ -25984,113 +27103,139 @@ msgstr "uttryck innehåller variabler till mer än en relation" msgid "expression contains variables" msgstr "uttryck innehåller variabler" -#: utils/adt/ruleutils.c:5227 +#: utils/adt/ruleutils.c:5246 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "regel \"%s\" har en icke stödd händelsetyp %d" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:128 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "prceision för TIMESTAMP(%d)%s kan inte vara negativ" -#: utils/adt/timestamp.c:118 +#: utils/adt/timestamp.c:134 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "precision för TIMESTAMP(%d)%s reducerad till högsta tillåtna, %d" -#: utils/adt/timestamp.c:378 +#: utils/adt/timestamp.c:394 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "timestamp(%d)-precision måste vara mellan %d och %d" -#: utils/adt/timestamp.c:496 +#: utils/adt/timestamp.c:512 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Numeriska tidszoner måste ha \"-\" eller \"+\" som sitt första tecken." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:524 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "numerisk tidszon \"%s\" utanför giltigt intervall" -#: utils/adt/timestamp.c:609 utils/adt/timestamp.c:619 -#: utils/adt/timestamp.c:627 +#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 +#: utils/adt/timestamp.c:643 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp utanför giltigt intervall: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:728 +#: utils/adt/timestamp.c:744 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp kan inte vara NaN" -#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:758 +#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp utanför giltigt intervall: \"%g\"" -#: utils/adt/timestamp.c:1065 utils/adt/timestamp.c:1098 +#: 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: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 "interval utanför giltigt intervall" + +#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 #, c-format msgid "invalid INTERVAL type modifier" msgstr "ogitligt modifierare för typen INTERVAL" -#: utils/adt/timestamp.c:1081 +#: utils/adt/timestamp.c:1110 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d)-precision kan inte vara negativ" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1116 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d)-precision reducerad till maximalt tillåtna, %d" -#: utils/adt/timestamp.c:1473 +#: utils/adt/timestamp.c:1506 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "interval(%d)-precision måste vara mellan %d och %d" -#: utils/adt/timestamp.c:2703 -#, c-format -msgid "cannot subtract infinite timestamps" -msgstr "kan inte subtrahera oändliga tider (timestamp)" - -#: utils/adt/timestamp.c:3956 utils/adt/timestamp.c:4139 +#: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 #, c-format msgid "origin out of range" msgstr "origin utanför giltigt intervall" -#: utils/adt/timestamp.c:3961 utils/adt/timestamp.c:4144 +#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#, c-format +msgid "timestamps cannot be binned into infinite intervals" +msgstr "timestamps kan inte injusteras in i oändliga intervall" + +#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "timestamps kan inte injusteras in i intervall som innehåller månader eller år" -#: utils/adt/timestamp.c:3968 utils/adt/timestamp.c:4151 +#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 #, c-format msgid "stride must be greater than zero" msgstr "\"stride\" måste vara större än noll" -#: utils/adt/timestamp.c:4434 +#: utils/adt/timestamp.c:5091 #, c-format msgid "Months usually have fractional weeks." msgstr "Månader har vanligtvis veckor som decimaltal." -#: utils/adt/trigfuncs.c:42 +#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#, c-format +msgid "step size cannot be infinite" +msgstr "stegstorlek får inte vara oändlig" + +#: utils/adt/trigfuncs.c:41 #, c-format msgid "suppress_redundant_updates_trigger: must be called as trigger" msgstr "suppress_redundant_updates_trigger: måste anropas som trigger" -#: utils/adt/trigfuncs.c:48 +#: utils/adt/trigfuncs.c:47 #, c-format msgid "suppress_redundant_updates_trigger: must be called on update" msgstr "suppress_redundant_updates_trigger: måste anropas vid update" -#: utils/adt/trigfuncs.c:54 +#: utils/adt/trigfuncs.c:53 #, c-format msgid "suppress_redundant_updates_trigger: must be called before update" msgstr "suppress_redundant_updates_trigger: måste anropas innan update" -#: utils/adt/trigfuncs.c:60 +#: utils/adt/trigfuncs.c:59 #, c-format msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: måste anropas för varje rad" @@ -26105,32 +27250,32 @@ msgstr "distans i frasoperator måste vara ett heltalsvärde mellan noll och %d, msgid "no operand in tsquery: \"%s\"" msgstr "ingen operand i tsquery: \"%s\"" -#: utils/adt/tsquery.c:558 +#: utils/adt/tsquery.c:554 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "värdet är för stort i tsquery: \"%s\"" -#: utils/adt/tsquery.c:563 +#: utils/adt/tsquery.c:559 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "operanden är för lång i tsquery: \"%s\"" -#: utils/adt/tsquery.c:591 +#: utils/adt/tsquery.c:587 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "ord för långt i tsquery: \"%s\"" -#: utils/adt/tsquery.c:717 utils/adt/tsvector_parser.c:147 +#: utils/adt/tsquery.c:713 utils/adt/tsvector_parser.c:147 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "syntaxfel i tsquery: \"%s\"" -#: utils/adt/tsquery.c:883 +#: utils/adt/tsquery.c:879 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "textsökfråga innehåller inte lexem: \"%s\"" -#: utils/adt/tsquery.c:894 utils/adt/tsquery_util.c:376 +#: utils/adt/tsquery.c:890 utils/adt/tsquery_util.c:376 #, c-format msgid "tsquery is too large" msgstr "tsquery är för stor" @@ -26165,72 +27310,72 @@ msgstr "array med vikter får inte innehålla null-värden" msgid "weight out of range" msgstr "vikten är utanför giltigt intervall" -#: utils/adt/tsvector.c:217 +#: utils/adt/tsvector.c:216 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "ordet är för långt (%ld byte, max %ld byte)" -#: utils/adt/tsvector.c:224 +#: utils/adt/tsvector.c:223 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "strängen är för lång för tsvector (%ld byte, max %ld byte)" -#: utils/adt/tsvector_op.c:773 +#: utils/adt/tsvector_op.c:771 #, c-format msgid "lexeme array may not contain nulls" msgstr "lexem-array:en får inte innehålla null-värden" -#: utils/adt/tsvector_op.c:778 +#: utils/adt/tsvector_op.c:776 #, c-format msgid "lexeme array may not contain empty strings" msgstr "lexem-array:en får inte innehålla tomma strängar" -#: utils/adt/tsvector_op.c:847 +#: utils/adt/tsvector_op.c:845 #, c-format msgid "weight array may not contain nulls" msgstr "vikt-array:en får inte innehålla null-värden" -#: utils/adt/tsvector_op.c:871 +#: utils/adt/tsvector_op.c:869 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "okänd vikt: \"%c\"" -#: utils/adt/tsvector_op.c:2601 +#: utils/adt/tsvector_op.c:2599 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "ts_stat-frågan måste returnera en tsvector-kolumn" -#: utils/adt/tsvector_op.c:2790 +#: utils/adt/tsvector_op.c:2788 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "tsvector-kolumnen \"%s\" existerar inte" -#: utils/adt/tsvector_op.c:2797 +#: utils/adt/tsvector_op.c:2795 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "kolumnen \"%s\" är inte av typen tsvector" -#: utils/adt/tsvector_op.c:2809 +#: utils/adt/tsvector_op.c:2807 #, c-format msgid "configuration column \"%s\" does not exist" -msgstr "konfigurationskolumnen \"%s\" existerar inte" +msgstr "kolumnen \"%s\" för konfiguration existerar inte" -#: utils/adt/tsvector_op.c:2815 +#: utils/adt/tsvector_op.c:2813 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "kolumn \"%s\" har inte regconfig-typ" -#: utils/adt/tsvector_op.c:2822 +#: utils/adt/tsvector_op.c:2820 #, c-format msgid "configuration column \"%s\" must not be null" -msgstr "konfigurationskolumn \"%s\" får inte vara null" +msgstr "kolumn \"%s\" för konfiguration får inte vara null" -#: utils/adt/tsvector_op.c:2835 +#: utils/adt/tsvector_op.c:2833 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" -msgstr "Textsökkonfigurationsnamn \"%s\" måste vara angivet med schema" +msgstr "Konfigurationsnamn \"%s\" för textsök måste vara angivet med schema" -#: utils/adt/tsvector_op.c:2860 +#: utils/adt/tsvector_op.c:2858 #, c-format msgid "column \"%s\" is not of a character type" msgstr "kolumnen \"%s\" är inte av typen character" @@ -26250,17 +27395,17 @@ msgstr "det finns inget escape-tecken: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "fel positionsinfo i tsvector: \"%s\"" -#: utils/adt/uuid.c:413 +#: utils/adt/uuid.c:418 #, c-format msgid "could not generate random values" msgstr "kunde inte generera slumpmässiga värden" -#: utils/adt/varbit.c:110 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "längden för typ %s måste vara minst 1" -#: utils/adt/varbit.c:115 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "längden för typ %s kan inte överstiga %d" @@ -26295,9 +27440,9 @@ msgstr "ogiltig längd på extern bitsträng" msgid "bit string too long for type bit varying(%d)" msgstr "bitsträngen för lång för typen bit varying(%d)" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:908 -#: utils/adt/varlena.c:971 utils/adt/varlena.c:1128 utils/adt/varlena.c:3052 -#: utils/adt/varlena.c:3130 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 +#: utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 +#: utils/adt/varlena.c:3133 #, c-format msgid "negative substring length not allowed" msgstr "negativ substräng-läng tillåts inte" @@ -26322,337 +27467,342 @@ msgstr "kan inte XOR:a bitsträngar av olika storlek" msgid "bit index %d out of valid range (0..%d)" msgstr "bitindex %d utanför giltigt intervall (0..%d)" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3334 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 #, c-format msgid "new bit must be 0 or 1" msgstr "nya biten måste vara 0 eller 1" -#: utils/adt/varchar.c:162 utils/adt/varchar.c:313 +#: utils/adt/varchar.c:161 utils/adt/varchar.c:312 #, c-format msgid "value too long for type character(%d)" msgstr "värdet för långt för typen character (%d)" -#: utils/adt/varchar.c:476 utils/adt/varchar.c:640 +#: utils/adt/varchar.c:475 utils/adt/varchar.c:639 #, c-format msgid "value too long for type character varying(%d)" msgstr "värdet för långt för typen character varying(%d)" -#: utils/adt/varchar.c:738 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "kunde inte bestämma vilken jämförelse (collation) som skall användas för strängjämförelse" -#: utils/adt/varlena.c:1227 utils/adt/varlena.c:1806 +#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "ickedeterministiska jämförelser (collation) stöds inte för substrängsökningar" -#: utils/adt/varlena.c:3218 utils/adt/varlena.c:3285 +#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "index %d utanför giltigt intervall, 0..%d" -#: utils/adt/varlena.c:3249 utils/adt/varlena.c:3321 +#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "index %lld utanför giltigt intervall, 0..%lld" -#: utils/adt/varlena.c:4382 +#: utils/adt/varlena.c:4385 #, c-format msgid "field position must not be zero" msgstr "fältpositionen får inte vara noll" -#: utils/adt/varlena.c:5554 +#: utils/adt/varlena.c:5630 #, c-format msgid "unterminated format() type specifier" msgstr "icketerminerad typangivelse för format()" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5689 utils/adt/varlena.c:5810 +#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "För ett ensamt \"%%\" använd \"%%%%\"." -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5808 +#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "okänd typspecifierare \"%.*s\" för format()" -#: utils/adt/varlena.c:5700 utils/adt/varlena.c:5757 +#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 #, c-format msgid "too few arguments for format()" msgstr "för få argument till format()" -#: utils/adt/varlena.c:5853 utils/adt/varlena.c:6035 +#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 #, c-format msgid "number is out of range" msgstr "numret är utanför giltigt intervall" -#: utils/adt/varlena.c:5916 utils/adt/varlena.c:5944 +#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "formatet anger argument 0 men argumenten är numrerade från 1" -#: utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:6013 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "argumentposition för bredd måste avslutas med \"$\"" -#: utils/adt/varlena.c:5982 +#: utils/adt/varlena.c:6058 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "null-värden kan inte formatteras som SQL-identifierare" -#: utils/adt/varlena.c:6190 +#: utils/adt/varlena.c:6266 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "Unicode-normalisering kan bara utföras om server-kodningen är UTF8" -#: utils/adt/varlena.c:6203 +#: utils/adt/varlena.c:6279 #, c-format msgid "invalid normalization form: %s" msgstr "ogiltigt normaliseringsform: %s" -#: utils/adt/varlena.c:6406 utils/adt/varlena.c:6441 utils/adt/varlena.c:6476 +#: utils/adt/varlena.c:6324 +#, c-format +msgid "Unicode categorization can only be performed if server encoding is UTF8" +msgstr "Unicode-kategorisering kan bara utföras om server-kodningen är UTF8" + +#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 #, c-format msgid "invalid Unicode code point: %04X" msgstr "ogiltig Unicode-kodpunkt: %04X" -#: utils/adt/varlena.c:6506 +#: utils/adt/varlena.c:6641 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "Unicode-escapesekvenser måste vara \\XXXX, \\+XXXXXX, \\UXXXX eller \\UXXXXXXXX." -#: utils/adt/windowfuncs.c:442 +#: utils/adt/windowfuncs.c:443 #, c-format msgid "argument of ntile must be greater than zero" msgstr "argumentet till ntile måste vara större än noll" -#: utils/adt/windowfuncs.c:706 +#: utils/adt/windowfuncs.c:707 #, c-format msgid "argument of nth_value must be greater than zero" msgstr "argumentet till nth_value måste vara större än noll" -#: utils/adt/xid8funcs.c:125 +#: utils/adt/xid8funcs.c:120 #, c-format msgid "transaction ID %llu is in the future" msgstr "transaktions-ID %llu är från framtiden" -#: utils/adt/xid8funcs.c:547 +#: utils/adt/xid8funcs.c:522 #, c-format msgid "invalid external pg_snapshot data" msgstr "ogiltig extern pg_snapshot-data" -#: utils/adt/xml.c:228 +#: utils/adt/xml.c:238 #, c-format msgid "unsupported XML feature" msgstr "ej stödd XML-finess" -#: utils/adt/xml.c:229 +#: utils/adt/xml.c:239 #, c-format msgid "This functionality requires the server to be built with libxml support." msgstr "Denna funktionalitet kräver att servern byggts med libxml-support." -#: utils/adt/xml.c:248 utils/mb/mbutils.c:628 +#: utils/adt/xml.c:258 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "ogiltigt kodningsnamn \"%s\"" -#: utils/adt/xml.c:496 utils/adt/xml.c:501 +#: utils/adt/xml.c:506 utils/adt/xml.c:511 #, c-format msgid "invalid XML comment" msgstr "ogiltigt XML-kommentar" -#: utils/adt/xml.c:660 +#: utils/adt/xml.c:697 #, c-format msgid "not an XML document" msgstr "inget XML-dokument" -#: utils/adt/xml.c:956 utils/adt/xml.c:979 +#: utils/adt/xml.c:1008 utils/adt/xml.c:1031 #, c-format msgid "invalid XML processing instruction" msgstr "ogiltig XML-processinstruktion" -#: utils/adt/xml.c:957 +#: utils/adt/xml.c:1009 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "XML-processinstruktions målnamn kan inte vara \"%s\"." -#: utils/adt/xml.c:980 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "XML-processinstruktion kan inte innehålla \"?>\"." -#: utils/adt/xml.c:1059 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "xmlvalidate är inte implementerat" -#: utils/adt/xml.c:1115 +#: utils/adt/xml.c:1167 #, c-format msgid "could not initialize XML library" msgstr "kunde inte initiera XML-bibliotek" -#: utils/adt/xml.c:1116 +#: utils/adt/xml.c:1168 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%zu, sizeof(xmlChar)=%zu." msgstr "libxml2 har inkompatibel char-typ: sizeof(char)=%zu, sizeof(xmlChar)=%zu." -#: utils/adt/xml.c:1202 +#: utils/adt/xml.c:1254 #, c-format msgid "could not set up XML error handler" msgstr "kunde inte ställa in XML-felhanterare" -#: utils/adt/xml.c:1203 +#: 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 "Detta tyder på att libxml2-versionen som används inte är kompatibel med libxml2-header-filerna som PostgreSQL byggts med." -#: utils/adt/xml.c:2189 +#: utils/adt/xml.c:2281 msgid "Invalid character value." msgstr "Ogiltigt teckenvärde." -#: utils/adt/xml.c:2192 +#: utils/adt/xml.c:2284 msgid "Space required." msgstr "Mellanslag krävs." -#: utils/adt/xml.c:2195 +#: utils/adt/xml.c:2287 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone tillåter bara 'yes' eller 'no'." -#: utils/adt/xml.c:2198 +#: utils/adt/xml.c:2290 msgid "Malformed declaration: missing version." msgstr "Felaktig deklaration: saknar version." -#: utils/adt/xml.c:2201 +#: utils/adt/xml.c:2293 msgid "Missing encoding in text declaration." msgstr "Saknar kodning i textdeklaration." -#: utils/adt/xml.c:2204 +#: utils/adt/xml.c:2296 msgid "Parsing XML declaration: '?>' expected." msgstr "Parsar XML-deklaration: förväntade sig '?>'" -#: utils/adt/xml.c:2207 +#: utils/adt/xml.c:2299 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Okänd libxml-felkod: %d." -#: utils/adt/xml.c:2461 +#: utils/adt/xml.c:2553 #, c-format msgid "XML does not support infinite date values." msgstr "XML stöder inte oändliga datumvärden." -#: utils/adt/xml.c:2483 utils/adt/xml.c:2510 +#: utils/adt/xml.c:2575 utils/adt/xml.c:2602 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML stöder inte oändliga timestamp-värden." -#: utils/adt/xml.c:2926 +#: utils/adt/xml.c:3018 #, c-format msgid "invalid query" msgstr "ogiltig fråga" -#: utils/adt/xml.c:3018 +#: utils/adt/xml.c:3110 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "portalen \"%s\" returnerar inga tupler" -#: utils/adt/xml.c:4270 +#: utils/adt/xml.c:4362 #, c-format msgid "invalid array for XML namespace mapping" msgstr "ogiltig array till XML-namnrymdmappning" -#: utils/adt/xml.c:4271 +#: utils/adt/xml.c:4363 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Arrayen måste vara tvådimensionell där längden på andra axeln är 2." -#: utils/adt/xml.c:4295 +#: utils/adt/xml.c:4387 #, c-format msgid "empty XPath expression" msgstr "tomt XPath-uttryck" -#: utils/adt/xml.c:4347 +#: utils/adt/xml.c:4439 #, c-format msgid "neither namespace name nor URI may be null" msgstr "varken namnrymdnamn eller URI får vara null" -#: utils/adt/xml.c:4354 +#: utils/adt/xml.c:4446 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "kunde inte registrera XML-namnrymd med namn \"%s\" och URL \"%s\"" -#: utils/adt/xml.c:4697 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "namnrymden DEFAULT stöds inte" -#: utils/adt/xml.c:4726 +#: utils/adt/xml.c:4824 #, c-format msgid "row path filter must not be empty string" msgstr "sökvägsfilter för rad får inte vara tomma strängen" -#: utils/adt/xml.c:4757 +#: utils/adt/xml.c:4858 #, c-format msgid "column path filter must not be empty string" msgstr "sokvägsfilter för kolumn får inte vara tomma strängen" -#: utils/adt/xml.c:4901 +#: utils/adt/xml.c:5005 #, c-format msgid "more than one value returned by column XPath expression" msgstr "mer än ett värde returnerades från kolumns XPath-uttryck" -#: utils/cache/lsyscache.c:1043 +#: utils/cache/lsyscache.c:1017 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "typomvandling från typ %s till typ %s finns inte" -#: utils/cache/lsyscache.c:2845 utils/cache/lsyscache.c:2878 -#: utils/cache/lsyscache.c:2911 utils/cache/lsyscache.c:2944 +#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 +#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 #, c-format msgid "type %s is only a shell" msgstr "typ %s är bara en shell-typ" -#: utils/cache/lsyscache.c:2850 +#: utils/cache/lsyscache.c:2892 #, c-format msgid "no input function available for type %s" msgstr "ingen inläsningsfunktion finns för typ %s" -#: utils/cache/lsyscache.c:2883 +#: utils/cache/lsyscache.c:2925 #, c-format msgid "no output function available for type %s" msgstr "ingen utmatningsfunktion finns för typ %s" -#: utils/cache/partcache.c:219 +#: utils/cache/partcache.c:216 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "operatorklass \"%s\" för accessmetod %s saknar supportfunktion %d för typ %s" -#: utils/cache/plancache.c:724 +#: utils/cache/plancache.c:747 #, c-format msgid "cached plan must not change result type" msgstr "cache:ad plan får inte ändra resultattyp" -#: utils/cache/relcache.c:3741 +#: utils/cache/relcache.c:3801 #, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" msgstr "relfile-nummer för heap är inte satt i binärt uppgraderingsläge" -#: utils/cache/relcache.c:3749 +#: utils/cache/relcache.c:3809 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "oväntad begäran av nytt relfile-nummer i binärt uppgraderingsläge" -#: utils/cache/relcache.c:6495 +#: utils/cache/relcache.c:6539 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "kunde inte skapa initieringsfil \"%s\" för relations-cache: %m" -#: utils/cache/relcache.c:6497 +#: utils/cache/relcache.c:6541 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Fortsätter ändå, trots att något är fel." -#: utils/cache/relcache.c:6819 +#: utils/cache/relcache.c:6871 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "kunde inte ta bort cache-fil \"%s\": %m" @@ -26662,17 +27812,17 @@ msgstr "kunde inte ta bort cache-fil \"%s\": %m" msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "kan inte göra PREPARE på en transaktion som ändrat relationsmappningen" -#: utils/cache/relmapper.c:850 +#: utils/cache/relmapper.c:852 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "relationsmappningsfilen \"%s\" innehåller ogiltig data" -#: utils/cache/relmapper.c:860 +#: utils/cache/relmapper.c:862 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "relationsmappningsfilen \"%s\" innehåller en felaktig checksumma" -#: utils/cache/typcache.c:1809 utils/fmgr/funcapi.c:566 +#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "posttypen har inte registrerats" @@ -26687,102 +27837,102 @@ msgstr "TRAP: ExceptionalCondition: fel argument i PID %d\n" msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" msgstr "TRAP: misslyckad Assert(\"%s\"), Fil: \"%s\", Rad: %d, PID: %d)\n" -#: utils/error/elog.c:416 +#: utils/error/elog.c:415 #, c-format msgid "error occurred before error message processing is available\n" msgstr "fel uppstod innan processning av felmeddelande är tillgängligt\n" -#: utils/error/elog.c:2092 +#: utils/error/elog.c:2134 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "kunde inte återöppna filen \"%s\" som stderr: %m" -#: utils/error/elog.c:2105 +#: utils/error/elog.c:2147 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "kunde inte återöppna filen \"%s\" som stdout: %m" -#: utils/error/elog.c:2141 +#: utils/error/elog.c:2183 #, c-format -msgid "invalid character" -msgstr "ogiltigt tecken" +msgid "Invalid character" +msgstr "Ogiltigt tecken" -#: utils/error/elog.c:2847 utils/error/elog.c:2874 utils/error/elog.c:2890 +#: utils/error/elog.c:2889 utils/error/elog.c:2916 utils/error/elog.c:2932 msgid "[unknown]" msgstr "[okänd]" -#: utils/error/elog.c:3163 utils/error/elog.c:3484 utils/error/elog.c:3591 +#: utils/error/elog.c:3202 utils/error/elog.c:3526 utils/error/elog.c:3633 msgid "missing error text" msgstr "saknar feltext" -#: utils/error/elog.c:3166 utils/error/elog.c:3169 +#: utils/error/elog.c:3205 utils/error/elog.c:3208 #, c-format msgid " at character %d" msgstr " vid tecken %d" -#: utils/error/elog.c:3179 utils/error/elog.c:3186 +#: utils/error/elog.c:3218 utils/error/elog.c:3225 msgid "DETAIL: " msgstr "DETALJ: " -#: utils/error/elog.c:3193 +#: utils/error/elog.c:3232 msgid "HINT: " msgstr "TIPS: " -#: utils/error/elog.c:3200 +#: utils/error/elog.c:3239 msgid "QUERY: " msgstr "FRÅGA: " -#: utils/error/elog.c:3207 +#: utils/error/elog.c:3246 msgid "CONTEXT: " msgstr "KONTEXT: " -#: utils/error/elog.c:3217 +#: utils/error/elog.c:3256 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "PLATS: %s, %s:%d\n" -#: utils/error/elog.c:3224 +#: utils/error/elog.c:3263 #, c-format msgid "LOCATION: %s:%d\n" msgstr "PLATS: %s:%d\n" -#: utils/error/elog.c:3231 +#: utils/error/elog.c:3270 msgid "BACKTRACE: " msgstr "BACKTRACE: " -#: utils/error/elog.c:3243 +#: utils/error/elog.c:3282 msgid "STATEMENT: " msgstr "SATS: " -#: utils/error/elog.c:3636 +#: utils/error/elog.c:3678 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3640 +#: utils/error/elog.c:3682 msgid "LOG" msgstr "LOGG" -#: utils/error/elog.c:3643 +#: utils/error/elog.c:3685 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3646 +#: utils/error/elog.c:3688 msgid "NOTICE" msgstr "NOTIS" -#: utils/error/elog.c:3650 +#: utils/error/elog.c:3692 msgid "WARNING" msgstr "VARNING" -#: utils/error/elog.c:3653 +#: utils/error/elog.c:3695 msgid "ERROR" msgstr "FEL" -#: utils/error/elog.c:3656 +#: utils/error/elog.c:3698 msgid "FATAL" msgstr "FATALT" -#: utils/error/elog.c:3659 +#: utils/error/elog.c:3701 msgid "PANIC" msgstr "PANIK" @@ -26855,22 +28005,22 @@ msgstr "Magiskt block har oväntad längd eller annan paddning." msgid "incompatible library \"%s\": magic block mismatch" msgstr "inkompatibelt bibliotek \"%s\": magiskt block matchar inte" -#: utils/fmgr/dfmgr.c:492 +#: utils/fmgr/dfmgr.c:475 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "åtkomst till biblioteket \"%s\" tillåts inte" -#: utils/fmgr/dfmgr.c:518 +#: utils/fmgr/dfmgr.c:501 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "ogiltigt macro-namn i dynamisk biblioteksökväg: %s" -#: utils/fmgr/dfmgr.c:558 +#: utils/fmgr/dfmgr.c:541 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "komponent med längden noll i parameter \"dynamic_library_path\"" -#: utils/fmgr/dfmgr.c:577 +#: utils/fmgr/dfmgr.c:560 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "komponent som inte är en absolut sökväg i parameter \"dynamic_library_path\"" @@ -26895,223 +28045,213 @@ msgstr "SQL-anropbara funktioner kräver en medföljande PG_FUNCTION_INFO_V1(fun msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "okänd API-version %d rapporterad av infofunktion \"%s\"" -#: utils/fmgr/fmgr.c:2080 +#: utils/fmgr/fmgr.c:2109 #, c-format msgid "operator class options info is absent in function call context" msgstr "info om operatorklassflaggor saknas i funktionens anropskontext" -#: utils/fmgr/fmgr.c:2147 +#: utils/fmgr/fmgr.c:2176 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "språkvalideringsfunktion %u anropad för språk %u istället för %u" -#: utils/fmgr/funcapi.c:489 +#: utils/fmgr/funcapi.c:496 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "kunde inte bestämma resultattyp för funktion \"%s\" som deklarerats att returnera typ %s" -#: utils/fmgr/funcapi.c:634 +#: utils/fmgr/funcapi.c:642 #, c-format msgid "argument declared %s does not contain a range type but type %s" msgstr "argumentet deklarerad %s innehåller inte en range-typ utan typ %s" -#: utils/fmgr/funcapi.c:717 -#, c-format -msgid "could not find multirange type for data type %s" -msgstr "kunde inte hitta multirange-typ för datatyp %s" - -#: utils/fmgr/funcapi.c:1921 utils/fmgr/funcapi.c:1953 +#: utils/fmgr/funcapi.c:1929 utils/fmgr/funcapi.c:1961 #, c-format msgid "number of aliases does not match number of columns" msgstr "antalet alias matchar inte antalet kolumner" -#: utils/fmgr/funcapi.c:1947 +#: utils/fmgr/funcapi.c:1955 #, c-format msgid "no column alias was provided" msgstr "inget kolumnalias angivet" -#: utils/fmgr/funcapi.c:1971 +#: utils/fmgr/funcapi.c:1979 #, c-format msgid "could not determine row description for function returning record" msgstr "kunde inte få radbeskrivning för funktion som returnerar en record" -#: utils/init/miscinit.c:347 +#: utils/init/miscinit.c:353 #, c-format msgid "data directory \"%s\" does not exist" msgstr "databaskatalogen \"%s\" existerar inte" -#: utils/init/miscinit.c:352 +#: utils/init/miscinit.c:358 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "kunde inte läsa rättigheter på katalog \"%s\": %m" -#: utils/init/miscinit.c:360 +#: utils/init/miscinit.c:366 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "angiven datakatalog \"%s\" är inte en katalog" -#: utils/init/miscinit.c:376 +#: utils/init/miscinit.c:382 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "datakatalogen \"%s\" har fel ägare" -#: utils/init/miscinit.c:378 +#: utils/init/miscinit.c:384 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "Servern måste startas av den användare som äger datakatalogen." -#: utils/init/miscinit.c:396 +#: utils/init/miscinit.c:402 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "datakatalogen \"%s\" har felaktiga rättigheter" -#: utils/init/miscinit.c:398 +#: utils/init/miscinit.c:404 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Rättigheterna skall vara u=rwx (0700) eller u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:456 +#: utils/init/miscinit.c:462 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "kunde inte byta katalog till \"%s\": %m" -#: utils/init/miscinit.c:693 utils/misc/guc.c:3548 +#: utils/init/miscinit.c:720 utils/misc/guc.c:3650 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "kan inte sätta parameter \"%s\" från en säkerhetsbegränsad operation" -#: utils/init/miscinit.c:765 +#: utils/init/miscinit.c:807 #, c-format msgid "role with OID %u does not exist" msgstr "roll med OID %u existerar inte" -#: utils/init/miscinit.c:795 +#: utils/init/miscinit.c:853 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "roll \"%s\" tillåts inte logga in" -#: utils/init/miscinit.c:813 +#: utils/init/miscinit.c:874 #, c-format msgid "too many connections for role \"%s\"" msgstr "för många uppkopplingar för roll \"%s\"" -#: utils/init/miscinit.c:912 -#, c-format -msgid "permission denied to set session authorization" -msgstr "rättighet saknas för att sätta sessionsauktorisation" - -#: utils/init/miscinit.c:995 +#: utils/init/miscinit.c:1045 #, c-format msgid "invalid role OID: %u" msgstr "ogiltigt roll-OID: %u" -#: utils/init/miscinit.c:1142 +#: utils/init/miscinit.c:1192 #, c-format msgid "database system is shut down" msgstr "databassystemet är nedstängt" -#: utils/init/miscinit.c:1229 +#: utils/init/miscinit.c:1279 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "kan inte skapa låsfil \"%s\": %m" -#: utils/init/miscinit.c:1243 +#: utils/init/miscinit.c:1293 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "kunde inte öppna låsfil \"%s\": %m" -#: utils/init/miscinit.c:1250 +#: utils/init/miscinit.c:1300 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "kunde inte läsa låsfil \"%s\": %m" -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1309 #, c-format msgid "lock file \"%s\" is empty" msgstr "låsfilen \"%s\" är tom" -#: utils/init/miscinit.c:1260 +#: 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 "Antingen startar en annan server eller så är låsfilen kvar från en tidigare serverkrash vid uppstart." -#: utils/init/miscinit.c:1304 +#: utils/init/miscinit.c:1354 #, c-format msgid "lock file \"%s\" already exists" msgstr "låsfil med namn \"%s\" finns redan" -#: utils/init/miscinit.c:1308 +#: utils/init/miscinit.c:1358 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Kör en annan postgres (PID %d) i datakatalogen \"%s\"?" -#: utils/init/miscinit.c:1310 +#: utils/init/miscinit.c:1360 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "Kör en annan postmaster (PID %d) i datakatalogen \"%s\"?" -#: utils/init/miscinit.c:1313 +#: utils/init/miscinit.c:1363 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Använder en annan postgres (PID %d) uttagesfilen (socket) \"%s\"?" -#: utils/init/miscinit.c:1315 +#: utils/init/miscinit.c:1365 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Använder en annan postmaster (PID %d) uttagesfilen (socket) \"%s\"?" -#: utils/init/miscinit.c:1366 +#: utils/init/miscinit.c:1416 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "kunde inte ta bort gammal låsfil \"%s\": %m" -#: utils/init/miscinit.c:1368 +#: 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 "Filen verkar ha lämnats kvar av misstag, men kan inte tas bort. Ta bort den för hand och försök igen.>" -#: utils/init/miscinit.c:1405 utils/init/miscinit.c:1419 -#: utils/init/miscinit.c:1430 +#: 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 "kunde inte skriva låsfil \"%s\": %m" -#: utils/init/miscinit.c:1541 utils/init/miscinit.c:1683 utils/misc/guc.c:5580 +#: 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 "kunde inte läsa från fil \"%s\": %m" -#: utils/init/miscinit.c:1671 +#: utils/init/miscinit.c:1721 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "kunde inte öppna fil \"%s\": %m: fortsätter ändå" -#: utils/init/miscinit.c:1696 +#: utils/init/miscinit.c:1746 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "låsfil \"%s\" innehåller fel PID: %ld istället för %ld" -#: utils/init/miscinit.c:1735 utils/init/miscinit.c:1751 +#: utils/init/miscinit.c:1785 utils/init/miscinit.c:1801 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" är inte en giltigt datakatalog" -#: utils/init/miscinit.c:1737 +#: utils/init/miscinit.c:1787 #, c-format msgid "File \"%s\" is missing." msgstr "Filen \"%s\" saknas." -#: utils/init/miscinit.c:1753 +#: utils/init/miscinit.c:1803 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Filen \"%s\" innehåller inte giltig data." -#: utils/init/miscinit.c:1755 +#: utils/init/miscinit.c:1805 #, c-format msgid "You might need to initdb." msgstr "Du kan behöva köra initdb." -#: utils/init/miscinit.c:1763 +#: 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 "Datakatalogen har skapats av PostgreSQL version %s, som inte är kompatibel med version %s." @@ -27188,97 +28328,97 @@ msgstr "rättighet saknas för databas \"%s\"" msgid "User does not have CONNECT privilege." msgstr "Användaren har inte rättigheten CONNECT." -#: utils/init/postinit.c:386 +#: utils/init/postinit.c:389 #, c-format msgid "too many connections for database \"%s\"" msgstr "för många uppkopplingar till databasen \"%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 "databaslokalen är inkompatibel med operativsystemet" -#: 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 "Databasen initierades med LC_COLLATE \"%s\" vilket inte känns igen av 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 "Återskapa databasen med en annan lokal eller installera den saknade lokalen." -#: 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 "Databasen initierades med LC_CTYPE \"%s\", vilket inte känns igen av setlocale()." -#: utils/init/postinit.c:475 +#: utils/init/postinit.c:493 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "databasen \"%s\" har en jämförelse (collation) vars version som inte matchar" -#: utils/init/postinit.c:477 +#: utils/init/postinit.c:495 #, c-format msgid "The database was created using collation version %s, but the operating system provides version %s." msgstr "Databasen skapades med jämförelseversion %s men operativsystemet tillhandahåller version %s." -#: utils/init/postinit.c:480 +#: 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 "Bygg om alla objekt i denna databas som använder standardjämförelse (collation) och kör ALTER DATABASE %s REFRESH COLLATION VERSION eller bygg PostgreSQL med rätt bibliotekversion." -#: utils/init/postinit.c:891 +#: utils/init/postinit.c:904 #, c-format msgid "no roles are defined in this database system" msgstr "inga roller är definierade i detta databassystem" -#: utils/init/postinit.c:892 +#: utils/init/postinit.c:905 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Du borde direkt köra CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:928 +#: utils/init/postinit.c:942 #, c-format msgid "must be superuser to connect in binary upgrade mode" -msgstr "måste vara superuser för att ansluta i binärt uppgraderingsläger" +msgstr "måste vara superuser för att ansluta i binärt uppgraderingsläge" -#: utils/init/postinit.c:949 +#: utils/init/postinit.c:962 #, c-format msgid "remaining connection slots are reserved for roles with the %s attribute" msgstr "resterande anslutningsslottar är reserverade för roller med attributet %s" -#: utils/init/postinit.c:955 +#: utils/init/postinit.c:968 #, c-format msgid "remaining connection slots are reserved for roles with privileges of the \"%s\" role" msgstr "resterande anslutningsslottar är reserverade för roller med rättigheter från rollen \"%s\"" -#: utils/init/postinit.c:967 +#: utils/init/postinit.c:980 #, c-format msgid "permission denied to start WAL sender" msgstr "rättighet saknas för att starta WAL-skickare" -#: utils/init/postinit.c:968 +#: utils/init/postinit.c:981 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." msgstr "Bara roller med attributet %s får starta en process för WAL-skickande." -#: utils/init/postinit.c:1086 +#: utils/init/postinit.c:1099 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Det verkar precis ha tagits bort eller döpts om." -#: utils/init/postinit.c:1090 +#: utils/init/postinit.c:1103 #, c-format msgid "database %u does not exist" msgstr "databasen %u existerar inte" -#: utils/init/postinit.c:1099 +#: utils/init/postinit.c:1112 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "kan inte ansluta till ogiltig databas \"%s\"" -#: utils/init/postinit.c:1159 +#: utils/init/postinit.c:1173 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Databasens underbibliotek \"%s\" saknas." @@ -27305,53 +28445,48 @@ msgstr "oväntat kodnings-ID %d för ISO 8859-teckenuppsättningarna" msgid "unexpected encoding ID %d for WIN character sets" msgstr "oväntat kodnings-ID %d för WIN-teckenuppsättningarna" -#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "konvertering mellan %s och %s stöds inte" -#: utils/mb/mbutils.c:386 -#, c-format -msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" -msgstr "standardkonverteringsfunktion för kodning \"%s\" till \"%s\" finns inte" - -#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 -#: utils/mb/mbutils.c:843 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Sträng på %d byte är för lång för kodningskonvertering." -#: utils/mb/mbutils.c:569 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "ogiltigt källkodningsnamn \"%s\"" -#: utils/mb/mbutils.c:574 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "ogiltigt målkodningsnamn \"%s\"" -#: utils/mb/mbutils.c:714 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "ogiltigt byte-sekvens för kodning \"%s\": 0x%02x\"" -#: utils/mb/mbutils.c:878 +#: utils/mb/mbutils.c:877 #, c-format msgid "invalid Unicode code point" msgstr "ogiltig Unicode-kodpunkt" -#: utils/mb/mbutils.c:1204 +#: utils/mb/mbutils.c:1201 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset misslyckades" -#: utils/mb/mbutils.c:1725 +#: utils/mb/mbutils.c:1718 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "ogiltigt byte-sekvens för kodning \"%s\": %s" -#: utils/mb/mbutils.c:1758 +#: utils/mb/mbutils.c:1751 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "tecken med byte-sekvens %s i kodning \"%s\" har inget motsvarande i kodning \"%s\"" @@ -27366,82 +28501,82 @@ msgstr "konfigurationskatalogens namn är tomt: \"%s\"" msgid "could not open configuration directory \"%s\": %m" msgstr "kunde inte öppna konfigureringskatalog \"%s\": %m" -#: utils/misc/guc.c:115 +#: utils/misc/guc.c:122 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Giltiga enheter för denna parameter är \"B\", \"kB\", \"MB\", \"GB\" och \"TB\"." -#: utils/misc/guc.c:152 +#: utils/misc/guc.c:159 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Giltiga enheter för denna parameter är \"us\", \"ms\", \"s\", \"min\", \"h\" och \"d\"." -#: utils/misc/guc.c:421 +#: utils/misc/guc.c:430 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "okänd konfigurationsparameter \"%s\" i fil \"%s\" rad %d" -#: utils/misc/guc.c:461 utils/misc/guc.c:3406 utils/misc/guc.c:3646 -#: utils/misc/guc.c:3744 utils/misc/guc.c:3842 utils/misc/guc.c:3966 -#: utils/misc/guc.c:4069 +#: 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 "parameter \"%s\" kan inte ändras utan att starta om servern" -#: utils/misc/guc.c:497 +#: utils/misc/guc.c:506 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "parameter \"%s\" borttagen från konfigurationsfil, återställs till standard" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:571 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "parameter \"%s\" ändrad till \"%s\"" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:613 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "konfigurationsfil \"%s\" innehåller fel" -#: utils/misc/guc.c:609 +#: utils/misc/guc.c:618 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "konfigurationsfil \"%s\" innehåller fel; opåverkade ändringar har utförts" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:623 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "konfigurationsfil \"%s\" innehåller fel; inga ändringar har utförts" -#: utils/misc/guc.c:1211 utils/misc/guc.c:1227 +#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "ogiltig konfigurationsparameter \"%s\"" -#: utils/misc/guc.c:1213 +#: utils/misc/guc.c:1141 #, c-format msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "Egenskapade parameternamn måste vara två eller fler enkla identifierare separerade med punkter." -#: utils/misc/guc.c:1229 +#: utils/misc/guc.c:1157 #, c-format msgid "\"%s\" is a reserved prefix." msgstr "\"%s\" är ett reserverat prefix." -#: utils/misc/guc.c:1243 +#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "okänd konfigurationsparameter \"%s\"" -#: utils/misc/guc.c:1765 +#: utils/misc/guc.c:1802 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: kunde inte komma åt katalogen \"%s\": %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: kunde inte komma åt katalogen \"%s\": %m\n" -#: utils/misc/guc.c:1770 +#: utils/misc/guc.c:1806 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Kör initdb eller pg_basebackup för att initiera en PostgreSQL-datakatalog.\n" -#: utils/misc/guc.c:1794 +#: utils/misc/guc.c:1830 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -27450,12 +28585,12 @@ msgstr "" "%s vet inte var servens konfigurationsfil är.\n" "Du måste ange flaggan --config-file eller -D alternativt sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:1817 +#: utils/misc/guc.c:1853 #, c-format -msgid "%s: could not access the server configuration file \"%s\": %s\n" -msgstr "%s: har inte åtkomst till serverns konfigureringsfil \"%s\": %s\n" +msgid "%s: could not access the server configuration file \"%s\": %m\n" +msgstr "%s: ingen åtkomst till serverns konfigureringsfil \"%s\": %m\n" -#: utils/misc/guc.c:1845 +#: utils/misc/guc.c:1881 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27464,7 +28599,7 @@ msgstr "" "%s vet inte var databasens systemdata är.\n" "Det kan anges med \"data_directory\" i \"%s\" eller med flaggan -D alternativt genom att sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1933 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -27473,7 +28608,7 @@ msgstr "" "%s vet inte var \"hba\"-konfigurationsfilen är.\n" "Detta kan anges som \"hba_file\" i \"%s\" eller med flaggan -D alternativt genom att sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:1928 +#: utils/misc/guc.c:1964 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -27482,121 +28617,131 @@ msgstr "" "%s vet inte var \"ident\"-konfigurationsfilen är.\n" "Detta kan anges som \"ident_file\" i \"%s\" eller med flaggan -D alternativt genom att sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:2894 +#: utils/misc/guc.c:2943 msgid "Value exceeds integer range." msgstr "Värde överskriver heltalsintervall." -#: utils/misc/guc.c:3130 +#: utils/misc/guc.c:3185 #, c-format -msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" -msgstr "%d%s%s är utanför giltigt intervall för parameter \"%s\" (%d .. %d)" +msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" +msgstr "%d%s%s är utanför giltigt intervall för parameter \"%s\" (%d%s%s .. %d%s%s)" -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3226 #, c-format -msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" -msgstr "%g%s%s är utanför giltigt intervall för parameter \"%s\" (%g .. %g)" +msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g%s%s .. %g%s%s)" +msgstr "%g%s%s är utanför giltigt intervall för parameter \"%s\" (%g%s%s .. %g%s%s)" -#: utils/misc/guc.c:3366 utils/misc/guc_funcs.c:54 +#: utils/misc/guc.c:3465 #, c-format -msgid "cannot set parameters during a parallel operation" -msgstr "kan inte sätta parametrar under en parallell operation" +msgid "parameter \"%s\" cannot be set during a parallel operation" +msgstr "parameter \"%s\" can inte sättas under en parallell operation" -#: utils/misc/guc.c:3383 utils/misc/guc.c:4530 +#: utils/misc/guc.c:3481 utils/misc/guc.c:4696 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "parameter \"%s\" kan inte ändras" -#: utils/misc/guc.c:3416 +#: utils/misc/guc.c:3514 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "parameter \"%s\" kan inte ändras nu" -#: utils/misc/guc.c:3443 utils/misc/guc.c:3501 utils/misc/guc.c:4506 -#: utils/misc/guc.c:6546 +#: 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 "rättighet saknas för att sätta parameter \"%s\"" -#: utils/misc/guc.c:3481 +#: utils/misc/guc.c:3583 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "parameter \"%s\" kan inte ändras efter uppkopplingen startats" -#: utils/misc/guc.c:3540 +#: utils/misc/guc.c:3642 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "kan inte sätta parameter \"%s\" inom en security-definer-funktion" -#: utils/misc/guc.c:3561 +#: utils/misc/guc.c:3663 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "parametern \"%s\" kunde inte återställas" -#: utils/misc/guc.c:3568 +#: utils/misc/guc.c:3670 #, c-format msgid "parameter \"%s\" cannot be set locally in functions" msgstr "parametern \"%s\" kan inte ändras lokalt i funktioner" -#: utils/misc/guc.c:4212 utils/misc/guc.c:4259 utils/misc/guc.c:5266 +#: utils/misc/guc.c:4370 utils/misc/guc.c:4418 utils/misc/guc.c:5450 #, c-format msgid "permission denied to examine \"%s\"" msgstr "rättighet saknas för att se \"%s\"" -#: utils/misc/guc.c:4213 utils/misc/guc.c:4260 utils/misc/guc.c:5267 +#: 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 "Bara roller med rättigheter från rollen \"%s\" får se denna parameter." -#: utils/misc/guc.c:4496 +#: utils/misc/guc.c:4629 +#, c-format +msgid "ALTER SYSTEM is not allowed in this environment" +msgstr "ALTER SYSTEM tillåts inte i denna miljö" + +#: utils/misc/guc.c:4661 #, c-format msgid "permission denied to perform ALTER SYSTEM RESET ALL" msgstr "rättighet saknas för att utföra ALTER SYSTEM RESET ALL" -#: utils/misc/guc.c:4562 +#: utils/misc/guc.c:4740 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "parametervärde till ALTER SYSTEM kan inte innehålla nyradstecken" -#: utils/misc/guc.c:4608 +#: utils/misc/guc.c:4785 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "kunde inte parsa innehållet i fil \"%s\"" -#: utils/misc/guc.c:4790 +#: utils/misc/guc.c:4967 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "försök att omdefiniera parameter \"%s\"" -#: utils/misc/guc.c:5129 +#: utils/misc/guc.c:5306 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "ogiltigt konfigurationsparameternamn \"%s\", tas bort" -#: utils/misc/guc.c:5131 +#: utils/misc/guc.c:5308 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "\"%s\" är nu ett reserverat prefix." -#: utils/misc/guc.c:6000 +#: utils/misc/guc.c:6179 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "vid sättande av parameter \"%s\" till \"%s\"" -#: utils/misc/guc.c:6169 +#: utils/misc/guc.c:6348 #, c-format msgid "parameter \"%s\" could not be set" msgstr "parameter \"%s\" kunde inte sättas" -#: utils/misc/guc.c:6259 +#: utils/misc/guc.c:6438 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "kunde inte tolka inställningen för parameter \"%s\"" -#: utils/misc/guc.c:6678 +#: utils/misc/guc.c:6888 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ogiltigt värde för parameter \"%s\": %g" +#: utils/misc/guc_funcs.c:54 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "kan inte sätta parametrar under en parallell operation" + #: utils/misc/guc_funcs.c:130 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" @@ -27612,59 +28757,59 @@ msgstr "SET %s tar bara ett argument" msgid "SET requires parameter name" msgstr "SET kräver ett parameternamn" -#: utils/misc/guc_tables.c:662 +#: utils/misc/guc_tables.c:676 msgid "Ungrouped" msgstr "Ej grupperad" -#: utils/misc/guc_tables.c:664 +#: utils/misc/guc_tables.c:677 msgid "File Locations" msgstr "Filplatser" -#: utils/misc/guc_tables.c:666 +#: utils/misc/guc_tables.c:678 msgid "Connections and Authentication / Connection Settings" msgstr "Uppkopplingar och Autentisering / Uppkopplingsinställningar" -#: utils/misc/guc_tables.c:668 +#: utils/misc/guc_tables.c:679 msgid "Connections and Authentication / TCP Settings" msgstr "Uppkopplingar och Autentisering / TCP-inställningar" -#: utils/misc/guc_tables.c:670 +#: utils/misc/guc_tables.c:680 msgid "Connections and Authentication / Authentication" msgstr "Uppkopplingar och Autentisering / Autentisering" -#: utils/misc/guc_tables.c:672 +#: utils/misc/guc_tables.c:681 msgid "Connections and Authentication / SSL" msgstr "Uppkopplingar och Autentisering / SSL" -#: utils/misc/guc_tables.c:674 +#: utils/misc/guc_tables.c:682 msgid "Resource Usage / Memory" msgstr "Resursanvändning / Minne" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:683 msgid "Resource Usage / Disk" msgstr "Resursanvändning / Disk" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:684 msgid "Resource Usage / Kernel Resources" msgstr "Resursanvändning / Kärnresurser" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:685 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Resursanvändning / Kostnadsbaserad Vacuum-fördröjning" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:686 msgid "Resource Usage / Background Writer" msgstr "Resursanvändning / Bakgrundskrivare" -#: utils/misc/guc_tables.c:684 +#: utils/misc/guc_tables.c:687 msgid "Resource Usage / Asynchronous Behavior" msgstr "Resursanvändning / Asynkront beteende" -#: utils/misc/guc_tables.c:686 +#: utils/misc/guc_tables.c:688 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Inställningar" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:689 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Checkpoint:er" @@ -27672,458 +28817,474 @@ msgstr "Write-Ahead Log / Checkpoint:er" msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Arkivering" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:691 msgid "Write-Ahead Log / Recovery" msgstr "Write-Ahead Log / Återställning" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:692 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Återställning från arkiv" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:693 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Återställningsmål" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:694 +msgid "Write-Ahead Log / Summarization" +msgstr "Write-Ahead Log / Summering" + +#: utils/misc/guc_tables.c:695 msgid "Replication / Sending Servers" msgstr "Replilering / Skickande servrar" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:696 msgid "Replication / Primary Server" msgstr "Replikering / Primärserver" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:697 msgid "Replication / Standby Servers" msgstr "Replikering / Standby-servrar" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:698 msgid "Replication / Subscribers" msgstr "Replikering / Prenumeranter" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:699 msgid "Query Tuning / Planner Method Configuration" msgstr "Frågeoptimering / Planeringsmetodinställningar" -#: utils/misc/guc_tables.c:708 +#: utils/misc/guc_tables.c:700 msgid "Query Tuning / Planner Cost Constants" msgstr "Frågeoptimering / Plannerarens kostnadskonstanter" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:701 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Frågeoptimering / Genetisk frågeoptimerare" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:702 msgid "Query Tuning / Other Planner Options" msgstr "Frågeoptimering / Andra planeringsinställningar" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:703 msgid "Reporting and Logging / Where to Log" msgstr "Rapportering och loggning / Logga var?" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:704 msgid "Reporting and Logging / When to Log" msgstr "Rapportering och loggning / Logga när?" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:705 msgid "Reporting and Logging / What to Log" msgstr "Rapportering och loggning / Logga vad?" -#: utils/misc/guc_tables.c:720 +#: utils/misc/guc_tables.c:706 msgid "Reporting and Logging / Process Title" msgstr "Rapportering och loggning / Processtitel" -#: utils/misc/guc_tables.c:722 +#: utils/misc/guc_tables.c:707 msgid "Statistics / Monitoring" msgstr "Statistik / Övervakning" -#: utils/misc/guc_tables.c:724 +#: utils/misc/guc_tables.c:708 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "Statistik / Ihopsamlad fråge- och index-statistik" -#: utils/misc/guc_tables.c:726 +#: utils/misc/guc_tables.c:709 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc_tables.c:728 +#: utils/misc/guc_tables.c:710 msgid "Client Connection Defaults / Statement Behavior" msgstr "Standard för klientanslutning / Satsbeteende" -#: utils/misc/guc_tables.c:730 +#: utils/misc/guc_tables.c:711 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Standard för klientanslutning / Lokal och formattering" -#: utils/misc/guc_tables.c:732 +#: utils/misc/guc_tables.c:712 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Standard för klientanslutning / Förladdning av delat bibliotek" -#: utils/misc/guc_tables.c:734 +#: utils/misc/guc_tables.c:713 msgid "Client Connection Defaults / Other Defaults" msgstr "Standard för klientanslutning / Övriga standardvärden" -#: utils/misc/guc_tables.c:736 +#: utils/misc/guc_tables.c:714 msgid "Lock Management" msgstr "Låshantering" -#: utils/misc/guc_tables.c:738 +#: utils/misc/guc_tables.c:715 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Version och plattformskompabilitet / Tidigare PostrgreSQL-versioner" -#: utils/misc/guc_tables.c:740 +#: utils/misc/guc_tables.c:716 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Version och plattformskompabilitet / Andra plattformar och klienter" -#: utils/misc/guc_tables.c:742 +#: utils/misc/guc_tables.c:717 msgid "Error Handling" msgstr "Felhantering" -#: utils/misc/guc_tables.c:744 +#: utils/misc/guc_tables.c:718 msgid "Preset Options" msgstr "Förinställningsflaggor" -#: utils/misc/guc_tables.c:746 +#: utils/misc/guc_tables.c:719 msgid "Customized Options" msgstr "Ändrade flaggor" -#: utils/misc/guc_tables.c:748 +#: utils/misc/guc_tables.c:720 msgid "Developer Options" msgstr "Utvecklarflaggor" -#: utils/misc/guc_tables.c:805 +#: utils/misc/guc_tables.c:775 msgid "Enables the planner's use of sequential-scan plans." msgstr "Aktiverar planerarens användning av planer med sekvensiell skanning." -#: utils/misc/guc_tables.c:815 +#: utils/misc/guc_tables.c:785 msgid "Enables the planner's use of index-scan plans." msgstr "Aktiverar planerarens användning av planer med indexskanning." -#: utils/misc/guc_tables.c:825 +#: utils/misc/guc_tables.c:795 msgid "Enables the planner's use of index-only-scan plans." msgstr "Aktiverar planerarens användning av planer med skanning av enbart index." -#: utils/misc/guc_tables.c:835 +#: utils/misc/guc_tables.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Aktiverar planerarens användning av planer med bitmapskanning." -#: utils/misc/guc_tables.c:845 +#: utils/misc/guc_tables.c:815 msgid "Enables the planner's use of TID scan plans." msgstr "Aktiverar planerarens användning av planer med TID-skanning." -#: utils/misc/guc_tables.c:855 +#: utils/misc/guc_tables.c:825 msgid "Enables the planner's use of explicit sort steps." msgstr "Slår på planerarens användning av explicita sorteringssteg." -#: utils/misc/guc_tables.c:865 +#: utils/misc/guc_tables.c:835 msgid "Enables the planner's use of incremental sort steps." msgstr "Aktiverar planerarens användning av inkrementella sorteringssteg." -#: utils/misc/guc_tables.c:875 +#: utils/misc/guc_tables.c:845 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Aktiverar planerarens användning av planer med hash-aggregering" -#: utils/misc/guc_tables.c:885 +#: utils/misc/guc_tables.c:855 msgid "Enables the planner's use of materialization." msgstr "Aktiverar planerarens användning av materialisering." -#: utils/misc/guc_tables.c:895 +#: utils/misc/guc_tables.c:865 msgid "Enables the planner's use of memoization." msgstr "Aktiverar planerarens användning av memoization." -#: utils/misc/guc_tables.c:905 +#: utils/misc/guc_tables.c:875 msgid "Enables the planner's use of nested-loop join plans." msgstr "Aktiverar planerarens användning av planer med nästlad loop-join," -#: utils/misc/guc_tables.c:915 +#: utils/misc/guc_tables.c:885 msgid "Enables the planner's use of merge join plans." msgstr "Aktiverar planerarens användning av merge-join-planer." -#: utils/misc/guc_tables.c:925 +#: utils/misc/guc_tables.c:895 msgid "Enables the planner's use of hash join plans." msgstr "Aktiverar planerarens användning av hash-join-planer." -#: utils/misc/guc_tables.c:935 +#: utils/misc/guc_tables.c:905 msgid "Enables the planner's use of gather merge plans." msgstr "Aktiverar planerarens användning av planer med gather-merge." -#: utils/misc/guc_tables.c:945 +#: utils/misc/guc_tables.c:915 msgid "Enables partitionwise join." msgstr "Aktiverar join per partition." -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:925 msgid "Enables partitionwise aggregation and grouping." msgstr "Aktiverar aggregering och gruppering per partition." -#: utils/misc/guc_tables.c:965 +#: utils/misc/guc_tables.c:935 msgid "Enables the planner's use of parallel append plans." msgstr "Aktiverar planerarens användning av planer med parallell append." -#: utils/misc/guc_tables.c:975 +#: utils/misc/guc_tables.c:945 msgid "Enables the planner's use of parallel hash plans." msgstr "Aktiverar planerarens användning av planer med parallell hash." -#: utils/misc/guc_tables.c:985 +#: utils/misc/guc_tables.c:955 msgid "Enables plan-time and execution-time partition pruning." msgstr "Aktiverar rensning av partitioner vid planering och vid körning." -#: utils/misc/guc_tables.c:986 +#: 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 "Tillåter att frågeplaneraren och exekveraren jämför partitionsgränser med villkor i frågan för att bestämma vilka partitioner som skall skannas." -#: utils/misc/guc_tables.c:997 +#: 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 "Slår på planerarens möjlighet att skapa planer som tillhandahåller försorterad indata till aggregatfunktioner med ORDER BY / DISTINCT." -#: utils/misc/guc_tables.c:1000 +#: 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 "Tillåter att planeraren kan skapa planer som tillhandahåller försorterad indata till aggregatfunktioner med en ORDER BY / DISTINCT-klausul. Om avstängd så kommer implicita sorteringar alltid utföras vid exekvering." -#: utils/misc/guc_tables.c:1012 +#: utils/misc/guc_tables.c:982 msgid "Enables the planner's use of async append plans." msgstr "Aktiverar planerarens användning av planer med async append." -#: utils/misc/guc_tables.c:1022 +#: utils/misc/guc_tables.c:992 +msgid "Enables reordering of GROUP BY keys." +msgstr "Aktiverar omkastning av nycklar i GROUP BY." + +#: utils/misc/guc_tables.c:1002 msgid "Enables genetic query optimization." msgstr "Aktiverar genetisk frågeoptimering." -#: utils/misc/guc_tables.c:1023 +#: utils/misc/guc_tables.c:1003 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Denna algoritm försöker utföra planering utan fullständig sökning." -#: utils/misc/guc_tables.c:1034 +#: utils/misc/guc_tables.c:1017 msgid "Shows whether the current user is a superuser." msgstr "Visar om den aktuella användaren är en superuser." -#: utils/misc/guc_tables.c:1044 +#: utils/misc/guc_tables.c:1032 +msgid "Allows running the ALTER SYSTEM command." +msgstr "Tillåter att kommandot ALTER SYSTEM körs." + +#: 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 "Kan sättas till av för miljöer där global konfiguration skall hanteras på annat sätt." + +#: utils/misc/guc_tables.c:1043 msgid "Enables advertising the server via Bonjour." msgstr "Aktiverar annonsering av servern via Bonjour." -#: utils/misc/guc_tables.c:1053 +#: utils/misc/guc_tables.c:1052 msgid "Collects transaction commit time." msgstr "Samlar in tid för transaktions-commit." -#: utils/misc/guc_tables.c:1062 +#: utils/misc/guc_tables.c:1061 msgid "Enables SSL connections." msgstr "Tillåter SSL-anslutningar." -#: utils/misc/guc_tables.c:1071 -msgid "Controls whether ssl_passphrase_command is called during server reload." -msgstr "Styr hurvida ssl_passphrase_command anropas vid omladdning av server." +#: utils/misc/guc_tables.c:1070 +msgid "Controls whether \"ssl_passphrase_command\" is called during server reload." +msgstr "Styr hurvida \"ssl_passphrase_command\" anropas vid omladdning av server." -#: utils/misc/guc_tables.c:1080 +#: utils/misc/guc_tables.c:1079 msgid "Give priority to server ciphersuite order." msgstr "Ge prioritet till serverns ordning av kryptometoder." -#: utils/misc/guc_tables.c:1089 +#: utils/misc/guc_tables.c:1088 msgid "Forces synchronization of updates to disk." msgstr "Tvingar synkronisering av uppdateringar till disk." -#: utils/misc/guc_tables.c:1090 +#: 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 "Servern kommer använda systemanropet fsync() på ett antal platser för att se till att uppdateringar fysiskt skrivs till disk. Detta för att säkerställa att databasklustret kan starta i ett konsistent tillstånd efter en operativsystemkrash eller hårdvarukrash." -#: utils/misc/guc_tables.c:1101 +#: utils/misc/guc_tables.c:1100 msgid "Continues processing after a checksum failure." msgstr "Fortsätter processande efter checksummefel." -#: utils/misc/guc_tables.c:1102 +#: 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 "Normalt vid detektion av checksummefel så rapporterar PostgreSQL felet och avbryter den aktuella transaktionen. Sätts ignore_checksum_failure till true så kommer systemet hoppa över felet (men fortfarande rapportera en varning). Detta beteende kan orsaka krasher eller andra allvarliga problem. Detta påverkas bara om checksummor är påslaget." -#: utils/misc/guc_tables.c:1116 +#: utils/misc/guc_tables.c:1115 msgid "Continues processing past damaged page headers." msgstr "Fortsätter processande efter trasiga sidhuvuden." -#: utils/misc/guc_tables.c:1117 -msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." -msgstr "Normalt vid detektion av trasiga sidhuvuden så rapporterar PostgreSQL felet och avbryter den aktuella transaktionen. Sätts zero_damaged_pages till true så kommer systemet istället rapportera en varning, nollställa den trasiga sidan samt fortsätta processa. Detta kommer förstöra data (alla rader i den trasiga sidan)." +#: utils/misc/guc_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 "Normalt vid detektion av trasiga sidhuvuden så rapporterar PostgreSQL felet och avbryter den aktuella transaktionen. Sätts \"zero_damaged_pages\" till true så kommer systemet istället rapportera en varning, nollställa den trasiga sidan samt fortsätta processa. Detta kommer förstöra data (alla rader i den trasiga sidan)." -#: utils/misc/guc_tables.c:1130 +#: utils/misc/guc_tables.c:1129 msgid "Continues recovery after an invalid pages failure." msgstr "Fortsätter återställande efter fel på grund av ogiltiga sidor." -#: utils/misc/guc_tables.c:1131 -msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." -msgstr "Normalt vid detektion av WAL-poster som refererar till ogiltiga sidor under återställning så kommer PostgreSQL att signalera ett fel på PANIC-nivå och avbryta återställningen. Sätts ignore_invalid_pages till true så kommer systemet hoppa över ogiltiga sidreferenser i WAL-poster (men fortfarande rapportera en varning) och fortsätta återställningen. Detta beteende kan orsaka krasher, dataförluster, sprida eller dölja korruption eller ge andra allvarliga problem. Detta påverkar bara under återställning eller i standby-läge." +#: utils/misc/guc_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 "Normalt vid detektion av WAL-poster som refererar till ogiltiga sidor under återställning så kommer PostgreSQL att signalera ett fel på PANIC-nivå och avbryta återställningen. Sätts \"ignore_invalid_pages\" till true så kommer systemet hoppa över ogiltiga sidreferenser i WAL-poster (men fortfarande rapportera en varning) och fortsätta återställningen. Detta beteende kan orsaka krasher, dataförluster, sprida eller dölja korruption eller ge andra allvarliga problem. Detta påverkar bara under återställning eller i standby-läge." -#: utils/misc/guc_tables.c:1149 +#: utils/misc/guc_tables.c:1148 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Skriver fulla sidor till WAL första gången de ändras efter en checkpoint." -#: utils/misc/guc_tables.c:1150 +#: 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 "En sidskrivning som sker vid en operativsystemkrash kan bli delvis utskriven till disk. Under återställning så kommer radändringar i WAL:en inte vara tillräckligt för att återställa datan. Denna flagga skriver ut sidor först efter att en WAL-checkpoint gjorts vilket gör att full återställning kan ske." -#: utils/misc/guc_tables.c:1163 +#: 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 "Skriver fulla sidor till WAL första gången de ändras efter en checkpoint, även för ickekritisk ändring." -#: utils/misc/guc_tables.c:1173 +#: utils/misc/guc_tables.c:1172 msgid "Writes zeroes to new WAL files before first use." msgstr "Skriv nollor till nya WAL-filer innan första användning." -#: utils/misc/guc_tables.c:1183 +#: utils/misc/guc_tables.c:1182 msgid "Recycles WAL files by renaming them." msgstr "Återanvänder WAL-filer genom att byta namn på dem." -#: utils/misc/guc_tables.c:1193 +#: utils/misc/guc_tables.c:1192 msgid "Logs each checkpoint." msgstr "Logga varje checkpoint." -#: utils/misc/guc_tables.c:1202 +#: utils/misc/guc_tables.c:1201 msgid "Logs each successful connection." msgstr "Logga varje lyckad anslutning." -#: utils/misc/guc_tables.c:1211 +#: utils/misc/guc_tables.c:1210 +msgid "Logs details of pre-authentication connection handshake." +msgstr "Logga detaljer om anslutningshandskakning före autentisering." + +#: utils/misc/guc_tables.c:1220 msgid "Logs end of a session, including duration." msgstr "Loggar slut på session, inklusive längden." -#: utils/misc/guc_tables.c:1220 +#: utils/misc/guc_tables.c:1229 msgid "Logs each replication command." msgstr "Loggar alla replikeringskommanon." -#: utils/misc/guc_tables.c:1229 +#: utils/misc/guc_tables.c:1238 msgid "Shows whether the running server has assertion checks enabled." msgstr "Visar om den körande servern har assert-kontroller påslagna." -#: utils/misc/guc_tables.c:1240 +#: utils/misc/guc_tables.c:1249 msgid "Terminate session on any error." msgstr "Avbryt sessionen vid fel." -#: utils/misc/guc_tables.c:1249 +#: utils/misc/guc_tables.c:1258 msgid "Reinitialize server after backend crash." msgstr "Återinitiera servern efter en backend-krash." -#: utils/misc/guc_tables.c:1258 +#: utils/misc/guc_tables.c:1267 msgid "Remove temporary files after backend crash." msgstr "Ta bort temporära filer efter en backend-krash." -#: utils/misc/guc_tables.c:1268 +#: utils/misc/guc_tables.c:1277 msgid "Send SIGABRT not SIGQUIT to child processes after backend crash." msgstr "Skicka SIGABRT och inte SIGQUIT till barnprocesser efter att backend:en krashat." -#: utils/misc/guc_tables.c:1278 +#: utils/misc/guc_tables.c:1287 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "Skicka SIGABRT och inte SIGKILL till barnprocesser som fastnat." -#: utils/misc/guc_tables.c:1289 +#: utils/misc/guc_tables.c:1298 msgid "Logs the duration of each completed SQL statement." msgstr "Loggar tiden för varje avslutad SQL-sats." -#: utils/misc/guc_tables.c:1298 +#: utils/misc/guc_tables.c:1307 msgid "Logs each query's parse tree." msgstr "Loggar alla frågors parse-träd." -#: utils/misc/guc_tables.c:1307 +#: utils/misc/guc_tables.c:1316 msgid "Logs each query's rewritten parse tree." msgstr "Logga alla frågors omskrivet parse-träd." -#: utils/misc/guc_tables.c:1316 +#: utils/misc/guc_tables.c:1325 msgid "Logs each query's execution plan." msgstr "Logga alla frågors körningsplan." -#: utils/misc/guc_tables.c:1325 +#: utils/misc/guc_tables.c:1334 msgid "Indents parse and plan tree displays." msgstr "Indentera parse och planeringsträdutskrifter" -#: utils/misc/guc_tables.c:1334 +#: utils/misc/guc_tables.c:1343 msgid "Writes parser performance statistics to the server log." msgstr "Skriver parserns prestandastatistik till serverloggen." -#: utils/misc/guc_tables.c:1343 +#: utils/misc/guc_tables.c:1352 msgid "Writes planner performance statistics to the server log." msgstr "Skriver planerarens prestandastatistik till serverloggen." -#: utils/misc/guc_tables.c:1352 +#: utils/misc/guc_tables.c:1361 msgid "Writes executor performance statistics to the server log." msgstr "Skrivere exekverarens prestandastatistik till serverloggen." -#: utils/misc/guc_tables.c:1361 +#: utils/misc/guc_tables.c:1370 msgid "Writes cumulative performance statistics to the server log." msgstr "Skriver ackumulerad prestandastatistik till serverloggen." -#: utils/misc/guc_tables.c:1371 +#: utils/misc/guc_tables.c:1380 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Loggar statisik för användning av systemresurser (minne och CPU) för olika B-tree-operationer." -#: utils/misc/guc_tables.c:1383 +#: utils/misc/guc_tables.c:1392 msgid "Collects information about executing commands." msgstr "Samla information om körda kommanon." -#: utils/misc/guc_tables.c:1384 +#: 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 "Slår på insamling av information om det nu körande kommandot för varje session, tillsammans med klockslaget när det kommandot började köra." -#: utils/misc/guc_tables.c:1394 +#: utils/misc/guc_tables.c:1403 msgid "Collects statistics on database activity." msgstr "Samla in statistik om databasaktivitet." -#: utils/misc/guc_tables.c:1403 +#: utils/misc/guc_tables.c:1412 msgid "Collects timing statistics for database I/O activity." msgstr "Samla in timingstatistik om databasens I/O-aktivitet." -#: utils/misc/guc_tables.c:1412 +#: utils/misc/guc_tables.c:1421 msgid "Collects timing statistics for WAL I/O activity." msgstr "Samla in timingstatistik om I/O-aktivitet för WAL." -#: utils/misc/guc_tables.c:1422 +#: utils/misc/guc_tables.c:1431 msgid "Updates the process title to show the active SQL command." msgstr "Uppdaterar processtitel till att visa aktivt SQL-kommando." -#: utils/misc/guc_tables.c:1423 +#: 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 "Slår på uppdatering av processtiteln varje gång ett nytt SQL-kommando tas emot av servern." -#: utils/misc/guc_tables.c:1432 +#: utils/misc/guc_tables.c:1441 msgid "Starts the autovacuum subprocess." msgstr "Starta autovacuum-barnprocess." -#: utils/misc/guc_tables.c:1442 +#: utils/misc/guc_tables.c:1451 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Skapar debug-output för LISTEN och NOTIFY." -#: utils/misc/guc_tables.c:1454 +#: utils/misc/guc_tables.c:1463 msgid "Emits information about lock usage." msgstr "Visar information om låsanvändning." -#: utils/misc/guc_tables.c:1464 +#: utils/misc/guc_tables.c:1473 msgid "Emits information about user lock usage." msgstr "Visar information om användares låsanvändning." -#: utils/misc/guc_tables.c:1474 +#: utils/misc/guc_tables.c:1483 msgid "Emits information about lightweight lock usage." msgstr "Visar information om lättviktig låsanvändning." -#: utils/misc/guc_tables.c:1484 +#: utils/misc/guc_tables.c:1493 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Dumpar information om alla aktuella lås när en deadlock-timeout sker." -#: utils/misc/guc_tables.c:1496 +#: utils/misc/guc_tables.c:1505 msgid "Logs long lock waits." msgstr "Loggar långa väntetider på lås." -#: utils/misc/guc_tables.c:1505 +#: utils/misc/guc_tables.c:1514 msgid "Logs standby recovery conflict waits." msgstr "Loggar väntande på återställningskonflikter i standby" -#: utils/misc/guc_tables.c:1514 +#: utils/misc/guc_tables.c:1523 msgid "Logs the host name in the connection logs." msgstr "Loggar hostnamnet i anslutningsloggen." -#: utils/misc/guc_tables.c:1515 +#: 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 "Som standard visar anslutningsloggen bara IP-adressen för den anslutande värden. Om du vill att värdnamnet skall visas så kan du slå på detta men beroende på hur uppsättningen av namnuppslag är gjored så kan detta ha en markant prestandapåverkan." -#: utils/misc/guc_tables.c:1526 +#: utils/misc/guc_tables.c:1535 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tolkar \"uttryck=NULL\" som \"uttryck IS NULL\"." -#: utils/misc/guc_tables.c:1527 +#: 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 "Om påslagen så kommer uttryck på formen uttryck = NULL (eller NULL = uttryck) att behandlas som uttryck IS NULL, det vill säga returnera true om uttryck evalueras till värdet null eller evalueras till false annars. Det korrekta beteendet för uttryck = NULL är att alltid returnera null (okänt)." -#: utils/misc/guc_tables.c:1539 -msgid "Enables per-database user names." -msgstr "Aktiverar användarnamn per databas." - #: utils/misc/guc_tables.c:1548 msgid "Sets the default read-only status of new transactions." msgstr "Ställer in standard read-only-status för nya transaktioner." @@ -28165,8 +29326,8 @@ msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS stöds inte längre; denna kan bara vara false." #: utils/misc/guc_tables.c:1632 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." -msgstr "Starta en subprocess för att fånga output från stderr och/eller csv-loggar till loggfiler." +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." +msgstr "Starta en subprocess för att fånga stderr, csvlog och/eller jsonlog till loggfiler." #: utils/misc/guc_tables.c:1641 msgid "Truncate existing log files of same name during log rotation." @@ -28217,1366 +29378,1440 @@ msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Anger hurvida man skall inkludera eller exkludera transaktion för återställningmål." #: utils/misc/guc_tables.c:1778 +msgid "Starts the WAL summarizer process to enable incremental backup." +msgstr "Startar process för WAL-summering för att tillåta inkrementella backuper." + +#: utils/misc/guc_tables.c:1788 msgid "Allows connections and queries during recovery." msgstr "Tillåt anslutningar och frågor under återställning." -#: utils/misc/guc_tables.c:1788 +#: utils/misc/guc_tables.c:1798 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Tillåter feedback från en hot standby till primären för att undvika frågekonflikter." -#: utils/misc/guc_tables.c:1798 +#: utils/misc/guc_tables.c:1808 msgid "Shows whether hot standby is currently active." msgstr "Visar hurvida hot standby är aktiv för närvarande." -#: utils/misc/guc_tables.c:1809 +#: utils/misc/guc_tables.c:1819 msgid "Allows modifications of the structure of system tables." msgstr "Tillåter strukturförändringar av systemtabeller." -#: utils/misc/guc_tables.c:1820 +#: utils/misc/guc_tables.c:1830 msgid "Disables reading from system indexes." msgstr "Stänger av läsning från systemindex." -#: utils/misc/guc_tables.c:1821 +#: 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 "Det förhindrar inte uppdatering av index så det är helt säkert att använda. Det värsta som kan hända är att det är långsamt." -#: utils/misc/guc_tables.c:1832 +#: utils/misc/guc_tables.c:1842 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "Tillåter tabellutrymmen direkt inuti pg_tblspc, för testning" -#: utils/misc/guc_tables.c:1843 +#: utils/misc/guc_tables.c:1853 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Slår på bakåtkompabilitetsläge för rättighetskontroller på stora objekt." -#: utils/misc/guc_tables.c:1844 +#: 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 "Hoppar över rättighetskontroller vid läsning eller modifiering av stora objekt, för kompabilitet med PostgreSQL-releaser innan 9.0." -#: utils/misc/guc_tables.c:1854 +#: utils/misc/guc_tables.c:1864 msgid "When generating SQL fragments, quote all identifiers." msgstr "När SQL-fragment genereras så citera alla identifierare." -#: utils/misc/guc_tables.c:1864 +#: utils/misc/guc_tables.c:1874 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Visar om datachecksummor är påslagna för detta kluster." -#: utils/misc/guc_tables.c:1875 +#: utils/misc/guc_tables.c:1885 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Lägg till sekvensnummer till syslog-meddelanden för att undvika att duplikat tas bort." -#: utils/misc/guc_tables.c:1885 +#: utils/misc/guc_tables.c:1895 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Dela meddelanden som skickas till syslog till egna rader och begränsa till 1024 byte." -#: utils/misc/guc_tables.c:1895 +#: utils/misc/guc_tables.c:1905 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Bestämmer om \"Gather\" och \"Gather Merge\" också exekverar subplaner." -#: utils/misc/guc_tables.c:1896 +#: utils/misc/guc_tables.c:1906 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Skall gather-noder också exekvera subplaner eller bara samla in tupler?" -#: utils/misc/guc_tables.c:1906 +#: utils/misc/guc_tables.c:1916 msgid "Allow JIT compilation." msgstr "Tillåt JIT-kompilering." -#: utils/misc/guc_tables.c:1917 +#: utils/misc/guc_tables.c:1927 msgid "Register JIT-compiled functions with debugger." msgstr "Registrera JIT-kompilerade funktioner hos debuggern." -#: utils/misc/guc_tables.c:1934 +#: utils/misc/guc_tables.c:1944 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Skriv ut LLVM-bitkod för att möjliggöra JIT-debuggning." -#: utils/misc/guc_tables.c:1945 +#: utils/misc/guc_tables.c:1955 msgid "Allow JIT compilation of expressions." msgstr "Tillåt JIT-kompilering av uttryck." -#: utils/misc/guc_tables.c:1956 +#: utils/misc/guc_tables.c:1966 msgid "Register JIT-compiled functions with perf profiler." msgstr "Registrera JIT-kompilerade funktioner med perf-profilerare." -#: utils/misc/guc_tables.c:1973 +#: utils/misc/guc_tables.c:1983 msgid "Allow JIT compilation of tuple deforming." msgstr "Tillåt JIT-kompilering av tupeluppdelning." -#: utils/misc/guc_tables.c:1984 +#: utils/misc/guc_tables.c:1994 msgid "Whether to continue running after a failure to sync data files." msgstr "Hurvida vi skall fortsätta efter ett fel att synka datafiler." -#: utils/misc/guc_tables.c:1993 +#: 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 "Anger hurvida en WAL-mottagare skall skapa en temporär replikeringsslot om ingen permanent slot är konfigurerad." -#: utils/misc/guc_tables.c:2011 +#: utils/misc/guc_tables.c:2012 +msgid "Enables event triggers." +msgstr "Aktiverar händelsetriggrar." + +#: utils/misc/guc_tables.c:2013 +msgid "When enabled, event triggers will fire for all applicable statements." +msgstr "Om aktiverad så kommer händelsetriggrar anropas för alla satser där det går." + +#: utils/misc/guc_tables.c:2022 +msgid "Enables a physical standby to synchronize logical failover replication slots from the primary server." +msgstr "Tillåter att en fysisk standby synkroniserar logiska replikeringsslottar för failover från primära servern." + +#: utils/misc/guc_tables.c:2040 msgid "Sets the amount of time to wait before forcing a switch to the next WAL file." msgstr "Sätter tiden vi väntar innan vi tvingar ett byte till nästa WAL-fil." -#: utils/misc/guc_tables.c:2022 +#: utils/misc/guc_tables.c:2051 msgid "Sets the amount of time to wait after authentication on connection startup." msgstr "Sätter tiden att vänta efter authentiserng vid uppstart av anslutningen." -#: utils/misc/guc_tables.c:2024 utils/misc/guc_tables.c:2658 +#: utils/misc/guc_tables.c:2053 utils/misc/guc_tables.c:2780 msgid "This allows attaching a debugger to the process." msgstr "Detta tillåter att man ansluter en debugger till processen." -#: utils/misc/guc_tables.c:2033 +#: utils/misc/guc_tables.c:2062 msgid "Sets the default statistics target." msgstr "Sätter standardstatistikmålet." -#: utils/misc/guc_tables.c:2034 +#: 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 "Detta gäller tabellkolumner som inte har ett kolumnspecifikt mål satt med ALTER TABLE SET STATISTICS." -#: utils/misc/guc_tables.c:2043 +#: utils/misc/guc_tables.c:2072 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Sätter en övre gräns på FROM-listans storlek där subfrågor slås isär." -#: utils/misc/guc_tables.c:2045 +#: 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 "Planeraren kommer slå samman subfrågor med yttre frågor om den resulterande FROM-listan inte har fler än så här många poster." -#: utils/misc/guc_tables.c:2056 +#: utils/misc/guc_tables.c:2085 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Sätter en övre gräns på FROM-listans storlek där JOIN-konstruktioner plattas till." -#: utils/misc/guc_tables.c:2058 +#: 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 "Planeraren kommer platta till explicita JOIN-konstruktioner till listor av FROM-poster när resultatet blir en lista med max så här många poster." -#: utils/misc/guc_tables.c:2069 +#: utils/misc/guc_tables.c:2098 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Sätter en undre gräns på antal FROM-poster när GEQO används." -#: utils/misc/guc_tables.c:2079 +#: utils/misc/guc_tables.c:2108 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort används som standard för andra GEQO-parametrar." -#: utils/misc/guc_tables.c:2089 +#: utils/misc/guc_tables.c:2118 msgid "GEQO: number of individuals in the population." msgstr "GEQO: antal individer i populationen." -#: utils/misc/guc_tables.c:2090 utils/misc/guc_tables.c:2100 +#: utils/misc/guc_tables.c:2119 utils/misc/guc_tables.c:2129 msgid "Zero selects a suitable default value." msgstr "Noll väljer ett lämpligt standardvärde." -#: utils/misc/guc_tables.c:2099 +#: utils/misc/guc_tables.c:2128 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: antal iterationer för algoritmen." -#: utils/misc/guc_tables.c:2111 +#: utils/misc/guc_tables.c:2140 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Sätter tiden som väntas på ett lås innan kontroll av deadlock sker." -#: utils/misc/guc_tables.c:2122 +#: 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 "Sätter maximal fördröjning innan frågor avbryts när en \"hot standby\"-server processar arkiverad WAL-data." -#: utils/misc/guc_tables.c:2133 +#: 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 "Sätter maximal fördröjning innan frågor avbryts när en \"hot stanby\"-server processar strömmad WAL-data." -#: utils/misc/guc_tables.c:2144 +#: utils/misc/guc_tables.c:2173 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Ställer in minsta fördröjning för att applicera ändringar under återställning." -#: utils/misc/guc_tables.c:2155 +#: utils/misc/guc_tables.c:2184 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Sätter maximalt intervall mellan statusrapporter till skickande server från WAL-mottagaren." -#: utils/misc/guc_tables.c:2166 +#: utils/misc/guc_tables.c:2195 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Sätter maximal väntetid för att ta emot data från skickande server." -#: utils/misc/guc_tables.c:2177 +#: utils/misc/guc_tables.c:2206 msgid "Sets the maximum number of concurrent connections." msgstr "Sätter maximalt antal samtidiga anslutningar." -#: utils/misc/guc_tables.c:2188 +#: utils/misc/guc_tables.c:2217 msgid "Sets the number of connection slots reserved for superusers." msgstr "Sätter antalet anslutningsslottar som reserverats för superusers." -#: utils/misc/guc_tables.c:2198 +#: utils/misc/guc_tables.c:2227 msgid "Sets the number of connection slots reserved for roles with privileges of pg_use_reserved_connections." msgstr "Sätter antalet anslutningsslottar som reserverats för roller med rättigheter från pg_use_reserved_connections." -#: utils/misc/guc_tables.c:2209 +#: utils/misc/guc_tables.c:2238 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Mängd dynamiskt delat minne som reserveras vid uppstart" -#: utils/misc/guc_tables.c:2224 +#: utils/misc/guc_tables.c:2253 msgid "Sets the number of shared memory buffers used by the server." msgstr "Sätter antalet delade minnesbuffrar som används av servern." -#: utils/misc/guc_tables.c:2235 +#: utils/misc/guc_tables.c:2264 msgid "Sets the buffer pool size for VACUUM, ANALYZE, and autovacuum." msgstr "Sätter buffer-poolens storlek för VACUUM, ANALYZE och autovacuum." -#: utils/misc/guc_tables.c:2246 +#: 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 "Visa storlek på serverns huvudsakliga delade minnesarea (avrundat upp till närmaste MB)." -#: utils/misc/guc_tables.c:2257 +#: utils/misc/guc_tables.c:2286 msgid "Shows the number of huge pages needed for the main shared memory area." msgstr "Visa antal stora sidor som krävs för den huvudsakliga delade minnesarean." -#: utils/misc/guc_tables.c:2258 +#: utils/misc/guc_tables.c:2287 msgid "-1 indicates that the value could not be determined." msgstr "-1 betyder att värdet inte kunde bestämmas." -#: utils/misc/guc_tables.c:2268 +#: utils/misc/guc_tables.c:2297 +msgid "Sets the size of the dedicated buffer pool used for the commit timestamp cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används till cache av commit-tidsstämplar." + +#: 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 "Ange 0 för att sätta detta värde till en bråkdel av shared_buffers." + +#: utils/misc/guc_tables.c:2308 +msgid "Sets the size of the dedicated buffer pool used for the MultiXact member cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används till cache av MultiXact-medlemmar." + +#: utils/misc/guc_tables.c:2319 +msgid "Sets the size of the dedicated buffer pool used for the MultiXact offset cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används till cache av MultiXact-offset." + +#: utils/misc/guc_tables.c:2330 +msgid "Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY message cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används till cache av LISTEN/NOTIFY-meddelande." + +#: utils/misc/guc_tables.c:2341 +msgid "Sets the size of the dedicated buffer pool used for the serializable transaction cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används till cache av serialiserbara transaktioner." + +#: utils/misc/guc_tables.c:2352 +msgid "Sets the size of the dedicated buffer pool used for the subtransaction cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används som cache för undertransaktioner." + +#: utils/misc/guc_tables.c:2363 +msgid "Sets the size of the dedicated buffer pool used for the transaction status cache." +msgstr "Sätter storlek på den dedikerade bufferpoolen som används till cache av transaktionsstatus." + +#: utils/misc/guc_tables.c:2374 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Sätter maximalt antal temporära buffertar som används per session." -#: utils/misc/guc_tables.c:2279 +#: utils/misc/guc_tables.c:2385 msgid "Sets the TCP port the server listens on." msgstr "Sätter TCP-porten som servern lyssnar på." -#: utils/misc/guc_tables.c:2289 +#: utils/misc/guc_tables.c:2395 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Sätter accessrättigheter för Unix-domainuttag (socket)." -#: utils/misc/guc_tables.c:2290 +#: 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 "Unixdomänuttag (socket) använder unix vanliga filsystemsrättigheter. Parametervärdet förväntas vara en numerisk rättighetsangivelse så som accepteras av systemanropen chmod och umask. (För att använda det vanliga oktala formatet så måste numret börja med 0 (noll).)" -#: utils/misc/guc_tables.c:2304 +#: utils/misc/guc_tables.c:2410 msgid "Sets the file permissions for log files." msgstr "Sätter filrättigheter för loggfiler." -#: utils/misc/guc_tables.c:2305 +#: 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 "Parametervärdet förväntas vara en numerisk rättighetsangivelse så som accepteras av systemanropen chmod och umask. (För att använda det vanliga oktala formatet så måste numret börja med 0 (noll).)" -#: utils/misc/guc_tables.c:2319 +#: utils/misc/guc_tables.c:2425 msgid "Shows the mode of the data directory." msgstr "Visar rättigheter för datakatalog" -#: utils/misc/guc_tables.c:2320 +#: 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 "Parametervärdet är en numerisk rättighetsangivelse så som accepteras av systemanropen chmod och umask. (För att använda det vanliga oktala formatet så måste numret börja med 0 (noll).)" -#: utils/misc/guc_tables.c:2333 +#: utils/misc/guc_tables.c:2439 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Sätter maximalt minne som används för frågors arbetsyta." -#: utils/misc/guc_tables.c:2334 +#: 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 "Så här mycket minne kan användas av varje intern sorteringsoperation resp. hash-tabell innan temporära filer på disk börjar användas." -#: utils/misc/guc_tables.c:2346 +#: utils/misc/guc_tables.c:2457 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Sätter det maximala minnet som får användas för underhållsoperationer." -#: utils/misc/guc_tables.c:2347 +#: utils/misc/guc_tables.c:2458 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Detta inkluderar operationer som VACUUM och CREATE INDEX." -#: utils/misc/guc_tables.c:2357 +#: utils/misc/guc_tables.c:2468 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Sätter det maximala minnet som får användas för logisk avkodning." -#: utils/misc/guc_tables.c:2358 +#: utils/misc/guc_tables.c:2469 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Så här mycket minne kan användas av varje intern omsorteringsbuffer innan data spills till disk." -#: utils/misc/guc_tables.c:2374 +#: utils/misc/guc_tables.c:2485 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Sätter det maximala stackdjupet, i kilobyte." -#: utils/misc/guc_tables.c:2385 +#: utils/misc/guc_tables.c:2496 msgid "Limits the total size of all temporary files used by each process." msgstr "Begränsar den totala storleken för alla temporära filer som används i en process." -#: utils/misc/guc_tables.c:2386 +#: utils/misc/guc_tables.c:2497 msgid "-1 means no limit." msgstr "-1 betyder ingen gräns." -#: utils/misc/guc_tables.c:2396 +#: utils/misc/guc_tables.c:2507 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Vacuum-kostnad för en sida som hittas i buffer-cache:n." -#: utils/misc/guc_tables.c:2406 +#: utils/misc/guc_tables.c:2517 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Vacuum-kostnad för en sida som inte hittas i buffer-cache:n." -#: utils/misc/guc_tables.c:2416 +#: utils/misc/guc_tables.c:2527 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Vacuum-kostnad för sidor som smutsats ner vid vacuum." -#: utils/misc/guc_tables.c:2426 +#: utils/misc/guc_tables.c:2537 msgid "Vacuum cost amount available before napping." msgstr "Vacuum-kostnad kvar innan pausande." -#: utils/misc/guc_tables.c:2436 +#: utils/misc/guc_tables.c:2547 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Vacuum-kostnad kvar innan pausande, för autovacuum." -#: utils/misc/guc_tables.c:2446 +#: utils/misc/guc_tables.c:2557 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Sätter det maximala antalet filer som en serverprocess kan ha öppna på en gång." -#: utils/misc/guc_tables.c:2459 +#: utils/misc/guc_tables.c:2570 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Sätter det maximala antalet förberedda transaktioner man får ha på en gång." -#: utils/misc/guc_tables.c:2470 +#: utils/misc/guc_tables.c:2581 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Sätter minsta tabell-OID för spårning av lås." -#: utils/misc/guc_tables.c:2471 +#: utils/misc/guc_tables.c:2582 msgid "Is used to avoid output on system tables." msgstr "Används för att undvika utdata för systemtabeller." -#: utils/misc/guc_tables.c:2480 +#: utils/misc/guc_tables.c:2591 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Sätter OID för tabellen med ovillkorlig låsspårning." -#: utils/misc/guc_tables.c:2492 +#: utils/misc/guc_tables.c:2603 msgid "Sets the maximum allowed duration of any statement." msgstr "Sätter den maximala tiden som en sats får köra." -#: utils/misc/guc_tables.c:2493 utils/misc/guc_tables.c:2504 -#: utils/misc/guc_tables.c:2515 utils/misc/guc_tables.c:2526 +#: 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 "Värdet 0 stänger av timeout:en." -#: utils/misc/guc_tables.c:2503 +#: utils/misc/guc_tables.c:2614 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Sätter den maximala tiden som man får vänta på ett lås." -#: utils/misc/guc_tables.c:2514 +#: utils/misc/guc_tables.c:2625 msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Sätter den maximalt tillåtna inaktiva tiden mellan frågor i en transaktion." -#: utils/misc/guc_tables.c:2525 +#: utils/misc/guc_tables.c:2636 +msgid "Sets the maximum allowed duration of any transaction within a session (not a prepared transaction)." +msgstr "Sätter den maximala tillåtana tiden för en transaktion i en session (ej en preparerad transaktion)." + +#: utils/misc/guc_tables.c:2647 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Sätter den maximalt tillåtna inaktiva tiden mellan frågor utanför en transaktion." -#: utils/misc/guc_tables.c:2536 +#: utils/misc/guc_tables.c:2658 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Minimal ålder där VACUUM skall frysa en tabellrad." -#: utils/misc/guc_tables.c:2546 +#: utils/misc/guc_tables.c:2668 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Ålder där VACUUM skall skanna hela tabellen för att frysa tupler." -#: utils/misc/guc_tables.c:2556 +#: utils/misc/guc_tables.c:2678 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Minsta ålder där VACUUM skall frysa en MultiXactId i en tabellrad." -#: utils/misc/guc_tables.c:2566 +#: utils/misc/guc_tables.c:2688 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Multixact-ålder där VACUUM skall skanna hela tabellen för att frysa tupler." -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2698 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Ålder där VACUUM skall startas som skyddsåtgärd för att undvika wraparound-stopp." -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2707 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Multixact-ålder där VACUUM skall startas som skyddsåtgärd för att undvika wraparound-stopp." -#: utils/misc/guc_tables.c:2598 +#: utils/misc/guc_tables.c:2720 msgid "Sets the maximum number of locks per transaction." msgstr "Sätter det maximala antalet lås per transaktion." -#: utils/misc/guc_tables.c:2599 -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 "Den delade låstabellen har storlek efter antagandet att maximalt max_locks_per_transaction objekt per serverprocess eller per förberedd transaktion kommer behöva låsas vid varje enskild tidpunkt." +#: 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 "Den delade låstabellen har storlek efter antagandet att maximalt \"max_locks_per_transaction\" objekt per serverprocess eller per förberedd transaktion kommer behöva låsas vid varje enskild tidpunkt." -#: utils/misc/guc_tables.c:2610 +#: utils/misc/guc_tables.c:2732 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Sätter det maximala antalet predikatlås per transaktion." -#: utils/misc/guc_tables.c:2611 -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 "Den delade predikatlåstabellen har storlek efter antagandet att maximalt max_pred_locks_per_transaction objekt per serverprocess eller per förberedd transaktion kommer behöva låsas vid varje enskild tidpunkt." +#: 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 "Den delade predikatlåstabellen har storlek efter antagandet att maximalt \"max_pred_locks_per_transaction\" objekt per serverprocess eller per förberedd transaktion kommer behöva låsas vid varje enskild tidpunkt." -#: utils/misc/guc_tables.c:2622 +#: utils/misc/guc_tables.c:2744 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Sätter det maximala antalet predikatlåsta sidor och tupler per relation." -#: utils/misc/guc_tables.c:2623 +#: 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 "Om fler än detta totala antal sidor och tupler för samma relation är låsta av en anslutning så ersätts dessa lås med ett lås på relationen." -#: utils/misc/guc_tables.c:2633 +#: utils/misc/guc_tables.c:2755 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Sätter det maximala antalet predikatlåsta tupler per sida." -#: utils/misc/guc_tables.c:2634 +#: 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 "Om fler än detta antal tupler på samma sida är låsta av en anslutning så ersätts dessa lås med ett lås på sidan." -#: utils/misc/guc_tables.c:2644 +#: utils/misc/guc_tables.c:2766 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Sätter maximalt tillåten tid att slutföra klientautentisering." -#: utils/misc/guc_tables.c:2656 +#: utils/misc/guc_tables.c:2778 msgid "Sets the amount of time to wait before authentication on connection startup." msgstr "Sätter tiden att vänta före authentiserng vid uppstart av anslutningen.." -#: utils/misc/guc_tables.c:2668 +#: utils/misc/guc_tables.c:2790 +msgid "Sets the maximum number of allocated pages for NOTIFY / LISTEN queue." +msgstr "Sätter det maximala antalet allokerade sidor till kö för NOTIFY / LISTEN." + +#: utils/misc/guc_tables.c:2800 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "Bufferstorlek för read-ahead av WAL vid återställning." -#: utils/misc/guc_tables.c:2669 +#: utils/misc/guc_tables.c:2801 msgid "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." msgstr "Maximal längd att läsa i förväg av WAL för att prefetch:a refererade datablock." -#: utils/misc/guc_tables.c:2679 +#: utils/misc/guc_tables.c:2811 msgid "Sets the size of WAL files held for standby servers." msgstr "Sätter storlek på WAL-filer som sparas för standby-servrar." -#: utils/misc/guc_tables.c:2690 +#: utils/misc/guc_tables.c:2822 msgid "Sets the minimum size to shrink the WAL to." msgstr "Sätter maximal storlek som WAL kan krympas till." -#: utils/misc/guc_tables.c:2702 +#: utils/misc/guc_tables.c:2834 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Sätter WAL-storlek som triggar en checkpoint." -#: utils/misc/guc_tables.c:2714 +#: utils/misc/guc_tables.c:2846 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Sätter maximal tid mellan två automatiska WAL-checkpoint:er." -#: utils/misc/guc_tables.c:2725 +#: utils/misc/guc_tables.c:2857 msgid "Sets the maximum time before warning if checkpoints triggered by WAL volume happen too frequently." msgstr "Sätter maximal tid innan en varning ges för att stor WAL-volymn gör att checkpoint triggas för ofta." -#: utils/misc/guc_tables.c:2727 +#: 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 "Skriv ett meddelande i serverloggen om checkpoint:er som orsakas av fulla WAL-segmentfiler händer oftare än denna tid. Noll stänger av varningen." -#: utils/misc/guc_tables.c:2740 utils/misc/guc_tables.c:2958 -#: utils/misc/guc_tables.c:2998 +#: 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 "Antal sidor varefter tidigare skrivningar flush:as till disk." -#: utils/misc/guc_tables.c:2751 +#: utils/misc/guc_tables.c:2883 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Sätter antal buffrar för disksidor i delat minne för WAL." -#: utils/misc/guc_tables.c:2762 +#: utils/misc/guc_tables.c:2884 +msgid "Specify -1 to have this value determined as a fraction of shared_buffers." +msgstr "Ange -1 för att sätta detta värde till en bråkdel av shared_buffers." + +#: utils/misc/guc_tables.c:2894 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Tid mellan WAL-flush:ar utförda i WAL-skrivaren." -#: utils/misc/guc_tables.c:2773 +#: utils/misc/guc_tables.c:2905 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Mängden WAL utskrivna av WAL-skrivaren som triggar en flush." -#: utils/misc/guc_tables.c:2784 +#: utils/misc/guc_tables.c:2916 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Minimal storlek på ny fil som skall fsync:as istället för att skriva till WAL." -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2927 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Sätter maximalt antal samtidigt körande WAL-sändarprocesser." -#: utils/misc/guc_tables.c:2806 +#: utils/misc/guc_tables.c:2938 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Sätter maximalt antal samtidigt definierade replikeringsslottar." -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2948 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Sätter maximalt WAL-storlek som kan reserveras av replikeringsslottar." -#: utils/misc/guc_tables.c:2817 +#: 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 "Replikeringsslottar kommer markeras som misslyckade och segment kommer släppas till borttagning eller återanvändning när så här mycket plats används av WAL på disk." -#: utils/misc/guc_tables.c:2829 +#: utils/misc/guc_tables.c:2961 msgid "Sets the maximum time to wait for WAL replication." msgstr "Sätter maximal tid att vänta på WAL-replikering." -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2972 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Sätter fördröjning i mikrosekunder mellan transaktions-commit ochj flush:ning av WAL till disk." -#: utils/misc/guc_tables.c:2852 -msgid "Sets the minimum number of concurrent open transactions required before performing commit_delay." -msgstr "Sätter minsta antal samtida öppna transaktioner som krävs innan vi utför en commit_delay." +#: utils/misc/guc_tables.c:2984 +msgid "Sets the minimum number of concurrent open transactions required before performing \"commit_delay\"." +msgstr "Sätter minsta antal samtida öppna transaktioner som krävs innan vi utför en \"commit_delay\"." -#: utils/misc/guc_tables.c:2863 +#: utils/misc/guc_tables.c:2995 msgid "Sets the number of digits displayed for floating-point values." msgstr "Sätter antal siffror som visas för flyttalsvärden." -#: utils/misc/guc_tables.c:2864 +#: 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 "Detta påverkar real, double precision och geometriska datatyper. Noll eller negativt parametervärde läggs till standard antal siffror (FLT_DIG eller DBL_DIG respektive). Ett värde större än noll väljer ett exakt utmatningsläge." -#: utils/misc/guc_tables.c:2876 +#: 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 "Sätter minimal körtid där ett urval av långsammare satser kommer loggas. Urvalet bestämms av log_statement_sample_rate." -#: utils/misc/guc_tables.c:2879 +#: utils/misc/guc_tables.c:3011 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Noll loggar ett urval som inkluderar alla frågor. -1 stänger av denna funktion." -#: utils/misc/guc_tables.c:2889 +#: utils/misc/guc_tables.c:3021 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Sätter minimal körtid där alla långsammare satser kommer loggas." -#: utils/misc/guc_tables.c:2891 +#: utils/misc/guc_tables.c:3023 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Noll skriver ut alla frågor. -1 stänger av denna finess." -#: utils/misc/guc_tables.c:2901 +#: utils/misc/guc_tables.c:3033 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Sätter minimal körtid där långsammare autovacuum-operationer kommer loggas." -#: utils/misc/guc_tables.c:2903 +#: utils/misc/guc_tables.c:3035 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Noll skriver ut alla operationer. -1 stänger av autovacuum." -#: utils/misc/guc_tables.c:2913 +#: utils/misc/guc_tables.c:3045 msgid "Sets the maximum length in bytes of data logged for bind parameter values when logging statements." msgstr "Sätter maximal längd i byte på data som loggas för bind-parametrar vid loggning av satser." -#: utils/misc/guc_tables.c:2915 utils/misc/guc_tables.c:2927 +#: utils/misc/guc_tables.c:3047 utils/misc/guc_tables.c:3059 msgid "-1 to print values in full." msgstr "-1 för att skriva ut hela värden." -#: utils/misc/guc_tables.c:2925 +#: 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 "Sätter maximal längs i byte på data som loggas för bind-parametrar vid loggning av satser i samband med fel." -#: utils/misc/guc_tables.c:2937 +#: utils/misc/guc_tables.c:3069 msgid "Background writer sleep time between rounds." msgstr "Bakgrundsskrivarens sleep-tid mellan körningar." -#: utils/misc/guc_tables.c:2948 +#: utils/misc/guc_tables.c:3080 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Bakgrundsskrivarens maximala antal LRU-sidor som flush:as per omgång." -#: utils/misc/guc_tables.c:2971 +#: utils/misc/guc_tables.c:3103 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Antal samtidiga förfrågningar som kan effektivt kan hanteras av disksystemet." -#: utils/misc/guc_tables.c:2985 -msgid "A variant of effective_io_concurrency that is used for maintenance work." -msgstr "En variant av effective_io_concurrency som används för underhållsarbete." +#: utils/misc/guc_tables.c:3117 +msgid "A variant of \"effective_io_concurrency\" that is used for maintenance work." +msgstr "En variant av \"effective_io_concurrency\" som används för underhållsarbete." -#: utils/misc/guc_tables.c:3011 +#: utils/misc/guc_tables.c:3132 +msgid "Limit on the size of data reads and writes." +msgstr "Begränsa storlek på data för läsning och skrivning." + +#: utils/misc/guc_tables.c:3157 msgid "Maximum number of concurrent worker processes." msgstr "Maximalt antal samtidiga arbetsprocesser." -#: utils/misc/guc_tables.c:3023 +#: utils/misc/guc_tables.c:3169 msgid "Maximum number of logical replication worker processes." msgstr "Maximalt antal arbetsprocesser för logisk replikering." -#: utils/misc/guc_tables.c:3035 +#: utils/misc/guc_tables.c:3181 msgid "Maximum number of table synchronization workers per subscription." msgstr "Maximalt antal arbetare som synkroniserar tabeller per prenumeration." -#: utils/misc/guc_tables.c:3047 +#: utils/misc/guc_tables.c:3193 msgid "Maximum number of parallel apply workers per subscription." msgstr "Maximalt antal parallella arbetare som applicerar ändring per prenumeration." -#: utils/misc/guc_tables.c:3057 +#: utils/misc/guc_tables.c:3203 msgid "Sets the amount of time to wait before forcing log file rotation." msgstr "Sätter tiden vi väntar innan vi tvingar rotering av loggfil." -#: utils/misc/guc_tables.c:3069 +#: utils/misc/guc_tables.c:3215 msgid "Sets the maximum size a log file can reach before being rotated." msgstr "Sätter maximalt storlek en loggfil kan bli innan vi tvingar rotering." -#: utils/misc/guc_tables.c:3081 +#: utils/misc/guc_tables.c:3227 msgid "Shows the maximum number of function arguments." msgstr "Visar maximalt antal funktionsargument." -#: utils/misc/guc_tables.c:3092 +#: utils/misc/guc_tables.c:3238 msgid "Shows the maximum number of index keys." msgstr "Visar maximalt antal indexnycklar." -#: utils/misc/guc_tables.c:3103 +#: utils/misc/guc_tables.c:3249 msgid "Shows the maximum identifier length." msgstr "Visar den maximala identifierarlängden." -#: utils/misc/guc_tables.c:3114 +#: utils/misc/guc_tables.c:3260 msgid "Shows the size of a disk block." msgstr "Visar storleken på ett diskblock." -#: utils/misc/guc_tables.c:3125 +#: utils/misc/guc_tables.c:3271 msgid "Shows the number of pages per disk file." msgstr "Visar antal sidor per diskfil." -#: utils/misc/guc_tables.c:3136 +#: utils/misc/guc_tables.c:3282 msgid "Shows the block size in the write ahead log." msgstr "Visar blockstorleken i the write-ahead-loggen." -#: utils/misc/guc_tables.c:3147 +#: utils/misc/guc_tables.c:3293 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Sätter väntetiden innan databasen försöker ta emot WAL efter ett misslyckat försök." -#: utils/misc/guc_tables.c:3159 +#: utils/misc/guc_tables.c:3305 msgid "Shows the size of write ahead log segments." msgstr "Visar storleken på write-ahead-log-segment." -#: utils/misc/guc_tables.c:3172 +#: utils/misc/guc_tables.c:3318 +msgid "Time for which WAL summary files should be kept." +msgstr "Tid som filer för WAL-summering skall behållas." + +#: utils/misc/guc_tables.c:3331 msgid "Time to sleep between autovacuum runs." msgstr "Tid att sova mellan körningar av autovacuum." -#: utils/misc/guc_tables.c:3182 +#: utils/misc/guc_tables.c:3341 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Minst antal tupel-uppdateringar eller raderingar innan vacuum." -#: utils/misc/guc_tables.c:3191 +#: utils/misc/guc_tables.c:3350 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Minsta antal tupel-insert innnan vacuum eller -1 för att stänga av insert-vacuum." -#: utils/misc/guc_tables.c:3200 +#: utils/misc/guc_tables.c:3359 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Minsta antal tupel-insert, -update eller -delete innan analyze." -#: utils/misc/guc_tables.c:3210 +#: utils/misc/guc_tables.c:3369 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Ålder då autovacuum körs på en tabell för att förhindra wrapaound på transaktions-ID." -#: utils/misc/guc_tables.c:3222 +#: utils/misc/guc_tables.c:3381 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Ålder på multixact då autovacuum körs på en tabell för att förhindra wrapaound på multixact." -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3391 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Sätter maximalt antal samtidigt körande arbetsprocesser för autovacuum." -#: utils/misc/guc_tables.c:3242 +#: utils/misc/guc_tables.c:3401 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Sätter maximalt antal parallella processer per underhållsoperation." -#: utils/misc/guc_tables.c:3252 +#: utils/misc/guc_tables.c:3411 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Sätter maximalt antal parallella processer per exekveringsnod." -#: utils/misc/guc_tables.c:3263 +#: utils/misc/guc_tables.c:3422 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Sätter maximalt antal parallella arbetare som kan vara aktiva på en gång." -#: utils/misc/guc_tables.c:3274 +#: utils/misc/guc_tables.c:3433 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Sätter maximalt minne som kan användas av varje arbetsprocess för autovacuum." -#: utils/misc/guc_tables.c:3285 -msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." -msgstr "Tid innan ett snapshot är för gammalt för att läsa sidor som ändrats efter snapshot:en tagits." - -#: utils/misc/guc_tables.c:3286 -msgid "A value of -1 disables this feature." -msgstr "Värdet -1 stänger av denna funktion." - -#: utils/misc/guc_tables.c:3296 +#: utils/misc/guc_tables.c:3444 msgid "Time between issuing TCP keepalives." msgstr "Tid mellan skickande av TCP-keepalive." -#: utils/misc/guc_tables.c:3297 utils/misc/guc_tables.c:3308 -#: utils/misc/guc_tables.c:3432 +#: 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 "Värdet 0 anger systemets standardvärde." -#: utils/misc/guc_tables.c:3307 +#: utils/misc/guc_tables.c:3455 msgid "Time between TCP keepalive retransmits." msgstr "Tid mellan omsändning av TCP-keepalive." -#: utils/misc/guc_tables.c:3318 +#: utils/misc/guc_tables.c:3466 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSL-förhandling stöds inte längre; denna kan bara vara 0." -#: utils/misc/guc_tables.c:3329 +#: utils/misc/guc_tables.c:3477 msgid "Maximum number of TCP keepalive retransmits." msgstr "Maximalt antal omsändningar av TCP-keepalive." -#: utils/misc/guc_tables.c:3330 +#: 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 "Atalet keepalive-omsändingar i rad som kan försvinna innan en anslutning anses vara död. Värdet 0 betyder systemstandardvärdet." -#: utils/misc/guc_tables.c:3341 +#: utils/misc/guc_tables.c:3489 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Sätter maximalt tillåtna resultat för exakt sökning med GIN." -#: utils/misc/guc_tables.c:3352 +#: utils/misc/guc_tables.c:3500 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Sätter planerarens antagande om totala storleken på datacachen." -#: utils/misc/guc_tables.c:3353 +#: 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 "Det är totala storleken på cachen (kernelcache och delade buffertar) som användas för PostgreSQLs datafiler. Det mäts i disksidor som normalt är 8 kb styck." -#: utils/misc/guc_tables.c:3364 +#: utils/misc/guc_tables.c:3512 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Sätter minsta mängd tabelldata för en parallell skanning." -#: utils/misc/guc_tables.c:3365 +#: 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 "Om planeraren beräknar att den kommer läsa för få tabellsidor för att nå denna gräns så kommer den inte försöka med en parallell skanning." -#: utils/misc/guc_tables.c:3375 +#: utils/misc/guc_tables.c:3523 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Anger minimala mängden indexdata för en parallell scan." -#: utils/misc/guc_tables.c:3376 +#: 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 "Om planeraren beräknar att den kommer läsa för få indexsidor för att nå denna gräns så kommer den inte försöka med en parallell skanning." -#: utils/misc/guc_tables.c:3387 +#: utils/misc/guc_tables.c:3535 msgid "Shows the server version as an integer." msgstr "Visar serverns version som ett heltal." -#: utils/misc/guc_tables.c:3398 +#: utils/misc/guc_tables.c:3546 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Logga användning av temporära filer som är större än detta antal kilobyte." -#: utils/misc/guc_tables.c:3399 +#: utils/misc/guc_tables.c:3547 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Noll loggar alla filer. Standard är -1 (stänger av denna finess)." -#: utils/misc/guc_tables.c:3409 +#: utils/misc/guc_tables.c:3557 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Ställer in storleken reserverad för pg_stat_activity.query, i byte." -#: utils/misc/guc_tables.c:3420 +#: utils/misc/guc_tables.c:3568 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Sätter maximal storlek på väntelistan för GIN-index." -#: utils/misc/guc_tables.c:3431 +#: utils/misc/guc_tables.c:3579 msgid "TCP user timeout." msgstr "Användartimeout för TCP." -#: utils/misc/guc_tables.c:3442 +#: utils/misc/guc_tables.c:3590 msgid "The size of huge page that should be requested." msgstr "Storleken på stora sidor skall hämtas." -#: utils/misc/guc_tables.c:3453 +#: utils/misc/guc_tables.c:3601 msgid "Aggressively flush system caches for debugging purposes." msgstr "Flush:a systemcache aggressivt för att förenkla debugging." -#: utils/misc/guc_tables.c:3476 +#: utils/misc/guc_tables.c:3624 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Sätter tidsintervall mellan test för nedkoppling när frågor körs." -#: utils/misc/guc_tables.c:3487 +#: utils/misc/guc_tables.c:3635 msgid "Time between progress updates for long-running startup operations." msgstr "Tid mellan uppdatering av progress för startupoperationer som kör länge." -#: utils/misc/guc_tables.c:3489 +#: utils/misc/guc_tables.c:3637 msgid "0 turns this feature off." msgstr "0 stänger av denna finess." -#: utils/misc/guc_tables.c:3499 +#: utils/misc/guc_tables.c:3647 msgid "Sets the iteration count for SCRAM secret generation." msgstr "Sätter iterationsräknare för generering av SCRAM-hemlighet." -#: utils/misc/guc_tables.c:3519 +#: utils/misc/guc_tables.c:3667 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Ställer in planerarens estimat av kostnaden för att hämta en disksida sekvensiellt." -#: utils/misc/guc_tables.c:3530 +#: utils/misc/guc_tables.c:3678 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Ställer in planerarens estimat av kostnaden för att hämta en disksida icke-sekvensiellt." -#: utils/misc/guc_tables.c:3541 +#: utils/misc/guc_tables.c:3689 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Ställer in planerarens estimat av kostnaden för att processa varje tupel (rad)." -#: utils/misc/guc_tables.c:3552 +#: 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 "Sätter planerarens kostnadsuppskattning för att processa varje indexpost under en indexskanning." -#: utils/misc/guc_tables.c:3563 +#: utils/misc/guc_tables.c:3711 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Sätter planerarens kostnadsuppskattning för att processa varje operator- eller funktions-anrop." -#: utils/misc/guc_tables.c:3574 +#: 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 "Sätter planerarens kostnadsuppskattning för att skicka varje tupel (rad) från en arbetare till ledar-backend:en. " -#: utils/misc/guc_tables.c:3585 +#: utils/misc/guc_tables.c:3733 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Sätter planerarens kostnadsuppskattning för att starta upp en arbetsprocess för en parallell fråga." -#: utils/misc/guc_tables.c:3597 +#: utils/misc/guc_tables.c:3745 msgid "Perform JIT compilation if query is more expensive." msgstr "Utför JIT-kompilering om frågan är dyrare." -#: utils/misc/guc_tables.c:3598 +#: utils/misc/guc_tables.c:3746 msgid "-1 disables JIT compilation." msgstr "-1 stänger av JIT-kompilering." -#: utils/misc/guc_tables.c:3608 +#: utils/misc/guc_tables.c:3756 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Optimera JIT-kompilerade funktioner om frågan är dyrare." -#: utils/misc/guc_tables.c:3609 +#: utils/misc/guc_tables.c:3757 msgid "-1 disables optimization." msgstr "-1 stänger av optimering." -#: utils/misc/guc_tables.c:3619 +#: utils/misc/guc_tables.c:3767 msgid "Perform JIT inlining if query is more expensive." msgstr "Utför JIT-\"inlining\" om frågan är dyrare." -#: utils/misc/guc_tables.c:3620 +#: utils/misc/guc_tables.c:3768 msgid "-1 disables inlining." msgstr "-1 stänger av \"inlining\"" -#: utils/misc/guc_tables.c:3630 +#: 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 "Sätter planerarens uppskattning av hur stor del av markörens rader som kommer hämtas. " -#: utils/misc/guc_tables.c:3642 +#: utils/misc/guc_tables.c:3790 msgid "Sets the planner's estimate of the average size of a recursive query's working table." msgstr "Sätter planerarens uppskattning av genomsnittliga storleken på en rekursiv frågas arbetstabell." -#: utils/misc/guc_tables.c:3654 +#: utils/misc/guc_tables.c:3802 msgid "GEQO: selective pressure within the population." msgstr "GEQO: selektionstryck inom populationen." -#: utils/misc/guc_tables.c:3665 +#: utils/misc/guc_tables.c:3813 msgid "GEQO: seed for random path selection." msgstr "GEQO: slumptalsfrö för val av slumpad sökväg." -#: utils/misc/guc_tables.c:3676 -msgid "Multiple of work_mem to use for hash tables." -msgstr "Multipel av work_mem för att använda till hash-tabeller." +#: utils/misc/guc_tables.c:3824 +msgid "Multiple of \"work_mem\" to use for hash tables." +msgstr "Multipel av \"work_mem\" för att använda till hash-tabeller." -#: utils/misc/guc_tables.c:3687 +#: utils/misc/guc_tables.c:3835 msgid "Multiple of the average buffer usage to free per round." msgstr "Multipel av genomsnittlig bufferanvändning som frias per runda." -#: utils/misc/guc_tables.c:3697 +#: utils/misc/guc_tables.c:3845 msgid "Sets the seed for random-number generation." msgstr "Sätter fröet för slumptalsgeneratorn." -#: utils/misc/guc_tables.c:3708 +#: utils/misc/guc_tables.c:3856 msgid "Vacuum cost delay in milliseconds." msgstr "Städkostfördröjning i millisekunder." -#: utils/misc/guc_tables.c:3719 +#: utils/misc/guc_tables.c:3867 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Städkostfördröjning i millisekunder, för autovacuum." -#: utils/misc/guc_tables.c:3730 +#: utils/misc/guc_tables.c:3878 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Antalet tupeluppdateringar eller borttagningar innan vacuum relativt reltuples." -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3888 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Antal tupelinsättningar innan vacuum relativt reltuples." -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3898 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Antalet tupelinsättningar, uppdateringar eller borttagningar innan analyze relativt reltuples." -#: utils/misc/guc_tables.c:3760 +#: utils/misc/guc_tables.c:3908 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Tid lagd på att flusha nedsmutsade buffrar vid checkpoint relativt checkpoint-intervallet." -#: utils/misc/guc_tables.c:3770 -msgid "Fraction of statements exceeding log_min_duration_sample to be logged." -msgstr "Bråkdel av satser som överskrider log_min_duration_sample som skall loggas." +#: utils/misc/guc_tables.c:3918 +msgid "Fraction of statements exceeding \"log_min_duration_sample\" to be logged." +msgstr "Bråkdel av satser som överskrider \"log_min_duration_sample\" som skall loggas." -#: utils/misc/guc_tables.c:3771 +#: utils/misc/guc_tables.c:3919 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Använd ett värde mellan 0.0 (logga aldrig) och 1.0 (logga alltid)." -#: utils/misc/guc_tables.c:3780 +#: utils/misc/guc_tables.c:3928 msgid "Sets the fraction of transactions from which to log all statements." msgstr "Ställer in bråkdel av transaktionerna från vilka alla satser skall loggas." -#: utils/misc/guc_tables.c:3781 +#: 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 "Använd ett värde mellan 0.0 (logga aldrig) till 1.0 (logga all satser i alla transaktioner)." -#: utils/misc/guc_tables.c:3800 +#: utils/misc/guc_tables.c:3948 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Sätter shell-kommandot som kommer anropas för att arkivera en WAL-fil." -#: utils/misc/guc_tables.c:3801 +#: utils/misc/guc_tables.c:3949 msgid "This is used only if \"archive_library\" is not set." msgstr "Detta används enbart om \"archive_library\" inte är satt." -#: utils/misc/guc_tables.c:3810 +#: utils/misc/guc_tables.c:3958 msgid "Sets the library that will be called to archive a WAL file." msgstr "Sätter biblioteket som kommer anropas för att arkivera en WAL-fil." -#: utils/misc/guc_tables.c:3811 +#: utils/misc/guc_tables.c:3959 msgid "An empty string indicates that \"archive_command\" should be used." msgstr "En tom sträng betyder att \"archive_command\" skall användas." -#: utils/misc/guc_tables.c:3820 +#: utils/misc/guc_tables.c:3968 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Sätter shell-kommandot som kommer anropas för att få en arkiverad WAL-fil." -#: utils/misc/guc_tables.c:3830 +#: utils/misc/guc_tables.c:3978 msgid "Sets the shell command that will be executed at every restart point." msgstr "Sätter shell-kommandot som kommer anropas vid varje omstartspunkt." -#: utils/misc/guc_tables.c:3840 +#: utils/misc/guc_tables.c:3988 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Sätter shell-kommandot som kommer anropas en gång i slutet av en återställning." -#: utils/misc/guc_tables.c:3850 +#: utils/misc/guc_tables.c:3998 msgid "Specifies the timeline to recover into." msgstr "Anger tidslinjen att återställa till." -#: utils/misc/guc_tables.c:3860 +#: utils/misc/guc_tables.c:4008 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Sätt till \"immediate\" för att avsluta återställning så snart ett konsistent tillstånd uppnås." -#: utils/misc/guc_tables.c:3869 +#: utils/misc/guc_tables.c:4017 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Sätter transaktions-ID som återställning kommer gå till." -#: utils/misc/guc_tables.c:3878 +#: utils/misc/guc_tables.c:4026 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Sätter tidsstämpel som återställning kommer gå till." -#: utils/misc/guc_tables.c:3887 +#: utils/misc/guc_tables.c:4035 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Sätter namngiven återställningspunkt som återställning kommer gå till." -#: utils/misc/guc_tables.c:3896 +#: utils/misc/guc_tables.c:4044 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Sätter LSN för write-ahead-logg-position som återställning kommer få till." -#: utils/misc/guc_tables.c:3906 +#: utils/misc/guc_tables.c:4054 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Sätter anslutningssträng som anvönds för att ansluta till skickande server." -#: utils/misc/guc_tables.c:3917 +#: utils/misc/guc_tables.c:4065 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Sätter namnet på replikeringsslotten som skall användas av den skickande servern." -#: utils/misc/guc_tables.c:3927 +#: utils/misc/guc_tables.c:4075 msgid "Sets the client's character set encoding." msgstr "Ställer in klientens teckenkodning." -#: utils/misc/guc_tables.c:3938 +#: utils/misc/guc_tables.c:4086 msgid "Controls information prefixed to each log line." msgstr "Styr information prefixat till varje loggrad." -#: utils/misc/guc_tables.c:3939 +#: utils/misc/guc_tables.c:4087 msgid "If blank, no prefix is used." msgstr "Om tom så används inget prefix." -#: utils/misc/guc_tables.c:3948 +#: utils/misc/guc_tables.c:4096 msgid "Sets the time zone to use in log messages." msgstr "Sätter tidszonen som används i loggmeddelanden." -#: utils/misc/guc_tables.c:3958 +#: utils/misc/guc_tables.c:4106 msgid "Sets the display format for date and time values." msgstr "Sätter displayformat för datum och tidvärden." -#: utils/misc/guc_tables.c:3959 +#: utils/misc/guc_tables.c:4107 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Styr också tolkning av tvetydig datumindata." -#: utils/misc/guc_tables.c:3970 +#: utils/misc/guc_tables.c:4118 msgid "Sets the default table access method for new tables." msgstr "Ställer in standard tabellaccessmetod för nya tabeller." -#: utils/misc/guc_tables.c:3981 +#: utils/misc/guc_tables.c:4129 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Ställer in standard tabellutrymme där tabeller och index skapas." -#: utils/misc/guc_tables.c:3982 +#: utils/misc/guc_tables.c:4130 msgid "An empty string selects the database's default tablespace." msgstr "En tom sträng väljer databasens standardtabellutrymme." -#: utils/misc/guc_tables.c:3992 +#: utils/misc/guc_tables.c:4140 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Ställer in tablespace för temporära tabeller och sorteringsfiler." -#: utils/misc/guc_tables.c:4003 +#: utils/misc/guc_tables.c:4151 msgid "Sets whether a CREATEROLE user automatically grants the role to themselves, and with which options." msgstr "Sätter hurvida en CREATEROLE-användare automatiskt får rollen själva, och med vilka flaggor." -#: utils/misc/guc_tables.c:4015 +#: utils/misc/guc_tables.c:4163 msgid "Sets the path for dynamically loadable modules." msgstr "Sätter sökvägen till dynamiskt laddade moduler." -#: utils/misc/guc_tables.c:4016 +#: 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 "Om en dynamiskt laddad modul behöver öppnas och det angivna namnet inte har en katalogkomponent (dvs, namnet inte innehåller snedstreck) så kommer systemet använda denna sökväg för filen." -#: utils/misc/guc_tables.c:4029 +#: utils/misc/guc_tables.c:4177 msgid "Sets the location of the Kerberos server key file." msgstr "Ställer in platsen för Kerberos servernyckelfil." -#: utils/misc/guc_tables.c:4040 +#: utils/misc/guc_tables.c:4188 msgid "Sets the Bonjour service name." msgstr "Sätter Bonjour-tjänstens namn." -#: utils/misc/guc_tables.c:4050 +#: utils/misc/guc_tables.c:4198 msgid "Sets the language in which messages are displayed." msgstr "Sätter språket som meddelanden visas i." -#: utils/misc/guc_tables.c:4060 +#: utils/misc/guc_tables.c:4208 msgid "Sets the locale for formatting monetary amounts." msgstr "Sätter lokalen för att formattera monetära belopp." -#: utils/misc/guc_tables.c:4070 +#: utils/misc/guc_tables.c:4218 msgid "Sets the locale for formatting numbers." msgstr "Ställer in lokalen för att formattera nummer." -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4228 msgid "Sets the locale for formatting date and time values." msgstr "Sätter lokalen för att formattera datum och tider." -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4238 msgid "Lists shared libraries to preload into each backend." msgstr "Listar delade bibliotek som skall förladdas i varje backend." -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4249 msgid "Lists shared libraries to preload into server." msgstr "Listar delade bibliotek som skall förladdas i servern." -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4260 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Listar ej priviligerade delade bibliotek som förladdas in i varje backend." -#: utils/misc/guc_tables.c:4123 +#: utils/misc/guc_tables.c:4271 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Sätter schemats sökordning för namn som inte är schema-prefixade." -#: utils/misc/guc_tables.c:4135 +#: utils/misc/guc_tables.c:4283 msgid "Shows the server (database) character set encoding." msgstr "Visar serverns (databasens) teckenkodning." -#: utils/misc/guc_tables.c:4147 +#: utils/misc/guc_tables.c:4295 msgid "Shows the server version." msgstr "Visar serverversionen" -#: utils/misc/guc_tables.c:4159 +#: utils/misc/guc_tables.c:4307 msgid "Sets the current role." msgstr "Ställer in den aktiva rollen." -#: utils/misc/guc_tables.c:4171 +#: utils/misc/guc_tables.c:4319 msgid "Sets the session user name." msgstr "Sätter sessionens användarnamn." -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4330 msgid "Sets the destination for server log output." msgstr "Sätter serverloggens destination." -#: utils/misc/guc_tables.c:4183 +#: utils/misc/guc_tables.c:4331 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\", and \"eventlog\", depending on the platform." msgstr "Giltiga värden är kombinationer av \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\" och \"eventlog\", beroende på plattform." -#: utils/misc/guc_tables.c:4194 +#: utils/misc/guc_tables.c:4342 msgid "Sets the destination directory for log files." msgstr "Sätter destinationskatalogen för loggfiler." -#: utils/misc/guc_tables.c:4195 +#: utils/misc/guc_tables.c:4343 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Kan anges relativt datakatalogen eller som en absolut sökväg." -#: utils/misc/guc_tables.c:4205 +#: utils/misc/guc_tables.c:4353 msgid "Sets the file name pattern for log files." msgstr "Sätter filnamnsmallen för loggfiler." -#: utils/misc/guc_tables.c:4216 +#: utils/misc/guc_tables.c:4364 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Sätter programnamnet som används för att identifiera PostgreSQLs meddelanden i syslog." -#: utils/misc/guc_tables.c:4227 +#: utils/misc/guc_tables.c:4375 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Sätter applikationsnamnet som används för att identifiera PostgreSQLs meddelanden i händelseloggen." -#: utils/misc/guc_tables.c:4238 +#: utils/misc/guc_tables.c:4386 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Ställer in tidszon för visande och tolkande av tidsstämplar." -#: utils/misc/guc_tables.c:4248 +#: utils/misc/guc_tables.c:4396 msgid "Selects a file of time zone abbreviations." msgstr "Väljer en fil för tidszonsförkortningar." -#: utils/misc/guc_tables.c:4258 +#: utils/misc/guc_tables.c:4406 msgid "Sets the owning group of the Unix-domain socket." msgstr "Sätter ägande grupp för Unix-domainuttaget (socket)." -#: utils/misc/guc_tables.c:4259 +#: utils/misc/guc_tables.c:4407 msgid "The owning user of the socket is always the user that starts the server." msgstr "Ägaren av uttaget (socker) är alltid användaren som startar servern." -#: utils/misc/guc_tables.c:4269 +#: utils/misc/guc_tables.c:4417 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Ställer in kataloger där Unix-domän-uttag (socket) kommer skapas." -#: utils/misc/guc_tables.c:4280 +#: utils/misc/guc_tables.c:4428 msgid "Sets the host name or IP address(es) to listen to." msgstr "Sätter värdnamn eller IP-adress(er) att lyssna på." -#: utils/misc/guc_tables.c:4295 +#: utils/misc/guc_tables.c:4443 msgid "Sets the server's data directory." msgstr "Ställer in serverns datakatalog." -#: utils/misc/guc_tables.c:4306 +#: utils/misc/guc_tables.c:4454 msgid "Sets the server's main configuration file." msgstr "Sätter serverns huvudkonfigurationsfil." -#: utils/misc/guc_tables.c:4317 +#: utils/misc/guc_tables.c:4465 msgid "Sets the server's \"hba\" configuration file." msgstr "Sätter serverns \"hba\"-konfigurationsfil." -#: utils/misc/guc_tables.c:4328 +#: utils/misc/guc_tables.c:4476 msgid "Sets the server's \"ident\" configuration file." msgstr "Sätter serverns \"ident\"-konfigurationsfil." -#: utils/misc/guc_tables.c:4339 +#: utils/misc/guc_tables.c:4487 msgid "Writes the postmaster PID to the specified file." msgstr "Skriver postmaster-PID till angiven fil." -#: utils/misc/guc_tables.c:4350 +#: utils/misc/guc_tables.c:4498 msgid "Shows the name of the SSL library." msgstr "Visar namnet på SSL-biblioteket." -#: utils/misc/guc_tables.c:4365 +#: utils/misc/guc_tables.c:4513 msgid "Location of the SSL server certificate file." msgstr "Plats för serverns SSL-certifikatfil." -#: utils/misc/guc_tables.c:4375 +#: utils/misc/guc_tables.c:4523 msgid "Location of the SSL server private key file." msgstr "Plats för serverns privata SSL-nyckelfil." -#: utils/misc/guc_tables.c:4385 +#: utils/misc/guc_tables.c:4533 msgid "Location of the SSL certificate authority file." msgstr "Plats för SSL-certifikats auktoritetsfil." -#: utils/misc/guc_tables.c:4395 +#: utils/misc/guc_tables.c:4543 msgid "Location of the SSL certificate revocation list file." msgstr "Plats för SSL-certifikats återkallningsfil." -#: utils/misc/guc_tables.c:4405 +#: utils/misc/guc_tables.c:4553 msgid "Location of the SSL certificate revocation list directory." msgstr "Plats av katalog för SSL-certifikats återkallningslistor." -#: utils/misc/guc_tables.c:4415 +#: utils/misc/guc_tables.c:4563 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Antalet synkrona standby och en lista med namn på potentiellt synkrona sådana." -#: utils/misc/guc_tables.c:4426 +#: utils/misc/guc_tables.c:4574 msgid "Sets default text search configuration." msgstr "Ställer in standard textsökkonfiguration." -#: utils/misc/guc_tables.c:4436 +#: utils/misc/guc_tables.c:4584 msgid "Sets the list of allowed SSL ciphers." msgstr "Ställer in listan med tillåtna SSL-krypton." -#: utils/misc/guc_tables.c:4451 +#: utils/misc/guc_tables.c:4599 msgid "Sets the curve to use for ECDH." msgstr "Ställer in kurvan att använda för ECDH." -#: utils/misc/guc_tables.c:4466 +#: utils/misc/guc_tables.c:4614 msgid "Location of the SSL DH parameters file." msgstr "Plats för SSL DH-parameterfil." -#: utils/misc/guc_tables.c:4477 +#: utils/misc/guc_tables.c:4625 msgid "Command to obtain passphrases for SSL." msgstr "Kommando för att hämta lösenfraser för SSL." -#: utils/misc/guc_tables.c:4488 +#: utils/misc/guc_tables.c:4636 msgid "Sets the application name to be reported in statistics and logs." msgstr "Sätter applikationsnamn som rapporteras i statistik och loggar." -#: utils/misc/guc_tables.c:4499 +#: utils/misc/guc_tables.c:4647 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Sätter namnet på klustret som inkluderas i processtiteln." -#: utils/misc/guc_tables.c:4510 +#: utils/misc/guc_tables.c:4658 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Sätter WAL-resurshanterare som WAL-konsistenskontoller görs med." -#: utils/misc/guc_tables.c:4511 +#: 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 "Hela sidkopior kommer loggas för alla datablock och kontrolleras mot resultatet av en WAL-uppspelning." -#: utils/misc/guc_tables.c:4521 +#: utils/misc/guc_tables.c:4669 msgid "JIT provider to use." msgstr "JIT-leverantör som används." -#: utils/misc/guc_tables.c:4532 +#: utils/misc/guc_tables.c:4680 msgid "Log backtrace for errors in these functions." msgstr "Loggar backtrace vid fel i dessa funktioner." -#: utils/misc/guc_tables.c:4543 +#: utils/misc/guc_tables.c:4691 msgid "Use direct I/O for file access." msgstr "Använd direct-I/O för filaccess." -#: utils/misc/guc_tables.c:4563 +#: utils/misc/guc_tables.c:4702 +msgid "Lists streaming replication standby server replication slot names that logical WAL sender processes will wait for." +msgstr "Listar replikeringsslotnamn på server för replikering-standby som processen för skickande av logisk WAL väntar på." + +#: 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 "Processen för skickande av logisk WAL skickar avkodade ändringar till utdata-plugin:er enbart efter att de angivna replikeringsslottarna bekräftat att de tagit emot WAL." + +#: utils/misc/guc_tables.c:4716 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "Förhindrar access till icke-system-relationer av angivna sorter." + +#: utils/misc/guc_tables.c:4736 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Anger hurvida \"\\'\" tillåts i sträng-literaler." -#: utils/misc/guc_tables.c:4573 +#: utils/misc/guc_tables.c:4746 msgid "Sets the output format for bytea." msgstr "Ställer in output-format för bytea." -#: utils/misc/guc_tables.c:4583 +#: utils/misc/guc_tables.c:4756 msgid "Sets the message levels that are sent to the client." msgstr "Ställer in meddelandenivåer som skickas till klienten." -#: utils/misc/guc_tables.c:4584 utils/misc/guc_tables.c:4680 -#: utils/misc/guc_tables.c:4691 utils/misc/guc_tables.c:4763 +#: 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 "Varje nivå inkluderar de efterföljande nivåerna. Ju senare nivå destå färre meddlanden skickas." -#: utils/misc/guc_tables.c:4594 +#: utils/misc/guc_tables.c:4767 msgid "Enables in-core computation of query identifiers." msgstr "Slår på intern uträkning av identifierare för frågor." -#: utils/misc/guc_tables.c:4604 +#: utils/misc/guc_tables.c:4777 msgid "Enables the planner to use constraints to optimize queries." msgstr "Slår på planerarens användning av integritetsvillkor för att optimera frågor." -#: utils/misc/guc_tables.c:4605 +#: utils/misc/guc_tables.c:4778 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Tabellskanningar kommer hoppas över om dess integritetsvillkor garanterar att inga rader komma matchas av frågan." -#: utils/misc/guc_tables.c:4616 +#: utils/misc/guc_tables.c:4789 msgid "Sets the default compression method for compressible values." msgstr "Ställer in standard komprimeringsmetod för komprimeringsbara värden." -#: utils/misc/guc_tables.c:4627 +#: utils/misc/guc_tables.c:4800 msgid "Sets the transaction isolation level of each new transaction." msgstr "Ställer in isolationsnivån för nya transaktioner." -#: utils/misc/guc_tables.c:4637 +#: utils/misc/guc_tables.c:4810 msgid "Sets the current transaction's isolation level." msgstr "Sätter den aktuella transaktionsisolationsnivån." -#: utils/misc/guc_tables.c:4648 +#: utils/misc/guc_tables.c:4821 msgid "Sets the display format for interval values." msgstr "Ställer in visningsformat för intervallvärden." -#: utils/misc/guc_tables.c:4659 +#: utils/misc/guc_tables.c:4832 msgid "Log level for reporting invalid ICU locale strings." msgstr "Loggnivå för rapportering av ogiltiga ICU-lokalsträngar." -#: utils/misc/guc_tables.c:4669 +#: utils/misc/guc_tables.c:4842 msgid "Sets the verbosity of logged messages." msgstr "Ställer in pratighet för loggade meddelanden." -#: utils/misc/guc_tables.c:4679 +#: utils/misc/guc_tables.c:4852 msgid "Sets the message levels that are logged." msgstr "Ställer in meddelandenivåer som loggas." -#: utils/misc/guc_tables.c:4690 +#: utils/misc/guc_tables.c:4863 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Gör att alla satser som genererar fel vid eller över denna nivå kommer loggas." -#: utils/misc/guc_tables.c:4701 +#: utils/misc/guc_tables.c:4874 msgid "Sets the type of statements logged." msgstr "Ställer in vilken sorts satser som loggas." -#: utils/misc/guc_tables.c:4711 +#: utils/misc/guc_tables.c:4884 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Ställer in syslog-\"facility\" som används när syslog är påslagen." -#: utils/misc/guc_tables.c:4722 +#: utils/misc/guc_tables.c:4895 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Sätter sessionens beteende för triggrar och omskrivningsregler." -#: utils/misc/guc_tables.c:4732 +#: utils/misc/guc_tables.c:4905 msgid "Sets the current transaction's synchronization level." msgstr "Ställer in den nuvarande transaktionens synkroniseringsnivå." -#: utils/misc/guc_tables.c:4742 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Tillåter arkivering av WAL-filer med hjälp av archive_command." +#: utils/misc/guc_tables.c:4915 +msgid "Allows archiving of WAL files using \"archive_command\"." +msgstr "Tillåter arkivering av WAL-filer med hjälp av \"archive_command\"." -#: utils/misc/guc_tables.c:4752 +#: utils/misc/guc_tables.c:4925 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Sätter handling som skall utföras när återställningsmål nås." -#: utils/misc/guc_tables.c:4762 -msgid "Enables logging of recovery-related debugging information." -msgstr "Slår på loggning av återställningsrelaterad debug-information." - -#: utils/misc/guc_tables.c:4779 +#: utils/misc/guc_tables.c:4935 msgid "Collects function-level statistics on database activity." msgstr "Samlar in statistik på funktionsnivå över databasaktivitet." -#: utils/misc/guc_tables.c:4790 +#: utils/misc/guc_tables.c:4946 msgid "Sets the consistency of accesses to statistics data." msgstr "Sätter konsistensinställning för accesser av statistikdata." -#: utils/misc/guc_tables.c:4800 +#: utils/misc/guc_tables.c:4956 msgid "Compresses full-page writes written in WAL file with specified method." msgstr "Komprimerar skrivning av hela sidor i WAL-filen med angiven metod." -#: utils/misc/guc_tables.c:4810 +#: utils/misc/guc_tables.c:4966 msgid "Sets the level of information written to the WAL." msgstr "Ställer in mängden information som skrivs till WAL." -#: utils/misc/guc_tables.c:4820 +#: utils/misc/guc_tables.c:4976 msgid "Selects the dynamic shared memory implementation used." msgstr "Väljer implementation som används för dynamiskt delat minne." -#: utils/misc/guc_tables.c:4830 +#: utils/misc/guc_tables.c:4986 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Väljer implementation för delat minne som används för det delade minnets huvudregionen." -#: utils/misc/guc_tables.c:4840 +#: utils/misc/guc_tables.c:4996 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Väljer metod för att tvinga WAL-uppdateringar till disk." -#: utils/misc/guc_tables.c:4850 +#: utils/misc/guc_tables.c:5006 msgid "Sets how binary values are to be encoded in XML." msgstr "Ställer in hur binära värden kodas i XML." -#: utils/misc/guc_tables.c:4860 +#: 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 "Anger hurvida XML-data vid implicit parsning och serialiseringsoperationer ses som dokument eller innehållsfragment." -#: utils/misc/guc_tables.c:4871 +#: utils/misc/guc_tables.c:5027 msgid "Use of huge pages on Linux or Windows." msgstr "Använd stora sidor på Linux resp. Windows." -#: utils/misc/guc_tables.c:4881 +#: utils/misc/guc_tables.c:5037 +msgid "Indicates the status of huge pages." +msgstr "Visas status för stora sidor." + +#: utils/misc/guc_tables.c:5048 msgid "Prefetch referenced blocks during recovery." msgstr "Prefetch:a refererade block vid återställning." -#: utils/misc/guc_tables.c:4882 +#: utils/misc/guc_tables.c:5049 msgid "Look ahead in the WAL to find references to uncached data." msgstr "Sök framåt i WAL för att hitta referenser till icke cache:ad data." -#: utils/misc/guc_tables.c:4891 +#: utils/misc/guc_tables.c:5058 msgid "Forces the planner's use parallel query nodes." msgstr "Tvingar planeraren att använda parallella frågenoder." -#: utils/misc/guc_tables.c:4892 +#: 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 "Detta är användbart för att testa infrastrukturen för parallella frågor genom att tvinga planeraren att generera planer som innehåller noder som skickar tupler mellan arbetare och huvudprocessen." -#: utils/misc/guc_tables.c:4904 +#: utils/misc/guc_tables.c:5071 msgid "Chooses the algorithm for encrypting passwords." msgstr "Väljer algoritm för att kryptera lösenord." -#: utils/misc/guc_tables.c:4914 +#: utils/misc/guc_tables.c:5081 msgid "Controls the planner's selection of custom or generic plan." msgstr "Styr planerarens användning av egendefinierad eller generell plan." -#: utils/misc/guc_tables.c:4915 +#: 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 "Preparerade satser kan ha egendefinierade och generella planer och planeraren kommer försöka välja den som är bäst. Detta kan anges att övertrumfa standardbeteendet." -#: utils/misc/guc_tables.c:4927 +#: utils/misc/guc_tables.c:5094 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Sätter minsta SSL/TLS-protokollversion som skall användas." -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:5106 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Sätter högsta SSL/TLS-protokollversion som skall användas." -#: utils/misc/guc_tables.c:4951 +#: utils/misc/guc_tables.c:5118 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "Ställer in metoden för att synkronisera datakatalogen innan kraschåterställning." -#: utils/misc/guc_tables.c:4960 +#: utils/misc/guc_tables.c:5127 msgid "Forces immediate streaming or serialization of changes in large transactions." msgstr "Tvingar omedelbar strömning eller serialisering av ändringar i stora transaktioner." -#: utils/misc/guc_tables.c:4961 +#: 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 "På publiceringssidan så tillåter detta strömning eller serialisering av varje ändring i den logiska kodningen. På prenumerationsstidan så tillåter det serialisering av alla ändringar till filer samt notifiering till den parallella appliceraren att läsa in och applicera dem i slutet av transaktionen." @@ -29585,8 +30820,8 @@ msgstr "På publiceringssidan så tillåter detta strömning eller serialisering msgid "internal error: unrecognized run-time parameter type\n" msgstr "internt fel: okänd parametertyp\n" -#: utils/misc/pg_controldata.c:48 utils/misc/pg_controldata.c:86 -#: utils/misc/pg_controldata.c:175 utils/misc/pg_controldata.c:214 +#: utils/misc/pg_controldata.c:50 utils/misc/pg_controldata.c:90 +#: utils/misc/pg_controldata.c:181 utils/misc/pg_controldata.c:222 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "uträknad CRC-checksumma matchar inte värdet som är lagrat i fil" @@ -29606,145 +30841,143 @@ msgstr "frågan påverkas av radsäkerhetspolicyn för tabell \"%s\"" msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "För att slå av policyn för tabellens ägare, använd ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:524 +#: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" msgstr "kan inte lägga till fler timeoutskäl" -#: utils/misc/tzparser.c:60 +#: utils/misc/tzparser.c:61 #, c-format msgid "time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d" msgstr "tidszonförkortningen \"%s\" är för lång (max %d tecken) i tidszonfilen \"%s\", rad %d" -#: utils/misc/tzparser.c:72 +#: utils/misc/tzparser.c:73 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "tidszonoffset %d är otanför giltigt intervall i tidszonfilen \"%s\", rad %d" -#: utils/misc/tzparser.c:111 +#: utils/misc/tzparser.c:112 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "tidszonförkortning saknas i tidszonfilen \"%s\", rad %d" -#: utils/misc/tzparser.c:120 +#: utils/misc/tzparser.c:121 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "tidszonoffset saknas i tidszonfilen \"%s\", rad %d" -#: utils/misc/tzparser.c:132 +#: utils/misc/tzparser.c:133 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "felaktigt nummer för tidszonsoffset i tidszonfilen \"%s\", rad %d" -#: utils/misc/tzparser.c:168 +#: utils/misc/tzparser.c:169 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "felaktig syntax i tidszonfilen \"%s\", rad %d" -#: utils/misc/tzparser.c:236 +#: utils/misc/tzparser.c:237 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "tidszonförkortningen \"%s\" är definierad flera gånger" -#: utils/misc/tzparser.c:238 +#: utils/misc/tzparser.c:239 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "Post i tidszonfilen \"%s\", rad %d, står i konflikt med post i filen \"%s\", rad %d." -#: utils/misc/tzparser.c:300 +#: utils/misc/tzparser.c:301 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "ogiltigt tidszonfilnamn: \"%s\"" -#: utils/misc/tzparser.c:313 +#: utils/misc/tzparser.c:314 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "tidszonfilens rekursiva maxtak överskridet i filen \"%s\"" -#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 +#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "kunde inte läsa tidszonfil \"%s\": %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:377 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "raden är för lång i tidszonfil \"%s\", rad %d" -#: utils/misc/tzparser.c:400 +#: utils/misc/tzparser.c:401 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE utan filnamn i tidszonfil \"%s\", rad %d" -#: utils/mmgr/aset.c:446 utils/mmgr/generation.c:206 utils/mmgr/slab.c:367 +#: utils/mmgr/aset.c:452 utils/mmgr/bump.c:184 utils/mmgr/generation.c:216 +#: utils/mmgr/slab.c:371 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Misslyckades vid skapande av minneskontext \"%s\"." -#: utils/mmgr/dsa.c:532 utils/mmgr/dsa.c:1346 +#: utils/mmgr/dsa.c:523 utils/mmgr/dsa.c:1364 #, c-format msgid "could not attach to dynamic shared area" msgstr "kunde inte ansluta till dynamisk delad area" -#: utils/mmgr/mcxt.c:1047 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1121 -#: utils/mmgr/mcxt.c:1159 utils/mmgr/mcxt.c:1247 utils/mmgr/mcxt.c:1278 -#: utils/mmgr/mcxt.c:1314 utils/mmgr/mcxt.c:1503 utils/mmgr/mcxt.c:1548 -#: utils/mmgr/mcxt.c:1605 +#: utils/mmgr/mcxt.c:1155 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Misslyckades med förfrågan av storlek %zu i minneskontext \"%s\"." -#: utils/mmgr/mcxt.c:1210 +#: utils/mmgr/mcxt.c:1299 #, c-format msgid "logging memory contexts of PID %d" msgstr "loggar minneskontext för PID %d" -#: utils/mmgr/portalmem.c:188 +#: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" msgstr "markör \"%s\" finns redan" -#: utils/mmgr/portalmem.c:192 +#: utils/mmgr/portalmem.c:191 #, c-format msgid "closing existing cursor \"%s\"" msgstr "stänger existerande markör \"%s\"" -#: utils/mmgr/portalmem.c:402 +#: utils/mmgr/portalmem.c:401 #, c-format msgid "portal \"%s\" cannot be run" msgstr "portal \"%s\" kan inte köras" -#: utils/mmgr/portalmem.c:480 +#: utils/mmgr/portalmem.c:479 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "kan inte ta bort fastsatt portal \"%s\"" -#: utils/mmgr/portalmem.c:488 +#: utils/mmgr/portalmem.c:487 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "kan inte ta bort aktiv portal \"%s\"" -#: utils/mmgr/portalmem.c:739 +#: utils/mmgr/portalmem.c:738 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "kan inte göra PREPARE på en transaktion som skapat en markör med WITH HOLD" -#: utils/mmgr/portalmem.c:1230 +#: utils/mmgr/portalmem.c:1232 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "kan inte utföra transaktionskommandon i en markörloop som inte är read-only" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %ld of temporary file" -msgstr "kunde inte söka (seek) till block %ld i temporärfil" +msgid "could not seek to block %lld of temporary file" +msgstr "kunde inte söka (seek) till block %lld i temporärfil" -#: utils/sort/sharedtuplestore.c:467 +#: utils/sort/sharedtuplestore.c:466 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "oväntad chunk i delad temporär lagringsfil för tupler" -#: utils/sort/sharedtuplestore.c:549 +#: utils/sort/sharedtuplestore.c:548 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "kunde inte söka (seek) till block %u i delad temporär lagringsfil för tupler" @@ -29754,17 +30987,17 @@ msgstr "kunde inte söka (seek) till block %u i delad temporär lagringsfil för msgid "cannot have more than %d runs for an external sort" msgstr "kan inte ha mer än %d körningar för en extern sortering" -#: utils/sort/tuplesortvariants.c:1363 +#: utils/sort/tuplesortvariants.c:1552 #, c-format msgid "could not create unique index \"%s\"" msgstr "kunde inte skapa unikt index \"%s\"" -#: utils/sort/tuplesortvariants.c:1365 +#: utils/sort/tuplesortvariants.c:1554 #, c-format msgid "Key %s is duplicated." msgstr "Nyckeln %s är duplicerad." -#: utils/sort/tuplesortvariants.c:1366 +#: utils/sort/tuplesortvariants.c:1555 #, c-format msgid "Duplicate keys exist." msgstr "Duplicerade nycklar existerar." @@ -29778,540 +31011,57 @@ msgstr "Duplicerade nycklar existerar." msgid "could not seek in tuplestore temporary file" msgstr "kunde inte söka i temporär lagringsfil för tupler" -#: utils/time/snapmgr.c:571 +#: utils/time/snapmgr.c:536 #, c-format msgid "The source transaction is not running anymore." msgstr "Källtransaktionen kör inte längre." -#: utils/time/snapmgr.c:1166 +#: utils/time/snapmgr.c:1136 #, c-format msgid "cannot export a snapshot from a subtransaction" -msgstr "kan inte exportera ett snapshot från en subtransaktion" +msgstr "kan inte exportera ett snapshot från en undertransaktion" -#: utils/time/snapmgr.c:1325 utils/time/snapmgr.c:1330 -#: utils/time/snapmgr.c:1335 utils/time/snapmgr.c:1350 -#: utils/time/snapmgr.c:1355 utils/time/snapmgr.c:1360 -#: utils/time/snapmgr.c:1375 utils/time/snapmgr.c:1380 -#: utils/time/snapmgr.c:1385 utils/time/snapmgr.c:1487 -#: utils/time/snapmgr.c:1503 utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 +#: utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 +#: utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "ogiltig snapshot-data i fil \"%s\"" -#: utils/time/snapmgr.c:1422 +#: utils/time/snapmgr.c:1393 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT måste anropas innan någon fråga" -#: utils/time/snapmgr.c:1431 +#: utils/time/snapmgr.c:1402 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "en snapshot-importerande transaktion måste ha isoleringsnivå SERIALIZABLE eller REPEATABLE READ" -#: utils/time/snapmgr.c:1440 utils/time/snapmgr.c:1449 +#: utils/time/snapmgr.c:1411 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "ogiltig snapshot-identifierare: \"%s\"" -#: utils/time/snapmgr.c:1541 +#: utils/time/snapmgr.c:1426 +#, c-format +msgid "snapshot \"%s\" does not exist" +msgstr "snapshot \"%s\" existerar inte" + +#: utils/time/snapmgr.c:1524 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "en serialiserbar transaktion kan inte importera ett snapshot från en icke-serialiserbar transaktion" -#: utils/time/snapmgr.c:1545 +#: utils/time/snapmgr.c:1528 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "en serialiserbar transaktion som inte är read-only kan inte importera en snapshot från en read-only-transaktion." -#: utils/time/snapmgr.c:1560 +#: utils/time/snapmgr.c:1543 #, c-format msgid "cannot import a snapshot from a different database" msgstr "kan inte importera en snapshot från en annan databas" - -#, c-format -#~ msgid " -n do not reinitialize shared memory after abnormal exit\n" -#~ msgstr " -n initiera inte delat minne på nytt efter onormal avstängning\n" - -#, c-format -#~ msgid " GSS (authenticated=%s, encrypted=%s)" -#~ msgstr "GSS (autentiserad=%s, krypterad=%s)" - -#, c-format -#~ msgid "Apply system library package updates." -#~ msgstr "Applicera paketuppdateringar för systembibliotek." - -#, c-format -#~ msgid "Close open transactions with multixacts soon to avoid wraparound problems." -#~ msgstr "Stäng öppna transaktioner med multixacts snart för att undvika \"wraparound\"." - -#~ msgid "Controls when to replicate or apply each change." -#~ msgstr "Styr när man skall replikera eller applicera en ändring." - -#, c-format -#~ msgid "FORMAT JSON has no effect for json and jsonb types" -#~ msgstr "FORMAT JSON har ingen effekt på typerna json och jsonb" - -#, c-format -#~ msgid "For example, FROM (SELECT ...) [AS] foo." -#~ msgstr "Till exempel, FROM (SELECT ...) [AS] foo" - -#, c-format -#~ msgid "For example, FROM (VALUES ...) [AS] foo." -#~ msgstr "Till exempel, FROM (VALUES ...) [AS] foo" - -#~ msgid "Forces use of parallel query facilities." -#~ msgstr "Tvingar användning av parallella frågefinesser." - -#, c-format -#~ msgid "Foreign tables cannot have TRUNCATE triggers." -#~ msgstr "Främmande tabeller kan inte ha TRUNCATE-triggrar." - -#~ msgid "If possible, run query using a parallel worker and with parallel restrictions." -#~ msgstr "Om det är möjligt så kör fråga med en parallell arbetare och med parallella begränsningar." - -#, c-format -#~ msgid "In particular, the table cannot be involved in any foreign key relationships." -#~ msgstr "Mer specifikt, tabellen kan inte vare inblandad i främmande-nyckelberoenden." - -#, c-format -#~ msgid "LDAP over SSL is not supported on this platform." -#~ msgstr "LDAP över SSL stöds inte på denna plattform" - -#~ msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." -#~ msgstr "Antalet transaktioner som VACUUM och HOT-städning skall fördröjas (om någon)." - -#, c-format -#~ msgid "Object keys should be text." -#~ msgstr "Objektnycklar skall vara text." - -#, c-format -#~ msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." -#~ msgstr "Utelämna genereringsuttrycket i definitionen av barntabellkolumnen för att ärva genereringsuttrycket från föräldratabellen." - -#~ msgid "Shows the character classification and case conversion locale." -#~ msgstr "Visar lokal för teckenklassificering samt skiftlägeskonvertering." - -#~ msgid "Shows the collation order locale." -#~ msgstr "Visar lokal för jämförelseordning." - -#~ msgid "Specifies a file name whose presence ends recovery in the standby." -#~ msgstr "Anger ett filnamn vars närvaro gör att återställning avslutas i en standby." - -#, c-format -#~ msgid "Subscribed publication %s is subscribing to other publications." -#~ msgid_plural "Subscribed publications %s are subscribing to other publications." -#~ msgstr[0] "Prenumererad publicering %s prenumererar på andra publiceringar." -#~ msgstr[1] "Prenumererade publiceringar %s prenumererar på andra publiceringar." - -#, c-format -#~ msgid "The owner of a subscription must be a superuser." -#~ msgstr "Ägaren av en prenumeration måste vara en superuser." - -#, c-format -#~ msgid "VALUES in FROM must have an alias" -#~ msgstr "VALUES i FROM måste ha ett alias" - -#, c-format -#~ msgid "Valid options in this context are: %s" -#~ msgstr "Giltiga flaggor i detta kontext är: %s" - -#, c-format -#~ msgid "You might need to increase max_locks_per_transaction." -#~ msgstr "Du kan behöva öka parametern max_locks_per_transaction." - -#, c-format -#~ msgid "You might need to increase max_logical_replication_workers." -#~ msgstr "Du kan behöva öka max_logical_replication_workers." - -#, c-format -#~ msgid "You might need to increase max_pred_locks_per_transaction." -#~ msgstr "Du kan behöva öka parametern max_pred_locks_per_transaction." - -#, c-format -#~ msgid "You might need to increase max_worker_processes." -#~ msgstr "Du kan behöva öka max_worker_processes." - -#, c-format -#~ msgid "argument %d cannot be null" -#~ msgstr "argument %d kan inte vara null" - -#, c-format -#~ msgid "authentication file token too long, skipping: \"%s\"" -#~ msgstr "autentiseringsfil-token för lång, hoppar över: \"%s\"" - -#, c-format -#~ msgid "cannot convert partition \"%s\" to a view" -#~ msgstr "kan inte konvertera partition \"%s\" till en vy" - -#, c-format -#~ msgid "cannot convert partitioned table \"%s\" to a view" -#~ msgstr "kan inte konvertera partitionerad tabell \"%s\" till en vy" - -#, c-format -#~ msgid "cannot create restricted tokens on this platform: error code %lu" -#~ msgstr "kan inte skapa token för begränsad åtkomst på denna plattorm: felkod %lu" - -#, c-format -#~ msgid "cannot read from logical replication slot \"%s\"" -#~ msgstr "kan inte läsa från logisk replikeringsslot \"%s\"" - -#, c-format -#~ msgid "column \"%s\" in child table has a conflicting generation expression" -#~ msgstr "kolumn \"%s\" i barntabell har ett motstridigt genereringsuttryck" - -#, c-format -#~ msgid "conversion with OID %u does not exist" -#~ msgstr "konvertering med OID %u existerar inte" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it has child tables" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy då den har barntabeller" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it has indexes" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy eftersom den har index" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it has parent tables" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy då den har föräldratabeller" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it has row security enabled" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy eftersom den har radsäkerhet påslagen" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it has row security policies" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy eftersom den har radsäkerhetspolicy" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it has triggers" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy då den har triggrar" - -#, c-format -#~ msgid "could not convert table \"%s\" to a view because it is not empty" -#~ msgstr "kunde inte konvertera tabell \"%s\" till en vy då den inte är tom" - -#, c-format -#~ msgid "could not form array type name for type \"%s\"" -#~ msgstr "kunde inte skapa array-typnamn för typ \"%s\"" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "kunde inte identifiera aktuell katalog: %m" - -#, c-format -#~ msgid "could not link file \"%s\" to \"%s\": %m" -#~ msgstr "kunde inte länka fil \"%s\" till \"%s\": %m" - -#, c-format -#~ msgid "could not load function _ldap_start_tls_sA in wldap32.dll" -#~ msgstr "kunde inte ladda funktionen _ldap_start_tls_sA i wldap32.dll" - -#, c-format -#~ msgid "could not load library \"%s\": error code %lu" -#~ msgstr "kunde inte ladda länkbibliotek \"%s\": felkod %lu" - -#, c-format -#~ msgid "could not load pg_hba.conf" -#~ msgstr "kunde inte ladda pg_hba.conf" - -#, c-format -#~ msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" -#~ msgstr "kunde inte öppna sekundär autentiseringsfil \"@%s\" som \"%s\": %m" - -#, c-format -#~ msgid "could not open usermap file \"%s\": %m" -#~ msgstr "kunde inte öppna användarmappningsfil \"%s\": %m" - -#, c-format -#~ msgid "could not read binary \"%s\"" -#~ msgstr "kunde inte läsa binär \"%s\"" - -#, c-format -#~ msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" -#~ msgstr "kunde inte läsa block %ld i temporärfil: läste bara %zu av %zu byte" - -#, c-format -#~ msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" -#~ msgstr "kunde inte läsa från hash-join-temporärfil: läste bara %zu av %zu byte" - -#, c-format -#~ msgid "could not read from shared tuplestore temporary file" -#~ msgstr "kunde inte läsa från delad temporär lagringsfil för tupler" - -#, c-format -#~ msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" -#~ msgstr "kunde inte läsa från delad temporär lagringsfil för tupler: läste bara %zu av %zu byte" - -#, c-format -#~ msgid "could not read from streaming transaction's changes file \"%s\": read only %zu of %zu bytes" -#~ msgstr "kunde inte läsa från strömmande transaktionens ändringsfil \"%s\": läste bara %zu av %zu byte" - -#, c-format -#~ msgid "could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes" -#~ msgstr "kunde inte läsa från strömmande transaktions subxact-fil \"%s\": läste bara %zu av %zu byte" - -#, c-format -#~ msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" -#~ msgstr "kunde inte läsa från temporär lagringsfil för tupler: läste bara %zu av %zu byte" - -#, c-format -#~ msgid "could not remove file or directory \"%s\": %m" -#~ msgstr "kunde inte ta bort fil eller katalog \"%s\": %m" - -#, c-format -#~ msgid "could not stat promote trigger file \"%s\": %m" -#~ msgstr "kunde inte göra stat() på triggerfil för befordring \"%s\": %m" - -#, c-format -#~ msgid "duplicate JSON key %s" -#~ msgstr "Duplicerad JSON-nyckel %s" - -#, c-format -#~ msgid "duplicate JSON object key" -#~ msgstr "duplicerad nyckel i JSON-objekt" - -#, c-format -#~ msgid "extension with OID %u does not exist" -#~ msgstr "utökning med OID %u existerar inte" - -#, c-format -#~ msgid "generated columns are not supported on partitions" -#~ msgstr "genererade kolumner stöds inte för partitioner" - -#, c-format -#~ msgid "gtsvector_in not implemented" -#~ msgstr "gtsvector_in är inte implementerad" - -#, c-format -#~ msgid "invalid checkpoint link in backup_label file" -#~ msgstr "ogiltig checkpoint-länk i \"backup_label\"-fil" - -#, c-format -#~ msgid "invalid info bits %04X in log segment %s, offset %u" -#~ msgstr "ogiltiga infobitar %04X i loggsegment %s, offset %u" - -#, c-format -#~ msgid "invalid length of primary checkpoint record" -#~ msgstr "ogiltig längd i primär checkpoint-post" - -#, c-format -#~ msgid "invalid magic number %04X in log segment %s, offset %u" -#~ msgstr "felaktigt magiskt nummer %04X i loggsegment %s, offset %u" - -#, c-format -#~ msgid "invalid primary checkpoint link in control file" -#~ msgstr "ogiltig primär checkpoint-länk i kontrollfil" - -#, c-format -#~ msgid "invalid primary checkpoint record" -#~ msgstr "ogiltig primär checkpoint-post" - -#, c-format -#~ msgid "invalid record length at %X/%X: wanted %u, got %u" -#~ msgstr "ogiltig postlängd vid %X/%X: förväntade %u, fick %u" - -#, c-format -#~ msgid "invalid record offset at %X/%X" -#~ msgstr "ogiltig postoffset vid %X/%X" - -#, c-format -#~ msgid "invalid resource manager ID in primary checkpoint record" -#~ msgstr "ogiltig resurshanterar-ID i primär checkpoint-post" - -#, c-format -#~ msgid "invalid xl_info in primary checkpoint record" -#~ msgstr "ogiltig xl_info i primär checkpoint-post" - -#, c-format -#~ msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" -#~ msgstr "invaliderar slot \"%s\" då dess restart_lsn %X/%X överskrider max_slot_wal_keep_size" - -#, c-format -#~ msgid "language with OID %u does not exist" -#~ msgstr "språk med OID %u existerar inte" - -#, c-format -#~ msgid "local connections are not supported by this build" -#~ msgstr "lokala anslutningar stöds inte av detta bygge" - -#, c-format -#~ msgid "logical decoding cannot be used while in recovery" -#~ msgstr "logisk avkodning kan inte användas under återställning" - -#, c-format -#~ msgid "missing contrecord at %X/%X" -#~ msgstr "det saknas en contrecord vid %X/%X" - -#, c-format -#~ msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" -#~ msgstr "måste vara medlem i den roll vars process håller på att avslutas eller medlem i pg_signal_backend" - -#, c-format -#~ msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" -#~ msgstr "måste vara medlem i den roll vars fråga håller på att avbrytas eller medlem i pg_signal_backend" - -#, c-format -#~ msgid "must be a superuser to cancel superuser query" -#~ msgstr "måste vara superuser för att avbryta en superusers fråga" - -#, c-format -#~ msgid "must be a superuser to terminate superuser process" -#~ msgstr "måste vara superuser för stoppa en superusers process" - -#, c-format -#~ msgid "must be superuser or have privileges of pg_checkpoint to do CHECKPOINT" -#~ msgstr "måste vara superuser eller ha rättigheter från pg_checkpoint att göra CHECKPOINT" - -#, c-format -#~ msgid "must be superuser or have privileges of pg_read_all_settings to examine \"%s\"" -#~ msgstr "måste vara superuser eller ha rättigheter från pg_read_all_settings för att undersöka \"%s\"" - -#, c-format -#~ msgid "must be superuser or replication role to start walsender" -#~ msgstr "måste vara superuser eller replikeringsroll för att starta \"walsender\"" - -#, c-format -#~ msgid "must be superuser or replication role to use replication slots" -#~ msgstr "måste vara superuser eller replikeringsroll för att använda replikeringsslottar" - -#, c-format -#~ msgid "must be superuser to alter replication roles or change replication attribute" -#~ msgstr "måste vara en superuser eller replikeringsroll för att använda replikeringsslottar" - -#, c-format -#~ msgid "must be superuser to alter superuser roles or change superuser attribute" -#~ msgstr "måste vara superuser för ändra superuser-roller eller ändra superuser-attribut" - -#, c-format -#~ msgid "must be superuser to alter superusers" -#~ msgstr "måste vara en superuser för att ändra en superuser" - -#, c-format -#~ msgid "must be superuser to change bypassrls attribute" -#~ msgstr "måste vara en superuser för ändra bypassrls-attribut" - -#, c-format -#~ msgid "must be superuser to create bypassrls users" -#~ msgstr "måste vara en superuser för att skapa bypassrls-användare" - -#, c-format -#~ msgid "must be superuser to create replication users" -#~ msgstr "måste vara en superuser för att skapa replikeringsanvändare" - -#, c-format -#~ msgid "must be superuser to create subscriptions" -#~ msgstr "måste vara en superuser för att skapa prenumerationer" - -#, c-format -#~ msgid "must be superuser to create superusers" -#~ msgstr "måste vara en superuser för att skapa nya superuser" - -#, c-format -#~ msgid "must be superuser to drop superusers" -#~ msgstr "måste vara en superuser för att ta bort en superuser" - -#, c-format -#~ msgid "must be superuser to rename superusers" -#~ msgstr "måste vara en superuser för att döpa om en superúser" - -#, c-format -#~ msgid "must be superuser to set grantor" -#~ msgstr "måste vara en superuser för att sätta fullmaktsgivare" - -#, c-format -#~ msgid "must be superuser to skip transaction" -#~ msgstr "måste vara en superuser för att hoppa över transaktioner" - -#, c-format -#~ msgid "must have CREATEROLE privilege" -#~ msgstr "måste ha rättigheten CREATEROLE" - -#, c-format -#~ msgid "oldest xmin is far in the past" -#~ msgstr "äldsta xmin är från lång tid tillbaka" - -#, c-format -#~ msgid "operator class with OID %u does not exist" -#~ msgstr "operatorklass med OID %u existerar inte" - -#, c-format -#~ msgid "operator family with OID %u does not exist" -#~ msgstr "operatorfamilj med OID %u existerar inte" - -#, c-format -#~ msgid "operator with OID %u does not exist" -#~ msgstr "operator med OID %u existerar inte" - -# FIXME -#, c-format -#~ msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" -#~ msgstr "\"ej i sekvens\"-fel på tidslinje-ID %u (efter %u) i loggsegment %s, offset %u" - -#, c-format -#~ msgid "permission denied to change owner of subscription \"%s\"" -#~ msgstr "rättighet saknas för att byta ägare på prenumeration \"%s\"" - -#, c-format -#~ msgid "promote trigger file found: %s" -#~ msgstr "triggerfil för befordring hittad: %s" - -#, c-format -#~ msgid "select() failed in postmaster: %m" -#~ msgstr "select() misslyckades i postmaster: %m" - -#, c-format -#~ msgid "skipping \"%s\" --- only superuser can analyze it" -#~ msgstr "hoppar över \"%s\" --- bara superuser kan analysera den" - -#, c-format -#~ msgid "skipping \"%s\" --- only superuser can vacuum it" -#~ msgstr "hoppar över \"%s\" --- bara en superuser kan städa den" - -#, c-format -#~ msgid "skipping \"%s\" --- only superuser or database owner can analyze it" -#~ msgstr "hoppar över \"%s\" --- bara superuser eller databasägaren kan analysera den" - -#, c-format -#~ msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" -#~ msgstr "hoppar över \"%s\" --- bara en superuser eller databasägaren kan städa den" - -#, c-format -#~ msgid "skipping \"%s\" --- only table or database owner can analyze it" -#~ msgstr "hoppar över \"%s\" --- bara tabell eller databasägaren kan analysera den" - -#, c-format -#~ msgid "skipping \"%s\" --- only table or database owner can vacuum it" -#~ msgstr "hoppar över \"%s\" --- bara tabell eller databasägaren kan köra vacuum på den" - -#, c-format -#~ msgid "statistics object with OID %u does not exist" -#~ msgstr "statistikobjekt med OID %u finns inte" - -#, c-format -#~ msgid "subquery in FROM must have an alias" -#~ msgstr "subfråga i FROM måste ha ett alias" - -#, c-format -#~ msgid "tables were not subscribed, you will have to run %s to subscribe the tables" -#~ msgstr "tabellerna prenumererades inte på, du behöver köra %s för att prenumerera på dessa tabeller" - -#, c-format -#~ msgid "tablespaces are not supported on this platform" -#~ msgstr "tabellutrymmen stöds inte på denna plattform" - -#, c-format -#~ msgid "text search configuration with OID %u does not exist" -#~ msgstr "textsökkonfiguration med OID %u existerar inte" - -#, c-format -#~ msgid "text search dictionary with OID %u does not exist" -#~ msgstr "textsökordlista med OID %u existerar inte" - -#, c-format -#~ msgid "unexpected EOF for tape %p: requested %zu bytes, read %zu bytes" -#~ msgstr "oväntat EOF för band %p: efterfrågade %zu byte, läste %zu byte" - -#, c-format -#~ msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" -#~ msgstr "oväntad sidadress %X/%X i loggsegment %s, offset %u" diff --git a/src/backend/po/uk.po b/src/backend/po/uk.po index 1e9c7943db916..6c4c0add9ee56 100644 --- a/src/backend/po/uk.po +++ b/src/backend/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-02-09 18:10+0000\n" -"PO-Revision-Date: 2024-02-11 17:37+0100\n" +"POT-Creation-Date: 2024-09-23 10:41+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,9 +14,13 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_16_STABLE/postgres.pot\n" -"X-Crowdin-File-ID: 951\n" -"X-Generator: Poedit 3.4.2\n" +"X-Crowdin-File: /REL_17_STABLE/postgres.pot\n" +"X-Crowdin-File-ID: 988\n" + +#: ../common/binaryheap.c:121 ../common/binaryheap.c:159 +#, c-format +msgid "out of binary heap slots" +msgstr "недостатньо слотів двійкової купи" #: ../common/compression.c:132 ../common/compression.c:141 #: ../common/compression.c:150 @@ -75,209 +79,225 @@ msgstr "алгоритм стиснення \"%s\" не підтримує ре msgid "not recorded" msgstr "не записано" -#: ../common/controldata_utils.c:79 ../common/controldata_utils.c:83 -#: commands/copyfrom.c:1687 commands/extension.c:3480 utils/adt/genfile.c:123 +#: ../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:94 ../common/controldata_utils.c:96 +#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1347 access/transam/xlog.c:3195 -#: access/transam/xlog.c:3998 access/transam/xlogrecovery.c:1225 -#: access/transam/xlogrecovery.c:1317 access/transam/xlogrecovery.c:1354 -#: access/transam/xlogrecovery.c:1414 backup/basebackup.c:1842 -#: commands/extension.c:3490 libpq/hba.c:769 replication/logical/origin.c:745 -#: replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5050 -#: replication/logical/snapbuild.c:2031 replication/slot.c:1953 -#: replication/slot.c:1994 replication/walsender.c:643 +#: access/transam/twophase.c:1369 access/transam/xlog.c:3476 +#: access/transam/xlog.c:4340 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:5108 +#: 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:984 utils/cache/relmapper.c:830 +#: 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:102 ../common/controldata_utils.c:105 -#: access/transam/xlog.c:3200 access/transam/xlog.c:4003 -#: backup/basebackup.c:1846 replication/logical/origin.c:750 -#: replication/logical/origin.c:789 replication/logical/snapbuild.c:2036 -#: replication/slot.c:1957 replication/slot.c:1998 replication/walsender.c:648 -#: utils/cache/relmapper.c:834 +#: ../common/controldata_utils.c:116 ../common/controldata_utils.c:119 +#: access/transam/xlog.c:3481 access/transam/xlog.c:4345 +#: 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:114 ../common/controldata_utils.c:118 -#: ../common/controldata_utils.c:263 ../common/controldata_utils.c:266 -#: access/heap/rewriteheap.c:1175 access/heap/rewriteheap.c:1280 +#: ../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:1359 -#: access/transam/twophase.c:1771 access/transam/xlog.c:3041 -#: access/transam/xlog.c:3235 access/transam/xlog.c:3240 -#: access/transam/xlog.c:3376 access/transam/xlog.c:3968 -#: access/transam/xlog.c:4887 commands/copyfrom.c:1747 commands/copyto.c:332 +#: access/transam/timeline.c:512 access/transam/twophase.c:1381 +#: access/transam/twophase.c:1793 access/transam/xlog.c:3322 +#: access/transam/xlog.c:3516 access/transam/xlog.c:3521 +#: access/transam/xlog.c:3657 access/transam/xlog.c:4310 +#: access/transam/xlog.c:5245 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:5102 -#: replication/logical/snapbuild.c:1798 replication/logical/snapbuild.c:1922 -#: replication/slot.c:1844 replication/slot.c:2005 replication/walsender.c:658 -#: storage/file/copydir.c:208 storage/file/copydir.c:213 storage/file/fd.c:782 -#: storage/file/fd.c:3700 storage/file/fd.c:3806 utils/cache/relmapper.c:842 -#: utils/cache/relmapper.c:957 +#: replication/logical/reorderbuffer.c:5160 +#: 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" msgstr "неможливо закрити файл \"%s\": %m" -#: ../common/controldata_utils.c:154 +#: ../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "неправильний порядок байтів" -#: ../common/controldata_utils.c:156 +#: ../common/controldata_utils.c:170 #, c-format -msgid "" -"possible byte ordering mismatch\n" +msgid "possible byte ordering mismatch\n" "The byte ordering used to store the pg_control file might not match the one\n" "used by this program. In that case the results below would be incorrect, and\n" "the PostgreSQL installation would be incompatible with this data directory." -msgstr "" -"можлива помилка у послідовності байтів.\n" +msgstr "можлива помилка у послідовності байтів.\n" "Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." -#: ../common/controldata_utils.c:211 ../common/controldata_utils.c:216 -#: ../common/file_utils.c:228 ../common/file_utils.c:287 -#: ../common/file_utils.c:361 access/heap/rewriteheap.c:1263 -#: access/transam/timeline.c:111 access/transam/timeline.c:251 -#: access/transam/timeline.c:348 access/transam/twophase.c:1303 -#: access/transam/xlog.c:2948 access/transam/xlog.c:3111 -#: access/transam/xlog.c:3150 access/transam/xlog.c:3343 -#: access/transam/xlog.c:3988 access/transam/xlogrecovery.c:4213 -#: access/transam/xlogrecovery.c:4316 access/transam/xlogutils.c:838 -#: backup/basebackup.c:538 backup/basebackup.c:1512 libpq/hba.c:629 -#: postmaster/syslogger.c:1560 replication/logical/origin.c:735 -#: replication/logical/reorderbuffer.c:3706 -#: replication/logical/reorderbuffer.c:4257 -#: replication/logical/reorderbuffer.c:5030 -#: replication/logical/snapbuild.c:1753 replication/logical/snapbuild.c:1863 -#: replication/slot.c:1925 replication/walsender.c:616 -#: replication/walsender.c:2731 storage/file/copydir.c:151 -#: storage/file/fd.c:757 storage/file/fd.c:3457 storage/file/fd.c:3687 -#: storage/file/fd.c:3777 storage/smgr/md.c:663 utils/cache/relmapper.c:819 -#: utils/cache/relmapper.c:936 utils/error/elog.c:2086 -#: utils/init/miscinit.c:1537 utils/init/miscinit.c:1671 -#: utils/init/miscinit.c:1748 utils/misc/guc.c:4609 utils/misc/guc.c:4659 +#: ../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:3229 +#: access/transam/xlog.c:3392 access/transam/xlog.c:3431 +#: access/transam/xlog.c:3624 access/transam/xlog.c:4330 +#: 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:3761 +#: replication/logical/reorderbuffer.c:4315 +#: replication/logical/reorderbuffer.c:5088 +#: 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:1526 utils/init/miscinit.c:1660 +#: utils/init/miscinit.c:1737 utils/misc/guc.c:4736 utils/misc/guc.c:4786 #, c-format msgid "could not open file \"%s\": %m" msgstr "не можливо відкрити файл \"%s\": %m" -#: ../common/controldata_utils.c:232 ../common/controldata_utils.c:235 -#: access/transam/twophase.c:1744 access/transam/twophase.c:1753 -#: access/transam/xlog.c:8757 access/transam/xlogfuncs.c:708 -#: backup/basebackup_server.c:175 backup/basebackup_server.c:268 -#: postmaster/postmaster.c:5573 postmaster/syslogger.c:1571 -#: postmaster/syslogger.c:1584 postmaster/syslogger.c:1597 -#: utils/cache/relmapper.c:948 +#: ../common/controldata_utils.c:246 ../common/controldata_utils.c:249 +#: access/transam/twophase.c:1766 access/transam/twophase.c:1775 +#: access/transam/xlog.c:9255 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 #, c-format msgid "could not write file \"%s\": %m" msgstr "не вдалося записати файл \"%s\": %m" -#: ../common/controldata_utils.c:249 ../common/controldata_utils.c:254 -#: ../common/file_utils.c:299 ../common/file_utils.c:369 -#: access/heap/rewriteheap.c:959 access/heap/rewriteheap.c:1169 -#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1765 -#: access/transam/xlog.c:3034 access/transam/xlog.c:3229 -#: access/transam/xlog.c:3961 access/transam/xlog.c:8147 -#: access/transam/xlog.c:8192 backup/basebackup_server.c:209 -#: commands/dbcommands.c:515 replication/logical/snapbuild.c:1791 -#: replication/slot.c:1830 replication/slot.c:1935 storage/file/fd.c:774 -#: storage/file/fd.c:3798 storage/smgr/md.c:1135 storage/smgr/md.c:1180 -#: storage/sync/sync.c:451 utils/misc/guc.c:4379 +#: ../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:3315 access/transam/xlog.c:3510 +#: access/transam/xlog.c:4303 access/transam/xlog.c:8630 +#: access/transam/xlog.c:8675 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:1329 storage/smgr/md.c:1374 +#: storage/sync/sync.c:446 utils/misc/guc.c:4489 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не вдалося fsync файл \"%s\": %m" -#: ../common/cryptohash.c:261 ../common/cryptohash_openssl.c:133 -#: ../common/cryptohash_openssl.c:332 ../common/exec.c:550 ../common/exec.c:595 -#: ../common/exec.c:687 ../common/hmac.c:309 ../common/hmac.c:325 -#: ../common/hmac_openssl.c:132 ../common/hmac_openssl.c:327 -#: ../common/md5_common.c:155 ../common/psprintf.c:143 -#: ../common/scram-common.c:269 ../common/stringinfo.c:305 ../port/path.c:751 -#: ../port/path.c:789 ../port/path.c:806 access/transam/twophase.c:1412 -#: access/transam/xlogrecovery.c:589 lib/dshash.c:253 libpq/auth.c:1343 -#: libpq/auth.c:1387 libpq/auth.c:1944 libpq/be-secure-gssapi.c:524 -#: postmaster/bgworker.c:352 postmaster/bgworker.c:934 -#: postmaster/postmaster.c:2537 postmaster/postmaster.c:4130 -#: postmaster/postmaster.c:5498 postmaster/postmaster.c:5869 -#: replication/libpqwalreceiver/libpqwalreceiver.c:361 -#: replication/logical/logical.c:208 replication/walsender.c:686 -#: storage/buffer/localbuf.c:601 storage/file/fd.c:866 storage/file/fd.c:1397 -#: storage/file/fd.c:1558 storage/file/fd.c:2478 storage/ipc/procarray.c:1449 -#: storage/ipc/procarray.c:2231 storage/ipc/procarray.c:2238 -#: storage/ipc/procarray.c:2737 storage/ipc/procarray.c:3373 -#: utils/adt/formatting.c:1690 utils/adt/formatting.c:1812 -#: utils/adt/formatting.c:1935 utils/adt/pg_locale.c:473 -#: utils/adt/pg_locale.c:637 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:514 -#: utils/hash/dynahash.c:614 utils/hash/dynahash.c:1111 utils/mb/mbutils.c:402 -#: utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 -#: utils/misc/guc.c:640 utils/misc/guc.c:665 utils/misc/guc.c:1053 -#: utils/misc/guc.c:4357 utils/misc/tzparser.c:476 utils/mmgr/aset.c:445 -#: utils/mmgr/dsa.c:714 utils/mmgr/dsa.c:736 utils/mmgr/dsa.c:817 -#: utils/mmgr/generation.c:205 utils/mmgr/mcxt.c:1046 utils/mmgr/mcxt.c:1082 -#: utils/mmgr/mcxt.c:1120 utils/mmgr/mcxt.c:1158 utils/mmgr/mcxt.c:1246 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/mcxt.c:1313 utils/mmgr/mcxt.c:1502 -#: utils/mmgr/mcxt.c:1547 utils/mmgr/mcxt.c:1604 utils/mmgr/slab.c:366 +#: ../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: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: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:4467 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 "недостатньо пам'яті" #: ../common/cryptohash.c:266 ../common/cryptohash.c:272 -#: ../common/cryptohash_openssl.c:344 ../common/cryptohash_openssl.c:352 -#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:339 -#: ../common/hmac_openssl.c:347 +#: ../common/cryptohash_openssl.c:368 ../common/cryptohash_openssl.c:376 +#: ../common/hmac.c:321 ../common/hmac.c:329 ../common/hmac_openssl.c:369 +#: ../common/hmac_openssl.c:377 msgid "success" msgstr "успіх" -#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:346 -#: ../common/hmac_openssl.c:341 +#: ../common/cryptohash.c:268 ../common/cryptohash_openssl.c:370 +#: ../common/hmac_openssl.c:371 msgid "destination buffer too small" msgstr "буфер призначення занадто малий" -#: ../common/cryptohash_openssl.c:348 ../common/hmac_openssl.c:343 +#: ../common/cryptohash_openssl.c:372 ../common/hmac_openssl.c:373 msgid "OpenSSL failure" msgstr "Помилка OpenSSL" -#: ../common/exec.c:172 +#: ../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "невірний бінарний файл \"%s\": %m" -#: ../common/exec.c:215 +#: ../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не вдалося прочитати бінарний файл \"%s\": %m" -#: ../common/exec.c:223 +#: ../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../common/exec.c:250 +#: ../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не вдалося знайти абсолютний шлях \"%s\": %m" -#: ../common/exec.c:412 libpq/pqcomm.c:728 storage/ipc/latch.c:1128 -#: storage/ipc/latch.c:1308 storage/ipc/latch.c:1541 storage/ipc/latch.c:1703 -#: storage/ipc/latch.c:1829 +#: ../common/exec.c:382 commands/collationcmds.c:876 commands/copyfrom.c:1723 +#: commands/copyto.c:650 libpq/be-secure-common.c:59 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не вдалося виконати команду \"%s\": %m" + +#: ../common/exec.c:394 libpq/be-secure-common.c:71 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не вдалося прочитати висновок команди \"%s\": %m" + +#: ../common/exec.c:397 +#, c-format +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 #, 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:791 -#: ../port/path.c:808 utils/misc/ps_status.c:168 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:203 utils/misc/ps_status.c:211 +#: ../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 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" @@ -287,39 +307,51 @@ msgstr "недостатньо пам'яті\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:447 -#: ../common/file_utils.c:451 access/transam/twophase.c:1315 -#: access/transam/xlogarchive.c:112 access/transam/xlogarchive.c:236 -#: backup/basebackup.c:346 backup/basebackup.c:544 backup/basebackup.c:615 -#: commands/copyfrom.c:1697 commands/copyto.c:702 commands/extension.c:3469 -#: commands/tablespace.c:810 commands/tablespace.c:899 postmaster/pgarch.c:590 -#: replication/logical/snapbuild.c:1649 storage/file/fd.c:1922 -#: storage/file/fd.c:2008 storage/file/fd.c:3511 utils/adt/dbsize.c:106 -#: utils/adt/dbsize.c:258 utils/adt/dbsize.c:338 utils/adt/genfile.c:483 -#: utils/adt/genfile.c:658 utils/adt/misc.c:340 +#: ../common/file_utils.c:76 storage/file/fd.c:3516 +#, c-format +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:1749 +#: commands/copyto.c:696 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" -#: ../common/file_utils.c:162 ../common/pgfnames.c:48 ../common/rmtree.c:63 -#: commands/tablespace.c:734 commands/tablespace.c:744 -#: postmaster/postmaster.c:1564 storage/file/fd.c:2880 -#: storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:130 ../common/file_utils.c:227 +#, c-format +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 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не вдалося відкрити каталог \"%s\": %m" -#: ../common/file_utils.c:196 ../common/pgfnames.c:69 ../common/rmtree.c:104 -#: storage/file/fd.c:2892 +#: ../common/file_utils.c:169 ../common/file_utils.c:315 +#: ../common/pgfnames.c:69 ../common/rmtree.c:106 storage/file/fd.c:2945 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не вдалося прочитати каталог \"%s\": %m" -#: ../common/file_utils.c:379 access/transam/xlogarchive.c:390 -#: postmaster/pgarch.c:746 postmaster/syslogger.c:1608 -#: replication/logical/snapbuild.c:1810 replication/slot.c:723 -#: replication/slot.c:1716 replication/slot.c:1858 storage/file/fd.c:792 -#: utils/time/snapmgr.c:1284 +#: ../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" @@ -328,90 +360,102 @@ msgstr "не вдалося перейменувати файл \"%s\" на \"%s msgid "internal error" msgstr "внутрішня помилка" -#: ../common/jsonapi.c:1144 +#: ../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "Рекурсивний спуск не може використовувати інкрементний лексичний аналізатор." + +#: ../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "Інкрементний аналізатор потребує Інкрементний лексичний аналізатор." + +#: ../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON вкладений занадто глибокий, максимально дозволена глибина - 6400." + +#: ../common/jsonapi.c:2127 #, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "Неприпустима спеціальна послідовність \"\\%s\"." +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "Неприпустима спеціальна послідовність \"\\%.*s\"." -#: ../common/jsonapi.c:1147 +#: ../common/jsonapi.c:2131 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ зі значенням 0x%02x повинен бути пропущений." -#: ../common/jsonapi.c:1150 +#: ../common/jsonapi.c:2135 #, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "Очікувався кінець введення, але знайдено \"%s\"." +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Очікувався кінець введення, але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1153 +#: ../common/jsonapi.c:2138 #, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "Очікувався елемент масиву або \"]\", але знайдено \"%s\"." +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Очікувався елемент масиву або \"]\", але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1156 +#: ../common/jsonapi.c:2141 #, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "Очікувалось \",\" або \"]\", але знайдено \"%s\"." +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Очікувалось \",\" або \"]\", але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1159 +#: ../common/jsonapi.c:2144 #, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "Очікувалось \":\", але знайдено \"%s\"." +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Очікувалось \":\", але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1162 +#: ../common/jsonapi.c:2147 #, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "Очікувалось значення JSON, але знайдено \"%s\"." +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Очікувалось значення JSON, але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1165 +#: ../common/jsonapi.c:2150 msgid "The input string ended unexpectedly." msgstr "Несподіваний кінець вхідного рядка." -#: ../common/jsonapi.c:1167 +#: ../common/jsonapi.c:2152 #, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "Очікувався рядок або \"}\", але знайдено \"%s\"." +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Очікувався рядок або \"}\", але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1170 +#: ../common/jsonapi.c:2155 #, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "Очікувалось \",\" або \"}\", але знайдено \"%s\"." +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Очікувалось \",\" або \"}\", але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1173 +#: ../common/jsonapi.c:2158 #, c-format -msgid "Expected string, but found \"%s\"." -msgstr "Очікувався рядок, але знайдено \"%s\"." +msgid "Expected string, but found \"%.*s\"." +msgstr "Очікувався рядок, але знайдено \"%.*s\"." -#: ../common/jsonapi.c:1176 +#: ../common/jsonapi.c:2161 #, c-format -msgid "Token \"%s\" is invalid." -msgstr "Неприпустимий маркер \"%s\"." +msgid "Token \"%.*s\" is invalid." +msgstr "Неприпустимий маркер \"%.*s\"." -#: ../common/jsonapi.c:1179 jsonpath_scan.l:597 +#: ../common/jsonapi.c:2164 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 не можна перетворити в текст." -#: ../common/jsonapi.c:1181 +#: ../common/jsonapi.c:2166 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" повинні прямувати чотири шістнадцяткових числа." -#: ../common/jsonapi.c:1184 +#: ../common/jsonapi.c:2169 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Значення виходу Unicode не можна використовувати для значень кодових точок більше 007F, якщо кодування не UTF8." -#: ../common/jsonapi.c:1187 +#: ../common/jsonapi.c:2178 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "Значення символу Unicode не вдалося перекласти в кодування сервера %s." -#: ../common/jsonapi.c:1190 jsonpath_scan.l:630 +#: ../common/jsonapi.c:2185 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Старший сурогат Unicode не повинен прямувати за іншим старшим сурогатом." -#: ../common/jsonapi.c:1192 jsonpath_scan.l:641 jsonpath_scan.l:651 -#: jsonpath_scan.l:702 +#: ../common/jsonapi.c:2187 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Молодший сурогат Unicode не повинен прямувати за іншим молодшим сурогатом." @@ -436,11 +480,168 @@ msgstr "деталі: " msgid "hint: " msgstr "підказка: " +#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:855 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "не вдалося ініціалізувати контрольну суму маніфесту" + +#: ../common/parse_manifest.c:204 ../common/parse_manifest.c:261 +msgid "manifest ended unexpectedly" +msgstr "маніфест закінчився несподівано" + +#: ../common/parse_manifest.c:210 ../common/parse_manifest.c:862 +#, c-format +msgid "could not update checksum of manifest" +msgstr "не вдалося оновити контрольну суму маніфесту" + +#: ../common/parse_manifest.c:302 +msgid "unexpected object start" +msgstr "неочікуваний початок об'єкта" + +#: ../common/parse_manifest.c:337 +msgid "unexpected object end" +msgstr "неочікуваний кінець об'єкта" + +#: ../common/parse_manifest.c:366 +msgid "unexpected array start" +msgstr "неочікуваний початок масиву" + +#: ../common/parse_manifest.c:391 +msgid "unexpected array end" +msgstr "неочікуваний кінець масиву" + +#: ../common/parse_manifest.c:418 +msgid "expected version indicator" +msgstr "індикатор очікуваної версії" + +#: ../common/parse_manifest.c:454 +msgid "unrecognized top-level field" +msgstr "нерозпізнане поле верхнього рівня" + +#: ../common/parse_manifest.c:473 +msgid "unexpected file field" +msgstr "неочікуване поле файлу" + +#: ../common/parse_manifest.c:487 +msgid "unexpected WAL range field" +msgstr "неочікуване поле діапазону WAL" + +#: ../common/parse_manifest.c:493 +msgid "unexpected object field" +msgstr "неочікуване поле об'єкта" + +#: ../common/parse_manifest.c:583 +msgid "unexpected scalar" +msgstr "неочікуваний скаляр" + +#: ../common/parse_manifest.c:609 +msgid "manifest version not an integer" +msgstr "версія маніфесту не ціле число" + +#: ../common/parse_manifest.c:613 +msgid "unexpected manifest version" +msgstr "неочікувана версія маніфесту" + +#: ../common/parse_manifest.c:637 +msgid "system identifier in manifest not an integer" +msgstr "системний ідентифікатор в маніфесті не ціле число" + +#: ../common/parse_manifest.c:662 +msgid "missing path name" +msgstr "пропущено шлях" + +#: ../common/parse_manifest.c:665 +msgid "both path name and encoded path name" +msgstr "і ім'я шляху, і закодований шлях" + +#: ../common/parse_manifest.c:667 +msgid "missing size" +msgstr "відсутній розмір" + +#: ../common/parse_manifest.c:670 +msgid "checksum without algorithm" +msgstr "контрольна сума без алгоритму" + +#: ../common/parse_manifest.c:684 +msgid "could not decode file name" +msgstr "не вдалося декодувати ім'я файлу" + +#: ../common/parse_manifest.c:694 +msgid "file size is not an integer" +msgstr "розмір файлу не є цілим числом" + +#: ../common/parse_manifest.c:700 backup/basebackup.c:870 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нерозпізнаний алгоритм контрольної суми: \"%s\"" + +#: ../common/parse_manifest.c:719 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "неприпустима контрольна сума для файлу \"%s\": \"%s\"" + +#: ../common/parse_manifest.c:762 +msgid "missing timeline" +msgstr "відсутня часова шкала" + +#: ../common/parse_manifest.c:764 +msgid "missing start LSN" +msgstr "відсутній LSN початку" + +#: ../common/parse_manifest.c:766 +msgid "missing end LSN" +msgstr "відсутній LSN кінця" + +#: ../common/parse_manifest.c:772 +msgid "timeline is not an integer" +msgstr "часова лінія не є цілим числом" + +#: ../common/parse_manifest.c:775 +msgid "could not parse start LSN" +msgstr "не вдалося проаналізувати початковий LSN" + +#: ../common/parse_manifest.c:778 +msgid "could not parse end LSN" +msgstr "не вдалося проаналізувати кінцевий LSN" + +#: ../common/parse_manifest.c:843 +msgid "expected at least 2 lines" +msgstr "очікувалося принаймні 2 рядки" + +#: ../common/parse_manifest.c:846 +msgid "last line not newline-terminated" +msgstr "останній рядок не завершений новим рядком" + +#: ../common/parse_manifest.c:865 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "не вдалося остаточно завершити контрольну суму маніфесту" + +#: ../common/parse_manifest.c:869 +#, c-format +msgid "manifest has no checksum" +msgstr "у маніфесті немає контрольної суми" + +#: ../common/parse_manifest.c:873 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "неприпустима контрольна сума маніфесту: \"%s\"" + +#: ../common/parse_manifest.c:877 +#, c-format +msgid "manifest checksum mismatch" +msgstr "невідповідність контрольної суми маніфесту" + +#: ../common/parse_manifest.c:892 +#, 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 -#: postmaster/postmaster.c:2211 utils/misc/guc.c:3120 utils/misc/guc.c:3156 -#: utils/misc/guc.c:3226 utils/misc/guc.c:4556 utils/misc/guc.c:6738 -#: utils/misc/guc.c:6779 +#: tcop/backend_startup.c:741 utils/misc/guc.c:3167 utils/misc/guc.c:3208 +#: utils/misc/guc.c:3283 utils/misc/guc.c:4671 utils/misc/guc.c:6896 +#: utils/misc/guc.c:6937 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "неприпустиме значення параметру \"%s\": \"%s\"" @@ -500,23 +701,23 @@ msgstr "не вдалося перезапустити з обмеженим т msgid "could not get exit code from subprocess: error code %lu" msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" -#: ../common/rmtree.c:95 access/heap/rewriteheap.c:1248 -#: access/transam/twophase.c:1704 access/transam/xlogarchive.c:120 -#: access/transam/xlogarchive.c:400 postmaster/postmaster.c:1143 -#: postmaster/syslogger.c:1537 replication/logical/origin.c:591 -#: replication/logical/reorderbuffer.c:4526 -#: replication/logical/snapbuild.c:1691 replication/logical/snapbuild.c:2125 -#: replication/slot.c:1909 storage/file/fd.c:832 storage/file/fd.c:3325 -#: storage/file/fd.c:3387 storage/file/reinit.c:262 storage/ipc/dsm.c:316 -#: storage/smgr/md.c:383 storage/smgr/md.c:442 storage/sync/sync.c:248 -#: utils/time/snapmgr.c:1608 +#: ../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:4584 +#: 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" msgstr "не можливо видалити файл \"%s\": %m" -#: ../common/rmtree.c:122 commands/tablespace.c:773 commands/tablespace.c:786 -#: commands/tablespace.c:821 commands/tablespace.c:911 storage/file/fd.c:3317 -#: storage/file/fd.c:3726 +#: ../common/rmtree.c:124 commands/tablespace.c:767 commands/tablespace.c:780 +#: commands/tablespace.c:815 commands/tablespace.c:905 storage/file/fd.c:3370 +#: storage/file/fd.c:3779 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "не вдалося видалити каталог \"%s\": %m" @@ -533,20 +734,16 @@ msgstr "на вдалося закодувати збережений ключ" msgid "could not encode server key" msgstr "не вдалося закодувати серверний ключ" -#: ../common/stringinfo.c:306 +#: ../common/stringinfo.c:315 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "Не вдалося збільшити рядковий буфер (містить: %d байтів, потребувалось: %d байтів)." -#: ../common/stringinfo.c:310 +#: ../common/stringinfo.c:319 #, c-format -msgid "" -"out of memory\n" -"\n" +msgid "out of memory\n\n" "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" -msgstr "" -"недостатньо пам'яті\n" -"\n" +msgstr "недостатньо пам'яті\n\n" "Неможливо збільшити рядковий буфер (містить: %d байт, потребувалось: %d байт).\n" #: ../common/username.c:43 @@ -554,7 +751,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "не можу знайти користувача з ефективним ID %ld: %s" -#: ../common/username.c:45 libpq/auth.c:1879 +#: ../common/username.c:45 libpq/auth.c:1888 msgid "user does not exist" msgstr "користувача не існує" @@ -648,20 +845,20 @@ msgstr "Ви можливо маєте антивірус, резервне ко #: ../port/path.c:775 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "не вдалося отримати поточний робочий каталог: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "не вдалося отримати поточний робочий каталог: %m\n" #: ../port/strerror.c:72 #, c-format msgid "operating system error %d" msgstr "помилка операційної системи %d" -#: ../port/thread.c:50 ../port/thread.c:86 +#: ../port/user.c:43 ../port/user.c:79 #, c-format msgid "could not look up local user ID %d: %s" msgstr "не вдалося знайти локального користувача з ідентифікатором %d: %s" -#: ../port/thread.c:55 ../port/thread.c:91 +#: ../port/user.c:48 ../port/user.c:84 #, c-format msgid "local user with ID %d does not exist" msgstr "локального користувача з ідентифікатором %d не існує" @@ -681,104 +878,104 @@ msgstr "не вдалося отримати SID для групи PowerUsers: msgid "could not check access token membership: error code %lu\n" msgstr "не вдається перевірити членство токену доступу: код помилки %lu\n" -#: access/brin/brin.c:216 +#: access/brin/brin.c:405 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "запит на підсумок діапазону BRIN для індексу «%s» сторінки %u не вдалося записати" -#: access/brin/brin.c:1036 access/brin/brin.c:1143 access/gin/ginfast.c:1039 -#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:214 -#: access/transam/xlogfuncs.c:247 access/transam/xlogfuncs.c:286 -#: access/transam/xlogfuncs.c:307 access/transam/xlogfuncs.c:328 -#: access/transam/xlogfuncs.c:398 access/transam/xlogfuncs.c:456 +#: access/brin/brin.c:1385 access/brin/brin.c:1493 access/gin/ginfast.c:1040 +#: access/transam/xlogfuncs.c:183 access/transam/xlogfuncs.c:208 +#: access/transam/xlogfuncs.c:241 access/transam/xlogfuncs.c:280 +#: access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:388 access/transam/xlogfuncs.c:446 #, c-format msgid "recovery is in progress" msgstr "відновлення у процесі" -#: access/brin/brin.c:1037 access/brin/brin.c:1144 +#: access/brin/brin.c:1386 access/brin/brin.c:1494 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Контрольна функція BRIN не може бути виконана під час відновлення." -#: access/brin/brin.c:1042 access/brin/brin.c:1149 +#: access/brin/brin.c:1391 access/brin/brin.c:1499 #, c-format msgid "block number out of range: %lld" msgstr "номер блоку поза діапазоном: %lld" -#: access/brin/brin.c:1086 access/brin/brin.c:1175 +#: access/brin/brin.c:1436 access/brin/brin.c:1525 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" не є індексом BRIN" -#: access/brin/brin.c:1102 access/brin/brin.c:1191 +#: access/brin/brin.c:1452 access/brin/brin.c:1541 #, c-format msgid "could not open parent table of index \"%s\"" msgstr "не вдалося відкрити батьківську таблицю індексу \"%s\"" -#: access/brin/brin.c:1111 access/brin/brin.c:1207 access/gin/ginfast.c:1084 -#: parser/parse_utilcmd.c:2280 +#: 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\" не є припустимим" -#: access/brin/brin_bloom.c:749 access/brin/brin_bloom.c:791 -#: access/brin/brin_minmax_multi.c:2985 access/brin/brin_minmax_multi.c:3122 -#: statistics/dependencies.c:663 statistics/dependencies.c:716 -#: statistics/mcv.c:1484 statistics/mcv.c:1515 statistics/mvdistinct.c:344 -#: statistics/mvdistinct.c:397 utils/adt/pseudotypes.c:43 -#: utils/adt/pseudotypes.c:77 utils/adt/tsgistidx.c:93 +#: access/brin/brin_bloom.c:783 access/brin/brin_bloom.c:825 +#: access/brin/brin_minmax_multi.c:2993 access/brin/brin_minmax_multi.c:3130 +#: statistics/dependencies.c:661 statistics/dependencies.c:714 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:40 +#: utils/adt/pseudotypes.c:74 utils/adt/tsgistidx.c:94 #, c-format msgid "cannot accept a value of type %s" msgstr "не можна прийняти значення типу %s" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 -#: access/brin/brin_pageops.c:852 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1462 access/spgist/spgdoinsert.c:2002 -#: access/spgist/spgdoinsert.c:2279 +#: access/brin/brin_pageops.c:75 access/brin/brin_pageops.c:361 +#: access/brin/brin_pageops.c:851 access/gin/ginentrypage.c:109 +#: access/gist/gist.c:1463 access/spgist/spgdoinsert.c:2001 +#: access/spgist/spgdoinsert.c:2278 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "розмір рядка індексу %zu перевищує максимальний %zu для індексу \"%s\"" -#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 +#: access/brin/brin_revmap.c:383 access/brin/brin_revmap.c:389 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "пошкоджений BRIN індекс: несумісна карта діапазонів" -#: access/brin/brin_revmap.c:593 +#: access/brin/brin_revmap.c:583 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "неочікуваний тип сторінки 0x%04X в BRIN індексі \"%s\" блокує %u" -#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:149 +#: access/gist/gistvalidate.c:152 access/hash/hashvalidate.c:139 #: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "сімейство операторів \"%s\" методу доступу %s містить функцію %s з недопустимим номером підтримки %d" -#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:161 +#: access/gist/gistvalidate.c:164 access/hash/hashvalidate.c:118 #: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "сімейство операторів \"%s\" з доступом %s містить функцію %s з неправильним підписом для номеру підтримки %d" -#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:180 +#: access/gist/gistvalidate.c:184 access/hash/hashvalidate.c:160 #: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "сімейство операторів \"%s\" з доступом %s містить оператор %s з недопустимим стратегічним номером %d" -#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:193 #: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 #: access/spgist/spgvalidate.c:237 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "сімейство операторів \"%s\" з доступом %s містить некоректну специфікацію ORDER BY для оператора %s" -#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:206 +#: access/gist/gistvalidate.c:232 access/hash/hashvalidate.c:186 #: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" @@ -801,38 +998,38 @@ msgstr "сімейство операторів \"%s\" з методом дос msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "клас операторів \"%s\" з методом доступа %s не має операторів" -#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:274 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:248 +#: access/gist/gistvalidate.c:273 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "клас операторів \"%s\" з доступом %s немає функції підтримки %d" -#: access/common/attmap.c:122 +#: access/common/attmap.c:121 #, c-format msgid "Returned type %s does not match expected type %s in column %d." msgstr "Повернений тип %s не відповідає очікуваному типу %s в стовпці %d." -#: access/common/attmap.c:150 +#: access/common/attmap.c:149 #, c-format msgid "Number of returned columns (%d) does not match expected column count (%d)." msgstr "Кількість повернених стовпців (%d) не відповідає очікуваній кількості стовпців (%d)." -#: access/common/attmap.c:234 access/common/attmap.c:246 +#: access/common/attmap.c:233 access/common/attmap.c:245 #, c-format msgid "could not convert row type" msgstr "неможливо конвертувати тип рядка" -#: access/common/attmap.c:235 +#: access/common/attmap.c:234 #, c-format msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." msgstr "Атрибут \"%s\" типу %s не збігається з відповідним атрибутом типу %s." -#: access/common/attmap.c:247 +#: access/common/attmap.c:246 #, c-format msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "Атрибут \"%s\" типу %s не існує в типі %s." -#: access/common/heaptuple.c:1133 access/common/heaptuple.c:1468 +#: access/common/heaptuple.c:1132 access/common/heaptuple.c:1467 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "кількість стовпців (%d) перевищує обмеження (%d)" @@ -842,122 +1039,110 @@ msgstr "кількість стовпців (%d) перевищує обмеже msgid "number of index columns (%d) exceeds limit (%d)" msgstr "кількість індексних стовпців (%d) перевищує обмеження (%d)" -#: access/common/indextuple.c:209 access/spgist/spgutils.c:957 +#: 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:292 tcop/fastpath.c:107 tcop/fastpath.c:454 -#: tcop/postgres.c:1944 +#: 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" -#: access/common/reloptions.c:521 access/common/reloptions.c:532 +#: access/common/reloptions.c:519 access/common/reloptions.c:530 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Дійсні значення \"увімкнено\", \"вимкнено\" та \"автоматично\"." -#: access/common/reloptions.c:543 +#: access/common/reloptions.c:541 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "Припустимі значення лише \"local\" і \"cascaded\"." -#: access/common/reloptions.c:691 +#: access/common/reloptions.c:689 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "перевищено встановлене користувачем обмеження типу параметрів відношення" -#: access/common/reloptions.c:1233 +#: access/common/reloptions.c:1231 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET не має містити значення для параметрів" -#: access/common/reloptions.c:1265 +#: access/common/reloptions.c:1263 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "нерозпізнаний параметр простору імен \"%s\"" -#: access/common/reloptions.c:1302 commands/variable.c:1167 +#: access/common/reloptions.c:1300 commands/variable.c:1191 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "таблиці, позначені WITH OIDS, не підтримуються" -#: access/common/reloptions.c:1470 +#: access/common/reloptions.c:1468 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "нерозпізнаний параметр \"%s\"" -#: access/common/reloptions.c:1582 +#: access/common/reloptions.c:1580 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "параметр «%s» вказано кілька разів" -#: access/common/reloptions.c:1598 +#: access/common/reloptions.c:1596 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "неприпустиме значення для булевого параметра \"%s\": %s" -#: access/common/reloptions.c:1610 +#: access/common/reloptions.c:1608 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "неприпустиме значення для цілого параметра \"%s\": %s" -#: access/common/reloptions.c:1616 access/common/reloptions.c:1636 +#: access/common/reloptions.c:1614 access/common/reloptions.c:1634 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "значення %s поза допустимими межами для параметра \"%s\"" -#: access/common/reloptions.c:1618 +#: access/common/reloptions.c:1616 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Припустимі значення знаходяться між \"%d\" і \"%d\"." -#: access/common/reloptions.c:1630 +#: access/common/reloptions.c:1628 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "неприпустиме значення для числа з плавучою точкою параметра \"%s\": %s" -#: access/common/reloptions.c:1638 +#: access/common/reloptions.c:1636 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Припустимі значення знаходяться між \"%f\" і \"%f\"." -#: access/common/reloptions.c:1660 +#: access/common/reloptions.c:1658 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "недійсне значення для параметра перерахування \"%s\": %s" -#: access/common/reloptions.c:1991 +#: access/common/reloptions.c:1989 #, c-format msgid "cannot specify storage parameters for a partitioned table" msgstr "неможливо вказати параметри сховища для секціонованої таблиці" -#: access/common/reloptions.c:1992 +#: access/common/reloptions.c:1990 #, c-format msgid "Specify storage parameters for its leaf partitions instead." msgstr "Вкажіть параметри сховища для табличних розділів." -#: access/common/toast_compression.c:33 +#: access/common/toast_compression.c:31 #, c-format msgid "compression method lz4 not supported" msgstr "метод стискання lz4 не підтримується" -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:32 #, c-format msgid "This functionality requires the server to be built with lz4 support." msgstr "Ця функціональність потребує, щоб сервер був побудований з підтримкою lz4." -#: access/common/tupdesc.c:837 commands/tablecmds.c:6957 -#: commands/tablecmds.c:12985 -#, c-format -msgid "too many array dimensions" -msgstr "занадто багато вимірів масиву" - -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1913 -#, c-format -msgid "column \"%s\" cannot be declared SETOF" -msgstr "стовпець\"%s\" не може бути оголошений SETOF" - #: access/gin/ginbulk.c:44 #, c-format msgid "posting list is too long" @@ -965,25 +1150,25 @@ msgstr "список вказівників задовгий" #: access/gin/ginbulk.c:45 #, c-format -msgid "Reduce maintenance_work_mem." -msgstr "Зменшіть maintenance_work_mem." +msgid "Reduce \"maintenance_work_mem\"." +msgstr "Зменшіть \"maintenance_work_mem\"." -#: access/gin/ginfast.c:1040 +#: access/gin/ginfast.c:1041 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "Черга записів GIN не може бути очищена під час відновлення." -#: access/gin/ginfast.c:1047 +#: access/gin/ginfast.c:1048 #, c-format msgid "\"%s\" is not a GIN index" msgstr "\"%s\" не є індексом GIN" -#: access/gin/ginfast.c:1058 +#: access/gin/ginfast.c:1059 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "доступ до тимчасових індексів з інших сесій заблокований" -#: access/gin/ginget.c:273 access/nbtree/nbtinsert.c:762 +#: access/gin/ginget.c:271 access/nbtree/nbtinsert.c:762 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "не вдалося повторно знайти кортеж в межах індексу \"%s\"" @@ -998,50 +1183,50 @@ msgstr "старі індекси GIN не підтримують сканува msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Щоб виправити це, зробіть REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:146 executor/execExpr.c:2169 -#: utils/adt/arrayfuncs.c:4045 utils/adt/arrayfuncs.c:6732 -#: utils/adt/rowtypes.c:984 +#: access/gin/ginutil.c:147 executor/execExpr.c:2192 +#: 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" -#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:90 access/gist/gistvalidate.c:92 #: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "сімейство операторів \"%s\" з методом доступу %s містить функцію підтримки %s з різними типами вводу зліва і справа" -#: access/gin/ginvalidate.c:260 +#: access/gin/ginvalidate.c:258 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "клас операторів \"%s\" з методом доступу %s не має функції підтримки %d або %d" -#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/gin/ginvalidate.c:331 access/gist/gistvalidate.c:349 #: access/spgist/spgvalidate.c:387 #, c-format msgid "support function number %d is invalid for access method %s" msgstr "номер функції підтримки %d неприпустимий для методу доступу %s" -#: access/gist/gist.c:759 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:426 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "індекс \"%s\" містить внутрішній кортеж, позначений як неправильний" -#: access/gist/gist.c:761 access/gist/gistvacuum.c:428 +#: access/gist/gist.c:762 access/gist/gistvacuum.c:428 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Це викликано неповним поділом сторінки під час відновлення перед покращенням до версії PostgreSQL 9.1." -#: access/gist/gist.c:762 access/gist/gistutil.c:801 access/gist/gistutil.c:812 -#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:227 -#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 -#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:813 +#: access/gist/gist.c:763 access/gist/gistutil.c:800 access/gist/gistutil.c:811 +#: access/gist/gistvacuum.c:429 access/hash/hashutil.c:226 +#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 +#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:813 #: access/nbtree/nbtpage.c:824 #, c-format msgid "Please REINDEX it." msgstr "Будь ласка, виконайте REINDEX." -#: access/gist/gist.c:1195 +#: access/gist/gist.c:1196 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "виправлення неповного розділу в індексі \"%s\", блок %u" @@ -1056,52 +1241,52 @@ msgstr "помилка методу picksplit для стовпця %d інде msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "Індекс не є оптимальним. Щоб оптимізувати його, зв'яжіться з розробником або спробуйте використати стовпець як другий індекс у команді CREATE INDEX." -#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 +#: access/gist/gistutil.c:797 access/hash/hashutil.c:223 #: access/nbtree/nbtpage.c:810 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "індекс \"%s\" містить неочікувану нульову сторінку в блоці %u" -#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 -#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:821 +#: access/gist/gistutil.c:808 access/hash/hashutil.c:234 +#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:821 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "індекс \"%s\" містить пошкоджену сторінку в блоці %u" -#: access/gist/gistvalidate.c:203 +#: access/gist/gistvalidate.c:202 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "сімейство операторів \"%s\" з методом доступу %s містить непідтримувану для оператора специфікацію ORDER BY %s" -#: access/gist/gistvalidate.c:214 +#: access/gist/gistvalidate.c:213 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "сімейство операторів \"%s\" з методом доступу %s містить некоректну для оператора специфікацію ORDER BY opfamily %s" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:333 -#: utils/adt/varchar.c:1009 utils/adt/varchar.c:1064 +#: 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:280 access/hash/hashfunc.c:334 catalog/heap.c:668 -#: catalog/heap.c:674 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:2015 commands/tablecmds.c:17490 commands/view.c:86 -#: regex/regc_pg_locale.c:243 utils/adt/formatting.c:1648 -#: utils/adt/formatting.c:1770 utils/adt/formatting.c:1893 utils/adt/like.c:191 -#: utils/adt/like_support.c:1025 utils/adt/varchar.c:739 -#: utils/adt/varchar.c:1010 utils/adt/varchar.c:1065 utils/adt/varlena.c:1518 +#: 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:2048 commands/tablecmds.c:18068 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." msgstr "Використайте опцію COLLATE для задання параметрів сортування." -#: access/hash/hashinsert.c:86 +#: access/hash/hashinsert.c:84 #, c-format msgid "index row size %zu exceeds hash maximum %zu" msgstr "індексний рядок розміру %zu перевищує максимальний хеш %zu" -#: access/hash/hashinsert.c:88 access/spgist/spgdoinsert.c:2006 -#: access/spgist/spgdoinsert.c:2283 access/spgist/spgutils.c:1018 +#: 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 "Значення, що перевищують буфер сторінки, не можна індексувати." @@ -1116,17 +1301,17 @@ msgstr "недійсний номер блока переповнення %u" msgid "out of overflow pages in hash index \"%s\"" msgstr "закінчились переповнені сторінки в хеш-індексі \"%s\"" -#: access/hash/hashsearch.c:315 +#: access/hash/hashsearch.c:311 #, c-format msgid "hash indexes do not support whole-index scans" msgstr "хеш-індекси не підтримують сканування цілого індексу" -#: access/hash/hashutil.c:263 +#: access/hash/hashutil.c:262 #, c-format msgid "index \"%s\" is not a hash index" msgstr "індекс \"%s\" не є хеш-індексом" -#: access/hash/hashutil.c:269 +#: access/hash/hashutil.c:268 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "індекс \"%s\" має неправильну версію хешу" @@ -1141,297 +1326,296 @@ msgstr "сімейство операторів \"%s\" з методом дос msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "сімейство операторів \"%s\" з методом доступу %s не містить міжтипового оператора (ів)" -#: access/heap/heapam.c:2038 +#: access/heap/heapam.c:2195 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "не вдалося вставити кортежі в паралельного працівника" -#: access/heap/heapam.c:2557 +#: access/heap/heapam.c:2714 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "не вдалося видалити кортежі під час паралельної операції" -#: access/heap/heapam.c:2604 +#: access/heap/heapam.c:2761 #, c-format msgid "attempted to delete invisible tuple" msgstr "спроба видалити невидимий кортеж" -#: access/heap/heapam.c:3052 access/heap/heapam.c:5921 +#: access/heap/heapam.c:3209 access/heap/heapam.c:6082 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "неможливо оновити кортежі під час паралельної операції" -#: access/heap/heapam.c:3180 +#: access/heap/heapam.c:3337 #, c-format msgid "attempted to update invisible tuple" msgstr "спроба оновити невидимий кортеж" -#: access/heap/heapam.c:4569 access/heap/heapam.c:4607 -#: access/heap/heapam.c:4872 access/heap/heapam_handler.c:467 +#: access/heap/heapam.c:4726 access/heap/heapam.c:4764 +#: access/heap/heapam.c:5029 access/heap/heapam_handler.c:468 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "не вдалося отримати блокування у рядку стосовно \"%s\"" -#: access/heap/heapam_handler.c:412 +#: access/heap/heapam_handler.c:413 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "кортеж, який підлягає блокуванню, вже був переміщений до іншої секції в результаті паралельного оновлення" -#: access/heap/hio.c:536 access/heap/rewriteheap.c:659 +#: access/heap/hio.c:535 access/heap/rewriteheap.c:640 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "рядок завеликий: розмір %zu, максимальний розмір %zu" -#: access/heap/rewriteheap.c:919 +#: access/heap/rewriteheap.c:885 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "не вдалося записати до файлу \"%s\", записано %d з %d: %m" -#: access/heap/rewriteheap.c:1011 access/heap/rewriteheap.c:1128 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:2973 access/transam/xlog.c:3164 -#: access/transam/xlog.c:3940 access/transam/xlog.c:8746 -#: access/transam/xlogfuncs.c:702 backup/basebackup_server.c:151 -#: backup/basebackup_server.c:244 commands/dbcommands.c:495 -#: postmaster/postmaster.c:4557 postmaster/postmaster.c:5560 -#: replication/logical/origin.c:603 replication/slot.c:1777 -#: storage/file/copydir.c:157 storage/smgr/md.c:232 utils/time/snapmgr.c:1263 +#: access/transam/xlog.c:3254 access/transam/xlog.c:3445 +#: access/transam/xlog.c:4282 access/transam/xlog.c:9244 +#: 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:4112 +#: 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" msgstr "неможливо створити файл \"%s\": %m" -#: access/heap/rewriteheap.c:1138 +#: access/heap/rewriteheap.c:1104 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "не вдалося скоротити файл \"%s\" до потрібного розміру %u: %m" -#: access/heap/rewriteheap.c:1156 access/transam/timeline.c:384 +#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3023 access/transam/xlog.c:3220 -#: access/transam/xlog.c:3952 commands/dbcommands.c:507 -#: postmaster/postmaster.c:4567 postmaster/postmaster.c:4577 +#: access/transam/xlog.c:3304 access/transam/xlog.c:3501 +#: access/transam/xlog.c:4294 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:1767 -#: replication/slot.c:1812 storage/file/buffile.c:545 -#: storage/file/copydir.c:197 utils/init/miscinit.c:1612 -#: utils/init/miscinit.c:1623 utils/init/miscinit.c:1631 utils/misc/guc.c:4340 -#: utils/misc/guc.c:4371 utils/misc/guc.c:5507 utils/misc/guc.c:5525 -#: utils/time/snapmgr.c:1268 utils/time/snapmgr.c:1275 +#: 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:1601 +#: utils/init/miscinit.c:1612 utils/init/miscinit.c:1620 utils/misc/guc.c:4450 +#: utils/misc/guc.c:4481 utils/misc/guc.c:5634 utils/misc/guc.c:5652 +#: utils/time/snapmgr.c:1239 utils/time/snapmgr.c:1246 #, c-format msgid "could not write to file \"%s\": %m" msgstr "неможливо записати до файлу \"%s\": %m" -#: access/heap/vacuumlazy.c:482 +#: access/heap/vacuumlazy.c:473 #, c-format msgid "aggressively vacuuming \"%s.%s.%s\"" msgstr "агресивне очищення \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:487 +#: access/heap/vacuumlazy.c:478 #, c-format msgid "vacuuming \"%s.%s.%s\"" msgstr "очищення \"%s.%s.%s\"" -#: access/heap/vacuumlazy.c:635 +#: access/heap/vacuumlazy.c:626 #, c-format msgid "finished vacuuming \"%s.%s.%s\": index scans: %d\n" msgstr "очищення закінчено \"%s.%s.%s\": сканувань індексу: %d\n" -#: access/heap/vacuumlazy.c:646 +#: access/heap/vacuumlazy.c:637 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "автоматичний агресивний вакуум для запобігання зацикленню таблиці \"%s.%s.%s\": сканування індексу: %d\n" -#: access/heap/vacuumlazy.c:648 +#: access/heap/vacuumlazy.c:639 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "автоматичне очищення для запобігання зацикленню таблиці \"%s.%s.%s\": сканування індексу: %d\n" -#: access/heap/vacuumlazy.c:653 +#: access/heap/vacuumlazy.c:644 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "автоматична агресивне очищення таблиці \"%s.%s.%s\": сканувань індексу: %d\n" -#: access/heap/vacuumlazy.c:655 +#: access/heap/vacuumlazy.c:646 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "автоматичне очищення таблиці \"%s.%s.%s\": сканувань індексу: %d\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:653 #, c-format msgid "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" msgstr "сторінок: %u видалено, %u залишилось, %u відскановано (%.2f%% від загальної кількості)\n" -#: access/heap/vacuumlazy.c:669 +#: access/heap/vacuumlazy.c:660 #, c-format msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" msgstr "кортежів: %lld видалено, %lld залишилось, %lld мертвих, але все ще не можуть бути видаленні\n" -#: access/heap/vacuumlazy.c:675 +#: access/heap/vacuumlazy.c:666 #, c-format msgid "tuples missed: %lld dead from %u pages not removed due to cleanup lock contention\n" msgstr "пропущено кортежів: %lld померлих з %u сторінок не видалено через очищення блокування\n" -#: access/heap/vacuumlazy.c:681 +#: access/heap/vacuumlazy.c:672 #, c-format msgid "removable cutoff: %u, which was %d XIDs old when operation ended\n" msgstr "Видалення вирізу: %u, це було %d XIDs старий при завершенні операції\n" -#: access/heap/vacuumlazy.c:688 +#: access/heap/vacuumlazy.c:679 #, c-format msgid "new relfrozenxid: %u, which is %d XIDs ahead of previous value\n" msgstr "новий relfrozenxid: %u, що є %d XIDs попереду попереднього значення\n" -#: access/heap/vacuumlazy.c:696 +#: access/heap/vacuumlazy.c:687 #, c-format msgid "new relminmxid: %u, which is %d MXIDs ahead of previous value\n" msgstr "новий relminmxid: %u, що становить %d MXIDs попереду попереднього значення\n" -#: access/heap/vacuumlazy.c:699 +#: access/heap/vacuumlazy.c:690 #, c-format msgid "frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n" msgstr "заморожено: %u сторінок з таблиці (%.2f%% з усього) має %lld заморожені рядків\n" -#: access/heap/vacuumlazy.c:707 +#: access/heap/vacuumlazy.c:698 msgid "index scan not needed: " msgstr "сканування індексу не потрібне: " -#: access/heap/vacuumlazy.c:709 +#: access/heap/vacuumlazy.c:700 msgid "index scan needed: " msgstr "сканування індексу потрібне: " -#: access/heap/vacuumlazy.c:711 +#: access/heap/vacuumlazy.c:702 #, c-format msgid "%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "у %u сторінок з таблиці (%.2f%% від загальної кількості) було видалено %lld мертвих ідентифікаторів елементів\n" -#: access/heap/vacuumlazy.c:716 +#: access/heap/vacuumlazy.c:707 msgid "index scan bypassed: " msgstr "сканування індексу пропущено: " -#: access/heap/vacuumlazy.c:718 +#: access/heap/vacuumlazy.c:709 msgid "index scan bypassed by failsafe: " msgstr "сканування індексу безпечно пропущено: " -#: access/heap/vacuumlazy.c:720 +#: access/heap/vacuumlazy.c:711 #, c-format msgid "%u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "%u сторінок з таблиці (%.2f%% від загальної кількості) мають %lld мертвих ідентифікаторів елементів\n" -#: access/heap/vacuumlazy.c:735 +#: access/heap/vacuumlazy.c:726 #, c-format 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:747 commands/analyze.c:796 +#: access/heap/vacuumlazy.c:738 commands/analyze.c:794 #, c-format msgid "I/O timings: read: %.3f ms, write: %.3f ms\n" msgstr "час вводу-виведення: читання %.3f мс, запис: %.3f мс\n" -#: access/heap/vacuumlazy.c:757 commands/analyze.c:799 +#: 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:760 commands/analyze.c:801 +#: 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" -#: access/heap/vacuumlazy.c:765 +#: access/heap/vacuumlazy.c:756 #, c-format msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "Використання WAL: %lld записів, %lld зображень на повну сторінку, %llu байтів\n" -#: access/heap/vacuumlazy.c:769 commands/analyze.c:805 +#: access/heap/vacuumlazy.c:760 commands/analyze.c:803 #, c-format msgid "system usage: %s" msgstr "використання системи: %s" -#: access/heap/vacuumlazy.c:2482 +#: access/heap/vacuumlazy.c:2172 #, c-format msgid "table \"%s\": removed %lld dead item identifiers in %u pages" msgstr "таблиця \"%s\": видалено %lld мертвих ідентифікаторів елементів в %u сторінках" -#: access/heap/vacuumlazy.c:2642 +#: access/heap/vacuumlazy.c:2326 #, 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:2645 +#: access/heap/vacuumlazy.c:2329 #, c-format msgid "The table's relfrozenxid or relminmxid is too far in the past." msgstr "relfrozenxid або relminmxid таблиці занадто далеко в минулому." -#: access/heap/vacuumlazy.c:2646 +#: access/heap/vacuumlazy.c:2330 #, c-format -msgid "" -"Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" +msgid "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" "You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." -msgstr "" -"Можливо, слід збільшити параметр конфігурації \"maintenance_work_mem\" або \"autovacuum_work_mem\".\n" +msgstr "Можливо, слід збільшити параметр конфігурації \"maintenance_work_mem\" або \"autovacuum_work_mem\".\n" "Можливо, вам також доведеться розглянути інші способи, щоб VACUUM не відставав від розподілу ідентифікаторів транзакцій." -#: access/heap/vacuumlazy.c:2891 +#: access/heap/vacuumlazy.c:2592 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": зупинка скорочення через конфліктний запит блокування" -#: access/heap/vacuumlazy.c:2961 +#: access/heap/vacuumlazy.c:2662 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "таблиця \"%s: скорочена від %u до %u сторінок" -#: access/heap/vacuumlazy.c:3023 +#: access/heap/vacuumlazy.c:2724 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "таблиця \"%s: припинення скорочення через конфліктуючий запит блокування" -#: access/heap/vacuumlazy.c:3183 +#: access/heap/vacuumlazy.c:2843 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "вимкнення паралельної опції очищення на \"%s\" --- неможливо паралельно очистити тимчасові таблиці" -#: access/heap/vacuumlazy.c:3399 +#: access/heap/vacuumlazy.c:3113 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "під час сканування блоку %u зсувом %u відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3402 +#: access/heap/vacuumlazy.c:3116 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "у процесі сканування блоку %u відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3406 +#: access/heap/vacuumlazy.c:3120 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "у процесі сканування відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3414 +#: access/heap/vacuumlazy.c:3128 #, c-format msgid "while vacuuming block %u offset %u of relation \"%s.%s\"" msgstr "під час очищення блоку %u зсувом %u відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3417 +#: access/heap/vacuumlazy.c:3131 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "у процесі очищення блоку %u відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3421 +#: access/heap/vacuumlazy.c:3135 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "у процесі очищення відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3426 commands/vacuumparallel.c:1074 +#: access/heap/vacuumlazy.c:3140 commands/vacuumparallel.c:1113 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "у процесі очищення індексу \"%s\" відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3431 commands/vacuumparallel.c:1080 +#: access/heap/vacuumlazy.c:3145 commands/vacuumparallel.c:1119 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "у процесі очищення індексу \"%s\" відношення \"%s.%s\"" -#: access/heap/vacuumlazy.c:3437 +#: access/heap/vacuumlazy.c:3151 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "у процесі скорочення відношення \"%s.%s\" до %u блоків" @@ -1446,19 +1630,24 @@ msgstr "метод доступу \"%s\" не є типу %s" msgid "index access method \"%s\" does not have a handler" msgstr "для методу доступу індекса \"%s\" не заданий обробник" -#: access/index/genam.c:490 +#: access/index/genam.c:487 #, c-format msgid "transaction aborted during system catalog scan" msgstr "транзакцію перервано під час сканування системного каталогу" -#: access/index/indexam.c:203 catalog/objectaddress.c:1394 -#: commands/indexcmds.c:2843 commands/tablecmds.c:272 commands/tablecmds.c:296 -#: commands/tablecmds.c:17185 commands/tablecmds.c:18963 +#: access/index/genam.c:655 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:2878 commands/tablecmds.c:281 commands/tablecmds.c:305 +#: commands/tablecmds.c:17763 commands/tablecmds.c:19574 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" не є індексом" -#: access/index/indexam.c:1016 +#: access/index/indexam.c:1028 #, c-format msgid "operator class %s has no options" msgstr "клас операторів %s без параметрів" @@ -1479,7 +1668,7 @@ msgid "This may be because of a non-immutable index expression." msgstr "Можливо, це викликано змінною природою індексного вираження." #: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 -#: parser/parse_utilcmd.c:2326 +#: parser/parse_utilcmd.c:2323 #, c-format msgid "index \"%s\" is not a btree" msgstr "індекс \"%s\" не є b-деревом" @@ -1489,33 +1678,31 @@ msgstr "індекс \"%s\" не є b-деревом" msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "невідповідність версії в індексі \"%s\": версія файла %d, поточна версія %d, мінімальна підтримувана версія %d" -#: access/nbtree/nbtpage.c:1866 +#: access/nbtree/nbtpage.c:1861 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "індекс \"%s\" містить наполовину мертву внутрішню сторінку" -#: access/nbtree/nbtpage.c:1868 +#: access/nbtree/nbtpage.c:1863 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Це могло статися через переривання VACUUM у версії 9.3 або старше перед оновленням. Будь ласка, виконайте REINDEX." -#: access/nbtree/nbtutils.c:2677 +#: access/nbtree/nbtutils.c:5102 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "розмір рядка індексу %zu перевищує максимальний розмір для версії %u btree %zu для індексу \"%s\"" -#: access/nbtree/nbtutils.c:2683 +#: access/nbtree/nbtutils.c:5108 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Рядок індексу посилається на кортеж (%u,,%u) у відношенні \"%s\"." -#: access/nbtree/nbtutils.c:2687 +#: access/nbtree/nbtutils.c:5112 #, c-format -msgid "" -"Values larger than 1/3 of a buffer page cannot be indexed.\n" +msgid "Values larger than 1/3 of a buffer page cannot be indexed.\n" "Consider a function index of an MD5 hash of the value, or use full text indexing." -msgstr "" -"Значення, що займають більше, ніж 1/3 сторінки буферу, не можуть бути індексовані.\n" +msgstr "Значення, що займають більше, ніж 1/3 сторінки буферу, не можуть бути індексовані.\n" "Радимо застосувати індекс MD5-хеш значення або використати повнотекстове індексування." #: access/nbtree/nbtvalidate.c:246 @@ -1523,12 +1710,18 @@ msgstr "" msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "сімейство операторів \"%s\" методу доступу %s не має опорної функції для типів %s та %s" -#: access/spgist/spgutils.c:243 +#: access/sequence/sequence.c:75 access/table/table.c:145 +#: optimizer/util/plancat.c:144 +#, c-format +msgid "cannot open relation \"%s\"" +msgstr "неможливо відкрити відношення \"%s\"" + +#: access/spgist/spgutils.c:245 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "метод стиснення повинен бути визначений, коли тип листів відрізняється від вхідного типу" -#: access/spgist/spgutils.c:1015 +#: access/spgist/spgutils.c:1028 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "Внутрішній розмір кортежу SP-GiST %zu перевищує максимальний %zu" @@ -1543,82 +1736,76 @@ msgstr "тип даних кінцевого вузла SP-GiST %s не відп msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "сімейство операторів \"%s\" методу доступу %s не має опорної функції для типів %d для типу %s" -#: access/table/table.c:145 optimizer/util/plancat.c:145 -#, c-format -msgid "cannot open relation \"%s\"" -msgstr "неможливо відкрити відношення \"%s\"" - -#: access/table/tableam.c:265 +#: access/table/tableam.c:255 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "невірний tid (%u, %u) для відношення \"%s\"" -#: access/table/tableamapi.c:116 +#: access/table/tableamapi.c:109 #, c-format -msgid "%s cannot be empty." -msgstr "%s не може бути пустим." +msgid "\"%s\" cannot be empty." +msgstr "\"%s\" не може бути пустим." -#: access/table/tableamapi.c:123 access/transam/xlogrecovery.c:4808 +#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4858 #, c-format -msgid "%s is too long (maximum %d characters)." -msgstr "%s занадто довгий (максимум %d символів)." +msgid "\"%s\" is too long (maximum %d characters)." +msgstr "\"%s\" занадто довгий (максимум %d символів)." -#: access/table/tableamapi.c:146 +#: access/table/tableamapi.c:139 #, c-format msgid "table access method \"%s\" does not exist" msgstr "табличного методу доступу \"%s\" не існує" -#: access/table/tableamapi.c:151 +#: access/table/tableamapi.c:144 #, c-format msgid "Table access method \"%s\" does not exist." msgstr "Табличного методу доступу \"%s\" не існує." -#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:152 +#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:151 #, c-format msgid "sample percentage must be between 0 and 100" msgstr "відсоток вибірки повинен задаватися числом від 0 до 100" -#: access/transam/commit_ts.c:279 +#: access/transam/commit_ts.c:287 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "не вдалося отримати мітку позначки часу транзакції %u" -#: access/transam/commit_ts.c:377 +#: access/transam/commit_ts.c:385 #, c-format msgid "could not get commit timestamp data" msgstr "не вдалося отримати позначку часу фіксації" -#: access/transam/commit_ts.c:379 +#: access/transam/commit_ts.c:387 #, c-format msgid "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "Переконайтесь, що в конфігурації основного серверу встановлений параметр \"%s\"." -#: access/transam/commit_ts.c:381 +#: access/transam/commit_ts.c:389 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Переконайтесь, що в конфігурації встановлений параметр \"%s\"." -#: access/transam/multixact.c:1023 +#: access/transam/multixact.c:1091 #, c-format -msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" -msgstr "щоб уникнути втрат даних у базі даних \"%s\", база даних не приймає команди, що створюють нові MultiXactIds" +msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"" +msgstr "база даних не приймає команди, які призначають нові MultiXactId, щоб уникнути втрати даних через зациклення у базі даних \"%s\"" -#: access/transam/multixact.c:1025 access/transam/multixact.c:1032 -#: access/transam/multixact.c:1056 access/transam/multixact.c:1065 +#: 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" +msgid "Execute a database-wide VACUUM in that database.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." -msgstr "" -"Виконати очистку (VACUUM) по всій базі даних.\n" +msgstr "Виконати очистку (VACUUM) по всій базі даних.\n" "Можливо, вам доведеться зафіксувати, відкотити назад старі підготовані транзакції або видалити застарілі слоти реплікації." -#: access/transam/multixact.c:1030 +#: access/transam/multixact.c:1098 #, c-format -msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" -msgstr "щоб уникнути втрат даних в базі даних з OID %u, база даних не приймає команди, що створюють нові MultiXactIds" +msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database with OID %u" +msgstr "база даних не приймає команди, які призначають нові MultiXactId, щоб уникнути втрати даних через зациклення у базі даних з OID %u" -#: access/transam/multixact.c:1051 access/transam/multixact.c:2333 +#: 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" @@ -1627,7 +1814,7 @@ msgstr[1] "бази даних \"%s\" повинні бути очищені (va msgstr[2] "баз даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactIds буде використано (%u)" msgstr[3] "баз даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactId буде використано (%u)" -#: access/transam/multixact.c:1060 access/transam/multixact.c:2342 +#: 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" @@ -1636,12 +1823,12 @@ msgstr[1] "бази даних з OID %u повинні бути очищені msgstr[2] "баз даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactIds буде використано (%u)" msgstr[3] "баз даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactId буде використано (%u)" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1189 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "перевищено ліміт членів мультитранзакції" -#: access/transam/multixact.c:1122 +#: 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." @@ -1650,12 +1837,12 @@ msgstr[1] "Мультитранзакція створена цією коман msgstr[2] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." msgstr[3] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." -#: access/transam/multixact.c:1127 +#: 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 "Виконати очистку (VACUUM) по всій базі даних з OID %u зі зменшенням значення vacuum_multixact_freeze_min_age та vacuum_multixact_freeze_table_age settings." +msgid "Execute a database-wide VACUUM in database with OID %u with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." +msgstr "Виконати очистку (VACUUM) по всій базі даних з OID %u зі зменшенням значення \"vacuum_multixact_freeze_min_age\" та \"vacuum_multixact_freeze_table_age settings\"." -#: access/transam/multixact.c:1158 +#: 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" @@ -1664,201 +1851,202 @@ msgstr[1] "база даних з OID %u повинна бути очищена msgstr[2] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" msgstr[3] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" -#: access/transam/multixact.c:1163 +#: 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) по всій цій базі даних зі зменшенням значення vacuum_multixact_freeze_min_age та vacuum_multixact_freeze_table_age settings." +msgid "Execute a database-wide VACUUM in that database with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." +msgstr "Виконати очищення (VACUUM) по всій цій базі даних зі зменшенням значення \"vacuum_multixact_freeze_min_age\" та \"vacuum_multixact_freeze_table_age\" settings." -#: access/transam/multixact.c:1302 +#: access/transam/multixact.c:1371 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u припинив існування -- очевидно відбулося зациклення" -#: access/transam/multixact.c:1308 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ще не був створений -- очевидно відбулося зациклення" -#: access/transam/multixact.c:2338 access/transam/multixact.c:2347 -#: access/transam/varsup.c:151 access/transam/varsup.c:158 -#: access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:2479 access/transam/multixact.c:2488 #, c-format -msgid "" -"To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" +msgid "To avoid MultiXactId 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 "" -"Щоб уникнути вимкнення бази даних, виконайте VACUUM для всієї бази даних.\n" -"Можливо, вам доведеться зафіксувати або відкотити назад старі підготовленні транзакції або видалити застарілі слоти реплікації." +msgstr "Щоб уникнути збоїв у призначенні MultiXactId, виконайте VACUUM для всієї бази даних у цій базі даних.\n" +"Вам також може знадобитися зафіксувати або відкотити старі підготовлені транзакції, або видалити застарілі слоти реплікації." -#: access/transam/multixact.c:2622 +#: 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 "Захист від зациклення члену MultiXact вимкнена, оскільки найстаріша контрольна точка MultiXact %u не існує на диску" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2789 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Захист від зациклення члену MultiXact наразі ввімкнена" -#: access/transam/multixact.c:3027 +#: access/transam/multixact.c:3180 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "найстарішу MultiXact %u не знайдено, найновіша MultiXact %u, скорочення пропускається" -#: access/transam/multixact.c:3045 +#: access/transam/multixact.c:3198 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "неможливо виконати скорочення до MultiXact %u, оскільки її не існує на диску, скорочення пропускається" -#: access/transam/multixact.c:3359 +#: access/transam/multixact.c:3517 #, c-format msgid "invalid MultiXactId: %u" msgstr "неприпустимий MultiXactId: %u" -#: access/transam/parallel.c:729 access/transam/parallel.c:848 +#: access/transam/parallel.c:731 access/transam/parallel.c:850 #, c-format msgid "parallel worker failed to initialize" msgstr "не вдалося виконати ініціалізацію паралельного виконавця" -#: access/transam/parallel.c:730 access/transam/parallel.c:849 +#: access/transam/parallel.c:732 access/transam/parallel.c:851 #, c-format msgid "More details may be available in the server log." msgstr "Більше деталей можуть бути доступні в журналі серверу." -#: access/transam/parallel.c:910 +#: access/transam/parallel.c:912 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster завершився під час паралельної транзакції" -#: access/transam/parallel.c:1097 +#: access/transam/parallel.c:1099 #, c-format msgid "lost connection to parallel worker" msgstr "втрачено зв'язок з паралельним виконавцем" -#: access/transam/parallel.c:1163 access/transam/parallel.c:1165 +#: access/transam/parallel.c:1155 access/transam/parallel.c:1157 msgid "parallel worker" msgstr "паралельний виконавець" -#: access/transam/parallel.c:1319 replication/logical/applyparallelworker.c:893 +#: access/transam/parallel.c:1327 replication/logical/applyparallelworker.c:890 #, c-format msgid "could not map dynamic shared memory segment" msgstr "не вдалося відобразити динамічний сегмент спільної пам'яті" -#: access/transam/parallel.c:1324 replication/logical/applyparallelworker.c:899 +#: access/transam/parallel.c:1332 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неприпустиме магічне число в динамічному сегменті спільної пам'яті" -#: access/transam/rmgr.c:84 +#: access/transam/rmgr.c:93 #, c-format msgid "resource manager with ID %d not registered" msgstr "менеджер ресурсів з ID %d не зареєстрований" -#: access/transam/rmgr.c:85 +#: access/transam/rmgr.c:94 #, c-format -msgid "Include the extension module that implements this resource manager in shared_preload_libraries." -msgstr "Включає модуль розширення, який впроваджує цей менеджер ресурсів у shared_preload_libraries." +msgid "Include the extension module that implements this resource manager in \"shared_preload_libraries\"." +msgstr "Включає модуль розширення, який впроваджує цей менеджер ресурсів у \"shared_preload_libraries\"." -#: access/transam/rmgr.c:101 +#: access/transam/rmgr.c:110 #, c-format msgid "custom resource manager name is invalid" msgstr "назва користувацького менеджера ресурсів неприпустима" -#: access/transam/rmgr.c:102 +#: access/transam/rmgr.c:111 #, c-format msgid "Provide a non-empty name for the custom resource manager." msgstr "Вкажіть непорожню назву для користувацького менеджера ресурсів." -#: access/transam/rmgr.c:105 +#: access/transam/rmgr.c:114 #, c-format msgid "custom resource manager ID %d is out of range" msgstr "ID %d користувацького менеджера ресурсів поза діапазоном" -#: access/transam/rmgr.c:106 +#: access/transam/rmgr.c:115 #, c-format msgid "Provide a custom resource manager ID between %d and %d." msgstr "Вкажіть ID користувацького менеджера ресурсів між %d і %d." -#: access/transam/rmgr.c:111 access/transam/rmgr.c:116 -#: access/transam/rmgr.c:128 +#: access/transam/rmgr.c:120 access/transam/rmgr.c:125 +#: access/transam/rmgr.c:137 #, c-format msgid "failed to register custom resource manager \"%s\" with ID %d" msgstr "не вдалося зареєструвати користувацький менеджер ресурсів \"%s\" з ID %d" -#: access/transam/rmgr.c:112 +#: access/transam/rmgr.c:121 #, c-format -msgid "Custom resource manager must be registered while initializing modules in shared_preload_libraries." -msgstr "Користувацький менеджер ресурсів повинен бути зареєстрований під час ініціалізації модулів у shared_preload_libraries." +msgid "Custom resource manager must be registered while initializing modules in \"shared_preload_libraries\"." +msgstr "Користувацький менеджер ресурсів повинен бути зареєстрований під час ініціалізації модулів у \"shared_preload_libraries\"." -#: access/transam/rmgr.c:117 +#: access/transam/rmgr.c:126 #, c-format msgid "Custom resource manager \"%s\" already registered with the same ID." msgstr "Користувацький менеджер ресурсів \"%s\" вже зареєстрований з таким самим ID." -#: access/transam/rmgr.c:129 +#: access/transam/rmgr.c:138 #, c-format msgid "Existing resource manager with ID %d has the same name." msgstr "Існуючий менеджер ресурсів з ID %d має таку саму назву." -#: access/transam/rmgr.c:135 +#: access/transam/rmgr.c:144 #, c-format msgid "registered custom resource manager \"%s\" with ID %d" msgstr "зареєстрований користувацький менеджер ресурсів \"%s\" з ID %d" -#: access/transam/slru.c:714 +#: access/transam/slru.c:361 +#, c-format +msgid "\"%s\" must be a multiple of %d" +msgstr "\"%s\" має бути кратним %d" + +#: access/transam/slru.c:830 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "файл \"%s\" не існує, вважається нульовим" -#: access/transam/slru.c:946 access/transam/slru.c:952 -#: access/transam/slru.c:960 access/transam/slru.c:965 -#: access/transam/slru.c:972 access/transam/slru.c:977 -#: access/transam/slru.c:984 access/transam/slru.c:991 +#: 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:947 +#: access/transam/slru.c:1060 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Не можливо відкрити файл \"%s\": %m." -#: access/transam/slru.c:953 +#: 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:961 +#: 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:966 +#: 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:973 +#: 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:978 +#: 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:985 +#: access/transam/slru.c:1098 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Не вдалося синхронізувати файл \"%s\": %m." -#: access/transam/slru.c:992 +#: access/transam/slru.c:1105 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Не можливо закрити файл \"%s\": %m." -#: access/transam/slru.c:1253 +#: access/transam/slru.c:1431 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "не вдалося спустошити каталог \"%s\": очевидно сталося зациклення" @@ -1903,72 +2091,72 @@ msgstr "Ідентифікатори ліній часу повинні бути msgid "requested timeline %u is not in this server's history" msgstr "в історії даного серверу немає запитаної лінії часу %u" -#: access/transam/twophase.c:386 +#: access/transam/twophase.c:368 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "ідентифікатор транзакції \"%s\" задовгий" -#: access/transam/twophase.c:393 +#: access/transam/twophase.c:375 #, c-format msgid "prepared transactions are disabled" msgstr "підготовлені транзакції вимкнено" -#: access/transam/twophase.c:394 +#: access/transam/twophase.c:376 #, c-format -msgid "Set max_prepared_transactions to a nonzero value." -msgstr "Встановіть ненульове значення параметра max_prepared_transactions." +msgid "Set \"max_prepared_transactions\" to a nonzero value." +msgstr "Встановіть ненульове значення параметра \"max_prepared_transactions\"." -#: access/transam/twophase.c:413 +#: access/transam/twophase.c:395 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "ідентифікатор транзакції \"%s\" вже використовується" -#: access/transam/twophase.c:422 access/transam/twophase.c:2517 +#: access/transam/twophase.c:404 access/transam/twophase.c:2540 #, c-format msgid "maximum number of prepared transactions reached" msgstr "досягнуто максимального числа підготованих транзакцій" -#: access/transam/twophase.c:423 access/transam/twophase.c:2518 +#: access/transam/twophase.c:405 access/transam/twophase.c:2541 #, c-format -msgid "Increase max_prepared_transactions (currently %d)." -msgstr "Збільшіть max_prepared_transactions (наразі %d)." +msgid "Increase \"max_prepared_transactions\" (currently %d)." +msgstr "Збільшіть \"max_prepared_transactions\" (наразі %d)." -#: access/transam/twophase.c:599 +#: access/transam/twophase.c:580 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "підготовлена транзакція з ідентифікатором \"%s\" зайнята" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:586 #, c-format msgid "permission denied to finish prepared transaction" msgstr "немає дозволу для завершення підготовлених транзакцій" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:587 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Треба пути суперкористувачем або користувачем, який підготував транзакцію." -#: access/transam/twophase.c:617 +#: access/transam/twophase.c:598 #, c-format msgid "prepared transaction belongs to another database" msgstr "підготовлена транзакція належить до іншої бази даних" -#: access/transam/twophase.c:618 +#: access/transam/twophase.c:599 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "З'єднайтесь з базою даних, де була підготовлена транзакція, щоб завершити її." -#: access/transam/twophase.c:633 +#: access/transam/twophase.c:614 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "підготовленої транзакції з ідентифікатором \"%s\" не існує" -#: access/transam/twophase.c:1168 +#: access/transam/twophase.c:1190 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "перевищено граничний розмір файла у 2-фазовому стані" -#: access/transam/twophase.c:1323 +#: access/transam/twophase.c:1345 #, c-format msgid "incorrect size of file \"%s\": %lld byte" msgid_plural "incorrect size of file \"%s\": %lld bytes" @@ -1977,58 +2165,59 @@ msgstr[1] "неправильний розмір файлу \"%s\": %lld бай msgstr[2] "неправильний розмір файлу \"%s\": %lld байтів" msgstr[3] "неправильний розмір файлу \"%s\": %lld байтів" -#: access/transam/twophase.c:1332 +#: access/transam/twophase.c:1354 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "неправильне вирівнювання зсуву CRC для файлу \"%s\"" -#: access/transam/twophase.c:1350 +#: access/transam/twophase.c:1372 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %lld" -#: access/transam/twophase.c:1365 +#: access/transam/twophase.c:1387 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "неприпустиме магічне число, збережене у файлі\"%s\"" -#: access/transam/twophase.c:1371 +#: access/transam/twophase.c:1393 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "неприпустимий розмір, збережений у файлі \"%s\"" -#: access/transam/twophase.c:1383 +#: access/transam/twophase.c:1405 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "обчислена контрольна сума CRC не відповідає значенню, збереженому у файлі \"%s\"" -#: access/transam/twophase.c:1413 access/transam/xlogrecovery.c:590 -#: replication/logical/logical.c:209 replication/walsender.c:687 +#: access/transam/twophase.c:1435 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 "Не вдалося розмістити обробник журналу транзакцій." -#: access/transam/twophase.c:1423 +#: access/transam/twophase.c:1445 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%X: %s" -#: access/transam/twophase.c:1428 +#: access/transam/twophase.c:1450 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%X" -#: access/transam/twophase.c:1436 +#: access/transam/twophase.c:1458 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "очікувані дані 2-фазного стану відсутні в WAL при %X/%X" -#: access/transam/twophase.c:1732 +#: access/transam/twophase.c:1754 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "не вдалося відтворити файл \"%s\": %m" -#: access/transam/twophase.c:1859 +#: access/transam/twophase.c:1881 #, 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" @@ -2037,660 +2226,691 @@ msgstr[1] "%u 2-фазовий стан файлів був записаний msgstr[2] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" msgstr[3] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" -#: access/transam/twophase.c:2093 +#: access/transam/twophase.c:2116 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "відновлення підготовленої транзакції %u із спільної пам'яті" -#: access/transam/twophase.c:2186 +#: access/transam/twophase.c:2209 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "видалення застарілого файла 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2216 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "видалення з пам'яті застарілого 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2206 +#: access/transam/twophase.c:2229 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "видалення файлу майбутнього 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2213 +#: access/transam/twophase.c:2236 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "видалення з пам'яті майбутнього 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2238 +#: access/transam/twophase.c:2261 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "пошкоджений файл двофазного стану для транзакції %u" -#: access/transam/twophase.c:2243 +#: access/transam/twophase.c:2266 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "пошкоджена пам'ять двофазного стану для транзакції %u" -#: access/transam/twophase.c:2500 +#: access/transam/twophase.c:2523 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "не вдалося відновити файл 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2502 +#: access/transam/twophase.c:2525 #, 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 "Файл 2-фазового стану був знайдений в запису WAL %X/%X, але ця транзакція вже відновлена з диску." -#: access/transam/twophase.c:2510 jit/jit.c:205 utils/fmgr/dfmgr.c:209 -#: utils/fmgr/dfmgr.c:415 +#: access/transam/twophase.c:2533 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:129 -#, c-format -msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" -msgstr "база даних не приймає команди, щоб уникнути втрати даних через зациклення транзакцій в БД \"%s\"" - -#: access/transam/varsup.c:131 access/transam/varsup.c:138 +#: access/transam/varsup.c:156 #, c-format -msgid "" -"Stop the postmaster and vacuum that database in single-user mode.\n" -"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." -msgstr "" -"Зупиніть postmaster і виконайте очищення (vacuum) бази даних в однокористувацькому режимі.\n" -"Можливо, також доведеться зафіксувати або відкотити назад старі підготовлені транзакції, або розірвати застарілі реплікаційні слоти." +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database \"%s\"" +msgstr "база даних не приймає команди, які призначають нові ідентифікатори транзакцій, щоб уникнути обхідної втрати даних у базі даних \"%s\"" -#: access/transam/varsup.c:136 +#: access/transam/varsup.c:163 #, c-format -msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" -msgstr "база даних не приймає команди задля уникнення втрати даних через зациклення транзакцій в базі даних з OID %u" +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database with OID %u" +msgstr "база даних не приймає команди, які призначають нові ідентифікатори транзакцій, щоб уникнути обхідної втрати даних у базі даних з OID %u" -#: access/transam/varsup.c:148 access/transam/varsup.c:463 +#: 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:155 access/transam/varsup.c:470 +#: access/transam/varsup.c:178 +#, c-format +msgid "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 "Щоб уникнути збоїв у призначенні ID транзакцій, виконайте VACUUM для всієї бази даних у цій базі даних.\n" +"Вам також може знадобитися зафіксувати або відкотити старі підготовлені транзакції, або видалити застарілі слоти реплікації." + +#: access/transam/varsup.c:182 access/transam/varsup.c:497 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "база даних з OID %u повинна бути очищена (граничне число транзакцій: %u)" -#: access/transam/xact.c:1102 +#: 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 transaction IDs during a parallel operation" +msgstr "не можна призначити ідентифікатори транзакцій під час паралельних операцій" + +#: access/transam/xact.c:840 +#, c-format +msgid "cannot modify data in a parallel worker" +msgstr "неможливо змінити дані паралельного виконавця" + +#: access/transam/xact.c:1115 +#, c-format +msgid "cannot start commands during a parallel operation" +msgstr "неможливо запустити команди під час паралельних операцій" + +#: access/transam/xact.c:1123 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "в одній транзакції не може бути більше 2^32-2 команд" -#: access/transam/xact.c:1643 +#: access/transam/xact.c:1664 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "перевищено межу числа зафіксованих підтранзакцій (%d)" -#: access/transam/xact.c:2513 +#: access/transam/xact.c:2561 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "неможливо виконати PREPARE для транзакції, що здійснювалася на тимчасових об'єктах" -#: access/transam/xact.c:2523 +#: access/transam/xact.c:2571 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "не можна виконати PREPARE для транзакції, яка має експортовані знімки" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3490 +#: access/transam/xact.c:3593 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s неможливо запустити всередині блоку транзакції" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3500 +#: access/transam/xact.c:3603 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s неможливо запустити всередині підтранзакції" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3510 +#: access/transam/xact.c:3613 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s не можна використовувати в межах конвеєра" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3520 +#: access/transam/xact.c:3623 #, c-format msgid "%s cannot be executed from a function" msgstr "%s неможливо виконати з функції" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3591 access/transam/xact.c:3916 -#: access/transam/xact.c:3995 access/transam/xact.c:4118 -#: access/transam/xact.c:4269 access/transam/xact.c:4338 -#: access/transam/xact.c:4449 +#: access/transam/xact.c:3694 access/transam/xact.c:4019 +#: access/transam/xact.c:4098 access/transam/xact.c:4221 +#: access/transam/xact.c:4372 access/transam/xact.c:4441 +#: access/transam/xact.c:4552 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s може використовуватися тільки в блоках транзакції" -#: access/transam/xact.c:3802 +#: access/transam/xact.c:3905 #, c-format msgid "there is already a transaction in progress" msgstr "транзакція вже виконується" -#: access/transam/xact.c:3921 access/transam/xact.c:4000 -#: access/transam/xact.c:4123 +#: access/transam/xact.c:4024 access/transam/xact.c:4103 +#: access/transam/xact.c:4226 #, c-format msgid "there is no transaction in progress" msgstr "немає незавершеної транзакції" -#: access/transam/xact.c:4011 +#: access/transam/xact.c:4114 #, c-format msgid "cannot commit during a parallel operation" msgstr "не можна фіксувати транзакції під час паралельних операцій" -#: access/transam/xact.c:4134 +#: access/transam/xact.c:4237 #, c-format msgid "cannot abort during a parallel operation" msgstr "не можна перервати під час паралельних операцій" -#: access/transam/xact.c:4233 +#: access/transam/xact.c:4336 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "не можна визначати точки збереження під час паралельних операцій" -#: access/transam/xact.c:4320 +#: access/transam/xact.c:4423 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "не можна вивільняти точки збереження під час паралельних транзакцій" -#: access/transam/xact.c:4330 access/transam/xact.c:4381 -#: access/transam/xact.c:4441 access/transam/xact.c:4490 +#: access/transam/xact.c:4433 access/transam/xact.c:4484 +#: access/transam/xact.c:4544 access/transam/xact.c:4593 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "точка збереження \"%s\" не існує" -#: access/transam/xact.c:4387 access/transam/xact.c:4496 +#: access/transam/xact.c:4490 access/transam/xact.c:4599 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "точка збереження \"%s\" не існує на поточному рівні збереження точок" -#: access/transam/xact.c:4429 +#: access/transam/xact.c:4532 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "не можна відкотити назад до точки збереження під час паралельних операцій" -#: access/transam/xact.c:4557 -#, c-format -msgid "cannot start subtransactions during a parallel operation" -msgstr "не можна запустити підтранзакцію під час паралельних операцій" - -#: access/transam/xact.c:4625 -#, c-format -msgid "cannot commit subtransactions during a parallel operation" -msgstr "не можна визначити підтранзакцію під час паралельних операцій" - -#: access/transam/xact.c:5271 +#: access/transam/xact.c:5376 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "в одній транзакції не може бути більше 2^32-1 підтранзакцій" -#: access/transam/xlog.c:1468 +#: access/transam/xlog.c:1541 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "запит на очищення минулого кінця згенерованого WAL; запит %X/%X, поточна позиція %X/%X" -#: access/transam/xlog.c:2230 +#: access/transam/xlog.c:1768 +#, c-format +msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X" +msgstr "не вдалося прочитати останній кінець згенерованого WAL: запит %X/%X, поточна позиція %X/%X" + +#: access/transam/xlog.c:2209 access/transam/xlog.c:4500 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "не вдалося записати у файл журналу %s (зсув: %u, довжина: %zu): %m" +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:3457 access/transam/xlogutils.c:833 -#: replication/walsender.c:2725 +#: access/transam/xlog.c:2227 +#, c-format +msgid "\"%s\" must be set to -1 during binary upgrade mode." +msgstr "\"%s\" має бути встановлено на -1 під час двійкового режиму оновлення." + +#: access/transam/xlog.c:2476 +#, 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:3738 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:3741 +#: access/transam/xlog.c:4060 #, c-format msgid "could not rename file \"%s\": %m" msgstr "не вдалося перейменувати файл \"%s\": %m" -#: access/transam/xlog.c:3783 access/transam/xlog.c:3793 +#: access/transam/xlog.c:4103 access/transam/xlog.c:4114 +#: access/transam/xlog.c:4135 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "необхідний каталог WAL \"%s\" не існує" -#: access/transam/xlog.c:3799 +#: access/transam/xlog.c:4120 access/transam/xlog.c:4141 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "створюється відсутній каталог WAL \"%s\"" -#: access/transam/xlog.c:3802 commands/dbcommands.c:3172 +#: access/transam/xlog.c:4124 access/transam/xlog.c:4144 +#: commands/dbcommands.c:3259 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "не вдалося створити відстуній каталог \"%s\": %m" -#: access/transam/xlog.c:3869 +#: access/transam/xlog.c:4211 #, c-format msgid "could not generate secret authorization token" msgstr "не вдалося згенерувати секретний токен для авторизації" -#: access/transam/xlog.c:4019 access/transam/xlog.c:4028 -#: access/transam/xlog.c:4052 access/transam/xlog.c:4059 -#: access/transam/xlog.c:4066 access/transam/xlog.c:4071 -#: access/transam/xlog.c:4078 access/transam/xlog.c:4085 -#: access/transam/xlog.c:4092 access/transam/xlog.c:4099 -#: access/transam/xlog.c:4106 access/transam/xlog.c:4113 -#: access/transam/xlog.c:4122 access/transam/xlog.c:4129 -#: utils/init/miscinit.c:1769 +#: access/transam/xlog.c:4362 access/transam/xlog.c:4372 +#: access/transam/xlog.c:4398 access/transam/xlog.c:4406 +#: access/transam/xlog.c:4414 access/transam/xlog.c:4420 +#: access/transam/xlog.c:4428 access/transam/xlog.c:4436 +#: access/transam/xlog.c:4444 access/transam/xlog.c:4452 +#: access/transam/xlog.c:4460 access/transam/xlog.c:4468 +#: access/transam/xlog.c:4478 access/transam/xlog.c:4486 +#: utils/init/miscinit.c:1758 #, c-format msgid "database files are incompatible with server" msgstr "файли бази даних є несумісними з даним сервером" -#: access/transam/xlog.c:4020 +#: access/transam/xlog.c:4363 #, 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:4024 +#: access/transam/xlog.c:4367 #, 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:4029 +#: access/transam/xlog.c:4373 #, 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:4032 access/transam/xlog.c:4056 -#: access/transam/xlog.c:4063 access/transam/xlog.c:4068 +#: access/transam/xlog.c:4376 access/transam/xlog.c:4402 +#: access/transam/xlog.c:4410 access/transam/xlog.c:4416 #, c-format msgid "It looks like you need to initdb." msgstr "Здається, Вам треба виконати initdb." -#: access/transam/xlog.c:4043 +#: access/transam/xlog.c:4388 #, c-format msgid "incorrect checksum in control file" msgstr "помилка контрольної суми у файлі pg_control" -#: access/transam/xlog.c:4053 +#: access/transam/xlog.c:4399 #, 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:4060 +#: access/transam/xlog.c:4407 #, 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:4067 +#: access/transam/xlog.c:4415 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Здається, в кластері баз даних і в програмі сервера використовуються різні формати чисел з плаваючою точкою." -#: access/transam/xlog.c:4072 +#: access/transam/xlog.c:4421 #, 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:4075 access/transam/xlog.c:4082 -#: access/transam/xlog.c:4089 access/transam/xlog.c:4096 -#: access/transam/xlog.c:4103 access/transam/xlog.c:4110 -#: access/transam/xlog.c:4117 access/transam/xlog.c:4125 -#: access/transam/xlog.c:4132 +#: access/transam/xlog.c:4424 access/transam/xlog.c:4432 +#: access/transam/xlog.c:4440 access/transam/xlog.c:4448 +#: access/transam/xlog.c:4456 access/transam/xlog.c:4464 +#: access/transam/xlog.c:4472 access/transam/xlog.c:4481 +#: access/transam/xlog.c:4489 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Здається, вам потрібно перекомпілювати сервер або виконати initdb." -#: access/transam/xlog.c:4079 +#: access/transam/xlog.c:4429 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Кластер бази даних було ініціалізовано з ELSEG_SIZE %d, але сервер було скомпільовано з ELSEG_SIZE %d." -#: access/transam/xlog.c:4086 +#: access/transam/xlog.c:4437 #, 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:4093 +#: access/transam/xlog.c:4445 #, 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:4100 +#: access/transam/xlog.c:4453 #, 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:4107 +#: access/transam/xlog.c:4461 #, 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:4114 +#: access/transam/xlog.c:4469 #, 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:4123 +#: access/transam/xlog.c:4479 #, 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:4130 +#: access/transam/xlog.c:4487 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Кластер бази даних було ініціалізовано з USE_FLOAT8_BYVAL, але сервер було скомпільовано без USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4139 +#: access/transam/xlog.c:4496 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" -msgstr[0] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" -msgstr[1] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" -msgstr[2] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" -msgstr[3] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +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 байтів)" +msgstr[2] "невірний розмір сегмента WAL у файлі керування (%d байтів)" +msgstr[3] "невірний розмір сегмента WAL у файлі керування (%d байтів)" -#: access/transam/xlog.c:4151 +#: access/transam/xlog.c:4509 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"min_wal_size\" має бути мінімум у 2 рази більше, ніж \"wal_segment_size\"" -#: access/transam/xlog.c:4155 +#: access/transam/xlog.c:4513 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"max_wal_size\" має бути мінімум у 2 рази більше, ніж \"wal_segment_size\"" -#: access/transam/xlog.c:4310 catalog/namespace.c:4335 -#: commands/tablespace.c:1216 commands/user.c:2530 commands/variable.c:72 -#: utils/error/elog.c:2209 +#: access/transam/xlog.c:4661 catalog/namespace.c:4681 +#: 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:4356 commands/user.c:2546 commands/variable.c:173 -#: utils/error/elog.c:2235 +#: access/transam/xlog.c:4707 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:4770 +#: access/transam/xlog.c:5128 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "не вдалося записати початкове завантаження випереджувального журналювання: %m" -#: access/transam/xlog.c:4778 +#: access/transam/xlog.c:5136 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "не вдалося скинути на диск початкове завантаження випереджувального журналювання: %m" -#: access/transam/xlog.c:4784 +#: access/transam/xlog.c:5142 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "не вдалося закрити початкове завантаження випереджувального журналювання: %m" -#: access/transam/xlog.c:5001 +#: access/transam/xlog.c:5367 #, c-format -msgid "WAL was generated with wal_level=minimal, cannot continue recovering" -msgstr "WAL був створений з параметром wal_level=minimal, неможливо продовжити відновлення" +msgid "WAL was generated with \"wal_level=minimal\", cannot continue recovering" +msgstr "WAL був створений з \"wal_level=minimal\", неможливо продовжити відновлення" -#: access/transam/xlog.c:5002 +#: access/transam/xlog.c:5368 #, c-format -msgid "This happens if you temporarily set wal_level=minimal on the server." -msgstr "Це трапляється, якщо ви тимчасово встановили параметр wal_level=minimal на сервері." +msgid "This happens if you temporarily set \"wal_level=minimal\" on the server." +msgstr "Це трапляється, якщо ви тимчасово встановили \"wal_level=minimal\" на сервері." -#: access/transam/xlog.c:5003 +#: access/transam/xlog.c:5369 #, c-format -msgid "Use a backup taken after setting wal_level to higher than minimal." -msgstr "Використовуйте резервну копію, зроблену після встановлення значення wal_level, що перевищує максимальне." +msgid "Use a backup taken after setting \"wal_level\" to higher than \"minimal\"." +msgstr "Використовуйте резервну копію, зроблену після встановлення значення wal_level, що перевищує мінимальний рівень." -#: access/transam/xlog.c:5067 +#: access/transam/xlog.c:5434 #, c-format msgid "control file contains invalid checkpoint location" msgstr "контрольний файл містить недійсне розташування контрольної точки" -#: access/transam/xlog.c:5078 +#: access/transam/xlog.c:5445 #, c-format msgid "database system was shut down at %s" msgstr "система бази даних була вимкнена %s" -#: access/transam/xlog.c:5084 +#: access/transam/xlog.c:5451 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система бази даних завершила роботу у процесі відновлення %s" -#: access/transam/xlog.c:5090 +#: access/transam/xlog.c:5457 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "завершення роботи бази даних було перервано; останній момент роботи %s" -#: access/transam/xlog.c:5096 +#: access/transam/xlog.c:5463 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "система бази даних була перервана в процесі відновлення %s" -#: access/transam/xlog.c:5098 +#: access/transam/xlog.c:5465 #, 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:5104 +#: access/transam/xlog.c:5471 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "робота системи бази даних була перервана в процесі відновлення, час в журналі %s" -#: access/transam/xlog.c:5106 +#: access/transam/xlog.c:5473 #, 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:5112 +#: access/transam/xlog.c:5479 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "робота системи бази даних була перервана; останній момент роботи %s" -#: access/transam/xlog.c:5118 +#: access/transam/xlog.c:5486 #, c-format msgid "control file contains invalid database cluster state" msgstr "контрольний файл містить недійсний стан кластеру бази даних" -#: access/transam/xlog.c:5502 +#: access/transam/xlog.c:5874 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL завершився до завершення онлайн резервного копіювання" -#: access/transam/xlog.c:5503 +#: access/transam/xlog.c:5875 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Всі журнали WAL, створені під час резервного копіювання \"на ходу\", повинні бути в наявності для відновлення." -#: access/transam/xlog.c:5506 +#: access/transam/xlog.c:5879 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL завершився до узгодженої точки відновлення" -#: access/transam/xlog.c:5552 +#: access/transam/xlog.c:5925 #, c-format msgid "selected new timeline ID: %u" msgstr "вибрано новий ID часової лінії: %u" -#: access/transam/xlog.c:5585 +#: access/transam/xlog.c:5958 #, c-format msgid "archive recovery complete" msgstr "відновлення архіву завершено" -#: access/transam/xlog.c:6191 +#: access/transam/xlog.c:6587 #, c-format msgid "shutting down" msgstr "завершення роботи" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6230 +#: access/transam/xlog.c:6626 #, 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:6242 +#: access/transam/xlog.c:6638 #, 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:6307 +#: access/transam/xlog.c:6703 #, 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 "точка перезапуску завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб; lsn=%X/%X, lsn повтору=%X/%X" -#: access/transam/xlog.c:6330 +#: access/transam/xlog.c:6726 #, 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 "контрольна точка завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб; lsn=%X/%X, lsn повтору=%X/%X" -#: access/transam/xlog.c:6768 +#: access/transam/xlog.c:7208 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "під час того вимкнення БД помічено конкурентну активність у випереджувальному журналюванні" -#: access/transam/xlog.c:7329 +#: access/transam/xlog.c:7793 #, c-format msgid "recovery restart point at %X/%X" msgstr "відновлення збереженої точки %X/%X" -#: access/transam/xlog.c:7331 +#: access/transam/xlog.c:7795 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Остання завершена транзакція була в %s." -#: access/transam/xlog.c:7579 +#: access/transam/xlog.c:8057 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка відновлення \"%s\" створена в %X/%X" -#: access/transam/xlog.c:7786 +#: access/transam/xlog.c:8264 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "онлайн резервне копіювання скасовано, неможливо продовжити відновлення" -#: access/transam/xlog.c:7843 +#: access/transam/xlog.c:8322 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "неочікуваний ID лінії часу %u (повинен бути %u) у записі контрольної точки вимкнення" -#: access/transam/xlog.c:7901 +#: access/transam/xlog.c:8380 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "неочікуваний ID лінії часу %u (повинен бути %u) у записі контрольної точки онлайн" -#: access/transam/xlog.c:7930 +#: access/transam/xlog.c:8409 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" msgstr "неочікуваний ID лінії часу %u (повинен бути %u) у записі кінця відновлення" -#: access/transam/xlog.c:8197 +#: access/transam/xlog.c:8680 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "не вдалосьясинхронізувати файл наскрізного запису %s: %m" -#: access/transam/xlog.c:8202 +#: access/transam/xlog.c:8685 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "не вдалося fdatasync файл \"%s\": %m" -#: access/transam/xlog.c:8287 access/transam/xlog.c:8610 +#: access/transam/xlog.c:8772 access/transam/xlog.c:9108 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "Обраний рівень WAL недостатній для резервного копіювання \"на ходу\"" -#: access/transam/xlog.c:8288 access/transam/xlog.c:8611 -#: access/transam/xlogfuncs.c:254 +#: access/transam/xlog.c:8773 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\" при запуску серверу." +msgid "\"wal_level\" must be set to \"replica\" or \"logical\" at server start." +msgstr "\"wal_level\" потрібно задати \"replica\" або \"logical\" при запуску сервера." -#: access/transam/xlog.c:8293 +#: access/transam/xlog.c:8778 #, c-format msgid "backup label too long (max %d bytes)" msgstr "мітка резервного копіювання задовга (максимум %d байт)" -#: access/transam/xlog.c:8414 +#: access/transam/xlog.c:8899 #, c-format -msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" -msgstr "Після останньої точки відновлення був відтворений WAL, створений в режимі full_page_writes=off" +msgid "WAL generated with \"full_page_writes=off\" was replayed since last restartpoint" +msgstr "Після останньої точки відновлення був відтворений WAL, створений в режимі \"full_page_writes=off\"" -#: access/transam/xlog.c:8416 access/transam/xlog.c:8699 +#: access/transam/xlog.c:8901 access/transam/xlog.c:9197 #, 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 на основному сервері, а потім спробуйте ще раз створити резервну копію в Інтернеті." +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:8483 backup/basebackup.c:1351 utils/adt/misc.c:354 +#: access/transam/xlog.c:8981 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:8490 backup/basebackup.c:1356 utils/adt/misc.c:359 +#: access/transam/xlog.c:8988 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:8649 backup/basebackup.c:1217 +#: access/transam/xlog.c:9109 +#, c-format +msgid "wal_level must be set to \"replica\" or \"logical\" at server start." +msgstr "встановіть wal_level \"replica\" або \"logical\" при запуску серверу." + +#: access/transam/xlog.c:9147 backup/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "режим очікування було підвищено у процесі резервного копіювання \"на ходу\"" -#: access/transam/xlog.c:8650 backup/basebackup.c:1218 +#: access/transam/xlog.c:9148 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:8697 +#: access/transam/xlog.c:9195 #, c-format -msgid "WAL generated with full_page_writes=off was replayed during online backup" -msgstr "У процесі резервного копіювання \"на ходу\" був відтворений WAL, створений в режимі full_page_writes=off" +msgid "WAL generated with \"full_page_writes=off\" was replayed during online backup" +msgstr "WAL створений з \"full_page_writes=off\" було відтворено під час резервного копіювання" -#: access/transam/xlog.c:8813 +#: access/transam/xlog.c:9311 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "резервне копіювання виконане, очікуються необхідні сегменти WAL для архівації" -#: access/transam/xlog.c:8827 +#: access/transam/xlog.c:9325 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "все ще чекає на необхідні сегменти WAL для архівації (%d секунд пройшло)" -#: access/transam/xlog.c:8829 +#: access/transam/xlog.c:9327 #, c-format -msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." -msgstr "Перевірте, чи правильно виконується команда archive_command. Ви можете безпечно скасувати це резервне копіювання, але резервна копія БД буде непридатна без усіх сегментів WAL." +msgid "Check that your \"archive_command\" is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." +msgstr "Перевірте, що ваша \"archive_command\" виконується належним чином. Ви можете безпечно скасувати резервну копію, але резервне копіювання бази даних буде непридатним без всіх сегментів WAL." -#: access/transam/xlog.c:8836 +#: access/transam/xlog.c:9334 #, c-format msgid "all required WAL segments have been archived" msgstr "усі необхідні сегменти WAL архівовані" -#: access/transam/xlog.c:8840 +#: access/transam/xlog.c:9338 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "архівація WAL не налаштована; ви повинні забезпечити копіювання всіх необхідних сегментів WAL іншими засобами для отримання резервної копії" -#: access/transam/xlog.c:8879 +#: access/transam/xlog.c:9377 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "припинення резервного копіювання через завершення обслуговуючого процесу до виклику pg_backup_stop" -#: access/transam/xlogarchive.c:214 +#: access/transam/xlogarchive.c:213 #, c-format msgid "archive file \"%s\" has wrong size: %lld instead of %lld" msgstr "файл архіву \"%s\" має неправильний розмір: %lld замість %lld" -#: access/transam/xlogarchive.c:223 +#: access/transam/xlogarchive.c:222 #, c-format msgid "restored log file \"%s\" from archive" msgstr "відновлений файл журналу \"%s\" з архіву" -#: access/transam/xlogarchive.c:237 +#: access/transam/xlogarchive.c:236 #, c-format -msgid "restore_command returned a zero exit status, but stat() failed." -msgstr "restore_command повернула нульовий статус виходу, але stat() не вдався." +msgid "\"restore_command\" returned a zero exit status, but stat() failed." +msgstr "\"restore_command\" повернула нульовий статус виходу, але виклик stat() не вдався." -#: access/transam/xlogarchive.c:269 +#: access/transam/xlogarchive.c:268 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "неможливо відновити файл \"%s\" з архіву: %s" @@ -2698,104 +2918,114 @@ msgstr "неможливо відновити файл \"%s\" з архіву: % #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:347 +#: access/transam/xlogarchive.c:346 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:457 access/transam/xlogarchive.c:537 +#: access/transam/xlogarchive.c:456 access/transam/xlogarchive.c:536 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "неможливо створити файл статусу архіву \"%s\": %m" -#: access/transam/xlogarchive.c:465 access/transam/xlogarchive.c:545 +#: access/transam/xlogarchive.c:464 access/transam/xlogarchive.c:544 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "неможливо записати файл архівного статусу \"%s\": %m" -#: access/transam/xlogfuncs.c:75 backup/basebackup.c:973 +#: access/transam/xlogfuncs.c:69 backup/basebackup.c:997 #, c-format msgid "a backup is already in progress in this session" msgstr "резервне копіювання наразі триває в цьому сеансі" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:140 #, c-format msgid "backup is not in progress" msgstr "резервне копіювання не виконується" -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlogfuncs.c:141 #, c-format msgid "Did you call pg_backup_start()?" msgstr "Ви викликали pg_backup_start()?" -#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:248 -#: access/transam/xlogfuncs.c:287 access/transam/xlogfuncs.c:308 -#: access/transam/xlogfuncs.c:329 +#: access/transam/xlogfuncs.c:184 access/transam/xlogfuncs.c:242 +#: access/transam/xlogfuncs.c:281 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:323 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "Функції управління WAL не можна використовувати під час відновлення." -#: access/transam/xlogfuncs.c:215 access/transam/xlogfuncs.c:399 -#: access/transam/xlogfuncs.c:457 +#: access/transam/xlogfuncs.c:209 access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:447 #, c-format msgid "%s cannot be executed during recovery." msgstr "%s не можна використовувати під час відновлення." -#: access/transam/xlogfuncs.c:221 +#: access/transam/xlogfuncs.c:215 #, c-format -msgid "pg_log_standby_snapshot() can only be used if wal_level >= replica" -msgstr "pg_log_standby_snapshot() можна використовувати лише якщо wal_level >= replica" +msgid "pg_log_standby_snapshot() can only be used if \"wal_level\" >= \"replica\"" +msgstr "pg_log_standby_snapshot() можна використовувати лише якщо \"wal_level\" >= \"replica\"" -#: access/transam/xlogfuncs.c:253 +#: access/transam/xlogfuncs.c:247 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "Обраний рівень WAL не достатній для створення точки відновлення" -#: access/transam/xlogfuncs.c:261 +#: access/transam/xlogfuncs.c:255 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "значення для точки відновлення перевищує межу (%d симв.)" -#: access/transam/xlogfuncs.c:496 +#: access/transam/xlogfuncs.c:486 #, c-format msgid "invalid WAL file name \"%s\"" msgstr "неприпустиме ім'я файлу WAL \"%s\"" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 -#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 -#: access/transam/xlogfuncs.c:689 +#: access/transam/xlogfuncs.c:522 access/transam/xlogfuncs.c:552 +#: access/transam/xlogfuncs.c:576 access/transam/xlogfuncs.c:599 +#: access/transam/xlogfuncs.c:679 #, c-format msgid "recovery is not in progress" msgstr "відновлення не виконується" -#: access/transam/xlogfuncs.c:533 access/transam/xlogfuncs.c:563 -#: access/transam/xlogfuncs.c:587 access/transam/xlogfuncs.c:610 -#: access/transam/xlogfuncs.c:690 +#: access/transam/xlogfuncs.c:523 access/transam/xlogfuncs.c:553 +#: access/transam/xlogfuncs.c:577 access/transam/xlogfuncs.c:600 +#: access/transam/xlogfuncs.c:680 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Функції управління відновленням можна використовувати тільки під час відновлення." -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#: access/transam/xlogfuncs.c:528 access/transam/xlogfuncs.c:558 #, c-format msgid "standby promotion is ongoing" msgstr "просування в режимі очікування триває" -#: access/transam/xlogfuncs.c:539 access/transam/xlogfuncs.c:569 +#: access/transam/xlogfuncs.c:529 access/transam/xlogfuncs.c:559 #, c-format msgid "%s cannot be executed after promotion is triggered." msgstr "%s не може бути виконаний після того як підвищення запущено." -#: access/transam/xlogfuncs.c:695 +#: access/transam/xlogfuncs.c:685 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "\"wait_seconds\" не має бути від'ємним чи нулем" -#: access/transam/xlogfuncs.c:715 storage/ipc/signalfuncs.c:265 +#: access/transam/xlogfuncs.c:707 storage/ipc/signalfuncs.c:265 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "надіслати сигнал процесу postmaster не вдалося: %m" -#: access/transam/xlogfuncs.c:751 +#: access/transam/xlogfuncs.c:739 libpq/be-secure.c:237 libpq/be-secure.c:346 +#, c-format +msgid "terminating connection due to unexpected postmaster exit" +msgstr "завершення підключення через неочікуване закриття головного процесу" + +#: access/transam/xlogfuncs.c:740 +#, c-format +msgid "while waiting on promotion" +msgstr "в очікуванні на підвищення" + +#: access/transam/xlogfuncs.c:744 #, c-format msgid "server did not promote within %d second" msgid_plural "server did not promote within %d seconds" @@ -2804,704 +3034,717 @@ msgstr[1] "сервер не підвищувався протягом %d сек msgstr[2] "сервер не підвищувався протягом %d секунд" msgstr[3] "сервер не підвищувався протягом %d секунд" -#: access/transam/xlogprefetcher.c:1092 +#: access/transam/xlogprefetcher.c:1088 #, c-format -msgid "recovery_prefetch is not supported on platforms that lack posix_fadvise()." -msgstr "recovery_prefetch не підтримується на платформах, у яких відсутня posix_fadvise()." +msgid "\"recovery_prefetch\" is not supported on platforms that lack posix_fadvise()." +msgstr "\"recovery_prefetch\" не підтримується на платформах, у яких відсутня posix_fadvise()." -#: access/transam/xlogreader.c:621 +#: access/transam/xlogreader.c:619 #, c-format msgid "invalid record offset at %X/%X: expected at least %u, got %u" msgstr "неприпустиме зміщення запису в %X/%X: очікувалось хоча б %u, отримано %u" -#: access/transam/xlogreader.c:630 +#: access/transam/xlogreader.c:628 #, c-format msgid "contrecord is requested by %X/%X" msgstr "по зсуву %X/%X запитано продовження запису" -#: access/transam/xlogreader.c:671 access/transam/xlogreader.c:1136 +#: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134 #, c-format msgid "invalid record length at %X/%X: expected at least %u, got %u" msgstr "неприпустима довжина запису %X/%X: очікувалась мінімум %u, отримано %u" -#: access/transam/xlogreader.c:760 +#: access/transam/xlogreader.c:758 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "немає прапорця contrecord в позиції %X/%X" -#: access/transam/xlogreader.c:773 +#: access/transam/xlogreader.c:771 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%X" -#: access/transam/xlogreader.c:1144 +#: access/transam/xlogreader.c:1142 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "невірний ID менеджера ресурсів %u в %X/%X" -#: access/transam/xlogreader.c:1157 access/transam/xlogreader.c:1173 +#: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X" -#: access/transam/xlogreader.c:1211 +#: access/transam/xlogreader.c:1209 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X" -#: access/transam/xlogreader.c:1245 +#: access/transam/xlogreader.c:1243 #, c-format msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%X, зсув %u" -#: access/transam/xlogreader.c:1260 access/transam/xlogreader.c:1302 +#: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300 #, c-format msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u" msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%X, зсув %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1274 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL файл належить іншій системі баз даних: ідентифікатор системи баз даних де міститься WAL файл - %llu, а ідентифікатор системи баз даних pg_control - %llu" -#: access/transam/xlogreader.c:1284 +#: access/transam/xlogreader.c:1282 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Файл WAL належить іншій системі баз даних: некоректний розмір сегменту в заголовку сторінки" -#: access/transam/xlogreader.c:1290 +#: access/transam/xlogreader.c:1288 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "Файл WAL належить іншій системі баз даних: некоректний XLOG_BLCKSZ в заголовку сторінки" -#: access/transam/xlogreader.c:1322 +#: access/transam/xlogreader.c:1320 #, c-format msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u" msgstr "неочікуваний pageaddr %X/%X у сегменті WAL %s, LSN %X/%X, зміщення %u" -#: access/transam/xlogreader.c:1348 +#: access/transam/xlogreader.c:1346 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u" msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%X, зсув %u" -#: access/transam/xlogreader.c:1754 +#: access/transam/xlogreader.c:1749 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X" -#: access/transam/xlogreader.c:1778 +#: access/transam/xlogreader.c:1773 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X" -#: access/transam/xlogreader.c:1785 +#: access/transam/xlogreader.c:1780 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%X" -#: access/transam/xlogreader.c:1821 +#: access/transam/xlogreader.c:1816 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%X" -#: access/transam/xlogreader.c:1837 +#: access/transam/xlogreader.c:1832 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%X" -#: access/transam/xlogreader.c:1851 +#: access/transam/xlogreader.c:1846 #, c-format msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X" -#: access/transam/xlogreader.c:1866 +#: access/transam/xlogreader.c:1861 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%X" -#: access/transam/xlogreader.c:1882 +#: access/transam/xlogreader.c:1877 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X" -#: access/transam/xlogreader.c:1894 +#: access/transam/xlogreader.c:1889 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "невірний ідентифікатор блоку %u в позиції %X/%X" -#: access/transam/xlogreader.c:1961 +#: access/transam/xlogreader.c:1956 #, c-format msgid "record with invalid length at %X/%X" msgstr "запис з невірною довжиною на %X/%X" -#: access/transam/xlogreader.c:1987 +#: access/transam/xlogreader.c:1982 #, c-format msgid "could not locate backup block with ID %d in WAL record" msgstr "не вдалося знайти блок резервної копії з ID %d у записі WAL" -#: access/transam/xlogreader.c:2071 +#: access/transam/xlogreader.c:2066 #, c-format msgid "could not restore image at %X/%X with invalid block %d specified" msgstr "не вдалося відновити зображення %X/%X з недійсним вказаним блоком %d" -#: access/transam/xlogreader.c:2078 +#: access/transam/xlogreader.c:2073 #, c-format msgid "could not restore image at %X/%X with invalid state, block %d" msgstr "не вдалося відновити зображення %X/%X з недійсним станом, блок %d" -#: access/transam/xlogreader.c:2105 access/transam/xlogreader.c:2122 +#: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117 #, c-format msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d" msgstr "не вдалося відновити зображення в %X/%X, стиснуте %s, не підтримується збіркою, блок %d" -#: access/transam/xlogreader.c:2131 +#: access/transam/xlogreader.c:2126 #, c-format msgid "could not restore image at %X/%X compressed with unknown method, block %d" msgstr "не вдалося відновити зображення %X/%X стиснуте з невідомим методом, блок %d" -#: access/transam/xlogreader.c:2139 +#: access/transam/xlogreader.c:2134 #, c-format msgid "could not decompress image at %X/%X, block %d" msgstr "не вдалося розпакувати зображення на %X/%X, блок %d" -#: access/transam/xlogrecovery.c:547 -#, c-format -msgid "entering standby mode" -msgstr "перехід у режим очікування" - -#: access/transam/xlogrecovery.c:550 -#, c-format -msgid "starting point-in-time recovery to XID %u" -msgstr "починається відновлення точки в часі до XID %u" - -#: access/transam/xlogrecovery.c:554 -#, c-format -msgid "starting point-in-time recovery to %s" -msgstr "починається відновлення точки в часі до %s" - -#: access/transam/xlogrecovery.c:558 -#, c-format -msgid "starting point-in-time recovery to \"%s\"" -msgstr "починається відновлення точки в часі до \"%s\"" - -#: access/transam/xlogrecovery.c:562 -#, c-format -msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" -msgstr "починається відновлення точки в часі до локації WAL (LSN) \"%X/%X\"" - -#: access/transam/xlogrecovery.c:566 -#, c-format -msgid "starting point-in-time recovery to earliest consistent point" -msgstr "починається відновлення даних до першої точки домовленості" - -#: access/transam/xlogrecovery.c:569 -#, c-format -msgid "starting archive recovery" -msgstr "початок відновлення архіву" - -#: access/transam/xlogrecovery.c:637 +#: access/transam/xlogrecovery.c:617 #, c-format msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u" msgstr "стартуємо відновлення резервної копії з LSN повторення %X/%X, LSN контрольної точки %X/%X, на часовій шкалі з ID %u" -#: access/transam/xlogrecovery.c:669 +#: access/transam/xlogrecovery.c:649 #, c-format -msgid "could not find redo location referenced by checkpoint record" -msgstr "не вдалося знайти положення REDO, вказане записом контрольної точки" +msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X" +msgstr "не вдалося знайти положення REDO %X/%X, вказане записом контрольної точки в %X/%X" -#: access/transam/xlogrecovery.c:670 access/transam/xlogrecovery.c:680 +#: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662 #, c-format -msgid "" -"If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" +msgid "If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup." -msgstr "" -"Якщо ви відновлюєте з резервної копії, оновіть файл \"%s/recovery.signal\" та додайте необхідні параметри відновлення.\n" -"Якщо ви не відновлюєте з резервної копії, спробуйте видалити файл \"%s/backup_label\".\n" -"Будьте обережні: видалення \"%s/backup_label\" призведе до пошкодження кластеру при відновленні з резервної копії." +msgstr "Якщо ви відновлюєтеся з резервної копії, оновіть \"%s/recovery.signal\" або \"%s/standby.signal\" і додайте необхідні параметри відновлення.\n" +"Якщо ви відновлюєте не з резервної копії, спробуйте видалити файл \"%s/backup_label\".\n" +"Будьте обережні: видалення \"%s/backup_label\" призведе до пошкодження кластера при відновленні з резервної копії." -#: access/transam/xlogrecovery.c:679 +#: access/transam/xlogrecovery.c:660 #, c-format -msgid "could not locate required checkpoint record" -msgstr "не вдалося знайти запис потрібної контрольної точки" +msgid "could not locate required checkpoint record at %X/%X" +msgstr "не вдалося знайти запис необхідної контрольної точки в %X/%X" -#: access/transam/xlogrecovery.c:708 commands/tablespace.c:670 +#: access/transam/xlogrecovery.c:690 commands/tablespace.c:664 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не вдалося створити символічне послання \"%s\": %m" -#: access/transam/xlogrecovery.c:740 access/transam/xlogrecovery.c:746 +#: access/transam/xlogrecovery.c:723 access/transam/xlogrecovery.c:729 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "файл \"%s\" ігнорується, тому що файлу \"%s\" не існує" -#: access/transam/xlogrecovery.c:742 +#: access/transam/xlogrecovery.c:725 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" був перейменований на \"%s\"." -#: access/transam/xlogrecovery.c:748 +#: access/transam/xlogrecovery.c:731 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Неможливо перейменувати файл \"%s\" на \"%s\": %m." -#: access/transam/xlogrecovery.c:787 +#: access/transam/xlogrecovery.c:770 #, c-format msgid "restarting backup recovery with redo LSN %X/%X" msgstr "перезапуск відновлення резервної копії на LSN %X/%X" -#: access/transam/xlogrecovery.c:812 +#: access/transam/xlogrecovery.c:795 +#, c-format +msgid "could not locate a valid checkpoint record at %X/%X" +msgstr "не вдалося знайти запис допустимої контрольної точки в %X/%X" + +#: access/transam/xlogrecovery.c:806 +#, c-format +msgid "entering standby mode" +msgstr "перехід у режим очікування" + +#: access/transam/xlogrecovery.c:809 +#, c-format +msgid "starting point-in-time recovery to XID %u" +msgstr "починається відновлення точки в часі до XID %u" + +#: access/transam/xlogrecovery.c:813 +#, c-format +msgid "starting point-in-time recovery to %s" +msgstr "починається відновлення точки в часі до %s" + +#: access/transam/xlogrecovery.c:817 +#, c-format +msgid "starting point-in-time recovery to \"%s\"" +msgstr "починається відновлення точки в часі до \"%s\"" + +#: access/transam/xlogrecovery.c:821 +#, c-format +msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" +msgstr "починається відновлення точки в часі до локації WAL (LSN) \"%X/%X\"" + +#: access/transam/xlogrecovery.c:825 +#, c-format +msgid "starting point-in-time recovery to earliest consistent point" +msgstr "починається відновлення даних до першої точки домовленості" + +#: access/transam/xlogrecovery.c:828 #, c-format -msgid "could not locate a valid checkpoint record" -msgstr "не вдалося знайти запис допустимої контрольної точки" +msgid "starting archive recovery" +msgstr "початок відновлення архіву" -#: access/transam/xlogrecovery.c:836 +#: access/transam/xlogrecovery.c:849 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "запитувана лінія часу %u не є відгалуженням історії цього серверу" -#: access/transam/xlogrecovery.c:838 +#: access/transam/xlogrecovery.c:851 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Остання контрольна точка %X/%X на лінії часу %u, але в історії запитуваної лінії часу сервер відгалузився з цієї лінії в %X/%X." -#: access/transam/xlogrecovery.c:852 +#: access/transam/xlogrecovery.c:865 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "запитувана лінія часу %u не містить мінімальну точку відновлення %X/%X на лінії часу %u" -#: access/transam/xlogrecovery.c:880 +#: access/transam/xlogrecovery.c:893 #, c-format msgid "invalid next transaction ID" msgstr "невірний ID наступної транзакції" -#: access/transam/xlogrecovery.c:885 +#: access/transam/xlogrecovery.c:898 #, c-format msgid "invalid redo in checkpoint record" msgstr "невірний запис REDO в контрольній точці" -#: access/transam/xlogrecovery.c:896 +#: access/transam/xlogrecovery.c:909 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "невірний запис REDO в контрольній точці вимкнення" -#: access/transam/xlogrecovery.c:925 +#: access/transam/xlogrecovery.c:938 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "робота системи бази даних не була завершена належним чином; відбувається автоматичне відновлення" -#: access/transam/xlogrecovery.c:929 +#: access/transam/xlogrecovery.c:942 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "відновлення після збою починається на лінії часу %u і має цільову лінію часу: %u" -#: access/transam/xlogrecovery.c:972 +#: access/transam/xlogrecovery.c:985 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label містить дані, які не узгоджені з файлом pg_control" -#: access/transam/xlogrecovery.c:973 +#: access/transam/xlogrecovery.c:986 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Це означає, що резервна копія була пошкоджена і вам доведеться використати іншу резервну копію для відновлення." -#: access/transam/xlogrecovery.c:1027 +#: access/transam/xlogrecovery.c:1040 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "використання файлу команд відновлення \"%s\" не підтримується" -#: access/transam/xlogrecovery.c:1092 +#: access/transam/xlogrecovery.c:1105 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "режим очікування не підтримується однокористувацьким сервером" -#: access/transam/xlogrecovery.c:1109 +#: access/transam/xlogrecovery.c:1122 #, c-format -msgid "specified neither primary_conninfo nor restore_command" -msgstr "не заззначено ані параметр primary_conninfo, ані параметр restore_command" +msgid "specified neither \"primary_conninfo\" nor \"restore_command\"" +msgstr "не вказано ні \"primary_conninfo\", ані \"restore_command\"" -#: access/transam/xlogrecovery.c:1110 +#: access/transam/xlogrecovery.c:1123 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Сервер бази даних буде регулярно опитувати підкатолог pg_wal і перевіряти файли, що містяться у ньому." -#: access/transam/xlogrecovery.c:1118 +#: access/transam/xlogrecovery.c:1131 #, c-format -msgid "must specify restore_command when standby mode is not enabled" -msgstr "необхідно вказати restore_command, якщо не ввімкнено режиму очікування" +msgid "must specify \"restore_command\" when standby mode is not enabled" +msgstr "необхідно вказати \"restore_command\", якщо не ввімкнено режиму очікування" -#: access/transam/xlogrecovery.c:1156 +#: access/transam/xlogrecovery.c:1169 #, c-format msgid "recovery target timeline %u does not exist" msgstr "цільова лінія часу відновлення %u не існує" -#: access/transam/xlogrecovery.c:1239 access/transam/xlogrecovery.c:1246 -#: access/transam/xlogrecovery.c:1305 access/transam/xlogrecovery.c:1385 -#: access/transam/xlogrecovery.c:1409 +#: access/transam/xlogrecovery.c:1252 access/transam/xlogrecovery.c:1259 +#: access/transam/xlogrecovery.c:1318 access/transam/xlogrecovery.c:1406 +#: access/transam/xlogrecovery.c:1415 access/transam/xlogrecovery.c:1435 #, c-format msgid "invalid data in file \"%s\"" msgstr "невірні дані у файлі \"%s\"" -#: access/transam/xlogrecovery.c:1306 +#: access/transam/xlogrecovery.c:1319 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Проаналізовано ID часової лінії %u, очіувалося %u." -#: access/transam/xlogrecovery.c:1688 +#: access/transam/xlogrecovery.c:1330 +#, c-format +msgid "this is an incremental backup, not a data directory" +msgstr "це інкрементна резервна копія, а не каталог даних" + +#: access/transam/xlogrecovery.c:1331 +#, c-format +msgid "Use pg_combinebackup to reconstruct a valid data directory." +msgstr "Використовуйте pg_combinebackup для відновлення правильного каталогу даних." + +#: access/transam/xlogrecovery.c:1717 +#, c-format +msgid "unexpected record type found at redo point %X/%X" +msgstr "знайдено неочікуваний тип запису в точці повторення %X/%X" + +#: access/transam/xlogrecovery.c:1740 #, c-format msgid "redo starts at %X/%X" msgstr "запис REDO починається з %X/%X" -#: access/transam/xlogrecovery.c:1701 +#: access/transam/xlogrecovery.c:1753 #, c-format msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" msgstr "запис REDO триває, минуло часу: %ld.%02d s, поточний LSN: %X/%X" -#: access/transam/xlogrecovery.c:1793 +#: access/transam/xlogrecovery.c:1843 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "запитувана точка відновлення передує узгодженій точці відновлення" -#: access/transam/xlogrecovery.c:1825 +#: access/transam/xlogrecovery.c:1875 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "повторно виконано через %X/%X системне використання: %s" -#: access/transam/xlogrecovery.c:1831 +#: access/transam/xlogrecovery.c:1881 #, c-format msgid "last completed transaction was at log time %s" msgstr "остання завершена транзакція була в %s" -#: access/transam/xlogrecovery.c:1840 +#: access/transam/xlogrecovery.c:1890 #, c-format msgid "redo is not required" msgstr "дані REDO не потрібні" -#: access/transam/xlogrecovery.c:1851 +#: access/transam/xlogrecovery.c:1901 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "відновлення завершилось до досягення налаштованої цілі відновлення" -#: access/transam/xlogrecovery.c:2045 +#: access/transam/xlogrecovery.c:2095 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "успішно пропущений відсутній contrecord при %X/%X, перезаписано на %s" -#: access/transam/xlogrecovery.c:2112 +#: access/transam/xlogrecovery.c:2162 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "знайдено неочікуваний запис каталогу \"%s\" в %s" -#: access/transam/xlogrecovery.c:2114 +#: access/transam/xlogrecovery.c:2164 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Всі записи каталогу в pg_tblspc/ повинні бути символічними посиланнями." -#: access/transam/xlogrecovery.c:2115 +#: access/transam/xlogrecovery.c:2165 #, c-format -msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." -msgstr "Видаліть ті каталоги, або тимчасово встановіть для параметра allow_in_place_tablespaces значення ON, щоб завершити відновлення." +msgid "Remove those directories, or set \"allow_in_place_tablespaces\" to ON transiently to let recovery complete." +msgstr "Видаліть ті каталоги, або тимчасово встановіть для параметра \"allow_in_place_tablespaces\" значення ON, щоб завершити відновлення." -#: access/transam/xlogrecovery.c:2167 +#: access/transam/xlogrecovery.c:2217 #, c-format msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X" msgstr "завершено відновлення резервної копії з LSN повторення %X/%X і LSN закінчення %X/%X" -#: access/transam/xlogrecovery.c:2197 +#: access/transam/xlogrecovery.c:2247 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "узгоджений стан відновлення досягнутий %X/%X" #. translator: %s is a WAL record description -#: access/transam/xlogrecovery.c:2235 +#: access/transam/xlogrecovery.c:2285 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "запис REDO в WAL в позиції %X/%X для %s" -#: access/transam/xlogrecovery.c:2333 +#: access/transam/xlogrecovery.c:2383 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "несподіваний ID попередньої лінії часу %u (ID теперішньої лінії часу %u) в записі контрольної точки" -#: access/transam/xlogrecovery.c:2342 +#: access/transam/xlogrecovery.c:2392 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "неочікуваний ID лінії часу %u (після %u) в записі контрольної точки" -#: access/transam/xlogrecovery.c:2358 +#: access/transam/xlogrecovery.c:2408 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "неочікуваний ID лінії часу %u в записі контрольної точки, до досягнення мінімальної точки відновлення %X/%X на лінії часу %u" -#: access/transam/xlogrecovery.c:2542 access/transam/xlogrecovery.c:2818 +#: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868 #, c-format msgid "recovery stopping after reaching consistency" msgstr "відновлення зупиняється після досягнення узгодженості" -#: access/transam/xlogrecovery.c:2563 +#: access/transam/xlogrecovery.c:2613 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "відновлення зупиняється перед позицією WAL (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2653 +#: access/transam/xlogrecovery.c:2703 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "відновлення припиняється до підтвердження транзакції %u, час %s" -#: access/transam/xlogrecovery.c:2660 +#: access/transam/xlogrecovery.c:2710 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "відновлення припиняється до скасування транзакції %u, час %s" -#: access/transam/xlogrecovery.c:2713 +#: access/transam/xlogrecovery.c:2763 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "відновлення припиняється в точці відновлення\"%s\", час %s" -#: access/transam/xlogrecovery.c:2731 +#: access/transam/xlogrecovery.c:2781 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "відновлення припиняється пісня локації WAL (LSN) \"%X/%X\"" -#: access/transam/xlogrecovery.c:2798 +#: access/transam/xlogrecovery.c:2848 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "відновлення припиняється після підтвердження транзакції %u, час %s" -#: access/transam/xlogrecovery.c:2806 +#: access/transam/xlogrecovery.c:2856 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "відновлення припиняється після скасування транзакції %u, час %s" -#: access/transam/xlogrecovery.c:2887 +#: access/transam/xlogrecovery.c:2937 #, c-format msgid "pausing at the end of recovery" msgstr "пауза в кінці відновлення" -#: access/transam/xlogrecovery.c:2888 +#: access/transam/xlogrecovery.c:2938 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Виконайте pg_wal_replay_resume() для підвищення рівня." -#: access/transam/xlogrecovery.c:2891 access/transam/xlogrecovery.c:4628 +#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4678 #, c-format msgid "recovery has paused" msgstr "відновлення зупинено" -#: access/transam/xlogrecovery.c:2892 +#: access/transam/xlogrecovery.c:2942 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Виконайте pg_wal_replay_resume(), щоб продовжити." -#: access/transam/xlogrecovery.c:3155 +#: access/transam/xlogrecovery.c:3205 #, c-format msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u" msgstr "неочікуваний ID лінії часу %u в сегменті WAL %s, LSN %X/%X, offset %u" -#: access/transam/xlogrecovery.c:3363 +#: access/transam/xlogrecovery.c:3413 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m" msgstr "не вдалося прочитати сегмент журналу %s, LSN %X/%X, зсув %u: %m" -#: access/transam/xlogrecovery.c:3370 +#: access/transam/xlogrecovery.c:3420 #, c-format msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" msgstr "не вдалося прочитати сегмент WAL %s, LSN %X/%X, зсув %u: прочитано %d з %zu" -#: access/transam/xlogrecovery.c:4010 +#: access/transam/xlogrecovery.c:4060 #, c-format msgid "invalid checkpoint location" msgstr "невірне розташування контрольної точки" -#: access/transam/xlogrecovery.c:4020 +#: access/transam/xlogrecovery.c:4070 #, c-format msgid "invalid checkpoint record" msgstr "невірний запис контрольної точки" -#: access/transam/xlogrecovery.c:4026 +#: access/transam/xlogrecovery.c:4076 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "невірний ID менеджера ресурсів в записі контрольної точки" -#: access/transam/xlogrecovery.c:4034 +#: access/transam/xlogrecovery.c:4084 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "невірний xl_info у записі контрольної точки" -#: access/transam/xlogrecovery.c:4040 +#: access/transam/xlogrecovery.c:4090 #, c-format msgid "invalid length of checkpoint record" msgstr "невірна довжина запису контрольної точки" -#: access/transam/xlogrecovery.c:4094 +#: access/transam/xlogrecovery.c:4144 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "нова лінія часу %u не є дочірньою для лінії часу системи бази даних %u" -#: access/transam/xlogrecovery.c:4108 +#: access/transam/xlogrecovery.c:4158 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "нова лінія часу %u відгалузилась від поточної лінії часу бази даних %u до поточної точки відновлення %X/%X" -#: access/transam/xlogrecovery.c:4127 +#: access/transam/xlogrecovery.c:4177 #, c-format msgid "new target timeline is %u" msgstr "нова цільова лінія часу %u" -#: access/transam/xlogrecovery.c:4330 +#: access/transam/xlogrecovery.c:4380 #, c-format msgid "WAL receiver process shutdown requested" msgstr "Запит на вимкнення процесу приймача WAL" -#: access/transam/xlogrecovery.c:4390 +#: access/transam/xlogrecovery.c:4440 #, c-format msgid "received promote request" msgstr "отримано запит підвищення статусу" -#: access/transam/xlogrecovery.c:4619 +#: access/transam/xlogrecovery.c:4669 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "hot standby неможливий через недостатнє налаштування параметрів" -#: access/transam/xlogrecovery.c:4620 access/transam/xlogrecovery.c:4647 -#: access/transam/xlogrecovery.c:4677 +#: access/transam/xlogrecovery.c:4670 access/transam/xlogrecovery.c:4697 +#: access/transam/xlogrecovery.c:4727 #, 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:4629 +#: access/transam/xlogrecovery.c:4679 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Якщо відновлення не буде зупинено, сервер завершить роботу." -#: access/transam/xlogrecovery.c:4630 +#: access/transam/xlogrecovery.c:4680 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Після здійснення необхідних змін у конфігурації, ви можете перезапустити сервер." -#: access/transam/xlogrecovery.c:4641 +#: access/transam/xlogrecovery.c:4691 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "підвищення неможливе через недостатнє налаштування параметрів" -#: access/transam/xlogrecovery.c:4651 +#: access/transam/xlogrecovery.c:4701 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Перезапустити сервер після здійснення необхідних змін у конфігурації." -#: access/transam/xlogrecovery.c:4675 +#: access/transam/xlogrecovery.c:4725 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "відновлення перервано через недостатнє налаштування параметрів" -#: access/transam/xlogrecovery.c:4681 +#: access/transam/xlogrecovery.c:4731 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Ви можете перезапустити сервер, після здійснення необхідних змін у конфігурації." -#: access/transam/xlogrecovery.c:4723 +#: access/transam/xlogrecovery.c:4773 #, c-format msgid "multiple recovery targets specified" msgstr "вказано декілька цілей відновлення" -#: access/transam/xlogrecovery.c:4724 +#: access/transam/xlogrecovery.c:4774 #, 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 може бути встановлений." +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:4735 +#: access/transam/xlogrecovery.c:4785 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Єдиним дозволеним значенням є \"immediate\"." -#: access/transam/xlogrecovery.c:4887 utils/adt/timestamp.c:186 -#: utils/adt/timestamp.c:439 +#: access/transam/xlogrecovery.c:4937 utils/adt/timestamp.c:202 +#: utils/adt/timestamp.c:455 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "позначка часу поза діапазоном: \"%s\"" -#: access/transam/xlogrecovery.c:4932 +#: access/transam/xlogrecovery.c:4982 #, c-format -msgid "recovery_target_timeline is not a valid number." -msgstr "recovery_target_timeline не є допустимим числом." +msgid "\"recovery_target_timeline\" is not a valid number." +msgstr "\"recovery_target_timeline\" не є допустимим числом." -#: access/transam/xlogutils.c:1039 +#: access/transam/xlogutils.c:1032 #, c-format msgid "could not read from WAL segment %s, offset %d: %m" msgstr "не вдалося прочитати сегмент WAL %s, зсув %d: %m" -#: access/transam/xlogutils.c:1046 +#: access/transam/xlogutils.c:1039 #, c-format msgid "could not read from WAL segment %s, offset %d: read %d of %d" msgstr "не вдалося прочитати сегмент WAL %s, зсув %d: прочитано %d з %d" -#: archive/shell_archive.c:96 +#: archive/shell_archive.c:98 #, c-format msgid "archive command failed with exit code %d" msgstr "команда архівації завершилась помилкой з кодом %d" -#: archive/shell_archive.c:98 archive/shell_archive.c:108 -#: archive/shell_archive.c:114 archive/shell_archive.c:123 +#: archive/shell_archive.c:100 archive/shell_archive.c:110 +#: archive/shell_archive.c:116 archive/shell_archive.c:125 #, c-format msgid "The failed archive command was: %s" msgstr "Команда архівації з помилкою: %s" -#: archive/shell_archive.c:105 +#: archive/shell_archive.c:107 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "команда архівації була перервана винятком 0x%X" -#: archive/shell_archive.c:107 postmaster/postmaster.c:3678 +#: archive/shell_archive.c:109 postmaster/postmaster.c:3094 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Опис цього Шістнадцяткового значення дивіться у включаємому C-файлі \"ntstatus.h\"." -#: archive/shell_archive.c:112 +#: archive/shell_archive.c:114 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "команда архівації була перервана сигналом %d: %s" -#: archive/shell_archive.c:121 +#: archive/shell_archive.c:123 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "команда архівації завершена з нерозпізнаним статусом %d" -#: backup/backup_manifest.c:253 +#: backup/backup_manifest.c:254 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "очікувався кінець часової шкали %u але знайдено часову шкалу %u" -#: backup/backup_manifest.c:277 +#: backup/backup_manifest.c:278 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "очікувався початок часової шкали %u але знайдено часову шкалу %u" -#: backup/backup_manifest.c:304 +#: backup/backup_manifest.c:305 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "початок часової шкали %u не знайдено в історії часової шкали %u" -#: backup/backup_manifest.c:355 +#: backup/backup_manifest.c:356 #, c-format msgid "could not rewind temporary file" msgstr "не вдалося перемотати назад тимчасовий файл" -#: backup/basebackup.c:470 +#: backup/basebackup.c:479 #, c-format msgid "could not find any WAL files" msgstr "не вдалося знайти ні одного файла WAL" -#: backup/basebackup.c:485 backup/basebackup.c:500 backup/basebackup.c:509 +#: backup/basebackup.c:494 backup/basebackup.c:509 backup/basebackup.c:518 #, c-format msgid "could not find WAL file \"%s\"" msgstr "не вдалося знайти файл WAL \"%s\"" -#: backup/basebackup.c:551 backup/basebackup.c:576 +#: backup/basebackup.c:560 backup/basebackup.c:585 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "неочікуаний розмір файлу WAL \"%s\"" -#: backup/basebackup.c:646 +#: backup/basebackup.c:656 #, c-format msgid "%lld total checksum verification failure" msgid_plural "%lld total checksum verification failures" @@ -3510,106 +3753,96 @@ msgstr[1] "всього помилок перевірки контрольних msgstr[2] "всього помилок перевірки контрольних сум: %lld" msgstr[3] "всього помилок перевірки контрольних сум: %lld" -#: backup/basebackup.c:653 +#: backup/basebackup.c:663 #, c-format msgid "checksum verification failure during base backup" msgstr "під час базового резервного копіювання виявлено неполадки контрольних сум" -#: backup/basebackup.c:722 backup/basebackup.c:731 backup/basebackup.c:742 -#: backup/basebackup.c:759 backup/basebackup.c:768 backup/basebackup.c:779 -#: backup/basebackup.c:796 backup/basebackup.c:805 backup/basebackup.c:817 -#: backup/basebackup.c:841 backup/basebackup.c:855 backup/basebackup.c:866 -#: backup/basebackup.c:877 backup/basebackup.c:890 +#: backup/basebackup.c:733 backup/basebackup.c:742 backup/basebackup.c:753 +#: backup/basebackup.c:770 backup/basebackup.c:779 backup/basebackup.c:788 +#: backup/basebackup.c:803 backup/basebackup.c:820 backup/basebackup.c:829 +#: backup/basebackup.c:841 backup/basebackup.c:865 backup/basebackup.c:879 +#: backup/basebackup.c:890 backup/basebackup.c:901 backup/basebackup.c:914 #, c-format msgid "duplicate option \"%s\"" msgstr "повторюваний параметр \"%s\"" -#: backup/basebackup.c:750 +#: backup/basebackup.c:761 #, c-format msgid "unrecognized checkpoint type: \"%s\"" msgstr "нерозпізнаний тип контрольної точки: \"%s\"" -#: backup/basebackup.c:785 +#: backup/basebackup.c:793 +#, c-format +msgid "incremental backups cannot be taken unless WAL summarization is enabled" +msgstr "інкрементні резервні копії не можна створювати, якщо не ввімкнено підсумовування WAL" + +#: backup/basebackup.c:809 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d за припустимим діапазномо для параметру \"%s\" (%d .. %d)" -#: backup/basebackup.c:830 +#: backup/basebackup.c:854 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "нерозпізнаний параметр маніфесту: \"%s\"" -#: backup/basebackup.c:846 -#, c-format -msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "нерозпізнаний алгоритм контрольної суми: \"%s\"" - -#: backup/basebackup.c:881 +#: backup/basebackup.c:905 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "нерозпізнаний алгоритм стискання: \"%s\"" -#: backup/basebackup.c:897 +#: backup/basebackup.c:921 #, c-format msgid "unrecognized base backup option: \"%s\"" msgstr "нерозпізнаний параметр базової резервної копії: \"%s\"" -#: backup/basebackup.c:908 +#: backup/basebackup.c:932 #, c-format msgid "manifest checksums require a backup manifest" msgstr "контрольні суми маніфесту потребують резервного копіювання маніфесту" -#: backup/basebackup.c:917 +#: backup/basebackup.c:941 #, c-format msgid "target detail cannot be used without target" msgstr "елемент цілі не можна використовувати без цілі" -#: backup/basebackup.c:926 backup/basebackup_target.c:218 +#: backup/basebackup.c:950 backup/basebackup_target.c:218 #, c-format msgid "target \"%s\" does not accept a target detail" msgstr "ціль \"%s\" не приймає елемент цілі" -#: backup/basebackup.c:937 +#: backup/basebackup.c:961 #, c-format msgid "compression detail cannot be specified unless compression is enabled" msgstr "деталі стиснення не можуть бути вказані, якщо не увімкнено стиснення" -#: backup/basebackup.c:950 +#: backup/basebackup.c:974 #, c-format msgid "invalid compression specification: %s" msgstr "неприпустима специфікація стискання: %s" -#: backup/basebackup.c:1116 backup/basebackup.c:1294 +#: backup/basebackup.c:1024 +#, c-format +msgid "must UPLOAD_MANIFEST before performing an incremental BASE_BACKUP" +msgstr "повинен UPLOAD_MANIFEST перед виконанням інкрементного BASE_BACKUP" + +#: backup/basebackup.c:1157 backup/basebackup.c:1358 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "не вдалося отримати інформацію про файл або каталог \"%s\": %m" -#: backup/basebackup.c:1430 +#: backup/basebackup.c:1544 #, c-format msgid "skipping special file \"%s\"" msgstr "спеціальний файл \"%s\" пропускається" -#: backup/basebackup.c:1542 -#, c-format -msgid "invalid segment number %d in file \"%s\"" -msgstr "неприпустимий номер сегменту %d в файлі \"%s\"" - -#: backup/basebackup.c:1574 +#: backup/basebackup.c:1751 #, c-format msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" msgstr "не вдалося перевірити контрольну суму у файлі \"%s\", блок %u: розмір прочитаного буфера %d і розмір прочитаної сторінки %d відрізняються" -#: backup/basebackup.c:1658 -#, c-format -msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" -msgstr "помилка перевірки контрольної суми у файлі \"%s\", блок %u: обчислено %X, але очікувалось %X" - -#: backup/basebackup.c:1665 -#, c-format -msgid "further checksum verification failures in file \"%s\" will not be reported" -msgstr "про подальші помилки під час перевірки контрольної суми в файлі \"%s\" повідомлятись не буде" - -#: backup/basebackup.c:1721 +#: backup/basebackup.c:1813 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" @@ -3618,16 +3851,31 @@ msgstr[1] "файл \"%s\" має загальну кількість помил msgstr[2] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" msgstr[3] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" -#: backup/basebackup.c:1767 +#: backup/basebackup.c:1917 +#, c-format +msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" +msgstr "помилка перевірки контрольної суми у файлі \"%s\", блок %u: обчислено %X, але очікувалось %X" + +#: backup/basebackup.c:1924 +#, c-format +msgid "further checksum verification failures in file \"%s\" will not be reported" +msgstr "про подальші помилки під час перевірки контрольної суми в файлі \"%s\" повідомлятись не буде" + +#: backup/basebackup.c:2048 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "ім'я файлу занадто довге для tar формату: \"%s\"" -#: backup/basebackup.c:1772 +#: backup/basebackup.c:2053 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "мета символьного посилання занадто довга для формату tar: ім'я файлу \"%s\", мета \"%s\"" +#: backup/basebackup.c:2127 +#, c-format +msgid "could not read file \"%s\": read %zd of %zu" +msgstr "не вдалося прочитати файл \"%s\": читання %zd з %zu" + #: backup/basebackup_gzip.c:67 #, c-format msgid "gzip compression is not supported by this build" @@ -3638,53 +3886,114 @@ msgstr "стискання gzip не підтримується цією збі msgid "could not initialize compression library" msgstr "не вдалося ініціалізувати бібліотеку стискання" -#: backup/basebackup_lz4.c:67 +#: backup/basebackup_incremental.c:294 #, c-format -msgid "lz4 compression is not supported by this build" -msgstr "стискання lz4 не підтримується цією збіркою" +msgid "manifest contains no required WAL ranges" +msgstr "маніфест не містить необхідних діапазонів WAL" -#: backup/basebackup_server.c:75 +#: backup/basebackup_incremental.c:349 #, c-format -msgid "permission denied to create backup stored on server" -msgstr "немає прав на створення резервної копії, збереженої на сервері" +msgid "timeline %u found in manifest, but not in this server's history" +msgstr "часову шкалу %u знайдено в маніфесті, але не в історії цього сервера" -#: backup/basebackup_server.c:76 +#: backup/basebackup_incremental.c:414 #, c-format -msgid "Only roles with privileges of the \"%s\" role may create a backup stored on the server." -msgstr "Тільки ролі з привілеями ролі \"%s\" можуть створювати резервні копії, що зберігаються на сервері." +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_server.c:91 +#: backup/basebackup_incremental.c:424 #, c-format -msgid "relative path not allowed for backup stored on server" +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: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:439 +#, c-format +msgid "This can happen for incremental backups on a standby if there was little activity since the previous backup." +msgstr "Це може статися з інкрементними резервними копіями на резервному сервері, якщо було замало активності з минулої резервної копії." + +#: backup/basebackup_incremental.c:446 +#, 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: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 "Зведення WAL потрібні на часовій шкалі %u від %X/%X до %X/%X, але зведень для цієї шкали та діапазону LSN не існує" + +#: 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 "Зведення WAL потрібні на часовій шкалі %u від %X/%X до %X/%X, але зведення для цієї часової шкали та діапазону LSN є неповними" + +#: backup/basebackup_incremental.c:538 +#, c-format +msgid "The first unsummarized LSN in this range is %X/%X." +msgstr "Перший не підсумований LSN у цьому діапазоні - %X/%X." + +#: backup/basebackup_incremental.c:938 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "маніфест резервного копіювання версії 1 не підтримує інкреметного резервного копіювання" + +#: backup/basebackup_incremental.c:956 +#, c-format +msgid "system identifier in backup manifest is %llu, but database system identifier is %llu" +msgstr "системний ідентифікатор в маніфесті резервного копіювання %llu, але ідентифікатор системи бази даних є %llu" + +#: backup/basebackup_lz4.c:67 +#, c-format +msgid "lz4 compression is not supported by this build" +msgstr "стискання lz4 не підтримується цією збіркою" + +#: backup/basebackup_server.c:73 +#, c-format +msgid "permission denied to create backup stored on server" +msgstr "немає прав на створення резервної копії, збереженої на сервері" + +#: backup/basebackup_server.c:74 +#, c-format +msgid "Only roles with privileges of the \"%s\" role may create a backup stored on the server." +msgstr "Тільки ролі з привілеями ролі \"%s\" можуть створювати резервні копії, що зберігаються на сервері." + +#: backup/basebackup_server.c:89 +#, c-format +msgid "relative path not allowed for backup stored on server" msgstr "відносний шлях не дозволений для резервного копіювання збереженого на сервері" -#: backup/basebackup_server.c:104 commands/dbcommands.c:478 -#: commands/tablespace.c:163 commands/tablespace.c:179 -#: commands/tablespace.c:599 commands/tablespace.c:644 replication/slot.c:1704 +#: backup/basebackup_server.c:102 commands/dbcommands.c:477 +#: commands/tablespace.c:157 commands/tablespace.c:173 +#: commands/tablespace.c:593 commands/tablespace.c:638 replication/slot.c:1986 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не вдалося створити каталог \"%s\": %m" -#: backup/basebackup_server.c:117 +#: backup/basebackup_server.c:115 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" існує, але він не порожній" -#: backup/basebackup_server.c:125 utils/init/postinit.c:1164 +#: backup/basebackup_server.c:123 utils/init/postinit.c:1177 #, c-format msgid "could not access directory \"%s\": %m" msgstr "немає доступу до каталогу \"%s\": %m" -#: backup/basebackup_server.c:177 backup/basebackup_server.c:184 -#: backup/basebackup_server.c:270 backup/basebackup_server.c:277 -#: storage/smgr/md.c:504 storage/smgr/md.c:511 storage/smgr/md.c:593 -#: storage/smgr/md.c:615 storage/smgr/md.c:865 +#: backup/basebackup_server.c:175 backup/basebackup_server.c:182 +#: backup/basebackup_server.c:268 backup/basebackup_server.c:275 +#: backup/walsummary.c:312 storage/smgr/md.c:502 storage/smgr/md.c:509 +#: storage/smgr/md.c:591 storage/smgr/md.c:613 storage/smgr/md.c:999 #, c-format msgid "Check free disk space." msgstr "Перевірьте вільний дисковий простір." -#: backup/basebackup_server.c:181 backup/basebackup_server.c:274 +#: backup/basebackup_server.c:179 backup/basebackup_server.c:272 +#: backup/walsummary.c:309 #, c-format msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" msgstr "не вдалося записати файл \"%s\": записано лише %d з %d байтів зі зсувом %u" @@ -3714,645 +4023,656 @@ msgstr "не вдалося встановити кількість процес msgid "could not enable long-distance mode: %s" msgstr "не вдалося включити режим довгої відстані: %s" -#: bootstrap/bootstrap.c:243 postmaster/postmaster.c:721 tcop/postgres.c:3819 +#: backup/walsummaryfuncs.c:95 +#, c-format +msgid "invalid timeline %lld" +msgstr "неприпустима часова шкала %lld" + +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 #, c-format msgid "--%s requires a value" msgstr "--%s необхідне значення" -#: bootstrap/bootstrap.c:248 postmaster/postmaster.c:726 tcop/postgres.c:3824 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 #, c-format msgid "-c %s requires a value" msgstr "-c %s необхідне значення" -#: bootstrap/bootstrap.c:289 -#, c-format -msgid "-X requires a power of two value between 1 MB and 1 GB" -msgstr "для -X необхідне число, яке дорівнює ступеню 2 в інтервалі від 1 МБ до 1 ГБ" - -#: bootstrap/bootstrap.c:295 postmaster/postmaster.c:844 -#: postmaster/postmaster.c:857 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 +#: postmaster/postmaster.c:759 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" -#: bootstrap/bootstrap.c:304 +#: bootstrap/bootstrap.c:291 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: невірні аргументи командного рядка\n" -#: catalog/aclchk.c:201 +#: catalog/aclchk.c:210 #, c-format msgid "grant options can only be granted to roles" msgstr "право надання прав можна надавати тільки ролям" -#: catalog/aclchk.c:323 +#: catalog/aclchk.c:332 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" не призначено ніяких прав" -#: catalog/aclchk.c:328 +#: catalog/aclchk.c:337 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "для \"%s\" не призначено ніяких прав" -#: catalog/aclchk.c:336 +#: catalog/aclchk.c:345 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" призначено не всі права" -#: catalog/aclchk.c:341 +#: catalog/aclchk.c:350 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "для \"%s\" призначено не всі права" -#: catalog/aclchk.c:352 +#: catalog/aclchk.c:361 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" жодні права не можуть бути відкликані" -#: catalog/aclchk.c:357 +#: catalog/aclchk.c:366 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "для \"%s\" жодні права не можуть бути відкликані" -#: catalog/aclchk.c:365 +#: catalog/aclchk.c:374 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" не всі права можуть бути відкликані" -#: catalog/aclchk.c:370 +#: catalog/aclchk.c:379 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "для \"%s\" не всі права можуть бути відкликані" -#: catalog/aclchk.c:402 +#: catalog/aclchk.c:411 #, c-format msgid "grantor must be current user" msgstr "грантодавець повинен бути поточним користувачем" -#: catalog/aclchk.c:470 catalog/aclchk.c:1045 +#: catalog/aclchk.c:479 catalog/aclchk.c:1054 #, c-format msgid "invalid privilege type %s for relation" msgstr "недійсний тип права %s для відношення" -#: catalog/aclchk.c:474 catalog/aclchk.c:1049 +#: catalog/aclchk.c:483 catalog/aclchk.c:1058 #, c-format msgid "invalid privilege type %s for sequence" msgstr "невірний тип права %s для послідовності" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:487 #, c-format msgid "invalid privilege type %s for database" msgstr "недійсний тип права %s для бази даних" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:491 #, c-format msgid "invalid privilege type %s for domain" msgstr "недійсний тип права %s для домену" -#: catalog/aclchk.c:486 catalog/aclchk.c:1053 +#: catalog/aclchk.c:495 catalog/aclchk.c:1062 #, c-format msgid "invalid privilege type %s for function" msgstr "недійсний тип права %s для функції" -#: catalog/aclchk.c:490 +#: catalog/aclchk.c:499 #, c-format msgid "invalid privilege type %s for language" msgstr "недійсний тип права %s для мови" -#: catalog/aclchk.c:494 +#: catalog/aclchk.c:503 #, c-format msgid "invalid privilege type %s for large object" msgstr "недійсний тип права %s для великого об'єкту" -#: catalog/aclchk.c:498 catalog/aclchk.c:1069 +#: catalog/aclchk.c:507 catalog/aclchk.c:1078 #, c-format msgid "invalid privilege type %s for schema" msgstr "недійсний тип привілеїв %s для схеми" -#: catalog/aclchk.c:502 catalog/aclchk.c:1057 +#: catalog/aclchk.c:511 catalog/aclchk.c:1066 #, c-format msgid "invalid privilege type %s for procedure" msgstr "недійсний тип привілеїв %s для процедури" -#: catalog/aclchk.c:506 catalog/aclchk.c:1061 +#: catalog/aclchk.c:515 catalog/aclchk.c:1070 #, c-format msgid "invalid privilege type %s for routine" msgstr "недійсний тип привілею %s для підпрограми" -#: catalog/aclchk.c:510 +#: catalog/aclchk.c:519 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "недійсний тип привілеїв %s для табличного простору" -#: catalog/aclchk.c:514 catalog/aclchk.c:1065 +#: catalog/aclchk.c:523 catalog/aclchk.c:1074 #, c-format msgid "invalid privilege type %s for type" msgstr "недійсний тип привілею %s для типу" -#: catalog/aclchk.c:518 +#: catalog/aclchk.c:527 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "недійсний тип привілею %s для джерела сторонніх даних" -#: catalog/aclchk.c:522 +#: catalog/aclchk.c:531 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "недійсний тип привілею %s для стороннього серверу" -#: catalog/aclchk.c:526 +#: catalog/aclchk.c:535 #, c-format msgid "invalid privilege type %s for parameter" msgstr "неприпустимий тип привілею %s для параметру" -#: catalog/aclchk.c:565 +#: catalog/aclchk.c:574 #, c-format msgid "column privileges are only valid for relations" msgstr "привілеї стовпця дійсні лише для зв'язків" -#: catalog/aclchk.c:728 catalog/aclchk.c:3555 catalog/objectaddress.c:1092 -#: catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:286 +#: catalog/aclchk.c:737 catalog/aclchk.c:3624 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:1102 +#: catalog/aclchk.c:1111 #, c-format msgid "default privileges cannot be set for columns" msgstr "права за замовчуванням не можна встановити для стовпців" -#: catalog/aclchk.c:1138 +#: catalog/aclchk.c:1147 #, c-format msgid "permission denied to change default privileges" msgstr "немає дозволу для зміни прав за замовчуванням" -#: catalog/aclchk.c:1256 +#: catalog/aclchk.c:1265 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "речення IN SCHEMA не можна використати в GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1595 catalog/catalog.c:631 catalog/objectaddress.c:1561 -#: catalog/pg_publication.c:533 commands/analyze.c:390 commands/copy.c:837 -#: commands/sequence.c:1663 commands/tablecmds.c:7343 commands/tablecmds.c:7499 -#: commands/tablecmds.c:7549 commands/tablecmds.c:7623 -#: commands/tablecmds.c:7693 commands/tablecmds.c:7809 -#: commands/tablecmds.c:7903 commands/tablecmds.c:7962 -#: commands/tablecmds.c:8051 commands/tablecmds.c:8081 -#: commands/tablecmds.c:8209 commands/tablecmds.c:8291 -#: commands/tablecmds.c:8425 commands/tablecmds.c:8533 -#: commands/tablecmds.c:12252 commands/tablecmds.c:12433 -#: commands/tablecmds.c:12594 commands/tablecmds.c:13756 -#: commands/tablecmds.c:16287 commands/trigger.c:949 parser/analyze.c:2518 -#: parser/parse_relation.c:737 parser/parse_target.c:1054 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3422 -#: parser/parse_utilcmd.c:3458 parser/parse_utilcmd.c:3500 utils/adt/acl.c:2876 -#: utils/adt/ruleutils.c:2797 +#: catalog/aclchk.c:1616 catalog/catalog.c:650 catalog/objectaddress.c:1523 +#: catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:947 +#: commands/sequence.c:1655 commands/tablecmds.c:7518 commands/tablecmds.c:7672 +#: commands/tablecmds.c:7722 commands/tablecmds.c:7796 +#: commands/tablecmds.c:7866 commands/tablecmds.c:7996 +#: commands/tablecmds.c:8125 commands/tablecmds.c:8219 +#: commands/tablecmds.c:8320 commands/tablecmds.c:8447 +#: commands/tablecmds.c:8477 commands/tablecmds.c:8619 +#: commands/tablecmds.c:8712 commands/tablecmds.c:8846 +#: commands/tablecmds.c:8958 commands/tablecmds.c:12695 +#: commands/tablecmds.c:12887 commands/tablecmds.c:13048 +#: commands/tablecmds.c:14237 commands/tablecmds.c:16863 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:2807 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "стовпець \"%s\" зв'язку \"%s\" не існує" -#: catalog/aclchk.c:1840 +#: catalog/aclchk.c:1861 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" є індексом" -#: catalog/aclchk.c:1847 commands/tablecmds.c:13913 commands/tablecmds.c:17194 +#: catalog/aclchk.c:1868 commands/tablecmds.c:14394 commands/tablecmds.c:17772 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" це складений тип" -#: catalog/aclchk.c:1855 catalog/objectaddress.c:1401 commands/sequence.c:1171 -#: commands/tablecmds.c:254 commands/tablecmds.c:17158 utils/adt/acl.c:2084 -#: utils/adt/acl.c:2114 utils/adt/acl.c:2146 utils/adt/acl.c:2178 -#: utils/adt/acl.c:2206 utils/adt/acl.c:2236 +#: catalog/aclchk.c:1876 catalog/objectaddress.c:1363 commands/tablecmds.c:263 +#: commands/tablecmds.c:17736 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:1893 +#: catalog/aclchk.c:1914 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "послідовність \"%s\" підтримує лише привілеї USAGE, SELECT та UPDATE" -#: catalog/aclchk.c:1910 +#: catalog/aclchk.c:1931 #, c-format msgid "invalid privilege type %s for table" msgstr "недійсний тип привілею %s для таблиці" -#: catalog/aclchk.c:2072 +#: catalog/aclchk.c:2093 #, c-format msgid "invalid privilege type %s for column" msgstr "недійсний тип привілею %s для стовпця" -#: catalog/aclchk.c:2085 +#: catalog/aclchk.c:2106 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "послідовність \"%s\" підтримує тільки привілей стовпця SELECT" -#: catalog/aclchk.c:2275 +#: catalog/aclchk.c:2296 #, c-format msgid "language \"%s\" is not trusted" msgstr "мова \"%s\" не є довіреною" -#: catalog/aclchk.c:2277 +#: catalog/aclchk.c:2298 #, 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:2427 +#: catalog/aclchk.c:2449 #, c-format msgid "cannot set privileges of array types" msgstr "не можна встановити права для типів масивів" -#: catalog/aclchk.c:2428 +#: catalog/aclchk.c:2450 #, c-format msgid "Set the privileges of the element type instead." msgstr "Замість цього встановіть права для типу елементу." -#: catalog/aclchk.c:2435 catalog/objectaddress.c:1667 +#: catalog/aclchk.c:2454 +#, c-format +msgid "cannot set privileges of multirange types" +msgstr "не можна встановити права для типів множинного діапазону" + +#: catalog/aclchk.c:2455 +#, c-format +msgid "Set the privileges of the range type instead." +msgstr "Замість цього встановіть права типу діапазону." + +#: catalog/aclchk.c:2462 catalog/objectaddress.c:1629 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" не є доменом" -#: catalog/aclchk.c:2619 +#: catalog/aclchk.c:2648 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "нерозпізнаний привілей \"%s\"" -#: catalog/aclchk.c:2684 +#: catalog/aclchk.c:2715 #, c-format msgid "permission denied for aggregate %s" msgstr "немає дозволу для агрегату %s" -#: catalog/aclchk.c:2687 +#: catalog/aclchk.c:2718 #, c-format msgid "permission denied for collation %s" msgstr "немає дозволу для сортування %s" -#: catalog/aclchk.c:2690 +#: catalog/aclchk.c:2721 #, c-format msgid "permission denied for column %s" msgstr "немає дозволу для стовпця %s" -#: catalog/aclchk.c:2693 +#: catalog/aclchk.c:2724 #, c-format msgid "permission denied for conversion %s" msgstr "немає дозволу для перетворення %s" -#: catalog/aclchk.c:2696 +#: catalog/aclchk.c:2727 #, c-format msgid "permission denied for database %s" msgstr "немає доступу для бази даних %s" -#: catalog/aclchk.c:2699 +#: catalog/aclchk.c:2730 #, c-format msgid "permission denied for domain %s" msgstr "немає дозволу для домену %s" -#: catalog/aclchk.c:2702 +#: catalog/aclchk.c:2733 #, c-format msgid "permission denied for event trigger %s" msgstr "немає дозволу для тригера подій %s" -#: catalog/aclchk.c:2705 +#: catalog/aclchk.c:2736 #, c-format msgid "permission denied for extension %s" msgstr "немає дозволу для розширення %s" -#: catalog/aclchk.c:2708 +#: catalog/aclchk.c:2739 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "немає дозволу для джерела сторонніх даних %s" -#: catalog/aclchk.c:2711 +#: catalog/aclchk.c:2742 #, c-format msgid "permission denied for foreign server %s" msgstr "немає дозволу для стороннього серверу %s" -#: catalog/aclchk.c:2714 +#: catalog/aclchk.c:2745 #, c-format msgid "permission denied for foreign table %s" msgstr "немає дозволу для сторонньої таблиці %s" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2748 #, c-format msgid "permission denied for function %s" msgstr "немає дозволу для функції %s" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2751 #, c-format msgid "permission denied for index %s" msgstr "немає дозволу для індексу %s" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2754 #, c-format msgid "permission denied for language %s" msgstr "немає дозволу для мови %s" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2757 #, c-format msgid "permission denied for large object %s" msgstr "немає дозволу для великого об'єкту %s" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2760 #, c-format msgid "permission denied for materialized view %s" msgstr "немає дозволу для матеріалізованого подання %s" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2763 #, c-format msgid "permission denied for operator class %s" msgstr "немає дозволу для класу операторів %s" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2766 #, c-format msgid "permission denied for operator %s" msgstr "немає дозволу для оператора %s" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2769 #, c-format msgid "permission denied for operator family %s" msgstr "немає дозволу для сімейства операторів %s" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2772 #, c-format msgid "permission denied for parameter %s" msgstr "дозвіл відхилено для параметру %s" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2775 #, c-format msgid "permission denied for policy %s" msgstr "немає дозволу для політики %s" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2778 #, c-format msgid "permission denied for procedure %s" msgstr "немає дозволу для процедури %s" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2781 #, c-format msgid "permission denied for publication %s" msgstr "немає дозволу для публікації %s" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2784 #, c-format msgid "permission denied for routine %s" msgstr "немає дозволу для підпрограми %s" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2787 #, c-format msgid "permission denied for schema %s" msgstr "немає дозволу для схеми %s" -#: catalog/aclchk.c:2759 commands/sequence.c:659 commands/sequence.c:885 -#: commands/sequence.c:927 commands/sequence.c:968 commands/sequence.c:1761 -#: commands/sequence.c:1810 +#: catalog/aclchk.c:2790 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:2762 +#: catalog/aclchk.c:2793 #, c-format msgid "permission denied for statistics object %s" msgstr "немає дозволу для об'єкту статистики %s" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2796 #, c-format msgid "permission denied for subscription %s" msgstr "немає дозволу для підписки %s" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2799 #, c-format msgid "permission denied for table %s" msgstr "немає дозволу для таблиці %s" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2802 #, c-format msgid "permission denied for tablespace %s" msgstr "немає дозволу для табличного простору %s" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2805 #, c-format msgid "permission denied for text search configuration %s" msgstr "немає дозволу для конфігурації текстового пошуку %s" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2808 #, c-format msgid "permission denied for text search dictionary %s" msgstr "немає дозволу для словника текстового пошуку %s" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2811 #, c-format msgid "permission denied for type %s" msgstr "немає дозволу для типу %s" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2814 #, c-format msgid "permission denied for view %s" msgstr "немає дозволу для подання %s" -#: catalog/aclchk.c:2819 +#: catalog/aclchk.c:2850 #, c-format msgid "must be owner of aggregate %s" msgstr "треба бути власником агрегату %s" -#: catalog/aclchk.c:2822 +#: catalog/aclchk.c:2853 #, c-format msgid "must be owner of collation %s" msgstr "треба бути власником правил сортування %s" -#: catalog/aclchk.c:2825 +#: catalog/aclchk.c:2856 #, c-format msgid "must be owner of conversion %s" msgstr "треба бути власником перетворення %s" -#: catalog/aclchk.c:2828 +#: catalog/aclchk.c:2859 #, c-format msgid "must be owner of database %s" msgstr "треба бути власником бази даних %s" -#: catalog/aclchk.c:2831 +#: catalog/aclchk.c:2862 #, c-format msgid "must be owner of domain %s" msgstr "треба бути власником домену %s" -#: catalog/aclchk.c:2834 +#: catalog/aclchk.c:2865 #, c-format msgid "must be owner of event trigger %s" msgstr "треба бути власником тригеру подій %s" -#: catalog/aclchk.c:2837 +#: catalog/aclchk.c:2868 #, c-format msgid "must be owner of extension %s" msgstr "треба бути власником розширення %s" -#: catalog/aclchk.c:2840 +#: catalog/aclchk.c:2871 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "треба бути власником джерела сторонніх даних %s" -#: catalog/aclchk.c:2843 +#: catalog/aclchk.c:2874 #, c-format msgid "must be owner of foreign server %s" msgstr "треба бути власником стороннього серверу %s" -#: catalog/aclchk.c:2846 +#: catalog/aclchk.c:2877 #, c-format msgid "must be owner of foreign table %s" msgstr "треба бути власником сторонньої таблиці %s" -#: catalog/aclchk.c:2849 +#: catalog/aclchk.c:2880 #, c-format msgid "must be owner of function %s" msgstr "треба бути власником функції %s" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2883 #, c-format msgid "must be owner of index %s" msgstr "треба бути власником індексу %s" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2886 #, c-format msgid "must be owner of language %s" msgstr "треба бути власником мови %s" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2889 #, c-format msgid "must be owner of large object %s" msgstr "треба бути власником великого об'єкту %s" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2892 #, c-format msgid "must be owner of materialized view %s" msgstr "треба бути власником матеріалізованого подання %s" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2895 #, c-format msgid "must be owner of operator class %s" msgstr "треба бути власником класу операторів %s" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2898 #, c-format msgid "must be owner of operator %s" msgstr "треба бути власником оператора %s" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2901 #, c-format msgid "must be owner of operator family %s" msgstr "треба бути власником сімейства операторів %s" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2904 #, c-format msgid "must be owner of procedure %s" msgstr "треба бути власником процедури %s" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2907 #, c-format msgid "must be owner of publication %s" msgstr "треба бути власником публікації %s" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2910 #, c-format msgid "must be owner of routine %s" msgstr "треба бути власником підпрограми %s" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2913 #, c-format msgid "must be owner of sequence %s" msgstr "треба бути власником послідовності %s" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2916 #, c-format msgid "must be owner of subscription %s" msgstr "треба бути власником підписки %s" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2919 #, c-format msgid "must be owner of table %s" msgstr "треба бути власником таблиці %s" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2922 #, c-format msgid "must be owner of type %s" msgstr "треба бути власником типу %s" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2925 #, c-format msgid "must be owner of view %s" msgstr "треба бути власником подання %s" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2928 #, c-format msgid "must be owner of schema %s" msgstr "треба бути власником схеми %s" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2931 #, c-format msgid "must be owner of statistics object %s" msgstr "треба бути власником об'єкту статистики %s" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2934 #, c-format msgid "must be owner of tablespace %s" msgstr "треба бути власником табличного простору %s" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2937 #, c-format msgid "must be owner of text search configuration %s" msgstr "треба бути власником конфігурації текстового пошуку %s" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2940 #, c-format msgid "must be owner of text search dictionary %s" msgstr "треба бути власником словника текстового пошуку %s" -#: catalog/aclchk.c:2923 +#: catalog/aclchk.c:2954 #, c-format msgid "must be owner of relation %s" msgstr "треба бути власником відношення %s" -#: catalog/aclchk.c:2969 +#: catalog/aclchk.c:3000 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "немає дозволу для стовпця \"%s\" відношення \"%s\"" -#: catalog/aclchk.c:3104 catalog/aclchk.c:3984 catalog/aclchk.c:4015 +#: catalog/aclchk.c:3157 catalog/aclchk.c:4165 catalog/aclchk.c:4196 #, c-format msgid "%s with OID %u does not exist" msgstr "%s з OID %u не існує" -#: catalog/aclchk.c:3188 catalog/aclchk.c:3207 +#: catalog/aclchk.c:3240 catalog/aclchk.c:3259 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "атрибут %d відношення з OID %u не існує" -#: catalog/aclchk.c:3302 +#: catalog/aclchk.c:3297 catalog/aclchk.c:3360 catalog/aclchk.c:3999 #, c-format msgid "relation with OID %u does not exist" msgstr "відношення з OID %u не існує" -#: catalog/aclchk.c:3476 +#: catalog/aclchk.c:3545 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "параметр ACL з OID %u не існує" -#: catalog/aclchk.c:3640 commands/collationcmds.c:813 -#: commands/publicationcmds.c:1746 +#: catalog/aclchk.c:3718 commands/collationcmds.c:853 +#: commands/publicationcmds.c:1739 #, c-format msgid "schema with OID %u does not exist" msgstr "схема з OID %u не існує" -#: catalog/aclchk.c:3705 utils/cache/typcache.c:390 utils/cache/typcache.c:445 +#: catalog/aclchk.c:3792 catalog/aclchk.c:3819 catalog/aclchk.c:3848 +#: 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:449 +#: catalog/catalog.c:468 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "все ще шукаю невикористаний OID у відношенні \"%s\"" -#: catalog/catalog.c:451 +#: catalog/catalog.c:470 #, 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." @@ -4361,7 +4681,7 @@ msgstr[1] "OID кандидати буле перевірені %llu рази, msgstr[2] "OID кандидати буле перевірені %llu разів, але невикористаного OID все ще не знайдено." msgstr[3] "OID кандидати буле перевірені %llu разів, але невикористаного OID все ще не знайдено." -#: catalog/catalog.c:476 +#: catalog/catalog.c:495 #, 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" @@ -4370,106 +4690,101 @@ msgstr[1] "новий OID було призначено у відношенні msgstr[2] "новий OID було призначено у відношенні \"%s\" після %llu повторних спроб" msgstr[3] "новий OID було призначено у відношенні \"%s\" після %llu повторних спроб" -#: catalog/catalog.c:609 catalog/catalog.c:676 +#: catalog/catalog.c:628 catalog/catalog.c:695 #, c-format msgid "must be superuser to call %s()" msgstr "для виклику %s() потрібно бути суперкористувачем" -#: catalog/catalog.c:618 +#: catalog/catalog.c:637 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() можна використовувати лише для системних каталогів" -#: catalog/catalog.c:623 parser/parse_utilcmd.c:2273 +#: catalog/catalog.c:642 parser/parse_utilcmd.c:2270 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "індекс \"%s\" не належить таблиці \"%s\"" -#: catalog/catalog.c:640 +#: catalog/catalog.c:659 #, c-format msgid "column \"%s\" is not of type oid" msgstr "стовпець \"%s\" повинен мати тип oid" -#: catalog/catalog.c:647 +#: catalog/catalog.c:666 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "індекс \"%s\" не є індексом для стовпця \"%s\"" -#: catalog/dependency.c:546 catalog/pg_shdepend.c:658 +#: 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, оскільки він потрібний системі бази даних" -#: catalog/dependency.c:838 catalog/dependency.c:1065 +#: catalog/dependency.c:789 catalog/dependency.c:1016 #, c-format msgid "cannot drop %s because %s requires it" msgstr "не вдалося видалити %s, оскільки %s потребує його" -#: catalog/dependency.c:840 catalog/dependency.c:1067 +#: catalog/dependency.c:791 catalog/dependency.c:1018 #, c-format msgid "You can drop %s instead." msgstr "Ви можете видалити %s замість цього." -#: catalog/dependency.c:1146 catalog/dependency.c:1155 +#: catalog/dependency.c:1097 catalog/dependency.c:1106 #, c-format msgid "%s depends on %s" msgstr "%s залежить від %s" -#: catalog/dependency.c:1170 catalog/dependency.c:1179 +#: catalog/dependency.c:1121 catalog/dependency.c:1130 #, c-format msgid "drop cascades to %s" msgstr "видалення поширюється (cascades) на об'єкт %s" -#: catalog/dependency.c:1187 catalog/pg_shdepend.c:823 +#: catalog/dependency.c:1138 catalog/pg_shdepend.c:868 #, c-format -msgid "" -"\n" +msgid "\n" "and %d other object (see server log for list)" -msgid_plural "" -"\n" +msgid_plural "\n" "and %d other objects (see server log for list)" -msgstr[0] "" -"\n" +msgstr[0] "\n" "і ще %d інших об'єктів (див. список у протоколі серверу)" -msgstr[1] "" -"\n" +msgstr[1] "\n" "і ще %d інші об'єкти (див. список у протоколі серверу)" -msgstr[2] "" -"\n" +msgstr[2] "\n" "і ще %d інших об'єктів (див. список у протоколі серверу)" -msgstr[3] "" -"\n" +msgstr[3] "\n" "і ще %d інших об'єктів (див. список у протоколі серверу)" -#: catalog/dependency.c:1199 +#: catalog/dependency.c:1150 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "неможливо видалити %s, тому що від нього залежать інші об'єкти" -#: catalog/dependency.c:1202 catalog/dependency.c:1209 -#: catalog/dependency.c:1220 commands/tablecmds.c:1335 -#: commands/tablecmds.c:14400 commands/tablespace.c:466 commands/user.c:1303 -#: commands/vacuum.c:211 commands/view.c:446 libpq/auth.c:326 -#: replication/logical/applyparallelworker.c:1044 replication/syncrep.c:1017 -#: storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1366 utils/misc/guc.c:3122 -#: utils/misc/guc.c:3158 utils/misc/guc.c:3228 utils/misc/guc.c:6632 -#: utils/misc/guc.c:6666 utils/misc/guc.c:6700 utils/misc/guc.c:6743 -#: utils/misc/guc.c:6785 +#: catalog/dependency.c:1153 catalog/dependency.c:1160 +#: catalog/dependency.c:1171 commands/tablecmds.c:1442 +#: commands/tablecmds.c:14986 commands/tablespace.c:460 commands/user.c:1302 +#: commands/vacuum.c:211 commands/view.c:441 executor/execExprInterp.c:4643 +#: executor/execExprInterp.c:4651 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:6790 +#: utils/misc/guc.c:6824 utils/misc/guc.c:6858 utils/misc/guc.c:6901 +#: utils/misc/guc.c:6943 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1203 catalog/dependency.c:1210 +#: catalog/dependency.c:1154 catalog/dependency.c:1161 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Використайте DROP ... CASCADE для видалення залежних об'єктів також." -#: catalog/dependency.c:1207 +#: catalog/dependency.c:1158 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "не можна видалити бажаний(-і) об'єкт(-и) тому, що інші об'єкти залежні від нього(них)" -#: catalog/dependency.c:1215 +#: catalog/dependency.c:1166 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" @@ -4478,679 +4793,679 @@ msgstr[1] "видалення поширюється (cascades) на ще %d і msgstr[2] "видалення поширюється (cascades) на ще %d інших об'єктів" msgstr[3] "видалення поширюється (cascades) на ще %d інших об'єктів" -#: catalog/dependency.c:1899 +#: catalog/dependency.c:1850 #, c-format msgid "constant of the type %s cannot be used here" msgstr "константа типу %s не може бути використана тут" -#: catalog/dependency.c:2420 parser/parse_relation.c:3404 -#: parser/parse_relation.c:3414 +#: 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\" не існує" -#: catalog/heap.c:324 +#: catalog/heap.c:325 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "немає дозволу для створення \"%s.%s\"" -#: catalog/heap.c:326 +#: catalog/heap.c:327 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Змінення системного каталогу наразі заборонено." -#: catalog/heap.c:466 commands/tablecmds.c:2374 commands/tablecmds.c:3047 -#: commands/tablecmds.c:6926 +#: catalog/heap.c:467 commands/tablecmds.c:2478 commands/tablecmds.c:2900 +#: commands/tablecmds.c:7140 #, c-format msgid "tables can have at most %d columns" msgstr "таблиці можуть містити максимум %d стовпців" -#: catalog/heap.c:484 commands/tablecmds.c:7233 +#: catalog/heap.c:485 commands/tablecmds.c:7409 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "ім'я стовпця \"%s\" конфліктує з системним іменем стовпця" -#: catalog/heap.c:500 +#: catalog/heap.c:501 #, c-format msgid "column name \"%s\" specified more than once" msgstr "ім'я стовпця \"%s\" вказано кілька разів" #. translator: first %s is an integer not a name -#: catalog/heap.c:575 +#: catalog/heap.c:579 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "стовпець ключа секціонування %s має псевдотип %s" -#: catalog/heap.c:580 +#: catalog/heap.c:584 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "стовпець \"%s\" має псевдо-тип %s" -#: catalog/heap.c:611 +#: catalog/heap.c:615 #, 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:666 +#: catalog/heap.c:670 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "для стовпця ключа секціонування \"%s\" з сортируючим типом %s не вдалося отримати параметри сортування" -#: catalog/heap.c:672 commands/createas.c:203 commands/createas.c:512 +#: 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 "для стовпця \"%s\" із сортувальним типом %s не вдалося отримати параметри сортування" -#: catalog/heap.c:1148 catalog/index.c:887 commands/createas.c:408 -#: commands/tablecmds.c:3987 +#: catalog/heap.c:1161 catalog/index.c:899 commands/createas.c:401 +#: commands/tablecmds.c:4149 #, c-format msgid "relation \"%s\" already exists" msgstr "відношення \"%s\" вже існує" -#: catalog/heap.c:1164 catalog/pg_type.c:434 catalog/pg_type.c:782 -#: catalog/pg_type.c:954 commands/typecmds.c:249 commands/typecmds.c:261 -#: commands/typecmds.c:754 commands/typecmds.c:1169 commands/typecmds.c:1395 -#: commands/typecmds.c:1575 commands/typecmds.c:2546 +#: catalog/heap.c:1177 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 #, c-format msgid "type \"%s\" already exists" msgstr "тип \"%s\" вже існує" -#: catalog/heap.c:1165 +#: catalog/heap.c:1178 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "З відношенням вже пов'язаний тип з таким самим іменем, тому виберіть ім'я, яке не буде конфліктувати з типами, що існують." -#: catalog/heap.c:1205 +#: catalog/heap.c:1218 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "значення toast relfilenumber не встановлено в режимі двійкового оновлення" -#: catalog/heap.c:1216 +#: catalog/heap.c:1229 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "значення OID в pg_class не задано в режимі двійкового оновлення" -#: catalog/heap.c:1226 +#: catalog/heap.c:1239 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "значення relfilenumber не встановлено в режимі двійкового оновлення" -#: catalog/heap.c:2119 +#: catalog/heap.c:2128 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "не можна додати обмеження NO INHERIT до секціонованої таблиці \"%s\"" -#: catalog/heap.c:2394 +#: catalog/heap.c:2400 #, c-format msgid "check constraint \"%s\" already exists" msgstr "обмеження перевірки \"%s\" вже інсує" -#: catalog/heap.c:2564 catalog/index.c:901 catalog/pg_constraint.c:682 -#: commands/tablecmds.c:8908 +#: catalog/heap.c:2572 catalog/index.c:913 catalog/pg_constraint.c:724 +#: commands/tablecmds.c:9333 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "обмеження \"%s\" відношення \"%s\" вже існує" -#: catalog/heap.c:2571 +#: catalog/heap.c:2579 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "обмеження \"%s\" конфліктує з неуспадкованим обмеженням відношення \"%s\"" -#: catalog/heap.c:2582 +#: catalog/heap.c:2590 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "обмеження \"%s\" конфліктує з успадкованим обмеженням відношення \"%s\"" -#: catalog/heap.c:2592 +#: catalog/heap.c:2600 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "обмеження \"%s\" конфліктує з обмеженням NOT VALID в відношенні \"%s\"" -#: catalog/heap.c:2597 +#: catalog/heap.c:2605 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "злиття обмеження \"%s\" з успадкованим визначенням" -#: catalog/heap.c:2623 catalog/pg_constraint.c:811 commands/tablecmds.c:2672 -#: commands/tablecmds.c:3199 commands/tablecmds.c:6858 -#: commands/tablecmds.c:15222 commands/tablecmds.c:15363 +#: catalog/heap.c:2631 catalog/pg_constraint.c:853 commands/tablecmds.c:3057 +#: commands/tablecmds.c:3360 commands/tablecmds.c:7066 +#: commands/tablecmds.c:15804 commands/tablecmds.c:15935 #, c-format msgid "too many inheritance parents" msgstr "занадто багато батьків наслідування" -#: catalog/heap.c:2707 +#: catalog/heap.c:2715 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "в виразі створення стовпця не можна використовувати згенерований стовпець \"%s\"" -#: catalog/heap.c:2709 +#: catalog/heap.c:2717 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Згенерований стовпець не може посилатися на інший згенерований стовпець." -#: catalog/heap.c:2715 +#: catalog/heap.c:2723 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "у виразі створення стовпців не можна використовувати змінну усього рядка" -#: catalog/heap.c:2716 +#: catalog/heap.c:2724 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Це призведе до того, що згенерований стовпець буде залежати від власного значення." -#: catalog/heap.c:2771 +#: catalog/heap.c:2779 #, c-format msgid "generation expression is not immutable" msgstr "вираз генерації не є незмінним" -#: catalog/heap.c:2799 rewrite/rewriteHandler.c:1297 +#: catalog/heap.c:2807 rewrite/rewriteHandler.c:1282 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "стовпець \"%s\" має тип %s, але тип виразу за замовчуванням %s" -#: catalog/heap.c:2804 commands/prepare.c:334 parser/analyze.c:2742 -#: parser/parse_target.c:593 parser/parse_target.c:874 -#: parser/parse_target.c:884 rewrite/rewriteHandler.c:1302 +#: catalog/heap.c:2812 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:1287 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Потрібно буде переписати або привести вираз." -#: catalog/heap.c:2851 +#: catalog/heap.c:2859 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в обмеженні-перевірці можна посилатися лише на таблицю \"%s\"" -#: catalog/heap.c:3157 +#: catalog/heap.c:3165 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "непідтримуване поєднання зовнішнього ключа з ON COMMIT" -#: catalog/heap.c:3158 +#: catalog/heap.c:3166 #, 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:3163 +#: catalog/heap.c:3171 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "скоротити таблицю, на яку посилається зовнішній ключ, не можливо" -#: catalog/heap.c:3164 +#: catalog/heap.c:3172 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблиця \"%s\" посилається на \"%s\"." -#: catalog/heap.c:3166 +#: catalog/heap.c:3174 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Скоротіть таблицю \"%s\" паралельно або використайте TRUNCATE ... CASCADE." -#: catalog/index.c:225 parser/parse_utilcmd.c:2179 +#: catalog/index.c:219 parser/parse_utilcmd.c:2176 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "таблиця \"%s\" не може містити кілька первинних ключів" -#: catalog/index.c:239 +#: catalog/index.c:233 #, c-format msgid "primary keys cannot use NULLS NOT DISTINCT indexes" msgstr "первинні ключі не можуть використовувати NULLS NOT DISTINCT індекси" -#: catalog/index.c:256 +#: catalog/index.c:250 #, c-format msgid "primary keys cannot be expressions" msgstr "первинні ключі не можуть бути виразами" -#: catalog/index.c:273 +#: catalog/index.c:267 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "стовпець первинного ключа \"%s\" не позначений як NOT NULL" -#: catalog/index.c:786 catalog/index.c:1942 +#: catalog/index.c:798 catalog/index.c:1915 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "користувацькі індекси в таблицях системного каталогу не підтримуються" -#: catalog/index.c:826 +#: catalog/index.c:838 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "недетерміновані правила сортування не підтримуються для класу операторів \"%s\"" -#: catalog/index.c:841 +#: catalog/index.c:853 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "паралельне створення індексу в таблицях системного каталогу не підтримується" -#: catalog/index.c:850 catalog/index.c:1318 +#: catalog/index.c:862 catalog/index.c:1331 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "парарельне створення індексу для обмежень-виключень не підтримується" -#: catalog/index.c:859 +#: catalog/index.c:871 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "не можливо створити спільні індекси після initdb" -#: catalog/index.c:879 commands/createas.c:423 commands/sequence.c:158 +#: 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\" вже існує, пропускаємо" -#: catalog/index.c:929 +#: catalog/index.c:941 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "значення OID індекса в pg_class не встановлено в режимі двійкового оновлення" -#: catalog/index.c:939 utils/cache/relcache.c:3731 +#: catalog/index.c:951 utils/cache/relcache.c:3790 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "значення індексу relfilenumber не встановлено в режимі двійкового оновлення" -#: catalog/index.c:2241 +#: catalog/index.c:2214 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY повинен бути першою дією в транзакції" -#: catalog/index.c:3675 +#: catalog/index.c:3670 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "повторно індексувати тимчасові таблиці інших сеансів не можна" -#: catalog/index.c:3686 commands/indexcmds.c:3607 +#: catalog/index.c:3681 commands/indexcmds.c:3653 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "переіндексувати неприпустимий індекс в таблиці TOAST не можна" -#: catalog/index.c:3702 commands/indexcmds.c:3487 commands/indexcmds.c:3631 -#: commands/tablecmds.c:3402 +#: catalog/index.c:3697 commands/indexcmds.c:3531 commands/indexcmds.c:3677 +#: commands/tablecmds.c:3564 #, c-format msgid "cannot move system relation \"%s\"" msgstr "перемістити системне відношення \"%s\" не можна" -#: catalog/index.c:3846 +#: catalog/index.c:3834 #, c-format msgid "index \"%s\" was reindexed" msgstr "індекс \"%s\" був перебудований" -#: catalog/index.c:3983 +#: catalog/index.c:4000 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "переіндексувати неприпустимий індекс \"%s.%s\" в таблиці TOAST не можна, пропускається" -#: catalog/namespace.c:260 catalog/namespace.c:464 catalog/namespace.c:556 -#: commands/trigger.c:5736 +#: catalog/namespace.c:447 catalog/namespace.c:651 catalog/namespace.c:743 +#: commands/trigger.c:5731 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "cross-database посилання не реалізовані: \"%s.%s.%s\"" -#: catalog/namespace.c:317 +#: catalog/namespace.c:504 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "для тимчасових таблиць ім'я схеми не вказується" -#: catalog/namespace.c:398 +#: catalog/namespace.c:585 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "не вдалося отримати блокування зв'язку \"%s.%s\"" -#: catalog/namespace.c:403 commands/lockcmds.c:144 commands/lockcmds.c:224 +#: catalog/namespace.c:590 commands/lockcmds.c:143 commands/lockcmds.c:223 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "не вдалося отримати блокування зв'язку \"%s\"" -#: catalog/namespace.c:431 parser/parse_relation.c:1430 +#: catalog/namespace.c:618 parser/parse_relation.c:1430 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "відношення \"%s.%s\" не існує" -#: catalog/namespace.c:436 parser/parse_relation.c:1443 +#: catalog/namespace.c:623 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:502 catalog/namespace.c:3073 commands/extension.c:1611 -#: commands/extension.c:1617 +#: catalog/namespace.c:689 catalog/namespace.c:3507 commands/extension.c:1607 +#: commands/extension.c:1613 #, c-format msgid "no schema has been selected to create in" msgstr "не вибрано схему для створення об'єктів" -#: catalog/namespace.c:654 catalog/namespace.c:667 +#: catalog/namespace.c:841 catalog/namespace.c:854 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "неможливо створити відношення в тимчасових схемах з інших сеансів" -#: catalog/namespace.c:658 +#: catalog/namespace.c:845 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "неможливо створити тимчасове відношення в не тимчасовій схемі" -#: catalog/namespace.c:673 +#: catalog/namespace.c:860 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "в тимчасових схемах можуть бути створені тільки тимчасові відношення" -#: catalog/namespace.c:2265 +#: catalog/namespace.c:2604 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "об'єкт статистики \"%s\" не існує" -#: catalog/namespace.c:2388 +#: catalog/namespace.c:2746 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "парсер текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2514 utils/adt/regproc.c:1439 +#: catalog/namespace.c:2891 utils/adt/regproc.c:1459 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "словник текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2641 +#: catalog/namespace.c:3037 #, c-format msgid "text search template \"%s\" does not exist" msgstr "шаблон текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2767 commands/tsearchcmds.c:1168 -#: utils/adt/regproc.c:1329 utils/cache/ts_cache.c:635 +#: catalog/namespace.c:3182 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:2880 parser/parse_expr.c:832 parser/parse_target.c:1246 +#: catalog/namespace.c:3314 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:2886 parser/parse_expr.c:839 parser/parse_target.c:1253 -#: gram.y:18569 gram.y:18609 +#: catalog/namespace.c:3320 parser/parse_expr.c:875 parser/parse_target.c:1266 +#: gram.y:19181 gram.y:19221 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неправильне повне ім'я (забагато компонентів): %s" -#: catalog/namespace.c:3016 +#: catalog/namespace.c:3450 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "не можна переміщати об'єкти в або з тимчасових схем" -#: catalog/namespace.c:3022 +#: catalog/namespace.c:3456 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "не можна переміщати об'єкти в або з схем TOAST" -#: catalog/namespace.c:3095 commands/schemacmds.c:264 commands/schemacmds.c:344 -#: commands/tablecmds.c:1280 utils/adt/regproc.c:1668 +#: catalog/namespace.c:3529 commands/schemacmds.c:264 commands/schemacmds.c:344 +#: commands/tablecmds.c:1387 utils/adt/regproc.c:1688 #, c-format msgid "schema \"%s\" does not exist" msgstr "схема \"%s\" не існує" -#: catalog/namespace.c:3126 +#: catalog/namespace.c:3560 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неправильне ім'я зв'язку (забагато компонентів): %s" -#: catalog/namespace.c:3693 utils/adt/regproc.c:1056 +#: catalog/namespace.c:4001 utils/adt/regproc.c:1056 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "правило сортування \"%s\" для кодування \"%s\" не існує" -#: catalog/namespace.c:3748 +#: catalog/namespace.c:4056 #, c-format msgid "conversion \"%s\" does not exist" msgstr "перетворення\"%s\" не існує" -#: catalog/namespace.c:4012 +#: catalog/namespace.c:4397 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "немає дозволу для створення тимчасових таблиць в базі даних \"%s\"" -#: catalog/namespace.c:4028 +#: catalog/namespace.c:4413 #, c-format msgid "cannot create temporary tables during recovery" msgstr "не можна створити тимчасові таблиці під час відновлення" -#: catalog/namespace.c:4034 +#: catalog/namespace.c:4419 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "не можна створити тимчасові таблиці під час паралельної операції" -#: catalog/objectaddress.c:1409 commands/policy.c:96 commands/policy.c:376 -#: commands/tablecmds.c:248 commands/tablecmds.c:290 commands/tablecmds.c:2206 -#: commands/tablecmds.c:12369 +#: catalog/objectaddress.c:1371 commands/policy.c:93 commands/policy.c:373 +#: commands/tablecmds.c:257 commands/tablecmds.c:299 commands/tablecmds.c:2310 +#: commands/tablecmds.c:12823 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" не є таблицею" -#: catalog/objectaddress.c:1416 commands/tablecmds.c:260 -#: commands/tablecmds.c:17163 commands/view.c:119 +#: catalog/objectaddress.c:1378 commands/tablecmds.c:269 +#: commands/tablecmds.c:17741 commands/view.c:114 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" не є поданням" -#: catalog/objectaddress.c:1423 commands/matview.c:186 commands/tablecmds.c:266 -#: commands/tablecmds.c:17168 +#: catalog/objectaddress.c:1385 commands/matview.c:199 commands/tablecmds.c:275 +#: commands/tablecmds.c:17746 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" не є матеріалізованим поданням" -#: catalog/objectaddress.c:1430 commands/tablecmds.c:284 -#: commands/tablecmds.c:17173 +#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 +#: commands/tablecmds.c:17751 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" не є сторонньою таблицею" -#: catalog/objectaddress.c:1471 +#: catalog/objectaddress.c:1433 #, c-format msgid "must specify relation and object name" msgstr "треба вказати відношення й ім'я об'єкта" -#: catalog/objectaddress.c:1547 catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:1509 catalog/objectaddress.c:1562 #, c-format msgid "column name must be qualified" msgstr "слід вказати ім'я стовпця" -#: catalog/objectaddress.c:1619 +#: catalog/objectaddress.c:1581 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "значення за замовчуванням для стовпця \"%s\" відношення \"%s\" не існує" -#: catalog/objectaddress.c:1656 commands/functioncmds.c:137 -#: commands/tablecmds.c:276 commands/typecmds.c:274 commands/typecmds.c:3691 +#: 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:4441 +#: utils/adt/acl.c:4560 #, c-format msgid "type \"%s\" does not exist" msgstr "тип \"%s\" не існує" -#: catalog/objectaddress.c:1775 +#: catalog/objectaddress.c:1737 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "оператор %d (%s, %s) з %s не існує" -#: catalog/objectaddress.c:1806 +#: catalog/objectaddress.c:1768 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "функція %d (%s, %s) з %s не існує" -#: catalog/objectaddress.c:1857 catalog/objectaddress.c:1883 +#: catalog/objectaddress.c:1819 catalog/objectaddress.c:1845 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "відображення користувача для користувача \"%s\" на сервері \"%s\"не існує" -#: catalog/objectaddress.c:1872 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:700 +#: 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\" не існує" -#: catalog/objectaddress.c:1939 +#: catalog/objectaddress.c:1901 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "відношення публікації \"%s\" в публікації \"%s\" не існує" -#: catalog/objectaddress.c:1986 +#: catalog/objectaddress.c:1948 #, c-format msgid "publication schema \"%s\" in publication \"%s\" does not exist" msgstr "схема публікації \"%s\" в публікації \"%s\" не існує" -#: catalog/objectaddress.c:2044 +#: catalog/objectaddress.c:2006 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "нерозпізнаний тип об'єкта ACL за замовчуванням \"%c\"" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2007 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Припустимі типи об'єктів: \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:2096 +#: catalog/objectaddress.c:2058 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "ACL за замовчуванням для користувача \"%s\" в схемі \"%s\" для об'єкту %s не існує" -#: catalog/objectaddress.c:2101 +#: catalog/objectaddress.c:2063 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "ACL за замовчуванням для користувача \"%s\" і для об'єкту %s не існує" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2184 -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:2089 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2201 #, c-format msgid "name or argument lists may not contain nulls" msgstr "списки імен та аргументів не повинні містити Null" -#: catalog/objectaddress.c:2161 +#: catalog/objectaddress.c:2123 #, c-format msgid "unsupported object type \"%s\"" msgstr "непідтримуваний тип об'єкта \"%s\"" -#: catalog/objectaddress.c:2180 catalog/objectaddress.c:2197 -#: catalog/objectaddress.c:2262 catalog/objectaddress.c:2346 +#: catalog/objectaddress.c:2142 catalog/objectaddress.c:2159 +#: catalog/objectaddress.c:2224 catalog/objectaddress.c:2308 #, c-format msgid "name list length must be exactly %d" msgstr "довжина списку імен повинна бути точно %d" -#: catalog/objectaddress.c:2201 +#: catalog/objectaddress.c:2163 #, c-format msgid "large object OID may not be null" msgstr "OID великого об'єкта не повинно бути нулем" -#: catalog/objectaddress.c:2210 catalog/objectaddress.c:2280 -#: catalog/objectaddress.c:2287 +#: catalog/objectaddress.c:2172 catalog/objectaddress.c:2242 +#: catalog/objectaddress.c:2249 #, c-format msgid "name list length must be at least %d" msgstr "довжина списку імен повинна бути щонайменше %d" -#: catalog/objectaddress.c:2273 catalog/objectaddress.c:2294 +#: catalog/objectaddress.c:2235 catalog/objectaddress.c:2256 #, c-format msgid "argument list length must be exactly %d" msgstr "довжина списку аргументів повинна бути точно %d" -#: catalog/objectaddress.c:2508 libpq/be-fsstubs.c:329 +#: catalog/objectaddress.c:2470 libpq/be-fsstubs.c:329 #, c-format msgid "must be owner of large object %u" msgstr "треба бути власником великого об'єкта %u" -#: catalog/objectaddress.c:2523 commands/functioncmds.c:1561 +#: catalog/objectaddress.c:2485 commands/functioncmds.c:1560 #, c-format msgid "must be owner of type %s or type %s" msgstr "треба бути власником типу %s або типу %s" -#: catalog/objectaddress.c:2550 catalog/objectaddress.c:2559 -#: catalog/objectaddress.c:2565 +#: catalog/objectaddress.c:2512 catalog/objectaddress.c:2521 +#: catalog/objectaddress.c:2527 #, c-format msgid "permission denied" msgstr "немає доступу" -#: catalog/objectaddress.c:2551 catalog/objectaddress.c:2560 +#: catalog/objectaddress.c:2513 catalog/objectaddress.c:2522 #, c-format msgid "The current user must have the %s attribute." msgstr "Поточний користувач повинен мати атрибут %s." -#: catalog/objectaddress.c:2566 +#: catalog/objectaddress.c:2528 #, c-format msgid "The current user must have the %s option on role \"%s\"." msgstr "Поточний користувач повинен мати параметр %s для ролі \"%s\"." -#: catalog/objectaddress.c:2580 +#: catalog/objectaddress.c:2542 #, c-format msgid "must be superuser" msgstr "треба бути суперкористувачем" -#: catalog/objectaddress.c:2649 +#: catalog/objectaddress.c:2611 #, c-format msgid "unrecognized object type \"%s\"" msgstr "нерозпізнаний тип об'єкту \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2941 +#: catalog/objectaddress.c:2903 #, c-format msgid "column %s of %s" msgstr "стовпець %s з %s" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2918 #, c-format msgid "function %s" msgstr "функція %s" -#: catalog/objectaddress.c:2969 +#: catalog/objectaddress.c:2931 #, c-format msgid "type %s" msgstr "тип %s" -#: catalog/objectaddress.c:3006 +#: catalog/objectaddress.c:2968 #, c-format msgid "cast from %s to %s" msgstr "приведення від %s до %s" -#: catalog/objectaddress.c:3039 +#: catalog/objectaddress.c:3001 #, c-format msgid "collation %s" msgstr "сортування %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3032 #, c-format msgid "constraint %s on %s" msgstr "обмеження %s на %s" -#: catalog/objectaddress.c:3076 +#: catalog/objectaddress.c:3038 #, c-format msgid "constraint %s" msgstr "обмеження %s" -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3070 #, c-format msgid "conversion %s" msgstr "перетворення %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3130 +#: catalog/objectaddress.c:3092 #, c-format msgid "default value for %s" msgstr "значення за замовчуванням для %s" -#: catalog/objectaddress.c:3141 +#: catalog/objectaddress.c:3103 #, c-format msgid "language %s" msgstr "мова %s" -#: catalog/objectaddress.c:3149 +#: catalog/objectaddress.c:3111 #, c-format msgid "large object %u" msgstr "великий об'єкт %u" -#: catalog/objectaddress.c:3162 +#: catalog/objectaddress.c:3124 #, c-format msgid "operator %s" msgstr "оператор %s" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3161 #, c-format msgid "operator class %s for access method %s" msgstr "клас операторів %s для методу доступу %s" -#: catalog/objectaddress.c:3227 +#: catalog/objectaddress.c:3189 #, c-format msgid "access method %s" msgstr "метод доступу %s" @@ -5159,7 +5474,7 @@ msgstr "метод доступу %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3276 +#: catalog/objectaddress.c:3238 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "оператор %d (%s, %s) з %s: %s" @@ -5168,236 +5483,236 @@ msgstr "оператор %d (%s, %s) з %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3333 +#: catalog/objectaddress.c:3295 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "функція %d (%s, %s) з %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3385 +#: catalog/objectaddress.c:3347 #, c-format msgid "rule %s on %s" msgstr "правило %s на %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3431 +#: catalog/objectaddress.c:3393 #, c-format msgid "trigger %s on %s" msgstr "тригер %s на %s" -#: catalog/objectaddress.c:3451 +#: catalog/objectaddress.c:3413 #, c-format msgid "schema %s" msgstr "схема %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3441 #, c-format msgid "statistics object %s" msgstr "об'єкт статистики %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3472 #, c-format msgid "text search parser %s" msgstr "парсер текстового пошуку %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3503 #, c-format msgid "text search dictionary %s" msgstr "словник текстового пошуку %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3534 #, c-format msgid "text search template %s" msgstr "шаблон текстового пошуку %s" -#: catalog/objectaddress.c:3603 +#: catalog/objectaddress.c:3565 #, c-format msgid "text search configuration %s" msgstr "конфігурація текстового пошуку %s" -#: catalog/objectaddress.c:3616 +#: catalog/objectaddress.c:3578 #, c-format msgid "role %s" msgstr "роль %s" -#: catalog/objectaddress.c:3653 catalog/objectaddress.c:5505 +#: catalog/objectaddress.c:3615 catalog/objectaddress.c:5464 #, c-format msgid "membership of role %s in role %s" msgstr "членство ролі %s в ролі %s" -#: catalog/objectaddress.c:3674 +#: catalog/objectaddress.c:3636 #, c-format msgid "database %s" msgstr "база даних %s" -#: catalog/objectaddress.c:3690 +#: catalog/objectaddress.c:3652 #, c-format msgid "tablespace %s" msgstr "табличний простір %s" -#: catalog/objectaddress.c:3701 +#: catalog/objectaddress.c:3663 #, c-format msgid "foreign-data wrapper %s" msgstr "джерело сторонніх даних %s" -#: catalog/objectaddress.c:3711 +#: catalog/objectaddress.c:3673 #, c-format msgid "server %s" msgstr "сервер %s" -#: catalog/objectaddress.c:3744 +#: catalog/objectaddress.c:3706 #, c-format msgid "user mapping for %s on server %s" msgstr "зіставлення користувача для %s на сервері %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3758 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "права за замовчуванням для нових відношень, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3800 +#: catalog/objectaddress.c:3762 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "права за замовчуванням для нових відношень, що належать ролі %s" -#: catalog/objectaddress.c:3806 +#: catalog/objectaddress.c:3768 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "права за замовчуванням для нових послідовностей, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3810 +#: catalog/objectaddress.c:3772 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "права за замовчуванням для нових послідовностей, що належать ролі %s" -#: catalog/objectaddress.c:3816 +#: catalog/objectaddress.c:3778 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "права за замовчуванням для нових функцій, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3820 +#: catalog/objectaddress.c:3782 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "права за замовчуванням для нових функцій, що належать ролі %s" -#: catalog/objectaddress.c:3826 +#: catalog/objectaddress.c:3788 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "права за замовчуванням для нових типів, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3830 +#: catalog/objectaddress.c:3792 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "права за замовчуванням для нових типів, що належать ролі %s" -#: catalog/objectaddress.c:3836 +#: catalog/objectaddress.c:3798 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "права за замовчуванням для нових схем, що належать ролі %s" -#: catalog/objectaddress.c:3843 +#: catalog/objectaddress.c:3805 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "права за замовчуванням, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3847 +#: catalog/objectaddress.c:3809 #, c-format msgid "default privileges belonging to role %s" msgstr "права за замовчуванням належать ролі %s" -#: catalog/objectaddress.c:3869 +#: catalog/objectaddress.c:3831 #, c-format msgid "extension %s" msgstr "розширення %s" -#: catalog/objectaddress.c:3886 +#: catalog/objectaddress.c:3848 #, c-format msgid "event trigger %s" msgstr "тригер подій %s" -#: catalog/objectaddress.c:3910 +#: catalog/objectaddress.c:3872 #, c-format msgid "parameter %s" msgstr "параметр %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3953 +#: catalog/objectaddress.c:3915 #, c-format msgid "policy %s on %s" msgstr "політика %s на %s" -#: catalog/objectaddress.c:3967 +#: catalog/objectaddress.c:3929 #, c-format msgid "publication %s" msgstr "публікація %s" -#: catalog/objectaddress.c:3980 +#: catalog/objectaddress.c:3942 #, c-format msgid "publication of schema %s in publication %s" msgstr "публікація схеми %s в публікації %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:4011 +#: catalog/objectaddress.c:3973 #, c-format msgid "publication of %s in publication %s" msgstr "відношення публікації %s в публікації %s" -#: catalog/objectaddress.c:4024 +#: catalog/objectaddress.c:3986 #, c-format msgid "subscription %s" msgstr "підписка %s" -#: catalog/objectaddress.c:4045 +#: catalog/objectaddress.c:4007 #, c-format msgid "transform for %s language %s" msgstr "трансформація для %s мови %s" -#: catalog/objectaddress.c:4116 +#: catalog/objectaddress.c:4076 #, c-format msgid "table %s" msgstr "таблиця %s" -#: catalog/objectaddress.c:4121 +#: catalog/objectaddress.c:4081 #, c-format msgid "index %s" msgstr "індекс %s" -#: catalog/objectaddress.c:4125 +#: catalog/objectaddress.c:4085 #, c-format msgid "sequence %s" msgstr "послідовність %s" -#: catalog/objectaddress.c:4129 +#: catalog/objectaddress.c:4089 #, c-format msgid "toast table %s" msgstr "таблиця toast %s" -#: catalog/objectaddress.c:4133 +#: catalog/objectaddress.c:4093 #, c-format msgid "view %s" msgstr "подання %s" -#: catalog/objectaddress.c:4137 +#: catalog/objectaddress.c:4097 #, c-format msgid "materialized view %s" msgstr "матеріалізоване подання %s" -#: catalog/objectaddress.c:4141 +#: catalog/objectaddress.c:4101 #, c-format msgid "composite type %s" msgstr "складений тип %s" -#: catalog/objectaddress.c:4145 +#: catalog/objectaddress.c:4105 #, c-format msgid "foreign table %s" msgstr "зовнішня таблиця %s" -#: catalog/objectaddress.c:4150 +#: catalog/objectaddress.c:4110 #, c-format msgid "relation %s" msgstr "відношення %s" -#: catalog/objectaddress.c:4191 +#: catalog/objectaddress.c:4151 #, c-format msgid "operator family %s for access method %s" msgstr "сімейство операторів %s для методу доступу %s" @@ -5441,7 +5756,7 @@ msgstr "не можна пропустити початкове значення msgid "return type of inverse transition function %s is not %s" msgstr "інвертована функція переходу %s повинна повертати тип %s" -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:3009 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2992 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "пряма й інвертована функції переходу агрегату повинні мати однакову суворість" @@ -5456,7 +5771,7 @@ msgstr "фінальна функція з додатковими аргумен msgid "return type of combine function %s is not %s" msgstr "комбінуюча функція %s повинна повертати тип %s" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3903 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:3902 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "комбінуюча функція з перехідним типом %s не повинна оголошуватись як сувора (STRICT)" @@ -5471,12 +5786,12 @@ msgstr "функція серіалізації %s повинна поверта msgid "return type of deserialization function %s is not %s" msgstr "функція десеріалізації %s повинна повертати тип %s" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:191 catalog/pg_proc.c:225 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "не вдалося визначити тип результату" -#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:204 catalog/pg_proc.c:233 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "небезпечне використання псевдотипу (pseudo-type) \"internal\"" @@ -5491,7 +5806,7 @@ msgstr "реалізація рухомого агрегату повертає msgid "sort operator can only be specified for single-argument aggregates" msgstr "оператора сортування можна вказати лише для агрегатних функцій з одним аргументом" -#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:386 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "неможливо змінити тип підпрограми" @@ -5516,13 +5831,13 @@ msgstr "\"%s\" є агрегатом для гіпотетичних набор msgid "cannot change number of direct arguments of an aggregate function" msgstr "змінити кількість прямих аргументів агрегатної функції не можна" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:691 -#: commands/typecmds.c:1975 commands/typecmds.c:2021 commands/typecmds.c:2073 -#: commands/typecmds.c:2110 commands/typecmds.c:2144 commands/typecmds.c:2178 -#: commands/typecmds.c:2212 commands/typecmds.c:2241 commands/typecmds.c:2328 -#: commands/typecmds.c:2370 parser/parse_func.c:417 parser/parse_func.c:448 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:686 +#: commands/typecmds.c:1985 commands/typecmds.c:2031 commands/typecmds.c:2083 +#: commands/typecmds.c:2120 commands/typecmds.c:2154 commands/typecmds.c:2188 +#: commands/typecmds.c:2222 commands/typecmds.c:2251 commands/typecmds.c:2338 +#: commands/typecmds.c:2380 parser/parse_func.c:417 parser/parse_func.c:448 #: parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 -#: parser/parse_func.c:631 parser/parse_func.c:2171 parser/parse_func.c:2444 +#: parser/parse_func.c:631 parser/parse_func.c:2172 parser/parse_func.c:2445 #, c-format msgid "function %s does not exist" msgstr "функції %s не існує" @@ -5597,133 +5912,133 @@ msgstr "Ця операція не підтримується для секці msgid "This operation is not supported for partitioned indexes." msgstr "Ця операція не підтримується для секціонованих індексів." -#: catalog/pg_collation.c:102 catalog/pg_collation.c:160 +#: catalog/pg_collation.c:101 catalog/pg_collation.c:159 #, c-format msgid "collation \"%s\" already exists, skipping" msgstr "сортування \"%s\" вже існує, пропускаємо" -#: catalog/pg_collation.c:104 +#: catalog/pg_collation.c:103 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" msgstr "правило сортування \"%s \" для кодування \"%s\" вже існує, пропускаємо" -#: catalog/pg_collation.c:112 catalog/pg_collation.c:167 +#: catalog/pg_collation.c:111 catalog/pg_collation.c:166 #, c-format msgid "collation \"%s\" already exists" msgstr "правило сортування \"%s\" вже існує" -#: catalog/pg_collation.c:114 +#: catalog/pg_collation.c:113 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "правило сортування \"%s \" для кодування \"%s\" вже існує" -#: catalog/pg_constraint.c:690 +#: catalog/pg_constraint.c:732 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "обмеження \"%s\" для домену %s вже існує" -#: catalog/pg_constraint.c:890 catalog/pg_constraint.c:983 +#: catalog/pg_constraint.c:932 catalog/pg_constraint.c:1025 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "індексу \"%s\" для таблиці \"%s\" не існує" -#: catalog/pg_constraint.c:1083 +#: catalog/pg_constraint.c:1125 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "обмеження \"%s\" для домену \"%s\" не існує" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:64 #, c-format msgid "conversion \"%s\" already exists" msgstr "перетворення \"%s\" вже існує" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:77 #, c-format msgid "default conversion for %s to %s already exists" msgstr "перетворення за замовчуванням від %s до %s вже існує" -#: catalog/pg_depend.c:222 commands/extension.c:3368 +#: catalog/pg_depend.c:224 commands/extension.c:3397 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s вже є членом розширення \"%s\"" -#: catalog/pg_depend.c:229 catalog/pg_depend.c:280 commands/extension.c:3408 +#: catalog/pg_depend.c:231 catalog/pg_depend.c:282 commands/extension.c:3437 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s не є членом розширення \"%s\"" -#: catalog/pg_depend.c:232 +#: catalog/pg_depend.c:234 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "Розширенню не дозволяється замінювати об'єкт, який йому не належить." -#: catalog/pg_depend.c:283 +#: catalog/pg_depend.c:285 #, c-format msgid "An extension may only use CREATE ... IF NOT EXISTS to skip object creation if the conflicting object is one that it already owns." msgstr "Розширення може використовувати лише CREATE ... IF NOT EXISTS, щоб пропустити створення об'єкту, якщо конфліктуючий об'єкт уже належить йому." -#: catalog/pg_depend.c:646 +#: catalog/pg_depend.c:648 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "неможливо видалити залежність від об'єкта %s, тому що це системний об'єкт" -#: catalog/pg_enum.c:137 catalog/pg_enum.c:259 catalog/pg_enum.c:554 +#: catalog/pg_enum.c:175 catalog/pg_enum.c:314 catalog/pg_enum.c:624 #, c-format msgid "invalid enum label \"%s\"" msgstr "неприпустима мітка перераховування \"%s\"" -#: catalog/pg_enum.c:138 catalog/pg_enum.c:260 catalog/pg_enum.c:555 +#: catalog/pg_enum.c:176 catalog/pg_enum.c:315 catalog/pg_enum.c:625 #, c-format msgid "Labels must be %d bytes or less." msgstr "Мітки повинні бути %d байт або менше." -#: catalog/pg_enum.c:288 +#: catalog/pg_enum.c:343 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "мітка перераховування \"%s\" вже існує, пропускаємо" -#: catalog/pg_enum.c:295 catalog/pg_enum.c:598 +#: catalog/pg_enum.c:350 catalog/pg_enum.c:668 #, c-format msgid "enum label \"%s\" already exists" msgstr "мітка перераховування \"%s\" вже існує" -#: catalog/pg_enum.c:350 catalog/pg_enum.c:593 +#: catalog/pg_enum.c:405 catalog/pg_enum.c:663 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "\"%s\" не є існуючою міткою перераховування" -#: catalog/pg_enum.c:408 +#: catalog/pg_enum.c:463 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "значення OID в pg_enum не встановлено в режимі двійкового оновлення" -#: catalog/pg_enum.c:418 +#: catalog/pg_enum.c:473 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "Конструкція ALTER TYPE ADD BEFORE/AFTER несумісна з двійковим оновленням даних" -#: catalog/pg_inherits.c:593 +#: catalog/pg_inherits.c:592 #, c-format msgid "cannot detach partition \"%s\"" msgstr "не можна відключити розділ \"%s\"" -#: catalog/pg_inherits.c:595 +#: catalog/pg_inherits.c:594 #, c-format msgid "The partition is being detached concurrently or has an unfinished detach." msgstr "Розділ відключається одночасно або має незакінчене відключення." -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4583 -#: commands/tablecmds.c:15478 +#: catalog/pg_inherits.c:595 commands/tablecmds.c:4777 +#: commands/tablecmds.c:16050 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Використайте ALTER TABLE ... DETACH PARTITION ... FINALIZE щоб завершити очікувану операцію відключення." -#: catalog/pg_inherits.c:600 +#: catalog/pg_inherits.c:599 #, c-format msgid "cannot complete detaching partition \"%s\"" msgstr "не можна завершити відключення розділу \"%s\"" -#: catalog/pg_inherits.c:602 +#: catalog/pg_inherits.c:601 #, c-format msgid "There's no pending concurrent detach." msgstr "Немає жодного очікуючого паралельного відключення." @@ -5733,77 +6048,92 @@ msgstr "Немає жодного очікуючого паралельного msgid "schema \"%s\" already exists" msgstr "схема \"%s\" вже існує" -#: catalog/pg_operator.c:219 catalog/pg_operator.c:361 +#: catalog/pg_operator.c:213 catalog/pg_operator.c:355 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "\"%s\" не є коректним оператором" -#: catalog/pg_operator.c:370 +#: catalog/pg_operator.c:379 +#, c-format +msgid "operator %s already exists" +msgstr "оператор %s вже існує" + +#: catalog/pg_operator.c:445 commands/operatorcmds.c:600 +#, c-format +msgid "operator cannot be its own negator" +msgstr "оператор не може бути власним запереченням" + +#: catalog/pg_operator.c:572 #, c-format msgid "only binary operators can have commutators" msgstr "(commutators) можна визначити лише для бінарних операторів" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:509 +#: catalog/pg_operator.c:576 #, c-format msgid "only binary operators can have join selectivity" msgstr "функцію оцінки з'єднання можливо визначити лише для бінарних операторів" -#: catalog/pg_operator.c:378 +#: catalog/pg_operator.c:580 #, c-format msgid "only binary operators can merge join" msgstr "підтримку з'єднання злиттям можливо позначити лише для бінарних операторів" -#: catalog/pg_operator.c:382 +#: catalog/pg_operator.c:584 #, c-format msgid "only binary operators can hash" msgstr "підтримка хешу можливо позначити лише для бінарних операторів" -#: catalog/pg_operator.c:393 +#: catalog/pg_operator.c:593 #, c-format msgid "only boolean operators can have negators" msgstr "зворотню операцію можливо визначити лише для логічних операторів" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:517 +#: catalog/pg_operator.c:597 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "функцію оцінки обмеження можливо визначити лише для логічних операторів" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:521 +#: catalog/pg_operator.c:601 #, c-format msgid "only boolean operators can have join selectivity" msgstr "функцію оцінки з'єднання можливо визначити лише для логічних операторів" -#: catalog/pg_operator.c:405 +#: catalog/pg_operator.c:605 #, c-format msgid "only boolean operators can merge join" msgstr "підтримку з'єднання злиттям можливо позначити лише для логічних операторів" -#: catalog/pg_operator.c:409 +#: catalog/pg_operator.c:609 #, c-format msgid "only boolean operators can hash" msgstr "підтримку хешу можливо позначити лише для логічних операторів" -#: catalog/pg_operator.c:421 +#: catalog/pg_operator.c:739 #, c-format -msgid "operator %s already exists" -msgstr "оператор %s вже існує" +msgid "commutator operator %s is already the commutator of operator %s" +msgstr "оператор комутатора %s вже є комутатором оператора %s" -#: catalog/pg_operator.c:621 +#: catalog/pg_operator.c:744 #, c-format -msgid "operator cannot be its own negator or sort operator" -msgstr "оператор не може бути зворотнім до себе або власним оператором сортування" +msgid "commutator operator %s is already the commutator of operator %u" +msgstr "оператор комутатора %s вже є комутатором оператора %u" -#: catalog/pg_parameter_acl.c:53 +#: catalog/pg_operator.c:807 #, c-format -msgid "parameter ACL \"%s\" does not exist" -msgstr "параметр ACL \"%s\" не існує" +msgid "negator operator %s is already the negator of operator %s" +msgstr "оператор заперечення %s вже є запереченням оператора %s" -#: catalog/pg_parameter_acl.c:88 +#: catalog/pg_operator.c:812 #, c-format -msgid "invalid parameter name \"%s\"" -msgstr "неприпустима назва параметру \"%s\"" +msgid "negator operator %s is already the negator of operator %u" +msgstr "заперечний оператор %s вже є запереченням оператора %u" + +#: catalog/pg_parameter_acl.c:50 +#, c-format +msgid "parameter ACL \"%s\" does not exist" +msgstr "параметр ACL \"%s\" не існує" -#: catalog/pg_proc.c:132 parser/parse_func.c:2233 +#: catalog/pg_proc.c:130 parser/parse_func.c:2234 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -5812,37 +6142,37 @@ msgstr[1] "функції не можуть мати більше %d аргум msgstr[2] "функції не можуть мати більше %d аргументів" msgstr[3] "функції не можуть мати більше %d аргументів" -#: catalog/pg_proc.c:376 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "функція \"%s\" з аргументами таких типів вже існує" -#: catalog/pg_proc.c:388 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\" є функцією агрегату." -#: catalog/pg_proc.c:390 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\" є функцією." -#: catalog/pg_proc.c:392 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\" є процедурою." -#: catalog/pg_proc.c:394 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "\"%s\" є функцією вікна." -#: catalog/pg_proc.c:414 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "неможливо визначити вихідні параметри для процедури" -#: catalog/pg_proc.c:415 catalog/pg_proc.c:445 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "неможливо змінити тип повернення існуючої функції" @@ -5851,171 +6181,170 @@ msgstr "неможливо змінити тип повернення існую #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:421 catalog/pg_proc.c:448 catalog/pg_proc.c:493 -#: catalog/pg_proc.c:519 catalog/pg_proc.c:543 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 +#: catalog/pg_proc.c:517 catalog/pg_proc.c:541 #, c-format msgid "Use %s %s first." msgstr "Використайте %s %s спочатку." -#: catalog/pg_proc.c:446 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Параметри OUT визначають другий тип рядку." -#: catalog/pg_proc.c:490 +#: catalog/pg_proc.c:488 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "неможливо змінити ім'я вхідного параметру \"%s\"" -#: catalog/pg_proc.c:517 +#: catalog/pg_proc.c:515 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "неможливо прибрати параметр за замовчуванням з існуючої функції" -#: catalog/pg_proc.c:541 +#: catalog/pg_proc.c:539 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "неможливо змінити тип даних для існуючого значення параметру за замовчуванням" -#: catalog/pg_proc.c:752 +#: catalog/pg_proc.c:750 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "немає вбудованої функції \"%s\"" -#: catalog/pg_proc.c:845 +#: catalog/pg_proc.c:843 #, c-format msgid "SQL functions cannot return type %s" msgstr "Функції SQL не можуть повернути тип %s" -#: catalog/pg_proc.c:860 +#: catalog/pg_proc.c:858 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "функції SQL не можуть мати аргументи типу %s" -#: catalog/pg_proc.c:987 executor/functions.c:1466 +#: catalog/pg_proc.c:986 executor/functions.c:1468 #, c-format msgid "SQL function \"%s\"" msgstr "Функція SQL \"%s\"" -#: catalog/pg_publication.c:71 catalog/pg_publication.c:79 -#: catalog/pg_publication.c:87 catalog/pg_publication.c:93 +#: catalog/pg_publication.c:66 catalog/pg_publication.c:74 +#: catalog/pg_publication.c:82 catalog/pg_publication.c:88 #, c-format msgid "cannot add relation \"%s\" to publication" msgstr "не можна додати відношення \"%s\" до публікації" -#: catalog/pg_publication.c:81 +#: catalog/pg_publication.c:76 #, c-format msgid "This operation is not supported for system tables." msgstr "Ця операція не підтримується для системних таблиць." -#: catalog/pg_publication.c:89 +#: catalog/pg_publication.c:84 #, c-format msgid "This operation is not supported for temporary tables." msgstr "Ця операція не підтримується для тимчасових таблиць." -#: catalog/pg_publication.c:95 +#: catalog/pg_publication.c:90 #, c-format msgid "This operation is not supported for unlogged tables." msgstr "Ця операція не підтримується для таблиць без журналювання." -#: catalog/pg_publication.c:109 catalog/pg_publication.c:117 +#: catalog/pg_publication.c:104 catalog/pg_publication.c:112 #, c-format msgid "cannot add schema \"%s\" to publication" msgstr "не можна додати схему \"%s\" до публікації" -#: catalog/pg_publication.c:111 +#: catalog/pg_publication.c:106 #, c-format msgid "This operation is not supported for system schemas." msgstr "Ця операція не підтримується для системних схем." -#: catalog/pg_publication.c:119 +#: catalog/pg_publication.c:114 #, c-format msgid "Temporary schemas cannot be replicated." msgstr "Тимчасові схеми не можуть бути репліковані." -#: catalog/pg_publication.c:397 +#: catalog/pg_publication.c:392 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "відношення \"%s\" вже є членом публікації \"%s\"" -#: catalog/pg_publication.c:539 +#: catalog/pg_publication.c:534 #, c-format msgid "cannot use system column \"%s\" in publication column list" msgstr "не можна використати системний стовпець \"%s\" у списку стовпців публікації" -#: catalog/pg_publication.c:545 +#: catalog/pg_publication.c:540 #, c-format msgid "cannot use generated column \"%s\" in publication column list" msgstr "не можна використати згенерований стовпець \"%s\" у списку стовпців публікації" -#: catalog/pg_publication.c:551 +#: catalog/pg_publication.c:546 #, c-format msgid "duplicate column \"%s\" in publication column list" msgstr "дуплікат стовпця \"%s\" в списку стовпців публікації" -#: catalog/pg_publication.c:641 +#: catalog/pg_publication.c:636 #, c-format msgid "schema \"%s\" is already member of publication \"%s\"" msgstr "схема \"%s\" вже є членом публікації \"%s\"" -#: catalog/pg_shdepend.c:830 +#: catalog/pg_shdepend.c:875 #, c-format -msgid "" -"\n" +msgid "\n" "and objects in %d other database (see server log for list)" -msgid_plural "" -"\n" +msgid_plural "\n" "and objects in %d other databases (see server log for list)" -msgstr[0] "" -"\n" +msgstr[0] "\n" "і об'єкти в %d іншій базі даних (див. список в протоколі сервера)" -msgstr[1] "" -"\n" +msgstr[1] "\n" "і об'єкти в %d інших базах даних (див. список в протоколі сервера)" -msgstr[2] "" -"\n" +msgstr[2] "\n" "і об'єкти в %d інших базах даних (див. список в протоколі сервера)" -msgstr[3] "" -"\n" +msgstr[3] "\n" "і об'єкти в %d інших базах даних (див. список в протоколі сервера)" -#: catalog/pg_shdepend.c:1177 +#: catalog/pg_shdepend.c:1222 #, c-format msgid "role %u was concurrently dropped" msgstr "роль %u було видалено паралельним способом" -#: catalog/pg_shdepend.c:1189 +#: catalog/pg_shdepend.c:1234 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "табличний простір %u було видалено паралельним способом" -#: catalog/pg_shdepend.c:1203 +#: catalog/pg_shdepend.c:1248 #, c-format msgid "database %u was concurrently dropped" msgstr "базу даних %u було видалено паралельним способом" -#: catalog/pg_shdepend.c:1254 +#: catalog/pg_shdepend.c:1299 #, c-format msgid "owner of %s" msgstr "власник об'єкту %s" -#: catalog/pg_shdepend.c:1256 +#: catalog/pg_shdepend.c:1301 #, c-format msgid "privileges for %s" msgstr "права для %s" -#: catalog/pg_shdepend.c:1258 +#: catalog/pg_shdepend.c:1303 +#, c-format +msgid "initial privileges for %s" +msgstr "початкові права для %s" + +#: catalog/pg_shdepend.c:1305 #, c-format msgid "target of %s" msgstr "ціль %s" -#: catalog/pg_shdepend.c:1260 +#: catalog/pg_shdepend.c:1307 #, c-format msgid "tablespace for %s" msgstr "табличний простір для %s" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1268 +#: catalog/pg_shdepend.c:1315 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" @@ -6024,22 +6353,22 @@ msgstr[1] "%d об'єкти в %s" msgstr[2] "%d об'єктів у %s" msgstr[3] "%d об'єктів у %s" -#: catalog/pg_shdepend.c:1332 +#: 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:1498 +#: 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, тому що вони необхідні системі баз даних" -#: catalog/pg_subscription.c:424 +#: catalog/pg_subscription.c:438 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "не вдалося видалити зіставлення відношень для підписки \"%s\"" -#: catalog/pg_subscription.c:426 +#: catalog/pg_subscription.c:440 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "Синхронізація таблиць для відношення \"%s\" у процесі та знаходиться у стані \"%c\"." @@ -6047,227 +6376,227 @@ msgstr "Синхронізація таблиць для відношення \" #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:433 +#: catalog/pg_subscription.c:447 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Використайте %s, щоб активувати підписку, якщо вона ще не активована, або використайте %s, щоб видалити підписку." -#: catalog/pg_type.c:134 catalog/pg_type.c:474 +#: catalog/pg_type.c:133 catalog/pg_type.c:474 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "значення OID в pg_type не задано в режимі двійкового оновлення" -#: catalog/pg_type.c:254 +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "неприпустимий внутрішній розмір типу %d" -#: catalog/pg_type.c:270 catalog/pg_type.c:278 catalog/pg_type.c:286 -#: catalog/pg_type.c:295 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "вирівнювання \"%c\" недійсне для типу переданого за значенням розміром: %d" -#: catalog/pg_type.c:302 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "внутрішній розмір %d недійсний для типу, переданого за значенням" -#: catalog/pg_type.c:312 catalog/pg_type.c:318 +#: catalog/pg_type.c:311 catalog/pg_type.c:317 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "вирівнювання \"%c\" недійсне для типу змінної довжини" -#: catalog/pg_type.c:326 commands/typecmds.c:4146 +#: catalog/pg_type.c:325 commands/typecmds.c:4363 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "для типів фіксованого розміру застосовується лише режим зберігання PLAIN" -#: catalog/pg_type.c:955 +#: catalog/pg_type.c:978 #, c-format msgid "Failed while creating a multirange type for type \"%s\"." msgstr "Помилка під час створення багатодіапазонного типу для типу \"%s\"." -#: catalog/pg_type.c:956 +#: catalog/pg_type.c:979 #, c-format msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Ви можете вручну вказати назву багатодіапазонного типу за допомогою атрибуту \"multirange_type_name\"." -#: catalog/storage.c:505 storage/buffer/bufmgr.c:1145 +#: catalog/storage.c:508 storage/buffer/bufmgr.c:1540 #, c-format msgid "invalid page in block %u of relation %s" msgstr "неприпустима сторінка в блоці %u відношення %s" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:167 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "гіпотетичними можуть бути тільки впорядковані агрегати" -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:192 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "атрибут агрегату \"%s\" не розпізнано" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:202 #, c-format msgid "aggregate stype must be specified" msgstr "у визначенні агрегату необхідно вказати stype" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:206 #, c-format msgid "aggregate sfunc must be specified" msgstr "в визначенні агрегату потребується sfunc" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:218 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "в визначенні агрегату потребується msfunc, коли mstype визначений" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:222 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "в визначенні агрегату потребується minvfunc, коли mstype визначений" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:229 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "msfunc для агрегату не повинна визначатись без mstype" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:233 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "minvfunc для агрегату не повинна визначатись без mstype" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:237 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "mfinalfunc для агрегату не повинна визначатись без mstype" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:241 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "msspace для агрегату не повинна визначатись без mstype" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:245 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "minitcond для агрегату не повинна визначатись без mstype" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:274 #, c-format msgid "aggregate input type must be specified" msgstr "слід указати тип агрегату вводу" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:304 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "в визначенні агрегату з зазначенням вхідного типу не потрібен базовий тип" -#: commands/aggregatecmds.c:351 commands/aggregatecmds.c:392 +#: commands/aggregatecmds.c:347 commands/aggregatecmds.c:388 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "тип даних агрегату транзакції не може бути %s" -#: commands/aggregatecmds.c:363 +#: commands/aggregatecmds.c:359 #, c-format msgid "serialization functions may be specified only when the aggregate transition data type is %s" msgstr "функції серіалізації можуть визначатись, лише коли перехідний тип даних агрегату %s" -#: commands/aggregatecmds.c:373 +#: commands/aggregatecmds.c:369 #, c-format msgid "must specify both or neither of serialization and deserialization functions" msgstr "повинні визначатись обидві або жодна з серіалізуючих та десеріалізуючих функцій" -#: commands/aggregatecmds.c:438 commands/functioncmds.c:639 +#: commands/aggregatecmds.c:434 commands/functioncmds.c:634 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "параметр \"parallel\" має мати значення SAFE, RESTRICTED, або UNSAFE" -#: commands/aggregatecmds.c:494 +#: commands/aggregatecmds.c:490 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "параметр \"%s\" має мати значення READ_ONLY, SHAREABLE, або READ_WRITE" -#: commands/alter.c:86 commands/event_trigger.c:174 +#: commands/alter.c:82 commands/event_trigger.c:191 #, c-format msgid "event trigger \"%s\" already exists" msgstr "тригер подій \"%s\" вже існує" -#: commands/alter.c:89 commands/foreigncmds.c:593 +#: commands/alter.c:85 commands/foreigncmds.c:593 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "джерело сторонніх даних \"%s\" вже існує" -#: commands/alter.c:92 commands/foreigncmds.c:884 +#: commands/alter.c:88 commands/foreigncmds.c:884 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" вже існує" -#: commands/alter.c:95 commands/proclang.c:133 +#: commands/alter.c:91 commands/proclang.c:131 #, c-format msgid "language \"%s\" already exists" msgstr "мова \"%s\" вже існує" -#: commands/alter.c:98 commands/publicationcmds.c:771 +#: commands/alter.c:94 commands/publicationcmds.c:764 #, c-format msgid "publication \"%s\" already exists" msgstr "публікація \"%s\" вже існує" -#: commands/alter.c:101 commands/subscriptioncmds.c:657 +#: commands/alter.c:97 commands/subscriptioncmds.c:669 #, c-format msgid "subscription \"%s\" already exists" msgstr "підписка \"%s\" вже існує" -#: commands/alter.c:124 +#: commands/alter.c:120 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "перетворення \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:128 +#: commands/alter.c:124 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "об'єкт статистики \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:132 +#: commands/alter.c:128 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "парсер текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:136 +#: commands/alter.c:132 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "словник текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:140 +#: commands/alter.c:136 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "шаблон текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:144 +#: commands/alter.c:140 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "конфігурація текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:217 +#: commands/alter.c:213 #, c-format msgid "must be superuser to rename %s" msgstr "перейменувати %s може тільки суперкористувач" -#: commands/alter.c:259 commands/subscriptioncmds.c:636 -#: commands/subscriptioncmds.c:1116 commands/subscriptioncmds.c:1198 -#: commands/subscriptioncmds.c:1837 +#: commands/alter.c:255 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 тільки для суперкористувачів" -#: commands/alter.c:260 commands/subscriptioncmds.c:637 -#: commands/subscriptioncmds.c:1117 commands/subscriptioncmds.c:1199 -#: commands/subscriptioncmds.c:1838 +#: commands/alter.c:256 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=false можуть бути створені або змінені тільки суперкористувачем." -#: commands/alter.c:775 +#: commands/alter.c:734 #, c-format msgid "must be superuser to set schema of %s" msgstr "встановити схему об'єкту %s може тільки суперкористувач" @@ -6287,8 +6616,8 @@ msgstr "Тільки суперкористувач може створити м msgid "access method \"%s\" already exists" msgstr "метод доступу \"%s\" вже існує" -#: commands/amcmds.c:154 commands/indexcmds.c:216 commands/indexcmds.c:839 -#: commands/opclasscmds.c:375 commands/opclasscmds.c:833 +#: commands/amcmds.c:154 commands/indexcmds.c:222 commands/indexcmds.c:842 +#: commands/opclasscmds.c:374 commands/opclasscmds.c:832 #, c-format msgid "access method \"%s\" does not exist" msgstr "методу доступу \"%s\" не існує" @@ -6298,114 +6627,114 @@ msgstr "методу доступу \"%s\" не існує" msgid "handler function is not specified" msgstr "функція-обробник не вказана" -#: commands/amcmds.c:264 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:709 -#: parser/parse_clause.c:941 +#: commands/amcmds.c:264 commands/event_trigger.c:200 +#: commands/foreigncmds.c:489 commands/proclang.c:78 commands/trigger.c:702 +#: parser/parse_clause.c:943 #, c-format msgid "function %s must return type %s" msgstr "функція %s повинна повертати тип %s" -#: commands/analyze.c:228 +#: commands/analyze.c:217 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "пропуск об'єкту \"%s\" --- неможливо аналізувати цю сторонню таблицю" -#: commands/analyze.c:245 +#: commands/analyze.c:234 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "пропуск об'єкту \"%s\" --- неможливо аналізувати не-таблиці або спеціальні системні таблиці" -#: commands/analyze.c:325 +#: commands/analyze.c:314 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "аналізується дерево наслідування \"%s.%s\"" -#: commands/analyze.c:330 +#: commands/analyze.c:319 #, c-format msgid "analyzing \"%s.%s\"" msgstr "аналіз \"%s.%s\"" -#: commands/analyze.c:395 +#: commands/analyze.c:385 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "стовпець \"%s\" відносно \"%s\" з'являється більше одного разу" -#: commands/analyze.c:787 +#: commands/analyze.c:785 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "автоматичний аналіз таблиці \"%s.%s.%s\"\n" -#: commands/analyze.c:1334 +#: 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:1418 +#: 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:1516 +#: 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\" --- це дерево наслідування не містить аналізуючих дочірніх таблиць" -#: commands/async.c:646 +#: commands/async.c:612 #, c-format msgid "channel name cannot be empty" msgstr "ім'я каналу не може бути пустим" -#: commands/async.c:652 +#: commands/async.c:618 #, c-format msgid "channel name too long" msgstr "ім'я каналу задовге" -#: commands/async.c:657 +#: commands/async.c:623 #, c-format msgid "payload string too long" msgstr "рядок навантаження задовгий" -#: commands/async.c:876 +#: commands/async.c:842 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "виконати PREPARE для транзакції, яка виконала LISTEN, UNLISTEN або NOTIFY неможливо" -#: commands/async.c:980 +#: commands/async.c:946 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "занадто багато сповіщень у черзі NOTIFY" -#: commands/async.c:1602 +#: commands/async.c:1553 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "Черга NOTIFY заповнена на %.0f%%" -#: commands/async.c:1604 +#: commands/async.c:1555 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "Серверний процес з PID %d серед процесів з найдавнішими транзакціями." -#: commands/async.c:1607 +#: commands/async.c:1558 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "Черга NOTIFY не може бути спорожненою, поки цей процес не завершить поточну транзакцію." -#: commands/cluster.c:130 +#: commands/cluster.c:128 #, c-format msgid "unrecognized CLUSTER option \"%s\"" msgstr "нерозпізнаний параметр CLUSTER \"%s\"" -#: commands/cluster.c:160 commands/cluster.c:433 +#: commands/cluster.c:159 commands/cluster.c:433 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "не можна кластеризувати тимчасові таблиці з інших сеансів" -#: commands/cluster.c:178 +#: commands/cluster.c:177 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "немає попереднього кластеризованого індексу для таблиці \"%s\"" -#: commands/cluster.c:192 commands/tablecmds.c:14214 commands/tablecmds.c:16057 +#: commands/cluster.c:191 commands/tablecmds.c:14695 commands/tablecmds.c:16626 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "індекс \"%s\" для таблці \"%s\" не існує" @@ -6420,7 +6749,7 @@ msgstr "не можна кластеризувати спільний катал msgid "cannot vacuum temporary tables of other sessions" msgstr "не можна очищати тимчасові таблиці з інших сеансів" -#: commands/cluster.c:513 commands/tablecmds.c:16067 +#: commands/cluster.c:513 commands/tablecmds.c:16636 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" не є індексом для таблиці \"%s\"" @@ -6445,62 +6774,66 @@ msgstr "неможливо кластеризувати за невірним і msgid "cannot mark index clustered in partitioned table" msgstr "неможливо помітити індекс кластеризованим в секційній таблиці" -#: commands/cluster.c:950 +#: commands/cluster.c:956 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "кластеризація \"%s.%s\" з використанням сканування індексу \"%s\"" -#: commands/cluster.c:956 +#: commands/cluster.c:962 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "кластеризація \"%s.%s\"з використанням послідовного сканування та сортування" -#: commands/cluster.c:961 +#: commands/cluster.c:967 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "очищення \"%s.%s\"" -#: commands/cluster.c:988 +#: commands/cluster.c:994 #, c-format msgid "\"%s.%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "\"%s.%s\": знайдено версій рядків, що можуть бути видалені %.0f, що не можуть бути видалені %.0f, переглянуто сторінок %u" -#: commands/cluster.c:993 +#: commands/cluster.c:999 #, c-format -msgid "" -"%.0f dead row versions cannot be removed yet.\n" +msgid "%.0f dead row versions cannot be removed yet.\n" "%s." -msgstr "" -"%.0f \"мертві\" версії рядків досі не можуть бути видалені.\n" +msgstr "%.0f \"мертві\" версії рядків досі не можуть бути видалені.\n" "%s." -#: commands/collationcmds.c:112 +#: commands/cluster.c:1744 +#, c-format +msgid "permission denied to cluster \"%s\", skipping it" +msgstr "відмовлено в дозволі кластеру \"%s\", пропуск" + +#: commands/collationcmds.c:110 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "атрибут collation \"%s\" не розпізнаний" -#: commands/collationcmds.c:125 commands/collationcmds.c:131 -#: commands/define.c:389 commands/tablecmds.c:7884 -#: replication/pgoutput/pgoutput.c:309 replication/pgoutput/pgoutput.c:332 -#: replication/pgoutput/pgoutput.c:346 replication/pgoutput/pgoutput.c:356 -#: replication/pgoutput/pgoutput.c:366 replication/pgoutput/pgoutput.c:376 -#: replication/pgoutput/pgoutput.c:386 replication/walsender.c:996 -#: replication/walsender.c:1018 replication/walsender.c:1028 +#: commands/collationcmds.c:123 commands/collationcmds.c:129 +#: commands/define.c:388 commands/tablecmds.c:8106 +#: 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 +#: replication/walsender.c:1187 replication/walsender.c:1426 #, c-format msgid "conflicting or redundant options" msgstr "конфліктуючі або надлишкові параметри" -#: commands/collationcmds.c:126 +#: commands/collationcmds.c:124 #, c-format msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." msgstr "LOCALE не може вказуватись разом з LC_COLLATE або LC_CTYPE." -#: commands/collationcmds.c:132 +#: commands/collationcmds.c:130 #, c-format msgid "FROM cannot be specified together with any other options." msgstr "FROM не можна вказувати разом з будь-якими іншими параметрами." -#: commands/collationcmds.c:191 +#: commands/collationcmds.c:189 #, c-format msgid "collation \"default\" cannot be copied" msgstr "сортування \"за замовчуванням\" не може бути скопійовано" @@ -6510,100 +6843,94 @@ msgstr "сортування \"за замовчуванням\" не може msgid "unrecognized collation provider: %s" msgstr "нерозпізнаний постачальник правил сортування: %s" -#: commands/collationcmds.c:253 commands/collationcmds.c:259 -#: commands/collationcmds.c:267 +#: commands/collationcmds.c:253 commands/collationcmds.c:264 +#: commands/collationcmds.c:270 commands/collationcmds.c:278 #, c-format msgid "parameter \"%s\" must be specified" msgstr "необхідно вказати параметр \"%s\"" -#: commands/collationcmds.c:282 commands/dbcommands.c:1091 +#: commands/collationcmds.c:293 commands/dbcommands.c:1134 #, c-format msgid "using standard form \"%s\" for ICU locale \"%s\"" msgstr "використання стандартної форми \"%s\" для мови ICU \"%s\"" -#: commands/collationcmds.c:301 +#: commands/collationcmds.c:312 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "недетерміновані правила сортування не підтримуються цим провайдером" -#: commands/collationcmds.c:306 commands/dbcommands.c:1110 +#: commands/collationcmds.c:317 commands/dbcommands.c:1087 #, c-format msgid "ICU rules cannot be specified unless locale provider is ICU" msgstr "Правила ICU не можна вказати, якщо постачальник локалі не ICU" -#: commands/collationcmds.c:325 +#: commands/collationcmds.c:340 #, c-format msgid "current database's encoding is not supported with this provider" msgstr "кодування поточної бази даних не підтримується цим провайдером" -#: commands/collationcmds.c:385 +#: commands/collationcmds.c:409 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "правило сортування \"%s\" для кодування \"%s\" вже існує в схемі \"%s\"" -#: commands/collationcmds.c:396 +#: commands/collationcmds.c:420 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "правило сортування \"%s\" вже існує в схемі \"%s\"" -#: commands/collationcmds.c:421 +#: commands/collationcmds.c:445 #, c-format msgid "cannot refresh version of default collation" msgstr "оновити версію правила сортування за замовчуванням не можна" #. translator: %s is an SQL command #. translator: %s is an SQL ALTER command -#: commands/collationcmds.c:423 commands/subscriptioncmds.c:1331 -#: commands/tablecmds.c:7709 commands/tablecmds.c:7719 -#: commands/tablecmds.c:13916 commands/tablecmds.c:17196 -#: commands/tablecmds.c:17217 commands/typecmds.c:3637 commands/typecmds.c:3720 -#: commands/typecmds.c:4013 +#: commands/collationcmds.c:447 commands/subscriptioncmds.c:1376 +#: commands/tablecmds.c:7882 commands/tablecmds.c:7892 +#: commands/tablecmds.c:7894 commands/tablecmds.c:14397 +#: commands/tablecmds.c:17774 commands/tablecmds.c:17795 +#: commands/typecmds.c:3787 commands/typecmds.c:3872 commands/typecmds.c:4226 #, c-format msgid "Use %s instead." msgstr "Використайте %s замість цього." -#: commands/collationcmds.c:451 commands/dbcommands.c:2488 +#: commands/collationcmds.c:480 commands/dbcommands.c:2567 #, c-format msgid "changing version from %s to %s" msgstr "зміна версії з %s на %s" -#: commands/collationcmds.c:466 commands/dbcommands.c:2501 +#: commands/collationcmds.c:495 commands/dbcommands.c:2580 #, c-format msgid "version has not changed" msgstr "версію не змінено" -#: commands/collationcmds.c:499 commands/dbcommands.c:2667 +#: commands/collationcmds.c:528 commands/dbcommands.c:2746 #, c-format msgid "database with OID %u does not exist" msgstr "база даних з OID %u не існує" -#: commands/collationcmds.c:520 +#: commands/collationcmds.c:554 #, c-format msgid "collation with OID %u does not exist" msgstr "порядку сортування %u з OID не існує" -#: commands/collationcmds.c:808 +#: commands/collationcmds.c:848 #, c-format msgid "must be superuser to import system collations" msgstr "імпортувати систмені правила сортування може тільки суперкористувач" -#: commands/collationcmds.c:836 commands/copyfrom.c:1671 commands/copyto.c:656 -#: libpq/be-secure-common.c:59 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "не вдалося виконати команду \"%s\": %m" - -#: commands/collationcmds.c:928 commands/collationcmds.c:1013 +#: commands/collationcmds.c:968 commands/collationcmds.c:1053 #, c-format msgid "no usable system locales were found" msgstr "придатні системні локалі не знайдені" -#: commands/comment.c:61 commands/dbcommands.c:1612 commands/dbcommands.c:1824 -#: commands/dbcommands.c:1934 commands/dbcommands.c:2132 -#: commands/dbcommands.c:2370 commands/dbcommands.c:2461 -#: commands/dbcommands.c:2571 commands/dbcommands.c:3071 -#: utils/init/postinit.c:1021 utils/init/postinit.c:1085 -#: utils/init/postinit.c:1157 +#: commands/comment.c:61 commands/dbcommands.c:1665 commands/dbcommands.c:1892 +#: commands/dbcommands.c:2002 commands/dbcommands.c:2200 +#: commands/dbcommands.c:2438 commands/dbcommands.c:2529 +#: commands/dbcommands.c:2650 commands/dbcommands.c:3158 +#: utils/init/postinit.c:1033 utils/init/postinit.c:1097 +#: utils/init/postinit.c:1170 #, c-format msgid "database \"%s\" does not exist" msgstr "бази даних \"%s\" не існує" @@ -6613,309 +6940,264 @@ msgstr "бази даних \"%s\" не існує" msgid "cannot set comment on relation \"%s\"" msgstr "встановити коментар для відношення \"%s\" не можна" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:2028 +#: commands/constraint.c:61 utils/adt/ri_triggers.c:2019 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "функція \"%s\" не була викликана менеджером тригерів" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:2037 +#: commands/constraint.c:68 utils/adt/ri_triggers.c:2028 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "функція \"%s\" повинна запускатися в AFTER ROW" -#: commands/constraint.c:84 +#: commands/constraint.c:82 #, c-format msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "функція \"%s\" повинна запускатися для INSERT або UPDATE" -#: commands/conversioncmds.c:69 +#: commands/conversioncmds.c:62 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "вихідного кодування \"%s\" не існує" -#: commands/conversioncmds.c:76 +#: commands/conversioncmds.c:69 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "цільового кодування \"%s\" не існує" -#: commands/conversioncmds.c:89 +#: commands/conversioncmds.c:82 #, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" msgstr "перетворення кодування в або з \"SQL_ASCII\" не підтримується" -#: commands/conversioncmds.c:102 +#: commands/conversioncmds.c:95 #, c-format msgid "encoding conversion function %s must return type %s" msgstr "функція перетворення кодування %s повинна повертати тип %s" -#: commands/conversioncmds.c:132 +#: commands/conversioncmds.c:125 #, c-format msgid "encoding conversion function %s returned incorrect result for empty input" msgstr "функція перетворення кодування %s повернула неправильний результат для порожнього вводу" -#: commands/copy.c:86 +#: commands/copy.c:84 #, c-format msgid "permission denied to COPY to or from an external program" msgstr "немає дозволу для COPY в або з зовнішньої програми" -#: commands/copy.c:87 +#: commands/copy.c:85 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY to or from an external program." msgstr "Тільки ролі з правами \"%s\" можуть виконувати COPY з зовнішньою програмою." -#: commands/copy.c:89 commands/copy.c:100 commands/copy.c:109 +#: commands/copy.c:87 commands/copy.c:98 commands/copy.c:107 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Будь-хто може використати COPY to stdout або from stdin, а також команду psql \\copy." -#: commands/copy.c:97 +#: commands/copy.c:95 #, c-format msgid "permission denied to COPY from a file" msgstr "немає дозволу для COPY з файлу" -#: commands/copy.c:98 +#: commands/copy.c:96 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY from a file." msgstr "Тільки ролі з правами \"%s\" можуть виконувати COPY з файлу." -#: commands/copy.c:106 +#: commands/copy.c:104 #, c-format msgid "permission denied to COPY to a file" msgstr "немає дозволу для COPY в файл" -#: commands/copy.c:107 +#: commands/copy.c:105 #, c-format msgid "Only roles with privileges of the \"%s\" role may COPY to a file." msgstr "Тільки ролі з правами \"%s\" можуть виконувати COPY в файл." -#: commands/copy.c:195 +#: commands/copy.c:193 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM не підтримується із захистом на рівні рядків" -#: commands/copy.c:196 +#: commands/copy.c:194 #, c-format msgid "Use INSERT statements instead." msgstr "Використайте оператори INSERT замість цього." -#: commands/copy.c:290 -#, c-format -msgid "MERGE not supported in COPY" -msgstr "COPY не підтримує MERGE" - -#: commands/copy.c:383 +#: commands/copy.c:375 #, c-format msgid "cannot use \"%s\" with HEADER in COPY TO" msgstr "використовувати \"%s\" з HEADER в COPY TO не можна" -#: commands/copy.c:392 +#: commands/copy.c:384 #, c-format msgid "%s requires a Boolean value or \"match\"" msgstr "%s потребує Boolean або \"відповідність\"" -#: commands/copy.c:451 +#. 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:796 +#: commands/copy.c:811 commands/copy.c:837 commands/copy.c:847 +#, 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:416 commands/copy.c:441 +#, c-format +msgid "COPY %s \"%s\" not recognized" +msgstr "COPY %s \"%s\" не розпізнано" + +#: commands/copy.c:502 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "Формат \"%s\" для COPY не розпізнано" -#: commands/copy.c:509 commands/copy.c:522 commands/copy.c:535 -#: commands/copy.c:554 +#: 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:566 +#: commands/copy.c:621 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом функції \"%s\" повинне бути припустиме ім'я коду" -#: commands/copy.c:573 commands/dbcommands.c:859 commands/dbcommands.c:2318 +#: commands/copy.c:642 commands/dbcommands.c:866 commands/dbcommands.c:2386 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не розпізнано" -#: commands/copy.c:585 -#, c-format -msgid "cannot specify DELIMITER in BINARY mode" -msgstr "неможливо визначити DELIMITER в режимі BINARY" - -#: commands/copy.c:590 +#. 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 NULL in BINARY mode" -msgstr "неможливо визначити NULL в режимі BINARY" +msgid "cannot specify %s in BINARY mode" +msgstr "не можна вказати %s в режимі BINARY" -#: commands/copy.c:595 +#: commands/copy.c:670 #, c-format -msgid "cannot specify DEFAULT in BINARY mode" -msgstr "в режимі BINARY не можна визначити DEFAULT" +msgid "only ON_ERROR STOP is allowed in BINARY mode" +msgstr "в режимі BINARY допускається лише ON_ERROR STOP" -#: commands/copy.c:617 +#: commands/copy.c:692 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "роздільник для COPY повинен бути однобайтовим символом" -#: commands/copy.c:624 +#: commands/copy.c:699 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "Роздільник для COPY не може бути символом нового рядка або повернення каретки" -#: commands/copy.c:630 +#: commands/copy.c:705 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "Подання NULL для COPY не може включати символ нового рядка або повернення каретки" -#: commands/copy.c:640 +#: commands/copy.c:715 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "Подання для COPY за замовчуванням не може включати символ нового рядка або повернення каретки" -#: commands/copy.c:658 +#: commands/copy.c:733 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "роздільник COPY не може бути \"%s\"" -#: commands/copy.c:664 +#. 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:790 commands/copy.c:804 #, c-format -msgid "cannot specify HEADER in BINARY mode" -msgstr "не можна вказати HEADER у режимі BINARY" +msgid "COPY %s requires CSV mode" +msgstr "Для COPY %s потрібен режим CSV" -#: commands/copy.c:670 -#, c-format -msgid "COPY quote available only in CSV mode" -msgstr "лапки для COPY доустпні тільки в режимі CSV" - -#: commands/copy.c:675 +#: commands/copy.c:752 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "лапки для COPY повинні бути однобайтовим символом" -#: commands/copy.c:680 +#: commands/copy.c:757 #, c-format msgid "COPY delimiter and quote must be different" msgstr "роздільник і лапки для COPY повинні бути різними" -#: commands/copy.c:686 -#, c-format -msgid "COPY escape available only in CSV mode" -msgstr "вихід для COPY доступний тільки в режимі CSV" - -#: commands/copy.c:691 +#: commands/copy.c:769 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "вихід для COPY повинен бути однобайтовим символом" -#: commands/copy.c:697 -#, c-format -msgid "COPY force quote available only in CSV mode" -msgstr "Параметр force quote для COPY можна використати тільки в режимі CSV" - -#: commands/copy.c:701 -#, c-format -msgid "COPY force quote only available using COPY TO" -msgstr "Параметр force quote для COPY можна використати тільки з COPY TO" - -#: commands/copy.c:707 -#, c-format -msgid "COPY force not null available only in CSV mode" -msgstr "Параметр force not null для COPY можна використати тільки в режимі CSV" - -#: commands/copy.c:711 -#, c-format -msgid "COPY force not null only available using COPY FROM" -msgstr "Параметр force not null для COPY можна використати тільки з COPY FROM" - -#: commands/copy.c:717 -#, c-format -msgid "COPY force null available only in CSV mode" -msgstr "Параметр force null для COPY можна використати тільки в режимі CSV" - -#: commands/copy.c:722 -#, c-format -msgid "COPY force null only available using COPY FROM" -msgstr "Параметр force null only для COPY можна використати тільки з COPY FROM" - -#: commands/copy.c:728 -#, c-format -msgid "COPY delimiter must not appear in the NULL specification" -msgstr "роздільник COPY не повинен з'являтися у специфікації NULL" - -#: commands/copy.c:735 -#, c-format -msgid "CSV quote character must not appear in the NULL specification" -msgstr "лапки CSV не повинні з'являтися у специфікації NULL" - -#: commands/copy.c:742 -#, c-format -msgid "COPY DEFAULT only available using COPY FROM" -msgstr "COPY DEFAULT тільки для COPY FROM" - -#: commands/copy.c:748 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:819 commands/copy.c:855 #, c-format -msgid "COPY delimiter must not appear in the DEFAULT specification" -msgstr "роздільник COPY не повинен з'являтися у специфікації DEFAULT" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "символ розділювача для COPY не повинен з'являтися в специфікації %s" -#: commands/copy.c:755 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:828 commands/copy.c:864 #, c-format -msgid "CSV quote character must not appear in the DEFAULT specification" -msgstr "лапки CSV не повинні з'являтися у специфікації DEFAULT" +msgid "CSV quote character must not appear in the %s specification" +msgstr "лапки CSV не повинні з'являтися у специфікації %s" -#: commands/copy.c:763 +#: commands/copy.c:873 #, c-format msgid "NULL specification and DEFAULT specification cannot be the same" msgstr "Специфікація NULL і специфікація DEFAULT не може співпадати" -#: commands/copy.c:825 +#: commands/copy.c:935 #, c-format msgid "column \"%s\" is a generated column" msgstr "стовпець \"%s\" є згенерованим стовпцем" -#: commands/copy.c:827 +#: commands/copy.c:937 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Згенеровані стовпці не можна використовувати в COPY." -#: commands/copy.c:842 commands/indexcmds.c:1886 commands/statscmds.c:242 -#: commands/tablecmds.c:2405 commands/tablecmds.c:3127 -#: commands/tablecmds.c:3626 parser/parse_relation.c:3689 -#: parser/parse_relation.c:3699 parser/parse_relation.c:3717 -#: parser/parse_relation.c:3724 parser/parse_relation.c:3738 -#: utils/adt/tsvector_op.c:2855 +#: commands/copy.c:952 commands/indexcmds.c:1917 commands/statscmds.c:239 +#: commands/tablecmds.c:2509 commands/tablecmds.c:2980 +#: commands/tablecmds.c:3788 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:849 commands/tablecmds.c:2431 commands/trigger.c:958 -#: parser/parse_target.c:1070 parser/parse_target.c:1081 +#: commands/copy.c:959 commands/tablecmds.c:2535 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\" вказано більше чим один раз" -#: commands/copyfrom.c:122 +#: commands/copyfrom.c:118 #, c-format msgid "COPY %s" msgstr "COPY %s" -#: commands/copyfrom.c:130 +#: commands/copyfrom.c:126 #, c-format msgid "COPY %s, line %llu, column %s" msgstr "COPY %s, рядок %llu, стовпець %s" -#: commands/copyfrom.c:135 commands/copyfrom.c:181 +#: commands/copyfrom.c:131 commands/copyfrom.c:177 #, c-format msgid "COPY %s, line %llu" msgstr "COPY %s, рядок %llu" -#: commands/copyfrom.c:147 +#: commands/copyfrom.c:143 #, c-format msgid "COPY %s, line %llu, column %s: \"%s\"" msgstr "COPY %s, рядок %llu, стовпець %s: \"%s\"" -#: commands/copyfrom.c:157 +#: commands/copyfrom.c:153 #, c-format msgid "COPY %s, line %llu, column %s: null input" msgstr "COPY %s, рядок %llu, стовпець %s: null введення" -#: commands/copyfrom.c:174 +#: commands/copyfrom.c:170 #, c-format msgid "COPY %s, line %llu: \"%s\"" msgstr "COPY %s, рядок %llu: \"%s\"" @@ -6960,37 +7242,43 @@ msgstr "виконати COPY FREEZE через попередню активн msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "не можна виконати COPY FREEZE, тому, що таблиця не була створена або скорочена в поточній підтранзакції" -#: commands/copyfrom.c:1414 +#: commands/copyfrom.c:1313 #, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "Стовпець FORCE_NOT_NULL \"%s\" не фігурує в COPY" +msgid "%llu row was skipped due to data type incompatibility" +msgid_plural "%llu rows were skipped due to data type incompatibility" +msgstr[0] "Рядок %llu пропущено через несумісність типів даних" +msgstr[1] "Рядки %llu пропущено через несумісність типів даних" +msgstr[2] "Рядки %llu пропущено через несумісність типів даних" +msgstr[3] "Рядки %llu пропущено через несумісність типів даних" -#: commands/copyfrom.c:1437 +#. 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:597 #, 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:1490 utils/mb/mbutils.c:386 +#: 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:1690 +#: 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 FROM наказує серверному процесу PostgreSQL прочитати дані з файлу. Можливо, вам потрібна клієнтська команда, наприклад \\copy в psql." -#: commands/copyfrom.c:1703 commands/copyto.c:708 +#: commands/copyfrom.c:1755 commands/copyto.c:702 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" - каталог" -#: commands/copyfrom.c:1771 commands/copyto.c:306 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:1786 commands/copyto.c:311 +#: commands/copyfrom.c:1838 commands/copyto.c:304 #, c-format msgid "program \"%s\" failed" msgstr "збій програми \"%s\"" @@ -7031,17 +7319,17 @@ msgid "could not read from COPY file: %m" msgstr "не вдалося прочитати файл COPY: %m" #: commands/copyfromparse.c:278 commands/copyfromparse.c:303 -#: tcop/postgres.c:377 +#: 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 "неочікуваний обрив з'єднання з клієнтом при відкритій транзакції" -#: commands/copyfromparse.c:294 +#: commands/copyfromparse.c:294 replication/walsender.c:772 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "неочікуваний тип повідомлення 0x%02X під час COPY з stdin" -#: commands/copyfromparse.c:317 +#: commands/copyfromparse.c:317 replication/walsender.c:803 #, c-format msgid "COPY from stdin failed: %s" msgstr "помилка при stdin COPY: %s" @@ -7061,8 +7349,8 @@ msgstr "невідповідність назви стовпця в полі з msgid "column name mismatch in header line field %d: got \"%s\", expected \"%s\"" msgstr "невідповідність назви стовпця в полі заголовку %d: отримано \"%s\", очікувалось \"%s\"" -#: commands/copyfromparse.c:892 commands/copyfromparse.c:1512 -#: commands/copyfromparse.c:1768 +#: commands/copyfromparse.c:892 commands/copyfromparse.c:1554 +#: commands/copyfromparse.c:1810 #, c-format msgid "extra data after last expected column" msgstr "зайві дані після вмісту останнього стовпця" @@ -7072,465 +7360,481 @@ msgstr "зайві дані після вмісту останнього сто msgid "missing data for column \"%s\"" msgstr "відсутні дані для стовпця \"%s\"" -#: commands/copyfromparse.c:999 +#: commands/copyfromparse.c:990 +#, c-format +msgid "skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"" +msgstr "пропуск рядка через несумісність типів даних в рядку %llu для стовпця \"%s\": \"%s\"" + +#: commands/copyfromparse.c:998 +#, c-format +msgid "skipping row due to data type incompatibility at line %llu for column \"%s\": null input" +msgstr "пропуск рядка через несумісність типів даних в рядку %llu для стовпця \"%s\": значення null" + +#: commands/copyfromparse.c:1044 #, c-format msgid "received copy data after EOF marker" msgstr "після маркера кінця файлу продовжуються дані COPY" -#: commands/copyfromparse.c:1006 +#: commands/copyfromparse.c:1051 #, c-format msgid "row field count is %d, expected %d" msgstr "кількість полів у рядку: %d, очікувалось: %d" -#: commands/copyfromparse.c:1294 commands/copyfromparse.c:1311 +#: commands/copyfromparse.c:1336 commands/copyfromparse.c:1353 #, c-format msgid "literal carriage return found in data" msgstr "в даних виявлено явне повернення каретки" -#: commands/copyfromparse.c:1295 commands/copyfromparse.c:1312 +#: commands/copyfromparse.c:1337 commands/copyfromparse.c:1354 #, c-format msgid "unquoted carriage return found in data" msgstr "в даних виявлено повернення каретки без лапок" -#: commands/copyfromparse.c:1297 commands/copyfromparse.c:1314 +#: commands/copyfromparse.c:1339 commands/copyfromparse.c:1356 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Використайте \"\\r\", щоб позначити повернення каретки." -#: commands/copyfromparse.c:1298 commands/copyfromparse.c:1315 +#: commands/copyfromparse.c:1340 commands/copyfromparse.c:1357 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Використайте CSV в лапках, щоб позначити повернення каретки." -#: commands/copyfromparse.c:1327 +#: commands/copyfromparse.c:1369 #, c-format msgid "literal newline found in data" msgstr "в даних знайдено явний новий рядок" -#: commands/copyfromparse.c:1328 +#: commands/copyfromparse.c:1370 #, c-format msgid "unquoted newline found in data" msgstr "в даних знайдено новий рядок без лапок" -#: commands/copyfromparse.c:1330 +#: commands/copyfromparse.c:1372 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Використайте \"\\n\", щоб представити новий рядок." -#: commands/copyfromparse.c:1331 +#: commands/copyfromparse.c:1373 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Використайте CSV в лапках, щоб позначити новий рядок." -#: commands/copyfromparse.c:1377 commands/copyfromparse.c:1413 +#: commands/copyfromparse.c:1419 commands/copyfromparse.c:1455 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "маркер \"кінець копії\" не відповідає попередньому стилю нового рядка" -#: commands/copyfromparse.c:1386 commands/copyfromparse.c:1402 +#: commands/copyfromparse.c:1428 commands/copyfromparse.c:1444 #, c-format msgid "end-of-copy marker corrupt" msgstr "маркер \"кінець копії\" зіпсований" -#: commands/copyfromparse.c:1704 commands/copyfromparse.c:1919 +#: commands/copyfromparse.c:1746 commands/copyfromparse.c:1961 #, c-format msgid "unexpected default marker in COPY data" msgstr "неочікуваний маркер за замовчуванням в даних COPY" -#: commands/copyfromparse.c:1705 commands/copyfromparse.c:1920 +#: commands/copyfromparse.c:1747 commands/copyfromparse.c:1962 #, c-format msgid "Column \"%s\" has no default value." msgstr "Колонка \"%s\" не має значення за замовчуванням." -#: commands/copyfromparse.c:1852 +#: commands/copyfromparse.c:1894 #, c-format msgid "unterminated CSV quoted field" msgstr "незакінчене поле в лапках CSV" -#: commands/copyfromparse.c:1954 commands/copyfromparse.c:1973 +#: commands/copyfromparse.c:1996 commands/copyfromparse.c:2015 #, c-format msgid "unexpected EOF in COPY data" msgstr "неочікуваний кінец файлу в даних COPY" -#: commands/copyfromparse.c:1963 +#: commands/copyfromparse.c:2005 #, c-format msgid "invalid field size" msgstr "невірний розмір поля" -#: commands/copyfromparse.c:1986 +#: commands/copyfromparse.c:2028 #, c-format msgid "incorrect binary data format" msgstr "невірний двійковий формат даних" -#: commands/copyto.c:236 +#: commands/copyto.c:229 #, c-format msgid "could not write to COPY program: %m" msgstr "не вдалося записати в канал програми COPY: %m" -#: commands/copyto.c:241 +#: commands/copyto.c:234 #, c-format msgid "could not write to COPY file: %m" msgstr "не можливо записати в файл COPY: %m" -#: commands/copyto.c:386 +#: commands/copyto.c:379 #, c-format msgid "cannot copy from view \"%s\"" msgstr "неможливо скопіювати з подання \"%s\"" -#: commands/copyto.c:388 commands/copyto.c:394 commands/copyto.c:400 -#: commands/copyto.c:411 +#: commands/copyto.c:381 commands/copyto.c:387 commands/copyto.c:393 +#: commands/copyto.c:404 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Спробуйте варіацію COPY (SELECT ...) TO." -#: commands/copyto.c:392 +#: commands/copyto.c:385 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "неможливо скопіювати з матеріалізованого подання \"%s\"" -#: commands/copyto.c:398 +#: commands/copyto.c:391 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "неможливо скопіювати зі сторонньої таблиці \"%s\"" -#: commands/copyto.c:404 +#: commands/copyto.c:397 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "не вдалося скопіювати з послідовності \"%s\"" -#: commands/copyto.c:409 +#: commands/copyto.c:402 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "неможливо скопіювати з секційної таблиці \"%s\"" -#: commands/copyto.c:415 +#: commands/copyto.c:408 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "не можна копіювати з відношення \"%s\", котре не є таблицею" -#: commands/copyto.c:467 +#: commands/copyto.c:460 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "правила DO INSTEAD NOTHING не підтримуються для COPY" -#: commands/copyto.c:481 +#: commands/copyto.c:474 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "умовні правила DO INSTEAD не підтримуються для COPY" -#: commands/copyto.c:485 +#: commands/copyto.c:478 #, c-format msgid "DO ALSO rules are not supported for the COPY" msgstr "правила DO ALSO не підтримуються для COPY" -#: commands/copyto.c:490 +#: commands/copyto.c:483 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "складові правила DO INSTEAD не підтримуються з COPY" -#: commands/copyto.c:500 +#: commands/copyto.c:493 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) не підтримується" -#: commands/copyto.c:517 +#: commands/copyto.c:511 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "В запиті COPY повинно бути речення RETURNING" -#: commands/copyto.c:546 +#: commands/copyto.c:540 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "відношення, згадане в операторі COPY, змінилось" -#: commands/copyto.c:605 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "Стовпець FORCE_QUOTE \"%s\" не фігурує в COPY" - -#: commands/copyto.c:673 +#: commands/copyto.c:667 #, c-format msgid "relative path not allowed for COPY to file" msgstr "при виконанні COPY в файл не можна вказувати відносний шлях" -#: commands/copyto.c:692 +#: commands/copyto.c:686 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не вдалося відкрити файл \"%s\" для запису: %m" -#: commands/copyto.c:695 +#: commands/copyto.c:689 #, c-format msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY TO наказує серверному процесу PostgreSQL записати дані до файлу. Можливо, вам потрібна клієнтська команда, наприклад \\copy в psql." -#: commands/createas.c:215 commands/createas.c:523 +#: commands/createas.c:210 commands/createas.c:516 #, c-format msgid "too many column names were specified" msgstr "вказано забагато імен стовпців" -#: commands/createas.c:546 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "політики для цієї команди все ще не реалізовані" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:829 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION більше не підтримується" -#: commands/dbcommands.c:823 +#: commands/dbcommands.c:830 #, c-format msgid "Consider using tablespaces instead." msgstr "Розгляньте можливість використання табличних просторів." -#: commands/dbcommands.c:848 +#: commands/dbcommands.c:855 #, c-format msgid "OIDs less than %u are reserved for system objects" msgstr "OID котрі менше ніж %u, зарезервовані для системних об'єктів" -#: commands/dbcommands.c:879 utils/adt/ascii.c:146 +#: commands/dbcommands.c:886 utils/adt/ascii.c:146 #, c-format msgid "%d is not a valid encoding code" msgstr "%d не є вірним кодом кодування" -#: commands/dbcommands.c:890 utils/adt/ascii.c:128 +#: commands/dbcommands.c:897 utils/adt/ascii.c:128 #, c-format msgid "%s is not a valid encoding name" msgstr "%s не є вірним ім'ям кодування" -#: commands/dbcommands.c:919 +#: commands/dbcommands.c:931 #, c-format msgid "unrecognized locale provider: %s" msgstr "нерозпізнаний постачальник локалів: %s" -#: commands/dbcommands.c:932 commands/dbcommands.c:2351 commands/user.c:300 -#: commands/user.c:740 +#: commands/dbcommands.c:944 commands/dbcommands.c:2419 commands/user.c:299 +#: commands/user.c:739 #, c-format msgid "invalid connection limit: %d" msgstr "недійсний ліміт з'єднання: %d" -#: commands/dbcommands.c:953 +#: commands/dbcommands.c:965 #, c-format msgid "permission denied to create database" msgstr "немає дозволу для створення бази даних" -#: commands/dbcommands.c:977 +#: commands/dbcommands.c:989 #, c-format msgid "template database \"%s\" does not exist" msgstr "шаблону бази даних \"%s\" не існує" -#: commands/dbcommands.c:987 +#: commands/dbcommands.c:999 #, c-format msgid "cannot use invalid database \"%s\" as template" msgstr "не можна використовувати невірну базу даних \"%s\" в якості шаблону" -#: commands/dbcommands.c:988 commands/dbcommands.c:2380 -#: utils/init/postinit.c:1100 +#: commands/dbcommands.c:1000 commands/dbcommands.c:2448 +#: utils/init/postinit.c:1112 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "Використайте DROP DATABASE для видалення невірних баз даних." -#: commands/dbcommands.c:999 +#: commands/dbcommands.c:1011 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "немає дозволу для копіювання бази даних \"%s\"" -#: commands/dbcommands.c:1016 +#: commands/dbcommands.c:1028 #, c-format msgid "invalid create database strategy \"%s\"" msgstr "неприпустима стратегія створення бази даних \"%s\"" -#: commands/dbcommands.c:1017 +#: commands/dbcommands.c:1029 #, c-format -msgid "Valid strategies are \"wal_log\", and \"file_copy\"." -msgstr "Припустимі стратегії: \"wal_log\" і \"file_copy\"." +msgid "Valid strategies are \"wal_log\" and \"file_copy\"." +msgstr "Припустимі стратегії - це \"wal_log\" і \"file_copy\"." -#: commands/dbcommands.c:1043 +#: commands/dbcommands.c:1050 #, c-format msgid "invalid server encoding %d" msgstr "недійсний сервер кодування %d" -#: commands/dbcommands.c:1049 +#: commands/dbcommands.c:1056 #, c-format msgid "invalid LC_COLLATE locale name: \"%s\"" msgstr "неприпустиме ім'я локалі LC_COLLATE: \"%s\"" -#: commands/dbcommands.c:1050 commands/dbcommands.c:1056 +#: commands/dbcommands.c:1057 commands/dbcommands.c:1063 #, c-format msgid "If the locale name is specific to ICU, use ICU_LOCALE." msgstr "Якщо ім'я локалі характерне для ICU, використовуйте ICU_LOCALE." -#: commands/dbcommands.c:1055 +#: commands/dbcommands.c:1062 #, c-format msgid "invalid LC_CTYPE locale name: \"%s\"" msgstr "неприпустиме ім'я локалі LC_CTYPE: \"%s\"" -#: commands/dbcommands.c:1066 +#: commands/dbcommands.c:1074 +#, c-format +msgid "BUILTIN_LOCALE cannot be specified unless locale provider is builtin" +msgstr "BUILTIN_LOCALE не може бути вказано, якщо постачальник локалі не вбудований" + +#: commands/dbcommands.c:1082 +#, c-format +msgid "ICU locale cannot be specified unless locale provider is ICU" +msgstr "ICU локаль не може бути визначена, якщо постачальник локалі не ICU" + +#: commands/dbcommands.c:1100 +#, c-format +msgid "LOCALE or BUILTIN_LOCALE must be specified" +msgstr "Необхідно вказати LOCALE або BUILTIN_LOCALE" + +#: commands/dbcommands.c:1109 #, c-format msgid "encoding \"%s\" is not supported with ICU provider" msgstr "кодування \"%s\" не підтримується провайдером ICU" -#: commands/dbcommands.c:1076 +#: commands/dbcommands.c:1119 #, c-format msgid "LOCALE or ICU_LOCALE must be specified" msgstr "Необхідно вказати LOCALE або ICU_LOCALE" -#: commands/dbcommands.c:1105 -#, c-format -msgid "ICU locale cannot be specified unless locale provider is ICU" -msgstr "ICU локаль не може бути визначена, якщо постачальник локалі не ICU" - -#: commands/dbcommands.c:1128 +#: commands/dbcommands.c:1163 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "нове кодування (%s) несумісне з кодуванням шаблона бази даних (%s)" -#: commands/dbcommands.c:1131 +#: commands/dbcommands.c:1166 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "Використайте кодування шаблона бази даних або виберіть template0 в якості шаблона." -#: commands/dbcommands.c:1136 +#: commands/dbcommands.c:1171 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "нове правило сортування (%s) несумісне з правилом в шаблоні бази даних (%s)" -#: commands/dbcommands.c:1138 +#: commands/dbcommands.c:1173 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "Використайте те ж саме правило сортування, що і в шаблоні бази даних, або виберіть template0 в якості шаблона." -#: commands/dbcommands.c:1143 +#: commands/dbcommands.c:1178 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "новий параметр LC_CTYPE (%s) несумісний з LC_CTYPE в шаблоні бази даних (%s)" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1180 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "Використайте той самий LC_CTYPE, що і в шаблоні бази даних, або виберіть template0 в якості шаблона." -#: commands/dbcommands.c:1150 +#: commands/dbcommands.c:1185 #, c-format msgid "new locale provider (%s) does not match locale provider of the template database (%s)" msgstr "новий постачальник локалі (%s) не відповідає постачальнику локалі шаблону бази даних (%s)" -#: commands/dbcommands.c:1152 +#: commands/dbcommands.c:1187 #, c-format msgid "Use the same locale provider as in the template database, or use template0 as template." msgstr "Використайте такого ж постачальника локалі, що й у шаблоні бази даних, або використайте template0 в якості шаблону." -#: commands/dbcommands.c:1164 +#: commands/dbcommands.c:1199 #, c-format msgid "new ICU locale (%s) is incompatible with the ICU locale of the template database (%s)" msgstr "нова ICU локаль (%s) несумісна з ICU локалью шаблону бази даних (%s)" -#: commands/dbcommands.c:1166 +#: commands/dbcommands.c:1201 #, c-format msgid "Use the same ICU locale as in the template database, or use template0 as template." msgstr "Використайте таку ж ICU локаль, що й у шаблоні бази даних, або використайте template0 в якості шаблону." -#: commands/dbcommands.c:1177 +#: commands/dbcommands.c:1212 #, c-format msgid "new ICU collation rules (%s) are incompatible with the ICU collation rules of the template database (%s)" msgstr "нові правила сортування ICU (%s) несумісні з правилами сортування ICU шаблону бази даних (%s)" -#: commands/dbcommands.c:1179 +#: commands/dbcommands.c:1214 #, c-format msgid "Use the same ICU collation rules as in the template database, or use template0 as template." msgstr "Використайте ті ж правила сортування ICU, що й в шаблоні бази даних, або виберіть template0 в якості шаблону." -#: commands/dbcommands.c:1202 +#: commands/dbcommands.c:1243 #, c-format msgid "template database \"%s\" has a collation version, but no actual collation version could be determined" msgstr "шаблон бази даних \"%s\" має версію правил сортування, але фактичну версію визначити не вдалося" -#: commands/dbcommands.c:1207 +#: commands/dbcommands.c:1248 #, c-format msgid "template database \"%s\" has a collation version mismatch" msgstr "шаблон бази даних \"%s\" має невідповідність версії параметрів сортування" -#: commands/dbcommands.c:1209 +#: commands/dbcommands.c:1250 #, c-format msgid "The template database was created using collation version %s, but the operating system provides version %s." msgstr "Шаблон бази даних було створено за допомогою параметрів сортування версії %s, але операційна система надає версію %s." -#: commands/dbcommands.c:1212 +#: commands/dbcommands.c:1253 #, c-format 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:1248 commands/dbcommands.c:1980 +#: commands/dbcommands.c:1298 commands/dbcommands.c:2048 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global не можна використати в якості табличного простору за замовчуванням" -#: commands/dbcommands.c:1274 +#: commands/dbcommands.c:1324 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "не вдалося призначити новий табличний простір за замовчуванням \"%s\"" -#: commands/dbcommands.c:1276 +#: commands/dbcommands.c:1326 #, c-format msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "БД \"%s\" вже містить таблиці, що знаходяться в цьому табличному просторі." -#: commands/dbcommands.c:1306 commands/dbcommands.c:1853 +#: commands/dbcommands.c:1356 commands/dbcommands.c:1921 #, c-format msgid "database \"%s\" already exists" msgstr "база даних \"%s\" вже існує" -#: commands/dbcommands.c:1320 +#: commands/dbcommands.c:1370 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "вихідна база даних \"%s\" зайнята іншими користувачами" -#: commands/dbcommands.c:1342 +#: commands/dbcommands.c:1392 #, c-format msgid "database OID %u is already in use by database \"%s\"" msgstr "OID %u вже використовується базою даних \"%s\" вже використовує" -#: commands/dbcommands.c:1348 +#: commands/dbcommands.c:1398 #, c-format msgid "data directory with the specified OID %u already exists" msgstr "каталог даних з вказаним OID %u вже існує" -#: commands/dbcommands.c:1520 commands/dbcommands.c:1535 +#: commands/dbcommands.c:1571 commands/dbcommands.c:1586 +#: utils/adt/pg_locale.c:2565 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "кодування \"%s\" не відповідає локалі \"%s\"" -#: commands/dbcommands.c:1523 +#: commands/dbcommands.c:1574 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "Обраний параметр LC_CTYPE потребує кодування \"%s\"." -#: commands/dbcommands.c:1538 +#: commands/dbcommands.c:1589 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "Обраний параметр LC_COLLATE потребує кодування \"%s\"." -#: commands/dbcommands.c:1619 +#: commands/dbcommands.c:1672 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "бази даних \"%s\" не існує, пропускаємо" -#: commands/dbcommands.c:1643 +#: commands/dbcommands.c:1696 #, c-format msgid "cannot drop a template database" msgstr "неможливо видалити шаблон бази даних" -#: commands/dbcommands.c:1649 +#: commands/dbcommands.c:1702 #, c-format msgid "cannot drop the currently open database" msgstr "неможливо видалити наразі відкриту базу даних" -#: commands/dbcommands.c:1662 +#: commands/dbcommands.c:1715 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "база даних \"%s\" використовується активним слотом логічної реплікації" -#: commands/dbcommands.c:1664 +#: commands/dbcommands.c:1717 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." @@ -7539,12 +7843,12 @@ msgstr[1] "Активні слоти %d." msgstr[2] "Активних слотів %d." msgstr[3] "Активних слотів %d." -#: commands/dbcommands.c:1678 +#: commands/dbcommands.c:1731 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "база даних \"%s\" використовується в підписці логічної реплікації" -#: commands/dbcommands.c:1680 +#: commands/dbcommands.c:1733 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." @@ -7553,74 +7857,74 @@ msgstr[1] "Знайдено підписки %d." msgstr[2] "Знайдено підписок %d." msgstr[3] "Знайдено підписок %d." -#: commands/dbcommands.c:1701 commands/dbcommands.c:1875 -#: commands/dbcommands.c:2002 +#: commands/dbcommands.c:1754 commands/dbcommands.c:1943 +#: commands/dbcommands.c:2070 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "база даних \"%s\" зайнята іншими користувачами" -#: commands/dbcommands.c:1835 +#: commands/dbcommands.c:1903 #, c-format msgid "permission denied to rename database" msgstr "немає дозволу для перейменування бази даних" -#: commands/dbcommands.c:1864 +#: commands/dbcommands.c:1932 #, c-format msgid "current database cannot be renamed" msgstr "поточна база даних не може бути перейменована" -#: commands/dbcommands.c:1958 +#: commands/dbcommands.c:2026 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "неможливо змінити табличний простір наразі відкритої бази даних" -#: commands/dbcommands.c:2064 +#: commands/dbcommands.c:2132 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "деякі відношення бази даних \"%s\" вже є в табличному просторі \"%s\"" -#: commands/dbcommands.c:2066 +#: commands/dbcommands.c:2134 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "Перед тим, як виконувати цю команду, вам треба повернути їх в табличний простір за замовчуванням для цієї бази даних." -#: commands/dbcommands.c:2193 commands/dbcommands.c:2909 -#: commands/dbcommands.c:3209 commands/dbcommands.c:3322 +#: commands/dbcommands.c:2261 commands/dbcommands.c:2996 +#: commands/dbcommands.c:3296 commands/dbcommands.c:3409 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "у старому каталозі бази даних \"%s\" могли залишитися непотрібні файли" -#: commands/dbcommands.c:2254 +#: commands/dbcommands.c:2322 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "нерозпізнаний параметр DROP DATABASE \"%s\"" -#: commands/dbcommands.c:2332 +#: commands/dbcommands.c:2400 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "параметр \"%s\" не може бути вказаним з іншими параметрами" -#: commands/dbcommands.c:2379 +#: commands/dbcommands.c:2447 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "неможливо змінити невірну базу даних \"%s\"" -#: commands/dbcommands.c:2396 +#: commands/dbcommands.c:2464 #, c-format msgid "cannot disallow connections for current database" msgstr "не можна заборонити з'єднання для поточної бази даних" -#: commands/dbcommands.c:2611 +#: commands/dbcommands.c:2690 #, c-format msgid "permission denied to change owner of database" msgstr "немає дозволу для зміни власника бази даних" -#: commands/dbcommands.c:3015 +#: commands/dbcommands.c:3102 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "Знайдено %d інших сеансів і %d підготованих транзакцій з використанням цієї бази даних." -#: commands/dbcommands.c:3018 +#: commands/dbcommands.c:3105 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." @@ -7629,7 +7933,7 @@ msgstr[1] "Є %d інші сеанси з використанням цієї б msgstr[2] "Є %d інших сеансів з використанням цієї бази даних." msgstr[3] "Є %d інших сеансів з використанням цієї бази даних." -#: commands/dbcommands.c:3023 storage/ipc/procarray.c:3797 +#: commands/dbcommands.c:3110 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." @@ -7638,583 +7942,598 @@ msgstr[1] "З цією базою даних пов'язані %d підгото msgstr[2] "З цією базою даних пов'язані %d підготовлених транзакцій." msgstr[3] "З цією базою даних пов'язані %d підготовлених транзакцій." -#: commands/dbcommands.c:3165 +#: commands/dbcommands.c:3252 #, c-format msgid "missing directory \"%s\"" msgstr "відсутній каталог \"%s\"" -#: commands/dbcommands.c:3223 commands/tablespace.c:190 -#: commands/tablespace.c:639 +#: commands/dbcommands.c:3310 commands/tablespace.c:184 +#: commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "не вдалося отримати інформацію про каталог \"%s\": %m" -#: commands/define.c:54 commands/define.c:258 commands/define.c:290 -#: commands/define.c:318 commands/define.c:364 +#: commands/define.c:53 commands/define.c:257 commands/define.c:289 +#: commands/define.c:317 commands/define.c:363 #, c-format msgid "%s requires a parameter" msgstr "%s потребує параметру" -#: commands/define.c:87 commands/define.c:98 commands/define.c:192 -#: commands/define.c:210 commands/define.c:225 commands/define.c:243 +#: commands/define.c:86 commands/define.c:97 commands/define.c:191 +#: commands/define.c:209 commands/define.c:224 commands/define.c:242 #, c-format msgid "%s requires a numeric value" msgstr "%s потребує числового значення" -#: commands/define.c:154 +#: commands/define.c:153 #, c-format msgid "%s requires a Boolean value" msgstr "%s потребує логічного значення" -#: commands/define.c:168 commands/define.c:177 commands/define.c:327 +#: commands/define.c:167 commands/define.c:176 commands/define.c:326 #, c-format msgid "%s requires an integer value" msgstr "%s потребує ціле значення" -#: commands/define.c:272 +#: commands/define.c:271 #, c-format msgid "argument of %s must be a name" msgstr "аргументом %s повинно бути ім'я" -#: commands/define.c:302 +#: commands/define.c:301 #, c-format msgid "argument of %s must be a type name" msgstr "аргументом %s повинно бути ім'я типу" -#: commands/define.c:348 +#: commands/define.c:347 #, c-format msgid "invalid argument for %s: \"%s\"" msgstr "невірний аргумент для %s: \"%s\"" -#: commands/dropcmds.c:101 commands/functioncmds.c:1387 -#: utils/adt/ruleutils.c:2895 +#: commands/dropcmds.c:96 commands/functioncmds.c:1382 +#: utils/adt/ruleutils.c:2905 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" є функцією агрегату" -#: commands/dropcmds.c:103 +#: commands/dropcmds.c:98 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Використайте DROP AGGREGATE, щоб видалити агрегатні функції." -#: commands/dropcmds.c:158 commands/sequence.c:474 commands/tablecmds.c:3710 -#: commands/tablecmds.c:3868 commands/tablecmds.c:3920 -#: commands/tablecmds.c:16482 tcop/utility.c:1336 +#: commands/dropcmds.c:153 commands/sequence.c:462 commands/tablecmds.c:3872 +#: commands/tablecmds.c:4030 commands/tablecmds.c:4082 +#: commands/tablecmds.c:17058 tcop/utility.c:1325 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "відношення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1285 +#: commands/dropcmds.c:183 commands/dropcmds.c:282 commands/tablecmds.c:1392 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "схеми \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:277 +#: commands/dropcmds.c:223 commands/dropcmds.c:262 commands/tablecmds.c:286 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "типу \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:257 +#: commands/dropcmds.c:252 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "методу доступу \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:275 +#: commands/dropcmds.c:270 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "правила сортування \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:282 +#: commands/dropcmds.c:277 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "перетворення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:293 commands/statscmds.c:654 +#: commands/dropcmds.c:288 commands/statscmds.c:664 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "об'єкту статистики \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:300 +#: commands/dropcmds.c:295 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "парсеру текстового пошуку \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:307 +#: commands/dropcmds.c:302 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "словника текстового пошуку \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:314 +#: commands/dropcmds.c:309 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "шаблону текстового пошуку \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:321 +#: commands/dropcmds.c:316 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "конфігурації текстового пошуку \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:326 +#: commands/dropcmds.c:321 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "розширення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "функції %s(%s) не існує, пропускаємо" -#: commands/dropcmds.c:349 +#: commands/dropcmds.c:344 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "процедури %s(%s) не існує, пропускаємо" -#: commands/dropcmds.c:362 +#: commands/dropcmds.c:357 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "підпрограми %s(%s) не існує, пропускаємо" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:370 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "агрегату %s(%s) не існує, пропускаємо" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:383 #, c-format msgid "operator %s does not exist, skipping" msgstr "оператора \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:394 +#: commands/dropcmds.c:389 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "мови \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:403 +#: commands/dropcmds.c:398 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "приведення від типу %s до типу %s не існує, пропускаємо" -#: commands/dropcmds.c:412 +#: commands/dropcmds.c:407 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "трансформації для типу %s мови \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:420 +#: commands/dropcmds.c:415 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "тригеру \"%s\" для відношення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:429 +#: commands/dropcmds.c:424 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr "політики \"%s\" для відношення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:436 +#: commands/dropcmds.c:431 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "тригеру подій \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:442 +#: commands/dropcmds.c:437 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "правила \"%s\" для відношення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:449 +#: commands/dropcmds.c:444 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "джерела сторонніх даних \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1360 +#: commands/dropcmds.c:448 commands/foreigncmds.c:1360 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "серверу \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:462 +#: commands/dropcmds.c:457 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "класу операторів \"%s\" не існує для методу доступу \"%s\", пропускаємо" -#: commands/dropcmds.c:474 +#: commands/dropcmds.c:469 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "сімейства операторів \"%s\" не існує для методу доступу \"%s\", пропускаємо" -#: commands/dropcmds.c:481 +#: commands/dropcmds.c:476 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "публікації \"%s\" не існує, пропускаємо" -#: commands/event_trigger.c:125 +#: commands/event_trigger.c:137 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "немає дозволу для створення тригера подій %s\"" -#: commands/event_trigger.c:127 +#: commands/event_trigger.c:139 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Тільки суперкористувач може створити тригер подій." -#: commands/event_trigger.c:136 +#: commands/event_trigger.c:149 #, c-format msgid "unrecognized event name \"%s\"" msgstr "нерозпізнане ім'я подій \"%s\"" -#: commands/event_trigger.c:153 +#: commands/event_trigger.c:166 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "нерозпізнана змінна фільтру \"%s\"" -#: commands/event_trigger.c:207 +#: commands/event_trigger.c:181 +#, c-format +msgid "tag filtering is not supported for login event triggers" +msgstr "фільтрація тегів не підтримується для тригерів події входу" + +#: commands/event_trigger.c:224 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "значення фільтру \"%s\" не розпізнано для змінної фільтру \"%s\"" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:213 commands/event_trigger.c:235 +#: commands/event_trigger.c:230 commands/event_trigger.c:252 #, c-format msgid "event triggers are not supported for %s" msgstr "для %s тригери подій не підтримуються" -#: commands/event_trigger.c:248 +#: commands/event_trigger.c:265 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "змінну фільтра \"%s\" вказано кілька разів" -#: commands/event_trigger.c:376 commands/event_trigger.c:420 -#: commands/event_trigger.c:514 +#: commands/event_trigger.c:435 commands/event_trigger.c:487 +#: commands/event_trigger.c:581 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "тригеру подій \"%s\" не існує" -#: commands/event_trigger.c:452 +#: commands/event_trigger.c:519 #, c-format msgid "event trigger with OID %u does not exist" msgstr "тригер подій %u з OID не існує" -#: commands/event_trigger.c:482 +#: commands/event_trigger.c:549 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "немає дозволу для зміни власника тригера подій \"%s\"" -#: commands/event_trigger.c:484 +#: commands/event_trigger.c:551 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Власником тригеру подій може бути тільки суперкористувач." -#: commands/event_trigger.c:1304 +#: commands/event_trigger.c:1411 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s можливо викликати лише в подієвій тригерній функції sql_drop" -#: commands/event_trigger.c:1397 commands/event_trigger.c:1418 +#: commands/event_trigger.c:1504 commands/event_trigger.c:1525 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s можливо викликати лише в подієвій тригерній функції table_rewrite" -#: commands/event_trigger.c:1831 +#: commands/event_trigger.c:1938 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s можливо викликати тільки в подієвій тригерній функції" -#: commands/explain.c:220 +#: 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:227 +#: commands/explain.c:273 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "нерозпізнаний параметр EXPLAIN \"%s\"" -#: commands/explain.c:236 +#: commands/explain.c:282 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "Параметр WAL оператора EXPLAIN потребує вказівки ANALYZE" -#: commands/explain.c:245 +#: commands/explain.c:291 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "Параметр TIMING оператора EXPLAIN потребує вказівки ANALYZE" -#: commands/explain.c:251 +#: commands/explain.c:297 +#, c-format +msgid "EXPLAIN option SERIALIZE requires ANALYZE" +msgstr "Параметр SERIALIZE оператора EXPLAIN потребує вказівки ANALYZE" + +#: commands/explain.c:303 #, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" msgstr "Параметри ANALYZE і GENERIC_PLAN не можуть використовуватись разом" -#: commands/extension.c:177 commands/extension.c:3033 +#: commands/extension.c:178 commands/extension.c:3031 #, c-format msgid "extension \"%s\" does not exist" msgstr "розширення \"%s\" не існує" -#: commands/extension.c:276 commands/extension.c:285 commands/extension.c:297 -#: commands/extension.c:307 +#: commands/extension.c:277 commands/extension.c:286 commands/extension.c:298 +#: commands/extension.c:308 #, c-format msgid "invalid extension name: \"%s\"" msgstr "невірне ім'я розширення: \"%s\"" -#: commands/extension.c:277 +#: commands/extension.c:278 #, c-format msgid "Extension names must not be empty." msgstr "Імена розширення не повинні бути пустими." -#: commands/extension.c:286 +#: commands/extension.c:287 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Імена розширення не повинні містити \"--\"." -#: commands/extension.c:298 +#: commands/extension.c:299 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Імена розширення не повинні починатися або закінчуватися символом \"-\"." -#: commands/extension.c:308 +#: commands/extension.c:309 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Імена розширення не повинні містити роздільники шляху." -#: commands/extension.c:323 commands/extension.c:332 commands/extension.c:341 -#: commands/extension.c:351 +#: commands/extension.c:324 commands/extension.c:333 commands/extension.c:342 +#: commands/extension.c:352 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "невірне ім'я версії розширення: \"%s\"" -#: commands/extension.c:324 +#: commands/extension.c:325 #, c-format msgid "Version names must not be empty." msgstr "Імена версії не повинні бути пустими." -#: commands/extension.c:333 +#: commands/extension.c:334 #, c-format msgid "Version names must not contain \"--\"." msgstr "Імена версії не повинні містити \"--\"." -#: commands/extension.c:342 +#: commands/extension.c:343 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "Імена версії не повинні починатись або закінчуватись символом \"-\"." -#: commands/extension.c:352 +#: commands/extension.c:353 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Імена версії не повинні містити роздільники шляху." -#: commands/extension.c:506 +#: commands/extension.c:507 #, c-format msgid "extension \"%s\" is not available" msgstr "розширення \"%s\" недоступне" -#: commands/extension.c:507 +#: commands/extension.c:508 #, c-format msgid "Could not open extension control file \"%s\": %m." msgstr "Не вдалося відкрити контрольний файл розширення \"%s\": %m." -#: commands/extension.c:509 +#: commands/extension.c:510 #, c-format msgid "The extension must first be installed on the system where PostgreSQL is running." msgstr "Розширення спочатку має бути встановлене в системі, де запущено PostgreSQL." -#: commands/extension.c:513 +#: commands/extension.c:514 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "не вдалося відкрити керуючий файл розширення \"%s\": %m" -#: commands/extension.c:536 commands/extension.c:546 +#: commands/extension.c:537 commands/extension.c:547 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "параметр \"%s\" не можна задавати в додатковому керуючому файлі розширення" -#: commands/extension.c:568 commands/extension.c:576 commands/extension.c:584 -#: utils/misc/guc.c:3100 +#: commands/extension.c:569 commands/extension.c:577 commands/extension.c:585 +#: utils/misc/guc.c:3147 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "параметр \"%s\" потребує логічного значення" -#: commands/extension.c:593 +#: commands/extension.c:594 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" не є невірним ім'ям кодування" -#: commands/extension.c:607 commands/extension.c:622 +#: commands/extension.c:608 commands/extension.c:623 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "параметр \"%s\" повинен містити список імен розширень" -#: commands/extension.c:629 +#: commands/extension.c:630 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "нерозпізнаний параметр \"%s\" в файлі \"%s\"" -#: commands/extension.c:638 +#: commands/extension.c:639 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "параметр \"schema\" не може бути вказаним, коли \"relocatable\" є дійсним" -#: commands/extension.c:816 +#: commands/extension.c:817 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "в скрипті розширення не повинно бути операторів управління транзакціями" -#: commands/extension.c:896 +#: commands/extension.c:897 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "немає дозволу для створення розширення %s\"" -#: commands/extension.c:899 +#: commands/extension.c:900 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "Необхідно мати право CREATE для поточної бази даних щоб створити це розширення." -#: commands/extension.c:900 +#: commands/extension.c:901 #, c-format msgid "Must be superuser to create this extension." msgstr "Тільки суперкористувач може створити це розширення." -#: commands/extension.c:904 +#: commands/extension.c:905 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "немає дозволу для оновлення розширення %s\"" -#: commands/extension.c:907 +#: commands/extension.c:908 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "Необхідно мати право CREATE для поточної бази даних щоб оновити це розширення." -#: commands/extension.c:908 +#: commands/extension.c:909 #, c-format msgid "Must be superuser to update this extension." msgstr "Тільки суперкористувач може оновити це розширення." -#: commands/extension.c:1046 +#: commands/extension.c:1042 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "неприпустимий символ у власника розширення: не може містити жодного з \"%s\"" -#: commands/extension.c:1070 commands/extension.c:1097 +#: commands/extension.c:1066 commands/extension.c:1093 #, c-format msgid "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" msgstr "неприпустимий символ у розширенні \"%s\" схеми: не повинно містити жодної з \"%s\"" -#: commands/extension.c:1292 +#: commands/extension.c:1288 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "розширення \"%s\" не має жодного шляху оновлення від версії \"%s\" до версії \"%s\"" -#: commands/extension.c:1500 commands/extension.c:3091 +#: commands/extension.c:1496 commands/extension.c:3089 #, c-format msgid "version to install must be specified" msgstr "для інсталяції слід указати версію" -#: commands/extension.c:1537 +#: commands/extension.c:1533 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "розширення \"%s\" не має ні скрипту для встановлення, ні шляху оновлення для версії \"%s\"" -#: commands/extension.c:1571 +#: commands/extension.c:1567 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "розширення \"%s\" треба встановлювати в схемі \"%s\"" -#: commands/extension.c:1731 +#: commands/extension.c:1727 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "виявлено циклічну залежність між розширеннями \"%s\" і \"%s\"" -#: commands/extension.c:1736 +#: commands/extension.c:1732 #, c-format msgid "installing required extension \"%s\"" msgstr "встановлення необхідних розширень \"%s\"" -#: commands/extension.c:1759 +#: commands/extension.c:1755 #, c-format msgid "required extension \"%s\" is not installed" msgstr "необхідні розширення \"%s\" не встановлено" -#: commands/extension.c:1762 +#: commands/extension.c:1758 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Використайте CREATE EXTENSION ... CASCADE також для встановлення необхідних розширень." -#: commands/extension.c:1797 +#: commands/extension.c:1793 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "розширення \"%s\" вже існує, пропускаємо" -#: commands/extension.c:1804 +#: commands/extension.c:1800 #, c-format msgid "extension \"%s\" already exists" msgstr "розширення \"%s\" вже існує" -#: commands/extension.c:1815 +#: commands/extension.c:1811 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "вкладенні оператори CREATE EXTENSION не підтримуються" -#: commands/extension.c:1979 +#: commands/extension.c:1975 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "неможливо видалити розширення \"%s\", оскільки воно змінюється" -#: commands/extension.c:2454 +#: commands/extension.c:2450 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s можна викликати лише з SQL-скрипта, виконаного CREATE EXTENSION" -#: commands/extension.c:2466 +#: commands/extension.c:2462 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u не посилається на таблицю" -#: commands/extension.c:2471 +#: commands/extension.c:2467 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "таблиця \"%s\" не є членом створеного розширення" -#: commands/extension.c:2817 +#: commands/extension.c:2813 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "неможливо перемістити розширення \"%s\" в схему \"%s\", оскільки розширення містить схему" -#: commands/extension.c:2858 commands/extension.c:2952 +#: commands/extension.c:2854 commands/extension.c:2948 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "розширення \"%s\" не підтримує SET SCHEMA" -#: commands/extension.c:2915 +#: commands/extension.c:2911 #, c-format msgid "cannot SET SCHEMA of extension \"%s\" because other extensions prevent it" msgstr "неможливо виконати SET SCHEMA для розширення \"%s\", оскільки інші розширення заважають цьому" -#: commands/extension.c:2917 +#: commands/extension.c:2913 #, c-format msgid "Extension \"%s\" requests no relocation of extension \"%s\"." msgstr "Розширення \"%s\" запитує не переносити розширення \"%s\"." -#: commands/extension.c:2954 +#: commands/extension.c:2950 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s не є схемою розширення \"%s\"" -#: commands/extension.c:3013 +#: commands/extension.c:3011 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "вкладенні оператори ALTER EXTENSION не підтримуються" -#: commands/extension.c:3102 +#: commands/extension.c:3100 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "версія \"%s\" розширення \"%s\" вже встановлена" -#: commands/extension.c:3314 +#: commands/extension.c:3311 #, c-format msgid "cannot add an object of this type to an extension" msgstr "додати об'єкт цього типу до розширення не можна" -#: commands/extension.c:3380 +#: commands/extension.c:3409 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "неможливо додати схему \"%s\" до розширення \"%s\", оскільки схема містить розширення" -#: commands/extension.c:3474 +#: commands/extension.c:3491 commands/typecmds.c:4042 utils/fmgr/funcapi.c:725 +#, c-format +msgid "could not find multirange type for data type %s" +msgstr "не вдалося знайти багатодіапазонний тип для типу даних %s" + +#: commands/extension.c:3532 #, c-format msgid "file \"%s\" is too large" msgstr "файл \"%s\" занадто великий" @@ -8244,7 +8563,7 @@ msgstr "Треба бути суперкористувачем, щоб змін msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Власником джерела сторонніх даних може бути тільки суперкористувач." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:678 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:691 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "джерела сторонніх даних \"%s\" не існує" @@ -8314,7 +8633,7 @@ msgstr "зіставлення користувача \"%s\" не існує д msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "зіставлення користувача \"%s\" не існує для сервера \"%s\", пропускаємо" -#: commands/foreigncmds.c:1507 foreign/foreign.c:391 +#: commands/foreigncmds.c:1507 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "джерело сторонніх даних \"%s\" не має обробника" @@ -8329,363 +8648,368 @@ msgstr "джерело сторонніх даних \"%s\" не підтрим msgid "importing foreign table \"%s\"" msgstr "імпорт сторонньої таблиці \"%s\"" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-функція не може повертати тип оболонки %s" -#: commands/functioncmds.c:114 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "тип, що повертається, %s - лише оболонка" -#: commands/functioncmds.c:143 parser/parse_type.c:354 +#: commands/functioncmds.c:138 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "для типу оболонки \"%s\" неможливо вказати модифікатор типу" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:144 #, c-format msgid "type \"%s\" is not yet defined" msgstr "тип \"%s\" все ще не визначений" -#: commands/functioncmds.c:150 +#: commands/functioncmds.c:145 #, c-format msgid "Creating a shell type definition." msgstr "Створення визначення типу оболонки." -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:244 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-функція не може приймати значення типу оболонки %s" -#: commands/functioncmds.c:255 +#: commands/functioncmds.c:250 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "агрегатна функція не може приймати значення типу оболонки %s" -#: commands/functioncmds.c:260 +#: commands/functioncmds.c:255 #, c-format msgid "argument type %s is only a shell" msgstr "тип аргументу %s - лише оболонка" -#: commands/functioncmds.c:270 +#: commands/functioncmds.c:265 #, c-format msgid "type %s does not exist" msgstr "тип \"%s\" не існує" -#: commands/functioncmds.c:284 +#: commands/functioncmds.c:279 #, c-format msgid "aggregates cannot accept set arguments" msgstr "агрегатні функції не приймають в аргументах набору" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:283 #, c-format msgid "procedures cannot accept set arguments" msgstr "процедури не приймають в аргументах набору" -#: commands/functioncmds.c:292 +#: commands/functioncmds.c:287 #, c-format msgid "functions cannot accept set arguments" msgstr "функції не приймають в аргументах набору" -#: commands/functioncmds.c:302 +#: commands/functioncmds.c:297 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "Параметр VARIADIC повинен бути останнім в списку вхідних параметрів" -#: commands/functioncmds.c:322 +#: commands/functioncmds.c:317 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "Параметр VARIADIC повинен бути останнім параметром" -#: commands/functioncmds.c:347 +#: commands/functioncmds.c:342 #, c-format msgid "VARIADIC parameter must be an array" msgstr "Параметр VARIADIC повинен бути масивом" -#: commands/functioncmds.c:392 +#: commands/functioncmds.c:387 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "ім'я параметру «%s» використано декілька разів" -#: commands/functioncmds.c:410 +#: commands/functioncmds.c:405 #, c-format msgid "only input parameters can have default values" msgstr "тільки ввідні параметри можуть мати значення за замовчуванням" -#: commands/functioncmds.c:425 +#: commands/functioncmds.c:420 #, c-format msgid "cannot use table references in parameter default value" msgstr "у значенні параметру за замовчуванням не можна посилатись на таблиці" -#: commands/functioncmds.c:449 +#: commands/functioncmds.c:444 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "вхідні параметри, наступні за параметром зі значенням \"за замовчуванням\", також повинні мати значення \"за замовчуванням\"" -#: commands/functioncmds.c:459 +#: commands/functioncmds.c:454 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "параметри процедури OUT не можуть з'являтись після параметра зі значенням за замовчуванням" -#: commands/functioncmds.c:601 commands/functioncmds.c:780 +#: commands/functioncmds.c:596 commands/functioncmds.c:775 #, c-format msgid "invalid attribute in procedure definition" msgstr "некоректний атрибут у визначенні процедури" -#: commands/functioncmds.c:697 +#: commands/functioncmds.c:692 #, c-format msgid "support function %s must return type %s" msgstr "функція підтримки %s повинна повертати тип %s" -#: commands/functioncmds.c:708 +#: commands/functioncmds.c:703 #, c-format msgid "must be superuser to specify a support function" msgstr "для уточнення функції підтримки потрібно бути суперкористувачем" -#: commands/functioncmds.c:829 commands/functioncmds.c:1432 +#: commands/functioncmds.c:824 commands/functioncmds.c:1427 #, c-format msgid "COST must be positive" msgstr "COST має бути додатнім" -#: commands/functioncmds.c:837 commands/functioncmds.c:1440 +#: commands/functioncmds.c:832 commands/functioncmds.c:1435 #, c-format msgid "ROWS must be positive" msgstr "Значення ROWS повинно бути позитивним" -#: commands/functioncmds.c:866 +#: commands/functioncmds.c:861 #, c-format msgid "no function body specified" msgstr "не вказано тіло функції" -#: commands/functioncmds.c:871 +#: commands/functioncmds.c:866 #, c-format msgid "duplicate function body specified" msgstr "вказано тіло дубліката функції" -#: commands/functioncmds.c:876 +#: commands/functioncmds.c:871 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "вбудоване тіло функції SQL допустиме лише для мови SQL" -#: commands/functioncmds.c:918 +#: commands/functioncmds.c:913 #, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "SQL функція з тілом без лапок не може мати поліморфні аргументи" -#: commands/functioncmds.c:944 commands/functioncmds.c:963 +#: commands/functioncmds.c:939 commands/functioncmds.c:958 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s ще не підтримується у тілі SQL функції без лапок" -#: commands/functioncmds.c:991 +#: commands/functioncmds.c:986 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "для мови \"%s\" потрібен лише один вираз AS" -#: commands/functioncmds.c:1096 +#: commands/functioncmds.c:1091 #, c-format msgid "no language specified" msgstr "не вказано жодної мови" -#: commands/functioncmds.c:1104 commands/functioncmds.c:2105 -#: commands/proclang.c:237 +#: 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:1106 commands/functioncmds.c:2107 +#: commands/functioncmds.c:1101 commands/functioncmds.c:2119 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Використайте CREATE EXTENSION, щоб завантажити мову в базу даних." -#: commands/functioncmds.c:1139 commands/functioncmds.c:1424 +#: commands/functioncmds.c:1134 commands/functioncmds.c:1419 #, c-format msgid "only superuser can define a leakproof function" msgstr "лише суперкористувачі можуть визначити функцію з атрибутом leakproof" -#: commands/functioncmds.c:1190 +#: commands/functioncmds.c:1185 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "результат функції повинен мати тип %s відповідно з параметрами OUT" -#: commands/functioncmds.c:1203 +#: commands/functioncmds.c:1198 #, c-format msgid "function result type must be specified" msgstr "необхідно вказати тип результату функції" -#: commands/functioncmds.c:1256 commands/functioncmds.c:1444 +#: commands/functioncmds.c:1251 commands/functioncmds.c:1439 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS не застосовується, коли функція не повертає набір" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1546 #, c-format msgid "source data type %s is a pseudo-type" msgstr "вихідний тип даних %s є псевдотипом" -#: commands/functioncmds.c:1553 +#: commands/functioncmds.c:1552 #, c-format msgid "target data type %s is a pseudo-type" msgstr "цільовий тип даних %s є псевдотипом" -#: commands/functioncmds.c:1577 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "приведення буде ігноруватися, оскільки вихідні дані мають тип домену" -#: commands/functioncmds.c:1582 +#: commands/functioncmds.c:1581 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "приведення буде ігноруватися, оскільки цільові дані мають тип домену" -#: commands/functioncmds.c:1607 +#: commands/functioncmds.c:1606 #, c-format msgid "cast function must take one to three arguments" msgstr "функція приведення повинна приймати від одного до трьох аргументів" -#: commands/functioncmds.c:1613 +#: commands/functioncmds.c:1612 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "аргумент функції приведення повинен співпадати або бути двійково-сумісним з вихідним типом даних" -#: commands/functioncmds.c:1617 +#: commands/functioncmds.c:1616 #, c-format msgid "second argument of cast function must be type %s" msgstr "другий аргумент функції приведення повинен мати тип %s" -#: commands/functioncmds.c:1622 +#: commands/functioncmds.c:1621 #, c-format msgid "third argument of cast function must be type %s" msgstr "третій аргумент функції приведення повинен мати тип %s" -#: commands/functioncmds.c:1629 +#: commands/functioncmds.c:1628 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "тип вертаючих даних функції приведення повинен співпадати або бути двійково-сумісним з цільовим типом даних" -#: commands/functioncmds.c:1640 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not be volatile" msgstr "функція приведення не може бути змінною (volatile)" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1644 #, c-format msgid "cast function must be a normal function" msgstr "функція приведення повинна бути звичайною функцією" -#: commands/functioncmds.c:1649 +#: commands/functioncmds.c:1648 #, c-format msgid "cast function must not return a set" msgstr "функція приведення не може вертати набір" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1674 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "тільки суперкористувач може створити приведення WITHOUT FUNCTION" -#: commands/functioncmds.c:1690 +#: commands/functioncmds.c:1689 #, c-format msgid "source and target data types are not physically compatible" msgstr "вихідний та цільовий типи даних не сумісні фізично" -#: commands/functioncmds.c:1705 +#: commands/functioncmds.c:1709 #, c-format msgid "composite data types are not binary-compatible" msgstr "складені типи даних не сумісні на двійковому рівні" -#: commands/functioncmds.c:1711 -#, c-format -msgid "enum data types are not binary-compatible" -msgstr "типи переліку не сумісні на двійковому рівні" - -#: commands/functioncmds.c:1717 +#: commands/functioncmds.c:1715 #, c-format msgid "array data types are not binary-compatible" msgstr "типи масивів не сумісні на двійковому рівні" -#: commands/functioncmds.c:1734 +#: 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:1744 +#: commands/functioncmds.c:1756 #, c-format msgid "source data type and target data type are the same" msgstr "вихідний тип даних співпадає з цільовим типом" -#: commands/functioncmds.c:1777 +#: commands/functioncmds.c:1789 #, c-format msgid "transform function must not be volatile" msgstr "функція перетворення не може бути мінливою" -#: commands/functioncmds.c:1781 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must be a normal function" msgstr "функція перетворення повинна бути нормальною функцією" -#: commands/functioncmds.c:1785 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must not return a set" msgstr "функція перетворення не повинна повертати набір" -#: commands/functioncmds.c:1789 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must take one argument" msgstr "функція перетворення повинна приймати один аргумент" -#: commands/functioncmds.c:1793 +#: commands/functioncmds.c:1805 #, c-format msgid "first argument of transform function must be type %s" msgstr "перший аргумент функції перетворення повинен бути типу %s" -#: commands/functioncmds.c:1832 +#: commands/functioncmds.c:1844 #, c-format msgid "data type %s is a pseudo-type" msgstr "тип даних %s є псевдотипом" -#: commands/functioncmds.c:1838 +#: commands/functioncmds.c:1850 #, c-format msgid "data type %s is a domain" msgstr "тип даних %s є доменом" -#: commands/functioncmds.c:1878 +#: commands/functioncmds.c:1890 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "результат функції FROM SQL має бути типу %s" -#: commands/functioncmds.c:1904 +#: commands/functioncmds.c:1916 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "результат функції TO SQL повинен мати тип даних перетворення" -#: commands/functioncmds.c:1931 +#: commands/functioncmds.c:1943 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "перетворення для типу %s мови \"%s\" вже існує" -#: commands/functioncmds.c:2017 +#: commands/functioncmds.c:2029 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "перетворення для типу %s мови \"%s\" не існує" -#: commands/functioncmds.c:2041 +#: commands/functioncmds.c:2053 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "функція %s вже існує в схемі \"%s\"" -#: commands/functioncmds.c:2092 +#: commands/functioncmds.c:2104 #, c-format msgid "no inline code specified" msgstr "не вказано жодного впровадженого коду" -#: commands/functioncmds.c:2138 +#: commands/functioncmds.c:2150 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "мова \"%s\" не підтримує виконання впровадженого коду" -#: commands/functioncmds.c:2233 +#: 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" @@ -8694,555 +9018,560 @@ msgstr[1] "процедурі неможливо передати більше % msgstr[2] "процедурі неможливо передати більше %d аргументів" msgstr[3] "процедурі неможливо передати більше %d аргументів" -#: commands/indexcmds.c:640 +#: commands/indexcmds.c:648 #, c-format msgid "must specify at least one column" msgstr "треба вказати хоча б один стовпець" -#: commands/indexcmds.c:644 +#: commands/indexcmds.c:652 #, c-format msgid "cannot use more than %d columns in an index" msgstr "не можна використовувати більше ніж %d стовпців в індексі" -#: commands/indexcmds.c:687 +#: commands/indexcmds.c:695 #, c-format msgid "cannot create index on relation \"%s\"" msgstr "створити індекс для відношення \"%s\" не можна" -#: commands/indexcmds.c:713 +#: commands/indexcmds.c:721 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "неможливо створити індекс в секційній таблиці \"%s\" паралельним способом" -#: commands/indexcmds.c:718 -#, c-format -msgid "cannot create exclusion constraints on partitioned table \"%s\"" -msgstr "створити обмеження-виняток в секціонованій таблиці \"%s\" не можна" - -#: commands/indexcmds.c:728 +#: commands/indexcmds.c:731 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "неможливо створити індекси в тимчасових таблицях в інших сеансах" -#: commands/indexcmds.c:766 commands/tablecmds.c:784 commands/tablespace.c:1184 +#: commands/indexcmds.c:769 commands/tablecmds.c:801 commands/tablespace.c:1178 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "для секціонованих відношень не можна вказати табличний простір за замовчуванням" -#: commands/indexcmds.c:798 commands/tablecmds.c:819 commands/tablecmds.c:3409 +#: commands/indexcmds.c:801 commands/tablecmds.c:832 commands/tablecmds.c:3571 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "тільки спільні відношення можуть бути поміщені в табличний pg_global" -#: commands/indexcmds.c:831 +#: commands/indexcmds.c:834 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "застарілий метод доступу \"rtree\" підміняється методом \"gist\"" -#: commands/indexcmds.c:852 +#: commands/indexcmds.c:855 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "методу доступу \"%s\" не підтримує унікальні індекси" -#: commands/indexcmds.c:857 +#: commands/indexcmds.c:860 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "методу доступу \"%s\" не підтримує включені стовпці" -#: commands/indexcmds.c:862 +#: commands/indexcmds.c:865 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "метод доступу \"%s\" не підтримує багатостовпцеві індекси" -#: commands/indexcmds.c:867 +#: commands/indexcmds.c:870 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "метод доступу \"%s\" не підтримує обмеження-винятки" -#: commands/indexcmds.c:994 +#: commands/indexcmds.c:999 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "не можна зіставити ключ розділу з індексом використовуючи метод доступу \"%s\"" -#: commands/indexcmds.c:1004 +#: commands/indexcmds.c:1009 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "непідтримуване обмеження \"%s\" з визначенням ключа секціонування" -#: commands/indexcmds.c:1006 +#: commands/indexcmds.c:1011 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "обмеження %s не можуть використовуватись, якщо ключі секціонування включають вирази." -#: commands/indexcmds.c:1048 +#: commands/indexcmds.c:1061 +#, c-format +msgid "cannot match partition key to index on column \"%s\" using non-equal operator \"%s\"" +msgstr "не вдається зіставити ключ розділу з індексом у стовпці \"%s\" за допомогою оператора нерівності \"%s\"" + +#: commands/indexcmds.c:1077 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "обмеження унікальності в секціонованій таблиці повинно включати всі стовпці секціонування" -#: commands/indexcmds.c:1049 +#: commands/indexcmds.c:1078 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "в обмеженні %s таблиці\"%s\" не вистачає стовпця \"%s\", що є частиною ключа секціонування." -#: commands/indexcmds.c:1068 commands/indexcmds.c:1087 +#: commands/indexcmds.c:1097 commands/indexcmds.c:1116 #, c-format msgid "index creation on system columns is not supported" msgstr "створення індексу для системних стовпців не підтримується" -#: commands/indexcmds.c:1316 tcop/utility.c:1526 +#: commands/indexcmds.c:1346 tcop/utility.c:1515 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "не можна створити унікальний індекс в секціонованій таблиці \"%s\"" -#: commands/indexcmds.c:1318 tcop/utility.c:1528 +#: commands/indexcmds.c:1348 tcop/utility.c:1517 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Таблиця \"%s\" містить секції, які є зовнішніми таблицями." -#: commands/indexcmds.c:1803 +#: commands/indexcmds.c:1833 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функції в предикаті індексу повинні бути позначені як IMMUTABLE" -#: commands/indexcmds.c:1881 parser/parse_utilcmd.c:2522 -#: parser/parse_utilcmd.c:2657 +#: commands/indexcmds.c:1912 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:1905 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1936 parser/parse_utilcmd.c:1807 #, c-format msgid "expressions are not supported in included columns" msgstr "вирази не підтримуються у включених стовпцях " -#: commands/indexcmds.c:1946 +#: commands/indexcmds.c:1977 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "функції в індексному виразі повинні бути позначені як IMMUTABLE" -#: commands/indexcmds.c:1961 +#: commands/indexcmds.c:1992 #, c-format msgid "including column does not support a collation" msgstr "включені стовпці не підтримують правила сортування" -#: commands/indexcmds.c:1965 +#: commands/indexcmds.c:1996 #, c-format msgid "including column does not support an operator class" msgstr "включені стовпці не підтримують класи операторів" -#: commands/indexcmds.c:1969 +#: commands/indexcmds.c:2000 #, c-format msgid "including column does not support ASC/DESC options" msgstr "включені стовпці не підтримують параметри ASC/DESC" -#: commands/indexcmds.c:1973 +#: commands/indexcmds.c:2004 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "включені стовпці не підтримують параметри NULLS FIRST/LAST" -#: commands/indexcmds.c:2014 +#: commands/indexcmds.c:2047 #, c-format msgid "could not determine which collation to use for index expression" msgstr "не вдалося визначити, яке правило сортування використати для індексного виразу" -#: commands/indexcmds.c:2022 commands/tablecmds.c:17497 commands/typecmds.c:807 -#: parser/parse_expr.c:2722 parser/parse_type.c:568 parser/parse_utilcmd.c:3783 -#: utils/adt/misc.c:586 +#: commands/indexcmds.c:2055 commands/tablecmds.c:18075 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:2087 +#: commands/indexcmds.c:2122 #, c-format msgid "operator %s is not commutative" msgstr "оператор %s не комутативний" -#: commands/indexcmds.c:2089 +#: commands/indexcmds.c:2124 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "В обмеженнях-виключеннях можуть використовуватись лише комутативні оператори." -#: commands/indexcmds.c:2115 +#: commands/indexcmds.c:2150 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "оператор %s не є членом сімейства операторів \"%s\"" -#: commands/indexcmds.c:2118 +#: commands/indexcmds.c:2153 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "Оператор винятку для обмеження повинен відноситись до класу операторів індексу." -#: commands/indexcmds.c:2153 +#: commands/indexcmds.c:2188 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "метод доступу \"%s\" не підтримує параметри ASC/DESC" -#: commands/indexcmds.c:2158 +#: commands/indexcmds.c:2193 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "метод доступу \"%s\" не підтримує параметри NULLS FIRST/LAST" -#: commands/indexcmds.c:2204 commands/tablecmds.c:17522 -#: commands/tablecmds.c:17528 commands/typecmds.c:2301 +#: commands/indexcmds.c:2237 commands/tablecmds.c:18100 +#: commands/tablecmds.c:18106 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:2206 +#: commands/indexcmds.c:2239 #, 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:2235 commands/indexcmds.c:2243 -#: commands/opclasscmds.c:205 +#: commands/indexcmds.c:2268 commands/indexcmds.c:2276 +#: commands/opclasscmds.c:204 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "клас операторів \"%s\" не існує для методу доступу \"%s\"" -#: commands/indexcmds.c:2257 commands/typecmds.c:2289 +#: commands/indexcmds.c:2290 commands/typecmds.c:2299 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "клас операторів \"%s\" не приймає тип даних %s" -#: commands/indexcmds.c:2347 +#: commands/indexcmds.c:2380 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "для типу даних %s є кілька класів операторів за замовчуванням" -#: commands/indexcmds.c:2675 +#: commands/indexcmds.c:2708 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "нерозпізнаний параметр REINDEX \"%s\"" -#: commands/indexcmds.c:2899 +#: commands/indexcmds.c:2940 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "таблиця \"%s\" не має індексів, які можна переіндексувати паралельно" -#: commands/indexcmds.c:2913 +#: commands/indexcmds.c:2954 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "таблиця \"%s\" не має індексів для переіндексування" -#: commands/indexcmds.c:2958 commands/indexcmds.c:3468 -#: commands/indexcmds.c:3596 +#: commands/indexcmds.c:3001 commands/indexcmds.c:3512 +#: commands/indexcmds.c:3642 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "не можна конкурентно переіндексувати системні каталоги" -#: commands/indexcmds.c:2981 +#: commands/indexcmds.c:3025 #, c-format msgid "can only reindex the currently open database" msgstr "переіндексувати можна тільки наразі відкриту базу даних" -#: commands/indexcmds.c:3075 +#: commands/indexcmds.c:3117 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "не можна конкурентно переіндексувати системні каталоги, пропускаємо" -#: commands/indexcmds.c:3108 +#: commands/indexcmds.c:3150 #, c-format msgid "cannot move system relations, skipping all" msgstr "не можна перемістити системні відношення, пропускаються усі" -#: commands/indexcmds.c:3154 +#: commands/indexcmds.c:3196 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "під час переіндексування секціонованої таблиці \"%s.%s\"" -#: commands/indexcmds.c:3157 +#: commands/indexcmds.c:3199 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "під час переіндексування секціонованого індексу \"%s.%s\"" -#: commands/indexcmds.c:3348 commands/indexcmds.c:4204 +#: commands/indexcmds.c:3392 commands/indexcmds.c:4268 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблиця \"%s.%s\" була переіндексована" -#: commands/indexcmds.c:3500 commands/indexcmds.c:3552 +#: commands/indexcmds.c:3544 commands/indexcmds.c:3597 +#, c-format +msgid "skipping reindex of invalid index \"%s.%s\"" +msgstr "пропуск пере індексації недійсного індексу \"%s.%s\"" + +#: commands/indexcmds.c:3547 commands/indexcmds.c:3600 #, c-format -msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" -msgstr "неможливо переіндексувати пошкоджений індекс \"%s.%s\" паралельно, пропускається" +msgid "Use DROP INDEX or REINDEX INDEX." +msgstr "Використовуйте DROP INDEX або REINDEX INDEX." -#: commands/indexcmds.c:3506 +#: commands/indexcmds.c:3551 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "неможливо переіндексувати індекс обмеження-виключення \"%s.%s\" паралельно, пропускається" -#: commands/indexcmds.c:3661 +#: commands/indexcmds.c:3707 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "неможливо переіндексувати цей тип відношень паралельон" -#: commands/indexcmds.c:3682 +#: commands/indexcmds.c:3725 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "не можна перемістити не спільне відношення до табличного простору \"%s\"" -#: commands/indexcmds.c:4185 commands/indexcmds.c:4197 +#: commands/indexcmds.c:4249 commands/indexcmds.c:4261 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "індекс \"%s.%s\" був перебудований" -#: commands/indexcmds.c:4187 commands/indexcmds.c:4206 +#: commands/indexcmds.c:4251 commands/indexcmds.c:4270 #, c-format msgid "%s." msgstr "%s." -#: commands/lockcmds.c:92 +#: commands/lockcmds.c:91 #, c-format msgid "cannot lock relation \"%s\"" msgstr "блокувати відношення \"%s\" не можна" -#: commands/matview.c:193 +#: commands/matview.c:206 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "CONCURRENTLY не може використовуватись, коли матеріалізоване подання не наповнено" -#: commands/matview.c:199 gram.y:18306 +#: commands/matview.c:212 gram.y:18918 #, c-format msgid "%s and %s options cannot be used together" msgstr "параметри %s та %s не можуть бути використані разом" -#: commands/matview.c:256 +#: commands/matview.c:269 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "оновити матеріалізоване подання \"%s\" паралельно не можна" -#: commands/matview.c:259 +#: 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 "Створіть унікальний індекс без речення WHERE для одного або більше стовпців матеріалізованого подання." -#: commands/matview.c:653 +#: commands/matview.c:666 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "нові дані для матеріалізованого подання \"%s\" містять рядки, які дублюються (без урахування стовпців з null)" -#: commands/matview.c:655 +#: commands/matview.c:668 #, c-format msgid "Row: %s" msgstr "Рядок: %s" -#: commands/opclasscmds.c:124 +#: commands/opclasscmds.c:123 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "сімейство операторів \"%s\" не існує для методу доступу \"%s\"" -#: commands/opclasscmds.c:267 +#: commands/opclasscmds.c:266 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "сімейство операторів \"%s\" для методу доступу \"%s\" вже існує" -#: commands/opclasscmds.c:416 +#: commands/opclasscmds.c:415 #, c-format msgid "must be superuser to create an operator class" msgstr "тільки суперкористувач може створити клас операторів" -#: commands/opclasscmds.c:493 commands/opclasscmds.c:910 -#: commands/opclasscmds.c:1056 +#: commands/opclasscmds.c:492 commands/opclasscmds.c:909 +#: commands/opclasscmds.c:1055 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "неприпустимий номер оператора %d, число має бути між 1 і %d" -#: commands/opclasscmds.c:538 commands/opclasscmds.c:960 -#: commands/opclasscmds.c:1072 +#: commands/opclasscmds.c:537 commands/opclasscmds.c:959 +#: commands/opclasscmds.c:1071 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "неприпустимий номер функції %d, число має бути між 1 і %d" -#: commands/opclasscmds.c:567 +#: commands/opclasscmds.c:566 #, c-format msgid "storage type specified more than once" msgstr "тип сховища вказано більше одного разу" -#: commands/opclasscmds.c:594 +#: commands/opclasscmds.c:593 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "тип сховища не може відрізнятися від типу даних для методу доступу \"%s\"" -#: commands/opclasscmds.c:610 +#: commands/opclasscmds.c:609 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "клас операторів \"%s\" для методу доступу \"%s\" вже існує" -#: commands/opclasscmds.c:638 +#: commands/opclasscmds.c:637 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "клас операторів \"%s\" не вдалося зробити класом за замовчуванням для типу %s" -#: commands/opclasscmds.c:641 +#: commands/opclasscmds.c:640 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Клас операторів \"%s\" вже є класом за замовчуванням." -#: commands/opclasscmds.c:801 +#: commands/opclasscmds.c:800 #, c-format msgid "must be superuser to create an operator family" msgstr "тільки суперкористувач може створити сімейство операторів" -#: commands/opclasscmds.c:861 +#: commands/opclasscmds.c:860 #, c-format msgid "must be superuser to alter an operator family" msgstr "тільки суперкористувач може змінити сімейство операторів" -#: commands/opclasscmds.c:919 +#: commands/opclasscmds.c:918 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "типи аргументу оператора повинні бути вказані в ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:994 +#: commands/opclasscmds.c:993 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE не може бути вказано в ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:1128 +#: commands/opclasscmds.c:1127 #, c-format msgid "one or two argument types must be specified" msgstr "треба вказати один або два типи аргументу" -#: commands/opclasscmds.c:1154 +#: commands/opclasscmds.c:1153 #, c-format msgid "index operators must be binary" msgstr "індексні оператори повинні бути бінарними" -#: commands/opclasscmds.c:1173 +#: commands/opclasscmds.c:1172 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "метод доступу \"%s\" не підтримує сортувальних операторів" -#: commands/opclasscmds.c:1184 +#: commands/opclasscmds.c:1183 #, c-format msgid "index search operators must return boolean" msgstr "оператори пошуку по індексу повинні повертати логічне значення" -#: commands/opclasscmds.c:1224 +#: commands/opclasscmds.c:1223 #, c-format msgid "associated data types for operator class options parsing functions must match opclass input type" msgstr "пов'язані типи даних для функцій обробки параметрів класів операторів повинні відповідати типу вхідних даних opclass" -#: commands/opclasscmds.c:1231 +#: commands/opclasscmds.c:1230 #, c-format msgid "left and right associated data types for operator class options parsing functions must match" msgstr "ліві та праві пов'язані типи даних для функцій розбору параметрів класів операторів повинні збігатись" -#: commands/opclasscmds.c:1239 +#: commands/opclasscmds.c:1238 #, c-format msgid "invalid operator class options parsing function" msgstr "неприпустима функція розбору параметрів класів операторів" -#: commands/opclasscmds.c:1240 +#: commands/opclasscmds.c:1239 #, c-format msgid "Valid signature of operator class options parsing function is %s." msgstr "Допустимий підпис для функції розбору параметрів класів операторів: %s." -#: commands/opclasscmds.c:1259 +#: commands/opclasscmds.c:1258 #, c-format msgid "btree comparison functions must have two arguments" msgstr "функції порівняння btree повинні мати два аргумента" -#: commands/opclasscmds.c:1263 +#: commands/opclasscmds.c:1262 #, c-format msgid "btree comparison functions must return integer" msgstr "функції порівняння btree повинні повертати ціле число" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1279 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "опорні функції сортування btree повинні приймати тип \"internal\"" -#: commands/opclasscmds.c:1284 +#: commands/opclasscmds.c:1283 #, c-format msgid "btree sort support functions must return void" msgstr "опорні функції сортування btree повинні повертати недійсне (void)" -#: commands/opclasscmds.c:1295 +#: commands/opclasscmds.c:1294 #, c-format msgid "btree in_range functions must have five arguments" msgstr "функції in_range для btree повинні приймати п'ять аргументів" -#: commands/opclasscmds.c:1299 +#: commands/opclasscmds.c:1298 #, c-format msgid "btree in_range functions must return boolean" msgstr "функції in_range для btree повинні повертати логічне значення" -#: commands/opclasscmds.c:1315 +#: commands/opclasscmds.c:1314 #, c-format msgid "btree equal image functions must have one argument" msgstr "функції equal image для btree повинні приймати один аргумент" -#: commands/opclasscmds.c:1319 +#: commands/opclasscmds.c:1318 #, c-format msgid "btree equal image functions must return boolean" msgstr "функції equal image для btree повинні повертати логічне значення" -#: commands/opclasscmds.c:1332 +#: commands/opclasscmds.c:1331 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "функції equal image для btree не можуть бути хрестоподібного типу" -#: commands/opclasscmds.c:1342 +#: commands/opclasscmds.c:1341 #, c-format msgid "hash function 1 must have one argument" msgstr "геш-функція 1 повинна приймати один аргумент" -#: commands/opclasscmds.c:1346 +#: commands/opclasscmds.c:1345 #, c-format msgid "hash function 1 must return integer" msgstr "геш-функція 1 повинна повертати ціле число" -#: commands/opclasscmds.c:1353 +#: commands/opclasscmds.c:1352 #, c-format msgid "hash function 2 must have two arguments" msgstr "геш-функція 2 повинна приймати два аргументи" -#: commands/opclasscmds.c:1357 +#: commands/opclasscmds.c:1356 #, c-format msgid "hash function 2 must return bigint" msgstr "геш-функція 2 повинна повертати велике ціле (bigint)" -#: commands/opclasscmds.c:1382 +#: commands/opclasscmds.c:1381 #, c-format msgid "associated data types must be specified for index support function" msgstr "для опорної функції індексів повинні бути вказані пов'язані типи даних" -#: commands/opclasscmds.c:1407 +#: commands/opclasscmds.c:1406 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "номер функції %d для (%s,%s) з'являється більш ніж один раз" -#: commands/opclasscmds.c:1414 +#: commands/opclasscmds.c:1413 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "номер оператора %d для (%s,%s) з'являється більш ніж один раз" -#: commands/opclasscmds.c:1460 +#: commands/opclasscmds.c:1459 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "оператор %d(%s,%s) вже існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1566 +#: commands/opclasscmds.c:1565 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "функція %d(%s,%s) вже існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1647 +#: commands/opclasscmds.c:1646 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "оператора %d(%s,%s) не існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1687 +#: commands/opclasscmds.c:1686 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "функції %d(%s,%s) не існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1718 +#: commands/opclasscmds.c:1717 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "клас операторів \"%s\" для методу доступу \"%s\" вже існує в схемі \"%s\"" -#: commands/opclasscmds.c:1741 +#: commands/opclasscmds.c:1740 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "сімейство операторів \"%s\" для методу доступу \"%s\" вже існує в схемі \"%s\"" @@ -9252,7 +9581,7 @@ msgstr "сімейство операторів \"%s\" для методу до msgid "SETOF type not allowed for operator argument" msgstr "Аргументом оператора не може бути тип SETOF" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:481 +#: commands/operatorcmds.c:154 commands/operatorcmds.c:554 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "атрибут оператора \"%s\" не розпізнаний" @@ -9292,53 +9621,70 @@ msgstr "функція оцінювання з'єднання %s має декі msgid "join estimator function %s must return type %s" msgstr "функція оцінювання з'єднання %s повинна повертати тип %s" -#: commands/operatorcmds.c:475 +#: commands/operatorcmds.c:388 parser/parse_oper.c:119 parser/parse_oper.c:637 +#: utils/adt/regproc.c:509 utils/adt/regproc.c:683 +#, c-format +msgid "operator does not exist: %s" +msgstr "оператор не існує: %s" + +#: commands/operatorcmds.c:396 parser/parse_oper.c:702 parser/parse_oper.c:815 +#, c-format +msgid "operator is only a shell: %s" +msgstr "оператор є лише оболонкою: %s" + +#: commands/operatorcmds.c:548 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "атрибут оператора \"%s\" неможливо змінити" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:149 -#: commands/tablecmds.c:1616 commands/tablecmds.c:2219 -#: commands/tablecmds.c:3520 commands/tablecmds.c:6369 -#: commands/tablecmds.c:9189 commands/tablecmds.c:17084 -#: commands/tablecmds.c:17119 commands/trigger.c:323 commands/trigger.c:1339 -#: commands/trigger.c:1449 rewrite/rewriteDefine.c:275 -#: rewrite/rewriteDefine.c:786 rewrite/rewriteRemove.c:80 +#: commands/operatorcmds.c:615 commands/operatorcmds.c:622 +#: commands/operatorcmds.c:628 commands/operatorcmds.c:634 +#, c-format +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:1723 commands/tablecmds.c:2323 +#: commands/tablecmds.c:3682 commands/tablecmds.c:6582 +#: commands/tablecmds.c:9614 commands/tablecmds.c:17662 +#: commands/tablecmds.c:17697 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\" - системний каталог" -#: commands/policy.c:172 +#: commands/policy.c:169 #, c-format msgid "ignoring specified roles other than PUBLIC" msgstr "всі вказані ролі, крім PUBLIC, ігноруються" -#: commands/policy.c:173 +#: commands/policy.c:170 #, c-format msgid "All roles are members of the PUBLIC role." msgstr "Роль PUBLIC включає в себе всі інші ролі." -#: commands/policy.c:606 +#: commands/policy.c:603 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK не можна застосувати до SELECT або DELETE" -#: commands/policy.c:615 commands/policy.c:918 +#: commands/policy.c:612 commands/policy.c:915 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "для INSERT допускається лише вираз WITH CHECK" -#: commands/policy.c:689 commands/policy.c:1141 +#: commands/policy.c:686 commands/policy.c:1138 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "політика \"%s\" для таблиці \"%s\" вже існує" -#: commands/policy.c:890 commands/policy.c:1169 commands/policy.c:1240 +#: commands/policy.c:887 commands/policy.c:1166 commands/policy.c:1237 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "політика \"%s\" для таблиці \"%s\" не існує" -#: commands/policy.c:908 +#: commands/policy.c:905 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "для SELECT, DELETE допускається лише вираз USING" @@ -9354,245 +9700,244 @@ 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:2854 utils/adt/xml.c:3024 +#: executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не існує" -#: commands/prepare.c:75 +#: commands/prepare.c:72 #, c-format msgid "invalid statement name: must not be empty" msgstr "неприпустиме ім'я оператора: не повинне бути пустим" -#: commands/prepare.c:230 commands/prepare.c:235 +#: commands/prepare.c:227 commands/prepare.c:232 #, c-format msgid "prepared statement is not a SELECT" msgstr "підготовлений оператор не SELECT" -#: commands/prepare.c:295 +#: commands/prepare.c:292 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "невірне число параметрів для підготовленого оператора \"%s\"" -#: commands/prepare.c:297 +#: commands/prepare.c:294 #, c-format msgid "Expected %d parameters but got %d." msgstr "Очікувалось %d параметрів, але отримано %d." -#: commands/prepare.c:330 +#: commands/prepare.c:327 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "параметр $%d типу %s не можна привести до очікуваного типу %s" -#: commands/prepare.c:414 +#: commands/prepare.c:411 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "підготовлений оператор \"%s\" вже існує" -#: commands/prepare.c:453 +#: commands/prepare.c:450 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "підготовлений оператор \"%s\" не існує" -#: commands/proclang.c:68 +#: commands/proclang.c:66 #, c-format msgid "must be superuser to create custom procedural language" msgstr "для створення користувацької мови потрібно бути суперкористувачем" -#: commands/publicationcmds.c:131 postmaster/postmaster.c:1208 -#: postmaster/postmaster.c:1306 storage/file/fd.c:3911 -#: utils/init/miscinit.c:1822 +#: commands/publicationcmds.c:124 postmaster/postmaster.c:1108 +#: postmaster/postmaster.c:1210 utils/init/miscinit.c:1811 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неприпустимий синтаксис списку в параметрі \"%s\"" -#: commands/publicationcmds.c:150 +#: commands/publicationcmds.c:143 #, c-format msgid "unrecognized value for publication option \"%s\": \"%s\"" msgstr "нерозпізнане значення параметра публікації \"%s\": \"%s\"" -#: commands/publicationcmds.c:164 +#: commands/publicationcmds.c:157 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "нерозпізнаний параметр публікації: \"%s\"" -#: commands/publicationcmds.c:205 +#: commands/publicationcmds.c:198 #, c-format msgid "no schema has been selected for CURRENT_SCHEMA" msgstr "жодної схеми не вибрано для CURRENT_SCHEMA" -#: commands/publicationcmds.c:502 +#: commands/publicationcmds.c:495 msgid "System columns are not allowed." msgstr "Системні стовпці не допускаються." -#: commands/publicationcmds.c:509 commands/publicationcmds.c:514 -#: commands/publicationcmds.c:531 +#: commands/publicationcmds.c:502 commands/publicationcmds.c:507 +#: commands/publicationcmds.c:524 msgid "User-defined operators are not allowed." msgstr "Користувацькі оператори не допускаються." -#: commands/publicationcmds.c:555 +#: commands/publicationcmds.c:548 msgid "Only columns, constants, built-in operators, built-in data types, built-in collations, and immutable built-in functions are allowed." msgstr "Дозволяються тільки стовпці, константи, вбудовані оператори, вбудовані типи даних, вбудовані параметри сортування та незмінні вбудовані функції." -#: commands/publicationcmds.c:567 +#: commands/publicationcmds.c:560 msgid "User-defined types are not allowed." msgstr "Користувацькі типи не допускаються." -#: commands/publicationcmds.c:570 +#: commands/publicationcmds.c:563 msgid "User-defined or built-in mutable functions are not allowed." msgstr "Користувацькі або вбудовані змінні функції не допускаються." -#: commands/publicationcmds.c:573 +#: commands/publicationcmds.c:566 msgid "User-defined collations are not allowed." msgstr "Користувацькі параметри сортування не допускаються." -#: commands/publicationcmds.c:583 +#: commands/publicationcmds.c:576 #, c-format msgid "invalid publication WHERE expression" msgstr "неприпустимий вираз публікації WHERE" -#: commands/publicationcmds.c:636 +#: commands/publicationcmds.c:629 #, c-format msgid "cannot use publication WHERE clause for relation \"%s\"" msgstr "використовувати вираз публікації WHERE для відношення \"%s\" не можна" -#: commands/publicationcmds.c:638 +#: commands/publicationcmds.c:631 #, c-format msgid "WHERE clause cannot be used for a partitioned table when %s is false." msgstr "вираз WHERE для секціонованих таблиць не можна використовувати, коли %s є false." -#: commands/publicationcmds.c:709 commands/publicationcmds.c:723 +#: commands/publicationcmds.c:702 commands/publicationcmds.c:716 #, c-format msgid "cannot use column list for relation \"%s.%s\" in publication \"%s\"" msgstr "не можна використовувати список стовпців для відношення \"%s.%s\" в публікації \"%s\"" -#: commands/publicationcmds.c:712 +#: commands/publicationcmds.c:705 #, c-format msgid "Column lists cannot be specified in publications containing FOR TABLES IN SCHEMA elements." msgstr "Списки стовпців не можна вказувати в публікаціях, що містять елементи FOR TABLES IN SCHEMA." -#: commands/publicationcmds.c:726 +#: commands/publicationcmds.c:719 #, c-format msgid "Column lists cannot be specified for partitioned tables when %s is false." msgstr "Списки стовпців для секціонованих таблиць не можна використовувати, коли %s є false." -#: commands/publicationcmds.c:761 +#: commands/publicationcmds.c:754 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "для створення публікації УСІХ ТАБЛИЦЬ потрібно бути суперкористувачем" -#: commands/publicationcmds.c:832 +#: commands/publicationcmds.c:825 #, c-format msgid "must be superuser to create FOR TABLES IN SCHEMA publication" msgstr "щоб створити публікацію FOR TABLES IN SCHEMA потрібно бути суперкористувачем" -#: commands/publicationcmds.c:868 +#: commands/publicationcmds.c:861 #, c-format -msgid "wal_level is insufficient to publish logical changes" -msgstr "недостатній wal_level для публікації логічних змін" +msgid "\"wal_level\" is insufficient to publish logical changes" +msgstr "недостатній \"wal_level\" для публікації логічних змін" -#: commands/publicationcmds.c:869 +#: commands/publicationcmds.c:862 #, c-format -msgid "Set wal_level to \"logical\" before creating subscriptions." -msgstr "Встановіть wal_level на \"logical\" перед створенням підписок." +msgid "Set \"wal_level\" to \"logical\" before creating subscriptions." +msgstr "Встановіть \"wal_level\" на \"logical\" перед створенням підписок." -#: commands/publicationcmds.c:965 commands/publicationcmds.c:973 +#: commands/publicationcmds.c:958 commands/publicationcmds.c:966 #, c-format msgid "cannot set parameter \"%s\" to false for publication \"%s\"" msgstr "встановити параметр \"%s\" на false для публікації \"%s\" не можна" -#: commands/publicationcmds.c:968 +#: commands/publicationcmds.c:961 #, c-format msgid "The publication contains a WHERE clause for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "Публікація містить вираз WHERE для секціонованої таблиці \"%s\", який не допускається коли \"%s\" є false." -#: commands/publicationcmds.c:976 +#: commands/publicationcmds.c:969 #, c-format msgid "The publication contains a column list for partitioned table \"%s\", which is not allowed when \"%s\" is false." msgstr "Публікація містить список стовпців для секціонованої таблиці \"%s\", який не допускається коли \"%s\" є false." -#: commands/publicationcmds.c:1299 +#: commands/publicationcmds.c:1292 #, c-format msgid "cannot add schema to publication \"%s\"" msgstr "не можна додати схему до публікації \"%s\"" -#: commands/publicationcmds.c:1301 +#: commands/publicationcmds.c:1294 #, c-format msgid "Schemas cannot be added if any tables that specify a column list are already part of the publication." msgstr "Схеми не можна додавати, якщо будь-яка таблиця, що вказуює на список стовпців, вже є частиною публікації." -#: commands/publicationcmds.c:1349 +#: commands/publicationcmds.c:1342 #, c-format msgid "must be superuser to add or set schemas" msgstr "для додавання або встановлення схем потрібно бути суперкористувачем" -#: commands/publicationcmds.c:1358 commands/publicationcmds.c:1366 +#: commands/publicationcmds.c:1351 commands/publicationcmds.c:1359 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "публікація \"%s\" визначена ДЛЯ ВСІХ ТАБЛИЦЬ" -#: commands/publicationcmds.c:1360 +#: commands/publicationcmds.c:1353 #, c-format msgid "Schemas cannot be added to or dropped from FOR ALL TABLES publications." msgstr "До публікації FOR ALL TABLES не можна додати або видалити схеми." -#: commands/publicationcmds.c:1368 +#: commands/publicationcmds.c:1361 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "У публікації ВСІХ ТАБЛИЦЬ не можна додати або видалити таблиці." -#: commands/publicationcmds.c:1392 commands/publicationcmds.c:1431 -#: commands/publicationcmds.c:1968 utils/cache/lsyscache.c:3592 +#: commands/publicationcmds.c:1385 commands/publicationcmds.c:1424 +#: commands/publicationcmds.c:1961 utils/cache/lsyscache.c:3634 #, c-format msgid "publication \"%s\" does not exist" msgstr "публікація \"%s\" вже існує" -#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1657 +#: commands/publicationcmds.c:1587 commands/publicationcmds.c:1650 #, c-format msgid "conflicting or redundant WHERE clauses for table \"%s\"" msgstr "конфліктуючі або надлишкові вирази WHERE для таблиці \"%s\"" -#: commands/publicationcmds.c:1601 commands/publicationcmds.c:1669 +#: commands/publicationcmds.c:1594 commands/publicationcmds.c:1662 #, c-format msgid "conflicting or redundant column lists for table \"%s\"" msgstr "конфліктуючі або надлишкові списки стовпців для таблиці \"%s\"" -#: commands/publicationcmds.c:1803 +#: commands/publicationcmds.c:1796 #, c-format msgid "column list must not be specified in ALTER PUBLICATION ... DROP" msgstr "список стовпців не можна вказувати в ALTER PUBLICATION ... DROP" -#: commands/publicationcmds.c:1815 +#: commands/publicationcmds.c:1808 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "відносини \"%s\" не є частиною публікації" -#: commands/publicationcmds.c:1822 +#: commands/publicationcmds.c:1815 #, c-format msgid "cannot use a WHERE clause when removing a table from a publication" msgstr "під час видалення таблиці з публікації використовувати вираз WHERE не можна" -#: commands/publicationcmds.c:1882 +#: commands/publicationcmds.c:1875 #, c-format msgid "tables from schema \"%s\" are not part of the publication" msgstr "таблиці зі схеми \"%s\" не є частиною публікації" -#: commands/publicationcmds.c:1925 commands/publicationcmds.c:1932 +#: commands/publicationcmds.c:1918 commands/publicationcmds.c:1925 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "немає прав на зміну власника публікації \"%s\"" -#: commands/publicationcmds.c:1927 +#: commands/publicationcmds.c:1920 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "Власником публікації УСІХ ТАБЛИЦЬ повинен бути суперкористувач." -#: commands/publicationcmds.c:1934 +#: commands/publicationcmds.c:1927 #, c-format msgid "The owner of a FOR TABLES IN SCHEMA publication must be a superuser." msgstr "Власник публікації публікації FOR TABLES IN SCHEMA повинен бути суперкористувачем." -#: commands/publicationcmds.c:2000 +#: commands/publicationcmds.c:1993 #, c-format msgid "publication with OID %u does not exist" msgstr "публікації %u з OID не існує" @@ -9637,242 +9982,242 @@ msgstr "мітки безпеки не підтримуються для цьо msgid "cannot set security label on relation \"%s\"" msgstr "не можна встановити мітку безпеки для відношення \"%s\"" -#: commands/sequence.c:754 +#: commands/sequence.c:748 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%lld)" msgstr "nextval: досягнено максимального значення послідовності \"%s\" (%lld)" -#: commands/sequence.c:773 +#: commands/sequence.c:767 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" msgstr "nextval: досягнено мінімального значення послідовності \"%s\" (%lld)" -#: commands/sequence.c:891 +#: commands/sequence.c:886 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "поточне значення (currval) для послідовності \"%s\" ще не визначено у цьому сеансі" -#: commands/sequence.c:910 commands/sequence.c:916 +#: commands/sequence.c:905 commands/sequence.c:911 #, c-format msgid "lastval is not yet defined in this session" msgstr "останнє значення ще не визначено в цьому сеансі" -#: commands/sequence.c:996 +#: 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:1365 +#: commands/sequence.c:1357 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "неприпустимий параметр послідовності SEQUENCE NAME" -#: commands/sequence.c:1391 +#: commands/sequence.c:1383 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "типом стовпця ідентифікації може бути тільки smallint, integer або bigint" -#: commands/sequence.c:1392 +#: commands/sequence.c:1384 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "типом послідовності може бути тільки smallint, integer або bigint" -#: commands/sequence.c:1426 +#: commands/sequence.c:1418 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT не повинен бути нулем" -#: commands/sequence.c:1474 +#: 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:1506 +#: 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:1514 +#: commands/sequence.c:1506 #, c-format msgid "MINVALUE (%lld) must be less than MAXVALUE (%lld)" msgstr "MINVALUE (%lld) повинно бути меншим за MAXVALUE (%lld)" -#: commands/sequence.c:1535 +#: commands/sequence.c:1527 #, c-format msgid "START value (%lld) cannot be less than MINVALUE (%lld)" msgstr "Значення START (%lld) не може бути меншим за MINVALUE (%lld)" -#: commands/sequence.c:1541 +#: commands/sequence.c:1533 #, c-format msgid "START value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "Значення START (%lld) не може бути більшим за MAXVALUE (%lld)" -#: commands/sequence.c:1565 +#: commands/sequence.c:1557 #, c-format msgid "RESTART value (%lld) cannot be less than MINVALUE (%lld)" msgstr "Значення RESTART (%lld) не може бути меншим за MINVALUE (%lld)" -#: commands/sequence.c:1571 +#: commands/sequence.c:1563 #, c-format msgid "RESTART value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "Значення RESTART (%lld) не може бути більшим за MAXVALUE (%lld)" -#: commands/sequence.c:1582 +#: commands/sequence.c:1574 #, c-format msgid "CACHE (%lld) must be greater than zero" msgstr "CACHE (%lld) повинно бути більше нуля" -#: commands/sequence.c:1618 +#: commands/sequence.c:1610 #, c-format msgid "invalid OWNED BY option" msgstr "неприпустимий параметр OWNED BY" -#: commands/sequence.c:1619 +#: 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:1644 +#: commands/sequence.c:1636 #, c-format msgid "sequence cannot be owned by relation \"%s\"" msgstr "послідовність не може належати відношенню \"%s\"" -#: commands/sequence.c:1652 +#: commands/sequence.c:1644 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "послідовність повинна мати того ж власника, що і таблиця, з якою вона зв'язана" -#: commands/sequence.c:1656 +#: commands/sequence.c:1648 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "послідовність повинна бути в тій самій схемі, що і таблиця, з якою вона зв'язана" -#: commands/sequence.c:1678 +#: commands/sequence.c:1670 #, c-format msgid "cannot change ownership of identity sequence" msgstr "змінити власника послідовності ідентифікації не можна" -#: commands/sequence.c:1679 commands/tablecmds.c:13903 -#: commands/tablecmds.c:16502 +#: commands/sequence.c:1671 commands/tablecmds.c:14384 +#: commands/tablecmds.c:17078 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Послідовність \"%s\" зв'язана з таблицею \"%s\"." -#: commands/statscmds.c:109 commands/statscmds.c:118 tcop/utility.c:1887 +#: commands/statscmds.c:106 commands/statscmds.c:115 tcop/utility.c:1883 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "в CREATE STATISTICS можна вказати лише одне відношення" -#: commands/statscmds.c:136 +#: commands/statscmds.c:133 #, c-format msgid "cannot define statistics for relation \"%s\"" msgstr "визначити статистику відношення \"%s\" не можна" -#: commands/statscmds.c:190 +#: commands/statscmds.c:187 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "об'єкт статистики \"%s\" вже існує, пропускається" -#: commands/statscmds.c:198 +#: commands/statscmds.c:195 #, c-format msgid "statistics object \"%s\" already exists" msgstr "об'єкт статистики \"%s\" вже існує" -#: commands/statscmds.c:209 +#: commands/statscmds.c:206 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "в статистиці не може бути більше ніж %d стовпців" -#: commands/statscmds.c:250 commands/statscmds.c:273 commands/statscmds.c:307 +#: commands/statscmds.c:247 commands/statscmds.c:270 commands/statscmds.c:304 #, c-format msgid "statistics creation on system columns is not supported" msgstr "створення статистики для системних стовпців не підтримується" -#: commands/statscmds.c:257 commands/statscmds.c:280 +#: commands/statscmds.c:254 commands/statscmds.c:277 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "стовпець \"%s\" не можна використати в статистиці, тому що для його типу %s не визначений клас оператора (btree) за замовчуванням" -#: commands/statscmds.c:324 +#: commands/statscmds.c:321 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "вираз не може використовуватись у багатоваріативній статистиці, тому що його тип %s немає визначеного класу оператора btree за замовчуванням" -#: commands/statscmds.c:345 +#: commands/statscmds.c:342 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "при побудові статистики для одного виразу види статистики можуть не вказуватись" -#: commands/statscmds.c:374 +#: commands/statscmds.c:371 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "нерозпізнаний вид статистики \"%s\"" -#: commands/statscmds.c:403 +#: commands/statscmds.c:400 #, c-format msgid "extended statistics require at least 2 columns" msgstr "для розширеної статистики потрібно мінімум 2 стовпці" -#: commands/statscmds.c:421 +#: commands/statscmds.c:418 #, c-format msgid "duplicate column name in statistics definition" msgstr "дублювання імені стовпця у визначенні статистики" -#: commands/statscmds.c:456 +#: commands/statscmds.c:453 #, c-format msgid "duplicate expression in statistics definition" msgstr "дублікат виразу у визначенні статистики" -#: commands/statscmds.c:619 commands/tablecmds.c:8188 +#: commands/statscmds.c:628 commands/tablecmds.c:8597 #, c-format msgid "statistics target %d is too low" msgstr "мета статистики занадто мала %d" -#: commands/statscmds.c:627 commands/tablecmds.c:8196 +#: commands/statscmds.c:636 commands/tablecmds.c:8605 #, c-format msgid "lowering statistics target to %d" msgstr "мета статистики знижується до %d" -#: commands/statscmds.c:650 +#: commands/statscmds.c:660 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "об'єкт статистики \"%s.%s\" не існує, пропускається" -#: commands/subscriptioncmds.c:271 commands/subscriptioncmds.c:359 +#: commands/subscriptioncmds.c:275 commands/subscriptioncmds.c:372 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "нерозпізнаний параметр підписки: \"%s\"" -#: commands/subscriptioncmds.c:327 replication/pgoutput/pgoutput.c:395 +#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:397 #, c-format msgid "unrecognized origin value: \"%s\"" msgstr "нерозпізнане значення походження: \"%s\"" -#: commands/subscriptioncmds.c:350 +#: commands/subscriptioncmds.c:363 #, c-format msgid "invalid WAL location (LSN): %s" msgstr "неприпустиме розташування WAL (LSN): %s" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:374 commands/subscriptioncmds.c:381 -#: commands/subscriptioncmds.c:388 commands/subscriptioncmds.c:410 -#: commands/subscriptioncmds.c:426 +#: commands/subscriptioncmds.c:387 commands/subscriptioncmds.c:394 +#: commands/subscriptioncmds.c:401 commands/subscriptioncmds.c:423 +#: commands/subscriptioncmds.c:439 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s та %s є взаємовиключними опціями" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:416 commands/subscriptioncmds.c:432 +#: commands/subscriptioncmds.c:429 commands/subscriptioncmds.c:445 #, c-format msgid "subscription with %s must also set %s" msgstr "підписка з %s повинна також встановити %s" -#: commands/subscriptioncmds.c:494 +#: commands/subscriptioncmds.c:506 #, c-format msgid "could not receive list of publications from the publisher: %s" msgstr "не вдалося отримати список публікацій з сервера публікації: %s" -#: commands/subscriptioncmds.c:526 +#: commands/subscriptioncmds.c:538 #, c-format msgid "publication %s does not exist on the publisher" msgid_plural "publications %s do not exist on the publisher" @@ -9881,130 +10226,136 @@ msgstr[1] "публікацій %s не існує на сервері публ msgstr[2] "публікацій %s не існує на сервері публікації" msgstr[3] "публікацій %s не існує на сервері публікації" -#: commands/subscriptioncmds.c:614 +#: commands/subscriptioncmds.c:626 #, c-format msgid "permission denied to create subscription" msgstr "немає дозволу для створення підписки" -#: commands/subscriptioncmds.c:615 +#: commands/subscriptioncmds.c:627 #, c-format msgid "Only roles with privileges of the \"%s\" role may create subscriptions." msgstr "Тільки ролі з правами \"%s\" можуть створювати підписки." -#: commands/subscriptioncmds.c:745 commands/subscriptioncmds.c:878 -#: replication/logical/tablesync.c:1327 replication/logical/worker.c:4616 +#: commands/subscriptioncmds.c:758 commands/subscriptioncmds.c:891 +#: commands/subscriptioncmds.c:1524 replication/logical/tablesync.c:1345 +#: replication/logical/worker.c:4503 #, c-format msgid "could not connect to the publisher: %s" msgstr "не вдалося підключитись до сервера публікації: %s" -#: commands/subscriptioncmds.c:816 +#: commands/subscriptioncmds.c:829 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "на сервері публікації створений слот реплікації \"%s\"" -#: commands/subscriptioncmds.c:828 +#: commands/subscriptioncmds.c:841 #, c-format msgid "subscription was created, but is not connected" msgstr "підписка була створена, але не підключена" -#: commands/subscriptioncmds.c:829 +#: commands/subscriptioncmds.c:842 #, c-format msgid "To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription." msgstr "Щоб ініціювати реплікацію, необхідно вручну створити слот реплікації, підключити підписку і оновити підписку." -#: commands/subscriptioncmds.c:1096 commands/subscriptioncmds.c:1509 -#: commands/subscriptioncmds.c:1892 utils/cache/lsyscache.c:3642 +#: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1590 +#: commands/subscriptioncmds.c:1973 utils/cache/lsyscache.c:3684 #, c-format msgid "subscription \"%s\" does not exist" msgstr "підписка \"%s\" не існує" -#: commands/subscriptioncmds.c:1152 +#: commands/subscriptioncmds.c:1166 commands/subscriptioncmds.c:1245 #, c-format msgid "cannot set %s for enabled subscription" msgstr "неможливо встановити %s для увімкненої підписки" -#: commands/subscriptioncmds.c:1234 +#: commands/subscriptioncmds.c:1233 +#, c-format +msgid "cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "не може задати параметр \"%s\" для підписки, яка не має назви слоту" + +#: commands/subscriptioncmds.c:1279 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "увімкнути підписку, для якої не задано ім'я слота, не можна" -#: commands/subscriptioncmds.c:1278 commands/subscriptioncmds.c:1329 +#: commands/subscriptioncmds.c:1323 commands/subscriptioncmds.c:1374 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION з оновленням для відключених підписок не допускається" -#: commands/subscriptioncmds.c:1279 +#: commands/subscriptioncmds.c:1324 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "Використайте ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:1288 commands/subscriptioncmds.c:1343 +#: commands/subscriptioncmds.c:1333 commands/subscriptioncmds.c:1388 #, c-format msgid "ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled" msgstr "ALTER SUBSCRIPTION з параметрами refresh і copy_data не допускається, коли two_phase ввімкнено" -#: commands/subscriptioncmds.c:1289 +#: commands/subscriptioncmds.c:1334 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "Використайте ALTER SUBSCRIPTION ... SET PUBLICATION з параметрами refresh або copy_data, які дорівнюють false, або використайте DROP/CREATE SUBSCRIPTION." #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1345 +#: commands/subscriptioncmds.c:1390 #, c-format msgid "Use %s with refresh = false, or with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "Використовуйте %s з refresh = false, або з copy_data = false, або використовуйте DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1367 +#: commands/subscriptioncmds.c:1412 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH для відключених підписок не допускається" -#: commands/subscriptioncmds.c:1392 +#: commands/subscriptioncmds.c:1437 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase is enabled" msgstr "ALTER SUBSCRIPTION ... REFRESH з параметром copy_data не допускається, коли two_phase ввімкнено" -#: commands/subscriptioncmds.c:1393 +#: commands/subscriptioncmds.c:1438 #, c-format msgid "Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false, or use DROP/CREATE SUBSCRIPTION." msgstr "Використайте ALTER SUBSCRIPTION ... REFRESH з параметром copy_data, який дорівнює false, або використайте DROP/CREATE SUBSCRIPTION." -#: commands/subscriptioncmds.c:1428 +#: commands/subscriptioncmds.c:1473 #, c-format msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X" msgstr "пропустити розташування WAL (LSN %X/%X) повинно бути більше, ніж origin LSN %X/%X" -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1594 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "підписка \"%s\" не існує, пропускається" -#: commands/subscriptioncmds.c:1782 +#: commands/subscriptioncmds.c:1863 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "видалено слот реплікації \"%s\" на сервері публікації" -#: commands/subscriptioncmds.c:1791 commands/subscriptioncmds.c:1799 +#: commands/subscriptioncmds.c:1872 commands/subscriptioncmds.c:1880 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "не вдалося видалити слот реплікації \"%s\" на сервері публікації: %s" -#: commands/subscriptioncmds.c:1924 +#: commands/subscriptioncmds.c:2005 #, c-format msgid "subscription with OID %u does not exist" msgstr "підписки %u з OID не існує" -#: commands/subscriptioncmds.c:1995 commands/subscriptioncmds.c:2120 +#: commands/subscriptioncmds.c:2076 commands/subscriptioncmds.c:2201 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "не вдалося отримати список реплікованих таблиць із сервера публікації: %s" -#: commands/subscriptioncmds.c:2031 +#: commands/subscriptioncmds.c:2112 #, c-format msgid "subscription \"%s\" requested copy_data with origin = NONE but might copy data that had a different origin" msgstr "підписка \"%s\" запросив copy_data зі походженням = NONE, але може скопіювати дані, що мають інше походження" -#: commands/subscriptioncmds.c:2033 +#: commands/subscriptioncmds.c:2114 #, c-format msgid "The subscription being created subscribes to a publication (%s) that contains tables that are written to by other subscriptions." msgid_plural "The subscription being created subscribes to publications (%s) that contain tables that are written to by other subscriptions." @@ -10013,1885 +10364,1961 @@ msgstr[1] "Створювана підписка підписується на msgstr[2] "Створювана підписка підписується на публікації (%s), яка містить таблиці, до яких записуються інші підписки." msgstr[3] "Створювана підписка підписується на публікації (%s), яка містить таблиці, до яких записуються інші підписки." -#: commands/subscriptioncmds.c:2036 +#: commands/subscriptioncmds.c:2117 #, c-format msgid "Verify that initial data copied from the publisher tables did not come from other origins." msgstr "Переконайтеся, що вихідні дані, скопійовані з таблиць публікатора, не були отримані з інших джерел." -#: commands/subscriptioncmds.c:2142 replication/logical/tablesync.c:886 -#: replication/pgoutput/pgoutput.c:1112 +#: commands/subscriptioncmds.c:2223 replication/logical/tablesync.c:906 +#: replication/pgoutput/pgoutput.c:1117 #, c-format msgid "cannot use different column lists for table \"%s.%s\" in different publications" msgstr "використовувати різні списки стовпців для таблиці \"%s.%s\" в різних публікаціях не можна" -#: commands/subscriptioncmds.c:2192 +#: commands/subscriptioncmds.c:2273 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "не вдалося з'єднатись з сервером публікації під час спроби видалити слот реплікації \"%s\": %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:2195 +#: commands/subscriptioncmds.c:2276 #, c-format msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." msgstr "Використовуйте %s, щоб вимкнути підписку, а потім використайте %s, щоб від'єднати її від слоту." -#: commands/subscriptioncmds.c:2226 +#: commands/subscriptioncmds.c:2307 #, c-format msgid "publication name \"%s\" used more than once" msgstr "ім'я публікації \"%s\" використовується більше ніж один раз" -#: commands/subscriptioncmds.c:2270 +#: commands/subscriptioncmds.c:2351 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "публікація \"%s\" вже в підписці \"%s\"" -#: commands/subscriptioncmds.c:2284 +#: commands/subscriptioncmds.c:2365 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "публікація \"%s\" не знаходиться в підписці \"%s\"" -#: commands/subscriptioncmds.c:2295 +#: commands/subscriptioncmds.c:2376 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "не можна видалити всі публікації з підписки" -#: commands/subscriptioncmds.c:2352 +#: commands/subscriptioncmds.c:2433 #, c-format msgid "%s requires a Boolean value or \"parallel\"" msgstr "%s потребує логічне значення або \"parallel\"" -#: commands/tablecmds.c:246 commands/tablecmds.c:288 +#: commands/tablecmds.c:255 commands/tablecmds.c:297 #, c-format msgid "table \"%s\" does not exist" msgstr "таблиця \"%s\" не існує" -#: commands/tablecmds.c:247 commands/tablecmds.c:289 +#: commands/tablecmds.c:256 commands/tablecmds.c:298 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "таблиця \"%s\" не існує, пропускається" -#: commands/tablecmds.c:249 commands/tablecmds.c:291 +#: commands/tablecmds.c:258 commands/tablecmds.c:300 msgid "Use DROP TABLE to remove a table." msgstr "Використайте DROP TABLE для видалення таблиці." -#: commands/tablecmds.c:252 +#: commands/tablecmds.c:261 #, c-format msgid "sequence \"%s\" does not exist" msgstr "послідовність \"%s\" не існує" -#: commands/tablecmds.c:253 +#: commands/tablecmds.c:262 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "послідовність \"%s\" не існує, пропускається" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:264 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Використайте DROP SEQUENCE, щоб видалити послідовність." -#: commands/tablecmds.c:258 +#: commands/tablecmds.c:267 #, c-format msgid "view \"%s\" does not exist" msgstr "подання \"%s\" не існує" -#: commands/tablecmds.c:259 +#: commands/tablecmds.c:268 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "подання \"%s\" не існує, пропускається" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:270 msgid "Use DROP VIEW to remove a view." msgstr "Використайте DROP VIEW для видалення подання." -#: commands/tablecmds.c:264 +#: commands/tablecmds.c:273 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "матеріалізоване подання \"%s\" не існує" -#: commands/tablecmds.c:265 +#: commands/tablecmds.c:274 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "матеріалізоване подання \"%s\" не існує, пропускається" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:276 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Використайте DROP MATERIALIZED VIEW, щоб видалити матеріалізоване подання." -#: commands/tablecmds.c:270 commands/tablecmds.c:294 commands/tablecmds.c:19006 -#: parser/parse_utilcmd.c:2254 +#: commands/tablecmds.c:279 commands/tablecmds.c:303 commands/tablecmds.c:19617 +#: parser/parse_utilcmd.c:2251 #, c-format msgid "index \"%s\" does not exist" msgstr "індекс \"%s\" не існує" -#: commands/tablecmds.c:271 commands/tablecmds.c:295 +#: commands/tablecmds.c:280 commands/tablecmds.c:304 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "індекс \"%s\" не існує, пропускається" -#: commands/tablecmds.c:273 commands/tablecmds.c:297 +#: commands/tablecmds.c:282 commands/tablecmds.c:306 msgid "Use DROP INDEX to remove an index." msgstr "Використайте DROP INDEX, щоб видалити індекс." -#: commands/tablecmds.c:278 +#: commands/tablecmds.c:287 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" не є типом" -#: commands/tablecmds.c:279 +#: commands/tablecmds.c:288 msgid "Use DROP TYPE to remove a type." msgstr "Використайте DROP TYPE, щоб видалити тип." -#: commands/tablecmds.c:282 commands/tablecmds.c:13742 -#: commands/tablecmds.c:16207 +#: commands/tablecmds.c:291 commands/tablecmds.c:14223 +#: commands/tablecmds.c:16783 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "зовнішня таблиця \"%s\" не існує" -#: commands/tablecmds.c:283 +#: commands/tablecmds.c:292 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "зовнішня таблиця \"%s\" не існує, пропускається" -#: commands/tablecmds.c:285 +#: commands/tablecmds.c:294 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Використайте DROP FOREIGN TABLE щоб видалити сторонню таблицю." -#: commands/tablecmds.c:700 +#: commands/tablecmds.c:717 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT можна використовувати лише для тимчасових таблиць" -#: commands/tablecmds.c:731 +#: commands/tablecmds.c:748 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "неможливо створити тимчасову таблицю в межах операції з обмеженням безпеки" -#: commands/tablecmds.c:767 commands/tablecmds.c:15052 +#: commands/tablecmds.c:784 commands/tablecmds.c:15642 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "відношення \"%s\" буде успадковуватись більш ніж один раз" -#: commands/tablecmds.c:955 -#, c-format -msgid "specifying a table access method is not supported on a partitioned table" -msgstr "вказання методу доступу до таблиці не підтримується з секційною таблицею" - -#: commands/tablecmds.c:1048 +#: commands/tablecmds.c:1050 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" не секціоновано" -#: commands/tablecmds.c:1142 +#: commands/tablecmds.c:1144 #, c-format msgid "cannot partition using more than %d columns" msgstr "число стовпців в ключі секціонування не може перевищувати %d" -#: commands/tablecmds.c:1198 +#: commands/tablecmds.c:1200 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "не можна створити зовнішню секцію в секціонованій таблиці \"%s\"" -#: commands/tablecmds.c:1200 +#: commands/tablecmds.c:1202 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "Таблиця \"%s\" містить індекси, які унікальні." -#: commands/tablecmds.c:1365 +#: commands/tablecmds.c:1321 commands/tablecmds.c:13239 #, c-format -msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" -msgstr "DROP INDEX CONCURRENTLY не підтримує видалення кількох об'єктів" +msgid "too many array dimensions" +msgstr "занадто багато вимірів масиву" -#: commands/tablecmds.c:1369 +#: commands/tablecmds.c:1326 parser/parse_clause.c:774 +#: parser/parse_relation.c:1912 #, c-format -msgid "DROP INDEX CONCURRENTLY does not support CASCADE" +msgid "column \"%s\" cannot be declared SETOF" +msgstr "стовпець\"%s\" не може бути оголошений SETOF" + +#: commands/tablecmds.c:1472 +#, c-format +msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" +msgstr "DROP INDEX CONCURRENTLY не підтримує видалення кількох об'єктів" + +#: commands/tablecmds.c:1476 +#, c-format +msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY не підтримує режим CASCADE" -#: commands/tablecmds.c:1473 +#: commands/tablecmds.c:1580 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "неможливо видалити секціонований індекс \"%s\" паралельно" -#: commands/tablecmds.c:1761 +#: commands/tablecmds.c:1868 #, c-format msgid "cannot truncate only a partitioned table" msgstr "скоротити тільки секціоновану таблицю не можна" -#: commands/tablecmds.c:1762 +#: commands/tablecmds.c:1869 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Не вказуйте ключове слово ONLY або використайте TRUNCATE ONLY безпосередньо для секцій." -#: commands/tablecmds.c:1835 +#: commands/tablecmds.c:1942 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "скорочення поширюється на таблицю \"%s\"" -#: commands/tablecmds.c:2199 +#: commands/tablecmds.c:2303 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "скоротити зовнішню таблицю \"%s\" не можна" -#: commands/tablecmds.c:2256 +#: commands/tablecmds.c:2360 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "тимчасові таблиці інших сеансів не можна скоротити" -#: commands/tablecmds.c:2488 commands/tablecmds.c:14949 +#: commands/tablecmds.c:2589 commands/tablecmds.c:15539 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "успадкування від секціонованої таблиці \"%s\" не допускається" -#: commands/tablecmds.c:2493 +#: commands/tablecmds.c:2594 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "успадкування від розділу \"%s\" не допускається" -#: commands/tablecmds.c:2501 parser/parse_utilcmd.c:2484 -#: parser/parse_utilcmd.c:2626 +#: commands/tablecmds.c:2602 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:2513 +#: commands/tablecmds.c:2614 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "створити тимчасове відношення як секцію постійного відношення\"%s\" не можна" -#: commands/tablecmds.c:2522 commands/tablecmds.c:14928 +#: commands/tablecmds.c:2623 commands/tablecmds.c:15518 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "тимчасове відношення \"%s\" не може успадковуватись" -#: commands/tablecmds.c:2532 commands/tablecmds.c:14936 +#: commands/tablecmds.c:2633 commands/tablecmds.c:15526 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "успадкування від тимчасового відношення іншого сеансу неможливе" -#: commands/tablecmds.c:2585 +#: commands/tablecmds.c:2774 commands/tablecmds.c:2828 +#: commands/tablecmds.c:12922 parser/parse_utilcmd.c:1265 +#: parser/parse_utilcmd.c:1308 parser/parse_utilcmd.c:1735 +#: parser/parse_utilcmd.c:1843 #, c-format -msgid "merging multiple inherited definitions of column \"%s\"" -msgstr "злиття декількох успадкованих визначень стовпця \"%s\"" +msgid "cannot convert whole-row table reference" +msgstr "перетворити посилання на тип усього рядка таблиці не можна" -#: commands/tablecmds.c:2597 +#: commands/tablecmds.c:2775 parser/parse_utilcmd.c:1266 #, c-format -msgid "inherited column \"%s\" has a type conflict" -msgstr "конфлікт типів в успадкованому стовпці \"%s\"" +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "Вираз генерації для стовпця \"%s\" містить посилання на весь рядок на таблицю \"%s\"." -#: commands/tablecmds.c:2599 commands/tablecmds.c:2628 -#: commands/tablecmds.c:2647 commands/tablecmds.c:2919 -#: commands/tablecmds.c:2955 commands/tablecmds.c:2971 -#: 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:2829 parser/parse_utilcmd.c:1309 #, c-format -msgid "%s versus %s" -msgstr "%s проти %s" +msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "Обмеження \"%s\" посилається на тип усього рядка в таблиці \"%s\"." -#: commands/tablecmds.c:2612 +#: commands/tablecmds.c:2939 commands/tablecmds.c:3210 #, c-format -msgid "inherited column \"%s\" has a collation conflict" -msgstr "конфлікт правил сортування в успадкованому стовпці \"%s\"" +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує за замовчуванням" -#: commands/tablecmds.c:2614 commands/tablecmds.c:2935 -#: commands/tablecmds.c:6849 +#: commands/tablecmds.c:2944 commands/tablecmds.c:3215 #, c-format -msgid "\"%s\" versus \"%s\"" -msgstr "\"%s\" проти \"%s\"" +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує ідентичність" -#: commands/tablecmds.c:2626 +#: commands/tablecmds.c:2952 commands/tablecmds.c:3223 #, c-format -msgid "inherited column \"%s\" has a storage parameter conflict" -msgstr "конфлікт параметрів зберігання в успадкованому стовпці \"%s\"" +msgid "child column \"%s\" specifies generation expression" +msgstr "дочірній стовпець \"%s\" визначає вираз генерації" -#: commands/tablecmds.c:2645 commands/tablecmds.c:2969 +#: commands/tablecmds.c:2954 commands/tablecmds.c:3225 #, c-format -msgid "column \"%s\" has a compression method conflict" -msgstr "конфлікт методів стиснення в стовпці \"%s\"" +msgid "A child table column cannot be generated unless its parent column is." +msgstr "Стовпець дочірньої таблиці не може бути створений, якщо не створено стовпець батьківської таблиці." -#: commands/tablecmds.c:2661 +#: commands/tablecmds.c:3000 #, c-format -msgid "inherited column \"%s\" has a generation conflict" -msgstr "конфлікт генерування в успадкованому стовпці \"%s\"" +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "стовпець \"%s\" успадковує конфліктуючи вирази генерації" -#: commands/tablecmds.c:2767 commands/tablecmds.c:2822 -#: commands/tablecmds.c:12468 parser/parse_utilcmd.c:1307 -#: parser/parse_utilcmd.c:1350 parser/parse_utilcmd.c:1749 -#: parser/parse_utilcmd.c:1857 +#: commands/tablecmds.c:3002 #, c-format -msgid "cannot convert whole-row table reference" -msgstr "перетворити посилання на тип усього рядка таблиці не можна" +msgid "To resolve the conflict, specify a generation expression explicitly." +msgstr "Щоб вирішити цей конфлікт, явно вкажіть вираз генерації." -#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1308 +#: commands/tablecmds.c:3006 #, c-format -msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "Вираз генерації для стовпця \"%s\" містить посилання на весь рядок на таблицю \"%s\"." +msgid "column \"%s\" inherits conflicting default values" +msgstr "стовпець \"%s\" успадковує конфліктні значення за замовчуванням" -#: commands/tablecmds.c:2823 parser/parse_utilcmd.c:1351 +#: commands/tablecmds.c:3008 #, c-format -msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "Обмеження \"%s\" посилається на тип усього рядка в таблиці \"%s\"." +msgid "To resolve the conflict, specify a default explicitly." +msgstr "Для усунення конфлікту вкажіть бажане значення за замовчуванням." + +#: commands/tablecmds.c:3063 +#, c-format +msgid "check constraint name \"%s\" appears multiple times but with different expressions" +msgstr "ім'я перевірочного обмеження \"%s\" з'являється декілька разів, але з різними виразами" -#: commands/tablecmds.c:2901 +#: commands/tablecmds.c:3114 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "злиття стовпця \"%s\" з успадкованим визначенням" -#: commands/tablecmds.c:2905 +#: commands/tablecmds.c:3118 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "переміщення і злиття стовпця \"%s\" з успадкованим визначенням" -#: commands/tablecmds.c:2906 +#: commands/tablecmds.c:3119 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Визначений користувачем стовпець переміщений в позицію успадкованого стовпця." -#: commands/tablecmds.c:2917 +#: commands/tablecmds.c:3131 #, c-format msgid "column \"%s\" has a type conflict" msgstr "конфлікт типів в стовпці \"%s\"" -#: commands/tablecmds.c:2933 -#, c-format -msgid "column \"%s\" has a collation conflict" -msgstr "конфлікт правил сортування в стовпці \"%s\"" - -#: commands/tablecmds.c:2953 +#: commands/tablecmds.c:3133 commands/tablecmds.c:3167 +#: commands/tablecmds.c:3183 commands/tablecmds.c:3290 +#: commands/tablecmds.c:3323 commands/tablecmds.c:3339 +#: 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 #, c-format -msgid "column \"%s\" has a storage parameter conflict" -msgstr "конфлікт параметрів зберігання в стовпці \"%s\"" +msgid "%s versus %s" +msgstr "%s проти %s" -#: commands/tablecmds.c:2999 commands/tablecmds.c:3086 +#: commands/tablecmds.c:3145 #, c-format -msgid "column \"%s\" inherits from generated column but specifies default" -msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує за замовчуванням" +msgid "column \"%s\" has a collation conflict" +msgstr "конфлікт правил сортування в стовпці \"%s\"" -#: commands/tablecmds.c:3004 commands/tablecmds.c:3091 +#: commands/tablecmds.c:3147 commands/tablecmds.c:3309 +#: commands/tablecmds.c:7057 #, c-format -msgid "column \"%s\" inherits from generated column but specifies identity" -msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує ідентичність" +msgid "\"%s\" versus \"%s\"" +msgstr "\"%s\" проти \"%s\"" -#: commands/tablecmds.c:3012 commands/tablecmds.c:3099 +#: commands/tablecmds.c:3165 #, c-format -msgid "child column \"%s\" specifies generation expression" -msgstr "дочірній стовпець \"%s\" визначає вираз генерації" +msgid "column \"%s\" has a storage parameter conflict" +msgstr "конфлікт параметрів зберігання в стовпці \"%s\"" -#: commands/tablecmds.c:3014 commands/tablecmds.c:3101 +#: commands/tablecmds.c:3181 commands/tablecmds.c:3337 #, c-format -msgid "A child table column cannot be generated unless its parent column is." -msgstr "Стовпець дочірньої таблиці не може бути створений, якщо не створено стовпець батьківської таблиці." +msgid "column \"%s\" has a compression method conflict" +msgstr "конфлікт методів стиснення в стовпці \"%s\"" -#: commands/tablecmds.c:3147 +#: commands/tablecmds.c:3276 #, c-format -msgid "column \"%s\" inherits conflicting generation expressions" -msgstr "стовпець \"%s\" успадковує конфліктуючи вирази генерації" +msgid "merging multiple inherited definitions of column \"%s\"" +msgstr "злиття декількох успадкованих визначень стовпця \"%s\"" -#: commands/tablecmds.c:3149 +#: commands/tablecmds.c:3288 #, c-format -msgid "To resolve the conflict, specify a generation expression explicitly." -msgstr "Щоб вирішити цей конфлікт, явно вкажіть вираз генерації." +msgid "inherited column \"%s\" has a type conflict" +msgstr "конфлікт типів в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:3153 +#: commands/tablecmds.c:3307 #, c-format -msgid "column \"%s\" inherits conflicting default values" -msgstr "стовпець \"%s\" успадковує конфліктні значення за замовчуванням" +msgid "inherited column \"%s\" has a collation conflict" +msgstr "конфлікт правил сортування в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:3155 +#: commands/tablecmds.c:3321 #, c-format -msgid "To resolve the conflict, specify a default explicitly." -msgstr "Для усунення конфлікту вкажіть бажане значення за замовчуванням." +msgid "inherited column \"%s\" has a storage parameter conflict" +msgstr "конфлікт параметрів зберігання в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:3205 +#: commands/tablecmds.c:3349 #, c-format -msgid "check constraint name \"%s\" appears multiple times but with different expressions" -msgstr "ім'я перевірочного обмеження \"%s\" з'являється декілька разів, але з різними виразами" +msgid "inherited column \"%s\" has a generation conflict" +msgstr "конфлікт генерування в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:3418 +#: commands/tablecmds.c:3580 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "переміщувати тимчасові таблиці інших сеансів не можна" -#: commands/tablecmds.c:3488 +#: commands/tablecmds.c:3650 #, c-format msgid "cannot rename column of typed table" msgstr "перейменувати стовпець типізованої таблиці не можна" -#: commands/tablecmds.c:3507 +#: commands/tablecmds.c:3669 #, c-format msgid "cannot rename columns of relation \"%s\"" msgstr "перейменувати стовпці відношення %s не можна" -#: commands/tablecmds.c:3602 +#: commands/tablecmds.c:3764 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "успадкований стовпець \"%s\" повинен бути перейменований в дочірніх таблицях також" -#: commands/tablecmds.c:3634 +#: commands/tablecmds.c:3796 #, c-format msgid "cannot rename system column \"%s\"" msgstr "не можна перейменувати системний стовпець \"%s\"" -#: commands/tablecmds.c:3649 +#: commands/tablecmds.c:3811 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "не можна перейменувати успадкований стовпець \"%s\"" -#: commands/tablecmds.c:3801 +#: commands/tablecmds.c:3963 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "успадковане обмеження \"%s\" повинно бути перейменовано в дочірніх таблицях також" -#: commands/tablecmds.c:3808 +#: commands/tablecmds.c:3970 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "не можна перейменувати успадковане обмеження \"%s\"" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4105 +#: commands/tablecmds.c:4267 #, 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:4114 +#: commands/tablecmds.c:4276 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "не можна виконати %s \"%s\", тому що з цим об'єктом зв'язані очікуванні події тригерів" -#: commands/tablecmds.c:4581 +#: commands/tablecmds.c:4302 +#, c-format +msgid "cannot alter temporary tables of other sessions" +msgstr "не можна змінювати тимчасові таблиці з інших сеансів" + +#: commands/tablecmds.c:4775 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "не можна змінити розділ \"%s\" з неповним відключенням" -#: commands/tablecmds.c:4774 commands/tablecmds.c:4789 +#: commands/tablecmds.c:4979 commands/tablecmds.c:4994 #, c-format msgid "cannot change persistence setting twice" msgstr "неможливо двічі змінити параметр стійкості" -#: commands/tablecmds.c:4810 -#, c-format -msgid "cannot change access method of a partitioned table" -msgstr "неможливо змінити метод доступу секціонованої таблиці" - -#: commands/tablecmds.c:4816 +#: commands/tablecmds.c:5015 #, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" msgstr "неможливо мати декілька підкоманд SET ACCESS METHOD" -#: commands/tablecmds.c:5537 +#: commands/tablecmds.c:5745 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "перезаписати системне відношення \"%s\" не можна" -#: commands/tablecmds.c:5543 +#: commands/tablecmds.c:5751 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "перезаписати таблицю \"%s\", що використовується як таблиця каталогу, не можна" -#: commands/tablecmds.c:5553 +#: commands/tablecmds.c:5763 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "неможливо перезаписати тимчасові таблиці інших сеансів" -#: commands/tablecmds.c:6048 +#: commands/tablecmds.c:6258 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "стовпець \"%s\" відношення \"%s\" містить null значення" -#: commands/tablecmds.c:6065 +#: commands/tablecmds.c:6275 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "перевірка обмеження \"%s\" відношення \"%s\" порушується деяким рядком" -#: commands/tablecmds.c:6084 partitioning/partbounds.c:3388 +#: commands/tablecmds.c:6294 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:6090 +#: commands/tablecmds.c:6300 #, 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:6352 +#: commands/tablecmds.c:6565 #, c-format msgid "ALTER action %s cannot be performed on relation \"%s\"" msgstr "Дію ALTER %s не можна виконати на відношенні \"%s\"" -#: commands/tablecmds.c:6607 commands/tablecmds.c:6614 +#: commands/tablecmds.c:6820 commands/tablecmds.c:6827 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "неможливо змінити тип \"%s\", тому що стовпець \"%s.%s\" використовує його" -#: commands/tablecmds.c:6621 +#: commands/tablecmds.c:6834 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "неможливо змінити сторонню таблицю \"%s\", тому що стовпець \"%s.%s\" використовує тип її рядка" -#: commands/tablecmds.c:6628 +#: commands/tablecmds.c:6841 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "неможливо змінити таблицю \"%s\", тому що стовпець \"%s.%s\" використовує тип її рядка" -#: commands/tablecmds.c:6684 +#: commands/tablecmds.c:6897 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "неможливо змінити тип \"%s\", тому що це тип типізованої таблиці" -#: commands/tablecmds.c:6686 +#: commands/tablecmds.c:6899 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Щоб змінити типізовані таблиці, використайте також ALTER ... CASCADE." -#: commands/tablecmds.c:6732 +#: commands/tablecmds.c:6945 #, c-format msgid "type %s is not a composite type" msgstr "тип %s не є складеним" -#: commands/tablecmds.c:6759 +#: commands/tablecmds.c:6972 #, c-format msgid "cannot add column to typed table" msgstr "неможливо додати стовпець до типізованої таблиці" -#: commands/tablecmds.c:6812 +#: commands/tablecmds.c:7020 #, c-format msgid "cannot add column to a partition" msgstr "неможливо додати стовпець до розділу" -#: commands/tablecmds.c:6841 commands/tablecmds.c:15179 +#: commands/tablecmds.c:7049 commands/tablecmds.c:15757 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "дочірня таблиця \"%s\" має інший тип для стовпця \"%s\"" -#: commands/tablecmds.c:6847 commands/tablecmds.c:15186 +#: commands/tablecmds.c:7055 commands/tablecmds.c:15763 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "дочірня таблиця \"%s\" має інше правило сортування для стовпця \"%s\"" -#: commands/tablecmds.c:6865 +#: commands/tablecmds.c:7073 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "об'єднання визначення стовпця \"%s\" для нащадка \"%s\"" -#: commands/tablecmds.c:6912 +#: commands/tablecmds.c:7126 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "неможливо додати стовпець ідентифікації в таблицю, яка має дочірні таблиці" -#: commands/tablecmds.c:7163 +#: commands/tablecmds.c:7339 #, c-format msgid "column must be added to child tables too" msgstr "стовпець також повинен бути доданий до дочірніх таблиць" -#: commands/tablecmds.c:7241 +#: commands/tablecmds.c:7417 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "стовпець \"%s\" відношення \"%s\" вже існує, пропускається" -#: commands/tablecmds.c:7248 +#: commands/tablecmds.c:7424 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "стовпець \"%s\" відношення \"%s\" вже існує" -#: commands/tablecmds.c:7314 commands/tablecmds.c:12106 +#: commands/tablecmds.c:7490 commands/tablecmds.c:12550 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "неможливо видалити обмеження тільки з секціонованої таблиці, коли існують секції" -#: commands/tablecmds.c:7315 commands/tablecmds.c:7632 -#: commands/tablecmds.c:8601 commands/tablecmds.c:12107 +#: commands/tablecmds.c:7491 commands/tablecmds.c:7805 +#: commands/tablecmds.c:7983 commands/tablecmds.c:8090 +#: commands/tablecmds.c:8207 commands/tablecmds.c:9026 +#: commands/tablecmds.c:12551 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Не вказуйте ключове слово ONLY." -#: commands/tablecmds.c:7352 commands/tablecmds.c:7558 -#: commands/tablecmds.c:7700 commands/tablecmds.c:7818 -#: commands/tablecmds.c:7912 commands/tablecmds.c:7971 -#: commands/tablecmds.c:8090 commands/tablecmds.c:8229 -#: commands/tablecmds.c:8299 commands/tablecmds.c:8433 -#: commands/tablecmds.c:12261 commands/tablecmds.c:13765 -#: commands/tablecmds.c:16296 +#: commands/tablecmds.c:7527 commands/tablecmds.c:7731 +#: commands/tablecmds.c:7873 commands/tablecmds.c:8005 +#: commands/tablecmds.c:8134 commands/tablecmds.c:8228 +#: commands/tablecmds.c:8329 commands/tablecmds.c:8486 +#: commands/tablecmds.c:8639 commands/tablecmds.c:8720 +#: commands/tablecmds.c:8854 commands/tablecmds.c:12704 +#: commands/tablecmds.c:14246 commands/tablecmds.c:16872 #, c-format msgid "cannot alter system column \"%s\"" msgstr "не можна змінити системний стовпець \"%s\"" -#: commands/tablecmds.c:7358 commands/tablecmds.c:7706 +#: commands/tablecmds.c:7533 commands/tablecmds.c:7879 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "стовпець \"%s\" відношення \"%s\" є стовпцем ідентифікації" -#: commands/tablecmds.c:7401 +#: commands/tablecmds.c:7574 #, c-format msgid "column \"%s\" is in a primary key" msgstr "стовпець \"%s\" входить до первинного ключа" -#: commands/tablecmds.c:7406 +#: commands/tablecmds.c:7579 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "стовпець \"%s\" в індексі, що використовується як ідентифікація репліки" -#: commands/tablecmds.c:7429 +#: commands/tablecmds.c:7602 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "стовпець \"%s\" в батьківській таблиці позначений як NOT NULL" -#: commands/tablecmds.c:7629 commands/tablecmds.c:9085 +#: commands/tablecmds.c:7802 commands/tablecmds.c:9510 #, c-format msgid "constraint must be added to child tables too" msgstr "обмеження повинно бути додано у дочірні таблиці також" -#: commands/tablecmds.c:7630 +#: commands/tablecmds.c:7803 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Стовпець \"%s\" відношення \"%s\" вже не NOT NULL." -#: commands/tablecmds.c:7715 +#: commands/tablecmds.c:7888 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "стовпець \"%s\" відношення \"%s\" є згенерованим стовпцем" -#: commands/tablecmds.c:7829 +#: commands/tablecmds.c:7982 +#, c-format +msgid "cannot add identity to a column of only the partitioned table" +msgstr "не може додати ідентифікатор до стовпця лише розділеної таблиці" + +#: commands/tablecmds.c:7988 +#, c-format +msgid "cannot add identity to a column of a partition" +msgstr "не може додати ідентифікатор до стовпця розділу" + +#: commands/tablecmds.c:8016 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "стовпець \"%s\" відношення \"%s\" повинен бути оголошений як NOT NULL, щоб додати ідентифікацію" -#: commands/tablecmds.c:7835 +#: commands/tablecmds.c:8022 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "стовпець \"%s\" відношення \"%s\" вже є стовпцем ідентифікації" -#: commands/tablecmds.c:7841 +#: commands/tablecmds.c:8028 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "стовпець \"%s\" відношення \"%s\" вже має значення за замовчуванням" -#: commands/tablecmds.c:7918 commands/tablecmds.c:7979 +#: commands/tablecmds.c:8089 +#, c-format +msgid "cannot change identity column of only the partitioned table" +msgstr "не можна змінювати стовпець ідентичності лише в розбитій на розділи таблиці" + +#: commands/tablecmds.c:8095 +#, c-format +msgid "cannot change identity column of a partition" +msgstr "не можна змінити стовпець ідентичності розділу" + +#: commands/tablecmds.c:8140 commands/tablecmds.c:8236 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "стовпець \"%s\" відношення \"%s\" не є стовпцем ідентифікації" -#: commands/tablecmds.c:7984 +#: commands/tablecmds.c:8206 +#, c-format +msgid "cannot drop identity from a column of only the partitioned table" +msgstr "не можна вилучити ідентифікатор зі стовпця лише розбитої на розділи таблиці" + +#: commands/tablecmds.c:8212 +#, c-format +msgid "cannot drop identity from a column of a partition" +msgstr "не можна вилучити ідентифікатор зі стовпця розділу" + +#: commands/tablecmds.c:8241 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "стовпець \"%s\" відношення \"%s\" не є стовпцем ідентифікації, пропускається" -#: commands/tablecmds.c:8037 +#: commands/tablecmds.c:8335 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a generated column" +msgstr "стовпець \"%s\" відношення \"%s\" не є згенерованим стовпцем" + +#: commands/tablecmds.c:8433 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION повинен бути застосований і до дочірніх таблиць" -#: commands/tablecmds.c:8059 +#: commands/tablecmds.c:8455 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "не можна видалити вираз генерації з успадкованого стовпця" -#: commands/tablecmds.c:8098 +#: commands/tablecmds.c:8494 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "стовпець \"%s\" відношення \"%s\" не є збереженим згенерованим стовпцем" -#: commands/tablecmds.c:8103 +#: commands/tablecmds.c:8499 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "стовпець \"%s\" відношення \"%s\" не є збереженим згенерованим стовпцем, пропускається" -#: commands/tablecmds.c:8176 +#: commands/tablecmds.c:8577 #, c-format msgid "cannot refer to non-index column by number" msgstr "не можна посилатись на неіндексований стовпець за номером" -#: commands/tablecmds.c:8219 +#: commands/tablecmds.c:8629 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "стовпець з номером %d відношення %s не існує" -#: commands/tablecmds.c:8238 +#: commands/tablecmds.c:8648 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "змінити статистику включеного стовпця \"%s\" індексу \"%s\" не можна" -#: commands/tablecmds.c:8243 +#: commands/tablecmds.c:8653 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "змінити статистику невираженого стовпця \"%s\" індексу \"%s\" не можна" -#: commands/tablecmds.c:8245 +#: commands/tablecmds.c:8655 #, c-format msgid "Alter statistics on table column instead." msgstr "Замість цього змініть статистику стовпця в таблиці." -#: commands/tablecmds.c:8480 +#: commands/tablecmds.c:8901 #, c-format msgid "cannot drop column from typed table" msgstr "не можна видалити стовпець з типізованої таблиці" -#: commands/tablecmds.c:8539 +#: commands/tablecmds.c:8964 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "стовпець \"%s\" відношення \"%s\" не існує, пропускається" -#: commands/tablecmds.c:8552 +#: commands/tablecmds.c:8977 #, c-format msgid "cannot drop system column \"%s\"" msgstr "не можна видалити системний стовпець \"%s\"" -#: commands/tablecmds.c:8562 +#: commands/tablecmds.c:8987 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "не можна видалити успадкований стовпець \"%s\"" -#: commands/tablecmds.c:8575 +#: commands/tablecmds.c:9000 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "не можна видалити стовпець \"%s\", тому що він є частиною ключа секції відношення \"%s\"" -#: commands/tablecmds.c:8600 +#: commands/tablecmds.c:9025 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "видалити стовпець тільки з секціонованої таблиці, коли існують секції, не можна" -#: commands/tablecmds.c:8805 +#: commands/tablecmds.c:9230 #, 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:8830 +#: commands/tablecmds.c:9255 #, 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:9167 +#: commands/tablecmds.c:9592 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "не можна використати ONLY для стороннього ключа в секціонованій таблиці \"%s\", який посилається на відношення \"%s\"" -#: commands/tablecmds.c:9173 +#: commands/tablecmds.c:9598 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "не можна додати сторонній ключ з характеристикою NOT VALID в секціоновану таблицю \"%s\", який посилається на відношення \"%s\"" -#: commands/tablecmds.c:9176 +#: commands/tablecmds.c:9601 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Ця функція ще не підтримується з секціонованими таблицями." -#: commands/tablecmds.c:9183 commands/tablecmds.c:9639 +#: commands/tablecmds.c:9608 commands/tablecmds.c:10064 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "вказане відношення \"%s\" не є таблицею" -#: commands/tablecmds.c:9206 +#: commands/tablecmds.c:9631 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "обмеження в постійних таблицях можуть посилатись лише на постійні таблиці" -#: commands/tablecmds.c:9213 +#: commands/tablecmds.c:9638 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "обмеження в нежурнальованих таблицях можуть посилатись тільки на постійні або нежурналюємі таблиці" -#: commands/tablecmds.c:9219 +#: commands/tablecmds.c:9644 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "обмеження в тимчасових таблицях можуть посилатись лише на тимчасові таблиці" -#: commands/tablecmds.c:9223 +#: commands/tablecmds.c:9648 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "обмеження в тимчасових таблицях повинні посилатись лише на тичасові таблиці поточного сеансу" -#: commands/tablecmds.c:9287 commands/tablecmds.c:9293 +#: commands/tablecmds.c:9712 commands/tablecmds.c:9718 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "неприпустима дія %s для обмеження зовнішнього ключа, який містить згеренований стовпець" -#: commands/tablecmds.c:9309 +#: commands/tablecmds.c:9734 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "число стовпців в джерелі і призначенні зовнішнього ключа не збігається" -#: commands/tablecmds.c:9416 +#: commands/tablecmds.c:9841 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "обмеження зовнішнього ключа \"%s\" не можна реалізувати" -#: commands/tablecmds.c:9418 +#: commands/tablecmds.c:9843 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Стовпці ключа \"%s\" і \"%s\" містять несумісні типи: %s і %s." -#: commands/tablecmds.c:9575 +#: commands/tablecmds.c:10000 #, c-format msgid "column \"%s\" referenced in ON DELETE SET action must be part of foreign key" msgstr "стовпець \"%s\" вказаний у дії ON DELETE SET повинен бути частиною зовнішнього ключа" -#: commands/tablecmds.c:9849 commands/tablecmds.c:10319 -#: parser/parse_utilcmd.c:800 parser/parse_utilcmd.c:929 +#: commands/tablecmds.c:10274 commands/tablecmds.c:10761 +#: 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:10872 commands/tablecmds.c:11150 -#: commands/tablecmds.c:12063 commands/tablecmds.c:12138 +#: commands/tablecmds.c:10744 +#, c-format +msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" +msgstr "не можна підключити таблицю \"%s\" в якості секції, тому що на неї посилається сторонній ключ \"%s\"" + +#: commands/tablecmds.c:11314 commands/tablecmds.c:11595 +#: commands/tablecmds.c:12507 commands/tablecmds.c:12581 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "обмеження \"%s\" відношення \"%s\" не існує" -#: commands/tablecmds.c:10879 +#: commands/tablecmds.c:11321 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "обмеження \"%s\" відношення \"%s\" не є обмеженням зовнішнього ключа" -#: commands/tablecmds.c:10917 +#: commands/tablecmds.c:11359 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "не можна змінити обмеження \"%s\" відношення \"%s\"" -#: commands/tablecmds.c:10920 +#: commands/tablecmds.c:11362 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "Обмеження \"%s\" походить з обмеження \"%s\" відношення \"%s\"." -#: commands/tablecmds.c:10922 +#: commands/tablecmds.c:11364 #, c-format msgid "You may alter the constraint it derives from instead." msgstr "Натомість ви можете змінити початкове обмеження." -#: commands/tablecmds.c:11158 +#: commands/tablecmds.c:11603 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "обмеження \"%s\" відношення \"%s\" не є зовнішнім ключем або перевіркою обмеженням " -#: commands/tablecmds.c:11235 +#: commands/tablecmds.c:11680 #, c-format msgid "constraint must be validated on child tables too" msgstr "обмеження повинно дотримуватися в дочірніх таблицях також" -#: commands/tablecmds.c:11322 +#: commands/tablecmds.c:11767 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "стовпець \"%s\", вказаний в обмеженні зовнішнього ключа, не існує" -#: commands/tablecmds.c:11328 +#: commands/tablecmds.c:11773 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "в зовнішніх ключах не можна використовувати системні стовпці" -#: commands/tablecmds.c:11332 +#: commands/tablecmds.c:11777 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "у зовнішньому ключі не може бути більш ніж %d ключів" -#: commands/tablecmds.c:11397 +#: commands/tablecmds.c:11842 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "використовувати затримуваний первинний ключ в цільовій зовнішній таблиці \"%s\" не можна" -#: commands/tablecmds.c:11414 +#: commands/tablecmds.c:11859 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "у цільовій зовнішній таблиці \"%s\" немає первинного ключа" -#: commands/tablecmds.c:11482 +#: commands/tablecmds.c:11927 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "у списку стовпців зовнішнього ключа не повинно бути повторень" -#: commands/tablecmds.c:11574 +#: commands/tablecmds.c:12019 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "використовувати затримане обмеження унікальності в цільовій зовнішній таблиці \"%s\" не можна" -#: commands/tablecmds.c:11579 +#: commands/tablecmds.c:12024 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "у цільовій зовнішній таблиці \"%s\" немає обмеження унікальності, відповідного даним ключам" -#: commands/tablecmds.c:12019 +#: commands/tablecmds.c:12463 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "видалити успадковане обмеження \"%s\" відношення \"%s\" не можна" -#: commands/tablecmds.c:12069 +#: commands/tablecmds.c:12513 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "обмеження \"%s\" відношення \"%s\" не існує, пропускається" -#: commands/tablecmds.c:12245 +#: commands/tablecmds.c:12688 #, c-format msgid "cannot alter column type of typed table" msgstr "змінити тип стовпця в типізованій таблиці не можна" -#: commands/tablecmds.c:12272 +#: commands/tablecmds.c:12714 +#, c-format +msgid "cannot specify USING when altering type of generated column" +msgstr "не можна вказати USING під час зміни типу згенерованого стовпця" + +#: commands/tablecmds.c:12715 commands/tablecmds.c:17918 +#: commands/tablecmds.c:18008 commands/trigger.c:656 +#: rewrite/rewriteHandler.c:935 rewrite/rewriteHandler.c:970 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "Стовпець \"%s\" є згенерованим стовпцем." + +#: commands/tablecmds.c:12725 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "змінити успадкований стовпець \"%s\" не можна" -#: commands/tablecmds.c:12281 +#: commands/tablecmds.c:12734 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "не можна змінити стовпець \"%s\", тому що він є частиною ключа секції відношення \"%s\"" -#: commands/tablecmds.c:12331 +#: commands/tablecmds.c:12784 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "результати речення USING для стовпця \"%s\" не можна автоматично наведено для типу %s" -#: commands/tablecmds.c:12334 +#: commands/tablecmds.c:12787 #, c-format msgid "You might need to add an explicit cast." msgstr "Можливо, необхідно додати явне приведення типу." -#: commands/tablecmds.c:12338 +#: commands/tablecmds.c:12791 #, 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:12341 +#: commands/tablecmds.c:12795 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Можливо, необхідно вказати \"USING %s::%s\"." -#: commands/tablecmds.c:12440 +#: commands/tablecmds.c:12894 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "не можна змінити успадкований стовпець \"%s\" відношення \"%s\"" -#: commands/tablecmds.c:12469 +#: commands/tablecmds.c:12923 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "Вираз USING містить посилання на тип усього рядка таблиці." -#: commands/tablecmds.c:12480 +#: commands/tablecmds.c:12934 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "тип успадкованого стовпця \"%s\" повинен бути змінений і в дочірніх таблицях" -#: commands/tablecmds.c:12605 +#: commands/tablecmds.c:13059 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "не можна змінити тип стовпця \"%s\" двічі" -#: commands/tablecmds.c:12643 +#: commands/tablecmds.c:13097 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "вираз генерації для стовпця \"%s\" не можна автоматично привести до типу %s" -#: commands/tablecmds.c:12648 +#: commands/tablecmds.c:13102 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "значення за замовчуванням для стовпця \"%s\" не можна автоматично привести до типу %s" -#: commands/tablecmds.c:12729 +#: commands/tablecmds.c:13406 #, c-format -msgid "cannot alter type of a column used by a view or rule" -msgstr "змінити тип стовпця, залученого в поданні або правилі, не можна" +msgid "cannot alter type of a column used by a function or procedure" +msgstr "неможливо змінити тип стовпця, який використовується функцією або процедурою" -#: commands/tablecmds.c:12730 commands/tablecmds.c:12749 -#: commands/tablecmds.c:12767 +#: commands/tablecmds.c:13407 commands/tablecmds.c:13422 +#: commands/tablecmds.c:13442 commands/tablecmds.c:13461 +#: commands/tablecmds.c:13520 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s залежить від стовпця \"%s\"" -#: commands/tablecmds.c:12748 +#: commands/tablecmds.c:13421 +#, c-format +msgid "cannot alter type of a column used by a view or rule" +msgstr "змінити тип стовпця, залученого в поданні або правилі, не можна" + +#: commands/tablecmds.c:13441 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "неможливо змінити тип стовпця, що використовується у визначенні тригеру" -#: commands/tablecmds.c:12766 +#: commands/tablecmds.c:13460 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "неможливо змінити тип стовпця, що використовується у визначенні політики" -#: commands/tablecmds.c:12797 +#: commands/tablecmds.c:13491 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "змінити тип стовпця, який використовується згенерованим стовпцем, не можна" -#: commands/tablecmds.c:12798 +#: commands/tablecmds.c:13492 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Стовпець \"%s\" використовується згенерованим стовпцем \"%s\"." -#: commands/tablecmds.c:13873 commands/tablecmds.c:13885 +#: commands/tablecmds.c:13519 +#, c-format +msgid "cannot alter type of a column used by a publication WHERE clause" +msgstr "неможливо змінити тип стовпця, який використовується публікацією в реченні WHERE" + +#: commands/tablecmds.c:14354 commands/tablecmds.c:14366 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "неможливо змінити власника індексу \"%s\"" -#: commands/tablecmds.c:13875 commands/tablecmds.c:13887 +#: commands/tablecmds.c:14356 commands/tablecmds.c:14368 #, c-format msgid "Change the ownership of the index's table instead." msgstr "Замість цього змініть власника таблиці, що містить цей індекс." -#: commands/tablecmds.c:13901 +#: commands/tablecmds.c:14382 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "неможливо змінити власника послідовності \"%s\"" -#: commands/tablecmds.c:13926 +#: commands/tablecmds.c:14407 #, c-format msgid "cannot change owner of relation \"%s\"" msgstr "неможливо змінити власника відношення \"%s\"" -#: commands/tablecmds.c:14288 +#: commands/tablecmds.c:14874 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "в одній інструкції не може бути декілька підкоманд SET TABLESPACE" -#: commands/tablecmds.c:14365 +#: commands/tablecmds.c:14951 #, c-format msgid "cannot set options for relation \"%s\"" msgstr "неможливо встановити параметри відношення \"%s\"" -#: commands/tablecmds.c:14399 commands/view.c:445 +#: commands/tablecmds.c:14985 commands/view.c:440 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION підтримується лише з автооновлюваними поданнями" -#: commands/tablecmds.c:14649 +#: commands/tablecmds.c:15235 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "у табличних просторах існують лише таблиці, індекси та матеріалізовані подання" -#: commands/tablecmds.c:14661 +#: commands/tablecmds.c:15247 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "переміщувати відношення у або з табличного простору pg_global не можна" -#: commands/tablecmds.c:14753 +#: commands/tablecmds.c:15339 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "переривання через блокування відношення \"%s.%s\" неможливе" -#: commands/tablecmds.c:14769 +#: commands/tablecmds.c:15355 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr " табличному просторі \"%s\" не знайдені відповідні відносини" -#: commands/tablecmds.c:14887 +#: commands/tablecmds.c:15477 #, c-format msgid "cannot change inheritance of typed table" msgstr "змінити успадкування типізованої таблиці не можна" -#: commands/tablecmds.c:14892 commands/tablecmds.c:15410 +#: commands/tablecmds.c:15482 commands/tablecmds.c:15982 #, c-format msgid "cannot change inheritance of a partition" msgstr "змінити успадкування секції не можна" -#: commands/tablecmds.c:14897 +#: commands/tablecmds.c:15487 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "змінити успадкування секціонованої таблиці не можна" -#: commands/tablecmds.c:14943 +#: commands/tablecmds.c:15533 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "успадкування для тимчасового відношення іншого сеансу не можливе" -#: commands/tablecmds.c:14956 +#: commands/tablecmds.c:15546 #, c-format msgid "cannot inherit from a partition" msgstr "успадкування від секції неможливе" -#: commands/tablecmds.c:14978 commands/tablecmds.c:17841 +#: commands/tablecmds.c:15568 commands/tablecmds.c:18419 #, c-format msgid "circular inheritance not allowed" msgstr "циклічне успадкування неприпустиме" -#: commands/tablecmds.c:14979 commands/tablecmds.c:17842 +#: commands/tablecmds.c:15569 commands/tablecmds.c:18420 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" вже є нащадком \"%s\"." -#: commands/tablecmds.c:14992 +#: commands/tablecmds.c:15582 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "тригер \"%s\" не дозволяє таблиці \"%s\" стати нащадком успадкування" -#: commands/tablecmds.c:14994 +#: commands/tablecmds.c:15584 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "Тригери ROW з перехідними таблицями не підтримуються в ієрархіях успадкування." -#: commands/tablecmds.c:15197 +#: commands/tablecmds.c:15773 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "стовпець \"%s\" в дочірній таблиці має бути позначений як NOT NULL" -#: commands/tablecmds.c:15206 +#: commands/tablecmds.c:15782 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "стовпець \"%s\" у дочірній таблиці повинен бути згенерованим стовпцем" -#: commands/tablecmds.c:15211 +#: commands/tablecmds.c:15786 #, c-format msgid "column \"%s\" in child table must not be a generated column" msgstr "стовпець \"%s\" у дочірній таблиці повинен бути не генерованим стовпцем" -#: commands/tablecmds.c:15242 +#: commands/tablecmds.c:15824 #, c-format msgid "child table is missing column \"%s\"" msgstr "у дочірній таблиці не вистачає стовпця \"%s\"" -#: commands/tablecmds.c:15330 +#: commands/tablecmds.c:15905 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "дочірня таблиця \"%s\" має інше визначення перевірочного обмеження \"%s\"" -#: commands/tablecmds.c:15338 +#: commands/tablecmds.c:15912 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "обмеження \"%s\" конфліктує з неуспадкованим обмеженням дочірньої таблиці \"%s\"" -#: commands/tablecmds.c:15349 +#: commands/tablecmds.c:15922 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "обмеження \"%s\" конфліктує з NOT VALID обмеженням дочірньої таблиці \"%s\"" -#: commands/tablecmds.c:15388 +#: commands/tablecmds.c:15960 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "у дочірній таблиці не вистачає обмеження \"%s\"" -#: commands/tablecmds.c:15474 +#: commands/tablecmds.c:16046 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "розділ \"%s\" вже очікує відключення в секціонованій таблиці \"%s.%s\"" -#: commands/tablecmds.c:15503 commands/tablecmds.c:15551 +#: commands/tablecmds.c:16075 commands/tablecmds.c:16121 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "відношення \"%s\" не є секцією відношення \"%s\"" -#: commands/tablecmds.c:15557 +#: commands/tablecmds.c:16127 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "відношення \"%s\" не є предком відношення \"%s\"" -#: commands/tablecmds.c:15785 +#: commands/tablecmds.c:16354 #, c-format msgid "typed tables cannot inherit" msgstr "типізовані таблиці не можуть успадковуватись" -#: commands/tablecmds.c:15815 +#: commands/tablecmds.c:16384 #, c-format msgid "table is missing column \"%s\"" msgstr "у таблиці не вистачає стовпця \"%s\"" -#: commands/tablecmds.c:15826 +#: commands/tablecmds.c:16395 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "таблиця містить стовпець \"%s\", а тип потребує \"%s\"" -#: commands/tablecmds.c:15835 +#: commands/tablecmds.c:16404 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "таблиця \"%s\" містить стовпець \"%s\" іншого типу" -#: commands/tablecmds.c:15849 +#: commands/tablecmds.c:16418 #, c-format msgid "table has extra column \"%s\"" msgstr "таблиця містить зайвий стовпець \"%s\"" -#: commands/tablecmds.c:15901 +#: commands/tablecmds.c:16470 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" - не типізована таблиця" -#: commands/tablecmds.c:16075 +#: commands/tablecmds.c:16644 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати неунікальний індекс \"%s\"" -#: commands/tablecmds.c:16081 +#: commands/tablecmds.c:16650 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати небезпосередній індекс \"%s\"" -#: commands/tablecmds.c:16087 +#: commands/tablecmds.c:16656 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати індекс з виразом \"%s\"" -#: commands/tablecmds.c:16093 +#: commands/tablecmds.c:16662 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати частковий індекс \"%s\"" -#: commands/tablecmds.c:16110 +#: commands/tablecmds.c:16679 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "індекс \"%s\" не можна використати як ідентифікацію репліки, тому що стовпець %d - системний стовпець" -#: commands/tablecmds.c:16117 +#: commands/tablecmds.c:16686 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "індекс \"%s\" не можна використати як ідентифікацію репліки, тому що стовпець \"%s\" допускає Null" -#: commands/tablecmds.c:16362 +#: commands/tablecmds.c:16938 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "змінити стан журналювання таблиці \"%s\" не можна, тому що вона тимчасова" -#: commands/tablecmds.c:16386 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "таблицю \"%s\" не можна змінити на нежурнальовану, тому що вона є частиною публікації" -#: commands/tablecmds.c:16388 +#: commands/tablecmds.c:16964 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Нежурнальовані відношення не підтримують реплікацію." -#: commands/tablecmds.c:16433 +#: commands/tablecmds.c:17009 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "не вдалося змінити таблицю \"%s\" на журнальовану, тому що вона посилається на нежурнальовану таблицю \"%s\"" -#: commands/tablecmds.c:16443 +#: commands/tablecmds.c:17019 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "не вдалося змінити таблицю \"%s\" на нежурнальовану, тому що вона посилається на журнальовану таблицю \"%s\"" -#: commands/tablecmds.c:16501 +#: commands/tablecmds.c:17077 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "перемістити послідовність з власником в іншу схему не можна" -#: commands/tablecmds.c:16608 +#: commands/tablecmds.c:17182 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "відношення \"%s\" вже існує в схемі \"%s\"" -#: commands/tablecmds.c:17028 +#: commands/tablecmds.c:17603 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" не є таблицею або матеріалізованим поданням" -#: commands/tablecmds.c:17178 +#: commands/tablecmds.c:17756 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" - не складений тип" -#: commands/tablecmds.c:17208 +#: commands/tablecmds.c:17786 #, c-format msgid "cannot change schema of index \"%s\"" msgstr "змінити схему індексу \"%s\" не можна" -#: commands/tablecmds.c:17210 commands/tablecmds.c:17224 +#: commands/tablecmds.c:17788 commands/tablecmds.c:17802 #, c-format msgid "Change the schema of the table instead." msgstr "Замість цього змініть схему таблиці." -#: commands/tablecmds.c:17214 +#: commands/tablecmds.c:17792 #, c-format msgid "cannot change schema of composite type \"%s\"" msgstr "змінити схему складеного типу \"%s\" не можна" -#: commands/tablecmds.c:17222 +#: commands/tablecmds.c:17800 #, c-format msgid "cannot change schema of TOAST table \"%s\"" msgstr "змінити схему таблиці TOAST \"%s\" не можна" -#: commands/tablecmds.c:17254 +#: commands/tablecmds.c:17832 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "стратегія секціонування \"по списку\" не може використовувати декілька стовпців" -#: commands/tablecmds.c:17320 +#: commands/tablecmds.c:17898 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "стовпець \"%s\", згаданий в ключі секціонування, не існує" -#: commands/tablecmds.c:17328 +#: commands/tablecmds.c:17906 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "системний стовпець \"%s\" не можна використати в ключі секціонування" -#: commands/tablecmds.c:17339 commands/tablecmds.c:17429 +#: commands/tablecmds.c:17917 commands/tablecmds.c:18007 #, c-format msgid "cannot use generated column in partition key" msgstr "використати згенерований стовпець в ключі секції, не можна" -#: commands/tablecmds.c:17340 commands/tablecmds.c:17430 commands/trigger.c:663 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "Стовпець \"%s\" є згенерованим стовпцем." - -#: commands/tablecmds.c:17412 +#: commands/tablecmds.c:17990 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "вирази ключа секціонування не можуть містити посилання на системний стовпець" -#: commands/tablecmds.c:17459 +#: commands/tablecmds.c:18037 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "функції у виразі ключа секціонування повинні бути позначені як IMMUTABLE" -#: commands/tablecmds.c:17468 +#: commands/tablecmds.c:18046 #, c-format msgid "cannot use constant expression as partition key" msgstr "не можна використати константий вираз як ключ секціонування" -#: commands/tablecmds.c:17489 +#: commands/tablecmds.c:18067 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "не вдалося визначити, яке правило сортування використати для виразу секціонування" -#: commands/tablecmds.c:17524 +#: commands/tablecmds.c:18102 #, 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:17530 +#: commands/tablecmds.c:18108 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Ви повинні вказати клас операторів (btree) або визначити клас операторів (btree) за замовчуванням для цього типу даних." -#: commands/tablecmds.c:17781 +#: commands/tablecmds.c:18359 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" вже є секцією" -#: commands/tablecmds.c:17787 +#: commands/tablecmds.c:18365 #, c-format msgid "cannot attach a typed table as partition" msgstr "неможливо підключити типізовану таблицю в якості секції" -#: commands/tablecmds.c:17803 +#: commands/tablecmds.c:18381 #, c-format msgid "cannot attach inheritance child as partition" msgstr "неможливо підключити нащадка успадкування в якості секції" -#: commands/tablecmds.c:17817 +#: commands/tablecmds.c:18395 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "неможливо підключити предка успадкування в якості секції" -#: commands/tablecmds.c:17851 +#: commands/tablecmds.c:18429 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "неможливо підкючити тимчасове відношення в якості секції постійного відношення \"%s\"" -#: commands/tablecmds.c:17859 +#: commands/tablecmds.c:18437 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "неможливо підключити постійне відношення в якості секції тимчасового відношення \"%s\"" -#: commands/tablecmds.c:17867 +#: commands/tablecmds.c:18445 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "неможливо підключити секцію до тимчасового відношення в іншому сеансі" -#: commands/tablecmds.c:17874 +#: commands/tablecmds.c:18452 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "неможливо підключити тимчасове відношення з іншого сеансу в якості секції" -#: commands/tablecmds.c:17894 +#: commands/tablecmds.c:18472 +#, c-format +msgid "table \"%s\" being attached contains an identity column \"%s\"" +msgstr "таблиця \"%s\", що додається, містить стовпець ідентичності \"%s\"" + +#: commands/tablecmds.c:18474 +#, c-format +msgid "The new partition may not contain an identity column." +msgstr "Новий розділ може не містити стовпця ідентичності." + +#: commands/tablecmds.c:18482 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "таблиця \"%s\" містить стовпець \"%s\", відсутній в батьківській \"%s\"" -#: commands/tablecmds.c:17897 +#: commands/tablecmds.c:18485 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Нова секція може містити лише стовпці, що є у батьківській таблиці." -#: commands/tablecmds.c:17909 +#: commands/tablecmds.c:18497 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "тригер \"%s\" не дозволяє зробити таблицю \"%s\" секцією" -#: commands/tablecmds.c:17911 +#: commands/tablecmds.c:18499 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "Тригери ROW з перехідними таблицями не підтримуються для секцій." -#: commands/tablecmds.c:18090 +#: commands/tablecmds.c:18675 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "не можна підключити зовнішню таблицю \"%s\" в якості секції секціонованої таблиці \"%s\"" -#: commands/tablecmds.c:18093 +#: commands/tablecmds.c:18678 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Секціонована таблиця \"%s\" містить унікальні індекси." -#: commands/tablecmds.c:18410 +#: commands/tablecmds.c:19000 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "не можна одночасно відключити розділи, коли існує розділ за замовчуванням" -#: commands/tablecmds.c:18519 +#: commands/tablecmds.c:19109 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "секціоновану таблицю \"%s\" було видалено одночасно" -#: commands/tablecmds.c:18525 +#: commands/tablecmds.c:19115 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "розділ \"%s\" було видалено паралельно" -#: commands/tablecmds.c:19040 commands/tablecmds.c:19060 -#: commands/tablecmds.c:19081 commands/tablecmds.c:19100 -#: commands/tablecmds.c:19142 +#: commands/tablecmds.c:19651 commands/tablecmds.c:19671 +#: commands/tablecmds.c:19692 commands/tablecmds.c:19711 +#: commands/tablecmds.c:19753 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "неможливо підключити індекс \"%s\" в якості секції індексу \"%s\"" -#: commands/tablecmds.c:19043 +#: commands/tablecmds.c:19654 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Індекс \"%s\" вже підключений до іншого індексу." -#: commands/tablecmds.c:19063 +#: commands/tablecmds.c:19674 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Індекс \"%s\" не є індексом жодної секції таблиці \"%s\"." -#: commands/tablecmds.c:19084 +#: commands/tablecmds.c:19695 #, c-format msgid "The index definitions do not match." msgstr "Визначення індексів не співпадають." -#: commands/tablecmds.c:19103 +#: commands/tablecmds.c:19714 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Індекс \"%s\" належить обмеженню в таблиці \"%s\", але обмеження для індексу \"%s\" не існує." -#: commands/tablecmds.c:19145 +#: commands/tablecmds.c:19756 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "До секції \"%s\" вже підключений інший індекс." -#: commands/tablecmds.c:19381 +#: commands/tablecmds.c:19992 #, c-format msgid "column data type %s does not support compression" msgstr "тип даних стовпця %s не підтримує стискання" -#: commands/tablecmds.c:19388 +#: commands/tablecmds.c:19999 #, c-format msgid "invalid compression method \"%s\"" msgstr "неприпустимий метод стискання \"%s\"" -#: commands/tablecmds.c:19414 +#: commands/tablecmds.c:20025 #, c-format msgid "invalid storage type \"%s\"" msgstr "неприпустимий тип сховища \"%s\"" -#: commands/tablecmds.c:19424 +#: commands/tablecmds.c:20035 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип даних стовпця %s може мати тільки сховище PLAIN" -#: commands/tablespace.c:199 commands/tablespace.c:650 +#: commands/tablespace.c:193 commands/tablespace.c:644 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" існує, але це не каталог" -#: commands/tablespace.c:230 +#: commands/tablespace.c:224 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "немає прав на створення табличного простору \"%s\"" -#: commands/tablespace.c:232 +#: commands/tablespace.c:226 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Щоб створити табличний простір, потрібно бути суперкористувачем." -#: commands/tablespace.c:248 +#: commands/tablespace.c:242 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "у шляху до розташування табличного простіру не повинно бути одинарних лапок" -#: commands/tablespace.c:261 +#: commands/tablespace.c:255 #, c-format msgid "tablespace location must be an absolute path" msgstr "шлях до розташування табличного простору повинен бути абсолютним" -#: commands/tablespace.c:273 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "шлях до розташування табличного простору \"%s\" занадто довгий" -#: commands/tablespace.c:280 +#: commands/tablespace.c:274 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "табличний простір не повинен розташовуватись всередині каталогу даних" -#: commands/tablespace.c:289 commands/tablespace.c:976 +#: commands/tablespace.c:283 commands/tablespace.c:970 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "неприпустиме ім'я табличного простору \"%s\"" -#: commands/tablespace.c:291 commands/tablespace.c:977 +#: commands/tablespace.c:285 commands/tablespace.c:971 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Префікс \"\"pg_\" зарезервований для системних табличних просторів." -#: commands/tablespace.c:310 commands/tablespace.c:998 +#: commands/tablespace.c:304 commands/tablespace.c:992 #, c-format msgid "tablespace \"%s\" already exists" msgstr "табличний простір \"%s\" вже існує" -#: commands/tablespace.c:326 +#: commands/tablespace.c:320 #, c-format msgid "pg_tablespace OID value not set when in binary upgrade mode" msgstr "значення OID pg_tablespace не встановлено в режимі двійкового оновлення" -#: commands/tablespace.c:431 commands/tablespace.c:959 -#: commands/tablespace.c:1048 commands/tablespace.c:1117 -#: commands/tablespace.c:1263 commands/tablespace.c:1466 +#: commands/tablespace.c:425 commands/tablespace.c:953 +#: commands/tablespace.c:1042 commands/tablespace.c:1111 +#: commands/tablespace.c:1257 commands/tablespace.c:1460 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "табличний простір \"%s\" не існує" -#: commands/tablespace.c:437 +#: commands/tablespace.c:431 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "табличний простір \"%s\" вже існує, пропускається" -#: commands/tablespace.c:463 +#: commands/tablespace.c:457 #, c-format msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" msgstr "табличний простір \"%s\" не можна видалити, тому що деякі об'єкти залежать від нього" -#: commands/tablespace.c:530 +#: commands/tablespace.c:524 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "табличний простір \"%s\" не пустий" -#: commands/tablespace.c:617 +#: commands/tablespace.c:611 #, c-format msgid "directory \"%s\" does not exist" msgstr "каталог \"%s\" не існує" -#: commands/tablespace.c:618 +#: commands/tablespace.c:612 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Створіть цей каталог для табличного простору до перезапуску сервера." -#: commands/tablespace.c:623 +#: commands/tablespace.c:617 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не вдалося встановити права для каталогу \"%s\": %m" -#: commands/tablespace.c:655 +#: commands/tablespace.c:649 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "каталог \"%s\" вже використовується в якості табличного простору" -#: commands/tablespace.c:833 commands/tablespace.c:919 +#: commands/tablespace.c:827 commands/tablespace.c:913 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "не вдалося видалити символьне посилання \"%s\": %m" -#: commands/tablespace.c:842 commands/tablespace.c:927 +#: commands/tablespace.c:836 commands/tablespace.c:921 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\" - не каталог або символьне посилання" -#: commands/tablespace.c:1122 +#: commands/tablespace.c:1116 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Табличний простір \"%s\" не існує." -#: commands/tablespace.c:1568 +#: commands/tablespace.c:1562 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "не вдалося видалити каталоги табличного простору %u" -#: commands/tablespace.c:1570 +#: commands/tablespace.c:1564 #, c-format msgid "You can remove the directories manually if necessary." msgstr "За потреби ви можете видалити каталоги вручну." -#: commands/trigger.c:232 commands/trigger.c:243 +#: commands/trigger.c:225 commands/trigger.c:236 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" - таблиця" -#: commands/trigger.c:234 commands/trigger.c:245 +#: commands/trigger.c:227 commands/trigger.c:238 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "Таблиці не можуть мати тригери INSTEAD OF." -#: commands/trigger.c:266 +#: commands/trigger.c:259 #, c-format msgid "\"%s\" is a partitioned table" msgstr "\"%s\" є секційною таблицею" -#: commands/trigger.c:268 +#: commands/trigger.c:261 #, c-format msgid "ROW triggers with transition tables are not supported on partitioned tables." msgstr "Тригери ROW з перехідними таблицями не підтримуються для секційованих таблиць." -#: commands/trigger.c:280 commands/trigger.c:287 commands/trigger.c:451 +#: commands/trigger.c:273 commands/trigger.c:280 commands/trigger.c:444 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" - подання" -#: commands/trigger.c:282 +#: commands/trigger.c:275 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "Подання не можуть мати рядкові тригери BEFORE або AFTER." -#: commands/trigger.c:289 +#: commands/trigger.c:282 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "Подання не можуть мати тригери TRUNCATE." -#: commands/trigger.c:297 commands/trigger.c:309 commands/trigger.c:444 +#: commands/trigger.c:290 commands/trigger.c:302 commands/trigger.c:437 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" - зовнішня таблиця" -#: commands/trigger.c:299 +#: commands/trigger.c:292 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "Зовнішні таблиці не можуть мати тригери INSTEAD OF." -#: commands/trigger.c:311 +#: commands/trigger.c:304 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "Зовнішні таблиці не можуть мати обмежувальні тригери." -#: commands/trigger.c:316 commands/trigger.c:1332 commands/trigger.c:1439 +#: commands/trigger.c:309 commands/trigger.c:1325 commands/trigger.c:1432 #, c-format msgid "relation \"%s\" cannot have triggers" msgstr "відношення \"%s\" не може мати тригери" -#: commands/trigger.c:387 +#: commands/trigger.c:380 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "Тригери TRUNCATE FOR EACH ROW не підтримуються" -#: commands/trigger.c:395 +#: commands/trigger.c:388 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "Тригери INSTEAD OF повинні мати тип FOR EACH ROW" -#: commands/trigger.c:399 +#: commands/trigger.c:392 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "Тригери INSTEAD OF не можуть мати умови WHEN" -#: commands/trigger.c:403 +#: commands/trigger.c:396 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "Тригери INSTEAD OF не можуть мати список стовпців" -#: commands/trigger.c:432 +#: commands/trigger.c:425 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "Змінна іменування ROW в реченні REFERENCING не підтримується" -#: commands/trigger.c:433 +#: commands/trigger.c:426 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "Використайте OLD TABLE або NEW TABLE для іменування перехідних таблиць." -#: commands/trigger.c:446 +#: commands/trigger.c:439 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Тригери зовнішніх таблиць не можуть використовувати перехідні таблиці." -#: commands/trigger.c:453 +#: commands/trigger.c:446 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Тригери подань не можуть використовувати перехідні таблиці." -#: commands/trigger.c:469 +#: commands/trigger.c:462 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "Тригери ROW з перехідними таблицями для секцій не підтримуються" -#: commands/trigger.c:473 +#: commands/trigger.c:466 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "Тригери ROW з перехідними таблицями для нащадків успадкування не підтримуються" -#: commands/trigger.c:479 +#: commands/trigger.c:472 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "ім'я перехідної таблиці можна задати лише для тригеру AFTER" -#: commands/trigger.c:484 +#: commands/trigger.c:477 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "Тригери TRUNCATE з перехідними таблицями не підтримуються" -#: commands/trigger.c:501 +#: commands/trigger.c:494 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "перехідні таблиці не можна задати для тригерів, призначених для кількох подій" -#: commands/trigger.c:512 +#: commands/trigger.c:505 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "перехідні таблиці не можна задати для тригерів зі списками стовпців" -#: commands/trigger.c:529 +#: commands/trigger.c:522 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE можна задати лише для тригерів INSERT або UPDATE" -#: commands/trigger.c:534 +#: commands/trigger.c:527 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE не можна задавати декілька разів" -#: commands/trigger.c:544 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE можна задати лише для тригерів DELETE або UPDATE" -#: commands/trigger.c:549 +#: commands/trigger.c:542 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE не можна задавати декілька разів" -#: commands/trigger.c:559 +#: commands/trigger.c:552 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "Ім'я OLD TABLE та ім'я NEW TABLE не можуть бути однаковими" -#: commands/trigger.c:623 commands/trigger.c:636 +#: commands/trigger.c:616 commands/trigger.c:629 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "в умові WHEN операторного тригера не можна посилатись на значення стовпця" -#: commands/trigger.c:628 +#: commands/trigger.c:621 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "В умові WHEN тригеру INSERT не можна посилатись на значення OLD" -#: commands/trigger.c:641 +#: commands/trigger.c:634 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "В умові WHEN тригера DELETE не можна посилатись на значення NEW" -#: commands/trigger.c:646 +#: commands/trigger.c:639 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "В умові WHEN тригера BEFORE не можна посилатись на системні стовпці NEW" -#: commands/trigger.c:654 commands/trigger.c:662 +#: commands/trigger.c:647 commands/trigger.c:655 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "В умові WHEN тригера BEFORE не можна посилатись на згенеровані стовпці NEW" -#: commands/trigger.c:655 +#: commands/trigger.c:648 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "Використовується посилання на весь рядок і таблиця містить згенеровані стовпці." -#: commands/trigger.c:770 commands/trigger.c:1614 +#: commands/trigger.c:763 commands/trigger.c:1607 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "тригер \"%s\" для відношення \"%s\" вже існує" -#: commands/trigger.c:783 +#: commands/trigger.c:776 #, c-format msgid "trigger \"%s\" for relation \"%s\" is an internal or a child trigger" msgstr "тригер \"%s\" для відношення \"%s\" є зовнішнім або дочірнім тригером" -#: commands/trigger.c:802 +#: commands/trigger.c:795 #, c-format msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" msgstr "тригер \"%s\" для відношення \"%s\" є зовнішнім тригером" -#: commands/trigger.c:1404 commands/trigger.c:1557 commands/trigger.c:1838 +#: commands/trigger.c:1397 commands/trigger.c:1550 commands/trigger.c:1831 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "тригер \"%s\" для таблиці \"%s\" не існує" -#: commands/trigger.c:1529 +#: commands/trigger.c:1522 #, c-format msgid "cannot rename trigger \"%s\" on table \"%s\"" msgstr "перейменувати тригер \"%s\" для таблиці \"%s\" не можна" -#: commands/trigger.c:1531 +#: commands/trigger.c:1524 #, c-format msgid "Rename the trigger on the partitioned table \"%s\" instead." msgstr "Замість цього перейменуйте тригер для секціонованої таблиці \"%s\"." -#: commands/trigger.c:1631 +#: commands/trigger.c:1624 #, c-format msgid "renamed trigger \"%s\" on relation \"%s\"" msgstr "перейменовано тригер \"%s\" для відношення \"%s\"" -#: commands/trigger.c:1777 +#: commands/trigger.c:1770 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "немає доступу: \"%s\" - системний тригер" -#: commands/trigger.c:2386 +#: commands/trigger.c:2379 #, c-format msgid "trigger function %u returned null value" msgstr "тригерна функція %u повернула значення null" -#: commands/trigger.c:2446 commands/trigger.c:2664 commands/trigger.c:2917 -#: commands/trigger.c:3270 +#: commands/trigger.c:2439 commands/trigger.c:2657 commands/trigger.c:2910 +#: commands/trigger.c:3263 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "Тригер BEFORE STATEMENT не може повертати значення" -#: commands/trigger.c:2522 +#: commands/trigger.c:2515 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "переміщення рядка до іншої секції під час тригеру BEFORE FOR EACH ROW не підтримується" -#: commands/trigger.c:2523 +#: commands/trigger.c:2516 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Перед виконанням тригера \"%s\", рядок повинен був бути в секції \"%s.%s\"." -#: commands/trigger.c:3347 executor/nodeModifyTable.c:2369 -#: executor/nodeModifyTable.c:2452 +#: commands/trigger.c:3340 executor/nodeModifyTable.c:2373 +#: executor/nodeModifyTable.c:2456 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "кортеж, який повинен бути оновленим, вже змінений в операції, яка викликана поточною командою" -#: commands/trigger.c:3348 executor/nodeModifyTable.c:1535 -#: executor/nodeModifyTable.c:1609 executor/nodeModifyTable.c:2370 -#: executor/nodeModifyTable.c:2453 executor/nodeModifyTable.c:3098 +#: commands/trigger.c:3341 executor/nodeModifyTable.c:1541 +#: executor/nodeModifyTable.c:1615 executor/nodeModifyTable.c:2374 +#: executor/nodeModifyTable.c:2457 executor/nodeModifyTable.c:3093 +#: executor/nodeModifyTable.c:3254 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Можливо, для поширення змін в інші рядки слід використати тригер AFTER замість тригера BEFORE." -#: commands/trigger.c:3389 executor/nodeLockRows.c:228 -#: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:308 -#: executor/nodeModifyTable.c:1551 executor/nodeModifyTable.c:2387 -#: executor/nodeModifyTable.c:2595 +#: commands/trigger.c:3382 executor/nodeLockRows.c:228 +#: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:314 +#: executor/nodeModifyTable.c:1557 executor/nodeModifyTable.c:2391 +#: executor/nodeModifyTable.c:2599 #, c-format msgid "could not serialize access due to concurrent update" msgstr "не вдалося серіалізувати доступ через паралельне оновлення" -#: commands/trigger.c:3397 executor/nodeModifyTable.c:1641 -#: executor/nodeModifyTable.c:2470 executor/nodeModifyTable.c:2619 -#: executor/nodeModifyTable.c:2986 +#: commands/trigger.c:3390 executor/nodeModifyTable.c:1647 +#: executor/nodeModifyTable.c:2474 executor/nodeModifyTable.c:2623 +#: executor/nodeModifyTable.c:3111 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "не вдалося серіалізувати доступ через паралельне видалення" -#: commands/trigger.c:4604 +#: commands/trigger.c:4601 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "не можна виконати відкладений тригер в межах операції з обмеженням по безпеці" -#: commands/trigger.c:5787 +#: commands/trigger.c:5782 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "обмеження \"%s\" не є відкладеним" -#: commands/trigger.c:5810 +#: commands/trigger.c:5805 #, c-format msgid "constraint \"%s\" does not exist" msgstr "обмеження \"%s\" не існує" @@ -11991,663 +12418,673 @@ msgstr "зіставлення для типу маркера \"%s\" не існ msgid "invalid parameter list format: \"%s\"" msgstr "неприпустимий формат списку параметрів: \"%s\"" -#: commands/typecmds.c:217 +#: commands/typecmds.c:221 #, c-format msgid "must be superuser to create a base type" msgstr "для створення базового типу потрібно бути суперкористувачем" -#: commands/typecmds.c:275 +#: commands/typecmds.c:279 #, c-format msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." msgstr "Створіть тип в якості оболонки, потім створіть його функції вводу-виводу, а потім виконайте повну CREATE TYPE." -#: commands/typecmds.c:327 commands/typecmds.c:1450 commands/typecmds.c:4263 +#: commands/typecmds.c:331 commands/typecmds.c:1460 commands/typecmds.c:4480 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "атрибут типу \"%s\" не розпізнаний" -#: commands/typecmds.c:382 +#: commands/typecmds.c:386 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "неприпустима категорія типу \"%s\": повинен бути простий ASCII" -#: commands/typecmds.c:401 +#: commands/typecmds.c:405 #, c-format msgid "array element type cannot be %s" msgstr "типом елементу масиву не може бути %s" -#: commands/typecmds.c:433 +#: commands/typecmds.c:437 #, c-format msgid "alignment \"%s\" not recognized" msgstr "тип вирівнювання \"%s\" не розпізнаний" -#: commands/typecmds.c:450 commands/typecmds.c:4137 +#: commands/typecmds.c:454 commands/typecmds.c:4354 #, c-format msgid "storage \"%s\" not recognized" msgstr "сховище \"%s\" не розпізнане" -#: commands/typecmds.c:461 +#: commands/typecmds.c:465 #, c-format msgid "type input function must be specified" msgstr "необхідно вказати функцію вводу типу" -#: commands/typecmds.c:465 +#: commands/typecmds.c:469 #, c-format msgid "type output function must be specified" msgstr "необхідно вказати функцію виводу типу" -#: commands/typecmds.c:470 +#: commands/typecmds.c:474 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "функція виводу модифікатора типу недоцільна без функції вводу модифікатора типу" -#: commands/typecmds.c:512 +#: commands/typecmds.c:516 #, c-format msgid "element type cannot be specified without a subscripting function" msgstr "тип елементу не можна вказати без припустимої функції підписки" -#: commands/typecmds.c:781 +#: commands/typecmds.c:785 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" - невідповідний базовий тип для домену" -#: commands/typecmds.c:879 +#: commands/typecmds.c:883 #, c-format msgid "multiple default expressions" msgstr "неодноразове визначення значення типу за замовчуванням" -#: commands/typecmds.c:942 commands/typecmds.c:951 +#: commands/typecmds.c:946 commands/typecmds.c:955 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "конфліктуючі обмеження NULL/NOT NULL" -#: commands/typecmds.c:967 +#: commands/typecmds.c:971 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "перевірки обмеження для доменів не можуть позначатись як NO INHERIT" -#: commands/typecmds.c:976 commands/typecmds.c:2956 +#: commands/typecmds.c:980 commands/typecmds.c:2940 #, c-format msgid "unique constraints not possible for domains" msgstr "обмеження унікальності неможливе для доменів" -#: commands/typecmds.c:982 commands/typecmds.c:2962 +#: commands/typecmds.c:986 commands/typecmds.c:2946 #, c-format msgid "primary key constraints not possible for domains" msgstr "обмеження первинного ключа неможливі для доменів" -#: commands/typecmds.c:988 commands/typecmds.c:2968 +#: commands/typecmds.c:992 commands/typecmds.c:2952 #, c-format msgid "exclusion constraints not possible for domains" msgstr "обмеження винятків неможливі для доменів" -#: commands/typecmds.c:994 commands/typecmds.c:2974 +#: commands/typecmds.c:998 commands/typecmds.c:2958 #, c-format msgid "foreign key constraints not possible for domains" msgstr "обмеження зовнішніх ключів неможливі для доменів" -#: commands/typecmds.c:1003 commands/typecmds.c:2983 +#: commands/typecmds.c:1007 commands/typecmds.c:2967 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "зазначення відкладення обмежень для доменів не підтримується" -#: commands/typecmds.c:1317 utils/cache/typcache.c:2567 +#: commands/typecmds.c:1327 utils/cache/typcache.c:2570 #, c-format msgid "%s is not an enum" msgstr "%s не є переліком" -#: commands/typecmds.c:1458 +#: commands/typecmds.c:1468 #, c-format msgid "type attribute \"subtype\" is required" msgstr "вимагається атрибут типу \"subtype\"" -#: commands/typecmds.c:1463 +#: commands/typecmds.c:1473 #, c-format msgid "range subtype cannot be %s" msgstr "%s не може бути підтипом діапазону" -#: commands/typecmds.c:1482 +#: commands/typecmds.c:1492 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "вказано правило сортування для діапазону, але підтип не підтримує сортування" -#: commands/typecmds.c:1492 +#: commands/typecmds.c:1502 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "неможливо вказати канонічну функцію без попередньо створеного типу оболонки" -#: commands/typecmds.c:1493 +#: commands/typecmds.c:1503 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." msgstr "Створіть тип в якості оболонки, потім створіть його функцію канонізації, а потім виконайте повну CREATE TYPE." -#: commands/typecmds.c:1965 +#: commands/typecmds.c:1975 #, c-format msgid "type input function %s has multiple matches" msgstr "функція введення типу %s має декілька збігів" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1993 #, c-format msgid "type input function %s must return type %s" msgstr "функція вводу типу %s повинна повертати тип %s" -#: commands/typecmds.c:1999 +#: commands/typecmds.c:2009 #, c-format msgid "type input function %s should not be volatile" msgstr "функція введення типу %s не повинна бути змінною" -#: commands/typecmds.c:2027 +#: commands/typecmds.c:2037 #, c-format msgid "type output function %s must return type %s" msgstr "функція виводу типу %s повинна повертати тип %s" -#: commands/typecmds.c:2034 +#: commands/typecmds.c:2044 #, c-format msgid "type output function %s should not be volatile" msgstr "функція виводу типу %s не повинна бути змінною" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2073 #, c-format msgid "type receive function %s has multiple matches" msgstr "функція отримання типу %s має декілька збігів" -#: commands/typecmds.c:2081 +#: commands/typecmds.c:2091 #, c-format msgid "type receive function %s must return type %s" msgstr "функція отримання типу %s повинна повертати тип %s" -#: commands/typecmds.c:2088 +#: commands/typecmds.c:2098 #, c-format msgid "type receive function %s should not be volatile" msgstr "функція отримання типу %s не повинна бути змінною" -#: commands/typecmds.c:2116 +#: commands/typecmds.c:2126 #, c-format msgid "type send function %s must return type %s" msgstr "функція відправлення типу %s повинна повертати тип %s" -#: commands/typecmds.c:2123 +#: commands/typecmds.c:2133 #, c-format msgid "type send function %s should not be volatile" msgstr "функція відправлення типу %s не повинна бути змінною" -#: commands/typecmds.c:2150 +#: commands/typecmds.c:2160 #, c-format msgid "typmod_in function %s must return type %s" msgstr "функція typmod_in %s повинна повертати тип %s" -#: commands/typecmds.c:2157 +#: commands/typecmds.c:2167 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "функція вводу модифікатора типу %s не повинна бути змінною" -#: commands/typecmds.c:2184 +#: commands/typecmds.c:2194 #, c-format msgid "typmod_out function %s must return type %s" msgstr "функція typmod_out %s повинна повертати тип %s" -#: commands/typecmds.c:2191 +#: commands/typecmds.c:2201 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "функція виводу модифікатора типу %s не повинна бути змінною" -#: commands/typecmds.c:2218 +#: commands/typecmds.c:2228 #, c-format msgid "type analyze function %s must return type %s" msgstr "функція аналізу типу %s повинна повертати тип %s" -#: commands/typecmds.c:2247 +#: commands/typecmds.c:2257 #, c-format msgid "type subscripting function %s must return type %s" msgstr "функція підписки типу %s повинна повертати тип %s" -#: commands/typecmds.c:2257 +#: commands/typecmds.c:2267 #, c-format msgid "user-defined types cannot use subscripting function %s" msgstr "типи визначені користувачем не можуть використовувати функцію підписки %s" -#: commands/typecmds.c:2303 +#: commands/typecmds.c:2313 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Ви повинні вказати клас операторів для типу діапазону або визначити клас операторів за замовчуванням для цього підтипу." -#: commands/typecmds.c:2334 +#: commands/typecmds.c:2344 #, c-format msgid "range canonical function %s must return range type" msgstr "функція канонічного діапазону %s повинна вертати тип діапазону" -#: commands/typecmds.c:2340 +#: commands/typecmds.c:2350 #, c-format msgid "range canonical function %s must be immutable" msgstr "функція канонічного діапазону %s повинна бути незмінною" -#: commands/typecmds.c:2376 +#: commands/typecmds.c:2386 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "функція розбіжностей для підтипу діапазону %s повинна повертати тип %s" -#: commands/typecmds.c:2383 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "функція розбіжностей для підтипу діапазону %s повинна бути незмінною" -#: commands/typecmds.c:2410 +#: commands/typecmds.c:2420 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "значення OID масиву pg_type не встановлено в режимі двійкового оновлення" -#: commands/typecmds.c:2443 +#: commands/typecmds.c:2453 #, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" msgstr "значення OID в pg_type не задано під час режиму двійкового оновлення" -#: commands/typecmds.c:2476 +#: commands/typecmds.c:2486 #, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" msgstr "значення OID масиву в pg_type не задано під час режиму двійкового оновлення" -#: commands/typecmds.c:2772 -#, c-format -msgid "column \"%s\" of table \"%s\" contains null values" -msgstr "стовпець \"%s\" таблиці \"%s\" містить значення NULL" - -#: commands/typecmds.c:2885 commands/typecmds.c:3086 +#: commands/typecmds.c:2868 commands/typecmds.c:3093 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "обмеження \"%s\" для домену \"%s\" не існує" -#: commands/typecmds.c:2889 +#: commands/typecmds.c:2872 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "обмеження \"%s\" для домену \"%s\" не існує, пропускається" -#: commands/typecmds.c:3093 +#: commands/typecmds.c:3100 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "обмеження \"%s\" для домену \"%s\" не є перевірочним обмеженням" -#: commands/typecmds.c:3194 +#: commands/typecmds.c:3180 +#, c-format +msgid "column \"%s\" of table \"%s\" contains null values" +msgstr "стовпець \"%s\" таблиці \"%s\" містить значення NULL" + +#: commands/typecmds.c:3269 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "стовпець \"%s\" таблиці \"%s\" містить значення, які порушують нове обмеження" -#: commands/typecmds.c:3423 commands/typecmds.c:3622 commands/typecmds.c:3705 -#: commands/typecmds.c:3893 +#: commands/typecmds.c:3498 commands/typecmds.c:3772 commands/typecmds.c:3857 +#: commands/typecmds.c:4073 #, c-format msgid "%s is not a domain" msgstr "%s - не домен" -#: commands/typecmds.c:3455 +#: commands/typecmds.c:3532 commands/typecmds.c:3686 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "обмеження \"%s\" для домену \"%s\" вже існує" -#: commands/typecmds.c:3506 +#: commands/typecmds.c:3583 #, c-format msgid "cannot use table references in domain check constraint" msgstr "у перевірочному обмеженні для домену не можна посилатись на таблиці" -#: commands/typecmds.c:3634 commands/typecmds.c:3717 commands/typecmds.c:4010 +#: commands/typecmds.c:3784 commands/typecmds.c:3869 commands/typecmds.c:4223 #, c-format msgid "%s is a table's row type" msgstr "%s - тип рядків таблиці" -#: commands/typecmds.c:3644 commands/typecmds.c:3727 commands/typecmds.c:3925 +#: commands/typecmds.c:3794 commands/typecmds.c:3879 commands/typecmds.c:4121 #, c-format msgid "cannot alter array type %s" msgstr "змінити тип масиву \"%s\" не можна" -#: commands/typecmds.c:3646 commands/typecmds.c:3729 commands/typecmds.c:3927 +#: commands/typecmds.c:3796 commands/typecmds.c:3881 commands/typecmds.c:4123 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Ви можете змінити тип %s, який спричинить зміну типу масиву." -#: commands/typecmds.c:3995 +#: commands/typecmds.c:3892 +#, c-format +msgid "cannot alter multirange type %s" +msgstr "не можна змінювати багатодіапазонний тип %s" + +#: commands/typecmds.c:3895 +#, c-format +msgid "You can alter type %s, which will alter the multirange type as well." +msgstr "Ви можете змінити тип %s, що також змінить тип мультидіапазону." + +#: commands/typecmds.c:4202 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "тип \"%s\" вже існує в схемі \"%s\"" -#: commands/typecmds.c:4165 +#: commands/typecmds.c:4382 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "неможливо змінити сховище типу на PLAIN" -#: commands/typecmds.c:4258 +#: commands/typecmds.c:4475 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "атрибут типу \"%s\" неможливо змінити" -#: commands/typecmds.c:4276 +#: commands/typecmds.c:4493 #, c-format msgid "must be superuser to alter a type" msgstr "для зміни типу потрібно бути суперкористувачем" -#: commands/typecmds.c:4297 commands/typecmds.c:4306 +#: commands/typecmds.c:4514 commands/typecmds.c:4523 #, c-format msgid "%s is not a base type" msgstr "%s - не є базовим типом" -#: commands/user.c:201 +#: commands/user.c:200 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID вже не потрібно вказувати" -#: commands/user.c:319 commands/user.c:325 commands/user.c:331 -#: commands/user.c:337 commands/user.c:343 +#: commands/user.c:318 commands/user.c:324 commands/user.c:330 +#: commands/user.c:336 commands/user.c:342 #, c-format msgid "permission denied to create role" msgstr "немає прав для створення ролі" -#: commands/user.c:320 +#: commands/user.c:319 #, c-format msgid "Only roles with the %s attribute may create roles." msgstr "Створювати ролі можуть лише ролі з атрибутом %s." -#: commands/user.c:326 commands/user.c:332 commands/user.c:338 -#: commands/user.c:344 +#: commands/user.c:325 commands/user.c:331 commands/user.c:337 +#: commands/user.c:343 #, c-format msgid "Only roles with the %s attribute may create roles with the %s attribute." msgstr "Тільки ролі з атрибутом %s можуть створювати ролі з атрибутом %s." -#: commands/user.c:355 commands/user.c:1387 commands/user.c:1394 -#: utils/adt/acl.c:5401 utils/adt/acl.c:5407 gram.y:16726 gram.y:16772 +#: commands/user.c:354 commands/user.c:1386 commands/user.c:1393 +#: utils/adt/acl.c:5574 utils/adt/acl.c:5580 gram.y:17310 gram.y:17356 #, c-format msgid "role name \"%s\" is reserved" msgstr "ім'я ролі \"%s\" зарезервовано" -#: commands/user.c:357 commands/user.c:1389 commands/user.c:1396 +#: commands/user.c:356 commands/user.c:1388 commands/user.c:1395 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Імена ролей, які починаються на \"pg_\", зарезервовані." -#: commands/user.c:378 commands/user.c:1411 +#: commands/user.c:377 commands/user.c:1410 #, c-format msgid "role \"%s\" already exists" msgstr "роль \"%s\" вже існує" -#: commands/user.c:440 commands/user.c:925 +#: commands/user.c:439 commands/user.c:924 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "пустий рядок є неприпустимим паролем, пароль скидається" -#: commands/user.c:469 +#: commands/user.c:468 #, c-format msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "значення OID в pg_authid не встановлено в режимі двійкового оновлення" -#: commands/user.c:653 commands/user.c:1011 +#: commands/user.c:652 commands/user.c:1010 msgid "Cannot alter reserved roles." msgstr "Не можна змінити зарезервовані ролі." -#: commands/user.c:760 commands/user.c:766 commands/user.c:782 -#: commands/user.c:790 commands/user.c:804 commands/user.c:810 -#: commands/user.c:816 commands/user.c:825 commands/user.c:870 -#: commands/user.c:1033 commands/user.c:1044 +#: commands/user.c:759 commands/user.c:765 commands/user.c:781 +#: commands/user.c:789 commands/user.c:803 commands/user.c:809 +#: commands/user.c:815 commands/user.c:824 commands/user.c:869 +#: commands/user.c:1032 commands/user.c:1043 #, c-format msgid "permission denied to alter role" msgstr "немає прав на зміну ролі" -#: commands/user.c:761 commands/user.c:1034 +#: commands/user.c:760 commands/user.c:1033 #, c-format msgid "Only roles with the %s attribute may alter roles with the %s attribute." msgstr "Тільки ролі з атрибутом %s можуть змінювати ролі з атрибутом %s." -#: commands/user.c:767 commands/user.c:805 commands/user.c:811 -#: commands/user.c:817 +#: commands/user.c:766 commands/user.c:804 commands/user.c:810 +#: commands/user.c:816 #, c-format msgid "Only roles with the %s attribute may change the %s attribute." msgstr "Змінити атрибут %s може тільки роль з атрибутом %s." -#: commands/user.c:783 commands/user.c:1045 +#: commands/user.c:782 commands/user.c:1044 #, c-format msgid "Only roles with the %s attribute and the %s option on role \"%s\" may alter this role." msgstr "Тільки ролі з атрибутом %s та опцією %s на роль \"%s\" можуть змінити цю роль." -#: commands/user.c:791 +#: commands/user.c:790 #, c-format msgid "To change another role's password, the current user must have the %s attribute and the %s option on the role." msgstr "Щоб змінити пароль іншої ролі, поточний користувач повинен мати атрибут %s та параметр %s в ролі." -#: commands/user.c:826 +#: commands/user.c:825 #, c-format msgid "Only roles with the %s option on role \"%s\" may add members." msgstr "Тільки ролі з опцією %s на роль \"%s\" можуть додавати учасників." -#: commands/user.c:871 +#: commands/user.c:870 #, c-format -msgid "The bootstrap user must have the %s attribute." -msgstr "Початковий користувач повинен мати атрибут %s." +msgid "The bootstrap superuser must have the %s attribute." +msgstr "Суперкористувач завантажувача повинен мати атрибут %s." -#: commands/user.c:1076 +#: commands/user.c:1075 #, c-format msgid "permission denied to alter setting" msgstr "немає прав на зміну налаштувань" -#: commands/user.c:1077 +#: commands/user.c:1076 #, c-format msgid "Only roles with the %s attribute may alter settings globally." msgstr "Тільки ролі з атрибутом %s можуть змінювати налаштування глобально." -#: commands/user.c:1101 commands/user.c:1172 commands/user.c:1178 +#: commands/user.c:1100 commands/user.c:1171 commands/user.c:1177 #, c-format msgid "permission denied to drop role" msgstr "немає прав для видалення ролі" -#: commands/user.c:1102 +#: commands/user.c:1101 #, c-format msgid "Only roles with the %s attribute and the %s option on the target roles may drop roles." msgstr "Тільки ролі з атрибутом %s та опцією %s на цільових ролях можуть видаляти ролі." -#: commands/user.c:1126 +#: commands/user.c:1125 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "використати спеціальну роль у DROP ROLE не можна" -#: commands/user.c:1136 commands/user.c:1358 commands/variable.c:836 -#: commands/variable.c:839 commands/variable.c:923 commands/variable.c:926 -#: utils/adt/acl.c:356 utils/adt/acl.c:376 utils/adt/acl.c:5256 -#: utils/adt/acl.c:5304 utils/adt/acl.c:5332 utils/adt/acl.c:5351 -#: utils/adt/regproc.c:1551 utils/init/miscinit.c:756 +#: 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: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:762 #, c-format msgid "role \"%s\" does not exist" msgstr "роль \"%s\" не існує" -#: commands/user.c:1141 +#: commands/user.c:1140 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "роль \"%s\" не існує, пропускається" -#: commands/user.c:1154 commands/user.c:1158 +#: commands/user.c:1153 commands/user.c:1157 #, c-format msgid "current user cannot be dropped" msgstr "користувач не можна видалити сам себе" -#: commands/user.c:1162 +#: commands/user.c:1161 #, c-format msgid "session user cannot be dropped" msgstr "користувача поточного сеансу не можна видалити" -#: commands/user.c:1173 +#: commands/user.c:1172 #, c-format msgid "Only roles with the %s attribute may drop roles with the %s attribute." msgstr "Тільки ролі з атрибутом %s можуть видаляти ролі з атрибутом %s." -#: commands/user.c:1179 +#: commands/user.c:1178 #, c-format msgid "Only roles with the %s attribute and the %s option on role \"%s\" may drop this role." msgstr "Тільки ролі з атрибутом %s та опцією %s на роль \"%s\" можуть видалити цю роль." -#: commands/user.c:1300 +#: commands/user.c:1299 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "роль \"%s\" не можна видалити, тому що деякі об'єкти залежать від неї" -#: commands/user.c:1374 +#: commands/user.c:1373 #, c-format msgid "session user cannot be renamed" msgstr "користувача поточного сеансу не можна перейменувати" -#: commands/user.c:1378 +#: commands/user.c:1377 #, c-format msgid "current user cannot be renamed" msgstr "користувач не може перейменувати сам себе" -#: commands/user.c:1422 commands/user.c:1432 +#: commands/user.c:1421 commands/user.c:1431 #, c-format msgid "permission denied to rename role" msgstr "немає прав на перейменування ролі" -#: commands/user.c:1423 +#: commands/user.c:1422 #, c-format msgid "Only roles with the %s attribute may rename roles with the %s attribute." msgstr "Тільки ролі з атрибутом %s можуть перейменовувати ролі з атрибутом %s." -#: commands/user.c:1433 +#: commands/user.c:1432 #, c-format msgid "Only roles with the %s attribute and the %s option on role \"%s\" may rename this role." msgstr "Тільки ролі з атрибутом %s та опцією %s на роль \"%s\" можуть перейменувати цю роль." -#: commands/user.c:1455 +#: commands/user.c:1454 #, c-format msgid "MD5 password cleared because of role rename" msgstr "У результаті перейменування ролі сума MD5 паролю очищена" -#: commands/user.c:1519 gram.y:1260 +#: commands/user.c:1518 gram.y:1294 #, c-format msgid "unrecognized role option \"%s\"" msgstr "нерозпізнаний параметр ролі \"%s\"" -#: commands/user.c:1524 +#: commands/user.c:1523 #, c-format msgid "unrecognized value for role option \"%s\": \"%s\"" msgstr "нерозпізнане значення параметру ролі \"%s\": \"%s\"" -#: commands/user.c:1557 +#: commands/user.c:1556 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "в GRANT/REVOKE ROLE не можна включати назви стовпців" -#: commands/user.c:1597 +#: commands/user.c:1596 #, c-format msgid "permission denied to drop objects" msgstr "немає прав на видалення об'єктів" -#: commands/user.c:1598 +#: commands/user.c:1597 #, c-format msgid "Only roles with privileges of role \"%s\" may drop objects owned by it." msgstr "Тільки ролі з привілеями ролі \"%s\" можуть видаляти об'єкти, що належать йому." -#: commands/user.c:1626 commands/user.c:1637 +#: commands/user.c:1625 commands/user.c:1636 #, c-format msgid "permission denied to reassign objects" msgstr "немає прав на повторне призначення об'єктів" -#: commands/user.c:1627 +#: commands/user.c:1626 #, c-format msgid "Only roles with privileges of role \"%s\" may reassign objects owned by it." msgstr "Тільки ролі з привілеями ролі \"%s\" можуть переназначати об'єкти, що належать йому." -#: commands/user.c:1638 +#: commands/user.c:1637 #, c-format msgid "Only roles with privileges of role \"%s\" may reassign objects to it." msgstr "Тільки ролі з привілеями ролі \"%s\" можуть перепризначати об'єкти." -#: commands/user.c:1734 +#: commands/user.c:1733 #, c-format msgid "role \"%s\" cannot be a member of any role" msgstr "роль \"%s\" не може бути членом якої-небудь ролі" -#: commands/user.c:1747 +#: commands/user.c:1746 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "роль \"%s\" - учасник ролі \"%s\"" -#: commands/user.c:1787 commands/user.c:1813 +#: commands/user.c:1786 commands/user.c:1812 #, c-format msgid "%s option cannot be granted back to your own grantor" msgstr "параметр %s не можна призначити тому, хто призначив їх вам" -#: commands/user.c:1890 +#: commands/user.c:1889 #, c-format msgid "role \"%s\" has already been granted membership in role \"%s\" by role \"%s\"" msgstr "роль \"%s\" вже отримала членство в ролі \"%s\" від ролі \"%s\"" -#: commands/user.c:2025 +#: commands/user.c:2024 #, c-format msgid "role \"%s\" has not been granted membership in role \"%s\" by role \"%s\"" msgstr "роль \"%s\" не отримала членство в ролі \"%s\" від ролі \"%s\"" -#: commands/user.c:2125 +#: commands/user.c:2124 #, c-format msgid "role \"%s\" cannot have explicit members" msgstr "роль \"%s\" не може мати явних членів" -#: commands/user.c:2136 commands/user.c:2159 +#: commands/user.c:2135 commands/user.c:2158 #, c-format msgid "permission denied to grant role \"%s\"" msgstr "немає дозволу для надання ролі \"%s\"" -#: commands/user.c:2138 +#: commands/user.c:2137 #, c-format msgid "Only roles with the %s attribute may grant roles with the %s attribute." msgstr "Тільки ролі з атрибутом %s можуть надавати членство ролі з атрибутом %s." -#: commands/user.c:2143 commands/user.c:2166 +#: commands/user.c:2142 commands/user.c:2165 #, c-format msgid "permission denied to revoke role \"%s\"" msgstr "немає дозволу для відкликання ролі \"%s\"" -#: commands/user.c:2145 +#: commands/user.c:2144 #, c-format msgid "Only roles with the %s attribute may revoke roles with the %s attribute." msgstr "Тільки ролі з атрибутом %s можуть відкликати членство ролі з атрибутом %s." -#: commands/user.c:2161 +#: commands/user.c:2160 #, c-format msgid "Only roles with the %s option on role \"%s\" may grant this role." msgstr "Тільки ролі з опцією %s на роль \"%s\" можуть надавати членство до цієї ролі." -#: commands/user.c:2168 +#: commands/user.c:2167 #, c-format msgid "Only roles with the %s option on role \"%s\" may revoke this role." msgstr "Тільки ролі з опцією %s на роль \"%s\" можуть відкликати членство в цій ролі." -#: commands/user.c:2248 commands/user.c:2257 +#: commands/user.c:2247 commands/user.c:2256 #, c-format msgid "permission denied to grant privileges as role \"%s\"" msgstr "немає дозволу для надання привілеїв ролі \"%s\"" -#: commands/user.c:2250 +#: commands/user.c:2249 #, c-format msgid "Only roles with privileges of role \"%s\" may grant privileges as this role." msgstr "Тільки ролі з привілеями ролі \"%s\" можуть надавати привілеї цієї ролі." -#: commands/user.c:2259 +#: commands/user.c:2258 #, c-format msgid "The grantor must have the %s option on role \"%s\"." msgstr "Власник прав повинен мати опцію %s для ролі \"%s\"." -#: commands/user.c:2267 +#: commands/user.c:2266 #, c-format msgid "permission denied to revoke privileges granted by role \"%s\"" msgstr "відмовлено у дозволі на відкликання привілеїв, наданих роллю \"%s\"" -#: commands/user.c:2269 +#: commands/user.c:2268 #, c-format msgid "Only roles with privileges of role \"%s\" may revoke privileges granted by this role." msgstr "Тільки ролі з привілеями ролі \"%s\" можуть відкликати привілеї, надані цією роллю." -#: commands/user.c:2492 utils/adt/acl.c:1309 +#: commands/user.c:2491 utils/adt/acl.c:1324 #, c-format msgid "dependent privileges exist" msgstr "залежні права існують" -#: commands/user.c:2493 utils/adt/acl.c:1310 +#: commands/user.c:2492 utils/adt/acl.c:1325 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Використайте CASCADE, щоб відкликати їх." -#: commands/vacuum.c:137 +#: commands/vacuum.c:134 #, c-format msgid "\"vacuum_buffer_usage_limit\" must be 0 or between %d kB and %d kB" msgstr "\"vacuum_buffer_usage_limit\" має бути 0 або між %d та %d kB" @@ -12717,92 +13154,88 @@ msgstr "ONLY_DATABASE_STATS не можна вказувати з іншими msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s не можна виконати під час VACUUM або ANALYZE" -#: commands/vacuum.c:733 +#: commands/vacuum.c:730 #, c-format msgid "permission denied to vacuum \"%s\", skipping it" msgstr "немає дозволу для очистки\"%s\", пропускаємо його" -#: commands/vacuum.c:746 +#: commands/vacuum.c:743 #, c-format msgid "permission denied to analyze \"%s\", skipping it" msgstr "відмовлено в дозволі на аналіз \"%s\", пропуск" -#: commands/vacuum.c:824 commands/vacuum.c:921 +#: commands/vacuum.c:821 commands/vacuum.c:918 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "очистка \"%s\" пропускається --- блокування недоступне" -#: commands/vacuum.c:829 +#: commands/vacuum.c:826 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "очистка \"%s\" пропускається --- це відношення більше не існує" -#: commands/vacuum.c:845 commands/vacuum.c:926 +#: commands/vacuum.c:842 commands/vacuum.c:923 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "пропуск аналізу об'єкта \"%s\" --- блокування недоступне" -#: commands/vacuum.c:850 +#: commands/vacuum.c:847 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "пропуск аналізу об'єкта\"%s\" --- відношення більше не існує" -#: commands/vacuum.c:1161 +#: commands/vacuum.c:1139 #, c-format msgid "cutoff for removing and freezing tuples is far in the past" msgstr "відсікання для видалення та заморожування кортежів залишилося далеко в минулому" -#: commands/vacuum.c:1162 commands/vacuum.c:1167 +#: commands/vacuum.c:1140 commands/vacuum.c:1145 #, c-format -msgid "" -"Close open transactions soon to avoid wraparound problems.\n" +msgid "Close open transactions soon to avoid wraparound problems.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." -msgstr "" -"Завершіть відкриті транзакції якнайшвидше, щоб уникнути проблеми зациклення.\n" +msgstr "Завершіть відкриті транзакції якнайшвидше, щоб уникнути проблеми зациклення.\n" "Можливо, вам також доведеться затвердити або відкотити старі підготовленні транзакції, або видалити застарілі слоти реплікації." -#: commands/vacuum.c:1166 +#: commands/vacuum.c:1144 #, c-format msgid "cutoff for freezing multixacts is far in the past" msgstr "відсікання для заморожування мультитранзакцій залишилося далеко в минулому" -#: commands/vacuum.c:1908 +#: commands/vacuum.c:1890 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "деякі бази даних не очищалися протягом більш ніж 2 мільярдів транзакцій" -#: commands/vacuum.c:1909 +#: commands/vacuum.c:1891 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Можливо, ви вже втратили дані в результаті зациклення транзакцій." -#: commands/vacuum.c:2078 +#: commands/vacuum.c:2070 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "пропускається \"%s\" --- очищати не таблиці або спеціальні системні таблиці не можна" -#: commands/vacuum.c:2503 +#: commands/vacuum.c:2502 #, c-format -msgid "scanned index \"%s\" to remove %d row versions" -msgstr "просканований індекс \"%s\", видалено версій рядків %d" +msgid "scanned index \"%s\" to remove %lld row versions" +msgstr "" -#: commands/vacuum.c:2522 +#: commands/vacuum.c:2521 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "індекс \"%s\" наразі містить %.0f версій рядків у %u сторінках" -#: commands/vacuum.c:2526 +#: commands/vacuum.c:2525 #, c-format -msgid "" -"%.0f index row versions were removed.\n" +msgid "%.0f index row versions were removed.\n" "%u index pages were newly deleted.\n" "%u index pages are currently deleted, of which %u are currently reusable." -msgstr "" -"%.0f версій індексних рядків було видалено.\n" +msgstr "%.0f версій індексних рядків було видалено.\n" "%u індексних сторінок щойно видалено.\n" "%u індексних сторінок наразі видалено, з яких %u наразі можна використовувати повторно." -#: commands/vacuumparallel.c:677 +#: commands/vacuumparallel.c:708 #, 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)" @@ -12811,7 +13244,7 @@ msgstr[1] "запущено %d паралельних виконавців оч msgstr[2] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" msgstr[3] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" -#: commands/vacuumparallel.c:683 +#: commands/vacuumparallel.c:714 #, 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)" @@ -12875,7 +13308,7 @@ msgstr "Команда SET TRANSACTION ISOLATION LEVEL повинна викли msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "Команда SET TRANSACTION ISOLATION LEVEL не повинна викликатияь в підтранзакції" -#: commands/variable.c:606 storage/lmgr/predicate.c:1629 +#: commands/variable.c:606 storage/lmgr/predicate.c:1680 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "використовувати серіалізований режим в hot standby не можна" @@ -12907,90 +13340,100 @@ msgstr "Змінити клієнтське кодування зараз нем #: commands/variable.c:781 #, c-format -msgid "cannot change client_encoding during a parallel operation" -msgstr "змінити клієнтське кодування під час паралельної операції неможливо" +msgid "cannot change \"client_encoding\" during a parallel operation" +msgstr "" + +#: commands/variable.c:863 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "буде відмовлено у встановленні авторизації сеансу \"%s\"" + +#: commands/variable.c:868 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "відмовлено у встановленні авторизації сеансу \"%s\"" -#: commands/variable.c:948 +#: commands/variable.c:972 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "немає прав для встановлення ролі \"%s\"" -#: commands/variable.c:953 +#: commands/variable.c:977 #, c-format msgid "permission denied to set role \"%s\"" msgstr "немає прав для встановлення ролі \"%s\"" -#: commands/variable.c:1153 +#: commands/variable.c:1177 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour не підтримується даною збіркою" -#: commands/variable.c:1181 +#: commands/variable.c:1205 #, c-format -msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." -msgstr "значення effective_io_concurrency повинне дорівнювати 0 (нулю) на платформах, де відсутній posix_fadvise()." +msgid "\"effective_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." +msgstr "" -#: commands/variable.c:1194 +#: commands/variable.c:1218 #, c-format -msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." -msgstr "maintenance_io_concurrency повинне бути встановлене на 0, на платформах які не мають posix_fadvise()." +msgid "\"maintenance_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." +msgstr "" -#: commands/variable.c:1207 +#: commands/variable.c:1231 #, c-format msgid "SSL is not supported by this build" msgstr "SSL не підтримується даною збіркою" -#: commands/view.c:84 +#: commands/view.c:79 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "не вдалося визначити, яке правило сортування використати для стовпця подання \"%s\"" -#: commands/view.c:279 commands/view.c:290 +#: commands/view.c:274 commands/view.c:285 #, c-format msgid "cannot drop columns from view" msgstr "видалити стовпці з подання неможливо" -#: commands/view.c:295 +#: commands/view.c:290 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "змінити ім'я стовпця \"%s\" на \"%s\" в поданні неможливо" -#: commands/view.c:298 +#: commands/view.c:293 #, c-format msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." msgstr "Щоб змінити назву стовпця подання, замість цього використайте ALTER VIEW ... RENAME COLUMN." -#: commands/view.c:309 +#: commands/view.c:304 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "змінити тип стовпця подання \"%s\" з %s на %s неможливо" -#: commands/view.c:323 +#: commands/view.c:318 #, c-format msgid "cannot change collation of view column \"%s\" from \"%s\" to \"%s\"" msgstr "змінити параметри сортування стовпця подання \"%s\" з \"%s\" на \"%s\" не можна" -#: commands/view.c:392 +#: commands/view.c:387 #, c-format msgid "views must not contain SELECT INTO" msgstr "подання не повинні містити SELECT INTO" -#: commands/view.c:404 +#: commands/view.c:399 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "подання не повинні містити інструкції, які змінюють дані в WITH" -#: commands/view.c:474 +#: commands/view.c:469 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "У CREATE VIEW вказано більше імен стовпців, ніж самих стовпців" -#: commands/view.c:482 +#: commands/view.c:477 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "подання не можуть бути нежурнальованими, так як вони не мають сховища" -#: commands/view.c:496 +#: commands/view.c:491 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "подання \"%s\" буде тичасовим поданням" @@ -13026,58 +13469,58 @@ msgstr "курсор \"%s\" не розташовується у рядку" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "курсор \"%s\" - не просте оновлюване сканування таблиці \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2498 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2543 #, 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:2510 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2555 #, c-format msgid "no value found for parameter %d" msgstr "не знайдено значення для параметру %d" -#: executor/execExpr.c:637 executor/execExpr.c:644 executor/execExpr.c:650 -#: executor/execExprInterp.c:4234 executor/execExprInterp.c:4251 -#: executor/execExprInterp.c:4350 executor/nodeModifyTable.c:197 -#: executor/nodeModifyTable.c:208 executor/nodeModifyTable.c:225 -#: executor/nodeModifyTable.c:233 +#: executor/execExpr.c:642 executor/execExpr.c:649 executor/execExpr.c:655 +#: executor/execExprInterp.c:4840 executor/execExprInterp.c:4857 +#: executor/execExprInterp.c:4956 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:638 executor/nodeModifyTable.c:198 +#: executor/execExpr.c:643 executor/nodeModifyTable.c:204 #, c-format msgid "Query has too many columns." msgstr "Запит повертає дуже багато стовпців." -#: executor/execExpr.c:645 executor/nodeModifyTable.c:226 +#: executor/execExpr.c:650 executor/nodeModifyTable.c:232 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "Запит надає значення для видаленого стовпця з порядковим номером %d." -#: executor/execExpr.c:651 executor/execExprInterp.c:4252 -#: executor/nodeModifyTable.c:209 +#: executor/execExpr.c:656 executor/execExprInterp.c:4858 +#: executor/nodeModifyTable.c:215 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "Таблиця має тип %s у порядковому розташуванні %d, але запит очікує %s." -#: executor/execExpr.c:1099 parser/parse_agg.c:838 +#: executor/execExpr.c:1104 parser/parse_agg.c:838 #, c-format msgid "window function calls cannot be nested" msgstr "виклики віконних функцій не можуть бути вкладеними" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1641 #, c-format msgid "target type is not an array" msgstr "цільовий тип не є масивом" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1981 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "Стовпець ROW() має тип %s замість %s" -#: executor/execExpr.c:2574 executor/execSRF.c:719 parser/parse_func.c:138 -#: parser/parse_func.c:655 parser/parse_func.c:1032 +#: executor/execExpr.c:2643 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" @@ -13086,104 +13529,121 @@ msgstr[1] "функції не можна передати більше ніж % msgstr[2] "функції не можна передати більше ніж %d аргументів" msgstr[3] "функції не можна передати більше ніж %d аргументів" -#: executor/execExpr.c:2601 executor/execSRF.c:739 executor/functions.c:1066 -#: utils/adt/jsonfuncs.c:3780 utils/fmgr/funcapi.c:89 utils/fmgr/funcapi.c:143 +#: executor/execExpr.c:2670 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 "функція \"set-valued\" викликана в контексті, де йому немає місця" -#: executor/execExpr.c:3007 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:3076 parser/parse_node.c:272 parser/parse_node.c:322 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "не можна підписати вказати тип %s, тому що він не підтримує підписку" -#: executor/execExpr.c:3135 executor/execExpr.c:3157 +#: executor/execExpr.c:3204 executor/execExpr.c:3226 #, c-format msgid "type %s does not support subscripted assignment" msgstr "тип %s не підтримує вказані присвоєння за підпискою" -#: executor/execExprInterp.c:1962 +#: executor/execExprInterp.c:2007 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "атрибут %d типу %s був видалений" -#: executor/execExprInterp.c:1968 +#: executor/execExprInterp.c:2013 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "атрибут %d типу %s має неправильний тип" -#: executor/execExprInterp.c:1970 executor/execExprInterp.c:3104 -#: executor/execExprInterp.c:3150 +#: executor/execExprInterp.c:2015 executor/execExprInterp.c:3214 +#: executor/execExprInterp.c:3260 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Таблиця має тип %s, але запит очікував %s." -#: executor/execExprInterp.c:2050 utils/adt/expandedrecord.c:99 -#: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1749 -#: utils/cache/typcache.c:1908 utils/cache/typcache.c:2055 -#: utils/fmgr/funcapi.c:561 +#: 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 #, c-format msgid "type %s is not composite" msgstr "тип %s не є складеним" -#: executor/execExprInterp.c:2588 +#: executor/execExprInterp.c:2698 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиць такого типу не підтримується" -#: executor/execExprInterp.c:2801 +#: executor/execExprInterp.c:2911 #, c-format msgid "cannot merge incompatible arrays" msgstr "не можна об'єднати несумісні масиви" -#: executor/execExprInterp.c:2802 +#: executor/execExprInterp.c:2912 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Масив з типом елементів %s не може бути включений в конструкцію ARRAY з типом елементів %s." -#: executor/execExprInterp.c:2823 utils/adt/arrayfuncs.c:266 -#: utils/adt/arrayfuncs.c:576 utils/adt/arrayfuncs.c:1330 -#: utils/adt/arrayfuncs.c:3532 utils/adt/arrayfuncs.c:5616 -#: utils/adt/arrayfuncs.c:6133 utils/adt/arraysubs.c:150 +#: executor/execExprInterp.c:2933 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:2843 executor/execExprInterp.c:2878 +#: executor/execExprInterp.c:2953 executor/execExprInterp.c:2988 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "для багатовимірних масивів повинні задаватись вирази з відповідними вимірами" -#: executor/execExprInterp.c:2855 utils/adt/array_expanded.c:274 -#: utils/adt/arrayfuncs.c:960 utils/adt/arrayfuncs.c:1569 -#: utils/adt/arrayfuncs.c:2377 utils/adt/arrayfuncs.c:2392 -#: utils/adt/arrayfuncs.c:2654 utils/adt/arrayfuncs.c:2670 -#: utils/adt/arrayfuncs.c:2978 utils/adt/arrayfuncs.c:2993 -#: utils/adt/arrayfuncs.c:3334 utils/adt/arrayfuncs.c:3562 -#: utils/adt/arrayfuncs.c:6225 utils/adt/arrayfuncs.c:6566 -#: utils/adt/arrayutils.c:98 utils/adt/arrayutils.c:107 -#: utils/adt/arrayutils.c:114 +#: 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: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:3103 executor/execExprInterp.c:3149 +#: executor/execExprInterp.c:3213 executor/execExprInterp.c:3259 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d має неправильний тип" -#: executor/execExprInterp.c:3735 utils/adt/domains.c:155 +#: executor/execExprInterp.c:3845 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускає значення null" -#: executor/execExprInterp.c:3750 utils/adt/domains.c:193 +#: executor/execExprInterp.c:3860 utils/adt/domains.c:196 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "значення домену %s порушує перевірочнео бмеження \"%s\"" -#: executor/execExprInterp.c:4235 +#: executor/execExprInterp.c:4435 +#, c-format +msgid "no SQL/JSON item found for specified path of column \"%s\"" +msgstr "" + +#: executor/execExprInterp.c:4440 +#, c-format +msgid "no SQL/JSON item found for specified path" +msgstr "" + +#. translator: first %s is a SQL/JSON clause (e.g. ON ERROR) +#: executor/execExprInterp.c:4640 executor/execExprInterp.c:4648 +#, c-format +msgid "could not coerce %s expression (%s) to the RETURNING type" +msgstr "" + +#: executor/execExprInterp.c:4841 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." @@ -13192,329 +13652,293 @@ msgstr[1] "Рядок таблиці містить %d атрибути, але msgstr[2] "Рядок таблиці містить %d атрибутів, але запит очікував %d." msgstr[3] "Рядок таблиці містить %d атрибутів, але запит очікував %d." -#: executor/execExprInterp.c:4351 executor/execSRF.c:978 +#: executor/execExprInterp.c:4957 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Невідповідність параметрів фізичного зберігання видаленого атрибуту %d." -#: executor/execIndexing.c:588 +#: executor/execIndexing.c:593 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "ON CONFLICT не підтримує відкладені обмеження унікальності/обмеження-виключення в якості визначального індексу" -#: executor/execIndexing.c:865 +#: executor/execIndexing.c:870 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "не вдалося створити обмеження-виключення \"%s\"" -#: executor/execIndexing.c:868 +#: executor/execIndexing.c:873 #, c-format msgid "Key %s conflicts with key %s." msgstr "Ключ %s конфліктує з ключем %s." -#: executor/execIndexing.c:870 +#: executor/execIndexing.c:875 #, c-format msgid "Key conflicts exist." msgstr "Існують конфлікти ключей." -#: executor/execIndexing.c:876 +#: executor/execIndexing.c:881 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "конфліктуюче значення ключа порушує обмеження-виключення \"%s\"" -#: executor/execIndexing.c:879 +#: executor/execIndexing.c:884 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "Ключ %s конфліктує з існуючим ключем %s." -#: executor/execIndexing.c:881 +#: executor/execIndexing.c:886 #, c-format msgid "Key conflicts with existing key." msgstr "Ключ конфліктує з існуючим ключем." -#: executor/execMain.c:1039 +#: executor/execMain.c:1043 #, c-format msgid "cannot change sequence \"%s\"" msgstr "послідовність \"%s\" не можна змінити" -#: executor/execMain.c:1045 +#: executor/execMain.c:1049 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-відношення \"%s\" не можна змінити" -#: executor/execMain.c:1063 rewrite/rewriteHandler.c:3079 -#: rewrite/rewriteHandler.c:3966 -#, c-format -msgid "cannot insert into view \"%s\"" -msgstr "вставити дані в подання \"%s\" не можна" - -#: executor/execMain.c:1065 rewrite/rewriteHandler.c:3082 -#: rewrite/rewriteHandler.c:3969 -#, c-format -msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." -msgstr "Щоб подання допускало додавання даних, встановіть тригер INSTEAD OF INSERT або безумовне правило ON INSERT DO INSTEAD." - -#: executor/execMain.c:1071 rewrite/rewriteHandler.c:3087 -#: rewrite/rewriteHandler.c:3974 -#, c-format -msgid "cannot update view \"%s\"" -msgstr "оновити подання \"%s\" не можна" - -#: executor/execMain.c:1073 rewrite/rewriteHandler.c:3090 -#: rewrite/rewriteHandler.c:3977 -#, c-format -msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." -msgstr "Щоб подання допускало оновлення, встановіть тригер INSTEAD OF UPDATE або безумовне правило ON UPDATE DO INSTEAD." - -#: executor/execMain.c:1079 rewrite/rewriteHandler.c:3095 -#: rewrite/rewriteHandler.c:3982 -#, c-format -msgid "cannot delete from view \"%s\"" -msgstr "видалити дані з подання \"%s\" не можна" - -#: executor/execMain.c:1081 rewrite/rewriteHandler.c:3098 -#: rewrite/rewriteHandler.c:3985 -#, c-format -msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." -msgstr "Щоб подання допускало видалення даних, встановіть тригер INSTEAD OF DELETE або безумновне правило ON DELETE DO INSTEAD." - -#: executor/execMain.c:1092 +#: executor/execMain.c:1068 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "змінити матеріалізоване подання \"%s\" не можна" -#: executor/execMain.c:1104 +#: executor/execMain.c:1080 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "вставляти дані в зовнішню таблицю \"%s\" не можна" -#: executor/execMain.c:1110 +#: executor/execMain.c:1086 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "зовнішня таблиця \"%s\" не допускає додавання даних" -#: executor/execMain.c:1117 +#: executor/execMain.c:1093 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "оновити зовнішню таблицю \"%s\" не можна" -#: executor/execMain.c:1123 +#: executor/execMain.c:1099 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "зовнішня таблиця \"%s\" не дозволяє оновлення" -#: executor/execMain.c:1130 +#: executor/execMain.c:1106 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "видаляти дані з зовнішньої таблиці \"%s\" не можна" -#: executor/execMain.c:1136 +#: executor/execMain.c:1112 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "зовнішня таблиця \"%s\" не дозволяє видалення даних" -#: executor/execMain.c:1147 +#: executor/execMain.c:1123 #, c-format msgid "cannot change relation \"%s\"" msgstr "відношення \"%s\" не можна змінити" -#: executor/execMain.c:1174 +#: executor/execMain.c:1150 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "блокувати рядки в послідовності \"%s\" не можна" -#: executor/execMain.c:1181 +#: executor/execMain.c:1157 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "блокувати рядки в TOAST-відношенні \"%s\" не можна" -#: executor/execMain.c:1188 +#: executor/execMain.c:1164 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "блокувати рядки в поданні \"%s\" не можна" -#: executor/execMain.c:1196 +#: executor/execMain.c:1172 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокувати рядки в матеріалізованому поданні \"%s\" не можна" -#: executor/execMain.c:1205 executor/execMain.c:2708 +#: executor/execMain.c:1181 executor/execMain.c:2686 #: executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "блокувати рядки в зовнішній таблиці \"%s\" не можна" -#: executor/execMain.c:1211 +#: executor/execMain.c:1187 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "блокувати рядки у відношенні \"%s\" не можна" -#: executor/execMain.c:1922 +#: executor/execMain.c:1900 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "новий рядок для відношення \"%s\" порушує обмеження секції" -#: executor/execMain.c:1924 executor/execMain.c:2008 executor/execMain.c:2059 -#: executor/execMain.c:2169 +#: executor/execMain.c:1902 executor/execMain.c:1986 executor/execMain.c:2037 +#: executor/execMain.c:2147 #, c-format msgid "Failing row contains %s." msgstr "Помилковий рядок містить %s." -#: executor/execMain.c:2005 +#: executor/execMain.c:1983 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "null значення в стовпці \"%s\" відношення \"%s\" порушує not-null обмеження" -#: executor/execMain.c:2057 +#: executor/execMain.c:2035 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новий рядок для відношення \"%s\" порушує перевірне обмеження перевірку \"%s\"" -#: executor/execMain.c:2167 +#: executor/execMain.c:2145 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "новий рядок порушує параметр перевірки для подання \"%s\"" -#: executor/execMain.c:2177 +#: executor/execMain.c:2155 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків \"%s\" для таблиці \"%s\"" -#: executor/execMain.c:2182 +#: executor/execMain.c:2160 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків для таблиці \"%s\"" -#: executor/execMain.c:2190 +#: executor/execMain.c:2168 #, c-format msgid "target row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "цільовий рядок порушує політику захисту на рівні рядків \"%s\" (вираз USING) для таблиці \"%s\"" -#: executor/execMain.c:2195 +#: executor/execMain.c:2173 #, c-format msgid "target row violates row-level security policy (USING expression) for table \"%s\"" msgstr "цільовий рядок порушує політику захисту на рівні рядків (вираз USING) для таблиці \"%s\"" -#: executor/execMain.c:2202 +#: executor/execMain.c:2180 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків \"%s\" (вираз USING) для таблиці \"%s\"" -#: executor/execMain.c:2207 +#: executor/execMain.c:2185 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків (вираз USING) для таблиці \"%s\"" -#: executor/execPartition.c:330 +#: executor/execPartition.c:327 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "для рядка не знайдено секції у відношенні \"%s\"" -#: executor/execPartition.c:333 +#: executor/execPartition.c:330 #, c-format msgid "Partition key of the failing row contains %s." msgstr "Ключ секціонування для невідповідного рядка містить %s." -#: executor/execReplication.c:231 executor/execReplication.c:415 +#: executor/execReplication.c:272 executor/execReplication.c:456 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "кортеж, що підлягає блокуванню, вже переміщено в іншу секцію в результаті паралельного оновлення, триває повторна спроба" -#: executor/execReplication.c:235 executor/execReplication.c:419 +#: executor/execReplication.c:276 executor/execReplication.c:460 #, c-format msgid "concurrent update, retrying" msgstr "паралельне оновлення, триває повторна спроба" -#: executor/execReplication.c:241 executor/execReplication.c:425 +#: executor/execReplication.c:282 executor/execReplication.c:466 #, c-format msgid "concurrent delete, retrying" msgstr "паралельне видалення, триває повторна спроба" -#: executor/execReplication.c:311 parser/parse_cte.c:308 -#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:1348 -#: utils/adt/array_userfuncs.c:1491 utils/adt/arrayfuncs.c:3881 -#: utils/adt/arrayfuncs.c:4436 utils/adt/arrayfuncs.c:6446 -#: utils/adt/rowtypes.c:1230 +#: 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:642 executor/execReplication.c:648 +#: executor/execReplication.c:683 executor/execReplication.c:689 #, c-format msgid "cannot update table \"%s\"" msgstr "оновити таблицю \"%s\" не можна" -#: executor/execReplication.c:644 executor/execReplication.c:656 +#: executor/execReplication.c:685 executor/execReplication.c:697 #, c-format msgid "Column used in the publication WHERE expression is not part of the replica identity." msgstr "Стовпець, що використовується в виразі WHERE публікації не є частиною ідентифікації репліки." -#: executor/execReplication.c:650 executor/execReplication.c:662 +#: executor/execReplication.c:691 executor/execReplication.c:703 #, c-format msgid "Column list used by the publication does not cover the replica identity." msgstr "Список стовпців, який використовується публікацією, не охоплює ідентифікацію репліки." -#: executor/execReplication.c:654 executor/execReplication.c:660 +#: executor/execReplication.c:695 executor/execReplication.c:701 #, c-format msgid "cannot delete from table \"%s\"" msgstr "видалити дані з таблиці \"%s\" не можна" -#: executor/execReplication.c:680 +#: executor/execReplication.c:721 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "оновлення в таблиці \"%s\" неможливе, тому що в ній відсутній ідентифікатор репліки, і вона публікує оновлення" -#: executor/execReplication.c:682 +#: executor/execReplication.c:723 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Щоб ця таблиця підтримувала оновлення, встановіть REPLICA IDENTITY, використавши ALTER TABLE." -#: executor/execReplication.c:686 +#: executor/execReplication.c:727 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "видалення з таблиці \"%s\" неможливе, тому що в ній відсутній ідентифікатор репліки, і вона публікує видалення" -#: executor/execReplication.c:688 +#: executor/execReplication.c:729 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Щоб ця таблиця підтримувала видалення, встановіть REPLICA IDENTITY, використавши ALTER TABLE." -#: executor/execReplication.c:704 +#: executor/execReplication.c:745 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "використовувати відношення \"%s.%s\" як ціль логічної реплікації, не можна" -#: executor/execSRF.c:316 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "рядки, які повернула функція, не мають однаковий тип рядка" -#: executor/execSRF.c:366 +#: executor/execSRF.c:365 #, c-format msgid "table-function protocol for value-per-call mode was not followed" msgstr "протокол функції-таблиці для режиму значення-на-виклик не дотримувався" -#: executor/execSRF.c:374 executor/execSRF.c:668 +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "порушення протоколу табличної функції в режимі матеріалізації" -#: executor/execSRF.c:381 executor/execSRF.c:686 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "нерозпізнаний режим повернення табличної функції: %d" -#: executor/execSRF.c:895 +#: executor/execSRF.c:894 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "функція, що повертає набір записів, викликана в контексті, що не може прийняти тип запису" -#: executor/execSRF.c:951 executor/execSRF.c:967 executor/execSRF.c:977 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "тип результату функції відрізняється від типу рядка-результату запиту" -#: executor/execSRF.c:952 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." @@ -13523,23 +13947,33 @@ msgstr[1] "Повернений рядок містить %d атрибути, msgstr[2] "Повернений рядок містить %d атрибутів, але запит очікував %d." msgstr[3] "Повернений рядок містить %d атрибутів, але запит очікував %d." -#: executor/execSRF.c:968 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Повернений тип %s у порядковій позиції %d, але запит очікував %s." -#: executor/execTuples.c:146 executor/execTuples.c:353 -#: executor/execTuples.c:521 executor/execTuples.c:713 +#: executor/execTuples.c:147 executor/execTuples.c:368 +#: executor/execTuples.c:563 executor/execTuples.c:772 #, c-format msgid "cannot retrieve a system column in this context" msgstr "не можна отримати системний стовпець в цьому контексті" -#: executor/execUtils.c:744 +#: executor/execTuples.c:163 executor/execTuples.c:580 +#, c-format +msgid "don't have transaction information for this type of tuple" +msgstr "" + +#: executor/execTuples.c:390 executor/execTuples.c:794 +#, c-format +msgid "don't have a storage tuple in this context" +msgstr "" + +#: executor/execUtils.c:713 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "матеріалізоване подання \"%s\" не було наповнене" -#: executor/execUtils.c:746 +#: executor/execUtils.c:715 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Використайте команду REFRESH MATERIALIZED VIEW." @@ -13549,111 +13983,111 @@ msgstr "Використайте команду REFRESH MATERIALIZED VIEW." 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 "функція SQL не дозволяє використання %s" #. translator: %s is a SQL statement name -#: executor/functions.c:526 executor/spi.c:1742 executor/spi.c:2635 +#: executor/functions.c:527 executor/spi.c:1741 executor/spi.c:2651 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "незмінна функція не дозволяє використання %s" -#: executor/functions.c:1450 +#: executor/functions.c:1452 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL функція \"%s\" оператор %d" -#: executor/functions.c:1476 +#: executor/functions.c:1478 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL функція \"%s\" під час запуску" -#: executor/functions.c:1561 +#: executor/functions.c:1563 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "виклик процедур з вихідними аргументами в функціях SQL не підтримується" -#: executor/functions.c:1694 executor/functions.c:1732 -#: executor/functions.c:1746 executor/functions.c:1836 -#: executor/functions.c:1869 executor/functions.c:1883 +#: 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:1696 +#: executor/functions.c:1700 #, c-format -msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." -msgstr "Останнім оператором у функції повинен бути SELECT або INSERT/UPDATE/DELETE RETURNING." +msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." +msgstr "" -#: executor/functions.c:1734 +#: executor/functions.c:1738 #, c-format msgid "Final statement must return exactly one column." msgstr "Останній оператор повинен вертати один стовпець." -#: executor/functions.c:1748 +#: executor/functions.c:1752 #, c-format msgid "Actual return type is %s." msgstr "Фактичний тип повернення: %s." -#: executor/functions.c:1838 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns too many columns." msgstr "Останній оператор вертає дуже багато стовпців." -#: executor/functions.c:1871 +#: executor/functions.c:1880 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Останній оператор поветрає %s замість %s для стовпця %d." -#: executor/functions.c:1885 +#: executor/functions.c:1894 #, c-format msgid "Final statement returns too few columns." msgstr "Останній оператор вертає дуже мало стовпців." -#: executor/functions.c:1913 +#: executor/functions.c:1922 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "для SQL функцій тип повернення %s не підтримується" -#: executor/nodeAgg.c:3937 executor/nodeWindowAgg.c:2993 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2976 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "агрегатна функція %u повинна мати сумісні тип введення і тип переходу" -#: executor/nodeAgg.c:3967 parser/parse_agg.c:680 parser/parse_agg.c:708 +#: executor/nodeAgg.c:3966 parser/parse_agg.c:680 parser/parse_agg.c:708 #, c-format msgid "aggregate function calls cannot be nested" msgstr "виклики агрегатних функцій не можуть бути вкладеними" -#: executor/nodeCustom.c:154 executor/nodeCustom.c:165 +#: executor/nodeCustom.c:144 executor/nodeCustom.c:155 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "налаштовуване сканування \"%s\" не підтримує MarkPos" -#: executor/nodeHashjoin.c:1143 executor/nodeHashjoin.c:1173 +#: executor/nodeHashjoin.c:1131 executor/nodeHashjoin.c:1161 #, c-format msgid "could not rewind hash-join temporary file" msgstr "не вдалося перемотати назад тимчасовий файл хеш-з'єднання" -#: executor/nodeIndexonlyscan.c:238 +#: executor/nodeIndexonlyscan.c:239 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "функції неточної (lossy) дистанції не підтримуються в скануваннях лише по індексу" -#: executor/nodeLimit.c:374 +#: executor/nodeLimit.c:373 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET повинен бути не негативним" -#: executor/nodeLimit.c:400 +#: executor/nodeLimit.c:399 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT повинен бути не негативним" @@ -13668,73 +14102,74 @@ msgstr "RIGHT JOIN підтримується лише з умовами, які msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN підтримується лише з умовами, які допускають з'єднання злиттям" -#: executor/nodeModifyTable.c:234 +#: executor/nodeModifyTable.c:240 #, c-format msgid "Query has too few columns." msgstr "Запит повертає дуже мало стовпців." -#: executor/nodeModifyTable.c:1534 executor/nodeModifyTable.c:1608 +#: 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:1763 +#: executor/nodeModifyTable.c:1769 #, c-format msgid "invalid ON UPDATE specification" msgstr "неприпустима специфікація ON UPDATE" -#: executor/nodeModifyTable.c:1764 +#: executor/nodeModifyTable.c:1770 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Результуючий кортеж з'явиться в іншій секції в порівнянні з оригінальним кортежем." -#: executor/nodeModifyTable.c:2223 +#: 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:2224 +#: executor/nodeModifyTable.c:2227 #, c-format msgid "A foreign key points to ancestor \"%s\" but not the root ancestor \"%s\"." msgstr "Зовнішній ключ вказує на предка \"%s\", але не на кореневого предка \"%s\"." -#: executor/nodeModifyTable.c:2227 +#: 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:2573 executor/nodeModifyTable.c:2975 +#: executor/nodeModifyTable.c:2577 executor/nodeModifyTable.c:3099 +#: executor/nodeModifyTable.c:3260 #, c-format msgid "%s command cannot affect row a second time" msgstr "команда %s не може вплинути на рядок вдруге" -#: executor/nodeModifyTable.c:2575 +#: executor/nodeModifyTable.c:2579 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Переконайтеся, що немає рядків для вставки з тією ж командою з дуплікованими обмежувальними значеннями." -#: executor/nodeModifyTable.c:2977 +#: executor/nodeModifyTable.c:3092 executor/nodeModifyTable.c:3253 #, c-format -msgid "Ensure that not more than one source row matches any one target row." -msgstr "Переконайтесь, що не більше ніж один вихідний рядок відповідає будь-якому одному цільовому рядку." +msgid "tuple to be updated or deleted was already modified by an operation triggered by the current command" +msgstr "кортеж, який підлягає оновленню або видаленню, вже змінено операцією, викликаною поточною командою" -#: executor/nodeModifyTable.c:3058 +#: executor/nodeModifyTable.c:3101 executor/nodeModifyTable.c:3262 #, c-format -msgid "tuple to be deleted was already moved to another partition due to concurrent update" -msgstr "кортеж, який підлягає видаленню, вже переміщено в іншу секцію в результаті паралельного оновлення" +msgid "Ensure that not more than one source row matches any one target row." +msgstr "Переконайтесь, що не більше ніж один вихідний рядок відповідає будь-якому одному цільовому рядку." -#: executor/nodeModifyTable.c:3097 +#: executor/nodeModifyTable.c:3170 #, c-format -msgid "tuple to be updated or deleted was already modified by an operation triggered by the current command" -msgstr "кортеж, який підлягає оновленню або видаленню, вже змінено операцією, викликаною поточною командою" +msgid "tuple to be merged was already moved to another partition due to concurrent update" +msgstr "" -#: executor/nodeSamplescan.c:260 +#: executor/nodeSamplescan.c:244 #, c-format msgid "TABLESAMPLE parameter cannot be null" msgstr "Параметр TABLESAMPLE не може бути null" -#: executor/nodeSamplescan.c:272 +#: executor/nodeSamplescan.c:256 #, c-format msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "Параметр TABLESAMPLE REPEATABLE не може бути null" @@ -13745,7 +14180,7 @@ msgstr "Параметр TABLESAMPLE REPEATABLE не може бути null" msgid "more than one row returned by a subquery used as an expression" msgstr "підзапит, використаний в якості вираження, повернув більше ніж один рядок" -#: executor/nodeTableFuncscan.c:375 +#: executor/nodeTableFuncscan.c:370 #, c-format msgid "namespace URI must not be null" msgstr "простір імен URI не повинен бути null" @@ -13755,17 +14190,17 @@ msgstr "простір імен URI не повинен бути null" msgid "row filter expression must not be null" msgstr "вираз фільтру рядків не повинен бути null" -#: executor/nodeTableFuncscan.c:415 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "column filter expression must not be null" msgstr "вираз фільтру стовпців не повинен бути null" -#: executor/nodeTableFuncscan.c:416 +#: executor/nodeTableFuncscan.c:417 #, c-format msgid "Filter for column \"%s\" is null." msgstr "Фільтр для стовпця \"%s\" є null." -#: executor/nodeTableFuncscan.c:506 +#: executor/nodeTableFuncscan.c:507 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "у стовпці \"%s\" не допускається null" @@ -13795,84 +14230,84 @@ msgstr "зсув кінця рамки не повинен бути null" msgid "frame ending offset must not be negative" msgstr "зсув кінця рамки не повинен бути негативним" -#: executor/nodeWindowAgg.c:2909 +#: executor/nodeWindowAgg.c:2892 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "агрегатна функція %s не підтримує використання в якості віконної функції" -#: executor/spi.c:242 executor/spi.c:342 +#: executor/spi.c:241 executor/spi.c:341 #, c-format msgid "invalid transaction termination" msgstr "неприпустиме завершення транзакції" -#: executor/spi.c:257 +#: executor/spi.c:256 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "неможливо затвердити, коли підтранзакції активні" -#: executor/spi.c:348 +#: executor/spi.c:347 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "неможливо відкотити, коли підтранзакції активні" -#: executor/spi.c:472 +#: executor/spi.c:471 #, c-format msgid "transaction left non-empty SPI stack" msgstr "транзакція залишила непорожню групу SPI" -#: executor/spi.c:473 executor/spi.c:533 +#: executor/spi.c:472 executor/spi.c:532 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Перевірте наявність виклику \"SPI_finish\"." -#: executor/spi.c:532 +#: executor/spi.c:531 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "підтранзакція залишила непорожню групу SPI" -#: executor/spi.c:1600 +#: executor/spi.c:1599 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "неможливо відкрити план декількох запитів як курсор" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1610 +#: executor/spi.c:1609 #, c-format msgid "cannot open %s query as cursor" msgstr "неможливо відкрити запит %s як курсор" -#: executor/spi.c:1716 +#: executor/spi.c:1715 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE не підтримується" -#: executor/spi.c:1717 parser/analyze.c:2912 +#: executor/spi.c:1716 parser/analyze.c:2928 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Курсори з прокручуванням повинні бути READ ONLY." -#: executor/spi.c:2474 +#: executor/spi.c:2490 #, c-format msgid "empty query does not return tuples" msgstr "пустий запит не повертає кортежі" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:2548 +#: executor/spi.c:2564 #, c-format msgid "%s query does not return tuples" msgstr "%s запит не повертає кортежі" -#: executor/spi.c:2963 +#: executor/spi.c:2981 #, c-format msgid "SQL expression \"%s\"" msgstr "SQL вираз \"%s\"" -#: executor/spi.c:2968 +#: executor/spi.c:2986 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL присвоєння \"%s\"" -#: executor/spi.c:2971 +#: executor/spi.c:2989 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-оператор \"%s\"" @@ -13882,28 +14317,34 @@ msgstr "SQL-оператор \"%s\"" msgid "could not send tuple to shared-memory queue" msgstr "не вдалося передати кортеж у чергу в спільну пам'ять" -#: foreign/foreign.c:222 +#: foreign/foreign.c:225 +#, c-format +msgid "user mapping not found for user \"%s\", server \"%s\"" +msgstr "зіставлення користувача не знайдено для користувача \"%s\", сервер \"%s\"" + +#: foreign/foreign.c:336 optimizer/plan/createplan.c:7153 +#: optimizer/util/plancat.c:540 #, c-format -msgid "user mapping not found for \"%s\"" -msgstr "зіставлення користувача \"%s\" не знайдено" +msgid "access to non-system foreign table is restricted" +msgstr "" -#: foreign/foreign.c:647 storage/file/fd.c:3931 +#: foreign/foreign.c:660 #, c-format msgid "invalid option \"%s\"" msgstr "недійсний параметр \"%s\"" -#: foreign/foreign.c:649 +#: foreign/foreign.c:662 #, c-format msgid "Perhaps you meant the option \"%s\"." msgstr "Можливо, ви мали на увазі параметр \"%s\"." -#: foreign/foreign.c:651 +#: foreign/foreign.c:664 #, c-format msgid "There are no valid options in this context." msgstr "У цьому контексті немає припустимих варіантів." -#: lib/dshash.c:254 utils/mmgr/dsa.c:715 utils/mmgr/dsa.c:737 -#: utils/mmgr/dsa.c:818 +#: lib/dshash.c:254 utils/mmgr/dsa.c:708 utils/mmgr/dsa.c:730 +#: utils/mmgr/dsa.c:811 #, c-format msgid "Failed on DSA request of size %zu." msgstr "Не вдалося виконати запит DSA розміру %zu." @@ -13913,568 +14354,568 @@ msgstr "Не вдалося виконати запит DSA розміру %zu." msgid "expected SASL response, got message type %d" msgstr "очікувалася відповідь SASL, але отримано тип повідомлення %d" -#: libpq/auth-scram.c:270 +#: libpq/auth-scram.c:263 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "клієнт обрав неприпустимий механізм автентифікації SASL" -#: libpq/auth-scram.c:294 libpq/auth-scram.c:543 libpq/auth-scram.c:554 +#: libpq/auth-scram.c:287 libpq/auth-scram.c:536 libpq/auth-scram.c:547 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "неприпустимий секрет SCRAM для користувача \"%s\"" -#: libpq/auth-scram.c:305 +#: libpq/auth-scram.c:298 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "Користувач \"%s\" не має припустимого секрету SCRAM." -#: libpq/auth-scram.c:385 libpq/auth-scram.c:390 libpq/auth-scram.c:744 -#: libpq/auth-scram.c:752 libpq/auth-scram.c:857 libpq/auth-scram.c:870 -#: libpq/auth-scram.c:880 libpq/auth-scram.c:988 libpq/auth-scram.c:995 -#: libpq/auth-scram.c:1010 libpq/auth-scram.c:1025 libpq/auth-scram.c:1039 -#: libpq/auth-scram.c:1057 libpq/auth-scram.c:1072 libpq/auth-scram.c:1386 -#: libpq/auth-scram.c:1394 +#: libpq/auth-scram.c:378 libpq/auth-scram.c:383 libpq/auth-scram.c:737 +#: libpq/auth-scram.c:745 libpq/auth-scram.c:850 libpq/auth-scram.c:863 +#: libpq/auth-scram.c:873 libpq/auth-scram.c:981 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1003 libpq/auth-scram.c:1018 libpq/auth-scram.c:1032 +#: libpq/auth-scram.c:1050 libpq/auth-scram.c:1065 libpq/auth-scram.c:1379 +#: libpq/auth-scram.c:1387 #, c-format msgid "malformed SCRAM message" msgstr "неправильне повідомлення SCRAM" -#: libpq/auth-scram.c:386 +#: libpq/auth-scram.c:379 #, c-format msgid "The message is empty." msgstr "Повідомлення порожнє." -#: libpq/auth-scram.c:391 +#: libpq/auth-scram.c:384 #, c-format msgid "Message length does not match input length." msgstr "Довжина повідомлення не відповідає довжині вводу." -#: libpq/auth-scram.c:423 +#: libpq/auth-scram.c:416 #, c-format msgid "invalid SCRAM response" msgstr "неприпустима відповідь SCRAM" -#: libpq/auth-scram.c:424 +#: libpq/auth-scram.c:417 #, c-format msgid "Nonce does not match." msgstr "Одноразовий ідентифікатор не збігається." -#: libpq/auth-scram.c:500 +#: libpq/auth-scram.c:493 #, c-format msgid "could not generate random salt" msgstr "не вдалося згенерувати випадкову сіль" -#: libpq/auth-scram.c:745 +#: libpq/auth-scram.c:738 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "Очікувався атрибут \"%c\", але знайдено \"%s\"." -#: libpq/auth-scram.c:753 libpq/auth-scram.c:881 +#: libpq/auth-scram.c:746 libpq/auth-scram.c:874 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Очікувався символ \"=\" для атрибуту \"%c\"." -#: libpq/auth-scram.c:858 +#: libpq/auth-scram.c:851 #, c-format msgid "Attribute expected, but found end of string." msgstr "Очікувався атрибут, але знайдено кінець рядка." -#: libpq/auth-scram.c:871 +#: libpq/auth-scram.c:864 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "Очікувався атрибут, але знайдено неприпустимий символ \"%s\"." -#: libpq/auth-scram.c:989 libpq/auth-scram.c:1011 +#: libpq/auth-scram.c:982 libpq/auth-scram.c:1004 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "Клієнт обрав алгоритм SCRAM-SHA-256-PLUS, але повідомлення SCRAM не містить даних зв’язування каналів." -#: libpq/auth-scram.c:996 libpq/auth-scram.c:1026 +#: libpq/auth-scram.c:989 libpq/auth-scram.c:1019 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "Очікувалась кома, але знайдено символ \"%s\"." -#: libpq/auth-scram.c:1017 +#: libpq/auth-scram.c:1010 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "Помилка узгодження зв’язування каналів SCRAM" -#: libpq/auth-scram.c:1018 +#: libpq/auth-scram.c:1011 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "Клієнт підтримує зв’язування каналів SCRAM, але думає, що сервер не підтримує. Однак, сервер теж підтримує зв’язування каналів." -#: libpq/auth-scram.c:1040 +#: libpq/auth-scram.c:1033 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "Клієнт обрав алгоритм SCRAM-SHA-256 без зв’язування каналів, але повідомлення SCRAM містить дані зв’язування каналів." -#: libpq/auth-scram.c:1051 +#: libpq/auth-scram.c:1044 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "непідтримуваний тип зв'язування каналів SCRAM \"%s\"" -#: libpq/auth-scram.c:1058 +#: libpq/auth-scram.c:1051 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "Неочікувана позначка зв'язування каналів \"%s\"." -#: libpq/auth-scram.c:1068 +#: libpq/auth-scram.c:1061 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "клієнт використовує ідентифікатор для авторизації, але це не підтримується" -#: libpq/auth-scram.c:1073 +#: libpq/auth-scram.c:1066 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "Неочікуваний атрибут \"%s\" у першому повідомленні клієнта." -#: libpq/auth-scram.c:1089 +#: libpq/auth-scram.c:1082 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "клієнт потребує непідтримуване розширення SCRAM" -#: libpq/auth-scram.c:1103 +#: libpq/auth-scram.c:1096 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "недруковані символи в одноразовому ідентифікаторі SCRAM" -#: libpq/auth-scram.c:1234 +#: libpq/auth-scram.c:1227 #, c-format msgid "could not generate random nonce" msgstr "не вдалося згенерувати випадковий одноразовий ідентифікатор" -#: libpq/auth-scram.c:1244 +#: libpq/auth-scram.c:1237 #, c-format msgid "could not encode random nonce" msgstr "не вдалося кодувати випадковий одноразовий ідентифікатор" -#: libpq/auth-scram.c:1350 +#: libpq/auth-scram.c:1343 #, c-format msgid "SCRAM channel binding check failed" msgstr "Помилка перевірки зв'язування каналів SCRAM" -#: libpq/auth-scram.c:1368 +#: libpq/auth-scram.c:1361 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "неочікуваний атрибут зв'язування каналів SCRAM в останньому повідомленні клієнта" -#: libpq/auth-scram.c:1387 +#: libpq/auth-scram.c:1380 #, c-format msgid "Malformed proof in client-final-message." msgstr "Неправильне підтвердження в останньому повідомленні клієнта." -#: libpq/auth-scram.c:1395 +#: libpq/auth-scram.c:1388 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "Сміття знайдено в кінці останнього повідомлення клієнта." -#: libpq/auth.c:271 +#: libpq/auth.c:269 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "користувач \"%s\" не пройшов автентифікацію: відхилений хост" -#: libpq/auth.c:274 +#: libpq/auth.c:272 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "користувач \"%s\" не пройшов автентифікацію \"trust\"" -#: libpq/auth.c:277 +#: libpq/auth.c:275 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію Ident" -#: libpq/auth.c:280 +#: libpq/auth.c:278 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію Peer" -#: libpq/auth.c:285 +#: libpq/auth.c:283 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "користувач \"%s\" не пройшов автентифікацію за допомогою пароля" -#: libpq/auth.c:290 +#: libpq/auth.c:288 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію GSSAPI" -#: libpq/auth.c:293 +#: libpq/auth.c:291 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію SSPI" -#: libpq/auth.c:296 +#: libpq/auth.c:294 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію PAM" -#: libpq/auth.c:299 +#: libpq/auth.c:297 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію BSD" -#: libpq/auth.c:302 +#: libpq/auth.c:300 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію LDAP" -#: libpq/auth.c:305 +#: libpq/auth.c:303 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "користувач \"%s\" не пройшов автентифікацію за сертифікатом" -#: libpq/auth.c:308 +#: libpq/auth.c:306 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію RADIUS" -#: libpq/auth.c:311 +#: libpq/auth.c:309 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "користувач \"%s\" не пройшов автентифікацію: неприпустимий метод автентифікації" -#: libpq/auth.c:315 +#: libpq/auth.c:313 #, c-format msgid "Connection matched file \"%s\" line %d: \"%s\"" -msgstr "З'єднання відповідає файлу \"%s\" рядку %d: \"%s\"" +msgstr "З'єднання відповідає файлу \"%s\" рядок %d: \"%s\"" -#: libpq/auth.c:359 +#: libpq/auth.c:357 #, c-format msgid "authentication identifier set more than once" msgstr "ідентифікатор автентифікації встановлено більш ніж один раз" -#: libpq/auth.c:360 +#: libpq/auth.c:358 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "попередній ідентифікатор: \"%s\"; новий ідентифікатор: \"%s\"" -#: libpq/auth.c:370 +#: libpq/auth.c:368 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "підключення автентифіковано: ідентифікатор=\"%s\" метод=%s (%s:%d)" -#: libpq/auth.c:410 +#: libpq/auth.c:408 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "сертифікати клієнтів можуть перевірятися, лише якщо доступне сховище кореневих сертифікатів" -#: libpq/auth.c:421 +#: libpq/auth.c:419 #, c-format msgid "connection requires a valid client certificate" msgstr "підключення потребує припустимий сертифікат клієнта" -#: libpq/auth.c:452 libpq/auth.c:498 +#: libpq/auth.c:450 libpq/auth.c:496 msgid "GSS encryption" msgstr "Шифрування GSS" -#: libpq/auth.c:455 libpq/auth.c:501 +#: libpq/auth.c:453 libpq/auth.c:499 msgid "SSL encryption" msgstr "Шифрування SSL" -#: libpq/auth.c:457 libpq/auth.c:503 +#: libpq/auth.c:455 libpq/auth.c:501 msgid "no encryption" msgstr "без шифрування" #. translator: last %s describes encryption state -#: libpq/auth.c:463 +#: libpq/auth.c:461 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf відхиляє підключення реплікації для хосту \"%s\", користувача \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:470 +#: libpq/auth.c:468 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf відхиляє підключення для хосту \"%s\", користувача \"%s\", бази даних \"%s\", %s" -#: libpq/auth.c:508 +#: libpq/auth.c:506 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "IP-адреса клієнта дозволяється в \"%s\", відповідає прямому перетворенню." -#: libpq/auth.c:511 +#: libpq/auth.c:509 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "IP-адреса клієнта дозволяється в \"%s\", пряме перетворення не перевірялося." -#: libpq/auth.c:514 +#: libpq/auth.c:512 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "IP-адреса клієнта дозволяється в \"%s\", не відповідає прямому перетворенню." -#: libpq/auth.c:517 +#: libpq/auth.c:515 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "Перекласти ім'я клієнтського хосту \"%s\" в IP-адресу: %s, не вдалося." -#: libpq/auth.c:522 +#: libpq/auth.c:520 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Отримати ім'я хосту з IP-адреси клієнта: %s, не вдалося." #. translator: last %s describes encryption state -#: libpq/auth.c:530 +#: libpq/auth.c:528 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "в pg_hba.conf немає запису, що дозволяє підключення для реплікації з хосту \"%s\", користувача \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:538 +#: libpq/auth.c:536 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "в pg_hba.conf немає запису для хосту \"%s\", користувача \"%s\", бази даних \"%s\", %s" -#: libpq/auth.c:711 +#: libpq/auth.c:656 +#, c-format +msgid "connection authenticated: user=\"%s\" method=%s (%s:%d)" +msgstr "підключення автентифіковано: user=\"%s\" method=%s (%s:%d)" + +#: libpq/auth.c:725 #, c-format msgid "expected password response, got message type %d" msgstr "очікувалася відповід з паролем, але отримано тип повідомлення %d" -#: libpq/auth.c:732 +#: libpq/auth.c:746 #, c-format msgid "invalid password packet size" msgstr "неприпустимий розмір пакету з паролем" -#: libpq/auth.c:750 +#: libpq/auth.c:764 #, c-format msgid "empty password returned by client" msgstr "клієнт повернув пустий пароль" -#: libpq/auth.c:877 libpq/hba.c:1727 -#, c-format -msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" -msgstr "Автентифікація MD5 не підтримується, коли увімкнуто режим \"db_user_namespace\"" - -#: libpq/auth.c:883 +#: libpq/auth.c:892 #, c-format msgid "could not generate random MD5 salt" msgstr "не вдалося створити випадкову сіль для MD5" -#: libpq/auth.c:934 libpq/be-secure-gssapi.c:540 +#: libpq/auth.c:943 libpq/be-secure-gssapi.c:540 #, c-format msgid "could not set environment: %m" msgstr "не вдалося встановити середовище: %m" -#: libpq/auth.c:973 +#: libpq/auth.c:982 #, c-format msgid "expected GSS response, got message type %d" msgstr "очікувалася відповідь GSS, але отримано тип повідомлення %d" -#: libpq/auth.c:1039 +#: libpq/auth.c:1048 msgid "accepting GSS security context failed" msgstr "прийняти контекст безпеки GSS не вдалось" -#: libpq/auth.c:1080 +#: libpq/auth.c:1089 msgid "retrieving GSS user name failed" msgstr "отримання ім'я користувача GSS не виконано" -#: libpq/auth.c:1226 +#: libpq/auth.c:1235 msgid "could not acquire SSPI credentials" msgstr "не вдалось отримати облікові дані SSPI" -#: libpq/auth.c:1251 +#: libpq/auth.c:1260 #, c-format msgid "expected SSPI response, got message type %d" msgstr "очікувалась відповідь SSPI, але отримано тип повідомлення %d" -#: libpq/auth.c:1329 +#: libpq/auth.c:1338 msgid "could not accept SSPI security context" msgstr "прийняти контекст безпеки SSPI не вдалося" -#: libpq/auth.c:1370 +#: libpq/auth.c:1379 msgid "could not get token from SSPI security context" msgstr "не вдалося отримати маркер з контексту безпеки SSPI" -#: libpq/auth.c:1506 libpq/auth.c:1525 +#: libpq/auth.c:1515 libpq/auth.c:1534 #, c-format msgid "could not translate name" msgstr "не вдалося перекласти ім'я" -#: libpq/auth.c:1538 +#: libpq/auth.c:1547 #, c-format msgid "realm name too long" msgstr "ім'я області дуже довге" -#: libpq/auth.c:1553 +#: libpq/auth.c:1562 #, c-format msgid "translated account name too long" msgstr "ім'я перекладеного облікового запису дуже довге" -#: libpq/auth.c:1732 +#: libpq/auth.c:1741 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "не вдалося створити сокет для підключення до серверу Ident: %m" -#: libpq/auth.c:1747 +#: libpq/auth.c:1756 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "не вдалося прив'язатися до локальної адреси \"%s\": %m" -#: libpq/auth.c:1759 +#: libpq/auth.c:1768 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "не вдалося підключитися до Ident-серверу за адресою \"%s\", порт %s: %m" -#: libpq/auth.c:1781 +#: libpq/auth.c:1790 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "не вдалося надіслати запит до Ident -серверу за адресою \"%s\", порт %s: %m" -#: libpq/auth.c:1798 +#: libpq/auth.c:1807 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "не вдалося отримати відповідь від Ident-серверу за адресою \"%s\", порт %s: %m" -#: libpq/auth.c:1808 +#: libpq/auth.c:1817 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "неприпустимо форматована відповідь від Ident-серверу: \"%s\"" -#: libpq/auth.c:1861 +#: libpq/auth.c:1870 #, c-format msgid "peer authentication is not supported on this platform" msgstr "автентифікація peer не підтримується на цій платформі" -#: libpq/auth.c:1865 +#: libpq/auth.c:1874 #, c-format msgid "could not get peer credentials: %m" msgstr "не вдалося отримати облікові дані користувача через peer: %m" -#: libpq/auth.c:1877 +#: libpq/auth.c:1886 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "не вдалося знайти локального користувача за ідентифікатором (%ld): %s" -#: libpq/auth.c:1979 +#: libpq/auth.c:1988 #, c-format msgid "error from underlying PAM layer: %s" msgstr "помилка у нижчому шарі PAM: %s" -#: libpq/auth.c:1990 +#: libpq/auth.c:1999 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "непідтримувана розмова PAM %d/\"%s\"" -#: libpq/auth.c:2047 +#: libpq/auth.c:2056 #, c-format msgid "could not create PAM authenticator: %s" msgstr "не вдалося створити автентифікатор PAM: %s" -#: libpq/auth.c:2058 +#: libpq/auth.c:2067 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "помилка в pam_set_item(PAM_USER): %s" -#: libpq/auth.c:2090 +#: libpq/auth.c:2099 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "помилка в pam_set_item(PAM_RHOST): %s" -#: libpq/auth.c:2102 +#: libpq/auth.c:2111 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "помилка в pam_set_item(PAM_CONV): %s" -#: libpq/auth.c:2115 +#: libpq/auth.c:2124 #, c-format msgid "pam_authenticate failed: %s" msgstr "помилка в pam_authenticate: %sв" -#: libpq/auth.c:2128 +#: libpq/auth.c:2137 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "помилка в pam_acct_mgmt: %s" -#: libpq/auth.c:2139 +#: libpq/auth.c:2148 #, c-format msgid "could not release PAM authenticator: %s" msgstr "не вдалося вивільнити автентифікатор PAM: %s" -#: libpq/auth.c:2219 +#: libpq/auth.c:2228 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "не вдалося ініціалізувати протокол LDAP: код помилки %d" -#: libpq/auth.c:2256 +#: libpq/auth.c:2265 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "не вдалося отримати назву домена з ldapbasedn" -#: libpq/auth.c:2264 +#: libpq/auth.c:2273 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "Автентифікація LDAP не змогла знайти записи DNS SRV для \"%s\"" -#: libpq/auth.c:2266 +#: libpq/auth.c:2275 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Встановіть назву сервера LDAP, явно." -#: libpq/auth.c:2318 +#: libpq/auth.c:2327 #, c-format msgid "could not initialize LDAP: %s" msgstr "не вдалося ініціалізувати протокол LDAP: %s" -#: libpq/auth.c:2328 +#: libpq/auth.c:2337 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "протокол ldaps з поточною бібліотекою LDAP не підтримується" -#: libpq/auth.c:2336 +#: libpq/auth.c:2345 #, c-format msgid "could not initialize LDAP: %m" msgstr "не вдалося ініціалізувати протокол LDAP: %m" -#: libpq/auth.c:2346 +#: libpq/auth.c:2355 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "не вдалося встановити версію протоколу LDAP: %s" -#: libpq/auth.c:2362 +#: libpq/auth.c:2371 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "не вдалося почати сеанс протоколу LDAP TLS: %s" -#: libpq/auth.c:2439 +#: libpq/auth.c:2448 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "Сервер LDAP не вказаний, і не ldapbasedn" -#: libpq/auth.c:2446 +#: libpq/auth.c:2455 #, c-format msgid "LDAP server not specified" msgstr "LDAP-сервер не вказаний" -#: libpq/auth.c:2508 +#: libpq/auth.c:2517 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "неприпустимий символ в імені користувача для автентифікації LDAP" -#: libpq/auth.c:2525 +#: libpq/auth.c:2534 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "не вдалося виконати початкову прив'язку LDAP для ldapbinddn \"%s\" на сервері \"%s\": %s" -#: libpq/auth.c:2555 +#: libpq/auth.c:2564 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "не вдалося виконати LDAP-пошук за фільтром \"%s\" на сервері \"%s\": %s" -#: libpq/auth.c:2571 +#: libpq/auth.c:2580 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-користувач \"%s\" не існує" -#: libpq/auth.c:2572 +#: libpq/auth.c:2581 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" не повернув записів." -#: libpq/auth.c:2576 +#: libpq/auth.c:2585 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-користувач \"%s\" не унікальний" -#: libpq/auth.c:2577 +#: libpq/auth.c:2586 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." @@ -14483,137 +14924,132 @@ msgstr[1] "LDAP-пошук за фільтром \"%s\" на сервері \"%s msgstr[2] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." msgstr[3] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." -#: libpq/auth.c:2597 +#: libpq/auth.c:2606 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "не вдалося отримати dn для першого результату, що відповідає \"%s\" на сервері \"%s\": %s" -#: libpq/auth.c:2618 -#, c-format -msgid "could not unbind after searching for user \"%s\" on server \"%s\"" -msgstr "не вдалося відв'язатись після пошуку користувача \"%s\" на сервері \"%s\"" - -#: libpq/auth.c:2649 +#: libpq/auth.c:2633 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "Помилка під час реєстрації в протоколі LDAP користувача \"%s\" на сервері \"%s\": %s" -#: libpq/auth.c:2681 +#: libpq/auth.c:2665 #, c-format msgid "LDAP diagnostics: %s" msgstr "Діагностика LDAP: %s" -#: libpq/auth.c:2719 +#: libpq/auth.c:2703 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "помилка автентифікації сертифіката для користувача \"%s\": сертифікат клієнта не містить імені користувача" -#: libpq/auth.c:2740 +#: libpq/auth.c:2724 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "помилка автентифікації сертифікату для користувача \"%s\": не вдалося отримати DN суб'єкта" -#: libpq/auth.c:2763 +#: libpq/auth.c:2747 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "помилка перевірки сертифікату (clientcert=verify-full) для користувача \"%s\": DN невідповідність" -#: libpq/auth.c:2768 +#: libpq/auth.c:2752 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "помилка перевірки сертифікату (clientcert=verify-full) для користувача \"%s\": CN невідповідність" -#: libpq/auth.c:2870 +#: libpq/auth.c:2854 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-сервер не вказаний" -#: libpq/auth.c:2877 +#: libpq/auth.c:2861 #, c-format msgid "RADIUS secret not specified" msgstr "Секрет RADIUS не вказаний" -#: libpq/auth.c:2891 +#: libpq/auth.c:2875 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "Автентифікація RADIUS не підтримує паролі довші ніж %d символів" -#: libpq/auth.c:2993 libpq/hba.c:2369 +#: libpq/auth.c:2977 libpq/hba.c:2352 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "не вдалося перетворити ім'я серверу RADIUS \"%s\" в адресу: %s" -#: libpq/auth.c:3007 +#: libpq/auth.c:2991 #, c-format msgid "could not generate random encryption vector" msgstr "не вдалося створити випадковий вектор шифрування" -#: libpq/auth.c:3044 +#: libpq/auth.c:3028 #, c-format msgid "could not perform MD5 encryption of password: %s" msgstr "не вдалося виконати MD5 шифрування паролю: %s" -#: libpq/auth.c:3071 +#: libpq/auth.c:3055 #, c-format msgid "could not create RADIUS socket: %m" msgstr "не вдалося створити сокет RADIUS: %m" -#: libpq/auth.c:3087 +#: libpq/auth.c:3071 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "не вдалося прив'язатися до локального сокету RADIUS: %m" -#: libpq/auth.c:3097 +#: libpq/auth.c:3081 #, c-format msgid "could not send RADIUS packet: %m" msgstr "не вдалося відправити пакет RADIUS: %m" -#: libpq/auth.c:3131 libpq/auth.c:3157 +#: libpq/auth.c:3115 libpq/auth.c:3141 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "перевищено час очікування відповіді RADIUS від %s" -#: libpq/auth.c:3150 +#: libpq/auth.c:3134 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "не вдалося перевірити статус сокету RADIUS: %m" -#: libpq/auth.c:3180 +#: libpq/auth.c:3164 #, c-format msgid "could not read RADIUS response: %m" msgstr "не вдалося прочитати відповідь RADIUS: %m" -#: libpq/auth.c:3188 +#: libpq/auth.c:3172 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "Відповідь RADIUS від %s була відправлена з неправильного порту: %d" -#: libpq/auth.c:3196 +#: libpq/auth.c:3180 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "Занадто коротка відповідь RADIUS від %s: %d" -#: libpq/auth.c:3203 +#: libpq/auth.c:3187 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "У відповіді RADIUS від %s покшоджена довжина: %d (фактична довжина %d)" -#: libpq/auth.c:3211 +#: libpq/auth.c:3195 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "Прийшла відповідь RADIUS від %s на інший запит: %d (очікувалася %d)" -#: libpq/auth.c:3236 +#: libpq/auth.c:3220 #, c-format msgid "could not perform MD5 encryption of received packet: %s" msgstr "не вдалося виконати MD5 шифрування отриманого пакету: %s" -#: libpq/auth.c:3246 +#: libpq/auth.c:3230 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "Відповідь RADIUS від %s має неправильний підпис MD5" -#: libpq/auth.c:3264 +#: libpq/auth.c:3248 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "Відповідь RADIUS від %s має неприпустимий код (%d) для користувача \"%s\"" @@ -14670,50 +15106,37 @@ msgstr "не вдалося написати файл сервера \"%s\": %m" msgid "large object read request is too large" msgstr "запит на читання великого об'єкту має завеликий розмір" -#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:262 utils/adt/genfile.c:294 -#: utils/adt/genfile.c:315 +#: libpq/be-fsstubs.c:816 utils/adt/genfile.c:248 utils/adt/genfile.c:269 #, c-format msgid "requested length cannot be negative" msgstr "запитувана довжина не може бути негативною" -#: libpq/be-fsstubs.c:871 storage/large_object/inv_api.c:298 -#: storage/large_object/inv_api.c:310 storage/large_object/inv_api.c:507 -#: storage/large_object/inv_api.c:618 storage/large_object/inv_api.c:808 -#, c-format -msgid "permission denied for large object %u" -msgstr "немає дозволу для великого об'єкта %u" - -#: libpq/be-secure-common.c:71 -#, c-format -msgid "could not read from command \"%s\": %m" -msgstr "не вдалося прочитати висновок команди \"%s\": %m" - -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:94 #, c-format msgid "command \"%s\" failed" msgstr "помилка команди \"%s\"" -#: libpq/be-secure-common.c:119 +#: libpq/be-secure-common.c:123 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "не вдалось отримати доступ до файла закритиго ключа \"%s\": %m" -#: libpq/be-secure-common.c:129 +#: libpq/be-secure-common.c:133 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "файл закритого ключа \"%s\" не є звичайним" -#: libpq/be-secure-common.c:155 +#: libpq/be-secure-common.c:159 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "файл закритого ключа \"%s\" повинен належати користувачу бази даних або коріня" -#: libpq/be-secure-common.c:165 +#: libpq/be-secure-common.c:169 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "до файлу закритого ключа \"%s\" мають доступ група або всі" -#: libpq/be-secure-common.c:167 +#: libpq/be-secure-common.c:171 #, c-format msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "Файл повинен мати дозволи u=rw (0600) або менше, якщо він належить користувачу бази даних, або u=rw,g=r (0640) або менше, якщо він належить кореню." @@ -14759,1077 +15182,1055 @@ msgstr "не вдалося прийняти контекст безпеки GSS msgid "GSSAPI size check error" msgstr "помилка перевірки розміру GSSAPI" -#: libpq/be-secure-openssl.c:125 +#: libpq/be-secure-openssl.c:131 #, c-format msgid "could not create SSL context: %s" msgstr "не вдалося створити контекст SSL: %s" -#: libpq/be-secure-openssl.c:151 +#: libpq/be-secure-openssl.c:157 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "не вдалося завантажити сертифікат серверу \"%s\": %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:177 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "файл закритого ключа \"%s\" не можна перезавантажити, тому що це потребує парольну фразу" -#: libpq/be-secure-openssl.c:176 +#: libpq/be-secure-openssl.c:182 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "не вдалось завантажити файл закритого ключа \"%s\": %s" -#: libpq/be-secure-openssl.c:185 +#: libpq/be-secure-openssl.c:191 #, c-format msgid "check of private key failed: %s" msgstr "помилка під час перевірки приватного ключа: %s" #. translator: first %s is a GUC option name, second %s is its value -#: libpq/be-secure-openssl.c:198 libpq/be-secure-openssl.c:221 +#: libpq/be-secure-openssl.c:204 libpq/be-secure-openssl.c:227 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "\"%s\" налаштування \"%s\" не підтримується цією збіркою" -#: libpq/be-secure-openssl.c:208 +#: libpq/be-secure-openssl.c:214 #, c-format msgid "could not set minimum SSL protocol version" msgstr "не вдалося встановити мінімальну версію протоколу SSL" -#: libpq/be-secure-openssl.c:231 +#: libpq/be-secure-openssl.c:237 #, c-format msgid "could not set maximum SSL protocol version" msgstr "не вдалося встановити максимальну версію протоколу SSL" -#: libpq/be-secure-openssl.c:247 +#: libpq/be-secure-openssl.c:253 #, c-format msgid "could not set SSL protocol version range" msgstr "не вдалося встановити діапазон версій протоколу SSL" -#: libpq/be-secure-openssl.c:248 +#: libpq/be-secure-openssl.c:254 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\" не може бути більше, ніж \"%s\"" -#: libpq/be-secure-openssl.c:285 +#: 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:305 +#: libpq/be-secure-openssl.c:327 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "не вдалося завантажити файл кореневого сертифікату \"%s\": %s" -#: libpq/be-secure-openssl.c:354 +#: libpq/be-secure-openssl.c:376 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "не вдалося завантажити файл зі списком відкликаних сертифікатів SSL \"%s\": %s" -#: libpq/be-secure-openssl.c:362 +#: libpq/be-secure-openssl.c:384 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "не вдалося завантажити каталог списку відкликаних сертифікатів SSL \"%s\": %s" -#: libpq/be-secure-openssl.c:370 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "не вдалося завантажити файл \"%s\" або каталог \"%s\" списку відкликаних сертифікатів SSL: %s" -#: libpq/be-secure-openssl.c:428 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "не вдалося ініціалізувати SSL-підключення: контекст SSL не встановлений" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:464 #, c-format msgid "could not initialize SSL connection: %s" msgstr "не вдалося ініціалізувати SSL-підключення: %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:472 #, c-format msgid "could not set SSL socket: %s" msgstr "не вдалося встановити SSL-сокет: %s" -#: libpq/be-secure-openssl.c:503 +#: libpq/be-secure-openssl.c:528 #, c-format msgid "could not accept SSL connection: %m" msgstr "не вдалося прийняти SSL-підключення: %m" -#: libpq/be-secure-openssl.c:507 libpq/be-secure-openssl.c:562 +#: 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:546 +#: libpq/be-secure-openssl.c:573 #, c-format msgid "could not accept SSL connection: %s" msgstr "не вдалося отримати підключення SSL: %s" -#: libpq/be-secure-openssl.c:550 +#: 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 "Це може вказувати, що клієнт не підтримує жодної версії протоколу SSL між %s і %s." -#: libpq/be-secure-openssl.c:567 libpq/be-secure-openssl.c:756 -#: libpq/be-secure-openssl.c:826 +#: 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:613 +#: libpq/be-secure-openssl.c:622 +#, c-format +msgid "received SSL connection request with unexpected ALPN protocol" +msgstr "" + +#: libpq/be-secure-openssl.c:666 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Спільне ім'я SSL-сертифікату містить нульовий байт" -#: libpq/be-secure-openssl.c:659 +#: libpq/be-secure-openssl.c:712 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "Унікальна назва сертифікату SSL містить вбудоване null-значення" -#: libpq/be-secure-openssl.c:745 libpq/be-secure-openssl.c:810 +#: 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:987 +#: 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:999 +#: libpq/be-secure-openssl.c:1050 #, c-format msgid "could not load DH parameters file: %s" msgstr "не вдалося завантажити файл параметрів DH: %s" -#: libpq/be-secure-openssl.c:1009 +#: libpq/be-secure-openssl.c:1060 #, c-format msgid "invalid DH parameters: %s" msgstr "неприпустимі параметри DH: %s" -#: libpq/be-secure-openssl.c:1018 +#: libpq/be-secure-openssl.c:1069 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "неприпустимі параметри DH: р - не штрих" -#: libpq/be-secure-openssl.c:1027 +#: libpq/be-secure-openssl.c:1078 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "неприпустимі параметри DH: немає придатного генератора або безпечного штриха" -#: libpq/be-secure-openssl.c:1163 +#: 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:1200 +#: 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:1201 +#: libpq/be-secure-openssl.c:1252 msgid "unknown" msgstr "невідомо" -#: libpq/be-secure-openssl.c:1292 +#: libpq/be-secure-openssl.c:1389 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: не вдалося завантажити параметри DH" -#: libpq/be-secure-openssl.c:1300 +#: 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:1327 +#: libpq/be-secure-openssl.c:1424 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: нерозпізнане ім'я кривої: %s" -#: libpq/be-secure-openssl.c:1336 +#: libpq/be-secure-openssl.c:1433 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: не вдалося створити ключ" -#: libpq/be-secure-openssl.c:1364 +#: libpq/be-secure-openssl.c:1461 msgid "no SSL error reported" msgstr "немає повідомлення про помилку SSL" -#: libpq/be-secure-openssl.c:1368 +#: libpq/be-secure-openssl.c:1479 #, c-format msgid "SSL error code %lu" msgstr "Код помилки SSL %lu" -#: libpq/be-secure-openssl.c:1527 +#: libpq/be-secure-openssl.c:1636 #, c-format msgid "could not create BIO" msgstr "неможливо створити BIO" -#: libpq/be-secure-openssl.c:1537 +#: libpq/be-secure-openssl.c:1646 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "не вдалося отримати NID для об'єкту ASN1_OBJECT" -#: libpq/be-secure-openssl.c:1545 +#: libpq/be-secure-openssl.c:1654 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "не вдалося перетворити NID %d в структуру ASN1_OBJECT" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 -#, c-format -msgid "terminating connection due to unexpected postmaster exit" -msgstr "завершення підключення через неочікуване закриття головного процесу" - -#: libpq/crypt.c:49 +#: libpq/crypt.c:48 #, c-format msgid "Role \"%s\" does not exist." msgstr "Роль \"%s\" не існує." -#: libpq/crypt.c:59 +#: libpq/crypt.c:58 #, c-format msgid "User \"%s\" has no password assigned." msgstr "Користувач \"%s\" не має пароля." -#: libpq/crypt.c:77 +#: libpq/crypt.c:76 #, c-format msgid "User \"%s\" has an expired password." msgstr "Користувач \"%s\" має прострочений пароль." -#: libpq/crypt.c:183 +#: libpq/crypt.c:182 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "Користувач \"%s\" має пароль, який не можна використовувати з автентифікацією MD5." -#: libpq/crypt.c:204 libpq/crypt.c:246 libpq/crypt.c:266 +#: libpq/crypt.c:203 libpq/crypt.c:245 libpq/crypt.c:265 #, c-format msgid "Password does not match for user \"%s\"." msgstr "Пароль не підходить для користувача \"%s\"." -#: libpq/crypt.c:285 +#: libpq/crypt.c:284 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "Пароль користувача \"%s\" представлений в нерозпізнаному форматі." -#: libpq/hba.c:332 +#: libpq/hba.c:327 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "недійсний регулярний вираз \"%s\": %s" -#: libpq/hba.c:334 libpq/hba.c:666 libpq/hba.c:1250 libpq/hba.c:1270 -#: libpq/hba.c:1293 libpq/hba.c:1306 libpq/hba.c:1359 libpq/hba.c:1387 -#: libpq/hba.c:1395 libpq/hba.c:1407 libpq/hba.c:1428 libpq/hba.c:1441 -#: libpq/hba.c:1466 libpq/hba.c:1493 libpq/hba.c:1505 libpq/hba.c:1564 -#: libpq/hba.c:1584 libpq/hba.c:1598 libpq/hba.c:1618 libpq/hba.c:1629 -#: libpq/hba.c:1644 libpq/hba.c:1663 libpq/hba.c:1679 libpq/hba.c:1691 -#: libpq/hba.c:1728 libpq/hba.c:1769 libpq/hba.c:1782 libpq/hba.c:1804 -#: libpq/hba.c:1816 libpq/hba.c:1834 libpq/hba.c:1884 libpq/hba.c:1928 -#: libpq/hba.c:1939 libpq/hba.c:1955 libpq/hba.c:1972 libpq/hba.c:1983 -#: libpq/hba.c:2002 libpq/hba.c:2018 libpq/hba.c:2034 libpq/hba.c:2093 -#: libpq/hba.c:2110 libpq/hba.c:2123 libpq/hba.c:2135 libpq/hba.c:2154 -#: libpq/hba.c:2240 libpq/hba.c:2258 libpq/hba.c:2352 libpq/hba.c:2371 -#: libpq/hba.c:2400 libpq/hba.c:2413 libpq/hba.c:2436 libpq/hba.c:2458 -#: libpq/hba.c:2472 tsearch/ts_locale.c:243 +#: libpq/hba.c:329 libpq/hba.c:661 libpq/hba.c:1245 libpq/hba.c:1265 +#: libpq/hba.c:1288 libpq/hba.c:1301 libpq/hba.c:1354 libpq/hba.c:1382 +#: libpq/hba.c:1390 libpq/hba.c:1402 libpq/hba.c:1423 libpq/hba.c:1436 +#: libpq/hba.c:1461 libpq/hba.c:1488 libpq/hba.c:1500 libpq/hba.c:1559 +#: libpq/hba.c:1579 libpq/hba.c:1593 libpq/hba.c:1613 libpq/hba.c:1624 +#: libpq/hba.c:1639 libpq/hba.c:1658 libpq/hba.c:1674 libpq/hba.c:1686 +#: libpq/hba.c:1752 libpq/hba.c:1765 libpq/hba.c:1787 libpq/hba.c:1799 +#: libpq/hba.c:1817 libpq/hba.c:1867 libpq/hba.c:1911 libpq/hba.c:1922 +#: libpq/hba.c:1938 libpq/hba.c:1955 libpq/hba.c:1966 libpq/hba.c:1985 +#: libpq/hba.c:2001 libpq/hba.c:2017 libpq/hba.c:2076 libpq/hba.c:2093 +#: libpq/hba.c:2106 libpq/hba.c:2118 libpq/hba.c:2137 libpq/hba.c:2223 +#: libpq/hba.c:2241 libpq/hba.c:2335 libpq/hba.c:2354 libpq/hba.c:2383 +#: libpq/hba.c:2396 libpq/hba.c:2419 libpq/hba.c:2441 libpq/hba.c:2455 +#: tsearch/ts_locale.c:241 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "рядок %d файла конфігурації \"%s\"" -#: libpq/hba.c:462 +#: libpq/hba.c:457 #, c-format msgid "skipping missing authentication file \"%s\"" msgstr "пропускається відсутній файл автентифікації \"%s\"" -#: libpq/hba.c:614 +#: libpq/hba.c:609 #, c-format msgid "could not open file \"%s\": maximum nesting depth exceeded" msgstr "не вдалося відкрити файл \"%s\": максимальну глибину вкладення перевищено" -#: libpq/hba.c:1221 +#: libpq/hba.c:1216 #, c-format msgid "error enumerating network interfaces: %m" msgstr "помилка перерахування мережевих інтерфейсів: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:1248 +#: libpq/hba.c:1243 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "параметр автентифікації \"%s\" припустимий лише для способів автентифікації %s" -#: libpq/hba.c:1268 +#: libpq/hba.c:1263 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "спосіб автентифікації \"%s\" потребує аргумент \"%s\" для встановлення" -#: libpq/hba.c:1292 +#: libpq/hba.c:1287 #, c-format msgid "missing entry at end of line" msgstr "відсутній запис в кінці рядка" -#: libpq/hba.c:1305 +#: libpq/hba.c:1300 #, c-format msgid "multiple values in ident field" msgstr "кілька значень в полі ident" -#: libpq/hba.c:1357 +#: libpq/hba.c:1352 #, c-format msgid "multiple values specified for connection type" msgstr "кілька значень вказано для типу підключення" -#: libpq/hba.c:1358 +#: libpq/hba.c:1353 #, c-format msgid "Specify exactly one connection type per line." msgstr "Вкажіть в рядку єдиний тип підключення." -#: libpq/hba.c:1385 +#: libpq/hba.c:1380 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "запис hostssl не збігається, тому що протокол SSL вимкнутий" -#: libpq/hba.c:1386 +#: libpq/hba.c:1381 #, c-format -msgid "Set ssl = on in postgresql.conf." -msgstr "Встановіть ssl = on в postgresql.conf." +msgid "Set \"ssl = on\" in postgresql.conf." +msgstr "" -#: libpq/hba.c:1394 +#: libpq/hba.c:1389 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "запис hostssl не збігається, тому що SSL не підтримується цією збіркою" -#: libpq/hba.c:1406 +#: libpq/hba.c:1401 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "запис hostgssenc не може збігатись, оскільки GSSAPI не підтримується цією збіркою" -#: libpq/hba.c:1426 +#: libpq/hba.c:1421 #, c-format msgid "invalid connection type \"%s\"" msgstr "неприпустимий тип підключення \"%s\"" -#: libpq/hba.c:1440 +#: libpq/hba.c:1435 #, c-format msgid "end-of-line before database specification" msgstr "кінець рядка перед визначенням бази даних" -#: libpq/hba.c:1465 +#: libpq/hba.c:1460 #, c-format msgid "end-of-line before role specification" msgstr "кінець рядка перед визначенням ролі" -#: libpq/hba.c:1492 +#: libpq/hba.c:1487 #, c-format msgid "end-of-line before IP address specification" msgstr "кінець рядка перед визначенням IP-адрес" -#: libpq/hba.c:1503 +#: libpq/hba.c:1498 #, c-format msgid "multiple values specified for host address" msgstr "для адреси хоста вказано кілька значень" -#: libpq/hba.c:1504 +#: libpq/hba.c:1499 #, c-format msgid "Specify one address range per line." msgstr "Вкажіть один діапазон адреси в рядку." -#: libpq/hba.c:1562 +#: libpq/hba.c:1557 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "неприпустима IP адреса \"%s\": %s" -#: libpq/hba.c:1582 +#: libpq/hba.c:1577 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "визначити одночасно ім’я хоста і маску CIDR не можна: \"%s\"" -#: libpq/hba.c:1596 +#: libpq/hba.c:1591 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "неприпустима маска CIDR в адресі \"%s\"" -#: libpq/hba.c:1616 +#: libpq/hba.c:1611 #, c-format msgid "end-of-line before netmask specification" msgstr "кінець рядка перед визначенням маски мережі" -#: libpq/hba.c:1617 +#: libpq/hba.c:1612 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Вкажіть діапазон адрес в нотації CIDR або надайте окрему маску мережі." -#: libpq/hba.c:1628 +#: libpq/hba.c:1623 #, c-format msgid "multiple values specified for netmask" msgstr "для маски мережі вказано декілька значень" -#: libpq/hba.c:1642 +#: libpq/hba.c:1637 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "неприпустима маска IP \"%s\": %s" -#: libpq/hba.c:1662 +#: libpq/hba.c:1657 #, c-format msgid "IP address and mask do not match" msgstr "IP-адреса і маска не збігаються" -#: libpq/hba.c:1678 +#: libpq/hba.c:1673 #, c-format msgid "end-of-line before authentication method" msgstr "кінець рядка перед способом автентифікації" -#: libpq/hba.c:1689 +#: libpq/hba.c:1684 #, c-format msgid "multiple values specified for authentication type" msgstr "для типу автентифікації вказано декілька значень" -#: libpq/hba.c:1690 +#: libpq/hba.c:1685 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Вкажіть у рядку єдиний тип автентифікації." -#: libpq/hba.c:1767 +#: libpq/hba.c:1750 #, c-format msgid "invalid authentication method \"%s\"" msgstr "неприпустимий спосіб автентифікації \"%s\"" -#: libpq/hba.c:1780 +#: libpq/hba.c:1763 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "неприпустимий спосіб автентифікації \"%s\": не підтримується цією збіркою" -#: libpq/hba.c:1803 +#: libpq/hba.c:1786 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "автентифікація gssapi для локальних сокетів не підтримується" -#: libpq/hba.c:1815 +#: libpq/hba.c:1798 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "автентифікація peer підтримується лише для локальних сокетів" -#: libpq/hba.c:1833 +#: libpq/hba.c:1816 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "автентифікація cert підтримується лише для підключень hostssl" -#: libpq/hba.c:1883 +#: libpq/hba.c:1866 #, c-format msgid "authentication option not in name=value format: %s" msgstr "параметр автентифікації вказаний не в форматі ім’я=значення: %s" -#: libpq/hba.c:1927 +#: libpq/hba.c:1910 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "не можна використовувати ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter або ldapurl разом з ldapprefix" -#: libpq/hba.c:1938 +#: libpq/hba.c:1921 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "спосіб автентифікації \"ldap\" потребує встановити аргумент \"ldapbasedn\", \"ldapprefix\" або \"ldapsuffix\"" -#: libpq/hba.c:1954 +#: libpq/hba.c:1937 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "не можна використовувати ldapsearchattribute разом з ldapsearchfilter" -#: libpq/hba.c:1971 +#: libpq/hba.c:1954 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "список серверів RADIUS не може бути порожнім" -#: libpq/hba.c:1982 +#: libpq/hba.c:1965 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "список секретів RADIUS не може бути порожнім" -#: libpq/hba.c:1999 +#: libpq/hba.c:1982 #, c-format msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "кількість секретів RADIUS (%d) повинна бути 1 або дорівнювати кількості серверів RADIUS (%d)" -#: libpq/hba.c:2015 +#: libpq/hba.c:1998 #, c-format msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "кількість портів RADIUS (%d) повинна бути 1 або дорівнювати кількості серверів RADIUS (%d)" -#: libpq/hba.c:2031 +#: libpq/hba.c:2014 #, c-format msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "кількість ідентифікаторів RADIUS (%d) повинна бути 1 або дорівнювати кількості серверів RADIUS (%d)" -#: libpq/hba.c:2083 +#: libpq/hba.c:2066 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi і cert" -#: libpq/hba.c:2092 +#: libpq/hba.c:2075 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert може бути налаштовано лише для рядків \"hostssl\"" -#: libpq/hba.c:2109 +#: libpq/hba.c:2092 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "clientcert приймає лише \"verify-full\" під час використання автентифікації \"cert\"" -#: libpq/hba.c:2122 +#: libpq/hba.c:2105 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "неприпустиме значення для clientcert: \"%s\"" -#: libpq/hba.c:2134 +#: libpq/hba.c:2117 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname можна налаштувати лише для рядків \"hostssl\"" -#: libpq/hba.c:2153 +#: libpq/hba.c:2136 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "неприпустиме значення для clientname: \"%s\"" -#: libpq/hba.c:2186 +#: libpq/hba.c:2169 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "не вдалося аналізувати URL-адресу LDAP \"%s\": %s" -#: libpq/hba.c:2197 +#: libpq/hba.c:2180 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "непідтримувана схема в URL-адресі LDAP: %s" -#: libpq/hba.c:2221 +#: libpq/hba.c:2204 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URL-адреса LDAP не підтримується на цій платформі" -#: libpq/hba.c:2239 +#: libpq/hba.c:2222 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "недійсне значення ldapscheme: \"%s\"" -#: libpq/hba.c:2257 +#: libpq/hba.c:2240 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "недійсний номер порту LDAP: \"%s\"" -#: libpq/hba.c:2303 libpq/hba.c:2310 +#: libpq/hba.c:2286 libpq/hba.c:2293 msgid "gssapi and sspi" msgstr "gssapi і sspi" -#: libpq/hba.c:2319 libpq/hba.c:2328 +#: libpq/hba.c:2302 libpq/hba.c:2311 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:2350 +#: libpq/hba.c:2333 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "не вдалося проаналізувати список серверів RADIUS \"%s\"" -#: libpq/hba.c:2398 +#: libpq/hba.c:2381 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "не вдалося проаналізувати список портів RADIUS \"%s\"" -#: libpq/hba.c:2412 +#: libpq/hba.c:2395 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "недійсний номер порту RADIUS: \"%s\"" -#: libpq/hba.c:2434 +#: libpq/hba.c:2417 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "не вдалося проаналізувати список секретів RADIUS \"%s\"" -#: libpq/hba.c:2456 +#: libpq/hba.c:2439 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "не вдалося проаналізувати список ідентифікаторів RADIUS \"%s\"" -#: libpq/hba.c:2470 +#: libpq/hba.c:2453 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "нерозпізнане ім’я параметра автентифікації: \"%s\"" -#: libpq/hba.c:2662 +#: libpq/hba.c:2645 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "файл конфігурації \"%s\" не містить елементів" -#: libpq/hba.c:2815 +#: libpq/hba.c:2798 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "помилка при пошуку за регулярним виразом для \"%s\": %s" -#: libpq/hba.c:2839 +#: libpq/hba.c:2822 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "регулярний вираз \"%s не містить підвиразів, необхідних для зворотного посилання в \"%s\"" -#: libpq/hba.c:2942 +#: libpq/hba.c:2925 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "вказане ім'я користувача (%s) і автентифіковане ім'я користувача (%s) не збігаються" -#: libpq/hba.c:2962 +#: libpq/hba.c:2945 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "немає відповідності у файлі зіставлень \"%s\" для користувача \"%s\" автентифікованого як \"%s\"" -#: libpq/pqcomm.c:200 +#: libpq/pqcomm.c:211 libpq/pqcomm.c:219 libpq/pqcomm.c:250 libpq/pqcomm.c:259 +#: libpq/pqcomm.c:1648 libpq/pqcomm.c:1693 libpq/pqcomm.c:1733 +#: libpq/pqcomm.c:1777 libpq/pqcomm.c:1816 libpq/pqcomm.c:1855 +#: libpq/pqcomm.c:1891 libpq/pqcomm.c:1930 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "%s(%s) помилка: %m" + +#: libpq/pqcomm.c:296 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "не вдалося перевести сокет у неблокуючий режим: %m" -#: libpq/pqcomm.c:361 +#: libpq/pqcomm.c:456 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Шлях Unix-сокету \"%s\" занадто довгий (максимум %d байтів)" -#: libpq/pqcomm.c:381 +#: libpq/pqcomm.c:476 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "не вдалось перекласти ім'я хоста \"%s\", служби \"%s\" в адресу: %s" -#: libpq/pqcomm.c:385 +#: libpq/pqcomm.c:480 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "не вдалось перекласти службу \"%s\" в адресу: %s" -#: libpq/pqcomm.c:412 +#: libpq/pqcomm.c:502 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "не вдалось прив'язатись до всіх запитаних адрес: MAXLISTEN (%d) перевищено" -#: libpq/pqcomm.c:421 +#: libpq/pqcomm.c:511 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:424 +#: libpq/pqcomm.c:514 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:517 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:431 +#: libpq/pqcomm.c:521 #, c-format msgid "unrecognized address family %d" msgstr "нерозпізнане сімейство адресів %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:455 +#: libpq/pqcomm.c:545 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "не вдалось створити сокет %s для адреси \"%s\": %m" #. translator: third %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:481 libpq/pqcomm.c:499 +#: libpq/pqcomm.c:574 libpq/pqcomm.c:592 #, c-format msgid "%s(%s) failed for %s address \"%s\": %m" msgstr "%s(%s) помилка %s для адреси \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:522 +#: libpq/pqcomm.c:615 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "не вдалось прив'язатись до адреси %s \"%s\": %m" -#: libpq/pqcomm.c:526 +#: libpq/pqcomm.c:619 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "Можливо інший процес postmaster вже виконується на порті %d?" -#: libpq/pqcomm.c:528 +#: libpq/pqcomm.c:621 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "Можливо порт %d вже зайнятий іншим процесом postmaster? Якщо ні, почекайте пару секунд і спробуйте знову." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:557 +#: libpq/pqcomm.c:650 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "не вдалось прослухати на адресі %s \"%s\": %m" -#: libpq/pqcomm.c:565 +#: libpq/pqcomm.c:658 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "прослуховувати UNIX сокет \"%s\"" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:570 +#: libpq/pqcomm.c:663 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "прослуховувати %s адресу \"%s\", порт %d" -#: libpq/pqcomm.c:659 +#: libpq/pqcomm.c:753 #, c-format msgid "group \"%s\" does not exist" msgstr "група \"%s\" не існує" -#: libpq/pqcomm.c:669 +#: libpq/pqcomm.c:763 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "не вдалось встановити групу для файла \"%s\": %m" -#: libpq/pqcomm.c:680 +#: libpq/pqcomm.c:774 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "не вдалось встановити дозволи для файла \"%s\": %m" -#: libpq/pqcomm.c:708 +#: libpq/pqcomm.c:803 #, c-format msgid "could not accept new connection: %m" msgstr "не вдалось прийняти нове підключення: %m" -#: libpq/pqcomm.c:748 libpq/pqcomm.c:757 libpq/pqcomm.c:789 libpq/pqcomm.c:799 -#: libpq/pqcomm.c:1634 libpq/pqcomm.c:1679 libpq/pqcomm.c:1719 -#: libpq/pqcomm.c:1763 libpq/pqcomm.c:1802 libpq/pqcomm.c:1841 -#: libpq/pqcomm.c:1877 libpq/pqcomm.c:1916 -#, c-format -msgid "%s(%s) failed: %m" -msgstr "%s(%s) помилка: %m" - -#: libpq/pqcomm.c:903 +#: libpq/pqcomm.c:885 #, c-format msgid "there is no client connection" msgstr "немає клієнтського підключення" -#: libpq/pqcomm.c:959 libpq/pqcomm.c:1060 +#: libpq/pqcomm.c:941 libpq/pqcomm.c:1042 #, c-format msgid "could not receive data from client: %m" msgstr "не вдалось отримати дані від клієнта: %m" -#: libpq/pqcomm.c:1165 tcop/postgres.c:4405 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "завершення підключення через втрату синхронізації протоколу" -#: libpq/pqcomm.c:1231 +#: libpq/pqcomm.c:1215 #, c-format msgid "unexpected EOF within message length word" msgstr "неочікуваний EOF в слові довжини повідомлення" -#: libpq/pqcomm.c:1241 +#: libpq/pqcomm.c:1225 #, c-format msgid "invalid message length" msgstr "неприпустима довжина повідомлення" -#: libpq/pqcomm.c:1263 libpq/pqcomm.c:1276 +#: libpq/pqcomm.c:1247 libpq/pqcomm.c:1260 #, c-format msgid "incomplete message from client" msgstr "неповне повідомлення від клієнта" -#: libpq/pqcomm.c:1387 +#: libpq/pqcomm.c:1401 #, c-format msgid "could not send data to client: %m" msgstr "не вдалось надіслати дані клієнту: %m" -#: libpq/pqcomm.c:1602 +#: libpq/pqcomm.c:1616 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s) помилка: код помилки %d" -#: libpq/pqcomm.c:1691 +#: libpq/pqcomm.c:1705 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "встановлення часу простою keepalive не підтримується" -#: libpq/pqcomm.c:1775 libpq/pqcomm.c:1850 libpq/pqcomm.c:1925 +#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s) не підтримується" -#: libpq/pqformat.c:407 +#: libpq/pqformat.c:404 #, c-format msgid "no data left in message" msgstr "у повідомлення не залишилось даних" -#: libpq/pqformat.c:518 libpq/pqformat.c:536 libpq/pqformat.c:557 -#: utils/adt/array_userfuncs.c:799 utils/adt/arrayfuncs.c:1507 -#: utils/adt/rowtypes.c:615 +#: 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/rowtypes.c:613 #, c-format msgid "insufficient data left in message" msgstr "недостатьно даних залишилось в повідомленні" -#: libpq/pqformat.c:598 libpq/pqformat.c:627 +#: libpq/pqformat.c:595 libpq/pqformat.c:624 #, c-format msgid "invalid string in message" msgstr "неприпустимий рядок в повідомленні" -#: libpq/pqformat.c:643 +#: libpq/pqformat.c:640 #, c-format msgid "invalid message format" msgstr "неприпустимий формат повідомлення" -#: main/main.c:235 +#: main/main.c:234 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: помилка WSAStartup: %d\n" -#: main/main.c:329 +#: main/main.c:322 #, c-format -msgid "" -"%s is the PostgreSQL server.\n" -"\n" -msgstr "" -"%s - сервер PostgreSQL.\n" -"\n" +msgid "%s is the PostgreSQL server.\n\n" +msgstr "%s - сервер PostgreSQL.\n\n" -#: main/main.c:330 +#: main/main.c:323 #, c-format -msgid "" -"Usage:\n" -" %s [OPTION]...\n" -"\n" -msgstr "" -"Використання:\n" -" %s [OPTION]...\n" -"\n" +msgid "Usage:\n" +" %s [OPTION]...\n\n" +msgstr "Використання:\n" +" %s [OPTION]...\n\n" -#: main/main.c:331 +#: main/main.c:324 #, c-format msgid "Options:\n" msgstr "Параметри:\n" -#: main/main.c:332 +#: main/main.c:325 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS число спільних буферів\n" -#: main/main.c:333 +#: main/main.c:326 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE встановити параметр під час виконання\n" -#: main/main.c:334 +#: main/main.c:327 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME вивести значення параметру під час виконання і вийти\n" -#: main/main.c:335 +#: main/main.c:328 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 рівень налагодження\n" -#: main/main.c:336 +#: main/main.c:329 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR каталог бази даних\n" -#: main/main.c:337 +#: main/main.c:330 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e використати європейський формат дат (DMY)\n" -#: main/main.c:338 +#: main/main.c:331 #, c-format msgid " -F turn fsync off\n" msgstr " -F вимкнути fsync\n" -#: main/main.c:339 +#: main/main.c:332 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME ім’я хоста або IP-адреса для прослуховування\n" -#: main/main.c:340 +#: main/main.c:333 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr " -i активувати підключення TCP/IP (застаріле)\n" -#: main/main.c:341 +#: main/main.c:334 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY розташування Unix-сокетів\n" -#: main/main.c:343 +#: main/main.c:336 #, c-format msgid " -l enable SSL connections\n" msgstr " -l активувати SSL-підключення\n" -#: main/main.c:345 +#: main/main.c:338 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT максимальне число дозволених підключень\n" -#: main/main.c:346 +#: main/main.c:339 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT номер порту для прослуховування\n" -#: main/main.c:347 +#: main/main.c:340 #, c-format msgid " -s show statistics after each query\n" msgstr " -s відображувати статистику після кожного запиту\n" -#: main/main.c:348 +#: main/main.c:341 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM вказати обсяг пам'яті для сортування (в КБ)\n" -#: main/main.c:349 +#: main/main.c:342 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: main/main.c:350 +#: main/main.c:343 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE встановити параметр під час виконання\n" -#: main/main.c:351 +#: main/main.c:344 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config описати параметри конфігурації і вийти\n" -#: main/main.c:352 +#: main/main.c:345 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати довідку і вийти\n" -#: main/main.c:354 +#: main/main.c:347 #, c-format -msgid "" -"\n" +msgid "\n" "Developer options:\n" -msgstr "" -"\n" +msgstr "\n" "Параметри для розробників:\n" -#: main/main.c:355 +#: main/main.c:348 #, 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:356 +#: main/main.c:349 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O дозволити змінювати структуру системних таблиць\n" -#: main/main.c:357 +#: main/main.c:350 #, c-format msgid " -P disable system indexes\n" msgstr " -P вимкнути системні індекси\n" -#: main/main.c:358 +#: main/main.c:351 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex показувати час після кожного запиту\n" -#: main/main.c:359 +#: main/main.c:352 #, c-format msgid " -T send SIGABRT to all backend processes if one dies\n" msgstr " -T надіслати SIGABRT усім внутрішнім процесам, якщо один вимкнеться\n" -#: main/main.c:360 +#: main/main.c:353 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NUM очікувати NUM секунд, щоб дозволити підключення від налагоджувача\n" -#: main/main.c:362 +#: main/main.c:355 #, c-format -msgid "" -"\n" +msgid "\n" "Options for single-user mode:\n" -msgstr "" -"\n" +msgstr "\n" "Параметри для однокористувацького режиму:\n" -#: main/main.c:363 +#: main/main.c:356 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single установка однокористувацького режиму (цей аргумент повинен бути першим)\n" -#: main/main.c:364 +#: main/main.c:357 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME ім’я бази даних (за замовчуванням - ім'я користувача)\n" -#: main/main.c:365 +#: main/main.c:358 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 змінити рівень налагодження\n" -#: main/main.c:366 +#: main/main.c:359 #, c-format msgid " -E echo statement before execution\n" msgstr " -E інструкція відлуння перед виконанням\n" -#: main/main.c:367 +#: main/main.c:360 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j не використовувати новий рядок як роздільник інтерактивних запитів\n" -#: main/main.c:368 main/main.c:374 +#: main/main.c:361 main/main.c:367 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILENAME надіслати stdout і stderr до вказаного файлу\n" -#: main/main.c:370 +#: main/main.c:363 #, c-format -msgid "" -"\n" +msgid "\n" "Options for bootstrapping mode:\n" -msgstr "" -"\n" +msgstr "\n" "Параметри для режиму початкового завантаження:\n" -#: main/main.c:371 +#: main/main.c:364 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot установка режиму початкового завантаження (цей аргумент повинен бути першим)\n" -#: main/main.c:372 +#: main/main.c:365 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr " --check обирає режим перевірки (має бути першим аргументом)\n" -#: main/main.c:373 +#: main/main.c:366 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME ім'я бази даних (обов'язковий аргумент у режимі початкового завантаження)\n" -#: main/main.c:376 +#: main/main.c:369 #, c-format -msgid "" -"\n" +msgid "\n" "Please read the documentation for the complete list of run-time\n" "configuration settings and how to set them on the command line or in\n" -"the configuration file.\n" -"\n" +"the configuration file.\n\n" "Report bugs to <%s>.\n" -msgstr "" -"\n" -"Будь-ласка прочитайте інструкцію для повного списку параметрів конфігурації виконання і їх встановлення у командний рядок або в файл конфігурації.\n" -"\n" +msgstr "\n" +"Будь-ласка прочитайте інструкцію для повного списку параметрів конфігурації виконання і їх встановлення у командний рядок або в файл конфігурації.\n\n" "Про помилки повідомляйте <%s>.\n" -#: main/main.c:380 +#: main/main.c:373 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: main/main.c:391 +#: main/main.c:384 #, c-format -msgid "" -"\"root\" execution of the PostgreSQL server is not permitted.\n" +msgid "\"root\" execution of the PostgreSQL server is not permitted.\n" "The server must be started under an unprivileged user ID to prevent\n" "possible system security compromise. See the documentation for\n" "more information on how to properly start the server.\n" -msgstr "" -"Запускати сервер PostgreSQL під іменем \"root\" не дозволено.\n" +msgstr "Запускати сервер PostgreSQL під іменем \"root\" не дозволено.\n" "Для запобігання компрометації системи безпеки сервер повинен запускати непривілейований користувач. Дивіться документацію, щоб дізнатися більше про те, як правильно запустити сервер.\n" -#: main/main.c:408 +#: main/main.c:401 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: дійсний і ефективний ID користувача повинні збігатися\n" -#: main/main.c:415 +#: main/main.c:408 #, c-format -msgid "" -"Execution of PostgreSQL by a user with administrative permissions is not\n" +msgid "Execution of PostgreSQL by a user with administrative permissions is not\n" "permitted.\n" "The server must be started under an unprivileged user ID to prevent\n" "possible system security compromises. See the documentation for\n" "more information on how to properly start the server.\n" -msgstr "" -"Запускати PostgreSQL під іменем користувача з правами адміністратора не дозволено.\n" +msgstr "Запускати PostgreSQL під іменем користувача з правами адміністратора не дозволено.\n" "Для запобігання можливої компрометації системи безпеки сервер повинен запускати непривілейований користувач. Дивіться документацію, щоб дізнатися більше про те, як правильно запустити сервер.\n" #: nodes/extensible.c:66 @@ -15842,20 +16243,15 @@ msgstr "розширений тип вузла \"%s\" вже існує" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "Методи розширеного вузла \"%s\" не зареєстровані" -#: nodes/makefuncs.c:153 statistics/extended_stats.c:2335 +#: nodes/makefuncs.c:152 statistics/extended_stats.c:2310 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "відношення \"%s\" не має складеного типу" -#: nodes/makefuncs.c:879 -#, c-format -msgid "unrecognized JSON encoding: %s" -msgstr "нерозпізнане кодування JSON: %s" - -#: nodes/nodeFuncs.c:116 nodes/nodeFuncs.c:147 parser/parse_coerce.c:2567 +#: 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:2049 parser/parse_func.c:710 parser/parse_oper.c:883 -#: utils/fmgr/funcapi.c:661 +#: 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" @@ -15870,179 +16266,184 @@ msgstr "портал \"%s\" з параметрами: %s" msgid "unnamed portal with parameters: %s" msgstr "портал без імені з параметрами: %s" -#: optimizer/path/joinrels.c:973 +#: optimizer/path/joinrels.c:972 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN підтримується лише з умовами, які допускають з'єднання злиттям або хеш-з'єднанням" -#: optimizer/plan/createplan.c:7111 parser/parse_merge.c:182 -#: parser/parse_merge.c:189 +#: optimizer/plan/createplan.c:7175 parser/parse_merge.c:203 +#: rewrite/rewriteHandler.c:1696 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "не можна виконати MERGE для відношення \"%s\"" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1408 +#: optimizer/plan/initsplan.c:1407 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s не можна застосовувати до нульової сторони зовнішнього з’єднання" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1361 parser/analyze.c:1761 parser/analyze.c:2018 -#: parser/analyze.c:3231 +#: optimizer/plan/planner.c:1386 parser/analyze.c:1771 parser/analyze.c:2029 +#: parser/analyze.c:3247 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s несумісно з UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2076 optimizer/plan/planner.c:4035 +#: optimizer/plan/planner.c:2127 optimizer/plan/planner.c:4113 #, c-format msgid "could not implement GROUP BY" msgstr "не вдалося реалізувати GROUP BY" -#: optimizer/plan/planner.c:2077 optimizer/plan/planner.c:4036 -#: optimizer/plan/planner.c:4676 optimizer/prep/prepunion.c:1053 +#: optimizer/plan/planner.c:2128 optimizer/plan/planner.c:4114 +#: optimizer/plan/planner.c:4795 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:4675 +#: optimizer/plan/planner.c:4794 #, c-format msgid "could not implement DISTINCT" msgstr "не вдалося реалізувати DISTINCT" -#: optimizer/plan/planner.c:6014 +#: optimizer/plan/planner.c:6139 #, c-format msgid "could not implement window PARTITION BY" msgstr "не вдалося реалізувати PARTITION BY для вікна" -#: optimizer/plan/planner.c:6015 +#: optimizer/plan/planner.c:6140 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Стовпці, що розділяють вікна, повинні мати типи даних з можливістю сортування." -#: optimizer/plan/planner.c:6019 +#: optimizer/plan/planner.c:6144 #, c-format msgid "could not implement window ORDER BY" msgstr "не вдалося реалізувати ORDER BY для вікна" -#: optimizer/plan/planner.c:6020 +#: optimizer/plan/planner.c:6145 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Стовпці, що впорядковують вікна, повинні мати типи даних з можливістю сортування." -#: optimizer/prep/prepunion.c:516 +#: optimizer/prep/prepunion.c:467 #, c-format msgid "could not implement recursive UNION" msgstr "не вдалося реалізувати рекурсивний UNION" -#: optimizer/prep/prepunion.c:517 +#: optimizer/prep/prepunion.c:468 #, c-format msgid "All column datatypes must be hashable." msgstr "Усі стовпці повинні мати типи даних з можливістю хешування." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1052 +#: optimizer/prep/prepunion.c:1319 #, c-format msgid "could not implement %s" msgstr "не вдалося реалізувати %s" -#: optimizer/util/clauses.c:4929 +#: optimizer/util/clauses.c:4951 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "Впроваджена в код SQL-функція \"%s\"" -#: optimizer/util/plancat.c:154 +#: optimizer/util/plancat.c:153 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "отримати доступ до тимчасових або нежурнальованих відношень під час відновлення не можна" -#: optimizer/util/plancat.c:726 +#: optimizer/util/plancat.c:768 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "вказівки з посиланням на весь рядок для вибору унікального індексу не підтримуються" -#: optimizer/util/plancat.c:743 +#: optimizer/util/plancat.c:785 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "з обмеженням в реченні ON CONFLICT не пов'язаний індекс" -#: optimizer/util/plancat.c:793 +#: 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:898 +#: optimizer/util/plancat.c:945 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "немає унікального обмеження або обмеження-виключення відповідного специфікації ON CONFLICT" -#: parser/analyze.c:826 parser/analyze.c:1540 +#: parser/analyze.c:824 parser/analyze.c:1550 #, c-format msgid "VALUES lists must all be the same length" msgstr "Списки VALUES повинні мати однакову довжину" -#: parser/analyze.c:1028 +#: parser/analyze.c:1027 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT містить більше виразів, ніж цільових стовпців" -#: parser/analyze.c:1046 +#: parser/analyze.c:1045 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT містить більше цільових стовпців, ніж виразів" -#: parser/analyze.c:1050 +#: parser/analyze.c:1049 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "Джерелом даних є вираз рядка, який містить стільки ж стовпців, скільки потребується для INSERT. Ви випадково використовували додаткові дужки?" -#: parser/analyze.c:1347 parser/analyze.c:1734 +#: parser/analyze.c:1357 parser/analyze.c:1744 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO не дозволяється тут" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1663 parser/analyze.c:3463 +#: parser/analyze.c:1673 parser/analyze.c:3479 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s не можна застосовувати до VALUES" -#: parser/analyze.c:1900 +#: parser/analyze.c:1911 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "неприпустиме речення UNION/INTERSECT/EXCEPT ORDER BY" -#: parser/analyze.c:1901 +#: parser/analyze.c:1912 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Дозволено використання тільки імен стовпців, але не виразів або функцій." -#: parser/analyze.c:1902 +#: parser/analyze.c:1913 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Додайте вираз/функція до кожного SELECT, або перемістіть UNION у речення FROM." -#: parser/analyze.c:2008 +#: parser/analyze.c:2019 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO дозволяється додати лише до першого SELECT в UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:2080 +#: parser/analyze.c:2091 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "Учасник інструкції UNION/INTERSECT/EXCEPT не може посилатись на інші відносини на тому ж рівні" -#: parser/analyze.c:2167 +#: parser/analyze.c:2178 #, c-format msgid "each %s query must have the same number of columns" msgstr "кожен %s запит повинен мати однакову кількість стовпців" -#: parser/analyze.c:2573 +#: parser/analyze.c:2535 +#, c-format +msgid "SET target columns cannot be qualified with the relation name." +msgstr "Цільові стовпці SET не можуть бути кваліфіковані за допомогою імені відношення." + +#: parser/analyze.c:2589 #, c-format msgid "RETURNING must have at least one column" msgstr "В RETURNING повинен бути мінімум один стовпець" -#: parser/analyze.c:2676 +#: parser/analyze.c:2692 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" @@ -16051,224 +16452,224 @@ msgstr[1] "джерело призначення повернуло %d стов msgstr[2] "джерело призначення повернуло %d стовпців" msgstr[3] "джерело призначення повернуло %d стовпців" -#: parser/analyze.c:2737 +#: parser/analyze.c:2753 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "змінна \"%s\" має тип %s, але вираз має тип %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2862 parser/analyze.c:2870 +#: parser/analyze.c:2878 parser/analyze.c:2886 #, c-format msgid "cannot specify both %s and %s" msgstr "не можна вказати як %s, так і %s" -#: parser/analyze.c:2890 +#: parser/analyze.c:2906 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR не повинен містити операторів, які змінюють дані в WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2898 +#: parser/analyze.c:2914 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s не підтримується" -#: parser/analyze.c:2901 +#: parser/analyze.c:2917 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Курсори, що зберігаються повинні бути READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2909 +#: parser/analyze.c:2925 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s не підтримується" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2920 +#: parser/analyze.c:2936 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s не є припустимим" -#: parser/analyze.c:2923 +#: parser/analyze.c:2939 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Нечутливі курсори повинні бути READ ONLY." -#: parser/analyze.c:3017 +#: parser/analyze.c:3033 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "в матеріалізованих поданнях не повинні використовуватись оператори, які змінюють дані в WITH" -#: parser/analyze.c:3027 +#: parser/analyze.c:3043 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "в матеріалізованих поданнях не повинні використовуватись тимчасові таблиці або подання" -#: parser/analyze.c:3037 +#: parser/analyze.c:3053 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "визначати матеріалізовані подання з зв'язаними параметрами не можна" -#: parser/analyze.c:3049 +#: parser/analyze.c:3065 #, c-format msgid "materialized views cannot be unlogged" msgstr "матеріалізовані подання не можуть бути нежурнальованими" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3238 +#: parser/analyze.c:3254 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s не дозволяється з реченням DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3245 +#: parser/analyze.c:3261 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s не дозволяється з реченням GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3252 +#: parser/analyze.c:3268 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s не дозволяється з реченням HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3259 +#: parser/analyze.c:3275 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s не дозволяється з агрегатними функціями" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3266 +#: parser/analyze.c:3282 #, c-format msgid "%s is not allowed with window functions" msgstr "%s не дозволяється з віконними функціями" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3273 +#: parser/analyze.c:3289 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s не дозволяється з функціями, які повертають безлічі, в цільовому списку" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3372 +#: parser/analyze.c:3388 #, c-format msgid "%s must specify unqualified relation names" msgstr "для %s потрібно вказати некваліфіковані імена відносин" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3436 +#: parser/analyze.c:3452 #, c-format msgid "%s cannot be applied to a join" msgstr "%s не можна застосовувати до з'єднання" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3445 +#: parser/analyze.c:3461 #, c-format msgid "%s cannot be applied to a function" msgstr "%s не можна застосовувати до функції" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3454 +#: parser/analyze.c:3470 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s не можна застосовувати до табличної функції" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3472 +#: parser/analyze.c:3488 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s не можна застосовувати до запиту WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3481 +#: parser/analyze.c:3497 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s не можна застосовувати до іменованого джерела кортежів" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3501 +#: parser/analyze.c:3517 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "відношення \"%s\" в реченні %s не знайдено в реченні FROM" -#: parser/parse_agg.c:209 parser/parse_oper.c:227 +#: parser/parse_agg.c:210 parser/parse_oper.c:215 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "для типу %s не вдалося визначити оператора сортування" -#: parser/parse_agg.c:211 +#: parser/parse_agg.c:212 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Агрегатним функціям з DISTINCT необхідно сортувати їх вхідні дані." -#: parser/parse_agg.c:269 +#: parser/parse_agg.c:270 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING повинно містити меньше, ніж 32 аргумента" -#: parser/parse_agg.c:372 +#: parser/parse_agg.c:373 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "агрегатні функції не дозволяються в умовах JOIN" -#: parser/parse_agg.c:374 +#: parser/parse_agg.c:375 msgid "grouping operations are not allowed in JOIN conditions" msgstr "операції групування не дозволяються в умовах JOIN" -#: parser/parse_agg.c:386 +#: 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:388 +#: 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:393 +#: parser/parse_agg.c:392 msgid "aggregate functions are not allowed in functions in FROM" msgstr "агрегатні функції не можна застосовувати у функціях у FROM" -#: parser/parse_agg.c:395 +#: parser/parse_agg.c:394 msgid "grouping operations are not allowed in functions in FROM" msgstr "операції групування не можна застосовувати у функціях у FROM" -#: parser/parse_agg.c:403 +#: parser/parse_agg.c:402 msgid "aggregate functions are not allowed in policy expressions" msgstr "агрегатні функції не можна застосовувати у виразах політики" -#: parser/parse_agg.c:405 +#: parser/parse_agg.c:404 msgid "grouping operations are not allowed in policy expressions" msgstr "операції групування не можна застосовувати у виразах політики" -#: parser/parse_agg.c:422 +#: parser/parse_agg.c:421 msgid "aggregate functions are not allowed in window RANGE" msgstr "агрегатні функції не можна застосовувати у вікні RANGE " -#: parser/parse_agg.c:424 +#: parser/parse_agg.c:423 msgid "grouping operations are not allowed in window RANGE" msgstr "операції групування не можна застосовувати у вікні RANGE" -#: parser/parse_agg.c:429 +#: parser/parse_agg.c:428 msgid "aggregate functions are not allowed in window ROWS" msgstr "агрегатні функції не можна застосовувати у вікні ROWS" -#: parser/parse_agg.c:431 +#: parser/parse_agg.c:430 msgid "grouping operations are not allowed in window ROWS" msgstr "операції групування не можна застосовувати у вікні ROWS" -#: parser/parse_agg.c:436 +#: parser/parse_agg.c:435 msgid "aggregate functions are not allowed in window GROUPS" msgstr "агрегатні функції не можна застосовувати у вікні GROUPS" -#: parser/parse_agg.c:438 +#: parser/parse_agg.c:437 msgid "grouping operations are not allowed in window GROUPS" msgstr "операції групування не можна застосовувати у вікні GROUPS" -#: parser/parse_agg.c:451 +#: parser/parse_agg.c:450 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "агрегатні функції не можна застосовувати в умовах MERGE WHEN" -#: parser/parse_agg.c:453 +#: parser/parse_agg.c:452 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "операції групування не можна застосовувати в умовах MERGE WHEN" @@ -16377,7 +16778,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "операції групування не можна застосовувати в умовах COPY FROM WHERE" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:597 parser/parse_clause.c:1956 +#: parser/parse_agg.c:597 parser/parse_clause.c:1962 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "агрегатні функції не можна застосовувати в %s" @@ -16398,8 +16799,8 @@ msgstr "агрегат зовнішнього рівня не може міст msgid "aggregate function calls cannot contain set-returning function calls" msgstr "виклики агрегатної функції не можуть містити викликів функції, що повертають множину" -#: parser/parse_agg.c:780 parser/parse_expr.c:1700 parser/parse_expr.c:2182 -#: parser/parse_func.c:884 +#: 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 "Можливо перемістити функцію, що повертає множину, в елемент LATERAL FROM." @@ -16429,170 +16830,170 @@ msgstr "віконні функції не можна застосовувати msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "віконні функції не можна застосовувати в умовах MERGE WHEN" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:926 msgid "window functions are not allowed in check constraints" msgstr "віконні функції не можна застосовувати в перевірках обмежень" -#: parser/parse_agg.c:929 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in DEFAULT expressions" msgstr "віконні функції не можна застосовувати у виразах DEFAULT" -#: parser/parse_agg.c:932 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in index expressions" msgstr "віконні функції не можна застосовувати у виразах індексів" -#: parser/parse_agg.c:935 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in statistics expressions" msgstr "віконні функції не можна застосовувати у виразах статистики" -#: parser/parse_agg.c:938 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in index predicates" msgstr "віконні функції не можна застосовувати в предикатах індексів" -#: parser/parse_agg.c:941 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in transform expressions" msgstr "віконні функції не можна застосовувати у виразах перетворювання" -#: parser/parse_agg.c:944 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in EXECUTE parameters" msgstr "віконні функції не можна застосовувати в параметрах EXECUTE" -#: parser/parse_agg.c:947 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "віконні функції не можна застосовувати в умовах WHEN для тригерів" -#: parser/parse_agg.c:950 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in partition bound" msgstr "віконні функції не можна застосовувати в границі секції" -#: parser/parse_agg.c:953 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in partition key expressions" msgstr "віконні функції не можна застосовувати у виразах ключа секціонування" -#: parser/parse_agg.c:956 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in CALL arguments" msgstr "віконні функції не можна застосовувати в аргументах CALL" -#: parser/parse_agg.c:959 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "віконні функції не можна застосовувати в умовах COPY FROM WHERE" -#: parser/parse_agg.c:962 +#: 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:985 parser/parse_clause.c:1965 +#: 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:1019 parser/parse_clause.c:2798 +#: parser/parse_agg.c:1020 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "вікно \"%s\" не існує" -#: parser/parse_agg.c:1107 +#: parser/parse_agg.c:1108 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "забагато наборів групування (максимум 4096)" -#: parser/parse_agg.c:1247 +#: 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:1440 +#: 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 "стовпець \"%s.%s\" повинен з'являтися у реченні Група BY або використовуватися в агрегатній функції" -#: parser/parse_agg.c:1443 +#: 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:1448 +#: parser/parse_agg.c:1449 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "вкладений запит використовує не згруповані стовпці \"%s.%s\" з зовнішнього запиту" -#: parser/parse_agg.c:1612 +#: parser/parse_agg.c:1613 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "аргументами групування мають бути вирази групування пов'язаного рівня запиту" -#: parser/parse_clause.c:195 +#: parser/parse_clause.c:193 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "відношення \"%s\" не може бути метою модифікованої інструкції" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2552 +#: parser/parse_clause.c:569 parser/parse_clause.c:597 parser/parse_func.c:2553 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "функції, що повертають множину, мають з'являтися на вищому рівні FROM" -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:609 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "кілька списків з визначенням стовпців не дозволені для тої самої функції" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:642 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() з декількома функціями не можуть мати список з визначенням стовпців" -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:643 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Укладіть окремі списки з визначенням стовпців для кожної з функцій всередині ROWS FROM()." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:649 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() з кількома аргументами не можуть мати список з визначенням стовпців" -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:650 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Використайте окремі виклики UNNEST() всередині ROWS FROM() і підключіть список з визначенням стовпців до кожного." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:657 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY не можна використовувати з списком з визначенням стовпців" -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:658 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Помістіть список з визначенням стовпців всередину ROWS FROM()." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:762 parser/parse_jsontable.c:295 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "FOR ORDINALITY дозволяється лише для одного стовпця" -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:823 #, c-format msgid "column name \"%s\" is not unique" msgstr "ім'я стовпця \"%s\" не є унікальним" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:865 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "ім'я простору імен \"%s\" не є унікальним" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:875 #, c-format msgid "only one default namespace is allowed" msgstr "дозволено тільки один простір імен за замовчуванням" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:935 #, c-format msgid "tablesample method %s does not exist" msgstr "метод %s для отримання вибірки не існує" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:957 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" @@ -16601,204 +17002,204 @@ msgstr[1] "метод %s для отримання вибірки потребу msgstr[2] "метод %s для отримання вибірки потребує аргументів: %d, отримано: %d" msgstr[3] "метод %s для отримання вибірки потребує аргументів: %d, отримано: %d" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:991 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "метод %s для отримання вибірки не підтримує REPEATABLE" -#: parser/parse_clause.c:1138 +#: parser/parse_clause.c:1144 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "Речення TABLESAMPLE можна застосовувати лише до таблиць або матеріалізованих подань" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1331 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "ім’я стовпця \"%s\" з'являється у реченні USING неодноразово" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1346 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "ім’я спільного стовпця \"%s\" з'являється у таблиці зліва неодноразово" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1355 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "в таблиці зліва не існує стовпець \"%s\", вказаний в реченні USING" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1370 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "ім’я спільного стовпця \"%s\" з'являється в таблиці справа неодноразово" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1379 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "в таблиці справа не існує стовпець \"%s\", вказаний в реченні USING" -#: parser/parse_clause.c:1901 +#: parser/parse_clause.c:1907 #, c-format msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "кількість рядків не може бути NULL в операторі FETCH FIRST ... WITH TIES" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:1932 #, c-format msgid "argument of %s must not contain variables" msgstr "аргумент %s не може містити змінні" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2091 +#: parser/parse_clause.c:2097 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "вираз %s \"%s\" неоднозначний" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2119 +#: parser/parse_clause.c:2125 #, c-format msgid "non-integer constant in %s" msgstr "нецілочисельна константа в %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2141 +#: parser/parse_clause.c:2147 #, c-format msgid "%s position %d is not in select list" msgstr "в списку вибірки %s немає позиції %d" -#: parser/parse_clause.c:2580 +#: parser/parse_clause.c:2586 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE має обмеження в 12 елементів" -#: parser/parse_clause.c:2786 +#: parser/parse_clause.c:2792 #, c-format msgid "window \"%s\" is already defined" msgstr "вікно \"%s\" вже визначено" -#: parser/parse_clause.c:2847 +#: parser/parse_clause.c:2853 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "змінити речення PARTITION BY для вікна \"%s\" не можна" -#: parser/parse_clause.c:2859 +#: parser/parse_clause.c:2865 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "змінити речення ORDER BY для вікна \"%s\" не можна" -#: parser/parse_clause.c:2889 parser/parse_clause.c:2895 +#: parser/parse_clause.c:2895 parser/parse_clause.c:2901 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "скопіювати вікно \"%s\", яке має речення рамки, не можна" -#: parser/parse_clause.c:2897 +#: parser/parse_clause.c:2903 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Пропустіть дужки в реченні OVER." -#: parser/parse_clause.c:2917 +#: parser/parse_clause.c:2923 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "Для RANGE з зсувом PRECEDING/FOLLOWING потребується лише один стовпець в ORDER BY" -#: parser/parse_clause.c:2940 +#: parser/parse_clause.c:2946 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "Для режиму GROUPS потребується речення ORDER BY" -#: parser/parse_clause.c:3011 +#: parser/parse_clause.c:3016 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "для агрегатної функції з DISTINCT, вирази ORDER BY повинні з'являтись у списку аргументів" -#: parser/parse_clause.c:3012 +#: parser/parse_clause.c:3017 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "для SELECT DISTINCT вирази ORDER BY повинні бути в списку вибірки" -#: parser/parse_clause.c:3044 +#: parser/parse_clause.c:3049 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "агрегатна функція з DISTINCT повинна мати мінімум один аргумент" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3050 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT повинен мати мінімум один стовпець" -#: parser/parse_clause.c:3111 parser/parse_clause.c:3143 +#: parser/parse_clause.c:3116 parser/parse_clause.c:3148 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "Вирази SELECT DISTINCT ON повинні відповідати початковим виразам ORDER BY" -#: parser/parse_clause.c:3221 +#: parser/parse_clause.c:3226 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC не дозволяється в реченні ON CONFLICT" -#: parser/parse_clause.c:3227 +#: parser/parse_clause.c:3232 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST не довзоляється в реченні ON CONFLICT" -#: parser/parse_clause.c:3306 +#: parser/parse_clause.c:3311 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE вимагає специфікації висновку або імені обмеження" -#: parser/parse_clause.c:3307 +#: parser/parse_clause.c:3312 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Наприклад, ON CONFLICT (ім'я_стовпця)." -#: parser/parse_clause.c:3318 +#: parser/parse_clause.c:3323 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT не підтримується таблицями системного каталогу" -#: parser/parse_clause.c:3326 +#: parser/parse_clause.c:3331 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT не підтримується в таблиці \"%s\", що використовується як таблиця каталогу" -#: parser/parse_clause.c:3457 +#: parser/parse_clause.c:3462 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "оператор %s не є дійсним оператором сортування" -#: parser/parse_clause.c:3459 +#: parser/parse_clause.c:3464 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Оператори сортування повинні бути учасниками \"<\" або \">\" сімейств операторів btree." -#: parser/parse_clause.c:3770 +#: parser/parse_clause.c:3775 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE зі зсувом PRECEDING/FOLLOWING не підтримується для типу стовпця %s" -#: parser/parse_clause.c:3776 +#: parser/parse_clause.c:3781 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE зі зсувом PRECEDING/FOLLOWING не підтримується для типу стовпця %s і типу зсуву %s" -#: parser/parse_clause.c:3779 +#: parser/parse_clause.c:3784 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Приведіть значення зсуву до потрібного типу." -#: parser/parse_clause.c:3784 +#: parser/parse_clause.c:3789 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE зі зсувом PRECEDING/FOLLOWING має декілька інтерпретацій для типу стовпця %s і типу зсуву %s" -#: parser/parse_clause.c:3787 +#: parser/parse_clause.c:3792 #, c-format 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:2083 parser/parse_expr.c:2691 parser/parse_expr.c:3497 -#: parser/parse_target.c:985 +#: 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" @@ -16857,19 +17258,19 @@ msgid "arguments declared \"%s\" are not all alike" msgstr "оголошенні аргументи \"%s\", повинні бути схожими" #: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 -#: utils/fmgr/funcapi.c:592 +#: 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:606 +#: 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:624 utils/fmgr/funcapi.c:689 +#: parser/parse_coerce.c:2529 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" @@ -16993,437 +17394,547 @@ msgstr "рекурсивне посилання на запит \"%s\" не по msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись в EXCEPT" -#: parser/parse_cte.c:133 -#, c-format -msgid "MERGE not supported in WITH query" -msgstr "MERGE не підтримується в запиті WITH" - -#: parser/parse_cte.c:143 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "Ім’я запиту WITH \"%s\" вказано неодноразово" -#: parser/parse_cte.c:314 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "не вдалося визначити оператора нерівності для типу %s" -#: parser/parse_cte.c:341 +#: parser/parse_cte.c:335 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "Речення WITH, яке містить оператор, що змінює дані, повинне бути на верхньому рівні" -#: parser/parse_cte.c:390 +#: parser/parse_cte.c:384 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "у рекурсивному запиті \"%s\" стовпець %d має тип %s у нерекурсивній частині, але загалом тип %s" -#: parser/parse_cte.c:396 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Приведіть результат нерекурсивної частини до правильного типу." -#: parser/parse_cte.c:401 +#: parser/parse_cte.c:395 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "у рекурсивному запиті \"%s\" стовпець %d має параметри сортування \"%s\" у нерекурсивній частині, але загалом параметри сортування \"%s\"" -#: parser/parse_cte.c:405 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Використайте речення COLLATE, щоб встановити параметри сортування в нерекурсивній частині." -#: parser/parse_cte.c:426 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "Запит WITH не є рекурсивним" -#: parser/parse_cte.c:457 +#: parser/parse_cte.c:451 #, c-format msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" msgstr "з реченням з SEARCH або CYCLE, ліва сторона UNION повинна бути SELECT" -#: parser/parse_cte.c:462 +#: parser/parse_cte.c:456 #, c-format msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" msgstr "з реченням з SEARCH або CYCLE, права сторона UNION повинна бути SELECT" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "пошуковий стовпець \"%s\" відсутній в списку стовпців запиту WITH" -#: parser/parse_cte.c:484 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "пошуковий стовпець \"%s\" вказано більше одного разу" -#: parser/parse_cte.c:493 +#: parser/parse_cte.c:487 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "назва послідовності пошуку \"%s\" вже використовується у списку стовпців запиту WITH" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "стовпець циклу \"%s\" відсутній в списку стовпців запиту WITH" -#: parser/parse_cte.c:517 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "стовпець циклу \"%s\" вказано більше одного разу" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "назва стовпця позначки циклу \"%s\" вже використовується у списку стовпців запиту WITH" -#: parser/parse_cte.c:533 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "назва стовпця циклу шляху \"%s\" вже використовується у списку стовпців запиту WITH" -#: parser/parse_cte.c:541 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "назва стовпця позначки циклу і назва стовпця циклу шляху однакові" -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "назва стовпця послідовності пошуку і назва стовпця позначки циклу однакові" -#: parser/parse_cte.c:558 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "назва стовпця послідовності пошуку і назва стовпця циклу шляху однакові" -#: parser/parse_cte.c:642 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "Запит WITH \"%s\" має %d доступних стовпців, але %d стовпців вказано" -#: parser/parse_cte.c:822 +#: parser/parse_cte.c:816 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "взаємна рекурсія між елементами WITH не реалізована" -#: parser/parse_cte.c:874 +#: parser/parse_cte.c:868 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "рекурсивний запит \"%s\" не повинен містити оператори, які змінюють дані" -#: parser/parse_cte.c:882 +#: parser/parse_cte.c:876 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "рекурсивний запит \"%s\" не має форми (нерекурсивна частина) UNION [ALL] (рекурсивна частина)" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:911 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY в рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:917 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET у рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:923 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT у рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:944 +#: 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:1001 +#: parser/parse_cte.c:1008 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись неодноразово" -#: parser/parse_expr.c:294 +#: parser/parse_expr.c:313 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT не допускається в цьому контексті" -#: parser/parse_expr.c:371 parser/parse_relation.c:3688 -#: parser/parse_relation.c:3698 parser/parse_relation.c:3716 -#: parser/parse_relation.c:3723 parser/parse_relation.c:3737 +#: 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:383 +#: parser/parse_expr.c:418 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "стовпець \"%s\" не знайдено в типі даних %s" -#: parser/parse_expr.c:389 +#: parser/parse_expr.c:424 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "не вдалося ідентифікувати стовпець \"%s\" в типі запису" -#: parser/parse_expr.c:395 +#: parser/parse_expr.c:430 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "запис імені стовпця .%s застосований до типу %s, котрий не є складеним типом" -#: parser/parse_expr.c:426 parser/parse_target.c:733 +#: 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:548 +#: parser/parse_expr.c:584 msgid "cannot use column reference in DEFAULT expression" msgstr "у виразі DEFAULT не можна використовувати посилання на стовпець" -#: parser/parse_expr.c:551 +#: parser/parse_expr.c:587 msgid "cannot use column reference in partition bound expression" msgstr "у виразі границі секції не можна використовувати посилання на стовпці" -#: parser/parse_expr.c:810 parser/parse_relation.c:833 -#: parser/parse_relation.c:915 parser/parse_target.c:1225 +#: 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:866 parser/parse_param.c:110 parser/parse_param.c:142 +#: 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:1066 +#. 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 "NULLIF потребує = щоб оператор повертав логічне значення" +msgid "%s requires = operator to yield boolean" +msgstr "" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1072 parser/parse_expr.c:3007 +#: parser/parse_expr.c:1109 parser/parse_expr.c:3072 #, c-format msgid "%s must not return a set" msgstr "%s не повинна повертати набір" -#: parser/parse_expr.c:1457 parser/parse_expr.c:1489 +#: parser/parse_expr.c:1395 +#, c-format +msgid "MERGE_ACTION() can only be used in the RETURNING list of a MERGE command" +msgstr "" + +#: parser/parse_expr.c:1519 parser/parse_expr.c:1551 #, c-format msgid "number of columns does not match number of values" msgstr "кількість стовпців не відповідає кількості значень" -#: parser/parse_expr.c:1503 +#: parser/parse_expr.c:1565 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "джерелом для елементу UPDATE з декількома стовпцями повинен бути вкладений SELECT або вираз ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1698 parser/parse_expr.c:2180 parser/parse_func.c:2677 +#: parser/parse_expr.c:1760 parser/parse_expr.c:2243 parser/parse_func.c:2679 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "функції, повертаючі набори, не дозволяються в %s" -#: parser/parse_expr.c:1761 +#: parser/parse_expr.c:1824 msgid "cannot use subquery in check constraint" msgstr "в обмеженні-перевірці не можна використовувати підзапити" -#: parser/parse_expr.c:1765 +#: parser/parse_expr.c:1828 msgid "cannot use subquery in DEFAULT expression" msgstr "у виразі DEFAULT не можна використовувати підзапити" -#: parser/parse_expr.c:1768 +#: parser/parse_expr.c:1831 msgid "cannot use subquery in index expression" msgstr "в індексному виразі не можна використовувати підзапити" -#: parser/parse_expr.c:1771 +#: parser/parse_expr.c:1834 msgid "cannot use subquery in index predicate" msgstr "в предикаті індексу не можна використовувати підзапити" -#: parser/parse_expr.c:1774 +#: parser/parse_expr.c:1837 msgid "cannot use subquery in statistics expression" msgstr "у виразі статистики не можна використовувати підзапит" -#: parser/parse_expr.c:1777 +#: parser/parse_expr.c:1840 msgid "cannot use subquery in transform expression" msgstr "у виразі перетворення не можна використовувати підзапити" -#: parser/parse_expr.c:1780 +#: parser/parse_expr.c:1843 msgid "cannot use subquery in EXECUTE parameter" msgstr "в параметрі EXECUTE не можна використовувати підзапити" -#: parser/parse_expr.c:1783 +#: parser/parse_expr.c:1846 msgid "cannot use subquery in trigger WHEN condition" msgstr "в умові WHEN для тригеру не можна використовувати підзапити" -#: parser/parse_expr.c:1786 +#: parser/parse_expr.c:1849 msgid "cannot use subquery in partition bound" msgstr "в границі секції не можна використовувати підзапити" -#: parser/parse_expr.c:1789 +#: parser/parse_expr.c:1852 msgid "cannot use subquery in partition key expression" msgstr "у виразі ключа секціонування не можна використовувати підзапити" -#: parser/parse_expr.c:1792 +#: parser/parse_expr.c:1855 msgid "cannot use subquery in CALL argument" msgstr "в аргументі CALL не можна використовувати підзапити" -#: parser/parse_expr.c:1795 +#: parser/parse_expr.c:1858 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "не можна використовувати підзапити в умові COPY FROM WHERE" -#: parser/parse_expr.c:1798 +#: parser/parse_expr.c:1861 msgid "cannot use subquery in column generation expression" msgstr "у виразі генерації стовпців не можна використовувати підзапити" -#: parser/parse_expr.c:1851 parser/parse_expr.c:3628 +#: parser/parse_expr.c:1914 parser/parse_expr.c:3764 #, c-format msgid "subquery must return only one column" msgstr "підзапит повинен повертати лише один стовпець" -#: parser/parse_expr.c:1922 +#: parser/parse_expr.c:1985 #, c-format msgid "subquery has too many columns" msgstr "підзапит має занадто багато стовпців" -#: parser/parse_expr.c:1927 +#: parser/parse_expr.c:1990 #, c-format msgid "subquery has too few columns" msgstr "підзапит має занадто мало стовпців" -#: parser/parse_expr.c:2023 +#: parser/parse_expr.c:2086 #, c-format msgid "cannot determine type of empty array" msgstr "тип пустого масиву визначити не можна" -#: parser/parse_expr.c:2024 +#: parser/parse_expr.c:2087 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Приведіть його до бажаного типу явним чином, наприклад ARRAY[]::integer[]." -#: parser/parse_expr.c:2038 +#: parser/parse_expr.c:2101 #, c-format msgid "could not find element type for data type %s" msgstr "не вдалося знайти тип елементу для типу даних %s" -#: parser/parse_expr.c:2121 +#: parser/parse_expr.c:2184 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW вирази можуть мати максимум %d елементів" -#: parser/parse_expr.c:2326 +#: parser/parse_expr.c:2389 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "замість значення XML-атрибуту без імені повинен вказуватись стовпець" -#: parser/parse_expr.c:2327 +#: parser/parse_expr.c:2390 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "замість значення XML-елементу без імені повинен вказуватись стовпець" -#: parser/parse_expr.c:2342 +#: parser/parse_expr.c:2405 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "Ім'я XML-атрибуту \"%s\" з'являється неодноразово" -#: parser/parse_expr.c:2450 +#: parser/parse_expr.c:2513 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "привести результат XMLSERIALIZE до %s не можна" -#: parser/parse_expr.c:2764 parser/parse_expr.c:2960 +#: parser/parse_expr.c:2827 parser/parse_expr.c:3023 #, c-format msgid "unequal number of entries in row expressions" msgstr "неоднакова кількість елементів у виразах рядка" -#: parser/parse_expr.c:2774 +#: parser/parse_expr.c:2837 #, c-format msgid "cannot compare rows of zero length" msgstr "рядки нульової довжини порівнювати не можна" -#: parser/parse_expr.c:2799 +#: parser/parse_expr.c:2862 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "оператор порівняння рядків повинен видавати логічний тип, а не %s" -#: parser/parse_expr.c:2806 +#: parser/parse_expr.c:2869 #, c-format msgid "row comparison operator must not return a set" msgstr "оператор порівняння рядків повинен вертати набір" -#: parser/parse_expr.c:2865 parser/parse_expr.c:2906 +#: parser/parse_expr.c:2928 parser/parse_expr.c:2969 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "не вдалося визначити інтерпретацію оператора порівняння рядків %s" -#: parser/parse_expr.c:2867 +#: parser/parse_expr.c:2930 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Оператори порівняння рядків повинні бути пов'язанні з сімейством операторів btree." -#: parser/parse_expr.c:2908 +#: parser/parse_expr.c:2971 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Існує декілька рівноцінних кандидатів." -#: parser/parse_expr.c:3001 -#, c-format -msgid "IS DISTINCT FROM requires = operator to yield boolean" -msgstr "IS DISTINCT FROM, потребує = щоб оператор повертав логічне значення" - -#: parser/parse_expr.c:3239 +#: parser/parse_expr.c:3306 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "Вираз JSON ENCODING дозволено лише для типу введення bytea" -#: parser/parse_expr.c:3261 +#: parser/parse_expr.c:3370 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "використовувати типи, які не є string з неявним виразом FORMAT JSON не можна" -#: parser/parse_expr.c:3262 +#: parser/parse_expr.c:3371 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "використовувати типи, які не є string з явним виразом FORMAT JSON не можна" -#: parser/parse_expr.c:3335 +#: parser/parse_expr.c:3460 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "використовувати формат JSON з типами виводу, які не є string не можна" -#: parser/parse_expr.c:3348 +#: parser/parse_expr.c:3473 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "встановити кодування JSON для типів виводу, які не є bytea не можна" -#: parser/parse_expr.c:3353 +#: parser/parse_expr.c:3478 #, c-format msgid "unsupported JSON encoding" msgstr "непідтримуване JSON кодування" -#: parser/parse_expr.c:3354 +#: parser/parse_expr.c:3479 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "Підтримується лише кодування UTF8 формату JSON." -#: parser/parse_expr.c:3391 +#: parser/parse_expr.c:3516 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "повернення типів SETOF не підтримується у функціях SQL/JSON" -#: parser/parse_expr.c:3712 parser/parse_func.c:865 +#: parser/parse_expr.c:3521 +#, c-format +msgid "returning pseudo-types is not supported in SQL/JSON functions" +msgstr "" + +#: 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:3934 +#: parser/parse_expr.c:4072 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "використовувати вираз JSON FORMAT ENCODING для типів введення, які не є bytea не можна" -#: parser/parse_expr.c:3954 +#: parser/parse_expr.c:4092 #, c-format msgid "cannot use type %s in IS JSON predicate" msgstr "використовувати тип %s в предикаті IS JSON не можна" +#: parser/parse_expr.c:4118 parser/parse_expr.c:4238 +#, c-format +msgid "cannot use RETURNING type %s in %s" +msgstr "не можна використовувати тип RETURNING %s в %s" + +#: parser/parse_expr.c:4167 +#, c-format +msgid "cannot use non-string types with WITH UNIQUE KEYS clause" +msgstr "не можна використовувати не строкові типи з пунктом WITH UNIQUE KEYS" + +#: parser/parse_expr.c:4241 +#, c-format +msgid "Try returning a string type or bytea." +msgstr "Спробуйте повернути тип string або bytea." + +#: parser/parse_expr.c:4306 +#, c-format +msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" +msgstr "" + +#: parser/parse_expr.c:4319 +#, c-format +msgid "SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" +msgstr "" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4333 parser/parse_expr.c:4362 parser/parse_expr.c:4393 +#: parser/parse_expr.c:4419 parser/parse_expr.c:4445 +#: parser/parse_jsontable.c:94 +#, c-format +msgid "invalid %s behavior" +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:4336 parser/parse_expr.c:4365 +#, 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:4343 parser/parse_expr.c:4372 parser/parse_expr.c:4401 +#: parser/parse_expr.c:4429 parser/parse_expr.c:4455 +#, c-format +msgid "invalid %s behavior for column \"%s\"" +msgstr "" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4346 parser/parse_expr.c:4375 +#, 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:4394 +#, 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:4404 +#, 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:4422 parser/parse_expr.c:4448 +#, 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:4432 parser/parse_expr.c:4458 +#, c-format +msgid "Only ERROR, NULL, or DEFAULT expression is allowed in %s for scalar columns." +msgstr "" + +#: parser/parse_expr.c:4488 +#, c-format +msgid "JSON path expression must be of type %s, not of type %s" +msgstr "" + +#: parser/parse_expr.c:4706 +#, c-format +msgid "can only specify a constant, non-aggregate function, or operator expression for DEFAULT" +msgstr "" + +#: parser/parse_expr.c:4711 +#, c-format +msgid "DEFAULT expression must not contain column references" +msgstr "" + +#: parser/parse_expr.c:4716 +#, c-format +msgid "DEFAULT expression must not return a set" +msgstr "" + +#: parser/parse_expr.c:4792 parser/parse_expr.c:4801 +#, c-format +msgid "cannot cast behavior expression of type %s to %s" +msgstr "" + +#: parser/parse_expr.c:4795 +#, c-format +msgid "You will need to explicitly cast the expression to type %s." +msgstr "" + #: parser/parse_func.c:194 #, c-format msgid "argument name \"%s\" used more than once" @@ -17434,7 +17945,7 @@ msgstr "ім’я аргументу \"%s\" використовується н msgid "positional argument cannot follow named argument" msgstr "позиційний аргумент не може стежити за іменованим аргументомв" -#: parser/parse_func.c:287 parser/parse_func.c:2367 +#: parser/parse_func.c:287 parser/parse_func.c:2368 #, c-format msgid "%s is not a procedure" msgstr "%s не є процедурою" @@ -17557,7 +18068,7 @@ msgstr "Не вдалося обрати найкращу кандидатуру msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Агрегатну функцію з цим ім'ям і типами аргументів не знайдено. Можливо, ви невірно розмістили речення ORDER BY; речення ORDER BY повинно з'являтись після всіх звичайних аргументів агрегату." -#: parser/parse_func.c:622 parser/parse_func.c:2410 +#: parser/parse_func.c:622 parser/parse_func.c:2411 #, c-format msgid "procedure %s does not exist" msgstr "процедура %s не існує" @@ -17577,7 +18088,7 @@ msgstr "Функцію з цим ім'ям і типами аргументів msgid "VARIADIC argument must be an array" msgstr "Аргумент VARIADIC повинен бути масивом" -#: parser/parse_func.c:791 parser/parse_func.c:855 +#: parser/parse_func.c:791 parser/parse_func.c:856 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr " %s(*) треба використовувати для виклику агрегатної функції без параметрів" @@ -17592,42 +18103,42 @@ msgstr "агрегатні функції не можуть повертати msgid "aggregates cannot use named arguments" msgstr "агрегатні функції не можуть використовувати іменовані аргументи" -#: parser/parse_func.c:845 +#: parser/parse_func.c:846 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT для віконних функції не реалізовано" -#: parser/parse_func.c:874 +#: parser/parse_func.c:875 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER для неагрегатних віконних функцій не реалізовано" -#: parser/parse_func.c:883 +#: parser/parse_func.c:884 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "виклики віконних функцій не можуть містити виклики функцій, які повертають набори" -#: parser/parse_func.c:891 +#: parser/parse_func.c:892 #, c-format msgid "window functions cannot return sets" msgstr "віконні функції не можуть повертати набори" -#: parser/parse_func.c:2166 parser/parse_func.c:2439 +#: parser/parse_func.c:2167 parser/parse_func.c:2440 #, c-format msgid "could not find a function named \"%s\"" msgstr "не вдалося знайти функцію з іменем \"%s\"" -#: parser/parse_func.c:2180 parser/parse_func.c:2457 +#: parser/parse_func.c:2181 parser/parse_func.c:2458 #, c-format msgid "function name \"%s\" is not unique" msgstr "ім’я функції \"%s\" не є унікальним" -#: parser/parse_func.c:2182 parser/parse_func.c:2460 +#: parser/parse_func.c:2183 parser/parse_func.c:2461 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Укажіть список аргументів для однозначного вибору функції." -#: parser/parse_func.c:2226 +#: parser/parse_func.c:2227 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" @@ -17636,221 +18147,215 @@ msgstr[1] "процедури не можуть мати більш ніж %d а msgstr[2] "процедури не можуть мати більш ніж %d аргументів" msgstr[3] "процедури не можуть мати більш ніж %d аргументів" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2358 #, c-format msgid "%s is not a function" msgstr "%s не є функцією" -#: parser/parse_func.c:2377 +#: parser/parse_func.c:2378 #, c-format msgid "function %s is not an aggregate" msgstr "функція %s не є агрегатною" -#: parser/parse_func.c:2405 +#: parser/parse_func.c:2406 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "не вдалося знайти процедуру з іменем \"%s\"" -#: parser/parse_func.c:2419 +#: parser/parse_func.c:2420 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "не вдалося знайти агрегат з ім'ям \"%s\"" -#: parser/parse_func.c:2424 +#: parser/parse_func.c:2425 #, c-format msgid "aggregate %s(*) does not exist" msgstr "агрегат %s (*) не існує" -#: parser/parse_func.c:2429 +#: parser/parse_func.c:2430 #, c-format msgid "aggregate %s does not exist" msgstr "агрегат %s не існує" -#: parser/parse_func.c:2465 +#: parser/parse_func.c:2466 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "назва процедури \"%s\" не є унікальною" -#: parser/parse_func.c:2468 +#: parser/parse_func.c:2469 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Вкажіть список аргументів для однозначного вибору процедури." -#: parser/parse_func.c:2473 +#: parser/parse_func.c:2474 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "назва агрегатної функції \"%s\" не є унікальною" -#: parser/parse_func.c:2476 +#: parser/parse_func.c:2477 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Вкажіть список аргументів для однозначного вибору агрегатної функції." -#: parser/parse_func.c:2481 +#: parser/parse_func.c:2482 #, c-format msgid "routine name \"%s\" is not unique" msgstr "назва підпрограми \"%s\" не є унікальною" -#: parser/parse_func.c:2484 +#: parser/parse_func.c:2485 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Вкажіть список аргументів для однозначного вибору підпрограми." -#: parser/parse_func.c:2539 +#: parser/parse_func.c:2540 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "функції, що повертають множину, не можна застосовувати в умовах групування" -#: parser/parse_func.c:2560 +#: parser/parse_func.c:2561 msgid "set-returning functions are not allowed in policy expressions" msgstr "функції, що повертають множину, не можна застосовувати у виразах політики" -#: parser/parse_func.c:2576 +#: parser/parse_func.c:2577 msgid "set-returning functions are not allowed in window definitions" msgstr "функції, що повертають множину, не можна застосовувати у віконних визначеннях" -#: parser/parse_func.c:2613 +#: parser/parse_func.c:2615 msgid "set-returning functions are not allowed in MERGE WHEN conditions" msgstr "функції, які повертають набір, не можна застосовувати в умовах MERGE WHEN" -#: parser/parse_func.c:2617 +#: parser/parse_func.c:2619 msgid "set-returning functions are not allowed in check constraints" msgstr "функції, що повертають множину, не можна застосовувати в обмеженнях Check" -#: parser/parse_func.c:2621 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "функції, що повертають множину, не можна застосовувати у стандартних виразах" -#: parser/parse_func.c:2624 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index expressions" msgstr "функції, що повертають множину, не можна застосовувати в індексних виразах" -#: parser/parse_func.c:2627 +#: parser/parse_func.c:2629 msgid "set-returning functions are not allowed in index predicates" msgstr "функції, що повертають множину, не можна застосовувати в індексних предикатах" -#: parser/parse_func.c:2630 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in statistics expressions" msgstr "функції, що повертають набори, не можна застосовувати у виразах статистики" -#: parser/parse_func.c:2633 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in transform expressions" msgstr "функції, що повертають множину, не можна застосовувати у виразах перетворення" -#: parser/parse_func.c:2636 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "функції, що повертають множину, не можна застосовуватив параметрах виконання" -#: parser/parse_func.c:2639 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "функції, що повертають множину, не можна застосовувати в умовах для тригерів WHEN" -#: parser/parse_func.c:2642 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition bound" msgstr "функції, що повертають множину не можна застосовувати в границі секції" -#: parser/parse_func.c:2645 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in partition key expressions" msgstr "функції, що повертають множину, не можна застосовувати у виразах ключа розділення" -#: parser/parse_func.c:2648 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in CALL arguments" msgstr "функції, що повертають множину, не можна застосовувати в аргументах Відеовикликів" -#: parser/parse_func.c:2651 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "функції, що повертають множину не можна застосовувати в умовах COPY FROM WHERE" -#: parser/parse_func.c:2654 +#: parser/parse_func.c:2656 msgid "set-returning functions are not allowed in column generation expressions" msgstr "функції, що повертають множину не можна застосовувати у виразах генерації стовпців" -#: parser/parse_merge.c:119 +#: parser/parse_jsontable.c:95 +#, c-format +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 +#, c-format +msgid "duplicate JSON_TABLE column or path name: %s" +msgstr "" + +#: parser/parse_merge.c:129 #, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" msgstr "WITH RECURSIVE не підтримується для інструкції MERGE" -#: parser/parse_merge.c:161 +#: parser/parse_merge.c:176 #, c-format msgid "unreachable WHEN clause specified after unconditional WHEN clause" msgstr "недосяжна речення WHEN зазначено після безумовного речення WHEN" -#: parser/parse_merge.c:191 -#, c-format -msgid "MERGE is not supported for relations with rules." -msgstr "MERGE не підтримує відношення з правилами." - -#: parser/parse_merge.c:208 +#: parser/parse_merge.c:222 #, c-format msgid "name \"%s\" specified more than once" msgstr "ім'я \"%s\" вказано кілька разів" -#: parser/parse_merge.c:210 +#: parser/parse_merge.c:224 #, c-format msgid "The name is used both as MERGE target table and data source." msgstr "Ім'я вказано одночасно як цільова таблиця та джерело MERGE." -#: parser/parse_node.c:87 +#: parser/parse_node.c:82 #, c-format msgid "target lists can have at most %d entries" msgstr "цільові списки можуть мати максимум %d елементів" -#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#: parser/parse_oper.c:114 parser/parse_oper.c:678 #, c-format msgid "postfix operators are not supported" msgstr "постфіксні оператори не підтримуються" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:509 -#: utils/adt/regproc.c:683 -#, c-format -msgid "operator does not exist: %s" -msgstr "оператор не існує: %s" - -#: parser/parse_oper.c:229 +#: parser/parse_oper.c:217 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Використати явний оператор сортування або змінити запит." -#: parser/parse_oper.c:485 +#: parser/parse_oper.c:473 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "оператор вимагає приведення типів під час виконання: %s" -#: parser/parse_oper.c:641 +#: parser/parse_oper.c:629 #, c-format msgid "operator is not unique: %s" msgstr "оператор не є унікальним: %s" -#: parser/parse_oper.c:643 +#: parser/parse_oper.c:631 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "Не вдалося вибрати найкращу кандидатуру оператора. Вам, можливо треба додати явні приведення типів." -#: parser/parse_oper.c:652 +#: parser/parse_oper.c:640 #, c-format msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." msgstr "Жодний оператор не відповідає даному імені та типу аргументу. Вам, можливо, треба додати явне приведення типу." -#: parser/parse_oper.c:654 +#: parser/parse_oper.c:642 #, c-format msgid "No operator matches the given name and argument types. You might need to add explicit type casts." msgstr "Жодний оператор не відповідає даному імені та типу аргументу. Вам, можливо, треба додати явні приведення типів." -#: parser/parse_oper.c:714 parser/parse_oper.c:828 -#, c-format -msgid "operator is only a shell: %s" -msgstr "оператор є лише оболонкою: %s" - -#: parser/parse_oper.c:816 +#: parser/parse_oper.c:803 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (масив) вимагає масив справа" -#: parser/parse_oper.c:858 +#: parser/parse_oper.c:844 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (масив) вимагає оператора для видання логічного типу" -#: parser/parse_oper.c:863 +#: parser/parse_oper.c:849 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (масив) вимагає оператора не для повернення множини" @@ -17860,7 +18365,7 @@ msgstr "op ANY/ALL (масив) вимагає оператора не для п msgid "inconsistent types deduced for parameter $%d" msgstr "для параметру $%d виведені неузгоджені типи" -#: 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" @@ -17880,13 +18385,13 @@ msgstr "посилання на таблицю %u неоднозначне" msgid "table name \"%s\" specified more than once" msgstr "ім'я таблиці \"%s\" вказано більше одного разу" -#: parser/parse_relation.c:494 parser/parse_relation.c:3630 -#: parser/parse_relation.c:3639 +#: parser/parse_relation.c:494 parser/parse_relation.c:3633 +#: parser/parse_relation.c:3642 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "в елементі речення FROM неприпустиме посилання на таблицю \"%s\"" -#: parser/parse_relation.c:498 parser/parse_relation.c:3641 +#: parser/parse_relation.c:498 parser/parse_relation.c:3644 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Таблиця \"%s\" присутня в запиті, але посилатися на неї з цієї частини запиту не можна." @@ -17912,7 +18417,7 @@ msgid "cannot use system column \"%s\" in MERGE WHEN condition" msgstr "неможливо використати симтемний стовпець \"%s\" в умові MERGE WHEN" #: parser/parse_relation.c:1236 parser/parse_relation.c:1691 -#: parser/parse_relation.c:2388 +#: parser/parse_relation.c:2384 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "таблиця \"%s\" має %d доступних стовпців, але вказано %d стовпців" @@ -17927,157 +18432,157 @@ msgstr "Існує WITH елемент \"%s\" але на нього не мож msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Використовувати WITH RECURSIVE, або перевпорядкувати елементи WITH, щоб видалити попередні посилання." -#: parser/parse_relation.c:1834 +#: parser/parse_relation.c:1833 #, c-format msgid "a column definition list is redundant for a function with OUT parameters" msgstr "список з визначенням стовпців не потрібен для функції з параметрами OUT" -#: parser/parse_relation.c:1840 +#: parser/parse_relation.c:1839 #, c-format msgid "a column definition list is redundant for a function returning a named composite type" msgstr "список з визначенням стовпців не потрібен для функції, яка повертає іменований складений тип" -#: parser/parse_relation.c:1847 +#: parser/parse_relation.c:1846 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "список з визначенням стовпців дозволений лише для функцій, що повертають \"запис\"" -#: parser/parse_relation.c:1858 +#: parser/parse_relation.c:1857 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "список з визначенням стовпців вимагається для функцій, що повертають \"запис\"" -#: parser/parse_relation.c:1895 +#: parser/parse_relation.c:1894 #, c-format msgid "column definition lists can have at most %d entries" msgstr "списки визначень стовпців можуть мати максимум %d елементів" -#: parser/parse_relation.c:1955 +#: parser/parse_relation.c:1954 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "функція \"%s\" у FROM повертає тип, що не підтримується %s" -#: parser/parse_relation.c:1982 parser/parse_relation.c:2068 +#: parser/parse_relation.c:1981 parser/parse_relation.c:2066 #, c-format msgid "functions in FROM can return at most %d columns" msgstr "функції з FROM можуть повертати не більше %d стовпців" -#: parser/parse_relation.c:2098 +#: parser/parse_relation.c:2096 #, c-format msgid "%s function has %d columns available but %d columns specified" msgstr "функція \"%s\" має %d доступних стовпців, але вказано %d стовпців" -#: parser/parse_relation.c:2180 +#: parser/parse_relation.c:2177 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "VALUES списки \"%s\" мають %d доступних стовпців, але %d стовпців вказано" -#: parser/parse_relation.c:2246 +#: parser/parse_relation.c:2242 #, c-format msgid "joins can have at most %d columns" msgstr "з'єднання можуть мати максимум %d стовпців" -#: parser/parse_relation.c:2271 +#: parser/parse_relation.c:2267 #, c-format msgid "join expression \"%s\" has %d columns available but %d columns specified" msgstr "вираз з'єднання \"%s\" має %d доступних стовпців, але %d стовпців вказано" -#: parser/parse_relation.c:2361 +#: parser/parse_relation.c:2357 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH запит \"%s\" не має речення RETURNING" -#: parser/parse_relation.c:3632 +#: parser/parse_relation.c:3635 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Можливо, малося на увазі посилання на псевдонім таблиці \"%s\"." -#: parser/parse_relation.c:3644 +#: parser/parse_relation.c:3647 #, c-format msgid "To reference that table, you must mark this subquery with LATERAL." msgstr "Щоб використати цю таблицю, вам потрібно позначити цей підзапит як LATERAL." -#: parser/parse_relation.c:3650 +#: parser/parse_relation.c:3653 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "таблиця \"%s\" відсутня в реченні FROM" -#: parser/parse_relation.c:3690 +#: parser/parse_relation.c:3693 #, c-format msgid "There are columns named \"%s\", but they are in tables that cannot be referenced from this part of the query." msgstr "Є стовпці з назвою \"%s\", але вони знаходяться в таблицях, на які не можна посилатися з цієї частини запиту." -#: parser/parse_relation.c:3692 +#: parser/parse_relation.c:3695 #, c-format msgid "Try using a table-qualified name." msgstr "Спробуй використати повне ім'я включно з таблицею." -#: parser/parse_relation.c:3700 +#: parser/parse_relation.c:3703 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Є стовпець з іменем \"%s\" в таблиці \"%s\", але на нього не можна посилатись з цієї частини запиту." -#: parser/parse_relation.c:3703 +#: parser/parse_relation.c:3706 #, c-format msgid "To reference that column, you must mark this subquery with LATERAL." msgstr "Щоб використати цей стовпець, вам потрібно позначити цей підзапит як LATERAL." -#: parser/parse_relation.c:3705 +#: parser/parse_relation.c:3708 #, c-format msgid "To reference that column, you must use a table-qualified name." msgstr "Щоб посилатися на цей стовпець, ви повинні використовувати повне ім'я включно з таблицею." -#: parser/parse_relation.c:3725 +#: parser/parse_relation.c:3728 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Можливо, передбачалось посилання на стовпець \"%s.%s\"." -#: parser/parse_relation.c:3739 +#: parser/parse_relation.c:3742 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Можливо, передбачалось посилання на стовпець \"%s.%s\" або стовпець \"%s.%s\"." -#: parser/parse_target.c:481 parser/parse_target.c:796 +#: parser/parse_target.c:480 parser/parse_target.c:795 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "призначити значення системному стовпцю \"%s\" не можна" -#: parser/parse_target.c:509 +#: parser/parse_target.c:508 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "елементу масива не можна встановити значення DEFAULT" -#: parser/parse_target.c:514 +#: parser/parse_target.c:513 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "підполю не можна встановити значення DEFAULT" -#: parser/parse_target.c:588 +#: parser/parse_target.c:587 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "стовпець \"%s\" має тип %s, а вираз %s" -#: parser/parse_target.c:780 +#: parser/parse_target.c:779 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "призначити значення полю \"%s\" стовпця \"%s\" не можна, тому, що тип %s не є складеним типом" -#: parser/parse_target.c:789 +#: parser/parse_target.c:788 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "призначити значення полю \"%s\" стовпця \"%s\" не можна, тому, що в типі даних %s немає такого стовпця" -#: parser/parse_target.c:869 +#: parser/parse_target.c:877 #, c-format msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "індексоване присвоєння \"%s\" вимагає тип %s, але вираз має тип %s" -#: parser/parse_target.c:879 +#: parser/parse_target.c:887 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "підполе \"%s\" має тип %s, але вираз має тип %s" -#: parser/parse_target.c:1314 +#: parser/parse_target.c:1327 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * повинен посилатись на таблиці" @@ -18097,8 +18602,8 @@ msgstr "неправильне посилання %%TYPE (занадто баг msgid "type reference %s converted to %s" msgstr "посилання на тип %s перетворене на тип %s" -#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:395 -#: utils/cache/typcache.c:450 +#: parser/parse_type.c:278 parser/parse_type.c:813 utils/cache/typcache.c:397 +#: utils/cache/typcache.c:452 #, c-format msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" є лише оболонкою" @@ -18118,330 +18623,330 @@ msgstr "модифікатором типу повинна бути звичай msgid "invalid type name \"%s\"" msgstr "невірне ім'я типу \"%s\"" -#: parser/parse_utilcmd.c:264 +#: parser/parse_utilcmd.c:263 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "створити секціоновану таблицю в якості нащадка не можна" -#: parser/parse_utilcmd.c:589 +#: 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:668 parser/parse_utilcmd.c:680 -#: parser/parse_utilcmd.c:739 +#: 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 "несумісні оголошення NULL/NOT NULL для стовпця \"%s\" таблиці \"%s\"" -#: parser/parse_utilcmd.c:692 +#: parser/parse_utilcmd.c:714 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано декілька значень за замовчуванням" -#: parser/parse_utilcmd.c:709 +#: parser/parse_utilcmd.c:731 #, c-format msgid "identity columns are not supported on typed tables" msgstr "ідентифікаційні стовпці не підтримуються в типізованих таблицях" -#: parser/parse_utilcmd.c:713 +#: parser/parse_utilcmd.c:735 #, c-format msgid "identity columns are not supported on partitions" msgstr "ідентифікаційні стовпці не підтримуються з секціями" -#: parser/parse_utilcmd.c:722 +#: parser/parse_utilcmd.c:744 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" властивість identity вказана неодноразово" -#: parser/parse_utilcmd.c:752 +#: parser/parse_utilcmd.c:774 #, c-format msgid "generated columns are not supported on typed tables" msgstr "згенеровані стовпці не підтримуються в типізованих таблицях" -#: parser/parse_utilcmd.c:756 +#: parser/parse_utilcmd.c:778 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано декілька речень генерації" -#: parser/parse_utilcmd.c:774 parser/parse_utilcmd.c:889 +#: 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:783 parser/parse_utilcmd.c:899 +#: 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:828 +#: parser/parse_utilcmd.c:850 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано значення за замовчуванням і властивість identity" -#: parser/parse_utilcmd.c:836 +#: parser/parse_utilcmd.c:858 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано вираз за замовчуванням і вираз генерації" -#: parser/parse_utilcmd.c:844 +#: parser/parse_utilcmd.c:866 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано вираз ідентичності і вираз генерації" -#: parser/parse_utilcmd.c:909 +#: parser/parse_utilcmd.c:931 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "обмеження-виключення для сторонніх таблиць не підтримуються" -#: parser/parse_utilcmd.c:915 -#, c-format -msgid "exclusion constraints are not supported on partitioned tables" -msgstr "обмеження-виключення для секціонованих таблиць не підтримуються" - -#: parser/parse_utilcmd.c:980 +#: parser/parse_utilcmd.c:996 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE не підтримується при створенні сторонніх таблиць" -#: parser/parse_utilcmd.c:993 +#: parser/parse_utilcmd.c:1009 #, c-format msgid "relation \"%s\" is invalid in LIKE clause" msgstr "невірше відношення \"%s\" в реченні LIKE" -#: parser/parse_utilcmd.c:1750 parser/parse_utilcmd.c:1858 +#: parser/parse_utilcmd.c:1736 parser/parse_utilcmd.c:1844 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Індекс \"%s\" містить посилання на таблицю на весь рядок." -#: parser/parse_utilcmd.c:2245 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "у CREATE TABLE не можна використовувати існуючий індекс" -#: parser/parse_utilcmd.c:2265 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "індекс \"%s\" вже пов'язаний з обмеженням" -#: parser/parse_utilcmd.c:2286 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" не є унікальним індексом" -#: parser/parse_utilcmd.c:2287 parser/parse_utilcmd.c:2294 -#: parser/parse_utilcmd.c:2301 parser/parse_utilcmd.c:2378 +#: 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:2293 +#: parser/parse_utilcmd.c:2290 #, c-format msgid "index \"%s\" contains expressions" msgstr "індекс \"%s\" містить вирази" -#: parser/parse_utilcmd.c:2300 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" є частковим індексом" -#: parser/parse_utilcmd.c:2312 +#: parser/parse_utilcmd.c:2309 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" є індексом, що відкладається" -#: parser/parse_utilcmd.c:2313 +#: parser/parse_utilcmd.c:2310 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Створити обмеження, що не відкладається, використовуючи індекс, що відкладається, не можна." -#: parser/parse_utilcmd.c:2377 +#: parser/parse_utilcmd.c:2374 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "індекс \"%s\" номер стовпця %d не має поведінки сортування за замовчуванням" -#: parser/parse_utilcmd.c:2534 +#: parser/parse_utilcmd.c:2531 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "стовпець \"%s\" з'являється двічі в обмеженні первинного ключа" -#: parser/parse_utilcmd.c:2540 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "стовпець \"%s\" з'являється двічі в обмеженні унікальності" -#: parser/parse_utilcmd.c:2887 +#: 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:2959 +#: parser/parse_utilcmd.c:2943 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "вирази статистики можуть посилатися лише на таблицю, для якої збирається статистика" -#: parser/parse_utilcmd.c:3002 +#: parser/parse_utilcmd.c:2986 #, c-format msgid "rules on materialized views are not supported" msgstr "правила для матеріалізованих подань не підтримуються" -#: parser/parse_utilcmd.c:3062 +#: parser/parse_utilcmd.c:3046 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "в умовах WHERE правила не можуть містити посилання на інші зв'язки" -#: parser/parse_utilcmd.c:3134 +#: parser/parse_utilcmd.c:3118 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "правила з умовами WHERE можуть мати лише дії SELECT, INSERT, UPDATE або DELETE" -#: parser/parse_utilcmd.c:3152 parser/parse_utilcmd.c:3253 -#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1087 +#: parser/parse_utilcmd.c:3136 parser/parse_utilcmd.c:3237 +#: rewrite/rewriteHandler.c:538 rewrite/rewriteManip.c:1095 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "умовні оператори UNION/INTERSECT/EXCEPT не реалізовані" -#: parser/parse_utilcmd.c:3170 +#: parser/parse_utilcmd.c:3154 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "у правилі ON SELECT не можна використовувати OLD" -#: parser/parse_utilcmd.c:3174 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "у правилі ON SELECT не можна використовувати NEW" -#: parser/parse_utilcmd.c:3183 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "у правилі ON INSERT не можна використовувати OLD" -#: parser/parse_utilcmd.c:3189 +#: parser/parse_utilcmd.c:3173 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "у правилі ON DELETE не можна використовувати NEW" -#: parser/parse_utilcmd.c:3217 +#: parser/parse_utilcmd.c:3201 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "у запиті WITH не можна посилатися на OLD" -#: parser/parse_utilcmd.c:3224 +#: parser/parse_utilcmd.c:3208 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "у запиті WITH не можна посилатися на NEW" -#: parser/parse_utilcmd.c:3676 +#: parser/parse_utilcmd.c:3664 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "речення DEFERRABLE розташовано неправильно" -#: parser/parse_utilcmd.c:3681 parser/parse_utilcmd.c:3696 +#: 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:3691 +#: parser/parse_utilcmd.c:3679 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "речення NOT DEFERRABLE розташовано неправильно" -#: parser/parse_utilcmd.c:3704 parser/parse_utilcmd.c:3730 gram.y:5990 +#: parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 gram.y:6114 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "обмеження, оголошене як INITIALLY DEFERRED, повинно бути оголошене як DEFERRABLE" -#: parser/parse_utilcmd.c:3712 +#: parser/parse_utilcmd.c:3700 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "речення INITIALLY DEFERRED розташовано неправильно" -#: parser/parse_utilcmd.c:3717 parser/parse_utilcmd.c:3743 +#: 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:3738 +#: parser/parse_utilcmd.c:3726 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "речення INITIALLY IMMEDIATE розташовано неправильно" -#: parser/parse_utilcmd.c:3931 +#: parser/parse_utilcmd.c:3919 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "В CREATE вказана схема (%s), яка відрізняється від створюваної (%s)" -#: parser/parse_utilcmd.c:3966 +#: parser/parse_utilcmd.c:3954 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" не є секціонованою таблицею" -#: parser/parse_utilcmd.c:3973 +#: parser/parse_utilcmd.c:3961 #, c-format msgid "table \"%s\" is not partitioned" msgstr "таблиця \"%s\" не є секційною" -#: parser/parse_utilcmd.c:3980 +#: parser/parse_utilcmd.c:3968 #, c-format msgid "index \"%s\" is not partitioned" msgstr "індекс \"%s\" не є секціонованим" -#: parser/parse_utilcmd.c:4020 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "у геш-секціонованій таблиці не може бути розділу за замовчуванням" -#: parser/parse_utilcmd.c:4037 +#: parser/parse_utilcmd.c:4025 #, c-format msgid "invalid bound specification for a hash partition" msgstr "неприпустима вказівка границі для геш-секції" -#: parser/parse_utilcmd.c:4043 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:4050 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:4063 +#: parser/parse_utilcmd.c:4051 #, c-format msgid "invalid bound specification for a list partition" msgstr "нерипустима вказівка границі для секції по списку" -#: parser/parse_utilcmd.c:4116 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "invalid bound specification for a range partition" msgstr "неприпустима вказівка границі для секції діапазону" -#: parser/parse_utilcmd.c:4122 +#: parser/parse_utilcmd.c:4110 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "В FROM повинно вказуватися лише одне значення для стовпця секціонування" -#: parser/parse_utilcmd.c:4126 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "В TO повинно вказуватися лише одне значення для стовпця секціонування" -#: parser/parse_utilcmd.c:4240 +#: parser/parse_utilcmd.c:4228 #, c-format msgid "cannot specify NULL in range bound" msgstr "вказати NULL в діапазоні границі не можна" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4277 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "за кожною границею MAXVALUE повинні бути лише границі MAXVALUE" -#: parser/parse_utilcmd.c:4296 +#: parser/parse_utilcmd.c:4284 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "за кожною границею MINVALUE повинні бути лише границі MINVALUE" -#: parser/parse_utilcmd.c:4339 +#: parser/parse_utilcmd.c:4327 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "вказане значення не можна привести до типу %s для стовпця \"%s\"" @@ -18454,12 +18959,12 @@ msgstr "UESCAPE повинен відстежуватись простим лі msgid "invalid Unicode escape character" msgstr "неприпустимий символ спеціального коду Unicode" -#: parser/parser.c:347 scan.l:1390 +#: parser/parser.c:347 scan.l:1393 #, c-format msgid "invalid Unicode escape value" msgstr "неприпустиме значення спеціального коду Unicode" -#: parser/parser.c:494 utils/adt/varlena.c:6505 scan.l:701 +#: parser/parser.c:494 utils/adt/varlena.c:6640 scan.l:716 #, c-format msgid "invalid Unicode escape" msgstr "неприпустимий спеціальний код Unicode" @@ -18469,8 +18974,8 @@ msgstr "неприпустимий спеціальний код Unicode" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Спеціальні символи Unicode повинні бути \\XXXX або \\+XXXXXX." -#: parser/parser.c:523 utils/adt/varlena.c:6530 scan.l:662 scan.l:678 -#: scan.l:694 +#: parser/parser.c:523 utils/adt/varlena.c:6665 scan.l:677 scan.l:693 +#: scan.l:709 #, c-format msgid "invalid Unicode surrogate pair" msgstr "неприпустима сурогатна пара Unicode" @@ -18480,146 +18985,140 @@ msgstr "неприпустима сурогатна пара Unicode" msgid "identifier \"%s\" will be truncated to \"%.*s\"" msgstr "ідентифікатор \"%s\" буде скорочено до \"%.*s\"" -#: partitioning/partbounds.c:2921 +#: partitioning/partbounds.c:2920 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "існують конфлікти між розділом \"%s\" та існуючим розділом за замовчуванням \"%s\"" -#: partitioning/partbounds.c:2973 partitioning/partbounds.c:2992 -#: partitioning/partbounds.c:3014 +#: partitioning/partbounds.c:2972 partitioning/partbounds.c:2991 +#: partitioning/partbounds.c:3013 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "модуль кожної геш-секції повинен бути дільником наступних більших модулів" -#: partitioning/partbounds.c:2974 partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:2973 partitioning/partbounds.c:3014 #, c-format msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." msgstr "Новий модуль %d не є дільником %d, поточний модуль розділу \"%s\"." -#: partitioning/partbounds.c:2993 +#: partitioning/partbounds.c:2992 #, c-format msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "Новий модуль %d не ділиться на %d, поточний модуль розділу \"%s\"." -#: partitioning/partbounds.c:3128 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "для секції \"%s\" вказані границі, які утворюють пустий діапазон" -#: partitioning/partbounds.c:3130 +#: partitioning/partbounds.c:3129 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "Вказана нижня границя %s більша або дорівнює верхній границі %s." -#: 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 "пропущено сканування зовнішньої таблиці \"%s\" яка є секцією секції за замовчуванням \"%s\"" -#: 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 "стовпець %d ключа секціонування має тип %s, але для нього вказане значення типу %s" -#: 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 "стовпець %d ключа секціонування має тип \"%s\", але для нього вказано значення типу \"%s\"" -#: port/pg_sema.c:209 port/pg_shmem.c:708 port/posix_sema.c:209 -#: port/sysv_sema.c:323 port/sysv_shmem.c:708 +#: 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 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "не вдалося встановити дані каталогу \"%s\": %m" -#: port/pg_shmem.c:223 port/sysv_shmem.c:223 +#: port/pg_shmem.c:224 port/sysv_shmem.c:224 #, c-format msgid "could not create shared memory segment: %m" msgstr "не вдалося створити сегмент спільної пам'яті: %m" -#: port/pg_shmem.c:224 port/sysv_shmem.c:224 +#: port/pg_shmem.c:225 port/sysv_shmem.c:225 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "Помилка в системному виклику shmget (ключ=%lu, розмір=%zu, 0%o)." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format -msgid "" -"This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" "The PostgreSQL documentation contains more information about shared memory configuration." -msgstr "" -"Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує параметр SHMMAX вашого ядра, або можливо що він менший за параметр SHMMIN вашого ядра.\n" +msgstr "Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує параметр SHMMAX вашого ядра, або можливо що він менший за параметр SHMMIN вашого ядра.\n" "Більше інформації про налаштування спільної пам'яті міститься в інструкції PostgreSQL." -#: port/pg_shmem.c:235 port/sysv_shmem.c:235 +#: port/pg_shmem.c:236 port/sysv_shmem.c:236 #, c-format -msgid "" -"This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" "The PostgreSQL documentation contains more information about shared memory configuration." -msgstr "" -"Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує параметр SHMALL вашого ядра. Можливо, вам слід переналаштувати ваше ядро, збільшивши параметр SHMALL.\n" +msgstr "Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує параметр SHMALL вашого ядра. Можливо, вам слід переналаштувати ваше ядро, збільшивши параметр SHMALL.\n" "Більше інформації про налаштування спільної пам'яті міститься в інструкції PostgreSQL." -#: port/pg_shmem.c:241 port/sysv_shmem.c:241 +#: port/pg_shmem.c:242 port/sysv_shmem.c:242 #, c-format -msgid "" -"This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" +msgid "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" "The PostgreSQL documentation contains more information about shared memory configuration." -msgstr "" -"Ця помилка НЕ означає, що на диску немає місця. Ймовірніше за все, були зайняті всі доступні ID спільної пам'яті, в такому випадку вам потрібно підвищити параметр SHMMNI у вашому ядрі, або перевищено граничний розмір спільної пам'яті.\n" +msgstr "Ця помилка НЕ означає, що на диску немає місця. Ймовірніше за все, були зайняті всі доступні ID спільної пам'яті, в такому випадку вам потрібно підвищити параметр SHMMNI у вашому ядрі, або перевищено граничний розмір спільної пам'яті.\n" "Детальна інформація про налаштування спільної пам'яті міститься в інструкції PostgreSQL." -#: port/pg_shmem.c:583 port/sysv_shmem.c:583 port/win32_shmem.c:641 +#: port/pg_shmem.c:584 port/sysv_shmem.c:584 port/win32_shmem.c:646 #, c-format -msgid "huge_page_size must be 0 on this platform." -msgstr "huge_page_size повинен бути 0 на цій платформі." +msgid "\"huge_page_size\" must be 0 on this platform." +msgstr "" -#: port/pg_shmem.c:646 port/sysv_shmem.c:646 +#: port/pg_shmem.c:655 port/sysv_shmem.c:655 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "не вдалося показати анонімну спільну пам'ять: %m" -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:657 port/sysv_shmem.c:657 #, c-format -msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." -msgstr "Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує об'єм доступної фізичної або віртуальної пам'яті або гігантских сторінок. Щоб зменшити розмір запиту (поточний: %zu байтів), зменшіть використання спільної пам'яті PostgreSQL, можливо зменшив shared_buffers або max_connections." +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing \"shared_buffers\" or \"max_connections\"." +msgstr "" -#: port/pg_shmem.c:716 port/sysv_shmem.c:716 +#: port/pg_shmem.c:725 port/sysv_shmem.c:725 #, c-format msgid "huge pages not supported on this platform" msgstr "величезні сторінки на цій плтаформі не підтримуються" -#: port/pg_shmem.c:723 port/sysv_shmem.c:723 +#: port/pg_shmem.c:732 port/sysv_shmem.c:732 #, c-format -msgid "huge pages not supported with the current shared_memory_type setting" -msgstr "величезні сторінки не підтримуються з поточним параметром shared_memory_type" +msgid "huge pages not supported with the current \"shared_memory_type\" setting" +msgstr "" -#: port/pg_shmem.c:783 port/sysv_shmem.c:783 utils/init/miscinit.c:1358 +#: port/pg_shmem.c:798 port/sysv_shmem.c:798 utils/init/miscinit.c:1347 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "раніше виділений блок спільної пам'яті (ключ %lu, ідентифікатор %lu) все ще використовується" -#: port/pg_shmem.c:786 port/sysv_shmem.c:786 utils/init/miscinit.c:1360 +#: port/pg_shmem.c:801 port/sysv_shmem.c:801 utils/init/miscinit.c:1349 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Припинити будь-які старі серверні процеси, пов'язані з каталогом даних \"%s\"." @@ -18636,12 +19135,9 @@ msgstr "Помилка системного виклику semget(%lu, %d, 0%o). #: port/sysv_sema.c:125 #, 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" +msgid "This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its \"max_connections\" parameter.\n" "The PostgreSQL documentation contains more information about configuring your system for PostgreSQL." msgstr "" -"Ця помилка НЕ означає, що на диску немає місця. Ймовірніше за все перевищено ліміт числа встановлених семафорів (SEMMNI), або загального числа семафорів (SEMMNS) в системі. Вам потрібно збільшити відповідний параметр ядра. Інший спосіб - зменшити споживання PostgreSQL в семафорах, зменшивши параметр max_connections.\n" -"Більше інформації про налаштування вашої системи для PostgreSQL міститься в інструкції PostgreSQL." #: port/sysv_sema.c:155 #, c-format @@ -18768,97 +19264,87 @@ msgstr "Помилка в системному виклику DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Помилка в системному виклику MapViewOfFileEx." -#: postmaster/autovacuum.c:417 -#, c-format -msgid "could not fork autovacuum launcher process: %m" -msgstr "не вдалося породити процес запуску автоочистки: %m" - -#: postmaster/autovacuum.c:764 +#: postmaster/autovacuum.c:686 #, c-format msgid "autovacuum worker took too long to start; canceled" msgstr "старт процеса автовакуума зайняв забагато часу; скасовано" -#: postmaster/autovacuum.c:1489 -#, c-format -msgid "could not fork autovacuum worker process: %m" -msgstr "не вдалося породити робочий процес автоочитски: %m" - -#: postmaster/autovacuum.c:2334 +#: postmaster/autovacuum.c:2199 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "автоочистка: видалення застарілої тимчасової таблиці \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2570 +#: postmaster/autovacuum.c:2435 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматична очистка таблиці \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2573 +#: postmaster/autovacuum.c:2438 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматичний аналіз таблиці \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2767 +#: postmaster/autovacuum.c:2632 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "обробка робочого введення для відношення \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3381 +#: postmaster/autovacuum.c:3250 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистку не запущено через неправильну конфігурацію" -#: postmaster/autovacuum.c:3382 +#: postmaster/autovacuum.c:3251 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Активувати параметр \"track_counts\"." -#: postmaster/bgworker.c:259 +#: postmaster/bgworker.c:260 #, c-format msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" msgstr "несумісний стан фонового процесу (max_worker_processes=%d, total_slots=%d)" -#: postmaster/bgworker.c:669 +#: postmaster/bgworker.c:651 #, c-format msgid "background worker \"%s\": background workers without shared memory access are not supported" msgstr "фоновий виконавець \"%s\": фонові виконавці без доступу до спільної пам'яті не підтримуються" -#: postmaster/bgworker.c:680 +#: postmaster/bgworker.c:662 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "фоновий виконавець \"%s\": не може запитувати доступ до бази даних, якщо його запущено при старті адміністратора поштового сервісу" -#: postmaster/bgworker.c:694 +#: postmaster/bgworker.c:676 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "фоновий виконавець \"%s\": неприпустимий інтервал перезавантаження" -#: postmaster/bgworker.c:709 +#: postmaster/bgworker.c:691 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "фоновий виконавець\"%s\": паралельні виконавці не можуть бути налаштовані для перезавантаження" -#: postmaster/bgworker.c:733 tcop/postgres.c:3255 +#: postmaster/bgworker.c:715 tcop/postgres.c:3312 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершення фонового процесу \"%s\" по команді адміністратора" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:888 #, c-format -msgid "background worker \"%s\": must be registered in shared_preload_libraries" -msgstr "фоновий процес \"%s\": повинен бути зареєстрований в shared_preload_libraries" +msgid "background worker \"%s\": must be registered in \"shared_preload_libraries\"" +msgstr "" -#: postmaster/bgworker.c:902 +#: postmaster/bgworker.c:911 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "фоновий процес \"%s\": лише динамічні фонові процеси можуть запитувати сповіщення" -#: postmaster/bgworker.c:917 +#: postmaster/bgworker.c:926 #, c-format msgid "too many background workers" msgstr "занадто багато фонових процесів" -#: postmaster/bgworker.c:918 +#: postmaster/bgworker.c:927 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." @@ -18867,12 +19353,12 @@ msgstr[1] "Максимальне можливе число фонових пр msgstr[2] "Максимальне можливе число фонових процесів при поточних параметрах: %d." msgstr[3] "Максимальне можливе число фонових процесів при поточних параметрах: %d." -#: postmaster/bgworker.c:922 +#: 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 "" -#: postmaster/checkpointer.c:431 +#: postmaster/checkpointer.c:441 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -18881,854 +19367,769 @@ msgstr[1] "контрольні точки відбуваються занадт msgstr[2] "контрольні точки відбуваються занадто часто (через %d сек.)" msgstr[3] "контрольні точки відбуваються занадто часто (через %d сек.)" -#: postmaster/checkpointer.c:435 -#, c-format -msgid "Consider increasing the configuration parameter \"max_wal_size\"." -msgstr "Можливо, слід збільшити параметр конфігурації \"max_wal_size\"." - -#: postmaster/checkpointer.c:1059 +#: postmaster/checkpointer.c:1067 #, c-format msgid "checkpoint request failed" msgstr "збій при запиті контрольної точки" -#: postmaster/checkpointer.c:1060 +#: postmaster/checkpointer.c:1068 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Для деталей, зверніться до останніх повідомлень в протоколі серверу." -#: postmaster/pgarch.c:416 +#: postmaster/launch_backend.c:381 #, c-format -msgid "archive_mode enabled, yet archiving is not configured" -msgstr "archive_mode активовано, але архівування не налаштовано" +msgid "could not execute server process \"%s\": %m" +msgstr "не вдалося виконати серверні процеси \"%s\":%m" -#: postmaster/pgarch.c:438 +#: postmaster/launch_backend.c:434 #, c-format -msgid "removed orphan archive status file \"%s\"" -msgstr "видалено залишковий файл статусу архіву \"%s\"" +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "не вдалося створити відображення файлу параметру внутрішнього сервера: код помилки %lu" + +#: postmaster/launch_backend.c:442 +#, c-format +msgid "could not map backend parameter memory: error code %lu" +msgstr "не вдалося відобразити пам'ять параметру внутрішнього сервера: код помилки %lu" + +#: postmaster/launch_backend.c:459 +#, c-format +msgid "subprocess command line too long" +msgstr "командний рядок підпроцесу занадто довгий" + +#: postmaster/launch_backend.c:477 +#, c-format +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "помилка виклику CreateProcess(): %m (код помилки %lu)" + +#: 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:508 +#, c-format +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "не вдалося закрити покажчик файлу параметру внутрішнього сервера: код помилки %lu" + +#: postmaster/launch_backend.c:530 +#, c-format +msgid "giving up after too many tries to reserve shared memory" +msgstr "кількість повторних спроб резервування спільної пам'яті досягло межі" + +#: postmaster/launch_backend.c:531 +#, c-format +msgid "This might be caused by ASLR or antivirus software." +msgstr "Це може бути викликано антивірусним програмним забезпеченням або ASLR." + +#: postmaster/launch_backend.c:834 +#, c-format +msgid "could not duplicate socket %d for use in backend: error code %d" +msgstr "не вдалося продублювати сокет %d для використання: код помилки %d" + +#: postmaster/launch_backend.c:866 +#, c-format +msgid "could not create inherited socket: error code %d\n" +msgstr "не вдалося створити успадкований сокет: код помилки %d\n" + +#: postmaster/launch_backend.c:895 +#, c-format +msgid "could not open backend variables file \"%s\": %m\n" +msgstr "" + +#: postmaster/launch_backend.c:901 +#, c-format +msgid "could not read from backend variables file \"%s\": %m\n" +msgstr "" -#: postmaster/pgarch.c:448 +#: postmaster/launch_backend.c:912 +#, c-format +msgid "could not read startup data from backend variables file \"%s\": %m\n" +msgstr "" + +#: postmaster/launch_backend.c:924 +#, c-format +msgid "could not remove file \"%s\": %m\n" +msgstr "" + +#: 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:959 +#, c-format +msgid "could not unmap view of backend variables: error code %lu\n" +msgstr "не вдалося вимкнути відображення файлу серверних змінних: код помилки %lu\n" + +#: postmaster/launch_backend.c:966 +#, c-format +msgid "could not close handle to backend parameter variables: error code %lu\n" +msgstr "не вдалося закрити покажчик файлу серверних змінних: код помилки %lu\n" + +#: postmaster/pgarch.c:428 +#, c-format +msgid "\"archive_mode\" enabled, yet archiving is not configured" +msgstr "" + +#: postmaster/pgarch.c:452 +#, c-format +msgid "removed orphan archive status file \"%s\"" +msgstr "видалено залишковий файл статусу архіву \"%s\"" + +#: postmaster/pgarch.c:462 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "видалення залишкового файлу статусу архіву \"%s\" не вдалося занадто багато разів, пізніже спробуємо знову" -#: postmaster/pgarch.c:484 +#: postmaster/pgarch.c:498 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "архівація файлу випереджувальног журналювання \"%s\" не виконана багато разів, наступна спроба буде пізніже" -#: postmaster/pgarch.c:791 postmaster/pgarch.c:830 +#: postmaster/pgarch.c:879 postmaster/pgarch.c:918 #, c-format -msgid "both archive_command and archive_library set" -msgstr "встановлено команду archive_command і archive_library" +msgid "both \"archive_command\" and \"archive_library\" set" +msgstr "" -#: postmaster/pgarch.c:792 postmaster/pgarch.c:831 +#: postmaster/pgarch.c:880 postmaster/pgarch.c:919 #, c-format -msgid "Only one of archive_command, archive_library may be set." -msgstr "Можливо встановити лише одну з archive_command, archive_library." +msgid "Only one of \"archive_command\", \"archive_library\" may be set." +msgstr "" -#: postmaster/pgarch.c:809 +#: postmaster/pgarch.c:897 #, c-format msgid "restarting archiver process because value of \"archive_library\" was changed" msgstr "перезапуск процесу архіватора, оскільки значення \"archive_library\" було змінено" -#: postmaster/pgarch.c:846 +#: postmaster/pgarch.c:934 #, c-format msgid "archive modules have to define the symbol %s" msgstr "архівні модулі повинні визначити символ %s" -#: postmaster/pgarch.c:852 +#: postmaster/pgarch.c:940 #, c-format msgid "archive modules must register an archive callback" msgstr "модулі архіву повинні реєструвати зворотний виклик архіву" -#: postmaster/postmaster.c:759 +#: postmaster/postmaster.c:661 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: неприпустимий аргумент для параметру -f: \"%s\"\n" -#: postmaster/postmaster.c:832 +#: postmaster/postmaster.c:734 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: неприпустимий аргумент для параметру -t: \"%s\"\n" -#: postmaster/postmaster.c:855 +#: postmaster/postmaster.c:757 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: неприпустимий аргумент: \"%s\"\n" -#: postmaster/postmaster.c:923 +#: postmaster/postmaster.c:825 #, 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) плюс reserved_connections (%d) має бути меншим за max_connections (%d)\n" +msgid "%s: \"superuser_reserved_connections\" (%d) plus \"reserved_connections\" (%d) must be less than \"max_connections\" (%d)\n" +msgstr "" -#: postmaster/postmaster.c:931 +#: postmaster/postmaster.c:833 #, c-format -msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" -msgstr "WAL архіватор не може бути активованим, коли wal_level \"мінімальний\"" +msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" +msgstr "" -#: postmaster/postmaster.c:934 +#: postmaster/postmaster.c:836 #, c-format -msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" -msgstr "Потокове передавання WAL (max_wal_senders > 0) вимагає wal_level \"replica\" або \"logical\"" +msgid "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be \"replica\" or \"logical\"" +msgstr "Потокове передавання WAL (\"max_wal_senders\" > 0) вимагає \"wal_level\" \"replica\" або \"logical\"" -#: postmaster/postmaster.c:942 +#: postmaster/postmaster.c:839 +#, c-format +msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" +msgstr "неможливо підсумувати WAL, якщо \"wal_level\" дорівнє \"minimal\"" + +#: postmaster/postmaster.c:847 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: неприпустимі таблиці маркерів часу, будь-ласка виправіть\n" -#: postmaster/postmaster.c:1099 +#: postmaster/postmaster.c:1004 #, c-format msgid "could not create I/O completion port for child queue" msgstr "не вдалося створити завершений порт вводу-виводу для черги дітей" -#: postmaster/postmaster.c:1175 +#: postmaster/postmaster.c:1069 #, c-format msgid "ending log output to stderr" msgstr "завершення запису виводу Stderr" -#: postmaster/postmaster.c:1176 +#: postmaster/postmaster.c:1070 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "В майбутньому запис виведення буде записуватися в призначення \"%s\"." -#: postmaster/postmaster.c:1187 +#: postmaster/postmaster.c:1081 #, c-format msgid "starting %s" msgstr "початок %s" -#: postmaster/postmaster.c:1239 +#: postmaster/postmaster.c:1143 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не вдалося створити сокет прослуховування для \"%s\"" -#: postmaster/postmaster.c:1245 +#: postmaster/postmaster.c:1149 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не вдалося створити TCP/IP сокети" -#: postmaster/postmaster.c:1277 +#: postmaster/postmaster.c:1181 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "Помилка DNSServiceRegister(): код помилки %ld" -#: postmaster/postmaster.c:1328 +#: postmaster/postmaster.c:1234 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не вдалося створити Unix-domain сокет в каталозі \"%s\"" -#: postmaster/postmaster.c:1334 +#: postmaster/postmaster.c:1240 #, c-format msgid "could not create any Unix-domain sockets" msgstr "не вдалося створити Unix-domain сокети" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1251 #, c-format msgid "no socket created for listening" msgstr "не створено жодного сокету для прослуховування" -#: postmaster/postmaster.c:1376 +#: postmaster/postmaster.c:1282 #, c-format -msgid "%s: could not change permissions of external PID file \"%s\": %s\n" -msgstr "%s: не вдалося змінити дозволи зовнішнього PID файлу \"%s\": %s\n" +msgid "%s: could not change permissions of external PID file \"%s\": %m\n" +msgstr "%s: не вдалося змінити дозволи зовнішнього PID файлу \"%s\": %m\n" -#: postmaster/postmaster.c:1380 +#: postmaster/postmaster.c:1286 #, c-format -msgid "%s: could not write external PID file \"%s\": %s\n" -msgstr "%s: не вдалося записати зовнішній PID файл \"%s\": %s\n" +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:1408 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1314 utils/init/postinit.c:221 #, c-format msgid "could not load %s" msgstr "не вдалося завантажити %s" -#: postmaster/postmaster.c:1434 +#: postmaster/postmaster.c:1340 #, c-format msgid "postmaster became multithreaded during startup" msgstr "адміністратор поштового сервера став багатопотоковим під час запуску" -#: postmaster/postmaster.c:1435 +#: postmaster/postmaster.c:1341 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Встановити в змінній середовища LC_ALL дійісну локаль." -#: postmaster/postmaster.c:1536 +#: postmaster/postmaster.c:1440 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: не вдалося знайти свій власний шлях для виконання" -#: postmaster/postmaster.c:1543 +#: postmaster/postmaster.c:1447 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: не вдалося знайти відповідний postgres файл, що виконується" -#: postmaster/postmaster.c:1566 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1470 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 "Це може означати неповне встановлення PostgreSQL, або те, що файл \"%s\" було переміщено з його правильного розташування." -#: postmaster/postmaster.c:1593 +#: postmaster/postmaster.c:1497 #, c-format -msgid "" -"%s: could not find the database system\n" +msgid "%s: could not find the database system\n" "Expected to find it in the directory \"%s\",\n" -"but could not open file \"%s\": %s\n" -msgstr "" -"%s: не вдалося знайти систему бази даних\n" +"but could not open file \"%s\": %m\n" +msgstr "%s: не вдалося знайти систему бази даних\n" "Очікувалося знайти її у каталозі \"%s\",\n" -"але не вдалося відкрити файл \"%s\": %s\n" +"але не вдалося відкрити файл \"%s\": %m\n" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1890 +#: postmaster/postmaster.c:1787 #, c-format msgid "issuing %s to recalcitrant children" msgstr "надсилання %s непокірливим дітям" -#: postmaster/postmaster.c:1912 +#: postmaster/postmaster.c:1809 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "виконується негайне припинення роботи через неприпустимий файл блокування каталогу даних" -#: postmaster/postmaster.c:1987 postmaster/postmaster.c:2015 -#, c-format -msgid "incomplete startup packet" -msgstr "неповний стартовий пакет" - -#: postmaster/postmaster.c:1999 postmaster/postmaster.c:2032 -#, c-format -msgid "invalid length of startup packet" -msgstr "неприпустима довжина стартового пакету" - -#: postmaster/postmaster.c:2061 -#, c-format -msgid "failed to send SSL negotiation response: %m" -msgstr "помилка надсилання протоколу SSL в процесі відповіді зв'язування: %m" - -#: postmaster/postmaster.c:2079 -#, c-format -msgid "received unencrypted data after SSL request" -msgstr "отримані незашифровані дані після запиту SSL" - -#: postmaster/postmaster.c:2080 postmaster/postmaster.c:2124 -#, c-format -msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." -msgstr "Це може бути або помилкою клієнтського програмного забезпечення, або доказом спроби техносферної атаки." - -#: postmaster/postmaster.c:2105 -#, c-format -msgid "failed to send GSSAPI negotiation response: %m" -msgstr "помилка надсилання GSSAPI в процесі відповіді зв'язування: %m" - -#: postmaster/postmaster.c:2123 -#, c-format -msgid "received unencrypted data after GSSAPI encryption request" -msgstr "отримані незашифровані дані після запиту шифрування GSSAPI" - -#: postmaster/postmaster.c:2147 -#, c-format -msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" -msgstr "протокол інтерфейсу, що не підтримується, %u.%u: сервер підтримує %u.0 до %u.%u" - -#: postmaster/postmaster.c:2214 -#, c-format -msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." -msgstr "Дійсні значення: \"false\", 0, \"true\", 1, \"database\"." - -#: postmaster/postmaster.c:2255 -#, c-format -msgid "invalid startup packet layout: expected terminator as last byte" -msgstr "неприпустима структура стартового пакету: останнім байтом очікувався термінатор" - -#: postmaster/postmaster.c:2272 -#, c-format -msgid "no PostgreSQL user name specified in startup packet" -msgstr "не вказано жодного ім'я користувача PostgreSQL у стартовому пакеті" - -#: postmaster/postmaster.c:2336 -#, c-format -msgid "the database system is starting up" -msgstr "система бази даних запускається" - -#: postmaster/postmaster.c:2342 -#, c-format -msgid "the database system is not yet accepting connections" -msgstr "система бази даних ще не приймає підключення" - -#: postmaster/postmaster.c:2343 -#, c-format -msgid "Consistent recovery state has not been yet reached." -msgstr "Узгодженого стану відновлення ще не досягнуто." - -#: postmaster/postmaster.c:2347 -#, c-format -msgid "the database system is not accepting connections" -msgstr "система бази даних не приймає підключення" - -#: postmaster/postmaster.c:2348 -#, c-format -msgid "Hot standby mode is disabled." -msgstr "Режим Hot standby вимкнений." - -#: postmaster/postmaster.c:2353 -#, c-format -msgid "the database system is shutting down" -msgstr "система бази даних завершує роботу" - -#: postmaster/postmaster.c:2358 -#, c-format -msgid "the database system is in recovery mode" -msgstr "система бази даних у режимі відновлення" - -#: postmaster/postmaster.c:2363 storage/ipc/procarray.c:491 -#: storage/ipc/sinvaladt.c:306 storage/lmgr/proc.c:353 -#, c-format -msgid "sorry, too many clients already" -msgstr "вибачте, вже забагато клієнтів" - -#: postmaster/postmaster.c:2450 +#: postmaster/postmaster.c:1872 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильний ключ в запиті скасування процесу %d" -#: postmaster/postmaster.c:2462 +#: postmaster/postmaster.c:1884 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d в запиті на скасування не відповідає жодному процесу" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2105 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "отримано SIGHUP, поновлення файлів конфігурацій" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2753 postmaster/postmaster.c:2757 +#: postmaster/postmaster.c:2133 postmaster/postmaster.c:2137 #, c-format msgid "%s was not reloaded" msgstr "%s не було перезавантажено" -#: postmaster/postmaster.c:2767 +#: postmaster/postmaster.c:2147 #, c-format msgid "SSL configuration was not reloaded" msgstr "Конфігурація протоколу SSL не була перезавантажена" -#: postmaster/postmaster.c:2857 +#: postmaster/postmaster.c:2233 #, c-format msgid "received smart shutdown request" msgstr "отримано smart запит на завершення роботи" -#: postmaster/postmaster.c:2898 +#: postmaster/postmaster.c:2274 #, c-format msgid "received fast shutdown request" msgstr "отримано швидкий запит на завершення роботи" -#: postmaster/postmaster.c:2916 +#: postmaster/postmaster.c:2292 #, c-format msgid "aborting any active transactions" msgstr "переривання будь-яких активних транзакцій" -#: postmaster/postmaster.c:2940 +#: postmaster/postmaster.c:2316 #, c-format msgid "received immediate shutdown request" msgstr "отримано запит на негайне завершення роботи" -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:2388 #, c-format msgid "shutdown at recovery target" msgstr "завершення роботи при відновленні мети" -#: postmaster/postmaster.c:3034 postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:2406 postmaster/postmaster.c:2442 msgid "startup process" msgstr "стартовий процес" -#: postmaster/postmaster.c:3037 +#: postmaster/postmaster.c:2409 #, c-format msgid "aborting startup due to startup process failure" msgstr "переривання запуску через помилку в стартовому процесі" -#: postmaster/postmaster.c:3110 +#: postmaster/postmaster.c:2484 #, c-format msgid "database system is ready to accept connections" msgstr "система бази даних готова до отримання підключення" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:2505 msgid "background writer process" msgstr "процес фонового запису" -#: postmaster/postmaster.c:3178 +#: postmaster/postmaster.c:2552 msgid "checkpointer process" msgstr "процес контрольних точок" -#: postmaster/postmaster.c:3194 +#: postmaster/postmaster.c:2568 msgid "WAL writer process" msgstr "Процес запису WAL" -#: postmaster/postmaster.c:3209 +#: postmaster/postmaster.c:2583 msgid "WAL receiver process" msgstr "Процес отримання WAL" -#: postmaster/postmaster.c:3224 +#: postmaster/postmaster.c:2597 +msgid "WAL summarizer process" +msgstr "Процес підсумовування WAL" + +#: postmaster/postmaster.c:2612 msgid "autovacuum launcher process" msgstr "процес запуску автоочистки" -#: postmaster/postmaster.c:3242 +#: postmaster/postmaster.c:2630 msgid "archiver process" msgstr "процес архівації" -#: postmaster/postmaster.c:3255 +#: postmaster/postmaster.c:2643 msgid "system logger process" msgstr "процес системного журналювання" -#: postmaster/postmaster.c:3312 +#: postmaster/postmaster.c:2660 +msgid "slot sync worker process" +msgstr "робочий процес синхронізації слоту" + +#: postmaster/postmaster.c:2716 #, c-format msgid "background worker \"%s\"" msgstr "фоновий виконавець \"%s\"" -#: postmaster/postmaster.c:3391 postmaster/postmaster.c:3411 -#: postmaster/postmaster.c:3418 postmaster/postmaster.c:3436 +#: postmaster/postmaster.c:2795 postmaster/postmaster.c:2815 +#: postmaster/postmaster.c:2822 postmaster/postmaster.c:2840 msgid "server process" msgstr "процес сервера" -#: postmaster/postmaster.c:3490 +#: postmaster/postmaster.c:2894 #, 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:3665 +#: postmaster/postmaster.c:3081 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершився з кодом виходу %d" -#: postmaster/postmaster.c:3667 postmaster/postmaster.c:3679 -#: postmaster/postmaster.c:3689 postmaster/postmaster.c:3700 +#: postmaster/postmaster.c:3083 postmaster/postmaster.c:3095 +#: postmaster/postmaster.c:3105 postmaster/postmaster.c:3116 #, 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:3676 +#: postmaster/postmaster.c:3092 #, 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:3686 +#: postmaster/postmaster.c:3102 #, 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:3698 +#: postmaster/postmaster.c:3114 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершився з нерозпізнаним статусом %d" -#: postmaster/postmaster.c:3906 +#: postmaster/postmaster.c:3330 #, c-format msgid "abnormal database system shutdown" msgstr "ненормальне завершення роботи системи бази даних" -#: postmaster/postmaster.c:3932 +#: postmaster/postmaster.c:3356 #, c-format msgid "shutting down due to startup process failure" msgstr "завершення роботи через помилку в стартовому процесі" -#: postmaster/postmaster.c:3938 +#: postmaster/postmaster.c:3362 #, c-format -msgid "shutting down because restart_after_crash is off" -msgstr "завершення роботи, тому що restart_after_crash вимкнено" +msgid "shutting down because \"restart_after_crash\" is off" +msgstr "завершення роботи, тому що \"restart_after_crash\" вимкнено" -#: postmaster/postmaster.c:3950 +#: postmaster/postmaster.c:3374 #, c-format msgid "all server processes terminated; reinitializing" msgstr "усі серверні процеси перервано; повторна ініціалізація" -#: postmaster/postmaster.c:4144 postmaster/postmaster.c:5462 -#: postmaster/postmaster.c:5860 +#: postmaster/postmaster.c:3573 postmaster/postmaster.c:3983 +#: postmaster/postmaster.c:4372 #, c-format msgid "could not generate random cancel key" msgstr "не вдалося згенерувати випадковий ключ скасування" -#: postmaster/postmaster.c:4206 +#: postmaster/postmaster.c:3606 #, c-format msgid "could not fork new process for connection: %m" msgstr "не вдалося породити нові процеси для з'єднання: %m" -#: postmaster/postmaster.c:4248 +#: postmaster/postmaster.c:3648 msgid "could not fork new process for connection: " msgstr "не вдалося породити нові процеси для з'єднання: " -#: postmaster/postmaster.c:4354 -#, c-format -msgid "connection received: host=%s port=%s" -msgstr "з'єднання отримано: хост=%s порт=%s" - -#: postmaster/postmaster.c:4359 -#, c-format -msgid "connection received: host=%s" -msgstr "з'єднання отримано: хост=%s" - -#: postmaster/postmaster.c:4596 -#, c-format -msgid "could not execute server process \"%s\": %m" -msgstr "не вдалося виконати серверні процеси \"%s\":%m" - -#: postmaster/postmaster.c:4654 -#, c-format -msgid "could not create backend parameter file mapping: error code %lu" -msgstr "не вдалося створити відображення файлу параметру внутрішнього сервера: код помилки %lu" - -#: postmaster/postmaster.c:4663 -#, c-format -msgid "could not map backend parameter memory: error code %lu" -msgstr "не вдалося відобразити пам'ять параметру внутрішнього сервера: код помилки %lu" - -#: postmaster/postmaster.c:4690 -#, c-format -msgid "subprocess command line too long" -msgstr "командний рядок підпроцесу занадто довгий" - -#: postmaster/postmaster.c:4708 -#, c-format -msgid "CreateProcess() call failed: %m (error code %lu)" -msgstr "помилка виклику CreateProcess(): %m (код помилки %lu)" - -#: postmaster/postmaster.c:4735 -#, c-format -msgid "could not unmap view of backend parameter file: error code %lu" -msgstr "не вдалося вимкнути відображення файлу параметру внутрішнього сервера: код помилки %lu" - -#: postmaster/postmaster.c:4739 -#, c-format -msgid "could not close handle to backend parameter file: error code %lu" -msgstr "не вдалося закрити покажчик файлу параметру внутрішнього сервера: код помилки %lu" - -#: postmaster/postmaster.c:4761 -#, c-format -msgid "giving up after too many tries to reserve shared memory" -msgstr "кількість повторних спроб резервування спільної пам'яті досягло межі" - -#: postmaster/postmaster.c:4762 -#, c-format -msgid "This might be caused by ASLR or antivirus software." -msgstr "Це може бути викликано антивірусним програмним забезпеченням або ASLR." - -#: postmaster/postmaster.c:4935 -#, c-format -msgid "SSL configuration could not be loaded in child process" -msgstr "Не вдалося завантажити конфігурацію SSL в дочірній процес" - -#: postmaster/postmaster.c:5060 +#: postmaster/postmaster.c:3682 #, c-format msgid "Please report this to <%s>." msgstr "Будь-ласка повідомте про це <%s>." -#: postmaster/postmaster.c:5128 +#: postmaster/postmaster.c:3750 #, c-format msgid "database system is ready to accept read-only connections" msgstr "система бази даних готова до отримання підключення лише для читання" -#: postmaster/postmaster.c:5386 -#, c-format -msgid "could not fork startup process: %m" -msgstr "не вдалося породити стартовий процес: %m" - -#: postmaster/postmaster.c:5390 -#, c-format -msgid "could not fork archiver process: %m" -msgstr "не вдалося породити процес архіватора: %m" - -#: postmaster/postmaster.c:5394 -#, c-format -msgid "could not fork background writer process: %m" -msgstr "не вдалося породити фоновий процес запису: %m" - -#: postmaster/postmaster.c:5398 -#, c-format -msgid "could not fork checkpointer process: %m" -msgstr "не вдалося породити процес контрольних точок: %m" - -#: postmaster/postmaster.c:5402 -#, c-format -msgid "could not fork WAL writer process: %m" -msgstr "не вдалося породити процес запису WAL: %m" - -#: postmaster/postmaster.c:5406 +#: postmaster/postmaster.c:3933 #, c-format -msgid "could not fork WAL receiver process: %m" -msgstr "не вдалося породити процес отримання WAL: %m" +msgid "could not fork \"%s\" process: %m" +msgstr "не вдалося породити процес \"%s\": %m" -#: postmaster/postmaster.c:5410 -#, c-format -msgid "could not fork process: %m" -msgstr "не вдалося породити процес: %m" - -#: postmaster/postmaster.c:5611 postmaster/postmaster.c:5638 +#: postmaster/postmaster.c:4171 postmaster/postmaster.c:4205 #, c-format msgid "database connection requirement not indicated during registration" msgstr "під час реєстрації не вказувалося, що вимагається підключення до бази даних" -#: postmaster/postmaster.c:5622 postmaster/postmaster.c:5649 +#: postmaster/postmaster.c:4181 postmaster/postmaster.c:4215 #, c-format msgid "invalid processing mode in background worker" msgstr "неприпустимий режим обробки у фоновому записі" -#: postmaster/postmaster.c:5734 -#, c-format -msgid "could not fork worker process: %m" -msgstr "не вдалося породити процес запису: %m" - -#: postmaster/postmaster.c:5846 -#, c-format -msgid "no slot available for new worker process" -msgstr "немає доступного слоту для нового робочого процесу" - -#: postmaster/postmaster.c:6177 -#, c-format -msgid "could not duplicate socket %d for use in backend: error code %d" -msgstr "не вдалося продублювати сокет %d для використання: код помилки %d" - -#: postmaster/postmaster.c:6209 -#, c-format -msgid "could not create inherited socket: error code %d\n" -msgstr "не вдалося створити успадкований сокет: код помилки %d\n" - -#: postmaster/postmaster.c:6238 +#: postmaster/postmaster.c:4275 #, c-format -msgid "could not open backend variables file \"%s\": %s\n" -msgstr "не вдалося відкрити внутрішні змінні файли \"%s\": %s\n" +msgid "could not fork background worker process: %m" +msgstr "не вдалося породити фоновий процес: %m" -#: postmaster/postmaster.c:6245 +#: postmaster/postmaster.c:4358 #, c-format -msgid "could not read from backend variables file \"%s\": %s\n" -msgstr "не вдалося прочитати внутрішні змінні файли \"%s\": %s\n" +msgid "no slot available for new background worker process" +msgstr "немає доступного слоту для нового фонового робочого процесу" -#: postmaster/postmaster.c:6254 -#, c-format -msgid "could not remove file \"%s\": %s\n" -msgstr "не вдалося видалити файл \"%s\": %s\n" - -#: postmaster/postmaster.c:6271 -#, c-format -msgid "could not map view of backend variables: error code %lu\n" -msgstr "не вдалося відобразити файл серверних змінних: код помилки %lu\n" - -#: postmaster/postmaster.c:6280 -#, c-format -msgid "could not unmap view of backend variables: error code %lu\n" -msgstr "не вдалося вимкнути відображення файлу серверних змінних: код помилки %lu\n" - -#: postmaster/postmaster.c:6287 -#, c-format -msgid "could not close handle to backend parameter variables: error code %lu\n" -msgstr "не вдалося закрити покажчик файлу серверних змінних: код помилки %lu\n" - -#: postmaster/postmaster.c:6446 +#: postmaster/postmaster.c:4621 #, c-format msgid "could not read exit code for process\n" msgstr "не вдалося прочитати код завершення процесу\n" -#: postmaster/postmaster.c:6488 +#: postmaster/postmaster.c:4663 #, c-format msgid "could not post child completion status\n" msgstr "не вдалося надіслати статус завершення нащадка\n" -#: postmaster/syslogger.c:501 postmaster/syslogger.c:1222 +#: postmaster/syslogger.c:529 postmaster/syslogger.c:1173 #, c-format msgid "could not read from logger pipe: %m" msgstr "не вдалося прочитати з каналу журналювання: %m" -#: postmaster/syslogger.c:598 postmaster/syslogger.c:612 +#: postmaster/syslogger.c:629 postmaster/syslogger.c:643 #, c-format msgid "could not create pipe for syslog: %m" msgstr "не вдалося створити канал для syslog: %m" -#: postmaster/syslogger.c:677 +#: postmaster/syslogger.c:712 #, c-format msgid "could not fork system logger: %m" msgstr "не вдалося породити процес системного журналювання: %m" -#: postmaster/syslogger.c:713 +#: postmaster/syslogger.c:731 #, c-format msgid "redirecting log output to logging collector process" msgstr "переспрямовування виводу в протокол прочесу збирача протоколів" -#: postmaster/syslogger.c:714 +#: postmaster/syslogger.c:732 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "Наступні протоколи будуть виводитись в каталог \"%s\"." -#: postmaster/syslogger.c:722 +#: postmaster/syslogger.c:740 #, c-format msgid "could not redirect stdout: %m" msgstr "не вдалося переспрямувати stdout: %m" -#: postmaster/syslogger.c:727 postmaster/syslogger.c:744 +#: postmaster/syslogger.c:745 postmaster/syslogger.c:762 #, c-format msgid "could not redirect stderr: %m" msgstr "не вдалося переспрямувати stderr: %m" -#: postmaster/syslogger.c:1177 +#: postmaster/syslogger.c:1128 #, c-format -msgid "could not write to log file: %s\n" -msgstr "не вдалося записати до файлу протокола: %s\n" +msgid "could not write to log file: %m\n" +msgstr "не вдалося записати до файлу протокола: %m\n" -#: postmaster/syslogger.c:1295 +#: postmaster/syslogger.c:1246 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не вдалося відкрити файл журналу \"%s\": %m" -#: postmaster/syslogger.c:1385 +#: postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "вимкнення автоматичного обертання (щоб повторно ввімкнути, використайте SIGHUP)" -#: regex/regc_pg_locale.c:242 +#: postmaster/walsummarizer.c:740 +#, c-format +msgid "WAL summarization is not progressing" +msgstr "Підбиття підсумків WAL не просувається" + +#: 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 "Підсумовування потрібне через %X/%X, але воно застрягло на %X/%X на диску та %X/%X у пам'яті." + +#: 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] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунду" +msgstr[1] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунди" +msgstr[2] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунд" +msgstr[3] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунд" + +#: postmaster/walsummarizer.c:760 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "Підсумок досягнув %X/%X на диску та %X/%X у пам'яті." + +#: postmaster/walsummarizer.c:1000 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "не вдалося знайти припустимий запис після %X/%X" + +#: 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:1051 +#, c-format +msgid "could not read WAL from timeline %u at %X/%X" +msgstr "не вдалося прочитати WAL з часової шкали %u на %X/%X" + +#: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" msgstr "не вдалося визначити які параметри сортування використати для регулярного виразу" -#: regex/regc_pg_locale.c:265 +#: regex/regc_pg_locale.c:262 #, c-format msgid "nondeterministic collations are not supported for regular expressions" msgstr "недетерміновані правила сортування не підтримуються для регулярних виразів" -#: replication/libpqwalreceiver/libpqwalreceiver.c:245 -#: replication/libpqwalreceiver/libpqwalreceiver.c:332 +#: replication/libpqwalreceiver/libpqwalreceiver.c:267 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 #, c-format msgid "password is required" msgstr "пароль обов'язковий" -#: replication/libpqwalreceiver/libpqwalreceiver.c:246 +#: replication/libpqwalreceiver/libpqwalreceiver.c:268 #, c-format msgid "Non-superuser cannot connect if the server does not request a password." msgstr "Несуперкористувач не може підключитися, якщо сервер не запитує пароль." -#: replication/libpqwalreceiver/libpqwalreceiver.c:247 +#: replication/libpqwalreceiver/libpqwalreceiver.c:269 #, c-format msgid "Target server's authentication method must be changed, or set password_required=false in the subscription parameters." msgstr "Необхідно змінити метод автентифікації цільового сервера або встановити password_required=false у параметрах підписки." -#: replication/libpqwalreceiver/libpqwalreceiver.c:259 +#: replication/libpqwalreceiver/libpqwalreceiver.c:285 #, c-format msgid "could not clear search path: %s" msgstr "не вдалося очистити шлях пошуку: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:305 +#: replication/libpqwalreceiver/libpqwalreceiver.c:331 +#: replication/libpqwalreceiver/libpqwalreceiver.c:517 #, c-format msgid "invalid connection string syntax: %s" msgstr "неприпустимий синтаксис рядка підключення: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:333 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Non-superusers must provide a password in the connection string." msgstr "Несуперкористувачі повинні вказати пароль для рядка підключення." -#: replication/libpqwalreceiver/libpqwalreceiver.c:360 +#: replication/libpqwalreceiver/libpqwalreceiver.c:386 #, c-format msgid "could not parse connection string: %s" msgstr "не вдалося аналізувати рядок підключення: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:433 +#: replication/libpqwalreceiver/libpqwalreceiver.c:459 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "не вдалося отримати ідентифікатор системи бази даних та ідентифікатор часової шкали з основного серверу: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:449 -#: replication/libpqwalreceiver/libpqwalreceiver.c:692 +#: replication/libpqwalreceiver/libpqwalreceiver.c:476 +#: replication/libpqwalreceiver/libpqwalreceiver.c:763 #, c-format msgid "invalid response from primary server" msgstr "неприпустима відповідь з основного серверу" -#: replication/libpqwalreceiver/libpqwalreceiver.c:450 +#: replication/libpqwalreceiver/libpqwalreceiver.c:477 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "Не вдалося ідентифікувати систему: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів." -#: replication/libpqwalreceiver/libpqwalreceiver.c:535 -#: replication/libpqwalreceiver/libpqwalreceiver.c:542 -#: replication/libpqwalreceiver/libpqwalreceiver.c:572 +#: replication/libpqwalreceiver/libpqwalreceiver.c:606 +#: replication/libpqwalreceiver/libpqwalreceiver.c:613 +#: replication/libpqwalreceiver/libpqwalreceiver.c:643 #, c-format msgid "could not start WAL streaming: %s" msgstr "не вдалося почати потокове передавання WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:596 +#: replication/libpqwalreceiver/libpqwalreceiver.c:667 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "не вдалося передати основному серверу повідомлення про кінець передвання: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:619 +#: replication/libpqwalreceiver/libpqwalreceiver.c:690 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "неочікуваний набір результатів після кінця передачі" -#: replication/libpqwalreceiver/libpqwalreceiver.c:634 +#: replication/libpqwalreceiver/libpqwalreceiver.c:705 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "помилка при завершенні потокового передавання \"копіювати\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:644 +#: replication/libpqwalreceiver/libpqwalreceiver.c:715 #, c-format msgid "error reading result of streaming command: %s" msgstr "помилка при читанні результату команди потокового передавання: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:653 -#: replication/libpqwalreceiver/libpqwalreceiver.c:889 +#: replication/libpqwalreceiver/libpqwalreceiver.c:724 +#: replication/libpqwalreceiver/libpqwalreceiver.c:957 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "неочікуваний результат CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:680 +#: replication/libpqwalreceiver/libpqwalreceiver.c:751 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "не вдалося отримати файл історії часової шкали з основного сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:693 +#: replication/libpqwalreceiver/libpqwalreceiver.c:764 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Очікувалося 1 кортеж з 2 поле, отримано %d кортежів з %d полями." -#: replication/libpqwalreceiver/libpqwalreceiver.c:852 -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 -#: replication/libpqwalreceiver/libpqwalreceiver.c:912 +#: replication/libpqwalreceiver/libpqwalreceiver.c:920 +#: replication/libpqwalreceiver/libpqwalreceiver.c:973 +#: replication/libpqwalreceiver/libpqwalreceiver.c:980 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не вдалося отримати дані з WAL потоку: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:932 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1000 #, c-format msgid "could not send data to WAL stream: %s" msgstr "не вдалося передати дані потоку WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1024 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1101 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "не вдалося створити слот реплікації \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1070 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1140 +#, c-format +msgid "could not alter replication slot \"%s\": %s" +msgstr "не може змінити слот реплікації \"%s\": %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:1174 #, c-format msgid "invalid query response" msgstr "неприпустима відповідь на запит" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1071 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1175 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Очікувалося %d полів, отримано %d полі." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1141 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1245 #, c-format msgid "the query interface requires a database connection" msgstr "інтерфейс запитів вимагає підключення до бази даних" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1172 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1277 msgid "empty query" msgstr "пустий запит" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1178 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1283 msgid "unexpected pipeline mode" msgstr "неочікуваний режим конвеєра" @@ -19737,189 +20138,205 @@ msgstr "неочікуваний режим конвеєра" msgid "logical replication parallel apply worker for subscription \"%s\" has finished" msgstr "завершено логічну реплікацію паралельного аплікатора для підписки \"%s\"" -#: replication/logical/applyparallelworker.c:825 +#: replication/logical/applyparallelworker.c:822 #, c-format msgid "lost connection to the logical replication apply worker" msgstr "втрачено зв'язок з робочим застосунком логічної реплікації" -#: replication/logical/applyparallelworker.c:1027 -#: replication/logical/applyparallelworker.c:1029 +#: replication/logical/applyparallelworker.c:1024 +#: replication/logical/applyparallelworker.c:1026 msgid "logical replication parallel apply worker" msgstr "застосовуючій робочий процес паралельної реплікації" -#: replication/logical/applyparallelworker.c:1043 +#: replication/logical/applyparallelworker.c:1040 #, c-format msgid "logical replication parallel apply worker exited due to error" msgstr "паралельний робочий додаток логічнаої реплікації завершив роботу через помилку" -#: replication/logical/applyparallelworker.c:1130 -#: replication/logical/applyparallelworker.c:1303 +#: replication/logical/applyparallelworker.c:1127 +#: replication/logical/applyparallelworker.c:1300 #, c-format msgid "lost connection to the logical replication parallel apply worker" msgstr "втрачено зв'язок з паралельним робочим застосунком логічної реплікації" -#: replication/logical/applyparallelworker.c:1183 +#: replication/logical/applyparallelworker.c:1180 #, c-format msgid "could not send data to shared-memory queue" msgstr "не вдалося передати дані в чергу в спільну пам'ять" -#: replication/logical/applyparallelworker.c:1218 +#: replication/logical/applyparallelworker.c:1215 #, c-format msgid "logical replication apply worker will serialize the remaining changes of remote transaction %u to a file" msgstr "застосовуючий процес логічної реплікації буде серіалізувати зміни, що залишилися віддаленою транзакцією %u до файлу" -#: replication/logical/decode.c:180 replication/logical/logical.c:140 +#: replication/logical/decode.c:177 replication/logical/logical.c:141 #, c-format -msgid "logical decoding on standby requires wal_level >= logical on the primary" -msgstr "логічне декодування на standby вимагає wal_level >= logical в основному" +msgid "logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary" +msgstr "логічне декодування на standby вимагає \"wal_level\" >= \"logical\" на основному сервері" -#: replication/logical/launcher.c:331 +#: replication/logical/launcher.c:334 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "неможливо почати логічні записи реплікацій, коли max_replication_slots = 0" -#: replication/logical/launcher.c:424 +#: replication/logical/launcher.c:427 #, c-format msgid "out of logical replication worker slots" msgstr "недостатньо слотів для процесів логічної реплікації" -#: replication/logical/launcher.c:425 replication/logical/launcher.c:499 -#: replication/slot.c:1297 storage/lmgr/lock.c:964 storage/lmgr/lock.c:1002 -#: storage/lmgr/lock.c:2787 storage/lmgr/lock.c:4172 storage/lmgr/lock.c:4237 -#: storage/lmgr/lock.c:4587 storage/lmgr/predicate.c:2413 -#: storage/lmgr/predicate.c:2428 storage/lmgr/predicate.c:3825 +#: 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:2826 storage/lmgr/lock.c:4211 storage/lmgr/lock.c:4276 +#: storage/lmgr/lock.c:4626 storage/lmgr/predicate.c:2464 +#: storage/lmgr/predicate.c:2479 storage/lmgr/predicate.c:3876 #, c-format -msgid "You might need to increase %s." -msgstr "Можливо, вам слід збільшити %s." +msgid "You might need to increase \"%s\"." +msgstr "Можливо, вам слід збільшити \"%s\"." -#: replication/logical/launcher.c:498 +#: replication/logical/launcher.c:513 #, c-format msgid "out of background worker slots" msgstr "недостатньо слотів для фонових робочих процесів" -#: replication/logical/launcher.c:705 +#: replication/logical/launcher.c:720 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "слот запису логічної реплікації %d пустий, неможливо підключитися" -#: replication/logical/launcher.c:714 +#: replication/logical/launcher.c:729 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "слот запису логічної реплікації %d вже використовується іншим виконавцем, неможливо підключитися" -#: replication/logical/logical.c:120 +#: replication/logical/logical.c:121 #, c-format -msgid "logical decoding requires wal_level >= logical" -msgstr "логічне декодування вимагає wal_level >= logical" +msgid "logical decoding requires \"wal_level\" >= \"logical\"" +msgstr "логічне декодування вимагає \"wal_level\" >= logical\"" -#: replication/logical/logical.c:125 +#: replication/logical/logical.c:126 #, c-format msgid "logical decoding requires a database connection" msgstr "логічне декодування вимагає підключення до бази даних" -#: replication/logical/logical.c:363 replication/logical/logical.c:517 +#: 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:368 replication/logical/logical.c:522 +#: 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:375 +#: replication/logical/logical.c:377 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "неможливо створити слот логічної реплікації у транзакції, що виконує записування" -#: replication/logical/logical.c:534 replication/logical/logical.c:541 +#: replication/logical/logical.c:540 +#, c-format +msgid "cannot use replication slot \"%s\" for logical decoding" +msgstr "не може використовувати слот реплікації \"%s\" для логічного декодування" + +#: replication/logical/logical.c:542 replication/slot.c:798 +#: replication/slot.c:829 +#, c-format +msgid "This replication slot is being synchronized from the primary server." +msgstr "Цей слот реплікації синхронізується з основного сервера." + +#: replication/logical/logical.c:543 +#, c-format +msgid "Specify another replication slot." +msgstr "Вкажіть інший слот реплікації." + +#: 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:536 +#: 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:543 +#: replication/logical/logical.c:563 #, c-format msgid "This slot has been invalidated because it was conflicting with recovery." msgstr "Цей слот було скасовано, оскільки він суперечив відновленню." -#: replication/logical/logical.c:608 +#: replication/logical/logical.c:628 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "початок логічного декодування для слоту \"%s\"" -#: replication/logical/logical.c:610 +#: replication/logical/logical.c:630 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Потокове передавання транзакцій, що затверджені, після %X/%X, читання WAL з %X/%X." -#: replication/logical/logical.c:758 +#: replication/logical/logical.c:778 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s, пов'язаний номер LSN %X/%X" -#: replication/logical/logical.c:764 +#: replication/logical/logical.c:784 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s" -#: replication/logical/logical.c:935 replication/logical/logical.c:980 -#: replication/logical/logical.c:1025 replication/logical/logical.c:1071 +#: 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 "логічна реплікація під час підготовки потребує %s зворотнього виклику" -#: replication/logical/logical.c:1303 replication/logical/logical.c:1352 -#: replication/logical/logical.c:1393 replication/logical/logical.c:1479 -#: replication/logical/logical.c:1528 +#: 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 "логічне потокове передавання потребує %s зворотнього виклику" -#: replication/logical/logical.c:1438 +#: replication/logical/logical.c:1458 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "логічне потокове передавання під час підготовки потребує %s зворотнього виклику" -#: replication/logical/logicalfuncs.c:126 +#: replication/logical/logicalfuncs.c:123 #, c-format msgid "slot name must not be null" msgstr "ім'я слоту має бути не Null-значення" -#: replication/logical/logicalfuncs.c:142 +#: replication/logical/logicalfuncs.c:139 #, c-format msgid "options array must not be null" msgstr "масив параметрів має бути не Null-значення" -#: replication/logical/logicalfuncs.c:159 +#: replication/logical/logicalfuncs.c:156 #, c-format msgid "array must be one-dimensional" msgstr "масив має бути одновимірним" -#: replication/logical/logicalfuncs.c:165 +#: replication/logical/logicalfuncs.c:162 #, c-format msgid "array must not contain nulls" msgstr "масив не має включати nulls" -#: replication/logical/logicalfuncs.c:180 utils/adt/json.c:1484 -#: utils/adt/jsonb.c:1403 +#: 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 "масив повинен мати парну кількість елементів" -#: replication/logical/logicalfuncs.c:227 +#: replication/logical/logicalfuncs.c:224 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "плагін виходу логічного декодування \"%s\" виробляє бінарний вихід, але функція \"%s\" очікує текстові дані" #: replication/logical/origin.c:190 #, c-format -msgid "cannot query or manipulate replication origin when max_replication_slots = 0" -msgstr "неможливо вимагати або маніпулювати джерелами реплікації, коли max_replication_slots = 0" +msgid "cannot query or manipulate replication origin when \"max_replication_slots\" is 0" +msgstr "неможливо надіслати запит або маніпулювати джерелами реплікації, коли \"max_replication_slots\" = 0" #: replication/logical/origin.c:195 #, c-format @@ -19953,8 +20370,8 @@ msgstr "контрольна точка реплікації має неправ #: replication/logical/origin.c:798 #, c-format -msgid "could not find free replication state, increase max_replication_slots" -msgstr "не вдалося знайти вільний слот для стану реплікації, збільшіть max_replication_slots" +msgid "could not find free replication state, increase \"max_replication_slots\"" +msgstr "не вдалося знайти вільний слот для стану реплікації, збільшіть \"max_replication_slots\"" #: replication/logical/origin.c:806 #, c-format @@ -19966,54 +20383,54 @@ msgstr "відновлений стан реплікації вузла %d в %X msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "неправильна контрольна сума файлу контрольної точки для слота реплікації %u, очікувалось %u" -#: replication/logical/origin.c:944 replication/logical/origin.c:1141 +#: replication/logical/origin.c:944 replication/logical/origin.c:1143 #, c-format msgid "replication origin with ID %d is already active for PID %d" msgstr "джерело реплікації з ID %d вже активний для PID %d" -#: replication/logical/origin.c:955 replication/logical/origin.c:1153 +#: replication/logical/origin.c:955 replication/logical/origin.c:1156 #, c-format msgid "could not find free replication state slot for replication origin with ID %d" msgstr "не вдалося знайти вільний слот стану реплікації для джерела реплікації з ID %d" -#: replication/logical/origin.c:957 replication/logical/origin.c:1155 -#: replication/slot.c:2093 +#: replication/logical/origin.c:957 replication/logical/origin.c:1158 +#: replication/slot.c:2384 #, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Збільшіть max_replication_slots і спробуйте знову." +msgid "Increase \"max_replication_slots\" and try again." +msgstr "Збільшіть \"max_replication_slots\" і спробуйте знову." -#: replication/logical/origin.c:1112 +#: replication/logical/origin.c:1114 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "не можна налаштувати джерело реплікації, коли один вже налаштований" -#: replication/logical/origin.c:1196 replication/logical/origin.c:1412 -#: replication/logical/origin.c:1432 +#: replication/logical/origin.c:1199 replication/logical/origin.c:1415 +#: replication/logical/origin.c:1435 #, c-format msgid "no replication origin is configured" msgstr "жодне джерело реплікації не налаштоване" -#: replication/logical/origin.c:1282 +#: replication/logical/origin.c:1285 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "назва джерела реплікації \"%s\" зарезервована" -#: replication/logical/origin.c:1284 +#: replication/logical/origin.c:1287 #, c-format msgid "Origin names \"%s\", \"%s\", and names starting with \"pg_\" are reserved." msgstr "Імена походженням \"%s\", \"%s\" та імена, що починаються з \"pg_\", є зарезервованими." -#: replication/logical/relation.c:240 +#: replication/logical/relation.c:242 #, c-format msgid "\"%s\"" msgstr "\"%s\"" -#: replication/logical/relation.c:243 +#: replication/logical/relation.c:245 #, c-format msgid ", \"%s\"" msgstr ", \"%s\"" -#: replication/logical/relation.c:249 +#: replication/logical/relation.c:251 #, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" @@ -20022,49 +20439,177 @@ msgstr[1] "в цільовому відношенні логічної репл msgstr[2] "в цільовому відношенні логічної реплікації \"%s.%s\" пропущено репліковані стовпці: %s" msgstr[3] "в цільовому відношенні логічної реплікації \"%s.%s\" пропущено репліковані стовпці: %s" -#: replication/logical/relation.c:304 +#: replication/logical/relation.c:306 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "в цільовому відношенні логічної реплікації \"%s.%s\" в індексі REPLICA IDENTITY використовуються системні стовпці" -#: replication/logical/relation.c:396 +#: replication/logical/relation.c:398 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "цільове відношення логічної реплікації \"%s.%s\" не існує" -#: replication/logical/reorderbuffer.c:3936 +#: replication/logical/reorderbuffer.c:3994 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "не вдалося записати у файл даних для XID %u: %m" -#: replication/logical/reorderbuffer.c:4282 -#: replication/logical/reorderbuffer.c:4307 +#: replication/logical/reorderbuffer.c:4340 +#: replication/logical/reorderbuffer.c:4365 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "не вдалося прочитати з файлу розгортання буферу пересортування: %m" -#: replication/logical/reorderbuffer.c:4286 -#: replication/logical/reorderbuffer.c:4311 +#: replication/logical/reorderbuffer.c:4344 +#: replication/logical/reorderbuffer.c:4369 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "не вдалося прочитати з файлу розгортання буферу пересортування: прочитано %d замість %u байт" -#: replication/logical/reorderbuffer.c:4561 +#: replication/logical/reorderbuffer.c:4619 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "не вдалося видалити файл \"%s\" під час видалення pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:5057 +#: replication/logical/reorderbuffer.c:5115 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "не вдалося прочитати з файлу \"%s\": прочитано %d замість %d байт" -#: replication/logical/snapbuild.c:639 +#: replication/logical/slotsync.c:215 +#, c-format +msgid "could not synchronize replication slot \"%s\" because remote slot precedes local slot" +msgstr "не вдалося синхронізувати слот реплікації \"%s\", оскільки віддалений слот передує локальному" + +#: replication/logical/slotsync.c:217 +#, c-format +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 "Віддалений слот має LSN %X/%X і каталог xmin %u, а локальний слот має LSN %X/%X і каталог xmin %u." + +#: replication/logical/slotsync.c:459 +#, c-format +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "видалено слот реплікації \"%s\" бази даних з OID %u" + +#: replication/logical/slotsync.c:579 +#, c-format +msgid "could not synchronize replication slot \"%s\"" +msgstr "не вдалося синхронізувати слот реплікації \"%s\"" + +#: replication/logical/slotsync.c:580 +#, c-format +msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X." +msgstr "Логічне декодування не може знайти стійку точку з локальних LSN %X/%X." + +#: replication/logical/slotsync.c:589 +#, c-format +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "новостворений слот реплікації \"%s\" готовий до синхронізації" + +#: replication/logical/slotsync.c:628 +#, 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 "пропуск синхронізації слотів, оскільки отримана синхронізація слотів LSN %X/%X для слота \"%s\" випереджає позицію очікування %X/%X" + +#: replication/logical/slotsync.c:650 +#, c-format +msgid "exiting from slot synchronization because same name slot \"%s\" already exists on the standby" +msgstr "вихід із синхронізації слотів, оскільки однойменний слот \"%s\" вже існує у режимі очікування" + +#: replication/logical/slotsync.c:819 +#, c-format +msgid "could not fetch failover logical slots info from the primary server: %s" +msgstr "не вдалося отримати інформацію про логічні слоти обходу відмови з основного сервера: %s" + +#: replication/logical/slotsync.c:965 +#, c-format +msgid "could not fetch primary_slot_name \"%s\" info from the primary server: %s" +msgstr "не вдалося отримати інформацію primary_slot_name \"%s\" з первинного сервера: %s" + +#: replication/logical/slotsync.c:967 +#, c-format +msgid "Check if primary_slot_name is configured correctly." +msgstr "Перевірте, чи правильно налаштовано primary_slot_name." + +#: replication/logical/slotsync.c:987 +#, c-format +msgid "cannot synchronize replication slots from a standby server" +msgstr "не вдається синхронізувати слоти реплікації з резервного сервера" + +#. translator: second %s is a GUC variable name +#: replication/logical/slotsync.c:996 +#, c-format +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 "replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "для синхронізації слотів реплікації потрібно, щоб \"%s\" було вказано у \"%s\"" + +#: replication/logical/slotsync.c:1050 +#, 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:1063 replication/logical/slotsync.c:1091 +#, c-format +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 "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 "replication slot synchronization worker will shut down because \"%s\" is disabled" +msgstr "процес синхронизації слотів реплікації буде вимкнутий, тому що \"%s\" відключено" + +#: replication/logical/slotsync.c:1138 +#, c-format +msgid "replication slot synchronization worker will restart because of a parameter change" +msgstr "процес синхронізації слотів реплікації буде перезавантажений через зміну параметра" + +#: replication/logical/slotsync.c:1162 +#, c-format +msgid "replication slot synchronization worker is shutting down on receiving SIGINT" +msgstr "процес синхронізації слотів реплікації буде вимкнуто через отримання повідомлення SIGINT" + +#: replication/logical/slotsync.c:1287 +#, c-format +msgid "cannot synchronize replication slots when standby promotion is ongoing" +msgstr "неможливо синхронізувати слоти реплікації під час підвищення резервного сервера" + +#: replication/logical/slotsync.c:1295 +#, c-format +msgid "cannot synchronize replication slots concurrently" +msgstr "не може синхронізувати слоти реплікації одночасно" + +#: replication/logical/slotsync.c:1403 +#, c-format +msgid "slot sync worker started" +msgstr "запущено працівника синхронізації слотів" + +#: replication/logical/slotsync.c:1466 replication/slotfuncs.c:900 +#: replication/walreceiver.c:307 +#, c-format +msgid "could not connect to the primary server: %s" +msgstr "не вдалося підключитися до основного серверу: %s" + +#: replication/logical/snapbuild.c:653 #, c-format msgid "initial slot snapshot too large" msgstr "початковий знімок слота занадто великий" -#: replication/logical/snapbuild.c:693 +#: 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" @@ -20073,389 +20618,449 @@ msgstr[1] "експортовано знімок логічного декоду msgstr[2] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" msgstr[3] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" -#: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480 -#: replication/logical/snapbuild.c:1996 +#: 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 "узгодження процесу логічного кодування знайдено в точці %X/%X" -#: replication/logical/snapbuild.c:1390 +#: replication/logical/snapbuild.c:1406 #, c-format msgid "There are no running transactions." msgstr "Більше активних транзакцій немає." -#: replication/logical/snapbuild.c:1432 +#: replication/logical/snapbuild.c:1453 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "початкова стартова точка процесу логічного декодування знайдена в точці %X/%X" -#: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458 +#: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Очікування транзакцій (приблизно %d) старіше, ніж %u до кінця." -#: replication/logical/snapbuild.c:1456 +#: replication/logical/snapbuild.c:1477 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "початкова точка узгодження процесу логічного кодування знайдена в точці %X/%X" -#: replication/logical/snapbuild.c:1482 +#: replication/logical/snapbuild.c:1503 #, c-format msgid "There are no old transactions anymore." msgstr "Більше старих транзакцій немає." -#: replication/logical/snapbuild.c:1883 +#: replication/logical/snapbuild.c:1904 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "файл стану snapbuild \"%s\" має неправильне магічне число: %u замість %u" -#: replication/logical/snapbuild.c:1889 +#: replication/logical/snapbuild.c:1910 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "файл стану snapbuild \"%s\" має непідтримуючу версію: %u замість %u" -#: replication/logical/snapbuild.c:1930 +#: replication/logical/snapbuild.c:1951 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "у файлі стану snapbuild \"%s\" невідповідність контрольної суми: %u, повинно бути %u" -#: replication/logical/snapbuild.c:1998 +#: replication/logical/snapbuild.c:2019 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Логічне декодування почнеться зі збереженого знімку." -#: replication/logical/snapbuild.c:2105 +#: replication/logical/snapbuild.c:2126 #, c-format msgid "could not parse file name \"%s\"" msgstr "не вдалося аналізувати ім'я файлу \"%s\"" -#: replication/logical/tablesync.c:153 +#: replication/logical/tablesync.c:161 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "процес синхронізації таблиці при логічній реплікації для підписки \"%s\", таблиці \"%s\" закінчив обробку" -#: replication/logical/tablesync.c:632 +#: replication/logical/tablesync.c:641 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart so that two_phase can be enabled" msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде перезавантажено, щоб можна було активувати two_phase" -#: replication/logical/tablesync.c:807 replication/logical/tablesync.c:949 +#: replication/logical/tablesync.c:827 replication/logical/tablesync.c:969 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "не вдалося отримати інформацію про таблицю \"%s.%s\" з серверу публікації: %s" -#: replication/logical/tablesync.c:814 +#: replication/logical/tablesync.c:834 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "таблиця \"%s.%s\" не знайдена на сервері публікації" -#: replication/logical/tablesync.c:872 +#: replication/logical/tablesync.c:892 #, c-format msgid "could not fetch column list info for table \"%s.%s\" from publisher: %s" msgstr "не вдалося отримати інформацію про список стовпців для таблиці \"%s.%s\" з серверу публікації: %s" -#: replication/logical/tablesync.c:1051 +#: replication/logical/tablesync.c:1071 #, c-format msgid "could not fetch table WHERE clause info for table \"%s.%s\" from publisher: %s" msgstr "не вдалося отримати інформацію про вираз WHERE для таблиці \"%s.%s\" з серверу публікації: %s" -#: replication/logical/tablesync.c:1210 +#: replication/logical/tablesync.c:1230 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "не вдалося почати копіювання початкового змісту таблиці \"%s.%s\": %s" -#: replication/logical/tablesync.c:1411 +#: replication/logical/tablesync.c:1429 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "копії таблиці не вдалося запустити транзакцію на сервері публікації: %s" -#: replication/logical/tablesync.c:1453 +#: replication/logical/tablesync.c:1472 #, c-format msgid "replication origin \"%s\" already exists" msgstr "джерело реплікації \"%s\" вже існує" -#: replication/logical/tablesync.c:1486 replication/logical/worker.c:2374 +#: replication/logical/tablesync.c:1505 replication/logical/worker.c:2361 #, c-format msgid "user \"%s\" cannot replicate into relation with row-level security enabled: \"%s\"" msgstr "користувач \"%s\" не може реплікувати у відношення з увімкненим захистом на рівні рядків: \"%s\"" -#: replication/logical/tablesync.c:1499 +#: replication/logical/tablesync.c:1518 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "копії таблиці не вдалося завершити транзакцію на сервері публікації: %s" -#: replication/logical/worker.c:499 +#: replication/logical/worker.c:481 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop" msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде зупинено" -#: replication/logical/worker.c:501 +#: replication/logical/worker.c:483 #, c-format msgid "Cannot handle streamed replication transactions using parallel apply workers until all tables have been synchronized." msgstr "Неможливо обробляти транзакції потокової реплікації з використанням паралельних застосовуючих працівників, доки не буде синхронізовано всі таблиці." -#: replication/logical/worker.c:863 replication/logical/worker.c:978 +#: replication/logical/worker.c:852 replication/logical/worker.c:967 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "невірний формат двійкових даних в стовпці логічної реплікації %d" -#: replication/logical/worker.c:2513 +#: replication/logical/worker.c:2500 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "сервер публікації не передав стовпець ідентифікації репліки очікуваний для цільового зв'язку логічної реплікації \"%s.%s\"" -#: replication/logical/worker.c:2520 +#: replication/logical/worker.c:2507 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "в цільовому зв'язку логічної реплікації \"%s.%s\" немає ні індексу REPLICA IDENTITY, ні ключа PRIMARY KEY і публіковаий зв'язок не має REPLICA IDENTITY FULL" -#: replication/logical/worker.c:3384 +#: replication/logical/worker.c:3371 #, c-format msgid "invalid logical replication message type \"??? (%d)\"" msgstr "неприпустимий тип повідомлення логічної реплікації \"??? (%d)\"" -#: replication/logical/worker.c:3556 +#: replication/logical/worker.c:3543 #, c-format msgid "data stream from publisher has ended" msgstr "потік даних з серверу публікації завершився" -#: replication/logical/worker.c:3713 +#: replication/logical/worker.c:3697 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "завершення процесу логічної реплікації через тайм-аут" -#: replication/logical/worker.c:3907 +#: replication/logical/worker.c:3891 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was removed" msgstr "процес логічної реплікації для підписки \"%s\" буде зупинено, тому, що підписка була видалена" -#: replication/logical/worker.c:3920 +#: replication/logical/worker.c:3905 #, c-format msgid "logical replication worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "процес логічної реплікації для підписки \"%s\" буде зупинено, тому, що підписка була вимкнута" -#: replication/logical/worker.c:3951 +#: replication/logical/worker.c:3936 #, c-format msgid "logical replication parallel apply worker for subscription \"%s\" will stop because of a parameter change" msgstr "процес, що застосовує паралельну логічну реплікацію для підписки \"%s\", буде зупинено через зміну параметру" -#: replication/logical/worker.c:3955 +#: replication/logical/worker.c:3940 #, c-format msgid "logical replication worker for subscription \"%s\" will restart because of a parameter change" msgstr "процес логічної реплікації для підписки \"%s\", буде перезавантажено через зміну параметру" +#: replication/logical/worker.c:3954 +#, c-format +msgid "logical replication parallel apply worker for subscription \"%s\" will stop because the subscription owner's superuser privileges have been revoked" +msgstr "логічна реплікація паралельного аплікатора для підписки \"%s\" буде зупинена, оскільки права суперкористувача власника підписки було відкликано" + +#: replication/logical/worker.c:3958 +#, c-format +msgid "logical replication worker for subscription \"%s\" will restart because the subscription owner's superuser privileges have been revoked" +msgstr "працівник логічної реплікації для підписки \"%s\" буде перезапущено, оскільки права суперкористувача власника підписки було відкликано" + #: replication/logical/worker.c:4478 #, c-format +msgid "subscription has no replication slot set" +msgstr "для підписки не встановлений слот реплікації" + +#: replication/logical/worker.c:4591 +#, c-format msgid "logical replication worker for subscription %u will not start because the subscription was removed during startup" msgstr "процес логічної реплікації для підписки %u не буде почато, тому, що підписка була видалена під час запуску" -#: replication/logical/worker.c:4493 +#: replication/logical/worker.c:4607 #, c-format msgid "logical replication worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "процес логічної реплікації для підписки \"%s\" не буде почато, тому, що підписка була вимкнута під час запуску" -#: replication/logical/worker.c:4510 +#: replication/logical/worker.c:4631 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "просец синхронізації таблиці під час логічної реплікації для підписки \"%s\", таблиці \"%s\" запущений" -#: replication/logical/worker.c:4515 +#: replication/logical/worker.c:4636 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" запущений" -#: replication/logical/worker.c:4590 -#, c-format -msgid "subscription has no replication slot set" -msgstr "для підписки не встановлений слот реплікації" - -#: replication/logical/worker.c:4757 +#: replication/logical/worker.c:4758 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "підписка \"%s\" була відключена через помилку" -#: replication/logical/worker.c:4805 +#: 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:4819 +#: 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:4901 +#: replication/logical/worker.c:4902 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "очищено LSN пропуску підписки \"%s\"" -#: replication/logical/worker.c:4902 +#: 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 "Кінцеве розташування WAL віддаленої транзакції (LSN) %X/%X не відповідає skip-LSN %X/%X." -#: replication/logical/worker.c:4928 +#: replication/logical/worker.c:4940 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\"" msgstr "обробка віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\"" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:4944 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u" msgstr "обробка віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" у транзакції %u" -#: replication/logical/worker.c:4937 +#: 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 "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" у транзакції %u завершено о %X/%X" -#: replication/logical/worker.c:4948 +#: 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 "обробка віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" в транзакції %u" -#: replication/logical/worker.c:4955 +#: 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 "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" в транзакції %u завершено о %X/%X" -#: replication/logical/worker.c:4966 +#: 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 "обробка віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" стовпчик \"%s\" у транзакції %u" -#: replication/logical/worker.c:4974 +#: 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 "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" стовпчик \"%s\" у транзакції %u завершено о %X/%X" -#: replication/pgoutput/pgoutput.c:317 +#: replication/pgoutput/pgoutput.c:315 #, c-format msgid "invalid proto_version" msgstr "неприпустиме значення proto_version" -#: replication/pgoutput/pgoutput.c:322 +#: replication/pgoutput/pgoutput.c:320 #, c-format msgid "proto_version \"%s\" out of range" msgstr "значення proto_version \"%s\" за межами діапазону" -#: replication/pgoutput/pgoutput.c:339 +#: replication/pgoutput/pgoutput.c:337 #, c-format msgid "invalid publication_names syntax" msgstr "неприпустимий синтаксис publication_names" -#: replication/pgoutput/pgoutput.c:440 +#: replication/pgoutput/pgoutput.c:407 replication/pgoutput/pgoutput.c:411 #, c-format -msgid "client sent proto_version=%d but server only supports protocol %d or lower" -msgstr "клієнт передав proto_version=%d, але сервер підтримує лише протокол %d або нижче" +msgid "option \"%s\" missing" +msgstr "параметр \"%s\" відсутній" -#: replication/pgoutput/pgoutput.c:446 +#: replication/pgoutput/pgoutput.c:452 #, c-format -msgid "client sent proto_version=%d but server only supports protocol %d or higher" -msgstr "клієнт передав proto_version=%d, але сервер підтримує лише протокол %d або вище" +msgid "client sent proto_version=%d but server only supports protocol %d or lower" +msgstr "клієнт передав proto_version=%d, але сервер підтримує лише протокол %d або нижче" -#: replication/pgoutput/pgoutput.c:452 +#: replication/pgoutput/pgoutput.c:458 #, c-format -msgid "publication_names parameter missing" -msgstr "пропущено параметр publication_names" +msgid "client sent proto_version=%d but server only supports protocol %d or higher" +msgstr "клієнт передав proto_version=%d, але сервер підтримує лише протокол %d або вище" -#: replication/pgoutput/pgoutput.c:466 +#: replication/pgoutput/pgoutput.c:473 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "запитувана proto_version=%d не підтримує потокову передачу, потребується %d або вища" -#: replication/pgoutput/pgoutput.c:472 +#: replication/pgoutput/pgoutput.c:479 #, c-format msgid "requested proto_version=%d does not support parallel streaming, need %d or higher" msgstr "запитувана proto_version=%d не підтримує паралельний потік, потрібно %d або вище" -#: replication/pgoutput/pgoutput.c:477 +#: replication/pgoutput/pgoutput.c:484 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "запитане потокова передавача, але не підтримується плагіном виводу" -#: replication/pgoutput/pgoutput.c:494 +#: replication/pgoutput/pgoutput.c:498 #, c-format msgid "requested proto_version=%d does not support two-phase commit, need %d or higher" msgstr "запитувана proto_version=%d не підтримує двоетапне затвердження, потрібна %d або вища" -#: replication/pgoutput/pgoutput.c:499 +#: replication/pgoutput/pgoutput.c:503 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "запитано двоетапне затвердження, але не підтримується плагіном виводу" -#: replication/slot.c:207 +#: replication/slot.c:260 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "ім'я слоту реплікації \"%s\" занадто коротке" -#: replication/slot.c:216 +#: replication/slot.c:269 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "ім'я слоту реплікації \"%s\" занадто довге" -#: replication/slot.c:229 +#: replication/slot.c:282 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "ім'я слоту реплікації \"%s\" містить неприпустимий символ" -#: replication/slot.c:231 +#: replication/slot.c:284 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Імена слота реплікації можуть містити лише букви в нижньому кейсі, числа, і символ підкреслення." -#: replication/slot.c:285 +#: replication/slot.c:333 +#, c-format +msgid "cannot enable failover for a replication slot created on the standby" +msgstr "не вдається увімкнути відмовостійкість для слота реплікації, створеного в режимі очікування" + +#: replication/slot.c:345 replication/slot.c:849 +#, c-format +msgid "cannot enable failover for a temporary replication slot" +msgstr "не вдається увімкнути відмовостійкість для тимчасового слота реплікації" + +#: replication/slot.c:370 #, c-format msgid "replication slot \"%s\" already exists" msgstr "слот реплікації \"%s\" вже існує" -#: replication/slot.c:295 +#: replication/slot.c:380 #, c-format msgid "all replication slots are in use" msgstr "використовуються всі слоти реплікації" -#: replication/slot.c:296 +#: replication/slot.c:381 #, c-format -msgid "Free one or increase max_replication_slots." -msgstr "Звільніть непотрібні або збільшіть max_replication_slots." +msgid "Free one or increase \"max_replication_slots\"." +msgstr "Звільніть непотрібні або збільшіть \"max_replication_slots\"." -#: replication/slot.c:474 replication/slotfuncs.c:736 -#: utils/activity/pgstat_replslot.c:55 utils/adt/genfile.c:774 +#: replication/slot.c:560 replication/slot.c:2453 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\" не існує" -#: replication/slot.c:520 replication/slot.c:1110 +#: replication/slot.c:606 replication/slot.c:1337 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "слот реплікації \"%s\" активний для PID %d" -#: replication/slot.c:756 replication/slot.c:1645 replication/slot.c:2028 +#: replication/slot.c:638 +#, c-format +msgid "acquired logical replication slot \"%s\"" +msgstr "придбано слот логічної реплікації \"%s\"" + +#: replication/slot.c:640 +#, c-format +msgid "acquired physical replication slot \"%s\"" +msgstr "придбано фізичний слот реплікації \"%s\"" + +#: replication/slot.c:729 +#, c-format +msgid "released logical replication slot \"%s\"" +msgstr "звільнено слот логічної реплікації \"%s\"" + +#: replication/slot.c:731 +#, c-format +msgid "released physical replication slot \"%s\"" +msgstr "звільнено фізичний слот реплікації \"%s\"" + +#: replication/slot.c:797 +#, c-format +msgid "cannot drop replication slot \"%s\"" +msgstr "не може скинути слот реплікації \"%s\"" + +#: replication/slot.c:816 +#, c-format +msgid "cannot use %s with a physical replication slot" +msgstr "не може використовувати %s з фізичним слотом реплікації" + +#: replication/slot.c:828 +#, c-format +msgid "cannot alter replication slot \"%s\"" +msgstr "не може змінювати слот реплікації \"%s\"" + +#: replication/slot.c:838 +#, c-format +msgid "cannot enable failover for a replication slot on the standby" +msgstr "не вдається увімкнути обхід відмови для слота реплікації в режимі очікування" + +#: replication/slot.c:969 replication/slot.c:1927 replication/slot.c:2311 #, c-format msgid "could not remove directory \"%s\"" msgstr "не вдалося видалити каталог \"%s\"" -#: replication/slot.c:1145 +#: replication/slot.c:1372 #, c-format -msgid "replication slots can only be used if max_replication_slots > 0" -msgstr "слоти реплікації можна використовувати лише якщо max_replication_slots > 0" +msgid "replication slots can only be used if \"max_replication_slots\" > 0" +msgstr "слоти реплікації можна використовувати лише якщо \"max_replication_slots\" > 0" -#: replication/slot.c:1150 +#: replication/slot.c:1377 #, c-format -msgid "replication slots can only be used if wal_level >= replica" -msgstr "слоти реплікації можна використовувати лише якщо wal_level >= replica" +msgid "replication slots can only be used if \"wal_level\" >= \"replica\"" +msgstr "слоти реплікації можна використовувати лише якщо \"wal_level\" >= \"replica\"" -#: replication/slot.c:1162 +#: replication/slot.c:1389 #, c-format msgid "permission denied to use replication slots" msgstr "немає дозволу для використання слотів реплікації" -#: replication/slot.c:1163 +#: replication/slot.c:1390 #, c-format msgid "Only roles with the %s attribute may use replication slots." msgstr "Тільки ролі з атрибутом %s можуть використовувати слоти реплікації." -#: replication/slot.c:1271 +#: replication/slot.c:1498 #, c-format msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte." msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes." @@ -20464,575 +21069,640 @@ msgstr[1] "Значення restart_lsn слота %X/%X перевищує лі msgstr[2] "Значення restart_lsn слота %X/%X перевищує ліміт на %llu байтів." msgstr[3] "Значення restart_lsn слота %X/%X перевищує ліміт на %llu байтів." -#: replication/slot.c:1279 +#: replication/slot.c:1506 #, c-format msgid "The slot conflicted with xid horizon %u." msgstr "Слот конфліктував з горизонтом xid %u." -#: replication/slot.c:1284 -msgid "Logical decoding on standby requires wal_level >= logical on the primary server." -msgstr "Логічне декодування на standby вимагає wal_level >= logical на основному сервері." +#: replication/slot.c:1511 +msgid "Logical decoding on standby requires \"wal_level\" >= \"logical\" on the primary server." +msgstr "Логічне декодування на резервному сервері вимагає \"wal_level\" >= \"logical\" на основному сервері." -#: replication/slot.c:1292 +#: replication/slot.c:1519 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "завершення процесу %d для звільнення слоту реплікації \"%s\"" -#: replication/slot.c:1294 +#: replication/slot.c:1521 #, c-format msgid "invalidating obsolete replication slot \"%s\"" msgstr "анулювання застарілого слоту реплікації \"%s\"" -#: replication/slot.c:1966 +#: replication/slot.c:2249 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "файл слоту реплікації \"%s\" має неправильне магічне число: %u замість %u" -#: replication/slot.c:1973 +#: replication/slot.c:2256 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "файл слоту реплікації \"%s\" має непідтримуючу версію %u" -#: replication/slot.c:1980 +#: replication/slot.c:2263 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "файл слоту реплікації \"%s\" має пошкоджену довжину %u" -#: replication/slot.c:2016 +#: replication/slot.c:2299 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "у файлі слоту реплікації \"%s\" невідповідність контрольної суми: %u, повинно бути %u" -#: replication/slot.c:2050 +#: replication/slot.c:2333 #, c-format -msgid "logical replication slot \"%s\" exists, but wal_level < logical" -msgstr "слот логічної реплікації \"%s\" існує, але wal_level < logical" +msgid "logical replication slot \"%s\" exists, but \"wal_level\" < \"logical\"" +msgstr "слот логічної реплікації \"%s\" існує, але \"wal_level\" < \"logical\"" -#: replication/slot.c:2052 +#: replication/slot.c:2335 #, c-format -msgid "Change wal_level to be logical or higher." -msgstr "Змініть wal_level на logical або вище." +msgid "Change \"wal_level\" to be \"logical\" or higher." +msgstr "Змініть \"wal_level\" на \"logical\" або вище." -#: replication/slot.c:2056 +#: replication/slot.c:2339 #, c-format -msgid "physical replication slot \"%s\" exists, but wal_level < replica" -msgstr "слот фізичної реплікації \"%s\" існує, але wal_level < replica" +msgid "physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" +msgstr "слот фізичної реплікації \"%s\" існує, але \"wal_level\" < \"replica\"" -#: replication/slot.c:2058 +#: replication/slot.c:2341 #, c-format -msgid "Change wal_level to be replica or higher." -msgstr "Змініть wal_level на replica або вище." +msgid "Change \"wal_level\" to be \"replica\" or higher." +msgstr "Змініть \"wal_level\" на \"replica\" або вище." -#: replication/slot.c:2092 +#: replication/slot.c:2383 #, c-format msgid "too many replication slots active before shutdown" msgstr "перед завершенням роботи активно занадто багато слотів реплікації" -#: replication/slotfuncs.c:601 +#: replication/slot.c:2461 +#, c-format +msgid "\"%s\" is not a physical replication slot" +msgstr "\"%s\" не є фізичним слотом реплікації" + +#: replication/slot.c:2638 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "слот реплікації \"%s\", вказаний в параметрі \"%s\", не існує" + +#: replication/slot.c:2640 replication/slot.c:2681 replication/slot.c:2696 +#, c-format +msgid "Logical replication is waiting on the standby associated with replication slot \"%s\"." +msgstr "Логічна реплікація чекає на слоті реплікації, що пов'язана з слотом реплікації \"%s\"." + +#: replication/slot.c:2642 +#, c-format +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "Створіть слот реплікації \"%s\" або змініть параметр \"%s\"." + +#: replication/slot.c:2659 +#, c-format +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "неможливо вказати слот логічної реплікації \"%s\" в параметрі \"%s\"" + +#: replication/slot.c:2661 +#, c-format +msgid "Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "Логічна реплікація очікує на корекцію на слоті реплікації \"%s\"." + +#: replication/slot.c:2663 +#, c-format +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "Приберіть слот логічної реплікації \"%s\" з параметру \"%s\"." + +#: replication/slot.c:2679 +#, c-format +msgid "physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated" +msgstr "" + +#: replication/slot.c:2683 +#, c-format +msgid "Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "" + +#: replication/slot.c:2694 +#, c-format +msgid "replication slot \"%s\" specified in parameter \"%s\" does not have active_pid" +msgstr "" + +#: replication/slot.c:2698 +#, c-format +msgid "Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "" + +#: replication/slotfuncs.c:526 #, c-format msgid "invalid target WAL LSN" msgstr "неприпустима ціль WAL LSN" -#: replication/slotfuncs.c:623 +#: replication/slotfuncs.c:548 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "слот реплікації \"%s\" не може бути розширеним" -#: replication/slotfuncs.c:625 +#: replication/slotfuncs.c:550 #, c-format msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Цей слот ніколи раніше не резервував WAL, або він був недійсним." -#: replication/slotfuncs.c:641 +#: replication/slotfuncs.c:566 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "просунути слот реплікації до позиції %X/%X не можна, мінімальна позиція %X/%X" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:673 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "не можна скопіювати слот фізичної реплікації \"%s\" як слот логічної реплікації" -#: replication/slotfuncs.c:750 +#: replication/slotfuncs.c:675 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "не можна скопіювати слот логічної реплікації \"%s\" як слот фізичної реплікації" -#: replication/slotfuncs.c:757 +#: replication/slotfuncs.c:682 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "не можна скопіювати слот реплікації, який не резервує WAL" -#: replication/slotfuncs.c:834 +#: replication/slotfuncs.c:768 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "не вдалося скопіювати слот реплікації \"%s\"" -#: replication/slotfuncs.c:836 +#: replication/slotfuncs.c:770 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "Слот реплікації джерела був змінений несумісно під час операції копіювання." -#: replication/slotfuncs.c:842 +#: replication/slotfuncs.c:776 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "не можна скопіювати незавершений слот логічної реплікації \"%s\"" -#: replication/slotfuncs.c:844 +#: replication/slotfuncs.c:778 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Повторіть, коли confirmed_flush_lsn слоту джерела реплікації є дійсним." -#: replication/syncrep.c:262 +#: replication/slotfuncs.c:877 +#, c-format +msgid "replication slots can only be synchronized to a standby server" +msgstr "слоти реплікації можна синхронізувати лише з резервним сервером" + +#: replication/syncrep.c:261 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "скасування очікування синхронної реплікації і завершення з'єднання по команді адміністратора" -#: replication/syncrep.c:263 replication/syncrep.c:280 +#: replication/syncrep.c:262 replication/syncrep.c:279 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "Транзакція вже була затверджена локально, але можливо не була реплікована до режиму очікування." -#: replication/syncrep.c:279 +#: replication/syncrep.c:278 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "скасування очікування синхронної реплікації по запиту користувача" -#: replication/syncrep.c:486 +#: replication/syncrep.c:485 #, c-format -msgid "standby \"%s\" is now a synchronous standby with priority %u" -msgstr "режим очікування \"%s\" зараз є синхронним з пріоритетом %u" +msgid "standby \"%s\" is now a synchronous standby with priority %d" +msgstr "очікування \"%s\" тепер є синхронним очікуванням з пріоритетом %d" -#: replication/syncrep.c:490 +#: replication/syncrep.c:489 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "режим очікування \"%s\" зараз є кандидатом для включення в кворум синхронних" -#: replication/syncrep.c:1019 +#: replication/syncrep.c:1013 #, c-format -msgid "synchronous_standby_names parser failed" -msgstr "помилка при аналізуванні synchronous_standby_names" +msgid "\"synchronous_standby_names\" parser failed" +msgstr "" -#: replication/syncrep.c:1025 +#: replication/syncrep.c:1019 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "кількість синхронних режимів очікування (%d) повинно бути більше нуля" -#: replication/walreceiver.c:180 +#: replication/walreceiver.c:176 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "завершення процесу walreceiver по команді адміністратора" -#: replication/walreceiver.c:305 -#, c-format -msgid "could not connect to the primary server: %s" -msgstr "не вдалося підключитися до основного серверу: %s" - -#: replication/walreceiver.c:352 +#: replication/walreceiver.c:354 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "ідентифікатор системи бази даних на основному і резервному серверах відрізняються" -#: replication/walreceiver.c:353 +#: replication/walreceiver.c:355 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "Ідентифікатор на основному сервері %s, на резервному %s." -#: replication/walreceiver.c:364 +#: replication/walreceiver.c:366 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "остання часова шкала %u на основному сервері відстає від відновлюючої часової шкали %u" -#: replication/walreceiver.c:417 +#: replication/walreceiver.c:419 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "запущено потокове передавання WAL з основного серверу з позиції %X/%X на часовій шкалі %u" -#: replication/walreceiver.c:421 +#: replication/walreceiver.c:423 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "перезапуска потокового передавання WAL з позиції %X/%X на часовій шкалі %u" -#: replication/walreceiver.c:457 +#: replication/walreceiver.c:458 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "продовжити потокове передавання WAL не можна, відновлення вже завершено" -#: replication/walreceiver.c:501 +#: replication/walreceiver.c:502 #, c-format msgid "replication terminated by primary server" msgstr "реплікація завершена основним сервером" -#: replication/walreceiver.c:502 +#: replication/walreceiver.c:503 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "На часовій шкалі %u в позиції %X/%X WAL досяг кінця." -#: replication/walreceiver.c:592 +#: replication/walreceiver.c:593 #, c-format msgid "terminating walreceiver due to timeout" msgstr "завершення процесу walreceiver через тайм-аут" -#: replication/walreceiver.c:624 +#: replication/walreceiver.c:625 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "основний сервер більше не містить WAL для запитаної часової шкали %u" -#: replication/walreceiver.c:640 replication/walreceiver.c:1066 +#: replication/walreceiver.c:641 replication/walreceiver.c:1071 #, c-format msgid "could not close WAL segment %s: %m" msgstr "не вдалося закрити сегмент WAL %s: %m" -#: replication/walreceiver.c:759 +#: replication/walreceiver.c:760 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "отримання файлу історії часової шкали для часової шкали %u з основного серверу" -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:959 #, c-format -msgid "could not write to WAL segment %s at offset %u, length %lu: %m" -msgstr "не вдалося записати в сегмент WAL %s зсув %u, довжина %lu: %m" +msgid "could not write to WAL segment %s at offset %d, length %lu: %m" +msgstr "не вдалося записати у сегмент WAL %s зі зміщенням %d, довжиною %lu: %m" -#: replication/walsender.c:519 +#: replication/walsender.c:531 #, c-format msgid "cannot use %s with a logical replication slot" msgstr "використовувати %s зі слотом логічної реплікації не можна" -#: replication/walsender.c:623 storage/smgr/md.c:1529 +#: replication/walsender.c:635 storage/smgr/md.c:1723 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "не вдалося досягти кінця файлу \"%s\": %m" -#: replication/walsender.c:627 +#: replication/walsender.c:639 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "не вдалося знайти початок файлу \"%s\": %m" -#: replication/walsender.c:704 +#: replication/walsender.c:853 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "використовувати логічний слот реплікації для фізичної реплікації, не можна" -#: replication/walsender.c:770 +#: replication/walsender.c:919 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "в історії серверу немає запитаної початкової точки %X/%X на часовій шкалі %u" -#: replication/walsender.c:773 +#: replication/walsender.c:922 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Історія цього серверу відгалузилась від часової шкали %u в позиції %X/%X." -#: replication/walsender.c:817 +#: replication/walsender.c:966 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "запитана початкова точка %X/%X попереду позиція очищених даних WAL на цьому сервері %X/%X" -#: replication/walsender.c:1010 +#: replication/walsender.c:1160 #, c-format msgid "unrecognized value for CREATE_REPLICATION_SLOT option \"%s\": \"%s\"" msgstr "нерозпізнане значення для параметру CREATE_REPLICATION_SLOT \"%s\": \"%s\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1095 +#: replication/walsender.c:1266 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s не має викликатися всередині транзакції" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1105 +#: replication/walsender.c:1276 #, c-format msgid "%s must be called inside a transaction" msgstr "%s має викликатися всередині транзакції" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1111 +#: replication/walsender.c:1282 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s повинен бути викликаний в режимі ізоляції REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1116 +#: replication/walsender.c:1287 #, c-format msgid "%s must be called in a read-only transaction" msgstr "%s має викликатися в транзакції \"лише для читання\"" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1122 +#: replication/walsender.c:1293 #, c-format msgid "%s must be called before any query" msgstr "%s має викликатися до будь-якого запиту" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1128 +#: replication/walsender.c:1299 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s не має викликатися всередині підтранзакції" -#: replication/walsender.c:1275 +#: replication/walsender.c:1472 #, c-format msgid "terminating walsender process after promotion" msgstr "завершення процесу walsender після підвищення" -#: replication/walsender.c:1696 +#: replication/walsender.c:2000 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "не можна виконувати нові команди, поки процес відправки WAL знаходиться в режимі зупинки" -#: replication/walsender.c:1731 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "не можна виконувати команди SQL в процесі відправки WAL для фізичної реплікації" -#: replication/walsender.c:1764 +#: replication/walsender.c:2068 #, c-format msgid "received replication command: %s" msgstr "отримано команду реплікації: %s" -#: replication/walsender.c:1772 tcop/fastpath.c:209 tcop/postgres.c:1138 -#: tcop/postgres.c:1496 tcop/postgres.c:1736 tcop/postgres.c:2210 -#: tcop/postgres.c:2648 tcop/postgres.c:2726 +#: 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 "поточна транзакція перервана, команди до кінця блока транзакції пропускаються" -#: replication/walsender.c:1914 replication/walsender.c:1949 +#: replication/walsender.c:2233 replication/walsender.c:2268 #, c-format msgid "unexpected EOF on standby connection" msgstr "неочікуваний обрив з'єднання з резервним сервером" -#: replication/walsender.c:1937 +#: replication/walsender.c:2256 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неприпустимий тип повідомлення резервного серверу \"%c\"" -#: replication/walsender.c:2026 +#: replication/walsender.c:2345 #, c-format msgid "unexpected message type \"%c\"" msgstr "неочікуваний тип повідомлення \"%c\"" -#: replication/walsender.c:2439 +#: replication/walsender.c:2759 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершення процесу walsender через тайм-аут реплікації" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:842 +#: rewrite/rewriteDefine.c:104 rewrite/rewriteDefine.c:835 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "правило \"%s\" для зв'язка \"%s\" вже існує" -#: rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:780 +#: rewrite/rewriteDefine.c:261 rewrite/rewriteDefine.c:773 #, c-format msgid "relation \"%s\" cannot have rules" msgstr "відношення \"%s\" не може мати правил" -#: rewrite/rewriteDefine.c:299 +#: rewrite/rewriteDefine.c:292 #, c-format msgid "rule actions on OLD are not implemented" msgstr "дії правил для OLD не реалізовані" -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:293 #, c-format msgid "Use views or triggers instead." msgstr "Використайте подання або тригери замість." -#: rewrite/rewriteDefine.c:304 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on NEW are not implemented" msgstr "дії правил для NEW не реалізовані" -#: rewrite/rewriteDefine.c:305 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use triggers instead." msgstr "Використайте тригери замість." -#: rewrite/rewriteDefine.c:319 +#: rewrite/rewriteDefine.c:312 #, c-format msgid "relation \"%s\" cannot have ON SELECT rules" msgstr "відношення \"%s\" не може мати правил ON SELECT" -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "Правила INSTEAD NOTHING для SELECT не реалізовані" -#: rewrite/rewriteDefine.c:330 +#: rewrite/rewriteDefine.c:323 #, c-format msgid "Use views instead." msgstr "Використайте подання замість." -#: rewrite/rewriteDefine.c:338 +#: rewrite/rewriteDefine.c:331 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "декілька дій в правилах для SELECT не реалізовані" -#: rewrite/rewriteDefine.c:348 +#: rewrite/rewriteDefine.c:341 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "правила для SELECT повинні мати дію INSTEAD SELECT" -#: rewrite/rewriteDefine.c:356 +#: rewrite/rewriteDefine.c:349 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "правила для SELECT не повинні містити операторів, які змінюють дані в WITH" -#: rewrite/rewriteDefine.c:364 +#: rewrite/rewriteDefine.c:357 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "в правилах для SELECT не може бути умов" -#: rewrite/rewriteDefine.c:391 +#: rewrite/rewriteDefine.c:384 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" вже є поданням" -#: rewrite/rewriteDefine.c:415 +#: rewrite/rewriteDefine.c:408 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "правило подання для \"%s\" повинно називатися \"%s\"" -#: rewrite/rewriteDefine.c:442 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "правило не може мати декілька списків RETURNING" -#: rewrite/rewriteDefine.c:447 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "Умовні правила не підтримують списки RETURNING" -#: rewrite/rewriteDefine.c:451 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "Правила non-INSTEAD не підтримують списки RETURNING" -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:458 #, c-format msgid "non-view rule for \"%s\" must not be named \"%s\"" msgstr "правило не-подання для \"%s\" не повинно мати назву \"%s\"" -#: rewrite/rewriteDefine.c:539 +#: rewrite/rewriteDefine.c:532 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "Список цілей правила для SELECT має занадто багато елементів" -#: rewrite/rewriteDefine.c:540 +#: rewrite/rewriteDefine.c:533 #, c-format msgid "RETURNING list has too many entries" msgstr "Список RETURNING має занадто багато елементів" -#: rewrite/rewriteDefine.c:567 +#: rewrite/rewriteDefine.c:560 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "перетворити зв'язок, який містить видаленні стовпці, на подання не можна" -#: rewrite/rewriteDefine.c:568 +#: rewrite/rewriteDefine.c:561 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "створити список RETURNING для зв'язка, який містить видаленні стовпці, не можна" -#: rewrite/rewriteDefine.c:574 +#: rewrite/rewriteDefine.c:567 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "Елемент результата правила для SELECT %d відрізняється іменем стовпця від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:576 +#: rewrite/rewriteDefine.c:569 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "Ім'я елемента результату SELECT \"%s\"." -#: rewrite/rewriteDefine.c:585 +#: rewrite/rewriteDefine.c:578 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "Елемент результата правила для SELECT %d відрізняється типом від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:587 +#: rewrite/rewriteDefine.c:580 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "Елемент списку RETURNING %d відрізняється типом від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:590 rewrite/rewriteDefine.c:614 +#: rewrite/rewriteDefine.c:583 rewrite/rewriteDefine.c:607 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "Елемент результату SELECT має тип %s, але стовпець має тип %s." -#: rewrite/rewriteDefine.c:593 rewrite/rewriteDefine.c:618 +#: rewrite/rewriteDefine.c:586 rewrite/rewriteDefine.c:611 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Елемент списку RETURNING має тип %s, але стовпець має тип %s." -#: rewrite/rewriteDefine.c:609 +#: rewrite/rewriteDefine.c:602 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "Елемент результата правил для SELECT %d відрізняється розміром від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:611 +#: rewrite/rewriteDefine.c:604 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "Елемент списку RETURNING %d відрізняється розміром від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:628 +#: rewrite/rewriteDefine.c:621 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "Список результату правила для SELECT має занадто мало елементів" -#: rewrite/rewriteDefine.c:629 +#: rewrite/rewriteDefine.c:622 #, c-format msgid "RETURNING list has too few entries" msgstr "Список RETURNING має занадто мало елементів" -#: rewrite/rewriteDefine.c:718 rewrite/rewriteDefine.c:833 -#: rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:711 rewrite/rewriteDefine.c:826 +#: rewrite/rewriteSupport.c:108 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "правило \"%s\" для відношення \"%s\" не існує" -#: rewrite/rewriteDefine.c:852 +#: rewrite/rewriteDefine.c:845 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "не допускається перейменування правила ON SELECT" -#: rewrite/rewriteHandler.c:583 +#: rewrite/rewriteHandler.c:582 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "Ім'я запиту WITH \"%s\" з'являється і в дії правила, і в переписаному запиті" -#: rewrite/rewriteHandler.c:610 +#: rewrite/rewriteHandler.c:609 #, 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:663 +#: rewrite/rewriteHandler.c:662 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "списки RETURNING може мати лише одне правило" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:894 rewrite/rewriteHandler.c:933 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "вставити значення non-DEFAULT до стовпця \"%s\" не можна" -#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:896 rewrite/rewriteHandler.c:962 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "Стовпець \"%s\" є ідентифікаційним стовпцем визначеним як GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:898 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для зміни використайте OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: rewrite/rewriteHandler.c:960 rewrite/rewriteHandler.c:968 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "стовпець \"%s\" може бути оновлено тільки до DEFAULT" -#: rewrite/rewriteHandler.c:1116 rewrite/rewriteHandler.c:1134 +#: rewrite/rewriteHandler.c:1115 rewrite/rewriteHandler.c:1133 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "кілька завдань для одного стовпця \"%s\"" -#: rewrite/rewriteHandler.c:2119 rewrite/rewriteHandler.c:4040 +#: rewrite/rewriteHandler.c:1698 +#, c-format +msgid "MERGE is not supported for relations with rules." +msgstr "MERGE не підтримує відношення з правилами." + +#: rewrite/rewriteHandler.c:1738 rewrite/rewriteHandler.c:3229 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "" + +#: rewrite/rewriteHandler.c:2119 rewrite/rewriteHandler.c:4221 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "виявлена безкінечна рекурсія у правилах для відносин \"%s\"" @@ -21042,163 +21712,226 @@ msgstr "виявлена безкінечна рекурсія у правила msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "виявлена безкінечна рекурсія в політиці для зв'язка \"%s\"" -#: rewrite/rewriteHandler.c:2524 +#: rewrite/rewriteHandler.c:2556 msgid "Junk view columns are not updatable." msgstr "Утилізовані стовпці подань не оновлюються." -#: rewrite/rewriteHandler.c:2529 +#: rewrite/rewriteHandler.c:2561 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Стовпці подання, які не є стовпцями базового зв'язку, не оновлюються." -#: rewrite/rewriteHandler.c:2532 +#: rewrite/rewriteHandler.c:2564 msgid "View columns that refer to system columns are not updatable." msgstr "Стовпці подання, які посилаються на системні стовпці, не оновлюються." -#: rewrite/rewriteHandler.c:2535 +#: rewrite/rewriteHandler.c:2567 msgid "View columns that return whole-row references are not updatable." msgstr "Стовпці подання, що повертають посилання на весь рядок, не оновлюються." -#: rewrite/rewriteHandler.c:2596 +#: rewrite/rewriteHandler.c:2628 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Подання які містять DISTINCT не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2599 +#: rewrite/rewriteHandler.c:2631 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Подання які містять GROUP BY не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2602 +#: rewrite/rewriteHandler.c:2634 msgid "Views containing HAVING are not automatically updatable." msgstr "Подання які містять HAVING не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2605 +#: rewrite/rewriteHandler.c:2637 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Подання які містять UNION, INTERSECT, або EXCEPT не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2608 +#: rewrite/rewriteHandler.c:2640 msgid "Views containing WITH are not automatically updatable." msgstr "Подання які містять WITH не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2611 +#: rewrite/rewriteHandler.c:2643 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Подання які містять LIMIT або OFFSET не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2623 +#: rewrite/rewriteHandler.c:2655 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Подання які повертають агрегатні функції не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2626 +#: rewrite/rewriteHandler.c:2658 msgid "Views that return window functions are not automatically updatable." msgstr "Подання які повертають віконні функції не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2629 +#: rewrite/rewriteHandler.c:2661 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Подання які повертають set-returning функції не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2636 rewrite/rewriteHandler.c:2640 -#: rewrite/rewriteHandler.c:2648 +#: rewrite/rewriteHandler.c:2668 rewrite/rewriteHandler.c:2672 +#: rewrite/rewriteHandler.c:2680 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Подання які обирають дані не з одної таблиці або подання не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2651 +#: rewrite/rewriteHandler.c:2683 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Подання які містять TABLESAMPLE не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2675 +#: rewrite/rewriteHandler.c:2707 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Подання які не мають оновлюваних стовпців не оновлюються автоматично." -#: rewrite/rewriteHandler.c:3155 +#: rewrite/rewriteHandler.c:3088 rewrite/rewriteHandler.c:3123 +#, c-format +msgid "cannot insert into view \"%s\"" +msgstr "вставити дані в подання \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3091 +#, c-format +msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." +msgstr "Щоб подання допускало додавання даних, встановіть тригер INSTEAD OF INSERT або безумовне правило ON INSERT DO INSTEAD." + +#: rewrite/rewriteHandler.c:3096 rewrite/rewriteHandler.c:3132 +#, c-format +msgid "cannot update view \"%s\"" +msgstr "оновити подання \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3099 +#, c-format +msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." +msgstr "Щоб подання допускало оновлення, встановіть тригер INSTEAD OF UPDATE або безумовне правило ON UPDATE DO INSTEAD." + +#: rewrite/rewriteHandler.c:3104 rewrite/rewriteHandler.c:3141 +#, c-format +msgid "cannot delete from view \"%s\"" +msgstr "видалити дані з подання \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3107 +#, c-format +msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." +msgstr "Щоб подання допускало видалення даних, встановіть тригер INSTEAD OF DELETE або безумновне правило ON DELETE DO INSTEAD." + +#: rewrite/rewriteHandler.c:3126 +#, c-format +msgid "To enable inserting into the view using MERGE, provide an INSTEAD OF INSERT trigger." +msgstr "" + +#: rewrite/rewriteHandler.c:3135 +#, c-format +msgid "To enable updating the view using MERGE, provide an INSTEAD OF UPDATE trigger." +msgstr "" + +#: rewrite/rewriteHandler.c:3144 +#, c-format +msgid "To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE trigger." +msgstr "" + +#: rewrite/rewriteHandler.c:3319 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставити дані в стовпець \"%s\" подання \"%s\" не можна" -#: rewrite/rewriteHandler.c:3163 +#: rewrite/rewriteHandler.c:3327 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "оновити дані в стовпці \"%s\" подання \"%s\" не можна" -#: rewrite/rewriteHandler.c:3667 +#: rewrite/rewriteHandler.c:3335 +#, c-format +msgid "cannot merge into column \"%s\" of view \"%s\"" +msgstr "" + +#: rewrite/rewriteHandler.c:3363 +#, c-format +msgid "cannot merge into view \"%s\"" +msgstr "" + +#: rewrite/rewriteHandler.c:3365 +#, c-format +msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions but not all." +msgstr "" + +#: rewrite/rewriteHandler.c:3366 +#, 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 "" + +#: rewrite/rewriteHandler.c:3879 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "Правила DO INSTEAD NOTIFY не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3678 +#: rewrite/rewriteHandler.c:3890 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "Правила DO INSTEAD NOTHING не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3692 +#: rewrite/rewriteHandler.c:3904 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "умовні правила DO INSTEAD не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3696 +#: rewrite/rewriteHandler.c:3908 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "Правила DO ALSO не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3701 +#: rewrite/rewriteHandler.c:3913 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "складові правила DO INSTEAD не підтримуються операторами, які змінюють дані у WITH" -#: rewrite/rewriteHandler.c:3968 rewrite/rewriteHandler.c:3976 -#: rewrite/rewriteHandler.c:3984 -#, c-format +#: rewrite/rewriteHandler.c:4173 msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Подання з умовними правилами DO INSTEAD не оновлюються автоматично." -#: rewrite/rewriteHandler.c:4089 +#: rewrite/rewriteHandler.c:4270 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "виконати INSERT RETURNING для зв'язка \"%s\" не можна" -#: rewrite/rewriteHandler.c:4091 +#: rewrite/rewriteHandler.c:4272 #, 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:4096 +#: rewrite/rewriteHandler.c:4277 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "виконати UPDATE RETURNING для зв'язка \"%s\" не можна" -#: rewrite/rewriteHandler.c:4098 +#: rewrite/rewriteHandler.c:4279 #, 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:4103 +#: rewrite/rewriteHandler.c:4284 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "виконати DELETE RETURNING для зв'язка \"%s\" не можна" -#: rewrite/rewriteHandler.c:4105 +#: rewrite/rewriteHandler.c:4286 #, 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:4123 +#: rewrite/rewriteHandler.c:4304 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT з реченням ON CONFLICT не можна використовувати з таблицею, яка має правила INSERT або UPDATE" -#: rewrite/rewriteHandler.c:4180 +#: rewrite/rewriteHandler.c:4361 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH не можна використовувати в запиті, який переписаний правилами в декілька запитів" -#: rewrite/rewriteManip.c:1075 +#: rewrite/rewriteManip.c:1083 #, c-format msgid "conditional utility statements are not implemented" msgstr "умовні службові оператори не реалізовані" -#: rewrite/rewriteManip.c:1419 +#: rewrite/rewriteManip.c:1430 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "Умова WHERE CURRENT OF для подання не реалізована" -#: rewrite/rewriteManip.c:1754 +#: rewrite/rewriteManip.c:1765 #, c-format msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" msgstr "Змінні NEW в правилах ON UPDATE не можуть посилатись на стовпці, які є частиною декілької призначень в команді UPDATE" @@ -21234,72 +21967,67 @@ msgstr "нерозпізнаний параметр Snowball: \"%s\"" msgid "missing Language parameter" msgstr "пропущений параметр Language" -#: statistics/extended_stats.c:179 +#: statistics/extended_stats.c:176 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "об'єкт статистики \"%s.%s\" не вдалося обчислити для відношення \"%s.%s\"" -#: statistics/mcv.c:1372 +#: statistics/mcv.c:1368 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" -#: storage/buffer/bufmgr.c:612 storage/buffer/bufmgr.c:769 +#: storage/buffer/bufmgr.c:649 storage/buffer/bufmgr.c:805 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "доступ до тимчасових таблиць з інших сесій заблоковано" -#: storage/buffer/bufmgr.c:1137 +#: storage/buffer/bufmgr.c:1532 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "неприпустима сторінка в блоці %u відношення %s; сторінка обнуляється" -#: storage/buffer/bufmgr.c:1931 storage/buffer/localbuf.c:359 +#: storage/buffer/bufmgr.c:2277 storage/buffer/localbuf.c:361 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "не можна розширити відношення %s понад %u блоків" -#: storage/buffer/bufmgr.c:1998 +#: storage/buffer/bufmgr.c:2348 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "неочікуванні дані після EOF в блоці %u відношення %s" -#: storage/buffer/bufmgr.c:2000 +#: storage/buffer/bufmgr.c:2350 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Ця ситуація може виникати через помилки в ядрі; можливо, вам слід оновити вашу систему." -#: storage/buffer/bufmgr.c:5219 +#: storage/buffer/bufmgr.c:5653 #, c-format msgid "could not write block %u of %s" msgstr "неможливо записати блок %u файлу %s" -#: storage/buffer/bufmgr.c:5221 +#: storage/buffer/bufmgr.c:5655 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Кілька неполадок --- можливо, постійна помилка запису." -#: storage/buffer/bufmgr.c:5243 storage/buffer/bufmgr.c:5263 +#: storage/buffer/bufmgr.c:5677 storage/buffer/bufmgr.c:5697 #, c-format msgid "writing block %u of relation %s" msgstr "записування блоку %u зв'язку %s" -#: storage/buffer/bufmgr.c:5593 -#, c-format -msgid "snapshot too old" -msgstr "знімок є застарим" - -#: storage/buffer/localbuf.c:219 +#: storage/buffer/localbuf.c:220 #, c-format msgid "no empty local buffer available" msgstr "немає жодного пустого локального буферу" -#: storage/buffer/localbuf.c:592 +#: storage/buffer/localbuf.c:597 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "немає доступу до тимчасових таблиць під час паралельної операції" -#: storage/buffer/localbuf.c:699 +#: storage/buffer/localbuf.c:712 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "параметр \"temp_buffers\" не можна змінити після того, як тимчасові таблиці отримали доступ в сеансі." @@ -21319,151 +22047,156 @@ msgstr "не вдалося прочитати файл \"%s\": прочитан msgid "could not read from temporary file: read only %zu of %zu bytes" msgstr "не вдалося прочитати тимчасовий файл: прочитано лише %zu з %zu байт" -#: storage/file/buffile.c:774 storage/file/buffile.c:895 +#: storage/file/buffile.c:774 storage/file/buffile.c:877 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "не вдалося визначити розмір тимчасового файлу \"%s\" з BufFile \"%s\": %m" -#: storage/file/buffile.c:974 +#: storage/file/buffile.c:956 #, c-format msgid "could not delete fileset \"%s\": %m" msgstr "не вдалося видалити набір файлів \"%s\": %m" -#: storage/file/buffile.c:992 storage/smgr/md.c:338 storage/smgr/md.c:1041 +#: storage/file/buffile.c:974 storage/smgr/md.c:336 storage/smgr/md.c:1192 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "не вдалося скоротити файл \"%s\": %m" -#: storage/file/fd.c:537 storage/file/fd.c:609 storage/file/fd.c:645 +#: storage/file/fd.c:583 storage/file/fd.c:655 storage/file/fd.c:691 #, c-format msgid "could not flush dirty data: %m" msgstr "не вдалося очистити \"брудні\" дані: %m" -#: storage/file/fd.c:567 +#: storage/file/fd.c:613 #, c-format msgid "could not determine dirty data size: %m" msgstr "не вдалося визначити розмір \"брудних\" даних: %m" -#: storage/file/fd.c:619 +#: storage/file/fd.c:665 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "не вдалося munmap() під час очищення даних: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:983 #, c-format msgid "getrlimit failed: %m" msgstr "помилка getrlimit: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1073 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "недостатньо доступних дескрипторів файлу для запуску серверного процесу" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1074 #, c-format msgid "System allows %d, server needs at least %d." msgstr "Система дозволяє %d, сервер потребує щонайменше %d." -#: storage/file/fd.c:1116 storage/file/fd.c:2565 storage/file/fd.c:2674 -#: storage/file/fd.c:2825 +#: storage/file/fd.c:1162 storage/file/fd.c:2618 storage/file/fd.c:2727 +#: storage/file/fd.c:2878 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "нестача дескрипторів файлу: %m; вивільніть і спробуйте знову" -#: storage/file/fd.c:1490 +#: storage/file/fd.c:1536 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "тимчасовий файл: шлях \"%s\", розмір %lu" -#: storage/file/fd.c:1629 +#: storage/file/fd.c:1675 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "неможливо створити тимчасовий каталог \"%s\": %m" -#: storage/file/fd.c:1636 +#: storage/file/fd.c:1682 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "неможливо створити тимчасовий підкаталог \"%s\": %m" -#: storage/file/fd.c:1833 +#: storage/file/fd.c:1879 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "неможливо створити тимчасовий файл \"%s\": %m" -#: storage/file/fd.c:1869 +#: storage/file/fd.c:1915 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "неможливо відкрити тимчасовий файл \"%s\": %m" -#: storage/file/fd.c:1910 +#: storage/file/fd.c:1956 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "помилка видалення тимчасового файлу \"%s\": %m" -#: storage/file/fd.c:1998 +#: storage/file/fd.c:2044 #, c-format msgid "could not delete file \"%s\": %m" msgstr "не вдалося видалити файл \"%s\": %m" -#: storage/file/fd.c:2185 +#: storage/file/fd.c:2234 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "розмір тимчасового файлу перевищує temp_file_limit (%d Кб)" -#: storage/file/fd.c:2541 storage/file/fd.c:2600 +#: storage/file/fd.c:2594 storage/file/fd.c:2653 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "перевищено maxAllocatedDescs (%d) при спробі відкрити файл \"%s\"" -#: storage/file/fd.c:2645 +#: storage/file/fd.c:2698 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "перевищено maxAllocatedDescs (%d) при спробі виконати команду \"%s\"" -#: storage/file/fd.c:2801 +#: storage/file/fd.c:2854 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "перевищено maxAllocatedDescs (%d) при спробі відкрити каталог \"%s\"" -#: storage/file/fd.c:3331 +#: storage/file/fd.c:3384 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "знайдено неочікуваний файл в каталозі тимчасових файлів: \"%s\"" -#: storage/file/fd.c:3449 +#: storage/file/fd.c:3502 #, c-format msgid "syncing data directory (syncfs), elapsed time: %ld.%02d s, current path: %s" msgstr "синхронізація каталогу даних (syncfs), витрачено часу: %ld.%02d с, поточний шлях: %s" -#: storage/file/fd.c:3463 -#, c-format -msgid "could not synchronize file system for file \"%s\": %m" -msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" - -#: storage/file/fd.c:3676 +#: storage/file/fd.c:3729 #, c-format msgid "syncing data directory (pre-fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "Синхронізація каталогу даних (pre-fsync), витрачено часу: %ld.%02d с, поточний шлях: %s" -#: storage/file/fd.c:3708 +#: storage/file/fd.c:3761 #, c-format msgid "syncing data directory (fsync), elapsed time: %ld.%02d s, current path: %s" msgstr "синхронізація каталогу даних (fsync), витрачено часу: %ld.%02d с, поточний шлях: %s" -#: storage/file/fd.c:3897 +#: storage/file/fd.c:3950 #, c-format -msgid "debug_io_direct is not supported on this platform." -msgstr "debug_io_direct не підтримується на цій платформі." +msgid "\"debug_io_direct\" is not supported on this platform." +msgstr "" + +#: storage/file/fd.c:3964 +#, c-format +msgid "Invalid list syntax in parameter \"%s\"" +msgstr "" -#: storage/file/fd.c:3944 +#: storage/file/fd.c:3984 #, c-format -msgid "debug_io_direct is not supported for WAL because XLOG_BLCKSZ is too small" -msgstr "debug_io_direct не підтримується для WAL, оскільки XLOG_BLCKSZ занадто малий" +msgid "Invalid option \"%s\"" +msgstr "Недійсний параметр \"%s\"" -#: storage/file/fd.c:3951 +#: storage/file/fd.c:3997 #, c-format -msgid "debug_io_direct is not supported for data because BLCKSZ is too small" -msgstr "debug_io_direct не підтримується для даних, тому що BLCKSZ занадто малий" +msgid "\"debug_io_direct\" is not supported for WAL because XLOG_BLCKSZ is too small" +msgstr "" + +#: storage/file/fd.c:4004 +#, c-format +msgid "\"debug_io_direct\" is not supported for data because BLCKSZ is too small" +msgstr "" #: storage/file/reinit.c:145 #, c-format @@ -21475,22 +22208,22 @@ msgstr "скидання нежурнальованих відношень (init msgid "resetting unlogged relations (cleanup), elapsed time: %ld.%02d s, current path: %s" msgstr "скидання нежурнальованих відношень (очищення), витрачено часу: %ld.%02d с, поточний шлях: %s" -#: storage/file/sharedfileset.c:79 +#: storage/file/sharedfileset.c:73 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "не вдалося підключитися до вже знищеному набору SharedFileSet" -#: storage/ipc/dsm.c:352 +#: storage/ipc/dsm.c:379 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "сегмент керування динамічної спільної пам'яті пошкоджений" -#: storage/ipc/dsm.c:417 +#: storage/ipc/dsm.c:444 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "сегмент керування динамічної спільної пам'яті недійсний" -#: storage/ipc/dsm.c:599 +#: storage/ipc/dsm.c:626 #, c-format msgid "too many dynamic shared memory segments" msgstr "занадто багато сегментів динамічної спільної пам'яті" @@ -21550,73 +22283,99 @@ msgstr "не вдалося закрити сегмент спільної па msgid "could not duplicate handle for \"%s\": %m" msgstr "не вдалося продублювати маркер для \"%s\": %m" -#: storage/ipc/procarray.c:3795 +#: storage/ipc/dsm_registry.c:142 +#, c-format +msgid "DSM segment name cannot be empty" +msgstr "Ім'я сегмента DSM не може бути порожнім" + +#: storage/ipc/dsm_registry.c:146 +#, c-format +msgid "DSM segment name too long" +msgstr "Занадто довге ім'я сегменту DSM" + +#: storage/ipc/dsm_registry.c:150 +#, c-format +msgid "DSM segment size must be nonzero" +msgstr "Розмір сегменту DSM повинен бути ненульовим" + +#: storage/ipc/dsm_registry.c:176 +#, c-format +msgid "requested DSM segment size does not match size of existing segment" +msgstr "розмір запитуваного сегмента DSM не збігається з розміром наявного сегмента" + +#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:352 +#: tcop/backend_startup.c:304 +#, c-format +msgid "sorry, too many clients already" +msgstr "вибачте, вже забагато клієнтів" + +#: storage/ipc/procarray.c:3857 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "база даних \"%s\" використовується підготовленими транзакціями" -#: storage/ipc/procarray.c:3827 storage/ipc/procarray.c:3836 +#: 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:3828 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 "Тільки ролі з атрибутом %s можуть припинити процеси ролей з атрибутом %s." -#: storage/ipc/procarray.c:3837 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 "Лише ролі з привілеями ролі, процес якої завершується, або з привілеями ролі \"%s\" можуть завершити цей процес." -#: storage/ipc/procsignal.c:420 +#: storage/ipc/procsignal.c:416 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "все ще чекаємо на прийняття ProcSignalBarrier від бекенд з PID %d" -#: storage/ipc/shm_mq.c:384 +#: storage/ipc/shm_mq.c:383 #, c-format msgid "cannot send a message of size %zu via shared memory queue" msgstr "не можна надсилати повідомлення розміру %zu через чергу спільної пам'яті" -#: storage/ipc/shm_mq.c:719 +#: storage/ipc/shm_mq.c:718 #, c-format msgid "invalid message size %zu in shared memory queue" msgstr "неприпустимий розмір повідомлення %zu в черзі спільної пам'яті" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:963 -#: storage/lmgr/lock.c:1001 storage/lmgr/lock.c:2786 storage/lmgr/lock.c:4171 -#: storage/lmgr/lock.c:4236 storage/lmgr/lock.c:4586 -#: storage/lmgr/predicate.c:2412 storage/lmgr/predicate.c:2427 -#: storage/lmgr/predicate.c:3824 storage/lmgr/predicate.c:4871 -#: utils/hash/dynahash.c:1107 +#: 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:2825 storage/lmgr/lock.c:4210 +#: storage/lmgr/lock.c:4275 storage/lmgr/lock.c:4625 +#: 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 #, c-format msgid "out of shared memory" msgstr "нестача спільної пам'яті" -#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 +#: storage/ipc/shmem.c:161 storage/ipc/shmem.c:257 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "нестача спільної пам'яті (потребується %zu байт)" -#: storage/ipc/shmem.c:445 +#: storage/ipc/shmem.c:436 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "не вдалося створити введення ShmemIndex для структури даних \"%s\"" -#: storage/ipc/shmem.c:460 +#: storage/ipc/shmem.c:451 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "розмір введення ShmemIndex є неправильним для структури даних \"%s\": очікувано %zu, фактично %zu" -#: storage/ipc/shmem.c:479 +#: storage/ipc/shmem.c:470 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "недостатньо спільної пам'яті для структури даних \"%s\" (потрібно було %zu байтів)" -#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 +#: storage/ipc/shmem.c:502 storage/ipc/shmem.c:521 #, c-format msgid "requested shared memory size overflows size_t" msgstr "запитаний сегмент спільної пам'яті не вміщається в size_t" @@ -21626,8 +22385,8 @@ msgstr "запитаний сегмент спільної пам'яті не в msgid "PID %d is not a PostgreSQL backend process" msgstr "PID %d не є внутрішнім процесом PostgreSQL" -#: storage/ipc/signalfuncs.c:109 storage/lmgr/proc.c:1387 -#: utils/adt/mcxtfuncs.c:190 +#: storage/ipc/signalfuncs.c:109 storage/lmgr/proc.c:1448 +#: utils/adt/mcxtfuncs.c:182 #, c-format msgid "could not send signal to process %d: %m" msgstr "не вдалося надіслати сигнал процесу %d: %m" @@ -21666,90 +22425,86 @@ msgstr[3] "процес з PID %d не завершився протягом %ll msgid "\"timeout\" must not be negative" msgstr "\"timeout\" повинен не може бути негативним" -#: storage/ipc/signalfuncs.c:284 -#, c-format -msgid "must be superuser to rotate log files with adminpack 1.0" -msgstr "прокручувати файли протоколів використовуючи adminpack 1.0, може лише суперкористувач" - -#. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:286 utils/adt/genfile.c:250 -#, c-format -msgid "Consider using %s, which is part of core, instead." -msgstr "Розгляньте використання %s, що є частиною ядра." - -#: storage/ipc/signalfuncs.c:292 storage/ipc/signalfuncs.c:312 +#: storage/ipc/signalfuncs.c:285 #, c-format msgid "rotation not possible because log collection not active" msgstr "обертання неможливе тому, що записування колекції не активоване" -#: storage/ipc/standby.c:330 +#: storage/ipc/standby.c:329 #, c-format msgid "recovery still waiting after %ld.%03d ms: %s" msgstr "відновлення все ще чекає, після %ld.%03d мс: %s" -#: storage/ipc/standby.c:339 +#: storage/ipc/standby.c:338 #, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "відновлення закінчило очікування після %ld.%03d мс: %s" -#: storage/ipc/standby.c:921 tcop/postgres.c:3384 +#: storage/ipc/standby.c:920 tcop/postgres.c:3196 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "виконання оператора скасовано через конфлікт з процесом відновлення" -#: storage/ipc/standby.c:922 tcop/postgres.c:2533 +#: storage/ipc/standby.c:921 tcop/postgres.c:2557 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Транзакція користувача призвела до взаємного блокування з процесом відновлення." -#: storage/ipc/standby.c:1488 +#: storage/ipc/standby.c:1486 msgid "unknown reason" msgstr "невідома причина" -#: storage/ipc/standby.c:1493 +#: storage/ipc/standby.c:1491 msgid "recovery conflict on buffer pin" msgstr "конфлікт відновлення, закріпленого в буфері" -#: storage/ipc/standby.c:1496 +#: storage/ipc/standby.c:1494 msgid "recovery conflict on lock" msgstr "конфлікт відновлення при блокуванні" -#: storage/ipc/standby.c:1499 +#: storage/ipc/standby.c:1497 msgid "recovery conflict on tablespace" msgstr "конфлікт відновлення у табличному просторі" -#: storage/ipc/standby.c:1502 +#: storage/ipc/standby.c:1500 msgid "recovery conflict on snapshot" msgstr "конфлікт відновлення під час знімку" -#: storage/ipc/standby.c:1505 +#: storage/ipc/standby.c:1503 msgid "recovery conflict on replication slot" msgstr "конфлікт відновлення у слоті реплікації" -#: storage/ipc/standby.c:1508 +#: storage/ipc/standby.c:1506 msgid "recovery conflict on buffer deadlock" msgstr "конфлікт відновлення при взаємному блокуванні буфера" -#: storage/ipc/standby.c:1511 +#: storage/ipc/standby.c:1509 msgid "recovery conflict on database" msgstr "конфлікт відновлення у базі даних" -#: storage/large_object/inv_api.c:191 +#: storage/large_object/inv_api.c:190 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "у введенні pg_largeobject для OID %u, сторінка %d має неприпустимий розмір поля даних %d" -#: storage/large_object/inv_api.c:273 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "неприпустимі позначки для відкриття великого об'єкту: %d" -#: storage/large_object/inv_api.c:456 +#: storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 +#: storage/large_object/inv_api.c:506 storage/large_object/inv_api.c:617 +#: storage/large_object/inv_api.c:807 +#, c-format +msgid "permission denied for large object %u" +msgstr "немає дозволу для великого об'єкта %u" + +#: storage/large_object/inv_api.c:455 #, c-format msgid "invalid whence setting: %d" msgstr "неприпустиме значення орієнтиру: %d" -#: storage/large_object/inv_api.c:628 +#: storage/large_object/inv_api.c:627 #, c-format msgid "invalid large object write request size: %d" msgstr "неприпустимий розмір запису великого об'єкту: %d" @@ -21774,211 +22529,211 @@ msgstr "виявлено взаємне блокування" msgid "See server log for query details." msgstr "Подробиці запиту перегляньте в записі серверу." -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "при оновленні кортежу (%u,%u) в зв'язку \"%s\"" -#: storage/lmgr/lmgr.c:862 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "при видаленні кортежу (%u,%u) в зв'язку \"%s\"" -#: storage/lmgr/lmgr.c:865 +#: storage/lmgr/lmgr.c:854 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "при блокуванні кортежу (%u,%u) в зв'язку \"%s\"" -#: storage/lmgr/lmgr.c:868 +#: 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:871 +#: storage/lmgr/lmgr.c:860 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "при вставці кортежу індексу (%u,%u) в зв'язку \"%s\"" -#: storage/lmgr/lmgr.c:874 +#: storage/lmgr/lmgr.c:863 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "під час перевірки унікальності кортежа (%u,%u) у відношенні \"%s\"" -#: storage/lmgr/lmgr.c:877 +#: storage/lmgr/lmgr.c:866 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "під час повторної перевірки оновленого кортежа (%u,%u) у відношенні \"%s\"" -#: storage/lmgr/lmgr.c:880 +#: storage/lmgr/lmgr.c:869 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "під час перевірки обмеження-виключення для кортежа (%u,%u) у відношенні \"%s\"" -#: storage/lmgr/lmgr.c:1174 +#: storage/lmgr/lmgr.c:1239 #, c-format msgid "relation %u of database %u" msgstr "відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1180 +#: storage/lmgr/lmgr.c:1245 #, c-format msgid "extension of relation %u of database %u" msgstr "розширення відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1186 +#: storage/lmgr/lmgr.c:1251 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid бази даних %u" -#: storage/lmgr/lmgr.c:1191 +#: storage/lmgr/lmgr.c:1256 #, c-format msgid "page %u of relation %u of database %u" msgstr "сторінка %u відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1198 +#: storage/lmgr/lmgr.c:1263 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "кортеж (%u,%u) відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1206 +#: storage/lmgr/lmgr.c:1271 #, c-format msgid "transaction %u" msgstr "транзакція %u" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1276 #, c-format msgid "virtual transaction %d/%u" msgstr "віртуальна транзакція %d/%u" -#: storage/lmgr/lmgr.c:1217 +#: storage/lmgr/lmgr.c:1282 #, c-format msgid "speculative token %u of transaction %u" msgstr "орієнтовний маркер %u транзакції %u" -#: storage/lmgr/lmgr.c:1223 +#: storage/lmgr/lmgr.c:1288 #, c-format msgid "object %u of class %u of database %u" msgstr "об’єкт %u класу %u бази даних %u" -#: storage/lmgr/lmgr.c:1231 +#: storage/lmgr/lmgr.c:1296 #, c-format msgid "user lock [%u,%u,%u]" msgstr "користувацьке блокування [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1238 +#: storage/lmgr/lmgr.c:1303 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "рекомендаційне блокування [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1246 +#: 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:1253 +#: storage/lmgr/lmgr.c:1318 #, c-format msgid "unrecognized locktag type %d" msgstr "нерозпізнаний тип блокування %d" -#: storage/lmgr/lock.c:791 +#: storage/lmgr/lock.c:812 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "поки виконується відновлення, не можна отримати блокування об'єктів бази даних в режимі %s" -#: storage/lmgr/lock.c:793 +#: storage/lmgr/lock.c:814 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Під час процесу відновлення для об'єктів бази даних може бути отримане лише блокування RowExclusiveLock або менш сильна." -#: storage/lmgr/lock.c:3235 storage/lmgr/lock.c:3303 storage/lmgr/lock.c:3419 +#: storage/lmgr/lock.c:3274 storage/lmgr/lock.c:3342 storage/lmgr/lock.c:3458 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "не можна виконати PREPARE, під час утримання блокування на рівні сеансу і на рівні транзакції для одного об'єкта" -#: storage/lmgr/predicate.c:649 +#: storage/lmgr/predicate.c:653 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "в RWConflictPool недостатньо елементів для запису про конфлікт читання/запису" -#: storage/lmgr/predicate.c:650 storage/lmgr/predicate.c:675 +#: storage/lmgr/predicate.c:654 storage/lmgr/predicate.c:679 #, c-format -msgid "You might need to run fewer transactions at a time or increase max_connections." -msgstr "Можливо, вам слід виконувати менше транзакцій в секунду або збільшити параметр max_connections." +msgid "You might need to run fewer transactions at a time or increase \"max_connections\"." +msgstr "" -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/predicate.c:678 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "в RWConflictPool недостатньо елементів для запису про потенціальний конфлікт читання/запису" -#: storage/lmgr/predicate.c:1630 +#: storage/lmgr/predicate.c:1681 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "параметр \"default_transaction_isolation\" має значення \"serializable\"." -#: storage/lmgr/predicate.c:1631 +#: storage/lmgr/predicate.c:1682 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Ви можете використати \"SET default_transaction_isolation = 'repeatable read'\" щоб змінити режим за замовчуванням." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1733 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "транзакція, яка імпортує знімок не повинна бутив READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1761 utils/time/snapmgr.c:570 -#: utils/time/snapmgr.c:576 +#: storage/lmgr/predicate.c:1812 utils/time/snapmgr.c:535 +#: utils/time/snapmgr.c:541 #, c-format msgid "could not import the requested snapshot" msgstr "не вдалося імпортувати запитаний знімок" -#: storage/lmgr/predicate.c:1762 utils/time/snapmgr.c:577 +#: storage/lmgr/predicate.c:1813 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:3935 storage/lmgr/predicate.c:3971 -#: storage/lmgr/predicate.c:4004 storage/lmgr/predicate.c:4012 -#: storage/lmgr/predicate.c:4051 storage/lmgr/predicate.c:4281 -#: storage/lmgr/predicate.c:4600 storage/lmgr/predicate.c:4612 -#: storage/lmgr/predicate.c:4659 storage/lmgr/predicate.c:4695 +#: 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 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "не вдалося серіалізувати доступ через залежність читання/запису серед транзакцій" -#: storage/lmgr/predicate.c:3937 storage/lmgr/predicate.c:3973 -#: storage/lmgr/predicate.c:4006 storage/lmgr/predicate.c:4014 -#: storage/lmgr/predicate.c:4053 storage/lmgr/predicate.c:4283 -#: storage/lmgr/predicate.c:4602 storage/lmgr/predicate.c:4614 -#: storage/lmgr/predicate.c:4661 storage/lmgr/predicate.c:4697 +#: 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 #, c-format msgid "The transaction might succeed if retried." msgstr "Транзакція може завершитися успішно, якщо повторити спробу." -#: storage/lmgr/proc.c:349 +#: storage/lmgr/proc.c:348 #, c-format -msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" -msgstr "кількість запитаних підключень резервного серверу перевищує max_wal_senders (поточна %d)" +msgid "number of requested standby connections exceeds \"max_wal_senders\" (currently %d)" +msgstr "" -#: storage/lmgr/proc.c:1480 +#: storage/lmgr/proc.c:1541 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "процес %d уникнув взаємного блокування, чекаючи в режимі %s блокування %s змінивши порядок черги після %ld.%03d мс" -#: storage/lmgr/proc.c:1495 +#: storage/lmgr/proc.c:1556 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "процес %d виявив взаємне блокування, чекаючи в режимі %s блокування %s після %ld.%03d мс" -#: storage/lmgr/proc.c:1504 +#: storage/lmgr/proc.c:1565 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "процес %d все ще чекає в режимі %s блокування %s після %ld.%03d мс" -#: storage/lmgr/proc.c:1511 +#: storage/lmgr/proc.c:1572 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "процес %d отримав в режимі %s блокування %s після %ld.%03d мс" -#: storage/lmgr/proc.c:1528 +#: storage/lmgr/proc.c:1589 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "процес %d не зміг отримати в режимі %s блокування %s після %ld.%03d мс" @@ -22011,67 +22766,202 @@ msgstr "пошкоджена довжина елементу: загальний msgid "corrupted line pointer: offset = %u, size = %u" msgstr "пошкоджений вказівник рядка: зсув = %u, розмір = %u" -#: storage/smgr/md.c:487 storage/smgr/md.c:549 +#: storage/smgr/md.c:485 storage/smgr/md.c:547 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "не можна розширити файл \"%s\" до блоку %u" -#: storage/smgr/md.c:502 storage/smgr/md.c:613 +#: storage/smgr/md.c:500 storage/smgr/md.c:611 #, c-format msgid "could not extend file \"%s\": %m" msgstr "не вдалося розширити файл \"%s\": %m" -#: storage/smgr/md.c:508 +#: storage/smgr/md.c:506 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "не вдалося розширити файл \"%s\" записано лише %d з %d байт в блоку %u" -#: storage/smgr/md.c:591 +#: storage/smgr/md.c:589 #, c-format msgid "could not extend file \"%s\" with FileFallocate(): %m" msgstr "не вдалося розширити файл \"%s\" за допомогою FileFallocate(): %m" -#: storage/smgr/md.c:782 +#: storage/smgr/md.c:869 +#, c-format +msgid "could not read blocks %u..%u in file \"%s\": %m" +msgstr "не вдалося прочитати блоки %u..%u у файлі \"%s\": %m" + +#: storage/smgr/md.c:895 +#, c-format +msgid "could not read blocks %u..%u in file \"%s\": read only %zu of %zu bytes" +msgstr "не вдалося прочитати блоки %u..%u у файлі \"%s\": прочитано лише %zu з %zu байтів" + +#: storage/smgr/md.c:995 +#, c-format +msgid "could not write blocks %u..%u in file \"%s\": %m" +msgstr "не вдалося записати блоки %u..%u у файл \"%s\": %m" + +#: storage/smgr/md.c:1163 +#, c-format +msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" +msgstr "не вдалося скоротити файл \"%s\" до %u блоків: лише %u блоків зараз" + +#: storage/smgr/md.c:1218 +#, c-format +msgid "could not truncate file \"%s\" to %u blocks: %m" +msgstr "не вдалося скоротити файл \"%s\" до %u блоків: %m" + +#: storage/smgr/md.c:1688 +#, c-format +msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" +msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): попередній сегмент має лише %u блоків" + +#: storage/smgr/md.c:1702 +#, c-format +msgid "could not open file \"%s\" (target block %u): %m" +msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): %m" + +#: tcop/backend_startup.c:85 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "Не вдалося завантажити конфігурацію SSL в дочірній процес" + +#: tcop/backend_startup.c:208 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "з'єднання отримано: хост=%s порт=%s" + +#: tcop/backend_startup.c:213 +#, c-format +msgid "connection received: host=%s" +msgstr "з'єднання отримано: хост=%s" + +#: tcop/backend_startup.c:277 +#, c-format +msgid "the database system is starting up" +msgstr "система бази даних запускається" + +#: tcop/backend_startup.c:283 #, c-format -msgid "could not read block %u in file \"%s\": %m" -msgstr "не вдалося прочитати блок %u в файлі \"%s\": %m" +msgid "the database system is not yet accepting connections" +msgstr "система бази даних ще не приймає підключення" + +#: tcop/backend_startup.c:284 +#, c-format +msgid "Consistent recovery state has not been yet reached." +msgstr "Узгодженого стану відновлення ще не досягнуто." + +#: tcop/backend_startup.c:288 +#, c-format +msgid "the database system is not accepting connections" +msgstr "система бази даних не приймає підключення" + +#: tcop/backend_startup.c:289 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "Режим Hot standby вимкнений." + +#: tcop/backend_startup.c:294 +#, c-format +msgid "the database system is shutting down" +msgstr "система бази даних завершує роботу" + +#: tcop/backend_startup.c:299 +#, c-format +msgid "the database system is in recovery mode" +msgstr "система бази даних у режимі відновлення" + +#: tcop/backend_startup.c:414 +#, c-format +msgid "received direct SSL connection request without ALPN protocol negotiation extension" +msgstr "" + +#: tcop/backend_startup.c:420 +#, c-format +msgid "direct SSL connection accepted" +msgstr "" + +#: tcop/backend_startup.c:430 +#, c-format +msgid "direct SSL connection rejected" +msgstr "" + +#: tcop/backend_startup.c:489 tcop/backend_startup.c:517 +#, c-format +msgid "incomplete startup packet" +msgstr "неповний стартовий пакет" + +#: tcop/backend_startup.c:501 tcop/backend_startup.c:538 +#, c-format +msgid "invalid length of startup packet" +msgstr "неприпустима довжина стартового пакету" + +#: tcop/backend_startup.c:573 +#, c-format +msgid "SSLRequest accepted" +msgstr "" + +#: tcop/backend_startup.c:576 +#, c-format +msgid "SSLRequest rejected" +msgstr "" + +#: tcop/backend_startup.c:585 +#, c-format +msgid "failed to send SSL negotiation response: %m" +msgstr "помилка надсилання протоколу SSL в процесі відповіді зв'язування: %m" + +#: tcop/backend_startup.c:603 +#, c-format +msgid "received unencrypted data after SSL request" +msgstr "отримані незашифровані дані після запиту SSL" + +#: tcop/backend_startup.c:604 tcop/backend_startup.c:658 +#, c-format +msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." +msgstr "Це може бути або помилкою клієнтського програмного забезпечення, або доказом спроби техносферної атаки." + +#: tcop/backend_startup.c:627 +#, c-format +msgid "GSSENCRequest accepted" +msgstr "" -#: storage/smgr/md.c:798 +#: tcop/backend_startup.c:630 #, c-format -msgid "could not read block %u in file \"%s\": read only %d of %d bytes" -msgstr "не вдалося прочитати блок %u в файлі \"%s\": прочитано лише %d з %d байт" +msgid "GSSENCRequest rejected" +msgstr "" -#: storage/smgr/md.c:856 +#: tcop/backend_startup.c:639 #, c-format -msgid "could not write block %u in file \"%s\": %m" -msgstr "не вдалося записати блок %u у файл \"%s\": %m" +msgid "failed to send GSSAPI negotiation response: %m" +msgstr "помилка надсилання GSSAPI в процесі відповіді зв'язування: %m" -#: storage/smgr/md.c:861 +#: tcop/backend_startup.c:657 #, c-format -msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" -msgstr "не вдалося записати блок %u в файл \"%s\": записано лише %d з %d байт" +msgid "received unencrypted data after GSSAPI encryption request" +msgstr "отримані незашифровані дані після запиту шифрування GSSAPI" -#: storage/smgr/md.c:1012 +#: tcop/backend_startup.c:681 #, c-format -msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" -msgstr "не вдалося скоротити файл \"%s\" до %u блоків: лише %u блоків зараз" +msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" +msgstr "протокол інтерфейсу, що не підтримується, %u.%u: сервер підтримує %u.0 до %u.%u" -#: storage/smgr/md.c:1067 +#: tcop/backend_startup.c:744 #, c-format -msgid "could not truncate file \"%s\" to %u blocks: %m" -msgstr "не вдалося скоротити файл \"%s\" до %u блоків: %m" +msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." +msgstr "Дійсні значення: \"false\", 0, \"true\", 1, \"database\"." -#: storage/smgr/md.c:1494 +#: tcop/backend_startup.c:785 #, c-format -msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" -msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): попередній сегмент має лише %u блоків" +msgid "invalid startup packet layout: expected terminator as last byte" +msgstr "неприпустима структура стартового пакету: останнім байтом очікувався термінатор" -#: storage/smgr/md.c:1508 +#: tcop/backend_startup.c:802 #, c-format -msgid "could not open file \"%s\" (target block %u): %m" -msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): %m" +msgid "no PostgreSQL user name specified in startup packet" +msgstr "не вказано жодного ім'я користувача PostgreSQL у стартовому пакеті" -#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2132 +#: tcop/fastpath.c:142 utils/fmgr/fmgr.c:2161 #, c-format msgid "function with OID %u does not exist" msgstr "функція з OID %u не існує" @@ -22086,8 +22976,8 @@ msgstr "неможливо викликати функцію \"%s\" через msgid "fastpath function call: \"%s\" (OID %u)" msgstr "виклик функції fastpath: \"%s\" (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 -#: tcop/postgres.c:2059 tcop/postgres.c:2309 +#: 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 мс" @@ -22117,315 +23007,320 @@ msgstr "неприпустимий розмір аргументу %d в пов msgid "incorrect binary data format in function argument %d" msgstr "неправильний формат двійкових даних в аргументі функції %d" -#: tcop/postgres.c:463 tcop/postgres.c:4882 +#: 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:2629 +#: 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 "повідомлення bind має %d форматів, але %d параметрів" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1735 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "в повідомленні bind передано %d параметрів, але підготовлений оператор \"%s\" потребує %d" -#: tcop/postgres.c:1937 +#: tcop/postgres.c:1949 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "невірний формат двійкових даних в параметрі bind %d" -#: tcop/postgres.c:2064 +#: tcop/postgres.c:2076 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "тривалість: %s мс, повідомлення bind %s%s%s: %s" -#: tcop/postgres.c:2118 tcop/postgres.c:2712 +#: tcop/postgres.c:2131 tcop/postgres.c:2735 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не існує" -#: tcop/postgres.c:2189 +#: tcop/postgres.c:2213 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2191 tcop/postgres.c:2317 +#: tcop/postgres.c:2215 tcop/postgres.c:2341 msgid "execute fetch from" msgstr "виконати витягнення з" -#: tcop/postgres.c:2192 tcop/postgres.c:2318 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute" msgstr "виконувати" -#: tcop/postgres.c:2314 +#: tcop/postgres.c:2338 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "тривалість: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2462 +#: tcop/postgres.c:2486 #, c-format msgid "prepare: %s" msgstr "підготовка: %s" -#: tcop/postgres.c:2487 +#: tcop/postgres.c:2511 #, c-format -msgid "parameters: %s" -msgstr "параметри: %s" +msgid "Parameters: %s" +msgstr "Параметри: %s" -#: tcop/postgres.c:2502 +#: tcop/postgres.c:2526 #, c-format -msgid "abort reason: recovery conflict" -msgstr "причина переривання: конфлікт під час відновлення" +msgid "Abort reason: recovery conflict" +msgstr "Причина переривання: конфлікт відновлення" -#: tcop/postgres.c:2518 +#: tcop/postgres.c:2542 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Користувач утримував позначку спільного буферу занадто довго." -#: tcop/postgres.c:2521 +#: tcop/postgres.c:2545 #, c-format msgid "User was holding a relation lock for too long." msgstr "Користувач утримував блокування відношення занадто довго." -#: tcop/postgres.c:2524 +#: tcop/postgres.c:2548 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "Користувач використовував табличний простір який повинен бути видаленим." -#: tcop/postgres.c:2527 +#: tcop/postgres.c:2551 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "Запиту користувача потрібно було бачити версії рядків, які повинні бути видалені." -#: tcop/postgres.c:2530 +#: tcop/postgres.c:2554 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "Користувач використовував логічний слот реплікації, який повинен бути анульований." -#: tcop/postgres.c:2536 +#: tcop/postgres.c:2560 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Користувач був підключен до бази даних, яка повинна бути видалена." -#: tcop/postgres.c:2575 +#: tcop/postgres.c:2599 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "параметр порталу \"%s\": $%d = %s" -#: tcop/postgres.c:2578 +#: tcop/postgres.c:2602 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "параметр порталу \"%s\": $%d" -#: tcop/postgres.c:2584 +#: tcop/postgres.c:2608 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "параметр порталу без назви $%d = %s" -#: tcop/postgres.c:2587 +#: tcop/postgres.c:2611 #, c-format msgid "unnamed portal parameter $%d" msgstr "параметр порталу без назви $%d" -#: tcop/postgres.c:2932 +#: tcop/postgres.c:2955 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "завершення підключення через неочікуваний сигнал SIGQUIT" -#: tcop/postgres.c:2938 +#: tcop/postgres.c:2961 #, c-format msgid "terminating connection because of crash of another server process" msgstr "завершення підключення через аварійне завершення роботи іншого серверного процесу" -#: tcop/postgres.c:2939 +#: 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:2943 tcop/postgres.c:3310 +#: 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:2950 +#: tcop/postgres.c:2973 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "завершення підключення через команду негайного завершення роботи" -#: tcop/postgres.c:3036 +#: tcop/postgres.c:3051 #, c-format msgid "floating-point exception" msgstr "виняток в операції з рухомою комою" -#: tcop/postgres.c:3037 +#: 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:3214 +#: tcop/postgres.c:3217 +#, c-format +msgid "terminating connection due to conflict with recovery" +msgstr "завершення підключення через конфлікт з процесом відновлення" + +#: tcop/postgres.c:3289 #, c-format msgid "canceling authentication due to timeout" msgstr "скасування автентифікації через тайм-аут" -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3293 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "завершення процесу автоочистки по команді адміністратора" -#: tcop/postgres.c:3222 +#: tcop/postgres.c:3297 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "завершення обробника логічної реплікації по команді адміністратора" -#: tcop/postgres.c:3239 tcop/postgres.c:3249 tcop/postgres.c:3308 -#, c-format -msgid "terminating connection due to conflict with recovery" -msgstr "завершення підключення через конфлікт з процесом відновлення" - -#: tcop/postgres.c:3260 +#: tcop/postgres.c:3317 #, c-format msgid "terminating connection due to administrator command" msgstr "завершення підключення по команді адміністратора" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3348 #, c-format msgid "connection to client lost" msgstr "підключення до клієнта втрачено" -#: tcop/postgres.c:3361 +#: tcop/postgres.c:3400 #, c-format msgid "canceling statement due to lock timeout" msgstr "виконання оператора скасовано через тайм-аут блокування" -#: tcop/postgres.c:3368 +#: tcop/postgres.c:3407 #, c-format msgid "canceling statement due to statement timeout" msgstr "виконання оператора скасовано через тайм-аут" -#: tcop/postgres.c:3375 +#: tcop/postgres.c:3414 #, c-format msgid "canceling autovacuum task" msgstr "скасування завдання автоочистки" -#: tcop/postgres.c:3398 +#: tcop/postgres.c:3427 #, c-format msgid "canceling statement due to user request" msgstr "виконання оператора скасовано по запиту користувача" -#: tcop/postgres.c:3412 +#: tcop/postgres.c:3448 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "завершення підключення через тайм-аут бездіяльності в транзакції" -#: tcop/postgres.c:3423 +#: tcop/postgres.c:3461 +#, c-format +msgid "terminating connection due to transaction timeout" +msgstr "переривання з'єднання через тайм-аут транзакції" + +#: tcop/postgres.c:3474 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "завершення підключення через тайм-аут неактивного сеансу" -#: tcop/postgres.c:3514 +#: tcop/postgres.c:3564 #, c-format msgid "stack depth limit exceeded" msgstr "перевищено ліміт глибини стека" -#: tcop/postgres.c:3515 +#: 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 "Збільште параметр конфігурації \"max_stack_depth\" (поточне значення %d КБ), попередньо переконавшись, що ОС надає достатній розмір стеку." -#: tcop/postgres.c:3562 +#: tcop/postgres.c:3612 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значення \"max_stack_depth\" не повинно перевищувати %ld КБ." -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3614 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Збільшіть ліміт глибини стека в системі через команду \"ulimit -s\" або через локальний еквівалент." -#: tcop/postgres.c:3587 +#: 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 на цій платформі." +msgid "\"client_connection_check_interval\" must be set to 0 on this platform." +msgstr "" -#: tcop/postgres.c:3608 +#: tcop/postgres.c:3658 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Не можна ввімкнути параметр, коли \"log_statement_stats\" дорівнює true." -#: tcop/postgres.c:3623 +#: 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\", коли \"log_parser_stats\", \"log_planner_stats\", або \"log_executor_stats\" дорівнюють true." -#: tcop/postgres.c:3971 +#: tcop/postgres.c:4098 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неприпустимий аргумент командного рядка для серверного процесу: %s" -#: tcop/postgres.c:3972 tcop/postgres.c:3978 +#: tcop/postgres.c:4099 tcop/postgres.c:4105 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: tcop/postgres.c:3976 +#: tcop/postgres.c:4103 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неприпустимий аргумент командного рядка: %s" -#: tcop/postgres.c:4029 +#: tcop/postgres.c:4156 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: ні база даних, ні ім'я користувача не вказані" -#: tcop/postgres.c:4779 +#: tcop/postgres.c:4909 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неприпустимий підтип повідомлення CLOSE %d" -#: tcop/postgres.c:4816 +#: tcop/postgres.c:4946 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неприпустимий підтип повідомлення DESCRIBE %d" -#: tcop/postgres.c:4903 +#: tcop/postgres.c:5033 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "виклики функції fastpath не підтримуються в підключенні реплікації" -#: tcop/postgres.c:4907 +#: tcop/postgres.c:5037 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "протокол розширених запитів не підтримується в підключенні реплікації" -#: tcop/postgres.c:5087 +#: tcop/postgres.c:5217 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "відключення: час сеансу: %d:%02d:%02d.%03d користувач = %s база даних = %s хост = %s%s%s" @@ -22446,42 +23341,42 @@ msgid "Declare it with SCROLL option to enable backward scan." msgstr "Оголосити з параметром SCROLL, щоб активувати зворотню розгортку." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:417 +#: tcop/utility.c:410 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "не можна виконати %s в транзакції \"лише для читання\"" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:435 +#: tcop/utility.c:428 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "не можна виконати %s під час паралельних операцій" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:454 +#: tcop/utility.c:447 #, c-format msgid "cannot execute %s during recovery" msgstr "не можна виконати %s під час відновлення" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:472 +#: tcop/utility.c:465 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "не можна виконати %s в межах операції з обмеженнями безпеки" #. translator: %s is name of a SQL command, eg LISTEN -#: tcop/utility.c:828 +#: tcop/utility.c:821 #, c-format msgid "cannot execute %s within a background process" msgstr "не можна виконати %s у фоновому процесі" #. translator: %s is name of a SQL command, eg CHECKPOINT -#: tcop/utility.c:954 +#: tcop/utility.c:947 #, c-format msgid "permission denied to execute %s command" msgstr "немає дозволу для виконання команди %s" -#: tcop/utility.c:956 +#: tcop/utility.c:949 #, c-format msgid "Only roles with privileges of the \"%s\" role may execute this command." msgstr "Цю команду можуть виконувати лише ролі з привілеями ролі \"%s\"." @@ -22632,13 +23527,13 @@ msgstr "неприпустима позначка affix \"%s\" зі значен msgid "could not open dictionary file \"%s\": %m" msgstr "не вдалося відкрити файл словника \"%s\": %m" -#: tsearch/spell.c:749 utils/adt/regexp.c:224 jsonpath_gram.y:559 +#: tsearch/spell.c:749 utils/adt/regexp.c:223 jsonpath_gram.y:629 #, c-format msgid "invalid regular expression: %s" msgstr "неприпустимий регулярний вираз: %s" #: tsearch/spell.c:963 tsearch/spell.c:980 tsearch/spell.c:997 -#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18123 gram.y:18140 +#: tsearch/spell.c:1014 tsearch/spell.c:1079 gram.y:18735 gram.y:18752 #, c-format msgid "syntax error" msgstr "синтаксична помилка" @@ -22674,17 +23569,17 @@ msgstr "кількість псевдонімів перевищує вказа msgid "affix file contains both old-style and new-style commands" msgstr "файл affix містить команди і в старому, і в новому стилі" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:278 utils/adt/tsvector_op.c:1128 +#: tsearch/to_tsany.c:194 utils/adt/tsvector.c:277 utils/adt/tsvector_op.c:1126 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "рядок занадто довгий для tsvector (%d байт, максимум %d байт)" -#: tsearch/ts_locale.c:238 +#: tsearch/ts_locale.c:236 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "рядок %d файлу конфігурації \"%s\": \"%s\"" -#: tsearch/ts_locale.c:317 +#: tsearch/ts_locale.c:315 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "перетворити wchar_t в кодування серверу не вдалося: %mв" @@ -22711,72 +23606,72 @@ msgstr "неприпустиме ім'я файлу конфігурації т msgid "could not open stop-word file \"%s\": %m" msgstr "не вдалося відкрити файл стоп-слова \"%s\": %m" -#: tsearch/wparser.c:308 tsearch/wparser.c:396 tsearch/wparser.c:473 +#: tsearch/wparser.c:306 tsearch/wparser.c:394 tsearch/wparser.c:471 #, c-format msgid "text search parser does not support headline creation" msgstr "аналізатор текстового пошуку не підтримує створення заголовку" -#: tsearch/wparser_def.c:2663 +#: tsearch/wparser_def.c:2664 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "нерозпізнаний параметр заголовку: \"%s\"" -#: tsearch/wparser_def.c:2673 +#: tsearch/wparser_def.c:2674 #, c-format msgid "MinWords should be less than MaxWords" msgstr "Значення MinWords повинно бути меньшим за MaxWords" -#: tsearch/wparser_def.c:2677 +#: tsearch/wparser_def.c:2678 #, c-format msgid "MinWords should be positive" msgstr "Значення MinWords повинно бути позитивним" -#: tsearch/wparser_def.c:2681 +#: tsearch/wparser_def.c:2682 #, c-format msgid "ShortWord should be >= 0" msgstr "Значення ShortWord повинно бути >= 0" -#: tsearch/wparser_def.c:2685 +#: tsearch/wparser_def.c:2686 #, c-format msgid "MaxFragments should be >= 0" msgstr "Значення MaxFragments повинно бути >= 0" -#: utils/activity/pgstat.c:438 +#: utils/activity/pgstat.c:435 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "не вдалося від'єднати файл постійної статистики \"%s\": %m" -#: utils/activity/pgstat.c:1255 +#: utils/activity/pgstat.c:1252 #, c-format msgid "invalid statistics kind: \"%s\"" msgstr "неприпустимий тип статистики: \"%s\"" -#: utils/activity/pgstat.c:1335 +#: utils/activity/pgstat.c:1332 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "не вдалося відкрити тимчасовий файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1447 +#: utils/activity/pgstat.c:1444 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "не вдалося записати в тимчасовий файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1456 +#: utils/activity/pgstat.c:1453 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "не вдалося закрити тимчасовий файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1464 +#: utils/activity/pgstat.c:1461 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "не вдалося перейменувати тимчасовий файл статистики з \"%s\" в \"%s\": %m" -#: utils/activity/pgstat.c:1513 +#: utils/activity/pgstat.c:1510 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "не вдалося відкрити файл статистики \"%s\": %m" -#: utils/activity/pgstat.c:1675 +#: utils/activity/pgstat.c:1672 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "пошкоджений файл статистики \"%s\"" @@ -22786,115 +23681,125 @@ msgstr "пошкоджений файл статистики \"%s\"" msgid "function call to dropped function" msgstr "виклик видаленої функції" -#: utils/activity/pgstat_xact.c:363 +#: utils/activity/pgstat_xact.c:362 #, c-format msgid "resetting existing statistics for kind %s, db=%u, oid=%u" msgstr "скидання існуючої статистики для типу %s, db=%u, oid=%u" -#: utils/adt/acl.c:177 utils/adt/name.c:93 +#: utils/activity/wait_event.c:207 utils/activity/wait_event.c:232 +#, c-format +msgid "wait event \"%s\" already exists in type \"%s\"" +msgstr "" + +#: utils/activity/wait_event.c:246 +#, c-format +msgid "too many custom wait events" +msgstr "" + +#: utils/adt/acl.c:183 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "занадто довгий ідентифікатор" -#: utils/adt/acl.c:178 utils/adt/name.c:94 +#: utils/adt/acl.c:184 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Ідентифікатор повинен бути короче ніж %d символів." -#: utils/adt/acl.c:266 +#: utils/adt/acl.c:272 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "нерозпізнане ключове слово: \"%s\"" -#: utils/adt/acl.c:267 +#: utils/adt/acl.c:273 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Ключовим словом ACL повинно бути \"group\" або \"user\"." -#: utils/adt/acl.c:275 +#: utils/adt/acl.c:281 #, c-format msgid "missing name" msgstr "пропущено ім'я" -#: utils/adt/acl.c:276 +#: utils/adt/acl.c:282 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "За ключовими словами \"group\" або \"user\" повинно йти ім'я." -#: utils/adt/acl.c:282 +#: utils/adt/acl.c:288 #, c-format msgid "missing \"=\" sign" msgstr "пропущено знак \"=\"" -#: utils/adt/acl.c:341 +#: utils/adt/acl.c:350 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "неприпустимий символ режиму: повинен бути один з \"%s\"" -#: utils/adt/acl.c:371 +#: utils/adt/acl.c:380 #, c-format msgid "a name must follow the \"/\" sign" msgstr "за знаком \"/\" повинно прямувати ім'я" -#: utils/adt/acl.c:383 +#: utils/adt/acl.c:392 #, c-format msgid "defaulting grantor to user ID %u" msgstr "призначив права користувач з ідентифікатором %u" -#: utils/adt/acl.c:569 +#: utils/adt/acl.c:578 #, c-format msgid "ACL array contains wrong data type" msgstr "Масив ACL містить неправильний тип даних" -#: utils/adt/acl.c:573 +#: utils/adt/acl.c:582 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "Масиви ACL повинні бути одновимірними" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:586 #, c-format msgid "ACL arrays must not contain null values" msgstr "Масиви ACL не повинні містити значення null" -#: utils/adt/acl.c:606 +#: utils/adt/acl.c:615 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "зайве сміття в кінці специфікації ACL" -#: utils/adt/acl.c:1248 +#: utils/adt/acl.c:1263 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "параметри призначення прав не можна повернути тому, хто призначив їх вам" -#: utils/adt/acl.c:1564 +#: utils/adt/acl.c:1579 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert більше не підтримується" -#: utils/adt/acl.c:1574 +#: utils/adt/acl.c:1589 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove більше не підтримується" -#: utils/adt/acl.c:1693 +#: utils/adt/acl.c:1709 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "нерозпізнаний тип прав: \"%s\"" -#: utils/adt/acl.c:3476 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:5023 +#: utils/adt/acl.c:5196 #, c-format 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:878 utils/adt/json.c:694 utils/adt/json.c:831 -#: utils/adt/json.c:869 utils/adt/jsonb.c:1139 utils/adt/jsonb.c:1211 -#: utils/adt/jsonb.c:1629 utils/adt/jsonb.c:1817 utils/adt/jsonb.c:1827 +#: utils/adt/array_userfuncs.c:866 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 "не вдалося визначити тип вхідних даних" @@ -22905,17 +23810,17 @@ msgid "input data type is not an array" msgstr "тип вхідних даних не є масивом" #: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 -#: utils/adt/float.c:1228 utils/adt/float.c:1302 utils/adt/float.c:4117 -#: utils/adt/float.c:4155 utils/adt/int.c:778 utils/adt/int.c:800 +#: 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:1257 utils/adt/numeric.c:1901 utils/adt/numeric.c:4388 -#: utils/adt/rangetypes.c:1481 utils/adt/rangetypes.c:1494 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1132 -#: utils/adt/varlena.c:3134 +#: 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 "ціле число поза діапазоном" @@ -22952,267 +23857,278 @@ msgstr "Масиви з різними вимірами елементів не msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Масиви з різними вимірами не є сумісними для об'єднання." -#: utils/adt/array_userfuncs.c:987 utils/adt/array_userfuncs.c:995 -#: utils/adt/arrayfuncs.c:5639 utils/adt/arrayfuncs.c:5645 +#: 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 "накопичувати масиви різної розмірності не можна" -#: utils/adt/array_userfuncs.c:1286 utils/adt/array_userfuncs.c:1440 +#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "пошук елементів у багатовимірних масивах не підтримується" -#: utils/adt/array_userfuncs.c:1315 +#: utils/adt/array_userfuncs.c:1301 #, c-format msgid "initial position must not be null" msgstr "початкова позиція не повинна бути null" -#: utils/adt/array_userfuncs.c:1688 +#: utils/adt/array_userfuncs.c:1674 #, c-format msgid "sample size must be between 0 and %d" msgstr "розмір вибірки повинен бути між 0 і %d" -#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:288 -#: utils/adt/arrayfuncs.c:299 utils/adt/arrayfuncs.c:321 -#: utils/adt/arrayfuncs.c:338 utils/adt/arrayfuncs.c:352 -#: utils/adt/arrayfuncs.c:360 utils/adt/arrayfuncs.c:367 -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:522 -#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:548 -#: utils/adt/arrayfuncs.c:569 utils/adt/arrayfuncs.c:599 -#: utils/adt/arrayfuncs.c:606 utils/adt/arrayfuncs.c:614 -#: utils/adt/arrayfuncs.c:648 utils/adt/arrayfuncs.c:671 -#: utils/adt/arrayfuncs.c:691 utils/adt/arrayfuncs.c:808 -#: utils/adt/arrayfuncs.c:817 utils/adt/arrayfuncs.c:847 -#: utils/adt/arrayfuncs.c:862 utils/adt/arrayfuncs.c:915 +#: utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:273 +#: utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:307 +#: utils/adt/arrayfuncs.c:440 utils/adt/arrayfuncs.c:454 +#: utils/adt/arrayfuncs.c:466 utils/adt/arrayfuncs.c:636 +#: utils/adt/arrayfuncs.c:668 utils/adt/arrayfuncs.c:703 +#: utils/adt/arrayfuncs.c:718 utils/adt/arrayfuncs.c:777 +#: utils/adt/arrayfuncs.c:782 utils/adt/arrayfuncs.c:870 +#: utils/adt/arrayfuncs.c:897 utils/adt/arrayfuncs.c:904 +#: utils/adt/arrayfuncs.c:941 #, c-format msgid "malformed array literal: \"%s\"" msgstr "неправильний літерал масиву: \"%s\"" -#: utils/adt/arrayfuncs.c:275 -#, c-format -msgid "\"[\" must introduce explicitly-specified array dimensions." -msgstr "\"[\" повинно представляти явно вказані виміри масиву." - -#: utils/adt/arrayfuncs.c:289 +#: utils/adt/arrayfuncs.c:265 #, c-format -msgid "Missing array dimension value." -msgstr "Пропущено значення виміру масиву." +msgid "Array value must start with \"{\" or dimension information." +msgstr "Значення масиву повинно починатись з \"{\" або з інформації про вимір." -#: utils/adt/arrayfuncs.c:300 utils/adt/arrayfuncs.c:339 +#: utils/adt/arrayfuncs.c:274 utils/adt/arrayfuncs.c:467 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "Пропущено \"%s\" після вимірів масиву." -#: utils/adt/arrayfuncs.c:309 utils/adt/arrayfuncs.c:2969 -#: utils/adt/arrayfuncs.c:3014 utils/adt/arrayfuncs.c:3029 +#: utils/adt/arrayfuncs.c:285 #, c-format -msgid "upper bound cannot be less than lower bound" -msgstr "верхня границя не може бути меньше нижньої границі" +msgid "Array contents must start with \"{\"." +msgstr "Вміст масиву повинен починатись з \"{\"." -#: utils/adt/arrayfuncs.c:322 +#: utils/adt/arrayfuncs.c:308 utils/adt/multirangetypes.c:292 #, c-format -msgid "Array value must start with \"{\" or dimension information." -msgstr "Значення масиву повинно починатись з \"{\" або з інформації про вимір." +msgid "Junk after closing right brace." +msgstr "Сміття після закриття правої дужки." -#: utils/adt/arrayfuncs.c:353 +#: utils/adt/arrayfuncs.c:431 utils/adt/arrayfuncs.c:643 #, c-format -msgid "Array contents must start with \"{\"." -msgstr "Вміст масиву повинен починатись з \"{\"." +msgid "number of array dimensions exceeds the maximum allowed (%d)" +msgstr "кількість вимірів масиву перевищує максимально дозволену (%d)" -#: utils/adt/arrayfuncs.c:361 utils/adt/arrayfuncs.c:368 +#: utils/adt/arrayfuncs.c:441 #, c-format -msgid "Specified array dimensions do not match array contents." -msgstr "Вказані виміри масиву не відповідають його вмісту." +msgid "\"[\" must introduce explicitly-specified array dimensions." +msgstr "\"[\" повинно представляти явно вказані виміри масиву." -#: utils/adt/arrayfuncs.c:508 utils/adt/arrayfuncs.c:534 -#: utils/adt/multirangetypes.c:166 utils/adt/rangetypes.c:2405 -#: utils/adt/rangetypes.c:2413 utils/adt/rowtypes.c:219 -#: utils/adt/rowtypes.c:230 +#: utils/adt/arrayfuncs.c:455 #, c-format -msgid "Unexpected end of input." -msgstr "Неочікуваний кінец введення." +msgid "Missing array dimension value." +msgstr "Пропущено значення виміру масиву." -#: utils/adt/arrayfuncs.c:523 utils/adt/arrayfuncs.c:570 -#: utils/adt/arrayfuncs.c:600 utils/adt/arrayfuncs.c:649 +#: 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 "верхня границя не може бути меньше нижньої границі" + +#: utils/adt/arrayfuncs.c:487 +#, c-format +msgid "array upper bound is too large: %d" +msgstr "верхня межа масиву занадто велика: %d" + +#: utils/adt/arrayfuncs.c:538 +#, c-format +msgid "array bound is out of integer range" +msgstr "межа масиву знаходиться за межами цілочисельного діапазону" + +#: utils/adt/arrayfuncs.c:637 utils/adt/arrayfuncs.c:669 +#: utils/adt/arrayfuncs.c:704 utils/adt/arrayfuncs.c:898 #, c-format msgid "Unexpected \"%c\" character." msgstr "Неочікуваний символ \"%c\"." -#: utils/adt/arrayfuncs.c:549 utils/adt/arrayfuncs.c:672 +#: utils/adt/arrayfuncs.c:719 #, c-format msgid "Unexpected array element." msgstr "Неочікуваний елемент масиву." -#: utils/adt/arrayfuncs.c:607 +#: utils/adt/arrayfuncs.c:778 #, c-format -msgid "Unmatched \"%c\" character." -msgstr "Невідповідний символ \"%c\"." +msgid "Specified array dimensions do not match array contents." +msgstr "Вказані виміри масиву не відповідають його вмісту." -#: utils/adt/arrayfuncs.c:615 utils/adt/jsonfuncs.c:2553 +#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2598 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Багатовимірні масиви повинні мати вкладені масиви з відповідними вимірами." -#: utils/adt/arrayfuncs.c:692 utils/adt/multirangetypes.c:293 +#: utils/adt/arrayfuncs.c:871 utils/adt/arrayfuncs.c:905 #, c-format -msgid "Junk after closing right brace." -msgstr "Сміття після закриття правої дужки." +msgid "Incorrectly quoted array element." +msgstr "Неправильно процитовано елемент масиву." + +#: utils/adt/arrayfuncs.c:942 utils/adt/multirangetypes.c:165 +#: utils/adt/rangetypes.c:2464 utils/adt/rangetypes.c:2472 +#: utils/adt/rowtypes.c:218 utils/adt/rowtypes.c:229 +#, c-format +msgid "Unexpected end of input." +msgstr "Неочікуваний кінец введення." -#: utils/adt/arrayfuncs.c:1326 utils/adt/arrayfuncs.c:3528 -#: utils/adt/arrayfuncs.c:6129 +#: 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" -#: utils/adt/arrayfuncs.c:1337 +#: utils/adt/arrayfuncs.c:1312 #, c-format msgid "invalid array flags" msgstr "неприпустимі позначки масиву" -#: utils/adt/arrayfuncs.c:1359 +#: utils/adt/arrayfuncs.c:1334 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "двійкові дані мають тип елементу масиву %u (%s) замість очікуваного %u (%s)" -#: utils/adt/arrayfuncs.c:1403 utils/adt/multirangetypes.c:451 -#: utils/adt/rangetypes.c:344 utils/cache/lsyscache.c:2916 +#: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 #, c-format msgid "no binary input function available for type %s" msgstr "для типу %s немає функції введення двійкових даних" -#: utils/adt/arrayfuncs.c:1543 +#: utils/adt/arrayfuncs.c:1509 #, c-format msgid "improper binary format in array element %d" msgstr "неправильний двійковий формат в елементі масиву %d" -#: utils/adt/arrayfuncs.c:1624 utils/adt/multirangetypes.c:456 -#: utils/adt/rangetypes.c:349 utils/cache/lsyscache.c:2949 +#: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 #, c-format msgid "no binary output function available for type %s" msgstr "для типу %s немає функції виводу двійкових даних" -#: utils/adt/arrayfuncs.c:2103 +#: utils/adt/arrayfuncs.c:2067 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "розрізання масивів постійної довжини не реалізовано" -#: utils/adt/arrayfuncs.c:2281 utils/adt/arrayfuncs.c:2303 -#: utils/adt/arrayfuncs.c:2352 utils/adt/arrayfuncs.c:2606 -#: utils/adt/arrayfuncs.c:2944 utils/adt/arrayfuncs.c:6115 -#: utils/adt/arrayfuncs.c:6141 utils/adt/arrayfuncs.c:6152 -#: utils/adt/json.c:1497 utils/adt/json.c:1569 utils/adt/jsonb.c:1416 -#: utils/adt/jsonb.c:1500 utils/adt/jsonfuncs.c:4434 utils/adt/jsonfuncs.c:4587 -#: utils/adt/jsonfuncs.c:4698 utils/adt/jsonfuncs.c:4746 +#: 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:2286 utils/adt/arrayfuncs.c:2410 -#: utils/adt/arrayfuncs.c:2689 utils/adt/arrayfuncs.c:3019 +#: 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 "верхній індекс масиву поза діапазоном" -#: utils/adt/arrayfuncs.c:2291 +#: utils/adt/arrayfuncs.c:2255 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "не можна призначати значення null значення елементу масива постійної довжини" -#: utils/adt/arrayfuncs.c:2891 +#: utils/adt/arrayfuncs.c:2855 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "оновлення в зрізах масивів постійної довжини не реалізовані" -#: utils/adt/arrayfuncs.c:2922 +#: utils/adt/arrayfuncs.c:2886 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "у вказівці зрізу масива повинні бути задані обидві межі" -#: utils/adt/arrayfuncs.c:2923 +#: utils/adt/arrayfuncs.c:2887 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Під час присвоєння значень зрізу в пустому масиві, межі зрізу повинні вказуватися повністю." -#: utils/adt/arrayfuncs.c:2934 utils/adt/arrayfuncs.c:3046 +#: utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:3017 #, c-format msgid "source array too small" msgstr "вихідний масив занадто малий" -#: utils/adt/arrayfuncs.c:3686 +#: utils/adt/arrayfuncs.c:3657 #, c-format msgid "null array element not allowed in this context" msgstr "елемент масиву null не дозволений в цьому контексті" -#: utils/adt/arrayfuncs.c:3857 utils/adt/arrayfuncs.c:4028 -#: utils/adt/arrayfuncs.c:4419 +#: 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:4206 utils/adt/multirangetypes.c:2806 -#: utils/adt/multirangetypes.c:2878 utils/adt/rangetypes.c:1354 -#: utils/adt/rangetypes.c:1418 utils/adt/rowtypes.c:1885 +#: 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:4334 utils/adt/rowtypes.c:2006 +#: 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:5529 +#: utils/adt/arrayfuncs.c:5506 #, c-format msgid "data type %s is not an array type" msgstr "тип даних %s не є типом масиву" -#: utils/adt/arrayfuncs.c:5584 +#: utils/adt/arrayfuncs.c:5561 #, c-format msgid "cannot accumulate null arrays" msgstr "накопичувати null-масиви не можна" -#: utils/adt/arrayfuncs.c:5612 +#: utils/adt/arrayfuncs.c:5589 #, c-format msgid "cannot accumulate empty arrays" msgstr "накопичувати пусті масиви не можна" -#: utils/adt/arrayfuncs.c:6013 utils/adt/arrayfuncs.c:6053 +#: utils/adt/arrayfuncs.c:5990 utils/adt/arrayfuncs.c:6030 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "масив розмірності або масив нижніх границь не може бути null" -#: utils/adt/arrayfuncs.c:6116 utils/adt/arrayfuncs.c:6142 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "Dimension array must be one dimensional." msgstr "Масив розмірності повинен бути одновимірним." -#: utils/adt/arrayfuncs.c:6121 utils/adt/arrayfuncs.c:6147 +#: utils/adt/arrayfuncs.c:6098 utils/adt/arrayfuncs.c:6124 #, c-format msgid "dimension values cannot be null" msgstr "значення розмірностей не можуть бути null" -#: utils/adt/arrayfuncs.c:6153 +#: utils/adt/arrayfuncs.c:6130 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Масив нижніх границь відрізняється за розміром від масиву розмірностей." -#: utils/adt/arrayfuncs.c:6431 +#: utils/adt/arrayfuncs.c:6411 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "видалення елементів з багатовимірних масивів не підтримується" -#: utils/adt/arrayfuncs.c:6708 +#: utils/adt/arrayfuncs.c:6688 #, c-format msgid "thresholds must be one-dimensional array" msgstr "граничне значення повинно вказуватись одновимірним масивом" -#: utils/adt/arrayfuncs.c:6713 +#: utils/adt/arrayfuncs.c:6693 #, c-format msgid "thresholds array must not contain NULLs" msgstr "масив границь не повинен містити NULL" -#: utils/adt/arrayfuncs.c:6946 +#: utils/adt/arrayfuncs.c:6926 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "кількість елементів для обрізки має бути між 0 і %d" @@ -23227,22 +24143,22 @@ msgstr "індекс елементу масиву має бути цілим ч msgid "array subscript in assignment must not be null" msgstr "підрядковий символ масиву у призначенні не може бути NULL" -#: utils/adt/arrayutils.c:155 +#: utils/adt/arrayutils.c:140 #, c-format msgid "array lower bound is too large: %d" msgstr "нижня границя масиву занадто велика: %d" -#: utils/adt/arrayutils.c:257 +#: utils/adt/arrayutils.c:242 #, c-format msgid "typmod array must be type cstring[]" msgstr "масив typmod повинен мати тип cstring[]" -#: utils/adt/arrayutils.c:262 +#: utils/adt/arrayutils.c:247 #, c-format msgid "typmod array must be one-dimensional" msgstr "масив typmod повинен бути одновимірним" -#: utils/adt/arrayutils.c:267 +#: utils/adt/arrayutils.c:252 #, c-format msgid "typmod array must not contain nulls" msgstr "масив typmod не повинен містити елементи nulls" @@ -23253,48 +24169,52 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "перетворення кодування з %s в ASCII не підтримується" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:4017 -#: utils/adt/float.c:206 utils/adt/float.c:293 utils/adt/float.c:307 -#: utils/adt/float.c:412 utils/adt/float.c:495 utils/adt/float.c:509 +#: 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:183 utils/adt/mac.c:94 utils/adt/mac8.c:225 -#: utils/adt/network.c:99 utils/adt/numeric.c:795 utils/adt/numeric.c:7136 -#: utils/adt/numeric.c:7339 utils/adt/numeric.c:8286 utils/adt/numutils.c:357 -#: utils/adt/numutils.c:619 utils/adt/numutils.c:881 utils/adt/numutils.c:920 -#: utils/adt/numutils.c:942 utils/adt/numutils.c:1006 utils/adt/numutils.c:1028 -#: utils/adt/pg_lsn.c:74 utils/adt/tid.c:72 utils/adt/tid.c:80 -#: utils/adt/tid.c:94 utils/adt/tid.c:103 utils/adt/timestamp.c:494 -#: utils/adt/uuid.c:135 utils/adt/xid8funcs.c:362 +#: 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:360 #, 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:351 -#: utils/adt/numutils.c:613 utils/adt/numutils.c:875 utils/adt/numutils.c:926 -#: utils/adt/numutils.c:965 utils/adt/numutils.c:1012 +#: 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 "значення \"%s\" поза діапазоном для типу %s" +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:105 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:515 utils/adt/int8.c:573 -#: utils/adt/int8.c:943 utils/adt/int8.c:1023 utils/adt/int8.c:1085 -#: utils/adt/int8.c:1165 utils/adt/numeric.c:3175 utils/adt/numeric.c:3198 -#: utils/adt/numeric.c:3283 utils/adt/numeric.c:3301 utils/adt/numeric.c:3397 -#: utils/adt/numeric.c:8835 utils/adt/numeric.c:9148 utils/adt/numeric.c:9496 -#: utils/adt/numeric.c:9612 utils/adt/numeric.c:11122 -#: utils/adt/timestamp.c:3430 +#: 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 "значення \"%s\" поза діапазоном для типу %s" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" @@ -23305,185 +24225,211 @@ msgstr "значення \"char\" поза діапазоном" msgid "could not compute %s hash: %s" msgstr "не вдалося обчислити %s хеш: %s" -#: utils/adt/date.c:63 utils/adt/timestamp.c:100 utils/adt/varbit.c:105 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:64 utils/adt/timestamp.c:116 utils/adt/varbit.c:105 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "неприпустимий тип модифікатора" -#: utils/adt/date.c:75 +#: utils/adt/date.c:76 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s точність не повинна бути від'ємною" -#: utils/adt/date.c:81 +#: utils/adt/date.c:82 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s точність зменшена до дозволеного максимуму, %d" -#: utils/adt/date.c:166 utils/adt/date.c:174 utils/adt/formatting.c:4241 -#: utils/adt/formatting.c:4250 utils/adt/formatting.c:4363 -#: utils/adt/formatting.c:4373 +#: 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 #, c-format msgid "date out of range: \"%s\"" msgstr "дата поза діапазоном: \"%s\"" -#: utils/adt/date.c:221 utils/adt/date.c:519 utils/adt/date.c:543 -#: utils/adt/rangetypes.c:1577 utils/adt/rangetypes.c:1592 utils/adt/xml.c:2470 +#: 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 "дата поза діапазоном" -#: utils/adt/date.c:267 utils/adt/timestamp.c:582 +#: utils/adt/date.c:268 utils/adt/timestamp.c:598 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "значення поля типу date поза діапазоном: %d-%02d-%02d" -#: utils/adt/date.c:274 utils/adt/date.c:283 utils/adt/timestamp.c:588 +#: utils/adt/date.c:275 utils/adt/date.c:284 utils/adt/timestamp.c:604 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "дата поза діапазоном: %d-%02d-%02d" -#: utils/adt/date.c:494 +#: utils/adt/date.c:495 #, c-format msgid "cannot subtract infinite dates" msgstr "віднімати безкінечні дати не можна" -#: utils/adt/date.c:592 utils/adt/date.c:655 utils/adt/date.c:691 -#: utils/adt/date.c:2885 utils/adt/date.c:2895 +#: utils/adt/date.c:593 utils/adt/date.c:656 utils/adt/date.c:692 +#: utils/adt/date.c:2906 utils/adt/date.c:2916 #, c-format msgid "date out of range for timestamp" msgstr "для позначки часу дата поза діапазоном" -#: utils/adt/date.c:1121 utils/adt/date.c:1204 utils/adt/date.c:1220 -#: utils/adt/date.c:2206 utils/adt/date.c:2990 utils/adt/timestamp.c:4143 -#: utils/adt/timestamp.c:4336 utils/adt/timestamp.c:4478 -#: utils/adt/timestamp.c:4731 utils/adt/timestamp.c:4932 -#: utils/adt/timestamp.c:4979 utils/adt/timestamp.c:5203 -#: utils/adt/timestamp.c:5250 utils/adt/timestamp.c:5380 +#: utils/adt/date.c:1122 utils/adt/date.c:1205 utils/adt/date.c:1221 +#: utils/adt/date.c:2215 utils/adt/date.c:3011 utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4941 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5342 utils/adt/timestamp.c:5543 +#: utils/adt/timestamp.c:5590 utils/adt/timestamp.c:5814 +#: utils/adt/timestamp.c:5861 utils/adt/timestamp.c:5941 +#: utils/adt/timestamp.c:6070 #, c-format msgid "unit \"%s\" not supported for type %s" msgstr "одиниця \"%s\" не підтримується для типу %s" -#: utils/adt/date.c:1229 utils/adt/date.c:2222 utils/adt/date.c:3010 -#: utils/adt/timestamp.c:4157 utils/adt/timestamp.c:4353 -#: utils/adt/timestamp.c:4492 utils/adt/timestamp.c:4691 -#: utils/adt/timestamp.c:4988 utils/adt/timestamp.c:5259 -#: utils/adt/timestamp.c:5441 +#: utils/adt/date.c:1230 utils/adt/date.c:2231 utils/adt/date.c:3031 +#: utils/adt/timestamp.c:4740 utils/adt/timestamp.c:4958 +#: utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5302 +#: utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5870 +#: utils/adt/timestamp.c:5911 utils/adt/timestamp.c:6131 #, c-format msgid "unit \"%s\" not recognized for type %s" msgstr "нерозпізнана одиниця \"%s\" для типу %s" -#: utils/adt/date.c:1313 utils/adt/date.c:1359 utils/adt/date.c:1918 -#: utils/adt/date.c:1949 utils/adt/date.c:1978 utils/adt/date.c:2848 -#: utils/adt/date.c:3080 utils/adt/datetime.c:424 utils/adt/datetime.c:1809 -#: utils/adt/formatting.c:4081 utils/adt/formatting.c:4117 -#: utils/adt/formatting.c:4210 utils/adt/formatting.c:4339 utils/adt/json.c:467 -#: utils/adt/json.c:506 utils/adt/timestamp.c:232 utils/adt/timestamp.c:264 -#: utils/adt/timestamp.c:700 utils/adt/timestamp.c:709 -#: utils/adt/timestamp.c:787 utils/adt/timestamp.c:820 -#: utils/adt/timestamp.c:2933 utils/adt/timestamp.c:2954 -#: utils/adt/timestamp.c:2967 utils/adt/timestamp.c:2978 -#: utils/adt/timestamp.c:2984 utils/adt/timestamp.c:2992 -#: utils/adt/timestamp.c:3053 utils/adt/timestamp.c:3076 -#: utils/adt/timestamp.c:3089 utils/adt/timestamp.c:3103 -#: utils/adt/timestamp.c:3111 utils/adt/timestamp.c:3119 -#: utils/adt/timestamp.c:3847 utils/adt/timestamp.c:3971 -#: utils/adt/timestamp.c:4061 utils/adt/timestamp.c:4151 -#: utils/adt/timestamp.c:4244 utils/adt/timestamp.c:4347 -#: utils/adt/timestamp.c:4796 utils/adt/timestamp.c:5070 -#: utils/adt/timestamp.c:5509 utils/adt/timestamp.c:5519 -#: utils/adt/timestamp.c:5524 utils/adt/timestamp.c:5530 -#: utils/adt/timestamp.c:5563 utils/adt/timestamp.c:5650 -#: utils/adt/timestamp.c:5691 utils/adt/timestamp.c:5695 -#: utils/adt/timestamp.c:5749 utils/adt/timestamp.c:5753 -#: utils/adt/timestamp.c:5759 utils/adt/timestamp.c:5793 utils/adt/xml.c:2492 -#: utils/adt/xml.c:2499 utils/adt/xml.c:2519 utils/adt/xml.c:2526 +#: 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:2574 +#: utils/adt/xml.c:2581 utils/adt/xml.c:2601 utils/adt/xml.c:2608 #, c-format msgid "timestamp out of range" msgstr "позначка часу поза діапазоном" -#: utils/adt/date.c:1535 utils/adt/date.c:2343 utils/adt/formatting.c:4431 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 #, c-format msgid "time out of range" msgstr "час поза діапазоном" -#: utils/adt/date.c:1587 utils/adt/timestamp.c:597 +#: utils/adt/date.c:1588 utils/adt/timestamp.c:613 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "значення поля типу time поза діапазоном: %d:%02d:%02g" -#: utils/adt/date.c:2107 utils/adt/date.c:2647 utils/adt/float.c:1042 -#: utils/adt/float.c:1118 utils/adt/int.c:635 utils/adt/int.c:682 -#: utils/adt/int.c:717 utils/adt/int8.c:414 utils/adt/numeric.c:2579 -#: utils/adt/timestamp.c:3501 utils/adt/timestamp.c:3528 -#: utils/adt/timestamp.c:3559 +#: utils/adt/date.c:2020 +#, c-format +msgid "cannot convert infinite interval to time" +msgstr "не можна перетворити нескінченний інтервал у час" + +#: utils/adt/date.c:2061 utils/adt/date.c:2605 +#, c-format +msgid "cannot add infinite interval to time" +msgstr "не можна додати нескінченний інтервал до часу" + +#: utils/adt/date.c:2084 utils/adt/date.c:2632 +#, c-format +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: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 "неприпустимий розмір preceding або following у віконній функції" -#: utils/adt/date.c:2351 +#: utils/adt/date.c:2360 #, c-format msgid "time zone displacement out of range" msgstr "зсув часового поясу поза діапазоном" -#: utils/adt/date.c:3111 utils/adt/timestamp.c:5552 utils/adt/timestamp.c:5782 +#: utils/adt/date.c:3132 utils/adt/timestamp.c:6242 utils/adt/timestamp.c:6479 +#, c-format +msgid "interval time zone \"%s\" must be finite" +msgstr "часовий пояс інтервалу \"%s\" має бути скінченним" + +#: utils/adt/date.c:3139 utils/adt/timestamp.c:6249 utils/adt/timestamp.c:6486 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "інтервал \"%s\", який задає часовий пояс, не повинен включати місяці або дні" -#: utils/adt/datetime.c:3223 utils/adt/datetime.c:4002 -#: utils/adt/datetime.c:4008 utils/adt/timestamp.c:512 +#: utils/adt/datetime.c:3232 utils/adt/datetime.c:4127 +#: utils/adt/datetime.c:4133 utils/adt/timestamp.c:528 #, c-format msgid "time zone \"%s\" not recognized" msgstr "часовий пояс \"%s\" не розпізнаний" -#: utils/adt/datetime.c:3976 utils/adt/datetime.c:3983 +#: utils/adt/datetime.c:4101 utils/adt/datetime.c:4108 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "значення поля типу дата/час поза діапазоном: \"%s\"" -#: utils/adt/datetime.c:3985 +#: utils/adt/datetime.c:4110 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Можливо, вам потрібні інші налаштування \"datestyle\"." -#: utils/adt/datetime.c:3990 +#: utils/adt/datetime.c:4115 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "значення поля типу інтервал, поза діапазоном: \"%s\"" -#: utils/adt/datetime.c:3996 +#: utils/adt/datetime.c:4121 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "зміщення часового поясу, поза діапазоном: \"%s\"" -#: utils/adt/datetime.c:4010 +#: utils/adt/datetime.c:4135 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Це ім'я часового поясу з'являється у файлі конфігурації часового поясу з кодом \"%s\"." -#: utils/adt/datum.c:91 utils/adt/datum.c:103 +#: utils/adt/datum.c:90 utils/adt/datum.c:102 #, c-format msgid "invalid Datum pointer" msgstr "неприпустимий вказівник Datum" -#: utils/adt/dbsize.c:761 utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:764 utils/adt/dbsize.c:840 #, c-format msgid "invalid size: \"%s\"" msgstr "неприпустимий розмір: \"%s\"" -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:841 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Неприпустима одиниця вимірювання розміру: \"%s\"." -#: utils/adt/dbsize.c:839 +#: utils/adt/dbsize.c:842 #, c-format msgid "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." msgstr "Припустимі одиниці вимірювання: \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", і \"PB\"." -#: utils/adt/domains.c:92 +#: utils/adt/domains.c:95 #, c-format msgid "type %s is not a domain" msgstr "тип %s не є доменом" @@ -23533,10 +24479,10 @@ msgstr "неприпустима скінченна послідовність b msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "Вхідні дані позбавлені можливості заповнення, скорочені, або пошкоджені іншим чином." -#: utils/adt/encode.c:492 utils/adt/encode.c:557 utils/adt/jsonfuncs.c:648 -#: utils/adt/varlena.c:331 utils/adt/varlena.c:372 jsonpath_gram.y:528 -#: jsonpath_scan.l:629 jsonpath_scan.l:640 jsonpath_scan.l:650 -#: jsonpath_scan.l:701 +#: 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 jsonpath_gram.y:266 +#: jsonpath_gram.y:598 jsonpath_scan.l:640 jsonpath_scan.l:651 +#: jsonpath_scan.l:661 jsonpath_scan.l:712 #, c-format msgid "invalid input syntax for type %s" msgstr "неприпустимий вхідний синтаксис для типу %s" @@ -23573,353 +24519,348 @@ msgstr "не вдалося визначити фактичний тип пер msgid "enum %s contains no values" msgstr "перелік %s не містить значень" -#: utils/adt/float.c:89 +#: utils/adt/float.c:83 #, c-format msgid "value out of range: overflow" msgstr "значення поза діапазоном: надлишок" -#: utils/adt/float.c:97 +#: utils/adt/float.c:91 #, c-format msgid "value out of range: underflow" msgstr "значення поза діапазоном: недостача" -#: utils/adt/float.c:286 +#: utils/adt/float.c:280 #, c-format msgid "\"%s\" is out of range for type real" msgstr "\"%s\" поза діапазоном для дійсного типу" -#: utils/adt/float.c:488 +#: utils/adt/float.c:482 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\" поза діапазоном для типу double precision" -#: utils/adt/float.c:1253 utils/adt/float.c:1327 utils/adt/int.c:355 +#: 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:1278 utils/adt/numeric.c:4500 utils/adt/numeric.c:4505 +#: utils/adt/int8.c:1277 utils/adt/numeric.c:4593 utils/adt/numeric.c:4598 #, c-format msgid "smallint out of range" msgstr "двобайтове ціле поза діапазоном" -#: utils/adt/float.c:1453 utils/adt/numeric.c:3693 utils/adt/numeric.c:10027 +#: 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:1521 utils/adt/numeric.c:3981 utils/adt/numeric.c:4093 +#: 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:1525 utils/adt/numeric.c:3985 utils/adt/numeric.c:10918 +#: 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:1701 utils/adt/float.c:1734 utils/adt/numeric.c:3893 -#: utils/adt/numeric.c:10698 +#: 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:1705 utils/adt/float.c:1738 utils/adt/numeric.c:3831 -#: utils/adt/numeric.c:3888 utils/adt/numeric.c:10702 +#: 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 "обчислити логарифм від'ємного числа не можна" -#: utils/adt/float.c:1771 utils/adt/float.c:1802 utils/adt/float.c:1897 -#: utils/adt/float.c:1924 utils/adt/float.c:1952 utils/adt/float.c:1979 -#: utils/adt/float.c:2126 utils/adt/float.c:2163 utils/adt/float.c:2333 -#: utils/adt/float.c:2389 utils/adt/float.c:2454 utils/adt/float.c:2511 -#: utils/adt/float.c:2702 utils/adt/float.c:2726 +#: utils/adt/float.c:1765 utils/adt/float.c:1796 utils/adt/float.c:1891 +#: utils/adt/float.c:1918 utils/adt/float.c:1946 utils/adt/float.c:1973 +#: utils/adt/float.c:2120 utils/adt/float.c:2157 utils/adt/float.c:2327 +#: utils/adt/float.c:2383 utils/adt/float.c:2448 utils/adt/float.c:2505 +#: utils/adt/float.c:2696 utils/adt/float.c:2720 #, c-format msgid "input is out of range" msgstr "введене значення поза діапазоном" -#: utils/adt/float.c:2867 -#, c-format -msgid "setseed parameter %g is out of allowed range [-1,1]" -msgstr "параметр setseed %g поза допустимим діапазоном [-1,1]" - -#: utils/adt/float.c:4095 utils/adt/numeric.c:1841 +#: utils/adt/float.c:4000 utils/adt/numeric.c:1857 #, c-format msgid "count must be greater than zero" msgstr "лічильник повинен бути більше нуля" -#: utils/adt/float.c:4100 utils/adt/numeric.c:1852 +#: utils/adt/float.c:4005 utils/adt/numeric.c:1868 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "операнд, нижня границя і верхня границя не можуть бути NaN" -#: utils/adt/float.c:4106 utils/adt/numeric.c:1857 +#: 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:4172 utils/adt/numeric.c:1871 +#: utils/adt/float.c:4077 utils/adt/numeric.c:1887 #, c-format msgid "lower bound cannot equal upper bound" msgstr "нижня границя не може дорівнювати верхній границі" -#: utils/adt/formatting.c:519 +#: utils/adt/formatting.c:530 #, c-format msgid "invalid format specification for an interval value" msgstr "неприпустима специфікація формату для цілого значення" -#: utils/adt/formatting.c:520 +#: utils/adt/formatting.c:531 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "Інтервали не зв'язуються з певними календарними датами." -#: utils/adt/formatting.c:1150 +#: utils/adt/formatting.c:1161 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" повинно бути останнім використаним шаблоном" -#: utils/adt/formatting.c:1158 +#: utils/adt/formatting.c:1169 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" повинна бути до \"PR\"" -#: utils/adt/formatting.c:1174 +#: utils/adt/formatting.c:1185 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" повинен бути до \"PR\"" -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1212 #, c-format msgid "multiple decimal points" msgstr "численні десяткові точки" -#: utils/adt/formatting.c:1205 utils/adt/formatting.c:1288 +#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "використовувати \"V\" і десяткову точку разом, не можна" -#: utils/adt/formatting.c:1217 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" twice" msgstr "використовувати \"S\" двічі, не можна" -#: utils/adt/formatting.c:1221 +#: utils/adt/formatting.c:1232 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "використовувати \"S\" і \"PL\"/\"MI\"/\"SG\"/\"PR\" разом, не можна" -#: utils/adt/formatting.c:1241 +#: utils/adt/formatting.c:1252 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "використовувати \"S\" і \"MI\" разом, не можна" -#: utils/adt/formatting.c:1251 +#: utils/adt/formatting.c:1262 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "не можна використовувати \"S\" і \"PL\" разом" -#: utils/adt/formatting.c:1261 +#: utils/adt/formatting.c:1272 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "не можна використовувати \"S\" і \"SG\" разом" -#: utils/adt/formatting.c:1270 +#: utils/adt/formatting.c:1281 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "не можна використовувати \"PR\" і \"S\"/\"PL\"/\"MI\"/\"SG\" разом" -#: utils/adt/formatting.c:1296 +#: utils/adt/formatting.c:1307 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "не можна використовувати \"EEEE\" двічі" -#: utils/adt/formatting.c:1302 +#: utils/adt/formatting.c:1313 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" є несумісним з іншими форматами" -#: utils/adt/formatting.c:1303 +#: utils/adt/formatting.c:1314 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "\"EEEE\" може використовуватись лише разом з шаблонами цифр і десяткової точки." -#: utils/adt/formatting.c:1387 +#: utils/adt/formatting.c:1398 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "неприпустимий роздільник формату дати й часу: \"%s\"" -#: utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1525 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" не є числом" -#: utils/adt/formatting.c:1592 +#: utils/adt/formatting.c:1603 #, c-format msgid "case conversion failed: %s" msgstr "помилка при перетворенні регістру: %s" -#: utils/adt/formatting.c:1646 utils/adt/formatting.c:1768 -#: utils/adt/formatting.c:1891 +#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 +#: utils/adt/formatting.c:1989 #, c-format msgid "could not determine which collation to use for %s function" msgstr "не вдалося визначити який параметр сортування використати для функції %s" -#: utils/adt/formatting.c:2274 +#: utils/adt/formatting.c:2410 #, c-format msgid "invalid combination of date conventions" msgstr "неприпустиме поєднання стилів дат" -#: utils/adt/formatting.c:2275 +#: utils/adt/formatting.c:2411 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "Не змішуйте Gregorian і ISO стилі дат (тижнів) в одному шаблоні форматування." -#: utils/adt/formatting.c:2297 +#: utils/adt/formatting.c:2433 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "конфліктуючі значення для \"%s\" поля в рядку форматування" -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2435 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Це значення суперечить попередньому параметри для поля того ж типу." -#: utils/adt/formatting.c:2366 +#: utils/adt/formatting.c:2502 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "вихідний рядок занадто короткий для \"%s\" поля форматування" -#: utils/adt/formatting.c:2368 +#: utils/adt/formatting.c:2504 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Поле потребує %d символів, але залишилось лише %d." -#: utils/adt/formatting.c:2370 utils/adt/formatting.c:2384 +#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Якщо ваш вихідний рядок не має постійної ширини, спробуйте використати \"FM\" модифікатор." -#: utils/adt/formatting.c:2380 utils/adt/formatting.c:2393 -#: utils/adt/formatting.c:2614 +#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 +#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "неприпустиме значення \"%s\" для \"%s\"" -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2518 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Поле потребує %d символів, але вдалося аналізувати лише %d." -#: utils/adt/formatting.c:2395 +#: utils/adt/formatting.c:2531 #, c-format msgid "Value must be an integer." msgstr "Значення повинне бути цілим числом." -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2536 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "значення для \"%s\" у вихідному рядку поза діапазоном" -#: utils/adt/formatting.c:2402 +#: utils/adt/formatting.c:2538 #, c-format msgid "Value must be in the range %d to %d." msgstr "Значення повинне бути в діапазоні %d до %d." -#: utils/adt/formatting.c:2616 +#: utils/adt/formatting.c:2752 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "Дане значення не відповідає жодному з доступних значень для цього поля." -#: utils/adt/formatting.c:2832 utils/adt/formatting.c:2852 -#: utils/adt/formatting.c:2872 utils/adt/formatting.c:2892 -#: utils/adt/formatting.c:2911 utils/adt/formatting.c:2930 -#: utils/adt/formatting.c:2954 utils/adt/formatting.c:2972 -#: utils/adt/formatting.c:2990 utils/adt/formatting.c:3008 -#: utils/adt/formatting.c:3025 utils/adt/formatting.c:3042 +#: 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 #, c-format msgid "localized string format value too long" msgstr "занадто довге значення формату локалізованого рядка" -#: utils/adt/formatting.c:3322 +#: utils/adt/formatting.c:3458 #, c-format msgid "unmatched format separator \"%c\"" msgstr "невідповідний роздільник формату \"%c\"" -#: utils/adt/formatting.c:3383 +#: utils/adt/formatting.c:3519 #, c-format msgid "unmatched format character \"%s\"" msgstr "невідповідний формат символу \"%s\"" -#: utils/adt/formatting.c:3491 +#: utils/adt/formatting.c:3652 #, c-format -msgid "formatting field \"%s\" is only supported in to_char" -msgstr "поле форматування \"%s\" підтримується лише в функції to_char" +msgid "Time zone abbreviation is not recognized." +msgstr "Абревіатуру часової зони не розпізнано." -#: utils/adt/formatting.c:3665 +#: utils/adt/formatting.c:3853 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "неприпустимий вхідний рядок для \"Y,YYY\"" -#: utils/adt/formatting.c:3754 +#: utils/adt/formatting.c:3942 #, c-format msgid "input string is too short for datetime format" msgstr "вхідний рядок занадто короткий для формату дати й часу" -#: utils/adt/formatting.c:3762 +#: utils/adt/formatting.c:3950 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "символи наприкінці залишаються у вхідному рядку після формату дати й часу" -#: utils/adt/formatting.c:4319 +#: utils/adt/formatting.c:4494 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "пропущено часовий пояс у вхідному рядку для типу timestamptz" -#: utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4500 #, c-format msgid "timestamptz out of range" msgstr "timestamptz поза діапазоном" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4528 #, c-format msgid "datetime format is zoned but not timed" msgstr "формат дати й часу зоновано, але не приурочено" -#: utils/adt/formatting.c:4411 +#: utils/adt/formatting.c:4577 #, c-format msgid "missing time zone in input string for type timetz" msgstr "пропущено часовий пояс у вхідному рядку для типу timetz" -#: utils/adt/formatting.c:4417 +#: utils/adt/formatting.c:4583 #, c-format msgid "timetz out of range" msgstr "timetz поза діапазоном" -#: utils/adt/formatting.c:4443 +#: utils/adt/formatting.c:4609 #, c-format msgid "datetime format is not dated and not timed" msgstr "формат дати й часу не датований і не приурочений" -#: utils/adt/formatting.c:4575 +#: utils/adt/formatting.c:4786 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "година \"%d\" неприпустима для 12-часового годинника" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4788 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Використайте 24-часовий годинник, або передавайте години від 1 до 12." -#: utils/adt/formatting.c:4689 +#: utils/adt/formatting.c:4900 #, c-format msgid "cannot calculate day of year without year information" msgstr "не можна обчислити день року без інформації про рік" -#: utils/adt/formatting.c:5621 +#: utils/adt/formatting.c:5852 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" не підтримується при введенні" -#: utils/adt/formatting.c:5633 +#: utils/adt/formatting.c:5864 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" не підтримується при введенні" @@ -23951,12 +24892,7 @@ msgstr "не вдалося знайти в файлі \"%s\": %m" msgid "file length too large" msgstr "довжина файлу завелика" -#: utils/adt/genfile.c:248 -#, c-format -msgid "must be superuser to read files with adminpack 1.0" -msgstr "щоб читати файли, використовуючи adminpack 1.0 потрібно бути суперкористувачем" - -#: utils/adt/genfile.c:702 +#: utils/adt/genfile.c:656 #, c-format msgid "tablespace with OID %u does not exist" msgstr "табличний простір з OID %u не існує" @@ -24012,560 +24948,645 @@ msgstr "повинно бути запитано мінімум 2 точки" msgid "invalid int2vector data" msgstr "неприпустимі дані int2vector" -#: utils/adt/int.c:1529 utils/adt/int8.c:1404 utils/adt/numeric.c:1749 -#: utils/adt/timestamp.c:5843 utils/adt/timestamp.c:5925 +#: 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:449 utils/adt/int8.c:472 utils/adt/int8.c:486 -#: utils/adt/int8.c:500 utils/adt/int8.c:531 utils/adt/int8.c:555 -#: utils/adt/int8.c:637 utils/adt/int8.c:705 utils/adt/int8.c:711 -#: utils/adt/int8.c:737 utils/adt/int8.c:751 utils/adt/int8.c:775 -#: utils/adt/int8.c:788 utils/adt/int8.c:900 utils/adt/int8.c:914 -#: utils/adt/int8.c:928 utils/adt/int8.c:959 utils/adt/int8.c:981 -#: utils/adt/int8.c:995 utils/adt/int8.c:1009 utils/adt/int8.c:1042 -#: utils/adt/int8.c:1056 utils/adt/int8.c:1070 utils/adt/int8.c:1101 -#: utils/adt/int8.c:1123 utils/adt/int8.c:1137 utils/adt/int8.c:1151 -#: utils/adt/int8.c:1313 utils/adt/int8.c:1348 utils/adt/numeric.c:4459 -#: utils/adt/rangetypes.c:1528 utils/adt/rangetypes.c:1541 +#: 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: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 поза діапазоном" -#: utils/adt/int8.c:1361 +#: utils/adt/int8.c:1360 #, c-format msgid "OID out of range" msgstr "OID поза діапазоном" -#: utils/adt/json.c:320 utils/adt/jsonb.c:781 +#: utils/adt/json.c:202 utils/adt/jsonb.c:664 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "значенням ключа повинен бути скаляр, не масив, композитний тип, або json" -#: utils/adt/json.c:1113 utils/adt/json.c:1123 utils/fmgr/funcapi.c:2082 +#: utils/adt/json.c:1034 utils/adt/json.c:1044 utils/fmgr/funcapi.c:2090 #, c-format msgid "could not determine data type for argument %d" msgstr "не вдалося визначити тип даних для аргументу %d" -#: utils/adt/json.c:1146 utils/adt/json.c:1337 utils/adt/json.c:1513 -#: utils/adt/json.c:1591 utils/adt/jsonb.c:1432 utils/adt/jsonb.c:1522 +#: 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 "значення null не дозволене для ключа об'єкту" -#: utils/adt/json.c:1189 utils/adt/json.c:1352 +#: 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:1297 utils/adt/jsonb.c:1233 +#: 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:1299 utils/adt/jsonb.c:1235 +#: 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:1491 utils/adt/jsonb.c:1410 +#: utils/adt/json.c:1427 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "масив повинен мати два стовпця" -#: utils/adt/json.c:1580 utils/adt/jsonb.c:1511 +#: utils/adt/json.c:1516 utils/adt/jsonb.c:1412 #, c-format msgid "mismatched array dimensions" msgstr "невідповідні виміри масиву" -#: utils/adt/json.c:1764 utils/adt/jsonb_util.c:1958 +#: utils/adt/json.c:1702 utils/adt/jsonb_util.c:1956 #, c-format msgid "duplicate JSON object key value" msgstr "дублікат значення ключа об'єкту JSON" -#: utils/adt/jsonb.c:294 +#: utils/adt/jsonb.c:282 #, c-format msgid "string too long to represent as jsonb string" msgstr "рядок занадто довгий для представлення в якості рядка jsonb" -#: utils/adt/jsonb.c:295 +#: utils/adt/jsonb.c:283 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "Через обмеження упровадження, рядки jsonb не можуть перевищувати %d байт." -#: utils/adt/jsonb.c:1252 +#: utils/adt/jsonb.c:1153 #, c-format msgid "argument %d: key must not be null" msgstr "аргумент %d: ключ не повинен бути null" -#: utils/adt/jsonb.c:1843 +#: utils/adt/jsonb.c:1744 #, c-format msgid "field name must not be null" msgstr "ім'я поля не повинно бути null" -#: utils/adt/jsonb.c:1905 +#: utils/adt/jsonb.c:1806 #, c-format msgid "object keys must be strings" msgstr "ключі об'єктів повинні бути рядками" -#: utils/adt/jsonb.c:2116 +#: utils/adt/jsonb.c:2017 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "привести значення jsonb null до типу %s не можна" -#: utils/adt/jsonb.c:2117 +#: utils/adt/jsonb.c:2018 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "привести рядок jsonb до типу %s не можна" -#: utils/adt/jsonb.c:2118 +#: utils/adt/jsonb.c:2019 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "привести число jsonb до типу %s не можна" -#: utils/adt/jsonb.c:2119 +#: utils/adt/jsonb.c:2020 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "привести логічне значення jsonb до типу %s не можна" -#: utils/adt/jsonb.c:2120 +#: utils/adt/jsonb.c:2021 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "привести масив jsonb до типу %s не можна" -#: utils/adt/jsonb.c:2121 +#: utils/adt/jsonb.c:2022 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "привести об'єкт jsonb до типу %s не можна" -#: utils/adt/jsonb.c:2122 +#: utils/adt/jsonb.c:2023 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "привести масив або об'єкт jsonb до типу %s не можна" -#: utils/adt/jsonb_util.c:758 +#: utils/adt/jsonb_util.c:756 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "кількість пар об'єкта jsonb перевищує максимально дозволену (%zu)" -#: utils/adt/jsonb_util.c:799 +#: utils/adt/jsonb_util.c:797 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "кількість елементів масиву jsonb перевищує максимально дозволену(%zu)" -#: utils/adt/jsonb_util.c:1673 utils/adt/jsonb_util.c:1693 +#: utils/adt/jsonb_util.c:1671 utils/adt/jsonb_util.c:1691 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %d bytes" msgstr "загальний розмір елементів масиву jsonb перевищує максимум %d байт" -#: utils/adt/jsonb_util.c:1754 utils/adt/jsonb_util.c:1789 -#: utils/adt/jsonb_util.c:1809 +#: utils/adt/jsonb_util.c:1752 utils/adt/jsonb_util.c:1787 +#: utils/adt/jsonb_util.c:1807 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %d bytes" msgstr "загальний розмір елементів об'єкту jsonb перевищує максимум %d байт" -#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:151 +#: utils/adt/jsonbsubs.c:67 utils/adt/jsonbsubs.c:148 #, c-format msgid "jsonb subscript does not support slices" msgstr "підрядковий символ jsonb не підтримує сектори" -#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:117 +#: utils/adt/jsonbsubs.c:100 utils/adt/jsonbsubs.c:114 #, c-format msgid "subscript type %s is not supported" msgstr "тип підписки %s не підтримується" -#: utils/adt/jsonbsubs.c:104 +#: utils/adt/jsonbsubs.c:101 #, c-format msgid "jsonb subscript must be coercible to only one type, integer or text." msgstr "підрядковий символ jsonb повинен бути приведений лише до одного типу, integer або text." -#: utils/adt/jsonbsubs.c:118 +#: utils/adt/jsonbsubs.c:115 #, c-format msgid "jsonb subscript must be coercible to either integer or text." msgstr "підрядковий символ jsonb повинен бути приведений або до integer, або до text." -#: utils/adt/jsonbsubs.c:139 +#: utils/adt/jsonbsubs.c:136 #, c-format msgid "jsonb subscript must have text type" msgstr "підрядковий символ jsonb повинен мати тип text" -#: utils/adt/jsonbsubs.c:207 +#: utils/adt/jsonbsubs.c:204 #, c-format msgid "jsonb subscript in assignment must not be null" msgstr "підрядковий символ jsonb у присвоєнні не повинен бути null" -#: utils/adt/jsonfuncs.c:572 utils/adt/jsonfuncs.c:821 -#: utils/adt/jsonfuncs.c:2429 utils/adt/jsonfuncs.c:2881 -#: utils/adt/jsonfuncs.c:3676 utils/adt/jsonfuncs.c:4018 +#: 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:577 utils/adt/jsonfuncs.c:806 -#: utils/adt/jsonfuncs.c:2883 utils/adt/jsonfuncs.c:3663 +#: 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:636 jsonpath_scan.l:596 +#: utils/adt/jsonfuncs.c:647 jsonpath_scan.l:607 #, c-format msgid "unsupported Unicode escape sequence" msgstr "непідтримувана спеціальна послідовність Unicode" -#: utils/adt/jsonfuncs.c:713 +#: 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:1875 utils/adt/jsonfuncs.c:1912 +#: 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:1879 utils/adt/jsonfuncs.c:1898 +#: 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:1978 +#: utils/adt/jsonfuncs.c:1986 #, c-format msgid "cannot call %s on a non-object" msgstr "викликати %s з не об'єктом, не можна" -#: utils/adt/jsonfuncs.c:2166 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct an array as an object" msgstr "вилучити масив у вигляді об'єкту не можна" -#: utils/adt/jsonfuncs.c:2180 +#: utils/adt/jsonfuncs.c:2188 #, c-format msgid "cannot deconstruct a scalar" msgstr "вилучити скаляр не можна" -#: utils/adt/jsonfuncs.c:2225 +#: utils/adt/jsonfuncs.c:2233 #, c-format msgid "cannot extract elements from a scalar" msgstr "вилучити елементи зі скаляру не можна" -#: utils/adt/jsonfuncs.c:2229 +#: utils/adt/jsonfuncs.c:2237 #, c-format msgid "cannot extract elements from an object" msgstr "вилучити елементи з об'єкту не можна" -#: utils/adt/jsonfuncs.c:2414 utils/adt/jsonfuncs.c:3896 +#: 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:2488 utils/adt/jsonfuncs.c:2493 -#: utils/adt/jsonfuncs.c:2510 utils/adt/jsonfuncs.c:2516 +#: 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:2489 +#: utils/adt/jsonfuncs.c:2516 #, c-format msgid "See the value of key \"%s\"." msgstr "Перевірте значення ключа \"%s\"." -#: utils/adt/jsonfuncs.c:2511 +#: utils/adt/jsonfuncs.c:2539 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Перевірте елемент масиву %s ключа \"%s\"." -#: utils/adt/jsonfuncs.c:2517 +#: utils/adt/jsonfuncs.c:2545 #, c-format msgid "See the array element %s." msgstr "Перевірте елемент масиву %s." -#: utils/adt/jsonfuncs.c:2552 +#: 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:3389 +#: 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:3413 +#: utils/adt/jsonfuncs.c:3671 #, c-format msgid "could not determine row type for result of %s" msgstr "не вдалося визначити тип рядка для результату %s" -#: utils/adt/jsonfuncs.c:3415 +#: 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 "Надайте аргумент ненульового запису, або викличте функцію в реченні FROM, використовуючи список визначення стовпців." -#: utils/adt/jsonfuncs.c:3785 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 "необхідний режим матеріалізації (materialize mode), але він неприпустимий у цьому контексті" -#: utils/adt/jsonfuncs.c:3913 utils/adt/jsonfuncs.c:3997 +#: 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:3946 +#: utils/adt/jsonfuncs.c:4223 #, c-format msgid "cannot call %s on an object" msgstr "викликати %s з об'єктом не можна" -#: utils/adt/jsonfuncs.c:4380 utils/adt/jsonfuncs.c:4439 -#: utils/adt/jsonfuncs.c:4519 +#: 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:4524 +#: utils/adt/jsonfuncs.c:4800 #, c-format msgid "cannot delete from object using integer index" msgstr "видалити з об'єкту по числовому індексу не можна" -#: utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4751 +#: utils/adt/jsonfuncs.c:4868 utils/adt/jsonfuncs.c:5027 #, c-format msgid "cannot set path in scalar" msgstr "встановити шлях в скалярі не можна" -#: utils/adt/jsonfuncs.c:4633 utils/adt/jsonfuncs.c:4675 +#: 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 "null_value_treatment має бути \"delete_key\", \"return_target\", \"use_json_null\", або \"raise_exception\"" -#: utils/adt/jsonfuncs.c:4646 +#: utils/adt/jsonfuncs.c:4922 #, c-format msgid "JSON value must not be null" msgstr "Значення JSON не повинне бути null" -#: utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonfuncs.c:4923 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "Виняток було запущено через те, що null_value_treatment дорівнює \"raise_exception\"." -#: utils/adt/jsonfuncs.c:4648 +#: 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 "Щоб уникнути, або змініть аргумент null_value_treatment або переконайтесь що SQL NULL не передано." -#: utils/adt/jsonfuncs.c:4703 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "cannot delete path in scalar" msgstr "видалити шлях в скалярі не можна" -#: utils/adt/jsonfuncs.c:4917 +#: utils/adt/jsonfuncs.c:5193 #, c-format msgid "path element at position %d is null" msgstr "елемент шляху в позиції %d є null" -#: utils/adt/jsonfuncs.c:4936 utils/adt/jsonfuncs.c:4967 -#: utils/adt/jsonfuncs.c:5040 +#: 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:4937 utils/adt/jsonfuncs.c:4968 +#: 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:5041 +#: utils/adt/jsonfuncs.c:5317 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Спробуйте, використати функцію jsonb_set, щоб замінити значення ключа." -#: utils/adt/jsonfuncs.c:5145 +#: utils/adt/jsonfuncs.c:5421 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "елмент шляху в позиції %d не є цілим числом: \"%s\"" -#: utils/adt/jsonfuncs.c:5162 +#: utils/adt/jsonfuncs.c:5438 #, c-format msgid "path element at position %d is out of range: %d" msgstr "елемент шляху в позиції %d поза діапазоном: %d" -#: utils/adt/jsonfuncs.c:5314 +#: utils/adt/jsonfuncs.c:5590 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "неправильний тип позначки, дозволені лише масиви і скаляри" -#: utils/adt/jsonfuncs.c:5321 +#: utils/adt/jsonfuncs.c:5597 #, c-format msgid "flag array element is not a string" msgstr "елемент масиву позначок не є рядком" -#: utils/adt/jsonfuncs.c:5322 utils/adt/jsonfuncs.c:5344 +#: utils/adt/jsonfuncs.c:5598 utils/adt/jsonfuncs.c:5620 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Можливі значення: \"string\", \"numeric\", \"boolean\", \"key\", і \"all\"." -#: utils/adt/jsonfuncs.c:5342 +#: utils/adt/jsonfuncs.c:5618 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "неправильна позначка в масиві позначок: \"%s\"" -#: utils/adt/jsonpath.c:382 +#: utils/adt/jsonpath.c:389 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ не дозволяється в кореневих виразах" -#: utils/adt/jsonpath.c:388 +#: utils/adt/jsonpath.c:395 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST дозволяється лише в підрядкових символах масиву" -#: utils/adt/jsonpath_exec.c:361 +#: utils/adt/jsonpath_exec.c:491 #, c-format msgid "single boolean result is expected" msgstr "очікується один логічний результат" -#: utils/adt/jsonpath_exec.c:557 +#: utils/adt/jsonpath_exec.c:851 #, c-format -msgid "\"vars\" argument is not an object" -msgstr "аргумент \"vars\" не є об'єктом" +msgid "jsonpath wildcard array accessor can only be applied to an array" +msgstr "доступ до підстановочного масиву jsonpath може бути застосований лише до масиву" -#: utils/adt/jsonpath_exec.c:558 +#: utils/adt/jsonpath_exec.c:874 #, c-format -msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." -msgstr "Параметри Jsonpath повинні бути закодовані в якості пар \"ключ-значення\" об'єкту \"vars\"." +msgid "jsonpath wildcard member accessor can only be applied to an object" +msgstr "доступ до підстановочного елемента jsonpath може бути застосований лише до об'єкта" + +#: utils/adt/jsonpath_exec.c:923 +#, c-format +msgid "jsonpath array subscript is out of bounds" +msgstr "підрядковий символ масиву jsonpath поза межами" + +#: utils/adt/jsonpath_exec.c:980 +#, c-format +msgid "jsonpath array accessor can only be applied to an array" +msgstr "доступ до масиву jsonpath може бути застосований лише до масиву" -#: utils/adt/jsonpath_exec.c:675 +#: utils/adt/jsonpath_exec.c:1044 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "Об'єкт JSON не містить ключа \"%s\"" -#: utils/adt/jsonpath_exec.c:687 +#: utils/adt/jsonpath_exec.c:1056 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "доступ для елемента jsonpath може бути застосований лише до об'єкта" -#: utils/adt/jsonpath_exec.c:716 +#: utils/adt/jsonpath_exec.c:1114 #, c-format -msgid "jsonpath wildcard array accessor can only be applied to an array" -msgstr "доступ до підстановочного масиву jsonpath може бути застосований лише до масиву" +msgid "jsonpath item method .%s() can only be applied to an array" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до масиву" -#: utils/adt/jsonpath_exec.c:764 +#: utils/adt/jsonpath_exec.c:1167 utils/adt/jsonpath_exec.c:1193 #, c-format -msgid "jsonpath array subscript is out of bounds" -msgstr "підрядковий символ масиву jsonpath поза межами" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type double precision" +msgstr "" -#: utils/adt/jsonpath_exec.c:821 +#: 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 "jsonpath array accessor can only be applied to an array" -msgstr "доступ до масиву jsonpath може бути застосований лише до масиву" +msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" +msgstr "" -#: utils/adt/jsonpath_exec.c:873 +#: 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 wildcard member accessor can only be applied to an object" -msgstr "доступ до підстановочного елемента jsonpath може бути застосований лише до об'єкта" +msgid "jsonpath item method .%s() can only be applied to a string or numeric value" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядка або числового значення" -#: utils/adt/jsonpath_exec.c:1007 +#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 #, c-format -msgid "jsonpath item method .%s() can only be applied to an array" -msgstr "метод елемента jsonpath .%s() може бути застосований лише до масиву" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" +msgstr "" -#: utils/adt/jsonpath_exec.c:1060 +#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 #, c-format -msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" -msgstr "числовий аргумент методу елемента jsonpath .%s() поза діапазоном для типу double precision" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" +msgstr "" -#: utils/adt/jsonpath_exec.c:1081 +#: utils/adt/jsonpath_exec.c:1386 #, c-format -msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" -msgstr "строковий аргумент методу елемента jsonpath .%s() не є представленням числа double precision" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, or numeric value" +msgstr "" -#: utils/adt/jsonpath_exec.c:1094 +#: utils/adt/jsonpath_exec.c:1439 utils/adt/jsonpath_exec.c:1528 #, c-format -msgid "jsonpath item method .%s() can only be applied to a string or numeric value" -msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядка або числового значення" +msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type numeric" +msgstr "" + +#: utils/adt/jsonpath_exec.c:1487 +#, c-format +msgid "precision of jsonpath item method .%s() is out of range for type integer" +msgstr "точність методу елементу jsonpath .%s() знаходиться за межами діапазону для типу integer" + +#: utils/adt/jsonpath_exec.c:1501 +#, c-format +msgid "scale of jsonpath item method .%s() is out of range for type integer" +msgstr "масштаб методу jsonpath елементу .%s() знаходиться за межами діапазону для типу integer" + +#: 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:1584 +#: utils/adt/jsonpath_exec.c:1648 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a boolean, string, numeric, or datetime value" +msgstr "" + +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "лівий операнд оператора jsonpath %s не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:1591 +#: utils/adt/jsonpath_exec.c:2144 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "правий операнд оператора jsonpath %s не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:1659 +#: utils/adt/jsonpath_exec.c:2212 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "операнд унарного оператора jsonpath %s не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:1758 +#: utils/adt/jsonpath_exec.c:2311 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "метод елемента jsonpath .%s() може бути застосований лише до числового значення" -#: utils/adt/jsonpath_exec.c:1798 +#: utils/adt/jsonpath_exec.c:2357 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядку" -#: utils/adt/jsonpath_exec.c:1901 +#: utils/adt/jsonpath_exec.c:2450 +#, c-format +msgid "time precision of jsonpath item method .%s() is out of range for type integer" +msgstr "точність часу методу елементу jsonpath .%s() знаходиться за межами діапазону для типу integer" + +#: 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 "datetime format is not recognized: \"%s\"" -msgstr "формат дати й часу не розпізнано: \"%s\"" +msgid "%s format is not recognized: \"%s\"" +msgstr "Формат %s не розпізнано: \"%s\"" -#: utils/adt/jsonpath_exec.c:1903 +#: 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:1971 +#: 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:2840 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "метод елемента jsonpath .%s() може бути застосований лише до об'єкта" -#: utils/adt/jsonpath_exec.c:2153 +#: utils/adt/jsonpath_exec.c:3124 +#, c-format +msgid "could not convert value of type %s to jsonpath" +msgstr "" + +#: utils/adt/jsonpath_exec.c:3158 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "не вдалося знайти змінну jsonpath \"%s\"" -#: utils/adt/jsonpath_exec.c:2417 +#: utils/adt/jsonpath_exec.c:3211 +#, c-format +msgid "\"vars\" argument is not an object" +msgstr "аргумент \"vars\" не є об'єктом" + +#: utils/adt/jsonpath_exec.c:3212 +#, c-format +msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgstr "Параметри Jsonpath повинні бути закодовані в якості пар \"ключ-значення\" об'єкту \"vars\"." + +#: utils/adt/jsonpath_exec.c:3475 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "підрядковий символ масиву jsonpath не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:2429 +#: utils/adt/jsonpath_exec.c:3487 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "підрядковий символ масиву jsonpath поза цілим діапазоном" -#: utils/adt/jsonpath_exec.c:2606 +#: utils/adt/jsonpath_exec.c:3671 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "не можна перетворити значення з %s в %s без використання часового поясу" -#: utils/adt/jsonpath_exec.c:2608 +#: utils/adt/jsonpath_exec.c:3673 #, c-format msgid "Use *_tz() function for time zone support." msgstr "Використовуйте функцію *_tz() для підтримки часового поясу." +#: utils/adt/jsonpath_exec.c:3981 +#, c-format +msgid "JSON path expression for column \"%s\" should return single item without wrapper" +msgstr "" + +#: utils/adt/jsonpath_exec.c:3983 utils/adt/jsonpath_exec.c:3988 +#, c-format +msgid "Use the WITH WRAPPER clause to wrap SQL/JSON items into an array." +msgstr "" + +#: utils/adt/jsonpath_exec.c:3987 +#, c-format +msgid "JSON path expression in JSON_QUERY should return single item without wrapper" +msgstr "" + +#: 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" +msgstr "" + +#: 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" +msgstr "" + #: utils/adt/levenshtein.c:132 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "довжина аргументу levenshtein перевищує максимальну довжину, %d символів" -#: utils/adt/like.c:161 +#: utils/adt/like.c:159 #, c-format msgid "nondeterministic collations are not supported for LIKE" msgstr "недетерміновані параметри сортування не підтримуються для LIKE" -#: utils/adt/like.c:190 utils/adt/like_support.c:1024 +#: utils/adt/like.c:188 utils/adt/like_support.c:1023 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "не вдалося визначити який параметр сортування використати для ILIKE" -#: utils/adt/like.c:202 +#: utils/adt/like.c:200 #, c-format msgid "nondeterministic collations are not supported for ILIKE" msgstr "недетерміновані параметри сортування не підтримуються для ILIKE" @@ -24575,22 +25596,22 @@ msgstr "недетерміновані параметри сортування msgid "LIKE pattern must not end with escape character" msgstr "Шаблон LIKE не повинен закінчуватись символом виходу" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:801 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:800 #, c-format msgid "invalid escape string" msgstr "неприпустимий рядок виходу" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:802 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:801 #, c-format msgid "Escape string must be empty or one character." msgstr "Рядок виходу повинен бути пустим або складатися з одного символу." -#: utils/adt/like_support.c:1014 +#: utils/adt/like_support.c:1013 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "порівняння без урахування регістру не підтримується для типу bytea" -#: utils/adt/like_support.c:1115 +#: utils/adt/like_support.c:1114 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "порівняння з регулярними виразами не підтримується для типу bytea" @@ -24600,17 +25621,17 @@ msgstr "порівняння з регулярними виразами не п msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "неприпустиме значення октету в значенні типу \"macaddr\": \"%s\"" -#: utils/adt/mac8.c:554 +#: utils/adt/mac8.c:555 #, c-format msgid "macaddr8 data out of range to convert to macaddr" msgstr "дані macaddr8 поза діапазоном, для перетворення в macaddr" -#: utils/adt/mac8.c:555 +#: utils/adt/mac8.c:556 #, c-format msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Лише адреси, які мають FF і FE в якості значень в четвертому і п'ятому байті зліва, наприклад xx:xx:xx:ff:fe:xx:xx:xx можуть бути перетворені з macaddr8 в macaddr." -#: utils/adt/mcxtfuncs.c:182 +#: utils/adt/mcxtfuncs.c:173 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d не є серверним процесом PostgreSQL" @@ -24649,70 +25670,70 @@ msgstr "може бути пустою міткою" msgid "requires AS" msgstr "потребує AS" -#: utils/adt/misc.c:853 utils/adt/misc.c:867 utils/adt/misc.c:906 -#: utils/adt/misc.c:912 utils/adt/misc.c:918 utils/adt/misc.c:941 +#: utils/adt/misc.c:897 utils/adt/misc.c:911 utils/adt/misc.c:950 +#: utils/adt/misc.c:956 utils/adt/misc.c:962 utils/adt/misc.c:985 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "рядок не є припустимим ідентифікатором: \"%s\"" -#: utils/adt/misc.c:855 +#: utils/adt/misc.c:899 #, c-format msgid "String has unclosed double quotes." msgstr "Рядок має не закриті лапки." -#: utils/adt/misc.c:869 +#: utils/adt/misc.c:913 #, c-format msgid "Quoted identifier must not be empty." msgstr "Ідентифікатор в лапках не повинен бути пустим." -#: utils/adt/misc.c:908 +#: utils/adt/misc.c:952 #, c-format msgid "No valid identifier before \".\"." msgstr "Перед \".\" немає припустимого ідентифікатору." -#: utils/adt/misc.c:914 +#: utils/adt/misc.c:958 #, c-format msgid "No valid identifier after \".\"." msgstr "Після \".\" немає припустимого ідентифікатора." -#: utils/adt/misc.c:974 +#: utils/adt/misc.c:1018 #, c-format msgid "log format \"%s\" is not supported" msgstr "формат журналу \"%s\" не підтримується" -#: utils/adt/misc.c:975 +#: utils/adt/misc.c:1019 #, c-format msgid "The supported log formats are \"stderr\", \"csvlog\", and \"jsonlog\"." msgstr "Підтримуванні формати журналів: \"stderr\", \"csvlog\", і \"jsonlog\"." -#: utils/adt/multirangetypes.c:151 utils/adt/multirangetypes.c:164 -#: utils/adt/multirangetypes.c:193 utils/adt/multirangetypes.c:267 -#: utils/adt/multirangetypes.c:291 +#: utils/adt/multirangetypes.c:150 utils/adt/multirangetypes.c:163 +#: utils/adt/multirangetypes.c:192 utils/adt/multirangetypes.c:266 +#: utils/adt/multirangetypes.c:290 #, c-format msgid "malformed multirange literal: \"%s\"" msgstr "неправильний багатодіапазонний літерал: \"%s\"" -#: utils/adt/multirangetypes.c:153 +#: utils/adt/multirangetypes.c:152 #, c-format msgid "Missing left brace." msgstr "Пропущено ліву дужку." -#: utils/adt/multirangetypes.c:195 +#: utils/adt/multirangetypes.c:194 #, c-format msgid "Expected range start." msgstr "Очікуваний початок діапазону." -#: utils/adt/multirangetypes.c:269 +#: utils/adt/multirangetypes.c:268 #, c-format msgid "Expected comma or end of multirange." msgstr "Очікувалась кома або закінчення мультидіапазону." -#: utils/adt/multirangetypes.c:982 +#: utils/adt/multirangetypes.c:981 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "мультидіапазони не можуть бути побудовані з багатовимірних масивів" -#: utils/adt/multirangetypes.c:1008 +#: utils/adt/multirangetypes.c:1007 #, c-format msgid "multirange values cannot contain null members" msgstr "мультидіапазонні значення не можуть містити членів null" @@ -24791,112 +25812,138 @@ msgstr "результат поза діапазоном" msgid "cannot subtract inet values of different sizes" msgstr "не можна віднімати значення inet різного розміру" -#: utils/adt/numeric.c:785 utils/adt/numeric.c:3643 utils/adt/numeric.c:7131 -#: utils/adt/numeric.c:7334 utils/adt/numeric.c:7806 utils/adt/numeric.c:10501 -#: utils/adt/numeric.c:10975 utils/adt/numeric.c:11069 -#: utils/adt/numeric.c:11203 +#: 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 "значення переповнюють формат numeric" -#: utils/adt/numeric.c:1098 +#: utils/adt/numeric.c:1106 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "неприпустимий знак у зовнішньому значенні \"numeric\"" -#: utils/adt/numeric.c:1104 +#: utils/adt/numeric.c:1112 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "неприпустимий масштаб у зовнішньому значенні \"numeric\"" -#: utils/adt/numeric.c:1113 +#: utils/adt/numeric.c:1121 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "неприпустиме число у зовнішньому значенні \"numeric\"" -#: utils/adt/numeric.c:1328 utils/adt/numeric.c:1342 +#: utils/adt/numeric.c:1336 utils/adt/numeric.c:1350 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "Точність NUMERIC %d повинна бути між 1 і %d" -#: utils/adt/numeric.c:1333 +#: utils/adt/numeric.c:1341 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "Масштаб NUMERIC %d повинен бути між %d і %d" -#: utils/adt/numeric.c:1351 +#: utils/adt/numeric.c:1359 #, c-format msgid "invalid NUMERIC type modifier" msgstr "неприпустимий модифікатор типу NUMERIC" -#: utils/adt/numeric.c:1709 +#: utils/adt/numeric.c:1725 #, c-format msgid "start value cannot be NaN" msgstr "початкове значення не може бути NaN" -#: utils/adt/numeric.c:1713 +#: utils/adt/numeric.c:1729 #, c-format msgid "start value cannot be infinity" msgstr "початкове значення не може бути нескінченністю" -#: utils/adt/numeric.c:1720 +#: utils/adt/numeric.c:1736 #, c-format msgid "stop value cannot be NaN" msgstr "кінцеве значення не може бути NaN" -#: utils/adt/numeric.c:1724 +#: utils/adt/numeric.c:1740 #, c-format msgid "stop value cannot be infinity" msgstr "кінцеве значення не може бути нескінченністю" -#: utils/adt/numeric.c:1737 +#: utils/adt/numeric.c:1753 #, c-format msgid "step size cannot be NaN" msgstr "розмір кроку не може бути NaN" -#: utils/adt/numeric.c:1741 +#: utils/adt/numeric.c:1757 #, c-format msgid "step size cannot be infinity" msgstr "розмір кроку не може бути нескінченністю" -#: utils/adt/numeric.c:3633 +#: utils/adt/numeric.c:3649 #, c-format msgid "factorial of a negative number is undefined" msgstr "факторіал від'ємного числа не визначено" -#: utils/adt/numeric.c:4366 utils/adt/numeric.c:4446 utils/adt/numeric.c:4487 -#: utils/adt/numeric.c:4683 +#: utils/adt/numeric.c:4256 +#, c-format +msgid "lower bound cannot be NaN" +msgstr "" + +#: utils/adt/numeric.c:4260 +#, c-format +msgid "lower bound cannot be infinity" +msgstr "" + +#: utils/adt/numeric.c:4267 +#, c-format +msgid "upper bound cannot be NaN" +msgstr "" + +#: utils/adt/numeric.c:4271 +#, c-format +msgid "upper bound cannot be infinity" +msgstr "" + +#: 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:4370 utils/adt/numeric.c:4450 utils/adt/numeric.c:4491 -#: utils/adt/numeric.c:4687 +#: 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:4696 +#: utils/adt/numeric.c:4789 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn поза діапазоном" -#: utils/adt/numeric.c:7896 utils/adt/numeric.c:7947 +#: utils/adt/numeric.c:7981 utils/adt/numeric.c:8032 #, c-format msgid "numeric field overflow" msgstr "надлишок поля numeric" -#: utils/adt/numeric.c:7897 +#: 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 "Поле з точністю %d, масштабом %d повинне округлятись до абсолютного значення меньше, ніж %s%d." -#: utils/adt/numeric.c:7948 +#: utils/adt/numeric.c:8033 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "Поле з точністю %d, масштабом %d не може містити нескінченне значення." -#: utils/adt/oid.c:216 +#: 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 "" + +#: utils/adt/oid.c:217 #, c-format msgid "invalid oidvector data" msgstr "неприпустимі дані oidvector" @@ -24926,306 +25973,312 @@ msgstr "запитаний символ занадто великий для к msgid "requested character not valid for encoding: %u" msgstr "запитаний символ не припустимий для кодування: %u" -#: utils/adt/orderedsetaggs.c:448 utils/adt/orderedsetaggs.c:553 -#: utils/adt/orderedsetaggs.c:693 +#: utils/adt/orderedsetaggs.c:446 utils/adt/orderedsetaggs.c:551 +#: utils/adt/orderedsetaggs.c:691 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "значення процентиля %g не є між 0 і 1" -#: utils/adt/pg_locale.c:1410 +#: utils/adt/pg_locale.c:1484 #, c-format msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" msgstr "не вдалося відкрити сортувальник для локалізації\"%s\" з правилами \"%s\": %s" -#: utils/adt/pg_locale.c:1421 utils/adt/pg_locale.c:2831 -#: utils/adt/pg_locale.c:2904 +#: utils/adt/pg_locale.c:1495 utils/adt/pg_locale.c:2969 +#: utils/adt/pg_locale.c:3042 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не підтримується в цій збірці" -#: utils/adt/pg_locale.c:1450 +#: utils/adt/pg_locale.c:1523 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не вдалося створити локалізацію \"%s\": %m" -#: utils/adt/pg_locale.c:1453 +#: utils/adt/pg_locale.c:1526 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Операційній системі не вдалося знайти дані локалізації з іменем \"%s\"." -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1647 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "параметри сортування з різними значеннями collate і ctype не підтримуються на цій платформі" -#: utils/adt/pg_locale.c:1577 -#, c-format -msgid "collation provider LIBC is not supported on this platform" -msgstr "провайдер параметрів сортування LIBC не підтримується на цій платформі" - -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1694 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "для параметру сортування \"%s\" який не має фактичної версії, була вказана версія" -#: utils/adt/pg_locale.c:1624 +#: utils/adt/pg_locale.c:1700 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "невідповідність версій для параметру сортування \"%s\"" -#: utils/adt/pg_locale.c:1626 +#: utils/adt/pg_locale.c:1702 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "Параметр сортування в базі даних був створений з версією %s, але операційна система надає версію %s." -#: utils/adt/pg_locale.c:1629 +#: utils/adt/pg_locale.c:1705 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "Перебудуйте всі об'єкти, які стосуються цього параметру сортування і виконайте ALTER COLLATION %s REFRESH VERSION, або побудуйте PostgreSQL з правильною версією бібліотеки." -#: utils/adt/pg_locale.c:1695 +#: utils/adt/pg_locale.c:1749 utils/adt/pg_locale.c:2533 +#: utils/adt/pg_locale.c:2558 +#, c-format +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "неприпустиме ім'я локалі \"%s\" для вбудованого провайдера" + +#: utils/adt/pg_locale.c:1791 #, c-format msgid "could not load locale \"%s\"" msgstr "не вдалося завантажити локаль \"%s\"" -#: utils/adt/pg_locale.c:1720 +#: utils/adt/pg_locale.c:1816 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "не вдалося отримати версію параметрів сортування для локалізації \"%s\": код помилки %lu" -#: utils/adt/pg_locale.c:1776 utils/adt/pg_locale.c:1789 +#: utils/adt/pg_locale.c:1872 utils/adt/pg_locale.c:1885 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "не вдалося перетворити рядок в UTF-16: код помилки %lu" -#: utils/adt/pg_locale.c:1803 +#: utils/adt/pg_locale.c:1897 #, c-format msgid "could not compare Unicode strings: %m" msgstr "не вдалося порівняти рядки в Unicode: %m" -#: utils/adt/pg_locale.c:1984 +#: utils/adt/pg_locale.c:2071 #, c-format msgid "collation failed: %s" msgstr "помилка в бібліотеці сортування: %s" -#: utils/adt/pg_locale.c:2205 utils/adt/pg_locale.c:2237 +#: utils/adt/pg_locale.c:2290 utils/adt/pg_locale.c:2322 #, c-format msgid "sort key generation failed: %s" msgstr "не вдалося згенерувати ключ сортування: %s" -#: utils/adt/pg_locale.c:2474 +#: utils/adt/pg_locale.c:2612 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "не вдалося отримати мову з локалі \"%s\": %s" -#: utils/adt/pg_locale.c:2495 utils/adt/pg_locale.c:2511 +#: utils/adt/pg_locale.c:2633 utils/adt/pg_locale.c:2649 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "не вдалося відкрити сортувальник для локалізації \"%s\": %s" -#: utils/adt/pg_locale.c:2536 +#: utils/adt/pg_locale.c:2674 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "ICU не підтримує кодування \"%s\"" -#: utils/adt/pg_locale.c:2543 +#: utils/adt/pg_locale.c:2681 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "не вдалося відкрити перетворювач ICU для кодування \"%s\": %s" -#: utils/adt/pg_locale.c:2561 utils/adt/pg_locale.c:2580 -#: utils/adt/pg_locale.c:2636 utils/adt/pg_locale.c:2647 +#: utils/adt/pg_locale.c:2699 utils/adt/pg_locale.c:2718 +#: utils/adt/pg_locale.c:2774 utils/adt/pg_locale.c:2785 #, c-format msgid "%s failed: %s" msgstr "%s помилка: %s" -#: utils/adt/pg_locale.c:2822 +#: utils/adt/pg_locale.c:2960 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "не вдалося перетворити локальну назву \"%s\" на мітку мови: %s" -#: utils/adt/pg_locale.c:2863 +#: utils/adt/pg_locale.c:3001 #, c-format msgid "could not get language from ICU locale \"%s\": %s" msgstr "не вдалося отримати мову з локалі ICU \"%s\": %s" -#: utils/adt/pg_locale.c:2865 utils/adt/pg_locale.c:2894 +#: utils/adt/pg_locale.c:3003 utils/adt/pg_locale.c:3032 #, c-format msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." msgstr "Щоб вимкнути перевірку мови ICU, встановіть параметр \"%s\" на \"%s\"." -#: utils/adt/pg_locale.c:2892 +#: utils/adt/pg_locale.c:3030 #, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" msgstr "locale ICU \"%s\" має невідому мову \"%s\"" -#: utils/adt/pg_locale.c:3073 +#: utils/adt/pg_locale.c:3181 #, c-format msgid "invalid multibyte character for locale" msgstr "неприпустимий мультибайтний символ для локалізації" -#: utils/adt/pg_locale.c:3074 +#: utils/adt/pg_locale.c:3182 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Параметр локалізації серверу LC_CTYPE, можливо, несумісний з кодуванням бази даних." -#: utils/adt/pg_lsn.c:263 +#: utils/adt/pg_lsn.c:262 #, c-format msgid "cannot add NaN to pg_lsn" msgstr "не можна додати NaN в pg_lsn" -#: utils/adt/pg_lsn.c:297 +#: utils/adt/pg_lsn.c:296 #, c-format msgid "cannot subtract NaN from pg_lsn" msgstr "віднімати NaN з pg_lsn не можна" -#: utils/adt/pg_upgrade_support.c:29 +#: utils/adt/pg_upgrade_support.c:39 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "функцію можна викликати тільки коли сервер знаходиться в режимі двійкового оновлення" -#: utils/adt/pgstatfuncs.c:254 +#: utils/adt/pgstatfuncs.c:252 #, c-format msgid "invalid command name: \"%s\"" msgstr "неприпустиме ім’я команди: \"%s\"" -#: utils/adt/pgstatfuncs.c:1774 +#: utils/adt/pgstatfuncs.c:1739 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "нерозпізнане відновлення мети: \"%s\"" -#: utils/adt/pgstatfuncs.c:1775 +#: utils/adt/pgstatfuncs.c:1740 #, c-format -msgid "Target must be \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", or \"wal\"." -msgstr "Ціль має бути \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", або \"wal\"." +msgid "Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\"." +msgstr "Ціллю має бути \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\" або \"wal\"." -#: utils/adt/pgstatfuncs.c:1857 +#: utils/adt/pgstatfuncs.c:1822 #, c-format msgid "invalid subscription OID %u" msgstr "некоректний OID підписки %u" -#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 +#: utils/adt/pseudorandomfuncs.c:69 +#, c-format +msgid "setseed parameter %g is out of allowed range [-1,1]" +msgstr "параметр setseed %g поза допустимим діапазоном [-1,1]" + +#: utils/adt/pseudotypes.c:55 utils/adt/pseudotypes.c:89 #, c-format msgid "cannot display a value of type %s" msgstr "значення типу %s не можна відобразити" -#: utils/adt/pseudotypes.c:310 +#: utils/adt/pseudotypes.c:307 #, c-format msgid "cannot accept a value of a shell type" msgstr "не можна прийняти значення типу shell" -#: utils/adt/pseudotypes.c:320 +#: utils/adt/pseudotypes.c:317 #, c-format msgid "cannot display a value of a shell type" msgstr "не можна відобразити значення типу shell" -#: utils/adt/rangetypes.c:415 +#: utils/adt/rangetypes.c:422 #, c-format msgid "range constructor flags argument must not be null" msgstr "аргумент позначок конструктору діапазону не може бути null" -#: utils/adt/rangetypes.c:1014 +#: utils/adt/rangetypes.c:1021 #, c-format msgid "result of range difference would not be contiguous" msgstr "результат різниці діапазонів не буде безперервним" -#: utils/adt/rangetypes.c:1075 +#: utils/adt/rangetypes.c:1082 #, c-format msgid "result of range union would not be contiguous" msgstr "результат об'єднання діапазонів не буде безперервним" -#: utils/adt/rangetypes.c:1750 +#: utils/adt/rangetypes.c:1757 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "нижня границя діапазону повинна бути менше або дорівнювати верхній границі діапазону" -#: utils/adt/rangetypes.c:2197 utils/adt/rangetypes.c:2210 -#: utils/adt/rangetypes.c:2224 +#: utils/adt/rangetypes.c:2256 utils/adt/rangetypes.c:2269 +#: utils/adt/rangetypes.c:2283 #, c-format msgid "invalid range bound flags" msgstr "неприпустимі позначки границь діапазону" -#: utils/adt/rangetypes.c:2198 utils/adt/rangetypes.c:2211 -#: utils/adt/rangetypes.c:2225 +#: utils/adt/rangetypes.c:2257 utils/adt/rangetypes.c:2270 +#: utils/adt/rangetypes.c:2284 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Припустимі значення \"[]\", \"[)\", \"(]\", і \"()\"." -#: utils/adt/rangetypes.c:2293 utils/adt/rangetypes.c:2310 -#: utils/adt/rangetypes.c:2325 utils/adt/rangetypes.c:2345 -#: utils/adt/rangetypes.c:2356 utils/adt/rangetypes.c:2403 -#: utils/adt/rangetypes.c:2411 +#: utils/adt/rangetypes.c:2352 utils/adt/rangetypes.c:2369 +#: utils/adt/rangetypes.c:2384 utils/adt/rangetypes.c:2404 +#: utils/adt/rangetypes.c:2415 utils/adt/rangetypes.c:2462 +#: utils/adt/rangetypes.c:2470 #, c-format msgid "malformed range literal: \"%s\"" msgstr "неправильний літерал діапазону: \"%s\"" -#: utils/adt/rangetypes.c:2295 +#: utils/adt/rangetypes.c:2354 #, c-format msgid "Junk after \"empty\" key word." msgstr "Сміття після ключового слова \"empty\"." -#: utils/adt/rangetypes.c:2312 +#: utils/adt/rangetypes.c:2371 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Пропущено ліву дужку (круглу або квадратну)." -#: utils/adt/rangetypes.c:2327 +#: utils/adt/rangetypes.c:2386 #, c-format msgid "Missing comma after lower bound." msgstr "Пропущено кому після нижньої границі." -#: utils/adt/rangetypes.c:2347 +#: utils/adt/rangetypes.c:2406 #, c-format msgid "Too many commas." msgstr "Занадто багато ком." -#: utils/adt/rangetypes.c:2358 +#: utils/adt/rangetypes.c:2417 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Сміття після правої дужки." -#: utils/adt/regexp.c:305 utils/adt/regexp.c:1997 utils/adt/varlena.c:4270 +#: utils/adt/regexp.c:304 utils/adt/regexp.c:1996 utils/adt/varlena.c:4273 #, c-format msgid "regular expression failed: %s" msgstr "помилка в регулярному виразі: %s" -#: utils/adt/regexp.c:446 utils/adt/regexp.c:681 +#: utils/adt/regexp.c:445 utils/adt/regexp.c:680 #, c-format msgid "invalid regular expression option: \"%.*s\"" msgstr "неприпустимий параметр регулярного виразу: \"%.*s\"" -#: utils/adt/regexp.c:683 +#: utils/adt/regexp.c:682 #, c-format msgid "If you meant to use regexp_replace() with a start parameter, cast the fourth argument to integer explicitly." msgstr "Якщо ви хочете використовувати regexp_replace() з початковим параметром, приведіть тип четвертого аргумента до цілого числа." -#: utils/adt/regexp.c:717 utils/adt/regexp.c:726 utils/adt/regexp.c:1083 -#: utils/adt/regexp.c:1147 utils/adt/regexp.c:1156 utils/adt/regexp.c:1165 -#: utils/adt/regexp.c:1174 utils/adt/regexp.c:1854 utils/adt/regexp.c:1863 -#: utils/adt/regexp.c:1872 utils/misc/guc.c:6627 utils/misc/guc.c:6661 +#: 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:6785 utils/misc/guc.c:6819 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "неприпустиме значення для параметра \"%s\": %d" -#: utils/adt/regexp.c:937 +#: utils/adt/regexp.c:936 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "Регулярний вираз SQL не може містити більше двох роздільників escape-double-quote" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:1094 utils/adt/regexp.c:1185 utils/adt/regexp.c:1272 -#: utils/adt/regexp.c:1311 utils/adt/regexp.c:1699 utils/adt/regexp.c:1754 -#: utils/adt/regexp.c:1883 +#: utils/adt/regexp.c:1093 utils/adt/regexp.c:1184 utils/adt/regexp.c:1271 +#: utils/adt/regexp.c:1310 utils/adt/regexp.c:1698 utils/adt/regexp.c:1753 +#: utils/adt/regexp.c:1882 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s не підтримує параметр \"global\"" -#: utils/adt/regexp.c:1313 +#: utils/adt/regexp.c:1312 #, c-format msgid "Use the regexp_matches function instead." msgstr "Використайте функцію regexp_matches замість." -#: utils/adt/regexp.c:1501 +#: utils/adt/regexp.c:1500 #, c-format msgid "too many regular expression matches" msgstr "занадто багато відповідностей для регулярного виразу" @@ -25240,18 +26293,18 @@ msgstr "ім'я \"%s\" мають декілька функцій" msgid "more than one operator named %s" msgstr "ім'я %s мають декілька операторів" -#: utils/adt/regproc.c:670 gram.y:8841 +#: utils/adt/regproc.c:670 gram.y:8992 #, c-format msgid "missing argument" msgstr "пропущено аргумент" -#: utils/adt/regproc.c:671 gram.y:8842 +#: utils/adt/regproc.c:671 gram.y:8993 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Щоб позначити пропущений аргумент унарного оператору, використайте NONE." -#: utils/adt/regproc.c:675 utils/adt/regproc.c:2009 utils/adt/ruleutils.c:10018 -#: utils/adt/ruleutils.c:10231 +#: utils/adt/regproc.c:675 utils/adt/regproc.c:2029 utils/adt/ruleutils.c:10498 +#: utils/adt/ruleutils.c:10711 #, c-format msgid "too many arguments" msgstr "занадто багато аргументів" @@ -25261,308 +26314,319 @@ msgstr "занадто багато аргументів" msgid "Provide two argument types for operator." msgstr "Надайте для оператора два типи аргументів." -#: utils/adt/regproc.c:1544 utils/adt/regproc.c:1661 utils/adt/regproc.c:1790 -#: utils/adt/regproc.c:1795 utils/adt/varlena.c:3410 utils/adt/varlena.c:3415 +#: utils/adt/regproc.c:1564 utils/adt/regproc.c:1681 utils/adt/regproc.c:1810 +#: utils/adt/regproc.c:1815 utils/adt/varlena.c:3413 utils/adt/varlena.c:3418 #, c-format msgid "invalid name syntax" msgstr "неприпустимий синтаксис в імені" -#: utils/adt/regproc.c:1904 +#: utils/adt/regproc.c:1924 #, c-format msgid "expected a left parenthesis" msgstr "очікувалась ліва дужка" -#: utils/adt/regproc.c:1922 +#: utils/adt/regproc.c:1942 #, c-format msgid "expected a right parenthesis" msgstr "очікувалась права дужка" -#: utils/adt/regproc.c:1941 +#: utils/adt/regproc.c:1961 #, c-format msgid "expected a type name" msgstr "очікувалось ім'я типу" -#: utils/adt/regproc.c:1973 +#: utils/adt/regproc.c:1993 #, c-format msgid "improper type name" msgstr "неправильне ім'я типу" -#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1625 -#: utils/adt/ri_triggers.c:2610 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1616 +#: utils/adt/ri_triggers.c:2601 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "insert або update в таблиці \"%s\" порушує обмеження зовнішнього ключа \"%s\"" -#: utils/adt/ri_triggers.c:309 utils/adt/ri_triggers.c:1628 +#: utils/adt/ri_triggers.c:306 utils/adt/ri_triggers.c:1619 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL не дозволяє змішувати в значенні ключа null і nonnull." -#: utils/adt/ri_triggers.c:2045 +#: utils/adt/ri_triggers.c:2036 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "функція \"%s\" повинна запускатись для INSERT" -#: utils/adt/ri_triggers.c:2051 +#: utils/adt/ri_triggers.c:2042 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "функція \"%s\" повинна запускатись для UPDATE" -#: utils/adt/ri_triggers.c:2057 +#: utils/adt/ri_triggers.c:2048 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "функція \"%s\" повинна запускатись для DELETE" -#: utils/adt/ri_triggers.c:2080 +#: utils/adt/ri_triggers.c:2071 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "для тригеру \"%s\" таблиці \"%s\" немає введення pg_constraint" -#: utils/adt/ri_triggers.c:2082 +#: utils/adt/ri_triggers.c:2073 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Видаліть цей тригер цілісності зв’язків і пов'язані об'єкти, а потім виконайте ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2112 gram.y:4223 +#: utils/adt/ri_triggers.c:2103 gram.y:4340 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "Вираз MATCH PARTIAL все ще не реалізований" -#: utils/adt/ri_triggers.c:2435 +#: utils/adt/ri_triggers.c:2426 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "неочікуваний результат запиту цілісності зв’язків до \"%s\" з обмеження \"%s\" таблиці \"%s\"" -#: utils/adt/ri_triggers.c:2439 +#: utils/adt/ri_triggers.c:2430 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Скоріше за все, це викликано правилом, яке переписало запит." -#: utils/adt/ri_triggers.c:2600 +#: utils/adt/ri_triggers.c:2591 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "видалення секції \"%s\" порушує обмеження зовнішнього ключа \"%s" -#: utils/adt/ri_triggers.c:2603 utils/adt/ri_triggers.c:2628 +#: utils/adt/ri_triggers.c:2594 utils/adt/ri_triggers.c:2619 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "На ключ (%s)=(%s) все ще є посилання в таблиці \"%s\"." -#: utils/adt/ri_triggers.c:2614 +#: utils/adt/ri_triggers.c:2605 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Ключ (%s)=(%s) не присутній в таблиці \"%s\"." -#: utils/adt/ri_triggers.c:2617 +#: utils/adt/ri_triggers.c:2608 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Ключ не присутній в таблиці \"%s\"." -#: utils/adt/ri_triggers.c:2623 +#: utils/adt/ri_triggers.c:2614 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update або delete в таблиці \"%s\" порушує обмеження зовнішнього ключа \"%s\" таблиці \"%s\"" -#: utils/adt/ri_triggers.c:2631 +#: utils/adt/ri_triggers.c:2622 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "На ключ все ще є посилання в таблиці \"%s\"." -#: utils/adt/rowtypes.c:106 utils/adt/rowtypes.c:510 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:509 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "введення анонімних складених типів не реалізовано" -#: utils/adt/rowtypes.c:159 utils/adt/rowtypes.c:191 utils/adt/rowtypes.c:217 -#: utils/adt/rowtypes.c:228 utils/adt/rowtypes.c:286 utils/adt/rowtypes.c:297 +#: utils/adt/rowtypes.c:158 utils/adt/rowtypes.c:190 utils/adt/rowtypes.c:216 +#: utils/adt/rowtypes.c:227 utils/adt/rowtypes.c:285 utils/adt/rowtypes.c:296 #, c-format msgid "malformed record literal: \"%s\"" msgstr "невірно сформований літерал запису: \"%s\"" -#: utils/adt/rowtypes.c:160 +#: utils/adt/rowtypes.c:159 #, c-format msgid "Missing left parenthesis." msgstr "Відсутня ліва дужка." -#: utils/adt/rowtypes.c:192 +#: utils/adt/rowtypes.c:191 #, c-format msgid "Too few columns." msgstr "Занадто мало стовпців." -#: utils/adt/rowtypes.c:287 +#: utils/adt/rowtypes.c:286 #, c-format msgid "Too many columns." msgstr "Занадто багато стовпців." -#: utils/adt/rowtypes.c:298 +#: utils/adt/rowtypes.c:297 #, c-format msgid "Junk after right parenthesis." msgstr "Сміття післа правої дужки." -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:558 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "неправильна кількість стовпців: %d, очікувалось %d" -#: utils/adt/rowtypes.c:601 +#: utils/adt/rowtypes.c:599 #, c-format msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" msgstr "двійкові дані мають тип %u (%s) замість очікуваного %u (%s) в стовпці запису %d" -#: utils/adt/rowtypes.c:668 +#: utils/adt/rowtypes.c:660 #, c-format msgid "improper binary format in record column %d" msgstr "неправильний двійковий формат у стовпці запису %d" -#: utils/adt/rowtypes.c:959 utils/adt/rowtypes.c:1205 utils/adt/rowtypes.c:1463 -#: utils/adt/rowtypes.c:1709 +#: utils/adt/rowtypes.c:949 utils/adt/rowtypes.c:1195 utils/adt/rowtypes.c:1453 +#: utils/adt/rowtypes.c:1699 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "не можна порівнювати неподібні типи стовпців %s і %s, стовпець запису %d" -#: utils/adt/rowtypes.c:1050 utils/adt/rowtypes.c:1275 -#: utils/adt/rowtypes.c:1560 utils/adt/rowtypes.c:1745 +#: utils/adt/rowtypes.c:1040 utils/adt/rowtypes.c:1265 +#: utils/adt/rowtypes.c:1550 utils/adt/rowtypes.c:1735 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "не можна порівнювати типи записів з різної кількістю стовпців" -#: utils/adt/ruleutils.c:2679 +#: utils/adt/ruleutils.c:2689 #, c-format msgid "input is a query, not an expression" msgstr "вхідне значення є запитом, а не виразом" -#: utils/adt/ruleutils.c:2691 +#: utils/adt/ruleutils.c:2701 #, c-format msgid "expression contains variables of more than one relation" msgstr "вираз містить змінні більше одного відношення" -#: utils/adt/ruleutils.c:2698 +#: utils/adt/ruleutils.c:2708 #, c-format msgid "expression contains variables" msgstr "вираз містить змінні" -#: utils/adt/ruleutils.c:5225 +#: utils/adt/ruleutils.c:5241 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "правило \"%s\" має непідтримуваний тип подій %d" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:128 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "TIMESTAMP(%d)%s точність не повинна бути від'ємною" -#: utils/adt/timestamp.c:118 +#: utils/adt/timestamp.c:134 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s точність зменшена до дозволеного максимуму, %d" -#: utils/adt/timestamp.c:378 +#: utils/adt/timestamp.c:394 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "точність позначки часу (%d) повинна бути між %d і %d" -#: utils/adt/timestamp.c:496 +#: utils/adt/timestamp.c:512 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Числові часові пояси повинні мати \"-\" або \"+\" в якості першого символу." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:524 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "числовий часовий пояс \"%s\" поза діапазоном" -#: utils/adt/timestamp.c:609 utils/adt/timestamp.c:619 -#: utils/adt/timestamp.c:627 +#: utils/adt/timestamp.c:625 utils/adt/timestamp.c:635 +#: utils/adt/timestamp.c:643 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "позначка часу поза діапазоном: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:728 +#: utils/adt/timestamp.c:744 #, c-format msgid "timestamp cannot be NaN" msgstr "позначка часу не може бути NaN" -#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:758 +#: utils/adt/timestamp.c:762 utils/adt/timestamp.c:774 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "позначка часу поза діапазоном: \"%g\"" -#: utils/adt/timestamp.c:941 utils/adt/timestamp.c:1518 -#: utils/adt/timestamp.c:2708 utils/adt/timestamp.c:2778 -#: utils/adt/timestamp.c:2795 utils/adt/timestamp.c:2848 -#: utils/adt/timestamp.c:2887 utils/adt/timestamp.c:3203 -#: utils/adt/timestamp.c:3208 utils/adt/timestamp.c:3213 -#: utils/adt/timestamp.c:3263 utils/adt/timestamp.c:3270 -#: utils/adt/timestamp.c:3277 utils/adt/timestamp.c:3297 -#: utils/adt/timestamp.c:3304 utils/adt/timestamp.c:3311 -#: utils/adt/timestamp.c:3398 utils/adt/timestamp.c:3473 -#: utils/adt/timestamp.c:3842 utils/adt/timestamp.c:3966 -#: utils/adt/timestamp.c:4486 +#: 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: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 "інтервал поза діапазоном" -#: utils/adt/timestamp.c:1065 utils/adt/timestamp.c:1098 +#: utils/adt/timestamp.c:1094 utils/adt/timestamp.c:1127 #, c-format msgid "invalid INTERVAL type modifier" msgstr "неприпустимий модифікатор типу INTERVAL" -#: utils/adt/timestamp.c:1081 +#: utils/adt/timestamp.c:1110 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d) точність не повинна бути від'ємною" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1116 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d) точність зменшена до максимально можливої, %d" -#: utils/adt/timestamp.c:1473 +#: utils/adt/timestamp.c:1506 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "interval(%d) точність повинна бути між %d і %d" -#: utils/adt/timestamp.c:2703 -#, c-format -msgid "cannot subtract infinite timestamps" -msgstr "віднімати безкінечні позначки часу не можна" - -#: utils/adt/timestamp.c:4002 utils/adt/timestamp.c:4185 +#: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 #, c-format msgid "origin out of range" msgstr "джерело поза діапазоном" -#: utils/adt/timestamp.c:4007 utils/adt/timestamp.c:4190 +#: utils/adt/timestamp.c:4569 utils/adt/timestamp.c:4774 +#, c-format +msgid "timestamps cannot be binned into infinite intervals" +msgstr "мітки часу не можуть бути розбиті на нескінченні інтервали" + +#: utils/adt/timestamp.c:4574 utils/adt/timestamp.c:4779 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "позначки часу не можна розділяти на інтервали, що містять місяці або роки" -#: utils/adt/timestamp.c:4014 utils/adt/timestamp.c:4197 +#: utils/adt/timestamp.c:4585 utils/adt/timestamp.c:4790 #, c-format msgid "stride must be greater than zero" msgstr "крок повинен бути більше нуля" -#: utils/adt/timestamp.c:4480 +#: utils/adt/timestamp.c:5091 #, c-format msgid "Months usually have fractional weeks." msgstr "У місяців зазвичай є дробові тижні." -#: utils/adt/trigfuncs.c:42 +#: utils/adt/timestamp.c:6551 utils/adt/timestamp.c:6637 +#, c-format +msgid "step size cannot be infinite" +msgstr "розмір кроку не може бути нескінченним" + +#: utils/adt/trigfuncs.c:41 #, c-format msgid "suppress_redundant_updates_trigger: must be called as trigger" msgstr "suppress_redundant_updates_trigger: повинна викликатись як тригер" -#: utils/adt/trigfuncs.c:48 +#: utils/adt/trigfuncs.c:47 #, c-format msgid "suppress_redundant_updates_trigger: must be called on update" msgstr "suppress_redundant_updates_trigger: повинна викликатись при оновленні" -#: utils/adt/trigfuncs.c:54 +#: utils/adt/trigfuncs.c:53 #, c-format msgid "suppress_redundant_updates_trigger: must be called before update" msgstr "suppress_redundant_updates_trigger: повинна викликатись перед оновленням" -#: utils/adt/trigfuncs.c:60 +#: utils/adt/trigfuncs.c:59 #, c-format msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: повинна викликатис перед кожним рядком" @@ -25577,32 +26641,32 @@ msgstr "відстань у фразовому операторі повинна msgid "no operand in tsquery: \"%s\"" msgstr "немає оператора в tsquery: \"%s\"" -#: utils/adt/tsquery.c:558 +#: utils/adt/tsquery.c:554 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "занадто велике значення в tsquery: \"%s\"" -#: utils/adt/tsquery.c:563 +#: utils/adt/tsquery.c:559 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "занадто довгий операнд в tsquery: \"%s\"" -#: utils/adt/tsquery.c:591 +#: utils/adt/tsquery.c:587 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "занадто довге слово в tsquery: \"%s\"" -#: utils/adt/tsquery.c:717 utils/adt/tsvector_parser.c:147 +#: utils/adt/tsquery.c:713 utils/adt/tsvector_parser.c:147 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "синтаксична помилка в tsquery: \"%s\"" -#: utils/adt/tsquery.c:883 +#: utils/adt/tsquery.c:879 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "запит пошуку тексту не містить лексем: \"%s\"" -#: utils/adt/tsquery.c:894 utils/adt/tsquery_util.c:376 +#: utils/adt/tsquery.c:890 utils/adt/tsquery_util.c:376 #, c-format msgid "tsquery is too large" msgstr "tsquery занадто великий" @@ -25637,72 +26701,72 @@ msgstr "масив значимості не повинен містити null" msgid "weight out of range" msgstr "значимість поза діапазоном" -#: utils/adt/tsvector.c:217 +#: utils/adt/tsvector.c:216 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "слово занадто довге (%ld байт, при максимумі %ld)" -#: utils/adt/tsvector.c:224 +#: utils/adt/tsvector.c:223 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "рядок занадто довгий для tsvector (%ld байт, при максимумі %ld)" -#: utils/adt/tsvector_op.c:773 +#: utils/adt/tsvector_op.c:771 #, c-format msgid "lexeme array may not contain nulls" msgstr "масив лексем не може містити null" -#: utils/adt/tsvector_op.c:778 +#: utils/adt/tsvector_op.c:776 #, c-format msgid "lexeme array may not contain empty strings" msgstr "масив лексем не може містити порожніх рядків" -#: utils/adt/tsvector_op.c:847 +#: utils/adt/tsvector_op.c:845 #, c-format msgid "weight array may not contain nulls" msgstr "масив значимості не може містити null" -#: utils/adt/tsvector_op.c:871 +#: utils/adt/tsvector_op.c:869 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "нерозпізнана значимість: \"%c\"" -#: utils/adt/tsvector_op.c:2601 +#: utils/adt/tsvector_op.c:2599 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "запит ts_stat повинен повернути один стовпець tsvector" -#: utils/adt/tsvector_op.c:2790 +#: utils/adt/tsvector_op.c:2788 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "стовпець типу tsvector \"%s\" не існує" -#: utils/adt/tsvector_op.c:2797 +#: utils/adt/tsvector_op.c:2795 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "стовпець \"%s\" повинен мати тип tsvector" -#: utils/adt/tsvector_op.c:2809 +#: utils/adt/tsvector_op.c:2807 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "стовпець конфігурації \"%s\" не існує" -#: utils/adt/tsvector_op.c:2815 +#: utils/adt/tsvector_op.c:2813 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "стовпець \"%s\" повинен мати тип regconfig" -#: utils/adt/tsvector_op.c:2822 +#: utils/adt/tsvector_op.c:2820 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "значення стовпця конфігурації \"%s\" не повинне бути null" -#: utils/adt/tsvector_op.c:2835 +#: utils/adt/tsvector_op.c:2833 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "ім'я конфігурації текстового пошуку \"%s\" повинно вказуватися зі схемою" -#: utils/adt/tsvector_op.c:2860 +#: utils/adt/tsvector_op.c:2858 #, c-format msgid "column \"%s\" is not of a character type" msgstr "стовпець \"%s\" має не символьний тип" @@ -25722,17 +26786,17 @@ msgstr "немає пропущеного символу: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "неправильна інформація про позицію в tsvector: \"%s\"" -#: utils/adt/uuid.c:413 +#: utils/adt/uuid.c:418 #, c-format msgid "could not generate random values" msgstr "не вдалося згенерувати випадкові значення" -#: utils/adt/varbit.c:110 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "довжина для типу %s повинна бути мінімум 1" -#: utils/adt/varbit.c:115 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "довжина для типу %s не може перевищувати %d" @@ -25767,9 +26831,9 @@ msgstr "неприпустима довжина у зовнішньому ряд msgid "bit string too long for type bit varying(%d)" msgstr "рядок бітів занадто довгий для типу bit varying(%d)" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:908 -#: utils/adt/varlena.c:971 utils/adt/varlena.c:1128 utils/adt/varlena.c:3052 -#: utils/adt/varlena.c:3130 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:911 +#: utils/adt/varlena.c:974 utils/adt/varlena.c:1131 utils/adt/varlena.c:3055 +#: utils/adt/varlena.c:3133 #, c-format msgid "negative substring length not allowed" msgstr "від'ємна довжина підрядка не дозволена" @@ -25794,122 +26858,127 @@ msgstr "не можна використовувати (XOR) для бітови msgid "bit index %d out of valid range (0..%d)" msgstr "індекс біту %d поза припустимим діапазоном (0..%d)" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3334 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3337 #, c-format msgid "new bit must be 0 or 1" msgstr "новий біт повинен бути 0 або 1" -#: utils/adt/varchar.c:162 utils/adt/varchar.c:313 +#: utils/adt/varchar.c:161 utils/adt/varchar.c:312 #, c-format msgid "value too long for type character(%d)" msgstr "значення занадто довге для типу character(%d)" -#: utils/adt/varchar.c:476 utils/adt/varchar.c:640 +#: utils/adt/varchar.c:475 utils/adt/varchar.c:639 #, c-format msgid "value too long for type character varying(%d)" msgstr "значення занадто довге для типу character varying(%d)" -#: utils/adt/varchar.c:738 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:737 utils/adt/varlena.c:1520 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "не вдалося визначити, який параметр сортування використати для порівняння рядків" -#: utils/adt/varlena.c:1227 utils/adt/varlena.c:1806 +#: utils/adt/varlena.c:1230 utils/adt/varlena.c:1809 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "недетерміновані параметри сортування не підтримуються для пошуку підрядків" -#: utils/adt/varlena.c:3218 utils/adt/varlena.c:3285 +#: utils/adt/varlena.c:3221 utils/adt/varlena.c:3288 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "індекс %d поза припустимим діапазоном, 0..%d" -#: utils/adt/varlena.c:3249 utils/adt/varlena.c:3321 +#: utils/adt/varlena.c:3252 utils/adt/varlena.c:3324 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "індекс %lld поза допустимим діапазоном, 0..%lld" -#: utils/adt/varlena.c:4382 +#: utils/adt/varlena.c:4385 #, c-format msgid "field position must not be zero" msgstr "позиція поля не повинна бути нульовою" -#: utils/adt/varlena.c:5554 +#: utils/adt/varlena.c:5630 #, c-format msgid "unterminated format() type specifier" msgstr "незавершений специфікатор типу format()" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5689 utils/adt/varlena.c:5810 +#: utils/adt/varlena.c:5631 utils/adt/varlena.c:5765 utils/adt/varlena.c:5886 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Для представлення одного знаку \"%%\", використайте \"%%%%\"." -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5808 +#: utils/adt/varlena.c:5763 utils/adt/varlena.c:5884 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "нерозпізнаний специфікатор типу format() \"%.*s\"" -#: utils/adt/varlena.c:5700 utils/adt/varlena.c:5757 +#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5833 #, c-format msgid "too few arguments for format()" msgstr "занадто мало аргументів для format()" -#: utils/adt/varlena.c:5853 utils/adt/varlena.c:6035 +#: utils/adt/varlena.c:5929 utils/adt/varlena.c:6111 #, c-format msgid "number is out of range" msgstr "число поза діапазоном" -#: utils/adt/varlena.c:5916 utils/adt/varlena.c:5944 +#: utils/adt/varlena.c:5992 utils/adt/varlena.c:6020 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "формат посилається на аргумент 0, але аргументи нумеруются з 1" -#: utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:6013 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "вказівка аргументу ширини повинно закінчуватися \"$\"" -#: utils/adt/varlena.c:5982 +#: utils/adt/varlena.c:6058 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "значення null не можна форматувати у вигляді SQL-ідентифікатору" -#: utils/adt/varlena.c:6190 +#: utils/adt/varlena.c:6266 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "Нормалізація Unicode може виконуватись лише тоді, коли кодування серверу - UTF8" -#: utils/adt/varlena.c:6203 +#: utils/adt/varlena.c:6279 #, c-format msgid "invalid normalization form: %s" msgstr "неприпустима форма нормалізації: %s" -#: utils/adt/varlena.c:6406 utils/adt/varlena.c:6441 utils/adt/varlena.c:6476 +#: utils/adt/varlena.c:6324 +#, c-format +msgid "Unicode categorization can only be performed if server encoding is UTF8" +msgstr "Категоризація в юні коді може бути виконана, тільки якщо кодування сервера - UTF8" + +#: utils/adt/varlena.c:6541 utils/adt/varlena.c:6576 utils/adt/varlena.c:6611 #, c-format msgid "invalid Unicode code point: %04X" msgstr "неприпустима точка коду Unicode: %04X" -#: utils/adt/varlena.c:6506 +#: utils/adt/varlena.c:6641 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "Спеціальні коди Unicode повинні бути \\XXXX, \\+XXXXXX, \\uXXXXXX, або \\UXXXXXX." -#: utils/adt/windowfuncs.c:442 +#: utils/adt/windowfuncs.c:443 #, c-format msgid "argument of ntile must be greater than zero" msgstr "аргумент ntile повинен бути більше нуля" -#: utils/adt/windowfuncs.c:706 +#: utils/adt/windowfuncs.c:707 #, c-format msgid "argument of nth_value must be greater than zero" msgstr "аргумент nth_value повинен бути більше нуля" -#: utils/adt/xid8funcs.c:126 +#: utils/adt/xid8funcs.c:124 #, c-format msgid "transaction ID %llu is in the future" msgstr "ідентифікатор транзакції %llu знаходиться в майбутньому" -#: utils/adt/xid8funcs.c:555 +#: utils/adt/xid8funcs.c:553 #, c-format msgid "invalid external pg_snapshot data" msgstr "неприпустимі зовнішні дані pg_snapshot" @@ -25924,7 +26993,7 @@ msgstr "XML-функції не підтримуються" msgid "This functionality requires the server to be built with libxml support." msgstr "Ця функціональність потребує, щоб сервер був побудований з підтримкою libxml." -#: utils/adt/xml.c:258 utils/mb/mbutils.c:628 +#: utils/adt/xml.c:258 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "неприпустиме ім’я кодування \"%s\"" @@ -25934,217 +27003,217 @@ msgstr "неприпустиме ім’я кодування \"%s\"" msgid "invalid XML comment" msgstr "неприпустимий XML-коментар" -#: utils/adt/xml.c:670 +#: utils/adt/xml.c:697 #, c-format msgid "not an XML document" msgstr "не XML-документ" -#: utils/adt/xml.c:966 utils/adt/xml.c:989 +#: utils/adt/xml.c:1008 utils/adt/xml.c:1031 #, c-format msgid "invalid XML processing instruction" msgstr "неприпустима XML-команда обробки" -#: utils/adt/xml.c:967 +#: utils/adt/xml.c:1009 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "Метою XML-команди обробки не може бути \"%s\"." -#: utils/adt/xml.c:990 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "XML-команда обробки не може містити \"?>\"." -#: utils/adt/xml.c:1069 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "функція xmlvalidate не реалізована" -#: utils/adt/xml.c:1125 +#: utils/adt/xml.c:1167 #, c-format msgid "could not initialize XML library" msgstr "не вдалося ініціалізувати бібліотеку XML" -#: utils/adt/xml.c:1126 +#: utils/adt/xml.c:1168 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%zu, sizeof(xmlChar)=%zu." msgstr "libxml2 має несумісний тип char: sizeof(char)=%zu, sizeof(xmlChar)=%zu." -#: utils/adt/xml.c:1212 +#: utils/adt/xml.c:1254 #, c-format msgid "could not set up XML error handler" msgstr "не вдалося встановити обробник XML-помилок" -#: utils/adt/xml.c:1213 +#: 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 "Можливо це означає, що використовувана версія libxml2 несумісна з файлами-заголовками libxml2, з котрими був зібраний PostgreSQL." -#: utils/adt/xml.c:2199 +#: utils/adt/xml.c:2281 msgid "Invalid character value." msgstr "Неприпустиме значення символу." -#: utils/adt/xml.c:2202 +#: utils/adt/xml.c:2284 msgid "Space required." msgstr "Потребується пробіл." -#: utils/adt/xml.c:2205 +#: utils/adt/xml.c:2287 msgid "standalone accepts only 'yes' or 'no'." msgstr "значеннями атрибуту standalone можуть бути лише 'yes' або 'no'." -#: utils/adt/xml.c:2208 +#: utils/adt/xml.c:2290 msgid "Malformed declaration: missing version." msgstr "Неправильне оголошення: пропущена версія." -#: utils/adt/xml.c:2211 +#: utils/adt/xml.c:2293 msgid "Missing encoding in text declaration." msgstr "В оголошенні пропущене кодування." -#: utils/adt/xml.c:2214 +#: utils/adt/xml.c:2296 msgid "Parsing XML declaration: '?>' expected." msgstr "Аналіз XML-оголошення: '?>' очікується." -#: utils/adt/xml.c:2217 +#: utils/adt/xml.c:2299 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Нерозпізнаний код помилки libxml: %d." -#: utils/adt/xml.c:2471 +#: utils/adt/xml.c:2553 #, c-format msgid "XML does not support infinite date values." msgstr "XML не підтримує безкінечні значення в датах." -#: utils/adt/xml.c:2493 utils/adt/xml.c:2520 +#: 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:2936 +#: utils/adt/xml.c:3018 #, c-format msgid "invalid query" msgstr "неприпустимий запит" -#: utils/adt/xml.c:3028 +#: utils/adt/xml.c:3110 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "portal \"%s\" не повертає кортежі" -#: utils/adt/xml.c:4280 +#: utils/adt/xml.c:4362 #, c-format msgid "invalid array for XML namespace mapping" msgstr "неприпустимий масив з зіставленням простіру імен XML" -#: utils/adt/xml.c:4281 +#: utils/adt/xml.c:4363 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Масив повинен бути двовимірним і містити 2 елемента по другій вісі." -#: utils/adt/xml.c:4305 +#: utils/adt/xml.c:4387 #, c-format msgid "empty XPath expression" msgstr "пустий вираз XPath" -#: utils/adt/xml.c:4357 +#: utils/adt/xml.c:4439 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ні ім'я простіру імен ні URI не можуть бути null" -#: utils/adt/xml.c:4364 +#: utils/adt/xml.c:4446 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "не вдалося зареєструвати простір імен XML з ім'ям \"%s\" і URI \"%s\"" -#: utils/adt/xml.c:4707 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "Простір імен DEFAULT не підтримується" -#: utils/adt/xml.c:4736 +#: utils/adt/xml.c:4824 #, c-format msgid "row path filter must not be empty string" msgstr "шлях фільтруючих рядків не повинен бути пустим" -#: utils/adt/xml.c:4767 +#: utils/adt/xml.c:4858 #, c-format msgid "column path filter must not be empty string" msgstr "шлях фільтруючого стовпця не повинен бути пустим" -#: utils/adt/xml.c:4911 +#: utils/adt/xml.c:5005 #, c-format msgid "more than one value returned by column XPath expression" msgstr "вираз XPath, який відбирає стовпець, повернув більше одного значення" -#: utils/cache/lsyscache.c:1043 +#: utils/cache/lsyscache.c:1017 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "приведення від типу %s до типу %s не існує" -#: utils/cache/lsyscache.c:2845 utils/cache/lsyscache.c:2878 -#: utils/cache/lsyscache.c:2911 utils/cache/lsyscache.c:2944 +#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 +#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 #, c-format msgid "type %s is only a shell" msgstr "тип %s лише оболонка" -#: utils/cache/lsyscache.c:2850 +#: utils/cache/lsyscache.c:2892 #, c-format msgid "no input function available for type %s" msgstr "для типу %s немає доступної функції введення" -#: utils/cache/lsyscache.c:2883 +#: utils/cache/lsyscache.c:2925 #, c-format msgid "no output function available for type %s" msgstr "для типу %s немає доступної функції виводу" -#: utils/cache/partcache.c:219 +#: utils/cache/partcache.c:216 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "в класі операторів \"%s\" методу доступу %s пропущено опорну функцію %d для типу %s" -#: utils/cache/plancache.c:724 +#: utils/cache/plancache.c:747 #, c-format msgid "cached plan must not change result type" msgstr "в кешованому плані не повинен змінюватись тип результату" -#: utils/cache/relcache.c:3741 +#: utils/cache/relcache.c:3800 #, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" msgstr "значення relfilenumber не встановлене у режимі двійкового оновлення" -#: utils/cache/relcache.c:3749 +#: utils/cache/relcache.c:3808 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "неочікуваний запит на новий relfilenumber в режимі двійкового оновлення" -#: utils/cache/relcache.c:6495 +#: utils/cache/relcache.c:6536 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "не вдалося створити файл ініціалізації для кешу відношень \"%s\": %m" -#: utils/cache/relcache.c:6497 +#: utils/cache/relcache.c:6538 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Продовжуємо усе одно, але щось не так." -#: utils/cache/relcache.c:6819 +#: utils/cache/relcache.c:6868 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "не вдалося видалити файл кешу \"%s\": %m" -#: utils/cache/relmapper.c:597 +#: utils/cache/relmapper.c:596 #, c-format msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "виконати PREPARE для транзакції, яка змінила зіставлення відношень, не можна" -#: utils/cache/relmapper.c:853 +#: utils/cache/relmapper.c:852 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "файл зіставлень відношень \"%s\" містить неприпустимі дані" -#: utils/cache/relmapper.c:863 +#: utils/cache/relmapper.c:862 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "файл зіставлень відношень \"%s\" містить неправильну контрольну суму" -#: utils/cache/typcache.c:1809 utils/fmgr/funcapi.c:566 +#: utils/cache/typcache.c:1812 utils/fmgr/funcapi.c:574 #, c-format msgid "record type has not been registered" msgstr "тип запису не зареєстрований" @@ -26159,102 +27228,102 @@ msgstr "TRAP: ExceptionalCondition: невірні аргументи в PID %d\ msgid "TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n" msgstr "TRAP: помилка Assert(\"%s\"), файл: \"%s\", рядок: %d, PID: %d\n" -#: utils/error/elog.c:416 +#: utils/error/elog.c:415 #, c-format msgid "error occurred before error message processing is available\n" msgstr "сталася помилка перед тим, як обробка повідомлення про помилку була доступна\n" -#: utils/error/elog.c:2096 +#: utils/error/elog.c:2134 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "не вдалося повторно відкрити файл \"%s\" як stderr: %m" -#: utils/error/elog.c:2109 +#: utils/error/elog.c:2147 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "не вдалося повторно відкрити файл \"%s\" як stdout: %m" -#: utils/error/elog.c:2145 +#: utils/error/elog.c:2183 #, c-format -msgid "invalid character" -msgstr "неприпустимий символ" +msgid "Invalid character" +msgstr "Неприпустимий символ" -#: utils/error/elog.c:2851 utils/error/elog.c:2878 utils/error/elog.c:2894 +#: utils/error/elog.c:2889 utils/error/elog.c:2916 utils/error/elog.c:2932 msgid "[unknown]" msgstr "[unknown]" -#: utils/error/elog.c:3167 utils/error/elog.c:3488 utils/error/elog.c:3595 +#: utils/error/elog.c:3202 utils/error/elog.c:3526 utils/error/elog.c:3633 msgid "missing error text" msgstr "пропущено текст помилки" -#: utils/error/elog.c:3170 utils/error/elog.c:3173 +#: utils/error/elog.c:3205 utils/error/elog.c:3208 #, c-format msgid " at character %d" msgstr " символ %d" -#: utils/error/elog.c:3183 utils/error/elog.c:3190 +#: utils/error/elog.c:3218 utils/error/elog.c:3225 msgid "DETAIL: " msgstr "ВІДОМОСТІ: " -#: utils/error/elog.c:3197 +#: utils/error/elog.c:3232 msgid "HINT: " msgstr "УКАЗІВКА: " -#: utils/error/elog.c:3204 +#: utils/error/elog.c:3239 msgid "QUERY: " msgstr "ЗАПИТ: " -#: utils/error/elog.c:3211 +#: utils/error/elog.c:3246 msgid "CONTEXT: " msgstr "КОНТЕКСТ: " -#: utils/error/elog.c:3221 +#: utils/error/elog.c:3256 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "РОЗТАШУВАННЯ: %s, %s:%d\n" -#: utils/error/elog.c:3228 +#: utils/error/elog.c:3263 #, c-format msgid "LOCATION: %s:%d\n" msgstr "РОЗТАШУВАННЯ: %s:%d\n" -#: utils/error/elog.c:3235 +#: utils/error/elog.c:3270 msgid "BACKTRACE: " msgstr "ВІДСТЕЖУВАТИ: " -#: utils/error/elog.c:3247 +#: utils/error/elog.c:3282 msgid "STATEMENT: " msgstr "ІНСТРУКЦІЯ: " -#: utils/error/elog.c:3640 +#: utils/error/elog.c:3678 msgid "DEBUG" msgstr "НАЛАГОДЖЕННЯ" -#: utils/error/elog.c:3644 +#: utils/error/elog.c:3682 msgid "LOG" msgstr "ЗАПИСУВАННЯ" -#: utils/error/elog.c:3647 +#: utils/error/elog.c:3685 msgid "INFO" msgstr "ІНФОРМАЦІЯ" -#: utils/error/elog.c:3650 +#: utils/error/elog.c:3688 msgid "NOTICE" msgstr "ПОВІДОМЛЕННЯ" -#: utils/error/elog.c:3654 +#: utils/error/elog.c:3692 msgid "WARNING" msgstr "ПОПЕРЕДЖЕННЯ" -#: utils/error/elog.c:3657 +#: utils/error/elog.c:3695 msgid "ERROR" msgstr "ПОМИЛКА" -#: utils/error/elog.c:3660 +#: utils/error/elog.c:3698 msgid "FATAL" msgstr "ФАТАЛЬНО" -#: utils/error/elog.c:3663 +#: utils/error/elog.c:3701 msgid "PANIC" msgstr "ПАНІКА" @@ -26327,22 +27396,22 @@ msgstr "Магічний блок має неочікувану довжину msgid "incompatible library \"%s\": magic block mismatch" msgstr "несумісна бібліотка \"%s\": невідповідність магічного блоку" -#: utils/fmgr/dfmgr.c:492 +#: utils/fmgr/dfmgr.c:475 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "доступ до бібліотеки \"%s\" не дозволений" -#: utils/fmgr/dfmgr.c:518 +#: utils/fmgr/dfmgr.c:501 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "неприпустиме ім'я макросу в шляху динамічної бібліотеки: %s" -#: utils/fmgr/dfmgr.c:558 +#: utils/fmgr/dfmgr.c:541 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "параметр \"dynamic_library_path\" містить компонент нульової довжини" -#: utils/fmgr/dfmgr.c:577 +#: utils/fmgr/dfmgr.c:560 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "параметр \"dynamic_library_path\" містить компонент, який не є абсолютним шляхом" @@ -26367,223 +27436,213 @@ msgstr "Функції, які викликаються з SQL, потребую msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "нерозпізнана версія API %d, повідомлена інформаційною функцією \"%s\"" -#: utils/fmgr/fmgr.c:2080 +#: utils/fmgr/fmgr.c:2109 #, c-format msgid "operator class options info is absent in function call context" msgstr "в контексті виклику функції відсутня інформація стосовно параметрів класів операторів" -#: utils/fmgr/fmgr.c:2147 +#: utils/fmgr/fmgr.c:2176 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "функція мовної перевірки %u викликана для мови %u замість %u" -#: utils/fmgr/funcapi.c:489 +#: utils/fmgr/funcapi.c:496 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "не вдалося визначити фактичний тип результату для функції \"%s\" оголошеної як, та, котра повертає тип %s" -#: utils/fmgr/funcapi.c:634 +#: utils/fmgr/funcapi.c:642 #, c-format msgid "argument declared %s does not contain a range type but type %s" msgstr "оголошений аргумент %s не містить тип діапазону, а тип %s" -#: utils/fmgr/funcapi.c:717 -#, c-format -msgid "could not find multirange type for data type %s" -msgstr "не вдалося знайти багатодіапазонний тип для типу даних %s" - -#: utils/fmgr/funcapi.c:1921 utils/fmgr/funcapi.c:1953 +#: utils/fmgr/funcapi.c:1929 utils/fmgr/funcapi.c:1961 #, c-format msgid "number of aliases does not match number of columns" msgstr "кількість псевдонімів не відповідає кількості стовпців" -#: utils/fmgr/funcapi.c:1947 +#: utils/fmgr/funcapi.c:1955 #, c-format msgid "no column alias was provided" msgstr "жодного псевдоніму для стовпця не було надано" -#: utils/fmgr/funcapi.c:1971 +#: utils/fmgr/funcapi.c:1979 #, c-format msgid "could not determine row description for function returning record" msgstr "не вдалося визначити опис рядка для функції, що повертає запис" -#: utils/init/miscinit.c:346 +#: utils/init/miscinit.c:352 #, c-format msgid "data directory \"%s\" does not exist" msgstr "каталог даних \"%s\" не існує" -#: utils/init/miscinit.c:351 +#: utils/init/miscinit.c:357 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "не вдалося прочитати дозволи на каталог \"%s\": %m" -#: utils/init/miscinit.c:359 +#: utils/init/miscinit.c:365 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "вказаний каталог даних \"%s\" не є каталогом" -#: utils/init/miscinit.c:375 +#: utils/init/miscinit.c:381 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "власник каталогу даних \"%s\" визначений неправильно" -#: utils/init/miscinit.c:377 +#: utils/init/miscinit.c:383 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "Сервер повинен запускати користувач, який володіє каталогом даних." -#: utils/init/miscinit.c:395 +#: utils/init/miscinit.c:401 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "каталог даних \"%s\" має неприпустимі дозволи" -#: utils/init/miscinit.c:397 +#: utils/init/miscinit.c:403 #, 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:455 +#: utils/init/miscinit.c:461 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не вдалося змінити каталог на \"%s\": %m" -#: utils/init/miscinit.c:692 utils/misc/guc.c:3557 +#: utils/init/miscinit.c:697 utils/misc/guc.c:3650 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "встановити параметр \"%s\" в межах операції з обмеженнями по безпеці, не можна" -#: utils/init/miscinit.c:764 +#: utils/init/miscinit.c:770 #, c-format msgid "role with OID %u does not exist" msgstr "роль з OID %u не існує" -#: utils/init/miscinit.c:794 +#: utils/init/miscinit.c:800 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "для ролі \"%s\" вхід не дозволений" -#: utils/init/miscinit.c:812 +#: utils/init/miscinit.c:818 #, c-format msgid "too many connections for role \"%s\"" msgstr "занадто багато підключень для ролі \"%s\"" -#: utils/init/miscinit.c:919 -#, c-format -msgid "permission denied to set session authorization" -msgstr "немає прав для встановлення авторизації в сеансі" - -#: utils/init/miscinit.c:1002 +#: utils/init/miscinit.c:991 #, c-format msgid "invalid role OID: %u" msgstr "неприпустимий OID ролі: %u" -#: utils/init/miscinit.c:1149 +#: utils/init/miscinit.c:1138 #, c-format msgid "database system is shut down" msgstr "система бази даних вимкнена" -#: utils/init/miscinit.c:1236 +#: utils/init/miscinit.c:1225 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "не вдалося створити файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1250 +#: utils/init/miscinit.c:1239 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "не вдалося відкрити файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1257 +#: utils/init/miscinit.c:1246 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "не вдалося прочитати файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1266 +#: utils/init/miscinit.c:1255 #, c-format msgid "lock file \"%s\" is empty" msgstr "файл блокування \"%s\" пустий" -#: utils/init/miscinit.c:1267 +#: utils/init/miscinit.c:1256 #, 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:1311 +#: utils/init/miscinit.c:1300 #, c-format msgid "lock file \"%s\" already exists" msgstr "файл блокування \"%s\" вже існує" -#: utils/init/miscinit.c:1315 +#: utils/init/miscinit.c:1304 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Інший postgres (PID %d) працює з каталогом даних \"%s\"?" -#: utils/init/miscinit.c:1317 +#: utils/init/miscinit.c:1306 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "Інший postmaster (PID %d) працює з каталогом даних \"%s\"?" -#: utils/init/miscinit.c:1320 +#: utils/init/miscinit.c:1309 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Інший postgres (PID %d) використовує файл сокету \"%s\"?" -#: utils/init/miscinit.c:1322 +#: utils/init/miscinit.c:1311 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Інший postmaster (PID %d) використовує файл сокету \"%s\"?" -#: utils/init/miscinit.c:1373 +#: utils/init/miscinit.c:1362 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "не вдалося видалити старий файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1375 +#: utils/init/miscinit.c:1364 #, 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:1412 utils/init/miscinit.c:1426 -#: utils/init/miscinit.c:1437 +#: utils/init/miscinit.c:1401 utils/init/miscinit.c:1415 +#: utils/init/miscinit.c:1426 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "не вдалося записати файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1548 utils/init/miscinit.c:1690 utils/misc/guc.c:5597 +#: utils/init/miscinit.c:1537 utils/init/miscinit.c:1679 utils/misc/guc.c:5724 #, c-format msgid "could not read from file \"%s\": %m" msgstr "не вдалося прочитати з файлу \"%s\": %m" -#: utils/init/miscinit.c:1678 +#: utils/init/miscinit.c:1667 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "не вдалося відкрити файл \"%s\": %m; все одно продовжується" -#: utils/init/miscinit.c:1703 +#: utils/init/miscinit.c:1692 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "файл блокування \"%s\" містить неправильний PID: %ld замість %ld" -#: utils/init/miscinit.c:1742 utils/init/miscinit.c:1758 +#: utils/init/miscinit.c:1731 utils/init/miscinit.c:1747 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" не є припустимим каталогом даних" -#: utils/init/miscinit.c:1744 +#: utils/init/miscinit.c:1733 #, c-format msgid "File \"%s\" is missing." msgstr "Файл \"%s\" пропущено." -#: utils/init/miscinit.c:1760 +#: utils/init/miscinit.c:1749 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Файл \"%s\" не містить припустимих даних." -#: utils/init/miscinit.c:1762 +#: utils/init/miscinit.c:1751 #, c-format msgid "You might need to initdb." msgstr "Можливо, вам слід виконати initdb." -#: utils/init/miscinit.c:1770 +#: utils/init/miscinit.c:1759 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "Каталог даних ініціалізований сервером PostgreSQL версії %s, не сумісною з цією версією %s." @@ -26685,72 +27744,72 @@ msgstr "Повторно створіть базу даних з іншою ло msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "База даних була ініціалізована з параметром LC_CTYPE \"%s\", але зараз setlocale() не розпізнає його." -#: utils/init/postinit.c:475 +#: utils/init/postinit.c:491 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "база даних \"%s\" має невідповідність версії параметрів сортування" -#: utils/init/postinit.c:477 +#: utils/init/postinit.c:493 #, c-format msgid "The database was created using collation version %s, but the operating system provides version %s." msgstr "Базу даних було створено за допомогою параметрів сортування версії %s, але операційна система надає версію %s." -#: utils/init/postinit.c:480 +#: utils/init/postinit.c:496 #, 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 "Перебудуйте всі об'єкти бази даних, які використовують стандартний параметр сортування або виконайте ALTER DATABASE %s REFRESH COLLATION VERSION, або побудуйте PostgreSQL з правильною версією бібліотеки." -#: utils/init/postinit.c:891 +#: utils/init/postinit.c:902 #, c-format msgid "no roles are defined in this database system" msgstr "в цій системі баз даних не визначено жодної ролі" -#: utils/init/postinit.c:892 +#: utils/init/postinit.c:903 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Ви повинні негайно виконати CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:928 +#: utils/init/postinit.c:940 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "потрібно бути суперкористувачем, щоб підключитись в режимі двійкового оновлення" -#: utils/init/postinit.c:949 +#: utils/init/postinit.c:961 #, c-format msgid "remaining connection slots are reserved for roles with the %s attribute" msgstr "слоти підключення, що залишилися, зарезервовані для ролей з атрибутом %s" -#: utils/init/postinit.c:955 +#: utils/init/postinit.c:967 #, c-format msgid "remaining connection slots are reserved for roles with privileges of the \"%s\" role" msgstr "слоти підключення, що залишилися, зарезервовані для ролей з привілеями ролі \"%s\"" -#: utils/init/postinit.c:967 +#: utils/init/postinit.c:979 #, c-format msgid "permission denied to start WAL sender" msgstr "немає дозволу для запуску відправника WAL" -#: utils/init/postinit.c:968 +#: utils/init/postinit.c:980 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." msgstr "Тільки ролі з атрибутом %s можуть почати процес відправки WAL." -#: utils/init/postinit.c:1086 +#: utils/init/postinit.c:1098 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Схоже, вона щойно була видалена або перейменована." -#: utils/init/postinit.c:1090 +#: utils/init/postinit.c:1102 #, c-format msgid "database %u does not exist" msgstr "база даних %u не існує" -#: utils/init/postinit.c:1099 +#: utils/init/postinit.c:1111 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "неможливо під'єднатися до невірної бази даних \"%s\"" -#: utils/init/postinit.c:1159 +#: utils/init/postinit.c:1172 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Підкаталог бази даних \"%s\" пропущений." @@ -26777,48 +27836,48 @@ msgstr "неочікуваний ідентифікатор кодування % msgid "unexpected encoding ID %d for WIN character sets" msgstr "неочікуваний ідентифікатор кодування %d для наборів символів WIN" -#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "перетворення між %s і %s не підтримується" -#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 -#: utils/mb/mbutils.c:843 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Рядок з %d байт занадто довгий для перетворення кодування." -#: utils/mb/mbutils.c:569 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "неприпустиме ім’я вихідного кодування \"%s\"" -#: utils/mb/mbutils.c:574 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "неприпустиме ім’я кодування результату \"%s\"" -#: utils/mb/mbutils.c:714 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "неприпустиме значення байту для кодування \"%s\": 0x%02x" -#: utils/mb/mbutils.c:878 +#: utils/mb/mbutils.c:877 #, c-format msgid "invalid Unicode code point" msgstr "неприпустима кодова точка Unicode" -#: utils/mb/mbutils.c:1204 +#: utils/mb/mbutils.c:1201 #, c-format msgid "bind_textdomain_codeset failed" msgstr "помилка в bind_textdomain_codeset" -#: utils/mb/mbutils.c:1725 +#: utils/mb/mbutils.c:1718 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "неприпустима послідовність байтів для кодування \"%s\": %s" -#: utils/mb/mbutils.c:1758 +#: utils/mb/mbutils.c:1751 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "символ з послідовністю байтів %s в кодуванні \"%s\" не має еквіваленту в кодуванні \"%s\"" @@ -26833,237 +27892,239 @@ msgstr "пуста назва каталогу конфігурації: \"%s\"" msgid "could not open configuration directory \"%s\": %m" msgstr "не вдалося відкрити каталог конфігурації \"%s\": %m" -#: utils/misc/guc.c:115 +#: utils/misc/guc.c:122 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Припустимі одиниці для цього параметру: \"B\", \"kB\", \"MB\", \"GB\", і \"TB\"." -#: utils/misc/guc.c:152 +#: utils/misc/guc.c:159 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Припустимі одиниці для цього параметру: \"us\", \"ms\", \"s\", \"min\", \"h\", і \"d\"." -#: utils/misc/guc.c:421 +#: utils/misc/guc.c:430 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "нерозпізнаний параметр конфігурації \"%s\" у файлі \"%s\" рядок %d" -#: utils/misc/guc.c:461 utils/misc/guc.c:3411 utils/misc/guc.c:3655 -#: utils/misc/guc.c:3753 utils/misc/guc.c:3851 utils/misc/guc.c:3975 -#: utils/misc/guc.c:4078 +#: 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:4068 +#: utils/misc/guc.c:4171 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "параметр \"%s\" не може бути змінений, без перезавантаження сервера" -#: utils/misc/guc.c:497 +#: utils/misc/guc.c:506 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "параметр \"%s\" видалений з файла конфігурації, значення скинуто до \"за замовчуванням\"" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:571 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "параметр \"%s\" змінено на \"%s\"" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:613 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "файл конфігурації \"%s\" містить помилки" -#: utils/misc/guc.c:609 +#: utils/misc/guc.c:618 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "файл конфігурації \"%s\" містить помилки; були застосовані не залежні зміни" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:623 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "файл конфігурації \"%s\" містить помилки; зміни не були застосовані" -#: utils/misc/guc.c:1211 utils/misc/guc.c:1227 +#: utils/misc/guc.c:1139 utils/misc/guc.c:1155 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "неприпустима назва параметра конфігурації \"%s\"" -#: utils/misc/guc.c:1213 +#: utils/misc/guc.c:1141 #, c-format msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "Власні назви параметрів повинні містити два або більше простих ідентифікаторів, розділених крапками." -#: utils/misc/guc.c:1229 +#: utils/misc/guc.c:1157 #, c-format msgid "\"%s\" is a reserved prefix." msgstr "\"%s\" є зарезервованим префіксом." -#: utils/misc/guc.c:1243 +#: utils/misc/guc.c:1170 utils/misc/guc.c:1280 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "нерозпізнаний параметр конфігурації \"%s\"" -#: utils/misc/guc.c:1767 +#: utils/misc/guc.c:1802 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: немає доступу до каталогу \"%s\": %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: не вдалося отримати доступ до каталогу \"%s\": %m\n" -#: utils/misc/guc.c:1772 +#: utils/misc/guc.c:1806 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Запустіть initdb або pg_basebackup для ініціалізації каталогу даних PostgreSQL.\n" -#: utils/misc/guc.c:1796 +#: utils/misc/guc.c:1830 #, c-format -msgid "" -"%s does not know where to find the server configuration file.\n" +msgid "%s does not know where to find the server configuration file.\n" "You must specify the --config-file or -D invocation option or set the PGDATA environment variable.\n" -msgstr "" -"%s не знає де знайти файл конфігурації сервера.\n" +msgstr "%s не знає де знайти файл конфігурації сервера.\n" "Ви повинні вказати його розташування в параметрі --config-file або -D, або встановити змінну середовища PGDATA.\n" -#: utils/misc/guc.c:1819 +#: utils/misc/guc.c:1853 #, c-format -msgid "%s: could not access the server configuration file \"%s\": %s\n" -msgstr "%s: не вдалося отримати доступ до файлу конфігурації сервера \"%s\": %s\n" +msgid "%s: could not access the server configuration file \"%s\": %m\n" +msgstr "%s: не вдалося отримати доступ до файлу конфігурації сервера \"%s\": %m\n" -#: utils/misc/guc.c:1847 +#: utils/misc/guc.c:1881 #, c-format -msgid "" -"%s does not know where to find the database system data.\n" +msgid "%s does not know where to find the database system data.\n" "This can be specified as \"data_directory\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" -msgstr "" -"%s не знає де знайти дані системи бази даних.\n" +msgstr "%s не знає де знайти дані системи бази даних.\n" "Їх розташування може бути вказано як \"data_directory\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" -#: utils/misc/guc.c:1899 +#: utils/misc/guc.c:1933 #, c-format -msgid "" -"%s does not know where to find the \"hba\" configuration file.\n" +msgid "%s does not know where to find the \"hba\" configuration file.\n" "This can be specified as \"hba_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" -msgstr "" -"%s не знає де знайти файл конфігурації \"hba\".\n" +msgstr "%s не знає де знайти файл конфігурації \"hba\".\n" "Його розташування може бути вказано як \"hba_file\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" -#: utils/misc/guc.c:1930 +#: utils/misc/guc.c:1964 #, c-format -msgid "" -"%s does not know where to find the \"ident\" configuration file.\n" +msgid "%s does not know where to find the \"ident\" configuration file.\n" "This can be specified as \"ident_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" -msgstr "" -"%s не знає де знайти файл конфігурації \"ident\".\n" +msgstr "%s не знає де знайти файл конфігурації \"ident\".\n" "Його розташування може бути вказано як \"ident_file\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" -#: utils/misc/guc.c:2896 +#: utils/misc/guc.c:2943 msgid "Value exceeds integer range." msgstr "Значення перевищує діапазон цілих чисел." -#: utils/misc/guc.c:3132 +#: utils/misc/guc.c:3185 #, c-format -msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" -msgstr "%d%s%s поза припустимим діапазоном для параметру \"%s\" (%d .. %d)" +msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)" +msgstr "%d%s%s поза припустимим діапазоном для параметру \"%s\" (%d%s%s .. %d%s%s)" -#: utils/misc/guc.c:3168 +#: utils/misc/guc.c:3226 #, c-format -msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" -msgstr "%g%s%s поза припустимим діапазоном для параметру \"%s\" (%g .. %g)" +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:3369 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:3388 utils/misc/guc.c:4539 +#: utils/misc/guc.c:3481 utils/misc/guc.c:4655 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "параметр \"%s\" не може бути змінений" -#: utils/misc/guc.c:3421 +#: utils/misc/guc.c:3514 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "параметр \"%s\" не може бути змінений зараз" -#: utils/misc/guc.c:3448 utils/misc/guc.c:3510 utils/misc/guc.c:4515 -#: utils/misc/guc.c:6563 +#: utils/misc/guc.c:3541 utils/misc/guc.c:3603 utils/misc/guc.c:4630 +#: utils/misc/guc.c:6721 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "немає прав для встановлення параметру \"%s\"" -#: utils/misc/guc.c:3490 +#: utils/misc/guc.c:3583 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "параметр \"%s\" не можна встановити після встановлення підключення" -#: utils/misc/guc.c:3549 +#: utils/misc/guc.c:3642 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "параметр \"%s\" не можна встановити в межах функції безпеки" -#: utils/misc/guc.c:3570 +#: utils/misc/guc.c:3663 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "параметр \"%s\" не можна скинути" -#: utils/misc/guc.c:3577 +#: utils/misc/guc.c:3670 #, c-format msgid "parameter \"%s\" cannot be set locally in functions" msgstr "параметр \"%s\" не може бути встановлений локально в функціях" -#: utils/misc/guc.c:4221 utils/misc/guc.c:4268 utils/misc/guc.c:5282 +#: utils/misc/guc.c:4329 utils/misc/guc.c:4377 utils/misc/guc.c:5409 #, c-format msgid "permission denied to examine \"%s\"" msgstr "немає дозволу для вивчення \"%s\"" -#: utils/misc/guc.c:4222 utils/misc/guc.c:4269 utils/misc/guc.c:5283 +#: utils/misc/guc.c:4330 utils/misc/guc.c:4378 utils/misc/guc.c:5410 #, c-format msgid "Only roles with privileges of the \"%s\" role may examine this parameter." msgstr "Тільки ролі з привілеями ролі \"%s\" можуть перевіряти цей параметр." -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4588 +#, c-format +msgid "ALTER SYSTEM is not allowed in this environment" +msgstr "ALTER SYSTEM не допускається в цьому середовищі" + +#: utils/misc/guc.c:4620 #, c-format msgid "permission denied to perform ALTER SYSTEM RESET ALL" msgstr "немає дозволу для виконання ALTER SYSTEM RESET ALL" -#: utils/misc/guc.c:4571 +#: utils/misc/guc.c:4699 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "значення параметру для ALTER SYSTEM не повинне містити нового рядка" -#: utils/misc/guc.c:4617 +#: utils/misc/guc.c:4744 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "не вдалося аналізувати зміст файла \"%s\"" -#: utils/misc/guc.c:4799 +#: utils/misc/guc.c:4926 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "спроба перевизначити параметр \"%s\"" -#: utils/misc/guc.c:5138 +#: utils/misc/guc.c:5265 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "неприпустима назва параметра конфігурації \"%s\", видаляємо" -#: utils/misc/guc.c:5140 +#: utils/misc/guc.c:5267 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "\"%s\" тепер є зарезервованим префіксом." -#: utils/misc/guc.c:6017 +#: utils/misc/guc.c:6144 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "під час налаштування параметру \"%s\" на \"%s\"" -#: utils/misc/guc.c:6186 +#: utils/misc/guc.c:6313 #, c-format msgid "parameter \"%s\" could not be set" msgstr "параметр \"%s\" не вдалося встановити" -#: utils/misc/guc.c:6276 +#: utils/misc/guc.c:6403 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "не вдалося аналізувати налаштування параметру \"%s\"" -#: utils/misc/guc.c:6695 +#: utils/misc/guc.c:6853 #, 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" @@ -27079,59 +28140,59 @@ msgstr "SET %s приймає лише один аргумент" msgid "SET requires parameter name" msgstr "SET потребує ім'я параметра" -#: utils/misc/guc_tables.c:662 +#: utils/misc/guc_tables.c:676 msgid "Ungrouped" msgstr "Розгруповано" -#: utils/misc/guc_tables.c:664 +#: utils/misc/guc_tables.c:677 msgid "File Locations" msgstr "Розташування файлів" -#: utils/misc/guc_tables.c:666 +#: utils/misc/guc_tables.c:678 msgid "Connections and Authentication / Connection Settings" msgstr "Підключення і автентифікація / Параметри підключень" -#: utils/misc/guc_tables.c:668 +#: utils/misc/guc_tables.c:679 msgid "Connections and Authentication / TCP Settings" msgstr "Підключення і автентифікація / Налаштування TCP" -#: utils/misc/guc_tables.c:670 +#: utils/misc/guc_tables.c:680 msgid "Connections and Authentication / Authentication" msgstr "Підключення і автентифікація / Автентифікація" -#: utils/misc/guc_tables.c:672 +#: utils/misc/guc_tables.c:681 msgid "Connections and Authentication / SSL" msgstr "Підключення і автентифікація / SSL" -#: utils/misc/guc_tables.c:674 +#: utils/misc/guc_tables.c:682 msgid "Resource Usage / Memory" msgstr "Використання ресурсу / Пам'ять" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:683 msgid "Resource Usage / Disk" msgstr "Використання ресурсу / Диск" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:684 msgid "Resource Usage / Kernel Resources" msgstr "Використання ресурсу / Ресурси ядра" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:685 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Використання ресурсу / Затримка очистки по вартості" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:686 msgid "Resource Usage / Background Writer" msgstr "Використання ресурсу / Фоновий запис" -#: utils/misc/guc_tables.c:684 +#: utils/misc/guc_tables.c:687 msgid "Resource Usage / Asynchronous Behavior" msgstr "Використання ресурсу / Асинхронна поведінка" -#: utils/misc/guc_tables.c:686 +#: utils/misc/guc_tables.c:688 msgid "Write-Ahead Log / Settings" msgstr "Журнал WAL / Параметри" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:689 msgid "Write-Ahead Log / Checkpoints" msgstr "Журнал WAL / Контрольні точки" @@ -27139,458 +28200,474 @@ msgstr "Журнал WAL / Контрольні точки" msgid "Write-Ahead Log / Archiving" msgstr "Журнал WAL / Архівація" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:691 msgid "Write-Ahead Log / Recovery" msgstr "Журнал WAL / Відновлення" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:692 msgid "Write-Ahead Log / Archive Recovery" msgstr "Журнал WAL / Відновлення архіву" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:693 msgid "Write-Ahead Log / Recovery Target" msgstr "Журнал WAL / Мета відновлення" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:694 +msgid "Write-Ahead Log / Summarization" +msgstr "Журнал попереднього запису / Підсумки" + +#: utils/misc/guc_tables.c:695 msgid "Replication / Sending Servers" msgstr "Реплікація / Надсилання серверів" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:696 msgid "Replication / Primary Server" msgstr "Реплікація / Основний сервер" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:697 msgid "Replication / Standby Servers" msgstr "Реплікація / Резервні сервера" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:698 msgid "Replication / Subscribers" msgstr "Реплікація / Підписники" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:699 msgid "Query Tuning / Planner Method Configuration" msgstr "Налаштування запитів / Конфігурація методів планувальника" -#: utils/misc/guc_tables.c:708 +#: utils/misc/guc_tables.c:700 msgid "Query Tuning / Planner Cost Constants" msgstr "Налаштування запитів / Константи вартості для планувальника" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:701 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Налаштування запитів / Генетичний оптимізатор запитів" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:702 msgid "Query Tuning / Other Planner Options" msgstr "Налаштування запитів / Інші параметри планувальника" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:703 msgid "Reporting and Logging / Where to Log" msgstr "Звіти і журналювання / Куди записувати" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:704 msgid "Reporting and Logging / When to Log" msgstr "Звіти і журналювання / Коли записувати" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:705 msgid "Reporting and Logging / What to Log" msgstr "Звіти і журналювання / Що записувати" -#: utils/misc/guc_tables.c:720 +#: utils/misc/guc_tables.c:706 msgid "Reporting and Logging / Process Title" msgstr "Звітування і журналювання / Назва процесу" -#: utils/misc/guc_tables.c:722 +#: utils/misc/guc_tables.c:707 msgid "Statistics / Monitoring" msgstr "Статистика / Моніторинг" -#: utils/misc/guc_tables.c:724 +#: utils/misc/guc_tables.c:708 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "Статистика / Кумулятивна статистика запитів та індексів" -#: utils/misc/guc_tables.c:726 +#: utils/misc/guc_tables.c:709 msgid "Autovacuum" msgstr "Автоочистка" -#: utils/misc/guc_tables.c:728 +#: utils/misc/guc_tables.c:710 msgid "Client Connection Defaults / Statement Behavior" msgstr "Параметри клієнтських сеансів за замовчуванням / Поведінка декларацій" -#: utils/misc/guc_tables.c:730 +#: utils/misc/guc_tables.c:711 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Параметри клієнтських сеансів за замовчуванням / Локалізація і форматування" -#: utils/misc/guc_tables.c:732 +#: utils/misc/guc_tables.c:712 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Параметри клієнтських сеансів за замовчуванням / Попереднє завантаження спільних бібліотек" -#: utils/misc/guc_tables.c:734 +#: utils/misc/guc_tables.c:713 msgid "Client Connection Defaults / Other Defaults" msgstr "Параметри клієнтських сеансів за замовчуванням / Інші параметри за замовчуванням" -#: utils/misc/guc_tables.c:736 +#: utils/misc/guc_tables.c:714 msgid "Lock Management" msgstr "Керування блокуванням" -#: utils/misc/guc_tables.c:738 +#: utils/misc/guc_tables.c:715 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Сумісність версій і платформ / Попередні версії PostgreSQL" -#: utils/misc/guc_tables.c:740 +#: utils/misc/guc_tables.c:716 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Сумісність версій і платформ / Інші платформи і клієнти" -#: utils/misc/guc_tables.c:742 +#: utils/misc/guc_tables.c:717 msgid "Error Handling" msgstr "Обробка помилок" -#: utils/misc/guc_tables.c:744 +#: utils/misc/guc_tables.c:718 msgid "Preset Options" msgstr "Визначені параметри" -#: utils/misc/guc_tables.c:746 +#: utils/misc/guc_tables.c:719 msgid "Customized Options" msgstr "Настроєні параметри" -#: utils/misc/guc_tables.c:748 +#: utils/misc/guc_tables.c:720 msgid "Developer Options" msgstr "Параметри для розробників" -#: utils/misc/guc_tables.c:805 +#: utils/misc/guc_tables.c:775 msgid "Enables the planner's use of sequential-scan plans." msgstr "Дає змогу планувальнику використати плани послідовного сканування." -#: utils/misc/guc_tables.c:815 +#: utils/misc/guc_tables.c:785 msgid "Enables the planner's use of index-scan plans." msgstr "Дає змогу планувальнику використати плани сканування по індексу." -#: utils/misc/guc_tables.c:825 +#: utils/misc/guc_tables.c:795 msgid "Enables the planner's use of index-only-scan plans." msgstr "Дає змогу планувальнику використати плани сканування лише індекса." -#: utils/misc/guc_tables.c:835 +#: utils/misc/guc_tables.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Дає змогу планувальнику використати плани сканування по точковому рисунку." -#: utils/misc/guc_tables.c:845 +#: utils/misc/guc_tables.c:815 msgid "Enables the planner's use of TID scan plans." msgstr "Дає змогу планувальнику використати плани сканування TID." -#: utils/misc/guc_tables.c:855 +#: utils/misc/guc_tables.c:825 msgid "Enables the planner's use of explicit sort steps." msgstr "Дає змогу планувальнику використати кроки з явним сортуванням." -#: utils/misc/guc_tables.c:865 +#: utils/misc/guc_tables.c:835 msgid "Enables the planner's use of incremental sort steps." msgstr "Дає змогу планувальнику використати кроки інкрементного сортування." -#: utils/misc/guc_tables.c:875 +#: utils/misc/guc_tables.c:845 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Дає змогу планувальнику використовувати плани агрегації по гешу." -#: utils/misc/guc_tables.c:885 +#: utils/misc/guc_tables.c:855 msgid "Enables the planner's use of materialization." msgstr "Дає змогу планувальнику використовувати матеріалізацію." -#: utils/misc/guc_tables.c:895 +#: utils/misc/guc_tables.c:865 msgid "Enables the planner's use of memoization." msgstr "Дає змогу планувальнику використовувати мемоїзацію." -#: utils/misc/guc_tables.c:905 +#: utils/misc/guc_tables.c:875 msgid "Enables the planner's use of nested-loop join plans." msgstr "Дає змогу планувальнику використовувати плани з'єднання з вкладеними циклами." -#: utils/misc/guc_tables.c:915 +#: utils/misc/guc_tables.c:885 msgid "Enables the planner's use of merge join plans." msgstr "Дає змогу планувальнику використовувати плани з'єднання об'єднанням." -#: utils/misc/guc_tables.c:925 +#: utils/misc/guc_tables.c:895 msgid "Enables the planner's use of hash join plans." msgstr "Дає змогу планувальнику використовувати плани з'єднання по гешу." -#: utils/misc/guc_tables.c:935 +#: utils/misc/guc_tables.c:905 msgid "Enables the planner's use of gather merge plans." msgstr "Дає змогу планувальнику використовувати плани збору об'єднанням." -#: utils/misc/guc_tables.c:945 +#: utils/misc/guc_tables.c:915 msgid "Enables partitionwise join." msgstr "Вмикає з'єднання з урахуванням секціонування." -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:925 msgid "Enables partitionwise aggregation and grouping." msgstr "Вмикає агрегацію і групування з урахуванням секціонування." -#: utils/misc/guc_tables.c:965 +#: utils/misc/guc_tables.c:935 msgid "Enables the planner's use of parallel append plans." msgstr "Дає змогу планувальнику використовувати плани паралельного додавання." -#: utils/misc/guc_tables.c:975 +#: utils/misc/guc_tables.c:945 msgid "Enables the planner's use of parallel hash plans." msgstr "Дає змогу планувальнику використовувати плани паралельного з'єднання по гешу." -#: utils/misc/guc_tables.c:985 +#: utils/misc/guc_tables.c:955 msgid "Enables plan-time and execution-time partition pruning." msgstr "Активує видалення розділу під час планування і виконання." -#: utils/misc/guc_tables.c:986 +#: 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:997 +#: 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 "Дозволяє планувальнику створювати плани з попередньо відсортованими даними для агрегованих функцій ORDER BY / DISTINCT." -#: utils/misc/guc_tables.c:1000 +#: 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 "Дозволяє планувальнику запитів створювати плани, які надають попередньо відсортовані дані для агрегованих функцій з реченням ORDER BY / DISTINCT. Якщо цей параметр вимкнено, під час виконання запиту завжди виконується неявне сортування." -#: utils/misc/guc_tables.c:1012 +#: utils/misc/guc_tables.c:982 msgid "Enables the planner's use of async append plans." msgstr "Дає змогу планувальнику використовувати асинхронні плани додавання." -#: utils/misc/guc_tables.c:1022 +#: utils/misc/guc_tables.c:992 +msgid "Enables reordering of GROUP BY keys." +msgstr "Дозволяє перевпорядкувати ключі GROUP BY." + +#: utils/misc/guc_tables.c:1002 msgid "Enables genetic query optimization." msgstr "Вмикає генетичну оптимізацію запитів." -#: utils/misc/guc_tables.c:1023 +#: utils/misc/guc_tables.c:1003 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Цей алгоритм намагається побудувати план без повного перебору." -#: utils/misc/guc_tables.c:1034 +#: utils/misc/guc_tables.c:1017 msgid "Shows whether the current user is a superuser." msgstr "Показує, чи є поточний користувач суперкористувачем." -#: utils/misc/guc_tables.c:1044 +#: utils/misc/guc_tables.c:1032 +msgid "Allows running the ALTER SYSTEM command." +msgstr "Дозволяє запускати команду ALTER SYSTEM." + +#: 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:1043 msgid "Enables advertising the server via Bonjour." msgstr "Вмикає оголошення серверу через Bonjour." -#: utils/misc/guc_tables.c:1053 +#: utils/misc/guc_tables.c:1052 msgid "Collects transaction commit time." msgstr "Збирає час затвердження транзакцій." -#: utils/misc/guc_tables.c:1062 +#: utils/misc/guc_tables.c:1061 msgid "Enables SSL connections." msgstr "Вмикає SSL-підключення." -#: utils/misc/guc_tables.c:1071 -msgid "Controls whether ssl_passphrase_command is called during server reload." -msgstr "Визначає, чи викликається ssl_passphrase_command під час перезавантаження сервера." +#: utils/misc/guc_tables.c:1070 +msgid "Controls whether \"ssl_passphrase_command\" is called during server reload." +msgstr "" -#: utils/misc/guc_tables.c:1080 +#: utils/misc/guc_tables.c:1079 msgid "Give priority to server ciphersuite order." msgstr "Віддавати перевагу замовленню набору шрифтів сервера." -#: utils/misc/guc_tables.c:1089 +#: utils/misc/guc_tables.c:1088 msgid "Forces synchronization of updates to disk." msgstr "Примусова синхронізація оновлень на диск." -#: utils/misc/guc_tables.c:1090 +#: 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 "Сервер буде використовувати системний виклик fsync() в декількох місцях, щоб переконатися, що оновлення фізично записані на диск. Це гарантує, що кластер баз даних відновиться до узгодженого стану після аварійного завершення роботи операційної системи чи апаратного збою." -#: utils/misc/guc_tables.c:1101 +#: utils/misc/guc_tables.c:1100 msgid "Continues processing after a checksum failure." msgstr "Продовжує обробку після помилки контрольної суми." -#: utils/misc/guc_tables.c:1102 +#: 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 "Виявляючи помилку контрольної суми, PostgreSQL звичайно повідомляє про помилку і перериває поточну транзакцію. Але якщо ignore_checksum_failure дорівнює true, система пропустить помилку (але видасть попередження) і продовжить обробку. Ця поведінка може бути причиною аварійних завершень роботи або інших серйозних проблем. Це має місце, лише якщо ввімкнен контроль цілосності сторінок." -#: utils/misc/guc_tables.c:1116 +#: utils/misc/guc_tables.c:1115 msgid "Continues processing past damaged page headers." msgstr "Продовжує обробку при пошкоджені заголовків сторінок." -#: utils/misc/guc_tables.c:1117 -msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." -msgstr "Виявляючи пошкоджений заголовок сторінки, PostgreSQL звичайно повідомляє про помилку, перериваючи поточну транзакцію. Але якщо zero_damaged_pages дорівнює true система видасть попередження, обнулить пошкоджену сторінку, і продовжить обробку. Ця поведінка знищить дані, а саме рядків в пошкодженій сторінці." +#: utils/misc/guc_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:1130 +#: utils/misc/guc_tables.c:1129 msgid "Continues recovery after an invalid pages failure." msgstr "Продовжує відновлення після помилки неприпустимих сторінок." -#: utils/misc/guc_tables.c:1131 -msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." -msgstr "Виявлення WAL записів, які мають посилання на неприпустимі сторінки під час відновлення, змушує PostgreSQL підняти помилку на рівень PANIC, перериваючи відновлення. Встановлення параметру ignore_invalid_pages на true змусить систему ігнорувати неприпустимі посилання на сторінки в WAL записах (але все ще буде повідомляти про попередження), і продовжити відновлення. Ця поведінка може викликати збої, втрату даних, розповсюдження або приховання пошкоджень, або інші серйозні проблеми. Діє лише під час відновлення або в режимі очікування." +#: utils/misc/guc_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:1149 +#: utils/misc/guc_tables.c:1148 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Запис повних сторінок до WAL при першій зміні після контрольної точки." -#: utils/misc/guc_tables.c:1150 +#: 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 "Сторінка, записувана під час аварійного завершення роботи операційної системи може бути записаною на диск частково. Під час відновлення, журналу змін рядків в WAL буде недостатньо для відновлення. Цей параметр записує повні сторінки після першої зміни після контрольної точки, тож відновлення можливе." -#: utils/misc/guc_tables.c:1163 +#: 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 "Записує повні сторінки до WAL при першій зміні після контрольної точки, навіть при некритичних змінах." -#: utils/misc/guc_tables.c:1173 +#: utils/misc/guc_tables.c:1172 msgid "Writes zeroes to new WAL files before first use." msgstr "Перед першим використанням записує нулі до нових файлів WAL." -#: utils/misc/guc_tables.c:1183 +#: utils/misc/guc_tables.c:1182 msgid "Recycles WAL files by renaming them." msgstr "Перезаписує файли WAL, перейменувавши їх." -#: utils/misc/guc_tables.c:1193 +#: utils/misc/guc_tables.c:1192 msgid "Logs each checkpoint." msgstr "Журналювати кожну контрольну точку." -#: utils/misc/guc_tables.c:1202 +#: utils/misc/guc_tables.c:1201 msgid "Logs each successful connection." msgstr "Журналювати кожне успішне підключення." -#: utils/misc/guc_tables.c:1211 +#: utils/misc/guc_tables.c:1210 +msgid "Logs details of pre-authentication connection handshake." +msgstr "" + +#: utils/misc/guc_tables.c:1220 msgid "Logs end of a session, including duration." msgstr "Журналювати кінець сеансу, зокрема тривалість." -#: utils/misc/guc_tables.c:1220 +#: utils/misc/guc_tables.c:1229 msgid "Logs each replication command." msgstr "Журналювати кожну команду реплікації." -#: utils/misc/guc_tables.c:1229 +#: utils/misc/guc_tables.c:1238 msgid "Shows whether the running server has assertion checks enabled." msgstr "Показує, чи активовані перевірки твердження на працюючому сервері." -#: utils/misc/guc_tables.c:1240 +#: utils/misc/guc_tables.c:1249 msgid "Terminate session on any error." msgstr "Припиняти сеанси при будь-якій помилці." -#: utils/misc/guc_tables.c:1249 +#: utils/misc/guc_tables.c:1258 msgid "Reinitialize server after backend crash." msgstr "Повторити ініціалізацію сервера, після внутрішнього аварійного завершення роботи." -#: utils/misc/guc_tables.c:1258 +#: utils/misc/guc_tables.c:1267 msgid "Remove temporary files after backend crash." msgstr "Видалити тимчасові файли після аварійного завершення роботи внутрішнього сервера." -#: utils/misc/guc_tables.c:1268 +#: utils/misc/guc_tables.c:1277 msgid "Send SIGABRT not SIGQUIT to child processes after backend crash." msgstr "Надсилати SIGABRT, а не SIGQUIT дочірнім процесам після аварійного завершення роботи бекенда." -#: utils/misc/guc_tables.c:1278 +#: utils/misc/guc_tables.c:1287 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "Надсилати SIGABRT, а не SIGKILL до дочірніх процесів, що застрягли." -#: utils/misc/guc_tables.c:1289 +#: utils/misc/guc_tables.c:1298 msgid "Logs the duration of each completed SQL statement." msgstr "Журналювати тривалість кожного виконаного SQL-оператора." -#: utils/misc/guc_tables.c:1298 +#: utils/misc/guc_tables.c:1307 msgid "Logs each query's parse tree." msgstr "Журналювати дерево аналізу для кожного запиту." -#: utils/misc/guc_tables.c:1307 +#: utils/misc/guc_tables.c:1316 msgid "Logs each query's rewritten parse tree." msgstr "Журналювати переписане дерево аналізу для кожного запиту." -#: utils/misc/guc_tables.c:1316 +#: utils/misc/guc_tables.c:1325 msgid "Logs each query's execution plan." msgstr "Журналювати план виконання кожного запиту." -#: utils/misc/guc_tables.c:1325 +#: utils/misc/guc_tables.c:1334 msgid "Indents parse and plan tree displays." msgstr "Відступи при відображенні дерев аналізу і плану запитів." -#: utils/misc/guc_tables.c:1334 +#: utils/misc/guc_tables.c:1343 msgid "Writes parser performance statistics to the server log." msgstr "Запис статистики продуктивності аналізу до запису сервера." -#: utils/misc/guc_tables.c:1343 +#: utils/misc/guc_tables.c:1352 msgid "Writes planner performance statistics to the server log." msgstr "Запис статистики продуктивності планувальника до запису сервера." -#: utils/misc/guc_tables.c:1352 +#: utils/misc/guc_tables.c:1361 msgid "Writes executor performance statistics to the server log." msgstr "Запис статистики продуктивності виконувача до запису сервера." -#: utils/misc/guc_tables.c:1361 +#: utils/misc/guc_tables.c:1370 msgid "Writes cumulative performance statistics to the server log." msgstr "Запис сукупної статистики продуктивності до запису сервера." -#: utils/misc/guc_tables.c:1371 +#: utils/misc/guc_tables.c:1380 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Журналювати статистику використання системних ресурсів (пам'яті і ЦП) при різноманітних операціях з B-tree." -#: utils/misc/guc_tables.c:1383 +#: utils/misc/guc_tables.c:1392 msgid "Collects information about executing commands." msgstr "Збирати інформацію про команди які виконуються." -#: utils/misc/guc_tables.c:1384 +#: 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:1394 +#: utils/misc/guc_tables.c:1403 msgid "Collects statistics on database activity." msgstr "Збирати статистику про активність бази даних." -#: utils/misc/guc_tables.c:1403 +#: utils/misc/guc_tables.c:1412 msgid "Collects timing statistics for database I/O activity." msgstr "Збирати статистику за часом активності введення/виведення для бази даних." -#: utils/misc/guc_tables.c:1412 +#: utils/misc/guc_tables.c:1421 msgid "Collects timing statistics for WAL I/O activity." msgstr "Збирає статистику часу для активності вводу/виводу WAL." -#: utils/misc/guc_tables.c:1422 +#: utils/misc/guc_tables.c:1431 msgid "Updates the process title to show the active SQL command." msgstr "Оновлення виводить в заголовок процесу активну SQL-команду." -#: utils/misc/guc_tables.c:1423 +#: 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 "Відображає в заголовку процеса кожну SQL-команду, отриману сервером." -#: utils/misc/guc_tables.c:1432 +#: utils/misc/guc_tables.c:1441 msgid "Starts the autovacuum subprocess." msgstr "Запускає підпроцес автоочистки." -#: utils/misc/guc_tables.c:1442 +#: utils/misc/guc_tables.c:1451 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Генерує налагодженні повідомлення для LISTEN і NOTIFY." -#: utils/misc/guc_tables.c:1454 +#: utils/misc/guc_tables.c:1463 msgid "Emits information about lock usage." msgstr "Видає інформацію про блокування, які використовуються." -#: utils/misc/guc_tables.c:1464 +#: utils/misc/guc_tables.c:1473 msgid "Emits information about user lock usage." msgstr "Видає інформацію про користувацькі блокування, які використовуються." -#: utils/misc/guc_tables.c:1474 +#: utils/misc/guc_tables.c:1483 msgid "Emits information about lightweight lock usage." msgstr "Видає інформацію про спрощені блокування, які використовуються." -#: utils/misc/guc_tables.c:1484 +#: utils/misc/guc_tables.c:1493 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Виводить інформацію про всі поточні блокування, при тайм-ауті взаємного блокування." -#: utils/misc/guc_tables.c:1496 +#: utils/misc/guc_tables.c:1505 msgid "Logs long lock waits." msgstr "Журналювати тривалі очікування в блокуваннях." -#: utils/misc/guc_tables.c:1505 +#: utils/misc/guc_tables.c:1514 msgid "Logs standby recovery conflict waits." msgstr "Журналює очікування конфлікту відновлення." -#: utils/misc/guc_tables.c:1514 +#: utils/misc/guc_tables.c:1523 msgid "Logs the host name in the connection logs." msgstr "Журналювати ім’я хоста до записів підключення." -#: utils/misc/guc_tables.c:1515 +#: 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 "За замовчуванням, записи підключень показують лише IP-адреси хостів, які підключилися. Якщо ви хочете бачити імена хостів ви можете ввімкнути цей параметр, але врахуйте, що це може значно вплинути на продуктивність." -#: utils/misc/guc_tables.c:1526 +#: 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:1527 +#: 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 "Коли цей параметр ввімкнений, вирази форми expr = NULL (або NULL = expr) вважаються як expr IS NULL, тобто, повертають true, якщо expr співпадає зі значенням null, і false в іншому разі. Правильна поведінка expr = NULL - завжди повертати null (невідомо)." -#: utils/misc/guc_tables.c:1539 -msgid "Enables per-database user names." -msgstr "Вмикає зв'язування імен користувачів з базами даних." - #: utils/misc/guc_tables.c:1548 msgid "Sets the default read-only status of new transactions." msgstr "Встановлює статус \"лише читання\" за замовчуванням для нових транзакцій." @@ -27684,1366 +28761,1440 @@ msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Встановлює, включати чи виключати транзакції з метою відновлення." #: utils/misc/guc_tables.c:1778 +msgid "Starts the WAL summarizer process to enable incremental backup." +msgstr "Запускає процес підсумовування WAL, щоб увімкнути інкрементне резервне копіювання." + +#: utils/misc/guc_tables.c:1788 msgid "Allows connections and queries during recovery." msgstr "Дозволяє підключення і запити під час відновлення." -#: utils/misc/guc_tables.c:1788 +#: utils/misc/guc_tables.c:1798 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Дозволяє зворотній зв'язок серверу hot standby з основним для уникнення конфліктів запитів." -#: utils/misc/guc_tables.c:1798 +#: utils/misc/guc_tables.c:1808 msgid "Shows whether hot standby is currently active." msgstr "Показує, чи hot standby наразі активний." -#: utils/misc/guc_tables.c:1809 +#: utils/misc/guc_tables.c:1819 msgid "Allows modifications of the structure of system tables." msgstr "Дозволяє модифікації структури системних таблиць." -#: utils/misc/guc_tables.c:1820 +#: utils/misc/guc_tables.c:1830 msgid "Disables reading from system indexes." msgstr "Вимикає читання з системних індексів." -#: utils/misc/guc_tables.c:1821 +#: 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:1832 +#: utils/misc/guc_tables.c:1842 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "Дозволяє табличні простори безпосередньо всередині pg_tblspc, для тестування." -#: utils/misc/guc_tables.c:1843 +#: utils/misc/guc_tables.c:1853 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Вмикає режим зворотньої сумісності при перевірці прав для великих об'єктів." -#: utils/misc/guc_tables.c:1844 +#: 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:1854 +#: utils/misc/guc_tables.c:1864 msgid "When generating SQL fragments, quote all identifiers." msgstr "Генеруючи SQL-фрагменти, включати всі ідентифікатори в лапки." -#: utils/misc/guc_tables.c:1864 +#: utils/misc/guc_tables.c:1874 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Показує, чи ввімкнена контрольна сума даних для цього кластеру." -#: utils/misc/guc_tables.c:1875 +#: utils/misc/guc_tables.c:1885 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Додає послідовне число до повідомлень syslog, щоб уникнути ігнорування дублікатів." -#: utils/misc/guc_tables.c:1885 +#: 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:1895 +#: utils/misc/guc_tables.c:1905 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Визначає, чи вузли зібрання і зібрання об'єднанням також виконають підплани." -#: utils/misc/guc_tables.c:1896 +#: utils/misc/guc_tables.c:1906 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Чи повинні вузли збірки також виконувати підплани або тільки збирати кортежі?" -#: utils/misc/guc_tables.c:1906 +#: utils/misc/guc_tables.c:1916 msgid "Allow JIT compilation." msgstr "Дозволити JIT-компіляцію." -#: utils/misc/guc_tables.c:1917 +#: utils/misc/guc_tables.c:1927 msgid "Register JIT-compiled functions with debugger." msgstr "Зареєструйте функції JIT-compiled за допомогою налагоджувача." -#: utils/misc/guc_tables.c:1934 +#: utils/misc/guc_tables.c:1944 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Виводити бітовий код LLVM для полегшення налагодження JIT." -#: utils/misc/guc_tables.c:1945 +#: utils/misc/guc_tables.c:1955 msgid "Allow JIT compilation of expressions." msgstr "Дозволити JIT-компіляцію виразів." -#: utils/misc/guc_tables.c:1956 +#: utils/misc/guc_tables.c:1966 msgid "Register JIT-compiled functions with perf profiler." msgstr "Зареєструйте функції JIT-compiled за допомогою профілювальника perf." -#: utils/misc/guc_tables.c:1973 +#: utils/misc/guc_tables.c:1983 msgid "Allow JIT compilation of tuple deforming." msgstr "Дозволити JIT-компіляцію перетворення кортежів." -#: utils/misc/guc_tables.c:1984 +#: utils/misc/guc_tables.c:1994 msgid "Whether to continue running after a failure to sync data files." msgstr "Чи продовжувати виконання після помилки синхронізації файлів даних на диску." -#: utils/misc/guc_tables.c:1993 +#: 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 "Встановлює чи повинен одержувач WAL створити тимчасовий слот реплікації, якщо постійний слот не налаштований." -#: utils/misc/guc_tables.c:2011 +#: utils/misc/guc_tables.c:2012 +msgid "Enables event triggers." +msgstr "Вмикає тригери подій." + +#: utils/misc/guc_tables.c:2013 +msgid "When enabled, event triggers will fire for all applicable statements." +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:2040 msgid "Sets the amount of time to wait before forcing a switch to the next WAL file." msgstr "Встановлює кількість часу очікування перед примусовим переходом на наступний файл WAL." -#: utils/misc/guc_tables.c:2022 +#: 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:2024 utils/misc/guc_tables.c:2658 +#: 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:2033 +#: utils/misc/guc_tables.c:2062 msgid "Sets the default statistics target." msgstr "Встановлює мету статистики за замовчуванням." -#: utils/misc/guc_tables.c:2034 +#: 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 "Це застосовується до стовпців таблиці, для котрих мета статистики не встановлена явно через ALTER TABLE SET STATISTICS." -#: utils/misc/guc_tables.c:2043 +#: utils/misc/guc_tables.c:2072 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Встановлює розмір для списку FROM, при перевищені котрого вкладені запити не згортаються." -#: utils/misc/guc_tables.c:2045 +#: 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 "Планувальник об'єднає вкладені запити з зовнішніми, якщо в отриманому списку FROM буде не більше заданої кількості елементів." -#: utils/misc/guc_tables.c:2056 +#: utils/misc/guc_tables.c:2085 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Встановлює розмір для списку FROM, при перевищенні котрого конструкції JOIN не подаються у вигляді рядка." -#: utils/misc/guc_tables.c:2058 +#: 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 "Планувальник буде подавати у вигляді рядка явні конструкції JOIN в списки FROM, допоки в отриманому списку не більше заданої кількості елементів." -#: utils/misc/guc_tables.c:2069 +#: utils/misc/guc_tables.c:2098 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Встановлює граничне значення для елементів FROM, при перевищенні котрого використовується GEQO." -#: utils/misc/guc_tables.c:2079 +#: utils/misc/guc_tables.c:2108 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: зусилля використовувались щоб встановити значення за замовчуванням для інших параметрів GEQO." -#: utils/misc/guc_tables.c:2089 +#: utils/misc/guc_tables.c:2118 msgid "GEQO: number of individuals in the population." msgstr "GEQO: кількість користувачів у популяції." -#: utils/misc/guc_tables.c:2090 utils/misc/guc_tables.c:2100 +#: 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:2099 +#: utils/misc/guc_tables.c:2128 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: кількість ітерацій в алгоритмі." -#: utils/misc/guc_tables.c:2111 +#: 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:2122 +#: 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 "Встановлює максимальну затримку до скасування запитів, коли hot standby сервер обробляє архівні дані WAL." -#: utils/misc/guc_tables.c:2133 +#: 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 "Встановлює максимальну затримку до скасування запитів, коли hot standby сервер обробляє дані WAL з потоку." -#: utils/misc/guc_tables.c:2144 +#: utils/misc/guc_tables.c:2173 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Встановлює мінімальну затримку для застосування змін під час відновлення." -#: utils/misc/guc_tables.c:2155 +#: utils/misc/guc_tables.c:2184 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Встановлює максимальний інтервал між звітами про стан одержувачів WAL для серверу надсилання." -#: utils/misc/guc_tables.c:2166 +#: 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:2177 +#: utils/misc/guc_tables.c:2206 msgid "Sets the maximum number of concurrent connections." msgstr "Встановлює максимальну кілкість паралельних підключень." -#: utils/misc/guc_tables.c:2188 +#: utils/misc/guc_tables.c:2217 msgid "Sets the number of connection slots reserved for superusers." msgstr "Встановлює кількість зарезервованих слотів підключень для суперкористувачів." -#: utils/misc/guc_tables.c:2198 +#: utils/misc/guc_tables.c:2227 msgid "Sets the number of connection slots reserved for roles with privileges of pg_use_reserved_connections." msgstr "Встановлює кількість слотів підключення, зарезервованих для ролей з правами pg_use_reserved_connections." -#: utils/misc/guc_tables.c:2209 +#: utils/misc/guc_tables.c:2238 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Кількість динамічної спільної пам'яті, зарезервованої під час запуску." -#: utils/misc/guc_tables.c:2224 +#: utils/misc/guc_tables.c:2253 msgid "Sets the number of shared memory buffers used by the server." msgstr "Встановлює кількість буферів спільної пам'яті, використовуваних сервером." -#: utils/misc/guc_tables.c:2235 +#: 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:2246 +#: 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:2257 +#: 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:2258 +#: utils/misc/guc_tables.c:2287 msgid "-1 indicates that the value could not be determined." msgstr "-1 вказує на те, що значення не може бути визначене." -#: utils/misc/guc_tables.c:2268 +#: 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: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:2308 +msgid "Sets the size of the dedicated buffer pool used for the MultiXact member cache." +msgstr "" + +#: 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:2330 +msgid "Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY message cache." +msgstr "" + +#: 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:2352 +msgid "Sets the size of the dedicated buffer pool used for the subtransaction cache." +msgstr "" + +#: 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:2374 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Встановлює максимальну кількість використовуваних тимчасових буферів, для кожного сеансу." -#: utils/misc/guc_tables.c:2279 +#: utils/misc/guc_tables.c:2385 msgid "Sets the TCP port the server listens on." msgstr "Встановлює TCP-порт для роботи серверу." -#: utils/misc/guc_tables.c:2289 +#: utils/misc/guc_tables.c:2395 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Встановлює дозволи на доступ для Unix-сокету." -#: utils/misc/guc_tables.c:2290 +#: 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 "Для Unix-сокетів використовується звичний набір дозволів, як у файлових системах Unix. Очікується, що значення параметра вказується у формі, яка прийнята для системних викликів chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" -#: utils/misc/guc_tables.c:2304 +#: utils/misc/guc_tables.c:2410 msgid "Sets the file permissions for log files." msgstr "Встановлює права дозволу для файлів журналу." -#: utils/misc/guc_tables.c:2305 +#: 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 "Очікується, що значення параметру буде вказано в числовому форматі, який сприймається системними викликами chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" -#: utils/misc/guc_tables.c:2319 +#: utils/misc/guc_tables.c:2425 msgid "Shows the mode of the data directory." msgstr "Показує режим каталогу даних." -#: utils/misc/guc_tables.c:2320 +#: 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 "Значення параметру вказується в числовому форматі, який сприймається системними викликами chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" -#: utils/misc/guc_tables.c:2333 +#: utils/misc/guc_tables.c:2439 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Встановлює максимальний об'єм пам'яті для робочих просторів запитів." -#: utils/misc/guc_tables.c:2334 +#: 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:2346 +#: utils/misc/guc_tables.c:2457 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Встановлює максимальний об'єм пам'яті для операцій по обслуговуванню." -#: utils/misc/guc_tables.c:2347 +#: 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:2357 +#: utils/misc/guc_tables.c:2468 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Встановлює максимальний об'єм пам'яті для логічного декодування." -#: utils/misc/guc_tables.c:2358 +#: 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:2374 +#: utils/misc/guc_tables.c:2485 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Встановлює максимальну глибину стека, в КБ." -#: utils/misc/guc_tables.c:2385 +#: 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:2386 +#: utils/misc/guc_tables.c:2497 msgid "-1 means no limit." msgstr "-1 вимикає обмеження." -#: utils/misc/guc_tables.c:2396 +#: utils/misc/guc_tables.c:2507 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Вартість очистки для сторінки, яка була знайдена в буферному кеші." -#: utils/misc/guc_tables.c:2406 +#: utils/misc/guc_tables.c:2517 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Вартість очистки для сторінки, яка не була знайдена в буферному кеші." -#: utils/misc/guc_tables.c:2416 +#: utils/misc/guc_tables.c:2527 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Вартість очистки для сторінки, яка не була \"брудною\"." -#: utils/misc/guc_tables.c:2426 +#: utils/misc/guc_tables.c:2537 msgid "Vacuum cost amount available before napping." msgstr "Кількість доступних витрат вакууму перед від'єднанням." -#: utils/misc/guc_tables.c:2436 +#: utils/misc/guc_tables.c:2547 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Кількість доступних витрат вакууму перед від'єднанням, для автовакууму." -#: utils/misc/guc_tables.c:2446 +#: 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:2459 +#: utils/misc/guc_tables.c:2570 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Встановлює максимальну кількість одночасно підготовлених транзакцій." -#: utils/misc/guc_tables.c:2470 +#: utils/misc/guc_tables.c:2581 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Встановлює мінімальний OID таблиць, для яких відстежуються блокування." -#: utils/misc/guc_tables.c:2471 +#: utils/misc/guc_tables.c:2582 msgid "Is used to avoid output on system tables." msgstr "Використовується для уникнення системних таблиць." -#: utils/misc/guc_tables.c:2480 +#: utils/misc/guc_tables.c:2591 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Встановлює OID таблиці для безумовного трасування блокувань." -#: utils/misc/guc_tables.c:2492 +#: utils/misc/guc_tables.c:2603 msgid "Sets the maximum allowed duration of any statement." msgstr "Встановлює максимальну тривалість для будь-якого оператору." -#: utils/misc/guc_tables.c:2493 utils/misc/guc_tables.c:2504 -#: utils/misc/guc_tables.c:2515 utils/misc/guc_tables.c:2526 +#: 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:2503 +#: utils/misc/guc_tables.c:2614 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Встановлює максимально дозволену тривалість очікування блокувань." -#: utils/misc/guc_tables.c:2514 +#: 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:2525 +#: 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:2647 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Встановлює максимально дозволений час очікування між запитами поза транзакцією." -#: utils/misc/guc_tables.c:2536 +#: utils/misc/guc_tables.c:2658 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Мінімальний вік рядків таблиці, при котрому VACUUM зможе їх закріпити." -#: utils/misc/guc_tables.c:2546 +#: utils/misc/guc_tables.c:2668 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Вік, при котрому VACUUM повинен сканувати всю таблицю, щоб закріпити кортежі." -#: utils/misc/guc_tables.c:2556 +#: utils/misc/guc_tables.c:2678 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Мінімальний вік, при котрому VACUUM повинен закріпити MultiXactId в рядку таблиці." -#: utils/misc/guc_tables.c:2566 +#: utils/misc/guc_tables.c:2688 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Вік Multixact, при котрому VACUUM повинен сканувати всю таблицю, щоб закріпити кортежі." -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2698 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Вік, у якому VACUUM повинен спрацювати безпечно, щоб уникнути зациклення." -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2707 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Вік Multixact, у якому VACUUM повинен спрацювати безпечно, щоб уникнути зациклення." -#: utils/misc/guc_tables.c:2598 +#: utils/misc/guc_tables.c:2720 msgid "Sets the maximum number of locks per transaction." msgstr "Встановлює максимальну кілкість блокувань на транзакцію." -#: utils/misc/guc_tables.c:2599 -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 "Розмір спільної таблиці блокування визначається з припущення, що в будь-який момент часу потрібно заблокувати не більше max_locks_per_transaction об'єктів на один серверний процес або підготовлену транзакцію." +#: 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:2610 +#: utils/misc/guc_tables.c:2732 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Встановлює максимальну кількість предикатних блокувань на транзакцію." -#: utils/misc/guc_tables.c:2611 -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 "Розмір спільної таблиці блокування предикатів визначається з припущення, що за один раз потрібно заблокувати не більше max_pred_locks_per_transaction об'єктів на один серверний процес або підготовлену транзакцію." +#: 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:2622 +#: 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:2623 +#: 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:2633 +#: utils/misc/guc_tables.c:2755 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Встановлює максимальну кількість кортежів, блокованих предикатними блокуваннями в одній сторінці." -#: utils/misc/guc_tables.c:2634 +#: 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:2644 +#: utils/misc/guc_tables.c:2766 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Встановлює максимально допустимий час, за котрий клієнт повинен завершити автентифікацію." -#: utils/misc/guc_tables.c:2656 +#: 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:2668 +#: 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:2800 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "Розмір буфера для читання в WAL під час відновлення." -#: utils/misc/guc_tables.c:2669 +#: utils/misc/guc_tables.c:2801 msgid "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." msgstr "Максимальна відстань до читання WAL, для попереднього отримання блоків, на які посилаються." -#: utils/misc/guc_tables.c:2679 +#: utils/misc/guc_tables.c:2811 msgid "Sets the size of WAL files held for standby servers." msgstr "Встановлює розмір WAL файлів, які потрібно зберігати для резервних серверів." -#: utils/misc/guc_tables.c:2690 +#: utils/misc/guc_tables.c:2822 msgid "Sets the minimum size to shrink the WAL to." msgstr "Встановлює мінімальний розмір WAL при стисканні." -#: utils/misc/guc_tables.c:2702 +#: utils/misc/guc_tables.c:2834 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Встановлює розмір WAL, при котрому ініціюється контрольна точка." -#: utils/misc/guc_tables.c:2714 +#: utils/misc/guc_tables.c:2846 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Встановлює максимальний час між автоматичними контрольними точками WAL." -#: utils/misc/guc_tables.c:2725 +#: utils/misc/guc_tables.c:2857 msgid "Sets the maximum time before warning if checkpoints triggered by WAL volume happen too frequently." msgstr "Встановлює максимальний час перед попередженням, якщо контрольні точки WAL відбуваються занадто часто." -#: utils/misc/guc_tables.c:2727 +#: 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:2740 utils/misc/guc_tables.c:2958 -#: utils/misc/guc_tables.c:2998 +#: 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:2751 +#: utils/misc/guc_tables.c:2883 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Встановлює кількість буферів дискових сторінок в спільній пам'яті для WAL." -#: utils/misc/guc_tables.c:2762 +#: 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:2894 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Час між скиданням WAL в процесі, записуючого WAL." -#: utils/misc/guc_tables.c:2773 +#: utils/misc/guc_tables.c:2905 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Обсяг WAL, оброблений пишучим WAL процесом, при котрому ініціюється скидання журналу на диск." -#: utils/misc/guc_tables.c:2784 +#: utils/misc/guc_tables.c:2916 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Мінімальний розмір нового файлу для fsync замість записування WAL." -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2927 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Встановлює максимальну кількість одночасно працюючих процесів передачі WAL." -#: utils/misc/guc_tables.c:2806 +#: utils/misc/guc_tables.c:2938 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Встановлює максимальну кількість одночасно визначених слотів реплікації." -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2948 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Встановлює максимальний розмір WAL, який може бути зарезервований слотами реплікації." -#: utils/misc/guc_tables.c:2817 +#: 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 "Слоти реплікації будуть позначені як невдалі, і розблоковані сегменти для видалення або переробки, якщо цю кількість місця на диску займає WAL." -#: utils/misc/guc_tables.c:2829 +#: utils/misc/guc_tables.c:2961 msgid "Sets the maximum time to wait for WAL replication." msgstr "Встановлює максимальний час очікування реплікації WAL." -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2972 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Встановлює затримку в мілісекундах між затвердженням транзакцій і скиданням WAL на диск." -#: utils/misc/guc_tables.c:2852 -msgid "Sets the minimum number of concurrent open transactions required before performing commit_delay." -msgstr "Встановлює мінімальну кількість одночасно відкритих транзакцій, необхідних до виконання commit_delay." +#: utils/misc/guc_tables.c:2984 +msgid "Sets the minimum number of concurrent open transactions required before performing \"commit_delay\"." +msgstr "" -#: utils/misc/guc_tables.c:2863 +#: utils/misc/guc_tables.c:2995 msgid "Sets the number of digits displayed for floating-point values." msgstr "Встановлює кількість виведених чисел для значень з плаваючою точкою." -#: utils/misc/guc_tables.c:2864 +#: 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 "Це впливає на типи реальних, подвійної точності та геометричних даних. Нульове або від'ємне значення параметру додається до стандартної кількості цифр (FLT_DIG або DBL_DIG у відповідних випадках). Будь-яке значення більше нуля, обирає точний режим виводу." -#: utils/misc/guc_tables.c:2876 +#: 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 "Встановлює мінімальний час виконання, понад якого вибірка тверджень буде записуватись. Вибірка визначається log_statement_sample_rate." -#: utils/misc/guc_tables.c:2879 +#: utils/misc/guc_tables.c:3011 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "При 0 (нуль) фіксує зразок всіх запитів. -1 вимикає цю функцію." -#: utils/misc/guc_tables.c:2889 +#: 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:2891 +#: utils/misc/guc_tables.c:3023 msgid "Zero prints all queries. -1 turns this feature off." msgstr "При 0 (нуль) протоколюються всі запити. -1 вимикає цю функцію." -#: utils/misc/guc_tables.c:2901 +#: 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:2903 +#: utils/misc/guc_tables.c:3035 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "При 0 (нуль) протоколюються всі дії автоочистки. -1 вимикає журналювання автоочистки." -#: utils/misc/guc_tables.c:2913 +#: 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:2915 utils/misc/guc_tables.c:2927 +#: 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:2925 +#: 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:2937 +#: utils/misc/guc_tables.c:3069 msgid "Background writer sleep time between rounds." msgstr "Час призупинення в процесі фонового запису між підходами." -#: utils/misc/guc_tables.c:2948 +#: utils/misc/guc_tables.c:3080 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Максимальна кількість LRU-сторінок, які скидаються за один підхід, в процесі фонового запису." -#: utils/misc/guc_tables.c:2971 +#: 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:2985 -msgid "A variant of effective_io_concurrency that is used for maintenance work." -msgstr "Варіант effective_io_concurrency, що використовується для роботи з обслуговування." +#: 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:3011 +#: utils/misc/guc_tables.c:3132 +msgid "Limit on the size of data reads and writes." +msgstr "" + +#: utils/misc/guc_tables.c:3157 msgid "Maximum number of concurrent worker processes." msgstr "Максимальна кількість одночасно працюючих процесів." -#: utils/misc/guc_tables.c:3023 +#: utils/misc/guc_tables.c:3169 msgid "Maximum number of logical replication worker processes." msgstr "Максимальна кількість працюючих процесів логічної реплікації." -#: utils/misc/guc_tables.c:3035 +#: utils/misc/guc_tables.c:3181 msgid "Maximum number of table synchronization workers per subscription." msgstr "Максимальна кількість процесів синхронізації таблиць для однієї підписки." -#: utils/misc/guc_tables.c:3047 +#: utils/misc/guc_tables.c:3193 msgid "Maximum number of parallel apply workers per subscription." msgstr "Максимальна кількість паралельних процесів при підписці на одну підписку." -#: utils/misc/guc_tables.c:3057 +#: 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:3069 +#: 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:3081 +#: utils/misc/guc_tables.c:3227 msgid "Shows the maximum number of function arguments." msgstr "Показує максимальну кількість аргументів функції." -#: utils/misc/guc_tables.c:3092 +#: utils/misc/guc_tables.c:3238 msgid "Shows the maximum number of index keys." msgstr "Показує максимальну кількість ключів в індексі." -#: utils/misc/guc_tables.c:3103 +#: utils/misc/guc_tables.c:3249 msgid "Shows the maximum identifier length." msgstr "Показує максимальну довжину ідентифікатора." -#: utils/misc/guc_tables.c:3114 +#: utils/misc/guc_tables.c:3260 msgid "Shows the size of a disk block." msgstr "Показує розмір дискового блоку." -#: utils/misc/guc_tables.c:3125 +#: utils/misc/guc_tables.c:3271 msgid "Shows the number of pages per disk file." msgstr "Показує кількість сторінок в одному дисковому файлі." -#: utils/misc/guc_tables.c:3136 +#: utils/misc/guc_tables.c:3282 msgid "Shows the block size in the write ahead log." msgstr "Показує розмір блоку в журналі WAL." -#: utils/misc/guc_tables.c:3147 +#: utils/misc/guc_tables.c:3293 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Встановлює час очікування перед повторною спробою звертання до WAL після невдачі." -#: utils/misc/guc_tables.c:3159 +#: utils/misc/guc_tables.c:3305 msgid "Shows the size of write ahead log segments." msgstr "Показує розмір сегментів WAL." -#: utils/misc/guc_tables.c:3172 +#: utils/misc/guc_tables.c:3318 +msgid "Time for which WAL summary files should be kept." +msgstr "Час, протягом якого слід зберігати зведені файли WAL." + +#: utils/misc/guc_tables.c:3331 msgid "Time to sleep between autovacuum runs." msgstr "Час призупинення між запусками автоочистки." -#: utils/misc/guc_tables.c:3182 +#: utils/misc/guc_tables.c:3341 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Мінімальна кількість оновлень або видалень кортежів перед очисткою." -#: utils/misc/guc_tables.c:3191 +#: utils/misc/guc_tables.c:3350 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Мінімальна кількість вставлених кортежів перед очищенням, або -1 щоб вимкнути очищення після вставки." -#: utils/misc/guc_tables.c:3200 +#: utils/misc/guc_tables.c:3359 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Мінімальна кількість вставлень, оновлень або видалень кортежів перед аналізом." -#: utils/misc/guc_tables.c:3210 +#: utils/misc/guc_tables.c:3369 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Вік, при котрому необхідна автоочистка таблиці для запобігання зациклення ID транзакцій." -#: utils/misc/guc_tables.c:3222 +#: utils/misc/guc_tables.c:3381 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Вік Multixact, при котрому необхідна автоочистка таблиці для запобігання зациклення multixact." -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3391 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Встановлює максимальну кількість одночасно працюючих робочих процесів автоочистки." -#: utils/misc/guc_tables.c:3242 +#: utils/misc/guc_tables.c:3401 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Встановлює максимальну кількість паралельних процесів на одну операцію обслуговування." -#: utils/misc/guc_tables.c:3252 +#: utils/misc/guc_tables.c:3411 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Встановлює максимальну кількість паралельних процесів на вузол виконавця." -#: utils/misc/guc_tables.c:3263 +#: 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:3274 +#: 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:3285 -msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." -msgstr "Термін, після закінчення котрого знімок вважається занадто старим для отримання сторінок, змінених після створення знімку." - -#: utils/misc/guc_tables.c:3286 -msgid "A value of -1 disables this feature." -msgstr "Значення -1 вимикає цю функцію." - -#: utils/misc/guc_tables.c:3296 +#: utils/misc/guc_tables.c:3444 msgid "Time between issuing TCP keepalives." msgstr "Час між видачею TCP keepalives." -#: utils/misc/guc_tables.c:3297 utils/misc/guc_tables.c:3308 -#: utils/misc/guc_tables.c:3432 +#: 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:3307 +#: utils/misc/guc_tables.c:3455 msgid "Time between TCP keepalive retransmits." msgstr "Час між повтореннями TCP keepalive." -#: utils/misc/guc_tables.c:3318 +#: 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:3329 +#: utils/misc/guc_tables.c:3477 msgid "Maximum number of TCP keepalive retransmits." msgstr "Максимальна кількість повторень TCP keepalive." -#: utils/misc/guc_tables.c:3330 +#: 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 "Кількість послідовних повторень keepalive може бути втрачена, перед тим як підключення буде вважатись \"мертвим\". Значення 0 (нуль) використовує систему за замовчуванням." -#: utils/misc/guc_tables.c:3341 +#: utils/misc/guc_tables.c:3489 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Встановлює максимально допустимий результат для точного пошуку з використанням GIN." -#: utils/misc/guc_tables.c:3352 +#: 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:3353 +#: 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 "Мається на увазі загальний розмір кешей (кеша ядра і спільних буферів), які використовуються для файлів даних PostgreSQL. Розмір задається в дискових сторінках, звичайно це 8 КБ." -#: utils/misc/guc_tables.c:3364 +#: utils/misc/guc_tables.c:3512 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Встановлює мінімальний обсяг даних в таблиці для паралельного сканування." -#: utils/misc/guc_tables.c:3365 +#: 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:3375 +#: utils/misc/guc_tables.c:3523 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Встановлює мінімальний обсяг даних в індексі для паралельного сканування." -#: utils/misc/guc_tables.c:3376 +#: 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:3387 +#: utils/misc/guc_tables.c:3535 msgid "Shows the server version as an integer." msgstr "Показує версію сервера у вигляді цілого числа." -#: utils/misc/guc_tables.c:3398 +#: 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:3399 +#: utils/misc/guc_tables.c:3547 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "0 (нуль) фіксує всі файли. -1 вимикає цю функцію (за замовчуванням)." -#: utils/misc/guc_tables.c:3409 +#: 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:3420 +#: utils/misc/guc_tables.c:3568 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Встановлює максимальний розмір списку-очікування для GIN-індексу." -#: utils/misc/guc_tables.c:3431 +#: utils/misc/guc_tables.c:3579 msgid "TCP user timeout." msgstr "Таймаут користувача TCP." -#: utils/misc/guc_tables.c:3442 +#: utils/misc/guc_tables.c:3590 msgid "The size of huge page that should be requested." msgstr "Розмір величезної сторінки, яку необхідно затребувати." -#: utils/misc/guc_tables.c:3453 +#: utils/misc/guc_tables.c:3601 msgid "Aggressively flush system caches for debugging purposes." msgstr "Агресивно скидати системні кеші для цілей налагодження." -#: utils/misc/guc_tables.c:3476 +#: utils/misc/guc_tables.c:3624 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Встановлює інтервал часу між перевірками відключення під час виконання запитів." -#: utils/misc/guc_tables.c:3487 +#: utils/misc/guc_tables.c:3635 msgid "Time between progress updates for long-running startup operations." msgstr "Час між оновленнями прогресу для довготриваючих операцій запуску." -#: utils/misc/guc_tables.c:3489 +#: utils/misc/guc_tables.c:3637 msgid "0 turns this feature off." msgstr "0 вимикає цю функцію." -#: utils/misc/guc_tables.c:3499 +#: utils/misc/guc_tables.c:3647 msgid "Sets the iteration count for SCRAM secret generation." msgstr "Встановлює кількість ітерацій для секретного генерування SCRAM." -#: utils/misc/guc_tables.c:3519 +#: 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:3530 +#: 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:3541 +#: 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:3552 +#: 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:3563 +#: 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:3574 +#: 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:3585 +#: 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:3597 +#: utils/misc/guc_tables.c:3745 msgid "Perform JIT compilation if query is more expensive." msgstr "Якщо запит дорожчий, виконується JIT-компіляція." -#: utils/misc/guc_tables.c:3598 +#: utils/misc/guc_tables.c:3746 msgid "-1 disables JIT compilation." msgstr "-1 вимикає JIT-компіляцію." -#: utils/misc/guc_tables.c:3608 +#: utils/misc/guc_tables.c:3756 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Оптимізувати функції JIT-compiled, якщо запит дорожчий." -#: utils/misc/guc_tables.c:3609 +#: utils/misc/guc_tables.c:3757 msgid "-1 disables optimization." msgstr "-1 вимикає оптимізацію." -#: utils/misc/guc_tables.c:3619 +#: utils/misc/guc_tables.c:3767 msgid "Perform JIT inlining if query is more expensive." msgstr "Якщо запит дорожчий, виконується вбудовування JIT." -#: utils/misc/guc_tables.c:3620 +#: utils/misc/guc_tables.c:3768 msgid "-1 disables inlining." msgstr "-1 вимикає вбудовування." -#: utils/misc/guc_tables.c:3630 +#: 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:3642 +#: 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:3654 +#: utils/misc/guc_tables.c:3802 msgid "GEQO: selective pressure within the population." msgstr "GEQO: вибірковий тиск в популяції." -#: utils/misc/guc_tables.c:3665 +#: utils/misc/guc_tables.c:3813 msgid "GEQO: seed for random path selection." msgstr "GEQO: відправна значення для випадкового вибору шляху." -#: utils/misc/guc_tables.c:3676 -msgid "Multiple of work_mem to use for hash tables." -msgstr "Декілька work_mem для використання геш-таблиць." +#: utils/misc/guc_tables.c:3824 +msgid "Multiple of \"work_mem\" to use for hash tables." +msgstr "" -#: utils/misc/guc_tables.c:3687 +#: utils/misc/guc_tables.c:3835 msgid "Multiple of the average buffer usage to free per round." msgstr "Множник для середньої кількості використаних буферів, який визначає кількість буферів, які звільняються за один підхід." -#: utils/misc/guc_tables.c:3697 +#: utils/misc/guc_tables.c:3845 msgid "Sets the seed for random-number generation." msgstr "Встановлює відправне значення для генератора випадкових чисел." -#: utils/misc/guc_tables.c:3708 +#: utils/misc/guc_tables.c:3856 msgid "Vacuum cost delay in milliseconds." msgstr "Затримка вартості очистки в мілісекундах." -#: utils/misc/guc_tables.c:3719 +#: utils/misc/guc_tables.c:3867 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Затримка вартості очистки в мілісекундах, для автоочистки." -#: utils/misc/guc_tables.c:3730 +#: utils/misc/guc_tables.c:3878 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Кількість оновлень або видалень кортежів до reltuples, яка визначає потребу в очистці." -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3888 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Кількість вставлень кортежів до reltuples, яка визначає потребу в очистці." -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3898 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Кількість вставлень, оновлень або видалень кортежів до reltuples, яка визначає потребу в аналізі." -#: utils/misc/guc_tables.c:3760 +#: 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:3770 -msgid "Fraction of statements exceeding log_min_duration_sample to be logged." -msgstr "Частка тверджень, перевищує log_min_duration_sample, що підлягає запису." +#: utils/misc/guc_tables.c:3918 +msgid "Fraction of statements exceeding \"log_min_duration_sample\" to be logged." +msgstr "" -#: utils/misc/guc_tables.c:3771 +#: 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:3780 +#: utils/misc/guc_tables.c:3928 msgid "Sets the fraction of transactions from which to log all statements." msgstr "Встановлює частину транзакцій, від яких необхідно журналювати всі команди." -#: utils/misc/guc_tables.c:3781 +#: 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 "Використайте значення між 0.0 (ніколи не записувати) і 1.0 (записувати всі команди для всіх транзакцій)." -#: utils/misc/guc_tables.c:3800 +#: utils/misc/guc_tables.c:3948 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Встановлює команду оболонки, яка буде викликатись для архівації файлу WAL." -#: utils/misc/guc_tables.c:3801 +#: utils/misc/guc_tables.c:3949 msgid "This is used only if \"archive_library\" is not set." msgstr "Це використовується лише, якщо \"archive_library\" не встановлено." -#: utils/misc/guc_tables.c:3810 +#: utils/misc/guc_tables.c:3958 msgid "Sets the library that will be called to archive a WAL file." msgstr "Встановлює бібліотеку, яка буде викликана для архівування файлу WAL." -#: utils/misc/guc_tables.c:3811 +#: utils/misc/guc_tables.c:3959 msgid "An empty string indicates that \"archive_command\" should be used." msgstr "Порожній рядок вказує на те, що слід використовувати \"archive_command\"." -#: utils/misc/guc_tables.c:3820 +#: 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:3830 +#: 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:3840 +#: 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:3850 +#: utils/misc/guc_tables.c:3998 msgid "Specifies the timeline to recover into." msgstr "Вказує лінію часу для відновлення." -#: utils/misc/guc_tables.c:3860 +#: 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:3869 +#: utils/misc/guc_tables.c:4017 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Встановлює ідентифікатор транзакції, до якої буде продовжуватися відновлення." -#: utils/misc/guc_tables.c:3878 +#: utils/misc/guc_tables.c:4026 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Встановлює позначку часу, до якої буде продовжуватися відновлення." -#: utils/misc/guc_tables.c:3887 +#: utils/misc/guc_tables.c:4035 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Встановлює назву точки відновлення, до якої буде продовжуватися відновлення." -#: utils/misc/guc_tables.c:3896 +#: utils/misc/guc_tables.c:4044 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Встановлює номер LSN розташування випереджувального журналювання, до якого буде продовжуватися відновлення." -#: utils/misc/guc_tables.c:3906 +#: 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:3917 +#: 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:3927 +#: utils/misc/guc_tables.c:4075 msgid "Sets the client's character set encoding." msgstr "Встановлює кодування символів, використовуване клієнтом." -#: utils/misc/guc_tables.c:3938 +#: utils/misc/guc_tables.c:4086 msgid "Controls information prefixed to each log line." msgstr "Визначає інформацію префікса кожного рядка протокола." -#: utils/misc/guc_tables.c:3939 +#: utils/misc/guc_tables.c:4087 msgid "If blank, no prefix is used." msgstr "При пустому значенні, префікс також відсутній." -#: utils/misc/guc_tables.c:3948 +#: utils/misc/guc_tables.c:4096 msgid "Sets the time zone to use in log messages." msgstr "Встановлює часовий пояс для виведення часу в повідомленях протокола." -#: utils/misc/guc_tables.c:3958 +#: utils/misc/guc_tables.c:4106 msgid "Sets the display format for date and time values." msgstr "Встановлює формат виведення значень часу і дат." -#: utils/misc/guc_tables.c:3959 +#: utils/misc/guc_tables.c:4107 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Також визначає багатозначні задані дати, які вводяться." -#: utils/misc/guc_tables.c:3970 +#: utils/misc/guc_tables.c:4118 msgid "Sets the default table access method for new tables." msgstr "Встановлює метод доступу до таблиці за замовчуванням для нових таблиць." -#: utils/misc/guc_tables.c:3981 +#: utils/misc/guc_tables.c:4129 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Встановлює табличний простір за замовчуванням, для створення таблиць і індексів." -#: utils/misc/guc_tables.c:3982 +#: utils/misc/guc_tables.c:4130 msgid "An empty string selects the database's default tablespace." msgstr "Пустий рядок вибирає табличний простір за замовчуванням бази даних." -#: utils/misc/guc_tables.c:3992 +#: 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:4003 +#: utils/misc/guc_tables.c:4151 msgid "Sets whether a CREATEROLE user automatically grants the role to themselves, and with which options." msgstr "Задає, чи буде користувач CREATEROLE автоматично призначати собі цю роль і з якими параметрами." -#: utils/misc/guc_tables.c:4015 +#: utils/misc/guc_tables.c:4163 msgid "Sets the path for dynamically loadable modules." msgstr "Встановлює шлях для динамічно завантажуваних модулів." -#: utils/misc/guc_tables.c:4016 +#: 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:4029 +#: utils/misc/guc_tables.c:4177 msgid "Sets the location of the Kerberos server key file." msgstr "Встановлює розташування файлу з ключем Kerberos для даного сервера." -#: utils/misc/guc_tables.c:4040 +#: utils/misc/guc_tables.c:4188 msgid "Sets the Bonjour service name." msgstr "Встановлює ім'я служби Bonjour." -#: utils/misc/guc_tables.c:4050 +#: utils/misc/guc_tables.c:4198 msgid "Sets the language in which messages are displayed." msgstr "Встановлює мову виведених повідомлень." -#: utils/misc/guc_tables.c:4060 +#: utils/misc/guc_tables.c:4208 msgid "Sets the locale for formatting monetary amounts." msgstr "Встановлює локалізацію для форматування грошових сум." -#: utils/misc/guc_tables.c:4070 +#: utils/misc/guc_tables.c:4218 msgid "Sets the locale for formatting numbers." msgstr "Встановлює локалізацію для форматування чисел." -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4228 msgid "Sets the locale for formatting date and time values." msgstr "Встановлює локалізацію для форматування значень дати і часу." -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4238 msgid "Lists shared libraries to preload into each backend." msgstr "Список спільних бібліотек, попередньо завантажених до кожного внутрішнього серверу." -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4249 msgid "Lists shared libraries to preload into server." msgstr "Список спільних бібліотек, попередньо завантажених до серверу." -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4260 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Список непривілейованих спільних бібліотек, попередньо завантажених до кожного внутрішнього серверу." -#: utils/misc/guc_tables.c:4123 +#: 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:4135 +#: utils/misc/guc_tables.c:4283 msgid "Shows the server (database) character set encoding." msgstr "Показує набір символів кодування сервера (бази даних)." -#: utils/misc/guc_tables.c:4147 +#: utils/misc/guc_tables.c:4295 msgid "Shows the server version." msgstr "Показує версію сервера." -#: utils/misc/guc_tables.c:4159 +#: utils/misc/guc_tables.c:4307 msgid "Sets the current role." msgstr "Встановлює чинну роль." -#: utils/misc/guc_tables.c:4171 +#: utils/misc/guc_tables.c:4319 msgid "Sets the session user name." msgstr "Встановлює ім'я користувача в сеансі." -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4330 msgid "Sets the destination for server log output." msgstr "Встановлює, куди буде виводитися протокол серверу." -#: utils/misc/guc_tables.c:4183 +#: utils/misc/guc_tables.c:4331 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\", and \"eventlog\", depending on the platform." msgstr "Дійсні значення - це комбінації \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\", і \"eventlog\", в залежності від платформи." -#: utils/misc/guc_tables.c:4194 +#: utils/misc/guc_tables.c:4342 msgid "Sets the destination directory for log files." msgstr "Встановлює каталог призначення для файлів журналу." -#: utils/misc/guc_tables.c:4195 +#: 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:4205 +#: utils/misc/guc_tables.c:4353 msgid "Sets the file name pattern for log files." msgstr "Встановлює шаблон імені для файлів журналу." -#: utils/misc/guc_tables.c:4216 +#: utils/misc/guc_tables.c:4364 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Встановлює ім'я програми для ідентифікації повідомлень PostgreSQL в syslog." -#: utils/misc/guc_tables.c:4227 +#: 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:4238 +#: utils/misc/guc_tables.c:4386 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Встановлює часовий пояс для відображення та інтерпретації позначок часу." -#: utils/misc/guc_tables.c:4248 +#: utils/misc/guc_tables.c:4396 msgid "Selects a file of time zone abbreviations." msgstr "Вибирає файл з скороченими іменами часових поясів." -#: utils/misc/guc_tables.c:4258 +#: utils/misc/guc_tables.c:4406 msgid "Sets the owning group of the Unix-domain socket." msgstr "Встановлює відповідальну групу Unix-сокету." -#: utils/misc/guc_tables.c:4259 +#: 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:4269 +#: utils/misc/guc_tables.c:4417 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Встановлює каталоги, де будуть створюватись Unix-сокети." -#: utils/misc/guc_tables.c:4280 +#: 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:4295 +#: utils/misc/guc_tables.c:4443 msgid "Sets the server's data directory." msgstr "Встановлює каталог даних серверу." -#: utils/misc/guc_tables.c:4306 +#: utils/misc/guc_tables.c:4454 msgid "Sets the server's main configuration file." msgstr "Встановлює основний файл конфігурації серверу." -#: utils/misc/guc_tables.c:4317 +#: utils/misc/guc_tables.c:4465 msgid "Sets the server's \"hba\" configuration file." msgstr "Встановлює \"hba\" файл конфігурації серверу." -#: utils/misc/guc_tables.c:4328 +#: utils/misc/guc_tables.c:4476 msgid "Sets the server's \"ident\" configuration file." msgstr "Встановлює \"ident\" файл конфігурації серверу." -#: utils/misc/guc_tables.c:4339 +#: utils/misc/guc_tables.c:4487 msgid "Writes the postmaster PID to the specified file." msgstr "Записує ідентифікатор процесу (PID) postmaster у вказаний файл." -#: utils/misc/guc_tables.c:4350 +#: utils/misc/guc_tables.c:4498 msgid "Shows the name of the SSL library." msgstr "Показує назву бібліотеки SSL." -#: utils/misc/guc_tables.c:4365 +#: utils/misc/guc_tables.c:4513 msgid "Location of the SSL server certificate file." msgstr "Розташування файла сертифікату сервера для SSL." -#: utils/misc/guc_tables.c:4375 +#: utils/misc/guc_tables.c:4523 msgid "Location of the SSL server private key file." msgstr "Розташування файла з закритим ключем сервера для SSL." -#: utils/misc/guc_tables.c:4385 +#: utils/misc/guc_tables.c:4533 msgid "Location of the SSL certificate authority file." msgstr "Розташування файла центру сертифікації для SSL." -#: utils/misc/guc_tables.c:4395 +#: utils/misc/guc_tables.c:4543 msgid "Location of the SSL certificate revocation list file." msgstr "Розташування файла зі списком відкликаних сертфікатів для SSL." -#: utils/misc/guc_tables.c:4405 +#: utils/misc/guc_tables.c:4553 msgid "Location of the SSL certificate revocation list directory." msgstr "Розташування каталогу списку відкликаних сертифікатів SSL." -#: utils/misc/guc_tables.c:4415 +#: 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:4426 +#: utils/misc/guc_tables.c:4574 msgid "Sets default text search configuration." msgstr "Встановлює конфігурацію текстового пошуку за замовчуванням." -#: utils/misc/guc_tables.c:4436 +#: utils/misc/guc_tables.c:4584 msgid "Sets the list of allowed SSL ciphers." msgstr "Встановлює список дозволених шифрів для SSL." -#: utils/misc/guc_tables.c:4451 +#: utils/misc/guc_tables.c:4599 msgid "Sets the curve to use for ECDH." msgstr "Встановлює криву для ECDH." -#: utils/misc/guc_tables.c:4466 +#: utils/misc/guc_tables.c:4614 msgid "Location of the SSL DH parameters file." msgstr "Розташування файла з параметрами SSL DH." -#: utils/misc/guc_tables.c:4477 +#: utils/misc/guc_tables.c:4625 msgid "Command to obtain passphrases for SSL." msgstr "Команда, що дозволяє отримати парольну фразу для SSL." -#: utils/misc/guc_tables.c:4488 +#: utils/misc/guc_tables.c:4636 msgid "Sets the application name to be reported in statistics and logs." msgstr "Встановлює ім'я програми, яке буде повідомлятись у статистиці і протоколах." -#: utils/misc/guc_tables.c:4499 +#: 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:4510 +#: utils/misc/guc_tables.c:4658 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Встановлює менеджерів ресурсу WAL, для яких виконано перевірки узгодженості WAL." -#: utils/misc/guc_tables.c:4511 +#: 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 "При цьому до журналу будуть записуватись зображення повнихс сторінок для всіх блоків даних для перевірки з результатами відтворення WAL." -#: utils/misc/guc_tables.c:4521 +#: utils/misc/guc_tables.c:4669 msgid "JIT provider to use." msgstr "Використовувати провайдер JIT." -#: utils/misc/guc_tables.c:4532 +#: utils/misc/guc_tables.c:4680 msgid "Log backtrace for errors in these functions." msgstr "Відстежувати записи помилок у ціх функціях." -#: utils/misc/guc_tables.c:4543 +#: utils/misc/guc_tables.c:4691 msgid "Use direct I/O for file access." msgstr "Використовувати прямий ввід для доступу до файлу." -#: utils/misc/guc_tables.c:4563 +#: 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:4716 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "" + +#: utils/misc/guc_tables.c:4736 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Встановлює, чи дозволене використання \"\\\" в текстових рядках." -#: utils/misc/guc_tables.c:4573 +#: utils/misc/guc_tables.c:4746 msgid "Sets the output format for bytea." msgstr "Встановлює формат виводу для типу bytea." -#: utils/misc/guc_tables.c:4583 +#: utils/misc/guc_tables.c:4756 msgid "Sets the message levels that are sent to the client." msgstr "Встановлює рівень повідомлень, переданих клієнту." -#: utils/misc/guc_tables.c:4584 utils/misc/guc_tables.c:4680 -#: utils/misc/guc_tables.c:4691 utils/misc/guc_tables.c:4763 +#: 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:4594 +#: utils/misc/guc_tables.c:4767 msgid "Enables in-core computation of query identifiers." msgstr "Вмикає внутрішнє обчислення ідентифікаторів запиту." -#: utils/misc/guc_tables.c:4604 +#: utils/misc/guc_tables.c:4777 msgid "Enables the planner to use constraints to optimize queries." msgstr "Дає змогу планувальнику оптимізувати запити, використовуючи обмеження." -#: utils/misc/guc_tables.c:4605 +#: 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:4616 +#: utils/misc/guc_tables.c:4789 msgid "Sets the default compression method for compressible values." msgstr "Встановлює метод стискання за замовчуванням для стисливих значень." -#: utils/misc/guc_tables.c:4627 +#: utils/misc/guc_tables.c:4800 msgid "Sets the transaction isolation level of each new transaction." msgstr "Встановлює рівень ізоляції транзакції для кожної нової транзакції." -#: utils/misc/guc_tables.c:4637 +#: utils/misc/guc_tables.c:4810 msgid "Sets the current transaction's isolation level." msgstr "Встановлює чинний рівень ізоляції транзакцій." -#: utils/misc/guc_tables.c:4648 +#: utils/misc/guc_tables.c:4821 msgid "Sets the display format for interval values." msgstr "Встановлює формат відображення внутрішніх значень." -#: utils/misc/guc_tables.c:4659 +#: utils/misc/guc_tables.c:4832 msgid "Log level for reporting invalid ICU locale strings." msgstr "Рівень протоколу для повідомлення про невірні рядки локалі ICU." -#: utils/misc/guc_tables.c:4669 +#: utils/misc/guc_tables.c:4842 msgid "Sets the verbosity of logged messages." msgstr "Встановлює детальність повідомлень, які протоколюються." -#: utils/misc/guc_tables.c:4679 +#: utils/misc/guc_tables.c:4852 msgid "Sets the message levels that are logged." msgstr "Встанолвює рівні повідомлень, які протоколюються." -#: utils/misc/guc_tables.c:4690 +#: 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:4701 +#: utils/misc/guc_tables.c:4874 msgid "Sets the type of statements logged." msgstr "Встановлює тип операторів, які протоколюються." -#: utils/misc/guc_tables.c:4711 +#: utils/misc/guc_tables.c:4884 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Встановлює отримувача повідомлень, які відправляються до syslog." -#: utils/misc/guc_tables.c:4722 +#: utils/misc/guc_tables.c:4895 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Встановлює поведінку для тригерів і правил перезапису для сеансу." -#: utils/misc/guc_tables.c:4732 +#: utils/misc/guc_tables.c:4905 msgid "Sets the current transaction's synchronization level." msgstr "Встановлює рівень синхронізації поточної транзакції." -#: utils/misc/guc_tables.c:4742 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Дозволяє архівацію файлів WAL, використовуючи archive_command." +#: utils/misc/guc_tables.c:4915 +msgid "Allows archiving of WAL files using \"archive_command\"." +msgstr "" -#: utils/misc/guc_tables.c:4752 +#: utils/misc/guc_tables.c:4925 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Встновлює дію яку потрібно виконати в разі досягнення мети відновлення." -#: utils/misc/guc_tables.c:4762 -msgid "Enables logging of recovery-related debugging information." -msgstr "Вмикає протоколювання налагодженної інформації, пов'язаної з відновленням." - -#: utils/misc/guc_tables.c:4779 +#: utils/misc/guc_tables.c:4935 msgid "Collects function-level statistics on database activity." msgstr "Збирає статистику активності в базі даних на рівні функцій." -#: utils/misc/guc_tables.c:4790 +#: utils/misc/guc_tables.c:4946 msgid "Sets the consistency of accesses to statistics data." msgstr "Встановлює послідовність доступу до даних статистики." -#: utils/misc/guc_tables.c:4800 +#: 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:4810 +#: utils/misc/guc_tables.c:4966 msgid "Sets the level of information written to the WAL." msgstr "Встановлює рівень інформації, яка записується до WAL." -#: utils/misc/guc_tables.c:4820 +#: utils/misc/guc_tables.c:4976 msgid "Selects the dynamic shared memory implementation used." msgstr "Вибирає використовуване впровадження динамічної спільної пам'яті." -#: utils/misc/guc_tables.c:4830 +#: 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:4840 +#: utils/misc/guc_tables.c:4996 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Вибирає метод примусового запису оновлень в WAL на диск." -#: utils/misc/guc_tables.c:4850 +#: utils/misc/guc_tables.c:5006 msgid "Sets how binary values are to be encoded in XML." msgstr "Встановлює, як повинні кодуватись двійкові значення в XML." -#: utils/misc/guc_tables.c:4860 +#: 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 "Встановлює, чи слід розглядати XML-дані в неявних операціях аналізу і серіалізації як документи або як фрагменти змісту." -#: utils/misc/guc_tables.c:4871 +#: utils/misc/guc_tables.c:5027 msgid "Use of huge pages on Linux or Windows." msgstr "Використовувати величезні сторінки в Linux або Windows." -#: utils/misc/guc_tables.c:4881 +#: utils/misc/guc_tables.c:5037 +msgid "Indicates the status of huge pages." +msgstr "Показує статус великих сторінок." + +#: utils/misc/guc_tables.c:5048 msgid "Prefetch referenced blocks during recovery." msgstr "Попередньо вибирати пов'язані блоки під час відновлення." -#: utils/misc/guc_tables.c:4882 +#: utils/misc/guc_tables.c:5049 msgid "Look ahead in the WAL to find references to uncached data." msgstr "Шукати в WAL посилання на незакешовані дані." -#: utils/misc/guc_tables.c:4891 +#: utils/misc/guc_tables.c:5058 msgid "Forces the planner's use parallel query nodes." msgstr "Змушує планувальник використовувати паралельні вузли запитів." -#: utils/misc/guc_tables.c:4892 +#: 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:4904 +#: utils/misc/guc_tables.c:5071 msgid "Chooses the algorithm for encrypting passwords." msgstr "Виберіть алгоритм для шифрування паролів." -#: utils/misc/guc_tables.c:4914 +#: utils/misc/guc_tables.c:5081 msgid "Controls the planner's selection of custom or generic plan." msgstr "Контролює вибір планувальником спеціального або загального плану." -#: utils/misc/guc_tables.c:4915 +#: 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:4927 +#: utils/misc/guc_tables.c:5094 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Встановлює мінімальну версію протоколу SSL/TLS для використання." -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:5106 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Встановлює максимальну версію протоколу SSL/TLS для використання." -#: utils/misc/guc_tables.c:4951 +#: utils/misc/guc_tables.c:5118 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "Встановлює метод для синхронізації каталогу даних перед аварійним відновленням." -#: utils/misc/guc_tables.c:4960 +#: utils/misc/guc_tables.c:5127 msgid "Forces immediate streaming or serialization of changes in large transactions." msgstr "Забезпечує негайну потокову передачу або серіалізацію змін у великих транзакціях." -#: utils/misc/guc_tables.c:4961 +#: 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 "На стороні видавця це дозволяє передавати в потоковому режимі або серіалізувати кожну зміну в логічному декодуванні. На стороні абонента це дозволяє серіалізувати всі зміни у файлах і сповіщає працівників паралельних робочих процесів про необхідність прочитати і застосувати їх в кінці транзакції." @@ -29052,8 +30203,8 @@ msgstr "На стороні видавця це дозволяє передав msgid "internal error: unrecognized run-time parameter type\n" msgstr "внутрішня помилка: нерозпізнаний тип параметра часу виконання\n" -#: utils/misc/pg_controldata.c:51 utils/misc/pg_controldata.c:91 -#: utils/misc/pg_controldata.c:182 utils/misc/pg_controldata.c:223 +#: utils/misc/pg_controldata.c:50 utils/misc/pg_controldata.c:90 +#: utils/misc/pg_controldata.c:181 utils/misc/pg_controldata.c:222 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "обчислена контрольна сума CRC не відповідає значенню, збереженому у файлі" @@ -29073,145 +30224,143 @@ msgstr "запит буде обмежений політикою безпеки msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "Щоб вимкнути політику для власника таблиці, використайте ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:524 +#: utils/misc/timeout.c:520 #, c-format msgid "cannot add more timeout reasons" msgstr "додати більше причин тайм-ауту не можна" -#: utils/misc/tzparser.c:60 +#: utils/misc/tzparser.c:61 #, c-format msgid "time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d" msgstr "скорочення часового поясу \"%s\" занадто довге (максимум %d символів) у файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:72 +#: utils/misc/tzparser.c:73 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "зсув часового поясу %d поза діапазоном у файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:111 +#: utils/misc/tzparser.c:112 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "пропущено скорочення часового поясу в файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:120 +#: utils/misc/tzparser.c:121 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "пропущено зсув часового поясу в файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:132 +#: utils/misc/tzparser.c:133 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "неприпустиме число зсуву часового поясу в файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:168 +#: utils/misc/tzparser.c:169 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "неприпустимий синтаксис у файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:236 +#: utils/misc/tzparser.c:237 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "скорочення часового поясу \"%s\" визначено неодноразово" -#: utils/misc/tzparser.c:238 +#: utils/misc/tzparser.c:239 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "Запис у файлі часового поясу \"%s\", рядок %d, конфліктує з записом у файлі \"%s\", рядок %d." -#: utils/misc/tzparser.c:300 +#: utils/misc/tzparser.c:301 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "неприпустиме ім'я файла часового поясу \"%s\"" -#: utils/misc/tzparser.c:313 +#: utils/misc/tzparser.c:314 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "ліміт рекурсії файла часового поясу перевищено у файлі \"%s\"" -#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 +#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "не вдалося прочитати файл часового поясу \"%s\": %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:377 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "занадто довгий рядок у файлі часового поясу \"%s\", рядок %d" -#: utils/misc/tzparser.c:400 +#: utils/misc/tzparser.c:401 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "в @INCLUDE не вказано ім'я файла у файлі часового поясу \"%s\", рядок %d" -#: utils/mmgr/aset.c:446 utils/mmgr/generation.c:206 utils/mmgr/slab.c:367 +#: utils/mmgr/aset.c:452 utils/mmgr/bump.c:184 utils/mmgr/generation.c:216 +#: utils/mmgr/slab.c:371 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Помилка під час створення контексту пам'яті \"%s\"." -#: utils/mmgr/dsa.c:532 utils/mmgr/dsa.c:1346 +#: utils/mmgr/dsa.c:523 utils/mmgr/dsa.c:1364 #, c-format msgid "could not attach to dynamic shared area" msgstr "не вдалося підключитись до динамічно-спільної області" -#: utils/mmgr/mcxt.c:1047 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1121 -#: utils/mmgr/mcxt.c:1159 utils/mmgr/mcxt.c:1247 utils/mmgr/mcxt.c:1278 -#: utils/mmgr/mcxt.c:1314 utils/mmgr/mcxt.c:1503 utils/mmgr/mcxt.c:1548 -#: utils/mmgr/mcxt.c:1605 +#: utils/mmgr/mcxt.c:1155 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Помилка в запиті розміру %zu в контексті пам'яті \"%s\"." -#: utils/mmgr/mcxt.c:1210 +#: utils/mmgr/mcxt.c:1299 #, c-format msgid "logging memory contexts of PID %d" msgstr "журналювання контекстів пам'яті PID %d" -#: utils/mmgr/portalmem.c:188 +#: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" msgstr "курсор \"%s\" вже існує" -#: utils/mmgr/portalmem.c:192 +#: utils/mmgr/portalmem.c:191 #, c-format msgid "closing existing cursor \"%s\"" msgstr "існуючий курсор \"%s\" закривається" -#: utils/mmgr/portalmem.c:402 +#: utils/mmgr/portalmem.c:401 #, c-format msgid "portal \"%s\" cannot be run" msgstr "портал \"%s\" не можна запустити" -#: utils/mmgr/portalmem.c:480 +#: utils/mmgr/portalmem.c:479 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "видалити закріплений портал \"%s\" не можна" -#: utils/mmgr/portalmem.c:488 +#: utils/mmgr/portalmem.c:487 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "видалити активний портал \"%s\" не можна" -#: utils/mmgr/portalmem.c:739 +#: utils/mmgr/portalmem.c:738 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "не можна виконати PREPARE для транзакції, яка створила курсор WITH HOLD" -#: utils/mmgr/portalmem.c:1230 +#: utils/mmgr/portalmem.c:1229 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "виконати команди транзакції всередині циклу з курсором, який не є \"лише для читання\", не можна" #: utils/sort/logtape.c:266 utils/sort/logtape.c:287 #, c-format -msgid "could not seek to block %ld of temporary file" -msgstr "не вдалося знайти шлях до блокування %ld тимчасового файлу" +msgid "could not seek to block %lld of temporary file" +msgstr "не може намагатися заблокувати %lld тимчасового файлу" -#: utils/sort/sharedtuplestore.c:467 +#: utils/sort/sharedtuplestore.c:466 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "неочікуваний блок у тимчасовому файлі спільного сховища кортежів" -#: utils/sort/sharedtuplestore.c:549 +#: utils/sort/sharedtuplestore.c:548 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "не вдалося знайти для блокування %u у тимчасовому файлі зі спільного сховища кортежів" @@ -29221,17 +30370,17 @@ msgstr "не вдалося знайти для блокування %u у ти msgid "cannot have more than %d runs for an external sort" msgstr "кількість виконуючих процесів для зовнішнього сортування не може перевищувати %d" -#: utils/sort/tuplesortvariants.c:1363 +#: utils/sort/tuplesortvariants.c:1552 #, c-format msgid "could not create unique index \"%s\"" msgstr "не вдалося створити унікальний індекс \"%s\"" -#: utils/sort/tuplesortvariants.c:1365 +#: utils/sort/tuplesortvariants.c:1554 #, c-format msgid "Key %s is duplicated." msgstr "Ключ %s дублюється." -#: utils/sort/tuplesortvariants.c:1366 +#: utils/sort/tuplesortvariants.c:1555 #, c-format msgid "Duplicate keys exist." msgstr "Дублікати ключів існують." @@ -29245,403 +30394,423 @@ msgstr "Дублікати ключів існують." msgid "could not seek in tuplestore temporary file" msgstr "не вдалося знайти у тимчасовому файлі зі сховища кортежів" -#: utils/time/snapmgr.c:571 +#: utils/time/snapmgr.c:536 #, c-format msgid "The source transaction is not running anymore." msgstr "Вихідна транзакція вже не виконується." -#: utils/time/snapmgr.c:1166 +#: utils/time/snapmgr.c:1136 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "експортувати знімок з підтранзакції не можна" -#: utils/time/snapmgr.c:1325 utils/time/snapmgr.c:1330 -#: utils/time/snapmgr.c:1335 utils/time/snapmgr.c:1350 -#: utils/time/snapmgr.c:1355 utils/time/snapmgr.c:1360 -#: utils/time/snapmgr.c:1375 utils/time/snapmgr.c:1380 -#: utils/time/snapmgr.c:1385 utils/time/snapmgr.c:1487 -#: utils/time/snapmgr.c:1503 utils/time/snapmgr.c:1528 +#: utils/time/snapmgr.c:1296 utils/time/snapmgr.c:1301 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1321 +#: utils/time/snapmgr.c:1326 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1346 utils/time/snapmgr.c:1351 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1470 +#: utils/time/snapmgr.c:1486 utils/time/snapmgr.c:1511 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "неприпустимі дані знімку в файлі \"%s\"" -#: utils/time/snapmgr.c:1422 +#: utils/time/snapmgr.c:1393 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT повинна викликатись перед будь-яким запитом" -#: utils/time/snapmgr.c:1431 +#: utils/time/snapmgr.c:1402 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "транзакція, яка імпортує знімок, повинна мати рівень ізоляції SERIALIZABLE або REPEATABLE READ" -#: utils/time/snapmgr.c:1440 utils/time/snapmgr.c:1449 +#: utils/time/snapmgr.c:1411 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "неприпустимий ідентифікатор знімка: \"%s\"" -#: utils/time/snapmgr.c:1541 +#: utils/time/snapmgr.c:1426 +#, c-format +msgid "snapshot \"%s\" does not exist" +msgstr "знімок \"%s\" не існує" + +#: utils/time/snapmgr.c:1524 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "серіалізована транзакція не може імпортувати знімок з не серіалізованої транзакції" -#: utils/time/snapmgr.c:1545 +#: utils/time/snapmgr.c:1528 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "серіалізована транзакція в режимі \"читання-запис\" не може імпортувати знімок з транзакції в режимі \"тільки читання\"" -#: utils/time/snapmgr.c:1560 +#: utils/time/snapmgr.c:1543 #, c-format msgid "cannot import a snapshot from a different database" msgstr "імпортувати знімок з іншої бази даних не можна" -#: gram.y:1197 +#: gram.y:1231 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD більше не підтримується" -#: gram.y:1198 +#: gram.y:1232 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Видаліть UNENCRYPTED, щоб зберегти пароль у зашифрованій формі." -#: gram.y:1525 gram.y:1541 +#: 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:1693 +#: gram.y:1727 #, c-format msgid "current database cannot be changed" msgstr "поточна база даних не може бути змінена" -#: gram.y:1826 +#: gram.y:1860 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "інтервал, який задає часовий пояс, повинен бути HOUR або HOUR TO MINUTE" -#: gram.y:2443 +#: gram.y:2487 #, c-format msgid "column number must be in range from 1 to %d" msgstr "номер стовпця повинен бути в діапазоні від 1 до %d" -#: gram.y:3039 +#: gram.y:3083 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "параметр послідовності \"%s\" тут не підтримується" -#: gram.y:3068 +#: gram.y:3122 #, c-format msgid "modulus for hash partition provided more than once" msgstr "модуль для геш-секції вказано неодноразово" -#: gram.y:3077 +#: gram.y:3131 #, c-format msgid "remainder for hash partition provided more than once" msgstr "решта для геш-секції вказана неодноразово" -#: gram.y:3084 +#: gram.y:3138 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "нерозпізнана специфікація границі геш-секції \"%s\"" -#: gram.y:3092 +#: gram.y:3146 #, c-format msgid "modulus for hash partition must be specified" msgstr "потрібно вказати модуль для геш-секції" -#: gram.y:3096 +#: gram.y:3150 #, c-format msgid "remainder for hash partition must be specified" msgstr "потрібно вказати решту для геш-секції" -#: gram.y:3304 gram.y:3338 +#: gram.y:3358 gram.y:3392 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT не допускається з PROGRAM" -#: gram.y:3310 +#: gram.y:3364 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "Речення WHERE не дозволяється використовувати з COPY TO" -#: gram.y:3649 gram.y:3656 gram.y:12821 gram.y:12829 +#: 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:3932 +#: gram.y:3995 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "для згенерованого стовпця, потрібно вказати GENERATED ALWAYS" -#: gram.y:4315 +#: gram.y:4432 #, c-format msgid "a column list with %s is only supported for ON DELETE actions" msgstr "список стовпців з %s підтримується лише для дій ON DELETE" -#: gram.y:5027 +#: gram.y:5151 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM більше не підтримується" -#: gram.y:5725 +#: gram.y:5849 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "нерозпізнаний параметр безпеки рядка \"%s\"" -#: gram.y:5726 +#: gram.y:5850 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Наразі підтримуються лише політики PERMISSIVE або RESTRICTIVE." -#: gram.y:5811 +#: gram.y:5935 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER не підтримується" -#: gram.y:5848 +#: gram.y:5972 msgid "duplicate trigger events specified" msgstr "вказані події тригера повторюються" -#: gram.y:5997 +#: gram.y:6121 #, c-format msgid "conflicting constraint properties" msgstr "конфліктуючі властивості обмеження" -#: gram.y:6096 +#: gram.y:6220 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION ще не реалізований" -#: gram.y:6504 +#: gram.y:6537 +#, c-format +msgid "dropping an enum value is not implemented" +msgstr "відкидання значення переліку не реалізовано" + +#: gram.y:6655 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK більше не потребується" -#: gram.y:6505 +#: gram.y:6656 #, c-format msgid "Update your data type." msgstr "Поновіть ваш тип даних." -#: gram.y:8378 +#: gram.y:8529 #, c-format msgid "aggregates cannot have output arguments" msgstr "агрегатні функції не можуть мати вихідних аргументів" -#: gram.y:11054 gram.y:11073 +#: gram.y:11221 gram.y:11240 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION не підтримується для рекурсивних подань" -#: gram.y:12960 +#: gram.y:13162 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "Синтаксис LIMIT #,# не підтримується" -#: gram.y:12961 +#: gram.y:13163 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Використайте окремі речення LIMIT і OFFSET." -#: gram.y:13821 +#: gram.y:14038 #, c-format msgid "only one DEFAULT value is allowed" msgstr "допускається лише одне значення DEFAULT" -#: gram.y:13830 +#: gram.y:14047 #, c-format msgid "only one PATH value per column is allowed" msgstr "для стовпця допускається лише одне значення PATH" -#: gram.y:13839 +#: gram.y:14056 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "конфліктуючі або надлишкові оголошення NULL / NOT NULL для стовпця \"%s\"" -#: gram.y:13848 +#: gram.y:14065 #, c-format msgid "unrecognized column option \"%s\"" msgstr "нерозпізнаний параметр стовпця \"%s\"" -#: gram.y:14102 +#: gram.y:14147 +#, c-format +msgid "only string constants are supported in JSON_TABLE path specification" +msgstr "" + +#: gram.y:14469 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "точність для типу float повинна бути мінімум 1 біт" -#: gram.y:14111 +#: gram.y:14478 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "точність для типу float повинна бути меньше 54 біт" -#: gram.y:14614 +#: gram.y:14995 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "неправильна кількість параметрів у лівій частині виразу OVERLAPS" -#: gram.y:14619 +#: gram.y:15000 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "неправильна кількість параметрів у правій частині виразу OVERLAPS" -#: gram.y:14796 +#: gram.y:15177 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "Предикат UNIQUE ще не реалізований" -#: gram.y:15212 +#: gram.y:15591 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "використовувати речення ORDER BY з WITHIN GROUP неодноразово, не можна" -#: gram.y:15217 +#: gram.y:15596 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "використовувати DISTINCT з WITHIN GROUP не можна" -#: gram.y:15222 +#: gram.y:15601 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "використовувати VARIADIC з WITHIN GROUP не можна" -#: gram.y:15856 gram.y:15880 +#: gram.y:16328 gram.y:16352 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "початком рамки не може бути UNBOUNDED FOLLOWING" -#: gram.y:15861 +#: gram.y:16333 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "рамка, яка починається з наступного рядка не можна закінчуватись поточним рядком" -#: gram.y:15885 +#: gram.y:16357 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "кінцем рамки не може бути UNBOUNDED PRECEDING" -#: gram.y:15891 +#: gram.y:16363 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "рамка, яка починається з поточного рядка не може мати попередніх рядків" -#: gram.y:15898 +#: gram.y:16370 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "рамка, яка починається з наступного рядка не може мати попередніх рядків" -#: gram.y:16659 +#: gram.y:16919 +#, c-format +msgid "unrecognized JSON encoding: %s" +msgstr "нерозпізнане кодування JSON: %s" + +#: gram.y:17243 #, c-format msgid "type modifier cannot have parameter name" msgstr "тип modifier не може мати ім'я параметра" -#: gram.y:16665 +#: gram.y:17249 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "тип modifier не може мати ORDER BY" -#: gram.y:16733 gram.y:16740 gram.y:16747 +#: 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:16837 gram.y:18294 +#: 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:17973 gram.y:18160 +#: gram.y:18597 gram.y:18772 msgid "improper use of \"*\"" msgstr "неправильне використання \"*\"" -#: gram.y:18224 +#: 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 "сортувальна агрегатна функція з прямим аргументом VARIADIC повинна мати один агрегатний аргумент VARIADIC того ж типу даних" -#: gram.y:18261 +#: gram.y:18873 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "кілька речень ORDER BY не допускається" -#: gram.y:18272 +#: gram.y:18884 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "кілька речень OFFSET не допускається" -#: gram.y:18281 +#: gram.y:18893 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "кілька речень LIMIT не допускається" -#: gram.y:18290 +#: gram.y:18902 #, c-format msgid "multiple limit options not allowed" msgstr "використання декількох параметрів обмеження не дозволяється" -#: gram.y:18317 +#: gram.y:18929 #, c-format msgid "multiple WITH clauses not allowed" msgstr "кілька речень WITH не допускається" -#: gram.y:18510 +#: gram.y:19122 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "В табличних функціях аргументи OUT і INOUT не дозволяються" -#: gram.y:18643 +#: gram.y:19255 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "кілька речень COLLATE не допускається" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18681 gram.y:18694 +#: gram.y:19293 gram.y:19306 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "обмеження %s не можуть бути позначені DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18707 +#: gram.y:19319 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "обмеження %s не можуть бути позначені NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:18720 +#: gram.y:19332 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "обмеження %s не можуть бути позначені NO INHERIT" -#: gram.y:18742 +#: gram.y:19354 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "нерозпізнана стратегія секціонування \"%s\"" -#: gram.y:18766 +#: gram.y:19378 #, c-format msgid "invalid publication object list" msgstr "неприпустимий список об'єктів публікації" -#: gram.y:18767 +#: gram.y:19379 #, c-format msgid "One of TABLE or TABLES IN SCHEMA must be specified before a standalone table or schema name." msgstr "Одну з TABLE або TABLES IN SCHEMA необхідно вказати перед назвою автономної таблиці або схеми." -#: gram.y:18783 +#: gram.y:19395 #, c-format msgid "invalid table name" msgstr "неприпустиме ім'я таблиці" -#: gram.y:18804 +#: gram.y:19416 #, c-format msgid "WHERE clause not allowed for schema" msgstr "Речення WHERE не допускається для схеми" -#: gram.y:18811 +#: gram.y:19423 #, c-format msgid "column specification not allowed for schema" msgstr "специфікація стовпця не дозволена для схеми" -#: gram.y:18825 +#: gram.y:19437 #, c-format msgid "invalid schema name" msgstr "неприпустиме ім'я схеми" @@ -29686,12 +30855,17 @@ msgstr "синтаксична помилка у файлі \"%s\" рядок %u msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "знайдено занадто багато синтаксичних помилок, переривання файла \"%s\"" -#: jsonpath_gram.y:529 +#: jsonpath_gram.y:267 +#, c-format +msgid ".decimal() can only have an optional precision[,scale]." +msgstr ".decimal() може мати лише необов'язковий параметр precision[,scale]." + +#: jsonpath_gram.y:599 #, c-format msgid "Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate." msgstr "Нерозпізнаний символ позначки \"%.*s\" в предикаті LIKE_REGEX." -#: jsonpath_gram.y:607 +#: jsonpath_gram.y:677 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "XQuery \"x\" позначка (розширені регулярні вирази) не реалізовано" @@ -29708,7 +30882,7 @@ msgstr "неприпустима шістнадцяткова послідовн msgid "unexpected end after backslash" msgstr "неочікуваний кінець після зворотного слеша" -#: jsonpath_scan.l:201 repl_scanner.l:209 scan.l:741 +#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:756 msgid "unterminated quoted string" msgstr "незавершений рядок в лапках" @@ -29720,8 +30894,8 @@ msgstr "неочікуваний кінець коментаря" msgid "invalid numeric literal" msgstr "невірна числова константа" -#: jsonpath_scan.l:325 jsonpath_scan.l:331 jsonpath_scan.l:337 scan.l:1049 -#: scan.l:1053 scan.l:1057 scan.l:1061 scan.l:1065 scan.l:1069 scan.l:1073 +#: 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 "сміття після числового літерала" @@ -29737,139 +30911,140 @@ msgstr "%s в кінці введення jsonpath" msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s в або біля \"%s\" введення jsonpath" -#: jsonpath_scan.l:557 +#: jsonpath_scan.l:568 msgid "invalid input" msgstr "неправильні вхідні дані" -#: jsonpath_scan.l:583 +#: jsonpath_scan.l:594 msgid "invalid hexadecimal digit" msgstr "неприпустима шістнадцяткова цифра" -#: jsonpath_scan.l:614 +#: jsonpath_scan.l:625 #, c-format msgid "could not convert Unicode to server encoding" msgstr "не вдалося перетворити Юнікод в серверне кодування" -#: repl_gram.y:301 repl_gram.y:333 +#: repl_gram.y:318 repl_gram.y:359 #, c-format msgid "invalid timeline %u" msgstr "неприпустима часова шкала %u" -#: repl_scanner.l:152 +#: repl_scanner.l:154 msgid "invalid streaming start location" msgstr "неприпустиме розташування початку потокового передавання" -#: scan.l:482 +#: scan.l:497 msgid "unterminated /* comment" msgstr "незавершений коментар /*" -#: scan.l:502 +#: scan.l:517 msgid "unterminated bit string literal" msgstr "незавершений бітовий рядок" -#: scan.l:516 +#: scan.l:531 msgid "unterminated hexadecimal string literal" msgstr "незавершений шістнадцятковий рядок" -#: scan.l:566 +#: scan.l:581 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "небезпечне використання рядкової констани зі спеціальними кодами Unicode" -#: scan.l:567 +#: scan.l:582 #, c-format -msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." -msgstr "Константи рядка зі спеціальними кодами Unicode не можна використовувати, коли параметр standard_conforming_strings вимкнений." +msgid "String constants with Unicode escapes cannot be used when \"standard_conforming_strings\" is off." +msgstr "" -#: scan.l:628 +#: scan.l:643 msgid "unhandled previous state in xqs" msgstr "необроблений попередній стан у xqs" -#: scan.l:702 +#: scan.l:717 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Спеціальні коди Unicode повинні бути \\uXXXX або \\UXXXXXXXX." -#: scan.l:713 +#: scan.l:728 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "небезпечне використання символу \\' в рядку" -#: scan.l:714 +#: scan.l:729 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "Використайте \" щоб записати лапки в рядку. Запис \\' небезпечний лише для клієнтських кодувань." -#: scan.l:786 +#: scan.l:801 msgid "unterminated dollar-quoted string" msgstr "незавершений рядок з $" -#: scan.l:803 scan.l:813 +#: scan.l:818 scan.l:828 msgid "zero-length delimited identifier" msgstr "пустий ідентифікатор із роздільниками" -#: scan.l:824 syncrep_scanner.l:101 +#: scan.l:839 syncrep_scanner.l:101 msgid "unterminated quoted identifier" msgstr "незавершений ідентифікатор в лапках" -#: scan.l:987 +#: scan.l:1002 msgid "operator too long" msgstr "занадто довгий оператор" -#: scan.l:1000 +#: scan.l:1015 msgid "trailing junk after parameter" msgstr "сміття після параметру" -#: scan.l:1021 +#: scan.l:1036 msgid "invalid hexadecimal integer" msgstr "неприпустиме шістнадцяткове число" -#: scan.l:1025 +#: scan.l:1040 msgid "invalid octal integer" msgstr "помилкове вісімкове число" -#: scan.l:1029 +#: scan.l:1044 msgid "invalid binary integer" msgstr "неприпустиме двійкове ціле число" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1236 +#: 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:1244 +#: scan.l:1247 #, c-format msgid "%s at or near \"%s\"" msgstr "%s в або поблизу \"%s\"" -#: scan.l:1434 +#: scan.l:1439 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "нестандартне використання \\' в рядку" -#: scan.l:1435 +#: scan.l:1440 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "Щоб записати лапки у рядку використовуйте \" або синтаксис спеціальних рядків (E'...')." -#: scan.l:1444 +#: scan.l:1449 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "нестандартне використання \\\\ в рядку" -#: scan.l:1445 +#: scan.l:1450 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "Для запису зворотніх скісних рисок \"\\\" використовуйте синтаксис спеціальних рядків, наприклад E'\\\\'." -#: scan.l:1459 +#: scan.l:1464 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "нестандартне використання спеціального символу в рядку" -#: scan.l:1460 +#: scan.l:1465 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Для запису спеціальних символів використовуйте синтаксис спеціальних рядків E'\\r\\n'." + diff --git a/src/backend/port/sysv_sema.c b/src/backend/port/sysv_sema.c index f7c8638aec5b8..6ac83ea1a821a 100644 --- a/src/backend/port/sysv_sema.c +++ b/src/backend/port/sysv_sema.c @@ -50,14 +50,8 @@ typedef int IpcSemaphoreId; /* semaphore ID returned by semget(2) */ * we allocate. It must be *less than* your kernel's SEMMSL (max semaphores * per set) parameter, which is often around 25. (Less than, because we * allocate one extra sema in each set for identification purposes.) - * - * The present value of 19 is chosen with one eye on NetBSD/OpenBSD's default - * SEMMNS setting of 60. Remembering the extra sema per set, this lets us - * allocate three sets with 57 useful semaphores before exceeding that, which - * is enough to run our core regression tests. Users of those systems will - * still want to raise SEMMNS for any sort of production work, though. */ -#define SEMAS_PER_SET 19 +#define SEMAS_PER_SET 16 #define IPCProtection (0600) /* access/modify by user only */ @@ -75,7 +69,7 @@ static int nextSemaNumber; /* next free sem num in last sema set */ static IpcSemaphoreId InternalIpcSemaphoreCreate(IpcSemaphoreKey semKey, - int numSems); + int numSems, bool retry_ok); static void IpcSemaphoreInitialize(IpcSemaphoreId semId, int semNum, int value); static void IpcSemaphoreKill(IpcSemaphoreId semId); @@ -94,9 +88,13 @@ static void ReleaseSemaphores(int status, Datum arg); * If we fail with a failure code other than collision-with-existing-set, * print out an error and abort. Other types of errors suggest nonrecoverable * problems. + * + * Unfortunately, it's sometimes hard to tell whether errors are + * nonrecoverable. Our caller keeps track of whether continuing to retry + * is sane or not; if not, we abort on failure regardless of the errno. */ static IpcSemaphoreId -InternalIpcSemaphoreCreate(IpcSemaphoreKey semKey, int numSems) +InternalIpcSemaphoreCreate(IpcSemaphoreKey semKey, int numSems, bool retry_ok) { int semId; @@ -107,16 +105,27 @@ InternalIpcSemaphoreCreate(IpcSemaphoreKey semKey, int numSems) int saved_errno = errno; /* - * Fail quietly if error indicates a collision with existing set. One - * would expect EEXIST, given that we said IPC_EXCL, but perhaps we - * could get a permission violation instead? Also, EIDRM might occur - * if an old set is slated for destruction but not gone yet. + * Fail quietly if error suggests a collision with an existing set and + * our caller has not lost patience. + * + * One would expect EEXIST, given that we said IPC_EXCL, but perhaps + * we could get a permission violation instead. On some platforms + * EINVAL will be reported if the existing set has too few semaphores. + * Also, EIDRM might occur if an old set is slated for destruction but + * not gone yet. + * + * EINVAL is the key reason why we need the caller-level loop limit, + * as it can also mean that the platform's SEMMSL is less than + * numSems, and that condition can't be fixed by trying another key. */ - if (saved_errno == EEXIST || saved_errno == EACCES + if (retry_ok && + (saved_errno == EEXIST + || saved_errno == EACCES + || saved_errno == EINVAL #ifdef EIDRM - || saved_errno == EIDRM + || saved_errno == EIDRM #endif - ) + )) return -1; /* @@ -213,17 +222,22 @@ IpcSemaphoreGetLastPID(IpcSemaphoreId semId, int semNum) static IpcSemaphoreId IpcSemaphoreCreate(int numSems) { + int num_tries = 0; IpcSemaphoreId semId; union semun semun; PGSemaphoreData mysema; /* Loop till we find a free IPC key */ - for (nextSemaKey++;; nextSemaKey++) + for (nextSemaKey++;; nextSemaKey++, num_tries++) { pid_t creatorPID; - /* Try to create new semaphore set */ - semId = InternalIpcSemaphoreCreate(nextSemaKey, numSems + 1); + /* + * Try to create new semaphore set. Give up after trying 1000 + * distinct IPC keys. + */ + semId = InternalIpcSemaphoreCreate(nextSemaKey, numSems + 1, + num_tries < 1000); if (semId >= 0) break; /* successful create */ @@ -260,7 +274,7 @@ IpcSemaphoreCreate(int numSems) /* * Now try again to create the sema set. */ - semId = InternalIpcSemaphoreCreate(nextSemaKey, numSems + 1); + semId = InternalIpcSemaphoreCreate(nextSemaKey, numSems + 1, true); if (semId >= 0) break; /* successful create */ diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 2513a8ef8a665..dce4c8c45b9b6 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -77,7 +77,6 @@ #include "catalog/namespace.h" #include "catalog/pg_database.h" #include "catalog/pg_namespace.h" -#include "commands/dbcommands.h" #include "commands/vacuum.h" #include "common/int.h" #include "lib/ilist.h" @@ -310,6 +309,16 @@ static AutoVacuumShmemStruct *AutoVacuumShmem; static dlist_head DatabaseList = DLIST_STATIC_INIT(DatabaseList); static MemoryContext DatabaseListCxt = NULL; +/* + * Dummy pointer to persuade Valgrind that we've not leaked the array of + * avl_dbase structs. Make it global to ensure the compiler doesn't + * optimize it away. + */ +#ifdef USE_VALGRIND +extern avl_dbase *avl_dbase_array; +avl_dbase *avl_dbase_array; +#endif + /* Pointer to my own WorkerInfo, valid on each worker */ static WorkerInfo MyWorkerInfo = NULL; @@ -562,10 +571,10 @@ AutoVacLauncherMain(const void *startup_data, size_t startup_data_len) /* * Create the initial database list. The invariant we want this list to - * keep is that it's ordered by decreasing next_time. As soon as an entry - * is updated to a higher time, it will be moved to the front (which is - * correct because the only operation is to add autovacuum_naptime to the - * entry, and time always increases). + * keep is that it's ordered by decreasing next_worker. As soon as an + * entry is updated to a higher time, it will be moved to the front (which + * is correct because the only operation is to add autovacuum_naptime to + * the entry, and time always increases). */ rebuild_database_list(InvalidOid); @@ -1020,6 +1029,10 @@ rebuild_database_list(Oid newdb) /* put all the hash elements into an array */ dbary = palloc(nelems * sizeof(avl_dbase)); + /* keep Valgrind quiet */ +#ifdef USE_VALGRIND + avl_dbase_array = dbary; +#endif i = 0; hash_seq_init(&seq, dbhash); @@ -1918,7 +1931,7 @@ do_autovacuum(void) * This injection point is put in a transaction block to work with a wait * that uses a condition variable. */ - INJECTION_POINT("autovacuum-worker-start"); + INJECTION_POINT("autovacuum-worker-start", NULL); /* * Compute the multixact age for which freezing is urgent. This is @@ -2073,6 +2086,12 @@ do_autovacuum(void) } } } + + /* Release stuff to avoid per-relation leakage */ + if (relopts) + pfree(relopts); + if (tabentry) + pfree(tabentry); } table_endscan(relScan); @@ -2089,7 +2108,8 @@ do_autovacuum(void) Form_pg_class classForm = (Form_pg_class) GETSTRUCT(tuple); PgStat_StatTabEntry *tabentry; Oid relid; - AutoVacOpts *relopts = NULL; + AutoVacOpts *relopts; + bool free_relopts = false; bool dovacuum; bool doanalyze; bool wraparound; @@ -2107,7 +2127,9 @@ do_autovacuum(void) * main rel */ relopts = extract_autovac_opts(tuple, pg_class_desc); - if (relopts == NULL) + if (relopts) + free_relopts = true; + else { av_relation *hentry; bool found; @@ -2128,6 +2150,12 @@ do_autovacuum(void) /* ignore analyze for toast tables */ if (dovacuum) table_oids = lappend_oid(table_oids, relid); + + /* Release stuff to avoid leakage */ + if (free_relopts) + pfree(relopts); + if (tabentry) + pfree(tabentry); } table_endscan(relScan); @@ -2219,6 +2247,12 @@ do_autovacuum(void) get_namespace_name(classForm->relnamespace), NameStr(classForm->relname)))); + /* + * Deletion might involve TOAST table access, so ensure we have a + * valid snapshot. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + object.classId = RelationRelationId; object.objectId = relid; object.objectSubId = 0; @@ -2231,6 +2265,7 @@ do_autovacuum(void) * To commit the deletion, end current transaction and start a new * one. Note this also releases the locks we took. */ + PopActiveSnapshot(); CommitTransactionCommand(); StartTransactionCommand(); @@ -2499,6 +2534,8 @@ do_autovacuum(void) pg_atomic_test_set_flag(&MyWorkerInfo->wi_dobalance); } + list_free(table_oids); + /* * Perform additional work items, as requested by backends. */ @@ -2541,8 +2578,18 @@ do_autovacuum(void) /* * We leak table_toast_map here (among other things), but since we're - * going away soon, it's not a problem. + * going away soon, it's not a problem normally. But when using Valgrind, + * release some stuff to reduce complaints about leaked storage. */ +#ifdef USE_VALGRIND + hash_destroy(table_toast_map); + FreeTupleDesc(pg_class_desc); + if (bstrategy) + pfree(bstrategy); +#endif + + /* Run the rest in xact context, mainly to avoid Valgrind leak warnings */ + MemoryContextSwitchTo(TopTransactionContext); /* * Update pg_database.datfrozenxid, and truncate pg_xact if possible. We @@ -2680,8 +2727,8 @@ perform_work_item(AutoVacuumWorkItem *workitem) /* * extract_autovac_opts * - * Given a relation's pg_class tuple, return the AutoVacOpts portion of - * reloptions, if set; otherwise, return NULL. + * Given a relation's pg_class tuple, return a palloc'd copy of the + * AutoVacOpts portion of reloptions, if set; otherwise, return NULL. * * Note: callers do not have a relation lock on the table at this point, * so the table could have been dropped, and its catalog rows gone, after @@ -2730,6 +2777,7 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map, autovac_table *tab = NULL; bool wraparound; AutoVacOpts *avopts; + bool free_avopts = false; /* fetch the relation's relcache entry */ classTup = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relid)); @@ -2742,8 +2790,10 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map, * main table reloptions if the toast table itself doesn't have. */ avopts = extract_autovac_opts(classTup, pg_class_desc); - if (classForm->relkind == RELKIND_TOASTVALUE && - avopts == NULL && table_toast_map != NULL) + if (avopts) + free_avopts = true; + else if (classForm->relkind == RELKIND_TOASTVALUE && + table_toast_map != NULL) { av_relation *hentry; bool found; @@ -2852,6 +2902,8 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map, avopts->vacuum_cost_delay >= 0)); } + if (free_avopts) + pfree(avopts); heap_freetuple(classTup); return tab; } @@ -2883,6 +2935,10 @@ recheck_relation_needs_vacanalyze(Oid relid, effective_multixact_freeze_max_age, dovacuum, doanalyze, wraparound); + /* Release tabentry to avoid leakage */ + if (tabentry) + pfree(tabentry); + /* ignore ANALYZE for toast tables */ if (classForm->relkind == RELKIND_TOASTVALUE) *doanalyze = false; @@ -3140,20 +3196,24 @@ autovacuum_do_vac_analyze(autovac_table *tab, BufferAccessStrategy bstrategy) VacuumRelation *rel; List *rel_list; MemoryContext vac_context; + MemoryContext old_context; /* Let pgstat know what we're doing */ autovac_report_activity(tab); + /* Create a context that vacuum() can use as cross-transaction storage */ + vac_context = AllocSetContextCreate(CurrentMemoryContext, + "Vacuum", + ALLOCSET_DEFAULT_SIZES); + /* Set up one VacuumRelation target, identified by OID, for vacuum() */ + old_context = MemoryContextSwitchTo(vac_context); rangevar = makeRangeVar(tab->at_nspname, tab->at_relname, -1); rel = makeVacuumRelation(rangevar, tab->at_relid, NIL); rel_list = list_make1(rel); + MemoryContextSwitchTo(old_context); - vac_context = AllocSetContextCreate(CurrentMemoryContext, - "Vacuum", - ALLOCSET_DEFAULT_SIZES); - - vacuum(rel_list, &tab->at_params, bstrategy, vac_context, true); + vacuum(rel_list, tab->at_params, bstrategy, vac_context, true); MemoryContextDelete(vac_context); } diff --git a/src/backend/postmaster/auxprocess.c b/src/backend/postmaster/auxprocess.c index 4f6795f72650f..a6d3630398f4d 100644 --- a/src/backend/postmaster/auxprocess.c +++ b/src/backend/postmaster/auxprocess.c @@ -66,7 +66,7 @@ AuxiliaryProcessMainCommon(void) BaseInit(); - ProcSignalInit(false, 0); + ProcSignalInit(NULL, 0); /* * Auxiliary processes don't run transactions, but they may need a diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 116ddf7b835f1..1ad65c237c34e 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -613,6 +613,7 @@ ResetBackgroundWorkerCrashTimes(void) * resetting. */ rw->rw_crashed_at = 0; + rw->rw_pid = 0; /* * If there was anyone waiting for it, they're history. diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index fda91ffd1ce2d..e84e8663e966b 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -42,6 +42,8 @@ #include "access/xlog.h" #include "access/xlog_internal.h" #include "access/xlogrecovery.h" +#include "catalog/pg_authid.h" +#include "commands/defrem.h" #include "libpq/pqsignal.h" #include "miscadmin.h" #include "pgstat.h" @@ -61,6 +63,7 @@ #include "storage/shmem.h" #include "storage/smgr.h" #include "storage/spin.h" +#include "utils/acl.h" #include "utils/guc.h" #include "utils/memutils.h" #include "utils/resowner.h" @@ -127,6 +130,13 @@ typedef struct int num_requests; /* current # of requests */ int max_requests; /* allocated array size */ + + int head; /* Index of the first request in the ring + * buffer */ + int tail; /* Index of the last request in the ring + * buffer */ + + /* The ring buffer of pending checkpointer requests */ CheckpointerRequest requests[FLEXIBLE_ARRAY_MEMBER]; } CheckpointerShmemStruct; @@ -135,6 +145,12 @@ static CheckpointerShmemStruct *CheckpointerShmem; /* interval for calling AbsorbSyncRequests in CheckpointWriteDelay */ #define WRITES_PER_ABSORB 1000 +/* Maximum number of checkpointer requests to process in one batch */ +#define CKPT_REQ_BATCH_SIZE 10000 + +/* Max number of requests the checkpointer request queue can hold */ +#define MAX_CHECKPOINT_REQUESTS 10000000 + /* * GUC parameters */ @@ -161,7 +177,7 @@ static pg_time_t last_xlog_switch_time; static void ProcessCheckpointerInterrupts(void); static void CheckArchiveTimeout(void); static bool IsCheckpointOnSchedule(double progress); -static bool ImmediateCheckpointRequested(void); +static bool FastCheckpointRequested(void); static bool CompactCheckpointerRequestQueue(void); static void UpdateSharedMemoryConfig(void); @@ -734,12 +750,12 @@ CheckArchiveTimeout(void) } /* - * Returns true if an immediate checkpoint request is pending. (Note that - * this does not check the *current* checkpoint's IMMEDIATE flag, but whether - * there is one pending behind it.) + * Returns true if a fast checkpoint request is pending. (Note that this does + * not check the *current* checkpoint's FAST flag, but whether there is one + * pending behind it.) */ static bool -ImmediateCheckpointRequested(void) +FastCheckpointRequested(void) { volatile CheckpointerShmemStruct *cps = CheckpointerShmem; @@ -747,7 +763,7 @@ ImmediateCheckpointRequested(void) * We don't need to acquire the ckpt_lck in this case because we're only * looking at a single flag bit. */ - if (cps->ckpt_flags & CHECKPOINT_IMMEDIATE) + if (cps->ckpt_flags & CHECKPOINT_FAST) return true; return false; } @@ -760,7 +776,7 @@ ImmediateCheckpointRequested(void) * checkpoint_completion_target. * * The checkpoint request flags should be passed in; currently the only one - * examined is CHECKPOINT_IMMEDIATE, which disables delays between writes. + * examined is CHECKPOINT_FAST, which disables delays between writes. * * 'progress' is an estimate of how much of the work has been done, as a * fraction between 0.0 meaning none, and 1.0 meaning all done. @@ -778,10 +794,10 @@ CheckpointWriteDelay(int flags, double progress) * Perform the usual duties and take a nap, unless we're behind schedule, * in which case we just try to catch up as quickly as possible. */ - if (!(flags & CHECKPOINT_IMMEDIATE) && + if (!(flags & CHECKPOINT_FAST) && !ShutdownXLOGPending && !ShutdownRequestPending && - !ImmediateCheckpointRequested() && + !FastCheckpointRequested() && IsCheckpointOnSchedule(progress)) { if (ConfigReloadPending) @@ -937,11 +953,14 @@ CheckpointerShmemSize(void) Size size; /* - * Currently, the size of the requests[] array is arbitrarily set equal to - * NBuffers. This may prove too large or small ... + * The size of the requests[] array is arbitrarily set equal to NBuffers. + * But there is a cap of MAX_CHECKPOINT_REQUESTS to prevent accumulating + * too many checkpoint requests in the ring buffer. */ size = offsetof(CheckpointerShmemStruct, requests); - size = add_size(size, mul_size(NBuffers, sizeof(CheckpointerRequest))); + size = add_size(size, mul_size(Min(NBuffers, + MAX_CHECKPOINT_REQUESTS), + sizeof(CheckpointerRequest))); return size; } @@ -970,12 +989,63 @@ CheckpointerShmemInit(void) */ MemSet(CheckpointerShmem, 0, size); SpinLockInit(&CheckpointerShmem->ckpt_lck); - CheckpointerShmem->max_requests = NBuffers; + CheckpointerShmem->max_requests = Min(NBuffers, MAX_CHECKPOINT_REQUESTS); + CheckpointerShmem->head = CheckpointerShmem->tail = 0; ConditionVariableInit(&CheckpointerShmem->start_cv); ConditionVariableInit(&CheckpointerShmem->done_cv); } } +/* + * ExecCheckpoint + * Primary entry point for manual CHECKPOINT commands + * + * This is mainly a wrapper for RequestCheckpoint(). + */ +void +ExecCheckpoint(ParseState *pstate, CheckPointStmt *stmt) +{ + bool fast = true; + bool unlogged = false; + + foreach_ptr(DefElem, opt, stmt->options) + { + if (strcmp(opt->defname, "mode") == 0) + { + char *mode = defGetString(opt); + + if (strcmp(mode, "spread") == 0) + fast = false; + else if (strcmp(mode, "fast") != 0) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized MODE option \"%s\"", mode), + parser_errposition(pstate, opt->location))); + } + else if (strcmp(opt->defname, "flush_unlogged") == 0) + unlogged = defGetBoolean(opt); + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized CHECKPOINT option \"%s\"", opt->defname), + parser_errposition(pstate, opt->location))); + } + + if (!has_privs_of_role(GetUserId(), ROLE_PG_CHECKPOINT)) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + /* translator: %s is name of an SQL command (e.g., CHECKPOINT) */ + errmsg("permission denied to execute %s command", + "CHECKPOINT"), + errdetail("Only roles with privileges of the \"%s\" role may execute this command.", + "pg_checkpoint"))); + + RequestCheckpoint(CHECKPOINT_WAIT | + (fast ? CHECKPOINT_FAST : 0) | + (unlogged ? CHECKPOINT_FLUSH_UNLOGGED : 0) | + (RecoveryInProgress() ? 0 : CHECKPOINT_FORCE)); +} + /* * RequestCheckpoint * Called in backend processes to request a checkpoint @@ -983,11 +1053,11 @@ CheckpointerShmemInit(void) * flags is a bitwise OR of the following: * CHECKPOINT_IS_SHUTDOWN: checkpoint is for database shutdown. * CHECKPOINT_END_OF_RECOVERY: checkpoint is for end of WAL recovery. - * CHECKPOINT_IMMEDIATE: finish the checkpoint ASAP, + * CHECKPOINT_FAST: finish the checkpoint ASAP, * ignoring checkpoint_completion_target parameter. * CHECKPOINT_FORCE: force a checkpoint even if no XLOG activity has occurred * since the last one (implied by CHECKPOINT_IS_SHUTDOWN or - * CHECKPOINT_END_OF_RECOVERY). + * CHECKPOINT_END_OF_RECOVERY, and the CHECKPOINT command). * CHECKPOINT_WAIT: wait for completion before returning (otherwise, * just signal checkpointer to do it, and return). * CHECKPOINT_CAUSE_XLOG: checkpoint is requested due to xlog filling. @@ -1009,7 +1079,7 @@ RequestCheckpoint(int flags) * There's no point in doing slow checkpoints in a standalone backend, * because there's no other backends the checkpoint could disrupt. */ - CreateCheckPoint(flags | CHECKPOINT_IMMEDIATE); + CreateCheckPoint(flags | CHECKPOINT_FAST); /* Free all smgr objects, as CheckpointerMain() normally would. */ smgrdestroyall(); @@ -1148,6 +1218,7 @@ ForwardSyncRequest(const FileTag *ftag, SyncRequestType type) { CheckpointerRequest *request; bool too_full; + int insert_pos; if (!IsUnderPostmaster) return false; /* probably shouldn't even get here */ @@ -1171,10 +1242,14 @@ ForwardSyncRequest(const FileTag *ftag, SyncRequestType type) } /* OK, insert request */ - request = &CheckpointerShmem->requests[CheckpointerShmem->num_requests++]; + insert_pos = CheckpointerShmem->tail; + request = &CheckpointerShmem->requests[insert_pos]; request->ftag = *ftag; request->type = type; + CheckpointerShmem->tail = (CheckpointerShmem->tail + 1) % CheckpointerShmem->max_requests; + CheckpointerShmem->num_requests++; + /* If queue is more than half full, nudge the checkpointer to empty it */ too_full = (CheckpointerShmem->num_requests >= CheckpointerShmem->max_requests / 2); @@ -1216,12 +1291,16 @@ CompactCheckpointerRequestQueue(void) struct CheckpointerSlotMapping { CheckpointerRequest request; - int slot; + int ring_idx; }; - int n, - preserve_count; + int n; int num_skipped = 0; + int head; + int max_requests; + int num_requests; + int read_idx, + write_idx; HASHCTL ctl; HTAB *htab; bool *skip_slot; @@ -1233,8 +1312,13 @@ CompactCheckpointerRequestQueue(void) if (CritSectionCount > 0) return false; + max_requests = CheckpointerShmem->max_requests; + num_requests = CheckpointerShmem->num_requests; + /* Initialize skip_slot array */ - skip_slot = palloc0(sizeof(bool) * CheckpointerShmem->num_requests); + skip_slot = palloc0(sizeof(bool) * max_requests); + + head = CheckpointerShmem->head; /* Initialize temporary hash table */ ctl.keysize = sizeof(CheckpointerRequest); @@ -1258,7 +1342,8 @@ CompactCheckpointerRequestQueue(void) * away preceding entries that would end up being canceled anyhow), but * it's not clear that the extra complexity would buy us anything. */ - for (n = 0; n < CheckpointerShmem->num_requests; n++) + read_idx = head; + for (n = 0; n < num_requests; n++) { CheckpointerRequest *request; struct CheckpointerSlotMapping *slotmap; @@ -1271,16 +1356,19 @@ CompactCheckpointerRequestQueue(void) * CheckpointerShmemInit. Note also that RelFileLocator had better * contain no pad bytes. */ - request = &CheckpointerShmem->requests[n]; + request = &CheckpointerShmem->requests[read_idx]; slotmap = hash_search(htab, request, HASH_ENTER, &found); if (found) { /* Duplicate, so mark the previous occurrence as skippable */ - skip_slot[slotmap->slot] = true; + skip_slot[slotmap->ring_idx] = true; num_skipped++; } /* Remember slot containing latest occurrence of this request value */ - slotmap->slot = n; + slotmap->ring_idx = read_idx; + + /* Move to the next request in the ring buffer */ + read_idx = (read_idx + 1) % max_requests; } /* Done with the hash table. */ @@ -1294,17 +1382,34 @@ CompactCheckpointerRequestQueue(void) } /* We found some duplicates; remove them. */ - preserve_count = 0; - for (n = 0; n < CheckpointerShmem->num_requests; n++) + read_idx = write_idx = head; + for (n = 0; n < num_requests; n++) { - if (skip_slot[n]) - continue; - CheckpointerShmem->requests[preserve_count++] = CheckpointerShmem->requests[n]; + /* If this slot is NOT skipped, keep it */ + if (!skip_slot[read_idx]) + { + /* If the read and write positions are different, copy the request */ + if (write_idx != read_idx) + CheckpointerShmem->requests[write_idx] = + CheckpointerShmem->requests[read_idx]; + + /* Advance the write position */ + write_idx = (write_idx + 1) % max_requests; + } + + read_idx = (read_idx + 1) % max_requests; } + + /* + * Update ring buffer state: head remains the same, tail moves, count + * decreases + */ + CheckpointerShmem->tail = write_idx; + CheckpointerShmem->num_requests -= num_skipped; + ereport(DEBUG1, (errmsg_internal("compacted fsync request queue from %d entries to %d entries", - CheckpointerShmem->num_requests, preserve_count))); - CheckpointerShmem->num_requests = preserve_count; + num_requests, CheckpointerShmem->num_requests))); /* Cleanup. */ pfree(skip_slot); @@ -1325,40 +1430,64 @@ AbsorbSyncRequests(void) { CheckpointerRequest *requests = NULL; CheckpointerRequest *request; - int n; + int n, + i; + bool loop; if (!AmCheckpointerProcess()) return; - LWLockAcquire(CheckpointerCommLock, LW_EXCLUSIVE); - - /* - * We try to avoid holding the lock for a long time by copying the request - * array, and processing the requests after releasing the lock. - * - * Once we have cleared the requests from shared memory, we have to PANIC - * if we then fail to absorb them (eg, because our hashtable runs out of - * memory). This is because the system cannot run safely if we are unable - * to fsync what we have been told to fsync. Fortunately, the hashtable - * is so small that the problem is quite unlikely to arise in practice. - */ - n = CheckpointerShmem->num_requests; - if (n > 0) + do { - requests = (CheckpointerRequest *) palloc(n * sizeof(CheckpointerRequest)); - memcpy(requests, CheckpointerShmem->requests, n * sizeof(CheckpointerRequest)); - } + LWLockAcquire(CheckpointerCommLock, LW_EXCLUSIVE); + + /*--- + * We try to avoid holding the lock for a long time by: + * 1. Copying the request array and processing the requests after + * releasing the lock; + * 2. Processing not the whole queue, but only batches of + * CKPT_REQ_BATCH_SIZE at once. + * + * Once we have cleared the requests from shared memory, we must + * PANIC if we then fail to absorb them (e.g., because our hashtable + * runs out of memory). This is because the system cannot run safely + * if we are unable to fsync what we have been told to fsync. + * Fortunately, the hashtable is so small that the problem is quite + * unlikely to arise in practice. + * + * Note: The maximum possible size of a ring buffer is + * MAX_CHECKPOINT_REQUESTS entries, which fit into a maximum palloc + * allocation size of 1Gb. Our maximum batch size, + * CKPT_REQ_BATCH_SIZE, is even smaller. + */ + n = Min(CheckpointerShmem->num_requests, CKPT_REQ_BATCH_SIZE); + if (n > 0) + { + if (!requests) + requests = (CheckpointerRequest *) palloc(n * sizeof(CheckpointerRequest)); - START_CRIT_SECTION(); + for (i = 0; i < n; i++) + { + requests[i] = CheckpointerShmem->requests[CheckpointerShmem->head]; + CheckpointerShmem->head = (CheckpointerShmem->head + 1) % CheckpointerShmem->max_requests; + } - CheckpointerShmem->num_requests = 0; + CheckpointerShmem->num_requests -= n; - LWLockRelease(CheckpointerCommLock); + } + + START_CRIT_SECTION(); + + /* Are there any requests in the queue? If so, keep going. */ + loop = CheckpointerShmem->num_requests != 0; + + LWLockRelease(CheckpointerCommLock); - for (request = requests; n > 0; request++, n--) - RememberSyncRequest(&request->ftag, request->type); + for (request = requests; n > 0; request++, n--) + RememberSyncRequest(&request->ftag, request->type); - END_CRIT_SECTION(); + END_CRIT_SECTION(); + } while (loop); if (requests) pfree(requests); diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 7e622ae4bd2a7..78e39e5f866a7 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -718,15 +718,15 @@ pgarch_readyXlog(char *xlog) /* * Store the file in our max-heap if it has a high enough priority. */ - if (arch_files->arch_heap->bh_size < NUM_FILES_PER_DIRECTORY_SCAN) + if (binaryheap_size(arch_files->arch_heap) < NUM_FILES_PER_DIRECTORY_SCAN) { /* If the heap isn't full yet, quickly add it. */ - arch_file = arch_files->arch_filenames[arch_files->arch_heap->bh_size]; + arch_file = arch_files->arch_filenames[binaryheap_size(arch_files->arch_heap)]; strcpy(arch_file, basename); binaryheap_add_unordered(arch_files->arch_heap, CStringGetDatum(arch_file)); /* If we just filled the heap, make it a valid one. */ - if (arch_files->arch_heap->bh_size == NUM_FILES_PER_DIRECTORY_SCAN) + if (binaryheap_size(arch_files->arch_heap) == NUM_FILES_PER_DIRECTORY_SCAN) binaryheap_build(arch_files->arch_heap); } else if (ready_file_comparator(binaryheap_first(arch_files->arch_heap), @@ -744,21 +744,21 @@ pgarch_readyXlog(char *xlog) FreeDir(rldir); /* If no files were found, simply return. */ - if (arch_files->arch_heap->bh_size == 0) + if (binaryheap_empty(arch_files->arch_heap)) return false; /* * If we didn't fill the heap, we didn't make it a valid one. Do that * now. */ - if (arch_files->arch_heap->bh_size < NUM_FILES_PER_DIRECTORY_SCAN) + if (binaryheap_size(arch_files->arch_heap) < NUM_FILES_PER_DIRECTORY_SCAN) binaryheap_build(arch_files->arch_heap); /* * Fill arch_files array with the files to archive in ascending order of * priority. */ - arch_files->arch_files_size = arch_files->arch_heap->bh_size; + arch_files->arch_files_size = binaryheap_size(arch_files->arch_heap); for (int i = 0; i < arch_files->arch_files_size; i++) arch_files->arch_files[i] = DatumGetCString(binaryheap_remove_first(arch_files->arch_heap)); diff --git a/src/backend/postmaster/pmchild.c b/src/backend/postmaster/pmchild.c index cde1d23a4ca8b..584bb58c8abaf 100644 --- a/src/backend/postmaster/pmchild.c +++ b/src/backend/postmaster/pmchild.c @@ -59,6 +59,17 @@ NON_EXEC_STATIC int num_pmchild_slots = 0; */ dlist_head ActiveChildList; +/* + * Dummy pointer to persuade Valgrind that we've not leaked the array of + * PMChild structs. Make it global to ensure the compiler doesn't + * optimize it away. + */ +#ifdef USE_VALGRIND +extern PMChild *pmchild_array; +PMChild *pmchild_array; +#endif + + /* * MaxLivePostmasterChildren * @@ -125,8 +136,13 @@ InitPostmasterChildSlots(void) for (int i = 0; i < BACKEND_NUM_TYPES; i++) num_pmchild_slots += pmchild_pools[i].size; - /* Initialize them */ + /* Allocate enough slots, and make sure Valgrind doesn't complain */ slots = palloc(num_pmchild_slots * sizeof(PMChild)); +#ifdef USE_VALGRIND + pmchild_array = slots; +#endif + + /* Initialize them */ slotno = 0; for (int btype = 0; btype < BACKEND_NUM_TYPES; btype++) { diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index c966c2e83afac..e1d643b013d77 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -90,6 +90,7 @@ #endif #include "access/xlog.h" +#include "access/xlog_internal.h" #include "access/xlogrecovery.h" #include "common/file_perm.h" #include "common/pg_prng.h" @@ -853,6 +854,9 @@ PostmasterMain(int argc, char *argv[]) if (summarize_wal && wal_level == WAL_LEVEL_MINIMAL) ereport(ERROR, (errmsg("WAL cannot be summarized when \"wal_level\" is \"minimal\""))); + if (sync_replication_slots && wal_level < WAL_LEVEL_LOGICAL) + ereport(ERROR, + (errmsg("replication slot synchronization (\"sync_replication_slots\" = on) requires \"wal_level\" >= \"logical\""))); /* * Other one-time internal sanity checks can go here, if they are fast. @@ -1516,7 +1520,7 @@ checkControlFile(void) char path[MAXPGPATH]; FILE *fp; - snprintf(path, sizeof(path), "%s/global/pg_control", DataDir); + snprintf(path, sizeof(path), "%s/%s", DataDir, XLOG_CONTROL_FILE); fp = AllocateFile(path, PG_BINARY_R); if (fp == NULL) @@ -1825,8 +1829,7 @@ canAcceptConnections(BackendType backend_type) else if (!FatalError && pmState == PM_STARTUP) return CAC_STARTUP; /* normal startup */ else if (!FatalError && pmState == PM_RECOVERY) - return CAC_NOTCONSISTENT; /* not yet at consistent recovery - * state */ + return CAC_NOTHOTSTANDBY; /* not yet ready for hot standby */ else return CAC_RECOVERY; /* else must be crash recovery */ } @@ -2630,6 +2633,13 @@ CleanupBackend(PMChild *bp, } bp = NULL; + /* + * In a crash case, exit immediately without resetting background worker + * state. However, if restart_after_crash is enabled, the background + * worker state (e.g., rw_pid) still needs be reset so the worker can + * restart after crash recovery. This reset is handled in + * ResetBackgroundWorkerCrashTimes(), not here. + */ if (crashed) { HandleChildCrash(bp_pid, exitstatus, procname); @@ -2718,7 +2728,7 @@ HandleFatalError(QuitSignalReason reason, bool consider_sigabrt) /* * Choose the appropriate new state to react to the fatal error. Unless we * were already in the process of shutting down, we go through - * PM_WAIT_BACKEND. For errors during the shutdown sequence, we directly + * PM_WAIT_BACKENDS. For errors during the shutdown sequence, we directly * switch to PM_WAIT_DEAD_END. */ switch (pmState) @@ -3001,7 +3011,7 @@ PostmasterStateMachine(void) /* * Stop any dead-end children and stop creating new ones. * - * NB: Similar code exists in HandleFatalErrors(), when the + * NB: Similar code exists in HandleFatalError(), when the * error happens in pmState > PM_WAIT_BACKENDS. */ UpdatePMState(PM_WAIT_DEAD_END); @@ -3082,7 +3092,7 @@ PostmasterStateMachine(void) { /* * PM_WAIT_IO_WORKERS state ends when there's only checkpointer and - * dead_end children left. + * dead-end children left. */ if (io_worker_count == 0) { @@ -3699,6 +3709,7 @@ process_pm_pmsignal(void) /* WAL redo has started. We're out of reinitialization. */ FatalError = false; AbortStartTime = 0; + reachedConsistency = false; /* * Start the archiver if we're responsible for (re-)archiving received @@ -3724,8 +3735,14 @@ process_pm_pmsignal(void) UpdatePMState(PM_RECOVERY); } - if (CheckPostmasterSignal(PMSIGNAL_BEGIN_HOT_STANDBY) && + if (CheckPostmasterSignal(PMSIGNAL_RECOVERY_CONSISTENT) && pmState == PM_RECOVERY && Shutdown == NoShutdown) + { + reachedConsistency = true; + } + + if (CheckPostmasterSignal(PMSIGNAL_BEGIN_HOT_STANDBY) && + (pmState == PM_RECOVERY && Shutdown == NoShutdown)) { ereport(LOG, (errmsg("database system is ready to accept read-only connections"))); @@ -4330,15 +4347,15 @@ maybe_start_bgworkers(void) static bool maybe_reap_io_worker(int pid) { - for (int id = 0; id < MAX_IO_WORKERS; ++id) + for (int i = 0; i < MAX_IO_WORKERS; ++i) { - if (io_worker_children[id] && - io_worker_children[id]->pid == pid) + if (io_worker_children[i] && + io_worker_children[i]->pid == pid) { - ReleasePostmasterChildSlot(io_worker_children[id]); + ReleasePostmasterChildSlot(io_worker_children[i]); --io_worker_count; - io_worker_children[id] = NULL; + io_worker_children[i] = NULL; return true; } } @@ -4382,22 +4399,22 @@ maybe_adjust_io_workers(void) while (io_worker_count < io_workers) { PMChild *child; - int id; + int i; /* find unused entry in io_worker_children array */ - for (id = 0; id < MAX_IO_WORKERS; ++id) + for (i = 0; i < MAX_IO_WORKERS; ++i) { - if (io_worker_children[id] == NULL) + if (io_worker_children[i] == NULL) break; } - if (id == MAX_IO_WORKERS) - elog(ERROR, "could not find a free IO worker ID"); + if (i == MAX_IO_WORKERS) + elog(ERROR, "could not find a free IO worker slot"); /* Try to launch one. */ child = StartChildProcess(B_IO_WORKER); if (child != NULL) { - io_worker_children[id] = child; + io_worker_children[i] = child; ++io_worker_count; } else @@ -4408,11 +4425,11 @@ maybe_adjust_io_workers(void) if (io_worker_count > io_workers) { /* ask the IO worker in the highest slot to exit */ - for (int id = MAX_IO_WORKERS - 1; id >= 0; --id) + for (int i = MAX_IO_WORKERS - 1; i >= 0; --i) { - if (io_worker_children[id] != NULL) + if (io_worker_children[i] != NULL) { - kill(io_worker_children[id]->pid, SIGUSR2); + kill(io_worker_children[i]->pid, SIGUSR2); break; } } diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c index 0fec4f1f871ce..e1f142f20c7a0 100644 --- a/src/backend/postmaster/walsummarizer.c +++ b/src/backend/postmaster/walsummarizer.c @@ -385,7 +385,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len) switch_lsn = tliSwitchPoint(current_tli, tles, &switch_tli); ereport(DEBUG1, - errmsg_internal("switch point from TLI %u to TLI %u is at %X/%X", + errmsg_internal("switch point from TLI %u to TLI %u is at %X/%08X", current_tli, switch_tli, LSN_FORMAT_ARGS(switch_lsn))); } @@ -644,7 +644,7 @@ WakeupWalSummarizer(void) if (WalSummarizerCtl == NULL) return; - LWLockAcquire(WALSummarizerLock, LW_EXCLUSIVE); + LWLockAcquire(WALSummarizerLock, LW_SHARED); pgprocno = WalSummarizerCtl->summarizer_pgprocno; LWLockRelease(WALSummarizerLock); @@ -685,7 +685,7 @@ WaitForWalSummarization(XLogRecPtr lsn) /* * If the LSN summarized on disk has reached the target value, stop. */ - LWLockAcquire(WALSummarizerLock, LW_EXCLUSIVE); + LWLockAcquire(WALSummarizerLock, LW_SHARED); summarized_lsn = WalSummarizerCtl->summarized_lsn; pending_lsn = WalSummarizerCtl->pending_lsn; LWLockRelease(WALSummarizerLock); @@ -741,7 +741,7 @@ WaitForWalSummarization(XLogRecPtr lsn) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("WAL summarization is not progressing"), - errdetail("Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory.", + errdetail("Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory.", LSN_FORMAT_ARGS(lsn), LSN_FORMAT_ARGS(summarized_lsn), LSN_FORMAT_ARGS(pending_lsn)))); @@ -755,12 +755,12 @@ WaitForWalSummarization(XLogRecPtr lsn) current_time) / 1000; ereport(WARNING, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg_plural("still waiting for WAL summarization through %X/%X after %ld second", - "still waiting for WAL summarization through %X/%X after %ld seconds", + errmsg_plural("still waiting for WAL summarization through %X/%08X after %ld second", + "still waiting for WAL summarization through %X/%08X after %ld seconds", elapsed_seconds, LSN_FORMAT_ARGS(lsn), elapsed_seconds), - errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.", + errdetail("Summarization has reached %X/%08X on disk and %X/%08X in memory.", LSN_FORMAT_ARGS(summarized_lsn), LSN_FORMAT_ARGS(pending_lsn)))); } @@ -981,7 +981,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, if (private_data->end_of_wal) { ereport(DEBUG1, - errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X", + errmsg_internal("could not read WAL from timeline %u at %X/%08X: end of WAL at %X/%08X", tli, LSN_FORMAT_ARGS(start_lsn), LSN_FORMAT_ARGS(private_data->read_upto))); @@ -1000,8 +1000,8 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, } else ereport(ERROR, - (errmsg("could not find a valid record after %X/%X", - LSN_FORMAT_ARGS(start_lsn)))); + errmsg("could not find a valid record after %X/%08X", + LSN_FORMAT_ARGS(start_lsn))); } /* We shouldn't go backward. */ @@ -1034,7 +1034,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, * able to read a complete record. */ ereport(DEBUG1, - errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X", + errmsg_internal("could not read WAL from timeline %u at %X/%08X: end of WAL at %X/%08X", tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr), LSN_FORMAT_ARGS(private_data->read_upto))); @@ -1045,13 +1045,13 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, if (errormsg) ereport(ERROR, (errcode_for_file_access(), - errmsg("could not read WAL from timeline %u at %X/%X: %s", + errmsg("could not read WAL from timeline %u at %X/%08X: %s", tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr), errormsg))); else ereport(ERROR, (errcode_for_file_access(), - errmsg("could not read WAL from timeline %u at %X/%X", + errmsg("could not read WAL from timeline %u at %X/%08X", tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr)))); } @@ -1222,7 +1222,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, /* Tell the user what we did. */ ereport(DEBUG1, - errmsg_internal("summarized WAL on TLI %u from %X/%X to %X/%X", + errmsg_internal("summarized WAL on TLI %u from %X/%08X to %X/%08X", tli, LSN_FORMAT_ARGS(summary_start_lsn), LSN_FORMAT_ARGS(summary_end_lsn))); @@ -1234,7 +1234,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, /* If we skipped a non-zero amount of WAL, log a debug message. */ if (summary_end_lsn > summary_start_lsn && fast_forward) ereport(DEBUG1, - errmsg_internal("skipped summarizing WAL on TLI %u from %X/%X to %X/%X", + errmsg_internal("skipped summarizing WAL on TLI %u from %X/%08X to %X/%08X", tli, LSN_FORMAT_ARGS(summary_start_lsn), LSN_FORMAT_ARGS(summary_end_lsn))); @@ -1580,7 +1580,7 @@ summarizer_read_local_xlog_page(XLogReaderState *state, /* Debugging output. */ ereport(DEBUG1, - errmsg_internal("timeline %u became historic, can read up to %X/%X", + errmsg_internal("timeline %u became historic, can read up to %X/%08X", private_data->tli, LSN_FORMAT_ARGS(private_data->read_upto))); } diff --git a/src/backend/regex/regc_pg_locale.c b/src/backend/regex/regc_pg_locale.c index ed7411df83d20..d9eab5357bc38 100644 --- a/src/backend/regex/regc_pg_locale.c +++ b/src/backend/regex/regc_pg_locale.c @@ -20,61 +20,13 @@ #include "common/unicode_category.h" #include "utils/pg_locale.h" -/* - * To provide as much functionality as possible on a variety of platforms, - * without going so far as to implement everything from scratch, we use - * several implementation strategies depending on the situation: - * - * 1. In C/POSIX collations, we use hard-wired code. We can't depend on - * the functions since those will obey LC_CTYPE. Note that these - * collations don't give a fig about multibyte characters. - * - * 2. In the "default" collation (which is supposed to obey LC_CTYPE): - * - * 2a. When working in UTF8 encoding, we use the functions. - * This assumes that every platform uses Unicode codepoints directly - * as the wchar_t representation of Unicode. On some platforms - * wchar_t is only 16 bits wide, so we have to punt for codepoints > 0xFFFF. - * - * 2b. In all other encodings, we use the functions for pg_wchar - * values up to 255, and punt for values above that. This is 100% correct - * only in single-byte encodings such as LATINn. However, non-Unicode - * multibyte encodings are mostly Far Eastern character sets for which the - * properties being tested here aren't very relevant for higher code values - * anyway. The difficulty with using the functions with - * non-Unicode multibyte encodings is that we can have no certainty that - * the platform's wchar_t representation matches what we do in pg_wchar - * conversions. - * - * 3. Here, we use the locale_t-extended forms of the and - * functions, under exactly the same cases as #2. - * - * There is one notable difference between cases 2 and 3: in the "default" - * collation we force ASCII letters to follow ASCII upcase/downcase rules, - * while in a non-default collation we just let the library functions do what - * they will. The case where this matters is treatment of I/i in Turkish, - * and the behavior is meant to match the upper()/lower() SQL functions. - * - * We store the active collation setting in static variables. In principle - * it could be passed down to here via the regex library's "struct vars" data - * structure; but that would require somewhat invasive changes in the regex - * library, and right now there's no real benefit to be gained from that. - * - * NB: the coding here assumes pg_wchar is an unsigned type. - */ - -typedef enum -{ - PG_REGEX_STRATEGY_C, /* C locale (encoding independent) */ - PG_REGEX_STRATEGY_BUILTIN, /* built-in Unicode semantics */ - PG_REGEX_STRATEGY_LIBC_WIDE, /* Use locale_t functions */ - PG_REGEX_STRATEGY_LIBC_1BYTE, /* Use locale_t functions */ - PG_REGEX_STRATEGY_ICU, /* Use ICU uchar.h functions */ -} PG_Locale_Strategy; - -static PG_Locale_Strategy pg_regex_strategy; static pg_locale_t pg_regex_locale; +static struct pg_locale_struct dummy_c_locale = { + .collate_is_c = true, + .ctype_is_c = true, +}; + /* * Hard-wired character properties for C locale */ @@ -231,7 +183,6 @@ void pg_set_regex_collation(Oid collation) { pg_locale_t locale = 0; - PG_Locale_Strategy strategy; if (!OidIsValid(collation)) { @@ -252,8 +203,7 @@ pg_set_regex_collation(Oid collation) * catalog access is available, so we can't call * pg_newlocale_from_collation(). */ - strategy = PG_REGEX_STRATEGY_C; - locale = 0; + locale = &dummy_c_locale; } else { @@ -270,113 +220,41 @@ pg_set_regex_collation(Oid collation) * C/POSIX collations use this path regardless of database * encoding */ - strategy = PG_REGEX_STRATEGY_C; - locale = 0; - } - else if (locale->provider == COLLPROVIDER_BUILTIN) - { - Assert(GetDatabaseEncoding() == PG_UTF8); - strategy = PG_REGEX_STRATEGY_BUILTIN; - } -#ifdef USE_ICU - else if (locale->provider == COLLPROVIDER_ICU) - { - strategy = PG_REGEX_STRATEGY_ICU; - } -#endif - else - { - Assert(locale->provider == COLLPROVIDER_LIBC); - if (GetDatabaseEncoding() == PG_UTF8) - strategy = PG_REGEX_STRATEGY_LIBC_WIDE; - else - strategy = PG_REGEX_STRATEGY_LIBC_1BYTE; + locale = &dummy_c_locale; } } - pg_regex_strategy = strategy; pg_regex_locale = locale; } static int pg_wc_isdigit(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISDIGIT)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isdigit(c, !pg_regex_locale->info.builtin.casemap_full); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswdigit_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isdigit_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isdigit(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISDIGIT)); + else + return pg_regex_locale->ctype->wc_isdigit(c, pg_regex_locale); } static int pg_wc_isalpha(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISALPHA)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isalpha(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswalpha_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isalpha_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isalpha(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISALPHA)); + else + return pg_regex_locale->ctype->wc_isalpha(c, pg_regex_locale); } static int pg_wc_isalnum(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISALNUM)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isalnum(c, !pg_regex_locale->info.builtin.casemap_full); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswalnum_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isalnum_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isalnum(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISALNUM)); + else + return pg_regex_locale->ctype->wc_isalnum(c, pg_regex_locale); } static int @@ -391,219 +269,87 @@ pg_wc_isword(pg_wchar c) static int pg_wc_isupper(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISUPPER)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isupper(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswupper_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isupper_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isupper(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISUPPER)); + else + return pg_regex_locale->ctype->wc_isupper(c, pg_regex_locale); } static int pg_wc_islower(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISLOWER)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_islower(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswlower_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - islower_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_islower(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISLOWER)); + else + return pg_regex_locale->ctype->wc_islower(c, pg_regex_locale); } static int pg_wc_isgraph(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISGRAPH)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isgraph(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswgraph_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isgraph_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isgraph(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISGRAPH)); + else + return pg_regex_locale->ctype->wc_isgraph(c, pg_regex_locale); } static int pg_wc_isprint(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISPRINT)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isprint(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswprint_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isprint_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isprint(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISPRINT)); + else + return pg_regex_locale->ctype->wc_isprint(c, pg_regex_locale); } static int pg_wc_ispunct(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISPUNCT)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_ispunct(c, !pg_regex_locale->info.builtin.casemap_full); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswpunct_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - ispunct_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_ispunct(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISPUNCT)); + else + return pg_regex_locale->ctype->wc_ispunct(c, pg_regex_locale); } static int pg_wc_isspace(pg_wchar c) { - switch (pg_regex_strategy) - { - case PG_REGEX_STRATEGY_C: - return (c <= (pg_wchar) 127 && - (pg_char_properties[c] & PG_ISSPACE)); - case PG_REGEX_STRATEGY_BUILTIN: - return pg_u_isspace(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return iswspace_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - return (c <= (pg_wchar) UCHAR_MAX && - isspace_l((unsigned char) c, pg_regex_locale->info.lt)); - break; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_isspace(c); -#endif - break; - } - return 0; /* can't get here, but keep compiler quiet */ + if (pg_regex_locale->ctype_is_c) + return (c <= (pg_wchar) 127 && + (pg_char_properties[c] & PG_ISSPACE)); + else + return pg_regex_locale->ctype->wc_isspace(c, pg_regex_locale); } static pg_wchar pg_wc_toupper(pg_wchar c) { - switch (pg_regex_strategy) + if (pg_regex_locale->ctype_is_c) { - case PG_REGEX_STRATEGY_C: - if (c <= (pg_wchar) 127) - return pg_ascii_toupper((unsigned char) c); - return c; - case PG_REGEX_STRATEGY_BUILTIN: - return unicode_uppercase_simple(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return towupper_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - if (c <= (pg_wchar) UCHAR_MAX) - return toupper_l((unsigned char) c, pg_regex_locale->info.lt); - return c; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_toupper(c); -#endif - break; + if (c <= (pg_wchar) 127) + return pg_ascii_toupper((unsigned char) c); + return c; } - return 0; /* can't get here, but keep compiler quiet */ + else + return pg_regex_locale->ctype->wc_toupper(c, pg_regex_locale); } static pg_wchar pg_wc_tolower(pg_wchar c) { - switch (pg_regex_strategy) + if (pg_regex_locale->ctype_is_c) { - case PG_REGEX_STRATEGY_C: - if (c <= (pg_wchar) 127) - return pg_ascii_tolower((unsigned char) c); - return c; - case PG_REGEX_STRATEGY_BUILTIN: - return unicode_lowercase_simple(c); - case PG_REGEX_STRATEGY_LIBC_WIDE: - if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) - return towlower_l((wint_t) c, pg_regex_locale->info.lt); - /* FALL THRU */ - case PG_REGEX_STRATEGY_LIBC_1BYTE: - if (c <= (pg_wchar) UCHAR_MAX) - return tolower_l((unsigned char) c, pg_regex_locale->info.lt); - return c; - case PG_REGEX_STRATEGY_ICU: -#ifdef USE_ICU - return u_tolower(c); -#endif - break; + if (c <= (pg_wchar) 127) + return pg_ascii_tolower((unsigned char) c); + return c; } - return 0; /* can't get here, but keep compiler quiet */ + else + return pg_regex_locale->ctype->wc_tolower(c, pg_regex_locale); } @@ -729,37 +475,25 @@ pg_ctype_get_cache(pg_wc_probefunc probefunc, int cclasscode) * would always be true for production values of MAX_SIMPLE_CHR, but it's * useful to allow it to be small for testing purposes.) */ - switch (pg_regex_strategy) + if (pg_regex_locale->ctype_is_c) { - case PG_REGEX_STRATEGY_C: #if MAX_SIMPLE_CHR >= 127 - max_chr = (pg_wchar) 127; - pcc->cv.cclasscode = -1; + max_chr = (pg_wchar) 127; + pcc->cv.cclasscode = -1; #else - max_chr = (pg_wchar) MAX_SIMPLE_CHR; + max_chr = (pg_wchar) MAX_SIMPLE_CHR; #endif - break; - case PG_REGEX_STRATEGY_BUILTIN: - max_chr = (pg_wchar) MAX_SIMPLE_CHR; - break; - case PG_REGEX_STRATEGY_LIBC_WIDE: - max_chr = (pg_wchar) MAX_SIMPLE_CHR; - break; - case PG_REGEX_STRATEGY_LIBC_1BYTE: -#if MAX_SIMPLE_CHR >= UCHAR_MAX - max_chr = (pg_wchar) UCHAR_MAX; + } + else + { + if (pg_regex_locale->ctype->max_chr != 0 && + pg_regex_locale->ctype->max_chr <= MAX_SIMPLE_CHR) + { + max_chr = pg_regex_locale->ctype->max_chr; pcc->cv.cclasscode = -1; -#else - max_chr = (pg_wchar) MAX_SIMPLE_CHR; -#endif - break; - case PG_REGEX_STRATEGY_ICU: + } + else max_chr = (pg_wchar) MAX_SIMPLE_CHR; - break; - default: - Assert(false); - max_chr = 0; /* can't get here, but keep compiler quiet */ - break; } /* diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index ee3101c093ec1..239641bfbb66a 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -25,6 +25,7 @@ #include "common/connect.h" #include "funcapi.h" #include "libpq-fe.h" +#include "libpq/libpq-be-fe-helpers.h" #include "mb/pg_wchar.h" #include "miscadmin.h" #include "pgstat.h" @@ -113,8 +114,6 @@ static WalReceiverFunctionsType PQWalReceiverFunctions = { }; /* Prototypes for private functions */ -static PGresult *libpqrcv_PQexec(PGconn *streamConn, const char *query); -static PGresult *libpqrcv_PQgetResult(PGconn *streamConn); static char *stringlist_to_identifierstr(PGconn *conn, List *strings); /* @@ -148,7 +147,6 @@ libpqrcv_connect(const char *conninfo, bool replication, bool logical, bool must_use_password, const char *appname, char **err) { WalReceiverConn *conn; - PostgresPollingStatusType status; const char *keys[6]; const char *vals[6]; int i = 0; @@ -214,56 +212,17 @@ libpqrcv_connect(const char *conninfo, bool replication, bool logical, Assert(i < lengthof(keys)); conn = palloc0(sizeof(WalReceiverConn)); - conn->streamConn = PQconnectStartParams(keys, vals, - /* expand_dbname = */ true); - if (PQstatus(conn->streamConn) == CONNECTION_BAD) - goto bad_connection_errmsg; - - /* - * Poll connection until we have OK or FAILED status. - * - * Per spec for PQconnectPoll, first wait till socket is write-ready. - */ - status = PGRES_POLLING_WRITING; - do - { - int io_flag; - int rc; - - if (status == PGRES_POLLING_READING) - io_flag = WL_SOCKET_READABLE; -#ifdef WIN32 - /* Windows needs a different test while waiting for connection-made */ - else if (PQstatus(conn->streamConn) == CONNECTION_STARTED) - io_flag = WL_SOCKET_CONNECTED; -#endif - else - io_flag = WL_SOCKET_WRITEABLE; - - rc = WaitLatchOrSocket(MyLatch, - WL_EXIT_ON_PM_DEATH | WL_LATCH_SET | io_flag, - PQsocket(conn->streamConn), - 0, - WAIT_EVENT_LIBPQWALRECEIVER_CONNECT); - - /* Interrupted? */ - if (rc & WL_LATCH_SET) - { - ResetLatch(MyLatch); - ProcessWalRcvInterrupts(); - } - - /* If socket is ready, advance the libpq state machine */ - if (rc & io_flag) - status = PQconnectPoll(conn->streamConn); - } while (status != PGRES_POLLING_OK && status != PGRES_POLLING_FAILED); + conn->streamConn = + libpqsrv_connect_params(keys, vals, + /* expand_dbname = */ true, + WAIT_EVENT_LIBPQWALRECEIVER_CONNECT); if (PQstatus(conn->streamConn) != CONNECTION_OK) goto bad_connection_errmsg; if (must_use_password && !PQconnectionUsedPassword(conn->streamConn)) { - PQfinish(conn->streamConn); + libpqsrv_disconnect(conn->streamConn); pfree(conn); ereport(ERROR, @@ -273,6 +232,9 @@ libpqrcv_connect(const char *conninfo, bool replication, bool logical, errhint("Target server's authentication method must be changed, or set password_required=false in the subscription parameters."))); } + PQsetNoticeReceiver(conn->streamConn, libpqsrv_notice_receiver, + "received message via replication"); + /* * Set always-secure search path for the cases where the connection is * used to run SQL queries, so malicious users can't get control. @@ -281,8 +243,9 @@ libpqrcv_connect(const char *conninfo, bool replication, bool logical, { PGresult *res; - res = libpqrcv_PQexec(conn->streamConn, - ALWAYS_SECURE_SEARCH_PATH_SQL); + res = libpqsrv_exec(conn->streamConn, + ALWAYS_SECURE_SEARCH_PATH_SQL, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (PQresultStatus(res) != PGRES_TUPLES_OK) { PQclear(res); @@ -303,7 +266,7 @@ libpqrcv_connect(const char *conninfo, bool replication, bool logical, /* error path, error already set */ bad_connection: - PQfinish(conn->streamConn); + libpqsrv_disconnect(conn->streamConn); pfree(conn); return NULL; } @@ -454,33 +417,26 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli) * Get the system identifier and timeline ID as a DataRow message from the * primary server. */ - res = libpqrcv_PQexec(conn->streamConn, "IDENTIFY_SYSTEM"); + res = libpqsrv_exec(conn->streamConn, + "IDENTIFY_SYSTEM", + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (PQresultStatus(res) != PGRES_TUPLES_OK) - { - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("could not receive database system identifier and timeline ID from " "the primary server: %s", pchomp(PQerrorMessage(conn->streamConn))))); - } /* * IDENTIFY_SYSTEM returns 3 columns in 9.3 and earlier, and 4 columns in * 9.4 and onwards. */ if (PQnfields(res) < 3 || PQntuples(res) != 1) - { - int ntuples = PQntuples(res); - int nfields = PQnfields(res); - - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("invalid response from primary server"), errdetail("Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields.", - ntuples, nfields, 1, 3))); - } + PQntuples(res), PQnfields(res), 1, 3))); primary_sysid = pstrdup(PQgetvalue(res, 0, 0)); *primary_tli = pg_strtoint32(PQgetvalue(res, 0, 1)); PQclear(res); @@ -572,7 +528,7 @@ libpqrcv_startstreaming(WalReceiverConn *conn, if (options->logical) appendStringInfoString(&cmd, " LOGICAL"); - appendStringInfo(&cmd, " %X/%X", LSN_FORMAT_ARGS(options->startpoint)); + appendStringInfo(&cmd, " %X/%08X", LSN_FORMAT_ARGS(options->startpoint)); /* * Additional options are different depending on if we are doing logical @@ -631,7 +587,9 @@ libpqrcv_startstreaming(WalReceiverConn *conn, options->proto.physical.startpointTLI); /* Start streaming. */ - res = libpqrcv_PQexec(conn->streamConn, cmd.data); + res = libpqsrv_exec(conn->streamConn, + cmd.data, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); pfree(cmd.data); if (PQresultStatus(res) == PGRES_COMMAND_OK) @@ -640,13 +598,10 @@ libpqrcv_startstreaming(WalReceiverConn *conn, return false; } else if (PQresultStatus(res) != PGRES_COPY_BOTH) - { - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("could not start WAL streaming: %s", pchomp(PQerrorMessage(conn->streamConn))))); - } PQclear(res); return true; } @@ -661,7 +616,7 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) PGresult *res; /* - * Send copy-end message. As in libpqrcv_PQexec, this could theoretically + * Send copy-end message. As in libpqsrv_exec, this could theoretically * block, but the risk seems small. */ if (PQputCopyEnd(conn->streamConn, NULL) <= 0 || @@ -681,7 +636,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) * If we had not yet received CopyDone from the backend, PGRES_COPY_OUT is * also possible in case we aborted the copy in mid-stream. */ - res = libpqrcv_PQgetResult(conn->streamConn); + res = libpqsrv_get_result(conn->streamConn, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (PQresultStatus(res) == PGRES_TUPLES_OK) { /* @@ -696,7 +652,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) PQclear(res); /* the result set should be followed by CommandComplete */ - res = libpqrcv_PQgetResult(conn->streamConn); + res = libpqsrv_get_result(conn->streamConn, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); } else if (PQresultStatus(res) == PGRES_COPY_OUT) { @@ -710,7 +667,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) pchomp(PQerrorMessage(conn->streamConn))))); /* CommandComplete should follow */ - res = libpqrcv_PQgetResult(conn->streamConn); + res = libpqsrv_get_result(conn->streamConn, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); } if (PQresultStatus(res) != PGRES_COMMAND_OK) @@ -721,7 +679,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) PQclear(res); /* Verify that there are no more results */ - res = libpqrcv_PQgetResult(conn->streamConn); + res = libpqsrv_get_result(conn->streamConn, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (res != NULL) ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), @@ -746,28 +705,21 @@ libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn, * Request the primary to send over the history file for given timeline. */ snprintf(cmd, sizeof(cmd), "TIMELINE_HISTORY %u", tli); - res = libpqrcv_PQexec(conn->streamConn, cmd); + res = libpqsrv_exec(conn->streamConn, + cmd, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (PQresultStatus(res) != PGRES_TUPLES_OK) - { - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("could not receive timeline history file from " "the primary server: %s", pchomp(PQerrorMessage(conn->streamConn))))); - } if (PQnfields(res) != 2 || PQntuples(res) != 1) - { - int ntuples = PQntuples(res); - int nfields = PQnfields(res); - - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("invalid response from primary server"), errdetail("Expected 1 tuple with 2 fields, got %d tuples with %d fields.", - ntuples, nfields))); - } + PQntuples(res), PQnfields(res)))); *filename = pstrdup(PQgetvalue(res, 0, 0)); *len = PQgetlength(res, 0, 1); @@ -776,114 +728,13 @@ libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn, PQclear(res); } -/* - * Send a query and wait for the results by using the asynchronous libpq - * functions and socket readiness events. - * - * The function is modeled on libpqsrv_exec(), with the behavior difference - * being that it calls ProcessWalRcvInterrupts(). As an optimization, it - * skips try/catch, since all errors terminate the process. - * - * May return NULL, rather than an error result, on failure. - */ -static PGresult * -libpqrcv_PQexec(PGconn *streamConn, const char *query) -{ - PGresult *lastResult = NULL; - - /* - * PQexec() silently discards any prior query results on the connection. - * This is not required for this function as it's expected that the caller - * (which is this library in all cases) will behave correctly and we don't - * have to be backwards compatible with old libpq. - */ - - /* - * Submit the query. Since we don't use non-blocking mode, this could - * theoretically block. In practice, since we don't send very long query - * strings, the risk seems negligible. - */ - if (!PQsendQuery(streamConn, query)) - return NULL; - - for (;;) - { - /* Wait for, and collect, the next PGresult. */ - PGresult *result; - - result = libpqrcv_PQgetResult(streamConn); - if (result == NULL) - break; /* query is complete, or failure */ - - /* - * Emulate PQexec()'s behavior of returning the last result when there - * are many. We are fine with returning just last error message. - */ - PQclear(lastResult); - lastResult = result; - - if (PQresultStatus(lastResult) == PGRES_COPY_IN || - PQresultStatus(lastResult) == PGRES_COPY_OUT || - PQresultStatus(lastResult) == PGRES_COPY_BOTH || - PQstatus(streamConn) == CONNECTION_BAD) - break; - } - - return lastResult; -} - -/* - * Perform the equivalent of PQgetResult(), but watch for interrupts. - */ -static PGresult * -libpqrcv_PQgetResult(PGconn *streamConn) -{ - /* - * Collect data until PQgetResult is ready to get the result without - * blocking. - */ - while (PQisBusy(streamConn)) - { - int rc; - - /* - * We don't need to break down the sleep into smaller increments, - * since we'll get interrupted by signals and can handle any - * interrupts here. - */ - rc = WaitLatchOrSocket(MyLatch, - WL_EXIT_ON_PM_DEATH | WL_SOCKET_READABLE | - WL_LATCH_SET, - PQsocket(streamConn), - 0, - WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); - - /* Interrupted? */ - if (rc & WL_LATCH_SET) - { - ResetLatch(MyLatch); - ProcessWalRcvInterrupts(); - } - - /* Consume whatever data is available from the socket */ - if (PQconsumeInput(streamConn) == 0) - { - /* trouble; return NULL */ - return NULL; - } - } - - /* Now we can collect and return the next PGresult */ - return PQgetResult(streamConn); -} - /* * Disconnect connection to primary, if any. */ static void libpqrcv_disconnect(WalReceiverConn *conn) { - PQfinish(conn->streamConn); + libpqsrv_disconnect(conn->streamConn); PQfreemem(conn->recvBuf); pfree(conn); } @@ -937,13 +788,15 @@ libpqrcv_receive(WalReceiverConn *conn, char **buffer, { PGresult *res; - res = libpqrcv_PQgetResult(conn->streamConn); + res = libpqsrv_get_result(conn->streamConn, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); /* Verify that there are no more results. */ - res = libpqrcv_PQgetResult(conn->streamConn); + res = libpqsrv_get_result(conn->streamConn, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); if (res != NULL) { PQclear(res); @@ -970,13 +823,10 @@ libpqrcv_receive(WalReceiverConn *conn, char **buffer, return -1; } else - { - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("could not receive data from WAL stream: %s", pchomp(PQerrorMessage(conn->streamConn))))); - } } if (rawlen < -1) ereport(ERROR, @@ -1094,17 +944,16 @@ libpqrcv_create_slot(WalReceiverConn *conn, const char *slotname, appendStringInfoString(&cmd, " PHYSICAL RESERVE_WAL"); } - res = libpqrcv_PQexec(conn->streamConn, cmd.data); + res = libpqsrv_exec(conn->streamConn, + cmd.data, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); pfree(cmd.data); if (PQresultStatus(res) != PGRES_TUPLES_OK) - { - PQclear(res); ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("could not create replication slot \"%s\": %s", slotname, pchomp(PQerrorMessage(conn->streamConn))))); - } if (lsn) *lsn = DatumGetLSN(DirectFunctionCall1Coll(pg_lsn_in, InvalidOid, @@ -1139,7 +988,7 @@ libpqrcv_alter_slot(WalReceiverConn *conn, const char *slotname, *failover ? "true" : "false"); if (failover && two_phase) - appendStringInfo(&cmd, ", "); + appendStringInfoString(&cmd, ", "); if (two_phase) appendStringInfo(&cmd, "TWO_PHASE %s", @@ -1147,7 +996,8 @@ libpqrcv_alter_slot(WalReceiverConn *conn, const char *slotname, appendStringInfoString(&cmd, " );"); - res = libpqrcv_PQexec(conn->streamConn, cmd.data); + res = libpqsrv_exec(conn->streamConn, cmd.data, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); pfree(cmd.data); if (PQresultStatus(res) != PGRES_COMMAND_OK) @@ -1214,7 +1064,7 @@ libpqrcv_processTuples(PGresult *pgres, WalRcvExecResult *walres, { char *cstrs[MaxTupleAttributeNumber]; - ProcessWalRcvInterrupts(); + CHECK_FOR_INTERRUPTS(); /* Do the allocations in temporary context. */ oldcontext = MemoryContextSwitchTo(rowcontext); @@ -1260,7 +1110,9 @@ libpqrcv_exec(WalReceiverConn *conn, const char *query, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("the query interface requires a database connection"))); - pgres = libpqrcv_PQexec(conn->streamConn, query); + pgres = libpqsrv_exec(conn->streamConn, + query, + WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE); switch (PQresultStatus(pgres)) { diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c index d25085d351535..31a92d1a24abd 100644 --- a/src/backend/replication/logical/applyparallelworker.c +++ b/src/backend/replication/logical/applyparallelworker.c @@ -441,7 +441,8 @@ pa_launch_parallel_worker(void) MySubscription->name, MyLogicalRepWorker->userid, InvalidOid, - dsm_segment_handle(winfo->dsm_seg)); + dsm_segment_handle(winfo->dsm_seg), + false); if (launched) { @@ -777,10 +778,10 @@ LogicalParallelApplyLoop(shm_mq_handle *mqh) /* * The first byte of messages sent from leader apply worker to - * parallel apply workers can only be 'w'. + * parallel apply workers can only be PqReplMsg_WALData. */ c = pq_getmsgbyte(&s); - if (c != 'w') + if (c != PqReplMsg_WALData) elog(ERROR, "unexpected message \"%c\"", c); /* @@ -1006,7 +1007,7 @@ ProcessParallelApplyMessage(StringInfo msg) switch (msgtype) { - case 'E': /* ErrorResponse */ + case PqMsg_ErrorResponse: { ErrorData edata; @@ -1043,11 +1044,11 @@ ProcessParallelApplyMessage(StringInfo msg) /* * Don't need to do anything about NoticeResponse and - * NotifyResponse as the logical replication worker doesn't need - * to send messages to the client. + * NotificationResponse as the logical replication worker doesn't + * need to send messages to the client. */ - case 'N': - case 'A': + case PqMsg_NoticeResponse: + case PqMsg_NotificationResponse: break; default: diff --git a/src/backend/replication/logical/conflict.c b/src/backend/replication/logical/conflict.c index f1e92f2fc1a35..166955922650f 100644 --- a/src/backend/replication/logical/conflict.c +++ b/src/backend/replication/logical/conflict.c @@ -29,6 +29,7 @@ static const char *const ConflictTypeNames[] = { [CT_UPDATE_EXISTS] = "update_exists", [CT_UPDATE_MISSING] = "update_missing", [CT_DELETE_ORIGIN_DIFFERS] = "delete_origin_differs", + [CT_UPDATE_DELETED] = "update_deleted", [CT_DELETE_MISSING] = "delete_missing", [CT_MULTIPLE_UNIQUE_CONFLICTS] = "multiple_unique_conflicts" }; @@ -54,7 +55,7 @@ static char *build_index_value_desc(EState *estate, Relation localrel, /* * Get the xmin and commit timestamp data (origin and timestamp) associated - * with the provided local tuple. + * with the provided local row. * * Return true if the commit timestamp data was found, false otherwise. */ @@ -88,12 +89,12 @@ GetTupleTransactionInfo(TupleTableSlot *localslot, TransactionId *xmin, * This function is used to report a conflict while applying replication * changes. * - * 'searchslot' should contain the tuple used to search the local tuple to be + * 'searchslot' should contain the tuple used to search the local row to be * updated or deleted. * * 'remoteslot' should contain the remote new tuple, if any. * - * conflicttuples is a list of local tuples that caused the conflict and the + * conflicttuples is a list of local rows that caused the conflict and the * conflict related information. See ConflictTupleInfo. * * The caller must ensure that all the indexes passed in ConflictTupleInfo are @@ -176,6 +177,7 @@ errcode_apply_conflict(ConflictType type) case CT_UPDATE_ORIGIN_DIFFERS: case CT_UPDATE_MISSING: case CT_DELETE_ORIGIN_DIFFERS: + case CT_UPDATE_DELETED: case CT_DELETE_MISSING: return errcode(ERRCODE_T_R_SERIALIZATION_FAILURE); } @@ -189,9 +191,9 @@ errcode_apply_conflict(ConflictType type) * * The DETAIL line comprises of two parts: * 1. Explanation of the conflict type, including the origin and commit - * timestamp of the existing local tuple. - * 2. Display of conflicting key, existing local tuple, remote new tuple, and - * replica identity columns, if any. The remote old tuple is excluded as its + * timestamp of the existing local row. + * 2. Display of conflicting key, existing local row, remote new row, and + * replica identity columns, if any. The remote old row is excluded as its * information is covered in the replica identity columns. */ static void @@ -261,8 +263,28 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo, break; + case CT_UPDATE_DELETED: + if (localts) + { + if (localorigin == InvalidRepOriginId) + appendStringInfo(&err_detail, _("The row to be updated was deleted locally in transaction %u at %s."), + localxmin, timestamptz_to_str(localts)); + else if (replorigin_by_oid(localorigin, true, &origin_name)) + appendStringInfo(&err_detail, _("The row to be updated was deleted by a different origin \"%s\" in transaction %u at %s."), + origin_name, localxmin, timestamptz_to_str(localts)); + + /* The origin that modified this row has been removed. */ + else + appendStringInfo(&err_detail, _("The row to be updated was deleted by a non-existent origin in transaction %u at %s."), + localxmin, timestamptz_to_str(localts)); + } + else + appendStringInfo(&err_detail, _("The row to be updated was deleted.")); + + break; + case CT_UPDATE_MISSING: - appendStringInfo(&err_detail, _("Could not find the row to be updated.")); + appendStringInfoString(&err_detail, _("Could not find the row to be updated.")); break; case CT_DELETE_ORIGIN_DIFFERS: @@ -281,7 +303,7 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo, break; case CT_DELETE_MISSING: - appendStringInfo(&err_detail, _("Could not find the row to be deleted.")); + appendStringInfoString(&err_detail, _("Could not find the row to be deleted.")); break; } @@ -291,7 +313,7 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo, localslot, remoteslot, indexoid); /* - * Next, append the key values, existing local tuple, remote tuple and + * Next, append the key values, existing local row, remote row, and * replica identity columns after the message. */ if (val_desc) @@ -304,12 +326,12 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo, if (err_msg->len > 0) appendStringInfoChar(err_msg, '\n'); - appendStringInfo(err_msg, "%s", err_detail.data); + appendStringInfoString(err_msg, err_detail.data); } /* * Helper function to build the additional details for conflicting key, - * existing local tuple, remote tuple, and replica identity columns. + * existing local row, remote row, and replica identity columns. * * If the return value is NULL, it indicates that the current user lacks * permissions to view the columns involved. @@ -351,7 +373,7 @@ build_tuple_value_details(EState *estate, ResultRelInfo *relinfo, { /* * The 'modifiedCols' only applies to the new tuple, hence we pass - * NULL for the existing local tuple. + * NULL for the existing local row. */ desc = ExecBuildSlotValueDescription(relid, localslot, tupdesc, NULL, 64); @@ -361,12 +383,12 @@ build_tuple_value_details(EState *estate, ResultRelInfo *relinfo, if (tuple_value.len > 0) { appendStringInfoString(&tuple_value, "; "); - appendStringInfo(&tuple_value, _("existing local tuple %s"), + appendStringInfo(&tuple_value, _("existing local row %s"), desc); } else { - appendStringInfo(&tuple_value, _("Existing local tuple %s"), + appendStringInfo(&tuple_value, _("Existing local row %s"), desc); } } @@ -393,11 +415,11 @@ build_tuple_value_details(EState *estate, ResultRelInfo *relinfo, if (tuple_value.len > 0) { appendStringInfoString(&tuple_value, "; "); - appendStringInfo(&tuple_value, _("remote tuple %s"), desc); + appendStringInfo(&tuple_value, _("remote row %s"), desc); } else { - appendStringInfo(&tuple_value, _("Remote tuple %s"), desc); + appendStringInfo(&tuple_value, _("Remote row %s"), desc); } } } diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 78f9a0a11c4bb..cc03f0706e9c8 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -412,19 +412,24 @@ heap2_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) /* * If we don't have snapshot or we are just fast-forwarding, there is no - * point in decoding changes. + * point in decoding data changes. However, it's crucial to build the base + * snapshot during fast-forward mode (as is done in + * SnapBuildProcessChange()) because we require the snapshot's xmin when + * determining the candidate catalog_xmin for the replication slot. See + * SnapBuildProcessRunningXacts(). */ - if (SnapBuildCurrentState(builder) < SNAPBUILD_FULL_SNAPSHOT || - ctx->fast_forward) + if (SnapBuildCurrentState(builder) < SNAPBUILD_FULL_SNAPSHOT) return; switch (info) { case XLOG_HEAP2_MULTI_INSERT: - if (SnapBuildProcessChange(builder, xid, buf->origptr)) + if (SnapBuildProcessChange(builder, xid, buf->origptr) && + !ctx->fast_forward) DecodeMultiInsert(ctx, buf); break; case XLOG_HEAP2_NEW_CID: + if (!ctx->fast_forward) { xl_heap_new_cid *xlrec; @@ -471,16 +476,20 @@ heap_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) /* * If we don't have snapshot or we are just fast-forwarding, there is no - * point in decoding data changes. + * point in decoding data changes. However, it's crucial to build the base + * snapshot during fast-forward mode (as is done in + * SnapBuildProcessChange()) because we require the snapshot's xmin when + * determining the candidate catalog_xmin for the replication slot. See + * SnapBuildProcessRunningXacts(). */ - if (SnapBuildCurrentState(builder) < SNAPBUILD_FULL_SNAPSHOT || - ctx->fast_forward) + if (SnapBuildCurrentState(builder) < SNAPBUILD_FULL_SNAPSHOT) return; switch (info) { case XLOG_HEAP_INSERT: - if (SnapBuildProcessChange(builder, xid, buf->origptr)) + if (SnapBuildProcessChange(builder, xid, buf->origptr) && + !ctx->fast_forward) DecodeInsert(ctx, buf); break; @@ -491,17 +500,20 @@ heap_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) */ case XLOG_HEAP_HOT_UPDATE: case XLOG_HEAP_UPDATE: - if (SnapBuildProcessChange(builder, xid, buf->origptr)) + if (SnapBuildProcessChange(builder, xid, buf->origptr) && + !ctx->fast_forward) DecodeUpdate(ctx, buf); break; case XLOG_HEAP_DELETE: - if (SnapBuildProcessChange(builder, xid, buf->origptr)) + if (SnapBuildProcessChange(builder, xid, buf->origptr) && + !ctx->fast_forward) DecodeDelete(ctx, buf); break; case XLOG_HEAP_TRUNCATE: - if (SnapBuildProcessChange(builder, xid, buf->origptr)) + if (SnapBuildProcessChange(builder, xid, buf->origptr) && + !ctx->fast_forward) DecodeTruncate(ctx, buf); break; @@ -525,7 +537,8 @@ heap_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) break; case XLOG_HEAP_CONFIRM: - if (SnapBuildProcessChange(builder, xid, buf->origptr)) + if (SnapBuildProcessChange(builder, xid, buf->origptr) && + !ctx->fast_forward) DecodeSpecConfirm(ctx, buf); break; diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 10677da56b2b6..37377f7eb636c 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -32,6 +32,7 @@ #include "postmaster/interrupt.h" #include "replication/logicallauncher.h" #include "replication/origin.h" +#include "replication/slot.h" #include "replication/walreceiver.h" #include "replication/worker_internal.h" #include "storage/ipc.h" @@ -91,7 +92,6 @@ static dshash_table *last_start_times = NULL; static bool on_commit_launcher_wakeup = false; -static void ApplyLauncherWakeup(void); static void logicalrep_launcher_onexit(int code, Datum arg); static void logicalrep_worker_onexit(int code, Datum arg); static void logicalrep_worker_detach(void); @@ -100,6 +100,9 @@ static int logicalrep_pa_worker_count(Oid subid); static void logicalrep_launcher_attach_dshmem(void); static void ApplyLauncherSetWorkerStartTime(Oid subid, TimestampTz start_time); static TimestampTz ApplyLauncherGetWorkerStartTime(Oid subid); +static void compute_min_nonremovable_xid(LogicalRepWorker *worker, TransactionId *xmin); +static bool acquire_conflict_slot_if_exists(void); +static void advance_conflict_slot_xmin(TransactionId new_xmin); /* @@ -148,6 +151,7 @@ get_subscription_list(void) sub->owner = subform->subowner; sub->enabled = subform->subenabled; sub->name = pstrdup(NameStr(subform->subname)); + sub->retaindeadtuples = subform->subretaindeadtuples; /* We don't fill fields we are not interested in. */ res = lappend(res, sub); @@ -175,12 +179,14 @@ WaitForReplicationWorkerAttach(LogicalRepWorker *worker, uint16 generation, BackgroundWorkerHandle *handle) { - BgwHandleStatus status; - int rc; + bool result = false; + bool dropped_latch = false; for (;;) { + BgwHandleStatus status; pid_t pid; + int rc; CHECK_FOR_INTERRUPTS(); @@ -189,8 +195,9 @@ WaitForReplicationWorkerAttach(LogicalRepWorker *worker, /* Worker either died or has started. Return false if died. */ if (!worker->in_use || worker->proc) { + result = worker->in_use; LWLockRelease(LogicalRepWorkerLock); - return worker->in_use; + break; } LWLockRelease(LogicalRepWorkerLock); @@ -205,7 +212,7 @@ WaitForReplicationWorkerAttach(LogicalRepWorker *worker, if (generation == worker->generation) logicalrep_worker_cleanup(worker); LWLockRelease(LogicalRepWorkerLock); - return false; + break; /* result is already false */ } /* @@ -220,8 +227,18 @@ WaitForReplicationWorkerAttach(LogicalRepWorker *worker, { ResetLatch(MyLatch); CHECK_FOR_INTERRUPTS(); + dropped_latch = true; } } + + /* + * If we had to clear a latch event in order to wait, be sure to restore + * it before exiting. Otherwise caller may miss events. + */ + if (dropped_latch) + SetLatch(MyLatch); + + return result; } /* @@ -296,7 +313,8 @@ logicalrep_workers_find(Oid subid, bool only_running, bool acquire_lock) bool logicalrep_worker_launch(LogicalRepWorkerType wtype, Oid dbid, Oid subid, const char *subname, Oid userid, - Oid relid, dsm_handle subworker_dsm) + Oid relid, dsm_handle subworker_dsm, + bool retain_dead_tuples) { BackgroundWorker bgw; BackgroundWorkerHandle *bgw_handle; @@ -315,10 +333,13 @@ logicalrep_worker_launch(LogicalRepWorkerType wtype, * - must be valid worker type * - tablesync workers are only ones to have relid * - parallel apply worker is the only kind of subworker + * - The replication slot used in conflict detection is created when + * retain_dead_tuples is enabled */ Assert(wtype != WORKERTYPE_UNKNOWN); Assert(is_tablesync_worker == OidIsValid(relid)); Assert(is_parallel_apply_worker == (subworker_dsm != DSM_HANDLE_INVALID)); + Assert(!retain_dead_tuples || MyReplicationSlot); ereport(DEBUG1, (errmsg_internal("starting logical replication worker for subscription \"%s\"", @@ -328,7 +349,7 @@ logicalrep_worker_launch(LogicalRepWorkerType wtype, if (max_active_replication_origins == 0) ereport(ERROR, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), - errmsg("cannot start logical replication workers when \"max_active_replication_origins\"=0"))); + errmsg("cannot start logical replication workers when \"max_active_replication_origins\" is 0"))); /* * We need to do the modification of the shared memory under lock so that @@ -441,6 +462,9 @@ logicalrep_worker_launch(LogicalRepWorkerType wtype, worker->stream_fileset = NULL; worker->leader_pid = is_parallel_apply_worker ? MyProcPid : InvalidPid; worker->parallel_apply = is_parallel_apply_worker; + worker->oldest_nonremovable_xid = retain_dead_tuples + ? MyReplicationSlot->data.xmin + : InvalidTransactionId; worker->last_lsn = InvalidXLogRecPtr; TIMESTAMP_NOBEGIN(worker->last_send_time); TIMESTAMP_NOBEGIN(worker->last_recv_time); @@ -766,6 +790,8 @@ logicalrep_worker_detach(void) } LWLockRelease(LogicalRepWorkerLock); + + list_free(workers); } /* Block concurrent access. */ @@ -1016,7 +1042,7 @@ logicalrep_launcher_attach_dshmem(void) last_start_times_dsa = dsa_attach(LogicalRepCtx->last_start_dsa); dsa_pin_mapping(last_start_times_dsa); last_start_times = dshash_attach(last_start_times_dsa, &dsh_params, - LogicalRepCtx->last_start_dsh, 0); + LogicalRepCtx->last_start_dsh, NULL); } MemoryContextSwitchTo(oldcontext); @@ -1105,7 +1131,10 @@ ApplyLauncherWakeupAtCommit(void) on_commit_launcher_wakeup = true; } -static void +/* + * Wakeup the launcher immediately. + */ +void ApplyLauncherWakeup(void) { if (LogicalRepCtx->launcher_pid != 0) @@ -1137,6 +1166,12 @@ ApplyLauncherMain(Datum main_arg) */ BackgroundWorkerInitializeConnection(NULL, NULL, 0); + /* + * Acquire the conflict detection slot at startup to ensure it can be + * dropped if no longer needed after a restart. + */ + acquire_conflict_slot_if_exists(); + /* Enter main loop */ for (;;) { @@ -1146,6 +1181,9 @@ ApplyLauncherMain(Datum main_arg) MemoryContext subctx; MemoryContext oldctx; long wait_time = DEFAULT_NAPTIME_PER_CYCLE; + bool can_advance_xmin = true; + bool retain_dead_tuples = false; + TransactionId xmin = InvalidTransactionId; CHECK_FOR_INTERRUPTS(); @@ -1155,7 +1193,14 @@ ApplyLauncherMain(Datum main_arg) ALLOCSET_DEFAULT_SIZES); oldctx = MemoryContextSwitchTo(subctx); - /* Start any missing workers for enabled subscriptions. */ + /* + * Start any missing workers for enabled subscriptions. + * + * Also, during the iteration through all subscriptions, we compute + * the minimum XID required to protect deleted tuples for conflict + * detection if one of the subscription enables retain_dead_tuples + * option. + */ sublist = get_subscription_list(); foreach(lc, sublist) { @@ -1165,6 +1210,38 @@ ApplyLauncherMain(Datum main_arg) TimestampTz now; long elapsed; + if (sub->retaindeadtuples) + { + retain_dead_tuples = true; + + /* + * Can't advance xmin of the slot unless all the subscriptions + * with retain_dead_tuples are enabled. This is required to + * ensure that we don't advance the xmin of + * CONFLICT_DETECTION_SLOT if one of the subscriptions is not + * enabled. Otherwise, we won't be able to detect conflicts + * reliably for such a subscription even though it has set the + * retain_dead_tuples option. + */ + can_advance_xmin &= sub->enabled; + + /* + * Create a replication slot to retain information necessary + * for conflict detection such as dead tuples, commit + * timestamps, and origins. + * + * The slot is created before starting the apply worker to + * prevent it from unnecessarily maintaining its + * oldest_nonremovable_xid. + * + * The slot is created even for a disabled subscription to + * ensure that conflict-related information is available when + * applying remote changes that occurred before the + * subscription was enabled. + */ + CreateConflictDetectionSlot(); + } + if (!sub->enabled) continue; @@ -1173,7 +1250,27 @@ ApplyLauncherMain(Datum main_arg) LWLockRelease(LogicalRepWorkerLock); if (w != NULL) - continue; /* worker is running already */ + { + /* + * Compute the minimum xmin required to protect dead tuples + * required for conflict detection among all running apply + * workers that enables retain_dead_tuples. + */ + if (sub->retaindeadtuples && can_advance_xmin) + compute_min_nonremovable_xid(w, &xmin); + + /* worker is running already */ + continue; + } + + /* + * Can't advance xmin of the slot unless all the workers + * corresponding to subscriptions with retain_dead_tuples are + * running, disabling the further computation of the minimum + * nonremovable xid. + */ + if (sub->retaindeadtuples) + can_advance_xmin = false; /* * If the worker is eligible to start now, launch it. Otherwise, @@ -1194,10 +1291,22 @@ ApplyLauncherMain(Datum main_arg) (elapsed = TimestampDifferenceMilliseconds(last_start, now)) >= wal_retrieve_retry_interval) { ApplyLauncherSetWorkerStartTime(sub->oid, now); - logicalrep_worker_launch(WORKERTYPE_APPLY, - sub->dbid, sub->oid, sub->name, - sub->owner, InvalidOid, - DSM_HANDLE_INVALID); + if (!logicalrep_worker_launch(WORKERTYPE_APPLY, + sub->dbid, sub->oid, sub->name, + sub->owner, InvalidOid, + DSM_HANDLE_INVALID, + sub->retaindeadtuples)) + { + /* + * We get here either if we failed to launch a worker + * (perhaps for resource-exhaustion reasons) or if we + * launched one but it immediately quit. Either way, it + * seems appropriate to try again after + * wal_retrieve_retry_interval. + */ + wait_time = Min(wait_time, + wal_retrieve_retry_interval); + } } else { @@ -1206,6 +1315,20 @@ ApplyLauncherMain(Datum main_arg) } } + /* + * Drop the CONFLICT_DETECTION_SLOT slot if there is no subscription + * that requires us to retain dead tuples. Otherwise, if required, + * advance the slot's xmin to protect dead tuples required for the + * conflict detection. + */ + if (MyReplicationSlot) + { + if (!retain_dead_tuples) + ReplicationSlotDropAcquired(); + else if (can_advance_xmin) + advance_conflict_slot_xmin(xmin); + } + /* Switch back to original memory context. */ MemoryContextSwitchTo(oldctx); /* Clean the temporary memory. */ @@ -1233,6 +1356,125 @@ ApplyLauncherMain(Datum main_arg) /* Not reachable */ } +/* + * Determine the minimum non-removable transaction ID across all apply workers + * for subscriptions that have retain_dead_tuples enabled. Store the result + * in *xmin. + */ +static void +compute_min_nonremovable_xid(LogicalRepWorker *worker, TransactionId *xmin) +{ + TransactionId nonremovable_xid; + + Assert(worker != NULL); + + /* + * The replication slot for conflict detection must be created before the + * worker starts. + */ + Assert(MyReplicationSlot); + + SpinLockAcquire(&worker->relmutex); + nonremovable_xid = worker->oldest_nonremovable_xid; + SpinLockRelease(&worker->relmutex); + + Assert(TransactionIdIsValid(nonremovable_xid)); + + if (!TransactionIdIsValid(*xmin) || + TransactionIdPrecedes(nonremovable_xid, *xmin)) + *xmin = nonremovable_xid; +} + +/* + * Acquire the replication slot used to retain information for conflict + * detection, if it exists. + * + * Return true if successfully acquired, otherwise return false. + */ +static bool +acquire_conflict_slot_if_exists(void) +{ + if (!SearchNamedReplicationSlot(CONFLICT_DETECTION_SLOT, true)) + return false; + + ReplicationSlotAcquire(CONFLICT_DETECTION_SLOT, true, false); + return true; +} + +/* + * Advance the xmin the replication slot used to retain information required + * for conflict detection. + */ +static void +advance_conflict_slot_xmin(TransactionId new_xmin) +{ + Assert(MyReplicationSlot); + Assert(TransactionIdIsValid(new_xmin)); + Assert(TransactionIdPrecedesOrEquals(MyReplicationSlot->data.xmin, new_xmin)); + + /* Return if the xmin value of the slot cannot be advanced */ + if (TransactionIdEquals(MyReplicationSlot->data.xmin, new_xmin)) + return; + + SpinLockAcquire(&MyReplicationSlot->mutex); + MyReplicationSlot->effective_xmin = new_xmin; + MyReplicationSlot->data.xmin = new_xmin; + SpinLockRelease(&MyReplicationSlot->mutex); + + elog(DEBUG1, "updated xmin: %u", MyReplicationSlot->data.xmin); + + ReplicationSlotMarkDirty(); + ReplicationSlotsComputeRequiredXmin(false); + + /* + * Like PhysicalConfirmReceivedLocation(), do not save slot information + * each time. This is acceptable because all concurrent transactions on + * the publisher that require the data preceding the slot's xmin should + * have already been applied and flushed on the subscriber before the xmin + * is advanced. So, even if the slot's xmin regresses after a restart, it + * will be advanced again in the next cycle. Therefore, no data required + * for conflict detection will be prematurely removed. + */ + return; +} + +/* + * Create and acquire the replication slot used to retain information for + * conflict detection, if not yet. + */ +void +CreateConflictDetectionSlot(void) +{ + TransactionId xmin_horizon; + + /* Exit early, if the replication slot is already created and acquired */ + if (MyReplicationSlot) + return; + + ereport(LOG, + errmsg("creating replication conflict detection slot")); + + ReplicationSlotCreate(CONFLICT_DETECTION_SLOT, false, RS_PERSISTENT, false, + false, false); + + LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); + + xmin_horizon = GetOldestSafeDecodingTransactionId(false); + + SpinLockAcquire(&MyReplicationSlot->mutex); + MyReplicationSlot->effective_xmin = xmin_horizon; + MyReplicationSlot->data.xmin = xmin_horizon; + SpinLockRelease(&MyReplicationSlot->mutex); + + ReplicationSlotsComputeRequiredXmin(true); + + LWLockRelease(ProcArrayLock); + + /* Write this slot to disk */ + ReplicationSlotMarkDirty(); + ReplicationSlotSave(); +} + /* * Is current process the logical replication launcher? */ diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index a8d2e024d3444..7e363a7c05b4f 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -29,6 +29,7 @@ #include "postgres.h" #include "access/xact.h" +#include "access/xlog_internal.h" #include "access/xlogutils.h" #include "fmgr.h" #include "miscadmin.h" @@ -41,6 +42,7 @@ #include "storage/proc.h" #include "storage/procarray.h" #include "utils/builtins.h" +#include "utils/injection_point.h" #include "utils/inval.h" #include "utils/memutils.h" @@ -565,7 +567,7 @@ CreateDecodingContext(XLogRecPtr start_lsn, * kinds of client errors; so the client may wish to check that * confirmed_flush_lsn matches its expectations. */ - elog(LOG, "%X/%X has been already streamed, forwarding to %X/%X", + elog(LOG, "%X/%08X has been already streamed, forwarding to %X/%08X", LSN_FORMAT_ARGS(start_lsn), LSN_FORMAT_ARGS(slot->data.confirmed_flush)); @@ -608,7 +610,7 @@ CreateDecodingContext(XLogRecPtr start_lsn, ereport(LOG, (errmsg("starting logical decoding for slot \"%s\"", NameStr(slot->data.name)), - errdetail("Streaming transactions committing after %X/%X, reading WAL from %X/%X.", + errdetail("Streaming transactions committing after %X/%08X, reading WAL from %X/%08X.", LSN_FORMAT_ARGS(slot->data.confirmed_flush), LSN_FORMAT_ARGS(slot->data.restart_lsn)))); @@ -635,7 +637,7 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx) /* Initialize from where to start reading WAL. */ XLogBeginRead(ctx->reader, slot->data.restart_lsn); - elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%X", + elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%08X", LSN_FORMAT_ARGS(slot->data.restart_lsn)); /* Wait for a consistent starting point */ @@ -756,7 +758,7 @@ output_plugin_error_callback(void *arg) /* not all callbacks have an associated LSN */ if (state->report_location != InvalidXLogRecPtr) - errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X", + errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X", NameStr(state->ctx->slot->data.name), NameStr(state->ctx->slot->data.plugin), state->callback_name, @@ -1723,7 +1725,7 @@ LogicalIncreaseXminForSlot(XLogRecPtr current_lsn, TransactionId xmin) SpinLockRelease(&slot->mutex); if (got_new_xmin) - elog(DEBUG1, "got new catalog xmin %u at %X/%X", xmin, + elog(DEBUG1, "got new catalog xmin %u at %X/%08X", xmin, LSN_FORMAT_ARGS(current_lsn)); /* candidate already valid with the current flush position, apply */ @@ -1783,7 +1785,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart slot->candidate_restart_lsn = restart_lsn; SpinLockRelease(&slot->mutex); - elog(DEBUG1, "got new restart lsn %X/%X at %X/%X", + elog(DEBUG1, "got new restart lsn %X/%08X at %X/%08X", LSN_FORMAT_ARGS(restart_lsn), LSN_FORMAT_ARGS(current_lsn)); } @@ -1798,7 +1800,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart confirmed_flush = slot->data.confirmed_flush; SpinLockRelease(&slot->mutex); - elog(DEBUG1, "failed to increase restart lsn: proposed %X/%X, after %X/%X, current candidate %X/%X, current after %X/%X, flushed up to %X/%X", + elog(DEBUG1, "failed to increase restart lsn: proposed %X/%08X, after %X/%08X, current candidate %X/%08X, current after %X/%08X, flushed up to %X/%08X", LSN_FORMAT_ARGS(restart_lsn), LSN_FORMAT_ARGS(current_lsn), LSN_FORMAT_ARGS(candidate_restart_lsn), @@ -1825,10 +1827,26 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) { bool updated_xmin = false; bool updated_restart = false; + XLogRecPtr restart_lsn pg_attribute_unused(); SpinLockAcquire(&MyReplicationSlot->mutex); - MyReplicationSlot->data.confirmed_flush = lsn; + /* remember the old restart lsn */ + restart_lsn = MyReplicationSlot->data.restart_lsn; + + /* + * Prevent moving the confirmed_flush backwards, as this could lead to + * data duplication issues caused by replicating already replicated + * changes. + * + * This can happen when a client acknowledges an LSN it doesn't have + * to do anything for, and thus didn't store persistently. After a + * restart, the client can send the prior LSN that it stored + * persistently as an acknowledgement, but we need to ignore such an + * LSN. See similar case handling in CreateDecodingContext. + */ + if (lsn > MyReplicationSlot->data.confirmed_flush) + MyReplicationSlot->data.confirmed_flush = lsn; /* if we're past the location required for bumping xmin, do so */ if (MyReplicationSlot->candidate_xmin_lsn != InvalidXLogRecPtr && @@ -1869,6 +1887,18 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) /* first write new xmin to disk, so we know what's up after a crash */ if (updated_xmin || updated_restart) { +#ifdef USE_INJECTION_POINTS + XLogSegNo seg1, + seg2; + + XLByteToSeg(restart_lsn, seg1, wal_segment_size); + XLByteToSeg(MyReplicationSlot->data.restart_lsn, seg2, wal_segment_size); + + /* trigger injection point, but only if segment changes */ + if (seg1 != seg2) + INJECTION_POINT("logical-replication-slot-advance-segment", NULL); +#endif + ReplicationSlotMarkDirty(); ReplicationSlotSave(); elog(DEBUG1, "updated xmin: %u restart: %u", updated_xmin, updated_restart); @@ -1893,7 +1923,14 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) else { SpinLockAcquire(&MyReplicationSlot->mutex); - MyReplicationSlot->data.confirmed_flush = lsn; + + /* + * Prevent moving the confirmed_flush backwards. See comments above + * for the details. + */ + if (lsn > MyReplicationSlot->data.confirmed_flush) + MyReplicationSlot->data.confirmed_flush = lsn; + SpinLockRelease(&MyReplicationSlot->mutex); } } diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index 6583dd497da21..87f10e50dcc4d 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -264,6 +264,18 @@ replorigin_create(const char *roname) SysScanDesc scan; ScanKeyData key; + /* + * To avoid needing a TOAST table for pg_replication_origin, we limit + * replication origin names to 512 bytes. This should be more than enough + * for all practical use. + */ + if (strlen(roname) > MAX_RONAME_LEN) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("replication origin name is too long"), + errdetail("Replication origin names must be no longer than %d bytes.", + MAX_RONAME_LEN))); + roname_d = CStringGetTextDatum(roname); Assert(IsTransactionState()); @@ -287,6 +299,17 @@ replorigin_create(const char *roname) rel = table_open(ReplicationOriginRelationId, ExclusiveLock); + /* + * We want to be able to access pg_replication_origin without setting up a + * snapshot. To make that safe, it needs to not have a TOAST table, since + * TOASTed data cannot be fetched without a snapshot. As of this writing, + * its only varlena column is roname, which we limit to 512 bytes to avoid + * needing out-of-line storage. If you add a TOAST table to this catalog, + * be sure to set up a snapshot everywhere it might be needed. For more + * information, see https://postgr.es/m/ZvMSUPOqUU-VNADN%40nathan. + */ + Assert(!OidIsValid(rel->rd_rel->reltoastrelid)); + for (roident = InvalidOid + 1; roident < PG_UINT16_MAX; roident++) { bool nulls[Natts_pg_replication_origin]; @@ -803,9 +826,9 @@ StartupReplicationOrigin(void) last_state++; ereport(LOG, - (errmsg("recovered replication state of node %d to %X/%X", - disk_state.roident, - LSN_FORMAT_ARGS(disk_state.remote_lsn)))); + errmsg("recovered replication state of node %d to %X/%08X", + disk_state.roident, + LSN_FORMAT_ARGS(disk_state.remote_lsn))); } /* now check checksum */ diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c index 1a352b542dc56..1b3d9eb49dd70 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -809,7 +809,7 @@ logicalrep_write_tuple(StringInfo out, Relation rel, TupleTableSlot *slot, continue; } - if (att->attlen == -1 && VARATT_IS_EXTERNAL_ONDISK(values[i])) + if (att->attlen == -1 && VARATT_IS_EXTERNAL_ONDISK(DatumGetPointer(values[i]))) { /* * Unchanged toasted datum. (Note that we don't promise to detect diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 46d15b824e380..f59046ad620da 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -238,7 +238,7 @@ logicalrep_get_attrs_str(LogicalRepRelation *remoterel, Bitmapset *atts) { attcnt++; if (attcnt > 1) - appendStringInfo(&attsbuf, _(", ")); + appendStringInfoString(&attsbuf, _(", ")); appendStringInfo(&attsbuf, _("\"%s\""), remoterel->attnames[i]); } diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 977fbcd247417..34cf05668ae84 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -109,10 +109,22 @@ #include "storage/procarray.h" #include "storage/sinval.h" #include "utils/builtins.h" +#include "utils/inval.h" #include "utils/memutils.h" #include "utils/rel.h" #include "utils/relfilenumbermap.h" +/* + * Each transaction has an 8MB limit for invalidation messages distributed from + * other transactions. This limit is set considering scenarios with many + * concurrent logical decoding operations. When the distributed invalidation + * messages reach this threshold, the transaction is marked as + * RBTXN_DISTR_INVAL_OVERFLOWED to invalidate the complete cache as we have lost + * some inval messages and hence don't know what needs to be invalidated. + */ +#define MAX_DISTR_INVAL_MSG_PER_TXN \ + ((8 * 1024 * 1024) / sizeof(SharedInvalidationMessage)) + /* entry for a hash table we use to map from xid to our transaction state */ typedef struct ReorderBufferTXNByIdEnt { @@ -472,6 +484,12 @@ ReorderBufferFreeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) txn->invalidations = NULL; } + if (txn->invalidations_distributed) + { + pfree(txn->invalidations_distributed); + txn->invalidations_distributed = NULL; + } + /* Reset the toast hash */ ReorderBufferToastReset(rb, txn); @@ -1397,7 +1415,7 @@ ReorderBufferIterTXNNext(ReorderBuffer *rb, ReorderBufferIterTXNState *state) int32 off; /* nothing there anymore */ - if (state->heap->bh_size == 0) + if (binaryheap_empty(state->heap)) return NULL; off = DatumGetInt32(binaryheap_first(state->heap)); @@ -2581,7 +2599,7 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, if (++changes_count >= CHANGES_THRESHOLD) { - rb->update_progress_txn(rb, txn, change->lsn); + rb->update_progress_txn(rb, txn, prev_lsn); changes_count = 0; } } @@ -2661,7 +2679,17 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, AbortCurrentTransaction(); /* make sure there's no cache pollution */ - ReorderBufferExecuteInvalidations(txn->ninvalidations, txn->invalidations); + if (rbtxn_distr_inval_overflowed(txn)) + { + Assert(txn->ninvalidations_distributed == 0); + InvalidateSystemCaches(); + } + else + { + ReorderBufferExecuteInvalidations(txn->ninvalidations, txn->invalidations); + ReorderBufferExecuteInvalidations(txn->ninvalidations_distributed, + txn->invalidations_distributed); + } if (using_subtxn) RollbackAndReleaseCurrentSubTransaction(); @@ -2710,8 +2738,17 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, AbortCurrentTransaction(); /* make sure there's no cache pollution */ - ReorderBufferExecuteInvalidations(txn->ninvalidations, - txn->invalidations); + if (rbtxn_distr_inval_overflowed(txn)) + { + Assert(txn->ninvalidations_distributed == 0); + InvalidateSystemCaches(); + } + else + { + ReorderBufferExecuteInvalidations(txn->ninvalidations, txn->invalidations); + ReorderBufferExecuteInvalidations(txn->ninvalidations_distributed, + txn->invalidations_distributed); + } if (using_subtxn) RollbackAndReleaseCurrentSubTransaction(); @@ -3060,7 +3097,8 @@ ReorderBufferAbort(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn, * We might have decoded changes for this transaction that could load * the cache as per the current transaction's view (consider DDL's * happened in this transaction). We don't want the decoding of future - * transactions to use those cache entries so execute invalidations. + * transactions to use those cache entries so execute only the inval + * messages in this transaction. */ if (txn->ninvalidations > 0) ReorderBufferImmediateInvalidation(rb, txn->ninvalidations, @@ -3147,9 +3185,10 @@ ReorderBufferForget(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn) txn->final_lsn = lsn; /* - * Process cache invalidation messages if there are any. Even if we're not - * interested in the transaction's contents, it could have manipulated the - * catalog and we need to update the caches according to that. + * Process only cache invalidation messages in this transaction if there + * are any. Even if we're not interested in the transaction's contents, it + * could have manipulated the catalog and we need to update the caches + * according to that. */ if (txn->base_snapshot != NULL && txn->ninvalidations > 0) ReorderBufferImmediateInvalidation(rb, txn->ninvalidations, @@ -3421,6 +3460,57 @@ ReorderBufferAddNewTupleCids(ReorderBuffer *rb, TransactionId xid, txn->ntuplecids++; } +/* + * Add new invalidation messages to the reorder buffer queue. + */ +static void +ReorderBufferQueueInvalidations(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, Size nmsgs, + SharedInvalidationMessage *msgs) +{ + ReorderBufferChange *change; + + change = ReorderBufferAllocChange(rb); + change->action = REORDER_BUFFER_CHANGE_INVALIDATION; + change->data.inval.ninvalidations = nmsgs; + change->data.inval.invalidations = (SharedInvalidationMessage *) + palloc(sizeof(SharedInvalidationMessage) * nmsgs); + memcpy(change->data.inval.invalidations, msgs, + sizeof(SharedInvalidationMessage) * nmsgs); + + ReorderBufferQueueChange(rb, xid, lsn, change, false); +} + +/* + * A helper function for ReorderBufferAddInvalidations() and + * ReorderBufferAddDistributedInvalidations() to accumulate the invalidation + * messages to the **invals_out. + */ +static void +ReorderBufferAccumulateInvalidations(SharedInvalidationMessage **invals_out, + uint32 *ninvals_out, + SharedInvalidationMessage *msgs_new, + Size nmsgs_new) +{ + if (*ninvals_out == 0) + { + *ninvals_out = nmsgs_new; + *invals_out = (SharedInvalidationMessage *) + palloc(sizeof(SharedInvalidationMessage) * nmsgs_new); + memcpy(*invals_out, msgs_new, sizeof(SharedInvalidationMessage) * nmsgs_new); + } + else + { + /* Enlarge the array of inval messages */ + *invals_out = (SharedInvalidationMessage *) + repalloc(*invals_out, sizeof(SharedInvalidationMessage) * + (*ninvals_out + nmsgs_new)); + memcpy(*invals_out + *ninvals_out, msgs_new, + nmsgs_new * sizeof(SharedInvalidationMessage)); + *ninvals_out += nmsgs_new; + } +} + /* * Accumulate the invalidations for executing them later. * @@ -3441,7 +3531,6 @@ ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, { ReorderBufferTXN *txn; MemoryContext oldcontext; - ReorderBufferChange *change; txn = ReorderBufferTXNByXid(rb, xid, true, NULL, lsn, true); @@ -3456,35 +3545,76 @@ ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, Assert(nmsgs > 0); - /* Accumulate invalidations. */ - if (txn->ninvalidations == 0) - { - txn->ninvalidations = nmsgs; - txn->invalidations = (SharedInvalidationMessage *) - palloc(sizeof(SharedInvalidationMessage) * nmsgs); - memcpy(txn->invalidations, msgs, - sizeof(SharedInvalidationMessage) * nmsgs); - } - else + ReorderBufferAccumulateInvalidations(&txn->invalidations, + &txn->ninvalidations, + msgs, nmsgs); + + ReorderBufferQueueInvalidations(rb, xid, lsn, nmsgs, msgs); + + MemoryContextSwitchTo(oldcontext); +} + +/* + * Accumulate the invalidations distributed by other committed transactions + * for executing them later. + * + * This function is similar to ReorderBufferAddInvalidations() but stores + * the given inval messages to the txn->invalidations_distributed with the + * overflow check. + * + * This needs to be called by committed transactions to distribute their + * inval messages to in-progress transactions. + */ +void +ReorderBufferAddDistributedInvalidations(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, Size nmsgs, + SharedInvalidationMessage *msgs) +{ + ReorderBufferTXN *txn; + MemoryContext oldcontext; + + txn = ReorderBufferTXNByXid(rb, xid, true, NULL, lsn, true); + + oldcontext = MemoryContextSwitchTo(rb->context); + + /* + * Collect all the invalidations under the top transaction, if available, + * so that we can execute them all together. See comments + * ReorderBufferAddInvalidations. + */ + txn = rbtxn_get_toptxn(txn); + + Assert(nmsgs > 0); + + if (!rbtxn_distr_inval_overflowed(txn)) { - txn->invalidations = (SharedInvalidationMessage *) - repalloc(txn->invalidations, sizeof(SharedInvalidationMessage) * - (txn->ninvalidations + nmsgs)); + /* + * Check the transaction has enough space for storing distributed + * invalidation messages. + */ + if (txn->ninvalidations_distributed + nmsgs >= MAX_DISTR_INVAL_MSG_PER_TXN) + { + /* + * Mark the invalidation message as overflowed and free up the + * messages accumulated so far. + */ + txn->txn_flags |= RBTXN_DISTR_INVAL_OVERFLOWED; - memcpy(txn->invalidations + txn->ninvalidations, msgs, - nmsgs * sizeof(SharedInvalidationMessage)); - txn->ninvalidations += nmsgs; + if (txn->invalidations_distributed) + { + pfree(txn->invalidations_distributed); + txn->invalidations_distributed = NULL; + txn->ninvalidations_distributed = 0; + } + } + else + ReorderBufferAccumulateInvalidations(&txn->invalidations_distributed, + &txn->ninvalidations_distributed, + msgs, nmsgs); } - change = ReorderBufferAllocChange(rb); - change->action = REORDER_BUFFER_CHANGE_INVALIDATION; - change->data.inval.ninvalidations = nmsgs; - change->data.inval.invalidations = (SharedInvalidationMessage *) - palloc(sizeof(SharedInvalidationMessage) * nmsgs); - memcpy(change->data.inval.invalidations, msgs, - sizeof(SharedInvalidationMessage) * nmsgs); - - ReorderBufferQueueChange(rb, xid, lsn, change, false); + /* Queue the invalidation messages into the transaction */ + ReorderBufferQueueInvalidations(rb, xid, lsn, nmsgs, msgs); MemoryContextSwitchTo(oldcontext); } @@ -4787,7 +4917,7 @@ StartupReorderBuffer(void) continue; /* if it cannot be a slot, skip the directory */ - if (!ReplicationSlotValidateName(logical_de->d_name, DEBUG2)) + if (!ReplicationSlotValidateName(logical_de->d_name, true, DEBUG2)) continue; /* @@ -5460,3 +5590,26 @@ ResolveCminCmaxDuringDecoding(HTAB *tuplecid_data, *cmax = ent->cmax; return true; } + +/* + * Count invalidation messages of specified transaction. + * + * Returns number of messages, and msgs is set to the pointer of the linked + * list for the messages. + */ +uint32 +ReorderBufferGetInvalidations(ReorderBuffer *rb, TransactionId xid, + SharedInvalidationMessage **msgs) +{ + ReorderBufferTXN *txn; + + txn = ReorderBufferTXNByXid(rb, xid, false, NULL, InvalidXLogRecPtr, + false); + + if (txn == NULL) + return 0; + + *msgs = txn->invalidations; + + return txn->ninvalidations; +} diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c index 2c0a7439be41d..caa003cb7b3ac 100644 --- a/src/backend/replication/logical/slotsync.c +++ b/src/backend/replication/logical/slotsync.c @@ -52,7 +52,6 @@ #include "access/xlog_internal.h" #include "access/xlogrecovery.h" #include "catalog/pg_database.h" -#include "commands/dbcommands.h" #include "libpq/pqsignal.h" #include "pgstat.h" #include "postmaster/interrupt.h" @@ -139,6 +138,7 @@ typedef struct RemoteSlot bool failover; XLogRecPtr restart_lsn; XLogRecPtr confirmed_lsn; + XLogRecPtr two_phase_at; TransactionId catalog_xmin; /* RS_INVAL_NONE if valid, or the reason of invalidation */ @@ -195,14 +195,14 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, * restart_lsn or the initial xmin_horizon computed for the local slot * is ahead of the remote slot. * - * If the slot is persistent, restart_lsn of the synced slot could - * still be ahead of the remote slot. Since we use slot advance - * functionality to keep snapbuild/slot updated, it is possible that - * the restart_lsn is advanced to a later position than it has on the - * primary. This can happen when slot advancing machinery finds - * running xacts record after reaching the consistent state at a later - * point than the primary where it serializes the snapshot and updates - * the restart_lsn. + * If the slot is persistent, both restart_lsn and catalog_xmin of the + * synced slot could still be ahead of the remote slot. Since we use + * slot advance functionality to keep snapbuild/slot updated, it is + * possible that the restart_lsn and catalog_xmin are advanced to a + * later position than it has on the primary. This can happen when + * slot advancing machinery finds running xacts record after reaching + * the consistent state at a later point than the primary where it + * serializes the snapshot and updates the restart_lsn. * * We LOG the message if the slot is temporary as it can help the user * to understand why the slot is not sync-ready. In the case of a @@ -210,9 +210,9 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, * impact the users, so we used DEBUG1 level to log the message. */ ereport(slot->data.persistency == RS_TEMPORARY ? LOG : DEBUG1, - errmsg("could not synchronize replication slot \"%s\" because remote slot precedes local slot", + errmsg("could not synchronize replication slot \"%s\"", remote_slot->name), - errdetail("The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u.", + errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%08X and catalog xmin %u, but the standby has LSN %X/%08X and catalog xmin %u.", LSN_FORMAT_ARGS(remote_slot->restart_lsn), remote_slot->catalog_xmin, LSN_FORMAT_ARGS(slot->data.restart_lsn), @@ -220,16 +220,25 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, if (remote_slot_precedes) *remote_slot_precedes = true; + + /* + * Skip updating the configuration. This is required to avoid syncing + * two_phase_at without syncing confirmed_lsn. Otherwise, the prepared + * transaction between old confirmed_lsn and two_phase_at will + * unexpectedly get decoded and sent to the downstream after + * promotion. See comments in ReorderBufferFinishPrepared. + */ + return false; } /* * Attempt to sync LSNs and xmins only if remote slot is ahead of local * slot. */ - else if (remote_slot->confirmed_lsn > slot->data.confirmed_flush || - remote_slot->restart_lsn > slot->data.restart_lsn || - TransactionIdFollows(remote_slot->catalog_xmin, - slot->data.catalog_xmin)) + if (remote_slot->confirmed_lsn > slot->data.confirmed_flush || + remote_slot->restart_lsn > slot->data.restart_lsn || + TransactionIdFollows(remote_slot->catalog_xmin, + slot->data.catalog_xmin)) { /* * We can't directly copy the remote slot's LSN or xmin unless there @@ -265,7 +274,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, ereport(ERROR, errmsg_internal("synchronized confirmed_flush for slot \"%s\" differs from remote slot", remote_slot->name), - errdetail_internal("Remote slot has LSN %X/%X but local slot has LSN %X/%X.", + errdetail_internal("Remote slot has LSN %X/%08X but local slot has LSN %X/%08X.", LSN_FORMAT_ARGS(remote_slot->confirmed_lsn), LSN_FORMAT_ARGS(slot->data.confirmed_flush))); } @@ -276,7 +285,8 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, if (remote_dbid != slot->data.database || remote_slot->two_phase != slot->data.two_phase || remote_slot->failover != slot->data.failover || - strcmp(remote_slot->plugin, NameStr(slot->data.plugin)) != 0) + strcmp(remote_slot->plugin, NameStr(slot->data.plugin)) != 0 || + remote_slot->two_phase_at != slot->data.two_phase_at) { NameData plugin_name; @@ -287,10 +297,17 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, slot->data.plugin = plugin_name; slot->data.database = remote_dbid; slot->data.two_phase = remote_slot->two_phase; + slot->data.two_phase_at = remote_slot->two_phase_at; slot->data.failover = remote_slot->failover; SpinLockRelease(&slot->mutex); updated_config = true; + + /* + * Ensure that there is no risk of sending prepared transactions + * unexpectedly after the promotion. + */ + Assert(slot->data.two_phase_at <= slot->data.confirmed_flush); } /* @@ -575,7 +592,7 @@ update_and_persist_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid) { ereport(LOG, errmsg("could not synchronize replication slot \"%s\"", remote_slot->name), - errdetail("Logical decoding could not find consistent point from local slot's LSN %X/%X.", + errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%08X.", LSN_FORMAT_ARGS(slot->data.restart_lsn))); return false; @@ -624,7 +641,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid) ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR, errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("skipping slot synchronization because the received slot sync" - " LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X", + " LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X", LSN_FORMAT_ARGS(remote_slot->confirmed_lsn), remote_slot->name, LSN_FORMAT_ARGS(latestFlushPtr))); @@ -715,7 +732,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid) ereport(ERROR, errmsg_internal("cannot synchronize local slot \"%s\"", remote_slot->name), - errdetail_internal("Local slot's start streaming location LSN(%X/%X) is ahead of remote slot's LSN(%X/%X).", + errdetail_internal("Local slot's start streaming location LSN(%X/%08X) is ahead of remote slot's LSN(%X/%08X).", LSN_FORMAT_ARGS(slot->data.confirmed_flush), LSN_FORMAT_ARGS(remote_slot->confirmed_lsn))); @@ -788,9 +805,9 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid) static bool synchronize_slots(WalReceiverConn *wrconn) { -#define SLOTSYNC_COLUMN_COUNT 9 +#define SLOTSYNC_COLUMN_COUNT 10 Oid slotRow[SLOTSYNC_COLUMN_COUNT] = {TEXTOID, TEXTOID, LSNOID, - LSNOID, XIDOID, BOOLOID, BOOLOID, TEXTOID, TEXTOID}; + LSNOID, XIDOID, BOOLOID, LSNOID, BOOLOID, TEXTOID, TEXTOID}; WalRcvExecResult *res; TupleTableSlot *tupslot; @@ -798,7 +815,7 @@ synchronize_slots(WalReceiverConn *wrconn) bool some_slot_updated = false; bool started_tx = false; const char *query = "SELECT slot_name, plugin, confirmed_flush_lsn," - " restart_lsn, catalog_xmin, two_phase, failover," + " restart_lsn, catalog_xmin, two_phase, two_phase_at, failover," " database, invalidation_reason" " FROM pg_catalog.pg_replication_slots" " WHERE failover and NOT temporary"; @@ -853,6 +870,9 @@ synchronize_slots(WalReceiverConn *wrconn) &isnull)); Assert(!isnull); + d = slot_getattr(tupslot, ++col, &isnull); + remote_slot->two_phase_at = isnull ? InvalidXLogRecPtr : DatumGetLSN(d); + remote_slot->failover = DatumGetBool(slot_getattr(tupslot, ++col, &isnull)); Assert(!isnull); @@ -1038,14 +1058,14 @@ ValidateSlotSyncParams(int elevel) { /* * Logical slot sync/creation requires wal_level >= logical. - * - * Since altering the wal_level requires a server restart, so error out in - * this case regardless of elevel provided by caller. */ if (wal_level < WAL_LEVEL_LOGICAL) - ereport(ERROR, + { + ereport(elevel, errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("replication slot synchronization requires \"wal_level\" >= \"logical\"")); + return false; + } /* * A physical replication slot(primary_slot_name) is required on the diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index b64e53de017b9..98ddee2092905 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -161,7 +161,7 @@ static void SnapBuildFreeSnapshot(Snapshot snap); static void SnapBuildSnapIncRefcount(Snapshot snap); -static void SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn); +static void SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, XLogRecPtr lsn, TransactionId xid); static inline bool SnapBuildXidHasCatalogChanges(SnapBuild *builder, TransactionId xid, uint32 xinfo); @@ -720,15 +720,15 @@ SnapBuildProcessNewCid(SnapBuild *builder, TransactionId xid, } /* - * Add a new Snapshot to all transactions we're decoding that currently are - * in-progress so they can see new catalog contents made by the transaction - * that just committed. This is necessary because those in-progress - * transactions will use the new catalog's contents from here on (at the very - * least everything they do needs to be compatible with newer catalog - * contents). + * Add a new Snapshot and invalidation messages to all transactions we're + * decoding that currently are in-progress so they can see new catalog contents + * made by the transaction that just committed. This is necessary because those + * in-progress transactions will use the new catalog's contents from here on + * (at the very least everything they do needs to be compatible with newer + * catalog contents). */ static void -SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn) +SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, XLogRecPtr lsn, TransactionId xid) { dlist_iter txn_i; ReorderBufferTXN *txn; @@ -736,7 +736,8 @@ SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn) /* * Iterate through all toplevel transactions. This can include * subtransactions which we just don't yet know to be that, but that's - * fine, they will just get an unnecessary snapshot queued. + * fine, they will just get an unnecessary snapshot and invalidations + * queued. */ dlist_foreach(txn_i, &builder->reorder->toplevel_by_lsn) { @@ -749,6 +750,15 @@ SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn) * transaction which in turn implies we don't yet need a snapshot at * all. We'll add a snapshot when the first change gets queued. * + * Similarly, we don't need to add invalidations to a transaction + * whose base snapshot is not yet set. Once a base snapshot is built, + * it will include the xids of committed transactions that have + * modified the catalog, thus reflecting the new catalog contents. The + * existing catalog cache will have already been invalidated after + * processing the invalidations in the transaction that modified + * catalogs, ensuring that a fresh cache is constructed during + * decoding. + * * NB: This works correctly even for subtransactions because * ReorderBufferAssignChild() takes care to transfer the base snapshot * to the top-level transaction, and while iterating the changequeue @@ -758,13 +768,13 @@ SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn) continue; /* - * We don't need to add snapshot to prepared transactions as they - * should not see the new catalog contents. + * We don't need to add snapshot or invalidations to prepared + * transactions as they should not see the new catalog contents. */ if (rbtxn_is_prepared(txn)) continue; - elog(DEBUG2, "adding a new snapshot to %u at %X/%X", + elog(DEBUG2, "adding a new snapshot and invalidations to %u at %X/%08X", txn->xid, LSN_FORMAT_ARGS(lsn)); /* @@ -774,6 +784,41 @@ SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn) SnapBuildSnapIncRefcount(builder->snapshot); ReorderBufferAddSnapshot(builder->reorder, txn->xid, lsn, builder->snapshot); + + /* + * Add invalidation messages to the reorder buffer of in-progress + * transactions except the current committed transaction, for which we + * will execute invalidations at the end. + * + * It is required, otherwise, we will end up using the stale catcache + * contents built by the current transaction even after its decoding, + * which should have been invalidated due to concurrent catalog + * changing transaction. + * + * Distribute only the invalidation messages generated by the current + * committed transaction. Invalidation messages received from other + * transactions would have already been propagated to the relevant + * in-progress transactions. This transaction would have processed + * those invalidations, ensuring that subsequent transactions observe + * a consistent cache state. + */ + if (txn->xid != xid) + { + uint32 ninvalidations; + SharedInvalidationMessage *msgs = NULL; + + ninvalidations = ReorderBufferGetInvalidations(builder->reorder, + xid, &msgs); + + if (ninvalidations > 0) + { + Assert(msgs != NULL); + + ReorderBufferAddDistributedInvalidations(builder->reorder, + txn->xid, lsn, + ninvalidations, msgs); + } + } } } @@ -1045,8 +1090,11 @@ SnapBuildCommitTxn(SnapBuild *builder, XLogRecPtr lsn, TransactionId xid, /* refcount of the snapshot builder for the new snapshot */ SnapBuildSnapIncRefcount(builder->snapshot); - /* add a new catalog snapshot to all currently running transactions */ - SnapBuildDistributeNewCatalogSnapshot(builder, lsn); + /* + * Add a new catalog snapshot and invalidations messages to all + * currently running transactions. + */ + SnapBuildDistributeSnapshotAndInval(builder, lsn, xid); } } @@ -1223,10 +1271,10 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn builder->initial_xmin_horizon)) { ereport(DEBUG1, - (errmsg_internal("skipping snapshot at %X/%X while building logical decoding snapshot, xmin horizon too low", - LSN_FORMAT_ARGS(lsn)), - errdetail_internal("initial xmin horizon of %u vs the snapshot's %u", - builder->initial_xmin_horizon, running->oldestRunningXid))); + errmsg_internal("skipping snapshot at %X/%08X while building logical decoding snapshot, xmin horizon too low", + LSN_FORMAT_ARGS(lsn)), + errdetail_internal("initial xmin horizon of %u vs the snapshot's %u", + builder->initial_xmin_horizon, running->oldestRunningXid)); SnapBuildWaitSnapshot(running, builder->initial_xmin_horizon); @@ -1262,9 +1310,9 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn builder->next_phase_at = InvalidTransactionId; ereport(LOG, - (errmsg("logical decoding found consistent point at %X/%X", - LSN_FORMAT_ARGS(lsn)), - errdetail("There are no running transactions."))); + errmsg("logical decoding found consistent point at %X/%08X", + LSN_FORMAT_ARGS(lsn)), + errdetail("There are no running transactions.")); return false; } @@ -1311,10 +1359,10 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn Assert(TransactionIdIsNormal(builder->xmax)); ereport(LOG, - (errmsg("logical decoding found initial starting point at %X/%X", - LSN_FORMAT_ARGS(lsn)), - errdetail("Waiting for transactions (approximately %d) older than %u to end.", - running->xcnt, running->nextXid))); + errmsg("logical decoding found initial starting point at %X/%08X", + LSN_FORMAT_ARGS(lsn)), + errdetail("Waiting for transactions (approximately %d) older than %u to end.", + running->xcnt, running->nextXid)); SnapBuildWaitSnapshot(running, running->nextXid); } @@ -1335,10 +1383,10 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn builder->next_phase_at = running->nextXid; ereport(LOG, - (errmsg("logical decoding found initial consistent point at %X/%X", - LSN_FORMAT_ARGS(lsn)), - errdetail("Waiting for transactions (approximately %d) older than %u to end.", - running->xcnt, running->nextXid))); + errmsg("logical decoding found initial consistent point at %X/%08X", + LSN_FORMAT_ARGS(lsn)), + errdetail("Waiting for transactions (approximately %d) older than %u to end.", + running->xcnt, running->nextXid)); SnapBuildWaitSnapshot(running, running->nextXid); } @@ -1359,9 +1407,9 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn builder->next_phase_at = InvalidTransactionId; ereport(LOG, - (errmsg("logical decoding found consistent point at %X/%X", - LSN_FORMAT_ARGS(lsn)), - errdetail("There are no old transactions anymore."))); + errmsg("logical decoding found consistent point at %X/%08X", + LSN_FORMAT_ARGS(lsn)), + errdetail("There are no old transactions anymore.")); } /* @@ -1865,9 +1913,9 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn) Assert(builder->state == SNAPBUILD_CONSISTENT); ereport(LOG, - (errmsg("logical decoding found consistent point at %X/%X", - LSN_FORMAT_ARGS(lsn)), - errdetail("Logical decoding will begin using saved snapshot."))); + errmsg("logical decoding found consistent point at %X/%08X", + LSN_FORMAT_ARGS(lsn)), + errdetail("Logical decoding will begin using saved snapshot.")); return true; snapshot_not_interesting: diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 65b98aa905fe7..d3356bc84ee0c 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -316,7 +316,8 @@ process_syncing_tables_for_sync(XLogRecPtr current_lsn) UpdateSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, MyLogicalRepWorker->relstate, - MyLogicalRepWorker->relstate_lsn); + MyLogicalRepWorker->relstate_lsn, + false); /* * End streaming so that LogRepWorkerWalRcvConn can be used to drop @@ -425,6 +426,7 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) ListCell *lc; bool started_tx = false; bool should_exit = false; + Relation rel = NULL; Assert(!IsTransactionState()); @@ -492,7 +494,17 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) * worker to remove the origin tracking as if there is any * error while dropping we won't restart it to drop the * origin. So passing missing_ok = true. + * + * Lock the subscription and origin in the same order as we + * are doing during DDL commands to avoid deadlocks. See + * AlterSubscription_refresh. */ + LockSharedObject(SubscriptionRelationId, MyLogicalRepWorker->subid, + 0, AccessShareLock); + + if (!rel) + rel = table_open(SubscriptionRelRelationId, RowExclusiveLock); + ReplicationOriginNameForLogicalRep(MyLogicalRepWorker->subid, rstate->relid, originname, @@ -504,7 +516,7 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) */ UpdateSubscriptionRelState(MyLogicalRepWorker->subid, rstate->relid, rstate->state, - rstate->lsn); + rstate->lsn, true); } } else @@ -555,7 +567,14 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) * This is required to avoid any undetected deadlocks * due to any existing lock as deadlock detector won't * be able to detect the waits on the latch. + * + * Also close any tables prior to the commit. */ + if (rel) + { + table_close(rel, NoLock); + rel = NULL; + } CommitTransactionCommand(); pgstat_report_stat(false); } @@ -603,20 +622,31 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) TimestampDifferenceExceeds(hentry->last_start_time, now, wal_retrieve_retry_interval)) { - logicalrep_worker_launch(WORKERTYPE_TABLESYNC, - MyLogicalRepWorker->dbid, - MySubscription->oid, - MySubscription->name, - MyLogicalRepWorker->userid, - rstate->relid, - DSM_HANDLE_INVALID); + /* + * Set the last_start_time even if we fail to start + * the worker, so that we won't retry until + * wal_retrieve_retry_interval has elapsed. + */ hentry->last_start_time = now; + (void) logicalrep_worker_launch(WORKERTYPE_TABLESYNC, + MyLogicalRepWorker->dbid, + MySubscription->oid, + MySubscription->name, + MyLogicalRepWorker->userid, + rstate->relid, + DSM_HANDLE_INVALID, + false); } } } } } + /* Close table if opened */ + if (rel) + table_close(rel, NoLock); + + if (started_tx) { /* @@ -940,15 +970,15 @@ fetch_remote_table_info(char *nspname, char *relname, LogicalRepRelation *lrel, * Now fetch column names and types. */ resetStringInfo(&cmd); - appendStringInfo(&cmd, - "SELECT a.attnum," - " a.attname," - " a.atttypid," - " a.attnum = ANY(i.indkey)"); + appendStringInfoString(&cmd, + "SELECT a.attnum," + " a.attname," + " a.atttypid," + " a.attnum = ANY(i.indkey)"); /* Generated columns can be replicated since version 18. */ if (server_version >= 180000) - appendStringInfo(&cmd, ", a.attgenerated != ''"); + appendStringInfoString(&cmd, ", a.attgenerated != ''"); appendStringInfo(&cmd, " FROM pg_catalog.pg_attribute a" @@ -1408,7 +1438,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) UpdateSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, MyLogicalRepWorker->relstate, - MyLogicalRepWorker->relstate_lsn); + MyLogicalRepWorker->relstate_lsn, + false); CommitTransactionCommand(); pgstat_report_stat(true); @@ -1541,14 +1572,15 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) UpdateSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, SUBREL_STATE_FINISHEDCOPY, - MyLogicalRepWorker->relstate_lsn); + MyLogicalRepWorker->relstate_lsn, + false); CommitTransactionCommand(); copy_table_done: elog(DEBUG1, - "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%X", + "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%08X", originname, LSN_FORMAT_ARGS(*origin_startpos)); /* diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index e3b2b14494208..22ad9051db3fd 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -109,13 +109,6 @@ * If ever a user needs to be aware of the tri-state value, they can fetch it * from the pg_subscription catalog (see column subtwophasestate). * - * We don't allow to toggle two_phase option of a subscription because it can - * lead to an inconsistent replica. Consider, initially, it was on and we have - * received some prepare then we turn it off, now at commit time the server - * will send the entire transaction data along with the commit. With some more - * analysis, we can allow changing this option from off to on but not sure if - * that alone would be useful. - * * Finally, to avoid problems mentioned in previous paragraphs from any * subsequent (not READY) tablesyncs (need to toggle two_phase option from 'on' * to 'off' and then again back to 'on') there is a restriction for @@ -139,6 +132,96 @@ * failover = true when creating the subscription. Enabling failover allows us * to smoothly transition to the promoted standby, ensuring that we can * subscribe to the new primary without losing any data. + * + * RETAIN DEAD TUPLES + * ---------------------- + * Each apply worker that enabled retain_dead_tuples option maintains a + * non-removable transaction ID (oldest_nonremovable_xid) in shared memory to + * prevent dead rows from being removed prematurely when the apply worker still + * needs them to detect update_deleted conflicts. Additionally, this helps to + * retain the required commit_ts module information, which further helps to + * detect update_origin_differs and delete_origin_differs conflicts reliably, as + * otherwise, vacuum freeze could remove the required information. + * + * The logical replication launcher manages an internal replication slot named + * "pg_conflict_detection". It asynchronously aggregates the non-removable + * transaction ID from all apply workers to determine the appropriate xmin for + * the slot, thereby retaining necessary tuples. + * + * The non-removable transaction ID in the apply worker is advanced to the + * oldest running transaction ID once all concurrent transactions on the + * publisher have been applied and flushed locally. The process involves: + * + * - RDT_GET_CANDIDATE_XID: + * Call GetOldestActiveTransactionId() to take oldestRunningXid as the + * candidate xid. + * + * - RDT_REQUEST_PUBLISHER_STATUS: + * Send a message to the walsender requesting the publisher status, which + * includes the latest WAL write position and information about transactions + * that are in the commit phase. + * + * - RDT_WAIT_FOR_PUBLISHER_STATUS: + * Wait for the status from the walsender. After receiving the first status, + * do not proceed if there are concurrent remote transactions that are still + * in the commit phase. These transactions might have been assigned an + * earlier commit timestamp but have not yet written the commit WAL record. + * Continue to request the publisher status (RDT_REQUEST_PUBLISHER_STATUS) + * until all these transactions have completed. + * + * - RDT_WAIT_FOR_LOCAL_FLUSH: + * Advance the non-removable transaction ID if the current flush location has + * reached or surpassed the last received WAL position. + * + * The overall state progression is: GET_CANDIDATE_XID -> + * REQUEST_PUBLISHER_STATUS -> WAIT_FOR_PUBLISHER_STATUS -> (loop to + * REQUEST_PUBLISHER_STATUS till concurrent remote transactions end) -> + * WAIT_FOR_LOCAL_FLUSH -> loop back to GET_CANDIDATE_XID. + * + * Retaining the dead tuples for this period is sufficient for ensuring + * eventual consistency using last-update-wins strategy, as dead tuples are + * useful for detecting conflicts only during the application of concurrent + * transactions from remote nodes. After applying and flushing all remote + * transactions that occurred concurrently with the tuple DELETE, any + * subsequent UPDATE from a remote node should have a later timestamp. In such + * cases, it is acceptable to detect an update_missing scenario and convert the + * UPDATE to an INSERT when applying it. But, for concurrent remote + * transactions with earlier timestamps than the DELETE, detecting + * update_deleted is necessary, as the UPDATEs in remote transactions should be + * ignored if their timestamp is earlier than that of the dead tuples. + * + * Note that advancing the non-removable transaction ID is not supported if the + * publisher is also a physical standby. This is because the logical walsender + * on the standby can only get the WAL replay position but there may be more + * WALs that are being replicated from the primary and those WALs could have + * earlier commit timestamp. + * + * Similarly, when the publisher has subscribed to another publisher, + * information necessary for conflict detection cannot be retained for + * changes from origins other than the publisher. This is because publisher + * lacks the information on concurrent transactions of other publishers to + * which it subscribes. As the information on concurrent transactions is + * unavailable beyond subscriber's immediate publishers, the non-removable + * transaction ID might be advanced prematurely before changes from other + * origins have been fully applied. + * + * XXX Retaining information for changes from other origins might be possible + * by requesting the subscription on that origin to enable retain_dead_tuples + * and fetching the conflict detection slot.xmin along with the publisher's + * status. In the RDT_WAIT_FOR_PUBLISHER_STATUS phase, the apply worker could + * wait for the remote slot's xmin to reach the oldest active transaction ID, + * ensuring that all transactions from other origins have been applied on the + * publisher, thereby getting the latest WAL position that includes all + * concurrent changes. However, this approach may impact performance, so it + * might not worth the effort. + * + * XXX It seems feasible to get the latest commit's WAL location from the + * publisher and wait till that is applied. However, we can't do that + * because commit timestamps can regress as a commit with a later LSN is not + * guaranteed to have a later timestamp than those with earlier LSNs. Having + * said that, even if that is possible, it won't improve performance much as + * the apply always lag and moves slowly as compared with the transactions + * on the publisher. *------------------------------------------------------------------------- */ @@ -147,6 +230,7 @@ #include #include +#include "access/commit_ts.h" #include "access/table.h" #include "access/tableam.h" #include "access/twophase.h" @@ -155,6 +239,7 @@ #include "catalog/pg_inherits.h" #include "catalog/pg_subscription.h" #include "catalog/pg_subscription_rel.h" +#include "commands/subscriptioncmds.h" #include "commands/tablecmds.h" #include "commands/trigger.h" #include "executor/executor.h" @@ -173,12 +258,14 @@ #include "replication/logicalrelation.h" #include "replication/logicalworker.h" #include "replication/origin.h" +#include "replication/slot.h" #include "replication/walreceiver.h" #include "replication/worker_internal.h" #include "rewrite/rewriteHandler.h" #include "storage/buffile.h" #include "storage/ipc.h" #include "storage/lmgr.h" +#include "storage/procarray.h" #include "tcop/tcopprot.h" #include "utils/acl.h" #include "utils/dynahash.h" @@ -275,6 +362,78 @@ typedef enum TRANS_PARALLEL_APPLY, } TransApplyAction; +/* + * The phases involved in advancing the non-removable transaction ID. + * + * See comments atop worker.c for details of the transition between these + * phases. + */ +typedef enum +{ + RDT_GET_CANDIDATE_XID, + RDT_REQUEST_PUBLISHER_STATUS, + RDT_WAIT_FOR_PUBLISHER_STATUS, + RDT_WAIT_FOR_LOCAL_FLUSH +} RetainDeadTuplesPhase; + +/* + * Critical information for managing phase transitions within the + * RetainDeadTuplesPhase. + */ +typedef struct RetainDeadTuplesData +{ + RetainDeadTuplesPhase phase; /* current phase */ + XLogRecPtr remote_lsn; /* WAL write position on the publisher */ + + /* + * Oldest transaction ID that was in the commit phase on the publisher. + * Use FullTransactionId to prevent issues with transaction ID wraparound, + * where a new remote_oldestxid could falsely appear to originate from the + * past and block advancement. + */ + FullTransactionId remote_oldestxid; + + /* + * Next transaction ID to be assigned on the publisher. Use + * FullTransactionId for consistency and to allow straightforward + * comparisons with remote_oldestxid. + */ + FullTransactionId remote_nextxid; + + TimestampTz reply_time; /* when the publisher responds with status */ + + /* + * Publisher transaction ID that must be awaited to complete before + * entering the final phase (RDT_WAIT_FOR_LOCAL_FLUSH). Use + * FullTransactionId for the same reason as remote_nextxid. + */ + FullTransactionId remote_wait_for; + + TransactionId candidate_xid; /* candidate for the non-removable + * transaction ID */ + TimestampTz flushpos_update_time; /* when the remote flush position was + * updated in final phase + * (RDT_WAIT_FOR_LOCAL_FLUSH) */ + + /* + * The following fields are used to determine the timing for the next + * round of transaction ID advancement. + */ + TimestampTz last_recv_time; /* when the last message was received */ + TimestampTz candidate_xid_time; /* when the candidate_xid is decided */ + int xid_advance_interval; /* how much time (ms) to wait before + * attempting to advance the + * non-removable transaction ID */ +} RetainDeadTuplesData; + +/* + * The minimum (100ms) and maximum (3 minutes) intervals for advancing + * non-removable transaction IDs. The maximum interval is a bit arbitrary but + * is sufficient to not cause any undue network traffic. + */ +#define MIN_XID_ADVANCE_INTERVAL 100 +#define MAX_XID_ADVANCE_INTERVAL 180000 + /* errcontext tracker */ static ApplyErrorCallbackArg apply_error_callback_arg = { @@ -339,6 +498,13 @@ static XLogRecPtr skip_xact_finish_lsn = InvalidXLogRecPtr; /* BufFile handle of the current streaming file */ static BufFile *stream_fd = NULL; +/* + * The remote WAL position that has been applied and flushed locally. We record + * and use this information both while sending feedback to the server and + * advancing oldest_nonremovable_xid. + */ +static XLogRecPtr last_flushpos = InvalidXLogRecPtr; + typedef struct SubXactInfo { TransactionId xid; /* XID of the subxact */ @@ -379,6 +545,19 @@ static void stream_close_file(void); static void send_feedback(XLogRecPtr recvpos, bool force, bool requestReply); +static void maybe_advance_nonremovable_xid(RetainDeadTuplesData *rdt_data, + bool status_received); +static bool can_advance_nonremovable_xid(RetainDeadTuplesData *rdt_data); +static void process_rdt_phase_transition(RetainDeadTuplesData *rdt_data, + bool status_received); +static void get_candidate_xid(RetainDeadTuplesData *rdt_data); +static void request_publisher_status(RetainDeadTuplesData *rdt_data); +static void wait_for_publisher_status(RetainDeadTuplesData *rdt_data, + bool status_received); +static void wait_for_local_flush(RetainDeadTuplesData *rdt_data); +static void adjust_xid_advance_interval(RetainDeadTuplesData *rdt_data, + bool new_xid_found); + static void apply_handle_commit_internal(LogicalRepCommitData *commit_data); static void apply_handle_insert_internal(ApplyExecutionData *edata, ResultRelInfo *relinfo, @@ -397,6 +576,12 @@ static bool FindReplTupleInLocalRel(ApplyExecutionData *edata, Relation localrel Oid localidxoid, TupleTableSlot *remoteslot, TupleTableSlot **localslot); +static bool FindDeletedTupleInLocalRel(Relation localrel, + Oid localidxoid, + TupleTableSlot *remoteslot, + TransactionId *delete_xid, + RepOriginId *delete_origin, + TimestampTz *delete_time); static void apply_handle_tuple_routing(ApplyExecutionData *edata, TupleTableSlot *remoteslot, LogicalRepTupleData *newtup, @@ -414,6 +599,8 @@ static inline void reset_apply_error_context_info(void); static TransApplyAction get_transaction_apply_action(TransactionId xid, ParallelApplyWorkerInfo **winfo); +static void replorigin_reset(int code, Datum arg); + /* * Form the origin name for the subscription. * @@ -1021,7 +1208,7 @@ apply_handle_commit(StringInfo s) if (commit_data.commit_lsn != remote_final_lsn) ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg_internal("incorrect commit LSN %X/%X in commit message (expected %X/%X)", + errmsg_internal("incorrect commit LSN %X/%08X in commit message (expected %X/%08X)", LSN_FORMAT_ARGS(commit_data.commit_lsn), LSN_FORMAT_ARGS(remote_final_lsn)))); @@ -1113,7 +1300,7 @@ apply_handle_prepare(StringInfo s) if (prepare_data.prepare_lsn != remote_final_lsn) ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg_internal("incorrect prepare LSN %X/%X in prepare message (expected %X/%X)", + errmsg_internal("incorrect prepare LSN %X/%08X in prepare message (expected %X/%08X)", LSN_FORMAT_ARGS(prepare_data.prepare_lsn), LSN_FORMAT_ARGS(remote_final_lsn)))); @@ -2457,7 +2644,7 @@ apply_handle_insert(StringInfo s) { ResultRelInfo *relinfo = edata->targetRelInfo; - ExecOpenIndices(relinfo, true); + ExecOpenIndices(relinfo, false); apply_handle_insert_internal(edata, relinfo, remoteslot); ExecCloseIndices(relinfo); } @@ -2680,7 +2867,7 @@ apply_handle_update_internal(ApplyExecutionData *edata, MemoryContext oldctx; EvalPlanQualInit(&epqstate, estate, NULL, NIL, -1, NIL); - ExecOpenIndices(relinfo, true); + ExecOpenIndices(relinfo, false); found = FindReplTupleInLocalRel(edata, localrel, &relmapentry->remoterel, @@ -2731,17 +2918,31 @@ apply_handle_update_internal(ApplyExecutionData *edata, } else { + ConflictType type; TupleTableSlot *newslot = localslot; + /* + * Detecting whether the tuple was recently deleted or never existed + * is crucial to avoid misleading the user during conflict handling. + */ + if (FindDeletedTupleInLocalRel(localrel, localindexoid, remoteslot, + &conflicttuple.xmin, + &conflicttuple.origin, + &conflicttuple.ts) && + conflicttuple.origin != replorigin_session_origin) + type = CT_UPDATE_DELETED; + else + type = CT_UPDATE_MISSING; + /* Store the new tuple for conflict reporting */ slot_store_data(newslot, relmapentry, newtup); /* - * The tuple to be updated could not be found. Do nothing except for - * emitting a log message. + * The tuple to be updated could not be found or was deleted. Do + * nothing except for emitting a log message. */ - ReportApplyConflict(estate, relinfo, LOG, CT_UPDATE_MISSING, - remoteslot, newslot, list_make1(&conflicttuple)); + ReportApplyConflict(estate, relinfo, LOG, type, remoteslot, newslot, + list_make1(&conflicttuple)); } /* Cleanup. */ @@ -2961,6 +3162,112 @@ FindReplTupleInLocalRel(ApplyExecutionData *edata, Relation localrel, return found; } +/* + * Determine whether the index can reliably locate the deleted tuple in the + * local relation. + * + * An index may exclude deleted tuples if it was re-indexed or re-created during + * change application. Therefore, an index is considered usable only if the + * conflict detection slot.xmin (conflict_detection_xmin) is greater than the + * index tuple's xmin. This ensures that any tuples deleted prior to the index + * creation or re-indexing are not relevant for conflict detection in the + * current apply worker. + * + * Note that indexes may also be excluded if they were modified by other DDL + * operations, such as ALTER INDEX. However, this is acceptable, as the + * likelihood of such DDL changes coinciding with the need to scan dead + * tuples for the update_deleted is low. + */ +static bool +IsIndexUsableForFindingDeletedTuple(Oid localindexoid, + TransactionId conflict_detection_xmin) +{ + HeapTuple index_tuple; + TransactionId index_xmin; + + index_tuple = SearchSysCache1(INDEXRELID, ObjectIdGetDatum(localindexoid)); + + if (!HeapTupleIsValid(index_tuple)) /* should not happen */ + elog(ERROR, "cache lookup failed for index %u", localindexoid); + + /* + * No need to check for a frozen transaction ID, as + * TransactionIdPrecedes() manages it internally, treating it as falling + * behind the conflict_detection_xmin. + */ + index_xmin = HeapTupleHeaderGetXmin(index_tuple->t_data); + + ReleaseSysCache(index_tuple); + + return TransactionIdPrecedes(index_xmin, conflict_detection_xmin); +} + +/* + * Attempts to locate a deleted tuple in the local relation that matches the + * values of the tuple received from the publication side (in 'remoteslot'). + * The search is performed using either the replica identity index, primary + * key, other available index, or a sequential scan if necessary. + * + * Returns true if the deleted tuple is found. If found, the transaction ID, + * origin, and commit timestamp of the deletion are stored in '*delete_xid', + * '*delete_origin', and '*delete_time' respectively. + */ +static bool +FindDeletedTupleInLocalRel(Relation localrel, Oid localidxoid, + TupleTableSlot *remoteslot, + TransactionId *delete_xid, RepOriginId *delete_origin, + TimestampTz *delete_time) +{ + TransactionId oldestxmin; + ReplicationSlot *slot; + + /* + * Return false if either dead tuples are not retained or commit timestamp + * data is not available. + */ + if (!MySubscription->retaindeadtuples || !track_commit_timestamp) + return false; + + /* + * For conflict detection, we use the conflict slot's xmin value instead + * of invoking GetOldestNonRemovableTransactionId(). The slot.xmin acts as + * a threshold to identify tuples that were recently deleted. These tuples + * are not visible to concurrent transactions, but we log an + * update_deleted conflict if such a tuple matches the remote update being + * applied. + * + * Although GetOldestNonRemovableTransactionId() can return a value older + * than the slot's xmin, for our current purpose it is acceptable to treat + * tuples deleted by transactions prior to slot.xmin as update_missing + * conflicts. + * + * Ideally, we would use oldest_nonremovable_xid, which is directly + * maintained by the leader apply worker. However, this value is not + * available to table synchronization or parallel apply workers, making + * slot.xmin a practical alternative in those contexts. + */ + slot = SearchNamedReplicationSlot(CONFLICT_DETECTION_SLOT, true); + + Assert(slot); + + SpinLockAcquire(&slot->mutex); + oldestxmin = slot->data.xmin; + SpinLockRelease(&slot->mutex); + + Assert(TransactionIdIsValid(oldestxmin)); + + if (OidIsValid(localidxoid) && + IsIndexUsableForFindingDeletedTuple(localidxoid, oldestxmin)) + return RelationFindDeletedTupleInfoByIndex(localrel, localidxoid, + remoteslot, oldestxmin, + delete_xid, delete_origin, + delete_time); + else + return RelationFindDeletedTupleInfoSeq(localrel, remoteslot, + oldestxmin, delete_xid, + delete_origin, delete_time); +} + /* * This handles insert, update, delete on a partitioned table. */ @@ -3079,18 +3386,35 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, remoteslot_part, &localslot); if (!found) { + ConflictType type; TupleTableSlot *newslot = localslot; + /* + * Detecting whether the tuple was recently deleted or + * never existed is crucial to avoid misleading the user + * during conflict handling. + */ + if (FindDeletedTupleInLocalRel(partrel, + part_entry->localindexoid, + remoteslot_part, + &conflicttuple.xmin, + &conflicttuple.origin, + &conflicttuple.ts) && + conflicttuple.origin != replorigin_session_origin) + type = CT_UPDATE_DELETED; + else + type = CT_UPDATE_MISSING; + /* Store the new tuple for conflict reporting */ slot_store_data(newslot, part_entry, newtup); /* - * The tuple to be updated could not be found. Do nothing - * except for emitting a log message. + * The tuple to be updated could not be found or was + * deleted. Do nothing except for emitting a log message. */ ReportApplyConflict(estate, partrelinfo, LOG, - CT_UPDATE_MISSING, remoteslot_part, - newslot, list_make1(&conflicttuple)); + type, remoteslot_part, newslot, + list_make1(&conflicttuple)); return; } @@ -3582,6 +3906,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) bool ping_sent = false; TimeLineID tli; ErrorContextCallback errcallback; + RetainDeadTuplesData rdt_data = {0}; /* * Init the ApplyMessageContext which we clean up after each replication @@ -3660,6 +3985,8 @@ LogicalRepApplyLoop(XLogRecPtr last_received) last_recv_timestamp = GetCurrentTimestamp(); ping_sent = false; + rdt_data.last_recv_time = last_recv_timestamp; + /* Ensure we are reading the data into our memory context. */ MemoryContextSwitchTo(ApplyMessageContext); @@ -3667,7 +3994,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) c = pq_getmsgbyte(&s); - if (c == 'w') + if (c == PqReplMsg_WALData) { XLogRecPtr start_lsn; XLogRecPtr end_lsn; @@ -3686,8 +4013,10 @@ LogicalRepApplyLoop(XLogRecPtr last_received) UpdateWorkerStats(last_received, send_time, false); apply_dispatch(&s); + + maybe_advance_nonremovable_xid(&rdt_data, false); } - else if (c == 'k') + else if (c == PqReplMsg_Keepalive) { XLogRecPtr end_lsn; TimestampTz timestamp; @@ -3701,8 +4030,31 @@ LogicalRepApplyLoop(XLogRecPtr last_received) last_received = end_lsn; send_feedback(last_received, reply_requested, false); + + maybe_advance_nonremovable_xid(&rdt_data, false); + UpdateWorkerStats(last_received, timestamp, true); } + else if (c == PqReplMsg_PrimaryStatusUpdate) + { + rdt_data.remote_lsn = pq_getmsgint64(&s); + rdt_data.remote_oldestxid = FullTransactionIdFromU64((uint64) pq_getmsgint64(&s)); + rdt_data.remote_nextxid = FullTransactionIdFromU64((uint64) pq_getmsgint64(&s)); + rdt_data.reply_time = pq_getmsgint64(&s); + + /* + * This should never happen, see + * ProcessStandbyPSRequestMessage. But if it happens + * due to a bug, we don't want to proceed as it can + * incorrectly advance oldest_nonremovable_xid. + */ + if (XLogRecPtrIsInvalid(rdt_data.remote_lsn)) + elog(ERROR, "cannot get the latest WAL position from the publisher"); + + maybe_advance_nonremovable_xid(&rdt_data, true); + + UpdateWorkerStats(last_received, rdt_data.reply_time, false); + } /* other message types are purposefully ignored */ MemoryContextReset(ApplyMessageContext); @@ -3715,6 +4067,11 @@ LogicalRepApplyLoop(XLogRecPtr last_received) /* confirm all writes so far */ send_feedback(last_received, false, false); + /* Reset the timestamp if no message was received */ + rdt_data.last_recv_time = 0; + + maybe_advance_nonremovable_xid(&rdt_data, false); + if (!in_remote_transaction && !in_streamed_transaction) { /* @@ -3749,6 +4106,14 @@ LogicalRepApplyLoop(XLogRecPtr last_received) else wait_time = NAPTIME_PER_CYCLE; + /* + * Ensure to wake up when it's possible to advance the non-removable + * transaction ID. + */ + if (rdt_data.phase == RDT_GET_CANDIDATE_XID && + rdt_data.xid_advance_interval) + wait_time = Min(wait_time, rdt_data.xid_advance_interval); + rc = WaitLatchOrSocket(MyLatch, WL_SOCKET_READABLE | WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, @@ -3812,6 +4177,8 @@ LogicalRepApplyLoop(XLogRecPtr last_received) send_feedback(last_received, requestReply, requestReply); + maybe_advance_nonremovable_xid(&rdt_data, false); + /* * Force reporting to ensure long idle periods don't lead to * arbitrarily delayed stats. Stats can only be reported outside @@ -3847,7 +4214,6 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply) static XLogRecPtr last_recvpos = InvalidXLogRecPtr; static XLogRecPtr last_writepos = InvalidXLogRecPtr; - static XLogRecPtr last_flushpos = InvalidXLogRecPtr; XLogRecPtr writepos; XLogRecPtr flushpos; @@ -3901,14 +4267,14 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply) else resetStringInfo(reply_message); - pq_sendbyte(reply_message, 'r'); + pq_sendbyte(reply_message, PqReplMsg_StandbyStatusUpdate); pq_sendint64(reply_message, recvpos); /* write */ pq_sendint64(reply_message, flushpos); /* flush */ pq_sendint64(reply_message, writepos); /* apply */ pq_sendint64(reply_message, now); /* sendTime */ pq_sendbyte(reply_message, requestReply); /* replyRequested */ - elog(DEBUG2, "sending feedback (force %d) to recv %X/%X, write %X/%X, flush %X/%X", + elog(DEBUG2, "sending feedback (force %d) to recv %X/%08X, write %X/%08X, flush %X/%08X", force, LSN_FORMAT_ARGS(recvpos), LSN_FORMAT_ARGS(writepos), @@ -3925,6 +4291,368 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply) last_flushpos = flushpos; } +/* + * Attempt to advance the non-removable transaction ID. + * + * See comments atop worker.c for details. + */ +static void +maybe_advance_nonremovable_xid(RetainDeadTuplesData *rdt_data, + bool status_received) +{ + if (!can_advance_nonremovable_xid(rdt_data)) + return; + + process_rdt_phase_transition(rdt_data, status_received); +} + +/* + * Preliminary check to determine if advancing the non-removable transaction ID + * is allowed. + */ +static bool +can_advance_nonremovable_xid(RetainDeadTuplesData *rdt_data) +{ + /* + * It is sufficient to manage non-removable transaction ID for a + * subscription by the main apply worker to detect update_deleted reliably + * even for table sync or parallel apply workers. + */ + if (!am_leader_apply_worker()) + return false; + + /* No need to advance if retaining dead tuples is not required */ + if (!MySubscription->retaindeadtuples) + return false; + + return true; +} + +/* + * Process phase transitions during the non-removable transaction ID + * advancement. See comments atop worker.c for details of the transition. + */ +static void +process_rdt_phase_transition(RetainDeadTuplesData *rdt_data, + bool status_received) +{ + switch (rdt_data->phase) + { + case RDT_GET_CANDIDATE_XID: + get_candidate_xid(rdt_data); + break; + case RDT_REQUEST_PUBLISHER_STATUS: + request_publisher_status(rdt_data); + break; + case RDT_WAIT_FOR_PUBLISHER_STATUS: + wait_for_publisher_status(rdt_data, status_received); + break; + case RDT_WAIT_FOR_LOCAL_FLUSH: + wait_for_local_flush(rdt_data); + break; + } +} + +/* + * Workhorse for the RDT_GET_CANDIDATE_XID phase. + */ +static void +get_candidate_xid(RetainDeadTuplesData *rdt_data) +{ + TransactionId oldest_running_xid; + TimestampTz now; + + /* + * Use last_recv_time when applying changes in the loop to avoid + * unnecessary system time retrieval. If last_recv_time is not available, + * obtain the current timestamp. + */ + now = rdt_data->last_recv_time ? rdt_data->last_recv_time : GetCurrentTimestamp(); + + /* + * Compute the candidate_xid and request the publisher status at most once + * per xid_advance_interval. Refer to adjust_xid_advance_interval() for + * details on how this value is dynamically adjusted. This is to avoid + * using CPU and network resources without making much progress. + */ + if (!TimestampDifferenceExceeds(rdt_data->candidate_xid_time, now, + rdt_data->xid_advance_interval)) + return; + + /* + * Immediately update the timer, even if the function returns later + * without setting candidate_xid due to inactivity on the subscriber. This + * avoids frequent calls to GetOldestActiveTransactionId. + */ + rdt_data->candidate_xid_time = now; + + /* + * Consider transactions in the current database, as only dead tuples from + * this database are required for conflict detection. + */ + oldest_running_xid = GetOldestActiveTransactionId(false, false); + + /* + * Oldest active transaction ID (oldest_running_xid) can't be behind any + * of its previously computed value. + */ + Assert(TransactionIdPrecedesOrEquals(MyLogicalRepWorker->oldest_nonremovable_xid, + oldest_running_xid)); + + /* Return if the oldest_nonremovable_xid cannot be advanced */ + if (TransactionIdEquals(MyLogicalRepWorker->oldest_nonremovable_xid, + oldest_running_xid)) + { + adjust_xid_advance_interval(rdt_data, false); + return; + } + + adjust_xid_advance_interval(rdt_data, true); + + rdt_data->candidate_xid = oldest_running_xid; + rdt_data->phase = RDT_REQUEST_PUBLISHER_STATUS; + + /* process the next phase */ + process_rdt_phase_transition(rdt_data, false); +} + +/* + * Workhorse for the RDT_REQUEST_PUBLISHER_STATUS phase. + */ +static void +request_publisher_status(RetainDeadTuplesData *rdt_data) +{ + static StringInfo request_message = NULL; + + if (!request_message) + { + MemoryContext oldctx = MemoryContextSwitchTo(ApplyContext); + + request_message = makeStringInfo(); + MemoryContextSwitchTo(oldctx); + } + else + resetStringInfo(request_message); + + /* + * Send the current time to update the remote walsender's latest reply + * message received time. + */ + pq_sendbyte(request_message, PqReplMsg_PrimaryStatusRequest); + pq_sendint64(request_message, GetCurrentTimestamp()); + + elog(DEBUG2, "sending publisher status request message"); + + /* Send a request for the publisher status */ + walrcv_send(LogRepWorkerWalRcvConn, + request_message->data, request_message->len); + + rdt_data->phase = RDT_WAIT_FOR_PUBLISHER_STATUS; + + /* + * Skip calling maybe_advance_nonremovable_xid() since further transition + * is possible only once we receive the publisher status message. + */ +} + +/* + * Workhorse for the RDT_WAIT_FOR_PUBLISHER_STATUS phase. + */ +static void +wait_for_publisher_status(RetainDeadTuplesData *rdt_data, + bool status_received) +{ + /* + * Return if we have requested but not yet received the publisher status. + */ + if (!status_received) + return; + + if (!FullTransactionIdIsValid(rdt_data->remote_wait_for)) + rdt_data->remote_wait_for = rdt_data->remote_nextxid; + + /* + * Check if all remote concurrent transactions that were active at the + * first status request have now completed. If completed, proceed to the + * next phase; otherwise, continue checking the publisher status until + * these transactions finish. + * + * It's possible that transactions in the commit phase during the last + * cycle have now finished committing, but remote_oldestxid remains older + * than remote_wait_for. This can happen if some old transaction came in + * the commit phase when we requested status in this cycle. We do not + * handle this case explicitly as it's rare and the benefit doesn't + * justify the required complexity. Tracking would require either caching + * all xids at the publisher or sending them to subscribers. The condition + * will resolve naturally once the remaining transactions are finished. + * + * Directly advancing the non-removable transaction ID is possible if + * there are no activities on the publisher since the last advancement + * cycle. However, it requires maintaining two fields, last_remote_nextxid + * and last_remote_lsn, within the structure for comparison with the + * current cycle's values. Considering the minimal cost of continuing in + * RDT_WAIT_FOR_LOCAL_FLUSH without awaiting changes, we opted not to + * advance the transaction ID here. + */ + if (FullTransactionIdPrecedesOrEquals(rdt_data->remote_wait_for, + rdt_data->remote_oldestxid)) + rdt_data->phase = RDT_WAIT_FOR_LOCAL_FLUSH; + else + rdt_data->phase = RDT_REQUEST_PUBLISHER_STATUS; + + /* process the next phase */ + process_rdt_phase_transition(rdt_data, false); +} + +/* + * Workhorse for the RDT_WAIT_FOR_LOCAL_FLUSH phase. + */ +static void +wait_for_local_flush(RetainDeadTuplesData *rdt_data) +{ + Assert(!XLogRecPtrIsInvalid(rdt_data->remote_lsn) && + TransactionIdIsValid(rdt_data->candidate_xid)); + + /* + * We expect the publisher and subscriber clocks to be in sync using time + * sync service like NTP. Otherwise, we will advance this worker's + * oldest_nonremovable_xid prematurely, leading to the removal of rows + * required to detect update_deleted reliably. This check primarily + * addresses scenarios where the publisher's clock falls behind; if the + * publisher's clock is ahead, subsequent transactions will naturally bear + * later commit timestamps, conforming to the design outlined atop + * worker.c. + * + * XXX Consider waiting for the publisher's clock to catch up with the + * subscriber's before proceeding to the next phase. + */ + if (TimestampDifferenceExceeds(rdt_data->reply_time, + rdt_data->candidate_xid_time, 0)) + ereport(ERROR, + errmsg_internal("oldest_nonremovable_xid transaction ID could be advanced prematurely"), + errdetail_internal("The clock on the publisher is behind that of the subscriber.")); + + /* + * Do not attempt to advance the non-removable transaction ID when table + * sync is in progress. During this time, changes from a single + * transaction may be applied by multiple table sync workers corresponding + * to the target tables. So, it's necessary for all table sync workers to + * apply and flush the corresponding changes before advancing the + * transaction ID, otherwise, dead tuples that are still needed for + * conflict detection in table sync workers could be removed prematurely. + * However, confirming the apply and flush progress across all table sync + * workers is complex and not worth the effort, so we simply return if not + * all tables are in the READY state. + * + * It is safe to add new tables with initial states to the subscription + * after this check because any changes applied to these tables should + * have a WAL position greater than the rdt_data->remote_lsn. + */ + if (!AllTablesyncsReady()) + return; + + /* + * Update and check the remote flush position if we are applying changes + * in a loop. This is done at most once per WalWriterDelay to avoid + * performing costly operations in get_flush_position() too frequently + * during change application. + */ + if (last_flushpos < rdt_data->remote_lsn && rdt_data->last_recv_time && + TimestampDifferenceExceeds(rdt_data->flushpos_update_time, + rdt_data->last_recv_time, WalWriterDelay)) + { + XLogRecPtr writepos; + XLogRecPtr flushpos; + bool have_pending_txes; + + /* Fetch the latest remote flush position */ + get_flush_position(&writepos, &flushpos, &have_pending_txes); + + if (flushpos > last_flushpos) + last_flushpos = flushpos; + + rdt_data->flushpos_update_time = rdt_data->last_recv_time; + } + + /* Return to wait for the changes to be applied */ + if (last_flushpos < rdt_data->remote_lsn) + return; + + /* + * Reaching here means the remote WAL position has been received, and all + * transactions up to that position on the publisher have been applied and + * flushed locally. So, we can advance the non-removable transaction ID. + */ + SpinLockAcquire(&MyLogicalRepWorker->relmutex); + MyLogicalRepWorker->oldest_nonremovable_xid = rdt_data->candidate_xid; + SpinLockRelease(&MyLogicalRepWorker->relmutex); + + elog(DEBUG2, "confirmed flush up to remote lsn %X/%08X: new oldest_nonremovable_xid %u", + LSN_FORMAT_ARGS(rdt_data->remote_lsn), + rdt_data->candidate_xid); + + /* Notify launcher to update the xmin of the conflict slot */ + ApplyLauncherWakeup(); + + /* + * Reset all data fields except those used to determine the timing for the + * next round of transaction ID advancement. We can even use + * flushpos_update_time in the next round to decide whether to get the + * latest flush position. + */ + rdt_data->phase = RDT_GET_CANDIDATE_XID; + rdt_data->remote_lsn = InvalidXLogRecPtr; + rdt_data->remote_oldestxid = InvalidFullTransactionId; + rdt_data->remote_nextxid = InvalidFullTransactionId; + rdt_data->reply_time = 0; + rdt_data->remote_wait_for = InvalidFullTransactionId; + rdt_data->candidate_xid = InvalidTransactionId; + + /* process the next phase */ + process_rdt_phase_transition(rdt_data, false); +} + +/* + * Adjust the interval for advancing non-removable transaction IDs. + * + * We double the interval to try advancing the non-removable transaction IDs + * if there is no activity on the node. The maximum value of the interval is + * capped by wal_receiver_status_interval if it is not zero, otherwise to a + * 3 minutes which should be sufficient to avoid using CPU or network + * resources without much benefit. + * + * The interval is reset to a minimum value of 100ms once there is some + * activity on the node. + * + * XXX The use of wal_receiver_status_interval is a bit arbitrary so we can + * consider the other interval or a separate GUC if the need arises. + */ +static void +adjust_xid_advance_interval(RetainDeadTuplesData *rdt_data, bool new_xid_found) +{ + if (!new_xid_found && rdt_data->xid_advance_interval) + { + int max_interval = wal_receiver_status_interval + ? wal_receiver_status_interval * 1000 + : MAX_XID_ADVANCE_INTERVAL; + + /* + * No new transaction ID has been assigned since the last check, so + * double the interval, but not beyond the maximum allowable value. + */ + rdt_data->xid_advance_interval = Min(rdt_data->xid_advance_interval * 2, + max_interval); + } + else + { + /* + * A new transaction ID was found or the interval is not yet + * initialized, so set the interval to the minimum value. + */ + rdt_data->xid_advance_interval = MIN_XID_ADVANCE_INTERVAL; + } +} + /* * Exit routine for apply workers due to subscription parameter changes. */ @@ -4516,6 +5244,14 @@ start_apply(XLogRecPtr origin_startpos) } PG_CATCH(); { + /* + * Reset the origin state to prevent the advancement of origin + * progress if we fail to apply. Otherwise, this will result in + * transaction loss as that transaction won't be sent again by the + * server. + */ + replorigin_reset(0, (Datum) 0); + if (MySubscription->disableonerr) DisableSubscriptionAndExit(); else @@ -4616,8 +5352,16 @@ run_apply_worker() walrcv_startstreaming(LogRepWorkerWalRcvConn, &options); StartTransactionCommand(); + + /* + * Updating pg_subscription might involve TOAST table access, so + * ensure we have a valid snapshot. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + UpdateTwoPhaseState(MySubscription->oid, LOGICALREP_TWOPHASE_STATE_ENABLED); MySubscription->twophasestate = LOGICALREP_TWOPHASE_STATE_ENABLED; + PopActiveSnapshot(); CommitTransactionCommand(); } else @@ -4671,6 +5415,13 @@ InitializeLogRepWorker(void) StartTransactionCommand(); oldctx = MemoryContextSwitchTo(ApplyContext); + /* + * Lock the subscription to prevent it from being concurrently dropped, + * then re-verify its existence. After the initialization, the worker will + * be terminated gracefully if the subscription is dropped. + */ + LockSharedObject(SubscriptionRelationId, MyLogicalRepWorker->subid, 0, + AccessShareLock); MySubscription = GetSubscription(MyLogicalRepWorker->subid, true); if (!MySubscription) { @@ -4697,6 +5448,30 @@ InitializeLogRepWorker(void) apply_worker_exit(); } + /* + * Restart the worker if retain_dead_tuples was enabled during startup. + * + * At this point, the replication slot used for conflict detection might + * not exist yet, or could be dropped soon if the launcher perceives + * retain_dead_tuples as disabled. To avoid unnecessary tracking of + * oldest_nonremovable_xid when the slot is absent or at risk of being + * dropped, a restart is initiated. + * + * The oldest_nonremovable_xid should be initialized only when the + * retain_dead_tuples is enabled before launching the worker. See + * logicalrep_worker_launch. + */ + if (am_leader_apply_worker() && + MySubscription->retaindeadtuples && + !TransactionIdIsValid(MyLogicalRepWorker->oldest_nonremovable_xid)) + { + ereport(LOG, + errmsg("logical replication worker for subscription \"%s\" will restart because the option %s was enabled during startup", + MySubscription->name, "retain_dead_tuples")); + + apply_worker_exit(); + } + /* Setup synchronous commit according to the user's wishes */ SetConfigOption("synchronous_commit", MySubscription->synccommit, PGC_BACKEND, PGC_S_OVERRIDE); @@ -4833,7 +5608,15 @@ DisableSubscriptionAndExit(void) /* Disable the subscription */ StartTransactionCommand(); + + /* + * Updating pg_subscription might involve TOAST table access, so ensure we + * have a valid snapshot. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + DisableSubscription(MySubscription->oid); + PopActiveSnapshot(); CommitTransactionCommand(); /* Ensure we remove no-longer-useful entry for worker's start time */ @@ -4845,6 +5628,14 @@ DisableSubscriptionAndExit(void) errmsg("subscription \"%s\" has been disabled because of an error", MySubscription->name)); + /* + * Skip the track_commit_timestamp check when disabling the worker due to + * an error, as verifying commit timestamps is unnecessary in this + * context. + */ + if (MySubscription->retaindeadtuples) + CheckSubDeadTupleRetention(false, true, WARNING); + proc_exit(0); } @@ -4890,7 +5681,7 @@ maybe_start_skipping_changes(XLogRecPtr finish_lsn) skip_xact_finish_lsn = finish_lsn; ereport(LOG, - errmsg("logical replication starts skipping transaction at LSN %X/%X", + errmsg("logical replication starts skipping transaction at LSN %X/%08X", LSN_FORMAT_ARGS(skip_xact_finish_lsn))); } @@ -4904,8 +5695,8 @@ stop_skipping_changes(void) return; ereport(LOG, - (errmsg("logical replication completed skipping transaction at LSN %X/%X", - LSN_FORMAT_ARGS(skip_xact_finish_lsn)))); + errmsg("logical replication completed skipping transaction at LSN %X/%08X", + LSN_FORMAT_ARGS(skip_xact_finish_lsn))); /* Stop skipping changes */ skip_xact_finish_lsn = InvalidXLogRecPtr; @@ -4937,6 +5728,12 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn) started_tx = true; } + /* + * Updating pg_subscription might involve TOAST table access, so ensure we + * have a valid snapshot. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + /* * Protect subskiplsn of pg_subscription from being concurrently updated * while clearing it. @@ -4987,7 +5784,7 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn) if (myskiplsn != finish_lsn) ereport(WARNING, errmsg("skip-LSN of subscription \"%s\" cleared", MySubscription->name), - errdetail("Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X.", + errdetail("Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X.", LSN_FORMAT_ARGS(finish_lsn), LSN_FORMAT_ARGS(myskiplsn))); } @@ -4995,6 +5792,8 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn) heap_freetuple(tup); table_close(rel, NoLock); + PopActiveSnapshot(); + if (started_tx) CommitTransactionCommand(); } @@ -5004,23 +5803,12 @@ void apply_error_callback(void *arg) { ApplyErrorCallbackArg *errarg = &apply_error_callback_arg; - int elevel; if (apply_error_callback_arg.command == 0) return; Assert(errarg->origin_name); - elevel = geterrlevel(); - - /* - * Reset the origin state to prevent the advancement of origin progress if - * we fail to apply. Otherwise, this will result in transaction loss as - * that transaction won't be sent again by the server. - */ - if (elevel >= ERROR) - replorigin_reset(0, (Datum) 0); - if (errarg->rel == NULL) { if (!TransactionIdIsValid(errarg->remote_xid)) @@ -5033,7 +5821,7 @@ apply_error_callback(void *arg) logicalrep_message_type(errarg->command), errarg->remote_xid); else - errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X", + errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X", errarg->origin_name, logicalrep_message_type(errarg->command), errarg->remote_xid, @@ -5051,7 +5839,7 @@ apply_error_callback(void *arg) errarg->rel->remoterel.relname, errarg->remote_xid); else - errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X", + errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X", errarg->origin_name, logicalrep_message_type(errarg->command), errarg->rel->remoterel.nspname, @@ -5070,7 +5858,7 @@ apply_error_callback(void *arg) errarg->rel->remoterel.attnames[errarg->remote_attnum], errarg->remote_xid); else - errcontext("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", + errcontext("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/%08X", errarg->origin_name, logicalrep_message_type(errarg->command), errarg->rel->remoterel.nspname, diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 693a766e6d75f..80540c017bd3a 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -297,10 +297,12 @@ parse_output_parameters(List *options, PGOutputData *data) bool two_phase_option_given = false; bool origin_option_given = false; + /* Initialize optional parameters to defaults */ data->binary = false; data->streaming = LOGICALREP_STREAM_OFF; data->messages = false; data->two_phase = false; + data->publish_no_origin = false; foreach(lc, options) { @@ -1372,8 +1374,8 @@ pgoutput_row_filter(Relation relation, TupleTableSlot *old_slot, * VARTAG_INDIRECT. See ReorderBufferToastReplace. */ if (att->attlen == -1 && - VARATT_IS_EXTERNAL_ONDISK(new_slot->tts_values[i]) && - !VARATT_IS_EXTERNAL_ONDISK(old_slot->tts_values[i])) + VARATT_IS_EXTERNAL_ONDISK(DatumGetPointer(new_slot->tts_values[i])) && + !VARATT_IS_EXTERNAL_ONDISK(DatumGetPointer(old_slot->tts_values[i]))) { if (!tmp_new_slot) { @@ -1789,7 +1791,7 @@ LoadPublications(List *pubnames) else ereport(WARNING, errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("skipped loading publication: %s", pubname), + errmsg("skipped loading publication \"%s\"", pubname), errdetail("The publication does not exist at this point in the WAL."), errhint("Create the publication if it does not exist.")); } diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y index 7440aae5a1a7e..8a649199ec69c 100644 --- a/src/backend/replication/repl_gram.y +++ b/src/backend/replication/repl_gram.y @@ -279,7 +279,7 @@ alter_replication_slot: ; /* - * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%X [TIMELINE %u] + * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%08X [TIMELINE %u] */ start_replication: K_START_REPLICATION opt_slot opt_physical RECPTR opt_timeline @@ -295,7 +295,7 @@ start_replication: } ; -/* START_REPLICATION SLOT slot LOGICAL %X/%X options */ +/* START_REPLICATION SLOT slot LOGICAL %X/%08X options */ start_logical_replication: K_START_REPLICATION K_SLOT IDENT K_LOGICAL RECPTR plugin_options { diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l index 014ea8d25c6b7..b6930e2865953 100644 --- a/src/backend/replication/repl_scanner.l +++ b/src/backend/replication/repl_scanner.l @@ -155,7 +155,7 @@ UPLOAD_MANIFEST { return K_UPLOAD_MANIFEST; } {hexdigit}+\/{hexdigit}+ { uint32 hi, lo; - if (sscanf(yytext, "%X/%X", &hi, &lo) != 2) + if (sscanf(yytext, "%X/%08X", &hi, &lo) != 2) replication_yyerror(NULL, yyscanner, "invalid streaming start location"); yylval->recptr = ((uint64) hi) << 32 | lo; return RECPTR; diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 600b87fa9cb65..fd0fdb96d4246 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -47,6 +47,7 @@ #include "miscadmin.h" #include "pgstat.h" #include "postmaster/interrupt.h" +#include "replication/logicallauncher.h" #include "replication/slotsync.h" #include "replication/slot.h" #include "replication/walsender_private.h" @@ -154,7 +155,7 @@ int max_replication_slots = 10; /* the maximum number of replication * Invalidate replication slots that have remained idle longer than this * duration; '0' disables it. */ -int idle_replication_slot_timeout_mins = 0; +int idle_replication_slot_timeout_secs = 0; /* * This GUC lists streaming replication standby server slot names that @@ -172,6 +173,7 @@ static SyncStandbySlotsConfigData *synchronized_standby_slots_config; static XLogRecPtr ss_oldest_flush_lsn = InvalidXLogRecPtr; static void ReplicationSlotShmemExit(int code, Datum arg); +static bool IsSlotForConflictCheck(const char *name); static void ReplicationSlotDropPtr(ReplicationSlot *slot); /* internal persistency functions */ @@ -258,13 +260,17 @@ ReplicationSlotShmemExit(int code, Datum arg) /* * Check whether the passed slot name is valid and report errors at elevel. * + * An error will be reported for a reserved replication slot name if + * allow_reserved_name is set to false. + * * Slot names may consist out of [a-z0-9_]{1,NAMEDATALEN-1} which should allow * the name to be used as a directory name on every supported OS. * * Returns whether the directory name is valid or not if elevel < ERROR. */ bool -ReplicationSlotValidateName(const char *name, int elevel) +ReplicationSlotValidateName(const char *name, bool allow_reserved_name, + int elevel) { const char *cp; @@ -300,9 +306,31 @@ ReplicationSlotValidateName(const char *name, int elevel) return false; } } + + if (!allow_reserved_name && IsSlotForConflictCheck(name)) + { + ereport(elevel, + errcode(ERRCODE_RESERVED_NAME), + errmsg("replication slot name \"%s\" is reserved", + name), + errdetail("The name \"%s\" is reserved for the conflict detection slot.", + CONFLICT_DETECTION_SLOT)); + + return false; + } + return true; } +/* + * Return true if the replication slot name is "pg_conflict_detection". + */ +static bool +IsSlotForConflictCheck(const char *name) +{ + return (strcmp(name, CONFLICT_DETECTION_SLOT) == 0); +} + /* * Create a new replication slot and mark it as used by this backend. * @@ -330,7 +358,12 @@ ReplicationSlotCreate(const char *name, bool db_specific, Assert(MyReplicationSlot == NULL); - ReplicationSlotValidateName(name, ERROR); + /* + * The logical launcher or pg_upgrade may create or migrate an internal + * slot, so using a reserved name is allowed in these cases. + */ + ReplicationSlotValidateName(name, IsBinaryUpgrade || IsLogicalLauncher(), + ERROR); if (failover) { @@ -424,6 +457,7 @@ ReplicationSlotCreate(const char *name, bool db_specific, slot->candidate_restart_valid = InvalidXLogRecPtr; slot->candidate_restart_lsn = InvalidXLogRecPtr; slot->last_saved_confirmed_flush = InvalidXLogRecPtr; + slot->last_saved_restart_lsn = InvalidXLogRecPtr; slot->inactive_since = 0; /* @@ -580,6 +614,17 @@ ReplicationSlotAcquire(const char *name, bool nowait, bool error_if_invalid) name))); } + /* + * Do not allow users to acquire the reserved slot. This scenario may + * occur if the launcher that owns the slot has terminated unexpectedly + * due to an error, and a backend process attempts to reuse the slot. + */ + if (!IsLogicalLauncher() && IsSlotForConflictCheck(name)) + ereport(ERROR, + errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("cannot acquire replication slot \"%s\"", name), + errdetail("The slot is reserved for conflict detection and can only be acquired by logical replication launcher.")); + /* * This is the slot we want; check if it's active under some other * process. In single user mode, we don't need this check. @@ -608,7 +653,7 @@ ReplicationSlotAcquire(const char *name, bool nowait, bool error_if_invalid) } else { - active_pid = MyProcPid; + s->active_pid = active_pid = MyProcPid; ReplicationSlotSetInactiveSince(s, 0, true); } LWLockRelease(ReplicationSlotControlLock); @@ -1165,20 +1210,41 @@ ReplicationSlotsComputeRequiredLSN(void) { ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i]; XLogRecPtr restart_lsn; + XLogRecPtr last_saved_restart_lsn; bool invalidated; + ReplicationSlotPersistency persistency; if (!s->in_use) continue; SpinLockAcquire(&s->mutex); + persistency = s->data.persistency; restart_lsn = s->data.restart_lsn; invalidated = s->data.invalidated != RS_INVAL_NONE; + last_saved_restart_lsn = s->last_saved_restart_lsn; SpinLockRelease(&s->mutex); /* invalidated slots need not apply */ if (invalidated) continue; + /* + * For persistent slot use last_saved_restart_lsn to compute the + * oldest LSN for removal of WAL segments. The segments between + * last_saved_restart_lsn and restart_lsn might be needed by a + * persistent slot in the case of database crash. Non-persistent + * slots can't survive the database crash, so we don't care about + * last_saved_restart_lsn for them. + */ + if (persistency == RS_PERSISTENT) + { + if (last_saved_restart_lsn != InvalidXLogRecPtr && + restart_lsn > last_saved_restart_lsn) + { + restart_lsn = last_saved_restart_lsn; + } + } + if (restart_lsn != InvalidXLogRecPtr && (min_required == InvalidXLogRecPtr || restart_lsn < min_required)) @@ -1216,7 +1282,9 @@ ReplicationSlotsComputeLogicalRestartLSN(void) { ReplicationSlot *s; XLogRecPtr restart_lsn; + XLogRecPtr last_saved_restart_lsn; bool invalidated; + ReplicationSlotPersistency persistency; s = &ReplicationSlotCtl->replication_slots[i]; @@ -1230,14 +1298,33 @@ ReplicationSlotsComputeLogicalRestartLSN(void) /* read once, it's ok if it increases while we're checking */ SpinLockAcquire(&s->mutex); + persistency = s->data.persistency; restart_lsn = s->data.restart_lsn; invalidated = s->data.invalidated != RS_INVAL_NONE; + last_saved_restart_lsn = s->last_saved_restart_lsn; SpinLockRelease(&s->mutex); /* invalidated slots need not apply */ if (invalidated) continue; + /* + * For persistent slot use last_saved_restart_lsn to compute the + * oldest LSN for removal of WAL segments. The segments between + * last_saved_restart_lsn and restart_lsn might be needed by a + * persistent slot in the case of database crash. Non-persistent + * slots can't survive the database crash, so we don't care about + * last_saved_restart_lsn for them. + */ + if (persistency == RS_PERSISTENT) + { + if (last_saved_restart_lsn != InvalidXLogRecPtr && + restart_lsn > last_saved_restart_lsn) + { + restart_lsn = last_saved_restart_lsn; + } + } + if (restart_lsn == InvalidXLogRecPtr) continue; @@ -1455,6 +1542,7 @@ ReplicationSlotReserveWal(void) Assert(slot != NULL); Assert(slot->data.restart_lsn == InvalidXLogRecPtr); + Assert(slot->last_saved_restart_lsn == InvalidXLogRecPtr); /* * The replication slot mechanism is used to prevent removal of required @@ -1547,8 +1635,8 @@ ReportSlotInvalidation(ReplicationSlotInvalidationCause cause, uint64 ex = oldestLSN - restart_lsn; appendStringInfo(&err_detail, - ngettext("The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " byte.", - "The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " bytes.", + ngettext("The slot's restart_lsn %X/%08X exceeds the limit by %" PRIu64 " byte.", + "The slot's restart_lsn %X/%08X exceeds the limit by %" PRIu64 " bytes.", ex), LSN_FORMAT_ARGS(restart_lsn), ex); @@ -1568,13 +1656,10 @@ ReportSlotInvalidation(ReplicationSlotInvalidationCause cause, case RS_INVAL_IDLE_TIMEOUT: { - int minutes = slot_idle_seconds / SECS_PER_MINUTE; - int secs = slot_idle_seconds % SECS_PER_MINUTE; - /* translator: %s is a GUC variable name */ - appendStringInfo(&err_detail, _("The slot's idle time of %dmin %02ds exceeds the configured \"%s\" duration of %dmin."), - minutes, secs, "idle_replication_slot_timeout", - idle_replication_slot_timeout_mins); + appendStringInfo(&err_detail, _("The slot's idle time of %lds exceeds the configured \"%s\" duration of %ds."), + slot_idle_seconds, "idle_replication_slot_timeout", + idle_replication_slot_timeout_secs); /* translator: %s is a GUC variable name */ appendStringInfo(&err_hint, _("You might need to increase \"%s\"."), "idle_replication_slot_timeout"); @@ -1612,7 +1697,7 @@ ReportSlotInvalidation(ReplicationSlotInvalidationCause cause, static inline bool CanInvalidateIdleSlot(ReplicationSlot *s) { - return (idle_replication_slot_timeout_mins != 0 && + return (idle_replication_slot_timeout_secs != 0 && !XLogRecPtrIsInvalid(s->data.restart_lsn) && s->inactive_since > 0 && !(RecoveryInProgress() && s->data.synced)); @@ -1673,9 +1758,9 @@ DetermineSlotInvalidationCause(uint32 possible_causes, ReplicationSlot *s, if (CanInvalidateIdleSlot(s)) { /* - * We simulate the invalidation due to idle_timeout as the minimum - * time idle time is one minute which makes tests take a long - * time. + * Simulate the invalidation due to idle_timeout to test the + * timeout behavior promptly, without waiting for it to trigger + * naturally. */ #ifdef USE_INJECTION_POINTS if (IS_INJECTION_POINT_ATTACHED("slot-timeout-inval")) @@ -1690,7 +1775,7 @@ DetermineSlotInvalidationCause(uint32 possible_causes, ReplicationSlot *s, * idle_replication_slot_timeout GUC. */ if (TimestampDifferenceExceedsSeconds(s->inactive_since, now, - idle_replication_slot_timeout_mins * SECS_PER_MINUTE)) + idle_replication_slot_timeout_secs)) { *inactive_since = s->inactive_since; return RS_INVAL_IDLE_TIMEOUT; @@ -1835,7 +1920,10 @@ InvalidatePossiblyObsoleteSlot(uint32 possible_causes, * just rely on .invalidated. */ if (invalidation_cause == RS_INVAL_WAL_REMOVED) + { s->data.restart_lsn = InvalidXLogRecPtr; + s->last_saved_restart_lsn = InvalidXLogRecPtr; + } /* Let caller know */ *invalidated = true; @@ -1843,15 +1931,6 @@ InvalidatePossiblyObsoleteSlot(uint32 possible_causes, SpinLockRelease(&s->mutex); - /* - * The logical replication slots shouldn't be invalidated as GUC - * max_slot_wal_keep_size is set to -1 and - * idle_replication_slot_timeout is set to 0 during the binary - * upgrade. See check_old_cluster_for_valid_slots() where we ensure - * that no invalidated before the upgrade. - */ - Assert(!(*invalidated && SlotIsLogical(s) && IsBinaryUpgrade)); - /* * Calculate the idle time duration of the slot if slot is marked * invalidated with RS_INVAL_IDLE_TIMEOUT. @@ -1998,6 +2077,10 @@ InvalidateObsoleteReplicationSlots(uint32 possible_causes, if (!s->in_use) continue; + /* Prevent invalidation of logical slots during binary upgrade */ + if (SlotIsLogical(s) && IsBinaryUpgrade) + continue; + if (InvalidatePossiblyObsoleteSlot(possible_causes, s, oldestLSN, dboid, snapshotConflictHorizon, &invalidated)) @@ -2032,6 +2115,7 @@ void CheckPointReplicationSlots(bool is_shutdown) { int i; + bool last_saved_restart_lsn_updated = false; elog(DEBUG1, "performing replication slot checkpoint"); @@ -2076,9 +2160,23 @@ CheckPointReplicationSlots(bool is_shutdown) SpinLockRelease(&s->mutex); } + /* + * Track if we're going to update slot's last_saved_restart_lsn. We + * need this to know if we need to recompute the required LSN. + */ + if (s->last_saved_restart_lsn != s->data.restart_lsn) + last_saved_restart_lsn_updated = true; + SaveSlotToPath(s, path, LOG); } LWLockRelease(ReplicationSlotAllocationLock); + + /* + * Recompute the required LSN if SaveSlotToPath() updated + * last_saved_restart_lsn for any slot. + */ + if (last_saved_restart_lsn_updated) + ReplicationSlotsComputeRequiredLSN(); } /* @@ -2354,6 +2452,7 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel) if (!slot->just_dirtied) slot->dirty = false; slot->last_saved_confirmed_flush = cp.slotdata.confirmed_flush; + slot->last_saved_restart_lsn = cp.slotdata.restart_lsn; SpinLockRelease(&slot->mutex); LWLockRelease(&slot->io_in_progress_lock); @@ -2569,6 +2668,7 @@ RestoreSlotFromDisk(const char *name) slot->effective_xmin = cp.slotdata.xmin; slot->effective_catalog_xmin = cp.slotdata.catalog_xmin; slot->last_saved_confirmed_flush = cp.slotdata.confirmed_flush; + slot->last_saved_restart_lsn = cp.slotdata.restart_lsn; slot->candidate_catalog_xmin = InvalidTransactionId; slot->candidate_xmin_lsn = InvalidXLogRecPtr; @@ -2993,22 +3093,3 @@ WaitForStandbyConfirmation(XLogRecPtr wait_for_lsn) ConditionVariableCancelSleep(); } - -/* - * GUC check_hook for idle_replication_slot_timeout - * - * The value of idle_replication_slot_timeout must be set to 0 during - * a binary upgrade. See start_postmaster() in pg_upgrade for more details. - */ -bool -check_idle_replication_slot_timeout(int *newval, void **extra, GucSource source) -{ - if (IsBinaryUpgrade && *newval != 0) - { - GUC_check_errdetail("\"%s\" must be set to 0 during binary upgrade mode.", - "idle_replication_slot_timeout"); - return false; - } - - return true; -} diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index 146eef5871e28..69f4c6157c518 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -235,7 +235,7 @@ pg_drop_replication_slot(PG_FUNCTION_ARGS) Datum pg_get_replication_slots(PG_FUNCTION_ARGS) { -#define PG_GET_REPLICATION_SLOTS_COLS 19 +#define PG_GET_REPLICATION_SLOTS_COLS 20 ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; XLogRecPtr currlsn; int slotno; @@ -406,6 +406,12 @@ pg_get_replication_slots(PG_FUNCTION_ARGS) values[i++] = BoolGetDatum(slot_contents.data.two_phase); + if (slot_contents.data.two_phase && + !XLogRecPtrIsInvalid(slot_contents.data.two_phase_at)) + values[i++] = LSNGetDatum(slot_contents.data.two_phase_at); + else + nulls[i++] = true; + if (slot_contents.inactive_since > 0) values[i++] = TimestampTzGetDatum(slot_contents.inactive_since); else @@ -560,7 +566,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS) if (moveto < minlsn) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("cannot advance replication slot to %X/%X, minimum is %X/%X", + errmsg("cannot advance replication slot to %X/%08X, minimum is %X/%08X", LSN_FORMAT_ARGS(moveto), LSN_FORMAT_ARGS(minlsn)))); /* Do the actual slot update, depending on the slot type */ @@ -678,6 +684,13 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot) (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot copy a replication slot that doesn't reserve WAL"))); + /* Cannot copy an invalidated replication slot */ + if (first_slot_contents.data.invalidated != RS_INVAL_NONE) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot copy invalidated replication slot \"%s\"", + NameStr(*src_name))); + /* Overwrite params from optional arguments */ if (PG_NARGS() >= 3) temporary = PG_GETARG_BOOL(2); @@ -779,6 +792,20 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot) NameStr(*src_name)), errhint("Retry when the source replication slot's confirmed_flush_lsn is valid."))); + /* + * Copying an invalid slot doesn't make sense. Note that the source + * slot can become invalid after we create the new slot and copy the + * data of source slot. This is possible because the operations in + * InvalidateObsoleteReplicationSlots() are not serialized with this + * function. Even though we can't detect such a case here, the copied + * slot will become invalid in the next checkpoint cycle. + */ + if (second_slot_contents.data.invalidated != RS_INVAL_NONE) + ereport(ERROR, + errmsg("cannot copy replication slot \"%s\"", + NameStr(*src_name)), + errdetail("The source replication slot was invalidated during the copy operation.")); + /* Install copied values again */ SpinLockAcquire(&MyReplicationSlot->mutex); MyReplicationSlot->effective_xmin = copy_effective_xmin; diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index d75e396803551..32cf3a48b897d 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -161,16 +161,23 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit) * sync replication standby names defined. * * Since this routine gets called every commit time, it's important to - * exit quickly if sync replication is not requested. So we check - * WalSndCtl->sync_standbys_defined flag without the lock and exit - * immediately if it's false. If it's true, we need to check it again - * later while holding the lock, to check the flag and operate the sync - * rep queue atomically. This is necessary to avoid the race condition - * described in SyncRepUpdateSyncStandbysDefined(). On the other hand, if - * it's false, the lock is not necessary because we don't touch the queue. + * exit quickly if sync replication is not requested. + * + * We check WalSndCtl->sync_standbys_status flag without the lock and exit + * immediately if SYNC_STANDBY_INIT is set (the checkpointer has + * initialized this data) but SYNC_STANDBY_DEFINED is missing (no sync + * replication requested). + * + * If SYNC_STANDBY_DEFINED is set, we need to check the status again later + * while holding the lock, to check the flag and operate the sync rep + * queue atomically. This is necessary to avoid the race condition + * described in SyncRepUpdateSyncStandbysDefined(). On the other hand, if + * SYNC_STANDBY_DEFINED is not set, the lock is not necessary because we + * don't touch the queue. */ if (!SyncRepRequested() || - !((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_defined) + ((((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_status) & + (SYNC_STANDBY_INIT | SYNC_STANDBY_DEFINED)) == SYNC_STANDBY_INIT) return; /* Cap the level for anything other than commit to remote flush only. */ @@ -186,16 +193,52 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit) Assert(MyProc->syncRepState == SYNC_REP_NOT_WAITING); /* - * We don't wait for sync rep if WalSndCtl->sync_standbys_defined is not - * set. See SyncRepUpdateSyncStandbysDefined. + * We don't wait for sync rep if SYNC_STANDBY_DEFINED is not set. See + * SyncRepUpdateSyncStandbysDefined(). * * Also check that the standby hasn't already replied. Unlikely race * condition but we'll be fetching that cache line anyway so it's likely * to be a low cost check. + * + * If the sync standby data has not been initialized yet + * (SYNC_STANDBY_INIT is not set), fall back to a check based on the LSN, + * then do a direct GUC check. */ - if (!WalSndCtl->sync_standbys_defined || - lsn <= WalSndCtl->lsn[mode]) + if (WalSndCtl->sync_standbys_status & SYNC_STANDBY_INIT) + { + if ((WalSndCtl->sync_standbys_status & SYNC_STANDBY_DEFINED) == 0 || + lsn <= WalSndCtl->lsn[mode]) + { + LWLockRelease(SyncRepLock); + return; + } + } + else if (lsn <= WalSndCtl->lsn[mode]) { + /* + * The LSN is older than what we need to wait for. The sync standby + * data has not been initialized yet, but we are OK to not wait + * because we know that there is no point in doing so based on the + * LSN. + */ + LWLockRelease(SyncRepLock); + return; + } + else if (!SyncStandbysDefined()) + { + /* + * If we are here, the sync standby data has not been initialized yet, + * and the LSN is newer than what need to wait for, so we have fallen + * back to the best thing we could do in this case: a check on + * SyncStandbysDefined() to see if the GUC is set or not. + * + * When the GUC has a value, we wait until the checkpointer updates + * the status data because we cannot be sure yet if we should wait or + * not. Here, the GUC has *no* value, we are sure that there is no + * point to wait; this matters for example when initializing a + * cluster, where we should never wait, and no sync standbys is the + * default behavior. + */ LWLockRelease(SyncRepLock); return; } @@ -215,7 +258,7 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit) { char buffer[32]; - sprintf(buffer, "waiting for %X/%X", LSN_FORMAT_ARGS(lsn)); + sprintf(buffer, "waiting for %X/%08X", LSN_FORMAT_ARGS(lsn)); set_ps_display_suffix(buffer); } @@ -523,7 +566,7 @@ SyncRepReleaseWaiters(void) LWLockRelease(SyncRepLock); - elog(DEBUG3, "released %d procs up to write %X/%X, %d procs up to flush %X/%X, %d procs up to apply %X/%X", + elog(DEBUG3, "released %d procs up to write %X/%08X, %d procs up to flush %X/%08X, %d procs up to apply %X/%08X", numwrite, LSN_FORMAT_ARGS(writePtr), numflush, LSN_FORMAT_ARGS(flushPtr), numapply, LSN_FORMAT_ARGS(applyPtr)); @@ -912,7 +955,7 @@ SyncRepWakeQueue(bool all, int mode) /* * The checkpointer calls this as needed to update the shared - * sync_standbys_defined flag, so that backends don't remain permanently wedged + * sync_standbys_status flag, so that backends don't remain permanently wedged * if synchronous_standby_names is unset. It's safe to check the current value * without the lock, because it's only ever updated by one process. But we * must take the lock to change it. @@ -922,7 +965,8 @@ SyncRepUpdateSyncStandbysDefined(void) { bool sync_standbys_defined = SyncStandbysDefined(); - if (sync_standbys_defined != WalSndCtl->sync_standbys_defined) + if (sync_standbys_defined != + ((WalSndCtl->sync_standbys_status & SYNC_STANDBY_DEFINED) != 0)) { LWLockAcquire(SyncRepLock, LW_EXCLUSIVE); @@ -946,7 +990,30 @@ SyncRepUpdateSyncStandbysDefined(void) * backend that hasn't yet reloaded its config might go to sleep on * the queue (and never wake up). This prevents that. */ - WalSndCtl->sync_standbys_defined = sync_standbys_defined; + WalSndCtl->sync_standbys_status = SYNC_STANDBY_INIT | + (sync_standbys_defined ? SYNC_STANDBY_DEFINED : 0); + + LWLockRelease(SyncRepLock); + } + else if ((WalSndCtl->sync_standbys_status & SYNC_STANDBY_INIT) == 0) + { + LWLockAcquire(SyncRepLock, LW_EXCLUSIVE); + + /* + * Note that there is no need to wake up the queues here. We would + * reach this path only if SyncStandbysDefined() returns false, or it + * would mean that some backends are waiting with the GUC set. See + * SyncRepWaitForLSN(). + */ + Assert(!SyncStandbysDefined()); + + /* + * Even if there is no sync standby defined, let the readers of this + * information know that the sync standby data has been initialized. + * This can just be done once, hence the previous check on + * SYNC_STANDBY_INIT to avoid useless work. + */ + WalSndCtl->sync_standbys_status |= SYNC_STANDBY_INIT; LWLockRelease(SyncRepLock); } diff --git a/src/backend/replication/syncrep_scanner.l b/src/backend/replication/syncrep_scanner.l index 7dec1f869c745..02004d621e73d 100644 --- a/src/backend/replication/syncrep_scanner.l +++ b/src/backend/replication/syncrep_scanner.l @@ -157,17 +157,16 @@ syncrep_yyerror(SyncRepConfigData **syncrep_parse_result_p, char **syncrep_parse { struct yyguts_t *yyg = (struct yyguts_t *) yyscanner; /* needed for yytext * macro */ - char *syncrep_parse_error_msg = *syncrep_parse_error_msg_p; /* report only the first error in a parse operation */ - if (syncrep_parse_error_msg) + if (*syncrep_parse_error_msg_p) return; if (yytext[0]) - syncrep_parse_error_msg = psprintf("%s at or near \"%s\"", - message, yytext); + *syncrep_parse_error_msg_p = psprintf("%s at or near \"%s\"", + message, yytext); else - syncrep_parse_error_msg = psprintf("%s at end of input", - message); + *syncrep_parse_error_msg_p = psprintf("%s at end of input", + message); } void diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 2e5dd6deb2c2e..7361ffc9dcf5e 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -71,6 +71,7 @@ #include "storage/proc.h" #include "storage/procarray.h" #include "storage/procsignal.h" +#include "tcop/tcopprot.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/guc.h" @@ -145,38 +146,6 @@ static void XLogWalRcvSendHSFeedback(bool immed); static void ProcessWalSndrMessage(XLogRecPtr walEnd, TimestampTz sendTime); static void WalRcvComputeNextWakeup(WalRcvWakeupReason reason, TimestampTz now); -/* - * Process any interrupts the walreceiver process may have received. - * This should be called any time the process's latch has become set. - * - * Currently, only SIGTERM is of interest. We can't just exit(1) within the - * SIGTERM signal handler, because the signal might arrive in the middle of - * some critical operation, like while we're holding a spinlock. Instead, the - * signal handler sets a flag variable as well as setting the process's latch. - * We must check the flag (by calling ProcessWalRcvInterrupts) anytime the - * latch has become set. Operations that could block for a long time, such as - * reading from a remote server, must pay attention to the latch too; see - * libpqrcv_PQgetResult for example. - */ -void -ProcessWalRcvInterrupts(void) -{ - /* - * Although walreceiver interrupt handling doesn't use the same scheme as - * regular backends, call CHECK_FOR_INTERRUPTS() to make sure we receive - * any incoming signals on Win32, and also to make sure we process any - * barrier events. - */ - CHECK_FOR_INTERRUPTS(); - - if (ShutdownRequestPending) - { - ereport(FATAL, - (errcode(ERRCODE_ADMIN_SHUTDOWN), - errmsg("terminating walreceiver process due to administrator command"))); - } -} - /* Main entry point for walreceiver process */ void @@ -280,7 +249,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len) pqsignal(SIGHUP, SignalHandlerForConfigReload); /* set flag to read config * file */ pqsignal(SIGINT, SIG_IGN); - pqsignal(SIGTERM, SignalHandlerForShutdownRequest); /* request shutdown */ + pqsignal(SIGTERM, die); /* request shutdown */ /* SIGQUIT handler was already set up by InitPostmasterChild */ pqsignal(SIGALRM, SIG_IGN); pqsignal(SIGPIPE, SIG_IGN); @@ -417,12 +386,12 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len) { if (first_stream) ereport(LOG, - (errmsg("started streaming WAL from primary at %X/%X on timeline %u", - LSN_FORMAT_ARGS(startpoint), startpointTLI))); + errmsg("started streaming WAL from primary at %X/%08X on timeline %u", + LSN_FORMAT_ARGS(startpoint), startpointTLI)); else ereport(LOG, - (errmsg("restarted WAL streaming at %X/%X on timeline %u", - LSN_FORMAT_ARGS(startpoint), startpointTLI))); + errmsg("restarted WAL streaming at %X/%08X on timeline %u", + LSN_FORMAT_ARGS(startpoint), startpointTLI)); first_stream = false; /* Initialize LogstreamResult and buffers for processing messages */ @@ -459,7 +428,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len) errmsg("cannot continue WAL streaming, recovery has already ended"))); /* Process any requests or signals received recently */ - ProcessWalRcvInterrupts(); + CHECK_FOR_INTERRUPTS(); if (ConfigReloadPending) { @@ -501,7 +470,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len) { ereport(LOG, (errmsg("replication terminated by primary server"), - errdetail("End of WAL reached on timeline %u at %X/%X.", + errdetail("End of WAL reached on timeline %u at %X/%08X.", startpointTLI, LSN_FORMAT_ARGS(LogstreamResult.Write)))); endofwal = true; @@ -555,7 +524,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len) if (rc & WL_LATCH_SET) { ResetLatch(MyLatch); - ProcessWalRcvInterrupts(); + CHECK_FOR_INTERRUPTS(); if (walrcv->force_reply) { @@ -704,7 +673,7 @@ WalRcvWaitForStartPosition(XLogRecPtr *startpoint, TimeLineID *startpointTLI) { ResetLatch(MyLatch); - ProcessWalRcvInterrupts(); + CHECK_FOR_INTERRUPTS(); SpinLockAcquire(&walrcv->mutex); Assert(walrcv->walRcvState == WALRCV_RESTARTING || @@ -742,7 +711,7 @@ WalRcvWaitForStartPosition(XLogRecPtr *startpoint, TimeLineID *startpointTLI) { char activitymsg[50]; - snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%X", + snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%08X", LSN_FORMAT_ARGS(*startpoint)); set_ps_display(activitymsg); } @@ -857,7 +826,7 @@ XLogWalRcvProcessMsg(unsigned char type, char *buf, Size len, TimeLineID tli) switch (type) { - case 'w': /* WAL records */ + case PqReplMsg_WALData: { StringInfoData incoming_message; @@ -881,7 +850,7 @@ XLogWalRcvProcessMsg(unsigned char type, char *buf, Size len, TimeLineID tli) XLogWalRcvWrite(buf, len, dataStart, tli); break; } - case 'k': /* Keepalive */ + case PqReplMsg_Keepalive: { StringInfoData incoming_message; @@ -1045,7 +1014,7 @@ XLogWalRcvFlush(bool dying, TimeLineID tli) { char activitymsg[50]; - snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X", + snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%08X", LSN_FORMAT_ARGS(LogstreamResult.Write)); set_ps_display(activitymsg); } @@ -1161,7 +1130,7 @@ XLogWalRcvSendReply(bool force, bool requestReply) applyPtr = GetXLogReplayRecPtr(NULL); resetStringInfo(&reply_message); - pq_sendbyte(&reply_message, 'r'); + pq_sendbyte(&reply_message, PqReplMsg_StandbyStatusUpdate); pq_sendint64(&reply_message, writePtr); pq_sendint64(&reply_message, flushPtr); pq_sendint64(&reply_message, applyPtr); @@ -1169,7 +1138,7 @@ XLogWalRcvSendReply(bool force, bool requestReply) pq_sendbyte(&reply_message, requestReply ? 1 : 0); /* Send it */ - elog(DEBUG2, "sending write %X/%X flush %X/%X apply %X/%X%s", + elog(DEBUG2, "sending write %X/%08X flush %X/%08X apply %X/%08X%s", LSN_FORMAT_ARGS(writePtr), LSN_FORMAT_ARGS(flushPtr), LSN_FORMAT_ARGS(applyPtr), @@ -1265,7 +1234,7 @@ XLogWalRcvSendHSFeedback(bool immed) /* Construct the message and send it. */ resetStringInfo(&reply_message); - pq_sendbyte(&reply_message, 'h'); + pq_sendbyte(&reply_message, PqReplMsg_HotStandbyFeedback); pq_sendint64(&reply_message, GetCurrentTimestamp()); pq_sendint32(&reply_message, xmin); pq_sendint32(&reply_message, xmin_epoch); diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 1028919aecb14..e3dce9dc68d04 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -60,11 +60,11 @@ #include "backup/basebackup_incremental.h" #include "catalog/pg_authid.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "commands/defrem.h" #include "funcapi.h" #include "libpq/libpq.h" #include "libpq/pqformat.h" +#include "libpq/protocol.h" #include "miscadmin.h" #include "nodes/replnodes.h" #include "pgstat.h" @@ -84,17 +84,23 @@ #include "storage/ipc.h" #include "storage/pmsignal.h" #include "storage/proc.h" +#include "storage/procarray.h" #include "tcop/dest.h" #include "tcop/tcopprot.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/guc.h" +#include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/pg_lsn.h" +#include "utils/pgstat_internal.h" #include "utils/ps_status.h" #include "utils/timeout.h" #include "utils/timestamp.h" +/* Minimum interval used by walsender for stats flushes, in ms */ +#define WALSENDER_STATS_FLUSH_INTERVAL 1000 + /* * Maximum data payload in a WAL data message. Must be >= XLOG_BLCKSZ. * @@ -254,6 +260,7 @@ static void StartLogicalReplication(StartReplicationCmd *cmd); static void ProcessStandbyMessage(void); static void ProcessStandbyReplyMessage(void); static void ProcessStandbyHSFeedbackMessage(void); +static void ProcessStandbyPSRequestMessage(void); static void ProcessRepliesIfAny(void); static void ProcessPendingWrites(void); static void WalSndKeepalive(bool requestReply, XLogRecPtr writePtr); @@ -404,7 +411,7 @@ IdentifySystem(void) else logptr = GetFlushRecPtr(&currTLI); - snprintf(xloc, sizeof(xloc), "%X/%X", LSN_FORMAT_ARGS(logptr)); + snprintf(xloc, sizeof(xloc), "%X/%08X", LSN_FORMAT_ARGS(logptr)); if (MyDatabaseId != InvalidOid) { @@ -511,7 +518,7 @@ ReadReplicationSlot(ReadReplicationSlotCmd *cmd) { char xloc[64]; - snprintf(xloc, sizeof(xloc), "%X/%X", + snprintf(xloc, sizeof(xloc), "%X/%08X", LSN_FORMAT_ARGS(slot_contents.data.restart_lsn)); values[i] = CStringGetTextDatum(xloc); nulls[i] = false; @@ -729,13 +736,13 @@ HandleUploadManifestPacket(StringInfo buf, off_t *offset, switch (mtype) { - case 'd': /* CopyData */ + case PqMsg_CopyData: maxmsglen = PQ_LARGE_MESSAGE_LIMIT; break; - case 'c': /* CopyDone */ - case 'f': /* CopyFail */ - case 'H': /* Flush */ - case 'S': /* Sync */ + case PqMsg_CopyDone: + case PqMsg_CopyFail: + case PqMsg_Flush: + case PqMsg_Sync: maxmsglen = PQ_SMALL_MESSAGE_LIMIT; break; default: @@ -757,19 +764,19 @@ HandleUploadManifestPacket(StringInfo buf, off_t *offset, /* Process the message */ switch (mtype) { - case 'd': /* CopyData */ + case PqMsg_CopyData: AppendIncrementalManifestData(ib, buf->data, buf->len); return true; - case 'c': /* CopyDone */ + case PqMsg_CopyDone: return false; - case 'H': /* Sync */ - case 'S': /* Flush */ + case PqMsg_Sync: + case PqMsg_Flush: /* Ignore these while in CopyOut mode as we do elsewhere. */ return true; - case 'f': + case PqMsg_CopyFail: ereport(ERROR, (errcode(ERRCODE_QUERY_CANCELED), errmsg("COPY from stdin failed: %s", @@ -888,12 +895,12 @@ StartReplication(StartReplicationCmd *cmd) switchpoint < cmd->startpoint) { ereport(ERROR, - (errmsg("requested starting point %X/%X on timeline %u is not in this server's history", - LSN_FORMAT_ARGS(cmd->startpoint), - cmd->timeline), - errdetail("This server's history forked from timeline %u at %X/%X.", - cmd->timeline, - LSN_FORMAT_ARGS(switchpoint)))); + errmsg("requested starting point %X/%08X on timeline %u is not in this server's history", + LSN_FORMAT_ARGS(cmd->startpoint), + cmd->timeline), + errdetail("This server's history forked from timeline %u at %X/%08X.", + cmd->timeline, + LSN_FORMAT_ARGS(switchpoint))); } sendTimeLineValidUpto = switchpoint; } @@ -935,9 +942,9 @@ StartReplication(StartReplicationCmd *cmd) if (FlushPtr < cmd->startpoint) { ereport(ERROR, - (errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X", - LSN_FORMAT_ARGS(cmd->startpoint), - LSN_FORMAT_ARGS(FlushPtr)))); + errmsg("requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X", + LSN_FORMAT_ARGS(cmd->startpoint), + LSN_FORMAT_ARGS(FlushPtr))); } /* Start streaming from the requested point */ @@ -979,7 +986,7 @@ StartReplication(StartReplicationCmd *cmd) Datum values[2]; bool nulls[2] = {0}; - snprintf(startpos_str, sizeof(startpos_str), "%X/%X", + snprintf(startpos_str, sizeof(startpos_str), "%X/%08X", LSN_FORMAT_ARGS(sendTimeLineValidUpto)); dest = CreateDestReceiver(DestRemoteSimple); @@ -1320,7 +1327,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) ReplicationSlotPersist(); } - snprintf(xloc, sizeof(xloc), "%X/%X", + snprintf(xloc, sizeof(xloc), "%X/%08X", LSN_FORMAT_ARGS(MyReplicationSlot->data.confirmed_flush)); dest = CreateDestReceiver(DestRemoteSimple); @@ -1527,7 +1534,7 @@ WalSndPrepareWrite(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xi resetStringInfo(ctx->out); - pq_sendbyte(ctx->out, 'w'); + pq_sendbyte(ctx->out, PqReplMsg_WALData); pq_sendint64(ctx->out, lsn); /* dataStart */ pq_sendint64(ctx->out, lsn); /* walEnd */ @@ -1563,7 +1570,7 @@ WalSndWriteData(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xid, tmpbuf.data, sizeof(int64)); /* output previously gathered data in a CopyData packet */ - pq_putmessage_noblock('d', ctx->out->data, ctx->out->len); + pq_putmessage_noblock(PqMsg_CopyData, ctx->out->data, ctx->out->len); CHECK_FOR_INTERRUPTS(); @@ -1670,13 +1677,13 @@ WalSndUpdateProgress(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId * When skipping empty transactions in synchronous replication, we send a * keepalive message to avoid delaying such transactions. * - * It is okay to check sync_standbys_defined flag without lock here as in - * the worst case we will just send an extra keepalive message when it is + * It is okay to check sync_standbys_status without lock here as in the + * worst case we will just send an extra keepalive message when it is * really not required. */ if (skipped_xact && SyncRepRequested() && - ((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_defined) + (((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_status & SYNC_STANDBY_DEFINED)) { WalSndKeepalive(false, lsn); @@ -1797,6 +1804,7 @@ WalSndWaitForWal(XLogRecPtr loc) int wakeEvents; uint32 wait_event = 0; static XLogRecPtr RecentFlushPtr = InvalidXLogRecPtr; + TimestampTz last_flush = 0; /* * Fast path to avoid acquiring the spinlock in case we already know we @@ -1817,6 +1825,7 @@ WalSndWaitForWal(XLogRecPtr loc) { bool wait_for_standby_at_stop = false; long sleeptime; + TimestampTz now; /* Clear any already-pending wakeups */ ResetLatch(MyLatch); @@ -1927,7 +1936,8 @@ WalSndWaitForWal(XLogRecPtr loc) * new WAL to be generated. (But if we have nothing to send, we don't * want to wake on socket-writable.) */ - sleeptime = WalSndComputeSleeptime(GetCurrentTimestamp()); + now = GetCurrentTimestamp(); + sleeptime = WalSndComputeSleeptime(now); wakeEvents = WL_SOCKET_READABLE; @@ -1936,6 +1946,15 @@ WalSndWaitForWal(XLogRecPtr loc) Assert(wait_event != 0); + /* Report IO statistics, if needed */ + if (TimestampDifferenceExceeds(last_flush, now, + WALSENDER_STATS_FLUSH_INTERVAL)) + { + pgstat_flush_io(false); + (void) pgstat_flush_backend(false, PGSTAT_BACKEND_FLUSH_IO); + last_flush = now; + } + WalSndWait(wakeEvents, sleeptime, wait_event); } @@ -1957,8 +1976,10 @@ exec_replication_command(const char *cmd_string) int parse_rc; Node *cmd_node; const char *cmdtag; - MemoryContext cmd_context; - MemoryContext old_context; + MemoryContext old_context = CurrentMemoryContext; + + /* We save and re-use the cmd_context across calls */ + static MemoryContext cmd_context = NULL; /* * If WAL sender has been told that shutdown is getting close, switch its @@ -1987,11 +2008,30 @@ exec_replication_command(const char *cmd_string) /* * Prepare to parse and execute the command. + * + * Because replication command execution can involve beginning or ending + * transactions, we need a working context that will survive that, so we + * make it a child of TopMemoryContext. That in turn creates a hazard of + * long-lived memory leaks if we lose track of the working context. We + * deal with that by creating it only once per walsender, and resetting it + * for each new command. (Normally this reset is a no-op, but if the + * prior exec_replication_command call failed with an error, it won't be.) + * + * This is subtler than it looks. The transactions we manage can extend + * across replication commands, indeed SnapBuildClearExportedSnapshot + * might have just ended one. Because transaction exit will revert to the + * memory context that was current at transaction start, we need to be + * sure that that context is still valid. That motivates re-using the + * same cmd_context rather than making a new one each time. */ - cmd_context = AllocSetContextCreate(CurrentMemoryContext, - "Replication command context", - ALLOCSET_DEFAULT_SIZES); - old_context = MemoryContextSwitchTo(cmd_context); + if (cmd_context == NULL) + cmd_context = AllocSetContextCreate(TopMemoryContext, + "Replication command context", + ALLOCSET_DEFAULT_SIZES); + else + MemoryContextReset(cmd_context); + + MemoryContextSwitchTo(cmd_context); replication_scanner_init(cmd_string, &scanner); @@ -2004,7 +2044,7 @@ exec_replication_command(const char *cmd_string) replication_scanner_finish(scanner); MemoryContextSwitchTo(old_context); - MemoryContextDelete(cmd_context); + MemoryContextReset(cmd_context); /* XXX this is a pretty random place to make this check */ if (MyDatabaseId == InvalidOid) @@ -2164,9 +2204,12 @@ exec_replication_command(const char *cmd_string) cmd_node->type); } - /* done */ + /* + * Done. Revert to caller's memory context, and clean out the cmd_context + * to recover memory right away. + */ MemoryContextSwitchTo(old_context); - MemoryContextDelete(cmd_context); + MemoryContextReset(cmd_context); /* * We need not update ps display or pg_stat_activity, because PostgresMain @@ -2249,7 +2292,8 @@ ProcessRepliesIfAny(void) switch (firstchar) { /* - * 'd' means a standby reply wrapped in a CopyData packet. + * PqMsg_CopyData means a standby reply wrapped in a CopyData + * packet. */ case PqMsg_CopyData: ProcessStandbyMessage(); @@ -2257,13 +2301,14 @@ ProcessRepliesIfAny(void) break; /* - * CopyDone means the standby requested to finish streaming. - * Reply with CopyDone, if we had not sent that already. + * PqMsg_CopyDone means the standby requested to finish + * streaming. Reply with CopyDone, if we had not sent that + * already. */ case PqMsg_CopyDone: if (!streamingDoneSending) { - pq_putmessage_noblock('c', NULL, 0); + pq_putmessage_noblock(PqMsg_CopyDone, NULL, 0); streamingDoneSending = true; } @@ -2272,7 +2317,8 @@ ProcessRepliesIfAny(void) break; /* - * 'X' means that the standby is closing down the socket. + * PqMsg_Terminate means that the standby is closing down the + * socket. */ case PqMsg_Terminate: proc_exit(0); @@ -2307,14 +2353,18 @@ ProcessStandbyMessage(void) switch (msgtype) { - case 'r': + case PqReplMsg_StandbyStatusUpdate: ProcessStandbyReplyMessage(); break; - case 'h': + case PqReplMsg_HotStandbyFeedback: ProcessStandbyHSFeedbackMessage(); break; + case PqReplMsg_PrimaryStatusRequest: + ProcessStandbyPSRequestMessage(); + break; + default: ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), @@ -2389,7 +2439,7 @@ ProcessStandbyReplyMessage(void) /* Copy because timestamptz_to_str returns a static buffer */ replyTimeStr = pstrdup(timestamptz_to_str(replyTime)); - elog(DEBUG2, "write %X/%X flush %X/%X apply %X/%X%s reply_time %s", + elog(DEBUG2, "write %X/%08X flush %X/%08X apply %X/%08X%s reply_time %s", LSN_FORMAT_ARGS(writePtr), LSN_FORMAT_ARGS(flushPtr), LSN_FORMAT_ARGS(applyPtr), @@ -2661,6 +2711,60 @@ ProcessStandbyHSFeedbackMessage(void) } } +/* + * Process the request for a primary status update message. + */ +static void +ProcessStandbyPSRequestMessage(void) +{ + XLogRecPtr lsn = InvalidXLogRecPtr; + TransactionId oldestXidInCommit; + FullTransactionId nextFullXid; + FullTransactionId fullOldestXidInCommit; + WalSnd *walsnd = MyWalSnd; + TimestampTz replyTime; + + /* + * This shouldn't happen because we don't support getting primary status + * message from standby. + */ + if (RecoveryInProgress()) + elog(ERROR, "the primary status is unavailable during recovery"); + + replyTime = pq_getmsgint64(&reply_message); + + /* + * Update shared state for this WalSender process based on reply data from + * standby. + */ + SpinLockAcquire(&walsnd->mutex); + walsnd->replyTime = replyTime; + SpinLockRelease(&walsnd->mutex); + + /* + * Consider transactions in the current database, as only these are the + * ones replicated. + */ + oldestXidInCommit = GetOldestActiveTransactionId(true, false); + nextFullXid = ReadNextFullTransactionId(); + fullOldestXidInCommit = FullTransactionIdFromAllowableAt(nextFullXid, + oldestXidInCommit); + lsn = GetXLogWriteRecPtr(); + + elog(DEBUG2, "sending primary status"); + + /* construct the message... */ + resetStringInfo(&output_message); + pq_sendbyte(&output_message, PqReplMsg_PrimaryStatusUpdate); + pq_sendint64(&output_message, lsn); + pq_sendint64(&output_message, (int64) U64FromFullTransactionId(fullOldestXidInCommit)); + pq_sendint64(&output_message, (int64) U64FromFullTransactionId(nextFullXid)); + pq_sendint64(&output_message, GetCurrentTimestamp()); + + /* ... and send it wrapped in CopyData */ + pq_putmessage_noblock(PqMsg_CopyData, output_message.data, output_message.len); +} + /* * Compute how long send/receive loops should sleep. * @@ -2742,6 +2846,8 @@ WalSndCheckTimeOut(void) static void WalSndLoop(WalSndSendDataCallback send_data) { + TimestampTz last_flush = 0; + /* * Initialize the last reply timestamp. That enables timeout processing * from hereon. @@ -2836,6 +2942,9 @@ WalSndLoop(WalSndSendDataCallback send_data) * WalSndWaitForWal() handle any other blocking; idle receivers need * its additional actions. For physical replication, also block if * caught up; its send_data does not block. + * + * The IO statistics are reported in WalSndWaitForWal() for the + * logical WAL senders. */ if ((WalSndCaughtUp && send_data != XLogSendLogical && !streamingDoneSending) || @@ -2843,6 +2952,7 @@ WalSndLoop(WalSndSendDataCallback send_data) { long sleeptime; int wakeEvents; + TimestampTz now; if (!streamingDoneReceiving) wakeEvents = WL_SOCKET_READABLE; @@ -2853,11 +2963,21 @@ WalSndLoop(WalSndSendDataCallback send_data) * Use fresh timestamp, not last_processing, to reduce the chance * of reaching wal_sender_timeout before sending a keepalive. */ - sleeptime = WalSndComputeSleeptime(GetCurrentTimestamp()); + now = GetCurrentTimestamp(); + sleeptime = WalSndComputeSleeptime(now); if (pq_is_send_pending()) wakeEvents |= WL_SOCKET_WRITEABLE; + /* Report IO statistics, if needed */ + if (TimestampDifferenceExceeds(last_flush, now, + WALSENDER_STATS_FLUSH_INTERVAL)) + { + pgstat_flush_io(false); + (void) pgstat_flush_backend(false, PGSTAT_BACKEND_FLUSH_IO); + last_flush = now; + } + /* Sleep until something happens or we time out */ WalSndWait(wakeEvents, sleeptime, WAIT_EVENT_WAL_SENDER_MAIN); } @@ -3190,12 +3310,12 @@ XLogSendPhysical(void) wal_segment_close(xlogreader); /* Send CopyDone */ - pq_putmessage_noblock('c', NULL, 0); + pq_putmessage_noblock(PqMsg_CopyDone, NULL, 0); streamingDoneSending = true; WalSndCaughtUp = true; - elog(DEBUG1, "walsender reached end of timeline at %X/%X (sent up to %X/%X)", + elog(DEBUG1, "walsender reached end of timeline at %X/%08X (sent up to %X/%08X)", LSN_FORMAT_ARGS(sendTimeLineValidUpto), LSN_FORMAT_ARGS(sentPtr)); return; @@ -3247,7 +3367,7 @@ XLogSendPhysical(void) * OK to read and send the slice. */ resetStringInfo(&output_message); - pq_sendbyte(&output_message, 'w'); + pq_sendbyte(&output_message, PqReplMsg_WALData); pq_sendint64(&output_message, startptr); /* dataStart */ pq_sendint64(&output_message, SendRqstPtr); /* walEnd */ @@ -3318,7 +3438,7 @@ XLogSendPhysical(void) memcpy(&output_message.data[1 + sizeof(int64) + sizeof(int64)], tmpbuf.data, sizeof(int64)); - pq_putmessage_noblock('d', output_message.data, output_message.len); + pq_putmessage_noblock(PqMsg_CopyData, output_message.data, output_message.len); sentPtr = endptr; @@ -3336,7 +3456,7 @@ XLogSendPhysical(void) { char activitymsg[50]; - snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X", + snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%08X", LSN_FORMAT_ARGS(sentPtr)); set_ps_display(activitymsg); } @@ -3393,8 +3513,16 @@ XLogSendLogical(void) if (flushPtr == InvalidXLogRecPtr || logical_decoding_ctx->reader->EndRecPtr >= flushPtr) { + /* + * For cascading logical WAL senders, we use the replay LSN instead of + * the flush LSN, since logical decoding on a standby only processes + * WAL that has been replayed. This distinction becomes particularly + * important during shutdown, as new WAL is no longer replayed and the + * last replayed LSN marks the furthest point up to which decoding can + * proceed. + */ if (am_cascading_walsender) - flushPtr = GetStandbyFlushRecPtr(NULL); + flushPtr = GetXLogReplayRecPtr(NULL); else flushPtr = GetFlushRecPtr(NULL); } @@ -4010,13 +4138,13 @@ WalSndKeepalive(bool requestReply, XLogRecPtr writePtr) /* construct the message... */ resetStringInfo(&output_message); - pq_sendbyte(&output_message, 'k'); + pq_sendbyte(&output_message, PqReplMsg_Keepalive); pq_sendint64(&output_message, XLogRecPtrIsInvalid(writePtr) ? sentPtr : writePtr); pq_sendint64(&output_message, GetCurrentTimestamp()); pq_sendbyte(&output_message, requestReply ? 1 : 0); /* ... and send it wrapped in CopyData */ - pq_putmessage_noblock('d', output_message.data, output_message.len); + pq_putmessage_noblock(PqMsg_CopyData, output_message.data, output_message.len); /* Set local flag */ if (requestReply) diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 8aa90b0d6fb75..a96fbdc1ddd64 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -725,10 +725,9 @@ EnableDisableRule(Relation rel, const char *rulename, /* * Change ev_enabled if it is different from the desired new state. */ - if (DatumGetChar(ruleform->ev_enabled) != - fires_when) + if (ruleform->ev_enabled != fires_when) { - ruleform->ev_enabled = CharGetDatum(fires_when); + ruleform->ev_enabled = fires_when; CatalogTupleUpdate(pg_rewrite_desc, &ruletup->t_self, ruletup); changed = true; diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index f0bce5f9ed957..adc9e7600e1ed 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -923,8 +923,9 @@ rewriteTargetListIU(List *targetList, apply_default = true; /* - * Can only insert DEFAULT into generated columns, regardless of - * any OVERRIDING clauses. + * Can only insert DEFAULT into generated columns. (The + * OVERRIDING clause does not apply to generated columns, so we + * don't consider it here.) */ if (att_tup->attgenerated && !apply_default) { @@ -4544,7 +4545,7 @@ build_generation_expression(Relation rel, int attrno) List * QueryRewrite(Query *parsetree) { - uint64 input_query_id = parsetree->queryId; + int64 input_query_id = parsetree->queryId; List *querylist; List *results; ListCell *l; diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 1c61085a0a764..cd786aa4112b5 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -550,19 +550,15 @@ offset_relid_set(Relids relids, int offset) * earlier to ensure that no unwanted side-effects occur! */ -typedef struct -{ - int rt_index; - int new_index; - int sublevels_up; - bool change_RangeTblRef; -} ChangeVarNodes_context; - static bool ChangeVarNodes_walker(Node *node, ChangeVarNodes_context *context) { if (node == NULL) return false; + + if (context->callback && context->callback(node, context)) + return false; + if (IsA(node, Var)) { Var *var = (Var *) node; @@ -588,7 +584,7 @@ ChangeVarNodes_walker(Node *node, ChangeVarNodes_context *context) cexpr->cvarno = context->new_index; return false; } - if (IsA(node, RangeTblRef) && context->change_RangeTblRef) + if (IsA(node, RangeTblRef)) { RangeTblRef *rtr = (RangeTblRef *) node; @@ -635,75 +631,6 @@ ChangeVarNodes_walker(Node *node, ChangeVarNodes_context *context) } return false; } - if (IsA(node, RestrictInfo)) - { - RestrictInfo *rinfo = (RestrictInfo *) node; - int relid = -1; - bool is_req_equal = - (rinfo->required_relids == rinfo->clause_relids); - bool clause_relids_is_multiple = - (bms_membership(rinfo->clause_relids) == BMS_MULTIPLE); - - if (bms_is_member(context->rt_index, rinfo->clause_relids)) - { - expression_tree_walker((Node *) rinfo->clause, ChangeVarNodes_walker, (void *) context); - expression_tree_walker((Node *) rinfo->orclause, ChangeVarNodes_walker, (void *) context); - - rinfo->clause_relids = - adjust_relid_set(rinfo->clause_relids, context->rt_index, context->new_index); - rinfo->num_base_rels = bms_num_members(rinfo->clause_relids); - rinfo->left_relids = - adjust_relid_set(rinfo->left_relids, context->rt_index, context->new_index); - rinfo->right_relids = - adjust_relid_set(rinfo->right_relids, context->rt_index, context->new_index); - } - - if (is_req_equal) - rinfo->required_relids = rinfo->clause_relids; - else - rinfo->required_relids = - adjust_relid_set(rinfo->required_relids, context->rt_index, context->new_index); - - rinfo->outer_relids = - adjust_relid_set(rinfo->outer_relids, context->rt_index, context->new_index); - rinfo->incompatible_relids = - adjust_relid_set(rinfo->incompatible_relids, context->rt_index, context->new_index); - - if (rinfo->mergeopfamilies && - bms_get_singleton_member(rinfo->clause_relids, &relid) && - clause_relids_is_multiple && - relid == context->new_index && IsA(rinfo->clause, OpExpr)) - { - Expr *leftOp; - Expr *rightOp; - - leftOp = (Expr *) get_leftop(rinfo->clause); - rightOp = (Expr *) get_rightop(rinfo->clause); - - /* - * For self-join elimination, changing varnos could transform - * "t1.a = t2.a" into "t1.a = t1.a". That is always true as long - * as "t1.a" is not null. We use qual() to check for such a case, - * and then we replace the qual for a check for not null - * (NullTest). - */ - if (leftOp != NULL && equal(leftOp, rightOp)) - { - NullTest *ntest = makeNode(NullTest); - - ntest->arg = leftOp; - ntest->nulltesttype = IS_NOT_NULL; - ntest->argisrow = false; - ntest->location = -1; - rinfo->clause = (Expr *) ntest; - rinfo->mergeopfamilies = NIL; - rinfo->left_em = NULL; - rinfo->right_em = NULL; - } - Assert(rinfo->orclause == NULL); - } - return false; - } if (IsA(node, AppendRelInfo)) { AppendRelInfo *appinfo = (AppendRelInfo *) node; @@ -737,31 +664,46 @@ ChangeVarNodes_walker(Node *node, ChangeVarNodes_context *context) } /* - * ChangeVarNodesExtended - similar to ChangeVarNodes, but has additional - * 'change_RangeTblRef' param + * ChangeVarNodesExtended - similar to ChangeVarNodes, but with an additional + * 'callback' param * * ChangeVarNodes changes a given node and all of its underlying nodes. - * However, self-join elimination (SJE) needs to skip the RangeTblRef node - * type. During SJE's last step, remove_rel_from_joinlist() removes - * remaining RangeTblRefs with target relid. If ChangeVarNodes() replaces - * the target relid before, remove_rel_from_joinlist() fails to identify - * the nodes to delete. + * This version of function additionally takes a callback, which has a + * chance to process a node before ChangeVarNodes_walker. A callback + * returns a boolean value indicating if given node should be skipped from + * further processing by ChangeVarNodes_walker. The callback is called + * only for expressions and other children nodes of a Query processed by + * a walker. Initial processing of the root Query doesn't involve the + * callback. */ void ChangeVarNodesExtended(Node *node, int rt_index, int new_index, - int sublevels_up, bool change_RangeTblRef) + int sublevels_up, ChangeVarNodes_callback callback) { ChangeVarNodes_context context; context.rt_index = rt_index; context.new_index = new_index; context.sublevels_up = sublevels_up; - context.change_RangeTblRef = change_RangeTblRef; + context.callback = callback; + /* + * Must be prepared to start with a Query or a bare expression tree; if + * it's a Query, go straight to query_tree_walker to make sure that + * sublevels_up doesn't get incremented prematurely. + */ if (node && IsA(node, Query)) { Query *qry = (Query *) node; + /* + * If we are starting at a Query, and sublevels_up is zero, then we + * must also fix rangetable indexes in the Query itself --- namely + * resultRelation, mergeTargetRelation, exclRelIndex and rowMarks + * entries. sublevels_up cannot be zero when recursing into a + * subquery, so there's no need to have the same logic inside + * ChangeVarNodes_walker. + */ if (sublevels_up == 0) { ListCell *l; @@ -772,6 +714,7 @@ ChangeVarNodesExtended(Node *node, int rt_index, int new_index, if (qry->mergeTargetRelation == rt_index) qry->mergeTargetRelation = new_index; + /* this is unlikely to ever be used, but ... */ if (qry->onConflict && qry->onConflict->exclRelIndex == rt_index) qry->onConflict->exclRelIndex = new_index; @@ -792,7 +735,20 @@ ChangeVarNodesExtended(Node *node, int rt_index, int new_index, void ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) { - ChangeVarNodesExtended(node, rt_index, new_index, sublevels_up, true); + ChangeVarNodesExtended(node, rt_index, new_index, sublevels_up, NULL); +} + +/* + * ChangeVarNodesWalkExpression - process expression within the custom + * callback provided to the + * ChangeVarNodesExtended. + */ +bool +ChangeVarNodesWalkExpression(Node *node, ChangeVarNodes_context *context) +{ + return expression_tree_walker(node, + ChangeVarNodes_walker, + (void *) context); } /* diff --git a/src/backend/rewrite/rewriteSearchCycle.c b/src/backend/rewrite/rewriteSearchCycle.c index 19b89dee0d096..9f95d4dc1b0e8 100644 --- a/src/backend/rewrite/rewriteSearchCycle.c +++ b/src/backend/rewrite/rewriteSearchCycle.c @@ -320,7 +320,7 @@ rewriteSearchAndCycle(CommonTableExpr *cte) if (cte->search_clause->search_breadth_first) { search_col_rowexpr->args = lcons(makeConst(INT8OID, -1, InvalidOid, sizeof(int64), - Int64GetDatum(0), false, FLOAT8PASSBYVAL), + Int64GetDatum(0), false, true), search_col_rowexpr->args); search_col_rowexpr->colnames = lcons(makeString("*DEPTH*"), search_col_rowexpr->colnames); texpr = (Expr *) search_col_rowexpr; diff --git a/src/backend/statistics/attribute_stats.c b/src/backend/statistics/attribute_stats.c index f5eb17ba42d5f..1db6a7f784c58 100644 --- a/src/backend/statistics/attribute_stats.c +++ b/src/backend/statistics/attribute_stats.c @@ -199,7 +199,7 @@ attribute_statistics_update(FunctionCallInfo fcinfo) if (!PG_ARGISNULL(ATTNUM_ARG)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("cannot specify both attname and attnum"))); + errmsg("cannot specify both \"%s\" and \"%s\"", "attname", "attnum"))); attname = TextDatumGetCString(PG_GETARG_DATUM(ATTNAME_ARG)); attnum = get_attnum(reloid, attname); /* note that this test covers attisdropped cases too: */ @@ -225,7 +225,7 @@ attribute_statistics_update(FunctionCallInfo fcinfo) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("must specify either attname or attnum"))); + errmsg("must specify either \"%s\" or \"%s\"", "attname", "attnum"))); attname = NULL; /* keep compiler quiet */ attnum = 0; } @@ -297,8 +297,9 @@ attribute_statistics_update(FunctionCallInfo fcinfo) &elemtypid, &elem_eq_opr)) { ereport(WARNING, - (errmsg("unable to determine element type of attribute \"%s\"", attname), - errdetail("Cannot set STATISTIC_KIND_MCELEM or STATISTIC_KIND_DECHIST."))); + (errmsg("could not determine element type of column \"%s\"", attname), + errdetail("Cannot set %s or %s.", + "STATISTIC_KIND_MCELEM", "STATISTIC_KIND_DECHIST"))); elemtypid = InvalidOid; elem_eq_opr = InvalidOid; @@ -313,8 +314,9 @@ attribute_statistics_update(FunctionCallInfo fcinfo) { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine less-than operator for attribute \"%s\"", attname), - errdetail("Cannot set STATISTIC_KIND_HISTOGRAM or STATISTIC_KIND_CORRELATION."))); + errmsg("could not determine less-than operator for column \"%s\"", attname), + errdetail("Cannot set %s or %s.", + "STATISTIC_KIND_HISTOGRAM", "STATISTIC_KIND_CORRELATION"))); do_histogram = false; do_correlation = false; @@ -327,8 +329,9 @@ attribute_statistics_update(FunctionCallInfo fcinfo) { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("attribute \"%s\" is not a range type", attname), - errdetail("Cannot set STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM or STATISTIC_KIND_BOUNDS_HISTOGRAM."))); + errmsg("column \"%s\" is not a range type", attname), + errdetail("Cannot set %s or %s.", + "STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM", "STATISTIC_KIND_BOUNDS_HISTOGRAM"))); do_bounds_histogram = false; do_range_length_histogram = false; @@ -339,7 +342,7 @@ attribute_statistics_update(FunctionCallInfo fcinfo) starel = table_open(StatisticRelationId, RowExclusiveLock); - statup = SearchSysCache3(STATRELATTINH, reloid, attnum, inherited); + statup = SearchSysCache3(STATRELATTINH, ObjectIdGetDatum(reloid), Int16GetDatum(attnum), BoolGetDatum(inherited)); /* initialize from existing tuple if exists */ if (HeapTupleIsValid(statup)) @@ -547,7 +550,7 @@ get_attr_expr(Relation rel, int attnum) return NULL; /* - * The index attnum points directly to a relation attnum, then it's no an + * The index attnum points directly to a relation attnum, then it's not an * expression attribute. */ if (rel->rd_index->indkey.values[attnum - 1] != 0) @@ -587,7 +590,7 @@ get_attr_stat_type(Oid reloid, AttrNumber attnum, if (!HeapTupleIsValid(atup)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), - errmsg("attribute %d of relation \"%s\" does not exist", + errmsg("column %d of relation \"%s\" does not exist", attnum, RelationGetRelationName(rel)))); attr = (Form_pg_attribute) GETSTRUCT(atup); @@ -595,7 +598,7 @@ get_attr_stat_type(Oid reloid, AttrNumber attnum, if (attr->attisdropped) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), - errmsg("attribute %d of relation \"%s\" does not exist", + errmsg("column %d of relation \"%s\" does not exist", attnum, RelationGetRelationName(rel)))); expr = get_attr_expr(rel, attr->attnum); @@ -729,7 +732,7 @@ text_to_stavalues(const char *staname, FmgrInfo *array_in, Datum d, Oid typid, { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" array cannot contain NULL values", staname))); + errmsg("\"%s\" array must not contain null values", staname))); *ok = false; return (Datum) 0; } @@ -895,9 +898,9 @@ init_empty_stats_tuple(Oid reloid, int16 attnum, bool inherited, { values[Anum_pg_statistic_stakind1 + slotnum - 1] = (Datum) 0; nulls[Anum_pg_statistic_stakind1 + slotnum - 1] = false; - values[Anum_pg_statistic_staop1 + slotnum - 1] = InvalidOid; + values[Anum_pg_statistic_staop1 + slotnum - 1] = ObjectIdGetDatum(InvalidOid); nulls[Anum_pg_statistic_staop1 + slotnum - 1] = false; - values[Anum_pg_statistic_stacoll1 + slotnum - 1] = InvalidOid; + values[Anum_pg_statistic_stacoll1 + slotnum - 1] = ObjectIdGetDatum(InvalidOid); nulls[Anum_pg_statistic_stacoll1 + slotnum - 1] = false; } } diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index a8b63ec0884a9..af0b99243c614 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -1317,6 +1317,9 @@ choose_best_statistics(List *stats, char requiredkind, bool inh, * so we can't cope with system columns. * *exprs: input/output parameter collecting primitive subclauses within * the clause tree + * *leakproof: input/output parameter recording the leakproofness of the + * clause tree. This should be true initially, and will be set to false + * if any operator function used in an OpExpr is not leakproof. * * Returns false if there is something we definitively can't handle. * On true return, we can proceed to match the *exprs against statistics. @@ -1324,7 +1327,7 @@ choose_best_statistics(List *stats, char requiredkind, bool inh, static bool statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, Index relid, Bitmapset **attnums, - List **exprs) + List **exprs, bool *leakproof) { /* Look inside any binary-compatible relabeling (as in examine_variable) */ if (IsA(clause, RelabelType)) @@ -1359,7 +1362,6 @@ statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, /* (Var/Expr op Const) or (Const op Var/Expr) */ if (is_opclause(clause)) { - RangeTblEntry *rte = root->simple_rte_array[relid]; OpExpr *expr = (OpExpr *) clause; Node *clause_expr; @@ -1394,24 +1396,15 @@ statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, return false; } - /* - * If there are any securityQuals on the RTE from security barrier - * views or RLS policies, then the user may not have access to all the - * table's data, and we must check that the operator is leakproof. - * - * If the operator is leaky, then we must ignore this clause for the - * purposes of estimating with MCV lists, otherwise the operator might - * reveal values from the MCV list that the user doesn't have - * permission to see. - */ - if (rte->securityQuals != NIL && - !get_func_leakproof(get_opcode(expr->opno))) - return false; + /* Check if the operator is leakproof */ + if (*leakproof) + *leakproof = get_func_leakproof(get_opcode(expr->opno)); /* Check (Var op Const) or (Const op Var) clauses by recursing. */ if (IsA(clause_expr, Var)) return statext_is_compatible_clause_internal(root, clause_expr, - relid, attnums, exprs); + relid, attnums, + exprs, leakproof); /* Otherwise we have (Expr op Const) or (Const op Expr). */ *exprs = lappend(*exprs, clause_expr); @@ -1421,7 +1414,6 @@ statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, /* Var/Expr IN Array */ if (IsA(clause, ScalarArrayOpExpr)) { - RangeTblEntry *rte = root->simple_rte_array[relid]; ScalarArrayOpExpr *expr = (ScalarArrayOpExpr *) clause; Node *clause_expr; bool expronleft; @@ -1461,24 +1453,15 @@ statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, return false; } - /* - * If there are any securityQuals on the RTE from security barrier - * views or RLS policies, then the user may not have access to all the - * table's data, and we must check that the operator is leakproof. - * - * If the operator is leaky, then we must ignore this clause for the - * purposes of estimating with MCV lists, otherwise the operator might - * reveal values from the MCV list that the user doesn't have - * permission to see. - */ - if (rte->securityQuals != NIL && - !get_func_leakproof(get_opcode(expr->opno))) - return false; + /* Check if the operator is leakproof */ + if (*leakproof) + *leakproof = get_func_leakproof(get_opcode(expr->opno)); /* Check Var IN Array clauses by recursing. */ if (IsA(clause_expr, Var)) return statext_is_compatible_clause_internal(root, clause_expr, - relid, attnums, exprs); + relid, attnums, + exprs, leakproof); /* Otherwise we have Expr IN Array. */ *exprs = lappend(*exprs, clause_expr); @@ -1515,7 +1498,8 @@ statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, */ if (!statext_is_compatible_clause_internal(root, (Node *) lfirst(lc), - relid, attnums, exprs)) + relid, attnums, exprs, + leakproof)) return false; } @@ -1529,8 +1513,10 @@ statext_is_compatible_clause_internal(PlannerInfo *root, Node *clause, /* Check Var IS NULL clauses by recursing. */ if (IsA(nt->arg, Var)) - return statext_is_compatible_clause_internal(root, (Node *) (nt->arg), - relid, attnums, exprs); + return statext_is_compatible_clause_internal(root, + (Node *) (nt->arg), + relid, attnums, + exprs, leakproof); /* Otherwise we have Expr IS NULL. */ *exprs = lappend(*exprs, nt->arg); @@ -1569,11 +1555,9 @@ static bool statext_is_compatible_clause(PlannerInfo *root, Node *clause, Index relid, Bitmapset **attnums, List **exprs) { - RangeTblEntry *rte = root->simple_rte_array[relid]; - RelOptInfo *rel = root->simple_rel_array[relid]; RestrictInfo *rinfo; int clause_relid; - Oid userid; + bool leakproof; /* * Special-case handling for bare BoolExpr AND clauses, because the @@ -1613,18 +1597,31 @@ statext_is_compatible_clause(PlannerInfo *root, Node *clause, Index relid, clause_relid != relid) return false; - /* Check the clause and determine what attributes it references. */ + /* + * Check the clause, determine what attributes it references, and whether + * it includes any non-leakproof operators. + */ + leakproof = true; if (!statext_is_compatible_clause_internal(root, (Node *) rinfo->clause, - relid, attnums, exprs)) + relid, attnums, exprs, + &leakproof)) return false; /* - * Check that the user has permission to read all required attributes. + * If the clause includes any non-leakproof operators, check that the user + * has permission to read all required attributes, otherwise the operators + * might reveal values from the MCV list that the user doesn't have + * permission to see. We require all rows to be selectable --- there must + * be no securityQuals from security barrier views or RLS policies. See + * similar code in examine_variable(), examine_simple_variable(), and + * statistic_proc_security_check(). + * + * Note that for an inheritance child, the permission checks are performed + * on the inheritance root parent, and whole-table select privilege on the + * parent doesn't guarantee that the user could read all columns of the + * child. Therefore we must check all referenced columns. */ - userid = OidIsValid(rel->userid) ? rel->userid : GetUserId(); - - /* Table-level SELECT privilege is sufficient for all columns */ - if (pg_class_aclcheck(rte->relid, userid, ACL_SELECT) != ACLCHECK_OK) + if (!leakproof) { Bitmapset *clause_attnums = NULL; int attnum = -1; @@ -1649,26 +1646,9 @@ statext_is_compatible_clause(PlannerInfo *root, Node *clause, Index relid, if (*exprs != NIL) pull_varattnos((Node *) *exprs, relid, &clause_attnums); - attnum = -1; - while ((attnum = bms_next_member(clause_attnums, attnum)) >= 0) - { - /* Undo the offset */ - AttrNumber attno = attnum + FirstLowInvalidHeapAttributeNumber; - - if (attno == InvalidAttrNumber) - { - /* Whole-row reference, so must have access to all columns */ - if (pg_attribute_aclcheck_all(rte->relid, userid, ACL_SELECT, - ACLMASK_ALL) != ACLCHECK_OK) - return false; - } - else - { - if (pg_attribute_aclcheck(rte->relid, attno, userid, - ACL_SELECT) != ACLCHECK_OK) - return false; - } - } + /* Must have permission to read all rows from these columns */ + if (!all_rows_selectable(root, relid, clause_attnums)) + return false; } /* If we reach here, the clause is OK */ @@ -2618,7 +2598,7 @@ make_build_data(Relation rel, StatExtEntry *stat, int numrows, HeapTuple *rows, } else { - result->values[idx][i] = (Datum) datum; + result->values[idx][i] = datum; result->nulls[idx][i] = false; } diff --git a/src/backend/statistics/mcv.c b/src/backend/statistics/mcv.c index d98cda698d941..f59fb82154370 100644 --- a/src/backend/statistics/mcv.c +++ b/src/backend/statistics/mcv.c @@ -767,7 +767,7 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) values[dim][i] = PointerGetDatum(PG_DETOAST_DATUM(values[dim][i])); /* serialized length (uint32 length + data) */ - len = VARSIZE_ANY_EXHDR(values[dim][i]); + len = VARSIZE_ANY_EXHDR(DatumGetPointer(values[dim][i])); info[dim].nbytes += sizeof(uint32); /* length */ info[dim].nbytes += len; /* value (no header) */ diff --git a/src/backend/statistics/relation_stats.c b/src/backend/statistics/relation_stats.c index cd3a75b621a0c..a59f0c519a474 100644 --- a/src/backend/statistics/relation_stats.c +++ b/src/backend/statistics/relation_stats.c @@ -112,7 +112,7 @@ relation_statistics_update(FunctionCallInfo fcinfo) { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("reltuples cannot be < -1.0"))); + errmsg("argument \"%s\" must not be less than -1.0", "reltuples"))); result = false; } else diff --git a/src/backend/statistics/stat_utils.c b/src/backend/statistics/stat_utils.c index a9a3224efe6fd..ef7e5168bed40 100644 --- a/src/backend/statistics/stat_utils.c +++ b/src/backend/statistics/stat_utils.c @@ -41,7 +41,7 @@ stats_check_required_arg(FunctionCallInfo fcinfo, if (PG_ARGISNULL(argnum)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" cannot be NULL", + errmsg("argument \"%s\" must not be null", arginfo[argnum].argname))); } @@ -68,7 +68,7 @@ stats_check_arg_array(FunctionCallInfo fcinfo, { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" cannot be a multidimensional array", + errmsg("argument \"%s\" must not be a multidimensional array", arginfo[argnum].argname))); return false; } @@ -77,7 +77,7 @@ stats_check_arg_array(FunctionCallInfo fcinfo, { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" array cannot contain NULL values", + errmsg("argument \"%s\" array must not contain null values", arginfo[argnum].argname))); return false; } @@ -108,7 +108,7 @@ stats_check_arg_pair(FunctionCallInfo fcinfo, ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" must be specified when \"%s\" is specified", + errmsg("argument \"%s\" must be specified when argument \"%s\" is specified", arginfo[nullarg].argname, arginfo[otherarg].argname))); @@ -263,7 +263,7 @@ stats_check_arg_type(const char *argname, Oid argtype, Oid expectedtype) if (argtype != expectedtype) { ereport(WARNING, - (errmsg("argument \"%s\" has type \"%s\", expected type \"%s\"", + (errmsg("argument \"%s\" has type %s, expected type %s", argname, format_type_be(argtype), format_type_be(expectedtype)))); return false; @@ -319,11 +319,11 @@ stats_fill_fcinfo_from_arg_pairs(FunctionCallInfo pairs_fcinfo, if (argnulls[i]) ereport(ERROR, - (errmsg("name at variadic position %d is NULL", i + 1))); + (errmsg("name at variadic position %d is null", i + 1))); if (types[i] != TEXTOID) ereport(ERROR, - (errmsg("name at variadic position %d has type \"%s\", expected type \"%s\"", + (errmsg("name at variadic position %d has type %s, expected type %s", i + 1, format_type_be(types[i]), format_type_be(TEXTOID)))); diff --git a/src/backend/storage/aio/README.md b/src/backend/storage/aio/README.md index b00de269ad926..72ae3b3737d51 100644 --- a/src/backend/storage/aio/README.md +++ b/src/backend/storage/aio/README.md @@ -94,7 +94,7 @@ pgaio_io_register_callbacks(ioh, PGAIO_HCB_SHARED_BUFFER_READV, 0); * * In this example we're reading only a single buffer, hence the 1. */ -pgaio_io_set_handle_data_32(ioh, (uint32 *) buffer, 1); +pgaio_io_set_handle_data_32(ioh, (uint32 *) &buffer, 1); /* * Pass the AIO handle to lower-level function. When operating on the level of @@ -103,7 +103,7 @@ pgaio_io_set_handle_data_32(ioh, (uint32 *) buffer, 1); * * E.g. md.c needs to translate block numbers into offsets in segments. * - * Once the IO handle has been handed off to smgstartreadv(), it may not + * Once the IO handle has been handed off to smgrstartreadv(), it may not * further be used, as the IO may immediately get executed below * smgrstartreadv() and the handle reused for another IO. * @@ -119,8 +119,9 @@ pgaio_io_set_handle_data_32(ioh, (uint32 *) buffer, 1); * e.g. due to reaching a limit on the number of unsubmitted IOs, and even * complete before smgrstartreadv() returns. */ +void *page = BufferGetBlock(buffer); smgrstartreadv(ioh, operation->smgr, forknum, blkno, - BufferGetBlock(buffer), 1); + &page, 1); /* * To benefit from AIO, it is beneficial to perform other work, including diff --git a/src/backend/storage/aio/aio.c b/src/backend/storage/aio/aio.c index 86f7250b7a5f2..87d7136a93647 100644 --- a/src/backend/storage/aio/aio.c +++ b/src/backend/storage/aio/aio.c @@ -46,13 +46,10 @@ #include "storage/aio_subsys.h" #include "utils/guc.h" #include "utils/guc_hooks.h" +#include "utils/injection_point.h" #include "utils/resowner.h" #include "utils/wait_event_types.h" -#ifdef USE_INJECTION_POINTS -#include "utils/injection_point.h" -#endif - static inline void pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state); static void pgaio_io_reclaim(PgAioHandle *ioh); @@ -96,17 +93,6 @@ static const IoMethodOps *const pgaio_method_ops_table[] = { const IoMethodOps *pgaio_method_ops; -/* - * Currently there's no infrastructure to pass arguments to injection points, - * so we instead set this up for the duration of the injection point - * invocation. See pgaio_io_call_inj(). - */ -#ifdef USE_INJECTION_POINTS -static PgAioHandle *pgaio_inj_cur_handle; -#endif - - - /* -------------------------------------------------------------------------------- * Public Functions related to PgAioHandle * -------------------------------------------------------------------------------- @@ -198,6 +184,8 @@ pgaio_io_acquire(struct ResourceOwnerData *resowner, PgAioReturn *ret) PgAioHandle * pgaio_io_acquire_nb(struct ResourceOwnerData *resowner, PgAioReturn *ret) { + PgAioHandle *ioh = NULL; + if (pgaio_my_backend->num_staged_ios >= PGAIO_SUBMIT_BATCH_SIZE) { Assert(pgaio_my_backend->num_staged_ios == PGAIO_SUBMIT_BATCH_SIZE); @@ -207,10 +195,17 @@ pgaio_io_acquire_nb(struct ResourceOwnerData *resowner, PgAioReturn *ret) if (pgaio_my_backend->handed_out_io) elog(ERROR, "API violation: Only one IO can be handed out"); + /* + * Probably not needed today, as interrupts should not process this IO, + * but... + */ + HOLD_INTERRUPTS(); + if (!dclist_is_empty(&pgaio_my_backend->idle_ios)) { dlist_node *ion = dclist_pop_head_node(&pgaio_my_backend->idle_ios); - PgAioHandle *ioh = dclist_container(PgAioHandle, node, ion); + + ioh = dclist_container(PgAioHandle, node, ion); Assert(ioh->state == PGAIO_HS_IDLE); Assert(ioh->owner_procno == MyProcNumber); @@ -226,11 +221,11 @@ pgaio_io_acquire_nb(struct ResourceOwnerData *resowner, PgAioReturn *ret) ioh->report_return = ret; ret->result.status = PGAIO_RS_UNKNOWN; } - - return ioh; } - return NULL; + RESUME_INTERRUPTS(); + + return ioh; } /* @@ -247,6 +242,12 @@ pgaio_io_release(PgAioHandle *ioh) Assert(ioh->resowner); pgaio_my_backend->handed_out_io = NULL; + + /* + * Note that no interrupts are processed between the handed_out_io + * check and the call to reclaim - that's important as otherwise an + * interrupt could have already reclaimed the handle. + */ pgaio_io_reclaim(ioh); } else @@ -265,10 +266,16 @@ pgaio_io_release_resowner(dlist_node *ioh_node, bool on_error) Assert(ioh->resowner); + /* + * Otherwise an interrupt, in the middle of releasing the IO, could end up + * trying to wait for the IO, leading to state confusion. + */ + HOLD_INTERRUPTS(); + ResourceOwnerForgetAioHandle(ioh->resowner, &ioh->resowner_node); ioh->resowner = NULL; - switch (ioh->state) + switch ((PgAioHandleState) ioh->state) { case PGAIO_HS_IDLE: elog(ERROR, "unexpected"); @@ -305,6 +312,8 @@ pgaio_io_release_resowner(dlist_node *ioh_node, bool on_error) */ if (ioh->report_return) ioh->report_return = NULL; + + RESUME_INTERRUPTS(); } /* @@ -373,6 +382,13 @@ pgaio_io_get_wref(PgAioHandle *ioh, PgAioWaitRef *iow) static inline void pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state) { + /* + * All callers need to have held interrupts in some form, otherwise + * interrupt processing could wait for the IO to complete, while in an + * intermediary state. + */ + Assert(!INTERRUPTS_CAN_BE_PROCESSED()); + pgaio_debug_io(DEBUG5, ioh, "updating state to %s", pgaio_io_state_get_name(new_state)); @@ -410,6 +426,13 @@ pgaio_io_stage(PgAioHandle *ioh, PgAioOp op) Assert(pgaio_my_backend->handed_out_io == ioh); Assert(pgaio_io_has_target(ioh)); + /* + * Otherwise an interrupt, in the middle of staging and possibly executing + * the IO, could end up trying to wait for the IO, leading to state + * confusion. + */ + HOLD_INTERRUPTS(); + ioh->op = op; ioh->result = 0; @@ -449,6 +472,8 @@ pgaio_io_stage(PgAioHandle *ioh, PgAioOp op) pgaio_io_prepare_submit(ioh); pgaio_io_perform_synchronously(ioh); } + + RESUME_INTERRUPTS(); } bool @@ -507,7 +532,7 @@ pgaio_io_process_completion(PgAioHandle *ioh, int result) pgaio_io_update_state(ioh, PGAIO_HS_COMPLETED_IO); - pgaio_io_call_inj(ioh, "AIO_PROCESS_COMPLETION_BEFORE_SHARED"); + INJECTION_POINT("aio-process-completion-before-shared", ioh); pgaio_io_call_complete_shared(ioh); @@ -531,6 +556,13 @@ bool pgaio_io_was_recycled(PgAioHandle *ioh, uint64 ref_generation, PgAioHandleState *state) { *state = ioh->state; + + /* + * Ensure that we don't see an earlier state of the handle than ioh->state + * due to compiler or CPU reordering. This protects both ->generation as + * directly used here, and other fields in the handle accessed in the + * caller if the handle was not reused. + */ pg_read_barrier(); return ioh->generation != ref_generation; @@ -558,8 +590,8 @@ pgaio_io_wait(PgAioHandle *ioh, uint64 ref_generation) && state != PGAIO_HS_COMPLETED_SHARED && state != PGAIO_HS_COMPLETED_LOCAL) { - elog(PANIC, "waiting for own IO in wrong state: %d", - state); + elog(PANIC, "waiting for own IO %d in wrong state: %s", + pgaio_io_get_id(ioh), pgaio_io_get_state_name(ioh)); } } @@ -568,7 +600,7 @@ pgaio_io_wait(PgAioHandle *ioh, uint64 ref_generation) if (pgaio_io_was_recycled(ioh, ref_generation, &state)) return; - switch (state) + switch ((PgAioHandleState) state) { case PGAIO_HS_IDLE: case PGAIO_HS_HANDED_OUT: @@ -613,7 +645,13 @@ pgaio_io_wait(PgAioHandle *ioh, uint64 ref_generation) case PGAIO_HS_COMPLETED_SHARED: case PGAIO_HS_COMPLETED_LOCAL: - /* see above */ + + /* + * Note that no interrupts are processed between + * pgaio_io_was_recycled() and this check - that's important + * as otherwise an interrupt could have already reclaimed the + * handle. + */ if (am_owner) pgaio_io_reclaim(ioh); return; @@ -624,6 +662,11 @@ pgaio_io_wait(PgAioHandle *ioh, uint64 ref_generation) /* * Make IO handle ready to be reused after IO has completed or after the * handle has been released without being used. + * + * Note that callers need to be careful about only calling this in the right + * state and that no interrupts can be processed between the state check and + * the call to pgaio_io_reclaim(). Otherwise interrupt processing could + * already have reclaimed the handle. */ static void pgaio_io_reclaim(PgAioHandle *ioh) @@ -632,6 +675,9 @@ pgaio_io_reclaim(PgAioHandle *ioh) Assert(ioh->owner_procno == MyProcNumber); Assert(ioh->state != PGAIO_HS_IDLE); + /* see comment in function header */ + HOLD_INTERRUPTS(); + /* * It's a bit ugly, but right now the easiest place to put the execution * of local completion callbacks is this function, as we need to execute @@ -670,6 +716,21 @@ pgaio_io_reclaim(PgAioHandle *ioh) Assert(!ioh->resowner); + /* + * Update generation & state first, before resetting the IO's fields, + * otherwise a concurrent "viewer" could think the fields are valid, even + * though they are being reset. Increment the generation first, so that + * we can assert elsewhere that we never wait for an IDLE IO. While it's + * a bit weird for the state to go backwards for a generation, it's OK + * here, as there cannot be references to the "reborn" IO yet. Can't + * update both at once, so something has to give. + */ + ioh->generation++; + pgaio_io_update_state(ioh, PGAIO_HS_IDLE); + + /* ensure the state update is visible before we reset fields */ + pg_write_barrier(); + ioh->op = PGAIO_OP_INVALID; ioh->target = PGAIO_TID_INVALID; ioh->flags = 0; @@ -679,17 +740,13 @@ pgaio_io_reclaim(PgAioHandle *ioh) ioh->result = 0; ioh->distilled_result.status = PGAIO_RS_UNKNOWN; - /* XXX: the barrier is probably superfluous */ - pg_write_barrier(); - ioh->generation++; - - pgaio_io_update_state(ioh, PGAIO_HS_IDLE); - /* * We push the IO to the head of the idle IO list, that seems more cache * efficient in cases where only a few IOs are used. */ dclist_push_head(&pgaio_my_backend->idle_ios, &ioh->node); + + RESUME_INTERRUPTS(); } /* @@ -702,8 +759,10 @@ pgaio_io_wait_for_free(void) { int reclaimed = 0; - pgaio_debug(DEBUG2, "waiting for self with %d pending", - pgaio_my_backend->num_staged_ios); + pgaio_debug(DEBUG2, "waiting for free IO with %d pending, %u in-flight, %u idle IOs", + pgaio_my_backend->num_staged_ios, + dclist_count(&pgaio_my_backend->in_flight_ios), + dclist_count(&pgaio_my_backend->idle_ios)); /* * First check if any of our IOs actually have completed - when using @@ -717,6 +776,16 @@ pgaio_io_wait_for_free(void) if (ioh->state == PGAIO_HS_COMPLETED_SHARED) { + /* + * Note that no interrupts are processed between the state check + * and the call to reclaim - that's important as otherwise an + * interrupt could have already reclaimed the handle. + * + * Need to ensure that there's no reordering, in the more common + * paths, where we wait for IO, that's done by + * pgaio_io_was_recycled(). + */ + pg_read_barrier(); pgaio_io_reclaim(ioh); reclaimed++; } @@ -733,8 +802,17 @@ pgaio_io_wait_for_free(void) if (pgaio_my_backend->num_staged_ios > 0) pgaio_submit_staged(); + /* possibly some IOs finished during submission */ + if (!dclist_is_empty(&pgaio_my_backend->idle_ios)) + return; + if (dclist_count(&pgaio_my_backend->in_flight_ios) == 0) - elog(ERROR, "no free IOs despite no in-flight IOs"); + ereport(ERROR, + errmsg_internal("no free IOs despite no in-flight IOs"), + errdetail_internal("%d pending, %u in-flight, %u idle IOs", + pgaio_my_backend->num_staged_ios, + dclist_count(&pgaio_my_backend->in_flight_ios), + dclist_count(&pgaio_my_backend->idle_ios))); /* * Wait for the oldest in-flight IO to complete. @@ -745,8 +823,9 @@ pgaio_io_wait_for_free(void) { PgAioHandle *ioh = dclist_head_element(PgAioHandle, node, &pgaio_my_backend->in_flight_ios); + uint64 generation = ioh->generation; - switch (ioh->state) + switch ((PgAioHandleState) ioh->state) { /* should not be in in-flight list */ case PGAIO_HS_IDLE: @@ -761,20 +840,36 @@ pgaio_io_wait_for_free(void) case PGAIO_HS_COMPLETED_IO: case PGAIO_HS_SUBMITTED: pgaio_debug_io(DEBUG2, ioh, - "waiting for free io with %d in flight", + "waiting for free io with %u in flight", dclist_count(&pgaio_my_backend->in_flight_ios)); /* * In a more general case this would be racy, because the * generation could increase after we read ioh->state above. * But we are only looking at IOs by the current backend and - * the IO can only be recycled by this backend. + * the IO can only be recycled by this backend. Even this is + * only OK because we get the handle's generation before + * potentially processing interrupts, e.g. as part of + * pgaio_debug_io(). */ - pgaio_io_wait(ioh, ioh->generation); + pgaio_io_wait(ioh, generation); break; case PGAIO_HS_COMPLETED_SHARED: - /* it's possible that another backend just finished this IO */ + + /* + * It's possible that another backend just finished this IO. + * + * Note that no interrupts are processed between the state + * check and the call to reclaim - that's important as + * otherwise an interrupt could have already reclaimed the + * handle. + * + * Need to ensure that there's no reordering, in the more + * common paths, where we wait for IO, that's done by + * pgaio_io_was_recycled(). + */ + pg_read_barrier(); pgaio_io_reclaim(ioh); break; } @@ -810,7 +905,7 @@ static const char * pgaio_io_state_get_name(PgAioHandleState s) { #define PGAIO_HS_TOSTR_CASE(sym) case PGAIO_HS_##sym: return #sym - switch (s) + switch ((PgAioHandleState) s) { PGAIO_HS_TOSTR_CASE(IDLE); PGAIO_HS_TOSTR_CASE(HANDED_OUT); @@ -835,7 +930,7 @@ pgaio_io_get_state_name(PgAioHandle *ioh) const char * pgaio_result_status_string(PgAioResultStatus rs) { - switch (rs) + switch ((PgAioResultStatus) rs) { case PGAIO_RS_UNKNOWN: return "UNKNOWN"; @@ -924,6 +1019,11 @@ pgaio_wref_check_done(PgAioWaitRef *iow) if (state == PGAIO_HS_COMPLETED_SHARED || state == PGAIO_HS_COMPLETED_LOCAL) { + /* + * Note that no interrupts are processed between + * pgaio_io_was_recycled() and this check - that's important as + * otherwise an interrupt could have already reclaimed the handle. + */ if (am_owner) pgaio_io_reclaim(ioh); return true; @@ -1127,7 +1227,13 @@ pgaio_closing_fd(int fd) * For now just submit all staged IOs - we could be more selective, but * it's probably not worth it. */ - pgaio_submit_staged(); + if (pgaio_my_backend->num_staged_ios > 0) + { + pgaio_debug(DEBUG2, + "submitting %d IOs before FD %d gets closed", + pgaio_my_backend->num_staged_ios, fd); + pgaio_submit_staged(); + } /* * If requested by the IO method, wait for all IOs that use the @@ -1145,11 +1251,14 @@ pgaio_closing_fd(int fd) { dlist_iter iter; PgAioHandle *ioh = NULL; + uint64 generation; dclist_foreach(iter, &pgaio_my_backend->in_flight_ios) { ioh = dclist_container(PgAioHandle, node, iter.cur); + generation = ioh->generation; + if (pgaio_io_uses_fd(ioh, fd)) break; else @@ -1159,8 +1268,12 @@ pgaio_closing_fd(int fd) if (!ioh) break; + pgaio_debug_io(DEBUG2, ioh, + "waiting for IO before FD %d gets closed, %u in-flight IOs", + fd, dclist_count(&pgaio_my_backend->in_flight_ios)); + /* see comment in pgaio_io_wait_for_free() about raciness */ - pgaio_io_wait(ioh, ioh->generation); + pgaio_io_wait(ioh, generation); } } } @@ -1189,9 +1302,14 @@ pgaio_shutdown(int code, Datum arg) while (!dclist_is_empty(&pgaio_my_backend->in_flight_ios)) { PgAioHandle *ioh = dclist_head_element(PgAioHandle, node, &pgaio_my_backend->in_flight_ios); + uint64 generation = ioh->generation; + + pgaio_debug_io(DEBUG2, ioh, + "waiting for IO to complete during shutdown, %u in-flight IOs", + dclist_count(&pgaio_my_backend->in_flight_ios)); /* see comment in pgaio_io_wait_for_free() about raciness */ - pgaio_io_wait(ioh, ioh->generation); + pgaio_io_wait(ioh, generation); } pgaio_my_backend = NULL; @@ -1225,43 +1343,3 @@ check_io_max_concurrency(int *newval, void **extra, GucSource source) return true; } - - - -/* -------------------------------------------------------------------------------- - * Injection point support - * -------------------------------------------------------------------------------- - */ - -#ifdef USE_INJECTION_POINTS - -/* - * Call injection point with support for pgaio_inj_io_get(). - */ -void -pgaio_io_call_inj(PgAioHandle *ioh, const char *injection_point) -{ - pgaio_inj_cur_handle = ioh; - - PG_TRY(); - { - InjectionPointCached(injection_point); - } - PG_FINALLY(); - { - pgaio_inj_cur_handle = NULL; - } - PG_END_TRY(); -} - -/* - * Return IO associated with injection point invocation. This is only needed - * as injection points currently don't support arguments. - */ -PgAioHandle * -pgaio_inj_io_get(void) -{ - return pgaio_inj_cur_handle; -} - -#endif diff --git a/src/backend/storage/aio/aio_callback.c b/src/backend/storage/aio/aio_callback.c index bf42778a48c70..03c9bba080267 100644 --- a/src/backend/storage/aio/aio_callback.c +++ b/src/backend/storage/aio/aio_callback.c @@ -124,6 +124,7 @@ pgaio_io_set_handle_data_64(PgAioHandle *ioh, uint64 *data, uint8 len) Assert(ioh->state == PGAIO_HS_HANDED_OUT); Assert(ioh->handle_data_len == 0); Assert(len <= PG_IOV_MAX); + Assert(len <= io_max_combine_limit); for (int i = 0; i < len; i++) pgaio_ctl->handle_data[ioh->iovec_off + i] = data[i]; @@ -141,6 +142,7 @@ pgaio_io_set_handle_data_32(PgAioHandle *ioh, uint32 *data, uint8 len) Assert(ioh->state == PGAIO_HS_HANDED_OUT); Assert(ioh->handle_data_len == 0); Assert(len <= PG_IOV_MAX); + Assert(len <= io_max_combine_limit); for (int i = 0; i < len; i++) pgaio_ctl->handle_data[ioh->iovec_off + i] = data[i]; @@ -254,6 +256,9 @@ pgaio_io_call_complete_shared(PgAioHandle *ioh) pgaio_result_status_string(result.status), result.id, result.error_data, result.result); result = ce->cb->complete_shared(ioh, result, cb_data); + + /* the callback should never transition to unknown */ + Assert(result.status != PGAIO_RS_UNKNOWN); } ioh->distilled_result = result; @@ -288,6 +293,7 @@ pgaio_io_call_complete_local(PgAioHandle *ioh) /* start with distilled result from shared callback */ result = ioh->distilled_result; + Assert(result.status != PGAIO_RS_UNKNOWN); for (int i = ioh->num_callbacks; i > 0; i--) { @@ -304,6 +310,9 @@ pgaio_io_call_complete_local(PgAioHandle *ioh) pgaio_result_status_string(result.status), result.id, result.error_data, result.result); result = ce->cb->complete_local(ioh, result, cb_data); + + /* the callback should never transition to unknown */ + Assert(result.status != PGAIO_RS_UNKNOWN); } /* diff --git a/src/backend/storage/aio/aio_funcs.c b/src/backend/storage/aio/aio_funcs.c index 584e683371a31..d7977387b8f1a 100644 --- a/src/backend/storage/aio/aio_funcs.c +++ b/src/backend/storage/aio/aio_funcs.c @@ -56,7 +56,7 @@ pg_get_aios(PG_FUNCTION_ARGS) for (uint64 i = 0; i < pgaio_ctl->io_handle_count; i++) { PgAioHandle *live_ioh = &pgaio_ctl->io_handles[i]; - uint32 ioh_id = pgaio_io_get_id(live_ioh); + int ioh_id = pgaio_io_get_id(live_ioh); Datum values[PG_GET_AIOS_COLS] = {0}; bool nulls[PG_GET_AIOS_COLS] = {0}; ProcNumber owner; @@ -152,7 +152,7 @@ pg_get_aios(PG_FUNCTION_ARGS) nulls[0] = false; /* column: IO's id */ - values[1] = ioh_id; + values[1] = Int32GetDatum(ioh_id); /* column: IO's generation */ values[2] = Int64GetDatum(start_generation); @@ -175,7 +175,7 @@ pg_get_aios(PG_FUNCTION_ARGS) values[4] = CStringGetTextDatum(pgaio_io_get_op_name(&ioh_copy)); /* columns: details about the IO's operation (offset, length) */ - switch (ioh_copy.op) + switch ((PgAioOp) ioh_copy.op) { case PGAIO_OP_INVALID: nulls[5] = true; diff --git a/src/backend/storage/aio/aio_io.c b/src/backend/storage/aio/aio_io.c index 4d31392ddc704..7d11d40284ada 100644 --- a/src/backend/storage/aio/aio_io.c +++ b/src/backend/storage/aio/aio_io.c @@ -121,7 +121,7 @@ pgaio_io_perform_synchronously(PgAioHandle *ioh) START_CRIT_SECTION(); /* Perform IO. */ - switch (ioh->op) + switch ((PgAioOp) ioh->op) { case PGAIO_OP_READV: pgstat_report_wait_start(WAIT_EVENT_DATA_FILE_READ); @@ -176,14 +176,14 @@ pgaio_io_get_op_name(PgAioHandle *ioh) { Assert(ioh->op >= 0 && ioh->op < PGAIO_OP_COUNT); - switch (ioh->op) + switch ((PgAioOp) ioh->op) { case PGAIO_OP_INVALID: return "invalid"; case PGAIO_OP_READV: - return "read"; + return "readv"; case PGAIO_OP_WRITEV: - return "write"; + return "writev"; } return NULL; /* silence compiler */ @@ -198,7 +198,7 @@ pgaio_io_uses_fd(PgAioHandle *ioh, int fd) { Assert(ioh->state >= PGAIO_HS_DEFINED); - switch (ioh->op) + switch ((PgAioOp) ioh->op) { case PGAIO_OP_READV: return ioh->op_data.read.fd == fd; @@ -210,3 +210,26 @@ pgaio_io_uses_fd(PgAioHandle *ioh, int fd) return false; /* silence compiler */ } + +/* + * Return the iovec and its length. Currently only expected to be used by + * debugging infrastructure + */ +int +pgaio_io_get_iovec_length(PgAioHandle *ioh, struct iovec **iov) +{ + Assert(ioh->state >= PGAIO_HS_DEFINED); + + *iov = &pgaio_ctl->iovecs[ioh->iovec_off]; + + switch ((PgAioOp) ioh->op) + { + case PGAIO_OP_READV: + return ioh->op_data.read.iov_length; + case PGAIO_OP_WRITEV: + return ioh->op_data.write.iov_length; + default: + pg_unreachable(); + return 0; + } +} diff --git a/src/backend/storage/aio/aio_target.c b/src/backend/storage/aio/aio_target.c index ac6c74f4ff264..161f0f1edf68c 100644 --- a/src/backend/storage/aio/aio_target.c +++ b/src/backend/storage/aio/aio_target.c @@ -49,7 +49,8 @@ pgaio_io_has_target(PgAioHandle *ioh) const char * pgaio_io_get_target_name(PgAioHandle *ioh) { - Assert(ioh->target >= 0 && ioh->target < PGAIO_TID_COUNT); + /* explicitly allow INVALID here, function used by debug messages */ + Assert(ioh->target >= PGAIO_TID_INVALID && ioh->target < PGAIO_TID_COUNT); return pgaio_target_info[ioh->target]->name; } @@ -82,6 +83,9 @@ pgaio_io_get_target_data(PgAioHandle *ioh) char * pgaio_io_get_target_description(PgAioHandle *ioh) { + /* disallow INVALID, there wouldn't be a description */ + Assert(ioh->target > PGAIO_TID_INVALID && ioh->target < PGAIO_TID_COUNT); + return pgaio_target_info[ioh->target]->describe_identity(&ioh->target_data); } @@ -98,6 +102,8 @@ pgaio_io_get_target_description(PgAioHandle *ioh) bool pgaio_io_can_reopen(PgAioHandle *ioh) { + Assert(ioh->target > PGAIO_TID_INVALID && ioh->target < PGAIO_TID_COUNT); + return pgaio_target_info[ioh->target]->reopen != NULL; } @@ -109,8 +115,8 @@ pgaio_io_can_reopen(PgAioHandle *ioh) void pgaio_io_reopen(PgAioHandle *ioh) { - Assert(ioh->target >= 0 && ioh->target < PGAIO_TID_COUNT); - Assert(ioh->op >= 0 && ioh->op < PGAIO_OP_COUNT); + Assert(ioh->target > PGAIO_TID_INVALID && ioh->target < PGAIO_TID_COUNT); + Assert(ioh->op > PGAIO_OP_INVALID && ioh->op < PGAIO_OP_COUNT); pgaio_target_info[ioh->target]->reopen(ioh); } diff --git a/src/backend/storage/aio/method_io_uring.c b/src/backend/storage/aio/method_io_uring.c index 0bcdab14ae7e3..bb06da63a8e02 100644 --- a/src/backend/storage/aio/method_io_uring.c +++ b/src/backend/storage/aio/method_io_uring.c @@ -29,6 +29,9 @@ #ifdef IOMETHOD_IO_URING_ENABLED +#include +#include + #include #include "miscadmin.h" @@ -94,12 +97,32 @@ PgAioUringContext struct io_uring io_uring_ring; } PgAioUringContext; +/* + * Information about the capabilities that io_uring has. + * + * Depending on liburing and kernel version different features are + * supported. At least for the kernel a kernel version check does not suffice + * as various vendors do backport features to older kernels :(. + */ +typedef struct PgAioUringCaps +{ + bool checked; + /* -1 if io_uring_queue_init_mem() is unsupported */ + int mem_init_size; +} PgAioUringCaps; + + /* PgAioUringContexts for all backends */ static PgAioUringContext *pgaio_uring_contexts; /* the current backend's context */ static PgAioUringContext *pgaio_my_uring_context; +static PgAioUringCaps pgaio_uring_caps = +{ + .checked = false, + .mem_init_size = -1, +}; static uint32 pgaio_uring_procs(void) @@ -111,30 +134,184 @@ pgaio_uring_procs(void) return MaxBackends + NUM_AUXILIARY_PROCS - MAX_IO_WORKERS; } -static Size +/* + * Initializes pgaio_uring_caps, unless that's already done. + */ +static void +pgaio_uring_check_capabilities(void) +{ + if (pgaio_uring_caps.checked) + return; + + /* + * By default io_uring creates a shared memory mapping for each io_uring + * instance, leading to a large number of memory mappings. Unfortunately a + * large number of memory mappings slows things down, backend exit is + * particularly affected. To address that, newer kernels (6.5) support + * using user-provided memory for the memory, by putting the relevant + * memory into shared memory we don't need any additional mappings. + * + * To know whether this is supported, we unfortunately need to probe the + * kernel by trying to create a ring with userspace-provided memory. This + * also has a secondary benefit: We can determine precisely how much + * memory we need for each io_uring instance. + */ +#if defined(HAVE_LIBURING_QUEUE_INIT_MEM) && defined(IORING_SETUP_NO_MMAP) + { + struct io_uring test_ring; + size_t ring_size; + void *ring_ptr; + struct io_uring_params p = {0}; + int ret; + + /* + * Liburing does not yet provide an API to query how much memory a + * ring will need. So we over-estimate it here. As the memory is freed + * just below that's small temporary waste of memory. + * + * 1MB is more than enough for rings within io_max_concurrency's + * range. + */ + ring_size = 1024 * 1024; + + /* + * Hard to believe a system exists where 1MB would not be a multiple + * of the page size. But it's cheap to ensure... + */ + ring_size -= ring_size % sysconf(_SC_PAGESIZE); + + ring_ptr = mmap(NULL, ring_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (ring_ptr == MAP_FAILED) + elog(ERROR, + "mmap(%zu) to determine io_uring_queue_init_mem() support failed: %m", + ring_size); + + ret = io_uring_queue_init_mem(io_max_concurrency, &test_ring, &p, ring_ptr, ring_size); + if (ret > 0) + { + pgaio_uring_caps.mem_init_size = ret; + + elog(DEBUG1, + "can use combined memory mapping for io_uring, each ring needs %d bytes", + ret); + + /* clean up the created ring, it was just for a test */ + io_uring_queue_exit(&test_ring); + } + else + { + /* + * There are different reasons for ring creation to fail, but it's + * ok to treat that just as io_uring_queue_init_mem() not being + * supported. We'll report a more detailed error in + * pgaio_uring_shmem_init(). + */ + errno = -ret; + elog(DEBUG1, + "cannot use combined memory mapping for io_uring, ring creation failed: %m"); + + } + + if (munmap(ring_ptr, ring_size) != 0) + elog(ERROR, "munmap() failed: %m"); + } +#else + { + elog(DEBUG1, + "can't use combined memory mapping for io_uring, kernel or liburing too old"); + } +#endif + + pgaio_uring_caps.checked = true; +} + +/* + * Memory for all PgAioUringContext instances + */ +static size_t pgaio_uring_context_shmem_size(void) { return mul_size(pgaio_uring_procs(), sizeof(PgAioUringContext)); } +/* + * Memory for the combined memory used by io_uring instances. Returns 0 if + * that is not supported by kernel/liburing. + */ +static size_t +pgaio_uring_ring_shmem_size(void) +{ + size_t sz = 0; + + if (pgaio_uring_caps.mem_init_size > 0) + { + /* + * Memory for rings needs to be allocated to the page boundary, + * reserve space. Luckily it does not need to be aligned to hugepage + * boundaries, even if huge pages are used. + */ + sz = add_size(sz, sysconf(_SC_PAGESIZE)); + sz = add_size(sz, mul_size(pgaio_uring_procs(), + pgaio_uring_caps.mem_init_size)); + } + + return sz; +} + static size_t pgaio_uring_shmem_size(void) { - return pgaio_uring_context_shmem_size(); + size_t sz; + + /* + * Kernel and liburing support for various features influences how much + * shmem we need, perform the necessary checks. + */ + pgaio_uring_check_capabilities(); + + sz = pgaio_uring_context_shmem_size(); + sz = add_size(sz, pgaio_uring_ring_shmem_size()); + + return sz; } static void pgaio_uring_shmem_init(bool first_time) { - int TotalProcs = MaxBackends + NUM_AUXILIARY_PROCS - MAX_IO_WORKERS; + int TotalProcs = pgaio_uring_procs(); bool found; + char *shmem; + size_t ring_mem_remain = 0; + char *ring_mem_next = 0; - pgaio_uring_contexts = (PgAioUringContext *) - ShmemInitStruct("AioUring", pgaio_uring_shmem_size(), &found); - + /* + * We allocate memory for all PgAioUringContext instances and, if + * supported, the memory required for each of the io_uring instances, in + * one ShmemInitStruct(). + */ + shmem = ShmemInitStruct("AioUringContext", pgaio_uring_shmem_size(), &found); if (found) return; + pgaio_uring_contexts = (PgAioUringContext *) shmem; + shmem += pgaio_uring_context_shmem_size(); + + /* if supported, handle memory alignment / sizing for io_uring memory */ + if (pgaio_uring_caps.mem_init_size > 0) + { + ring_mem_remain = pgaio_uring_ring_shmem_size(); + ring_mem_next = (char *) shmem; + + /* align to page boundary, see also pgaio_uring_ring_shmem_size() */ + ring_mem_next = (char *) TYPEALIGN(sysconf(_SC_PAGESIZE), ring_mem_next); + + /* account for alignment */ + ring_mem_remain -= ring_mem_next - shmem; + shmem += ring_mem_next - shmem; + + shmem += ring_mem_remain; + } + for (int contextno = 0; contextno < TotalProcs; contextno++) { PgAioUringContext *context = &pgaio_uring_contexts[contextno]; @@ -158,7 +335,28 @@ pgaio_uring_shmem_init(bool first_time) * be worth using that - also need to evaluate if that causes * noticeable additional contention? */ - ret = io_uring_queue_init(io_max_concurrency, &context->io_uring_ring, 0); + + /* + * If supported (c.f. pgaio_uring_check_capabilities()), create ring + * with its data in shared memory. Otherwise fall back io_uring + * creating a memory mapping for each ring. + */ +#if defined(HAVE_LIBURING_QUEUE_INIT_MEM) && defined(IORING_SETUP_NO_MMAP) + if (pgaio_uring_caps.mem_init_size > 0) + { + struct io_uring_params p = {0}; + + ret = io_uring_queue_init_mem(io_max_concurrency, &context->io_uring_ring, &p, ring_mem_next, ring_mem_remain); + + ring_mem_remain -= ret; + ring_mem_next += ret; + } + else +#endif + { + ret = io_uring_queue_init(io_max_concurrency, &context->io_uring_ring, 0); + } + if (ret < 0) { char *hint = NULL; @@ -179,7 +377,7 @@ pgaio_uring_shmem_init(bool first_time) else if (-ret == ENOSYS) { err = ERRCODE_FEATURE_NOT_SUPPORTED; - hint = _("Kernel does not support io_uring."); + hint = _("The kernel does not support io_uring."); } /* update errno to allow %m to work */ @@ -302,14 +500,41 @@ pgaio_uring_submit(uint16 num_staged_ios, PgAioHandle **staged_ios) return num_staged_ios; } +static void +pgaio_uring_completion_error_callback(void *arg) +{ + ProcNumber owner; + PGPROC *owner_proc; + int32 owner_pid; + PgAioHandle *ioh = arg; + + if (!ioh) + return; + + /* No need for context if a backend is completing the IO for itself */ + if (ioh->owner_procno == MyProcNumber) + return; + + owner = ioh->owner_procno; + owner_proc = GetPGProcByNumber(owner); + owner_pid = owner_proc->pid; + + errcontext("completing I/O on behalf of process %d", owner_pid); +} + static void pgaio_uring_drain_locked(PgAioUringContext *context) { int ready; int orig_ready; + ErrorContextCallback errcallback = {0}; Assert(LWLockHeldByMeInMode(&context->completion_lock, LW_EXCLUSIVE)); + errcallback.callback = pgaio_uring_completion_error_callback; + errcallback.previous = error_context_stack; + error_context_stack = &errcallback; + /* * Don't drain more events than available right now. Otherwise it's * plausible that one backend could get stuck, for a while, receiving CQEs @@ -337,9 +562,11 @@ pgaio_uring_drain_locked(PgAioUringContext *context) PgAioHandle *ioh; ioh = io_uring_cqe_get_data(cqe); + errcallback.arg = ioh; io_uring_cqe_seen(&context->io_uring_ring, cqe); pgaio_io_process_completion(ioh, cqe->res); + errcallback.arg = NULL; } END_CRIT_SECTION(); @@ -348,6 +575,8 @@ pgaio_uring_drain_locked(PgAioUringContext *context) "drained %d/%d, now expecting %d", ncqes, orig_ready, io_uring_cq_ready(&context->io_uring_ring)); } + + error_context_stack = errcallback.previous; } static void @@ -369,9 +598,9 @@ pgaio_uring_wait_one(PgAioHandle *ioh, uint64 ref_generation) while (true) { pgaio_debug_io(DEBUG3, ioh, - "wait_one io_gen: %llu, ref_gen: %llu, cycle %d", - (long long unsigned) ioh->generation, - (long long unsigned) ref_generation, + "wait_one io_gen: %" PRIu64 ", ref_gen: %" PRIu64 ", cycle %d", + ioh->generation, + ref_generation, waited); if (pgaio_io_was_recycled(ioh, ref_generation, &state) || @@ -431,7 +660,7 @@ pgaio_uring_sq_from_io(PgAioHandle *ioh, struct io_uring_sqe *sqe) { struct iovec *iov; - switch (ioh->op) + switch ((PgAioOp) ioh->op) { case PGAIO_OP_READV: iov = &pgaio_ctl->iovecs[ioh->iovec_off]; diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c index 4a7853d13fac9..b5ac073a910df 100644 --- a/src/backend/storage/aio/method_worker.c +++ b/src/backend/storage/aio/method_worker.c @@ -42,6 +42,8 @@ #include "storage/latch.h" #include "storage/proc.h" #include "tcop/tcopprot.h" +#include "utils/injection_point.h" +#include "utils/memdebug.h" #include "utils/ps_status.h" #include "utils/wait_event.h" @@ -50,26 +52,26 @@ #define IO_WORKER_WAKEUP_FANOUT 2 -typedef struct AioWorkerSubmissionQueue +typedef struct PgAioWorkerSubmissionQueue { uint32 size; uint32 mask; uint32 head; uint32 tail; - uint32 ios[FLEXIBLE_ARRAY_MEMBER]; -} AioWorkerSubmissionQueue; + int sqes[FLEXIBLE_ARRAY_MEMBER]; +} PgAioWorkerSubmissionQueue; -typedef struct AioWorkerSlot +typedef struct PgAioWorkerSlot { Latch *latch; bool in_use; -} AioWorkerSlot; +} PgAioWorkerSlot; -typedef struct AioWorkerControl +typedef struct PgAioWorkerControl { uint64 idle_worker_mask; - AioWorkerSlot workers[FLEXIBLE_ARRAY_MEMBER]; -} AioWorkerControl; + PgAioWorkerSlot workers[FLEXIBLE_ARRAY_MEMBER]; +} PgAioWorkerControl; static size_t pgaio_worker_shmem_size(void); @@ -94,8 +96,8 @@ int io_workers = 3; static int io_worker_queue_size = 64; static int MyIoWorkerId; -static AioWorkerSubmissionQueue *io_worker_submission_queue; -static AioWorkerControl *io_worker_control; +static PgAioWorkerSubmissionQueue *io_worker_submission_queue; +static PgAioWorkerControl *io_worker_control; static size_t @@ -104,15 +106,15 @@ pgaio_worker_queue_shmem_size(int *queue_size) /* Round size up to next power of two so we can make a mask. */ *queue_size = pg_nextpower2_32(io_worker_queue_size); - return offsetof(AioWorkerSubmissionQueue, ios) + - sizeof(uint32) * *queue_size; + return offsetof(PgAioWorkerSubmissionQueue, sqes) + + sizeof(int) * *queue_size; } static size_t pgaio_worker_control_shmem_size(void) { - return offsetof(AioWorkerControl, workers) + - sizeof(AioWorkerSlot) * MAX_IO_WORKERS; + return offsetof(PgAioWorkerControl, workers) + + sizeof(PgAioWorkerSlot) * MAX_IO_WORKERS; } static size_t @@ -160,7 +162,7 @@ pgaio_worker_shmem_init(bool first_time) } static int -pgaio_choose_idle_worker(void) +pgaio_worker_choose_idle(void) { int worker; @@ -170,6 +172,7 @@ pgaio_choose_idle_worker(void) /* Find the lowest bit position, and clear it. */ worker = pg_rightmost_one_pos64(io_worker_control->idle_worker_mask); io_worker_control->idle_worker_mask &= ~(UINT64_C(1) << worker); + Assert(io_worker_control->workers[worker].in_use); return worker; } @@ -177,7 +180,7 @@ pgaio_choose_idle_worker(void) static bool pgaio_worker_submission_queue_insert(PgAioHandle *ioh) { - AioWorkerSubmissionQueue *queue; + PgAioWorkerSubmissionQueue *queue; uint32 new_head; queue = io_worker_submission_queue; @@ -189,23 +192,23 @@ pgaio_worker_submission_queue_insert(PgAioHandle *ioh) return false; /* full */ } - queue->ios[queue->head] = pgaio_io_get_id(ioh); + queue->sqes[queue->head] = pgaio_io_get_id(ioh); queue->head = new_head; return true; } -static uint32 +static int pgaio_worker_submission_queue_consume(void) { - AioWorkerSubmissionQueue *queue; - uint32 result; + PgAioWorkerSubmissionQueue *queue; + int result; queue = io_worker_submission_queue; if (queue->tail == queue->head) - return UINT32_MAX; /* empty */ + return -1; /* empty */ - result = queue->ios[queue->tail]; + result = queue->sqes[queue->tail]; queue->tail = (queue->tail + 1) & (queue->size - 1); return result; @@ -238,37 +241,37 @@ pgaio_worker_needs_synchronous_execution(PgAioHandle *ioh) } static void -pgaio_worker_submit_internal(int nios, PgAioHandle *ios[]) +pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios) { PgAioHandle *synchronous_ios[PGAIO_SUBMIT_BATCH_SIZE]; int nsync = 0; Latch *wakeup = NULL; int worker; - Assert(nios <= PGAIO_SUBMIT_BATCH_SIZE); + Assert(num_staged_ios <= PGAIO_SUBMIT_BATCH_SIZE); LWLockAcquire(AioWorkerSubmissionQueueLock, LW_EXCLUSIVE); - for (int i = 0; i < nios; ++i) + for (int i = 0; i < num_staged_ios; ++i) { - Assert(!pgaio_worker_needs_synchronous_execution(ios[i])); - if (!pgaio_worker_submission_queue_insert(ios[i])) + Assert(!pgaio_worker_needs_synchronous_execution(staged_ios[i])); + if (!pgaio_worker_submission_queue_insert(staged_ios[i])) { /* * We'll do it synchronously, but only after we've sent as many as * we can to workers, to maximize concurrency. */ - synchronous_ios[nsync++] = ios[i]; + synchronous_ios[nsync++] = staged_ios[i]; continue; } if (wakeup == NULL) { /* Choose an idle worker to wake up if we haven't already. */ - worker = pgaio_choose_idle_worker(); + worker = pgaio_worker_choose_idle(); if (worker >= 0) wakeup = io_worker_control->workers[worker].latch; - pgaio_debug_io(DEBUG4, ios[i], + pgaio_debug_io(DEBUG4, staged_ios[i], "choosing worker %d", worker); } @@ -314,13 +317,14 @@ pgaio_worker_die(int code, Datum arg) Assert(io_worker_control->workers[MyIoWorkerId].in_use); Assert(io_worker_control->workers[MyIoWorkerId].latch == MyLatch); + io_worker_control->idle_worker_mask &= ~(UINT64_C(1) << MyIoWorkerId); io_worker_control->workers[MyIoWorkerId].in_use = false; io_worker_control->workers[MyIoWorkerId].latch = NULL; LWLockRelease(AioWorkerSubmissionQueueLock); } /* - * Register the worker in shared memory, assign MyWorkerId and register a + * Register the worker in shared memory, assign MyIoWorkerId and register a * shutdown callback to release registration. */ static void @@ -357,11 +361,33 @@ pgaio_worker_register(void) on_shmem_exit(pgaio_worker_die, 0); } +static void +pgaio_worker_error_callback(void *arg) +{ + ProcNumber owner; + PGPROC *owner_proc; + int32 owner_pid; + PgAioHandle *ioh = arg; + + if (!ioh) + return; + + Assert(ioh->owner_procno != MyProcNumber); + Assert(MyBackendType == B_IO_WORKER); + + owner = ioh->owner_procno; + owner_proc = GetPGProcByNumber(owner); + owner_pid = owner_proc->pid; + + errcontext("I/O worker executing I/O on behalf of process %d", owner_pid); +} + void IoWorkerMain(const void *startup_data, size_t startup_data_len) { sigjmp_buf local_sigjmp_buf; PgAioHandle *volatile error_ioh = NULL; + ErrorContextCallback errcallback = {0}; volatile int error_errno = 0; char cmd[128]; @@ -388,6 +414,10 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) sprintf(cmd, "%d", MyIoWorkerId); set_ps_display(cmd); + errcallback.callback = pgaio_worker_error_callback; + errcallback.previous = error_context_stack; + error_context_stack = &errcallback; + /* see PostgresMain() */ if (sigsetjmp(local_sigjmp_buf, 1) != 0) { @@ -433,9 +463,14 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) int nwakeups = 0; int worker; - /* Try to get a job to do. */ + /* + * Try to get a job to do. + * + * The lwlock acquisition also provides the necessary memory barrier + * to ensure that we don't see an outdated data in the handle. + */ LWLockAcquire(AioWorkerSubmissionQueueLock, LW_EXCLUSIVE); - if ((io_index = pgaio_worker_submission_queue_consume()) == UINT32_MAX) + if ((io_index = pgaio_worker_submission_queue_consume()) == -1) { /* * Nothing to do. Mark self idle. @@ -455,7 +490,7 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) IO_WORKER_WAKEUP_FANOUT); for (int i = 0; i < nwakeups; ++i) { - if ((worker = pgaio_choose_idle_worker()) < 0) + if ((worker = pgaio_worker_choose_idle()) < 0) break; latches[nlatches++] = io_worker_control->workers[worker].latch; } @@ -465,12 +500,13 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) for (int i = 0; i < nlatches; ++i) SetLatch(latches[i]); - if (io_index != UINT32_MAX) + if (io_index != -1) { PgAioHandle *ioh = NULL; ioh = &pgaio_ctl->io_handles[io_index]; error_ioh = ioh; + errcallback.arg = ioh; pgaio_debug_io(DEBUG4, ioh, "worker %d processing IO", @@ -497,11 +533,29 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) * To be able to exercise the reopen-fails path, allow injection * points to trigger a failure at this point. */ - pgaio_io_call_inj(ioh, "AIO_WORKER_AFTER_REOPEN"); + INJECTION_POINT("aio-worker-after-reopen", ioh); error_errno = 0; error_ioh = NULL; + /* + * As part of IO completion the buffer will be marked as NOACCESS, + * until the buffer is pinned again - which never happens in io + * workers. Therefore the next time there is IO for the same + * buffer, the memory will be considered inaccessible. To avoid + * that, explicitly allow access to the memory before reading data + * into it. + */ +#ifdef USE_VALGRIND + { + struct iovec *iov; + uint16 iov_length = pgaio_io_get_iovec_length(ioh, &iov); + + for (int i = 0; i < iov_length; i++) + VALGRIND_MAKE_MEM_UNDEFINED(iov[i].iov_base, iov[i].iov_len); + } +#endif + /* * We don't expect this to ever fail with ERROR or FATAL, no need * to keep error_ioh set to the IO. @@ -511,6 +565,7 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) pgaio_io_perform_synchronously(ioh); RESUME_INTERRUPTS(); + errcallback.arg = NULL; } else { @@ -520,8 +575,15 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) } CHECK_FOR_INTERRUPTS(); + + if (ConfigReloadPending) + { + ConfigReloadPending = false; + ProcessConfigFile(PGC_SIGHUP); + } } + error_context_stack = errcallback.previous; proc_exit(0); } diff --git a/src/backend/storage/aio/read_stream.c b/src/backend/storage/aio/read_stream.c index 36c54fb695b05..031fde9f4cbef 100644 --- a/src/backend/storage/aio/read_stream.c +++ b/src/backend/storage/aio/read_stream.c @@ -237,7 +237,7 @@ read_stream_start_pending_read(ReadStream *stream) int16 io_index; int16 overflow; int16 buffer_index; - int16 buffer_limit; + int buffer_limit; /* This should only be called with a pending read. */ Assert(stream->pending_read_nblocks > 0); @@ -247,12 +247,33 @@ read_stream_start_pending_read(ReadStream *stream) Assert(stream->pinned_buffers + stream->pending_read_nblocks <= stream->max_pinned_buffers); +#ifdef USE_ASSERT_CHECKING /* We had better not be overwriting an existing pinned buffer. */ if (stream->pinned_buffers > 0) Assert(stream->next_buffer_index != stream->oldest_buffer_index); else Assert(stream->next_buffer_index == stream->oldest_buffer_index); + /* + * Pinned buffers forwarded by a preceding StartReadBuffers() call that + * had to split the operation should match the leading blocks of this + * following StartReadBuffers() call. + */ + Assert(stream->forwarded_buffers <= stream->pending_read_nblocks); + for (int i = 0; i < stream->forwarded_buffers; ++i) + Assert(BufferGetBlockNumber(stream->buffers[stream->next_buffer_index + i]) == + stream->pending_read_blocknum + i); + + /* + * Check that we've cleared the queue/overflow entries corresponding to + * the rest of the blocks covered by this read, unless it's the first go + * around and we haven't even initialized them yet. + */ + for (int i = stream->forwarded_buffers; i < stream->pending_read_nblocks; ++i) + Assert(stream->next_buffer_index + i >= stream->initialized_buffers || + stream->buffers[stream->next_buffer_index + i] == InvalidBuffer); +#endif + /* Do we need to issue read-ahead advice? */ flags = stream->read_buffers_flags; if (stream->advice_enabled) @@ -294,7 +315,10 @@ read_stream_start_pending_read(ReadStream *stream) else buffer_limit = Min(GetAdditionalPinLimit(), PG_INT16_MAX); Assert(stream->forwarded_buffers <= stream->pending_read_nblocks); + buffer_limit += stream->forwarded_buffers; + buffer_limit = Min(buffer_limit, PG_INT16_MAX); + if (buffer_limit == 0 && stream->pinned_buffers == 0) buffer_limit = 1; /* guarantee progress */ @@ -976,6 +1000,19 @@ read_stream_next_buffer(ReadStream *stream, void **per_buffer_data) stream->pending_read_nblocks == 0 && stream->per_buffer_data_size == 0) { + /* + * The fast path spins on one buffer entry repeatedly instead of + * rotating through the whole queue and clearing the entries behind + * it. If the buffer it starts with happened to be forwarded between + * StartReadBuffers() calls and also wrapped around the circular queue + * partway through, then a copy also exists in the overflow zone, and + * it won't clear it out as the regular path would. Do that now, so + * it doesn't need code for that. + */ + if (stream->oldest_buffer_index < stream->io_combine_limit - 1) + stream->buffers[stream->queue_size + stream->oldest_buffer_index] = + InvalidBuffer; + stream->fast_path = true; } #endif diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 1c37d7dfe2f92..350cc0402aa8f 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -40,6 +40,9 @@ #include "access/tableam.h" #include "access/xloginsert.h" #include "access/xlogutils.h" +#ifdef USE_ASSERT_CHECKING +#include "catalog/pg_tablespace_d.h" +#endif #include "catalog/storage.h" #include "catalog/storage_xlog.h" #include "executor/instrument.h" @@ -527,7 +530,7 @@ static inline BufferDesc *BufferAlloc(SMgrRelation smgr, BlockNumber blockNum, BufferAccessStrategy strategy, bool *foundPtr, IOContext io_context); -static bool AsyncReadBuffers(ReadBuffersOperation *operation, int *nblocks); +static bool AsyncReadBuffers(ReadBuffersOperation *operation, int *nblocks_progress); static void CheckReadBuffersOperation(ReadBuffersOperation *operation, bool is_complete); static Buffer GetVictimBuffer(BufferAccessStrategy strategy, IOContext io_context); static void FlushBuffer(BufferDesc *buf, SMgrRelation reln, @@ -541,6 +544,10 @@ static void RelationCopyStorageUsingBuffer(RelFileLocator srclocator, ForkNumber forkNum, bool permanent); static void AtProcExit_Buffers(int code, Datum arg); static void CheckForBufferLeaks(void); +#ifdef USE_ASSERT_CHECKING +static void AssertNotCatalogBufferLock(LWLock *lock, LWLockMode mode, + void *unused_context); +#endif static int rlocator_comparator(const void *p1, const void *p2); static inline int buffertag_comparator(const BufferTag *ba, const BufferTag *bb); static inline int ckpt_buforder_comparator(const CkptSortItem *a, const CkptSortItem *b); @@ -1477,11 +1484,6 @@ StartReadBuffersImpl(ReadBuffersOperation *operation, * buffers must remain valid until WaitReadBuffers() is called, and any * forwarded buffers must also be preserved for a continuing call unless * they are explicitly released. - * - * Currently the I/O is only started with optional operating system advice if - * requested by the caller with READ_BUFFERS_ISSUE_ADVICE, and the real I/O - * happens synchronously in WaitReadBuffers(). In future work, true I/O could - * be initiated here. */ bool StartReadBuffers(ReadBuffersOperation *operation, @@ -2736,12 +2738,10 @@ ExtendBufferedRelShared(BufferManagerRelation bmr, * because mdread doesn't complain about reads beyond EOF (when * zero_damaged_pages is ON) and so a previous attempt to read a block * beyond EOF could have left a "valid" zero-filled buffer. - * Unfortunately, we have also seen this case occurring because of - * buggy Linux kernels that sometimes return an lseek(SEEK_END) result - * that doesn't account for a recent write. In that situation, the - * pre-existing buffer would contain valid data that we don't want to - * overwrite. Since the legitimate cases should always have left a - * zero-filled buffer, complain if not PageIsNew. + * + * This has also been observed when relation was overwritten by + * external process. Since the legitimate cases should always have + * left a zero-filled buffer, complain if not PageIsNew. */ if (existing_id >= 0) { @@ -2769,10 +2769,9 @@ ExtendBufferedRelShared(BufferManagerRelation bmr, if (valid && !PageIsNew((Page) buf_block)) ereport(ERROR, - (errmsg("unexpected data beyond EOF in block %u of relation %s", + (errmsg("unexpected data beyond EOF in block %u of relation \"%s\"", existing_hdr->tag.blockNum, - relpath(bmr.smgr->smgr_rlocator, fork).str), - errhint("This has been seen to occur with buggy kernels; consider updating your system."))); + relpath(bmr.smgr->smgr_rlocator, fork).str))); /* * We *must* do smgr[zero]extend before succeeding, else the page @@ -3326,16 +3325,16 @@ UnpinBufferNoOwner(BufferDesc *buf) #define ST_COMPARE(a, b) ckpt_buforder_comparator(a, b) #define ST_SCOPE static #define ST_DEFINE -#include +#include "lib/sort_template.h" /* * BufferSync -- Write out all dirty buffers in the pool. * * This is called at checkpoint time to write out all dirty shared buffers. - * The checkpoint request flags should be passed in. If CHECKPOINT_IMMEDIATE - * is set, we disable delays between writes; if CHECKPOINT_IS_SHUTDOWN, - * CHECKPOINT_END_OF_RECOVERY or CHECKPOINT_FLUSH_ALL is set, we write even - * unlogged buffers, which are otherwise skipped. The remaining flags + * The checkpoint request flags should be passed in. If CHECKPOINT_FAST is + * set, we disable delays between writes; if CHECKPOINT_IS_SHUTDOWN, + * CHECKPOINT_END_OF_RECOVERY or CHECKPOINT_FLUSH_UNLOGGED is set, we write + * even unlogged buffers, which are otherwise skipped. The remaining flags * currently have no effect here. */ static void @@ -3360,7 +3359,7 @@ BufferSync(int flags) * recovery, we write all dirty buffers. */ if (!((flags & (CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_END_OF_RECOVERY | - CHECKPOINT_FLUSH_ALL)))) + CHECKPOINT_FLUSH_UNLOGGED)))) mask |= BM_PERMANENT; /* @@ -4097,6 +4096,67 @@ CheckForBufferLeaks(void) #endif } +#ifdef USE_ASSERT_CHECKING +/* + * Check for exclusive-locked catalog buffers. This is the core of + * AssertCouldGetRelation(). + * + * A backend would self-deadlock on LWLocks if the catalog scan read the + * exclusive-locked buffer. The main threat is exclusive-locked buffers of + * catalogs used in relcache, because a catcache search on any catalog may + * build that catalog's relcache entry. We don't have an inventory of + * catalogs relcache uses, so just check buffers of most catalogs. + * + * It's better to minimize waits while holding an exclusive buffer lock, so it + * would be nice to broaden this check not to be catalog-specific. However, + * bttextcmp() accesses pg_collation, and non-core opclasses might similarly + * read tables. That is deadlock-free as long as there's no loop in the + * dependency graph: modifying table A may cause an opclass to read table B, + * but it must not cause a read of table A. + */ +void +AssertBufferLocksPermitCatalogRead(void) +{ + ForEachLWLockHeldByMe(AssertNotCatalogBufferLock, NULL); +} + +static void +AssertNotCatalogBufferLock(LWLock *lock, LWLockMode mode, + void *unused_context) +{ + BufferDesc *bufHdr; + BufferTag tag; + Oid relid; + + if (mode != LW_EXCLUSIVE) + return; + + if (!((BufferDescPadded *) lock > BufferDescriptors && + (BufferDescPadded *) lock < BufferDescriptors + NBuffers)) + return; /* not a buffer lock */ + + bufHdr = (BufferDesc *) + ((char *) lock - offsetof(BufferDesc, content_lock)); + tag = bufHdr->tag; + + /* + * This relNumber==relid assumption holds until a catalog experiences + * VACUUM FULL or similar. After a command like that, relNumber will be + * in the normal (non-catalog) range, and we lose the ability to detect + * hazardous access to that catalog. Calling RelidByRelfilenumber() would + * close that gap, but RelidByRelfilenumber() might then deadlock with a + * held lock. + */ + relid = tag.relNumber; + + if (IsCatalogTextUniqueIndexOid(relid)) /* see comments at the callee */ + return; + + Assert(!IsCatalogRelationOid(relid)); +} +#endif + + /* * Helper routine to issue warnings when a buffer is unexpectedly pinned */ @@ -4482,11 +4542,9 @@ DropRelationBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, if (RelFileLocatorBackendIsTemp(rlocator)) { if (rlocator.backend == MyProcNumber) - { - for (j = 0; j < nforks; j++) - DropRelationLocalBuffers(rlocator.locator, forkNum[j], - firstDelBlock[j]); - } + DropRelationLocalBuffers(rlocator.locator, forkNum, nforks, + firstDelBlock); + return; } @@ -4895,8 +4953,21 @@ FlushRelationBuffers(Relation rel) errcallback.previous = error_context_stack; error_context_stack = &errcallback; + /* Make sure we can handle the pin */ + ReservePrivateRefCountEntry(); + ResourceOwnerEnlarge(CurrentResourceOwner); + + /* + * Pin/unpin mostly to make valgrind work, but it also seems + * like the right thing to do. + */ + PinLocalBuffer(bufHdr, false); + + FlushLocalBuffer(bufHdr, srel); + UnpinLocalBuffer(BufferDescriptorGetBuffer(bufHdr)); + /* Pop the error context stack */ error_context_stack = errcallback.previous; } @@ -6120,7 +6191,7 @@ shared_buffer_write_error_callback(void *arg) /* Buffer is pinned, so we can read the tag without locking the spinlock */ if (bufHdr != NULL) - errcontext("writing block %u of relation %s", + errcontext("writing block %u of relation \"%s\"", bufHdr->tag.blockNum, relpathperm(BufTagGetRelFileLocator(&bufHdr->tag), BufTagGetForkNum(&bufHdr->tag)).str); @@ -6135,7 +6206,7 @@ local_buffer_write_error_callback(void *arg) BufferDesc *bufHdr = (BufferDesc *) arg; if (bufHdr != NULL) - errcontext("writing block %u of relation %s", + errcontext("writing block %u of relation \"%s\"", bufHdr->tag.blockNum, relpathbackend(BufTagGetRelFileLocator(&bufHdr->tag), MyProcNumber, @@ -6294,8 +6365,8 @@ ckpt_buforder_comparator(const CkptSortItem *a, const CkptSortItem *b) static int ts_ckpt_progress_comparator(Datum a, Datum b, void *arg) { - CkptTsStatus *sa = (CkptTsStatus *) a; - CkptTsStatus *sb = (CkptTsStatus *) b; + CkptTsStatus *sa = (CkptTsStatus *) DatumGetPointer(a); + CkptTsStatus *sb = (CkptTsStatus *) DatumGetPointer(b); /* we want a min-heap, so return 1 for the a < b */ if (sa->progress < sb->progress) @@ -6367,7 +6438,7 @@ ScheduleBufferTagForWriteback(WritebackContext *wb_context, IOContext io_context #define ST_COMPARE(a, b) buffertag_comparator(&a->tag, &b->tag) #define ST_SCOPE static #define ST_DEFINE -#include +#include "lib/sort_template.h" /* * Issue all pending writeback requests, previously scheduled with @@ -6497,37 +6568,20 @@ ResOwnerPrintBufferPin(Datum res) } /* - * Try to evict the current block in a shared buffer. - * - * This function is intended for testing/development use only! - * - * To succeed, the buffer must not be pinned on entry, so if the caller had a - * particular block in mind, it might already have been replaced by some other - * block by the time this function runs. It's also unpinned on return, so the - * buffer might be occupied again by the time control is returned, potentially - * even by the same block. This inherent raciness without other interlocking - * makes the function unsuitable for non-testing usage. - * - * Returns true if the buffer was valid and it has now been made invalid. - * Returns false if it wasn't valid, if it couldn't be evicted due to a pin, - * or if the buffer becomes dirty again while we're trying to write it out. + * Helper function to evict unpinned buffer whose buffer header lock is + * already acquired. */ -bool -EvictUnpinnedBuffer(Buffer buf) +static bool +EvictUnpinnedBufferInternal(BufferDesc *desc, bool *buffer_flushed) { - BufferDesc *desc; uint32 buf_state; bool result; - /* Make sure we can pin the buffer. */ - ResourceOwnerEnlarge(CurrentResourceOwner); - ReservePrivateRefCountEntry(); + *buffer_flushed = false; - Assert(!BufferIsLocal(buf)); - desc = GetBufferDescriptor(buf - 1); + buf_state = pg_atomic_read_u32(&(desc->state)); + Assert(buf_state & BM_LOCKED); - /* Lock the header and check if it's valid. */ - buf_state = LockBufHdr(desc); if ((buf_state & BM_VALID) == 0) { UnlockBufHdr(desc, buf_state); @@ -6548,6 +6602,7 @@ EvictUnpinnedBuffer(Buffer buf) { LWLockAcquire(BufferDescriptorGetContentLock(desc), LW_SHARED); FlushBuffer(desc, NULL, IOOBJECT_RELATION, IOCONTEXT_NORMAL); + *buffer_flushed = true; LWLockRelease(BufferDescriptorGetContentLock(desc)); } @@ -6559,6 +6614,149 @@ EvictUnpinnedBuffer(Buffer buf) return result; } +/* + * Try to evict the current block in a shared buffer. + * + * This function is intended for testing/development use only! + * + * To succeed, the buffer must not be pinned on entry, so if the caller had a + * particular block in mind, it might already have been replaced by some other + * block by the time this function runs. It's also unpinned on return, so the + * buffer might be occupied again by the time control is returned, potentially + * even by the same block. This inherent raciness without other interlocking + * makes the function unsuitable for non-testing usage. + * + * *buffer_flushed is set to true if the buffer was dirty and has been + * flushed, false otherwise. However, *buffer_flushed=true does not + * necessarily mean that we flushed the buffer, it could have been flushed by + * someone else. + * + * Returns true if the buffer was valid and it has now been made invalid. + * Returns false if it wasn't valid, if it couldn't be evicted due to a pin, + * or if the buffer becomes dirty again while we're trying to write it out. + */ +bool +EvictUnpinnedBuffer(Buffer buf, bool *buffer_flushed) +{ + BufferDesc *desc; + + Assert(BufferIsValid(buf) && !BufferIsLocal(buf)); + + /* Make sure we can pin the buffer. */ + ResourceOwnerEnlarge(CurrentResourceOwner); + ReservePrivateRefCountEntry(); + + desc = GetBufferDescriptor(buf - 1); + LockBufHdr(desc); + + return EvictUnpinnedBufferInternal(desc, buffer_flushed); +} + +/* + * Try to evict all the shared buffers. + * + * This function is intended for testing/development use only! See + * EvictUnpinnedBuffer(). + * + * The buffers_* parameters are mandatory and indicate the total count of + * buffers that: + * - buffers_evicted - were evicted + * - buffers_flushed - were flushed + * - buffers_skipped - could not be evicted + */ +void +EvictAllUnpinnedBuffers(int32 *buffers_evicted, int32 *buffers_flushed, + int32 *buffers_skipped) +{ + *buffers_evicted = 0; + *buffers_skipped = 0; + *buffers_flushed = 0; + + for (int buf = 1; buf <= NBuffers; buf++) + { + BufferDesc *desc = GetBufferDescriptor(buf - 1); + uint32 buf_state; + bool buffer_flushed; + + buf_state = pg_atomic_read_u32(&desc->state); + if (!(buf_state & BM_VALID)) + continue; + + ResourceOwnerEnlarge(CurrentResourceOwner); + ReservePrivateRefCountEntry(); + + LockBufHdr(desc); + + if (EvictUnpinnedBufferInternal(desc, &buffer_flushed)) + (*buffers_evicted)++; + else + (*buffers_skipped)++; + + if (buffer_flushed) + (*buffers_flushed)++; + } +} + +/* + * Try to evict all the shared buffers containing provided relation's pages. + * + * This function is intended for testing/development use only! See + * EvictUnpinnedBuffer(). + * + * The caller must hold at least AccessShareLock on the relation to prevent + * the relation from being dropped. + * + * The buffers_* parameters are mandatory and indicate the total count of + * buffers that: + * - buffers_evicted - were evicted + * - buffers_flushed - were flushed + * - buffers_skipped - could not be evicted + */ +void +EvictRelUnpinnedBuffers(Relation rel, int32 *buffers_evicted, + int32 *buffers_flushed, int32 *buffers_skipped) +{ + Assert(!RelationUsesLocalBuffers(rel)); + + *buffers_skipped = 0; + *buffers_evicted = 0; + *buffers_flushed = 0; + + for (int buf = 1; buf <= NBuffers; buf++) + { + BufferDesc *desc = GetBufferDescriptor(buf - 1); + uint32 buf_state = pg_atomic_read_u32(&(desc->state)); + bool buffer_flushed; + + /* An unlocked precheck should be safe and saves some cycles. */ + if ((buf_state & BM_VALID) == 0 || + !BufTagMatchesRelFileLocator(&desc->tag, &rel->rd_locator)) + continue; + + /* Make sure we can pin the buffer. */ + ResourceOwnerEnlarge(CurrentResourceOwner); + ReservePrivateRefCountEntry(); + + buf_state = LockBufHdr(desc); + + /* recheck, could have changed without the lock */ + if ((buf_state & BM_VALID) == 0 || + !BufTagMatchesRelFileLocator(&desc->tag, &rel->rd_locator)) + { + UnlockBufHdr(desc, buf_state); + continue; + } + + if (EvictUnpinnedBufferInternal(desc, &buffer_flushed)) + (*buffers_evicted)++; + else + (*buffers_skipped)++; + + if (buffer_flushed) + (*buffers_flushed)++; + } +} + /* * Generic implementation of the AIO handle staging callback for readv/writev * on local/shared buffers. @@ -6868,7 +7066,18 @@ buffer_readv_complete_one(PgAioTargetData *td, uint8 buf_off, Buffer buffer, /* Check for garbage data. */ if (!failed) { - PgAioResult result_one; + /* + * If the buffer is not currently pinned by this backend, e.g. because + * we're completing this IO after an error, the buffer data will have + * been marked as inaccessible when the buffer was unpinned. The AIO + * subsystem holds a pin, but that doesn't prevent the buffer from + * having been marked as inaccessible. The completion might also be + * executed in a different process. + */ +#ifdef USE_VALGRIND + if (!BufferIsPinned(buffer)) + VALGRIND_MAKE_MEM_DEFINED(bufdata, BLCKSZ); +#endif if (!PageIsVerified((Page) bufdata, tag.blockNum, piv_flags, failed_checksum)) @@ -6888,6 +7097,12 @@ buffer_readv_complete_one(PgAioTargetData *td, uint8 buf_off, Buffer buffer, else if (*failed_checksum) *ignored_checksum = true; + /* undo what we did above */ +#ifdef USE_VALGRIND + if (!BufferIsPinned(buffer)) + VALGRIND_MAKE_MEM_NOACCESS(bufdata, BLCKSZ); +#endif + /* * Immediately log a message about the invalid page, but only to the * server log. The reason to do so immediately is that this may be @@ -6904,6 +7119,8 @@ buffer_readv_complete_one(PgAioTargetData *td, uint8 buf_off, Buffer buffer, */ if (*buffer_invalid || *failed_checksum || *zeroed_buffer) { + PgAioResult result_one = {0}; + buffer_readv_encode_error(&result_one, is_temp, *zeroed_buffer, *ignored_checksum, @@ -7088,13 +7305,15 @@ buffer_readv_report(PgAioResult result, const PgAioTargetData *td, ereport(elevel, errcode(ERRCODE_DATA_CORRUPTED), - errmsg("zeroing %u page(s) and ignoring %u checksum failure(s) among blocks %u..%u of relation %s", + errmsg("zeroing %u page(s) and ignoring %u checksum failure(s) among blocks %u..%u of relation \"%s\"", affected_count, checkfail_count, first, last, rpath.str), affected_count > 1 ? - errdetail("Block %u held first zeroed page.", + errdetail("Block %u held the first zeroed page.", first + first_off) : 0, - errhint("See server log for details about the other %u invalid block(s).", - affected_count + checkfail_count - 1)); + errhint_plural("See server log for details about the other %d invalid block.", + "See server log for details about the other %d invalid blocks.", + affected_count + checkfail_count - 1, + affected_count + checkfail_count - 1)); return; } @@ -7107,25 +7326,25 @@ buffer_readv_report(PgAioResult result, const PgAioTargetData *td, { Assert(!zeroed_any); /* can't have invalid pages when zeroing them */ affected_count = zeroed_or_error_count; - msg_one = _("invalid page in block %u of relation %s"); - msg_mult = _("%u invalid pages among blocks %u..%u of relation %s"); - det_mult = _("Block %u held first invalid page."); + msg_one = _("invalid page in block %u of relation \"%s\""); + msg_mult = _("%u invalid pages among blocks %u..%u of relation \"%s\""); + det_mult = _("Block %u held the first invalid page."); hint_mult = _("See server log for the other %u invalid block(s)."); } else if (zeroed_any && !ignored_any) { affected_count = zeroed_or_error_count; - msg_one = _("invalid page in block %u of relation %s; zeroing out page"); - msg_mult = _("zeroing out %u invalid pages among blocks %u..%u of relation %s"); - det_mult = _("Block %u held first zeroed page."); + msg_one = _("invalid page in block %u of relation \"%s\"; zeroing out page"); + msg_mult = _("zeroing out %u invalid pages among blocks %u..%u of relation \"%s\""); + det_mult = _("Block %u held the first zeroed page."); hint_mult = _("See server log for the other %u zeroed block(s)."); } else if (!zeroed_any && ignored_any) { affected_count = checkfail_count; - msg_one = _("ignoring checksum failure in block %u of relation %s"); - msg_mult = _("ignoring %u checksum failures among blocks %u..%u of relation %s"); - det_mult = _("Block %u held first ignored page."); + msg_one = _("ignoring checksum failure in block %u of relation \"%s\""); + msg_mult = _("ignoring %u checksum failures among blocks %u..%u of relation \"%s\""); + det_mult = _("Block %u held the first ignored page."); hint_mult = _("See server log for the other %u ignored block(s)."); } else diff --git a/src/backend/storage/buffer/freelist.c b/src/backend/storage/buffer/freelist.c index 336715b6c6342..01909be027258 100644 --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -555,8 +555,50 @@ GetAccessStrategy(BufferAccessStrategyType btype) return NULL; case BAS_BULKREAD: - ring_size_kb = 256; - break; + { + int ring_max_kb; + + /* + * The ring always needs to be large enough to allow some + * separation in time between providing a buffer to the user + * of the strategy and that buffer being reused. Otherwise the + * user's pin will prevent reuse of the buffer, even without + * concurrent activity. + * + * We also need to ensure the ring always is large enough for + * SYNC_SCAN_REPORT_INTERVAL, as noted above. + * + * Thus we start out a minimal size and increase the size + * further if appropriate. + */ + ring_size_kb = 256; + + /* + * There's no point in a larger ring if we won't be allowed to + * pin sufficiently many buffers. But we never limit to less + * than the minimal size above. + */ + ring_max_kb = GetPinLimit() * (BLCKSZ / 1024); + ring_max_kb = Max(ring_size_kb, ring_max_kb); + + /* + * We would like the ring to additionally have space for the + * configured degree of IO concurrency. While being read in, + * buffers can obviously not yet be reused. + * + * Each IO can be up to io_combine_limit blocks large, and we + * want to start up to effective_io_concurrency IOs. + * + * Note that effective_io_concurrency may be 0, which disables + * AIO. + */ + ring_size_kb += (BLCKSZ / 1024) * + io_combine_limit * effective_io_concurrency; + + if (ring_size_kb > ring_max_kb) + ring_size_kb = ring_max_kb; + break; + } case BAS_BULKWRITE: ring_size_kb = 16 * 1024; break; diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index ed56202af14f6..3c0d20f4659d2 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -23,6 +23,7 @@ #include "storage/bufmgr.h" #include "storage/fd.h" #include "utils/guc_hooks.h" +#include "utils/memdebug.h" #include "utils/memutils.h" #include "utils/resowner.h" @@ -183,6 +184,8 @@ FlushLocalBuffer(BufferDesc *bufHdr, SMgrRelation reln) instr_time io_start; Page localpage = (char *) LocalBufHdrGetBlock(bufHdr); + Assert(LocalRefCount[-BufferDescriptorGetBuffer(bufHdr) - 1] > 0); + /* * Try to start an I/O operation. There currently are no reasons for * StartLocalBufferIO to return false, so we raise an error in that case. @@ -626,7 +629,7 @@ InvalidateLocalBuffer(BufferDesc *bufHdr, bool check_unreferenced) */ if (check_unreferenced && (LocalRefCount[bufid] != 0 || BUF_STATE_GET_REFCOUNT(buf_state) != 0)) - elog(ERROR, "block %u of %s is still referenced (local %u)", + elog(ERROR, "block %u of %s is still referenced (local %d)", bufHdr->tag.blockNum, relpathbackend(BufTagGetRelFileLocator(&bufHdr->tag), MyProcNumber, @@ -657,10 +660,11 @@ InvalidateLocalBuffer(BufferDesc *bufHdr, bool check_unreferenced) * See DropRelationBuffers in bufmgr.c for more notes. */ void -DropRelationLocalBuffers(RelFileLocator rlocator, ForkNumber forkNum, - BlockNumber firstDelBlock) +DropRelationLocalBuffers(RelFileLocator rlocator, ForkNumber *forkNum, + int nforks, BlockNumber *firstDelBlock) { int i; + int j; for (i = 0; i < NLocBuffer; i++) { @@ -669,12 +673,18 @@ DropRelationLocalBuffers(RelFileLocator rlocator, ForkNumber forkNum, buf_state = pg_atomic_read_u32(&bufHdr->state); - if ((buf_state & BM_TAG_VALID) && - BufTagMatchesRelFileLocator(&bufHdr->tag, &rlocator) && - BufTagGetForkNum(&bufHdr->tag) == forkNum && - bufHdr->tag.blockNum >= firstDelBlock) + if (!(buf_state & BM_TAG_VALID) || + !BufTagMatchesRelFileLocator(&bufHdr->tag, &rlocator)) + continue; + + for (j = 0; j < nforks; j++) { - InvalidateLocalBuffer(bufHdr, true); + if (BufTagGetForkNum(&bufHdr->tag) == forkNum[j] && + bufHdr->tag.blockNum >= firstDelBlock[j]) + { + InvalidateLocalBuffer(bufHdr, true); + break; + } } } } @@ -808,6 +818,15 @@ PinLocalBuffer(BufferDesc *buf_hdr, bool adjust_usagecount) buf_state += BUF_USAGECOUNT_ONE; } pg_atomic_unlocked_write_u32(&buf_hdr->state, buf_state); + + /* + * See comment in PinBuffer(). + * + * If the buffer isn't allocated yet, it'll be marked as defined in + * GetLocalBufferStorage(). + */ + if (LocalBufHdrGetBlock(buf_hdr) != NULL) + VALGRIND_MAKE_MEM_DEFINED(LocalBufHdrGetBlock(buf_hdr), BLCKSZ); } LocalRefCount[bufid]++; ResourceOwnerRememberBuffer(CurrentResourceOwner, @@ -843,6 +862,9 @@ UnpinLocalBufferNoOwner(Buffer buffer) Assert(BUF_STATE_GET_REFCOUNT(buf_state) > 0); buf_state -= BUF_REFCOUNT_ONE; pg_atomic_unlocked_write_u32(&buf_hdr->state, buf_state); + + /* see comment in UnpinBufferNoOwner */ + VALGRIND_MAKE_MEM_NOACCESS(LocalBufHdrGetBlock(buf_hdr), BLCKSZ); } } @@ -910,10 +932,11 @@ GetLocalBufferStorage(void) num_bufs = Min(num_bufs, MaxAllocSize / BLCKSZ); /* Buffers should be I/O aligned. */ - cur_block = (char *) - TYPEALIGN(PG_IO_ALIGN_SIZE, - MemoryContextAlloc(LocalBufferContext, - num_bufs * BLCKSZ + PG_IO_ALIGN_SIZE)); + cur_block = MemoryContextAllocAligned(LocalBufferContext, + num_bufs * BLCKSZ, + PG_IO_ALIGN_SIZE, + 0); + next_buf_in_block = 0; num_bufs_in_block = num_bufs; } @@ -923,6 +946,16 @@ GetLocalBufferStorage(void) next_buf_in_block++; total_bufs_allocated++; + /* + * Caller's PinLocalBuffer() was too early for Valgrind updates, so do it + * here. The block is actually undefined, but we want consistency with + * the regular case of not needing to allocate memory. This is + * specifically needed when method_io_uring.c fills the block, because + * Valgrind doesn't recognize io_uring reads causing undefined memory to + * become defined. + */ + VALGRIND_MAKE_MEM_DEFINED(this_buf, BLCKSZ); + return (Block) this_buf; } diff --git a/src/backend/storage/file/copydir.c b/src/backend/storage/file/copydir.c index c335b60a36790..aa8c64a2c9eb5 100644 --- a/src/backend/storage/file/copydir.c +++ b/src/backend/storage/file/copydir.c @@ -18,6 +18,9 @@ #include "postgres.h" +#ifdef HAVE_COPYFILE_H +#include +#endif #include #include @@ -27,11 +30,19 @@ #include "storage/copydir.h" #include "storage/fd.h" +/* GUCs */ +int file_copy_method = FILE_COPY_METHOD_COPY; + +static void clone_file(const char *fromfile, const char *tofile); + /* * copydir: copy a directory * * If recurse is false, subdirectories are ignored. Anything that's not * a directory or a regular file is ignored. + * + * This function uses the file_copy_method GUC. New uses of this function must + * be documented in doc/src/sgml/config.sgml. */ void copydir(const char *fromdir, const char *todir, bool recurse) @@ -71,7 +82,12 @@ copydir(const char *fromdir, const char *todir, bool recurse) copydir(fromfile, tofile, true); } else if (xlde_type == PGFILETYPE_REG) - copy_file(fromfile, tofile); + { + if (file_copy_method == FILE_COPY_METHOD_CLONE) + clone_file(fromfile, tofile); + else + copy_file(fromfile, tofile); + } } FreeDir(xldir); @@ -214,3 +230,65 @@ copy_file(const char *fromfile, const char *tofile) pfree(buffer); } + +/* + * clone one file + */ +static void +clone_file(const char *fromfile, const char *tofile) +{ +#if defined(HAVE_COPYFILE) && defined(COPYFILE_CLONE_FORCE) + if (copyfile(fromfile, tofile, NULL, COPYFILE_CLONE_FORCE) < 0) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not clone file \"%s\" to \"%s\": %m", + fromfile, tofile))); +#elif defined(HAVE_COPY_FILE_RANGE) + int srcfd; + int dstfd; + ssize_t nbytes; + + srcfd = OpenTransientFile(fromfile, O_RDONLY | PG_BINARY); + if (srcfd < 0) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not open file \"%s\": %m", fromfile))); + + dstfd = OpenTransientFile(tofile, O_WRONLY | O_CREAT | O_EXCL | PG_BINARY); + if (dstfd < 0) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not create file \"%s\": %m", tofile))); + + do + { + /* + * Don't copy too much at once, so we can check for interrupts from + * time to time if it falls back to a slow copy. + */ + CHECK_FOR_INTERRUPTS(); + pgstat_report_wait_start(WAIT_EVENT_COPY_FILE_COPY); + nbytes = copy_file_range(srcfd, NULL, dstfd, NULL, 1024 * 1024, 0); + if (nbytes < 0 && errno != EINTR) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not clone file \"%s\" to \"%s\": %m", + fromfile, tofile))); + pgstat_report_wait_end(); + } + while (nbytes != 0); + + if (CloseTransientFile(dstfd) != 0) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not close file \"%s\": %m", tofile))); + + if (CloseTransientFile(srcfd) != 0) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not close file \"%s\": %m", fromfile))); +#else + /* If there is no CLONE support this function should not be called. */ + pg_unreachable(); +#endif +} diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 0e8299dd55646..a4ec7959f31cf 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -400,25 +400,22 @@ pg_fsync(int fd) * portable, even if it runs ok on the current system. * * We assert here that a descriptor for a file was opened with write - * permissions (either O_RDWR or O_WRONLY) and for a directory without - * write permissions (O_RDONLY). + * permissions (i.e., not O_RDONLY) and for a directory without write + * permissions (O_RDONLY). Notice that the assertion check is made even + * if fsync() is disabled. * - * Ignore any fstat errors and let the follow-up fsync() do its work. - * Doing this sanity check here counts for the case where fsync() is - * disabled. + * If fstat() fails, ignore it and let the follow-up fsync() complain. */ if (fstat(fd, &st) == 0) { int desc_flags = fcntl(fd, F_GETFL); - /* - * O_RDONLY is historically 0, so just make sure that for directories - * no write flags are used. - */ + desc_flags &= O_ACCMODE; + if (S_ISDIR(st.st_mode)) - Assert((desc_flags & (O_RDWR | O_WRONLY)) == 0); + Assert(desc_flags == O_RDONLY); else - Assert((desc_flags & (O_RDWR | O_WRONLY)) != 0); + Assert(desc_flags != O_RDONLY); } errno = 0; #endif diff --git a/src/backend/storage/file/fileset.c b/src/backend/storage/file/fileset.c index 64141c7cb91c9..4d5ee353fd7a0 100644 --- a/src/backend/storage/file/fileset.c +++ b/src/backend/storage/file/fileset.c @@ -185,7 +185,7 @@ FileSetPath(char *path, FileSet *fileset, Oid tablespace) static Oid ChooseTablespace(const FileSet *fileset, const char *name) { - uint32 hash = hash_any((const unsigned char *) name, strlen(name)); + uint32 hash = hash_bytes((const unsigned char *) name, strlen(name)); return fileset->tablespaces[hash % fileset->ntablespaces]; } diff --git a/src/backend/storage/ipc/dsm_registry.c b/src/backend/storage/ipc/dsm_registry.c index 1d4fd31ffedbc..1682cc6d34c7f 100644 --- a/src/backend/storage/ipc/dsm_registry.c +++ b/src/backend/storage/ipc/dsm_registry.c @@ -15,6 +15,20 @@ * current backend. This function guarantees that only one backend * initializes the segment and that all other backends just attach it. * + * A DSA can be created in or retrieved from the registry by calling + * GetNamedDSA(). As with GetNamedDSMSegment(), if a DSA with the provided + * name does not yet exist, it is created. Otherwise, GetNamedDSA() + * ensures the DSA is attached to the current backend. This function + * guarantees that only one backend initializes the DSA and that all other + * backends just attach it. + * + * A dshash table can be created in or retrieved from the registry by + * calling GetNamedDSHash(). As with GetNamedDSMSegment(), if a hash + * table with the provided name does not yet exist, it is created. + * Otherwise, GetNamedDSHash() ensures the hash table is attached to the + * current backend. This function guarantees that only one backend + * initializes the table and that all other backends just attach it. + * * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * @@ -26,12 +40,20 @@ #include "postgres.h" +#include "funcapi.h" #include "lib/dshash.h" #include "storage/dsm_registry.h" #include "storage/lwlock.h" #include "storage/shmem.h" +#include "utils/builtins.h" #include "utils/memutils.h" +#define DSMR_NAME_LEN 128 + +#define DSMR_DSA_TRANCHE_SUFFIX " DSA" +#define DSMR_DSA_TRANCHE_SUFFIX_LEN (sizeof(DSMR_DSA_TRANCHE_SUFFIX) - 1) +#define DSMR_DSA_TRANCHE_NAME_LEN (DSMR_NAME_LEN + DSMR_DSA_TRANCHE_SUFFIX_LEN) + typedef struct DSMRegistryCtxStruct { dsa_handle dsah; @@ -40,15 +62,55 @@ typedef struct DSMRegistryCtxStruct static DSMRegistryCtxStruct *DSMRegistryCtx; -typedef struct DSMRegistryEntry +typedef struct NamedDSMState { - char name[64]; dsm_handle handle; size_t size; +} NamedDSMState; + +typedef struct NamedDSAState +{ + dsa_handle handle; + int tranche; + char tranche_name[DSMR_DSA_TRANCHE_NAME_LEN]; +} NamedDSAState; + +typedef struct NamedDSHState +{ + NamedDSAState dsa; + dshash_table_handle handle; + int tranche; + char tranche_name[DSMR_NAME_LEN]; +} NamedDSHState; + +typedef enum DSMREntryType +{ + DSMR_ENTRY_TYPE_DSM, + DSMR_ENTRY_TYPE_DSA, + DSMR_ENTRY_TYPE_DSH, +} DSMREntryType; + +static const char *const DSMREntryTypeNames[] = +{ + [DSMR_ENTRY_TYPE_DSM] = "segment", + [DSMR_ENTRY_TYPE_DSA] = "area", + [DSMR_ENTRY_TYPE_DSH] = "hash", +}; + +typedef struct DSMRegistryEntry +{ + char name[DSMR_NAME_LEN]; + DSMREntryType type; + union + { + NamedDSMState dsm; + NamedDSAState dsa; + NamedDSHState dsh; + } data; } DSMRegistryEntry; static const dshash_parameters dsh_params = { - offsetof(DSMRegistryEntry, handle), + offsetof(DSMRegistryEntry, type), sizeof(DSMRegistryEntry), dshash_strcmp, dshash_strhash, @@ -141,7 +203,7 @@ GetNamedDSMSegment(const char *name, size_t size, ereport(ERROR, (errmsg("DSM segment name cannot be empty"))); - if (strlen(name) >= offsetof(DSMRegistryEntry, handle)) + if (strlen(name) >= offsetof(DSMRegistryEntry, type)) ereport(ERROR, (errmsg("DSM segment name too long"))); @@ -158,32 +220,39 @@ GetNamedDSMSegment(const char *name, size_t size, entry = dshash_find_or_insert(dsm_registry_table, name, found); if (!(*found)) { + NamedDSMState *state = &entry->data.dsm; + dsm_segment *seg; + + entry->type = DSMR_ENTRY_TYPE_DSM; + /* Initialize the segment. */ - dsm_segment *seg = dsm_create(size, 0); + seg = dsm_create(size, 0); dsm_pin_segment(seg); dsm_pin_mapping(seg); - entry->handle = dsm_segment_handle(seg); - entry->size = size; + state->handle = dsm_segment_handle(seg); + state->size = size; ret = dsm_segment_address(seg); if (init_callback) (*init_callback) (ret); } - else if (entry->size != size) - { + else if (entry->type != DSMR_ENTRY_TYPE_DSM) ereport(ERROR, - (errmsg("requested DSM segment size does not match size of " - "existing segment"))); - } + (errmsg("requested DSM segment does not match type of existing entry"))); + else if (entry->data.dsm.size != size) + ereport(ERROR, + (errmsg("requested DSM segment size does not match size of existing segment"))); else { - dsm_segment *seg = dsm_find_mapping(entry->handle); + NamedDSMState *state = &entry->data.dsm; + dsm_segment *seg; /* If the existing segment is not already attached, attach it now. */ + seg = dsm_find_mapping(state->handle); if (seg == NULL) { - seg = dsm_attach(entry->handle); + seg = dsm_attach(state->handle); if (seg == NULL) elog(ERROR, "could not map dynamic shared memory segment"); @@ -198,3 +267,220 @@ GetNamedDSMSegment(const char *name, size_t size, return ret; } + +/* + * Initialize or attach a named DSA. + * + * This routine returns a pointer to the DSA. A new LWLock tranche ID will be + * generated if needed. Note that the lock tranche will be registered with the + * provided name. Also note that this should be called at most once for a + * given DSA in each backend. + */ +dsa_area * +GetNamedDSA(const char *name, bool *found) +{ + DSMRegistryEntry *entry; + MemoryContext oldcontext; + dsa_area *ret; + + Assert(found); + + if (!name || *name == '\0') + ereport(ERROR, + (errmsg("DSA name cannot be empty"))); + + if (strlen(name) >= offsetof(DSMRegistryEntry, type)) + ereport(ERROR, + (errmsg("DSA name too long"))); + + /* Be sure any local memory allocated by DSM/DSA routines is persistent. */ + oldcontext = MemoryContextSwitchTo(TopMemoryContext); + + /* Connect to the registry. */ + init_dsm_registry(); + + entry = dshash_find_or_insert(dsm_registry_table, name, found); + if (!(*found)) + { + NamedDSAState *state = &entry->data.dsa; + + entry->type = DSMR_ENTRY_TYPE_DSA; + + /* Initialize the LWLock tranche for the DSA. */ + state->tranche = LWLockNewTrancheId(); + strcpy(state->tranche_name, name); + LWLockRegisterTranche(state->tranche, state->tranche_name); + + /* Initialize the DSA. */ + ret = dsa_create(state->tranche); + dsa_pin(ret); + dsa_pin_mapping(ret); + + /* Store handle for other backends to use. */ + state->handle = dsa_get_handle(ret); + } + else if (entry->type != DSMR_ENTRY_TYPE_DSA) + ereport(ERROR, + (errmsg("requested DSA does not match type of existing entry"))); + else + { + NamedDSAState *state = &entry->data.dsa; + + if (dsa_is_attached(state->handle)) + ereport(ERROR, + (errmsg("requested DSA already attached to current process"))); + + /* Initialize existing LWLock tranche for the DSA. */ + LWLockRegisterTranche(state->tranche, state->tranche_name); + + /* Attach to existing DSA. */ + ret = dsa_attach(state->handle); + dsa_pin_mapping(ret); + } + + dshash_release_lock(dsm_registry_table, entry); + MemoryContextSwitchTo(oldcontext); + + return ret; +} + +/* + * Initialize or attach a named dshash table. + * + * This routine returns the address of the table. The tranche_id member of + * params is ignored; new tranche IDs will be generated if needed. Note that + * the DSA lock tranche will be registered with the provided name with " DSA" + * appended. The dshash lock tranche will be registered with the provided + * name. Also note that this should be called at most once for a given table + * in each backend. + */ +dshash_table * +GetNamedDSHash(const char *name, const dshash_parameters *params, bool *found) +{ + DSMRegistryEntry *entry; + MemoryContext oldcontext; + dshash_table *ret; + + Assert(params); + Assert(found); + + if (!name || *name == '\0') + ereport(ERROR, + (errmsg("DSHash name cannot be empty"))); + + if (strlen(name) >= offsetof(DSMRegistryEntry, type)) + ereport(ERROR, + (errmsg("DSHash name too long"))); + + /* Be sure any local memory allocated by DSM/DSA routines is persistent. */ + oldcontext = MemoryContextSwitchTo(TopMemoryContext); + + /* Connect to the registry. */ + init_dsm_registry(); + + entry = dshash_find_or_insert(dsm_registry_table, name, found); + if (!(*found)) + { + NamedDSAState *dsa_state = &entry->data.dsh.dsa; + NamedDSHState *dsh_state = &entry->data.dsh; + dshash_parameters params_copy; + dsa_area *dsa; + + entry->type = DSMR_ENTRY_TYPE_DSH; + + /* Initialize the LWLock tranche for the DSA. */ + dsa_state->tranche = LWLockNewTrancheId(); + sprintf(dsa_state->tranche_name, "%s%s", name, DSMR_DSA_TRANCHE_SUFFIX); + LWLockRegisterTranche(dsa_state->tranche, dsa_state->tranche_name); + + /* Initialize the LWLock tranche for the dshash table. */ + dsh_state->tranche = LWLockNewTrancheId(); + strcpy(dsh_state->tranche_name, name); + LWLockRegisterTranche(dsh_state->tranche, dsh_state->tranche_name); + + /* Initialize the DSA for the hash table. */ + dsa = dsa_create(dsa_state->tranche); + dsa_pin(dsa); + dsa_pin_mapping(dsa); + + /* Initialize the dshash table. */ + memcpy(¶ms_copy, params, sizeof(dshash_parameters)); + params_copy.tranche_id = dsh_state->tranche; + ret = dshash_create(dsa, ¶ms_copy, NULL); + + /* Store handles for other backends to use. */ + dsa_state->handle = dsa_get_handle(dsa); + dsh_state->handle = dshash_get_hash_table_handle(ret); + } + else if (entry->type != DSMR_ENTRY_TYPE_DSH) + ereport(ERROR, + (errmsg("requested DSHash does not match type of existing entry"))); + else + { + NamedDSAState *dsa_state = &entry->data.dsh.dsa; + NamedDSHState *dsh_state = &entry->data.dsh; + dsa_area *dsa; + + /* XXX: Should we verify params matches what table was created with? */ + + if (dsa_is_attached(dsa_state->handle)) + ereport(ERROR, + (errmsg("requested DSHash already attached to current process"))); + + /* Initialize existing LWLock tranches for the DSA and dshash table. */ + LWLockRegisterTranche(dsa_state->tranche, dsa_state->tranche_name); + LWLockRegisterTranche(dsh_state->tranche, dsh_state->tranche_name); + + /* Attach to existing DSA for the hash table. */ + dsa = dsa_attach(dsa_state->handle); + dsa_pin_mapping(dsa); + + /* Attach to existing dshash table. */ + ret = dshash_attach(dsa, params, dsh_state->handle, NULL); + } + + dshash_release_lock(dsm_registry_table, entry); + MemoryContextSwitchTo(oldcontext); + + return ret; +} + +Datum +pg_get_dsm_registry_allocations(PG_FUNCTION_ARGS) +{ + ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + DSMRegistryEntry *entry; + MemoryContext oldcontext; + dshash_seq_status status; + + InitMaterializedSRF(fcinfo, MAT_SRF_USE_EXPECTED_DESC); + + /* Be sure any local memory allocated by DSM/DSA routines is persistent. */ + oldcontext = MemoryContextSwitchTo(TopMemoryContext); + init_dsm_registry(); + MemoryContextSwitchTo(oldcontext); + + dshash_seq_init(&status, dsm_registry_table, false); + while ((entry = dshash_seq_next(&status)) != NULL) + { + Datum vals[3]; + bool nulls[3] = {0}; + + vals[0] = CStringGetTextDatum(entry->name); + vals[1] = CStringGetTextDatum(DSMREntryTypeNames[entry->type]); + + /* + * Since we can't know the size of DSA/dshash entries without first + * attaching to them, return NULL for those. + */ + if (entry->type == DSMR_ENTRY_TYPE_DSM) + vals[2] = Int64GetDatum(entry->data.dsm.size); + else + nulls[2] = true; + + tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, vals, nulls); + } + dshash_seq_term(&status); + + return (Datum) 0; +} diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c index 567739b5be93a..2704e80b3a7d9 100644 --- a/src/backend/storage/ipc/ipc.c +++ b/src/backend/storage/ipc/ipc.c @@ -399,7 +399,7 @@ cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg) before_shmem_exit_list[before_shmem_exit_index - 1].arg == arg) --before_shmem_exit_index; else - elog(ERROR, "before_shmem_exit callback (%p,0x%" PRIxPTR ") is not the latest entry", + elog(ERROR, "before_shmem_exit callback (%p,0x%" PRIx64 ") is not the latest entry", function, arg); } diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c index c6aefd2f688dd..beadeb5e46afa 100644 --- a/src/backend/storage/ipc/latch.c +++ b/src/backend/storage/ipc/latch.c @@ -187,9 +187,11 @@ WaitLatch(Latch *latch, int wakeEvents, long timeout, if (!(wakeEvents & WL_LATCH_SET)) latch = NULL; ModifyWaitEvent(LatchWaitSet, LatchWaitSetLatchPos, WL_LATCH_SET, latch); - ModifyWaitEvent(LatchWaitSet, LatchWaitSetPostmasterDeathPos, - (wakeEvents & (WL_EXIT_ON_PM_DEATH | WL_POSTMASTER_DEATH)), - NULL); + + if (IsUnderPostmaster) + ModifyWaitEvent(LatchWaitSet, LatchWaitSetPostmasterDeathPos, + (wakeEvents & (WL_EXIT_ON_PM_DEATH | WL_POSTMASTER_DEATH)), + NULL); if (WaitEventSetWait(LatchWaitSet, (wakeEvents & WL_TIMEOUT) ? timeout : -1, diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index e5b945a9ee39c..200f72c6e2565 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -54,7 +54,6 @@ #include "access/xlogutils.h" #include "catalog/catalog.h" #include "catalog/pg_authid.h" -#include "commands/dbcommands.h" #include "miscadmin.h" #include "pgstat.h" #include "port/pg_lfind.h" @@ -62,6 +61,7 @@ #include "storage/procarray.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/snapmgr.h" @@ -1622,58 +1622,6 @@ TransactionIdIsInProgress(TransactionId xid) return false; } -/* - * TransactionIdIsActive -- is xid the top-level XID of an active backend? - * - * This differs from TransactionIdIsInProgress in that it ignores prepared - * transactions, as well as transactions running on the primary if we're in - * hot standby. Also, we ignore subtransactions since that's not needed - * for current uses. - */ -bool -TransactionIdIsActive(TransactionId xid) -{ - bool result = false; - ProcArrayStruct *arrayP = procArray; - TransactionId *other_xids = ProcGlobal->xids; - int i; - - /* - * Don't bother checking a transaction older than RecentXmin; it could not - * possibly still be running. - */ - if (TransactionIdPrecedes(xid, RecentXmin)) - return false; - - LWLockAcquire(ProcArrayLock, LW_SHARED); - - for (i = 0; i < arrayP->numProcs; i++) - { - int pgprocno = arrayP->pgprocnos[i]; - PGPROC *proc = &allProcs[pgprocno]; - TransactionId pxid; - - /* Fetch xid just once - see GetNewTransactionId */ - pxid = UINT32_ACCESS_ONCE(other_xids[i]); - - if (!TransactionIdIsValid(pxid)) - continue; - - if (proc->pid == 0) - continue; /* ignore prepared transactions */ - - if (TransactionIdEquals(pxid, xid)) - { - result = true; - break; - } - } - - LWLockRelease(ProcArrayLock); - - return result; -} - /* * Determine XID horizons. @@ -2866,8 +2814,10 @@ GetRunningTransactionData(void) * * Similar to GetSnapshotData but returns just oldestActiveXid. We include * all PGPROCs with an assigned TransactionId, even VACUUM processes. - * We look at all databases, though there is no need to include WALSender - * since this has no effect on hot standby conflicts. + * + * If allDbs is true, we look at all databases, though there is no need to + * include WALSender since this has no effect on hot standby conflicts. If + * allDbs is false, skip processes attached to other databases. * * This is never executed during recovery so there is no need to look at * KnownAssignedXids. @@ -2875,9 +2825,12 @@ GetRunningTransactionData(void) * We don't worry about updating other counters, we want to keep this as * simple as possible and leave GetSnapshotData() as the primary code for * that bookkeeping. + * + * inCommitOnly indicates getting the oldestActiveXid among the transactions + * in the commit critical section. */ TransactionId -GetOldestActiveTransactionId(void) +GetOldestActiveTransactionId(bool inCommitOnly, bool allDbs) { ProcArrayStruct *arrayP = procArray; TransactionId *other_xids = ProcGlobal->xids; @@ -2904,6 +2857,8 @@ GetOldestActiveTransactionId(void) for (index = 0; index < arrayP->numProcs; index++) { TransactionId xid; + int pgprocno = arrayP->pgprocnos[index]; + PGPROC *proc = &allProcs[pgprocno]; /* Fetch xid just once - see GetNewTransactionId */ xid = UINT32_ACCESS_ONCE(other_xids[index]); @@ -2911,6 +2866,13 @@ GetOldestActiveTransactionId(void) if (!TransactionIdIsNormal(xid)) continue; + if (inCommitOnly && + (proc->delayChkptFlags & DELAY_CHKPT_IN_COMMIT) == 0) + continue; + + if (!allDbs && proc->databaseId != MyDatabaseId) + continue; + if (TransactionIdPrecedes(xid, oldestRunningXid)) oldestRunningXid = xid; diff --git a/src/backend/storage/ipc/procsignal.c b/src/backend/storage/ipc/procsignal.c index 7d201965503cb..087821311cceb 100644 --- a/src/backend/storage/ipc/procsignal.c +++ b/src/backend/storage/ipc/procsignal.c @@ -63,8 +63,8 @@ typedef struct { pg_atomic_uint32 pss_pid; - bool pss_cancel_key_valid; - int32 pss_cancel_key; + int pss_cancel_key_len; /* 0 means no cancellation is possible */ + uint8 pss_cancel_key[MAX_CANCEL_KEY_LENGTH]; volatile sig_atomic_t pss_signalFlags[NUM_PROCSIGNALS]; slock_t pss_mutex; /* protects the above fields */ @@ -89,7 +89,8 @@ struct ProcSignalHeader /* * We reserve a slot for each possible ProcNumber, plus one for each * possible auxiliary process type. (This scheme assumes there is not - * more than one of any auxiliary process type at a time.) + * more than one of any auxiliary process type at a time, except for + * IO workers.) */ #define NumProcSignalSlots (MaxBackends + NUM_AUXILIARY_PROCS) @@ -148,8 +149,7 @@ ProcSignalShmemInit(void) SpinLockInit(&slot->pss_mutex); pg_atomic_init_u32(&slot->pss_pid, 0); - slot->pss_cancel_key_valid = false; - slot->pss_cancel_key = 0; + slot->pss_cancel_key_len = 0; MemSet(slot->pss_signalFlags, 0, sizeof(slot->pss_signalFlags)); pg_atomic_init_u64(&slot->pss_barrierGeneration, PG_UINT64_MAX); pg_atomic_init_u32(&slot->pss_barrierCheckMask, 0); @@ -163,12 +163,13 @@ ProcSignalShmemInit(void) * Register the current process in the ProcSignal array */ void -ProcSignalInit(bool cancel_key_valid, int32 cancel_key) +ProcSignalInit(const uint8 *cancel_key, int cancel_key_len) { ProcSignalSlot *slot; uint64 barrier_generation; uint32 old_pss_pid; + Assert(cancel_key_len >= 0 && cancel_key_len <= MAX_CANCEL_KEY_LENGTH); if (MyProcNumber < 0) elog(ERROR, "MyProcNumber not set"); if (MyProcNumber >= NumProcSignalSlots) @@ -199,8 +200,9 @@ ProcSignalInit(bool cancel_key_valid, int32 cancel_key) pg_atomic_read_u64(&ProcSignal->psh_barrierGeneration); pg_atomic_write_u64(&slot->pss_barrierGeneration, barrier_generation); - slot->pss_cancel_key_valid = cancel_key_valid; - slot->pss_cancel_key = cancel_key; + if (cancel_key_len > 0) + memcpy(slot->pss_cancel_key, cancel_key, cancel_key_len); + slot->pss_cancel_key_len = cancel_key_len; pg_atomic_write_u32(&slot->pss_pid, MyProcPid); SpinLockRelease(&slot->pss_mutex); @@ -254,8 +256,7 @@ CleanupProcSignalState(int status, Datum arg) /* Mark the slot as unused */ pg_atomic_write_u32(&slot->pss_pid, 0); - slot->pss_cancel_key_valid = false; - slot->pss_cancel_key = 0; + slot->pss_cancel_key_len = 0; /* * Make this slot look like it's absorbed all possible barriers, so that @@ -725,9 +726,13 @@ procsignal_sigusr1_handler(SIGNAL_ARGS) * fields in the ProcSignal slots. */ void -SendCancelRequest(int backendPID, int32 cancelAuthCode) +SendCancelRequest(int backendPID, const uint8 *cancel_key, int cancel_key_len) { - Assert(backendPID != 0); + if (backendPID == 0) + { + ereport(LOG, (errmsg("invalid cancel request with PID 0"))); + return; + } /* * See if we have a matching backend. Reading the pss_pid and @@ -754,7 +759,8 @@ SendCancelRequest(int backendPID, int32 cancelAuthCode) } else { - match = slot->pss_cancel_key_valid && slot->pss_cancel_key == cancelAuthCode; + match = slot->pss_cancel_key_len == cancel_key_len && + timingsafe_bcmp(slot->pss_cancel_key, cancel_key, cancel_key_len) == 0; SpinLockRelease(&slot->pss_mutex); diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c index 895a43fb39e54..a0770e867968a 100644 --- a/src/backend/storage/ipc/shmem.c +++ b/src/backend/storage/ipc/shmem.c @@ -68,6 +68,7 @@ #include "fmgr.h" #include "funcapi.h" #include "miscadmin.h" +#include "port/pg_numa.h" #include "storage/lwlock.h" #include "storage/pg_shmem.h" #include "storage/shmem.h" @@ -89,6 +90,10 @@ slock_t *ShmemLock; /* spinlock for shared memory and LWLock static HTAB *ShmemIndex = NULL; /* primary index hashtable for shmem */ +/* To get reliable results for NUMA inquiry we need to "touch pages" once */ +static bool firstNumaTouch = true; + +Datum pg_numa_available(PG_FUNCTION_ARGS); /* * InitShmemAccess() --- set up basic pointers to shared memory. @@ -325,8 +330,8 @@ InitShmemIndex(void) */ HTAB * ShmemInitHash(const char *name, /* table string name for shmem index */ - long init_size, /* initial table size */ - long max_size, /* max size of the table */ + int64 init_size, /* initial table size */ + int64 max_size, /* max size of the table */ HASHCTL *infoP, /* info about key and bucket size */ int hash_flags) /* info about infoP */ { @@ -568,3 +573,193 @@ pg_get_shmem_allocations(PG_FUNCTION_ARGS) return (Datum) 0; } + +/* + * SQL SRF showing NUMA memory nodes for allocated shared memory + * + * Compared to pg_get_shmem_allocations(), this function does not return + * information about shared anonymous allocations and unused shared memory. + */ +Datum +pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) +{ +#define PG_GET_SHMEM_NUMA_SIZES_COLS 3 + ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + HASH_SEQ_STATUS hstat; + ShmemIndexEnt *ent; + Datum values[PG_GET_SHMEM_NUMA_SIZES_COLS]; + bool nulls[PG_GET_SHMEM_NUMA_SIZES_COLS]; + Size os_page_size; + void **page_ptrs; + int *pages_status; + uint64 shm_total_page_count, + shm_ent_page_count, + max_nodes; + Size *nodes; + + if (pg_numa_init() == -1) + elog(ERROR, "libnuma initialization failed or NUMA is not supported on this platform"); + + InitMaterializedSRF(fcinfo, 0); + + max_nodes = pg_numa_get_max_node(); + nodes = palloc(sizeof(Size) * (max_nodes + 1)); + + /* + * Different database block sizes (4kB, 8kB, ..., 32kB) can be used, while + * the OS may have different memory page sizes. + * + * To correctly map between them, we need to: 1. Determine the OS memory + * page size 2. Calculate how many OS pages are used by all buffer blocks + * 3. Calculate how many OS pages are contained within each database + * block. + * + * This information is needed before calling move_pages() for NUMA memory + * node inquiry. + */ + os_page_size = pg_get_shmem_pagesize(); + + /* + * Allocate memory for page pointers and status based on total shared + * memory size. This simplified approach allocates enough space for all + * pages in shared memory rather than calculating the exact requirements + * for each segment. + * + * Add 1, because we don't know how exactly the segments align to OS + * pages, so the allocation might use one more memory page. In practice + * this is not very likely, and moreover we have more entries, each of + * them using only fraction of the total pages. + */ + shm_total_page_count = (ShmemSegHdr->totalsize / os_page_size) + 1; + page_ptrs = palloc0(sizeof(void *) * shm_total_page_count); + pages_status = palloc(sizeof(int) * shm_total_page_count); + + if (firstNumaTouch) + elog(DEBUG1, "NUMA: page-faulting shared memory segments for proper NUMA readouts"); + + LWLockAcquire(ShmemIndexLock, LW_SHARED); + + hash_seq_init(&hstat, ShmemIndex); + + /* output all allocated entries */ + memset(nulls, 0, sizeof(nulls)); + while ((ent = (ShmemIndexEnt *) hash_seq_search(&hstat)) != NULL) + { + int i; + char *startptr, + *endptr; + Size total_len; + + /* + * Calculate the range of OS pages used by this segment. The segment + * may start / end half-way through a page, we want to count these + * pages too. So we align the start/end pointers down/up, and then + * calculate the number of pages from that. + */ + startptr = (char *) TYPEALIGN_DOWN(os_page_size, ent->location); + endptr = (char *) TYPEALIGN(os_page_size, + (char *) ent->location + ent->allocated_size); + total_len = (endptr - startptr); + + shm_ent_page_count = total_len / os_page_size; + + /* + * If we ever get 0xff (-1) back from kernel inquiry, then we probably + * have a bug in mapping buffers to OS pages. + */ + memset(pages_status, 0xff, sizeof(int) * shm_ent_page_count); + + /* + * Setup page_ptrs[] with pointers to all OS pages for this segment, + * and get the NUMA status using pg_numa_query_pages. + * + * In order to get reliable results we also need to touch memory + * pages, so that inquiry about NUMA memory node doesn't return -2 + * (ENOENT, which indicates unmapped/unallocated pages). + */ + for (i = 0; i < shm_ent_page_count; i++) + { + page_ptrs[i] = startptr + (i * os_page_size); + + if (firstNumaTouch) + pg_numa_touch_mem_if_required(page_ptrs[i]); + + CHECK_FOR_INTERRUPTS(); + } + + if (pg_numa_query_pages(0, shm_ent_page_count, page_ptrs, pages_status) == -1) + elog(ERROR, "failed NUMA pages inquiry status: %m"); + + /* Count number of NUMA nodes used for this shared memory entry */ + memset(nodes, 0, sizeof(Size) * (max_nodes + 1)); + + for (i = 0; i < shm_ent_page_count; i++) + { + int s = pages_status[i]; + + /* Ensure we are adding only valid index to the array */ + if (s < 0 || s > max_nodes) + { + elog(ERROR, "invalid NUMA node id outside of allowed range " + "[0, " UINT64_FORMAT "]: %d", max_nodes, s); + } + + nodes[s]++; + } + + /* + * Add one entry for each NUMA node, including those without allocated + * memory for this segment. + */ + for (i = 0; i <= max_nodes; i++) + { + values[0] = CStringGetTextDatum(ent->key); + values[1] = Int32GetDatum(i); + values[2] = Int64GetDatum(nodes[i] * os_page_size); + + tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, + values, nulls); + } + } + + LWLockRelease(ShmemIndexLock); + firstNumaTouch = false; + + return (Datum) 0; +} + +/* + * Determine the memory page size used for the shared memory segment. + * + * If the shared segment was allocated using huge pages, returns the size of + * a huge page. Otherwise returns the size of regular memory page. + * + * This should be used only after the server is started. + */ +Size +pg_get_shmem_pagesize(void) +{ + Size os_page_size; +#ifdef WIN32 + SYSTEM_INFO sysinfo; + + GetSystemInfo(&sysinfo); + os_page_size = sysinfo.dwPageSize; +#else + os_page_size = sysconf(_SC_PAGESIZE); +#endif + + Assert(IsUnderPostmaster); + Assert(huge_pages_status != HUGE_PAGES_UNKNOWN); + + if (huge_pages_status == HUGE_PAGES_ON) + GetHugePageSize(&os_page_size, NULL); + + return os_page_size; +} + +Datum +pg_numa_available(PG_FUNCTION_ARGS) +{ + PG_RETURN_BOOL(pg_numa_init() != -1); +} diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c index 2da91738c3271..c5748b690f408 100644 --- a/src/backend/storage/ipc/sinvaladt.c +++ b/src/backend/storage/ipc/sinvaladt.c @@ -198,7 +198,8 @@ typedef struct SISeg /* * We reserve a slot for each possible ProcNumber, plus one for each * possible auxiliary process type. (This scheme assumes there is not - * more than one of any auxiliary process type at a time.) + * more than one of any auxiliary process type at a time, except for + * IO workers.) */ #define NumProcStateSlots (MaxBackends + NUM_AUXILIARY_PROCS) diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 5acb4508f850f..4222bdab07807 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -31,6 +31,7 @@ #include "storage/sinvaladt.h" #include "storage/standby.h" #include "utils/hsearch.h" +#include "utils/injection_point.h" #include "utils/ps_status.h" #include "utils/timeout.h" #include "utils/timestamp.h" @@ -1287,6 +1288,17 @@ LogStandbySnapshot(void) Assert(XLogStandbyInfoActive()); +#ifdef USE_INJECTION_POINTS + if (IS_INJECTION_POINT_ATTACHED("skip-log-running-xacts")) + { + /* + * This record could move slot's xmin forward during decoding, leading + * to unpredictable results, so skip it when requested by the test. + */ + return GetInsertRecPtr(); + } +#endif + /* * Get details of any AccessExclusiveLocks being held at the moment. */ @@ -1364,7 +1376,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts) if (xlrec.subxid_overflow) elog(DEBUG2, - "snapshot of %d running transactions overflowed (lsn %X/%X oldest xid %u latest complete %u next xid %u)", + "snapshot of %d running transactions overflowed (lsn %X/%08X oldest xid %u latest complete %u next xid %u)", CurrRunningXacts->xcnt, LSN_FORMAT_ARGS(recptr), CurrRunningXacts->oldestRunningXid, @@ -1372,7 +1384,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts) CurrRunningXacts->nextXid); else elog(DEBUG2, - "snapshot of %d+%d running transaction ids (lsn %X/%X oldest xid %u latest complete %u next xid %u)", + "snapshot of %d+%d running transaction ids (lsn %X/%08X oldest xid %u latest complete %u next xid %u)", CurrRunningXacts->xcnt, CurrRunningXacts->subxcnt, LSN_FORMAT_ARGS(recptr), CurrRunningXacts->oldestRunningXid, diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c index 68b76f2cc18a0..a874000c8ca26 100644 --- a/src/backend/storage/large_object/inv_api.c +++ b/src/backend/storage/large_object/inv_api.c @@ -561,7 +561,7 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes) char data[LOBLKSIZE + VARHDRSZ]; /* ensure union is aligned well enough: */ int32 align_it; - } workbuf; + } workbuf = {0}; char *workb = VARDATA(&workbuf.hdr); HeapTuple newtup; Datum values[Natts_pg_largeobject]; @@ -752,7 +752,7 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len) char data[LOBLKSIZE + VARHDRSZ]; /* ensure union is aligned well enough: */ int32 align_it; - } workbuf; + } workbuf = {0}; char *workb = VARDATA(&workbuf.hdr); HeapTuple newtup; Datum values[Natts_pg_largeobject]; diff --git a/src/backend/storage/lmgr/generate-lwlocknames.pl b/src/backend/storage/lmgr/generate-lwlocknames.pl index 4441b7cba0c5f..cd3e43c448aed 100644 --- a/src/backend/storage/lmgr/generate-lwlocknames.pl +++ b/src/backend/storage/lmgr/generate-lwlocknames.pl @@ -10,7 +10,6 @@ my $output_path = '.'; my $lastlockidx = -1; -my $continue = "\n"; GetOptions('outdir:s' => \$output_path); @@ -28,18 +27,24 @@ # -# First, record the predefined LWLocks listed in wait_event_names.txt. We'll -# cross-check those with the ones in lwlocklist.h. +# First, record the predefined LWLocks and built-in tranches listed in +# wait_event_names.txt. We'll cross-check those with the ones in lwlocklist.h. # +my @wait_event_tranches; my @wait_event_lwlocks; my $record_lwlocks = 0; +my $in_tranches = 0; while (<$wait_event_names>) { chomp; # Check for end marker. - last if /^# END OF PREDEFINED LWLOCKS/; + if (/^# END OF PREDEFINED LWLOCKS/) + { + $in_tranches = 1; + next; + } # Skip comments and empty lines. next if /^#/; @@ -55,13 +60,29 @@ # Go to the next line if we are not yet recording LWLocks. next if not $record_lwlocks; + # Stop recording if we reach another section. + last if /^Section:/; + # Record the LWLock. (my $waiteventname, my $waitevendocsentence) = split(/\t/, $_); - push(@wait_event_lwlocks, $waiteventname); + + if ($in_tranches) + { + push(@wait_event_tranches, $waiteventname); + } + else + { + push(@wait_event_lwlocks, $waiteventname); + } } +# +# While gathering the list of predefined LWLocks, cross-check the lists in +# lwlocklist.h with the wait events we just recorded. +# my $in_comment = 0; -my $i = 0; +my $lwlock_count = 0; +my $tranche_count = 0; while (<$lwlocklist>) { chomp; @@ -82,40 +103,72 @@ next; } - die "unable to parse lwlocklist.h line \"$_\"" - unless /^PG_LWLOCK\((\d+),\s+(\w+)\)$/; + # + # Gather list of predefined LWLocks and cross-check with the wait events. + # + if (/^PG_LWLOCK\((\d+),\s+(\w+)\)$/) + { + my ($lockidx, $lockname) = ($1, $2); - (my $lockidx, my $lockname) = ($1, $2); + die "lwlocklist.h not in order" if $lockidx < $lastlockidx; + die "lwlocklist.h has duplicates" if $lockidx == $lastlockidx; - die "lwlocklist.h not in order" if $lockidx < $lastlockidx; - die "lwlocklist.h has duplicates" if $lockidx == $lastlockidx; + die "$lockname defined in lwlocklist.h but missing from " + . "wait_event_names.txt" + if $lwlock_count >= scalar @wait_event_lwlocks; + die "lists of predefined LWLocks do not match (first mismatch at " + . "$wait_event_lwlocks[$lwlock_count] in wait_event_names.txt and " + . "$lockname in lwlocklist.h)" + if $wait_event_lwlocks[$lwlock_count] ne $lockname; - die "$lockname defined in lwlocklist.h but missing from " - . "wait_event_names.txt" - if $i >= scalar @wait_event_lwlocks; - die "lists of predefined LWLocks do not match (first mismatch at " - . "$wait_event_lwlocks[$i] in wait_event_names.txt and $lockname in " - . "lwlocklist.h)" - if $wait_event_lwlocks[$i] ne $lockname; - $i++; + $lwlock_count++; - while ($lastlockidx < $lockidx - 1) + while ($lastlockidx < $lockidx - 1) + { + ++$lastlockidx; + } + $lastlockidx = $lockidx; + + # Add a "Lock" suffix to each lock name, as the C code depends on that. + printf $h "#define %-32s (&MainLWLockArray[$lockidx].lock)\n", + $lockname . "Lock"; + + next; + } + + # + # Cross-check the built-in LWLock tranches with the wait events. + # + if (/^PG_LWLOCKTRANCHE\((\w+),\s+(\w+)\)$/) { - ++$lastlockidx; - $continue = ",\n"; + my ($tranche_id, $tranche_name) = ($1, $2); + + die "$tranche_name defined in lwlocklist.h but missing from " + . "wait_event_names.txt" + if $tranche_count >= scalar @wait_event_tranches; + die + "lists of built-in LWLock tranches do not match (first mismatch at " + . "$wait_event_tranches[$tranche_count] in wait_event_names.txt and " + . "$tranche_name in lwlocklist.h)" + if $wait_event_tranches[$tranche_count] ne $tranche_name; + + $tranche_count++; + + next; } - $lastlockidx = $lockidx; - $continue = ",\n"; - # Add a "Lock" suffix to each lock name, as the C code depends on that - printf $h "#define %-32s (&MainLWLockArray[$lockidx].lock)\n", - $lockname . "Lock"; + die "unable to parse lwlocklist.h line \"$_\""; } die - "$wait_event_lwlocks[$i] defined in wait_event_names.txt but missing from " - . "lwlocklist.h" - if $i < scalar @wait_event_lwlocks; + "$wait_event_lwlocks[$lwlock_count] defined in wait_event_names.txt but " + . " missing from lwlocklist.h" + if $lwlock_count < scalar @wait_event_lwlocks; + +die + "$wait_event_tranches[$tranche_count] defined in wait_event_names.txt but " + . "missing from lwlocklist.h" + if $tranche_count < scalar @wait_event_tranches; print $h "\n"; printf $h "#define NUM_INDIVIDUAL_LWLOCKS %s\n", $lastlockidx + 1; diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c index f50962983c37b..3f6bf70bd3c24 100644 --- a/src/backend/storage/lmgr/lmgr.c +++ b/src/backend/storage/lmgr/lmgr.c @@ -717,7 +717,10 @@ XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid, * through, to avoid slowing down the normal case.) */ if (!first) + { + CHECK_FOR_INTERRUPTS(); pg_usleep(1000L); + } first = false; xid = SubTransGetTopmostTransaction(xid); } @@ -757,7 +760,10 @@ ConditionalXactLockTableWait(TransactionId xid, bool logLockFailure) /* See XactLockTableWait about this case */ if (!first) + { + CHECK_FOR_INTERRUPTS(); pg_usleep(1000L); + } first = false; xid = SubTransGetTopmostTransaction(xid); } diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 002303664aa5c..233b85b623d5d 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -51,7 +51,7 @@ /* GUC variables */ int max_locks_per_xact; /* used to set the lock table size */ -bool log_lock_failure = false; +bool log_lock_failures = false; #define NLOCKENTS() \ mul_size(max_locks_per_xact, add_size(MaxBackends, max_prepared_xacts)) @@ -210,9 +210,12 @@ int FastPathLockGroupsPerBackend = 0; * * The selected constant (49157) is a prime not too close to 2^k, and it's * small enough to not cause overflows (in 64-bit). + * + * We can assume that FastPathLockGroupsPerBackend is a power-of-two per + * InitializeFastPathLocks(). */ #define FAST_PATH_REL_GROUP(rel) \ - (((uint64) (rel) * 49157) % FastPathLockGroupsPerBackend) + (((uint64) (rel) * 49157) & (FastPathLockGroupsPerBackend - 1)) /* * Given the group/slot indexes, calculate the slot index in the whole array @@ -440,7 +443,7 @@ void LockManagerShmemInit(void) { HASHCTL info; - long init_table_size, + int64 init_table_size, max_table_size; bool found; @@ -586,7 +589,7 @@ proclock_hash(const void *key, Size keysize) * intermediate variable to suppress cast-pointer-to-int warnings. */ procptr = PointerGetDatum(proclocktag->myProc); - lockhash ^= ((uint32) procptr) << LOG2_NUM_LOCK_PARTITIONS; + lockhash ^= DatumGetUInt32(procptr) << LOG2_NUM_LOCK_PARTITIONS; return lockhash; } @@ -607,7 +610,7 @@ ProcLockHashCode(const PROCLOCKTAG *proclocktag, uint32 hashcode) * This must match proclock_hash()! */ procptr = PointerGetDatum(proclocktag->myProc); - lockhash ^= ((uint32) procptr) << LOG2_NUM_LOCK_PARTITIONS; + lockhash ^= DatumGetUInt32(procptr) << LOG2_NUM_LOCK_PARTITIONS; return lockhash; } @@ -3536,9 +3539,9 @@ AtPrepare_Locks(void) * but that probably costs more cycles. */ void -PostPrepare_Locks(TransactionId xid) +PostPrepare_Locks(FullTransactionId fxid) { - PGPROC *newproc = TwoPhaseGetDummyProc(xid, false); + PGPROC *newproc = TwoPhaseGetDummyProc(fxid, false); HASH_SEQ_STATUS status; LOCALLOCK *locallock; LOCK *lock; @@ -4321,11 +4324,11 @@ DumpAllLocks(void) * and PANIC anyway. */ void -lock_twophase_recover(TransactionId xid, uint16 info, +lock_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { TwoPhaseLockRecord *rec = (TwoPhaseLockRecord *) recdata; - PGPROC *proc = TwoPhaseGetDummyProc(xid, false); + PGPROC *proc = TwoPhaseGetDummyProc(fxid, false); LOCKTAG *locktag; LOCKMODE lockmode; LOCKMETHODID lockmethodid; @@ -4502,7 +4505,7 @@ lock_twophase_recover(TransactionId xid, uint16 info, * starting up into hot standby mode. */ void -lock_twophase_standby_recover(TransactionId xid, uint16 info, +lock_twophase_standby_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { TwoPhaseLockRecord *rec = (TwoPhaseLockRecord *) recdata; @@ -4521,7 +4524,7 @@ lock_twophase_standby_recover(TransactionId xid, uint16 info, if (lockmode == AccessExclusiveLock && locktag->locktag_type == LOCKTAG_RELATION) { - StandbyAcquireAccessExclusiveLock(xid, + StandbyAcquireAccessExclusiveLock(XidFromFullTransactionId(fxid), locktag->locktag_field1 /* dboid */ , locktag->locktag_field2 /* reloid */ ); } @@ -4534,11 +4537,11 @@ lock_twophase_standby_recover(TransactionId xid, uint16 info, * Find and release the lock indicated by the 2PC record. */ void -lock_twophase_postcommit(TransactionId xid, uint16 info, +lock_twophase_postcommit(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { TwoPhaseLockRecord *rec = (TwoPhaseLockRecord *) recdata; - PGPROC *proc = TwoPhaseGetDummyProc(xid, true); + PGPROC *proc = TwoPhaseGetDummyProc(fxid, true); LOCKTAG *locktag; LOCKMETHODID lockmethodid; LockMethod lockMethodTable; @@ -4560,10 +4563,10 @@ lock_twophase_postcommit(TransactionId xid, uint16 info, * This is actually just the same as the COMMIT case. */ void -lock_twophase_postabort(TransactionId xid, uint16 info, +lock_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { - lock_twophase_postcommit(xid, info, recdata, len); + lock_twophase_postcommit(fxid, info, recdata, len); } /* diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 3df29658f1811..c80b43f1f55cf 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -122,9 +122,8 @@ StaticAssertDecl((LW_VAL_EXCLUSIVE & LW_FLAG_MASK) == 0, * own tranche. We absorb the names of these tranches from there into * BuiltinTrancheNames here. * - * 2. There are some predefined tranches for built-in groups of locks. - * These are listed in enum BuiltinTrancheIds in lwlock.h, and their names - * appear in BuiltinTrancheNames[] below. + * 2. There are some predefined tranches for built-in groups of locks defined + * in lwlocklist.h. We absorb the names of these tranches, too. * * 3. Extensions can create new tranches, via either RequestNamedLWLockTranche * or LWLockRegisterTranche. The names of these that are known in the current @@ -135,49 +134,10 @@ StaticAssertDecl((LW_VAL_EXCLUSIVE & LW_FLAG_MASK) == 0, */ static const char *const BuiltinTrancheNames[] = { #define PG_LWLOCK(id, lockname) [id] = CppAsString(lockname), +#define PG_LWLOCKTRANCHE(id, lockname) [LWTRANCHE_##id] = CppAsString(lockname), #include "storage/lwlocklist.h" #undef PG_LWLOCK - [LWTRANCHE_XACT_BUFFER] = "XactBuffer", - [LWTRANCHE_COMMITTS_BUFFER] = "CommitTsBuffer", - [LWTRANCHE_SUBTRANS_BUFFER] = "SubtransBuffer", - [LWTRANCHE_MULTIXACTOFFSET_BUFFER] = "MultiXactOffsetBuffer", - [LWTRANCHE_MULTIXACTMEMBER_BUFFER] = "MultiXactMemberBuffer", - [LWTRANCHE_NOTIFY_BUFFER] = "NotifyBuffer", - [LWTRANCHE_SERIAL_BUFFER] = "SerialBuffer", - [LWTRANCHE_WAL_INSERT] = "WALInsert", - [LWTRANCHE_BUFFER_CONTENT] = "BufferContent", - [LWTRANCHE_REPLICATION_ORIGIN_STATE] = "ReplicationOriginState", - [LWTRANCHE_REPLICATION_SLOT_IO] = "ReplicationSlotIO", - [LWTRANCHE_LOCK_FASTPATH] = "LockFastPath", - [LWTRANCHE_BUFFER_MAPPING] = "BufferMapping", - [LWTRANCHE_LOCK_MANAGER] = "LockManager", - [LWTRANCHE_PREDICATE_LOCK_MANAGER] = "PredicateLockManager", - [LWTRANCHE_PARALLEL_HASH_JOIN] = "ParallelHashJoin", - [LWTRANCHE_PARALLEL_BTREE_SCAN] = "ParallelBtreeScan", - [LWTRANCHE_PARALLEL_QUERY_DSA] = "ParallelQueryDSA", - [LWTRANCHE_PER_SESSION_DSA] = "PerSessionDSA", - [LWTRANCHE_PER_SESSION_RECORD_TYPE] = "PerSessionRecordType", - [LWTRANCHE_PER_SESSION_RECORD_TYPMOD] = "PerSessionRecordTypmod", - [LWTRANCHE_SHARED_TUPLESTORE] = "SharedTupleStore", - [LWTRANCHE_SHARED_TIDBITMAP] = "SharedTidBitmap", - [LWTRANCHE_PARALLEL_APPEND] = "ParallelAppend", - [LWTRANCHE_PER_XACT_PREDICATE_LIST] = "PerXactPredicateList", - [LWTRANCHE_PGSTATS_DSA] = "PgStatsDSA", - [LWTRANCHE_PGSTATS_HASH] = "PgStatsHash", - [LWTRANCHE_PGSTATS_DATA] = "PgStatsData", - [LWTRANCHE_LAUNCHER_DSA] = "LogicalRepLauncherDSA", - [LWTRANCHE_LAUNCHER_HASH] = "LogicalRepLauncherHash", - [LWTRANCHE_DSM_REGISTRY_DSA] = "DSMRegistryDSA", - [LWTRANCHE_DSM_REGISTRY_HASH] = "DSMRegistryHash", - [LWTRANCHE_COMMITTS_SLRU] = "CommitTsSLRU", - [LWTRANCHE_MULTIXACTOFFSET_SLRU] = "MultixactOffsetSLRU", - [LWTRANCHE_MULTIXACTMEMBER_SLRU] = "MultixactMemberSLRU", - [LWTRANCHE_NOTIFY_SLRU] = "NotifySLRU", - [LWTRANCHE_SERIAL_SLRU] = "SerialSLRU", - [LWTRANCHE_SUBTRANS_SLRU] = "SubtransSLRU", - [LWTRANCHE_XACT_SLRU] = "XactSLRU", - [LWTRANCHE_PARALLEL_VACUUM_DSA] = "ParallelVacuumDSA", - [LWTRANCHE_AIO_URING_COMPLETION] = "AioUringCompletion", +#undef PG_LWLOCKTRANCHE }; StaticAssertDecl(lengthof(BuiltinTrancheNames) == @@ -202,8 +162,7 @@ LWLockPadded *MainLWLockArray = NULL; /* * We use this structure to keep track of locked LWLocks for release * during error recovery. Normally, only a few will be held at once, but - * occasionally the number can be much higher; for example, the pg_buffercache - * extension locks all buffer partitions simultaneously. + * occasionally the number can be much higher. */ #define MAX_SIMUL_LWLOCKS 200 @@ -1830,7 +1789,7 @@ LWLockDisownInternal(LWLock *lock) /* * Helper function to release lock, shared between LWLockRelease() and - * LWLockeleaseDisowned(). + * LWLockReleaseDisowned(). */ static void LWLockReleaseInternal(LWLock *lock, LWLockMode mode) @@ -1959,6 +1918,21 @@ LWLockReleaseAll(void) } +/* + * ForEachLWLockHeldByMe - run a callback for each held lock + * + * This is meant as debug support only. + */ +void +ForEachLWLockHeldByMe(void (*callback) (LWLock *, LWLockMode, void *), + void *context) +{ + int i; + + for (i = 0; i < num_held_lwlocks; i++) + callback(held_lwlocks[i].lock, held_lwlocks[i].mode, context); +} + /* * LWLockHeldByMe - test whether my process holds a lock in any mode * diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index 5b21a05398114..c1d8511ad17a9 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -191,7 +191,7 @@ * AtPrepare_PredicateLocks(void); * PostPrepare_PredicateLocks(TransactionId xid); * PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit); - * predicatelock_twophase_recover(TransactionId xid, uint16 info, + * predicatelock_twophase_recover(FullTransactionId fxid, uint16 info, * void *recdata, uint32 len); */ @@ -1145,7 +1145,7 @@ void PredicateLockShmemInit(void) { HASHCTL info; - long max_table_size; + int64 max_table_size; Size requestSize; bool found; @@ -1226,14 +1226,21 @@ PredicateLockShmemInit(void) */ max_table_size *= 10; + requestSize = add_size(PredXactListDataSize, + (mul_size((Size) max_table_size, + sizeof(SERIALIZABLEXACT)))); + PredXact = ShmemInitStruct("PredXactList", - PredXactListDataSize, + requestSize, &found); Assert(found == IsUnderPostmaster); if (!found) { int i; + /* clean everything, both the header and the element */ + memset(PredXact, 0, requestSize); + dlist_init(&PredXact->availableList); dlist_init(&PredXact->activeList); PredXact->SxactGlobalXmin = InvalidTransactionId; @@ -1242,11 +1249,9 @@ PredicateLockShmemInit(void) PredXact->LastSxactCommitSeqNo = FirstNormalSerCommitSeqNo - 1; PredXact->CanPartialClearThrough = 0; PredXact->HavePartialClearedThrough = 0; - requestSize = mul_size((Size) max_table_size, - sizeof(SERIALIZABLEXACT)); - PredXact->element = ShmemAlloc(requestSize); + PredXact->element + = (SERIALIZABLEXACT *) ((char *) PredXact + PredXactListDataSize); /* Add all elements to available list, clean. */ - memset(PredXact->element, 0, requestSize); for (i = 0; i < max_table_size; i++) { LWLockInitialize(&PredXact->element[i].perXactPredicateListLock, @@ -1300,20 +1305,25 @@ PredicateLockShmemInit(void) */ max_table_size *= 5; + requestSize = RWConflictPoolHeaderDataSize + + mul_size((Size) max_table_size, + RWConflictDataSize); + RWConflictPool = ShmemInitStruct("RWConflictPool", - RWConflictPoolHeaderDataSize, + requestSize, &found); Assert(found == IsUnderPostmaster); if (!found) { int i; + /* clean everything, including the elements */ + memset(RWConflictPool, 0, requestSize); + dlist_init(&RWConflictPool->availableList); - requestSize = mul_size((Size) max_table_size, - RWConflictDataSize); - RWConflictPool->element = ShmemAlloc(requestSize); + RWConflictPool->element = (RWConflict) ((char *) RWConflictPool + + RWConflictPoolHeaderDataSize); /* Add all elements to available list, clean. */ - memset(RWConflictPool->element, 0, requestSize); for (i = 0; i < max_table_size; i++) { dlist_push_tail(&RWConflictPool->availableList, @@ -4846,7 +4856,7 @@ AtPrepare_PredicateLocks(void) * anyway. We only need to clean up our local state. */ void -PostPrepare_PredicateLocks(TransactionId xid) +PostPrepare_PredicateLocks(FullTransactionId fxid) { if (MySerializableXact == InvalidSerializableXact) return; @@ -4869,12 +4879,12 @@ PostPrepare_PredicateLocks(TransactionId xid) * commits or aborts. */ void -PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit) +PredicateLockTwoPhaseFinish(FullTransactionId fxid, bool isCommit) { SERIALIZABLEXID *sxid; SERIALIZABLEXIDTAG sxidtag; - sxidtag.xid = xid; + sxidtag.xid = XidFromFullTransactionId(fxid); LWLockAcquire(SerializableXactHashLock, LW_SHARED); sxid = (SERIALIZABLEXID *) @@ -4896,10 +4906,11 @@ PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit) * Re-acquire a predicate lock belonging to a transaction that was prepared. */ void -predicatelock_twophase_recover(TransactionId xid, uint16 info, +predicatelock_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { TwoPhasePredicateRecord *record; + TransactionId xid = XidFromFullTransactionId(fxid); Assert(len == sizeof(TwoPhasePredicateRecord)); diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 066319afe2b08..e9ef0fbfe32cb 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -91,26 +91,35 @@ static void CheckDeadLock(void); /* - * Report shared-memory space needed by InitProcGlobal. + * Report shared-memory space needed by PGPROC. */ -Size -ProcGlobalShmemSize(void) +static Size +PGProcShmemSize(void) { Size size = 0; Size TotalProcs = add_size(MaxBackends, add_size(NUM_AUXILIARY_PROCS, max_prepared_xacts)); - Size fpLockBitsSize, - fpRelIdSize; - /* ProcGlobal */ - size = add_size(size, sizeof(PROC_HDR)); size = add_size(size, mul_size(TotalProcs, sizeof(PGPROC))); - size = add_size(size, sizeof(slock_t)); - size = add_size(size, mul_size(TotalProcs, sizeof(*ProcGlobal->xids))); size = add_size(size, mul_size(TotalProcs, sizeof(*ProcGlobal->subxidStates))); size = add_size(size, mul_size(TotalProcs, sizeof(*ProcGlobal->statusFlags))); + return size; +} + +/* + * Report shared-memory space needed by Fast-Path locks. + */ +static Size +FastPathLockShmemSize(void) +{ + Size size = 0; + Size TotalProcs = + add_size(MaxBackends, add_size(NUM_AUXILIARY_PROCS, max_prepared_xacts)); + Size fpLockBitsSize, + fpRelIdSize; + /* * Memory needed for PGPROC fast-path lock arrays. Make sure the sizes are * nicely aligned in each backend. @@ -123,6 +132,24 @@ ProcGlobalShmemSize(void) return size; } +/* + * Report shared-memory space needed by InitProcGlobal. + */ +Size +ProcGlobalShmemSize(void) +{ + Size size = 0; + + /* ProcGlobal */ + size = add_size(size, sizeof(PROC_HDR)); + size = add_size(size, sizeof(slock_t)); + + size = add_size(size, PGProcShmemSize()); + size = add_size(size, FastPathLockShmemSize()); + + return size; +} + /* * Report number of semaphores needed by InitProcGlobal. */ @@ -175,6 +202,8 @@ InitProcGlobal(void) *fpEndPtr PG_USED_FOR_ASSERTS_ONLY; Size fpLockBitsSize, fpRelIdSize; + Size requestSize; + char *ptr; /* Create the ProcGlobal shared structure */ ProcGlobal = (PROC_HDR *) @@ -204,8 +233,17 @@ InitProcGlobal(void) * with a single freelist.) Each PGPROC structure is dedicated to exactly * one of these purposes, and they do not move between groups. */ - procs = (PGPROC *) ShmemAlloc(TotalProcs * sizeof(PGPROC)); - MemSet(procs, 0, TotalProcs * sizeof(PGPROC)); + requestSize = PGProcShmemSize(); + + ptr = ShmemInitStruct("PGPROC structures", + requestSize, + &found); + + MemSet(ptr, 0, requestSize); + + procs = (PGPROC *) ptr; + ptr = (char *) ptr + TotalProcs * sizeof(PGPROC); + ProcGlobal->allProcs = procs; /* XXX allProcCount isn't really all of them; it excludes prepared xacts */ ProcGlobal->allProcCount = MaxBackends + NUM_AUXILIARY_PROCS; @@ -217,13 +255,17 @@ InitProcGlobal(void) * XXX: It might make sense to increase padding for these arrays, given * how hotly they are accessed. */ - ProcGlobal->xids = - (TransactionId *) ShmemAlloc(TotalProcs * sizeof(*ProcGlobal->xids)); - MemSet(ProcGlobal->xids, 0, TotalProcs * sizeof(*ProcGlobal->xids)); - ProcGlobal->subxidStates = (XidCacheStatus *) ShmemAlloc(TotalProcs * sizeof(*ProcGlobal->subxidStates)); - MemSet(ProcGlobal->subxidStates, 0, TotalProcs * sizeof(*ProcGlobal->subxidStates)); - ProcGlobal->statusFlags = (uint8 *) ShmemAlloc(TotalProcs * sizeof(*ProcGlobal->statusFlags)); - MemSet(ProcGlobal->statusFlags, 0, TotalProcs * sizeof(*ProcGlobal->statusFlags)); + ProcGlobal->xids = (TransactionId *) ptr; + ptr = (char *) ptr + (TotalProcs * sizeof(*ProcGlobal->xids)); + + ProcGlobal->subxidStates = (XidCacheStatus *) ptr; + ptr = (char *) ptr + (TotalProcs * sizeof(*ProcGlobal->subxidStates)); + + ProcGlobal->statusFlags = (uint8 *) ptr; + ptr = (char *) ptr + (TotalProcs * sizeof(*ProcGlobal->statusFlags)); + + /* make sure wer didn't overflow */ + Assert((ptr > (char *) procs) && (ptr <= (char *) procs + requestSize)); /* * Allocate arrays for fast-path locks. Those are variable-length, so @@ -233,11 +275,16 @@ InitProcGlobal(void) fpLockBitsSize = MAXALIGN(FastPathLockGroupsPerBackend * sizeof(uint64)); fpRelIdSize = MAXALIGN(FastPathLockSlotsPerBackend() * sizeof(Oid)); - fpPtr = ShmemAlloc(TotalProcs * (fpLockBitsSize + fpRelIdSize)); - MemSet(fpPtr, 0, TotalProcs * (fpLockBitsSize + fpRelIdSize)); + requestSize = FastPathLockShmemSize(); + + fpPtr = ShmemInitStruct("Fast-Path Lock Array", + requestSize, + &found); + + MemSet(fpPtr, 0, requestSize); /* For asserts checking we did not overflow. */ - fpEndPtr = fpPtr + (TotalProcs * (fpLockBitsSize + fpRelIdSize)); + fpEndPtr = fpPtr + requestSize; for (i = 0; i < TotalProcs; i++) { @@ -330,7 +377,9 @@ InitProcGlobal(void) PreparedXactProcs = &procs[MaxBackends + NUM_AUXILIARY_PROCS]; /* Create ProcStructLock spinlock, too */ - ProcStructLock = (slock_t *) ShmemAlloc(sizeof(slock_t)); + ProcStructLock = (slock_t *) ShmemInitStruct("ProcStructLock spinlock", + sizeof(slock_t), + &found); SpinLockInit(ProcStructLock); } diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index 82457bacc62fa..dbb49ed9197d7 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -88,7 +88,7 @@ PageInit(Page page, Size pageSize, Size specialSize) * To allow the caller to report statistics about checksum failures, * *checksum_failure_p can be passed in. Note that there may be checksum * failures even if this function returns true, due to - * IGNORE_CHECKSUM_FAILURE. + * PIV_IGNORE_CHECKSUM_FAILURE. */ bool PageIsVerified(PageData *page, BlockNumber blkno, int flags, bool *checksum_failure_p) diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index f99c9d9001342..2ccb0faceb5b6 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -154,7 +154,7 @@ static BlockNumber _mdnblocks(SMgrRelation reln, ForkNumber forknum, MdfdVec *seg); static PgAioResult md_readv_complete(PgAioHandle *ioh, PgAioResult prior_result, uint8 cb_data); -static void md_readv_report(PgAioResult result, const PgAioTargetData *target_data, int elevel); +static void md_readv_report(PgAioResult result, const PgAioTargetData *td, int elevel); const PgAioHandleCallbacks aio_md_readv_cb = { .complete_shared = md_readv_complete, diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 4540284f5817c..bce37a36d51ba 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -746,6 +746,8 @@ smgrreadv(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, * responsible for pgaio_result_report() to mirror that news to the user (if * the IO results in PGAIO_RS_WARNING) or abort the (sub)transaction (if * PGAIO_RS_ERROR). + * - Under Valgrind, the "buffers" memory may or may not change status to + * DEFINED, depending on io_method and concurrent activity. */ void smgrstartreadv(PgAioHandle *ioh, diff --git a/src/backend/tcop/backend_startup.c b/src/backend/tcop/backend_startup.c index a07c59ece013e..14d5fc0b1965a 100644 --- a/src/backend/tcop/backend_startup.c +++ b/src/backend/tcop/backend_startup.c @@ -18,6 +18,7 @@ #include #include "access/xlog.h" +#include "access/xlogrecovery.h" #include "common/ip.h" #include "common/string.h" #include "libpq/libpq.h" @@ -59,6 +60,7 @@ ConnectionTiming conn_timing = {.ready_for_use = TIMESTAMP_MINUS_INFINITY}; static void BackendInitialize(ClientSocket *client_sock, CAC_state cac); static int ProcessSSLStartup(Port *port); static int ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done); +static void ProcessCancelRequestPacket(Port *port, void *pkt, int pktlen); static void SendNegotiateProtocolVersion(List *unrecognized_protocol_options); static void process_startup_packet_die(SIGNAL_ARGS); static void StartupPacketTimeoutHandler(void); @@ -232,7 +234,7 @@ BackendInitialize(ClientSocket *client_sock, CAC_state cac) /* For testing client error handling */ #ifdef USE_INJECTION_POINTS - INJECTION_POINT("backend-initialize"); + INJECTION_POINT("backend-initialize", NULL); if (IS_INJECTION_POINT_ATTACHED("backend-initialize-v2-error")) { /* @@ -306,17 +308,24 @@ BackendInitialize(ClientSocket *client_sock, CAC_state cac) (errcode(ERRCODE_CANNOT_CONNECT_NOW), errmsg("the database system is starting up"))); break; - case CAC_NOTCONSISTENT: - if (EnableHotStandby) + case CAC_NOTHOTSTANDBY: + if (!EnableHotStandby) + ereport(FATAL, + (errcode(ERRCODE_CANNOT_CONNECT_NOW), + errmsg("the database system is not accepting connections"), + errdetail("Hot standby mode is disabled."))); + else if (reachedConsistency) ereport(FATAL, (errcode(ERRCODE_CANNOT_CONNECT_NOW), errmsg("the database system is not yet accepting connections"), - errdetail("Consistent recovery state has not been yet reached."))); + errdetail("Recovery snapshot is not yet ready for hot standby."), + errhint("To enable hot standby, close write transactions with more than %d subtransactions on the primary server.", + PGPROC_MAX_CACHED_SUBXIDS))); else ereport(FATAL, (errcode(ERRCODE_CANNOT_CONNECT_NOW), - errmsg("the database system is not accepting connections"), - errdetail("Hot standby mode is disabled."))); + errmsg("the database system is not yet accepting connections"), + errdetail("Consistent recovery state has not been yet reached."))); break; case CAC_SHUTDOWN: ereport(FATAL, @@ -483,7 +492,7 @@ static int ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) { int32 len; - char *buf; + char *buf = NULL; ProtocolVersion proto; MemoryContext oldcontext; @@ -507,7 +516,7 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) * scanners, which may be less benign, but it's not really our job to * notice those.) */ - return STATUS_ERROR; + goto fail; } if (pq_getbytes(((char *) &len) + 1, 3) == EOF) @@ -517,7 +526,7 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("incomplete startup packet"))); - return STATUS_ERROR; + goto fail; } len = pg_ntoh32(len); @@ -529,7 +538,7 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("invalid length of startup packet"))); - return STATUS_ERROR; + goto fail; } /* @@ -545,7 +554,7 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("incomplete startup packet"))); - return STATUS_ERROR; + goto fail; } pq_endmsgread(); @@ -557,30 +566,9 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) if (proto == CANCEL_REQUEST_CODE) { - /* - * The client has sent a cancel request packet, not a normal - * start-a-new-connection packet. Perform the necessary processing. - * Nothing is sent back to the client. - */ - CancelRequestPacket *canc; - int backendPID; - int32 cancelAuthCode; - - if (len != sizeof(CancelRequestPacket)) - { - ereport(COMMERROR, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("invalid length of startup packet"))); - return STATUS_ERROR; - } - canc = (CancelRequestPacket *) buf; - backendPID = (int) pg_ntoh32(canc->backendPID); - cancelAuthCode = (int32) pg_ntoh32(canc->cancelAuthCode); - - if (backendPID != 0) - SendCancelRequest(backendPID, cancelAuthCode); + ProcessCancelRequestPacket(port, buf, len); /* Not really an error, but we don't want to proceed further */ - return STATUS_ERROR; + goto fail; } if (proto == NEGOTIATE_SSL_CODE && !ssl_done) @@ -619,14 +607,16 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) ereport(COMMERROR, (errcode_for_socket_access(), errmsg("failed to send SSL negotiation response: %m"))); - return STATUS_ERROR; /* close the connection */ + goto fail; /* close the connection */ } #ifdef USE_SSL if (SSLok == 'S' && secure_open_server(port) == -1) - return STATUS_ERROR; + goto fail; #endif + pfree(buf); + /* * At this point we should have no data already buffered. If we do, * it was received before we performed the SSL handshake, so it wasn't @@ -673,14 +663,16 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) ereport(COMMERROR, (errcode_for_socket_access(), errmsg("failed to send GSSAPI negotiation response: %m"))); - return STATUS_ERROR; /* close the connection */ + goto fail; /* close the connection */ } #ifdef ENABLE_GSS if (GSSok == 'G' && secure_open_gssapi(port) == -1) - return STATUS_ERROR; + goto fail; #endif + pfree(buf); + /* * At this point we should have no data already buffered. If we do, * it was received before we performed the GSS handshake, so it wasn't @@ -875,7 +867,47 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done) */ MemoryContextSwitchTo(oldcontext); + pfree(buf); + return STATUS_OK; + +fail: + /* be tidy, just to avoid Valgrind complaints */ + if (buf) + pfree(buf); + + return STATUS_ERROR; +} + +/* + * The client has sent a cancel request packet, not a normal + * start-a-new-connection packet. Perform the necessary processing. Nothing + * is sent back to the client. + */ +static void +ProcessCancelRequestPacket(Port *port, void *pkt, int pktlen) +{ + CancelRequestPacket *canc; + int len; + + if (pktlen < offsetof(CancelRequestPacket, cancelAuthCode)) + { + ereport(COMMERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("invalid length of cancel request packet"))); + return; + } + len = pktlen - offsetof(CancelRequestPacket, cancelAuthCode); + if (len == 0 || len > 256) + { + ereport(COMMERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("invalid length of cancel key in cancel request packet"))); + return; + } + + canc = (CancelRequestPacket *) pkt; + SendCancelRequest(pg_ntoh32(canc->backendPID), canc->cancelAuthCode, len); } /* @@ -1058,7 +1090,7 @@ check_log_connections(char **newval, void **extra, GucSource source) if (!SplitIdentifierString(rawstring, ',', &elemlist)) { - GUC_check_errdetail("Invalid list syntax in parameter \"log_connections\"."); + GUC_check_errdetail("Invalid list syntax in parameter \"%s\".", "log_connections"); pfree(rawstring); list_free(elemlist); return false; diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index aec65007bb6a3..0cecd4649020f 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -988,6 +988,7 @@ pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, stmt->stmt_location = query->stmt_location; stmt->stmt_len = query->stmt_len; stmt->queryId = query->queryId; + stmt->planOrigin = PLAN_STMT_INTERNAL; } else { @@ -1226,7 +1227,6 @@ exec_simple_query(const char *query_string) query_string, commandTag, plantree_list, - NULL, NULL); /* @@ -1683,7 +1683,7 @@ exec_bind_message(StringInfo input_message) { Query *query = lfirst_node(Query, lc); - if (query->queryId != UINT64CONST(0)) + if (query->queryId != INT64CONST(0)) { pgstat_report_query_id(query->queryId, false); break; @@ -2028,15 +2028,14 @@ exec_bind_message(StringInfo input_message) query_string, psrc->commandTag, cplan->stmt_list, - cplan, - psrc); + cplan); /* Portal is defined, set the plan ID based on its contents. */ foreach(lc, portal->stmts) { PlannedStmt *plan = lfirst_node(PlannedStmt, lc); - if (plan->planId != UINT64CONST(0)) + if (plan->planId != INT64CONST(0)) { pgstat_report_plan_id(plan->planId, false); break; @@ -2176,7 +2175,7 @@ exec_execute_message(const char *portal_name, long max_rows) { PlannedStmt *stmt = lfirst_node(PlannedStmt, lc); - if (stmt->queryId != UINT64CONST(0)) + if (stmt->queryId != INT64CONST(0)) { pgstat_report_query_id(stmt->queryId, false); break; @@ -2187,7 +2186,7 @@ exec_execute_message(const char *portal_name, long max_rows) { PlannedStmt *stmt = lfirst_node(PlannedStmt, lc); - if (stmt->planId != UINT64CONST(0)) + if (stmt->planId != INT64CONST(0)) { pgstat_report_plan_id(stmt->planId, false); break; @@ -3335,6 +3334,10 @@ ProcessInterrupts(void) */ proc_exit(1); } + else if (AmWalReceiverProcess()) + ereport(FATAL, + (errcode(ERRCODE_ADMIN_SHUTDOWN), + errmsg("terminating walreceiver process due to administrator command"))); else if (AmBackgroundWorkerProcess()) ereport(FATAL, (errcode(ERRCODE_ADMIN_SHUTDOWN), @@ -3478,7 +3481,7 @@ ProcessInterrupts(void) IdleInTransactionSessionTimeoutPending = false; if (IdleInTransactionSessionTimeout > 0) { - INJECTION_POINT("idle-in-transaction-session-timeout"); + INJECTION_POINT("idle-in-transaction-session-timeout", NULL); ereport(FATAL, (errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT), errmsg("terminating connection due to idle-in-transaction timeout"))); @@ -3491,7 +3494,7 @@ ProcessInterrupts(void) TransactionTimeoutPending = false; if (TransactionTimeout > 0) { - INJECTION_POINT("transaction-timeout"); + INJECTION_POINT("transaction-timeout", NULL); ereport(FATAL, (errcode(ERRCODE_TRANSACTION_TIMEOUT), errmsg("terminating connection due to transaction timeout"))); @@ -3504,7 +3507,7 @@ ProcessInterrupts(void) IdleSessionTimeoutPending = false; if (IdleSessionTimeout > 0) { - INJECTION_POINT("idle-session-timeout"); + INJECTION_POINT("idle-session-timeout", NULL); ereport(FATAL, (errcode(ERRCODE_IDLE_SESSION_TIMEOUT), errmsg("terminating connection due to idle-session timeout"))); @@ -3688,7 +3691,7 @@ set_debug_options(int debug_flag, GucContext context, GucSource source) if (debug_flag >= 1 && context == PGC_POSTMASTER) { - SetConfigOption("log_connections", "true", context, source); + SetConfigOption("log_connections", "all", context, source); SetConfigOption("log_disconnections", "true", context, source); } if (debug_flag >= 2) @@ -4259,16 +4262,20 @@ PostgresMain(const char *dbname, const char *username) * Generate a random cancel key, if this is a backend serving a * connection. InitPostgres() will advertise it in shared memory. */ - Assert(!MyCancelKeyValid); + Assert(MyCancelKeyLength == 0); if (whereToSendOutput == DestRemote) { - if (!pg_strong_random(&MyCancelKey, sizeof(int32))) + int len; + + len = (MyProcPort == NULL || MyProcPort->proto >= PG_PROTOCOL(3, 2)) + ? MAX_CANCEL_KEY_LENGTH : 4; + if (!pg_strong_random(&MyCancelKey, len)) { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("could not generate random cancel key"))); } - MyCancelKeyValid = true; + MyCancelKeyLength = len; } /* @@ -4323,10 +4330,11 @@ PostgresMain(const char *dbname, const char *username) { StringInfoData buf; - Assert(MyCancelKeyValid); + Assert(MyCancelKeyLength > 0); pq_beginmessage(&buf, PqMsg_BackendKeyData); pq_sendint32(&buf, (int32) MyProcPid); - pq_sendint32(&buf, (int32) MyCancelKey); + + pq_sendbytes(&buf, MyCancelKey, MyCancelKeyLength); pq_endmessage(&buf); /* Need not flush since ReadyForQuery will do it. */ } diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 8164d0fbb4f69..08791b8f75ec2 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -19,7 +19,6 @@ #include "access/xact.h" #include "commands/prepare.h" -#include "executor/execdesc.h" #include "executor/executor.h" #include "executor/tstoreReceiver.h" #include "miscadmin.h" @@ -38,9 +37,6 @@ Portal ActivePortal = NULL; static void ProcessQuery(PlannedStmt *plan, - CachedPlan *cplan, - CachedPlanSource *plansource, - int query_index, const char *sourceText, ParamListInfo params, QueryEnvironment *queryEnv, @@ -70,7 +66,6 @@ static void DoPortalRewind(Portal portal); */ QueryDesc * CreateQueryDesc(PlannedStmt *plannedstmt, - CachedPlan *cplan, const char *sourceText, Snapshot snapshot, Snapshot crosscheck_snapshot, @@ -83,7 +78,6 @@ CreateQueryDesc(PlannedStmt *plannedstmt, qd->operation = plannedstmt->commandType; /* operation */ qd->plannedstmt = plannedstmt; /* plan */ - qd->cplan = cplan; /* CachedPlan supplying the plannedstmt */ qd->sourceText = sourceText; /* query text */ qd->snapshot = RegisterSnapshot(snapshot); /* snapshot */ /* RI check snapshot */ @@ -129,9 +123,6 @@ FreeQueryDesc(QueryDesc *qdesc) * PORTAL_ONE_RETURNING, or PORTAL_ONE_MOD_WITH portal * * plan: the plan tree for the query - * cplan: CachedPlan supplying the plan - * plansource: CachedPlanSource supplying the cplan - * query_index: index of the query in plansource->query_list * sourceText: the source text of the query * params: any parameters needed * dest: where to send results @@ -144,9 +135,6 @@ FreeQueryDesc(QueryDesc *qdesc) */ static void ProcessQuery(PlannedStmt *plan, - CachedPlan *cplan, - CachedPlanSource *plansource, - int query_index, const char *sourceText, ParamListInfo params, QueryEnvironment *queryEnv, @@ -158,23 +146,14 @@ ProcessQuery(PlannedStmt *plan, /* * Create the QueryDesc object */ - queryDesc = CreateQueryDesc(plan, cplan, sourceText, + queryDesc = CreateQueryDesc(plan, sourceText, GetActiveSnapshot(), InvalidSnapshot, dest, params, queryEnv, 0); /* - * Prepare the plan for execution + * Call ExecutorStart to prepare the plan for execution */ - if (queryDesc->cplan) - { - ExecutorStartCachedPlan(queryDesc, 0, plansource, query_index); - Assert(queryDesc->planstate); - } - else - { - if (!ExecutorStart(queryDesc, 0)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); - } + ExecutorStart(queryDesc, 0); /* * Run the plan to completion. @@ -515,7 +494,6 @@ PortalStart(Portal portal, ParamListInfo params, * the destination to DestNone. */ queryDesc = CreateQueryDesc(linitial_node(PlannedStmt, portal->stmts), - portal->cplan, portal->sourceText, GetActiveSnapshot(), InvalidSnapshot, @@ -535,19 +513,9 @@ PortalStart(Portal portal, ParamListInfo params, myeflags = eflags; /* - * Prepare the plan for execution. + * Call ExecutorStart to prepare the plan for execution */ - if (portal->cplan) - { - ExecutorStartCachedPlan(queryDesc, myeflags, - portal->plansource, 0); - Assert(queryDesc->planstate); - } - else - { - if (!ExecutorStart(queryDesc, myeflags)) - elog(ERROR, "ExecutorStart() failed unexpectedly"); - } + ExecutorStart(queryDesc, myeflags); /* * This tells PortalCleanup to shut down the executor @@ -1221,7 +1189,6 @@ PortalRunMulti(Portal portal, { bool active_snapshot_set = false; ListCell *stmtlist_item; - int query_index = 0; /* * If the destination is DestRemoteExecute, change to DestNone. The @@ -1303,9 +1270,6 @@ PortalRunMulti(Portal portal, { /* statement can set tag string */ ProcessQuery(pstmt, - portal->cplan, - portal->plansource, - query_index, portal->sourceText, portal->portalParams, portal->queryEnv, @@ -1315,9 +1279,6 @@ PortalRunMulti(Portal portal, { /* stmt added by rewrite cannot set tag */ ProcessQuery(pstmt, - portal->cplan, - portal->plansource, - query_index, portal->sourceText, portal->portalParams, portal->queryEnv, @@ -1382,8 +1343,6 @@ PortalRunMulti(Portal portal, */ if (lnext(portal->stmts, stmtlist_item) != NULL) CommandCounterIncrement(); - - query_index++; } /* Pop the snapshot if we pushed one. */ @@ -1391,24 +1350,15 @@ PortalRunMulti(Portal portal, PopActiveSnapshot(); /* - * If a query completion data was supplied, use it. Otherwise use the - * portal's query completion data. - * - * Exception: Clients expect INSERT/UPDATE/DELETE tags to have counts, so - * fake them with zeros. This can happen with DO INSTEAD rules if there - * is no replacement query of the same type as the original. We print "0 - * 0" here because technically there is no query of the matching tag type, - * and printing a non-zero count for a different query type seems wrong, - * e.g. an INSERT that does an UPDATE instead should not print "0 1" if - * one row was updated. See QueryRewrite(), step 3, for details. + * If a command tag was requested and we did not fill in a run-time- + * determined tag above, copy the parse-time tag from the Portal. (There + * might not be any tag there either, in edge cases such as empty prepared + * statements. That's OK.) */ - if (qc && qc->commandTag == CMDTAG_UNKNOWN) - { - if (portal->qc.commandTag != CMDTAG_UNKNOWN) - CopyQueryCompletion(qc, &portal->qc); - /* If the caller supplied a qc, we should have set it by now. */ - Assert(qc->commandTag != CMDTAG_UNKNOWN); - } + if (qc && + qc->commandTag == CMDTAG_UNKNOWN && + portal->qc.commandTag != CMDTAG_UNKNOWN) + CopyQueryCompletion(qc, &portal->qc); } /* diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 25fe3d5801665..4f4191b0ea6b4 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -943,17 +943,7 @@ standard_ProcessUtility(PlannedStmt *pstmt, break; case T_CheckPointStmt: - if (!has_privs_of_role(GetUserId(), ROLE_PG_CHECKPOINT)) - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - /* translator: %s is name of a SQL command, eg CHECKPOINT */ - errmsg("permission denied to execute %s command", - "CHECKPOINT"), - errdetail("Only roles with privileges of the \"%s\" role may execute this command.", - "pg_checkpoint"))); - - RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_WAIT | - (RecoveryInProgress() ? 0 : CHECKPOINT_FORCE)); + ExecCheckpoint(pstate, (CheckPointStmt *) parsetree); break; /* @@ -1244,6 +1234,7 @@ ProcessUtilitySlow(ParseState *pstate, wrapper->utilityStmt = stmt; wrapper->stmt_location = pstmt->stmt_location; wrapper->stmt_len = pstmt->stmt_len; + wrapper->planOrigin = PLAN_STMT_INTERNAL; ProcessUtility(wrapper, queryString, @@ -1343,7 +1334,7 @@ ProcessUtilitySlow(ParseState *pstate, */ switch (stmt->subtype) { - case 'T': /* ALTER DOMAIN DEFAULT */ + case AD_AlterDefault: /* * Recursively alter column default for table and, @@ -1353,30 +1344,30 @@ ProcessUtilitySlow(ParseState *pstate, AlterDomainDefault(stmt->typeName, stmt->def); break; - case 'N': /* ALTER DOMAIN DROP NOT NULL */ + case AD_DropNotNull: address = AlterDomainNotNull(stmt->typeName, false); break; - case 'O': /* ALTER DOMAIN SET NOT NULL */ + case AD_SetNotNull: address = AlterDomainNotNull(stmt->typeName, true); break; - case 'C': /* ADD CONSTRAINT */ + case AD_AddConstraint: address = AlterDomainAddConstraint(stmt->typeName, stmt->def, &secondaryObject); break; - case 'X': /* DROP CONSTRAINT */ + case AD_DropConstraint: address = AlterDomainDropConstraint(stmt->typeName, stmt->name, stmt->behavior, stmt->missing_ok); break; - case 'V': /* VALIDATE CONSTRAINT */ + case AD_ValidateConstraint: address = AlterDomainValidateConstraint(stmt->typeName, stmt->name); @@ -1974,6 +1965,7 @@ ProcessUtilityForAlterTable(Node *stmt, AlterTableUtilityContext *context) wrapper->utilityStmt = stmt; wrapper->stmt_location = context->pstmt->stmt_location; wrapper->stmt_len = context->pstmt->stmt_len; + wrapper->planOrigin = PLAN_STMT_INTERNAL; ProcessUtility(wrapper, context->queryString, diff --git a/src/backend/tsearch/dict_ispell.c b/src/backend/tsearch/dict_ispell.c index 63bd193a78a89..debfbf956cc1f 100644 --- a/src/backend/tsearch/dict_ispell.c +++ b/src/backend/tsearch/dict_ispell.c @@ -47,24 +47,30 @@ dispell_init(PG_FUNCTION_ARGS) if (strcmp(defel->defname, "dictfile") == 0) { + char *filename; + if (dictloaded) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("multiple DictFile parameters"))); - NIImportDictionary(&(d->obj), - get_tsearch_config_filename(defGetString(defel), - "dict")); + filename = get_tsearch_config_filename(defGetString(defel), + "dict"); + NIImportDictionary(&(d->obj), filename); + pfree(filename); dictloaded = true; } else if (strcmp(defel->defname, "afffile") == 0) { + char *filename; + if (affloaded) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("multiple AffFile parameters"))); - NIImportAffixes(&(d->obj), - get_tsearch_config_filename(defGetString(defel), - "affix")); + filename = get_tsearch_config_filename(defGetString(defel), + "affix"); + NIImportAffixes(&(d->obj), filename); + pfree(filename); affloaded = true; } else if (strcmp(defel->defname, "stopwords") == 0) diff --git a/src/backend/tsearch/dict_synonym.c b/src/backend/tsearch/dict_synonym.c index 0da5a9d686802..c2773eb01adee 100644 --- a/src/backend/tsearch/dict_synonym.c +++ b/src/backend/tsearch/dict_synonym.c @@ -199,6 +199,7 @@ dsynonym_init(PG_FUNCTION_ARGS) } tsearch_readline_end(&trst); + pfree(filename); d->len = cur; qsort(d->syn, d->len, sizeof(Syn), compareSyn); diff --git a/src/backend/tsearch/dict_thesaurus.c b/src/backend/tsearch/dict_thesaurus.c index 1bebe36a6910e..1e6bbde1ca7d8 100644 --- a/src/backend/tsearch/dict_thesaurus.c +++ b/src/backend/tsearch/dict_thesaurus.c @@ -167,17 +167,17 @@ addWrd(DictThesaurus *d, char *b, char *e, uint32 idsubst, uint16 nwrd, uint16 p static void thesaurusRead(const char *filename, DictThesaurus *d) { + char *real_filename = get_tsearch_config_filename(filename, "ths"); tsearch_readline_state trst; uint32 idsubst = 0; bool useasis = false; char *line; - filename = get_tsearch_config_filename(filename, "ths"); - if (!tsearch_readline_begin(&trst, filename)) + if (!tsearch_readline_begin(&trst, real_filename)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("could not open thesaurus file \"%s\": %m", - filename))); + real_filename))); while ((line = tsearch_readline(&trst)) != NULL) { @@ -297,6 +297,7 @@ thesaurusRead(const char *filename, DictThesaurus *d) d->nsubst = idsubst; tsearch_readline_end(&trst); + pfree(real_filename); } static TheLexeme * diff --git a/src/backend/tsearch/ts_locale.c b/src/backend/tsearch/ts_locale.c index b77d8c23d3694..4801fe90089e6 100644 --- a/src/backend/tsearch/ts_locale.c +++ b/src/backend/tsearch/ts_locale.c @@ -36,7 +36,7 @@ t_isalpha(const char *ptr) { int clen = pg_mblen(ptr); wchar_t character[WC_BUF_LEN]; - pg_locale_t mylocale = 0; /* TODO */ + locale_t mylocale = 0; /* TODO */ if (clen == 1 || database_ctype_is_c) return isalpha(TOUCHAR(ptr)); @@ -51,7 +51,7 @@ t_isalnum(const char *ptr) { int clen = pg_mblen(ptr); wchar_t character[WC_BUF_LEN]; - pg_locale_t mylocale = 0; /* TODO */ + locale_t mylocale = 0; /* TODO */ if (clen == 1 || database_ctype_is_c) return isalnum(TOUCHAR(ptr)); diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c index e5da6cf17ec19..cba421892bf45 100644 --- a/src/backend/tsearch/ts_parse.c +++ b/src/backend/tsearch/ts_parse.c @@ -218,7 +218,7 @@ LexizeExec(LexizeData *ld, ParsedLex **correspondLexem) * position and go to multiword mode */ - ld->curDictId = DatumGetObjectId(map->dictIds[i]); + ld->curDictId = map->dictIds[i]; ld->posDict = i + 1; ld->curSub = curVal->next; if (res) @@ -275,7 +275,7 @@ LexizeExec(LexizeData *ld, ParsedLex **correspondLexem) * dictionaries ? */ for (i = 0; i < map->len && !dictExists; i++) - if (ld->curDictId == DatumGetObjectId(map->dictIds[i])) + if (ld->curDictId == map->dictIds[i]) dictExists = true; if (!dictExists) diff --git a/src/backend/tsearch/ts_selfuncs.c b/src/backend/tsearch/ts_selfuncs.c index 0c1d2bc1109da..453a5e5c2ea06 100644 --- a/src/backend/tsearch/ts_selfuncs.c +++ b/src/backend/tsearch/ts_selfuncs.c @@ -233,7 +233,7 @@ mcelem_tsquery_selec(TSQuery query, Datum *mcelem, int nmcelem, * The text Datums came from an array, so it cannot be compressed or * stored out-of-line -- it's safe to use VARSIZE_ANY*. */ - Assert(!VARATT_IS_COMPRESSED(mcelem[i]) && !VARATT_IS_EXTERNAL(mcelem[i])); + Assert(!VARATT_IS_COMPRESSED(DatumGetPointer(mcelem[i])) && !VARATT_IS_EXTERNAL(DatumGetPointer(mcelem[i]))); lookup[i].element = (text *) DatumGetPointer(mcelem[i]); lookup[i].frequency = numbers[i]; } diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index 79bcd32a0639e..e2dd3da3aa35f 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -299,7 +299,7 @@ TParserInit(char *str, int len) */ if (prs->charmaxlen > 1) { - pg_locale_t mylocale = 0; /* TODO */ + locale_t mylocale = 0; /* TODO */ prs->usewide = true; if (database_ctype_is_c) diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index e1576e64b6d4c..a290cc4c97501 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -320,8 +320,8 @@ pgstat_bestart_initial(void) lbeentry.st_state = STATE_STARTING; lbeentry.st_progress_command = PROGRESS_COMMAND_INVALID; lbeentry.st_progress_command_target = InvalidOid; - lbeentry.st_query_id = UINT64CONST(0); - lbeentry.st_plan_id = UINT64CONST(0); + lbeentry.st_query_id = INT64CONST(0); + lbeentry.st_plan_id = INT64CONST(0); /* * we don't zero st_progress_param here to save cycles; nobody should @@ -599,8 +599,8 @@ pgstat_report_activity(BackendState state, const char *cmd_str) beentry->st_activity_start_timestamp = 0; /* st_xact_start_timestamp and wait_event_info are also disabled */ beentry->st_xact_start_timestamp = 0; - beentry->st_query_id = UINT64CONST(0); - beentry->st_plan_id = UINT64CONST(0); + beentry->st_query_id = INT64CONST(0); + beentry->st_plan_id = INT64CONST(0); proc->wait_event_info = 0; PGSTAT_END_WRITE_ACTIVITY(beentry); } @@ -662,8 +662,8 @@ pgstat_report_activity(BackendState state, const char *cmd_str) */ if (state == STATE_RUNNING) { - beentry->st_query_id = UINT64CONST(0); - beentry->st_plan_id = UINT64CONST(0); + beentry->st_query_id = INT64CONST(0); + beentry->st_plan_id = INT64CONST(0); } if (cmd_str != NULL) @@ -683,7 +683,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) * -------- */ void -pgstat_report_query_id(uint64 query_id, bool force) +pgstat_report_query_id(int64 query_id, bool force) { volatile PgBackendStatus *beentry = MyBEEntry; @@ -702,7 +702,7 @@ pgstat_report_query_id(uint64 query_id, bool force) * command, so ignore the one provided unless it's an explicit call to * reset the identifier. */ - if (beentry->st_query_id != 0 && !force) + if (beentry->st_query_id != INT64CONST(0) && !force) return; /* @@ -722,7 +722,7 @@ pgstat_report_query_id(uint64 query_id, bool force) * -------- */ void -pgstat_report_plan_id(uint64 plan_id, bool force) +pgstat_report_plan_id(int64 plan_id, bool force) { volatile PgBackendStatus *beentry = MyBEEntry; @@ -1134,7 +1134,7 @@ pgstat_get_crashed_backend_activity(int pid, char *buffer, int buflen) * * Return current backend's query identifier. */ -uint64 +int64 pgstat_get_my_query_id(void) { if (!MyBEEntry) @@ -1154,7 +1154,7 @@ pgstat_get_my_query_id(void) * * Return current backend's plan identifier. */ -uint64 +int64 pgstat_get_my_plan_id(void) { if (!MyBEEntry) diff --git a/src/backend/utils/activity/generate-wait_event_types.pl b/src/backend/utils/activity/generate-wait_event_types.pl index 171bf2ae632c8..424ad9f115d34 100644 --- a/src/backend/utils/activity/generate-wait_event_types.pl +++ b/src/backend/utils/activity/generate-wait_event_types.pl @@ -168,7 +168,7 @@ printf $h $header_comment, 'wait_event_types.h'; printf $h "#ifndef WAIT_EVENT_TYPES_H\n"; printf $h "#define WAIT_EVENT_TYPES_H\n\n"; - printf $h "#include \"utils/wait_event.h\"\n\n"; + printf $h "#include \"utils/wait_classes.h\"\n\n"; printf $c $header_comment, 'pgstat_wait_event.c'; diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c index 0005021f644b2..ffb5b8cce3441 100644 --- a/src/backend/utils/activity/pgstat.c +++ b/src/backend/utils/activity/pgstat.c @@ -212,6 +212,11 @@ int pgstat_fetch_consistency = PGSTAT_FETCH_CONSISTENCY_CACHE; PgStat_LocalState pgStatLocal; +/* + * Track pending reports for fixed-numbered stats, used by + * pgstat_report_stat(). + */ +bool pgstat_report_fixed = false; /* ---------- * Local data @@ -370,7 +375,6 @@ static const PgStat_KindInfo pgstat_kind_builtin_infos[PGSTAT_KIND_BUILTIN_SIZE] .shared_data_off = offsetof(PgStatShared_Backend, stats), .shared_data_len = sizeof(((PgStatShared_Backend *) 0)->stats), - .have_static_pending_cb = pgstat_backend_have_pending_cb, .flush_static_cb = pgstat_backend_flush_cb, .reset_timestamp_cb = pgstat_backend_reset_timestamp_cb, }, @@ -437,7 +441,6 @@ static const PgStat_KindInfo pgstat_kind_builtin_infos[PGSTAT_KIND_BUILTIN_SIZE] .shared_data_len = sizeof(((PgStatShared_IO *) 0)->stats), .flush_static_cb = pgstat_io_flush_cb, - .have_static_pending_cb = pgstat_io_have_pending_cb, .init_shmem_cb = pgstat_io_init_shmem_cb, .reset_all_cb = pgstat_io_reset_all_cb, .snapshot_cb = pgstat_io_snapshot_cb, @@ -455,7 +458,6 @@ static const PgStat_KindInfo pgstat_kind_builtin_infos[PGSTAT_KIND_BUILTIN_SIZE] .shared_data_len = sizeof(((PgStatShared_SLRU *) 0)->stats), .flush_static_cb = pgstat_slru_flush_cb, - .have_static_pending_cb = pgstat_slru_have_pending_cb, .init_shmem_cb = pgstat_slru_init_shmem_cb, .reset_all_cb = pgstat_slru_reset_all_cb, .snapshot_cb = pgstat_slru_snapshot_cb, @@ -474,7 +476,6 @@ static const PgStat_KindInfo pgstat_kind_builtin_infos[PGSTAT_KIND_BUILTIN_SIZE] .init_backend_cb = pgstat_wal_init_backend_cb, .flush_static_cb = pgstat_wal_flush_cb, - .have_static_pending_cb = pgstat_wal_have_pending_cb, .init_shmem_cb = pgstat_wal_init_shmem_cb, .reset_all_cb = pgstat_wal_reset_all_cb, .snapshot_cb = pgstat_wal_snapshot_cb, @@ -708,32 +709,10 @@ pgstat_report_stat(bool force) } /* Don't expend a clock check if nothing to do */ - if (dlist_is_empty(&pgStatPending)) + if (dlist_is_empty(&pgStatPending) && + !pgstat_report_fixed) { - bool do_flush = false; - - /* Check for pending stats */ - for (PgStat_Kind kind = PGSTAT_KIND_MIN; kind <= PGSTAT_KIND_MAX; kind++) - { - const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); - - if (!kind_info) - continue; - if (!kind_info->have_static_pending_cb) - continue; - - if (kind_info->have_static_pending_cb()) - { - do_flush = true; - break; - } - } - - if (!do_flush) - { - Assert(pending_since == 0); - return 0; - } + return 0; } /* @@ -787,16 +766,19 @@ pgstat_report_stat(bool force) partial_flush |= pgstat_flush_pending_entries(nowait); /* flush of other stats kinds */ - for (PgStat_Kind kind = PGSTAT_KIND_MIN; kind <= PGSTAT_KIND_MAX; kind++) + if (pgstat_report_fixed) { - const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); + for (PgStat_Kind kind = PGSTAT_KIND_MIN; kind <= PGSTAT_KIND_MAX; kind++) + { + const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); - if (!kind_info) - continue; - if (!kind_info->flush_static_cb) - continue; + if (!kind_info) + continue; + if (!kind_info->flush_static_cb) + continue; - partial_flush |= kind_info->flush_static_cb(nowait); + partial_flush |= kind_info->flush_static_cb(nowait); + } } last_flush = now; @@ -818,6 +800,7 @@ pgstat_report_stat(bool force) } pending_since = 0; + pgstat_report_fixed = false; return 0; } @@ -838,7 +821,7 @@ pgstat_force_next_flush(void) static bool match_db_entries(PgStatShared_HashEntry *entry, Datum match_data) { - return entry->key.dboid == DatumGetObjectId(MyDatabaseId); + return entry->key.dboid == MyDatabaseId; } /* @@ -1019,7 +1002,7 @@ pgstat_fetch_entry(PgStat_Kind kind, Oid dboid, uint64 objid) stats_data = MemoryContextAlloc(pgStatLocal.snapshot.context, kind_info->shared_data_len); - pgstat_lock_entry_shared(entry_ref, false); + (void) pgstat_lock_entry_shared(entry_ref, false); memcpy(stats_data, pgstat_get_entry_data(kind, entry_ref->shared_stats), kind_info->shared_data_len); @@ -1190,7 +1173,7 @@ pgstat_build_snapshot(void) Assert(!found); entry->data = MemoryContextAlloc(pgStatLocal.snapshot.context, - kind_info->shared_size); + pgstat_get_entry_len(kind)); /* * Acquire the LWLock directly instead of using @@ -1199,7 +1182,7 @@ pgstat_build_snapshot(void) LWLockAcquire(&stats_data->lock, LW_SHARED); memcpy(entry->data, pgstat_get_entry_data(kind, stats_data), - kind_info->shared_size); + pgstat_get_entry_len(kind)); LWLockRelease(&stats_data->lock); } dshash_seq_term(&hstat); @@ -1908,6 +1891,14 @@ pgstat_read_statsfile(void) key.objid, t); goto error; } + + if (!pgstat_get_kind_info(key.kind)) + { + elog(WARNING, "could not find information of kind for entry %u/%u/%" PRIu64 " of type %c", + key.kind, key.dboid, + key.objid, t); + goto error; + } } else { diff --git a/src/backend/utils/activity/pgstat_backend.c b/src/backend/utils/activity/pgstat_backend.c index 187c5c76e1eda..8714a85e2d936 100644 --- a/src/backend/utils/activity/pgstat_backend.c +++ b/src/backend/utils/activity/pgstat_backend.c @@ -66,6 +66,7 @@ pgstat_count_backend_io_op_time(IOObject io_object, IOContext io_context, io_time); backend_has_iostats = true; + pgstat_report_fixed = true; } void @@ -81,6 +82,7 @@ pgstat_count_backend_io_op(IOObject io_object, IOContext io_context, PendingBackendStats.pending_io.bytes[io_object][io_context][io_op] += bytes; backend_has_iostats = true; + pgstat_report_fixed = true; } /* @@ -100,7 +102,7 @@ pgstat_fetch_stat_backend(ProcNumber procNumber) /* * Returns statistics of a backend by pid. * - * This routine includes sanity checks to ensire that the backend exists and + * This routine includes sanity checks to ensure that the backend exists and * is running. "bktype" can be optionally defined to return the BackendType * of the backend whose statistics are returned. */ @@ -133,10 +135,6 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype) if (!pgstat_tracks_backend_bktype(beentry->st_backendType)) return NULL; - backend_stats = pgstat_fetch_stat_backend(procNumber); - if (!backend_stats) - return NULL; - /* if PID does not match, leave */ if (beentry->st_procpid != pid) return NULL; @@ -144,6 +142,18 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype) if (bktype) *bktype = beentry->st_backendType; + /* + * Retrieve the entry. Note that "beentry" may be freed depending on the + * value of stats_fetch_consistency, so do not access it from this point. + */ + backend_stats = pgstat_fetch_stat_backend(procNumber); + if (!backend_stats) + { + if (bktype) + *bktype = B_INVALID; + return NULL; + } + return backend_stats; } @@ -293,18 +303,6 @@ pgstat_flush_backend(bool nowait, bits32 flags) return false; } -/* - * Check if there are any backend stats waiting for flush. - */ -bool -pgstat_backend_have_pending_cb(void) -{ - if (!pgstat_tracks_backend_bktype(MyBackendType)) - return false; - - return (backend_has_iostats || pgstat_backend_wal_have_pending()); -} - /* * Callback to flush out locally pending backend statistics. * diff --git a/src/backend/utils/activity/pgstat_database.c b/src/backend/utils/activity/pgstat_database.c index fbaf83641170d..b31f20d41bcc5 100644 --- a/src/backend/utils/activity/pgstat_database.c +++ b/src/backend/utils/activity/pgstat_database.c @@ -195,7 +195,7 @@ pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount) return; } - pgstat_lock_entry(entry_ref, false); + (void) pgstat_lock_entry(entry_ref, false); sharedent = (PgStatShared_Database *) entry_ref->shared_stats; sharedent->stats.checksum_failures += failurecount; @@ -421,8 +421,8 @@ pgstat_reset_database_timestamp(Oid dboid, TimestampTz ts) /* * Flush out pending stats for the entry * - * If nowait is true, this function returns false if lock could not - * immediately acquired, otherwise true is returned. + * If nowait is true and the lock could not be immediately acquired, returns + * false without flushing the entry. Otherwise returns true. */ bool pgstat_database_flush_cb(PgStat_EntryRef *entry_ref, bool nowait) diff --git a/src/backend/utils/activity/pgstat_function.c b/src/backend/utils/activity/pgstat_function.c index bc4e254d02d3b..6214f93d36e0c 100644 --- a/src/backend/utils/activity/pgstat_function.c +++ b/src/backend/utils/activity/pgstat_function.c @@ -186,8 +186,8 @@ pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize) /* * Flush out pending stats for the entry * - * If nowait is true, this function returns false if lock could not - * immediately acquired, otherwise true is returned. + * If nowait is true and the lock could not be immediately acquired, returns + * false without flushing the entry. Otherwise returns true. */ bool pgstat_function_flush_cb(PgStat_EntryRef *entry_ref, bool nowait) diff --git a/src/backend/utils/activity/pgstat_io.c b/src/backend/utils/activity/pgstat_io.c index d8d26379a571e..13ae57ed6498d 100644 --- a/src/backend/utils/activity/pgstat_io.c +++ b/src/backend/utils/activity/pgstat_io.c @@ -80,6 +80,7 @@ pgstat_count_io_op(IOObject io_object, IOContext io_context, IOOp io_op, pgstat_count_backend_io_op(io_object, io_context, io_op, cnt, bytes); have_iostats = true; + pgstat_report_fixed = true; } /* @@ -167,15 +168,6 @@ pgstat_fetch_stat_io(void) return &pgStatLocal.snapshot.io; } -/* - * Check if there any IO stats waiting for flush. - */ -bool -pgstat_io_have_pending_cb(void) -{ - return have_iostats; -} - /* * Simpler wrapper of pgstat_io_flush_cb() */ diff --git a/src/backend/utils/activity/pgstat_relation.c b/src/backend/utils/activity/pgstat_relation.c index d64595a165cc2..69df741cbf630 100644 --- a/src/backend/utils/activity/pgstat_relation.c +++ b/src/backend/utils/activity/pgstat_relation.c @@ -744,7 +744,7 @@ PostPrepare_PgStat_Relations(PgStat_SubXactStatus *xact_state) * Load the saved counts into our local pgstats state. */ void -pgstat_twophase_postcommit(TransactionId xid, uint16 info, +pgstat_twophase_postcommit(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { TwoPhasePgStatRecord *rec = (TwoPhasePgStatRecord *) recdata; @@ -780,7 +780,7 @@ pgstat_twophase_postcommit(TransactionId xid, uint16 info, * as aborted. */ void -pgstat_twophase_postabort(TransactionId xid, uint16 info, +pgstat_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len) { TwoPhasePgStatRecord *rec = (TwoPhasePgStatRecord *) recdata; @@ -806,8 +806,8 @@ pgstat_twophase_postabort(TransactionId xid, uint16 info, /* * Flush out pending stats for the entry * - * If nowait is true, this function returns false if lock could not - * immediately acquired, otherwise true is returned. + * If nowait is true and the lock could not be immediately acquired, returns + * false without flushing the entry. Otherwise returns true. * * Some of the stats are copied to the corresponding pending database stats * entry when successfully flushing. @@ -868,7 +868,16 @@ pgstat_relation_flush_cb(PgStat_EntryRef *entry_ref, bool nowait) tabentry->live_tuples += lstats->counts.delta_live_tuples; tabentry->dead_tuples += lstats->counts.delta_dead_tuples; tabentry->mod_since_analyze += lstats->counts.changed_tuples; + + /* + * Using tuples_inserted to update ins_since_vacuum does mean that we'll + * track aborted inserts too. This isn't ideal, but otherwise probably + * not worth adding an extra field for. It may just amount to autovacuums + * triggering for inserts more often than they maybe should, which is + * probably not going to be common enough to be too concerned about here. + */ tabentry->ins_since_vacuum += lstats->counts.tuples_inserted; + tabentry->blocks_fetched += lstats->counts.blocks_fetched; tabentry->blocks_hit += lstats->counts.blocks_hit; diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c index 5cd243037551c..62de347445365 100644 --- a/src/backend/utils/activity/pgstat_shmem.c +++ b/src/backend/utils/activity/pgstat_shmem.c @@ -180,10 +180,9 @@ StatsShmemInit(void) * provides a small efficiency win. */ ctl->raw_dsa_area = p; - p += MAXALIGN(pgstat_dsa_init_size()); dsa = dsa_create_in_place(ctl->raw_dsa_area, pgstat_dsa_init_size(), - LWTRANCHE_PGSTATS_DSA, 0); + LWTRANCHE_PGSTATS_DSA, NULL); dsa_pin(dsa); /* @@ -255,7 +254,8 @@ pgstat_attach_shmem(void) dsa_pin_mapping(pgStatLocal.dsa); pgStatLocal.shared_hash = dshash_attach(pgStatLocal.dsa, &dsh_params, - pgStatLocal.shmem->hash_handle, 0); + pgStatLocal.shmem->hash_handle, + NULL); MemoryContextSwitchTo(oldcontext); } @@ -643,6 +643,13 @@ pgstat_release_entry_ref(PgStat_HashKey key, PgStat_EntryRef *entry_ref, pfree(entry_ref); } +/* + * Acquire exclusive lock on the entry. + * + * If nowait is true, it's just a conditional acquire, and the result + * *must* be checked to verify success. + * If nowait is false, waits as necessary, always returning true. + */ bool pgstat_lock_entry(PgStat_EntryRef *entry_ref, bool nowait) { @@ -656,8 +663,10 @@ pgstat_lock_entry(PgStat_EntryRef *entry_ref, bool nowait) } /* + * Acquire shared lock on the entry. + * * Separate from pgstat_lock_entry() as most callers will need to lock - * exclusively. + * exclusively. The wait semantics are identical. */ bool pgstat_lock_entry_shared(PgStat_EntryRef *entry_ref, bool nowait) @@ -864,11 +873,12 @@ pgstat_drop_entry_internal(PgStatShared_HashEntry *shent, */ if (shent->dropped) elog(ERROR, - "trying to drop stats entry already dropped: kind=%s dboid=%u objid=%" PRIu64 " refcount=%u", + "trying to drop stats entry already dropped: kind=%s dboid=%u objid=%" PRIu64 " refcount=%u generation=%u", pgstat_get_kind_info(shent->key.kind)->name, shent->key.dboid, shent->key.objid, - pg_atomic_read_u32(&shent->refcount)); + pg_atomic_read_u32(&shent->refcount), + pg_atomic_read_u32(&shent->generation)); shent->dropped = true; /* release refcount marking entry as not dropped */ diff --git a/src/backend/utils/activity/pgstat_slru.c b/src/backend/utils/activity/pgstat_slru.c index b9e940dde45b6..7bd8744accb0e 100644 --- a/src/backend/utils/activity/pgstat_slru.c +++ b/src/backend/utils/activity/pgstat_slru.c @@ -143,15 +143,6 @@ pgstat_get_slru_index(const char *name) return (SLRU_NUM_ELEMENTS - 1); } -/* - * Check if there are any SLRU stats entries waiting for flush. - */ -bool -pgstat_slru_have_pending_cb(void) -{ - return have_slrustats; -} - /* * Flush out locally pending SLRU stats entries * @@ -247,6 +238,7 @@ get_slru_entry(int slru_idx) Assert((slru_idx >= 0) && (slru_idx < SLRU_NUM_ELEMENTS)); have_slrustats = true; + pgstat_report_fixed = true; return &pending_SLRUStats[slru_idx]; } diff --git a/src/backend/utils/activity/pgstat_subscription.c b/src/backend/utils/activity/pgstat_subscription.c index 830d408c61a38..f9a1c831a07e6 100644 --- a/src/backend/utils/activity/pgstat_subscription.c +++ b/src/backend/utils/activity/pgstat_subscription.c @@ -96,8 +96,8 @@ pgstat_fetch_stat_subscription(Oid subid) /* * Flush out pending stats for the entry * - * If nowait is true, this function returns false if lock could not - * immediately acquired, otherwise true is returned. + * If nowait is true and the lock could not be immediately acquired, returns + * false without flushing the entry. Otherwise returns true. */ bool pgstat_subscription_flush_cb(PgStat_EntryRef *entry_ref, bool nowait) diff --git a/src/backend/utils/activity/pgstat_wal.c b/src/backend/utils/activity/pgstat_wal.c index 16a1ecb4d90d2..0d04480d2f6d0 100644 --- a/src/backend/utils/activity/pgstat_wal.c +++ b/src/backend/utils/activity/pgstat_wal.c @@ -71,6 +71,15 @@ pgstat_fetch_stat_wal(void) return &pgStatLocal.snapshot.wal; } +/* + * To determine whether WAL usage happened. + */ +static inline bool +pgstat_wal_have_pending(void) +{ + return pgWalUsage.wal_records != prevWalUsage.wal_records; +} + /* * Calculate how much WAL usage counters have increased by subtracting the * previous counters from the current ones. @@ -92,7 +101,7 @@ pgstat_wal_flush_cb(bool nowait) * This function can be called even if nothing at all has happened. Avoid * taking lock for nothing in that case. */ - if (!pgstat_wal_have_pending_cb()) + if (!pgstat_wal_have_pending()) return false; /* @@ -136,15 +145,6 @@ pgstat_wal_init_backend_cb(void) prevWalUsage = pgWalUsage; } -/* - * To determine whether WAL usage happened. - */ -bool -pgstat_wal_have_pending_cb(void) -{ - return pgWalUsage.wal_records != prevWalUsage.wal_records; -} - void pgstat_wal_init_shmem_cb(void *stats) { diff --git a/src/backend/utils/activity/wait_event_names.txt b/src/backend/utils/activity/wait_event_names.txt index 4f44648aca817..5427da5bc1b19 100644 --- a/src/backend/utils/activity/wait_event_names.txt +++ b/src/backend/utils/activity/wait_event_names.txt @@ -206,6 +206,7 @@ CONTROL_FILE_SYNC "Waiting for the pg_control file to reach CONTROL_FILE_SYNC_UPDATE "Waiting for an update to the pg_control file to reach durable storage." CONTROL_FILE_WRITE "Waiting for a write to the pg_control file." CONTROL_FILE_WRITE_UPDATE "Waiting for a write to update the pg_control file." +COPY_FILE_COPY "Waiting for a file copy operation." COPY_FILE_READ "Waiting for a read during a file copy operation." COPY_FILE_WRITE "Waiting for a write during a file copy operation." DATA_FILE_EXTEND "Waiting for a relation data file to be extended." @@ -355,9 +356,13 @@ AioWorkerSubmissionQueue "Waiting to access AIO worker submission queue." # # END OF PREDEFINED LWLOCKS (DO NOT CHANGE THIS LINE) # -# Predefined LWLocks (i.e., those declared in lwlocknames.h) must be listed -# in the section above and must be listed in the same order as in -# lwlocknames.h. Other LWLocks must be listed in the section below. +# Predefined LWLocks (i.e., those declared at the top of lwlocknames.h) must be +# listed in the section above and must be listed in the same order as in +# lwlocknames.h. +# +# Likewise, the built-in LWLock tranches (i.e., those declared at the bottom of +# lwlocknames.h) must be listed in the section below and must be listed in the +# same order as in lwlocknames.h. # XactBuffer "Waiting for I/O on a transaction status SLRU buffer." @@ -400,6 +405,7 @@ SerialSLRU "Waiting to access the serializable transaction conflict SLRU cache." SubtransSLRU "Waiting to access the sub-transaction SLRU cache." XactSLRU "Waiting to access the transaction status SLRU cache." ParallelVacuumDSA "Waiting for parallel vacuum dynamic shared memory allocation." +AioUringCompletion "Waiting for another process to complete IO via io_uring." # No "ABI_compatibility" region here as WaitEventLWLock has its own C code. diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile index 35e8c01aab94f..cc68ac545a5f0 100644 --- a/src/backend/utils/adt/Makefile +++ b/src/backend/utils/adt/Makefile @@ -23,6 +23,7 @@ OBJS = \ arrayutils.o \ ascii.o \ bool.o \ + bytea.o \ cash.o \ char.o \ cryptohashfuncs.o \ @@ -67,6 +68,7 @@ OBJS = \ misc.o \ multirangetypes.o \ multirangetypes_selfuncs.o \ + multixactfuncs.o \ name.o \ network.o \ network_gist.o \ @@ -99,6 +101,7 @@ OBJS = \ rowtypes.o \ ruleutils.o \ selfuncs.o \ + skipsupport.o \ tid.o \ timestamp.o \ trigfuncs.o \ diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index ba14713fef22f..7dadaefdfc1b8 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -31,7 +31,6 @@ #include "catalog/pg_proc.h" #include "catalog/pg_tablespace.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "commands/proclang.h" #include "commands/tablespace.h" #include "common/hashfn.h" @@ -127,13 +126,29 @@ static AclMode convert_tablespace_priv_string(text *priv_type_text); static Oid convert_type_name(text *typename); static AclMode convert_type_priv_string(text *priv_type_text); static AclMode convert_parameter_priv_string(text *priv_text); -static AclMode convert_largeobject_priv_string(text *priv_text); +static AclMode convert_largeobject_priv_string(text *priv_type_text); static AclMode convert_role_priv_string(text *priv_type_text); static AclResult pg_role_aclcheck(Oid role_oid, Oid roleid, AclMode mode); static void RoleMembershipCacheCallback(Datum arg, int cacheid, uint32 hashvalue); +/* + * Test whether an identifier char can be left unquoted in ACLs. + * + * Formerly, we used isalnum() even on non-ASCII characters, resulting in + * unportable behavior. To ensure dump compatibility with old versions, + * we now treat high-bit-set characters as always requiring quoting during + * putid(), but getid() will always accept them without quotes. + */ +static inline bool +is_safe_acl_char(unsigned char c, bool is_getid) +{ + if (IS_HIGHBIT_SET(c)) + return is_getid; + return isalnum(c) || c == '_'; +} + /* * getid * Consumes the first alphanumeric string (identifier) found in string @@ -159,21 +174,22 @@ getid(const char *s, char *n, Node *escontext) while (isspace((unsigned char) *s)) s++; - /* This code had better match what putid() does, below */ for (; *s != '\0' && - (isalnum((unsigned char) *s) || - *s == '_' || - *s == '"' || - in_quotes); + (in_quotes || *s == '"' || is_safe_acl_char(*s, true)); s++) { if (*s == '"') { + if (!in_quotes) + { + in_quotes = true; + continue; + } /* safe to look at next char (could be '\0' though) */ if (*(s + 1) != '"') { - in_quotes = !in_quotes; + in_quotes = false; continue; } /* it's an escaped double quote; skip the escaping char */ @@ -207,10 +223,10 @@ putid(char *p, const char *s) const char *src; bool safe = true; + /* Detect whether we need to use double quotes */ for (src = s; *src; src++) { - /* This test had better match what getid() does, above */ - if (!isalnum((unsigned char) *src) && *src != '_') + if (!is_safe_acl_char(*src, false)) { safe = false; break; diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index c8f53c6fbe788..c833e7df1fd9e 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -3406,7 +3406,7 @@ construct_array_builtin(Datum *elems, int nelems, Oid elmtype) case FLOAT8OID: elmlen = sizeof(float8); - elmbyval = FLOAT8PASSBYVAL; + elmbyval = true; elmalign = TYPALIGN_DOUBLE; break; @@ -3424,7 +3424,7 @@ construct_array_builtin(Datum *elems, int nelems, Oid elmtype) case INT8OID: elmlen = sizeof(int64); - elmbyval = FLOAT8PASSBYVAL; + elmbyval = true; elmalign = TYPALIGN_DOUBLE; break; @@ -3718,7 +3718,7 @@ deconstruct_array_builtin(ArrayType *array, case FLOAT8OID: elmlen = sizeof(float8); - elmbyval = FLOAT8PASSBYVAL; + elmbyval = true; elmalign = TYPALIGN_DOUBLE; break; diff --git a/src/backend/utils/adt/bytea.c b/src/backend/utils/adt/bytea.c new file mode 100644 index 0000000000000..6e7b914c56395 --- /dev/null +++ b/src/backend/utils/adt/bytea.c @@ -0,0 +1,1114 @@ +/*------------------------------------------------------------------------- + * + * bytea.c + * Functions for the bytea type. + * + * Portions Copyright (c) 2025, PostgreSQL Global Development Group + * + * + * IDENTIFICATION + * src/backend/utils/adt/bytea.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "access/detoast.h" +#include "catalog/pg_collation_d.h" +#include "catalog/pg_type_d.h" +#include "common/int.h" +#include "fmgr.h" +#include "libpq/pqformat.h" +#include "port/pg_bitutils.h" +#include "utils/builtins.h" +#include "utils/bytea.h" +#include "utils/fmgrprotos.h" +#include "utils/memutils.h" +#include "utils/sortsupport.h" +#include "utils/varlena.h" +#include "varatt.h" + +/* GUC variable */ +int bytea_output = BYTEA_OUTPUT_HEX; + +static bytea *bytea_catenate(bytea *t1, bytea *t2); +static bytea *bytea_substring(Datum str, int S, int L, + bool length_not_specified); +static bytea *bytea_overlay(bytea *t1, bytea *t2, int sp, int sl); + +/* + * bytea_catenate + * Guts of byteacat(), broken out so it can be used by other functions + * + * Arguments can be in short-header form, but not compressed or out-of-line + */ +static bytea * +bytea_catenate(bytea *t1, bytea *t2) +{ + bytea *result; + int len1, + len2, + len; + char *ptr; + + len1 = VARSIZE_ANY_EXHDR(t1); + len2 = VARSIZE_ANY_EXHDR(t2); + + /* paranoia ... probably should throw error instead? */ + if (len1 < 0) + len1 = 0; + if (len2 < 0) + len2 = 0; + + len = len1 + len2 + VARHDRSZ; + result = (bytea *) palloc(len); + + /* Set size of result string... */ + SET_VARSIZE(result, len); + + /* Fill data field of result string... */ + ptr = VARDATA(result); + if (len1 > 0) + memcpy(ptr, VARDATA_ANY(t1), len1); + if (len2 > 0) + memcpy(ptr + len1, VARDATA_ANY(t2), len2); + + return result; +} + +#define PG_STR_GET_BYTEA(str_) \ + DatumGetByteaPP(DirectFunctionCall1(byteain, CStringGetDatum(str_))) + +static bytea * +bytea_substring(Datum str, + int S, + int L, + bool length_not_specified) +{ + int32 S1; /* adjusted start position */ + int32 L1; /* adjusted substring length */ + int32 E; /* end position */ + + /* + * The logic here should generally match text_substring(). + */ + S1 = Max(S, 1); + + if (length_not_specified) + { + /* + * Not passed a length - DatumGetByteaPSlice() grabs everything to the + * end of the string if we pass it a negative value for length. + */ + L1 = -1; + } + else if (L < 0) + { + /* SQL99 says to throw an error for E < S, i.e., negative length */ + ereport(ERROR, + (errcode(ERRCODE_SUBSTRING_ERROR), + errmsg("negative substring length not allowed"))); + L1 = -1; /* silence stupider compilers */ + } + else if (pg_add_s32_overflow(S, L, &E)) + { + /* + * L could be large enough for S + L to overflow, in which case the + * substring must run to end of string. + */ + L1 = -1; + } + else + { + /* + * A zero or negative value for the end position can happen if the + * start was negative or one. SQL99 says to return a zero-length + * string. + */ + if (E < 1) + return PG_STR_GET_BYTEA(""); + + L1 = E - S1; + } + + /* + * If the start position is past the end of the string, SQL99 says to + * return a zero-length string -- DatumGetByteaPSlice() will do that for + * us. We need only convert S1 to zero-based starting position. + */ + return DatumGetByteaPSlice(str, S1 - 1, L1); +} + +static bytea * +bytea_overlay(bytea *t1, bytea *t2, int sp, int sl) +{ + bytea *result; + bytea *s1; + bytea *s2; + int sp_pl_sl; + + /* + * Check for possible integer-overflow cases. For negative sp, throw a + * "substring length" error because that's what should be expected + * according to the spec's definition of OVERLAY(). + */ + if (sp <= 0) + ereport(ERROR, + (errcode(ERRCODE_SUBSTRING_ERROR), + errmsg("negative substring length not allowed"))); + if (pg_add_s32_overflow(sp, sl, &sp_pl_sl)) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("integer out of range"))); + + s1 = bytea_substring(PointerGetDatum(t1), 1, sp - 1, false); + s2 = bytea_substring(PointerGetDatum(t1), sp_pl_sl, -1, true); + result = bytea_catenate(s1, t2); + result = bytea_catenate(result, s2); + + return result; +} + +/***************************************************************************** + * USER I/O ROUTINES * + *****************************************************************************/ + +#define VAL(CH) ((CH) - '0') +#define DIG(VAL) ((VAL) + '0') + +/* + * byteain - converts from printable representation of byte array + * + * Non-printable characters must be passed as '\nnn' (octal) and are + * converted to internal form. '\' must be passed as '\\'. + */ +Datum +byteain(PG_FUNCTION_ARGS) +{ + char *inputText = PG_GETARG_CSTRING(0); + Node *escontext = fcinfo->context; + size_t len = strlen(inputText); + size_t bc; + char *tp; + char *rp; + bytea *result; + + /* Recognize hex input */ + if (inputText[0] == '\\' && inputText[1] == 'x') + { + bc = (len - 2) / 2 + VARHDRSZ; /* maximum possible length */ + result = palloc(bc); + bc = hex_decode_safe(inputText + 2, len - 2, VARDATA(result), + escontext); + SET_VARSIZE(result, bc + VARHDRSZ); /* actual length */ + + PG_RETURN_BYTEA_P(result); + } + + /* Else, it's the traditional escaped style */ + result = (bytea *) palloc(len + VARHDRSZ); /* maximum possible length */ + + tp = inputText; + rp = VARDATA(result); + while (*tp != '\0') + { + if (tp[0] != '\\') + *rp++ = *tp++; + else if ((tp[1] >= '0' && tp[1] <= '3') && + (tp[2] >= '0' && tp[2] <= '7') && + (tp[3] >= '0' && tp[3] <= '7')) + { + int v; + + v = VAL(tp[1]); + v <<= 3; + v += VAL(tp[2]); + v <<= 3; + *rp++ = v + VAL(tp[3]); + + tp += 4; + } + else if (tp[1] == '\\') + { + *rp++ = '\\'; + tp += 2; + } + else + { + /* + * one backslash, not followed by another or ### valid octal + */ + ereturn(escontext, (Datum) 0, + (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + errmsg("invalid input syntax for type %s", "bytea"))); + } + } + + bc = rp - VARDATA(result); /* actual length */ + SET_VARSIZE(result, bc + VARHDRSZ); + + PG_RETURN_BYTEA_P(result); +} + +/* + * byteaout - converts to printable representation of byte array + * + * In the traditional escaped format, non-printable characters are + * printed as '\nnn' (octal) and '\' as '\\'. + */ +Datum +byteaout(PG_FUNCTION_ARGS) +{ + bytea *vlena = PG_GETARG_BYTEA_PP(0); + char *result; + char *rp; + + if (bytea_output == BYTEA_OUTPUT_HEX) + { + /* Print hex format */ + rp = result = palloc(VARSIZE_ANY_EXHDR(vlena) * 2 + 2 + 1); + *rp++ = '\\'; + *rp++ = 'x'; + rp += hex_encode(VARDATA_ANY(vlena), VARSIZE_ANY_EXHDR(vlena), rp); + } + else if (bytea_output == BYTEA_OUTPUT_ESCAPE) + { + /* Print traditional escaped format */ + char *vp; + uint64 len; + int i; + + len = 1; /* empty string has 1 char */ + vp = VARDATA_ANY(vlena); + for (i = VARSIZE_ANY_EXHDR(vlena); i != 0; i--, vp++) + { + if (*vp == '\\') + len += 2; + else if ((unsigned char) *vp < 0x20 || (unsigned char) *vp > 0x7e) + len += 4; + else + len++; + } + + /* + * In principle len can't overflow uint32 if the input fit in 1GB, but + * for safety let's check rather than relying on palloc's internal + * check. + */ + if (len > MaxAllocSize) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg_internal("result of bytea output conversion is too large"))); + rp = result = (char *) palloc(len); + + vp = VARDATA_ANY(vlena); + for (i = VARSIZE_ANY_EXHDR(vlena); i != 0; i--, vp++) + { + if (*vp == '\\') + { + *rp++ = '\\'; + *rp++ = '\\'; + } + else if ((unsigned char) *vp < 0x20 || (unsigned char) *vp > 0x7e) + { + int val; /* holds unprintable chars */ + + val = *vp; + rp[0] = '\\'; + rp[3] = DIG(val & 07); + val >>= 3; + rp[2] = DIG(val & 07); + val >>= 3; + rp[1] = DIG(val & 03); + rp += 4; + } + else + *rp++ = *vp; + } + } + else + { + elog(ERROR, "unrecognized \"bytea_output\" setting: %d", + bytea_output); + rp = result = NULL; /* keep compiler quiet */ + } + *rp = '\0'; + PG_RETURN_CSTRING(result); +} + +/* + * bytearecv - converts external binary format to bytea + */ +Datum +bytearecv(PG_FUNCTION_ARGS) +{ + StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); + bytea *result; + int nbytes; + + nbytes = buf->len - buf->cursor; + result = (bytea *) palloc(nbytes + VARHDRSZ); + SET_VARSIZE(result, nbytes + VARHDRSZ); + pq_copymsgbytes(buf, VARDATA(result), nbytes); + PG_RETURN_BYTEA_P(result); +} + +/* + * byteasend - converts bytea to binary format + * + * This is a special case: just copy the input... + */ +Datum +byteasend(PG_FUNCTION_ARGS) +{ + bytea *vlena = PG_GETARG_BYTEA_P_COPY(0); + + PG_RETURN_BYTEA_P(vlena); +} + +Datum +bytea_string_agg_transfn(PG_FUNCTION_ARGS) +{ + StringInfo state; + + state = PG_ARGISNULL(0) ? NULL : (StringInfo) PG_GETARG_POINTER(0); + + /* Append the value unless null, preceding it with the delimiter. */ + if (!PG_ARGISNULL(1)) + { + bytea *value = PG_GETARG_BYTEA_PP(1); + bool isfirst = false; + + /* + * You might think we can just throw away the first delimiter, however + * we must keep it as we may be a parallel worker doing partial + * aggregation building a state to send to the main process. We need + * to keep the delimiter of every aggregation so that the combine + * function can properly join up the strings of two separately + * partially aggregated results. The first delimiter is only stripped + * off in the final function. To know how much to strip off the front + * of the string, we store the length of the first delimiter in the + * StringInfo's cursor field, which we don't otherwise need here. + */ + if (state == NULL) + { + MemoryContext aggcontext; + MemoryContext oldcontext; + + if (!AggCheckCallContext(fcinfo, &aggcontext)) + { + /* cannot be called directly because of internal-type argument */ + elog(ERROR, "bytea_string_agg_transfn called in non-aggregate context"); + } + + /* + * Create state in aggregate context. It'll stay there across + * subsequent calls. + */ + oldcontext = MemoryContextSwitchTo(aggcontext); + state = makeStringInfo(); + MemoryContextSwitchTo(oldcontext); + + isfirst = true; + } + + if (!PG_ARGISNULL(2)) + { + bytea *delim = PG_GETARG_BYTEA_PP(2); + + appendBinaryStringInfo(state, VARDATA_ANY(delim), + VARSIZE_ANY_EXHDR(delim)); + if (isfirst) + state->cursor = VARSIZE_ANY_EXHDR(delim); + } + + appendBinaryStringInfo(state, VARDATA_ANY(value), + VARSIZE_ANY_EXHDR(value)); + } + + /* + * The transition type for string_agg() is declared to be "internal", + * which is a pass-by-value type the same size as a pointer. + */ + if (state) + PG_RETURN_POINTER(state); + PG_RETURN_NULL(); +} + +Datum +bytea_string_agg_finalfn(PG_FUNCTION_ARGS) +{ + StringInfo state; + + /* cannot be called directly because of internal-type argument */ + Assert(AggCheckCallContext(fcinfo, NULL)); + + state = PG_ARGISNULL(0) ? NULL : (StringInfo) PG_GETARG_POINTER(0); + + if (state != NULL) + { + /* As per comment in transfn, strip data before the cursor position */ + bytea *result; + int strippedlen = state->len - state->cursor; + + result = (bytea *) palloc(strippedlen + VARHDRSZ); + SET_VARSIZE(result, strippedlen + VARHDRSZ); + memcpy(VARDATA(result), &state->data[state->cursor], strippedlen); + PG_RETURN_BYTEA_P(result); + } + else + PG_RETURN_NULL(); +} + +/*------------------------------------------------------------- + * byteaoctetlen + * + * get the number of bytes contained in an instance of type 'bytea' + *------------------------------------------------------------- + */ +Datum +byteaoctetlen(PG_FUNCTION_ARGS) +{ + Datum str = PG_GETARG_DATUM(0); + + /* We need not detoast the input at all */ + PG_RETURN_INT32(toast_raw_datum_size(str) - VARHDRSZ); +} + +/* + * byteacat - + * takes two bytea* and returns a bytea* that is the concatenation of + * the two. + * + * Cloned from textcat and modified as required. + */ +Datum +byteacat(PG_FUNCTION_ARGS) +{ + bytea *t1 = PG_GETARG_BYTEA_PP(0); + bytea *t2 = PG_GETARG_BYTEA_PP(1); + + PG_RETURN_BYTEA_P(bytea_catenate(t1, t2)); +} + +/* + * byteaoverlay + * Replace specified substring of first string with second + * + * The SQL standard defines OVERLAY() in terms of substring and concatenation. + * This code is a direct implementation of what the standard says. + */ +Datum +byteaoverlay(PG_FUNCTION_ARGS) +{ + bytea *t1 = PG_GETARG_BYTEA_PP(0); + bytea *t2 = PG_GETARG_BYTEA_PP(1); + int sp = PG_GETARG_INT32(2); /* substring start position */ + int sl = PG_GETARG_INT32(3); /* substring length */ + + PG_RETURN_BYTEA_P(bytea_overlay(t1, t2, sp, sl)); +} + +Datum +byteaoverlay_no_len(PG_FUNCTION_ARGS) +{ + bytea *t1 = PG_GETARG_BYTEA_PP(0); + bytea *t2 = PG_GETARG_BYTEA_PP(1); + int sp = PG_GETARG_INT32(2); /* substring start position */ + int sl; + + sl = VARSIZE_ANY_EXHDR(t2); /* defaults to length(t2) */ + PG_RETURN_BYTEA_P(bytea_overlay(t1, t2, sp, sl)); +} + +/* + * bytea_substr() + * Return a substring starting at the specified position. + * Cloned from text_substr and modified as required. + * + * Input: + * - string + * - starting position (is one-based) + * - string length (optional) + * + * If the starting position is zero or less, then return from the start of the string + * adjusting the length to be consistent with the "negative start" per SQL. + * If the length is less than zero, an ERROR is thrown. If no third argument + * (length) is provided, the length to the end of the string is assumed. + */ +Datum +bytea_substr(PG_FUNCTION_ARGS) +{ + PG_RETURN_BYTEA_P(bytea_substring(PG_GETARG_DATUM(0), + PG_GETARG_INT32(1), + PG_GETARG_INT32(2), + false)); +} + +/* + * bytea_substr_no_len - + * Wrapper to avoid opr_sanity failure due to + * one function accepting a different number of args. + */ +Datum +bytea_substr_no_len(PG_FUNCTION_ARGS) +{ + PG_RETURN_BYTEA_P(bytea_substring(PG_GETARG_DATUM(0), + PG_GETARG_INT32(1), + -1, + true)); +} + +/* + * bit_count + */ +Datum +bytea_bit_count(PG_FUNCTION_ARGS) +{ + bytea *t1 = PG_GETARG_BYTEA_PP(0); + + PG_RETURN_INT64(pg_popcount(VARDATA_ANY(t1), VARSIZE_ANY_EXHDR(t1))); +} + +/* + * byteapos - + * Return the position of the specified substring. + * Implements the SQL POSITION() function. + * Cloned from textpos and modified as required. + */ +Datum +byteapos(PG_FUNCTION_ARGS) +{ + bytea *t1 = PG_GETARG_BYTEA_PP(0); + bytea *t2 = PG_GETARG_BYTEA_PP(1); + int pos; + int px, + p; + int len1, + len2; + char *p1, + *p2; + + len1 = VARSIZE_ANY_EXHDR(t1); + len2 = VARSIZE_ANY_EXHDR(t2); + + if (len2 <= 0) + PG_RETURN_INT32(1); /* result for empty pattern */ + + p1 = VARDATA_ANY(t1); + p2 = VARDATA_ANY(t2); + + pos = 0; + px = (len1 - len2); + for (p = 0; p <= px; p++) + { + if ((*p2 == *p1) && (memcmp(p1, p2, len2) == 0)) + { + pos = p + 1; + break; + }; + p1++; + }; + + PG_RETURN_INT32(pos); +} + +/*------------------------------------------------------------- + * byteaGetByte + * + * this routine treats "bytea" as an array of bytes. + * It returns the Nth byte (a number between 0 and 255). + *------------------------------------------------------------- + */ +Datum +byteaGetByte(PG_FUNCTION_ARGS) +{ + bytea *v = PG_GETARG_BYTEA_PP(0); + int32 n = PG_GETARG_INT32(1); + int len; + int byte; + + len = VARSIZE_ANY_EXHDR(v); + + if (n < 0 || n >= len) + ereport(ERROR, + (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), + errmsg("index %d out of valid range, 0..%d", + n, len - 1))); + + byte = ((unsigned char *) VARDATA_ANY(v))[n]; + + PG_RETURN_INT32(byte); +} + +/*------------------------------------------------------------- + * byteaGetBit + * + * This routine treats a "bytea" type like an array of bits. + * It returns the value of the Nth bit (0 or 1). + * + *------------------------------------------------------------- + */ +Datum +byteaGetBit(PG_FUNCTION_ARGS) +{ + bytea *v = PG_GETARG_BYTEA_PP(0); + int64 n = PG_GETARG_INT64(1); + int byteNo, + bitNo; + int len; + int byte; + + len = VARSIZE_ANY_EXHDR(v); + + if (n < 0 || n >= (int64) len * 8) + ereport(ERROR, + (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), + errmsg("index %" PRId64 " out of valid range, 0..%" PRId64, + n, (int64) len * 8 - 1))); + + /* n/8 is now known < len, so safe to cast to int */ + byteNo = (int) (n / 8); + bitNo = (int) (n % 8); + + byte = ((unsigned char *) VARDATA_ANY(v))[byteNo]; + + if (byte & (1 << bitNo)) + PG_RETURN_INT32(1); + else + PG_RETURN_INT32(0); +} + +/*------------------------------------------------------------- + * byteaSetByte + * + * Given an instance of type 'bytea' creates a new one with + * the Nth byte set to the given value. + * + *------------------------------------------------------------- + */ +Datum +byteaSetByte(PG_FUNCTION_ARGS) +{ + bytea *res = PG_GETARG_BYTEA_P_COPY(0); + int32 n = PG_GETARG_INT32(1); + int32 newByte = PG_GETARG_INT32(2); + int len; + + len = VARSIZE(res) - VARHDRSZ; + + if (n < 0 || n >= len) + ereport(ERROR, + (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), + errmsg("index %d out of valid range, 0..%d", + n, len - 1))); + + /* + * Now set the byte. + */ + ((unsigned char *) VARDATA(res))[n] = newByte; + + PG_RETURN_BYTEA_P(res); +} + +/*------------------------------------------------------------- + * byteaSetBit + * + * Given an instance of type 'bytea' creates a new one with + * the Nth bit set to the given value. + * + *------------------------------------------------------------- + */ +Datum +byteaSetBit(PG_FUNCTION_ARGS) +{ + bytea *res = PG_GETARG_BYTEA_P_COPY(0); + int64 n = PG_GETARG_INT64(1); + int32 newBit = PG_GETARG_INT32(2); + int len; + int oldByte, + newByte; + int byteNo, + bitNo; + + len = VARSIZE(res) - VARHDRSZ; + + if (n < 0 || n >= (int64) len * 8) + ereport(ERROR, + (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), + errmsg("index %" PRId64 " out of valid range, 0..%" PRId64, + n, (int64) len * 8 - 1))); + + /* n/8 is now known < len, so safe to cast to int */ + byteNo = (int) (n / 8); + bitNo = (int) (n % 8); + + /* + * sanity check! + */ + if (newBit != 0 && newBit != 1) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("new bit must be 0 or 1"))); + + /* + * Update the byte. + */ + oldByte = ((unsigned char *) VARDATA(res))[byteNo]; + + if (newBit == 0) + newByte = oldByte & (~(1 << bitNo)); + else + newByte = oldByte | (1 << bitNo); + + ((unsigned char *) VARDATA(res))[byteNo] = newByte; + + PG_RETURN_BYTEA_P(res); +} + +/* + * Return reversed bytea + */ +Datum +bytea_reverse(PG_FUNCTION_ARGS) +{ + bytea *v = PG_GETARG_BYTEA_PP(0); + const char *p = VARDATA_ANY(v); + int len = VARSIZE_ANY_EXHDR(v); + const char *endp = p + len; + bytea *result = palloc(len + VARHDRSZ); + char *dst = (char *) VARDATA(result) + len; + + SET_VARSIZE(result, len + VARHDRSZ); + + while (p < endp) + *(--dst) = *p++; + + PG_RETURN_BYTEA_P(result); +} + + +/***************************************************************************** + * Comparison Functions used for bytea + * + * Note: btree indexes need these routines not to leak memory; therefore, + * be careful to free working copies of toasted datums. Most places don't + * need to be so careful. + *****************************************************************************/ + +Datum +byteaeq(PG_FUNCTION_ARGS) +{ + Datum arg1 = PG_GETARG_DATUM(0); + Datum arg2 = PG_GETARG_DATUM(1); + bool result; + Size len1, + len2; + + /* + * We can use a fast path for unequal lengths, which might save us from + * having to detoast one or both values. + */ + len1 = toast_raw_datum_size(arg1); + len2 = toast_raw_datum_size(arg2); + if (len1 != len2) + result = false; + else + { + bytea *barg1 = DatumGetByteaPP(arg1); + bytea *barg2 = DatumGetByteaPP(arg2); + + result = (memcmp(VARDATA_ANY(barg1), VARDATA_ANY(barg2), + len1 - VARHDRSZ) == 0); + + PG_FREE_IF_COPY(barg1, 0); + PG_FREE_IF_COPY(barg2, 1); + } + + PG_RETURN_BOOL(result); +} + +Datum +byteane(PG_FUNCTION_ARGS) +{ + Datum arg1 = PG_GETARG_DATUM(0); + Datum arg2 = PG_GETARG_DATUM(1); + bool result; + Size len1, + len2; + + /* + * We can use a fast path for unequal lengths, which might save us from + * having to detoast one or both values. + */ + len1 = toast_raw_datum_size(arg1); + len2 = toast_raw_datum_size(arg2); + if (len1 != len2) + result = true; + else + { + bytea *barg1 = DatumGetByteaPP(arg1); + bytea *barg2 = DatumGetByteaPP(arg2); + + result = (memcmp(VARDATA_ANY(barg1), VARDATA_ANY(barg2), + len1 - VARHDRSZ) != 0); + + PG_FREE_IF_COPY(barg1, 0); + PG_FREE_IF_COPY(barg2, 1); + } + + PG_RETURN_BOOL(result); +} + +Datum +bytealt(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + + PG_FREE_IF_COPY(arg1, 0); + PG_FREE_IF_COPY(arg2, 1); + + PG_RETURN_BOOL((cmp < 0) || ((cmp == 0) && (len1 < len2))); +} + +Datum +byteale(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + + PG_FREE_IF_COPY(arg1, 0); + PG_FREE_IF_COPY(arg2, 1); + + PG_RETURN_BOOL((cmp < 0) || ((cmp == 0) && (len1 <= len2))); +} + +Datum +byteagt(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + + PG_FREE_IF_COPY(arg1, 0); + PG_FREE_IF_COPY(arg2, 1); + + PG_RETURN_BOOL((cmp > 0) || ((cmp == 0) && (len1 > len2))); +} + +Datum +byteage(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + + PG_FREE_IF_COPY(arg1, 0); + PG_FREE_IF_COPY(arg2, 1); + + PG_RETURN_BOOL((cmp > 0) || ((cmp == 0) && (len1 >= len2))); +} + +Datum +byteacmp(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + if ((cmp == 0) && (len1 != len2)) + cmp = (len1 < len2) ? -1 : 1; + + PG_FREE_IF_COPY(arg1, 0); + PG_FREE_IF_COPY(arg2, 1); + + PG_RETURN_INT32(cmp); +} + +Datum +bytea_larger(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + bytea *result; + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + result = ((cmp > 0) || ((cmp == 0) && (len1 > len2)) ? arg1 : arg2); + + PG_RETURN_BYTEA_P(result); +} + +Datum +bytea_smaller(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + bytea *result; + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + result = ((cmp < 0) || ((cmp == 0) && (len1 < len2)) ? arg1 : arg2); + + PG_RETURN_BYTEA_P(result); +} + +Datum +bytea_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + MemoryContext oldcontext; + + oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt); + + /* Use generic string SortSupport, forcing "C" collation */ + varstr_sortsupport(ssup, BYTEAOID, C_COLLATION_OID); + + MemoryContextSwitchTo(oldcontext); + + PG_RETURN_VOID(); +} + +/* Cast bytea -> int2 */ +Datum +bytea_int2(PG_FUNCTION_ARGS) +{ + bytea *v = PG_GETARG_BYTEA_PP(0); + int len = VARSIZE_ANY_EXHDR(v); + uint16 result; + + /* Check that the byte array is not too long */ + if (len > sizeof(result)) + ereport(ERROR, + errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("smallint out of range")); + + /* Convert it to an integer; most significant bytes come first */ + result = 0; + for (int i = 0; i < len; i++) + { + result <<= BITS_PER_BYTE; + result |= ((unsigned char *) VARDATA_ANY(v))[i]; + } + + PG_RETURN_INT16(result); +} + +/* Cast bytea -> int4 */ +Datum +bytea_int4(PG_FUNCTION_ARGS) +{ + bytea *v = PG_GETARG_BYTEA_PP(0); + int len = VARSIZE_ANY_EXHDR(v); + uint32 result; + + /* Check that the byte array is not too long */ + if (len > sizeof(result)) + ereport(ERROR, + errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("integer out of range")); + + /* Convert it to an integer; most significant bytes come first */ + result = 0; + for (int i = 0; i < len; i++) + { + result <<= BITS_PER_BYTE; + result |= ((unsigned char *) VARDATA_ANY(v))[i]; + } + + PG_RETURN_INT32(result); +} + +/* Cast bytea -> int8 */ +Datum +bytea_int8(PG_FUNCTION_ARGS) +{ + bytea *v = PG_GETARG_BYTEA_PP(0); + int len = VARSIZE_ANY_EXHDR(v); + uint64 result; + + /* Check that the byte array is not too long */ + if (len > sizeof(result)) + ereport(ERROR, + errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("bigint out of range")); + + /* Convert it to an integer; most significant bytes come first */ + result = 0; + for (int i = 0; i < len; i++) + { + result <<= BITS_PER_BYTE; + result |= ((unsigned char *) VARDATA_ANY(v))[i]; + } + + PG_RETURN_INT64(result); +} + +/* Cast int2 -> bytea; can just use int2send() */ +Datum +int2_bytea(PG_FUNCTION_ARGS) +{ + return int2send(fcinfo); +} + +/* Cast int4 -> bytea; can just use int4send() */ +Datum +int4_bytea(PG_FUNCTION_ARGS) +{ + return int4send(fcinfo); +} + +/* Cast int8 -> bytea; can just use int8send() */ +Datum +int8_bytea(PG_FUNCTION_ARGS) +{ + return int8send(fcinfo); +} diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index f279853deb807..344f58b92f7a2 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -34,6 +34,7 @@ #include "utils/date.h" #include "utils/datetime.h" #include "utils/numeric.h" +#include "utils/skipsupport.h" #include "utils/sortsupport.h" /* @@ -462,6 +463,51 @@ date_sortsupport(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } +static Datum +date_decrement(Relation rel, Datum existing, bool *underflow) +{ + DateADT dexisting = DatumGetDateADT(existing); + + if (dexisting == DATEVAL_NOBEGIN) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return DateADTGetDatum(dexisting - 1); +} + +static Datum +date_increment(Relation rel, Datum existing, bool *overflow) +{ + DateADT dexisting = DatumGetDateADT(existing); + + if (dexisting == DATEVAL_NOEND) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return DateADTGetDatum(dexisting + 1); +} + +Datum +date_skipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + + sksup->decrement = date_decrement; + sksup->increment = date_increment; + sksup->low_elem = DateADTGetDatum(DATEVAL_NOBEGIN); + sksup->high_elem = DateADTGetDatum(DATEVAL_NOEND); + + PG_RETURN_VOID(); +} + Datum hashdate(PG_FUNCTION_ARGS) { @@ -1317,10 +1363,35 @@ timestamp_date(PG_FUNCTION_ARGS) { Timestamp timestamp = PG_GETARG_TIMESTAMP(0); DateADT result; + + result = timestamp2date_opt_overflow(timestamp, NULL); + PG_RETURN_DATEADT(result); +} + +/* + * Convert timestamp to date. + * + * On successful conversion, *overflow is set to zero if it's not NULL. + * + * If the timestamp is finite but out of the valid range for date, then: + * if overflow is NULL, we throw an out-of-range error. + * if overflow is not NULL, we store +1 or -1 there to indicate the sign + * of the overflow, and return the appropriate date infinity. + * + * Note: given the ranges of the types, overflow is only possible at + * the minimum end of the range, but we don't assume that in this code. + */ +DateADT +timestamp2date_opt_overflow(Timestamp timestamp, int *overflow) +{ + DateADT result; struct pg_tm tt, *tm = &tt; fsec_t fsec; + if (overflow) + *overflow = 0; + if (TIMESTAMP_IS_NOBEGIN(timestamp)) DATE_NOBEGIN(result); else if (TIMESTAMP_IS_NOEND(timestamp)) @@ -1328,14 +1399,30 @@ timestamp_date(PG_FUNCTION_ARGS) else { if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0) + { + if (overflow) + { + if (timestamp < 0) + { + *overflow = -1; + DATE_NOBEGIN(result); + } + else + { + *overflow = 1; /* not actually reachable */ + DATE_NOEND(result); + } + return result; + } ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + } result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE; } - PG_RETURN_DATEADT(result); + return result; } @@ -1362,11 +1449,36 @@ timestamptz_date(PG_FUNCTION_ARGS) { TimestampTz timestamp = PG_GETARG_TIMESTAMP(0); DateADT result; + + result = timestamptz2date_opt_overflow(timestamp, NULL); + PG_RETURN_DATEADT(result); +} + +/* + * Convert timestamptz to date. + * + * On successful conversion, *overflow is set to zero if it's not NULL. + * + * If the timestamptz is finite but out of the valid range for date, then: + * if overflow is NULL, we throw an out-of-range error. + * if overflow is not NULL, we store +1 or -1 there to indicate the sign + * of the overflow, and return the appropriate date infinity. + * + * Note: given the ranges of the types, overflow is only possible at + * the minimum end of the range, but we don't assume that in this code. + */ +DateADT +timestamptz2date_opt_overflow(TimestampTz timestamp, int *overflow) +{ + DateADT result; struct pg_tm tt, *tm = &tt; fsec_t fsec; int tz; + if (overflow) + *overflow = 0; + if (TIMESTAMP_IS_NOBEGIN(timestamp)) DATE_NOBEGIN(result); else if (TIMESTAMP_IS_NOEND(timestamp)) @@ -1374,14 +1486,30 @@ timestamptz_date(PG_FUNCTION_ARGS) else { if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0) + { + if (overflow) + { + if (timestamp < 0) + { + *overflow = -1; + DATE_NOBEGIN(result); + } + else + { + *overflow = 1; /* not actually reachable */ + DATE_NOEND(result); + } + return result; + } ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + } result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE; } - PG_RETURN_DATEADT(result); + return result; } diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 793d8a9adccdc..680fee2a8447e 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -702,9 +702,18 @@ ParseFraction(char *cp, double *frac) } else { + /* + * On the other hand, let's reject anything that's not digits after + * the ".". strtod is happy with input like ".123e9", but that'd + * break callers' expectation that the result is in 0..1. (It's quite + * difficult to get here with such input, but not impossible.) + */ + if (strspn(cp + 1, "0123456789") != strlen(cp + 1)) + return DTERR_BAD_FORMAT; + errno = 0; *frac = strtod(cp, &cp); - /* check for parse failure */ + /* check for parse failure (probably redundant given prior check) */ if (*cp != '\0' || errno != 0) return DTERR_BAD_FORMAT; } @@ -2958,31 +2967,28 @@ DecodeNumberField(int len, char *str, int fmask, { char *cp; + /* + * This function was originally meant to cope only with DTK_NUMBER fields, + * but we now sometimes abuse it to parse (parts of) DTK_DATE fields, + * which can contain letters and other punctuation. Reject if it's not a + * valid DTK_NUMBER, that is digits and decimal point(s). (ParseFraction + * will reject if there's more than one decimal point.) + */ + if (strspn(str, "0123456789.") != len) + return DTERR_BAD_FORMAT; + /* * Have a decimal point? Then this is a date or something with a seconds * field... */ if ((cp = strchr(str, '.')) != NULL) { - /* - * Can we use ParseFractionalSecond here? Not clear whether trailing - * junk should be rejected ... - */ - if (cp[1] == '\0') - { - /* avoid assuming that strtod will accept "." */ - *fsec = 0; - } - else - { - double frac; + int dterr; - errno = 0; - frac = strtod(cp, NULL); - if (errno != 0) - return DTERR_BAD_FORMAT; - *fsec = rint(frac * 1000000); - } + /* Convert the fraction and store at *fsec */ + dterr = ParseFractionalSecond(cp, fsec); + if (dterr) + return dterr; /* Now truncate off the fraction for further processing */ *cp = '\0'; len = strlen(str); diff --git a/src/backend/utils/adt/datum.c b/src/backend/utils/adt/datum.c index fcd5b1653dd3e..614644a4e2a06 100644 --- a/src/backend/utils/adt/datum.c +++ b/src/backend/utils/adt/datum.c @@ -299,9 +299,9 @@ datum_image_eq(Datum value1, Datum value2, bool typByVal, int typLen) len1 - VARHDRSZ) == 0); /* Only free memory if it's a copy made here. */ - if ((Pointer) arg1val != (Pointer) value1) + if ((Pointer) arg1val != DatumGetPointer(value1)) pfree(arg1val); - if ((Pointer) arg2val != (Pointer) value2) + if ((Pointer) arg2val != DatumGetPointer(value2)) pfree(arg2val); } } @@ -355,7 +355,7 @@ datum_image_hash(Datum value, bool typByVal, int typLen) result = hash_bytes((unsigned char *) VARDATA_ANY(val), len - VARHDRSZ); /* Only free memory if it's a copy made here. */ - if ((Pointer) val != (Pointer) value) + if ((Pointer) val != DatumGetPointer(value)) pfree(val); } else if (typLen == -2) diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 25865b660ef83..894d226541f23 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -19,12 +19,12 @@ #include "catalog/pg_authid.h" #include "catalog/pg_database.h" #include "catalog/pg_tablespace.h" -#include "commands/dbcommands.h" #include "commands/tablespace.h" #include "miscadmin.h" #include "storage/fd.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/lsyscache.h" #include "utils/numeric.h" #include "utils/rel.h" #include "utils/relfilenumbermap.h" @@ -938,6 +938,9 @@ pg_relation_filenode(PG_FUNCTION_ARGS) * * We don't fail but return NULL if we cannot find a mapping. * + * Temporary relations are not detected, returning NULL (see + * RelidByRelfilenumber() for the reasons). + * * InvalidOid can be passed instead of the current database's default * tablespace. */ diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 6d20ae07ae7b0..7b97d2be6caed 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -4065,10 +4065,11 @@ float84ge(PG_FUNCTION_ARGS) * in the histogram. width_bucket() returns an integer indicating the * bucket number that 'operand' belongs to in an equiwidth histogram * with the specified characteristics. An operand smaller than the - * lower bound is assigned to bucket 0. An operand greater than the - * upper bound is assigned to an additional bucket (with number - * count+1). We don't allow "NaN" for any of the float8 inputs, and we - * don't allow either of the histogram bounds to be +/- infinity. + * lower bound is assigned to bucket 0. An operand greater than or equal + * to the upper bound is assigned to an additional bucket (with number + * count+1). We don't allow the histogram bounds to be NaN or +/- infinity, + * but we do allow those values for the operand (taking NaN to be larger + * than any other value, as we do in comparisons). */ Datum width_bucket_float8(PG_FUNCTION_ARGS) @@ -4084,12 +4085,11 @@ width_bucket_float8(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION), errmsg("count must be greater than zero"))); - if (isnan(operand) || isnan(bound1) || isnan(bound2)) + if (isnan(bound1) || isnan(bound2)) ereport(ERROR, (errcode(ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION), - errmsg("operand, lower bound, and upper bound cannot be NaN"))); + errmsg("lower and upper bounds cannot be NaN"))); - /* Note that we allow "operand" to be infinite */ if (isinf(bound1) || isinf(bound2)) ereport(ERROR, (errcode(ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION), @@ -4097,15 +4097,15 @@ width_bucket_float8(PG_FUNCTION_ARGS) if (bound1 < bound2) { - if (operand < bound1) - result = 0; - else if (operand >= bound2) + if (isnan(operand) || operand >= bound2) { if (pg_add_s32_overflow(count, 1, &result)) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("integer out of range"))); } + else if (operand < bound1) + result = 0; else { if (!isinf(bound2 - bound1)) @@ -4135,7 +4135,7 @@ width_bucket_float8(PG_FUNCTION_ARGS) } else if (bound1 > bound2) { - if (operand > bound1) + if (isnan(operand) || operand > bound1) result = 0; else if (operand <= bound2) { diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 5bd1e01f7e463..7ad453314c307 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1565,6 +1565,8 @@ get_th(char *num, int type) int len = strlen(num), last; + Assert(len > 0); + last = *(num + (len - 1)); if (!isdigit((unsigned char) last)) ereport(ERROR, @@ -3590,14 +3592,15 @@ DCH_from_char(FormatNode *node, const char *in, TmFromChar *out, if (matched < 2) ereturn(escontext,, (errcode(ERRCODE_INVALID_DATETIME_FORMAT), - errmsg("invalid input string for \"Y,YYY\""))); + errmsg("invalid value \"%s\" for \"%s\"", + s, "Y,YYY"))); /* years += (millennia * 1000); */ if (pg_mul_s32_overflow(millennia, 1000, &millennia) || pg_add_s32_overflow(years, millennia, &years)) ereturn(escontext,, (errcode(ERRCODE_DATETIME_FIELD_OVERFLOW), - errmsg("value for \"Y,YYY\" in source string is out of range"))); + errmsg("value for \"%s\" in source string is out of range", "Y,YYY"))); if (!from_char_set_int(&out->year, years, n, escontext)) return; diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c index ef2236d9f0430..3b0db2a379937 100644 --- a/src/backend/utils/adt/inet_net_pton.c +++ b/src/backend/utils/adt/inet_net_pton.c @@ -115,8 +115,7 @@ inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size) src++; /* skip x or X. */ while ((ch = *src++) != '\0' && isxdigit((unsigned char) ch)) { - if (isupper((unsigned char) ch)) - ch = tolower((unsigned char) ch); + ch = pg_ascii_tolower((unsigned char) ch); n = strchr(xdigits, ch) - xdigits; assert(n >= 0 && n <= 15); if (dirty == 0) diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index 9dd5889f34c62..bdea490202a64 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -718,76 +718,29 @@ int8lcm(PG_FUNCTION_ARGS) Datum int8inc(PG_FUNCTION_ARGS) { - /* - * When int8 is pass-by-reference, we provide this special case to avoid - * palloc overhead for COUNT(): when called as an aggregate, we know that - * the argument is modifiable local storage, so just update it in-place. - * (If int8 is pass-by-value, then of course this is useless as well as - * incorrect, so just ifdef it out.) - */ -#ifndef USE_FLOAT8_BYVAL /* controls int8 too */ - if (AggCheckCallContext(fcinfo, NULL)) - { - int64 *arg = (int64 *) PG_GETARG_POINTER(0); - - if (unlikely(pg_add_s64_overflow(*arg, 1, arg))) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("bigint out of range"))); - - PG_RETURN_POINTER(arg); - } - else -#endif - { - /* Not called as an aggregate, so just do it the dumb way */ - int64 arg = PG_GETARG_INT64(0); - int64 result; + int64 arg = PG_GETARG_INT64(0); + int64 result; - if (unlikely(pg_add_s64_overflow(arg, 1, &result))) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("bigint out of range"))); + if (unlikely(pg_add_s64_overflow(arg, 1, &result))) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("bigint out of range"))); - PG_RETURN_INT64(result); - } + PG_RETURN_INT64(result); } Datum int8dec(PG_FUNCTION_ARGS) { - /* - * When int8 is pass-by-reference, we provide this special case to avoid - * palloc overhead for COUNT(): when called as an aggregate, we know that - * the argument is modifiable local storage, so just update it in-place. - * (If int8 is pass-by-value, then of course this is useless as well as - * incorrect, so just ifdef it out.) - */ -#ifndef USE_FLOAT8_BYVAL /* controls int8 too */ - if (AggCheckCallContext(fcinfo, NULL)) - { - int64 *arg = (int64 *) PG_GETARG_POINTER(0); - - if (unlikely(pg_sub_s64_overflow(*arg, 1, arg))) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("bigint out of range"))); - PG_RETURN_POINTER(arg); - } - else -#endif - { - /* Not called as an aggregate, so just do it the dumb way */ - int64 arg = PG_GETARG_INT64(0); - int64 result; + int64 arg = PG_GETARG_INT64(0); + int64 result; - if (unlikely(pg_sub_s64_overflow(arg, 1, &result))) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("bigint out of range"))); + if (unlikely(pg_sub_s64_overflow(arg, 1, &result))) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("bigint out of range"))); - PG_RETURN_INT64(result); - } + PG_RETURN_INT64(result); } diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c index 51452755f5868..e9d370cb3da8e 100644 --- a/src/backend/utils/adt/json.c +++ b/src/backend/utils/adt/json.c @@ -904,7 +904,7 @@ json_unique_hash(const void *key, Size keysize) hash ^= hash_bytes((const unsigned char *) entry->key, entry->key_len); - return DatumGetUInt32(hash); + return hash; } static int diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c index c1950792b5aea..9b56248cf0bee 100644 --- a/src/backend/utils/adt/jsonb_gin.c +++ b/src/backend/utils/adt/jsonb_gin.c @@ -896,8 +896,8 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS) continue; /* We rely on the array elements not being toasted */ entries[j++] = make_text_key(JGINFLAG_KEY, - VARDATA_ANY(key_datums[i]), - VARSIZE_ANY_EXHDR(key_datums[i])); + VARDATA_ANY(DatumGetPointer(key_datums[i])), + VARSIZE_ANY_EXHDR(DatumGetPointer(key_datums[i]))); } *nentries = j; diff --git a/src/backend/utils/adt/jsonb_op.c b/src/backend/utils/adt/jsonb_op.c index fa5603f26e1d6..51d38e321fb2f 100644 --- a/src/backend/utils/adt/jsonb_op.c +++ b/src/backend/utils/adt/jsonb_op.c @@ -63,8 +63,8 @@ jsonb_exists_any(PG_FUNCTION_ARGS) strVal.type = jbvString; /* We rely on the array elements not being toasted */ - strVal.val.string.val = VARDATA_ANY(key_datums[i]); - strVal.val.string.len = VARSIZE_ANY_EXHDR(key_datums[i]); + strVal.val.string.val = VARDATA_ANY(DatumGetPointer(key_datums[i])); + strVal.val.string.len = VARSIZE_ANY_EXHDR(DatumGetPointer(key_datums[i])); if (findJsonbValueFromContainer(&jb->root, JB_FOBJECT | JB_FARRAY, @@ -96,8 +96,8 @@ jsonb_exists_all(PG_FUNCTION_ARGS) strVal.type = jbvString; /* We rely on the array elements not being toasted */ - strVal.val.string.val = VARDATA_ANY(key_datums[i]); - strVal.val.string.len = VARSIZE_ANY_EXHDR(key_datums[i]); + strVal.val.string.val = VARDATA_ANY(DatumGetPointer(key_datums[i])); + strVal.val.string.len = VARSIZE_ANY_EXHDR(DatumGetPointer(key_datums[i])); if (findJsonbValueFromContainer(&jb->root, JB_FOBJECT | JB_FARRAY, diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index c8b6c15e05975..82b807d067a34 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -277,22 +277,16 @@ compareJsonbContainers(JsonbContainer *a, JsonbContainer *b) else { /* - * It's safe to assume that the types differed, and that the va - * and vb values passed were set. - * - * If the two values were of the same container type, then there'd - * have been a chance to observe the variation in the number of - * elements/pairs (when processing WJB_BEGIN_OBJECT, say). They're - * either two heterogeneously-typed containers, or a container and - * some scalar type. - * - * We don't have to consider the WJB_END_ARRAY and WJB_END_OBJECT - * cases here, because we would have seen the corresponding - * WJB_BEGIN_ARRAY and WJB_BEGIN_OBJECT tokens first, and - * concluded that they don't match. + * It's not possible for one iterator to report end of array or + * object while the other one reports something else, because we + * would have detected a length mismatch when we processed the + * container-start tokens above. Likewise we can't see WJB_DONE + * from one but not the other. So we have two different-type + * containers, or a container and some scalar type, or two + * different scalar types. Sort on the basis of the type code. */ - Assert(ra != WJB_END_ARRAY && ra != WJB_END_OBJECT); - Assert(rb != WJB_END_ARRAY && rb != WJB_END_OBJECT); + Assert(ra != WJB_DONE && ra != WJB_END_ARRAY && ra != WJB_END_OBJECT); + Assert(rb != WJB_DONE && rb != WJB_END_ARRAY && rb != WJB_END_OBJECT); Assert(va.type != vb.type); Assert(va.type != jbvBinary); @@ -852,15 +846,20 @@ JsonbIteratorInit(JsonbContainer *container) * It is our job to expand the jbvBinary representation without bothering them * with it. However, clients should not take it upon themselves to touch array * or Object element/pair buffers, since their element/pair pointers are - * garbage. Also, *val will not be set when returning WJB_END_ARRAY or - * WJB_END_OBJECT, on the assumption that it's only useful to access values - * when recursing in. + * garbage. + * + * *val is not meaningful when the result is WJB_DONE, WJB_END_ARRAY or + * WJB_END_OBJECT. However, we set val->type = jbvNull in those cases, + * so that callers may assume that val->type is always well-defined. */ JsonbIteratorToken JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested) { if (*it == NULL) + { + val->type = jbvNull; return WJB_DONE; + } /* * When stepping into a nested container, we jump back here to start @@ -898,6 +897,7 @@ JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested) * nesting). */ *it = freeAndGetParent(*it); + val->type = jbvNull; return WJB_END_ARRAY; } @@ -951,6 +951,7 @@ JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested) * of nesting). */ *it = freeAndGetParent(*it); + val->type = jbvNull; return WJB_END_OBJECT; } else @@ -995,8 +996,10 @@ JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested) return WJB_VALUE; } - elog(ERROR, "invalid iterator state"); - return -1; + elog(ERROR, "invalid jsonb iterator state"); + /* satisfy compilers that don't know that elog(ERROR) doesn't return */ + val->type = jbvNull; + return WJB_DONE; } /* diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 9f43b58dba5f5..c5e1a027956bc 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -1723,9 +1723,9 @@ push_path(JsonbParseState **st, int level, Datum *path_elems, { /* * tpath contains expected type of an empty jsonb created at each level - * higher or equal than the current one, either jbvObject or jbvArray. - * Since it contains only information about path slice from level to the - * end, the access index must be normalized by level. + * higher or equal to the current one, either jbvObject or jbvArray. Since + * it contains only information about path slice from level to the end, + * the access index must be normalized by level. */ enum jbvType *tpath = palloc0((path_len - level) * sizeof(enum jbvType)); JsonbValue newkey; @@ -2027,7 +2027,7 @@ each_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname, bool as_text) { /* a json null is an sql null in text mode */ nulls[1] = true; - values[1] = (Datum) NULL; + values[1] = (Datum) 0; } else values[1] = PointerGetDatum(JsonbValueAsText(&v)); @@ -2266,7 +2266,7 @@ elements_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname, { /* a json null is an sql null in text mode */ nulls[0] = true; - values[0] = (Datum) NULL; + values[0] = (Datum) 0; } else values[0] = PointerGetDatum(JsonbValueAsText(&v)); @@ -2389,7 +2389,7 @@ elements_array_element_end(void *state, bool isnull) if (isnull && _state->normalize_results) { nulls[0] = true; - values[0] = (Datum) NULL; + values[0] = (Datum) 0; } else if (_state->next_scalar) { @@ -4766,8 +4766,8 @@ jsonb_delete_array(PG_FUNCTION_ARGS) continue; /* We rely on the array elements not being toasted */ - keyptr = VARDATA_ANY(keys_elems[i]); - keylen = VARSIZE_ANY_EXHDR(keys_elems[i]); + keyptr = VARDATA_ANY(DatumGetPointer(keys_elems[i])); + keylen = VARSIZE_ANY_EXHDR(DatumGetPointer(keys_elems[i])); if (keylen == v.val.string.len && memcmp(keyptr, v.val.string.val, keylen) == 0) { diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c index dbab24737ef1f..5a56253522357 100644 --- a/src/backend/utils/adt/jsonpath_exec.c +++ b/src/backend/utils/adt/jsonpath_exec.c @@ -1517,7 +1517,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp, /* Convert numstr to Numeric with typmod */ Assert(numstr != NULL); noerr = DirectInputFunctionCallSafe(numeric_in, numstr, - InvalidOid, dtypmod, + InvalidOid, DatumGetInt32(dtypmod), (Node *) &escontext, &numdatum); @@ -3074,8 +3074,8 @@ JsonItemFromDatum(Datum val, Oid typid, int32 typmod, JsonbValue *res) case TEXTOID: case VARCHAROID: res->type = jbvString; - res->val.string.val = VARDATA_ANY(val); - res->val.string.len = VARSIZE_ANY_EXHDR(val); + res->val.string.val = VARDATA_ANY(DatumGetPointer(val)); + res->val.string.len = VARSIZE_ANY_EXHDR(DatumGetPointer(val)); break; case DATEOID: case TIMEOID: diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index 7f4cf6145854a..4216ac17f4371 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -98,7 +98,7 @@ SB_lower_char(unsigned char c, pg_locale_t locale) else if (locale->is_default) return pg_tolower(c); else - return tolower_l(c, locale->info.lt); + return char_tolower(c, locale); } @@ -209,7 +209,17 @@ Generic_Text_IC_like(text *str, text *pat, Oid collation) * way. */ - if (pg_database_encoding_max_length() > 1 || (locale->provider == COLLPROVIDER_ICU)) + if (locale->ctype_is_c || + (char_tolower_enabled(locale) && + pg_database_encoding_max_length() == 1)) + { + p = VARDATA_ANY(pat); + plen = VARSIZE_ANY_EXHDR(pat); + s = VARDATA_ANY(str); + slen = VARSIZE_ANY_EXHDR(str); + return SB_IMatchText(s, slen, p, plen, locale); + } + else { pat = DatumGetTextPP(DirectFunctionCall1Coll(lower, collation, PointerGetDatum(pat))); @@ -224,14 +234,6 @@ Generic_Text_IC_like(text *str, text *pat, Oid collation) else return MB_MatchText(s, slen, p, plen, 0); } - else - { - p = VARDATA_ANY(pat); - plen = VARSIZE_ANY_EXHDR(pat); - s = VARDATA_ANY(str); - slen = VARSIZE_ANY_EXHDR(str); - return SB_IMatchText(s, slen, p, plen, locale); - } } /* diff --git a/src/backend/utils/adt/like_support.c b/src/backend/utils/adt/like_support.c index 8fdc677371f4d..999f23f86d51d 100644 --- a/src/backend/utils/adt/like_support.c +++ b/src/backend/utils/adt/like_support.c @@ -1495,13 +1495,8 @@ pattern_char_isalpha(char c, bool is_multibyte, { if (locale->ctype_is_c) return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); - else if (is_multibyte && IS_HIGHBIT_SET(c)) - return true; - else if (locale->provider != COLLPROVIDER_LIBC) - return IS_HIGHBIT_SET(c) || - (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); else - return isalpha_l((unsigned char) c, locale->info.lt); + return char_is_cased(c, locale); } diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c index 00e67fb46d074..df938812dd368 100644 --- a/src/backend/utils/adt/lockfuncs.c +++ b/src/backend/utils/adt/lockfuncs.c @@ -398,15 +398,15 @@ pg_lock_status(PG_FUNCTION_ARGS) values[0] = CStringGetTextDatum(PredicateLockTagTypeNames[lockType]); /* lock target */ - values[1] = GET_PREDICATELOCKTARGETTAG_DB(*predTag); - values[2] = GET_PREDICATELOCKTARGETTAG_RELATION(*predTag); + values[1] = ObjectIdGetDatum(GET_PREDICATELOCKTARGETTAG_DB(*predTag)); + values[2] = ObjectIdGetDatum(GET_PREDICATELOCKTARGETTAG_RELATION(*predTag)); if (lockType == PREDLOCKTAG_TUPLE) - values[4] = GET_PREDICATELOCKTARGETTAG_OFFSET(*predTag); + values[4] = UInt16GetDatum(GET_PREDICATELOCKTARGETTAG_OFFSET(*predTag)); else nulls[4] = true; if ((lockType == PREDLOCKTAG_TUPLE) || (lockType == PREDLOCKTAG_PAGE)) - values[3] = GET_PREDICATELOCKTARGETTAG_PAGE(*predTag); + values[3] = UInt32GetDatum(GET_PREDICATELOCKTARGETTAG_PAGE(*predTag)); else nulls[3] = true; diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c index 3644e9735f5d0..bb38ef2f5e440 100644 --- a/src/backend/utils/adt/mac.c +++ b/src/backend/utils/adt/mac.c @@ -481,33 +481,26 @@ macaddr_abbrev_convert(Datum original, SortSupport ssup) Datum res; /* - * On a 64-bit machine, zero out the 8-byte datum and copy the 6 bytes of - * the MAC address in. There will be two bytes of zero padding on the end - * of the least significant bits. + * Zero out the 8-byte Datum and copy in the 6 bytes of the MAC address. + * There will be two bytes of zero padding on the end of the least + * significant bits. */ -#if SIZEOF_DATUM == 8 - memset(&res, 0, SIZEOF_DATUM); + StaticAssertStmt(sizeof(res) >= sizeof(macaddr), + "Datum is too small for macaddr"); + memset(&res, 0, sizeof(res)); memcpy(&res, authoritative, sizeof(macaddr)); -#else /* SIZEOF_DATUM != 8 */ - memcpy(&res, authoritative, SIZEOF_DATUM); -#endif uss->input_count += 1; /* - * Cardinality estimation. The estimate uses uint32, so on a 64-bit - * architecture, XOR the two 32-bit halves together to produce slightly - * more entropy. The two zeroed bytes won't have any practical impact on - * this operation. + * Cardinality estimation. The estimate uses uint32, so XOR the two 32-bit + * halves together to produce slightly more entropy. The two zeroed bytes + * won't have any practical impact on this operation. */ if (uss->estimating) { uint32 tmp; -#if SIZEOF_DATUM == 8 - tmp = (uint32) res ^ (uint32) ((uint64) res >> 32); -#else /* SIZEOF_DATUM != 8 */ - tmp = (uint32) res; -#endif + tmp = DatumGetUInt32(res) ^ (uint32) (DatumGetUInt64(res) >> 32); addHyperLogLog(&uss->abbr_card, DatumGetUInt32(hash_uint32(tmp))); } diff --git a/src/backend/utils/adt/mcxtfuncs.c b/src/backend/utils/adt/mcxtfuncs.c index 396c2f223b4e1..fe6dce9cba3ec 100644 --- a/src/backend/utils/adt/mcxtfuncs.c +++ b/src/backend/utils/adt/mcxtfuncs.c @@ -38,7 +38,7 @@ typedef struct MemoryContextId { MemoryContext context; int context_id; -} MemoryContextId; +} MemoryContextId; /* * int_list_to_array diff --git a/src/backend/utils/adt/meson.build b/src/backend/utils/adt/meson.build index f23cfad7182ab..dac372c3bea3b 100644 --- a/src/backend/utils/adt/meson.build +++ b/src/backend/utils/adt/meson.build @@ -12,6 +12,7 @@ backend_sources += files( 'arrayutils.c', 'ascii.c', 'bool.c', + 'bytea.c', 'cash.c', 'char.c', 'cryptohashfuncs.c', @@ -54,6 +55,7 @@ backend_sources += files( 'misc.c', 'multirangetypes.c', 'multirangetypes_selfuncs.c', + 'multixactfuncs.c', 'name.c', 'network.c', 'network_gist.c', @@ -86,6 +88,7 @@ backend_sources += files( 'rowtypes.c', 'ruleutils.c', 'selfuncs.c', + 'skipsupport.c', 'tid.c', 'timestamp.c', 'trigfuncs.c', diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index 6fcfd031428ed..6c5e3438447b0 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -26,7 +26,6 @@ #include "catalog/pg_tablespace.h" #include "catalog/pg_type.h" #include "catalog/system_fk_info.h" -#include "commands/dbcommands.h" #include "commands/tablespace.h" #include "common/keywords.h" #include "funcapi.h" diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index cd84ced5b487c..84733dc50195b 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -394,12 +394,13 @@ multirange_send(PG_FUNCTION_ARGS) for (int i = 0; i < range_count; i++) { Datum range; + bytea *outputbytes; range = RangeTypePGetDatum(ranges[i]); - range = PointerGetDatum(SendFunctionCall(&cache->typioproc, range)); + outputbytes = SendFunctionCall(&cache->typioproc, range); - pq_sendint32(buf, VARSIZE(range) - VARHDRSZ); - pq_sendbytes(buf, VARDATA(range), VARSIZE(range) - VARHDRSZ); + pq_sendint32(buf, VARSIZE(outputbytes) - VARHDRSZ); + pq_sendbytes(buf, VARDATA(outputbytes), VARSIZE(outputbytes) - VARHDRSZ); } PG_RETURN_BYTEA_P(pq_endtypsend(buf)); @@ -2081,15 +2082,14 @@ range_overleft_multirange_internal(TypeCacheEntry *rangetyp, bool empty; if (RangeIsEmpty(r) || MultirangeIsEmpty(mr)) - PG_RETURN_BOOL(false); - + return false; range_deserialize(rangetyp, r, &lower1, &upper1, &empty); Assert(!empty); multirange_get_bounds(rangetyp, mr, mr->rangeCount - 1, &lower2, &upper2); - PG_RETURN_BOOL(range_cmp_bounds(rangetyp, &upper1, &upper2) <= 0); + return (range_cmp_bounds(rangetyp, &upper1, &upper2) <= 0); } Datum @@ -2166,7 +2166,7 @@ range_overright_multirange_internal(TypeCacheEntry *rangetyp, bool empty; if (RangeIsEmpty(r) || MultirangeIsEmpty(mr)) - PG_RETURN_BOOL(false); + return false; range_deserialize(rangetyp, r, &lower1, &upper1, &empty); Assert(!empty); @@ -2523,7 +2523,7 @@ multirange_adjacent_range(PG_FUNCTION_ARGS) TypeCacheEntry *typcache; if (RangeIsEmpty(r) || MultirangeIsEmpty(mr)) - return false; + PG_RETURN_BOOL(false); typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr)); @@ -2544,7 +2544,7 @@ multirange_adjacent_multirange(PG_FUNCTION_ARGS) upper2; if (MultirangeIsEmpty(mr1) || MultirangeIsEmpty(mr2)) - return false; + PG_RETURN_BOOL(false); typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1)); @@ -2639,7 +2639,7 @@ multirange_cmp(PG_FUNCTION_ARGS) Datum multirange_lt(PG_FUNCTION_ARGS) { - int cmp = multirange_cmp(fcinfo); + int cmp = DatumGetInt32(multirange_cmp(fcinfo)); PG_RETURN_BOOL(cmp < 0); } @@ -2647,7 +2647,7 @@ multirange_lt(PG_FUNCTION_ARGS) Datum multirange_le(PG_FUNCTION_ARGS) { - int cmp = multirange_cmp(fcinfo); + int cmp = DatumGetInt32(multirange_cmp(fcinfo)); PG_RETURN_BOOL(cmp <= 0); } @@ -2655,7 +2655,7 @@ multirange_le(PG_FUNCTION_ARGS) Datum multirange_ge(PG_FUNCTION_ARGS) { - int cmp = multirange_cmp(fcinfo); + int cmp = DatumGetInt32(multirange_cmp(fcinfo)); PG_RETURN_BOOL(cmp >= 0); } @@ -2663,7 +2663,7 @@ multirange_ge(PG_FUNCTION_ARGS) Datum multirange_gt(PG_FUNCTION_ARGS) { - int cmp = multirange_cmp(fcinfo); + int cmp = DatumGetInt32(multirange_cmp(fcinfo)); PG_RETURN_BOOL(cmp > 0); } @@ -2833,7 +2833,7 @@ hash_multirange(PG_FUNCTION_ARGS) upper_hash = 0; /* Merge hashes of flags and bounds */ - range_hash = hash_uint32((uint32) flags); + range_hash = hash_bytes_uint32((uint32) flags); range_hash ^= lower_hash; range_hash = pg_rotate_left32(range_hash, 1); range_hash ^= upper_hash; diff --git a/src/backend/utils/adt/multixactfuncs.c b/src/backend/utils/adt/multixactfuncs.c new file mode 100644 index 0000000000000..e74ea93834860 --- /dev/null +++ b/src/backend/utils/adt/multixactfuncs.c @@ -0,0 +1,87 @@ +/*------------------------------------------------------------------------- + * + * multixactfuncs.c + * Functions for accessing multixact-related data. + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/backend/utils/adt/multixactfuncs.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "access/multixact.h" +#include "funcapi.h" +#include "utils/builtins.h" + +/* + * pg_get_multixact_members + * + * Returns information about the MultiXactMembers of the specified + * MultiXactId. + */ +Datum +pg_get_multixact_members(PG_FUNCTION_ARGS) +{ + typedef struct + { + MultiXactMember *members; + int nmembers; + int iter; + } mxact; + MultiXactId mxid = PG_GETARG_TRANSACTIONID(0); + mxact *multi; + FuncCallContext *funccxt; + + if (mxid < FirstMultiXactId) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid MultiXactId: %u", mxid))); + + if (SRF_IS_FIRSTCALL()) + { + MemoryContext oldcxt; + TupleDesc tupdesc; + + funccxt = SRF_FIRSTCALL_INIT(); + oldcxt = MemoryContextSwitchTo(funccxt->multi_call_memory_ctx); + + multi = palloc(sizeof(mxact)); + /* no need to allow for old values here */ + multi->nmembers = GetMultiXactIdMembers(mxid, &multi->members, false, + false); + multi->iter = 0; + + if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + funccxt->tuple_desc = tupdesc; + funccxt->attinmeta = TupleDescGetAttInMetadata(tupdesc); + funccxt->user_fctx = multi; + + MemoryContextSwitchTo(oldcxt); + } + + funccxt = SRF_PERCALL_SETUP(); + multi = (mxact *) funccxt->user_fctx; + + while (multi->iter < multi->nmembers) + { + HeapTuple tuple; + char *values[2]; + + values[0] = psprintf("%u", multi->members[multi->iter].xid); + values[1] = mxstatus_to_string(multi->members[multi->iter].status); + + tuple = BuildTupleFromCStrings(funccxt->attinmeta, values); + + multi->iter++; + pfree(values[0]); + SRF_RETURN_NEXT(funccxt, HeapTupleGetDatum(tuple)); + } + + SRF_RETURN_DONE(funccxt); +} diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c index 227980c14d3ce..3cb0ab6829ae8 100644 --- a/src/backend/utils/adt/network.c +++ b/src/backend/utils/adt/network.c @@ -12,8 +12,6 @@ #include #include -#include "access/stratnum.h" -#include "catalog/pg_opfamily.h" #include "catalog/pg_type.h" #include "common/hashfn.h" #include "common/ip.h" @@ -279,8 +277,6 @@ network_send(inet *addr, bool is_cidr) pq_sendbyte(&buf, ip_bits(addr)); pq_sendbyte(&buf, is_cidr); nb = ip_addrsize(addr); - if (nb < 0) - nb = 0; pq_sendbyte(&buf, nb); addrptr = (char *) ip_addr(addr); for (i = 0; i < nb; i++) @@ -571,24 +567,11 @@ network_abbrev_abort(int memtupcount, SortSupport ssup) * * When generating abbreviated keys for SortSupport, we pack as much as we can * into a datum while ensuring that when comparing those keys as integers, - * these rules will be respected. Exact contents depend on IP family and datum - * size. + * these rules will be respected. Exact contents depend on IP family: * * IPv4 * ---- * - * 4 byte datums: - * - * Start with 1 bit for the IP family (IPv4 or IPv6; this bit is present in - * every case below) followed by all but 1 of the netmasked bits. - * - * +----------+---------------------+ - * | 1 bit IP | 31 bits network | (1 bit network - * | family | (truncated) | omitted) - * +----------+---------------------+ - * - * 8 byte datums: - * * We have space to store all netmasked bits, followed by the netmask size, * followed by 25 bits of the subnet (25 bits is usually more than enough in * practice). cidr datums always have all-zero subnet bits. @@ -601,15 +584,6 @@ network_abbrev_abort(int memtupcount, SortSupport ssup) * IPv6 * ---- * - * 4 byte datums: - * - * +----------+---------------------+ - * | 1 bit IP | 31 bits network | (up to 97 bits - * | family | (truncated) | network omitted) - * +----------+---------------------+ - * - * 8 byte datums: - * * +----------+---------------------------------+ * | 1 bit IP | 63 bits network | (up to 65 bits * | family | (truncated) | network omitted) @@ -632,8 +606,7 @@ network_abbrev_convert(Datum original, SortSupport ssup) /* * Get an unsigned integer representation of the IP address by taking its * first 4 or 8 bytes. Always take all 4 bytes of an IPv4 address. Take - * the first 8 bytes of an IPv6 address with an 8 byte datum and 4 bytes - * otherwise. + * the first 8 bytes of an IPv6 address. * * We're consuming an array of unsigned char, so byteswap on little endian * systems (an inet's ipaddr field stores the most significant byte @@ -663,7 +636,7 @@ network_abbrev_convert(Datum original, SortSupport ssup) ipaddr_datum = DatumBigEndianToNative(ipaddr_datum); /* Initialize result with ipfamily (most significant) bit set */ - res = ((Datum) 1) << (SIZEOF_DATUM * BITS_PER_BYTE - 1); + res = ((Datum) 1) << (sizeof(Datum) * BITS_PER_BYTE - 1); } /* @@ -672,8 +645,7 @@ network_abbrev_convert(Datum original, SortSupport ssup) * while low order bits go in "subnet" component when there is space for * one. This is often accomplished by generating a temp datum subnet * bitmask, which we may reuse later when generating the subnet bits - * themselves. (Note that subnet bits are only used with IPv4 datums on - * platforms where datum is 8 bytes.) + * themselves. * * The number of bits in subnet is used to generate a datum subnet * bitmask. For example, with a /24 IPv4 datum there are 8 subnet bits @@ -685,14 +657,14 @@ network_abbrev_convert(Datum original, SortSupport ssup) subnet_size = ip_maxbits(authoritative) - ip_bits(authoritative); Assert(subnet_size >= 0); /* subnet size must work with prefix ipaddr cases */ - subnet_size %= SIZEOF_DATUM * BITS_PER_BYTE; + subnet_size %= sizeof(Datum) * BITS_PER_BYTE; if (ip_bits(authoritative) == 0) { /* Fit as many ipaddr bits as possible into subnet */ subnet_bitmask = ((Datum) 0) - 1; network = 0; } - else if (ip_bits(authoritative) < SIZEOF_DATUM * BITS_PER_BYTE) + else if (ip_bits(authoritative) < sizeof(Datum) * BITS_PER_BYTE) { /* Split ipaddr bits between network and subnet */ subnet_bitmask = (((Datum) 1) << subnet_size) - 1; @@ -705,12 +677,11 @@ network_abbrev_convert(Datum original, SortSupport ssup) network = ipaddr_datum; } -#if SIZEOF_DATUM == 8 if (ip_family(authoritative) == PGSQL_AF_INET) { /* - * IPv4 with 8 byte datums: keep all 32 netmasked bits, netmask size, - * and most significant 25 subnet bits + * IPv4: keep all 32 netmasked bits, netmask size, and most + * significant 25 subnet bits */ Datum netmask_size = (Datum) ip_bits(authoritative); Datum subnet; @@ -754,12 +725,11 @@ network_abbrev_convert(Datum original, SortSupport ssup) res |= network | netmask_size | subnet; } else -#endif { /* - * 4 byte datums, or IPv6 with 8 byte datums: Use as many of the - * netmasked bits as will fit in final abbreviated key. Avoid - * clobbering the ipfamily bit that was set earlier. + * IPv6: Use as many of the netmasked bits as will fit in final + * abbreviated key. Avoid clobbering the ipfamily bit that was set + * earlier. */ res |= network >> 1; } @@ -771,11 +741,7 @@ network_abbrev_convert(Datum original, SortSupport ssup) { uint32 tmp; -#if SIZEOF_DATUM == 8 - tmp = (uint32) res ^ (uint32) ((uint64) res >> 32); -#else /* SIZEOF_DATUM != 8 */ - tmp = (uint32) res; -#endif + tmp = DatumGetUInt32(res) ^ (uint32) (DatumGetUInt64(res) >> 32); addHyperLogLog(&uss->abbr_card, DatumGetUInt32(hash_uint32(tmp))); } diff --git a/src/backend/utils/adt/network_spgist.c b/src/backend/utils/adt/network_spgist.c index a84747d927586..602276a35c3ea 100644 --- a/src/backend/utils/adt/network_spgist.c +++ b/src/backend/utils/adt/network_spgist.c @@ -37,7 +37,6 @@ #include "catalog/pg_type.h" #include "utils/fmgrprotos.h" #include "utils/inet.h" -#include "varatt.h" static int inet_spg_node_number(const inet *val, int commonbits); diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 40dcbc7b6710b..b6287f5d97305 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -28,6 +28,7 @@ #include "common/hashfn.h" #include "common/int.h" +#include "common/int128.h" #include "funcapi.h" #include "lib/hyperloglog.h" #include "libpq/pqformat.h" @@ -391,30 +392,21 @@ typedef struct NumericSumAccum /* * We define our own macros for packing and unpacking abbreviated-key - * representations for numeric values in order to avoid depending on - * USE_FLOAT8_BYVAL. The type of abbreviation we use is based only on - * the size of a datum, not the argument-passing convention for float8. + * representations, just to have a notational indication that that's + * what we're doing. Now that sizeof(Datum) is always 8, we can rely + * on fitting an int64 into Datum. * - * The range of abbreviations for finite values is from +PG_INT64/32_MAX - * to -PG_INT64/32_MAX. NaN has the abbreviation PG_INT64/32_MIN, and we + * The range of abbreviations for finite values is from +PG_INT64_MAX + * to -PG_INT64_MAX. NaN has the abbreviation PG_INT64_MIN, and we * define the sort ordering to make that work out properly (see further * comments below). PINF and NINF share the abbreviations of the largest * and smallest finite abbreviation classes. */ -#define NUMERIC_ABBREV_BITS (SIZEOF_DATUM * BITS_PER_BYTE) -#if SIZEOF_DATUM == 8 -#define NumericAbbrevGetDatum(X) ((Datum) (X)) -#define DatumGetNumericAbbrev(X) ((int64) (X)) +#define NumericAbbrevGetDatum(X) Int64GetDatum(X) +#define DatumGetNumericAbbrev(X) DatumGetInt64(X) #define NUMERIC_ABBREV_NAN NumericAbbrevGetDatum(PG_INT64_MIN) #define NUMERIC_ABBREV_PINF NumericAbbrevGetDatum(-PG_INT64_MAX) #define NUMERIC_ABBREV_NINF NumericAbbrevGetDatum(PG_INT64_MAX) -#else -#define NumericAbbrevGetDatum(X) ((Datum) (X)) -#define DatumGetNumericAbbrev(X) ((int32) (X)) -#define NUMERIC_ABBREV_NAN NumericAbbrevGetDatum(PG_INT32_MIN) -#define NUMERIC_ABBREV_PINF NumericAbbrevGetDatum(-PG_INT32_MAX) -#define NUMERIC_ABBREV_NINF NumericAbbrevGetDatum(PG_INT32_MAX) -#endif /* ---------- @@ -534,10 +526,7 @@ static bool numericvar_to_int32(const NumericVar *var, int32 *result); static bool numericvar_to_int64(const NumericVar *var, int64 *result); static void int64_to_numericvar(int64 val, NumericVar *var); static bool numericvar_to_uint64(const NumericVar *var, uint64 *result); -#ifdef HAVE_INT128 -static bool numericvar_to_int128(const NumericVar *var, int128 *result); -static void int128_to_numericvar(int128 val, NumericVar *var); -#endif +static void int128_to_numericvar(INT128 val, NumericVar *var); static double numericvar_to_double_no_overflow(const NumericVar *var); static Datum numeric_abbrev_convert(Datum original_datum, SortSupport ssup); @@ -1958,9 +1947,11 @@ generate_series_numeric_support(PG_FUNCTION_ARGS) * in the histogram. width_bucket() returns an integer indicating the * bucket number that 'operand' belongs to in an equiwidth histogram * with the specified characteristics. An operand smaller than the - * lower bound is assigned to bucket 0. An operand greater than the - * upper bound is assigned to an additional bucket (with number - * count+1). We don't allow "NaN" for any of the numeric arguments. + * lower bound is assigned to bucket 0. An operand greater than or equal + * to the upper bound is assigned to an additional bucket (with number + * count+1). We don't allow the histogram bounds to be NaN or +/- infinity, + * but we do allow those values for the operand (taking NaN to be larger + * than any other value, as we do in comparisons). */ Datum width_bucket_numeric(PG_FUNCTION_ARGS) @@ -1978,17 +1969,13 @@ width_bucket_numeric(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION), errmsg("count must be greater than zero"))); - if (NUMERIC_IS_SPECIAL(operand) || - NUMERIC_IS_SPECIAL(bound1) || - NUMERIC_IS_SPECIAL(bound2)) + if (NUMERIC_IS_SPECIAL(bound1) || NUMERIC_IS_SPECIAL(bound2)) { - if (NUMERIC_IS_NAN(operand) || - NUMERIC_IS_NAN(bound1) || - NUMERIC_IS_NAN(bound2)) + if (NUMERIC_IS_NAN(bound1) || NUMERIC_IS_NAN(bound2)) ereport(ERROR, (errcode(ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION), - errmsg("operand, lower bound, and upper bound cannot be NaN"))); - /* We allow "operand" to be infinite; cmp_numerics will cope */ + errmsg("lower and upper bounds cannot be NaN"))); + if (NUMERIC_IS_INF(bound1) || NUMERIC_IS_INF(bound2)) ereport(ERROR, (errcode(ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION), @@ -2100,12 +2087,11 @@ compute_bucket(Numeric operand, Numeric bound1, Numeric bound2, * while this could be worked on itself, the abbreviation strategy gives more * speedup in many common cases. * - * Two different representations are used for the abbreviated form, one in - * int32 and one in int64, whichever fits into a by-value Datum. In both cases - * the representation is negated relative to the original value, because we use - * the largest negative value for NaN, which sorts higher than other values. We - * convert the absolute value of the numeric to a 31-bit or 63-bit positive - * value, and then negate it if the original number was positive. + * The abbreviated format is an int64. The representation is negated relative + * to the original value, because we use the largest negative value for NaN, + * which sorts higher than other values. We convert the absolute value of the + * numeric to a 63-bit positive value, and then negate it if the original + * number was positive. * * We abort the abbreviation process if the abbreviation cardinality is below * 0.01% of the row count (1 per 10k non-null rows). The actual break-even @@ -2332,7 +2318,7 @@ numeric_cmp_abbrev(Datum x, Datum y, SortSupport ssup) } /* - * Abbreviate a NumericVar according to the available bit size. + * Abbreviate a NumericVar into the 64-bit sortsupport size. * * The 31-bit value is constructed as: * @@ -2376,9 +2362,6 @@ numeric_cmp_abbrev(Datum x, Datum y, SortSupport ssup) * with all bits zero. This allows simple comparisons to work on the composite * value. */ - -#if NUMERIC_ABBREV_BITS == 64 - static Datum numeric_abbrev_convert_var(const NumericVar *var, NumericSortSupport *nss) { @@ -2430,84 +2413,6 @@ numeric_abbrev_convert_var(const NumericVar *var, NumericSortSupport *nss) return NumericAbbrevGetDatum(result); } -#endif /* NUMERIC_ABBREV_BITS == 64 */ - -#if NUMERIC_ABBREV_BITS == 32 - -static Datum -numeric_abbrev_convert_var(const NumericVar *var, NumericSortSupport *nss) -{ - int ndigits = var->ndigits; - int weight = var->weight; - int32 result; - - if (ndigits == 0 || weight < -11) - { - result = 0; - } - else if (weight > 20) - { - result = PG_INT32_MAX; - } - else - { - NumericDigit nxt1 = (ndigits > 1) ? var->digits[1] : 0; - - weight = (weight + 11) * 4; - - result = var->digits[0]; - - /* - * "result" now has 1 to 4 nonzero decimal digits. We pack in more - * digits to make 7 in total (largest we can fit in 24 bits) - */ - - if (result > 999) - { - /* already have 4 digits, add 3 more */ - result = (result * 1000) + (nxt1 / 10); - weight += 3; - } - else if (result > 99) - { - /* already have 3 digits, add 4 more */ - result = (result * 10000) + nxt1; - weight += 2; - } - else if (result > 9) - { - NumericDigit nxt2 = (ndigits > 2) ? var->digits[2] : 0; - - /* already have 2 digits, add 5 more */ - result = (result * 100000) + (nxt1 * 10) + (nxt2 / 1000); - weight += 1; - } - else - { - NumericDigit nxt2 = (ndigits > 2) ? var->digits[2] : 0; - - /* already have 1 digit, add 6 more */ - result = (result * 1000000) + (nxt1 * 100) + (nxt2 / 100); - } - - result = result | (weight << 24); - } - - /* the abbrev is negated relative to the original */ - if (var->sign == NUMERIC_POS) - result = -result; - - if (nss->estimating) - { - uint32 tmp = (uint32) result; - - addHyperLogLog(&nss->abbr_card, DatumGetUInt32(hash_uint32(tmp))); - } - - return NumericAbbrevGetDatum(result); -} - -#endif /* NUMERIC_ABBREV_BITS == 32 */ /* * Ordinary (non-sortsupport) comparisons follow. @@ -4465,25 +4370,13 @@ int64_div_fast_to_numeric(int64 val1, int log10val2) if (unlikely(pg_mul_s64_overflow(val1, factor, &new_val1))) { -#ifdef HAVE_INT128 /* do the multiplication using 128-bit integers */ - int128 tmp; + INT128 tmp; - tmp = (int128) val1 * (int128) factor; + tmp = int64_to_int128(0); + int128_add_int64_mul_int64(&tmp, val1, factor); int128_to_numericvar(tmp, &result); -#else - /* do the multiplication using numerics */ - NumericVar tmp; - - init_var(&tmp); - - int64_to_numericvar(val1, &result); - int64_to_numericvar(factor, &tmp); - mul_var(&result, &tmp, &result, 0); - - free_var(&tmp); -#endif } else int64_to_numericvar(new_val1, &result); @@ -4903,8 +4796,8 @@ numeric_pg_lsn(PG_FUNCTION_ARGS) * Actually, it's a pointer to a NumericAggState allocated in the aggregate * context. The digit buffers for the NumericVars will be there too. * - * On platforms which support 128-bit integers some aggregates instead use a - * 128-bit integer based transition datatype to speed up calculations. + * For integer inputs, some aggregates use special-purpose 64-bit or 128-bit + * integer based transition datatypes to speed up calculations. * * ---------------------------------------------------------------------- */ @@ -5568,26 +5461,27 @@ numeric_accum_inv(PG_FUNCTION_ARGS) /* - * Integer data types in general use Numeric accumulators to share code - * and avoid risk of overflow. + * Integer data types in general use Numeric accumulators to share code and + * avoid risk of overflow. However for performance reasons optimized + * special-purpose accumulator routines are used when possible: * - * However for performance reasons optimized special-purpose accumulator - * routines are used when possible. + * For 16-bit and 32-bit inputs, N and sum(X) fit into 64-bit, so 64-bit + * accumulators are used for SUM and AVG of these data types. * - * On platforms with 128-bit integer support, the 128-bit routines will be - * used when sum(X) or sum(X*X) fit into 128-bit. + * For 16-bit and 32-bit inputs, sum(X^2) fits into 128-bit, so 128-bit + * accumulators are used for STDDEV_POP, STDDEV_SAMP, VAR_POP, and VAR_SAMP of + * these data types. * - * For 16 and 32 bit inputs, the N and sum(X) fit into 64-bit so the 64-bit - * accumulators will be used for SUM and AVG of these data types. + * For 64-bit inputs, sum(X) fits into 128-bit, so a 128-bit accumulator is + * used for SUM(int8) and AVG(int8). */ -#ifdef HAVE_INT128 typedef struct Int128AggState { bool calcSumX2; /* if true, calculate sumX2 */ int64 N; /* count of processed numbers */ - int128 sumX; /* sum of processed numbers */ - int128 sumX2; /* sum of squares of processed numbers */ + INT128 sumX; /* sum of processed numbers */ + INT128 sumX2; /* sum of squares of processed numbers */ } Int128AggState; /* @@ -5633,12 +5527,12 @@ makeInt128AggStateCurrentContext(bool calcSumX2) * Accumulate a new input value for 128-bit aggregate functions. */ static void -do_int128_accum(Int128AggState *state, int128 newval) +do_int128_accum(Int128AggState *state, int64 newval) { if (state->calcSumX2) - state->sumX2 += newval * newval; + int128_add_int64_mul_int64(&state->sumX2, newval, newval); - state->sumX += newval; + int128_add_int64(&state->sumX, newval); state->N++; } @@ -5646,43 +5540,28 @@ do_int128_accum(Int128AggState *state, int128 newval) * Remove an input value from the aggregated state. */ static void -do_int128_discard(Int128AggState *state, int128 newval) +do_int128_discard(Int128AggState *state, int64 newval) { if (state->calcSumX2) - state->sumX2 -= newval * newval; + int128_sub_int64_mul_int64(&state->sumX2, newval, newval); - state->sumX -= newval; + int128_sub_int64(&state->sumX, newval); state->N--; } -typedef Int128AggState PolyNumAggState; -#define makePolyNumAggState makeInt128AggState -#define makePolyNumAggStateCurrentContext makeInt128AggStateCurrentContext -#else -typedef NumericAggState PolyNumAggState; -#define makePolyNumAggState makeNumericAggState -#define makePolyNumAggStateCurrentContext makeNumericAggStateCurrentContext -#endif - Datum int2_accum(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* Create the state data on the first call */ if (state == NULL) - state = makePolyNumAggState(fcinfo, true); + state = makeInt128AggState(fcinfo, true); if (!PG_ARGISNULL(1)) - { -#ifdef HAVE_INT128 - do_int128_accum(state, (int128) PG_GETARG_INT16(1)); -#else - do_numeric_accum(state, int64_to_numeric(PG_GETARG_INT16(1))); -#endif - } + do_int128_accum(state, PG_GETARG_INT16(1)); PG_RETURN_POINTER(state); } @@ -5690,22 +5569,16 @@ int2_accum(PG_FUNCTION_ARGS) Datum int4_accum(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* Create the state data on the first call */ if (state == NULL) - state = makePolyNumAggState(fcinfo, true); + state = makeInt128AggState(fcinfo, true); if (!PG_ARGISNULL(1)) - { -#ifdef HAVE_INT128 - do_int128_accum(state, (int128) PG_GETARG_INT32(1)); -#else - do_numeric_accum(state, int64_to_numeric(PG_GETARG_INT32(1))); -#endif - } + do_int128_accum(state, PG_GETARG_INT32(1)); PG_RETURN_POINTER(state); } @@ -5728,21 +5601,21 @@ int8_accum(PG_FUNCTION_ARGS) } /* - * Combine function for numeric aggregates which require sumX2 + * Combine function for Int128AggState for aggregates which require sumX2 */ Datum numeric_poly_combine(PG_FUNCTION_ARGS) { - PolyNumAggState *state1; - PolyNumAggState *state2; + Int128AggState *state1; + Int128AggState *state2; MemoryContext agg_context; MemoryContext old_context; if (!AggCheckCallContext(fcinfo, &agg_context)) elog(ERROR, "aggregate function called in non-aggregate context"); - state1 = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); - state2 = PG_ARGISNULL(1) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(1); + state1 = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); + state2 = PG_ARGISNULL(1) ? NULL : (Int128AggState *) PG_GETARG_POINTER(1); if (state2 == NULL) PG_RETURN_POINTER(state1); @@ -5752,16 +5625,10 @@ numeric_poly_combine(PG_FUNCTION_ARGS) { old_context = MemoryContextSwitchTo(agg_context); - state1 = makePolyNumAggState(fcinfo, true); + state1 = makeInt128AggState(fcinfo, true); state1->N = state2->N; - -#ifdef HAVE_INT128 state1->sumX = state2->sumX; state1->sumX2 = state2->sumX2; -#else - accum_sum_copy(&state1->sumX, &state2->sumX); - accum_sum_copy(&state1->sumX2, &state2->sumX2); -#endif MemoryContextSwitchTo(old_context); @@ -5771,54 +5638,51 @@ numeric_poly_combine(PG_FUNCTION_ARGS) if (state2->N > 0) { state1->N += state2->N; + int128_add_int128(&state1->sumX, state2->sumX); + int128_add_int128(&state1->sumX2, state2->sumX2); + } + PG_RETURN_POINTER(state1); +} -#ifdef HAVE_INT128 - state1->sumX += state2->sumX; - state1->sumX2 += state2->sumX2; -#else - /* The rest of this needs to work in the aggregate context */ - old_context = MemoryContextSwitchTo(agg_context); - - /* Accumulate sums */ - accum_sum_combine(&state1->sumX, &state2->sumX); - accum_sum_combine(&state1->sumX2, &state2->sumX2); +/* + * int128_serialize - serialize a 128-bit integer to binary format + */ +static inline void +int128_serialize(StringInfo buf, INT128 val) +{ + pq_sendint64(buf, PG_INT128_HI_INT64(val)); + pq_sendint64(buf, PG_INT128_LO_UINT64(val)); +} - MemoryContextSwitchTo(old_context); -#endif +/* + * int128_deserialize - deserialize binary format to a 128-bit integer. + */ +static inline INT128 +int128_deserialize(StringInfo buf) +{ + int64 hi = pq_getmsgint64(buf); + uint64 lo = pq_getmsgint64(buf); - } - PG_RETURN_POINTER(state1); + return make_int128(hi, lo); } /* * numeric_poly_serialize - * Serialize PolyNumAggState into bytea for aggregate functions which + * Serialize Int128AggState into bytea for aggregate functions which * require sumX2. */ Datum numeric_poly_serialize(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; StringInfoData buf; bytea *result; - NumericVar tmp_var; /* Ensure we disallow calling when not in aggregate context */ if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); - state = (PolyNumAggState *) PG_GETARG_POINTER(0); - - /* - * If the platform supports int128 then sumX and sumX2 will be a 128 bit - * integer type. Here we'll convert that into a numeric type so that the - * combine state is in the same format for both int128 enabled machines - * and machines which don't support that type. The logic here is that one - * day we might like to send these over to another server for further - * processing and we want a standard format to work with. - */ - - init_var(&tmp_var); + state = (Int128AggState *) PG_GETARG_POINTER(0); pq_begintypsend(&buf); @@ -5826,48 +5690,33 @@ numeric_poly_serialize(PG_FUNCTION_ARGS) pq_sendint64(&buf, state->N); /* sumX */ -#ifdef HAVE_INT128 - int128_to_numericvar(state->sumX, &tmp_var); -#else - accum_sum_final(&state->sumX, &tmp_var); -#endif - numericvar_serialize(&buf, &tmp_var); + int128_serialize(&buf, state->sumX); /* sumX2 */ -#ifdef HAVE_INT128 - int128_to_numericvar(state->sumX2, &tmp_var); -#else - accum_sum_final(&state->sumX2, &tmp_var); -#endif - numericvar_serialize(&buf, &tmp_var); + int128_serialize(&buf, state->sumX2); result = pq_endtypsend(&buf); - free_var(&tmp_var); - PG_RETURN_BYTEA_P(result); } /* * numeric_poly_deserialize - * Deserialize PolyNumAggState from bytea for aggregate functions which + * Deserialize Int128AggState from bytea for aggregate functions which * require sumX2. */ Datum numeric_poly_deserialize(PG_FUNCTION_ARGS) { bytea *sstate; - PolyNumAggState *result; + Int128AggState *result; StringInfoData buf; - NumericVar tmp_var; if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); sstate = PG_GETARG_BYTEA_PP(0); - init_var(&tmp_var); - /* * Initialize a StringInfo so that we can "receive" it using the standard * recv-function infrastructure. @@ -5875,31 +5724,19 @@ numeric_poly_deserialize(PG_FUNCTION_ARGS) initReadOnlyStringInfo(&buf, VARDATA_ANY(sstate), VARSIZE_ANY_EXHDR(sstate)); - result = makePolyNumAggStateCurrentContext(false); + result = makeInt128AggStateCurrentContext(false); /* N */ result->N = pq_getmsgint64(&buf); /* sumX */ - numericvar_deserialize(&buf, &tmp_var); -#ifdef HAVE_INT128 - numericvar_to_int128(&tmp_var, &result->sumX); -#else - accum_sum_add(&result->sumX, &tmp_var); -#endif + result->sumX = int128_deserialize(&buf); /* sumX2 */ - numericvar_deserialize(&buf, &tmp_var); -#ifdef HAVE_INT128 - numericvar_to_int128(&tmp_var, &result->sumX2); -#else - accum_sum_add(&result->sumX2, &tmp_var); -#endif + result->sumX2 = int128_deserialize(&buf); pq_getmsgend(&buf); - free_var(&tmp_var); - PG_RETURN_POINTER(result); } @@ -5909,43 +5746,37 @@ numeric_poly_deserialize(PG_FUNCTION_ARGS) Datum int8_avg_accum(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* Create the state data on the first call */ if (state == NULL) - state = makePolyNumAggState(fcinfo, false); + state = makeInt128AggState(fcinfo, false); if (!PG_ARGISNULL(1)) - { -#ifdef HAVE_INT128 - do_int128_accum(state, (int128) PG_GETARG_INT64(1)); -#else - do_numeric_accum(state, int64_to_numeric(PG_GETARG_INT64(1))); -#endif - } + do_int128_accum(state, PG_GETARG_INT64(1)); PG_RETURN_POINTER(state); } /* - * Combine function for PolyNumAggState for aggregates which don't require + * Combine function for Int128AggState for aggregates which don't require * sumX2 */ Datum int8_avg_combine(PG_FUNCTION_ARGS) { - PolyNumAggState *state1; - PolyNumAggState *state2; + Int128AggState *state1; + Int128AggState *state2; MemoryContext agg_context; MemoryContext old_context; if (!AggCheckCallContext(fcinfo, &agg_context)) elog(ERROR, "aggregate function called in non-aggregate context"); - state1 = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); - state2 = PG_ARGISNULL(1) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(1); + state1 = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); + state2 = PG_ARGISNULL(1) ? NULL : (Int128AggState *) PG_GETARG_POINTER(1); if (state2 == NULL) PG_RETURN_POINTER(state1); @@ -5955,14 +5786,10 @@ int8_avg_combine(PG_FUNCTION_ARGS) { old_context = MemoryContextSwitchTo(agg_context); - state1 = makePolyNumAggState(fcinfo, false); + state1 = makeInt128AggState(fcinfo, false); state1->N = state2->N; - -#ifdef HAVE_INT128 state1->sumX = state2->sumX; -#else - accum_sum_copy(&state1->sumX, &state2->sumX); -#endif + MemoryContextSwitchTo(old_context); PG_RETURN_POINTER(state1); @@ -5971,52 +5798,28 @@ int8_avg_combine(PG_FUNCTION_ARGS) if (state2->N > 0) { state1->N += state2->N; - -#ifdef HAVE_INT128 - state1->sumX += state2->sumX; -#else - /* The rest of this needs to work in the aggregate context */ - old_context = MemoryContextSwitchTo(agg_context); - - /* Accumulate sums */ - accum_sum_combine(&state1->sumX, &state2->sumX); - - MemoryContextSwitchTo(old_context); -#endif - + int128_add_int128(&state1->sumX, state2->sumX); } PG_RETURN_POINTER(state1); } /* * int8_avg_serialize - * Serialize PolyNumAggState into bytea using the standard - * recv-function infrastructure. + * Serialize Int128AggState into bytea for aggregate functions which + * don't require sumX2. */ Datum int8_avg_serialize(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; StringInfoData buf; bytea *result; - NumericVar tmp_var; /* Ensure we disallow calling when not in aggregate context */ if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); - state = (PolyNumAggState *) PG_GETARG_POINTER(0); - - /* - * If the platform supports int128 then sumX will be a 128 integer type. - * Here we'll convert that into a numeric type so that the combine state - * is in the same format for both int128 enabled machines and machines - * which don't support that type. The logic here is that one day we might - * like to send these over to another server for further processing and we - * want a standard format to work with. - */ - - init_var(&tmp_var); + state = (Int128AggState *) PG_GETARG_POINTER(0); pq_begintypsend(&buf); @@ -6024,39 +5827,30 @@ int8_avg_serialize(PG_FUNCTION_ARGS) pq_sendint64(&buf, state->N); /* sumX */ -#ifdef HAVE_INT128 - int128_to_numericvar(state->sumX, &tmp_var); -#else - accum_sum_final(&state->sumX, &tmp_var); -#endif - numericvar_serialize(&buf, &tmp_var); + int128_serialize(&buf, state->sumX); result = pq_endtypsend(&buf); - free_var(&tmp_var); - PG_RETURN_BYTEA_P(result); } /* * int8_avg_deserialize - * Deserialize bytea back into PolyNumAggState. + * Deserialize Int128AggState from bytea for aggregate functions which + * don't require sumX2. */ Datum int8_avg_deserialize(PG_FUNCTION_ARGS) { bytea *sstate; - PolyNumAggState *result; + Int128AggState *result; StringInfoData buf; - NumericVar tmp_var; if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); sstate = PG_GETARG_BYTEA_PP(0); - init_var(&tmp_var); - /* * Initialize a StringInfo so that we can "receive" it using the standard * recv-function infrastructure. @@ -6064,23 +5858,16 @@ int8_avg_deserialize(PG_FUNCTION_ARGS) initReadOnlyStringInfo(&buf, VARDATA_ANY(sstate), VARSIZE_ANY_EXHDR(sstate)); - result = makePolyNumAggStateCurrentContext(false); + result = makeInt128AggStateCurrentContext(false); /* N */ result->N = pq_getmsgint64(&buf); /* sumX */ - numericvar_deserialize(&buf, &tmp_var); -#ifdef HAVE_INT128 - numericvar_to_int128(&tmp_var, &result->sumX); -#else - accum_sum_add(&result->sumX, &tmp_var); -#endif + result->sumX = int128_deserialize(&buf); pq_getmsgend(&buf); - free_var(&tmp_var); - PG_RETURN_POINTER(result); } @@ -6091,24 +5878,16 @@ int8_avg_deserialize(PG_FUNCTION_ARGS) Datum int2_accum_inv(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* Should not get here with no state */ if (state == NULL) elog(ERROR, "int2_accum_inv called with NULL state"); if (!PG_ARGISNULL(1)) - { -#ifdef HAVE_INT128 - do_int128_discard(state, (int128) PG_GETARG_INT16(1)); -#else - /* Should never fail, all inputs have dscale 0 */ - if (!do_numeric_discard(state, int64_to_numeric(PG_GETARG_INT16(1)))) - elog(ERROR, "do_numeric_discard failed unexpectedly"); -#endif - } + do_int128_discard(state, PG_GETARG_INT16(1)); PG_RETURN_POINTER(state); } @@ -6116,24 +5895,16 @@ int2_accum_inv(PG_FUNCTION_ARGS) Datum int4_accum_inv(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* Should not get here with no state */ if (state == NULL) elog(ERROR, "int4_accum_inv called with NULL state"); if (!PG_ARGISNULL(1)) - { -#ifdef HAVE_INT128 - do_int128_discard(state, (int128) PG_GETARG_INT32(1)); -#else - /* Should never fail, all inputs have dscale 0 */ - if (!do_numeric_discard(state, int64_to_numeric(PG_GETARG_INT32(1)))) - elog(ERROR, "do_numeric_discard failed unexpectedly"); -#endif - } + do_int128_discard(state, PG_GETARG_INT32(1)); PG_RETURN_POINTER(state); } @@ -6162,24 +5933,16 @@ int8_accum_inv(PG_FUNCTION_ARGS) Datum int8_avg_accum_inv(PG_FUNCTION_ARGS) { - PolyNumAggState *state; + Int128AggState *state; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* Should not get here with no state */ if (state == NULL) elog(ERROR, "int8_avg_accum_inv called with NULL state"); if (!PG_ARGISNULL(1)) - { -#ifdef HAVE_INT128 - do_int128_discard(state, (int128) PG_GETARG_INT64(1)); -#else - /* Should never fail, all inputs have dscale 0 */ - if (!do_numeric_discard(state, int64_to_numeric(PG_GETARG_INT64(1)))) - elog(ERROR, "do_numeric_discard failed unexpectedly"); -#endif - } + do_int128_discard(state, PG_GETARG_INT64(1)); PG_RETURN_POINTER(state); } @@ -6187,12 +5950,11 @@ int8_avg_accum_inv(PG_FUNCTION_ARGS) Datum numeric_poly_sum(PG_FUNCTION_ARGS) { -#ifdef HAVE_INT128 - PolyNumAggState *state; + Int128AggState *state; Numeric res; NumericVar result; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* If there were no non-null inputs, return NULL */ if (state == NULL || state->N == 0) @@ -6207,21 +5969,17 @@ numeric_poly_sum(PG_FUNCTION_ARGS) free_var(&result); PG_RETURN_NUMERIC(res); -#else - return numeric_sum(fcinfo); -#endif } Datum numeric_poly_avg(PG_FUNCTION_ARGS) { -#ifdef HAVE_INT128 - PolyNumAggState *state; + Int128AggState *state; NumericVar result; Datum countd, sumd; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); /* If there were no non-null inputs, return NULL */ if (state == NULL || state->N == 0) @@ -6237,9 +5995,6 @@ numeric_poly_avg(PG_FUNCTION_ARGS) free_var(&result); PG_RETURN_DATUM(DirectFunctionCall2(numeric_div, sumd, countd)); -#else - return numeric_avg(fcinfo); -#endif } Datum @@ -6472,7 +6227,6 @@ numeric_stddev_pop(PG_FUNCTION_ARGS) PG_RETURN_NUMERIC(res); } -#ifdef HAVE_INT128 static Numeric numeric_poly_stddev_internal(Int128AggState *state, bool variance, bool sample, @@ -6516,17 +6270,15 @@ numeric_poly_stddev_internal(Int128AggState *state, return res; } -#endif Datum numeric_poly_var_samp(PG_FUNCTION_ARGS) { -#ifdef HAVE_INT128 - PolyNumAggState *state; + Int128AggState *state; Numeric res; bool is_null; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); res = numeric_poly_stddev_internal(state, true, true, &is_null); @@ -6534,20 +6286,16 @@ numeric_poly_var_samp(PG_FUNCTION_ARGS) PG_RETURN_NULL(); else PG_RETURN_NUMERIC(res); -#else - return numeric_var_samp(fcinfo); -#endif } Datum numeric_poly_stddev_samp(PG_FUNCTION_ARGS) { -#ifdef HAVE_INT128 - PolyNumAggState *state; + Int128AggState *state; Numeric res; bool is_null; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); res = numeric_poly_stddev_internal(state, false, true, &is_null); @@ -6555,20 +6303,16 @@ numeric_poly_stddev_samp(PG_FUNCTION_ARGS) PG_RETURN_NULL(); else PG_RETURN_NUMERIC(res); -#else - return numeric_stddev_samp(fcinfo); -#endif } Datum numeric_poly_var_pop(PG_FUNCTION_ARGS) { -#ifdef HAVE_INT128 - PolyNumAggState *state; + Int128AggState *state; Numeric res; bool is_null; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); res = numeric_poly_stddev_internal(state, true, false, &is_null); @@ -6576,20 +6320,16 @@ numeric_poly_var_pop(PG_FUNCTION_ARGS) PG_RETURN_NULL(); else PG_RETURN_NUMERIC(res); -#else - return numeric_var_pop(fcinfo); -#endif } Datum numeric_poly_stddev_pop(PG_FUNCTION_ARGS) { -#ifdef HAVE_INT128 - PolyNumAggState *state; + Int128AggState *state; Numeric res; bool is_null; - state = PG_ARGISNULL(0) ? NULL : (PolyNumAggState *) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (Int128AggState *) PG_GETARG_POINTER(0); res = numeric_poly_stddev_internal(state, false, false, &is_null); @@ -6597,9 +6337,6 @@ numeric_poly_stddev_pop(PG_FUNCTION_ARGS) PG_RETURN_NULL(); else PG_RETURN_NUMERIC(res); -#else - return numeric_stddev_pop(fcinfo); -#endif } /* @@ -6625,6 +6362,7 @@ numeric_poly_stddev_pop(PG_FUNCTION_ARGS) Datum int2_sum(PG_FUNCTION_ARGS) { + int64 oldsum; int64 newval; if (PG_ARGISNULL(0)) @@ -6637,43 +6375,22 @@ int2_sum(PG_FUNCTION_ARGS) PG_RETURN_INT64(newval); } - /* - * If we're invoked as an aggregate, we can cheat and modify our first - * parameter in-place to avoid palloc overhead. If not, we need to return - * the new value of the transition variable. (If int8 is pass-by-value, - * then of course this is useless as well as incorrect, so just ifdef it - * out.) - */ -#ifndef USE_FLOAT8_BYVAL /* controls int8 too */ - if (AggCheckCallContext(fcinfo, NULL)) - { - int64 *oldsum = (int64 *) PG_GETARG_POINTER(0); + oldsum = PG_GETARG_INT64(0); - /* Leave the running sum unchanged in the new input is null */ - if (!PG_ARGISNULL(1)) - *oldsum = *oldsum + (int64) PG_GETARG_INT16(1); - - PG_RETURN_POINTER(oldsum); - } - else -#endif - { - int64 oldsum = PG_GETARG_INT64(0); - - /* Leave sum unchanged if new input is null. */ - if (PG_ARGISNULL(1)) - PG_RETURN_INT64(oldsum); + /* Leave sum unchanged if new input is null. */ + if (PG_ARGISNULL(1)) + PG_RETURN_INT64(oldsum); - /* OK to do the addition. */ - newval = oldsum + (int64) PG_GETARG_INT16(1); + /* OK to do the addition. */ + newval = oldsum + (int64) PG_GETARG_INT16(1); - PG_RETURN_INT64(newval); - } + PG_RETURN_INT64(newval); } Datum int4_sum(PG_FUNCTION_ARGS) { + int64 oldsum; int64 newval; if (PG_ARGISNULL(0)) @@ -6686,38 +6403,16 @@ int4_sum(PG_FUNCTION_ARGS) PG_RETURN_INT64(newval); } - /* - * If we're invoked as an aggregate, we can cheat and modify our first - * parameter in-place to avoid palloc overhead. If not, we need to return - * the new value of the transition variable. (If int8 is pass-by-value, - * then of course this is useless as well as incorrect, so just ifdef it - * out.) - */ -#ifndef USE_FLOAT8_BYVAL /* controls int8 too */ - if (AggCheckCallContext(fcinfo, NULL)) - { - int64 *oldsum = (int64 *) PG_GETARG_POINTER(0); - - /* Leave the running sum unchanged in the new input is null */ - if (!PG_ARGISNULL(1)) - *oldsum = *oldsum + (int64) PG_GETARG_INT32(1); + oldsum = PG_GETARG_INT64(0); - PG_RETURN_POINTER(oldsum); - } - else -#endif - { - int64 oldsum = PG_GETARG_INT64(0); - - /* Leave sum unchanged if new input is null. */ - if (PG_ARGISNULL(1)) - PG_RETURN_INT64(oldsum); + /* Leave sum unchanged if new input is null. */ + if (PG_ARGISNULL(1)) + PG_RETURN_INT64(oldsum); - /* OK to do the addition. */ - newval = oldsum + (int64) PG_GETARG_INT32(1); + /* OK to do the addition. */ + newval = oldsum + (int64) PG_GETARG_INT32(1); - PG_RETURN_INT64(newval); - } + PG_RETURN_INT64(newval); } /* @@ -8332,105 +8027,23 @@ numericvar_to_uint64(const NumericVar *var, uint64 *result) return true; } -#ifdef HAVE_INT128 -/* - * Convert numeric to int128, rounding if needed. - * - * If overflow, return false (no error is raised). Return true if okay. - */ -static bool -numericvar_to_int128(const NumericVar *var, int128 *result) -{ - NumericDigit *digits; - int ndigits; - int weight; - int i; - int128 val, - oldval; - bool neg; - NumericVar rounded; - - /* Round to nearest integer */ - init_var(&rounded); - set_var_from_var(var, &rounded); - round_var(&rounded, 0); - - /* Check for zero input */ - strip_var(&rounded); - ndigits = rounded.ndigits; - if (ndigits == 0) - { - *result = 0; - free_var(&rounded); - return true; - } - - /* - * For input like 10000000000, we must treat stripped digits as real. So - * the loop assumes there are weight+1 digits before the decimal point. - */ - weight = rounded.weight; - Assert(weight >= 0 && ndigits <= weight + 1); - - /* Construct the result */ - digits = rounded.digits; - neg = (rounded.sign == NUMERIC_NEG); - val = digits[0]; - for (i = 1; i <= weight; i++) - { - oldval = val; - val *= NBASE; - if (i < ndigits) - val += digits[i]; - - /* - * The overflow check is a bit tricky because we want to accept - * INT128_MIN, which will overflow the positive accumulator. We can - * detect this case easily though because INT128_MIN is the only - * nonzero value for which -val == val (on a two's complement machine, - * anyway). - */ - if ((val / NBASE) != oldval) /* possible overflow? */ - { - if (!neg || (-val) != val || val == 0 || oldval < 0) - { - free_var(&rounded); - return false; - } - } - } - - free_var(&rounded); - - *result = neg ? -val : val; - return true; -} - /* * Convert 128 bit integer to numeric. */ static void -int128_to_numericvar(int128 val, NumericVar *var) +int128_to_numericvar(INT128 val, NumericVar *var) { - uint128 uval, - newuval; + int sign; NumericDigit *ptr; int ndigits; + int32 dig; /* int128 can require at most 39 decimal digits; add one for safety */ alloc_var(var, 40 / DEC_DIGITS); - if (val < 0) - { - var->sign = NUMERIC_NEG; - uval = -val; - } - else - { - var->sign = NUMERIC_POS; - uval = val; - } + sign = int128_sign(val); + var->sign = sign < 0 ? NUMERIC_NEG : NUMERIC_POS; var->dscale = 0; - if (val == 0) + if (sign == 0) { var->ndigits = 0; var->weight = 0; @@ -8442,15 +8055,13 @@ int128_to_numericvar(int128 val, NumericVar *var) { ptr--; ndigits++; - newuval = uval / NBASE; - *ptr = uval - newuval * NBASE; - uval = newuval; - } while (uval); + int128_div_mod_int32(&val, NBASE, &dig); + *ptr = (NumericDigit) abs(dig); + } while (!int128_is_zero(val)); var->digits = ptr; var->ndigits = ndigits; var->weight = ndigits - 1; } -#endif /* * Convert a NumericVar to float8; if out of range, return +/- HUGE_VAL diff --git a/src/backend/utils/adt/orderedsetaggs.c b/src/backend/utils/adt/orderedsetaggs.c index 9457d23971581..c41b191be6217 100644 --- a/src/backend/utils/adt/orderedsetaggs.c +++ b/src/backend/utils/adt/orderedsetaggs.c @@ -1007,7 +1007,7 @@ percentile_cont_float8_multi_final(PG_FUNCTION_ARGS) FLOAT8OID, /* hard-wired info on type float8 */ sizeof(float8), - FLOAT8PASSBYVAL, + true, TYPALIGN_DOUBLE, float8_lerp); } diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 6e43b708c0f7a..97c2ac1faf9a4 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -19,7 +19,7 @@ * immediately. * * The other categories, LC_MONETARY, LC_NUMERIC, and LC_TIME are - * permanentaly set to "C", and then we use temporary locale_t + * permanently set to "C", and then we use temporary locale_t * objects when we need to look up locale data based on the GUCs * of the same name. Information is cached when the GUCs change. * The cached information is only used by the formatting functions @@ -41,11 +41,11 @@ #include "mb/pg_wchar.h" #include "miscadmin.h" #include "utils/builtins.h" -#include "utils/formatting.h" #include "utils/guc_hooks.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/pg_locale.h" +#include "utils/relcache.h" #include "utils/syscache.h" #ifdef WIN32 @@ -79,31 +79,6 @@ extern pg_locale_t create_pg_locale_icu(Oid collid, MemoryContext context); extern pg_locale_t create_pg_locale_libc(Oid collid, MemoryContext context); extern char *get_collation_actual_version_libc(const char *collcollate); -extern size_t strlower_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strtitle_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strupper_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strfold_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); - -extern size_t strlower_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strtitle_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strupper_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strfold_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); - -extern size_t strlower_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strtitle_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strupper_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); - /* GUC settings */ char *locale_messages; char *locale_monetary; @@ -551,7 +526,7 @@ PGLC_localeconv(void) "could not get lconv for LC_MONETARY = \"%s\", LC_NUMERIC = \"%s\": %m", locale_monetary, locale_numeric); - /* Must copy data now now so we can re-encode it. */ + /* Must copy data now so we can re-encode it. */ extlconv = &tmp; worklconv.decimal_point = strdup(extlconv->decimal_point); worklconv.thousands_sep = strdup(extlconv->thousands_sep); @@ -1092,6 +1067,9 @@ create_pg_locale(Oid collid, MemoryContext context) Assert((result->collate_is_c && result->collate == NULL) || (!result->collate_is_c && result->collate != NULL)); + Assert((result->ctype_is_c && result->ctype == NULL) || + (!result->ctype_is_c && result->ctype != NULL)); + datum = SysCacheGetAttr(COLLOID, tp, Anum_pg_collation_collversion, &isnull); if (!isnull) @@ -1196,6 +1174,8 @@ pg_newlocale_from_collation(Oid collid) if (!OidIsValid(collid)) elog(ERROR, "cache lookup failed for collation %u", collid); + AssertCouldGetRelation(); + if (last_collation_cache_oid == collid) return last_collation_cache_locale; @@ -1254,77 +1234,31 @@ size_t pg_strlower(char *dst, size_t dstsize, const char *src, ssize_t srclen, pg_locale_t locale) { - if (locale->provider == COLLPROVIDER_BUILTIN) - return strlower_builtin(dst, dstsize, src, srclen, locale); -#ifdef USE_ICU - else if (locale->provider == COLLPROVIDER_ICU) - return strlower_icu(dst, dstsize, src, srclen, locale); -#endif - else if (locale->provider == COLLPROVIDER_LIBC) - return strlower_libc(dst, dstsize, src, srclen, locale); - else - /* shouldn't happen */ - PGLOCALE_SUPPORT_ERROR(locale->provider); - - return 0; /* keep compiler quiet */ + return locale->ctype->strlower(dst, dstsize, src, srclen, locale); } size_t pg_strtitle(char *dst, size_t dstsize, const char *src, ssize_t srclen, pg_locale_t locale) { - if (locale->provider == COLLPROVIDER_BUILTIN) - return strtitle_builtin(dst, dstsize, src, srclen, locale); -#ifdef USE_ICU - else if (locale->provider == COLLPROVIDER_ICU) - return strtitle_icu(dst, dstsize, src, srclen, locale); -#endif - else if (locale->provider == COLLPROVIDER_LIBC) - return strtitle_libc(dst, dstsize, src, srclen, locale); - else - /* shouldn't happen */ - PGLOCALE_SUPPORT_ERROR(locale->provider); - - return 0; /* keep compiler quiet */ + return locale->ctype->strtitle(dst, dstsize, src, srclen, locale); } size_t pg_strupper(char *dst, size_t dstsize, const char *src, ssize_t srclen, pg_locale_t locale) { - if (locale->provider == COLLPROVIDER_BUILTIN) - return strupper_builtin(dst, dstsize, src, srclen, locale); -#ifdef USE_ICU - else if (locale->provider == COLLPROVIDER_ICU) - return strupper_icu(dst, dstsize, src, srclen, locale); -#endif - else if (locale->provider == COLLPROVIDER_LIBC) - return strupper_libc(dst, dstsize, src, srclen, locale); - else - /* shouldn't happen */ - PGLOCALE_SUPPORT_ERROR(locale->provider); - - return 0; /* keep compiler quiet */ + return locale->ctype->strupper(dst, dstsize, src, srclen, locale); } size_t pg_strfold(char *dst, size_t dstsize, const char *src, ssize_t srclen, pg_locale_t locale) { - if (locale->provider == COLLPROVIDER_BUILTIN) - return strfold_builtin(dst, dstsize, src, srclen, locale); -#ifdef USE_ICU - else if (locale->provider == COLLPROVIDER_ICU) - return strfold_icu(dst, dstsize, src, srclen, locale); -#endif - /* for libc, just use strlower */ - else if (locale->provider == COLLPROVIDER_LIBC) - return strlower_libc(dst, dstsize, src, srclen, locale); + if (locale->ctype->strfold) + return locale->ctype->strfold(dst, dstsize, src, srclen, locale); else - /* shouldn't happen */ - PGLOCALE_SUPPORT_ERROR(locale->provider); - - return 0; /* keep compiler quiet */ + return locale->ctype->strlower(dst, dstsize, src, srclen, locale); } /* @@ -1461,6 +1395,41 @@ pg_strnxfrm_prefix(char *dest, size_t destsize, const char *src, return locale->collate->strnxfrm_prefix(dest, destsize, src, srclen, locale); } +/* + * char_is_cased() + * + * Fuzzy test of whether the given char is case-varying or not. The argument + * is a single byte, so in a multibyte encoding, just assume any non-ASCII + * char is case-varying. + */ +bool +char_is_cased(char ch, pg_locale_t locale) +{ + return locale->ctype->char_is_cased(ch, locale); +} + +/* + * char_tolower_enabled() + * + * Does the provider support char_tolower()? + */ +bool +char_tolower_enabled(pg_locale_t locale) +{ + return (locale->ctype->char_tolower != NULL); +} + +/* + * char_tolower() + * + * Convert char (single-byte encoding) to lowercase. + */ +char +char_tolower(unsigned char ch, pg_locale_t locale) +{ + return locale->ctype->char_tolower(ch, locale); +} + /* * Return required encoding ID for the given locale, or -1 if any encoding is * valid for the locale. diff --git a/src/backend/utils/adt/pg_locale_builtin.c b/src/backend/utils/adt/pg_locale_builtin.c index 33ad20bbf07c9..0c9fbdb40f2a9 100644 --- a/src/backend/utils/adt/pg_locale_builtin.c +++ b/src/backend/utils/adt/pg_locale_builtin.c @@ -18,28 +18,19 @@ #include "mb/pg_wchar.h" #include "miscadmin.h" #include "utils/builtins.h" -#include "utils/memutils.h" #include "utils/pg_locale.h" #include "utils/syscache.h" extern pg_locale_t create_pg_locale_builtin(Oid collid, MemoryContext context); extern char *get_collation_actual_version_builtin(const char *collcollate); -extern size_t strlower_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strtitle_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strupper_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strfold_builtin(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); - struct WordBoundaryState { const char *str; size_t len; size_t offset; + bool posix; bool init; bool prev_alnum; }; @@ -58,7 +49,7 @@ initcap_wbnext(void *state) { pg_wchar u = utf8_to_unicode((unsigned char *) wbstate->str + wbstate->offset); - bool curr_alnum = pg_u_isalnum(u, true); + bool curr_alnum = pg_u_isalnum(u, wbstate->posix); if (!wbstate->init || curr_alnum != wbstate->prev_alnum) { @@ -76,7 +67,7 @@ initcap_wbnext(void *state) return wbstate->len; } -size_t +static size_t strlower_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -84,7 +75,7 @@ strlower_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, locale->info.builtin.casemap_full); } -size_t +static size_t strtitle_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -92,6 +83,7 @@ strtitle_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, .str = src, .len = srclen, .offset = 0, + .posix = !locale->info.builtin.casemap_full, .init = false, .prev_alnum = false, }; @@ -101,7 +93,7 @@ strtitle_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, initcap_wbnext, &wbstate); } -size_t +static size_t strupper_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -109,7 +101,7 @@ strupper_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, locale->info.builtin.casemap_full); } -size_t +static size_t strfold_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -117,6 +109,98 @@ strfold_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, locale->info.builtin.casemap_full); } +static bool +wc_isdigit_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isdigit(wc, !locale->info.builtin.casemap_full); +} + +static bool +wc_isalpha_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isalpha(wc); +} + +static bool +wc_isalnum_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isalnum(wc, !locale->info.builtin.casemap_full); +} + +static bool +wc_isupper_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isupper(wc); +} + +static bool +wc_islower_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_islower(wc); +} + +static bool +wc_isgraph_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isgraph(wc); +} + +static bool +wc_isprint_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isprint(wc); +} + +static bool +wc_ispunct_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_ispunct(wc, !locale->info.builtin.casemap_full); +} + +static bool +wc_isspace_builtin(pg_wchar wc, pg_locale_t locale) +{ + return pg_u_isspace(wc); +} + +static bool +char_is_cased_builtin(char ch, pg_locale_t locale) +{ + return IS_HIGHBIT_SET(ch) || + (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); +} + +static pg_wchar +wc_toupper_builtin(pg_wchar wc, pg_locale_t locale) +{ + return unicode_uppercase_simple(wc); +} + +static pg_wchar +wc_tolower_builtin(pg_wchar wc, pg_locale_t locale) +{ + return unicode_lowercase_simple(wc); +} + +static const struct ctype_methods ctype_methods_builtin = { + .strlower = strlower_builtin, + .strtitle = strtitle_builtin, + .strupper = strupper_builtin, + .strfold = strfold_builtin, + .wc_isdigit = wc_isdigit_builtin, + .wc_isalpha = wc_isalpha_builtin, + .wc_isalnum = wc_isalnum_builtin, + .wc_isupper = wc_isupper_builtin, + .wc_islower = wc_islower_builtin, + .wc_isgraph = wc_isgraph_builtin, + .wc_isprint = wc_isprint_builtin, + .wc_ispunct = wc_ispunct_builtin, + .wc_isspace = wc_isspace_builtin, + .char_is_cased = char_is_cased_builtin, + .wc_tolower = wc_tolower_builtin, + .wc_toupper = wc_toupper_builtin, +}; + pg_locale_t create_pg_locale_builtin(Oid collid, MemoryContext context) { @@ -156,10 +240,11 @@ create_pg_locale_builtin(Oid collid, MemoryContext context) result->info.builtin.locale = MemoryContextStrdup(context, locstr); result->info.builtin.casemap_full = (strcmp(locstr, "PG_UNICODE_FAST") == 0); - result->provider = COLLPROVIDER_BUILTIN; result->deterministic = true; result->collate_is_c = true; result->ctype_is_c = (strcmp(locstr, "C") == 0); + if (!result->ctype_is_c) + result->ctype = &ctype_methods_builtin; return result; } diff --git a/src/backend/utils/adt/pg_locale_icu.c b/src/backend/utils/adt/pg_locale_icu.c index b0c73f2e43d01..96741e08269a4 100644 --- a/src/backend/utils/adt/pg_locale_icu.c +++ b/src/backend/utils/adt/pg_locale_icu.c @@ -48,28 +48,25 @@ #define TEXTBUFLEN 1024 extern pg_locale_t create_pg_locale_icu(Oid collid, MemoryContext context); -extern size_t strlower_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strtitle_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strupper_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strfold_icu(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); #ifdef USE_ICU extern UCollator *pg_ucol_open(const char *loc_str); +static size_t strlower_icu(char *dest, size_t destsize, const char *src, + ssize_t srclen, pg_locale_t locale); +static size_t strtitle_icu(char *dest, size_t destsize, const char *src, + ssize_t srclen, pg_locale_t locale); +static size_t strupper_icu(char *dest, size_t destsize, const char *src, + ssize_t srclen, pg_locale_t locale); +static size_t strfold_icu(char *dest, size_t destsize, const char *src, + ssize_t srclen, pg_locale_t locale); static int strncoll_icu(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2, pg_locale_t locale); static size_t strnxfrm_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale); -static size_t strnxfrm_prefix_icu(char *dest, size_t destsize, - const char *src, ssize_t srclen, - pg_locale_t locale); extern char *get_collation_actual_version_icu(const char *collcollate); typedef int32_t (*ICU_Convert_Func) (UChar *dest, int32_t destCapacity, @@ -124,6 +121,25 @@ static int32_t u_strFoldCase_default(UChar *dest, int32_t destCapacity, const char *locale, UErrorCode *pErrorCode); +static bool +char_is_cased_icu(char ch, pg_locale_t locale) +{ + return IS_HIGHBIT_SET(ch) || + (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); +} + +static pg_wchar +toupper_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_toupper(wc); +} + +static pg_wchar +tolower_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_tolower(wc); +} + static const struct collate_methods collate_methods_icu = { .strncoll = strncoll_icu, .strnxfrm = strnxfrm_icu, @@ -142,6 +158,78 @@ static const struct collate_methods collate_methods_icu_utf8 = { .strxfrm_is_safe = true, }; +static bool +wc_isdigit_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isdigit(wc); +} + +static bool +wc_isalpha_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isalpha(wc); +} + +static bool +wc_isalnum_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isalnum(wc); +} + +static bool +wc_isupper_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isupper(wc); +} + +static bool +wc_islower_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_islower(wc); +} + +static bool +wc_isgraph_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isgraph(wc); +} + +static bool +wc_isprint_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isprint(wc); +} + +static bool +wc_ispunct_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_ispunct(wc); +} + +static bool +wc_isspace_icu(pg_wchar wc, pg_locale_t locale) +{ + return u_isspace(wc); +} + +static const struct ctype_methods ctype_methods_icu = { + .strlower = strlower_icu, + .strtitle = strtitle_icu, + .strupper = strupper_icu, + .strfold = strfold_icu, + .wc_isdigit = wc_isdigit_icu, + .wc_isalpha = wc_isalpha_icu, + .wc_isalnum = wc_isalnum_icu, + .wc_isupper = wc_isupper_icu, + .wc_islower = wc_islower_icu, + .wc_isgraph = wc_isgraph_icu, + .wc_isprint = wc_isprint_icu, + .wc_ispunct = wc_ispunct_icu, + .wc_isspace = wc_isspace_icu, + .char_is_cased = char_is_cased_icu, + .wc_toupper = toupper_icu, + .wc_tolower = tolower_icu, +}; #endif pg_locale_t @@ -204,7 +292,6 @@ create_pg_locale_icu(Oid collid, MemoryContext context) result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct)); result->info.icu.locale = MemoryContextStrdup(context, iculocstr); result->info.icu.ucol = collator; - result->provider = COLLPROVIDER_ICU; result->deterministic = deterministic; result->collate_is_c = false; result->ctype_is_c = false; @@ -212,6 +299,7 @@ create_pg_locale_icu(Oid collid, MemoryContext context) result->collate = &collate_methods_icu_utf8; else result->collate = &collate_methods_icu; + result->ctype = &ctype_methods_icu; return result; #else @@ -385,7 +473,7 @@ make_icu_collator(const char *iculocstr, const char *icurules) } } -size_t +static size_t strlower_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -405,7 +493,7 @@ strlower_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, return result_len; } -size_t +static size_t strtitle_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -425,7 +513,7 @@ strtitle_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, return result_len; } -size_t +static size_t strupper_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -445,7 +533,7 @@ strupper_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, return result_len; } -size_t +static size_t strfold_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { @@ -480,8 +568,6 @@ strncoll_icu_utf8(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2 int result; UErrorCode status; - Assert(locale->provider == COLLPROVIDER_ICU); - Assert(GetDatabaseEncoding() == PG_UTF8); status = U_ZERO_ERROR; @@ -509,8 +595,6 @@ strnxfrm_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, size_t uchar_bsize; Size result_bsize; - Assert(locale->provider == COLLPROVIDER_ICU); - init_icu_converter(); ulen = uchar_length(icu_converter, src, srclen); @@ -555,8 +639,6 @@ strnxfrm_prefix_icu_utf8(char *dest, size_t destsize, uint32_t state[2]; UErrorCode status; - Assert(locale->provider == COLLPROVIDER_ICU); - Assert(GetDatabaseEncoding() == PG_UTF8); uiter_setUTF8(&iter, src, srclen); @@ -755,8 +837,6 @@ strncoll_icu(const char *arg1, ssize_t len1, *uchar2; int result; - Assert(locale->provider == COLLPROVIDER_ICU); - /* if encoding is UTF8, use more efficient strncoll_icu_utf8 */ #ifdef HAVE_UCOL_STRCOLLUTF8 Assert(GetDatabaseEncoding() != PG_UTF8); @@ -805,8 +885,6 @@ strnxfrm_prefix_icu(char *dest, size_t destsize, size_t uchar_bsize; Size result_bsize; - Assert(locale->provider == COLLPROVIDER_ICU); - /* if encoding is UTF8, use more efficient strnxfrm_prefix_icu_utf8 */ Assert(GetDatabaseEncoding() != PG_UTF8); diff --git a/src/backend/utils/adt/pg_locale_libc.c b/src/backend/utils/adt/pg_locale_libc.c index 199857e22dbec..8d88b53c37529 100644 --- a/src/backend/utils/adt/pg_locale_libc.c +++ b/src/backend/utils/adt/pg_locale_libc.c @@ -33,6 +33,46 @@ #include #endif +/* + * For the libc provider, to provide as much functionality as possible on a + * variety of platforms without going so far as to implement everything from + * scratch, we use several implementation strategies depending on the + * situation: + * + * 1. In C/POSIX collations, we use hard-wired code. We can't depend on + * the functions since those will obey LC_CTYPE. Note that these + * collations don't give a fig about multibyte characters. + * + * 2. When working in UTF8 encoding, we use the functions. + * This assumes that every platform uses Unicode codepoints directly + * as the wchar_t representation of Unicode. (XXX: ICU makes this assumption + * even for non-UTF8 encodings, which may be a problem.) On some platforms + * wchar_t is only 16 bits wide, so we have to punt for codepoints > 0xFFFF. + * + * 3. In all other encodings, we use the functions for pg_wchar + * values up to 255, and punt for values above that. This is 100% correct + * only in single-byte encodings such as LATINn. However, non-Unicode + * multibyte encodings are mostly Far Eastern character sets for which the + * properties being tested here aren't very relevant for higher code values + * anyway. The difficulty with using the functions with + * non-Unicode multibyte encodings is that we can have no certainty that + * the platform's wchar_t representation matches what we do in pg_wchar + * conversions. + * + * As a special case, in the "default" collation, (2) and (3) force ASCII + * letters to follow ASCII upcase/downcase rules, while in a non-default + * collation we just let the library functions do what they will. The case + * where this matters is treatment of I/i in Turkish, and the behavior is + * meant to match the upper()/lower() SQL functions. + * + * We store the active collation setting in static variables. In principle + * it could be passed down to here via the regex library's "struct vars" data + * structure; but that would require somewhat invasive changes in the regex + * library, and right now there's no real benefit to be gained from that. + * + * NB: the coding here assumes pg_wchar is an unsigned type. + */ + /* * Size of stack buffer to use for string transformations, used to avoid heap * allocations in typical cases. This should be large enough that most strings @@ -43,13 +83,6 @@ extern pg_locale_t create_pg_locale_libc(Oid collid, MemoryContext context); -extern size_t strlower_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strtitle_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); -extern size_t strupper_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale); - static int strncoll_libc(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2, pg_locale_t locale); @@ -85,6 +118,251 @@ static size_t strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale); +static bool +wc_isdigit_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isdigit_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isalpha_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isalpha_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isalnum_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isalnum_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isupper_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isupper_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_islower_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return islower_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isgraph_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isgraph_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isprint_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isprint_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_ispunct_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return ispunct_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isspace_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + return isspace_l((unsigned char) wc, locale->info.lt); +} + +static bool +wc_isdigit_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswdigit_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_isalpha_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswalpha_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_isalnum_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswalnum_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_isupper_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswupper_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_islower_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswlower_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_isgraph_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswgraph_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_isprint_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswprint_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_ispunct_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswpunct_l((wint_t) wc, locale->info.lt); +} + +static bool +wc_isspace_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + return iswspace_l((wint_t) wc, locale->info.lt); +} + +static char +char_tolower_libc(unsigned char ch, pg_locale_t locale) +{ + Assert(pg_database_encoding_max_length() == 1); + return tolower_l(ch, locale->info.lt); +} + +static bool +char_is_cased_libc(char ch, pg_locale_t locale) +{ + bool is_multibyte = pg_database_encoding_max_length() > 1; + + if (is_multibyte && IS_HIGHBIT_SET(ch)) + return true; + else + return isalpha_l((unsigned char) ch, locale->info.lt); +} + +static pg_wchar +toupper_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + Assert(GetDatabaseEncoding() != PG_UTF8); + + /* force C behavior for ASCII characters, per comments above */ + if (locale->is_default && wc <= (pg_wchar) 127) + return pg_ascii_toupper((unsigned char) wc); + if (wc <= (pg_wchar) UCHAR_MAX) + return toupper_l((unsigned char) wc, locale->info.lt); + else + return wc; +} + +static pg_wchar +toupper_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + Assert(GetDatabaseEncoding() == PG_UTF8); + + /* force C behavior for ASCII characters, per comments above */ + if (locale->is_default && wc <= (pg_wchar) 127) + return pg_ascii_toupper((unsigned char) wc); + if (sizeof(wchar_t) >= 4 || wc <= (pg_wchar) 0xFFFF) + return towupper_l((wint_t) wc, locale->info.lt); + else + return wc; +} + +static pg_wchar +tolower_libc_sb(pg_wchar wc, pg_locale_t locale) +{ + Assert(GetDatabaseEncoding() != PG_UTF8); + + /* force C behavior for ASCII characters, per comments above */ + if (locale->is_default && wc <= (pg_wchar) 127) + return pg_ascii_tolower((unsigned char) wc); + if (wc <= (pg_wchar) UCHAR_MAX) + return tolower_l((unsigned char) wc, locale->info.lt); + else + return wc; +} + +static pg_wchar +tolower_libc_mb(pg_wchar wc, pg_locale_t locale) +{ + Assert(GetDatabaseEncoding() == PG_UTF8); + + /* force C behavior for ASCII characters, per comments above */ + if (locale->is_default && wc <= (pg_wchar) 127) + return pg_ascii_tolower((unsigned char) wc); + if (sizeof(wchar_t) >= 4 || wc <= (pg_wchar) 0xFFFF) + return towlower_l((wint_t) wc, locale->info.lt); + else + return wc; +} + +static const struct ctype_methods ctype_methods_libc_sb = { + .strlower = strlower_libc_sb, + .strtitle = strtitle_libc_sb, + .strupper = strupper_libc_sb, + .wc_isdigit = wc_isdigit_libc_sb, + .wc_isalpha = wc_isalpha_libc_sb, + .wc_isalnum = wc_isalnum_libc_sb, + .wc_isupper = wc_isupper_libc_sb, + .wc_islower = wc_islower_libc_sb, + .wc_isgraph = wc_isgraph_libc_sb, + .wc_isprint = wc_isprint_libc_sb, + .wc_ispunct = wc_ispunct_libc_sb, + .wc_isspace = wc_isspace_libc_sb, + .char_is_cased = char_is_cased_libc, + .char_tolower = char_tolower_libc, + .wc_toupper = toupper_libc_sb, + .wc_tolower = tolower_libc_sb, + .max_chr = UCHAR_MAX, +}; + +/* + * Non-UTF8 multibyte encodings use multibyte semantics for case mapping, but + * single-byte semantics for pattern matching. + */ +static const struct ctype_methods ctype_methods_libc_other_mb = { + .strlower = strlower_libc_mb, + .strtitle = strtitle_libc_mb, + .strupper = strupper_libc_mb, + .wc_isdigit = wc_isdigit_libc_sb, + .wc_isalpha = wc_isalpha_libc_sb, + .wc_isalnum = wc_isalnum_libc_sb, + .wc_isupper = wc_isupper_libc_sb, + .wc_islower = wc_islower_libc_sb, + .wc_isgraph = wc_isgraph_libc_sb, + .wc_isprint = wc_isprint_libc_sb, + .wc_ispunct = wc_ispunct_libc_sb, + .wc_isspace = wc_isspace_libc_sb, + .char_is_cased = char_is_cased_libc, + .char_tolower = char_tolower_libc, + .wc_toupper = toupper_libc_sb, + .wc_tolower = tolower_libc_sb, + .max_chr = UCHAR_MAX, +}; + +static const struct ctype_methods ctype_methods_libc_utf8 = { + .strlower = strlower_libc_mb, + .strtitle = strtitle_libc_mb, + .strupper = strupper_libc_mb, + .wc_isdigit = wc_isdigit_libc_mb, + .wc_isalpha = wc_isalpha_libc_mb, + .wc_isalnum = wc_isalnum_libc_mb, + .wc_isupper = wc_isupper_libc_mb, + .wc_islower = wc_islower_libc_mb, + .wc_isgraph = wc_isgraph_libc_mb, + .wc_isprint = wc_isprint_libc_mb, + .wc_ispunct = wc_ispunct_libc_mb, + .wc_isspace = wc_isspace_libc_mb, + .char_is_cased = char_is_cased_libc, + .char_tolower = char_tolower_libc, + .wc_toupper = toupper_libc_mb, + .wc_tolower = tolower_libc_mb, +}; + static const struct collate_methods collate_methods_libc = { .strncoll = strncoll_libc, .strnxfrm = strnxfrm_libc, @@ -119,36 +397,6 @@ static const struct collate_methods collate_methods_libc_win32_utf8 = { }; #endif -size_t -strlower_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale) -{ - if (pg_database_encoding_max_length() > 1) - return strlower_libc_mb(dst, dstsize, src, srclen, locale); - else - return strlower_libc_sb(dst, dstsize, src, srclen, locale); -} - -size_t -strtitle_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale) -{ - if (pg_database_encoding_max_length() > 1) - return strtitle_libc_mb(dst, dstsize, src, srclen, locale); - else - return strtitle_libc_sb(dst, dstsize, src, srclen, locale); -} - -size_t -strupper_libc(char *dst, size_t dstsize, const char *src, - ssize_t srclen, pg_locale_t locale) -{ - if (pg_database_encoding_max_length() > 1) - return strupper_libc_mb(dst, dstsize, src, srclen, locale); - else - return strupper_libc_sb(dst, dstsize, src, srclen, locale); -} - static size_t strlower_libc_sb(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) @@ -209,7 +457,7 @@ strlower_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, /* Output workspace cannot have more codes than input bytes */ workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t)); - char2wchar(workspace, srclen + 1, src, srclen, locale); + char2wchar(workspace, srclen + 1, src, srclen, loc); for (curr_char = 0; workspace[curr_char] != 0; curr_char++) workspace[curr_char] = towlower_l(workspace[curr_char], loc); @@ -220,7 +468,7 @@ strlower_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, max_size = curr_char * pg_database_encoding_max_length(); result = palloc(max_size + 1); - result_size = wchar2char(result, workspace, max_size + 1, locale); + result_size = wchar2char(result, workspace, max_size + 1, loc); if (result_size + 1 > destsize) return result_size; @@ -304,7 +552,7 @@ strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, /* Output workspace cannot have more codes than input bytes */ workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t)); - char2wchar(workspace, srclen + 1, src, srclen, locale); + char2wchar(workspace, srclen + 1, src, srclen, loc); for (curr_char = 0; workspace[curr_char] != 0; curr_char++) { @@ -321,7 +569,7 @@ strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, max_size = curr_char * pg_database_encoding_max_length(); result = palloc(max_size + 1); - result_size = wchar2char(result, workspace, max_size + 1, locale); + result_size = wchar2char(result, workspace, max_size + 1, loc); if (result_size + 1 > destsize) return result_size; @@ -392,7 +640,7 @@ strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, /* Output workspace cannot have more codes than input bytes */ workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t)); - char2wchar(workspace, srclen + 1, src, srclen, locale); + char2wchar(workspace, srclen + 1, src, srclen, loc); for (curr_char = 0; workspace[curr_char] != 0; curr_char++) workspace[curr_char] = towupper_l(workspace[curr_char], loc); @@ -403,7 +651,7 @@ strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, max_size = curr_char * pg_database_encoding_max_length(); result = palloc(max_size + 1); - result_size = wchar2char(result, workspace, max_size + 1, locale); + result_size = wchar2char(result, workspace, max_size + 1, loc); if (result_size + 1 > destsize) return result_size; @@ -465,7 +713,6 @@ create_pg_locale_libc(Oid collid, MemoryContext context) loc = make_libc_collator(collate, ctype); result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct)); - result->provider = COLLPROVIDER_LIBC; result->deterministic = true; result->collate_is_c = (strcmp(collate, "C") == 0) || (strcmp(collate, "POSIX") == 0); @@ -481,6 +728,15 @@ create_pg_locale_libc(Oid collid, MemoryContext context) #endif result->collate = &collate_methods_libc; } + if (!result->ctype_is_c) + { + if (GetDatabaseEncoding() == PG_UTF8) + result->ctype = &ctype_methods_libc_utf8; + else if (pg_database_encoding_max_length() > 1) + result->ctype = &ctype_methods_libc_other_mb; + else + result->ctype = &ctype_methods_libc_sb; + } return result; } @@ -576,8 +832,6 @@ strncoll_libc(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2, const char *arg2n; int result; - Assert(locale->provider == COLLPROVIDER_LIBC); - if (bufsize1 + bufsize2 > TEXTBUFLEN) buf = palloc(bufsize1 + bufsize2); @@ -632,8 +886,6 @@ strnxfrm_libc(char *dest, size_t destsize, const char *src, ssize_t srclen, size_t bufsize = srclen + 1; size_t result; - Assert(locale->provider == COLLPROVIDER_LIBC); - if (srclen == -1) return strxfrm_l(dest, src, destsize, locale->info.lt); @@ -742,7 +994,6 @@ strncoll_libc_win32_utf8(const char *arg1, ssize_t len1, const char *arg2, int r; int result; - Assert(locale->provider == COLLPROVIDER_LIBC); Assert(GetDatabaseEncoding() == PG_UTF8); if (len1 == -1) @@ -879,7 +1130,7 @@ wcstombs_l(char *dest, const wchar_t *src, size_t n, locale_t loc) * zero-terminated. The output will be zero-terminated iff there is room. */ size_t -wchar2char(char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) +wchar2char(char *to, const wchar_t *from, size_t tolen, locale_t loc) { size_t result; @@ -909,7 +1160,7 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) } else #endif /* WIN32 */ - if (locale == (pg_locale_t) 0) + if (loc == (locale_t) 0) { /* Use wcstombs directly for the default locale */ result = wcstombs(to, from, tolen); @@ -917,7 +1168,7 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) else { /* Use wcstombs_l for nondefault locales */ - result = wcstombs_l(to, from, tolen, locale->info.lt); + result = wcstombs_l(to, from, tolen, loc); } return result; @@ -934,7 +1185,7 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) */ size_t char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen, - pg_locale_t locale) + locale_t loc) { size_t result; @@ -969,7 +1220,7 @@ char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen, /* mbstowcs requires ending '\0' */ char *str = pnstrdup(from, fromlen); - if (locale == (pg_locale_t) 0) + if (loc == (locale_t) 0) { /* Use mbstowcs directly for the default locale */ result = mbstowcs(to, str, tolen); @@ -977,7 +1228,7 @@ char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen, else { /* Use mbstowcs_l for nondefault locales */ - result = mbstowcs_l(to, str, tolen, locale->info.lt); + result = mbstowcs_l(to, str, tolen, loc); } pfree(str); diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c index 16311590a14a0..12de2446f5b69 100644 --- a/src/backend/utils/adt/pg_lsn.c +++ b/src/backend/utils/adt/pg_lsn.c @@ -83,7 +83,7 @@ pg_lsn_out(PG_FUNCTION_ARGS) char buf[MAXPG_LSNLEN + 1]; char *result; - snprintf(buf, sizeof buf, "%X/%X", LSN_FORMAT_ARGS(lsn)); + snprintf(buf, sizeof buf, "%X/%08X", LSN_FORMAT_ARGS(lsn)); result = pstrdup(buf); PG_RETURN_CSTRING(result); } diff --git a/src/backend/utils/adt/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c index d44f8c262baa2..a4f8b4faa90dc 100644 --- a/src/backend/utils/adt/pg_upgrade_support.c +++ b/src/backend/utils/adt/pg_upgrade_support.c @@ -21,6 +21,7 @@ #include "commands/extension.h" #include "miscadmin.h" #include "replication/logical.h" +#include "replication/logicallauncher.h" #include "replication/origin.h" #include "replication/worker_internal.h" #include "storage/lmgr.h" @@ -410,3 +411,21 @@ binary_upgrade_replorigin_advance(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } + +/* + * binary_upgrade_create_conflict_detection_slot + * + * Create a replication slot to retain information necessary for conflict + * detection such as dead tuples, commit timestamps, and origins. + */ +Datum +binary_upgrade_create_conflict_detection_slot(PG_FUNCTION_ARGS) +{ + CHECK_IS_BINARY_UPGRADE; + + CreateConflictDetectionSlot(); + + ReplicationSlotRelease(); + + PG_RETURN_VOID(); +} diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 97af7c6554ff3..c756c2bebaaa0 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -640,10 +640,10 @@ pg_stat_get_activity(PG_FUNCTION_ARGS) values[28] = BoolGetDatum(false); /* GSS credentials not * delegated */ } - if (beentry->st_query_id == 0) + if (beentry->st_query_id == INT64CONST(0)) nulls[30] = true; else - values[30] = UInt64GetDatum(beentry->st_query_id); + values[30] = Int64GetDatum(beentry->st_query_id); } else { @@ -1510,7 +1510,7 @@ pg_stat_io_build_tuples(ReturnSetInfo *rsinfo, bktype_stats->bytes[io_obj][io_context][io_op]; /* Convert to numeric */ - snprintf(buf, sizeof buf, UINT64_FORMAT, byte); + snprintf(buf, sizeof buf, INT64_FORMAT, byte); values[byte_idx] = DirectFunctionCall3(numeric_in, CStringGetDatum(buf), ObjectIdGetDatum(0), @@ -2171,7 +2171,7 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS) Datum pg_stat_get_subscription_stats(PG_FUNCTION_ARGS) { -#define PG_STAT_GET_SUBSCRIPTION_STATS_COLS 11 +#define PG_STAT_GET_SUBSCRIPTION_STATS_COLS 12 Oid subid = PG_GETARG_OID(0); TupleDesc tupdesc; Datum values[PG_STAT_GET_SUBSCRIPTION_STATS_COLS] = {0}; @@ -2197,15 +2197,17 @@ pg_stat_get_subscription_stats(PG_FUNCTION_ARGS) INT8OID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 6, "confl_update_exists", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 7, "confl_update_missing", + TupleDescInitEntry(tupdesc, (AttrNumber) 7, "confl_update_deleted", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 8, "confl_delete_origin_differs", + TupleDescInitEntry(tupdesc, (AttrNumber) 8, "confl_update_missing", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 9, "confl_delete_missing", + TupleDescInitEntry(tupdesc, (AttrNumber) 9, "confl_delete_origin_differs", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 10, "confl_multiple_unique_conflicts", + TupleDescInitEntry(tupdesc, (AttrNumber) 10, "confl_delete_missing", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 11, "stats_reset", + TupleDescInitEntry(tupdesc, (AttrNumber) 11, "confl_multiple_unique_conflicts", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 12, "stats_reset", TIMESTAMPTZOID, -1, 0); BlessTupleDesc(tupdesc); diff --git a/src/backend/utils/adt/quote.c b/src/backend/utils/adt/quote.c index 677efb93e8d07..551de59a07f35 100644 --- a/src/backend/utils/adt/quote.c +++ b/src/backend/utils/adt/quote.c @@ -108,7 +108,12 @@ quote_literal_cstr(const char *rawstr) len = strlen(rawstr); /* We make a worst-case result area; wasting a little space is OK */ - result = palloc(len * 2 + 3 + 1); + result = palloc( + (len * 2) /* doubling for every character if each one is + * a quote */ + + 3 /* two outer quotes + possibly 'E' if needed */ + + 1 /* null terminator */ + ); newlen = quote_literal_internal(result, rawstr, len); result[newlen] = '\0'; diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c index 5f9fb23871aac..18e467bccd3a0 100644 --- a/src/backend/utils/adt/rangetypes.c +++ b/src/backend/utils/adt/rangetypes.c @@ -43,6 +43,7 @@ #include "utils/date.h" #include "utils/lsyscache.h" #include "utils/rangetypes.h" +#include "utils/sortsupport.h" #include "utils/timestamp.h" @@ -57,6 +58,7 @@ typedef struct RangeIOData static RangeIOData *get_range_io_data(FunctionCallInfo fcinfo, Oid rngtypid, IOFuncSelector func); +static int range_fast_cmp(Datum a, Datum b, SortSupport ssup); static char range_parse_flags(const char *flags_str); static bool range_parse(const char *string, char *flags, char **lbound_str, char **ubound_str, Node *escontext); @@ -283,8 +285,7 @@ range_send(PG_FUNCTION_ARGS) if (RANGE_HAS_LBOUND(flags)) { - Datum bound = PointerGetDatum(SendFunctionCall(&cache->typioproc, - lower.val)); + bytea *bound = SendFunctionCall(&cache->typioproc, lower.val); uint32 bound_len = VARSIZE(bound) - VARHDRSZ; char *bound_data = VARDATA(bound); @@ -294,8 +295,7 @@ range_send(PG_FUNCTION_ARGS) if (RANGE_HAS_UBOUND(flags)) { - Datum bound = PointerGetDatum(SendFunctionCall(&cache->typioproc, - upper.val)); + bytea *bound = SendFunctionCall(&cache->typioproc, upper.val); uint32 bound_len = VARSIZE(bound) - VARHDRSZ; char *bound_data = VARDATA(bound); @@ -1075,8 +1075,8 @@ range_union_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2, return r1; if (strict && - !DatumGetBool(range_overlaps_internal(typcache, r1, r2)) && - !DatumGetBool(range_adjacent_internal(typcache, r1, r2))) + !range_overlaps_internal(typcache, r1, r2) && + !range_adjacent_internal(typcache, r1, r2)) ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("result of range union would not be contiguous"))); @@ -1290,11 +1290,73 @@ range_cmp(PG_FUNCTION_ARGS) PG_RETURN_INT32(cmp); } +/* Sort support strategy routine */ +Datum +range_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = range_fast_cmp; + ssup->ssup_extra = NULL; + + PG_RETURN_VOID(); +} + +/* like range_cmp, but uses the new sortsupport interface */ +static int +range_fast_cmp(Datum a, Datum b, SortSupport ssup) +{ + RangeType *range_a = DatumGetRangeTypeP(a); + RangeType *range_b = DatumGetRangeTypeP(b); + TypeCacheEntry *typcache; + RangeBound lower1, + lower2; + RangeBound upper1, + upper2; + bool empty1, + empty2; + int cmp; + + /* cache the range info between calls */ + if (ssup->ssup_extra == NULL) + { + Assert(RangeTypeGetOid(range_a) == RangeTypeGetOid(range_b)); + ssup->ssup_extra = + lookup_type_cache(RangeTypeGetOid(range_a), TYPECACHE_RANGE_INFO); + } + typcache = ssup->ssup_extra; + + range_deserialize(typcache, range_a, &lower1, &upper1, &empty1); + range_deserialize(typcache, range_b, &lower2, &upper2, &empty2); + + /* For b-tree use, empty ranges sort before all else */ + if (empty1 && empty2) + cmp = 0; + else if (empty1) + cmp = -1; + else if (empty2) + cmp = 1; + else + { + cmp = range_cmp_bounds(typcache, &lower1, &lower2); + if (cmp == 0) + cmp = range_cmp_bounds(typcache, &upper1, &upper2); + } + + if ((Pointer) range_a != DatumGetPointer(a)) + pfree(range_a); + if ((Pointer) range_b != DatumGetPointer(b)) + pfree(range_b); + + return cmp; +} + + /* inequality operators using the range_cmp function */ Datum range_lt(PG_FUNCTION_ARGS) { - int cmp = range_cmp(fcinfo); + int cmp = DatumGetInt32(range_cmp(fcinfo)); PG_RETURN_BOOL(cmp < 0); } @@ -1302,7 +1364,7 @@ range_lt(PG_FUNCTION_ARGS) Datum range_le(PG_FUNCTION_ARGS) { - int cmp = range_cmp(fcinfo); + int cmp = DatumGetInt32(range_cmp(fcinfo)); PG_RETURN_BOOL(cmp <= 0); } @@ -1310,7 +1372,7 @@ range_le(PG_FUNCTION_ARGS) Datum range_ge(PG_FUNCTION_ARGS) { - int cmp = range_cmp(fcinfo); + int cmp = DatumGetInt32(range_cmp(fcinfo)); PG_RETURN_BOOL(cmp >= 0); } @@ -1318,7 +1380,7 @@ range_ge(PG_FUNCTION_ARGS) Datum range_gt(PG_FUNCTION_ARGS) { - int cmp = range_cmp(fcinfo); + int cmp = DatumGetInt32(range_cmp(fcinfo)); PG_RETURN_BOOL(cmp > 0); } @@ -1380,7 +1442,7 @@ hash_range(PG_FUNCTION_ARGS) upper_hash = 0; /* Merge hashes of flags and bounds */ - result = hash_uint32((uint32) flags); + result = hash_bytes_uint32((uint32) flags); result ^= lower_hash; result = pg_rotate_left32(result, 1); result ^= upper_hash; diff --git a/src/backend/utils/adt/rangetypes_spgist.c b/src/backend/utils/adt/rangetypes_spgist.c index 9b6d7061a1812..be51965488088 100644 --- a/src/backend/utils/adt/rangetypes_spgist.c +++ b/src/backend/utils/adt/rangetypes_spgist.c @@ -757,7 +757,7 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS) * because it's range */ previousCentroid = datumCopy(in->prefixDatum, false, -1); - out->traversalValues[out->nNodes] = (void *) previousCentroid; + out->traversalValues[out->nNodes] = DatumGetPointer(previousCentroid); } out->nodeNumbers[out->nNodes] = i - 1; out->nNodes++; diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c index a18196d8a34a5..36e885af2dd17 100644 --- a/src/backend/utils/adt/rangetypes_typanalyze.c +++ b/src/backend/utils/adt/rangetypes_typanalyze.c @@ -397,7 +397,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, stats->numvalues[slot_idx] = num_hist; stats->statypid[slot_idx] = FLOAT8OID; stats->statyplen[slot_idx] = sizeof(float8); - stats->statypbyval[slot_idx] = FLOAT8PASSBYVAL; + stats->statypbyval[slot_idx] = true; stats->statypalign[slot_idx] = 'd'; /* Store the fraction of empty ranges */ diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index edee1f7880bde..6e2864cbbda8c 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -773,8 +773,11 @@ similar_escape_internal(text *pat_text, text *esc_text) int plen, elen; bool afterescape = false; - bool incharclass = false; int nquotes = 0; + int charclass_depth = 0; /* Nesting level of character classes, + * encompassed by square brackets */ + int charclass_start = 0; /* State of the character class start, + * for carets */ p = VARDATA_ANY(pat_text); plen = VARSIZE_ANY_EXHDR(pat_text); @@ -904,7 +907,7 @@ similar_escape_internal(text *pat_text, text *esc_text) /* fast path */ if (afterescape) { - if (pchar == '"' && !incharclass) /* escape-double-quote? */ + if (pchar == '"' && charclass_depth < 1) /* escape-double-quote? */ { /* emit appropriate part separator, per notes above */ if (nquotes == 0) @@ -953,18 +956,41 @@ similar_escape_internal(text *pat_text, text *esc_text) /* SQL escape character; do not send to output */ afterescape = true; } - else if (incharclass) + else if (charclass_depth > 0) { if (pchar == '\\') *r++ = '\\'; *r++ = pchar; - if (pchar == ']') - incharclass = false; + + /* + * Ignore a closing bracket at the start of a character class. + * Such a bracket is taken literally rather than closing the + * class. "charclass_start" is 1 right at the beginning of a + * class and 2 after an initial caret. + */ + if (pchar == ']' && charclass_start > 2) + charclass_depth--; + else if (pchar == '[') + charclass_depth++; + + /* + * If there is a caret right after the opening bracket, it negates + * the character class, but a following closing bracket should + * still be treated as a normal character. That holds only for + * the first caret, so only the values 1 and 2 mean that closing + * brackets should be taken literally. + */ + if (pchar == '^') + charclass_start++; + else + charclass_start = 3; /* definitely past the start */ } else if (pchar == '[') { + /* start of a character class */ *r++ = pchar; - incharclass = true; + charclass_depth++; + charclass_start = 1; } else if (pchar == '%') { diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index 5ee608a2b3921..af17a3421a02d 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -25,6 +25,7 @@ #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "catalog/pg_collation.h" +#include "catalog/pg_database.h" #include "catalog/pg_operator.h" #include "catalog/pg_proc.h" #include "catalog/pg_ts_config.h" @@ -1763,6 +1764,123 @@ regnamespacesend(PG_FUNCTION_ARGS) return oidsend(fcinfo); } +/* + * regdatabasein - converts database name to database OID + * + * We also accept a numeric OID, for symmetry with the output routine. + * + * '-' signifies unknown (OID 0). In all other cases, the input must + * match an existing pg_database entry. + */ +Datum +regdatabasein(PG_FUNCTION_ARGS) +{ + char *db_name_or_oid = PG_GETARG_CSTRING(0); + Node *escontext = fcinfo->context; + Oid result; + List *names; + + /* Handle "-" or numeric OID */ + if (parseDashOrOid(db_name_or_oid, &result, escontext)) + PG_RETURN_OID(result); + + /* The rest of this wouldn't work in bootstrap mode */ + if (IsBootstrapProcessingMode()) + elog(ERROR, "regdatabase values must be OIDs in bootstrap mode"); + + /* Normal case: see if the name matches any pg_database entry. */ + names = stringToQualifiedNameList(db_name_or_oid, escontext); + if (names == NIL) + PG_RETURN_NULL(); + + if (list_length(names) != 1) + ereturn(escontext, (Datum) 0, + (errcode(ERRCODE_INVALID_NAME), + errmsg("invalid name syntax"))); + + result = get_database_oid(strVal(linitial(names)), true); + + if (!OidIsValid(result)) + ereturn(escontext, (Datum) 0, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("database \"%s\" does not exist", + strVal(linitial(names))))); + + PG_RETURN_OID(result); +} + +/* + * to_regdatabase - converts database name to database OID + * + * If the name is not found, we return NULL. + */ +Datum +to_regdatabase(PG_FUNCTION_ARGS) +{ + char *db_name = text_to_cstring(PG_GETARG_TEXT_PP(0)); + Datum result; + ErrorSaveContext escontext = {T_ErrorSaveContext}; + + if (!DirectInputFunctionCallSafe(regdatabasein, db_name, + InvalidOid, -1, + (Node *) &escontext, + &result)) + PG_RETURN_NULL(); + PG_RETURN_DATUM(result); +} + +/* + * regdatabaseout - converts database OID to database name + */ +Datum +regdatabaseout(PG_FUNCTION_ARGS) +{ + Oid dboid = PG_GETARG_OID(0); + char *result; + + if (dboid == InvalidOid) + { + result = pstrdup("-"); + PG_RETURN_CSTRING(result); + } + + result = get_database_name(dboid); + + if (result) + { + /* pstrdup is not really necessary, but it avoids a compiler warning */ + result = pstrdup(quote_identifier(result)); + } + else + { + /* If OID doesn't match any database, return it numerically */ + result = (char *) palloc(NAMEDATALEN); + snprintf(result, NAMEDATALEN, "%u", dboid); + } + + PG_RETURN_CSTRING(result); +} + +/* + * regdatabaserecv - converts external binary format to regdatabase + */ +Datum +regdatabaserecv(PG_FUNCTION_ARGS) +{ + /* Exactly the same as oidrecv, so share code */ + return oidrecv(fcinfo); +} + +/* + * regdatabasesend - converts regdatabase to binary format + */ +Datum +regdatabasesend(PG_FUNCTION_ARGS) +{ + /* Exactly the same as oidsend, so share code */ + return oidsend(fcinfo); +} + /* * text_regclass: convert text to regclass * diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index c4ff18ce65ebe..059fc5ebf601a 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -30,7 +30,6 @@ #include "access/xact.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" -#include "catalog/pg_proc.h" #include "commands/trigger.h" #include "executor/executor.h" #include "executor/spi.h" @@ -46,7 +45,6 @@ #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/memutils.h" -#include "utils/rangetypes.h" #include "utils/rel.h" #include "utils/rls.h" #include "utils/ruleutils.h" @@ -428,13 +426,13 @@ RI_FKey_check(TriggerData *trigdata) { Oid fk_type = RIAttType(fk_rel, riinfo->fk_attnums[riinfo->nkeys - 1]); - appendStringInfo(&querybuf, ") x1 HAVING "); + appendStringInfoString(&querybuf, ") x1 HAVING "); sprintf(paramname, "$%d", riinfo->nkeys); ri_GenerateQual(&querybuf, "", paramname, fk_type, riinfo->agged_period_contained_by_oper, "pg_catalog.range_agg", ANYMULTIRANGEOID); - appendStringInfo(&querybuf, "(x1.r)"); + appendStringInfoString(&querybuf, "(x1.r)"); } /* Prepare and save the plan */ @@ -597,13 +595,13 @@ ri_Check_Pk_Match(Relation pk_rel, Relation fk_rel, { Oid fk_type = RIAttType(fk_rel, riinfo->fk_attnums[riinfo->nkeys - 1]); - appendStringInfo(&querybuf, ") x1 HAVING "); + appendStringInfoString(&querybuf, ") x1 HAVING "); sprintf(paramname, "$%d", riinfo->nkeys); ri_GenerateQual(&querybuf, "", paramname, fk_type, riinfo->agged_period_contained_by_oper, "pg_catalog.range_agg", ANYMULTIRANGEOID); - appendStringInfo(&querybuf, "(x1.r)"); + appendStringInfoString(&querybuf, "(x1.r)"); } /* Prepare and save the plan */ @@ -838,12 +836,12 @@ ri_restrict(TriggerData *trigdata, bool is_no_action) /* Intersect the fk with the old pk range */ initStringInfo(&intersectbuf); - appendStringInfoString(&intersectbuf, "("); + appendStringInfoChar(&intersectbuf, '('); ri_GenerateQual(&intersectbuf, "", attname, fk_period_type, riinfo->period_intersect_oper, paramname, pk_period_type); - appendStringInfoString(&intersectbuf, ")"); + appendStringInfoChar(&intersectbuf, ')'); /* Find the remaining history */ initStringInfo(&replacementsbuf); diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c index fe5edc0027da3..9e5449f17d7c0 100644 --- a/src/backend/utils/adt/rowtypes.c +++ b/src/backend/utils/adt/rowtypes.c @@ -1529,9 +1529,9 @@ record_image_cmp(FunctionCallInfo fcinfo) if ((cmpresult == 0) && (len1 != len2)) cmpresult = (len1 < len2) ? -1 : 1; - if ((Pointer) arg1val != (Pointer) values1[i1]) + if ((Pointer) arg1val != DatumGetPointer(values1[i1])) pfree(arg1val); - if ((Pointer) arg2val != (Pointer) values2[i2]) + if ((Pointer) arg2val != DatumGetPointer(values2[i2])) pfree(arg2val); } else diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 9e90acedb9197..3d6e6bdbfd21b 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -5956,9 +5956,19 @@ get_select_query_def(Query *query, deparse_context *context) { if (query->limitOption == LIMIT_OPTION_WITH_TIES) { + /* + * The limitCount arg is a c_expr, so it needs parens. Simple + * literals and function expressions would not need parens, but + * unfortunately it's hard to tell if the expression will be + * printed as a simple literal like 123 or as a typecast + * expression, like '-123'::int4. The grammar accepts the former + * without quoting, but not the latter. + */ appendContextKeyword(context, " FETCH FIRST ", -PRETTYINDENT_STD, PRETTYINDENT_STD, 0); + appendStringInfoChar(buf, '('); get_rule_expr(query->limitCount, context, false); + appendStringInfoChar(buf, ')'); appendStringInfoString(buf, " ROWS WITH TIES"); } else @@ -12122,7 +12132,7 @@ get_json_table_columns(TableFunc *tf, JsonTablePathScan *scan, /* * Set default_behavior to guide get_json_expr_options() on whether to - * to emit the ON ERROR / EMPTY clauses. + * emit the ON ERROR / EMPTY clauses. */ if (colexpr->op == JSON_EXISTS_OP) { diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 5b35debc8ffdb..1c480cfaaf781 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -103,7 +103,6 @@ #include "access/table.h" #include "access/tableam.h" #include "access/visibilitymap.h" -#include "catalog/pg_am.h" #include "catalog/pg_collation.h" #include "catalog/pg_operator.h" #include "catalog/pg_statistic.h" @@ -193,6 +192,8 @@ static double convert_timevalue_to_scalar(Datum value, Oid typid, bool *failure); static void examine_simple_variable(PlannerInfo *root, Var *var, VariableStatData *vardata); +static void examine_indexcol_variable(PlannerInfo *root, IndexOptInfo *index, + int indexcol, VariableStatData *vardata); static bool get_variable_range(PlannerInfo *root, VariableStatData *vardata, Oid sortop, Oid collation, Datum *min, Datum *max); @@ -214,6 +215,8 @@ static bool get_actual_variable_endpoint(Relation heapRel, MemoryContext outercontext, Datum *endpointDatum); static RelOptInfo *find_join_input_rel(PlannerInfo *root, Relids relids); +static double btcost_correlation(IndexOptInfo *index, + VariableStatData *vardata); /* @@ -2943,7 +2946,7 @@ scalargejoinsel(PG_FUNCTION_ARGS) * first join pair is found, which will affect the join's startup time. * * clause should be a clause already known to be mergejoinable. opfamily, - * strategy, and nulls_first specify the sort ordering being used. + * cmptype, and nulls_first specify the sort ordering being used. * * The outputs are: * *leftstart is set to the fraction of the left-hand variable expected @@ -2954,7 +2957,7 @@ scalargejoinsel(PG_FUNCTION_ARGS) */ void mergejoinscansel(PlannerInfo *root, Node *clause, - Oid opfamily, int strategy, bool nulls_first, + Oid opfamily, CompareType cmptype, bool nulls_first, Selectivity *leftstart, Selectivity *leftend, Selectivity *rightstart, Selectivity *rightend) { @@ -2962,6 +2965,7 @@ mergejoinscansel(PlannerInfo *root, Node *clause, *right; VariableStatData leftvar, rightvar; + Oid opmethod; int op_strategy; Oid op_lefttype; Oid op_righttype; @@ -2975,6 +2979,10 @@ mergejoinscansel(PlannerInfo *root, Node *clause, leop, revltop, revleop; + StrategyNumber ltstrat, + lestrat, + gtstrat, + gestrat; bool isgt; Datum leftmin, leftmax, @@ -3001,12 +3009,14 @@ mergejoinscansel(PlannerInfo *root, Node *clause, examine_variable(root, left, 0, &leftvar); examine_variable(root, right, 0, &rightvar); + opmethod = get_opfamily_method(opfamily); + /* Extract the operator's declared left/right datatypes */ get_op_opfamily_properties(opno, opfamily, false, &op_strategy, &op_lefttype, &op_righttype); - Assert(op_strategy == BTEqualStrategyNumber); + Assert(IndexAmTranslateStrategy(op_strategy, opmethod, opfamily, true) == COMPARE_EQ); /* * Look up the various operators we need. If we don't find them all, it @@ -3015,19 +3025,21 @@ mergejoinscansel(PlannerInfo *root, Node *clause, * Note: we expect that pg_statistic histograms will be sorted by the '<' * operator, regardless of which sort direction we are considering. */ - switch (strategy) + switch (cmptype) { - case BTLessStrategyNumber: + case COMPARE_LT: isgt = false; + ltstrat = IndexAmTranslateCompareType(COMPARE_LT, opmethod, opfamily, true); + lestrat = IndexAmTranslateCompareType(COMPARE_LE, opmethod, opfamily, true); if (op_lefttype == op_righttype) { /* easy case */ ltop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTLessStrategyNumber); + ltstrat); leop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTLessEqualStrategyNumber); + lestrat); lsortop = ltop; rsortop = ltop; lstatop = lsortop; @@ -3039,43 +3051,46 @@ mergejoinscansel(PlannerInfo *root, Node *clause, { ltop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTLessStrategyNumber); + ltstrat); leop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTLessEqualStrategyNumber); + lestrat); lsortop = get_opfamily_member(opfamily, op_lefttype, op_lefttype, - BTLessStrategyNumber); + ltstrat); rsortop = get_opfamily_member(opfamily, op_righttype, op_righttype, - BTLessStrategyNumber); + ltstrat); lstatop = lsortop; rstatop = rsortop; revltop = get_opfamily_member(opfamily, op_righttype, op_lefttype, - BTLessStrategyNumber); + ltstrat); revleop = get_opfamily_member(opfamily, op_righttype, op_lefttype, - BTLessEqualStrategyNumber); + lestrat); } break; - case BTGreaterStrategyNumber: + case COMPARE_GT: /* descending-order case */ isgt = true; + ltstrat = IndexAmTranslateCompareType(COMPARE_LT, opmethod, opfamily, true); + gtstrat = IndexAmTranslateCompareType(COMPARE_GT, opmethod, opfamily, true); + gestrat = IndexAmTranslateCompareType(COMPARE_GE, opmethod, opfamily, true); if (op_lefttype == op_righttype) { /* easy case */ ltop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTGreaterStrategyNumber); + gtstrat); leop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTGreaterEqualStrategyNumber); + gestrat); lsortop = ltop; rsortop = ltop; lstatop = get_opfamily_member(opfamily, op_lefttype, op_lefttype, - BTLessStrategyNumber); + ltstrat); rstatop = lstatop; revltop = ltop; revleop = leop; @@ -3084,28 +3099,28 @@ mergejoinscansel(PlannerInfo *root, Node *clause, { ltop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTGreaterStrategyNumber); + gtstrat); leop = get_opfamily_member(opfamily, op_lefttype, op_righttype, - BTGreaterEqualStrategyNumber); + gestrat); lsortop = get_opfamily_member(opfamily, op_lefttype, op_lefttype, - BTGreaterStrategyNumber); + gtstrat); rsortop = get_opfamily_member(opfamily, op_righttype, op_righttype, - BTGreaterStrategyNumber); + gtstrat); lstatop = get_opfamily_member(opfamily, op_lefttype, op_lefttype, - BTLessStrategyNumber); + ltstrat); rstatop = get_opfamily_member(opfamily, op_righttype, op_righttype, - BTLessStrategyNumber); + ltstrat); revltop = get_opfamily_member(opfamily, op_righttype, op_lefttype, - BTGreaterStrategyNumber); + gtstrat); revleop = get_opfamily_member(opfamily, op_righttype, op_lefttype, - BTGreaterEqualStrategyNumber); + gestrat); } break; default: @@ -3783,18 +3798,25 @@ estimate_multivariate_bucketsize(PlannerInfo *root, RelOptInfo *inner, List *hashclauses, Selectivity *innerbucketsize) { - List *clauses = list_copy(hashclauses); - List *otherclauses = NIL; - double ndistinct = 1.0; + List *clauses; + List *otherclauses; + double ndistinct; if (list_length(hashclauses) <= 1) - + { /* * Nothing to do for a single clause. Could we employ univariate * extended stat here? */ return hashclauses; + } + /* "clauses" is the list of hashclauses we've not dealt with yet */ + clauses = list_copy(hashclauses); + /* "otherclauses" holds clauses we are going to return to caller */ + otherclauses = NIL; + /* current estimate of ndistinct */ + ndistinct = 1.0; while (clauses != NIL) { ListCell *lc; @@ -3834,6 +3856,8 @@ estimate_multivariate_bucketsize(PlannerInfo *root, RelOptInfo *inner, if (bms_get_singleton_member(relids, &relid) && root->simple_rel_array[relid]->statlist != NIL) { + bool is_duplicate = false; + /* * This inner-side expression references only one relation. * Extended statistics on this clause can exist. @@ -3857,18 +3881,69 @@ estimate_multivariate_bucketsize(PlannerInfo *root, RelOptInfo *inner, group_rel = root->simple_rel_array[relid]; } else if (group_relid != relid) - + { /* * Being in the group forming state we don't need other * clauses. */ continue; + } + + /* + * We're going to add the new clause to the varinfos list. We + * might re-use add_unique_group_var(), but we don't do so for + * two reasons. + * + * 1) We must keep the origin_rinfos list ordered exactly the + * same way as varinfos. + * + * 2) add_unique_group_var() is designed for + * estimate_num_groups(), where a larger number of groups is + * worse. While estimating the number of hash buckets, we + * have the opposite: a lesser number of groups is worse. + * Therefore, we don't have to remove "known equal" vars: the + * removed var may valuably contribute to the multivariate + * statistics to grow the number of groups. + */ + + /* + * Clear nullingrels to correctly match hash keys. See + * add_unique_group_var()'s comment for details. + */ + expr = remove_nulling_relids(expr, root->outer_join_rels, NULL); + + /* + * Detect and exclude exact duplicates from the list of hash + * keys (like add_unique_group_var does). + */ + foreach(lc1, varinfos) + { + varinfo = (GroupVarInfo *) lfirst(lc1); + + if (!equal(expr, varinfo->var)) + continue; + + is_duplicate = true; + break; + } + + if (is_duplicate) + { + /* + * Skip exact duplicates. Adding them to the otherclauses + * list also doesn't make sense. + */ + continue; + } - varinfo = (GroupVarInfo *) palloc(sizeof(GroupVarInfo)); + /* + * Initialize GroupVarInfo. We only use it to call + * estimate_multivariate_ndistinct(), which doesn't care about + * ndistinct and isdefault fields. Thus, skip these fields. + */ + varinfo = (GroupVarInfo *) palloc0(sizeof(GroupVarInfo)); varinfo->var = expr; varinfo->rel = root->simple_rel_array[relid]; - varinfo->ndistinct = 0.0; - varinfo->isdefault = false; varinfos = lappend(varinfos, varinfo); /* @@ -3878,8 +3953,10 @@ estimate_multivariate_bucketsize(PlannerInfo *root, RelOptInfo *inner, origin_rinfos = lappend(origin_rinfos, rinfo); } else + { /* This clause can't be estimated with extended statistics */ otherclauses = lappend(otherclauses, rinfo); + } clauses = foreach_delete_current(clauses, lc); } @@ -4130,14 +4207,18 @@ estimate_hashagg_tablesize(PlannerInfo *root, Path *path, */ /* - * Find applicable ndistinct statistics for the given list of VarInfos (which - * must all belong to the given rel), and update *ndistinct to the estimate of - * the MVNDistinctItem that best matches. If a match it found, *varinfos is - * updated to remove the list of matched varinfos. + * Find the best matching ndistinct extended statistics for the given list of + * GroupVarInfos. * - * Varinfos that aren't for simple Vars are ignored. + * Callers must ensure that the given GroupVarInfos all belong to 'rel' and + * the GroupVarInfos list does not contain any duplicate Vars or expressions. * - * Return true if we're able to find a match, false otherwise. + * When statistics are found that match > 1 of the given GroupVarInfo, the + * *ndistinct parameter is set according to the ndistinct estimate and a new + * list is built with the matching GroupVarInfos removed, which is output via + * the *varinfos parameter before returning true. When no matching stats are + * found, false is returned and the *varinfos and *ndistinct parameters are + * left untouched. */ static bool estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel, @@ -4218,15 +4299,22 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel, } } + /* + * The ndistinct extended statistics contain estimates for a minimum + * of pairs of columns which the statistics are defined on and + * certainly not single columns. Here we skip unless we managed to + * match to at least two columns. + */ if (nshared_vars + nshared_exprs < 2) continue; /* - * Does this statistics object match more columns than the currently - * best object? If so, use this one instead. + * Check if these statistics are a better match than the previous best + * match and if so, take note of the StatisticExtInfo. * - * XXX This should break ties using name of the object, or something - * like that, to make the outcome stable. + * The statslist is sorted by statOid, so the StatisticExtInfo we + * select as the best match is deterministic even when multiple sets + * of statistics match equally as well. */ if ((nshared_exprs > nmatches_exprs) || (((nshared_exprs == nmatches_exprs)) && (nshared_vars > nmatches_vars))) @@ -4539,6 +4627,7 @@ convert_to_scalar(Datum value, Oid valuetypid, Oid collid, double *scaledvalue, case REGDICTIONARYOID: case REGROLEOID: case REGNAMESPACEOID: + case REGDATABASEOID: *scaledvalue = convert_numeric_to_scalar(value, valuetypid, &failure); *scaledlobound = convert_numeric_to_scalar(lobound, boundstypid, @@ -4671,6 +4760,7 @@ convert_numeric_to_scalar(Datum value, Oid typid, bool *failure) case REGDICTIONARYOID: case REGROLEOID: case REGNAMESPACEOID: + case REGDATABASEOID: /* we can treat OIDs as integers... */ return (double) DatumGetObjectId(value); } @@ -5198,8 +5288,8 @@ ReleaseDummy(HeapTuple tuple) * unique for this query. (Caution: this should be trusted for * statistical purposes only, since we do not check indimmediate nor * verify that the exact same definition of equality applies.) - * acl_ok: true if current user has permission to read the column(s) - * underlying the pg_statistic entry. This is consulted by + * acl_ok: true if current user has permission to read all table rows from + * the column(s) underlying the pg_statistic entry. This is consulted by * statistic_proc_security_check(). * * Caller is responsible for doing ReleaseVariableStats() before exiting. @@ -5318,7 +5408,6 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, */ ListCell *ilist; ListCell *slist; - Oid userid; /* * The nullingrels bits within the expression could prevent us from @@ -5328,17 +5417,6 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, if (bms_overlap(varnos, root->outer_join_rels)) node = remove_nulling_relids(node, root->outer_join_rels, NULL); - /* - * Determine the user ID to use for privilege checks: either - * onerel->userid if it's set (e.g., in case we're accessing the table - * via a view), or the current user otherwise. - * - * If we drill down to child relations, we keep using the same userid: - * it's going to be the same anyway, due to how we set up the relation - * tree (q.v. build_simple_rel). - */ - userid = OidIsValid(onerel->userid) ? onerel->userid : GetUserId(); - foreach(ilist, onerel->indexlist) { IndexOptInfo *index = (IndexOptInfo *) lfirst(ilist); @@ -5406,69 +5484,32 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, if (HeapTupleIsValid(vardata->statsTuple)) { - /* Get index's table for permission check */ - RangeTblEntry *rte; - - rte = planner_rt_fetch(index->rel->relid, root); - Assert(rte->rtekind == RTE_RELATION); - /* + * Test if user has permission to access all + * rows from the index's table. + * * For simplicity, we insist on the whole * table being selectable, rather than trying * to identify which column(s) the index - * depends on. Also require all rows to be - * selectable --- there must be no - * securityQuals from security barrier views - * or RLS policies. + * depends on. + * + * Note that for an inheritance child, + * permissions are checked on the inheritance + * root parent, and whole-table select + * privilege on the parent doesn't quite + * guarantee that the user could read all + * columns of the child. But in practice it's + * unlikely that any interesting security + * violation could result from allowing access + * to the expression index's stats, so we + * allow it anyway. See similar code in + * examine_simple_variable() for additional + * comments. */ vardata->acl_ok = - rte->securityQuals == NIL && - (pg_class_aclcheck(rte->relid, userid, - ACL_SELECT) == ACLCHECK_OK); - - /* - * If the user doesn't have permissions to - * access an inheritance child relation, check - * the permissions of the table actually - * mentioned in the query, since most likely - * the user does have that permission. Note - * that whole-table select privilege on the - * parent doesn't quite guarantee that the - * user could read all columns of the child. - * But in practice it's unlikely that any - * interesting security violation could result - * from allowing access to the expression - * index's stats, so we allow it anyway. See - * similar code in examine_simple_variable() - * for additional comments. - */ - if (!vardata->acl_ok && - root->append_rel_array != NULL) - { - AppendRelInfo *appinfo; - Index varno = index->rel->relid; - - appinfo = root->append_rel_array[varno]; - while (appinfo && - planner_rt_fetch(appinfo->parent_relid, - root)->rtekind == RTE_RELATION) - { - varno = appinfo->parent_relid; - appinfo = root->append_rel_array[varno]; - } - if (varno != index->rel->relid) - { - /* Repeat access check on this rel */ - rte = planner_rt_fetch(varno, root); - Assert(rte->rtekind == RTE_RELATION); - - vardata->acl_ok = - rte->securityQuals == NIL && - (pg_class_aclcheck(rte->relid, - userid, - ACL_SELECT) == ACLCHECK_OK); - } - } + all_rows_selectable(root, + index->rel->relid, + NULL); } else { @@ -5538,58 +5579,26 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, vardata->freefunc = ReleaseDummy; /* + * Test if user has permission to access all rows from the + * table. + * * For simplicity, we insist on the whole table being * selectable, rather than trying to identify which - * column(s) the statistics object depends on. Also - * require all rows to be selectable --- there must be no - * securityQuals from security barrier views or RLS - * policies. + * column(s) the statistics object depends on. + * + * Note that for an inheritance child, permissions are + * checked on the inheritance root parent, and whole-table + * select privilege on the parent doesn't quite guarantee + * that the user could read all columns of the child. But + * in practice it's unlikely that any interesting security + * violation could result from allowing access to the + * expression stats, so we allow it anyway. See similar + * code in examine_simple_variable() for additional + * comments. */ - vardata->acl_ok = - rte->securityQuals == NIL && - (pg_class_aclcheck(rte->relid, userid, - ACL_SELECT) == ACLCHECK_OK); - - /* - * If the user doesn't have permissions to access an - * inheritance child relation, check the permissions of - * the table actually mentioned in the query, since most - * likely the user does have that permission. Note that - * whole-table select privilege on the parent doesn't - * quite guarantee that the user could read all columns of - * the child. But in practice it's unlikely that any - * interesting security violation could result from - * allowing access to the expression stats, so we allow it - * anyway. See similar code in examine_simple_variable() - * for additional comments. - */ - if (!vardata->acl_ok && - root->append_rel_array != NULL) - { - AppendRelInfo *appinfo; - Index varno = onerel->relid; - - appinfo = root->append_rel_array[varno]; - while (appinfo && - planner_rt_fetch(appinfo->parent_relid, - root)->rtekind == RTE_RELATION) - { - varno = appinfo->parent_relid; - appinfo = root->append_rel_array[varno]; - } - if (varno != onerel->relid) - { - /* Repeat access check on this rel */ - rte = planner_rt_fetch(varno, root); - Assert(rte->rtekind == RTE_RELATION); - - vardata->acl_ok = - rte->securityQuals == NIL && - (pg_class_aclcheck(rte->relid, - userid, - ACL_SELECT) == ACLCHECK_OK); - } - } + vardata->acl_ok = all_rows_selectable(root, + onerel->relid, + NULL); break; } @@ -5644,109 +5653,20 @@ examine_simple_variable(PlannerInfo *root, Var *var, if (HeapTupleIsValid(vardata->statsTuple)) { - RelOptInfo *onerel = find_base_rel_noerr(root, var->varno); - Oid userid; - /* - * Check if user has permission to read this column. We require - * all rows to be accessible, so there must be no securityQuals - * from security barrier views or RLS policies. + * Test if user has permission to read all rows from this column. * - * Normally the Var will have an associated RelOptInfo from which - * we can find out which userid to do the check as; but it might - * not if it's a RETURNING Var for an INSERT target relation. In - * that case use the RTEPermissionInfo associated with the RTE. + * This requires that the user has the appropriate SELECT + * privileges and that there are no securityQuals from security + * barrier views or RLS policies. If that's not the case, then we + * only permit leakproof functions to be passed pg_statistic data + * in vardata, otherwise the functions might reveal data that the + * user doesn't have permission to see --- see + * statistic_proc_security_check(). */ - if (onerel) - userid = onerel->userid; - else - { - RTEPermissionInfo *perminfo; - - perminfo = getRTEPermissionInfo(root->parse->rteperminfos, rte); - userid = perminfo->checkAsUser; - } - if (!OidIsValid(userid)) - userid = GetUserId(); - vardata->acl_ok = - rte->securityQuals == NIL && - ((pg_class_aclcheck(rte->relid, userid, - ACL_SELECT) == ACLCHECK_OK) || - (pg_attribute_aclcheck(rte->relid, var->varattno, userid, - ACL_SELECT) == ACLCHECK_OK)); - - /* - * If the user doesn't have permissions to access an inheritance - * child relation or specifically this attribute, check the - * permissions of the table/column actually mentioned in the - * query, since most likely the user does have that permission - * (else the query will fail at runtime), and if the user can read - * the column there then he can get the values of the child table - * too. To do that, we must find out which of the root parent's - * attributes the child relation's attribute corresponds to. - */ - if (!vardata->acl_ok && var->varattno > 0 && - root->append_rel_array != NULL) - { - AppendRelInfo *appinfo; - Index varno = var->varno; - int varattno = var->varattno; - bool found = false; - - appinfo = root->append_rel_array[varno]; - - /* - * Partitions are mapped to their immediate parent, not the - * root parent, so must be ready to walk up multiple - * AppendRelInfos. But stop if we hit a parent that is not - * RTE_RELATION --- that's a flattened UNION ALL subquery, not - * an inheritance parent. - */ - while (appinfo && - planner_rt_fetch(appinfo->parent_relid, - root)->rtekind == RTE_RELATION) - { - int parent_varattno; - - found = false; - if (varattno <= 0 || varattno > appinfo->num_child_cols) - break; /* safety check */ - parent_varattno = appinfo->parent_colnos[varattno - 1]; - if (parent_varattno == 0) - break; /* Var is local to child */ - - varno = appinfo->parent_relid; - varattno = parent_varattno; - found = true; - - /* If the parent is itself a child, continue up. */ - appinfo = root->append_rel_array[varno]; - } - - /* - * In rare cases, the Var may be local to the child table, in - * which case, we've got to live with having no access to this - * column's stats. - */ - if (!found) - return; - - /* Repeat the access check on this parent rel & column */ - rte = planner_rt_fetch(varno, root); - Assert(rte->rtekind == RTE_RELATION); - - /* - * Fine to use the same userid as it's the same in all - * relations of a given inheritance tree. - */ - vardata->acl_ok = - rte->securityQuals == NIL && - ((pg_class_aclcheck(rte->relid, userid, - ACL_SELECT) == ACLCHECK_OK) || - (pg_attribute_aclcheck(rte->relid, varattno, userid, - ACL_SELECT) == ACLCHECK_OK)); - } + all_rows_selectable(root, var->varno, + bms_make_singleton(var->varattno - FirstLowInvalidHeapAttributeNumber)); } else { @@ -5943,17 +5863,313 @@ examine_simple_variable(PlannerInfo *root, Var *var, } } +/* + * all_rows_selectable + * Test whether the user has permission to select all rows from a given + * relation. + * + * Inputs: + * root: the planner info + * varno: the index of the relation (assumed to be an RTE_RELATION) + * varattnos: the attributes for which permission is required, or NULL if + * whole-table access is required + * + * Returns true if the user has the required select permissions, and there are + * no securityQuals from security barrier views or RLS policies. + * + * Note that if the relation is an inheritance child relation, securityQuals + * and access permissions are checked against the inheritance root parent (the + * relation actually mentioned in the query) --- see the comments in + * expand_single_inheritance_child() for an explanation of why it has to be + * done this way. + * + * If varattnos is non-NULL, its attribute numbers should be offset by + * FirstLowInvalidHeapAttributeNumber so that system attributes can be + * checked. If varattnos is NULL, only table-level SELECT privileges are + * checked, not any column-level privileges. + * + * Note: if the relation is accessed via a view, this function actually tests + * whether the view owner has permission to select from the relation. To + * ensure that the current user has permission, it is also necessary to check + * that the current user has permission to select from the view, which we do + * at planner-startup --- see subquery_planner(). + * + * This is exported so that other estimation functions can use it. + */ +bool +all_rows_selectable(PlannerInfo *root, Index varno, Bitmapset *varattnos) +{ + RelOptInfo *rel = find_base_rel_noerr(root, varno); + RangeTblEntry *rte = planner_rt_fetch(varno, root); + Oid userid; + int varattno; + + Assert(rte->rtekind == RTE_RELATION); + + /* + * Determine the user ID to use for privilege checks (either the current + * user or the view owner, if we're accessing the table via a view). + * + * Normally the relation will have an associated RelOptInfo from which we + * can find the userid, but it might not if it's a RETURNING Var for an + * INSERT target relation. In that case use the RTEPermissionInfo + * associated with the RTE. + * + * If we navigate up to a parent relation, we keep using the same userid, + * since it's the same in all relations of a given inheritance tree. + */ + if (rel) + userid = rel->userid; + else + { + RTEPermissionInfo *perminfo; + + perminfo = getRTEPermissionInfo(root->parse->rteperminfos, rte); + userid = perminfo->checkAsUser; + } + if (!OidIsValid(userid)) + userid = GetUserId(); + + /* + * Permissions and securityQuals must be checked on the table actually + * mentioned in the query, so if this is an inheritance child, navigate up + * to the inheritance root parent. If the user can read the whole table + * or the required columns there, then they can read from the child table + * too. For per-column checks, we must find out which of the root + * parent's attributes the child relation's attributes correspond to. + */ + if (root->append_rel_array != NULL) + { + AppendRelInfo *appinfo; + + appinfo = root->append_rel_array[varno]; + + /* + * Partitions are mapped to their immediate parent, not the root + * parent, so must be ready to walk up multiple AppendRelInfos. But + * stop if we hit a parent that is not RTE_RELATION --- that's a + * flattened UNION ALL subquery, not an inheritance parent. + */ + while (appinfo && + planner_rt_fetch(appinfo->parent_relid, + root)->rtekind == RTE_RELATION) + { + Bitmapset *parent_varattnos = NULL; + + /* + * For each child attribute, find the corresponding parent + * attribute. In rare cases, the attribute may be local to the + * child table, in which case, we've got to live with having no + * access to this column. + */ + varattno = -1; + while ((varattno = bms_next_member(varattnos, varattno)) >= 0) + { + AttrNumber attno; + AttrNumber parent_attno; + + attno = varattno + FirstLowInvalidHeapAttributeNumber; + + if (attno == InvalidAttrNumber) + { + /* + * Whole-row reference, so must map each column of the + * child to the parent table. + */ + for (attno = 1; attno <= appinfo->num_child_cols; attno++) + { + parent_attno = appinfo->parent_colnos[attno - 1]; + if (parent_attno == 0) + return false; /* attr is local to child */ + parent_varattnos = + bms_add_member(parent_varattnos, + parent_attno - FirstLowInvalidHeapAttributeNumber); + } + } + else + { + if (attno < 0) + { + /* System attnos are the same in all tables */ + parent_attno = attno; + } + else + { + if (attno > appinfo->num_child_cols) + return false; /* safety check */ + parent_attno = appinfo->parent_colnos[attno - 1]; + if (parent_attno == 0) + return false; /* attr is local to child */ + } + parent_varattnos = + bms_add_member(parent_varattnos, + parent_attno - FirstLowInvalidHeapAttributeNumber); + } + } + + /* If the parent is itself a child, continue up */ + varno = appinfo->parent_relid; + varattnos = parent_varattnos; + appinfo = root->append_rel_array[varno]; + } + + /* Perform the access check on this parent rel */ + rte = planner_rt_fetch(varno, root); + Assert(rte->rtekind == RTE_RELATION); + } + + /* + * For all rows to be accessible, there must be no securityQuals from + * security barrier views or RLS policies. + */ + if (rte->securityQuals != NIL) + return false; + + /* + * Test for table-level SELECT privilege. + * + * If varattnos is non-NULL, this is sufficient to give access to all + * requested attributes, even for a child table, since we have verified + * that all required child columns have matching parent columns. + * + * If varattnos is NULL (whole-table access requested), this doesn't + * necessarily guarantee that the user can read all columns of a child + * table, but we allow it anyway (see comments in examine_variable()) and + * don't bother checking any column privileges. + */ + if (pg_class_aclcheck(rte->relid, userid, ACL_SELECT) == ACLCHECK_OK) + return true; + + if (varattnos == NULL) + return false; /* whole-table access requested */ + + /* + * Don't have table-level SELECT privilege, so check per-column + * privileges. + */ + varattno = -1; + while ((varattno = bms_next_member(varattnos, varattno)) >= 0) + { + AttrNumber attno = varattno + FirstLowInvalidHeapAttributeNumber; + + if (attno == InvalidAttrNumber) + { + /* Whole-row reference, so must have access to all columns */ + if (pg_attribute_aclcheck_all(rte->relid, userid, ACL_SELECT, + ACLMASK_ALL) != ACLCHECK_OK) + return false; + } + else + { + if (pg_attribute_aclcheck(rte->relid, attno, userid, + ACL_SELECT) != ACLCHECK_OK) + return false; + } + } + + /* If we reach here, have all required column privileges */ + return true; +} + +/* + * examine_indexcol_variable + * Try to look up statistical data about an index column/expression. + * Fill in a VariableStatData struct to describe the column. + * + * Inputs: + * root: the planner info + * index: the index whose column we're interested in + * indexcol: 0-based index column number (subscripts index->indexkeys[]) + * + * Outputs: *vardata is filled as follows: + * var: the input expression (with any binary relabeling stripped, if + * it is or contains a variable; but otherwise the type is preserved) + * rel: RelOptInfo for table relation containing variable. + * statsTuple: the pg_statistic entry for the variable, if one exists; + * otherwise NULL. + * freefunc: pointer to a function to release statsTuple with. + * + * Caller is responsible for doing ReleaseVariableStats() before exiting. + */ +static void +examine_indexcol_variable(PlannerInfo *root, IndexOptInfo *index, + int indexcol, VariableStatData *vardata) +{ + AttrNumber colnum; + Oid relid; + + if (index->indexkeys[indexcol] != 0) + { + /* Simple variable --- look to stats for the underlying table */ + RangeTblEntry *rte = planner_rt_fetch(index->rel->relid, root); + + Assert(rte->rtekind == RTE_RELATION); + relid = rte->relid; + Assert(relid != InvalidOid); + colnum = index->indexkeys[indexcol]; + vardata->rel = index->rel; + + if (get_relation_stats_hook && + (*get_relation_stats_hook) (root, rte, colnum, vardata)) + { + /* + * The hook took control of acquiring a stats tuple. If it did + * supply a tuple, it'd better have supplied a freefunc. + */ + if (HeapTupleIsValid(vardata->statsTuple) && + !vardata->freefunc) + elog(ERROR, "no function provided to release variable stats with"); + } + else + { + vardata->statsTuple = SearchSysCache3(STATRELATTINH, + ObjectIdGetDatum(relid), + Int16GetDatum(colnum), + BoolGetDatum(rte->inh)); + vardata->freefunc = ReleaseSysCache; + } + } + else + { + /* Expression --- maybe there are stats for the index itself */ + relid = index->indexoid; + colnum = indexcol + 1; + + if (get_index_stats_hook && + (*get_index_stats_hook) (root, relid, colnum, vardata)) + { + /* + * The hook took control of acquiring a stats tuple. If it did + * supply a tuple, it'd better have supplied a freefunc. + */ + if (HeapTupleIsValid(vardata->statsTuple) && + !vardata->freefunc) + elog(ERROR, "no function provided to release variable stats with"); + } + else + { + vardata->statsTuple = SearchSysCache3(STATRELATTINH, + ObjectIdGetDatum(relid), + Int16GetDatum(colnum), + BoolGetDatum(false)); + vardata->freefunc = ReleaseSysCache; + } + } +} + /* * Check whether it is permitted to call func_oid passing some of the - * pg_statistic data in vardata. We allow this either if the user has SELECT - * privileges on the table or column underlying the pg_statistic data or if - * the function is marked leakproof. + * pg_statistic data in vardata. We allow this if either of the following + * conditions is met: (1) the user has SELECT privileges on the table or + * column underlying the pg_statistic data and there are no securityQuals from + * security barrier views or RLS policies, or (2) the function is marked + * leakproof. */ bool statistic_proc_security_check(VariableStatData *vardata, Oid func_oid) { if (vardata->acl_ok) - return true; + return true; /* have SELECT privs and no securityQuals */ if (!OidIsValid(func_oid)) return false; @@ -6327,9 +6543,10 @@ get_actual_variable_range(PlannerInfo *root, VariableStatData *vardata, { IndexOptInfo *index = (IndexOptInfo *) lfirst(lc); ScanDirection indexscandir; + StrategyNumber strategy; - /* Ignore non-btree indexes */ - if (index->relam != BTREE_AM_OID) + /* Ignore non-ordering indexes */ + if (index->sortopfamily == NULL) continue; /* @@ -6354,15 +6571,16 @@ get_actual_variable_range(PlannerInfo *root, VariableStatData *vardata, continue; /* test first 'cause it's cheapest */ if (!match_index_to_operand(vardata->var, 0, index)) continue; - switch (get_op_opfamily_strategy(sortop, index->sortopfamily[0])) + strategy = get_op_opfamily_strategy(sortop, index->sortopfamily[0]); + switch (IndexAmTranslateStrategy(strategy, index->relam, index->sortopfamily[0], true)) { - case BTLessStrategyNumber: + case COMPARE_LT: if (index->reverse_sort[0]) indexscandir = BackwardScanDirection; else indexscandir = ForwardScanDirection; break; - case BTGreaterStrategyNumber: + case COMPARE_GT: if (index->reverse_sort[0]) indexscandir = ForwardScanDirection; else @@ -6602,13 +6820,17 @@ get_actual_variable_endpoint(Relation heapRel, } /* - * We expect that btree will return data in IndexTuple not HeapTuple - * format. It's not lossy either. + * We expect that the index will return data in IndexTuple not + * HeapTuple format. */ if (!index_scan->xs_itup) elog(ERROR, "no data returned for index-only scan"); + + /* + * We do not yet support recheck here. + */ if (index_scan->xs_recheck) - elog(ERROR, "unexpected recheck indication from btree"); + break; /* OK to deconstruct the index tuple */ index_deform_tuple(index_scan->xs_itup, @@ -7001,6 +7223,53 @@ add_predicate_to_index_quals(IndexOptInfo *index, List *indexQuals) return list_concat(predExtraQuals, indexQuals); } +/* + * Estimate correlation of btree index's first column. + * + * If we can get an estimate of the first column's ordering correlation C + * from pg_statistic, estimate the index correlation as C for a single-column + * index, or C * 0.75 for multiple columns. The idea here is that multiple + * columns dilute the importance of the first column's ordering, but don't + * negate it entirely. + * + * We already filled in the stats tuple for *vardata when called. + */ +static double +btcost_correlation(IndexOptInfo *index, VariableStatData *vardata) +{ + Oid sortop; + AttStatsSlot sslot; + double indexCorrelation = 0; + + Assert(HeapTupleIsValid(vardata->statsTuple)); + + sortop = get_opfamily_member(index->opfamily[0], + index->opcintype[0], + index->opcintype[0], + BTLessStrategyNumber); + if (OidIsValid(sortop) && + get_attstatsslot(&sslot, vardata->statsTuple, + STATISTIC_KIND_CORRELATION, sortop, + ATTSTATSSLOT_NUMBERS)) + { + double varCorrelation; + + Assert(sslot.nnumbers == 1); + varCorrelation = sslot.numbers[0]; + + if (index->reverse_sort[0]) + varCorrelation = -varCorrelation; + + if (index->nkeycolumns > 1) + indexCorrelation = varCorrelation * 0.75; + else + indexCorrelation = varCorrelation; + + free_attstatsslot(&sslot); + } + + return indexCorrelation; +} void btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, @@ -7010,17 +7279,19 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, { IndexOptInfo *index = path->indexinfo; GenericCosts costs = {0}; - Oid relid; - AttrNumber colnum; VariableStatData vardata = {0}; double numIndexTuples; Cost descentCost; List *indexBoundQuals; + List *indexSkipQuals; int indexcol; bool eqQualHere; - bool found_saop; + bool found_row_compare; + bool found_array; bool found_is_null_op; + bool have_correlation = false; double num_sa_scans; + double correlation = 0.0; ListCell *lc; /* @@ -7031,19 +7302,24 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, * it's OK to count them in indexSelectivity, but they should not count * for estimating numIndexTuples. So we must examine the given indexquals * to find out which ones count as boundary quals. We rely on the - * knowledge that they are given in index column order. + * knowledge that they are given in index column order. Note that nbtree + * preprocessing can add skip arrays that act as leading '=' quals in the + * absence of ordinary input '=' quals, so in practice _most_ input quals + * are able to act as index bound quals (which we take into account here). * * For a RowCompareExpr, we consider only the first column, just as * rowcomparesel() does. * - * If there's a ScalarArrayOpExpr in the quals, we'll actually perform up - * to N index descents (not just one), but the ScalarArrayOpExpr's + * If there's a SAOP or skip array in the quals, we'll actually perform up + * to N index descents (not just one), but the underlying array key's * operator can be considered to act the same as it normally does. */ indexBoundQuals = NIL; + indexSkipQuals = NIL; indexcol = 0; eqQualHere = false; - found_saop = false; + found_row_compare = false; + found_array = false; found_is_null_op = false; num_sa_scans = 1; foreach(lc, path->indexclauses) @@ -7051,17 +7327,203 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, IndexClause *iclause = lfirst_node(IndexClause, lc); ListCell *lc2; - if (indexcol != iclause->indexcol) + if (indexcol < iclause->indexcol) { - /* Beginning of a new column's quals */ - if (!eqQualHere) - break; /* done if no '=' qual for indexcol */ + double num_sa_scans_prev_cols = num_sa_scans; + + /* + * Beginning of a new column's quals. + * + * Skip scans use skip arrays, which are ScalarArrayOp style + * arrays that generate their elements procedurally and on demand. + * Given a multi-column index on "(a, b)", and an SQL WHERE clause + * "WHERE b = 42", a skip scan will effectively use an indexqual + * "WHERE a = ANY('{every col a value}') AND b = 42". (Obviously, + * the array on "a" must also return "IS NULL" matches, since our + * WHERE clause used no strict operator on "a"). + * + * Here we consider how nbtree will backfill skip arrays for any + * index columns that lacked an '=' qual. This maintains our + * num_sa_scans estimate, and determines if this new column (the + * "iclause->indexcol" column, not the prior "indexcol" column) + * can have its RestrictInfos/quals added to indexBoundQuals. + * + * We'll need to handle columns that have inequality quals, where + * the skip array generates values from a range constrained by the + * quals (not every possible value). We've been maintaining + * indexSkipQuals to help with this; it will now contain all of + * the prior column's quals (that is, indexcol's quals) when they + * might be used for this. + */ + if (found_row_compare) + { + /* + * Skip arrays can't be added after a RowCompare input qual + * due to limitations in nbtree + */ + break; + } + if (eqQualHere) + { + /* + * Don't need to add a skip array for an indexcol that already + * has an '=' qual/equality constraint + */ + indexcol++; + indexSkipQuals = NIL; + } eqQualHere = false; - indexcol++; + + while (indexcol < iclause->indexcol) + { + double ndistinct; + bool isdefault = true; + + found_array = true; + + /* + * A skipped attribute's ndistinct forms the basis of our + * estimate of the total number of "array elements" used by + * its skip array at runtime. Look that up first. + */ + examine_indexcol_variable(root, index, indexcol, &vardata); + ndistinct = get_variable_numdistinct(&vardata, &isdefault); + + if (indexcol == 0) + { + /* + * Get an estimate of the leading column's correlation in + * passing (avoids rereading variable stats below) + */ + if (HeapTupleIsValid(vardata.statsTuple)) + correlation = btcost_correlation(index, &vardata); + have_correlation = true; + } + + ReleaseVariableStats(vardata); + + /* + * If ndistinct is a default estimate, conservatively assume + * that no skipping will happen at runtime + */ + if (isdefault) + { + num_sa_scans = num_sa_scans_prev_cols; + break; /* done building indexBoundQuals */ + } + + /* + * Apply indexcol's indexSkipQuals selectivity to ndistinct + */ + if (indexSkipQuals != NIL) + { + List *partialSkipQuals; + Selectivity ndistinctfrac; + + /* + * If the index is partial, AND the index predicate with + * the index-bound quals to produce a more accurate idea + * of the number of distinct values for prior indexcol + */ + partialSkipQuals = add_predicate_to_index_quals(index, + indexSkipQuals); + + ndistinctfrac = clauselist_selectivity(root, partialSkipQuals, + index->rel->relid, + JOIN_INNER, + NULL); + + /* + * If ndistinctfrac is selective (on its own), the scan is + * unlikely to benefit from repositioning itself using + * later quals. Do not allow iclause->indexcol's quals to + * be added to indexBoundQuals (it would increase descent + * costs, without lowering numIndexTuples costs by much). + */ + if (ndistinctfrac < DEFAULT_RANGE_INEQ_SEL) + { + num_sa_scans = num_sa_scans_prev_cols; + break; /* done building indexBoundQuals */ + } + + /* Adjust ndistinct downward */ + ndistinct = rint(ndistinct * ndistinctfrac); + ndistinct = Max(ndistinct, 1); + } + + /* + * When there's no inequality quals, account for the need to + * find an initial value by counting -inf/+inf as a value. + * + * We don't charge anything extra for possible next/prior key + * index probes, which are sometimes used to find the next + * valid skip array element (ahead of using the located + * element value to relocate the scan to the next position + * that might contain matching tuples). It seems hard to do + * better here. Use of the skip support infrastructure often + * avoids most next/prior key probes. But even when it can't, + * there's a decent chance that most individual next/prior key + * probes will locate a leaf page whose key space overlaps all + * of the scan's keys (even the lower-order keys) -- which + * also avoids the need for a separate, extra index descent. + * Note also that these probes are much cheaper than non-probe + * primitive index scans: they're reliably very selective. + */ + if (indexSkipQuals == NIL) + ndistinct += 1; + + /* + * Update num_sa_scans estimate by multiplying by ndistinct. + * + * We make the pessimistic assumption that there is no + * naturally occurring cross-column correlation. This is + * often wrong, but it seems best to err on the side of not + * expecting skipping to be helpful... + */ + num_sa_scans *= ndistinct; + + /* + * ...but back out of adding this latest group of 1 or more + * skip arrays when num_sa_scans exceeds the total number of + * index pages (revert to num_sa_scans from before indexcol). + * This causes a sharp discontinuity in cost (as a function of + * the indexcol's ndistinct), but that is representative of + * actual runtime costs. + * + * Note that skipping is helpful when each primitive index + * scan only manages to skip over 1 or 2 irrelevant leaf pages + * on average. Skip arrays bring savings in CPU costs due to + * the scan not needing to evaluate indexquals against every + * tuple, which can greatly exceed any savings in I/O costs. + * This test is a test of whether num_sa_scans implies that + * we're past the point where the ability to skip ceases to + * lower the scan's costs (even qual evaluation CPU costs). + */ + if (index->pages < num_sa_scans) + { + num_sa_scans = num_sa_scans_prev_cols; + break; /* done building indexBoundQuals */ + } + + indexcol++; + indexSkipQuals = NIL; + } + + /* + * Finished considering the need to add skip arrays to bridge an + * initial eqQualHere gap between the old and new index columns + * (or there was no initial eqQualHere gap in the first place). + * + * If an initial gap could not be bridged, then new column's quals + * (i.e. iclause->indexcol's quals) won't go into indexBoundQuals, + * and so won't affect our final numIndexTuples estimate. + */ if (indexcol != iclause->indexcol) - break; /* no quals at all for indexcol */ + break; /* done building indexBoundQuals */ } + Assert(indexcol == iclause->indexcol); + /* Examine each indexqual associated with this index clause */ foreach(lc2, iclause->indexquals) { @@ -7081,6 +7543,7 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, RowCompareExpr *rc = (RowCompareExpr *) clause; clause_op = linitial_oid(rc->opnos); + found_row_compare = true; } else if (IsA(clause, ScalarArrayOpExpr)) { @@ -7089,7 +7552,7 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, double alength = estimate_array_length(root, other_operand); clause_op = saop->opno; - found_saop = true; + found_array = true; /* estimate SA descents by indexBoundQuals only */ if (alength > 1) num_sa_scans *= alength; @@ -7101,7 +7564,7 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, if (nt->nulltesttype == IS_NULL) { found_is_null_op = true; - /* IS NULL is like = for selectivity purposes */ + /* IS NULL is like = for selectivity/skip scan purposes */ eqQualHere = true; } } @@ -7120,19 +7583,28 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, } indexBoundQuals = lappend(indexBoundQuals, rinfo); + + /* + * We apply inequality selectivities to estimate index descent + * costs with scans that use skip arrays. Save this indexcol's + * RestrictInfos if it looks like they'll be needed for that. + */ + if (!eqQualHere && !found_row_compare && + indexcol < index->nkeycolumns - 1) + indexSkipQuals = lappend(indexSkipQuals, rinfo); } } /* * If index is unique and we found an '=' clause for each column, we can * just assume numIndexTuples = 1 and skip the expensive - * clauselist_selectivity calculations. However, a ScalarArrayOp or - * NullTest invalidates that theory, even though it sets eqQualHere. + * clauselist_selectivity calculations. However, an array or NullTest + * always invalidates that theory (even when eqQualHere has been set). */ if (index->unique && indexcol == index->nkeycolumns - 1 && eqQualHere && - !found_saop && + !found_array && !found_is_null_op) numIndexTuples = 1.0; else @@ -7154,7 +7626,7 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, numIndexTuples = btreeSelectivity * index->rel->tuples; /* - * btree automatically combines individual ScalarArrayOpExpr primitive + * btree automatically combines individual array element primitive * index scans whenever the tuples covered by the next set of array * keys are close to tuples covered by the current set. That puts a * natural ceiling on the worst case number of descents -- there @@ -7172,16 +7644,18 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, * of leaf pages (we make it 1/3 the total number of pages instead) to * give the btree code credit for its ability to continue on the leaf * level with low selectivity scans. + * + * Note: num_sa_scans includes both ScalarArrayOp array elements and + * skip array elements whose qual affects our numIndexTuples estimate. */ num_sa_scans = Min(num_sa_scans, ceil(index->pages * 0.3333333)); num_sa_scans = Max(num_sa_scans, 1); /* - * As in genericcostestimate(), we have to adjust for any - * ScalarArrayOpExpr quals included in indexBoundQuals, and then round - * to integer. + * As in genericcostestimate(), we have to adjust for any array quals + * included in indexBoundQuals, and then round to integer. * - * It is tempting to make genericcostestimate behave as if SAOP + * It is tempting to make genericcostestimate behave as if array * clauses work in almost the same way as scalar operators during * btree scans, making the top-level scan look like a continuous scan * (as opposed to num_sa_scans-many primitive index scans). After @@ -7214,7 +7688,7 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, * comparisons to descend a btree of N leaf tuples. We charge one * cpu_operator_cost per comparison. * - * If there are ScalarArrayOpExprs, charge this once per estimated SA + * If there are SAOP or skip array keys, charge this once per estimated * index descent. The ones after the first one are not startup cost so * far as the overall plan goes, so just add them to "total" cost. */ @@ -7234,110 +7708,25 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, * cost is somewhat arbitrarily set at 50x cpu_operator_cost per page * touched. The number of such pages is btree tree height plus one (ie, * we charge for the leaf page too). As above, charge once per estimated - * SA index descent. + * SAOP/skip array descent. */ descentCost = (index->tree_height + 1) * DEFAULT_PAGE_CPU_MULTIPLIER * cpu_operator_cost; costs.indexStartupCost += descentCost; costs.indexTotalCost += costs.num_sa_scans * descentCost; - /* - * If we can get an estimate of the first column's ordering correlation C - * from pg_statistic, estimate the index correlation as C for a - * single-column index, or C * 0.75 for multiple columns. (The idea here - * is that multiple columns dilute the importance of the first column's - * ordering, but don't negate it entirely. Before 8.0 we divided the - * correlation by the number of columns, but that seems too strong.) - */ - if (index->indexkeys[0] != 0) + if (!have_correlation) { - /* Simple variable --- look to stats for the underlying table */ - RangeTblEntry *rte = planner_rt_fetch(index->rel->relid, root); - - Assert(rte->rtekind == RTE_RELATION); - relid = rte->relid; - Assert(relid != InvalidOid); - colnum = index->indexkeys[0]; - - if (get_relation_stats_hook && - (*get_relation_stats_hook) (root, rte, colnum, &vardata)) - { - /* - * The hook took control of acquiring a stats tuple. If it did - * supply a tuple, it'd better have supplied a freefunc. - */ - if (HeapTupleIsValid(vardata.statsTuple) && - !vardata.freefunc) - elog(ERROR, "no function provided to release variable stats with"); - } - else - { - vardata.statsTuple = SearchSysCache3(STATRELATTINH, - ObjectIdGetDatum(relid), - Int16GetDatum(colnum), - BoolGetDatum(rte->inh)); - vardata.freefunc = ReleaseSysCache; - } + examine_indexcol_variable(root, index, 0, &vardata); + if (HeapTupleIsValid(vardata.statsTuple)) + costs.indexCorrelation = btcost_correlation(index, &vardata); + ReleaseVariableStats(vardata); } else { - /* Expression --- maybe there are stats for the index itself */ - relid = index->indexoid; - colnum = 1; - - if (get_index_stats_hook && - (*get_index_stats_hook) (root, relid, colnum, &vardata)) - { - /* - * The hook took control of acquiring a stats tuple. If it did - * supply a tuple, it'd better have supplied a freefunc. - */ - if (HeapTupleIsValid(vardata.statsTuple) && - !vardata.freefunc) - elog(ERROR, "no function provided to release variable stats with"); - } - else - { - vardata.statsTuple = SearchSysCache3(STATRELATTINH, - ObjectIdGetDatum(relid), - Int16GetDatum(colnum), - BoolGetDatum(false)); - vardata.freefunc = ReleaseSysCache; - } + /* btcost_correlation already called earlier on */ + costs.indexCorrelation = correlation; } - if (HeapTupleIsValid(vardata.statsTuple)) - { - Oid sortop; - AttStatsSlot sslot; - - sortop = get_opfamily_member(index->opfamily[0], - index->opcintype[0], - index->opcintype[0], - BTLessStrategyNumber); - if (OidIsValid(sortop) && - get_attstatsslot(&sslot, vardata.statsTuple, - STATISTIC_KIND_CORRELATION, sortop, - ATTSTATSSLOT_NUMBERS)) - { - double varCorrelation; - - Assert(sslot.nnumbers == 1); - varCorrelation = sslot.numbers[0]; - - if (index->reverse_sort[0]) - varCorrelation = -varCorrelation; - - if (index->nkeycolumns > 1) - costs.indexCorrelation = varCorrelation * 0.75; - else - costs.indexCorrelation = varCorrelation; - - free_attstatsslot(&sslot); - } - } - - ReleaseVariableStats(vardata); - *indexStartupCost = costs.indexStartupCost; *indexTotalCost = costs.indexTotalCost; *indexSelectivity = costs.indexSelectivity; diff --git a/src/backend/utils/adt/skipsupport.c b/src/backend/utils/adt/skipsupport.c new file mode 100644 index 0000000000000..2bd35d2d27221 --- /dev/null +++ b/src/backend/utils/adt/skipsupport.c @@ -0,0 +1,61 @@ +/*------------------------------------------------------------------------- + * + * skipsupport.c + * Support routines for B-Tree skip scan. + * + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/backend/utils/adt/skipsupport.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "access/nbtree.h" +#include "utils/lsyscache.h" +#include "utils/skipsupport.h" + +/* + * Fill in SkipSupport given an operator class (opfamily + opcintype). + * + * On success, returns skip support struct, allocating in caller's memory + * context. Otherwise returns NULL, indicating that operator class has no + * skip support function. + */ +SkipSupport +PrepareSkipSupportFromOpclass(Oid opfamily, Oid opcintype, bool reverse) +{ + Oid skipSupportFunction; + SkipSupport sksup; + + /* Look for a skip support function */ + skipSupportFunction = get_opfamily_proc(opfamily, opcintype, opcintype, + BTSKIPSUPPORT_PROC); + if (!OidIsValid(skipSupportFunction)) + return NULL; + + sksup = palloc(sizeof(SkipSupportData)); + OidFunctionCall1(skipSupportFunction, PointerGetDatum(sksup)); + + if (reverse) + { + /* + * DESC/reverse case: swap low_elem with high_elem, and swap decrement + * with increment + */ + Datum low_elem = sksup->low_elem; + SkipSupportIncDec decrement = sksup->decrement; + + sksup->low_elem = sksup->high_elem; + sksup->decrement = sksup->increment; + + sksup->high_elem = low_elem; + sksup->increment = decrement; + } + + return sksup; +} diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c index 1b0df1117171a..39dab3e42df58 100644 --- a/src/backend/utils/adt/tid.c +++ b/src/backend/utils/adt/tid.c @@ -84,7 +84,7 @@ tidin(PG_FUNCTION_ARGS) /* * Cope with possibility that unsigned long is wider than BlockNumber, in * which case strtoul will not raise an error for some values that are out - * of the range of BlockNumber. (See similar code in oidin().) + * of the range of BlockNumber. (See similar code in uint32in_subr().) */ #if SIZEOF_LONG > 4 if (cvt != (unsigned long) blockNumber && diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 9682f9dbdca13..3e5f9dc1458e1 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -37,6 +37,7 @@ #include "utils/datetime.h" #include "utils/float.h" #include "utils/numeric.h" +#include "utils/skipsupport.h" #include "utils/sortsupport.h" /* @@ -2274,33 +2275,59 @@ timestamp_cmp(PG_FUNCTION_ARGS) PG_RETURN_INT32(timestamp_cmp_internal(dt1, dt2)); } -#if SIZEOF_DATUM < 8 +Datum +timestamp_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = ssup_datum_signed_cmp; + PG_RETURN_VOID(); +} + /* note: this is used for timestamptz also */ -static int -timestamp_fastcmp(Datum x, Datum y, SortSupport ssup) +static Datum +timestamp_decrement(Relation rel, Datum existing, bool *underflow) { - Timestamp a = DatumGetTimestamp(x); - Timestamp b = DatumGetTimestamp(y); + Timestamp texisting = DatumGetTimestamp(existing); - return timestamp_cmp_internal(a, b); + if (texisting == PG_INT64_MIN) + { + /* return value is undefined */ + *underflow = true; + return (Datum) 0; + } + + *underflow = false; + return TimestampGetDatum(texisting - 1); +} + +/* note: this is used for timestamptz also */ +static Datum +timestamp_increment(Relation rel, Datum existing, bool *overflow) +{ + Timestamp texisting = DatumGetTimestamp(existing); + + if (texisting == PG_INT64_MAX) + { + /* return value is undefined */ + *overflow = true; + return (Datum) 0; + } + + *overflow = false; + return TimestampGetDatum(texisting + 1); } -#endif Datum -timestamp_sortsupport(PG_FUNCTION_ARGS) +timestamp_skipsupport(PG_FUNCTION_ARGS) { - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); -#if SIZEOF_DATUM >= 8 + sksup->decrement = timestamp_decrement; + sksup->increment = timestamp_increment; + sksup->low_elem = TimestampGetDatum(PG_INT64_MIN); + sksup->high_elem = TimestampGetDatum(PG_INT64_MAX); - /* - * If this build has pass-by-value timestamps, then we can use a standard - * comparator function. - */ - ssup->comparator = ssup_datum_signed_cmp; -#else - ssup->comparator = timestamp_fastcmp; -#endif PG_RETURN_VOID(); } @@ -4906,7 +4933,7 @@ timestamptz_trunc_internal(text *units, TimestampTz timestamp, pg_tz *tzp) case DTK_SECOND: case DTK_MILLISEC: case DTK_MICROSEC: - PG_RETURN_TIMESTAMPTZ(timestamp); + return timestamp; break; default: @@ -5264,10 +5291,10 @@ isoweekdate2date(int isoweek, int wday, int *year, int *mon, int *mday) int date2isoweek(int year, int mon, int mday) { - float8 result; int day0, day4, - dayn; + dayn, + week; /* current day */ dayn = date2j(year, mon, mday); @@ -5290,13 +5317,13 @@ date2isoweek(int year, int mon, int mday) day0 = j2day(day4 - 1); } - result = (dayn - (day4 - day0)) / 7 + 1; + week = (dayn - (day4 - day0)) / 7 + 1; /* * Sometimes the last few days in a year will fall into the first week of * the next year, so check for this. */ - if (result >= 52) + if (week >= 52) { day4 = date2j(year + 1, 1, 4); @@ -5304,10 +5331,10 @@ date2isoweek(int year, int mon, int mday) day0 = j2day(day4 - 1); if (dayn >= day4 - day0) - result = (dayn - (day4 - day0)) / 7 + 1; + week = (dayn - (day4 - day0)) / 7 + 1; } - return (int) result; + return week; } @@ -5319,10 +5346,10 @@ date2isoweek(int year, int mon, int mday) int date2isoyear(int year, int mon, int mday) { - float8 result; int day0, day4, - dayn; + dayn, + week; /* current day */ dayn = date2j(year, mon, mday); @@ -5347,13 +5374,13 @@ date2isoyear(int year, int mon, int mday) year--; } - result = (dayn - (day4 - day0)) / 7 + 1; + week = (dayn - (day4 - day0)) / 7 + 1; /* * Sometimes the last few days in a year will fall into the first week of * the next year, so check for this. */ - if (result >= 52) + if (week >= 52) { day4 = date2j(year + 1, 1, 4); @@ -6429,7 +6456,7 @@ timestamp2timestamptz_opt_overflow(Timestamp timestamp, int *overflow) if (TIMESTAMP_NOT_FINITE(timestamp)) return timestamp; - /* We don't expect this to fail, but check it pro forma */ + /* timestamp2tm should not fail on valid timestamps, but cope */ if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) == 0) { tz = DetermineTimeZoneOffset(tm, session_timezone); @@ -6437,23 +6464,22 @@ timestamp2timestamptz_opt_overflow(Timestamp timestamp, int *overflow) result = dt2local(timestamp, -tz); if (IS_VALID_TIMESTAMP(result)) - { return result; + } + + if (overflow) + { + if (timestamp < 0) + { + *overflow = -1; + TIMESTAMP_NOBEGIN(result); } - else if (overflow) + else { - if (result < MIN_TIMESTAMP) - { - *overflow = -1; - TIMESTAMP_NOBEGIN(result); - } - else - { - *overflow = 1; - TIMESTAMP_NOEND(result); - } - return result; + *overflow = 1; + TIMESTAMP_NOEND(result); } + return result; } ereport(ERROR, @@ -6483,8 +6509,27 @@ timestamptz_timestamp(PG_FUNCTION_ARGS) PG_RETURN_TIMESTAMP(timestamptz2timestamp(timestamp)); } +/* + * Convert timestamptz to timestamp, throwing error for overflow. + */ static Timestamp timestamptz2timestamp(TimestampTz timestamp) +{ + return timestamptz2timestamp_opt_overflow(timestamp, NULL); +} + +/* + * Convert timestamp with time zone to timestamp. + * + * On successful conversion, *overflow is set to zero if it's not NULL. + * + * If the timestamptz is finite but out of the valid range for timestamp, then: + * if overflow is NULL, we throw an out-of-range error. + * if overflow is not NULL, we store +1 or -1 there to indicate the sign + * of the overflow, and return the appropriate timestamp infinity. + */ +Timestamp +timestamptz2timestamp_opt_overflow(TimestampTz timestamp, int *overflow) { Timestamp result; struct pg_tm tt, @@ -6492,18 +6537,53 @@ timestamptz2timestamp(TimestampTz timestamp) fsec_t fsec; int tz; + if (overflow) + *overflow = 0; + if (TIMESTAMP_NOT_FINITE(timestamp)) result = timestamp; else { if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0) + { + if (overflow) + { + if (timestamp < 0) + { + *overflow = -1; + TIMESTAMP_NOBEGIN(result); + } + else + { + *overflow = 1; + TIMESTAMP_NOEND(result); + } + return result; + } ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + } if (tm2timestamp(tm, fsec, NULL, &result) != 0) + { + if (overflow) + { + if (timestamp < 0) + { + *overflow = -1; + TIMESTAMP_NOBEGIN(result); + } + else + { + *overflow = 1; + TIMESTAMP_NOEND(result); + } + return result; + } ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + } } return result; } diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c index b1bad7bd60cf5..717de8073d58d 100644 --- a/src/backend/utils/adt/tsquery.c +++ b/src/backend/utils/adt/tsquery.c @@ -1176,10 +1176,11 @@ tsqueryout(PG_FUNCTION_ARGS) * * uint8 type, QI_VAL * uint8 weight - * operand text in client encoding, null-terminated * uint8 prefix + * operand text in client encoding, null-terminated * * For each operator: + * * uint8 type, QI_OPR * uint8 operator, one of OP_AND, OP_PHRASE OP_OR, OP_NOT. * uint16 distance (only for OP_PHRASE) diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c index 650be842f28fe..1fa2e3729bfab 100644 --- a/src/backend/utils/adt/tsvector.c +++ b/src/backend/utils/adt/tsvector.c @@ -25,7 +25,7 @@ typedef struct { - WordEntry entry; /* must be first! */ + WordEntry entry; /* must be first, see compareentry */ WordEntryPos *pos; int poslen; /* number of elements in pos */ } WordEntryIN; @@ -79,16 +79,19 @@ uniquePos(WordEntryPos *a, int l) return res + 1 - a; } -/* Compare two WordEntryIN values for qsort */ +/* + * Compare two WordEntry structs for qsort_arg. This can also be used on + * WordEntryIN structs, since those have WordEntry as their first field. + */ static int compareentry(const void *va, const void *vb, void *arg) { - const WordEntryIN *a = (const WordEntryIN *) va; - const WordEntryIN *b = (const WordEntryIN *) vb; + const WordEntry *a = (const WordEntry *) va; + const WordEntry *b = (const WordEntry *) vb; char *BufferStr = (char *) arg; - return tsCompareString(&BufferStr[a->entry.pos], a->entry.len, - &BufferStr[b->entry.pos], b->entry.len, + return tsCompareString(&BufferStr[a->pos], a->len, + &BufferStr[b->pos], b->len, false); } @@ -167,12 +170,6 @@ uniqueentry(WordEntryIN *a, int l, char *buf, int *outbuflen) return res + 1 - a; } -static int -WordEntryCMP(WordEntry *a, WordEntry *b, char *buf) -{ - return compareentry(a, b, buf); -} - Datum tsvectorin(PG_FUNCTION_ARGS) @@ -511,7 +508,7 @@ tsvectorrecv(PG_FUNCTION_ARGS) datalen += lex_len; - if (i > 0 && WordEntryCMP(&vec->entries[i], + if (i > 0 && compareentry(&vec->entries[i], &vec->entries[i - 1], STRPTR(vec)) <= 0) needSort = true; diff --git a/src/backend/utils/adt/tsvector_op.c b/src/backend/utils/adt/tsvector_op.c index 1fa1275ca63b2..0625da9532f6c 100644 --- a/src/backend/utils/adt/tsvector_op.c +++ b/src/backend/utils/adt/tsvector_op.c @@ -329,8 +329,8 @@ tsvector_setweight_by_filter(PG_FUNCTION_ARGS) if (nulls[i]) continue; - lex = VARDATA(dlexemes[i]); - lex_len = VARSIZE(dlexemes[i]) - VARHDRSZ; + lex = VARDATA(DatumGetPointer(dlexemes[i])); + lex_len = VARSIZE(DatumGetPointer(dlexemes[i])) - VARHDRSZ; lex_pos = tsvector_bsearch(tsout, lex, lex_len); if (lex_pos >= 0 && (j = POSDATALEN(tsout, entry + lex_pos)) != 0) @@ -443,10 +443,10 @@ compare_text_lexemes(const void *va, const void *vb) { Datum a = *((const Datum *) va); Datum b = *((const Datum *) vb); - char *alex = VARDATA_ANY(a); - int alex_len = VARSIZE_ANY_EXHDR(a); - char *blex = VARDATA_ANY(b); - int blex_len = VARSIZE_ANY_EXHDR(b); + char *alex = VARDATA_ANY(DatumGetPointer(a)); + int alex_len = VARSIZE_ANY_EXHDR(DatumGetPointer(a)); + char *blex = VARDATA_ANY(DatumGetPointer(b)); + int blex_len = VARSIZE_ANY_EXHDR(DatumGetPointer(b)); return tsCompareString(alex, alex_len, blex, blex_len, false); } @@ -605,8 +605,8 @@ tsvector_delete_arr(PG_FUNCTION_ARGS) if (nulls[i]) continue; - lex = VARDATA(dlexemes[i]); - lex_len = VARSIZE(dlexemes[i]) - VARHDRSZ; + lex = VARDATA(DatumGetPointer(dlexemes[i])); + lex_len = VARSIZE(DatumGetPointer(dlexemes[i])) - VARHDRSZ; lex_pos = tsvector_bsearch(tsin, lex, lex_len); if (lex_pos >= 0) @@ -770,7 +770,7 @@ array_to_tsvector(PG_FUNCTION_ARGS) (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("lexeme array may not contain nulls"))); - if (VARSIZE(dlexemes[i]) - VARHDRSZ == 0) + if (VARSIZE(DatumGetPointer(dlexemes[i])) - VARHDRSZ == 0) ereport(ERROR, (errcode(ERRCODE_ZERO_LENGTH_CHARACTER_STRING), errmsg("lexeme array may not contain empty strings"))); @@ -786,7 +786,7 @@ array_to_tsvector(PG_FUNCTION_ARGS) /* Calculate space needed for surviving lexemes. */ for (i = 0; i < nitems; i++) - datalen += VARSIZE(dlexemes[i]) - VARHDRSZ; + datalen += VARSIZE(DatumGetPointer(dlexemes[i])) - VARHDRSZ; tslen = CALCDATASIZE(nitems, datalen); /* Allocate and fill tsvector. */ @@ -798,8 +798,8 @@ array_to_tsvector(PG_FUNCTION_ARGS) cur = STRPTR(tsout); for (i = 0; i < nitems; i++) { - char *lex = VARDATA(dlexemes[i]); - int lex_len = VARSIZE(dlexemes[i]) - VARHDRSZ; + char *lex = VARDATA(DatumGetPointer(dlexemes[i])); + int lex_len = VARSIZE(DatumGetPointer(dlexemes[i])) - VARHDRSZ; memcpy(cur, lex, lex_len); arrout[i].haspos = 0; diff --git a/src/backend/utils/adt/uuid.c b/src/backend/utils/adt/uuid.c index be0f0f9f1ce49..e5f27ff892ba6 100644 --- a/src/backend/utils/adt/uuid.c +++ b/src/backend/utils/adt/uuid.c @@ -13,6 +13,7 @@ #include "postgres.h" +#include #include /* for clock_gettime() */ #include "common/hashfn.h" @@ -21,6 +22,7 @@ #include "port/pg_bswap.h" #include "utils/fmgrprotos.h" #include "utils/guc.h" +#include "utils/skipsupport.h" #include "utils/sortsupport.h" #include "utils/timestamp.h" #include "utils/uuid.h" @@ -396,11 +398,7 @@ uuid_abbrev_convert(Datum original, SortSupport ssup) { uint32 tmp; -#if SIZEOF_DATUM == 8 - tmp = (uint32) res ^ (uint32) ((uint64) res >> 32); -#else /* SIZEOF_DATUM != 8 */ - tmp = (uint32) res; -#endif + tmp = DatumGetUInt32(res) ^ (uint32) (DatumGetUInt64(res) >> 32); addHyperLogLog(&uss->abbr_card, DatumGetUInt32(hash_uint32(tmp))); } @@ -418,6 +416,74 @@ uuid_abbrev_convert(Datum original, SortSupport ssup) return res; } +static Datum +uuid_decrement(Relation rel, Datum existing, bool *underflow) +{ + pg_uuid_t *uuid; + + uuid = (pg_uuid_t *) palloc(UUID_LEN); + memcpy(uuid, DatumGetUUIDP(existing), UUID_LEN); + for (int i = UUID_LEN - 1; i >= 0; i--) + { + if (uuid->data[i] > 0) + { + uuid->data[i]--; + *underflow = false; + return UUIDPGetDatum(uuid); + } + uuid->data[i] = UCHAR_MAX; + } + + pfree(uuid); /* cannot leak memory */ + + /* return value is undefined */ + *underflow = true; + return (Datum) 0; +} + +static Datum +uuid_increment(Relation rel, Datum existing, bool *overflow) +{ + pg_uuid_t *uuid; + + uuid = (pg_uuid_t *) palloc(UUID_LEN); + memcpy(uuid, DatumGetUUIDP(existing), UUID_LEN); + for (int i = UUID_LEN - 1; i >= 0; i--) + { + if (uuid->data[i] < UCHAR_MAX) + { + uuid->data[i]++; + *overflow = false; + return UUIDPGetDatum(uuid); + } + uuid->data[i] = 0; + } + + pfree(uuid); /* cannot leak memory */ + + /* return value is undefined */ + *overflow = true; + return (Datum) 0; +} + +Datum +uuid_skipsupport(PG_FUNCTION_ARGS) +{ + SkipSupport sksup = (SkipSupport) PG_GETARG_POINTER(0); + pg_uuid_t *uuid_min = palloc(UUID_LEN); + pg_uuid_t *uuid_max = palloc(UUID_LEN); + + memset(uuid_min->data, 0x00, UUID_LEN); + memset(uuid_max->data, 0xFF, UUID_LEN); + + sksup->decrement = uuid_decrement; + sksup->increment = uuid_increment; + sksup->low_elem = UUIDPGetDatum(uuid_min); + sksup->high_elem = UUIDPGetDatum(uuid_max); + + PG_RETURN_VOID(); +} + /* hash index support */ Datum uuid_hash(PG_FUNCTION_ARGS) @@ -682,7 +748,7 @@ uuid_extract_timestamp(PG_FUNCTION_ARGS) + (((uint64) uuid->data[0]) << 40); /* convert ms to us, then adjust */ - ts = (TimestampTz) (tms * NS_PER_US) - + ts = (TimestampTz) (tms * US_PER_MS) - (POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY * USECS_PER_SEC; PG_RETURN_TIMESTAMPTZ(ts); diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 3e4d5568bde89..2c398cd9e5cb1 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -35,7 +35,6 @@ #include "port/pg_bswap.h" #include "regex/regex.h" #include "utils/builtins.h" -#include "utils/bytea.h" #include "utils/guc.h" #include "utils/lsyscache.h" #include "utils/memutils.h" @@ -43,10 +42,6 @@ #include "utils/sortsupport.h" #include "utils/varlena.h" - -/* GUC variable */ -int bytea_output = BYTEA_OUTPUT_HEX; - typedef struct varlena VarString; /* @@ -148,12 +143,6 @@ static int text_position_get_match_pos(TextPositionState *state); static void text_position_cleanup(TextPositionState *state); static void check_collation_set(Oid collid); static int text_cmp(text *arg1, text *arg2, Oid collid); -static bytea *bytea_catenate(bytea *t1, bytea *t2); -static bytea *bytea_substring(Datum str, - int S, - int L, - bool length_not_specified); -static bytea *bytea_overlay(bytea *t1, bytea *t2, int sp, int sl); static void appendStringInfoText(StringInfo str, const text *t); static bool split_text(FunctionCallInfo fcinfo, SplitTextOutputData *tstate); static void split_text_accum_result(SplitTextOutputData *tstate, @@ -279,307 +268,6 @@ text_to_cstring_buffer(const text *src, char *dst, size_t dst_len) * USER I/O ROUTINES * *****************************************************************************/ - -#define VAL(CH) ((CH) - '0') -#define DIG(VAL) ((VAL) + '0') - -/* - * byteain - converts from printable representation of byte array - * - * Non-printable characters must be passed as '\nnn' (octal) and are - * converted to internal form. '\' must be passed as '\\'. - * ereport(ERROR, ...) if bad form. - * - * BUGS: - * The input is scanned twice. - * The error checking of input is minimal. - */ -Datum -byteain(PG_FUNCTION_ARGS) -{ - char *inputText = PG_GETARG_CSTRING(0); - Node *escontext = fcinfo->context; - char *tp; - char *rp; - int bc; - bytea *result; - - /* Recognize hex input */ - if (inputText[0] == '\\' && inputText[1] == 'x') - { - size_t len = strlen(inputText); - - bc = (len - 2) / 2 + VARHDRSZ; /* maximum possible length */ - result = palloc(bc); - bc = hex_decode_safe(inputText + 2, len - 2, VARDATA(result), - escontext); - SET_VARSIZE(result, bc + VARHDRSZ); /* actual length */ - - PG_RETURN_BYTEA_P(result); - } - - /* Else, it's the traditional escaped style */ - for (bc = 0, tp = inputText; *tp != '\0'; bc++) - { - if (tp[0] != '\\') - tp++; - else if ((tp[0] == '\\') && - (tp[1] >= '0' && tp[1] <= '3') && - (tp[2] >= '0' && tp[2] <= '7') && - (tp[3] >= '0' && tp[3] <= '7')) - tp += 4; - else if ((tp[0] == '\\') && - (tp[1] == '\\')) - tp += 2; - else - { - /* - * one backslash, not followed by another or ### valid octal - */ - ereturn(escontext, (Datum) 0, - (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type %s", "bytea"))); - } - } - - bc += VARHDRSZ; - - result = (bytea *) palloc(bc); - SET_VARSIZE(result, bc); - - tp = inputText; - rp = VARDATA(result); - while (*tp != '\0') - { - if (tp[0] != '\\') - *rp++ = *tp++; - else if ((tp[0] == '\\') && - (tp[1] >= '0' && tp[1] <= '3') && - (tp[2] >= '0' && tp[2] <= '7') && - (tp[3] >= '0' && tp[3] <= '7')) - { - bc = VAL(tp[1]); - bc <<= 3; - bc += VAL(tp[2]); - bc <<= 3; - *rp++ = bc + VAL(tp[3]); - - tp += 4; - } - else if ((tp[0] == '\\') && - (tp[1] == '\\')) - { - *rp++ = '\\'; - tp += 2; - } - else - { - /* - * We should never get here. The first pass should not allow it. - */ - ereturn(escontext, (Datum) 0, - (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type %s", "bytea"))); - } - } - - PG_RETURN_BYTEA_P(result); -} - -/* - * byteaout - converts to printable representation of byte array - * - * In the traditional escaped format, non-printable characters are - * printed as '\nnn' (octal) and '\' as '\\'. - */ -Datum -byteaout(PG_FUNCTION_ARGS) -{ - bytea *vlena = PG_GETARG_BYTEA_PP(0); - char *result; - char *rp; - - if (bytea_output == BYTEA_OUTPUT_HEX) - { - /* Print hex format */ - rp = result = palloc(VARSIZE_ANY_EXHDR(vlena) * 2 + 2 + 1); - *rp++ = '\\'; - *rp++ = 'x'; - rp += hex_encode(VARDATA_ANY(vlena), VARSIZE_ANY_EXHDR(vlena), rp); - } - else if (bytea_output == BYTEA_OUTPUT_ESCAPE) - { - /* Print traditional escaped format */ - char *vp; - uint64 len; - int i; - - len = 1; /* empty string has 1 char */ - vp = VARDATA_ANY(vlena); - for (i = VARSIZE_ANY_EXHDR(vlena); i != 0; i--, vp++) - { - if (*vp == '\\') - len += 2; - else if ((unsigned char) *vp < 0x20 || (unsigned char) *vp > 0x7e) - len += 4; - else - len++; - } - - /* - * In principle len can't overflow uint32 if the input fit in 1GB, but - * for safety let's check rather than relying on palloc's internal - * check. - */ - if (len > MaxAllocSize) - ereport(ERROR, - (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg_internal("result of bytea output conversion is too large"))); - rp = result = (char *) palloc(len); - - vp = VARDATA_ANY(vlena); - for (i = VARSIZE_ANY_EXHDR(vlena); i != 0; i--, vp++) - { - if (*vp == '\\') - { - *rp++ = '\\'; - *rp++ = '\\'; - } - else if ((unsigned char) *vp < 0x20 || (unsigned char) *vp > 0x7e) - { - int val; /* holds unprintable chars */ - - val = *vp; - rp[0] = '\\'; - rp[3] = DIG(val & 07); - val >>= 3; - rp[2] = DIG(val & 07); - val >>= 3; - rp[1] = DIG(val & 03); - rp += 4; - } - else - *rp++ = *vp; - } - } - else - { - elog(ERROR, "unrecognized \"bytea_output\" setting: %d", - bytea_output); - rp = result = NULL; /* keep compiler quiet */ - } - *rp = '\0'; - PG_RETURN_CSTRING(result); -} - -/* - * bytearecv - converts external binary format to bytea - */ -Datum -bytearecv(PG_FUNCTION_ARGS) -{ - StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); - bytea *result; - int nbytes; - - nbytes = buf->len - buf->cursor; - result = (bytea *) palloc(nbytes + VARHDRSZ); - SET_VARSIZE(result, nbytes + VARHDRSZ); - pq_copymsgbytes(buf, VARDATA(result), nbytes); - PG_RETURN_BYTEA_P(result); -} - -/* - * byteasend - converts bytea to binary format - * - * This is a special case: just copy the input... - */ -Datum -byteasend(PG_FUNCTION_ARGS) -{ - bytea *vlena = PG_GETARG_BYTEA_P_COPY(0); - - PG_RETURN_BYTEA_P(vlena); -} - -Datum -bytea_string_agg_transfn(PG_FUNCTION_ARGS) -{ - StringInfo state; - - state = PG_ARGISNULL(0) ? NULL : (StringInfo) PG_GETARG_POINTER(0); - - /* Append the value unless null, preceding it with the delimiter. */ - if (!PG_ARGISNULL(1)) - { - bytea *value = PG_GETARG_BYTEA_PP(1); - bool isfirst = false; - - /* - * You might think we can just throw away the first delimiter, however - * we must keep it as we may be a parallel worker doing partial - * aggregation building a state to send to the main process. We need - * to keep the delimiter of every aggregation so that the combine - * function can properly join up the strings of two separately - * partially aggregated results. The first delimiter is only stripped - * off in the final function. To know how much to strip off the front - * of the string, we store the length of the first delimiter in the - * StringInfo's cursor field, which we don't otherwise need here. - */ - if (state == NULL) - { - state = makeStringAggState(fcinfo); - isfirst = true; - } - - if (!PG_ARGISNULL(2)) - { - bytea *delim = PG_GETARG_BYTEA_PP(2); - - appendBinaryStringInfo(state, VARDATA_ANY(delim), - VARSIZE_ANY_EXHDR(delim)); - if (isfirst) - state->cursor = VARSIZE_ANY_EXHDR(delim); - } - - appendBinaryStringInfo(state, VARDATA_ANY(value), - VARSIZE_ANY_EXHDR(value)); - } - - /* - * The transition type for string_agg() is declared to be "internal", - * which is a pass-by-value type the same size as a pointer. - */ - if (state) - PG_RETURN_POINTER(state); - PG_RETURN_NULL(); -} - -Datum -bytea_string_agg_finalfn(PG_FUNCTION_ARGS) -{ - StringInfo state; - - /* cannot be called directly because of internal-type argument */ - Assert(AggCheckCallContext(fcinfo, NULL)); - - state = PG_ARGISNULL(0) ? NULL : (StringInfo) PG_GETARG_POINTER(0); - - if (state != NULL) - { - /* As per comment in transfn, strip data before the cursor position */ - bytea *result; - int strippedlen = state->len - state->cursor; - - result = (bytea *) palloc(strippedlen + VARHDRSZ); - SET_VARSIZE(result, strippedlen + VARHDRSZ); - memcpy(VARDATA(result), &state->data[state->cursor], strippedlen); - PG_RETURN_BYTEA_P(result); - } - else - PG_RETURN_NULL(); -} - /* * textin - converts cstring to internal representation */ @@ -720,13 +408,12 @@ text_length(Datum str) { /* fastpath when max encoding length is one */ if (pg_database_encoding_max_length() == 1) - PG_RETURN_INT32(toast_raw_datum_size(str) - VARHDRSZ); + return (toast_raw_datum_size(str) - VARHDRSZ); else { text *t = DatumGetTextPP(str); - PG_RETURN_INT32(pg_mbstrlen_with_len(VARDATA_ANY(t), - VARSIZE_ANY_EXHDR(t))); + return (pg_mbstrlen_with_len(VARDATA_ANY(t), VARSIZE_ANY_EXHDR(t))); } } @@ -1984,14 +1671,13 @@ varstr_sortsupport(SortSupport ssup, Oid typid, Oid collid) * * Even apart from the risk of broken locales, it's possible that * there are platforms where the use of abbreviated keys should be - * disabled at compile time. Having only 4 byte datums could make - * worst-case performance drastically more likely, for example. - * Moreover, macOS's strxfrm() implementation is known to not - * effectively concentrate a significant amount of entropy from the - * original string in earlier transformed blobs. It's possible that - * other supported platforms are similarly encumbered. So, if we ever - * get past disabling this categorically, we may still want or need to - * disable it for particular platforms. + * disabled at compile time. For example, macOS's strxfrm() + * implementation is known to not effectively concentrate a + * significant amount of entropy from the original string in earlier + * transformed blobs. It's possible that other supported platforms + * are similarly encumbered. So, if we ever get past disabling this + * categorically, we may still want or need to disable it for + * particular platforms. */ if (!pg_strxfrm_enabled(locale)) abbreviate = false; @@ -2445,18 +2131,12 @@ varstr_abbrev_convert(Datum original, SortSupport ssup) addHyperLogLog(&sss->full_card, hash); /* Hash abbreviated key */ -#if SIZEOF_DATUM == 8 { - uint32 lohalf, - hihalf; + uint32 tmp; - lohalf = (uint32) res; - hihalf = (uint32) (res >> 32); - hash = DatumGetUInt32(hash_uint32(lohalf ^ hihalf)); + tmp = DatumGetUInt32(res) ^ (uint32) (DatumGetUInt64(res) >> 32); + hash = DatumGetUInt32(hash_uint32(tmp)); } -#else /* SIZEOF_DATUM != 8 */ - hash = DatumGetUInt32(hash_uint32((uint32) res)); -#endif addHyperLogLog(&sss->abbr_card, hash); @@ -2959,552 +2639,91 @@ bttext_pattern_sortsupport(PG_FUNCTION_ARGS) } -/*------------------------------------------------------------- - * byteaoctetlen - * - * get the number of bytes contained in an instance of type 'bytea' - *------------------------------------------------------------- +/* text_name() + * Converts a text type to a Name type. */ Datum -byteaoctetlen(PG_FUNCTION_ARGS) +text_name(PG_FUNCTION_ARGS) { - Datum str = PG_GETARG_DATUM(0); + text *s = PG_GETARG_TEXT_PP(0); + Name result; + int len; - /* We need not detoast the input at all */ - PG_RETURN_INT32(toast_raw_datum_size(str) - VARHDRSZ); + len = VARSIZE_ANY_EXHDR(s); + + /* Truncate oversize input */ + if (len >= NAMEDATALEN) + len = pg_mbcliplen(VARDATA_ANY(s), len, NAMEDATALEN - 1); + + /* We use palloc0 here to ensure result is zero-padded */ + result = (Name) palloc0(NAMEDATALEN); + memcpy(NameStr(*result), VARDATA_ANY(s), len); + + PG_RETURN_NAME(result); } -/* - * byteacat - - * takes two bytea* and returns a bytea* that is the concatenation of - * the two. - * - * Cloned from textcat and modified as required. +/* name_text() + * Converts a Name type to a text type. */ Datum -byteacat(PG_FUNCTION_ARGS) +name_text(PG_FUNCTION_ARGS) { - bytea *t1 = PG_GETARG_BYTEA_PP(0); - bytea *t2 = PG_GETARG_BYTEA_PP(1); + Name s = PG_GETARG_NAME(0); - PG_RETURN_BYTEA_P(bytea_catenate(t1, t2)); + PG_RETURN_TEXT_P(cstring_to_text(NameStr(*s))); } + /* - * bytea_catenate - * Guts of byteacat(), broken out so it can be used by other functions + * textToQualifiedNameList - convert a text object to list of names * - * Arguments can be in short-header form, but not compressed or out-of-line + * This implements the input parsing needed by nextval() and other + * functions that take a text parameter representing a qualified name. + * We split the name at dots, downcase if not double-quoted, and + * truncate names if they're too long. */ -static bytea * -bytea_catenate(bytea *t1, bytea *t2) +List * +textToQualifiedNameList(text *textval) { - bytea *result; - int len1, - len2, - len; - char *ptr; + char *rawname; + List *result = NIL; + List *namelist; + ListCell *l; - len1 = VARSIZE_ANY_EXHDR(t1); - len2 = VARSIZE_ANY_EXHDR(t2); + /* Convert to C string (handles possible detoasting). */ + /* Note we rely on being able to modify rawname below. */ + rawname = text_to_cstring(textval); - /* paranoia ... probably should throw error instead? */ - if (len1 < 0) - len1 = 0; - if (len2 < 0) - len2 = 0; + if (!SplitIdentifierString(rawname, '.', &namelist)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_NAME), + errmsg("invalid name syntax"))); - len = len1 + len2 + VARHDRSZ; - result = (bytea *) palloc(len); + if (namelist == NIL) + ereport(ERROR, + (errcode(ERRCODE_INVALID_NAME), + errmsg("invalid name syntax"))); - /* Set size of result string... */ - SET_VARSIZE(result, len); + foreach(l, namelist) + { + char *curname = (char *) lfirst(l); - /* Fill data field of result string... */ - ptr = VARDATA(result); - if (len1 > 0) - memcpy(ptr, VARDATA_ANY(t1), len1); - if (len2 > 0) - memcpy(ptr + len1, VARDATA_ANY(t2), len2); + result = lappend(result, makeString(pstrdup(curname))); + } + + pfree(rawname); + list_free(namelist); return result; } -#define PG_STR_GET_BYTEA(str_) \ - DatumGetByteaPP(DirectFunctionCall1(byteain, CStringGetDatum(str_))) - /* - * bytea_substr() - * Return a substring starting at the specified position. - * Cloned from text_substr and modified as required. + * SplitIdentifierString --- parse a string containing identifiers * - * Input: - * - string - * - starting position (is one-based) - * - string length (optional) - * - * If the starting position is zero or less, then return from the start of the string - * adjusting the length to be consistent with the "negative start" per SQL. - * If the length is less than zero, an ERROR is thrown. If no third argument - * (length) is provided, the length to the end of the string is assumed. - */ -Datum -bytea_substr(PG_FUNCTION_ARGS) -{ - PG_RETURN_BYTEA_P(bytea_substring(PG_GETARG_DATUM(0), - PG_GETARG_INT32(1), - PG_GETARG_INT32(2), - false)); -} - -/* - * bytea_substr_no_len - - * Wrapper to avoid opr_sanity failure due to - * one function accepting a different number of args. - */ -Datum -bytea_substr_no_len(PG_FUNCTION_ARGS) -{ - PG_RETURN_BYTEA_P(bytea_substring(PG_GETARG_DATUM(0), - PG_GETARG_INT32(1), - -1, - true)); -} - -static bytea * -bytea_substring(Datum str, - int S, - int L, - bool length_not_specified) -{ - int32 S1; /* adjusted start position */ - int32 L1; /* adjusted substring length */ - int32 E; /* end position */ - - /* - * The logic here should generally match text_substring(). - */ - S1 = Max(S, 1); - - if (length_not_specified) - { - /* - * Not passed a length - DatumGetByteaPSlice() grabs everything to the - * end of the string if we pass it a negative value for length. - */ - L1 = -1; - } - else if (L < 0) - { - /* SQL99 says to throw an error for E < S, i.e., negative length */ - ereport(ERROR, - (errcode(ERRCODE_SUBSTRING_ERROR), - errmsg("negative substring length not allowed"))); - L1 = -1; /* silence stupider compilers */ - } - else if (pg_add_s32_overflow(S, L, &E)) - { - /* - * L could be large enough for S + L to overflow, in which case the - * substring must run to end of string. - */ - L1 = -1; - } - else - { - /* - * A zero or negative value for the end position can happen if the - * start was negative or one. SQL99 says to return a zero-length - * string. - */ - if (E < 1) - return PG_STR_GET_BYTEA(""); - - L1 = E - S1; - } - - /* - * If the start position is past the end of the string, SQL99 says to - * return a zero-length string -- DatumGetByteaPSlice() will do that for - * us. We need only convert S1 to zero-based starting position. - */ - return DatumGetByteaPSlice(str, S1 - 1, L1); -} - -/* - * byteaoverlay - * Replace specified substring of first string with second - * - * The SQL standard defines OVERLAY() in terms of substring and concatenation. - * This code is a direct implementation of what the standard says. - */ -Datum -byteaoverlay(PG_FUNCTION_ARGS) -{ - bytea *t1 = PG_GETARG_BYTEA_PP(0); - bytea *t2 = PG_GETARG_BYTEA_PP(1); - int sp = PG_GETARG_INT32(2); /* substring start position */ - int sl = PG_GETARG_INT32(3); /* substring length */ - - PG_RETURN_BYTEA_P(bytea_overlay(t1, t2, sp, sl)); -} - -Datum -byteaoverlay_no_len(PG_FUNCTION_ARGS) -{ - bytea *t1 = PG_GETARG_BYTEA_PP(0); - bytea *t2 = PG_GETARG_BYTEA_PP(1); - int sp = PG_GETARG_INT32(2); /* substring start position */ - int sl; - - sl = VARSIZE_ANY_EXHDR(t2); /* defaults to length(t2) */ - PG_RETURN_BYTEA_P(bytea_overlay(t1, t2, sp, sl)); -} - -static bytea * -bytea_overlay(bytea *t1, bytea *t2, int sp, int sl) -{ - bytea *result; - bytea *s1; - bytea *s2; - int sp_pl_sl; - - /* - * Check for possible integer-overflow cases. For negative sp, throw a - * "substring length" error because that's what should be expected - * according to the spec's definition of OVERLAY(). - */ - if (sp <= 0) - ereport(ERROR, - (errcode(ERRCODE_SUBSTRING_ERROR), - errmsg("negative substring length not allowed"))); - if (pg_add_s32_overflow(sp, sl, &sp_pl_sl)) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("integer out of range"))); - - s1 = bytea_substring(PointerGetDatum(t1), 1, sp - 1, false); - s2 = bytea_substring(PointerGetDatum(t1), sp_pl_sl, -1, true); - result = bytea_catenate(s1, t2); - result = bytea_catenate(result, s2); - - return result; -} - -/* - * bit_count - */ -Datum -bytea_bit_count(PG_FUNCTION_ARGS) -{ - bytea *t1 = PG_GETARG_BYTEA_PP(0); - - PG_RETURN_INT64(pg_popcount(VARDATA_ANY(t1), VARSIZE_ANY_EXHDR(t1))); -} - -/* - * byteapos - - * Return the position of the specified substring. - * Implements the SQL POSITION() function. - * Cloned from textpos and modified as required. - */ -Datum -byteapos(PG_FUNCTION_ARGS) -{ - bytea *t1 = PG_GETARG_BYTEA_PP(0); - bytea *t2 = PG_GETARG_BYTEA_PP(1); - int pos; - int px, - p; - int len1, - len2; - char *p1, - *p2; - - len1 = VARSIZE_ANY_EXHDR(t1); - len2 = VARSIZE_ANY_EXHDR(t2); - - if (len2 <= 0) - PG_RETURN_INT32(1); /* result for empty pattern */ - - p1 = VARDATA_ANY(t1); - p2 = VARDATA_ANY(t2); - - pos = 0; - px = (len1 - len2); - for (p = 0; p <= px; p++) - { - if ((*p2 == *p1) && (memcmp(p1, p2, len2) == 0)) - { - pos = p + 1; - break; - }; - p1++; - }; - - PG_RETURN_INT32(pos); -} - -/*------------------------------------------------------------- - * byteaGetByte - * - * this routine treats "bytea" as an array of bytes. - * It returns the Nth byte (a number between 0 and 255). - *------------------------------------------------------------- - */ -Datum -byteaGetByte(PG_FUNCTION_ARGS) -{ - bytea *v = PG_GETARG_BYTEA_PP(0); - int32 n = PG_GETARG_INT32(1); - int len; - int byte; - - len = VARSIZE_ANY_EXHDR(v); - - if (n < 0 || n >= len) - ereport(ERROR, - (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), - errmsg("index %d out of valid range, 0..%d", - n, len - 1))); - - byte = ((unsigned char *) VARDATA_ANY(v))[n]; - - PG_RETURN_INT32(byte); -} - -/*------------------------------------------------------------- - * byteaGetBit - * - * This routine treats a "bytea" type like an array of bits. - * It returns the value of the Nth bit (0 or 1). - * - *------------------------------------------------------------- - */ -Datum -byteaGetBit(PG_FUNCTION_ARGS) -{ - bytea *v = PG_GETARG_BYTEA_PP(0); - int64 n = PG_GETARG_INT64(1); - int byteNo, - bitNo; - int len; - int byte; - - len = VARSIZE_ANY_EXHDR(v); - - if (n < 0 || n >= (int64) len * 8) - ereport(ERROR, - (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), - errmsg("index %" PRId64 " out of valid range, 0..%" PRId64, - n, (int64) len * 8 - 1))); - - /* n/8 is now known < len, so safe to cast to int */ - byteNo = (int) (n / 8); - bitNo = (int) (n % 8); - - byte = ((unsigned char *) VARDATA_ANY(v))[byteNo]; - - if (byte & (1 << bitNo)) - PG_RETURN_INT32(1); - else - PG_RETURN_INT32(0); -} - -/*------------------------------------------------------------- - * byteaSetByte - * - * Given an instance of type 'bytea' creates a new one with - * the Nth byte set to the given value. - * - *------------------------------------------------------------- - */ -Datum -byteaSetByte(PG_FUNCTION_ARGS) -{ - bytea *res = PG_GETARG_BYTEA_P_COPY(0); - int32 n = PG_GETARG_INT32(1); - int32 newByte = PG_GETARG_INT32(2); - int len; - - len = VARSIZE(res) - VARHDRSZ; - - if (n < 0 || n >= len) - ereport(ERROR, - (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), - errmsg("index %d out of valid range, 0..%d", - n, len - 1))); - - /* - * Now set the byte. - */ - ((unsigned char *) VARDATA(res))[n] = newByte; - - PG_RETURN_BYTEA_P(res); -} - -/*------------------------------------------------------------- - * byteaSetBit - * - * Given an instance of type 'bytea' creates a new one with - * the Nth bit set to the given value. - * - *------------------------------------------------------------- - */ -Datum -byteaSetBit(PG_FUNCTION_ARGS) -{ - bytea *res = PG_GETARG_BYTEA_P_COPY(0); - int64 n = PG_GETARG_INT64(1); - int32 newBit = PG_GETARG_INT32(2); - int len; - int oldByte, - newByte; - int byteNo, - bitNo; - - len = VARSIZE(res) - VARHDRSZ; - - if (n < 0 || n >= (int64) len * 8) - ereport(ERROR, - (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), - errmsg("index %" PRId64 " out of valid range, 0..%" PRId64, - n, (int64) len * 8 - 1))); - - /* n/8 is now known < len, so safe to cast to int */ - byteNo = (int) (n / 8); - bitNo = (int) (n % 8); - - /* - * sanity check! - */ - if (newBit != 0 && newBit != 1) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("new bit must be 0 or 1"))); - - /* - * Update the byte. - */ - oldByte = ((unsigned char *) VARDATA(res))[byteNo]; - - if (newBit == 0) - newByte = oldByte & (~(1 << bitNo)); - else - newByte = oldByte | (1 << bitNo); - - ((unsigned char *) VARDATA(res))[byteNo] = newByte; - - PG_RETURN_BYTEA_P(res); -} - -/* - * Return reversed bytea - */ -Datum -bytea_reverse(PG_FUNCTION_ARGS) -{ - bytea *v = PG_GETARG_BYTEA_PP(0); - const char *p = VARDATA_ANY(v); - int len = VARSIZE_ANY_EXHDR(v); - const char *endp = p + len; - bytea *result = palloc(len + VARHDRSZ); - char *dst = (char *) VARDATA(result) + len; - - SET_VARSIZE(result, len + VARHDRSZ); - - while (p < endp) - *(--dst) = *p++; - - PG_RETURN_BYTEA_P(result); -} - - -/* text_name() - * Converts a text type to a Name type. - */ -Datum -text_name(PG_FUNCTION_ARGS) -{ - text *s = PG_GETARG_TEXT_PP(0); - Name result; - int len; - - len = VARSIZE_ANY_EXHDR(s); - - /* Truncate oversize input */ - if (len >= NAMEDATALEN) - len = pg_mbcliplen(VARDATA_ANY(s), len, NAMEDATALEN - 1); - - /* We use palloc0 here to ensure result is zero-padded */ - result = (Name) palloc0(NAMEDATALEN); - memcpy(NameStr(*result), VARDATA_ANY(s), len); - - PG_RETURN_NAME(result); -} - -/* name_text() - * Converts a Name type to a text type. - */ -Datum -name_text(PG_FUNCTION_ARGS) -{ - Name s = PG_GETARG_NAME(0); - - PG_RETURN_TEXT_P(cstring_to_text(NameStr(*s))); -} - - -/* - * textToQualifiedNameList - convert a text object to list of names - * - * This implements the input parsing needed by nextval() and other - * functions that take a text parameter representing a qualified name. - * We split the name at dots, downcase if not double-quoted, and - * truncate names if they're too long. - */ -List * -textToQualifiedNameList(text *textval) -{ - char *rawname; - List *result = NIL; - List *namelist; - ListCell *l; - - /* Convert to C string (handles possible detoasting). */ - /* Note we rely on being able to modify rawname below. */ - rawname = text_to_cstring(textval); - - if (!SplitIdentifierString(rawname, '.', &namelist)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_NAME), - errmsg("invalid name syntax"))); - - if (namelist == NIL) - ereport(ERROR, - (errcode(ERRCODE_INVALID_NAME), - errmsg("invalid name syntax"))); - - foreach(l, namelist) - { - char *curname = (char *) lfirst(l); - - result = lappend(result, makeString(pstrdup(curname))); - } - - pfree(rawname); - list_free(namelist); - - return result; -} - -/* - * SplitIdentifierString --- parse a string containing identifiers - * - * This is the guts of textToQualifiedNameList, and is exported for use in - * other situations such as parsing GUC variables. In the GUC case, it's - * important to avoid memory leaks, so the API is designed to minimize the - * amount of stuff that needs to be allocated and freed. + * This is the guts of textToQualifiedNameList, and is exported for use in + * other situations such as parsing GUC variables. In the GUC case, it's + * important to avoid memory leaks, so the API is designed to minimize the + * amount of stuff that needs to be allocated and freed. * * Inputs: * rawstring: the input string; must be overwritable! On return, it's @@ -3849,331 +3068,6 @@ SplitGUCList(char *rawstring, char separator, return true; } - -/***************************************************************************** - * Comparison Functions used for bytea - * - * Note: btree indexes need these routines not to leak memory; therefore, - * be careful to free working copies of toasted datums. Most places don't - * need to be so careful. - *****************************************************************************/ - -Datum -byteaeq(PG_FUNCTION_ARGS) -{ - Datum arg1 = PG_GETARG_DATUM(0); - Datum arg2 = PG_GETARG_DATUM(1); - bool result; - Size len1, - len2; - - /* - * We can use a fast path for unequal lengths, which might save us from - * having to detoast one or both values. - */ - len1 = toast_raw_datum_size(arg1); - len2 = toast_raw_datum_size(arg2); - if (len1 != len2) - result = false; - else - { - bytea *barg1 = DatumGetByteaPP(arg1); - bytea *barg2 = DatumGetByteaPP(arg2); - - result = (memcmp(VARDATA_ANY(barg1), VARDATA_ANY(barg2), - len1 - VARHDRSZ) == 0); - - PG_FREE_IF_COPY(barg1, 0); - PG_FREE_IF_COPY(barg2, 1); - } - - PG_RETURN_BOOL(result); -} - -Datum -byteane(PG_FUNCTION_ARGS) -{ - Datum arg1 = PG_GETARG_DATUM(0); - Datum arg2 = PG_GETARG_DATUM(1); - bool result; - Size len1, - len2; - - /* - * We can use a fast path for unequal lengths, which might save us from - * having to detoast one or both values. - */ - len1 = toast_raw_datum_size(arg1); - len2 = toast_raw_datum_size(arg2); - if (len1 != len2) - result = true; - else - { - bytea *barg1 = DatumGetByteaPP(arg1); - bytea *barg2 = DatumGetByteaPP(arg2); - - result = (memcmp(VARDATA_ANY(barg1), VARDATA_ANY(barg2), - len1 - VARHDRSZ) != 0); - - PG_FREE_IF_COPY(barg1, 0); - PG_FREE_IF_COPY(barg2, 1); - } - - PG_RETURN_BOOL(result); -} - -Datum -bytealt(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - - PG_FREE_IF_COPY(arg1, 0); - PG_FREE_IF_COPY(arg2, 1); - - PG_RETURN_BOOL((cmp < 0) || ((cmp == 0) && (len1 < len2))); -} - -Datum -byteale(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - - PG_FREE_IF_COPY(arg1, 0); - PG_FREE_IF_COPY(arg2, 1); - - PG_RETURN_BOOL((cmp < 0) || ((cmp == 0) && (len1 <= len2))); -} - -Datum -byteagt(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - - PG_FREE_IF_COPY(arg1, 0); - PG_FREE_IF_COPY(arg2, 1); - - PG_RETURN_BOOL((cmp > 0) || ((cmp == 0) && (len1 > len2))); -} - -Datum -byteage(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - - PG_FREE_IF_COPY(arg1, 0); - PG_FREE_IF_COPY(arg2, 1); - - PG_RETURN_BOOL((cmp > 0) || ((cmp == 0) && (len1 >= len2))); -} - -Datum -byteacmp(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - if ((cmp == 0) && (len1 != len2)) - cmp = (len1 < len2) ? -1 : 1; - - PG_FREE_IF_COPY(arg1, 0); - PG_FREE_IF_COPY(arg2, 1); - - PG_RETURN_INT32(cmp); -} - -Datum -bytea_larger(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - bytea *result; - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - result = ((cmp > 0) || ((cmp == 0) && (len1 > len2)) ? arg1 : arg2); - - PG_RETURN_BYTEA_P(result); -} - -Datum -bytea_smaller(PG_FUNCTION_ARGS) -{ - bytea *arg1 = PG_GETARG_BYTEA_PP(0); - bytea *arg2 = PG_GETARG_BYTEA_PP(1); - bytea *result; - int len1, - len2; - int cmp; - - len1 = VARSIZE_ANY_EXHDR(arg1); - len2 = VARSIZE_ANY_EXHDR(arg2); - - cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); - result = ((cmp < 0) || ((cmp == 0) && (len1 < len2)) ? arg1 : arg2); - - PG_RETURN_BYTEA_P(result); -} - -Datum -bytea_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - MemoryContext oldcontext; - - oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt); - - /* Use generic string SortSupport, forcing "C" collation */ - varstr_sortsupport(ssup, BYTEAOID, C_COLLATION_OID); - - MemoryContextSwitchTo(oldcontext); - - PG_RETURN_VOID(); -} - -/* Cast bytea -> int2 */ -Datum -bytea_int2(PG_FUNCTION_ARGS) -{ - bytea *v = PG_GETARG_BYTEA_PP(0); - int len = VARSIZE_ANY_EXHDR(v); - uint16 result; - - /* Check that the byte array is not too long */ - if (len > sizeof(result)) - ereport(ERROR, - errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("smallint out of range")); - - /* Convert it to an integer; most significant bytes come first */ - result = 0; - for (int i = 0; i < len; i++) - { - result <<= BITS_PER_BYTE; - result |= ((unsigned char *) VARDATA_ANY(v))[i]; - } - - PG_RETURN_INT16(result); -} - -/* Cast bytea -> int4 */ -Datum -bytea_int4(PG_FUNCTION_ARGS) -{ - bytea *v = PG_GETARG_BYTEA_PP(0); - int len = VARSIZE_ANY_EXHDR(v); - uint32 result; - - /* Check that the byte array is not too long */ - if (len > sizeof(result)) - ereport(ERROR, - errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("integer out of range")); - - /* Convert it to an integer; most significant bytes come first */ - result = 0; - for (int i = 0; i < len; i++) - { - result <<= BITS_PER_BYTE; - result |= ((unsigned char *) VARDATA_ANY(v))[i]; - } - - PG_RETURN_INT32(result); -} - -/* Cast bytea -> int8 */ -Datum -bytea_int8(PG_FUNCTION_ARGS) -{ - bytea *v = PG_GETARG_BYTEA_PP(0); - int len = VARSIZE_ANY_EXHDR(v); - uint64 result; - - /* Check that the byte array is not too long */ - if (len > sizeof(result)) - ereport(ERROR, - errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("bigint out of range")); - - /* Convert it to an integer; most significant bytes come first */ - result = 0; - for (int i = 0; i < len; i++) - { - result <<= BITS_PER_BYTE; - result |= ((unsigned char *) VARDATA_ANY(v))[i]; - } - - PG_RETURN_INT64(result); -} - -/* Cast int2 -> bytea; can just use int2send() */ -Datum -int2_bytea(PG_FUNCTION_ARGS) -{ - return int2send(fcinfo); -} - -/* Cast int4 -> bytea; can just use int4send() */ -Datum -int4_bytea(PG_FUNCTION_ARGS) -{ - return int4send(fcinfo); -} - -/* Cast int8 -> bytea; can just use int8send() */ -Datum -int8_bytea(PG_FUNCTION_ARGS) -{ - return int8send(fcinfo); -} - /* * appendStringInfoText * diff --git a/src/backend/utils/adt/waitfuncs.c b/src/backend/utils/adt/waitfuncs.c index ddd0a57c0c597..f01cad72a0feb 100644 --- a/src/backend/utils/adt/waitfuncs.c +++ b/src/backend/utils/adt/waitfuncs.c @@ -73,7 +73,7 @@ pg_isolation_test_session_is_blocked(PG_FUNCTION_ARGS) * acquire heavyweight locks. */ blocking_pids_a = - DatumGetArrayTypeP(DirectFunctionCall1(pg_blocking_pids, blocked_pid)); + DatumGetArrayTypeP(DirectFunctionCall1(pg_blocking_pids, Int32GetDatum(blocked_pid))); Assert(ARR_ELEMTYPE(blocking_pids_a) == INT4OID); Assert(!array_contains_nulls(blocking_pids_a)); diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index db8d0d6a7e872..7b7396cdf830c 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -84,7 +84,6 @@ #include "catalog/namespace.h" #include "catalog/pg_class.h" #include "catalog/pg_type.h" -#include "commands/dbcommands.h" #include "executor/spi.h" #include "executor/tablefunc.h" #include "fmgr.h" @@ -529,14 +528,36 @@ xmltext(PG_FUNCTION_ARGS) #ifdef USE_LIBXML text *arg = PG_GETARG_TEXT_PP(0); text *result; - xmlChar *xmlbuf = NULL; + volatile xmlChar *xmlbuf = NULL; + PgXmlErrorContext *xmlerrcxt; + + /* First we gotta spin up some error handling. */ + xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); + + PG_TRY(); + { + xmlbuf = xmlEncodeSpecialChars(NULL, xml_text2xmlChar(arg)); + + if (xmlbuf == NULL || xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate xmlChar"); - xmlbuf = xmlEncodeSpecialChars(NULL, xml_text2xmlChar(arg)); + result = cstring_to_text_with_len((const char *) xmlbuf, + xmlStrlen((const xmlChar *) xmlbuf)); + } + PG_CATCH(); + { + if (xmlbuf) + xmlFree((xmlChar *) xmlbuf); + + pg_xml_done(xmlerrcxt, true); + PG_RE_THROW(); + } + PG_END_TRY(); - Assert(xmlbuf); + xmlFree((xmlChar *) xmlbuf); + pg_xml_done(xmlerrcxt, false); - result = cstring_to_text_with_len((const char *) xmlbuf, xmlStrlen(xmlbuf)); - xmlFree(xmlbuf); PG_RETURN_XML_P(result); #else NO_XML_SUPPORT(); @@ -663,7 +684,7 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent) volatile xmlBufferPtr buf = NULL; volatile xmlSaveCtxtPtr ctxt = NULL; ErrorSaveContext escontext = {T_ErrorSaveContext}; - PgXmlErrorContext *xmlerrcxt; + PgXmlErrorContext *volatile xmlerrcxt = NULL; #endif if (xmloption_arg != XMLOPTION_DOCUMENT && !indent) @@ -704,13 +725,18 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent) return (text *) data; } - /* Otherwise, we gotta spin up some error handling. */ - xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); - + /* + * Otherwise, we gotta spin up some error handling. Unlike most other + * routines in this module, we already have a libxml "doc" structure to + * free, so we need to call pg_xml_init() inside the PG_TRY and be + * prepared for it to fail (typically due to palloc OOM). + */ PG_TRY(); { size_t decl_len = 0; + xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); + /* The serialized data will go into this buffer. */ buf = xmlBufferCreate(); @@ -754,6 +780,7 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent) * content nodes, and then iterate over the nodes. */ xmlNodePtr root; + xmlNodePtr oldroot; xmlNodePtr newline; root = xmlNewNode(NULL, (const xmlChar *) "content-root"); @@ -761,9 +788,18 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent) xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, "could not allocate xml node"); - /* This attaches root to doc, so we need not free it separately. */ - xmlDocSetRootElement(doc, root); - xmlAddChildList(root, content_nodes); + /* + * This attaches root to doc, so we need not free it separately... + * but instead, we have to free the old root if there was one. + */ + oldroot = xmlDocSetRootElement(doc, root); + if (oldroot != NULL) + xmlFreeNode(oldroot); + + if (xmlAddChildList(root, content_nodes) == NULL || + xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR, + "could not append xml node list"); /* * We use this node to insert newlines in the dump. Note: in at @@ -831,10 +867,10 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent) xmlSaveClose(ctxt); if (buf) xmlBufferFree(buf); - if (doc) - xmlFreeDoc(doc); + xmlFreeDoc(doc); - pg_xml_done(xmlerrcxt, true); + if (xmlerrcxt) + pg_xml_done(xmlerrcxt, true); PG_RE_THROW(); } @@ -924,7 +960,10 @@ xmlelement(XmlExpr *xexpr, xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, "could not allocate xmlTextWriter"); - xmlTextWriterStartElement(writer, (xmlChar *) xexpr->name); + if (xmlTextWriterStartElement(writer, (xmlChar *) xexpr->name) < 0 || + xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR, + "could not start xml element"); forboth(arg, named_arg_strings, narg, xexpr->arg_names) { @@ -932,19 +971,30 @@ xmlelement(XmlExpr *xexpr, char *argname = strVal(lfirst(narg)); if (str) - xmlTextWriterWriteAttribute(writer, - (xmlChar *) argname, - (xmlChar *) str); + { + if (xmlTextWriterWriteAttribute(writer, + (xmlChar *) argname, + (xmlChar *) str) < 0 || + xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR, + "could not write xml attribute"); + } } foreach(arg, arg_strings) { char *str = (char *) lfirst(arg); - xmlTextWriterWriteRaw(writer, (xmlChar *) str); + if (xmlTextWriterWriteRaw(writer, (xmlChar *) str) < 0 || + xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR, + "could not write raw xml text"); } - xmlTextWriterEndElement(writer); + if (xmlTextWriterEndElement(writer) < 0 || + xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR, + "could not end xml element"); /* we MUST do this now to flush data out to the buffer ... */ xmlFreeTextWriter(writer); @@ -1718,7 +1768,7 @@ xml_doctype_in_content(const xmlChar *str) * xmloption_arg, but a DOCTYPE node in the input can force DOCUMENT mode). * * If parsed_nodes isn't NULL and we parse in CONTENT mode, the list - * of parsed nodes from the xmlParseInNodeContext call will be returned + * of parsed nodes from the xmlParseBalancedChunkMemory call will be returned * to *parsed_nodes. (It is caller's responsibility to free that.) * * Errors normally result in ereport(ERROR), but if escontext is an @@ -1744,6 +1794,7 @@ xml_parse(text *data, XmlOptionType xmloption_arg, PgXmlErrorContext *xmlerrcxt; volatile xmlParserCtxtPtr ctxt = NULL; volatile xmlDocPtr doc = NULL; + volatile int save_keep_blanks = -1; /* * This step looks annoyingly redundant, but we must do it to have a @@ -1771,7 +1822,6 @@ xml_parse(text *data, XmlOptionType xmloption_arg, PG_TRY(); { bool parse_as_document = false; - int options; int res_code; size_t count = 0; xmlChar *version = NULL; @@ -1802,18 +1852,6 @@ xml_parse(text *data, XmlOptionType xmloption_arg, parse_as_document = true; } - /* - * Select parse options. - * - * Note that here we try to apply DTD defaults (XML_PARSE_DTDATTR) - * according to SQL/XML:2008 GR 10.16.7.d: 'Default values defined by - * internal DTD are applied'. As for external DTDs, we try to support - * them too (see SQL/XML:2008 GR 10.16.7.e), but that doesn't really - * happen because xmlPgEntityLoader prevents it. - */ - options = XML_PARSE_NOENT | XML_PARSE_DTDATTR - | (preserve_whitespace ? 0 : XML_PARSE_NOBLANKS); - /* initialize output parameters */ if (parsed_xmloptiontype != NULL) *parsed_xmloptiontype = parse_as_document ? XMLOPTION_DOCUMENT : @@ -1823,11 +1861,26 @@ xml_parse(text *data, XmlOptionType xmloption_arg, if (parse_as_document) { + int options; + + /* set up parser context used by xmlCtxtReadDoc */ ctxt = xmlNewParserCtxt(); if (ctxt == NULL || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, "could not allocate parser context"); + /* + * Select parse options. + * + * Note that here we try to apply DTD defaults (XML_PARSE_DTDATTR) + * according to SQL/XML:2008 GR 10.16.7.d: 'Default values defined + * by internal DTD are applied'. As for external DTDs, we try to + * support them too (see SQL/XML:2008 GR 10.16.7.e), but that + * doesn't really happen because xmlPgEntityLoader prevents it. + */ + options = XML_PARSE_NOENT | XML_PARSE_DTDATTR + | (preserve_whitespace ? 0 : XML_PARSE_NOBLANKS); + doc = xmlCtxtReadDoc(ctxt, utf8string, NULL, /* no URL */ "UTF-8", @@ -1849,9 +1902,7 @@ xml_parse(text *data, XmlOptionType xmloption_arg, } else { - xmlNodePtr root; - - /* set up document with empty root node to be the context node */ + /* set up document that xmlParseBalancedChunkMemory will add to */ doc = xmlNewDoc(version); if (doc == NULL || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, @@ -1864,38 +1915,22 @@ xml_parse(text *data, XmlOptionType xmloption_arg, "could not allocate XML document"); doc->standalone = standalone; - root = xmlNewNode(NULL, (const xmlChar *) "content-root"); - if (root == NULL || xmlerrcxt->err_occurred) - xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, - "could not allocate xml node"); - /* This attaches root to doc, so we need not free it separately. */ - xmlDocSetRootElement(doc, root); + /* set parse options --- have to do this the ugly way */ + save_keep_blanks = xmlKeepBlanksDefault(preserve_whitespace ? 1 : 0); /* allow empty content */ if (*(utf8string + count)) { - xmlNodePtr node_list = NULL; - xmlParserErrors res; - - res = xmlParseInNodeContext(root, - (char *) utf8string + count, - strlen((char *) utf8string + count), - options, - &node_list); - - if (res != XML_ERR_OK || xmlerrcxt->err_occurred) + res_code = xmlParseBalancedChunkMemory(doc, NULL, NULL, 0, + utf8string + count, + parsed_nodes); + if (res_code != 0 || xmlerrcxt->err_occurred) { - xmlFreeNodeList(node_list); xml_errsave(escontext, xmlerrcxt, ERRCODE_INVALID_XML_CONTENT, "invalid XML content"); goto fail; } - - if (parsed_nodes != NULL) - *parsed_nodes = node_list; - else - xmlFreeNodeList(node_list); } } @@ -1904,6 +1939,8 @@ xml_parse(text *data, XmlOptionType xmloption_arg, } PG_CATCH(); { + if (save_keep_blanks != -1) + xmlKeepBlanksDefault(save_keep_blanks); if (doc != NULL) xmlFreeDoc(doc); if (ctxt != NULL) @@ -1915,6 +1952,9 @@ xml_parse(text *data, XmlOptionType xmloption_arg, } PG_END_TRY(); + if (save_keep_blanks != -1) + xmlKeepBlanksDefault(save_keep_blanks); + if (ctxt != NULL) xmlFreeParserCtxt(ctxt); @@ -4207,20 +4247,27 @@ xml_xmlnodetoxmltype(xmlNodePtr cur, PgXmlErrorContext *xmlerrcxt) } else { - xmlChar *str; + volatile xmlChar *str = NULL; - str = xmlXPathCastNodeToString(cur); PG_TRY(); { + char *escaped; + + str = xmlXPathCastNodeToString(cur); + if (str == NULL || xmlerrcxt->err_occurred) + xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, + "could not allocate xmlChar"); + /* Here we rely on XML having the same representation as TEXT */ - char *escaped = escape_xml((char *) str); + escaped = escape_xml((char *) str); result = (xmltype *) cstring_to_text(escaped); pfree(escaped); } PG_FINALLY(); { - xmlFree(str); + if (str) + xmlFree((xmlChar *) str); } PG_END_TRY(); } diff --git a/src/backend/utils/cache/Makefile b/src/backend/utils/cache/Makefile index 5105018cb79c8..77b3e1a037b9b 100644 --- a/src/backend/utils/cache/Makefile +++ b/src/backend/utils/cache/Makefile @@ -16,6 +16,7 @@ OBJS = \ attoptcache.o \ catcache.o \ evtcache.o \ + funccache.o \ inval.o \ lsyscache.o \ partcache.o \ diff --git a/src/backend/utils/cache/attoptcache.c b/src/backend/utils/cache/attoptcache.c index 5c8360c08b5f8..45d1e2be007ba 100644 --- a/src/backend/utils/cache/attoptcache.c +++ b/src/backend/utils/cache/attoptcache.c @@ -86,7 +86,7 @@ relatt_cache_syshash(const void *key, Size keysize) const AttoptCacheKey *ckey = key; Assert(keysize == sizeof(*ckey)); - return GetSysCacheHashValue2(ATTNUM, ckey->attrelid, ckey->attnum); + return GetSysCacheHashValue2(ATTNUM, ObjectIdGetDatum(ckey->attrelid), Int32GetDatum(ckey->attnum)); } /* diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 9ad7681f15552..e2cd3feaf81d3 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -213,7 +213,7 @@ namehashfast(Datum datum) { char *key = NameStr(*DatumGetName(datum)); - return hash_any((unsigned char *) key, strlen(key)); + return hash_bytes((unsigned char *) key, strlen(key)); } static bool @@ -317,6 +317,7 @@ GetCCHashEqFuncs(Oid keytype, CCHashFN *hashfunc, RegProcedure *eqfunc, CCFastEq case REGDICTIONARYOID: case REGROLEOID: case REGNAMESPACEOID: + case REGDATABASEOID: *hashfunc = int4hashfast; *fasteqfunc = int4eqfast; *eqfunc = F_OIDEQ; @@ -1054,12 +1055,41 @@ RehashCatCacheLists(CatCache *cp) cp->cc_lbucket = newbucket; } +/* + * ConditionalCatalogCacheInitializeCache + * + * Call CatalogCacheInitializeCache() if not yet done. + */ +pg_attribute_always_inline +static void +ConditionalCatalogCacheInitializeCache(CatCache *cache) +{ +#ifdef USE_ASSERT_CHECKING + /* + * TypeCacheRelCallback() runs outside transactions and relies on TYPEOID + * for hashing. This isn't ideal. Since lookup_type_cache() both + * registers the callback and searches TYPEOID, reaching trouble likely + * requires OOM at an unlucky moment. + * + * InvalidateAttoptCacheCallback() runs outside transactions and likewise + * relies on ATTNUM. InitPostgres() initializes ATTNUM, so it's reliable. + */ + if (!(cache->id == TYPEOID || cache->id == ATTNUM) || + IsTransactionState()) + AssertCouldGetRelation(); + else + Assert(cache->cc_tupdesc != NULL); +#endif + + if (unlikely(cache->cc_tupdesc == NULL)) + CatalogCacheInitializeCache(cache); +} + /* * CatalogCacheInitializeCache * * This function does final initialization of a catcache: obtain the tuple - * descriptor and set up the hash and equality function links. We assume - * that the relcache entry can be opened at this point! + * descriptor and set up the hash and equality function links. */ #ifdef CACHEDEBUG #define CatalogCacheInitializeCache_DEBUG1 \ @@ -1194,8 +1224,7 @@ CatalogCacheInitializeCache(CatCache *cache) void InitCatCachePhase2(CatCache *cache, bool touch_index) { - if (cache->cc_tupdesc == NULL) - CatalogCacheInitializeCache(cache); + ConditionalCatalogCacheInitializeCache(cache); if (touch_index && cache->id != AMOID && @@ -1374,16 +1403,12 @@ SearchCatCacheInternal(CatCache *cache, dlist_head *bucket; CatCTup *ct; - /* Make sure we're in an xact, even if this ends up being a cache hit */ - Assert(IsTransactionState()); - Assert(cache->cc_nkeys == nkeys); /* * one-time startup overhead for each cache */ - if (unlikely(cache->cc_tupdesc == NULL)) - CatalogCacheInitializeCache(cache); + ConditionalCatalogCacheInitializeCache(cache); #ifdef CATCACHE_STATS cache->cc_searches++; @@ -1668,8 +1693,7 @@ GetCatCacheHashValue(CatCache *cache, /* * one-time startup overhead for each cache */ - if (cache->cc_tupdesc == NULL) - CatalogCacheInitializeCache(cache); + ConditionalCatalogCacheInitializeCache(cache); /* * calculate the hash value @@ -1720,8 +1744,7 @@ SearchCatCacheList(CatCache *cache, /* * one-time startup overhead for each cache */ - if (unlikely(cache->cc_tupdesc == NULL)) - CatalogCacheInitializeCache(cache); + ConditionalCatalogCacheInitializeCache(cache); Assert(nkeys > 0 && nkeys < cache->cc_nkeys); @@ -1904,7 +1927,7 @@ SearchCatCacheList(CatCache *cache, /* Injection point to help testing the recursive invalidation case */ if (first_iter) { - INJECTION_POINT("catcache-list-miss-systable-scan-started"); + INJECTION_POINT("catcache-list-miss-systable-scan-started", NULL); first_iter = false; } @@ -2390,8 +2413,7 @@ PrepareToInvalidateCacheTuple(Relation relation, continue; /* Just in case cache hasn't finished initialization yet... */ - if (ccp->cc_tupdesc == NULL) - CatalogCacheInitializeCache(ccp); + ConditionalCatalogCacheInitializeCache(ccp); hashvalue = CatalogCacheComputeTupleHashValue(ccp, ccp->cc_nkeys, tuple); dbid = ccp->cc_relisshared ? (Oid) 0 : MyDatabaseId; diff --git a/src/backend/utils/cache/evtcache.c b/src/backend/utils/cache/evtcache.c index ce596bf563856..b9d5a5998be50 100644 --- a/src/backend/utils/cache/evtcache.c +++ b/src/backend/utils/cache/evtcache.c @@ -78,7 +78,6 @@ BuildEventTriggerCache(void) { HASHCTL ctl; HTAB *cache; - MemoryContext oldcontext; Relation rel; Relation irel; SysScanDesc scan; @@ -110,9 +109,6 @@ BuildEventTriggerCache(void) (Datum) 0); } - /* Switch to correct memory context. */ - oldcontext = MemoryContextSwitchTo(EventTriggerCacheContext); - /* Prevent the memory context from being nuked while we're rebuilding. */ EventTriggerCacheState = ETCS_REBUILD_STARTED; @@ -145,6 +141,7 @@ BuildEventTriggerCache(void) bool evttags_isnull; EventTriggerCacheEntry *entry; bool found; + MemoryContext oldcontext; /* Get next tuple. */ tup = systable_getnext_ordered(scan, ForwardScanDirection); @@ -171,6 +168,9 @@ BuildEventTriggerCache(void) else continue; + /* Switch to correct memory context. */ + oldcontext = MemoryContextSwitchTo(EventTriggerCacheContext); + /* Allocate new cache item. */ item = palloc0(sizeof(EventTriggerCacheItem)); item->fnoid = form->evtfoid; @@ -188,6 +188,9 @@ BuildEventTriggerCache(void) entry->triggerlist = lappend(entry->triggerlist, item); else entry->triggerlist = list_make1(item); + + /* Restore previous memory context. */ + MemoryContextSwitchTo(oldcontext); } /* Done with pg_event_trigger scan. */ @@ -195,9 +198,6 @@ BuildEventTriggerCache(void) index_close(irel, AccessShareLock); relation_close(rel, AccessShareLock); - /* Restore previous memory context. */ - MemoryContextSwitchTo(oldcontext); - /* Install new cache. */ EventTriggerCache = cache; @@ -240,6 +240,8 @@ DecodeTextArrayToBitmapset(Datum array) } pfree(elems); + if ((Pointer) arr != DatumGetPointer(array)) + pfree(arr); return bms; } diff --git a/src/backend/utils/cache/funccache.c b/src/backend/utils/cache/funccache.c new file mode 100644 index 0000000000000..afc048a051ead --- /dev/null +++ b/src/backend/utils/cache/funccache.c @@ -0,0 +1,634 @@ +/*------------------------------------------------------------------------- + * + * funccache.c + * Function cache management. + * + * funccache.c manages a cache of function execution data. The cache + * is used by SQL-language and PL/pgSQL functions, and could be used by + * other function languages. Each cache entry is specific to the execution + * of a particular function (identified by OID) with specific input data + * types; so a polymorphic function could have many associated cache entries. + * Trigger functions similarly have a cache entry per trigger. These rules + * allow the cached data to be specific to the particular data types the + * function call will be dealing with. + * + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/backend/utils/cache/funccache.c + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "catalog/pg_proc.h" +#include "commands/event_trigger.h" +#include "commands/trigger.h" +#include "common/hashfn.h" +#include "funcapi.h" +#include "utils/funccache.h" +#include "utils/hsearch.h" +#include "utils/syscache.h" + + +/* + * Hash table for cached functions + */ +static HTAB *cfunc_hashtable = NULL; + +typedef struct CachedFunctionHashEntry +{ + CachedFunctionHashKey key; /* hash key, must be first */ + CachedFunction *function; /* points to data of language-specific size */ +} CachedFunctionHashEntry; + +#define FUNCS_PER_USER 128 /* initial table size */ + +static uint32 cfunc_hash(const void *key, Size keysize); +static int cfunc_match(const void *key1, const void *key2, Size keysize); + + +/* + * Initialize the hash table on first use. + * + * The hash table will be in TopMemoryContext regardless of caller's context. + */ +static void +cfunc_hashtable_init(void) +{ + HASHCTL ctl; + + /* don't allow double-initialization */ + Assert(cfunc_hashtable == NULL); + + ctl.keysize = sizeof(CachedFunctionHashKey); + ctl.entrysize = sizeof(CachedFunctionHashEntry); + ctl.hash = cfunc_hash; + ctl.match = cfunc_match; + cfunc_hashtable = hash_create("Cached function hash", + FUNCS_PER_USER, + &ctl, + HASH_ELEM | HASH_FUNCTION | HASH_COMPARE); +} + +/* + * cfunc_hash: hash function for cfunc hash table + * + * We need special hash and match functions to deal with the optional + * presence of a TupleDesc in the hash keys. As long as we have to do + * that, we might as well also be smart about not comparing unused + * elements of the argtypes arrays. + */ +static uint32 +cfunc_hash(const void *key, Size keysize) +{ + const CachedFunctionHashKey *k = (const CachedFunctionHashKey *) key; + uint32 h; + + Assert(keysize == sizeof(CachedFunctionHashKey)); + /* Hash all the fixed fields except callResultType */ + h = DatumGetUInt32(hash_any((const unsigned char *) k, + offsetof(CachedFunctionHashKey, callResultType))); + /* Incorporate input argument types */ + if (k->nargs > 0) + h = hash_combine(h, + DatumGetUInt32(hash_any((const unsigned char *) k->argtypes, + k->nargs * sizeof(Oid)))); + /* Incorporate callResultType if present */ + if (k->callResultType) + h = hash_combine(h, hashRowType(k->callResultType)); + return h; +} + +/* + * cfunc_match: match function to use with cfunc_hash + */ +static int +cfunc_match(const void *key1, const void *key2, Size keysize) +{ + const CachedFunctionHashKey *k1 = (const CachedFunctionHashKey *) key1; + const CachedFunctionHashKey *k2 = (const CachedFunctionHashKey *) key2; + + Assert(keysize == sizeof(CachedFunctionHashKey)); + /* Compare all the fixed fields except callResultType */ + if (memcmp(k1, k2, offsetof(CachedFunctionHashKey, callResultType)) != 0) + return 1; /* not equal */ + /* Compare input argument types (we just verified that nargs matches) */ + if (k1->nargs > 0 && + memcmp(k1->argtypes, k2->argtypes, k1->nargs * sizeof(Oid)) != 0) + return 1; /* not equal */ + /* Compare callResultType */ + if (k1->callResultType) + { + if (k2->callResultType) + { + if (!equalRowTypes(k1->callResultType, k2->callResultType)) + return 1; /* not equal */ + } + else + return 1; /* not equal */ + } + else + { + if (k2->callResultType) + return 1; /* not equal */ + } + return 0; /* equal */ +} + +/* + * Look up the CachedFunction for the given hash key. + * Returns NULL if not present. + */ +static CachedFunction * +cfunc_hashtable_lookup(CachedFunctionHashKey *func_key) +{ + CachedFunctionHashEntry *hentry; + + if (cfunc_hashtable == NULL) + return NULL; + + hentry = (CachedFunctionHashEntry *) hash_search(cfunc_hashtable, + func_key, + HASH_FIND, + NULL); + if (hentry) + return hentry->function; + else + return NULL; +} + +/* + * Insert a hash table entry. + */ +static void +cfunc_hashtable_insert(CachedFunction *function, + CachedFunctionHashKey *func_key) +{ + CachedFunctionHashEntry *hentry; + bool found; + + if (cfunc_hashtable == NULL) + cfunc_hashtable_init(); + + hentry = (CachedFunctionHashEntry *) hash_search(cfunc_hashtable, + func_key, + HASH_ENTER, + &found); + if (found) + elog(WARNING, "trying to insert a function that already exists"); + + /* + * If there's a callResultType, copy it into TopMemoryContext. If we're + * unlucky enough for that to fail, leave the entry with null + * callResultType, which will probably never match anything. + */ + if (func_key->callResultType) + { + MemoryContext oldcontext = MemoryContextSwitchTo(TopMemoryContext); + + hentry->key.callResultType = NULL; + hentry->key.callResultType = CreateTupleDescCopy(func_key->callResultType); + MemoryContextSwitchTo(oldcontext); + } + + hentry->function = function; + + /* Set back-link from function to hashtable key */ + function->fn_hashkey = &hentry->key; +} + +/* + * Delete a hash table entry. + */ +static void +cfunc_hashtable_delete(CachedFunction *function) +{ + CachedFunctionHashEntry *hentry; + TupleDesc tupdesc; + + /* do nothing if not in table */ + if (function->fn_hashkey == NULL) + return; + + /* + * We need to free the callResultType if present, which is slightly tricky + * because it has to be valid during the hashtable search. Fortunately, + * because we have the hashkey back-link, we can grab that pointer before + * deleting the hashtable entry. + */ + tupdesc = function->fn_hashkey->callResultType; + + hentry = (CachedFunctionHashEntry *) hash_search(cfunc_hashtable, + function->fn_hashkey, + HASH_REMOVE, + NULL); + if (hentry == NULL) + elog(WARNING, "trying to delete function that does not exist"); + + /* Remove back link, which no longer points to allocated storage */ + function->fn_hashkey = NULL; + + /* Release the callResultType if present */ + if (tupdesc) + FreeTupleDesc(tupdesc); +} + +/* + * Compute the hashkey for a given function invocation + * + * The hashkey is returned into the caller-provided storage at *hashkey. + * Note however that if a callResultType is incorporated, we've not done + * anything about copying that. + */ +static void +compute_function_hashkey(FunctionCallInfo fcinfo, + Form_pg_proc procStruct, + CachedFunctionHashKey *hashkey, + Size cacheEntrySize, + bool includeResultType, + bool forValidator) +{ + /* Make sure pad bytes within fixed part of the struct are zero */ + memset(hashkey, 0, offsetof(CachedFunctionHashKey, argtypes)); + + /* get function OID */ + hashkey->funcOid = fcinfo->flinfo->fn_oid; + + /* get call context */ + hashkey->isTrigger = CALLED_AS_TRIGGER(fcinfo); + hashkey->isEventTrigger = CALLED_AS_EVENT_TRIGGER(fcinfo); + + /* record cacheEntrySize so multiple languages can share hash table */ + hashkey->cacheEntrySize = cacheEntrySize; + + /* + * If DML trigger, include trigger's OID in the hash, so that each trigger + * usage gets a different hash entry, allowing for e.g. different relation + * rowtypes or transition table names. In validation mode we do not know + * what relation or transition table names are intended to be used, so we + * leave trigOid zero; the hash entry built in this case will never be + * used for any actual calls. + * + * We don't currently need to distinguish different event trigger usages + * in the same way, since the special parameter variables don't vary in + * type in that case. + */ + if (hashkey->isTrigger && !forValidator) + { + TriggerData *trigdata = (TriggerData *) fcinfo->context; + + hashkey->trigOid = trigdata->tg_trigger->tgoid; + } + + /* get input collation, if known */ + hashkey->inputCollation = fcinfo->fncollation; + + /* + * We include only input arguments in the hash key, since output argument + * types can be deduced from those, and it would require extra cycles to + * include the output arguments. But we have to resolve any polymorphic + * argument types to the real types for the call. + */ + if (procStruct->pronargs > 0) + { + hashkey->nargs = procStruct->pronargs; + memcpy(hashkey->argtypes, procStruct->proargtypes.values, + procStruct->pronargs * sizeof(Oid)); + cfunc_resolve_polymorphic_argtypes(procStruct->pronargs, + hashkey->argtypes, + NULL, /* all args are inputs */ + fcinfo->flinfo->fn_expr, + forValidator, + NameStr(procStruct->proname)); + } + + /* + * While regular OUT arguments are sufficiently represented by the + * resolved input arguments, a function returning composite has additional + * variability: ALTER TABLE/ALTER TYPE could affect what it returns. Also, + * a function returning RECORD may depend on a column definition list to + * determine its output rowtype. If the caller needs the exact result + * type to be part of the hash lookup key, we must run + * get_call_result_type() to find that out. + */ + if (includeResultType) + { + Oid resultTypeId; + TupleDesc tupdesc; + + switch (get_call_result_type(fcinfo, &resultTypeId, &tupdesc)) + { + case TYPEFUNC_COMPOSITE: + case TYPEFUNC_COMPOSITE_DOMAIN: + hashkey->callResultType = tupdesc; + break; + default: + /* scalar result, or indeterminate rowtype */ + break; + } + } +} + +/* + * This is the same as the standard resolve_polymorphic_argtypes() function, + * except that: + * 1. We go ahead and report the error if we can't resolve the types. + * 2. We treat RECORD-type input arguments (not output arguments) as if + * they were polymorphic, replacing their types with the actual input + * types if we can determine those. This allows us to create a separate + * function cache entry for each named composite type passed to such an + * argument. + * 3. In validation mode, we have no inputs to look at, so assume that + * polymorphic arguments are integer, integer-array or integer-range. + */ +void +cfunc_resolve_polymorphic_argtypes(int numargs, + Oid *argtypes, char *argmodes, + Node *call_expr, bool forValidator, + const char *proname) +{ + int i; + + if (!forValidator) + { + int inargno; + + /* normal case, pass to standard routine */ + if (!resolve_polymorphic_argtypes(numargs, argtypes, argmodes, + call_expr)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("could not determine actual argument " + "type for polymorphic function \"%s\"", + proname))); + /* also, treat RECORD inputs (but not outputs) as polymorphic */ + inargno = 0; + for (i = 0; i < numargs; i++) + { + char argmode = argmodes ? argmodes[i] : PROARGMODE_IN; + + if (argmode == PROARGMODE_OUT || argmode == PROARGMODE_TABLE) + continue; + if (argtypes[i] == RECORDOID || argtypes[i] == RECORDARRAYOID) + { + Oid resolvedtype = get_call_expr_argtype(call_expr, + inargno); + + if (OidIsValid(resolvedtype)) + argtypes[i] = resolvedtype; + } + inargno++; + } + } + else + { + /* special validation case (no need to do anything for RECORD) */ + for (i = 0; i < numargs; i++) + { + switch (argtypes[i]) + { + case ANYELEMENTOID: + case ANYNONARRAYOID: + case ANYENUMOID: /* XXX dubious */ + case ANYCOMPATIBLEOID: + case ANYCOMPATIBLENONARRAYOID: + argtypes[i] = INT4OID; + break; + case ANYARRAYOID: + case ANYCOMPATIBLEARRAYOID: + argtypes[i] = INT4ARRAYOID; + break; + case ANYRANGEOID: + case ANYCOMPATIBLERANGEOID: + argtypes[i] = INT4RANGEOID; + break; + case ANYMULTIRANGEOID: + argtypes[i] = INT4MULTIRANGEOID; + break; + default: + break; + } + } + } +} + +/* + * delete_function - clean up as much as possible of a stale function cache + * + * We can't release the CachedFunction struct itself, because of the + * possibility that there are fn_extra pointers to it. We can release + * the subsidiary storage, but only if there are no active evaluations + * in progress. Otherwise we'll just leak that storage. Since the + * case would only occur if a pg_proc update is detected during a nested + * recursive call on the function, a leak seems acceptable. + * + * Note that this can be called more than once if there are multiple fn_extra + * pointers to the same function cache. Hence be careful not to do things + * twice. + */ +static void +delete_function(CachedFunction *func) +{ + /* remove function from hash table (might be done already) */ + cfunc_hashtable_delete(func); + + /* release the function's storage if safe and not done already */ + if (func->use_count == 0 && + func->dcallback != NULL) + { + func->dcallback(func); + func->dcallback = NULL; + } +} + +/* + * Compile a cached function, if no existing cache entry is suitable. + * + * fcinfo is the current call information. + * + * function should be NULL or the result of a previous call of + * cached_function_compile() for the same fcinfo. The caller will + * typically save the result in fcinfo->flinfo->fn_extra, or in a + * field of a struct pointed to by fn_extra, to re-use in later + * calls within the same query. + * + * ccallback and dcallback are function-language-specific callbacks to + * compile and delete a cached function entry. dcallback can be NULL + * if there's nothing for it to do. + * + * cacheEntrySize is the function-language-specific size of the cache entry + * (which embeds a CachedFunction struct and typically has many more fields + * after that). + * + * If includeResultType is true and the function returns composite, + * include the actual result descriptor in the cache lookup key. + * + * If forValidator is true, we're only compiling for validation purposes, + * and so some checks are skipped. + * + * Note: it's important for this to fall through quickly if the function + * has already been compiled. + * + * Note: this function leaves the "use_count" field as zero. The caller + * is expected to increment the use_count and decrement it when done with + * the cache entry. + */ +CachedFunction * +cached_function_compile(FunctionCallInfo fcinfo, + CachedFunction *function, + CachedFunctionCompileCallback ccallback, + CachedFunctionDeleteCallback dcallback, + Size cacheEntrySize, + bool includeResultType, + bool forValidator) +{ + Oid funcOid = fcinfo->flinfo->fn_oid; + HeapTuple procTup; + Form_pg_proc procStruct; + CachedFunctionHashKey hashkey; + bool function_valid = false; + bool hashkey_valid = false; + bool new_function = false; + + /* + * Lookup the pg_proc tuple by Oid; we'll need it in any case + */ + procTup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcOid)); + if (!HeapTupleIsValid(procTup)) + elog(ERROR, "cache lookup failed for function %u", funcOid); + procStruct = (Form_pg_proc) GETSTRUCT(procTup); + + /* + * Do we already have a cache entry for the current FmgrInfo? If not, try + * to find one in the hash table. + */ +recheck: + if (!function) + { + /* Compute hashkey using function signature and actual arg types */ + compute_function_hashkey(fcinfo, procStruct, &hashkey, + cacheEntrySize, includeResultType, + forValidator); + hashkey_valid = true; + + /* And do the lookup */ + function = cfunc_hashtable_lookup(&hashkey); + } + + if (function) + { + /* We have a compiled function, but is it still valid? */ + if (function->fn_xmin == HeapTupleHeaderGetRawXmin(procTup->t_data) && + ItemPointerEquals(&function->fn_tid, &procTup->t_self)) + function_valid = true; + else + { + /* + * Nope, so remove it from hashtable and try to drop associated + * storage (if not done already). + */ + delete_function(function); + + /* + * If the function isn't in active use then we can overwrite the + * func struct with new data, allowing any other existing fn_extra + * pointers to make use of the new definition on their next use. + * If it is in use then just leave it alone and make a new one. + * (The active invocations will run to completion using the + * previous definition, and then the cache entry will just be + * leaked; doesn't seem worth adding code to clean it up, given + * what a corner case this is.) + * + * If we found the function struct via fn_extra then it's possible + * a replacement has already been made, so go back and recheck the + * hashtable. + */ + if (function->use_count != 0) + { + function = NULL; + if (!hashkey_valid) + goto recheck; + } + } + } + + /* + * If the function wasn't found or was out-of-date, we have to compile it. + */ + if (!function_valid) + { + /* + * Calculate hashkey if we didn't already; we'll need it to store the + * completed function. + */ + if (!hashkey_valid) + compute_function_hashkey(fcinfo, procStruct, &hashkey, + cacheEntrySize, includeResultType, + forValidator); + + /* + * Create the new function struct, if not done already. The function + * cache entry will be kept for the life of the backend, so put it in + * TopMemoryContext. + */ + Assert(cacheEntrySize >= sizeof(CachedFunction)); + if (function == NULL) + { + function = (CachedFunction *) + MemoryContextAllocZero(TopMemoryContext, cacheEntrySize); + new_function = true; + } + else + { + /* re-using a previously existing struct, so clear it out */ + memset(function, 0, cacheEntrySize); + } + + /* + * However, if function compilation fails, we'd like not to leak the + * function struct, so use a PG_TRY block to prevent that. (It's up + * to the compile callback function to avoid its own internal leakage + * in such cases.) Unfortunately, freeing the struct is only safe if + * we just allocated it: otherwise there are probably fn_extra + * pointers to it. + */ + PG_TRY(); + { + /* + * Do the hard, language-specific part. + */ + ccallback(fcinfo, procTup, &hashkey, function, forValidator); + } + PG_CATCH(); + { + if (new_function) + pfree(function); + PG_RE_THROW(); + } + PG_END_TRY(); + + /* + * Fill in the CachedFunction part. (We do this last to prevent the + * function from looking valid before it's fully built.) fn_hashkey + * will be set by cfunc_hashtable_insert; use_count remains zero. + */ + function->fn_xmin = HeapTupleHeaderGetRawXmin(procTup->t_data); + function->fn_tid = procTup->t_self; + function->dcallback = dcallback; + + /* + * Add the completed struct to the hash table. + */ + cfunc_hashtable_insert(function, &hashkey); + } + + ReleaseSysCache(procTup); + + /* + * Finally return the compiled function + */ + return function; +} diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index 4eb67720737e8..02505c88b8e4c 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -683,7 +683,8 @@ PrepareInvalidationState(void) { TransInvalidationInfo *myInfo; - Assert(IsTransactionState()); + /* PrepareToInvalidateCacheTuple() needs relcache */ + AssertCouldGetRelation(); /* Can't queue transactional message while collecting inplace messages. */ Assert(inplaceInvalInfo == NULL); @@ -752,7 +753,7 @@ PrepareInplaceInvalidationState(void) { InvalidationInfo *myInfo; - Assert(IsTransactionState()); + AssertCouldGetRelation(); /* limit of one inplace update under assembly */ Assert(inplaceInvalInfo == NULL); @@ -928,6 +929,12 @@ InvalidateSystemCaches(void) void AcceptInvalidationMessages(void) { +#ifdef USE_ASSERT_CHECKING + /* message handlers shall access catalogs only during transactions */ + if (IsTransactionState()) + AssertCouldGetRelation(); +#endif + ReceiveSharedInvalidMessages(LocalExecuteInvalidationMessage, InvalidateSystemCaches); @@ -1200,7 +1207,7 @@ AtEOXact_Inval(bool isCommit) /* Must be at top of stack */ Assert(transInvalInfo->my_level == 1 && transInvalInfo->parent == NULL); - INJECTION_POINT("AtEOXact_Inval-with-transInvalInfo"); + INJECTION_POINT("transaction-end-process-inval", NULL); if (isCommit) { @@ -1436,6 +1443,9 @@ CacheInvalidateHeapTupleCommon(Relation relation, Oid databaseId; Oid relationId; + /* PrepareToInvalidateCacheTuple() needs relcache */ + AssertCouldGetRelation(); + /* Do nothing during bootstrap */ if (IsBootstrapProcessingMode()) return; @@ -1744,7 +1754,7 @@ CacheInvalidateSmgr(RelFileLocatorBackend rlocator) /* verify optimization stated above stays valid */ StaticAssertStmt(MAX_BACKENDS_BITS <= 23, - "MAX_BACKEND_BITS is too big for inval.c"); + "MAX_BACKENDS_BITS is too big for inval.c"); msg.sm.id = SHAREDINVALSMGR_ID; msg.sm.backend_hi = rlocator.backend >> 16; diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index 82031c1e8e5e7..fa7cd7e06a7ab 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -26,6 +26,7 @@ #include "catalog/pg_class.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_database.h" #include "catalog/pg_index.h" #include "catalog/pg_language.h" #include "catalog/pg_namespace.h" @@ -206,11 +207,46 @@ get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype, return get_opfamily_member(opfamily, lefttype, righttype, strategy); } +/* + * get_opmethod_canorder + * Return amcanorder field for given index AM. + * + * To speed things up in the common cases, we're hardcoding the results from + * the built-in index types. Note that we also need to hardcode the negative + * results from the built-in non-btree index types, since you'll usually get a + * few hits for those as well. It would be nice to organize and cache this a + * bit differently to avoid the hardcoding. + */ +static bool +get_opmethod_canorder(Oid amoid) +{ + switch (amoid) + { + case BTREE_AM_OID: + return true; + case HASH_AM_OID: + case GIST_AM_OID: + case GIN_AM_OID: + case SPGIST_AM_OID: + case BRIN_AM_OID: + return false; + default: + { + bool result; + IndexAmRoutine *amroutine = GetIndexAmRoutineByAmId(amoid, false); + + result = amroutine->amcanorder; + pfree(amroutine); + return result; + } + } +} + /* * get_ordering_op_properties - * Given the OID of an ordering operator (a btree "<" or ">" operator), + * Given the OID of an ordering operator (a "<" or ">" operator), * determine its opfamily, its declared input datatype, and its - * strategy number (BTLessStrategyNumber or BTGreaterStrategyNumber). + * comparison type. * * Returns true if successful, false if no matching pg_amop entry exists. * (This indicates that the operator is not a valid ordering operator.) @@ -228,7 +264,7 @@ get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype, */ bool get_ordering_op_properties(Oid opno, - Oid *opfamily, Oid *opcintype, int16 *strategy) + Oid *opfamily, Oid *opcintype, CompareType *cmptype) { bool result = false; CatCList *catlist; @@ -237,7 +273,7 @@ get_ordering_op_properties(Oid opno, /* ensure outputs are initialized on failure */ *opfamily = InvalidOid; *opcintype = InvalidOid; - *strategy = 0; + *cmptype = COMPARE_INVALID; /* * Search pg_amop to see if the target operator is registered as the "<" @@ -249,13 +285,18 @@ get_ordering_op_properties(Oid opno, { HeapTuple tuple = &catlist->members[i]->tuple; Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple); + CompareType am_cmptype; - /* must be btree */ - if (aform->amopmethod != BTREE_AM_OID) + /* must be ordering index */ + if (!get_opmethod_canorder(aform->amopmethod)) continue; - if (aform->amopstrategy == BTLessStrategyNumber || - aform->amopstrategy == BTGreaterStrategyNumber) + am_cmptype = IndexAmTranslateStrategy(aform->amopstrategy, + aform->amopmethod, + aform->amopfamily, + true); + + if (am_cmptype == COMPARE_LT || am_cmptype == COMPARE_GT) { /* Found it ... should have consistent input types */ if (aform->amoplefttype == aform->amoprighttype) @@ -263,7 +304,7 @@ get_ordering_op_properties(Oid opno, /* Found a suitable opfamily, return info */ *opfamily = aform->amopfamily; *opcintype = aform->amoplefttype; - *strategy = aform->amopstrategy; + *cmptype = am_cmptype; result = true; break; } @@ -277,7 +318,7 @@ get_ordering_op_properties(Oid opno, /* * get_equality_op_for_ordering_op - * Get the OID of the datatype-specific btree equality operator + * Get the OID of the datatype-specific equality operator * associated with an ordering operator (a "<" or ">" operator). * * If "reverse" isn't NULL, also set *reverse to false if the operator is "<", @@ -292,19 +333,19 @@ get_equality_op_for_ordering_op(Oid opno, bool *reverse) Oid result = InvalidOid; Oid opfamily; Oid opcintype; - int16 strategy; + CompareType cmptype; /* Find the operator in pg_amop */ if (get_ordering_op_properties(opno, - &opfamily, &opcintype, &strategy)) + &opfamily, &opcintype, &cmptype)) { /* Found a suitable opfamily, get matching equality operator */ - result = get_opfamily_member(opfamily, - opcintype, - opcintype, - BTEqualStrategyNumber); + result = get_opfamily_member_for_cmptype(opfamily, + opcintype, + opcintype, + COMPARE_EQ); if (reverse) - *reverse = (strategy == BTGreaterStrategyNumber); + *reverse = (cmptype == COMPARE_GT); } return result; @@ -312,7 +353,7 @@ get_equality_op_for_ordering_op(Oid opno, bool *reverse) /* * get_ordering_op_for_equality_op - * Get the OID of a datatype-specific btree "less than" ordering operator + * Get the OID of a datatype-specific "less than" ordering operator * associated with an equality operator. (If there are multiple * possibilities, assume any one will do.) * @@ -341,20 +382,25 @@ get_ordering_op_for_equality_op(Oid opno, bool use_lhs_type) { HeapTuple tuple = &catlist->members[i]->tuple; Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple); + CompareType cmptype; - /* must be btree */ - if (aform->amopmethod != BTREE_AM_OID) + /* must be ordering index */ + if (!get_opmethod_canorder(aform->amopmethod)) continue; - if (aform->amopstrategy == BTEqualStrategyNumber) + cmptype = IndexAmTranslateStrategy(aform->amopstrategy, + aform->amopmethod, + aform->amopfamily, + true); + if (cmptype == COMPARE_EQ) { /* Found a suitable opfamily, get matching ordering operator */ Oid typid; typid = use_lhs_type ? aform->amoplefttype : aform->amoprighttype; - result = get_opfamily_member(aform->amopfamily, - typid, typid, - BTLessStrategyNumber); + result = get_opfamily_member_for_cmptype(aform->amopfamily, + typid, typid, + COMPARE_LT); if (OidIsValid(result)) break; /* failure probably shouldn't happen, but keep looking if so */ @@ -369,7 +415,7 @@ get_ordering_op_for_equality_op(Oid opno, bool use_lhs_type) /* * get_mergejoin_opfamilies * Given a putatively mergejoinable operator, return a list of the OIDs - * of the btree opfamilies in which it represents equality. + * of the amcanorder opfamilies in which it represents equality. * * It is possible (though at present unusual) for an operator to be equality * in more than one opfamily, hence the result is a list. This also lets us @@ -394,7 +440,7 @@ get_mergejoin_opfamilies(Oid opno) /* * Search pg_amop to see if the target operator is registered as the "=" - * operator of any btree opfamily. + * operator of any opfamily of an ordering index type. */ catlist = SearchSysCacheList1(AMOPOPID, ObjectIdGetDatum(opno)); @@ -403,9 +449,12 @@ get_mergejoin_opfamilies(Oid opno) HeapTuple tuple = &catlist->members[i]->tuple; Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple); - /* must be btree equality */ - if (aform->amopmethod == BTREE_AM_OID && - aform->amopstrategy == BTEqualStrategyNumber) + /* must be ordering index equality */ + if (get_opmethod_canorder(aform->amopmethod) && + IndexAmTranslateStrategy(aform->amopstrategy, + aform->amopmethod, + aform->amopfamily, + true) == COMPARE_EQ) result = lappend_oid(result, aform->amopfamily); } @@ -611,20 +660,20 @@ get_op_hash_functions(Oid opno, } /* - * get_op_btree_interpretation - * Given an operator's OID, find out which btree opfamilies it belongs to, + * get_op_index_interpretation + * Given an operator's OID, find out which amcanorder opfamilies it belongs to, * and what properties it has within each one. The results are returned - * as a palloc'd list of OpBtreeInterpretation structs. + * as a palloc'd list of OpIndexInterpretation structs. * * In addition to the normal btree operators, we consider a <> operator to be * a "member" of an opfamily if its negator is an equality operator of the * opfamily. COMPARE_NE is returned as the strategy number for this case. */ List * -get_op_btree_interpretation(Oid opno) +get_op_index_interpretation(Oid opno) { List *result = NIL; - OpBtreeInterpretation *thisresult; + OpIndexInterpretation *thisresult; CatCList *catlist; int i; @@ -637,20 +686,26 @@ get_op_btree_interpretation(Oid opno) { HeapTuple op_tuple = &catlist->members[i]->tuple; Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple); - StrategyNumber op_strategy; + CompareType cmptype; - /* must be btree */ - if (op_form->amopmethod != BTREE_AM_OID) + /* must be ordering index */ + if (!get_opmethod_canorder(op_form->amopmethod)) continue; - /* Get the operator's btree strategy number */ - op_strategy = (StrategyNumber) op_form->amopstrategy; - Assert(op_strategy >= 1 && op_strategy <= 5); + /* Get the operator's comparision type */ + cmptype = IndexAmTranslateStrategy(op_form->amopstrategy, + op_form->amopmethod, + op_form->amopfamily, + true); + + /* should not happen */ + if (cmptype == COMPARE_INVALID) + continue; - thisresult = (OpBtreeInterpretation *) - palloc(sizeof(OpBtreeInterpretation)); + thisresult = (OpIndexInterpretation *) + palloc(sizeof(OpIndexInterpretation)); thisresult->opfamily_id = op_form->amopfamily; - thisresult->strategy = op_strategy; + thisresult->cmptype = cmptype; thisresult->oplefttype = op_form->amoplefttype; thisresult->oprighttype = op_form->amoprighttype; result = lappend(result, thisresult); @@ -675,25 +730,28 @@ get_op_btree_interpretation(Oid opno) { HeapTuple op_tuple = &catlist->members[i]->tuple; Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple); - StrategyNumber op_strategy; + IndexAmRoutine *amroutine = GetIndexAmRoutineByAmId(op_form->amopmethod, false); + CompareType cmptype; - /* must be btree */ - if (op_form->amopmethod != BTREE_AM_OID) + /* must be ordering index */ + if (!amroutine->amcanorder) continue; - /* Get the operator's btree strategy number */ - op_strategy = (StrategyNumber) op_form->amopstrategy; - Assert(op_strategy >= 1 && op_strategy <= 5); + /* Get the operator's comparision type */ + cmptype = IndexAmTranslateStrategy(op_form->amopstrategy, + op_form->amopmethod, + op_form->amopfamily, + true); /* Only consider negators that are = */ - if (op_strategy != BTEqualStrategyNumber) + if (cmptype != COMPARE_EQ) continue; - /* OK, report it with "strategy" COMPARE_NE */ - thisresult = (OpBtreeInterpretation *) - palloc(sizeof(OpBtreeInterpretation)); + /* OK, report it as COMPARE_NE */ + thisresult = (OpIndexInterpretation *) + palloc(sizeof(OpIndexInterpretation)); thisresult->opfamily_id = op_form->amopfamily; - thisresult->strategy = COMPARE_NE; + thisresult->cmptype = COMPARE_NE; thisresult->oplefttype = op_form->amoplefttype; thisresult->oprighttype = op_form->amoprighttype; result = lappend(result, thisresult); @@ -1190,6 +1248,32 @@ get_constraint_type(Oid conoid) return contype; } +/* ---------- DATABASE CACHE ---------- */ + +/* + * get_database_name - given a database OID, look up the name + * + * Returns a palloc'd string, or NULL if no such database. + */ +char * +get_database_name(Oid dbid) +{ + HeapTuple dbtuple; + char *result; + + dbtuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(dbid)); + if (HeapTupleIsValid(dbtuple)) + { + result = pstrdup(NameStr(((Form_pg_database) GETSTRUCT(dbtuple))->datname)); + ReleaseSysCache(dbtuple); + } + else + result = NULL; + + return result; +} + + /* ---------- LANGUAGE CACHE ---------- */ char * @@ -3760,7 +3844,7 @@ get_subscription_oid(const char *subname, bool missing_ok) Oid oid; oid = GetSysCacheOid2(SUBSCRIPTIONNAME, Anum_pg_subscription_oid, - MyDatabaseId, CStringGetDatum(subname)); + ObjectIdGetDatum(MyDatabaseId), CStringGetDatum(subname)); if (!OidIsValid(oid) && !missing_ok) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), diff --git a/src/backend/utils/cache/meson.build b/src/backend/utils/cache/meson.build index 104b28737d7c9..a1784dce5855b 100644 --- a/src/backend/utils/cache/meson.build +++ b/src/backend/utils/cache/meson.build @@ -4,6 +4,7 @@ backend_sources += files( 'attoptcache.c', 'catcache.c', 'evtcache.c', + 'funccache.c', 'inval.c', 'lsyscache.c', 'partcache.c', diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 6c2979d5c826c..6661d2c6b7391 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -14,7 +14,7 @@ * Cache invalidation is driven off sinval events. Any CachedPlanSource * that matches the event is marked invalid, as is its generic CachedPlan * if it has one. When (and if) the next demand for a cached plan occurs, - * parse analysis and rewrite is repeated to build a new valid query tree, + * parse analysis and/or rewrite is repeated to build a new valid query tree, * and then planning is performed as normal. We also force re-analysis and * re-planning if the active search_path is different from the previous time * or, if RLS is involved, if the user changes or the RLS environment changes. @@ -63,6 +63,7 @@ #include "nodes/nodeFuncs.h" #include "optimizer/optimizer.h" #include "parser/analyze.h" +#include "rewrite/rewriteHandler.h" #include "storage/lmgr.h" #include "tcop/pquery.h" #include "tcop/utility.h" @@ -74,18 +75,6 @@ #include "utils/syscache.h" -/* - * We must skip "overhead" operations that involve database access when the - * cached plan's subject statement is a transaction control command or one - * that requires a snapshot not to be set yet (such as SET or LOCK). More - * generally, statements that do not require parse analysis/rewrite/plan - * activity never need to be revalidated, so we can treat them all like that. - * For the convenience of postgres.c, treat empty statements that way too. - */ -#define StmtPlanRequiresRevalidation(plansource) \ - ((plansource)->raw_parse_tree != NULL && \ - stmt_requires_parse_analysis((plansource)->raw_parse_tree)) - /* * This is the head of the backend's list of "saved" CachedPlanSources (i.e., * those that are in long-lived storage and are examined for sinval events). @@ -100,9 +89,10 @@ static dlist_head saved_plan_list = DLIST_STATIC_INIT(saved_plan_list); static dlist_head cached_expression_list = DLIST_STATIC_INIT(cached_expression_list); static void ReleaseGenericPlan(CachedPlanSource *plansource); +static bool StmtPlanRequiresRevalidation(CachedPlanSource *plansource); +static bool BuildingPlanRequiresSnapshot(CachedPlanSource *plansource); static List *RevalidateCachedQuery(CachedPlanSource *plansource, - QueryEnvironment *queryEnv, - bool release_generic); + QueryEnvironment *queryEnv); static bool CheckCachedPlan(CachedPlanSource *plansource); static CachedPlan *BuildCachedPlan(CachedPlanSource *plansource, List *qlist, ParamListInfo boundParams, QueryEnvironment *queryEnv); @@ -166,7 +156,7 @@ InitPlanCache(void) } /* - * CreateCachedPlan: initially create a plan cache entry. + * CreateCachedPlan: initially create a plan cache entry for a raw parse tree. * * Creation of a cached plan is divided into two steps, CreateCachedPlan and * CompleteCachedPlan. CreateCachedPlan should be called after running the @@ -220,6 +210,7 @@ CreateCachedPlan(RawStmt *raw_parse_tree, plansource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); plansource->magic = CACHEDPLANSOURCE_MAGIC; plansource->raw_parse_tree = copyObject(raw_parse_tree); + plansource->analyzed_parse_tree = NULL; plansource->query_string = pstrdup(query_string); MemoryContextSetIdentifier(source_context, plansource->query_string); plansource->commandTag = commandTag; @@ -227,6 +218,8 @@ CreateCachedPlan(RawStmt *raw_parse_tree, plansource->num_params = 0; plansource->parserSetup = NULL; plansource->parserSetupArg = NULL; + plansource->postRewrite = NULL; + plansource->postRewriteArg = NULL; plansource->cursor_options = 0; plansource->fixed_result = false; plansource->resultDesc = NULL; @@ -255,6 +248,34 @@ CreateCachedPlan(RawStmt *raw_parse_tree, return plansource; } +/* + * CreateCachedPlanForQuery: initially create a plan cache entry for a Query. + * + * This is used in the same way as CreateCachedPlan, except that the source + * query has already been through parse analysis, and the plancache will never + * try to re-do that step. + * + * Currently this is used only for new-style SQL functions, where we have a + * Query from the function's prosqlbody, but no source text. The query_string + * is typically empty, but is required anyway. + */ +CachedPlanSource * +CreateCachedPlanForQuery(Query *analyzed_parse_tree, + const char *query_string, + CommandTag commandTag) +{ + CachedPlanSource *plansource; + MemoryContext oldcxt; + + /* Rather than duplicating CreateCachedPlan, just do this: */ + plansource = CreateCachedPlan(NULL, query_string, commandTag); + oldcxt = MemoryContextSwitchTo(plansource->context); + plansource->analyzed_parse_tree = copyObject(analyzed_parse_tree); + MemoryContextSwitchTo(oldcxt); + + return plansource; +} + /* * CreateOneShotCachedPlan: initially create a one-shot plan cache entry. * @@ -289,12 +310,15 @@ CreateOneShotCachedPlan(RawStmt *raw_parse_tree, plansource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); plansource->magic = CACHEDPLANSOURCE_MAGIC; plansource->raw_parse_tree = raw_parse_tree; + plansource->analyzed_parse_tree = NULL; plansource->query_string = query_string; plansource->commandTag = commandTag; plansource->param_types = NULL; plansource->num_params = 0; plansource->parserSetup = NULL; plansource->parserSetupArg = NULL; + plansource->postRewrite = NULL; + plansource->postRewriteArg = NULL; plansource->cursor_options = 0; plansource->fixed_result = false; plansource->resultDesc = NULL; @@ -439,8 +463,7 @@ CompleteCachedPlan(CachedPlanSource *plansource, /* * Save the final parameter types (or other parameter specification data) - * into the source_context, as well as our other parameters. Also save - * the result tuple descriptor. + * into the source_context, as well as our other parameters. */ MemoryContextSwitchTo(source_context); @@ -456,14 +479,53 @@ CompleteCachedPlan(CachedPlanSource *plansource, plansource->parserSetupArg = parserSetupArg; plansource->cursor_options = cursor_options; plansource->fixed_result = fixed_result; - plansource->resultDesc = PlanCacheComputeResultDesc(querytree_list); + /* + * Also save the result tuple descriptor. PlanCacheComputeResultDesc may + * leak some cruft; normally we just accept that to save a copy step, but + * in USE_VALGRIND mode be tidy by running it in the caller's context. + */ +#ifdef USE_VALGRIND + MemoryContextSwitchTo(oldcxt); + plansource->resultDesc = PlanCacheComputeResultDesc(querytree_list); + if (plansource->resultDesc) + { + MemoryContextSwitchTo(source_context); + plansource->resultDesc = CreateTupleDescCopy(plansource->resultDesc); + MemoryContextSwitchTo(oldcxt); + } +#else + plansource->resultDesc = PlanCacheComputeResultDesc(querytree_list); MemoryContextSwitchTo(oldcxt); +#endif plansource->is_complete = true; plansource->is_valid = true; } +/* + * SetPostRewriteHook: set a hook to modify post-rewrite query trees + * + * Some callers have a need to modify the query trees between rewriting and + * planning. In the initial call to CompleteCachedPlan, it's assumed such + * work was already done on the querytree_list. However, if we're forced + * to replan, it will need to be done over. The caller can set this hook + * to provide code to make that happen. + * + * postRewriteArg is just passed verbatim to the hook. As with parserSetupArg, + * it is caller's responsibility that the referenced data remains + * valid for as long as the CachedPlanSource exists. + */ +void +SetPostRewriteHook(CachedPlanSource *plansource, + PostRewriteHook postRewrite, + void *postRewriteArg) +{ + Assert(plansource->magic == CACHEDPLANSOURCE_MAGIC); + plansource->postRewrite = postRewrite; + plansource->postRewriteArg = postRewriteArg; +} + /* * SaveCachedPlan: save a cached plan permanently * @@ -566,6 +628,42 @@ ReleaseGenericPlan(CachedPlanSource *plansource) } } +/* + * We must skip "overhead" operations that involve database access when the + * cached plan's subject statement is a transaction control command or one + * that requires a snapshot not to be set yet (such as SET or LOCK). More + * generally, statements that do not require parse analysis/rewrite/plan + * activity never need to be revalidated, so we can treat them all like that. + * For the convenience of postgres.c, treat empty statements that way too. + */ +static bool +StmtPlanRequiresRevalidation(CachedPlanSource *plansource) +{ + if (plansource->raw_parse_tree != NULL) + return stmt_requires_parse_analysis(plansource->raw_parse_tree); + else if (plansource->analyzed_parse_tree != NULL) + return query_requires_rewrite_plan(plansource->analyzed_parse_tree); + /* empty query never needs revalidation */ + return false; +} + +/* + * Determine if creating a plan for this CachedPlanSource requires a snapshot. + * In fact this function matches StmtPlanRequiresRevalidation(), but we want + * to preserve the distinction between stmt_requires_parse_analysis() and + * analyze_requires_snapshot(). + */ +static bool +BuildingPlanRequiresSnapshot(CachedPlanSource *plansource) +{ + if (plansource->raw_parse_tree != NULL) + return analyze_requires_snapshot(plansource->raw_parse_tree); + else if (plansource->analyzed_parse_tree != NULL) + return query_requires_rewrite_plan(plansource->analyzed_parse_tree); + /* empty query never needs a snapshot */ + return false; +} + /* * RevalidateCachedQuery: ensure validity of analyzed-and-rewritten query tree. * @@ -579,20 +677,12 @@ ReleaseGenericPlan(CachedPlanSource *plansource) * The result value is the transient analyzed-and-rewritten query tree if we * had to do re-analysis, and NIL otherwise. (This is returned just to save * a tree copying step in a subsequent BuildCachedPlan call.) - * - * This also releases and drops the generic plan (plansource->gplan), if any, - * as most callers will typically build a new CachedPlan for the plansource - * right after this. However, when called from UpdateCachedPlan(), the - * function does not release the generic plan, as UpdateCachedPlan() updates - * an existing CachedPlan in place. */ static List * RevalidateCachedQuery(CachedPlanSource *plansource, - QueryEnvironment *queryEnv, - bool release_generic) + QueryEnvironment *queryEnv) { bool snapshot_set; - RawStmt *rawtree; List *tlist; /* transient query-tree list */ List *qlist; /* permanent query-tree list */ TupleDesc resultDesc; @@ -615,7 +705,10 @@ RevalidateCachedQuery(CachedPlanSource *plansource, /* * If the query is currently valid, we should have a saved search_path --- * check to see if that matches the current environment. If not, we want - * to force replan. + * to force replan. (We could almost ignore this consideration when + * working from an analyzed parse tree; but there are scenarios where + * planning can have search_path-dependent results, for example if it + * inlines an old-style SQL function.) */ if (plansource->is_valid) { @@ -662,9 +755,9 @@ RevalidateCachedQuery(CachedPlanSource *plansource, } /* - * Discard the no-longer-useful query tree. (Note: we don't want to do - * this any earlier, else we'd not have been able to release locks - * correctly in the race condition case.) + * Discard the no-longer-useful rewritten query tree. (Note: we don't + * want to do this any earlier, else we'd not have been able to release + * locks correctly in the race condition case.) */ plansource->is_valid = false; plansource->query_list = NIL; @@ -686,9 +779,8 @@ RevalidateCachedQuery(CachedPlanSource *plansource, MemoryContextDelete(qcxt); } - /* Drop the generic plan reference, if any, and if requested */ - if (release_generic) - ReleaseGenericPlan(plansource); + /* Drop the generic plan reference if any */ + ReleaseGenericPlan(plansource); /* * Now re-do parse analysis and rewrite. This not incidentally acquires @@ -711,25 +803,52 @@ RevalidateCachedQuery(CachedPlanSource *plansource, } /* - * Run parse analysis and rule rewriting. The parser tends to scribble on - * its input, so we must copy the raw parse tree to prevent corruption of - * the cache. + * Run parse analysis (if needed) and rule rewriting. */ - rawtree = copyObject(plansource->raw_parse_tree); - if (rawtree == NULL) - tlist = NIL; - else if (plansource->parserSetup != NULL) - tlist = pg_analyze_and_rewrite_withcb(rawtree, - plansource->query_string, - plansource->parserSetup, - plansource->parserSetupArg, - queryEnv); + if (plansource->raw_parse_tree != NULL) + { + /* Source is raw parse tree */ + RawStmt *rawtree; + + /* + * The parser tends to scribble on its input, so we must copy the raw + * parse tree to prevent corruption of the cache. + */ + rawtree = copyObject(plansource->raw_parse_tree); + if (plansource->parserSetup != NULL) + tlist = pg_analyze_and_rewrite_withcb(rawtree, + plansource->query_string, + plansource->parserSetup, + plansource->parserSetupArg, + queryEnv); + else + tlist = pg_analyze_and_rewrite_fixedparams(rawtree, + plansource->query_string, + plansource->param_types, + plansource->num_params, + queryEnv); + } + else if (plansource->analyzed_parse_tree != NULL) + { + /* Source is pre-analyzed query, so we only need to rewrite */ + Query *analyzed_tree; + + /* The rewriter scribbles on its input, too, so copy */ + analyzed_tree = copyObject(plansource->analyzed_parse_tree); + /* Acquire locks needed before rewriting ... */ + AcquireRewriteLocks(analyzed_tree, true, false); + /* ... and do it */ + tlist = pg_rewrite_query(analyzed_tree); + } else - tlist = pg_analyze_and_rewrite_fixedparams(rawtree, - plansource->query_string, - plansource->param_types, - plansource->num_params, - queryEnv); + { + /* Empty query, nothing to do */ + tlist = NIL; + } + + /* Apply post-rewrite callback if there is one */ + if (plansource->postRewrite != NULL) + plansource->postRewrite(tlist, plansource->postRewriteArg); /* Release snapshot if we got one */ if (snapshot_set) @@ -824,10 +943,8 @@ RevalidateCachedQuery(CachedPlanSource *plansource, * Caller must have already called RevalidateCachedQuery to verify that the * querytree is up to date. * - * On a "true" return, we have acquired locks on the "unprunableRelids" set - * for all plans in plansource->stmt_list. However, the plans are not fully - * race-condition-free until the executor acquires locks on the prunable - * relations that survive initial runtime pruning during InitPlan(). + * On a "true" return, we have acquired the locks needed to run the plan. + * (We must do this for the "true" result to be race-condition-free.) */ static bool CheckCachedPlan(CachedPlanSource *plansource) @@ -912,8 +1029,6 @@ CheckCachedPlan(CachedPlanSource *plansource) * Planning work is done in the caller's memory context. The finished plan * is in a child memory context, which typically should get reparented * (unless this is a one-shot plan, in which case we don't copy the plan). - * - * Note: When changing this, you should also look at UpdateCachedPlan(). */ static CachedPlan * BuildCachedPlan(CachedPlanSource *plansource, List *qlist, @@ -924,7 +1039,6 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, bool snapshot_set; bool is_transient; MemoryContext plan_context; - MemoryContext stmt_context = NULL; MemoryContext oldcxt = CurrentMemoryContext; ListCell *lc; @@ -942,7 +1056,7 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, * let's treat it as real and redo the RevalidateCachedQuery call. */ if (!plansource->is_valid) - qlist = RevalidateCachedQuery(plansource, queryEnv, true); + qlist = RevalidateCachedQuery(plansource, queryEnv); /* * If we don't already have a copy of the querytree list that can be @@ -963,8 +1077,7 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, */ snapshot_set = false; if (!ActiveSnapshotSet() && - plansource->raw_parse_tree && - analyze_requires_snapshot(plansource->raw_parse_tree)) + BuildingPlanRequiresSnapshot(plansource)) { PushActiveSnapshot(GetTransactionSnapshot()); snapshot_set = true; @@ -981,19 +1094,10 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, PopActiveSnapshot(); /* - * Normally, we create a dedicated memory context for the CachedPlan and - * its subsidiary data. Although it's usually not very large, the context - * is designed to allow growth if necessary. - * - * The PlannedStmts are stored in a separate child context (stmt_context) - * of the CachedPlan's memory context. This separation allows - * UpdateCachedPlan() to free and replace the PlannedStmts without - * affecting the CachedPlan structure or its stmt_list List. - * - * For one-shot plans, we instead use the caller's memory context, as the - * CachedPlan will not persist. stmt_context will be set to NULL in this - * case, because UpdateCachedPlan() should never get called on a one-shot - * plan. + * Normally we make a dedicated memory context for the CachedPlan and its + * subsidiary data. (It's probably not going to be large, but just in + * case, allow it to grow large. It's transient for the moment.) But for + * a one-shot plan, we just leave it in the caller's memory context. */ if (!plansource->is_oneshot) { @@ -1002,17 +1106,12 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, ALLOCSET_START_SMALL_SIZES); MemoryContextCopyAndSetIdentifier(plan_context, plansource->query_string); - stmt_context = AllocSetContextCreate(CurrentMemoryContext, - "CachedPlan PlannedStmts", - ALLOCSET_START_SMALL_SIZES); - MemoryContextCopyAndSetIdentifier(stmt_context, plansource->query_string); - MemoryContextSetParent(stmt_context, plan_context); + /* + * Copy plan into the new context. + */ + MemoryContextSwitchTo(plan_context); - MemoryContextSwitchTo(stmt_context); plist = copyObject(plist); - - MemoryContextSwitchTo(plan_context); - plist = list_copy(plist); } else plan_context = CurrentMemoryContext; @@ -1053,10 +1152,8 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, plan->saved_xmin = InvalidTransactionId; plan->refcount = 0; plan->context = plan_context; - plan->stmt_context = stmt_context; plan->is_oneshot = plansource->is_oneshot; plan->is_saved = false; - plan->is_reused = false; plan->is_valid = true; /* assign generation number to new plan */ @@ -1067,113 +1164,6 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, return plan; } -/* - * UpdateCachedPlan - * Create fresh plans for all queries in the CachedPlanSource, replacing - * those in the generic plan's stmt_list, and return the plan for the - * query_index'th query. - * - * This function is primarily used by ExecutorStartCachedPlan() to handle - * cases where the original generic CachedPlan becomes invalid. Such - * invalidation may occur when prunable relations in the old plan for the - * query_index'th query are locked in preparation for execution. - * - * Note that invalidations received during the execution of the query_index'th - * query can affect both the queries that have already finished execution - * (e.g., due to concurrent modifications on prunable relations that were not - * locked during their execution) and also the queries that have not yet been - * executed. As a result, this function updates all plans to ensure - * CachedPlan.is_valid is safely set to true. - * - * The old PlannedStmts in plansource->gplan->stmt_list are freed here, so - * the caller and any of its callers must not rely on them remaining accessible - * after this function is called. - */ -PlannedStmt * -UpdateCachedPlan(CachedPlanSource *plansource, int query_index, - QueryEnvironment *queryEnv) -{ - List *query_list = plansource->query_list, - *plan_list; - ListCell *l1, - *l2; - CachedPlan *plan = plansource->gplan; - MemoryContext oldcxt; - - Assert(ActiveSnapshotSet()); - - /* Sanity checks (XXX can be Asserts?) */ - if (plan == NULL) - elog(ERROR, "UpdateCachedPlan() called in the wrong context: plansource->gplan is NULL"); - else if (plan->is_valid) - elog(ERROR, "UpdateCachedPlan() called in the wrong context: plansource->gplan->is_valid is true"); - else if (plan->is_oneshot) - elog(ERROR, "UpdateCachedPlan() called in the wrong context: plansource->gplan->is_oneshot is true"); - - /* - * The plansource might have become invalid since GetCachedPlan() returned - * the CachedPlan. See the comment in BuildCachedPlan() for details on why - * this might happen. Although invalidation is likely a false positive as - * stated there, we make the plan valid to ensure the query list used for - * planning is up to date. - * - * The risk of catching an invalidation is higher here than when - * BuildCachedPlan() is called from GetCachedPlan(), because this function - * is normally called long after GetCachedPlan() returns the CachedPlan, - * so much more processing could have occurred including things that mark - * the CachedPlanSource invalid. - * - * Note: Do not release plansource->gplan, because the upstream callers - * (such as the callers of ExecutorStartCachedPlan()) would still be - * referencing it. - */ - if (!plansource->is_valid) - query_list = RevalidateCachedQuery(plansource, queryEnv, false); - Assert(query_list != NIL); - - /* - * Build a new generic plan for all the queries after making a copy to be - * scribbled on by the planner. - */ - query_list = copyObject(query_list); - - /* - * Planning work is done in the caller's memory context. The resulting - * PlannedStmt is then copied into plan->stmt_context after throwing away - * the old ones. - */ - plan_list = pg_plan_queries(query_list, plansource->query_string, - plansource->cursor_options, NULL); - Assert(list_length(plan_list) == list_length(plan->stmt_list)); - - MemoryContextReset(plan->stmt_context); - oldcxt = MemoryContextSwitchTo(plan->stmt_context); - forboth(l1, plan_list, l2, plan->stmt_list) - { - PlannedStmt *plannedstmt = lfirst(l1); - - lfirst(l2) = copyObject(plannedstmt); - } - MemoryContextSwitchTo(oldcxt); - - /* - * XXX Should this also (re)set the properties of the CachedPlan that are - * set in BuildCachedPlan() after creating the fresh plans such as - * planRoleId, dependsOnRole, and save_xmin? - */ - - /* - * We've updated all the plans that might have been invalidated, so mark - * the CachedPlan as valid. - */ - plan->is_valid = true; - - /* Also update generic_cost because we just created a new generic plan. */ - plansource->generic_cost = cached_plan_cost(plan, false); - - return list_nth_node(PlannedStmt, plan->stmt_list, query_index); -} - /* * choose_custom_plan: choose whether to use custom or generic plan * @@ -1290,13 +1280,8 @@ cached_plan_cost(CachedPlan *plan, bool include_planner) * plan or a custom plan for the given parameters: the caller does not know * which it will get. * - * On return, the plan is valid, but if it is a reused generic plan, not all - * locks are acquired. In such cases, CheckCachedPlan() does not take locks - * on relations subject to initial runtime pruning; instead, these locks are - * deferred until execution startup, when ExecDoInitialPruning() performs - * initial pruning. The plan's "is_reused" flag is set to indicate that - * CachedPlanRequiresLocking() should return true when called by - * ExecDoInitialPruning(). + * On return, the plan is valid and we have sufficient locks to begin + * execution. * * On return, the refcount of the plan has been incremented; a later * ReleaseCachedPlan() call is expected. If "owner" is not NULL then @@ -1313,6 +1298,7 @@ GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, CachedPlan *plan = NULL; List *qlist; bool customplan; + ListCell *lc; /* Assert caller is doing things in a sane order */ Assert(plansource->magic == CACHEDPLANSOURCE_MAGIC); @@ -1322,7 +1308,7 @@ GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, elog(ERROR, "cannot apply ResourceOwner to non-saved cached plan"); /* Make sure the querytree list is valid and we have parse-time locks */ - qlist = RevalidateCachedQuery(plansource, queryEnv, true); + qlist = RevalidateCachedQuery(plansource, queryEnv); /* Decide whether to use a custom plan */ customplan = choose_custom_plan(plansource, boundParams); @@ -1334,8 +1320,6 @@ GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, /* We want a generic plan, and we already have a valid one */ plan = plansource->gplan; Assert(plan->magic == CACHEDPLAN_MAGIC); - /* Reusing the existing plan, so not all locks may be acquired. */ - plan->is_reused = true; } else { @@ -1417,6 +1401,13 @@ GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, plan->is_saved = true; } + foreach(lc, plan->stmt_list) + { + PlannedStmt *pstmt = (PlannedStmt *) lfirst(lc); + + pstmt->planOrigin = customplan ? PLAN_STMT_CACHE_CUSTOM : PLAN_STMT_CACHE_GENERIC; + } + return plan; } @@ -1703,6 +1694,7 @@ CopyCachedPlan(CachedPlanSource *plansource) newsource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); newsource->magic = CACHEDPLANSOURCE_MAGIC; newsource->raw_parse_tree = copyObject(plansource->raw_parse_tree); + newsource->analyzed_parse_tree = copyObject(plansource->analyzed_parse_tree); newsource->query_string = pstrdup(plansource->query_string); MemoryContextSetIdentifier(source_context, newsource->query_string); newsource->commandTag = plansource->commandTag; @@ -1718,6 +1710,8 @@ CopyCachedPlan(CachedPlanSource *plansource) newsource->num_params = plansource->num_params; newsource->parserSetup = plansource->parserSetup; newsource->parserSetupArg = plansource->parserSetupArg; + newsource->postRewrite = plansource->postRewrite; + newsource->postRewriteArg = plansource->postRewriteArg; newsource->cursor_options = plansource->cursor_options; newsource->fixed_result = plansource->fixed_result; if (plansource->resultDesc) @@ -1798,7 +1792,7 @@ CachedPlanGetTargetList(CachedPlanSource *plansource, return NIL; /* Make sure the querytree list is valid and we have parse-time locks */ - RevalidateCachedQuery(plansource, queryEnv, true); + RevalidateCachedQuery(plansource, queryEnv); /* Get the primary statement and find out what it returns */ pstmt = QueryListGetPrimaryStmt(plansource->query_list); @@ -1920,7 +1914,7 @@ AcquireExecutorLocks(List *stmt_list, bool acquire) foreach(lc1, stmt_list) { PlannedStmt *plannedstmt = lfirst_node(PlannedStmt, lc1); - int rtindex; + ListCell *lc2; if (plannedstmt->commandType == CMD_UTILITY) { @@ -1938,16 +1932,13 @@ AcquireExecutorLocks(List *stmt_list, bool acquire) continue; } - rtindex = -1; - while ((rtindex = bms_next_member(plannedstmt->unprunableRelids, - rtindex)) >= 0) + foreach(lc2, plannedstmt->rtable) { - RangeTblEntry *rte = list_nth_node(RangeTblEntry, - plannedstmt->rtable, - rtindex - 1); + RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc2); - Assert(rte->rtekind == RTE_RELATION || - (rte->rtekind == RTE_SUBQUERY && OidIsValid(rte->relid))); + if (!(rte->rtekind == RTE_RELATION || + (rte->rtekind == RTE_SUBQUERY && OidIsValid(rte->relid)))) + continue; /* * Acquire the appropriate type of lock on each relation OID. Note diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 9f54a9e72b730..6fe268a8eec1f 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -307,7 +307,7 @@ static TupleDesc GetPgClassDescriptor(void); static TupleDesc GetPgIndexDescriptor(void); static void AttrDefaultFetch(Relation relation, int ndef); static int AttrDefaultCmp(const void *a, const void *b); -static void CheckConstraintFetch(Relation relation); +static void CheckNNConstraintFetch(Relation relation); static int CheckConstraintCmp(const void *a, const void *b); static void InitIndexAmRoutine(Relation relation); static void IndexSupportInitialize(oidvector *indclass, @@ -684,6 +684,8 @@ RelationBuildTupleDesc(Relation relation) attrmiss || relation->rd_rel->relchecks > 0) { + bool is_catalog = IsCatalogRelation(relation); + relation->rd_att->constr = constr; if (ndef > 0) /* DEFAULTs */ @@ -693,9 +695,33 @@ RelationBuildTupleDesc(Relation relation) constr->missing = attrmiss; - if (relation->rd_rel->relchecks > 0) /* CHECKs */ - CheckConstraintFetch(relation); - else + /* CHECK and NOT NULLs */ + if (relation->rd_rel->relchecks > 0 || + (!is_catalog && constr->has_not_null)) + CheckNNConstraintFetch(relation); + + /* + * Any not-null constraint that wasn't marked invalid by + * CheckNNConstraintFetch must necessarily be valid; make it so in the + * CompactAttribute array. + */ + if (!is_catalog) + { + for (int i = 0; i < relation->rd_rel->relnatts; i++) + { + CompactAttribute *attr; + + attr = TupleDescCompactAttr(relation->rd_att, i); + + if (attr->attnullability == ATTNULLABLE_UNKNOWN) + attr->attnullability = ATTNULLABLE_VALID; + else + Assert(attr->attnullability == ATTNULLABLE_INVALID || + attr->attnullability == ATTNULLABLE_UNRESTRICTED); + } + } + + if (relation->rd_rel->relchecks == 0) constr->num_check = 0; } else @@ -2030,6 +2056,23 @@ formrdesc(const char *relationName, Oid relationReltype, relation->rd_isvalid = true; } +#ifdef USE_ASSERT_CHECKING +/* + * AssertCouldGetRelation + * + * Check safety of calling RelationIdGetRelation(). + * + * In code that reads catalogs in the event of a cache miss, call this + * before checking the cache. + */ +void +AssertCouldGetRelation(void) +{ + Assert(IsTransactionState()); + AssertBufferLocksPermitCatalogRead(); +} +#endif + /* ---------------------------------------------------------------- * Relation Descriptor Lookup Interface @@ -2057,8 +2100,7 @@ RelationIdGetRelation(Oid relationId) { Relation rd; - /* Make sure we're in an xact, even if this ends up being a cache hit */ - Assert(IsTransactionState()); + AssertCouldGetRelation(); /* * first try to find reldesc in the cache @@ -2347,8 +2389,7 @@ RelationReloadNailed(Relation relation) Assert(relation->rd_isnailed); /* nailed indexes are handled by RelationReloadIndexInfo() */ Assert(relation->rd_rel->relkind == RELKIND_RELATION); - /* can only reread catalog contents in a transaction */ - Assert(IsTransactionState()); + AssertCouldGetRelation(); /* * Redo RelationInitPhysicalAddr in case it is a mapped relation whose @@ -2544,8 +2585,7 @@ static void RelationRebuildRelation(Relation relation) { Assert(!RelationHasReferenceCountZero(relation)); - /* rebuilding requires access to the catalogs */ - Assert(IsTransactionState()); + AssertCouldGetRelation(); /* there is no reason to ever rebuild a dropped relation */ Assert(relation->rd_droppedSubid == InvalidSubTransactionId); @@ -3144,7 +3184,7 @@ AssertPendingSyncs_RelationCache(void) if ((LockTagType) locallock->tag.lock.locktag_type != LOCKTAG_RELATION) continue; - relid = ObjectIdGetDatum(locallock->tag.lock.locktag_field2); + relid = locallock->tag.lock.locktag_field2; r = RelationIdGetRelation(relid); if (!RelationIsValid(r)) continue; @@ -3575,6 +3615,14 @@ RelationBuildLocalRelation(const char *relname, datt->attnotnull = satt->attnotnull; has_not_null |= satt->attnotnull; populate_compact_attribute(rel->rd_att, i); + + if (satt->attnotnull) + { + CompactAttribute *scatt = TupleDescCompactAttr(tupDesc, i); + CompactAttribute *dcatt = TupleDescCompactAttr(rel->rd_att, i); + + dcatt->attnullability = scatt->attnullability; + } } if (has_not_null) @@ -4533,13 +4581,14 @@ AttrDefaultCmp(const void *a, const void *b) } /* - * Load any check constraints for the relation. + * Load any check constraints for the relation, and update not-null validity + * of invalid constraints. * * As with defaults, if we don't find the expected number of them, just warn * here. The executor should throw an error if an INSERT/UPDATE is attempted. */ static void -CheckConstraintFetch(Relation relation) +CheckNNConstraintFetch(Relation relation) { ConstrCheck *check; int ncheck = relation->rd_rel->relchecks; @@ -4549,10 +4598,13 @@ CheckConstraintFetch(Relation relation) HeapTuple htup; int found = 0; - /* Allocate array with room for as many entries as expected */ - check = (ConstrCheck *) - MemoryContextAllocZero(CacheMemoryContext, - ncheck * sizeof(ConstrCheck)); + /* Allocate array with room for as many entries as expected, if needed */ + if (ncheck > 0) + check = (ConstrCheck *) + MemoryContextAllocZero(CacheMemoryContext, + ncheck * sizeof(ConstrCheck)); + else + check = NULL; /* Search pg_constraint for relevant entries */ ScanKeyInit(&skey[0], @@ -4570,7 +4622,31 @@ CheckConstraintFetch(Relation relation) Datum val; bool isnull; - /* We want check constraints only */ + /* + * If this is a not-null constraint, then only look at it if it's + * invalid, and if so, mark the TupleDesc entry as known invalid. + * Otherwise move on. We'll mark any remaining columns that are still + * in UNKNOWN state as known valid later. This allows us not to have + * to extract the attnum from this constraint tuple in the vast + * majority of cases. + */ + if (conform->contype == CONSTRAINT_NOTNULL) + { + if (!conform->convalidated) + { + AttrNumber attnum; + + attnum = extractNotNullColumn(htup); + Assert(relation->rd_att->compact_attrs[attnum - 1].attnullability == + ATTNULLABLE_UNKNOWN); + relation->rd_att->compact_attrs[attnum - 1].attnullability = + ATTNULLABLE_INVALID; + } + + continue; + } + + /* For what follows, consider check constraints only */ if (conform->contype != CONSTRAINT_CHECK) continue; @@ -4666,11 +4742,6 @@ RelationGetFKeyList(Relation relation) if (relation->rd_fkeyvalid) return relation->rd_fkeylist; - /* Fast path: non-partitioned tables without triggers can't have FKs */ - if (!relation->rd_rel->relhastriggers && - relation->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) - return NIL; - /* * We build the list we intend to return (in the caller's context) while * doing the scan. After successfully completing the scan, we copy that @@ -4702,6 +4773,7 @@ RelationGetFKeyList(Relation relation) info->conoid = constraint->oid; info->conrelid = constraint->conrelid; info->confrelid = constraint->confrelid; + info->conenforced = constraint->conenforced; DeconstructFkConstraintRow(htup, &info->nkeys, info->conkey, @@ -6919,5 +6991,5 @@ ResOwnerReleaseRelation(Datum res) Assert(rel->rd_refcnt > 0); rel->rd_refcnt -= 1; - RelationCloseCleanup((Relation) res); + RelationCloseCleanup((Relation) DatumGetPointer(res)); } diff --git a/src/backend/utils/cache/relfilenumbermap.c b/src/backend/utils/cache/relfilenumbermap.c index 8a2f6f8c69318..0b6f9cf3fa191 100644 --- a/src/backend/utils/cache/relfilenumbermap.c +++ b/src/backend/utils/cache/relfilenumbermap.c @@ -130,6 +130,11 @@ InitializeRelfilenumberMap(void) * Map a relation's (tablespace, relfilenumber) to a relation's oid and cache * the result. * + * A temporary relation may share its relfilenumber with a permanent relation + * or temporary relations created in other backends. Being able to uniquely + * identify a temporary relation would require a backend's proc number, which + * we do not know about. Hence, this function ignores this case. + * * Returns InvalidOid if no relation matching the criteria could be found. */ Oid @@ -208,6 +213,9 @@ RelidByRelfilenumber(Oid reltablespace, RelFileNumber relfilenumber) { Form_pg_class classform = (Form_pg_class) GETSTRUCT(ntp); + if (classform->relpersistence == RELPERSISTENCE_TEMP) + continue; + if (found) elog(ERROR, "unexpected duplicate for tablespace %u, relfilenumber %u", diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index 95a1d0a274901..7828bdcba8f64 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -396,7 +396,7 @@ SearchSysCacheCopy(int cacheId, /* * SearchSysCacheLockedCopy1 * - * Meld SearchSysCacheLockedCopy1 with SearchSysCacheCopy(). After the + * Meld SearchSysCacheLocked1 with SearchSysCacheCopy(). After the * caller's heap_update(), it should UnlockTuple(InplaceUpdateTupleLock) and * heap_freetuple(). */ @@ -459,9 +459,9 @@ GetSysCacheOid(int cacheId, tuple = SearchSysCache(cacheId, key1, key2, key3, key4); if (!HeapTupleIsValid(tuple)) return InvalidOid; - result = heap_getattr(tuple, oidcol, - SysCache[cacheId]->cc_tupdesc, - &isNull); + result = DatumGetObjectId(heap_getattr(tuple, oidcol, + SysCache[cacheId]->cc_tupdesc, + &isNull)); Assert(!isNull); /* columns used as oids should never be NULL */ ReleaseSysCache(tuple); return result; diff --git a/src/backend/utils/cache/ts_cache.c b/src/backend/utils/cache/ts_cache.c index 18cccd778fd8c..e8ae53238d07a 100644 --- a/src/backend/utils/cache/ts_cache.c +++ b/src/backend/utils/cache/ts_cache.c @@ -321,7 +321,9 @@ lookup_ts_dictionary_cache(Oid dictId) /* * Init method runs in dictionary's private memory context, and we - * make sure the options are stored there too + * make sure the options are stored there too. This typically + * results in a small amount of memory leakage, but it's not worth + * complicating the API for tmplinit functions to avoid it. */ oldcontext = MemoryContextSwitchTo(entry->dictCtx); diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index ae65a1cce06c5..6a347698edffe 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -952,7 +952,7 @@ lookup_type_cache(Oid type_id, int flags) load_domaintype_info(typentry); } - INJECTION_POINT("typecache-before-rel-type-cache-insert"); + INJECTION_POINT("typecache-before-rel-type-cache-insert", NULL); Assert(in_progress_offset + 1 == in_progress_list_len); in_progress_list_len--; @@ -1171,9 +1171,6 @@ load_domaintype_info(TypeCacheEntry *typentry) elog(ERROR, "domain \"%s\" constraint \"%s\" has NULL conbin", NameStr(typTup->typname), NameStr(c->conname)); - /* Convert conbin to C string in caller context */ - constring = TextDatumGetCString(val); - /* Create the DomainConstraintCache object and context if needed */ if (dcc == NULL) { @@ -1189,9 +1186,8 @@ load_domaintype_info(TypeCacheEntry *typentry) dcc->dccRefCount = 0; } - /* Create node trees in DomainConstraintCache's context */ - oldcxt = MemoryContextSwitchTo(dcc->dccContext); - + /* Convert conbin to a node tree, still in caller's context */ + constring = TextDatumGetCString(val); check_expr = (Expr *) stringToNode(constring); /* @@ -1206,10 +1202,13 @@ load_domaintype_info(TypeCacheEntry *typentry) */ check_expr = expression_planner(check_expr); + /* Create only the minimally needed stuff in dccContext */ + oldcxt = MemoryContextSwitchTo(dcc->dccContext); + r = makeNode(DomainConstraintState); r->constrainttype = DOM_CONSTRAINT_CHECK; r->name = pstrdup(NameStr(c->conname)); - r->check_expr = check_expr; + r->check_expr = copyObject(check_expr); r->check_exprstate = NULL; MemoryContextSwitchTo(oldcxt); @@ -2395,7 +2394,10 @@ InvalidateCompositeTypeCacheEntry(TypeCacheEntry *typentry) /* Reset equality/comparison/hashing validity information */ typentry->flags &= ~TCFLAGS_OPERATOR_FLAGS; - /* Call delete_rel_type_cache() if we actually cleared something */ + /* + * Call delete_rel_type_cache_if_needed() if we actually cleared + * something. + */ if (hadTupDescOrOpclass) delete_rel_type_cache_if_needed(typentry); } @@ -2542,7 +2544,7 @@ TypeCacheTypCallback(Datum arg, int cacheid, uint32 hashvalue) TCFLAGS_CHECKED_DOMAIN_CONSTRAINTS); /* - * Call delete_rel_type_cache() if we cleaned + * Call delete_rel_type_cache_if_needed() if we cleaned * TCFLAGS_HAVE_PG_TYPE_DATA flag previously. */ if (hadPgTypeData) @@ -2576,8 +2578,17 @@ TypeCacheOpcCallback(Datum arg, int cacheid, uint32 hashvalue) hash_seq_init(&status, TypeCacheHash); while ((typentry = (TypeCacheEntry *) hash_seq_search(&status)) != NULL) { + bool hadOpclass = (typentry->flags & TCFLAGS_OPERATOR_FLAGS); + /* Reset equality/comparison/hashing validity information */ typentry->flags &= ~TCFLAGS_OPERATOR_FLAGS; + + /* + * Call delete_rel_type_cache_if_needed() if we actually cleared some + * of TCFLAGS_OPERATOR_FLAGS. + */ + if (hadOpclass) + delete_rel_type_cache_if_needed(typentry); } } diff --git a/src/backend/utils/error/csvlog.c b/src/backend/utils/error/csvlog.c index fdac3c048e36a..c3159ed7d979b 100644 --- a/src/backend/utils/error/csvlog.c +++ b/src/backend/utils/error/csvlog.c @@ -120,7 +120,7 @@ write_csvlog(ErrorData *edata) appendStringInfoChar(&buf, ','); /* session id */ - appendStringInfo(&buf, INT64_HEX_FORMAT ".%x", MyStartTime, MyProcPid); + appendStringInfo(&buf, "%" PRIx64 ".%x", MyStartTime, MyProcPid); appendStringInfoChar(&buf, ','); /* Line number */ diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 8a6b6905079d4..b7b9692f8c884 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -67,6 +67,7 @@ #endif #include "access/xact.h" +#include "common/ip.h" #include "libpq/libpq.h" #include "libpq/pqformat.h" #include "mb/pg_wchar.h" @@ -1127,12 +1128,15 @@ set_backtrace(ErrorData *edata, int num_skip) nframes = backtrace(buf, lengthof(buf)); strfrms = backtrace_symbols(buf, nframes); - if (strfrms == NULL) - return; - - for (int i = num_skip; i < nframes; i++) - appendStringInfo(&errtrace, "\n%s", strfrms[i]); - free(strfrms); + if (strfrms != NULL) + { + for (int i = num_skip; i < nframes; i++) + appendStringInfo(&errtrace, "\n%s", strfrms[i]); + free(strfrms); + } + else + appendStringInfoString(&errtrace, + "insufficient memory for backtrace generation"); } #else appendStringInfoString(&errtrace, @@ -1589,23 +1593,6 @@ geterrcode(void) return edata->sqlerrcode; } -/* - * geterrlevel --- return the currently set error level - * - * This is only intended for use in error callback subroutines, since there - * is no other place outside elog.c where the concept is meaningful. - */ -int -geterrlevel(void) -{ - ErrorData *edata = &errordata[errordata_stack_depth]; - - /* we don't bother incrementing recursion_depth */ - CHECK_STACK_DEPTH(); - - return edata->elevel; -} - /* * geterrposition --- return the currently set error position (0 if none) * @@ -2972,12 +2959,12 @@ log_status_format(StringInfo buf, const char *format, ErrorData *edata) { char strfbuf[128]; - snprintf(strfbuf, sizeof(strfbuf) - 1, INT64_HEX_FORMAT ".%x", + snprintf(strfbuf, sizeof(strfbuf) - 1, "%" PRIx64 ".%x", MyStartTime, MyProcPid); appendStringInfo(buf, "%*s", padding, strfbuf); } else - appendStringInfo(buf, INT64_HEX_FORMAT ".%x", MyStartTime, MyProcPid); + appendStringInfo(buf, "%" PRIx64 ".%x", MyStartTime, MyProcPid); break; case 'p': if (padding != 0) @@ -3084,6 +3071,38 @@ log_status_format(StringInfo buf, const char *format, ErrorData *edata) appendStringInfoSpaces(buf, padding > 0 ? padding : -padding); break; + case 'L': + { + const char *local_host; + + if (MyProcPort) + { + if (MyProcPort->local_host[0] == '\0') + { + /* + * First time through: cache the lookup, since it + * might not have trivial cost. + */ + (void) pg_getnameinfo_all(&MyProcPort->laddr.addr, + MyProcPort->laddr.salen, + MyProcPort->local_host, + sizeof(MyProcPort->local_host), + NULL, 0, + NI_NUMERICHOST | NI_NUMERICSERV); + } + local_host = MyProcPort->local_host; + } + else + { + /* Background process, or connection not yet made */ + local_host = "[none]"; + } + if (padding != 0) + appendStringInfo(buf, "%*s", padding, local_host); + else + appendStringInfoString(buf, local_host); + } + break; case 'r': if (MyProcPort && MyProcPort->remote_host) { diff --git a/src/backend/utils/error/jsonlog.c b/src/backend/utils/error/jsonlog.c index 519eacf17f83c..2619f49904201 100644 --- a/src/backend/utils/error/jsonlog.c +++ b/src/backend/utils/error/jsonlog.c @@ -168,7 +168,7 @@ write_jsonlog(ErrorData *edata) } /* Session id */ - appendJSONKeyValueFmt(&buf, "session_id", true, INT64_HEX_FORMAT ".%x", + appendJSONKeyValueFmt(&buf, "session_id", true, "%" PRIx64 ".%x", MyStartTime, MyProcPid); /* Line number */ diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c index 603632581d04a..1366521f471e2 100644 --- a/src/backend/utils/fmgr/dfmgr.c +++ b/src/backend/utils/fmgr/dfmgr.c @@ -99,6 +99,21 @@ load_external_function(const char *filename, const char *funcname, void *lib_handle; void *retval; + /* + * For extensions with hardcoded '$libdir/' library names, we strip the + * prefix to allow the library search path to be used. This is done only + * for simple names (e.g., "$libdir/foo"), not for nested paths (e.g., + * "$libdir/foo/bar"). + * + * For nested paths, 'expand_dynamic_library_name' directly expands the + * '$libdir' macro, so we leave them untouched. + */ + if (strncmp(filename, "$libdir/", 8) == 0) + { + if (first_dir_separator(filename + 8) == NULL) + filename += 8; + } + /* Expand the possibly-abbreviated filename to an exact path name */ fullname = expand_dynamic_library_name(filename); @@ -456,14 +471,6 @@ expand_dynamic_library_name(const char *name) Assert(name); - /* - * If the value starts with "$libdir/", strip that. This is because many - * extensions have hardcoded '$libdir/foo' as their library name, which - * prevents using the path. - */ - if (strncmp(name, "$libdir/", 8) == 0) - name += 8; - have_slash = (first_dir_separator(name) != NULL); if (!have_slash) diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index 782291d999832..5543440a33e6c 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -1788,41 +1788,6 @@ OidSendFunctionCall(Oid functionId, Datum val) } -/*------------------------------------------------------------------------- - * Support routines for standard maybe-pass-by-reference datatypes - * - * int8 and float8 can be passed by value if Datum is wide enough. - * (For backwards-compatibility reasons, we allow pass-by-ref to be chosen - * at compile time even if pass-by-val is possible.) - * - * Note: there is only one switch controlling the pass-by-value option for - * both int8 and float8; this is to avoid making things unduly complicated - * for the timestamp types, which might have either representation. - *------------------------------------------------------------------------- - */ - -#ifndef USE_FLOAT8_BYVAL /* controls int8 too */ - -Datum -Int64GetDatum(int64 X) -{ - int64 *retval = (int64 *) palloc(sizeof(int64)); - - *retval = X; - return PointerGetDatum(retval); -} - -Datum -Float8GetDatum(float8 X) -{ - float8 *retval = (float8 *) palloc(sizeof(float8)); - - *retval = X; - return PointerGetDatum(retval); -} -#endif /* USE_FLOAT8_BYVAL */ - - /*------------------------------------------------------------------------- * Support routines for toastable datatypes *------------------------------------------------------------------------- diff --git a/src/backend/utils/hash/dynahash.c b/src/backend/utils/hash/dynahash.c index 3f25929f2d811..1aeee5be42acd 100644 --- a/src/backend/utils/hash/dynahash.c +++ b/src/backend/utils/hash/dynahash.c @@ -22,10 +22,11 @@ * lookup key's hash value as a partition number --- this will work because * of the way calc_bucket() maps hash values to bucket numbers. * - * For hash tables in shared memory, the memory allocator function should - * match malloc's semantics of returning NULL on failure. For hash tables - * in local memory, we typically use palloc() which will throw error on - * failure. The code in this file has to cope with both cases. + * The memory allocator function should match malloc's semantics of returning + * NULL on failure. (This is essential for hash tables in shared memory. + * For hash tables in local memory, we used to use palloc() which will throw + * error on failure; but we no longer do, so it's untested whether this + * module will still cope with that behavior.) * * dynahash.c provides support for these types of lookup keys: * @@ -79,9 +80,8 @@ * are not implemented; otherwise functionality is identical. * * Compilation controls: - * HASH_DEBUG controls some informative traces, mainly for debugging. - * HASH_STATISTICS causes HashAccesses and HashCollisions to be maintained; - * when combined with HASH_DEBUG, these are displayed by hdestroy(). + * HASH_STATISTICS causes some usage statistics to be maintained, which can be + * logged by calling hash_stats(). * * Problems & fixes to ejp@ausmelb.oz. WARNING: relies on pre-processor * concatenation property, in probably unnecessary code 'optimization'. @@ -98,6 +98,7 @@ #include "access/xact.h" #include "common/hashfn.h" +#include "lib/ilist.h" #include "port/pg_bitutils.h" #include "storage/shmem.h" #include "storage/spin.h" @@ -153,7 +154,7 @@ typedef HASHBUCKET *HASHSEGMENT; typedef struct { slock_t mutex; /* spinlock for this freelist */ - long nentries; /* number of entries in associated buckets */ + int64 nentries; /* number of entries in associated buckets */ HASHELEMENT *freeList; /* chain of free elements */ } FreeListData; @@ -181,8 +182,8 @@ struct HASHHDR /* These fields can change, but not in a partitioned table */ /* Also, dsize can't change in a shared table, even if unpartitioned */ - long dsize; /* directory size */ - long nsegs; /* number of allocated segments (<= dsize) */ + int64 dsize; /* directory size */ + int64 nsegs; /* number of allocated segments (<= dsize) */ uint32 max_bucket; /* ID of maximum bucket in use */ uint32 high_mask; /* mask to modulo into entire table */ uint32 low_mask; /* mask to modulo into lower half of table */ @@ -190,11 +191,12 @@ struct HASHHDR /* These fields are fixed at hashtable creation */ Size keysize; /* hash key length in bytes */ Size entrysize; /* total user element size in bytes */ - long num_partitions; /* # partitions (must be power of 2), or 0 */ - long max_dsize; /* 'dsize' limit if directory is fixed size */ - long ssize; /* segment size --- must be power of 2 */ + int64 num_partitions; /* # partitions (must be power of 2), or 0 */ + int64 max_dsize; /* 'dsize' limit if directory is fixed size */ + int64 ssize; /* segment size --- must be power of 2 */ int sshift; /* segment shift = log2(ssize) */ int nelem_alloc; /* number of entries to allocate at once */ + bool isfixed; /* if true, don't enlarge */ #ifdef HASH_STATISTICS @@ -202,8 +204,9 @@ struct HASHHDR * Count statistics here. NB: stats code doesn't bother with mutex, so * counts could be corrupted a bit in a partitioned table. */ - long accesses; - long collisions; + uint64 accesses; + uint64 collisions; + uint64 expansions; #endif }; @@ -227,15 +230,24 @@ struct HTAB MemoryContext hcxt; /* memory context if default allocator used */ char *tabname; /* table name (for error messages) */ bool isshared; /* true if table is in shared memory */ - bool isfixed; /* if true, don't enlarge */ /* freezing a shared table isn't allowed, so we can keep state here */ bool frozen; /* true = no more inserts allowed */ /* We keep local copies of these fixed values to reduce contention */ Size keysize; /* hash key length in bytes */ - long ssize; /* segment size --- must be power of 2 */ + int64 ssize; /* segment size --- must be power of 2 */ int sshift; /* segment shift = log2(ssize) */ + + /* + * In a USE_VALGRIND build, non-shared hashtables keep an slist chain of + * all the element blocks they have allocated. This pacifies Valgrind, + * which would otherwise often claim that the element blocks are "possibly + * lost" for lack of any non-interior pointers to their starts. + */ +#ifdef USE_VALGRIND + slist_head element_blocks; +#endif }; /* @@ -254,12 +266,6 @@ struct HTAB */ #define MOD(x,y) ((x) & ((y)-1)) -#ifdef HASH_STATISTICS -static long hash_accesses, - hash_collisions, - hash_expansions; -#endif - /* * Private function prototypes */ @@ -271,12 +277,12 @@ static bool expand_table(HTAB *hashp); static HASHBUCKET get_hash_entry(HTAB *hashp, int freelist_idx); static void hdefault(HTAB *hashp); static int choose_nelem_alloc(Size entrysize); -static bool init_htab(HTAB *hashp, long nelem); +static bool init_htab(HTAB *hashp, int64 nelem); pg_noreturn static void hash_corrupted(HTAB *hashp); static uint32 hash_initial_lookup(HTAB *hashp, uint32 hashvalue, HASHBUCKET **bucketptr); -static long next_pow2_long(long num); -static int next_pow2_int(long num); +static int64 next_pow2_int64(int64 num); +static int next_pow2_int(int64 num); static void register_seq_scan(HTAB *hashp); static void deregister_seq_scan(HTAB *hashp); static bool has_seq_scans(HTAB *hashp); @@ -349,7 +355,7 @@ string_compare(const char *key1, const char *key2, Size keysize) * large nelem will penalize hash_seq_search speed without buying much. */ HTAB * -hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags) +hash_create(const char *tabname, int64 nelem, const HASHCTL *info, int flags) { HTAB *hashp; HASHHDR *hctl; @@ -390,7 +396,8 @@ hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags) } /* Initialize the hash header, plus a copy of the table name */ - hashp = (HTAB *) DynaHashAlloc(sizeof(HTAB) + strlen(tabname) + 1); + hashp = (HTAB *) MemoryContextAlloc(CurrentDynaHashCxt, + sizeof(HTAB) + strlen(tabname) + 1); MemSet(hashp, 0, sizeof(HTAB)); hashp->tabname = (char *) (hashp + 1); @@ -617,8 +624,10 @@ hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags) } } + /* Set isfixed if requested, but not till after we build initial entries */ if (flags & HASH_FIXED_SIZE) - hashp->isfixed = true; + hctl->isfixed = true; + return hashp; } @@ -643,8 +652,10 @@ hdefault(HTAB *hashp) hctl->ssize = DEF_SEGSIZE; hctl->sshift = DEF_SEGSIZE_SHIFT; + hctl->isfixed = false; /* can be enlarged */ + #ifdef HASH_STATISTICS - hctl->accesses = hctl->collisions = 0; + hctl->accesses = hctl->collisions = hctl->expansions = 0; #endif } @@ -686,7 +697,7 @@ choose_nelem_alloc(Size entrysize) * arrays */ static bool -init_htab(HTAB *hashp, long nelem) +init_htab(HTAB *hashp, int64 nelem) { HASHHDR *hctl = hashp->hctl; HASHSEGMENT *segp; @@ -758,17 +769,6 @@ init_htab(HTAB *hashp, long nelem) /* Choose number of entries to allocate at a time */ hctl->nelem_alloc = choose_nelem_alloc(hctl->entrysize); -#ifdef HASH_DEBUG - fprintf(stderr, "init_htab:\n%s%p\n%s%ld\n%s%ld\n%s%d\n%s%ld\n%s%u\n%s%x\n%s%x\n%s%ld\n", - "TABLE POINTER ", hashp, - "DIRECTORY SIZE ", hctl->dsize, - "SEGMENT SIZE ", hctl->ssize, - "SEGMENT SHIFT ", hctl->sshift, - "MAX BUCKET ", hctl->max_bucket, - "HIGH MASK ", hctl->high_mask, - "LOW MASK ", hctl->low_mask, - "NSEGS ", hctl->nsegs); -#endif return true; } @@ -780,10 +780,10 @@ init_htab(HTAB *hashp, long nelem) * NB: assumes that all hash structure parameters have default values! */ Size -hash_estimate_size(long num_entries, Size entrysize) +hash_estimate_size(int64 num_entries, Size entrysize) { Size size; - long nBuckets, + int64 nBuckets, nSegments, nDirEntries, nElementAllocs, @@ -791,9 +791,9 @@ hash_estimate_size(long num_entries, Size entrysize) elementAllocCnt; /* estimate number of buckets wanted */ - nBuckets = next_pow2_long(num_entries); + nBuckets = next_pow2_int64(num_entries); /* # of segments needed for nBuckets */ - nSegments = next_pow2_long((nBuckets - 1) / DEF_SEGSIZE + 1); + nSegments = next_pow2_int64((nBuckets - 1) / DEF_SEGSIZE + 1); /* directory entries */ nDirEntries = DEF_DIRSIZE; while (nDirEntries < nSegments) @@ -826,17 +826,17 @@ hash_estimate_size(long num_entries, Size entrysize) * * XXX this had better agree with the behavior of init_htab()... */ -long -hash_select_dirsize(long num_entries) +int64 +hash_select_dirsize(int64 num_entries) { - long nBuckets, + int64 nBuckets, nSegments, nDirEntries; /* estimate number of buckets wanted */ - nBuckets = next_pow2_long(num_entries); + nBuckets = next_pow2_int64(num_entries); /* # of segments needed for nBuckets */ - nSegments = next_pow2_long((nBuckets - 1) / DEF_SEGSIZE + 1); + nSegments = next_pow2_int64((nBuckets - 1) / DEF_SEGSIZE + 1); /* directory entries */ nDirEntries = DEF_DIRSIZE; while (nDirEntries < nSegments) @@ -871,7 +871,7 @@ hash_destroy(HTAB *hashp) /* so this hashtable must have its own context */ Assert(hashp->hcxt != NULL); - hash_stats("destroy", hashp); + hash_stats(__func__, hashp); /* * Free everything by destroying the hash table's memory context. @@ -881,19 +881,16 @@ hash_destroy(HTAB *hashp) } void -hash_stats(const char *where, HTAB *hashp) +hash_stats(const char *caller, HTAB *hashp) { #ifdef HASH_STATISTICS - fprintf(stderr, "%s: this HTAB -- accesses %ld collisions %ld\n", - where, hashp->hctl->accesses, hashp->hctl->collisions); - - fprintf(stderr, "hash_stats: entries %ld keysize %ld maxp %u segmentcount %ld\n", - hash_get_num_entries(hashp), (long) hashp->hctl->keysize, - hashp->hctl->max_bucket, hashp->hctl->nsegs); - fprintf(stderr, "%s: total accesses %ld total collisions %ld\n", - where, hash_accesses, hash_collisions); - fprintf(stderr, "hash_stats: total expansions %ld\n", - hash_expansions); + HASHHDR *hctl = hashp->hctl; + + elog(DEBUG4, + "hash_stats: Caller: %s Table Name: \"%s\" Accesses: " UINT64_FORMAT " Collisions: " UINT64_FORMAT " Expansions: " UINT64_FORMAT " Entries: " INT64_FORMAT " Key Size: %zu Max Bucket: %u Segment Count: " INT64_FORMAT, + caller != NULL ? caller : "(unknown)", hashp->tabname, hctl->accesses, + hctl->collisions, hctl->expansions, hash_get_num_entries(hashp), + hctl->keysize, hctl->max_bucket, hctl->nsegs); #endif } @@ -979,7 +976,6 @@ hash_search_with_hash_value(HTAB *hashp, HashCompareFunc match; #ifdef HASH_STATISTICS - hash_accesses++; hctl->accesses++; #endif @@ -997,7 +993,7 @@ hash_search_with_hash_value(HTAB *hashp, * Can't split if running in partitioned mode, nor if frozen, nor if * table is the subject of any active hash_seq_search scans. */ - if (hctl->freeList[0].nentries > (long) hctl->max_bucket && + if (hctl->freeList[0].nentries > (int64) hctl->max_bucket && !IS_PARTITIONED(hctl) && !hashp->frozen && !has_seq_scans(hashp)) (void) expand_table(hashp); @@ -1023,7 +1019,6 @@ hash_search_with_hash_value(HTAB *hashp, prevBucketPtr = &(currBucket->link); currBucket = *prevBucketPtr; #ifdef HASH_STATISTICS - hash_collisions++; hctl->collisions++; #endif } @@ -1157,7 +1152,8 @@ hash_update_hash_key(HTAB *hashp, HashCompareFunc match; #ifdef HASH_STATISTICS - hash_accesses++; + HASHHDR *hctl = hashp->hctl; + hctl->accesses++; #endif @@ -1211,7 +1207,6 @@ hash_update_hash_key(HTAB *hashp, prevBucketPtr = &(currBucket->link); currBucket = *prevBucketPtr; #ifdef HASH_STATISTICS - hash_collisions++; hctl->collisions++; #endif } @@ -1337,11 +1332,11 @@ get_hash_entry(HTAB *hashp, int freelist_idx) /* * hash_get_num_entries -- get the number of entries in a hashtable */ -long +int64 hash_get_num_entries(HTAB *hashp) { int i; - long sum = hashp->hctl->freeList[0].nentries; + int64 sum = hashp->hctl->freeList[0].nentries; /* * We currently don't bother with acquiring the mutexes; it's only @@ -1422,9 +1417,9 @@ hash_seq_search(HASH_SEQ_STATUS *status) HTAB *hashp; HASHHDR *hctl; uint32 max_bucket; - long ssize; - long segment_num; - long segment_ndx; + int64 ssize; + int64 segment_num; + int64 segment_ndx; HASHSEGMENT segp; uint32 curBucket; HASHELEMENT *curElem; @@ -1553,11 +1548,11 @@ expand_table(HTAB *hashp) HASHHDR *hctl = hashp->hctl; HASHSEGMENT old_seg, new_seg; - long old_bucket, + int64 old_bucket, new_bucket; - long new_segnum, + int64 new_segnum, new_segndx; - long old_segnum, + int64 old_segnum, old_segndx; HASHBUCKET *oldlink, *newlink; @@ -1567,7 +1562,7 @@ expand_table(HTAB *hashp) Assert(!IS_PARTITIONED(hctl)); #ifdef HASH_STATISTICS - hash_expansions++; + hctl->expansions++; #endif new_bucket = hctl->max_bucket + 1; @@ -1625,7 +1620,7 @@ expand_table(HTAB *hashp) currElement = nextElement) { nextElement = currElement->link; - if ((long) calc_bucket(hctl, currElement->hashvalue) == old_bucket) + if ((int64) calc_bucket(hctl, currElement->hashvalue) == old_bucket) { *oldlink = currElement; oldlink = &currElement->link; @@ -1649,9 +1644,9 @@ dir_realloc(HTAB *hashp) { HASHSEGMENT *p; HASHSEGMENT *old_p; - long new_dsize; - long old_dirsize; - long new_dirsize; + int64 new_dsize; + int64 old_dirsize; + int64 new_dirsize; if (hashp->hctl->max_dsize != NO_MAX_DSIZE) return false; @@ -1707,23 +1702,51 @@ element_alloc(HTAB *hashp, int nelem, int freelist_idx) { HASHHDR *hctl = hashp->hctl; Size elementSize; + Size requestSize; + char *allocedBlock; HASHELEMENT *firstElement; HASHELEMENT *tmpElement; HASHELEMENT *prevElement; int i; - if (hashp->isfixed) + if (hctl->isfixed) return false; /* Each element has a HASHELEMENT header plus user data. */ elementSize = MAXALIGN(sizeof(HASHELEMENT)) + MAXALIGN(hctl->entrysize); + requestSize = nelem * elementSize; + + /* Add space for slist_node list link if we need one. */ +#ifdef USE_VALGRIND + if (!hashp->isshared) + requestSize += MAXALIGN(sizeof(slist_node)); +#endif + + /* Allocate the memory. */ CurrentDynaHashCxt = hashp->hcxt; - firstElement = (HASHELEMENT *) hashp->alloc(nelem * elementSize); + allocedBlock = hashp->alloc(requestSize); - if (!firstElement) + if (!allocedBlock) return false; + /* + * If USE_VALGRIND, each allocated block of elements of a non-shared + * hashtable is chained into a list, so that Valgrind won't think it's + * been leaked. + */ +#ifdef USE_VALGRIND + if (hashp->isshared) + firstElement = (HASHELEMENT *) allocedBlock; + else + { + slist_push_head(&hashp->element_blocks, (slist_node *) allocedBlock); + firstElement = (HASHELEMENT *) (allocedBlock + MAXALIGN(sizeof(slist_node))); + } +#else + firstElement = (HASHELEMENT *) allocedBlock; +#endif + /* prepare to link all the new entries into the freelist */ prevElement = NULL; tmpElement = firstElement; @@ -1757,8 +1780,8 @@ hash_initial_lookup(HTAB *hashp, uint32 hashvalue, HASHBUCKET **bucketptr) { HASHHDR *hctl = hashp->hctl; HASHSEGMENT segp; - long segment_num; - long segment_ndx; + int64 segment_num; + int64 segment_ndx; uint32 bucket; bucket = calc_bucket(hctl, hashvalue); @@ -1791,25 +1814,21 @@ hash_corrupted(HTAB *hashp) /* calculate ceil(log base 2) of num */ int -my_log2(long num) +my_log2(int64 num) { /* * guard against too-large input, which would be invalid for * pg_ceil_log2_*() */ - if (num > LONG_MAX / 2) - num = LONG_MAX / 2; + if (num > PG_INT64_MAX / 2) + num = PG_INT64_MAX / 2; -#if SIZEOF_LONG < 8 - return pg_ceil_log2_32(num); -#else return pg_ceil_log2_64(num); -#endif } -/* calculate first power of 2 >= num, bounded to what will fit in a long */ -static long -next_pow2_long(long num) +/* calculate first power of 2 >= num, bounded to what will fit in a int64 */ +static int64 +next_pow2_int64(int64 num) { /* my_log2's internal range check is sufficient */ return 1L << my_log2(num); @@ -1817,7 +1836,7 @@ next_pow2_long(long num) /* calculate first power of 2 >= num, bounded to what will fit in an int */ static int -next_pow2_int(long num) +next_pow2_int(int64 num) { if (num > INT_MAX / 2) num = INT_MAX / 2; diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c index b844f9fdaef54..d31cb45a0588a 100644 --- a/src/backend/utils/init/globals.c +++ b/src/backend/utils/init/globals.c @@ -24,6 +24,7 @@ #include "miscadmin.h" #include "postmaster/postmaster.h" #include "storage/procnumber.h" +#include "storage/procsignal.h" ProtocolVersion FrontendProtocol; @@ -48,8 +49,8 @@ pg_time_t MyStartTime; TimestampTz MyStartTimestamp; struct ClientSocket *MyClientSocket; struct Port *MyProcPort; -bool MyCancelKeyValid = false; -int32 MyCancelKey = 0; +uint8 MyCancelKey[MAX_CANCEL_KEY_LENGTH]; +int MyCancelKeyLength = 0; int MyPMChildSlot; /* diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 43b4dbccc3de6..545d1e90fbd41 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -1099,7 +1099,8 @@ EstimateClientConnectionInfoSpace(void) * Serialize MyClientConnectionInfo for use by parallel workers. */ void -SerializeClientConnectionInfo(Size maxsize, char *start_address) +SerializeClientConnectionInfo(Size maxsize PG_USED_FOR_ASSERTS_ONLY, + char *start_address) { SerializedClientConnectionInfo serialized = {0}; @@ -1183,7 +1184,6 @@ UnlinkLockFiles(int status, Datum arg) /* Should we complain if the unlink fails? */ } /* Since we're about to exit, no need to reclaim storage */ - lock_files = NIL; /* * Lock file removal should always be the last externally visible action diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 7958ea11b7354..641e535a73c7c 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -417,12 +417,11 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect datum = SysCacheGetAttrNotNull(DATABASEOID, tup, Anum_pg_database_datctype); ctype = TextDatumGetCString(datum); - if (pg_perm_setlocale(LC_COLLATE, collate) == NULL) - ereport(FATAL, - (errmsg("database locale is incompatible with operating system"), - errdetail("The database was initialized with LC_COLLATE \"%s\", " - " which is not recognized by setlocale().", collate), - errhint("Recreate the database with another locale or install the missing locale."))); + /* + * Historcally, we set LC_COLLATE from datcollate, as well. That's no + * longer necessary because all collation behavior is handled through + * pg_locale_t. + */ if (pg_perm_setlocale(LC_CTYPE, ctype) == NULL) ereport(FATAL, @@ -575,13 +574,6 @@ InitializeMaxBackends(void) * * This must be called after modules have had the chance to alter GUCs in * shared_preload_libraries and before shared memory size is determined. - * - * The default max_locks_per_xact=64 means 4 groups by default. - * - * We allow anything between 1 and 1024 groups, with the usual power-of-2 - * logic. The 1 is the "old" size with only 16 slots, 1024 is an arbitrary - * limit (matching max_locks_per_xact = 16k). Values over 1024 are unlikely - * to be beneficial - there are bottlenecks we'll hit way before that. */ void InitializeFastPathLocks(void) @@ -589,19 +581,22 @@ InitializeFastPathLocks(void) /* Should be initialized only once. */ Assert(FastPathLockGroupsPerBackend == 0); - /* we need at least one group */ - FastPathLockGroupsPerBackend = 1; - - while (FastPathLockGroupsPerBackend < FP_LOCK_GROUPS_PER_BACKEND_MAX) - { - /* stop once we exceed max_locks_per_xact */ - if (FastPathLockSlotsPerBackend() >= max_locks_per_xact) - break; - - FastPathLockGroupsPerBackend *= 2; - } + /* + * Based on the max_locks_per_transaction GUC, as that's a good indicator + * of the expected number of locks, figure out the value for + * FastPathLockGroupsPerBackend. This must be a power-of-two. We cap the + * value at FP_LOCK_GROUPS_PER_BACKEND_MAX and insist the value is at + * least 1. + * + * The default max_locks_per_transaction = 64 means 4 groups by default. + */ + FastPathLockGroupsPerBackend = + Max(Min(pg_nextpower2_32(max_locks_per_xact) / FP_LOCK_SLOTS_PER_GROUP, + FP_LOCK_GROUPS_PER_BACKEND_MAX), 1); - Assert(FastPathLockGroupsPerBackend <= FP_LOCK_GROUPS_PER_BACKEND_MAX); + /* Validate we did get a power-of-two */ + Assert(FastPathLockGroupsPerBackend == + pg_nextpower2_32(FastPathLockGroupsPerBackend)); } /* @@ -744,7 +739,7 @@ InitPostgres(const char *in_dbname, Oid dboid, if (!bootstrap) { pgstat_bestart_initial(); - INJECTION_POINT("init-pre-auth"); + INJECTION_POINT("init-pre-auth", NULL); } /* @@ -753,7 +748,7 @@ InitPostgres(const char *in_dbname, Oid dboid, */ SharedInvalBackendInit(false); - ProcSignalInit(MyCancelKeyValid, MyCancelKey); + ProcSignalInit(MyCancelKey, MyCancelKeyLength); /* * Also set up timeout handlers needed for backend operation. We need diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index 885dc11d51d46..886ecbad87183 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -39,6 +39,7 @@ #include "mb/pg_wchar.h" #include "utils/fmgrprotos.h" #include "utils/memutils.h" +#include "utils/relcache.h" #include "varatt.h" /* @@ -310,7 +311,7 @@ InitializeClientEncoding(void) { Oid utf8_to_server_proc; - Assert(IsTransactionState()); + AssertCouldGetRelation(); utf8_to_server_proc = FindDefaultConversionProc(PG_UTF8, current_server_encoding); @@ -1087,7 +1088,7 @@ pg_mbcliplen(const char *mbstr, int len, int limit) } /* - * pg_mbcliplen with specified encoding + * pg_mbcliplen with specified encoding; string must be valid in encoding */ int pg_encoding_mbcliplen(int encoding, const char *mbstr, @@ -1692,12 +1693,12 @@ check_encoding_conversion_args(int src_encoding, * report_invalid_encoding: complain about invalid multibyte character * * note: len is remaining length of string, not length of character; - * len must be greater than zero, as we always examine the first byte. + * len must be greater than zero (or we'd neglect initializing "buf"). */ void report_invalid_encoding(int encoding, const char *mbstr, int len) { - int l = pg_encoding_mblen(encoding, mbstr); + int l = pg_encoding_mblen_or_incomplete(encoding, mbstr, len); char buf[8 * 5 + 1]; char *p = buf; int j, @@ -1724,18 +1725,26 @@ report_invalid_encoding(int encoding, const char *mbstr, int len) * report_untranslatable_char: complain about untranslatable character * * note: len is remaining length of string, not length of character; - * len must be greater than zero, as we always examine the first byte. + * len must be greater than zero (or we'd neglect initializing "buf"). */ void report_untranslatable_char(int src_encoding, int dest_encoding, const char *mbstr, int len) { - int l = pg_encoding_mblen(src_encoding, mbstr); + int l; char buf[8 * 5 + 1]; char *p = buf; int j, jlimit; + /* + * We probably could use plain pg_encoding_mblen(), because + * gb18030_to_utf8() verifies before it converts. All conversions should. + * For src_encoding!=GB18030, len>0 meets pg_encoding_mblen() needs. Even + * so, be defensive, since a buggy conversion might pass invalid data. + * This is not a performance-critical path. + */ + l = pg_encoding_mblen_or_incomplete(src_encoding, mbstr, len); jlimit = Min(l, len); jlimit = Min(jlimit, 8); /* prevent buffer overrun */ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 667df448732f2..46fdefebe353e 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -249,6 +249,7 @@ static void reapply_stacked_values(struct config_generic *variable, const char *curvalue, GucContext curscontext, GucSource cursource, Oid cursrole); +static void free_placeholder(struct config_string *pHolder); static bool validate_option_array_item(const char *name, const char *value, bool skipIfNoPermissions); static void write_auto_conf_file(int fd, const char *filename, ConfigVariable *head); @@ -1802,7 +1803,7 @@ SelectConfigFiles(const char *userDoption, const char *progname) configdir); if (errno == ENOENT) write_stderr("Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n"); - return false; + goto fail; } /* @@ -1829,7 +1830,7 @@ SelectConfigFiles(const char *userDoption, const char *progname) "You must specify the --config-file or -D invocation " "option or set the PGDATA environment variable.\n", progname); - return false; + goto fail; } /* @@ -1850,8 +1851,7 @@ SelectConfigFiles(const char *userDoption, const char *progname) { write_stderr("%s: could not access the server configuration file \"%s\": %m\n", progname, ConfigFileName); - free(configdir); - return false; + goto fail; } /* @@ -1881,7 +1881,7 @@ SelectConfigFiles(const char *userDoption, const char *progname) "or by the -D invocation option, or by the " "PGDATA environment variable.\n", progname, ConfigFileName); - return false; + goto fail; } /* @@ -1933,7 +1933,7 @@ SelectConfigFiles(const char *userDoption, const char *progname) "or by the -D invocation option, or by the " "PGDATA environment variable.\n", progname, ConfigFileName); - return false; + goto fail; } SetConfigOption("hba_file", fname, PGC_POSTMASTER, PGC_S_OVERRIDE); @@ -1964,7 +1964,7 @@ SelectConfigFiles(const char *userDoption, const char *progname) "or by the -D invocation option, or by the " "PGDATA environment variable.\n", progname, ConfigFileName); - return false; + goto fail; } SetConfigOption("ident_file", fname, PGC_POSTMASTER, PGC_S_OVERRIDE); @@ -1976,6 +1976,11 @@ SelectConfigFiles(const char *userDoption, const char *progname) free(configdir); return true; + +fail: + free(configdir); + + return false; } /* @@ -4722,8 +4727,13 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt) * the config file cannot cause postmaster start to fail, so we * don't have to be too tense about possibly installing a bad * value.) + * + * As an exception, we skip this check if this is a RESET command + * for an unknown custom GUC, else there'd be no way for users to + * remove such settings with reserved prefixes. */ - (void) assignable_custom_variable_name(name, false, ERROR); + if (value || !valid_custom_variable_name(name)) + (void) assignable_custom_variable_name(name, false, ERROR); } /* @@ -5018,16 +5028,8 @@ define_custom_variable(struct config_generic *variable) set_config_sourcefile(name, pHolder->gen.sourcefile, pHolder->gen.sourceline); - /* - * Free up as much as we conveniently can of the placeholder structure. - * (This neglects any stack items, so it's possible for some memory to be - * leaked. Since this can only happen once per session per variable, it - * doesn't seem worth spending much code on.) - */ - set_string_field(pHolder, pHolder->variable, NULL); - set_string_field(pHolder, &pHolder->reset_val, NULL); - - guc_free(pHolder); + /* Now we can free the no-longer-referenced placeholder variable */ + free_placeholder(pHolder); } /* @@ -5126,6 +5128,25 @@ reapply_stacked_values(struct config_generic *variable, } } +/* + * Free up a no-longer-referenced placeholder GUC variable. + * + * This neglects any stack items, so it's possible for some memory to be + * leaked. Since this can only happen once per session per variable, it + * doesn't seem worth spending much code on. + */ +static void +free_placeholder(struct config_string *pHolder) +{ + /* Placeholders are always STRING type, so free their values */ + Assert(pHolder->gen.vartype == PGC_STRING); + set_string_field(pHolder, pHolder->variable, NULL); + set_string_field(pHolder, &pHolder->reset_val, NULL); + + guc_free(unconstify(char *, pHolder->gen.name)); + guc_free(pHolder); +} + /* * Functions for extensions to call to define their custom GUC variables. */ @@ -5286,9 +5307,7 @@ MarkGUCPrefixReserved(const char *className) /* * Check for existing placeholders. We must actually remove invalid - * placeholders, else future parallel worker startups will fail. (We - * don't bother trying to free associated memory, since this shouldn't - * happen often.) + * placeholders, else future parallel worker startups will fail. */ hash_seq_init(&status, guc_hashtab); while ((hentry = (GUCHashEntry *) hash_seq_search(&status)) != NULL) @@ -5312,6 +5331,8 @@ MarkGUCPrefixReserved(const char *className) NULL); /* Remove it from any lists it's in, too */ RemoveGUCFromLists(var); + /* And free it */ + free_placeholder((struct config_string *) var); } } @@ -6711,6 +6732,7 @@ validate_option_array_item(const char *name, const char *value, { struct config_generic *gconf; + bool reset_custom; /* * There are three cases to consider: @@ -6729,16 +6751,21 @@ validate_option_array_item(const char *name, const char *value, * it's assumed to be fully validated.) * * name is not known and can't be created as a placeholder. Throw error, - * unless skipIfNoPermissions is true, in which case return false. + * unless skipIfNoPermissions or reset_custom is true. If reset_custom is + * true, this is a RESET or RESET ALL operation for an unknown custom GUC + * with a reserved prefix, in which case we want to fall through to the + * placeholder case described in the preceding paragraph (else there'd be + * no way for users to remove them). Otherwise, return false. */ - gconf = find_option(name, true, skipIfNoPermissions, ERROR); - if (!gconf) + reset_custom = (!value && valid_custom_variable_name(name)); + gconf = find_option(name, true, skipIfNoPermissions || reset_custom, ERROR); + if (!gconf && !reset_custom) { /* not known, failed to make a placeholder */ return false; } - if (gconf->flags & GUC_CUSTOM_PLACEHOLDER) + if (!gconf || gconf->flags & GUC_CUSTOM_PLACEHOLDER) { /* * We cannot do any meaningful check on the value, so only permissions diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index 4eaeca89f2c7a..f137129209f65 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -20,6 +20,9 @@ */ #include "postgres.h" +#ifdef HAVE_COPYFILE_H +#include +#endif #include #include #ifdef HAVE_SYSLOG @@ -76,6 +79,7 @@ #include "storage/aio.h" #include "storage/bufmgr.h" #include "storage/bufpage.h" +#include "storage/copydir.h" #include "storage/io_worker.h" #include "storage/large_object.h" #include "storage/pg_shmem.h" @@ -479,6 +483,14 @@ static const struct config_enum_entry wal_compression_options[] = { {NULL, 0, false} }; +static const struct config_enum_entry file_copy_method_options[] = { + {"copy", FILE_COPY_METHOD_COPY, false}, +#if defined(HAVE_COPYFILE) && defined(COPYFILE_CLONE_FORCE) || defined(HAVE_COPY_FILE_RANGE) + {"clone", FILE_COPY_METHOD_CLONE, false}, +#endif + {NULL, 0, false} +}; + /* * Options for enum values stored in other modules */ @@ -566,7 +578,7 @@ static int ssl_renegotiation_limit; */ int huge_pages = HUGE_PAGES_TRY; int huge_page_size; -static int huge_pages_status = HUGE_PAGES_UNKNOWN; +int huge_pages_status = HUGE_PAGES_UNKNOWN; /* * These variables are all dummies that don't do anything, except in some @@ -787,6 +799,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_indexscan", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of index-scan plans."), @@ -797,6 +810,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_indexonlyscan", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of index-only-scan plans."), @@ -807,6 +821,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_bitmapscan", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of bitmap-scan plans."), @@ -817,6 +832,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_tidscan", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of TID scan plans."), @@ -827,6 +843,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_sort", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of explicit sort steps."), @@ -837,6 +854,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_incremental_sort", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of incremental sort steps."), @@ -847,6 +865,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_hashagg", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of hashed aggregation plans."), @@ -857,6 +876,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_material", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of materialization."), @@ -867,6 +887,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_memoize", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of memoization."), @@ -877,6 +898,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_nestloop", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of nested-loop join plans."), @@ -887,6 +909,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_mergejoin", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of merge join plans."), @@ -897,6 +920,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_hashjoin", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of hash join plans."), @@ -907,6 +931,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_gathermerge", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of gather merge plans."), @@ -917,6 +942,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_partitionwise_join", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables partitionwise join."), @@ -927,6 +953,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"enable_partitionwise_aggregate", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables partitionwise aggregation and grouping."), @@ -937,6 +964,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"enable_parallel_append", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of parallel append plans."), @@ -947,6 +975,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_parallel_hash", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of parallel hash plans."), @@ -957,6 +986,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_partition_pruning", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables plan-time and execution-time partition pruning."), @@ -969,6 +999,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_presorted_aggregate", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's ability to produce plans that " @@ -984,6 +1015,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_async_append", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of async append plans."), @@ -994,16 +1026,18 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_self_join_elimination", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables removal of unique self-joins."), NULL, - GUC_EXPLAIN | GUC_NOT_IN_SAMPLE + GUC_EXPLAIN }, &enable_self_join_elimination, true, NULL, NULL, NULL }, + { {"enable_group_by_reordering", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables reordering of GROUP BY keys."), @@ -1014,9 +1048,10 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"enable_distinct_reordering", PGC_USERSET, QUERY_TUNING_METHOD, - gettext_noop("Enables reordering of DISTINCT pathkeys."), + gettext_noop("Enables reordering of DISTINCT keys."), NULL, GUC_EXPLAIN }, @@ -1024,6 +1059,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"geqo", PGC_USERSET, QUERY_TUNING_GEQO, gettext_noop("Enables genetic query optimization."), @@ -1035,6 +1071,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { /* * Not for general use --- used by SET SESSION AUTHORIZATION and SET @@ -1049,6 +1086,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { /* * This setting itself cannot be set by ALTER SYSTEM to avoid an @@ -1065,6 +1103,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"bonjour", PGC_POSTMASTER, CONN_AUTH_SETTINGS, gettext_noop("Enables advertising the server via Bonjour."), @@ -1074,6 +1113,7 @@ struct config_bool ConfigureNamesBool[] = false, check_bonjour, NULL, NULL }, + { {"track_commit_timestamp", PGC_POSTMASTER, REPLICATION_SENDING, gettext_noop("Collects transaction commit time."), @@ -1083,6 +1123,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"ssl", PGC_SIGHUP, CONN_AUTH_SSL, gettext_noop("Enables SSL connections."), @@ -1092,6 +1133,7 @@ struct config_bool ConfigureNamesBool[] = false, check_ssl, NULL, NULL }, + { {"ssl_passphrase_command_supports_reload", PGC_SIGHUP, CONN_AUTH_SSL, gettext_noop("Controls whether \"ssl_passphrase_command\" is called during server reload."), @@ -1101,6 +1143,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"ssl_prefer_server_ciphers", PGC_SIGHUP, CONN_AUTH_SSL, gettext_noop("Give priority to server ciphersuite order."), @@ -1110,6 +1153,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"fsync", PGC_SIGHUP, WAL_SETTINGS, gettext_noop("Forces synchronization of updates to disk."), @@ -1122,6 +1166,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"ignore_checksum_failure", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Continues processing after a checksum failure."), @@ -1137,6 +1182,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"zero_damaged_pages", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Continues processing past damaged page headers."), @@ -1151,6 +1197,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"ignore_invalid_pages", PGC_POSTMASTER, DEVELOPER_OPTIONS, gettext_noop("Continues recovery after an invalid pages failure."), @@ -1170,6 +1217,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"full_page_writes", PGC_SIGHUP, WAL_SETTINGS, gettext_noop("Writes full pages to WAL when first modified after a checkpoint."), @@ -1223,6 +1271,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"trace_connection_negotiation", PGC_POSTMASTER, DEVELOPER_OPTIONS, gettext_noop("Logs details of pre-authentication connection handshake."), @@ -1233,6 +1282,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"log_disconnections", PGC_SU_BACKEND, LOGGING_WHAT, gettext_noop("Logs end of a session, including duration."), @@ -1242,6 +1292,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"log_replication_commands", PGC_SUSET, LOGGING_WHAT, gettext_noop("Logs each replication command."), @@ -1251,6 +1302,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"debug_assertions", PGC_INTERNAL, PRESET_OPTIONS, gettext_noop("Shows whether the running server has assertion checks enabled."), @@ -1271,6 +1323,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"restart_after_crash", PGC_SIGHUP, ERROR_HANDLING_OPTIONS, gettext_noop("Reinitialize server after backend crash."), @@ -1280,6 +1333,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"remove_temp_files_after_crash", PGC_SIGHUP, DEVELOPER_OPTIONS, gettext_noop("Remove temporary files after backend crash."), @@ -1290,6 +1344,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"send_abort_for_crash", PGC_SIGHUP, DEVELOPER_OPTIONS, gettext_noop("Send SIGABRT not SIGQUIT to child processes after backend crash."), @@ -1300,6 +1355,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"send_abort_for_kill", PGC_SIGHUP, DEVELOPER_OPTIONS, gettext_noop("Send SIGABRT not SIGKILL to stuck child processes."), @@ -1320,6 +1376,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + #ifdef DEBUG_NODE_TESTS_ENABLED { {"debug_copy_parse_plan_trees", PGC_SUSET, DEVELOPER_OPTIONS, @@ -1338,6 +1395,7 @@ struct config_bool ConfigureNamesBool[] = #endif NULL, NULL, NULL }, + { {"debug_write_read_parse_plan_trees", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Set this to force all parse and plan trees to be passed through " @@ -1355,6 +1413,7 @@ struct config_bool ConfigureNamesBool[] = #endif NULL, NULL, NULL }, + { {"debug_raw_expression_coverage_test", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Set this to force all raw parse trees for DML statements to be scanned " @@ -1373,6 +1432,7 @@ struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, #endif /* DEBUG_NODE_TESTS_ENABLED */ + { {"debug_print_parse", PGC_USERSET, LOGGING_WHAT, gettext_noop("Logs each query's parse tree."), @@ -1382,6 +1442,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"debug_print_rewritten", PGC_USERSET, LOGGING_WHAT, gettext_noop("Logs each query's rewritten parse tree."), @@ -1391,6 +1452,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"debug_print_plan", PGC_USERSET, LOGGING_WHAT, gettext_noop("Logs each query's execution plan."), @@ -1400,6 +1462,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"debug_pretty_print", PGC_USERSET, LOGGING_WHAT, gettext_noop("Indents parse and plan tree displays."), @@ -1409,6 +1472,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"log_parser_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes parser performance statistics to the server log."), @@ -1418,6 +1482,7 @@ struct config_bool ConfigureNamesBool[] = false, check_stage_log_stats, NULL, NULL }, + { {"log_planner_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes planner performance statistics to the server log."), @@ -1427,6 +1492,7 @@ struct config_bool ConfigureNamesBool[] = false, check_stage_log_stats, NULL, NULL }, + { {"log_executor_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes executor performance statistics to the server log."), @@ -1436,6 +1502,7 @@ struct config_bool ConfigureNamesBool[] = false, check_stage_log_stats, NULL, NULL }, + { {"log_statement_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes cumulative performance statistics to the server log."), @@ -1445,6 +1512,7 @@ struct config_bool ConfigureNamesBool[] = false, check_log_stats, NULL, NULL }, + #ifdef BTREE_BUILD_STATS { {"log_btree_build_stats", PGC_SUSET, DEVELOPER_OPTIONS, @@ -1469,6 +1537,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"track_counts", PGC_SUSET, STATS_CUMULATIVE, gettext_noop("Collects statistics on database activity."), @@ -1478,6 +1547,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"track_cost_delay_timing", PGC_SUSET, STATS_CUMULATIVE, gettext_noop("Collects timing statistics for cost-based vacuum delay."), @@ -1487,6 +1557,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"track_io_timing", PGC_SUSET, STATS_CUMULATIVE, gettext_noop("Collects timing statistics for database I/O activity."), @@ -1496,6 +1567,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"track_wal_io_timing", PGC_SUSET, STATS_CUMULATIVE, gettext_noop("Collects timing statistics for WAL I/O activity."), @@ -1548,6 +1620,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"trace_userlocks", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Emits information about user lock usage."), @@ -1558,6 +1631,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"trace_lwlocks", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Emits information about lightweight lock usage."), @@ -1568,6 +1642,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"debug_deadlocks", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Dumps information about all current locks when a deadlock timeout occurs."), @@ -1589,15 +1664,17 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { - {"log_lock_failure", PGC_SUSET, LOGGING_WHAT, + {"log_lock_failures", PGC_SUSET, LOGGING_WHAT, gettext_noop("Logs lock failures."), NULL }, - &log_lock_failure, + &log_lock_failures, false, NULL, NULL, NULL }, + { {"log_recovery_conflict_waits", PGC_SIGHUP, LOGGING_WHAT, gettext_noop("Logs standby recovery conflict waits."), @@ -1607,6 +1684,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"log_hostname", PGC_SIGHUP, LOGGING_WHAT, gettext_noop("Logs the host name in the connection logs."), @@ -1619,6 +1697,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"transform_null_equals", PGC_USERSET, COMPAT_OPTIONS_OTHER, gettext_noop("Treats \"expr=NULL\" as \"expr IS NULL\"."), @@ -1632,6 +1711,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"default_transaction_read_only", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the default read-only status of new transactions."), @@ -1642,6 +1722,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"transaction_read_only", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the current transaction's read-only status."), @@ -1652,6 +1733,7 @@ struct config_bool ConfigureNamesBool[] = false, check_transaction_read_only, NULL, NULL }, + { {"default_transaction_deferrable", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the default deferrable status of new transactions."), @@ -1661,6 +1743,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"transaction_deferrable", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures."), @@ -1671,6 +1754,7 @@ struct config_bool ConfigureNamesBool[] = false, check_transaction_deferrable, NULL, NULL }, + { {"row_security", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Enables row security."), @@ -1680,6 +1764,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE."), @@ -1689,6 +1774,7 @@ struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { {"array_nulls", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, gettext_noop("Enables input of NULL elements in arrays."), @@ -1716,6 +1802,7 @@ struct config_bool ConfigureNamesBool[] = false, check_default_with_oids, NULL, NULL }, + { {"logging_collector", PGC_POSTMASTER, LOGGING_WHERE, gettext_noop("Start a subprocess to capture stderr, csvlog and/or jsonlog into log files."), @@ -1725,6 +1812,7 @@ struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { {"log_truncate_on_rotation", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Truncate existing log files of same name during log rotation."), @@ -1763,8 +1851,7 @@ struct config_bool ConfigureNamesBool[] = #ifdef DEBUG_BOUNDED_SORT /* this is undocumented because not exposed in a standard build */ { - { - "optimize_bounded_sort", PGC_USERSET, QUERY_TUNING_METHOD, + {"optimize_bounded_sort", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables bounded sorting using heap sort."), NULL, GUC_NOT_IN_SAMPLE | GUC_EXPLAIN @@ -1949,7 +2036,7 @@ struct config_bool ConfigureNamesBool[] = { {"quote_all_identifiers", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, gettext_noop("When generating SQL fragments, quote all identifiers."), - NULL, + NULL }, "e_all_identifiers, false, @@ -2079,6 +2166,7 @@ struct config_bool ConfigureNamesBool[] = { {"data_sync_retry", PGC_POSTMASTER, ERROR_HANDLING_OPTIONS, gettext_noop("Whether to continue running after a failure to sync data files."), + NULL }, &data_sync_retry, false, @@ -2088,6 +2176,7 @@ struct config_bool ConfigureNamesBool[] = { {"wal_receiver_create_temp_slot", PGC_SIGHUP, REPLICATION_STANDBY, gettext_noop("Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured."), + NULL }, &wal_receiver_create_temp_slot, false, @@ -2097,7 +2186,7 @@ struct config_bool ConfigureNamesBool[] = { {"event_triggers", PGC_SUSET, CLIENT_CONN_STATEMENT, gettext_noop("Enables event triggers."), - gettext_noop("When enabled, event triggers will fire for all applicable statements."), + gettext_noop("When enabled, event triggers will fire for all applicable statements.") }, &event_triggers, true, @@ -2107,6 +2196,7 @@ struct config_bool ConfigureNamesBool[] = { {"sync_replication_slots", PGC_SIGHUP, REPLICATION_STANDBY, gettext_noop("Enables a physical standby to synchronize logical failover replication slots from the primary server."), + NULL }, &sync_replication_slots, false, @@ -2116,6 +2206,7 @@ struct config_bool ConfigureNamesBool[] = { {"md5_password_warnings", PGC_USERSET, CONN_AUTH_AUTH, gettext_noop("Enables deprecation warnings for MD5 passwords."), + NULL }, &md5_password_warnings, true, @@ -2125,6 +2216,7 @@ struct config_bool ConfigureNamesBool[] = { {"vacuum_truncate", PGC_USERSET, VACUUM_DEFAULT, gettext_noop("Enables vacuum to truncate empty pages at the end of the table."), + NULL }, &vacuum_truncate, true, @@ -2151,6 +2243,7 @@ struct config_int ConfigureNamesInt[] = 0, 0, INT_MAX / 2, NULL, NULL, NULL }, + { {"post_auth_delay", PGC_BACKEND, DEVELOPER_OPTIONS, gettext_noop("Sets the amount of time to wait after " @@ -2162,6 +2255,7 @@ struct config_int ConfigureNamesInt[] = 0, 0, INT_MAX / 1000000, NULL, NULL, NULL }, + { {"default_statistics_target", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Sets the default statistics target."), @@ -2172,6 +2266,7 @@ struct config_int ConfigureNamesInt[] = 100, 1, MAX_STATISTICS_TARGET, NULL, NULL, NULL }, + { {"from_collapse_limit", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Sets the FROM-list size beyond which subqueries " @@ -2185,6 +2280,7 @@ struct config_int ConfigureNamesInt[] = 8, 1, INT_MAX, NULL, NULL, NULL }, + { {"join_collapse_limit", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Sets the FROM-list size beyond which JOIN " @@ -2198,6 +2294,7 @@ struct config_int ConfigureNamesInt[] = 8, 1, INT_MAX, NULL, NULL, NULL }, + { {"geqo_threshold", PGC_USERSET, QUERY_TUNING_GEQO, gettext_noop("Sets the threshold of FROM items beyond which GEQO is used."), @@ -2208,6 +2305,7 @@ struct config_int ConfigureNamesInt[] = 12, 2, INT_MAX, NULL, NULL, NULL }, + { {"geqo_effort", PGC_USERSET, QUERY_TUNING_GEQO, gettext_noop("GEQO: effort is used to set the default for other GEQO parameters."), @@ -2218,6 +2316,7 @@ struct config_int ConfigureNamesInt[] = DEFAULT_GEQO_EFFORT, MIN_GEQO_EFFORT, MAX_GEQO_EFFORT, NULL, NULL, NULL }, + { {"geqo_pool_size", PGC_USERSET, QUERY_TUNING_GEQO, gettext_noop("GEQO: number of individuals in the population."), @@ -2228,6 +2327,7 @@ struct config_int ConfigureNamesInt[] = 0, 0, INT_MAX, NULL, NULL, NULL }, + { {"geqo_generations", PGC_USERSET, QUERY_TUNING_GEQO, gettext_noop("GEQO: number of iterations of the algorithm."), @@ -2535,7 +2635,6 @@ struct config_int ConfigureNamesInt[] = NULL, NULL, show_log_file_mode }, - { {"data_directory_mode", PGC_INTERNAL, PRESET_OPTIONS, gettext_noop("Shows the mode of the data directory."), @@ -2702,6 +2801,7 @@ struct config_int ConfigureNamesInt[] = FirstNormalObjectId, 0, INT_MAX, NULL, NULL, NULL }, + { {"trace_lock_table", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Sets the OID of the table with unconditionally lock tracing."), @@ -2818,6 +2918,7 @@ struct config_int ConfigureNamesInt[] = 1600000000, 0, 2100000000, NULL, NULL, NULL }, + { {"vacuum_multixact_failsafe_age", PGC_USERSET, VACUUM_FREEZING, gettext_noop("Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage."), @@ -2904,7 +3005,7 @@ struct config_int ConfigureNamesInt[] = { {"max_notify_queue_pages", PGC_POSTMASTER, RESOURCES_DISK, gettext_noop("Sets the maximum number of allocated pages for NOTIFY / LISTEN queue."), - NULL, + NULL }, &max_notify_queue_pages, 1048576, 64, INT_MAX, @@ -2940,8 +3041,7 @@ struct config_int ConfigureNamesInt[] = GUC_UNIT_MB }, &min_wal_size_mb, - DEFAULT_MIN_WAL_SEGS * (DEFAULT_XLOG_SEG_SIZE / (1024 * 1024)), - 2, MAX_KILOBYTES, + DEFAULT_MIN_WAL_SEGS * (DEFAULT_XLOG_SEG_SIZE / (1024 * 1024)), 2, MAX_KILOBYTES, NULL, NULL, NULL }, @@ -2952,8 +3052,7 @@ struct config_int ConfigureNamesInt[] = GUC_UNIT_MB }, &max_wal_size_mb, - DEFAULT_MAX_WAL_SEGS * (DEFAULT_XLOG_SEG_SIZE / (1024 * 1024)), - 2, MAX_KILOBYTES, + DEFAULT_MAX_WAL_SEGS * (DEFAULT_XLOG_SEG_SIZE / (1024 * 1024)), 2, MAX_KILOBYTES, NULL, assign_max_wal_size, NULL }, @@ -3069,7 +3168,7 @@ struct config_int ConfigureNamesInt[] = }, &max_slot_wal_keep_size_mb, -1, -1, MAX_KILOBYTES, - check_max_slot_wal_keep_size, NULL, NULL + NULL, NULL, NULL }, { @@ -3088,11 +3187,11 @@ struct config_int ConfigureNamesInt[] = gettext_noop("Sets the duration a replication slot can remain idle before " "it is invalidated."), NULL, - GUC_UNIT_MIN + GUC_UNIT_S }, - &idle_replication_slot_timeout_mins, - 0, 0, INT_MAX / SECS_PER_MINUTE, - check_idle_replication_slot_timeout, NULL, NULL + &idle_replication_slot_timeout_secs, + 0, 0, INT_MAX, + NULL, NULL, NULL }, { @@ -3225,68 +3324,53 @@ struct config_int ConfigureNamesInt[] = }, { - {"effective_io_concurrency", - PGC_USERSET, - RESOURCES_IO, + {"effective_io_concurrency", PGC_USERSET, RESOURCES_IO, gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."), gettext_noop("0 disables simultaneous requests."), GUC_EXPLAIN }, &effective_io_concurrency, - DEFAULT_EFFECTIVE_IO_CONCURRENCY, - 0, MAX_IO_CONCURRENCY, + DEFAULT_EFFECTIVE_IO_CONCURRENCY, 0, MAX_IO_CONCURRENCY, NULL, NULL, NULL }, { - {"maintenance_io_concurrency", - PGC_USERSET, - RESOURCES_IO, + {"maintenance_io_concurrency", PGC_USERSET, RESOURCES_IO, gettext_noop("A variant of \"effective_io_concurrency\" that is used for maintenance work."), gettext_noop("0 disables simultaneous requests."), GUC_EXPLAIN }, &maintenance_io_concurrency, - DEFAULT_MAINTENANCE_IO_CONCURRENCY, - 0, MAX_IO_CONCURRENCY, - NULL, assign_maintenance_io_concurrency, - NULL + DEFAULT_MAINTENANCE_IO_CONCURRENCY, 0, MAX_IO_CONCURRENCY, + NULL, assign_maintenance_io_concurrency, NULL }, { - {"io_max_combine_limit", - PGC_POSTMASTER, - RESOURCES_IO, + {"io_max_combine_limit", PGC_POSTMASTER, RESOURCES_IO, gettext_noop("Server-wide limit that clamps io_combine_limit."), NULL, GUC_UNIT_BLOCKS }, &io_max_combine_limit, - DEFAULT_IO_COMBINE_LIMIT, - 1, MAX_IO_COMBINE_LIMIT, + DEFAULT_IO_COMBINE_LIMIT, 1, MAX_IO_COMBINE_LIMIT, NULL, assign_io_max_combine_limit, NULL }, { - {"io_combine_limit", - PGC_USERSET, - RESOURCES_IO, + {"io_combine_limit", PGC_USERSET, RESOURCES_IO, gettext_noop("Limit on the size of data reads and writes."), NULL, GUC_UNIT_BLOCKS }, - &io_combine_limit, - DEFAULT_IO_COMBINE_LIMIT, - 1, MAX_IO_COMBINE_LIMIT, + &io_combine_limit_guc, + DEFAULT_IO_COMBINE_LIMIT, 1, MAX_IO_COMBINE_LIMIT, NULL, assign_io_combine_limit, NULL }, { - {"io_max_concurrency", - PGC_POSTMASTER, - RESOURCES_IO, + {"io_max_concurrency", PGC_POSTMASTER, RESOURCES_IO, gettext_noop("Max number of IOs that one process can execute simultaneously."), - NULL, + NULL }, &io_max_concurrency, -1, -1, 1024, @@ -3294,11 +3378,9 @@ struct config_int ConfigureNamesInt[] = }, { - {"io_workers", - PGC_SIGHUP, - RESOURCES_IO, + {"io_workers", PGC_SIGHUP, RESOURCES_IO, gettext_noop("Number of IO worker processes, for io_method=worker."), - NULL, + NULL }, &io_workers, 3, 1, MAX_IO_WORKERS, @@ -3317,11 +3399,9 @@ struct config_int ConfigureNamesInt[] = }, { - {"max_worker_processes", - PGC_POSTMASTER, - RESOURCES_WORKER_PROCESSES, + {"max_worker_processes", PGC_POSTMASTER, RESOURCES_WORKER_PROCESSES, gettext_noop("Maximum number of concurrent worker processes."), - NULL, + NULL }, &max_worker_processes, 8, 0, MAX_BACKENDS, @@ -3329,11 +3409,9 @@ struct config_int ConfigureNamesInt[] = }, { - {"max_logical_replication_workers", - PGC_POSTMASTER, - REPLICATION_SUBSCRIBERS, + {"max_logical_replication_workers", PGC_POSTMASTER, REPLICATION_SUBSCRIBERS, gettext_noop("Maximum number of logical replication worker processes."), - NULL, + NULL }, &max_logical_replication_workers, 4, 0, MAX_BACKENDS, @@ -3341,11 +3419,9 @@ struct config_int ConfigureNamesInt[] = }, { - {"max_sync_workers_per_subscription", - PGC_SIGHUP, - REPLICATION_SUBSCRIBERS, + {"max_sync_workers_per_subscription", PGC_SIGHUP, REPLICATION_SUBSCRIBERS, gettext_noop("Maximum number of table synchronization workers per subscription."), - NULL, + NULL }, &max_sync_workers_per_subscription, 2, 0, MAX_BACKENDS, @@ -3353,11 +3429,9 @@ struct config_int ConfigureNamesInt[] = }, { - {"max_parallel_apply_workers_per_subscription", - PGC_SIGHUP, - REPLICATION_SUBSCRIBERS, + {"max_parallel_apply_workers_per_subscription", PGC_SIGHUP, REPLICATION_SUBSCRIBERS, gettext_noop("Maximum number of parallel apply workers per subscription."), - NULL, + NULL }, &max_parallel_apply_workers_per_subscription, 2, 0, MAX_PARALLEL_WORKER_LIMIT, @@ -3365,9 +3439,7 @@ struct config_int ConfigureNamesInt[] = }, { - {"max_active_replication_origins", - PGC_POSTMASTER, - REPLICATION_SUBSCRIBERS, + {"max_active_replication_origins", PGC_POSTMASTER, REPLICATION_SUBSCRIBERS, gettext_noop("Sets the maximum number of active replication origins."), NULL }, @@ -3485,9 +3557,7 @@ struct config_int ConfigureNamesInt[] = GUC_UNIT_BYTE | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE | GUC_RUNTIME_COMPUTED }, &wal_segment_size, - DEFAULT_XLOG_SEG_SIZE, - WalSegMinSize, - WalSegMaxSize, + DEFAULT_XLOG_SEG_SIZE, WalSegMinSize, WalSegMaxSize, check_wal_segment_size, NULL, NULL }, @@ -3498,9 +3568,7 @@ struct config_int ConfigureNamesInt[] = GUC_UNIT_MIN, }, &wal_summary_keep_time, - 10 * HOURS_PER_DAY * MINS_PER_HOUR, /* 10 days */ - 0, - INT_MAX / SECS_PER_MINUTE, + 10 * HOURS_PER_DAY * MINS_PER_HOUR /* 10 days */ , 0, INT_MAX / SECS_PER_MINUTE, NULL, NULL, NULL }, @@ -3514,6 +3582,7 @@ struct config_int ConfigureNamesInt[] = 60, 1, INT_MAX / 1000, NULL, NULL, NULL }, + { {"autovacuum_vacuum_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM, gettext_noop("Minimum number of tuple updates or deletes prior to vacuum."), @@ -3523,6 +3592,7 @@ struct config_int ConfigureNamesInt[] = 50, 0, INT_MAX, NULL, NULL, NULL }, + { {"autovacuum_vacuum_max_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM, gettext_noop("Maximum number of tuple updates or deletes prior to vacuum."), @@ -3532,6 +3602,7 @@ struct config_int ConfigureNamesInt[] = 100000000, -1, INT_MAX, NULL, NULL, NULL }, + { {"autovacuum_vacuum_insert_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM, gettext_noop("Minimum number of tuple inserts prior to vacuum."), @@ -3541,6 +3612,7 @@ struct config_int ConfigureNamesInt[] = 1000, -1, INT_MAX, NULL, NULL, NULL }, + { {"autovacuum_analyze_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM, gettext_noop("Minimum number of tuple inserts, updates, or deletes prior to analyze."), @@ -3550,6 +3622,7 @@ struct config_int ConfigureNamesInt[] = 50, 0, INT_MAX, NULL, NULL, NULL }, + { /* see varsup.c for why this is PGC_POSTMASTER not PGC_SIGHUP */ {"autovacuum_freeze_max_age", PGC_POSTMASTER, VACUUM_AUTOVACUUM, @@ -3562,6 +3635,7 @@ struct config_int ConfigureNamesInt[] = 200000000, 100000, 2000000000, NULL, NULL, NULL }, + { /* see multixact.c for why this is PGC_POSTMASTER not PGC_SIGHUP */ {"autovacuum_multixact_freeze_max_age", PGC_POSTMASTER, VACUUM_AUTOVACUUM, @@ -3572,6 +3646,7 @@ struct config_int ConfigureNamesInt[] = 400000000, 10000, 2000000000, NULL, NULL, NULL }, + { /* see max_connections */ {"autovacuum_worker_slots", PGC_POSTMASTER, VACUUM_AUTOVACUUM, @@ -3582,6 +3657,7 @@ struct config_int ConfigureNamesInt[] = 16, 1, MAX_BACKENDS, NULL, NULL, NULL }, + { {"autovacuum_max_workers", PGC_SIGHUP, VACUUM_AUTOVACUUM, gettext_noop("Sets the maximum number of simultaneously running autovacuum worker processes."), @@ -3661,7 +3737,7 @@ struct config_int ConfigureNamesInt[] = {"ssl_renegotiation_limit", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS, gettext_noop("SSL renegotiation is no longer supported; this can only be 0."), NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE, + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE }, &ssl_renegotiation_limit, 0, 0, 0, @@ -3683,7 +3759,7 @@ struct config_int ConfigureNamesInt[] = { {"gin_fuzzy_search_limit", PGC_USERSET, CLIENT_CONN_OTHER, gettext_noop("Sets the maximum allowed result for exact search by GIN."), - gettext_noop("0 means no limit."), + gettext_noop("0 means no limit.") }, &GinFuzzySearchLimit, 0, 0, INT_MAX, @@ -3695,7 +3771,7 @@ struct config_int ConfigureNamesInt[] = gettext_noop("Sets the planner's assumption about the total size of the data caches."), gettext_noop("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."), - GUC_UNIT_BLOCKS | GUC_EXPLAIN, + GUC_UNIT_BLOCKS | GUC_EXPLAIN }, &effective_cache_size, DEFAULT_EFFECTIVE_CACHE_SIZE, 1, INT_MAX, @@ -3706,7 +3782,7 @@ struct config_int ConfigureNamesInt[] = {"min_parallel_table_scan_size", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the minimum amount of table data for a parallel scan."), gettext_noop("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."), - GUC_UNIT_BLOCKS | GUC_EXPLAIN, + GUC_UNIT_BLOCKS | GUC_EXPLAIN }, &min_parallel_table_scan_size, (8 * 1024 * 1024) / BLCKSZ, 0, INT_MAX / 3, @@ -3717,7 +3793,7 @@ struct config_int ConfigureNamesInt[] = {"min_parallel_index_scan_size", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the minimum amount of index data for a parallel scan."), gettext_noop("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."), - GUC_UNIT_BLOCKS | GUC_EXPLAIN, + GUC_UNIT_BLOCKS | GUC_EXPLAIN }, &min_parallel_index_scan_size, (512 * 1024) / BLCKSZ, 0, INT_MAX / 3, @@ -3830,7 +3906,7 @@ struct config_int ConfigureNamesInt[] = gettext_noop("Time between progress updates for " "long-running startup operations."), gettext_noop("0 disables progress updates."), - GUC_UNIT_MS, + GUC_UNIT_MS }, &log_startup_progress_interval, 10000, 0, INT_MAX, @@ -3868,6 +3944,7 @@ struct config_real ConfigureNamesReal[] = DEFAULT_SEQ_PAGE_COST, 0, DBL_MAX, NULL, NULL, NULL }, + { {"random_page_cost", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the planner's estimate of the cost of a " @@ -3879,6 +3956,7 @@ struct config_real ConfigureNamesReal[] = DEFAULT_RANDOM_PAGE_COST, 0, DBL_MAX, NULL, NULL, NULL }, + { {"cpu_tuple_cost", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the planner's estimate of the cost of " @@ -3890,6 +3968,7 @@ struct config_real ConfigureNamesReal[] = DEFAULT_CPU_TUPLE_COST, 0, DBL_MAX, NULL, NULL, NULL }, + { {"cpu_index_tuple_cost", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the planner's estimate of the cost of " @@ -3901,6 +3980,7 @@ struct config_real ConfigureNamesReal[] = DEFAULT_CPU_INDEX_TUPLE_COST, 0, DBL_MAX, NULL, NULL, NULL }, + { {"cpu_operator_cost", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the planner's estimate of the cost of " @@ -3912,6 +3992,7 @@ struct config_real ConfigureNamesReal[] = DEFAULT_CPU_OPERATOR_COST, 0, DBL_MAX, NULL, NULL, NULL }, + { {"parallel_tuple_cost", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the planner's estimate of the cost of " @@ -3923,6 +4004,7 @@ struct config_real ConfigureNamesReal[] = DEFAULT_PARALLEL_TUPLE_COST, 0, DBL_MAX, NULL, NULL, NULL }, + { {"parallel_setup_cost", PGC_USERSET, QUERY_TUNING_COST, gettext_noop("Sets the planner's estimate of the cost of " @@ -3999,8 +4081,7 @@ struct config_real ConfigureNamesReal[] = GUC_EXPLAIN }, &Geqo_selection_bias, - DEFAULT_GEQO_SELECTION_BIAS, - MIN_GEQO_SELECTION_BIAS, MAX_GEQO_SELECTION_BIAS, + DEFAULT_GEQO_SELECTION_BIAS, MIN_GEQO_SELECTION_BIAS, MAX_GEQO_SELECTION_BIAS, NULL, NULL, NULL }, { @@ -4217,6 +4298,7 @@ struct config_string ConfigureNamesString[] = "", check_recovery_target, assign_recovery_target, NULL }, + { {"recovery_target_xid", PGC_POSTMASTER, WAL_RECOVERY_TARGET, gettext_noop("Sets the transaction ID up to which recovery will proceed."), @@ -4226,6 +4308,7 @@ struct config_string ConfigureNamesString[] = "", check_recovery_target_xid, assign_recovery_target_xid, NULL }, + { {"recovery_target_time", PGC_POSTMASTER, WAL_RECOVERY_TARGET, gettext_noop("Sets the time stamp up to which recovery will proceed."), @@ -4235,6 +4318,7 @@ struct config_string ConfigureNamesString[] = "", check_recovery_target_time, assign_recovery_target_time, NULL }, + { {"recovery_target_name", PGC_POSTMASTER, WAL_RECOVERY_TARGET, gettext_noop("Sets the named restore point up to which recovery will proceed."), @@ -4244,6 +4328,7 @@ struct config_string ConfigureNamesString[] = "", check_recovery_target_name, assign_recovery_target_name, NULL }, + { {"recovery_target_lsn", PGC_POSTMASTER, WAL_RECOVERY_TARGET, gettext_noop("Sets the LSN of the write-ahead log location up to which recovery will proceed."), @@ -4554,6 +4639,7 @@ struct config_string ConfigureNamesString[] = "stderr", check_log_destination, assign_log_destination, NULL }, + { {"log_directory", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Sets the destination directory for log files."), @@ -4565,6 +4651,7 @@ struct config_string ConfigureNamesString[] = "log", check_canonical_path, NULL, NULL }, + { {"log_filename", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Sets the file name pattern for log files."), @@ -4608,6 +4695,7 @@ struct config_string ConfigureNamesString[] = "GMT", check_timezone, assign_timezone, show_timezone }, + { {"timezone_abbreviations", PGC_USERSET, CLIENT_CONN_LOCALE, gettext_noop("Selects a file of time zone abbreviations."), @@ -4825,7 +4913,7 @@ struct config_string ConfigureNamesString[] = { {"ssl_groups", PGC_SIGHUP, CONN_AUTH_SSL, gettext_noop("Sets the group(s) to use for Diffie-Hellman key exchange."), - gettext_noop("Multiple groups can be specified using colon-separated list."), + gettext_noop("Multiple groups can be specified using a colon-separated list."), GUC_SUPERUSER_ONLY }, &SSLECDHCurve, @@ -4972,7 +5060,6 @@ struct config_string ConfigureNamesString[] = check_log_connections, assign_log_connections, NULL }, - /* End-of-list marker */ { {NULL, 0, 0, NULL, NULL}, NULL, NULL, NULL, NULL, NULL @@ -5041,8 +5128,7 @@ struct config_enum ConfigureNamesEnum[] = NULL }, &default_toast_compression, - TOAST_PGLZ_COMPRESSION, - default_toast_compression_options, + TOAST_PGLZ_COMPRESSION, default_toast_compression_options, NULL, NULL, NULL }, @@ -5136,8 +5222,7 @@ struct config_enum ConfigureNamesEnum[] = NULL }, &syslog_facility, - DEFAULT_SYSLOG_FACILITY, - syslog_facility_options, + DEFAULT_SYSLOG_FACILITY, syslog_facility_options, NULL, assign_syslog_facility, NULL }, @@ -5191,7 +5276,6 @@ struct config_enum ConfigureNamesEnum[] = NULL, NULL, NULL }, - { {"stats_fetch_consistency", PGC_USERSET, STATS_CUMULATIVE, gettext_noop("Sets the consistency of accesses to statistics data."), @@ -5242,6 +5326,16 @@ struct config_enum ConfigureNamesEnum[] = NULL, NULL, NULL }, + { + {"file_copy_method", PGC_USERSET, RESOURCES_DISK, + gettext_noop("Selects the file copy method."), + NULL + }, + &file_copy_method, + FILE_COPY_METHOD_COPY, file_copy_method_options, + NULL, NULL, NULL + }, + { {"wal_sync_method", PGC_SIGHUP, WAL_SETTINGS, gettext_noop("Selects the method used for forcing WAL updates to disk."), @@ -5347,8 +5441,8 @@ struct config_enum ConfigureNamesEnum[] = GUC_SUPERUSER_ONLY }, &ssl_min_protocol_version, - PG_TLS1_2_VERSION, - ssl_protocol_versions_info + 1, /* don't allow PG_TLS_ANY */ + PG_TLS1_2_VERSION, ssl_protocol_versions_info + 1, /* don't allow + * PG_TLS_ANY */ NULL, NULL, NULL }, @@ -5359,14 +5453,14 @@ struct config_enum ConfigureNamesEnum[] = GUC_SUPERUSER_ONLY }, &ssl_max_protocol_version, - PG_TLS_ANY, - ssl_protocol_versions_info, + PG_TLS_ANY, ssl_protocol_versions_info, NULL, NULL, NULL }, { {"recovery_init_sync_method", PGC_SIGHUP, ERROR_HANDLING_OPTIONS, gettext_noop("Sets the method for synchronizing the data directory before crash recovery."), + NULL }, &recovery_init_sync_method, DATA_DIR_SYNC_METHOD_FSYNC, recovery_init_sync_method_options, diff --git a/src/backend/utils/misc/injection_point.c b/src/backend/utils/misc/injection_point.c index 97ab851f0a632..83b887b697807 100644 --- a/src/backend/utils/misc/injection_point.c +++ b/src/backend/utils/misc/injection_point.c @@ -541,14 +541,14 @@ InjectionPointLoad(const char *name) * Execute an injection point, if defined. */ void -InjectionPointRun(const char *name) +InjectionPointRun(const char *name, void *arg) { #ifdef USE_INJECTION_POINTS InjectionPointCacheEntry *cache_entry; cache_entry = InjectionPointCacheRefresh(name); if (cache_entry) - cache_entry->callback(name, cache_entry->private_data); + cache_entry->callback(name, cache_entry->private_data, arg); #else elog(ERROR, "Injection points are not supported by this build"); #endif @@ -558,14 +558,14 @@ InjectionPointRun(const char *name) * Execute an injection point directly from the cache, if defined. */ void -InjectionPointCached(const char *name) +InjectionPointCached(const char *name, void *arg) { #ifdef USE_INJECTION_POINTS InjectionPointCacheEntry *cache_entry; cache_entry = injection_point_cache_get(name); if (cache_entry) - cache_entry->callback(name, cache_entry->private_data); + cache_entry->callback(name, cache_entry->private_data, arg); #else elog(ERROR, "Injection points are not supported by this build"); #endif @@ -584,3 +584,49 @@ IsInjectionPointAttached(const char *name) return false; /* silence compiler */ #endif } + +/* + * Retrieve a list of all the injection points currently attached. + * + * This list is palloc'd in the current memory context. + */ +List * +InjectionPointList(void) +{ +#ifdef USE_INJECTION_POINTS + List *inj_points = NIL; + uint32 max_inuse; + + LWLockAcquire(InjectionPointLock, LW_SHARED); + + max_inuse = pg_atomic_read_u32(&ActiveInjectionPoints->max_inuse); + + for (uint32 idx = 0; idx < max_inuse; idx++) + { + InjectionPointEntry *entry; + InjectionPointData *inj_point; + uint64 generation; + + entry = &ActiveInjectionPoints->entries[idx]; + generation = pg_atomic_read_u64(&entry->generation); + + /* skip free slots */ + if (generation % 2 == 0) + continue; + + inj_point = (InjectionPointData *) palloc0(sizeof(InjectionPointData)); + inj_point->name = pstrdup(entry->name); + inj_point->library = pstrdup(entry->library); + inj_point->function = pstrdup(entry->function); + inj_points = lappend(inj_points, inj_point); + } + + LWLockRelease(InjectionPointLock); + + return inj_points; + +#else + elog(ERROR, "Injection points are not supported by this build"); + return NIL; /* keep compiler quiet */ +#endif +} diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index ff56a1f0732c5..a9d8293474af5 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -97,6 +97,7 @@ #password_encryption = scram-sha-256 # scram-sha-256 or md5 #scram_iterations = 4096 #md5_password_warnings = on +#oauth_validator_libraries = '' # comma-separated list of trusted validator modules # GSSAPI using Kerberos #krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab' @@ -121,9 +122,6 @@ #ssl_passphrase_command = '' #ssl_passphrase_command_supports_reload = off -# OAuth -#oauth_validator_libraries = '' # comma-separated list of trusted validator modules - #------------------------------------------------------------------------------ # RESOURCE USAGE (except WAL) @@ -180,6 +178,8 @@ #temp_file_limit = -1 # limits per-process temp file space # in kilobytes, or -1 for no limit +#file_copy_method = copy # copy, clone (if supported by OS) + #max_notify_queue_pages = 1048576 # limits the number of SLRU pages allocated # for NOTIFY / LISTEN queue @@ -342,7 +342,7 @@ # (change requires restart) #wal_keep_size = 0 # in megabytes; 0 disables #max_slot_wal_keep_size = -1 # in megabytes; -1 disables -#idle_replication_slot_timeout = 0 # in minutes; 0 disables +#idle_replication_slot_timeout = 0 # in seconds; 0 disables #wal_sender_timeout = 60s # in milliseconds; 0 disables #track_commit_timestamp = off # collect timestamp of transaction commit # (change requires restart) @@ -427,6 +427,7 @@ #enable_tidscan = on #enable_group_by_reordering = on #enable_distinct_reordering = on +#enable_self_join_elimination = on # - Planner Cost Constants - @@ -603,6 +604,7 @@ # %d = database name # %r = remote host and port # %h = remote host + # %L = local address # %b = backend type # %p = process ID # %P = process ID of parallel group leader @@ -622,7 +624,7 @@ # %% = '%' # e.g. '<%u%%%d> ' #log_lock_waits = off # log lock waits >= deadlock_timeout -#log_lock_failure = off # log lock failures +#log_lock_failures = off # log lock failures #log_recovery_conflict_waits = off # log standby recovery conflict waits # >= deadlock_timeout #log_parameter_max_length = -1 # when logging statements, limit logged diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c index e08b26e8c14f2..4df25944deb33 100644 --- a/src/backend/utils/misc/ps_status.c +++ b/src/backend/utils/misc/ps_status.c @@ -100,6 +100,17 @@ static void flush_ps_display(void); static int save_argc; static char **save_argv; +/* + * Valgrind seems not to consider the global "environ" variable as a valid + * root pointer; so when we allocate a new environment array, it claims that + * data is leaked. To fix that, keep our own statically-allocated copy of the + * pointer. (Oddly, this doesn't seem to be a problem for "argv".) + */ +#if defined(PS_USE_CLOBBER_ARGV) && defined(USE_VALGRIND) +extern char **ps_status_new_environ; +char **ps_status_new_environ; +#endif + /* * Call this early in startup to save the original argc/argv values. @@ -206,6 +217,11 @@ save_ps_display_args(int argc, char **argv) } new_environ[i] = NULL; environ = new_environ; + + /* See notes about Valgrind above. */ +#ifdef USE_VALGRIND + ps_status_new_environ = new_environ; +#endif } /* diff --git a/src/backend/utils/mmgr/alignedalloc.c b/src/backend/utils/mmgr/alignedalloc.c index 85aee389d6b4c..b1be742691497 100644 --- a/src/backend/utils/mmgr/alignedalloc.c +++ b/src/backend/utils/mmgr/alignedalloc.c @@ -45,6 +45,16 @@ AlignedAllocFree(void *pointer) GetMemoryChunkContext(unaligned)->name, chunk); #endif + /* + * Create a dummy vchunk covering the start of the unaligned chunk, but + * not overlapping the aligned chunk. This will be freed while pfree'ing + * the unaligned chunk, keeping Valgrind happy. Then when we return to + * the outer pfree, that will clean up the vchunk for the aligned chunk. + */ + VALGRIND_MEMPOOL_ALLOC(GetMemoryChunkContext(unaligned), unaligned, + (char *) pointer - (char *) unaligned); + + /* Recursively pfree the unaligned chunk */ pfree(unaligned); } @@ -96,18 +106,41 @@ AlignedAllocRealloc(void *pointer, Size size, int flags) Assert(old_size >= redirchunk->requested_size); #endif + /* + * To keep things simple, we always allocate a new aligned chunk and copy + * data into it. Because of the above inaccuracy, this may end in copying + * more data than was in the original allocation request size, but that + * should be OK. + */ ctx = GetMemoryChunkContext(unaligned); newptr = MemoryContextAllocAligned(ctx, size, alignto, flags); - /* - * We may memcpy beyond the end of the original allocation request size, - * so we must mark the entire allocation as defined. - */ - if (likely(newptr != NULL)) + /* Cope cleanly with OOM */ + if (unlikely(newptr == NULL)) { - VALGRIND_MAKE_MEM_DEFINED(pointer, old_size); - memcpy(newptr, pointer, Min(size, old_size)); + VALGRIND_MAKE_MEM_NOACCESS(redirchunk, sizeof(MemoryChunk)); + return MemoryContextAllocationFailure(ctx, size, flags); } + + /* + * We may memcpy more than the original allocation request size, which + * would result in trying to copy trailing bytes that the original + * MemoryContextAllocAligned call marked NOACCESS. So we must mark the + * entire old_size as defined. That's slightly annoying, but probably not + * worth improving. + */ + VALGRIND_MAKE_MEM_DEFINED(pointer, old_size); + memcpy(newptr, pointer, Min(size, old_size)); + + /* + * Create a dummy vchunk covering the start of the old unaligned chunk, + * but not overlapping the aligned chunk. This will be freed while + * pfree'ing the old unaligned chunk, keeping Valgrind happy. Then when + * we return to repalloc, it will move the vchunk for the aligned chunk. + */ + VALGRIND_MEMPOOL_ALLOC(ctx, unaligned, + (char *) pointer - (char *) unaligned); + pfree(unaligned); return newptr; diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index 666ecd8f78d0e..9ef109ca586bd 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -103,6 +103,8 @@ #define ALLOC_BLOCKHDRSZ MAXALIGN(sizeof(AllocBlockData)) #define ALLOC_CHUNKHDRSZ sizeof(MemoryChunk) +#define FIRST_BLOCKHDRSZ (MAXALIGN(sizeof(AllocSetContext)) + \ + ALLOC_BLOCKHDRSZ) typedef struct AllocBlockData *AllocBlock; /* forward reference */ @@ -458,6 +460,21 @@ AllocSetContextCreateInternal(MemoryContext parent, * we'd leak the header/initial block if we ereport in this stretch. */ + /* Create a vpool associated with the context */ + VALGRIND_CREATE_MEMPOOL(set, 0, false); + + /* + * Create a vchunk covering both the AllocSetContext struct and the keeper + * block's header. (Perhaps it would be more sensible for these to be two + * separate vchunks, but doing that seems to tickle bugs in some versions + * of Valgrind.) We must have these vchunks, and also a vchunk for each + * subsequently-added block header, so that Valgrind considers the + * pointers within them while checking for leaked memory. Note that + * Valgrind doesn't distinguish between these vchunks and those created by + * mcxt.c for the user-accessible-data chunks we allocate. + */ + VALGRIND_MEMPOOL_ALLOC(set, set, FIRST_BLOCKHDRSZ); + /* Fill in the initial block's block header */ block = KeeperBlock(set); block->aset = set; @@ -585,6 +602,14 @@ AllocSetReset(MemoryContext context) #ifdef CLOBBER_FREED_MEMORY wipe_mem(block, block->freeptr - ((char *) block)); #endif + + /* + * We need to free the block header's vchunk explicitly, although + * the user-data vchunks within will go away in the TRIM below. + * Otherwise Valgrind complains about leaked allocations. + */ + VALGRIND_MEMPOOL_FREE(set, block); + free(block); } block = next; @@ -592,6 +617,14 @@ AllocSetReset(MemoryContext context) Assert(context->mem_allocated == keepersize); + /* + * Instruct Valgrind to throw away all the vchunks associated with this + * context, except for the one covering the AllocSetContext and + * keeper-block header. This gets rid of the vchunks for whatever user + * data is getting discarded by the context reset. + */ + VALGRIND_MEMPOOL_TRIM(set, set, FIRST_BLOCKHDRSZ); + /* Reset block size allocation sequence, too */ set->nextBlockSize = set->initBlockSize; } @@ -648,6 +681,9 @@ AllocSetDelete(MemoryContext context) freelist->first_free = (AllocSetContext *) oldset->header.nextchild; freelist->num_free--; + /* Destroy the context's vpool --- see notes below */ + VALGRIND_DESTROY_MEMPOOL(oldset); + /* All that remains is to free the header/initial block */ free(oldset); } @@ -675,13 +711,24 @@ AllocSetDelete(MemoryContext context) #endif if (!IsKeeperBlock(set, block)) + { + /* As in AllocSetReset, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(set, block); free(block); + } block = next; } Assert(context->mem_allocated == keepersize); + /* + * Destroy the vpool. We don't seem to need to explicitly free the + * initial block's header vchunk, nor any user-data vchunks that Valgrind + * still knows about; they'll all go away automatically. + */ + VALGRIND_DESTROY_MEMPOOL(set); + /* Finally, free the context header, including the keeper block */ free(set); } @@ -716,6 +763,9 @@ AllocSetAllocLarge(MemoryContext context, Size size, int flags) if (block == NULL) return MemoryContextAllocationFailure(context, size, flags); + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(set, block, ALLOC_BLOCKHDRSZ); + context->mem_allocated += blksize; block->aset = set; @@ -922,6 +972,9 @@ AllocSetAllocFromNewBlock(MemoryContext context, Size size, int flags, if (block == NULL) return MemoryContextAllocationFailure(context, size, flags); + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(set, block, ALLOC_BLOCKHDRSZ); + context->mem_allocated += blksize; block->aset = set; @@ -1104,6 +1157,10 @@ AllocSetFree(void *pointer) #ifdef CLOBBER_FREED_MEMORY wipe_mem(block, block->freeptr - ((char *) block)); #endif + + /* As in AllocSetReset, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(set, block); + free(block); } else @@ -1184,6 +1241,7 @@ AllocSetRealloc(void *pointer, Size size, int flags) * realloc() to make the containing block bigger, or smaller, with * minimum space wastage. */ + AllocBlock newblock; Size chksize; Size blksize; Size oldblksize; @@ -1223,14 +1281,21 @@ AllocSetRealloc(void *pointer, Size size, int flags) blksize = chksize + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ; oldblksize = block->endptr - ((char *) block); - block = (AllocBlock) realloc(block, blksize); - if (block == NULL) + newblock = (AllocBlock) realloc(block, blksize); + if (newblock == NULL) { /* Disallow access to the chunk header. */ VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); return MemoryContextAllocationFailure(&set->header, size, flags); } + /* + * Move the block-header vchunk explicitly. (mcxt.c will take care of + * moving the vchunk for the user data.) + */ + VALGRIND_MEMPOOL_CHANGE(set, block, newblock, ALLOC_BLOCKHDRSZ); + block = newblock; + /* updated separately, not to underflow when (oldblksize > blksize) */ set->header.mem_allocated -= oldblksize; set->header.mem_allocated += blksize; @@ -1294,7 +1359,7 @@ AllocSetRealloc(void *pointer, Size size, int flags) /* Ensure any padding bytes are marked NOACCESS. */ VALGRIND_MAKE_MEM_NOACCESS((char *) pointer + size, chksize - size); - /* Disallow access to the chunk header . */ + /* Disallow access to the chunk header. */ VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); return pointer; diff --git a/src/backend/utils/mmgr/bump.c b/src/backend/utils/mmgr/bump.c index 434230fd95b92..2805d55a2eca9 100644 --- a/src/backend/utils/mmgr/bump.c +++ b/src/backend/utils/mmgr/bump.c @@ -45,7 +45,9 @@ #include "utils/memutils_memorychunk.h" #include "utils/memutils_internal.h" -#define Bump_BLOCKHDRSZ MAXALIGN(sizeof(BumpBlock)) +#define Bump_BLOCKHDRSZ MAXALIGN(sizeof(BumpBlock)) +#define FIRST_BLOCKHDRSZ (MAXALIGN(sizeof(BumpContext)) + \ + Bump_BLOCKHDRSZ) /* No chunk header unless built with MEMORY_CONTEXT_CHECKING */ #ifdef MEMORY_CONTEXT_CHECKING @@ -189,6 +191,12 @@ BumpContextCreate(MemoryContext parent, const char *name, Size minContextSize, * Avoid writing code that can fail between here and MemoryContextCreate; * we'd leak the header and initial block if we ereport in this stretch. */ + + /* See comments about Valgrind interactions in aset.c */ + VALGRIND_CREATE_MEMPOOL(set, 0, false); + /* This vchunk covers the BumpContext and the keeper block header */ + VALGRIND_MEMPOOL_ALLOC(set, set, FIRST_BLOCKHDRSZ); + dlist_init(&set->blocks); /* Fill in the initial block's block header */ @@ -262,6 +270,14 @@ BumpReset(MemoryContext context) BumpBlockFree(set, block); } + /* + * Instruct Valgrind to throw away all the vchunks associated with this + * context, except for the one covering the BumpContext and keeper-block + * header. This gets rid of the vchunks for whatever user data is getting + * discarded by the context reset. + */ + VALGRIND_MEMPOOL_TRIM(set, set, FIRST_BLOCKHDRSZ); + /* Reset block size allocation sequence, too */ set->nextBlockSize = set->initBlockSize; @@ -279,6 +295,10 @@ BumpDelete(MemoryContext context) { /* Reset to release all releasable BumpBlocks */ BumpReset(context); + + /* Destroy the vpool -- see notes in aset.c */ + VALGRIND_DESTROY_MEMPOOL(context); + /* And free the context header and keeper block */ free(context); } @@ -316,7 +336,10 @@ BumpAllocLarge(MemoryContext context, Size size, int flags) block = (BumpBlock *) malloc(blksize); if (block == NULL) - return NULL; + return MemoryContextAllocationFailure(context, size, flags); + + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(set, block, Bump_BLOCKHDRSZ); context->mem_allocated += blksize; @@ -455,6 +478,9 @@ BumpAllocFromNewBlock(MemoryContext context, Size size, int flags, if (block == NULL) return MemoryContextAllocationFailure(context, size, flags); + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(set, block, Bump_BLOCKHDRSZ); + context->mem_allocated += blksize; /* initialize the new block */ @@ -606,6 +632,9 @@ BumpBlockFree(BumpContext *set, BumpBlock *block) wipe_mem(block, ((char *) block->endptr - (char *) block)); #endif + /* As in aset.c, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(set, block); + free(block); } diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c index 17d4f7a7a06e1..be43e9351c3d3 100644 --- a/src/backend/utils/mmgr/dsa.c +++ b/src/backend/utils/mmgr/dsa.c @@ -531,6 +531,21 @@ dsa_attach(dsa_handle handle) return area; } +/* + * Returns whether the area with the given handle was already attached by the + * current process. The area must have been created with dsa_create (not + * dsa_create_in_place). + */ +bool +dsa_is_attached(dsa_handle handle) +{ + /* + * An area handle is really a DSM segment handle for the first segment, so + * we can just search for that. + */ + return dsm_find_mapping(handle) != NULL; +} + /* * Attach to an area that was created with dsa_create_in_place. The caller * must somehow know the location in memory that was used when the area was diff --git a/src/backend/utils/mmgr/generation.c b/src/backend/utils/mmgr/generation.c index 18679ad4f1e41..cfafc9bf0829d 100644 --- a/src/backend/utils/mmgr/generation.c +++ b/src/backend/utils/mmgr/generation.c @@ -45,6 +45,8 @@ #define Generation_BLOCKHDRSZ MAXALIGN(sizeof(GenerationBlock)) #define Generation_CHUNKHDRSZ sizeof(MemoryChunk) +#define FIRST_BLOCKHDRSZ (MAXALIGN(sizeof(GenerationContext)) + \ + Generation_BLOCKHDRSZ) #define Generation_CHUNK_FRACTION 8 @@ -221,6 +223,12 @@ GenerationContextCreate(MemoryContext parent, * Avoid writing code that can fail between here and MemoryContextCreate; * we'd leak the header if we ereport in this stretch. */ + + /* See comments about Valgrind interactions in aset.c */ + VALGRIND_CREATE_MEMPOOL(set, 0, false); + /* This vchunk covers the GenerationContext and the keeper block header */ + VALGRIND_MEMPOOL_ALLOC(set, set, FIRST_BLOCKHDRSZ); + dlist_init(&set->blocks); /* Fill in the initial block's block header */ @@ -309,6 +317,14 @@ GenerationReset(MemoryContext context) GenerationBlockFree(set, block); } + /* + * Instruct Valgrind to throw away all the vchunks associated with this + * context, except for the one covering the GenerationContext and + * keeper-block header. This gets rid of the vchunks for whatever user + * data is getting discarded by the context reset. + */ + VALGRIND_MEMPOOL_TRIM(set, set, FIRST_BLOCKHDRSZ); + /* set it so new allocations to make use of the keeper block */ set->block = KeeperBlock(set); @@ -329,6 +345,10 @@ GenerationDelete(MemoryContext context) { /* Reset to release all releasable GenerationBlocks */ GenerationReset(context); + + /* Destroy the vpool -- see notes in aset.c */ + VALGRIND_DESTROY_MEMPOOL(context); + /* And free the context header and keeper block */ free(context); } @@ -365,6 +385,9 @@ GenerationAllocLarge(MemoryContext context, Size size, int flags) if (block == NULL) return MemoryContextAllocationFailure(context, size, flags); + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(set, block, Generation_BLOCKHDRSZ); + context->mem_allocated += blksize; /* block with a single (used) chunk */ @@ -487,6 +510,9 @@ GenerationAllocFromNewBlock(MemoryContext context, Size size, int flags, if (block == NULL) return MemoryContextAllocationFailure(context, size, flags); + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(set, block, Generation_BLOCKHDRSZ); + context->mem_allocated += blksize; /* initialize the new block */ @@ -677,6 +703,9 @@ GenerationBlockFree(GenerationContext *set, GenerationBlock *block) wipe_mem(block, block->blksize); #endif + /* As in aset.c, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(set, block); + free(block); } diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index d98ae9db6bece..47fd774c7d280 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -8,6 +8,23 @@ * context-type-specific operations via the function pointers in a * context's MemoryContextMethods struct. * + * A note about Valgrind support: when USE_VALGRIND is defined, we provide + * support for memory leak tracking at the allocation-unit level. Valgrind + * does leak detection by tracking allocated "chunks", which can be grouped + * into "pools". The "chunk" terminology is overloaded, since we use that + * word for our allocation units, and it's sometimes important to distinguish + * those from the Valgrind objects that describe them. To reduce confusion, + * let's use the terms "vchunk" and "vpool" for the Valgrind objects. + * + * We use a separate vpool for each memory context. The context-type-specific + * code is responsible for creating and deleting the vpools, and also for + * creating vchunks to cover its management data structures such as block + * headers. (There must be a vchunk that includes every pointer we want + * Valgrind to consider for leak-tracking purposes.) This module creates + * and deletes the vchunks that cover the caller-visible allocated chunks. + * However, the context-type-specific code must handle cleaning up those + * vchunks too during memory context reset operations. + * * * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California @@ -418,8 +435,6 @@ MemoryContextResetOnly(MemoryContext context) context->methods->reset(context); context->isReset = true; - VALGRIND_DESTROY_MEMPOOL(context); - VALGRIND_CREATE_MEMPOOL(context, 0, false); } } @@ -526,8 +541,6 @@ MemoryContextDeleteOnly(MemoryContext context) context->ident = NULL; context->methods->delete_context(context); - - VALGRIND_DESTROY_MEMPOOL(context); } /* @@ -560,9 +573,7 @@ MemoryContextDeleteChildren(MemoryContext context) * the specified context, since that means it will automatically be freed * when no longer needed. * - * There is no API for deregistering a callback once registered. If you - * want it to not do anything anymore, adjust the state pointed to by its - * "arg" to indicate that. + * Note that callers can assume this cannot fail. */ void MemoryContextRegisterResetCallback(MemoryContext context, @@ -577,6 +588,41 @@ MemoryContextRegisterResetCallback(MemoryContext context, context->isReset = false; } +/* + * MemoryContextUnregisterResetCallback + * Undo the effects of MemoryContextRegisterResetCallback. + * + * This can be used if a callback's effects are no longer required + * at some point before the context has been reset/deleted. It is the + * caller's responsibility to pfree the callback struct (if needed). + * + * An assertion failure occurs if the callback was not registered. + * We could alternatively define that case as a no-op, but that seems too + * likely to mask programming errors such as passing the wrong context. + */ +void +MemoryContextUnregisterResetCallback(MemoryContext context, + MemoryContextCallback *cb) +{ + MemoryContextCallback *prev, + *cur; + + Assert(MemoryContextIsValid(context)); + + for (prev = NULL, cur = context->reset_cbs; cur != NULL; + prev = cur, cur = cur->next) + { + if (cur != cb) + continue; + if (prev) + prev->next = cur->next; + else + context->reset_cbs = cur->next; + return; + } + Assert(false); +} + /* * MemoryContextCallResetCallbacks * Internal function to call all registered callbacks for context. @@ -834,7 +880,7 @@ MemoryContextStatsDetail(MemoryContext context, memset(&grand_totals, 0, sizeof(grand_totals)); - MemoryContextStatsInternal(context, 0, max_level, max_children, + MemoryContextStatsInternal(context, 1, max_level, max_children, &grand_totals, print_to_stderr); if (print_to_stderr) @@ -899,7 +945,7 @@ MemoryContextStatsInternal(MemoryContext context, int level, */ child = context->firstchild; ichild = 0; - if (level < max_level && !stack_is_too_deep()) + if (level <= max_level && !stack_is_too_deep()) { for (; child != NULL && ichild < max_children; child = child->nextchild, ichild++) @@ -928,7 +974,7 @@ MemoryContextStatsInternal(MemoryContext context, int level, if (print_to_stderr) { - for (int i = 0; i <= level; i++) + for (int i = 0; i < level; i++) fprintf(stderr, " "); fprintf(stderr, "%d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used\n", @@ -1029,7 +1075,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru, if (print_to_stderr) { - for (i = 0; i < level; i++) + for (i = 1; i < level; i++) fprintf(stderr, " "); fprintf(stderr, "%s: %s%s\n", name, stats_string, truncated_ident); } @@ -1106,6 +1152,10 @@ MemoryContextCreate(MemoryContext node, /* Creating new memory contexts is not allowed in a critical section */ Assert(CritSectionCount == 0); + /* Validate parent, to help prevent crazy context linkages */ + Assert(parent == NULL || MemoryContextIsValid(parent)); + Assert(node != parent); + /* Initialize all standard fields of memory context header */ node->type = tag; node->isReset = true; @@ -1133,8 +1183,6 @@ MemoryContextCreate(MemoryContext node, node->nextchild = NULL; node->allowInCritSection = false; } - - VALGRIND_CREATE_MEMPOOL(node, 0, false); } /* @@ -1417,7 +1465,13 @@ MemoryContextAllocAligned(MemoryContext context, void *unaligned; void *aligned; - /* wouldn't make much sense to waste that much space */ + /* + * Restrict alignto to ensure that it can fit into the "value" field of + * the redirection MemoryChunk, and that the distance back to the start of + * the unaligned chunk will fit into the space available for that. This + * isn't a limitation in practice, since it wouldn't make much sense to + * waste that much space. + */ Assert(alignto < (128 * 1024 * 1024)); /* ensure alignto is a power of 2 */ @@ -1454,10 +1508,15 @@ MemoryContextAllocAligned(MemoryContext context, alloc_size += 1; #endif - /* perform the actual allocation */ - unaligned = MemoryContextAllocExtended(context, alloc_size, flags); + /* + * Perform the actual allocation, but do not pass down MCXT_ALLOC_ZERO. + * This ensures that wasted bytes beyond the aligned chunk do not become + * DEFINED. + */ + unaligned = MemoryContextAllocExtended(context, alloc_size, + flags & ~MCXT_ALLOC_ZERO); - /* set the aligned pointer */ + /* compute the aligned pointer */ aligned = (void *) TYPEALIGN(alignto, (char *) unaligned + sizeof(MemoryChunk)); @@ -1485,12 +1544,23 @@ MemoryContextAllocAligned(MemoryContext context, set_sentinel(aligned, size); #endif - /* Mark the bytes before the redirection header as noaccess */ - VALGRIND_MAKE_MEM_NOACCESS(unaligned, - (char *) alignedchunk - (char *) unaligned); + /* + * MemoryContextAllocExtended marked the whole unaligned chunk as a + * vchunk. Undo that, instead making just the aligned chunk be a vchunk. + * This prevents Valgrind from complaining that the vchunk is possibly + * leaked, since only pointers to the aligned chunk will exist. + * + * After these calls, the aligned chunk will be marked UNDEFINED, and all + * the rest of the unaligned chunk (the redirection chunk header, the + * padding bytes before it, and any wasted trailing bytes) will be marked + * NOACCESS, which is what we want. + */ + VALGRIND_MEMPOOL_FREE(context, unaligned); + VALGRIND_MEMPOOL_ALLOC(context, aligned, size); - /* Disallow access to the redirection chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(alignedchunk, sizeof(MemoryChunk)); + /* Now zero (and make DEFINED) just the aligned chunk, if requested */ + if ((flags & MCXT_ALLOC_ZERO) != 0) + MemSetAligned(aligned, 0, size); return aligned; } @@ -1524,16 +1594,12 @@ void pfree(void *pointer) { #ifdef USE_VALGRIND - MemoryContextMethodID method = GetMemoryChunkMethodID(pointer); MemoryContext context = GetMemoryChunkContext(pointer); #endif MCXT_METHOD(pointer, free_p) (pointer); -#ifdef USE_VALGRIND - if (method != MCTX_ALIGNED_REDIRECT_ID) - VALGRIND_MEMPOOL_FREE(context, pointer); -#endif + VALGRIND_MEMPOOL_FREE(context, pointer); } /* @@ -1543,9 +1609,6 @@ pfree(void *pointer) void * repalloc(void *pointer, Size size) { -#ifdef USE_VALGRIND - MemoryContextMethodID method = GetMemoryChunkMethodID(pointer); -#endif #if defined(USE_ASSERT_CHECKING) || defined(USE_VALGRIND) MemoryContext context = GetMemoryChunkContext(pointer); #endif @@ -1568,10 +1631,7 @@ repalloc(void *pointer, Size size) */ ret = MCXT_METHOD(pointer, realloc) (pointer, size, 0); -#ifdef USE_VALGRIND - if (method != MCTX_ALIGNED_REDIRECT_ID) - VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size); -#endif + VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size); return ret; } diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index e3526e780649f..0be1c2b0fff85 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -284,8 +284,7 @@ PortalDefineQuery(Portal portal, const char *sourceText, CommandTag commandTag, List *stmts, - CachedPlan *cplan, - CachedPlanSource *plansource) + CachedPlan *cplan) { Assert(PortalIsValid(portal)); Assert(portal->status == PORTAL_NEW); @@ -300,7 +299,6 @@ PortalDefineQuery(Portal portal, portal->commandTag = commandTag; portal->stmts = stmts; portal->cplan = cplan; - portal->plansource = plansource; portal->status = PORTAL_DEFINED; } diff --git a/src/backend/utils/mmgr/slab.c b/src/backend/utils/mmgr/slab.c index d32c0d318fbf4..0e35abcf5a055 100644 --- a/src/backend/utils/mmgr/slab.c +++ b/src/backend/utils/mmgr/slab.c @@ -377,6 +377,11 @@ SlabContextCreate(MemoryContext parent, * we'd leak the header if we ereport in this stretch. */ + /* See comments about Valgrind interactions in aset.c */ + VALGRIND_CREATE_MEMPOOL(slab, 0, false); + /* This vchunk covers the SlabContext only */ + VALGRIND_MEMPOOL_ALLOC(slab, slab, sizeof(SlabContext)); + /* Fill in SlabContext-specific header fields */ slab->chunkSize = (uint32) chunkSize; slab->fullChunkSize = (uint32) fullChunkSize; @@ -451,6 +456,10 @@ SlabReset(MemoryContext context) #ifdef CLOBBER_FREED_MEMORY wipe_mem(block, slab->blockSize); #endif + + /* As in aset.c, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(slab, block); + free(block); context->mem_allocated -= slab->blockSize; } @@ -467,11 +476,23 @@ SlabReset(MemoryContext context) #ifdef CLOBBER_FREED_MEMORY wipe_mem(block, slab->blockSize); #endif + + /* As in aset.c, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(slab, block); + free(block); context->mem_allocated -= slab->blockSize; } } + /* + * Instruct Valgrind to throw away all the vchunks associated with this + * context, except for the one covering the SlabContext. This gets rid of + * the vchunks for whatever user data is getting discarded by the context + * reset. + */ + VALGRIND_MEMPOOL_TRIM(slab, slab, sizeof(SlabContext)); + slab->curBlocklistIndex = 0; Assert(context->mem_allocated == 0); @@ -486,6 +507,10 @@ SlabDelete(MemoryContext context) { /* Reset to release all the SlabBlocks */ SlabReset(context); + + /* Destroy the vpool -- see notes in aset.c */ + VALGRIND_DESTROY_MEMPOOL(context); + /* And free the context header */ free(context); } @@ -567,6 +592,9 @@ SlabAllocFromNewBlock(MemoryContext context, Size size, int flags) if (unlikely(block == NULL)) return MemoryContextAllocationFailure(context, size, flags); + /* Make a vchunk covering the new block's header */ + VALGRIND_MEMPOOL_ALLOC(slab, block, Slab_BLOCKHDRSZ); + block->slab = slab; context->mem_allocated += slab->blockSize; @@ -795,6 +823,10 @@ SlabFree(void *pointer) #ifdef CLOBBER_FREED_MEMORY wipe_mem(block, slab->blockSize); #endif + + /* As in aset.c, free block-header vchunks explicitly */ + VALGRIND_MEMPOOL_FREE(slab, block); + free(block); slab->header.mem_allocated -= slab->blockSize; } diff --git a/src/backend/utils/resowner/resowner.c b/src/backend/utils/resowner/resowner.c index d39f3e1b655cd..fca84ded6ddc3 100644 --- a/src/backend/utils/resowner/resowner.c +++ b/src/backend/utils/resowner/resowner.c @@ -231,11 +231,8 @@ hash_resource_elem(Datum value, const ResourceOwnerDesc *kind) * 'kind' into the hash. Just add it with hash_combine(), it perturbs the * result enough for our purposes. */ -#if SIZEOF_DATUM == 8 - return hash_combine64(murmurhash64((uint64) value), (uint64) kind); -#else - return hash_combine(murmurhash32((uint32) value), (uint32) kind); -#endif + return hash_combine64(murmurhash64((uint64) value), + (uint64) (uintptr_t) kind); } /* diff --git a/src/backend/utils/sort/sortsupport.c b/src/backend/utils/sort/sortsupport.c index 0b4f08ed2ec50..f582c6624f11a 100644 --- a/src/backend/utils/sort/sortsupport.c +++ b/src/backend/utils/sort/sortsupport.c @@ -57,7 +57,7 @@ comparison_shim(Datum x, Datum y, SortSupport ssup) if (extra->fcinfo.isnull) elog(ERROR, "function %u returned NULL", extra->flinfo.fn_oid); - return result; + return DatumGetInt32(result); } /* @@ -135,16 +135,16 @@ PrepareSortSupportFromOrderingOp(Oid orderingOp, SortSupport ssup) { Oid opfamily; Oid opcintype; - int16 strategy; + CompareType cmptype; Assert(ssup->comparator == NULL); /* Find the operator in pg_amop */ if (!get_ordering_op_properties(orderingOp, &opfamily, &opcintype, - &strategy)) + &cmptype)) elog(ERROR, "operator %u is not a valid ordering operator", orderingOp); - ssup->ssup_reverse = (strategy == BTGreaterStrategyNumber); + ssup->ssup_reverse = (cmptype == COMPARE_GT); FinishSortSupportFunction(opfamily, opcintype, ssup); } diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 65ab83fff8b26..5d4411dc33fee 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -512,7 +512,6 @@ qsort_tuple_unsigned_compare(SortTuple *a, SortTuple *b, Tuplesortstate *state) return state->base.comparetup_tiebreak(a, b, state); } -#if SIZEOF_DATUM >= 8 /* Used if first key's comparator is ssup_datum_signed_cmp */ static pg_attribute_always_inline int qsort_tuple_signed_compare(SortTuple *a, SortTuple *b, Tuplesortstate *state) @@ -535,7 +534,6 @@ qsort_tuple_signed_compare(SortTuple *a, SortTuple *b, Tuplesortstate *state) return state->base.comparetup_tiebreak(a, b, state); } -#endif /* Used if first key's comparator is ssup_datum_int32_cmp */ static pg_attribute_always_inline int @@ -578,7 +576,6 @@ qsort_tuple_int32_compare(SortTuple *a, SortTuple *b, Tuplesortstate *state) #define ST_DEFINE #include "lib/sort_template.h" -#if SIZEOF_DATUM >= 8 #define ST_SORT qsort_tuple_signed #define ST_ELEMENT_TYPE SortTuple #define ST_COMPARE(a, b, state) qsort_tuple_signed_compare(a, b, state) @@ -587,7 +584,6 @@ qsort_tuple_int32_compare(SortTuple *a, SortTuple *b, Tuplesortstate *state) #define ST_SCOPE static #define ST_DEFINE #include "lib/sort_template.h" -#endif #define ST_SORT qsort_tuple_int32 #define ST_ELEMENT_TYPE SortTuple @@ -2692,7 +2688,6 @@ tuplesort_sort_memtuples(Tuplesortstate *state) state); return; } -#if SIZEOF_DATUM >= 8 else if (state->base.sortKeys[0].comparator == ssup_datum_signed_cmp) { qsort_tuple_signed(state->memtuples, @@ -2700,7 +2695,6 @@ tuplesort_sort_memtuples(Tuplesortstate *state) state); return; } -#endif else if (state->base.sortKeys[0].comparator == ssup_datum_int32_cmp) { qsort_tuple_int32(state->memtuples, @@ -3146,7 +3140,6 @@ ssup_datum_unsigned_cmp(Datum x, Datum y, SortSupport ssup) return 0; } -#if SIZEOF_DATUM >= 8 int ssup_datum_signed_cmp(Datum x, Datum y, SortSupport ssup) { @@ -3160,7 +3153,6 @@ ssup_datum_signed_cmp(Datum x, Datum y, SortSupport ssup) else return 0; } -#endif int ssup_datum_int32_cmp(Datum x, Datum y, SortSupport ssup) diff --git a/src/backend/utils/sort/tuplesortvariants.c b/src/backend/utils/sort/tuplesortvariants.c index 5f70e8dddac57..890cdbe120418 100644 --- a/src/backend/utils/sort/tuplesortvariants.c +++ b/src/backend/utils/sort/tuplesortvariants.c @@ -31,6 +31,7 @@ #include "utils/datum.h" #include "utils/guc.h" #include "utils/lsyscache.h" +#include "utils/rel.h" #include "utils/tuplesort.h" @@ -865,7 +866,7 @@ tuplesort_putbrintuple(Tuplesortstate *state, BrinTuple *tuple, Size size) memcpy(&bstup->tuple, tuple, size); stup.tuple = bstup; - stup.datum1 = tuple->bt_blkno; + stup.datum1 = UInt32GetDatum(tuple->bt_blkno); stup.isnull1 = false; /* GetMemoryChunkSpace is not supported for bump contexts */ @@ -1836,7 +1837,7 @@ removeabbrev_index_brin(Tuplesortstate *state, SortTuple *stups, int count) BrinSortTuple *tuple; tuple = stups[i].tuple; - stups[i].datum1 = tuple->tuple.bt_blkno; + stups[i].datum1 = UInt32GetDatum(tuple->tuple.bt_blkno); } } @@ -1893,7 +1894,7 @@ readtup_index_brin(Tuplesortstate *state, SortTuple *stup, stup->tuple = tuple; /* set up first-column key value, which is block number */ - stup->datum1 = tuple->tuple.bt_blkno; + stup->datum1 = UInt32GetDatum(tuple->tuple.bt_blkno); } /* diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index ea35f30f49457..65561cc6bc337 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -271,12 +271,23 @@ Snapshot GetTransactionSnapshot(void) { /* - * This should not be called while doing logical decoding. Historic - * snapshots are only usable for catalog access, not for general-purpose - * queries. + * Return historic snapshot if doing logical decoding. + * + * Historic snapshots are only usable for catalog access, not for + * general-purpose queries. The caller is responsible for ensuring that + * the snapshot is used correctly! (PostgreSQL code never calls this + * during logical decoding, but extensions can do it.) */ if (HistoricSnapshotActive()) - elog(ERROR, "cannot take query snapshot during logical decoding"); + { + /* + * We'll never need a non-historic transaction snapshot in this + * (sub-)transaction, so there's no need to be careful to set one up + * for later calls to GetTransactionSnapshot(). + */ + Assert(!FirstSnapshotSet); + return HistoricSnapshot; + } /* First call in transaction? */ if (!FirstSnapshotSet) diff --git a/src/bin/initdb/Makefile b/src/bin/initdb/Makefile index 997e0a013e956..c0470efda92a3 100644 --- a/src/bin/initdb/Makefile +++ b/src/bin/initdb/Makefile @@ -20,7 +20,7 @@ include $(top_builddir)/src/Makefile.global # from libpq, else we have risks of version skew if we run with a libpq # shared library from a different PG version. Define # USE_PRIVATE_ENCODING_FUNCS to ensure that that happens. -override CPPFLAGS := -DUSE_PRIVATE_ENCODING_FUNCS -I$(libpq_srcdir) -I$(top_srcdir)/src/timezone $(ICU_CFLAGS) $(CPPFLAGS) +override CPPFLAGS := -DUSE_PRIVATE_ENCODING_FUNCS -I$(libpq_srcdir) -I$(top_srcdir)/src/timezone $(CPPFLAGS) $(ICU_CFLAGS) # We need libpq only because fe_utils does. LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(ICU_LIBS) diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index c17fda2bc81d0..92fe2f531f7a8 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -61,7 +61,7 @@ #include #ifdef HAVE_SHM_OPEN -#include "sys/mman.h" +#include #endif #include "access/xlog_internal.h" @@ -1128,15 +1128,14 @@ test_config_settings(void) * for a given max_connections value. Note that it has been carefully * crafted to provide specific values for the associated values in * trial_conns. We want it to return autovacuum_worker_slots's initial - * default value (16) for the maximum value in trial_conns (100), and we - * want it to return close to the minimum value we'd consider (3, which is - * the default of autovacuum_max_workers) for the minimum value in - * trial_conns (25). + * default value (16) for the maximum value in trial_conns[] (100), while + * it mustn't return less than the default value of autovacuum_max_workers + * (3) for the minimum value in trial_conns[]. */ #define AV_SLOTS_FOR_CONNS(nconns) ((nconns) / 6) static const int trial_conns[] = { - 100, 50, 40, 30, 25 + 100, 50, 40, 30, 20 }; static const int trial_bufs[] = { 16384, 8192, 4096, 3584, 3072, 2560, 2048, 1536, @@ -1186,13 +1185,6 @@ test_config_settings(void) printf("%d\n", n_connections); - /* - * We chose the default for autovacuum_worker_slots during the - * max_connections tests above, but we print a progress message anyway. - */ - printf(_("selecting default \"autovacuum_worker_slots\" ... %d\n"), - n_av_slots); - printf(_("selecting default \"shared_buffers\" ... ")); fflush(stdout); @@ -1588,9 +1580,6 @@ bootstrap_template1(void) bki_lines = replace_token(bki_lines, "ALIGNOF_POINTER", (sizeof(Pointer) == 4) ? "i" : "d"); - bki_lines = replace_token(bki_lines, "FLOAT8PASSBYVAL", - FLOAT8PASSBYVAL ? "true" : "false"); - bki_lines = replace_token(bki_lines, "POSTGRES", escape_quotes_bki(username)); @@ -1620,9 +1609,9 @@ bootstrap_template1(void) printfPQExpBuffer(&cmd, "\"%s\" --boot %s %s", backend_exec, boot_options, extra_options); appendPQExpBuffer(&cmd, " -X %d", wal_segment_size_mb * (1024 * 1024)); if (data_checksums) - appendPQExpBuffer(&cmd, " -k"); + appendPQExpBufferStr(&cmd, " -k"); if (debug) - appendPQExpBuffer(&cmd, " -d 5"); + appendPQExpBufferStr(&cmd, " -d 5"); PG_CMD_OPEN(cmd.data); diff --git a/src/bin/initdb/po/de.po b/src/bin/initdb/po/de.po index 5d59324b55797..43ea62f18273a 100644 --- a/src/bin/initdb/po/de.po +++ b/src/bin/initdb/po/de.po @@ -1,14 +1,14 @@ # German message translation file for initdb. -# Peter Eisentraut , 2003 - 2024. +# Peter Eisentraut , 2003 - 2025. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 17\n" +"Project-Id-Version: PostgreSQL 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-19 21:51+0000\n" -"PO-Revision-Date: 2024-06-20 10:36+0200\n" +"POT-Creation-Date: 2025-04-03 12:22+0000\n" +"PO-Revision-Date: 2025-04-03 16:13+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,22 +16,22 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "Detail: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "Tipp: " @@ -56,28 +56,28 @@ msgstr "konnte kein »%s« zum Ausführen finden" msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "konnte Pfad »%s« nicht in absolute Form auflösen: %m" -#: ../../common/exec.c:382 initdb.c:695 +#: ../../common/exec.c:363 initdb.c:753 #, c-format msgid "could not execute command \"%s\": %m" msgstr "konnte Befehl »%s« nicht ausführen: %m" -#: ../../common/exec.c:394 +#: ../../common/exec.c:375 #, c-format msgid "could not read from command \"%s\": %m" msgstr "konnte nicht von Befehl »%s« lesen: %m" -#: ../../common/exec.c:397 +#: ../../common/exec.c:378 #, c-format msgid "no data was returned by command \"%s\"" msgstr "Befehl »%s« gab keine Daten zurück" -#: ../../common/exec.c:424 +#: ../../common/exec.c:405 #, c-format msgid "%s() failed: %m" msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 -#: initdb.c:353 +#: ../../common/exec.c:543 ../../common/exec.c:588 ../../common/exec.c:680 +#: initdb.c:375 initdb.c:411 #, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -93,46 +93,46 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 -#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#: ../../common/file_utils.c:69 ../../common/file_utils.c:370 +#: ../../common/file_utils.c:428 ../../common/file_utils.c:502 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "konnte Dateisystem für Datei »%s« nicht synchronisieren: %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "diese Installation unterstützt Sync-Methode »%s« nicht" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 #: ../../common/pgfnames.c:48 ../../common/rmtree.c:63 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#: ../../common/file_utils.c:440 ../../common/file_utils.c:510 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" -#: ../../common/file_utils.c:498 +#: ../../common/file_utils.c:520 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" @@ -241,12 +241,12 @@ msgstr "%s muss im Bereich %d..%d sein" msgid "unrecognized sync method: %s" msgstr "unbekannte Sync-Methode: %s" -#: ../../fe_utils/string_utils.c:434 +#: ../../fe_utils/string_utils.c:587 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"\n" msgstr "Argument des Shell-Befehls enthält Newline oder Carriage Return: »%s«\n" -#: ../../fe_utils/string_utils.c:607 +#: ../../fe_utils/string_utils.c:760 #, c-format msgid "database name contains a newline or carriage return: \"%s\"\n" msgstr "Datenbankname enthält Newline oder Carriage Return: »%s«\n" @@ -261,274 +261,294 @@ msgstr "konnte Junction für »%s« nicht erzeugen: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "konnte Junction für »%s« nicht ermitteln: %s\n" -#: initdb.c:627 initdb.c:1619 +#: initdb.c:372 +#, c-format +msgid "_wsetlocale() failed" +msgstr "_wsetlocale() fehlgeschlagen" + +#: initdb.c:379 +#, c-format +msgid "setlocale() failed" +msgstr "setlocale() fehlgeschlagen" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale" +msgstr "konnte alte Locale nicht wiederherstellen" + +#: initdb.c:396 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "konnte alte Locale »%s« nicht wiederherstellen" + +#: initdb.c:685 initdb.c:1700 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" -#: initdb.c:671 initdb.c:975 initdb.c:995 +#: initdb.c:729 initdb.c:1035 initdb.c:1055 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "konnte Datei »%s« nicht zum Schreiben öffnen: %m" -#: initdb.c:675 initdb.c:978 initdb.c:997 +#: initdb.c:733 initdb.c:1038 initdb.c:1057 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" -#: initdb.c:679 +#: initdb.c:737 #, c-format msgid "could not close file \"%s\": %m" msgstr "konnte Datei »%s« nicht schließen: %m" -#: initdb.c:713 +#: initdb.c:771 #, c-format msgid "removing data directory \"%s\"" msgstr "entferne Datenverzeichnis »%s«" -#: initdb.c:715 +#: initdb.c:773 #, c-format msgid "failed to remove data directory" msgstr "konnte Datenverzeichnis nicht entfernen" -#: initdb.c:719 +#: initdb.c:777 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "entferne Inhalt des Datenverzeichnisses »%s«" -#: initdb.c:722 +#: initdb.c:780 #, c-format msgid "failed to remove contents of data directory" msgstr "konnte Inhalt des Datenverzeichnisses nicht entfernen" -#: initdb.c:727 +#: initdb.c:785 #, c-format msgid "removing WAL directory \"%s\"" msgstr "entferne WAL-Verzeichnis »%s«" -#: initdb.c:729 +#: initdb.c:787 #, c-format msgid "failed to remove WAL directory" msgstr "konnte WAL-Verzeichnis nicht entfernen" -#: initdb.c:733 +#: initdb.c:791 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "entferne Inhalt des WAL-Verzeichnisses »%s«" -#: initdb.c:735 +#: initdb.c:793 #, c-format msgid "failed to remove contents of WAL directory" msgstr "konnte Inhalt des WAL-Verzeichnisses nicht entfernen" -#: initdb.c:742 +#: initdb.c:800 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "Datenverzeichnis »%s« wurde auf Anwenderwunsch nicht entfernt" -#: initdb.c:746 +#: initdb.c:804 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL-Verzeichnis »%s« wurde auf Anwenderwunsch nicht entfernt" -#: initdb.c:764 +#: initdb.c:822 #, c-format msgid "cannot be run as root" msgstr "kann nicht als root ausgeführt werden" -#: initdb.c:765 +#: initdb.c:823 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "Bitte loggen Sie sich (z.B. mit »su«) als der (unprivilegierte) Benutzer ein, der Eigentümer des Serverprozesses sein soll." -#: initdb.c:797 +#: initdb.c:855 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "»%s« ist keine gültige Serverkodierung" -#: initdb.c:941 +#: initdb.c:1001 #, c-format msgid "file \"%s\" does not exist" msgstr "Datei »%s« existiert nicht" -#: initdb.c:942 initdb.c:947 initdb.c:954 +#: initdb.c:1002 initdb.c:1007 initdb.c:1014 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "Das könnte bedeuten, dass Ihre Installation fehlerhaft ist oder dass Sie das falsche Verzeichnis mit der Kommandozeilenoption -L angegeben haben." -#: initdb.c:946 +#: initdb.c:1006 #, c-format msgid "could not access file \"%s\": %m" msgstr "konnte nicht auf Datei »%s« zugreifen: %m" -#: initdb.c:953 +#: initdb.c:1013 #, c-format msgid "file \"%s\" is not a regular file" msgstr "Datei »%s« ist keine normale Datei" -#: initdb.c:1086 +#: initdb.c:1158 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "wähle Implementierung von dynamischem Shared Memory ... " -#: initdb.c:1095 +#: initdb.c:1168 #, c-format msgid "selecting default \"max_connections\" ... " msgstr "wähle Vorgabewert für »max_connections« ... " -#: initdb.c:1115 +#: initdb.c:1193 +#, c-format +msgid "selecting default \"autovacuum_worker_slots\" ... %d\n" +msgstr "wähle Vorgabewert für »autovacuum_worker_slots« ... %d\n" + +#: initdb.c:1196 #, c-format msgid "selecting default \"shared_buffers\" ... " msgstr "wähle Vorgabewert für »shared_buffers« ... " -#: initdb.c:1138 +#: initdb.c:1219 #, c-format msgid "selecting default time zone ... " msgstr "wähle Vorgabewert für Zeitzone ... " -#: initdb.c:1217 +#: initdb.c:1299 msgid "creating configuration files ... " msgstr "erzeuge Konfigurationsdateien ... " -#: initdb.c:1370 initdb.c:1384 initdb.c:1451 initdb.c:1462 +#: initdb.c:1451 initdb.c:1465 initdb.c:1532 initdb.c:1543 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "konnte Zugriffsrechte von »%s« nicht ändern: %m" -#: initdb.c:1481 +#: initdb.c:1562 #, c-format msgid "running bootstrap script ... " msgstr "führe Bootstrap-Skript aus ... " -#: initdb.c:1493 +#: initdb.c:1574 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "Eingabedatei »%s« gehört nicht zu PostgreSQL %s" -#: initdb.c:1495 +#: initdb.c:1576 #, c-format msgid "Specify the correct path using the option -L." msgstr "Geben Sie den korrekten Pfad mit der Option -L an." -#: initdb.c:1597 +#: initdb.c:1678 msgid "Enter new superuser password: " msgstr "Geben Sie das neue Superuser-Passwort ein: " -#: initdb.c:1598 +#: initdb.c:1679 msgid "Enter it again: " msgstr "Geben Sie es noch einmal ein: " -#: initdb.c:1601 +#: initdb.c:1682 #, c-format msgid "Passwords didn't match.\n" msgstr "Passwörter stimmten nicht überein.\n" -#: initdb.c:1625 +#: initdb.c:1706 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "konnte Passwort nicht aus Datei »%s« lesen: %m" -#: initdb.c:1628 +#: initdb.c:1709 #, c-format msgid "password file \"%s\" is empty" msgstr "Passwortdatei »%s« ist leer" -#: initdb.c:2040 +#: initdb.c:2121 #, c-format msgid "caught signal\n" msgstr "Signal abgefangen\n" -#: initdb.c:2046 +#: initdb.c:2127 #, c-format msgid "could not write to child process: %s\n" msgstr "konnte nicht an Kindprozess schreiben: %s\n" -#: initdb.c:2054 +#: initdb.c:2135 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2143 -#, c-format -msgid "setlocale() failed" -msgstr "setlocale() fehlgeschlagen" - -#: initdb.c:2161 +#: initdb.c:2217 initdb.c:2263 #, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "konnte alte Locale »%s« nicht wiederherstellen" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "Locale-Name »%s« enthält Nicht-ASCII-Zeichen" -#: initdb.c:2169 +#: initdb.c:2243 #, c-format msgid "invalid locale name \"%s\"" msgstr "ungültiger Locale-Name: »%s«" -#: initdb.c:2170 +#: initdb.c:2244 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "Wenn der Locale-Name nur für ICU gültig ist, verwenden Sie --icu-locale." -#: initdb.c:2183 +#: initdb.c:2257 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "ungültige Locale-Einstellungen; prüfen Sie die Umgebungsvariablen LANG und LC_*" -#: initdb.c:2209 initdb.c:2233 +#: initdb.c:2288 initdb.c:2312 #, c-format msgid "encoding mismatch" msgstr "unpassende Kodierungen" -#: initdb.c:2210 +#: initdb.c:2289 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "Die von Ihnen gewählte Kodierung (%s) und die von der gewählten Locale verwendete Kodierung (%s) passen nicht zu einander. Das würde in verschiedenen Zeichenkettenfunktionen zu Fehlverhalten führen." -#: initdb.c:2215 initdb.c:2236 +#: initdb.c:2294 initdb.c:2315 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "Starten Sie %s erneut und geben Sie entweder keine Kodierung explizit an oder wählen Sie eine passende Kombination." -#: initdb.c:2234 +#: initdb.c:2313 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "Die von Ihnen gewählte Kodierung (%s) wird vom ICU-Provider nicht unterstützt." -#: initdb.c:2285 +#: initdb.c:2364 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "konnte Locale-Namen »%s« nicht in Sprach-Tag umwandeln: %s" -#: initdb.c:2291 initdb.c:2343 initdb.c:2435 +#: initdb.c:2370 initdb.c:2422 initdb.c:2516 #, c-format msgid "ICU is not supported in this build" msgstr "ICU wird in dieser Installation nicht unterstützt" -#: initdb.c:2314 +#: initdb.c:2393 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "konnte Sprache nicht aus Locale »%s« ermitteln: %s" -#: initdb.c:2340 +#: initdb.c:2419 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "Locale »%s« hat unbekannte Sprache »%s«" -#: initdb.c:2401 +#: initdb.c:2480 #, c-format msgid "locale must be specified if provider is %s" msgstr "Locale muss angegeben werden, wenn der Provider %s ist" -#: initdb.c:2412 +#: initdb.c:2493 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "ungültiger Locale-Name »%s« für Provider »builtin«" -#: initdb.c:2423 +#: initdb.c:2504 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "Verwende Sprach-Tag »%s« für ICU-Locale »%s«.\n" -#: initdb.c:2446 +#: initdb.c:2527 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -537,17 +557,17 @@ msgstr "" "%s initialisiert einen PostgreSQL-Datenbankcluster.\n" "\n" -#: initdb.c:2447 +#: initdb.c:2528 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: initdb.c:2448 +#: initdb.c:2529 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATENVERZEICHNIS]\n" -#: initdb.c:2449 +#: initdb.c:2530 #, c-format msgid "" "\n" @@ -556,65 +576,65 @@ msgstr "" "\n" "Optionen:\n" -#: initdb.c:2450 +#: initdb.c:2531 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METHODE vorgegebene Authentifizierungsmethode für lokale Verbindungen\n" -#: initdb.c:2451 +#: initdb.c:2532 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=METHODE vorgegebene Authentifizierungsmethode für lokale\n" " TCP/IP-Verbindungen\n" -#: initdb.c:2452 +#: initdb.c:2533 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=METHODE vorgegebene Authentifizierungsmethode für Verbindungen\n" " auf lokalen Sockets\n" -#: initdb.c:2453 +#: initdb.c:2534 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATENVERZ Datenverzeichnis für diesen Datenbankcluster\n" -#: initdb.c:2454 +#: initdb.c:2535 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=KODIERUNG setze Standardkodierung für neue Datenbanken\n" -#: initdb.c:2455 +#: initdb.c:2536 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access Lese- und Ausführungsrechte am Datenverzeichnis\n" " für Gruppe setzen\n" -#: initdb.c:2456 +#: initdb.c:2537 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=LOCALE setze ICU-Locale-ID für neue Datenbanken\n" -#: initdb.c:2457 +#: initdb.c:2538 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" msgstr "" " --icu-rules=REGELN setze zusätzliche ICU-Sortierfolgenregeln für neue\n" " Datenbanken\n" -#: initdb.c:2458 +#: initdb.c:2539 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums Datenseitenprüfsummen verwenden\n" -#: initdb.c:2459 +#: initdb.c:2540 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE setze Standardlocale für neue Datenbanken\n" -#: initdb.c:2460 +#: initdb.c:2541 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -628,12 +648,12 @@ msgstr "" " für neue Datenbanken (Voreinstellung aus der\n" " Umgebung entnommen)\n" -#: initdb.c:2464 +#: initdb.c:2545 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale entspricht --locale=C\n" -#: initdb.c:2465 +#: initdb.c:2546 #, c-format msgid "" " --builtin-locale=LOCALE\n" @@ -642,7 +662,7 @@ msgstr "" " --builtin-locale=LOCALE\n" " setze Locale für Provider »builtin« für neue Datenbanken\n" -#: initdb.c:2467 +#: initdb.c:2548 #, c-format msgid "" " --locale-provider={builtin|libc|icu}\n" @@ -651,12 +671,17 @@ msgstr "" " --locale-provider={builtin|libc|icu}\n" " setze Standard-Locale-Provider für neue Datenbanken\n" -#: initdb.c:2469 +#: initdb.c:2550 +#, c-format +msgid " --no-data-checksums do not use data page checksums\n" +msgstr " --no-data-checksums Datenseitenprüfsummen nicht verwenden\n" + +#: initdb.c:2551 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=DATEI lese Passwort des neuen Superusers aus Datei\n" -#: initdb.c:2470 +#: initdb.c:2552 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -665,27 +690,27 @@ msgstr "" " -T, --text-search-config=KFG\n" " Standardtextsuchekonfiguration\n" -#: initdb.c:2472 +#: initdb.c:2554 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME Datenbank-Superusername\n" -#: initdb.c:2473 +#: initdb.c:2555 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt frage nach Passwort für neuen Superuser\n" -#: initdb.c:2474 +#: initdb.c:2556 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALVERZ Verzeichnis für das Write-Ahead-Log\n" -#: initdb.c:2475 +#: initdb.c:2557 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=ZAHL Größe eines WAL-Segments, in Megabyte\n" -#: initdb.c:2476 +#: initdb.c:2558 #, c-format msgid "" "\n" @@ -694,63 +719,68 @@ msgstr "" "\n" "Weniger häufig verwendete Optionen:\n" -#: initdb.c:2477 +#: initdb.c:2559 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" msgstr " -c, --set NAME=WERT Voreinstellung für Serverparameter setzen\n" -#: initdb.c:2478 +#: initdb.c:2560 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug erzeuge eine Menge Debug-Ausgaben\n" -#: initdb.c:2479 +#: initdb.c:2561 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches debug_discard_caches=1 setzen\n" -#: initdb.c:2480 +#: initdb.c:2562 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L VERZEICHNIS wo sind die Eingabedateien zu finden\n" -#: initdb.c:2481 +#: initdb.c:2563 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean nach Fehlern nicht aufräumen\n" -#: initdb.c:2482 +#: initdb.c:2564 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: initdb.c:2483 +#: initdb.c:2565 +#, c-format +msgid " --no-sync-data-files do not sync files within database directories\n" +msgstr " --no-sync-data-files Dateien in Datenbankverzeichnissen nicht synchronisieren\n" + +#: initdb.c:2566 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions Anleitung für nächste Schritte nicht ausgeben\n" -#: initdb.c:2484 +#: initdb.c:2567 #, c-format msgid " -s, --show show internal settings, then exit\n" msgstr " -s, --show interne Einstellungen zeigen, dann beenden\n" -#: initdb.c:2485 +#: initdb.c:2568 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr "" " --sync-method=METHODE Methode zum Synchronisieren vond Dateien auf\n" " Festplatte setzen\n" -#: initdb.c:2486 +#: initdb.c:2569 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr "" " -S, --sync-only nur Datenbankdateien auf Festplatte synchronisieren,\n" " dann beenden\n" -#: initdb.c:2487 +#: initdb.c:2570 #, c-format msgid "" "\n" @@ -759,17 +789,17 @@ msgstr "" "\n" "Weitere Optionen:\n" -#: initdb.c:2488 +#: initdb.c:2571 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: initdb.c:2489 +#: initdb.c:2572 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: initdb.c:2490 +#: initdb.c:2573 #, c-format msgid "" "\n" @@ -780,7 +810,7 @@ msgstr "" "Wenn kein Datenverzeichnis angegeben ist, dann wird die Umgebungsvariable\n" "PGDATA verwendet.\n" -#: initdb.c:2492 +#: initdb.c:2575 #, c-format msgid "" "\n" @@ -789,72 +819,72 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: initdb.c:2493 +#: initdb.c:2576 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: initdb.c:2517 +#: initdb.c:2600 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "ungültige Authentifizierungsmethode »%s« für »%s«-Verbindungen" -#: initdb.c:2531 +#: initdb.c:2614 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "Superuser-Passwort muss angegeben werden um Passwortauthentifizierung einzuschalten" -#: initdb.c:2550 +#: initdb.c:2633 #, c-format msgid "no data directory specified" msgstr "kein Datenverzeichnis angegeben" -#: initdb.c:2551 +#: initdb.c:2634 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "Sie müssen das Verzeichnis angeben, wo dieses Datenbanksystem abgelegt werden soll. Machen Sie dies entweder mit der Kommandozeilenoption -D oder mit der Umgebungsvariable PGDATA." -#: initdb.c:2568 +#: initdb.c:2651 #, c-format msgid "could not set environment" msgstr "konnte Umgebung nicht setzen" -#: initdb.c:2586 +#: initdb.c:2669 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "Programm »%s« wird von %s benötigt, aber wurde nicht im selben Verzeichnis wie »%s« gefunden" -#: initdb.c:2589 +#: initdb.c:2672 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "Programm »%s« wurde von »%s« gefunden, aber es hatte nicht die gleiche Version wie %s" -#: initdb.c:2604 +#: initdb.c:2687 #, c-format msgid "input file location must be an absolute path" msgstr "Eingabedatei muss absoluten Pfad haben" -#: initdb.c:2621 +#: initdb.c:2704 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Der Datenbankcluster wird mit der Locale »%s« initialisiert werden.\n" -#: initdb.c:2624 +#: initdb.c:2707 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "Der Datenbankcluster wird mit dieser Locale-Konfiguration initialisiert werden:\n" -#: initdb.c:2625 +#: initdb.c:2708 #, c-format msgid " locale provider: %s\n" msgstr " Locale-Provider: %s\n" -#: initdb.c:2627 +#: initdb.c:2710 #, c-format msgid " default collation: %s\n" msgstr " Standardsortierfolge: %s\n" -#: initdb.c:2628 +#: initdb.c:2711 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -871,22 +901,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2658 +#: initdb.c:2741 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "konnte keine passende Kodierung für Locale »%s« finden" -#: initdb.c:2660 +#: initdb.c:2743 #, c-format msgid "Rerun %s with the -E option." msgstr "Führen Sie %s erneut mit der Option -E aus." -#: initdb.c:2661 initdb.c:3204 initdb.c:3324 initdb.c:3344 +#: initdb.c:2744 initdb.c:3282 initdb.c:3408 initdb.c:3428 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: initdb.c:2673 +#: initdb.c:2756 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -895,112 +925,112 @@ msgstr "" "Die von der Locale gesetzte Kodierung »%s« ist nicht als serverseitige Kodierung erlaubt.\n" "Die Standarddatenbankkodierung wird stattdessen auf »%s« gesetzt.\n" -#: initdb.c:2678 +#: initdb.c:2761 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "Locale »%s« benötigt nicht unterstützte Kodierung »%s«" -#: initdb.c:2680 +#: initdb.c:2763 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "Kodierung »%s« ist nicht als serverseitige Kodierung erlaubt." -#: initdb.c:2682 +#: initdb.c:2765 #, c-format msgid "Rerun %s with a different locale selection." msgstr "Starten Sie %s erneut mit einer anderen Locale-Wahl." -#: initdb.c:2690 +#: initdb.c:2773 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Die Standarddatenbankkodierung wurde entsprechend auf »%s« gesetzt.\n" -#: initdb.c:2704 +#: initdb.c:2789 #, c-format msgid "builtin provider locale \"%s\" requires encoding \"%s\"" msgstr "Locale »%s« vom Provider »builtin« benötigt Kodierung »%s«" -#: initdb.c:2766 +#: initdb.c:2851 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "konnte keine passende Textsuchekonfiguration für Locale »%s« finden" -#: initdb.c:2777 +#: initdb.c:2862 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "passende Textsuchekonfiguration für Locale »%s« ist unbekannt" -#: initdb.c:2782 +#: initdb.c:2867 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "angegebene Textsuchekonfiguration »%s« passt möglicherweise nicht zur Locale »%s«" -#: initdb.c:2787 +#: initdb.c:2872 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Die Standardtextsuchekonfiguration wird auf »%s« gesetzt.\n" -#: initdb.c:2830 initdb.c:2901 +#: initdb.c:2906 initdb.c:2977 #, c-format msgid "creating directory %s ... " msgstr "erzeuge Verzeichnis %s ... " -#: initdb.c:2835 initdb.c:2906 initdb.c:2954 initdb.c:3011 +#: initdb.c:2911 initdb.c:2982 initdb.c:3030 initdb.c:3087 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: initdb.c:2844 initdb.c:2916 +#: initdb.c:2920 initdb.c:2992 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "berichtige Zugriffsrechte des bestehenden Verzeichnisses %s ... " -#: initdb.c:2849 initdb.c:2921 +#: initdb.c:2925 initdb.c:2997 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "konnte Rechte des Verzeichnisses »%s« nicht ändern: %m" -#: initdb.c:2861 initdb.c:2933 +#: initdb.c:2937 initdb.c:3009 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "Verzeichnis »%s« existiert aber ist nicht leer" -#: initdb.c:2865 +#: initdb.c:2941 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "Wenn Sie ein neues Datenbanksystem erzeugen wollen, entfernen oder leeren Sie das Verzeichnis »%s« or führen Sie %s mit einem anderen Argument als »%s« aus." -#: initdb.c:2873 initdb.c:2943 initdb.c:3369 +#: initdb.c:2949 initdb.c:3019 initdb.c:3453 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" -#: initdb.c:2894 +#: initdb.c:2970 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL-Verzeichnis muss absoluten Pfad haben" -#: initdb.c:2937 +#: initdb.c:3013 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "Wenn Sie dort den WAL ablegen wollen, entfernen oder leeren Sie das Verzeichnis »%s«." -#: initdb.c:2947 +#: initdb.c:3023 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: initdb.c:2966 +#: initdb.c:3042 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "Es enthält eine unsichtbare Datei (beginnt mit Punkt), vielleicht weil es ein Einhängepunkt ist." -#: initdb.c:2968 +#: initdb.c:3044 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "Es enthält ein Verzeichnis »lost+found«, vielleicht weil es ein Einhängepunkt ist." -#: initdb.c:2970 +#: initdb.c:3046 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -1009,65 +1039,65 @@ msgstr "" "Einen Einhängepunkt direkt als Datenverzeichnis zu verwenden wird nicht empfohlen.\n" "Erzeugen Sie ein Unterverzeichnis unter dem Einhängepunkt." -#: initdb.c:2997 +#: initdb.c:3073 #, c-format msgid "creating subdirectories ... " msgstr "erzeuge Unterverzeichnisse ... " -#: initdb.c:3040 +#: initdb.c:3116 msgid "performing post-bootstrap initialization ... " msgstr "führe Post-Bootstrap-Initialisierung durch ... " -#: initdb.c:3203 +#: initdb.c:3281 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" -#: initdb.c:3228 +#: initdb.c:3306 #, c-format msgid "Running in debug mode.\n" msgstr "Debug-Modus ist an.\n" -#: initdb.c:3232 +#: initdb.c:3310 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "No-Clean-Modus ist an. Bei Fehlern wird nicht aufgeräumt.\n" -#: initdb.c:3305 +#: initdb.c:3383 #, c-format msgid "unrecognized locale provider: %s" msgstr "unbekannter Locale-Provider: %s" -#: initdb.c:3342 +#: initdb.c:3426 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: initdb.c:3349 initdb.c:3353 initdb.c:3357 +#: initdb.c:3433 initdb.c:3437 initdb.c:3441 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s kann nur angegeben werden, wenn Locale-Provider »%s« gewählt ist" -#: initdb.c:3371 initdb.c:3434 +#: initdb.c:3455 initdb.c:3518 msgid "syncing data to disk ... " msgstr "synchronisiere Daten auf Festplatte ... " -#: initdb.c:3379 +#: initdb.c:3463 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "Passwortprompt und Passwortdatei können nicht zusammen angegeben werden" -#: initdb.c:3390 +#: initdb.c:3474 #, c-format msgid "argument of %s must be a power of two between 1 and 1024" msgstr "Argument von %s muss eine Zweierpotenz zwischen 1 und 1024 sein" -#: initdb.c:3403 +#: initdb.c:3487 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "Superuser-Name »%s« nicht erlaubt; Rollennamen können nicht mit »pg_« anfangen" -#: initdb.c:3405 +#: initdb.c:3489 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1078,17 +1108,17 @@ msgstr "" "»%s« gehören. Diesem Benutzer muss auch der Serverprozess gehören.\n" "\n" -#: initdb.c:3421 +#: initdb.c:3505 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Datenseitenprüfsummen sind eingeschaltet.\n" -#: initdb.c:3423 +#: initdb.c:3507 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Datenseitenprüfsummen sind ausgeschaltet.\n" -#: initdb.c:3440 +#: initdb.c:3524 #, c-format msgid "" "\n" @@ -1099,22 +1129,22 @@ msgstr "" "Synchronisation auf Festplatte übersprungen.\n" "Das Datenverzeichnis könnte verfälscht werden, falls das Betriebssystem abstürzt.\n" -#: initdb.c:3445 +#: initdb.c:3529 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "Authentifizierung für lokale Verbindungen auf »trust« gesetzt" -#: initdb.c:3446 +#: initdb.c:3530 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "Sie können dies ändern, indem Sie pg_hba.conf bearbeiten oder beim nächsten Aufruf von initdb die Option -A, oder --auth-local und --auth-host, verwenden." #. translator: This is a placeholder in a shell command. -#: initdb.c:3476 +#: initdb.c:3560 msgid "logfile" msgstr "logdatei" -#: initdb.c:3478 +#: initdb.c:3562 #, c-format msgid "" "\n" diff --git a/src/bin/initdb/po/es.po b/src/bin/initdb/po/es.po index 449d2020a6ecd..1c12d9c641771 100644 --- a/src/bin/initdb/po/es.po +++ b/src/bin/initdb/po/es.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL) 16\n" +"Project-Id-Version: initdb (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-10-03 07:20+0000\n" -"PO-Revision-Date: 2023-10-04 11:47+0200\n" +"POT-Creation-Date: 2025-02-16 19:50+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -40,33 +40,48 @@ msgstr "detalle: " msgid "hint: " msgstr "consejo: " -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binario «%s» no válido: %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "no se pudo leer el binario «%s»: %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "no se pudo resolver la ruta «%s» a forma absoluta: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 initdb.c:750 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "no se pudo ejecutar la orden «%s»: %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "no se pudo leer desde la orden «%s»: %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "la orden «%s» no retornó datos" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() falló: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 -#: initdb.c:349 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:372 initdb.c:408 #, c-format msgid "out of memory" msgstr "memoria agotada" @@ -82,35 +97,46 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: ../../common/file_utils.c:162 ../../common/pgfnames.c:48 -#: ../../common/rmtree.c:63 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "esta instalación no soporta el método de sync «%s»" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/pgfnames.c:48 ../../common/rmtree.c:63 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../../common/file_utils.c:196 ../../common/pgfnames.c:69 -#: ../../common/rmtree.c:104 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "no se pudo abrir el archivo «%s»: %m" - -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" -#: ../../common/file_utils.c:379 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" @@ -150,12 +176,12 @@ msgstr "no se pudo re-ejecutar con el token restringido: código de error %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "no se pudo obtener el código de salida del subproceso: código de error %lu" -#: ../../common/rmtree.c:95 +#: ../../common/rmtree.c:97 #, c-format msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: ../../common/rmtree.c:122 +#: ../../common/rmtree.c:124 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" @@ -204,6 +230,31 @@ msgstr "el proceso hijo fue terminado por una señal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "el valor «%s» no es válido para la opción %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s debe estar en el rango %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "método sync no reconocido: %s" + +#: ../../fe_utils/string_utils.c:587 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "el argumento de la orden de shell contiene un salto de línea o retorno de carro: «%s»\n" + +#: ../../fe_utils/string_utils.c:760 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "el nombre de base de datos contiene un salto de línea o retorno de carro: «%s»\n" + #: ../../port/dirmod.c:287 #, c-format msgid "could not set junction for \"%s\": %s\n" @@ -214,276 +265,291 @@ msgstr "no se pudo definir un junction para «%s»: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "no se pudo obtener junction para «%s»: %s\n" -#: initdb.c:618 initdb.c:1613 +#: initdb.c:369 +#, c-format +msgid "_wsetlocale() failed" +msgstr "_wsetlocale() falló" + +#: initdb.c:376 +#, c-format +msgid "setlocale() failed" +msgstr "setlocale() falló" + +#: initdb.c:390 +#, c-format +msgid "failed to restore old locale" +msgstr "no se pudo restaurar la configuración regional anterior" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "no se pudo restaurar la configuración regional anterior «%s»" + +#: initdb.c:682 initdb.c:1674 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" -#: initdb.c:662 initdb.c:966 initdb.c:986 +#: initdb.c:726 initdb.c:1030 initdb.c:1050 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "no se pudo abrir el archivo «%s» para escritura: %m" -#: initdb.c:666 initdb.c:969 initdb.c:988 +#: initdb.c:730 initdb.c:1033 initdb.c:1052 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" -#: initdb.c:670 +#: initdb.c:734 #, c-format msgid "could not close file \"%s\": %m" msgstr "no se pudo cerrar el archivo «%s»: %m" -#: initdb.c:686 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "no se pudo ejecutar la orden «%s»: %m" - -#: initdb.c:704 +#: initdb.c:768 #, c-format msgid "removing data directory \"%s\"" msgstr "eliminando el directorio de datos «%s»" -#: initdb.c:706 +#: initdb.c:770 #, c-format msgid "failed to remove data directory" msgstr "no se pudo eliminar el directorio de datos" -#: initdb.c:710 +#: initdb.c:774 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "eliminando el contenido del directorio «%s»" -#: initdb.c:713 +#: initdb.c:777 #, c-format msgid "failed to remove contents of data directory" msgstr "no se pudo eliminar el contenido del directorio de datos" -#: initdb.c:718 +#: initdb.c:782 #, c-format msgid "removing WAL directory \"%s\"" msgstr "eliminando el directorio de WAL «%s»" -#: initdb.c:720 +#: initdb.c:784 #, c-format msgid "failed to remove WAL directory" msgstr "no se pudo eliminar el directorio de WAL" -#: initdb.c:724 +#: initdb.c:788 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "eliminando el contenido del directorio de WAL «%s»" -#: initdb.c:726 +#: initdb.c:790 #, c-format msgid "failed to remove contents of WAL directory" msgstr "no se pudo eliminar el contenido del directorio de WAL" -#: initdb.c:733 +#: initdb.c:797 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "directorio de datos «%s» no eliminado a petición del usuario" -#: initdb.c:737 +#: initdb.c:801 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "directorio de WAL «%s» no eliminado a petición del usuario" -#: initdb.c:755 +#: initdb.c:819 #, c-format msgid "cannot be run as root" msgstr "no se puede ejecutar como «root»" -#: initdb.c:756 +#: initdb.c:820 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "Por favor conéctese (usando, por ejemplo, «su») con un usuario no privilegiado, quien ejecutará el proceso servidor." -#: initdb.c:788 +#: initdb.c:852 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "«%s» no es un nombre válido de codificación" -#: initdb.c:932 +#: initdb.c:996 #, c-format msgid "file \"%s\" does not exist" msgstr "el archivo «%s» no existe" -#: initdb.c:933 initdb.c:938 initdb.c:945 +#: initdb.c:997 initdb.c:1002 initdb.c:1009 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "Esto puede significar que tiene una instalación corrupta o ha identificado el directorio equivocado con la opción -L." -#: initdb.c:937 +#: initdb.c:1001 #, c-format msgid "could not access file \"%s\": %m" msgstr "no se pudo acceder al archivo «%s»: %m" -#: initdb.c:944 +#: initdb.c:1008 #, c-format msgid "file \"%s\" is not a regular file" msgstr "el archivo «%s» no es un archivo regular" -#: initdb.c:1077 +#: initdb.c:1141 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "seleccionando implementación de memoria compartida dinámica ... " -#: initdb.c:1086 +#: initdb.c:1150 #, c-format -msgid "selecting default max_connections ... " -msgstr "seleccionando el valor para max_connections ... " +msgid "selecting default \"max_connections\" ... " +msgstr "seleccionando el valor para «max_connections» ... " -#: initdb.c:1106 +#: initdb.c:1170 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "seleccionando el valor para shared_buffers ... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "seleccionando el valor para «shared_buffers» ... " -#: initdb.c:1129 +#: initdb.c:1193 #, c-format msgid "selecting default time zone ... " msgstr "seleccionando el huso horario por omisión ... " -#: initdb.c:1206 +#: initdb.c:1272 msgid "creating configuration files ... " msgstr "creando archivos de configuración ... " -#: initdb.c:1367 initdb.c:1381 initdb.c:1448 initdb.c:1459 +#: initdb.c:1425 initdb.c:1439 initdb.c:1506 initdb.c:1517 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "no se pudo cambiar los permisos de «%s»: %m" -#: initdb.c:1477 +#: initdb.c:1536 #, c-format msgid "running bootstrap script ... " msgstr "ejecutando script de inicio (bootstrap) ... " -#: initdb.c:1489 +#: initdb.c:1548 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "el archivo de entrada «%s» no pertenece a PostgreSQL %s" -#: initdb.c:1491 +#: initdb.c:1550 #, c-format msgid "Specify the correct path using the option -L." msgstr "Especifique la ruta correcta usando la opción -L." -#: initdb.c:1591 +#: initdb.c:1652 msgid "Enter new superuser password: " msgstr "Ingrese la nueva contraseña del superusuario: " -#: initdb.c:1592 +#: initdb.c:1653 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: initdb.c:1595 +#: initdb.c:1656 #, c-format msgid "Passwords didn't match.\n" msgstr "Las contraseñas no coinciden.\n" -#: initdb.c:1619 +#: initdb.c:1680 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "no se pudo leer la contraseña desde el archivo «%s»: %m" -#: initdb.c:1622 +#: initdb.c:1683 #, c-format msgid "password file \"%s\" is empty" msgstr "el archivo de contraseña «%s» está vacío" -#: initdb.c:2034 +#: initdb.c:2095 #, c-format msgid "caught signal\n" msgstr "se ha capturado una señal\n" -#: initdb.c:2040 +#: initdb.c:2101 #, c-format msgid "could not write to child process: %s\n" msgstr "no se pudo escribir al proceso hijo: %s\n" -#: initdb.c:2048 +#: initdb.c:2109 #, c-format msgid "ok\n" msgstr "hecho\n" -#: initdb.c:2137 +#: initdb.c:2191 initdb.c:2237 #, c-format -msgid "setlocale() failed" -msgstr "setlocale() falló" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "el nombre de configuración regional «%s» contiene caracteres no ASCII" -#: initdb.c:2155 -#, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "no se pudo restaurar la configuración regional anterior «%s»" - -#: initdb.c:2163 +#: initdb.c:2217 #, c-format msgid "invalid locale name \"%s\"" msgstr "nombre de configuración regional «%s» no es válido" -#: initdb.c:2164 +#: initdb.c:2218 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." -msgstr "Si el nombre de configuración regional es específico de ICU, use --icu-locale." +msgstr "Si el nombre de configuración regional es específico a ICU, utilice --icu-locale." -#: initdb.c:2177 +#: initdb.c:2231 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "configuración regional inválida; revise las variables de entorno LANG y LC_*" -#: initdb.c:2203 initdb.c:2227 +#: initdb.c:2262 initdb.c:2286 #, c-format msgid "encoding mismatch" msgstr "codificaciones no coinciden" -#: initdb.c:2204 +#: initdb.c:2263 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "La codificación que seleccionó (%s) y la codificación de la configuración regional elegida (%s) no coinciden. Esto llevaría a comportamientos erráticos en ciertas funciones de procesamiento de cadenas de caracteres." -#: initdb.c:2209 initdb.c:2230 +#: initdb.c:2268 initdb.c:2289 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "" "Vuelva a ejecutar %s sin escoger explícitamente una codificación, o bien\n" "escoja una combinación coincidente." -#: initdb.c:2228 +#: initdb.c:2287 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "La codificación que seleccionó (%s) no está soportada con el proveedor ICU." -#: initdb.c:2279 +#: initdb.c:2338 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "no se pudo convertir el nombre de configuración regional «%s» a etiqueta de lenguaje: %s" -#: initdb.c:2285 initdb.c:2337 initdb.c:2416 +#: initdb.c:2344 initdb.c:2396 initdb.c:2488 #, c-format msgid "ICU is not supported in this build" msgstr "ICU no está soportado en este servidor" -#: initdb.c:2308 +#: initdb.c:2367 #, c-format msgid "could not get language from locale \"%s\": %s" -msgstr "no se pudo obtener el lenguaje de la configuración regional «%s»: %s" +msgstr "no se pudo el lenguaje de la configuración regional «%s»: %s" -#: initdb.c:2334 +#: initdb.c:2393 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" -msgstr "la configuración regional «%s» tiene lenguaje «%s» desconocido" +msgstr "la configuración regional «%s» no idioma desconocido «%s»" + +#: initdb.c:2454 +#, c-format +msgid "locale must be specified if provider is %s" +msgstr "la configuración regional debe especificarse si el proveedor es %s" -#: initdb.c:2400 +#: initdb.c:2465 #, c-format -msgid "ICU locale must be specified" -msgstr "el locale ICU debe ser especificado" +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "nombre de configuración regional «%s» no válido para el proveedor builtin" -#: initdb.c:2404 +#: initdb.c:2476 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" -msgstr "Usando la marca de lenguaje «%s» para la configuración regional ICU «%s».\n" +msgstr "Usando la etiqueta de idioma «%s» para la configuración regional ICU «%s».\n" -#: initdb.c:2427 +#: initdb.c:2499 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -492,17 +558,17 @@ msgstr "" "%s inicializa un cluster de base de datos PostgreSQL.\n" "\n" -#: initdb.c:2428 +#: initdb.c:2500 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: initdb.c:2429 +#: initdb.c:2501 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPCIÓN]... [DATADIR]\n" -#: initdb.c:2430 +#: initdb.c:2502 #, c-format msgid "" "\n" @@ -511,69 +577,69 @@ msgstr "" "\n" "Opciones:\n" -#: initdb.c:2431 +#: initdb.c:2503 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr "" " -A, --auth=MÉTODO método de autentificación por omisión para\n" " conexiones locales\n" -#: initdb.c:2432 +#: initdb.c:2504 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=MÉTODO método de autentificación por omisión para\n" " conexiones locales TCP/IP\n" -#: initdb.c:2433 +#: initdb.c:2505 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=MÉTODO método de autentificación por omisión para\n" " conexiones de socket local\n" -#: initdb.c:2434 +#: initdb.c:2506 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR ubicación para este cluster de bases de datos\n" -#: initdb.c:2435 +#: initdb.c:2507 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=CODIF codificación por omisión para nuevas bases de datos\n" -#: initdb.c:2436 +#: initdb.c:2508 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access dar al grupo permisos de lectura/ejecución sobre\n" " el directorio de datos\n" -#: initdb.c:2437 +#: initdb.c:2509 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr "" " --icu-locale=LOCALE definir el ID de configuración regional ICU para\n" " nuevas bases de datos\n" -#: initdb.c:2438 +#: initdb.c:2510 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" -msgstr " --icu-rules=REGLAS reglas adicionales ICU en nuevas bases de datos\n" +msgstr " --icu-rules=REGLAS reglas de ordenamiento ICU adicionales para nuevas bases de datos\n" -#: initdb.c:2439 +#: initdb.c:2511 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums activar sumas de verificación en páginas de datos\n" -#: initdb.c:2440 +#: initdb.c:2512 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr "" " --locale=LOCALE configuración regional por omisión para \n" " nuevas bases de datos\n" -#: initdb.c:2441 +#: initdb.c:2513 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -587,27 +653,37 @@ msgstr "" " en la categoría respectiva (el valor por omisión\n" " es tomado de variables de ambiente)\n" -#: initdb.c:2445 +#: initdb.c:2517 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale equivalente a --locale=C\n" -#: initdb.c:2446 +#: initdb.c:2518 #, c-format msgid "" -" --locale-provider={libc|icu}\n" +" --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr "" +" --builtin-locale=LOCALE\n" +" define el nombre de configuración regional builtin\n" +" para nuevas bases de datos\n" + +#: initdb.c:2520 +#, c-format +msgid "" +" --locale-provider={builtin|libc|icu}\n" " set default locale provider for new databases\n" msgstr "" -" --locale-provider={libc|icu}\n" +" --locale-provider={builtin|libc|icu}\n" " define el proveedor de configuración regional\n" " para nuevas bases de datos\n" -#: initdb.c:2448 +#: initdb.c:2522 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=ARCHIVO leer contraseña del nuevo superusuario del archivo\n" -#: initdb.c:2449 +#: initdb.c:2523 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -616,27 +692,27 @@ msgstr "" " -T, --text-search-config=CONF\n" " configuración de búsqueda en texto por omisión\n" -#: initdb.c:2451 +#: initdb.c:2525 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=USUARIO nombre del superusuario del cluster\n" -#: initdb.c:2452 +#: initdb.c:2526 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt pedir una contraseña para el nuevo superusuario\n" -#: initdb.c:2453 +#: initdb.c:2527 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR ubicación del directorio WAL\n" -#: initdb.c:2454 +#: initdb.c:2528 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=TAMAÑO tamaño de los segmentos de WAL, en megabytes\n" -#: initdb.c:2455 +#: initdb.c:2529 #, c-format msgid "" "\n" @@ -645,52 +721,57 @@ msgstr "" "\n" "Opciones menos usadas:\n" -#: initdb.c:2456 +#: initdb.c:2530 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" -msgstr " -c, --set NOMBRE=VALOR sobreescribe valor por omisión de parámetro de servidor\n" +msgstr " -c, --set VAR=VALOR sobreescribir el valor por omisión del parámetro\n" -#: initdb.c:2457 +#: initdb.c:2531 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug genera mucha salida de depuración\n" -#: initdb.c:2458 +#: initdb.c:2532 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches establece debug_discard_caches=1\n" -#: initdb.c:2459 +#: initdb.c:2533 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORIO donde encontrar los archivos de entrada\n" -#: initdb.c:2460 +#: initdb.c:2534 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean no limpiar después de errores\n" -#: initdb.c:2461 +#: initdb.c:2535 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" -#: initdb.c:2462 +#: initdb.c:2536 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions no mostrar instrucciones para los siguientes pasos\n" -#: initdb.c:2463 +#: initdb.c:2537 +#, c-format +msgid " -s, --show show internal settings, then exit\n" +msgstr " -s, --show muestra variables internas y salir\n" + +#: initdb.c:2538 #, c-format -msgid " -s, --show show internal settings\n" -msgstr " -s, --show muestra variables internas\n" +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=MÉTODO definir método para sincronizar archivos a disco\n" -#: initdb.c:2464 +#: initdb.c:2539 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only sólo sincronizar el directorio de datos y salir\n" -#: initdb.c:2465 +#: initdb.c:2540 #, c-format msgid "" "\n" @@ -699,17 +780,17 @@ msgstr "" "\n" "Otras opciones:\n" -#: initdb.c:2466 +#: initdb.c:2541 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de version y salir\n" -#: initdb.c:2467 +#: initdb.c:2542 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: initdb.c:2468 +#: initdb.c:2543 #, c-format msgid "" "\n" @@ -720,7 +801,7 @@ msgstr "" "Si el directorio de datos no es especificado, se usa la variable de\n" "ambiente PGDATA.\n" -#: initdb.c:2470 +#: initdb.c:2545 #, c-format msgid "" "\n" @@ -729,72 +810,72 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: initdb.c:2471 +#: initdb.c:2546 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: initdb.c:2499 +#: initdb.c:2570 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "método de autentificación «%s» no válido para conexiones «%s»" -#: initdb.c:2513 +#: initdb.c:2584 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "debe especificar una contraseña al superusuario para activar autentificación mediante contraseña" -#: initdb.c:2532 +#: initdb.c:2603 #, c-format msgid "no data directory specified" msgstr "no se especificó un directorio de datos" -#: initdb.c:2533 +#: initdb.c:2604 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "Debe especificar el directorio donde residirán los datos para este clúster. Hágalo usando la opción -D o la variable de ambiente PGDATA." -#: initdb.c:2550 +#: initdb.c:2621 #, c-format msgid "could not set environment" msgstr "no se pudo establecer el ambiente" -#: initdb.c:2568 +#: initdb.c:2639 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "el programa «%s» es requerido por %s pero se encontró en el mismo directorio que «%s»" -#: initdb.c:2571 +#: initdb.c:2642 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "El programa «%s» fue encontrado por «%s», pero no es de la misma versión que %s" -#: initdb.c:2586 +#: initdb.c:2657 #, c-format msgid "input file location must be an absolute path" msgstr "la ubicación de archivos de entrada debe ser una ruta absoluta" -#: initdb.c:2603 +#: initdb.c:2674 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "El cluster será inicializado con configuración regional «%s».\n" -#: initdb.c:2606 +#: initdb.c:2677 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "El cluster será inicializado con esta configuración regional:\n" -#: initdb.c:2607 +#: initdb.c:2678 #, c-format -msgid " provider: %s\n" -msgstr " proveedor: %s\n" +msgid " locale provider: %s\n" +msgstr " proveedor de configuración regional: %s\n" -#: initdb.c:2609 +#: initdb.c:2680 #, c-format -msgid " ICU locale: %s\n" -msgstr " Locale ICU: %s\n" +msgid " default collation: %s\n" +msgstr " ordenamiento por omisión: %s\n" -#: initdb.c:2610 +#: initdb.c:2681 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -811,22 +892,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2640 +#: initdb.c:2711 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "no se pudo encontrar una codificación apropiada para la configuración regional «%s»" -#: initdb.c:2642 +#: initdb.c:2713 #, c-format msgid "Rerun %s with the -E option." msgstr "Ejecute %s nuevamente con la opción -E." -#: initdb.c:2643 initdb.c:3176 initdb.c:3284 initdb.c:3304 +#: initdb.c:2714 initdb.c:3257 initdb.c:3377 initdb.c:3397 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: initdb.c:2655 +#: initdb.c:2726 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -836,109 +917,114 @@ msgstr "" "no puede ser usada como codificación del lado del servidor.\n" "La codificación por omisión será «%s».\n" -#: initdb.c:2660 +#: initdb.c:2731 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "la configuración regional «%s» requiere la codificación no soportada «%s»" -#: initdb.c:2662 +#: initdb.c:2733 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "La codificación «%s» no puede ser usada como codificación del lado del servidor." -#: initdb.c:2664 +#: initdb.c:2735 #, c-format msgid "Rerun %s with a different locale selection." msgstr "Ejecute %s nuevamente con opciones de configuración regional diferente." -#: initdb.c:2672 +#: initdb.c:2743 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "La codificación por omisión ha sido por lo tanto definida a «%s».\n" -#: initdb.c:2741 +#: initdb.c:2757 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "la configuración regional «%s» del proveedor builtin requiere la codificación «%s»" + +#: initdb.c:2819 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "" "no se pudo encontrar una configuración para búsqueda en texto apropiada\n" "para la configuración regional «%s»" -#: initdb.c:2752 +#: initdb.c:2830 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "la configuración de búsqueda en texto apropiada para la configuración regional «%s» es desconocida" -#: initdb.c:2757 +#: initdb.c:2835 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "la configuración de búsqueda en texto «%s» especificada podría no coincidir con la configuración regional «%s»" -#: initdb.c:2762 +#: initdb.c:2840 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "La configuración de búsqueda en texto ha sido definida a «%s».\n" -#: initdb.c:2805 initdb.c:2876 +#: initdb.c:2883 initdb.c:2954 #, c-format msgid "creating directory %s ... " msgstr "creando el directorio %s ... " -#: initdb.c:2810 initdb.c:2881 initdb.c:2929 initdb.c:2985 +#: initdb.c:2888 initdb.c:2959 initdb.c:3007 initdb.c:3064 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: initdb.c:2819 initdb.c:2891 +#: initdb.c:2897 initdb.c:2969 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "corrigiendo permisos en el directorio existente %s ... " -#: initdb.c:2824 initdb.c:2896 +#: initdb.c:2902 initdb.c:2974 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "no se pudo cambiar los permisos del directorio «%s»: %m" -#: initdb.c:2836 initdb.c:2908 +#: initdb.c:2914 initdb.c:2986 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "el directorio «%s» existe pero no está vacío" -#: initdb.c:2840 +#: initdb.c:2918 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "Si quiere crear un nuevo cluster de bases de datos, elimine o vacíe el directorio «%s», o ejecute %s con un argumento distinto de «%s»." -#: initdb.c:2848 initdb.c:2918 initdb.c:3325 +#: initdb.c:2926 initdb.c:2996 initdb.c:3422 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: initdb.c:2869 +#: initdb.c:2947 #, c-format msgid "WAL directory location must be an absolute path" msgstr "la ubicación del directorio de WAL debe ser una ruta absoluta" -#: initdb.c:2912 +#: initdb.c:2990 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "Si quiere almacenar el WAL ahí, elimine o vacíe el directorio «%s»." -#: initdb.c:2922 +#: initdb.c:3000 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: initdb.c:2941 +#: initdb.c:3019 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "Contiene un archivo invisible o que empieza con un punto (.), quizás por ser un punto de montaje." -#: initdb.c:2943 +#: initdb.c:3021 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "Contiene un directorio lost+found, quizás por ser un punto de montaje." -#: initdb.c:2945 +#: initdb.c:3023 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -947,72 +1033,67 @@ msgstr "" "Usar un punto de montaje directamente como directorio de datos no es recomendado.\n" "Cree un subdirectorio bajo el punto de montaje." -#: initdb.c:2971 +#: initdb.c:3050 #, c-format msgid "creating subdirectories ... " msgstr "creando subdirectorios ... " -#: initdb.c:3014 +#: initdb.c:3093 msgid "performing post-bootstrap initialization ... " msgstr "realizando inicialización post-bootstrap ... " -#: initdb.c:3175 +#: initdb.c:3256 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" -#: initdb.c:3200 +#: initdb.c:3281 #, c-format msgid "Running in debug mode.\n" msgstr "Ejecutando en modo de depuración.\n" -#: initdb.c:3204 +#: initdb.c:3285 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Ejecutando en modo no-clean. Los errores no serán limpiados.\n" -#: initdb.c:3274 +#: initdb.c:3358 #, c-format msgid "unrecognized locale provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: initdb.c:3302 +#: initdb.c:3395 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: initdb.c:3309 initdb.c:3313 +#: initdb.c:3402 initdb.c:3406 initdb.c:3410 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s no puede especificarse a menos que el proveedor de locale «%s» sea escogido" -#: initdb.c:3327 initdb.c:3404 +#: initdb.c:3424 initdb.c:3487 msgid "syncing data to disk ... " msgstr "sincronizando los datos a disco ... " -#: initdb.c:3335 +#: initdb.c:3432 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "" "la petición de contraseña y el archivo de contraseña no pueden\n" "ser especificados simultáneamente" -#: initdb.c:3357 -#, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "el argumento de --wal-segsize debe ser un número" - -#: initdb.c:3359 +#: initdb.c:3443 #, c-format -msgid "argument of --wal-segsize must be a power of two between 1 and 1024" -msgstr "el argumento de --wal-segsize debe ser una potencia de dos entre 1 y 1024" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "el argumento de %s debe ser una potencia de dos entre 1 y 1024" -#: initdb.c:3373 +#: initdb.c:3456 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "nombre de superusuario «%s» no permitido; los nombres de rol no pueden comenzar con «pg_»" -#: initdb.c:3375 +#: initdb.c:3458 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1023,17 +1104,17 @@ msgstr "" "Este usuario también debe ser quien ejecute el proceso servidor.\n" "\n" -#: initdb.c:3391 +#: initdb.c:3474 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Las sumas de verificación en páginas de datos han sido activadas.\n" -#: initdb.c:3393 +#: initdb.c:3476 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Las sumas de verificación en páginas de datos han sido desactivadas.\n" -#: initdb.c:3410 +#: initdb.c:3493 #, c-format msgid "" "\n" @@ -1045,22 +1126,22 @@ msgstr "" "El directorio de datos podría corromperse si el sistema operativo sufre\n" "una caída.\n" -#: initdb.c:3415 +#: initdb.c:3498 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "activando el método de autentificación «trust» para conexiones locales" -#: initdb.c:3416 +#: initdb.c:3499 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "Puede cambiar esto editando pg_hba.conf o usando el parámetro -A, o --auth-local y --auth-host la próxima vez que ejecute initdb." #. translator: This is a placeholder in a shell command. -#: initdb.c:3446 +#: initdb.c:3529 msgid "logfile" msgstr "archivo_de_registro" -#: initdb.c:3448 +#: initdb.c:3531 #, c-format msgid "" "\n" diff --git a/src/bin/initdb/po/fr.po b/src/bin/initdb/po/fr.po index a175e105d711c..c8a155a62bbeb 100644 --- a/src/bin/initdb/po/fr.po +++ b/src/bin/initdb/po/fr.po @@ -10,10 +10,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-05 17:20+0000\n" -"PO-Revision-Date: 2023-09-05 22:01+0200\n" +"POT-Creation-Date: 2024-10-29 18:21+0000\n" +"PO-Revision-Date: 2024-10-30 07:41+0100\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" #: ../../../src/common/logging.c:276 #, c-format @@ -43,33 +43,48 @@ msgstr "détail : " msgid "hint: " msgstr "astuce : " -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binaire « %s » invalide : %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "n'a pas pu lire le binaire « %s » : %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "n'a pas pu résoudre le chemin « %s » en sa forme absolue : %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 initdb.c:750 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "n'a pas pu exécuter la commande « %s » : %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "n'a pas pu lire à partir de la commande « %s » : %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "aucune donnée n'a été renvoyée par la commande « %s »" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "échec de %s() : %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 -#: initdb.c:349 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:372 initdb.c:408 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -85,35 +100,46 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le système de fichiers pour le fichier « %s » : %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../../common/file_utils.c:162 ../../common/pgfnames.c:48 -#: ../../common/rmtree.c:63 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "cette construction ne supporte pas la méthode de synchronisation « %s »" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/pgfnames.c:48 ../../common/rmtree.c:63 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: ../../common/file_utils.c:196 ../../common/pgfnames.c:69 -#: ../../common/rmtree.c:104 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "n'a pas pu ouvrir le fichier « %s » : %m" - -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../../common/file_utils.c:379 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" @@ -153,12 +179,12 @@ msgstr "n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu" -#: ../../common/rmtree.c:95 +#: ../../common/rmtree.c:97 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" -#: ../../common/rmtree.c:122 +#: ../../common/rmtree.c:124 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "n'a pas pu supprimer le répertoire « %s » : %m" @@ -207,6 +233,31 @@ msgstr "le processus fils a été terminé par le signal %d : %s" msgid "child process exited with unrecognized status %d" msgstr "le processus fils a quitté avec un statut %d non reconnu" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "valeur « %s » invalide pour l'option %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s doit être compris entre %d et %d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "méthode de synchronisation non reconnu : %s" + +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "l'argument de la commande shell contient un retour à la ligne ou un retour chariot : « %s »\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "le nom de la base contient un retour à la ligne ou un retour chariot : « %s »\n" + #: ../../port/dirmod.c:287 #, c-format msgid "could not set junction for \"%s\": %s\n" @@ -217,274 +268,289 @@ msgstr "n'a pas pu configurer la jonction pour « %s » : %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "n'a pas pu obtenir la jonction pour « %s » : %s\n" -#: initdb.c:618 initdb.c:1613 +#: initdb.c:369 +#, c-format +msgid "_wsetlocale() failed" +msgstr "échec de _wsetlocale()" + +#: initdb.c:376 +#, c-format +msgid "setlocale() failed" +msgstr "échec de setlocale()" + +#: initdb.c:390 +#, c-format +msgid "failed to restore old locale" +msgstr "a échoué pour restaurer l'ancienne locale" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "a échoué pour restaurer l'ancienne locale « %s »" + +#: initdb.c:682 initdb.c:1674 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: initdb.c:662 initdb.c:966 initdb.c:986 +#: initdb.c:726 initdb.c:1030 initdb.c:1050 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "n'a pas pu ouvrir le fichier « %s » en écriture : %m" -#: initdb.c:666 initdb.c:969 initdb.c:988 +#: initdb.c:730 initdb.c:1033 initdb.c:1052 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: initdb.c:670 +#: initdb.c:734 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" -#: initdb.c:686 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "n'a pas pu exécuter la commande « %s » : %m" - -#: initdb.c:704 +#: initdb.c:768 #, c-format msgid "removing data directory \"%s\"" msgstr "suppression du répertoire des données « %s »" -#: initdb.c:706 +#: initdb.c:770 #, c-format msgid "failed to remove data directory" msgstr "échec de la suppression du répertoire des données" -#: initdb.c:710 +#: initdb.c:774 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "suppression du contenu du répertoire des données « %s »" -#: initdb.c:713 +#: initdb.c:777 #, c-format msgid "failed to remove contents of data directory" msgstr "échec de la suppression du contenu du répertoire des données" -#: initdb.c:718 +#: initdb.c:782 #, c-format msgid "removing WAL directory \"%s\"" msgstr "suppression du répertoire des journaux de transactions « %s »" -#: initdb.c:720 +#: initdb.c:784 #, c-format msgid "failed to remove WAL directory" msgstr "échec de la suppression du répertoire des journaux de transactions" -#: initdb.c:724 +#: initdb.c:788 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "suppression du contenu du répertoire des journaux de transactions « %s »" -#: initdb.c:726 +#: initdb.c:790 #, c-format msgid "failed to remove contents of WAL directory" msgstr "échec de la suppression du contenu du répertoire des journaux de transactions" -#: initdb.c:733 +#: initdb.c:797 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "répertoire des données « %s » non supprimé à la demande de l'utilisateur" -#: initdb.c:737 +#: initdb.c:801 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "répertoire des journaux de transactions « %s » non supprimé à la demande de l'utilisateur" -#: initdb.c:755 +#: initdb.c:819 #, c-format msgid "cannot be run as root" msgstr "ne peut pas être exécuté en tant que root" -#: initdb.c:756 +#: initdb.c:820 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "Connectez-vous (par exemple en utilisant « su ») sous l'utilisateur (non privilégié) qui sera propriétaire du processus serveur." -#: initdb.c:788 +#: initdb.c:852 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "« %s » n'est pas un nom d'encodage serveur valide" -#: initdb.c:932 +#: initdb.c:996 #, c-format msgid "file \"%s\" does not exist" msgstr "le rôle « %s » n'existe pas" -#: initdb.c:933 initdb.c:938 initdb.c:945 +#: initdb.c:997 initdb.c:1002 initdb.c:1009 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "Cela peut signifier que votre installation est corrompue ou que vous avez identifié le mauvais répertoire avec l'option -L." -#: initdb.c:937 +#: initdb.c:1001 #, c-format msgid "could not access file \"%s\": %m" msgstr "n'a pas pu accéder au fichier « %s » : %m" -#: initdb.c:944 +#: initdb.c:1008 #, c-format msgid "file \"%s\" is not a regular file" msgstr "le fichier « %s » n'est pas un fichier standard" -#: initdb.c:1077 +#: initdb.c:1141 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "sélection de l'implémentation de la mémoire partagée dynamique..." -#: initdb.c:1086 +#: initdb.c:1150 #, c-format -msgid "selecting default max_connections ... " -msgstr "sélection de la valeur par défaut pour max_connections... " +msgid "selecting default \"max_connections\" ... " +msgstr "sélection de la valeur par défaut pour « max_connections »... " -#: initdb.c:1106 +#: initdb.c:1170 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "sélection de la valeur par défaut pour shared_buffers... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "sélection de la valeur par défaut pour « shared_buffers »... " -#: initdb.c:1129 +#: initdb.c:1193 #, c-format msgid "selecting default time zone ... " msgstr "sélection du fuseau horaire par défaut... " -#: initdb.c:1206 +#: initdb.c:1272 msgid "creating configuration files ... " msgstr "création des fichiers de configuration... " -#: initdb.c:1367 initdb.c:1381 initdb.c:1448 initdb.c:1459 +#: initdb.c:1425 initdb.c:1439 initdb.c:1506 initdb.c:1517 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "n'a pas pu modifier les droits de « %s » : %m" -#: initdb.c:1477 +#: initdb.c:1536 #, c-format msgid "running bootstrap script ... " msgstr "lancement du script bootstrap..." -#: initdb.c:1489 +#: initdb.c:1548 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "le fichier en entrée « %s » n'appartient pas à PostgreSQL %s" -#: initdb.c:1491 +#: initdb.c:1550 #, c-format msgid "Specify the correct path using the option -L." msgstr "Indiquez le bon chemin avec l'option -L." -#: initdb.c:1591 +#: initdb.c:1652 msgid "Enter new superuser password: " msgstr "Saisir le nouveau mot de passe du super-utilisateur : " -#: initdb.c:1592 +#: initdb.c:1653 msgid "Enter it again: " msgstr "Saisir le mot de passe à nouveau : " -#: initdb.c:1595 +#: initdb.c:1656 #, c-format msgid "Passwords didn't match.\n" msgstr "Les mots de passe ne sont pas identiques.\n" -#: initdb.c:1619 +#: initdb.c:1680 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "n'a pas pu lire le mot de passe à partir du fichier « %s » : %m" -#: initdb.c:1622 +#: initdb.c:1683 #, c-format msgid "password file \"%s\" is empty" msgstr "le fichier de mots de passe « %s » est vide" -#: initdb.c:2034 +#: initdb.c:2095 #, c-format msgid "caught signal\n" msgstr "signal reçu\n" -#: initdb.c:2040 +#: initdb.c:2101 #, c-format msgid "could not write to child process: %s\n" msgstr "n'a pas pu écrire au processus fils : %s\n" -#: initdb.c:2048 +#: initdb.c:2109 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2137 +#: initdb.c:2191 initdb.c:2237 #, c-format -msgid "setlocale() failed" -msgstr "échec de setlocale()" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "le nom de la locale « %s » contient des caractères non ASCII" -#: initdb.c:2155 -#, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "a échoué pour restaurer l'ancienne locale « %s »" - -#: initdb.c:2163 +#: initdb.c:2217 #, c-format msgid "invalid locale name \"%s\"" msgstr "nom de locale « %s » invalide" -#: initdb.c:2164 +#: initdb.c:2218 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "Si le nom de la locale est spécifique à ICU, utilisez --icu-locale." -#: initdb.c:2177 +#: initdb.c:2231 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "configuration invalide de la locale ; vérifiez les variables d'environnement LANG et LC_*" -#: initdb.c:2203 initdb.c:2227 +#: initdb.c:2262 initdb.c:2286 #, c-format msgid "encoding mismatch" msgstr "différence d'encodage" -#: initdb.c:2204 +#: initdb.c:2263 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "L'encodage que vous avez sélectionné (%s) et celui que la locale sélectionnée utilise (%s) ne sont pas compatibles. Cela peut conduire à des erreurs dans les fonctions de manipulation de chaînes de caractères." -#: initdb.c:2209 initdb.c:2230 +#: initdb.c:2268 initdb.c:2289 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "Relancez %s et soit vous ne spécifiez pas explicitement d'encodage, soit vous choisissez une combinaison compatible." -#: initdb.c:2228 +#: initdb.c:2287 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "L'encodage que vous avez sélectionné (%s) n'est pas supporté avec le fournisseur ICU." -#: initdb.c:2279 +#: initdb.c:2338 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "n'a pas pu convertir le nom de locale « %s » en balise de langage : %s" -#: initdb.c:2285 initdb.c:2337 initdb.c:2416 +#: initdb.c:2344 initdb.c:2396 initdb.c:2488 #, c-format msgid "ICU is not supported in this build" msgstr "ICU n'est pas supporté dans cette installation" -#: initdb.c:2308 +#: initdb.c:2367 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "n'a pas pu obtenir la langue à partir de la locale « %s » : %s" -#: initdb.c:2334 +#: initdb.c:2393 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "la locale « %s » a le langage inconnu « %s »" -#: initdb.c:2400 +#: initdb.c:2454 +#, c-format +msgid "locale must be specified if provider is %s" +msgstr "la locale doit être spécifiée si le fournisseur est %s" + +#: initdb.c:2465 #, c-format -msgid "ICU locale must be specified" -msgstr "la locale ICU doit être précisée" +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "nom de locale « %s » invalide pour le fournisseur natif" -#: initdb.c:2404 +#: initdb.c:2476 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "Utilisation de la balise de langage « %s » pour la locale ICU « %s ».\n" -#: initdb.c:2427 +#: initdb.c:2499 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -493,17 +559,17 @@ msgstr "" "%s initialise une instance PostgreSQL.\n" "\n" -#: initdb.c:2428 +#: initdb.c:2500 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: initdb.c:2429 +#: initdb.c:2501 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [RÉP_DONNÉES]\n" -#: initdb.c:2430 +#: initdb.c:2502 #, c-format msgid "" "\n" @@ -512,71 +578,71 @@ msgstr "" "\n" "Options :\n" -#: initdb.c:2431 +#: initdb.c:2503 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr "" " -A, --auth=MÉTHODE méthode d'authentification par défaut pour les\n" " connexions locales\n" -#: initdb.c:2432 +#: initdb.c:2504 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=MÉTHODE méthode d'authentification par défaut pour les\n" " connexions locales TCP/IP\n" -#: initdb.c:2433 +#: initdb.c:2505 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=MÉTHODE méthode d'authentification par défaut pour les\n" " connexions locales socket\n" -#: initdb.c:2434 +#: initdb.c:2506 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]RÉP_DONNÉES emplacement du répertoire principal des données\n" -#: initdb.c:2435 +#: initdb.c:2507 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr "" " -E, --encoding=ENCODAGE initialise l'encodage par défaut des nouvelles\n" " bases de données\n" -#: initdb.c:2436 +#: initdb.c:2508 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access autorise la lecture/écriture pour le groupe sur\n" " le répertoire des données\n" -#: initdb.c:2437 +#: initdb.c:2509 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=LOCALE initialise l'identifiant de locale ICU pour les nouvelles bases de données\n" -#: initdb.c:2438 +#: initdb.c:2510 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" -msgstr " --icu-rules=REGLES initialise les règles supplémentaires de la locale ICU pour les nouvelles bases de données\n" +msgstr " --icu-rules=REGLES initialise les règles supplémentaires de la locale ICU pour les nouvelles bases de données\n" -#: initdb.c:2439 +#: initdb.c:2511 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr "" " -k, --data-checksums active les sommes de contrôle pour les blocs des\n" " fichiers de données\n" -#: initdb.c:2440 +#: initdb.c:2512 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr "" " --locale=LOCALE initialise la locale par défaut pour les\n" " nouvelles bases de données\n" -#: initdb.c:2441 +#: initdb.c:2513 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -591,29 +657,39 @@ msgstr "" " (les valeurs par défaut sont prises dans\n" " l'environnement)\n" -#: initdb.c:2445 +#: initdb.c:2517 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale équivalent à --locale=C\n" -#: initdb.c:2446 +#: initdb.c:2518 #, c-format msgid "" -" --locale-provider={libc|icu}\n" +" --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr "" +" --builtin-provider=LOCALE\n" +" initialise le fournisseur de locale natif pour\n" +" les nouvelles bases de données\n" + +#: initdb.c:2520 +#, c-format +msgid "" +" --locale-provider={builtin|libc|icu}\n" " set default locale provider for new databases\n" msgstr "" -" --locale-provider={libc|icu}\n" +" --locale-provider={builtin|libc|icu}\n" " initialise le fournisseur de locale par défaut pour\n" " les nouvelles bases de données\n" -#: initdb.c:2448 +#: initdb.c:2522 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr "" " --pwfile=FICHIER lit le mot de passe du nouveau super-utilisateur\n" " à partir de ce fichier\n" -#: initdb.c:2449 +#: initdb.c:2523 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -622,31 +698,31 @@ msgstr "" " -T, --text-search-config=CFG configuration par défaut de la recherche plein\n" " texte\n" -#: initdb.c:2451 +#: initdb.c:2525 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NOM nom du super-utilisateur de la base de données\n" -#: initdb.c:2452 +#: initdb.c:2526 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr "" " -W, --pwprompt demande un mot de passe pour le nouveau\n" " super-utilisateur\n" -#: initdb.c:2453 +#: initdb.c:2527 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr "" " -X, --waldir=RÉP_WAL emplacement du répertoire des journaux de\n" " transactions\n" -#: initdb.c:2454 +#: initdb.c:2528 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=TAILLE configure la taille des segments WAL, en Mo\n" -#: initdb.c:2455 +#: initdb.c:2529 #, c-format msgid "" "\n" @@ -655,58 +731,63 @@ msgstr "" "\n" "Options moins utilisées :\n" -#: initdb.c:2456 +#: initdb.c:2530 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" -msgstr " -c NOM=VALEUR surcharge la configuration par défaut d'un paramètre serveur\n" +msgstr " -c NOM=VALEUR surcharge la configuration par défaut d'un paramètre serveur\n" -#: initdb.c:2457 +#: initdb.c:2531 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug engendre un grand nombre de traces de débogage\n" -#: initdb.c:2458 +#: initdb.c:2532 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches initialise debug_discard_caches à 1\n" -#: initdb.c:2459 +#: initdb.c:2533 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr "" " -L RÉPERTOIRE indique où trouver les fichiers servant à la\n" " création de l'instance\n" -#: initdb.c:2460 +#: initdb.c:2534 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --noclean ne nettoie pas après des erreurs\n" -#: initdb.c:2461 +#: initdb.c:2535 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --nosync n'attend pas que les modifications soient\n" " proprement écrites sur disque\n" -#: initdb.c:2462 +#: initdb.c:2536 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr "" " --no-instructions n'affiche pas les instructions des prochaines\n" " étapes\n" -#: initdb.c:2463 +#: initdb.c:2537 +#, c-format +msgid " -s, --show show internal settings, then exit\n" +msgstr " -s, --show affiche la configuration interne, puis quitte\n" + +#: initdb.c:2538 #, c-format -msgid " -s, --show show internal settings\n" -msgstr " -s, --show affiche la configuration interne\n" +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHODE configure la méthode pour synchroniser les fichiers sur disque\n" -#: initdb.c:2464 +#: initdb.c:2539 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only synchronise uniquement le répertoire des données, puis quitte\n" -#: initdb.c:2465 +#: initdb.c:2540 #, c-format msgid "" "\n" @@ -715,17 +796,17 @@ msgstr "" "\n" "Autres options :\n" -#: initdb.c:2466 +#: initdb.c:2541 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: initdb.c:2467 +#: initdb.c:2542 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: initdb.c:2468 +#: initdb.c:2543 #, c-format msgid "" "\n" @@ -736,7 +817,7 @@ msgstr "" "Si le répertoire des données n'est pas indiqué, la variable d'environnement\n" "PGDATA est utilisée.\n" -#: initdb.c:2470 +#: initdb.c:2545 #, c-format msgid "" "\n" @@ -745,72 +826,72 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: initdb.c:2471 +#: initdb.c:2546 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: initdb.c:2499 +#: initdb.c:2570 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "méthode d'authentification « %s » invalide pour « %s » connexions" -#: initdb.c:2513 +#: initdb.c:2584 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "doit indiquer un mot de passe pour le super-utilisateur afin d'activer l'authentification par mot de passe" -#: initdb.c:2532 +#: initdb.c:2603 #, c-format msgid "no data directory specified" msgstr "aucun répertoire de données indiqué" -#: initdb.c:2533 +#: initdb.c:2604 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "Vous devez identifier le répertoire où résideront les données pour ce système de bases de données. Faites-le soit avec l'option -D soit avec la variable d'environnement PGDATA." -#: initdb.c:2550 +#: initdb.c:2621 #, c-format msgid "could not set environment" msgstr "n'a pas pu configurer l'environnement" -#: initdb.c:2568 +#: initdb.c:2639 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé dans le même répertoire que « %s »" -#: initdb.c:2571 +#: initdb.c:2642 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "le programme « %s » a été trouvé par « %s » mais n'est pas de la même version que %s" -#: initdb.c:2586 +#: initdb.c:2657 #, c-format msgid "input file location must be an absolute path" msgstr "l'emplacement du fichier d'entrée doit être indiqué avec un chemin absolu" -#: initdb.c:2603 +#: initdb.c:2674 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "L'instance sera initialisée avec la locale « %s ».\n" -#: initdb.c:2606 +#: initdb.c:2677 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "L'instance sera initialisée avec cette configuration de locale :\n" -#: initdb.c:2607 +#: initdb.c:2678 #, c-format -msgid " provider: %s\n" -msgstr " fournisseur: %s\n" +msgid " locale provider: %s\n" +msgstr " fournisseur de locale : %s\n" -#: initdb.c:2609 +#: initdb.c:2680 #, c-format -msgid " ICU locale: %s\n" -msgstr " locale ICU : %s\n" +msgid " default collation: %s\n" +msgstr "collation par défaut : %s\n" -#: initdb.c:2610 +#: initdb.c:2681 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -827,22 +908,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2640 +#: initdb.c:2711 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "n'a pas pu trouver un encodage adéquat pour la locale « %s »" -#: initdb.c:2642 +#: initdb.c:2713 #, c-format msgid "Rerun %s with the -E option." msgstr "Relancez %s avec l'option -E." -#: initdb.c:2643 initdb.c:3176 initdb.c:3284 initdb.c:3304 +#: initdb.c:2714 initdb.c:3257 initdb.c:3377 initdb.c:3397 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: initdb.c:2655 +#: initdb.c:2726 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -851,109 +932,114 @@ msgstr "" "L'encodage « %s » a été déduit de la locale mais n'est pas autorisé en tant qu'encodage serveur.\n" "L'encodage par défaut des bases de données sera configuré à « %s ».\n" -#: initdb.c:2660 +#: initdb.c:2731 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "la locale « %s » nécessite l'encodage « %s » non supporté" -#: initdb.c:2662 +#: initdb.c:2733 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "L'encodage « %s » n'est pas autorisé en tant qu'encodage serveur." -#: initdb.c:2664 +#: initdb.c:2735 #, c-format msgid "Rerun %s with a different locale selection." msgstr "Relancez %s avec une locale différente." -#: initdb.c:2672 +#: initdb.c:2743 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "" "L'encodage par défaut des bases de données a été configuré en conséquence\n" "avec « %s ».\n" -#: initdb.c:2741 +#: initdb.c:2757 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "la locale du fournisseur natif « %s » nécessite l'encodage « %s »" + +#: initdb.c:2819 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "n'a pas pu trouver la configuration de la recherche plein texte en adéquation avec la locale « %s »" -#: initdb.c:2752 +#: initdb.c:2830 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "la configuration de la recherche plein texte convenable pour la locale « %s » est inconnue" -#: initdb.c:2757 +#: initdb.c:2835 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "la configuration indiquée pour la recherche plein texte, « %s », pourrait ne pas correspondre à la locale « %s »" -#: initdb.c:2762 +#: initdb.c:2840 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "La configuration de la recherche plein texte a été initialisée à « %s ».\n" -#: initdb.c:2805 initdb.c:2876 +#: initdb.c:2883 initdb.c:2954 #, c-format msgid "creating directory %s ... " msgstr "création du répertoire %s... " -#: initdb.c:2810 initdb.c:2881 initdb.c:2929 initdb.c:2985 +#: initdb.c:2888 initdb.c:2959 initdb.c:3007 initdb.c:3064 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: initdb.c:2819 initdb.c:2891 +#: initdb.c:2897 initdb.c:2969 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "correction des droits sur le répertoire existant %s... " -#: initdb.c:2824 initdb.c:2896 +#: initdb.c:2902 initdb.c:2974 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "n'a pas pu modifier les droits du répertoire « %s » : %m" -#: initdb.c:2836 initdb.c:2908 +#: initdb.c:2914 initdb.c:2986 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "le répertoire « %s » existe mais n'est pas vide" -#: initdb.c:2840 +#: initdb.c:2918 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "Si vous voulez créer un nouveau système de bases de données, supprimez ou videz le répertoire « %s ». Vous pouvez aussi exécuter %s avec un argument autre que « %s »." -#: initdb.c:2848 initdb.c:2918 initdb.c:3325 +#: initdb.c:2926 initdb.c:2996 initdb.c:3422 #, c-format msgid "could not access directory \"%s\": %m" msgstr "n'a pas pu accéder au répertoire « %s » : %m" -#: initdb.c:2869 +#: initdb.c:2947 #, c-format msgid "WAL directory location must be an absolute path" msgstr "l'emplacement du répertoire des journaux de transactions doit être indiqué avec un chemin absolu" -#: initdb.c:2912 +#: initdb.c:2990 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "Si vous voulez enregistrer ici les WAL, supprimez ou videz le répertoire « %s »." -#: initdb.c:2922 +#: initdb.c:3000 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: initdb.c:2941 +#: initdb.c:3019 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "Il contient un fichier invisible, peut-être parce qu'il s'agit d'un point de montage." -#: initdb.c:2943 +#: initdb.c:3021 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "Il contient un répertoire lost+found, peut-être parce qu'il s'agit d'un point de montage.\\" -#: initdb.c:2945 +#: initdb.c:3023 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -962,72 +1048,67 @@ msgstr "" "Utiliser un point de montage comme répertoire des données n'est pas recommandé.\n" "Créez un sous-répertoire sous le point de montage." -#: initdb.c:2971 +#: initdb.c:3050 #, c-format msgid "creating subdirectories ... " msgstr "création des sous-répertoires... " -#: initdb.c:3014 +#: initdb.c:3093 msgid "performing post-bootstrap initialization ... " msgstr "exécution de l'initialisation après bootstrap... " -#: initdb.c:3175 +#: initdb.c:3256 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiert une valeur" -#: initdb.c:3200 +#: initdb.c:3281 #, c-format msgid "Running in debug mode.\n" msgstr "Lancé en mode débogage.\n" -#: initdb.c:3204 +#: initdb.c:3285 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Lancé en mode « sans nettoyage ». Les erreurs ne seront pas nettoyées.\n" -#: initdb.c:3274 +#: initdb.c:3358 #, c-format msgid "unrecognized locale provider: %s" msgstr "fournisseur de locale non reconnu : %s" -#: initdb.c:3302 +#: initdb.c:3395 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: initdb.c:3309 initdb.c:3313 +#: initdb.c:3402 initdb.c:3406 initdb.c:3410 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s ne peut pas être spécifié sauf si le fournisseur de locale « %s » est choisi" -#: initdb.c:3327 initdb.c:3404 +#: initdb.c:3424 initdb.c:3487 msgid "syncing data to disk ... " msgstr "synchronisation des données sur disque... " -#: initdb.c:3335 +#: initdb.c:3432 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "" "les options d'invite du mot de passe et de fichier de mots de passe ne\n" "peuvent pas être indiquées simultanément" -#: initdb.c:3357 +#: initdb.c:3443 #, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "l'argument de --wal-segsize doit être un nombre" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "l'argument de %s doit être une puissance de 2 comprise entre 1 et 1024" -#: initdb.c:3359 -#, c-format -msgid "argument of --wal-segsize must be a power of two between 1 and 1024" -msgstr "l'argument de --wal-segsize doit être une puissance de 2 comprise entre 1 et 1024" - -#: initdb.c:3373 +#: initdb.c:3456 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "le nom de superutilisateur « %s » n'est pas autorisé ; les noms de rôle ne peuvent pas commencer par « pg_ »" -#: initdb.c:3375 +#: initdb.c:3458 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1038,17 +1119,17 @@ msgstr "" "Le processus serveur doit également lui appartenir.\n" "\n" -#: initdb.c:3391 +#: initdb.c:3474 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Les sommes de contrôle des pages de données sont activées.\n" -#: initdb.c:3393 +#: initdb.c:3476 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Les sommes de contrôle des pages de données sont désactivées.\n" -#: initdb.c:3410 +#: initdb.c:3493 #, c-format msgid "" "\n" @@ -1059,22 +1140,22 @@ msgstr "" "Synchronisation sur disque ignorée.\n" "Le répertoire des données pourrait être corrompu si le système d'exploitation s'arrêtait brutalement.\n" -#: initdb.c:3415 +#: initdb.c:3498 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "activation de l'authentification « trust » pour les connexions locales" -#: initdb.c:3416 +#: initdb.c:3499 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "Vous pouvez changer cette configuration en éditant le fichier pg_hba.conf ou en utilisant l'option -A, ou --auth-local et --auth-host, à la prochaine exécution d'initdb." #. translator: This is a placeholder in a shell command. -#: initdb.c:3446 +#: initdb.c:3529 msgid "logfile" msgstr "fichier_de_trace" -#: initdb.c:3448 +#: initdb.c:3531 #, c-format msgid "" "\n" @@ -1088,265 +1169,3 @@ msgstr "" "\n" " %s\n" "\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" - -#~ msgid "%s: The password file was not generated. Please report this problem.\n" -#~ msgstr "" -#~ "%s : le fichier de mots de passe n'a pas été créé.\n" -#~ "Merci de rapporter ce problème.\n" - -#~ msgid "%s: could not access directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n" - -#~ msgid "%s: could not access file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu accéder au fichier « %s » : %s\n" - -#~ msgid "%s: could not close directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu fermer le répertoire « %s » : %s\n" - -#~ msgid "%s: could not create directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le répertoire « %s » : %s\n" - -#~ msgid "%s: could not create symbolic link \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le lien symbolique « %s » : %s\n" - -#~ msgid "%s: could not determine valid short version string\n" -#~ msgstr "%s : n'a pas pu déterminer une chaîne de version courte valide\n" - -#~ msgid "%s: could not execute command \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu exécuter la commande « %s » : %s\n" - -#~ msgid "%s: could not fsync file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu synchroniser sur disque le fichier « %s » : %s\n" - -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s : n'a pas pu obtenir le nom de l'utilisateur courant : %s\n" - -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s : n'a pas pu obtenir d'informations sur l'utilisateur courant : %s\n" - -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le répertoire « %s » : %s\n" - -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » en lecture : %s\n" - -#~ msgid "%s: could not open file \"%s\" for writing: %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » en écriture : %s\n" - -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n" - -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu lire le répertoire « %s » : %s\n" - -#~ msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu renommer le fichier « %s » en « %s » : %s\n" - -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu récupérer les informations sur le fichier « %s » : %s\n" - -#~ msgid "%s: could not to allocate SIDs: error code %lu\n" -#~ msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" - -#~ msgid "%s: could not write file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu écrire le fichier « %s » : %s\n" - -#~ msgid "%s: failed to remove contents of transaction log directory\n" -#~ msgstr "%s : échec de la suppression du contenu du répertoire des journaux de transaction\n" - -#~ msgid "%s: failed to remove transaction log directory\n" -#~ msgstr "%s : échec de la suppression du répertoire des journaux de transaction\n" - -#~ msgid "%s: failed to restore old locale \"%s\"\n" -#~ msgstr "%s : n'a pas pu restaurer l'ancienne locale « %s »\n" - -#~ msgid "%s: file \"%s\" does not exist\n" -#~ msgstr "%s : le fichier « %s » n'existe pas\n" - -#~ msgid "%s: invalid locale name \"%s\"\n" -#~ msgstr "%s : nom de locale invalide (« %s »)\n" - -#~ msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" -#~ msgstr "%s : le nom de la locale contient des caractères non ASCII, ignoré : « %s »\n" - -#~ msgid "%s: locale name too long, skipped: \"%s\"\n" -#~ msgstr "%s : nom de locale trop long, ignoré : « %s »\n" - -#~ msgid "%s: out of memory\n" -#~ msgstr "%s : mémoire épuisée\n" - -#~ msgid "%s: removing contents of transaction log directory \"%s\"\n" -#~ msgstr "%s : suppression du contenu du répertoire des journaux de transaction « %s »\n" - -#~ msgid "%s: removing transaction log directory \"%s\"\n" -#~ msgstr "%s : suppression du répertoire des journaux de transaction « %s »\n" - -#~ msgid "%s: symlinks are not supported on this platform\n" -#~ msgstr "%s : les liens symboliques ne sont pas supportés sur cette plateforme\n" - -#~ msgid "%s: transaction log directory \"%s\" not removed at user's request\n" -#~ msgstr "" -#~ "%s : répertoire des journaux de transaction « %s » non supprimé à la demande\n" -#~ "de l'utilisateur\n" - -#~ msgid "%s: unrecognized authentication method \"%s\"\n" -#~ msgstr "%s : méthode d'authentification « %s » inconnue.\n" - -#~ msgid "No usable system locales were found.\n" -#~ msgstr "Aucune locale système utilisable n'a été trouvée.\n" - -#, c-format -#~ msgid "The default database encoding has been set to \"%s\".\n" -#~ msgstr "L'encodage par défaut des bases de données a été configuré à « %s ».\n" - -#~ msgid "" -#~ "The program \"postgres\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" -#~ "le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." - -#~ msgid "" -#~ "The program \"postgres\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « postgres » a été trouvé par « %s » mais n'est pas de la même\n" -#~ "version que « %s ».\n" -#~ "Vérifiez votre installation." - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Essayer « %s --help » pour plus d'informations.\n" - -#~ msgid "Use the option \"--debug\" to see details.\n" -#~ msgstr "Utilisez l'option « --debug » pour voir le détail.\n" - -#, c-format -#~ msgid "cannot create restricted tokens on this platform: error code %lu" -#~ msgstr "ne peut pas créer les jetons restreints sur cette plateforme : code d'erreur %lu" - -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" - -#~ msgid "copying template1 to postgres ... " -#~ msgstr "copie de template1 vers postgres... " - -#~ msgid "copying template1 to template0 ... " -#~ msgstr "copie de template1 vers template0... " - -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" - -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %m" - -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %s" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "n'a pas pu identifier le répertoire courant : %m" - -#, c-format -#~ msgid "could not load library \"%s\": error code %lu" -#~ msgstr "n'a pas pu charger la bibliothèque « %s » : code d'erreur %lu" - -#~ msgid "could not open directory \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le répertoire « %s » : %s\n" - -#, c-format -#~ msgid "could not read binary \"%s\"" -#~ msgstr "n'a pas pu lire le binaire « %s »" - -#~ msgid "could not read directory \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" - -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" - -#, c-format -#~ msgid "could not read symbolic link \"%s\": %m" -#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %m" - -#, c-format -#~ msgid "could not remove file or directory \"%s\": %m" -#~ msgstr "n'a pas pu supprimer le fichier ou répertoire « %s » : %m" - -#, c-format -#~ msgid "could not stat file or directory \"%s\": %m" -#~ msgstr "" -#~ "n'a pas pu récupérer les informations sur le fichier ou répertoire\n" -#~ "« %s » : %m" - -#~ msgid "could not stat file or directory \"%s\": %s\n" -#~ msgstr "" -#~ "n'a pas pu récupérer les informations sur le fichier ou répertoire\n" -#~ "« %s » : %s\n" - -#~ msgid "creating collations ... " -#~ msgstr "création des collationnements... " - -#~ msgid "creating conversions ... " -#~ msgstr "création des conversions... " - -#~ msgid "creating dictionaries ... " -#~ msgstr "création des dictionnaires... " - -#~ msgid "creating information schema ... " -#~ msgstr "création du schéma d'informations... " - -#~ msgid "creating system views ... " -#~ msgstr "création des vues système... " - -#~ msgid "creating template1 database in %s/base/1 ... " -#~ msgstr "création de la base de données template1 dans %s/base/1... " - -#, c-format -#~ msgid "fatal: " -#~ msgstr "fatal : " - -#~ msgid "initializing dependencies ... " -#~ msgstr "initialisation des dépendances... " - -#~ msgid "initializing pg_authid ... " -#~ msgstr "initialisation de pg_authid... " - -#, c-format -#~ msgid "invalid binary \"%s\"" -#~ msgstr "binaire « %s » invalide" - -#~ msgid "loading PL/pgSQL server-side language ... " -#~ msgstr "chargement du langage PL/pgSQL... " - -#~ msgid "loading system objects' descriptions ... " -#~ msgstr "chargement de la description des objets système... " - -#~ msgid "not supported on this platform\n" -#~ msgstr "non supporté sur cette plateforme\n" - -#~ msgid "pclose failed: %m" -#~ msgstr "échec de pclose : %m" - -#~ msgid "setting password ... " -#~ msgstr "initialisation du mot de passe... " - -#~ msgid "setting privileges on built-in objects ... " -#~ msgstr "initialisation des droits sur les objets internes... " - -#, c-format -#~ msgid "symlinks are not supported on this platform" -#~ msgstr "les liens symboliques ne sont pas supportés sur cette plateforme" - -#~ msgid "vacuuming database template1 ... " -#~ msgstr "lancement du vacuum sur la base de données template1... " diff --git a/src/bin/initdb/po/ja.po b/src/bin/initdb/po/ja.po index 404f2f6125b83..62098fe2bbab3 100644 --- a/src/bin/initdb/po/ja.po +++ b/src/bin/initdb/po/ja.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL 17)\n" +"Project-Id-Version: initdb (PostgreSQL 18)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-14 11:23+0900\n" -"PO-Revision-Date: 2024-06-14 11:27+0900\n" +"POT-Creation-Date: 2025-03-26 11:21+0900\n" +"PO-Revision-Date: 2025-03-31 16:23+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -17,22 +17,22 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "警告: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "詳細: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "ヒント: " @@ -57,28 +57,28 @@ msgstr "実行する\"%s\"がありませんでした" msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "パス\"%s\"を絶対パス形式に変換できませんでした: %m" -#: ../../common/exec.c:382 initdb.c:695 +#: ../../common/exec.c:363 initdb.c:753 #, c-format msgid "could not execute command \"%s\": %m" msgstr "コマンド\"%s\"を実行できませんでした: %m" -#: ../../common/exec.c:394 +#: ../../common/exec.c:375 #, c-format msgid "could not read from command \"%s\": %m" msgstr "コマンド\"%s\"から読み取れませんでした: %m" -#: ../../common/exec.c:397 +#: ../../common/exec.c:378 #, c-format msgid "no data was returned by command \"%s\"" msgstr "コマンド\"%s\"がデータを返却しませんでした" -#: ../../common/exec.c:424 +#: ../../common/exec.c:405 #, c-format msgid "%s() failed: %m" msgstr "%s() が失敗しました: %m" -#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 -#: initdb.c:353 +#: ../../common/exec.c:543 ../../common/exec.c:588 ../../common/exec.c:680 +#: initdb.c:375 initdb.c:411 #, c-format msgid "out of memory" msgstr "メモリ不足です" @@ -94,46 +94,46 @@ msgstr "メモリ不足です\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインタを複製できません(内部エラー)。\n" -#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 -#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#: ../../common/file_utils.c:69 ../../common/file_utils.c:370 +#: ../../common/file_utils.c:428 ../../common/file_utils.c:502 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format 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:123 ../../common/file_utils.c:588 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "このビルドでは同期方式\"%s\"をサポートしていません" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 #: ../../common/pgfnames.c:48 ../../common/rmtree.c:63 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#: ../../common/file_utils.c:440 ../../common/file_utils.c:510 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: ../../common/file_utils.c:498 +#: ../../common/file_utils.c:520 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" @@ -242,12 +242,12 @@ msgstr "%sは%d..%dの範囲になければなりません" msgid "unrecognized sync method: %s" msgstr "認識できない同期方式: %s" -#: ../../fe_utils/string_utils.c:434 +#: ../../fe_utils/string_utils.c:587 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"\n" msgstr "シェルコマンドの引数に改行(LF)または復帰(CR)が含まれています: \"%s\"\n" -#: ../../fe_utils/string_utils.c:607 +#: ../../fe_utils/string_utils.c:760 #, c-format msgid "database name contains a newline or carriage return: \"%s\"\n" msgstr "データベース名に改行(LF)または復帰(CR)が含まれています: \"%s\"\n" @@ -262,291 +262,311 @@ msgstr "\"%s\"のjunctionを設定できませんでした: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "\"%s\"のjunctionを入手できませんでした: %s\n" -#: initdb.c:627 initdb.c:1619 +#: initdb.c:372 +#, c-format +msgid "_wsetlocale() failed" +msgstr "_wsetlocale()が失敗しました" + +#: initdb.c:379 +#, c-format +msgid "setlocale() failed" +msgstr "setlocale()が失敗しました" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale" +msgstr "古いロケールの復元に失敗しました" + +#: initdb.c:396 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "古いロケール\"%s\"を復元できませんでした" + +#: initdb.c:685 initdb.c:1705 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" -#: initdb.c:671 initdb.c:975 initdb.c:995 +#: initdb.c:729 initdb.c:1035 initdb.c:1055 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ファイル\"%s\"を書き込み用にオープンできませんでした: %m" -#: initdb.c:675 initdb.c:978 initdb.c:997 +#: initdb.c:733 initdb.c:1038 initdb.c:1057 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: initdb.c:679 +#: initdb.c:737 #, c-format msgid "could not close file \"%s\": %m" msgstr "ファイル\"%s\"をクローズできませんでした: %m" -#: initdb.c:713 +#: initdb.c:771 #, c-format msgid "removing data directory \"%s\"" msgstr "データディレクトリ\"%s\"を削除しています" -#: initdb.c:715 +#: initdb.c:773 #, c-format msgid "failed to remove data directory" msgstr "データディレクトリの削除に失敗しました" -#: initdb.c:719 +#: initdb.c:777 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "データディレクトリ\"%s\"の内容を削除しています" -#: initdb.c:722 +#: initdb.c:780 #, c-format msgid "failed to remove contents of data directory" msgstr "データディレクトリの内容の削除に失敗しました" -#: initdb.c:727 +#: initdb.c:785 #, c-format msgid "removing WAL directory \"%s\"" msgstr "WAL ディレクトリ\"%s\"を削除しています" -#: initdb.c:729 +#: initdb.c:787 #, c-format msgid "failed to remove WAL directory" msgstr "WAL ディレクトリの削除に失敗しました" -#: initdb.c:733 +#: initdb.c:791 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "WAL ディレクトリ\"%s\"の中身を削除しています" -#: initdb.c:735 +#: initdb.c:793 #, c-format msgid "failed to remove contents of WAL directory" msgstr "WAL ディレクトリの中身の削除に失敗しました" -#: initdb.c:742 +#: initdb.c:800 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "ユーザーの要求によりデータディレクトリ\"%s\"を削除しませんでした" -#: initdb.c:746 +#: initdb.c:804 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "ユーザーの要求により WAL ディレクトリ\"%s\"を削除しませんでした" -#: initdb.c:764 +#: initdb.c:822 #, c-format msgid "cannot be run as root" msgstr "root では実行できません" -#: initdb.c:765 +#: initdb.c:823 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "サーバープロセスの所有者となる(非特権)ユーザーとして(例えば\"su\"を使用して)ログインしてください。" -#: initdb.c:797 +#: initdb.c:855 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\"は有効なサーバー符号化方式名ではありません" -#: initdb.c:941 +#: initdb.c:1001 #, c-format msgid "file \"%s\" does not exist" msgstr "ファイル\"%s\"は存在しません" -#: initdb.c:942 initdb.c:947 initdb.c:954 +#: initdb.c:1002 initdb.c:1007 initdb.c:1014 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "インストール先が破損しているか実行時オプション-Lで間違ったディレクトリを指定した可能性があります。" -#: initdb.c:946 +#: initdb.c:1006 #, c-format msgid "could not access file \"%s\": %m" msgstr "ファイル\"%s\"にアクセスできませんでした: %m" -#: initdb.c:953 +#: initdb.c:1013 #, c-format msgid "file \"%s\" is not a regular file" msgstr "ファイル\"%s\"は通常のファイルではありません" -#: initdb.c:1086 +#: initdb.c:1158 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "動的共有メモリの実装を選択しています ... " -#: initdb.c:1095 +#: initdb.c:1168 #, c-format msgid "selecting default \"max_connections\" ... " msgstr "デフォルトの\"max_connections\"を選択しています ... " -#: initdb.c:1115 +#: initdb.c:1193 +#, c-format +msgid "selecting default \"autovacuum_worker_slots\" ... %d\n" +msgstr "デフォルトの\"autovacuum_worker_slots\"を選択しています ... %d\n" + +#: initdb.c:1196 #, c-format msgid "selecting default \"shared_buffers\" ... " msgstr "デフォルトの\"shared_buffers\"を選択しています ... " -#: initdb.c:1138 +#: initdb.c:1219 #, c-format msgid "selecting default time zone ... " msgstr "デフォルトの時間帯を選択しています ... " -#: initdb.c:1217 +#: initdb.c:1299 msgid "creating configuration files ... " msgstr "設定ファイルを作成しています ... " -#: initdb.c:1370 initdb.c:1384 initdb.c:1451 initdb.c:1462 +#: initdb.c:1456 initdb.c:1470 initdb.c:1537 initdb.c:1548 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "\"%s\"の権限を変更できませんでした: %m" -#: initdb.c:1481 +#: initdb.c:1567 #, c-format msgid "running bootstrap script ... " msgstr "ブートストラップスクリプトを実行しています ... " -#: initdb.c:1493 +#: initdb.c:1579 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "入力ファイル\"%s\"は PostgreSQL %s のものではありません" -#: initdb.c:1495 +#: initdb.c:1581 #, c-format msgid "Specify the correct path using the option -L." msgstr "-Lオプションを使用して正しいパスを指定してください。" -#: initdb.c:1597 +#: initdb.c:1683 msgid "Enter new superuser password: " msgstr "新しいスーパーユーザーのパスワードを入力してください:" -#: initdb.c:1598 +#: initdb.c:1684 msgid "Enter it again: " msgstr "再入力してください:" -#: initdb.c:1601 +#: initdb.c:1687 #, c-format msgid "Passwords didn't match.\n" msgstr "パスワードが一致しません。\n" -#: initdb.c:1625 +#: initdb.c:1711 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "ファイル\"%s\"からパスワードを読み取ることができませんでした: %m" -#: initdb.c:1628 +#: initdb.c:1714 #, c-format msgid "password file \"%s\" is empty" msgstr "パスワードファイル\"%s\"が空です" -#: initdb.c:2040 +#: initdb.c:2126 #, c-format msgid "caught signal\n" msgstr "シグナルが発生しました\n" -#: initdb.c:2046 +#: initdb.c:2132 #, c-format msgid "could not write to child process: %s\n" msgstr "子プロセスへの書き込みができませんでした: %s\n" -#: initdb.c:2054 +#: initdb.c:2140 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2143 -#, c-format -msgid "setlocale() failed" -msgstr "setlocale()が失敗しました" - -#: initdb.c:2161 +#: initdb.c:2222 initdb.c:2268 #, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "古いロケール\"%s\"を復元できませんでした" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "ロケール名\"%s\"は不正な非ASCII文字を含んでいます" -#: initdb.c:2169 +#: initdb.c:2248 #, c-format msgid "invalid locale name \"%s\"" msgstr "ロケール名\"%s\"は不正です" -#: initdb.c:2170 +#: initdb.c:2249 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "ロケール名がICU特有のものである場合は、--icu-localeを使用してください。" -#: initdb.c:2183 +#: initdb.c:2262 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "不正なロケール設定; 環境変数LANGおよびLC_* を確認してください" -#: initdb.c:2209 initdb.c:2233 +#: initdb.c:2293 initdb.c:2317 #, c-format msgid "encoding mismatch" msgstr "符号化方式が合いません" -#: initdb.c:2210 +#: initdb.c:2294 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "選択した符号化方式(%s)と選択したロケールが使用する符号化方式(%s)が合っていません。これにより各種の文字列処理関数が間違った動作をすることになります。" -#: initdb.c:2215 initdb.c:2236 +#: initdb.c:2299 initdb.c:2320 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "%sを再度実行してください、その際にはエンコーディングを明示的に指定しないか、適合する組み合わせを選択してください。" -#: initdb.c:2234 +#: initdb.c:2318 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "指定された符号化方式(%s)はICUプロバイダではサポートされません。" -#: initdb.c:2285 +#: initdb.c:2369 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "ロケール名\"%s\"を、言語タグに変換できませんでした: %s" -#: initdb.c:2291 initdb.c:2343 initdb.c:2435 +#: initdb.c:2375 initdb.c:2427 initdb.c:2521 #, c-format msgid "ICU is not supported in this build" msgstr "このビルドではICUはサポートされていません" -#: initdb.c:2314 +#: initdb.c:2398 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "ロケール\"%s\"から言語を取得できませんでした: %s" -#: initdb.c:2340 +#: initdb.c:2424 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "ロケール\"%s\"は未知の言語\"%s\"を含んでいます" -#: initdb.c:2401 +#: initdb.c:2485 #, c-format msgid "locale must be specified if provider is %s" msgstr "ロケールプロバイダが%sの場合はロケールの指定が必須です" -#: initdb.c:2412 +#: initdb.c:2498 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "ロケール名\"%s\"は組み込みプロバイダでは不正です" -#: initdb.c:2423 +#: initdb.c:2509 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "ICUロケール\"%s\"に対して言語タグ\"%s\"を使用します。\n" -#: initdb.c:2446 +#: initdb.c:2532 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" "\n" msgstr "%sはPostgreSQLデータベースクラスタを初期化します。\n" -#: initdb.c:2447 +#: initdb.c:2533 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: initdb.c:2448 +#: initdb.c:2534 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATADIR]\n" -#: initdb.c:2449 +#: initdb.c:2535 #, c-format msgid "" "\n" @@ -555,57 +575,57 @@ msgstr "" "\n" "オプション:\n" -#: initdb.c:2450 +#: initdb.c:2536 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METHOD ローカル接続のデフォルト認証方式\n" -#: initdb.c:2451 +#: initdb.c:2537 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=METHOD ローカルTCP/IP接続のデフォルト認証方式\n" -#: initdb.c:2452 +#: initdb.c:2538 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=METHOD ローカルソケット接続のデフォルト認証方式\n" -#: initdb.c:2453 +#: initdb.c:2539 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR データベースクラスタの場所\n" -#: initdb.c:2454 +#: initdb.c:2540 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=ENCODING 新規データベースのデフォルト符号化方式\n" -#: initdb.c:2455 +#: initdb.c:2541 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access データディレクトリのグループ読み取り/実行を許可\n" -#: initdb.c:2456 +#: initdb.c:2542 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=LOCALE 新しいデータベースのICUロケールIDを設定\n" -#: initdb.c:2457 +#: initdb.c:2543 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" msgstr " --icu-rules=RULES 新しいデータベースに追加するICU照合順序ルール(群)\n" -#: initdb.c:2458 +#: initdb.c:2544 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums データページのチェックサムを使用\n" -#: initdb.c:2459 +#: initdb.c:2545 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE 新しいデータベースのデフォルトロケールをセット\n" -#: initdb.c:2460 +#: initdb.c:2546 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -619,12 +639,12 @@ msgstr "" " デフォルトロケールを設定(デフォルト値は環境変数から\n" " 取得)\n" -#: initdb.c:2464 +#: initdb.c:2550 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale --locale=C と同じ\n" -#: initdb.c:2465 +#: initdb.c:2551 #, c-format msgid "" " --builtin-locale=LOCALE\n" @@ -633,7 +653,7 @@ msgstr "" " --builtin-locale=LOCALE\n" " 新しいデータベースの組み込みロケールを指定\n" -#: initdb.c:2467 +#: initdb.c:2553 #, c-format msgid "" " --locale-provider={builtin|libc|icu}\n" @@ -643,14 +663,19 @@ msgstr "" " 新しいデータベースにおけるデフォルトのロケール\n" " プロバイダを設定\n" -#: initdb.c:2469 +#: initdb.c:2555 +#, c-format +msgid " --no-data-checksums do not use data page checksums\n" +msgstr " --no-data-checksums データページのチェックサムを使用しない\n" + +#: initdb.c:2556 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr "" " --pwfile=ファイル名 新しいスーパーユーザーのパスワードをファイルから\n" " 読み込む\n" -#: initdb.c:2470 +#: initdb.c:2557 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -659,27 +684,27 @@ msgstr "" " -T, --text-search-config=CFG\\\n" " デフォルトのテキスト検索設定\n" -#: initdb.c:2472 +#: initdb.c:2559 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME データベースのスーパーユーザーの名前\n" -#: initdb.c:2473 +#: initdb.c:2560 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt 新規スーパーユーザーに対してパスワード入力を促す\n" -#: initdb.c:2474 +#: initdb.c:2561 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR 先行書き込みログ用ディレクトリの位置\n" -#: initdb.c:2475 +#: initdb.c:2562 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE WALセグメントのサイズ、メガバイト単位\n" -#: initdb.c:2476 +#: initdb.c:2563 #, c-format msgid "" "\n" @@ -688,57 +713,62 @@ msgstr "" "\n" "使用頻度の低いオプション:\n" -#: initdb.c:2477 +#: initdb.c:2564 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" msgstr " -c, --set NAME=VALUE サーバーパラメータのデフォルト値を上書き設定\n" -#: initdb.c:2478 +#: initdb.c:2565 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug 多くのデバッグ用の出力を生成\n" -#: initdb.c:2479 +#: initdb.c:2566 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches debug_discard_cachesを1に設定する\n" -#: initdb.c:2480 +#: initdb.c:2567 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY 入力ファイルの場所を指定\n" -#: initdb.c:2481 +#: initdb.c:2568 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean エラー発生後のクリーンアップを行わない\n" -#: initdb.c:2482 +#: initdb.c:2569 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync 変更の安全なディスクへの書き出しを待機しない\n" -#: initdb.c:2483 +#: initdb.c:2570 +#, c-format +msgid " --no-sync-data-files do not sync files within database directories\n" +msgstr " --no-sync-data-files データベースディレクトリ内のファイルを同期しない\n" + +#: initdb.c:2571 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions 次の手順の指示を表示しない\n" -#: initdb.c:2484 +#: initdb.c:2572 #, c-format msgid " -s, --show show internal settings, then exit\n" msgstr " -s, --show 内部設定を表示して終了\n" -#: initdb.c:2485 +#: initdb.c:2573 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr " --sync-method=METHOD ファイルをディスクに同期させる方法を指定\n" -#: initdb.c:2486 +#: initdb.c:2574 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only データベースファイルのsyncのみを実行して終了\n" -#: initdb.c:2487 +#: initdb.c:2575 #, c-format msgid "" "\n" @@ -747,17 +777,17 @@ msgstr "" "\n" "その他のオプション:\n" -#: initdb.c:2488 +#: initdb.c:2576 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: initdb.c:2489 +#: initdb.c:2577 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: initdb.c:2490 +#: initdb.c:2578 #, c-format msgid "" "\n" @@ -767,7 +797,7 @@ msgstr "" "\n" "データディレクトリが指定されない場合、PGDATA環境変数が使用されます。\n" -#: initdb.c:2492 +#: initdb.c:2580 #, c-format msgid "" "\n" @@ -776,72 +806,72 @@ msgstr "" "\n" "バグは<%s>に報告してください。\n" -#: initdb.c:2493 +#: initdb.c:2581 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: initdb.c:2517 +#: initdb.c:2605 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "\"%2$s\"接続では認証方式\"%1$s\"は無効です" -#: initdb.c:2531 +#: initdb.c:2619 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "パスワード認証を有効にするにはスーパーユーザーのパスワードを指定する必要があります" -#: initdb.c:2550 +#: initdb.c:2638 #, c-format msgid "no data directory specified" msgstr "データディレクトリが指定されていません" -#: initdb.c:2551 +#: initdb.c:2639 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "データベースシステムのデータを格納するディレクトリを指定する必要があります。実行時オプション -D、もしくは、PGDATA環境変数で指定してください。" -#: initdb.c:2568 +#: initdb.c:2656 #, c-format msgid "could not set environment" msgstr "環境を設定できません" -#: initdb.c:2586 +#: initdb.c:2674 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "%2$sにはプログラム\"%1$s\"が必要ですが、\"%3$s\"と同じディレクトリにはありませんでした。" -#: initdb.c:2589 +#: initdb.c:2677 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じバージョンではありませんでした。" -#: initdb.c:2604 +#: initdb.c:2692 #, c-format msgid "input file location must be an absolute path" msgstr "入力ファイルの場所は絶対パスでなければなりません" -#: initdb.c:2621 +#: initdb.c:2709 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "データベースクラスタはロケール\"%s\"で初期化されます。\n" -#: initdb.c:2624 +#: initdb.c:2712 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "データベースクラスタは以下のロケール構成で初期化されます。\n" -#: initdb.c:2625 +#: initdb.c:2713 #, c-format msgid " locale provider: %s\n" msgstr " ロケールプロバイダ:%s\n" -#: initdb.c:2627 +#: initdb.c:2715 #, c-format msgid " default collation: %s\n" msgstr " デフォルト照合順序:%s\n" -#: initdb.c:2628 +#: initdb.c:2716 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -858,22 +888,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2658 +#: initdb.c:2746 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "ロケール\"%s\"に対して適切な符号化方式がありませんでした" -#: initdb.c:2660 +#: initdb.c:2748 #, c-format msgid "Rerun %s with the -E option." msgstr "-Eオプションを付けて%sを再実行してください。" -#: initdb.c:2661 initdb.c:3204 initdb.c:3324 initdb.c:3344 +#: initdb.c:2749 initdb.c:3287 initdb.c:3413 initdb.c:3433 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: initdb.c:2673 +#: initdb.c:2761 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -883,112 +913,112 @@ msgstr "" "符号化方式として使用できません。\n" "デフォルトのデータベース符号化方式は代わりに\"%s\"に設定されます。\n" -#: initdb.c:2678 +#: initdb.c:2766 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "ロケール\"%s\"は非サポートの符号化方式\"%s\"を必要とします" -#: initdb.c:2680 +#: initdb.c:2768 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "符号化方式\"%s\"はサーバー側の符号化方式として使用できません。" -#: initdb.c:2682 +#: initdb.c:2770 #, c-format msgid "Rerun %s with a different locale selection." msgstr "別のローケルを選択して%sを再実行してください。" -#: initdb.c:2690 +#: initdb.c:2778 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "デフォルトのデータベース符号化方式はそれに対応して%sに設定されました。\n" -#: initdb.c:2704 +#: initdb.c:2794 #, c-format msgid "builtin provider locale \"%s\" requires encoding \"%s\"" msgstr "組み込みプロバイダロケール\"%s\"は符号化方式\"%s\"を必要とします" -#: initdb.c:2766 +#: initdb.c:2856 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "ロケール\"%s\"用の適切なテキスト検索設定が見つかりませんでした" -#: initdb.c:2777 +#: initdb.c:2867 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "ロケール\"%s\"に適したテキスト検索設定が不明です" -#: initdb.c:2782 +#: initdb.c:2872 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "指定したテキスト検索設定\"%s\"がロケール\"%s\"に合わない可能性があります" -#: initdb.c:2787 +#: initdb.c:2877 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "デフォルトのテキスト検索構成は %s に設定されます。\n" -#: initdb.c:2830 initdb.c:2901 +#: initdb.c:2911 initdb.c:2982 #, c-format msgid "creating directory %s ... " msgstr "ディレクトリ%sを作成しています ... " -#: initdb.c:2835 initdb.c:2906 initdb.c:2954 initdb.c:3011 +#: initdb.c:2916 initdb.c:2987 initdb.c:3035 initdb.c:3092 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: initdb.c:2844 initdb.c:2916 +#: initdb.c:2925 initdb.c:2997 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "ディレクトリ%sの権限を設定しています ... " -#: initdb.c:2849 initdb.c:2921 +#: initdb.c:2930 initdb.c:3002 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "ディレクトリ\"%s\"の権限を変更できませんでした: %m" -#: initdb.c:2861 initdb.c:2933 +#: initdb.c:2942 initdb.c:3014 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "ディレクトリ\"%s\"は存在しますが、空ではありません" -#: initdb.c:2865 +#: initdb.c:2946 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "新規にデータベースシステムを作成したいのであれば、ディレクトリ\"%s\"を削除あるいは空にする、または%sを\"%s\"以外の引数で実行してください。" -#: initdb.c:2873 initdb.c:2943 initdb.c:3369 +#: initdb.c:2954 initdb.c:3024 initdb.c:3458 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: initdb.c:2894 +#: initdb.c:2975 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL ディレクトリの位置は、絶対パスでなければなりません" -#: initdb.c:2937 +#: initdb.c:3018 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "そこにWALを格納したい場合は、ディレクトリ\"%s\"を削除するか空にしてください。" -#: initdb.c:2947 +#: initdb.c:3028 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: initdb.c:2966 +#: initdb.c:3047 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "おそらくマウントポイントであることに起因した先頭がドットであるファイル、または不可視なファイルが含まれています。" -#: initdb.c:2968 +#: initdb.c:3049 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "おそらくマウントポイントであることに起因したlost+foundディレクトリが含まれています。" -#: initdb.c:2970 +#: initdb.c:3051 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -997,65 +1027,65 @@ msgstr "" "マウントポイントであるディレクトリをデータディレクトリとして使用することはお勧めしません。\n" "この下にサブディレクトリを作成してください。" -#: initdb.c:2997 +#: initdb.c:3078 #, c-format msgid "creating subdirectories ... " msgstr "サブディレクトリを作成しています ... " -#: initdb.c:3040 +#: initdb.c:3121 msgid "performing post-bootstrap initialization ... " msgstr "ブートストラップ後の初期化を実行しています ... " -#: initdb.c:3203 +#: initdb.c:3286 #, c-format msgid "-c %s requires a value" msgstr "-c %sは値が必要です" -#: initdb.c:3228 +#: initdb.c:3311 #, c-format msgid "Running in debug mode.\n" msgstr "デバッグモードで実行しています。\n" -#: initdb.c:3232 +#: initdb.c:3315 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "no-clean モードで実行しています。失敗した状況は削除されません。\n" -#: initdb.c:3305 +#: initdb.c:3388 #, c-format msgid "unrecognized locale provider: %s" msgstr "認識できない照合順序プロバイダ: %s" -#: initdb.c:3342 +#: initdb.c:3431 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" -#: initdb.c:3349 initdb.c:3353 initdb.c:3357 +#: initdb.c:3438 initdb.c:3442 initdb.c:3446 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "ロケールプロバイダ\"%2$s\"が選択されていなければ%1$sは指定できません" -#: initdb.c:3371 initdb.c:3434 +#: initdb.c:3460 initdb.c:3523 msgid "syncing data to disk ... " msgstr "データをディスクに同期しています ... " -#: initdb.c:3379 +#: initdb.c:3468 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "パスワードプロンプトとパスワードファイルは同時に指定できません" -#: initdb.c:3390 +#: initdb.c:3479 #, c-format msgid "argument of %s must be a power of two between 1 and 1024" msgstr "%sの引数は1から1024までの間の2の累乗でなければなりません" -#: initdb.c:3403 +#: initdb.c:3492 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "スーパーユーザー名\"%s\"は許可されません; ロール名は\"pg_\"で始めることはできません" -#: initdb.c:3405 +#: initdb.c:3494 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1066,17 +1096,17 @@ msgstr "" "このユーザーをサーバープロセスの所有者とする必要があります。\n" "\n" -#: initdb.c:3421 +#: initdb.c:3510 #, c-format msgid "Data page checksums are enabled.\n" msgstr "データページのチェックサムは有効です。\n" -#: initdb.c:3423 +#: initdb.c:3512 #, c-format msgid "Data page checksums are disabled.\n" msgstr "データベージのチェックサムは無効です。\n" -#: initdb.c:3440 +#: initdb.c:3529 #, c-format msgid "" "\n" @@ -1087,22 +1117,22 @@ msgstr "" "ディスクへの同期がスキップされました。\n" "オペレーティングシステムがクラッシュした場合データディレクトリは破損されるかもしれません。\n" -#: initdb.c:3445 +#: initdb.c:3534 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "ローカル接続に対して\"trust\"認証を有効にします " -#: initdb.c:3446 +#: initdb.c:3535 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "pg_hba.confを編集する、もしくは、次回initdbを実行する時に -A オプション、あるいは --auth-local および --auth-host オプションを使用することで変更できます。" #. translator: This is a placeholder in a shell command. -#: initdb.c:3476 +#: initdb.c:3565 msgid "logfile" msgstr "ログファイル" -#: initdb.c:3478 +#: initdb.c:3567 #, c-format msgid "" "\n" diff --git a/src/bin/initdb/po/ka.po b/src/bin/initdb/po/ka.po index 898a421cb4c2a..fe27c8f866e00 100644 --- a/src/bin/initdb/po/ka.po +++ b/src/bin/initdb/po/ka.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL) 17\n" +"Project-Id-Version: initdb (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-14 02:21+0000\n" -"PO-Revision-Date: 2024-06-14 06:11+0200\n" +"POT-Creation-Date: 2025-03-27 22:52+0000\n" +"PO-Revision-Date: 2025-03-28 03:57+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,24 +16,24 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "შეცდომა: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "გაფრთხილება: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "დეტალები: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "მინიშნება: " @@ -58,28 +58,28 @@ msgstr "გასაშვებად ფაილის \"%s\" პოვნა msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "ბილიკის (\"%s\") აბსოლუტურ ფორმაში ამოხსნის შეცდომა: %m" -#: ../../common/exec.c:382 initdb.c:695 +#: ../../common/exec.c:363 initdb.c:753 #, c-format msgid "could not execute command \"%s\": %m" msgstr "ბრძანების (\"%s\") შესრულების შეცდომა: %m" -#: ../../common/exec.c:394 +#: ../../common/exec.c:375 #, c-format msgid "could not read from command \"%s\": %m" msgstr "ბრძანებიდან \"%s\" წაკითხვის შეცდომა: %m" -#: ../../common/exec.c:397 +#: ../../common/exec.c:378 #, c-format msgid "no data was returned by command \"%s\"" msgstr "ბრძანებამ \"%s\" მონაცემები არ დააბრუნა" -#: ../../common/exec.c:424 +#: ../../common/exec.c:405 #, c-format msgid "%s() failed: %m" msgstr "%s()-ის შეცდომა: %m" -#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 -#: initdb.c:353 +#: ../../common/exec.c:543 ../../common/exec.c:588 ../../common/exec.c:680 +#: initdb.c:375 initdb.c:411 #, c-format msgid "out of memory" msgstr "არასაკმარისი მეხსიერება" @@ -95,46 +95,46 @@ msgstr "არასაკმარისი მეხსიერება\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" -#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 -#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#: ../../common/file_utils.c:69 ../../common/file_utils.c:370 +#: ../../common/file_utils.c:428 ../../common/file_utils.c:502 #, c-format msgid "could not open file \"%s\": %m" msgstr "ფაილის (%s) გახსნის შეცდომა: %m" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format 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:123 ../../common/file_utils.c:588 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ფაილი \"%s\" არ არსებობს: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "ამ აგებას სინქრონიზაციის მეთოდის \"%s\" მხარდაჭერა არ გააჩნია" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 #: ../../common/pgfnames.c:48 ../../common/rmtree.c:63 #, c-format msgid "could not open directory \"%s\": %m" msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "საქაღალდის (%s) წაკითხვის შეცდომა: %m" -#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#: ../../common/file_utils.c:440 ../../common/file_utils.c:510 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ფაილის (%s) fsync-ის შეცდომა: %m" -#: ../../common/file_utils.c:498 +#: ../../common/file_utils.c:520 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "გადარქმევის შეცდომა %s - %s: %m" @@ -243,12 +243,12 @@ msgstr "%s არაა საზღვრებში %d-დან %d-მდე msgid "unrecognized sync method: %s" msgstr "უცნობი სინქრონიზაციის მეთოდი: \"%s\"" -#: ../../fe_utils/string_utils.c:434 +#: ../../fe_utils/string_utils.c:587 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"\n" msgstr "გარსის ბრძანების არგუმენტი ხაზის გადატანას ან კარეტის დაბრუნებას შეიცავს: \"%s\"\n" -#: ../../fe_utils/string_utils.c:607 +#: ../../fe_utils/string_utils.c:760 #, c-format msgid "database name contains a newline or carriage return: \"%s\"\n" msgstr "მონაცემთა ბაზის სახელი ხაზის გადატანას ან კარეტის დაბრუნებას შეიცავს: \"%s\"\n" @@ -263,274 +263,294 @@ msgstr "\"%s\"-ისთვის შეერთების დაყენე msgid "could not get junction for \"%s\": %s\n" msgstr "\"%s\"-ისთვის შეერთების მიღება ვერ მოხერხდა: %s\n" -#: initdb.c:627 initdb.c:1619 +#: initdb.c:372 +#, c-format +msgid "_wsetlocale() failed" +msgstr "_wsetlocale() ჩავარდა" + +#: initdb.c:379 +#, c-format +msgid "setlocale() failed" +msgstr "setlocale() ჩავარდა" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale" +msgstr "ძველი ლოკალის აღდგენა ჩავარდა" + +#: initdb.c:396 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "ძველი ენის (\"%s\") აღდგენის შეცდომა" + +#: initdb.c:685 initdb.c:1705 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ფაილის (%s) გახსნის შეცდომა: %m" -#: initdb.c:671 initdb.c:975 initdb.c:995 +#: initdb.c:729 initdb.c:1035 initdb.c:1055 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ფაილის (\"%s\") ჩასაწერად გახსნა შეუძლებელია: %m" -#: initdb.c:675 initdb.c:978 initdb.c:997 +#: initdb.c:733 initdb.c:1038 initdb.c:1057 #, c-format msgid "could not write file \"%s\": %m" msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" -#: initdb.c:679 +#: initdb.c:737 #, c-format msgid "could not close file \"%s\": %m" msgstr "ფაილის (%s) დახურვის შეცდომა: %m" -#: initdb.c:713 +#: initdb.c:771 #, c-format msgid "removing data directory \"%s\"" msgstr "მონაცემების საქაღალდის წაშლა \"%s\"" -#: initdb.c:715 +#: initdb.c:773 #, c-format msgid "failed to remove data directory" msgstr "მონაცემების საქაღალდის წაშლის შეცდომა" -#: initdb.c:719 +#: initdb.c:777 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "მონაცემების საქაღალდის შემცველობის წაშლა \"%s\"" -#: initdb.c:722 +#: initdb.c:780 #, c-format msgid "failed to remove contents of data directory" msgstr "მონაცემების საქაღალდის შემცველობის წაშლის შეცდომა" -#: initdb.c:727 +#: initdb.c:785 #, c-format msgid "removing WAL directory \"%s\"" msgstr "მიმდინარეობს WAL საქაღალდის წაშლა \"%s\"" -#: initdb.c:729 +#: initdb.c:787 #, c-format msgid "failed to remove WAL directory" msgstr "შეცდომა WAL საქაღალდის წაშლისას" -#: initdb.c:733 +#: initdb.c:791 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "მიმდინარეობს WAL საქაღალდის (\"%s\") შემცველობის წაშლა" -#: initdb.c:735 +#: initdb.c:793 #, c-format msgid "failed to remove contents of WAL directory" msgstr "შეცდომა WAL საქაღალდის შემცველობის წაშლისას" -#: initdb.c:742 +#: initdb.c:800 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "მონაცემების საქაღალდე \"%s\" მომხმარებლის მოთხოვნისას არ წაიშლება" -#: initdb.c:746 +#: initdb.c:804 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL საქაღალდე \"%s\" მომხმარებლის მოთხოვნისას არ წაიშლება" -#: initdb.c:764 +#: initdb.c:822 #, c-format msgid "cannot be run as root" msgstr "root-ით ვერ გაეშვება" -#: initdb.c:765 +#: initdb.c:823 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "შედით (ან გამოიყენეთ \"su\") არაპრივილეგირებული მომხმარებლით, რომელიც სერვერს პროცესის მფლობელი იქნება." -#: initdb.c:797 +#: initdb.c:855 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" კოდირების სწორ სახელს არ წარმოადგენს" -#: initdb.c:941 +#: initdb.c:1001 #, c-format msgid "file \"%s\" does not exist" msgstr "ფაილი %s არ არსებობს" -#: initdb.c:942 initdb.c:947 initdb.c:954 +#: initdb.c:1002 initdb.c:1007 initdb.c:1014 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "შეიძლება ნიშნავდეს, რომ თქვენი დაყენებული ვერსია გაფუჭებულია ან -L -ს არასწორი საქაღალდე მიუთითეთ." -#: initdb.c:946 +#: initdb.c:1006 #, c-format msgid "could not access file \"%s\": %m" msgstr "ფაილის (%s) წვდომის შეცდომა: %m" -#: initdb.c:953 +#: initdb.c:1013 #, c-format msgid "file \"%s\" is not a regular file" msgstr "ფაილ \"%s\" ჩვეულებრივი ფაილი არაა" -#: initdb.c:1086 +#: initdb.c:1158 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "დინამიკური გაზიარებული მეხსიერების იმპლემენტაციის არჩევა ... " -#: initdb.c:1095 +#: initdb.c:1168 #, c-format msgid "selecting default \"max_connections\" ... " msgstr "ნაგულისხმევი \"max_connections\"-ის არჩევა … " -#: initdb.c:1115 +#: initdb.c:1193 +#, c-format +msgid "selecting default \"autovacuum_worker_slots\" ... %d\n" +msgstr "მიმდინარეობს ნაგულისხმევი \"autovacuum_worker_slots\"-ის არჩევა ... %d\n" + +#: initdb.c:1196 #, c-format msgid "selecting default \"shared_buffers\" ... " msgstr "ნაგულისხმევი \"shared_buffers\"-ის არჩევა … " -#: initdb.c:1138 +#: initdb.c:1219 #, c-format msgid "selecting default time zone ... " msgstr "დროის ნაგულისხმევი სარტყლის არჩევა … " -#: initdb.c:1217 +#: initdb.c:1299 msgid "creating configuration files ... " msgstr "კონფიგურაციის ფაილების შექმნა … " -#: initdb.c:1370 initdb.c:1384 initdb.c:1451 initdb.c:1462 +#: initdb.c:1456 initdb.c:1470 initdb.c:1537 initdb.c:1548 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "\"%s\"-ის წვდომების შეცვლის შეცდომა: %m" -#: initdb.c:1481 +#: initdb.c:1567 #, c-format msgid "running bootstrap script ... " msgstr "მოსამზადებელი სკრიპტის გაშვება ... " -#: initdb.c:1493 +#: initdb.c:1579 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "შეყვანილი ფაილი \"%s\" PostgreSQL %s -ს არ ეკუთვნის" -#: initdb.c:1495 +#: initdb.c:1581 #, c-format msgid "Specify the correct path using the option -L." msgstr "მიუთითეთ სწორი ბილიკი -L პარამეტრით." -#: initdb.c:1597 +#: initdb.c:1683 msgid "Enter new superuser password: " msgstr "შეიყვანეთ ზემომხმარებლის ახალი პაროლი: " -#: initdb.c:1598 +#: initdb.c:1684 msgid "Enter it again: " msgstr "შეიყვანეთ კდევ ერთხელ: " -#: initdb.c:1601 +#: initdb.c:1687 #, c-format msgid "Passwords didn't match.\n" msgstr "პაროლები არ ემთხვევა.\n" -#: initdb.c:1625 +#: initdb.c:1711 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "პაროლის ფაილიდან (\"%s\") წაკითხვის შეცდომა: %m" -#: initdb.c:1628 +#: initdb.c:1714 #, c-format msgid "password file \"%s\" is empty" msgstr "პაროლის ფაილი (\"%s\") ცარიელია" -#: initdb.c:2040 +#: initdb.c:2126 #, c-format msgid "caught signal\n" msgstr "მიღებულია სიგნალი\n" -#: initdb.c:2046 +#: initdb.c:2132 #, c-format msgid "could not write to child process: %s\n" msgstr "შვილობილი პროცესისთვის ჩაწერის შეცდომა: %s\n" -#: initdb.c:2054 +#: initdb.c:2140 #, c-format msgid "ok\n" msgstr "დიახ\n" -#: initdb.c:2143 -#, c-format -msgid "setlocale() failed" -msgstr "setlocale()-ის შეცდომა" - -#: initdb.c:2161 +#: initdb.c:2222 initdb.c:2268 #, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "ძველი ენის (\"%s\") აღდგენის შეცდომა" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "ლოკალის სახელი \"%s\" არა-ASCII სიმბოლოებს შეიცავს" -#: initdb.c:2169 +#: initdb.c:2248 #, c-format msgid "invalid locale name \"%s\"" msgstr "ენის არასწორი სახელი: \"%s\"" -#: initdb.c:2170 +#: initdb.c:2249 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "თუ ლოკალის სახელი მხოლოდ მითითებული ICU-სთვისა ხელმისაწვდომი, გამოიყენეთ --icu-locale." -#: initdb.c:2183 +#: initdb.c:2262 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "ენის არასწორი პარამეტრები; გადაამოწმეთ გარემოს ცვლადები: LANG და LC_*" -#: initdb.c:2209 initdb.c:2233 +#: initdb.c:2293 initdb.c:2317 #, c-format msgid "encoding mismatch" msgstr "კოდირება არ ემთხვევა" -#: initdb.c:2210 +#: initdb.c:2294 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "თქვენ მიერ არჩეული კოდირება (%s) და კოდირება, რომელსაც არჩეული ენა იყენებს (%s) არ ემთხვევა. ეს სიმბოლოების სტრიქონების დამუშავების სხვადასხვა ფუნქციების არასწორ ქცევას გამოიწვევს." -#: initdb.c:2215 initdb.c:2236 +#: initdb.c:2299 initdb.c:2320 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "თავიდან გაუშვით %s და კოდირება ან არ მიუთითოთ, ან სწორად მიუთითეთ." -#: initdb.c:2234 +#: initdb.c:2318 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "თქვენს მიერ შერჩეული კოდირება (%s) ICU -ის მომწოდებელთან ერთად მხარდაუჭერელია." -#: initdb.c:2285 +#: initdb.c:2369 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "მდებარეობის კოდის \"%s\" ენის ჭდეში (%s) გადაყვანის შეცდომა" -#: initdb.c:2291 initdb.c:2343 initdb.c:2435 +#: initdb.c:2375 initdb.c:2427 initdb.c:2521 #, c-format msgid "ICU is not supported in this build" msgstr "ამ აგებაში ICU-ის მხარდაჭერა არ არსებბს" -#: initdb.c:2314 +#: initdb.c:2398 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" -#: initdb.c:2340 +#: initdb.c:2424 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "ლოკალის \"%s\" ენა \"%s\" უცნობია" -#: initdb.c:2401 +#: initdb.c:2485 #, c-format msgid "locale must be specified if provider is %s" msgstr "ლოკალის მითითება აუცილებელია, თუ მომწოდებელია %s" -#: initdb.c:2412 +#: initdb.c:2498 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "არასწორი ლოკალის სახელი \"%s\" ჩაშენებული მომწოდებლისთვის" -#: initdb.c:2423 +#: initdb.c:2509 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "ვიყენებ ენის ჭდეს \"%s\" ICU ლოკალისთვის \"%s\".\n" -#: initdb.c:2446 +#: initdb.c:2532 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -539,17 +559,17 @@ msgstr "" "%s PostgreSQL ბაზის კლასერის ინიციალიზაციას ახდენს.\n" "\n" -#: initdb.c:2447 +#: initdb.c:2533 #, c-format msgid "Usage:\n" msgstr "გამოყენება:\n" -#: initdb.c:2448 +#: initdb.c:2534 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [პარამეტრი]... [მონაცემებისსაქაღალდე]\n" -#: initdb.c:2449 +#: initdb.c:2535 #, c-format msgid "" "\n" @@ -558,57 +578,57 @@ msgstr "" "\n" "პარამეტრები:\n" -#: initdb.c:2450 +#: initdb.c:2536 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=მეთოდი ავთენტიკაციის ნაგულისხმევი მეთოდი ლოკალური შეერთებებისთვის\n" -#: initdb.c:2451 +#: initdb.c:2537 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=მეთოდი ლოკალური TCP/IP შეერთების ავთენტიკაციის ნაგულისხმევი მეთოდი\n" -#: initdb.c:2452 +#: initdb.c:2538 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=მეთოდი ლოკალური სოკეტის შეერთების ავთენტიკაციის ნაგულისხმევი მეთოდი\n" -#: initdb.c:2453 +#: initdb.c:2539 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR ბაზის კლასტერის მდებარეობა\n" -#: initdb.c:2454 +#: initdb.c:2540 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=კოდირება ახალი ბაზების ნაგულისხმევი კოდირება\n" -#: initdb.c:2455 +#: initdb.c:2541 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access მონაცემების საქაღალდეზე ჯგუფის კითხვა/გაშვების წვდომის დაყენება\n" -#: initdb.c:2456 +#: initdb.c:2542 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=კოდირება ICU ენის ID ახალი ბაზებისთვის\n" -#: initdb.c:2457 +#: initdb.c:2543 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" msgstr " --icu-rules=წესები ახალი ბაზებისთვის დამატებითი ICUკოლაციის წესების დაყენება\n" -#: initdb.c:2458 +#: initdb.c:2544 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums მონაცემების გვერდის საკონტროლო ჯამების გამოყენება\n" -#: initdb.c:2459 +#: initdb.c:2545 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=ენა ახალი ბაზების ნაგულისხმევი ენის დაყენება\n" -#: initdb.c:2460 +#: initdb.c:2546 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -621,12 +641,12 @@ msgstr "" " დააყენეთ ნაგულისხმევი ენა შესაბამის კატეგორიაში\n" " ახალი ბაზებისთვის (ნაგულისხმევი აღებულია გარემოდან)\n" -#: initdb.c:2464 +#: initdb.c:2550 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale იგივე, რაც --locale=C\n" -#: initdb.c:2465 +#: initdb.c:2551 #, c-format msgid "" " --builtin-locale=LOCALE\n" @@ -635,7 +655,7 @@ msgstr "" " --builtin-locale=ლოკალი\n" " ჩაშენებული ლოკალის სახელის დაყენება ახალი ბაზებისთვის\n" -#: initdb.c:2467 +#: initdb.c:2553 #, c-format msgid "" " --locale-provider={builtin|libc|icu}\n" @@ -644,12 +664,17 @@ msgstr "" " --locale-provider={builtin|libc|icu}\n" " ახალი ბაზებისთვის ლოკალის ნაგულისხმევი მიმწოდებლის დაყენება\n" -#: initdb.c:2469 +#: initdb.c:2555 +#, c-format +msgid " --no-data-checksums do not use data page checksums\n" +msgstr " --no-data-checksums მონაცემების გვერდის საკონტროლო ჯამები გამოყენებული არ იქნება\n" + +#: initdb.c:2556 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FILE ახალი ზემომხმარებლის პაროლის ფაილიდან წაკითხვა\n" -#: initdb.c:2470 +#: initdb.c:2557 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -658,27 +683,27 @@ msgstr "" " -T, --text-search-config=CFG\n" " ტექსტის ძებნის ნაგულისხმევი კონფიგურაცია\n" -#: initdb.c:2472 +#: initdb.c:2559 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=სახელი ბაზის ზემომხმარებლის სახელი\n" -#: initdb.c:2473 +#: initdb.c:2560 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt ზემომხმარებლის პაროლის კითხვა\n" -#: initdb.c:2474 +#: initdb.c:2561 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR წინასწარ ჩაწერადი ჟურნალის (WAL) საქაღალდის მდებარეობა\n" -#: initdb.c:2475 +#: initdb.c:2562 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=ზომა WAL სეგმენტების ზომა, მეგაბაიტებში\n" -#: initdb.c:2476 +#: initdb.c:2563 #, c-format msgid "" "\n" @@ -687,57 +712,63 @@ msgstr "" "\n" "იშვიათად გამოყენებული პარამეტრები:\n" -#: initdb.c:2477 +#: initdb.c:2564 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" msgstr " -c, --set NAME=VALUE სერვერის ნაგულისხმევი პარამეტრის გადაფარვა\n" -#: initdb.c:2478 +#: initdb.c:2565 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug გასამართი ინფორმაციის გენერაცია\n" -#: initdb.c:2479 +#: initdb.c:2566 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches debug_discard_caches=1 დაყენება\n" -#: initdb.c:2480 +#: initdb.c:2567 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L საქაღალდე შეყვანის ფაილების შემცველი საქაღალდე\n" -#: initdb.c:2481 +#: initdb.c:2568 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean შეცდომის შემთხვევაში არ გაასუფთავო\n" -#: initdb.c:2482 +#: initdb.c:2569 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync არ დაველოდო ცვლილებების დისკზე უსაფრთხოდ ჩაწერას\n" -#: initdb.c:2483 +#: initdb.c:2570 +#, c-format +#| msgid " --no-data-checksums do not use data page checksums\n" +msgid " --no-sync-data-files do not sync files within database directories\n" +msgstr " --no-sync-data-files მონაცემთა საქაღალდეებს შორის ფაილების სინქრონიზაცია არ მოხდება\n" + +#: initdb.c:2571 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions შემდეგი ნაბიჯის ინსტრუქციები ნაჩვენები არ იქნება\n" -#: initdb.c:2484 +#: initdb.c:2572 #, c-format msgid " -s, --show show internal settings, then exit\n" msgstr " -s, --show შიდა პარამეტრების ჩვენება და გასვლა\n" -#: initdb.c:2485 +#: initdb.c:2573 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr " --sync-method=მეთოდი ფაილების დისკზე სინქრონიზაციის მეთოდის დაყენება\n" -#: initdb.c:2486 +#: initdb.c:2574 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only ბაზის ფაილების დისკზე სინქრონიზაცია და გასვლა\n" -#: initdb.c:2487 +#: initdb.c:2575 #, c-format msgid "" "\n" @@ -746,17 +777,17 @@ msgstr "" "\n" "სხვა პარამეტრები:\n" -#: initdb.c:2488 +#: initdb.c:2576 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: initdb.c:2489 +#: initdb.c:2577 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: initdb.c:2490 +#: initdb.c:2578 #, c-format msgid "" "\n" @@ -767,7 +798,7 @@ msgstr "" "თუ მონაცემების საქაღალდე მითითებული არაა, გამოყენებული იქნება \n" "გარემოს ცვლადი PGDATA.\n" -#: initdb.c:2492 +#: initdb.c:2580 #, c-format msgid "" "\n" @@ -776,72 +807,72 @@ msgstr "" "\n" "შეცდომების შესახებ მიწერეთ: %s\n" -#: initdb.c:2493 +#: initdb.c:2581 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: initdb.c:2517 +#: initdb.c:2605 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "ავთენტიკაციის მეთოდი (\"%s\") არასწორია \"%s\" შეერთებებისთვის" -#: initdb.c:2531 +#: initdb.c:2619 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "პაროლით ავთენტიკაციის ჩასართავად საჭიროა ზემომხმარებლის პაროლის მითითება" -#: initdb.c:2550 +#: initdb.c:2638 #, c-format msgid "no data directory specified" msgstr "მონაცემების საქაღალდე მითითებული არაა" -#: initdb.c:2551 +#: initdb.c:2639 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "უნდა დაადგინოთ საქაღლდე, სადაც ბაზის ამ სისტემის მონაცემები იქნება განთავსებული . გააკეთეთ ეს ან გამოძახების პარამეტრით -D ან გარემოს ცვლადით PGDATA." -#: initdb.c:2568 +#: initdb.c:2656 #, c-format msgid "could not set environment" msgstr "გარემოს დაყენების შეცდომა" -#: initdb.c:2586 +#: initdb.c:2674 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "პროგრამა \"%s\" სჭირდება \"%s\"-ს, მაგრამ იგივე საქაღალდეში, სადაც \"%s\", ნაპოვნი არაა" -#: initdb.c:2589 +#: initdb.c:2677 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "პროგრამა „%s“ ნაპოვნია „%s“-ის მიერ, მაგრამ ვერსია, იგივეა არაა, რაც %s" -#: initdb.c:2604 +#: initdb.c:2692 #, c-format msgid "input file location must be an absolute path" msgstr "შეყვანის ფაილის მდებარეობა აბსტოლუტური ბილიკი უნდა იყოს" -#: initdb.c:2621 +#: initdb.c:2709 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "ბაზის კლასტერის ინიციალიზაცია ენით \"%s\".\n" -#: initdb.c:2624 +#: initdb.c:2712 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "ბაზის კლასტერის ინიციალიზაცია ენის ამ კონფიგურაციით მოხდება:\n" -#: initdb.c:2625 +#: initdb.c:2713 #, c-format msgid " locale provider: %s\n" msgstr " ლოკალის მომწოდებელი: %s\n" -#: initdb.c:2627 +#: initdb.c:2715 #, c-format msgid " default collation: %s\n" msgstr " ნაგულიხმევი კოლაცია: %s\n" -#: initdb.c:2628 +#: initdb.c:2716 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -858,22 +889,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2658 +#: initdb.c:2746 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "ენისთვის (\"%s\") შესაბამისი კოდირება ვერ ვიპოვე" -#: initdb.c:2660 +#: initdb.c:2748 #, c-format msgid "Rerun %s with the -E option." msgstr "გაუშვით %s თავიდან -E პარამეტრით." -#: initdb.c:2661 initdb.c:3204 initdb.c:3324 initdb.c:3344 +#: initdb.c:2749 initdb.c:3287 initdb.c:3413 initdb.c:3433 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: initdb.c:2673 +#: initdb.c:2761 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -882,112 +913,112 @@ msgstr "" "ენის ნაგულისხმევი „%s“ კოდირების დაყენება, სერვერის დასაშიფრად შეუძლებელია.\n" "სანაცვლოდ, ბაზის ნაგულისხმევი კოდირება დაყენდება „%s“.\n" -#: initdb.c:2678 +#: initdb.c:2766 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "ენას (\"%s\") მხარდაუჭერელი კოდირება (\"%s\") სჭირდება" -#: initdb.c:2680 +#: initdb.c:2768 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "%s სერვერის მხარეს კოდირება ვერ იქნება." -#: initdb.c:2682 +#: initdb.c:2770 #, c-format msgid "Rerun %s with a different locale selection." msgstr "%s-ის თავიდან გაშვება ენის სხვა არჩევანით." -#: initdb.c:2690 +#: initdb.c:2778 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "ბაზის ნაგულისხმევი კოდირება შესაბამისად დაყენებულია „%s“-ზე.\n" -#: initdb.c:2704 +#: initdb.c:2794 #, c-format msgid "builtin provider locale \"%s\" requires encoding \"%s\"" msgstr "ჩაშენებულ მომწოდებელს ლოკალისთვის \"%s\" ესაჭიროება კოდირება \"%s\"" -#: initdb.c:2766 +#: initdb.c:2856 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "ტექსტის ძებნის ენისთვის შესაფერისი კონფიგურაციის მოძებნა შეუძლებელია: \"%s\"" -#: initdb.c:2777 +#: initdb.c:2867 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "ტექსტის ძებნის ენისთვის შესაფერისი კონფიგურაცია არ არსებობს: \"%s\"" -#: initdb.c:2782 +#: initdb.c:2872 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "ტექსტის ძებნის მითითებული კონფიგურაცია \"%s\" ენას (\"%s\") არ ემთხვევა" -#: initdb.c:2787 +#: initdb.c:2877 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "ტექსტის ძებნის ნაგულისხმევი კონფიგურაცია \"%s\" იქნება.\n" -#: initdb.c:2830 initdb.c:2901 +#: initdb.c:2911 initdb.c:2982 #, c-format msgid "creating directory %s ... " msgstr "საქაღალდის (\"%s\") შექმნა .... " -#: initdb.c:2835 initdb.c:2906 initdb.c:2954 initdb.c:3011 +#: initdb.c:2916 initdb.c:2987 initdb.c:3035 initdb.c:3092 #, c-format msgid "could not create directory \"%s\": %m" msgstr "საქაღალდის (%s) შექმნის შეცდომა: %m" -#: initdb.c:2844 initdb.c:2916 +#: initdb.c:2925 initdb.c:2997 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "არსებულ საქაღალდეზე (\"%s\") წვდომების ჩასწორება ... " -#: initdb.c:2849 initdb.c:2921 +#: initdb.c:2930 initdb.c:3002 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "საქაღალდის წვდომების შეცვლა შეუძლებელია \"%s\": %m" -#: initdb.c:2861 initdb.c:2933 +#: initdb.c:2942 initdb.c:3014 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "საქაღალდე \"%s\" არსებობს, მაგრამ ცარიელი არაა" -#: initdb.c:2865 +#: initdb.c:2946 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "თუ გსურთ ბაზის ახალი სისტემის შექმნა, წაშალეთ ან დააცარიელეთ საქაღალდე, %s ან %s „%s“-ის გარდა არგუმენტით გაუშვით." -#: initdb.c:2873 initdb.c:2943 initdb.c:3369 +#: initdb.c:2954 initdb.c:3024 initdb.c:3458 #, c-format msgid "could not access directory \"%s\": %m" msgstr "საქაღალდის (%s) წვდომის შეცდომა: %m" -#: initdb.c:2894 +#: initdb.c:2975 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL საქაღალდის მდებარეობა აბსოლუტური ბილიკი უნდა იყოს" -#: initdb.c:2937 +#: initdb.c:3018 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "თუ გსურთ WAL-ის იქ შენახვა, წაშალეთ ან დააცარიელეთ საქაღალდე „%s“." -#: initdb.c:2947 +#: initdb.c:3028 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "სიმბმულის შექმნის შეცდომა %s: %m" -#: initdb.c:2966 +#: initdb.c:3047 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "ის შეიცავს წერტილით დაწყებულ/უხილავ ფაილს, შესაძლოა იმის გამო, რომ ის მიმაგრების წერტილია." -#: initdb.c:2968 +#: initdb.c:3049 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "ის შეიცავს lost+found საქაღალდეს. ალბათ იმის გამო, რომ ის მიმაგრების წერტილია." -#: initdb.c:2970 +#: initdb.c:3051 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -996,65 +1027,65 @@ msgstr "" "მიმაგრების წერტილის პირდაპირ მონაცემთა საქაღალდედ გამოყენება რეკომენდებული არაა.\n" "შექმენით ქვესაქაღალდე მიმაგრების წერტილის ქვეშ." -#: initdb.c:2997 +#: initdb.c:3078 #, c-format msgid "creating subdirectories ... " msgstr "ქვესაქაღალდეების შექმნა ... " -#: initdb.c:3040 +#: initdb.c:3121 msgid "performing post-bootstrap initialization ... " msgstr "პირველადი მომზადების შემდგომი ინიციალიზაციის შესრულება ... " -#: initdb.c:3203 +#: initdb.c:3286 #, c-format msgid "-c %s requires a value" msgstr "-c %s მნიშვნელობა სჭირდება" -#: initdb.c:3228 +#: initdb.c:3311 #, c-format msgid "Running in debug mode.\n" msgstr "გაშვებულია გამართვის რეჟიმში.\n" -#: initdb.c:3232 +#: initdb.c:3315 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "გაშვებულია მოუწმენდავ რეჟიმში. შეცდომები არ გაიწმინდება.\n" -#: initdb.c:3305 +#: initdb.c:3388 #, c-format msgid "unrecognized locale provider: %s" msgstr "ენის უცნობი მომწოდებელი: %s" -#: initdb.c:3342 +#: initdb.c:3431 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "მეტისმეტად ბევრი ბრძანების-სტრიქონის არგუმენტი (პირველია \"%s\")" -#: initdb.c:3349 initdb.c:3353 initdb.c:3357 +#: initdb.c:3438 initdb.c:3442 initdb.c:3446 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s ვერ იქნება მითითებული, თუ ენის მომწოდებლად „%s“ არ არის არჩეული" -#: initdb.c:3371 initdb.c:3434 +#: initdb.c:3460 initdb.c:3523 msgid "syncing data to disk ... " msgstr "მონაცემების სინქრონიზაცია დისკზე ... " -#: initdb.c:3379 +#: initdb.c:3468 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "პაროლის მოთხოვნისა და პაროლის ფაილის ერთდროულად მითითება შეუძებელია" -#: initdb.c:3390 +#: initdb.c:3479 #, c-format msgid "argument of %s must be a power of two between 1 and 1024" msgstr "%s-ის არგუმენტი 2-ის ხარისხი უნდა იყოს 1-1024 შუალედიდან" -#: initdb.c:3403 +#: initdb.c:3492 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "ზემომხმარებლის სახელი \"%s\" უარყოფილია. როლის სახელებია \"pg_\"-ით ვერ დაიწყება" -#: initdb.c:3405 +#: initdb.c:3494 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1065,17 +1096,17 @@ msgstr "" "ეს მომხმარებელი სერვერის პროცესსაც უნდა ფლობდეს.\n" "\n" -#: initdb.c:3421 +#: initdb.c:3510 #, c-format msgid "Data page checksums are enabled.\n" msgstr "მონაცემების გვერდის საკონტროლო ჯამები ჩართულია.\n" -#: initdb.c:3423 +#: initdb.c:3512 #, c-format msgid "Data page checksums are disabled.\n" msgstr "მონაცემების გვერდის საკონტროლო ჯამები გამორთულია.\n" -#: initdb.c:3440 +#: initdb.c:3529 #, c-format msgid "" "\n" @@ -1086,22 +1117,22 @@ msgstr "" "დისკთან სინქრონიზაცია გამოტოვებულია.\n" "ოპერაციული სისტემის სიკვდილის შემთხვევაში მონაცემების საქაღალდე შეიძლება დაზიანდეს.\n" -#: initdb.c:3445 +#: initdb.c:3534 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "ლოკალური შეერთებებისთვის \"trust\" ავთენტიკაციის ჩართვა" -#: initdb.c:3446 +#: initdb.c:3535 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "შეცვლა შეგიძლიათ pg_hba.conf-ის რედაქტირებით ან როცა შემდეგ ჯერზე გაუშვებთ initdb-ს, -A, ან --auth-local და --auth-host-ის გამოყენებით." #. translator: This is a placeholder in a shell command. -#: initdb.c:3476 +#: initdb.c:3565 msgid "logfile" msgstr "ჟურნალის ფაილი" -#: initdb.c:3478 +#: initdb.c:3567 #, c-format msgid "" "\n" diff --git a/src/bin/initdb/po/ko.po b/src/bin/initdb/po/ko.po index 871c7ca7e6d9f..cc204fa046df1 100644 --- a/src/bin/initdb/po/ko.po +++ b/src/bin/initdb/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL) 16\n" +"Project-Id-Version: initdb (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:50+0000\n" -"PO-Revision-Date: 2023-09-08 16:09+0900\n" +"POT-Creation-Date: 2025-01-17 04:51+0000\n" +"PO-Revision-Date: 2025-01-16 11:33+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -35,33 +35,48 @@ msgstr "상세정보: " msgid "hint: " msgstr "힌트: " -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "\"%s\" 파일은 잘못된 바이너리 파일임: %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음: %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "\"%s\" 실행 파일을 찾을 수 없음" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "\"%s\" 경로를 절대 경로로 바꿀 수 없음: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 initdb.c:750 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "\"%s\" 명령을 실행할 수 없음: %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "\"%s\" 명령에서 읽을 수 없음: %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "\"%s\" 명령이 아무 데이터도 반환하지 않음" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() 실패: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 -#: initdb.c:349 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:372 initdb.c:408 #, c-format msgid "out of memory" msgstr "메모리 부족" @@ -77,35 +92,46 @@ msgstr "메모리 부족\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "\"%s\" 파일을 열 수 없음: %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "\"%s\" 파일 fsync 실패: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: ../../common/file_utils.c:162 ../../common/pgfnames.c:48 -#: ../../common/rmtree.c:63 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +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 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: ../../common/file_utils.c:196 ../../common/pgfnames.c:69 -#: ../../common/rmtree.c:104 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "\"%s\" 파일을 열 수 없음: %m" - -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "\"%s\" 파일 fsync 실패: %m" -#: ../../common/file_utils.c:379 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" @@ -145,12 +171,12 @@ msgstr "제한된 토큰으로 재실행할 수 없음: 오류 코드 %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu" -#: ../../common/rmtree.c:95 +#: ../../common/rmtree.c:97 #, c-format msgid "could not remove file \"%s\": %m" msgstr "\"%s\" 파일을 지울 수 없음: %m" -#: ../../common/rmtree.c:122 +#: ../../common/rmtree.c:124 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 지울 수 없음: %m" @@ -199,6 +225,31 @@ msgstr "하위 프로세스가 종료되었음, 시그널 %d: %s" msgid "child process exited with unrecognized status %d" msgstr "하위 프로세스가 종료되었음, 알수 없는 상태 %d" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "\"%s\" 값은 %s 옵션 값으로 쓸 수 없음" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s 값은 %d..%d 범위여야 함" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "알 수 없는 동기화 방법: %s" + +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "쉘 명령의 인자에 줄바꿈 문자가 포함되어 있음: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "데이터베이스 이름에 줄바꿈 문자가 있음: \"%s\"\n" + #: ../../port/dirmod.c:287 #, c-format msgid "could not set junction for \"%s\": %s\n" @@ -209,87 +260,106 @@ msgstr "\"%s\" 파일의 연결을 설정할 수 없음: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "\"%s\" 파일의 정션을 구할 수 없음: %s\n" -#: initdb.c:618 initdb.c:1613 +# # search5 끝 +# # advance 부분 +#: initdb.c:369 +#, c-format +msgid "_wsetlocale() failed" +msgstr "_wsetlocale() 실패" + +# # search5 끝 +# # advance 부분 +#: initdb.c:376 +#, c-format +msgid "setlocale() failed" +msgstr "setlocale() 실패" + +#: initdb.c:390 +#, c-format +msgid "failed to restore old locale" +msgstr "옛 로케일을 복원할 수 없음" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "\"%s\" 옛 로케일을 복원할 수 없음" + +#: initdb.c:682 initdb.c:1674 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "\"%s\" 파일 일기 모드로 열기 실패: %m" -#: initdb.c:662 initdb.c:966 initdb.c:986 +#: initdb.c:726 initdb.c:1030 initdb.c:1050 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "\"%s\" 파일 열기 실패: %m" -#: initdb.c:666 initdb.c:969 initdb.c:988 +#: initdb.c:730 initdb.c:1033 initdb.c:1052 #, c-format msgid "could not write file \"%s\": %m" msgstr "\"%s\" 파일 쓰기 실패: %m" -#: initdb.c:670 +#: initdb.c:734 #, c-format msgid "could not close file \"%s\": %m" msgstr "\"%s\" 파일을 닫을 수 없음: %m" -#: initdb.c:686 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "\"%s\" 명령을 실행할 수 없음: %m" - -#: initdb.c:704 +#: initdb.c:768 #, c-format msgid "removing data directory \"%s\"" msgstr "\"%s\" 데이터 디렉터리를 지우는 중" -#: initdb.c:706 +#: initdb.c:770 #, c-format msgid "failed to remove data directory" msgstr "데이터 디렉터리를 지우는데 실패" -#: initdb.c:710 +#: initdb.c:774 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "\"%s\" 데이터 디렉터리 안의 내용을 지우는 중" -#: initdb.c:713 +#: initdb.c:777 #, c-format msgid "failed to remove contents of data directory" msgstr "데이터 디렉터리 내용을 지우는데 실패" -#: initdb.c:718 +#: initdb.c:782 #, c-format msgid "removing WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리를 지우는 중" -#: initdb.c:720 +#: initdb.c:784 #, c-format msgid "failed to remove WAL directory" msgstr "WAL 디렉터리를 지우는데 실패" -#: initdb.c:724 +#: initdb.c:788 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리 안의 내용을 지우는 중" -#: initdb.c:726 +#: initdb.c:790 #, c-format msgid "failed to remove contents of WAL directory" msgstr "WAL 디렉터리 내용을 지우는데 실패" -#: initdb.c:733 +#: initdb.c:797 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "\"%s\" 데이터 디렉터리가 사용자의 요청으로 삭제되지 않았음" -#: initdb.c:737 +#: initdb.c:801 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "\"%s\" WAL 디렉터리가 사용자의 요청으로 삭제되지 않았음" -#: initdb.c:755 +#: initdb.c:819 #, c-format msgid "cannot be run as root" msgstr "root 권한으로 실행할 수 없음" -#: initdb.c:756 +#: initdb.c:820 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own " @@ -298,17 +368,17 @@ msgstr "" "시스템관리자 권한이 없는, 서버프로세스의 소유주가 될 일반 사용자로 로그인 해" "서(\"su\" 같은 명령 이용) 실행하십시오." -#: initdb.c:788 +#: initdb.c:852 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" 인코딩은 서버 인코딩 이름을 사용할 수 없음" -#: initdb.c:932 +#: initdb.c:996 #, c-format msgid "file \"%s\" does not exist" msgstr "\"%s\" 파일 없음" -#: initdb.c:933 initdb.c:938 initdb.c:945 +#: initdb.c:997 initdb.c:1002 initdb.c:1009 #, c-format msgid "" "This might mean you have a corrupted installation or identified the wrong " @@ -317,131 +387,124 @@ msgstr "" "설치가 잘못되었거나 -L 호출 옵션으로 지정한 디렉터리가 잘못되었을 수 있습니" "다." -#: initdb.c:937 +#: initdb.c:1001 #, c-format msgid "could not access file \"%s\": %m" msgstr "\"%s\" 파일에 액세스할 수 없음: %m" -#: initdb.c:944 +#: initdb.c:1008 #, c-format msgid "file \"%s\" is not a regular file" msgstr "\"%s\" 파일은 일반 파일이 아님" -#: initdb.c:1077 +#: initdb.c:1141 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "사용할 동적 공유 메모리 관리방식을 선택하는 중 ... " -#: initdb.c:1086 +#: initdb.c:1150 #, c-format -msgid "selecting default max_connections ... " -msgstr "max_connections 초기값을 선택하는 중 ..." +msgid "selecting default \"max_connections\" ... " +msgstr "\"max_connections\" 초기값을 선택 중 ..." -#: initdb.c:1106 +#: initdb.c:1170 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "기본 shared_buffers를 선택하는 중... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "\"shared_buffers\" 초기값을 선택 중... " -#: initdb.c:1129 +#: initdb.c:1193 #, c-format msgid "selecting default time zone ... " msgstr "기본 지역 시간대를 선택 중 ... " -#: initdb.c:1206 +#: initdb.c:1272 msgid "creating configuration files ... " msgstr "환경설정 파일을 만드는 중 ..." -#: initdb.c:1367 initdb.c:1381 initdb.c:1448 initdb.c:1459 +#: initdb.c:1425 initdb.c:1439 initdb.c:1506 initdb.c:1517 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "\"%s\" 접근 권한을 바꿀 수 없음: %m" -#: initdb.c:1477 +#: initdb.c:1536 #, c-format msgid "running bootstrap script ... " msgstr "부트스트랩 스크립트 실행 중 ... " -#: initdb.c:1489 +#: initdb.c:1548 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "\"%s\" 입력 파일이 PostgreSQL %s 용이 아님" -#: initdb.c:1491 +#: initdb.c:1550 #, c-format msgid "Specify the correct path using the option -L." msgstr "-L 옵션으로 바른 경로를 지정하십시오." -#: initdb.c:1591 +#: initdb.c:1652 msgid "Enter new superuser password: " msgstr "새 superuser 암호를 입력하십시오:" -#: initdb.c:1592 +#: initdb.c:1653 msgid "Enter it again: " msgstr "암호 확인:" -#: initdb.c:1595 +#: initdb.c:1656 #, c-format msgid "Passwords didn't match.\n" msgstr "암호가 서로 틀립니다.\n" -#: initdb.c:1619 +#: initdb.c:1680 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "\"%s\" 파일에서 암호를 읽을 수 없음: %m" -#: initdb.c:1622 +#: initdb.c:1683 #, c-format msgid "password file \"%s\" is empty" msgstr "\"%s\" 패스워드 파일이 비어있음" -#: initdb.c:2034 +#: initdb.c:2095 #, c-format msgid "caught signal\n" msgstr "시스템의 간섭 신호(signal) 받았음\n" -#: initdb.c:2040 +#: initdb.c:2101 #, c-format msgid "could not write to child process: %s\n" msgstr "하위 프로세스에 쓸 수 없음: %s\n" -#: initdb.c:2048 +#: initdb.c:2109 #, c-format msgid "ok\n" msgstr "완료\n" -# # search5 끝 -# # advance 부분 -#: initdb.c:2137 +#: initdb.c:2191 initdb.c:2237 #, c-format -msgid "setlocale() failed" -msgstr "setlocale() 실패" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "\"%s\" 로케일 이름에 ASCII 문자가 아닌 것이 있음" -#: initdb.c:2155 -#, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "\"%s\" 옛 로케일을 복원할 수 없음" - -#: initdb.c:2163 +#: initdb.c:2217 #, c-format msgid "invalid locale name \"%s\"" msgstr "\"%s\" 로케일 이름이 잘못됨" -#: initdb.c:2164 +#: initdb.c:2218 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "ICU 로케일 이름을 사용하려면, --icu-locale 옵션을 사용하세요." -#: initdb.c:2177 +#: initdb.c:2231 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "잘못된 로케일 설정; LANG 또는 LC_* OS 환경 변수를 확인하세요" -#: initdb.c:2203 initdb.c:2227 +#: initdb.c:2262 initdb.c:2286 #, c-format msgid "encoding mismatch" msgstr "인코딩 불일치" -#: initdb.c:2204 +#: initdb.c:2263 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the selected locale " @@ -451,7 +514,7 @@ msgstr "" "선택한 인코딩(%s)과 선택한 로케일에서 사용하는 인코딩(%s)이 일치하지 않습니" "다. 이로 인해 여러 문자열 처리 함수에 오작동이 발생할 수 있습니다." -#: initdb.c:2209 initdb.c:2230 +#: initdb.c:2268 initdb.c:2289 #, c-format msgid "" "Rerun %s and either do not specify an encoding explicitly, or choose a " @@ -460,42 +523,47 @@ msgstr "" "암묵적으로 지정된 인코딩이 마음에 들지 않으면 지정할 수 있는 인코딩을 지정해" "서 %s 작업을 다시 하세요." -#: initdb.c:2228 +#: initdb.c:2287 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "지정한 %s 인코딩을 ICU 제공자가 지원하지 않습니다." -#: initdb.c:2279 +#: initdb.c:2338 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "\"%s\" 로케일 이름을 로케일 태그로 바꿀 수 없음: %s" -#: initdb.c:2285 initdb.c:2337 initdb.c:2416 +#: initdb.c:2344 initdb.c:2396 initdb.c:2488 #, c-format msgid "ICU is not supported in this build" msgstr "ICU 지원 기능을 뺀 채로 서버가 만들어졌습니다." -#: initdb.c:2308 +#: initdb.c:2367 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "\"%s\" 로케일에서 언어를 찾을 수 없음: %s" -#: initdb.c:2334 +#: initdb.c:2393 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "\"%s\" 로케일은 \"%s\" 라는 알 수 없는 언어를 사용함" -#: initdb.c:2400 +#: initdb.c:2454 +#, c-format +msgid "locale must be specified if provider is %s" +msgstr "제공자가 %s 인경우 로케일을 지정해야 함" + +#: initdb.c:2465 #, c-format -msgid "ICU locale must be specified" -msgstr "ICU 로케일을 지정해야합니다." +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "내장 제공자용 \"%s\" 로케일 이름이 잘못됨" -#: initdb.c:2404 +#: initdb.c:2476 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "\"%s\" 로케일 태그를 사용함, 해당 ICU 로케일: \"%s\"\n" -#: initdb.c:2427 +#: initdb.c:2499 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -504,17 +572,17 @@ msgstr "" "%s PostgreSQL 데이터베이스 클러스터를 초기화 하는 프로그램.\n" "\n" -#: initdb.c:2428 +#: initdb.c:2500 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: initdb.c:2429 +#: initdb.c:2501 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [옵션]... [DATADIR]\n" -#: initdb.c:2430 +#: initdb.c:2502 #, c-format msgid "" "\n" @@ -523,50 +591,50 @@ msgstr "" "\n" "옵션들:\n" -#: initdb.c:2431 +#: initdb.c:2503 #, c-format msgid "" " -A, --auth=METHOD default authentication method for local " "connections\n" msgstr " -A, --auth=METHOD 로컬 연결의 기본 인증 방법\n" -#: initdb.c:2432 +#: initdb.c:2504 #, c-format msgid "" " --auth-host=METHOD default authentication method for local TCP/IP " "connections\n" msgstr " --auth-host=METHOD local TCP/IP 연결에 대한 기본 인증 방법\n" -#: initdb.c:2433 +#: initdb.c:2505 #, c-format msgid "" " --auth-local=METHOD default authentication method for local-socket " "connections\n" msgstr " --auth-local=METHOD local-socket 연결에 대한 기본 인증 방법\n" -#: initdb.c:2434 +#: initdb.c:2506 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR 새 데이터베이스 클러스터를 만들 디렉터리\n" -#: initdb.c:2435 +#: initdb.c:2507 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=ENCODING 새 데이터베이스의 기본 인코딩\n" -#: initdb.c:2436 +#: initdb.c:2508 #, c-format msgid "" " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access 데이터 디렉터리를 그룹이 읽고 접근할 있게 함\n" -#: initdb.c:2437 +#: initdb.c:2509 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=LOCALE 새 데이터베이스의 ICU 로케일 ID 지정\n" -#: initdb.c:2438 +#: initdb.c:2510 #, c-format msgid "" " --icu-rules=RULES set additional ICU collation rules for new " @@ -575,17 +643,17 @@ msgstr "" " --icu-rules=RULES 새 데이터베이스의 추가 ICU 문자열 정렬 규칙을 지" "정\n" -#: initdb.c:2439 +#: initdb.c:2511 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums 자료 페이지 체크섬 사용\n" -#: initdb.c:2440 +#: initdb.c:2512 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE 새 데이터베이스의 기본 로케일 설정\n" -#: initdb.c:2441 +#: initdb.c:2513 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -599,27 +667,36 @@ msgstr "" " 새 데이터베이스의 각 범주에 기본 로케일 설정\n" " (환경에서 가져온 기본 값)\n" -#: initdb.c:2445 +#: initdb.c:2517 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale -locale=C와 같음\n" -#: initdb.c:2446 +#: initdb.c:2518 #, c-format msgid "" -" --locale-provider={libc|icu}\n" +" --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr "" +" --builtin-locale=LOCALE\n" +" 새 데이터베이스용 내장 로케일 이름 지정\n" + +#: initdb.c:2520 +#, c-format +msgid "" +" --locale-provider={builtin|libc|icu}\n" " set default locale provider for new databases\n" msgstr "" -" --locale-provider={libc|icu}\n" +" --locale-provider={builtin|libc|icu}\n" " 새 데이터베이스의 로케일 제공자 지정\n" -#: initdb.c:2448 +#: initdb.c:2522 #, c-format msgid "" " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FILE 파일에서 새 superuser의 암호 읽기\n" -#: initdb.c:2449 +#: initdb.c:2523 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -628,29 +705,29 @@ msgstr "" " -T, --text-search-config=CFG\n" " 기본 텍스트 검색 구성\n" -#: initdb.c:2451 +#: initdb.c:2525 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME 데이터베이스 superuser 이름\n" -#: initdb.c:2452 +#: initdb.c:2526 #, c-format msgid "" " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt 새 superuser 암호를 입력 받음\n" -#: initdb.c:2453 +#: initdb.c:2527 #, c-format msgid "" " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR 트랜잭션 로그 디렉터리 위치\n" -#: initdb.c:2454 +#: initdb.c:2528 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE WAL 조각 파일 크기, MB단위\n" -#: initdb.c:2455 +#: initdb.c:2529 #, c-format msgid "" "\n" @@ -659,33 +736,33 @@ msgstr "" "\n" "덜 일반적으로 사용되는 옵션들:\n" -#: initdb.c:2456 +#: initdb.c:2530 #, c-format msgid "" " -c, --set NAME=VALUE override default setting for server parameter\n" msgstr " -c, --set NAME=VALUE 서버 매개 변수 기본 설정을 바꿈\n" -#: initdb.c:2457 +#: initdb.c:2531 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug 디버깅에 필요한 정보들도 함께 출력함\n" -#: initdb.c:2458 +#: initdb.c:2532 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches debug_discard_caches=1 지정\n" -#: initdb.c:2459 +#: initdb.c:2533 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY 입력파일들이 있는 디렉터리\n" -#: initdb.c:2460 +#: initdb.c:2534 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean 오류가 발생되었을 경우 그대로 둠\n" -#: initdb.c:2461 +#: initdb.c:2535 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -693,23 +770,28 @@ msgid "" msgstr "" " -N, --no-sync 작업 완료 뒤 디스크 동기화 작업을 하지 않음\n" -#: initdb.c:2462 +#: initdb.c:2536 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions 다음 작업을 위해 구성 정보를 출력 안함\n" -#: initdb.c:2463 +#: initdb.c:2537 +#, c-format +msgid " -s, --show show internal settings, then exit\n" +msgstr " -s, --show 내부 설정값들을 보여주고 마침\n" + +#: initdb.c:2538 #, c-format -msgid " -s, --show show internal settings\n" -msgstr " -s, --show 내부 설정값들을 보여줌\n" +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD 파일을 디스크에 동기화 하는 방법 지정\n" -#: initdb.c:2464 +#: initdb.c:2539 #, c-format msgid "" " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only 데이터 디렉터리만 동기화하고 마침\n" -#: initdb.c:2465 +#: initdb.c:2540 #, c-format msgid "" "\n" @@ -718,17 +800,17 @@ msgstr "" "\n" "기타 옵션:\n" -#: initdb.c:2466 +#: initdb.c:2541 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: initdb.c:2467 +#: initdb.c:2542 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: initdb.c:2468 +#: initdb.c:2543 #, c-format msgid "" "\n" @@ -738,7 +820,7 @@ msgstr "" "\n" "데이터 디렉터리를 지정하지 않으면, PGDATA 환경 변수값을 사용합니다.\n" -#: initdb.c:2470 +#: initdb.c:2545 #, c-format msgid "" "\n" @@ -747,28 +829,28 @@ msgstr "" "\n" "문제점 보고 주소: <%s>\n" -#: initdb.c:2471 +#: initdb.c:2546 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: initdb.c:2499 +#: initdb.c:2570 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "\"%s\" 인증 방법은 \"%s\" 연결에서는 사용할 수 없음" -#: initdb.c:2513 +#: initdb.c:2584 #, c-format msgid "" "must specify a password for the superuser to enable password authentication" msgstr "비밀번호 인증방식을 사용하려면, 반드시 superuser의 암호를 지정해야함" -#: initdb.c:2532 +#: initdb.c:2603 #, c-format msgid "no data directory specified" msgstr "데이터 디렉터리를 지정하지 않았음" -#: initdb.c:2533 +#: initdb.c:2604 #, c-format msgid "" "You must identify the directory where the data for this database system will " @@ -778,12 +860,12 @@ msgstr "" "이 작업을 진행하려면, 반드시 이 데이터 디렉터리를 지정해 주어야합니다. 지정하" "는 방법은 -D 옵션의 값이나, PGDATA 환경 변수값으로 지정해 주면 됩니 다." -#: initdb.c:2550 +#: initdb.c:2621 #, c-format msgid "could not set environment" msgstr "환경 변수를 지정할 수 없음" -#: initdb.c:2568 +#: initdb.c:2639 #, c-format msgid "" "program \"%s\" is needed by %s but was not found in the same directory as " @@ -792,40 +874,40 @@ msgstr "" "\"%s\" 프로그램이 %s 작업에서 필요합니다. 그런데, 이 파일이 \"%s\" 파일이 있" "는 디렉터리안에 없습니다." -#: initdb.c:2571 +#: initdb.c:2642 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "" "\"%s\" 프로그램을 \"%s\" 작업 때문에 찾았지만 이 파일은 %s 프로그램의 버전과 " "다릅니다." -#: initdb.c:2586 +#: initdb.c:2657 #, c-format msgid "input file location must be an absolute path" msgstr "입력 파일 위치는 반드시 절대경로여야함" -#: initdb.c:2603 +#: initdb.c:2674 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "데이터베이스 클러스터는 \"%s\" 로케일으로 초기화될 것입니다.\n" -#: initdb.c:2606 +#: initdb.c:2677 #, c-format msgid "" "The database cluster will be initialized with this locale configuration:\n" msgstr "데이터베이스 클러스터는 아래 로케일 환경으로 초기화될 것입니다:\n" -#: initdb.c:2607 +#: initdb.c:2678 #, c-format -msgid " provider: %s\n" -msgstr " 제공자: %s\n" +msgid " locale provider: %s\n" +msgstr " 로케일 제공자: %s\n" -#: initdb.c:2609 +#: initdb.c:2680 #, c-format -msgid " ICU locale: %s\n" -msgstr " ICU 로케일: %s\n" +msgid " default collation: %s\n" +msgstr " 기본 문자정렬: %s\n" -#: initdb.c:2610 +#: initdb.c:2681 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -842,22 +924,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2640 +#: initdb.c:2711 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "\"%s\" 로케일에 알맞은 인코딩을 찾을 수 없음" -#: initdb.c:2642 +#: initdb.c:2713 #, c-format msgid "Rerun %s with the -E option." msgstr "-E 옵션 지정해서 %s 작업을 다시 하세요." -#: initdb.c:2643 initdb.c:3176 initdb.c:3284 initdb.c:3304 +#: initdb.c:2714 initdb.c:3257 initdb.c:3377 initdb.c:3397 #, c-format msgid "Try \"%s --help\" for more information." msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." -#: initdb.c:2655 +#: initdb.c:2726 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -866,73 +948,78 @@ msgstr "" "\"%s\" 인코딩을 서버측 인코딩으로 사용할 수 없습니다.\n" "기본 데이터베이스는 \"%s\" 인코딩으로 지정됩니다.\n" -#: initdb.c:2660 +#: initdb.c:2731 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "\"%s\" 로케일은 지원하지 않는 \"%s\" 인코딩을 필요로 함" -#: initdb.c:2662 +#: initdb.c:2733 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "\"%s\" 인코딩을 서버측 인코딩으로 사용할 수 없습니다." -#: initdb.c:2664 +#: initdb.c:2735 #, c-format msgid "Rerun %s with a different locale selection." msgstr "다른 로케일을 지정해서 %s 작업을 다시 하세요." -#: initdb.c:2672 +#: initdb.c:2743 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "기본 데이터베이스 인코딩은 \"%s\" 인코딩으로 설정되었습니다.\n" -#: initdb.c:2741 +#: initdb.c:2757 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "\"%s\" 내장 제공자 로케일은 \"%s\" 인코딩을 필요로 함" + +#: initdb.c:2819 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "\"%s\" 로케일에 알맞은 전문검색 설정을 찾을 수 없음" -#: initdb.c:2752 +#: initdb.c:2830 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "\"%s\" 로케일에 알맞은 전문검색 설정을 알 수 없음" -#: initdb.c:2757 +#: initdb.c:2835 #, c-format msgid "" "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "지정한 \"%s\" 전문검색 설정은 \"%s\" 로케일과 일치하지 않음" -#: initdb.c:2762 +#: initdb.c:2840 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "기본 텍스트 검색 구성이 \"%s\"(으)로 설정됩니다.\n" -#: initdb.c:2805 initdb.c:2876 +#: initdb.c:2883 initdb.c:2954 #, c-format msgid "creating directory %s ... " msgstr "%s 디렉터리 만드는 중 ..." -#: initdb.c:2810 initdb.c:2881 initdb.c:2929 initdb.c:2985 +#: initdb.c:2888 initdb.c:2959 initdb.c:3007 initdb.c:3064 #, c-format msgid "could not create directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" -#: initdb.c:2819 initdb.c:2891 +#: initdb.c:2897 initdb.c:2969 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "이미 있는 %s 디렉터리의 액세스 권한을 고치는 중 ..." -#: initdb.c:2824 initdb.c:2896 +#: initdb.c:2902 initdb.c:2974 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "\"%s\" 디렉터리의 액세스 권한을 바꿀 수 없습니다: %m" -#: initdb.c:2836 initdb.c:2908 +#: initdb.c:2914 initdb.c:2986 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "\"%s\" 디렉터리가 있지만 비어 있지 않음" -#: initdb.c:2840 +#: initdb.c:2918 #, c-format msgid "" "If you want to create a new database system, either remove or empty the " @@ -941,31 +1028,31 @@ msgstr "" "새로운 데이터베이스 시스템을 만들려면 \"%s\" 디렉터리를 제거하거나 비우십시" "오. 또는 %s 작업을 \"%s\" 디렉터리가 아닌 것으로 지정해서 하세요." -#: initdb.c:2848 initdb.c:2918 initdb.c:3325 +#: initdb.c:2926 initdb.c:2996 initdb.c:3422 #, c-format msgid "could not access directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" -#: initdb.c:2869 +#: initdb.c:2947 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL 디렉터리 위치는 절대 경로여야 함" -#: initdb.c:2912 +#: initdb.c:2990 #, c-format msgid "" -"If you want to store the WAL there, either remove or empty the directory \"%s" -"\"." +"If you want to store the WAL there, either remove or empty the directory " +"\"%s\"." msgstr "" "트랜잭션 로그를 해당 위치에 저장하려면 \"%s\" 디렉터리를 제거하거나 비우십시" "오." -#: initdb.c:2922 +#: initdb.c:3000 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" -#: initdb.c:2941 +#: initdb.c:3019 #, c-format msgid "" "It contains a dot-prefixed/invisible file, perhaps due to it being a mount " @@ -974,13 +1061,13 @@ msgstr "" "점(.)으로 시작하는 숨은 파일이 포함되어 있습니다. 마운트 최상위 디렉터리 같습" "니다." -#: initdb.c:2943 +#: initdb.c:3021 #, c-format msgid "" "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "lost-found 디렉터리가 있습니다. 마운트 최상위 디렉터리 같습니다." -#: initdb.c:2945 +#: initdb.c:3023 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -989,66 +1076,61 @@ msgstr "" "마운트 최상위 디렉터리를 데이터 디렉터리로 사용하는 것은 권장하지 않습니다.\n" "하위 디렉터리를 만들어서 그것을 데이터 디렉터리로 사용하세요." -#: initdb.c:2971 +#: initdb.c:3050 #, c-format msgid "creating subdirectories ... " msgstr "하위 디렉터리 만드는 중 ..." -#: initdb.c:3014 +#: initdb.c:3093 msgid "performing post-bootstrap initialization ... " msgstr "부트스트랩 다음 초기화 작업 중 ... " -#: initdb.c:3175 +#: initdb.c:3256 #, c-format msgid "-c %s requires a value" msgstr "-c %s 설정은 값을 필요로 합니다." -#: initdb.c:3200 +#: initdb.c:3281 #, c-format msgid "Running in debug mode.\n" msgstr "디버그 모드로 실행 중.\n" -#: initdb.c:3204 +#: initdb.c:3285 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "지저분 모드로 실행 중. 오류가 발생되어도 뒷정리를 안합니다.\n" -#: initdb.c:3274 +#: initdb.c:3358 #, c-format msgid "unrecognized locale provider: %s" msgstr "알 수 없는 로케일 제공자 이름: %s" -#: initdb.c:3302 +#: initdb.c:3395 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" -#: initdb.c:3309 initdb.c:3313 +#: initdb.c:3402 initdb.c:3406 initdb.c:3410 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s 옵션은 \"%s\" 로케일 제공자를 사용할 때만 사용할 수 있습니다." -#: initdb.c:3327 initdb.c:3404 +#: initdb.c:3424 initdb.c:3487 msgid "syncing data to disk ... " msgstr "자료를 디스크에 동기화 하는 중 ... " -#: initdb.c:3335 +#: initdb.c:3432 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "" "암호를 입력받는 옵션과 암호를 파일에서 가져오는 옵션은 동시에 사용될 수 없음" -#: initdb.c:3357 -#, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "--wal-segsize 옵션 값은 숫자여야 함" - -#: initdb.c:3359 +#: initdb.c:3443 #, c-format -msgid "argument of --wal-segsize must be a power of two between 1 and 1024" -msgstr "--wal-segsize 옵션값은 1에서 1024사이 2^n 값이여야 함" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "%s 옵션값은 1에서 1024사이 2^n 값이여야 함" -#: initdb.c:3373 +#: initdb.c:3456 #, c-format msgid "" "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" @@ -1056,7 +1138,7 @@ msgstr "" "\"%s\" 사용자는 슈퍼유저 이름으로 쓸 수 없습니다. \"pg_\"로 시작하는롤 이름" "은 허용하지 않음" -#: initdb.c:3375 +#: initdb.c:3458 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1067,17 +1149,17 @@ msgstr "" "지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.\n" "\n" -#: initdb.c:3391 +#: initdb.c:3474 #, c-format msgid "Data page checksums are enabled.\n" msgstr "자료 페이지 체크섬 기능 사용함.\n" -#: initdb.c:3393 +#: initdb.c:3476 #, c-format msgid "Data page checksums are disabled.\n" msgstr "자료 페이지 체크섬 기능 사용 하지 않음\n" -#: initdb.c:3410 +#: initdb.c:3493 #, c-format msgid "" "\n" @@ -1089,12 +1171,12 @@ msgstr "" "이 상태에서 OS가 갑자기 중지 되면 데이터 디렉토리 안에 있는 자료가 깨질 수 있" "습니다.\n" -#: initdb.c:3415 +#: initdb.c:3498 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "로컬 접속용 \"trust\" 인증을 설정 함" -#: initdb.c:3416 +#: initdb.c:3499 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or --auth-" @@ -1105,11 +1187,11 @@ msgstr "" "요." #. translator: This is a placeholder in a shell command. -#: initdb.c:3446 +#: initdb.c:3529 msgid "logfile" msgstr "로그파일" -#: initdb.c:3448 +#: initdb.c:3531 #, c-format msgid "" "\n" @@ -1125,13 +1207,21 @@ msgstr "" "\n" #, c-format -#~ msgid "Using default ICU locale \"%s\".\n" -#~ msgstr "기본 ICU 로케일로 \"%s\" 사용함.\n" +#~ msgid " ICU locale: %s\n" +#~ msgstr " ICU 로케일: %s\n" #, c-format -#~ msgid "could not open collator for default locale: %s" -#~ msgstr "기본 로케일용 문자열 정렬 규칙을 열 수 없음: %s" +#~ msgid "argument of --wal-segsize must be a number" +#~ msgstr "--wal-segsize 옵션 값은 숫자여야 함" + +#, c-format +#~ msgid "Using default ICU locale \"%s\".\n" +#~ msgstr "기본 ICU 로케일로 \"%s\" 사용함.\n" #, c-format #~ msgid "could not determine default ICU locale" #~ msgstr "기본 ICU 로케일을 결정할 수 없음" + +#, c-format +#~ msgid "could not open collator for default locale: %s" +#~ msgstr "기본 로케일용 문자열 정렬 규칙을 열 수 없음: %s" diff --git a/src/bin/initdb/po/pt_BR.po b/src/bin/initdb/po/pt_BR.po index fd7d406b73e30..8911b29572209 100644 --- a/src/bin/initdb/po/pt_BR.po +++ b/src/bin/initdb/po/pt_BR.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: PostgreSQL 16\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2024-01-02 12:54-0300\n" -"PO-Revision-Date: 2010-09-25 00:45-0300\n" +"PO-Revision-Date: 2024-07-02 00:07+0200\n" "Last-Translator: Euler Taveira \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -535,17 +535,17 @@ msgstr " -E, --encoding=CODIFICAÇÃO ajusta a codificação padrão para nov #: initdb.c:2436 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" -msgstr " -g, --allow-group-access permite leitura/execução do grupo no diretório de dados\n" +msgstr " -g, --allow-group-access permite leitura/execução do grupo no diretório de dados\n" #: initdb.c:2437 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" -msgstr " --icu-locale=LOCALE ajusta ID de configuração regional ICU para novos bancos de dados\n" +msgstr " --icu-locale=LOCALE ajusta ID de configuração regional ICU para novos bancos de dados\n" #: initdb.c:2438 #, fuzzy, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" -msgstr " --icu-rules=REGRAS ajusta regras adicionais de agregação ICU para novos bancos de dados\n" +msgstr " --icu-rules=REGRAS ajusta regras adicionais de agregação ICU para novos bancos de dados\n" #: initdb.c:2439 #, c-format @@ -582,7 +582,7 @@ msgid "" " set default locale provider for new databases\n" msgstr "" " --locale-provider={libc|icu}\n" -" ajusta provedor de configuração regional padrão para novos bancos de dados\n" +" ajusta provedor de configuração regional padrão para novos bancos de dados\n" #: initdb.c:2448 #, c-format @@ -611,12 +611,12 @@ msgstr " -W, --pwprompt pergunta senha do novo super-usuário\n" #: initdb.c:2453 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" -msgstr " -X, --waldir=DIRWAL local do diretório do log de transação\n" +msgstr " -X, --waldir=DIRWAL local do diretório do log de transação\n" #: initdb.c:2454 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" -msgstr " --wal-segsize=TAMANHO tamanho dos segmentos do WAL, em megabytes\n" +msgstr " --wal-segsize=TAMANHO tamanho dos segmentos do WAL, em megabytes\n" #: initdb.c:2455 #, c-format @@ -630,7 +630,7 @@ msgstr "" #: initdb.c:2456 #, fuzzy, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" -msgstr " -c, --set NOME=VALOR sobrescreve o valor padrão para parâmetro do servidor\n" +msgstr " -c, --set NOME=VALOR sobrescreve o valor padrão para parâmetro do servidor\n" #: initdb.c:2457 #, c-format @@ -660,7 +660,7 @@ msgstr " -N, --no-sync não espera mudanças serem escritas com #: initdb.c:2462 #, c-format msgid " --no-instructions do not print instructions for next steps\n" -msgstr " --no-instructions não mostra instruções para próximos passos\n" +msgstr " --no-instructions não mostra instruções para próximos passos\n" #: initdb.c:2463 #, c-format diff --git a/src/bin/initdb/po/ru.po b/src/bin/initdb/po/ru.po index f601e6220f033..c1fab13b8c488 100644 --- a/src/bin/initdb/po/ru.po +++ b/src/bin/initdb/po/ru.po @@ -6,13 +6,13 @@ # Sergey Burladyan , 2009. # Andrey Sudnik , 2010. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-04 10:36+0300\n" -"PO-Revision-Date: 2023-09-11 16:13+0300\n" +"POT-Creation-Date: 2024-11-02 08:21+0300\n" +"PO-Revision-Date: 2024-11-02 08:27+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -42,33 +42,48 @@ msgstr "подробности: " msgid "hint: " msgstr "подсказка: " -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "неверный исполняемый файл \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не удалось прочитать исполняемый файл \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не удалось преобразовать относительный путь \"%s\" в абсолютный: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 initdb.c:750 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не удалось выполнить команду \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не удалось прочитать вывод команды \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "команда \"%s\" не выдала данные" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "ошибка в %s(): %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 -#: initdb.c:349 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:372 initdb.c:408 #, c-format msgid "out of memory" msgstr "нехватка памяти" @@ -84,35 +99,46 @@ msgstr "нехватка памяти\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: ../../common/file_utils.c:162 ../../common/pgfnames.c:48 -#: ../../common/rmtree.c:63 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +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 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: ../../common/file_utils.c:196 ../../common/pgfnames.c:69 -#: ../../common/rmtree.c:104 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "не удалось открыть файл \"%s\": %m" - -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" -#: ../../common/file_utils.c:379 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" @@ -152,12 +178,12 @@ msgstr "не удалось перезапуститься с ограничен msgid "could not get exit code from subprocess: error code %lu" msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" -#: ../../common/rmtree.c:95 +#: ../../common/rmtree.c:97 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не удалось стереть файл \"%s\": %m" -#: ../../common/rmtree.c:122 +#: ../../common/rmtree.c:124 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "ошибка при удалении каталога \"%s\": %m" @@ -204,7 +230,35 @@ msgstr "дочерний процесс завершён по сигналу %d: #: ../../common/wait_error.c:82 #, c-format msgid "child process exited with unrecognized status %d" -msgstr "дочерний процесс завершился с нераспознанным состоянием %d" +msgstr "дочерний процесс завершился с нераспознанным кодом состояния %d" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "неверное значение \"%s\" для параметра %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "значение %s должно быть в диапазоне %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нераспознанный метод синхронизации: %s" + +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "" +"аргумент команды оболочки содержит символ новой строки или перевода каретки: " +"\"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "" +"имя базы данных содержит символ новой строки или перевода каретки: \"%s\"\n" #: ../../port/dirmod.c:287 #, c-format @@ -216,87 +270,102 @@ msgstr "не удалось создать связь для каталога \" msgid "could not get junction for \"%s\": %s\n" msgstr "не удалось получить связь для каталога \"%s\": %s\n" -#: initdb.c:623 initdb.c:1610 +#: initdb.c:369 +#, c-format +msgid "_wsetlocale() failed" +msgstr "ошибка в _wsetlocale()" + +#: initdb.c:376 +#, c-format +msgid "setlocale() failed" +msgstr "ошибка в setlocale()" + +#: initdb.c:390 +#, c-format +msgid "failed to restore old locale" +msgstr "не удалось восстановить старую локаль" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "не удалось восстановить старую локаль \"%s\"" + +#: initdb.c:682 initdb.c:1674 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" -#: initdb.c:667 initdb.c:971 initdb.c:991 +#: initdb.c:726 initdb.c:1030 initdb.c:1050 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не удалось открыть файл \"%s\" для записи: %m" -#: initdb.c:671 initdb.c:974 initdb.c:993 +#: initdb.c:730 initdb.c:1033 initdb.c:1052 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" -#: initdb.c:675 +#: initdb.c:734 #, c-format msgid "could not close file \"%s\": %m" msgstr "не удалось закрыть файл \"%s\": %m" -#: initdb.c:691 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "не удалось выполнить команду \"%s\": %m" - -#: initdb.c:709 +#: initdb.c:768 #, c-format msgid "removing data directory \"%s\"" msgstr "удаление каталога данных \"%s\"" -#: initdb.c:711 +#: initdb.c:770 #, c-format msgid "failed to remove data directory" msgstr "ошибка при удалении каталога данных" -#: initdb.c:715 +#: initdb.c:774 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "удаление содержимого каталога данных \"%s\"" -#: initdb.c:718 +#: initdb.c:777 #, c-format msgid "failed to remove contents of data directory" msgstr "ошибка при удалении содержимого каталога данных" -#: initdb.c:723 +#: initdb.c:782 #, c-format msgid "removing WAL directory \"%s\"" msgstr "удаление каталога WAL \"%s\"" -#: initdb.c:725 +#: initdb.c:784 #, c-format msgid "failed to remove WAL directory" msgstr "ошибка при удалении каталога WAL" -#: initdb.c:729 +#: initdb.c:788 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "удаление содержимого каталога WAL \"%s\"" -#: initdb.c:731 +#: initdb.c:790 #, c-format msgid "failed to remove contents of WAL directory" msgstr "ошибка при удалении содержимого каталога WAL" -#: initdb.c:738 +#: initdb.c:797 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "каталог данных \"%s\" не был удалён по запросу пользователя" -#: initdb.c:742 +#: initdb.c:801 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "каталог WAL \"%s\" не был удалён по запросу пользователя" -#: initdb.c:760 +#: initdb.c:819 #, c-format msgid "cannot be run as root" msgstr "программу не должен запускать root" -#: initdb.c:761 +#: initdb.c:820 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own " @@ -305,17 +374,17 @@ msgstr "" "Пожалуйста, переключитесь на обычного пользователя (например, используя " "\"su\"), которому будет принадлежать серверный процесс." -#: initdb.c:793 +#: initdb.c:852 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" — некорректное имя серверной кодировки" -#: initdb.c:937 +#: initdb.c:996 #, c-format msgid "file \"%s\" does not exist" msgstr "файл \"%s\" не существует" -#: initdb.c:938 initdb.c:943 initdb.c:950 +#: initdb.c:997 initdb.c:1002 initdb.c:1009 #, c-format msgid "" "This might mean you have a corrupted installation or identified the wrong " @@ -324,129 +393,124 @@ msgstr "" "Это означает, что ваша установка PostgreSQL испорчена или в параметре -L " "задан неправильный каталог." -#: initdb.c:942 +#: initdb.c:1001 #, c-format msgid "could not access file \"%s\": %m" -msgstr "нет доступа к файлу \"%s\": %m" +msgstr "ошибка при обращении к файлу \"%s\": %m" -#: initdb.c:949 +#: initdb.c:1008 #, c-format msgid "file \"%s\" is not a regular file" msgstr "\"%s\" — не обычный файл" -#: initdb.c:1082 +#: initdb.c:1141 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "выбирается реализация динамической разделяемой памяти... " -#: initdb.c:1091 +#: initdb.c:1150 #, c-format -msgid "selecting default max_connections ... " -msgstr "выбирается значение max_connections по умолчанию... " +msgid "selecting default \"max_connections\" ... " +msgstr "выбирается значение \"max_connections\" по умолчанию... " -#: initdb.c:1111 +#: initdb.c:1170 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "выбирается значение shared_buffers по умолчанию... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "выбирается значение \"shared_buffers\" по умолчанию... " -#: initdb.c:1134 +#: initdb.c:1193 #, c-format msgid "selecting default time zone ... " msgstr "выбирается часовой пояс по умолчанию... " -#: initdb.c:1211 +#: initdb.c:1272 msgid "creating configuration files ... " msgstr "создание конфигурационных файлов... " -#: initdb.c:1364 initdb.c:1378 initdb.c:1445 initdb.c:1456 +#: initdb.c:1425 initdb.c:1439 initdb.c:1506 initdb.c:1517 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "не удалось поменять права для \"%s\": %m" -#: initdb.c:1474 +#: initdb.c:1536 #, c-format msgid "running bootstrap script ... " msgstr "выполняется подготовительный скрипт... " -#: initdb.c:1486 +#: initdb.c:1548 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "входной файл \"%s\" не принадлежит PostgreSQL %s" -#: initdb.c:1488 +#: initdb.c:1550 #, c-format msgid "Specify the correct path using the option -L." msgstr "Укажите корректный путь в параметре -L." -#: initdb.c:1588 +#: initdb.c:1652 msgid "Enter new superuser password: " msgstr "Введите новый пароль суперпользователя: " -#: initdb.c:1589 +#: initdb.c:1653 msgid "Enter it again: " msgstr "Повторите его: " -#: initdb.c:1592 +#: initdb.c:1656 #, c-format msgid "Passwords didn't match.\n" msgstr "Пароли не совпадают.\n" -#: initdb.c:1616 +#: initdb.c:1680 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "не удалось прочитать пароль из файла \"%s\": %m" -#: initdb.c:1619 +#: initdb.c:1683 #, c-format msgid "password file \"%s\" is empty" msgstr "файл пароля \"%s\" пуст" -#: initdb.c:2031 +#: initdb.c:2095 #, c-format msgid "caught signal\n" msgstr "получен сигнал\n" -#: initdb.c:2037 +#: initdb.c:2101 #, c-format msgid "could not write to child process: %s\n" msgstr "не удалось записать в поток дочернего процесса: %s\n" -#: initdb.c:2045 +#: initdb.c:2109 #, c-format msgid "ok\n" msgstr "ок\n" -#: initdb.c:2134 -#, c-format -msgid "setlocale() failed" -msgstr "ошибка в setlocale()" - -#: initdb.c:2152 +#: initdb.c:2191 initdb.c:2237 #, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "не удалось восстановить старую локаль \"%s\"" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "имя локали \"%s\" содержит не-ASCII символы" -#: initdb.c:2160 +#: initdb.c:2217 #, c-format msgid "invalid locale name \"%s\"" msgstr "ошибочное имя локали \"%s\"" -#: initdb.c:2161 +#: initdb.c:2218 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "Если эта локаль свойственна ICU, укажите --icu-locale." -#: initdb.c:2174 +#: initdb.c:2231 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "неверные установки локали; проверьте переменные окружения LANG и LC_*" -#: initdb.c:2200 initdb.c:2224 +#: initdb.c:2262 initdb.c:2286 #, c-format msgid "encoding mismatch" msgstr "несоответствие кодировки" -#: initdb.c:2201 +#: initdb.c:2263 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the selected locale " @@ -457,7 +521,7 @@ msgstr "" "может привести к неправильной работе различных функций обработки текстовых " "строк." -#: initdb.c:2206 initdb.c:2227 +#: initdb.c:2268 initdb.c:2289 #, c-format msgid "" "Rerun %s and either do not specify an encoding explicitly, or choose a " @@ -466,42 +530,47 @@ msgstr "" "Для исправления перезапустите %s, не указывая кодировку явно, либо выберите " "подходящее сочетание параметров локализации." -#: initdb.c:2225 +#: initdb.c:2287 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "Выбранная вами кодировка (%s) не поддерживается провайдером ICU." -#: initdb.c:2276 +#: initdb.c:2338 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "не удалось получить из названия локали \"%s\" метку языка: %s" -#: initdb.c:2282 initdb.c:2334 initdb.c:2413 +#: initdb.c:2344 initdb.c:2396 initdb.c:2488 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не поддерживается в данной сборке" -#: initdb.c:2305 +#: initdb.c:2367 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "не удалось определить язык для локали \"%s\": %s" -#: initdb.c:2331 +#: initdb.c:2393 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "для локали \"%s\" получен неизвестный язык \"%s\"" -#: initdb.c:2397 +#: initdb.c:2454 +#, c-format +msgid "locale must be specified if provider is %s" +msgstr "если выбран провайдер %s, необходимо задать локаль" + +#: initdb.c:2465 #, c-format -msgid "ICU locale must be specified" -msgstr "необходимо задать локаль ICU" +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "неверное имя локали \"%s\" для встроенного провайдера" -#: initdb.c:2401 +#: initdb.c:2476 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "Для локали ICU \"%s\" используется метка языка \"%s\".\n" -#: initdb.c:2424 +#: initdb.c:2499 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -510,17 +579,17 @@ msgstr "" "%s инициализирует кластер PostgreSQL.\n" "\n" -#: initdb.c:2425 +#: initdb.c:2500 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: initdb.c:2426 +#: initdb.c:2501 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [ПАРАМЕТР]... [КАТАЛОГ]\n" -#: initdb.c:2427 +#: initdb.c:2502 #, c-format msgid "" "\n" @@ -529,7 +598,7 @@ msgstr "" "\n" "Параметры:\n" -#: initdb.c:2428 +#: initdb.c:2503 #, c-format msgid "" " -A, --auth=METHOD default authentication method for local " @@ -538,7 +607,7 @@ msgstr "" " -A, --auth=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных подключений\n" -#: initdb.c:2429 +#: initdb.c:2504 #, c-format msgid "" " --auth-host=METHOD default authentication method for local TCP/IP " @@ -547,7 +616,7 @@ msgstr "" " --auth-host=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных TCP/IP-подключений\n" -#: initdb.c:2430 +#: initdb.c:2505 #, c-format msgid "" " --auth-local=METHOD default authentication method for local-socket " @@ -556,17 +625,17 @@ msgstr "" " --auth-local=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных подключений через сокет\n" -#: initdb.c:2431 +#: initdb.c:2506 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]КАТАЛОГ расположение данных этого кластера БД\n" -#: initdb.c:2432 +#: initdb.c:2507 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=КОДИРОВКА кодировка по умолчанию для новых баз\n" -#: initdb.c:2433 +#: initdb.c:2508 #, c-format msgid "" " -g, --allow-group-access allow group read/execute on data directory\n" @@ -575,12 +644,12 @@ msgstr "" "для\n" " группы\n" -#: initdb.c:2434 +#: initdb.c:2509 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=ЛОКАЛЬ идентификатор локали ICU для новых баз\n" -#: initdb.c:2435 +#: initdb.c:2510 #, c-format msgid "" " --icu-rules=RULES set additional ICU collation rules for new " @@ -589,17 +658,17 @@ msgstr "" " --icu-rules=ПРАВИЛА дополнительные правила сортировки ICU для новых " "баз\n" -#: initdb.c:2436 +#: initdb.c:2511 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums включить контроль целостности страниц\n" -#: initdb.c:2437 +#: initdb.c:2512 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=ЛОКАЛЬ локаль по умолчанию для новых баз\n" -#: initdb.c:2438 +#: initdb.c:2513 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -613,28 +682,37 @@ msgstr "" " установить соответствующий параметр локали\n" " для новых баз (вместо значения из окружения)\n" -#: initdb.c:2442 +#: initdb.c:2517 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale эквивалентно --locale=C\n" -#: initdb.c:2443 +#: initdb.c:2518 #, c-format msgid "" -" --locale-provider={libc|icu}\n" +" --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr "" +" --builtin-locale=ЛОКАЛЬ\n" +" имя встроенной локали для новых баз\n" + +#: initdb.c:2520 +#, c-format +msgid "" +" --locale-provider={builtin|libc|icu}\n" " set default locale provider for new databases\n" msgstr "" -" --locale-provider={libc|icu}\n" +" --locale-provider={builtin|libc|icu}\n" " провайдер основной локали для новых баз\n" -#: initdb.c:2445 +#: initdb.c:2522 #, c-format msgid "" " --pwfile=FILE read password for the new superuser from file\n" msgstr "" " --pwfile=ФАЙЛ прочитать пароль суперпользователя из файла\n" -#: initdb.c:2446 +#: initdb.c:2523 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -643,29 +721,29 @@ msgstr "" " -T, --text-search-config=КОНФИГУРАЦИЯ\n" " конфигурация текстового поиска по умолчанию\n" -#: initdb.c:2448 +#: initdb.c:2525 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=ИМЯ имя суперпользователя БД\n" -#: initdb.c:2449 +#: initdb.c:2526 #, c-format msgid "" " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt запросить пароль суперпользователя\n" -#: initdb.c:2450 +#: initdb.c:2527 #, c-format msgid "" " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=КАТАЛОГ расположение журнала предзаписи\n" -#: initdb.c:2451 +#: initdb.c:2528 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=РАЗМЕР размер сегментов WAL (в мегабайтах)\n" -#: initdb.c:2452 +#: initdb.c:2529 #, c-format msgid "" "\n" @@ -674,7 +752,7 @@ msgstr "" "\n" "Редко используемые параметры:\n" -#: initdb.c:2453 +#: initdb.c:2530 #, c-format msgid "" " -c, --set NAME=VALUE override default setting for server parameter\n" @@ -682,27 +760,27 @@ msgstr "" " -c, --set ИМЯ=ЗНАЧЕНИЕ переопределить значение серверного параметра по\n" " умолчанию\n" -#: initdb.c:2454 +#: initdb.c:2531 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug выдавать много отладочных сообщений\n" -#: initdb.c:2455 +#: initdb.c:2532 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches установить debug_discard_caches=1\n" -#: initdb.c:2456 +#: initdb.c:2533 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L КАТАЛОГ расположение входных файлов\n" -#: initdb.c:2457 +#: initdb.c:2534 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean не очищать после ошибок\n" -#: initdb.c:2458 +#: initdb.c:2535 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -710,18 +788,23 @@ msgid "" msgstr "" " -N, --no-sync не ждать завершения сохранения данных на диске\n" -#: initdb.c:2459 +#: initdb.c:2536 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr "" " --no-instructions не выводить инструкции для дальнейших действий\n" -#: initdb.c:2460 +#: initdb.c:2537 +#, c-format +msgid " -s, --show show internal settings, then exit\n" +msgstr " -s, --show показать внутренние установки и выйти\n" + +#: initdb.c:2538 #, c-format -msgid " -s, --show show internal settings\n" -msgstr " -s, --show показать внутренние установки\n" +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=МЕТОД метод синхронизации файлов с ФС\n" -#: initdb.c:2461 +#: initdb.c:2539 #, c-format msgid "" " -S, --sync-only only sync database files to disk, then exit\n" @@ -729,7 +812,7 @@ msgstr "" " -S, --sync-only только синхронизировать с ФС файлы базы и " "завершиться\n" -#: initdb.c:2462 +#: initdb.c:2540 #, c-format msgid "" "\n" @@ -738,17 +821,17 @@ msgstr "" "\n" "Другие параметры:\n" -#: initdb.c:2463 +#: initdb.c:2541 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: initdb.c:2464 +#: initdb.c:2542 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: initdb.c:2465 +#: initdb.c:2543 #, c-format msgid "" "\n" @@ -758,7 +841,7 @@ msgstr "" "\n" "Если каталог данных не указан, используется переменная окружения PGDATA.\n" -#: initdb.c:2467 +#: initdb.c:2545 #, c-format msgid "" "\n" @@ -767,18 +850,18 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: initdb.c:2468 +#: initdb.c:2546 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: initdb.c:2496 +#: initdb.c:2570 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "" "нераспознанный метод проверки подлинности \"%s\" для подключений \"%s\"" -#: initdb.c:2510 +#: initdb.c:2584 #, c-format msgid "" "must specify a password for the superuser to enable password authentication" @@ -786,12 +869,12 @@ msgstr "" "для включения аутентификации по паролю необходимо указать пароль " "суперпользователя" -#: initdb.c:2529 +#: initdb.c:2603 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: initdb.c:2530 +#: initdb.c:2604 #, c-format msgid "" "You must identify the directory where the data for this database system will " @@ -801,53 +884,55 @@ msgstr "" "Вы должны указать каталог, в котором будут располагаться данные этой СУБД. " "Это можно сделать, добавив ключ -D или установив переменную окружения PGDATA." -#: initdb.c:2547 +#: initdb.c:2621 #, c-format msgid "could not set environment" msgstr "не удалось задать переменную окружения" -#: initdb.c:2565 +#: initdb.c:2639 #, c-format msgid "" "program \"%s\" is needed by %s but was not found in the same directory as " "\"%s\"" msgstr "программа \"%s\" нужна для %s, но она не найдена в каталоге \"%s\"" -#: initdb.c:2568 +#: initdb.c:2642 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "" "программа \"%s\" найдена программой \"%s\", но её версия отличается от " "версии %s" -#: initdb.c:2583 +#: initdb.c:2657 #, c-format msgid "input file location must be an absolute path" msgstr "расположение входных файлов должно задаваться абсолютным путём" -#: initdb.c:2600 +#: initdb.c:2674 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Кластер баз данных будет инициализирован с локалью \"%s\".\n" -#: initdb.c:2603 +#: initdb.c:2677 #, c-format msgid "" "The database cluster will be initialized with this locale configuration:\n" msgstr "" "Кластер баз данных будет инициализирован со следующими параметрами локали:\n" -#: initdb.c:2604 +#: initdb.c:2678 #, c-format -msgid " provider: %s\n" -msgstr " провайдер: %s\n" +msgid " locale provider: %s\n" +msgstr " провайдер локалей: %s\n" -#: initdb.c:2606 +#: initdb.c:2680 #, c-format -msgid " ICU locale: %s\n" -msgstr " локаль ICU: %s\n" +msgid " default collation: %s\n" +msgstr "" +" правило сортировки\n" +" по умолчанию: %s\n" -#: initdb.c:2607 +#: initdb.c:2681 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -864,22 +949,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2637 +#: initdb.c:2711 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "не удалось найти подходящую кодировку для локали \"%s\"" -#: initdb.c:2639 +#: initdb.c:2713 #, c-format msgid "Rerun %s with the -E option." msgstr "Перезапустите %s с параметром -E." -#: initdb.c:2640 initdb.c:3173 initdb.c:3281 initdb.c:3301 +#: initdb.c:2714 initdb.c:3257 initdb.c:3377 initdb.c:3397 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: initdb.c:2652 +#: initdb.c:2726 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -888,40 +973,45 @@ msgstr "" "Кодировка \"%s\", подразумеваемая локалью, не годится для сервера.\n" "Вместо неё в качестве кодировки БД по умолчанию будет выбрана \"%s\".\n" -#: initdb.c:2657 +#: initdb.c:2731 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "для локали \"%s\" требуется неподдерживаемая кодировка \"%s\"" -#: initdb.c:2659 +#: initdb.c:2733 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "Кодировка \"%s\" недопустима в качестве серверной кодировки." -#: initdb.c:2661 +#: initdb.c:2735 #, c-format msgid "Rerun %s with a different locale selection." msgstr "Перезапустите %s, выбрав другую локаль." -#: initdb.c:2669 +#: initdb.c:2743 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "" "Кодировка БД по умолчанию, выбранная в соответствии с настройками: \"%s\".\n" -#: initdb.c:2738 +#: initdb.c:2757 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "для локали \"%s\" встроенного провайдера требуется кодировка \"%s\"" + +#: initdb.c:2819 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "" "не удалось найти подходящую конфигурацию текстового поиска для локали \"%s\"" -#: initdb.c:2749 +#: initdb.c:2830 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "" "внимание: для локали \"%s\" нет известной конфигурации текстового поиска" -#: initdb.c:2754 +#: initdb.c:2835 #, c-format msgid "" "specified text search configuration \"%s\" might not match locale \"%s\"" @@ -929,37 +1019,37 @@ msgstr "" "указанная конфигурация текстового поиска \"%s\" может не соответствовать " "локали \"%s\"" -#: initdb.c:2759 +#: initdb.c:2840 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Выбрана конфигурация текстового поиска по умолчанию \"%s\".\n" -#: initdb.c:2802 initdb.c:2873 +#: initdb.c:2883 initdb.c:2954 #, c-format msgid "creating directory %s ... " msgstr "создание каталога %s... " -#: initdb.c:2807 initdb.c:2878 initdb.c:2926 initdb.c:2982 +#: initdb.c:2888 initdb.c:2959 initdb.c:3007 initdb.c:3064 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: initdb.c:2816 initdb.c:2888 +#: initdb.c:2897 initdb.c:2969 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "исправление прав для существующего каталога %s... " -#: initdb.c:2821 initdb.c:2893 +#: initdb.c:2902 initdb.c:2974 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "не удалось поменять права для каталога \"%s\": %m" -#: initdb.c:2833 initdb.c:2905 +#: initdb.c:2914 initdb.c:2986 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" существует, но он не пуст" -#: initdb.c:2837 +#: initdb.c:2918 #, c-format msgid "" "If you want to create a new database system, either remove or empty the " @@ -968,29 +1058,29 @@ msgstr "" "Если вы хотите создать новую систему баз данных, удалите или очистите " "каталог \"%s\", либо при запуске %s в качестве пути укажите не \"%s\"." -#: initdb.c:2845 initdb.c:2915 initdb.c:3322 +#: initdb.c:2926 initdb.c:2996 initdb.c:3422 #, c-format msgid "could not access directory \"%s\": %m" -msgstr "ошибка доступа к каталогу \"%s\": %m" +msgstr "ошибка при обращении к каталогу \"%s\": %m" -#: initdb.c:2866 +#: initdb.c:2947 #, c-format msgid "WAL directory location must be an absolute path" msgstr "расположение каталога WAL должно определяться абсолютным путём" -#: initdb.c:2909 +#: initdb.c:2990 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory " "\"%s\"." msgstr "Если вы хотите хранить WAL здесь, удалите или очистите каталог \"%s\"." -#: initdb.c:2919 +#: initdb.c:3000 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: initdb.c:2938 +#: initdb.c:3019 #, c-format msgid "" "It contains a dot-prefixed/invisible file, perhaps due to it being a mount " @@ -998,13 +1088,13 @@ msgid "" msgstr "" "Он содержит файл с точкой (невидимый), возможно, это точка монтирования." -#: initdb.c:2940 +#: initdb.c:3021 #, c-format msgid "" "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "Он содержит подкаталог lost+found, возможно, это точка монтирования." -#: initdb.c:2942 +#: initdb.c:3023 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -1014,67 +1104,62 @@ msgstr "" "рекомендуется.\n" "Создайте в монтируемом ресурсе подкаталог и используйте его." -#: initdb.c:2968 +#: initdb.c:3050 #, c-format msgid "creating subdirectories ... " msgstr "создание подкаталогов... " -#: initdb.c:3011 +#: initdb.c:3093 msgid "performing post-bootstrap initialization ... " msgstr "выполняется заключительная инициализация... " -#: initdb.c:3172 +#: initdb.c:3256 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" -#: initdb.c:3197 +#: initdb.c:3281 #, c-format msgid "Running in debug mode.\n" msgstr "Программа запущена в режиме отладки.\n" -#: initdb.c:3201 +#: initdb.c:3285 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "" "Программа запущена в режиме 'no-clean' - очистки и исправления ошибок не " "будет.\n" -#: initdb.c:3271 +#: initdb.c:3358 #, c-format msgid "unrecognized locale provider: %s" msgstr "нераспознанный провайдер локали: %s" -#: initdb.c:3299 +#: initdb.c:3395 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: initdb.c:3306 initdb.c:3310 +#: initdb.c:3402 initdb.c:3406 initdb.c:3410 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s можно указать, только если выбран провайдер локали \"%s\"" -#: initdb.c:3324 initdb.c:3401 +#: initdb.c:3424 initdb.c:3487 msgid "syncing data to disk ... " msgstr "сохранение данных на диске... " -#: initdb.c:3332 +#: initdb.c:3432 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "нельзя одновременно запросить пароль и прочитать пароль из файла" -#: initdb.c:3354 -#, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "аргументом --wal-segsize должно быть число" - -#: initdb.c:3356 +#: initdb.c:3443 #, c-format -msgid "argument of --wal-segsize must be a power of two between 1 and 1024" -msgstr "аргументом --wal-segsize должна быть степень двух от 1 до 1024" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "аргументом %s должна быть степень двух от 1 до 1024" -#: initdb.c:3370 +#: initdb.c:3456 #, c-format msgid "" "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" @@ -1082,7 +1167,7 @@ msgstr "" "имя \"%s\" для суперпользователя не допускается; имена ролей не могут " "начинаться с \"pg_\"" -#: initdb.c:3372 +#: initdb.c:3458 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1093,17 +1178,17 @@ msgstr "" "От его имени также будет запускаться процесс сервера.\n" "\n" -#: initdb.c:3388 +#: initdb.c:3474 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Контроль целостности страниц данных включён.\n" -#: initdb.c:3390 +#: initdb.c:3476 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Контроль целостности страниц данных отключён.\n" -#: initdb.c:3407 +#: initdb.c:3493 #, c-format msgid "" "\n" @@ -1114,12 +1199,12 @@ msgstr "" "Сохранение данных на диск пропускается.\n" "Каталог данных может повредиться при сбое операционной системы.\n" -#: initdb.c:3412 +#: initdb.c:3498 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "включение метода аутентификации \"trust\" для локальных подключений" -#: initdb.c:3413 +#: initdb.c:3499 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or --auth-" @@ -1129,11 +1214,11 @@ msgstr "" "initdb с ключом -A, --auth-local или --auth-host." #. translator: This is a placeholder in a shell command. -#: initdb.c:3443 +#: initdb.c:3529 msgid "logfile" msgstr "файл_журнала" -#: initdb.c:3445 +#: initdb.c:3531 #, c-format msgid "" "\n" @@ -1148,6 +1233,14 @@ msgstr "" " %s\n" "\n" +#, c-format +#~ msgid " ICU locale: %s\n" +#~ msgstr " локаль ICU: %s\n" + +#, c-format +#~ msgid "argument of --wal-segsize must be a number" +#~ msgstr "аргументом --wal-segsize должно быть число" + #, c-format #~ msgid "could not identify current directory: %m" #~ msgstr "не удалось определить текущий каталог: %m" @@ -1172,10 +1265,6 @@ msgstr "" #~ msgid "could not stat file or directory \"%s\": %m" #~ msgstr "не удалось получить информацию о файле или каталоге \"%s\": %m" -#, c-format -#~ msgid "could not remove file or directory \"%s\": %m" -#~ msgstr "ошибка при удалении файла или каталога \"%s\": %m" - #, c-format #~ msgid "The default database encoding has been set to \"%s\".\n" #~ msgstr "В качестве кодировки БД по умолчанию установлена \"%s\".\n" @@ -1226,9 +1315,6 @@ msgstr "" #~ msgid "%s: locale name too long, skipped: \"%s\"\n" #~ msgstr "%s: слишком длинное имя локали, пропущено: \"%s\"\n" -#~ msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" -#~ msgstr "%s: имя локали содержит не ASCII-символы, пропущено: \"%s\"\n" - #~ msgid "No usable system locales were found.\n" #~ msgstr "Пригодные локали в системе не найдены.\n" diff --git a/src/bin/initdb/po/sv.po b/src/bin/initdb/po/sv.po index dc5e8fd525168..58183c91295e7 100644 --- a/src/bin/initdb/po/sv.po +++ b/src/bin/initdb/po/sv.po @@ -1,5 +1,5 @@ # Swedish message translation file for initdb -# Dennis Björklund , 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Dennis Björklund , 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025. # Magnus Hagander , 2007. # Peter Eisentraut , 2009. # Mats Erik Andersson , 2014. @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 16\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-31 19:50+0000\n" -"PO-Revision-Date: 2023-08-31 21:59+0200\n" +"POT-Creation-Date: 2025-02-12 13:51+0000\n" +"PO-Revision-Date: 2025-02-12 20:46+0100\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -40,33 +40,48 @@ msgstr "detalj: " msgid "hint: " msgstr "tips: " -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "ogiltig binär \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "kunde inte läsa binär \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "kunde inte hitta en \"%s\" att köra" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "kunde inte konvertera sökvägen \"%s\" till en absolut sökväg: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 initdb.c:750 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "kunde inte köra kommandot \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "kunde inte läsa från kommando \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "ingen data returnerades från kommandot \"%s\"" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() misslyckades: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 -#: initdb.c:349 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:372 initdb.c:408 #, c-format msgid "out of memory" msgstr "slut på minne" @@ -82,35 +97,46 @@ msgstr "slut på minne\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kan inte duplicera null-pekare (internt fel)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" msgstr "kunde inte göra stat() på fil \"%s\": %m" -#: ../../common/file_utils.c:162 ../../common/pgfnames.c:48 -#: ../../common/rmtree.c:63 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "detta bygge stöder inte synkmetod \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/pgfnames.c:48 ../../common/rmtree.c:63 #, c-format msgid "could not open directory \"%s\": %m" msgstr "kunde inte öppna katalog \"%s\": %m" -#: ../../common/file_utils.c:196 ../../common/pgfnames.c:69 -#: ../../common/rmtree.c:104 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "kunde inte läsa katalog \"%s\": %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "kunde inte öppna fil \"%s\": %m" - -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "kunde inte fsync:a fil \"%s\": %m" -#: ../../common/file_utils.c:379 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" @@ -150,12 +176,12 @@ msgstr "kunde inte köra igen med token för begränsad åtkomst: felkod %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "kunde inte hämta statuskod för underprocess: felkod %lu" -#: ../../common/rmtree.c:95 +#: ../../common/rmtree.c:97 #, c-format msgid "could not remove file \"%s\": %m" msgstr "kunde inte ta bort fil \"%s\": %m" -#: ../../common/rmtree.c:122 +#: ../../common/rmtree.c:124 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "kunde inte ta bort katalog \"%s\": %m" @@ -204,6 +230,31 @@ msgstr "barnprocess terminerades av signal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "barnprocess avslutade med okänd statuskod %d" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "ogiltigt värde \"%s\" för flaggan \"%s\"" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s måste vara i intervallet %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "okänd synkmetod: %s" + +#: ../../fe_utils/string_utils.c:608 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "shell-kommandots argument innehåller nyrad eller vagnretur: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:781 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "databasnamnet innehåller nyrad eller vagnretur: \"%s\"\n" + #: ../../port/dirmod.c:287 #, c-format msgid "could not set junction for \"%s\": %s\n" @@ -214,151 +265,166 @@ msgstr "kunde inte sätta en knutpunkt (junction) för \"%s\": %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "kunde inte få en knutpunkt (junction) för \"%s\": %s\n" -#: initdb.c:618 initdb.c:1613 +#: initdb.c:369 +#, c-format +msgid "_wsetlocale() failed" +msgstr "_wsetlocale() misslyckades" + +#: initdb.c:376 +#, c-format +msgid "setlocale() failed" +msgstr "setlocale() misslyckades" + +#: initdb.c:390 +#, c-format +msgid "failed to restore old locale" +msgstr "misslyckades med att återställa gamla lokalen" + +#: initdb.c:393 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "misslyckades med att återställa gamla lokalen \"%s\"" + +#: initdb.c:682 initdb.c:1674 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "kunde inte öppna filen \"%s\" för läsning: %m" -#: initdb.c:662 initdb.c:966 initdb.c:986 +#: initdb.c:726 initdb.c:1030 initdb.c:1050 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "kunde inte öppna fil \"%s\" för skrivning: %m" -#: initdb.c:666 initdb.c:969 initdb.c:988 +#: initdb.c:730 initdb.c:1033 initdb.c:1052 #, c-format msgid "could not write file \"%s\": %m" msgstr "kunde inte skriva fil \"%s\": %m" -#: initdb.c:670 +#: initdb.c:734 #, c-format msgid "could not close file \"%s\": %m" msgstr "kunde inte stänga fil \"%s\": %m" -#: initdb.c:686 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "kunde inte köra kommandot \"%s\": %m" - -#: initdb.c:704 +#: initdb.c:768 #, c-format msgid "removing data directory \"%s\"" msgstr "tar bort datakatalog \"%s\"" -#: initdb.c:706 +#: initdb.c:770 #, c-format msgid "failed to remove data directory" msgstr "misslyckades med att ta bort datakatalog" -#: initdb.c:710 +#: initdb.c:774 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "tar bort innehållet i datakatalog \"%s\"" -#: initdb.c:713 +#: initdb.c:777 #, c-format msgid "failed to remove contents of data directory" msgstr "misslyckades med att ta bort innehållet i datakatalogen" -#: initdb.c:718 +#: initdb.c:782 #, c-format msgid "removing WAL directory \"%s\"" msgstr "tar bort WAL-katalog \"%s\"" -#: initdb.c:720 +#: initdb.c:784 #, c-format msgid "failed to remove WAL directory" msgstr "misslyckades med att ta bort WAL-katalog" -#: initdb.c:724 +#: initdb.c:788 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "tar bort innehållet i WAL-katalog \"%s\"" -#: initdb.c:726 +#: initdb.c:790 #, c-format msgid "failed to remove contents of WAL directory" msgstr "misslyckades med att ta bort innehållet i WAL-katalogen" -#: initdb.c:733 +#: initdb.c:797 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "datakatalog \"%s\" är ej borttagen på användares begäran" -#: initdb.c:737 +#: initdb.c:801 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL-katalog \"%s\" är ej borttagen på användares begäran" -#: initdb.c:755 +#: initdb.c:819 #, c-format msgid "cannot be run as root" msgstr "kan inte köras som root" -#: initdb.c:756 +#: initdb.c:820 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "Logga in (t.ex. med \"su\") som den (opriviligerade) användare som skall äga serverprocessen." -#: initdb.c:788 +#: initdb.c:852 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" är inte en giltig teckenkodning för servern" -#: initdb.c:932 +#: initdb.c:996 #, c-format msgid "file \"%s\" does not exist" msgstr "filen \"%s\" finns inte" -#: initdb.c:933 initdb.c:938 initdb.c:945 +#: initdb.c:997 initdb.c:1002 initdb.c:1009 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "Detta kan betyda att du har en korrupt installation eller att du har angivit felaktig katalog till flaggan -L." -#: initdb.c:937 +#: initdb.c:1001 #, c-format msgid "could not access file \"%s\": %m" msgstr "kunde inte komma åt filen \"%s\": %m" -#: initdb.c:944 +#: initdb.c:1008 #, c-format msgid "file \"%s\" is not a regular file" msgstr "filen \"%s\" är inte en normal fil" -#: initdb.c:1077 +#: initdb.c:1141 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "väljer mekanism för dynamiskt, delat minne ... " -#: initdb.c:1086 +#: initdb.c:1150 #, c-format -msgid "selecting default max_connections ... " -msgstr "sätter förvalt värde för max_connections ... " +msgid "selecting default \"max_connections\" ... " +msgstr "sätter förvalt värde för \"max_connections\" ... " -#: initdb.c:1106 +#: initdb.c:1170 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "sätter förvalt värde för shared_buffers ... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "sätter förvalt värde för \"shared_buffers\" ... " -#: initdb.c:1129 +#: initdb.c:1193 #, c-format msgid "selecting default time zone ... " msgstr "sätter förvalt värde för tidszon ... " -#: initdb.c:1206 +#: initdb.c:1272 msgid "creating configuration files ... " msgstr "skapar konfigurationsfiler ... " -#: initdb.c:1367 initdb.c:1381 initdb.c:1448 initdb.c:1459 +#: initdb.c:1425 initdb.c:1439 initdb.c:1506 initdb.c:1517 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "kunde inte ändra rättigheter på \"%s\": %m" -#: initdb.c:1477 +#: initdb.c:1536 #, c-format msgid "running bootstrap script ... " msgstr "kör uppsättningsskript..." -#: initdb.c:1489 +#: initdb.c:1548 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "indatafil \"%s\" tillhör inte PostgreSQL %s" @@ -367,125 +433,125 @@ msgstr "indatafil \"%s\" tillhör inte PostgreSQL %s" # with a standard directory "/usr/local/pgsql", is such that # the translated message string produces a reasonable output. # -#: initdb.c:1491 +#: initdb.c:1550 #, c-format msgid "Specify the correct path using the option -L." msgstr "Ange korrekt sökväg med flaggan -L." -#: initdb.c:1591 +#: initdb.c:1652 msgid "Enter new superuser password: " msgstr "Mata in ett nytt lösenord för superuser: " -#: initdb.c:1592 +#: initdb.c:1653 msgid "Enter it again: " msgstr "Mata in det igen: " -#: initdb.c:1595 +#: initdb.c:1656 #, c-format msgid "Passwords didn't match.\n" msgstr "Lösenorden stämde inte överens.\n" -#: initdb.c:1619 +#: initdb.c:1680 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "kunde inte läsa lösenord i filen \"%s\": %m" -#: initdb.c:1622 +#: initdb.c:1683 #, c-format msgid "password file \"%s\" is empty" msgstr "lösenordsfilen \"%s\" är tom" -#: initdb.c:2034 +#: initdb.c:2095 #, c-format msgid "caught signal\n" msgstr "mottog signal\n" -#: initdb.c:2040 +#: initdb.c:2101 #, c-format msgid "could not write to child process: %s\n" msgstr "kunde inte skriva till barnprocess: %s\n" -#: initdb.c:2048 +#: initdb.c:2109 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2137 -#, c-format -msgid "setlocale() failed" -msgstr "setlocale() misslyckades" - -#: initdb.c:2155 +#: initdb.c:2191 initdb.c:2237 #, c-format -msgid "failed to restore old locale \"%s\"" -msgstr "misslyckades med att återställa gamla lokalen \"%s\"" +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "lokalnamn \"%s\" innehåller tecken som ej är ASCII" -#: initdb.c:2163 +#: initdb.c:2217 #, c-format msgid "invalid locale name \"%s\"" msgstr "ogiltigt lokalnamn \"%s\"" -#: initdb.c:2164 +#: initdb.c:2218 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "Om lokalnamnet är specifikt för ICU, använd --icu-locale." -#: initdb.c:2177 +#: initdb.c:2231 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "ogiltig lokalinställning. Kontrollera miljövariablerna LANG och LC_*" -#: initdb.c:2203 initdb.c:2227 +#: initdb.c:2262 initdb.c:2286 #, c-format msgid "encoding mismatch" msgstr "teckenkodning matchar inte" -#: initdb.c:2204 +#: initdb.c:2263 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "Teckenkodningen du har valt (%s) och teckenkodningen som valda lokalen använder (%s) passar inte ihop. Detta kommer leda till problem för funktioner som arbetar med strängar." -#: initdb.c:2209 initdb.c:2230 +#: initdb.c:2268 initdb.c:2289 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "Kör %s igen och ange antingen ingen explicit kodning eller välj en matchande kombination." -#: initdb.c:2228 +#: initdb.c:2287 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "Den valda teckenkodningen (%s) stöds inte av ICU." -#: initdb.c:2279 +#: initdb.c:2338 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "kunde inte konvertera lokalnamn \"%s\" till språktagg: %s" -#: initdb.c:2285 initdb.c:2337 initdb.c:2416 +#: initdb.c:2344 initdb.c:2396 initdb.c:2488 #, c-format msgid "ICU is not supported in this build" msgstr "ICU stöds inte av detta bygge" -#: initdb.c:2308 +#: initdb.c:2367 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "kunde inte härleda språk från lokalen \"%s\": %s" -#: initdb.c:2334 +#: initdb.c:2393 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "lokalen \"%s\" har ett okänt språk \"%s\"" -#: initdb.c:2400 +#: initdb.c:2454 #, c-format -msgid "ICU locale must be specified" -msgstr "ICU-lokal måste anges" +msgid "locale must be specified if provider is %s" +msgstr "lokal måste anges när leverantören är %s" -#: initdb.c:2404 +#: initdb.c:2465 +#, c-format +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "ogiltigt lokalnamn \"%s\" för inbyggd leverantör" + +#: initdb.c:2476 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "Använder språktagg \"%s\" för ICU-lokal \"%s\".\n" -#: initdb.c:2427 +#: initdb.c:2499 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -494,17 +560,17 @@ msgstr "" "%s initierar ett databaskluster för PostgreSQL.\n" "\n" -#: initdb.c:2428 +#: initdb.c:2500 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: initdb.c:2429 +#: initdb.c:2501 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [FLAGGA]... [DATAKATALOG]\n" -#: initdb.c:2430 +#: initdb.c:2502 #, c-format msgid "" "\n" @@ -513,57 +579,57 @@ msgstr "" "\n" "Flaggor:\n" -#: initdb.c:2431 +#: initdb.c:2503 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METOD förvald autentiseringsmetod för alla anslutningar\n" -#: initdb.c:2432 +#: initdb.c:2504 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=METOD autentiseringsmetod för TCP/IP-anslutningar\n" -#: initdb.c:2433 +#: initdb.c:2505 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=METOD autentiseringsmetod för anslutningar via unix-uttag\n" -#: initdb.c:2434 +#: initdb.c:2506 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATAKATALOG läge för detta databaskluster\n" -#: initdb.c:2435 +#: initdb.c:2507 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=KODNING sätter teckenkodning för nya databaser\n" -#: initdb.c:2436 +#: initdb.c:2508 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access tillåt läs/kör för grupp på datakatalogen\n" -#: initdb.c:2437 +#: initdb.c:2509 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=LOKAL sätt ID för ICU-lokal för nya databaser\n" -#: initdb.c:2438 +#: initdb.c:2510 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" msgstr " --icu-rules=REGLER sätt ytterligare ICU-jämförelseregler för nya databaser\n" -#: initdb.c:2439 +#: initdb.c:2511 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums använd checksummor på datablock\n" -#: initdb.c:2440 +#: initdb.c:2512 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOKAL sätt standardlokal för nya databaser\n" -#: initdb.c:2441 +#: initdb.c:2513 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -576,26 +642,35 @@ msgstr "" " sätter standardlokal i utvald kategori för\n" " nya databaser (förval hämtas ur omgivningen)\n" -#: initdb.c:2445 +#: initdb.c:2517 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale samma som --locale=C\n" -#: initdb.c:2446 +#: initdb.c:2518 +#, c-format +msgid "" +" --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr "" +" --builtin-locale=LOKAL\n" +" sätt standard lokalnamn för nya databaser\n" + +#: initdb.c:2520 #, c-format msgid "" -" --locale-provider={libc|icu}\n" +" --locale-provider={builtin|libc|icu}\n" " set default locale provider for new databases\n" msgstr "" -" --locale-provider={libc|icu}\n" +" --locale-provider={builtin|libc|icu}\n" " sätt standard lokalleverantör för nya databaser\n" -#: initdb.c:2448 +#: initdb.c:2522 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FIL läser lösenord för superuser från fil\n" -#: initdb.c:2449 +#: initdb.c:2523 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -604,27 +679,27 @@ msgstr "" " -T, --text-search-config=CFG\n" " standardkonfiguration för textsökning\n" -#: initdb.c:2451 +#: initdb.c:2525 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAMN namn på databasens superuser\n" -#: initdb.c:2452 +#: initdb.c:2526 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt efterfråga lösenord för superuser\n" -#: initdb.c:2453 +#: initdb.c:2527 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR katalog för write-ahead-log (WAL)\n" -#: initdb.c:2454 +#: initdb.c:2528 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=STORLEK storlek på WAL-segment i megabyte\n" -#: initdb.c:2455 +#: initdb.c:2529 #, c-format msgid "" "\n" @@ -633,52 +708,57 @@ msgstr "" "\n" "Mindre vanliga flaggor:\n" -#: initdb.c:2456 +#: initdb.c:2530 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" msgstr " -c, --set NAMN=VÄRDE ersätt standardinställning för serverparameter\n" -#: initdb.c:2457 +#: initdb.c:2531 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug generera massor med debug-utskrifter\n" -#: initdb.c:2458 +#: initdb.c:2532 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches sätt debug_discard_caches=1\n" -#: initdb.c:2459 +#: initdb.c:2533 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L KATALOG katalog där indatafiler skall sökas\n" -#: initdb.c:2460 +#: initdb.c:2534 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean städa inte upp efter fel\n" -#: initdb.c:2461 +#: initdb.c:2535 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync vänta inte på att ändingar säkert skrivits till disk\n" -#: initdb.c:2462 +#: initdb.c:2536 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions skriv inte instruktioner för nästa steg\n" -#: initdb.c:2463 +#: initdb.c:2537 +#, c-format +msgid " -s, --show show internal settings, then exit\n" +msgstr " -s, --show visa interna inställningar, avsluta sedan\n" + +#: initdb.c:2538 #, c-format -msgid " -s, --show show internal settings\n" -msgstr " -s, --show visa interna inställningar\n" +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METOD sätt synkmetod för att synka filer till disk\n" -#: initdb.c:2464 +#: initdb.c:2539 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only synka bara databasfiler till disk, avsluta seden\n" -#: initdb.c:2465 +#: initdb.c:2540 #, c-format msgid "" "\n" @@ -687,17 +767,17 @@ msgstr "" "\n" "Andra flaggor:\n" -#: initdb.c:2466 +#: initdb.c:2541 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: initdb.c:2467 +#: initdb.c:2542 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: initdb.c:2468 +#: initdb.c:2543 #, c-format msgid "" "\n" @@ -707,7 +787,7 @@ msgstr "" "\n" "Om datakatalogen inte anges så tas den från omgivningsvariabeln PGDATA.\n" -#: initdb.c:2470 +#: initdb.c:2545 #, c-format msgid "" "\n" @@ -716,72 +796,72 @@ msgstr "" "\n" "Rapportera fel till <%s>.\n" -#: initdb.c:2471 +#: initdb.c:2546 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: initdb.c:2499 +#: initdb.c:2570 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "ogiltig autentiseringsmetod \"%s\" för anslutning av typen \"%s\"" -#: initdb.c:2513 +#: initdb.c:2584 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "du måste ange ett lösenord för superuser för att kunna slå på lösenordsautentisering" -#: initdb.c:2532 +#: initdb.c:2603 #, c-format msgid "no data directory specified" msgstr "ingen datakatalog angiven" -#: initdb.c:2533 +#: initdb.c:2604 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "Du måste uppge den katalog där data för detta databassystem skall lagras. Gör det antingen med flaggan -D eller genom att sätta omgivningsvariabeln PGDATA." -#: initdb.c:2550 +#: initdb.c:2621 #, c-format msgid "could not set environment" msgstr "kunde inte sätta omgivningen" -#: initdb.c:2568 +#: initdb.c:2639 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "programmet \"%s\" behövs av %s men hittades inte i samma katalog som \"%s\"" -#: initdb.c:2571 +#: initdb.c:2642 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "programmet \"%s\" hittades av \"%s\" men är inte av samma version som %s" -#: initdb.c:2586 +#: initdb.c:2657 #, c-format msgid "input file location must be an absolute path" msgstr "plats för indatafiler måste vara en absolut sökväg" -#: initdb.c:2603 +#: initdb.c:2674 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Databasklustret kommer att skapas med lokalnamn \"%s\".\n" -#: initdb.c:2606 +#: initdb.c:2677 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "Databasklustret kommer att initieras med denna lokalkonfiguration:\n" -#: initdb.c:2607 +#: initdb.c:2678 #, c-format -msgid " provider: %s\n" -msgstr " leverantör: %s\n" +msgid " locale provider: %s\n" +msgstr " lokalleverantör: %s\n" -#: initdb.c:2609 +#: initdb.c:2680 #, c-format -msgid " ICU locale: %s\n" -msgstr " ICU-lokal: %s\n" +msgid " default collation: %s\n" +msgstr " standardjämförelse: %s\n" -#: initdb.c:2610 +#: initdb.c:2681 #, c-format msgid "" " LC_COLLATE: %s\n" @@ -798,22 +878,22 @@ msgstr "" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2640 +#: initdb.c:2711 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "kunde inte välja en lämplig kodning för lokal \"%s\"" -#: initdb.c:2642 +#: initdb.c:2713 #, c-format msgid "Rerun %s with the -E option." msgstr "Kör %s igen men med flaggan -E." -#: initdb.c:2643 initdb.c:3176 initdb.c:3284 initdb.c:3304 +#: initdb.c:2714 initdb.c:3257 initdb.c:3377 initdb.c:3397 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: initdb.c:2655 +#: initdb.c:2726 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -822,107 +902,112 @@ msgstr "" "Teckenkodning \"%s\", tagen ur lokalnamnet, är inte godtagbar för servern.\n" "I dess ställe sättes databasens förvalda teckenkodning till \"%s\".\n" -#: initdb.c:2660 +#: initdb.c:2731 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "lokalen \"%s\" kräver ej supportad teckenkodning \"%s\"" -#: initdb.c:2662 +#: initdb.c:2733 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "Teckenkodning \"%s\" tillåts inte som serverteckenkodning." -#: initdb.c:2664 +#: initdb.c:2735 #, c-format msgid "Rerun %s with a different locale selection." msgstr "Kör %s igen men välj en annan lokal." -#: initdb.c:2672 +#: initdb.c:2743 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Förvald teckenkodning för databaser är satt till \"%s\".\n" -#: initdb.c:2741 +#: initdb.c:2757 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "lokal \"%s\" för inbyggd leverantör kräver teckenkodning \"%s\"" + +#: initdb.c:2819 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "kunde inte hitta en lämplig textsökningskonfiguration för lokalnamn \"%s\"" -#: initdb.c:2752 +#: initdb.c:2830 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "ingen lämplig textsökningskonfiguration för lokalnamn \"%s\"" -#: initdb.c:2757 +#: initdb.c:2835 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "uppgiven textsökningskonfiguration \"%s\" passar kanske inte till lokalnamn \"%s\"" -#: initdb.c:2762 +#: initdb.c:2840 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Förvald textsökningskonfiguration för databaser är satt till \"%s\".\n" -#: initdb.c:2805 initdb.c:2876 +#: initdb.c:2883 initdb.c:2954 #, c-format msgid "creating directory %s ... " msgstr "skapar katalog %s ... " -#: initdb.c:2810 initdb.c:2881 initdb.c:2929 initdb.c:2985 +#: initdb.c:2888 initdb.c:2959 initdb.c:3007 initdb.c:3064 #, c-format msgid "could not create directory \"%s\": %m" msgstr "kunde inte skapa katalog \"%s\": %m" -#: initdb.c:2819 initdb.c:2891 +#: initdb.c:2897 initdb.c:2969 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "sätter rättigheter på existerande katalog %s ... " -#: initdb.c:2824 initdb.c:2896 +#: initdb.c:2902 initdb.c:2974 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "kunde inte ändra rättigheter på katalogen \"%s\": %m" -#: initdb.c:2836 initdb.c:2908 +#: initdb.c:2914 initdb.c:2986 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "katalogen \"%s\" existerar men är inte tom" -#: initdb.c:2840 +#: initdb.c:2918 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "Om du vill skapa ett nytt databassystem, tag då antingen bort eller töm katalogen \"%s\" eller kör %s med annat argument än \"%s\"." -#: initdb.c:2848 initdb.c:2918 initdb.c:3325 +#: initdb.c:2926 initdb.c:2996 initdb.c:3422 #, c-format msgid "could not access directory \"%s\": %m" msgstr "kunde inte komma åt katalog \"%s\": %m" -#: initdb.c:2869 +#: initdb.c:2947 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL-katalogen måste vara en absolut sökväg" -#: initdb.c:2912 +#: initdb.c:2990 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "Om du vill spara WAL där, antingen radera eller töm katalogen \"%s\"." -#: initdb.c:2922 +#: initdb.c:3000 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "kan inte skapa symbolisk länk \"%s\": %m" -#: initdb.c:2941 +#: initdb.c:3019 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "Den innehåller en gömd fil, med inledande punkt i namnet; kanske är detta en monteringspunkt." -#: initdb.c:2943 +#: initdb.c:3021 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "Den innehåller \"lost+found\"; kanske är detta en monteringspunkt." -#: initdb.c:2945 +#: initdb.c:3023 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -931,70 +1016,65 @@ msgstr "" "Att använda en monteringspunkt som datakatalog rekommenderas inte.\n" "Skapa först en underkatalog under monteringspunkten." -#: initdb.c:2971 +#: initdb.c:3050 #, c-format msgid "creating subdirectories ... " msgstr "Skapar underkataloger ... " -#: initdb.c:3014 +#: initdb.c:3093 msgid "performing post-bootstrap initialization ... " msgstr "utför initiering efter uppstättning..." -#: initdb.c:3175 +#: initdb.c:3256 #, c-format msgid "-c %s requires a value" msgstr "-c %s kräver ett värde" -#: initdb.c:3200 +#: initdb.c:3281 #, c-format msgid "Running in debug mode.\n" msgstr "Kör i debug-läge.\n" -#: initdb.c:3204 +#: initdb.c:3285 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Kör i no-clean-läge. Misstag kommer inte städas bort.\n" -#: initdb.c:3274 +#: initdb.c:3358 #, c-format msgid "unrecognized locale provider: %s" msgstr "okänd lokalleverantör: %s" -#: initdb.c:3302 +#: initdb.c:3395 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "för många kommandoradsargument (första är \"%s\")" -#: initdb.c:3309 initdb.c:3313 +#: initdb.c:3402 initdb.c:3406 initdb.c:3410 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s kan inte anges om inte lokalleverantör \"%s\" valts" -#: initdb.c:3327 initdb.c:3404 +#: initdb.c:3424 initdb.c:3487 msgid "syncing data to disk ... " msgstr "synkar data till disk ... " -#: initdb.c:3335 +#: initdb.c:3432 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "lösenordsfråga och lösenordsfil kan inte anges samtidigt" -#: initdb.c:3357 +#: initdb.c:3443 #, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "argumentet till --wal-segsize måste vara ett tal" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "argumentet till %s måste vara en tvåpotens mellan 1 och 1024" -#: initdb.c:3359 -#, c-format -msgid "argument of --wal-segsize must be a power of two between 1 and 1024" -msgstr "argumentet till --wal-segsize måste vara en tvåpotens mellan 1 och 1024" - -#: initdb.c:3373 +#: initdb.c:3456 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "superuser-namn \"%s\" tillåts inte; rollnamn får inte börja på \"pg_\"" -#: initdb.c:3375 +#: initdb.c:3458 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1005,17 +1085,17 @@ msgstr "" "Denna användare måste också vara ägare av server-processen.\n" "\n" -#: initdb.c:3391 +#: initdb.c:3474 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Checksummor för datablock är aktiva.\n" -#: initdb.c:3393 +#: initdb.c:3476 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Checksummor för datablock är avstängda.\n" -#: initdb.c:3410 +#: initdb.c:3493 #, c-format msgid "" "\n" @@ -1026,22 +1106,22 @@ msgstr "" "Avstod från synkning mot lagringsmedium.\n" "Datakatalogen kan komma att fördärvas om operativsystemet störtar.\n" -#: initdb.c:3415 +#: initdb.c:3498 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "slår på autentiseringsmetod \"trust\" för lokala anslutningar" -#: initdb.c:3416 +#: initdb.c:3499 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "Du kan ändra detta genom att redigera pg_hba.conf eller genom att sätta flaggor -A eller --auth-local och --auth-host nästa gång du kör initdb." #. translator: This is a placeholder in a shell command. -#: initdb.c:3446 +#: initdb.c:3529 msgid "logfile" msgstr "loggfil" -#: initdb.c:3448 +#: initdb.c:3531 #, c-format msgid "" "\n" @@ -1055,39 +1135,3 @@ msgstr "" "\n" " %s\n" "\n" - -#, c-format -#~ msgid "The default database encoding has been set to \"%s\".\n" -#~ msgstr "Förvald teckenkodning för databaser är satt till \"%s\".\n" - -#, c-format -#~ msgid "cannot create restricted tokens on this platform: error code %lu" -#~ msgstr "kan inte skapa token för begränsad åtkomst på denna plattorm: felkod %lu" - -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "kunde inte byta katalog till \"%s\": %m" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "kunde inte identifiera aktuell katalog: %m" - -#, c-format -#~ msgid "could not load library \"%s\": error code %lu" -#~ msgstr "kunde inte ladda länkbibliotek \"%s\": felkod %lu" - -#, c-format -#~ msgid "could not read symbolic link \"%s\": %m" -#~ msgstr "kan inte läsa symbolisk länk \"%s\": %m" - -#, c-format -#~ msgid "could not remove file or directory \"%s\": %m" -#~ msgstr "kunde inte ta bort fil eller katalog \"%s\": %m" - -#, c-format -#~ msgid "could not stat file or directory \"%s\": %m" -#~ msgstr "kunde inte ta status på fil eller katalog \"%s\": %m" - -#, c-format -#~ msgid "symlinks are not supported on this platform" -#~ msgstr "symboliska länkar stöds inte på denna plattform" diff --git a/src/bin/initdb/po/uk.po b/src/bin/initdb/po/uk.po index bcda4ce03cfcd..699f6e9680374 100644 --- a/src/bin/initdb/po/uk.po +++ b/src/bin/initdb/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-12-17 22:19+0000\n" -"PO-Revision-Date: 2023-12-19 16:43+0100\n" +"POT-Creation-Date: 2024-08-31 06:21+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,9 +14,8 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_16_STABLE/initdb.pot\n" -"X-Crowdin-File-ID: 943\n" -"X-Generator: Poedit 3.4.1\n" +"X-Crowdin-File: /REL_17_STABLE/initdb.pot\n" +"X-Crowdin-File-ID: 1034\n" #: ../../../src/common/logging.c:276 #, c-format @@ -38,33 +37,48 @@ msgstr "деталі: " msgid "hint: " msgstr "підказка: " -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "невірний бінарний файл \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не вдалося прочитати бінарний файл \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не вдалося знайти абсолютний шлях \"%s\": %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 initdb.c:695 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не вдалося виконати команду \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не вдалося прочитати висновок команди \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "команда \"%s\" не повернула жодних даних" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() помилка: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 -#: initdb.c:349 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:353 #, c-format msgid "out of memory" msgstr "недостатньо пам'яті" @@ -80,35 +94,46 @@ msgstr "недостатньо пам'яті\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" -#: ../../common/file_utils.c:162 ../../common/pgfnames.c:48 -#: ../../common/rmtree.c:63 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +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 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не вдалося відкрити каталог \"%s\": %m" -#: ../../common/file_utils.c:196 ../../common/pgfnames.c:69 -#: ../../common/rmtree.c:104 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не вдалося прочитати каталог \"%s\": %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "не можливо відкрити файл \"%s\": %m" - -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не вдалося fsync файл \"%s\": %m" -#: ../../common/file_utils.c:379 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" @@ -148,12 +173,12 @@ msgstr "не вдалося перезапустити з обмеженим т msgid "could not get exit code from subprocess: error code %lu" msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" -#: ../../common/rmtree.c:95 +#: ../../common/rmtree.c:97 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не можливо видалити файл \"%s\": %m" -#: ../../common/rmtree.c:122 +#: ../../common/rmtree.c:124 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "не вдалося видалити каталог \"%s\": %m" @@ -202,6 +227,31 @@ msgstr "дочірній процес перервано через сигнал msgid "child process exited with unrecognized status %d" msgstr "дочірній процес завершився з невизнаним статусом %d" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "неприпустиме значення \"%s\" для параметра %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s має бути в діапазоні %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нерозпізнаний метод синхронізації: %s" + +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "аргумент командної оболонки містить символ нового рядка або повернення каретки: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "назва бази даних містить символ нового рядка або повернення каретки: \"%s\"\n" + #: ../../port/dirmod.c:287 #, c-format msgid "could not set junction for \"%s\": %s\n" @@ -212,842 +262,816 @@ msgstr "не вдалося встановити сполучення для \"% msgid "could not get junction for \"%s\": %s\n" msgstr "не вдалося встановити сполучення для \"%s\": %s\n" -#: initdb.c:618 initdb.c:1613 +#: initdb.c:627 initdb.c:1619 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не вдалося відкрити файл \"%s\" для читання: %m" -#: initdb.c:662 initdb.c:966 initdb.c:986 +#: initdb.c:671 initdb.c:975 initdb.c:995 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не вдалося відкрити файл \"%s\" для запису: %m" -#: initdb.c:666 initdb.c:969 initdb.c:988 +#: initdb.c:675 initdb.c:978 initdb.c:997 #, c-format msgid "could not write file \"%s\": %m" msgstr "не вдалося записати файл \"%s\": %m" -#: initdb.c:670 +#: initdb.c:679 #, c-format msgid "could not close file \"%s\": %m" msgstr "неможливо закрити файл \"%s\": %m" -#: initdb.c:686 -#, c-format -msgid "could not execute command \"%s\": %m" -msgstr "не вдалося виконати команду \"%s\": %m" - -#: initdb.c:704 +#: initdb.c:713 #, c-format msgid "removing data directory \"%s\"" msgstr "видалення даних з директорії \"%s\"" -#: initdb.c:706 +#: initdb.c:715 #, c-format msgid "failed to remove data directory" msgstr "не вдалося видалити дані директорії" -#: initdb.c:710 +#: initdb.c:719 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "видалення даних з директорії \"%s\"" -#: initdb.c:713 +#: initdb.c:722 #, c-format msgid "failed to remove contents of data directory" msgstr "не вдалося видалити дані директорії" -#: initdb.c:718 +#: initdb.c:727 #, c-format msgid "removing WAL directory \"%s\"" msgstr "видалення WAL директорії \"%s\"" -#: initdb.c:720 +#: initdb.c:729 #, c-format msgid "failed to remove WAL directory" msgstr "не вдалося видалити директорію WAL" -#: initdb.c:724 +#: initdb.c:733 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "видалення даних з директорії WAL \"%s\"" -#: initdb.c:726 +#: initdb.c:735 #, c-format msgid "failed to remove contents of WAL directory" msgstr "не вдалося видалити дані директорії WAL" -#: initdb.c:733 +#: initdb.c:742 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "директорія даних \"%s\" не видалена за запитом користувача" -#: initdb.c:737 +#: initdb.c:746 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "директорія WAL \"%s\" не видалена за запитом користувача" -#: initdb.c:755 +#: initdb.c:764 #, c-format msgid "cannot be run as root" msgstr "не може виконуватись як root" -#: initdb.c:756 +#: initdb.c:765 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." msgstr "Будь ласка, увійдіть (за допомогою, наприклад, \"su\") як (непривілейований) користувач, від імені якого буде запущено серверний процес." -#: initdb.c:788 +#: initdb.c:797 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" невірне ім'я серверного кодування" -#: initdb.c:932 +#: initdb.c:941 #, c-format msgid "file \"%s\" does not exist" msgstr "файл \"%s\" не існує" -#: initdb.c:933 initdb.c:938 initdb.c:945 +#: initdb.c:942 initdb.c:947 initdb.c:954 #, c-format msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." msgstr "Це означає, що ваша інсталяція пошкоджена або в параметрі -L задана неправильна директорія." -#: initdb.c:937 +#: initdb.c:946 #, c-format msgid "could not access file \"%s\": %m" msgstr "немає доступу до файлу \"%s\": %m" -#: initdb.c:944 +#: initdb.c:953 #, c-format msgid "file \"%s\" is not a regular file" msgstr "файл \"%s\" не є звичайним файлом" -#: initdb.c:1077 +#: initdb.c:1086 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "обирається реалізація динамічної спільної пам'яті ... " -#: initdb.c:1086 +#: initdb.c:1095 #, c-format -msgid "selecting default max_connections ... " -msgstr "" -"обирається значення max_connections ... \n" +msgid "selecting default \"max_connections\" ... " +msgstr "обирається значення \"max_connections\" за замовчуванням... \n" " " -#: initdb.c:1106 +#: initdb.c:1115 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "обирається значення shared_buffers... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "обирається значення \"shared_buffers\" за замовчуванням... " -#: initdb.c:1129 +#: initdb.c:1138 #, c-format msgid "selecting default time zone ... " msgstr "обирається часовий пояс за замовчуванням ... " -#: initdb.c:1206 +#: initdb.c:1217 msgid "creating configuration files ... " msgstr "створення конфігураційних файлів... " -#: initdb.c:1367 initdb.c:1381 initdb.c:1448 initdb.c:1459 +#: initdb.c:1370 initdb.c:1384 initdb.c:1451 initdb.c:1462 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "неможливо змінити дозволи \"%s\": %m" -#: initdb.c:1477 +#: initdb.c:1481 #, c-format msgid "running bootstrap script ... " msgstr "виконуємо сценарій ініціалізації ... " -#: initdb.c:1489 +#: initdb.c:1493 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "вхідний файл \"%s\" не належить PostgreSQL %s" -#: initdb.c:1491 +#: initdb.c:1495 #, c-format msgid "Specify the correct path using the option -L." msgstr "Вкажіть правильний шлях за допомогою параметру -L." -#: initdb.c:1591 +#: initdb.c:1597 msgid "Enter new superuser password: " msgstr "Введіть новий пароль для superuser: " -#: initdb.c:1592 +#: initdb.c:1598 msgid "Enter it again: " msgstr "Введіть знову: " -#: initdb.c:1595 +#: initdb.c:1601 #, c-format msgid "Passwords didn't match.\n" msgstr "Паролі не співпадають.\n" -#: initdb.c:1619 +#: initdb.c:1625 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "не вдалося прочитати пароль з файлу \"%s\": %m" -#: initdb.c:1622 +#: initdb.c:1628 #, c-format msgid "password file \"%s\" is empty" msgstr "файл з паролями \"%s\" є порожнім" -#: initdb.c:2034 +#: initdb.c:2040 #, c-format msgid "caught signal\n" msgstr "отримано сигнал\n" -#: initdb.c:2040 +#: initdb.c:2046 #, c-format msgid "could not write to child process: %s\n" msgstr "не вдалося написати у дочірній процес: %s\n" -#: initdb.c:2048 +#: initdb.c:2054 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2137 +#: initdb.c:2143 #, c-format msgid "setlocale() failed" msgstr "setlocale() завершився невдало" -#: initdb.c:2155 +#: initdb.c:2161 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "не вдалося відновити стару локаль \"%s\"" -#: initdb.c:2163 +#: initdb.c:2169 #, c-format msgid "invalid locale name \"%s\"" msgstr "не допустиме ім'я локалі \"%s\"" -#: initdb.c:2164 +#: initdb.c:2170 #, c-format msgid "If the locale name is specific to ICU, use --icu-locale." msgstr "Якщо ім'я локалі характерне для ICU, використовуйте --icu-locale." -#: initdb.c:2177 +#: initdb.c:2183 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "неприпустимі параметри локалі; перевірте LANG та LC_* змінні середовища" -#: initdb.c:2203 initdb.c:2227 +#: initdb.c:2209 initdb.c:2233 #, c-format msgid "encoding mismatch" msgstr "невідповідність кодування" -#: initdb.c:2204 +#: initdb.c:2210 #, c-format msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." msgstr "Вибране вами кодування (%s) і кодування, яке використовує обрана локаль (%s) не збігаються. Це призведе до неправильної поведінки у різних функціях обробки символьних рядків." -#: initdb.c:2209 initdb.c:2230 +#: initdb.c:2215 initdb.c:2236 #, c-format msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." msgstr "Перезапустіть %s і або не вказуйте кодування прямо або виберіть відповідну комбінацію." -#: initdb.c:2228 +#: initdb.c:2234 #, c-format msgid "The encoding you selected (%s) is not supported with the ICU provider." msgstr "Обране вами кодування (%s) не підтримується провайдером ICU." -#: initdb.c:2279 +#: initdb.c:2285 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "не вдалося перетворити локальну назву \"%s\" на мітку мови: %s" -#: initdb.c:2285 initdb.c:2337 initdb.c:2416 +#: initdb.c:2291 initdb.c:2343 initdb.c:2435 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не підтримується в цій збірці" -#: initdb.c:2308 +#: initdb.c:2314 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "не вдалося отримати мову з локалі \"%s\": %s" -#: initdb.c:2334 +#: initdb.c:2340 #, c-format msgid "locale \"%s\" has unknown language \"%s\"" msgstr "locale \"%s\" має невідому мову \"%s\"" -#: initdb.c:2400 +#: initdb.c:2401 +#, c-format +msgid "locale must be specified if provider is %s" +msgstr "потрібно вказати локаль для провайдера %s" + +#: initdb.c:2412 #, c-format -msgid "ICU locale must be specified" -msgstr "Необхідно вказати локаль ICU" +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "неприпустиме ім'я локалі \"%s\" для вбудованого провайдера" -#: initdb.c:2404 +#: initdb.c:2423 #, c-format msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" msgstr "Використання мітки мови \"%s\" для локалі ICU \"%s\".\n" -#: initdb.c:2427 +#: initdb.c:2446 #, c-format -msgid "" -"%s initializes a PostgreSQL database cluster.\n" -"\n" -msgstr "" -"%s ініціалізує кластер баз даних PostgreSQL.\n" -"\n" +msgid "%s initializes a PostgreSQL database cluster.\n\n" +msgstr "%s ініціалізує кластер баз даних PostgreSQL.\n\n" -#: initdb.c:2428 +#: initdb.c:2447 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: initdb.c:2429 +#: initdb.c:2448 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATADIR]\n" -#: initdb.c:2430 +#: initdb.c:2449 #, c-format -msgid "" -"\n" +msgid "\n" "Options:\n" -msgstr "" -"\n" +msgstr "\n" "Параметри:\n" -#: initdb.c:2431 +#: initdb.c:2450 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, -- auth=METHOD метод аутентифікації за замовчуванням для локальних підключень\n" -#: initdb.c:2432 +#: initdb.c:2451 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=METHOD метод аутентифікації за замовчуванням для локального TCP/IP підключення\n" -#: initdb.c:2433 +#: initdb.c:2452 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=METHOD метод аутентифікації за замовчуванням для локального під'єднання через сокет\n" -#: initdb.c:2434 +#: initdb.c:2453 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D - pgdata =] DATADIR розташування кластеру цієї бази даних\n" -#: initdb.c:2435 +#: initdb.c:2454 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=ENCODING встановлення кодування за замовчуванням для нової бази даних\n" -#: initdb.c:2436 +#: initdb.c:2455 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access дозволити читати/виконувати у каталозі даних для групи\n" -#: initdb.c:2437 +#: initdb.c:2456 #, c-format msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" msgstr " --icu-locale=LOCALE встановлює ідентифікатор мови ICU для нових баз даних\n" -#: initdb.c:2438 +#: initdb.c:2457 #, c-format msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" msgstr " --icu-rules=RULES встановити додаткові правила сортування в ICU для нових баз даних\n" -#: initdb.c:2439 +#: initdb.c:2458 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums використовувати контрольні суми сторінок\n" -#: initdb.c:2440 +#: initdb.c:2459 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE встановлює локаль за замовчуванням для нових баз даних\n" -#: initdb.c:2441 +#: initdb.c:2460 #, c-format -msgid "" -" --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" +msgid " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" " --lc-monetary=, --lc-numeric=, --lc-time=LOCALE\n" " set default locale in the respective category for\n" " new databases (default taken from environment)\n" -msgstr "" -" --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" +msgstr " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" " --lc-monetary=, --lc-numeric=, --lc-time=LOCALE\n" " встановлення локалі за замовчуванням для відповідної категорії в\n" " нових базах даних (замість значення з середовища)\n" -#: initdb.c:2445 +#: initdb.c:2464 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale еквівалентно --locale=C\n" -#: initdb.c:2446 +#: initdb.c:2465 #, c-format -msgid "" -" --locale-provider={libc|icu}\n" +msgid " --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr " --builtin-locale=LOCALE\n" +" встановити ім'я вбудованої локалі для нових баз даних\n" + +#: initdb.c:2467 +#, c-format +msgid " --locale-provider={builtin|libc|icu}\n" " set default locale provider for new databases\n" -msgstr "" -" --locale-provider={libc|icu}\n" +msgstr " --locale-provider={builtin|libc|icu}\n" " встановлює провайдер локалі за замовченням для нових баз даних\n" -#: initdb.c:2448 +#: initdb.c:2469 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FILE прочитати пароль для нового суперкористувача з файлу\n" -#: initdb.c:2449 +#: initdb.c:2470 #, c-format -msgid "" -" -T, --text-search-config=CFG\n" +msgid " -T, --text-search-config=CFG\n" " default text search configuration\n" msgstr " -T, --text-search-config=CFG конфігурація текстового пошуку за замовчуванням\n" -#: initdb.c:2451 +#: initdb.c:2472 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME ім'я суперкористувача бази даних\n" -#: initdb.c:2452 +#: initdb.c:2473 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt запитувати пароль нового суперкористувача\n" -#: initdb.c:2453 +#: initdb.c:2474 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR розташування журналу попереднього запису\n" -#: initdb.c:2454 +#: initdb.c:2475 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE розмір сегментів WAL у мегабайтах\n" -#: initdb.c:2455 +#: initdb.c:2476 #, c-format -msgid "" -"\n" +msgid "\n" "Less commonly used options:\n" -msgstr "" -"\n" +msgstr "\n" "Рідковживані параметри:\n" -#: initdb.c:2456 +#: initdb.c:2477 #, c-format msgid " -c, --set NAME=VALUE override default setting for server parameter\n" msgstr " -c, --set NAME=VALUE перевизначити параметр за замовчуванням для параметра сервера\n" -#: initdb.c:2457 +#: initdb.c:2478 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug генерувати багато налагоджувальних повідомлень\n" -#: initdb.c:2458 +#: initdb.c:2479 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" msgstr " --discard-caches встановити debug_discard_caches=1\n" -#: initdb.c:2459 +#: initdb.c:2480 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY розташування вхідних файлів\n" -#: initdb.c:2460 +#: initdb.c:2481 #, c-format msgid " -n, --no-clean do not clean up after errors\n" -msgstr "" -" -n, --no-clean не очищувати після помилок\n" +msgstr " -n, --no-clean не очищувати після помилок\n" " \n" -#: initdb.c:2461 +#: initdb.c:2482 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync не чекати на безпечний запис змін на диск\n" -#: initdb.c:2462 +#: initdb.c:2483 #, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions не друкувати інструкції для наступних кроків\n" -#: initdb.c:2463 +#: initdb.c:2484 #, c-format -msgid " -s, --show show internal settings\n" -msgstr " -s, --show показати внутрішні налаштування\n" +msgid " -s, --show show internal settings, then exit\n" +msgstr " -s, --show показати внутрішні налаштування і вийти\n" -#: initdb.c:2464 +#: initdb.c:2485 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD встановити метод синхронізації файлів на диск\n" + +#: initdb.c:2486 #, c-format msgid " -S, --sync-only only sync database files to disk, then exit\n" msgstr " -S, --sync-only лише синхронізувати файли бази даних на диск, потім вийти\n" -#: initdb.c:2465 +#: initdb.c:2487 #, c-format -msgid "" -"\n" +msgid "\n" "Other options:\n" -msgstr "" -"\n" +msgstr "\n" "Інші параметри:\n" -#: initdb.c:2466 +#: initdb.c:2488 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: initdb.c:2467 +#: initdb.c:2489 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку, потім вийти\n" -#: initdb.c:2468 +#: initdb.c:2490 #, c-format -msgid "" -"\n" +msgid "\n" "If the data directory is not specified, the environment variable PGDATA\n" "is used.\n" -msgstr "" -"\n" +msgstr "\n" "Якщо каталог даних не вказано, використовується змінна середовища PGDATA.\n" -#: initdb.c:2470 +#: initdb.c:2492 #, c-format -msgid "" -"\n" +msgid "\n" "Report bugs to <%s>.\n" -msgstr "" -"\n" +msgstr "\n" "Повідомляти про помилки на <%s>.\n" -#: initdb.c:2471 +#: initdb.c:2493 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: initdb.c:2499 +#: initdb.c:2517 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "неприпустимий спосіб автентифікації \"%s\" для \"%s\" підключення" -#: initdb.c:2513 +#: initdb.c:2531 #, c-format msgid "must specify a password for the superuser to enable password authentication" msgstr "необхідно вказати пароль суперкористувача для активації автентифікації за допомогою пароля" -#: initdb.c:2532 +#: initdb.c:2550 #, c-format msgid "no data directory specified" msgstr "каталог даних не вказано" -#: initdb.c:2533 +#: initdb.c:2551 #, c-format msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." msgstr "Ви повинні зазначити каталог, де будуть зберігатися дані цієї системи баз даних. Зробіть це або параметром -D, або змінною середовища PGDATA." -#: initdb.c:2550 +#: initdb.c:2568 #, c-format msgid "could not set environment" msgstr "не вдалося встановити середовище" -#: initdb.c:2568 +#: initdb.c:2586 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\"" -#: initdb.c:2571 +#: initdb.c:2589 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "програма \"%s\" знайдена для \"%s\", але має відмінну версію від %s" -#: initdb.c:2586 +#: initdb.c:2604 #, c-format msgid "input file location must be an absolute path" msgstr "розташування вхідного файлу має бути абсолютним шляхом" -#: initdb.c:2603 +#: initdb.c:2621 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Кластер бази даних буде ініціалізовано з локалізацією \"%s\".\n" -#: initdb.c:2606 +#: initdb.c:2624 #, c-format msgid "The database cluster will be initialized with this locale configuration:\n" msgstr "Кластер бази даних буде ініціалізовано з локалізацією:\n" -#: initdb.c:2607 +#: initdb.c:2625 #, c-format -msgid " provider: %s\n" -msgstr " постачальник: %s\n" +msgid " locale provider: %s\n" +msgstr " провайдер локалі: %s\n" -#: initdb.c:2609 +#: initdb.c:2627 #, c-format -msgid " ICU locale: %s\n" -msgstr " Локаль ICU: %s\n" +msgid " default collation: %s\n" +msgstr " стандартне сортування: %s\n" -#: initdb.c:2610 +#: initdb.c:2628 #, c-format -msgid "" -" LC_COLLATE: %s\n" +msgid " LC_COLLATE: %s\n" " LC_CTYPE: %s\n" " LC_MESSAGES: %s\n" " LC_MONETARY: %s\n" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -msgstr "" -" LC_COLLATE: %s\n" +msgstr " LC_COLLATE: %s\n" " LC_CTYPE: %s\n" " LC_MESSAGES: %s\n" " LC_MONETARY: %s\n" " LC_NUMERIC: %s\n" " LC_TIME: %s\n" -#: initdb.c:2640 +#: initdb.c:2658 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "не вдалося знайти відповідне кодування для локалі \"%s\"" -#: initdb.c:2642 +#: initdb.c:2660 #, c-format msgid "Rerun %s with the -E option." msgstr "Перезапустіть %s з параметром -E." -#: initdb.c:2643 initdb.c:3176 initdb.c:3284 initdb.c:3304 +#: initdb.c:2661 initdb.c:3204 initdb.c:3324 initdb.c:3344 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: initdb.c:2655 +#: initdb.c:2673 #, c-format -msgid "" -"Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" +msgid "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" "The default database encoding will be set to \"%s\" instead.\n" -msgstr "" -"Кодування \"%s\", що очікується локалізацією, не дозволено у якості кодування сервера.\n" +msgstr "Кодування \"%s\", що очікується локалізацією, не дозволено у якості кодування сервера.\n" "Замість нього буде встановлене кодування \"%s\" за замовчуванням.\n" -#: initdb.c:2660 +#: initdb.c:2678 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "локалізація \"%s\" потребує кодування \"%s\", що не підтримується" -#: initdb.c:2662 +#: initdb.c:2680 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding." msgstr "Кодування \"%s\" не допускається як кодування сервера." -#: initdb.c:2664 +#: initdb.c:2682 #, c-format msgid "Rerun %s with a different locale selection." msgstr "Перезапустіть %s з іншим вибором локалі." -#: initdb.c:2672 +#: initdb.c:2690 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Кодування бази даних за замовчуванням встановлено: \"%s\".\n" -#: initdb.c:2741 +#: initdb.c:2704 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "локаль вбудованого провайдера \"%s\" вимагає кодування \"%s\"" + +#: initdb.c:2766 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "не вдалося знайти відповідну конфігурацію текстового пошуку для локалі\"%s\"" -#: initdb.c:2752 +#: initdb.c:2777 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "відповідна конфігурація текстового пошуку для локалі \"%s\" невідома" -#: initdb.c:2757 +#: initdb.c:2782 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "вказана конфігурація текстового пошуку \"%s\" може не підходити локалі \"%s\"" -#: initdb.c:2762 +#: initdb.c:2787 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Конфігурація текстового пошуку за замовчуванням буде встановлена в \"%s\".\n" -#: initdb.c:2805 initdb.c:2876 +#: initdb.c:2830 initdb.c:2901 #, c-format msgid "creating directory %s ... " msgstr "створення каталогу %s... " -#: initdb.c:2810 initdb.c:2881 initdb.c:2929 initdb.c:2985 +#: initdb.c:2835 initdb.c:2906 initdb.c:2954 initdb.c:3011 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не вдалося створити каталог \"%s\": %m" -#: initdb.c:2819 initdb.c:2891 +#: initdb.c:2844 initdb.c:2916 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "виправляю дозволи для створеного каталогу %s... " -#: initdb.c:2824 initdb.c:2896 +#: initdb.c:2849 initdb.c:2921 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "не вдалося змінити дозволи каталогу \"%s\": %m" -#: initdb.c:2836 initdb.c:2908 +#: initdb.c:2861 initdb.c:2933 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" існує, але він не порожній" -#: initdb.c:2840 +#: initdb.c:2865 #, c-format msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." msgstr "Якщо ви хочете створити нову систему бази даних, видаліть або очистіть каталог \"%s\", або запустіть %s з аргументом, відмінним від \"%s\"." -#: initdb.c:2848 initdb.c:2918 initdb.c:3325 +#: initdb.c:2873 initdb.c:2943 initdb.c:3369 #, c-format msgid "could not access directory \"%s\": %m" msgstr "немає доступу до каталогу \"%s\": %m" -#: initdb.c:2869 +#: initdb.c:2894 #, c-format msgid "WAL directory location must be an absolute path" msgstr "розташування WAL каталогу має бути абсолютним шляхом" -#: initdb.c:2912 +#: initdb.c:2937 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." msgstr "Якщо ви хочете зберігати дані з WAL там, потрібно видалити або очистити директорію \"%s\"." -#: initdb.c:2922 +#: initdb.c:2947 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не вдалося створити символічне послання \"%s\": %m" -#: initdb.c:2941 +#: initdb.c:2966 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." msgstr "Він містить файл з крапкою або невидимий файл, можливо це точка під'єднання." -#: initdb.c:2943 +#: initdb.c:2968 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point." msgstr "Він містить каталог lost+found, можливо це точка під'єднання." -#: initdb.c:2945 +#: initdb.c:2970 #, c-format -msgid "" -"Using a mount point directly as the data directory is not recommended.\n" +msgid "Using a mount point directly as the data directory is not recommended.\n" "Create a subdirectory under the mount point." -msgstr "" -"Не рекомендується використовувати точку під'єднання у якості каталогу даних.\n" +msgstr "Не рекомендується використовувати точку під'єднання у якості каталогу даних.\n" "Створіть підкаталог і використайте його." -#: initdb.c:2971 +#: initdb.c:2997 #, c-format msgid "creating subdirectories ... " msgstr "створення підкаталогів... " -#: initdb.c:3014 +#: initdb.c:3040 msgid "performing post-bootstrap initialization ... " msgstr "виконується кінцева фаза ініціалізації ... " -#: initdb.c:3175 +#: initdb.c:3203 #, c-format msgid "-c %s requires a value" msgstr "-c %s необхідне значення" -#: initdb.c:3200 +#: initdb.c:3228 #, c-format msgid "Running in debug mode.\n" msgstr "Виконується у режимі налагодження.\n" -#: initdb.c:3204 +#: initdb.c:3232 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Виконується у режимі 'no-clean'. Помилки не будуть виправлені.\n" -#: initdb.c:3274 +#: initdb.c:3305 #, c-format msgid "unrecognized locale provider: %s" msgstr "нерозпізнаний постачальник локалів: %s" -#: initdb.c:3302 +#: initdb.c:3342 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: initdb.c:3309 initdb.c:3313 +#: initdb.c:3349 initdb.c:3353 initdb.c:3357 #, c-format msgid "%s cannot be specified unless locale provider \"%s\" is chosen" msgstr "%s не може бути вказано, поки не буде обрано постачальник локалі \"%s\"" -#: initdb.c:3327 initdb.c:3404 +#: initdb.c:3371 initdb.c:3434 msgid "syncing data to disk ... " msgstr "синхронізація даних з диском ... " -#: initdb.c:3335 +#: initdb.c:3379 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "неможливо вказати одночасно пароль і файл паролю" -#: initdb.c:3357 -#, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "аргумент --wal-segsize повинен бути числом" - -#: initdb.c:3359 +#: initdb.c:3390 #, c-format -msgid "argument of --wal-segsize must be a power of two between 1 and 1024" -msgstr "аргумент --wal-segsize повинен бути ступенем 2 між 1 і 1024" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "аргумент %s має бути ступенем двійки в діапазоні від 1 до 1024" -#: initdb.c:3373 +#: initdb.c:3403 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "неприпустиме ім'я суперкористувача \"%s\"; імена ролей не можуть починатися на \"pg_\"" -#: initdb.c:3375 +#: initdb.c:3405 #, c-format -msgid "" -"The files belonging to this database system will be owned by user \"%s\".\n" -"This user must also own the server process.\n" -"\n" -msgstr "" -"Файли цієї бази даних будуть належати користувачеві \"%s\".\n" -"Від імені цього користувача повинен запускатися процес сервера.\n" -"\n" +msgid "The files belonging to this database system will be owned by user \"%s\".\n" +"This user must also own the server process.\n\n" +msgstr "Файли цієї бази даних будуть належати користувачеві \"%s\".\n" +"Від імені цього користувача повинен запускатися процес сервера.\n\n" -#: initdb.c:3391 +#: initdb.c:3421 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Контроль цілісності сторінок даних увімкнено.\n" -#: initdb.c:3393 +#: initdb.c:3423 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Контроль цілісності сторінок даних вимкнено.\n" -#: initdb.c:3410 +#: initdb.c:3440 #, c-format -msgid "" -"\n" +msgid "\n" "Sync to disk skipped.\n" "The data directory might become corrupt if the operating system crashes.\n" -msgstr "" -"\n" +msgstr "\n" "Синхронізація з диском пропущена.\n" "Каталог з даними може бути пошкоджено під час аварійного завершення роботи операційної системи.\n" -#: initdb.c:3415 +#: initdb.c:3445 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "увімкнення автентифікації \"довіри\" для локальних підключень" -#: initdb.c:3416 +#: initdb.c:3446 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." msgstr "Ви можете змінити це, змінивши pg_hba.conf або скориставшись опцією -A, або --auth-local і --auth-host, наступного разу, коли ви запускаєте initdb." #. translator: This is a placeholder in a shell command. -#: initdb.c:3446 +#: initdb.c:3476 msgid "logfile" msgstr "logfile" -#: initdb.c:3448 +#: initdb.c:3478 #, c-format -msgid "" -"\n" -"Success. You can now start the database server using:\n" -"\n" -" %s\n" -"\n" -msgstr "" -"\n" -"Готово. Тепер ви можете запустити сервер бази даних командою:\n" -"\n" -" %s\n" -"\n" +msgid "\n" +"Success. You can now start the database server using:\n\n" +" %s\n\n" +msgstr "\n" +"Готово. Тепер ви можете запустити сервер бази даних командою:\n\n" +" %s\n\n" + diff --git a/src/bin/initdb/po/zh_CN.po b/src/bin/initdb/po/zh_CN.po index 9876679154c3c..5ffb5e045fe4c 100644 --- a/src/bin/initdb/po/zh_CN.po +++ b/src/bin/initdb/po/zh_CN.po @@ -4,111 +4,135 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL) 14\n" +"Project-Id-Version: initdb (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-08-14 05:47+0000\n" -"PO-Revision-Date: 2021-08-15 18:00+0800\n" -"Last-Translator: Jie Zhang \n" +"POT-Creation-Date: 2024-05-24 03:30+0000\n" +"PO-Revision-Date: 2024-05-25 16:46+0800\n" +"Last-Translator: Dianjin Wang \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.7\n" +"X-Generator: Poedit 3.4.4\n" -#: ../../../src/common/logging.c:259 -#, c-format -msgid "fatal: " -msgstr "致命的: " - -#: ../../../src/common/logging.c:266 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "错误: " -#: ../../../src/common/logging.c:273 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "警告: " -#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "详细信息: " + +#: ../../../src/common/logging.c:301 #, c-format -msgid "could not identify current directory: %m" -msgstr "无法确认当前目录: %m" +msgid "hint: " +msgstr "提示: " -#: ../../common/exec.c:155 +#: ../../common/exec.c:174 #, c-format -msgid "invalid binary \"%s\"" -msgstr "无效的二进制码 \"%s\"" +msgid "invalid binary \"%s\": %m" +msgstr "无效的二进制码 \"%s\": %m" -#: ../../common/exec.c:205 +#: ../../common/exec.c:217 #, c-format -msgid "could not read binary \"%s\"" -msgstr "无法读取二进制码 \"%s\"" +msgid "could not read binary \"%s\": %m" +msgstr "无法读取二进制码 \"%s\": %m" -#: ../../common/exec.c:213 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "未能找到一个 \"%s\" 来执行" -#: ../../common/exec.c:269 ../../common/exec.c:308 +#: ../../common/exec.c:252 #, c-format -msgid "could not change directory to \"%s\": %m" -msgstr "无法跳转到目录 \"%s\" 中: %m" +msgid "could not resolve path \"%s\" to absolute form: %m" +msgstr "无法将路径 \"%s\" 解析为绝对路径格式: %m" -#: ../../common/exec.c:286 +#: ../../common/exec.c:382 initdb.c:695 #, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "无法读取符号链接 \"%s\": %m" +msgid "could not execute command \"%s\": %m" +msgstr "无法执行命令 \"%s\": %m" -#: ../../common/exec.c:409 +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "无法读取命令 \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "命令 \"%s\" 未返回数据" + +#: ../../common/exec.c:424 +#, c-format msgid "%s() failed: %m" -msgstr "%s()失败: %m" +msgstr "%s() 失败: %m" -#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 -#: initdb.c:331 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: initdb.c:353 #, c-format msgid "out of memory" msgstr "内存不足" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format msgid "out of memory\n" msgstr "内存不足\n" -#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "无法复制空指针 (内部错误)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "无法打开文件 \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "无法为文件 \"%s\" 同步文件系统: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 #, c-format msgid "could not stat file \"%s\": %m" -msgstr "无法取文件 \"%s\" 的状态: %m" +msgstr "无法获取文件 \"%s\" 的状态: %m" -#: ../../common/file_utils.c:166 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +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 #, c-format msgid "could not open directory \"%s\": %m" msgstr "无法打开目录 \"%s\": %m" -#: ../../common/file_utils.c:200 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/pgfnames.c:69 ../../common/rmtree.c:106 #, c-format msgid "could not read directory \"%s\": %m" msgstr "无法读取目录 \"%s\": %m" -#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 -#: ../../common/file_utils.c:365 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "无法打开文件 \"%s\": %m" - -#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "无法 fsync 文件 \"%s\": %m" -#: ../../common/file_utils.c:383 +#: ../../common/file_utils.c:498 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "无法把文件 \"%s\" 重命名为 \"%s\": %m" @@ -118,60 +142,50 @@ msgstr "无法把文件 \"%s\" 重命名为 \"%s\": %m" msgid "could not close directory \"%s\": %m" msgstr "无法关闭目录 \"%s\": %m" -#: ../../common/restricted_token.c:64 -#, c-format -msgid "could not load library \"%s\": error code %lu" -msgstr "无法加载库 \"%s\": 错误码 %lu" - -#: ../../common/restricted_token.c:73 -#, c-format -msgid "cannot create restricted tokens on this platform: error code %lu" -msgstr "无法为该平台创建受限制的令牌:错误码 %lu" - -#: ../../common/restricted_token.c:82 +#: ../../common/restricted_token.c:60 #, c-format msgid "could not open process token: error code %lu" -msgstr "无法打开进程令牌 (token): 错误码 %lu" +msgstr "无法打开进程令牌: 错误码 %lu" -#: ../../common/restricted_token.c:97 +#: ../../common/restricted_token.c:74 #, c-format msgid "could not allocate SIDs: error code %lu" -msgstr "无法分配SID: 错误码 %lu" +msgstr "无法分配 SID: 错误码 %lu" -#: ../../common/restricted_token.c:119 +#: ../../common/restricted_token.c:94 #, c-format msgid "could not create restricted token: error code %lu" -msgstr "无法创建受限令牌: 错误码为 %lu" +msgstr "无法创建受限令牌: 错误码 %lu" -#: ../../common/restricted_token.c:140 +#: ../../common/restricted_token.c:115 #, c-format msgid "could not start process for command \"%s\": error code %lu" -msgstr "无法为命令 \"%s\"创建进程: 错误码 %lu" +msgstr "无法为命令 \"%s\" 创建进程: 错误码 %lu" -#: ../../common/restricted_token.c:178 +#: ../../common/restricted_token.c:153 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "无法使用受限令牌再次执行: 错误码 %lu" -#: ../../common/restricted_token.c:194 +#: ../../common/restricted_token.c:168 #, c-format msgid "could not get exit code from subprocess: error code %lu" -msgstr "无法从子进程得到退出码: 错误码 %lu" +msgstr "无法从子进程获取退出码: 错误码 %lu" -#: ../../common/rmtree.c:79 +#: ../../common/rmtree.c:97 #, c-format -msgid "could not stat file or directory \"%s\": %m" -msgstr "无法统计文件或目录\"%s\": %m" +msgid "could not remove file \"%s\": %m" +msgstr "无法删除文件 \"%s\": %m" -#: ../../common/rmtree.c:101 ../../common/rmtree.c:113 +#: ../../common/rmtree.c:124 #, c-format -msgid "could not remove file or directory \"%s\": %m" -msgstr "无法删除文件或目录 \"%s\": %m" +msgid "could not remove directory \"%s\": %m" +msgstr "无法删除目录 \"%s\": %m" #: ../../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" -msgstr "无法找到有效的用户ID %ld: %s" +msgstr "无法找到有效的用户 ID %ld: %s" #: ../../common/username.c:45 msgid "user does not exist" @@ -180,302 +194,350 @@ msgstr "用户不存在" #: ../../common/username.c:60 #, c-format msgid "user name lookup failure: error code %lu" -msgstr "用户名查找失败:错误代码%lu" +msgstr "用户名查找失败: 错误码 %lu" -#: ../../common/wait_error.c:45 +#: ../../common/wait_error.c:55 #, c-format msgid "command not executable" -msgstr "无法执行命令" +msgstr "命令无法执行" -#: ../../common/wait_error.c:49 +#: ../../common/wait_error.c:59 #, c-format msgid "command not found" msgstr "命令没有找到" -#: ../../common/wait_error.c:54 +#: ../../common/wait_error.c:64 #, c-format msgid "child process exited with exit code %d" msgstr "子进程已退出, 退出码为 %d" -#: ../../common/wait_error.c:62 +#: ../../common/wait_error.c:72 #, c-format msgid "child process was terminated by exception 0x%X" -msgstr "子进程被例外(exception) 0x%X 终止" +msgstr "子进程被异常 0x%X 终止" -#: ../../common/wait_error.c:66 +#: ../../common/wait_error.c:76 #, c-format msgid "child process was terminated by signal %d: %s" msgstr "子进程被信号 %d 终止: %s" -#: ../../common/wait_error.c:72 +#: ../../common/wait_error.c:82 #, c-format msgid "child process exited with unrecognized status %d" msgstr "子进程已退出, 未知状态 %d" -#: ../../port/dirmod.c:221 +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "\"%s\" 是选项 %s 的无效值" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s 必须位于 %d..%d 的范围内" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "无法识别同步方法: %s" + +#: ../../port/dirmod.c:287 #, c-format msgid "could not set junction for \"%s\": %s\n" -msgstr "无法为 \"%s\"设置连接: %s\n" +msgstr "无法为 \"%s\" 设置连接: %s\n" -#: ../../port/dirmod.c:298 +#: ../../port/dirmod.c:367 #, c-format msgid "could not get junction for \"%s\": %s\n" -msgstr "无法为\"%s\"得到连接: %s\n" +msgstr "无法为 \"%s\" 获取连接: %s\n" -#: initdb.c:464 initdb.c:1496 +#: initdb.c:627 initdb.c:1619 #, c-format msgid "could not open file \"%s\" for reading: %m" -msgstr "为了读取, 无法打开文件 \"%s\": %m" +msgstr "无法打开文件 \"%s\" 进行读取: %m" -#: initdb.c:508 initdb.c:830 initdb.c:856 +#: initdb.c:671 initdb.c:975 initdb.c:995 #, c-format msgid "could not open file \"%s\" for writing: %m" -msgstr "为了写入, 无法打开文件 \"%s\": %m" +msgstr "无法打开文件 \"%s\" 进行写入: %m" -#: initdb.c:515 initdb.c:522 initdb.c:836 initdb.c:861 +#: initdb.c:675 initdb.c:978 initdb.c:997 #, c-format msgid "could not write file \"%s\": %m" msgstr "无法写入文件 \"%s\": %m" -#: initdb.c:540 +#: initdb.c:679 #, c-format -msgid "could not execute command \"%s\": %m" -msgstr "无法执行命令 \"%s\": %m" +msgid "could not close file \"%s\": %m" +msgstr "无法关闭文件 \"%s\": %m" -#: initdb.c:558 +#: initdb.c:713 #, c-format msgid "removing data directory \"%s\"" -msgstr "删除数据目录 \"%s\"" +msgstr "正在删除数据目录 \"%s\"" -#: initdb.c:560 +#: initdb.c:715 #, c-format msgid "failed to remove data directory" msgstr "删除数据目录失败" -#: initdb.c:564 +#: initdb.c:719 #, c-format msgid "removing contents of data directory \"%s\"" -msgstr "删除数据目录 \"%s\" 的内容" +msgstr "正在删除数据目录 \"%s\" 的内容" -#: initdb.c:567 +#: initdb.c:722 #, c-format msgid "failed to remove contents of data directory" msgstr "删除数据目录内容失败" -#: initdb.c:572 +#: initdb.c:727 #, c-format msgid "removing WAL directory \"%s\"" -msgstr "正在删除WAL目录\"%s\"" +msgstr "正在删除 WAL 目录 \"%s\"" -#: initdb.c:574 +#: initdb.c:729 #, c-format msgid "failed to remove WAL directory" -msgstr "删除WAL目录失败" +msgstr "删除 WAL 目录失败" -#: initdb.c:578 +#: initdb.c:733 #, c-format msgid "removing contents of WAL directory \"%s\"" -msgstr "正在删除WAL目录 \"%s\" 的内容" +msgstr "正在删除 WAL 目录 \"%s\" 的内容" -#: initdb.c:580 +#: initdb.c:735 #, c-format msgid "failed to remove contents of WAL directory" -msgstr "删除WAL目录内容失败" +msgstr "删除 WAL 目录内容失败" -#: initdb.c:587 +#: initdb.c:742 #, c-format msgid "data directory \"%s\" not removed at user's request" -msgstr "在用户的要求下数据库目录 \"%s\" 不被删除" +msgstr "依照用户要求数据库目录 \"%s\" 不被删除" -#: initdb.c:591 +#: initdb.c:746 #, c-format msgid "WAL directory \"%s\" not removed at user's request" -msgstr "在用户的要求下WAL目录 \"%s\" 不被删除" +msgstr "依照用户要求 WAL 目录 \"%s\" 不被删除" -#: initdb.c:609 +#: initdb.c:764 #, c-format msgid "cannot be run as root" -msgstr "不能使用root用户运行" +msgstr "无法以 root 身份运行" -#: initdb.c:611 +#: initdb.c:765 #, c-format -msgid "" -"Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" -"own the server process.\n" -msgstr "" -"请以服务器进程所有者的用户 (无特权) 身份\n" -"登陆 (使用, e.g., \"su\").\n" +msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will own the server process." +msgstr "请以拥有服务器进程的 (无特权) 用户身份登录 (例如使用 \"su\")." -#: initdb.c:644 +#: initdb.c:797 #, c-format msgid "\"%s\" is not a valid server encoding name" -msgstr "\"%s\" 不是一个有效的服务器编码名字" +msgstr "\"%s\" 不是一个有效的服务器编码名称" -#: initdb.c:789 +#: initdb.c:941 #, c-format msgid "file \"%s\" does not exist" msgstr "文件 \"%s\" 不存在" -#: initdb.c:791 initdb.c:798 initdb.c:807 +#: initdb.c:942 initdb.c:947 initdb.c:954 #, c-format -msgid "" -"This might mean you have a corrupted installation or identified\n" -"the wrong directory with the invocation option -L.\n" -msgstr "" -"这意味着您的安装发生了错误或\n" -"使用 -L 选项指定了错误的路径.\n" +msgid "This might mean you have a corrupted installation or identified the wrong directory with the invocation option -L." +msgstr "这意味着你的安装发生了错误或使用 -L 选项指定了错误的目录." -#: initdb.c:796 +#: initdb.c:946 #, c-format msgid "could not access file \"%s\": %m" msgstr "无法访问文件 \"%s\": %m" -#: initdb.c:805 +#: initdb.c:953 #, c-format msgid "file \"%s\" is not a regular file" msgstr "文件 \"%s\" 不是常规文件" -#: initdb.c:950 +#: initdb.c:1086 #, c-format msgid "selecting dynamic shared memory implementation ... " -msgstr "选择动态共享内存实现 ......" +msgstr "正在选择动态共享内存实现 ... " -#: initdb.c:959 +#: initdb.c:1095 #, c-format -msgid "selecting default max_connections ... " -msgstr "选择默认最大联接数 (max_connections) ... " +msgid "selecting default \"max_connections\" ... " +msgstr "正在选择默认最大连接数 (max_connections) ... " -#: initdb.c:990 +#: initdb.c:1115 #, c-format -msgid "selecting default shared_buffers ... " -msgstr "选择默认共享缓冲区大小 (shared_buffers) ... " +msgid "selecting default \"shared_buffers\" ... " +msgstr "正在选择默认共享缓冲区 (shared_buffers) ... " -#: initdb.c:1024 +#: initdb.c:1138 +#, c-format msgid "selecting default time zone ... " -msgstr "选择默认时区 ... " +msgstr "正在选择默认时区 ... " -#: initdb.c:1058 +#: initdb.c:1217 msgid "creating configuration files ... " -msgstr "创建配置文件 ... " +msgstr "正在创建配置文件 ... " -#: initdb.c:1217 initdb.c:1236 initdb.c:1322 initdb.c:1337 +#: initdb.c:1370 initdb.c:1384 initdb.c:1451 initdb.c:1462 #, c-format msgid "could not change permissions of \"%s\": %m" -msgstr "无法改变\"%s\"的权限: %m" +msgstr "无法改变 \"%s\" 的权限: %m" -#: initdb.c:1359 +#: initdb.c:1481 #, c-format msgid "running bootstrap script ... " -msgstr "正在运行自举脚本 ..." +msgstr "正在运行启动脚本 ... " -#: initdb.c:1371 +#: initdb.c:1493 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" -msgstr "输入文件 \"%s\" 不属于PostgreSQL %s" +msgstr "输入文件 \"%s\" 不属于 PostgreSQL %s" -#: initdb.c:1374 +#: initdb.c:1495 #, c-format -msgid "Check your installation or specify the correct path using the option -L.\n" -msgstr "检查你的安装或使用 -L 选项指定正确的路径.\n" +msgid "Specify the correct path using the option -L." +msgstr "使用 -L 选项指定正确的路径." -#: initdb.c:1473 +#: initdb.c:1597 msgid "Enter new superuser password: " -msgstr "输入新的超级用户口令: " +msgstr "输入新的超级用户密码: " -#: initdb.c:1474 +#: initdb.c:1598 msgid "Enter it again: " msgstr "再输入一遍: " -#: initdb.c:1477 +#: initdb.c:1601 #, c-format msgid "Passwords didn't match.\n" -msgstr "口令不匹配.\n" +msgstr "密码不匹配.\n" -#: initdb.c:1504 +#: initdb.c:1625 #, c-format msgid "could not read password from file \"%s\": %m" -msgstr "无法从文件 \"%s\" 读取口令: %m" +msgstr "无法从文件 \"%s\" 读取密码: %m" -#: initdb.c:1507 +#: initdb.c:1628 #, c-format msgid "password file \"%s\" is empty" -msgstr "口令文件\"%s\"为空" +msgstr "密码文件 \"%s\" 为空" -#: initdb.c:1998 +#: initdb.c:2040 #, c-format msgid "caught signal\n" msgstr "捕获信号\n" -#: initdb.c:2004 +#: initdb.c:2046 #, c-format msgid "could not write to child process: %s\n" -msgstr "无法写到子进程: %s\n" +msgstr "无法写入子进程: %s\n" -#: initdb.c:2012 +#: initdb.c:2054 #, c-format msgid "ok\n" msgstr "成功\n" -#: initdb.c:2102 +#: initdb.c:2143 #, c-format msgid "setlocale() failed" -msgstr "setlocale()调用失败" +msgstr "setlocale() 调用失败" -#: initdb.c:2123 +#: initdb.c:2161 #, c-format msgid "failed to restore old locale \"%s\"" -msgstr "还原旧区域\"%s\"失败" +msgstr "恢复旧区域设置 \"%s\" 失败" -#: initdb.c:2132 +#: initdb.c:2169 #, c-format msgid "invalid locale name \"%s\"" -msgstr "无效的语言环境名称 \"%s\"" +msgstr "无效的区域设置名称 \"%s\"" -#: initdb.c:2143 +#: initdb.c:2170 +#, c-format +msgid "If the locale name is specific to ICU, use --icu-locale." +msgstr "如果将区域设置名称指定为 ICU, 请使用 --icu-locale." + +#: initdb.c:2183 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" -msgstr "无效的本地化设置; 请检查环境变量LANG和LC_*的值" +msgstr "无效的区域设置; 请检查环境变量 LANG 和 LC_* 的值" -#: initdb.c:2170 +#: initdb.c:2209 initdb.c:2233 #, c-format msgid "encoding mismatch" msgstr "编码不匹配" -#: initdb.c:2172 +#: initdb.c:2210 #, c-format -msgid "" -"The encoding you selected (%s) and the encoding that the\n" -"selected locale uses (%s) do not match. This would lead to\n" -"misbehavior in various character string processing functions.\n" -"Rerun %s and either do not specify an encoding explicitly,\n" -"or choose a matching combination.\n" -msgstr "" -"您选择的编码 (%s) 和所选择的语言环境使用的编码 (%s) 不匹配的.\n" -"这样将导致处理不同字符串的函数时产生错误.\n" -"要修复此问题, 重新运行 %s 并且不要明确指定编码, 或者先选择一个匹配\n" -"组合类型.\n" -"\n" +msgid "The encoding you selected (%s) and the encoding that the selected locale uses (%s) do not match. This would lead to misbehavior in various character string processing functions." +msgstr "你选择的编码 (%s) 和所选择的区域设置使用的编码 (%s) 不匹配. 这将导致不同字符串处理函数时产生错误." + +#: initdb.c:2215 initdb.c:2236 +#, c-format +msgid "Rerun %s and either do not specify an encoding explicitly, or choose a matching combination." +msgstr "请重新运行 %s, 且不要显示指定编码, 或选择一个匹配的组合." + +#: initdb.c:2234 +#, c-format +msgid "The encoding you selected (%s) is not supported with the ICU provider." +msgstr "你所选择的编码 (%s) 不受 ICU 支持程序支持." + +#: initdb.c:2285 +#, c-format +msgid "could not convert locale name \"%s\" to language tag: %s" +msgstr "无法将区域设置名称 \"%s\" 转换为语言标签: %s" + +#: initdb.c:2291 initdb.c:2343 initdb.c:2435 +#, c-format +msgid "ICU is not supported in this build" +msgstr "该版本不支持 ICU" + +#: initdb.c:2314 +#, c-format +msgid "could not get language from locale \"%s\": %s" +msgstr "无法从区域设置 \"%s\" 获取语言: %s" + +#: initdb.c:2340 +#, c-format +msgid "locale \"%s\" has unknown language \"%s\"" +msgstr "区域设置 \"%s\" 拥有未知的语言 \"%s\"" + +#: initdb.c:2401 +#, c-format +msgid "locale must be specified if provider is %s" +msgstr "如果支持程序为 %s 必须指定区域设置" + +#: initdb.c:2412 +#, c-format +msgid "invalid locale name \"%s\" for builtin provider" +msgstr "\"%s\" 是内置支持程序的无效区域设置名称" + +#: initdb.c:2423 +#, c-format +msgid "Using language tag \"%s\" for ICU locale \"%s\".\n" +msgstr "使用语言标签 \"%s\" 用于 ICU 区域设置 \"%s\".\n" -#: initdb.c:2244 +#: initdb.c:2446 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" "\n" msgstr "" -"%s 初始化一个 PostgreSQL 数据库簇.\n" +"%s 初始化一个 PostgreSQL 数据库集簇.\n" "\n" -#: initdb.c:2245 +#: initdb.c:2447 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: initdb.c:2246 +#: initdb.c:2448 #, c-format msgid " %s [OPTION]... [DATADIR]\n" -msgstr " %s [选项]... [DATADIR]\n" +msgstr " %s [选项]... [数据目录]\n" -#: initdb.c:2247 +#: initdb.c:2449 #, c-format msgid "" "\n" @@ -484,47 +546,57 @@ msgstr "" "\n" "选项:\n" -#: initdb.c:2248 +#: initdb.c:2450 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METHOD 本地连接的默认认证方法\n" -#: initdb.c:2249 +#: initdb.c:2451 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" -msgstr " --auth-host=METHOD 本地的TCP/IP连接的默认认证方法\n" +msgstr " --auth-host=METHOD 本地的 TCP/IP 连接的默认认证方法\n" -#: initdb.c:2250 +#: initdb.c:2452 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" -msgstr " --auth-local=METHOD 本地socket连接的默认认证方法\n" +msgstr " --auth-local=METHOD 本地 socket 连接的默认认证方法\n" -#: initdb.c:2251 +#: initdb.c:2453 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" -msgstr " -D, --pgdata=DATADIR 当前数据库簇的位置\n" +msgstr " [-D, --pgdata=]DATADIR 当前数据库集簇的位置\n" -#: initdb.c:2252 +#: initdb.c:2454 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=ENCODING 为新数据库设置默认编码\n" -#: initdb.c:2253 +#: initdb.c:2455 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access 允许组对数据目录进行读/执行\n" -#: initdb.c:2254 +#: initdb.c:2456 +#, c-format +msgid " --icu-locale=LOCALE set ICU locale ID for new databases\n" +msgstr " --icu-locale=LOCALE 为新数据库设置 ICU 区域环境 ID\n" + +#: initdb.c:2457 +#, c-format +msgid " --icu-rules=RULES set additional ICU collation rules for new databases\n" +msgstr " --icu-rules=RULES 为新数据库设置额外的 ICU 排序规则\n" + +#: initdb.c:2458 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums 使用数据页产生效验和\n" -#: initdb.c:2255 +#: initdb.c:2459 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" -msgstr " --locale=LOCALE 为新数据库设置默认语言环境\n" +msgstr " --locale=LOCALE 为新数据库设置默认区域环境\n" -#: initdb.c:2256 +#: initdb.c:2460 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -534,97 +606,126 @@ msgid "" msgstr "" " --lc-collate, --lc-ctype, --lc-messages=LOCALE\n" " --lc-monetary, --lc-numeric, --lc-time=LOCALE\n" -" 为新的数据库簇在各自的目录中分别\n" -" 设定缺省语言环境(默认使用环境变量)\n" +" 为新的数据库集簇在各自的目录中分别\n" +" 设置默认区域环境(默认使用环境变量)\n" -#: initdb.c:2260 +#: initdb.c:2464 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale 等同于 --locale=C\n" -#: initdb.c:2261 +#: initdb.c:2465 +#, c-format +msgid "" +" --builtin-locale=LOCALE\n" +" set builtin locale name for new databases\n" +msgstr "" +" —builtin-locale=LOCALE\n" +" 为新数据库设置内置区域环境名称\n" + +#: initdb.c:2467 +#, c-format +msgid "" +" --locale-provider={builtin|libc|icu}\n" +" set default locale provider for new databases\n" +msgstr "" +" —locale-provider={builtin|libc|icu}\n" +" 为新数据库设置默认的区域环境支持程序\n" + +#: initdb.c:2469 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" -msgstr " --pwfile=FILE 对于新的超级用户从文件读取口令\n" +msgstr " --pwfile=FILE 为新的超级用户从文件读取密码\n" -#: initdb.c:2262 +#: initdb.c:2470 #, c-format msgid "" " -T, --text-search-config=CFG\n" " default text search configuration\n" msgstr "" " -T, --text-search-config=CFG\n" -" 缺省的文本搜索配置\n" +" 默认的文本搜索配置\n" -#: initdb.c:2264 +#: initdb.c:2472 #, c-format msgid " -U, --username=NAME database superuser name\n" -msgstr " -U, --username=NAME 数据库超级用户名\n" +msgstr " -U, --username=NAME 数据库超级用户名称\n" -#: initdb.c:2265 +#: initdb.c:2473 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" -msgstr " -W, --pwprompt 对于新的超级用户提示输入口令\n" +msgstr " -W, --pwprompt 对于新的超级用户提示输入密码\n" -#: initdb.c:2266 +#: initdb.c:2474 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR 预写日志目录的位置\n" -#: initdb.c:2267 +#: initdb.c:2475 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" -msgstr " --wal-segsize=SIZE WAL段的大小(兆字节)\n" +msgstr " --wal-segsize=SIZE WAL 段的大小(兆字节)\n" -#: initdb.c:2268 +#: initdb.c:2476 #, c-format msgid "" "\n" "Less commonly used options:\n" msgstr "" "\n" -"非普通使用选项:\n" +"不常用选项:\n" -#: initdb.c:2269 +#: initdb.c:2477 +#, c-format +msgid " -c, --set NAME=VALUE override default setting for server parameter\n" +msgstr " -c, --set NAME=VALUE 覆盖默认的服务器参数设置\n" + +#: initdb.c:2478 #, c-format msgid " -d, --debug generate lots of debugging output\n" -msgstr " -d, --debug 产生大量的除错信息\n" +msgstr " -d, --debug 产生大量的调试信息\n" -#: initdb.c:2270 +#: initdb.c:2479 #, c-format msgid " --discard-caches set debug_discard_caches=1\n" -msgstr " --discard-caches 设置debug_discard_caches=1\n" +msgstr " --discard-caches 设置 debug_discard_caches=1\n" -#: initdb.c:2271 +#: initdb.c:2480 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY 输入文件的位置\n" -#: initdb.c:2272 +#: initdb.c:2481 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean 出错后不清理\n" -#: initdb.c:2273 +#: initdb.c:2482 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" -msgstr " -N, --no-sync 不用等待变化安全写入磁盘\n" +msgstr " -N, --no-sync 不用等待变更安全写入磁盘\n" -#: initdb.c:2274 +#: initdb.c:2483 +#, c-format msgid " --no-instructions do not print instructions for next steps\n" msgstr " --no-instructions 不要打印后续步骤的说明\n" -#: initdb.c:2275 +#: initdb.c:2484 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show 显示内部设置\n" -#: initdb.c:2276 +#: initdb.c:2485 #, c-format -msgid " -S, --sync-only only sync data directory\n" -msgstr " -S, --sync-only 只同步数据目录\n" +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD 设置同步文件到磁盘的方法\n" -#: initdb.c:2277 +#: initdb.c:2486 +#, c-format +msgid " -S, --sync-only only sync database files to disk, then exit\n" +msgstr " -S, --sync-only 只同步数据库文件到磁盘, 然后退出\n" + +#: initdb.c:2487 #, c-format msgid "" "\n" @@ -633,17 +734,17 @@ msgstr "" "\n" "其它选项:\n" -#: initdb.c:2278 +#: initdb.c:2488 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 输出版本信息, 然后退出\n" -#: initdb.c:2279 +#: initdb.c:2489 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 显示此帮助, 然后退出\n" -#: initdb.c:2280 +#: initdb.c:2490 #, c-format msgid "" "\n" @@ -652,117 +753,115 @@ msgid "" msgstr "" "\n" "如果没有指定数据目录, 将使用环境变量 PGDATA\n" +"\n" -#: initdb.c:2282 +#: initdb.c:2492 #, c-format msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" "\n" -"臭虫报告至<%s>.\n" +"报告缺陷: <%s>.\n" -#: initdb.c:2283 +#: initdb.c:2493 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 主页: <%s>\n" -#: initdb.c:2311 +#: initdb.c:2517 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" -msgstr "无效认证方法 \"%s\" 用于 \"%s\" 连接" +msgstr "\"%s\" 是用于 \"%s\" 连接的无效认证方法" -#: initdb.c:2327 +#: initdb.c:2531 +#, c-format msgid "must specify a password for the superuser to enable password authentication" -msgstr "为了启动密码认证, 你需要为超级用户指定一个口令" +msgstr "为了启用密码认证, 必须为超级用户指定一个密码" -#: initdb.c:2348 +#: initdb.c:2550 #, c-format msgid "no data directory specified" msgstr "没有指定数据目录" -#: initdb.c:2350 +#: initdb.c:2551 #, c-format -msgid "" -"You must identify the directory where the data for this database system\n" -"will reside. Do this with either the invocation option -D or the\n" -"environment variable PGDATA.\n" -msgstr "" -"您必须确认此数据库系统的数据所在目录\n" -"存在. 使用 -D 选项或者\n" -"环境变量 PGDATA.\n" +msgid "You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA." +msgstr "你必须确认此数据库系统的数据所在目录存在. 可使用 -D 选项或者环境变量 PGDATA 操作." -#: initdb.c:2368 +#: initdb.c:2568 +#, c-format msgid "could not set environment" msgstr "无法设置环境" -#: initdb.c:2388 +#: initdb.c:2586 #, c-format -msgid "" -"The program \"%s\" is needed by %s but was not found in the\n" -"same directory as \"%s\".\n" -"Check your installation." -msgstr "" -"%2$s需要程序\"%1$s\"\n" -"但在与\"%3$s\"相同的目录中找不到该程序.\n" -"检查您的安装." +msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" +msgstr "%2$s 需要程序 \"%1$s\", 但在与 \"%3$s\" 相同的目录中找不到该程序" -#: initdb.c:2393 +#: initdb.c:2589 #, c-format -msgid "" -"The program \"%s\" was found by \"%s\"\n" -"but was not the same version as %s.\n" -"Check your installation." -msgstr "" -"程序\"%s\"是由\"%s\"找到的\n" -"但与%s的版本不同.\n" -"检查您的安装." +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "程序 \"%s\" 已由 \"%s\" 找到, 但与 %s 版本不一致" -#: initdb.c:2412 +#: initdb.c:2604 #, c-format msgid "input file location must be an absolute path" msgstr "输入文件位置必须为绝对路径" -#: initdb.c:2429 +#: initdb.c:2621 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" -msgstr "数据库簇将使用本地化语言 \"%s\"进行初始化.\n" +msgstr "数据库集簇将以区域环境设置 \"%s\" 进行初始化.\n" + +#: initdb.c:2624 +#, c-format +msgid "The database cluster will be initialized with this locale configuration:\n" +msgstr "数据库集簇将以该区域环境配置进行初始化:\n" + +#: initdb.c:2625 +#, c-format +msgid " locale provider: %s\n" +msgstr " 区域环境支持程序: %s\n" + +#: initdb.c:2627 +#, c-format +msgid " default collation: %s\n" +msgstr " 默认排序: %s\n" -#: initdb.c:2432 +#: initdb.c:2628 #, c-format msgid "" -"The database cluster will be initialized with locales\n" -" COLLATE: %s\n" -" CTYPE: %s\n" -" MESSAGES: %s\n" -" MONETARY: %s\n" -" NUMERIC: %s\n" -" TIME: %s\n" +" LC_COLLATE: %s\n" +" LC_CTYPE: %s\n" +" LC_MESSAGES: %s\n" +" LC_MONETARY: %s\n" +" LC_NUMERIC: %s\n" +" LC_TIME: %s\n" msgstr "" -"数据库簇将带有一下 locales 初始化\n" -" COLLATE: %s\n" -" CTYPE: %s\n" -" MESSAGES: %s\n" -" MONETARY: %s\n" -" NUMERIC: %s\n" -" TIME: %s\n" +" LC_COLLATE: %s\n" +" LC_CTYPE: %s\n" +" LC_MESSAGES: %s\n" +" LC_MONETARY: %s\n" +" LC_NUMERIC: %s\n" +" LC_TIME: %s\n" -#: initdb.c:2456 +#: initdb.c:2658 #, c-format msgid "could not find suitable encoding for locale \"%s\"" -msgstr "无法为locale(本地化语言)\"%s\"找到合适的编码" +msgstr "无法为区域环境 \"%s\" 找到合适的编码" -#: initdb.c:2458 +#: initdb.c:2660 #, c-format -msgid "Rerun %s with the -E option.\n" -msgstr "带 -E 选项重新运行 %s.\n" +msgid "Rerun %s with the -E option." +msgstr "请带 -E 选项重新运行 %s." -#: initdb.c:2459 initdb.c:3099 initdb.c:3120 +#: initdb.c:2661 initdb.c:3204 initdb.c:3324 initdb.c:3344 #, c-format -msgid "Try \"%s --help\" for more information.\n" -msgstr "请用 \"%s --help\" 获取更多的信息.\n" +msgid "Try \"%s --help\" for more information." +msgstr "请用 \"%s --help\" 获取更多信息." -#: initdb.c:2472 +#: initdb.c:2673 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -771,173 +870,179 @@ msgstr "" "本地化隐含的编码 \"%s\" 不允许作为服务器端的编码.\n" "默认的数据库编码将采用 \"%s\" 作为代替.\n" -#: initdb.c:2477 +#: initdb.c:2678 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" -msgstr "本地化语言环境 \"%s\"要求使用不支持的编码\"%s\"" +msgstr "区域环境 \"%s\" 要求使用不支持的编码 \"%s\"" -#: initdb.c:2480 +#: initdb.c:2680 #, c-format -msgid "" -"Encoding \"%s\" is not allowed as a server-side encoding.\n" -"Rerun %s with a different locale selection.\n" -msgstr "" -"不允许将编码\"%s\"作为服务器端编码.\n" -"使用一个不同的本地化语言环境重新运行%s.\n" +msgid "Encoding \"%s\" is not allowed as a server-side encoding." +msgstr "编码 \"%s\" 不允许作为服务器端编码." -#: initdb.c:2489 +#: initdb.c:2682 +#, c-format +msgid "Rerun %s with a different locale selection." +msgstr "请使用一个不同的区域环境选项重新运行 %s." + +#: initdb.c:2690 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "默认的数据库编码已经相应的设置为 \"%s\".\n" -#: initdb.c:2555 +#: initdb.c:2704 +#, c-format +msgid "builtin provider locale \"%s\" requires encoding \"%s\"" +msgstr "内置的支持程序区域环境 \"%s\" 要求编码 \"%s\"" + +#: initdb.c:2766 +#, c-format msgid "could not find suitable text search configuration for locale \"%s\"" -msgstr "无法为本地化语言环境\"%s\"找到合适的文本搜索配置" +msgstr "无法为区域环境 \"%s\" 找到合适的文本搜索配置" -#: initdb.c:2566 +#: initdb.c:2777 +#, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" -msgstr "对于本地化语言环境\"%s\"合适的文本搜索配置未知" +msgstr "区域环境 \"%s\" 的合适文本搜索配置未知" -#: initdb.c:2571 +#: initdb.c:2782 +#, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" -msgstr "所指定的文本搜索配置\"%s\"可能与本地语言环境\"%s\"不匹配" +msgstr "所指定的文本搜索配置 \"%s\" 可能与区域环境 \"%s\" 不匹配" -#: initdb.c:2576 +#: initdb.c:2787 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" -msgstr "缺省的文本搜索配置将会被设置到\"%s\"\n" +msgstr "默认的文本搜索配置将被设为 \"%s\".\n" -#: initdb.c:2620 initdb.c:2702 +#: initdb.c:2830 initdb.c:2901 #, c-format msgid "creating directory %s ... " -msgstr "创建目录 %s ... " +msgstr "正在创建目录 %s ... " -#: initdb.c:2626 initdb.c:2708 initdb.c:2773 initdb.c:2835 +#: initdb.c:2835 initdb.c:2906 initdb.c:2954 initdb.c:3011 #, c-format msgid "could not create directory \"%s\": %m" msgstr "无法创建目录 \"%s\": %m" -#: initdb.c:2637 initdb.c:2720 +#: initdb.c:2844 initdb.c:2916 #, c-format msgid "fixing permissions on existing directory %s ... " -msgstr "修复已存在目录 %s 的权限 ... " +msgstr "正在修复已存在目录 %s 的权限 ... " -#: initdb.c:2643 initdb.c:2726 +#: initdb.c:2849 initdb.c:2921 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "无法改变目录 \"%s\" 的权限: %m" -#: initdb.c:2657 initdb.c:2740 +#: initdb.c:2861 initdb.c:2933 #, c-format msgid "directory \"%s\" exists but is not empty" -msgstr "目录\"%s\"已存在,但不是空的" +msgstr "目录 \"%s\" 已存在,但不为空" -#: initdb.c:2662 +#: initdb.c:2865 #, c-format -msgid "" -"If you want to create a new database system, either remove or empty\n" -"the directory \"%s\" or run %s\n" -"with an argument other than \"%s\".\n" -msgstr "" -"如果您想创建一个新的数据库系统, 请删除或清空\n" -"目录 \"%s\" 或者运行带参数的 %s\n" -"而不是 \"%s\".\n" +msgid "If you want to create a new database system, either remove or empty the directory \"%s\" or run %s with an argument other than \"%s\"." +msgstr "如果你想创建一个新的数据库系统, 请删除或清空目录 \"%s\" 或者运行带有参数的 %s 而不是 \"%s\"." -#: initdb.c:2670 initdb.c:2752 initdb.c:3135 +#: initdb.c:2873 initdb.c:2943 initdb.c:3369 #, c-format msgid "could not access directory \"%s\": %m" msgstr "无法访问目录 \"%s\": %m" -#: initdb.c:2693 +#: initdb.c:2894 #, c-format msgid "WAL directory location must be an absolute path" -msgstr "WAL目录的位置必须为绝对路径" +msgstr "WAL 目录位置必须为绝对路径" -#: initdb.c:2745 +#: initdb.c:2937 #, c-format -msgid "" -"If you want to store the WAL there, either remove or empty the directory\n" -"\"%s\".\n" -msgstr "如果您要存储WAL日志,需要删除或者清空目录\"%s\".\n" +msgid "If you want to store the WAL there, either remove or empty the directory \"%s\"." +msgstr "如果你要存储 WAL 日志,需要删除或者清空目录 \"%s\"." -#: initdb.c:2759 +#: initdb.c:2947 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "无法创建符号链接 \"%s\": %m" -#: initdb.c:2764 +#: initdb.c:2966 #, c-format -msgid "symlinks are not supported on this platform" -msgstr "在这个平台上不支持符号链接" +msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point." +msgstr "它包含一个以点号开头/不可见的文件,可能因为它是一个挂载点." -#: initdb.c:2788 +#: initdb.c:2968 #, c-format -msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" -msgstr "它包含一个不可见的带固定点的文件,可能因为它是一个装载点。\n" +msgid "It contains a lost+found directory, perhaps due to it being a mount point." +msgstr "它包含名为 lost+found 的目录,可能因为它是一个挂载点." -#: initdb.c:2791 -#, c-format -msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" -msgstr "它包含名为lost+found的目录,可能因为它是一个加载点.\n" - -#: initdb.c:2794 +#: initdb.c:2970 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" -"Create a subdirectory under the mount point.\n" +"Create a subdirectory under the mount point." msgstr "" -"不推荐将加载点作为数据目录.\n" -"通常在加载点下边创建一个子目录.\n" +"不推荐直接将挂载点用作数据目录.\n" +"通常在挂载点下边创建一个子目录." -#: initdb.c:2820 +#: initdb.c:2997 #, c-format msgid "creating subdirectories ... " msgstr "正在创建子目录 ... " -#: initdb.c:2866 +#: initdb.c:3040 msgid "performing post-bootstrap initialization ... " -msgstr "正在执行自举后初始化 ..." +msgstr "正在执行启动脚本后续初始化 ... " + +#: initdb.c:3203 +#, c-format +msgid "-c %s requires a value" +msgstr "-c %s 需要一个值" -#: initdb.c:3029 +#: initdb.c:3228 #, c-format msgid "Running in debug mode.\n" -msgstr "运行在除错模式中. \n" +msgstr "正在以调试模式运行. \n" -#: initdb.c:3033 +#: initdb.c:3232 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" -msgstr "运行在 no-clean 模式中. 错误将不被清理.\n" +msgstr "正在以 no-clean 模式运行. 错误将不被清理.\n" + +#: initdb.c:3305 +#, c-format +msgid "unrecognized locale provider: %s" +msgstr "无法识别的区域环境支持程序: %s" -#: initdb.c:3118 +#: initdb.c:3342 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "命令行参数太多 (第一个是 \"%s\")" -#: initdb.c:3139 initdb.c:3228 +#: initdb.c:3349 initdb.c:3353 initdb.c:3357 +#, c-format +msgid "%s cannot be specified unless locale provider \"%s\" is chosen" +msgstr "无法指定 %s, 除非选择区域环境支持程序 \"%s\"" + +#: initdb.c:3371 initdb.c:3434 msgid "syncing data to disk ... " -msgstr "同步数据到磁盘..." +msgstr "正在同步数据到磁盘 ... " -#: initdb.c:3148 +#: initdb.c:3379 #, c-format msgid "password prompt and password file cannot be specified together" -msgstr "口令提示和口令文件不能同时都指定" +msgstr "密码提示和密码文件不能同时都指定" -#: initdb.c:3173 +#: initdb.c:3390 #, c-format -msgid "argument of --wal-segsize must be a number" -msgstr "--wal-segsize的参数必须是一个数字" +msgid "argument of %s must be a power of two between 1 and 1024" +msgstr "%s 的参数必须是 2 的幂次方(在 1 - 1024 之间)" -#: initdb.c:3178 -#, c-format -msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" -msgstr "--wal-segsize的参数必须是2的幂次方(在1和1024之间)" - -#: initdb.c:3195 +#: initdb.c:3403 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" -msgstr "超级用户名\"%s\"是不允许的;角色名称不能以\"pg_\"开始" +msgstr "超级用户名 \"%s\" 不被允许;角色名称不能以 \"pg_\" 开始" -#: initdb.c:3199 +#: initdb.c:3405 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -946,18 +1051,19 @@ msgid "" msgstr "" "属于此数据库系统的文件宿主为用户 \"%s\".\n" "此用户也必须为服务器进程的宿主.\n" +"\n" -#: initdb.c:3215 +#: initdb.c:3421 #, c-format msgid "Data page checksums are enabled.\n" msgstr "允许生成数据页校验和.\n" -#: initdb.c:3217 +#: initdb.c:3423 #, c-format msgid "Data page checksums are disabled.\n" msgstr "禁止为数据页生成校验和.\n" -#: initdb.c:3234 +#: initdb.c:3440 #, c-format msgid "" "\n" @@ -968,26 +1074,22 @@ msgstr "" "跳过同步到磁盘操作.\n" "如果操作系统宕机,数据目录可能会毁坏.\n" -#: initdb.c:3239 +#: initdb.c:3445 #, c-format msgid "enabling \"trust\" authentication for local connections" -msgstr "为本地连接启用\"trust\"身份验证" +msgstr "为本地连接启用 \"trust\" 身份验证" -#: initdb.c:3240 +#: initdb.c:3446 #, c-format -msgid "" -"You can change this by editing pg_hba.conf or using the option -A, or\n" -"--auth-local and --auth-host, the next time you run initdb.\n" -msgstr "" -"你可以通过编辑 pg_hba.conf 更改或你下次\n" -"执行 initdb 时使用 -A或者--auth-local和--auth-host选项.\n" +msgid "You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb." +msgstr "你可以通过编辑 pg_hba.conf 或下次运行 initdb 时使用 -A 或者 --auth-local 和 --auth-host 选项进行更改." #. translator: This is a placeholder in a shell command. -#: initdb.c:3270 +#: initdb.c:3476 msgid "logfile" -msgstr "日志文件" +msgstr "logfile" -#: initdb.c:3272 +#: initdb.c:3478 #, c-format msgid "" "\n" @@ -997,8 +1099,79 @@ msgid "" "\n" msgstr "" "\n" -"成功。您现在可以用下面的命令开启数据库服务器:\n" +"成功。你现在可以用下面的命令开启数据库服务器:\n" "\n" " %s\n" "\n" +#, c-format +#~ msgid "" +#~ "The program \"%s\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "%2$s需要程序\"%1$s\"\n" +#~ "但在与\"%3$s\"相同的目录中找不到该程序.\n" +#~ "检查您的安装." + +#, c-format +#~ msgid "" +#~ "The program \"%s\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "程序\"%s\"是由\"%s\"找到的\n" +#~ "但与%s的版本不同.\n" +#~ "检查您的安装." + +#, c-format +#~ msgid "Try \"%s --help\" for more information.\n" +#~ msgstr "请用 \"%s --help\" 获取更多的信息.\n" + +#, c-format +#~ msgid "argument of --wal-segsize must be a number" +#~ msgstr "--wal-segsize 的参数必须是一个数字" + +#, c-format +#~ msgid "cannot create restricted tokens on this platform: error code %lu" +#~ msgstr "无法为该平台创建受限令牌: 错误码 %lu" + +#, c-format +#~ msgid "could not change directory to \"%s\": %m" +#~ msgstr "无法跳转到目录 \"%s\" 中: %m" + +#, c-format +#~ msgid "could not identify current directory: %m" +#~ msgstr "无法确认当前目录: %m" + +#, c-format +#~ msgid "could not load library \"%s\": error code %lu" +#~ msgstr "无法加载库 \"%s\": 错误码 %lu" + +#, c-format +#~ msgid "could not read binary \"%s\"" +#~ msgstr "无法读取二进制码 \"%s\"" + +#, c-format +#~ msgid "could not read symbolic link \"%s\": %m" +#~ msgstr "无法读取符号链接 \"%s\": %m" + +#, c-format +#~ msgid "could not remove file or directory \"%s\": %m" +#~ msgstr "无法删除文件或目录 \"%s\": %m" + +#, c-format +#~ msgid "could not stat file or directory \"%s\": %m" +#~ msgstr "无法获取文件或目录 \"%s\" 状态: %m" + +#, c-format +#~ msgid "fatal: " +#~ msgstr "致命的: " + +#, c-format +#~ msgid "invalid binary \"%s\"" +#~ msgstr "无效的二进制码 \"%s\"" + +#, c-format +#~ msgid "symlinks are not supported on this platform" +#~ msgstr "在这个平台上不支持符号链接" diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl index 15dd10ce40a31..b7ef7ed8d06b7 100644 --- a/src/bin/initdb/t/001_initdb.pl +++ b/src/bin/initdb/t/001_initdb.pl @@ -76,7 +76,8 @@ 'checksums are enabled in control file'); command_ok([ 'initdb', '--sync-only', $datadir ], 'sync only'); -command_ok([ 'initdb', '--sync-only', '--no-sync-data-files', $datadir ], '--no-sync-data-files'); +command_ok([ 'initdb', '--sync-only', '--no-sync-data-files', $datadir ], + '--no-sync-data-files'); command_fails([ 'initdb', $datadir ], 'existing data directory'); if ($supports_syncfs) diff --git a/src/bin/pg_amcheck/po/de.po b/src/bin/pg_amcheck/po/de.po index 428a8b3262e0c..5dd5992747206 100644 --- a/src/bin/pg_amcheck/po/de.po +++ b/src/bin/pg_amcheck/po/de.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_amcheck (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-16 10:22+0000\n" -"PO-Revision-Date: 2024-06-16 19:05+0200\n" +"POT-Creation-Date: 2024-08-28 04:23+0000\n" +"PO-Revision-Date: 2024-08-28 07:51+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -249,8 +249,8 @@ msgstr "in Datenbank »%s«: verwende amcheck Version »%s« in Schema »%s«" #: pg_amcheck.c:624 #, c-format -msgid "--checkunique option is not supported by amcheck version \"%s\"" -msgstr "Option --checkunique wird von amcheck Version »%s« nicht unterstützt" +msgid "option %s is not supported by amcheck version %s" +msgstr "Option %s wird von amcheck Version %s nicht unterstützt" #: pg_amcheck.c:650 #, c-format diff --git a/src/bin/pg_amcheck/po/es.po b/src/bin/pg_amcheck/po/es.po index ed8cb6e5503c0..7dc5272b7b76d 100644 --- a/src/bin/pg_amcheck/po/es.po +++ b/src/bin/pg_amcheck/po/es.po @@ -7,10 +7,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_amcheck (PostgreSQL) 16\n" +"Project-Id-Version: pg_amcheck (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-09-24 23:20+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2024-11-16 05:22+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -39,11 +39,78 @@ msgstr "detalle: " msgid "hint: " msgstr "consejo: " -#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "no se pudo hacer stat al archivo «%s»: %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "esta instalación no soporta el método de sync «%s»" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "no se pudo leer el directorio «%s»: %m" + +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "no se pudo buscar el ID de usuario efectivo %ld: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "el usuario no existe" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" + +#: ../../fe_utils/cancel.c:186 ../../fe_utils/cancel.c:235 msgid "Cancel request sent\n" msgstr "Petición de cancelación enviada\n" -#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +#: ../../fe_utils/cancel.c:187 ../../fe_utils/cancel.c:236 msgid "Could not send cancel request: " msgstr "No se pudo enviar la petición de cancelación: " @@ -52,7 +119,7 @@ msgstr "No se pudo enviar la petición de cancelación: " msgid "could not connect to database %s: out of memory" msgstr "no se pudo conectar a la base de datos %s: memoria agotada" -#: ../../fe_utils/connect_utils.c:117 +#: ../../fe_utils/connect_utils.c:116 #, c-format msgid "%s" msgstr "%s" @@ -67,174 +134,214 @@ msgstr "el valor «%s» no es válido para la opción %s" msgid "%s must be in range %d..%d" msgstr "%s debe estar en el rango %d..%d" +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "método de sync no reconocido: %s" + +#: ../../fe_utils/parallel_slot.c:317 +#, c-format +msgid "too many jobs for this platform: %d" +msgstr "demasiados procesos para esta plataforma: %d" + +#: ../../fe_utils/parallel_slot.c:326 +#, c-format +msgid "socket file descriptor out of range for select(): %d" +msgstr "descriptor de archivo para socket fuera de rango para select(): %d" + +#: ../../fe_utils/parallel_slot.c:328 +#, c-format +msgid "Try fewer jobs." +msgstr "Intente con menos trabajos." + +#: ../../fe_utils/parallel_slot.c:553 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "falló el procesamiento de la base de datos «%s»: %s" + #: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 -#: pg_amcheck.c:1647 pg_amcheck.c:2092 +#: pg_amcheck.c:1693 pg_amcheck.c:2138 #, c-format msgid "query failed: %s" msgstr "la consulta falló: %s" #: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 -#: pg_amcheck.c:571 pg_amcheck.c:1102 pg_amcheck.c:1648 pg_amcheck.c:2093 +#: pg_amcheck.c:578 pg_amcheck.c:1147 pg_amcheck.c:1694 pg_amcheck.c:2139 #, c-format msgid "Query was: %s" msgstr "La consulta era: %s" -#: pg_amcheck.c:399 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "el argumento de la orden de shell contiene un salto de línea o retorno de carro: «%s»\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "el nombre de base de datos contiene un salto de línea o retorno de carro: «%s»\n" + +#: pg_amcheck.c:403 #, c-format msgid "invalid argument for option %s" msgstr "argumento no válido para la opción %s" -#: pg_amcheck.c:405 +#: pg_amcheck.c:409 #, c-format msgid "invalid start block" msgstr "bloque de inicio no válido" -#: pg_amcheck.c:407 +#: pg_amcheck.c:411 #, c-format msgid "start block out of bounds" msgstr "bloque de inicio fuera de rango" -#: pg_amcheck.c:414 +#: pg_amcheck.c:418 #, c-format msgid "invalid end block" msgstr "bloque final no válido" -#: pg_amcheck.c:416 +#: pg_amcheck.c:420 #, c-format msgid "end block out of bounds" msgstr "bloque final fuera de rango" -#: pg_amcheck.c:439 pg_amcheck.c:461 +#: pg_amcheck.c:446 pg_amcheck.c:468 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: pg_amcheck.c:445 +#: pg_amcheck.c:452 #, c-format msgid "end block precedes start block" msgstr "bloque final precede al bloque de inicio" -#: pg_amcheck.c:459 +#: pg_amcheck.c:466 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_amcheck.c:479 +#: pg_amcheck.c:486 #, c-format msgid "cannot specify a database name with --all" msgstr "no se puede especificar un nombre de base de datos al usar --all" -#: pg_amcheck.c:485 +#: pg_amcheck.c:492 #, c-format msgid "cannot specify both a database name and database patterns" msgstr "no se puede especificar al mismo tiempo un nombre de base de datos junto con patrones de bases de datos" -#: pg_amcheck.c:513 +#: pg_amcheck.c:520 #, c-format msgid "no databases to check" msgstr "no hay bases de datos para revisar" -#: pg_amcheck.c:569 +#: pg_amcheck.c:576 #, c-format msgid "database \"%s\": %s" msgstr "base de datos «%s»: %s" -#: pg_amcheck.c:580 +#: pg_amcheck.c:587 #, c-format msgid "skipping database \"%s\": amcheck is not installed" msgstr "omitiendo la base de datos «%s»: amcheck no está instalado" -#: pg_amcheck.c:588 +#: pg_amcheck.c:595 #, c-format msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" msgstr "en base de datos «%s»: usando amcheck versión «%s» en esquema «%s»" -#: pg_amcheck.c:610 +#: pg_amcheck.c:624 +#, c-format +msgid "option %s is not supported by amcheck version %s" +msgstr "la opción %s no está soportada por la versión %s de amcheck" + +#: pg_amcheck.c:650 #, c-format msgid "no heap tables to check matching \"%s\"" msgstr "no hay tablas heap para revisar que coincidan con «%s»" -#: pg_amcheck.c:613 +#: pg_amcheck.c:653 #, c-format msgid "no btree indexes to check matching \"%s\"" msgstr "no hay índices btree para revisar que coincidan con «%s»" -#: pg_amcheck.c:616 +#: pg_amcheck.c:656 #, c-format msgid "no relations to check in schemas matching \"%s\"" msgstr "no hay relaciones para revisar en esquemas que coincidan con «%s»" -#: pg_amcheck.c:619 +#: pg_amcheck.c:659 #, c-format msgid "no relations to check matching \"%s\"" msgstr "no hay relaciones para revisar que coincidan con «%s»" -#: pg_amcheck.c:647 +#: pg_amcheck.c:687 #, c-format msgid "no relations to check" msgstr "no hay relaciones para revisar" -#: pg_amcheck.c:730 +#: pg_amcheck.c:770 #, c-format msgid "checking heap table \"%s.%s.%s\"" msgstr "revisando tabla heap «%s.%s.%s»" -#: pg_amcheck.c:746 +#: pg_amcheck.c:786 #, c-format msgid "checking btree index \"%s.%s.%s\"" msgstr "revisando índice btree «%s.%s.%s»" -#: pg_amcheck.c:893 +#: pg_amcheck.c:937 #, c-format msgid "error sending command to database \"%s\": %s" msgstr "error al enviar orden a la base de datos «%s»: %s" -#: pg_amcheck.c:896 +#: pg_amcheck.c:940 #, c-format msgid "Command was: %s" msgstr "La orden era: % s" -#: pg_amcheck.c:1015 +#: pg_amcheck.c:1060 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" msgstr "tabla heap «%s.%s.%s», bloque %s, posición %s, atributo %s:\n" -#: pg_amcheck.c:1022 +#: pg_amcheck.c:1067 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" msgstr "tabla heap «%s.%s.%s», bloque %s, posición %s:\n" -#: pg_amcheck.c:1028 +#: pg_amcheck.c:1073 #, c-format msgid "heap table \"%s.%s.%s\", block %s:\n" msgstr "tabla heap «%s.%s.%s», bloque %s:\n" -#: pg_amcheck.c:1033 pg_amcheck.c:1044 +#: pg_amcheck.c:1078 pg_amcheck.c:1089 #, c-format msgid "heap table \"%s.%s.%s\":\n" msgstr "tabla heap «%s.%s.%s»:\n" -#: pg_amcheck.c:1048 pg_amcheck.c:1117 +#: pg_amcheck.c:1093 pg_amcheck.c:1162 #, c-format msgid "query was: %s\n" msgstr "la consulta era: %s\n" -#: pg_amcheck.c:1099 +#: pg_amcheck.c:1144 #, c-format msgid "btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d" msgstr "índice btree «%s.%s.%s»: la función de comprobación de btree devolvió un número inesperado de registros: %d" -#: pg_amcheck.c:1103 +#: pg_amcheck.c:1148 #, c-format msgid "Are %s's and amcheck's versions compatible?" msgstr "¿Son compatibles la versión de %s con la de amcheck?" -#: pg_amcheck.c:1113 +#: pg_amcheck.c:1158 #, c-format msgid "btree index \"%s.%s.%s\":\n" msgstr "índice btree «%s.%s.%s»:\n" -#: pg_amcheck.c:1138 +#: pg_amcheck.c:1183 #, c-format msgid "" "%s checks objects in a PostgreSQL database for corruption.\n" @@ -243,17 +350,17 @@ msgstr "" "%s busca corrupción en objetos de una base de datos PostgreSQL.\n" "\n" -#: pg_amcheck.c:1139 +#: pg_amcheck.c:1184 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_amcheck.c:1140 +#: pg_amcheck.c:1185 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [BASE-DE-DATOS]\n" -#: pg_amcheck.c:1141 +#: pg_amcheck.c:1186 #, c-format msgid "" "\n" @@ -262,77 +369,77 @@ msgstr "" "\n" "Opciones de objetivo:\n" -#: pg_amcheck.c:1142 +#: pg_amcheck.c:1187 #, c-format msgid " -a, --all check all databases\n" msgstr " -a, --all revisar todas las bases de datos\n" -#: pg_amcheck.c:1143 +#: pg_amcheck.c:1188 #, c-format msgid " -d, --database=PATTERN check matching database(s)\n" msgstr " -d, --database=PATRÓN revisar la(s) base(s) de datos que coincida(n)\n" -#: pg_amcheck.c:1144 +#: pg_amcheck.c:1189 #, c-format msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr " -D, --exclude-database=PATRÓN NO revisar la(s) base(s) de datos que coincida(n)\n" -#: pg_amcheck.c:1145 +#: pg_amcheck.c:1190 #, c-format msgid " -i, --index=PATTERN check matching index(es)\n" msgstr " -i, --index=PATRÓN revisar el(los) índice(s) que coincida(n)\n" -#: pg_amcheck.c:1146 +#: pg_amcheck.c:1191 #, c-format msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" msgstr " -I, --exclude-index=PATRÓN NO revisar el(los) índice(s) que coincida(n)\n" -#: pg_amcheck.c:1147 +#: pg_amcheck.c:1192 #, c-format msgid " -r, --relation=PATTERN check matching relation(s)\n" msgstr " -r, --relation=PATRÓN revisar la(s) relación(es) que coincida(n)\n" -#: pg_amcheck.c:1148 +#: pg_amcheck.c:1193 #, c-format msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" msgstr " -R, --exclude-relation=PATRÓN NO revisar la(s) relación(es) que coincida(n)\n" -#: pg_amcheck.c:1149 +#: pg_amcheck.c:1194 #, c-format msgid " -s, --schema=PATTERN check matching schema(s)\n" msgstr " -s, --schema=PATRÓN revisar el(los) esquema(s) que coincida(n)\n" -#: pg_amcheck.c:1150 +#: pg_amcheck.c:1195 #, c-format msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" msgstr " -S, --exclude-schema=PATRÓN NO revisar el(los) esquema(s) que coincida(n)\n" -#: pg_amcheck.c:1151 +#: pg_amcheck.c:1196 #, c-format msgid " -t, --table=PATTERN check matching table(s)\n" msgstr " -t, --table=PATRÓN revisar la(s) tabla(s) que coincida(n)\n" -#: pg_amcheck.c:1152 +#: pg_amcheck.c:1197 #, c-format msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" msgstr " -T, --exclude-table=PATRÓN NO revisar la(s) tabla(s) que coincida(n)\n" -#: pg_amcheck.c:1153 +#: pg_amcheck.c:1198 #, c-format msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" msgstr " --no-dependent-indexes NO expandir la lista de relaciones para incluir índices\n" -#: pg_amcheck.c:1154 +#: pg_amcheck.c:1199 #, c-format msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" msgstr " --no-dependent-toast NO expandir lista de relaciones para incluir tablas TOAST\n" -#: pg_amcheck.c:1155 +#: pg_amcheck.c:1200 #, c-format msgid " --no-strict-names do NOT require patterns to match objects\n" msgstr " --no-strict-names NO requerir que los patrones coincidan con los objetos\n" -#: pg_amcheck.c:1156 +#: pg_amcheck.c:1201 #, c-format msgid "" "\n" @@ -341,32 +448,32 @@ msgstr "" "\n" "Opciones para revisión de tabla:\n" -#: pg_amcheck.c:1157 +#: pg_amcheck.c:1202 #, c-format msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" msgstr " --exclude-toast-pointers NO seguir punteros TOAST de la relación\n" -#: pg_amcheck.c:1158 +#: pg_amcheck.c:1203 #, c-format msgid " --on-error-stop stop checking at end of first corrupt page\n" msgstr " --on-error-stop detener la revisión al final de la primera página corrupta\n" -#: pg_amcheck.c:1159 +#: pg_amcheck.c:1204 #, c-format msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" msgstr " --skip=OPTION NO revisar bloques «all-frozen» u «all-visible»\n" -#: pg_amcheck.c:1160 +#: pg_amcheck.c:1205 #, c-format msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" msgstr " --startblock=BLOQUE empezar la revisión de la(s) tabla(s) en el número de bloque especificado\n" -#: pg_amcheck.c:1161 +#: pg_amcheck.c:1206 #, c-format msgid " --endblock=BLOCK check table(s) only up to the given block number\n" msgstr " --endblock=BLOQUE solo revisar la(s) tabla(s) hasta el número de bloque especificado\n" -#: pg_amcheck.c:1162 +#: pg_amcheck.c:1207 #, c-format msgid "" "\n" @@ -375,22 +482,27 @@ msgstr "" "\n" "Opciones para revisión de índices B-tree:\n" -#: pg_amcheck.c:1163 +#: pg_amcheck.c:1208 +#, c-format +msgid " --checkunique check unique constraint if index is unique\n" +msgstr " --checkunique verificar si restricción de unicidad se cumple en índice\n" + +#: pg_amcheck.c:1209 #, c-format msgid " --heapallindexed check that all heap tuples are found within indexes\n" msgstr " --heapallindexed revisar que todas las tuplas heap se encuentren en los índices\n" -#: pg_amcheck.c:1164 +#: pg_amcheck.c:1210 #, c-format msgid " --parent-check check index parent/child relationships\n" msgstr " --parent-check revisar relaciones padre/hijo de índice\n" -#: pg_amcheck.c:1165 +#: pg_amcheck.c:1211 #, c-format msgid " --rootdescend search from root page to refind tuples\n" msgstr " --rootdescend buscar desde la página raíz para volver a encontrar tuplas\n" -#: pg_amcheck.c:1166 +#: pg_amcheck.c:1212 #, c-format msgid "" "\n" @@ -399,37 +511,37 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_amcheck.c:1167 +#: pg_amcheck.c:1213 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n" -#: pg_amcheck.c:1168 +#: pg_amcheck.c:1214 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PUERTO puerto del servidor de base de datos\n" -#: pg_amcheck.c:1169 +#: pg_amcheck.c:1215 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" -#: pg_amcheck.c:1170 +#: pg_amcheck.c:1216 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: pg_amcheck.c:1171 +#: pg_amcheck.c:1217 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password forzar la petición de contraseña\n" -#: pg_amcheck.c:1172 +#: pg_amcheck.c:1218 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n" -#: pg_amcheck.c:1173 +#: pg_amcheck.c:1219 #, c-format msgid "" "\n" @@ -438,42 +550,42 @@ msgstr "" "\n" "Otras opciones:\n" -#: pg_amcheck.c:1174 +#: pg_amcheck.c:1220 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n" -#: pg_amcheck.c:1175 +#: pg_amcheck.c:1221 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes hacia el servidor\n" -#: pg_amcheck.c:1176 +#: pg_amcheck.c:1222 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostrar información de progreso\n" -#: pg_amcheck.c:1177 +#: pg_amcheck.c:1223 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose desplegar varios mensajes informativos\n" -#: pg_amcheck.c:1178 +#: pg_amcheck.c:1224 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: pg_amcheck.c:1179 +#: pg_amcheck.c:1225 #, c-format msgid " --install-missing install missing extensions\n" msgstr " --install-missing instalar extensiones faltantes\n" -#: pg_amcheck.c:1180 +#: pg_amcheck.c:1226 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_amcheck.c:1182 +#: pg_amcheck.c:1228 #, c-format msgid "" "\n" @@ -482,52 +594,52 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_amcheck.c:1183 +#: pg_amcheck.c:1229 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_amcheck.c:1236 +#: pg_amcheck.c:1282 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" msgstr "%*s/%s relaciones (%d%%), %*s/%s páginas (%d%%) %*s" -#: pg_amcheck.c:1247 +#: pg_amcheck.c:1293 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" msgstr "%*s/%s relaciones (%d%%), %*s/%s páginas (%d%%), (%s%-*.*s)" -#: pg_amcheck.c:1262 +#: pg_amcheck.c:1308 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" msgstr "%*s/%s relaciones (%d%%), %*s/%s páginas (%d%%)" -#: pg_amcheck.c:1321 pg_amcheck.c:1354 +#: pg_amcheck.c:1367 pg_amcheck.c:1400 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: pg_amcheck.c:1399 +#: pg_amcheck.c:1445 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "el nombre de relación no es válido (demasiados puntos): %s" -#: pg_amcheck.c:1552 pg_amcheck.c:1691 +#: pg_amcheck.c:1598 pg_amcheck.c:1737 #, c-format msgid "including database \"%s\"" msgstr "incluyendo base de datos «%s»" -#: pg_amcheck.c:1673 +#: pg_amcheck.c:1719 #, c-format msgid "internal error: received unexpected database pattern_id %d" msgstr "error interno: se recibió pattern_id de base de datos inesperado (%d)" -#: pg_amcheck.c:1675 +#: pg_amcheck.c:1721 #, c-format msgid "no connectable databases to check matching \"%s\"" msgstr "no hay bases de datos a las que se pueda conectar que coincidan con «%s»" -#: pg_amcheck.c:2133 +#: pg_amcheck.c:2179 #, c-format msgid "internal error: received unexpected relation pattern_id %d" msgstr "error interno: se recibió pattern_id de relación inesperado (%d)" diff --git a/src/bin/pg_amcheck/po/fr.po b/src/bin/pg_amcheck/po/fr.po index 9fc553f23b70c..14157b066b0b5 100644 --- a/src/bin/pg_amcheck/po/fr.po +++ b/src/bin/pg_amcheck/po/fr.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-05-14 10:19+0000\n" -"PO-Revision-Date: 2022-05-14 17:15+0200\n" +"POT-Creation-Date: 2024-08-29 17:53+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -19,33 +19,100 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:277 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:284 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "attention : " -#: ../../../src/common/logging.c:295 +#: ../../../src/common/logging.c:294 #, c-format msgid "detail: " msgstr "détail : " -#: ../../../src/common/logging.c:302 +#: ../../../src/common/logging.c:301 #, c-format msgid "hint: " msgstr "astuce : " -#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "mémoire épuisée\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" + +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le système de fichiers pour le fichier « %s » : %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "n'a pas pu tester le fichier « %s » : %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "cette construction ne supporte pas la méthode de synchronisation %s" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "n'a pas pu lire le répertoire « %s » : %m" + +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "l'utilisateur n'existe pas" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "échec de la recherche du nom d'utilisateur : code d'erreur %lu" + +#: ../../fe_utils/cancel.c:186 ../../fe_utils/cancel.c:235 msgid "Cancel request sent\n" msgstr "Requête d'annulation envoyée\n" -#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +#: ../../fe_utils/cancel.c:187 ../../fe_utils/cancel.c:236 msgid "Could not send cancel request: " msgstr "N'a pas pu envoyer la requête d'annulation : " @@ -54,7 +121,7 @@ msgstr "N'a pas pu envoyer la requête d'annulation : " msgid "could not connect to database %s: out of memory" msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire" -#: ../../fe_utils/connect_utils.c:117 +#: ../../fe_utils/connect_utils.c:116 #, c-format msgid "%s" msgstr "%s" @@ -69,174 +136,214 @@ msgstr "valeur « %s » invalide pour l'option %s" msgid "%s must be in range %d..%d" msgstr "%s doit être compris entre %d et %d" +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "méthode de synchronisation non reconnu : %s" + +#: ../../fe_utils/parallel_slot.c:317 +#, c-format +msgid "too many jobs for this platform: %d" +msgstr "trop de jobs pour cette plateforme : %d" + +#: ../../fe_utils/parallel_slot.c:326 +#, c-format +msgid "socket file descriptor out of range for select(): %d" +msgstr "descripteur de fichier socket hors d'échelle pour select() : %d" + +#: ../../fe_utils/parallel_slot.c:328 +#, c-format +msgid "Try fewer jobs." +msgstr "Essayez moins de jobs." + +#: ../../fe_utils/parallel_slot.c:553 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "le traitement de la base de données « %s » a échoué : %s" + #: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 -#: pg_amcheck.c:1645 pg_amcheck.c:2090 +#: pg_amcheck.c:1693 pg_amcheck.c:2138 #, c-format msgid "query failed: %s" msgstr "échec de la requête : %s" #: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 -#: pg_amcheck.c:571 pg_amcheck.c:1100 pg_amcheck.c:1646 pg_amcheck.c:2091 +#: pg_amcheck.c:578 pg_amcheck.c:1147 pg_amcheck.c:1694 pg_amcheck.c:2139 #, c-format msgid "Query was: %s" msgstr "La requête était : %s" -#: pg_amcheck.c:399 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "l'argument de la commande shell contient un retour à la ligne ou un retour chariot : « %s »\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "le nom de la base contient un retour à la ligne ou un retour chariot : « %s »\n" + +#: pg_amcheck.c:403 #, c-format msgid "invalid argument for option %s" msgstr "argument invalide pour l'option %s" -#: pg_amcheck.c:405 +#: pg_amcheck.c:409 #, c-format msgid "invalid start block" msgstr "bloc de début invalide" -#: pg_amcheck.c:407 +#: pg_amcheck.c:411 #, c-format msgid "start block out of bounds" msgstr "bloc de début hors des limites" -#: pg_amcheck.c:414 +#: pg_amcheck.c:418 #, c-format msgid "invalid end block" msgstr "bloc de fin invalide" -#: pg_amcheck.c:416 +#: pg_amcheck.c:420 #, c-format msgid "end block out of bounds" msgstr "bloc de fin hors des limites" -#: pg_amcheck.c:439 pg_amcheck.c:461 +#: pg_amcheck.c:446 pg_amcheck.c:468 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: pg_amcheck.c:445 +#: pg_amcheck.c:452 #, c-format msgid "end block precedes start block" msgstr "le bloc de fin précède le bloc de début" -#: pg_amcheck.c:459 +#: pg_amcheck.c:466 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_amcheck.c:479 +#: pg_amcheck.c:486 #, c-format msgid "cannot specify a database name with --all" msgstr "ne peut pas spécifier un nom de base de données avec --all" -#: pg_amcheck.c:485 +#: pg_amcheck.c:492 #, c-format msgid "cannot specify both a database name and database patterns" msgstr "ne peut pas spécifier à la fois le nom d'une base de données et des motifs de noms de base" -#: pg_amcheck.c:513 +#: pg_amcheck.c:520 #, c-format msgid "no databases to check" msgstr "aucune base de données à vérifier" -#: pg_amcheck.c:569 +#: pg_amcheck.c:576 #, c-format msgid "database \"%s\": %s" msgstr "base de données « %s » : %s" -#: pg_amcheck.c:580 +#: pg_amcheck.c:587 #, c-format msgid "skipping database \"%s\": amcheck is not installed" msgstr "ignore la base « %s » : amcheck n'est pas installé" -#: pg_amcheck.c:588 +#: pg_amcheck.c:595 #, c-format msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" msgstr "dans la base de données « %s » : utilisation de la version « %s » d'amcheck dans le schéma « %s »" -#: pg_amcheck.c:610 +#: pg_amcheck.c:624 +#, c-format +msgid "option %s is not supported by amcheck version %s" +msgstr "l'option %s n'est pas acceptée par la version « %s » de amcheck" + +#: pg_amcheck.c:650 #, c-format msgid "no heap tables to check matching \"%s\"" msgstr "aucune table heap à vérifier correspondant à « %s »" -#: pg_amcheck.c:613 +#: pg_amcheck.c:653 #, c-format msgid "no btree indexes to check matching \"%s\"" msgstr "aucun index btree à vérifier correspondant à « %s »" -#: pg_amcheck.c:616 +#: pg_amcheck.c:656 #, c-format msgid "no relations to check in schemas matching \"%s\"" msgstr "aucune relation à vérifier dans les schémas correspondant à « %s »" -#: pg_amcheck.c:619 +#: pg_amcheck.c:659 #, c-format msgid "no relations to check matching \"%s\"" msgstr "aucune relation à vérifier correspondant à « %s »" -#: pg_amcheck.c:647 +#: pg_amcheck.c:687 #, c-format msgid "no relations to check" msgstr "aucune relation à vérifier" -#: pg_amcheck.c:730 +#: pg_amcheck.c:770 #, c-format msgid "checking heap table \"%s.%s.%s\"" msgstr "vérification de la table heap « %s %s.%s »" -#: pg_amcheck.c:746 +#: pg_amcheck.c:786 #, c-format msgid "checking btree index \"%s.%s.%s\"" msgstr "vérification de l'index btree « %s %s.%s »" -#: pg_amcheck.c:893 +#: pg_amcheck.c:937 #, c-format msgid "error sending command to database \"%s\": %s" msgstr "erreur de l'envoi d'une commande à la base de données « %s » : %s" -#: pg_amcheck.c:896 +#: pg_amcheck.c:940 #, c-format msgid "Command was: %s" msgstr "La commande était : %s" -#: pg_amcheck.c:1013 +#: pg_amcheck.c:1060 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" msgstr "table heap « %s.%s.%s », bloc %s, décalage %s, attribut %s :\n" -#: pg_amcheck.c:1020 +#: pg_amcheck.c:1067 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" msgstr "table heap « %s.%s.%s », bloc %s, décalage %s :\n" -#: pg_amcheck.c:1026 +#: pg_amcheck.c:1073 #, c-format msgid "heap table \"%s.%s.%s\", block %s:\n" msgstr "table heap « %s %s.%s », bloc %s :\n" -#: pg_amcheck.c:1031 pg_amcheck.c:1042 +#: pg_amcheck.c:1078 pg_amcheck.c:1089 #, c-format msgid "heap table \"%s.%s.%s\":\n" msgstr "table heap « %s %s.%s » :\n" -#: pg_amcheck.c:1046 pg_amcheck.c:1115 +#: pg_amcheck.c:1093 pg_amcheck.c:1162 #, c-format msgid "query was: %s\n" msgstr "la requête était : %s\n" -#: pg_amcheck.c:1097 +#: pg_amcheck.c:1144 #, c-format msgid "btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d" msgstr "index btree « %s.%s.%s » : la fonction de vérification des index btree a renvoyé un nombre de lignes inattendu : %d" -#: pg_amcheck.c:1101 +#: pg_amcheck.c:1148 #, c-format msgid "Are %s's and amcheck's versions compatible?" msgstr "est-ce que les versions de %s et d'amcheck sont compatibles ?" -#: pg_amcheck.c:1111 +#: pg_amcheck.c:1158 #, c-format msgid "btree index \"%s.%s.%s\":\n" msgstr "vérification de l'index btree« %s %s.%s » :\n" -#: pg_amcheck.c:1136 +#: pg_amcheck.c:1183 #, c-format msgid "" "%s checks objects in a PostgreSQL database for corruption.\n" @@ -246,17 +353,17 @@ msgstr "" "PostgreSQL sont corrompus.\n" "\n" -#: pg_amcheck.c:1137 +#: pg_amcheck.c:1184 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_amcheck.c:1138 +#: pg_amcheck.c:1185 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [BASE]\n" -#: pg_amcheck.c:1139 +#: pg_amcheck.c:1186 #, c-format msgid "" "\n" @@ -265,83 +372,83 @@ msgstr "" "\n" "Options de la cible :\n" -#: pg_amcheck.c:1140 +#: pg_amcheck.c:1187 #, c-format msgid " -a, --all check all databases\n" msgstr " -a, --all vérifie toutes les bases\n" -#: pg_amcheck.c:1141 +#: pg_amcheck.c:1188 #, c-format msgid " -d, --database=PATTERN check matching database(s)\n" msgstr " -d, --database=MOTIF vérifie les bases correspondantes\n" -#: pg_amcheck.c:1142 +#: pg_amcheck.c:1189 #, c-format msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr " -D, --exclude-database=MOTIF ne vérifie PAS les bases correspondantes\n" -#: pg_amcheck.c:1143 +#: pg_amcheck.c:1190 #, c-format msgid " -i, --index=PATTERN check matching index(es)\n" msgstr " -i, --index=MOTIF vérifie les index correspondants\n" -#: pg_amcheck.c:1144 +#: pg_amcheck.c:1191 #, c-format msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" msgstr " -I, --exclude-index=MOTIF ne vérifie PAS les index correspondants\n" -#: pg_amcheck.c:1145 +#: pg_amcheck.c:1192 #, c-format msgid " -r, --relation=PATTERN check matching relation(s)\n" msgstr " -r, --relation=MOTIF vérifie les relations correspondantes\n" -#: pg_amcheck.c:1146 +#: pg_amcheck.c:1193 #, c-format msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" msgstr " -R, --exclude-relation=MOTIF ne vérifie PAS les relations correspondantes\n" -#: pg_amcheck.c:1147 +#: pg_amcheck.c:1194 #, c-format msgid " -s, --schema=PATTERN check matching schema(s)\n" msgstr " -s, --schema=MOTIF vérifie les schémas correspondants\n" -#: pg_amcheck.c:1148 +#: pg_amcheck.c:1195 #, c-format msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" msgstr " -S, --exclude-schema=MOTIF ne vérifie PAS les schémas correspondants\n" -#: pg_amcheck.c:1149 +#: pg_amcheck.c:1196 #, c-format msgid " -t, --table=PATTERN check matching table(s)\n" msgstr " -t, --table=MOTIF vérifie les tables correspondantes\n" -#: pg_amcheck.c:1150 +#: pg_amcheck.c:1197 #, c-format msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" msgstr " -T, --exclude-table=MOTIF ne vérifie PAS les tables correspondantes\n" -#: pg_amcheck.c:1151 +#: pg_amcheck.c:1198 #, c-format msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" msgstr "" " --no-dependent-indexes n'étend PAS la liste des relations pour inclure\n" " les index\n" -#: pg_amcheck.c:1152 +#: pg_amcheck.c:1199 #, c-format msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" msgstr "" " --no-dependent-toast n'étend PAS la liste des relations pour inclure\n" " les TOAST\n" -#: pg_amcheck.c:1153 +#: pg_amcheck.c:1200 #, c-format msgid " --no-strict-names do NOT require patterns to match objects\n" msgstr "" " --no-strict-names ne requiert PAS que les motifs correspondent à\n" " des objets\n" -#: pg_amcheck.c:1154 +#: pg_amcheck.c:1201 #, c-format msgid "" "\n" @@ -350,40 +457,40 @@ msgstr "" "\n" "Options de vérification des tables :\n" -#: pg_amcheck.c:1155 +#: pg_amcheck.c:1202 #, c-format msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" msgstr " --exclude-toast-pointers ne suit PAS les pointeurs de TOAST\n" -#: pg_amcheck.c:1156 +#: pg_amcheck.c:1203 #, c-format msgid " --on-error-stop stop checking at end of first corrupt page\n" msgstr "" " --on-error-stop arrête la vérification à la fin du premier bloc\n" " corrompu\n" -#: pg_amcheck.c:1157 +#: pg_amcheck.c:1204 #, c-format msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" msgstr "" " --skip=OPTION ne vérifie PAS les blocs « all-frozen » et\n" " « all-visible »\n" -#: pg_amcheck.c:1158 +#: pg_amcheck.c:1205 #, c-format msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" msgstr "" " --startblock=BLOC commence la vérification des tables au numéro\n" " de bloc indiqué\n" -#: pg_amcheck.c:1159 +#: pg_amcheck.c:1206 #, c-format msgid " --endblock=BLOCK check table(s) only up to the given block number\n" msgstr "" " --endblock=BLOC vérifie les tables jusqu'au numéro de bloc\n" " indiqué\n" -#: pg_amcheck.c:1160 +#: pg_amcheck.c:1207 #, c-format msgid "" "\n" @@ -392,28 +499,33 @@ msgstr "" "\n" "Options de vérification des index Btree :\n" -#: pg_amcheck.c:1161 +#: pg_amcheck.c:1208 +#, c-format +msgid " --checkunique check unique constraint if index is unique\n" +msgstr " --checkunique vérifie l'unicité de l'index pour la contrainte d'unicité\n" + +#: pg_amcheck.c:1209 #, c-format msgid " --heapallindexed check that all heap tuples are found within indexes\n" msgstr "" " --heapallindexed vérifie que tous les enregistrements de la\n" " table sont référencés dans les index\n" -#: pg_amcheck.c:1162 +#: pg_amcheck.c:1210 #, c-format msgid " --parent-check check index parent/child relationships\n" msgstr "" " --parent-check vérifie les relations parent/enfants dans les\n" " index\n" -#: pg_amcheck.c:1163 +#: pg_amcheck.c:1211 #, c-format msgid " --rootdescend search from root page to refind tuples\n" msgstr "" " --rootdescend recherche à partir de la racine pour trouver\n" " les lignes\n" -#: pg_amcheck.c:1164 +#: pg_amcheck.c:1212 #, c-format msgid "" "\n" @@ -422,37 +534,37 @@ msgstr "" "\n" "Options de connexion :\n" -#: pg_amcheck.c:1165 +#: pg_amcheck.c:1213 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HÔTE IP/alias du serveur ou répertoire du socket\n" -#: pg_amcheck.c:1166 +#: pg_amcheck.c:1214 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port du serveur de bases de données\n" -#: pg_amcheck.c:1167 +#: pg_amcheck.c:1215 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=UTILISATEUR nom d'utilisateur pour la connexion\n" -#: pg_amcheck.c:1168 +#: pg_amcheck.c:1216 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais un mot de passe\n" -#: pg_amcheck.c:1169 +#: pg_amcheck.c:1217 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password force la saisie d'un mot de passe\n" -#: pg_amcheck.c:1170 +#: pg_amcheck.c:1218 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=BASE change la base de maintenance\n" -#: pg_amcheck.c:1171 +#: pg_amcheck.c:1219 #, c-format msgid "" "\n" @@ -461,44 +573,44 @@ msgstr "" "\n" "Autres options :\n" -#: pg_amcheck.c:1172 +#: pg_amcheck.c:1220 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo affiche les commandes envoyées au serveur\n" -#: pg_amcheck.c:1173 +#: pg_amcheck.c:1221 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" msgstr "" " -j, --jobs=NOMBRE utilise ce nombre de connexions simultanées au\n" " serveur\n" -#: pg_amcheck.c:1174 +#: pg_amcheck.c:1222 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress affiche la progression\n" -#: pg_amcheck.c:1175 +#: pg_amcheck.c:1223 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mode verbeux\n" -#: pg_amcheck.c:1176 +#: pg_amcheck.c:1224 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_amcheck.c:1177 +#: pg_amcheck.c:1225 #, c-format msgid " --install-missing install missing extensions\n" msgstr " --install-missing installe les extensions manquantes\n" -#: pg_amcheck.c:1178 +#: pg_amcheck.c:1226 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_amcheck.c:1180 +#: pg_amcheck.c:1228 #, c-format msgid "" "\n" @@ -507,99 +619,52 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_amcheck.c:1181 +#: pg_amcheck.c:1229 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: pg_amcheck.c:1234 +#: pg_amcheck.c:1282 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" msgstr "relations %*s/%s (%d%%), blocs %*s/%s (%d%%) %*s" -#: pg_amcheck.c:1245 +#: pg_amcheck.c:1293 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" msgstr "relations %*s/%s (%d%%), blocs %*s/%s (%d%%) (%s%-*.*s)" -#: pg_amcheck.c:1260 +#: pg_amcheck.c:1308 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" msgstr "relations %*s/%s (%d%%), blocs %*s/%s (%d%%)" -#: pg_amcheck.c:1319 pg_amcheck.c:1352 +#: pg_amcheck.c:1367 pg_amcheck.c:1400 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "mauvaise qualification du nom (trop de points entre les noms) : %s" -#: pg_amcheck.c:1397 +#: pg_amcheck.c:1445 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "nom de relation incorrecte (trop de points entre les noms) : %s" -#: pg_amcheck.c:1550 pg_amcheck.c:1689 +#: pg_amcheck.c:1598 pg_amcheck.c:1737 #, c-format msgid "including database \"%s\"" msgstr "en incluant la base de données : « %s »" -#: pg_amcheck.c:1671 +#: pg_amcheck.c:1719 #, c-format msgid "internal error: received unexpected database pattern_id %d" msgstr "erreur interne : a reçu un pattern_id %d inattendu de la base" -#: pg_amcheck.c:1673 +#: pg_amcheck.c:1721 #, c-format msgid "no connectable databases to check matching \"%s\"" msgstr "aucune base de données connectable à vérifier correspondant à « %s »" -#: pg_amcheck.c:2131 +#: pg_amcheck.c:2179 #, c-format msgid "internal error: received unexpected relation pattern_id %d" msgstr "erreur interne : a reçu un pattern_id %d inattendu de la relation" - -#~ msgid "" -#~ "\n" -#~ "Other Options:\n" -#~ msgstr "" -#~ "\n" -#~ "Autres options:\n" - -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide, puis quitte\n" - -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version affiche la version, puis quitte\n" - -#~ msgid " -e, --echo show the commands being sent to the server\n" -#~ msgstr " -e, --echo affiche les commandes envoyées au serveur\n" - -#~ msgid " -q, --quiet don't write any messages\n" -#~ msgstr " -q, --quiet n'écrit aucun message\n" - -#~ msgid " -q, --quiet don't write any messages\n" -#~ msgstr " -q, --quiet n'écrit aucun message\n" - -#~ msgid " -v, --verbose write a lot of output\n" -#~ msgstr " -v, --verbose mode verbeux\n" - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Essayez « %s --help » pour plus d'informations.\n" - -#, c-format -#~ msgid "command was: %s" -#~ msgstr "la commande était : %s" - -#, c-format -#~ msgid "fatal: " -#~ msgstr "fatal : " - -#~ msgid "invalid skip option" -#~ msgstr "option skip invalide" - -#, c-format -#~ msgid "number of parallel jobs must be at least 1" -#~ msgstr "le nombre maximum de jobs en parallèle doit être au moins de 1" - -#~ msgid "number of parallel jobs must be at least 1\n" -#~ msgstr "le nombre de jobs parallèles doit être au moins de 1\n" diff --git a/src/bin/pg_amcheck/po/ja.po b/src/bin/pg_amcheck/po/ja.po index 170a2dc2a4ebd..a4f67dfd21182 100644 --- a/src/bin/pg_amcheck/po/ja.po +++ b/src/bin/pg_amcheck/po/ja.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_amcheck (PostgreSQL 17)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-14 11:23+0900\n" -"PO-Revision-Date: 2024-06-14 11:27+0900\n" +"POT-Creation-Date: 2024-08-28 10:42+0900\n" +"PO-Revision-Date: 2024-08-28 11:43+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: \n" "Language: ja\n" @@ -18,22 +18,22 @@ msgstr "" "X-Generator: Poedit 1.8.13\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:278 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:285 #, c-format msgid "warning: " msgstr "警告: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:296 #, c-format msgid "detail: " msgstr "詳細: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:303 #, c-format msgid "hint: " msgstr "ヒント: " @@ -252,8 +252,8 @@ msgstr "データベース\"%1$s\"内: スキーマ\"%3$s\"内でamcheck バー #: pg_amcheck.c:624 #, c-format -msgid "--checkunique option is not supported by amcheck version \"%s\"" -msgstr "--checkuniqueオプションはamcheckバージョン\"%s\"ではサポートされていません" +msgid "option %s is not supported by amcheck version %s" +msgstr "%sオプションはamcheckバージョン\"%s\"ではサポートされていません" #: pg_amcheck.c:650 #, c-format diff --git a/src/bin/pg_amcheck/po/ka.po b/src/bin/pg_amcheck/po/ka.po index fb08fc2ae6549..8cf7f280e248b 100644 --- a/src/bin/pg_amcheck/po/ka.po +++ b/src/bin/pg_amcheck/po/ka.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_amcheck (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-14 02:22+0000\n" -"PO-Revision-Date: 2024-06-14 06:13+0200\n" +"POT-Creation-Date: 2024-08-27 16:52+0000\n" +"PO-Revision-Date: 2024-08-28 05:43+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -252,8 +252,8 @@ msgstr "ბაზაში \"%s\": გამოიყენება amcheck-ი #: pg_amcheck.c:624 #, c-format -msgid "--checkunique option is not supported by amcheck version \"%s\"" -msgstr "--checkunique პარამეტრის მხარდაჭერა amcheck-ის ვერსიას \"%s\" არ გააჩნია" +msgid "option %s is not supported by amcheck version %s" +msgstr "პარამეტრის '%s' მხარდაჭერა amcheck-ის ვერსიას \"%s\" არ გააჩნია" #: pg_amcheck.c:650 #, c-format diff --git a/src/bin/pg_amcheck/po/ko.po b/src/bin/pg_amcheck/po/ko.po index cef3583a4432e..d5e78e4f22c7f 100644 --- a/src/bin/pg_amcheck/po/ko.po +++ b/src/bin/pg_amcheck/po/ko.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_amcheck (PostgreSQL) 16\n" +"Project-Id-Version: pg_amcheck (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:51+0000\n" -"PO-Revision-Date: 2023-05-30 12:37+0900\n" +"POT-Creation-Date: 2025-01-17 04:52+0000\n" +"PO-Revision-Date: 2025-01-17 18:01+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -36,11 +36,78 @@ msgstr "상세정보: " msgid "hint: " msgstr "힌트: " -#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "널 포인터를 중복할 수 없음 (내부 오류)\n" + +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "\"%s\" 파일을 열 수 없음: %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "\"%s\" 파일을 위한 파일 시스템 동기화를 할 수 없음: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "\"%s\" 파일 상태 정보를 알 수 없음: %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "이 빌드는 \"%s\" 동기화 방법은 지원하지 않음" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 열 수 없음: %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" + +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "\"%s\" 파일을 fsync 할 수 없음: %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "사용자 ID(%ld)를 찾을 수 없음: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "사용자 없음" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "사용자 이름 찾기 실패: 오류 코드 %lu" + +#: ../../fe_utils/cancel.c:186 ../../fe_utils/cancel.c:235 msgid "Cancel request sent\n" msgstr "취소 요청 보냄\n" -#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +#: ../../fe_utils/cancel.c:187 ../../fe_utils/cancel.c:236 msgid "Could not send cancel request: " msgstr "취소 요청 보내기 실패: " @@ -64,195 +131,235 @@ msgstr "\"%s\" 값은 %s 옵션의 값으로 적당하지 않음" msgid "%s must be in range %d..%d" msgstr "%s 값은 %d부터 %d까지만 허용합니다" +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "알 수 없는 동기화 방법: %s" + +#: ../../fe_utils/parallel_slot.c:317 +#, c-format +msgid "too many jobs for this platform: %d" +msgstr "이 플랫폼에서는 너무 많은 job 입니다: %d" + +#: ../../fe_utils/parallel_slot.c:326 +#, c-format +msgid "socket file descriptor out of range for select(): %d" +msgstr "select() 작업 범위를 벗어나는 소켓 파일 기술자: %d" + +#: ../../fe_utils/parallel_slot.c:328 +#, c-format +msgid "Try fewer jobs." +msgstr "job 수를 줄여주세요." + +#: ../../fe_utils/parallel_slot.c:553 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "\"%s\" 데이터베이스 처리 중 오류 발생: %s" + #: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 -#: pg_amcheck.c:1647 pg_amcheck.c:2092 +#: pg_amcheck.c:1693 pg_amcheck.c:2138 #, c-format msgid "query failed: %s" msgstr "쿼리 실패: %s" #: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 -#: pg_amcheck.c:571 pg_amcheck.c:1102 pg_amcheck.c:1648 pg_amcheck.c:2093 +#: pg_amcheck.c:578 pg_amcheck.c:1147 pg_amcheck.c:1694 pg_amcheck.c:2139 #, c-format msgid "Query was: %s" msgstr "사용한 쿼리: %s" -#: pg_amcheck.c:399 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "쉘 명령 인자에 줄바꿈 문자가 있음: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "데이터베이스 이름에 줄바꿈 문자가 있음: \"%s\"\n" + +#: pg_amcheck.c:403 #, c-format msgid "invalid argument for option %s" msgstr "%s 옵션의 잘못된 인자" -#: pg_amcheck.c:405 +#: pg_amcheck.c:409 #, c-format msgid "invalid start block" msgstr "시작 블록이 유효하지 않음" -#: pg_amcheck.c:407 +#: pg_amcheck.c:411 #, c-format msgid "start block out of bounds" msgstr "시작 블록이 범위를 벗어남" -#: pg_amcheck.c:414 +#: pg_amcheck.c:418 #, c-format msgid "invalid end block" msgstr "마지막 블록이 유효하지 않음" -#: pg_amcheck.c:416 +#: pg_amcheck.c:420 #, c-format msgid "end block out of bounds" msgstr "마지막 블록이 범위를 벗어남" -#: pg_amcheck.c:439 pg_amcheck.c:461 +#: pg_amcheck.c:446 pg_amcheck.c:468 #, c-format msgid "Try \"%s --help\" for more information." msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보십시오." -#: pg_amcheck.c:445 +#: pg_amcheck.c:452 #, c-format msgid "end block precedes start block" msgstr "마지막 블록이 시작 블록보다 앞에 존재함" -#: pg_amcheck.c:459 +#: pg_amcheck.c:466 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" -#: pg_amcheck.c:479 +#: pg_amcheck.c:486 #, c-format msgid "cannot specify a database name with --all" msgstr "데이터베이스 이름을 —all 와 같이 지정할 수 없습니다" -#: pg_amcheck.c:485 +#: pg_amcheck.c:492 #, c-format msgid "cannot specify both a database name and database patterns" msgstr "데이터베이스 이름과 형식을 지정할 수 없습니다" -#: pg_amcheck.c:513 +#: pg_amcheck.c:520 #, c-format msgid "no databases to check" msgstr "확인할 데이터베이스가 없습니다" -#: pg_amcheck.c:569 +#: pg_amcheck.c:576 #, c-format msgid "database \"%s\": %s" msgstr "데이터베이스 “%s”: %s" -#: pg_amcheck.c:580 +#: pg_amcheck.c:587 #, c-format msgid "skipping database \"%s\": amcheck is not installed" msgstr "데이터베이스 생략 “%s”: amcheck 가 설치되지 않음" -#: pg_amcheck.c:588 +#: pg_amcheck.c:595 #, c-format msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" msgstr "데이터베이스 “%s”: 사용하는 amcheck 버전 “%s” 스키마 “%s”" -#: pg_amcheck.c:610 +#: pg_amcheck.c:624 +#, c-format +msgid "option %s is not supported by amcheck version %s" +msgstr "%s 옵션은 %s 버전 amcheck에서 지원하지 않음" + +#: pg_amcheck.c:650 #, c-format msgid "no heap tables to check matching \"%s\"" msgstr "“%s” 와 일치하는 heap 테이블을 찾을 수 없습니다" -#: pg_amcheck.c:613 +#: pg_amcheck.c:653 #, c-format msgid "no btree indexes to check matching \"%s\"" msgstr "“%s” 와 일치하는 btree 인덱스를 찾을 수 없습니다" -#: pg_amcheck.c:616 +#: pg_amcheck.c:656 #, c-format msgid "no relations to check in schemas matching \"%s\"" msgstr "스키마에서 “%s” 와 일치하는 릴레이션을 찾을 수 없습니다" -#: pg_amcheck.c:619 +#: pg_amcheck.c:659 #, c-format msgid "no relations to check matching \"%s\"" msgstr "“%s” 와 일치하는 릴레이션을 찾을 수 없습니다" -#: pg_amcheck.c:647 +#: pg_amcheck.c:687 #, c-format msgid "no relations to check" msgstr "확인할 릴레이션이 없습니다" -#: pg_amcheck.c:730 +#: pg_amcheck.c:770 #, c-format msgid "checking heap table \"%s.%s.%s\"" msgstr "heap 테이블 확인 “%s.%s.%s”" -#: pg_amcheck.c:746 +#: pg_amcheck.c:786 #, c-format msgid "checking btree index \"%s.%s.%s\"" msgstr "btree 인덱스 확인 “%s.%s.%s”" -#: pg_amcheck.c:893 +#: pg_amcheck.c:937 #, c-format msgid "error sending command to database \"%s\": %s" msgstr "데이터베이스에 명령을 보내는 중 오류 발생 “%s”: %s" -#: pg_amcheck.c:896 +#: pg_amcheck.c:940 #, c-format msgid "Command was: %s" msgstr "사용한 명령: %s" -#: pg_amcheck.c:1015 +#: pg_amcheck.c:1060 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" msgstr "heap 테이블 “%s.%s.%s”, 블록 %s, 오프셋 %s, 에트리뷰트 %s:\n" -#: pg_amcheck.c:1022 +#: pg_amcheck.c:1067 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" msgstr "heap 테이블 “%s.%s.%s”, 블록 %s, 오프셋 %s:\n" -#: pg_amcheck.c:1028 +#: pg_amcheck.c:1073 #, c-format msgid "heap table \"%s.%s.%s\", block %s:\n" msgstr "heap 테이블 “%s.%s.%s”, 블록 %s:\n" -#: pg_amcheck.c:1033 pg_amcheck.c:1044 +#: pg_amcheck.c:1078 pg_amcheck.c:1089 #, c-format msgid "heap table \"%s.%s.%s\":\n" msgstr "heap 테이블 “%s.%s.%s”:\n" -#: pg_amcheck.c:1048 pg_amcheck.c:1117 +#: pg_amcheck.c:1093 pg_amcheck.c:1162 #, c-format msgid "query was: %s\n" msgstr "사용한 쿼리: %s\n" -#: pg_amcheck.c:1099 +#: pg_amcheck.c:1144 #, c-format msgid "" "btree index \"%s.%s.%s\": btree checking function returned unexpected number " "of rows: %d" msgstr "btree 인덱스 “%s.%s.%s”: btree 확인 중에 예기치 않은 행수를 반환함: %d" -#: pg_amcheck.c:1103 +#: pg_amcheck.c:1148 #, c-format msgid "Are %s's and amcheck's versions compatible?" msgstr "%s 버전과 amcheck의 버전이 호환 가능합니까?" -#: pg_amcheck.c:1113 +#: pg_amcheck.c:1158 #, c-format msgid "btree index \"%s.%s.%s\":\n" msgstr "btree 인덱스 “%s.%s.%s”:\n" -#: pg_amcheck.c:1138 +#: pg_amcheck.c:1183 #, c-format msgid "" "%s checks objects in a PostgreSQL database for corruption.\n" "\n" msgstr "" -"%s 가 PostgreSQL 데이터베이스 개체 손상 여부를 검사합니다.\n" +"%s는 PostgreSQL 데이터베이스 개체 손상 여부를 검사합니다.\n" "\n" -#: pg_amcheck.c:1139 +#: pg_amcheck.c:1184 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_amcheck.c:1140 +#: pg_amcheck.c:1185 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [옵션]... [DB이름]\n" -#: pg_amcheck.c:1141 +#: pg_amcheck.c:1186 #, c-format msgid "" "\n" @@ -261,85 +368,85 @@ msgstr "" "\n" "사용가능한 옵션들:\n" -#: pg_amcheck.c:1142 +#: pg_amcheck.c:1187 #, c-format msgid " -a, --all check all databases\n" -msgstr " -a, —all 모든 데이터베이스를 검사\n" +msgstr " -a, -—all 모든 데이터베이스를 검사\n" -#: pg_amcheck.c:1143 +#: pg_amcheck.c:1188 #, c-format msgid " -d, --database=PATTERN check matching database(s)\n" -msgstr " -d, —database=PATTERN 일치하는 모든 데이터베이스를 검사\n" +msgstr " -d, -—database=PATTERN 일치하는 모든 데이터베이스를 검사\n" -#: pg_amcheck.c:1144 +#: pg_amcheck.c:1189 #, c-format msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr "" -" -D, —exclude-database=PATTERN 일치하는 데이터베이스를 제외 하고 검사\n" +" -D, -—exclude-database=PATTERN 일치하는 데이터베이스를 제외 하고 검사\n" -#: pg_amcheck.c:1145 +#: pg_amcheck.c:1190 #, c-format msgid " -i, --index=PATTERN check matching index(es)\n" -msgstr " -i, —index=PATTERN 일치하는 인덱스를 검사\n" +msgstr " -i, -—index=PATTERN 일치하는 인덱스를 검사\n" -#: pg_amcheck.c:1146 +#: pg_amcheck.c:1191 #, c-format msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" -msgstr " -I, —exclude-index=PATTERN 일치하는 인덱스를 제외하고 검사\n" +msgstr " -I, -—exclude-index=PATTERN 일치하는 인덱스를 제외하고 검사\n" -#: pg_amcheck.c:1147 +#: pg_amcheck.c:1192 #, c-format msgid " -r, --relation=PATTERN check matching relation(s)\n" -msgstr " -r, —relation=PATTERN 일치하는 릴레이션을 검사\n" +msgstr " -r, -—relation=PATTERN 일치하는 릴레이션을 검사\n" -#: pg_amcheck.c:1148 +#: pg_amcheck.c:1193 #, c-format msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" -msgstr " -R, —exclude-relation=PATTERN 일치하는 릴레이션을 제외하고 검사\n" +msgstr " -R, -—exclude-relation=PATTERN 일치하는 릴레이션을 제외하고 검사\n" -#: pg_amcheck.c:1149 +#: pg_amcheck.c:1194 #, c-format msgid " -s, --schema=PATTERN check matching schema(s)\n" -msgstr " -s, —schema=PATTERN 일치하는 스키마를 검사\n" +msgstr " -s, -—schema=PATTERN 일치하는 스키마를 검사\n" -#: pg_amcheck.c:1150 +#: pg_amcheck.c:1195 #, c-format msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" -msgstr " -S, —exclude-schema=PATTERN 일치하는 스키마를 제외하고 검사\n" +msgstr " -S, -—exclude-schema=PATTERN 일치하는 스키마를 제외하고 검사\n" -#: pg_amcheck.c:1151 +#: pg_amcheck.c:1196 #, c-format msgid " -t, --table=PATTERN check matching table(s)\n" -msgstr " -t, —table=PATTERN 일치하는 테이블을 검사\n" +msgstr " -t, -—table=PATTERN 일치하는 테이블을 검사\n" -#: pg_amcheck.c:1152 +#: pg_amcheck.c:1197 #, c-format msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" -msgstr " -T, —exclude-table=PATTERN 일치하는 테이블을 제외하고 검사\n" +msgstr " -T, -—exclude-table=PATTERN 일치하는 테이블을 제외하고 검사\n" -#: pg_amcheck.c:1153 +#: pg_amcheck.c:1198 #, c-format msgid "" " --no-dependent-indexes do NOT expand list of relations to include " "indexes\n" -msgstr " —no-dependent-indexes 릴레이션에 인덱스를 포함하지 않음 \n" +msgstr " -—no-dependent-indexes 릴레이션에 인덱스를 포함하지 않음 \n" -#: pg_amcheck.c:1154 +#: pg_amcheck.c:1199 #, c-format msgid "" " --no-dependent-toast do NOT expand list of relations to include " "TOAST tables\n" msgstr "" -" —no-dependent-toast 릴레이션에 TOAST 테이블을 포함하지 않음\n" +" -—no-dependent-toast 릴레이션에 TOAST 테이블을 포함하지 않음\n" -#: pg_amcheck.c:1155 +#: pg_amcheck.c:1200 #, c-format msgid "" " --no-strict-names do NOT require patterns to match objects\n" msgstr "" -" —no-strict-names 개체가 패턴과 일치하지 않아도 허용함\n" +" -—no-strict-names 개체가 패턴과 일치하지 않아도 허용함\n" -#: pg_amcheck.c:1156 +#: pg_amcheck.c:1201 #, c-format msgid "" "\n" @@ -348,45 +455,45 @@ msgstr "" "\n" "테이블 검사 옵션들:\n" -#: pg_amcheck.c:1157 +#: pg_amcheck.c:1202 #, c-format msgid "" " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" -msgstr " —exclude-toast-pointers TOAST 포인터를 확인하지 않음\n" +msgstr " -—exclude-toast-pointers TOAST 포인터를 확인하지 않음\n" -#: pg_amcheck.c:1158 +#: pg_amcheck.c:1203 #, c-format msgid "" " --on-error-stop stop checking at end of first corrupt " "page\n" -msgstr " —on-error-stop 손상된 페이지 끝에서 검사를 멈춤\n" +msgstr " -—on-error-stop 손상된 페이지 끝에서 검사를 멈춤\n" -#: pg_amcheck.c:1159 +#: pg_amcheck.c:1204 #, c-format msgid "" " --skip=OPTION do NOT check \"all-frozen\" or \"all-" "visible\" blocks\n" msgstr "" -" —skip=OPTION “all-frozen” 또는 “all-visible” 블록을 검사" -"하지 않음\n" +" -—skip=OPTION \"all-frozen\" 또는 \"all-visible\" 블록을 " +"검사하지 않음\n" -#: pg_amcheck.c:1160 +#: pg_amcheck.c:1205 #, c-format msgid "" " --startblock=BLOCK begin checking table(s) at the given block " "number\n" msgstr "" -" —startblock=BLOCK 지정된 블록 번호부터 테이블 검사를 시작\n" +" -—startblock=BLOCK 지정된 블록 번호부터 테이블 검사를 시작\n" -#: pg_amcheck.c:1161 +#: pg_amcheck.c:1206 #, c-format msgid "" " --endblock=BLOCK check table(s) only up to the given block " "number\n" msgstr "" -" —endblock=BLOCK 지정된 블록 번호까지 테이블 검사 마침 \n" +" -—endblock=BLOCK 지정된 블록 번호까지 테이블 검사 마침\n" -#: pg_amcheck.c:1162 +#: pg_amcheck.c:1207 #, c-format msgid "" "\n" @@ -395,27 +502,35 @@ msgstr "" "\n" "B-tree 인덱스 검사 옵션들:\n" -#: pg_amcheck.c:1163 +#: pg_amcheck.c:1208 +#, c-format +msgid "" +" --checkunique check unique constraint if index is " +"unique\n" +msgstr "" +" --checkunique 유니크 인덱스라면 유니크 제약조건 검사\n" + +#: pg_amcheck.c:1209 #, c-format msgid "" " --heapallindexed check that all heap tuples are found " "within indexes\n" msgstr "" -" —heapallindexed 모든 heap 튜플이 인덱스 내에 있는지 검사\n" +" -—heapallindexed 모든 heap 튜플이 인덱스 내에 있는지 검사\n" -#: pg_amcheck.c:1164 +#: pg_amcheck.c:1210 #, c-format msgid "" " --parent-check check index parent/child relationships\n" -msgstr " —parent-check 인덱스의 부모/자식 관계를 검사\n" +msgstr " -—parent-check 인덱스의 부모/자식 관계를 검사\n" -#: pg_amcheck.c:1165 +#: pg_amcheck.c:1211 #, c-format msgid "" " --rootdescend search from root page to refind tuples\n" -msgstr " —rootdescend 루트 페이지 부터 튜플을 다시 찾음 \n" +msgstr " —-rootdescend 루트 페이지 부터 튜플을 다시 찾음 \n" -#: pg_amcheck.c:1166 +#: pg_amcheck.c:1212 #, c-format msgid "" "\n" @@ -424,40 +539,40 @@ msgstr "" "\n" "연결 옵션들:\n" -#: pg_amcheck.c:1167 +#: pg_amcheck.c:1213 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" -" -h, —host=HOSTNAME 데이터베이스 서버 호스트 또는 소켓의 디렉터" +" -h, -—host=HOSTNAME 데이터베이스 서버 호스트 또는 소켓의 디렉터" "리\n" -#: pg_amcheck.c:1168 +#: pg_amcheck.c:1214 #, c-format msgid " -p, --port=PORT database server port\n" -msgstr " -p, —port=PORT 데이터베이스 서버 포트\n" +msgstr " -p, -—port=PORT 데이터베이스 서버 포트\n" -#: pg_amcheck.c:1169 +#: pg_amcheck.c:1215 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" -msgstr " -U, —username=USERNAME 연결할 유저 이름\n" +msgstr " -U, -—username=USERNAME 연결할 유저 이름\n" -#: pg_amcheck.c:1170 +#: pg_amcheck.c:1216 #, c-format msgid " -w, --no-password never prompt for password\n" -msgstr " -w, —no-password 암호 입력 프롬프트가 나타나지 않음\n" +msgstr " -w, -—no-password 암호 입력 프롬프트가 나타나지 않음\n" -#: pg_amcheck.c:1171 +#: pg_amcheck.c:1217 #, c-format msgid " -W, --password force password prompt\n" -msgstr " -W, —password 암호 입력 프롬프트가 나타남\n" +msgstr " -W, -—password 암호 입력 프롬프트가 나타남\n" -#: pg_amcheck.c:1172 +#: pg_amcheck.c:1218 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" -msgstr " —maintenance-db=DBNAME 대체 연결 데이터베이스\n" +msgstr " -—maintenance-db=DBNAME 대체 연결 데이터베이스\n" -#: pg_amcheck.c:1173 +#: pg_amcheck.c:1219 #, c-format msgid "" "\n" @@ -466,47 +581,47 @@ msgstr "" "\n" "기타 옵션:\n" -#: pg_amcheck.c:1174 +#: pg_amcheck.c:1220 #, c-format msgid "" " -e, --echo show the commands being sent to the " "server\n" msgstr " -e, --echo 서버로 보내는 명령들을 보여줌\n" -#: pg_amcheck.c:1175 +#: pg_amcheck.c:1221 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " "the server\n" -msgstr " -j, —jobs=NUM 서버에 동시 연결할 수를 지정\n" +msgstr " -j, -—jobs=NUM 서버에 동시 연결할 수를 지정\n" -#: pg_amcheck.c:1176 +#: pg_amcheck.c:1222 #, c-format msgid " -P, --progress show progress information\n" -msgstr " -P, —progress 진행 사항 정보를 보여줌\n" +msgstr " -P, -—progress 진행 사항 정보를 보여줌\n" -#: pg_amcheck.c:1177 +#: pg_amcheck.c:1223 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose 작업내역의 자세한 출력\n" -#: pg_amcheck.c:1178 +#: pg_amcheck.c:1224 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_amcheck.c:1179 +#: pg_amcheck.c:1225 #, c-format msgid " --install-missing install missing extensions\n" -msgstr " —install-missing 누락된 익스텐션을 설치\n" +msgstr " -—install-missing 누락된 익스텐션을 설치\n" -#: pg_amcheck.c:1180 +#: pg_amcheck.c:1226 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 도움말을 표시하고 종료\n" -#: pg_amcheck.c:1182 +#: pg_amcheck.c:1228 #, c-format msgid "" "\n" @@ -515,52 +630,52 @@ msgstr "" "\n" "문제점 보고 주소: <%s>\n" -#: pg_amcheck.c:1183 +#: pg_amcheck.c:1229 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: pg_amcheck.c:1236 +#: pg_amcheck.c:1282 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" msgstr "%*s/%s 릴레이션 (%d%%), %*s/%s 페이지 (%d%%) %*s" -#: pg_amcheck.c:1247 +#: pg_amcheck.c:1293 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" msgstr "%*s/%s 릴레이션 (%d%%), %*s/%s 페이지 (%d%%) (%s%-*.*s)" -#: pg_amcheck.c:1262 +#: pg_amcheck.c:1308 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" msgstr "%*s/%s 릴레이션 (%d%%), %*s/%s 페이지 (%d%%)" -#: pg_amcheck.c:1321 pg_amcheck.c:1354 +#: pg_amcheck.c:1367 pg_amcheck.c:1400 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "바르지 못한 규정 이름(점으로 구분된 이름이 너무 많음): %s" -#: pg_amcheck.c:1399 +#: pg_amcheck.c:1445 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "바르지 못한 릴레이션 이름(점으로 구분된 이름이 너무 많음): %s" -#: pg_amcheck.c:1552 pg_amcheck.c:1691 +#: pg_amcheck.c:1598 pg_amcheck.c:1737 #, c-format msgid "including database \"%s\"" msgstr "“%s” 데이터베이스를 포함합니다" -#: pg_amcheck.c:1673 +#: pg_amcheck.c:1719 #, c-format msgid "internal error: received unexpected database pattern_id %d" msgstr "내부 오류: 올바르지 않은 데이터베이스 패턴 아이디 %d" -#: pg_amcheck.c:1675 +#: pg_amcheck.c:1721 #, c-format msgid "no connectable databases to check matching \"%s\"" msgstr "“%s” 와 일치하는 연결 가능한 데이터베이스를 찾을 수 없음" -#: pg_amcheck.c:2133 +#: pg_amcheck.c:2179 #, c-format msgid "internal error: received unexpected relation pattern_id %d" msgstr "내부 오류: 올바르지 않은 릴레이션 패턴 아이디 %d" diff --git a/src/bin/pg_amcheck/po/ru.po b/src/bin/pg_amcheck/po/ru.po index c6be3badc0d35..0889dfb2f8ebc 100644 --- a/src/bin/pg_amcheck/po/ru.po +++ b/src/bin/pg_amcheck/po/ru.po @@ -1,10 +1,10 @@ -# Alexander Lakhin , 2021, 2022. +# Alexander Lakhin , 2021, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-28 07:59+0300\n" -"PO-Revision-Date: 2022-09-05 13:33+0300\n" +"POT-Creation-Date: 2024-09-02 09:29+0300\n" +"PO-Revision-Date: 2024-09-05 08:23+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -32,11 +32,78 @@ msgstr "подробности: " msgid "hint: " msgstr "подсказка: " -#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не удалось получить информацию о файле \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "эта сборка программы не поддерживает метод синхронизации \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не удалось прочитать каталог \"%s\": %m" + +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "пользователь не существует" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "распознать имя пользователя не удалось (код ошибки: %lu)" + +#: ../../fe_utils/cancel.c:186 ../../fe_utils/cancel.c:235 msgid "Cancel request sent\n" msgstr "Сигнал отмены отправлен\n" -#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +#: ../../fe_utils/cancel.c:187 ../../fe_utils/cancel.c:236 msgid "Could not send cancel request: " msgstr "Отправить сигнал отмены не удалось: " @@ -60,160 +127,203 @@ msgstr "неверное значение \"%s\" для параметра %s" msgid "%s must be in range %d..%d" msgstr "значение %s должно быть в диапазоне %d..%d" +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нераспознанный метод синхронизации: %s" + +#: ../../fe_utils/parallel_slot.c:317 +#, c-format +msgid "too many jobs for this platform: %d" +msgstr "слишком много заданий для этой платформы: %d" + +#: ../../fe_utils/parallel_slot.c:326 +#, c-format +msgid "socket file descriptor out of range for select(): %d" +msgstr "дескриптор файла сокета вне диапазона, допустимого для select(): %d" + +#: ../../fe_utils/parallel_slot.c:328 +#, c-format +msgid "Try fewer jobs." +msgstr "Попробуйте уменьшить количество заданий." + +#: ../../fe_utils/parallel_slot.c:553 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "ошибка при обработке базы \"%s\": %s" + #: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 -#: pg_amcheck.c:1647 pg_amcheck.c:2092 +#: pg_amcheck.c:1693 pg_amcheck.c:2138 #, c-format msgid "query failed: %s" msgstr "ошибка при выполнении запроса: %s" #: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 -#: pg_amcheck.c:571 pg_amcheck.c:1102 pg_amcheck.c:1648 pg_amcheck.c:2093 +#: pg_amcheck.c:578 pg_amcheck.c:1147 pg_amcheck.c:1694 pg_amcheck.c:2139 #, c-format msgid "Query was: %s" msgstr "Выполнялся запрос: %s" -#: pg_amcheck.c:399 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "" +"аргумент команды оболочки содержит символ новой строки или перевода каретки: " +"\"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "" +"имя базы данных содержит символ новой строки или перевода каретки: \"%s\"\n" + +#: pg_amcheck.c:403 #, c-format msgid "invalid argument for option %s" msgstr "недопустимый аргумент параметра %s" -#: pg_amcheck.c:405 +#: pg_amcheck.c:409 #, c-format msgid "invalid start block" msgstr "неверный начальный блок" -#: pg_amcheck.c:407 +#: pg_amcheck.c:411 #, c-format msgid "start block out of bounds" msgstr "начальный блок вне допустимых пределов" -#: pg_amcheck.c:414 +#: pg_amcheck.c:418 #, c-format msgid "invalid end block" msgstr "неверный конечный блок" -#: pg_amcheck.c:416 +#: pg_amcheck.c:420 #, c-format msgid "end block out of bounds" msgstr "конечный блок вне допустимых пределов" -#: pg_amcheck.c:439 pg_amcheck.c:461 +#: pg_amcheck.c:446 pg_amcheck.c:468 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: pg_amcheck.c:445 +#: pg_amcheck.c:452 #, c-format msgid "end block precedes start block" msgstr "конечный блок предшествует начальному" -#: pg_amcheck.c:459 +#: pg_amcheck.c:466 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_amcheck.c:479 +#: pg_amcheck.c:486 #, c-format msgid "cannot specify a database name with --all" msgstr "имя базы данных нельзя задавать с --all" -#: pg_amcheck.c:485 +#: pg_amcheck.c:492 #, c-format msgid "cannot specify both a database name and database patterns" msgstr "нельзя задавать одновременно имя базы данных и шаблоны имён" -#: pg_amcheck.c:513 +#: pg_amcheck.c:520 #, c-format msgid "no databases to check" msgstr "не указаны базы для проверки" -#: pg_amcheck.c:569 +#: pg_amcheck.c:576 #, c-format msgid "database \"%s\": %s" msgstr "база данных \"%s\": %s" -#: pg_amcheck.c:580 +#: pg_amcheck.c:587 #, c-format msgid "skipping database \"%s\": amcheck is not installed" msgstr "база \"%s\" пропускается: расширение amcheck не установлено" -#: pg_amcheck.c:588 +#: pg_amcheck.c:595 #, c-format msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" msgstr "база \"%s\": используется amcheck версии \"%s\" в схеме \"%s\"" -#: pg_amcheck.c:610 +#: pg_amcheck.c:624 +#, c-format +msgid "option %s is not supported by amcheck version %s" +msgstr "параметр %s не поддерживается версией amcheck %s" + +#: pg_amcheck.c:650 #, c-format msgid "no heap tables to check matching \"%s\"" msgstr "не найдены подлежащие проверке базовые таблицы, соответствующие \"%s\"" -#: pg_amcheck.c:613 +#: pg_amcheck.c:653 #, c-format msgid "no btree indexes to check matching \"%s\"" msgstr "не найдены подлежащие проверке индексы btree, соответствующие \"%s\"" -#: pg_amcheck.c:616 +#: pg_amcheck.c:656 #, c-format msgid "no relations to check in schemas matching \"%s\"" msgstr "" "не найдены подлежащие проверке отношения в схемах, соответствующих \"%s\"" -#: pg_amcheck.c:619 +#: pg_amcheck.c:659 #, c-format msgid "no relations to check matching \"%s\"" msgstr "не найдены подлежащие проверке отношения, соответствующие \"%s\"" -#: pg_amcheck.c:647 +#: pg_amcheck.c:687 #, c-format msgid "no relations to check" msgstr "не найдены отношения для проверки" -#: pg_amcheck.c:730 +#: pg_amcheck.c:770 #, c-format msgid "checking heap table \"%s.%s.%s\"" msgstr "проверка базовой таблицы \"%s.%s.%s\"" -#: pg_amcheck.c:746 +#: pg_amcheck.c:786 #, c-format msgid "checking btree index \"%s.%s.%s\"" msgstr "проверка индекса btree \"%s.%s.%s\"" -#: pg_amcheck.c:893 +#: pg_amcheck.c:937 #, c-format msgid "error sending command to database \"%s\": %s" msgstr "ошибка передачи команды базе \"%s\": %s" -#: pg_amcheck.c:896 +#: pg_amcheck.c:940 #, c-format msgid "Command was: %s" msgstr "Выполнялась команда: %s" -#: pg_amcheck.c:1015 +#: pg_amcheck.c:1060 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" msgstr "базовая таблица \"%s.%s.%s\", блок %s, смещение %s, атрибут %s:\n" -#: pg_amcheck.c:1022 +#: pg_amcheck.c:1067 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" msgstr "базовая таблица \"%s.%s.%s\", блок %s, смещение %s:\n" -#: pg_amcheck.c:1028 +#: pg_amcheck.c:1073 #, c-format msgid "heap table \"%s.%s.%s\", block %s:\n" msgstr "базовая таблица \"%s.%s.%s\", блок %s:\n" -#: pg_amcheck.c:1033 pg_amcheck.c:1044 +#: pg_amcheck.c:1078 pg_amcheck.c:1089 #, c-format msgid "heap table \"%s.%s.%s\":\n" msgstr "базовая таблица \"%s.%s.%s\":\n" -#: pg_amcheck.c:1048 pg_amcheck.c:1117 +#: pg_amcheck.c:1093 pg_amcheck.c:1162 #, c-format msgid "query was: %s\n" msgstr "запрос: %s\n" -#: pg_amcheck.c:1099 +#: pg_amcheck.c:1144 #, c-format msgid "" "btree index \"%s.%s.%s\": btree checking function returned unexpected number " @@ -222,17 +332,17 @@ msgstr "" "индекс btree \"%s.%s.%s\": функция проверки btree выдала неожиданное " "количество строк: %d" -#: pg_amcheck.c:1103 +#: pg_amcheck.c:1148 #, c-format msgid "Are %s's and amcheck's versions compatible?" msgstr "Совместимы ли версии %s и amcheck?" -#: pg_amcheck.c:1113 +#: pg_amcheck.c:1158 #, c-format msgid "btree index \"%s.%s.%s\":\n" msgstr "индекс btree \"%s.%s.%s\":\n" -#: pg_amcheck.c:1138 +#: pg_amcheck.c:1183 #, c-format msgid "" "%s checks objects in a PostgreSQL database for corruption.\n" @@ -241,17 +351,17 @@ msgstr "" "%s проверяет объекты в базе данных PostgreSQL на предмет повреждений.\n" "\n" -#: pg_amcheck.c:1139 +#: pg_amcheck.c:1184 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_amcheck.c:1140 +#: pg_amcheck.c:1185 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" -#: pg_amcheck.c:1141 +#: pg_amcheck.c:1186 #, c-format msgid "" "\n" @@ -260,77 +370,77 @@ msgstr "" "\n" "Параметры выбора объектов:\n" -#: pg_amcheck.c:1142 +#: pg_amcheck.c:1187 #, c-format msgid " -a, --all check all databases\n" msgstr " -a, --all проверить все базы\n" -#: pg_amcheck.c:1143 +#: pg_amcheck.c:1188 #, c-format msgid " -d, --database=PATTERN check matching database(s)\n" msgstr "" " -d, --database=ШАБЛОН проверить соответствующие шаблону базы\n" -#: pg_amcheck.c:1144 +#: pg_amcheck.c:1189 #, c-format msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr "" " -D, --exclude-database=ШАБЛОН не проверять соответствующие шаблону базы\n" -#: pg_amcheck.c:1145 +#: pg_amcheck.c:1190 #, c-format msgid " -i, --index=PATTERN check matching index(es)\n" msgstr "" " -i, --index=ШАБЛОН проверить соответствующие шаблону индексы\n" -#: pg_amcheck.c:1146 +#: pg_amcheck.c:1191 #, c-format msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" msgstr "" " -I, --exclude-index=ШАБЛОН не проверять соответствующие шаблону " "индексы\n" -#: pg_amcheck.c:1147 +#: pg_amcheck.c:1192 #, c-format msgid " -r, --relation=PATTERN check matching relation(s)\n" msgstr "" " -r, --relation=ШАБЛОН проверить соответствующие шаблону " "отношения\n" -#: pg_amcheck.c:1148 +#: pg_amcheck.c:1193 #, c-format msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" msgstr "" " -R, --exclude-relation=ШАБЛОН не проверять соответствующие шаблону " "отношения\n" -#: pg_amcheck.c:1149 +#: pg_amcheck.c:1194 #, c-format msgid " -s, --schema=PATTERN check matching schema(s)\n" msgstr "" " -s, --schema=ШАБЛОН проверить соответствующие шаблону схемы\n" -#: pg_amcheck.c:1150 +#: pg_amcheck.c:1195 #, c-format msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" msgstr "" " -S, --exclude-schema=ШАБЛОН не проверять соответствующие шаблону " "схемы\n" -#: pg_amcheck.c:1151 +#: pg_amcheck.c:1196 #, c-format msgid " -t, --table=PATTERN check matching table(s)\n" msgstr "" " -t, --table=ШАБЛОН проверить соответствующие шаблону таблицы\n" -#: pg_amcheck.c:1152 +#: pg_amcheck.c:1197 #, c-format msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" msgstr "" " -T, --exclude-table=ШАБЛОН не проверять соответствующие шаблону " "таблицы\n" -#: pg_amcheck.c:1153 +#: pg_amcheck.c:1198 #, c-format msgid "" " --no-dependent-indexes do NOT expand list of relations to include " @@ -339,7 +449,7 @@ msgstr "" " --no-dependent-indexes не включать в список проверяемых отношений " "индексы\n" -#: pg_amcheck.c:1154 +#: pg_amcheck.c:1199 #, c-format msgid "" " --no-dependent-toast do NOT expand list of relations to include " @@ -348,7 +458,7 @@ msgstr "" " --no-dependent-toast не включать в список проверяемых отношений " "TOAST-таблицы\n" -#: pg_amcheck.c:1155 +#: pg_amcheck.c:1200 #, c-format msgid "" " --no-strict-names do NOT require patterns to match objects\n" @@ -356,7 +466,7 @@ msgstr "" " --no-strict-names не требовать наличия объектов, " "соответствующих шаблонам\n" -#: pg_amcheck.c:1156 +#: pg_amcheck.c:1201 #, c-format msgid "" "\n" @@ -365,14 +475,14 @@ msgstr "" "\n" "Параметры проверки таблиц:\n" -#: pg_amcheck.c:1157 +#: pg_amcheck.c:1202 #, c-format msgid "" " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" msgstr "" " --exclude-toast-pointers не переходить по указателям в TOAST\n" -#: pg_amcheck.c:1158 +#: pg_amcheck.c:1203 #, c-format msgid "" " --on-error-stop stop checking at end of first corrupt " @@ -381,7 +491,7 @@ msgstr "" " --on-error-stop прекратить проверку по достижении конца " "первой повреждённой страницы\n" -#: pg_amcheck.c:1159 +#: pg_amcheck.c:1204 #, c-format msgid "" " --skip=OPTION do NOT check \"all-frozen\" or \"all-" @@ -390,7 +500,7 @@ msgstr "" " --skip=ТИП_БЛОКА не проверять блоки типа \"all-frozen\" или " "\"all-visible\"\n" -#: pg_amcheck.c:1160 +#: pg_amcheck.c:1205 #, c-format msgid "" " --startblock=BLOCK begin checking table(s) at the given block " @@ -400,7 +510,7 @@ msgstr "" "заданным номером\n" # skip-rule: no-space-before-parentheses -#: pg_amcheck.c:1161 +#: pg_amcheck.c:1206 #, c-format msgid "" " --endblock=BLOCK check table(s) only up to the given block " @@ -409,7 +519,7 @@ msgstr "" " --endblock=БЛОК проверить таблицы(у) до блока с заданным " "номером\n" -#: pg_amcheck.c:1162 +#: pg_amcheck.c:1207 #, c-format msgid "" "\n" @@ -418,7 +528,16 @@ msgstr "" "\n" "Параметры проверки индексов-B-деревьев:\n" -#: pg_amcheck.c:1163 +#: pg_amcheck.c:1208 +#, c-format +msgid "" +" --checkunique check unique constraint if index is " +"unique\n" +msgstr "" +" --checkunique проверить ограничение уникальности для " +"уникальных индексов\n" + +#: pg_amcheck.c:1209 #, c-format msgid "" " --heapallindexed check that all heap tuples are found " @@ -427,7 +546,7 @@ msgstr "" " --heapallindexed проверить, что всем кортежам кучи " "находится соответствие в индексах\n" -#: pg_amcheck.c:1164 +#: pg_amcheck.c:1210 #, c-format msgid "" " --parent-check check index parent/child relationships\n" @@ -435,7 +554,7 @@ msgstr "" " --parent-check проверить связи родитель/потомок в " "индексах\n" -#: pg_amcheck.c:1165 +#: pg_amcheck.c:1211 #, c-format msgid "" " --rootdescend search from root page to refind tuples\n" @@ -443,7 +562,7 @@ msgstr "" " --rootdescend перепроверять поиск кортежей от корневой " "страницы\n" -#: pg_amcheck.c:1166 +#: pg_amcheck.c:1212 #, c-format msgid "" "\n" @@ -452,42 +571,42 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_amcheck.c:1167 +#: pg_amcheck.c:1213 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" -" -h, --host=ИМЯ имя сервера баз данных или каталог " -"сокетов\n" +" -h, --host=ИМЯ компьютер с сервером баз данных или " +"каталог сокетов\n" -#: pg_amcheck.c:1168 +#: pg_amcheck.c:1214 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" -#: pg_amcheck.c:1169 +#: pg_amcheck.c:1215 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к " "серверу\n" -#: pg_amcheck.c:1170 +#: pg_amcheck.c:1216 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_amcheck.c:1171 +#: pg_amcheck.c:1217 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: pg_amcheck.c:1172 +#: pg_amcheck.c:1218 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=ИМЯ_БД другая опорная база данных\n" -#: pg_amcheck.c:1173 +#: pg_amcheck.c:1219 #, c-format msgid "" "\n" @@ -496,7 +615,7 @@ msgstr "" "\n" "Другие параметры:\n" -#: pg_amcheck.c:1174 +#: pg_amcheck.c:1220 #, c-format msgid "" " -e, --echo show the commands being sent to the " @@ -504,7 +623,7 @@ msgid "" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: pg_amcheck.c:1175 +#: pg_amcheck.c:1221 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " @@ -513,33 +632,33 @@ msgstr "" " -j, --jobs=ЧИСЛО устанавливать заданное число подключений к " "серверу\n" -#: pg_amcheck.c:1176 +#: pg_amcheck.c:1222 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показывать прогресс операции\n" -#: pg_amcheck.c:1177 +#: pg_amcheck.c:1223 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: pg_amcheck.c:1178 +#: pg_amcheck.c:1224 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_amcheck.c:1179 +#: pg_amcheck.c:1225 #, c-format msgid " --install-missing install missing extensions\n" msgstr " --install-missing установить недостающие расширения\n" -#: pg_amcheck.c:1180 +#: pg_amcheck.c:1226 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_amcheck.c:1182 +#: pg_amcheck.c:1228 #, c-format msgid "" "\n" @@ -548,53 +667,53 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_amcheck.c:1183 +#: pg_amcheck.c:1229 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: pg_amcheck.c:1236 +#: pg_amcheck.c:1282 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" msgstr "отношений: %*s/%s (%d%%), страниц: %*s/%s (%d%%) %*s" -#: pg_amcheck.c:1247 +#: pg_amcheck.c:1293 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" msgstr "отношений: %*s/%s (%d%%), страниц: %*s/%s (%d%%) (%s%-*.*s)" -#: pg_amcheck.c:1262 +#: pg_amcheck.c:1308 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" msgstr "отношений: %*s/%s (%d%%), страниц: %*s/%s (%d%%)" -#: pg_amcheck.c:1321 pg_amcheck.c:1354 +#: pg_amcheck.c:1367 pg_amcheck.c:1400 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" -#: pg_amcheck.c:1399 +#: pg_amcheck.c:1445 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неверное имя отношения (слишком много компонентов): %s" -#: pg_amcheck.c:1552 pg_amcheck.c:1691 +#: pg_amcheck.c:1598 pg_amcheck.c:1737 #, c-format msgid "including database \"%s\"" msgstr "выбирается база \"%s\"" -#: pg_amcheck.c:1673 +#: pg_amcheck.c:1719 #, c-format msgid "internal error: received unexpected database pattern_id %d" msgstr "внутренняя ошибка: получен неожиданный идентификатор шаблона базы %d" -#: pg_amcheck.c:1675 +#: pg_amcheck.c:1721 #, c-format msgid "no connectable databases to check matching \"%s\"" msgstr "" "не найдены подлежащие проверке доступные базы, соответствующие шаблону \"%s\"" -#: pg_amcheck.c:2133 +#: pg_amcheck.c:2179 #, c-format msgid "internal error: received unexpected relation pattern_id %d" msgstr "" diff --git a/src/bin/pg_amcheck/po/sv.po b/src/bin/pg_amcheck/po/sv.po index 2a9ee08207df0..6db26dc737657 100644 --- a/src/bin/pg_amcheck/po/sv.po +++ b/src/bin/pg_amcheck/po/sv.po @@ -1,14 +1,14 @@ # SWEDISH message translation file for pg_amcheck # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_amcheck (PostgreSQL) package. -# Dennis Björklund , 2021, 2022. +# Dennis Björklund , 2021, 2022, 2023, 2024. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-05-09 18:50+0000\n" -"PO-Revision-Date: 2023-09-05 08:59+0200\n" +"POT-Creation-Date: 2024-08-27 15:52+0000\n" +"PO-Revision-Date: 2024-08-27 18:29+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -16,31 +16,98 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:277 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "fel: " -#: ../../../src/common/logging.c:284 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "varning: " -#: ../../../src/common/logging.c:295 +#: ../../../src/common/logging.c:294 #, c-format msgid "detail: " msgstr "detalj: " -#: ../../../src/common/logging.c:302 +#: ../../../src/common/logging.c:301 #, c-format msgid "hint: " msgstr "tips: " -#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kan inte duplicera null-pekare (internt fel)\n" + +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "kunde inte göra stat() på fil \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "detta bygge stöder inte synkmetod \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "kunde inte öppna katalog \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "kunde inte läsa katalog \"%s\": %m" + +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "kunde inte fsync:a fil \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "kunde inte slå upp effektivt användar-id %ld: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "användaren finns inte" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "misslyckad sökning efter användarnamn: felkod %lu" + +#: ../../fe_utils/cancel.c:186 ../../fe_utils/cancel.c:235 msgid "Cancel request sent\n" msgstr "Förfrågan om avbrytning skickad\n" -#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +#: ../../fe_utils/cancel.c:187 ../../fe_utils/cancel.c:236 msgid "Could not send cancel request: " msgstr "Kunde inte skicka förfrågan om avbrytning: " @@ -49,7 +116,7 @@ msgstr "Kunde inte skicka förfrågan om avbrytning: " msgid "could not connect to database %s: out of memory" msgstr "kunde inte ansluta till databas %s: slut på minne" -#: ../../fe_utils/connect_utils.c:117 +#: ../../fe_utils/connect_utils.c:116 #, c-format msgid "%s" msgstr "%s" @@ -64,174 +131,214 @@ msgstr "ogiltigt värde \"%s\" för flaggan \"%s\"" msgid "%s must be in range %d..%d" msgstr "%s måste vara i intervallet %d..%d" +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "okänd synkmetod: %s" + +#: ../../fe_utils/parallel_slot.c:317 +#, c-format +msgid "too many jobs for this platform: %d" +msgstr "för många jobb för denna plattform: %d" + +#: ../../fe_utils/parallel_slot.c:326 +#, c-format +msgid "socket file descriptor out of range for select(): %d" +msgstr "deskriptor-index utanför sitt intervall för select(): %d" + +#: ../../fe_utils/parallel_slot.c:328 +#, c-format +msgid "Try fewer jobs." +msgstr "Försök med färre job." + +#: ../../fe_utils/parallel_slot.c:553 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "processande av databas \"%s\" misslyckades: %s" + #: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 -#: pg_amcheck.c:1645 pg_amcheck.c:2090 +#: pg_amcheck.c:1693 pg_amcheck.c:2138 #, c-format msgid "query failed: %s" msgstr "fråga misslyckades: %s" #: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 -#: pg_amcheck.c:571 pg_amcheck.c:1100 pg_amcheck.c:1646 pg_amcheck.c:2091 +#: pg_amcheck.c:578 pg_amcheck.c:1147 pg_amcheck.c:1694 pg_amcheck.c:2139 #, c-format msgid "Query was: %s" msgstr "Frågan var: %s" -#: pg_amcheck.c:399 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "shell-kommandots argument innehåller nyrad eller vagnretur: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "databasnamnet innehåller nyrad eller vagnretur: \"%s\"\n" + +#: pg_amcheck.c:403 #, c-format msgid "invalid argument for option %s" msgstr "ogiltigt argument för flaggan %s" -#: pg_amcheck.c:405 +#: pg_amcheck.c:409 #, c-format msgid "invalid start block" msgstr "ogiltigt startblock" -#: pg_amcheck.c:407 +#: pg_amcheck.c:411 #, c-format msgid "start block out of bounds" msgstr "startblocket utanför giltig gräns" -#: pg_amcheck.c:414 +#: pg_amcheck.c:418 #, c-format msgid "invalid end block" msgstr "ogiltigt slutblock" -#: pg_amcheck.c:416 +#: pg_amcheck.c:420 #, c-format msgid "end block out of bounds" msgstr "slutblocket utanför giltig gräns" -#: pg_amcheck.c:439 pg_amcheck.c:461 +#: pg_amcheck.c:446 pg_amcheck.c:468 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: pg_amcheck.c:445 +#: pg_amcheck.c:452 #, c-format msgid "end block precedes start block" msgstr "slutblocket kommer före startblocket" -#: pg_amcheck.c:459 +#: pg_amcheck.c:466 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "för många kommandoradsargument (första är \"%s\")" -#: pg_amcheck.c:479 +#: pg_amcheck.c:486 #, c-format msgid "cannot specify a database name with --all" msgstr "kan inte ange databasnamn tillsammans med --all" -#: pg_amcheck.c:485 +#: pg_amcheck.c:492 #, c-format msgid "cannot specify both a database name and database patterns" msgstr "kan inte ange både ett databasnamn och ett databasmönster" -#: pg_amcheck.c:513 +#: pg_amcheck.c:520 #, c-format msgid "no databases to check" msgstr "inga databaser att kontrollera" -#: pg_amcheck.c:569 +#: pg_amcheck.c:576 #, c-format msgid "database \"%s\": %s" msgstr "databas \"%s\": %s" -#: pg_amcheck.c:580 +#: pg_amcheck.c:587 #, c-format msgid "skipping database \"%s\": amcheck is not installed" msgstr "hoppar över databas \"%s\": amcheck är inte installerad" -#: pg_amcheck.c:588 +#: pg_amcheck.c:595 #, c-format msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" msgstr "i databas \"%s\": använder amcheck version \"%s\" i schema \"%s\"" -#: pg_amcheck.c:610 +#: pg_amcheck.c:624 +#, c-format +msgid "option %s is not supported by amcheck version %s" +msgstr "flaggan %s stöds inte av amcheck version %s" + +#: pg_amcheck.c:650 #, c-format msgid "no heap tables to check matching \"%s\"" msgstr "finns inga heap-tabeller för att kontrollera matchning \"%s\"" -#: pg_amcheck.c:613 +#: pg_amcheck.c:653 #, c-format msgid "no btree indexes to check matching \"%s\"" msgstr "finns inga btree-index för att kontrollera matching \"%s\"" -#: pg_amcheck.c:616 +#: pg_amcheck.c:656 #, c-format msgid "no relations to check in schemas matching \"%s\"" msgstr "finns inga relationer att kontrollera i schemamatchning \"%s\"" -#: pg_amcheck.c:619 +#: pg_amcheck.c:659 #, c-format msgid "no relations to check matching \"%s\"" msgstr "finns inga relations för att kontrollera matching \"%s\"" -#: pg_amcheck.c:647 +#: pg_amcheck.c:687 #, c-format msgid "no relations to check" msgstr "finns inga relationer att kontrollera" -#: pg_amcheck.c:730 +#: pg_amcheck.c:770 #, c-format msgid "checking heap table \"%s.%s.%s\"" msgstr "kontrollerar heap-tabell \"%s.%s.%s\"" -#: pg_amcheck.c:746 +#: pg_amcheck.c:786 #, c-format msgid "checking btree index \"%s.%s.%s\"" msgstr "kontrollerar btree-index \"%s.%s.%s\"" -#: pg_amcheck.c:893 +#: pg_amcheck.c:937 #, c-format msgid "error sending command to database \"%s\": %s" msgstr "fel vid skickande av kommando till databas \"%s\": %s" -#: pg_amcheck.c:896 +#: pg_amcheck.c:940 #, c-format msgid "Command was: %s" msgstr "Kommandot var: %s" -#: pg_amcheck.c:1013 +#: pg_amcheck.c:1060 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" msgstr "heap-tabell \"%s.%s.%s\", block %s, offset %s, attribut %s:\n" -#: pg_amcheck.c:1020 +#: pg_amcheck.c:1067 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" msgstr "heap-tabell \"%s.%s.%s\", block %s, offset %s:\n" -#: pg_amcheck.c:1026 +#: pg_amcheck.c:1073 #, c-format msgid "heap table \"%s.%s.%s\", block %s:\n" msgstr "heap-tabell \"%s.%s.%s\", block %s:\n" -#: pg_amcheck.c:1031 pg_amcheck.c:1042 +#: pg_amcheck.c:1078 pg_amcheck.c:1089 #, c-format msgid "heap table \"%s.%s.%s\":\n" msgstr "heap-tabell \"%s.%s.%s\":\n" -#: pg_amcheck.c:1046 pg_amcheck.c:1115 +#: pg_amcheck.c:1093 pg_amcheck.c:1162 #, c-format msgid "query was: %s\n" msgstr "frågan var: %s\n" -#: pg_amcheck.c:1097 +#: pg_amcheck.c:1144 #, c-format msgid "btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d" msgstr "btree-index \"%s.%s.%s\": kontrollfunktion för btree returnerade oväntat antal rader: %d" -#: pg_amcheck.c:1101 +#: pg_amcheck.c:1148 #, c-format msgid "Are %s's and amcheck's versions compatible?" msgstr "Är versionerna på %s och amcheck kompatibla?" -#: pg_amcheck.c:1111 +#: pg_amcheck.c:1158 #, c-format msgid "btree index \"%s.%s.%s\":\n" msgstr "btree-index \"%s.%s.%s\":\n" -#: pg_amcheck.c:1136 +#: pg_amcheck.c:1183 #, c-format msgid "" "%s checks objects in a PostgreSQL database for corruption.\n" @@ -240,17 +347,17 @@ msgstr "" "%s kontrollerar objekt i en PostgreSQL-database för att hitta korruption.\n" "\n" -#: pg_amcheck.c:1137 +#: pg_amcheck.c:1184 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_amcheck.c:1138 +#: pg_amcheck.c:1185 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [FLAGGA]... [DBNAMN]\n" -#: pg_amcheck.c:1139 +#: pg_amcheck.c:1186 #, c-format msgid "" "\n" @@ -259,77 +366,77 @@ msgstr "" "\n" "Flaggor för destinationen:\n" -#: pg_amcheck.c:1140 +#: pg_amcheck.c:1187 #, c-format msgid " -a, --all check all databases\n" msgstr " -a, --all kontrollera alla databaser\n" -#: pg_amcheck.c:1141 +#: pg_amcheck.c:1188 #, c-format msgid " -d, --database=PATTERN check matching database(s)\n" msgstr " -d, --database=MALL kontrollera matchande databas(er)\n" -#: pg_amcheck.c:1142 +#: pg_amcheck.c:1189 #, c-format msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr " -D, --exclude-database=MALL kontrollera INTE matchande databas(er)\n" -#: pg_amcheck.c:1143 +#: pg_amcheck.c:1190 #, c-format msgid " -i, --index=PATTERN check matching index(es)\n" msgstr " -i, --index=MALL kontrollera matchande index\n" -#: pg_amcheck.c:1144 +#: pg_amcheck.c:1191 #, c-format msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" msgstr " -I, --exclude-index=MALL kontrollera INTE matchande index\n" -#: pg_amcheck.c:1145 +#: pg_amcheck.c:1192 #, c-format msgid " -r, --relation=PATTERN check matching relation(s)\n" msgstr " -r, --relation=MALL kontrollera matchande relation(er)\n" -#: pg_amcheck.c:1146 +#: pg_amcheck.c:1193 #, c-format msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" msgstr " -R, --exclude-relation=MALL kontrollera INTE matchande relation(er)\n" -#: pg_amcheck.c:1147 +#: pg_amcheck.c:1194 #, c-format msgid " -s, --schema=PATTERN check matching schema(s)\n" msgstr " -s, --schema=MALL kontrollera matchande schema(n)\n" -#: pg_amcheck.c:1148 +#: pg_amcheck.c:1195 #, c-format msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" msgstr " -S, --exclude-schema=MALL kontrollera INTE matchande schema(n)\n" -#: pg_amcheck.c:1149 +#: pg_amcheck.c:1196 #, c-format msgid " -t, --table=PATTERN check matching table(s)\n" msgstr " -t, --table=MALL kontollera matchande tabell(er)\n" -#: pg_amcheck.c:1150 +#: pg_amcheck.c:1197 #, c-format msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" msgstr " -T, --exclude-table=MALL kontollera INTE matchande tabell(er)\n" -#: pg_amcheck.c:1151 +#: pg_amcheck.c:1198 #, c-format msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" msgstr " --no-dependent-indexes expandera INTE listan med relationer för att inkludera index\n" -#: pg_amcheck.c:1152 +#: pg_amcheck.c:1199 #, c-format msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" msgstr " --no-dependent-toast expandera inte listan av relationer för att inkludera TOAST-tabeller\n" -#: pg_amcheck.c:1153 +#: pg_amcheck.c:1200 #, c-format msgid " --no-strict-names do NOT require patterns to match objects\n" msgstr " --no-strict-names kräv INTE mallar för matcha objekt\n" -#: pg_amcheck.c:1154 +#: pg_amcheck.c:1201 #, c-format msgid "" "\n" @@ -338,32 +445,32 @@ msgstr "" "\n" "Flaggor för kontroll av tabeller:\n" -#: pg_amcheck.c:1155 +#: pg_amcheck.c:1202 #, c-format msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" msgstr " --exclude-toast-pointers följ INTE relationers TOAST-pekare\n" -#: pg_amcheck.c:1156 +#: pg_amcheck.c:1203 #, c-format msgid " --on-error-stop stop checking at end of first corrupt page\n" msgstr " --on-error-stop sluta kontrollera efter första korrupta sidan\n" -#: pg_amcheck.c:1157 +#: pg_amcheck.c:1204 #, c-format msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" msgstr " --skip=FLAGGA kontrollera INTE block som är \"all-frozen\" eller \"all-visible\"\n" -#: pg_amcheck.c:1158 +#: pg_amcheck.c:1205 #, c-format msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" msgstr " --startblock=BLOCK börja kontollera tabell(er) vid angivet blocknummer\n" -#: pg_amcheck.c:1159 +#: pg_amcheck.c:1206 #, c-format msgid " --endblock=BLOCK check table(s) only up to the given block number\n" msgstr " --endblock=BLOCK kontrollera tabell(er) fram till angivet blocknummer\n" -#: pg_amcheck.c:1160 +#: pg_amcheck.c:1207 #, c-format msgid "" "\n" @@ -372,22 +479,27 @@ msgstr "" "\n" "Flaggor för kontroll av B-tree-index:\n" -#: pg_amcheck.c:1161 +#: pg_amcheck.c:1208 +#, c-format +msgid " --checkunique check unique constraint if index is unique\n" +msgstr " --checkunique verifiera unik-villkor om indexet är unikt\n" + +#: pg_amcheck.c:1209 #, c-format msgid " --heapallindexed check that all heap tuples are found within indexes\n" msgstr " --heapallindexed kontrollera att alla heap-tupler hittas i index\n" -#: pg_amcheck.c:1162 +#: pg_amcheck.c:1210 #, c-format msgid " --parent-check check index parent/child relationships\n" msgstr " --parent-check kontrollera förhållandet mellan barn/förälder i index\n" -#: pg_amcheck.c:1163 +#: pg_amcheck.c:1211 #, c-format msgid " --rootdescend search from root page to refind tuples\n" msgstr " --rootdescend sök från root-sidan för att återfinna tupler\n" -#: pg_amcheck.c:1164 +#: pg_amcheck.c:1212 #, c-format msgid "" "\n" @@ -396,37 +508,37 @@ msgstr "" "\n" "Flaggor för anslutning:\n" -#: pg_amcheck.c:1165 +#: pg_amcheck.c:1213 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=VÄRDNAMN databasens värdnamn eller socketkatalog\n" -#: pg_amcheck.c:1166 +#: pg_amcheck.c:1214 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT databasserverns port\n" -#: pg_amcheck.c:1167 +#: pg_amcheck.c:1215 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=ANVÄNDARE användarnamn att ansluta som\n" -#: pg_amcheck.c:1168 +#: pg_amcheck.c:1216 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password fråga ej efter lösenord\n" -#: pg_amcheck.c:1169 +#: pg_amcheck.c:1217 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password tvinga fram lösenordsfråga\n" -#: pg_amcheck.c:1170 +#: pg_amcheck.c:1218 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAMN val av underhållsdatabas\n" -#: pg_amcheck.c:1171 +#: pg_amcheck.c:1219 #, c-format msgid "" "\n" @@ -435,42 +547,42 @@ msgstr "" "\n" "Andra flaggor:\n" -#: pg_amcheck.c:1172 +#: pg_amcheck.c:1220 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo visa kommandon som skickas till servern\n" -#: pg_amcheck.c:1173 +#: pg_amcheck.c:1221 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" msgstr " -j, --jobs=NUM antal samtidiga anslutningar till servern\n" -#: pg_amcheck.c:1174 +#: pg_amcheck.c:1222 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress visa förloppsinformation\n" -#: pg_amcheck.c:1175 +#: pg_amcheck.c:1223 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose skriv massor med utdata\n" -#: pg_amcheck.c:1176 +#: pg_amcheck.c:1224 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_amcheck.c:1177 +#: pg_amcheck.c:1225 #, c-format msgid " --install-missing install missing extensions\n" msgstr " --install-missing installera utökningar som saknas\n" -#: pg_amcheck.c:1178 +#: pg_amcheck.c:1226 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_amcheck.c:1180 +#: pg_amcheck.c:1228 #, c-format msgid "" "\n" @@ -479,68 +591,52 @@ msgstr "" "\n" "Rapportera fel till <%s>.\n" -#: pg_amcheck.c:1181 +#: pg_amcheck.c:1229 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_amcheck.c:1234 +#: pg_amcheck.c:1282 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" msgstr "%*s/%s relationer (%d%%), %*s/%s sidor (%d%%) %*s" -#: pg_amcheck.c:1245 +#: pg_amcheck.c:1293 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" msgstr "%*s/%s relationer (%d%%), %*s/%s sidor (%d%%) (%s%-*.*s)" -#: pg_amcheck.c:1260 +#: pg_amcheck.c:1308 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" msgstr "%*s/%s relationer (%d%%), %*s/%s sidor (%d%%)" -#: pg_amcheck.c:1319 pg_amcheck.c:1352 +#: pg_amcheck.c:1367 pg_amcheck.c:1400 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "ej korrekt kvalificerat namn (för många namn med punkt): %s" -#: pg_amcheck.c:1397 +#: pg_amcheck.c:1445 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "ej korrekt relationsnamn (för många namn med punkt): %s" -#: pg_amcheck.c:1550 pg_amcheck.c:1689 +#: pg_amcheck.c:1598 pg_amcheck.c:1737 #, c-format msgid "including database \"%s\"" msgstr "inkludera databas \"%s\"" -#: pg_amcheck.c:1671 +#: pg_amcheck.c:1719 #, c-format msgid "internal error: received unexpected database pattern_id %d" msgstr "internt fel: tog emot oväntat pattern_id %d för databas" -#: pg_amcheck.c:1673 +#: pg_amcheck.c:1721 #, c-format msgid "no connectable databases to check matching \"%s\"" msgstr "finns inga anslutningsbara databaser att kontrollera som matchar \"%s\"" -#: pg_amcheck.c:2131 +#: pg_amcheck.c:2179 #, c-format msgid "internal error: received unexpected relation pattern_id %d" msgstr "internt fel: tog emot oväntat pattern_id %d för relation" - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Försök med \"%s --help\" för mer information.\n" - -#, c-format -#~ msgid "command was: %s" -#~ msgstr "kommandot var: %s" - -#, c-format -#~ msgid "fatal: " -#~ msgstr "fatalt: " - -#, c-format -#~ msgid "number of parallel jobs must be at least 1" -#~ msgstr "antalet parallella jobb måste vara minst 1" diff --git a/src/bin/pg_amcheck/po/uk.po b/src/bin/pg_amcheck/po/uk.po index 601e0434da1e5..7ce979b0ea83b 100644 --- a/src/bin/pg_amcheck/po/uk.po +++ b/src/bin/pg_amcheck/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-12 10:50+0000\n" -"PO-Revision-Date: 2022-09-13 11:52\n" +"POT-Creation-Date: 2024-08-31 06:23+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_15_STABLE/pg_amcheck.pot\n" -"X-Crowdin-File-ID: 892\n" +"X-Crowdin-File: /REL_17_STABLE/pg_amcheck.pot\n" +"X-Crowdin-File-ID: 1036\n" #: ../../../src/common/logging.c:276 #, c-format @@ -37,11 +37,78 @@ msgstr "деталі: " msgid "hint: " msgstr "підказка: " -#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/file_utils.c:70 ../../common/file_utils.c:347 +#: ../../common/file_utils.c:406 ../../common/file_utils.c:480 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "ця збірка не підтримує метод синхронізації \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: ../../common/file_utils.c:418 ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "не можу знайти користувача з ефективним ID %ld: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "користувача не існує" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "невдала підстановка імені користувача: код помилки %lu" + +#: ../../fe_utils/cancel.c:186 ../../fe_utils/cancel.c:235 msgid "Cancel request sent\n" msgstr "Запит на скасування відправлений\n" -#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +#: ../../fe_utils/cancel.c:187 ../../fe_utils/cancel.c:236 msgid "Could not send cancel request: " msgstr "Не вдалося надіслати запит на скасування: " @@ -50,7 +117,7 @@ msgstr "Не вдалося надіслати запит на скасуван msgid "could not connect to database %s: out of memory" msgstr "не можливо під'єднатися до бази даних %s: не вистачає пам'яті" -#: ../../fe_utils/connect_utils.c:117 +#: ../../fe_utils/connect_utils.c:116 #, c-format msgid "%s" msgstr "%s" @@ -65,451 +132,496 @@ msgstr "неприпустиме значення \"%s\" для параметр msgid "%s must be in range %d..%d" msgstr "%s має бути в діапазоні %d..%d" +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нерозпізнаний метод синхронізації: %s" + +#: ../../fe_utils/parallel_slot.c:317 +#, c-format +msgid "too many jobs for this platform: %d" +msgstr "занадто багато завдань для цієї платформи: %d" + +#: ../../fe_utils/parallel_slot.c:326 +#, c-format +msgid "socket file descriptor out of range for select(): %d" +msgstr "дескриптор файлу сокету поза діапазоном для select(): %d" + +#: ../../fe_utils/parallel_slot.c:328 +#, c-format +msgid "Try fewer jobs." +msgstr "Спробуйте менше робочих завдань." + +#: ../../fe_utils/parallel_slot.c:553 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "обробка бази даних \"%s\" не вдалась: %s" + #: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 -#: pg_amcheck.c:1647 pg_amcheck.c:2092 +#: pg_amcheck.c:1693 pg_amcheck.c:2138 #, c-format msgid "query failed: %s" msgstr "запит не вдався: %s" #: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 -#: pg_amcheck.c:571 pg_amcheck.c:1102 pg_amcheck.c:1648 pg_amcheck.c:2093 +#: pg_amcheck.c:578 pg_amcheck.c:1147 pg_amcheck.c:1694 pg_amcheck.c:2139 #, c-format msgid "Query was: %s" msgstr "Запит був: %s" -#: pg_amcheck.c:399 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "аргумент командної оболонки містить символ нового рядка або повернення каретки: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "назва бази даних містить символ нового рядка або повернення каретки: \"%s\"\n" + +#: pg_amcheck.c:403 #, c-format msgid "invalid argument for option %s" msgstr "неприпустимий аргумент для параметру %s" -#: pg_amcheck.c:405 +#: pg_amcheck.c:409 #, c-format msgid "invalid start block" msgstr "неприпустимий початковий блок" -#: pg_amcheck.c:407 +#: pg_amcheck.c:411 #, c-format msgid "start block out of bounds" msgstr "початковий блок поза межами" -#: pg_amcheck.c:414 +#: pg_amcheck.c:418 #, c-format msgid "invalid end block" msgstr "неприпустимий кінцевий блок" -#: pg_amcheck.c:416 +#: pg_amcheck.c:420 #, c-format msgid "end block out of bounds" msgstr "кінцевий блок поза межами" -#: pg_amcheck.c:439 pg_amcheck.c:461 +#: pg_amcheck.c:446 pg_amcheck.c:468 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: pg_amcheck.c:445 +#: pg_amcheck.c:452 #, c-format msgid "end block precedes start block" msgstr "кінцевий блок передує початковому блоку" -#: pg_amcheck.c:459 +#: pg_amcheck.c:466 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: pg_amcheck.c:479 +#: pg_amcheck.c:486 #, c-format msgid "cannot specify a database name with --all" msgstr "не можна вказати назву бази даних з --all" -#: pg_amcheck.c:485 +#: pg_amcheck.c:492 #, c-format msgid "cannot specify both a database name and database patterns" msgstr "не можна вказати одночасно ім'я бази даних і шаблони бази даних" -#: pg_amcheck.c:513 +#: pg_amcheck.c:520 #, c-format msgid "no databases to check" msgstr "немає баз даних для перевірки" -#: pg_amcheck.c:569 +#: pg_amcheck.c:576 #, c-format msgid "database \"%s\": %s" msgstr "база даних \"%s\": %s" -#: pg_amcheck.c:580 +#: pg_amcheck.c:587 #, c-format msgid "skipping database \"%s\": amcheck is not installed" msgstr "пропуск бази даних \"%s\": amcheck не встановлено" -#: pg_amcheck.c:588 +#: pg_amcheck.c:595 #, c-format msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" msgstr "у базі даних \"%s\": використовується amcheck версії \"%s\" у схемі \"%s\"" -#: pg_amcheck.c:610 +#: pg_amcheck.c:624 +#, c-format +msgid "option %s is not supported by amcheck version %s" +msgstr "параметр %s не підтримується у версії amcheck %s" + +#: pg_amcheck.c:650 #, c-format msgid "no heap tables to check matching \"%s\"" msgstr "немає таблиць в динамічній пам'яті для перевірки відповідності \"%s\"" -#: pg_amcheck.c:613 +#: pg_amcheck.c:653 #, c-format msgid "no btree indexes to check matching \"%s\"" msgstr "немає індексів btree для перевірки відповідності \"%s\"" -#: pg_amcheck.c:616 +#: pg_amcheck.c:656 #, c-format msgid "no relations to check in schemas matching \"%s\"" msgstr "немає відношень для перевірки в схемах, відповідних \"%s\"" -#: pg_amcheck.c:619 +#: pg_amcheck.c:659 #, c-format msgid "no relations to check matching \"%s\"" msgstr "немає відношень для перевірки відповідності \"%s\"" -#: pg_amcheck.c:647 +#: pg_amcheck.c:687 #, c-format msgid "no relations to check" msgstr "немає зв'язків для перевірки" -#: pg_amcheck.c:730 +#: pg_amcheck.c:770 #, c-format msgid "checking heap table \"%s.%s.%s\"" msgstr "перевірка таблиць динамічної пам'яті \"%s.%s.%s\"" -#: pg_amcheck.c:746 +#: pg_amcheck.c:786 #, c-format msgid "checking btree index \"%s.%s.%s\"" msgstr "перевірка індексу btree \"%s.%s.%s\"" -#: pg_amcheck.c:893 +#: pg_amcheck.c:937 #, c-format msgid "error sending command to database \"%s\": %s" msgstr "помилка надсилання команди до бази даних \"%s: %s" -#: pg_amcheck.c:896 +#: pg_amcheck.c:940 #, c-format msgid "Command was: %s" msgstr "Команда була: %s" -#: pg_amcheck.c:1015 +#: pg_amcheck.c:1060 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" msgstr "таблиця динамічної пам'яті \"%s.%s.%s\", блок %s, зсув %s, атрибут %s:\n" -#: pg_amcheck.c:1022 +#: pg_amcheck.c:1067 #, c-format msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" msgstr "таблиця динамічної пам'яті \"%s.%s.%s\", блок %s, зсув %s:\n" -#: pg_amcheck.c:1028 +#: pg_amcheck.c:1073 #, c-format msgid "heap table \"%s.%s.%s\", block %s:\n" msgstr "таблиця динамічної пам'яті \"%s.%s.%s\", блок %s:\n" -#: pg_amcheck.c:1033 pg_amcheck.c:1044 +#: pg_amcheck.c:1078 pg_amcheck.c:1089 #, c-format msgid "heap table \"%s.%s.%s\":\n" msgstr "таблиця динамічної пам'яті \"%s.%s.%s\":\n" -#: pg_amcheck.c:1048 pg_amcheck.c:1117 +#: pg_amcheck.c:1093 pg_amcheck.c:1162 #, c-format msgid "query was: %s\n" msgstr "запит був: %s\n" -#: pg_amcheck.c:1099 +#: pg_amcheck.c:1144 #, c-format msgid "btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d" msgstr "індекс btree \"%s.%s.%s\": функція перевірки btree повернула неочікувану кількість рядків: %d" -#: pg_amcheck.c:1103 +#: pg_amcheck.c:1148 #, c-format msgid "Are %s's and amcheck's versions compatible?" msgstr "Чи сумісні версії %s і amcheck?" -#: pg_amcheck.c:1113 +#: pg_amcheck.c:1158 #, c-format msgid "btree index \"%s.%s.%s\":\n" msgstr "індекс btree \"%s.%s.%s\":\n" -#: pg_amcheck.c:1138 +#: pg_amcheck.c:1183 #, c-format msgid "%s checks objects in a PostgreSQL database for corruption.\n\n" msgstr "%s перевіряє об'єкти бази даних PostgreSQL на пошкодження.\n\n" -#: pg_amcheck.c:1139 +#: pg_amcheck.c:1184 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_amcheck.c:1140 +#: pg_amcheck.c:1185 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_amcheck.c:1141 +#: pg_amcheck.c:1186 #, c-format msgid "\n" "Target options:\n" msgstr "\n" "Цільові параметри:\n" -#: pg_amcheck.c:1142 +#: pg_amcheck.c:1187 #, c-format msgid " -a, --all check all databases\n" msgstr " -a, --all перевірити всі бази даних\n" -#: pg_amcheck.c:1143 +#: pg_amcheck.c:1188 #, c-format msgid " -d, --database=PATTERN check matching database(s)\n" msgstr " -d, --database=PATTERN перевірити відповідні бази даних\n" -#: pg_amcheck.c:1144 +#: pg_amcheck.c:1189 #, c-format msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr " -D, --exclude-database=PATTERN НЕ перевіряти відповідні бази даних\n" -#: pg_amcheck.c:1145 +#: pg_amcheck.c:1190 #, c-format msgid " -i, --index=PATTERN check matching index(es)\n" msgstr " -i, --index=PATTERN перевірити відповідні індекси\n" -#: pg_amcheck.c:1146 +#: pg_amcheck.c:1191 #, c-format msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" msgstr " -I, --exclude-index=PATTERN НЕ перевіряти відповідні індекси\n" -#: pg_amcheck.c:1147 +#: pg_amcheck.c:1192 #, c-format msgid " -r, --relation=PATTERN check matching relation(s)\n" msgstr " -r, --relation=PATTERN перевірити відповідні відношення\n" -#: pg_amcheck.c:1148 +#: pg_amcheck.c:1193 #, c-format msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" msgstr " -R, --exclude-relation=PATTERN НЕ перевіряти відповідні відношення\n" -#: pg_amcheck.c:1149 +#: pg_amcheck.c:1194 #, c-format msgid " -s, --schema=PATTERN check matching schema(s)\n" msgstr " -s, --schema=PATTERN перевірити відповідні схеми\n" -#: pg_amcheck.c:1150 +#: pg_amcheck.c:1195 #, c-format msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" msgstr " -S, --exclude-schema=PATTERN НЕ перевіряти відповідні схеми\n" -#: pg_amcheck.c:1151 +#: pg_amcheck.c:1196 #, c-format msgid " -t, --table=PATTERN check matching table(s)\n" msgstr " -t, --table=PATTERN перевірити відповідні таблиці\n" -#: pg_amcheck.c:1152 +#: pg_amcheck.c:1197 #, c-format msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" msgstr " -T, --exclude-table=PATTERN НЕ перевіряти відповідні таблиці\n" -#: pg_amcheck.c:1153 +#: pg_amcheck.c:1198 #, c-format msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" msgstr " --no-dependent-indexes НЕ розширювати список відносин, щоб включити індекси\n" -#: pg_amcheck.c:1154 +#: pg_amcheck.c:1199 #, c-format msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" msgstr " --no-dependent-toast НЕ розширювати список відносин, щоб включити таблиці TOAST\n" -#: pg_amcheck.c:1155 +#: pg_amcheck.c:1200 #, c-format msgid " --no-strict-names do NOT require patterns to match objects\n" msgstr " --no-strict-names НЕ вимагати відповідності шаблонів об'єктам\n" -#: pg_amcheck.c:1156 +#: pg_amcheck.c:1201 #, c-format msgid "\n" "Table checking options:\n" msgstr "\n" "Параметри перевірки таблиць:\n" -#: pg_amcheck.c:1157 +#: pg_amcheck.c:1202 #, c-format msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" msgstr " --exclude-toast-pointers НЕ слідувати покажчикам відношень TOAST\n" -#: pg_amcheck.c:1158 +#: pg_amcheck.c:1203 #, c-format msgid " --on-error-stop stop checking at end of first corrupt page\n" msgstr " --on-error-stop зупинити перевірку наприкінці першої пошкодженої сторінки\n" -#: pg_amcheck.c:1159 +#: pg_amcheck.c:1204 #, c-format msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" msgstr " --skip=OPTION НЕ перевіряти \"всі заморожені\" або \"всі видимі\" блоки\n" -#: pg_amcheck.c:1160 +#: pg_amcheck.c:1205 #, c-format msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" msgstr " --startblock=BLOCK почати перевірку таблиць за поданим номером блоку\n" -#: pg_amcheck.c:1161 +#: pg_amcheck.c:1206 #, c-format msgid " --endblock=BLOCK check table(s) only up to the given block number\n" msgstr " --endblock=BLOCK перевіряти таблиці лише до поданого номеру блоку\n" -#: pg_amcheck.c:1162 +#: pg_amcheck.c:1207 #, c-format msgid "\n" "B-tree index checking options:\n" msgstr "\n" "Параметри перевірки індексів B-tree:\n" -#: pg_amcheck.c:1163 +#: pg_amcheck.c:1208 +#, c-format +msgid " --checkunique check unique constraint if index is unique\n" +msgstr " --checkunique перевіряємо обмеження unique, якщо індекс унікальний\n" + +#: pg_amcheck.c:1209 #, c-format msgid " --heapallindexed check that all heap tuples are found within indexes\n" msgstr " --heapallindexed перевірити чи всі кортежі динамічної пам'яті містяться в індексах\n" -#: pg_amcheck.c:1164 +#: pg_amcheck.c:1210 #, c-format msgid " --parent-check check index parent/child relationships\n" msgstr " --parent-check перевірити індекс батьківських/дочірніх відносин\n" -#: pg_amcheck.c:1165 +#: pg_amcheck.c:1211 #, c-format msgid " --rootdescend search from root page to refind tuples\n" msgstr " --rootdescend шукати з кореневої сторінки, для повторного пошуку кортежів\n" -#: pg_amcheck.c:1166 +#: pg_amcheck.c:1212 #, c-format msgid "\n" "Connection options:\n" msgstr "\n" "Налаштування з'єднання:\n" -#: pg_amcheck.c:1167 +#: pg_amcheck.c:1213 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME хост сервера бази даних або каталог сокетів\n" -#: pg_amcheck.c:1168 +#: pg_amcheck.c:1214 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT порт серверу бази даних\n" -#: pg_amcheck.c:1169 +#: pg_amcheck.c:1215 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME ім'я користувача для з'єднання з сервером\n" -#: pg_amcheck.c:1170 +#: pg_amcheck.c:1216 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ніколи не запитувати пароль\n" -#: pg_amcheck.c:1171 +#: pg_amcheck.c:1217 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password примусовий запит пароля\n" -#: pg_amcheck.c:1172 +#: pg_amcheck.c:1218 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME база даних альтернативного обслуговування\n" -#: pg_amcheck.c:1173 +#: pg_amcheck.c:1219 #, c-format msgid "\n" "Other options:\n" msgstr "\n" "Інші параметри:\n" -#: pg_amcheck.c:1174 +#: pg_amcheck.c:1220 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo показати команди, надіслані серверу\n" -#: pg_amcheck.c:1175 +#: pg_amcheck.c:1221 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" msgstr " -j, --jobs=NUM використати цю кількість одночасних з'єднань з сервером\n" -#: pg_amcheck.c:1176 +#: pg_amcheck.c:1222 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показати інформацію про прогрес\n" -#: pg_amcheck.c:1177 +#: pg_amcheck.c:1223 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose виводити багато інформації\n" -#: pg_amcheck.c:1178 +#: pg_amcheck.c:1224 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: pg_amcheck.c:1179 +#: pg_amcheck.c:1225 #, c-format msgid " --install-missing install missing extensions\n" msgstr " --install-missing встановити відсутні розширення\n" -#: pg_amcheck.c:1180 +#: pg_amcheck.c:1226 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю справку, потім вийти\n" -#: pg_amcheck.c:1182 +#: pg_amcheck.c:1228 #, c-format msgid "\n" "Report bugs to <%s>.\n" msgstr "\n" "Повідомляти про помилки на <%s>.\n" -#: pg_amcheck.c:1183 +#: pg_amcheck.c:1229 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: pg_amcheck.c:1236 +#: pg_amcheck.c:1282 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" msgstr "%*s/%s відношень (%d%%), %*s/%s сторінок (%d%%) %*s" -#: pg_amcheck.c:1247 +#: pg_amcheck.c:1293 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" msgstr "%*s/%s відношень (%d%%), %*s/%s сторінок (%d%%) (%s%-*.*s)" -#: pg_amcheck.c:1262 +#: pg_amcheck.c:1308 #, c-format msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" msgstr "%*s/%s відношень (%d%%), %*s/%s сторінок (%d%%)" -#: pg_amcheck.c:1321 pg_amcheck.c:1354 +#: pg_amcheck.c:1367 pg_amcheck.c:1400 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неправильне повне ім'я (забагато компонентів): %s" -#: pg_amcheck.c:1399 +#: pg_amcheck.c:1445 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неправильне ім'я зв'язку (забагато компонентів): %s" -#: pg_amcheck.c:1552 pg_amcheck.c:1691 +#: pg_amcheck.c:1598 pg_amcheck.c:1737 #, c-format msgid "including database \"%s\"" msgstr "включаючи базу даних \"%s\"" -#: pg_amcheck.c:1673 +#: pg_amcheck.c:1719 #, c-format msgid "internal error: received unexpected database pattern_id %d" msgstr "внутрішня помилка: отримано неочікувану помилку шаблону бази даних %d" -#: pg_amcheck.c:1675 +#: pg_amcheck.c:1721 #, c-format msgid "no connectable databases to check matching \"%s\"" msgstr "немає бази даних для підключення, щоб перевірити відповідність\"%s\"" -#: pg_amcheck.c:2133 +#: pg_amcheck.c:2179 #, c-format msgid "internal error: received unexpected relation pattern_id %d" msgstr "внутрішня помилка: отримано неочікувану помилку шаблону відношення %d" diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl index 2a3af2666f52a..72693660fb64b 100644 --- a/src/bin/pg_amcheck/t/004_verify_heapam.pl +++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl @@ -529,7 +529,7 @@ sub header $tup->{t_infomask2} |= HEAP_NATTS_MASK; push @expected, - qr/${$header}number of attributes 2047 exceeds maximum expected for table 3/; + qr/${$header}number of attributes 2047 exceeds maximum 3 expected for table/; } elsif ($offnum == 10) { @@ -552,7 +552,7 @@ sub header $tup->{t_hoff} = 32; push @expected, - qr/${$header}number of attributes 67 exceeds maximum expected for table 3/; + qr/${$header}number of attributes 67 exceeds maximum 3 expected for table/; } elsif ($offnum == 12) { diff --git a/src/bin/pg_archivecleanup/po/de.po b/src/bin/pg_archivecleanup/po/de.po index ff82851e552cd..78f867ca0fd64 100644 --- a/src/bin/pg_archivecleanup/po/de.po +++ b/src/bin/pg_archivecleanup/po/de.po @@ -1,14 +1,14 @@ # pg_archivecleanup message translation file for pg_archivecleanup -# Copyright (C) 2019-2024 PostgreSQL Global Development Group +# Copyright (C) 2019-2025 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2019 - 2024. +# Peter Eisentraut , 2019 - 2025. # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 17\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-16 07:53+0000\n" -"PO-Revision-Date: 2024-04-04 11:48+0200\n" +"POT-Creation-Date: 2025-03-06 09:23+0000\n" +"PO-Revision-Date: 2025-03-06 12:11+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,22 +16,22 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "Detail: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "Tipp: " @@ -47,43 +47,43 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: pg_archivecleanup.c:68 +#: pg_archivecleanup.c:69 #, c-format msgid "archive location \"%s\" does not exist" msgstr "Archivverzeichnis »%s« existiert nicht" -#: pg_archivecleanup.c:100 +#: pg_archivecleanup.c:101 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "konnte Archivverzeichnis »%s« nicht öffnen: %m" -#: pg_archivecleanup.c:164 +#: pg_archivecleanup.c:165 #, c-format msgid "could not remove file \"%s\": %m" msgstr "konnte Datei »%s« nicht löschen: %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:170 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "konnte Archivverzeichnis »%s« nicht lesen: %m" -#: pg_archivecleanup.c:172 +#: pg_archivecleanup.c:173 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "konnte Archivverzeichnis »%s« nicht schließen: %m" -#: pg_archivecleanup.c:245 +#: pg_archivecleanup.c:246 #, c-format msgid "invalid file name argument" msgstr "ungültiges Dateinamenargument" -#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 -#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 +#: pg_archivecleanup.c:247 pg_archivecleanup.c:335 pg_archivecleanup.c:355 +#: pg_archivecleanup.c:367 pg_archivecleanup.c:374 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:260 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -92,17 +92,17 @@ msgstr "" "%s entfernt alte WAL-Dateien aus PostgreSQL-Archiven.\n" "\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:261 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:262 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [OPTION]... ARCHIVVERZEICHNIS ÄLTESTE-ZU-BEHALTENE-WALDATEI\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:263 #, c-format msgid "" "\n" @@ -111,29 +111,29 @@ msgstr "" "\n" "Optionen:\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:264 #, c-format msgid " -b, --clean-backup-history clean up files including backup history files\n" msgstr " -b, --clean-backup-history Dateien einschließlich Backup-History-Dateien aufräumen\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:265 #, c-format msgid " -d, --debug generate debug output (verbose mode)\n" msgstr " -d, --debug Debug-Ausgaben erzeugen (Verbose-Modus)\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:266 #, c-format msgid "" " -n, --dry-run dry run, show the names of the files that would be\n" " removed\n" msgstr " -n, --dry-run Probelauf, Namen der Dateien anzeigen, die entfernt würden\n" -#: pg_archivecleanup.c:267 +#: pg_archivecleanup.c:268 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_archivecleanup.c:268 +#: pg_archivecleanup.c:269 #, c-format msgid "" " -x, --strip-extension=EXT strip this extension before identifying files for\n" @@ -142,27 +142,27 @@ msgstr "" " -x, --strip-extension=ERW diese Erweiterung entfernen, bevor aufzuräumende\n" " Dateien bestimmt werden\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:271 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_archivecleanup.c:271 +#: pg_archivecleanup.c:272 #, c-format msgid "" "\n" -"For use as archive_cleanup_command in postgresql.conf:\n" +"For use as \"archive_cleanup_command\" in postgresql.conf:\n" " archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %%r'\n" "e.g.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" msgstr "" "\n" -"Verwendung als archive_cleanup_command in postgresql.conf:\n" +"Verwendung als »archive_cleanup_command« in postgresql.conf:\n" " archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVVERZ %%r'\n" "z.B.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiv %%r'\n" -#: pg_archivecleanup.c:276 +#: pg_archivecleanup.c:277 #, c-format msgid "" "\n" @@ -175,7 +175,7 @@ msgstr "" "z.B.\n" " pg_archivecleanup /mnt/server/archiv 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:280 +#: pg_archivecleanup.c:281 #, c-format msgid "" "\n" @@ -184,22 +184,22 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_archivecleanup.c:281 +#: pg_archivecleanup.c:282 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_archivecleanup.c:353 +#: pg_archivecleanup.c:354 #, c-format msgid "must specify archive location" msgstr "Archivverzeichnis muss angegeben werden" -#: pg_archivecleanup.c:365 +#: pg_archivecleanup.c:366 #, c-format msgid "must specify oldest kept WAL file" msgstr "älteste zu behaltene WAL-Datei muss angegeben werden" -#: pg_archivecleanup.c:372 +#: pg_archivecleanup.c:373 #, c-format msgid "too many command-line arguments" msgstr "zu viele Kommandozeilenargumente" diff --git a/src/bin/pg_archivecleanup/po/es.po b/src/bin/pg_archivecleanup/po/es.po index 902f4a849d7a1..bac039fa0539b 100644 --- a/src/bin/pg_archivecleanup/po/es.po +++ b/src/bin/pg_archivecleanup/po/es.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 16\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:21+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2025-02-16 19:52+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -38,43 +38,54 @@ msgstr "detalle: " msgid "hint: " msgstr "consejo: " -#: pg_archivecleanup.c:66 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" msgstr "ubicación de archivador «%s» no existe" -#: pg_archivecleanup.c:151 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "no se pudo abrir la ubicación del archivador «%s»: %m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: pg_archivecleanup.c:157 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "no se pudo leer la ubicación del archivador «%s»: %m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "no se pudo cerrar la ubicación del archivador «%s»: %m" -#: pg_archivecleanup.c:164 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "no se pudo abrir la ubicación del archivador «%s»: %m" - -#: pg_archivecleanup.c:237 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "el nombre de archivo usado como argumento no es válido" -#: pg_archivecleanup.c:238 pg_archivecleanup.c:313 pg_archivecleanup.c:333 -#: pg_archivecleanup.c:345 pg_archivecleanup.c:352 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: pg_archivecleanup.c:251 +#: pg_archivecleanup.c:259 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -83,17 +94,17 @@ msgstr "" "%s elimina archivos de WAL antiguos del archivador de PostgreSQL.\n" "\n" -#: pg_archivecleanup.c:252 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_archivecleanup.c:253 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [OPCIÓN].... UBICACIÓNARCHIVADOR WALMÁSANTIGUOAMANTENER\n" -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:262 #, c-format msgid "" "\n" @@ -102,32 +113,43 @@ msgstr "" "\n" "Opciones:\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:263 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d genera salida de depuración (modo verboso)\n" +msgid " -b, --clean-backup-history clean up files including backup history files\n" +msgstr " -, --clean-backup-history limpia archivos incluyendo archivos de historia de backup\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:264 #, c-format -msgid " -n dry run, show the names of the files that would be removed\n" -msgstr " -n simulacro, muestra el nombre de los archivos que se eliminarían\n" +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr " -d, --debug genera salida de depuración (modo verboso)\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:265 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version muestra información de la versión, luego sale\n" +msgid "" +" -n, --dry-run dry run, show the names of the files that would be\n" +" removed\n" +msgstr " -n, --dry-run simulacro, muestra el nombre de los archivos que se eliminarían\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:267 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x EXT hace limpieza de archivos que tengan esta extensión\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar la información de la versión, luego salir\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:268 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help muestra esta ayuda, luego sale\n" +msgid "" +" -x, --strip-extension=EXT strip this extension before identifying files for\n" +" clean up\n" +msgstr "" +" -x, --strip-extension=EXT quitar esta extensión antes de identificar archivos\n" +" a limpiar\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:270 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help muestra esta ayuda, luego salir\n" + +#: pg_archivecleanup.c:271 #, c-format msgid "" "\n" @@ -142,7 +164,7 @@ msgstr "" "por ej.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/servidor/directorioarchivador %%r'\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:276 #, c-format msgid "" "\n" @@ -155,7 +177,7 @@ msgstr "" "por ej.\n" " pg_archivecleanup /mnt/servidor/directorioarchivador 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:269 +#: pg_archivecleanup.c:280 #, c-format msgid "" "\n" @@ -164,22 +186,22 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_archivecleanup.c:332 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "debe especificar la ubicación del archivador" -#: pg_archivecleanup.c:344 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" msgstr "debe especificar el fichero WAL más antiguo a mantener" -#: pg_archivecleanup.c:351 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "demasiados argumentos de línea de órdenes" diff --git a/src/bin/pg_archivecleanup/po/fr.po b/src/bin/pg_archivecleanup/po/fr.po index 0ac310cc7012a..392e6e64d5f60 100644 --- a/src/bin/pg_archivecleanup/po/fr.po +++ b/src/bin/pg_archivecleanup/po/fr.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-04-12 05:16+0000\n" -"PO-Revision-Date: 2022-04-12 17:29+0200\n" +"POT-Creation-Date: 2024-07-20 21:23+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -19,65 +19,76 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:273 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:280 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "attention : " -#: ../../../src/common/logging.c:291 +#: ../../../src/common/logging.c:294 #, c-format msgid "detail: " msgstr "détail : " -#: ../../../src/common/logging.c:298 +#: ../../../src/common/logging.c:301 #, c-format msgid "hint: " msgstr "astuce : " -#: pg_archivecleanup.c:66 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "mémoire épuisée\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" msgstr "l'emplacement d'archivage « %s » n'existe pas" -#: pg_archivecleanup.c:151 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "n'a pas pu ouvrir l'emplacement de l'archive « %s » : %m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" -#: pg_archivecleanup.c:157 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "n'a pas pu lire l'emplacement de l'archive « %s » : %m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "n'a pas pu fermer l'emplacement de l'archive « %s » : %m" -#: pg_archivecleanup.c:164 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "n'a pas pu ouvrir l'emplacement de l'archive « %s » : %m" - -#: pg_archivecleanup.c:237 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "argument du nom de fichier invalide" -#: pg_archivecleanup.c:238 pg_archivecleanup.c:313 pg_archivecleanup.c:333 -#: pg_archivecleanup.c:345 pg_archivecleanup.c:352 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: pg_archivecleanup.c:251 +#: pg_archivecleanup.c:259 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -86,17 +97,17 @@ msgstr "" "%s supprime les anciens fichiers WAL des archives de PostgreSQL.\n" "\n" -#: pg_archivecleanup.c:252 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_archivecleanup.c:253 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [OPTION]... EMPLACEMENTARCHIVE PLUSANCIENFICHIERWALCONSERVÉ\n" -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:262 #, c-format msgid "" "\n" @@ -105,32 +116,41 @@ msgstr "" "\n" "Options :\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:263 +#, c-format +msgid " -b, --clean-backup-history clean up files including backup history files\n" +msgstr " -b, --clean-backup-history nettoie les fichiers, y compris les historiques de sauvegarde\n" + +#: pg_archivecleanup.c:264 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d affiche des informations de débugage (mode verbeux)\n" +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr " -d, --debug affiche des informations de débogage (mode verbeux)\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:265 #, c-format -msgid " -n dry run, show the names of the files that would be removed\n" -msgstr " -n test, affiche le nom des fichiers qui seraient supprimés\n" +msgid "" +" -n, --dry-run dry run, show the names of the files that would be\n" +" removed\n" +msgstr " -n, --dry-run test, affiche le nom des fichiers qui seraient supprimés\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:267 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version affiche la version et quitte\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version, puis quitte\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:268 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x EXT nettoie les fichiers s'ils ont cette extension\n" +msgid "" +" -x, --strip-extension=EXT strip this extension before identifying files for\n" +" clean up\n" +msgstr " -x, --strip-extension=EXT supprime cette extension avant d'identifier les fichiers pour nettoyage\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:270 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help affiche cette aide et quitte\n" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide, puis quitte\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:271 #, c-format msgid "" "\n" @@ -145,7 +165,7 @@ msgstr "" "Par exemple :\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/serveur/reparchives %%r'\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:276 #, c-format msgid "" "\n" @@ -158,7 +178,7 @@ msgstr "" "Par exemple :\n" " pg_archivecleanup /mnt/serveur/reparchives 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:269 +#: pg_archivecleanup.c:280 #, c-format msgid "" "\n" @@ -167,52 +187,22 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: pg_archivecleanup.c:332 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "doit spécifier l'emplacement de l'archive" -#: pg_archivecleanup.c:344 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" msgstr "doit spécifier le plus ancien journal de transactions conservé" -#: pg_archivecleanup.c:351 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "trop d'arguments en ligne de commande" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" - -#~ msgid "%s: ERROR: could not remove file \"%s\": %s\n" -#~ msgstr "%s : ERREUR : n'a pas pu supprimer le fichier « %s » : %s\n" - -#~ msgid "%s: file \"%s\" would be removed\n" -#~ msgstr "%s : le fichier « %s » serait supprimé\n" - -#~ msgid "%s: keeping WAL file \"%s\" and later\n" -#~ msgstr "%s : conservation du fichier WAL « %s » et des suivants\n" - -#~ msgid "%s: removing file \"%s\"\n" -#~ msgstr "%s : suppression du fichier « %s »\n" - -#~ msgid "%s: too many parameters\n" -#~ msgstr "%s : trop de paramètres\n" - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Essayez « %s --help » pour plus d'informations.\n" - -#, c-format -#~ msgid "fatal: " -#~ msgstr "fatal : " diff --git a/src/bin/pg_archivecleanup/po/ja.po b/src/bin/pg_archivecleanup/po/ja.po index 57886bc8df0d9..f601cfc4376b3 100644 --- a/src/bin/pg_archivecleanup/po/ja.po +++ b/src/bin/pg_archivecleanup/po/ja.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL 17)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-01-09 10:22+0900\n" -"PO-Revision-Date: 2024-01-09 11:54+0900\n" +"POT-Creation-Date: 2024-09-05 09:59+0900\n" +"PO-Revision-Date: 2024-09-05 10:38+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -17,63 +17,74 @@ msgstr "" "X-Generator: Poedit 1.8.13\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:278 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:285 #, c-format msgid "warning: " msgstr "警告: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:296 #, c-format msgid "detail: " msgstr "詳細: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:303 #, c-format msgid "hint: " msgstr "ヒント: " -#: pg_archivecleanup.c:68 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "メモリ不足です\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "nullポインタは複製できません(内部エラー)\n" + +#: pg_archivecleanup.c:69 #, c-format msgid "archive location \"%s\" does not exist" msgstr "アーカイブの場所\"%s\"が存在しません" -#: pg_archivecleanup.c:100 +#: pg_archivecleanup.c:101 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "アーカイブの場所\"%s\"をオープンできませんでした: %m" -#: pg_archivecleanup.c:164 +#: pg_archivecleanup.c:165 #, c-format msgid "could not remove file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:170 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "アーカイブの場所\"%s\"を読み込めませんでした: %m" -#: pg_archivecleanup.c:172 +#: pg_archivecleanup.c:173 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "アーカイブの場所\"%s\"をクローズできませんでした: %m" -#: pg_archivecleanup.c:245 +#: pg_archivecleanup.c:246 #, c-format msgid "invalid file name argument" msgstr "ファイル名引数が無効です" -#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 -#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 +#: pg_archivecleanup.c:247 pg_archivecleanup.c:335 pg_archivecleanup.c:355 +#: pg_archivecleanup.c:367 pg_archivecleanup.c:374 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:260 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -82,17 +93,17 @@ msgstr "" "%sはPostgreSQLのアーカイブから古いWALファイルを削除します。\n" "\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:261 #, c-format msgid "Usage:\n" msgstr "使用法:\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:262 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr "%s [オプション] ... {アーカイブの場所} {保存する最古の WAL ファイル名}\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:263 #, c-format msgid "" "\n" @@ -101,56 +112,56 @@ msgstr "" "\n" "オプション:\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:264 #, c-format msgid " -b, --clean-backup-history clean up files including backup history files\n" msgstr " -b, --clean-backup-history バックアップヒストリファイルを含めて削除する\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:265 #, c-format msgid " -d, --debug generate debug output (verbose mode)\n" msgstr " -d, --debug デバッグ情報を出力(冗長モード)\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:266 #, c-format msgid "" " -n, --dry-run dry run, show the names of the files that would be\n" " removed\n" msgstr " -n, --dry-run リハーサル、削除対象のファイル名を表示\n" -#: pg_archivecleanup.c:267 +#: pg_archivecleanup.c:268 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_archivecleanup.c:268 +#: pg_archivecleanup.c:269 #, c-format msgid "" " -x, --strip-extension=EXT strip this extension before identifying files for\n" " clean up\n" msgstr " -x, --strip-extension=EXT 削除対象のファイルの確認前にこの拡張子を削除する\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:271 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_archivecleanup.c:271 +#: pg_archivecleanup.c:272 #, c-format msgid "" "\n" -"For use as archive_cleanup_command in postgresql.conf:\n" +"For use as \"archive_cleanup_command\" in postgresql.conf:\n" " archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %%r'\n" "e.g.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" msgstr "" "\n" -"postgresql.confでarchive_cleanup_commandとして使用する場合は以下のようにします:\n" +"postgresql.confで\"archive_cleanup_command\"として使用する場合は以下のようにします:\n" " archive_cleanup_command = 'pg_archivecleanup [オプション]... アーカイブの場所 %%r'\n" "例としては:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:276 +#: pg_archivecleanup.c:277 #, c-format msgid "" "\n" @@ -163,7 +174,7 @@ msgstr "" "使用例\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:280 +#: pg_archivecleanup.c:281 #, c-format msgid "" "\n" @@ -172,22 +183,22 @@ msgstr "" "\n" "バグは<%s>に報告してください。\n" -#: pg_archivecleanup.c:281 +#: pg_archivecleanup.c:282 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: pg_archivecleanup.c:353 +#: pg_archivecleanup.c:354 #, c-format msgid "must specify archive location" msgstr "アーカイブの場所を指定してください" -#: pg_archivecleanup.c:365 +#: pg_archivecleanup.c:366 #, c-format msgid "must specify oldest kept WAL file" msgstr "保存する最古のWALファイルを指定してください" -#: pg_archivecleanup.c:372 +#: pg_archivecleanup.c:373 #, c-format msgid "too many command-line arguments" msgstr "コマンドライン引数が多すぎます" diff --git a/src/bin/pg_archivecleanup/po/ka.po b/src/bin/pg_archivecleanup/po/ka.po index 4f4c9f74f0b1a..801657a4b3a3b 100644 --- a/src/bin/pg_archivecleanup/po/ka.po +++ b/src/bin/pg_archivecleanup/po/ka.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 17\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-02-11 09:52+0000\n" -"PO-Revision-Date: 2024-02-11 14:42+0100\n" +"POT-Creation-Date: 2025-02-27 09:54+0000\n" +"PO-Revision-Date: 2025-02-27 12:57+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,65 +16,76 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "შეცდომა: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "warning: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "დეტალები: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "მინიშნება: " -#: pg_archivecleanup.c:68 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "არასაკმარისი მეხსიერება\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" + +#: pg_archivecleanup.c:69 #, c-format msgid "archive location \"%s\" does not exist" msgstr "არქივის მდებარეობა არ არსებობს: %s" -#: pg_archivecleanup.c:100 +#: pg_archivecleanup.c:101 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "არქივის მდებარეობის გახსნის შეცდომა\"%s\": %m" -#: pg_archivecleanup.c:164 +#: pg_archivecleanup.c:165 #, c-format msgid "could not remove file \"%s\": %m" msgstr "ფაილის წაშლის შეცდომა \"%s\": %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:170 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "არქივის მდებარეობის წაკითხვის შეცდომა\"%s\": %m" -#: pg_archivecleanup.c:172 +#: pg_archivecleanup.c:173 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "არქივის მდებარეობის დაყენების შეცდომა\"%s\": %m" -#: pg_archivecleanup.c:245 +#: pg_archivecleanup.c:246 #, c-format msgid "invalid file name argument" msgstr "ფაილის სახელის არასწორი არგუმენტი" -#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 -#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 +#: pg_archivecleanup.c:247 pg_archivecleanup.c:335 pg_archivecleanup.c:355 +#: pg_archivecleanup.c:367 pg_archivecleanup.c:374 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:260 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -83,17 +94,17 @@ msgstr "" "%s PostgreSQL-ის არქივებიდან ძველი WAL ფაილების წაშლა.\n" "\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:261 #, c-format msgid "Usage:\n" msgstr "გამოყენება:\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:262 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [პარამეტრი]... არქივისმდგომარეობა უძველესიშენახულიWALფაილი\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:263 #, c-format msgid "" "\n" @@ -102,17 +113,17 @@ msgstr "" "\n" "პარამეტრები\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:264 #, c-format msgid " -b, --clean-backup-history clean up files including backup history files\n" msgstr " -b, --clean-backup-history ფაილების მოსუფთავება მარქაფი ისტორიის ფაილების ჩათვლით\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:265 #, c-format msgid " -d, --debug generate debug output (verbose mode)\n" msgstr " -d, --debug გასამართი ინფორმაციის გამოტანა(დამატებითი შეტყობინებების რეჟიმი)\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:266 #, c-format msgid "" " -n, --dry-run dry run, show the names of the files that would be\n" @@ -121,16 +132,13 @@ msgstr "" " -n, --dry-run მშრალი გაშვება. ფაილების წაშლის მაგიერ მხოლოდ მათი \n" " სახელების ჩვენება\n" -#: pg_archivecleanup.c:267 +#: pg_archivecleanup.c:268 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: pg_archivecleanup.c:268 +#: pg_archivecleanup.c:269 #, c-format -#| msgid "" -#| " -L, --use-list=FILENAME use table of contents from this file for\n" -#| " selecting/ordering output\n" msgid "" " -x, --strip-extension=EXT strip this extension before identifying files for\n" " clean up\n" @@ -138,27 +146,27 @@ msgstr "" " -x, --strip-extension=გაფ ამ გაფართოების მოცილებაფაილის მოსასუფთავებლების\n" " სიაში ჩასმამდე\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:271 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: pg_archivecleanup.c:271 +#: pg_archivecleanup.c:272 #, c-format msgid "" "\n" -"For use as archive_cleanup_command in postgresql.conf:\n" +"For use as \"archive_cleanup_command\" in postgresql.conf:\n" " archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %%r'\n" "e.g.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" msgstr "" "\n" -"გამოსაყენებლად, როგორც archive_cleanup_command postgresql.conf-ში: \n" +"გამოსაყენებლად, როგორც \"archive_cleanup_command\" postgresql.conf-ში: \n" " archive_cleanup_command = 'pg_archivecleanup [პარამეტრი]... არქივისმდებარეობა %%r'\n" "მაგ: \n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:276 +#: pg_archivecleanup.c:277 #, c-format msgid "" "\n" @@ -171,7 +179,7 @@ msgstr "" "მაგ:\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:280 +#: pg_archivecleanup.c:281 #, c-format msgid "" "\n" @@ -180,22 +188,22 @@ msgstr "" "\n" "შეცდომების შესახებ მიწერეთ: %s\n" -#: pg_archivecleanup.c:281 +#: pg_archivecleanup.c:282 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: pg_archivecleanup.c:353 +#: pg_archivecleanup.c:354 #, c-format msgid "must specify archive location" msgstr "არქივის მდებარეობის მითითება აუცილებელია" -#: pg_archivecleanup.c:365 +#: pg_archivecleanup.c:366 #, c-format msgid "must specify oldest kept WAL file" msgstr "დატოვებული უძველესი WAL ფაილის მითითება აუცილებელია" -#: pg_archivecleanup.c:372 +#: pg_archivecleanup.c:373 #, c-format msgid "too many command-line arguments" msgstr "მეტისმეტად ბევრი ბრძანების-სტრიქონის არგუმენტი" diff --git a/src/bin/pg_archivecleanup/po/ko.po b/src/bin/pg_archivecleanup/po/ko.po index 785839ab2fd4a..79fea6d7cf4cd 100644 --- a/src/bin/pg_archivecleanup/po/ko.po +++ b/src/bin/pg_archivecleanup/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 13\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-10-05 01:16+0000\n" -"PO-Revision-Date: 2020-10-05 17:51+0900\n" +"POT-Creation-Date: 2025-01-17 04:52+0000\n" +"PO-Revision-Date: 2025-01-16 13:10+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -17,58 +17,74 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:236 -#, c-format -msgid "fatal: " -msgstr "심각: " - -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "경고: " -#: pg_archivecleanup.c:66 +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "상세정보: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "힌트: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "널 포인터를 중복할 수 없음 (내부 오류)\n" + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" msgstr "\"%s\" 이름의 아카이브 위치가 없음" -#: pg_archivecleanup.c:152 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "\"%s\" 아카이브 위치를 열 수 없음: %m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "\"%s\" 파일을 삭제할 수 없음: %m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "\"%s\" 아카이브 위치를 읽을 수 없음: %m" -#: pg_archivecleanup.c:163 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "\"%s\" 아카이브 위치를 닫을 수 없음: %m" -#: pg_archivecleanup.c:167 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "\"%s\" 아카이브 위치를 열 수 없음: %m" - -#: pg_archivecleanup.c:240 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "잘못된 파일 이름 매개변수" -#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 -#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format -msgid "Try \"%s --help\" for more information.\n" -msgstr "보다 자세한 정보는 \"%s --help\" 명령을 참조하세요.\n" +msgid "Try \"%s --help\" for more information." +msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:259 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -78,17 +94,17 @@ msgstr "" "WAL 파일을 지웁니다.\n" "\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [옵션]... 아카이브위치 보관할제일오래된파일\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:262 #, c-format msgid "" "\n" @@ -97,33 +113,45 @@ msgstr "" "\n" "옵션들:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:263 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d 보다 자세한 작업 내용 출력\n" +msgid "" +" -b, --clean-backup-history clean up files including backup history files\n" +msgstr " -b, --clean-backup-history 백업 내역 파일을 포함해서 파일들 지움\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:264 +#, c-format +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr " -d, --debug 보다 자세한 작업 내용 출력\n" + +#: pg_archivecleanup.c:265 #, c-format msgid "" -" -n dry run, show the names of the files that would be removed\n" -msgstr " -n 지울 대상만 확인하고 지우지는 않음\n" +" -n, --dry-run dry run, show the names of the files that " +"would be\n" +" removed\n" +msgstr " -n, --dry-run 지울 대상만 확인하고 지우지는 않음\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:267 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version 버전 정보를 보여주고 마침\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:268 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x EXT 해당 확장자 파일들을 작업 대상으로 함\n" +msgid "" +" -x, --strip-extension=EXT strip this extension before identifying files " +"for\n" +" clean up\n" +msgstr "" +" -x, --strip-extension=EXT 지울 파일을 식별하기 전에 해당 확장 모듈 지움\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:270 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help 도움말을 보여주고 마침\n" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:271 #, c-format msgid "" "\n" @@ -139,7 +167,7 @@ msgstr "" "사용예:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:268 +#: pg_archivecleanup.c:276 #, c-format msgid "" "\n" @@ -154,7 +182,7 @@ msgstr "" " pg_archivecleanup /mnt/server/archiverdir " "000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:272 +#: pg_archivecleanup.c:280 #, c-format msgid "" "\n" @@ -163,22 +191,26 @@ msgstr "" "\n" "문제점 보고 주소: <%s>\n" -#: pg_archivecleanup.c:273 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: pg_archivecleanup.c:335 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "아카이브 위치는 지정해야 함" -#: pg_archivecleanup.c:347 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" msgstr "남길 가장 오래된 WAL 파일은 지정해야 함" -#: pg_archivecleanup.c:354 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "너무 많은 명령행 인자를 지정했음" + +#, c-format +#~ msgid " -x EXT clean up files if they have this extension\n" +#~ msgstr " -x EXT 해당 확장자 파일들을 작업 대상으로 함\n" diff --git a/src/bin/pg_archivecleanup/po/ru.po b/src/bin/pg_archivecleanup/po/ru.po index 4b542ce16ce84..e04456d67d365 100644 --- a/src/bin/pg_archivecleanup/po/ru.po +++ b/src/bin/pg_archivecleanup/po/ru.po @@ -1,21 +1,21 @@ # Russian message translation file for pg_archivecleanup # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2017, 2019, 2020, 2022. +# Alexander Lakhin , 2017, 2019, 2020, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-27 14:52+0300\n" -"PO-Revision-Date: 2022-09-05 13:34+0300\n" +"POT-Creation-Date: 2024-09-02 09:29+0300\n" +"PO-Revision-Date: 2024-09-07 06:17+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../../../src/common/logging.c:276 #, c-format @@ -37,43 +37,54 @@ msgstr "подробности: " msgid "hint: " msgstr "подсказка: " -#: pg_archivecleanup.c:66 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" msgstr "расположение архива \"%s\" не существует" -#: pg_archivecleanup.c:151 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "не удалось открыть расположение архива \"%s\": %m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не удалось стереть файл \"%s\": %m" -#: pg_archivecleanup.c:157 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "не удалось прочитать расположение архива \"%s\": %m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "не удалось закрыть расположение архива \"%s\": %m" -#: pg_archivecleanup.c:164 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "не удалось открыть расположение архива \"%s\": %m" - -#: pg_archivecleanup.c:237 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "неверный аргумент с именем файла" -#: pg_archivecleanup.c:238 pg_archivecleanup.c:313 pg_archivecleanup.c:333 -#: pg_archivecleanup.c:345 pg_archivecleanup.c:352 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: pg_archivecleanup.c:251 +#: pg_archivecleanup.c:259 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -82,18 +93,18 @@ msgstr "" "%s удаляет старые файлы WAL из архивов PostgreSQL.\n" "\n" -#: pg_archivecleanup.c:252 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_archivecleanup.c:253 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr "" " %s [ПАРАМЕТР]... РАСПОЛОЖЕНИЕ_АРХИВА СТАРЕЙШИЙ_СОХРАНЯЕМЫЙ_ФАЙЛ_WAL\n" -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:262 #, c-format msgid "" "\n" @@ -102,42 +113,60 @@ msgstr "" "\n" "Параметры:\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:263 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d генерировать подробные сообщения (отладочный режим)\n" +msgid "" +" -b, --clean-backup-history clean up files including backup history files\n" +msgstr "" +" -b, --clean-backup-history удалить также файлы истории копирования\n" + +#: pg_archivecleanup.c:264 +#, c-format +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr "" +" -d, --debug генерировать подробные сообщения (режим " +"отладки)\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:265 #, c-format msgid "" -" -n dry run, show the names of the files that would be removed\n" +" -n, --dry-run dry run, show the names of the files that " +"would be\n" +" removed\n" msgstr "" -" -n холостой запуск, только показать имена файлов, которые " -"будут удалены\n" +" -n, --dry-run холостой запуск, только показать имена " +"файлов,\n" +" которые будут удалены\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:267 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version показать версию и выйти\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" # well-spelled: РСШ -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:268 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x РСШ убрать файлы с заданным расширением\n" +msgid "" +" -x, --strip-extension=EXT strip this extension before identifying files " +"for\n" +" clean up\n" +msgstr "" +" -x, --strip-extension=РСШ убрать это расширение прежде чем определять " +"файлы,\n" +" подлежащие удалению\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:270 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help показать эту справку и выйти\n" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:271 #, c-format msgid "" "\n" "For use as archive_cleanup_command in postgresql.conf:\n" -" archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %" -"%r'\n" +" archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION " +"%%r'\n" "e.g.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" msgstr "" @@ -148,22 +177,22 @@ msgstr "" "например:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:276 #, c-format msgid "" "\n" "Or for use as a standalone archive cleaner:\n" "e.g.\n" -" pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010." -"00000020.backup\n" +" pg_archivecleanup /mnt/server/archiverdir " +"000000010000000000000010.00000020.backup\n" msgstr "" "\n" "Либо для использования в качестве отдельного средства очистки архива,\n" "например:\n" -" pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010." -"00000020.backup\n" +" pg_archivecleanup /mnt/server/archiverdir " +"000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:269 +#: pg_archivecleanup.c:280 #, c-format msgid "" "\n" @@ -172,26 +201,31 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: pg_archivecleanup.c:332 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "необходимо задать расположение архива" -#: pg_archivecleanup.c:344 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" msgstr "необходимо задать имя старейшего сохраняемого файла WAL" -#: pg_archivecleanup.c:351 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "слишком много аргументов командной строки" +# well-spelled: РСШ +#, c-format +#~ msgid " -x EXT clean up files if they have this extension\n" +#~ msgstr " -x РСШ убрать файлы с заданным расширением\n" + #~ msgid "fatal: " #~ msgstr "важно: " diff --git a/src/bin/pg_archivecleanup/po/sv.po b/src/bin/pg_archivecleanup/po/sv.po index 6cebbc1ad1b86..d91831a8ba751 100644 --- a/src/bin/pg_archivecleanup/po/sv.po +++ b/src/bin/pg_archivecleanup/po/sv.po @@ -1,14 +1,14 @@ # Swedish message translation file for pg_archivecleanup # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Dennis Björklund , 2017, 2018, 2019, 2020, 2021, 2022. +# Dennis Björklund , 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-04-11 13:50+0000\n" -"PO-Revision-Date: 2022-04-11 16:06+0200\n" +"POT-Creation-Date: 2024-07-12 13:23+0000\n" +"PO-Revision-Date: 2024-07-12 15:46+0200\n" "Last-Translator: FDennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -17,63 +17,74 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../../src/common/logging.c:268 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "fel: " -#: ../../../src/common/logging.c:275 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "varning: " -#: ../../../src/common/logging.c:284 +#: ../../../src/common/logging.c:294 #, c-format msgid "detail: " msgstr "detalj: " -#: ../../../src/common/logging.c:287 +#: ../../../src/common/logging.c:301 #, c-format msgid "hint: " msgstr "tips: " -#: pg_archivecleanup.c:66 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kan inte duplicera null-pekare (internt fel)\n" + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" msgstr "arkivplats \"%s\" finns inte" -#: pg_archivecleanup.c:151 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "kunde inte öppna arkivplats \"%s\": %m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "kunde inte ta bort fil \"%s\": %m" -#: pg_archivecleanup.c:157 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "kunde inte läsa arkivplats \"%s\": %m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "kunde inte stänga arkivplats \"%s\": %m" -#: pg_archivecleanup.c:164 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "kunde inte öppna arkivplats \"%s\": %m" - -#: pg_archivecleanup.c:237 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "ogiltigt filnamnsargument" -#: pg_archivecleanup.c:238 pg_archivecleanup.c:313 pg_archivecleanup.c:333 -#: pg_archivecleanup.c:345 pg_archivecleanup.c:352 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: pg_archivecleanup.c:251 +#: pg_archivecleanup.c:259 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -82,17 +93,17 @@ msgstr "" "%s tar bort gamla WAL-filer från PostgreSQLs arkiv.\n" "\n" -#: pg_archivecleanup.c:252 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_archivecleanup.c:253 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [FLAGGA]... ARKIVPLATS ÄLDSTASPARADEWALFIL\n" -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:262 #, c-format msgid "" "\n" @@ -101,32 +112,45 @@ msgstr "" "\n" "Flaggor:\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:263 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d generera debugutskrift (utförligt läge)\n" +msgid " -b, --clean-backup-history clean up files including backup history files\n" +msgstr " -b, --clean-backup-history rensa upp filer, inklusive filer för backuphistorik\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:264 #, c-format -msgid " -n dry run, show the names of the files that would be removed\n" -msgstr " -n gör inga ändringar visa namn på de filer som skulle ha tagits bort\n" +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr " -d, --debug generera debugutskrift (utförligt läge)\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:265 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version visa versionsinformation, avsluta sedan\n" +msgid "" +" -n, --dry-run dry run, show the names of the files that would be\n" +" removed\n" +msgstr "" +" -n, --dry-run gör inga ändringar, visa namn på de filer som skulle\n" +" ha tagits bort\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:267 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x SUF städa upp filer om de har detta suffix\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:268 +#, c-format +msgid "" +" -x, --strip-extension=EXT strip this extension before identifying files for\n" +" clean up\n" +msgstr "" +" -x, --strip-extension=EXT ta bort denna ändelse innan vi identifierar filer\n" +" som skall tas bort\n" + +#: pg_archivecleanup.c:270 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help visa denna hjälp, avsluta sedan\n" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:271 #, c-format msgid "" "\n" @@ -141,7 +165,7 @@ msgstr "" "t.ex.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:276 #, c-format msgid "" "\n" @@ -154,7 +178,7 @@ msgstr "" "t.ex.\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:269 +#: pg_archivecleanup.c:280 #, c-format msgid "" "\n" @@ -163,22 +187,22 @@ msgstr "" "\n" "Rapportera fel till <%s>.\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_archivecleanup.c:332 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "måste ange en arkivplats" -#: pg_archivecleanup.c:344 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" msgstr "måste ange äldsta sparade WAL-filen" -#: pg_archivecleanup.c:351 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "för många kommandoradsargument" diff --git a/src/bin/pg_archivecleanup/po/uk.po b/src/bin/pg_archivecleanup/po/uk.po index 120f799bc7014..767f51cc73f95 100644 --- a/src/bin/pg_archivecleanup/po/uk.po +++ b/src/bin/pg_archivecleanup/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-12 10:51+0000\n" -"PO-Revision-Date: 2022-09-13 11:52\n" +"POT-Creation-Date: 2024-08-31 06:23+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_15_STABLE/pg_archivecleanup.pot\n" -"X-Crowdin-File-ID: 898\n" +"X-Crowdin-File: /REL_17_STABLE/pg_archivecleanup.pot\n" +"X-Crowdin-File-ID: 1032\n" #: ../../../src/common/logging.c:276 #, c-format @@ -37,90 +37,110 @@ msgstr "деталі: " msgid "hint: " msgstr "підказка: " -#: pg_archivecleanup.c:66 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" msgstr "архівного розташування \"%s\" не існує" -#: pg_archivecleanup.c:151 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "не вдалося відкрити архівне розташування \"%s\":%m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не можливо видалити файл \"%s\": %m" -#: pg_archivecleanup.c:157 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "не вдалося прочитати архівне розташування \"%s\":%m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "не вдалося закрити архівне розташування \"%s\":%m" -#: pg_archivecleanup.c:164 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "не вдалося відкрити архівне розташування \"%s\":%m" - -#: pg_archivecleanup.c:237 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "недійсна назва файла з аргументом" -#: pg_archivecleanup.c:238 pg_archivecleanup.c:313 pg_archivecleanup.c:333 -#: pg_archivecleanup.c:345 pg_archivecleanup.c:352 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: pg_archivecleanup.c:251 +#: pg_archivecleanup.c:259 #, c-format msgid "%s removes older WAL files from PostgreSQL archives.\n\n" msgstr "%s видаляє старі WAL-файли з архівів PostgreSQL.\n\n" -#: pg_archivecleanup.c:252 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_archivecleanup.c:253 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [OPTION]... РОЗТАШУВАННЯ_АРХІВА НАЙДАВНІШИЙ_ЗБЕРЕЖЕНИЙ_WAL_ФАЙЛ\n" -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:262 #, c-format msgid "\n" "Options:\n" msgstr "\n" "Параметри:\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:263 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d генерує налагоджувальні повідомлення (детальний режим)\n" +msgid " -b, --clean-backup-history clean up files including backup history files\n" +msgstr " -b, --clean-backup-history очистити файли, включаючи файли історії резервного копіювання\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:264 #, c-format -msgid " -n dry run, show the names of the files that would be removed\n" -msgstr " -n сухий запуск, показує тільки ті файли, які будуть видалені\n" +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr " -d, --debug генерувати налагоджувальний вивід (розгорнутий режим)\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:265 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version показати версію, потім вийти\n" +msgid " -n, --dry-run dry run, show the names of the files that would be\n" +" removed\n" +msgstr " -n, --dry-run сухий запуск, показати назви файлів, які будуть\n" +" вилучені\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:267 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x EXT прибрати файли з цим розширенням\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:268 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help показати цю довідку, потім вийти\n" +msgid " -x, --strip-extension=EXT strip this extension before identifying files for\n" +" clean up\n" +msgstr " -x, --strip-extension=EXT вилучати це розширення перед ідентифікацією файлів для\n" +" очищення\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:270 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_archivecleanup.c:271 #, c-format msgid "\n" "For use as archive_cleanup_command in postgresql.conf:\n" @@ -133,7 +153,7 @@ msgstr "\n" "напр.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:276 #, c-format msgid "\n" "Or for use as a standalone archive cleaner:\n" @@ -144,29 +164,29 @@ msgstr "\n" "наприклад:\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:269 +#: pg_archivecleanup.c:280 #, c-format msgid "\n" "Report bugs to <%s>.\n" msgstr "\n" "Повідомляти про помилки на <%s>.\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: pg_archivecleanup.c:332 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "необхідно вказати розташування архіва" -#: pg_archivecleanup.c:344 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" msgstr "необхідно вказати найдавніший збережений WAL-файл" -#: pg_archivecleanup.c:351 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "занадто багато аргументів командного рядка" diff --git a/src/bin/pg_archivecleanup/po/zh_CN.po b/src/bin/pg_archivecleanup/po/zh_CN.po index e8c33482e1750..ae2cc68e75c68 100644 --- a/src/bin/pg_archivecleanup/po/zh_CN.po +++ b/src/bin/pg_archivecleanup/po/zh_CN.po @@ -1,92 +1,98 @@ # LANGUAGE message translation file for pg_archivecleanup # Copyright (C) 2019 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package. -# FIRST AUTHOR , 2019. +# Dianjin Wang , 2024. # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 14\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-08-14 05:48+0000\n" -"PO-Revision-Date: 2021-08-14 19:40+0800\n" -"Last-Translator: Jie Zhang \n" +"POT-Creation-Date: 2024-06-06 01:23+0000\n" +"PO-Revision-Date: 2024-06-06 16:40+0800\n" +"Last-Translator: Dianjin Wang \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.4.4\n" -#: ../../../src/common/logging.c:259 -#, c-format -msgid "fatal: " -msgstr "致命的: " - -#: ../../../src/common/logging.c:266 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "错误: " -#: ../../../src/common/logging.c:273 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "警告: " -#: pg_archivecleanup.c:66 +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "详细信息: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "提示: " + +#: pg_archivecleanup.c:68 #, c-format msgid "archive location \"%s\" does not exist" -msgstr "存档位置\"%s\"不存在" +msgstr "存档位置 \"%s\" 不存在" -#: pg_archivecleanup.c:152 +#: pg_archivecleanup.c:100 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "无法打开存档位置 \"%s\": %m" + +#: pg_archivecleanup.c:164 #, c-format msgid "could not remove file \"%s\": %m" msgstr "无法删除文件 \"%s\": %m" -#: pg_archivecleanup.c:160 +#: pg_archivecleanup.c:169 #, c-format msgid "could not read archive location \"%s\": %m" -msgstr "无法读取存档位置\"%s\": %m" +msgstr "无法读取存档位置 \"%s\": %m" -#: pg_archivecleanup.c:163 +#: pg_archivecleanup.c:172 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "无法关闭存档位置 \"%s\": %m" -#: pg_archivecleanup.c:167 -#, c-format -msgid "could not open archive location \"%s\": %m" -msgstr "无法打开存档位置\"%s\": %m" - -#: pg_archivecleanup.c:240 +#: pg_archivecleanup.c:245 #, c-format msgid "invalid file name argument" msgstr "文件名参数无效" -#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 -#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 +#: pg_archivecleanup.c:246 pg_archivecleanup.c:334 pg_archivecleanup.c:354 +#: pg_archivecleanup.c:366 pg_archivecleanup.c:373 #, c-format -msgid "Try \"%s --help\" for more information.\n" -msgstr "请用 \"%s --help\" 获取更多的信息.\n" +msgid "Try \"%s --help\" for more information." +msgstr "请用 \"%s --help\" 获取更多的信息." -#: pg_archivecleanup.c:254 +#: pg_archivecleanup.c:259 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" "\n" msgstr "" -"%s 从PostgreSQL存档中删除旧的WAL文件.\n" +"%s 从 PostgreSQL 存档中删除旧的 WAL 文件.\n" "\n" -#: pg_archivecleanup.c:255 +#: pg_archivecleanup.c:260 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:261 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" -msgstr " %s [OPTION]... 归档文件位置 最早保存的WAL文件\n" +msgstr " %s [选项]... 归档文件位置 最早保存的WAL文件\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:262 #, c-format msgid "" "\n" @@ -95,32 +101,45 @@ msgstr "" "\n" "选项:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:263 #, c-format -msgid " -d generate debug output (verbose mode)\n" -msgstr " -d 生成调试输出(详细模式)\n" +msgid " -b, --clean-backup-history clean up files including backup history files\n" +msgstr " -b, --clean-backup-history 清理包括备份历史文件在内的文件\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:264 #, c-format -msgid " -n dry run, show the names of the files that would be removed\n" -msgstr " -n dry运行,显示要删除的文件的名称\n" +msgid " -d, --debug generate debug output (verbose mode)\n" +msgstr " -d, --debug 生成调试输出(详细模式)\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:265 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version 输出版本信息,然后退出\n" +msgid "" +" -n, --dry-run dry run, show the names of the files that would be\n" +" removed\n" +msgstr "" +" -n, --dry-run 模拟运行, 显示要被删除的文件名称\n" +" \n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:267 #, c-format -msgid " -x EXT clean up files if they have this extension\n" -msgstr " -x EXT 如果文件具有此扩展名,则清除文件\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 输出版本信息,然后退出\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:268 +#, c-format +msgid "" +" -x, --strip-extension=EXT strip this extension before identifying files for\n" +" clean up\n" +msgstr "" +" -x, --strip-extension=EXT 在识别要清理的文件前移除该扩展\n" +" \n" + +#: pg_archivecleanup.c:270 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help 显示帮助信息,然后退出\n" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 显示此帮助,然后退出\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:271 #, c-format msgid "" "\n" @@ -130,12 +149,12 @@ msgid "" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" msgstr "" "\n" -"在postgresql.conf中,archive_cleanup_command的用法 \n" +"在 postgresql.conf 中,archive_cleanup_command 的用法为:\n" " archive_cleanup_command = 'pg_archivecleanup [选项]... 存档位置 %%r'\n" -"例.\n" +"例如:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:268 +#: pg_archivecleanup.c:276 #, c-format msgid "" "\n" @@ -144,36 +163,55 @@ msgid "" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" msgstr "" "\n" -"或者,用作独立存档清理程序:\n" -"例.\n" +"或者,将其用作独立存档清理程序:\n" +"例如:\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:272 +#: pg_archivecleanup.c:280 #, c-format msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" "\n" -"臭虫报告至<%s>.\n" +"报告缺陷: <%s>.\n" -#: pg_archivecleanup.c:273 +#: pg_archivecleanup.c:281 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 主页: <%s>\n" -#: pg_archivecleanup.c:335 +#: pg_archivecleanup.c:353 #, c-format msgid "must specify archive location" msgstr "必须指定存档位置" -#: pg_archivecleanup.c:347 +#: pg_archivecleanup.c:365 #, c-format msgid "must specify oldest kept WAL file" -msgstr "必须指定最早保存的WAL文件" +msgstr "必须指定最早保存的 WAL 文件" -#: pg_archivecleanup.c:354 +#: pg_archivecleanup.c:372 #, c-format msgid "too many command-line arguments" msgstr "命令行参数太多" +#, c-format +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help 显示帮助信息,然后退出\n" + +#, c-format +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version 输出版本信息,然后退出\n" + +#, c-format +#~ msgid " -x EXT clean up files if they have this extension\n" +#~ msgstr " -x EXT 如果文件具有此扩展名,则清除文件\n" + +#, c-format +#~ msgid "Try \"%s --help\" for more information.\n" +#~ msgstr "请用 \"%s --help\" 获取更多的信息.\n" + +#, c-format +#~ msgid "fatal: " +#~ msgstr "致命的: " diff --git a/src/bin/pg_basebackup/meson.build b/src/bin/pg_basebackup/meson.build index 8a1c96b4f5c84..3a7fc10eab02f 100644 --- a/src/bin/pg_basebackup/meson.build +++ b/src/bin/pg_basebackup/meson.build @@ -93,9 +93,9 @@ tests += { 'sd': meson.current_source_dir(), 'bd': meson.current_build_dir(), 'tap': { - 'env': {'GZIP_PROGRAM': gzip.found() ? gzip.path() : '', - 'TAR': tar.found() ? tar.path() : '', - 'LZ4': program_lz4.found() ? program_lz4.path() : '', + 'env': {'GZIP_PROGRAM': gzip.found() ? gzip.full_path() : '', + 'TAR': tar.found() ? tar.full_path() : '', + 'LZ4': program_lz4.found() ? program_lz4.full_path() : '', }, 'tests': [ 't/010_pg_basebackup.pl', diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 1da4bfc2351e9..0a3ca4315de1e 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -35,6 +35,7 @@ #include "fe_utils/option_utils.h" #include "fe_utils/recovery_gen.h" #include "getopt_long.h" +#include "libpq/protocol.h" #include "receivelog.h" #include "streamutil.h" @@ -487,7 +488,7 @@ reached_end_position(XLogRecPtr segendpos, uint32 timeline, if (r < 0) pg_fatal("could not read from ready pipe: %m"); - if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2) + if (sscanf(xlogend, "%X/%08X", &hi, &lo) != 2) pg_fatal("could not parse write-ahead log location \"%s\"", xlogend); xlogendptr = ((uint64) hi) << 32 | lo; @@ -629,7 +630,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier, param->wal_compress_level = wal_compress_level; /* Convert the starting position */ - if (sscanf(startpos, "%X/%X", &hi, &lo) != 2) + if (sscanf(startpos, "%X/%08X", &hi, &lo) != 2) pg_fatal("could not parse write-ahead log location \"%s\"", startpos); param->startptr = ((uint64) hi) << 32 | lo; @@ -667,7 +668,8 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier, if (temp_replication_slot || create_slot) { if (!CreateReplicationSlot(param->bgconn, replication_slot, NULL, - temp_replication_slot, true, true, false, false)) + temp_replication_slot, true, true, false, + false, false)) exit(1); if (verbose) @@ -1337,7 +1339,7 @@ ReceiveArchiveStreamChunk(size_t r, char *copybuf, void *callback_data) /* Each CopyData message begins with a type byte. */ switch (GetCopyDataByte(r, copybuf, &cursor)) { - case 'n': + case PqBackupMsg_NewArchive: { /* New archive. */ char *archive_name; @@ -1409,7 +1411,7 @@ ReceiveArchiveStreamChunk(size_t r, char *copybuf, void *callback_data) break; } - case 'd': + case PqMsg_CopyData: { /* Archive or manifest data. */ if (state->manifest_buffer != NULL) @@ -1445,7 +1447,7 @@ ReceiveArchiveStreamChunk(size_t r, char *copybuf, void *callback_data) break; } - case 'p': + case PqBackupMsg_ProgressReport: { /* * Progress report. @@ -1464,7 +1466,7 @@ ReceiveArchiveStreamChunk(size_t r, char *copybuf, void *callback_data) break; } - case 'm': + case PqBackupMsg_Manifest: { /* * Manifest data will be sent next. This message is not @@ -2254,7 +2256,7 @@ BaseBackup(char *compression_algorithm, char *compression_detail, * value directly in the variable, and then set the flag that says * it's there. */ - if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2) + if (sscanf(xlogend, "%X/%08X", &hi, &lo) != 2) pg_fatal("could not parse write-ahead log location \"%s\"", xlogend); xlogendptr = ((uint64) hi) << 32 | lo; diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c index eed3793c8168b..3986882f04292 100644 --- a/src/bin/pg_basebackup/pg_createsubscriber.c +++ b/src/bin/pg_basebackup/pg_createsubscriber.c @@ -46,7 +46,7 @@ struct CreateSubscriberOptions SimpleStringList replslot_names; /* list of replication slot names */ int recovery_timeout; /* stop recovery after this time */ bool all_dbs; /* all option */ - SimpleStringList objecttypes_to_remove; /* list of object types to remove */ + SimpleStringList objecttypes_to_clean; /* list of object types to cleanup */ }; /* per-database publication/subscription info */ @@ -71,8 +71,8 @@ struct LogicalRepInfos { struct LogicalRepInfo *dbinfo; bool two_phase; /* enable-two-phase option */ - bits32 objecttypes_to_remove; /* flags indicating which object types - * to remove on subscriber */ + bits32 objecttypes_to_clean; /* flags indicating which object types + * to clean up on subscriber */ }; static void cleanup_objects_atexit(void); @@ -247,19 +247,19 @@ usage(void) printf(_(" %s [OPTION]...\n"), progname); printf(_("\nOptions:\n")); printf(_(" -a, --all create subscriptions for all databases except template\n" - " databases or databases that don't allow connections\n")); + " databases and databases that don't allow connections\n")); printf(_(" -d, --database=DBNAME database in which to create a subscription\n")); printf(_(" -D, --pgdata=DATADIR location for the subscriber data directory\n")); printf(_(" -n, --dry-run dry run, just show what would be done\n")); printf(_(" -p, --subscriber-port=PORT subscriber port number (default %s)\n"), DEFAULT_SUB_PORT); printf(_(" -P, --publisher-server=CONNSTR publisher connection string\n")); - printf(_(" -R, --remove=OBJECTTYPE remove all objects of the specified type from specified\n" - " databases on the subscriber; accepts: publications\n")); printf(_(" -s, --socketdir=DIR socket directory to use (default current dir.)\n")); printf(_(" -t, --recovery-timeout=SECS seconds to wait for recovery to end\n")); printf(_(" -T, --enable-two-phase enable two-phase commit for all subscriptions\n")); printf(_(" -U, --subscriber-username=NAME user name for subscriber connection\n")); printf(_(" -v, --verbose output verbose messages\n")); + printf(_(" --clean=OBJECTTYPE drop all objects of the specified type from specified\n" + " databases on the subscriber; accepts: \"%s\"\n"), "publications"); printf(_(" --config-file=FILENAME use specified main server configuration\n" " file when running target cluster\n")); printf(_(" --publication=NAME publication name\n")); @@ -973,7 +973,7 @@ check_publisher(const struct LogicalRepInfo *dbinfo) pg_log_warning("two_phase option will not be enabled for replication slots"); pg_log_warning_detail("Subscriptions will be created with the two_phase option disabled. " "Prepared transactions will be replicated at COMMIT PREPARED."); - pg_log_warning_hint("You can use --enable-two-phase switch to enable two_phase."); + pg_log_warning_hint("You can use the command-line option --enable-two-phase to enable two_phase."); } /* @@ -1247,22 +1247,31 @@ setup_recovery(const struct LogicalRepInfo *dbinfo, const char *datadir, const c * targets (name, time, xid, LSN). */ recoveryconfcontents = GenerateRecoveryConfig(conn, NULL, NULL); - appendPQExpBuffer(recoveryconfcontents, "recovery_target = ''\n"); - appendPQExpBuffer(recoveryconfcontents, - "recovery_target_timeline = 'latest'\n"); - appendPQExpBuffer(recoveryconfcontents, - "recovery_target_inclusive = true\n"); - appendPQExpBuffer(recoveryconfcontents, - "recovery_target_action = promote\n"); - appendPQExpBuffer(recoveryconfcontents, "recovery_target_name = ''\n"); - appendPQExpBuffer(recoveryconfcontents, "recovery_target_time = ''\n"); - appendPQExpBuffer(recoveryconfcontents, "recovery_target_xid = ''\n"); + appendPQExpBufferStr(recoveryconfcontents, "recovery_target = ''\n"); + appendPQExpBufferStr(recoveryconfcontents, + "recovery_target_timeline = 'latest'\n"); + + /* + * Set recovery_target_inclusive = false to avoid reapplying the + * transaction committed at 'lsn' after subscription is enabled. This is + * because the provided 'lsn' is also used as the replication start point + * for the subscription. So, the server can send the transaction committed + * at that 'lsn' after replication is started which can lead to applying + * the same transaction twice if we keep recovery_target_inclusive = true. + */ + appendPQExpBufferStr(recoveryconfcontents, + "recovery_target_inclusive = false\n"); + appendPQExpBufferStr(recoveryconfcontents, + "recovery_target_action = promote\n"); + appendPQExpBufferStr(recoveryconfcontents, "recovery_target_name = ''\n"); + appendPQExpBufferStr(recoveryconfcontents, "recovery_target_time = ''\n"); + appendPQExpBufferStr(recoveryconfcontents, "recovery_target_xid = ''\n"); if (dry_run) { - appendPQExpBuffer(recoveryconfcontents, "# dry run mode"); + appendPQExpBufferStr(recoveryconfcontents, "# dry run mode"); appendPQExpBuffer(recoveryconfcontents, - "recovery_target_lsn = '%X/%X'\n", + "recovery_target_lsn = '%X/%08X'\n", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr)); } else @@ -1484,10 +1493,10 @@ start_standby_server(const struct CreateSubscriberOptions *opt, bool restricted_ appendPQExpBuffer(pg_ctl_cmd, "\"%s\" start -D ", pg_ctl_path); appendShellString(pg_ctl_cmd, subscriber_dir); - appendPQExpBuffer(pg_ctl_cmd, " -s -o \"-c sync_replication_slots=off\""); + appendPQExpBufferStr(pg_ctl_cmd, " -s -o \"-c sync_replication_slots=off\""); /* Prevent unintended slot invalidation */ - appendPQExpBuffer(pg_ctl_cmd, " -o \"-c idle_replication_slot_timeout=0\""); + appendPQExpBufferStr(pg_ctl_cmd, " -o \"-c idle_replication_slot_timeout=0\""); if (restricted_access) { @@ -1513,7 +1522,7 @@ start_standby_server(const struct CreateSubscriberOptions *opt, bool restricted_ /* Suppress to start logical replication if requested */ if (restrict_logical_worker) - appendPQExpBuffer(pg_ctl_cmd, " -o \"-c max_logical_replication_workers=0\""); + appendPQExpBufferStr(pg_ctl_cmd, " -o \"-c max_logical_replication_workers=0\""); pg_log_debug("pg_ctl command is: %s", pg_ctl_cmd->data); rc = system(pg_ctl_cmd->data); @@ -1730,7 +1739,7 @@ static void check_and_drop_publications(PGconn *conn, struct LogicalRepInfo *dbinfo) { PGresult *res; - bool drop_all_pubs = dbinfos.objecttypes_to_remove & OBJECTTYPE_PUBLICATIONS; + bool drop_all_pubs = dbinfos.objecttypes_to_clean & OBJECTTYPE_PUBLICATIONS; Assert(conn != NULL); @@ -1876,7 +1885,7 @@ set_replication_progress(PGconn *conn, const struct LogicalRepInfo *dbinfo, cons if (dry_run) { suboid = InvalidOid; - lsnstr = psprintf("%X/%X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr)); + lsnstr = psprintf("%X/%08X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr)); } else { @@ -1963,8 +1972,8 @@ enable_subscription(PGconn *conn, const struct LogicalRepInfo *dbinfo) } /* - * Fetch a list of all not-template databases from the source server and form - * a list such that they appear as if the user has specified multiple + * Fetch a list of all connectable non-template databases from the source server + * and form a list such that they appear as if the user has specified multiple * --database options, one for each source database. */ static void @@ -2026,7 +2035,6 @@ main(int argc, char **argv) {"dry-run", no_argument, NULL, 'n'}, {"subscriber-port", required_argument, NULL, 'p'}, {"publisher-server", required_argument, NULL, 'P'}, - {"remove", required_argument, NULL, 'R'}, {"socketdir", required_argument, NULL, 's'}, {"recovery-timeout", required_argument, NULL, 't'}, {"enable-two-phase", no_argument, NULL, 'T'}, @@ -2038,6 +2046,7 @@ main(int argc, char **argv) {"publication", required_argument, NULL, 2}, {"replication-slot", required_argument, NULL, 3}, {"subscription", required_argument, NULL, 4}, + {"clean", required_argument, NULL, 5}, {NULL, 0, NULL, 0} }; @@ -2109,7 +2118,7 @@ main(int argc, char **argv) get_restricted_token(); - while ((c = getopt_long(argc, argv, "ad:D:np:P:R:s:t:TU:v", + while ((c = getopt_long(argc, argv, "ad:D:np:P:s:t:TU:v", long_options, &option_index)) != -1) { switch (c) @@ -2124,10 +2133,7 @@ main(int argc, char **argv) num_dbs++; } else - { - pg_log_error("database \"%s\" specified more than once", optarg); - exit(1); - } + pg_fatal("database \"%s\" specified more than once for -d/--database", optarg); break; case 'D': subscriber_dir = pg_strdup(optarg); @@ -2142,12 +2148,6 @@ main(int argc, char **argv) case 'P': opt.pub_conninfo_str = pg_strdup(optarg); break; - case 'R': - if (!simple_string_list_member(&opt.objecttypes_to_remove, optarg)) - simple_string_list_append(&opt.objecttypes_to_remove, optarg); - else - pg_fatal("object type \"%s\" is specified more than once for --remove", optarg); - break; case 's': opt.socket_dir = pg_strdup(optarg); canonicalize_path(opt.socket_dir); @@ -2174,10 +2174,7 @@ main(int argc, char **argv) num_pubs++; } else - { - pg_log_error("publication \"%s\" specified more than once", optarg); - exit(1); - } + pg_fatal("publication \"%s\" specified more than once for --publication", optarg); break; case 3: if (!simple_string_list_member(&opt.replslot_names, optarg)) @@ -2186,10 +2183,7 @@ main(int argc, char **argv) num_replslots++; } else - { - pg_log_error("replication slot \"%s\" specified more than once", optarg); - exit(1); - } + pg_fatal("replication slot \"%s\" specified more than once for --replication-slot", optarg); break; case 4: if (!simple_string_list_member(&opt.sub_names, optarg)) @@ -2198,10 +2192,13 @@ main(int argc, char **argv) num_subs++; } else - { - pg_log_error("subscription \"%s\" specified more than once", optarg); - exit(1); - } + pg_fatal("subscription \"%s\" specified more than once for --subscription", optarg); + break; + case 5: + if (!simple_string_list_member(&opt.objecttypes_to_clean, optarg)) + simple_string_list_append(&opt.objecttypes_to_clean, optarg); + else + pg_fatal("object type \"%s\" specified more than once for --clean", optarg); break; default: /* getopt_long already emitted a complaint */ @@ -2226,7 +2223,7 @@ main(int argc, char **argv) if (bad_switch) { - pg_log_error("%s cannot be used with --all", bad_switch); + pg_log_error("options %s and -a/--all cannot be used together", bad_switch); pg_log_error_hint("Try \"%s --help\" for more information.", progname); exit(1); } @@ -2346,14 +2343,14 @@ main(int argc, char **argv) } /* Verify the object types specified for removal from the subscriber */ - for (SimpleStringListCell *cell = opt.objecttypes_to_remove.head; cell; cell = cell->next) + for (SimpleStringListCell *cell = opt.objecttypes_to_clean.head; cell; cell = cell->next) { if (pg_strcasecmp(cell->val, "publications") == 0) - dbinfos.objecttypes_to_remove |= OBJECTTYPE_PUBLICATIONS; + dbinfos.objecttypes_to_clean |= OBJECTTYPE_PUBLICATIONS; else { - pg_log_error("invalid object type \"%s\" specified for --remove", cell->val); - pg_log_error_hint("The valid option is: \"publications\""); + pg_log_error("invalid object type \"%s\" specified for --clean", cell->val); + pg_log_error_hint("The valid value is: \"%s\"", "publications"); exit(1); } } diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c index de3584018b097..289ca14dcfe58 100644 --- a/src/bin/pg_basebackup/pg_receivewal.c +++ b/src/bin/pg_basebackup/pg_receivewal.c @@ -188,14 +188,14 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished) /* we assume that we get called once at the end of each segment */ if (verbose && segment_finished) - pg_log_info("finished segment at %X/%X (timeline %u)", + pg_log_info("finished segment at %X/%08X (timeline %u)", LSN_FORMAT_ARGS(xlogpos), timeline); if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos) { if (verbose) - pg_log_info("stopped log streaming at %X/%X (timeline %u)", + pg_log_info("stopped log streaming at %X/%08X (timeline %u)", LSN_FORMAT_ARGS(xlogpos), timeline); time_to_stop = true; @@ -211,7 +211,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished) * timeline, but it's close enough for reporting purposes. */ if (verbose && prevtimeline != 0 && prevtimeline != timeline) - pg_log_info("switched to timeline %u at %X/%X", + pg_log_info("switched to timeline %u at %X/%08X", timeline, LSN_FORMAT_ARGS(prevpos)); @@ -575,7 +575,7 @@ StreamLog(void) * Start the replication */ if (verbose) - pg_log_info("starting log streaming at %X/%X (timeline %u)", + pg_log_info("starting log streaming at %X/%08X (timeline %u)", LSN_FORMAT_ARGS(stream.startpos), stream.timeline); @@ -689,7 +689,7 @@ main(int argc, char **argv) basedir = pg_strdup(optarg); break; case 'E': - if (sscanf(optarg, "%X/%X", &hi, &lo) != 2) + if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2) pg_fatal("could not parse end position \"%s\"", optarg); endpos = ((uint64) hi) << 32 | lo; break; @@ -889,7 +889,7 @@ main(int argc, char **argv) pg_log_info("creating replication slot \"%s\"", replication_slot); if (!CreateReplicationSlot(conn, replication_slot, NULL, false, true, false, - slot_exists_ok, false)) + slot_exists_ok, false, false)) exit(1); exit(0); } diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index e6158251ec181..7a4d1a2d2ca66 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -24,6 +24,7 @@ #include "getopt_long.h" #include "libpq-fe.h" #include "libpq/pqsignal.h" +#include "libpq/protocol.h" #include "pqexpbuffer.h" #include "streamutil.h" @@ -41,7 +42,8 @@ typedef enum /* Global Options */ static char *outfile = NULL; static int verbose = 0; -static bool two_phase = false; +static bool two_phase = false; /* enable-two-phase option */ +static bool failover = false; /* enable-failover option */ static int noloop = 0; static int standby_message_timeout = 10 * 1000; /* 10 sec = default */ static int fsync_interval = 10 * 1000; /* 10 sec = default */ @@ -88,6 +90,8 @@ usage(void) printf(_(" --drop-slot drop the replication slot (for the slot's name see --slot)\n")); printf(_(" --start start streaming in a replication slot (for the slot's name see --slot)\n")); printf(_("\nOptions:\n")); + printf(_(" --enable-failover enable replication slot synchronization to standby servers when\n" + " creating a replication slot\n")); printf(_(" -E, --endpos=LSN exit after receiving the specified LSN\n")); printf(_(" -f, --file=FILE receive log into this file, - for stdout\n")); printf(_(" -F --fsync-interval=SECS\n" @@ -102,7 +106,8 @@ usage(void) printf(_(" -s, --status-interval=SECS\n" " time between status packets sent to server (default: %d)\n"), (standby_message_timeout / 1000)); printf(_(" -S, --slot=SLOTNAME name of the logical replication slot\n")); - printf(_(" -t, --two-phase enable decoding of prepared transactions when creating a slot\n")); + printf(_(" -t, --enable-two-phase enable decoding of prepared transactions when creating a slot\n")); + printf(_(" --two-phase (same as --enable-two-phase, deprecated)\n")); printf(_(" -v, --verbose output verbose messages\n")); printf(_(" -V, --version output version information, then exit\n")); printf(_(" -?, --help show this help, then exit\n")); @@ -140,12 +145,12 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested) return true; if (verbose) - pg_log_info("confirming write up to %X/%X, flush to %X/%X (slot %s)", + pg_log_info("confirming write up to %X/%08X, flush to %X/%08X (slot %s)", LSN_FORMAT_ARGS(output_written_lsn), LSN_FORMAT_ARGS(output_fsync_lsn), replication_slot); - replybuf[len] = 'r'; + replybuf[len] = PqReplMsg_StandbyStatusUpdate; len += 1; fe_sendint64(output_written_lsn, &replybuf[len]); /* write */ len += 8; @@ -234,13 +239,13 @@ StreamLogicalLog(void) * Start the replication */ if (verbose) - pg_log_info("starting log streaming at %X/%X (slot %s)", + pg_log_info("starting log streaming at %X/%08X (slot %s)", LSN_FORMAT_ARGS(startpos), replication_slot); /* Initiate the replication stream at specified location */ query = createPQExpBuffer(); - appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%X", + appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%08X", replication_slot, LSN_FORMAT_ARGS(startpos)); /* print options if there are any */ @@ -450,7 +455,7 @@ StreamLogicalLog(void) } /* Check the message type. */ - if (copybuf[0] == 'k') + if (copybuf[0] == PqReplMsg_Keepalive) { int pos; bool replyRequested; @@ -462,7 +467,7 @@ StreamLogicalLog(void) * We just check if the server requested a reply, and ignore the * rest. */ - pos = 1; /* skip msgtype 'k' */ + pos = 1; /* skip msgtype PqReplMsg_Keepalive */ walEnd = fe_recvint64(©buf[pos]); output_written_lsn = Max(walEnd, output_written_lsn); @@ -505,7 +510,7 @@ StreamLogicalLog(void) continue; } - else if (copybuf[0] != 'w') + else if (copybuf[0] != PqReplMsg_WALData) { pg_log_error("unrecognized streaming header: \"%c\"", copybuf[0]); @@ -513,11 +518,11 @@ StreamLogicalLog(void) } /* - * Read the header of the XLogData message, enclosed in the CopyData + * Read the header of the WALData message, enclosed in the CopyData * message. We only need the WAL location field (dataStart), the rest * of the header is ignored. */ - hdr_len = 1; /* msgtype 'w' */ + hdr_len = 1; /* msgtype PqReplMsg_WALData */ hdr_len += 8; /* dataStart */ hdr_len += 8; /* walEnd */ hdr_len += 8; /* sendTime */ @@ -601,7 +606,7 @@ StreamLogicalLog(void) /* * We're doing a client-initiated clean exit and have sent CopyDone to * the server. Drain any messages, so we don't miss a last-minute - * ErrorResponse. The walsender stops generating XLogData records once + * ErrorResponse. The walsender stops generating WALData records once * it sees CopyDone, so expect this to finish quickly. After CopyDone, * it's too late for sendFeedback(), even if this were to take a long * time. Hence, use synchronous-mode PQgetCopyData(). @@ -695,8 +700,10 @@ main(int argc, char **argv) {"file", required_argument, NULL, 'f'}, {"fsync-interval", required_argument, NULL, 'F'}, {"no-loop", no_argument, NULL, 'n'}, + {"enable-failover", no_argument, NULL, 5}, + {"enable-two-phase", no_argument, NULL, 't'}, + {"two-phase", no_argument, NULL, 't'}, /* deprecated */ {"verbose", no_argument, NULL, 'v'}, - {"two-phase", no_argument, NULL, 't'}, {"version", no_argument, NULL, 'V'}, {"help", no_argument, NULL, '?'}, /* connection options */ @@ -770,6 +777,9 @@ main(int argc, char **argv) case 'v': verbose++; break; + case 5: + failover = true; + break; /* connection options */ case 'd': dbname = pg_strdup(optarg); @@ -791,12 +801,12 @@ main(int argc, char **argv) break; /* replication options */ case 'I': - if (sscanf(optarg, "%X/%X", &hi, &lo) != 2) + if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2) pg_fatal("could not parse start position \"%s\"", optarg); startpos = ((uint64) hi) << 32 | lo; break; case 'E': - if (sscanf(optarg, "%X/%X", &hi, &lo) != 2) + if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2) pg_fatal("could not parse end position \"%s\"", optarg); endpos = ((uint64) hi) << 32 | lo; break; @@ -917,11 +927,21 @@ main(int argc, char **argv) exit(1); } - if (two_phase && !do_create_slot) + if (!do_create_slot) { - pg_log_error("--two-phase may only be specified with --create-slot"); - pg_log_error_hint("Try \"%s --help\" for more information.", progname); - exit(1); + if (two_phase) + { + pg_log_error("%s may only be specified with --create-slot", "--enable-two-phase"); + pg_log_error_hint("Try \"%s --help\" for more information.", progname); + exit(1); + } + + if (failover) + { + pg_log_error("%s may only be specified with --create-slot", "--enable-failover"); + pg_log_error_hint("Try \"%s --help\" for more information.", progname); + exit(1); + } } /* @@ -984,7 +1004,8 @@ main(int argc, char **argv) pg_log_info("creating replication slot \"%s\"", replication_slot); if (!CreateReplicationSlot(conn, replication_slot, plugin, false, - false, false, slot_exists_ok, two_phase)) + false, false, slot_exists_ok, two_phase, + failover)) exit(1); startpos = InvalidXLogRecPtr; } @@ -1055,12 +1076,12 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, StreamStopReason reason, pg_log_info("received interrupt signal, exiting"); break; case STREAM_STOP_KEEPALIVE: - pg_log_info("end position %X/%X reached by keepalive", + pg_log_info("end position %X/%08X reached by keepalive", LSN_FORMAT_ARGS(endpos)); break; case STREAM_STOP_END_OF_WAL: Assert(!XLogRecPtrIsInvalid(lsn)); - pg_log_info("end position %X/%X reached by WAL record at %X/%X", + pg_log_info("end position %X/%08X reached by WAL record at %X/%08X", LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn)); break; case STREAM_STOP_NONE: diff --git a/src/bin/pg_basebackup/po/de.po b/src/bin/pg_basebackup/po/de.po index f501eaddef02b..0afd145285c35 100644 --- a/src/bin/pg_basebackup/po/de.po +++ b/src/bin/pg_basebackup/po/de.po @@ -1,15 +1,15 @@ # German message translation file for pg_basebackup -# Copyright (C) 2011 - 2024 PostgreSQL Global Development Group +# Copyright (C) 2011 - 2025 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 17\n" +"Project-Id-Version: PostgreSQL 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-21 16:50+0000\n" -"PO-Revision-Date: 2024-06-22 10:55+0200\n" +"POT-Creation-Date: 2025-04-14 00:20+0000\n" +"PO-Revision-Date: 2025-04-14 09:52+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -18,30 +18,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "Detail: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "Tipp: " #: ../../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 +#: ../../common/compression.c:150 ../../fe_utils/astreamer_gzip.c:140 +#: ../../fe_utils/astreamer_gzip.c:273 ../../fe_utils/astreamer_lz4.c:102 +#: ../../fe_utils/astreamer_lz4.c:300 ../../fe_utils/astreamer_zstd.c:133 +#: ../../fe_utils/astreamer_zstd.c:288 #, c-format msgid "this build does not support compression with %s" msgstr "diese Installation unterstützt keine Komprimierung mit %s" @@ -95,7 +96,7 @@ msgstr "Komprimierungsalgorithmus »%s« unterstützt keinen Long-Distance-Modus msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" -#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1874 #: pg_receivewal.c:402 #, c-format msgid "could not read file \"%s\": %m" @@ -107,7 +108,7 @@ msgid "could not read file \"%s\": read %d of %zu" msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 -#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#: ../../fe_utils/astreamer_file.c:141 pg_recvlogical.c:652 #, c-format msgid "could not close file \"%s\": %m" msgstr "konnte Datei »%s« nicht schließen: %m" @@ -130,10 +131,10 @@ msgstr "" "diesem Fall wären die Ergebnisse unten falsch und die PostgreSQL-Installation\n" "wäre inkompatibel mit diesem Datenverzeichnis." -#: ../../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 ../../fe_utils/recovery_gen.c:140 -#: pg_basebackup.c:1846 pg_receivewal.c:386 +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:69 +#: ../../common/file_utils.c:370 ../../common/file_utils.c:428 +#: ../../common/file_utils.c:502 ../../fe_utils/recovery_gen.c:141 +#: pg_basebackup.c:1847 pg_receivewal.c:386 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" @@ -143,8 +144,8 @@ msgstr "konnte Datei »%s« nicht öffnen: %m" msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" -#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 -#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:440 +#: ../../common/file_utils.c:510 pg_recvlogical.c:205 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" @@ -160,36 +161,36 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "konnte Dateisystem für Datei »%s« nicht synchronisieren: %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 -#: pg_receivewal.c:319 pg_recvlogical.c:352 +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 +#: pg_receivewal.c:319 pg_recvlogical.c:353 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "diese Installation unterstützt Sync-Methode »%s« nicht" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 #: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 +#: ../../common/file_utils.c:520 pg_basebackup.c:2345 walmethods.c:462 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" @@ -224,191 +225,200 @@ msgstr "konnte Prozess nicht mit beschränktem Token neu starten: Fehlercode %lu msgid "could not get exit code from subprocess: error code %lu" msgstr "konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu" -#: ../../fe_utils/option_utils.c:69 -#, c-format -msgid "invalid value \"%s\" for option %s" -msgstr "ungültiger Wert »%s« für Option %s" - -#: ../../fe_utils/option_utils.c:76 -#, c-format -msgid "%s must be in range %d..%d" -msgstr "%s muss im Bereich %d..%d sein" - -#: ../../fe_utils/option_utils.c:106 -#, c-format -msgid "unrecognized sync method: %s" -msgstr "unbekannte Sync-Methode: %s" - -#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 -#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 -#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:331 -#, c-format -msgid "out of memory" -msgstr "Speicher aufgebraucht" - -#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 -#, c-format -msgid "could not write to file \"%s\": %m" -msgstr "konnte nicht in Datei »%s« schreiben: %m" - -#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 -#: pg_basebackup.c:1497 pg_basebackup.c:1706 +#: ../../fe_utils/astreamer_file.c:96 ../../fe_utils/astreamer_file.c:364 +#: ../../fe_utils/recovery_gen.c:153 pg_basebackup.c:1498 pg_basebackup.c:1707 #, c-format msgid "could not create file \"%s\": %m" msgstr "konnte Datei »%s« nicht erstellen: %m" -#: ../../fe_utils/string_utils.c:434 -#, c-format -msgid "shell command argument contains a newline or carriage return: \"%s\"\n" -msgstr "Argument des Shell-Befehls enthält Newline oder Carriage Return: »%s«\n" - -#: ../../fe_utils/string_utils.c:607 +#: ../../fe_utils/astreamer_file.c:124 ../../fe_utils/astreamer_file.c:261 +#: ../../fe_utils/recovery_gen.c:144 pg_basebackup.c:1434 pg_basebackup.c:1728 #, c-format -msgid "database name contains a newline or carriage return: \"%s\"\n" -msgstr "Datenbankname enthält Newline oder Carriage Return: »%s«\n" +msgid "could not write to file \"%s\": %m" +msgstr "konnte nicht in Datei »%s« schreiben: %m" -#: bbstreamer_file.c:275 +#: ../../fe_utils/astreamer_file.c:278 #, c-format msgid "unexpected state while extracting archive" msgstr "unerwarteter Zustand beim Extrahieren des Archivs" -#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 -#: pg_basebackup.c:757 +#: ../../fe_utils/astreamer_file.c:324 pg_basebackup.c:699 pg_basebackup.c:713 +#: pg_basebackup.c:758 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: bbstreamer_file.c:326 +#: ../../fe_utils/astreamer_file.c:329 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "konnte Zugriffsrechte für Verzeichnis »%s« nicht setzen: %m" -#: bbstreamer_file.c:345 +#: ../../fe_utils/astreamer_file.c:348 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "konnte symbolische Verknüpfung von »%s« nach »%s« nicht erzeugen: %m" -#: bbstreamer_file.c:365 +#: ../../fe_utils/astreamer_file.c:368 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "konnte Zugriffsrechte von Datei »%s« nicht setzen: %m" -#: bbstreamer_gzip.c:95 +#: ../../fe_utils/astreamer_gzip.c:115 #, c-format msgid "could not create compressed file \"%s\": %m" msgstr "konnte komprimierte Datei »%s« nicht erzeugen: %m" -#: bbstreamer_gzip.c:103 +#: ../../fe_utils/astreamer_gzip.c:127 #, c-format msgid "could not duplicate stdout: %m" msgstr "konnte Standardausgabe nicht duplizieren: %m" -#: bbstreamer_gzip.c:107 +#: ../../fe_utils/astreamer_gzip.c:131 #, c-format msgid "could not open output file: %m" msgstr "konnte Ausgabedatei nicht öffnen: %m" -#: bbstreamer_gzip.c:111 +#: ../../fe_utils/astreamer_gzip.c:135 #, c-format msgid "could not set compression level %d: %s" msgstr "konnte Komprimierungsniveau %d nicht setzen: %s" -#: bbstreamer_gzip.c:143 +#: ../../fe_utils/astreamer_gzip.c:167 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "konnte nicht in komprimierte Datei »%s« schreiben: %s" -#: bbstreamer_gzip.c:167 +#: ../../fe_utils/astreamer_gzip.c:191 #, c-format msgid "could not close compressed file \"%s\": %m" msgstr "konnte komprimierte Datei »%s« nicht schließen: %m" -#: bbstreamer_gzip.c:245 walmethods.c:880 +#: ../../fe_utils/astreamer_gzip.c:269 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "konnte Komprimierungsbibliothek nicht initialisieren" -#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 +#: ../../fe_utils/astreamer_gzip.c:320 ../../fe_utils/astreamer_lz4.c:356 +#: ../../fe_utils/astreamer_zstd.c:333 #, c-format msgid "could not decompress data: %s" msgstr "konnte Daten nicht dekomprimieren: %s" -#: bbstreamer_inject.c:189 -#, c-format -msgid "unexpected state while injecting recovery settings" -msgstr "unerwarteter Zustand beim Einfügen der Recovery-Einstellungen" - -#: bbstreamer_lz4.c:95 +#: ../../fe_utils/astreamer_lz4.c:97 #, c-format msgid "could not create lz4 compression context: %s" msgstr "konnte lz4-Komprimierungskontext nicht erzeugen: %s" -#: bbstreamer_lz4.c:140 +#: ../../fe_utils/astreamer_lz4.c:142 #, c-format msgid "could not write lz4 header: %s" msgstr "konnte lz4-Header nicht schreiben: %s" -#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 +#: ../../fe_utils/astreamer_lz4.c:191 ../../fe_utils/astreamer_zstd.c:185 +#: ../../fe_utils/astreamer_zstd.c:227 #, c-format msgid "could not compress data: %s" msgstr "konnte Daten nicht komprimieren: %s" -#: bbstreamer_lz4.c:241 +#: ../../fe_utils/astreamer_lz4.c:243 #, c-format msgid "could not end lz4 compression: %s" msgstr "konnte lz4-Komprimierung nicht beenden: %s" -#: bbstreamer_lz4.c:293 +#: ../../fe_utils/astreamer_lz4.c:295 #, c-format msgid "could not initialize compression library: %s" msgstr "konnte Komprimierungsbibliothek nicht initialisieren: %s" -#: bbstreamer_tar.c:244 +#: ../../fe_utils/astreamer_tar.c:244 #, c-format msgid "tar file trailer exceeds 2 blocks" msgstr "Tar-Datei-Trailer überschreitet 2 Blöcke" -#: bbstreamer_tar.c:249 +#: ../../fe_utils/astreamer_tar.c:249 #, c-format msgid "unexpected state while parsing tar archive" msgstr "unerwarteter Zustand beim Parsen des Tar-Archivs" -#: bbstreamer_tar.c:292 +#: ../../fe_utils/astreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "Tar-Mitglied hat leeren Namen" -#: bbstreamer_tar.c:326 +#: ../../fe_utils/astreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "COPY-Strom endete vor dem Ende der letzten Datei" -#: bbstreamer_zstd.c:85 +#: ../../fe_utils/astreamer_zstd.c:89 #, c-format msgid "could not create zstd compression context" msgstr "konnte zstd-Komprimierungskontext nicht erzeugen" -#: bbstreamer_zstd.c:91 +#: ../../fe_utils/astreamer_zstd.c:95 #, c-format msgid "could not set zstd compression level to %d: %s" msgstr "konnte zstd-Komprimierungsniveau nicht auf %d setzen: %s" -#: bbstreamer_zstd.c:105 +#: ../../fe_utils/astreamer_zstd.c:109 #, c-format msgid "could not set compression worker count to %d: %s" msgstr "konnte Komprimierungs-Worker-Anzahl nicht auf %d setzen: %s" -#: bbstreamer_zstd.c:116 +#: ../../fe_utils/astreamer_zstd.c:120 #, c-format msgid "could not enable long-distance mode: %s" msgstr "konnte Long-Distance-Modus nicht einschalten: %s" -#: bbstreamer_zstd.c:275 +#: ../../fe_utils/astreamer_zstd.c:279 #, c-format msgid "could not create zstd decompression context" msgstr "konnte zstd-Dekomprimierungskontext nicht erzeugen" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "ungültiger Wert »%s« für Option %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s muss im Bereich %d..%d sein" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "unbekannte Sync-Methode: %s" + +#: ../../fe_utils/recovery_gen.c:40 ../../fe_utils/recovery_gen.c:51 +#: ../../fe_utils/recovery_gen.c:90 ../../fe_utils/recovery_gen.c:110 +#: ../../fe_utils/recovery_gen.c:169 ../../fe_utils/recovery_gen.c:230 +#: pg_basebackup.c:1637 +#, c-format +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: ../../fe_utils/recovery_gen.c:215 pg_basebackup.c:2249 streamutil.c:89 +#: streamutil.c:204 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/string_utils.c:587 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "Argument des Shell-Befehls enthält Newline oder Carriage Return: »%s«\n" + +#: ../../fe_utils/string_utils.c:760 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "Datenbankname enthält Newline oder Carriage Return: »%s«\n" + +#: astreamer_inject.c:189 +#, c-format +msgid "unexpected state while injecting recovery settings" +msgstr "unerwarteter Zustand beim Einfügen der Recovery-Einstellungen" + #: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" @@ -498,14 +508,14 @@ msgstr "" "%s erzeugt eine Basissicherung eines laufenden PostgreSQL-Servers.\n" "\n" -#: pg_basebackup.c:394 pg_createsubscriber.c:216 pg_receivewal.c:79 -#: pg_recvlogical.c:86 +#: pg_basebackup.c:394 pg_createsubscriber.c:246 pg_receivewal.c:79 +#: pg_recvlogical.c:85 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_basebackup.c:395 pg_createsubscriber.c:217 pg_receivewal.c:80 -#: pg_recvlogical.c:87 +#: pg_basebackup.c:395 pg_createsubscriber.c:247 pg_receivewal.c:80 +#: pg_recvlogical.c:86 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" @@ -658,12 +668,12 @@ msgstr " -P, --progress Fortschrittsinformationen zeigen\n" msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=SLOTNAME zu verwendender Replikations-Slot\n" -#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:109 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:110 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" @@ -720,12 +730,12 @@ msgstr "" " Methode zum Synchronisieren von Dateien auf Festplatte\n" " setzen\n" -#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:111 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:112 #, c-format msgid "" "\n" @@ -739,12 +749,12 @@ msgstr "" msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=VERBDG Verbindungsparameter\n" -#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:114 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:115 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" @@ -758,23 +768,23 @@ msgstr "" " -s, --status-interval=INTERVALL\n" " Zeit zwischen an Server gesendeten Statuspaketen (in Sekunden)\n" -#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:116 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:117 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:118 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: pg_basebackup.c:448 pg_createsubscriber.c:235 pg_receivewal.c:106 -#: pg_recvlogical.c:118 +#: pg_basebackup.c:448 pg_createsubscriber.c:270 pg_receivewal.c:106 +#: pg_recvlogical.c:119 #, c-format msgid "" "\n" @@ -783,8 +793,8 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_basebackup.c:449 pg_createsubscriber.c:236 pg_receivewal.c:107 -#: pg_recvlogical.c:119 +#: pg_basebackup.c:449 pg_createsubscriber.c:271 pg_receivewal.c:107 +#: pg_recvlogical.c:120 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" @@ -794,8 +804,8 @@ msgstr "%s Homepage: <%s>\n" msgid "could not read from ready pipe: %m" msgstr "konnte nicht aus bereiter Pipe lesen: %m" -#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 -#: streamutil.c:518 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2259 +#: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "konnte Write-Ahead-Log-Position »%s« nicht interpretieren" @@ -810,521 +820,517 @@ msgstr "konnte WAL-Dateien nicht zu Ende schreiben: %m" msgid "could not create pipe for background process: %m" msgstr "konnte Pipe für Hintergrundprozess nicht erzeugen: %m" -#: pg_basebackup.c:676 +#: pg_basebackup.c:677 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "temporärer Replikations-Slot »%s« wurde erzeugt" -#: pg_basebackup.c:679 +#: pg_basebackup.c:680 #, c-format msgid "created replication slot \"%s\"" msgstr "Replikations-Slot »%s« wurde erzeugt" -#: pg_basebackup.c:728 +#: pg_basebackup.c:729 #, c-format msgid "could not create background process: %m" msgstr "konnte Hintergrundprozess nicht erzeugen: %m" -#: pg_basebackup.c:737 +#: pg_basebackup.c:738 #, c-format msgid "could not create background thread: %m" msgstr "konnte Hintergrund-Thread nicht erzeugen: %m" -#: pg_basebackup.c:776 +#: pg_basebackup.c:777 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "Verzeichnis »%s« existiert aber ist nicht leer" -#: pg_basebackup.c:782 pg_createsubscriber.c:378 +#: pg_basebackup.c:783 pg_createsubscriber.c:420 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" -#: pg_basebackup.c:858 +#: pg_basebackup.c:859 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d Tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d Tablespaces %*s" -#: pg_basebackup.c:870 +#: pg_basebackup.c:871 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d Tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d Tablespaces (%s%-*.*s)" -#: pg_basebackup.c:886 +#: pg_basebackup.c:887 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d Tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d Tablespaces" -#: pg_basebackup.c:910 +#: pg_basebackup.c:911 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "Transferrate »%s« ist kein gültiger Wert" -#: pg_basebackup.c:912 +#: pg_basebackup.c:913 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "ungültige Transferrate »%s«: %m" -#: pg_basebackup.c:919 +#: pg_basebackup.c:920 #, c-format msgid "transfer rate must be greater than zero" msgstr "Transferrate muss größer als null sein" -#: pg_basebackup.c:949 +#: pg_basebackup.c:950 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "ungültige Einheit für --max-rate: »%s«" -#: pg_basebackup.c:953 +#: pg_basebackup.c:954 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "Transferrate »%s« überschreitet Bereich für ganze Zahlen" -#: pg_basebackup.c:960 +#: pg_basebackup.c:961 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "Transferrate »%s« ist außerhalb des gültigen Bereichs" -#: pg_basebackup.c:1022 +#: pg_basebackup.c:1023 #, c-format msgid "could not get COPY data stream: %s" msgstr "konnte COPY-Datenstrom nicht empfangen: %s" -#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 -#: receivelog.c:973 +#: pg_basebackup.c:1040 pg_recvlogical.c:450 pg_recvlogical.c:626 +#: receivelog.c:980 #, c-format msgid "could not read COPY data: %s" msgstr "konnte COPY-Daten nicht lesen: %s" -#: pg_basebackup.c:1043 +#: pg_basebackup.c:1044 #, c-format msgid "background process terminated unexpectedly" msgstr "Hintergrundprozess beendete unerwartet" -#: pg_basebackup.c:1114 +#: pg_basebackup.c:1115 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "Manifest kann nicht in eine komprimierte Tar-Datei eingefügt werden" -#: pg_basebackup.c:1115 +#: pg_basebackup.c:1116 #, c-format msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." msgstr "Verwenden Sie clientseitige Komprimierung, senden Sie die Ausgabe in ein Verzeichnis statt auf die Standardausgabe, oder verwenden Sie %s." -#: pg_basebackup.c:1131 +#: pg_basebackup.c:1132 #, c-format msgid "cannot parse archive \"%s\"" msgstr "kann Archiv »%s« nicht parsen" -#: pg_basebackup.c:1132 +#: pg_basebackup.c:1133 #, c-format msgid "Only tar archives can be parsed." msgstr "Nur Tar-Archive können geparst werden." -#: pg_basebackup.c:1134 +#: pg_basebackup.c:1135 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "Format »plain« benötigt pg_basebackup, um das Archiv zu parsen." -#: pg_basebackup.c:1136 +#: pg_basebackup.c:1137 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "Wenn - als Ausgabeverzeichnis verwendet wird, wird pg_basebackup benötigt, um das Archiv zu parsen." -#: pg_basebackup.c:1138 +#: pg_basebackup.c:1139 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "Die Option -R benötigt pg_basebackup, um das Archiv zu parsen." -#: pg_basebackup.c:1357 +#: pg_basebackup.c:1358 #, c-format msgid "archives must precede manifest" msgstr "Archive müssen vor dem Manifest kommen" -#: pg_basebackup.c:1372 +#: pg_basebackup.c:1373 #, c-format msgid "invalid archive name: \"%s\"" msgstr "ungültiger Archivname: »%s«" -#: pg_basebackup.c:1444 +#: pg_basebackup.c:1445 #, c-format msgid "unexpected payload data" msgstr "unerwartete Payload-Daten" -#: pg_basebackup.c:1587 +#: pg_basebackup.c:1588 #, c-format msgid "empty COPY message" msgstr "leere COPY-Nachricht" -#: pg_basebackup.c:1589 +#: pg_basebackup.c:1590 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "fehlerhafte COPY-Nachricht vom Typ %d, Länge %zu" -#: pg_basebackup.c:1789 +#: pg_basebackup.c:1790 #, c-format msgid "incompatible server version %s" msgstr "inkompatible Serverversion %s" -#: pg_basebackup.c:1805 +#: pg_basebackup.c:1806 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "Verwenden Sie -X none oder -X fetch, um Log-Streaming abzuschalten." -#: pg_basebackup.c:1841 +#: pg_basebackup.c:1842 #, c-format msgid "server does not support incremental backup" msgstr "Server unterstützt kein inkrementelles Backup" -#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 -#: receivelog.c:543 receivelog.c:582 streamutil.c:364 streamutil.c:438 -#: streamutil.c:490 streamutil.c:578 streamutil.c:730 streamutil.c:775 +#: pg_basebackup.c:1851 pg_basebackup.c:2009 pg_recvlogical.c:273 +#: receivelog.c:542 receivelog.c:581 streamutil.c:296 streamutil.c:370 +#: streamutil.c:422 streamutil.c:510 streamutil.c:667 streamutil.c:712 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "konnte Replikationsbefehl »%s« nicht senden: %s" -#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#: pg_basebackup.c:1857 pg_basebackup.c:1884 #, c-format msgid "could not upload manifest: %s" msgstr "konnte Manifest nicht hochladen: %s" -#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#: pg_basebackup.c:1860 pg_basebackup.c:1887 #, c-format msgid "could not upload manifest: unexpected status %s" msgstr "konnte Manifest nicht hochladen: unerwarteter Status %s" -#: pg_basebackup.c:1867 +#: pg_basebackup.c:1868 #, c-format msgid "could not send COPY data: %s" msgstr "konnte COPY-Daten nicht senden: %s" -#: pg_basebackup.c:1877 +#: pg_basebackup.c:1878 #, c-format msgid "could not send end-of-COPY: %s" msgstr "konnte End-of-COPY nicht senden: %s" -#: pg_basebackup.c:1892 +#: pg_basebackup.c:1893 #, c-format msgid "unexpected extra result while sending manifest" msgstr "unerwartetes zusätzliches Ergebnis beim Senden des Manifests" -#: pg_basebackup.c:1950 +#: pg_basebackup.c:1951 #, c-format msgid "backup targets are not supported by this server version" msgstr "Backup-Ziele werden von dieser Serverversion nicht unterstützt" -#: pg_basebackup.c:1953 +#: pg_basebackup.c:1954 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "Recovery-Konfiguration kann nicht geschrieben werden, wenn ein Backup-Ziel verwendet wird" -#: pg_basebackup.c:1980 +#: pg_basebackup.c:1981 #, c-format msgid "server does not support server-side compression" msgstr "Server unterstützt keine serverseitige Komprimierung" -#: pg_basebackup.c:1990 +#: pg_basebackup.c:1991 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "Basissicherung eingeleitet, warte auf Abschluss des Checkpoints" -#: pg_basebackup.c:1994 +#: pg_basebackup.c:1995 #, c-format msgid "waiting for checkpoint" msgstr "Warten auf Checkpoint" -#: pg_basebackup.c:2016 +#: pg_basebackup.c:2017 #, c-format msgid "could not initiate base backup: %s" msgstr "konnte Basissicherung nicht starten: %s" -#: pg_basebackup.c:2019 +#: pg_basebackup.c:2020 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "unerwartete Antwort auf Befehl BASE_BACKUP: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: pg_basebackup.c:2025 +#: pg_basebackup.c:2026 #, c-format msgid "checkpoint completed" msgstr "Checkpoint abgeschlossen" -#: pg_basebackup.c:2039 +#: pg_basebackup.c:2040 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "Write-Ahead-Log-Startpunkt: %s auf Zeitleiste %u" -#: pg_basebackup.c:2047 +#: pg_basebackup.c:2048 #, c-format msgid "could not get backup header: %s" msgstr "konnte Kopf der Sicherung nicht empfangen: %s" -#: pg_basebackup.c:2050 +#: pg_basebackup.c:2051 #, c-format msgid "no data returned from server" msgstr "keine Daten vom Server zurückgegeben" -#: pg_basebackup.c:2093 +#: pg_basebackup.c:2094 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "kann nur einen einzelnen Tablespace auf die Standardausgabe schreiben, Datenbank hat %d" -#: pg_basebackup.c:2106 +#: pg_basebackup.c:2107 #, c-format msgid "starting background WAL receiver" msgstr "Hintergrund-WAL-Receiver wird gestartet" -#: pg_basebackup.c:2189 +#: pg_basebackup.c:2190 #, c-format msgid "backup failed: %s" msgstr "Backup fehlgeschlagen: %s" -#: pg_basebackup.c:2192 +#: pg_basebackup.c:2193 #, c-format msgid "no write-ahead log end position returned from server" msgstr "keine Write-Ahead-Log-Endposition vom Server zurückgegeben" -#: pg_basebackup.c:2195 +#: pg_basebackup.c:2196 #, c-format msgid "write-ahead log end point: %s" msgstr "Write-Ahead-Log-Endposition: %s" -#: pg_basebackup.c:2206 +#: pg_basebackup.c:2207 #, c-format msgid "checksum error occurred" msgstr "ein Prüfsummenfehler ist aufgetreten" -#: pg_basebackup.c:2211 +#: pg_basebackup.c:2212 #, c-format msgid "final receive failed: %s" msgstr "letztes Empfangen fehlgeschlagen: %s" -#: pg_basebackup.c:2235 +#: pg_basebackup.c:2236 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "warte bis Hintergrundprozess Streaming beendet hat ..." -#: pg_basebackup.c:2239 +#: pg_basebackup.c:2240 #, c-format msgid "could not send command to background pipe: %m" msgstr "konnte Befehl nicht an Hintergrund-Pipe senden: %m" -#: pg_basebackup.c:2244 +#: pg_basebackup.c:2245 #, c-format msgid "could not wait for child process: %m" msgstr "konnte nicht auf Kindprozess warten: %m" -#: pg_basebackup.c:2246 +#: pg_basebackup.c:2247 #, c-format msgid "child %d died, expected %d" msgstr "Kindprozess %d endete, aber %d wurde erwartet" -#: pg_basebackup.c:2248 streamutil.c:89 streamutil.c:204 streamutil.c:316 -#, c-format -msgid "%s" -msgstr "%s" - -#: pg_basebackup.c:2268 +#: pg_basebackup.c:2269 #, c-format msgid "could not wait for child thread: %m" msgstr "konnte nicht auf Kind-Thread warten: %m" -#: pg_basebackup.c:2273 +#: pg_basebackup.c:2274 #, c-format msgid "could not get child thread exit status: %m" msgstr "konnte Statuscode des Kind-Threads nicht ermitteln: %m" -#: pg_basebackup.c:2276 +#: pg_basebackup.c:2277 #, c-format msgid "child thread exited with error %u" msgstr "Kind-Thread hat mit Fehler %u beendet" -#: pg_basebackup.c:2305 +#: pg_basebackup.c:2306 #, c-format msgid "syncing data to disk ..." msgstr "synchronisiere Daten auf Festplatte ..." -#: pg_basebackup.c:2330 +#: pg_basebackup.c:2331 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "umbenennen von backup_manifest.tmp nach backup_manifest" -#: pg_basebackup.c:2350 +#: pg_basebackup.c:2351 #, c-format msgid "base backup completed" msgstr "Basissicherung abgeschlossen" -#: pg_basebackup.c:2436 +#: pg_basebackup.c:2437 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "ungültiges Checkpoint-Argument »%s«, muss »fast« oder »spread« sein" -#: pg_basebackup.c:2454 +#: pg_basebackup.c:2455 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "ungültiges Ausgabeformat »%s«, muss »plain« oder »tar« sein" -#: pg_basebackup.c:2535 +#: pg_basebackup.c:2536 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "ungültige Option »%s« für --wal-method, muss »fetch«, »stream« oder »none« sein" -#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 -#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 -#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 -#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 -#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 -#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 -#: pg_basebackup.c:2803 pg_createsubscriber.c:1907 pg_createsubscriber.c:1917 -#: pg_createsubscriber.c:1925 pg_createsubscriber.c:1953 -#: pg_createsubscriber.c:1985 pg_receivewal.c:748 pg_receivewal.c:760 -#: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 -#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 -#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 -#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 -#: pg_recvlogical.c:917 pg_recvlogical.c:924 +#: pg_basebackup.c:2575 pg_basebackup.c:2587 pg_basebackup.c:2609 +#: pg_basebackup.c:2621 pg_basebackup.c:2627 pg_basebackup.c:2679 +#: pg_basebackup.c:2690 pg_basebackup.c:2700 pg_basebackup.c:2706 +#: pg_basebackup.c:2713 pg_basebackup.c:2725 pg_basebackup.c:2737 +#: pg_basebackup.c:2745 pg_basebackup.c:2758 pg_basebackup.c:2764 +#: pg_basebackup.c:2773 pg_basebackup.c:2785 pg_basebackup.c:2796 +#: pg_basebackup.c:2804 pg_createsubscriber.c:2196 pg_createsubscriber.c:2218 +#: pg_createsubscriber.c:2228 pg_createsubscriber.c:2236 +#: pg_createsubscriber.c:2264 pg_createsubscriber.c:2307 pg_receivewal.c:748 +#: pg_receivewal.c:760 pg_receivewal.c:767 pg_receivewal.c:776 +#: pg_receivewal.c:783 pg_receivewal.c:793 pg_recvlogical.c:859 +#: pg_recvlogical.c:871 pg_recvlogical.c:881 pg_recvlogical.c:888 +#: pg_recvlogical.c:895 pg_recvlogical.c:902 pg_recvlogical.c:909 +#: pg_recvlogical.c:916 pg_recvlogical.c:923 pg_recvlogical.c:932 +#: pg_recvlogical.c:939 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: pg_basebackup.c:2584 pg_createsubscriber.c:1915 pg_receivewal.c:758 -#: pg_recvlogical.c:863 +#: pg_basebackup.c:2585 pg_createsubscriber.c:2226 pg_receivewal.c:758 +#: pg_recvlogical.c:869 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_basebackup.c:2607 +#: pg_basebackup.c:2608 #, c-format msgid "cannot specify both format and backup target" msgstr "Format und Backup-Ziel können nicht beide angegeben werden" -#: pg_basebackup.c:2619 +#: pg_basebackup.c:2620 #, c-format msgid "must specify output directory or backup target" msgstr "Ausgabeverzeichnis oder Backup-Ziel muss angegeben werden" -#: pg_basebackup.c:2625 +#: pg_basebackup.c:2626 #, c-format msgid "cannot specify both output directory and backup target" msgstr "Ausgabeverzeichnis und Backup-Ziel können nicht beide angegeben werden" -#: pg_basebackup.c:2655 pg_receivewal.c:802 +#: pg_basebackup.c:2656 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "unbekannter Komprimierungsalgorithmus: »%s«" -#: pg_basebackup.c:2661 pg_receivewal.c:809 +#: pg_basebackup.c:2662 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "ungültige Komprimierungsangabe: %s" -#: pg_basebackup.c:2677 +#: pg_basebackup.c:2678 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "clientseitige Komprimierung ist nicht möglich, wenn ein Backup-Ziel angegeben ist" -#: pg_basebackup.c:2688 +#: pg_basebackup.c:2689 #, c-format msgid "only tar mode backups can be compressed" msgstr "nur Sicherungen im Tar-Modus können komprimiert werden" -#: pg_basebackup.c:2698 +#: pg_basebackup.c:2699 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "WAL-Streaming ist nicht möglich, wenn ein Backup-Ziel angegeben ist" -#: pg_basebackup.c:2704 +#: pg_basebackup.c:2705 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "im Tar-Modus können Write-Ahead-Logs nicht auf Standardausgabe geschrieben werden" -#: pg_basebackup.c:2711 +#: pg_basebackup.c:2712 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "Replikations-Slots können nur mit WAL-Streaming verwendet werden" -#: pg_basebackup.c:2723 +#: pg_basebackup.c:2724 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot kann nicht zusammen mit einem Slot-Namen verwendet werden" #. translator: second %s is an option name -#: pg_basebackup.c:2734 pg_receivewal.c:774 +#: pg_basebackup.c:2735 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "für %s muss ein Slot mit --slot angegeben werden" -#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 -#: pg_basebackup.c:2801 +#: pg_basebackup.c:2743 pg_basebackup.c:2783 pg_basebackup.c:2794 +#: pg_basebackup.c:2802 #, c-format msgid "%s and %s are incompatible options" msgstr "%s und %s sind inkompatible Optionen" -#: pg_basebackup.c:2756 +#: pg_basebackup.c:2757 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "WAL-Verzeichnis kann nicht zusammen mit einem Backup-Ziel angegeben werden" -#: pg_basebackup.c:2762 +#: pg_basebackup.c:2763 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "WAL-Verzeichnis kann nur im »plain«-Modus angegeben werden" -#: pg_basebackup.c:2771 +#: pg_basebackup.c:2772 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL-Verzeichnis muss absoluten Pfad haben" -#: pg_basebackup.c:2871 +#: pg_basebackup.c:2872 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: pg_createsubscriber.c:164 -#, fuzzy, c-format -#| msgid "pausing at the end of recovery" +#: pg_createsubscriber.c:189 +#, c-format msgid "failed after the end of recovery" -msgstr "pausiere am Ende der Wiederherstellung" +msgstr "fehlgeschlagen am Ende der Wiederherstellung" -#: pg_createsubscriber.c:165 +#: pg_createsubscriber.c:190 #, c-format msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." -msgstr "" +msgstr "Der Zielserver kann nicht mehr als physischer Standby verwendet werden. Sie müssen den physischen Standby neu erzeugen bevor fortgesetzt werden kann." -#: pg_createsubscriber.c:193 +#: pg_createsubscriber.c:221 #, c-format -msgid "publication \"%s\" in database \"%s\" on primary might be left behind" -msgstr "" +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "Publikation »%s« erzeugt in Datenbank »%s« auf dem Primärserver wurde zurückgelassen" -#: pg_createsubscriber.c:195 +#: pg_createsubscriber.c:224 #, c-format -msgid "Consider dropping this publication before trying again." -msgstr "" +msgid "Drop this publication before trying again." +msgstr "Löschen Sie diese Publikation, bevor Sie erneut versuchen." -#: pg_createsubscriber.c:199 +#: pg_createsubscriber.c:228 #, c-format -msgid "replication slot \"%s\" in database \"%s\" on primary might be left behind" -msgstr "" +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "Replikations-Slot »%s« erzeugt in Datenbank »%s« auf dem Primärserver wurde zurückgelassen" -#: pg_createsubscriber.c:201 pg_createsubscriber.c:1137 +#: pg_createsubscriber.c:231 pg_createsubscriber.c:1305 #, c-format msgid "Drop this replication slot soon to avoid retention of WAL files." -msgstr "" +msgstr "Löschen Sie diesen Replikations-Slot bald, um Zurückhalten von WAL-Datein zu vermeiden." -#: pg_createsubscriber.c:214 -#, fuzzy, c-format -#| msgid "cannot copy a replication slot that doesn't reserve WAL" +#: pg_createsubscriber.c:244 +#, c-format msgid "" "%s creates a new logical replica from a standby server.\n" "\n" -msgstr "ein Replikations-Slot, der kein WAL reserviert, kann nicht kopiert werden" +msgstr "" +"%s erzeugt eine neue logische Replik aus einem Standby-Server.\n" +"\n" -#: pg_createsubscriber.c:218 pg_receivewal.c:81 pg_recvlogical.c:92 +#: pg_createsubscriber.c:248 pg_receivewal.c:81 pg_recvlogical.c:91 #, c-format msgid "" "\n" @@ -1333,60 +1339,71 @@ msgstr "" "\n" "Optionen:\n" -#: pg_createsubscriber.c:219 -#, fuzzy, c-format -#| msgid " -d, --dbname=DBNAME database to vacuum\n" -msgid " -d, --database=DBNAME database to create a subscription\n" -msgstr " -d, --dbname=DBNAME führe Vacuum in dieser Datenbank aus\n" +#: pg_createsubscriber.c:249 +#, c-format +msgid "" +" -a, --all create subscriptions for all databases except template\n" +" databases or databases that don't allow connections\n" +msgstr "" -#: pg_createsubscriber.c:220 -#, fuzzy, c-format -#| msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" +#: pg_createsubscriber.c:251 +#, c-format +msgid " -d, --database=DBNAME database in which to create a subscription\n" +msgstr " -d, --database=DBNAME Datenbank, in der eine Subskription erzeugt werden soll\n" + +#: pg_createsubscriber.c:252 +#, c-format msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" -msgstr " [-D, --pgdata=]DATENVERZ Datenverzeichnis für diesen Datenbankcluster\n" +msgstr " -D, --pgdata=DATENVERZ Datenverzeichnis für den Subskriptionsserver\n" -#: pg_createsubscriber.c:221 -#, fuzzy, c-format -#| msgid " -n, --dry-run no update, just show what would be done\n" +#: pg_createsubscriber.c:253 +#, c-format msgid " -n, --dry-run dry run, just show what would be done\n" -msgstr " -n, --dry-run keine Änderungen; nur zeigen, was gemacht werden würde\n" +msgstr " -n, --dry-run Probelauf; nur zeigen, was gemacht werden würde\n" -#: pg_createsubscriber.c:222 -#, fuzzy, c-format -#| msgid " -p, --old-port=PORT old cluster port number (default %d)\n" +#: pg_createsubscriber.c:254 +#, c-format msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" -msgstr " -p, --old-port=PORT Portnummer für den alten Cluster (Standard: %d)\n" +msgstr " -p, --subscriber-port=PORT Portnummer für den Subskriptionsserver (Standard %s)\n" -#: pg_createsubscriber.c:223 -#, fuzzy, c-format -#| msgid " -d, --dbname=CONNSTR connect using connection string\n" +#: pg_createsubscriber.c:255 +#, c-format msgid " -P, --publisher-server=CONNSTR publisher connection string\n" -msgstr " -d, --dbname=VERBDG mit angegebenen Verbindungsparametern verbinden\n" +msgstr " -P, --publisher-server=VERBDG Verbindungsparameter des Publikationsservers\n" -#: pg_createsubscriber.c:224 -#, fuzzy, c-format -#| msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" -msgid " -s, --socket-directory=DIR socket directory to use (default current directory)\n" -msgstr " -s, --socketdir=VERZ Verzeichnis für Socket (Standard: aktuelles Verz.)\n" +#: pg_createsubscriber.c:256 +#, c-format +msgid "" +" -R, --remove=OBJECTTYPE remove all objects of the specified type from specified\n" +" databases on the subscriber; accepts: publications\n" +msgstr "" -#: pg_createsubscriber.c:225 -#, fuzzy, c-format -#| msgid " -t, --timeout=SECS seconds to wait when using -w option\n" +#: pg_createsubscriber.c:258 +#, c-format +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=VERZ Verzeichnis für Socket (Standard: aktuelles Verz.)\n" + +#: pg_createsubscriber.c:259 +#, c-format msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" -msgstr " -t, --timeout=SEK Sekunden zu warten bei Option -w\n" +msgstr " -t, --recovery-timeout=SEK Sekunden zu warten auf Ende der Wiederherstellung\n" -#: pg_createsubscriber.c:226 -#, fuzzy, c-format -#| msgid " -U, --username=NAME database superuser name\n" -msgid " -U, --subscriber-username=NAME subscriber username\n" -msgstr " -U, --username=NAME Datenbank-Superusername\n" +#: pg_createsubscriber.c:260 +#, c-format +msgid " -T, --enable-two-phase enable two-phase commit for all subscriptions\n" +msgstr " -T, --enable-two-phase Zwei-Phasen-Commit für alle Subskriptionen einschalten\n" -#: pg_createsubscriber.c:227 +#: pg_createsubscriber.c:261 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=NAME Benutzername für Subskriptionsserver-Verbindung\n" + +#: pg_createsubscriber.c:262 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_createsubscriber.c:228 +#: pg_createsubscriber.c:263 #, c-format msgid "" " --config-file=FILENAME use specified main server configuration\n" @@ -1395,606 +1412,611 @@ msgstr "" " --config-file=DATEINAME angegebene Serverkonfigurationsdatei zum\n" " Starten des Ziel-Clusters verwenden\n" -#: pg_createsubscriber.c:230 +#: pg_createsubscriber.c:265 #, c-format msgid " --publication=NAME publication name\n" msgstr " --publication=NAME Publikationsname\n" -#: pg_createsubscriber.c:231 -#, fuzzy, c-format -#| msgid " -C, --create-slot create replication slot\n" +#: pg_createsubscriber.c:266 +#, c-format msgid " --replication-slot=NAME replication slot name\n" -msgstr " -C, --create-slot Replikations-Slot erzeugen\n" +msgstr " --replication-slot=NAME Replikations-Slot-Name\n" -#: pg_createsubscriber.c:232 +#: pg_createsubscriber.c:267 #, c-format msgid " --subscription=NAME subscription name\n" msgstr " --subscription=NAME Subskriptionsname\n" -#: pg_createsubscriber.c:233 +#: pg_createsubscriber.c:268 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_createsubscriber.c:234 +#: pg_createsubscriber.c:269 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_createsubscriber.c:265 +#: pg_createsubscriber.c:312 #, c-format msgid "could not parse connection string: %s" msgstr "konnte Verbindungsparameter nicht interpretieren: %s" -#: pg_createsubscriber.c:347 +#: pg_createsubscriber.c:389 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "Programm »%s« wird von %s benötigt, aber wurde nicht im selben Verzeichnis wie »%s« gefunden" -#: pg_createsubscriber.c:350 +#: pg_createsubscriber.c:392 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "Programm »%s« wurde von »%s« gefunden, aber es hatte nicht die gleiche Version wie %s" -#: pg_createsubscriber.c:370 -#, fuzzy, c-format -#| msgid "specified data directory \"%s\" is not a directory" +#: pg_createsubscriber.c:412 +#, c-format msgid "checking if directory \"%s\" is a cluster data directory" -msgstr "angegebenes Datenverzeichnis »%s« ist kein Verzeichnis" +msgstr "prüfe ob Verzeichnis »%s« ein Cluster-Datenverzeichnis ist" -#: pg_createsubscriber.c:376 +#: pg_createsubscriber.c:418 #, c-format msgid "data directory \"%s\" does not exist" msgstr "Datenverzeichnis »%s« existiert nicht" -#: pg_createsubscriber.c:384 +#: pg_createsubscriber.c:426 #, c-format msgid "directory \"%s\" is not a database cluster directory" msgstr "Verzeichnis »%s« ist kein Datenbankclusterverzeichnis" -#: pg_createsubscriber.c:501 +#: pg_createsubscriber.c:544 #, c-format msgid "connection to database failed: %s" msgstr "Verbindung zur Datenbank fehlgeschlagen: %s" -#: pg_createsubscriber.c:514 +#: pg_createsubscriber.c:557 streamutil.c:230 #, c-format -msgid "could not clear search_path: %s" -msgstr "konnte search_path nicht auf leer setzen: %s" +msgid "could not clear \"search_path\": %s" +msgstr "konnte »search_path« nicht auf leer setzen: %s" -#: pg_createsubscriber.c:554 +#: pg_createsubscriber.c:597 #, c-format msgid "getting system identifier from publisher" msgstr "hole Systemidentifikator vom Publikationsserver" -#: pg_createsubscriber.c:561 +#: pg_createsubscriber.c:604 #, c-format msgid "could not get system identifier: %s" msgstr "konnte Systemidentifikator nicht ermitteln: %s" -#: pg_createsubscriber.c:567 -#, fuzzy, c-format -#| msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" +#: pg_createsubscriber.c:610 +#, c-format msgid "could not get system identifier: got %d rows, expected %d row" -msgstr "Konnte System nicht identifizieren: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet" +msgstr "konnte Systemidentifikator nicht ermitteln: %d Zeilen erhalten, %d Zeile erwartet" -#: pg_createsubscriber.c:574 -#, fuzzy, c-format -#| msgid "%s: expected system identifier %llu, but found %llu" -msgid "system identifier is %llu on publisher" -msgstr "%s: Systemidentifikator %llu erwartet, aber %llu gefunden" +#: pg_createsubscriber.c:617 +#, c-format +msgid "system identifier is % on publisher" +msgstr "Systemidentifikator ist % auf dem Publikationsserver" -#: pg_createsubscriber.c:595 +#: pg_createsubscriber.c:637 #, c-format msgid "getting system identifier from subscriber" msgstr "hole Systemidentifikator vom Subskriptionsserver" -#: pg_createsubscriber.c:599 pg_createsubscriber.c:629 +#: pg_createsubscriber.c:641 pg_createsubscriber.c:670 #, c-format msgid "control file appears to be corrupt" msgstr "Kontrolldatei scheint kaputt zu sein" -#: pg_createsubscriber.c:603 pg_createsubscriber.c:644 +#: pg_createsubscriber.c:645 pg_createsubscriber.c:685 #, c-format -msgid "system identifier is %llu on subscriber" -msgstr "Systemidentifikator ist %llu auf dem Subskriptionsserver" +msgid "system identifier is % on subscriber" +msgstr "Systemidentifikator ist % auf dem Subskriptionsserver" -#: pg_createsubscriber.c:625 +#: pg_createsubscriber.c:666 #, c-format msgid "modifying system identifier of subscriber" msgstr "ändere Systemidentifikator auf dem Subskriptionsserver" -#: pg_createsubscriber.c:647 +#: pg_createsubscriber.c:688 #, c-format msgid "running pg_resetwal on the subscriber" msgstr "führe pg_resetwal auf dem Subskriptionsserver aus" -#: pg_createsubscriber.c:659 +#: pg_createsubscriber.c:700 #, c-format msgid "subscriber successfully changed the system identifier" msgstr "Subskriptionsserver hat Systemidentifikator erfolgreich geändert" -#: pg_createsubscriber.c:661 +#: pg_createsubscriber.c:702 #, c-format -msgid "subscriber failed to change system identifier: exit code: %d" -msgstr "" +msgid "could not change system identifier of subscriber: %s" +msgstr "konnte Systemidentifikator des Subskriptionsservers nicht ändern: %s" -#: pg_createsubscriber.c:685 +#: pg_createsubscriber.c:726 #, c-format msgid "could not obtain database OID: %s" msgstr "konnte Datenbank-OID nicht ermitteln: %s" -#: pg_createsubscriber.c:692 -#, fuzzy, c-format -#| msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" +#: pg_createsubscriber.c:733 +#, c-format msgid "could not obtain database OID: got %d rows, expected %d row" -msgstr "konnte Replikations-Slot »%s« nicht löschen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" +msgstr "konnte Datenbank-OID nicht ermitteln: %d Zeilen erhalten, %d Zeile erwartet" -#: pg_createsubscriber.c:764 -#, fuzzy, c-format -#| msgid "created replication slot \"%s\" on publisher" +#: pg_createsubscriber.c:805 +#, c-format msgid "create replication slot \"%s\" on publisher" -msgstr "Replikations-Slot »%s« wurde auf dem Publikationsserver erzeugt" +msgstr "erzeuge Replikations-Slot »%s« auf dem Publikationsserver" + +#: pg_createsubscriber.c:825 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "konnte zusätzlichen WAL-Datensatz nicht schreiben: %s" -#: pg_createsubscriber.c:788 +#: pg_createsubscriber.c:851 #, c-format msgid "could not obtain recovery progress: %s" msgstr "konnte Recovery-Fortschritt nicht ermitteln: %s" -#: pg_createsubscriber.c:819 -#, fuzzy, c-format -#| msgid "created replication slot \"%s\" on publisher" +#: pg_createsubscriber.c:884 +#, c-format msgid "checking settings on publisher" -msgstr "Replikations-Slot »%s« wurde auf dem Publikationsserver erzeugt" +msgstr "prüfe Einstellungen auf dem Publikationsserver" -#: pg_createsubscriber.c:829 -#, fuzzy, c-format -#| msgid "primary keys cannot be expressions" +#: pg_createsubscriber.c:894 +#, c-format msgid "primary server cannot be in recovery" -msgstr "Primärschlüssel können keine Ausdrücke sein" +msgstr "Primärserver kann nicht im Wiederherstellungsmodus sein" -#: pg_createsubscriber.c:864 -#, fuzzy, c-format -#| msgid "could not connect to the publisher: %s" +#: pg_createsubscriber.c:920 +#, c-format msgid "could not obtain publisher settings: %s" -msgstr "konnte nicht mit dem Publikationsserver verbinden: %s" +msgstr "konnte Einstellungen des Publikationsservers nicht ermitteln: %s" -#: pg_createsubscriber.c:887 +#: pg_createsubscriber.c:949 #, c-format -msgid "publisher requires wal_level >= \"logical\"" -msgstr "Publikationsserver benötigt wal_level >= »logical«" +msgid "publisher requires \"wal_level\" >= \"logical\"" +msgstr "Publikationsserver benötigt »wal_level« >= »logical«" -#: pg_createsubscriber.c:893 -#, fuzzy, c-format -#| msgid "Field requires %d characters, but only %d remain." +#: pg_createsubscriber.c:955 +#, c-format msgid "publisher requires %d replication slots, but only %d remain" -msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." +msgstr "Publikationsserver benötigt %d Replikations-Slots, aber nur %d verbleiben" -#: pg_createsubscriber.c:895 pg_createsubscriber.c:994 -#, fuzzy, c-format -#| msgid "Free one or increase max_replication_slots." -msgid "Consider increasing max_replication_slots to at least %d." -msgstr "Geben Sie einen frei oder erhöhen Sie max_replication_slots." +#: pg_createsubscriber.c:957 pg_createsubscriber.c:966 +#: pg_createsubscriber.c:1076 pg_createsubscriber.c:1085 +#: pg_createsubscriber.c:1094 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "Erhöhen Sie den Konfigurationsparameter »%s« auf mindestens %d." -#: pg_createsubscriber.c:902 -#, fuzzy, c-format -#| msgid "Field requires %d characters, but only %d remain." -msgid "publisher requires %d wal sender processes, but only %d remain" -msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." +#: pg_createsubscriber.c:964 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "Publikationsserver benötigt %d WAL-Sender-Prozesse, aber nur %d verbleiben" + +#: pg_createsubscriber.c:973 +#, c-format +msgid "two_phase option will not be enabled for replication slots" +msgstr "Option »two_phase« wird für Replikations-Slots nicht aktiviert" -#: pg_createsubscriber.c:904 +#: pg_createsubscriber.c:974 #, c-format -msgid "Consider increasing max_wal_senders to at least %d." +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "Subskriptionen werden mit der Option »two_phase« ausgeschaltet erzeugt. Vorbereitete Transaktionen werden bei COMMIT PREPARED repliziert werden." + +#: pg_createsubscriber.c:976 +#, c-format +msgid "You can use --enable-two-phase switch to enable two_phase." msgstr "" -#: pg_createsubscriber.c:937 +#: pg_createsubscriber.c:986 +#, c-format +msgid "required WAL could be removed from the publisher" +msgstr "" + +#: pg_createsubscriber.c:987 +#, fuzzy, c-format +#| msgid "Make sure the configuration parameter \"%s\" is set on the primary server." +msgid "Set the configuration parameter \"%s\" to -1 to ensure that required WAL files are not prematurely removed." +msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« auf dem Primärserver gesetzt ist." + +#: pg_createsubscriber.c:1019 #, c-format msgid "checking settings on subscriber" msgstr "prüfe Einstellungen auf Subskriptionsserver" -#: pg_createsubscriber.c:944 -#, fuzzy, c-format -#| msgid "target server must be shut down cleanly" +#: pg_createsubscriber.c:1026 +#, c-format msgid "target server must be a standby" -msgstr "Zielserver muss sauber heruntergefahren worden sein" +msgstr "Zielserver muss ein Standby sein" -#: pg_createsubscriber.c:968 +#: pg_createsubscriber.c:1050 #, c-format msgid "could not obtain subscriber settings: %s" msgstr "konnte Einstellungen des Subskriptionsservers nicht ermitteln: %s" -#: pg_createsubscriber.c:992 +#: pg_createsubscriber.c:1074 #, fuzzy, c-format -#| msgid "Field requires %d characters, but only %d remain." -msgid "subscriber requires %d replication slots, but only %d remain" -msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." +#| msgid "subscriber requires %d replication slots, but only %d remain" +msgid "subscriber requires %d active replication origins, but only %d remain" +msgstr "Subskriptionsserver benötigt %d Replikations-Slots, aber nur %d verbleiben" -#: pg_createsubscriber.c:1001 -#, fuzzy, c-format -#| msgid "Field requires %d characters, but only %d remain." +#: pg_createsubscriber.c:1083 +#, c-format msgid "subscriber requires %d logical replication workers, but only %d remain" -msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." +msgstr "Subskriptionsserver benötigt %d Arbeitsprozesse für logische Replikation, aber nur %d verbleiben" -#: pg_createsubscriber.c:1003 -#, fuzzy, c-format -#| msgid "terminating logical replication worker due to timeout" -msgid "Consider increasing max_logical_replication_workers to at least %d." -msgstr "Arbeitsprozess für logische Replikation wird abgebrochen wegen Zeitüberschreitung" - -#: pg_createsubscriber.c:1010 -#, fuzzy, c-format -#| msgid "Field requires %d characters, but only %d remain." +#: pg_createsubscriber.c:1092 +#, c-format msgid "subscriber requires %d worker processes, but only %d remain" -msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." +msgstr "Subskriptionsserver benötigt %d Arbeitsprozesse, aber nur %d verbleiben" -#: pg_createsubscriber.c:1012 -#, fuzzy, c-format -#| msgid "Consider increasing the configuration parameter \"max_worker_processes\"." -msgid "Consider increasing max_worker_processes to at least %d." -msgstr "Erhöhen Sie eventuell den Konfigurationsparameter »max_worker_processes«." +#: pg_createsubscriber.c:1127 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "lösche Subskription »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1135 -#, fuzzy, c-format -#| msgid "could not drop replication slot \"%s\" on publisher: %s" +#: pg_createsubscriber.c:1136 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "konnte Subskription »%s« nicht löschen: %s" + +#: pg_createsubscriber.c:1171 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "konnte bereits existierende Subskriptionen nicht ermitteln: %s" + +#: pg_createsubscriber.c:1303 +#, c-format msgid "could not drop replication slot \"%s\" on primary" -msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen: %s" +msgstr "konnte Replikations-Slot »%s« auf dem Primärserver nicht löschen" -#: pg_createsubscriber.c:1169 -#, fuzzy, c-format -#| msgid "could not obtain replication slot information: %s" +#: pg_createsubscriber.c:1337 +#, c-format msgid "could not obtain failover replication slot information: %s" -msgstr "konnte Replikations-Slot-Informationen nicht ermitteln: %s" +msgstr "konnte Failover-Replikations-Slot-Informationen nicht ermitteln: %s" -#: pg_createsubscriber.c:1171 pg_createsubscriber.c:1180 +#: pg_createsubscriber.c:1339 pg_createsubscriber.c:1348 #, c-format msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." -msgstr "" +msgstr "Löschen Sie die Failover-Replikations-Slots auf dem Subskriptionsserver bald, um Zurückhalten von WAL-Dateien zu vermeiden." -#: pg_createsubscriber.c:1179 -#, fuzzy, c-format -#| msgid "could not alter replication slot \"%s\": %s" +#: pg_createsubscriber.c:1347 +#, c-format msgid "could not drop failover replication slot" -msgstr "konnte Replikations-Slot »%s« nicht ändern: %s" +msgstr "konnte Failover-Replikations-Slot nicht löschen" -#: pg_createsubscriber.c:1201 -#, fuzzy, c-format -#| msgid "created replication slot \"%s\" on publisher" -msgid "creating the replication slot \"%s\" on database \"%s\"" -msgstr "Replikations-Slot »%s« wurde auf dem Publikationsserver erzeugt" +#: pg_createsubscriber.c:1369 +#, c-format +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "erzeuge Replikations-Slot »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1219 -#, fuzzy, c-format -#| msgid "could not create replication slot \"%s\": %s" -msgid "could not create replication slot \"%s\" on database \"%s\": %s" -msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" +#: pg_createsubscriber.c:1388 +#, c-format +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "konnte Replikations-Slot »%s« in Datenbank »%s« nicht erzeugen: %s" -#: pg_createsubscriber.c:1249 -#, fuzzy, c-format -#| msgid "dropped replication slot \"%s\" on publisher" -msgid "dropping the replication slot \"%s\" on database \"%s\"" -msgstr "Replikations-Slot »%s« auf dem Publikationsserver wurde gelöscht" +#: pg_createsubscriber.c:1418 +#, c-format +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "lösche Replikations-Slot »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1265 -#, fuzzy, c-format -#| msgid "could not drop replication slot \"%s\" on publisher: %s" -msgid "could not drop replication slot \"%s\" on database \"%s\": %s" -msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen: %s" +#: pg_createsubscriber.c:1434 +#, c-format +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "konnte Replikations-Slot »%s« in Datenbank »%s« nicht löschen: %s" -#: pg_createsubscriber.c:1286 -#, fuzzy, c-format -#| msgid "archive command failed with exit code %d" +#: pg_createsubscriber.c:1455 +#, c-format msgid "pg_ctl failed with exit code %d" -msgstr "Archivbefehl ist fehlgeschlagen mit Statuscode %d" +msgstr "pg_ctl ist fehlgeschlagen mit Statuscode %d" -#: pg_createsubscriber.c:1291 -#, fuzzy, c-format -#| msgid "child process was terminated by exception 0x%X" +#: pg_createsubscriber.c:1460 +#, c-format msgid "pg_ctl was terminated by exception 0x%X" -msgstr "Kindprozess wurde durch Ausnahme 0x%X beendet" +msgstr "pg_ctl wurde durch Ausnahme 0x%X beendet" -#: pg_createsubscriber.c:1293 +#: pg_createsubscriber.c:1462 #, 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." -#: pg_createsubscriber.c:1295 -#, fuzzy, c-format -#| msgid "child process was terminated by signal %d: %s" +#: pg_createsubscriber.c:1464 +#, c-format msgid "pg_ctl was terminated by signal %d: %s" -msgstr "Kindprozess wurde von Signal %d beendet: %s" +msgstr "pg_ctl wurde durch Signal %d beendet: %s" -#: pg_createsubscriber.c:1301 -#, fuzzy, c-format -#| msgid "child process exited with unrecognized status %d" +#: pg_createsubscriber.c:1470 +#, c-format msgid "pg_ctl exited with unrecognized status %d" -msgstr "Kindprozess hat mit unbekanntem Status %d beendet" +msgstr "pg_ctl hat mit unbekanntem Status %d beendet" -#: pg_createsubscriber.c:1304 +#: pg_createsubscriber.c:1473 #, c-format msgid "The failed command was: %s" msgstr "Der fehlgeschlagene Befehl war: %s" -#: pg_createsubscriber.c:1343 +#: pg_createsubscriber.c:1523 #, c-format msgid "server was started" msgstr "Server wurde gestartet" -#: pg_createsubscriber.c:1358 +#: pg_createsubscriber.c:1538 #, c-format msgid "server was stopped" msgstr "Server wurde angehalten" -#: pg_createsubscriber.c:1377 +#: pg_createsubscriber.c:1557 #, c-format msgid "waiting for the target server to reach the consistent state" -msgstr "" +msgstr "warte, dass der Zielserver einen konsistenten Zustand erreicht" -#: pg_createsubscriber.c:1400 +#: pg_createsubscriber.c:1580 #, c-format msgid "recovery timed out" -msgstr "" +msgstr "Zeitüberschreitung bei der Wiederherstellung" -#: pg_createsubscriber.c:1413 -#, fuzzy, c-format -#| msgid "server did not promote within %d second" -#| msgid_plural "server did not promote within %d seconds" +#: pg_createsubscriber.c:1593 +#, c-format msgid "server did not end recovery" -msgstr "Befördern des Servers wurde nicht innerhalb von %d Sekunde abgeschlossen" +msgstr "Server hat Recovery-Zustand nicht beendet" -#: pg_createsubscriber.c:1415 +#: pg_createsubscriber.c:1595 #, c-format msgid "target server reached the consistent state" -msgstr "" +msgstr "Zielserver hat einen konsistenten Zustand erreicht" -#: pg_createsubscriber.c:1416 -#, fuzzy, c-format -#| msgid "" -#| "\n" -#| "If pg_upgrade fails after this point, you must re-initdb the\n" -#| "new cluster before continuing." +#: pg_createsubscriber.c:1596 +#, c-format msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." -msgstr "" -"\n" -"Wenn pg_upgrade ab diesem Punkt fehlschlägt, dann müssen Sie den\n" -"neuen Cluster neu mit initdb initialisieren, bevor fortgesetzt\n" -"werden kann." +msgstr "Wenn pg_createsubscriber ab diesem Punkt fehlschlägt, dann müssen Sie die physikalische Replik neu erzeugen, bevor fortgesetzt werden kann." -#: pg_createsubscriber.c:1443 -#, fuzzy, c-format -#| msgid "could not obtain lock on relation \"%s\"" +#: pg_createsubscriber.c:1623 pg_createsubscriber.c:1746 +#, c-format msgid "could not obtain publication information: %s" -msgstr "konnte Sperre für Relation »%s« nicht setzen" +msgstr "konnte Publikationsinformationen nicht ermitteln: %s" -#: pg_createsubscriber.c:1457 +#: pg_createsubscriber.c:1637 #, c-format msgid "publication \"%s\" already exists" msgstr "Publikation »%s« existiert bereits" -#: pg_createsubscriber.c:1458 +#: pg_createsubscriber.c:1638 #, c-format msgid "Consider renaming this publication before continuing." -msgstr "" +msgstr "Nennen Sie diese Publikation eventuell um bevor Sie fortsetzen." -#: pg_createsubscriber.c:1465 -#, fuzzy, c-format -#| msgid "creating replication slot \"%s\"" -msgid "creating publication \"%s\" on database \"%s\"" -msgstr "erzeuge Replikations-Slot »%s«" +#: pg_createsubscriber.c:1645 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "erzeuge Publikation »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1478 -#, fuzzy, c-format -#| msgid "could not create replication slot \"%s\": %s" -msgid "could not create publication \"%s\" on database \"%s\": %s" -msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" +#: pg_createsubscriber.c:1658 +#, c-format +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "konnte Publikation »%s« in Datenbank »%s« nicht erzeugen: %s" -#: pg_createsubscriber.c:1507 -#, fuzzy, c-format -#| msgid "dropping replication slot \"%s\"" -msgid "dropping publication \"%s\" on database \"%s\"" -msgstr "lösche Replikations-Slot »%s«" +#: pg_createsubscriber.c:1688 +#, c-format +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "lösche Publikation »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1521 -#, fuzzy, c-format -#| msgid "could not drop replication slot \"%s\" on publisher: %s" -msgid "could not drop publication \"%s\" on database \"%s\": %s" -msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen: %s" +#: pg_createsubscriber.c:1702 +#, c-format +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "konnte Publikation »%s« in Datenbank »%s« nicht löschen: %s" -#: pg_createsubscriber.c:1567 +#: pg_createsubscriber.c:1739 #, fuzzy, c-format -#| msgid "remote transaction %u of subscription %u of database %u" -msgid "creating subscription \"%s\" on database \"%s\"" -msgstr "Remote-Transaktion %u von Subskription %u in Datenbank %u" +#| msgid "dropping publication \"%s\" in database \"%s\"" +msgid "dropping all existing publications in database \"%s\"" +msgstr "lösche Publikation »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1588 -#, fuzzy, c-format -#| msgid "could not create replication slot \"%s\": %s" -msgid "could not create subscription \"%s\" on database \"%s\": %s" -msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" +#: pg_createsubscriber.c:1797 +#, c-format +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "erzeuge Subskription »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1633 -#, fuzzy, c-format -#| msgid "could not obtain lock on relation \"%s\"" +#: pg_createsubscriber.c:1819 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "konnte Subskription »%s« in Datenbank »%s« nicht erzeugen: %s" + +#: pg_createsubscriber.c:1864 +#, c-format msgid "could not obtain subscription OID: %s" -msgstr "konnte Sperre für Relation »%s« nicht setzen" +msgstr "konnte Subskriptions-OID nicht ermitteln: %s" -#: pg_createsubscriber.c:1640 -#, fuzzy, c-format -#| msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" +#: pg_createsubscriber.c:1871 +#, c-format msgid "could not obtain subscription OID: got %d rows, expected %d row" -msgstr "konnte Replikations-Slot »%s« nicht lesen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" +msgstr "konnte Subskriptions-OID nicht ermitteln: %d Zeilen erhalten, %d Zeile erwartet" -#: pg_createsubscriber.c:1664 +#: pg_createsubscriber.c:1895 #, c-format -msgid "setting the replication progress (node name \"%s\" ; LSN %s) on database \"%s\"" -msgstr "" +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" +msgstr "setze Replikationsfortschritt (Knotenname »%s«, LSN %s) in Datenbank »%s«" -#: pg_createsubscriber.c:1679 -#, fuzzy, c-format -#| msgid "could not drop relation mapping for subscription \"%s\"" -msgid "could not set replication progress for the subscription \"%s\": %s" -msgstr "konnte Relation-Mapping für Subskription »%s« nicht löschen" +#: pg_createsubscriber.c:1910 +#, c-format +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "konnte Replikationsfortschritt für Subskription »%s« nicht setzen: %s" -#: pg_createsubscriber.c:1710 -#, fuzzy, c-format -#| msgid "remote transaction %u of subscription %u of database %u" -msgid "enabling subscription \"%s\" on database \"%s\"" -msgstr "Remote-Transaktion %u von Subskription %u in Datenbank %u" +#: pg_createsubscriber.c:1941 +#, c-format +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "aktiviere Subskription »%s« in Datenbank »%s«" -#: pg_createsubscriber.c:1722 -#, fuzzy, c-format -#| msgid "could not enable user right \"%s\"" +#: pg_createsubscriber.c:1953 +#, c-format msgid "could not enable subscription \"%s\": %s" -msgstr "konnte Benutzerrecht »%s« nicht aktivieren" +msgstr "konnte Subskription »%s« nicht aktivieren: %s" + +#: pg_createsubscriber.c:1999 +#, fuzzy, c-format +#| msgid "could not obtain database OID: %s" +msgid "could not obtain a list of databases: %s" +msgstr "konnte Datenbank-OID nicht ermitteln: %s" -#: pg_createsubscriber.c:1814 +#: pg_createsubscriber.c:2103 #, c-format msgid "cannot be executed by \"root\"" msgstr "kann nicht von »root« ausgeführt werden" -#: pg_createsubscriber.c:1815 +#: pg_createsubscriber.c:2104 #, c-format msgid "You must run %s as the PostgreSQL superuser." msgstr "Sie müssen %s als PostgreSQL-Superuser ausführen." -#: pg_createsubscriber.c:1836 +#: pg_createsubscriber.c:2127 #, fuzzy, c-format -#| msgid "dumping database \"%s\"" -msgid "duplicate database \"%s\"" -msgstr "Ausgabe der Datenbank »%s«" +#| msgid "database \"%s\" specified more than once" +msgid "database \"%s\" specified more than once for -d/--database" +msgstr "Datenbank »%s« mehrmals angegeben" -#: pg_createsubscriber.c:1877 +#: pg_createsubscriber.c:2146 #, fuzzy, c-format -#| msgid "duplicate option \"%s\"" -msgid "duplicate publication \"%s\"" -msgstr "doppelte Option »%s«" +#| msgid "table name \"%s\" specified more than once" +msgid "object type \"%s\" is specified more than once for -R/--remove" +msgstr "Tabellenname »%s« mehrmals angegeben" -#: pg_createsubscriber.c:1889 +#: pg_createsubscriber.c:2174 #, fuzzy, c-format -#| msgid "created replication slot \"%s\"" -msgid "duplicate replication slot \"%s\"" -msgstr "Replikations-Slot »%s« wurde erzeugt" +#| msgid "publication \"%s\" specified more than once" +msgid "publication \"%s\" specified more than once for --publication" +msgstr "Publikation »%s« mehrmals angegeben" -#: pg_createsubscriber.c:1901 +#: pg_createsubscriber.c:2183 #, fuzzy, c-format -#| msgid "duplicate option \"%s\"" -msgid "duplicate subscription \"%s\"" -msgstr "doppelte Option »%s«" +#| msgid "replication slot \"%s\" specified more than once" +msgid "replication slot \"%s\" specified more than once for --replication-slot" +msgstr "Replikations-Slot »%s« mehrmals angegeben" -#: pg_createsubscriber.c:1924 +#: pg_createsubscriber.c:2192 #, fuzzy, c-format -#| msgid "no data directory specified" +#| msgid "subscription \"%s\" specified more than once" +msgid "subscription \"%s\" specified more than once for --subscription" +msgstr "Subskription »%s« mehrmals angegeben" + +#: pg_createsubscriber.c:2217 +#, fuzzy, c-format +#| msgid "COPY %s cannot be used with %s" +msgid "%s cannot be used with -a/--all" +msgstr "COPY %s kann nicht mit %s verwendet werden" + +#: pg_createsubscriber.c:2235 +#, c-format msgid "no subscriber data directory specified" -msgstr "kein Datenverzeichnis angegeben" +msgstr "kein Datenverzeichnis für Subskriptionsserver angegeben" -#: pg_createsubscriber.c:1935 +#: pg_createsubscriber.c:2246 #, c-format msgid "could not determine current directory" msgstr "konnte aktuelles Verzeichnis nicht ermitteln" -#: pg_createsubscriber.c:1952 -#, fuzzy, c-format -#| msgid "could not parse connection string: %s" +#: pg_createsubscriber.c:2263 +#, c-format msgid "no publisher connection string specified" -msgstr "konnte Verbindungsparameter nicht interpretieren: %s" +msgstr "keine Verbindungsparameter für Publikationsserver angegeben" -#: pg_createsubscriber.c:1956 -#, fuzzy, c-format -#| msgid "invalid connection string syntax: %s" -msgid "validating connection string on publisher" -msgstr "ungültige Syntax für Verbindungszeichenkette: %s" +#: pg_createsubscriber.c:2267 +#, c-format +msgid "validating publisher connection string" +msgstr "validiere Verbindungsparameter für Publikationsserver" -#: pg_createsubscriber.c:1962 -#, fuzzy, c-format -#| msgid "invalid connection string syntax: %s" -msgid "validating connection string on subscriber" -msgstr "ungültige Syntax für Verbindungszeichenkette: %s" +#: pg_createsubscriber.c:2273 +#, c-format +msgid "validating subscriber connection string" +msgstr "validiere Verbindungsparameter für Subskriptionsserver" -#: pg_createsubscriber.c:1967 -#, fuzzy, c-format -#| msgid "no database specified" +#: pg_createsubscriber.c:2290 +#, c-format msgid "no database was specified" -msgstr "keine Datenbank angegeben" +msgstr "keine Datenbank wurde angegeben" -#: pg_createsubscriber.c:1979 -#, fuzzy, c-format -#| msgid "database \"%s\" is not currently accepting connections" -msgid "database \"%s\" was extracted from the publisher connection string" -msgstr "Datenbank »%s« akzeptiert gegenwärtig keine Verbindungen" +#: pg_createsubscriber.c:2301 +#, c-format +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "Datenbankname »%s« wurde aus der Verbindungszeichenkette des Publikationsservers extrahiert" -#: pg_createsubscriber.c:1984 -#, fuzzy, c-format -#| msgid "no database specified" +#: pg_createsubscriber.c:2306 +#, c-format msgid "no database name specified" -msgstr "keine Datenbank angegeben" +msgstr "kein Datenbankname angegeben" -#: pg_createsubscriber.c:1994 -#, fuzzy, c-format -#| msgid "must be owner of publication %s" -msgid "wrong number of publication names" -msgstr "Berechtigung nur für Eigentümer der Publikation %s" +#: pg_createsubscriber.c:2316 +#, c-format +msgid "wrong number of publication names specified" +msgstr "falsche Anzahl Publikationsnamen angegeben" -#: pg_createsubscriber.c:1995 -#, fuzzy, c-format -#| msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" -msgid "Number of publication names (%d) must match number of database names (%d)." -msgstr "Anzahl der Partitionierungsspalten (%d) stimmt nicht mit der Anzahl der angegebenen Partitionierungsschlüssel (%d) überein" +#: pg_createsubscriber.c:2317 +#, c-format +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." +msgstr "Die Anzahl der angegebenen Publikationsnamen (%d) muss mit der Anzahl der angegebenen Datenbanknamen (%d) übereinstimmen." -#: pg_createsubscriber.c:2001 -#, fuzzy, c-format -#| msgid "wrong number of array subscripts" -msgid "wrong number of subscription names" -msgstr "falsche Anzahl Arrayindizes" +#: pg_createsubscriber.c:2323 +#, c-format +msgid "wrong number of subscription names specified" +msgstr "falsche Anzahl Subskriptionsnamen angegeben" -#: pg_createsubscriber.c:2002 -#, fuzzy, c-format -#| msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" -msgid "Number of subscription names (%d) must match number of database names (%d)." -msgstr "Anzahl der Partitionierungsspalten (%d) stimmt nicht mit der Anzahl der angegebenen Partitionierungsschlüssel (%d) überein" +#: pg_createsubscriber.c:2324 +#, c-format +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." +msgstr "Die Anzahl der angegebenen Subskriptionsnamen (%d) muss mit der Anzahl der angegebenen Datenbanknamen (%d) übereinstimmen." -#: pg_createsubscriber.c:2008 -#, fuzzy, c-format -#| msgid "dropping replication slot \"%s\"" -msgid "wrong number of replication slot names" -msgstr "lösche Replikations-Slot »%s«" +#: pg_createsubscriber.c:2330 +#, c-format +msgid "wrong number of replication slot names specified" +msgstr "falsche Anzahl Replikations-Slot-Namen angegeben" + +#: pg_createsubscriber.c:2331 +#, c-format +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." +msgstr "Die Anzahl der angegebenen Replikations-Slot-Namen (%d) muss mit der Anzahl der angegebenen Datenbanknamen (%d) übereinstimmen." -#: pg_createsubscriber.c:2009 +#: pg_createsubscriber.c:2343 #, fuzzy, c-format -#| msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" -msgid "Number of replication slot names (%d) must match number of database names (%d)." -msgstr "Anzahl der Partitionierungsspalten (%d) stimmt nicht mit der Anzahl der angegebenen Partitionierungsschlüssel (%d) überein" +#| msgid "invalid output format \"%s\" specified" +msgid "invalid object type \"%s\" specified for -R/--remove" +msgstr "ungültiges Ausgabeformat »%s« angegeben" -#: pg_createsubscriber.c:2038 +#: pg_createsubscriber.c:2344 #, fuzzy, c-format -#| msgid "Finding the real data directory for the source cluster" +#| msgid "reading publications" +msgid "The valid option is: \"publications\"" +msgstr "lese Publikationen" + +#: pg_createsubscriber.c:2375 +#, c-format msgid "subscriber data directory is not a copy of the source database cluster" -msgstr "Suche das tatsächliche Datenverzeichnis des alten Clusters" +msgstr "Datenverzeichnis des Subskriptionsservers ist keine Kopie des Quelldatenbankclusters" -#: pg_createsubscriber.c:2051 +#: pg_createsubscriber.c:2388 #, c-format -msgid "standby is up and running" -msgstr "" +msgid "standby server is running" +msgstr "Standby-Server läuft" -#: pg_createsubscriber.c:2052 +#: pg_createsubscriber.c:2389 #, c-format -msgid "Stop the standby and try again." -msgstr "" +msgid "Stop the standby server and try again." +msgstr "Halten Sie den Standby-Server an und versuchen Sie erneut." -#: pg_createsubscriber.c:2061 +#: pg_createsubscriber.c:2398 #, c-format -msgid "starting the standby with command-line options" -msgstr "" +msgid "starting the standby server with command-line options" +msgstr "starte den Standby-Server mit Kommandozeilenoptionen" -#: pg_createsubscriber.c:2077 pg_createsubscriber.c:2116 +#: pg_createsubscriber.c:2414 pg_createsubscriber.c:2449 #, c-format msgid "stopping the subscriber" -msgstr "" +msgstr "stoppe den Subskriptionsserver" -#: pg_createsubscriber.c:2095 +#: pg_createsubscriber.c:2428 #, c-format msgid "starting the subscriber" msgstr "starte den Subskriptionsserver" -#: pg_createsubscriber.c:2124 +#: pg_createsubscriber.c:2457 #, c-format msgid "Done!" msgstr "Fertig!" @@ -2013,17 +2035,17 @@ msgstr "" msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=VERZ Write-Ahead-Log-Dateien in dieses Verzeichnis empfangen\n" -#: pg_receivewal.c:83 pg_recvlogical.c:93 +#: pg_receivewal.c:83 pg_recvlogical.c:92 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN nach Empfang der angegebenen LSN beenden\n" -#: pg_receivewal.c:84 pg_recvlogical.c:97 +#: pg_receivewal.c:84 pg_recvlogical.c:98 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr " --if-not-exists keinen Fehler ausgeben, wenn Slot beim Erzeugen schon existiert\n" -#: pg_receivewal.c:85 pg_recvlogical.c:99 +#: pg_receivewal.c:85 pg_recvlogical.c:100 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop bei Verbindungsverlust nicht erneut probieren\n" @@ -2035,7 +2057,7 @@ msgstr "" " --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_receivewal.c:87 pg_recvlogical.c:104 +#: pg_receivewal.c:87 pg_recvlogical.c:105 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -2067,12 +2089,12 @@ msgstr "" "\n" "Optionale Aktionen:\n" -#: pg_receivewal.c:104 pg_recvlogical.c:89 +#: pg_receivewal.c:104 pg_recvlogical.c:88 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot neuen Replikations-Slot erzeugen (Slot-Name siehe --slot)\n" -#: pg_receivewal.c:105 pg_recvlogical.c:90 +#: pg_receivewal.c:105 pg_recvlogical.c:89 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot Replikations-Slot löschen (Slot-Name siehe --slot)\n" @@ -2092,7 +2114,7 @@ msgstr "Log-Streaming gestoppt bei %X/%X (Zeitleiste %u)" msgid "switched to timeline %u at %X/%X" msgstr "auf Zeitleiste %u umgeschaltet bei %X/%X" -#: pg_receivewal.c:224 pg_recvlogical.c:1053 +#: pg_receivewal.c:224 pg_recvlogical.c:1073 #, c-format msgid "received interrupt signal, exiting" msgstr "Interrupt-Signal erhalten, beende" @@ -2162,7 +2184,7 @@ msgstr "kann Datei »%s« nicht prüfen: Komprimierung mit %s wird von dieser In msgid "starting log streaming at %X/%X (timeline %u)" msgstr "starte Log-Streaming bei %X/%X (Zeitleiste %u)" -#: pg_receivewal.c:693 pg_recvlogical.c:801 +#: pg_receivewal.c:693 pg_recvlogical.c:807 #, c-format msgid "could not parse end position \"%s\"" msgstr "konnte Endposition »%s« nicht parsen" @@ -2192,28 +2214,28 @@ msgstr "Komprimierung mit %s wird noch nicht unterstützt" msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "Replikationsverbindung, die Slot »%s« verwendet, ist unerwarteterweise datenbankspezifisch" -#: pg_receivewal.c:878 pg_recvlogical.c:972 +#: pg_receivewal.c:878 pg_recvlogical.c:991 #, c-format msgid "dropping replication slot \"%s\"" msgstr "lösche Replikations-Slot »%s«" -#: pg_receivewal.c:889 pg_recvlogical.c:982 +#: pg_receivewal.c:889 pg_recvlogical.c:1001 #, c-format msgid "creating replication slot \"%s\"" msgstr "erzeuge Replikations-Slot »%s«" -#: pg_receivewal.c:918 pg_recvlogical.c:1006 +#: pg_receivewal.c:918 pg_recvlogical.c:1026 #, c-format msgid "disconnected" msgstr "Verbindung beendet" #. translator: check source for value for %d -#: pg_receivewal.c:922 pg_recvlogical.c:1010 +#: pg_receivewal.c:922 pg_recvlogical.c:1030 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "Verbindung beendet; erneuter Versuch in %d Sekunden" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:83 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -2222,7 +2244,7 @@ msgstr "" "%s kontrolliert logische Dekodierungsströme von PostgreSQL.\n" "\n" -#: pg_recvlogical.c:88 +#: pg_recvlogical.c:87 #, c-format msgid "" "\n" @@ -2231,17 +2253,29 @@ msgstr "" "\n" "Auszuführende Aktion:\n" -#: pg_recvlogical.c:91 +#: pg_recvlogical.c:90 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start Streaming in einem Replikations-Slot starten (Slot-Name siehe --slot)\n" -#: pg_recvlogical.c:94 +#: pg_recvlogical.c:93 +#, fuzzy, c-format +#| msgid "" +#| " --includedir show location of C header files of the client\n" +#| " interfaces\n" +msgid "" +" --failover enable replication slot synchronization to standby servers when\n" +" creating a slot\n" +msgstr "" +" --includedir zeige Installationsverzeichnis der Headerdateien der\n" +" Client-Schnittstellen\n" + +#: pg_recvlogical.c:95 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=DATEI Log in diese Datei empfangen, - für Standardausgabe\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:96 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -2250,12 +2284,12 @@ msgstr "" " -F --fsync-interval=SEK\n" " Zeit zwischen Fsyncs der Ausgabedatei (Standard: %d)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:99 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN wo in einem bestehenden Slot das Streaming starten soll\n" -#: pg_recvlogical.c:100 +#: pg_recvlogical.c:101 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -2266,282 +2300,287 @@ msgstr "" " Option NAME mit optionalem Wert WERT an den\n" " Ausgabe-Plugin übergeben\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:104 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN Ausgabe-Plugin PLUGIN verwenden (Standard: %s)\n" -#: pg_recvlogical.c:106 +#: pg_recvlogical.c:107 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME Name des logischen Replikations-Slots\n" -#: pg_recvlogical.c:107 +#: pg_recvlogical.c:108 #, c-format msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" msgstr "" " -t, --two-phase Dekodieren von vorbereiteten Transaktionen beim Erzeugen\n" " eines Slots einschalten\n" -#: pg_recvlogical.c:112 +#: pg_recvlogical.c:113 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME Datenbank, mit der verbunden werden soll\n" -#: pg_recvlogical.c:145 +#: pg_recvlogical.c:146 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "bestätige Schreiben bis %X/%X, Flush bis %X/%X (Slot %s)" -#: pg_recvlogical.c:169 receivelog.c:360 +#: pg_recvlogical.c:170 receivelog.c:359 #, c-format msgid "could not send feedback packet: %s" msgstr "konnte Rückmeldungspaket nicht senden: %s" -#: pg_recvlogical.c:239 +#: pg_recvlogical.c:240 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "starte Log-Streaming bei %X/%X (Slot %s)" -#: pg_recvlogical.c:281 +#: pg_recvlogical.c:282 #, c-format msgid "streaming initiated" msgstr "Streaming eingeleitet" -#: pg_recvlogical.c:346 +#: pg_recvlogical.c:347 #, c-format msgid "could not open log file \"%s\": %m" msgstr "konnte Logdatei »%s« nicht öffnen: %m" -#: pg_recvlogical.c:375 receivelog.c:882 +#: pg_recvlogical.c:376 receivelog.c:889 #, c-format msgid "invalid socket: %s" msgstr "ungültiges Socket: %s" -#: pg_recvlogical.c:428 receivelog.c:910 +#: pg_recvlogical.c:429 receivelog.c:917 #, c-format msgid "%s() failed: %m" msgstr "%s() fehlgeschlagen: %m" -#: pg_recvlogical.c:435 receivelog.c:959 +#: pg_recvlogical.c:436 receivelog.c:966 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "konnte keine Daten vom WAL-Stream empfangen: %s" -#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 -#: receivelog.c:1066 +#: pg_recvlogical.c:478 pg_recvlogical.c:529 receivelog.c:1010 +#: receivelog.c:1073 #, c-format msgid "streaming header too small: %d" msgstr "Streaming-Header zu klein: %d" -#: pg_recvlogical.c:512 receivelog.c:843 +#: pg_recvlogical.c:513 receivelog.c:846 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "unbekannter Streaming-Header: »%c«" -#: pg_recvlogical.c:566 pg_recvlogical.c:578 +#: pg_recvlogical.c:567 pg_recvlogical.c:579 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "konnte %d Bytes nicht in Logdatei »%s« schreiben: %m" -#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 +#: pg_recvlogical.c:637 receivelog.c:641 receivelog.c:678 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "unerwarteter Abbruch des Replikations-Streams: %s" -#: pg_recvlogical.c:796 +#: pg_recvlogical.c:802 #, c-format msgid "could not parse start position \"%s\"" msgstr "konnte Startposition »%s« nicht parsen" -#: pg_recvlogical.c:874 +#: pg_recvlogical.c:880 #, c-format msgid "no slot specified" msgstr "kein Slot angegeben" -#: pg_recvlogical.c:881 +#: pg_recvlogical.c:887 #, c-format msgid "no target file specified" msgstr "keine Zieldatei angegeben" -#: pg_recvlogical.c:888 +#: pg_recvlogical.c:894 #, c-format msgid "no database specified" msgstr "keine Datenbank angegeben" -#: pg_recvlogical.c:895 +#: pg_recvlogical.c:901 #, c-format msgid "at least one action needs to be specified" msgstr "mindestens eine Aktion muss angegeben werden" -#: pg_recvlogical.c:902 +#: pg_recvlogical.c:908 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "--create-slot oder --start kann nicht zusammen mit --drop-slot verwendet werden" -#: pg_recvlogical.c:909 +#: pg_recvlogical.c:915 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "--create-slot oder --drop-slot kann nicht zusammen mit --startpos verwendet werden" -#: pg_recvlogical.c:916 +#: pg_recvlogical.c:922 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos kann nur zusammen mit --start angegeben werden" -#: pg_recvlogical.c:923 +#: pg_recvlogical.c:931 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase kann nur zusammen mit --create-slot angegeben werden" -#: pg_recvlogical.c:956 +#: pg_recvlogical.c:938 +#, c-format +msgid "--failover may only be specified with --create-slot" +msgstr "--failover kann nur zusammen mit --create-slot angegeben werden" + +#: pg_recvlogical.c:975 #, c-format msgid "could not establish database-specific replication connection" msgstr "konnte keine datenbankspezifische Replikationsverbindung herstellen" -#: pg_recvlogical.c:1056 +#: pg_recvlogical.c:1076 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "Endposition %X/%X durch Keepalive erreicht" -#: pg_recvlogical.c:1061 +#: pg_recvlogical.c:1081 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "Endposition %X/%X erreicht durch WAL-Eintrag bei %X/%X" -#: receivelog.c:66 +#: receivelog.c:65 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "konnte Archivstatusdatei »%s« nicht erstellen: %s" -#: receivelog.c:73 +#: receivelog.c:72 #, c-format msgid "could not close archive status file \"%s\": %s" msgstr "konnte Archivstatusdatei »%s« nicht schließen: %s" -#: receivelog.c:122 +#: receivelog.c:121 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "konnte Größe der Write-Ahead-Log-Datei »%s« nicht ermittlen: %s" -#: receivelog.c:133 +#: receivelog.c:132 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "konnte bestehende Write-Ahead-Log-Datei »%s« nicht öffnen: %s" -#: receivelog.c:142 +#: receivelog.c:141 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "konnte bestehende Write-Ahead-Log-Datei »%s« nicht fsyncen: %s" -#: receivelog.c:157 +#: receivelog.c:156 #, c-format msgid "write-ahead log file \"%s\" has %zd byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %zd bytes, should be 0 or %d" msgstr[0] "Write-Ahead-Log-Datei »%s« hat %zd Byte, sollte 0 oder %d sein" msgstr[1] "Write-Ahead-Log-Datei »%s« hat %zd Bytes, sollte 0 oder %d sein" -#: receivelog.c:175 +#: receivelog.c:174 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "konnte Write-Ahead-Log-Datei »%s« nicht öffnen: %s" -#: receivelog.c:216 +#: receivelog.c:215 #, c-format msgid "not renaming \"%s\", segment is not complete" msgstr "»%s« wird nicht umbenannt, Segment ist noch nicht vollständig" -#: receivelog.c:227 receivelog.c:317 receivelog.c:688 +#: receivelog.c:226 receivelog.c:316 receivelog.c:687 #, c-format msgid "could not close file \"%s\": %s" msgstr "konnte Datei »%s« nicht schließen: %s" -#: receivelog.c:288 +#: receivelog.c:287 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "Server berichtete unerwarteten History-Dateinamen für Zeitleiste %u: %s" -#: receivelog.c:297 +#: receivelog.c:296 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "konnte Zeitleisten-History-Datei »%s« nicht erzeugen: %s" -#: receivelog.c:304 +#: receivelog.c:303 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "konnte Zeitleisten-History-Datei »%s« nicht schreiben: %s" -#: receivelog.c:394 +#: receivelog.c:393 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "inkompatible Serverversion %s; Client unterstützt Streaming nicht mit Serverversionen älter als %s" -#: receivelog.c:403 +#: receivelog.c:402 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "inkompatible Serverversion %s; Client unterstützt Streaming nicht mit Serverversionen neuer als %s" -#: receivelog.c:508 +#: receivelog.c:507 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "Systemidentifikator stimmt nicht zwischen Basissicherung und Streaming-Verbindung überein" -#: receivelog.c:516 +#: receivelog.c:515 #, c-format msgid "starting timeline %u is not present in the server" msgstr "Startzeitleiste %u ist auf dem Server nicht vorhanden" -#: receivelog.c:555 +#: receivelog.c:554 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "unerwartete Antwort auf Befehl TIMELINE_HISTORY: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: receivelog.c:626 +#: receivelog.c:625 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "Server berichtete unerwartete nächste Zeitleiste %u, folgend auf Zeitleiste %u" -#: receivelog.c:632 +#: receivelog.c:631 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%X, aber gab an, dass nächste Zeitleiste %u bei %X/%X beginnt" -#: receivelog.c:672 +#: receivelog.c:671 #, c-format msgid "replication stream was terminated before stop point" msgstr "Replikationsstrom wurde vor Stopppunkt abgebrochen" -#: receivelog.c:718 +#: receivelog.c:717 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "unerwartete Ergebnismenge nach Ende der Zeitleiste: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: receivelog.c:727 +#: receivelog.c:726 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "konnte Startpunkt der nächsten Zeitleiste (»%s«) nicht interpretieren" -#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 +#: receivelog.c:774 receivelog.c:1029 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "konnte Datei »%s« nicht fsyncen: %s" -#: receivelog.c:1083 +#: receivelog.c:1090 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "Write-Ahead-Log-Eintrag für Offset %u erhalten ohne offene Datei" -#: receivelog.c:1093 +#: receivelog.c:1100 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "WAL-Daten-Offset %08x erhalten, %08x erwartet" -#: receivelog.c:1128 +#: receivelog.c:1135 #, c-format msgid "could not write %d bytes to WAL file \"%s\": %s" msgstr "konnte %d Bytes nicht in WAL-Datei »%s« schreiben: %s" -#: receivelog.c:1153 receivelog.c:1193 receivelog.c:1222 +#: receivelog.c:1160 receivelog.c:1200 receivelog.c:1228 #, c-format msgid "could not send copy-end packet: %s" msgstr "konnte COPY-Ende-Paket nicht senden: %s" @@ -2555,11 +2594,6 @@ msgstr "Passwort: " msgid "could not connect to server" msgstr "konnte nicht mit Server verbinden" -#: streamutil.c:230 -#, c-format -msgid "could not clear \"search_path\": %s" -msgstr "konnte »search_path« nicht auf leer setzen: %s" - #: streamutil.c:246 #, c-format msgid "could not determine server setting for \"integer_datetimes\"" @@ -2570,69 +2604,69 @@ msgstr "konnte Servereinstellung für »integer_datetimes« nicht ermitteln" msgid "\"integer_datetimes\" compile flag does not match server" msgstr "Kompilieroption »integer_datetimes« stimmt nicht mit Server überein" -#: streamutil.c:372 +#: streamutil.c:304 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "konnte WAL-Segmentgröße nicht ermitteln: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet" -#: streamutil.c:382 +#: streamutil.c:314 #, c-format msgid "WAL segment size could not be parsed" msgstr "WAL-Segmentgröße konnte nicht interpretiert werden" -#: streamutil.c:400 +#: streamutil.c:332 #, c-format msgid "remote server reported invalid WAL segment size (%d byte)" msgid_plural "remote server reported invalid WAL segment size (%d bytes)" msgstr[0] "Server meldete ungültige WAL-Segmentgröße (%d Byte)" msgstr[1] "Server meldete ungültige WAL-Segmentgröße (%d Bytes)" -#: streamutil.c:404 +#: streamutil.c:336 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "Die WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein." -#: streamutil.c:446 +#: streamutil.c:378 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "konnte Gruppenzugriffseinstellung nicht ermitteln: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet" -#: streamutil.c:455 +#: streamutil.c:387 #, c-format msgid "group access flag could not be parsed: %s" msgstr "Gruppenzugriffseinstellung konnte nicht interpretiert werden: %s" -#: streamutil.c:498 streamutil.c:535 +#: streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "Konnte System nicht identifizieren: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet" -#: streamutil.c:587 +#: streamutil.c:519 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "konnte Replikations-Slot »%s« nicht lesen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: streamutil.c:599 +#: streamutil.c:531 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "Replikations-Slot »%s« existiert nicht" -#: streamutil.c:610 +#: streamutil.c:542 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "physischer Replikations-Slot wurde erwartet, stattdessen wurde Typ »%s« erhalten" -#: streamutil.c:624 +#: streamutil.c:556 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "konnte restart_lsn »%s« für Replikations-Slot »%s« nicht parsen" -#: streamutil.c:741 +#: streamutil.c:678 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: streamutil.c:785 +#: streamutil.c:722 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "konnte Replikations-Slot »%s« nicht löschen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po index 1148c0b46b9dc..b637026541f0e 100644 --- a/src/bin/pg_basebackup/po/es.po +++ b/src/bin/pg_basebackup/po/es.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL) 16\n" +"Project-Id-Version: pg_basebackup (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:19+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2025-02-16 19:49+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -70,9 +70,8 @@ msgstr "el valor para la opción de compresión «%s» debe ser un entero" #: ../../common/compression.c:331 #, c-format -#| msgid "value for compression option \"%s\" must be a boolean" msgid "value for compression option \"%s\" must be a Boolean value" -msgstr "el valor para la opción de compresión «%s» debe ser booleano" +msgstr "el valor para la opción de compresión «%s» debe ser un booleano" #: ../../common/compression.c:379 #, c-format @@ -94,6 +93,65 @@ msgstr "el algoritmo de compresión «%s» no acepta una cantidad de procesos ay msgid "compression algorithm \"%s\" does not support long-distance mode" msgstr "el algoritmo de compresión «%s» no acepta modo de larga distancia" +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "no se pudo abrir archivo «%s» para lectura: %m" + +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: pg_receivewal.c:402 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "no se pudo cerrar el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "discordancia en orden de bytes" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"posible discordancia en orden de bytes\n" +"El ordenamiento de bytes usado para almacenar el archivo pg_control puede no\n" +"coincidir con el usado por este programa. En tal caso los resultados de abajo\n" +"serían erróneos, y la instalación de PostgreSQL sería incompatible con este\n" +"directorio de datos." + +#: ../../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 ../../fe_utils/recovery_gen.c:140 +#: pg_basebackup.c:1846 pg_receivewal.c:386 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "no se pudo escribir el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format @@ -105,39 +163,69 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 -#: pg_receivewal.c:319 pg_recvlogical.c:339 +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_receivewal.c:319 pg_recvlogical.c:352 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: ../../common/file_utils.c:162 pg_receivewal.c:242 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "esta instalación no soporta el método de sync «%s»" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../../common/file_utils.c:196 pg_receivewal.c:471 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 ../../fe_utils/recovery_gen.c:121 -#: pg_receivewal.c:386 +#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "no se pudo abrir el archivo «%s»: %m" +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 -#: pg_recvlogical.c:194 +#: ../../common/restricted_token.c:60 #, c-format -msgid "could not fsync file \"%s\": %m" -msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" +msgid "could not open process token: error code %lu" +msgstr "no se pudo abrir el token de proceso: código de error %lu" -#: ../../common/file_utils.c:379 pg_basebackup.c:2237 walmethods.c:462 +#: ../../common/restricted_token.c:74 #, c-format -msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" +msgid "could not allocate SIDs: error code %lu" +msgstr "no se pudo emplazar los SIDs: código de error %lu" + +#: ../../common/restricted_token.c:94 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "no se pudo crear el token restringido: código de error %lu" + +#: ../../common/restricted_token.c:115 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "no se pudo iniciar el proceso para la orden «%s»: código de error %lu" + +#: ../../common/restricted_token.c:153 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "no se pudo re-ejecutar con el token restringido: código de error %lu" + +#: ../../common/restricted_token.c:168 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "no se pudo obtener el código de salida del subproceso: código de error %lu" #: ../../fe_utils/option_utils.c:69 #, c-format @@ -149,51 +237,62 @@ msgstr "el valor «%s» no es válido para la opción «%s»" msgid "%s must be in range %d..%d" msgstr "%s debe estar en el rango %d..%d" -#: ../../fe_utils/recovery_gen.c:34 ../../fe_utils/recovery_gen.c:45 -#: ../../fe_utils/recovery_gen.c:70 ../../fe_utils/recovery_gen.c:90 -#: ../../fe_utils/recovery_gen.c:149 pg_basebackup.c:1609 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "método de sync no reconocido: «%s»" + +#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 +#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 +#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:334 #, c-format msgid "out of memory" msgstr "memoria agotada" -#: ../../fe_utils/recovery_gen.c:124 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1406 pg_basebackup.c:1700 +#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 +#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 #, c-format msgid "could not write to file \"%s\": %m" msgstr "no se pudo escribir a archivo «%s»: %m" -#: ../../fe_utils/recovery_gen.c:133 bbstreamer_file.c:93 bbstreamer_file.c:360 -#: pg_basebackup.c:1470 pg_basebackup.c:1679 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" msgstr "no se pudo crear archivo «%s»: %m" -#: bbstreamer_file.c:138 pg_recvlogical.c:633 +#: ../../fe_utils/string_utils.c:587 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "no se pudo cerrar el archivo «%s»: %m" +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "el argumento de la orden de shell contiene un salto de línea o retorno de carro: «%s»\n" + +#: ../../fe_utils/string_utils.c:760 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "el nombre de base de datos contiene un salto de línea o retorno de carro: «%s»\n" #: bbstreamer_file.c:275 #, c-format msgid "unexpected state while extracting archive" msgstr "estado inesperado mientras se extraía el archivo" -#: bbstreamer_file.c:320 pg_basebackup.c:686 pg_basebackup.c:730 +#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 +#: pg_basebackup.c:757 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: bbstreamer_file.c:325 +#: bbstreamer_file.c:326 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "no se pudo definir los permisos del directorio «%s»: %m" -#: bbstreamer_file.c:344 +#: bbstreamer_file.c:345 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "no se pudo crear un enlace simbólico desde «%s» a «%s»: %m" -#: bbstreamer_file.c:364 +#: bbstreamer_file.c:365 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "no se pudo definir los permisos al archivo «%s»: %m" @@ -228,7 +327,7 @@ msgstr "no se pudo escribir al archivo comprimido «%s»: %s" msgid "could not close compressed file \"%s\": %m" msgstr "no se pudo cerrar el archivo comprimido «%s»: %m" -#: bbstreamer_gzip.c:245 walmethods.c:876 +#: bbstreamer_gzip.c:245 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "no se pudo inicializar la biblioteca de compresión" @@ -278,12 +377,12 @@ msgstr "la terminación del archivo tar excede de 2 bloques" msgid "unexpected state while parsing tar archive" msgstr "se encontró un estado inesperado mientras se interpretaba el archivo tar" -#: bbstreamer_tar.c:296 +#: bbstreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "miembro de tar tiene nombre vacío" -#: bbstreamer_tar.c:328 +#: bbstreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "el flujo COPY terminó antes que el último archivo estuviera completo" @@ -305,115 +404,117 @@ msgstr "no se pudo definir la cantidad de procesos ayudantes de compresión a %d #: bbstreamer_zstd.c:116 #, c-format -#| msgid "could not enable user right \"%s\"" msgid "could not enable long-distance mode: %s" -msgstr "no se pudo habilitar el modo “long-distance”: %s" +msgstr "no se pudo habilitar el modo de larga distancia: %s" #: bbstreamer_zstd.c:275 #, c-format msgid "could not create zstd decompression context" msgstr "no se pudo crear el contexto de descompresión zstd" -#: pg_basebackup.c:238 +#: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" msgstr "eliminando el directorio de datos «%s»" -#: pg_basebackup.c:240 +#: pg_basebackup.c:247 #, c-format msgid "failed to remove data directory" msgstr "no se pudo eliminar el directorio de datos" -#: pg_basebackup.c:244 +#: pg_basebackup.c:251 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "eliminando el contenido del directorio «%s»" -#: pg_basebackup.c:246 +#: pg_basebackup.c:253 #, c-format msgid "failed to remove contents of data directory" msgstr "no se pudo eliminar el contenido del directorio de datos" -#: pg_basebackup.c:251 +#: pg_basebackup.c:258 #, c-format msgid "removing WAL directory \"%s\"" msgstr "eliminando el directorio de WAL «%s»" -#: pg_basebackup.c:253 +#: pg_basebackup.c:260 #, c-format msgid "failed to remove WAL directory" msgstr "no se pudo eliminar el directorio de WAL" -#: pg_basebackup.c:257 +#: pg_basebackup.c:264 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "eliminando el contenido del directorio de WAL «%s»" -#: pg_basebackup.c:259 +#: pg_basebackup.c:266 #, c-format msgid "failed to remove contents of WAL directory" msgstr "no se pudo eliminar el contenido del directorio de WAL" -#: pg_basebackup.c:265 +#: pg_basebackup.c:272 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "directorio de datos «%s» no eliminado a petición del usuario" -#: pg_basebackup.c:268 +#: pg_basebackup.c:275 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "directorio de WAL «%s» no eliminado a petición del usuario" -#: pg_basebackup.c:272 +#: pg_basebackup.c:279 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "los cambios a los directorios de tablespaces no se desharán" -#: pg_basebackup.c:324 +#: pg_basebackup.c:331 #, c-format msgid "directory name too long" msgstr "nombre de directorio demasiado largo" -#: pg_basebackup.c:331 +#: pg_basebackup.c:338 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "múltiples signos «=» en mapeo de tablespace" -#: pg_basebackup.c:340 +#: pg_basebackup.c:347 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "formato de mapeo de tablespace «%s» no válido, debe ser «ANTIGUO=NUEVO»" -#: pg_basebackup.c:359 +#: pg_basebackup.c:366 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "directorio antiguo no es una ruta absoluta en mapeo de tablespace: %s" -#: pg_basebackup.c:363 +#: pg_basebackup.c:370 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "directorio nuevo no es una ruta absoluta en mapeo de tablespace: %s" -#: pg_basebackup.c:385 +#: pg_basebackup.c:392 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" "\n" msgstr "" -"%s obtiene un respaldo base a partir de un servidor PostgreSQL en ejecución.\n" +"%s obtiene un respaldo base a partir de un servidor PostgreSQL\n" +"en ejecución.\n" "\n" -#: pg_basebackup.c:387 pg_receivewal.c:79 pg_recvlogical.c:76 +#: pg_basebackup.c:394 pg_createsubscriber.c:221 pg_receivewal.c:79 +#: pg_recvlogical.c:86 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_basebackup.c:388 pg_receivewal.c:80 pg_recvlogical.c:77 +#: pg_basebackup.c:395 pg_createsubscriber.c:222 pg_receivewal.c:80 +#: pg_recvlogical.c:87 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_basebackup.c:389 +#: pg_basebackup.c:396 #, c-format msgid "" "\n" @@ -422,17 +523,26 @@ msgstr "" "\n" "Opciones que controlan la salida:\n" -#: pg_basebackup.c:390 +#: pg_basebackup.c:397 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=DIR directorio en el cual recibir el respaldo base\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t formato de salida (plano (por omisión), tar)\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:399 +#, c-format +msgid "" +" -i, --incremental=OLDMANIFEST\n" +" take incremental backup\n" +msgstr "" +" -i, --incremental=MANIFIESTOANTIGUO\n" +" tomar respaldo base incremental\n" + +#: pg_basebackup.c:401 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -441,7 +551,7 @@ msgstr "" " -r, --max-rate=TASA máxima tasa a la que transferir el directorio de datos\n" " (en kB/s, o use sufijos «k» o «M»)\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:403 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -450,7 +560,7 @@ msgstr "" " -R, --write-recovery-conf\n" " escribe configuración para replicación\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:405 #, c-format msgid "" " -t, --target=TARGET[:DETAIL]\n" @@ -459,7 +569,7 @@ msgstr "" " -t, --target=DESTINO:[DETALLE]\n" " destino del respaldo base (si no es el cliente)\n" -#: pg_basebackup.c:398 +#: pg_basebackup.c:407 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -468,12 +578,12 @@ msgstr "" " -T, --tablespace-mapping=ANTIGUO=NUEVO\n" " reubicar el directorio de tablespace de ANTIGUO a NUEVO\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:409 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=DIRWAL ubicación para el directorio WAL\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:410 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -481,14 +591,14 @@ msgid "" msgstr "" " -X, --wal-method=none|fetch|stream\n" " incluye los archivos WAL necesarios,\n" -" en el modo especificado\n" +" usando el método especificado\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:412 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip comprimir la salida de tar\n" -#: pg_basebackup.c:404 +#: pg_basebackup.c:413 #, c-format msgid "" " -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" @@ -497,12 +607,12 @@ msgstr "" " -Z, --compress=[{client|server}-]MÉTODO[:DETALLE]\n" " comprimir en cliente o servidor como se especifica\n" -#: pg_basebackup.c:406 +#: pg_basebackup.c:415 #, c-format msgid " -Z, --compress=none do not compress tar output\n" msgstr " -Z, --compress=none no comprimir la salida tar\n" -#: pg_basebackup.c:407 +#: pg_basebackup.c:416 #, c-format msgid "" "\n" @@ -511,89 +621,93 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_basebackup.c:408 +#: pg_basebackup.c:417 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" -" set fast or spread checkpointing\n" +" set fast or spread (default) checkpointing\n" msgstr "" -" -c, --checkpoint=fast|spread\n" -" utilizar checkpoint rápido o extendido\n" +" -c, --checkpoint=spread|fast\n" +" utilizar checkpoint extendido (por omisión) o rápido\n" -#: pg_basebackup.c:410 +#: pg_basebackup.c:419 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot crear un slot de replicación\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:420 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=ETIQUETA establecer etiqueta del respaldo\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:421 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean no hacer limpieza tras errores\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:422 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:423 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostrar información de progreso\n" -#: pg_basebackup.c:415 pg_receivewal.c:89 +#: pg_basebackup.c:424 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=NOMBRE slot de replicación a usar\n" -#: pg_basebackup.c:416 pg_receivewal.c:91 pg_recvlogical.c:98 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose desplegar mensajes verbosos\n" -#: pg_basebackup.c:417 pg_receivewal.c:92 pg_recvlogical.c:99 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: pg_basebackup.c:418 +#: pg_basebackup.c:427 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " use algorithm for manifest checksums\n" msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" -" usar algoritmo para sumas de comprobación del manifiesto\n" +" algoritmo a usar para \"checksums\" del manifiesto\n" -#: pg_basebackup.c:420 +#: pg_basebackup.c:429 #, c-format msgid "" " --manifest-force-encode\n" " hex encode all file names in manifest\n" msgstr "" -" --manifest-force-encode\n" -" codifica a hexadecimal todos los nombres de archivo en el manifiesto\n" +" --manifest-force-encode codifica a hexadecimal todos los nombres\n" +" de archivo en el manifiesto\n" -#: pg_basebackup.c:422 +#: pg_basebackup.c:431 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" -msgstr " --no-estimate-size no estimar el tamaño del la copia de seguridad en el lado del servidor\n" +msgstr "" +" --no-estimate-size no estimar el tamaño de la copia de seguridad en\n" +" el lado del servidor\n" -#: pg_basebackup.c:423 +#: pg_basebackup.c:432 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" -msgstr " --no-manifest suprimir la generación del manifiesto de la copia de seguridad\n" +msgstr "" +" --no-manifest suprimir la generación del manifiesto\n" +" de la copia de seguridad\n" -#: pg_basebackup.c:424 +#: pg_basebackup.c:433 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot evitar la creación de un slot de replicación temporal\n" -#: pg_basebackup.c:425 +#: pg_basebackup.c:434 #, c-format msgid "" " --no-verify-checksums\n" @@ -602,12 +716,19 @@ msgstr "" " --no-verify-checksums\n" " no verificar checksums\n" -#: pg_basebackup.c:427 pg_receivewal.c:95 pg_recvlogical.c:100 +#: pg_basebackup.c:436 +#, c-format +msgid "" +" --sync-method=METHOD\n" +" set method for syncing files to disk\n" +msgstr " --sync-method=MÉTODO definir método para sincronizar archivos a disco\n" + +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda, luego salir\n" -#: pg_basebackup.c:428 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 #, c-format msgid "" "\n" @@ -616,22 +737,22 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_basebackup.c:429 pg_receivewal.c:97 +#: pg_basebackup.c:440 pg_receivewal.c:97 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONSTR cadena de conexión\n" -#: pg_basebackup.c:430 pg_receivewal.c:98 pg_recvlogical.c:103 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN dirección del servidor o directorio del socket\n" -#: pg_basebackup.c:431 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT número de port del servidor\n" -#: pg_basebackup.c:432 +#: pg_basebackup.c:443 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -640,24 +761,25 @@ msgstr "" " -s, --status-interval=INTERVALO (segundos)\n" " tiempo entre envíos de paquetes de estado al servidor\n" -#: pg_basebackup.c:434 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOMBRE conectarse con el usuario especificado\n" -#: pg_basebackup.c:435 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: pg_basebackup.c:436 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forzar un prompt para la contraseña\n" " (debería ser automático)\n" -#: pg_basebackup.c:437 pg_receivewal.c:106 pg_recvlogical.c:108 +#: pg_basebackup.c:448 pg_createsubscriber.c:240 pg_receivewal.c:106 +#: pg_recvlogical.c:118 #, c-format msgid "" "\n" @@ -666,484 +788,549 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_basebackup.c:438 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:449 pg_createsubscriber.c:241 pg_receivewal.c:107 +#: pg_recvlogical.c:119 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_basebackup.c:477 +#: pg_basebackup.c:488 #, c-format msgid "could not read from ready pipe: %m" msgstr "no se pudo leer desde la tubería: %m" -#: pg_basebackup.c:480 pg_basebackup.c:622 pg_basebackup.c:2151 -#: streamutil.c:441 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 +#: streamutil.c:521 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "no se pudo interpretar la ubicación del WAL «%s»" -#: pg_basebackup.c:585 pg_receivewal.c:600 +#: pg_basebackup.c:596 pg_receivewal.c:600 #, c-format msgid "could not finish writing WAL files: %m" msgstr "no se pudo completar la escritura de archivos WAL: %m" -#: pg_basebackup.c:631 +#: pg_basebackup.c:642 #, c-format msgid "could not create pipe for background process: %m" msgstr "no se pudo crear la tubería para el proceso en segundo plano: %m" -#: pg_basebackup.c:664 +#: pg_basebackup.c:676 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "se creó slot temporal de replicación «%s»" -#: pg_basebackup.c:667 +#: pg_basebackup.c:679 #, c-format msgid "created replication slot \"%s\"" msgstr "se creó el slot de replicación «%s»" -#: pg_basebackup.c:701 +#: pg_basebackup.c:728 #, c-format msgid "could not create background process: %m" msgstr "no se pudo lanzar el proceso en segundo plano: %m" -#: pg_basebackup.c:710 +#: pg_basebackup.c:737 #, c-format msgid "could not create background thread: %m" msgstr "no se pudo lanzar el hilo en segundo plano: %m" -#: pg_basebackup.c:749 +#: pg_basebackup.c:776 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "el directorio «%s» existe pero no está vacío" -#: pg_basebackup.c:755 +#: pg_basebackup.c:782 pg_createsubscriber.c:390 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: pg_basebackup.c:831 +#: pg_basebackup.c:858 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespaces %*s" -#: pg_basebackup.c:843 +#: pg_basebackup.c:870 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" -#: pg_basebackup.c:859 +#: pg_basebackup.c:886 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:883 +#: pg_basebackup.c:910 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "tasa de transferencia «%s» no es un valor válido" -#: pg_basebackup.c:885 +#: pg_basebackup.c:912 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "tasa de transferencia «%s» no válida: %m" -#: pg_basebackup.c:892 +#: pg_basebackup.c:919 #, c-format msgid "transfer rate must be greater than zero" msgstr "tasa de transferencia debe ser mayor que cero" -#: pg_basebackup.c:922 +#: pg_basebackup.c:949 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "unidad de --max-rato no válida: «%s»" -#: pg_basebackup.c:926 +#: pg_basebackup.c:953 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "la tasa de transferencia «%s» excede el rango de enteros" -#: pg_basebackup.c:933 +#: pg_basebackup.c:960 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "la tasa de transferencia «%s» está fuera de rango" -#: pg_basebackup.c:995 +#: pg_basebackup.c:1022 #, c-format msgid "could not get COPY data stream: %s" msgstr "no se pudo obtener un flujo de datos COPY: %s" -#: pg_basebackup.c:1012 pg_recvlogical.c:436 pg_recvlogical.c:608 +#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 #: receivelog.c:973 #, c-format msgid "could not read COPY data: %s" msgstr "no fue posible leer datos COPY: %s" -#: pg_basebackup.c:1016 +#: pg_basebackup.c:1043 #, c-format msgid "background process terminated unexpectedly" msgstr "un proceso en segundo plano terminó inesperadamente" -#: pg_basebackup.c:1087 +#: pg_basebackup.c:1114 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "no se pueden inyectar un manifiesto en un archivo tar comprimido" -#: pg_basebackup.c:1088 +#: pg_basebackup.c:1115 #, c-format msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." msgstr "Use compresión del lado del cliente, envíe la salida a un directorio en lugar de a salida estándar, o use %s." -#: pg_basebackup.c:1104 +#: pg_basebackup.c:1131 #, c-format msgid "cannot parse archive \"%s\"" msgstr "no se pudo interpretar el archivo «%s»" -#: pg_basebackup.c:1105 +#: pg_basebackup.c:1132 #, c-format msgid "Only tar archives can be parsed." msgstr "Sólo los archivos tar pueden ser interpretados." -#: pg_basebackup.c:1107 +#: pg_basebackup.c:1134 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "El formato plano requiere que pg_basebackup interprete el archivo." -#: pg_basebackup.c:1109 +#: pg_basebackup.c:1136 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "Usar - como directorio de salida requiere que pg_basebackup interprete el archivo." -#: pg_basebackup.c:1111 +#: pg_basebackup.c:1138 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "La opción -R requiere que pg_basebackup interprete el archivo." -#: pg_basebackup.c:1330 +#: pg_basebackup.c:1357 #, c-format msgid "archives must precede manifest" msgstr "los archivos deben preceder al manifiesto" -#: pg_basebackup.c:1345 +#: pg_basebackup.c:1372 #, c-format msgid "invalid archive name: \"%s\"" msgstr "nombre de archivo no válido: «%s»" -#: pg_basebackup.c:1417 +#: pg_basebackup.c:1444 #, c-format msgid "unexpected payload data" msgstr "datos inesperados" -#: pg_basebackup.c:1560 +#: pg_basebackup.c:1587 #, c-format msgid "empty COPY message" msgstr "mensaje COPY vacío" -#: pg_basebackup.c:1562 +#: pg_basebackup.c:1589 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "mensaje COPY mal formado de tipo %d, largo %zu" -#: pg_basebackup.c:1760 +#: pg_basebackup.c:1789 #, c-format msgid "incompatible server version %s" msgstr "versión del servidor %s incompatible" -#: pg_basebackup.c:1776 +#: pg_basebackup.c:1805 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "Use -X none o -X fetch para deshabilitar el flujo de log." -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1841 +#, c-format +msgid "server does not support incremental backup" +msgstr "el servidor no soporta backup incremental" + +#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 +#: receivelog.c:543 receivelog.c:582 streamutil.c:367 streamutil.c:441 +#: streamutil.c:493 streamutil.c:581 streamutil.c:733 streamutil.c:778 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "no se pudo ejecutar la orden de replicación «%s»: %s" + +#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#, c-format +msgid "could not upload manifest: %s" +msgstr "no se pudo cargar el manifiesto: %s" + +#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#, c-format +msgid "could not upload manifest: unexpected status %s" +msgstr "no se pudo cargar el manifiesto: estado inesperado %s" + +#: pg_basebackup.c:1867 +#, c-format +msgid "could not send COPY data: %s" +msgstr "no fue posible enviar datos COPY: %s" + +#: pg_basebackup.c:1877 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "no se pudo enviar fin-de-COPY: %s" + +#: pg_basebackup.c:1892 +#, c-format +msgid "unexpected extra result while sending manifest" +msgstr "conjunto de resultados inesperado mientras se enviaba el manifiesto" + +#: pg_basebackup.c:1950 #, c-format msgid "backup targets are not supported by this server version" msgstr "los destinos de respaldo no están soportados por esta versión de servidor" -#: pg_basebackup.c:1847 +#: pg_basebackup.c:1953 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "la configuración de recuperación no puede ser escrita cuando se usa un destino de respaldo base" -#: pg_basebackup.c:1874 +#: pg_basebackup.c:1980 #, c-format msgid "server does not support server-side compression" msgstr "el servidor no soporta compresión del lado del servidor" -#: pg_basebackup.c:1884 +#: pg_basebackup.c:1990 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "iniciando el respaldo base, esperando que el checkpoint se complete" -#: pg_basebackup.c:1888 +#: pg_basebackup.c:1994 #, c-format msgid "waiting for checkpoint" msgstr "esperando al checkpoint" -#: pg_basebackup.c:1901 pg_recvlogical.c:260 receivelog.c:543 receivelog.c:582 -#: streamutil.c:288 streamutil.c:361 streamutil.c:413 streamutil.c:501 -#: streamutil.c:653 streamutil.c:698 -#, c-format -msgid "could not send replication command \"%s\": %s" -msgstr "no se pudo ejecutar la orden de replicación «%s»: %s" - -#: pg_basebackup.c:1909 +#: pg_basebackup.c:2016 #, c-format msgid "could not initiate base backup: %s" msgstr "no se pudo iniciar el respaldo base: %s" -#: pg_basebackup.c:1912 +#: pg_basebackup.c:2019 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "el servidor envió una respuesta inesperada a la orden BASE_BACKUP; se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: pg_basebackup.c:1918 +#: pg_basebackup.c:2025 #, c-format msgid "checkpoint completed" msgstr "el checkpoint se ha completado" -#: pg_basebackup.c:1932 +#: pg_basebackup.c:2039 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "punto de inicio del WAL: %s en el timeline %u" -#: pg_basebackup.c:1940 +#: pg_basebackup.c:2047 #, c-format msgid "could not get backup header: %s" msgstr "no se pudo obtener la cabecera de respaldo: %s" -#: pg_basebackup.c:1943 +#: pg_basebackup.c:2050 #, c-format msgid "no data returned from server" msgstr "el servidor no retornó datos" -#: pg_basebackup.c:1986 +#: pg_basebackup.c:2093 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "sólo se puede escribir un tablespace a stdout, la base de datos tiene %d" -#: pg_basebackup.c:1999 +#: pg_basebackup.c:2106 #, c-format msgid "starting background WAL receiver" msgstr "iniciando el receptor de WAL en segundo plano" -#: pg_basebackup.c:2082 +#: pg_basebackup.c:2189 #, c-format msgid "backup failed: %s" msgstr "el respaldo falló: %s" -#: pg_basebackup.c:2085 +#: pg_basebackup.c:2192 #, c-format msgid "no write-ahead log end position returned from server" msgstr "el servidor no retornó la posición final del WAL" -#: pg_basebackup.c:2088 +#: pg_basebackup.c:2195 #, c-format msgid "write-ahead log end point: %s" msgstr "posición final del WAL: %s" -#: pg_basebackup.c:2099 +#: pg_basebackup.c:2206 #, c-format msgid "checksum error occurred" msgstr "ocurrió un error de checksums" -#: pg_basebackup.c:2104 +#: pg_basebackup.c:2211 #, c-format msgid "final receive failed: %s" msgstr "la recepción final falló: %s" -#: pg_basebackup.c:2128 +#: pg_basebackup.c:2235 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "esperando que el proceso en segundo plano complete el flujo..." -#: pg_basebackup.c:2132 +#: pg_basebackup.c:2239 #, c-format msgid "could not send command to background pipe: %m" msgstr "no se pudo enviar una orden a la tubería de segundo plano: %m" -#: pg_basebackup.c:2137 +#: pg_basebackup.c:2244 #, c-format msgid "could not wait for child process: %m" msgstr "no se pudo esperar al proceso hijo: %m" -#: pg_basebackup.c:2139 +#: pg_basebackup.c:2246 #, c-format msgid "child %d died, expected %d" msgstr "el hijo %d murió, pero se esperaba al %d" -#: pg_basebackup.c:2141 streamutil.c:91 streamutil.c:196 +#: pg_basebackup.c:2248 streamutil.c:92 streamutil.c:207 streamutil.c:319 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2161 +#: pg_basebackup.c:2268 #, c-format msgid "could not wait for child thread: %m" msgstr "no se pudo esperar el hilo hijo: %m" -#: pg_basebackup.c:2166 +#: pg_basebackup.c:2273 #, c-format msgid "could not get child thread exit status: %m" msgstr "no se pudo obtener la cabecera de respaldo: %m" -#: pg_basebackup.c:2169 +#: pg_basebackup.c:2276 #, c-format msgid "child thread exited with error %u" msgstr "el hilo hijo terminó con error %u" -#: pg_basebackup.c:2198 +#: pg_basebackup.c:2305 #, c-format msgid "syncing data to disk ..." msgstr "sincronizando datos a disco ..." -#: pg_basebackup.c:2223 +#: pg_basebackup.c:2330 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "renombrando backup_manifest.tmp a backup_manifest" -#: pg_basebackup.c:2243 +#: pg_basebackup.c:2350 #, c-format msgid "base backup completed" msgstr "el respaldo base se ha completado" -#: pg_basebackup.c:2326 +#: pg_basebackup.c:2436 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "argumento de checkpoint «%s» no válido, debe ser «fast» o «spread»" -#: pg_basebackup.c:2344 +#: pg_basebackup.c:2454 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "formato de salida «%s» no válido, debe ser «plain» o «tar»" -#: pg_basebackup.c:2422 +#: pg_basebackup.c:2535 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "opción de wal-method «%s» no válida, debe ser «fetch», «stream» o «none»" -#: pg_basebackup.c:2457 pg_basebackup.c:2469 pg_basebackup.c:2491 -#: pg_basebackup.c:2503 pg_basebackup.c:2509 pg_basebackup.c:2561 -#: pg_basebackup.c:2572 pg_basebackup.c:2582 pg_basebackup.c:2588 -#: pg_basebackup.c:2595 pg_basebackup.c:2607 pg_basebackup.c:2619 -#: pg_basebackup.c:2627 pg_basebackup.c:2640 pg_basebackup.c:2646 -#: pg_basebackup.c:2655 pg_basebackup.c:2667 pg_basebackup.c:2678 -#: pg_basebackup.c:2686 pg_receivewal.c:748 pg_receivewal.c:760 +#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 +#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 +#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 +#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 +#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 +#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 +#: pg_basebackup.c:2803 pg_createsubscriber.c:2038 pg_createsubscriber.c:2048 +#: pg_createsubscriber.c:2056 pg_createsubscriber.c:2084 +#: pg_createsubscriber.c:2116 pg_receivewal.c:748 pg_receivewal.c:760 #: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 -#: pg_receivewal.c:793 pg_recvlogical.c:835 pg_recvlogical.c:847 -#: pg_recvlogical.c:857 pg_recvlogical.c:864 pg_recvlogical.c:871 -#: pg_recvlogical.c:878 pg_recvlogical.c:885 pg_recvlogical.c:892 -#: pg_recvlogical.c:899 pg_recvlogical.c:906 +#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 +#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 +#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 +#: pg_recvlogical.c:917 pg_recvlogical.c:924 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: pg_basebackup.c:2467 pg_receivewal.c:758 pg_recvlogical.c:845 +#: pg_basebackup.c:2584 pg_createsubscriber.c:2046 pg_receivewal.c:758 +#: pg_recvlogical.c:863 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_basebackup.c:2490 +#: pg_basebackup.c:2607 #, c-format msgid "cannot specify both format and backup target" msgstr "no se puede especificar un formato junto con un destino de respaldo" -#: pg_basebackup.c:2502 +#: pg_basebackup.c:2619 #, c-format msgid "must specify output directory or backup target" msgstr "debe especificar un directorio de salida o destino de respaldo base" -#: pg_basebackup.c:2508 +#: pg_basebackup.c:2625 #, c-format msgid "cannot specify both output directory and backup target" msgstr "no se puede especificar un directorio de salida junto con un destino de respaldo" -#: pg_basebackup.c:2538 pg_receivewal.c:802 +#: pg_basebackup.c:2655 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "algoritmo de compresión no reconocido: «%s»" -#: pg_basebackup.c:2544 pg_receivewal.c:809 +#: pg_basebackup.c:2661 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "especificación de compresión no válida: %s" -#: pg_basebackup.c:2560 +#: pg_basebackup.c:2677 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "la compresión del lado del cliente no es posible cuando se especifica un destino del respaldo base" -#: pg_basebackup.c:2571 +#: pg_basebackup.c:2688 #, c-format msgid "only tar mode backups can be compressed" msgstr "sólo los respaldos de modo tar pueden ser comprimidos" -#: pg_basebackup.c:2581 +#: pg_basebackup.c:2698 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "no se puede enviar WAL cuando se especifica un destino del respaldo base" -#: pg_basebackup.c:2587 +#: pg_basebackup.c:2704 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "no se puede enviar WALs en modo tar a stdout" -#: pg_basebackup.c:2594 +#: pg_basebackup.c:2711 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "los slots de replicación sólo pueden usarse con flujo de WAL" -#: pg_basebackup.c:2606 +#: pg_basebackup.c:2723 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "no se puede usar --no-slot junto con nombre de slot" #. translator: second %s is an option name -#: pg_basebackup.c:2617 pg_receivewal.c:774 +#: pg_basebackup.c:2734 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "la opcón %s necesita que se especifique un slot con --slot" -#: pg_basebackup.c:2625 pg_basebackup.c:2665 pg_basebackup.c:2676 -#: pg_basebackup.c:2684 +#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 +#: pg_basebackup.c:2801 #, c-format msgid "%s and %s are incompatible options" msgstr "%s y %s son opciones incompatibles" -#: pg_basebackup.c:2639 +#: pg_basebackup.c:2756 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "la ubicación del directorio de WAL no puede especificarse junto con un destino de respaldo" -#: pg_basebackup.c:2645 +#: pg_basebackup.c:2762 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "la ubicación del directorio de WAL sólo puede especificarse en modo «plain»" -#: pg_basebackup.c:2654 +#: pg_basebackup.c:2771 #, c-format msgid "WAL directory location must be an absolute path" msgstr "la ubicación del directorio de WAL debe ser una ruta absoluta" -#: pg_basebackup.c:2754 +#: pg_basebackup.c:2871 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: pg_receivewal.c:77 +#: pg_createsubscriber.c:169 +#, c-format +msgid "failed after the end of recovery" +msgstr "falló al final de la recuperación" + +#: pg_createsubscriber.c:170 +#, c-format +msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." +msgstr "El servidor de destino no puede ser usado más como réplica física. Debe volver a crear la réplica física antes de continuar." + +#: pg_createsubscriber.c:198 +#, c-format +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "la publicación «%s» en la base de datos «%s» en el primaro fue abandonada" + +#: pg_createsubscriber.c:200 +#, c-format +msgid "Drop this publication before trying again." +msgstr "Borre esta publicación antes de volver a intentar." + +#: pg_createsubscriber.c:204 +#, c-format +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "el slot de replicación «%s» en la base de datos «%s» en el primario fue abandonada" + +#: pg_createsubscriber.c:206 pg_createsubscriber.c:1261 +#, c-format +msgid "Drop this replication slot soon to avoid retention of WAL files." +msgstr "Elimine este slot de replicación pronto para evitar la retención de archivos WAL." + +#: pg_createsubscriber.c:219 #, c-format msgid "" -"%s receives PostgreSQL streaming write-ahead logs.\n" +"%s creates a new logical replica from a standby server.\n" "\n" msgstr "" -"%s recibe flujos del WAL de PostgreSQL.\n" +"%s crea una nueva réplica lógica a partir de un\n" +"servidor standby.\n" "\n" -#: pg_receivewal.c:81 pg_recvlogical.c:82 +#: pg_createsubscriber.c:223 pg_receivewal.c:81 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -1152,22 +1339,638 @@ msgstr "" "\n" "Opciones:\n" +#: pg_createsubscriber.c:224 +#, c-format +msgid " -d, --database=DBNAME database in which to create a subscription\n" +msgstr " -d, --dbname=BASE-DATOS base de datos en la cual crear una suscripción\n" + +#: pg_createsubscriber.c:225 +#, c-format +msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" +msgstr " -D, --pgdata=DATADIR ubicación del directorio de datos del suscriptor\n" + +#: pg_createsubscriber.c:226 +#, c-format +msgid " -n, --dry-run dry run, just show what would be done\n" +msgstr " -n, --dry-run no actualiza, sólo muestra lo que se haría\n" + +#: pg_createsubscriber.c:227 +#, c-format +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr " -p, --subscriber-port=PUERTO número de puerto del suscriptor (def. %s)\n" + +#: pg_createsubscriber.c:228 +#, c-format +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr " -P, --publisher-server=CONSTR cadena de conexión del publicador\n" + +#: pg_createsubscriber.c:229 +#, c-format +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=DIR directorio de sockets a usar (omisión: dir. actual)\n" + +#: pg_createsubscriber.c:230 +#, c-format +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr " -t, --recovery-timeout=SEGS segundos a esperar a que la recuperación termine\n" + +#: pg_createsubscriber.c:231 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=USUARIO nombre de usuario para conexión del suscriptor\n" + +#: pg_createsubscriber.c:232 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose desplegar mensajes verbosos\n" + +#: pg_createsubscriber.c:233 +#, c-format +msgid "" +" --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" +msgstr "" +" --config-file=ARCHIVO utilizar el archivo de configuración del servidor\n" +" principal especificado al ejecutar el clúster de destino\n" + +#: pg_createsubscriber.c:235 +#, c-format +msgid " --publication=NAME publication name\n" +msgstr " --publication=NOMBRE nombre de publicación\n" + +#: pg_createsubscriber.c:236 +#, c-format +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=NOMBRE nombre de slot de replicación\n" + +#: pg_createsubscriber.c:237 +#, c-format +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=NOMBRE nombre de suscripción\n" + +#: pg_createsubscriber.c:238 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar información de versión y salir\n" + +#: pg_createsubscriber.c:239 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostrar esta ayuda y salir\n" + +#: pg_createsubscriber.c:282 +#, c-format +msgid "could not parse connection string: %s" +msgstr "no se pudo interpretar la cadena de conexión: %s" + +#: pg_createsubscriber.c:359 +#, c-format +msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" +msgstr "el programa «%s» es requerido por %s pero se encontró en el mismo directorio que «%s»" + +#: pg_createsubscriber.c:362 +#, c-format +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "El programa «%s» fue encontrado por «%s», pero no es de la misma versión que %s" + +#: pg_createsubscriber.c:382 +#, c-format +msgid "checking if directory \"%s\" is a cluster data directory" +msgstr "verificando si el directorio «%s» es un directorio de datos de base de datos" + +#: pg_createsubscriber.c:388 +#, c-format +msgid "data directory \"%s\" does not exist" +msgstr "no existe el directorio de datos «%s»" + +#: pg_createsubscriber.c:396 +#, c-format +msgid "directory \"%s\" is not a database cluster directory" +msgstr "el directorio «%s» no es un directorio de base de datos" + +#: pg_createsubscriber.c:513 +#, c-format +msgid "connection to database failed: %s" +msgstr "falló la conexión a la base de datos: %s" + +#: pg_createsubscriber.c:526 +#, c-format +msgid "could not clear search_path: %s" +msgstr "no se pudo limpiar search_path: %s" + +#: pg_createsubscriber.c:566 +#, c-format +msgid "getting system identifier from publisher" +msgstr "obteniendo el identificador de sistema del publicador" + +#: pg_createsubscriber.c:573 +#, c-format +msgid "could not get system identifier: %s" +msgstr "no se pudo obtener el identificador de sistema: %s" + +#: pg_createsubscriber.c:579 +#, c-format +msgid "could not get system identifier: got %d rows, expected %d row" +msgstr "no se pudo obtener el identificador de sistema: se obtuvieron %d filas, se esperaban %d filas" + +#: pg_createsubscriber.c:586 +#, c-format +msgid "system identifier is %llu on publisher" +msgstr "identificador de sistema es %llu en el publicador" + +#: pg_createsubscriber.c:607 +#, c-format +msgid "getting system identifier from subscriber" +msgstr "obteniendo identificador de sistema del suscriptor" + +#: pg_createsubscriber.c:611 pg_createsubscriber.c:641 +#, c-format +msgid "control file appears to be corrupt" +msgstr "el archivo de control parece estar corrupto" + +#: pg_createsubscriber.c:615 pg_createsubscriber.c:656 +#, c-format +msgid "system identifier is %llu on subscriber" +msgstr "el identificador de sistema es %llu en suscriptor" + +#: pg_createsubscriber.c:637 +#, c-format +msgid "modifying system identifier of subscriber" +msgstr "modificando el identificador de sistema del suscriptor" + +#: pg_createsubscriber.c:659 +#, c-format +msgid "running pg_resetwal on the subscriber" +msgstr "ejecutando pg_resetwal en el suscriptor" + +#: pg_createsubscriber.c:671 +#, c-format +msgid "subscriber successfully changed the system identifier" +msgstr "el suscriptor cambió exitosamente el identificador de sistema" + +#: pg_createsubscriber.c:673 +#, c-format +msgid "could not change system identifier of subscriber: %s" +msgstr "no se pudo cambiar el identificador de sistema del suscriptor: %s" + +#: pg_createsubscriber.c:697 +#, c-format +msgid "could not obtain database OID: %s" +msgstr "no se pudo obtener el OID de base de datos: %s" + +#: pg_createsubscriber.c:704 +#, c-format +msgid "could not obtain database OID: got %d rows, expected %d row" +msgstr "no se pudo obtener el OID de base de datos: se obtuvieron %d filas, se esperaban %d filas" + +#: pg_createsubscriber.c:776 +#, c-format +msgid "create replication slot \"%s\" on publisher" +msgstr "crear el slot de replicación «%s» en el publicador" + +#: pg_createsubscriber.c:796 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "no se pudo escribir un registro WAL adicional: %s" + +#: pg_createsubscriber.c:822 +#, c-format +msgid "could not obtain recovery progress: %s" +msgstr "no se pudo obtener el progreso de la recuperación: %s" + +#: pg_createsubscriber.c:854 +#, c-format +msgid "checking settings on publisher" +msgstr "verificando configuración en el publicador" + +#: pg_createsubscriber.c:864 +#, c-format +msgid "primary server cannot be in recovery" +msgstr "el servidor primario no puede estar en recuperación" + +#: pg_createsubscriber.c:888 +#, c-format +msgid "could not obtain publisher settings: %s" +msgstr "no se pudo obtener configuraciones del publicador: %s" + +# FIXME see slot.c:779. See also postmaster.c:835 +#: pg_createsubscriber.c:914 +#, c-format +msgid "publisher requires wal_level >= \"logical\"" +msgstr "el publicador requiere wal_level >= «logical»" + +#: pg_createsubscriber.c:920 +#, c-format +msgid "publisher requires %d replication slots, but only %d remain" +msgstr "el publicador requiere %d slots de replicación, pero solo quedan %d" + +#: pg_createsubscriber.c:922 pg_createsubscriber.c:931 +#: pg_createsubscriber.c:1028 pg_createsubscriber.c:1037 +#: pg_createsubscriber.c:1046 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "Aumente el parámetro de configuración «%s» a al menos %d." + +#: pg_createsubscriber.c:929 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "el publicador requiere %d procesos WAL sender, pero sólo quedan %d" + +#: pg_createsubscriber.c:938 +#, c-format +msgid "two_phase option will not be enabled for replication slots" +msgstr "la opción two_phase no será activada en los slots de replicación" + +#: pg_createsubscriber.c:939 +#, c-format +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "Las suscripciones serán creadas con la opción two_phase desactivada. Las transacciones preparadas serán replicadas durante COMMIT PREPARED." + +#: pg_createsubscriber.c:971 +#, c-format +msgid "checking settings on subscriber" +msgstr "verificando configuraciones en el suscriptor" + +#: pg_createsubscriber.c:978 +#, c-format +msgid "target server must be a standby" +msgstr "el servidor de destino debe ser un standby" + +#: pg_createsubscriber.c:1002 +#, c-format +msgid "could not obtain subscriber settings: %s" +msgstr "no se pudo obtener la configuración del suscriptor: %s" + +#: pg_createsubscriber.c:1026 +#, c-format +msgid "subscriber requires %d replication slots, but only %d remain" +msgstr "el suscriptor requiere %d slots de replicación, pero sólo quedan %d" + +#: pg_createsubscriber.c:1035 +#, c-format +msgid "subscriber requires %d logical replication workers, but only %d remain" +msgstr "el suscriptor requiere %d procesos de replicación lógica, pero sólo quedan %d" + +#: pg_createsubscriber.c:1044 +#, c-format +msgid "subscriber requires %d worker processes, but only %d remain" +msgstr "el suscriptor requiere %d procesos ayudantes, pero solo quedan %d" + +#: pg_createsubscriber.c:1079 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "eliminando suscripción «%s» en base de datos «%s»" + +#: pg_createsubscriber.c:1088 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "no se pudo eliminar la suscripción «%s»: %s" + +#: pg_createsubscriber.c:1123 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "no se pudo obtener suscripciones pre-existentes: %s" + +#: pg_createsubscriber.c:1259 +#, c-format +msgid "could not drop replication slot \"%s\" on primary" +msgstr "no se pudo eliminar el slot de replicación «%s» en el primario" + +#: pg_createsubscriber.c:1293 +#, c-format +msgid "could not obtain failover replication slot information: %s" +msgstr "no se pudo obtener información de slots de replicación \"failover\": %s" + +#: pg_createsubscriber.c:1295 pg_createsubscriber.c:1304 +#, c-format +msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." +msgstr "Elimine los slots de replicación de failover en el suscriptor pronto para evitar retención de archivos WAL." + +#: pg_createsubscriber.c:1303 +#, c-format +msgid "could not drop failover replication slot" +msgstr "no se pudo eliminar el slot de replicación \"failover\"" + +#: pg_createsubscriber.c:1325 +#, c-format +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "creando el slot de replicación «%s» en base de datos «%s»" + +#: pg_createsubscriber.c:1343 +#, c-format +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "no se pudo crear el slot de replicación «%s» en base de datos «%s»: %s" + +#: pg_createsubscriber.c:1373 +#, c-format +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "eliminando el slot de replicación «%s» en base de datos «%s»" + +#: pg_createsubscriber.c:1389 +#, c-format +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "no se pudo eliminar el slot de replicación «%s» en base de datos «%s»: %s" + +#: pg_createsubscriber.c:1410 +#, c-format +msgid "pg_ctl failed with exit code %d" +msgstr "pg_ctl falló con código de retorno %d" + +#: pg_createsubscriber.c:1415 +#, c-format +msgid "pg_ctl was terminated by exception 0x%X" +msgstr "pg_ctl fue terminado por una excepción 0x%X" + +#: pg_createsubscriber.c:1417 +#, c-format +msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "Vea el archivo «ntstatus.h» para una descripción del valor hexadecimal." + +#: pg_createsubscriber.c:1419 +#, c-format +msgid "pg_ctl was terminated by signal %d: %s" +msgstr "pg_ctl fue terminado por una señal %d: %s" + +#: pg_createsubscriber.c:1425 +#, c-format +msgid "pg_ctl exited with unrecognized status %d" +msgstr "pg_ctl terminó con código no reconocido %d" + +#: pg_createsubscriber.c:1428 +#, c-format +msgid "The failed command was: %s" +msgstr "La orden fallida era: %s" + +#: pg_createsubscriber.c:1474 +#, c-format +msgid "server was started" +msgstr "el servidor fue iniciado" + +#: pg_createsubscriber.c:1489 +#, c-format +msgid "server was stopped" +msgstr "el servidor fue detenido" + +#: pg_createsubscriber.c:1508 +#, c-format +msgid "waiting for the target server to reach the consistent state" +msgstr "esperando que el servidor de destino alcance el estado consistente" + +#: pg_createsubscriber.c:1531 +#, c-format +msgid "recovery timed out" +msgstr "la recuperación tomó demasiado tiempo" + +#: pg_createsubscriber.c:1544 +#, c-format +msgid "server did not end recovery" +msgstr "el servidor no terminó la recuperación" + +#: pg_createsubscriber.c:1546 +#, c-format +msgid "target server reached the consistent state" +msgstr "el servidor de destino alcanzó el estado consistente" + +#: pg_createsubscriber.c:1547 +#, c-format +msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." +msgstr "Si pg_createsubscriber falla a partir de este punto, deberá re-crear la réplica física antes de continuar." + +#: pg_createsubscriber.c:1574 +#, c-format +msgid "could not obtain publication information: %s" +msgstr "no se pudo obtener la información de publicación: %s" + +#: pg_createsubscriber.c:1588 +#, c-format +msgid "publication \"%s\" already exists" +msgstr "la publicación «%s» ya existe" + +#: pg_createsubscriber.c:1589 +#, c-format +msgid "Consider renaming this publication before continuing." +msgstr "Considere cambiar el nombre de esta publicación antes de continuar." + +#: pg_createsubscriber.c:1596 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "creando la publicación «%s» en la base de datos «%s»" + +#: pg_createsubscriber.c:1609 +#, c-format +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "no se pudo crear la publicación «%s» en la base de datos «%s»: %s" + +#: pg_createsubscriber.c:1638 +#, c-format +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "eliminando la publicación «%s» en la base de datos «%s»" + +#: pg_createsubscriber.c:1652 +#, c-format +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "no se pudo eliminar la publicación «%s» en la base de datos «%s»: %s" + +#: pg_createsubscriber.c:1698 +#, c-format +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "creando la suscripción «%s» en la base de datos «%s»" + +#: pg_createsubscriber.c:1719 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "no se pudo create la suscripción «%s» en la base de datos «%s»: %s" + +#: pg_createsubscriber.c:1764 +#, c-format +msgid "could not obtain subscription OID: %s" +msgstr "no se pudo obtener el OID de suscripción: %s" + +#: pg_createsubscriber.c:1771 +#, c-format +msgid "could not obtain subscription OID: got %d rows, expected %d row" +msgstr "no se pudo obtener el OID de suscripción: se obtuvieron %d filas, se esperaban %d filas" + +#: pg_createsubscriber.c:1795 +#, c-format +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" +msgstr "definiendo progreso de replicación (nombre de nodo «%s», LSN %s) en base de datos «%s»" + +#: pg_createsubscriber.c:1810 +#, c-format +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "no se pudo establecer el progreso de replicación para la suscripción «%s»: %s" + +#: pg_createsubscriber.c:1841 +#, c-format +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "activando la suscripción «%s» en la base de datos «%s»" + +#: pg_createsubscriber.c:1853 +#, c-format +msgid "could not enable subscription \"%s\": %s" +msgstr "no se pudo habilitar la suscripción «%s»: %s" + +#: pg_createsubscriber.c:1945 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "no puede ser ejecutado con el usuario «root»" + +#: pg_createsubscriber.c:1946 +#, c-format +msgid "You must run %s as the PostgreSQL superuser." +msgstr "Debe ejecutar %s con el superusuario de PostgreSQL." + +#: pg_createsubscriber.c:1967 +#, c-format +msgid "database \"%s\" specified more than once" +msgstr "la base de datos «%s» fue especificado más de una vez" + +#: pg_createsubscriber.c:2008 +#, c-format +msgid "publication \"%s\" specified more than once" +msgstr "la publicación «%s» fue especificada más de una vez" + +#: pg_createsubscriber.c:2020 +#, c-format +msgid "replication slot \"%s\" specified more than once" +msgstr "el slot de replicación «%s» fue especificado más de una vez" + +#: pg_createsubscriber.c:2032 +#, c-format +msgid "subscription \"%s\" specified more than once" +msgstr "la suscripción «%s» fue especificada más de una vez" + +#: pg_createsubscriber.c:2055 +#, c-format +msgid "no subscriber data directory specified" +msgstr "no se especificó un directorio de datos de suscripción" + +#: pg_createsubscriber.c:2066 +#, c-format +msgid "could not determine current directory" +msgstr "no se pudo determinar el directorio actual" + +#: pg_createsubscriber.c:2083 +#, c-format +msgid "no publisher connection string specified" +msgstr "no se especificó un string de conexión de publicador" + +#: pg_createsubscriber.c:2087 +#, c-format +msgid "validating publisher connection string" +msgstr "validando string de conexión del publicador" + +#: pg_createsubscriber.c:2093 +#, c-format +msgid "validating subscriber connection string" +msgstr "validando string de conexión del suscriptor" + +#: pg_createsubscriber.c:2098 +#, c-format +msgid "no database was specified" +msgstr "no se especificó una base de datos" + +#: pg_createsubscriber.c:2110 +#, c-format +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "el nombr de base de datos «%s» fue extraído del string de conexión del publicador" + +#: pg_createsubscriber.c:2115 +#, c-format +msgid "no database name specified" +msgstr "no se especificó un nombre de base de datos" + +#: pg_createsubscriber.c:2125 +#, c-format +msgid "wrong number of publication names specified" +msgstr "una cantidad incorrecta de nombres de publicación fue especificada" + +#: pg_createsubscriber.c:2126 +#, c-format +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." +msgstr "La cantidad de nombres de publicación especificados (%d) debe coincidir con el número de nombres de bases de datos (%d)." + +#: pg_createsubscriber.c:2132 +#, c-format +msgid "wrong number of subscription names specified" +msgstr "una cantidad incorrecta de nombres de suscripción fue especificada" + +#: pg_createsubscriber.c:2133 +#, c-format +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." +msgstr "La cantidad de nombres de suscripción especificados (%d) debe coincidir con el número de nombres de bases de datos (%d)." + +#: pg_createsubscriber.c:2139 +#, c-format +msgid "wrong number of replication slot names specified" +msgstr "una cantidad incorrecta de nombres de slots de replicación fue especificada" + +#: pg_createsubscriber.c:2140 +#, c-format +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." +msgstr "La cantidad de nombres de slots de replicación especificados (%d) debe coincidir con el número de nombres de bases de datos (%d)." + +#: pg_createsubscriber.c:2169 +#, c-format +msgid "subscriber data directory is not a copy of the source database cluster" +msgstr "el directorio de datos del suscriptor no es una copia del clúster de origen" + +#: pg_createsubscriber.c:2182 +#, c-format +msgid "standby server is running" +msgstr "el servidor standby está en ejecución" + +#: pg_createsubscriber.c:2183 +#, c-format +msgid "Stop the standby server and try again." +msgstr "Detenga el servidor standby y pruebe otra vez." + +#: pg_createsubscriber.c:2192 +#, c-format +msgid "starting the standby server with command-line options" +msgstr "iniciando el standby con opciones de línea de órdenes" + +#: pg_createsubscriber.c:2208 pg_createsubscriber.c:2243 +#, c-format +msgid "stopping the subscriber" +msgstr "deteniendo el suscriptor" + +#: pg_createsubscriber.c:2222 +#, c-format +msgid "starting the subscriber" +msgstr "iniciando el suscriptor" + +#: pg_createsubscriber.c:2251 +#, c-format +msgid "Done!" +msgstr "¡Listo!" + +#: pg_receivewal.c:77 +#, c-format +msgid "" +"%s receives PostgreSQL streaming write-ahead logs.\n" +"\n" +msgstr "" +"%s recibe flujos del WAL de PostgreSQL.\n" +"\n" + #: pg_receivewal.c:82 #, c-format msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=DIR recibir los archivos de WAL en este directorio\n" -#: pg_receivewal.c:83 pg_recvlogical.c:83 +#: pg_receivewal.c:83 pg_recvlogical.c:93 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN salir luego de recibir el LSN especificado\n" -#: pg_receivewal.c:84 pg_recvlogical.c:87 +#: pg_receivewal.c:84 pg_recvlogical.c:97 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr " --if-not-exists no abandonar si el slot ya existe al crear un slot\n" -#: pg_receivewal.c:85 pg_recvlogical.c:89 +#: pg_receivewal.c:85 pg_recvlogical.c:99 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop no entrar en bucle al perder la conexión\n" @@ -1177,7 +1980,7 @@ msgstr " -n, --no-loop no entrar en bucle al perder la conexión\n" msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_receivewal.c:87 pg_recvlogical.c:94 +#: pg_receivewal.c:87 pg_recvlogical.c:104 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -1210,12 +2013,12 @@ msgstr "" "\n" "Acciones optativas:\n" -#: pg_receivewal.c:104 pg_recvlogical.c:79 +#: pg_receivewal.c:104 pg_recvlogical.c:89 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot crear un nuevo slot de replicación (para el nombre, vea --slot)\n" -#: pg_receivewal.c:105 pg_recvlogical.c:80 +#: pg_receivewal.c:105 pg_recvlogical.c:90 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot eliminar un slot de replicación (para el nombre, vea --slot)\n" @@ -1235,7 +2038,7 @@ msgstr "detenido el flujo de log en %X/%X (timeline %u)" msgid "switched to timeline %u at %X/%X" msgstr "cambiado al timeline %u en %X/%X" -#: pg_receivewal.c:224 +#: pg_receivewal.c:224 pg_recvlogical.c:1053 #, c-format msgid "received interrupt signal, exiting" msgstr "se recibió una señal de interrupción, saliendo" @@ -1280,11 +2083,6 @@ msgstr "el archivo de segmento «%s» tiene tamaño incorrecto %d al descomprimi msgid "could not create LZ4 decompression context: %s" msgstr "no se pudo crear un contexto de descompresión LZ4: %s" -#: pg_receivewal.c:402 -#, c-format -msgid "could not read file \"%s\": %m" -msgstr "no se pudo leer el archivo «%s»: %m" - #: pg_receivewal.c:420 #, c-format msgid "could not decompress file \"%s\": %s" @@ -1310,7 +2108,7 @@ msgstr "no se puede verificar el archivo «%s»: la compresión con %s no está msgid "starting log streaming at %X/%X (timeline %u)" msgstr "iniciando el flujo de log en %X/%X (timeline %u)" -#: pg_receivewal.c:693 pg_recvlogical.c:783 +#: pg_receivewal.c:693 pg_recvlogical.c:801 #, c-format msgid "could not parse end position \"%s\"" msgstr "no se pudo interpretar la posición final «%s»" @@ -1340,28 +2138,28 @@ msgstr "el método de compresión %s no está soportado aún" msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "la conexión de replicación usando el slot «%s» es inesperadamente específica a una base de datos" -#: pg_receivewal.c:878 pg_recvlogical.c:954 +#: pg_receivewal.c:878 pg_recvlogical.c:972 #, c-format msgid "dropping replication slot \"%s\"" msgstr "eliminando el slot de replicación «%s»" -#: pg_receivewal.c:889 pg_recvlogical.c:964 +#: pg_receivewal.c:889 pg_recvlogical.c:982 #, c-format msgid "creating replication slot \"%s\"" msgstr "creando el slot de replicación «%s»" -#: pg_receivewal.c:918 pg_recvlogical.c:988 +#: pg_receivewal.c:918 pg_recvlogical.c:1006 #, c-format msgid "disconnected" msgstr "desconectado" #. translator: check source for value for %d -#: pg_receivewal.c:922 pg_recvlogical.c:992 +#: pg_receivewal.c:922 pg_recvlogical.c:1010 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "desconectado; esperando %d segundos para intentar nuevamente" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:84 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1370,7 +2168,7 @@ msgstr "" "%s controla flujos de decodificación lógica de PostgreSQL.\n" "\n" -#: pg_recvlogical.c:78 +#: pg_recvlogical.c:88 #, c-format msgid "" "\n" @@ -1379,17 +2177,17 @@ msgstr "" "\n" "Acciones a ejecutar:\n" -#: pg_recvlogical.c:81 +#: pg_recvlogical.c:91 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start iniciar flujo en un slot de replicación (para el nombre, vea --slot)\n" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:94 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=ARCHIVO recibir el log en este archivo, - para stdout\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:95 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1398,12 +2196,12 @@ msgstr "" " -F, --fsync-interval=SEGS\n" " tiempo entre fsyncs del archivo de salida (omisión: %d)\n" -#: pg_recvlogical.c:88 +#: pg_recvlogical.c:98 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN dónde en un slot existente debe empezar el flujo\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:100 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1414,143 +2212,143 @@ msgstr "" " pasar opción NOMBRE con valor opcional VALOR al\n" " plugin de salida\n" -#: pg_recvlogical.c:93 +#: pg_recvlogical.c:103 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN usar plug-in de salida PLUGIN (omisión: %s)\n" -#: pg_recvlogical.c:96 +#: pg_recvlogical.c:106 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=NOMBRE-SLOT nombre del slot de replicación lógica\n" -#: pg_recvlogical.c:97 +#: pg_recvlogical.c:107 #, c-format msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" msgstr " -t, --two-phase activa decodificación de transacciones preparadas al crear un slot\n" -#: pg_recvlogical.c:102 +#: pg_recvlogical.c:112 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=BASE base de datos a la cual conectarse\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:145 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "confirmando escritura hasta %X/%X, fsync hasta %X/%X (slot %s)" -#: pg_recvlogical.c:159 receivelog.c:360 +#: pg_recvlogical.c:169 receivelog.c:360 #, c-format msgid "could not send feedback packet: %s" msgstr "no se pudo enviar el paquete de retroalimentación: %s" -#: pg_recvlogical.c:227 +#: pg_recvlogical.c:239 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "iniciando el flujo de log en %X/%X (slot %s)" -#: pg_recvlogical.c:269 +#: pg_recvlogical.c:281 #, c-format msgid "streaming initiated" msgstr "flujo iniciado" -#: pg_recvlogical.c:333 +#: pg_recvlogical.c:346 #, c-format msgid "could not open log file \"%s\": %m" msgstr "no se pudo abrir el archivo de registro «%s»: %m" -#: pg_recvlogical.c:362 receivelog.c:882 +#: pg_recvlogical.c:375 receivelog.c:882 #, c-format msgid "invalid socket: %s" msgstr "el socket no es válido: %s" -#: pg_recvlogical.c:415 receivelog.c:910 +#: pg_recvlogical.c:428 receivelog.c:910 #, c-format msgid "%s() failed: %m" msgstr "%s() falló: %m" -#: pg_recvlogical.c:422 receivelog.c:959 +#: pg_recvlogical.c:435 receivelog.c:959 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "no se pudo recibir datos desde el flujo de WAL: %s" -#: pg_recvlogical.c:464 pg_recvlogical.c:515 receivelog.c:1003 +#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 #: receivelog.c:1066 #, c-format msgid "streaming header too small: %d" msgstr "cabecera de flujo demasiado pequeña: %d" -#: pg_recvlogical.c:499 receivelog.c:843 +#: pg_recvlogical.c:512 receivelog.c:843 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "cabecera de flujo no reconocida: «%c»" -#: pg_recvlogical.c:553 pg_recvlogical.c:565 +#: pg_recvlogical.c:566 pg_recvlogical.c:578 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "no se pudo escribir %d bytes al archivo de registro «%s»: %m" -#: pg_recvlogical.c:619 receivelog.c:642 receivelog.c:679 +#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "término inesperado del flujo de replicación: %s" -#: pg_recvlogical.c:778 +#: pg_recvlogical.c:796 #, c-format msgid "could not parse start position \"%s\"" msgstr "no se pudo interpretar la posición de inicio «%s»" -#: pg_recvlogical.c:856 +#: pg_recvlogical.c:874 #, c-format msgid "no slot specified" msgstr "no se especificó slot" -#: pg_recvlogical.c:863 +#: pg_recvlogical.c:881 #, c-format msgid "no target file specified" msgstr "no se especificó un archivo de destino" -#: pg_recvlogical.c:870 +#: pg_recvlogical.c:888 #, c-format msgid "no database specified" msgstr "no se especificó una base de datos" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:895 #, c-format msgid "at least one action needs to be specified" msgstr "debe especificarse al menos una operación" -#: pg_recvlogical.c:884 +#: pg_recvlogical.c:902 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "no puede usarse --create-slot o --start junto con --drop-slot" -#: pg_recvlogical.c:891 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "no puede usarse --create-slot o --drop-slot junto con --startpos" -#: pg_recvlogical.c:898 +#: pg_recvlogical.c:916 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos sólo se puede utilizar con --start" -#: pg_recvlogical.c:905 +#: pg_recvlogical.c:923 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase sólo se puede utilizar con --create-slot" -#: pg_recvlogical.c:938 +#: pg_recvlogical.c:956 #, c-format msgid "could not establish database-specific replication connection" msgstr "no se pudo establecer una conexión de replicación específica a una base de datos" -#: pg_recvlogical.c:1032 +#: pg_recvlogical.c:1056 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "ubicación de término %X/%X alcanzado por «keep-alive»" -#: pg_recvlogical.c:1035 +#: pg_recvlogical.c:1061 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "ubicación de término %X/%X alcanzado por registro WAL en %X/%X" @@ -1667,7 +2465,7 @@ msgstr "respuesta inesperada después del fin-de-timeline: se obtuvieron %d fila msgid "could not parse next timeline's starting point \"%s\"" msgstr "no se pudo interpretar el punto de inicio del siguiente timeline «%s»" -#: receivelog.c:775 receivelog.c:1022 walmethods.c:1201 +#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %s" @@ -1692,120 +2490,121 @@ msgstr "no se pudo escribir %d bytes al archivo WAL «%s»: %s" msgid "could not send copy-end packet: %s" msgstr "no se pudo enviar el paquete copy-end: %s" -#: streamutil.c:158 +#: streamutil.c:165 msgid "Password: " msgstr "Contraseña: " -#: streamutil.c:181 +#: streamutil.c:192 #, c-format msgid "could not connect to server" msgstr "no se pudo conectar al servidor" -#: streamutil.c:222 +#: streamutil.c:233 #, c-format -msgid "could not clear search_path: %s" -msgstr "no se pudo limpiar search_path: %s" +msgid "could not clear \"search_path\": %s" +msgstr "no se pudo limpiar «search_path»: %s" -#: streamutil.c:238 +#: streamutil.c:249 #, c-format -msgid "could not determine server setting for integer_datetimes" -msgstr "no se pudo determinar la opción integer_datetimes del servidor" +msgid "could not determine server setting for \"integer_datetimes\"" +msgstr "no se pudo determinar la opción «integer_datetimes» del servidor" -#: streamutil.c:245 +#: streamutil.c:256 #, c-format -msgid "integer_datetimes compile flag does not match server" -msgstr "la opción de compilación integer_datetimes no coincide con el servidor" +msgid "\"integer_datetimes\" compile flag does not match server" +msgstr "la opción de compilación «integer_datetimes» no coincide con el servidor" -#: streamutil.c:296 +#: streamutil.c:375 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "no se pudo obtener el tamaño del segmento de WAL: se obtuvo %d filas y %d campos, se esperaban %d filas y %d o más campos" -#: streamutil.c:306 +#: streamutil.c:385 #, c-format msgid "WAL segment size could not be parsed" msgstr "el tamaño de segmento de WAL no pudo ser analizado" -#: streamutil.c:324 +#: streamutil.c:403 +#, c-format +msgid "remote server reported invalid WAL segment size (%d byte)" +msgid_plural "remote server reported invalid WAL segment size (%d bytes)" +msgstr[0] "el servidor remoto reportó un tamaño de segmento de WAL no válido (%d byte)" +msgstr[1] "el servidor remoto reportó un tamaño de segmento de WAL no válido (%d bytes)" + +#: streamutil.c:407 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" -msgstr[0] "el tamaño de segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el servidor remoto reportó un valor de %d byte" -msgstr[1] "el tamaño de segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el servidor remoto reportó un valor de %d bytes" +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "El tamaño de segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB." -#: streamutil.c:369 +#: streamutil.c:449 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "no se pudo obtener el indicador de acceso de grupo: se obtuvo %d filas y %d campos, se esperaban %d filas y %d o más campos" -#: streamutil.c:378 +#: streamutil.c:458 #, c-format msgid "group access flag could not be parsed: %s" msgstr "el indicador de acceso de grupo no pudo ser analizado: %s" -#: streamutil.c:421 streamutil.c:458 +#: streamutil.c:501 streamutil.c:538 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "no se pudo identificar al sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos" -#: streamutil.c:510 +#: streamutil.c:590 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "no se pudo leer el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: streamutil.c:522 +#: streamutil.c:602 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "no existe el slot de replicación «%s»" -#: streamutil.c:533 +#: streamutil.c:613 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "se esperaba un slot de replicación físico, en cambio se obtuvo tipo «%s»" -#: streamutil.c:547 +#: streamutil.c:627 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "no se pudo interpretar restart_lsn de WAL «%s» para el slot de replicación «%s»" -#: streamutil.c:664 +#: streamutil.c:744 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "no se pudo create el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: streamutil.c:708 +#: streamutil.c:788 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "no se pudo eliminar el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: walmethods.c:721 walmethods.c:1264 +#: walmethods.c:726 walmethods.c:1269 msgid "could not compress data" msgstr "no se pudo comprimir datos" -#: walmethods.c:750 +#: walmethods.c:755 msgid "could not reset compression stream" msgstr "no se pudo restablecer el flujo comprimido" -#: walmethods.c:888 +#: walmethods.c:892 msgid "implementation error: tar files can't have more than one open file" msgstr "error de implementación: los archivos tar no pueden tener abierto más de un fichero" -#: walmethods.c:903 +#: walmethods.c:907 msgid "could not create tar header" msgstr "no se pudo crear la cabecera del archivo tar" -#: walmethods.c:920 walmethods.c:961 walmethods.c:1166 walmethods.c:1179 +#: walmethods.c:924 walmethods.c:965 walmethods.c:1171 walmethods.c:1184 msgid "could not change compression parameters" msgstr "no se pudo cambiar los parámetros de compresión" -#: walmethods.c:1052 +#: walmethods.c:1056 msgid "unlink not supported with compression" msgstr "unlink no soportado con compresión" -#: walmethods.c:1288 +#: walmethods.c:1293 msgid "could not close compression stream" msgstr "no se pudo cerrar el flujo comprimido" - -#, c-format -#~ msgid "could not set compression flag for %s: %s" -#~ msgstr "no se pudo definir una opción de compresión para %s: %s" diff --git a/src/bin/pg_basebackup/po/fr.po b/src/bin/pg_basebackup/po/fr.po index 54a388acf9d1d..ae370d26a6cae 100644 --- a/src/bin/pg_basebackup/po/fr.po +++ b/src/bin/pg_basebackup/po/fr.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-07-29 09:18+0000\n" -"PO-Revision-Date: 2023-07-29 22:45+0200\n" +"POT-Creation-Date: 2024-08-26 19:50+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" #: ../../../src/common/logging.c:276 #, c-format @@ -93,6 +93,65 @@ msgstr "l'algorithme de compression « %s » n'accepte pas un nombre de workers" msgid "compression algorithm \"%s\" does not support long-distance mode" msgstr "l'algorithme de compression « %s » n'accepte pas un mode distance longue" +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" + +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: pg_receivewal.c:402 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "n'a pas pu lire le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "n'a pas pu fermer le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "différence de l'ordre des octets" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"possible incohérence dans l'ordre des octets\n" +"L'ordre des octets utilisé pour enregistrer le fichier pg_control peut ne\n" +"pas correspondre à celui utilisé par ce programme. Dans ce cas, les\n" +"résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" +"est incompatible avec ce répertoire des données." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:70 +#: ../../common/file_utils.c:347 ../../common/file_utils.c:406 +#: ../../common/file_utils.c:480 ../../fe_utils/recovery_gen.c:140 +#: pg_basebackup.c:1846 pg_receivewal.c:386 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "impossible d'écrire le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format @@ -104,39 +163,69 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 -#: pg_receivewal.c:319 pg_recvlogical.c:339 +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le système de fichiers pour le fichier « %s » : %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_receivewal.c:319 pg_recvlogical.c:352 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../../common/file_utils.c:162 pg_receivewal.c:242 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "cette construction ne supporte pas la méthode de synchronisation « %s »" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: ../../common/file_utils.c:196 pg_receivewal.c:471 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 ../../fe_utils/recovery_gen.c:121 -#: pg_receivewal.c:386 +#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "n'a pas pu ouvrir le fichier « %s » : %m" +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 -#: pg_recvlogical.c:194 +#: ../../common/restricted_token.c:60 #, c-format -msgid "could not fsync file \"%s\": %m" -msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" +msgid "could not open process token: error code %lu" +msgstr "n'a pas pu ouvrir le jeton du processus : code d'erreur %lu" -#: ../../common/file_utils.c:379 pg_basebackup.c:2237 walmethods.c:462 +#: ../../common/restricted_token.c:74 #, c-format -msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" +msgid "could not allocate SIDs: error code %lu" +msgstr "n'a pas pu allouer les SID : code d'erreur %lu" + +#: ../../common/restricted_token.c:94 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "n'a pas pu créer le jeton restreint : code d'erreur %lu" + +#: ../../common/restricted_token.c:115 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu" + +#: ../../common/restricted_token.c:153 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu" + +#: ../../common/restricted_token.c:168 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu" #: ../../fe_utils/option_utils.c:69 #, c-format @@ -148,51 +237,62 @@ msgstr "valeur « %s » invalide pour l'option %s" msgid "%s must be in range %d..%d" msgstr "%s doit être compris entre %d et %d" -#: ../../fe_utils/recovery_gen.c:34 ../../fe_utils/recovery_gen.c:45 -#: ../../fe_utils/recovery_gen.c:70 ../../fe_utils/recovery_gen.c:90 -#: ../../fe_utils/recovery_gen.c:149 pg_basebackup.c:1609 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "méthode de synchronisation non reconnu : %s" + +#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 +#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 +#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:331 #, c-format msgid "out of memory" msgstr "mémoire épuisée" -#: ../../fe_utils/recovery_gen.c:124 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1406 pg_basebackup.c:1700 +#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 +#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 #, c-format msgid "could not write to file \"%s\": %m" msgstr "n'a pas pu écrire dans le fichier « %s » : %m" -#: ../../fe_utils/recovery_gen.c:133 bbstreamer_file.c:93 bbstreamer_file.c:360 -#: pg_basebackup.c:1470 pg_basebackup.c:1679 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" msgstr "n'a pas pu créer le fichier « %s » : %m" -#: bbstreamer_file.c:138 pg_recvlogical.c:633 +#: ../../fe_utils/string_utils.c:434 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "n'a pas pu fermer le fichier « %s » : %m" +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "l'argument de la commande shell contient un retour à la ligne ou un retour chariot : « %s »\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "le nom de la base contient un retour à la ligne ou un retour chariot : « %s »\n" #: bbstreamer_file.c:275 #, c-format msgid "unexpected state while extracting archive" msgstr "état inattendu lors de l'extraction de l'archive" -#: bbstreamer_file.c:320 pg_basebackup.c:686 pg_basebackup.c:730 +#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 +#: pg_basebackup.c:757 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: bbstreamer_file.c:325 +#: bbstreamer_file.c:326 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "n'a pas pu configurer les droits du répertoire « %s » : %m" -#: bbstreamer_file.c:344 +#: bbstreamer_file.c:345 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique de « %s » vers « %s » : %m" -#: bbstreamer_file.c:364 +#: bbstreamer_file.c:365 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "n'a pas pu initialiser les droits du fichier « %s » : %m" @@ -227,7 +327,7 @@ msgstr "n'a pas pu écrire dans le fichier compressé « %s » : %s" msgid "could not close compressed file \"%s\": %m" msgstr "n'a pas pu fermer le fichier compressé « %s » : %m" -#: bbstreamer_gzip.c:245 walmethods.c:876 +#: bbstreamer_gzip.c:245 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "n'a pas pu initialiser la bibliothèque de compression" @@ -277,12 +377,12 @@ msgstr "la fin du fichier tar fait plus de 2 blocs" msgid "unexpected state while parsing tar archive" msgstr "état inattendu lors de l'analyse de l'archive tar" -#: bbstreamer_tar.c:296 +#: bbstreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "le membre de tar a un nom vide" -#: bbstreamer_tar.c:328 +#: bbstreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "le flux COPY s'est terminé avant que le dernier fichier soit terminé" @@ -312,87 +412,87 @@ msgstr "n'a pas pu activer le mode distance longue : %s" msgid "could not create zstd decompression context" msgstr "n'a pas pu créer le contexte de décompression zstd" -#: pg_basebackup.c:238 +#: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" msgstr "suppression du répertoire des données « %s »" -#: pg_basebackup.c:240 +#: pg_basebackup.c:247 #, c-format msgid "failed to remove data directory" msgstr "échec de la suppression du répertoire des données" -#: pg_basebackup.c:244 +#: pg_basebackup.c:251 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "suppression du contenu du répertoire des données « %s »" -#: pg_basebackup.c:246 +#: pg_basebackup.c:253 #, c-format msgid "failed to remove contents of data directory" msgstr "échec de la suppression du contenu du répertoire des données" -#: pg_basebackup.c:251 +#: pg_basebackup.c:258 #, c-format msgid "removing WAL directory \"%s\"" msgstr "suppression du répertoire des journaux de transactions « %s »" -#: pg_basebackup.c:253 +#: pg_basebackup.c:260 #, c-format msgid "failed to remove WAL directory" msgstr "échec de la suppression du répertoire des journaux de transactions" -#: pg_basebackup.c:257 +#: pg_basebackup.c:264 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "suppression du contenu du répertoire des journaux de transactions « %s »" -#: pg_basebackup.c:259 +#: pg_basebackup.c:266 #, c-format msgid "failed to remove contents of WAL directory" msgstr "échec de la suppression du contenu du répertoire des journaux de transactions" -#: pg_basebackup.c:265 +#: pg_basebackup.c:272 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "répertoire des données « %s » non supprimé à la demande de l'utilisateur" -#: pg_basebackup.c:268 +#: pg_basebackup.c:275 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "répertoire des journaux de transactions « %s » non supprimé à la demande de l'utilisateur" -#: pg_basebackup.c:272 +#: pg_basebackup.c:279 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "les modifications des répertoires des tablespaces ne seront pas annulées" -#: pg_basebackup.c:324 +#: pg_basebackup.c:331 #, c-format msgid "directory name too long" msgstr "nom du répertoire trop long" -#: pg_basebackup.c:331 +#: pg_basebackup.c:338 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "multiple signes « = » dans la correspondance de tablespace" -#: pg_basebackup.c:340 +#: pg_basebackup.c:347 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "format de correspondance de tablespace « %s » invalide, doit être « ANCIENREPERTOIRE=NOUVEAUREPERTOIRE »" -#: pg_basebackup.c:359 +#: pg_basebackup.c:366 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "l'ancien répertoire n'est pas un chemin absolu dans la correspondance de tablespace : %s" -#: pg_basebackup.c:363 +#: pg_basebackup.c:370 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "le nouveau répertoire n'est pas un chemin absolu dans la correspondance de tablespace : %s" -#: pg_basebackup.c:385 +#: pg_basebackup.c:392 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -402,17 +502,19 @@ msgstr "" "d'exécution.\n" "\n" -#: pg_basebackup.c:387 pg_receivewal.c:79 pg_recvlogical.c:76 +#: pg_basebackup.c:394 pg_createsubscriber.c:221 pg_receivewal.c:79 +#: pg_recvlogical.c:86 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_basebackup.c:388 pg_receivewal.c:80 pg_recvlogical.c:77 +#: pg_basebackup.c:395 pg_createsubscriber.c:222 pg_receivewal.c:80 +#: pg_recvlogical.c:87 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_basebackup.c:389 +#: pg_basebackup.c:396 #, c-format msgid "" "\n" @@ -421,17 +523,26 @@ msgstr "" "\n" "Options contrôlant la sortie :\n" -#: pg_basebackup.c:390 +#: pg_basebackup.c:397 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=RÉPERTOIRE reçoit la sauvegarde de base dans ce répertoire\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t format en sortie (plain (par défaut), tar)\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:399 +#, c-format +msgid "" +" -i, --incremental=OLDMANIFEST\n" +" take incremental backup\n" +msgstr "" +" -i, --incremental=ANCIENMANIFESTE\n" +" réalise une sauvegarde incrémentale\n" + +#: pg_basebackup.c:401 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -441,21 +552,21 @@ msgstr "" " données (en Ko/s, ou utiliser le suffixe « k »\n" " ou « M »)\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:403 #, c-format msgid "" " -R, --write-recovery-conf\n" " write configuration for replication\n" msgstr " -R, --write-recovery-conf écrit la configuration pour la réplication\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:405 #, c-format msgid "" " -t, --target=TARGET[:DETAIL]\n" " backup target (if other than client)\n" msgstr " -t, --target=CIBLE[:DETAIL] cible de sauvegarde (si autre que client)\n" -#: pg_basebackup.c:398 +#: pg_basebackup.c:407 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -464,14 +575,14 @@ msgstr "" " -T, --tablespace-mapping=ANCIENREP=NOUVEAUREP\n" " déplace le répertoire ANCIENREP en NOUVEAUREP\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:409 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr "" " --waldir=RÉP_WAL emplacement du répertoire des journaux de\n" " transactions\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:410 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -481,12 +592,12 @@ msgstr "" " inclut les journaux de transactions requis avec\n" " la méthode spécifiée\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:412 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip compresse la sortie tar\n" -#: pg_basebackup.c:404 +#: pg_basebackup.c:413 #, c-format msgid "" " -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" @@ -495,12 +606,12 @@ msgstr "" " -Z, --compress=[{client|server}-]METHODE[:DETAIL]\n" " compresse sur le client ou le serveur comme indiqué\n" -#: pg_basebackup.c:406 +#: pg_basebackup.c:415 #, c-format msgid " -Z, --compress=none do not compress tar output\n" msgstr " -Z, --compress=none ne compresse pas la sortie tar\n" -#: pg_basebackup.c:407 +#: pg_basebackup.c:416 #, c-format msgid "" "\n" @@ -509,56 +620,56 @@ msgstr "" "\n" "Options générales :\n" -#: pg_basebackup.c:408 +#: pg_basebackup.c:417 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" -" set fast or spread checkpointing\n" -msgstr " -c, --checkpoint=fast|spread exécute un CHECKPOINT rapide ou réparti\n" +" set fast or spread (default) checkpointing\n" +msgstr " -c, --checkpoint=fast|spread exécute un CHECKPOINT rapide ou réparti (par défaut)\n" -#: pg_basebackup.c:410 +#: pg_basebackup.c:419 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " --create-slot crée un slot de réplication\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:420 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=LABEL configure le label de sauvegarde\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:421 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean ne nettoie pas en cas d'erreur\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:422 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync n'attend pas que les modifications soient\n" " proprement écrites sur disque\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:423 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress affiche la progression de la sauvegarde\n" -#: pg_basebackup.c:415 pg_receivewal.c:89 +#: pg_basebackup.c:424 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=NOMREP slot de réplication à utiliser\n" -#: pg_basebackup.c:416 pg_receivewal.c:91 pg_recvlogical.c:98 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose affiche des messages verbeux\n" -#: pg_basebackup.c:417 pg_receivewal.c:92 pg_recvlogical.c:99 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_basebackup.c:418 +#: pg_basebackup.c:427 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -568,7 +679,7 @@ msgstr "" " utilise cet algorithme pour les sommes de\n" " contrôle du manifeste\n" -#: pg_basebackup.c:420 +#: pg_basebackup.c:429 #, c-format msgid "" " --manifest-force-encode\n" @@ -577,40 +688,47 @@ msgstr "" " --manifest-force-encode encode tous les noms de fichier dans le\n" " manifeste en hexadécimal\n" -#: pg_basebackup.c:422 +#: pg_basebackup.c:431 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr "" " --no-estimate-size ne réalise pas d'estimation sur la taille de la\n" " sauvegarde côté serveur\n" -#: pg_basebackup.c:423 +#: pg_basebackup.c:432 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr "" " --no-manifest supprime la génération de manifeste de\n" " sauvegarde\n" -#: pg_basebackup.c:424 +#: pg_basebackup.c:433 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr "" " --no-slot empêche la création de slots de réplication\n" " temporaires\n" -#: pg_basebackup.c:425 +#: pg_basebackup.c:434 #, c-format msgid "" " --no-verify-checksums\n" " do not verify checksums\n" msgstr " --no-verify-checksums ne vérifie pas les sommes de contrôle\n" -#: pg_basebackup.c:427 pg_receivewal.c:95 pg_recvlogical.c:100 +#: pg_basebackup.c:436 +#, c-format +msgid "" +" --sync-method=METHOD\n" +" set method for syncing files to disk\n" +msgstr " --sync-method=METHODE configure la méthode pour synchroniser les fichiers sur disque\n" + +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_basebackup.c:428 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 #, c-format msgid "" "\n" @@ -619,24 +737,24 @@ msgstr "" "\n" "Options de connexion :\n" -#: pg_basebackup.c:429 pg_receivewal.c:97 +#: pg_basebackup.c:440 pg_receivewal.c:97 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CHAÎNE_CONNEX chaîne de connexion\n" -#: pg_basebackup.c:430 pg_receivewal.c:98 pg_recvlogical.c:103 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HÔTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: pg_basebackup.c:431 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT numéro de port du serveur de bases de données\n" -#: pg_basebackup.c:432 +#: pg_basebackup.c:443 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -645,24 +763,25 @@ msgstr "" " -s, --status-interval=INTERVAL durée entre l'envoi de paquets de statut au\n" " serveur (en secondes)\n" -#: pg_basebackup.c:434 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=UTILISATEUR se connecte avec cet utilisateur\n" -#: pg_basebackup.c:435 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais le mot de passe\n" -#: pg_basebackup.c:436 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password force la demande du mot de passe (devrait\n" " survenir automatiquement)\n" -#: pg_basebackup.c:437 pg_receivewal.c:106 pg_recvlogical.c:108 +#: pg_basebackup.c:448 pg_createsubscriber.c:240 pg_receivewal.c:106 +#: pg_recvlogical.c:118 #, c-format msgid "" "\n" @@ -671,484 +790,548 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_basebackup.c:438 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:449 pg_createsubscriber.c:241 pg_receivewal.c:107 +#: pg_recvlogical.c:119 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: pg_basebackup.c:477 +#: pg_basebackup.c:488 #, c-format msgid "could not read from ready pipe: %m" msgstr "n'a pas pu lire à partir du tube : %m" -#: pg_basebackup.c:480 pg_basebackup.c:622 pg_basebackup.c:2151 -#: streamutil.c:441 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 +#: streamutil.c:518 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "n'a pas pu analyser l'emplacement du journal des transactions « %s »" -#: pg_basebackup.c:585 pg_receivewal.c:600 +#: pg_basebackup.c:596 pg_receivewal.c:600 #, c-format msgid "could not finish writing WAL files: %m" msgstr "n'a pas pu finir l'écriture dans les fichiers de transactions : %m" -#: pg_basebackup.c:631 +#: pg_basebackup.c:642 #, c-format msgid "could not create pipe for background process: %m" msgstr "n'a pas pu créer un tube pour le processus en tâche de fond : %m" -#: pg_basebackup.c:664 +#: pg_basebackup.c:676 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "a créé le slot de réplication temporaire « %s »" -#: pg_basebackup.c:667 +#: pg_basebackup.c:679 #, c-format msgid "created replication slot \"%s\"" msgstr "a créé le slot de réplication « %s »" -#: pg_basebackup.c:701 +#: pg_basebackup.c:728 #, c-format msgid "could not create background process: %m" msgstr "n'a pas pu créer un processus en tâche de fond : %m" -#: pg_basebackup.c:710 +#: pg_basebackup.c:737 #, c-format msgid "could not create background thread: %m" msgstr "n'a pas pu créer un thread en tâche de fond : %m" -#: pg_basebackup.c:749 +#: pg_basebackup.c:776 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "le répertoire « %s » existe mais n'est pas vide" -#: pg_basebackup.c:755 +#: pg_basebackup.c:782 pg_createsubscriber.c:390 #, c-format msgid "could not access directory \"%s\": %m" msgstr "n'a pas pu accéder au répertoire « %s » : %m" -#: pg_basebackup.c:831 +#: pg_basebackup.c:858 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s Ko (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s Ko (100%%), %d/%d tablespaces %*s" -#: pg_basebackup.c:843 +#: pg_basebackup.c:870 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s Ko (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s Ko (%d%%), %d/%d tablespaces (%s%-*.*s)" -#: pg_basebackup.c:859 +#: pg_basebackup.c:886 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s Ko (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s Ko (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:883 +#: pg_basebackup.c:910 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "le taux de transfert « %s » ne correspond pas à une valeur valide" -#: pg_basebackup.c:885 +#: pg_basebackup.c:912 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "taux de transfert invalide (« %s ») : %m" -#: pg_basebackup.c:892 +#: pg_basebackup.c:919 #, c-format msgid "transfer rate must be greater than zero" msgstr "le taux de transfert doit être supérieur à zéro" -#: pg_basebackup.c:922 +#: pg_basebackup.c:949 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "unité invalide pour --max-rate : « %s »" -#: pg_basebackup.c:926 +#: pg_basebackup.c:953 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "le taux de transfert « %s » dépasse l'échelle des entiers" -#: pg_basebackup.c:933 +#: pg_basebackup.c:960 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "le taux de transfert « %s » est en dehors des limites" -#: pg_basebackup.c:995 +#: pg_basebackup.c:1022 #, c-format msgid "could not get COPY data stream: %s" msgstr "n'a pas pu obtenir le flux de données de COPY : %s" -#: pg_basebackup.c:1012 pg_recvlogical.c:436 pg_recvlogical.c:608 +#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 #: receivelog.c:973 #, c-format msgid "could not read COPY data: %s" msgstr "n'a pas pu lire les données du COPY : %s" -#: pg_basebackup.c:1016 +#: pg_basebackup.c:1043 #, c-format msgid "background process terminated unexpectedly" msgstr "un processus worker s'est arrêté de façon inattendue" -#: pg_basebackup.c:1087 +#: pg_basebackup.c:1114 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "ne peut pas injecter le manifeste dans un fichier tar compressé" -#: pg_basebackup.c:1088 +#: pg_basebackup.c:1115 #, c-format msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." msgstr "Utilisez la compression côté client, envoyez la sortie dans un répertoire plutôt que sur la sortie standard, ou utilisez %s." -#: pg_basebackup.c:1104 +#: pg_basebackup.c:1131 #, c-format msgid "cannot parse archive \"%s\"" msgstr "n'a pas pu analyser l'archive « %s »" -#: pg_basebackup.c:1105 +#: pg_basebackup.c:1132 #, c-format msgid "Only tar archives can be parsed." msgstr "Seules les archives tar peuvent être analysées" -#: pg_basebackup.c:1107 +#: pg_basebackup.c:1134 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "Le format plain requiert que pg_basebackup analyse l'archive." -#: pg_basebackup.c:1109 +#: pg_basebackup.c:1136 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "Utiliser - comme répertoire de sortie requiert que pg_basebackup analyse l'archive." -#: pg_basebackup.c:1111 +#: pg_basebackup.c:1138 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "L'option -R requiert que pg_basebackup analyse l'archive." -#: pg_basebackup.c:1330 +#: pg_basebackup.c:1357 #, c-format msgid "archives must precede manifest" msgstr "les archives doivent précéder le manifeste" -#: pg_basebackup.c:1345 +#: pg_basebackup.c:1372 #, c-format msgid "invalid archive name: \"%s\"" msgstr "nom d'archive invalide : « %s »" -#: pg_basebackup.c:1417 +#: pg_basebackup.c:1444 #, c-format msgid "unexpected payload data" msgstr "donnée de charge inattendue" -#: pg_basebackup.c:1560 +#: pg_basebackup.c:1587 #, c-format msgid "empty COPY message" msgstr "message COPY vide" -#: pg_basebackup.c:1562 +#: pg_basebackup.c:1589 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "message COPY malformé de type %d, longueur %zu" -#: pg_basebackup.c:1760 +#: pg_basebackup.c:1789 #, c-format msgid "incompatible server version %s" msgstr "version « %s » du serveur incompatible" -#: pg_basebackup.c:1776 +#: pg_basebackup.c:1805 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "Utilisez -X none ou -X fetch pour désactiver la réplication en flux." -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1841 +#, c-format +msgid "server does not support incremental backup" +msgstr "le serveur n'accepte pas les sauvegardes incrémentales" + +#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 +#: receivelog.c:543 receivelog.c:582 streamutil.c:364 streamutil.c:438 +#: streamutil.c:490 streamutil.c:578 streamutil.c:730 streamutil.c:775 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "n'a pas pu envoyer la commande de réplication « %s » : %s" + +#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#, c-format +msgid "could not upload manifest: %s" +msgstr "n'a pas pu charger le manifeste : %s" + +#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#, c-format +msgid "could not upload manifest: unexpected status %s" +msgstr "n'a pas pu charger le manifeste : statut %s inattendu" + +#: pg_basebackup.c:1867 +#, c-format +msgid "could not send COPY data: %s" +msgstr "n'a pas pu envoyer les données COPY : %s" + +#: pg_basebackup.c:1877 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "n'a pas pu envoyer end-of-COPY : %s" + +#: pg_basebackup.c:1892 +#, c-format +msgid "unexpected extra result while sending manifest" +msgstr "résultat supplémentaire inattendu lors de l'envoi du manifeste" + +#: pg_basebackup.c:1950 #, c-format msgid "backup targets are not supported by this server version" msgstr "les cibles de sauvegarde ne sont pas supportées par cette version du serveur" -#: pg_basebackup.c:1847 +#: pg_basebackup.c:1953 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "la configuration de la restauration ne peut pas être écrite quand une cible de restauration est utilisée" -#: pg_basebackup.c:1874 +#: pg_basebackup.c:1980 #, c-format msgid "server does not support server-side compression" msgstr "le serveur ne supporte pas la compression côté serveur" -#: pg_basebackup.c:1884 +#: pg_basebackup.c:1990 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "début de la sauvegarde de base, en attente de la fin du checkpoint" -#: pg_basebackup.c:1888 +#: pg_basebackup.c:1994 #, c-format msgid "waiting for checkpoint" msgstr "en attente du checkpoint" -#: pg_basebackup.c:1901 pg_recvlogical.c:260 receivelog.c:543 receivelog.c:582 -#: streamutil.c:288 streamutil.c:361 streamutil.c:413 streamutil.c:501 -#: streamutil.c:653 streamutil.c:698 -#, c-format -msgid "could not send replication command \"%s\": %s" -msgstr "n'a pas pu envoyer la commande de réplication « %s » : %s" - -#: pg_basebackup.c:1909 +#: pg_basebackup.c:2016 #, c-format msgid "could not initiate base backup: %s" msgstr "n'a pas pu initier la sauvegarde de base : %s" -#: pg_basebackup.c:1912 +#: pg_basebackup.c:2019 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "le serveur a renvoyé une réponse inattendue à la commande BASE_BACKUP ; a récupéré %d lignes et %d champs, alors qu'il attendait %d lignes et %d champs" -#: pg_basebackup.c:1918 +#: pg_basebackup.c:2025 #, c-format msgid "checkpoint completed" msgstr "checkpoint terminé" -#: pg_basebackup.c:1932 +#: pg_basebackup.c:2039 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "point de départ du journal de transactions : %s sur la timeline %u" -#: pg_basebackup.c:1940 +#: pg_basebackup.c:2047 #, c-format msgid "could not get backup header: %s" msgstr "n'a pas pu obtenir l'en-tête du serveur : %s" -#: pg_basebackup.c:1943 +#: pg_basebackup.c:2050 #, c-format msgid "no data returned from server" msgstr "aucune donnée renvoyée du serveur" -#: pg_basebackup.c:1986 +#: pg_basebackup.c:2093 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "peut seulement écrire un tablespace sur la sortie standard, la base en a %d" -#: pg_basebackup.c:1999 +#: pg_basebackup.c:2106 #, c-format msgid "starting background WAL receiver" msgstr "lance le récepteur de journaux de transactions en tâche de fond" -#: pg_basebackup.c:2082 +#: pg_basebackup.c:2189 #, c-format msgid "backup failed: %s" msgstr "échec de la sauvegarde : %s" -#: pg_basebackup.c:2085 +#: pg_basebackup.c:2192 #, c-format msgid "no write-ahead log end position returned from server" msgstr "aucune position de fin du journal de transactions renvoyée par le serveur" -#: pg_basebackup.c:2088 +#: pg_basebackup.c:2195 #, c-format msgid "write-ahead log end point: %s" msgstr "point final du journal de transactions : %s" -#: pg_basebackup.c:2099 +#: pg_basebackup.c:2206 #, c-format msgid "checksum error occurred" msgstr "erreur de somme de contrôle" -#: pg_basebackup.c:2104 +#: pg_basebackup.c:2211 #, c-format msgid "final receive failed: %s" msgstr "échec lors de la réception finale : %s" -#: pg_basebackup.c:2128 +#: pg_basebackup.c:2235 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "en attente que le processus en tâche de fond termine le flux..." -#: pg_basebackup.c:2132 +#: pg_basebackup.c:2239 #, c-format msgid "could not send command to background pipe: %m" msgstr "n'a pas pu envoyer la commande au tube du processus : %m" -#: pg_basebackup.c:2137 +#: pg_basebackup.c:2244 #, c-format msgid "could not wait for child process: %m" msgstr "n'a pas pu attendre le processus fils : %m" -#: pg_basebackup.c:2139 +#: pg_basebackup.c:2246 #, c-format msgid "child %d died, expected %d" msgstr "le fils %d est mort, %d attendu" -#: pg_basebackup.c:2141 streamutil.c:91 streamutil.c:196 +#: pg_basebackup.c:2248 streamutil.c:89 streamutil.c:204 streamutil.c:316 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2161 +#: pg_basebackup.c:2268 #, c-format msgid "could not wait for child thread: %m" msgstr "n'a pas pu attendre le thread : %m" -#: pg_basebackup.c:2166 +#: pg_basebackup.c:2273 #, c-format msgid "could not get child thread exit status: %m" msgstr "n'a pas pu obtenir le code de sortie du thread : %m" -#: pg_basebackup.c:2169 +#: pg_basebackup.c:2276 #, c-format msgid "child thread exited with error %u" msgstr "le thread a quitté avec le code d'erreur %u" -#: pg_basebackup.c:2198 +#: pg_basebackup.c:2305 #, c-format msgid "syncing data to disk ..." msgstr "synchronisation des données sur disque..." -#: pg_basebackup.c:2223 +#: pg_basebackup.c:2330 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "renommage de backup_manifest.tmp en backup_manifest" -#: pg_basebackup.c:2243 +#: pg_basebackup.c:2350 #, c-format msgid "base backup completed" msgstr "sauvegarde de base terminée" -#: pg_basebackup.c:2326 +#: pg_basebackup.c:2436 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "argument « %s » invalide pour le CHECKPOINT, doit être soit « fast » soit « spread »" -#: pg_basebackup.c:2344 +#: pg_basebackup.c:2454 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "format de sortie « %s » invalide, doit être soit « plain » soit « tar »" -#: pg_basebackup.c:2422 +#: pg_basebackup.c:2535 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "option wal-method « %s » invalide, doit être soit « fetch » soit « stream » soit « none »" -#: pg_basebackup.c:2457 pg_basebackup.c:2469 pg_basebackup.c:2491 -#: pg_basebackup.c:2503 pg_basebackup.c:2509 pg_basebackup.c:2561 -#: pg_basebackup.c:2572 pg_basebackup.c:2582 pg_basebackup.c:2588 -#: pg_basebackup.c:2595 pg_basebackup.c:2607 pg_basebackup.c:2619 -#: pg_basebackup.c:2627 pg_basebackup.c:2640 pg_basebackup.c:2646 -#: pg_basebackup.c:2655 pg_basebackup.c:2667 pg_basebackup.c:2678 -#: pg_basebackup.c:2686 pg_receivewal.c:748 pg_receivewal.c:760 +#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 +#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 +#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 +#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 +#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 +#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 +#: pg_basebackup.c:2803 pg_createsubscriber.c:2037 pg_createsubscriber.c:2047 +#: pg_createsubscriber.c:2055 pg_createsubscriber.c:2083 +#: pg_createsubscriber.c:2115 pg_receivewal.c:748 pg_receivewal.c:760 #: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 -#: pg_receivewal.c:793 pg_recvlogical.c:835 pg_recvlogical.c:847 -#: pg_recvlogical.c:857 pg_recvlogical.c:864 pg_recvlogical.c:871 -#: pg_recvlogical.c:878 pg_recvlogical.c:885 pg_recvlogical.c:892 -#: pg_recvlogical.c:899 pg_recvlogical.c:906 +#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 +#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 +#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 +#: pg_recvlogical.c:917 pg_recvlogical.c:924 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: pg_basebackup.c:2467 pg_receivewal.c:758 pg_recvlogical.c:845 +#: pg_basebackup.c:2584 pg_createsubscriber.c:2045 pg_receivewal.c:758 +#: pg_recvlogical.c:863 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_basebackup.c:2490 +#: pg_basebackup.c:2607 #, c-format msgid "cannot specify both format and backup target" msgstr "ne peut pas spécifier à la fois le format et la cible de sauvegarde" -#: pg_basebackup.c:2502 +#: pg_basebackup.c:2619 #, c-format msgid "must specify output directory or backup target" msgstr "doit spécifier un répertoire de sortie ou une cible de sauvegarde" -#: pg_basebackup.c:2508 +#: pg_basebackup.c:2625 #, c-format msgid "cannot specify both output directory and backup target" msgstr "ne peut pas spécifier à la fois le répertoire en sortie et la cible de sauvegarde" -#: pg_basebackup.c:2538 pg_receivewal.c:802 +#: pg_basebackup.c:2655 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "algorithme de compression inconnu : « %s »" -#: pg_basebackup.c:2544 pg_receivewal.c:809 +#: pg_basebackup.c:2661 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "spécification de compression invalide : %s" -#: pg_basebackup.c:2560 +#: pg_basebackup.c:2677 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "la compression client n'est pas possible quand une cible de restauration est indiquée." -#: pg_basebackup.c:2571 +#: pg_basebackup.c:2688 #, c-format msgid "only tar mode backups can be compressed" msgstr "seules les sauvegardes en mode tar peuvent être compressées" -#: pg_basebackup.c:2581 +#: pg_basebackup.c:2698 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "Les journaux de transactions ne peuvent pas être envoyés en flux quand une cible de sauvegarde est indiquée." -#: pg_basebackup.c:2587 +#: pg_basebackup.c:2704 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "ne peut pas envoyer les journaux de transactions vers stdout en mode tar" -#: pg_basebackup.c:2594 +#: pg_basebackup.c:2711 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "les slots de réplications peuvent seulement être utilisés avec la réplication en flux des WAL" -#: pg_basebackup.c:2606 +#: pg_basebackup.c:2723 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot ne peut pas être utilisé avec un nom de slot" #. translator: second %s is an option name -#: pg_basebackup.c:2617 pg_receivewal.c:774 +#: pg_basebackup.c:2734 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s a besoin du slot avec l'option --slot" -#: pg_basebackup.c:2625 pg_basebackup.c:2665 pg_basebackup.c:2676 -#: pg_basebackup.c:2684 +#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 +#: pg_basebackup.c:2801 #, c-format msgid "%s and %s are incompatible options" msgstr "%s et %s sont des options incompatibles" -#: pg_basebackup.c:2639 +#: pg_basebackup.c:2756 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "l'emplacement du répertoire des journaux de transactions ne peut pas être indiqué avec une cible de sauvegarde" -#: pg_basebackup.c:2645 +#: pg_basebackup.c:2762 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "l'emplacement du répertoire des journaux de transactions doit être indiqué uniquement dans le mode plain" -#: pg_basebackup.c:2654 +#: pg_basebackup.c:2771 #, c-format msgid "WAL directory location must be an absolute path" msgstr "l'emplacement du répertoire des journaux de transactions doit être indiqué avec un chemin absolu" -#: pg_basebackup.c:2754 +#: pg_basebackup.c:2871 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: pg_receivewal.c:77 +#: pg_createsubscriber.c:169 +#, c-format +msgid "failed after the end of recovery" +msgstr "échec après la fin de la restauration" + +#: pg_createsubscriber.c:170 +#, c-format +msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." +msgstr "Le serveur cible ne peut plus être utilisé comme un réplicat physique. Vous devez recréer le réplicat physique avant de continuer." + +#: pg_createsubscriber.c:198 +#, c-format +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "la publication « %s » dans la base « %s » sur le primaire pourrait être laissé derrière" + +#: pg_createsubscriber.c:200 +#, c-format +msgid "Drop this publication before trying again." +msgstr "Supprimez cette publication avant de tenter de nouveau." + +#: pg_createsubscriber.c:204 +#, c-format +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "le slot de réplication « %s » dans la base « %s » sur le primaire pourrait être laissé derrière" + +#: pg_createsubscriber.c:206 pg_createsubscriber.c:1260 +#, c-format +msgid "Drop this replication slot soon to avoid retention of WAL files." +msgstr "Supprimez rapidement ce slot de réplication pour éviter la rétention des fichiers WAL." + +#: pg_createsubscriber.c:219 #, c-format msgid "" -"%s receives PostgreSQL streaming write-ahead logs.\n" +"%s creates a new logical replica from a standby server.\n" "\n" msgstr "" -"%s reçoit le flux des journaux de transactions PostgreSQL.\n" +"%s crée un nouveau réplicat logique à partir d'un serveur secondaire.\n" "\n" -#: pg_receivewal.c:81 pg_recvlogical.c:82 +#: pg_createsubscriber.c:223 pg_receivewal.c:81 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -1157,227 +1340,842 @@ msgstr "" "\n" "Options :\n" -#: pg_receivewal.c:82 +#: pg_createsubscriber.c:224 #, c-format -msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" -msgstr "" -" -D, --directory=RÉPERTOIRE reçoit les journaux de transactions dans ce\n" -" répertoire\n" +msgid " -d, --database=DBNAME database in which to create a subscription\n" +msgstr " -d, --dbname=BASE base de données où créer la souscription\n" -#: pg_receivewal.c:83 pg_recvlogical.c:83 +#: pg_createsubscriber.c:225 #, c-format -msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" -msgstr " -E, --endpos=LSN quitte après avoir reçu le LSN spécifié\n" +msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" +msgstr " [-D, --pgdata=]RÉP_DONNEES emplacement du répertoire de données de l'abonné\n" -#: pg_receivewal.c:84 pg_recvlogical.c:87 +#: pg_createsubscriber.c:226 #, c-format -msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgid " -n, --dry-run dry run, just show what would be done\n" msgstr "" -" --if-not-exists ne pas renvoyer une erreur si le slot existe\n" -" déjà lors de sa création\n" +" -n, --dry-run pas d'exécution, affiche\n" +" simplement ce qui sera fait\n" -#: pg_receivewal.c:85 pg_recvlogical.c:89 +#: pg_createsubscriber.c:227 #, c-format -msgid " -n, --no-loop do not loop on connection lost\n" -msgstr " -n, --no-loop ne boucle pas en cas de perte de la connexion\n" +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr " -p, --subscriber-port=PORT numéro de port de l'abonné (par défaut %s)\n" -#: pg_receivewal.c:86 +#: pg_createsubscriber.c:228 #, c-format -msgid " --no-sync do not wait for changes to be written safely to disk\n" -msgstr "" -" --no-sync n'attend pas que les modifications soient\n" -" proprement écrites sur disque\n" +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr " -P, --publisher-server=CHAÎNE_CONNEX chaîne de connexion du publieur\n" -#: pg_receivewal.c:87 pg_recvlogical.c:94 +#: pg_createsubscriber.c:229 #, c-format -msgid "" -" -s, --status-interval=SECS\n" -" time between status packets sent to server (default: %d)\n" -msgstr "" -" -s, --status-interval=SECS durée entre l'envoi de paquets de statut au\n" -" (par défaut %d)\n" +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=RÉP répertoire de la socket à utiliser (par défaut, le répertoire courant)\n" -#: pg_receivewal.c:90 +#: pg_createsubscriber.c:230 #, c-format -msgid " --synchronous flush write-ahead log immediately after writing\n" -msgstr "" -" --synchronous vide le journal de transactions immédiatement\n" -" après son écriture\n" +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr " -t, --recovery-timeout=SECS durée en secondes à attendre pour la fin de la restauration\n" -#: pg_receivewal.c:93 +#: pg_createsubscriber.c:231 #, c-format -msgid "" -" -Z, --compress=METHOD[:DETAIL]\n" -" compress as specified\n" -msgstr "" -" -Z, --compress=METHOD[:DETAIL]\n" -" compresse comme indiqué\n" +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=NOM nom d'utilisateur pour la connexion de l'abonné\n" -#: pg_receivewal.c:103 +#: pg_createsubscriber.c:232 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose affiche des messages verbeux\n" + +#: pg_createsubscriber.c:233 #, c-format msgid "" -"\n" -"Optional actions:\n" +" --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" msgstr "" -"\n" -"Actions optionnelles :\n" +" --config-file=NOMFICHIER utilise le fichier de configuration indiqué\n" +" du serveur principal lors de l'exécution de\n" +" l'instance cible\n" -#: pg_receivewal.c:104 pg_recvlogical.c:79 +#: pg_createsubscriber.c:235 #, c-format -msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" -msgstr "" -" --create-slot crée un nouveau slot de réplication\n" -" (pour le nom du slot, voir --slot)\n" +msgid " --publication=NAME publication name\n" +msgstr " --publication=NOM nom de la publication\n" -#: pg_receivewal.c:105 pg_recvlogical.c:80 +#: pg_createsubscriber.c:236 #, c-format -msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" -msgstr "" -" --drop-slot supprime un nouveau slot de réplication\n" -" (pour le nom du slot, voir --slot)\n" +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=NOM nom du slot de réplication\n" -#: pg_receivewal.c:191 +#: pg_createsubscriber.c:237 #, c-format -msgid "finished segment at %X/%X (timeline %u)" -msgstr "segment terminé à %X/%X (timeline %u)" +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=NOM nom de la souscription\n" -#: pg_receivewal.c:198 +#: pg_createsubscriber.c:238 #, c-format -msgid "stopped log streaming at %X/%X (timeline %u)" -msgstr "arrêt du flux streaming à %X/%X (timeline %u)" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version puis quitte\n" -#: pg_receivewal.c:214 +#: pg_createsubscriber.c:239 #, c-format -msgid "switched to timeline %u at %X/%X" -msgstr "a basculé sur la timeline %u à %X/%X" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_receivewal.c:224 +#: pg_createsubscriber.c:282 #, c-format -msgid "received interrupt signal, exiting" -msgstr "a reçu un signal d'interruption, quitte" +msgid "could not parse connection string: %s" +msgstr "n'a pas pu analyser la chaîne de connexion : %s" -#: pg_receivewal.c:256 +#: pg_createsubscriber.c:359 #, c-format -msgid "could not close directory \"%s\": %m" -msgstr "n'a pas pu fermer le répertoire « %s » : %m" +msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" +msgstr "le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé dans le même répertoire que « %s »" -#: pg_receivewal.c:323 +#: pg_createsubscriber.c:362 #, c-format -msgid "segment file \"%s\" has incorrect size %lld, skipping" -msgstr "le segment « %s » a une taille incorrecte (%lld), ignoré" +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "le programme « %s » a été trouvé par « %s » mais n'est pas de la même version que %s" -#: pg_receivewal.c:340 +#: pg_createsubscriber.c:382 #, c-format -msgid "could not open compressed file \"%s\": %m" -msgstr "n'a pas pu ouvrir le fichier compressé « %s » : %m" +msgid "checking if directory \"%s\" is a cluster data directory" +msgstr "vérification si le répertoire « %s » est le répertoire d'une instance" -#: pg_receivewal.c:343 +#: pg_createsubscriber.c:388 #, c-format -msgid "could not seek in compressed file \"%s\": %m" -msgstr "n'a pas pu chercher dans le fichier compressé « %s » : %m" +msgid "data directory \"%s\" does not exist" +msgstr "le répertoire des données « %s » n'existe pas" -#: pg_receivewal.c:349 +#: pg_createsubscriber.c:396 #, c-format -msgid "could not read compressed file \"%s\": %m" -msgstr "n'a pas pu lire le fichier compressé « %s » : %m" +msgid "directory \"%s\" is not a database cluster directory" +msgstr "le répertoire « %s » n'est pas un répertoire d'instance" -#: pg_receivewal.c:352 +#: pg_createsubscriber.c:513 #, c-format -msgid "could not read compressed file \"%s\": read %d of %zu" -msgstr "n'a pas pu lire le fichier compressé « %s » : a lu %d sur %zu" +msgid "connection to database failed: %s" +msgstr "échec de la connexion à la base de données : %s" -#: pg_receivewal.c:362 +#: pg_createsubscriber.c:526 #, c-format -msgid "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" -msgstr "le segment compressé « %s » a une taille %d non compressé incorrecte, ignoré" +msgid "could not clear search_path: %s" +msgstr "n'a pas pu effacer search_path : %s" -#: pg_receivewal.c:390 +#: pg_createsubscriber.c:566 #, c-format -msgid "could not create LZ4 decompression context: %s" -msgstr "n'a pas pu créer le contexte de décompression LZ4 : %s" +msgid "getting system identifier from publisher" +msgstr "recherche de l'identifieur système sur le publieur" -#: pg_receivewal.c:402 +#: pg_createsubscriber.c:573 #, c-format -msgid "could not read file \"%s\": %m" -msgstr "n'a pas pu lire le fichier « %s » : %m" +msgid "could not get system identifier: %s" +msgstr "n'a pas pu obtenir l'identifiant du système : %s" -#: pg_receivewal.c:420 +#: pg_createsubscriber.c:579 #, c-format -msgid "could not decompress file \"%s\": %s" -msgstr "n'a pas pu décompresser le fichier « %s » : %s" +msgid "could not get system identifier: got %d rows, expected %d row" +msgstr "n'a pas pu obtenir l'identifiant du système : lu %d octets, %d attendus" -#: pg_receivewal.c:443 +#: pg_createsubscriber.c:586 #, c-format -msgid "could not free LZ4 decompression context: %s" -msgstr "n'a pas pu libérer le contexte de décompression LZ4 : %s" +msgid "system identifier is %llu on publisher" +msgstr "l'identifieur système est %llu sur le publieur" -#: pg_receivewal.c:448 +#: pg_createsubscriber.c:607 #, c-format -msgid "compressed segment file \"%s\" has incorrect uncompressed size %zu, skipping" -msgstr "le fichier segment compressé « %s » a une taille %zu décompressée incorrecte, ignoré" +msgid "getting system identifier from subscriber" +msgstr "recherche l'identifieur système sur l'abonné" -#: pg_receivewal.c:453 +#: pg_createsubscriber.c:611 pg_createsubscriber.c:641 #, c-format -msgid "cannot check file \"%s\": compression with %s not supported by this build" -msgstr "ne peut pas vérifier le fichier « %s » : la compression avec %s n'a pas été intégrée lors de la compilation" +msgid "control file appears to be corrupt" +msgstr "le fichier de contrôle semble corrompu" -#: pg_receivewal.c:578 +#: pg_createsubscriber.c:615 pg_createsubscriber.c:656 #, c-format -msgid "starting log streaming at %X/%X (timeline %u)" -msgstr "commence le flux des journaux à %X/%X (timeline %u)" +msgid "system identifier is %llu on subscriber" +msgstr "l'identifieur système est %llu sur l'abonné" -#: pg_receivewal.c:693 pg_recvlogical.c:783 +#: pg_createsubscriber.c:637 #, c-format -msgid "could not parse end position \"%s\"" -msgstr "n'a pas pu analyser la position finale « %s »" +msgid "modifying system identifier of subscriber" +msgstr "modification de l'identifieur système sur l'abonné" -#: pg_receivewal.c:766 +#: pg_createsubscriber.c:659 #, c-format -msgid "cannot use --create-slot together with --drop-slot" -msgstr "ne peut pas utiliser --create-slot avec --drop-slot" +msgid "running pg_resetwal on the subscriber" +msgstr "exécution de pg_resetwal sur l'abonné" -#: pg_receivewal.c:782 +#: pg_createsubscriber.c:671 #, c-format -msgid "cannot use --synchronous together with --no-sync" -msgstr "ne peut pas utiliser --synchronous avec --no-sync" +msgid "subscriber successfully changed the system identifier" +msgstr "l'abonné a modifié avec succès l'identifieur système" -#: pg_receivewal.c:792 +#: pg_createsubscriber.c:673 #, c-format -msgid "no target directory specified" -msgstr "aucun répertoire cible indiqué" +msgid "could not change system identifier of subscriber: %s" +msgstr "n'a pas pu modifier l'identifiant du système abonné : %s" -#: pg_receivewal.c:816 +#: pg_createsubscriber.c:697 #, c-format -msgid "compression with %s is not yet supported" -msgstr "la méthode de compression %s n'est pas encore supportée" +msgid "could not obtain database OID: %s" +msgstr "n'a pas pu obtenir l'OID de la base : %s" -#: pg_receivewal.c:859 +#: pg_createsubscriber.c:704 #, c-format -msgid "replication connection using slot \"%s\" is unexpectedly database specific" -msgstr "la connexion de réplication utilisant le slot « %s » est spécifique à une base, ce qui est inattendu" +msgid "could not obtain database OID: got %d rows, expected %d row" +msgstr "n'a pas pu obtenir l'OID de la base de données : %d lignes attendues, %d ligne reçue" -#: pg_receivewal.c:878 pg_recvlogical.c:954 +#: pg_createsubscriber.c:776 #, c-format -msgid "dropping replication slot \"%s\"" -msgstr "suppression du slot de réplication « %s »" +msgid "create replication slot \"%s\" on publisher" +msgstr "création du slot de réplication « %s » sur le publieur" -#: pg_receivewal.c:889 pg_recvlogical.c:964 +#: pg_createsubscriber.c:796 #, c-format -msgid "creating replication slot \"%s\"" +msgid "could not write an additional WAL record: %s" +msgstr "n'a pas pu écrire un enregistrement WAL supplémentaire : %s" + +#: pg_createsubscriber.c:822 +#, c-format +msgid "could not obtain recovery progress: %s" +msgstr "n'a pas pu obtenir la progression de la restauration : %s" + +#: pg_createsubscriber.c:854 +#, c-format +msgid "checking settings on publisher" +msgstr "vérification de la configuration du publieur" + +#: pg_createsubscriber.c:864 +#, c-format +msgid "primary server cannot be in recovery" +msgstr "le serveur primaire ne peut pas être en restauration" + +#: pg_createsubscriber.c:888 +#, c-format +msgid "could not obtain publisher settings: %s" +msgstr "n'a pas pu obtenir la configuration du publieur : %s" + +#: pg_createsubscriber.c:914 +#, c-format +msgid "publisher requires wal_level >= \"logical\"" +msgstr "le publieur requiert wal_level >= « logical »" + +#: pg_createsubscriber.c:920 +#, c-format +msgid "publisher requires %d replication slots, but only %d remain" +msgstr "le publieur requiert %d slots de réplication, mais seuls %d restent" + +#: pg_createsubscriber.c:922 pg_createsubscriber.c:931 +#: pg_createsubscriber.c:1028 pg_createsubscriber.c:1037 +#: pg_createsubscriber.c:1046 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "Augmentez le paramètre de configuration « %s » à au moins %d." + +#: pg_createsubscriber.c:929 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "le publieur requiert %d processus wal sender, mais seuls %d restent" + +#: pg_createsubscriber.c:938 +#, c-format +msgid "two_phase option will not be enabled for replication slots" +msgstr "l'option two_phase ne sera pas activée pour les slots de réplication" + +#: pg_createsubscriber.c:939 +#, c-format +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "Les souscriptions seront créées avec l'option two_phase désactivé. Les transactions préparées seront répliquées au COMMIT PREPARED." + +#: pg_createsubscriber.c:971 +#, c-format +msgid "checking settings on subscriber" +msgstr "vérification de la configuration sur l'abonné" + +#: pg_createsubscriber.c:978 +#, c-format +msgid "target server must be a standby" +msgstr "le serveur cible doit être un secondaire" + +#: pg_createsubscriber.c:1002 +#, c-format +msgid "could not obtain subscriber settings: %s" +msgstr "n'a pas pu obtenir la configuration de l'abonné : %s" + +#: pg_createsubscriber.c:1026 +#, c-format +msgid "subscriber requires %d replication slots, but only %d remain" +msgstr "l'abonné requiert %d slots de réplication, mais seuls %d restent" + +#: pg_createsubscriber.c:1035 +#, c-format +msgid "subscriber requires %d logical replication workers, but only %d remain" +msgstr "l'abonné requiert %d processus worker de réplication logique, mais seuls %d restent" + +#: pg_createsubscriber.c:1044 +#, c-format +msgid "subscriber requires %d worker processes, but only %d remain" +msgstr "l'abonné requiert %d processus worker, mais seuls %d restent" + +#: pg_createsubscriber.c:1079 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "suppression de la souscription « %s » dans la base de données « %s »" + +#: pg_createsubscriber.c:1088 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "n'a pas pu supprimer la souscription « %s » : %s" + +#: pg_createsubscriber.c:1123 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "n'a pas pu obtenir les souscriptions pré-existantes : %s" + +#: pg_createsubscriber.c:1258 +#, c-format +msgid "could not drop replication slot \"%s\" on primary" +msgstr "n'a pas pu supprimer le slot de réplication « %s » sur le primaire" + +#: pg_createsubscriber.c:1292 +#, c-format +msgid "could not obtain failover replication slot information: %s" +msgstr "n'a pas pu obtenir l'information de slot de réplication failover : %s" + +#: pg_createsubscriber.c:1294 pg_createsubscriber.c:1303 +#, c-format +msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." +msgstr "Supprimez rapidement les slots de réplication failover sur l'abonnée pour éviter la rétention des fichiers WAL." + +#: pg_createsubscriber.c:1302 +#, c-format +msgid "could not drop failover replication slot" +msgstr "n'a pas pu supprimer le slot de réplication failover" + +#: pg_createsubscriber.c:1324 +#, c-format +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "création du slot de réplication « %s » dans la base « %s »" + +#: pg_createsubscriber.c:1342 +#, c-format +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "n'a pas pu créer le slot de réplication « %s » dans la base « %s » : %s" + +#: pg_createsubscriber.c:1372 +#, c-format +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "suppression du slot de réplication « %s » dans la base « %s »" + +#: pg_createsubscriber.c:1388 +#, c-format +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "n'a pas pu supprimer le slot de réplication « %s » dans la base « %s » : %s" + +#: pg_createsubscriber.c:1409 +#, c-format +msgid "pg_ctl failed with exit code %d" +msgstr "échec de pg_ctl avec un code de retour %d" + +#: pg_createsubscriber.c:1414 +#, c-format +msgid "pg_ctl was terminated by exception 0x%X" +msgstr "pg_ctl a été terminé par l'exception 0x%X" + +#: pg_createsubscriber.c:1416 +#, c-format +msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "" +"Voir le fichier d'en-tête C « ntstatus.h » pour une description de la valeur\n" +"hexadécimale." + +#: pg_createsubscriber.c:1418 +#, c-format +msgid "pg_ctl was terminated by signal %d: %s" +msgstr "pg_ctl a été terminé par le signal %d : %s" + +#: pg_createsubscriber.c:1424 +#, c-format +msgid "pg_ctl exited with unrecognized status %d" +msgstr "pg_ctl a quitté avec un statut %d non reconnu" + +#: pg_createsubscriber.c:1427 +#, c-format +msgid "The failed command was: %s" +msgstr "La commande échouée était : %s" + +#: pg_createsubscriber.c:1473 +#, c-format +msgid "server was started" +msgstr "le serveur a été démarré" + +#: pg_createsubscriber.c:1488 +#, c-format +msgid "server was stopped" +msgstr "le serveur a été arrêté" + +#: pg_createsubscriber.c:1507 +#, c-format +msgid "waiting for the target server to reach the consistent state" +msgstr "en attente de l'atteinte de l'état de cohérence sur le serveur cible" + +#: pg_createsubscriber.c:1530 +#, c-format +msgid "recovery timed out" +msgstr "délai de restauration atteint" + +#: pg_createsubscriber.c:1543 +#, c-format +msgid "server did not end recovery" +msgstr "le serveur n'a pas terminé la restauration" + +#: pg_createsubscriber.c:1545 +#, c-format +msgid "target server reached the consistent state" +msgstr "le serveur cible a atteint l'état de cohérence" + +#: pg_createsubscriber.c:1546 +#, c-format +msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." +msgstr "Si pg_createsubscriber échoue après cela, vous devez recréer le réplicat physique avant de continuer." + +#: pg_createsubscriber.c:1573 +#, c-format +msgid "could not obtain publication information: %s" +msgstr "n'a pas pu obtenir une information sur la publication : %s" + +#: pg_createsubscriber.c:1587 +#, c-format +msgid "publication \"%s\" already exists" +msgstr "la publication « %s » existe déjà" + +#: pg_createsubscriber.c:1588 +#, c-format +msgid "Consider renaming this publication before continuing." +msgstr "Pensez à renommer cette publication avant de continuer." + +#: pg_createsubscriber.c:1595 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "création de la publication « %s » dans la base de données « %s »" + +#: pg_createsubscriber.c:1608 +#, c-format +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "n'a pas pu créer la publication « %s » dans la base de données « %s » : %s" + +#: pg_createsubscriber.c:1637 +#, c-format +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "suppression de la publication « %s » dans la base de données « %s »" + +#: pg_createsubscriber.c:1651 +#, c-format +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "n'a pas pu supprimer la publication « %s » dans la base de données « %s » : %s" + +#: pg_createsubscriber.c:1697 +#, c-format +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "création de la souscription « %s » dans la base de données « %s »" + +#: pg_createsubscriber.c:1718 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "n'a pas pu créer la souscription « %s » dans la base « %s » : %s" + +#: pg_createsubscriber.c:1763 +#, c-format +msgid "could not obtain subscription OID: %s" +msgstr "n'a pas pu obtenir l'OID de la souscription : %s" + +#: pg_createsubscriber.c:1770 +#, c-format +msgid "could not obtain subscription OID: got %d rows, expected %d row" +msgstr "n'a pas pu obtenir l'OID de la souscription : attendait %d lignes, a reçu %d ligne" + +#: pg_createsubscriber.c:1794 +#, c-format +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" +msgstr "configuration de la progression de la réplication (nom du noeud « %s » , LSN %s) dans la base de données « %s »" + +#: pg_createsubscriber.c:1809 +#, c-format +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "n'a pas pu configurer la progression de la réplication pour la souscription « %s » : %s" + +#: pg_createsubscriber.c:1840 +#, c-format +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "activation de la souscription « %s » dans la base de données « %s »" + +#: pg_createsubscriber.c:1852 +#, c-format +msgid "could not enable subscription \"%s\": %s" +msgstr "n'a pas pu activer la souscription « %s » : %s" + +#: pg_createsubscriber.c:1944 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "ne peut pas être exécuté par « root »" + +#: pg_createsubscriber.c:1945 +#, c-format +msgid "You must run %s as the PostgreSQL superuser." +msgstr "Vous devez exécuter %s en tant que super-utilisateur PostgreSQL." + +#: pg_createsubscriber.c:1966 +#, c-format +msgid "database \"%s\" specified more than once" +msgstr "la base de données « %s » est spécifiée plus d'une fois" + +#: pg_createsubscriber.c:2007 +#, c-format +msgid "publication \"%s\" specified more than once" +msgstr "la publication « %s » est spécifiée plus d'une fois" + +#: pg_createsubscriber.c:2019 +#, c-format +msgid "replication slot \"%s\" specified more than once" +msgstr "le slot de réplication « %s » est spécifié plus d'une fois" + +#: pg_createsubscriber.c:2031 +#, c-format +msgid "subscription \"%s\" specified more than once" +msgstr "la souscription « %s » est spécifiée plus d'une fois" + +#: pg_createsubscriber.c:2054 +#, c-format +msgid "no subscriber data directory specified" +msgstr "aucune chaîne de connexion de l'abonné indiquée" + +#: pg_createsubscriber.c:2065 +#, c-format +msgid "could not determine current directory" +msgstr "n'a pas pu déterminer le répertoire courant" + +#: pg_createsubscriber.c:2082 +#, c-format +msgid "no publisher connection string specified" +msgstr "aucune chaîne de connexion du publieur indiquée" + +#: pg_createsubscriber.c:2086 +#, c-format +msgid "validating publisher connection string" +msgstr "validation de la chaîne de connexion du publieur" + +#: pg_createsubscriber.c:2092 +#, c-format +msgid "validating subscriber connection string" +msgstr "validation de la chaîne de connexion de l'abonné" + +#: pg_createsubscriber.c:2097 +#, c-format +msgid "no database was specified" +msgstr "aucune base de données n'a été indiquée" + +#: pg_createsubscriber.c:2109 +#, c-format +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "le nom de la base de données « %s » a été extrait de la chaîne de connexion du publieur" + +#: pg_createsubscriber.c:2114 +#, c-format +msgid "no database name specified" +msgstr "aucun nom de base de données indiqué" + +#: pg_createsubscriber.c:2124 +#, c-format +msgid "wrong number of publication names specified" +msgstr "mauvais nombre de noms de publication indiqués" + +#: pg_createsubscriber.c:2125 +#, c-format +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." +msgstr "Le nombre de noms de publication indiqués (%d) doit correspondre au nombre de noms de bases de données indiqués (%d)" + +#: pg_createsubscriber.c:2131 +#, c-format +msgid "wrong number of subscription names specified" +msgstr "mauvais nombre de noms de souscription indiqués" + +#: pg_createsubscriber.c:2132 +#, c-format +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." +msgstr "Le nombre de noms de souscriptions indiqués (%d) doit correspondre au nombre de noms de bases de données indiqués (%d)" + +#: pg_createsubscriber.c:2138 +#, c-format +msgid "wrong number of replication slot names specified" +msgstr "mauvais nombre de noms de slots de réplication indiqués" + +#: pg_createsubscriber.c:2139 +#, c-format +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." +msgstr "Le nombre de noms de slots de réplication indiqués (%d) doit correspondre au nombre de noms de bases de données indiqués (%d)" + +#: pg_createsubscriber.c:2168 +#, c-format +msgid "subscriber data directory is not a copy of the source database cluster" +msgstr "le répertoire de données de l'abonné n'est pas une copie de l'instance source" + +#: pg_createsubscriber.c:2181 +#, c-format +msgid "standby server is running" +msgstr "le serveur secondaire est en cours d'exécution" + +#: pg_createsubscriber.c:2182 +#, c-format +msgid "Stop the standby server and try again." +msgstr "Arrêtez le secondaire et tentez de nouveau." + +#: pg_createsubscriber.c:2191 +#, c-format +msgid "starting the standby server with command-line options" +msgstr "lancement du serveur secondaire avec les options en ligne de commande" + +#: pg_createsubscriber.c:2207 pg_createsubscriber.c:2242 +#, c-format +msgid "stopping the subscriber" +msgstr "arrêt de l'abonné" + +#: pg_createsubscriber.c:2221 +#, c-format +msgid "starting the subscriber" +msgstr "lancement de l'abonné" + +#: pg_createsubscriber.c:2250 +#, c-format +msgid "Done!" +msgstr "Terminé !" + +#: pg_receivewal.c:77 +#, c-format +msgid "" +"%s receives PostgreSQL streaming write-ahead logs.\n" +"\n" +msgstr "" +"%s reçoit le flux des journaux de transactions PostgreSQL.\n" +"\n" + +#: pg_receivewal.c:82 +#, c-format +msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" +msgstr "" +" -D, --directory=RÉPERTOIRE reçoit les journaux de transactions dans ce\n" +" répertoire\n" + +#: pg_receivewal.c:83 pg_recvlogical.c:93 +#, c-format +msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" +msgstr " -E, --endpos=LSN quitte après avoir reçu le LSN spécifié\n" + +#: pg_receivewal.c:84 pg_recvlogical.c:97 +#, c-format +msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgstr "" +" --if-not-exists ne pas renvoyer une erreur si le slot existe\n" +" déjà lors de sa création\n" + +#: pg_receivewal.c:85 pg_recvlogical.c:99 +#, c-format +msgid " -n, --no-loop do not loop on connection lost\n" +msgstr " -n, --no-loop ne boucle pas en cas de perte de la connexion\n" + +#: pg_receivewal.c:86 +#, c-format +msgid " --no-sync do not wait for changes to be written safely to disk\n" +msgstr "" +" --no-sync n'attend pas que les modifications soient\n" +" proprement écrites sur disque\n" + +#: pg_receivewal.c:87 pg_recvlogical.c:104 +#, c-format +msgid "" +" -s, --status-interval=SECS\n" +" time between status packets sent to server (default: %d)\n" +msgstr "" +" -s, --status-interval=SECS durée entre l'envoi de paquets de statut au\n" +" serveur (par défaut %d)\n" + +#: pg_receivewal.c:90 +#, c-format +msgid " --synchronous flush write-ahead log immediately after writing\n" +msgstr "" +" --synchronous vide le journal de transactions immédiatement\n" +" après son écriture\n" + +#: pg_receivewal.c:93 +#, c-format +msgid "" +" -Z, --compress=METHOD[:DETAIL]\n" +" compress as specified\n" +msgstr "" +" -Z, --compress=METHOD[:DETAIL]\n" +" compresse comme indiqué\n" + +#: pg_receivewal.c:103 +#, c-format +msgid "" +"\n" +"Optional actions:\n" +msgstr "" +"\n" +"Actions optionnelles :\n" + +#: pg_receivewal.c:104 pg_recvlogical.c:89 +#, c-format +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" +msgstr "" +" --create-slot crée un nouveau slot de réplication\n" +" (pour le nom du slot, voir --slot)\n" + +#: pg_receivewal.c:105 pg_recvlogical.c:90 +#, c-format +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" +msgstr "" +" --drop-slot supprime un nouveau slot de réplication\n" +" (pour le nom du slot, voir --slot)\n" + +#: pg_receivewal.c:191 +#, c-format +msgid "finished segment at %X/%X (timeline %u)" +msgstr "segment terminé à %X/%X (timeline %u)" + +#: pg_receivewal.c:198 +#, c-format +msgid "stopped log streaming at %X/%X (timeline %u)" +msgstr "arrêt du flux streaming à %X/%X (timeline %u)" + +#: pg_receivewal.c:214 +#, c-format +msgid "switched to timeline %u at %X/%X" +msgstr "a basculé sur la timeline %u à %X/%X" + +#: pg_receivewal.c:224 pg_recvlogical.c:1053 +#, c-format +msgid "received interrupt signal, exiting" +msgstr "a reçu un signal d'interruption, quitte" + +#: pg_receivewal.c:256 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "n'a pas pu fermer le répertoire « %s » : %m" + +#: pg_receivewal.c:323 +#, c-format +msgid "segment file \"%s\" has incorrect size %lld, skipping" +msgstr "le segment « %s » a une taille incorrecte (%lld), ignoré" + +#: pg_receivewal.c:340 +#, c-format +msgid "could not open compressed file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier compressé « %s » : %m" + +#: pg_receivewal.c:343 +#, c-format +msgid "could not seek in compressed file \"%s\": %m" +msgstr "n'a pas pu chercher dans le fichier compressé « %s » : %m" + +#: pg_receivewal.c:349 +#, c-format +msgid "could not read compressed file \"%s\": %m" +msgstr "n'a pas pu lire le fichier compressé « %s » : %m" + +#: pg_receivewal.c:352 +#, c-format +msgid "could not read compressed file \"%s\": read %d of %zu" +msgstr "n'a pas pu lire le fichier compressé « %s » : a lu %d sur %zu" + +#: pg_receivewal.c:362 +#, c-format +msgid "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" +msgstr "le segment compressé « %s » a une taille %d non compressé incorrecte, ignoré" + +#: pg_receivewal.c:390 +#, c-format +msgid "could not create LZ4 decompression context: %s" +msgstr "n'a pas pu créer le contexte de décompression LZ4 : %s" + +#: pg_receivewal.c:420 +#, c-format +msgid "could not decompress file \"%s\": %s" +msgstr "n'a pas pu décompresser le fichier « %s » : %s" + +#: pg_receivewal.c:443 +#, c-format +msgid "could not free LZ4 decompression context: %s" +msgstr "n'a pas pu libérer le contexte de décompression LZ4 : %s" + +#: pg_receivewal.c:448 +#, c-format +msgid "compressed segment file \"%s\" has incorrect uncompressed size %zu, skipping" +msgstr "le fichier segment compressé « %s » a une taille %zu décompressée incorrecte, ignoré" + +#: pg_receivewal.c:453 +#, c-format +msgid "cannot check file \"%s\": compression with %s not supported by this build" +msgstr "ne peut pas vérifier le fichier « %s » : la compression avec %s n'a pas été intégrée lors de la compilation" + +#: pg_receivewal.c:578 +#, c-format +msgid "starting log streaming at %X/%X (timeline %u)" +msgstr "commence le flux des journaux à %X/%X (timeline %u)" + +#: pg_receivewal.c:693 pg_recvlogical.c:801 +#, c-format +msgid "could not parse end position \"%s\"" +msgstr "n'a pas pu analyser la position finale « %s »" + +#: pg_receivewal.c:766 +#, c-format +msgid "cannot use --create-slot together with --drop-slot" +msgstr "ne peut pas utiliser --create-slot avec --drop-slot" + +#: pg_receivewal.c:782 +#, c-format +msgid "cannot use --synchronous together with --no-sync" +msgstr "ne peut pas utiliser --synchronous avec --no-sync" + +#: pg_receivewal.c:792 +#, c-format +msgid "no target directory specified" +msgstr "aucun répertoire cible indiqué" + +#: pg_receivewal.c:816 +#, c-format +msgid "compression with %s is not yet supported" +msgstr "la méthode de compression %s n'est pas encore supportée" + +#: pg_receivewal.c:859 +#, c-format +msgid "replication connection using slot \"%s\" is unexpectedly database specific" +msgstr "la connexion de réplication utilisant le slot « %s » est spécifique à une base, ce qui est inattendu" + +#: pg_receivewal.c:878 pg_recvlogical.c:972 +#, c-format +msgid "dropping replication slot \"%s\"" +msgstr "suppression du slot de réplication « %s »" + +#: pg_receivewal.c:889 pg_recvlogical.c:982 +#, c-format +msgid "creating replication slot \"%s\"" msgstr "création du slot de réplication « %s »" -#: pg_receivewal.c:918 pg_recvlogical.c:988 +#: pg_receivewal.c:918 pg_recvlogical.c:1006 #, c-format msgid "disconnected" msgstr "déconnecté" #. translator: check source for value for %d -#: pg_receivewal.c:922 pg_recvlogical.c:992 +#: pg_receivewal.c:922 pg_recvlogical.c:1010 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "déconnecté, attente de %d secondes avant une nouvelle tentative" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:84 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1386,7 +2184,7 @@ msgstr "" "%s contrôle le flux des modifications logiques de PostgreSQL.\n" "\n" -#: pg_recvlogical.c:78 +#: pg_recvlogical.c:88 #, c-format msgid "" "\n" @@ -1395,21 +2193,21 @@ msgstr "" "\n" "Action à réaliser :\n" -#: pg_recvlogical.c:81 +#: pg_recvlogical.c:91 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr "" " --start lance le flux dans un slot de réplication (pour\n" " le nom du slot, voir --slot)\n" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:94 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr "" " -f, --file=FICHIER trace la réception dans ce fichier, - pour\n" " stdout\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:95 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1418,14 +2216,14 @@ msgstr "" " -F --fsync-interval=SECS durée entre les fsyncs vers le fichier de sortie\n" " (par défaut %d)\n" -#: pg_recvlogical.c:88 +#: pg_recvlogical.c:98 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr "" " -I, --startpos=LSN position de début du streaming dans le slot\n" " existant\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:100 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1435,145 +2233,145 @@ msgstr "" " -o, --option=NOM[=VALEUR] passe l'option NOM avec la valeur optionnelle\n" " VALEUR au plugin en sortie\n" -#: pg_recvlogical.c:93 +#: pg_recvlogical.c:103 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr "" " -P, --plugin=PLUGIN utilise le plugin PLUGIN en sortie (par défaut\n" " %s)\n" -#: pg_recvlogical.c:96 +#: pg_recvlogical.c:106 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOT nom du slot de réplication logique\n" -#: pg_recvlogical.c:97 +#: pg_recvlogical.c:107 #, c-format msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" msgstr " -t, --two-phase active le décodage des transactions préparées lors de la création d'un slot\n" -#: pg_recvlogical.c:102 +#: pg_recvlogical.c:112 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=BASE base de données de connexion\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:145 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "confirmation d'écriture jusqu'à %X/%X et de synchronisation jusqu'à %X/%X (slot %s)" -#: pg_recvlogical.c:159 receivelog.c:360 +#: pg_recvlogical.c:169 receivelog.c:360 #, c-format msgid "could not send feedback packet: %s" msgstr "n'a pas pu envoyer le paquet d'informations en retour : %s" -#: pg_recvlogical.c:227 +#: pg_recvlogical.c:239 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "commence le flux des journaux à %X/%X (slot %s)" -#: pg_recvlogical.c:269 +#: pg_recvlogical.c:281 #, c-format msgid "streaming initiated" msgstr "flux lancé" -#: pg_recvlogical.c:333 +#: pg_recvlogical.c:346 #, c-format msgid "could not open log file \"%s\": %m" msgstr "n'a pas pu ouvrir le journal applicatif « %s » : %m" -#: pg_recvlogical.c:362 receivelog.c:882 +#: pg_recvlogical.c:375 receivelog.c:882 #, c-format msgid "invalid socket: %s" msgstr "socket invalide : %s" -#: pg_recvlogical.c:415 receivelog.c:910 +#: pg_recvlogical.c:428 receivelog.c:910 #, c-format msgid "%s() failed: %m" msgstr "échec de %s() : %m" -#: pg_recvlogical.c:422 receivelog.c:959 +#: pg_recvlogical.c:435 receivelog.c:959 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "n'a pas pu recevoir des données du flux de WAL : %s" -#: pg_recvlogical.c:464 pg_recvlogical.c:515 receivelog.c:1003 +#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 #: receivelog.c:1066 #, c-format msgid "streaming header too small: %d" msgstr "en-tête de flux trop petit : %d" -#: pg_recvlogical.c:499 receivelog.c:843 +#: pg_recvlogical.c:512 receivelog.c:843 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "entête non reconnu du flux : « %c »" -#: pg_recvlogical.c:553 pg_recvlogical.c:565 +#: pg_recvlogical.c:566 pg_recvlogical.c:578 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "n'a pas pu écrire %d octets dans le journal de transactions « %s » : %m" -#: pg_recvlogical.c:619 receivelog.c:642 receivelog.c:679 +#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "fin inattendue du flux de réplication : %s" -#: pg_recvlogical.c:778 +#: pg_recvlogical.c:796 #, c-format msgid "could not parse start position \"%s\"" msgstr "n'a pas pu analyser la position de départ « %s »" -#: pg_recvlogical.c:856 +#: pg_recvlogical.c:874 #, c-format msgid "no slot specified" msgstr "aucun slot de réplication indiqué" -#: pg_recvlogical.c:863 +#: pg_recvlogical.c:881 #, c-format msgid "no target file specified" msgstr "aucun fichier cible indiqué" -#: pg_recvlogical.c:870 +#: pg_recvlogical.c:888 #, c-format msgid "no database specified" msgstr "aucune base de données indiquée" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:895 #, c-format msgid "at least one action needs to be specified" msgstr "au moins une action doit être indiquée" -#: pg_recvlogical.c:884 +#: pg_recvlogical.c:902 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "ne peut pas utiliser --create-slot ou --start avec --drop-slot" -#: pg_recvlogical.c:891 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "ne peut pas utiliser --create-slot ou --drop-slot avec --startpos" -#: pg_recvlogical.c:898 +#: pg_recvlogical.c:916 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos peut seulement être spécifié avec --start" -#: pg_recvlogical.c:905 +#: pg_recvlogical.c:923 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase peut seulement être spécifié avec --create-slot" -#: pg_recvlogical.c:938 +#: pg_recvlogical.c:956 #, c-format msgid "could not establish database-specific replication connection" msgstr "n'a pas pu établir une connexion de réplication spécifique à la base" -#: pg_recvlogical.c:1032 +#: pg_recvlogical.c:1056 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "position finale %X/%X atteinte par keepalive" -#: pg_recvlogical.c:1035 +#: pg_recvlogical.c:1061 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "position finale %X/%X atteinte à l'enregistrement WAL %X/%X" @@ -1690,7 +2488,7 @@ msgstr "ensemble de résultats inattendu après la fin de la timeline : a récup msgid "could not parse next timeline's starting point \"%s\"" msgstr "n'a pas pu analyser la position de départ de la prochaine timeline « %s »" -#: receivelog.c:775 receivelog.c:1022 walmethods.c:1201 +#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %s" @@ -1715,495 +2513,121 @@ msgstr "n'a pas pu écrire %d octets dans le journal de transactions « %s » : msgid "could not send copy-end packet: %s" msgstr "n'a pas pu envoyer le paquet de fin de copie : %s" -#: streamutil.c:158 +#: streamutil.c:162 msgid "Password: " msgstr "Mot de passe : " -#: streamutil.c:181 +#: streamutil.c:189 #, c-format msgid "could not connect to server" msgstr "n'a pas pu se connecter au serveur" -#: streamutil.c:222 +#: streamutil.c:230 #, c-format -msgid "could not clear search_path: %s" -msgstr "n'a pas pu effacer search_path : %s" +msgid "could not clear \"search_path\": %s" +msgstr "n'a pas pu effacer « search_path » : %s" -#: streamutil.c:238 +#: streamutil.c:246 #, c-format -msgid "could not determine server setting for integer_datetimes" -msgstr "n'a pas pu déterminer la configuration serveur de integer_datetimes" +msgid "could not determine server setting for \"integer_datetimes\"" +msgstr "n'a pas pu déterminer la configuration serveur de « integer_datetimes »" -#: streamutil.c:245 +#: streamutil.c:253 #, c-format -msgid "integer_datetimes compile flag does not match server" -msgstr "l'option de compilation integer_datetimes ne correspond pas au serveur" +msgid "\"integer_datetimes\" compile flag does not match server" +msgstr "l'option de compilation « integer_datetimes » ne correspond pas au serveur" -#: streamutil.c:296 +#: streamutil.c:372 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "n'a pas pu récupéré la taille d'un segment WAL : a obtenu %d lignes et %d champs, attendait %d lignes et %d champs (ou plus)" -#: streamutil.c:306 +#: streamutil.c:382 #, c-format msgid "WAL segment size could not be parsed" msgstr "la taille du segment WAL n'a pas pu être analysée" -#: streamutil.c:324 +#: streamutil.c:400 +#, c-format +msgid "remote server reported invalid WAL segment size (%d byte)" +msgid_plural "remote server reported invalid WAL segment size (%d bytes)" +msgstr[0] "le serveur distant a rapporté une taille invalide du segment WAL (%d octet)" +msgstr[1] "le serveur distant a rapporté une taille invalide du segment WAL (%d octets)" + +#: streamutil.c:404 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" -msgstr[0] "la taille d'un WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go mais le serveur distant a rapporté une valeur de %d octet" -msgstr[1] "la taille d'un WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go mais le serveur distant a rapporté une valeur de %d octets" +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go." -#: streamutil.c:369 +#: streamutil.c:446 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "n'a pas pu récupérer les options d'accès du groupe : a obtenu %d lignes et %d champs, attendait %d lignes et %d champs (ou plus)" -#: streamutil.c:378 +#: streamutil.c:455 #, c-format msgid "group access flag could not be parsed: %s" msgstr "l'option d'accès du groupe n'a pas pu être analysé : %s" -#: streamutil.c:421 streamutil.c:458 +#: streamutil.c:498 streamutil.c:535 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "n'a pas pu identifier le système : a récupéré %d lignes et %d champs, attendait %d lignes et %d champs (ou plus)." -#: streamutil.c:510 +#: streamutil.c:587 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "n'a pas pu lire le slot de réplication « %s » : a récupéré %d lignes et %d champs, attendait %d lignes et %d champs" -#: streamutil.c:522 +#: streamutil.c:599 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "le slot de réplication « %s » n'existe pas" -#: streamutil.c:533 +#: streamutil.c:610 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "attendait un slot de réplication physique, a obtenu le type « %s » à la place" -#: streamutil.c:547 +#: streamutil.c:624 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "n'a pas pu analyser le champ restart_lsn « %s » pour le slot de réplication « %s »" -#: streamutil.c:664 +#: streamutil.c:741 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "n'a pas pu créer le slot de réplication « %s » : a récupéré %d lignes et %d champs, attendait %d lignes et %d champs" -#: streamutil.c:708 +#: streamutil.c:785 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "n'a pas pu supprimer le slot de réplication « %s » : a récupéré %d lignes et %d champs, attendait %d lignes et %d champs" -#: walmethods.c:721 walmethods.c:1264 +#: walmethods.c:726 walmethods.c:1269 msgid "could not compress data" msgstr "n'a pas pu compresser les données" -#: walmethods.c:750 +#: walmethods.c:755 msgid "could not reset compression stream" msgstr "n'a pas pu réinitialiser le flux de compression" -#: walmethods.c:888 +#: walmethods.c:892 msgid "implementation error: tar files can't have more than one open file" msgstr "erreur d'implémentation : les fichiers tar ne peuvent pas avoir plus d'un fichier ouvert" -#: walmethods.c:903 +#: walmethods.c:907 msgid "could not create tar header" msgstr "n'a pas pu créer l'en-tête du fichier tar" -#: walmethods.c:920 walmethods.c:961 walmethods.c:1166 walmethods.c:1179 +#: walmethods.c:924 walmethods.c:965 walmethods.c:1171 walmethods.c:1184 msgid "could not change compression parameters" msgstr "n'a pas pu modifier les paramètres de compression" -#: walmethods.c:1052 +#: walmethods.c:1056 msgid "unlink not supported with compression" msgstr "suppression non supportée avec la compression" -#: walmethods.c:1288 +#: walmethods.c:1293 msgid "could not close compression stream" msgstr "n'a pas pu fermer le flux de compression" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" - -#, c-format -#~ msgid "" -#~ " --compression-method=METHOD\n" -#~ " method to compress logs\n" -#~ msgstr "" -#~ " --compression-method=METHODE\n" -#~ " méthode pour compresser les journaux\n" - -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" - -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" - -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide puis quitte\n" - -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version affiche la version puis quitte\n" - -#, c-format -#~ msgid " -Z, --compress=0-9 compress tar output with given compression level\n" -#~ msgstr "" -#~ " -Z, --compress=0-9 compresse la sortie tar avec le niveau de\n" -#~ " compression indiqué\n" - -#, c-format -#~ msgid " -Z, --compress=1-9 compress logs with given compression level\n" -#~ msgstr "" -#~ " -Z, --compress=0-9 compresse les journaux avec le niveau de\n" -#~ " compression indiqué\n" - -#~ msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" -#~ msgstr "" -#~ " -x, --xlog inclut les journaux de transactions nécessaires\n" -#~ " dans la sauvegarde (mode fetch)\n" - -#~ msgid "%s: WAL directory \"%s\" not removed at user's request\n" -#~ msgstr "%s : répertoire des journaux de transactions « %s » non supprimé à la demande de l'utilisateur\n" - -#~ msgid "%s: WAL directory location must be an absolute path\n" -#~ msgstr "" -#~ "%s : l'emplacement du répertoire des journaux de transactions doit être\n" -#~ "indiqué avec un chemin absolu\n" - -#~ msgid "%s: WAL streaming can only be used in plain mode\n" -#~ msgstr "%s : le flux de journaux de transactions peut seulement être utilisé en mode plain\n" - -#~ msgid "%s: cannot specify both --xlog and --xlog-method\n" -#~ msgstr "%s : ne peut pas spécifier à la fois --xlog et --xlog-method\n" - -#~ msgid "%s: child process did not exit normally\n" -#~ msgstr "%s : le processus fils n'a pas quitté normalement\n" - -#~ msgid "%s: child process exited with error %d\n" -#~ msgstr "%s : le processus fils a quitté avec le code erreur %d\n" - -#~ msgid "%s: could not access directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n" - -#~ msgid "%s: could not clear search_path: %s" -#~ msgstr "%s : n'a pas pu effacer search_path : %s" - -#~ msgid "%s: could not close directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu fermer le répertoire « %s » : %s\n" - -#~ msgid "%s: could not close file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu fermer le fichier « %s » : %s\n" - -#~ msgid "%s: could not close file %s: %s\n" -#~ msgstr "%s : n'a pas pu fermer le fichier %s : %s\n" - -#~ msgid "%s: could not connect to server\n" -#~ msgstr "%s : n'a pas pu se connecter au serveur\n" - -#~ msgid "%s: could not connect to server: %s" -#~ msgstr "%s : n'a pas pu se connecter au serveur : %s" - -#~ msgid "%s: could not create archive status file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le fichier de statut d'archivage « %s » : %s\n" - -#~ msgid "%s: could not create directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le répertoire « %s » : %s\n" - -#~ msgid "%s: could not create file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le fichier « %s » : %s\n" - -#~ msgid "%s: could not create symbolic link \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le lien symbolique « %s » : %s\n" - -#~ msgid "%s: could not fsync file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu synchroniser sur disque le fichier « %s » : %s\n" - -#~ msgid "%s: could not fsync log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu synchroniser sur disque le fichier « %s » : %s\n" - -#~ msgid "%s: could not get current position in file %s: %s\n" -#~ msgstr "%s : n'a pas pu obtenir la position courant dans le fichier %s : %s\n" - -#~ msgid "%s: could not identify system: %s" -#~ msgstr "%s : n'a pas pu identifier le système : %s" - -#~ msgid "%s: could not identify system: %s\n" -#~ msgstr "%s : n'a pas pu identifier le système : %s\n" - -#~ msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" -#~ msgstr "" -#~ "%s : n'a pas pu identifier le système, a récupéré %d lignes et %d champs,\n" -#~ "attendait %d lignes et %d champs (ou plus)\n" - -#~ msgid "%s: could not open WAL segment %s: %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le segment WAL %s : %s\n" - -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le répertoire « %s » : %s\n" - -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n" - -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %s\n" - -#~ msgid "%s: could not open timeline history file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le journal historique de la timeline « %s » : %s\n" - -#~ msgid "%s: could not open write-ahead log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le journal de transactions « %s » : %s\n" - -#~ msgid "%s: could not pad WAL segment %s: %s\n" -#~ msgstr "%s : n'a pas pu terminer le segment WAL %s : %s\n" - -#~ msgid "%s: could not pad transaction log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu remplir de zéros le journal de transactions « %s » : %s\n" - -#~ msgid "%s: could not parse file mode\n" -#~ msgstr "%s : n'a pas pu analyser le mode du fichier\n" - -#~ msgid "%s: could not parse file size\n" -#~ msgstr "%s : n'a pas pu analyser la taille du fichier\n" - -#~ msgid "%s: could not parse log start position from value \"%s\"\n" -#~ msgstr "%s : n'a pas pu analyser la position de départ des WAL à partir de la valeur « %s »\n" - -#~ msgid "%s: could not parse transaction log file name \"%s\"\n" -#~ msgstr "%s : n'a pas pu analyser le nom du journal de transactions « %s »\n" - -#~ msgid "%s: could not read copy data: %s\n" -#~ msgstr "%s : n'a pas pu lire les données du COPY : %s\n" - -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu lire le répertoire « %s » : %s\n" - -#~ msgid "%s: could not receive data from WAL stream: %s" -#~ msgstr "%s : n'a pas pu recevoir des données du flux de WAL : %s" - -#~ msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu renommer le fichier « %s » en « %s » : %s\n" - -#~ msgid "%s: could not rename file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu renommer le fichier « %s » : %s\n" - -#~ msgid "%s: could not seek back to beginning of WAL segment %s: %s\n" -#~ msgstr "%s : n'a pas pu se déplacer au début du segment WAL %s : %s\n" - -#~ msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu rechercher le début du journal de transaction « %s » : %s\n" - -#~ msgid "%s: could not send base backup command: %s" -#~ msgstr "%s : n'a pas pu envoyer la commande de sauvegarde de base : %s" - -#~ msgid "%s: could not set permissions on directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas configurer les droits sur le répertoire « %s » : %s\n" - -#~ msgid "%s: could not set permissions on file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu configurer les droits sur le fichier « %s » : %s\n" - -#~ msgid "%s: could not stat WAL segment %s: %s\n" -#~ msgstr "%s : n'a pas pu récupérer les informations sur le segment WAL %s : %s\n" - -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu récupérer les informations sur le fichier « %s » : %s\n" - -#~ msgid "%s: could not stat transaction log file \"%s\": %s\n" -#~ msgstr "" -#~ "%s : n'a pas pu récupérer les informations sur le journal de transactions\n" -#~ "« %s » : %s\n" - -#~ msgid "%s: could not write to file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu écrire dans le fichier « %s » : %s\n" - -#~ msgid "%s: data directory \"%s\" not removed at user's request\n" -#~ msgstr "%s : répertoire des données « %s » non supprimé à la demande de l'utilisateur\n" - -#~ msgid "%s: directory \"%s\" exists but is not empty\n" -#~ msgstr "%s : le répertoire « %s » existe mais n'est pas vide\n" - -#~ msgid "%s: failed to remove WAL directory\n" -#~ msgstr "%s : échec de la suppression du répertoire des journaux de transactions\n" - -#~ msgid "%s: failed to remove contents of WAL directory\n" -#~ msgstr "%s : échec de la suppression du contenu du répertoire des journaux de transactions\n" - -#~ msgid "%s: failed to remove contents of data directory\n" -#~ msgstr "%s : échec de la suppression du contenu du répertoire des données\n" - -#~ msgid "%s: failed to remove data directory\n" -#~ msgstr "%s : échec de la suppression du répertoire des données\n" - -#~ msgid "%s: invalid format of xlog location: %s\n" -#~ msgstr "%s : format invalide de l'emplacement du journal de transactions : %s\n" - -#~ msgid "%s: invalid port number \"%s\"\n" -#~ msgstr "%s : numéro de port invalide : « %s »\n" - -#~ msgid "%s: invalid socket: %s" -#~ msgstr "%s : socket invalide : %s" - -#~ msgid "%s: keepalive message has incorrect size %d\n" -#~ msgstr "%s : le message keepalive a une taille %d incorrecte\n" - -#~ msgid "%s: no start point returned from server\n" -#~ msgstr "%s : aucun point de redémarrage renvoyé du serveur\n" - -#~ msgid "%s: out of memory\n" -#~ msgstr "%s : mémoire épuisée\n" - -#~ msgid "%s: removing WAL directory \"%s\"\n" -#~ msgstr "%s : suppression du répertoire des journaux de transactions « %s »\n" - -#~ msgid "%s: removing contents of WAL directory \"%s\"\n" -#~ msgstr "%s : suppression du contenu du répertoire des journaux de transactions « %s »\n" - -#~ msgid "%s: removing contents of data directory \"%s\"\n" -#~ msgstr "%s : suppression du contenu du répertoire des données « %s »\n" - -#~ msgid "%s: removing data directory \"%s\"\n" -#~ msgstr "%s : suppression du répertoire des données « %s »\n" - -#~ msgid "%s: select() failed: %s\n" -#~ msgstr "%s : échec de select() : %s\n" - -#~ msgid "%s: socket not open" -#~ msgstr "%s : socket non ouvert" - -#~ msgid "%s: symlinks are not supported on this platform\n" -#~ msgstr "%s : les liens symboliques ne sont pas supportés sur cette plateforme\n" - -#~ msgid "%s: timeline does not match between base backup and streaming connection\n" -#~ msgstr "" -#~ "%s : la timeline ne correspond pas entre la sauvegarde des fichiers et la\n" -#~ "connexion de réplication\n" - -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" - -#~ msgid "--create-slot and --no-slot are incompatible options" -#~ msgstr "--create-slot et --no-slot sont des options incompatibles" - -#~ msgid "--no-manifest and --manifest-checksums are incompatible options" -#~ msgstr "--no-manifest et --manifest-checksums sont des options incompatibles" - -#~ msgid "--no-manifest and --manifest-force-encode are incompatible options" -#~ msgstr "--no-manifest et --manifest-force-encode sont des options incompatibles" - -#~ msgid "--progress and --no-estimate-size are incompatible options" -#~ msgstr "--progress et --no-estimate-size sont des options incompatibles" - -#, c-format -#~ msgid "This build does not support compression with %s." -#~ msgstr "Cette construction ne supporte pas la compression avec %s." - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Essayer « %s --help » pour plus d'informations.\n" - -#, c-format -#~ msgid "cannot use --compress with --compression-method=%s" -#~ msgstr "ne peut pas utiliser --compress avec --compression-method=%s" - -#, c-format -#~ msgid "could not check file \"%s\"" -#~ msgstr "n'a pas pu vérifier le fichier « %s »" - -#~ msgid "could not connect to server: %s" -#~ msgstr "n'a pas pu se connecter au serveur : %s" - -#, c-format -#~ msgid "could not determine seek position in file \"%s\": %s" -#~ msgstr "n'a pas pu déterminer la position de recherche dans le fichier d'archive « %s » : %s" - -#, c-format -#~ msgid "could not find replication slot \"%s\"" -#~ msgstr "n'a pas pu trouver le slot de réplication « %s »" - -#, c-format -#~ msgid "could not get write-ahead log end position from server: %s" -#~ msgstr "n'a pas pu obtenir la position finale des journaux de transactions à partir du serveur : %s" - -#~ msgid "deflate failed" -#~ msgstr "échec en décompression" - -#~ msgid "deflateEnd failed" -#~ msgstr "échec de deflateEnd" - -#~ msgid "deflateInit2 failed" -#~ msgstr "échec de deflateInit2" - -#~ msgid "deflateParams failed" -#~ msgstr "échec de deflateParams" - -#~ msgid "deflateReset failed" -#~ msgstr "échec de deflateReset" - -#, c-format -#~ msgid "fatal: " -#~ msgstr "fatal : " - -#, c-format -#~ msgid "invalid compression level \"%s\"" -#~ msgstr "niveau de compression « %s » invalide" - -#, c-format -#~ msgid "invalid fsync interval \"%s\"" -#~ msgstr "intervalle fsync « %s » invalide" - -#, c-format -#~ msgid "invalid port number \"%s\"" -#~ msgstr "numéro de port invalide : « %s »" - -#, c-format -#~ msgid "invalid status interval \"%s\"" -#~ msgstr "intervalle « %s » invalide du statut" - -#, c-format -#~ msgid "invalid tar block header size: %zu" -#~ msgstr "taille invalide de l'en-tête de bloc du fichier tar : %zu" - -#, c-format -#~ msgid "log streamer with pid %d exiting" -#~ msgstr "le processus d'envoi des journaux de PID %d quitte" - -#, c-format -#~ msgid "no value specified for --compress, switching to default" -#~ msgstr "aucune valeur indiquée pour --compression, utilise la valeur par défaut" - -#~ msgid "select() failed: %m" -#~ msgstr "échec de select() : %m" - -#, c-format -#~ msgid "symlinks are not supported on this platform" -#~ msgstr "les liens symboliques ne sont pas supportés sur cette plateforme" - -#, c-format -#~ msgid "this build does not support gzip compression" -#~ msgstr "cette construction ne supporte pas la compression gzip" - -#, c-format -#~ msgid "this build does not support lz4 compression" -#~ msgstr "cette construction ne supporte pas la compression lz4" - -#, c-format -#~ msgid "this build does not support zstd compression" -#~ msgstr "cette construction ne supporte pas la compression zstd" - -#, c-format -#~ msgid "unknown compression option \"%s\"" -#~ msgstr "option de compression « %s » inconnue" - -#, c-format -#~ msgid "unrecognized link indicator \"%c\"" -#~ msgstr "indicateur de lien « %c » non reconnu" diff --git a/src/bin/pg_basebackup/po/ja.po b/src/bin/pg_basebackup/po/ja.po index e1926adeaab62..d85ecc42ae0b2 100644 --- a/src/bin/pg_basebackup/po/ja.po +++ b/src/bin/pg_basebackup/po/ja.po @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL 17)\n" +"Project-Id-Version: pg_basebackup (PostgreSQL 18)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-21 09:57+0900\n" -"PO-Revision-Date: 2024-06-21 10:16+0900\n" +"POT-Creation-Date: 2025-04-07 09:45+0900\n" +"PO-Revision-Date: 2025-04-07 15:32+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -22,30 +22,31 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "警告: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "詳細: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "ヒント: " #: ../../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 +#: ../../common/compression.c:150 ../../fe_utils/astreamer_gzip.c:140 +#: ../../fe_utils/astreamer_gzip.c:273 ../../fe_utils/astreamer_lz4.c:102 +#: ../../fe_utils/astreamer_lz4.c:300 ../../fe_utils/astreamer_zstd.c:133 +#: ../../fe_utils/astreamer_zstd.c:288 #, c-format msgid "this build does not support compression with %s" msgstr "このビルドでは%sによる圧縮をサポートしていません" @@ -99,7 +100,7 @@ msgstr "圧縮アルゴリズム\"%s\"は長距離モードをサポートしま msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み込み用にオープンできませんでした: %m" -#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1874 #: pg_receivewal.c:402 #, c-format msgid "could not read file \"%s\": %m" @@ -111,7 +112,7 @@ msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" #: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 -#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#: ../../fe_utils/astreamer_file.c:141 pg_recvlogical.c:652 #, c-format msgid "could not close file \"%s\": %m" msgstr "ファイル\"%s\"をクローズできませんでした: %m" @@ -133,10 +134,10 @@ msgstr "" "されるものと一致しないようです。この場合以下の結果は不正確になります。また、\n" "PostgreSQLインストレーションはこのデータディレクトリと互換性がなくなります。" -#: ../../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 ../../fe_utils/recovery_gen.c:140 -#: pg_basebackup.c:1846 pg_receivewal.c:386 +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:69 +#: ../../common/file_utils.c:370 ../../common/file_utils.c:428 +#: ../../common/file_utils.c:502 ../../fe_utils/recovery_gen.c:141 +#: pg_basebackup.c:1847 pg_receivewal.c:386 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" @@ -146,8 +147,8 @@ msgstr "ファイル\"%s\"をオープンできませんでした: %m" msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 -#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:440 +#: ../../common/file_utils.c:510 pg_recvlogical.c:205 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" @@ -163,36 +164,36 @@ msgstr "メモリ不足です\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインタを複製できません (内部エラー)\n" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "ファイル\"%s\"に対してファイルシステムを同期できませんでした: %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 -#: pg_receivewal.c:319 pg_recvlogical.c:352 +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 +#: pg_receivewal.c:319 pg_recvlogical.c:353 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "このビルドでは同期方式\"%s\"をサポートしていません" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 #: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 +#: ../../common/file_utils.c:520 pg_basebackup.c:2345 walmethods.c:462 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" @@ -227,191 +228,200 @@ msgstr "制限付きトークンで再実行できませんでした: %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "サブプロセスの終了コードを取得できませんでした: エラーコード %lu" -#: ../../fe_utils/option_utils.c:69 -#, c-format -msgid "invalid value \"%s\" for option %s" -msgstr "オプション\"%2$s\"に対する不正な値\"%1$s\"" - -#: ../../fe_utils/option_utils.c:76 -#, c-format -msgid "%s must be in range %d..%d" -msgstr "%sは%d..%dの範囲でなければなりません" - -#: ../../fe_utils/option_utils.c:106 -#, c-format -msgid "unrecognized sync method: %s" -msgstr "認識できない同期方式: %s" - -#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 -#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 -#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:331 -#, c-format -msgid "out of memory" -msgstr "メモリ不足です" - -#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 -#, c-format -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 -#: pg_basebackup.c:1497 pg_basebackup.c:1706 +#: ../../fe_utils/astreamer_file.c:96 ../../fe_utils/astreamer_file.c:364 +#: ../../fe_utils/recovery_gen.c:153 pg_basebackup.c:1498 pg_basebackup.c:1707 #, c-format msgid "could not create file \"%s\": %m" msgstr "ファイル\"%s\"を作成できませんでした: %m" -#: ../../fe_utils/string_utils.c:434 +#: ../../fe_utils/astreamer_file.c:124 ../../fe_utils/astreamer_file.c:261 +#: ../../fe_utils/recovery_gen.c:144 pg_basebackup.c:1434 pg_basebackup.c:1728 #, c-format -msgid "shell command argument contains a newline or carriage return: \"%s\"\n" -msgstr "シェルコマンドの引数に改行(LF)または復帰(CR)が含まれています: \"%s\"\n" - -#: ../../fe_utils/string_utils.c:607 -#, c-format -msgid "database name contains a newline or carriage return: \"%s\"\n" -msgstr "データベース名に改行(LF)または復帰(CR)が含まれています: \"%s\"\n" +msgid "could not write to file \"%s\": %m" +msgstr "ファイル\"%s\"を書き込めませんでした: %m" -#: bbstreamer_file.c:275 +#: ../../fe_utils/astreamer_file.c:278 #, c-format msgid "unexpected state while extracting archive" msgstr "アーカイブの抽出中に想定外の状態" -#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 -#: pg_basebackup.c:757 +#: ../../fe_utils/astreamer_file.c:324 pg_basebackup.c:699 pg_basebackup.c:713 +#: pg_basebackup.c:758 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: bbstreamer_file.c:326 +#: ../../fe_utils/astreamer_file.c:329 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "ディレクトリ\"%s\"に権限を設定できませんでした: %m" -#: bbstreamer_file.c:345 +#: ../../fe_utils/astreamer_file.c:348 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "\"%s\"から\"%s\"へのシンボリックリンクを作成できませんでした: %m" -#: bbstreamer_file.c:365 +#: ../../fe_utils/astreamer_file.c:368 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "ファイル\"%s\"の権限を設定できませんでした: %m" -#: bbstreamer_gzip.c:95 +#: ../../fe_utils/astreamer_gzip.c:115 #, c-format msgid "could not create compressed file \"%s\": %m" msgstr "圧縮ファイル\"%s\"を作成できませんでした: %m" -#: bbstreamer_gzip.c:103 +#: ../../fe_utils/astreamer_gzip.c:127 #, c-format msgid "could not duplicate stdout: %m" msgstr "標準出力の複製に失敗しました: %m" -#: bbstreamer_gzip.c:107 +#: ../../fe_utils/astreamer_gzip.c:131 #, c-format msgid "could not open output file: %m" msgstr "出力ファイルをオープンできませんでした: %m" -#: bbstreamer_gzip.c:111 +#: ../../fe_utils/astreamer_gzip.c:135 #, c-format msgid "could not set compression level %d: %s" msgstr "圧縮レベルを%dに設定できませんでした: %s" -#: bbstreamer_gzip.c:143 +#: ../../fe_utils/astreamer_gzip.c:167 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "圧縮ファイル\"%s\"に書き込めませんでした: %s" -#: bbstreamer_gzip.c:167 +#: ../../fe_utils/astreamer_gzip.c:191 #, c-format msgid "could not close compressed file \"%s\": %m" msgstr "圧縮ファイル\"%s\"をクローズすることができませんでした: %m" -#: bbstreamer_gzip.c:245 walmethods.c:880 +#: ../../fe_utils/astreamer_gzip.c:269 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "圧縮ライブラリを初期化できませんでした" -#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 +#: ../../fe_utils/astreamer_gzip.c:320 ../../fe_utils/astreamer_lz4.c:356 +#: ../../fe_utils/astreamer_zstd.c:333 #, c-format msgid "could not decompress data: %s" msgstr "データを伸張できませんでした: %s" -#: bbstreamer_inject.c:189 -#, c-format -msgid "unexpected state while injecting recovery settings" -msgstr "リカバリ設定の出力中に想定外の状態" - -#: bbstreamer_lz4.c:95 +#: ../../fe_utils/astreamer_lz4.c:97 #, c-format msgid "could not create lz4 compression context: %s" msgstr "lz4圧縮コンテクストを生成できませんでした: %s" -#: bbstreamer_lz4.c:140 +#: ../../fe_utils/astreamer_lz4.c:142 #, c-format msgid "could not write lz4 header: %s" msgstr "lz4ヘッダを出力できませんでした: %s" -#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 +#: ../../fe_utils/astreamer_lz4.c:191 ../../fe_utils/astreamer_zstd.c:185 +#: ../../fe_utils/astreamer_zstd.c:227 #, c-format msgid "could not compress data: %s" msgstr "データを圧縮できませんでした: %s" -#: bbstreamer_lz4.c:241 +#: ../../fe_utils/astreamer_lz4.c:243 #, c-format msgid "could not end lz4 compression: %s" msgstr "lz4圧縮を終了できませんでした: %s" -#: bbstreamer_lz4.c:293 +#: ../../fe_utils/astreamer_lz4.c:295 #, c-format msgid "could not initialize compression library: %s" msgstr "圧縮ライブラリを初期化できませんでした: %s" -#: bbstreamer_tar.c:244 +#: ../../fe_utils/astreamer_tar.c:244 #, c-format msgid "tar file trailer exceeds 2 blocks" msgstr "tarファイル後続ブロックが2ブロックを超えています" -#: bbstreamer_tar.c:249 +#: ../../fe_utils/astreamer_tar.c:249 #, c-format msgid "unexpected state while parsing tar archive" msgstr "tarアーカイブのパース中に想定外の状態" -#: bbstreamer_tar.c:292 +#: ../../fe_utils/astreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "tarメンバーの名前が空です" -#: bbstreamer_tar.c:326 +#: ../../fe_utils/astreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "最後のファイルが終わる前にCOPYストリームが終了しました" -#: bbstreamer_zstd.c:85 +#: ../../fe_utils/astreamer_zstd.c:89 #, c-format msgid "could not create zstd compression context" msgstr "zstd圧縮コンテクストを生成できませんでした" -#: bbstreamer_zstd.c:91 +#: ../../fe_utils/astreamer_zstd.c:95 #, c-format msgid "could not set zstd compression level to %d: %s" msgstr "zstd圧縮レベルを%dに設定できませんでした: %s" -#: bbstreamer_zstd.c:105 +#: ../../fe_utils/astreamer_zstd.c:109 #, c-format msgid "could not set compression worker count to %d: %s" msgstr "圧縮ワーカー数を%dに設定できませんでした: %s" -#: bbstreamer_zstd.c:116 +#: ../../fe_utils/astreamer_zstd.c:120 #, c-format msgid "could not enable long-distance mode: %s" msgstr "長距離モードを有効化できませんでした: %s" -#: bbstreamer_zstd.c:275 +#: ../../fe_utils/astreamer_zstd.c:279 #, c-format msgid "could not create zstd decompression context" msgstr "zstd伸張コンテクストを生成できませんでした" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "オプション\"%2$s\"に対する不正な値\"%1$s\"" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%sは%d..%dの範囲でなければなりません" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "認識できない同期方式: %s" + +#: ../../fe_utils/recovery_gen.c:40 ../../fe_utils/recovery_gen.c:51 +#: ../../fe_utils/recovery_gen.c:90 ../../fe_utils/recovery_gen.c:110 +#: ../../fe_utils/recovery_gen.c:169 ../../fe_utils/recovery_gen.c:230 +#: pg_basebackup.c:1637 +#, c-format +msgid "out of memory" +msgstr "メモリ不足です" + +#: ../../fe_utils/recovery_gen.c:215 pg_basebackup.c:2249 streamutil.c:89 +#: streamutil.c:204 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/string_utils.c:587 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "シェルコマンドの引数に改行(LF)または復帰(CR)が含まれています: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:760 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "データベース名に改行(LF)または復帰(CR)が含まれています: \"%s\"\n" + +#: astreamer_inject.c:189 +#, c-format +msgid "unexpected state while injecting recovery settings" +msgstr "リカバリ設定の出力中に想定外の状態" + #: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" @@ -501,14 +511,14 @@ msgstr "" "%sは実行中のPostgreSQLサーバーのベースバックアップを取得します。\n" "\n" -#: pg_basebackup.c:394 pg_createsubscriber.c:216 pg_receivewal.c:79 -#: pg_recvlogical.c:86 +#: pg_basebackup.c:394 pg_createsubscriber.c:246 pg_receivewal.c:79 +#: pg_recvlogical.c:85 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_basebackup.c:395 pg_createsubscriber.c:217 pg_receivewal.c:80 -#: pg_recvlogical.c:87 +#: pg_basebackup.c:395 pg_createsubscriber.c:247 pg_receivewal.c:80 +#: pg_recvlogical.c:86 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [オプション]...\n" @@ -659,12 +669,12 @@ msgstr " -P, --progress 進行状況の表示\n" msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=スロット名 使用するレプリケーションスロット\n" -#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:109 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 冗長メッセージの出力\n" -#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:110 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" @@ -720,12 +730,12 @@ msgstr "" " --sync-method=METHOD\n" " ファイルをディスクに同期させる方法を指定\n" -#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:111 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:112 #, c-format msgid "" "\n" @@ -739,12 +749,12 @@ msgstr "" msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR 接続文字列\n" -#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:114 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME データベースサーバーホストまたはソケットディレクトリ\n" -#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:115 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT データベースサーバーのポート番号\n" @@ -758,23 +768,23 @@ msgstr "" " -s, --status-interval=INTERVAL\n" " サーバーへ送出するステータスパケットの間隔(秒単位)\n" -#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:116 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME 指定したデータベースユーザーで接続\n" -#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:117 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワードの入力を要求しない\n" -#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:118 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password パスワード入力要求を強制(自動的に行われるはず)\n" -#: pg_basebackup.c:448 pg_createsubscriber.c:235 pg_receivewal.c:106 -#: pg_recvlogical.c:118 +#: pg_basebackup.c:448 pg_createsubscriber.c:270 pg_receivewal.c:106 +#: pg_recvlogical.c:119 #, c-format msgid "" "\n" @@ -783,8 +793,8 @@ msgstr "" "\n" "バグは<%s>に報告してください。\n" -#: pg_basebackup.c:449 pg_createsubscriber.c:236 pg_receivewal.c:107 -#: pg_recvlogical.c:119 +#: pg_basebackup.c:449 pg_createsubscriber.c:271 pg_receivewal.c:107 +#: pg_recvlogical.c:120 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" @@ -794,8 +804,8 @@ msgstr "%s ホームページ: <%s>\n" msgid "could not read from ready pipe: %m" msgstr "準備ができたパイプからの読み込みが失敗しました: %m" -#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 -#: streamutil.c:518 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2259 +#: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "先行書き込みログの位置\"%s\"をパースできませんでした" @@ -810,509 +820,505 @@ msgstr "WALファイルの書き込みを終了できませんでした: %m" msgid "could not create pipe for background process: %m" msgstr "バックグランドプロセス用のパイプを作成できませんでした: \"%m" -#: pg_basebackup.c:676 +#: pg_basebackup.c:677 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "一時レプリケーションスロット\"%s\"を作成しました" -#: pg_basebackup.c:679 +#: pg_basebackup.c:680 #, c-format msgid "created replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を作成していました" -#: pg_basebackup.c:728 +#: pg_basebackup.c:729 #, c-format msgid "could not create background process: %m" msgstr "バックグラウンドプロセスを生成できませんでした: %m" -#: pg_basebackup.c:737 +#: pg_basebackup.c:738 #, c-format msgid "could not create background thread: %m" msgstr "バックグラウンドスレッドを生成できませんでした: %m" -#: pg_basebackup.c:776 +#: pg_basebackup.c:777 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "ディレクトリ\"%s\"は存在しますが空ではありません" -#: pg_basebackup.c:782 pg_createsubscriber.c:378 +#: pg_basebackup.c:783 pg_createsubscriber.c:420 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: pg_basebackup.c:858 +#: pg_basebackup.c:859 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d テーブル空間 %*s" -#: pg_basebackup.c:870 +#: pg_basebackup.c:871 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d テーブル空間 (%s%-*.*s)" -#: pg_basebackup.c:886 +#: pg_basebackup.c:887 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d テーブル空間" -#: pg_basebackup.c:910 +#: pg_basebackup.c:911 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "転送速度\"%s\"は無効な値です" -#: pg_basebackup.c:912 +#: pg_basebackup.c:913 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "転送速度\"%s\"は無効です: %m" -#: pg_basebackup.c:919 +#: pg_basebackup.c:920 #, c-format msgid "transfer rate must be greater than zero" msgstr "転送速度は0より大きな値でなければなりません" -#: pg_basebackup.c:949 +#: pg_basebackup.c:950 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "--max-rate の単位が不正です: \"%s\"" -#: pg_basebackup.c:953 +#: pg_basebackup.c:954 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "転送速度\"%s\"がintegerの範囲を超えています" -#: pg_basebackup.c:960 +#: pg_basebackup.c:961 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "転送速度\"%s\"が範囲外です" -#: pg_basebackup.c:1022 +#: pg_basebackup.c:1023 #, c-format msgid "could not get COPY data stream: %s" msgstr "COPYデータストリームを取得できませんでした: %s" -#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 -#: receivelog.c:973 +#: pg_basebackup.c:1040 pg_recvlogical.c:450 pg_recvlogical.c:626 +#: receivelog.c:980 #, c-format msgid "could not read COPY data: %s" msgstr "COPYデータを読み取ることができませんでした: %s" -#: pg_basebackup.c:1043 +#: pg_basebackup.c:1044 #, c-format msgid "background process terminated unexpectedly" msgstr "バックグラウンドプロセスが突然終了しました" -#: pg_basebackup.c:1114 +#: pg_basebackup.c:1115 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "圧縮tarファイルには目録は出力できません" -#: pg_basebackup.c:1115 +#: pg_basebackup.c:1116 #, c-format msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." msgstr "クライアントサイド圧縮を使用して標準出力ではなくディレクトリに出力する、または %s を使用してください。" -#: pg_basebackup.c:1131 +#: pg_basebackup.c:1132 #, c-format msgid "cannot parse archive \"%s\"" msgstr "アーカイブ\"%s\"のパースができませんでした" -#: pg_basebackup.c:1132 +#: pg_basebackup.c:1133 #, c-format msgid "Only tar archives can be parsed." msgstr "tarアーカイブのみパース可能です。" -#: pg_basebackup.c:1134 +#: pg_basebackup.c:1135 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "Plainフォーマットではpg_basebackupがアーカイブをパースする必要があります。" -#: pg_basebackup.c:1136 +#: pg_basebackup.c:1137 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "出力ディレクトリに - を指定する際にはpg_basebackupがアーカイブをパースする必要があります。" -#: pg_basebackup.c:1138 +#: pg_basebackup.c:1139 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "-Rオプションを指定する場合はpg_basebackupがアーカイブをパースする必要があります。" -#: pg_basebackup.c:1357 +#: pg_basebackup.c:1358 #, c-format msgid "archives must precede manifest" msgstr "アーカイブは目録より先にあるはずです" -#: pg_basebackup.c:1372 +#: pg_basebackup.c:1373 #, c-format msgid "invalid archive name: \"%s\"" msgstr "不正なアーカイブ名: \"%s\"" -#: pg_basebackup.c:1444 +#: pg_basebackup.c:1445 #, c-format msgid "unexpected payload data" msgstr "予期しないペイロードのデータ" -#: pg_basebackup.c:1587 +#: pg_basebackup.c:1588 #, c-format msgid "empty COPY message" msgstr "空のCOPYメッセージ" -#: pg_basebackup.c:1589 +#: pg_basebackup.c:1590 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "タイプ%d、長さ%zuのCOPYメッセージのフォーマット異常" -#: pg_basebackup.c:1789 +#: pg_basebackup.c:1790 #, c-format msgid "incompatible server version %s" msgstr "非互換のサーバーバージョン \"%s\"" -#: pg_basebackup.c:1805 +#: pg_basebackup.c:1806 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "-X none または -X fetch でログストリーミングを無効にできます。" -#: pg_basebackup.c:1841 +#: pg_basebackup.c:1842 #, c-format msgid "server does not support incremental backup" msgstr "サーバーは差分バックアップをサポートしていません" -#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 -#: receivelog.c:543 receivelog.c:582 streamutil.c:364 streamutil.c:438 -#: streamutil.c:490 streamutil.c:578 streamutil.c:730 streamutil.c:775 +#: pg_basebackup.c:1851 pg_basebackup.c:2009 pg_recvlogical.c:273 +#: receivelog.c:542 receivelog.c:581 streamutil.c:296 streamutil.c:370 +#: streamutil.c:422 streamutil.c:510 streamutil.c:667 streamutil.c:712 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "レプリケーションコマンド\"%s\"を送信できませんでした: %s" -#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#: pg_basebackup.c:1857 pg_basebackup.c:1884 #, c-format msgid "could not upload manifest: %s" msgstr "バックアップ目録をアップロードできませんでした: %s" -#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#: pg_basebackup.c:1860 pg_basebackup.c:1887 #, c-format msgid "could not upload manifest: unexpected status %s" msgstr "バックアップ目録をアップロードできませんでした: 予期しないステータス %s" -#: pg_basebackup.c:1867 +#: pg_basebackup.c:1868 #, c-format msgid "could not send COPY data: %s" msgstr "COPYデータを創出することができませんでした: %s" -#: pg_basebackup.c:1877 +#: pg_basebackup.c:1878 #, c-format msgid "could not send end-of-COPY: %s" msgstr "COPY終端マーカーを送信できませんでした: %s" -#: pg_basebackup.c:1892 +#: pg_basebackup.c:1893 #, c-format msgid "unexpected extra result while sending manifest" msgstr "バックアップ目録送出中の想定外の余分な結果" -#: pg_basebackup.c:1950 +#: pg_basebackup.c:1951 #, c-format msgid "backup targets are not supported by this server version" msgstr "バックアップターゲットはこのサーバーバージョンではサポートされません" -#: pg_basebackup.c:1953 +#: pg_basebackup.c:1954 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "バックアップターゲットが使用されている場合にはリカバリ設定は出力できません" -#: pg_basebackup.c:1980 +#: pg_basebackup.c:1981 #, c-format msgid "server does not support server-side compression" msgstr "サーバーはサーバーサイド圧縮をサポートしていません" -#: pg_basebackup.c:1990 +#: pg_basebackup.c:1991 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "ベースバックアップを開始しています - チェックポイントの完了を待機中" -#: pg_basebackup.c:1994 +#: pg_basebackup.c:1995 #, c-format msgid "waiting for checkpoint" msgstr "チェックポイントを待っています" -#: pg_basebackup.c:2016 +#: pg_basebackup.c:2017 #, c-format msgid "could not initiate base backup: %s" msgstr "ベースバックアップを開始できませんでした: %s" -#: pg_basebackup.c:2019 +#: pg_basebackup.c:2020 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "サーバーが BASE_BACKUP コマンドに期待していない応答を返しました; %d行 %d列を受信しましたが期待は %d列 %d行でした" -#: pg_basebackup.c:2025 +#: pg_basebackup.c:2026 #, c-format msgid "checkpoint completed" msgstr "チェックポイントが完了しました" -#: pg_basebackup.c:2039 +#: pg_basebackup.c:2040 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "先行書き込みログの開始ポイント: タイムライン %2$u 上の %1$s" -#: pg_basebackup.c:2047 +#: pg_basebackup.c:2048 #, c-format msgid "could not get backup header: %s" msgstr "バックアップヘッダを取得できませんでした: %s" -#: pg_basebackup.c:2050 +#: pg_basebackup.c:2051 #, c-format msgid "no data returned from server" msgstr "サーバーからデータが返されませんでした" -#: pg_basebackup.c:2093 +#: pg_basebackup.c:2094 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "標準出力に書き出せるテーブル空間は1つだけですが、データベースには%d個あります" -#: pg_basebackup.c:2106 +#: pg_basebackup.c:2107 #, c-format msgid "starting background WAL receiver" msgstr "バックグランドWAL受信処理を起動します" -#: pg_basebackup.c:2189 +#: pg_basebackup.c:2190 #, c-format msgid "backup failed: %s" msgstr "バックアップが失敗しました: %s" -#: pg_basebackup.c:2192 +#: pg_basebackup.c:2193 #, c-format msgid "no write-ahead log end position returned from server" msgstr "サーバーから先行書き込みログの終了位置が返されませんでした" -#: pg_basebackup.c:2195 +#: pg_basebackup.c:2196 #, c-format msgid "write-ahead log end point: %s" msgstr "先行書き込みログの終了ポイント: %s" -#: pg_basebackup.c:2206 +#: pg_basebackup.c:2207 #, c-format msgid "checksum error occurred" msgstr "チェックサムエラーが発生しました" -#: pg_basebackup.c:2211 +#: pg_basebackup.c:2212 #, c-format msgid "final receive failed: %s" msgstr "終端の受信に失敗しました: %s" -#: pg_basebackup.c:2235 +#: pg_basebackup.c:2236 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "バックグランドプロセスがストリーミング処理が終わるまで待機します ..." -#: pg_basebackup.c:2239 +#: pg_basebackup.c:2240 #, c-format msgid "could not send command to background pipe: %m" msgstr "バックグランドへのパイプにコマンドを送信できませんでした: %m" -#: pg_basebackup.c:2244 +#: pg_basebackup.c:2245 #, c-format msgid "could not wait for child process: %m" msgstr "子プロセスの待機ができませんでした: %m" -#: pg_basebackup.c:2246 +#: pg_basebackup.c:2247 #, c-format msgid "child %d died, expected %d" msgstr "子プロセス %d が終了しましたが、期待していたのは %d でした" -#: pg_basebackup.c:2248 streamutil.c:89 streamutil.c:204 streamutil.c:316 -#, c-format -msgid "%s" -msgstr "%s" - -#: pg_basebackup.c:2268 +#: pg_basebackup.c:2269 #, c-format msgid "could not wait for child thread: %m" msgstr "子スレッドの待機ができませんでした: %m" -#: pg_basebackup.c:2273 +#: pg_basebackup.c:2274 #, c-format msgid "could not get child thread exit status: %m" msgstr "子スレッドの終了ステータスを取得できませんでした: %m" -#: pg_basebackup.c:2276 +#: pg_basebackup.c:2277 #, c-format msgid "child thread exited with error %u" msgstr "子スレッドがエラー%uで終了しました" -#: pg_basebackup.c:2305 +#: pg_basebackup.c:2306 #, c-format msgid "syncing data to disk ..." msgstr "データをディスクに同期しています..." -#: pg_basebackup.c:2330 +#: pg_basebackup.c:2331 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" -msgstr "backup_manifest.tmp の名前を backup_manifest に変更してください" +msgstr "backup_manifest.tmp の名前を backup_manifest に変更しています" -#: pg_basebackup.c:2350 +#: pg_basebackup.c:2351 #, c-format msgid "base backup completed" msgstr "ベースバックアップが完了しました" -#: pg_basebackup.c:2436 +#: pg_basebackup.c:2437 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "不正な checkpoint の引数\"%s\"、\"fast\" または \"spreadでなければなりません" -#: pg_basebackup.c:2454 +#: pg_basebackup.c:2455 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "不正な出力フォーマット\"%s\"、\"plain\"か\"tar\"でなければなりません" -#: pg_basebackup.c:2535 +#: pg_basebackup.c:2536 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "不正な wal-method オプション\"%s\"、\"fetch\"、\"stream\" または \"none\" のいずれかでなければなりません" -#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 -#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 -#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 -#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 -#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 -#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 -#: pg_basebackup.c:2803 pg_createsubscriber.c:1907 pg_createsubscriber.c:1917 -#: pg_createsubscriber.c:1925 pg_createsubscriber.c:1953 -#: pg_createsubscriber.c:1985 pg_receivewal.c:748 pg_receivewal.c:760 -#: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 -#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 -#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 -#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 -#: pg_recvlogical.c:917 pg_recvlogical.c:924 +#: pg_basebackup.c:2575 pg_basebackup.c:2587 pg_basebackup.c:2609 +#: pg_basebackup.c:2621 pg_basebackup.c:2627 pg_basebackup.c:2679 +#: pg_basebackup.c:2690 pg_basebackup.c:2700 pg_basebackup.c:2706 +#: pg_basebackup.c:2713 pg_basebackup.c:2725 pg_basebackup.c:2737 +#: pg_basebackup.c:2745 pg_basebackup.c:2758 pg_basebackup.c:2764 +#: pg_basebackup.c:2773 pg_basebackup.c:2785 pg_basebackup.c:2796 +#: pg_basebackup.c:2804 pg_createsubscriber.c:2196 pg_createsubscriber.c:2218 +#: pg_createsubscriber.c:2228 pg_createsubscriber.c:2236 +#: pg_createsubscriber.c:2264 pg_createsubscriber.c:2307 pg_receivewal.c:748 +#: pg_receivewal.c:760 pg_receivewal.c:767 pg_receivewal.c:776 +#: pg_receivewal.c:783 pg_receivewal.c:793 pg_recvlogical.c:859 +#: pg_recvlogical.c:871 pg_recvlogical.c:881 pg_recvlogical.c:888 +#: pg_recvlogical.c:895 pg_recvlogical.c:902 pg_recvlogical.c:909 +#: pg_recvlogical.c:916 pg_recvlogical.c:923 pg_recvlogical.c:932 +#: pg_recvlogical.c:939 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: pg_basebackup.c:2584 pg_createsubscriber.c:1915 pg_receivewal.c:758 -#: pg_recvlogical.c:863 +#: pg_basebackup.c:2585 pg_createsubscriber.c:2226 pg_receivewal.c:758 +#: pg_recvlogical.c:869 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多過ぎます(先頭は\"%s\"です)" -#: pg_basebackup.c:2607 +#: pg_basebackup.c:2608 #, c-format msgid "cannot specify both format and backup target" msgstr "フォーマットとバックアップターゲットの両方を同時には指定できません" -#: pg_basebackup.c:2619 +#: pg_basebackup.c:2620 #, c-format msgid "must specify output directory or backup target" msgstr "出力ディレクトリかバックアップターゲットを指定する必要があります" -#: pg_basebackup.c:2625 +#: pg_basebackup.c:2626 #, c-format msgid "cannot specify both output directory and backup target" msgstr "出力先ディレクトリとバックアップターゲットの両方を同時には指定できません" -#: pg_basebackup.c:2655 pg_receivewal.c:802 +#: pg_basebackup.c:2656 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "認識できない圧縮アルゴリズム\"%s\"" -#: pg_basebackup.c:2661 pg_receivewal.c:809 +#: pg_basebackup.c:2662 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "不正な圧縮指定: %s" -#: pg_basebackup.c:2677 +#: pg_basebackup.c:2678 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "バックアップターゲットが指定されているとクライアントサイド圧縮はできません" -#: pg_basebackup.c:2688 +#: pg_basebackup.c:2689 #, c-format msgid "only tar mode backups can be compressed" msgstr "tarモードでのバックアップのみが圧縮可能です" -#: pg_basebackup.c:2698 +#: pg_basebackup.c:2699 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "バックアップターゲット指定されているとWALはストリーム出力できません" -#: pg_basebackup.c:2704 +#: pg_basebackup.c:2705 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "標準出力への tar モードでは書き込み先行ログをストリーム出力できません" -#: pg_basebackup.c:2711 +#: pg_basebackup.c:2712 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "レプリケーションスロットはWALストリーミングでのみ使用可能です" -#: pg_basebackup.c:2723 +#: pg_basebackup.c:2724 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot はスロット名と同時には指定できません" #. translator: second %s is an option name -#: pg_basebackup.c:2734 pg_receivewal.c:774 +#: pg_basebackup.c:2735 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s は --slot でスロットを指定する必要があります" -#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 -#: pg_basebackup.c:2801 +#: pg_basebackup.c:2743 pg_basebackup.c:2783 pg_basebackup.c:2794 +#: pg_basebackup.c:2802 #, c-format msgid "%s and %s are incompatible options" msgstr "%s と %s は非互換なオプションです" -#: pg_basebackup.c:2756 +#: pg_basebackup.c:2757 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "WALディレクトリの位置はバックアップターゲットと同時には指定できません" -#: pg_basebackup.c:2762 +#: pg_basebackup.c:2763 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "WALディレクトリの位置は plainモードでのみ指定可能です" -#: pg_basebackup.c:2771 +#: pg_basebackup.c:2772 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WALディレクトリの位置は、絶対パスでなければなりません" -#: pg_basebackup.c:2871 +#: pg_basebackup.c:2872 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: pg_createsubscriber.c:164 +#: pg_createsubscriber.c:189 #, c-format msgid "failed after the end of recovery" msgstr "リカバリ完了後に失敗しました" -#: pg_createsubscriber.c:165 +#: pg_createsubscriber.c:190 #, c-format msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." msgstr "以降この対象サーバーは物理複製としては使用できません。作業を継続する前に物理複製を再作成する必要があります。" -#: pg_createsubscriber.c:193 +#: pg_createsubscriber.c:221 #, c-format -msgid "publication \"%s\" in database \"%s\" on primary might be left behind" -msgstr "プライマリ上のデータベース\"%2$s\"にパブリケーション\"%1$s\"が残される可能性があります" +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "プライマリ上のデータベース\"%2$s\"で作成されたパブリケーション\"%1$s\"が残されています" -#: pg_createsubscriber.c:195 +#: pg_createsubscriber.c:224 #, c-format -msgid "Consider dropping this publication before trying again." -msgstr "再試行の前にこのパブリケーションを削除することを検討してください。" +msgid "Drop this publication before trying again." +msgstr "再試行の前にこのパブリケーションを削除してください。" -#: pg_createsubscriber.c:199 +#: pg_createsubscriber.c:228 #, c-format -msgid "replication slot \"%s\" in database \"%s\" on primary might be left behind" -msgstr "プライマリ上のデータベース\"%2$s\"にレプリケーションスロット\"%1$s\"が残される可能性があります" +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "プライマリ上のデータベース\"%2$s\"で作成されたレプリケーションスロット\"%1$s\"が残されています" -#: pg_createsubscriber.c:201 pg_createsubscriber.c:1137 +#: pg_createsubscriber.c:231 pg_createsubscriber.c:1305 #, c-format msgid "Drop this replication slot soon to avoid retention of WAL files." msgstr "WALファイルの増加を避けるためにこのレプリケーションスロットを直ちに削除してください。" -#: pg_createsubscriber.c:214 +#: pg_createsubscriber.c:244 #, c-format msgid "" "%s creates a new logical replica from a standby server.\n" @@ -1321,7 +1327,7 @@ msgstr "" "%s スタンバイサーバーから新たな論理複製を作成します。\n" "\n" -#: pg_createsubscriber.c:218 pg_receivewal.c:81 pg_recvlogical.c:92 +#: pg_createsubscriber.c:248 pg_receivewal.c:81 pg_recvlogical.c:91 #, c-format msgid "" "\n" @@ -1330,593 +1336,682 @@ msgstr "" "\n" "オプション:\n" -#: pg_createsubscriber.c:219 +#: pg_createsubscriber.c:249 #, c-format -msgid " -d, --database=DBNAME database to create a subscription\n" +msgid "" +" -a, --all create subscriptions for all databases except template\n" +" databases or databases that don't allow connections\n" +msgstr "" +" -a, --all テンプレートデータベースまたは接続を許可\n" +" しないデーバーベースを除くすべてのデータ\n" +" ベースでサブスクリプションを作成する\n" + +#: pg_createsubscriber.c:251 +#, c-format +msgid " -d, --database=DBNAME database in which to create a subscription\n" msgstr " -d, --database=DBNAME サブスクリプションを作成するデータベース名\n" -#: pg_createsubscriber.c:220 +#: pg_createsubscriber.c:252 #, c-format msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" msgstr " -D, --pgdata=DATADIR サブスクライバのデータディレクトリの場所\n" -#: pg_createsubscriber.c:221 +#: pg_createsubscriber.c:253 #, c-format msgid " -n, --dry-run dry run, just show what would be done\n" msgstr " -n, --dry-run 更新をせず、単に何が行なわれるかを表示\n" -#: pg_createsubscriber.c:222 +#: pg_createsubscriber.c:254 #, c-format msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" msgstr " -p, --subscriber-port=PORT サブスクライバのポート番号 (デフォルト %s)\n" -#: pg_createsubscriber.c:223 +#: pg_createsubscriber.c:255 #, c-format msgid " -P, --publisher-server=CONNSTR publisher connection string\n" msgstr " -P, --publisher-server=CONNSTR パブリッシャの接続文字列\n" -#: pg_createsubscriber.c:224 +#: pg_createsubscriber.c:256 #, c-format -msgid " -s, --socket-directory=DIR socket directory to use (default current directory)\n" +msgid "" +" -R, --remove=OBJECTTYPE remove all objects of the specified type from specified\n" +" databases on the subscriber; accepts: publications\n" msgstr "" -" -s, --socket-directory=DIR 使用するソケットディレクトリ(デフォルトは\n" +" -R, --remove=OBJECTTYPE サブスクライバ側の指定したデータベースから、\n" +" 指定された種類のオブジェクトをすべて削除する;\n" +" 指定可能なオブジェクト種別: publications\n" + +#: pg_createsubscriber.c:258 +#, c-format +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr "" +" -s, --socketdir=DIR 使用するソケットディレクトリ(デフォルトは\n" " カレントディレクトリ)\n" -#: pg_createsubscriber.c:225 +#: pg_createsubscriber.c:259 #, c-format msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" msgstr " -t, --recovery-timeout=SECS リカバリ完了を待機する秒数\n" -#: pg_createsubscriber.c:226 +#: pg_createsubscriber.c:260 #, c-format -msgid " -U, --subscriber-username=NAME subscriber username\n" -msgstr " -U, --subscriber-username=NAME サブスクライバのユーザー名\n" +msgid " -T, --enable-two-phase enable two-phase commit for all subscriptions\n" +msgstr "" +" -T, --enable-two-phase 2相コミットをすべてのサブスクリプションに\n" +" 対して有効化\n" -#: pg_createsubscriber.c:227 +#: pg_createsubscriber.c:261 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=NAME サブスクライバ接続のユーザー名\n" + +#: pg_createsubscriber.c:262 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 冗長メッセージを出力\n" -#: pg_createsubscriber.c:228 +#: pg_createsubscriber.c:263 #, c-format msgid "" " --config-file=FILENAME use specified main server configuration\n" " file when running target cluster\n" msgstr "" -" --config-file=FILENAME ターゲットのクラスタの実行時に指定した\n" -" 主サーバー設定ファイルを使用する\n" +" --config-file=FILENAME ターゲットクラスタの実行時に、指定した\n" +" メインのサーバー設定ファイルを使用する\n" -#: pg_createsubscriber.c:230 +#: pg_createsubscriber.c:265 #, c-format msgid " --publication=NAME publication name\n" msgstr " --publication=NAME パブリケーション名\n" -#: pg_createsubscriber.c:231 +#: pg_createsubscriber.c:266 #, c-format msgid " --replication-slot=NAME replication slot name\n" msgstr " --replication-slot=NAME レプリケーションスロット名\n" -#: pg_createsubscriber.c:232 +#: pg_createsubscriber.c:267 #, c-format msgid " --subscription=NAME subscription name\n" msgstr " --subscription=NAME サブスクリプション名\n" -#: pg_createsubscriber.c:233 +#: pg_createsubscriber.c:268 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_createsubscriber.c:234 +#: pg_createsubscriber.c:269 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_createsubscriber.c:265 +#: pg_createsubscriber.c:312 #, c-format msgid "could not parse connection string: %s" msgstr "接続文字列をパースできませんでした: %s" -#: pg_createsubscriber.c:347 +#: pg_createsubscriber.c:389 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "%2$sにはプログラム\"%1$s\"が必要ですが、\"%3$s\"と同じディレクトリにはありませんでした。" -#: pg_createsubscriber.c:350 +#: pg_createsubscriber.c:392 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じバージョンではありませんでした。" -#: pg_createsubscriber.c:370 +#: pg_createsubscriber.c:412 #, c-format msgid "checking if directory \"%s\" is a cluster data directory" msgstr "ディレクトリ\"%s\"がクラスタデータディレクトリであることを確認中" -#: pg_createsubscriber.c:376 +#: pg_createsubscriber.c:418 #, c-format msgid "data directory \"%s\" does not exist" msgstr "データディレクトリ\"%s\"は存在しません" -#: pg_createsubscriber.c:384 +#: pg_createsubscriber.c:426 #, c-format msgid "directory \"%s\" is not a database cluster directory" msgstr "ディレクトリ\"%s\"はデータベースクラスタディレクトリではありません" -#: pg_createsubscriber.c:501 +#: pg_createsubscriber.c:544 #, c-format msgid "connection to database failed: %s" msgstr "データベース接続に失敗しました: %s" -#: pg_createsubscriber.c:514 +#: pg_createsubscriber.c:557 streamutil.c:230 #, c-format -msgid "could not clear search_path: %s" -msgstr "search_pathを消去できませんでした: %s" +msgid "could not clear \"search_path\": %s" +msgstr "\"search_path\"を消去できませんでした: %s" -#: pg_createsubscriber.c:554 +#: pg_createsubscriber.c:597 #, c-format msgid "getting system identifier from publisher" msgstr "パブリッシャからシステム識別子を取得しています" -#: pg_createsubscriber.c:561 +#: pg_createsubscriber.c:604 #, c-format msgid "could not get system identifier: %s" msgstr "システム識別子を取得できませんでした: %s" -#: pg_createsubscriber.c:567 +#: pg_createsubscriber.c:610 #, c-format msgid "could not get system identifier: got %d rows, expected %d row" msgstr "システム識別子を取得できませんでした: 受信したのは%d行、想定は%d行" -#: pg_createsubscriber.c:574 +#: pg_createsubscriber.c:617 #, c-format -msgid "system identifier is %llu on publisher" -msgstr "パブリッシャのシステム識別子は%lluです" +msgid "system identifier is % on publisher" +msgstr "パブリッシャのシステム識別子は%です" -#: pg_createsubscriber.c:595 +#: pg_createsubscriber.c:637 #, c-format msgid "getting system identifier from subscriber" msgstr "サブスクライバからシステム識別子を取得しています" -#: pg_createsubscriber.c:599 pg_createsubscriber.c:629 +#: pg_createsubscriber.c:641 pg_createsubscriber.c:670 #, c-format msgid "control file appears to be corrupt" msgstr "制御ファイルが破損しているようです" -#: pg_createsubscriber.c:603 pg_createsubscriber.c:644 +#: pg_createsubscriber.c:645 pg_createsubscriber.c:685 #, c-format -msgid "system identifier is %llu on subscriber" -msgstr "サブスクライバのシステム識別子は%lluです" +msgid "system identifier is % on subscriber" +msgstr "サブスクライバのシステム識別子は%です" -#: pg_createsubscriber.c:625 +#: pg_createsubscriber.c:666 #, c-format msgid "modifying system identifier of subscriber" msgstr "サブスクライバのシステム識別子を変更しています" -#: pg_createsubscriber.c:647 +#: pg_createsubscriber.c:688 #, c-format msgid "running pg_resetwal on the subscriber" msgstr "サブスクライバ上でpg_resetwalを実行します" -#: pg_createsubscriber.c:659 +#: pg_createsubscriber.c:700 #, c-format msgid "subscriber successfully changed the system identifier" msgstr "サブスクライバはシステム識別子の変更に成功しました" -#: pg_createsubscriber.c:661 +#: pg_createsubscriber.c:702 #, c-format -msgid "subscriber failed to change system identifier: exit code: %d" -msgstr "サブスクライバはシステム識別子の変更に失敗しました: 終了コード: %d" +msgid "could not change system identifier of subscriber: %s" +msgstr "サブスクライバーのシステム識別子を変更できませんでした: %s" -#: pg_createsubscriber.c:685 +#: pg_createsubscriber.c:726 #, c-format msgid "could not obtain database OID: %s" msgstr "データベースOIDを取得できませんでした: %s" -#: pg_createsubscriber.c:692 +#: pg_createsubscriber.c:733 #, c-format msgid "could not obtain database OID: got %d rows, expected %d row" msgstr "データベースOIDを取得できませんでした: 受信したのは%d行、想定は%d行" -#: pg_createsubscriber.c:764 +#: pg_createsubscriber.c:805 #, c-format msgid "create replication slot \"%s\" on publisher" msgstr "パブリッシャでレプリケーションスロット\"%s\"を作成します" -#: pg_createsubscriber.c:788 +#: pg_createsubscriber.c:825 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "追加のWALレコードを書き込めませんでした: %s" + +#: pg_createsubscriber.c:851 #, c-format msgid "could not obtain recovery progress: %s" msgstr "リカバリ進捗を取得できませんでした: %s" -#: pg_createsubscriber.c:819 +#: pg_createsubscriber.c:884 #, c-format msgid "checking settings on publisher" msgstr "パブリッシャ上の設定を確認しています" -#: pg_createsubscriber.c:829 +#: pg_createsubscriber.c:894 #, c-format msgid "primary server cannot be in recovery" msgstr "プライマリサーバーがリカバリ中であってはなりません" -#: pg_createsubscriber.c:864 +#: pg_createsubscriber.c:920 #, c-format msgid "could not obtain publisher settings: %s" msgstr "パブリッシャの設定が取得できませんでした: %s" -#: pg_createsubscriber.c:887 +#: pg_createsubscriber.c:949 #, c-format -msgid "publisher requires wal_level >= \"logical\"" -msgstr "パブリッシャは wal_level >= \"logical\" である必要があります" +msgid "publisher requires \"wal_level\" >= \"logical\"" +msgstr "パブリッシャでは \"wal_level\" >= \"logical\" である必要があります" -#: pg_createsubscriber.c:893 +#: pg_createsubscriber.c:955 #, c-format msgid "publisher requires %d replication slots, but only %d remain" msgstr "パブリッシャは%d個のレプリケーションスロットを必要としますが、%d個しか残っていません" -#: pg_createsubscriber.c:895 pg_createsubscriber.c:994 +#: pg_createsubscriber.c:957 pg_createsubscriber.c:966 +#: pg_createsubscriber.c:1076 pg_createsubscriber.c:1085 +#: pg_createsubscriber.c:1094 #, c-format -msgid "Consider increasing max_replication_slots to at least %d." -msgstr "max_replication_slots を最低でも%dまで増やすことを検討してください。" +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "設定パラメータ\"%s\"を少なくとも%dに増やしてください。" -#: pg_createsubscriber.c:902 +#: pg_createsubscriber.c:964 #, c-format -msgid "publisher requires %d wal sender processes, but only %d remain" -msgstr "パブリッシャは%d個のwal senderプロセスを必要としますが、%d個しか残っていません" +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "パブリッシャは%d個のWAL senderプロセスを必要としますが、%d個しか残っていません" -#: pg_createsubscriber.c:904 +#: pg_createsubscriber.c:973 #, c-format -msgid "Consider increasing max_wal_senders to at least %d." -msgstr "max_wal_sendersを最低でも%dに上げることを検討してください。" +msgid "two_phase option will not be enabled for replication slots" +msgstr "レプリケーションスロットに対してtwo_phaseオプションは有効化されません" -#: pg_createsubscriber.c:937 +#: pg_createsubscriber.c:974 +#, c-format +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "サブスクリプションはtwo_phaseオプションが無効な状態で作成されます。準備済みトランザクションはCOMMIT PREPAREDでレプリケートされます。" + +#: pg_createsubscriber.c:976 +#, c-format +msgid "You can use --enable-two-phase switch to enable two_phase." +msgstr "--enable-two-phase オプションで two_phase を有効にできます。" + +#: pg_createsubscriber.c:986 +#, c-format +msgid "required WAL could be removed from the publisher" +msgstr "必要なWALがパブリッシャから削除される可能性があります" + +#: pg_createsubscriber.c:987 +#, c-format +msgid "Set the configuration parameter \"%s\" to -1 to ensure that required WAL files are not prematurely removed." +msgstr "設定パラメータ\"%s\"を -1 に設定して、必要となるWALファイルが使用される前に削除されないようにしてください。" + +#: pg_createsubscriber.c:1019 #, c-format msgid "checking settings on subscriber" msgstr "サブスクライバ上で設定を確認します" -#: pg_createsubscriber.c:944 +#: pg_createsubscriber.c:1026 #, c-format msgid "target server must be a standby" msgstr "ターゲットサーバーはスタンバイである必要があります" -#: pg_createsubscriber.c:968 +#: pg_createsubscriber.c:1050 #, c-format msgid "could not obtain subscriber settings: %s" msgstr "サブスクライバの設定を取得できませんでした: %s" -#: pg_createsubscriber.c:992 +#: pg_createsubscriber.c:1074 #, c-format -msgid "subscriber requires %d replication slots, but only %d remain" -msgstr "サブスクライバは%d個のレプリケーションスロットを必要としますが、%d個しか残ってません" +msgid "subscriber requires %d active replication origins, but only %d remain" +msgstr "サブスクライバは%d個の有効なレプリケーション起源を必要としますが、%d個しか残ってません" -#: pg_createsubscriber.c:1001 +#: pg_createsubscriber.c:1083 #, c-format msgid "subscriber requires %d logical replication workers, but only %d remain" msgstr "サブスクライバは%d個の論理レプリケーションワーカーを必要としますが、%d個しか残っていません" -#: pg_createsubscriber.c:1003 -#, c-format -msgid "Consider increasing max_logical_replication_workers to at least %d." -msgstr "max_logical_replication_workersを最低でも%dに増やすことを検討してください。" - -#: pg_createsubscriber.c:1010 +#: pg_createsubscriber.c:1092 #, c-format msgid "subscriber requires %d worker processes, but only %d remain" msgstr "サブスクライバは%d個のワーカープロセスを必要としますが、%d個しか残っていません" -#: pg_createsubscriber.c:1012 +#: pg_createsubscriber.c:1127 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"のサブスクリプション\"%1$s\"の削除中" + +#: pg_createsubscriber.c:1136 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "サブスクリプション\"%s\"を削除できませんでした: %s" + +#: pg_createsubscriber.c:1171 #, c-format -msgid "Consider increasing max_worker_processes to at least %d." -msgstr "max_worker_processesを最低でも%dに増やすことを検討してください。" +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "既存のサブスクリプションを取得できませんでした: %s" -#: pg_createsubscriber.c:1135 +#: pg_createsubscriber.c:1303 #, c-format msgid "could not drop replication slot \"%s\" on primary" msgstr "プライマリ上のレプリケーションスロット\"%s\"を削除できませんでした" -#: pg_createsubscriber.c:1169 +#: pg_createsubscriber.c:1337 #, c-format msgid "could not obtain failover replication slot information: %s" msgstr "フェイルオーバーレプリケーションスロットの情報を取得できませんでした: %s" -#: pg_createsubscriber.c:1171 pg_createsubscriber.c:1180 +#: pg_createsubscriber.c:1339 pg_createsubscriber.c:1348 #, c-format msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." msgstr "WALファイルの増加を避けるためにこのフェイルオーバーレプリケーションスロットを直ちに削除してください。" -#: pg_createsubscriber.c:1179 +#: pg_createsubscriber.c:1347 #, c-format msgid "could not drop failover replication slot" msgstr "フェイルオーバーレプリケーションスロットを削除できませんでした" -#: pg_createsubscriber.c:1201 +#: pg_createsubscriber.c:1369 #, c-format -msgid "creating the replication slot \"%s\" on database \"%s\"" -msgstr "データベース\"%2$s\"上でレプリケーションスロット\"%1$s:を作成します" +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"でレプリケーションスロット\"%1$s:を作成します" -#: pg_createsubscriber.c:1219 +#: pg_createsubscriber.c:1388 #, c-format -msgid "could not create replication slot \"%s\" on database \"%s\": %s" -msgstr "データベース\"%2$s\"上でレプリケーションスロット\"%1$s\"を作成できませんでした: %3$s" +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "データベース\"%2$s\"でレプリケーションスロット\"%1$s\"を作成できませんでした: %3$s" -#: pg_createsubscriber.c:1249 +#: pg_createsubscriber.c:1418 #, c-format -msgid "dropping the replication slot \"%s\" on database \"%s\"" -msgstr "データベース\"%2$s\"上でレプリケーションスロット\"%1$s:を削除します" +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"のレプリケーションスロット\"%1$s:を削除します" -#: pg_createsubscriber.c:1265 +#: pg_createsubscriber.c:1434 #, c-format -msgid "could not drop replication slot \"%s\" on database \"%s\": %s" -msgstr "データベース\"%2$s\"上でレプリケーションスロット\"%1$s\"を削除できませんでした: %3$s" +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "データベース\"%2$s\"のレプリケーションスロット\"%1$s\"を削除できませんでした: %3$s" -#: pg_createsubscriber.c:1286 +#: pg_createsubscriber.c:1455 #, c-format msgid "pg_ctl failed with exit code %d" msgstr "pg_ctlが終了コード%dで失敗しました" -#: pg_createsubscriber.c:1291 +#: pg_createsubscriber.c:1460 #, c-format msgid "pg_ctl was terminated by exception 0x%X" msgstr "pg_ctlが例外0x%Xによって終了させられました" -#: pg_createsubscriber.c:1293 +#: pg_createsubscriber.c:1462 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16進値の説明についてはC インクルードファイル\"ntstatus.h\"を参照してください。" -#: pg_createsubscriber.c:1295 +#: pg_createsubscriber.c:1464 #, c-format msgid "pg_ctl was terminated by signal %d: %s" msgstr "pg_ctlがシグナル%dによって終了させられました %s" -#: pg_createsubscriber.c:1301 +#: pg_createsubscriber.c:1470 #, c-format msgid "pg_ctl exited with unrecognized status %d" msgstr "pg_ctlが認識できない状態%dで終了しました" -#: pg_createsubscriber.c:1304 +#: pg_createsubscriber.c:1473 #, c-format msgid "The failed command was: %s" msgstr "失敗したコマンドは以下のとおりです: %s" -#: pg_createsubscriber.c:1343 +#: pg_createsubscriber.c:1523 #, c-format msgid "server was started" msgstr "サーバー起動完了" -#: pg_createsubscriber.c:1358 +#: pg_createsubscriber.c:1538 #, c-format msgid "server was stopped" msgstr "サーバーは停止しました" -#: pg_createsubscriber.c:1377 +#: pg_createsubscriber.c:1557 #, c-format msgid "waiting for the target server to reach the consistent state" msgstr "対象サーバーが一貫性のある状態に到達するのを待っています" -#: pg_createsubscriber.c:1400 +#: pg_createsubscriber.c:1580 #, c-format msgid "recovery timed out" msgstr "リカバリーがタイムアウトしました" -#: pg_createsubscriber.c:1413 +#: pg_createsubscriber.c:1593 #, c-format msgid "server did not end recovery" msgstr "サーバーはリカバリを完了しませんでした" -#: pg_createsubscriber.c:1415 +#: pg_createsubscriber.c:1595 #, c-format msgid "target server reached the consistent state" msgstr "対象サーバーが一貫性のある状態に到達しました" -#: pg_createsubscriber.c:1416 +#: pg_createsubscriber.c:1596 #, c-format msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." msgstr "もしpg_createsubscriberが今時点より後で失敗した場合は、作業を継続する前に物理レプリカを再作成する必要があります。" -#: pg_createsubscriber.c:1443 +#: pg_createsubscriber.c:1623 pg_createsubscriber.c:1746 #, c-format msgid "could not obtain publication information: %s" msgstr "パブリケーション情報を取得できませんでした: %s" -#: pg_createsubscriber.c:1457 +#: pg_createsubscriber.c:1637 #, c-format msgid "publication \"%s\" already exists" msgstr "パブリケーション\"%s\"はすでに存在します" -#: pg_createsubscriber.c:1458 +#: pg_createsubscriber.c:1638 #, c-format msgid "Consider renaming this publication before continuing." msgstr "作業を継続する前にこのパブリケーションの名前を変更することを検討してください。" -#: pg_createsubscriber.c:1465 +#: pg_createsubscriber.c:1645 #, c-format -msgid "creating publication \"%s\" on database \"%s\"" -msgstr "データベース\"%2$s\"上でパブリケーション\"%1$s\"を作成します" +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"でパブリケーション\"%1$s\"を作成します" -#: pg_createsubscriber.c:1478 +#: pg_createsubscriber.c:1658 #, c-format -msgid "could not create publication \"%s\" on database \"%s\": %s" -msgstr "データベース\"%2$s\"上でパブリケーション\"%1$s\"を作成できませんでした: %3$s" +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "データベース\"%2$s\"でパブリケーション\"%1$s\"を作成できませんでした: %3$s" -#: pg_createsubscriber.c:1507 +#: pg_createsubscriber.c:1688 #, c-format -msgid "dropping publication \"%s\" on database \"%s\"" -msgstr "データベース\"%2$s\"上でパブリケーション\"%1$s\"を削除します" +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"のパブリケーション\"%1$s\"を削除します" -#: pg_createsubscriber.c:1521 +#: pg_createsubscriber.c:1702 #, c-format -msgid "could not drop publication \"%s\" on database \"%s\": %s" -msgstr "データベース\"%2$s\"上でパブリケーション\"%1$s\"が削除できませんでした: %3$s" +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "データベース\"%2$s\"のパブリケーション\"%1$s\"が削除できませんでした: %3$s" -#: pg_createsubscriber.c:1567 +#: pg_createsubscriber.c:1739 #, c-format -msgid "creating subscription \"%s\" on database \"%s\"" -msgstr "データベース\"%2$s\"上でサブスクリプション\"%1$s\"を作成します" +msgid "dropping all existing publications in database \"%s\"" +msgstr "データベース\"%s\"のすべてのパブリケーションを削除します" -#: pg_createsubscriber.c:1588 +#: pg_createsubscriber.c:1797 #, c-format -msgid "could not create subscription \"%s\" on database \"%s\": %s" -msgstr "データベース\"%2$s\"上でサブスクリプション\"%1$s\"を作成できませんでした: %3$s" +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"でサブスクリプション\"%1$s\"を作成します" -#: pg_createsubscriber.c:1633 +#: pg_createsubscriber.c:1819 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "データベース\"%2$s\"でサブスクリプション\"%1$s\"を作成できませんでした: %3$s" + +#: pg_createsubscriber.c:1864 #, c-format msgid "could not obtain subscription OID: %s" msgstr "サブスクリプションOIDが取得できませんでした: %s" -#: pg_createsubscriber.c:1640 +#: pg_createsubscriber.c:1871 #, c-format msgid "could not obtain subscription OID: got %d rows, expected %d row" msgstr "サブスクリプションOIDが取得できませんでした: 受信したのは%d行、想定は%d行" -#: pg_createsubscriber.c:1664 +#: pg_createsubscriber.c:1895 #, c-format -msgid "setting the replication progress (node name \"%s\" ; LSN %s) on database \"%s\"" -msgstr "データベース\"%3$s\"上でレプリケーションの進捗を設定しています(ノード名\"%1$s\", LSN %2$s)" +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" +msgstr "データベース\"%3$s\"でのレプリケーションの進捗を設定しています(ノード名\"%1$s\", LSN %2$s)" -#: pg_createsubscriber.c:1679 +#: pg_createsubscriber.c:1910 #, c-format -msgid "could not set replication progress for the subscription \"%s\": %s" +msgid "could not set replication progress for subscription \"%s\": %s" msgstr "サブスクリプション\"%s\"にレプリケーション進捗を設定できませんでした: %s" -#: pg_createsubscriber.c:1710 +#: pg_createsubscriber.c:1941 #, c-format -msgid "enabling subscription \"%s\" on database \"%s\"" -msgstr "データベース\"%2$s\"上でサブスクリプション\"%1$s\"を有効にします" +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "データベース\"%2$s\"のサブスクリプション\"%1$s\"を有効にします" -#: pg_createsubscriber.c:1722 +#: pg_createsubscriber.c:1953 #, c-format msgid "could not enable subscription \"%s\": %s" msgstr "サブスクリプション\"%s\"を有効化できませんでした: %s" -#: pg_createsubscriber.c:1814 +#: pg_createsubscriber.c:1999 +#, c-format +msgid "could not obtain a list of databases: %s" +msgstr "データベースの一覧を取得できませんでした: %s" + +#: pg_createsubscriber.c:2103 #, c-format msgid "cannot be executed by \"root\"" msgstr "\"root\"では実行できません" -#: pg_createsubscriber.c:1815 +#: pg_createsubscriber.c:2104 #, c-format msgid "You must run %s as the PostgreSQL superuser." msgstr "PostgreSQLのスーパーユーザーで%sを実行しなければなりません" -#: pg_createsubscriber.c:1836 +#: pg_createsubscriber.c:2127 #, c-format -msgid "duplicate database \"%s\"" -msgstr "データベース\"%s\"が重複しています" +msgid "database \"%s\" specified more than once for -d/--database" +msgstr "-d/--database に対してデータベース\"%s\"が複数回指定されました" -#: pg_createsubscriber.c:1877 +#: pg_createsubscriber.c:2146 #, c-format -msgid "duplicate publication \"%s\"" -msgstr "パブリケーション\"%s\"が重複しています" +msgid "object type \"%s\" is specified more than once for -R/--remove" +msgstr "-R/--remove に対してオブジェクト種別%s\"が複数回指定されました" -#: pg_createsubscriber.c:1889 +#: pg_createsubscriber.c:2174 #, c-format -msgid "duplicate replication slot \"%s\"" -msgstr "レプリケーションスロット\"%s\"が重複しています" +msgid "publication \"%s\" specified more than once for --publication" +msgstr "--publication に対してパブリケーション\"%s\"が複数回指定されました" -#: pg_createsubscriber.c:1901 +#: pg_createsubscriber.c:2183 #, c-format -msgid "duplicate subscription \"%s\"" -msgstr "サブスクリプション\"%s\"が重複しています" +msgid "replication slot \"%s\" specified more than once for --replication-slot" +msgstr "--replication-slot に対してレプリケーションスロット\"%s\"が複数回指定されました" -#: pg_createsubscriber.c:1924 +#: pg_createsubscriber.c:2192 +#, c-format +msgid "subscription \"%s\" specified more than once for --subscription" +msgstr "--subscription に対してブスクリプション\"%s\"が複数回指定されました" + +#: pg_createsubscriber.c:2217 +#, c-format +msgid "%s cannot be used with -a/--all" +msgstr "%s は -a/--all と同時には使えません" + +#: pg_createsubscriber.c:2235 #, c-format msgid "no subscriber data directory specified" msgstr "サブスクライバのデータディレクトリが指定されていません" -#: pg_createsubscriber.c:1935 +#: pg_createsubscriber.c:2246 #, c-format msgid "could not determine current directory" msgstr "カレントディレクトリを特定できませんでした" -#: pg_createsubscriber.c:1952 +#: pg_createsubscriber.c:2263 #, c-format msgid "no publisher connection string specified" msgstr "パブリッシャの接続文字列が指定されていません" -#: pg_createsubscriber.c:1956 +#: pg_createsubscriber.c:2267 #, c-format -msgid "validating connection string on publisher" -msgstr "パブリッシャ上の接続文字列を検証しています" +msgid "validating publisher connection string" +msgstr "パブリッシャの接続文字列の検証中" -#: pg_createsubscriber.c:1962 +#: pg_createsubscriber.c:2273 #, c-format -msgid "validating connection string on subscriber" -msgstr "サブスクライバ上の接続文字列を検証しています" +msgid "validating subscriber connection string" +msgstr "サブスクライバの接続文字列の検証中" -#: pg_createsubscriber.c:1967 +#: pg_createsubscriber.c:2290 #, c-format msgid "no database was specified" msgstr "データベースが指定されていません" -#: pg_createsubscriber.c:1979 +#: pg_createsubscriber.c:2301 #, c-format -msgid "database \"%s\" was extracted from the publisher connection string" -msgstr "データベース\"%s\"がパブリッシャの接続文字列から抽出されました" +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "データベース名\"%s\"がパブリッシャの接続文字列から抽出されました" -#: pg_createsubscriber.c:1984 +#: pg_createsubscriber.c:2306 #, c-format msgid "no database name specified" msgstr "データベース名が指定されていません" -#: pg_createsubscriber.c:1994 +#: pg_createsubscriber.c:2316 #, c-format -msgid "wrong number of publication names" -msgstr "パブリケーション名の数が間違っています" +msgid "wrong number of publication names specified" +msgstr "指定されたパブリケーション名の数が間違っています" -#: pg_createsubscriber.c:1995 +#: pg_createsubscriber.c:2317 #, c-format -msgid "Number of publication names (%d) must match number of database names (%d)." +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." msgstr "パブリケーション名の数(%d)はデータベース名の数(%d)と一致している必要があります。" -#: pg_createsubscriber.c:2001 +#: pg_createsubscriber.c:2323 #, c-format -msgid "wrong number of subscription names" -msgstr "サブスクリプション名の数が間違っています" +msgid "wrong number of subscription names specified" +msgstr "指定されたサブスクリプション名の数が間違っています" -#: pg_createsubscriber.c:2002 +#: pg_createsubscriber.c:2324 #, c-format -msgid "Number of subscription names (%d) must match number of database names (%d)." +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." msgstr "サブスクリプション名の数(%d)はデータベース名の数(%d)と一致している必要があります。" -#: pg_createsubscriber.c:2008 +#: pg_createsubscriber.c:2330 #, c-format -msgid "wrong number of replication slot names" -msgstr "レプリケーションスロット名の数が間違っています" +msgid "wrong number of replication slot names specified" +msgstr "指定されたレプリケーションスロット名の数が間違っています" -#: pg_createsubscriber.c:2009 +#: pg_createsubscriber.c:2331 #, c-format -msgid "Number of replication slot names (%d) must match number of database names (%d)." +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." msgstr "レプリケーションスロット名の数(%d)はデータベース名の数(%d)と一致している必要があります。" -#: pg_createsubscriber.c:2038 +#: pg_createsubscriber.c:2343 +#, c-format +msgid "invalid object type \"%s\" specified for -R/--remove" +msgstr "-R/--remove に対して指定された不正なオブジェクト種別\"%s\"" + +#: pg_createsubscriber.c:2344 +#, c-format +msgid "The valid option is: \"publications\"" +msgstr "有効なオプション: \"publications\"" + +#: pg_createsubscriber.c:2375 #, c-format msgid "subscriber data directory is not a copy of the source database cluster" msgstr "サブスクライバのデータディレクトリは元データベースクラスタのコピーではありません" -#: pg_createsubscriber.c:2051 +#: pg_createsubscriber.c:2388 #, c-format -msgid "standby is up and running" -msgstr "スタンバイは起動して実行中です" +msgid "standby server is running" +msgstr "スタンバイサーバーが稼働中です" -#: pg_createsubscriber.c:2052 +#: pg_createsubscriber.c:2389 #, c-format -msgid "Stop the standby and try again." -msgstr "このスタンバイを停止して再試行してください。" +msgid "Stop the standby server and try again." +msgstr "このスタンバイサーバーを停止してから再試行してください。" -#: pg_createsubscriber.c:2061 +#: pg_createsubscriber.c:2398 #, c-format -msgid "starting the standby with command-line options" -msgstr "コマンドラインオプションを指定してスタンバイを起動しています" +msgid "starting the standby server with command-line options" +msgstr "コマンドラインオプションを指定してスタンバイサーバーを起動しています" -#: pg_createsubscriber.c:2077 pg_createsubscriber.c:2116 +#: pg_createsubscriber.c:2414 pg_createsubscriber.c:2449 #, c-format msgid "stopping the subscriber" msgstr "サブスクライバを起動しています" -#: pg_createsubscriber.c:2095 +#: pg_createsubscriber.c:2428 #, c-format msgid "starting the subscriber" msgstr "サブスクライバを起動しています" -#: pg_createsubscriber.c:2124 +#: pg_createsubscriber.c:2457 #, c-format msgid "Done!" msgstr "完了!" @@ -1935,17 +2030,17 @@ msgstr "" msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=DIR 受信した先行書き込みログの格納ディレクトリ\n" -#: pg_receivewal.c:83 pg_recvlogical.c:93 +#: pg_receivewal.c:83 pg_recvlogical.c:92 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN 指定したLSNの受信後に終了\n" -#: pg_receivewal.c:84 pg_recvlogical.c:97 +#: pg_receivewal.c:84 pg_recvlogical.c:98 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr "   --if-not-exists スロットの作成時に既に存在していてもエラーとしない\n" -#: pg_receivewal.c:85 pg_recvlogical.c:99 +#: pg_receivewal.c:85 pg_recvlogical.c:100 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop 接続断の際にループしない\n" @@ -1955,7 +2050,7 @@ msgstr " -n, --no-loop 接続断の際にループしない\n" msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync ディスクへの安全な書き込みの待機を行わない\n" -#: pg_receivewal.c:87 pg_recvlogical.c:104 +#: pg_receivewal.c:87 pg_recvlogical.c:105 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -1988,14 +2083,14 @@ msgstr "" "\n" "追加の動作:\n" -#: pg_receivewal.c:104 pg_recvlogical.c:89 +#: pg_receivewal.c:104 pg_recvlogical.c:88 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr "" " --create-slot 新しいレプリケーションスロットを作成する\n" " (スロット名については --slot を参照)\n" -#: pg_receivewal.c:105 pg_recvlogical.c:90 +#: pg_receivewal.c:105 pg_recvlogical.c:89 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr "" @@ -2017,7 +2112,7 @@ msgstr "%X/%X (タイムライン %u)でログのストリーミングを停止 msgid "switched to timeline %u at %X/%X" msgstr "%3$X/%2$Xで タイムライン%1$uに切り替えました" -#: pg_receivewal.c:224 pg_recvlogical.c:1053 +#: pg_receivewal.c:224 pg_recvlogical.c:1073 #, c-format msgid "received interrupt signal, exiting" msgstr "割り込みシグナルを受信、終了します" @@ -2087,7 +2182,7 @@ msgstr "ファイル\"%s\"の確認ができません: %sによる圧縮はこ msgid "starting log streaming at %X/%X (timeline %u)" msgstr "%X/%X (タイムライン %u)からログのストリーミングを開始" -#: pg_receivewal.c:693 pg_recvlogical.c:801 +#: pg_receivewal.c:693 pg_recvlogical.c:807 #, c-format msgid "could not parse end position \"%s\"" msgstr "終了位置\"%s\"をパースできませんでした" @@ -2117,28 +2212,28 @@ msgstr "%sによる圧縮`まだサポートされていません" msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "スロット\"%s\"を使用するレプリケーション接続で、想定に反してデータベースが指定されています" -#: pg_receivewal.c:878 pg_recvlogical.c:972 +#: pg_receivewal.c:878 pg_recvlogical.c:991 #, c-format msgid "dropping replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を削除しています" -#: pg_receivewal.c:889 pg_recvlogical.c:982 +#: pg_receivewal.c:889 pg_recvlogical.c:1001 #, c-format msgid "creating replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を作成しています" -#: pg_receivewal.c:918 pg_recvlogical.c:1006 +#: pg_receivewal.c:918 pg_recvlogical.c:1026 #, c-format msgid "disconnected" msgstr "切断しました" #. translator: check source for value for %d -#: pg_receivewal.c:922 pg_recvlogical.c:1010 +#: pg_receivewal.c:922 pg_recvlogical.c:1030 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "切断しました; %d秒待機して再試行します" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:83 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -2147,7 +2242,7 @@ msgstr "" "%s はPostgreSQLの論理デコードストリームを制御します。\n" "\n" -#: pg_recvlogical.c:88 +#: pg_recvlogical.c:87 #, c-format msgid "" "\n" @@ -2156,19 +2251,28 @@ msgstr "" "\n" "実行する動作:\n" -#: pg_recvlogical.c:91 +#: pg_recvlogical.c:90 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr "" " --start レプリケーションスロットでストリーミングを開始する\n" " (スロット名については --slot を参照)\n" -#: pg_recvlogical.c:94 +#: pg_recvlogical.c:93 +#, c-format +msgid "" +" --failover enable replication slot synchronization to standby servers when\n" +" creating a slot\n" +msgstr "" +" --failover スロット作成時にスタンバイサーバーへのスロット同期を\n" +" 有効にする\n" + +#: pg_recvlogical.c:95 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FILE このファイルにログを受け取る、 - で標準出力\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:96 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -2177,12 +2281,12 @@ msgstr "" " -F --fsync-interval=SECS\n" " 出力ファイルへのfsync時間間隔(デフォルト: %d)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:99 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN 既存スロット内のストリーミング開始位置\n" -#: pg_recvlogical.c:100 +#: pg_recvlogical.c:101 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -2193,279 +2297,284 @@ msgstr "" " 出力プラグインにオプションNAMEをオプション値VALUEと\n" " ともに渡す\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:104 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN 出力プラグインPLUGINを使う(デフォルト: %s)\n" -#: pg_recvlogical.c:106 +#: pg_recvlogical.c:107 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME 論理レプリケーションスロットの名前\n" -#: pg_recvlogical.c:107 +#: pg_recvlogical.c:108 #, c-format msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" msgstr " -t, --two-phase スロット作成時にプリペアドトランザクションのデコードを有効にする\n" -#: pg_recvlogical.c:112 +#: pg_recvlogical.c:113 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME 接続先データベース\n" -#: pg_recvlogical.c:145 +#: pg_recvlogical.c:146 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "PrecPpg%X/%Xまでの書き込みと、%X/%X (スロット %s)までのフラッシュを確認しています" -#: pg_recvlogical.c:169 receivelog.c:360 +#: pg_recvlogical.c:170 receivelog.c:359 #, c-format msgid "could not send feedback packet: %s" msgstr "フィードバックパケットを送信できませんでした: %s" -#: pg_recvlogical.c:239 +#: pg_recvlogical.c:240 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "%X/%X (スロット %s)からログのストリーミングを開始します" -#: pg_recvlogical.c:281 +#: pg_recvlogical.c:282 #, c-format msgid "streaming initiated" msgstr "ストリーミングを開始しました" -#: pg_recvlogical.c:346 +#: pg_recvlogical.c:347 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: pg_recvlogical.c:375 receivelog.c:882 +#: pg_recvlogical.c:376 receivelog.c:889 #, c-format msgid "invalid socket: %s" msgstr "無効なソケット: %s" -#: pg_recvlogical.c:428 receivelog.c:910 +#: pg_recvlogical.c:429 receivelog.c:917 #, c-format msgid "%s() failed: %m" msgstr "%s() が失敗しました: %m" -#: pg_recvlogical.c:435 receivelog.c:959 +#: pg_recvlogical.c:436 receivelog.c:966 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL ストリームからデータを受信できませんでした: %s" -#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 -#: receivelog.c:1066 +#: pg_recvlogical.c:478 pg_recvlogical.c:529 receivelog.c:1010 +#: receivelog.c:1073 #, c-format msgid "streaming header too small: %d" msgstr "ストリーミングヘッダが小さ過ぎます: %d" -#: pg_recvlogical.c:512 receivelog.c:843 +#: pg_recvlogical.c:513 receivelog.c:846 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "ストリーミングヘッダを認識できませんでした: \"%c\"" -#: pg_recvlogical.c:566 pg_recvlogical.c:578 +#: pg_recvlogical.c:567 pg_recvlogical.c:579 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "%dバイトをログファイル\"%s\"に書き込めませんでした: %m" -#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 +#: pg_recvlogical.c:637 receivelog.c:641 receivelog.c:678 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "レプリケーションストリームが突然終了しました: %s" -#: pg_recvlogical.c:796 +#: pg_recvlogical.c:802 #, c-format msgid "could not parse start position \"%s\"" msgstr "開始位置\"%s\"をパースできませんでした" -#: pg_recvlogical.c:874 +#: pg_recvlogical.c:880 #, c-format msgid "no slot specified" msgstr "スロットが指定されていません" -#: pg_recvlogical.c:881 +#: pg_recvlogical.c:887 #, c-format msgid "no target file specified" msgstr "ターゲットファイルが指定されていません" -#: pg_recvlogical.c:888 +#: pg_recvlogical.c:894 #, c-format msgid "no database specified" msgstr "データベースが指定されていません" -#: pg_recvlogical.c:895 +#: pg_recvlogical.c:901 #, c-format msgid "at least one action needs to be specified" msgstr "少なくとも一つのアクションを指定する必要があります" -#: pg_recvlogical.c:902 +#: pg_recvlogical.c:908 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "--create-slot や --start は --drop-slot と同時には指定できません" -#: pg_recvlogical.c:909 +#: pg_recvlogical.c:915 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "--create-slot や --drop-slot は --startpos と同時には指定できません" -#: pg_recvlogical.c:916 +#: pg_recvlogical.c:922 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos は --start が指定されているときにのみ指定可能です" -#: pg_recvlogical.c:923 +#: pg_recvlogical.c:931 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phaseは--create-slotが指定されているときにのみ指定可能です" -#: pg_recvlogical.c:956 +#: pg_recvlogical.c:938 +#, c-format +msgid "--failover may only be specified with --create-slot" +msgstr "--failover は --create-slot が指定されているときにのみ指定可能です" + +#: pg_recvlogical.c:975 #, c-format msgid "could not establish database-specific replication connection" msgstr "データベース指定のレプリケーション接続が確立できませんでした" -#: pg_recvlogical.c:1056 +#: pg_recvlogical.c:1076 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "キープアライブで終了位置 %X/%X に到達しました " -#: pg_recvlogical.c:1061 +#: pg_recvlogical.c:1081 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "%X/%X のWALレコードで終了位置 %X/%X に到達しました" -#: receivelog.c:66 +#: receivelog.c:65 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "アーカイブステータスファイル\"%s\"を作成できませんでした: %s" -#: receivelog.c:73 +#: receivelog.c:72 #, c-format msgid "could not close archive status file \"%s\": %s" msgstr "アーカイブステータスファイル\"%s\"をクローズできませんでした: %s" -#: receivelog.c:122 +#: receivelog.c:121 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "先行書き込みログファイル\"%s\"のサイズを取得できませんでした: %s" -#: receivelog.c:133 +#: receivelog.c:132 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "既存の先行書き込みログファイル\"%s\"をオープンできませんでした: %s" -#: receivelog.c:142 +#: receivelog.c:141 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "既存の先行書き込みログファイル\"%s\"をfsyncできませんでした: %s" -#: receivelog.c:157 +#: receivelog.c:156 #, c-format msgid "write-ahead log file \"%s\" has %zd byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %zd bytes, should be 0 or %d" msgstr[0] "先行書き込みログファイル\"%s\"は%zdバイトですが、0または%dであるはずです" -#: receivelog.c:175 +#: receivelog.c:174 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "先行書き込みログファイル\"%s\"をオープンできませんでした: %s" -#: receivelog.c:216 +#: receivelog.c:215 #, c-format msgid "not renaming \"%s\", segment is not complete" msgstr "\"%s\"の名前を変更しません、セグメントが完成していません" -#: receivelog.c:227 receivelog.c:317 receivelog.c:688 +#: receivelog.c:226 receivelog.c:316 receivelog.c:687 #, c-format msgid "could not close file \"%s\": %s" msgstr "ファイル\"%s\"をクローズできませんでした: %s" -#: receivelog.c:288 +#: receivelog.c:287 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "サーバーがタイムライン%uに対する想定外の履歴ファイル名を通知してきました: %s" -#: receivelog.c:297 +#: receivelog.c:296 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "タイムライン履歴ファイル\"%s\"を作成できませんでした: %s" -#: receivelog.c:304 +#: receivelog.c:303 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "タイムライン履歴ファイル\"%s\"に書き込めませんでした: %s" -#: receivelog.c:394 +#: receivelog.c:393 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "非互換のサーバーバージョン%s、クライアントは%sより古いサーバーバージョンからのストリーミングをサポートしていません" -#: receivelog.c:403 +#: receivelog.c:402 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "非互換のサーバーバージョン%s、クライアントは%sより新しいサーバーバージョンからのストリーミングをサポートしていません" -#: receivelog.c:508 +#: receivelog.c:507 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "システム識別子がベースバックアップとストリーミング接続の間で一致しません" -#: receivelog.c:516 +#: receivelog.c:515 #, c-format msgid "starting timeline %u is not present in the server" msgstr "開始タイムライン%uがサーバーに存在しません" -#: receivelog.c:555 +#: receivelog.c:554 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "TIMELINE_HISTORYコマンドへの想定外の応答: 受信したのは%d行%d列、想定は%d行%d列" -#: receivelog.c:626 +#: receivelog.c:625 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "サーバーがタイムライン%2$uに続いて想定外のタイムライン%1$uを通知してきました" -#: receivelog.c:632 +#: receivelog.c:631 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "サーバーはタイムライン%uのストリーミングを%X/%Xで停止しました、しかし次のタイムライン%uが%X/%Xから開始すると通知してきています" -#: receivelog.c:672 +#: receivelog.c:671 #, c-format msgid "replication stream was terminated before stop point" msgstr "レプリケーションストリームが停止ポイントより前で終了しました" -#: receivelog.c:718 +#: receivelog.c:717 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "タイムライン終了後に想定外の結果セット: 受信したのは%d行%d列、想定は%d行%d列" -#: receivelog.c:727 +#: receivelog.c:726 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "次のタイムラインの開始ポイント\"%s\"をパースできませんでした" -#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 +#: receivelog.c:774 receivelog.c:1029 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "ファイル\"%s\"をfsyncできませんでした: %s" -#: receivelog.c:1083 +#: receivelog.c:1090 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "ファイルがオープンされていない状態で、オフセット%uに対する先行書き込みログレコードを受信しました" -#: receivelog.c:1093 +#: receivelog.c:1100 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "WALデータオフセット%08xを受信、想定は%08x" -#: receivelog.c:1128 +#: receivelog.c:1135 #, c-format msgid "could not write %d bytes to WAL file \"%s\": %s" msgstr "WALファイル\"%2$s\"に%1$dバイト書き込めませんでした: %3$s" -#: receivelog.c:1153 receivelog.c:1193 receivelog.c:1222 +#: receivelog.c:1160 receivelog.c:1200 receivelog.c:1228 #, c-format msgid "could not send copy-end packet: %s" msgstr "コピー終端パケットを送信できませんでした: %s" @@ -2479,11 +2588,6 @@ msgstr "パスワード: " msgid "could not connect to server" msgstr "サーバーに接続できませんでした" -#: streamutil.c:230 -#, c-format -msgid "could not clear \"search_path\": %s" -msgstr "\"search_path\"を消去できませんでした: %s" - #: streamutil.c:246 #, c-format msgid "could not determine server setting for \"integer_datetimes\"" @@ -2494,68 +2598,68 @@ msgstr "\"integer_datetimes\"のサーバー設定を取得できませんでし msgid "\"integer_datetimes\" compile flag does not match server" msgstr "コンパイル時フラグ\"integer_datetimes\"がサーバーと異なっています" -#: streamutil.c:372 +#: streamutil.c:304 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "WALセグメントサイズを取得できませんでした: 受信したのは%d行で%d列、想定は%d行で%d列以上" -#: streamutil.c:382 +#: streamutil.c:314 #, c-format msgid "WAL segment size could not be parsed" msgstr "WALセグメントサイズがパースできませんでした" -#: streamutil.c:400 +#: streamutil.c:332 #, c-format msgid "remote server reported invalid WAL segment size (%d byte)" msgid_plural "remote server reported invalid WAL segment size (%d bytes)" msgstr[0] "リモートサーバーが不正なWALセグメントサイズを報告してきました (%dバイト)" -#: streamutil.c:404 +#: streamutil.c:336 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "WALセグメントサイズは1MBから1GBまでの間の2の累乗でなければなりません。" -#: streamutil.c:446 +#: streamutil.c:378 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "グループアクセスフラグを取得できませんでした: 受信したのは%d行で%d列、想定は%d行で%d列以上" -#: streamutil.c:455 +#: streamutil.c:387 #, c-format msgid "group access flag could not be parsed: %s" msgstr "グループアクセスフラグがパースできませんでした: %s" -#: streamutil.c:498 streamutil.c:535 +#: streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "システムを識別できませんでした: 受信したのは%d行%d列、想定は%d行%d列以上" -#: streamutil.c:587 +#: streamutil.c:519 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "レプリケーションスロット\"%s\"を読み取れませんでした: 受信したのは%d行%d列、想定は%d行%d列" -#: streamutil.c:599 +#: streamutil.c:531 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "レプリケーションスロット\"%s\"は存在しません" -#: streamutil.c:610 +#: streamutil.c:542 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "物理レプリケーションスロットが必要ですが、タイプは\"%s\"でした" -#: streamutil.c:624 +#: streamutil.c:556 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "レプリケーションスロット\"%2$s\"のrestart_lsn\"%1$s\"をパースできませんでした" -#: streamutil.c:741 +#: streamutil.c:678 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "レプリケーションスロット\"%s\"を作成できませんでした: 受信したのは%d行%d列、想定は%d行%d列" -#: streamutil.c:785 +#: streamutil.c:722 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "レプリケーションスロット\"%s\"を削除できませんでした: 受信したのは%d行%d列、想定は%d行%d列" diff --git a/src/bin/pg_basebackup/po/ka.po b/src/bin/pg_basebackup/po/ka.po index 559531710eeeb..b42019dcab678 100644 --- a/src/bin/pg_basebackup/po/ka.po +++ b/src/bin/pg_basebackup/po/ka.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL) 17\n" +"Project-Id-Version: pg_basebackup (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-18 04:20+0000\n" -"PO-Revision-Date: 2024-06-18 06:28+0200\n" +"POT-Creation-Date: 2025-04-05 02:20+0000\n" +"PO-Revision-Date: 2025-04-05 05:14+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,32 +16,33 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "შეცდომა: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "გაფრთხილება: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "დეტალები: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "მინიშნება: " #: ../../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 +#: ../../common/compression.c:150 ../../fe_utils/astreamer_gzip.c:140 +#: ../../fe_utils/astreamer_gzip.c:273 ../../fe_utils/astreamer_lz4.c:102 +#: ../../fe_utils/astreamer_lz4.c:300 ../../fe_utils/astreamer_zstd.c:133 +#: ../../fe_utils/astreamer_zstd.c:288 #, c-format msgid "this build does not support compression with %s" msgstr "ამ აგებაში %s-ით შეკუმშვის მხარდაჭრა არ არსებობს" @@ -78,7 +79,7 @@ msgstr "შეკუმშვის ალგორითმს \"%s\" შეკ #: ../../common/compression.c:386 #, c-format msgid "compression algorithm \"%s\" expects a compression level between %d and %d (default at %d)" -msgstr "შეკუმშვის ალგორითმის \"%s\" შეკუმშვის დონე %d-სა და %d-ს შორის უნდა იყოს (ნაგულისხმები %d)" +msgstr "შეკუმშვის ალგორითმის \"%s\" შეკუმშვის დონე %d-სა და %d-ს შორის უნდა იყოს (ნაგულისხმევი %d)" #: ../../common/compression.c:397 #, c-format @@ -95,7 +96,7 @@ msgstr "შეკუმშვის ალგორითმს \"%s\" long-dist msgid "could not open file \"%s\" for reading: %m" msgstr "ფაილის (%s) გახსნის შეცდომა: %m" -#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1874 #: pg_receivewal.c:402 #, c-format msgid "could not read file \"%s\": %m" @@ -107,7 +108,7 @@ msgid "could not read file \"%s\": read %d of %zu" msgstr "\"%s\"-ის წაკითხვის შეცდომა: წაკითხულია %d %zu-დან" #: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 -#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#: ../../fe_utils/astreamer_file.c:141 pg_recvlogical.c:652 #, c-format msgid "could not close file \"%s\": %m" msgstr "ფაილის (%s) დახურვის შეცდომა: %m" @@ -128,10 +129,10 @@ msgstr "" "ბაიტების მიმდევრობა შესაძლოა არ ემთხვეოდეს ამ პროგრამის მიერ გამოყენებულს. ამ შემთხვევაში ქვემოთ \n" "მოცემული შედეგები არასწორი იქნება და PostgreSQL ეს აგება ამ მონაცემთა საქაღალდესთან შეუთავსებელი იქნება." -#: ../../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 ../../fe_utils/recovery_gen.c:140 -#: pg_basebackup.c:1846 pg_receivewal.c:386 +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:69 +#: ../../common/file_utils.c:370 ../../common/file_utils.c:428 +#: ../../common/file_utils.c:502 ../../fe_utils/recovery_gen.c:141 +#: pg_basebackup.c:1847 pg_receivewal.c:386 #, c-format msgid "could not open file \"%s\": %m" msgstr "ფაილის (%s) გახსნის შეცდომა: %m" @@ -141,8 +142,8 @@ msgstr "ფაილის (%s) გახსნის შეცდომა: %m" msgid "could not write file \"%s\": %m" msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" -#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 -#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:440 +#: ../../common/file_utils.c:510 pg_recvlogical.c:205 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ფაილის (%s) fsync-ის შეცდომა: %m" @@ -158,36 +159,36 @@ msgstr "არასაკმარისი მეხსიერება\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "შეუძლებელია ფაილური სისტემის სინქრონიზაცია ფაილისთვის \"%s\": %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 -#: pg_receivewal.c:319 pg_recvlogical.c:352 +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 +#: pg_receivewal.c:319 pg_recvlogical.c:353 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ფაილი \"%s\" არ არსებობს: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "ამ აგებას სინქრონიზაციის მეთოდის \"%s\" მხარდაჭერა არ გააჩნია" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 #: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "საქაღალდის (%s) წაკითხვის შეცდომა: %m" -#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 +#: ../../common/file_utils.c:520 pg_basebackup.c:2345 walmethods.c:462 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "გადარქმევის შეცდომა %s - %s: %m" @@ -222,191 +223,200 @@ msgstr "შეზღუდულ კოდის ხელახლა შეს msgid "could not get exit code from subprocess: error code %lu" msgstr "ქვეპროცესიდან გასასვლელი კოდი ვერ მივიღე: შეცდომის კოდი %lu" -#: ../../fe_utils/option_utils.c:69 -#, c-format -msgid "invalid value \"%s\" for option %s" -msgstr "არასწორი მნიშვნელობა \"%s\" პარამეტრისთვის %s" - -#: ../../fe_utils/option_utils.c:76 -#, c-format -msgid "%s must be in range %d..%d" -msgstr "%s არაა საზღვრებში %d-დან %d-მდე" - -#: ../../fe_utils/option_utils.c:106 -#, c-format -msgid "unrecognized sync method: %s" -msgstr "უცნობი სინქრონიზაციის მეთოდი: %s" - -#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 -#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 -#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:331 -#, c-format -msgid "out of memory" -msgstr "არასაკმარისი მეხსიერება" - -#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 -#, c-format -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 -#: pg_basebackup.c:1497 pg_basebackup.c:1706 +#: ../../fe_utils/astreamer_file.c:96 ../../fe_utils/astreamer_file.c:364 +#: ../../fe_utils/recovery_gen.c:153 pg_basebackup.c:1498 pg_basebackup.c:1707 #, c-format msgid "could not create file \"%s\": %m" msgstr "ფაილის (%s) შექმნის შეცდომა: %m" -#: ../../fe_utils/string_utils.c:434 +#: ../../fe_utils/astreamer_file.c:124 ../../fe_utils/astreamer_file.c:261 +#: ../../fe_utils/recovery_gen.c:144 pg_basebackup.c:1434 pg_basebackup.c:1728 #, c-format -msgid "shell command argument contains a newline or carriage return: \"%s\"\n" -msgstr "გარსის ბრძანების არგუმენტი ხაზის გადატანას ან კარეტის დაბრუნებას შეიცავს: \"%s\"\n" - -#: ../../fe_utils/string_utils.c:607 -#, c-format -msgid "database name contains a newline or carriage return: \"%s\"\n" -msgstr "მონაცემთა ბაზის სახელი ხაზის გადატანას ან კარეტის დაბრუნებას შეიცავს: \"%s\"\n" +msgid "could not write to file \"%s\": %m" +msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" -#: bbstreamer_file.c:275 +#: ../../fe_utils/astreamer_file.c:278 #, c-format msgid "unexpected state while extracting archive" msgstr "არქივის გაშლის მოულოდნელი მდგომარეობა" -#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 -#: pg_basebackup.c:757 +#: ../../fe_utils/astreamer_file.c:324 pg_basebackup.c:699 pg_basebackup.c:713 +#: pg_basebackup.c:758 #, c-format msgid "could not create directory \"%s\": %m" msgstr "საქაღალდის (%s) შექმნის შეცდომა: %m" -#: bbstreamer_file.c:326 +#: ../../fe_utils/astreamer_file.c:329 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "საქაღალდეზე \"%s\" წვდომების დაყენების შეცდომა: %m" -#: bbstreamer_file.c:345 +#: ../../fe_utils/astreamer_file.c:348 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "%s-დან %s-მდე სიმბმულის შექმნა შეუძლებელია: %m" -#: bbstreamer_file.c:365 +#: ../../fe_utils/astreamer_file.c:368 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "ფაილზე \"%s\" წვდომების დაყენების შეცდომა: %m" -#: bbstreamer_gzip.c:95 +#: ../../fe_utils/astreamer_gzip.c:115 #, c-format msgid "could not create compressed file \"%s\": %m" msgstr "ვერ შექმნა შეკუმშული ფაილი \"%s\": %m" -#: bbstreamer_gzip.c:103 +#: ../../fe_utils/astreamer_gzip.c:127 #, c-format msgid "could not duplicate stdout: %m" msgstr "stdout-ის დუბლირების შეცდომა: %m" -#: bbstreamer_gzip.c:107 +#: ../../fe_utils/astreamer_gzip.c:131 #, c-format msgid "could not open output file: %m" msgstr "გამოტანის ფაილის გახსნის შეცდომა: %m" -#: bbstreamer_gzip.c:111 +#: ../../fe_utils/astreamer_gzip.c:135 #, c-format msgid "could not set compression level %d: %s" msgstr "შეკუმშვის დონის დაყენების შეცდომა %d: %s" -#: bbstreamer_gzip.c:143 +#: ../../fe_utils/astreamer_gzip.c:167 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "შეკუმშული ფაილში (\"%s\") ჩაწერის შეცდომა: %s" -#: bbstreamer_gzip.c:167 +#: ../../fe_utils/astreamer_gzip.c:191 #, c-format msgid "could not close compressed file \"%s\": %m" msgstr "შეკუმშული ფაილის (\"%s\") დახურვის შეცდომა: %m" -#: bbstreamer_gzip.c:245 walmethods.c:880 +#: ../../fe_utils/astreamer_gzip.c:269 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "შეკუმშვის ბიბლიოთეკის ინიციალიზაციის შეცდომა" -#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 +#: ../../fe_utils/astreamer_gzip.c:320 ../../fe_utils/astreamer_lz4.c:356 +#: ../../fe_utils/astreamer_zstd.c:333 #, c-format msgid "could not decompress data: %s" msgstr "მონაცემების გაშლის შეცდომა: %s" -#: bbstreamer_inject.c:189 -#, c-format -msgid "unexpected state while injecting recovery settings" -msgstr "უცნობი მდგომარეობა აღდგენის ინფორმაციის ჩასმისას" - -#: bbstreamer_lz4.c:95 +#: ../../fe_utils/astreamer_lz4.c:97 #, c-format msgid "could not create lz4 compression context: %s" msgstr "lz4 შეკუმშვის კონტექსტის შექმნის შეცდომა: %s" -#: bbstreamer_lz4.c:140 +#: ../../fe_utils/astreamer_lz4.c:142 #, c-format msgid "could not write lz4 header: %s" msgstr "lz4 თავსართის ჩაწერის შეცდოა: %s" -#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 +#: ../../fe_utils/astreamer_lz4.c:191 ../../fe_utils/astreamer_zstd.c:185 +#: ../../fe_utils/astreamer_zstd.c:227 #, c-format msgid "could not compress data: %s" msgstr "მონაცემების შეკუმშვა შეუძლებელია: %s" -#: bbstreamer_lz4.c:241 +#: ../../fe_utils/astreamer_lz4.c:243 #, c-format msgid "could not end lz4 compression: %s" msgstr "lz4 შეკუმშვის დასრულების შეცდომა: %s" -#: bbstreamer_lz4.c:293 +#: ../../fe_utils/astreamer_lz4.c:295 #, c-format msgid "could not initialize compression library: %s" msgstr "შეკუმშვის ბიბლიოთეკის ინიციალიზება ვერ მოხერხდა: %s" -#: bbstreamer_tar.c:244 +#: ../../fe_utils/astreamer_tar.c:244 #, c-format msgid "tar file trailer exceeds 2 blocks" msgstr "tar ფაილის ბოლოსართი 2 ბლოკს სცდება" -#: bbstreamer_tar.c:249 +#: ../../fe_utils/astreamer_tar.c:249 #, c-format msgid "unexpected state while parsing tar archive" msgstr "მოულოდნელი მდგომარეობა tar არქივის დამუშავებისას" -#: bbstreamer_tar.c:292 +#: ../../fe_utils/astreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "tar-ის წევრს ცარიელი სახელი აქვს" -#: bbstreamer_tar.c:326 +#: ../../fe_utils/astreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "COPY-ის ნაკადი ბოლო ფაილის დასრულებამდე დასრულდა" -#: bbstreamer_zstd.c:85 +#: ../../fe_utils/astreamer_zstd.c:89 #, c-format msgid "could not create zstd compression context" msgstr "zstd შეკუმშვის კონტექსტის შექმნის შეცდომა" -#: bbstreamer_zstd.c:91 +#: ../../fe_utils/astreamer_zstd.c:95 #, c-format msgid "could not set zstd compression level to %d: %s" msgstr "zstd შეკუმშვის დონის %d-ზე დაყენების შეცდომა: %s" -#: bbstreamer_zstd.c:105 +#: ../../fe_utils/astreamer_zstd.c:109 #, c-format msgid "could not set compression worker count to %d: %s" msgstr "შეკუმშვის დამხმარე პროცესების რიცხვის %d-ზე დაყენების შეცდომა: %s" -#: bbstreamer_zstd.c:116 +#: ../../fe_utils/astreamer_zstd.c:120 #, c-format msgid "could not enable long-distance mode: %s" msgstr "long-distance რეჟიმი ვერ ჩავრთე: %s" -#: bbstreamer_zstd.c:275 +#: ../../fe_utils/astreamer_zstd.c:279 #, c-format msgid "could not create zstd decompression context" msgstr "zstd გაშლის კონტექსტის შექმნის შეცდომა" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "არასწორი მნიშვნელობა \"%s\" პარამეტრისთვის %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s არაა საზღვრებში %d-დან %d-მდე" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "უცნობი სინქრონიზაციის მეთოდი: %s" + +#: ../../fe_utils/recovery_gen.c:40 ../../fe_utils/recovery_gen.c:51 +#: ../../fe_utils/recovery_gen.c:90 ../../fe_utils/recovery_gen.c:110 +#: ../../fe_utils/recovery_gen.c:169 ../../fe_utils/recovery_gen.c:230 +#: pg_basebackup.c:1637 +#, c-format +msgid "out of memory" +msgstr "არასაკმარისი მეხსიერება" + +#: ../../fe_utils/recovery_gen.c:215 pg_basebackup.c:2249 streamutil.c:89 +#: streamutil.c:204 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/string_utils.c:587 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "გარსის ბრძანების არგუმენტი ხაზის გადატანას ან კარეტის დაბრუნებას შეიცავს: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:760 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "მონაცემთა ბაზის სახელი ხაზის გადატანას ან კარეტის დაბრუნებას შეიცავს: \"%s\"\n" + +#: astreamer_inject.c:189 +#, c-format +msgid "unexpected state while injecting recovery settings" +msgstr "უცნობი მდგომარეობა აღდგენის ინფორმაციის ჩასმისას" + #: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" @@ -496,14 +506,14 @@ msgstr "" "%s გაშვებული PostgreSQL სერვერის მარქაფს იღებს.\n" "\n" -#: pg_basebackup.c:394 pg_createsubscriber.c:216 pg_receivewal.c:79 -#: pg_recvlogical.c:86 +#: pg_basebackup.c:394 pg_createsubscriber.c:246 pg_receivewal.c:79 +#: pg_recvlogical.c:85 #, c-format msgid "Usage:\n" msgstr "გამოყენება:\n" -#: pg_basebackup.c:395 pg_createsubscriber.c:217 pg_receivewal.c:80 -#: pg_recvlogical.c:87 +#: pg_basebackup.c:395 pg_createsubscriber.c:247 pg_receivewal.c:80 +#: pg_recvlogical.c:86 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [პარამეტრი]...\n" @@ -525,7 +535,7 @@ msgstr " -D, --pgdata=საქაღლდე იღებს ბაზის #: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" -msgstr " -F, --format=p|t გამოტანის ფორმატი (plain (ნაგულისხმები), tar)\n" +msgstr " -F, --format=p|t გამოტანის ფორმატი (plain (ნაგულისხმევი), tar)\n" #: pg_basebackup.c:399 #, c-format @@ -653,12 +663,12 @@ msgstr " -P, --progress მიმდინარეობი msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=SLOTNAME გამოსაყენებელი სლოტი\n" -#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:109 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose დამატებითი ინფორმაციის გამოტანა\n" -#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:110 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" @@ -714,12 +724,12 @@ msgstr "" " --sync-method=მეთოდი\n" " ფაილების დისკზე სინქრონიზაციის მეთოდის დაყენება\n" -#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:111 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:112 #, c-format msgid "" "\n" @@ -733,12 +743,12 @@ msgstr "" msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR კავშირის სტრიქონი\n" -#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:114 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME მონაცემთა ბაზის სერვერის ჰოსტის ან სოკეტის საქაღალდე\n" -#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:115 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT მონაცემთა ბაზის სერვერის პორტი\n" @@ -752,23 +762,23 @@ msgstr "" " -s, --status-interval=INTERVAL=INTERVAL\n" " სერვერზე გაგზავნილ სტატუსის პაკეტებს შორის დაყოვნება(წამებში)\n" -#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:116 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=მომხმარებელი ბაზის მომხმარებლის სახელი\n" -#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:117 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password არასოდეს მკითხო პაროლი\n" -#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:118 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password პაროლის ყოველთვის კითხვა (ავტომატურად უნდა ხდებოდეს)\n" -#: pg_basebackup.c:448 pg_createsubscriber.c:235 pg_receivewal.c:106 -#: pg_recvlogical.c:118 +#: pg_basebackup.c:448 pg_createsubscriber.c:270 pg_receivewal.c:106 +#: pg_recvlogical.c:119 #, c-format msgid "" "\n" @@ -777,8 +787,8 @@ msgstr "" "\n" "შეცდომების შესახებ მიწერეთ: %s\n" -#: pg_basebackup.c:449 pg_createsubscriber.c:236 pg_receivewal.c:107 -#: pg_recvlogical.c:119 +#: pg_basebackup.c:449 pg_createsubscriber.c:271 pg_receivewal.c:107 +#: pg_recvlogical.c:120 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" @@ -788,8 +798,8 @@ msgstr "%s-ის საწყისი გვერდია: <%s>\n" msgid "could not read from ready pipe: %m" msgstr "მზა ფაიფიდან წაკითხვის შეცდომა: %m" -#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 -#: streamutil.c:518 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2259 +#: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "წინასწარ-ჩაწერადი ჟურნალის მდებარეობის დამუშავების შეცდომა: %s" @@ -804,512 +814,508 @@ msgstr "\"WAL\" ფაილების ჩაწერის დასრუ msgid "could not create pipe for background process: %m" msgstr "ფონური პროცესისთვის ფაიფის შექმნის შეცდომა: %m" -#: pg_basebackup.c:676 +#: pg_basebackup.c:677 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "შექმნილია რეპლიკაციის დროებითი სლოტი %s" -#: pg_basebackup.c:679 +#: pg_basebackup.c:680 #, c-format msgid "created replication slot \"%s\"" msgstr "შექმნილია რეპლიკაციის სლოტი %s" -#: pg_basebackup.c:728 +#: pg_basebackup.c:729 #, c-format msgid "could not create background process: %m" msgstr "ფონური პროცესის შექმნის შეცდომა: %m" -#: pg_basebackup.c:737 +#: pg_basebackup.c:738 #, c-format msgid "could not create background thread: %m" msgstr "ფონური ნაკადის შექმნის შეცდომა: %m" -#: pg_basebackup.c:776 +#: pg_basebackup.c:777 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "საქაღალდე \"%s\" არსებობს, მაგრამ ცარიელი არაა" -#: pg_basebackup.c:782 pg_createsubscriber.c:378 +#: pg_basebackup.c:783 pg_createsubscriber.c:420 #, c-format msgid "could not access directory \"%s\": %m" msgstr "საქაღალდის (%s) წვდომის შეცდომა: %m" -#: pg_basebackup.c:858 +#: pg_basebackup.c:859 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s კბ (100%%), %d/%d ცხრილების სივრცე %*s" msgstr[1] "%*s/%s კბ (100%%), %d/%d ცხრილების სივრცე %*s" -#: pg_basebackup.c:870 +#: pg_basebackup.c:871 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s კბ (%d%%), %d/%d ცხრილების სივრცე (%s%-*.*s)" msgstr[1] "%*s/%s კბ (%d%%), %d/%d ცხრილების სივრცე (%s%-*.*s)" -#: pg_basebackup.c:886 +#: pg_basebackup.c:887 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s კბ (%d%%), %d/%d ცხრილების სივრცე" msgstr[1] "%*s/%s კბ (%d%%), %d/%d ცხრილების სივრცე" -#: pg_basebackup.c:910 +#: pg_basebackup.c:911 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "გადაცემის სიჩქარის არასწორი მნიშვნელობა: %s" -#: pg_basebackup.c:912 +#: pg_basebackup.c:913 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "გადაცემის არასწორი სიჩქარე \"%s\": %m" -#: pg_basebackup.c:919 +#: pg_basebackup.c:920 #, c-format msgid "transfer rate must be greater than zero" msgstr "გადაცემის სიჩქარე ნულზე მეტი უნდა იყოს" -#: pg_basebackup.c:949 +#: pg_basebackup.c:950 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "--max-rate -ის არასწორი ერთეული: \"%s\"" -#: pg_basebackup.c:953 +#: pg_basebackup.c:954 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "გადაცემის სიჩქარე მთელი რიცხვის დიაპაზონს აღემატება: %s" -#: pg_basebackup.c:960 +#: pg_basebackup.c:961 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "გადაცემის სიჩქარის მნიშვნელობა დიაპაზონს გარეთაა: %s" -#: pg_basebackup.c:1022 +#: pg_basebackup.c:1023 #, c-format msgid "could not get COPY data stream: %s" msgstr "\"COPY\"-ის მონაცემების ნაკადის მიღების შეცდომა: %s" -#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 -#: receivelog.c:973 +#: pg_basebackup.c:1040 pg_recvlogical.c:450 pg_recvlogical.c:626 +#: receivelog.c:980 #, c-format msgid "could not read COPY data: %s" msgstr "\"COPY\"-ის მონაცემების წაკითხვის შეცდომა: %s" -#: pg_basebackup.c:1043 +#: pg_basebackup.c:1044 #, c-format msgid "background process terminated unexpectedly" msgstr "ფონური პროცესი მოულოდნელად დასრულდა" -#: pg_basebackup.c:1114 +#: pg_basebackup.c:1115 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "შეკუმშულ tar ფაილში მანიფესტის შეჩურთვა შეუძლებელია" -#: pg_basebackup.c:1115 +#: pg_basebackup.c:1116 #, c-format msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." msgstr "გამოიყენეთ კლიენტის მხარეს შეკუმშვა და გააგზავნეთ გამონატანი საქაღალდეში stdout-ის მაგიერ, ან გამოიყენეთ %s." -#: pg_basebackup.c:1131 +#: pg_basebackup.c:1132 #, c-format msgid "cannot parse archive \"%s\"" msgstr "არქივის დამუშავების შეცდომა: %s" -#: pg_basebackup.c:1132 +#: pg_basebackup.c:1133 #, c-format msgid "Only tar archives can be parsed." msgstr "შესაძლებელია მხოლოდ tar არქივების დამუშავება." -#: pg_basebackup.c:1134 +#: pg_basebackup.c:1135 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "Plain-ის ფორმატი არქივის დასამუშავებლად pg_basebackup-ს მოითხოვს." -#: pg_basebackup.c:1136 +#: pg_basebackup.c:1137 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "გამოსატან საქაღალდედ - -ის მითითება არქივის დასამუშავებლად pg_basebackup-ს მოითხოვს." -#: pg_basebackup.c:1138 +#: pg_basebackup.c:1139 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "-R პარამეტრს არქივის დასამუშავებლად pg_basebackup-ს მოითხოვს." -#: pg_basebackup.c:1357 +#: pg_basebackup.c:1358 #, c-format msgid "archives must precede manifest" msgstr "არქივები წინ უნდა უსწრებდეს მანიფესტს" -#: pg_basebackup.c:1372 +#: pg_basebackup.c:1373 #, c-format msgid "invalid archive name: \"%s\"" msgstr "არქივის არასწორი სახელი: \"%s\"" -#: pg_basebackup.c:1444 +#: pg_basebackup.c:1445 #, c-format msgid "unexpected payload data" msgstr "მოულოდნელი შიგთავსი" -#: pg_basebackup.c:1587 +#: pg_basebackup.c:1588 #, c-format msgid "empty COPY message" msgstr "შეტყობინება COPY ცარიელია" -#: pg_basebackup.c:1589 +#: pg_basebackup.c:1590 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "არასწორი COPY შეტყობინება ტიპით %d, სიგრძე %zu" -#: pg_basebackup.c:1789 +#: pg_basebackup.c:1790 #, c-format msgid "incompatible server version %s" msgstr "სერვერის შეუთავსებელი ვერსია %s" -#: pg_basebackup.c:1805 +#: pg_basebackup.c:1806 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "ჟურნალის ნაკადის გასათიშად -X none ან -X fetch გამოიყენეთ." -#: pg_basebackup.c:1841 +#: pg_basebackup.c:1842 #, c-format msgid "server does not support incremental backup" msgstr "სერვერს ინკრემენტული მარქაფის მხარდაჭერა არ გააჩნია" -#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 -#: receivelog.c:543 receivelog.c:582 streamutil.c:364 streamutil.c:438 -#: streamutil.c:490 streamutil.c:578 streamutil.c:730 streamutil.c:775 +#: pg_basebackup.c:1851 pg_basebackup.c:2009 pg_recvlogical.c:273 +#: receivelog.c:542 receivelog.c:581 streamutil.c:296 streamutil.c:370 +#: streamutil.c:422 streamutil.c:510 streamutil.c:667 streamutil.c:712 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "რეპლიკაციის ბრძანების (\"%s\") გაგზავნის შეცდომა: %s" -#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#: pg_basebackup.c:1857 pg_basebackup.c:1884 #, c-format msgid "could not upload manifest: %s" msgstr "ვერ ავტვირთე მანიფესტი: %s" -#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#: pg_basebackup.c:1860 pg_basebackup.c:1887 #, c-format msgid "could not upload manifest: unexpected status %s" msgstr "ვერ ავტვირთე მანიფესტი: მოულოდნელი სტატუსი %s" -#: pg_basebackup.c:1867 +#: pg_basebackup.c:1868 #, c-format msgid "could not send COPY data: %s" msgstr "ვერ გავაგზავნე COPY-ის მონაცემები: %s" -#: pg_basebackup.c:1877 +#: pg_basebackup.c:1878 #, c-format msgid "could not send end-of-COPY: %s" msgstr "ვერ გავაგზავნე end-of-COPY: %s" -#: pg_basebackup.c:1892 +#: pg_basebackup.c:1893 #, c-format msgid "unexpected extra result while sending manifest" msgstr "მოულოდნელი დამატებითი პასუხი მანიფესტის გაგზავნისას" -#: pg_basebackup.c:1950 +#: pg_basebackup.c:1951 #, c-format msgid "backup targets are not supported by this server version" msgstr "სერვერის ამ ვერსიას მარქაფის სამიზნის მხარდაჭერა არ გააჩნია" -#: pg_basebackup.c:1953 +#: pg_basebackup.c:1954 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "აღდგენის კონფიგურაციის ჩაწერა მაშინ, როცა მარქაფის სამიზნე გამოიყენება, შეუძლებელია" -#: pg_basebackup.c:1980 +#: pg_basebackup.c:1981 #, c-format msgid "server does not support server-side compression" msgstr "სერვერს თავის მხარეს შეკუმშვის მხარდაჭერა არ გააჩნია" -#: pg_basebackup.c:1990 +#: pg_basebackup.c:1991 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "ბაზის მარქაფის პროფესი დაიწყო. ველოდები საკონტროლო წერტილის დასასრულს" -#: pg_basebackup.c:1994 +#: pg_basebackup.c:1995 #, c-format msgid "waiting for checkpoint" msgstr "საკონტროლო წერტილის მოლოდინი" -#: pg_basebackup.c:2016 +#: pg_basebackup.c:2017 #, c-format msgid "could not initiate base backup: %s" msgstr "ბაზის მარქაფის ინიციალიზაციის შეცდომა: %s" -#: pg_basebackup.c:2019 +#: pg_basebackup.c:2020 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "სერვერმა BASE_BACKUP ბრძანებაზე მოულოდნელი პასუხი დააბრუნა; მივიღე %d მწკრივი და %d ველი, მოველოდი %d მწკრივს და %d ველს" -#: pg_basebackup.c:2025 +#: pg_basebackup.c:2026 #, c-format msgid "checkpoint completed" msgstr "საკონტროლო წერტილი დასრულებულია" -#: pg_basebackup.c:2039 +#: pg_basebackup.c:2040 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "წინასწარ-ჩაწერადი ჟურნალის საწყისი წერტილი: %s დროს ხაზზე %u" -#: pg_basebackup.c:2047 +#: pg_basebackup.c:2048 #, c-format msgid "could not get backup header: %s" msgstr "მარქაფის თავსართის მიღების შეცდომა: %s" -#: pg_basebackup.c:2050 +#: pg_basebackup.c:2051 #, c-format msgid "no data returned from server" msgstr "სერვერიდან მონაცემები არ დაბრუნებულა" -#: pg_basebackup.c:2093 +#: pg_basebackup.c:2094 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "stdout-ში მხოლოდ ერთი ცხრილების სივრცის ჩაწერა შეუძლია. ბაზას კი %d აქვს" -#: pg_basebackup.c:2106 +#: pg_basebackup.c:2107 #, c-format msgid "starting background WAL receiver" msgstr "ფონური WAL მიმღების გაშვება" -#: pg_basebackup.c:2189 +#: pg_basebackup.c:2190 #, c-format msgid "backup failed: %s" msgstr "მარქაფის შეცდომა: %s" -#: pg_basebackup.c:2192 +#: pg_basebackup.c:2193 #, c-format msgid "no write-ahead log end position returned from server" msgstr "სერვერიდან წინასწარ-ჩაწერადი ჟურნალის ბოლო პოზიცია არ დაბრუნებულა" -#: pg_basebackup.c:2195 +#: pg_basebackup.c:2196 #, c-format msgid "write-ahead log end point: %s" msgstr "წინასწარ-ჩაწერადი ჟურნალის ბოლო წერტილი: %s" -#: pg_basebackup.c:2206 +#: pg_basebackup.c:2207 #, c-format msgid "checksum error occurred" msgstr "საკონტროლო ჯამის შეცდომა" -#: pg_basebackup.c:2211 +#: pg_basebackup.c:2212 #, c-format msgid "final receive failed: %s" msgstr "მიღების დასრულების შეცდომა: %s" -#: pg_basebackup.c:2235 +#: pg_basebackup.c:2236 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "ფონური პროცესის მიერ ნაკადის დასრულების მოლოდინი ..." -#: pg_basebackup.c:2239 +#: pg_basebackup.c:2240 #, c-format msgid "could not send command to background pipe: %m" msgstr "ფონური ფაიფისთვის ბრძანების გაგზავნის შეცდომა: %m" -#: pg_basebackup.c:2244 +#: pg_basebackup.c:2245 #, c-format msgid "could not wait for child process: %m" msgstr "შვულეულ პროცესს ვერ დაველოდები: %m" -#: pg_basebackup.c:2246 +#: pg_basebackup.c:2247 #, c-format msgid "child %d died, expected %d" msgstr "%d შვილი მოკვდა, მოველოდი %d" -#: pg_basebackup.c:2248 streamutil.c:89 streamutil.c:204 streamutil.c:316 -#, c-format -msgid "%s" -msgstr "%s" - -#: pg_basebackup.c:2268 +#: pg_basebackup.c:2269 #, c-format msgid "could not wait for child thread: %m" msgstr "შვილეულ ნაკადს ვერ დაველოდები %m" -#: pg_basebackup.c:2273 +#: pg_basebackup.c:2274 #, c-format msgid "could not get child thread exit status: %m" msgstr "შვილეული ნაკადის გამოსვლის სტატუსის მიღების შეცდომა: %m" -#: pg_basebackup.c:2276 +#: pg_basebackup.c:2277 #, c-format msgid "child thread exited with error %u" msgstr "შვილეული ნაკადის შეცდომა: %u" -#: pg_basebackup.c:2305 +#: pg_basebackup.c:2306 #, c-format msgid "syncing data to disk ..." msgstr "მონაცემების სინქრონიზაცია დისკზე ..." -#: pg_basebackup.c:2330 +#: pg_basebackup.c:2331 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "backup_manifest.tmp -ის სახელის გადარქმევა backup_manifest" -#: pg_basebackup.c:2350 +#: pg_basebackup.c:2351 #, c-format msgid "base backup completed" msgstr "ბაზის მარქაფი დასრულდა" -#: pg_basebackup.c:2436 +#: pg_basebackup.c:2437 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "საკონტროლო წერტილის არასწორი არგუმენტი %s: უნდა იყოს \"fast\" an \"spread\"" -#: pg_basebackup.c:2454 +#: pg_basebackup.c:2455 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "\"%s\"-ის არასწორი გამოტანის ფორმატი. უნდა იყოს: \"plain\" ან \"tar\"" -#: pg_basebackup.c:2535 +#: pg_basebackup.c:2536 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "wal-method-ის არასწორი მნიშვნელობა: %s. უნდა იყოს \"fetch\", \"stream\" ან \"none\"" -#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 -#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 -#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 -#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 -#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 -#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 -#: pg_basebackup.c:2803 pg_createsubscriber.c:1907 pg_createsubscriber.c:1917 -#: pg_createsubscriber.c:1925 pg_createsubscriber.c:1953 -#: pg_createsubscriber.c:1985 pg_receivewal.c:748 pg_receivewal.c:760 -#: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 -#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 -#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 -#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 -#: pg_recvlogical.c:917 pg_recvlogical.c:924 +#: pg_basebackup.c:2575 pg_basebackup.c:2587 pg_basebackup.c:2609 +#: pg_basebackup.c:2621 pg_basebackup.c:2627 pg_basebackup.c:2679 +#: pg_basebackup.c:2690 pg_basebackup.c:2700 pg_basebackup.c:2706 +#: pg_basebackup.c:2713 pg_basebackup.c:2725 pg_basebackup.c:2737 +#: pg_basebackup.c:2745 pg_basebackup.c:2758 pg_basebackup.c:2764 +#: pg_basebackup.c:2773 pg_basebackup.c:2785 pg_basebackup.c:2796 +#: pg_basebackup.c:2804 pg_createsubscriber.c:2196 pg_createsubscriber.c:2218 +#: pg_createsubscriber.c:2228 pg_createsubscriber.c:2236 +#: pg_createsubscriber.c:2264 pg_createsubscriber.c:2307 pg_receivewal.c:748 +#: pg_receivewal.c:760 pg_receivewal.c:767 pg_receivewal.c:776 +#: pg_receivewal.c:783 pg_receivewal.c:793 pg_recvlogical.c:859 +#: pg_recvlogical.c:871 pg_recvlogical.c:881 pg_recvlogical.c:888 +#: pg_recvlogical.c:895 pg_recvlogical.c:902 pg_recvlogical.c:909 +#: pg_recvlogical.c:916 pg_recvlogical.c:923 pg_recvlogical.c:932 +#: pg_recvlogical.c:939 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: pg_basebackup.c:2584 pg_createsubscriber.c:1915 pg_receivewal.c:758 -#: pg_recvlogical.c:863 +#: pg_basebackup.c:2585 pg_createsubscriber.c:2226 pg_receivewal.c:758 +#: pg_recvlogical.c:869 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "მეტისმეტად ბევრი ბრძანების-სტრიქონის არგუმენტი (პირველია \"%s\")" -#: pg_basebackup.c:2607 +#: pg_basebackup.c:2608 #, c-format msgid "cannot specify both format and backup target" msgstr "ერთდროულად შეუძლებელია ორივე, ფორმატის და მარქაფის სამიზნის მითითება" -#: pg_basebackup.c:2619 +#: pg_basebackup.c:2620 #, c-format msgid "must specify output directory or backup target" msgstr "გამოტანის საქაღალდის ან მარქაფის სამიზნის მითითება აუცილებელია" -#: pg_basebackup.c:2625 +#: pg_basebackup.c:2626 #, c-format msgid "cannot specify both output directory and backup target" msgstr "ორივე, გამოტანის საქაღალდის და მარქაფის სამიზნის მითითება ერთდროულად შეუძლებელია" -#: pg_basebackup.c:2655 pg_receivewal.c:802 +#: pg_basebackup.c:2656 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "შეკუმშვის უცხო ალგორითმი: \"%s\"" -#: pg_basebackup.c:2661 pg_receivewal.c:809 +#: pg_basebackup.c:2662 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "შეკუმშვის არასწორი სპეციფიკაცია: %s" -#: pg_basebackup.c:2677 +#: pg_basebackup.c:2678 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "როცა მარქაფის სამიზნე მითითებულია, კლიენტის-მხრის შეკუმშვის მითითება შეუძლებელია" -#: pg_basebackup.c:2688 +#: pg_basebackup.c:2689 #, c-format msgid "only tar mode backups can be compressed" msgstr "შესაძლებელია მხოლოდ tar რეჟიმის მარქაფების შეკუმშვა" -#: pg_basebackup.c:2698 +#: pg_basebackup.c:2699 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "WAL-ის ნაკადი მაშინ, როცა მარქაფის სამიზნე მითითებულია, შეუძლებელია" -#: pg_basebackup.c:2704 +#: pg_basebackup.c:2705 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "წინასწარ-ჩაწერადი ჟურნალის ნაკადის tar-ის რეჟიმში stdout-ზე გამოტანა შეუძლებელია" -#: pg_basebackup.c:2711 +#: pg_basebackup.c:2712 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "რეპლიკაციის სლოტების გამოყენება მხოლოდ WAL ნაკადთან ერთადაა შესაძლებელი" -#: pg_basebackup.c:2723 +#: pg_basebackup.c:2724 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot სლოტის სახელთან ერთად არ გამოიყენება" #. translator: second %s is an option name -#: pg_basebackup.c:2734 pg_receivewal.c:774 +#: pg_basebackup.c:2735 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s-სთვის საჭიროა სლოტის მითითება --slot პარამეტრის საშუალებით" -#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 -#: pg_basebackup.c:2801 +#: pg_basebackup.c:2743 pg_basebackup.c:2783 pg_basebackup.c:2794 +#: pg_basebackup.c:2802 #, c-format msgid "%s and %s are incompatible options" msgstr "პარამეტრები %s და %s შეუთავსებელია" -#: pg_basebackup.c:2756 +#: pg_basebackup.c:2757 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "WAL საქაღალდის მდებარეობა მარქაფის სამიზნესთან ერთად მითითებული არ შეიძლება იყოს" -#: pg_basebackup.c:2762 +#: pg_basebackup.c:2763 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "WAL-ის საქაღალდის მდებარეობის მითითება მხოლოდ უბრალო რეჟიმშია შესაძლებელი" -#: pg_basebackup.c:2771 +#: pg_basebackup.c:2772 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL საქაღალდის მდებარეობა აბსოლუტური ბილიკი უნდა იყოს" -#: pg_basebackup.c:2871 +#: pg_basebackup.c:2872 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "სიმბმულის შექმნის შეცდომა %s: %m" -#: pg_createsubscriber.c:164 +#: pg_createsubscriber.c:189 #, c-format msgid "failed after the end of recovery" msgstr "ჩავარდა აღდგენის დასრულების შემდეგ" -#: pg_createsubscriber.c:165 +#: pg_createsubscriber.c:190 #, c-format msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." msgstr "სამიზნე სერვერს ფიზიკურ რეპლიკად ვეღარ გამოიყენებთ. გაგრძელებამდე ფიზიკური რეპლიკა თავიდან უნდა შექმნათ." -#: pg_createsubscriber.c:193 +#: pg_createsubscriber.c:221 #, c-format -msgid "publication \"%s\" in database \"%s\" on primary might be left behind" -msgstr "გამოცემა \"%s\" მონაცემთა ბაზაში \"%s\" ძირითადზე შეიძლება გამოტოვებულია" +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "გამოცემა \"%s\", შექმნილი მონაცემთა ბაზაში \"%s\" ძირითადზე, გამოტოვებულია" -#: pg_createsubscriber.c:195 +#: pg_createsubscriber.c:224 #, c-format -msgid "Consider dropping this publication before trying again." -msgstr "განიხილეთ ამ პუბლიკაციის გაუქმება ხელახლა ცდამდე." +msgid "Drop this publication before trying again." +msgstr "მოაცილეთ ეს გამოცემა, სანამ თავიდან სცდით." -#: pg_createsubscriber.c:199 +#: pg_createsubscriber.c:228 #, c-format -msgid "replication slot \"%s\" in database \"%s\" on primary might be left behind" -msgstr "რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაში \"%s\" ძირითადზე შეიძლება გამოტოვებულია" +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "რეპლიკაციის სლოტი \"%s\" შეიქმნა მონაცემთა ბაზაში \"%s\" ძირითადზე, შეიძლება, გამოტოვებულია" -#: pg_createsubscriber.c:201 pg_createsubscriber.c:1137 +#: pg_createsubscriber.c:231 pg_createsubscriber.c:1305 #, c-format msgid "Drop this replication slot soon to avoid retention of WAL files." msgstr "ამ რეპლიკაციის სლოტის მალე წაშლა WAL ფაილების მორჩენის თავიდან ასაცილებლად." -#: pg_createsubscriber.c:214 +#: pg_createsubscriber.c:244 #, c-format msgid "" "%s creates a new logical replica from a standby server.\n" @@ -1318,7 +1324,7 @@ msgstr "" "%s შექმნის ახალ ლოგიკური რეპლიკას უქმე სერვერიდან.\n" "\n" -#: pg_createsubscriber.c:218 pg_receivewal.c:81 pg_recvlogical.c:92 +#: pg_createsubscriber.c:248 pg_receivewal.c:81 pg_recvlogical.c:91 #, c-format msgid "" "\n" @@ -1327,599 +1333,676 @@ msgstr "" "\n" "პარამეტრები:\n" -#: pg_createsubscriber.c:219 +#: pg_createsubscriber.c:249 #, c-format -msgid " -d, --database=DBNAME database to create a subscription\n" +msgid "" +" -a, --all create subscriptions for all databases except template\n" +" databases or databases that don't allow connections\n" msgstr "" -" -d, --database=ბაზისსახელი გამოწერის შესაქმნელი ბაზის სახელი\n" -"\n" +" -a, --all გამოწერების შექმნა ყველა მონაცემთა ბაზისთვის გარდა შაბლონი\n" +" მონაცემთა ბაზების და მონაცემთა ბაზებისთვის, რომლებთანაც დაკავშირება აკრძალულია\n" -#: pg_createsubscriber.c:220 +#: pg_createsubscriber.c:251 #, c-format -msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" -msgstr "" -" -D, --pgdata=DATADIR გამომწერის მონაცემების საქაღალდის მდებარეობა\n" -"\n" +msgid " -d, --database=DBNAME database in which to create a subscription\n" +msgstr " -d, --database=ბაზისსახელი მონაცემთა ბაზა, რომელშიც გნებავთ, გამოწერა შექმნათ\n" -#: pg_createsubscriber.c:221 +#: pg_createsubscriber.c:252 #, c-format -msgid " -n, --dry-run dry run, just show what would be done\n" -msgstr " -n, --dry-run განახლების გარეშე. უბრალოდ ნაჩვენები იქნება, რა მოხდებოდა\n" +msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" +msgstr " -D, --pgdata=DATADIR გამომწერის მონაცემების საქაღალდის მდებარეობა\n" -#: pg_createsubscriber.c:222 +#: pg_createsubscriber.c:253 #, c-format -msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" -msgstr " -p, --subscriber-port=პორტი გამომწერის პორტის ნომერი (ნაგულისხმევი %s)\n" +msgid " -n, --dry-run dry run, just show what would be done\n" +msgstr " -n, --dry-run განახლების გარეშე. უბრალოდ ნაჩვენები იქნება, რა მოხდებოდა\n" -#: pg_createsubscriber.c:223 +#: pg_createsubscriber.c:254 #, c-format -msgid " -P, --publisher-server=CONNSTR publisher connection string\n" -msgstr " -P, --publisher-server=CONNSTR გამომცემელთან მიერთების სტრიქონი\n" +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr " -p, --subscriber-port=პორტი გამომწერის პორტის ნომერი (ნაგულისხმევი %s)\n" -#: pg_createsubscriber.c:224 +#: pg_createsubscriber.c:255 #, c-format -msgid " -s, --socket-directory=DIR socket directory to use (default current directory)\n" -msgstr " -s, --socketdir=DIR სოკეტის საქაღალდე (ნაგულისხმევია მიმდინარე.)\n" +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr " -P, --publisher-server=CONNSTR გამომცემელთან მიერთების სტრიქონი\n" -#: pg_createsubscriber.c:225 +#: pg_createsubscriber.c:256 #, c-format -msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgid "" +" -R, --remove=OBJECTTYPE remove all objects of the specified type from specified\n" +" databases on the subscriber; accepts: publications\n" msgstr "" -" -t, --recovery-timeout=წამები რამდენი წამი დაველოდო აღდგენის დასრულებას\n" -"\n" +" -R, --remove=ობიექტისტიპი წაშლის მითითებული ტიპის ყველა ობიექტს მითითებული\n" +" მონაცემთა ბაზებიდან გამომწერზე. იღებს: გამოცემებს\n" -#: pg_createsubscriber.c:226 +#: pg_createsubscriber.c:258 #, c-format -msgid " -U, --subscriber-username=NAME subscriber username\n" -msgstr "" -" -U, --subscriber-username=სახელი გამომწერის მომხმარებლის სახელი\n" -"\n" +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=DIR სოკეტის საქაღალდე (ნაგულისხმევია მიმდინარე.)\n" + +#: pg_createsubscriber.c:259 +#, c-format +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr " -t, --recovery-timeout=წამები რამდენი წამი დაველოდო აღდგენის დასრულებას\n" + +#: pg_createsubscriber.c:260 +#, c-format +msgid " -T, --enable-two-phase enable two-phase commit for all subscriptions\n" +msgstr " -T, --enable-two-phase ორფაზიანი კომიტების ჩართვა ყველა გამოწერისთვის\n" + +#: pg_createsubscriber.c:261 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=სახელი მომხმარებლის სახელი გამომწერის კავშირისთვის\n" -#: pg_createsubscriber.c:227 +#: pg_createsubscriber.c:262 #, c-format -msgid " -v, --verbose output verbose messages\n" +msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose დამატებითი ინფორმაციის გამოტანა\n" -#: pg_createsubscriber.c:228 +#: pg_createsubscriber.c:263 #, c-format msgid "" -" --config-file=FILENAME use specified main server configuration\n" -" file when running target cluster\n" +" --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" msgstr "" " --config-file=FILENAME სამიზნე კლასტერის გაშვებისას მთავარი \n" -" სერვერის მითითებული კონფიგურაციის ფაილში გამოყენება\n" +" სერვერის მითითებული კონფიგურაციის ფაილის გამოყენება\n" -#: pg_createsubscriber.c:230 +#: pg_createsubscriber.c:265 #, c-format -msgid " --publication=NAME publication name\n" +msgid " --publication=NAME publication name\n" msgstr " --publication=NAME პუბლიკაციის სახელი\n" -#: pg_createsubscriber.c:231 +#: pg_createsubscriber.c:266 #, c-format -msgid " --replication-slot=NAME replication slot name\n" -msgstr " --replication-slot=სახელი რეპლიკაციის სლოტის სახელი\n" +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=სახელი რეპლიკაციის სლოტის სახელი\n" -#: pg_createsubscriber.c:232 +#: pg_createsubscriber.c:267 #, c-format -msgid " --subscription=NAME subscription name\n" -msgstr " --subscription=NAME გამოწერის სახელი\n" +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=NAME გამოწერის სახელი\n" -#: pg_createsubscriber.c:233 +#: pg_createsubscriber.c:268 #, c-format -msgid " -V, --version output version information, then exit\n" +msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: pg_createsubscriber.c:234 +#: pg_createsubscriber.c:269 #, c-format -msgid " -?, --help show this help, then exit\n" +msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: pg_createsubscriber.c:265 +#: pg_createsubscriber.c:312 #, c-format msgid "could not parse connection string: %s" msgstr "შეერთების სტრიქონის დამუშავების შეცდომა: %s" -#: pg_createsubscriber.c:347 +#: pg_createsubscriber.c:389 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" msgstr "პროგრამა \"%s\" სჭირდება \"%s\"-ს, მაგრამ იგივე საქაღალდეში, სადაც \"%s\", ნაპოვნი არაა" -#: pg_createsubscriber.c:350 +#: pg_createsubscriber.c:392 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" msgstr "პროგრამა „%s“ ნაპოვნია „%s“-ის მიერ, მაგრამ ვერსია, იგივეა არაა, რაც %s" -#: pg_createsubscriber.c:370 +#: pg_createsubscriber.c:412 #, c-format msgid "checking if directory \"%s\" is a cluster data directory" msgstr "შემოწმება, არის თუ არა საქაღალდე \"%s\" კლასტერის მონაცემების საქაღალდე" -#: pg_createsubscriber.c:376 +#: pg_createsubscriber.c:418 #, c-format msgid "data directory \"%s\" does not exist" msgstr "მონაცემების საქაღალდე არ არსებობს: \"%s\"" -#: pg_createsubscriber.c:384 +#: pg_createsubscriber.c:426 #, c-format msgid "directory \"%s\" is not a database cluster directory" msgstr "საქაღალდე \"%s\" ბაზის კლასტერის საქაღალდეს არ წარმოადგენს" -#: pg_createsubscriber.c:501 +#: pg_createsubscriber.c:544 #, c-format msgid "connection to database failed: %s" msgstr "მონაცემთა ბაზასთან მიერთება ჩავარდა: %s" -#: pg_createsubscriber.c:514 +#: pg_createsubscriber.c:557 streamutil.c:230 #, c-format -msgid "could not clear search_path: %s" -msgstr "search_path-ის გასუფთავების პრობლემა: %s" +msgid "could not clear \"search_path\": %s" +msgstr "\"search_path\"-ის გასუფთავების პრობლემა: %s" -#: pg_createsubscriber.c:554 +#: pg_createsubscriber.c:597 #, c-format msgid "getting system identifier from publisher" msgstr "სისტემური იდენტიფიკატორის მიღება გამომცემლისგან" -#: pg_createsubscriber.c:561 +#: pg_createsubscriber.c:604 #, c-format msgid "could not get system identifier: %s" msgstr "ვერ მივიღე სისტემის იდენტიფიკატორი: %s" -#: pg_createsubscriber.c:567 +#: pg_createsubscriber.c:610 #, c-format msgid "could not get system identifier: got %d rows, expected %d row" msgstr "სისტემური იდენტიფიკატორის მიღება შეუძლებელია: მივიღე %d მწკრივი. მოველოდი %d მწკრივს" -#: pg_createsubscriber.c:574 +#: pg_createsubscriber.c:617 #, c-format -msgid "system identifier is %llu on publisher" -msgstr "სისტემური იდენტიფიკატორი გამომცემელზე %llu-ია" +msgid "system identifier is % on publisher" +msgstr "სისტემური იდენტიფიკატორი % გამომცემელზეა" -#: pg_createsubscriber.c:595 +#: pg_createsubscriber.c:637 #, c-format msgid "getting system identifier from subscriber" msgstr "სისტემური იდენტიფიკატორის მიღება გამომწერისგან" -#: pg_createsubscriber.c:599 pg_createsubscriber.c:629 +#: pg_createsubscriber.c:641 pg_createsubscriber.c:670 #, c-format msgid "control file appears to be corrupt" msgstr "როგორც ჩანს, საკონტროლო ფაილი დაზიანებულია" -#: pg_createsubscriber.c:603 pg_createsubscriber.c:644 +#: pg_createsubscriber.c:645 pg_createsubscriber.c:685 #, c-format -msgid "system identifier is %llu on subscriber" -msgstr "სისტემური იდენტიფიკატორი %llu გამომწერზეა" +msgid "system identifier is % on subscriber" +msgstr "სისტემური იდენტიფიკატორი % გამომწერზეა" -#: pg_createsubscriber.c:625 +#: pg_createsubscriber.c:666 #, c-format msgid "modifying system identifier of subscriber" msgstr "გამომწერის სისტემური იდენტიფიკატორის შეცვლა" -#: pg_createsubscriber.c:647 +#: pg_createsubscriber.c:688 #, c-format msgid "running pg_resetwal on the subscriber" msgstr "pg_resetwal-ის გაშვება გამომწერზე" -#: pg_createsubscriber.c:659 +#: pg_createsubscriber.c:700 #, c-format msgid "subscriber successfully changed the system identifier" msgstr "გამომწერმა სისტემური იდენტიფიკატორი წარმატებით შეცვალა" -#: pg_createsubscriber.c:661 +#: pg_createsubscriber.c:702 #, c-format -msgid "subscriber failed to change system identifier: exit code: %d" -msgstr "გამომწერის სისტემური იდენტიფიკატორის შეცვლა ჩავარდა: გამოსვლის კოდი: %d" +msgid "could not change system identifier of subscriber: %s" +msgstr "ვერ შევცვალე სისტემურ იდენტიფიკატორი გამომწერისთვის: %s" -#: pg_createsubscriber.c:685 +#: pg_createsubscriber.c:726 #, c-format msgid "could not obtain database OID: %s" msgstr "ვერ მივიღე მონაცემთა ბაზის OID: %s" -#: pg_createsubscriber.c:692 +#: pg_createsubscriber.c:733 #, c-format msgid "could not obtain database OID: got %d rows, expected %d row" msgstr "ვერ მივიღე მონაცემთა ბაზის OID: მივიღე %d მწკრივი, მოველოდი %d მწკრივს" -#: pg_createsubscriber.c:764 +#: pg_createsubscriber.c:805 #, c-format msgid "create replication slot \"%s\" on publisher" msgstr "რეპლიკაციის სლოტის \"%s\" შექმნა გამომცემელზე" -#: pg_createsubscriber.c:788 +#: pg_createsubscriber.c:825 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "ვერ ჩავწერე დამატებითი WAL ჩანაწერი: %s" + +#: pg_createsubscriber.c:851 #, c-format msgid "could not obtain recovery progress: %s" msgstr "აღდგენის მიმდინარეობის მდგომარეობის მიღება შეუძლებელია: %s" -#: pg_createsubscriber.c:819 +#: pg_createsubscriber.c:884 #, c-format msgid "checking settings on publisher" msgstr "პარამეტრების შექმნა გამომცემელზე" -#: pg_createsubscriber.c:829 +#: pg_createsubscriber.c:894 #, c-format msgid "primary server cannot be in recovery" msgstr "ძირითადი სერვერი აღდგენის რეჟიმში ვერ იქნება" -#: pg_createsubscriber.c:864 +#: pg_createsubscriber.c:920 #, c-format msgid "could not obtain publisher settings: %s" msgstr "გამომცემლის პარამეტრების მიღება შეუძლებელია: %s" -#: pg_createsubscriber.c:887 +#: pg_createsubscriber.c:949 #, c-format -msgid "publisher requires wal_level >= \"logical\"" -msgstr "გამომცემელს wal_level >= \"logical\" ესაჭიროება" +msgid "publisher requires \"wal_level\" >= \"logical\"" +msgstr "გამომცემელს \"wal_level\" >= \"logical\" ესაჭიროება" -#: pg_createsubscriber.c:893 +#: pg_createsubscriber.c:955 #, c-format msgid "publisher requires %d replication slots, but only %d remain" msgstr "გამომცემელს %d რეპლიკაციის სლოტი სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" -#: pg_createsubscriber.c:895 pg_createsubscriber.c:994 +#: pg_createsubscriber.c:957 pg_createsubscriber.c:966 +#: pg_createsubscriber.c:1076 pg_createsubscriber.c:1085 +#: pg_createsubscriber.c:1094 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "გაზარდეთ კონფიგურაციის პარამეტრი \"%s\" %d-მდე მაინც." + +#: pg_createsubscriber.c:964 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "გამომცემელს %d WAL-ის გამგზავნი პროცესი სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" + +#: pg_createsubscriber.c:973 #, c-format -msgid "Consider increasing max_replication_slots to at least %d." -msgstr "განიხილეთ max_replication_slots-ის გაზრდა მინიმუმ %d-მდე." +msgid "two_phase option will not be enabled for replication slots" +msgstr "პარამეტრი two_phase რეპლიკაციის სლოტებისთვის არ ჩაირთვება" -#: pg_createsubscriber.c:902 +#: pg_createsubscriber.c:974 #, c-format -msgid "publisher requires %d wal sender processes, but only %d remain" -msgstr "გამომცემელს %d wal გამგზავნი პროცესი სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "გამოწერები two_phase პარამეტრით გათიშული შეიქმნება. მომზადებული ტრანზაქციების რეპლიკაცია მოხდება COMMIT PREPARED-თან." -#: pg_createsubscriber.c:904 +#: pg_createsubscriber.c:976 #, c-format -msgid "Consider increasing max_wal_senders to at least %d." -msgstr "განიხილეთ max_wal_senders-ის გაზრდა მინიმუმ %d-მდე." +msgid "You can use --enable-two-phase switch to enable two_phase." +msgstr "'two_phase'-ის ჩასართავად, შეგიძლიათ, გამოიყენოთ პარამეტრი --enable-two-phase." -#: pg_createsubscriber.c:937 +#: pg_createsubscriber.c:986 +#, c-format +msgid "required WAL could be removed from the publisher" +msgstr "აუცილებელი WAL-ის წაშლა შესაძლებელია გამომცემლიდან" + +#: pg_createsubscriber.c:987 +#, c-format +msgid "Set the configuration parameter \"%s\" to -1 to ensure that required WAL files are not prematurely removed." +msgstr "დააყენეთ კონფიგურაციის პარამეტრი \"%s\" მნიშვნელობაზე -1, რომ დარწმუნდეთ, რომ WAL ფაილები საჭიროზე ადრე არ წაიშლება." + +#: pg_createsubscriber.c:1019 #, c-format msgid "checking settings on subscriber" msgstr "პარამეტრების შემოწმება გამომწერზე" -#: pg_createsubscriber.c:944 +#: pg_createsubscriber.c:1026 #, c-format msgid "target server must be a standby" msgstr "სამიზნე სერვერი უქმე უნდა იყოს" -#: pg_createsubscriber.c:968 +#: pg_createsubscriber.c:1050 #, c-format msgid "could not obtain subscriber settings: %s" msgstr "გამომწერის პარამეტრების მიღება შეუძლებელია: %s" -#: pg_createsubscriber.c:992 +#: pg_createsubscriber.c:1074 #, c-format -msgid "subscriber requires %d replication slots, but only %d remain" -msgstr "გამომწერს %d რეპლიკაციის სლოტი სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" +msgid "subscriber requires %d active replication origins, but only %d remain" +msgstr "გამომწერს %d აქტიური რეპლიკაციის წყარო სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" -#: pg_createsubscriber.c:1001 +#: pg_createsubscriber.c:1083 #, c-format msgid "subscriber requires %d logical replication workers, but only %d remain" msgstr "გამომწერს %d ლოგიკური რეპლიკაციის დამხმარე პროცესი სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" -#: pg_createsubscriber.c:1003 -#, c-format -msgid "Consider increasing max_logical_replication_workers to at least %d." -msgstr "განიხილეთ max_logical_replication_workers-ის გაზრდა მინიმუმ %d-მდე." - -#: pg_createsubscriber.c:1010 +#: pg_createsubscriber.c:1092 #, c-format msgid "subscriber requires %d worker processes, but only %d remain" msgstr "გამომწერს %d დამხმარე პროცესი სჭირდება, მაგრამ დარჩენილია, მხოლოდ, %d" -#: pg_createsubscriber.c:1012 +#: pg_createsubscriber.c:1127 #, c-format -msgid "Consider increasing max_worker_processes to at least %d." -msgstr "განიხილეთ max_worker_processes-ის გაზრდა მინიმუმ %d-მდე." +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "მოხდება მოცილება გამოწერისა \"%s\" მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1135 +#: pg_createsubscriber.c:1136 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "ვერ მოვაცილე გამოწერა \"%s\": %s" + +#: pg_createsubscriber.c:1171 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "ვერ მივიღე უკვე არსებული გამოწერები: %s" + +#: pg_createsubscriber.c:1303 #, c-format msgid "could not drop replication slot \"%s\" on primary" msgstr "ვერ წავშალე რეპლიკაციის სლოტი \"%s\" ძირითადზე" -#: pg_createsubscriber.c:1169 +#: pg_createsubscriber.c:1337 #, c-format msgid "could not obtain failover replication slot information: %s" msgstr "გადასართველი რეპლიკაციის სლოტის ინფორმაციის მიღება შეუძლებელია: %s" -#: pg_createsubscriber.c:1171 pg_createsubscriber.c:1180 +#: pg_createsubscriber.c:1339 pg_createsubscriber.c:1348 #, c-format msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." msgstr "გამომწერზე გადასართველი რეპლიკაციის სლოტების მალე წაშლა WAL ფაილების მორჩენის თავიდან ასაცილებლად." -#: pg_createsubscriber.c:1179 +#: pg_createsubscriber.c:1347 #, c-format msgid "could not drop failover replication slot" msgstr "გადასართველი რეპლიკაციის სლოტი წაშლა შეუძლებელია" -#: pg_createsubscriber.c:1201 +#: pg_createsubscriber.c:1369 #, c-format -msgid "creating the replication slot \"%s\" on database \"%s\"" -msgstr "იქმნება რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაზე \"%s\"" +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "იქმნება რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1219 +#: pg_createsubscriber.c:1388 #, c-format -msgid "could not create replication slot \"%s\" on database \"%s\": %s" -msgstr "ვერ შევქმენი რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაზე \"%s\": %s" +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "ვერ შევქმენი რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაში \"%s\": %s" -#: pg_createsubscriber.c:1249 +#: pg_createsubscriber.c:1418 #, c-format -msgid "dropping the replication slot \"%s\" on database \"%s\"" -msgstr "იშლება რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაზე \"%s\"" +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "იშლება რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1265 +#: pg_createsubscriber.c:1434 #, c-format -msgid "could not drop replication slot \"%s\" on database \"%s\": %s" -msgstr "ვერ წავშალე რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაზე \"%s\": %s" +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "ვერ წავშალე რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზაში \"%s\": %s" -#: pg_createsubscriber.c:1286 +#: pg_createsubscriber.c:1455 #, c-format msgid "pg_ctl failed with exit code %d" msgstr "pg_ctl ჩავარდა გამოსვლის კოდით %d" -#: pg_createsubscriber.c:1291 +#: pg_createsubscriber.c:1460 #, c-format msgid "pg_ctl was terminated by exception 0x%X" msgstr "pg_ctl შეწყდა გამონაკლისით 0x%X" -#: pg_createsubscriber.c:1293 +#: pg_createsubscriber.c:1462 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "თექვსმეტობითი მნიშვნელობის აღწერისთვის იხილეთ C-ის ჩასასმელი ფაილი \"ntstatus.h\"." -#: pg_createsubscriber.c:1295 +#: pg_createsubscriber.c:1464 #, c-format msgid "pg_ctl was terminated by signal %d: %s" msgstr "pg_ctl შეწყვეტილია სიგნალით %d: %s" -#: pg_createsubscriber.c:1301 +#: pg_createsubscriber.c:1470 #, c-format msgid "pg_ctl exited with unrecognized status %d" msgstr "pg_ctl დასრულდა უცნობი სტატუსით %d" -#: pg_createsubscriber.c:1304 +#: pg_createsubscriber.c:1473 #, c-format msgid "The failed command was: %s" msgstr "ჩავარდნილი ბრძანება იყო: %s" -#: pg_createsubscriber.c:1343 +#: pg_createsubscriber.c:1523 #, c-format msgid "server was started" msgstr "სერვერი გაეშვა" -#: pg_createsubscriber.c:1358 +#: pg_createsubscriber.c:1538 #, c-format msgid "server was stopped" msgstr "სერვერი გამოირთო" -#: pg_createsubscriber.c:1377 +#: pg_createsubscriber.c:1557 #, c-format msgid "waiting for the target server to reach the consistent state" msgstr "სამიზნე სერვერის მდგრად მდგომარეობაში გადასვლის მოლოდინი" -#: pg_createsubscriber.c:1400 +#: pg_createsubscriber.c:1580 #, c-format msgid "recovery timed out" msgstr "აღდგენის მოლოდინის ვადა ამოიწურა" -#: pg_createsubscriber.c:1413 +#: pg_createsubscriber.c:1593 #, c-format msgid "server did not end recovery" msgstr "სერვერმა აღდგენა არ დაამთავრა" -#: pg_createsubscriber.c:1415 +#: pg_createsubscriber.c:1595 #, c-format msgid "target server reached the consistent state" msgstr "სამიზნე სერვერმა მიაღწია მდგრად მდგომარეობას" -#: pg_createsubscriber.c:1416 +#: pg_createsubscriber.c:1596 #, c-format msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." msgstr "თუ ამ წერტილის შემდეგ pg_createsubscriber ჩავარდება, გაგრძელებამდე ფიზიკური რეპლიკა თავიდან უნდა შექმნათ." -#: pg_createsubscriber.c:1443 +#: pg_createsubscriber.c:1623 pg_createsubscriber.c:1746 #, c-format msgid "could not obtain publication information: %s" msgstr "გამოცემის ინფორმაციის მიღება შეუძლებელია: %s" -#: pg_createsubscriber.c:1457 +#: pg_createsubscriber.c:1637 #, c-format msgid "publication \"%s\" already exists" msgstr "პუბლიკაცია \"%s\" უკვე არსებობს" -#: pg_createsubscriber.c:1458 +#: pg_createsubscriber.c:1638 #, c-format msgid "Consider renaming this publication before continuing." msgstr "განიხილეთ ამ პუბლიკაციის სახელის გადარქმევა ხელახლა ცდამდე." -#: pg_createsubscriber.c:1465 +#: pg_createsubscriber.c:1645 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "იქმნება გამოცემა \"%s\" მონაცემთა ბაზაში \"%s\"" + +#: pg_createsubscriber.c:1658 #, c-format -msgid "creating publication \"%s\" on database \"%s\"" -msgstr "იქმნება გამოცემა \"%s\" მონაცემთა ბაზაზე \"%s\"" +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "ვერ შევქმენი გამოცემა \"%s\" მონაცემთა ბაზაში \"%s\": %s" -#: pg_createsubscriber.c:1478 +#: pg_createsubscriber.c:1688 #, c-format -msgid "could not create publication \"%s\" on database \"%s\": %s" -msgstr "ვერ შევქმენი გამოცემა \"%s\" მონაცემთა ბაზაზე \"%s\": %s" +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "ვშლი გამოცემას \"%s\" მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1507 +#: pg_createsubscriber.c:1702 #, c-format -msgid "dropping publication \"%s\" on database \"%s\"" -msgstr "ვშლი გამოცემას \"%s\" მონაცემთა ბაზაზე \"%s\"" +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "ვერ წავშალე გამოცემა \"%s\" მონაცემთა ბაზაში \"%s\": %s" -#: pg_createsubscriber.c:1521 +#: pg_createsubscriber.c:1739 #, c-format -msgid "could not drop publication \"%s\" on database \"%s\": %s" -msgstr "ვერ წავშალე გამოცემა \"%s\" მონაცემთა ბაზაზე \"%s\": %s" +msgid "dropping all existing publications in database \"%s\"" +msgstr "ვშლი ყველა არსებულ გამოცემას მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1567 +#: pg_createsubscriber.c:1797 #, c-format -msgid "creating subscription \"%s\" on database \"%s\"" -msgstr "იქმნება გამოწერა \"%s\" მონაცემთა ბაზაზე \"%s\"" +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "იქმნება გამოწერა \"%s\" მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1588 +#: pg_createsubscriber.c:1819 #, c-format -msgid "could not create subscription \"%s\" on database \"%s\": %s" -msgstr "ვერ შევქმენი გამოწერა \"%s\" მონაცემთა ბაზაზე \"%s\": %s" +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "ვერ შევქმენი გამოწერა \"%s\" მონაცემთა ბაზაში \"%s\": %s" -#: pg_createsubscriber.c:1633 +#: pg_createsubscriber.c:1864 #, c-format msgid "could not obtain subscription OID: %s" msgstr "ვერ მივიღე გამოწერის OID: %s" -#: pg_createsubscriber.c:1640 +#: pg_createsubscriber.c:1871 #, c-format msgid "could not obtain subscription OID: got %d rows, expected %d row" msgstr "ვერ მივიღე გამოწერის OID: მივიღე %d მწკრივი, მოველოდი %d მწკრივს" -#: pg_createsubscriber.c:1664 +#: pg_createsubscriber.c:1895 #, c-format -msgid "setting the replication progress (node name \"%s\" ; LSN %s) on database \"%s\"" +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" msgstr "რეპლიკაციის მიმდინარეობის (კვანძის სახელი \"%s\", LSN %s) დაყენება მონაცემთა ბაზაზე \"%s\"" -#: pg_createsubscriber.c:1679 +#: pg_createsubscriber.c:1910 #, c-format -msgid "could not set replication progress for the subscription \"%s\": %s" +msgid "could not set replication progress for subscription \"%s\": %s" msgstr "შეუძლებელია რეპლიკაციის მიმდინარეობის დაყენება გამოწერისთვის \"%s\": %s" -#: pg_createsubscriber.c:1710 +#: pg_createsubscriber.c:1941 #, c-format -msgid "enabling subscription \"%s\" on database \"%s\"" -msgstr "ჩაირთვება გამოწერა \"%s\" მონაცემთა ბაზაზე \"%s\"" +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "ჩაირთვება გამოწერა \"%s\" მონაცემთა ბაზაში \"%s\"" -#: pg_createsubscriber.c:1722 +#: pg_createsubscriber.c:1953 #, c-format msgid "could not enable subscription \"%s\": %s" msgstr "ვერ ჩავრთე გამოწერა \"%s\": %s" -#: pg_createsubscriber.c:1814 +#: pg_createsubscriber.c:1999 +#, c-format +msgid "could not obtain a list of databases: %s" +msgstr "ვერ მივიღე მონაცემთა ბაზების სია: %s" + +#: pg_createsubscriber.c:2103 #, c-format msgid "cannot be executed by \"root\"" msgstr "root-ით ვერ გაეშვება" -#: pg_createsubscriber.c:1815 +#: pg_createsubscriber.c:2104 #, c-format msgid "You must run %s as the PostgreSQL superuser." msgstr "%s PostgreSQL-ის ზემომხმარებლით უნდა გაუშვათ." -#: pg_createsubscriber.c:1836 +#: pg_createsubscriber.c:2127 +#, c-format +msgid "database \"%s\" specified more than once for -d/--database" +msgstr "მონაცემთა ბაზა \"%s\" ერთზე მეტჯერაა მითითებული პარამეტრისთვის -d/--database" + +#: pg_createsubscriber.c:2146 +#, c-format +msgid "object type \"%s\" is specified more than once for -R/--remove" +msgstr "პარამეტრისთვის -R/--remove ობიექტის ტიპი \"%s\" ერთზე მეტჯერაა მითითებული" + +#: pg_createsubscriber.c:2174 #, c-format -msgid "duplicate database \"%s\"" -msgstr "განმეორებადი ბაზა \"%s\"" +msgid "publication \"%s\" specified more than once for --publication" +msgstr "პუბლიკაცია \"%s\" მითითებულია ერთზე მეტჯერ პარამეტრისთვის --publication" -#: pg_createsubscriber.c:1877 +#: pg_createsubscriber.c:2183 #, c-format -msgid "duplicate publication \"%s\"" -msgstr "განმეორებადი გამოცემა \"%s\"" +msgid "replication slot \"%s\" specified more than once for --replication-slot" +msgstr "რეპლიკაციის სლოტი \"%s\" მითითებულია ერთზე მეტჯერ პარამეტრისთვის --repilication-slot" -#: pg_createsubscriber.c:1889 +#: pg_createsubscriber.c:2192 #, c-format -msgid "duplicate replication slot \"%s\"" -msgstr "განმეორებადი რეპლიკაციის სლოტი \"%s\"" +msgid "subscription \"%s\" specified more than once for --subscription" +msgstr "გამოწერა \"%s\" მითითებულია ერთზე მეტჯერ პარამეტრისთვის --subscription" -#: pg_createsubscriber.c:1901 +#: pg_createsubscriber.c:2217 #, c-format -msgid "duplicate subscription \"%s\"" -msgstr "განმეორებადი გამოწერა \"%s\"" +msgid "%s cannot be used with -a/--all" +msgstr "%s-ს ვერ გამოიყენებთ -a/--all -თან ერთად" -#: pg_createsubscriber.c:1924 +#: pg_createsubscriber.c:2235 #, c-format msgid "no subscriber data directory specified" msgstr "გამომწერის მონაცემების საქაღალდე მითითებული არაა" -#: pg_createsubscriber.c:1935 +#: pg_createsubscriber.c:2246 #, c-format msgid "could not determine current directory" msgstr "მიმდინარე საქაღალდის იდენტიფიკაციის პრობლემა" -#: pg_createsubscriber.c:1952 +#: pg_createsubscriber.c:2263 #, c-format msgid "no publisher connection string specified" msgstr "გამომცემლის მიერთების სტრიქონი მითითებული არაა" -#: pg_createsubscriber.c:1956 +#: pg_createsubscriber.c:2267 #, c-format -msgid "validating connection string on publisher" -msgstr "შეერთების სტრიქონის დადასტურება გამომცემელზე" +msgid "validating publisher connection string" +msgstr "გამომცემლის მიერთების სტრიქონის გადამოწმება" -#: pg_createsubscriber.c:1962 +#: pg_createsubscriber.c:2273 #, c-format -msgid "validating connection string on subscriber" -msgstr "შეერთების სტრიქონის დადასტურება გამომწერზე" +msgid "validating subscriber connection string" +msgstr "მიმდინარეობს გამომწერის დაკავშირების სტრიქონის გადამოწმება" -#: pg_createsubscriber.c:1967 +#: pg_createsubscriber.c:2290 #, c-format msgid "no database was specified" msgstr "ბაზა მითითებული არაა" -#: pg_createsubscriber.c:1979 +#: pg_createsubscriber.c:2301 #, c-format -msgid "database \"%s\" was extracted from the publisher connection string" -msgstr "ბაზა \"%s\" ამოღებულია გამომცემლის მიერთების სტრიქონიიდან" +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "ბაზა \"%s\" გამოღებულია გამომცემლის მიერთების სტრიქონიდან" -#: pg_createsubscriber.c:1984 +#: pg_createsubscriber.c:2306 #, c-format msgid "no database name specified" msgstr "ბაზის სახელი მითითებული არაა" -#: pg_createsubscriber.c:1994 +#: pg_createsubscriber.c:2316 #, c-format -msgid "wrong number of publication names" -msgstr "გამოცემის სახელების არასწორი რაოდენობა" +msgid "wrong number of publication names specified" +msgstr "მითითებულია გამოცემის სახელების არასწორი რაოდენობა" -#: pg_createsubscriber.c:1995 +#: pg_createsubscriber.c:2317 #, c-format -msgid "Number of publication names (%d) must match number of database names (%d)." -msgstr "გამოცემის სახელების რაოდენობა (%d) ბაზის სახელების რაოდენობას (%d) უნდა ემთხვეოდეს." +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." +msgstr "გამოცემის სახელების რაოდენობა (%d) ბაზის სახელების მითითებულ რაოდენობას (%d) უნდა ემთხვეოდეს." -#: pg_createsubscriber.c:2001 +#: pg_createsubscriber.c:2323 #, c-format -msgid "wrong number of subscription names" -msgstr "გამოწერის სახელების არასწორი რაოდენობა" +msgid "wrong number of subscription names specified" +msgstr "მითითებულია გამოწერის სახელების არასწორი რაოდენობა" -#: pg_createsubscriber.c:2002 +#: pg_createsubscriber.c:2324 #, c-format -msgid "Number of subscription names (%d) must match number of database names (%d)." -msgstr "გამოწერის სახელების რაოდენობა (%d) ბაზის სახელების რაოდენობას (%d) უნდა ემთხვეოდეს." +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." +msgstr "მითითებული გამოწერის სახელების რაოდენობა (%d) მითითებული ბაზის სახელების რაოდენობას (%d) უნდა ემთხვეოდეს." -#: pg_createsubscriber.c:2008 +#: pg_createsubscriber.c:2330 #, c-format -msgid "wrong number of replication slot names" -msgstr "რეპლიკაციის სლოტის სახელების არასწორი რაოდენობა" +msgid "wrong number of replication slot names specified" +msgstr "მითითებულია რეპლიკაციის სლოტის სახელების არასწორი რაოდენობა" -#: pg_createsubscriber.c:2009 +#: pg_createsubscriber.c:2331 #, c-format -msgid "Number of replication slot names (%d) must match number of database names (%d)." -msgstr "რეპლიკაციის სლოტების სახელების რაოდენობა (%d) ბაზის სახელების რაოდენობას (%d) უნდა ემთხვეოდეს." +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." +msgstr "რეპლიკაციის სლოტების მითითებული სახელების რაოდენობა (%d) ბაზის სახელების მითითებულ რაოდენობას (%d) უნდა ემთხვეოდეს." -#: pg_createsubscriber.c:2038 +#: pg_createsubscriber.c:2343 +#, c-format +msgid "invalid object type \"%s\" specified for -R/--remove" +msgstr "პარამეტრისთვის -R/--remove მითითებული ობიექტის ტიპი '%s' არასწორია" + +#: pg_createsubscriber.c:2344 +#, c-format +msgid "The valid option is: \"publications\"" +msgstr "სწორი პარამეტრია \"publications\"" + +#: pg_createsubscriber.c:2375 #, c-format msgid "subscriber data directory is not a copy of the source database cluster" msgstr "გამომწერის მონაცემების საქაღალდე წყარო ბაზის კლასტერის ასლი არაა" -#: pg_createsubscriber.c:2051 +#: pg_createsubscriber.c:2388 #, c-format -msgid "standby is up and running" -msgstr "უქმე ჩართულია და მუშაობს" +msgid "standby server is running" +msgstr "უქმე სერვერი გაშვებულია" -#: pg_createsubscriber.c:2052 +#: pg_createsubscriber.c:2389 #, c-format -msgid "Stop the standby and try again." -msgstr "გააჩერეთ უქმე და თავიდან სცადეთ." +msgid "Stop the standby server and try again." +msgstr "გააჩერეთ უქმე სერვერი და თავიდან სცადეთ." -#: pg_createsubscriber.c:2061 +#: pg_createsubscriber.c:2398 #, c-format -msgid "starting the standby with command-line options" -msgstr "უქმეს გაშვება ბრძანების სტრიქონის პარამეტრებით" +msgid "starting the standby server with command-line options" +msgstr "მიმდინარეობს უქმე სერვერის გაშვება ბრძანების სტრიქონის პარამეტრებით" -#: pg_createsubscriber.c:2077 pg_createsubscriber.c:2116 +#: pg_createsubscriber.c:2414 pg_createsubscriber.c:2449 #, c-format msgid "stopping the subscriber" msgstr "გამომწერის გაჩერება" -#: pg_createsubscriber.c:2095 +#: pg_createsubscriber.c:2428 #, c-format msgid "starting the subscriber" msgstr "გამომწერის გაშვება" -#: pg_createsubscriber.c:2124 +#: pg_createsubscriber.c:2457 #, c-format msgid "Done!" msgstr "შესრულებულია!" @@ -1938,17 +2021,17 @@ msgstr "" msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=DIR წინასწარ-ჩაწერადი ჟურნალის ფაილების მითითებულ საქაღალდეში ჩაწერა\n" -#: pg_receivewal.c:83 pg_recvlogical.c:93 +#: pg_receivewal.c:83 pg_recvlogical.c:92 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN გამოსვლა მითითებული LSN-ის მიღების შემდეგ\n" -#: pg_receivewal.c:84 pg_recvlogical.c:97 +#: pg_receivewal.c:84 pg_recvlogical.c:98 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr " --if-not-exists სლოტის შექმნისას მისი არსებობის შემთხვევაში ფაქტი შეცდომად არ ჩაითვლება\n" -#: pg_receivewal.c:85 pg_recvlogical.c:99 +#: pg_receivewal.c:85 pg_recvlogical.c:100 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop შეერთების დაკარგვისას თავიდან არ ცდა\n" @@ -1958,14 +2041,14 @@ msgstr " -n, --no-loop შეერთების დაკარგ msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync არ დაველოდო ცვლილებების დისკზე უსაფრთხოდ ჩაწერას\n" -#: pg_receivewal.c:87 pg_recvlogical.c:104 +#: pg_receivewal.c:87 pg_recvlogical.c:105 #, c-format msgid "" " -s, --status-interval=SECS\n" " time between status packets sent to server (default: %d)\n" msgstr "" " -s, --status-interval=SECS\n" -" შუალედი სერვერზე სტატუსის პაკეტების გაგზავნებს შორის (ნაგულისხმები: %d)\n" +" შუალედი სერვერზე სტატუსის პაკეტების გაგზავნებს შორის (ნაგულისხმევი: %d)\n" #: pg_receivewal.c:90 #, c-format @@ -1990,12 +2073,12 @@ msgstr "" "\n" "არასავალდებულო ქმედებები:\n" -#: pg_receivewal.c:104 pg_recvlogical.c:89 +#: pg_receivewal.c:104 pg_recvlogical.c:88 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot ახალი რეპლიკაციის სლოტის შექმნა (სლოტის სახელისთვის იხილეთ --slot)\n" -#: pg_receivewal.c:105 pg_recvlogical.c:90 +#: pg_receivewal.c:105 pg_recvlogical.c:89 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot რეპლიკაციის სლოტის გადაგდება (რეპლიკაციის სახელისთვის იხილეთ --slot)\n" @@ -2015,7 +2098,7 @@ msgstr "ჟურნალის ნაკადი შეჩერდა მი msgid "switched to timeline %u at %X/%X" msgstr "გადავერთე %u-ე დროის ხაზზე მისამართით %X/%X" -#: pg_receivewal.c:224 pg_recvlogical.c:1053 +#: pg_receivewal.c:224 pg_recvlogical.c:1073 #, c-format msgid "received interrupt signal, exiting" msgstr "მიღებულია შეწყვეტის სიგნალი. გამოსვლა" @@ -2085,7 +2168,7 @@ msgstr "ფაილის (%s) შემოწმება შეუძლე msgid "starting log streaming at %X/%X (timeline %u)" msgstr "ჟურნალის ნაკადი დაიწყო მისამართზე %X/%X (დროის ხაზი %u)" -#: pg_receivewal.c:693 pg_recvlogical.c:801 +#: pg_receivewal.c:693 pg_recvlogical.c:807 #, c-format msgid "could not parse end position \"%s\"" msgstr "ბოლო პოზიციის დამუშავების შეცდომა: %s" @@ -2115,28 +2198,28 @@ msgstr "%s-სთან დაკავშირების მხარდა msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "რეპლიკაციის შეერთება სლოტით \"%s\" მოულოდნელად ბაზაზეა დამოკიდებული" -#: pg_receivewal.c:878 pg_recvlogical.c:972 +#: pg_receivewal.c:878 pg_recvlogical.c:991 #, c-format msgid "dropping replication slot \"%s\"" msgstr "რეპლიკაციის სლოტის წაშლა: %s" -#: pg_receivewal.c:889 pg_recvlogical.c:982 +#: pg_receivewal.c:889 pg_recvlogical.c:1001 #, c-format msgid "creating replication slot \"%s\"" msgstr "რეპლიკაციის სლოტის შექმნა \"%s\"" -#: pg_receivewal.c:918 pg_recvlogical.c:1006 +#: pg_receivewal.c:918 pg_recvlogical.c:1026 #, c-format msgid "disconnected" msgstr "გათიშულია" #. translator: check source for value for %d -#: pg_receivewal.c:922 pg_recvlogical.c:1010 +#: pg_receivewal.c:922 pg_recvlogical.c:1030 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "გათიშულია; თავიდან ცდამდე დაყოვნება %d წამია" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:83 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -2146,7 +2229,7 @@ msgstr "" "\n" " \n" -#: pg_recvlogical.c:88 +#: pg_recvlogical.c:87 #, c-format msgid "" "\n" @@ -2155,31 +2238,43 @@ msgstr "" "\n" "შესასრულებელი ქმედებები:\n" -#: pg_recvlogical.c:91 +#: pg_recvlogical.c:90 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start რეპლიკაციის სლოტში ნაკადის გაშვება (სლოტის სახელისთვის იხილეთ --slot)\n" -#: pg_recvlogical.c:94 +#: pg_recvlogical.c:93 +#, c-format +#| msgid "" +#| " --includedir show location of C header files of the client\n" +#| " interfaces\n" +msgid "" +" --failover enable replication slot synchronization to standby servers when\n" +" creating a slot\n" +msgstr "" +" --failover ჩართავს რეპლიკაციის სლოტის სინქრონიზაციას უქმე სერვერებთან\n" +" სლოტის შექმნისას\n" + +#: pg_recvlogical.c:95 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FILE ჟურნალის მითითებულ ფაილში მიღება. stdout-ისთვის -\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:96 #, c-format msgid "" " -F --fsync-interval=SECS\n" " time between fsyncs to the output file (default: %d)\n" msgstr "" " -F --fsync-interval=SECS\n" -" შუალედი გამოსატანი ფაილის fsync-ებს შორის (ნაგულისხმები: %d)\n" +" შუალედი გამოსატანი ფაილის fsync-ებს შორის (ნაგულისხმევი: %d)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:99 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN ნაკადის დასაწყისი არსებული სლოტისთვის\n" -#: pg_recvlogical.c:100 +#: pg_recvlogical.c:101 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -2190,280 +2285,286 @@ msgstr "" " გამოტანის დამატებისთვის მითითებული სახელის, არასავალდებულო მნიშვნელობით,\n" " გადაცემა\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:104 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" -msgstr " -P, --plugin=PLUGIN გამოტანის მითითებული დამატების გამოყენება (ნაგულისხმები: %s)\n" +msgstr " -P, --plugin=PLUGIN გამოტანის მითითებული დამატების გამოყენება (ნაგულისხმევი: %s)\n" -#: pg_recvlogical.c:106 +#: pg_recvlogical.c:107 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME ლოგიკური რეპლიკაციის სლოტის სახელი\n" -#: pg_recvlogical.c:107 +#: pg_recvlogical.c:108 #, c-format msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" msgstr " -t, --two-phase სლოტის შექმნისას მომზადებული ტრანზაქციების დეკოდერის ჩართვა\n" -#: pg_recvlogical.c:112 +#: pg_recvlogical.c:113 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME მისაერთებელი ბაზის სახელი\n" -#: pg_recvlogical.c:145 +#: pg_recvlogical.c:146 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "ჩაწერის დადასტურება %X/%X-მდე, %X/%X-მდე მოცილება (სლოტი %s)" -#: pg_recvlogical.c:169 receivelog.c:360 +#: pg_recvlogical.c:170 receivelog.c:359 #, c-format msgid "could not send feedback packet: %s" msgstr "უკუკავშირის პაკეტის გაგზავნის შეცდომა: %s" -#: pg_recvlogical.c:239 +#: pg_recvlogical.c:240 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "ჟურნალის ნაკადის დაწყება მისამართზე %X/%X (სლოტი %s)" -#: pg_recvlogical.c:281 +#: pg_recvlogical.c:282 #, c-format msgid "streaming initiated" msgstr "ნაკადი ინიცირებულია" -#: pg_recvlogical.c:346 +#: pg_recvlogical.c:347 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ჟურნალის ფაილის გახსნის შეცდომა \"%s\": %m" -#: pg_recvlogical.c:375 receivelog.c:882 +#: pg_recvlogical.c:376 receivelog.c:889 #, c-format msgid "invalid socket: %s" msgstr "არასწორი სოკეტი: %s" -#: pg_recvlogical.c:428 receivelog.c:910 +#: pg_recvlogical.c:429 receivelog.c:917 #, c-format msgid "%s() failed: %m" msgstr "%s()-ის შეცდომა: %m" -#: pg_recvlogical.c:435 receivelog.c:959 +#: pg_recvlogical.c:436 receivelog.c:966 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "\"WAL\" ნაკადიდან მონაცემების მიღების შეცდომა: %s" -#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 -#: receivelog.c:1066 +#: pg_recvlogical.c:478 pg_recvlogical.c:529 receivelog.c:1010 +#: receivelog.c:1073 #, c-format msgid "streaming header too small: %d" msgstr "ნაკადის თავსართი ძალიან პატარაა: %d" -#: pg_recvlogical.c:512 receivelog.c:843 +#: pg_recvlogical.c:513 receivelog.c:846 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "ნაკადის უცნობი თავსართი: \"%c\"" -#: pg_recvlogical.c:566 pg_recvlogical.c:578 +#: pg_recvlogical.c:567 pg_recvlogical.c:579 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "%d ბაიტის ჩაწერის შეცდომა ჟურნალის ფაილში \"%s\": %m" -#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 +#: pg_recvlogical.c:637 receivelog.c:641 receivelog.c:678 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "რეპლიკაციის ნაკადის მოულოდნელი დასასრული: %s" -#: pg_recvlogical.c:796 +#: pg_recvlogical.c:802 #, c-format msgid "could not parse start position \"%s\"" msgstr "საწყისი მდებარეობის დამუშავების შეცდომა: %s" -#: pg_recvlogical.c:874 +#: pg_recvlogical.c:880 #, c-format msgid "no slot specified" msgstr "სლოტი მითითებული არაა" -#: pg_recvlogical.c:881 +#: pg_recvlogical.c:887 #, c-format msgid "no target file specified" msgstr "სამიზნე ფაილი მითითებული არაა" -#: pg_recvlogical.c:888 +#: pg_recvlogical.c:894 #, c-format msgid "no database specified" msgstr "ბაზა მითითებული არაა" -#: pg_recvlogical.c:895 +#: pg_recvlogical.c:901 #, c-format msgid "at least one action needs to be specified" msgstr "საჭიროა, სულ ცოტა, ერთი ქმედების მითითება" -#: pg_recvlogical.c:902 +#: pg_recvlogical.c:908 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "--create-slot -ს და ---start-ს -drop-slot -თან ერთად ვერ გამოიყენებთ" -#: pg_recvlogical.c:909 +#: pg_recvlogical.c:915 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "--create-slot -ს და --drop-slot-ს --startpos -თან ერთად ვერ გამოიყენებთ" -#: pg_recvlogical.c:916 +#: pg_recvlogical.c:922 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos -ის მითითება მხოლოდ --start -თან ერთად შეიძლება" -#: pg_recvlogical.c:923 +#: pg_recvlogical.c:931 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase -ის მითითება მხოლოდ --create-slot -თან ერთად შეიძლება" -#: pg_recvlogical.c:956 +#: pg_recvlogical.c:938 +#, c-format +#| msgid "--two-phase may only be specified with --create-slot" +msgid "--failover may only be specified with --create-slot" +msgstr "--failover პარამეტრის მითითება, მხოლოდ, --create-slot პარამეტრთან ერთად შეგიძლიათ" + +#: pg_recvlogical.c:975 #, c-format msgid "could not establish database-specific replication connection" msgstr "ბაზაზე-დამოკიდებული რეპლიკაციის შეერთების დამყარების შეცდომა" -#: pg_recvlogical.c:1056 +#: pg_recvlogical.c:1076 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "ბოლო მდებარეობა %X/%X keepalive-ის მიერ მიღწეული" -#: pg_recvlogical.c:1061 +#: pg_recvlogical.c:1081 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "ბოლო მდებარეობა %X/%X WAL ჩანაწერის მიერ მიღწეულია მისამართზე %X/%X" -#: receivelog.c:66 +#: receivelog.c:65 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "არქივის სტატუსის ფაილის \"%s\" შექმნის შეცდომა: %s" -#: receivelog.c:73 +#: receivelog.c:72 #, c-format msgid "could not close archive status file \"%s\": %s" msgstr "არქივის სტატუსის ფაილის \"%s\" დახურვის შეცდომა: %s" -#: receivelog.c:122 +#: receivelog.c:121 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "წინასწარ-ჩაწერადი ჟურნალის ფაილის \"%s\" ზომის მიღების შეცდომა: %s" -#: receivelog.c:133 +#: receivelog.c:132 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "წინასწარ-ჩაწერადი ჟურნალის არსებული ფაილის \"%s\" გახსნის შეცდომა: %s" -#: receivelog.c:142 +#: receivelog.c:141 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "წინასწარ-ჩაწერადი ჟურნალის არსებული ფაილის \"%s\" fsync()-ის შეცდომა: %s" -#: receivelog.c:157 +#: receivelog.c:156 #, c-format msgid "write-ahead log file \"%s\" has %zd byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %zd bytes, should be 0 or %d" msgstr[0] "წინასწარ-ჩაწერადი ჟურნალის ფაილს \"%s\" აქვს %zd ბაიტი. უნდა იყოს 0 ან %d" msgstr[1] "წინასწარ-ჩაწერადი ჟურნალის ფაილს \"%s\" აქვს %zd ბაიტი. უნდა იყოს 0 ან %d" -#: receivelog.c:175 +#: receivelog.c:174 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "წინასწარ-ჩაწერადი ჟურნალის არსებული ფაილის \"%s\" გახსნის შეცდომა: %s" -#: receivelog.c:216 +#: receivelog.c:215 #, c-format msgid "not renaming \"%s\", segment is not complete" msgstr "\"%s\"-ის სახელი არ შეიცვლება. სეგმენტი დაუსრულებელია" -#: receivelog.c:227 receivelog.c:317 receivelog.c:688 +#: receivelog.c:226 receivelog.c:316 receivelog.c:687 #, c-format msgid "could not close file \"%s\": %s" msgstr "ფაილის (\"%s\") დახურვის შეცდომა: %s" -#: receivelog.c:288 +#: receivelog.c:287 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "სერვერის პასუხში მოულოდნელი ისტორიის ფაილის სახელია, დროის ხაზისთვის %u: %s" -#: receivelog.c:297 +#: receivelog.c:296 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "დროის ხაზის ისტორიის ფაილის (%s) შექმნის შეცდომა: %s" -#: receivelog.c:304 +#: receivelog.c:303 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "დროის ხაზის ისტორიის ფაილის (%s) ჩაწერის შეცდომა: %s" -#: receivelog.c:394 +#: receivelog.c:393 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "სერვერის შეუთავსებელი ვერსია %s: კლიენტს ნაკადის მხარდაჭერა სერვერებიდან, რომლის ვერსიაც დაბალია %s-ზე, არ გააჩნია" -#: receivelog.c:403 +#: receivelog.c:402 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "სერვერის შეუთავსებელი ვერსია %s: კლიენტს ნაკადის მხარდაჭერა სერვერებიდან, რომლის ვერსიაც მაღალია %s-ზე, არ გააჩნია" -#: receivelog.c:508 +#: receivelog.c:507 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "სისტემის იდენტიფიკატორი ბაზს მარქაფსა და ნაკადურ შეერთებას შორის არ ემთხვევა" -#: receivelog.c:516 +#: receivelog.c:515 #, c-format msgid "starting timeline %u is not present in the server" msgstr "დაწყების დროის ხაზი %u სერვერზე არ არსებობს" -#: receivelog.c:555 +#: receivelog.c:554 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "მოულოდნელი პასუხი TIMELINE_HISTORY ბრძანებაზე: მივიღე %d მწკრივი და %d ველი, ველოდებოდი %d მწკრივს და %d ველს" -#: receivelog.c:626 +#: receivelog.c:625 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "სერვერის პასუხში მოულოდნელი შემდეგი დროის ხაზია (%u), დროის ხაზის შემდეგ: %u" -#: receivelog.c:632 +#: receivelog.c:631 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "სერვერმა შეწყვიტა დროის ხაზის %u ნაკადი მისამართზე %X/%X, მაგრამ მოიწერა, რომ შემდეგი დროის ხაზი %u მისამართზე %X/%X იწყება" -#: receivelog.c:672 +#: receivelog.c:671 #, c-format msgid "replication stream was terminated before stop point" msgstr "რეპლიკაციის ნაკადი გაჩერების წერტილამდე შეწყდა" -#: receivelog.c:718 +#: receivelog.c:717 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "მოულოდნელი შედეგების ნაკრები დროის-ხაზის-დამთავრების შემდეგ: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ველს" -#: receivelog.c:727 +#: receivelog.c:726 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "შემდეგი დროის ხაზის დაწყების წერტილის (%s) დამუშავების შეცდომა" -#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 +#: receivelog.c:774 receivelog.c:1029 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "ფაილის (\"%s\") fsync-ის შეცდომა: %s" -#: receivelog.c:1083 +#: receivelog.c:1090 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "მიღებულია წინასწარ-ჩაწერადი ჟურნალის ჩანაწერი წანაცვლებისთვის %u მაშინ, როცა ფაილები ღია არაა" -#: receivelog.c:1093 +#: receivelog.c:1100 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "მიღებული WAL მონაცემის წანაცვლება %08x, მოველოდი %08x" -#: receivelog.c:1128 +#: receivelog.c:1135 #, c-format msgid "could not write %d bytes to WAL file \"%s\": %s" msgstr "%d ბაიტის WAL ფაილში (\"%s\") ჩაწერის შეცდომა: %s" -#: receivelog.c:1153 receivelog.c:1193 receivelog.c:1222 +#: receivelog.c:1160 receivelog.c:1200 receivelog.c:1228 #, c-format msgid "could not send copy-end packet: %s" msgstr "copy-end პაკეტის გაგზავნის შეცდომა: %s" @@ -2477,11 +2578,6 @@ msgstr "პაროლი: " msgid "could not connect to server" msgstr "სერვერთან მიერთების პრობლემა" -#: streamutil.c:230 -#, c-format -msgid "could not clear \"search_path\": %s" -msgstr "\"search_path\"-ის გასუფთავების პრობლემა: %s" - #: streamutil.c:246 #, c-format msgid "could not determine server setting for \"integer_datetimes\"" @@ -2492,69 +2588,69 @@ msgstr "სერვერის პარამეტრის \"integer_dateti msgid "\"integer_datetimes\" compile flag does not match server" msgstr "აგებისას მითითებული ალამი \"integer_datetimes\" სერვერისას არ ემთხვვევა" -#: streamutil.c:372 +#: streamutil.c:304 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "შეცდომა WAL-ის სეგმენტის ზომის მიღებისას: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ან მეტ ველს" -#: streamutil.c:382 +#: streamutil.c:314 #, c-format msgid "WAL segment size could not be parsed" msgstr "WAL სეგმენტის ზომის დამუშავების შეცდომა" -#: streamutil.c:400 +#: streamutil.c:332 #, c-format msgid "remote server reported invalid WAL segment size (%d byte)" msgid_plural "remote server reported invalid WAL segment size (%d bytes)" msgstr[0] "დაშორებულმა სერვერმა არასწორი WAL სეგმენტის ზომის (%d ბაიტი) შესახებ შეგვატყობინა" msgstr[1] "დაშორებულმა სერვერმა არასწორი WAL სეგმენტის ზომის (%d ბაიტი) შესახებ შეგვატყობინა" -#: streamutil.c:404 +#: streamutil.c:336 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "WAL სეგმენტის ზომა ორის ხარისხი უნდა იყოს, შუალედიდან 1მბ-1გბ." -#: streamutil.c:446 +#: streamutil.c:378 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "ჯგუფის წვდომის ალმის გამოთხოვის შეცდომა: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ან მეტ ველს" -#: streamutil.c:455 +#: streamutil.c:387 #, c-format msgid "group access flag could not be parsed: %s" msgstr "ჯგუფის წვდომის ალმის დამუშავების შეცდომა: %s" -#: streamutil.c:498 streamutil.c:535 +#: streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "სისტემის ამოცნობის შეცდომა: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ან მეტ ველს" -#: streamutil.c:587 +#: streamutil.c:519 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "რეპლიკაციის სლოტის (\"%s\") წაკითხვის შეცდომა: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ველს" -#: streamutil.c:599 +#: streamutil.c:531 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "რეპლიკაციის სლოტი \"%s\"არ არსებობს" -#: streamutil.c:610 +#: streamutil.c:542 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "მოველოდი ფიზიკური რეპლიკაციის სლოტს. მივიღე: %s" -#: streamutil.c:624 +#: streamutil.c:556 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "restart_lsn \"%s\"-ის დამუშავების შეცდომა რეპლიკაციის სლოტისთვის \"%s\"" -#: streamutil.c:741 +#: streamutil.c:678 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "რეპლიკაციის სლოტის (\"%s\") შექმნის შეცდომა: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ველს" -#: streamutil.c:785 +#: streamutil.c:722 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "რეპლიკაციის სლოტის (\"%s\") გადაგდების შეცდომა: მივიღე %d მწკრივი და %d ველი. მოველოდი %d მწკრივს და %d ველს" @@ -2587,6 +2683,42 @@ msgstr "წაშლა შეკუმშვით მხარდაუჭე msgid "could not close compression stream" msgstr "შეკუმშვის ნაკადის დახურვის შეცდომა" +#, c-format +#~ msgid "" +#~ " --config-file=FILENAME use specified main server configuration\n" +#~ " file when running target cluster\n" +#~ msgstr "" +#~ " --config-file=FILENAME სამიზნე კლასტერის გაშვებისას მთავარი \n" +#~ " სერვერის მითითებული კონფიგურაციის ფაილში გამოყენება\n" + +#, c-format +#~ msgid " -s, --socket-directory=DIR socket directory to use (default current directory)\n" +#~ msgstr " -s, --socket-directory=DIR სოკეტის საქაღალდე (ნაგულისხმევია მიმდინარე.)\n" + +#, c-format +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" + +#, c-format +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" + +#, c-format +#~ msgid "Consider increasing max_logical_replication_workers to at least %d." +#~ msgstr "განიხილეთ max_logical_replication_workers-ის გაზრდა მინიმუმ %d-მდე." + +#, c-format +#~ msgid "Consider increasing max_replication_slots to at least %d." +#~ msgstr "განიხილეთ max_replication_slots-ის გაზრდა მინიმუმ %d-მდე." + +#, c-format +#~ msgid "Consider increasing max_wal_senders to at least %d." +#~ msgstr "განიხილეთ max_wal_senders-ის გაზრდა მინიმუმ %d-მდე." + +#, c-format +#~ msgid "Consider increasing max_worker_processes to at least %d." +#~ msgstr "განიხილეთ max_worker_processes-ის გაზრდა მინიმუმ %d-მდე." + #, c-format #~ msgid "This build does not support compression with %s." #~ msgstr "ამ აგებაში %s-ით შეკუმშვის მხარდაჭრა არ არსებობს." @@ -2601,6 +2733,10 @@ msgstr "შეკუმშვის ნაკადის დახურვი #~ msgid "could not check file \"%s\"" #~ msgstr "ფაილის შემოწმება შეუძლებელია: %s" +#, c-format +#~ msgid "could not clear search_path: %s" +#~ msgstr "search_path-ის გასუფთავების პრობლემა: %s" + #, c-format #~ msgid "could not determine seek position in file \"%s\": %s" #~ msgstr "ფაილში %s გადახვევის მდებარეობის დადგენა შეუძლებელია: %s" @@ -2613,6 +2749,22 @@ msgstr "შეკუმშვის ნაკადის დახურვი #~ msgid "could not set compression flag for %s: %s" #~ msgstr "%s-სთვის შეკუმშვის დონის დაყენების შეცდომა: %s" +#, c-format +#~ msgid "duplicate database \"%s\"" +#~ msgstr "განმეორებადი ბაზა \"%s\"" + +#, c-format +#~ msgid "duplicate publication \"%s\"" +#~ msgstr "განმეორებადი გამოცემა \"%s\"" + +#, c-format +#~ msgid "duplicate replication slot \"%s\"" +#~ msgstr "განმეორებადი რეპლიკაციის სლოტი \"%s\"" + +#, c-format +#~ msgid "duplicate subscription \"%s\"" +#~ msgstr "განმეორებადი გამოწერა \"%s\"" + #, c-format #~ msgid "log streamer with pid %d exiting" #~ msgstr "ჟურნალის ნაკადის პროცესი pid-ით %d ასრულებს მუშაობას" @@ -2625,10 +2777,18 @@ msgstr "შეკუმშვის ნაკადის დახურვი #~ msgid "primary has replication slot \"%s\"" #~ msgstr "ძირითადს აქვს რეპლიკაციის სლოტი \"%s\"" +#, c-format +#~ msgid "standby is up and running" +#~ msgstr "უქმე ჩართულია და მუშაობს" + #, c-format #~ msgid "standby server disconnected from the primary" #~ msgstr "უქმე სერვერ გაითიშა ძირითადისგან" +#, c-format +#~ msgid "subscriber failed to change system identifier: exit code: %d" +#~ msgstr "გამომწერის სისტემური იდენტიფიკატორის შეცვლა ჩავარდა: გამოსვლის კოდი: %d" + #, c-format #~ msgid "symlinks are not supported on this platform" #~ msgstr "სიმბმულები ამ პლატფორმაზე მხარდაჭერილი არაა" @@ -2648,3 +2808,7 @@ msgstr "შეკუმშვის ნაკადის დახურვი #, c-format #~ msgid "unknown compression option \"%s\"" #~ msgstr "შეკუმშვის უცნობი პარამეტრი: \"%s\"" + +#, c-format +#~ msgid "validating connection string on subscriber" +#~ msgstr "შეერთების სტრიქონის დადასტურება გამომწერზე" diff --git a/src/bin/pg_basebackup/po/ko.po b/src/bin/pg_basebackup/po/ko.po index bbd19de74311b..08861d1022c3e 100644 --- a/src/bin/pg_basebackup/po/ko.po +++ b/src/bin/pg_basebackup/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL) 13\n" +"Project-Id-Version: pg_basebackup (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-10-05 01:15+0000\n" -"PO-Revision-Date: 2020-10-06 11:02+0900\n" +"POT-Creation-Date: 2025-01-17 04:49+0000\n" +"PO-Revision-Date: 2025-01-18 02:23+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -17,167 +17,484 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:236 -#, c-format -msgid "fatal: " -msgstr "심각: " - -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "경고: " +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "상세정보: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "힌트: " + +#: ../../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 +#, c-format +msgid "this build does not support compression with %s" +msgstr "이 버전은 %s 압축 기능을 포함 하지 않고 빌드 되었습니다." + +#: ../../common/compression.c:205 +msgid "found empty string where a compression option was expected" +msgstr "압축 옵션을 지정하는 자리에 빈 문자열이 있습니다." + +#: ../../common/compression.c:244 +#, c-format +msgid "unrecognized compression option: \"%s\"" +msgstr "인식할 수 없는 압축 옵션: \"%s\"" + +#: ../../common/compression.c:283 +#, c-format +msgid "compression option \"%s\" requires a value" +msgstr "\"%s\" 압축 옵션에는 그 지정값이 필요합니다." + +#: ../../common/compression.c:292 +#, c-format +msgid "value for compression option \"%s\" must be an integer" +msgstr "\"%s\" 압축 옵션 값은 정수여야 합니다." + +#: ../../common/compression.c:331 +#, c-format +msgid "value for compression option \"%s\" must be a Boolean value" +msgstr "\"%s\" 압축 옵션 값은 부울린형여야 합니다." + +#: ../../common/compression.c:379 +#, c-format +msgid "compression algorithm \"%s\" does not accept a compression level" +msgstr "\"%s\" 압축 알고리즘은 압축 수준을 지정할 수 없습니다." + +#: ../../common/compression.c:386 +#, c-format +msgid "" +"compression algorithm \"%s\" expects a compression level between %d and %d " +"(default at %d)" +msgstr "" +"\"%s\" 압축 알고리즘은 압축 수준값으로 %d에서 %d까지만 허용함 (기본값 %d)" + +#: ../../common/compression.c:397 +#, c-format +msgid "compression algorithm \"%s\" does not accept a worker count" +msgstr "\"%s\" 압축 알고리즘은 병렬 작업 수를 지정할 수 없습니다." + +#: ../../common/compression.c:408 +#, c-format +msgid "compression algorithm \"%s\" does not support long-distance mode" +msgstr "\"%s\" 압축 알고리즘은 원거리 모드를 지원하지 않습니다." + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "읽기 용 \"%s\" 파일을 열 수 없음: %m" + +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: pg_receivewal.c:402 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "\"%s\" 파일을 읽을 수 없음: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "\"%s\" 파일을 닫을 수 없음: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "바이트 순서 불일치" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, " +"and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"바이트 순서 일치하지 않는 문제\n" +"바이트 순서 정보는 pg_control 파일을 저장할 때 사용되는데,\n" +"이 파일의 바이트 순서 정보와 이 프로그램에서 사용하는 순서 정보가 다릅니다.\n" +"이럴 경우, 출력 결과가 바르지 않을 수 있고,\n" +"설치된 PostgreSQL 프로그램과 데이터 디렉터리가 호환되지 않을 수 있습니다." + +#: ../../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 ../../fe_utils/recovery_gen.c:140 +#: pg_basebackup.c:1846 pg_receivewal.c:386 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "\"%s\" 파일을 열 수 없음: %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "\"%s\" 파일 쓰기 실패: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "\"%s\" 파일 fsync 실패: %m" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 복제할 수 없음(내부 오류)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 -#: pg_receivewal.c:266 pg_recvlogical.c:340 +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "\"%s\" 파일을 위해 파일 시스템 동기화 실패: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_receivewal.c:319 pg_recvlogical.c:352 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: ../../common/file_utils.c:158 pg_receivewal.c:169 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "이 빌드는 \"%s\" 동기화 방법을 지원하지 않음" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: ../../common/file_utils.c:192 pg_receivewal.c:337 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 +#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "\"%s\" 파일을 열 수 없음: %m" +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 -#: pg_recvlogical.c:193 +#: ../../common/restricted_token.c:60 #, c-format -msgid "could not fsync file \"%s\": %m" -msgstr "\"%s\" 파일 fsync 실패: %m" +msgid "could not open process token: error code %lu" +msgstr "프로세스 토큰을 열 수 없음: 오류 코드 %lu" -#: ../../common/file_utils.c:375 +#: ../../common/restricted_token.c:74 #, c-format -msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" +msgid "could not allocate SIDs: error code %lu" +msgstr "SID를 할당할 수 없음: 오류 코드 %lu" + +#: ../../common/restricted_token.c:94 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "제한된 토큰을 생성할 수 없습니다: %lu" + +#: ../../common/restricted_token.c:115 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "\"%s\" 명령용 프로세스를 시작할 수 없음: 오류 코드 %lu" + +#: ../../common/restricted_token.c:153 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "제한된 토큰으로 다시 실행할 수 없음: 오류 코드 %lu" + +#: ../../common/restricted_token.c:168 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "\"%s\" 값은 \"%s\" 옵션값으로 유효하지 않음" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s 값은 %d부터 %d까지 지정할 수 있습니다." + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "알 수 없는 동기화 방법: %s" -#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 -#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 -#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 +#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 +#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:334 #, c-format msgid "out of memory" msgstr "메모리 부족" -#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 -#: pg_basebackup.c:1770 +#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 +#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 #, c-format msgid "could not write to file \"%s\": %m" msgstr "\"%s\" 파일 쓰기 실패: %m" -#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 -#: pg_basebackup.c:1747 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" msgstr "\"%s\" 파일을 만들 수 없음: %m" -#: pg_basebackup.c:224 +#: ../../fe_utils/string_utils.c:434 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "쉘 명령 인자에 줄바꿈 문자가 있음: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "데이터베이스 이름에 줄바꿈 문자가 있음: \"%s\"\n" + +#: bbstreamer_file.c:275 +#, c-format +msgid "unexpected state while extracting archive" +msgstr "아카이브 추출 중 예상치 못한 상태값 발견" + +#: bbstreamer_file.c:321 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 +#, c-format +msgid "could not set permissions on directory \"%s\": %m" +msgstr "\"%s\" 디렉터리 액세스 권한을 지정할 수 없음: %m" + +#: bbstreamer_file.c:345 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 심볼릭 링크로 만들 수 없음: %m" + +#: bbstreamer_file.c:365 +#, c-format +msgid "could not set permissions on file \"%s\": %m" +msgstr "파일 \"%s\" 의 접근권한을 지정할 수 없음: %m" + +#: bbstreamer_gzip.c:95 +#, c-format +msgid "could not create compressed file \"%s\": %m" +msgstr "\"%s\" 압축 파일 만들기 실패: %m" + +#: bbstreamer_gzip.c:103 +#, c-format +msgid "could not duplicate stdout: %m" +msgstr "stdout을 중복할 수 없음: %m" + +#: bbstreamer_gzip.c:107 +#, c-format +msgid "could not open output file: %m" +msgstr "출력파일을 열 수 없음: %m" + +#: bbstreamer_gzip.c:111 +#, c-format +msgid "could not set compression level %d: %s" +msgstr "잘못된 압축 수위 %d: %s" + +#: bbstreamer_gzip.c:143 +#, c-format +msgid "could not write to compressed file \"%s\": %s" +msgstr "\"%s\" 압축 파일 쓰기 실패: %s" + +#: bbstreamer_gzip.c:167 +#, c-format +msgid "could not close compressed file \"%s\": %m" +msgstr "\"%s\" 압축 파일 닫기 실패: %m" + +#: bbstreamer_gzip.c:245 walmethods.c:880 +#, c-format +msgid "could not initialize compression library" +msgstr "압축 라이브러리를 초기화할 수 없음" + +#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 +#, c-format +msgid "could not decompress data: %s" +msgstr "압축 풀기 실패: %s" + +#: bbstreamer_inject.c:189 +#, c-format +msgid "unexpected state while injecting recovery settings" +msgstr "복구 관련 설정을 추가 하는 도중 예상치 못한 상태 발견" + +#: bbstreamer_lz4.c:95 +#, c-format +msgid "could not create lz4 compression context: %s" +msgstr "lz4 압축 컨텍스트 정보를 생성할 수 없습니다: %s" + +#: bbstreamer_lz4.c:140 +#, c-format +msgid "could not write lz4 header: %s" +msgstr "lz4 헤더를 쓸 수 없음: %s" + +#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 +#, c-format +msgid "could not compress data: %s" +msgstr "자료를 압축할 수 없음: %s" + +#: bbstreamer_lz4.c:241 +#, c-format +msgid "could not end lz4 compression: %s" +msgstr "lz4 압축을 끝낼 수 없음: %s" + +#: bbstreamer_lz4.c:293 +#, c-format +msgid "could not initialize compression library: %s" +msgstr "압축 라이브러리를 초기화 할 수 없음: %s" + +#: bbstreamer_tar.c:244 +#, c-format +msgid "tar file trailer exceeds 2 blocks" +msgstr "tar 파일 끝부분에서 2 블록이 초과됨" + +#: bbstreamer_tar.c:249 +#, c-format +msgid "unexpected state while parsing tar archive" +msgstr "tar 아카이브 분석 중 예상치 못한 상태 발견" + +#: bbstreamer_tar.c:292 +#, c-format +msgid "tar member has empty name" +msgstr "tar 맴버에 이름이 없음" + +#: bbstreamer_tar.c:326 +#, c-format +msgid "COPY stream ended before last file was finished" +msgstr "마지막 파일을 끝내기 전에 COPY 스트림이 끝났음" + +#: bbstreamer_zstd.c:85 +#, c-format +msgid "could not create zstd compression context" +msgstr "zstd 압축 컨텍스트를 만들 수 없음" + +#: bbstreamer_zstd.c:91 +#, c-format +msgid "could not set zstd compression level to %d: %s" +msgstr "zstd 압축 수준을 %d 값으로 지정할 수 없음: %s" + +#: bbstreamer_zstd.c:105 +#, c-format +msgid "could not set compression worker count to %d: %s" +msgstr "압축용 병렬 작업자 수를 %d 값으로 지정할 수 없음: %s" + +#: bbstreamer_zstd.c:116 +#, c-format +msgid "could not enable long-distance mode: %s" +msgstr "원거리 모드를 활성화 할 수 없음: %s" + +#: bbstreamer_zstd.c:275 +#, c-format +msgid "could not create zstd decompression context" +msgstr "zstd 압축 컨텍스트를 만들 수 없음" + +#: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" msgstr "\"%s\" 디렉터리를 지우는 중" -#: pg_basebackup.c:226 +#: pg_basebackup.c:247 #, c-format msgid "failed to remove data directory" msgstr "데이터 디렉터리 삭제 실패" -#: pg_basebackup.c:230 +#: pg_basebackup.c:251 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "\"%s\" 데이터 디렉터리의 내용을 지우는 중" -#: pg_basebackup.c:232 +#: pg_basebackup.c:253 #, c-format msgid "failed to remove contents of data directory" msgstr "데이터 디렉터리의 내용을 지울 수 없음" -#: pg_basebackup.c:237 +#: pg_basebackup.c:258 #, c-format msgid "removing WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리를 지우는 중" -#: pg_basebackup.c:239 +#: pg_basebackup.c:260 #, c-format msgid "failed to remove WAL directory" msgstr "WAL 디렉터리 삭제 실패" -#: pg_basebackup.c:243 +#: pg_basebackup.c:264 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리 내용을 지우는 중" -#: pg_basebackup.c:245 +#: pg_basebackup.c:266 #, c-format msgid "failed to remove contents of WAL directory" msgstr "WAL 디렉터리의 내용을 지울 수 없음" -#: pg_basebackup.c:251 +#: pg_basebackup.c:272 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "사용자 요청으로 \"%s\" 데이터 디렉터리를 지우지 않았음" -#: pg_basebackup.c:254 +#: pg_basebackup.c:275 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "사용자 요청으로 \"%s\" WAL 디렉터리를 지우지 않았음" -#: pg_basebackup.c:258 +#: pg_basebackup.c:279 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "아직 마무리 되지 않은 테이블스페이스 디렉터리 변경함" -#: pg_basebackup.c:299 +#: pg_basebackup.c:331 #, c-format msgid "directory name too long" msgstr "디렉터리 이름이 너무 김" -#: pg_basebackup.c:309 +#: pg_basebackup.c:338 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "테이블스페이스 맵핑 하는 곳에서 \"=\" 문자가 중복 되어 있음" -#: pg_basebackup.c:321 +#: pg_basebackup.c:347 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "" "\"%s\" 형식의 테이블스페이스 맵핑이 잘못 되었음, \"OLDDIR=NEWDIR\" 형식이어" "야 함" -#: pg_basebackup.c:333 +#: pg_basebackup.c:366 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "테이블스페이스 맵핑용 옛 디렉터리가 절대 경로가 아님: %s" -#: pg_basebackup.c:340 +#: pg_basebackup.c:370 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "테이블스페이스 맵핑용 새 디렉터리가 절대 경로가 아님: %s" -#: pg_basebackup.c:379 +#: pg_basebackup.c:392 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -187,17 +504,19 @@ msgstr "" "다.\n" "\n" -#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 +#: pg_basebackup.c:394 pg_createsubscriber.c:221 pg_receivewal.c:79 +#: pg_recvlogical.c:86 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 +#: pg_basebackup.c:395 pg_createsubscriber.c:222 pg_receivewal.c:80 +#: pg_recvlogical.c:87 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [옵션]...\n" -#: pg_basebackup.c:383 +#: pg_basebackup.c:396 #, c-format msgid "" "\n" @@ -206,17 +525,26 @@ msgstr "" "\n" "출력물을 제어야하는 옵션들:\n" -#: pg_basebackup.c:384 +#: pg_basebackup.c:397 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=디렉터리 베이스 백업 결과물이 저장될 디렉터리\n" -#: pg_basebackup.c:385 +#: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t 출력 형식 (plain (초기값), tar)\n" -#: pg_basebackup.c:386 +#: pg_basebackup.c:399 +#, c-format +msgid "" +" -i, --incremental=OLDMANIFEST\n" +" take incremental backup\n" +msgstr "" +" -i, --incremental=이전매니페이스\n" +" 증분 백업\n" + +#: pg_basebackup.c:401 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -226,7 +554,7 @@ msgstr "" " (단위는 kB/s, 또는 숫자 뒤에 \"k\" 또는 \"M\" 단위 " "문자 지정 가능)\n" -#: pg_basebackup.c:388 +#: pg_basebackup.c:403 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -235,7 +563,16 @@ msgstr "" " -R, --write-recovery-conf\n" " 복제를 위한 환경 설정 함\n" -#: pg_basebackup.c:390 +#: pg_basebackup.c:405 +#, c-format +msgid "" +" -t, --target=TARGET[:DETAIL]\n" +" backup target (if other than client)\n" +msgstr "" +" -t, --target=TARGET[:DETAIL]\n" +" 백업 타겟 지정 (이곳 또는 다른 곳)\n" + +#: pg_basebackup.c:407 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -244,12 +581,12 @@ msgstr "" " -T, --tablespace-mapping=옛DIR=새DIR\n" " 테이블스페이스 디렉터리 새 맵핑\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:409 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=WALDIR 트랜잭션 로그 디렉터리 지정\n" -#: pg_basebackup.c:393 +#: pg_basebackup.c:410 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -258,18 +595,26 @@ msgstr "" " -X, --wal-method=none|fetch|stream\n" " 필요한 WAL 파일을 백업하는 방법\n" -#: pg_basebackup.c:395 +#: pg_basebackup.c:412 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip tar 출력물을 압축\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:413 #, c-format msgid "" -" -Z, --compress=0-9 compress tar output with given compression level\n" -msgstr " -Z, --compress=0-9 압축된 tar 파일의 압축 수위 지정\n" +" -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" +" compress on client or server as specified\n" +msgstr "" +" -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" +" 압축 관련 설정\n" -#: pg_basebackup.c:397 +#: pg_basebackup.c:415 +#, c-format +msgid " -Z, --compress=none do not compress tar output\n" +msgstr " -Z, --compress=none tar 출력에서 압축 안함\n" + +#: pg_basebackup.c:416 #, c-format msgid "" "\n" @@ -278,58 +623,58 @@ msgstr "" "\n" "일반 옵션들:\n" -#: pg_basebackup.c:398 +#: pg_basebackup.c:417 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" -" set fast or spread checkpointing\n" +" set fast or spread (default) checkpointing\n" msgstr "" " -c, --checkpoint=fast|spread\n" -" 체크포인트 방법\n" +" 체크포인트 방법, fast 또는 spread (기본값)\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:419 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot 새 복제 슬롯을 만듬\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:420 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=라벨 백업 라벨 지정\n" -#: pg_basebackup.c:402 +#: pg_basebackup.c:421 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean 오류 발생 시 정리하지 않음\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:422 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " "disk\n" msgstr " -N, --no-sync 디스크 쓰기 뒤 sync 작업 생략\n" -#: pg_basebackup.c:404 +#: pg_basebackup.c:423 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress 진행 과정 보여줌\n" -#: pg_basebackup.c:405 pg_receivewal.c:89 +#: pg_basebackup.c:424 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=슬롯이름 지정한 복제 슬롯을 사용함\n" -#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 자세한 작업 메시지 보여줌\n" -#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보 보여주고 마침\n" -#: pg_basebackup.c:408 +#: pg_basebackup.c:427 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -338,7 +683,7 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " 사용할 manifest 체크섬 알고리즘\n" -#: pg_basebackup.c:410 +#: pg_basebackup.c:429 #, c-format msgid "" " --manifest-force-encode\n" @@ -347,23 +692,23 @@ msgstr "" " --manifest-force-encode\n" " manifest 내 모든 파일 이름을 16진수 인코딩함\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:431 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr " --no-estimate-size 서버측 백업 크기를 예상하지 않음\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:432 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest 백업 매니페스트 만들지 않음\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:433 #, c-format msgid "" " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot 임시 복제 슬롯 만들지 않음\n" -#: pg_basebackup.c:415 +#: pg_basebackup.c:434 #, c-format msgid "" " --no-verify-checksums\n" @@ -372,12 +717,21 @@ msgstr "" " --no-verify-checksums\n" " 체크섬 검사 안함\n" -#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 +#: pg_basebackup.c:436 +#, c-format +msgid "" +" --sync-method=METHOD\n" +" set method for syncing files to disk\n" +msgstr "" +" --sync-method=METHOD\n" +" 파일을 디스크에 동기화 하는 방법 지정\n" + +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 #, c-format msgid "" "\n" @@ -386,22 +740,22 @@ msgstr "" "\n" "연결 옵션들:\n" -#: pg_basebackup.c:419 pg_receivewal.c:96 +#: pg_basebackup.c:440 pg_receivewal.c:97 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=접속문자열 서버 접속 문자열\n" -#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=호스트이름 접속할 데이터베이스 서버나 소켓 디렉터리\n" -#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=포트 데이터베이스 서버 포트 번호\n" -#: pg_basebackup.c:422 +#: pg_basebackup.c:443 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -411,17 +765,17 @@ msgstr "" " -s, --status-interval=초\n" " 초 단위 매번 서버로 상태 패킷을 보냄\n" -#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=사용자 접속할 특정 데이터베이스 사용자\n" -#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 비밀번호 물어 보지 않음\n" -#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -429,7 +783,8 @@ msgid "" msgstr "" " -W, --password 항상 비밀번호 프롬프트 보임 (자동으로 판단 함)\n" -#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 +#: pg_basebackup.c:448 pg_createsubscriber.c:240 pg_receivewal.c:106 +#: pg_recvlogical.c:118 #, c-format msgid "" "\n" @@ -438,464 +793,1218 @@ msgstr "" "\n" "문제점 보고 주소: <%s>\n" -#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 +#: pg_basebackup.c:449 pg_createsubscriber.c:241 pg_receivewal.c:107 +#: pg_recvlogical.c:119 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: pg_basebackup.c:471 +#: pg_basebackup.c:488 +#, c-format +msgid "could not read from ready pipe: %m" +msgstr "준비된 파이프로부터 읽기 실패: %m" + +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 +#: streamutil.c:521 +#, c-format +msgid "could not parse write-ahead log location \"%s\"" +msgstr "트랜잭션 로그 위치 \"%s\" 분석 실패" + +#: pg_basebackup.c:596 pg_receivewal.c:600 +#, c-format +msgid "could not finish writing WAL files: %m" +msgstr "WAL 파일 쓰기 마무리 실패: %m" + +#: pg_basebackup.c:642 +#, c-format +msgid "could not create pipe for background process: %m" +msgstr "백그라운드 프로세스를 위한 파이프 만들기 실패: %m" + +#: pg_basebackup.c:676 +#, c-format +msgid "created temporary replication slot \"%s\"" +msgstr "\"%s\" 임시 복제 슬롯을 만듦" + +#: pg_basebackup.c:679 +#, c-format +msgid "created replication slot \"%s\"" +msgstr "\"%s\" 이름의 복제 슬롯을 만듦" + +#: pg_basebackup.c:728 +#, c-format +msgid "could not create background process: %m" +msgstr "백그라운드 프로세스 만들기 실패: %m" + +#: pg_basebackup.c:737 +#, c-format +msgid "could not create background thread: %m" +msgstr "백그라운드 스래드 만들기 실패: %m" + +#: pg_basebackup.c:776 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "\"%s\" 디렉터리가 있지만 비어 있지 않음" + +#: pg_basebackup.c:782 pg_createsubscriber.c:390 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" + +#: pg_basebackup.c:858 +#, c-format +msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" +msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" +msgstr[0] "%*s/%s kB (100%%), %d/%d 테이블스페이스 %*s" + +#: pg_basebackup.c:870 +#, c-format +msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" +msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" +msgstr[0] "%*s/%s kB (%d%%), %d/%d 테이블스페이스 (%s%-*.*s)" + +#: pg_basebackup.c:886 +#, c-format +msgid "%*s/%s kB (%d%%), %d/%d tablespace" +msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" +msgstr[0] "%*s/%s kB (%d%%), %d/%d 테이블스페이스" + +#: pg_basebackup.c:910 +#, c-format +msgid "transfer rate \"%s\" is not a valid value" +msgstr "\"%s\" 전송 속도는 잘못된 값임" + +#: pg_basebackup.c:912 +#, c-format +msgid "invalid transfer rate \"%s\": %m" +msgstr "잘못된 전송 속도 \"%s\": %m" + +#: pg_basebackup.c:919 +#, c-format +msgid "transfer rate must be greater than zero" +msgstr "전송 속도는 0보다 커야 함" + +#: pg_basebackup.c:949 +#, c-format +msgid "invalid --max-rate unit: \"%s\"" +msgstr "잘못된 --max-rate 단위: \"%s\"" + +#: pg_basebackup.c:953 +#, c-format +msgid "transfer rate \"%s\" exceeds integer range" +msgstr "\"%s\" 전송 속도는 정수형 범위가 아님" + +#: pg_basebackup.c:960 +#, c-format +msgid "transfer rate \"%s\" is out of range" +msgstr "\"%s\" 전송 속도는 범위 초과" + +#: pg_basebackup.c:1022 +#, c-format +msgid "could not get COPY data stream: %s" +msgstr "COPY 데이터 스트림을 사용할 수 없음: %s" + +#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 +#: receivelog.c:973 +#, c-format +msgid "could not read COPY data: %s" +msgstr "COPY 자료를 읽을 수 없음: %s" + +#: pg_basebackup.c:1043 +#, c-format +msgid "background process terminated unexpectedly" +msgstr "백그라운드 프로세스가 예상치 않게 종료됨" + +#: pg_basebackup.c:1114 +#, c-format +msgid "cannot inject manifest into a compressed tar file" +msgstr "압축된 tar 파일에는 manifest를 넣을 수 없습니다." + +#: pg_basebackup.c:1115 +#, c-format +msgid "" +"Use client-side compression, send the output to a directory rather than " +"standard output, or use %s." +msgstr "" +"결과물을 표준 출력으로 보내지 말고, 디렉터리로 보낸 뒤 클라이언트 측에서 압" +"축 하거나, %s 옵션을 사용하세요." + +#: pg_basebackup.c:1131 +#, c-format +msgid "cannot parse archive \"%s\"" +msgstr "\"%s\" 아카이브를 구문분석할 수 없음" + +#: pg_basebackup.c:1132 +#, c-format +msgid "Only tar archives can be parsed." +msgstr "tar 형식만 구문분석할 수 있음" + +#: pg_basebackup.c:1134 +#, c-format +msgid "Plain format requires pg_basebackup to parse the archive." +msgstr "아카이브를 분석하기 위해서는 일반 양식이어야 합니다." + +#: pg_basebackup.c:1136 +#, c-format +msgid "" +"Using - as the output directory requires pg_basebackup to parse the archive." +msgstr "아카이브를 분석하기 위해 출력 디렉터리 이름으로 - 문자를 사용하세요." + +#: pg_basebackup.c:1138 +#, c-format +msgid "The -R option requires pg_basebackup to parse the archive." +msgstr "아카이브를 분석하기 위해 -R 옵션을 사용하세요." + +#: pg_basebackup.c:1357 +#, c-format +msgid "archives must precede manifest" +msgstr "아카이브 작업은 매니페스트보다 앞서야합니다" + +#: pg_basebackup.c:1372 +#, c-format +msgid "invalid archive name: \"%s\"" +msgstr "잘못된 아카이브 이름: \"%s\"" + +#: pg_basebackup.c:1444 +#, c-format +msgid "unexpected payload data" +msgstr "비정상 payload 자료" + +#: pg_basebackup.c:1587 +#, c-format +msgid "empty COPY message" +msgstr "빈 COPY 메시지" + +#: pg_basebackup.c:1589 +#, c-format +msgid "malformed COPY message of type %d, length %zu" +msgstr "타입 %d의 잘못된 COPY 메시지, 길이: %zu" + +#: pg_basebackup.c:1789 +#, c-format +msgid "incompatible server version %s" +msgstr "호환하지 않는 서버 버전 %s" + +#: pg_basebackup.c:1805 +#, c-format +msgid "Use -X none or -X fetch to disable log streaming." +msgstr "" +"트랜잭션 로그 스트리밍을 사용하지 않으려면 -X none 또는 -X fetch 옵션을 사용" +"하세요." + +#: pg_basebackup.c:1841 +#, c-format +msgid "server does not support incremental backup" +msgstr "서버가 증분 백업을 지원하지 않음" + +#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 +#: receivelog.c:543 receivelog.c:582 streamutil.c:367 streamutil.c:441 +#: streamutil.c:493 streamutil.c:581 streamutil.c:733 streamutil.c:778 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "\"%s\" 복제 명령을 보낼 수 없음: %s" + +#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#, c-format +msgid "could not upload manifest: %s" +msgstr "매니페이스 파일을 업로드 할 수 없음: %s" + +#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#, c-format +msgid "could not upload manifest: unexpected status %s" +msgstr "매니페이스 파일을 업로드 할 수 없음: 예상치 않은 상태 %s" + +#: pg_basebackup.c:1867 +#, c-format +msgid "could not send COPY data: %s" +msgstr "COPY 자료를 보낼 수 없음: %s" + +#: pg_basebackup.c:1877 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "COPY 종료 정보를 보낼 수 없음: %s" + +#: pg_basebackup.c:1892 +#, c-format +msgid "unexpected extra result while sending manifest" +msgstr "매니페이스를 보내는 중 예상치 못한 부가 결과 발견" + +#: pg_basebackup.c:1950 +#, c-format +msgid "backup targets are not supported by this server version" +msgstr "이 서버는 백업 타켓을 지원하지 않음." + +#: pg_basebackup.c:1953 +#, c-format +msgid "recovery configuration cannot be written when a backup target is used" +msgstr "백업 타겟을 사용할 때는 원 환경 설정을 기록할 수 없습니다." + +#: pg_basebackup.c:1980 +#, c-format +msgid "server does not support server-side compression" +msgstr "이 서버는 서버 측 압축을 지원하지 않습니다" + +#: pg_basebackup.c:1990 +#, c-format +msgid "initiating base backup, waiting for checkpoint to complete" +msgstr "베이스 백업을 초기화 중, 체크포인트 완료를 기다리는 중" + +#: pg_basebackup.c:1994 +#, c-format +msgid "waiting for checkpoint" +msgstr "체크포인트가 끝나길 기다리는 중" + +#: pg_basebackup.c:2016 +#, c-format +msgid "could not initiate base backup: %s" +msgstr "베이스 백업을 초기화 할 수 없음: %s" + +#: pg_basebackup.c:2019 +#, c-format +msgid "" +"server returned unexpected response to BASE_BACKUP command; got %d rows and " +"%d fields, expected %d rows and %d fields" +msgstr "" +"서버가 BASE_BACKUP 명령에 대해서 잘못된 응답을 했습니다; 응답값: %d 로우, %d " +"필드, (기대값: %d 로우, %d 필드)" + +#: pg_basebackup.c:2025 +#, c-format +msgid "checkpoint completed" +msgstr "체크포인트 완료" + +#: pg_basebackup.c:2039 +#, c-format +msgid "write-ahead log start point: %s on timeline %u" +msgstr "트랙잭션 로그 시작 위치: %s, 타임라인: %u" + +#: pg_basebackup.c:2047 +#, c-format +msgid "could not get backup header: %s" +msgstr "백업 헤더를 구할 수 없음: %s" + +#: pg_basebackup.c:2050 +#, c-format +msgid "no data returned from server" +msgstr "서버가 아무런 자료도 주지 않았음" + +#: pg_basebackup.c:2093 +#, c-format +msgid "can only write single tablespace to stdout, database has %d" +msgstr "" +"표준 출력으로는 하나의 테이블스페이스만 쓸 수 있음, 데이터베이스는 %d 개의 테" +"이블 스페이스가 있음" + +#: pg_basebackup.c:2106 +#, c-format +msgid "starting background WAL receiver" +msgstr "백그라운드 WAL 수신자 시작 중" + +#: pg_basebackup.c:2189 +#, c-format +msgid "backup failed: %s" +msgstr "백업 실패: %s" + +#: pg_basebackup.c:2192 +#, c-format +msgid "no write-ahead log end position returned from server" +msgstr "서버에서 트랜잭션 로그 마지막 위치가 수신 되지 않았음" + +#: pg_basebackup.c:2195 +#, c-format +msgid "write-ahead log end point: %s" +msgstr "트랜잭션 로그 마지막 위치: %s" + +#: pg_basebackup.c:2206 +#, c-format +msgid "checksum error occurred" +msgstr "체크섬 오류 발생" + +#: pg_basebackup.c:2211 +#, c-format +msgid "final receive failed: %s" +msgstr "수신 작업 마무리 실패: %s" + +#: pg_basebackup.c:2235 +#, c-format +msgid "waiting for background process to finish streaming ..." +msgstr "스트리밍을 끝내기 위해서 백그라운드 프로세스를 기다리는 중 ..." + +#: pg_basebackup.c:2239 +#, c-format +msgid "could not send command to background pipe: %m" +msgstr "백그라운드 파이프로 명령을 보낼 수 없음: %m" + +#: pg_basebackup.c:2244 +#, c-format +msgid "could not wait for child process: %m" +msgstr "하위 프로세스를 기다릴 수 없음: %m" + +#: pg_basebackup.c:2246 +#, c-format +msgid "child %d died, expected %d" +msgstr "%d 개의 하위 프로세스가 종료됨, 기대값 %d" + +#: pg_basebackup.c:2248 streamutil.c:92 streamutil.c:207 streamutil.c:319 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_basebackup.c:2268 +#, c-format +msgid "could not wait for child thread: %m" +msgstr "하위 스레드를 기다릴 수 없음: %m" + +#: pg_basebackup.c:2273 +#, c-format +msgid "could not get child thread exit status: %m" +msgstr "하위 스레드 종료 상태가 정상적이지 않음: %m" + +#: pg_basebackup.c:2276 +#, c-format +msgid "child thread exited with error %u" +msgstr "하위 스레드가 비정상 종료됨: 오류 코드 %u" + +#: pg_basebackup.c:2305 +#, c-format +msgid "syncing data to disk ..." +msgstr "자료를 디스크에 동기화 하는 중 ... " + +#: pg_basebackup.c:2330 +#, c-format +msgid "renaming backup_manifest.tmp to backup_manifest" +msgstr "backup_manifest.tmp 파일을 backup_manifest로 바꾸는 중" + +#: pg_basebackup.c:2350 +#, c-format +msgid "base backup completed" +msgstr "베이스 백업 완료" + +#: pg_basebackup.c:2436 +#, c-format +msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" +msgstr "잘못된 체크포인트 옵션값 \"%s\", \"fast\" 또는 \"spread\"만 사용 가능" + +#: pg_basebackup.c:2454 +#, c-format +msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" +msgstr "\"%s\" 값은 잘못된 출력 형식, \"plain\" 또는 \"tar\" 만 사용 가능" + +#: pg_basebackup.c:2535 +#, c-format +msgid "" +"invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" +msgstr "" +"\"%s\" 값은 잘못된 wal-method 옵션값, \"fetch\", \"stream\" 또는 \"none\"만 " +"사용 가능" + +#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 +#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 +#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 +#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 +#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 +#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 +#: pg_basebackup.c:2803 pg_createsubscriber.c:2037 pg_createsubscriber.c:2047 +#: pg_createsubscriber.c:2055 pg_createsubscriber.c:2083 +#: pg_createsubscriber.c:2115 pg_receivewal.c:748 pg_receivewal.c:760 +#: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 +#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 +#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 +#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 +#: pg_recvlogical.c:917 pg_recvlogical.c:924 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." + +#: pg_basebackup.c:2584 pg_createsubscriber.c:2045 pg_receivewal.c:758 +#: pg_recvlogical.c:863 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" + +#: pg_basebackup.c:2607 +#, c-format +msgid "cannot specify both format and backup target" +msgstr "백업 양식과 백업 타겟을 함께 사용할 수 없음" + +#: pg_basebackup.c:2619 +#, c-format +msgid "must specify output directory or backup target" +msgstr "출력 디렉터리를 지정하거나, 백업 타겟을 지정하세요." + +#: pg_basebackup.c:2625 +#, c-format +msgid "cannot specify both output directory and backup target" +msgstr "출력 디렉터리와 백업 타겟은 함께 지정할 수 없음" + +#: pg_basebackup.c:2655 pg_receivewal.c:802 +#, c-format +msgid "unrecognized compression algorithm: \"%s\"" +msgstr "알 수 없는 압축 알고리즘: \"%s\"" + +#: pg_basebackup.c:2661 pg_receivewal.c:809 +#, c-format +msgid "invalid compression specification: %s" +msgstr "잘못된 압축 정보: %s" + +#: pg_basebackup.c:2677 +#, c-format +msgid "" +"client-side compression is not possible when a backup target is specified" +msgstr "백업 타켓을 사용할 때는 클라이언트 측 압축을 사용할 수 없습니다." + +#: pg_basebackup.c:2688 +#, c-format +msgid "only tar mode backups can be compressed" +msgstr "tar 형식만 압축을 사용할 수 있음" + +#: pg_basebackup.c:2698 +#, c-format +msgid "WAL cannot be streamed when a backup target is specified" +msgstr "백업 타겟을 지정할 때는 WAL 스트리밍을 사용할 수 없습니다." + +#: pg_basebackup.c:2704 +#, c-format +msgid "cannot stream write-ahead logs in tar mode to stdout" +msgstr "tar 방식에서 stdout으로 트랜잭션 로그 스트리밍 불가" + +#: pg_basebackup.c:2711 +#, c-format +msgid "replication slots can only be used with WAL streaming" +msgstr "복제 슬롯은 WAL 스트리밍 방식에서만 사용할 수 있음" + +#: pg_basebackup.c:2723 +#, c-format +msgid "--no-slot cannot be used with slot name" +msgstr "슬롯 이름을 지정한 경우 --no-slot 옵션을 사용할 수 없음" + +#. translator: second %s is an option name +#: pg_basebackup.c:2734 pg_receivewal.c:774 +#, c-format +msgid "%s needs a slot to be specified using --slot" +msgstr "%s 옵션은 --slot 옵션을 함께 사용해야 함" + +#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 +#: pg_basebackup.c:2801 +#, c-format +msgid "%s and %s are incompatible options" +msgstr "%s 옵션과 %s 옵션은 함께 사용할 수 없음" + +#: pg_basebackup.c:2756 +#, c-format +msgid "WAL directory location cannot be specified along with a backup target" +msgstr "트랜잭션 로그 디렉터리 위치는 백업 타켓과 함께 지정할 수 없음" + +#: pg_basebackup.c:2762 +#, c-format +msgid "WAL directory location can only be specified in plain mode" +msgstr "트랜잭션 로그 디렉터리 위치는 plain 모드에서만 사용할 수 있음" + +#: pg_basebackup.c:2771 +#, c-format +msgid "WAL directory location must be an absolute path" +msgstr "트랜잭션 로그 디렉터리 위치는 절대 경로여야 함" + +#: pg_basebackup.c:2871 +#, c-format +msgid "could not create symbolic link \"%s\": %m" +msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" + +#: pg_createsubscriber.c:169 +#, c-format +msgid "failed after the end of recovery" +msgstr "복구 뒤 실패" + +#: pg_createsubscriber.c:170 +#, c-format +msgid "" +"The target server cannot be used as a physical replica anymore. You must " +"recreate the physical replica before continuing." +msgstr "" +"대상 서버는 더 이상 물리 복제 대기 서버로 사용할 수 없습니다. 물리 복제 대기 " +"서버가 필요하다면, 다시 만들어야 합니다." + +#: pg_createsubscriber.c:198 +#, c-format +msgid "" +"publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "다음 발행이 남아 있음: 발행 이름=\"%s\", 대상 데이터베이스=\"%s\"" + +#: pg_createsubscriber.c:200 +#, c-format +msgid "Drop this publication before trying again." +msgstr "재시도 전에 이 발행을 삭제하세요." + +#: pg_createsubscriber.c:204 +#, c-format +msgid "" +"replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "" +"다음 복제 슬롯이 남아 있음: 복제 슬롯 이름=\"%s\", 대상 데이터베이스=\"%s\"" + +#: pg_createsubscriber.c:206 pg_createsubscriber.c:1260 +#, c-format +msgid "Drop this replication slot soon to avoid retention of WAL files." +msgstr "WAL 파일이 늘어나는 것을 막기위해 해당 복제 슬롯을 삭제하세요." + +#: pg_createsubscriber.c:219 +#, c-format +msgid "" +"%s creates a new logical replica from a standby server.\n" +"\n" +msgstr "" +"%s 프로그램은 물리 복제 대기 서버를 새로운 논리 복제 서버로 만듭니다.\n" +"\n" + +#: pg_createsubscriber.c:223 pg_receivewal.c:81 pg_recvlogical.c:92 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"옵션들:\n" + +#: pg_createsubscriber.c:224 +#, c-format +msgid "" +" -d, --database=DBNAME database in which to create a " +"subscription\n" +msgstr " -d, --database=DBNAME 구독을 만들 데이터베이스 지정\n" + +#: pg_createsubscriber.c:225 +#, c-format +msgid "" +" -D, --pgdata=DATADIR location for the subscriber data " +"directory\n" +msgstr " -D, --pgdata=DATADIR 구독용 인스턴스 데이터 디렉터리\n" + +#: pg_createsubscriber.c:226 +#, c-format +msgid "" +" -n, --dry-run dry run, just show what would be done\n" +msgstr "" +" -n, --dry-run 실작업은 안하고, 뭘 할 것인지만 보여줌\n" + +#: pg_createsubscriber.c:227 +#, c-format +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr "" +" -p, --subscriber-port=PORT 구독용 인스턴스 포트 번호 (초기값 %s)\n" + +#: pg_createsubscriber.c:228 +#, c-format +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr " -P, --publisher-server=CONNSTR 구독용 인스턴스 연결 문자열\n" + +#: pg_createsubscriber.c:229 +#, c-format +msgid "" +" -s, --socketdir=DIR socket directory to use (default current " +"dir.)\n" +msgstr "" +" -s, --socketdir=DIR 사용할 소켓 디렉터리 (초기값 current " +"dir.)\n" + +#: pg_createsubscriber.c:230 +#, c-format +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr " -t, --recovery-timeout=SECS 복구가 끝날 때까지 기다리는 초\n" + +#: pg_createsubscriber.c:231 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=NAME 구독용 인스턴스 연결을 위한 사용자\n" + +#: pg_createsubscriber.c:232 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose 자세한 작업 메시지 보여줌\n" + +#: pg_createsubscriber.c:233 +#, c-format +msgid "" +" --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" +msgstr "" +" --config-file=FILENAME 대상 클러스터가 실행될 때 사용할\n" +" 주 서버용 환경 설정 파일\n" + +#: pg_createsubscriber.c:235 +#, c-format +msgid " --publication=NAME publication name\n" +msgstr " --publication=NAME 발행 이름\n" + +#: pg_createsubscriber.c:236 +#, c-format +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=NAME 복제 슬롯 이름\n" + +#: pg_createsubscriber.c:237 +#, c-format +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=NAME 구독 이름\n" + +#: pg_createsubscriber.c:238 +#, c-format +msgid "" +" -V, --version output version information, then exit\n" +msgstr " -V, --version 버전 정보 보여주고 마침\n" + +#: pg_createsubscriber.c:239 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 이 도움말을 보여주고 마침\n" + +#: pg_createsubscriber.c:282 +#, c-format +msgid "could not parse connection string: %s" +msgstr "연결 문자열 구문이 잘못됨: %s" + +#: pg_createsubscriber.c:359 +#, c-format +msgid "" +"program \"%s\" is needed by %s but was not found in the same directory as " +"\"%s\"" +msgstr "\"%s\" 프로그램이 %s에서 필요하지만, \"%s\" 디렉터리 안에 없음" + +#: pg_createsubscriber.c:362 +#, c-format +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "\"%s\" 프로그램이 \"%s\" 프로그램에서 사용하는 %s 버전과 같지 않음" + +#: pg_createsubscriber.c:382 +#, c-format +msgid "checking if directory \"%s\" is a cluster data directory" +msgstr "\"%s\" 디렉터리가 클러스터 데이터 디렉터리인지 확인해보세요." + +#: pg_createsubscriber.c:388 +#, c-format +msgid "data directory \"%s\" does not exist" +msgstr "\"%s\" 데이터 디렉터리가 없음" + +#: pg_createsubscriber.c:396 +#, c-format +msgid "directory \"%s\" is not a database cluster directory" +msgstr "\"%s\" 디렉터리는 데이베이스 클러스터 디렉터리가 아님" + +#: pg_createsubscriber.c:513 +#, c-format +msgid "connection to database failed: %s" +msgstr "데이터베이스 연결 실패: %s" + +#: pg_createsubscriber.c:526 +#, c-format +msgid "could not clear search_path: %s" +msgstr "search_path를 지울 수 없음: %s" + +#: pg_createsubscriber.c:566 +#, c-format +msgid "getting system identifier from publisher" +msgstr "발행에서 system identifier 가져오는 중" + +#: pg_createsubscriber.c:573 +#, c-format +msgid "could not get system identifier: %s" +msgstr "system identifier 가져오기 실패: %s" + +#: pg_createsubscriber.c:579 +#, c-format +msgid "could not get system identifier: got %d rows, expected %d row" +msgstr "system identifier 가져오기 실패: 취득=%d개 로우, 예상=%d개 로우" + +#: pg_createsubscriber.c:586 +#, c-format +msgid "system identifier is %llu on publisher" +msgstr "발행 서버의 system identifier: %llu" + +#: pg_createsubscriber.c:607 +#, c-format +msgid "getting system identifier from subscriber" +msgstr "구독에서 system identifier 가져오는 중" + +#: pg_createsubscriber.c:611 pg_createsubscriber.c:641 +#, c-format +msgid "control file appears to be corrupt" +msgstr "컨트롤 파일 깨짐" + +#: pg_createsubscriber.c:615 pg_createsubscriber.c:656 +#, c-format +msgid "system identifier is %llu on subscriber" +msgstr "구독 서버의 system identifier: %llu" + +#: pg_createsubscriber.c:637 +#, c-format +msgid "modifying system identifier of subscriber" +msgstr "구독 서버의 system identifier 바꾸는 중" + +#: pg_createsubscriber.c:659 +#, c-format +msgid "running pg_resetwal on the subscriber" +msgstr "구독 서버에서 pg_resetwal 실행 중" + +#: pg_createsubscriber.c:671 +#, c-format +msgid "subscriber successfully changed the system identifier" +msgstr "구독 서버의 system identifier 바꾸기 끝" + +#: pg_createsubscriber.c:673 +#, c-format +msgid "could not change system identifier of subscriber: %s" +msgstr "구독 서버의 system identifier 바꾸기 실패: %s" + +#: pg_createsubscriber.c:697 +#, c-format +msgid "could not obtain database OID: %s" +msgstr "베이스베이스 OID 확인 불가: %s" + +#: pg_createsubscriber.c:704 #, c-format -msgid "could not read from ready pipe: %m" -msgstr "준비된 파이프로부터 읽기 실패: %m" +msgid "could not obtain database OID: got %d rows, expected %d row" +msgstr "베이스베이스 OID 확인 불가: %d개 로우 발견, %d개 로우 예상" -#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 -#: streamutil.c:450 +#: pg_createsubscriber.c:776 #, c-format -msgid "could not parse write-ahead log location \"%s\"" -msgstr "트랜잭션 로그 위치 \"%s\" 분석 실패" +msgid "create replication slot \"%s\" on publisher" +msgstr "발행 서버에서 \"%s\" 이름의 복제 슬롯을 만듦" -#: pg_basebackup.c:573 pg_receivewal.c:441 +#: pg_createsubscriber.c:796 #, c-format -msgid "could not finish writing WAL files: %m" -msgstr "WAL 파일 쓰기 마무리 실패: %m" +msgid "could not write an additional WAL record: %s" +msgstr "추가 WAL 레코드를 쓸 수 없음: %s" -#: pg_basebackup.c:620 +#: pg_createsubscriber.c:822 #, c-format -msgid "could not create pipe for background process: %m" -msgstr "백그라운드 프로세스를 위한 파이프 만들기 실패: %m" +msgid "could not obtain recovery progress: %s" +msgstr "복구 작업 과정 확인 불가: %s" -#: pg_basebackup.c:655 +#: pg_createsubscriber.c:854 #, c-format -msgid "created temporary replication slot \"%s\"" -msgstr "\"%s\" 임시 복제 슬롯을 만들 수 없음" +msgid "checking settings on publisher" +msgstr "발행 서버 설정 검사 중" -#: pg_basebackup.c:658 +#: pg_createsubscriber.c:864 #, c-format -msgid "created replication slot \"%s\"" -msgstr "\"%s\" 이름의 복제 슬롯을 만듦" +msgid "primary server cannot be in recovery" +msgstr "주 서버는 복구 작업을 할 수 없음" -#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 +#: pg_createsubscriber.c:888 #, c-format -msgid "could not create directory \"%s\": %m" -msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" +msgid "could not obtain publisher settings: %s" +msgstr "발행 서버 설정 확인 불가: %s" -#: pg_basebackup.c:696 +#: pg_createsubscriber.c:914 #, c-format -msgid "could not create background process: %m" -msgstr "백그라운드 프로세스 만들기 실패: %m" +msgid "publisher requires wal_level >= \"logical\"" +msgstr "발행 서버의 wal_level >= \"logical\" 설정 필요" -#: pg_basebackup.c:708 +#: pg_createsubscriber.c:920 #, c-format -msgid "could not create background thread: %m" -msgstr "백그라운드 스래드 만들기 실패: %m" +msgid "publisher requires %d replication slots, but only %d remain" +msgstr "발행서버는 %d개의 복제 슬롯이 필요하지만, %d개만 남았음" -#: pg_basebackup.c:752 +#: pg_createsubscriber.c:922 pg_createsubscriber.c:931 +#: pg_createsubscriber.c:1028 pg_createsubscriber.c:1037 +#: pg_createsubscriber.c:1046 #, c-format -msgid "directory \"%s\" exists but is not empty" -msgstr "\"%s\" 디렉터리가 있지만 비어 있지 않음" +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "\"%s\" 환경설정 매개변수 값을 %d 이상으로 늘려주세요." -#: pg_basebackup.c:759 +#: pg_createsubscriber.c:929 #, c-format -msgid "could not access directory \"%s\": %m" -msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "발행서버는 %d개의 WAL 발송 프로세스가 필요하지만, %d개만 남았음" -#: pg_basebackup.c:824 +#: pg_createsubscriber.c:938 #, c-format -msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" -msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" -msgstr[0] "%*s/%s kB (100%%), %d/%d 테이블스페이스 %*s" +msgid "two_phase option will not be enabled for replication slots" +msgstr "two_phase 옵션은 복제 슬롯을 위해 비활성화 될 예정" -#: pg_basebackup.c:836 +#: pg_createsubscriber.c:939 #, c-format -msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" -msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" -msgstr[0] "%*s/%s kB (%d%%), %d/%d 테이블스페이스 (%s%-*.*s)" +msgid "" +"Subscriptions will be created with the two_phase option disabled. Prepared " +"transactions will be replicated at COMMIT PREPARED." +msgstr "" +"구독은 two_phase 옵션이 비활성 되어 만들어집니다. 미리 준비된 트랜잭션은 " +"COMMIT PREPARED 때 복제될 것입니다." -#: pg_basebackup.c:852 +#: pg_createsubscriber.c:971 #, c-format -msgid "%*s/%s kB (%d%%), %d/%d tablespace" -msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" -msgstr[0] "%*s/%s kB (%d%%), %d/%d 테이블스페이스" +msgid "checking settings on subscriber" +msgstr "구독 서버 설정 검사 중" -#: pg_basebackup.c:877 +#: pg_createsubscriber.c:978 #, c-format -msgid "transfer rate \"%s\" is not a valid value" -msgstr "\"%s\" 전송 속도는 잘못된 값임" +msgid "target server must be a standby" +msgstr "대상 서버는 대기 서버여야 함" -#: pg_basebackup.c:882 +#: pg_createsubscriber.c:1002 #, c-format -msgid "invalid transfer rate \"%s\": %m" -msgstr "잘못된 전송 속도 \"%s\": %m" +msgid "could not obtain subscriber settings: %s" +msgstr "구독 서버 설정 확인 불가: %s" -#: pg_basebackup.c:891 +#: pg_createsubscriber.c:1026 #, c-format -msgid "transfer rate must be greater than zero" -msgstr "전송 속도는 0보다 커야 함" +msgid "subscriber requires %d replication slots, but only %d remain" +msgstr "구독 서버는 %d개의 복제 슬롯이 필요하지만, %d개만 남았음" -#: pg_basebackup.c:923 +#: pg_createsubscriber.c:1035 #, c-format -msgid "invalid --max-rate unit: \"%s\"" -msgstr "잘못된 --max-rate 단위: \"%s\"" +msgid "subscriber requires %d logical replication workers, but only %d remain" +msgstr "구독 서버는 %d개의 논리 복제 작업자가 필요하지만, %d개만 남았음" -#: pg_basebackup.c:930 +#: pg_createsubscriber.c:1044 #, c-format -msgid "transfer rate \"%s\" exceeds integer range" -msgstr "\"%s\" 전송 속도는 정수형 범위가 아님" +msgid "subscriber requires %d worker processes, but only %d remain" +msgstr "구독 서버는 %d개의 작업자가 필요하지만, %d개만 남았음" -#: pg_basebackup.c:940 +#: pg_createsubscriber.c:1079 #, c-format -msgid "transfer rate \"%s\" is out of range" -msgstr "\"%s\" 전송 속도는 범위 초과" +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "\"%s\" 이름의 구독을 \"%s\" 데이터베이스에서 삭제 중" -#: pg_basebackup.c:961 +#: pg_createsubscriber.c:1088 #, c-format -msgid "could not get COPY data stream: %s" -msgstr "COPY 데이터 스트림을 사용할 수 없음: %s" +msgid "could not drop subscription \"%s\": %s" +msgstr "\"%s\" 구독 삭제 실패: %s" -#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 -#: receivelog.c:965 +#: pg_createsubscriber.c:1123 #, c-format -msgid "could not read COPY data: %s" -msgstr "COPY 자료를 읽을 수 없음: %s" +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "이미 있는 구독 정보를 알 수 없음: %s" -#: pg_basebackup.c:1007 +#: pg_createsubscriber.c:1258 #, c-format -msgid "could not write to compressed file \"%s\": %s" -msgstr "\"%s\" 압축 파일 쓰기 실패: %s" +msgid "could not drop replication slot \"%s\" on primary" +msgstr "주 서버의 \"%s\" 복제 슬롯을 삭제 수 없음" -#: pg_basebackup.c:1071 +#: pg_createsubscriber.c:1292 #, c-format -msgid "could not duplicate stdout: %m" -msgstr "stdout을 중복할 수 없음: %m" +msgid "could not obtain failover replication slot information: %s" +msgstr "failover 복제 슬롯 정보를 찾을 수 없음: %s" -#: pg_basebackup.c:1078 +#: pg_createsubscriber.c:1294 pg_createsubscriber.c:1303 #, c-format -msgid "could not open output file: %m" -msgstr "출력파일을 열 수 없음: %m" +msgid "" +"Drop the failover replication slots on subscriber soon to avoid retention of " +"WAL files." +msgstr "" +"WAL 파일이 비정상적으로 증가는 문제를 막기 위해, 구독 서버에서 failover 복제 " +"슬롯을 바로 지우세요." -#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 +#: pg_createsubscriber.c:1302 #, c-format -msgid "could not set compression level %d: %s" -msgstr "잘못된 압축 수위 %d: %s" +msgid "could not drop failover replication slot" +msgstr "failover 복제 슬롯을 삭제할 수 없음" -#: pg_basebackup.c:1155 +#: pg_createsubscriber.c:1324 #, c-format -msgid "could not create compressed file \"%s\": %s" -msgstr "\"%s\" 압축 파일 만들기 실패: %s" +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "\"%s\" 이름의 복제 슬롯을 \"%s\" 데이터베이스에 만드는 중" -#: pg_basebackup.c:1267 +#: pg_createsubscriber.c:1342 #, c-format -msgid "could not close compressed file \"%s\": %s" -msgstr "\"%s\" 압축 파일 닫기 실패: %s" +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "\"%s\" 이름의 복제 슬롯을 \"%s\" 데이터베이스에 만들기 실패: %s" -#: pg_basebackup.c:1279 pg_recvlogical.c:632 +#: pg_createsubscriber.c:1372 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "\"%s\" 파일을 닫을 수 없음: %m" +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "\"%s\" 이름의 복제 슬롯을 \"%s\" 데이터베이스에서 삭제 중" -#: pg_basebackup.c:1541 +#: pg_createsubscriber.c:1388 #, c-format -msgid "COPY stream ended before last file was finished" -msgstr "마지막 파일을 끝내기 전에 COPY 스트림이 끝났음" +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "\"%s\" 이름의 복제 슬롯을 \"%s\" 데이터베이스에서 삭제 실패: %s" -#: pg_basebackup.c:1570 +#: pg_createsubscriber.c:1409 #, c-format -msgid "invalid tar block header size: %zu" -msgstr "잘못된 tar 블럭 헤더 크기: %zu" +msgid "pg_ctl failed with exit code %d" +msgstr "pg_ctl 작업 실패: 오류 코드 %d" -#: pg_basebackup.c:1627 +#: pg_createsubscriber.c:1414 #, c-format -msgid "could not set permissions on directory \"%s\": %m" -msgstr "\"%s\" 디렉터리 액세스 권한을 지정할 수 없음: %m" +msgid "pg_ctl was terminated by exception 0x%X" +msgstr "pg_ctl 종료됨: 예외 처리 0x%X" -#: pg_basebackup.c:1651 +#: pg_createsubscriber.c:1416 #, c-format -msgid "could not create symbolic link from \"%s\" to \"%s\": %m" -msgstr "\"%s\" 파일을 \"%s\" 심볼릭 링크로 만들 수 없음: %m" +msgid "" +"See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "윗 16진수 값은 \"ntstatus.h\" 파일을 참조하세요." -#: pg_basebackup.c:1658 +#: pg_createsubscriber.c:1418 #, c-format -msgid "unrecognized link indicator \"%c\"" -msgstr "알 수 없는 링크 지시자 \"%c\"" +msgid "pg_ctl was terminated by signal %d: %s" +msgstr "pg_ctl 종료됨: 수신 시그널=%d: %s" -#: pg_basebackup.c:1677 +#: pg_createsubscriber.c:1424 #, c-format -msgid "could not set permissions on file \"%s\": %m" -msgstr "파일 \"%s\" 의 접근권한을 지정할 수 없음: %m" +msgid "pg_ctl exited with unrecognized status %d" +msgstr "pg_ctl 종료됨: 알 수 없은 상태 %d" -#: pg_basebackup.c:1831 +#: pg_createsubscriber.c:1427 #, c-format -msgid "incompatible server version %s" -msgstr "호환하지 않는 서버 버전 %s" +msgid "The failed command was: %s" +msgstr "실패한 명령: %s" -#: pg_basebackup.c:1846 +#: pg_createsubscriber.c:1473 #, c-format -msgid "HINT: use -X none or -X fetch to disable log streaming" -msgstr "" -"힌트: 트랜잭션 로그 스트리밍을 사용하지 않으려면 -X none 또는 -X fetch 옵션" -"을 사용하세요." +msgid "server was started" +msgstr "서버 시작됨" -#: pg_basebackup.c:1882 +#: pg_createsubscriber.c:1488 #, c-format -msgid "initiating base backup, waiting for checkpoint to complete" -msgstr "베이스 백업을 초기화 중, 체크포인트 완료를 기다리는 중" +msgid "server was stopped" +msgstr "서버 멈춤" -#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 -#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 -#: streamutil.c:533 streamutil.c:578 +#: pg_createsubscriber.c:1507 #, c-format -msgid "could not send replication command \"%s\": %s" -msgstr "\"%s\" 복제 명령을 보낼 수 없음: %s" +msgid "waiting for the target server to reach the consistent state" +msgstr "일관성 맞추기 위해 대상 서버 기다리는 중" -#: pg_basebackup.c:1919 +#: pg_createsubscriber.c:1530 #, c-format -msgid "could not initiate base backup: %s" -msgstr "베이스 백업을 초기화 할 수 없음: %s" +msgid "recovery timed out" +msgstr "복구 시간 초과" -#: pg_basebackup.c:1925 +#: pg_createsubscriber.c:1543 #, c-format -msgid "" -"server returned unexpected response to BASE_BACKUP command; got %d rows and " -"%d fields, expected %d rows and %d fields" -msgstr "" -"서버가 BASE_BACKUP 명령에 대해서 잘못된 응답을 했습니다; 응답값: %d 로우, %d " -"필드, (기대값: %d 로우, %d 필드)" +msgid "server did not end recovery" +msgstr "서버 복구 실패" -#: pg_basebackup.c:1933 +#: pg_createsubscriber.c:1545 #, c-format -msgid "checkpoint completed" -msgstr "체크포인트 완료" +msgid "target server reached the consistent state" +msgstr "대상 서버 일관성 맞추기 완료" -#: pg_basebackup.c:1948 +#: pg_createsubscriber.c:1546 #, c-format -msgid "write-ahead log start point: %s on timeline %u" -msgstr "트랙잭션 로그 시작 위치: %s, 타임라인: %u" +msgid "" +"If pg_createsubscriber fails after this point, you must recreate the " +"physical replica before continuing." +msgstr "" +"이 시점에서 pg_createsubscriber 작업을 실패하면, 물리 복제 대기 서버는 다시 " +"만들어야 합니다." -#: pg_basebackup.c:1957 +#: pg_createsubscriber.c:1573 #, c-format -msgid "could not get backup header: %s" -msgstr "백업 헤더를 구할 수 없음: %s" +msgid "could not obtain publication information: %s" +msgstr "발행 정보를 찾을 수 없음: %s" -#: pg_basebackup.c:1963 +#: pg_createsubscriber.c:1587 #, c-format -msgid "no data returned from server" -msgstr "서버가 아무런 자료도 주지 않았음" +msgid "publication \"%s\" already exists" +msgstr "\"%s\" 이름의 발행이 이미 있음" -#: pg_basebackup.c:1995 +#: pg_createsubscriber.c:1588 #, c-format -msgid "can only write single tablespace to stdout, database has %d" -msgstr "" -"표준 출력으로는 하나의 테이블스페이스만 쓸 수 있음, 데이터베이스는 %d 개의 테" -"이블 스페이스가 있음" +msgid "Consider renaming this publication before continuing." +msgstr "계속 진행을 위해서는 이 발행 이름을 바꿔보세요." -#: pg_basebackup.c:2007 +#: pg_createsubscriber.c:1595 #, c-format -msgid "starting background WAL receiver" -msgstr "백그라운드 WAL 수신자 시작 중" +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "\"%s\" 이름의 발행을 \"%s\" 데이터베이스에 만드는 중" -#: pg_basebackup.c:2046 +#: pg_createsubscriber.c:1608 #, c-format -msgid "could not get write-ahead log end position from server: %s" -msgstr "서버에서 트랜잭션 로그 마지막 위치를 구할 수 없음: %s" +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "\"%s\" 이름의 발행을 \"%s\" 데이터베이스에 만들 수 없음: %s" -#: pg_basebackup.c:2052 +#: pg_createsubscriber.c:1637 #, c-format -msgid "no write-ahead log end position returned from server" -msgstr "서버에서 트랜잭션 로그 마지막 위치가 수신 되지 않았음" +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "\"%s\" 이름의 발행을 \"%s\" 데이터베이스에서 삭제 중" -#: pg_basebackup.c:2057 +#: pg_createsubscriber.c:1651 #, c-format -msgid "write-ahead log end point: %s" -msgstr "트랜잭션 로그 마지막 위치: %s" +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "\"%s\" 이름의 발행을 \"%s\" 데이터베이스에 지울 수 없음: %s" -#: pg_basebackup.c:2068 +#: pg_createsubscriber.c:1697 #, c-format -msgid "checksum error occurred" -msgstr "체크섬 오류 발생" +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "\"%s\" 이름의 구독을 \"%s\" 데이터베이스에 만드는 중" -#: pg_basebackup.c:2073 +#: pg_createsubscriber.c:1718 #, c-format -msgid "final receive failed: %s" -msgstr "수신 작업 마무리 실패: %s" +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "\"%s\" 이름의 구독을 \"%s\" 데이터베이스에 만들 수 없음: %s" -#: pg_basebackup.c:2097 +#: pg_createsubscriber.c:1763 #, c-format -msgid "waiting for background process to finish streaming ..." -msgstr "스트리밍을 끝내기 위해서 백그라운드 프로세스를 기다리는 중 ..." +msgid "could not obtain subscription OID: %s" +msgstr "구독 OID 찾지 못함: %s" -#: pg_basebackup.c:2102 +#: pg_createsubscriber.c:1770 #, c-format -msgid "could not send command to background pipe: %m" -msgstr "백그라운드 파이프로 명령을 보낼 수 없음: %m" +msgid "could not obtain subscription OID: got %d rows, expected %d row" +msgstr "구독 OID 확인 불가: %d개 로우 발견, %d개 로우 예상" -#: pg_basebackup.c:2110 +#: pg_createsubscriber.c:1794 #, c-format -msgid "could not wait for child process: %m" -msgstr "하위 프로세스를 기다릴 수 없음: %m" +msgid "" +"setting the replication progress (node name \"%s\", LSN %s) in database " +"\"%s\"" +msgstr "복제 설정 중(노드이름 \"%s\", LSN %s, 데이터베이스 \"%s\")" -#: pg_basebackup.c:2115 +#: pg_createsubscriber.c:1809 #, c-format -msgid "child %d died, expected %d" -msgstr "%d 개의 하위 프로세스가 종료됨, 기대값 %d" +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "\"%s\" 구독을 위한 복제 설정 실패: %s" -#: pg_basebackup.c:2120 streamutil.c:92 +#: pg_createsubscriber.c:1840 #, c-format -msgid "%s" -msgstr "%s" +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "\"%s\" 구독을 \"%s\" 데이터베이스에서 활성화 시도 중" -#: pg_basebackup.c:2145 +#: pg_createsubscriber.c:1852 #, c-format -msgid "could not wait for child thread: %m" -msgstr "하위 스레드를 기다릴 수 없음: %m" +msgid "could not enable subscription \"%s\": %s" +msgstr "\"%s\" 구독을 활성화 할 수 없음: %s" -#: pg_basebackup.c:2151 +#: pg_createsubscriber.c:1944 #, c-format -msgid "could not get child thread exit status: %m" -msgstr "하위 스레드 종료 상태가 정상적이지 않음: %m" +msgid "cannot be executed by \"root\"" +msgstr "\"root\" 권한으로 실행할 수 없음" -#: pg_basebackup.c:2156 +#: pg_createsubscriber.c:1945 #, c-format -msgid "child thread exited with error %u" -msgstr "하위 스레드가 비정상 종료됨: 오류 코드 %u" +msgid "You must run %s as the PostgreSQL superuser." +msgstr "PostgreSQL 슈퍼유저 계정으로 %s 프로그램을 실행하세요." -#: pg_basebackup.c:2184 +#: pg_createsubscriber.c:1966 #, c-format -msgid "syncing data to disk ..." -msgstr "자료를 디스크에 동기화 하는 중 ... " +msgid "database \"%s\" specified more than once" +msgstr "\"%s\" 데이터베이스가 중복 지정 되었음" -#: pg_basebackup.c:2209 +#: pg_createsubscriber.c:2007 #, c-format -msgid "renaming backup_manifest.tmp to backup_manifest" -msgstr "backup_manifest.tmp 파일을 backup_manifest로 바꾸는 중" +msgid "publication \"%s\" specified more than once" +msgstr "\"%s\" 발행이 중복 지정 되었음" -#: pg_basebackup.c:2220 +#: pg_createsubscriber.c:2019 #, c-format -msgid "base backup completed" -msgstr "베이스 백업 완료" +msgid "replication slot \"%s\" specified more than once" +msgstr "\"%s\" 복제 슬롯이 중복 지정 되었음" -#: pg_basebackup.c:2305 +#: pg_createsubscriber.c:2031 #, c-format -msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" -msgstr "\"%s\" 값은 잘못된 출력 형식, \"plain\" 또는 \"tar\" 만 사용 가능" +msgid "subscription \"%s\" specified more than once" +msgstr "\"%s\" 구독이 중복 지정 되었음" -#: pg_basebackup.c:2349 +#: pg_createsubscriber.c:2054 #, c-format -msgid "" -"invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" -msgstr "" -"\"%s\" 값은 잘못된 wal-method 옵션값, \"fetch\", \"stream\" 또는 \"none\"만 " -"사용 가능" +msgid "no subscriber data directory specified" +msgstr "구독 서버용 데이터 디렉터리를 지정하지 않았음" -#: pg_basebackup.c:2377 pg_receivewal.c:580 +#: pg_createsubscriber.c:2065 #, c-format -msgid "invalid compression level \"%s\"" -msgstr "잘못된 압축 수위 \"%s\"" +msgid "could not determine current directory" +msgstr "현재 디렉터리를 확인할 수 없음" -#: pg_basebackup.c:2388 +#: pg_createsubscriber.c:2082 #, c-format -msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" -msgstr "잘못된 체크포인트 옵션값 \"%s\", \"fast\" 또는 \"spread\"만 사용 가능" +msgid "no publisher connection string specified" +msgstr "발행 서버 연결 문자열을 지정하지 않았음" -#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 +#: pg_createsubscriber.c:2086 #, c-format -msgid "invalid status interval \"%s\"" -msgstr "잘못된 상태값 간격: \"%s\"" +msgid "validating publisher connection string" +msgstr "발행 서버 연결 문자열 검사 중" -#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 -#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 -#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 -#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 -#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 -#: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 -#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 -#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 -#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 -#: pg_recvlogical.c:910 pg_recvlogical.c:918 +#: pg_createsubscriber.c:2092 #, c-format -msgid "Try \"%s --help\" for more information.\n" -msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" +msgid "validating subscriber connection string" +msgstr "구독 서버 연결 문자열 검사 중" -#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 +#: pg_createsubscriber.c:2097 #, c-format -msgid "too many command-line arguments (first is \"%s\")" -msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" +msgid "no database was specified" +msgstr "데이터베이스를 지정하지 않았음" -#: pg_basebackup.c:2468 pg_receivewal.c:654 +#: pg_createsubscriber.c:2109 #, c-format -msgid "no target directory specified" -msgstr "대상 디렉터리를 지정하지 않음" +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "발행 서버 연결 문자열에서 데이터베이스 이름 확인: \"%s\"" -#: pg_basebackup.c:2479 +#: pg_createsubscriber.c:2114 #, c-format -msgid "only tar mode backups can be compressed" -msgstr "tar 형식만 압축을 사용할 수 있음" +msgid "no database name specified" +msgstr "데이터베이스 이름을 지정하지 않았음" -#: pg_basebackup.c:2487 +#: pg_createsubscriber.c:2124 #, c-format -msgid "cannot stream write-ahead logs in tar mode to stdout" -msgstr "tar 방식에서 stdout으로 트랜잭션 로그 스트리밍 불가" +msgid "wrong number of publication names specified" +msgstr "발행 이름들의 개수가 잘못됨" -#: pg_basebackup.c:2495 +#: pg_createsubscriber.c:2125 #, c-format -msgid "replication slots can only be used with WAL streaming" -msgstr "복제 슬롯은 WAL 스트리밍 방식에서만 사용할 수 있음" +msgid "" +"The number of specified publication names (%d) must match the number of " +"specified database names (%d)." +msgstr "지정한 발행 이름의 수(%d)와 데이터베이스 이름의 수(%d)가 같지 않음" -#: pg_basebackup.c:2505 +#: pg_createsubscriber.c:2131 #, c-format -msgid "--no-slot cannot be used with slot name" -msgstr "슬롯 이름을 지정한 경우 --no-slot 옵션을 사용할 수 없음" +msgid "wrong number of subscription names specified" +msgstr "구독 이름들의 개수가 잘못됨" -#. translator: second %s is an option name -#: pg_basebackup.c:2517 pg_receivewal.c:634 +#: pg_createsubscriber.c:2132 #, c-format -msgid "%s needs a slot to be specified using --slot" -msgstr "%s 옵션은 --slot 옵션을 함께 사용해야 함" +msgid "" +"The number of specified subscription names (%d) must match the number of " +"specified database names (%d)." +msgstr "지정한 구독 이름의 수(%d)와 데이터베이스 이름의 수(%d)가 같지 않음" -#: pg_basebackup.c:2526 +#: pg_createsubscriber.c:2138 #, c-format -msgid "--create-slot and --no-slot are incompatible options" -msgstr "--create-slot 옵션과 -no-slot 옵션은 함께 사용할 수 없음" +msgid "wrong number of replication slot names specified" +msgstr "복제 슬롯 이름들의 개수가 잘못됨" -#: pg_basebackup.c:2537 +#: pg_createsubscriber.c:2139 #, c-format -msgid "WAL directory location can only be specified in plain mode" -msgstr "트랜잭션 로그 디렉터리 위치는 plain 모드에서만 사용할 수 있음" +msgid "" +"The number of specified replication slot names (%d) must match the number of " +"specified database names (%d)." +msgstr "" +"지정한 복제 슬롯 이름의 수(%d)와 데이터베이스 이름의 수(%d)가 같지 않음" -#: pg_basebackup.c:2547 +#: pg_createsubscriber.c:2168 #, c-format -msgid "WAL directory location must be an absolute path" -msgstr "트랜잭션 로그 디렉터리 위치는 절대 경로여야 함" +msgid "subscriber data directory is not a copy of the source database cluster" +msgstr "구독 서버의 데이터 디렉터리는 원본 데이터베이스 클러스터의 것이 아님" -#: pg_basebackup.c:2557 pg_receivewal.c:663 +#: pg_createsubscriber.c:2181 #, c-format -msgid "this build does not support compression" -msgstr "이 버전은 압축 하는 기능을 포함 하지 않고 빌드 되었습니다." +msgid "standby server is running" +msgstr "대기 서버가 실행 중입니다." -#: pg_basebackup.c:2564 +#: pg_createsubscriber.c:2182 #, c-format -msgid "--progress and --no-estimate-size are incompatible options" -msgstr "--progress 옵션과 --no-estimate-size 옵션은 함께 사용할 수 없음" +msgid "Stop the standby server and try again." +msgstr "대기 서버를 중지 하고, 다시 하세요." -#: pg_basebackup.c:2572 +#: pg_createsubscriber.c:2191 #, c-format -msgid "--no-manifest and --manifest-checksums are incompatible options" -msgstr "--no-manifest 옵션과 --manifest-checksums 옵션은 함께 사용할 수 없음" +msgid "starting the standby server with command-line options" +msgstr "명령행 옵션을 포함해서 대기 서버를 시작 중" -#: pg_basebackup.c:2580 +#: pg_createsubscriber.c:2207 pg_createsubscriber.c:2242 #, c-format -msgid "--no-manifest and --manifest-force-encode are incompatible options" -msgstr "" -"--no-manifest 옵션과 --manifest-force-encode 옵션은 함께 사용할 수 없음" +msgid "stopping the subscriber" +msgstr "구독 서버 중지 중" -#: pg_basebackup.c:2639 +#: pg_createsubscriber.c:2221 #, c-format -msgid "could not create symbolic link \"%s\": %m" -msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" +msgid "starting the subscriber" +msgstr "구독 서버 실행 중" -#: pg_basebackup.c:2643 +#: pg_createsubscriber.c:2250 #, c-format -msgid "symlinks are not supported on this platform" -msgstr "이 플랫폼에서는 심볼 링크가 지원되지 않음" +msgid "Done!" +msgstr "완료!" #: pg_receivewal.c:77 #, c-format @@ -906,15 +2015,6 @@ msgstr "" "%s 프로그램은 PostgreSQL 스트리밍 트랜잭션 로그를 수신하는 도구입니다.\n" "\n" -#: pg_receivewal.c:81 pg_recvlogical.c:81 -#, c-format -msgid "" -"\n" -"Options:\n" -msgstr "" -"\n" -"옵션들:\n" - #: pg_receivewal.c:82 #, c-format msgid "" @@ -922,12 +2022,12 @@ msgid "" msgstr "" " -D, --directory=DIR 지정한 디렉터리로 트랜잭션 로그 파일을 백업함\n" -#: pg_receivewal.c:83 pg_recvlogical.c:82 +#: pg_receivewal.c:83 pg_recvlogical.c:93 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN 지정한 LSN까지 받고 종료함\n" -#: pg_receivewal.c:84 pg_recvlogical.c:86 +#: pg_receivewal.c:84 pg_recvlogical.c:97 #, c-format msgid "" " --if-not-exists do not error if slot already exists when creating a " @@ -935,7 +2035,7 @@ msgid "" msgstr "" " --if-not-exists 슬롯을 새로 만들 때 이미 있어도 오류 내지 않음\n" -#: pg_receivewal.c:85 pg_recvlogical.c:88 +#: pg_receivewal.c:85 pg_recvlogical.c:99 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop 접속이 끊겼을 때 재연결 하지 않음\n" @@ -947,7 +2047,7 @@ msgid "" "disk\n" msgstr " --no-sync 디스크 쓰기 뒤 sync 작업 생략\n" -#: pg_receivewal.c:87 pg_recvlogical.c:93 +#: pg_receivewal.c:87 pg_recvlogical.c:104 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -966,10 +2066,14 @@ msgstr " --synchronous 쓰기 작업 후 즉시 트랜잭션 로그를 #: pg_receivewal.c:93 #, c-format -msgid " -Z, --compress=0-9 compress logs with given compression level\n" -msgstr " -Z, --compress=0-9 압축된 로그 파일의 압축 수위 지정\n" +msgid "" +" -Z, --compress=METHOD[:DETAIL]\n" +" compress as specified\n" +msgstr "" +" -Z, --compress=METHOD[:DETAIL]\n" +" 압축 관련 속성 지정\n" -#: pg_receivewal.c:102 +#: pg_receivewal.c:103 #, c-format msgid "" "\n" @@ -978,7 +2082,7 @@ msgstr "" "\n" "추가 기능:\n" -#: pg_receivewal.c:103 pg_recvlogical.c:78 +#: pg_receivewal.c:104 pg_recvlogical.c:89 #, c-format msgid "" " --create-slot create a new replication slot (for the slot's name " @@ -987,7 +2091,7 @@ msgstr "" " --create-slot 새 복제 슬롯을 만듬 (--slot 옵션에서 슬롯 이름 지" "정)\n" -#: pg_receivewal.c:104 pg_recvlogical.c:79 +#: pg_receivewal.c:105 pg_recvlogical.c:90 #, c-format msgid "" " --drop-slot drop the replication slot (for the slot's name see " @@ -995,115 +2099,147 @@ msgid "" msgstr "" " --drop-slot 복제 슬롯 삭제 (--slot 옵션에서 슬롯 이름 지정)\n" -#: pg_receivewal.c:117 +#: pg_receivewal.c:191 #, c-format msgid "finished segment at %X/%X (timeline %u)" msgstr "마무리된 세그먼트 위치: %X/%X (타임라인 %u)" -#: pg_receivewal.c:124 +#: pg_receivewal.c:198 #, c-format msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "로그 스트리밍 중지된 위치: %X/%X (타임라인 %u)" -#: pg_receivewal.c:140 +#: pg_receivewal.c:214 #, c-format msgid "switched to timeline %u at %X/%X" msgstr "전환됨: 타임라인 %u, 위치 %X/%X" -#: pg_receivewal.c:150 +#: pg_receivewal.c:224 pg_recvlogical.c:1053 #, c-format msgid "received interrupt signal, exiting" msgstr "인터럽터 시그널을 받음, 종료함" -#: pg_receivewal.c:186 +#: pg_receivewal.c:256 #, c-format msgid "could not close directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" -#: pg_receivewal.c:272 +#: pg_receivewal.c:323 #, c-format -msgid "segment file \"%s\" has incorrect size %d, skipping" -msgstr "\"%s\" 조각 파일은 잘못된 크기임: %d, 무시함" +msgid "segment file \"%s\" has incorrect size %lld, skipping" +msgstr "\"%s\" 조각 파일은 잘못된 크기임: %lld, 무시함" -#: pg_receivewal.c:290 +#: pg_receivewal.c:340 #, c-format msgid "could not open compressed file \"%s\": %m" msgstr "\"%s\" 압축 파일 열기 실패: %m" -#: pg_receivewal.c:296 +#: pg_receivewal.c:343 #, c-format msgid "could not seek in compressed file \"%s\": %m" msgstr "\"%s\" 압축 파일 작업 위치 찾기 실패: %m" -#: pg_receivewal.c:304 +#: pg_receivewal.c:349 #, c-format msgid "could not read compressed file \"%s\": %m" msgstr "\"%s\" 압축 파일 읽기 실패: %m" -#: pg_receivewal.c:307 +#: pg_receivewal.c:352 #, c-format msgid "could not read compressed file \"%s\": read %d of %zu" msgstr "\"%s\" 압축 파일을 읽을 수 없음: %d 읽음, 전체 %zu" -#: pg_receivewal.c:318 +#: pg_receivewal.c:362 #, c-format msgid "" "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" msgstr "\"%s\" 압축 파일은 압축 풀었을 때 잘못된 크기임: %d, 무시함" -#: pg_receivewal.c:422 +#: pg_receivewal.c:390 #, c-format -msgid "starting log streaming at %X/%X (timeline %u)" -msgstr "로그 스트리밍 시작 위치: %X/%X (타임라인 %u)" +msgid "could not create LZ4 decompression context: %s" +msgstr "LZ4 압축 컨텍스트 정보를 생성할 수 없습니다: %s" + +#: pg_receivewal.c:420 +#, c-format +msgid "could not decompress file \"%s\": %s" +msgstr "\"%s\" 파일 압축 풀기 실패: %s" + +#: pg_receivewal.c:443 +#, c-format +msgid "could not free LZ4 decompression context: %s" +msgstr "LZ4 압축 해제 컨텍스트 반환 실패: %s" -#: pg_receivewal.c:537 pg_recvlogical.c:762 +#: pg_receivewal.c:448 #, c-format -msgid "invalid port number \"%s\"" -msgstr "잘못된 포트 번호: \"%s\"" +msgid "" +"compressed segment file \"%s\" has incorrect uncompressed size %zu, skipping" +msgstr "\"%s\" 압축된 조각 파일은 압축 풀었을 때 잘못된 크기임: %zu, 무시함" + +#: pg_receivewal.c:453 +#, c-format +msgid "" +"cannot check file \"%s\": compression with %s not supported by this build" +msgstr "\"%s\" 파일 검사 실패: %s 압축을 지원 안하게 빌드되었음" + +#: pg_receivewal.c:578 +#, c-format +msgid "starting log streaming at %X/%X (timeline %u)" +msgstr "로그 스트리밍 시작 위치: %X/%X (타임라인 %u)" -#: pg_receivewal.c:565 pg_recvlogical.c:788 +#: pg_receivewal.c:693 pg_recvlogical.c:801 #, c-format msgid "could not parse end position \"%s\"" msgstr "시작 위치 구문이 잘못됨 \"%s\"" -#: pg_receivewal.c:625 +#: pg_receivewal.c:766 #, c-format msgid "cannot use --create-slot together with --drop-slot" msgstr "--create-slot 옵션과 --drop-slot 옵션을 함께 사용할 수 없음" -#: pg_receivewal.c:643 +#: pg_receivewal.c:782 #, c-format msgid "cannot use --synchronous together with --no-sync" msgstr "--synchronous 옵션과 --no-sync 옵션을 함께 사용할 수 없음" -#: pg_receivewal.c:719 +#: pg_receivewal.c:792 +#, c-format +msgid "no target directory specified" +msgstr "대상 디렉터리를 지정하지 않음" + +#: pg_receivewal.c:816 +#, c-format +msgid "compression with %s is not yet supported" +msgstr "%s 압축을 아직 지원하지 않음" + +#: pg_receivewal.c:859 #, c-format msgid "" "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "\"%s\" 슬롯을 이용한 복제 연결은 이 데이터베이스에서 사용할 수 없음" -#: pg_receivewal.c:730 pg_recvlogical.c:966 +#: pg_receivewal.c:878 pg_recvlogical.c:972 #, c-format msgid "dropping replication slot \"%s\"" msgstr "\"%s\" 이름의 복제 슬롯을 삭제 중" -#: pg_receivewal.c:741 pg_recvlogical.c:976 +#: pg_receivewal.c:889 pg_recvlogical.c:982 #, c-format msgid "creating replication slot \"%s\"" msgstr "\"%s\" 이름의 복제 슬롯을 만드는 중" -#: pg_receivewal.c:767 pg_recvlogical.c:1001 +#: pg_receivewal.c:918 pg_recvlogical.c:1006 #, c-format msgid "disconnected" msgstr "연결 끊김" #. translator: check source for value for %d -#: pg_receivewal.c:773 pg_recvlogical.c:1007 +#: pg_receivewal.c:922 pg_recvlogical.c:1010 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "연결 끊김; 다시 연결 하기 위해 %d 초를 기다리는 중" -#: pg_recvlogical.c:73 +#: pg_recvlogical.c:84 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1112,7 +2248,7 @@ msgstr "" "%s 프로그램은 논리 디코딩 스트림을 제어하는 도구입니다.\n" "\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:88 #, c-format msgid "" "\n" @@ -1121,7 +2257,7 @@ msgstr "" "\n" "성능에 관계된 기능들:\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:91 #, c-format msgid "" " --start start streaming in a replication slot (for the " @@ -1130,12 +2266,12 @@ msgstr "" " --start 복제 슬롯을 이용한 스트리밍 시작 (--slot 옵션에서 슬" "롯 이름 지정)\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:94 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=파일 작업 로그를 해당 파일에 기록, 표준 출력은 -\n" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:95 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1146,14 +2282,14 @@ msgstr "" " 지정한 초 간격으로 파일 fsync 작업을 함 (초기값: " "%d)\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:98 #, c-format msgid "" " -I, --startpos=LSN where in an existing slot should the streaming " "start\n" msgstr " -I, --startpos=LSN 스트리밍을 시작할 기존 슬롯 위치\n" -#: pg_recvlogical.c:89 +#: pg_recvlogical.c:100 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1164,112 +2300,116 @@ msgstr "" " 출력 플러그인에서 사용할 옵션들의 옵션 이름과 그 " "값\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:103 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN 사용할 출력 플러그인 (초기값: %s)\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:106 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=슬롯이름 논리 복제 슬롯 이름\n" -#: pg_recvlogical.c:100 +#: pg_recvlogical.c:107 +#, c-format +msgid "" +" -t, --two-phase enable decoding of prepared transactions when " +"creating a slot\n" +msgstr "" +" -t, --two-phase 슬롯을 만들 때 미리 준비된 트랜잭션 디코딩 활성화\n" + +#: pg_recvlogical.c:112 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=디비이름 접속할 데이터베이스\n" -#: pg_recvlogical.c:133 +#: pg_recvlogical.c:145 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "쓰기 확인 위치: %X/%X, 플러시 위치 %X/%X (슬롯 %s)" -#: pg_recvlogical.c:157 receivelog.c:343 +#: pg_recvlogical.c:169 receivelog.c:360 #, c-format msgid "could not send feedback packet: %s" msgstr "피드백 패킷을 보낼 수 없음: %s" -#: pg_recvlogical.c:230 +#: pg_recvlogical.c:239 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "로그 스트리밍 시작 함, 위치: %X/%X (슬롯 %s)" -#: pg_recvlogical.c:271 +#: pg_recvlogical.c:281 #, c-format msgid "streaming initiated" msgstr "스트리밍 초기화 됨" -#: pg_recvlogical.c:335 +#: pg_recvlogical.c:346 #, c-format msgid "could not open log file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: pg_recvlogical.c:361 receivelog.c:873 +#: pg_recvlogical.c:375 receivelog.c:882 #, c-format msgid "invalid socket: %s" msgstr "잘못된 소켓: %s" -#: pg_recvlogical.c:414 receivelog.c:901 +#: pg_recvlogical.c:428 receivelog.c:910 #, c-format -msgid "select() failed: %m" -msgstr "select() 실패: %m" +msgid "%s() failed: %m" +msgstr "%s() 실패: %m" -#: pg_recvlogical.c:421 receivelog.c:951 +#: pg_recvlogical.c:435 receivelog.c:959 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL 스트림에서 자료 받기 실패: %s" -#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 +#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 +#: receivelog.c:1066 #, c-format msgid "streaming header too small: %d" msgstr "스트리밍 헤더 크기가 너무 작음: %d" -#: pg_recvlogical.c:498 receivelog.c:833 +#: pg_recvlogical.c:512 receivelog.c:843 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "알 수 없는 스트리밍 헤더: \"%c\"" -#: pg_recvlogical.c:552 pg_recvlogical.c:564 +#: pg_recvlogical.c:566 pg_recvlogical.c:578 #, c-format -msgid "could not write %u bytes to log file \"%s\": %m" -msgstr "%u 바이트 쓰기 실패, 로그파일 \"%s\": %m" +msgid "could not write %d bytes to log file \"%s\": %m" +msgstr "%d 바이트 쓰기 실패, 대상 로그파일 \"%s\": %m" -#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 +#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "복제 스트림의 예상치 못한 종료: %s" -#: pg_recvlogical.c:742 -#, c-format -msgid "invalid fsync interval \"%s\"" -msgstr "\"%s\" 값은 잘못된 fsync 반복주기 임" - -#: pg_recvlogical.c:780 +#: pg_recvlogical.c:796 #, c-format msgid "could not parse start position \"%s\"" msgstr "시작 위치 구문이 잘못됨 \"%s\"" -#: pg_recvlogical.c:869 +#: pg_recvlogical.c:874 #, c-format msgid "no slot specified" msgstr "슬롯을 지정하지 않았음" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:881 #, c-format msgid "no target file specified" msgstr "대상 파일을 지정하지 않았음" -#: pg_recvlogical.c:885 +#: pg_recvlogical.c:888 #, c-format msgid "no database specified" msgstr "데이터베이스 지정하지 않았음" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:895 #, c-format msgid "at least one action needs to be specified" msgstr "적어도 하나 이상의 작업 방법을 지정해야 함" -#: pg_recvlogical.c:901 +#: pg_recvlogical.c:902 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "" @@ -1281,89 +2421,94 @@ msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "" " --create-slot 옵션이나 --drop-slot 옵션은 --startpos 옵션과 함께 쓸 수 없음" -#: pg_recvlogical.c:917 +#: pg_recvlogical.c:916 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos 옵션은 --start 옵션과 함께 사용해야 함" -#: pg_recvlogical.c:948 +#: pg_recvlogical.c:923 +#, c-format +msgid "--two-phase may only be specified with --create-slot" +msgstr "--two-phase 옵션은 --create-slot 옵션을 쓸 때만 사용 가능함" + +#: pg_recvlogical.c:956 #, c-format msgid "could not establish database-specific replication connection" msgstr "데이터베이스 의존적인 복제 연결을 할 수 없음" -#: pg_recvlogical.c:1047 +#: pg_recvlogical.c:1056 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "keepalive에 의해서 %X/%X 마지막 위치에 도달했음" -#: pg_recvlogical.c:1050 +#: pg_recvlogical.c:1061 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "%X/%X 마지막 위치가 WAL 레코드 %X/%X 위치에서 도달했음" -#: receivelog.c:69 +#: receivelog.c:66 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "\"%s\" archive status 파일을 만들 수 없습니다: %s" -#: receivelog.c:116 +#: receivelog.c:73 +#, c-format +msgid "could not close archive status file \"%s\": %s" +msgstr "\"%s\" archive status 파일을 닫을 수 없습니다: %s" + +#: receivelog.c:122 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "\"%s\" WAL 파일 크기를 알 수 없음: %s" -#: receivelog.c:126 +#: receivelog.c:133 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "이미 있는 \"%s\" 트랜잭션 로그 파일을 열 수 없음: %s" -#: receivelog.c:134 +#: receivelog.c:142 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "이미 있는 \"%s\" WAL 파일 fsync 실패: %s" -#: receivelog.c:148 +#: receivelog.c:157 #, c-format -msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" -msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" +msgid "write-ahead log file \"%s\" has %zd byte, should be 0 or %d" +msgid_plural "write-ahead log file \"%s\" has %zd bytes, should be 0 or %d" msgstr[0] "" -"\"%s\" 트랜잭션 로그파일의 크기가 %d 바이트임, 0 또는 %d 바이트여야 함" +"\"%s\" 트랜잭션 로그파일의 크기가 %zd 바이트임, 0 또는 %d 바이트여야 함" -#: receivelog.c:163 +#: receivelog.c:175 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "\"%s\" WAL 파일을 열 수 없음: %s" -#: receivelog.c:189 -#, c-format -msgid "could not determine seek position in file \"%s\": %s" -msgstr "\"%s\" 파일의 시작 위치를 결정할 수 없음: %s" - -#: receivelog.c:203 +#: receivelog.c:216 #, c-format -msgid "not renaming \"%s%s\", segment is not complete" -msgstr "\"%s%s\" 이름 변경 실패, 세그먼트가 완료되지 않았음" +msgid "not renaming \"%s\", segment is not complete" +msgstr "\"%s\" 이름 변경 실패, 세그먼트가 완료되지 않았음" -#: receivelog.c:215 receivelog.c:300 receivelog.c:675 +#: receivelog.c:227 receivelog.c:317 receivelog.c:688 #, c-format msgid "could not close file \"%s\": %s" msgstr "\"%s\" 파일을 닫을 수 없음: %s" -#: receivelog.c:272 +#: receivelog.c:288 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "타임라인 %u 번을 위한 내역 파일 이름이 잘못 되었음: %s" -#: receivelog.c:280 +#: receivelog.c:297 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "\"%s\" 타임라인 내역 파일을 만들 수 없음: %s" -#: receivelog.c:287 +#: receivelog.c:304 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "\"%s\" 타임라인 내역 파일에 쓸 수 없음: %s" -#: receivelog.c:377 +#: receivelog.c:394 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1372,7 +2517,7 @@ msgstr "" "%s 서버 버전은 호환되지 않음; 클라이언트는 %s 버전 보다 오래된 서버의 스트리" "밍은 지원하지 않음" -#: receivelog.c:386 +#: receivelog.c:403 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1381,27 +2526,18 @@ msgstr "" "%s 서버 버전은 호환되지 않음; 클라이언트는 %s 버전 보다 새로운 서버의 스트리" "밍은 지원하지 않음" -#: receivelog.c:488 streamutil.c:430 streamutil.c:467 -#, c-format -msgid "" -"could not identify system: got %d rows and %d fields, expected %d rows and " -"%d or more fields" -msgstr "" -"시스템을 식별할 수 없음: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " -"이상" - -#: receivelog.c:495 +#: receivelog.c:508 #, c-format msgid "" "system identifier does not match between base backup and streaming connection" msgstr "시스템 식별자가 베이스 백업과 스트리밍 연결에서 서로 다름" -#: receivelog.c:501 +#: receivelog.c:516 #, c-format msgid "starting timeline %u is not present in the server" msgstr "%u 타임라인으로 시작하는 것을 서버에서 제공 하지 않음" -#: receivelog.c:542 +#: receivelog.c:555 #, c-format msgid "" "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, " @@ -1410,12 +2546,12 @@ msgstr "" "TIMELINE_HISTORY 명령 결과가 잘못됨: 받은 값: 로우수 %d, 필드수 %d, 예상값: " "로우수 %d, 필드수 %d" -#: receivelog.c:613 +#: receivelog.c:626 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "서버가 잘못된 다음 타임라인 번호 %u 보고함, 이전 타임라인 번호 %u" -#: receivelog.c:619 +#: receivelog.c:632 #, c-format msgid "" "server stopped streaming timeline %u at %X/%X, but reported next timeline %u " @@ -1424,12 +2560,12 @@ msgstr "" "서버의 중지 위치: 타임라인 %u, 위치 %X/%X, 하지만 보고 받은 위치: 타임라인 " "%u 위치 %X/%X" -#: receivelog.c:659 +#: receivelog.c:672 #, c-format msgid "replication stream was terminated before stop point" msgstr "복제 스트림이 중지 위치 전에 종료 되었음" -#: receivelog.c:705 +#: receivelog.c:718 #, c-format msgid "" "unexpected result set after end-of-timeline: got %d rows and %d fields, " @@ -1438,66 +2574,61 @@ msgstr "" "타임라인 끝에 잘못된 결과가 발견 됨: 로우수 %d, 필드수 %d / 예상값: 로우수 " "%d, 필드수 %d" -#: receivelog.c:714 +#: receivelog.c:727 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "다음 타임라인 시작 위치 분석 실패 \"%s\"" -#: receivelog.c:763 receivelog.c:1015 +#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "\"%s\" 파일 fsync 실패: %s" -#: receivelog.c:1078 +#: receivelog.c:1083 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "%u 위치의 수신된 트랜잭션 로그 레코드에 파일을 열 수 없음" -#: receivelog.c:1088 +#: receivelog.c:1093 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "잘못된 WAL 자료 위치 %08x, 기대값 %08x" -#: receivelog.c:1122 +#: receivelog.c:1128 #, c-format -msgid "could not write %u bytes to WAL file \"%s\": %s" -msgstr "%u 바이트를 \"%s\" WAL 파일에 쓸 수 없음: %s" +msgid "could not write %d bytes to WAL file \"%s\": %s" +msgstr "%d 바이트를 \"%s\" WAL 파일에 쓸 수 없음: %s" -#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 +#: receivelog.c:1153 receivelog.c:1193 receivelog.c:1222 #, c-format msgid "could not send copy-end packet: %s" msgstr "copy-end 패킷을 보낼 수 없음: %s" -#: streamutil.c:160 +#: streamutil.c:165 msgid "Password: " msgstr "암호: " -#: streamutil.c:185 +#: streamutil.c:192 #, c-format msgid "could not connect to server" msgstr "서버 접속 실패" -#: streamutil.c:202 -#, c-format -msgid "could not connect to server: %s" -msgstr "서버 접속 실패: %s" - -#: streamutil.c:231 +#: streamutil.c:233 #, c-format -msgid "could not clear search_path: %s" -msgstr "search_path를 지울 수 없음: %s" +msgid "could not clear \"search_path\": %s" +msgstr "\"search_path\"를 지울 수 없음: %s" -#: streamutil.c:247 +#: streamutil.c:249 #, c-format -msgid "could not determine server setting for integer_datetimes" -msgstr "integer_datetimes 서버 설정을 알 수 없음" +msgid "could not determine server setting for \"integer_datetimes\"" +msgstr "\"integer_datetimes\" 서버 설정을 알 수 없음" -#: streamutil.c:254 +#: streamutil.c:256 #, c-format -msgid "integer_datetimes compile flag does not match server" -msgstr "integer_datetimes 컴파일 플래그가 서버와 일치하지 않음" +msgid "\"integer_datetimes\" compile flag does not match server" +msgstr "\"integer_datetimes\" 컴파일 플래그가 서버와 일치하지 않음" -#: streamutil.c:305 +#: streamutil.c:375 #, c-format msgid "" "could not fetch WAL segment size: got %d rows and %d fields, expected %d " @@ -1506,24 +2637,23 @@ msgstr "" "WAL 조각 크기 계산 실패: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " "이상" -#: streamutil.c:315 +#: streamutil.c:385 #, c-format msgid "WAL segment size could not be parsed" msgstr "WAL 조각 크기 분석 못함" -#: streamutil.c:333 +#: streamutil.c:403 #, c-format -msgid "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"remote server reported a value of %d byte" -msgid_plural "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"remote server reported a value of %d bytes" -msgstr[0] "" -"WAL 조각 파일 크기는 1MB에서 1GB사이 2의 제곱 크기여야 하는데, " -"원격 서버는 %d 바이트입니다." +msgid "remote server reported invalid WAL segment size (%d byte)" +msgid_plural "remote server reported invalid WAL segment size (%d bytes)" +msgstr[0] "원격 서버가 잘못 WAL 조각 크기를 보고했음 (%d 바이트)" + +#: streamutil.c:407 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "WAL 조각 파일 크기는 1MB에서 1GB사이 2의 제곱 크기여야 합니다." -#: streamutil.c:378 +#: streamutil.c:449 #, c-format msgid "" "could not fetch group access flag: got %d rows and %d fields, expected %d " @@ -1532,12 +2662,45 @@ msgstr "" "그룹 접근 플래그를 가져올 수 없음: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, " "필드수 %d 이상" -#: streamutil.c:387 +#: streamutil.c:458 #, c-format msgid "group access flag could not be parsed: %s" msgstr "그룹 접근 플래그를 분석 못함: %s" -#: streamutil.c:544 +#: streamutil.c:501 streamutil.c:538 +#, c-format +msgid "" +"could not identify system: got %d rows and %d fields, expected %d rows and " +"%d or more fields" +msgstr "" +"시스템을 식별할 수 없음: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " +"이상" + +#: streamutil.c:590 +#, c-format +msgid "" +"could not read replication slot \"%s\": got %d rows and %d fields, expected " +"%d rows and %d fields" +msgstr "" +"\"%s\" 복제 슬롯을 읽을 수 없음: 로우수 %d, 필드수 %d, 기대값 로우수 %d, 필드" +"수 %d" + +#: streamutil.c:602 +#, c-format +msgid "replication slot \"%s\" does not exist" +msgstr "\"%s\" 이름의 복제 슬롯이 없습니다" + +#: streamutil.c:613 +#, c-format +msgid "expected a physical replication slot, got type \"%s\" instead" +msgstr "물리 복제 슬롯을 사용해야 함, \"%s\" 복제 슬롯임" + +#: streamutil.c:627 +#, c-format +msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" +msgstr "\"%s\" restart_lsn 위치를 해석할 수 없음, 해당 슬롯: \"%s\"" + +#: streamutil.c:744 #, c-format msgid "" "could not create replication slot \"%s\": got %d rows and %d fields, " @@ -1546,7 +2709,7 @@ msgstr "" "\"%s\" 복제 슬롯을 만들 수 없음: 로우수 %d, 필드수 %d, 기대값 로우수 %d, 필드" "수 %d" -#: streamutil.c:588 +#: streamutil.c:788 #, c-format msgid "" "could not drop replication slot \"%s\": got %d rows and %d fields, expected " @@ -1555,34 +2718,30 @@ msgstr "" "\"%s\" 복제 슬롯을 삭제할 수 없음: 로우수 %d, 필드수 %d, 기대값 로우수 %d, 필" "드수 %d" -#: walmethods.c:438 walmethods.c:927 +#: walmethods.c:726 walmethods.c:1269 msgid "could not compress data" msgstr "자료를 압축할 수 없음" -#: walmethods.c:470 +#: walmethods.c:755 msgid "could not reset compression stream" msgstr "압축 스트림을 리셋할 수 없음" -#: walmethods.c:568 -msgid "could not initialize compression library" -msgstr "압축 라이브러리를 초기화할 수 없음" - -#: walmethods.c:580 +#: walmethods.c:892 msgid "implementation error: tar files can't have more than one open file" msgstr "구현 오류: tar 파일은 하나 이상 열 수 없음" -#: walmethods.c:594 +#: walmethods.c:907 msgid "could not create tar header" msgstr "tar 해더를 만들 수 없음" -#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 +#: walmethods.c:924 walmethods.c:965 walmethods.c:1171 walmethods.c:1184 msgid "could not change compression parameters" msgstr "압축 매개 변수를 바꿀 수 없음" -#: walmethods.c:730 +#: walmethods.c:1056 msgid "unlink not supported with compression" msgstr "압축 상태에서 파일 삭제는 지원하지 않음" -#: walmethods.c:952 +#: walmethods.c:1293 msgid "could not close compression stream" msgstr "압축 스트림을 닫을 수 없음" diff --git a/src/bin/pg_basebackup/po/ru.po b/src/bin/pg_basebackup/po/ru.po index 743d7c935e40d..94912f27c90b4 100644 --- a/src/bin/pg_basebackup/po/ru.po +++ b/src/bin/pg_basebackup/po/ru.po @@ -1,21 +1,21 @@ # Russian message translation file for pg_basebackup # Copyright (C) 2012-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-11-01 14:40+0300\n" -"PO-Revision-Date: 2022-09-29 12:01+0300\n" +"POT-Creation-Date: 2024-11-09 07:47+0300\n" +"PO-Revision-Date: 2024-09-07 11:12+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: ../../../src/common/logging.c:276 #, c-format @@ -37,37 +37,44 @@ msgstr "подробности: " msgid "hint: " msgstr "подсказка: " -#: ../../common/compression.c:130 ../../common/compression.c:139 -#: ../../common/compression.c:148 +#: ../../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 #, c-format msgid "this build does not support compression with %s" msgstr "эта сборка программы не поддерживает сжатие %s" -#: ../../common/compression.c:203 +#: ../../common/compression.c:205 msgid "found empty string where a compression option was expected" msgstr "вместо указания параметра сжатия получена пустая строка" -#: ../../common/compression.c:237 +#: ../../common/compression.c:244 #, c-format msgid "unrecognized compression option: \"%s\"" msgstr "нераспознанный параметр сжатия: \"%s\"" -#: ../../common/compression.c:276 +#: ../../common/compression.c:283 #, c-format msgid "compression option \"%s\" requires a value" msgstr "для параметра сжатия \"%s\" требуется значение" -#: ../../common/compression.c:285 +#: ../../common/compression.c:292 #, c-format msgid "value for compression option \"%s\" must be an integer" msgstr "значение параметра сжатия \"%s\" должно быть целочисленным" -#: ../../common/compression.c:335 +#: ../../common/compression.c:331 +#, c-format +msgid "value for compression option \"%s\" must be a Boolean value" +msgstr "значение параметра сжатия \"%s\" должно быть булевским" + +#: ../../common/compression.c:379 #, c-format msgid "compression algorithm \"%s\" does not accept a compression level" msgstr "для алгоритма сжатия \"%s\" нельзя задать уровень сжатия" -#: ../../common/compression.c:342 +#: ../../common/compression.c:386 #, c-format msgid "" "compression algorithm \"%s\" expects a compression level between %d and %d " @@ -76,55 +83,149 @@ msgstr "" "для алгоритма сжатия \"%s\" ожидается уровень сжатия от %d до %d (по " "умолчанию %d)" -#: ../../common/compression.c:353 +#: ../../common/compression.c:397 #, c-format msgid "compression algorithm \"%s\" does not accept a worker count" msgstr "для алгоритма сжатия \"%s\" нельзя задать число потоков" +#: ../../common/compression.c:408 +#, c-format +msgid "compression algorithm \"%s\" does not support long-distance mode" +msgstr "алгоритм сжатия \"%s\" не поддерживает режим большой дистанции" + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не удалось открыть файл \"%s\" для чтения: %m" + +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: pg_receivewal.c:402 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "не удалось закрыть файл \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "несоответствие порядка байт" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, " +"and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"возможно несоответствие порядка байт\n" +"Порядок байт в файле pg_control может не соответствовать используемому\n" +"этой программой. В этом случае результаты будут неверными и\n" +"установленный PostgreSQL будет несовместим с этим каталогом данных." + +#: ../../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 ../../fe_utils/recovery_gen.c:140 +#: pg_basebackup.c:1846 pg_receivewal.c:386 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не удалось записать файл \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 -#: pg_receivewal.c:380 pg_recvlogical.c:341 +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_receivewal.c:319 pg_recvlogical.c:352 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: ../../common/file_utils.c:166 pg_receivewal.c:303 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "эта сборка программы не поддерживает метод синхронизации \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: ../../common/file_utils.c:200 pg_receivewal.c:532 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 -#: ../../common/file_utils.c:365 ../../fe_utils/recovery_gen.c:121 -#: pg_receivewal.c:447 +#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "не удалось открыть файл \"%s\": %m" +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" -#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 -#: pg_recvlogical.c:196 +#: ../../common/restricted_token.c:60 #, c-format -msgid "could not fsync file \"%s\": %m" -msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" +msgid "could not open process token: error code %lu" +msgstr "не удалось открыть маркер процесса (код ошибки: %lu)" -#: ../../common/file_utils.c:383 pg_basebackup.c:2266 walmethods.c:459 +#: ../../common/restricted_token.c:74 #, c-format -msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" +msgid "could not allocate SIDs: error code %lu" +msgstr "не удалось подготовить структуры SID (код ошибки: %lu)" + +#: ../../common/restricted_token.c:94 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "не удалось создать ограниченный маркер (код ошибки: %lu)" + +#: ../../common/restricted_token.c:115 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)" + +#: ../../common/restricted_token.c:153 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)" + +#: ../../common/restricted_token.c:168 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" #: ../../fe_utils/option_utils.c:69 #, c-format @@ -136,51 +237,65 @@ msgstr "неверное значение \"%s\" для параметра %s" msgid "%s must be in range %d..%d" msgstr "значение %s должно быть в диапазоне %d..%d" -#: ../../fe_utils/recovery_gen.c:34 ../../fe_utils/recovery_gen.c:45 -#: ../../fe_utils/recovery_gen.c:70 ../../fe_utils/recovery_gen.c:90 -#: ../../fe_utils/recovery_gen.c:149 pg_basebackup.c:1646 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нераспознанный метод синхронизации: %s" + +#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 +#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 +#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:334 #, c-format msgid "out of memory" msgstr "нехватка памяти" -#: ../../fe_utils/recovery_gen.c:124 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1443 pg_basebackup.c:1737 +#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 +#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 #, c-format msgid "could not write to file \"%s\": %m" msgstr "не удалось записать в файл \"%s\": %m" -#: ../../fe_utils/recovery_gen.c:133 bbstreamer_file.c:93 bbstreamer_file.c:339 -#: pg_basebackup.c:1507 pg_basebackup.c:1716 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" msgstr "не удалось создать файл \"%s\": %m" -#: bbstreamer_file.c:138 pg_recvlogical.c:635 +#: ../../fe_utils/string_utils.c:434 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "не удалось закрыть файл \"%s\": %m" +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "" +"аргумент команды оболочки содержит символ новой строки или перевода каретки: " +"\"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "" +"имя базы данных содержит символ новой строки или перевода каретки: \"%s\"\n" #: bbstreamer_file.c:275 #, c-format msgid "unexpected state while extracting archive" msgstr "неожиданное состояние при извлечении архива" -#: bbstreamer_file.c:298 pg_basebackup.c:696 pg_basebackup.c:740 +#: bbstreamer_file.c:321 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:304 +#: bbstreamer_file.c:326 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не удалось установить права для каталога \"%s\": %m" -#: bbstreamer_file.c:323 +#: bbstreamer_file.c:345 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\" в \"%s\": %m" -#: bbstreamer_file.c:343 +#: bbstreamer_file.c:365 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "не удалось установить права доступа для файла \"%s\": %m" @@ -205,11 +320,6 @@ msgstr "не удалось открыть выходной файл: %m" msgid "could not set compression level %d: %s" msgstr "не удалось установить уровень сжатия %d: %s" -#: bbstreamer_gzip.c:116 bbstreamer_gzip.c:249 -#, c-format -msgid "this build does not support gzip compression" -msgstr "эта сборка программы не поддерживает сжатие gzip" - #: bbstreamer_gzip.c:143 #, c-format msgid "could not write to compressed file \"%s\": %s" @@ -220,12 +330,12 @@ msgstr "не удалось записать сжатый файл \"%s\": %s" msgid "could not close compressed file \"%s\": %m" msgstr "не удалось закрыть сжатый файл \"%s\": %m" -#: bbstreamer_gzip.c:245 walmethods.c:869 +#: bbstreamer_gzip.c:245 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "не удалось инициализировать библиотеку сжатия" -#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:316 +#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 #, c-format msgid "could not decompress data: %s" msgstr "не удалось распаковать данные: %s" @@ -240,17 +350,12 @@ msgstr "неожиданное состояние при внедрении па msgid "could not create lz4 compression context: %s" msgstr "не удалось создать контекст сжатия lz4: %s" -#: bbstreamer_lz4.c:100 bbstreamer_lz4.c:298 -#, c-format -msgid "this build does not support lz4 compression" -msgstr "эта сборка программы не поддерживает сжатие lz4" - #: bbstreamer_lz4.c:140 #, c-format msgid "could not write lz4 header: %s" msgstr "не удалось записать заголовок lz4: %s" -#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:168 bbstreamer_zstd.c:210 +#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 #, c-format msgid "could not compress data: %s" msgstr "не удалось сжать данные: %s" @@ -275,12 +380,12 @@ msgstr "окончание файла tar занимает больше 2 бло msgid "unexpected state while parsing tar archive" msgstr "неожиданное состояние при разборе архива tar" -#: bbstreamer_tar.c:296 +#: bbstreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "пустое имя у компонента tar" -#: bbstreamer_tar.c:328 +#: bbstreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "поток COPY закончился до завершения последнего файла" @@ -300,103 +405,103 @@ msgstr "не удалось установить для zstd уровень сж msgid "could not set compression worker count to %d: %s" msgstr "не удалось установить для zstd число потоков %d: %s" -#: bbstreamer_zstd.c:116 bbstreamer_zstd.c:271 +#: bbstreamer_zstd.c:116 #, c-format -msgid "this build does not support zstd compression" -msgstr "эта сборка программы не поддерживает сжатие zstd" +msgid "could not enable long-distance mode: %s" +msgstr "не удалось включить режим большой дистанции: %s" -#: bbstreamer_zstd.c:262 +#: bbstreamer_zstd.c:275 #, c-format msgid "could not create zstd decompression context" msgstr "не удалось создать контекст распаковки zstd" -#: pg_basebackup.c:240 +#: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" msgstr "удаление каталога данных \"%s\"" -#: pg_basebackup.c:242 +#: pg_basebackup.c:247 #, c-format msgid "failed to remove data directory" msgstr "ошибка при удалении каталога данных" -#: pg_basebackup.c:246 +#: pg_basebackup.c:251 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "удаление содержимого каталога данных \"%s\"" -#: pg_basebackup.c:248 +#: pg_basebackup.c:253 #, c-format msgid "failed to remove contents of data directory" msgstr "ошибка при удалении содержимого каталога данных" -#: pg_basebackup.c:253 +#: pg_basebackup.c:258 #, c-format msgid "removing WAL directory \"%s\"" msgstr "удаление каталога WAL \"%s\"" -#: pg_basebackup.c:255 +#: pg_basebackup.c:260 #, c-format msgid "failed to remove WAL directory" msgstr "ошибка при удалении каталога WAL" -#: pg_basebackup.c:259 +#: pg_basebackup.c:264 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "удаление содержимого каталога WAL \"%s\"" -#: pg_basebackup.c:261 +#: pg_basebackup.c:266 #, c-format msgid "failed to remove contents of WAL directory" msgstr "ошибка при удалении содержимого каталога WAL" -#: pg_basebackup.c:267 +#: pg_basebackup.c:272 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "каталог данных \"%s\" не был удалён по запросу пользователя" -#: pg_basebackup.c:270 +#: pg_basebackup.c:275 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "каталог WAL \"%s\" не был удалён по запросу пользователя" -#: pg_basebackup.c:274 +#: pg_basebackup.c:279 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "изменения в каталогах табличных пространств не будут отменены" -#: pg_basebackup.c:326 +#: pg_basebackup.c:331 #, c-format msgid "directory name too long" msgstr "слишком длинное имя каталога" -#: pg_basebackup.c:333 +#: pg_basebackup.c:338 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "несколько знаков \"=\" в сопоставлении табличного пространства" -#: pg_basebackup.c:342 +#: pg_basebackup.c:347 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "" "сопоставление табл. пространства записано неверно: \"%s\"; должно быть " "\"СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ\"" -#: pg_basebackup.c:361 +#: pg_basebackup.c:366 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "" "старый каталог в сопоставлении табл. пространства задан не абсолютным путём: " "%s" -#: pg_basebackup.c:365 +#: pg_basebackup.c:370 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "" "новый каталог в сопоставлении табл. пространства задан не абсолютным путём: " "%s" -#: pg_basebackup.c:387 +#: pg_basebackup.c:392 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -405,17 +510,19 @@ msgstr "" "%s делает базовую резервную копию работающего сервера PostgreSQL.\n" "\n" -#: pg_basebackup.c:389 pg_receivewal.c:81 pg_recvlogical.c:78 +#: pg_basebackup.c:394 pg_createsubscriber.c:221 pg_receivewal.c:79 +#: pg_recvlogical.c:86 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_basebackup.c:390 pg_receivewal.c:82 pg_recvlogical.c:79 +#: pg_basebackup.c:395 pg_createsubscriber.c:222 pg_receivewal.c:80 +#: pg_recvlogical.c:87 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ПАРАМЕТР]...\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:396 #, c-format msgid "" "\n" @@ -424,19 +531,28 @@ msgstr "" "\n" "Параметры, управляющие выводом:\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:397 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=КАТАЛОГ сохранить базовую копию в указанный каталог\n" -#: pg_basebackup.c:393 +#: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr "" " -F, --format=p|t формат вывода (p (по умолчанию) - простой, t - " "tar)\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:399 +#, c-format +msgid "" +" -i, --incremental=OLDMANIFEST\n" +" take incremental backup\n" +msgstr "" +" -i, --incremental=СТАРЫЙ_МАНИФЕСТ\n" +" создать инкрементальную копию\n" + +#: pg_basebackup.c:401 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -445,7 +561,7 @@ msgstr "" " -r, --max-rate=СКОРОСТЬ макс. скорость передачи данных в целевой каталог\n" " (в КБ/с, либо добавьте суффикс \"k\" или \"M\")\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:403 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -455,7 +571,7 @@ msgstr "" " записать конфигурацию для репликации\n" # well-spelled: ИНФО -#: pg_basebackup.c:398 +#: pg_basebackup.c:405 #, c-format msgid "" " -t, --target=TARGET[:DETAIL]\n" @@ -464,7 +580,7 @@ msgstr "" " -t, --target=ПОЛУЧАТЕЛЬ[:ДОП_ИНФО]\n" " получатель копии (если отличается от client)\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:407 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -475,14 +591,14 @@ msgstr "" "каталога\n" " в новый\n" -#: pg_basebackup.c:402 +#: pg_basebackup.c:409 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr "" " --waldir=КАТАЛОГ_WAL\n" " расположение каталога с журналом предзаписи\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:410 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -492,13 +608,13 @@ msgstr "" " включить в копию требуемые файлы WAL, используя\n" " заданный метод\n" -#: pg_basebackup.c:405 +#: pg_basebackup.c:412 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip сжать выходной tar\n" # well-spelled: ИНФО -#: pg_basebackup.c:406 +#: pg_basebackup.c:413 #, c-format msgid "" " -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" @@ -508,12 +624,12 @@ msgstr "" " выполнять сжатие на клиенте или сервере как " "указано\n" -#: pg_basebackup.c:408 +#: pg_basebackup.c:415 #, c-format msgid " -Z, --compress=none do not compress tar output\n" msgstr " -Z, --compress=none не сжимать вывод tar\n" -#: pg_basebackup.c:409 +#: pg_basebackup.c:416 #, c-format msgid "" "\n" @@ -522,31 +638,32 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_basebackup.c:410 +#: pg_basebackup.c:417 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" -" set fast or spread checkpointing\n" +" set fast or spread (default) checkpointing\n" msgstr "" " -c, --checkpoint=fast|spread\n" -" режим быстрых или распределённых контрольных точек\n" +" режим быстрых или распределённых (по умолчанию)\n" +" контрольных точек\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:419 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot создать слот репликации\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:420 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=МЕТКА установить метку резервной копии\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:421 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean не очищать после ошибок\n" -#: pg_basebackup.c:415 +#: pg_basebackup.c:422 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -554,27 +671,27 @@ msgid "" msgstr "" " -N, --no-sync не ждать завершения сохранения данных на диске\n" -#: pg_basebackup.c:416 +#: pg_basebackup.c:423 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показывать прогресс операции\n" -#: pg_basebackup.c:417 pg_receivewal.c:91 +#: pg_basebackup.c:424 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=ИМЯ_СЛОТА использовать заданный слот репликации\n" -#: pg_basebackup.c:418 pg_receivewal.c:93 pg_recvlogical.c:100 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose выводить подробные сообщения\n" -#: pg_basebackup.c:419 pg_receivewal.c:94 pg_recvlogical.c:101 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_basebackup.c:420 +#: pg_basebackup.c:427 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -585,7 +702,7 @@ msgstr "" # skip-rule: capital-letter-first # well-spelled: шестнадц -#: pg_basebackup.c:422 +#: pg_basebackup.c:429 #, c-format msgid "" " --manifest-force-encode\n" @@ -595,25 +712,25 @@ msgstr "" " записывать все имена файлов в манифесте в шестнадц. " "виде\n" -#: pg_basebackup.c:424 +#: pg_basebackup.c:431 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr "" " --no-estimate-size не рассчитывать размер копии на стороне сервера\n" -#: pg_basebackup.c:425 +#: pg_basebackup.c:432 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest отключить создание манифеста копии\n" -#: pg_basebackup.c:426 +#: pg_basebackup.c:433 #, c-format msgid "" " --no-slot prevent creation of temporary replication slot\n" msgstr "" " --no-slot предотвратить создание временного слота репликации\n" -#: pg_basebackup.c:427 +#: pg_basebackup.c:434 #, c-format msgid "" " --no-verify-checksums\n" @@ -622,12 +739,22 @@ msgstr "" " --no-verify-checksums\n" " не проверять контрольные суммы\n" -#: pg_basebackup.c:429 pg_receivewal.c:97 pg_recvlogical.c:102 +# well-spelled: ИНФО +#: pg_basebackup.c:436 +#, c-format +msgid "" +" --sync-method=METHOD\n" +" set method for syncing files to disk\n" +msgstr "" +" --sync-method=МЕТОД\n" +" метод синхронизации файлов с ФС\n" + +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_basebackup.c:430 pg_receivewal.c:98 pg_recvlogical.c:103 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 #, c-format msgid "" "\n" @@ -636,22 +763,24 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_basebackup.c:431 pg_receivewal.c:99 +#: pg_basebackup.c:440 pg_receivewal.c:97 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=СТРОКА строка подключения\n" -#: pg_basebackup.c:432 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" -msgstr " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" +msgstr "" +" -h, --host=ИМЯ компьютер с сервером баз данных или каталог " +"сокетов\n" -#: pg_basebackup.c:433 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=ПОРТ номер порта сервера БД\n" -#: pg_basebackup.c:434 +#: pg_basebackup.c:443 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -662,19 +791,19 @@ msgstr "" " интервал между передаваемыми серверу\n" " пакетами состояния (в секундах)\n" -#: pg_basebackup.c:436 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr "" " -U, --username=NAME connect as specified database user\n" " -U, --username=ИМЯ имя пользователя баз данных\n" -#: pg_basebackup.c:437 pg_receivewal.c:103 pg_recvlogical.c:108 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_basebackup.c:438 pg_receivewal.c:104 pg_recvlogical.c:109 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -682,7 +811,8 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: pg_basebackup.c:439 pg_receivewal.c:108 pg_recvlogical.c:110 +#: pg_basebackup.c:448 pg_createsubscriber.c:240 pg_receivewal.c:106 +#: pg_recvlogical.c:118 #, c-format msgid "" "\n" @@ -691,63 +821,64 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_basebackup.c:440 pg_receivewal.c:109 pg_recvlogical.c:111 +#: pg_basebackup.c:449 pg_createsubscriber.c:241 pg_receivewal.c:107 +#: pg_recvlogical.c:119 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: pg_basebackup.c:482 +#: pg_basebackup.c:488 #, c-format msgid "could not read from ready pipe: %m" msgstr "не удалось прочитать из готового канала: %m" -#: pg_basebackup.c:485 pg_basebackup.c:632 pg_basebackup.c:2180 -#: streamutil.c:444 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 +#: streamutil.c:521 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "не удалось разобрать положение в журнале предзаписи \"%s\"" -#: pg_basebackup.c:591 pg_receivewal.c:663 +#: pg_basebackup.c:596 pg_receivewal.c:600 #, c-format msgid "could not finish writing WAL files: %m" msgstr "не удалось завершить запись файлов WAL: %m" -#: pg_basebackup.c:641 +#: pg_basebackup.c:642 #, c-format msgid "could not create pipe for background process: %m" msgstr "не удалось создать канал для фонового процесса: %m" -#: pg_basebackup.c:674 +#: pg_basebackup.c:676 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "создан временный слот репликации \"%s\"" -#: pg_basebackup.c:677 +#: pg_basebackup.c:679 #, c-format msgid "created replication slot \"%s\"" msgstr "создан слот репликации \"%s\"" -#: pg_basebackup.c:711 +#: pg_basebackup.c:728 #, c-format msgid "could not create background process: %m" msgstr "не удалось создать фоновый процесс: %m" -#: pg_basebackup.c:720 +#: pg_basebackup.c:737 #, c-format msgid "could not create background thread: %m" msgstr "не удалось создать фоновый поток выполнения: %m" -#: pg_basebackup.c:759 +#: pg_basebackup.c:776 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" существует, но он не пуст" -#: pg_basebackup.c:765 +#: pg_basebackup.c:782 pg_createsubscriber.c:390 #, c-format msgid "could not access directory \"%s\": %m" -msgstr "ошибка доступа к каталогу \"%s\": %m" +msgstr "ошибка при обращении к каталогу \"%s\": %m" -#: pg_basebackup.c:842 +#: pg_basebackup.c:858 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" @@ -755,7 +886,7 @@ msgstr[0] "%*s/%s КБ (100%%), табличное пространство %d/% msgstr[1] "%*s/%s КБ (100%%), табличное пространство %d/%d %*s" msgstr[2] "%*s/%s КБ (100%%), табличное пространство %d/%d %*s" -#: pg_basebackup.c:854 +#: pg_basebackup.c:870 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" @@ -763,7 +894,7 @@ msgstr[0] "%*s/%s КБ (%d%%), табличное пространство %d/%d msgstr[1] "%*s/%s КБ (%d%%), табличное пространство %d/%d (%s%-*.*s)" msgstr[2] "%*s/%s КБ (%d%%), табличное пространство %d/%d (%s%-*.*s)" -#: pg_basebackup.c:870 +#: pg_basebackup.c:886 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" @@ -771,58 +902,58 @@ msgstr[0] "%*s/%s КБ (%d%%), табличное пространство %d/%d msgstr[1] "%*s/%s КБ (%d%%), табличное пространство %d/%d" msgstr[2] "%*s/%s КБ (%d%%), табличное пространство %d/%d" -#: pg_basebackup.c:894 +#: pg_basebackup.c:910 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "неверное значение (\"%s\") для скорости передачи данных" -#: pg_basebackup.c:896 +#: pg_basebackup.c:912 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "неверная скорость передачи данных \"%s\": %m" -#: pg_basebackup.c:903 +#: pg_basebackup.c:919 #, c-format msgid "transfer rate must be greater than zero" msgstr "скорость передачи должна быть больше 0" -#: pg_basebackup.c:933 +#: pg_basebackup.c:949 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "неверная единица измерения в --max-rate: \"%s\"" -#: pg_basebackup.c:937 +#: pg_basebackup.c:953 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "скорость передачи \"%s\" вне целочисленного диапазона" -#: pg_basebackup.c:944 +#: pg_basebackup.c:960 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "скорость передачи \"%s\" вне диапазона" -#: pg_basebackup.c:1040 +#: pg_basebackup.c:1022 #, c-format msgid "could not get COPY data stream: %s" msgstr "не удалось получить поток данных COPY: %s" -#: pg_basebackup.c:1057 pg_recvlogical.c:438 pg_recvlogical.c:610 -#: receivelog.c:981 +#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 +#: receivelog.c:973 #, c-format msgid "could not read COPY data: %s" msgstr "не удалось прочитать данные COPY: %s" -#: pg_basebackup.c:1061 +#: pg_basebackup.c:1043 #, c-format msgid "background process terminated unexpectedly" msgstr "фоновый процесс завершился неожиданно" -#: pg_basebackup.c:1132 +#: pg_basebackup.c:1114 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "манифест нельзя внедрить в сжатый архив tar" -#: pg_basebackup.c:1133 +#: pg_basebackup.c:1115 #, c-format msgid "" "Use client-side compression, send the output to a directory rather than " @@ -831,24 +962,24 @@ msgstr "" "Примените сжатие на стороне клиента, передайте вывод в каталог, а не в " "стандартный вывод, или используйте %s." -#: pg_basebackup.c:1149 +#: pg_basebackup.c:1131 #, c-format msgid "cannot parse archive \"%s\"" msgstr "обработать архив \"%s\" невозможно" -#: pg_basebackup.c:1150 +#: pg_basebackup.c:1132 #, c-format msgid "Only tar archives can be parsed." msgstr "Возможна обработка только архивов tar." -#: pg_basebackup.c:1152 +#: pg_basebackup.c:1134 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "" "Когда используется простой формат, программа pg_basebackup должна обработать " "архив." -#: pg_basebackup.c:1154 +#: pg_basebackup.c:1136 #, c-format msgid "" "Using - as the output directory requires pg_basebackup to parse the archive." @@ -856,89 +987,119 @@ msgstr "" "Когда в качестве выходного каталога используется \"-\", программа " "pg_basebackup должна обработать архив." -#: pg_basebackup.c:1156 +#: pg_basebackup.c:1138 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "" "Когда используется ключ -R, программа pg_basebackup должна обработать архив." -#: pg_basebackup.c:1367 +#: pg_basebackup.c:1357 #, c-format msgid "archives must precede manifest" msgstr "архивы должны предшествовать манифесту" -#: pg_basebackup.c:1382 +#: pg_basebackup.c:1372 #, c-format msgid "invalid archive name: \"%s\"" msgstr "неверное имя архива: \"%s\"" -#: pg_basebackup.c:1454 +#: pg_basebackup.c:1444 #, c-format msgid "unexpected payload data" msgstr "неожиданно получены данные" -#: pg_basebackup.c:1597 +#: pg_basebackup.c:1587 #, c-format msgid "empty COPY message" msgstr "пустое сообщение COPY" -#: pg_basebackup.c:1599 +#: pg_basebackup.c:1589 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "неправильное сообщение COPY типа %d, длины %zu" -#: pg_basebackup.c:1797 +#: pg_basebackup.c:1789 #, c-format msgid "incompatible server version %s" msgstr "несовместимая версия сервера %s" -#: pg_basebackup.c:1813 +#: pg_basebackup.c:1805 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "Укажите -X none или -X fetch для отключения трансляции журнала." -#: pg_basebackup.c:1881 +#: pg_basebackup.c:1841 +#, c-format +msgid "server does not support incremental backup" +msgstr "сервер не поддерживает инкрементальное копирование" + +#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 +#: receivelog.c:543 receivelog.c:582 streamutil.c:367 streamutil.c:441 +#: streamutil.c:493 streamutil.c:581 streamutil.c:733 streamutil.c:778 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "не удалось передать команду репликации \"%s\": %s" + +#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#, c-format +msgid "could not upload manifest: %s" +msgstr "не удалось загрузить манифест на сервер: %s" + +#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#, c-format +msgid "could not upload manifest: unexpected status %s" +msgstr "не удалось загрузить манифест на сервер: неожиданное состояние %s" + +#: pg_basebackup.c:1867 +#, c-format +msgid "could not send COPY data: %s" +msgstr "не удалось отправить данные COPY: %s" + +#: pg_basebackup.c:1877 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "не удалось отправить сообщение \"конец COPY\": %s" + +#: pg_basebackup.c:1892 +#, c-format +msgid "unexpected extra result while sending manifest" +msgstr "неожиданный лишний результат при передаче манифеста" + +#: pg_basebackup.c:1950 #, c-format msgid "backup targets are not supported by this server version" msgstr "получатели копий не поддерживаются данной версией сервера" -#: pg_basebackup.c:1884 +#: pg_basebackup.c:1953 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "" "при использовании получателя копии записать конфигурацию восстановления " "нельзя" -#: pg_basebackup.c:1911 +#: pg_basebackup.c:1980 #, c-format msgid "server does not support server-side compression" msgstr "сервер не поддерживает сжатие на стороне сервера" -#: pg_basebackup.c:1921 +#: pg_basebackup.c:1990 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "" "начинается базовое резервное копирование, ожидается завершение контрольной " "точки" -#: pg_basebackup.c:1925 +#: pg_basebackup.c:1994 #, c-format msgid "waiting for checkpoint" msgstr "ожидание контрольной точки" -#: pg_basebackup.c:1938 pg_recvlogical.c:262 receivelog.c:549 receivelog.c:588 -#: streamutil.c:291 streamutil.c:364 streamutil.c:416 streamutil.c:504 -#: streamutil.c:656 streamutil.c:701 -#, c-format -msgid "could not send replication command \"%s\": %s" -msgstr "не удалось передать команду репликации \"%s\": %s" - -#: pg_basebackup.c:1946 +#: pg_basebackup.c:2016 #, c-format msgid "could not initiate base backup: %s" msgstr "не удалось инициализировать базовое резервное копирование: %s" -#: pg_basebackup.c:1949 +#: pg_basebackup.c:2019 #, c-format msgid "" "server returned unexpected response to BASE_BACKUP command; got %d rows and " @@ -947,123 +1108,130 @@ msgstr "" "сервер вернул неожиданный ответ на команду BASE_BACKUP; получено строк: %d, " "полей: %d, а ожидалось строк: %d, полей: %d" -#: pg_basebackup.c:1955 +#: pg_basebackup.c:2025 #, c-format msgid "checkpoint completed" msgstr "контрольная точка завершена" -#: pg_basebackup.c:1970 +#: pg_basebackup.c:2039 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "стартовая точка в журнале предзаписи: %s на линии времени %u" -#: pg_basebackup.c:1978 +#: pg_basebackup.c:2047 #, c-format msgid "could not get backup header: %s" msgstr "не удалось получить заголовок резервной копии: %s" -#: pg_basebackup.c:1981 +#: pg_basebackup.c:2050 #, c-format msgid "no data returned from server" msgstr "сервер не вернул данные" -#: pg_basebackup.c:2016 +#: pg_basebackup.c:2093 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "" "в stdout можно вывести только одно табличное пространство, всего в СУБД их %d" -#: pg_basebackup.c:2029 +#: pg_basebackup.c:2106 #, c-format msgid "starting background WAL receiver" msgstr "запуск фонового процесса считывания WAL" -#: pg_basebackup.c:2111 +#: pg_basebackup.c:2189 #, c-format msgid "backup failed: %s" msgstr "ошибка при создании копии: %s" -#: pg_basebackup.c:2114 +#: pg_basebackup.c:2192 #, c-format msgid "no write-ahead log end position returned from server" msgstr "сервер не передал конечную позицию в журнале предзаписи" -#: pg_basebackup.c:2117 +#: pg_basebackup.c:2195 #, c-format msgid "write-ahead log end point: %s" msgstr "конечная точка в журнале предзаписи: %s" -#: pg_basebackup.c:2128 +#: pg_basebackup.c:2206 #, c-format msgid "checksum error occurred" msgstr "выявлена ошибка контрольной суммы" -#: pg_basebackup.c:2133 +#: pg_basebackup.c:2211 #, c-format msgid "final receive failed: %s" msgstr "ошибка в конце передачи: %s" -#: pg_basebackup.c:2157 +#: pg_basebackup.c:2235 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "ожидание завершения потоковой передачи фоновым процессом..." -#: pg_basebackup.c:2161 +#: pg_basebackup.c:2239 #, c-format msgid "could not send command to background pipe: %m" msgstr "не удалось отправить команду в канал фонового процесса: %m" -#: pg_basebackup.c:2166 +#: pg_basebackup.c:2244 #, c-format msgid "could not wait for child process: %m" msgstr "сбой при ожидании дочернего процесса: %m" -#: pg_basebackup.c:2168 +#: pg_basebackup.c:2246 #, c-format msgid "child %d died, expected %d" msgstr "завершился дочерний процесс %d вместо ожидаемого %d" -#: pg_basebackup.c:2170 streamutil.c:91 streamutil.c:197 +#: pg_basebackup.c:2248 streamutil.c:92 streamutil.c:207 streamutil.c:319 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2190 +#: pg_basebackup.c:2268 #, c-format msgid "could not wait for child thread: %m" msgstr "сбой при ожидании дочернего потока: %m" -#: pg_basebackup.c:2195 +#: pg_basebackup.c:2273 #, c-format msgid "could not get child thread exit status: %m" msgstr "не удалось получить состояние завершения дочернего потока: %m" -#: pg_basebackup.c:2198 +#: pg_basebackup.c:2276 #, c-format msgid "child thread exited with error %u" msgstr "дочерний поток завершился с ошибкой %u" -#: pg_basebackup.c:2227 +#: pg_basebackup.c:2305 #, c-format msgid "syncing data to disk ..." msgstr "сохранение данных на диске..." -#: pg_basebackup.c:2252 +#: pg_basebackup.c:2330 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "переименование backup_manifest.tmp в backup_manifest" -#: pg_basebackup.c:2272 +#: pg_basebackup.c:2350 #, c-format msgid "base backup completed" msgstr "базовое резервное копирование завершено" -#: pg_basebackup.c:2361 +#: pg_basebackup.c:2436 +#, c-format +msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" +msgstr "" +"неверный аргумент режима контрольных точек \"%s\"; должен быть \"fast\" или " +"\"spread\"" + +#: pg_basebackup.c:2454 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "неверный формат вывода \"%s\", должен быть \"plain\" или \"tar\"" -#: pg_basebackup.c:2405 +#: pg_basebackup.c:2535 #, c-format msgid "" "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" @@ -1071,137 +1239,167 @@ msgstr "" "неверный аргумент для wal-method — \"%s\", допускается только \"fetch\", " "\"stream\" или \"none\"" -#: pg_basebackup.c:2435 -#, c-format -msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" -msgstr "" -"неверный аргумент режима контрольных точек \"%s\"; должен быть \"fast\" или " -"\"spread\"" - -#: pg_basebackup.c:2486 pg_basebackup.c:2498 pg_basebackup.c:2520 -#: pg_basebackup.c:2532 pg_basebackup.c:2538 pg_basebackup.c:2590 -#: pg_basebackup.c:2601 pg_basebackup.c:2611 pg_basebackup.c:2617 -#: pg_basebackup.c:2624 pg_basebackup.c:2636 pg_basebackup.c:2648 -#: pg_basebackup.c:2656 pg_basebackup.c:2669 pg_basebackup.c:2675 -#: pg_basebackup.c:2684 pg_basebackup.c:2696 pg_basebackup.c:2707 -#: pg_basebackup.c:2715 pg_receivewal.c:814 pg_receivewal.c:826 -#: pg_receivewal.c:833 pg_receivewal.c:842 pg_receivewal.c:849 -#: pg_receivewal.c:859 pg_recvlogical.c:837 pg_recvlogical.c:849 -#: pg_recvlogical.c:859 pg_recvlogical.c:866 pg_recvlogical.c:873 -#: pg_recvlogical.c:880 pg_recvlogical.c:887 pg_recvlogical.c:894 -#: pg_recvlogical.c:901 pg_recvlogical.c:908 +#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 +#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 +#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 +#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 +#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 +#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 +#: pg_basebackup.c:2803 pg_createsubscriber.c:2037 pg_createsubscriber.c:2047 +#: pg_createsubscriber.c:2055 pg_createsubscriber.c:2083 +#: pg_createsubscriber.c:2115 pg_receivewal.c:748 pg_receivewal.c:760 +#: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 +#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 +#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 +#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 +#: pg_recvlogical.c:917 pg_recvlogical.c:924 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: pg_basebackup.c:2496 pg_receivewal.c:824 pg_recvlogical.c:847 +#: pg_basebackup.c:2584 pg_createsubscriber.c:2045 pg_receivewal.c:758 +#: pg_recvlogical.c:863 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_basebackup.c:2519 +#: pg_basebackup.c:2607 #, c-format msgid "cannot specify both format and backup target" msgstr "указать и формат, и получателя копии одновременно нельзя" -#: pg_basebackup.c:2531 +#: pg_basebackup.c:2619 #, c-format msgid "must specify output directory or backup target" msgstr "необходимо указать выходной каталог или получателя копии" -#: pg_basebackup.c:2537 +#: pg_basebackup.c:2625 #, c-format msgid "cannot specify both output directory and backup target" msgstr "указать и выходной каталог, и получателя копии одновременно нельзя" -#: pg_basebackup.c:2567 pg_receivewal.c:868 +#: pg_basebackup.c:2655 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" msgstr "нераспознанный алгоритм сжатия: \"%s\"" -#: pg_basebackup.c:2573 pg_receivewal.c:875 +#: pg_basebackup.c:2661 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "неправильное указание сжатия: %s" -#: pg_basebackup.c:2589 +#: pg_basebackup.c:2677 #, c-format msgid "" "client-side compression is not possible when a backup target is specified" msgstr "сжатие на стороне клиента невозможно при указании получателя копии" -#: pg_basebackup.c:2600 +#: pg_basebackup.c:2688 #, c-format msgid "only tar mode backups can be compressed" msgstr "сжиматься могут только резервные копии в архиве tar" -#: pg_basebackup.c:2610 +#: pg_basebackup.c:2698 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "потоковая передача WAL невозможна при указании получателя копии" -#: pg_basebackup.c:2616 +#: pg_basebackup.c:2704 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "транслировать журналы предзаписи в режиме tar в поток stdout нельзя" -#: pg_basebackup.c:2623 +#: pg_basebackup.c:2711 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "слоты репликации можно использовать только при потоковой передаче WAL" -#: pg_basebackup.c:2635 +#: pg_basebackup.c:2723 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot нельзя использовать с именем слота" #. translator: second %s is an option name -#: pg_basebackup.c:2646 pg_receivewal.c:840 +#: pg_basebackup.c:2734 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "для %s необходимо задать слот с помощью параметра --slot" -#: pg_basebackup.c:2654 pg_basebackup.c:2694 pg_basebackup.c:2705 -#: pg_basebackup.c:2713 +#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 +#: pg_basebackup.c:2801 #, c-format msgid "%s and %s are incompatible options" msgstr "параметры %s и %s несовместимы" -#: pg_basebackup.c:2668 +#: pg_basebackup.c:2756 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "расположение каталога WAL нельзя указать вместе с получателем копии" -#: pg_basebackup.c:2674 +#: pg_basebackup.c:2762 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "расположение каталога WAL можно указать только в режиме plain" -#: pg_basebackup.c:2683 +#: pg_basebackup.c:2771 #, c-format msgid "WAL directory location must be an absolute path" msgstr "расположение каталога WAL должно определяться абсолютным путём" -#: pg_basebackup.c:2784 +#: pg_basebackup.c:2871 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: pg_basebackup.c:2786 +#: pg_createsubscriber.c:169 #, c-format -msgid "symlinks are not supported on this platform" -msgstr "символические ссылки не поддерживаются в этой ОС" +msgid "failed after the end of recovery" +msgstr "ошибка после окончания восстановления" -#: pg_receivewal.c:79 +#: pg_createsubscriber.c:170 #, c-format msgid "" -"%s receives PostgreSQL streaming write-ahead logs.\n" +"The target server cannot be used as a physical replica anymore. You must " +"recreate the physical replica before continuing." +msgstr "" +"Целевой сервер больше не может использоваться как физическая реплика. Чтобы " +"продолжить, физическую реплику необходимо пересоздать." + +#: pg_createsubscriber.c:198 +#, c-format +msgid "" +"publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "на главном сервере осталась публикация \"%s\", созданная в базе \"%s\"" + +#: pg_createsubscriber.c:200 +#, c-format +msgid "Drop this publication before trying again." +msgstr "Удалите эту публикацию и попробуйте повторить операцию." + +#: pg_createsubscriber.c:204 +#, c-format +msgid "" +"replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "" +"на главном сервере остался слот репликации \"%s\", созданный в базе \"%s\"" + +#: pg_createsubscriber.c:206 pg_createsubscriber.c:1260 +#, c-format +msgid "Drop this replication slot soon to avoid retention of WAL files." +msgstr "" +"Удалите этот слот репликации незамедлительно во избежание накопления файлов " +"WAL." + +#: pg_createsubscriber.c:219 +#, c-format +msgid "" +"%s creates a new logical replica from a standby server.\n" "\n" msgstr "" -"%s получает транслируемые журналы предзаписи PostgreSQL.\n" +"%s превращает резервный сервер в логическую реплику.\n" "\n" -#: pg_receivewal.c:83 pg_recvlogical.c:84 +#: pg_createsubscriber.c:223 pg_receivewal.c:81 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -1210,7 +1408,681 @@ msgstr "" "\n" "Параметры:\n" -#: pg_receivewal.c:84 +#: pg_createsubscriber.c:224 +#, c-format +msgid "" +" -d, --database=DBNAME database in which to create a " +"subscription\n" +msgstr "" +" -d, --database=ИМЯ_БД база, в которой будет создана подписка\n" + +#: pg_createsubscriber.c:225 +#, c-format +msgid "" +" -D, --pgdata=DATADIR location for the subscriber data " +"directory\n" +msgstr "" +" -D, --pgdata=КАТ_ДАННЫХ расположение каталога данных подписчика\n" + +#: pg_createsubscriber.c:226 +#, c-format +msgid "" +" -n, --dry-run dry run, just show what would be done\n" +msgstr "" +" -n, --dry-run показать, какие действия будут выполнены,\n" +" но не выполнять их\n" + +#: pg_createsubscriber.c:227 +#, c-format +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr "" +" -p, --subscriber-port=ПОРТ номер порта подписчика (по умолчанию: %s)\n" + +#: pg_createsubscriber.c:228 +#, c-format +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr "" +" -P, --publisher-server=СТРОКА строка подключения к серверу публикации\n" + +#: pg_createsubscriber.c:229 +#, c-format +msgid "" +" -s, --socketdir=DIR socket directory to use (default current " +"dir.)\n" +msgstr "" +" -s, --socketdir=КАТАЛОГ каталог сокетов (по умолчанию текущий)\n" + +#: pg_createsubscriber.c:230 +#, c-format +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr "" +" -t, --recovery-timeout=СЕК время ожидания окончания восстановления\n" + +#: pg_createsubscriber.c:231 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr "" +" -U, --subscriber-username=ИМЯ имя пользователя для подключения " +"подписчика\n" + +#: pg_createsubscriber.c:232 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose выводить подробные сообщения\n" + +#: pg_createsubscriber.c:233 +#, c-format +msgid "" +" --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" +msgstr "" +" --config-file=ИМЯ_ФАЙЛА использовать указанный основной файл\n" +" конфигурации сервера при запуске целевого\n" +" кластера\n" + +#: pg_createsubscriber.c:235 +#, c-format +msgid " --publication=NAME publication name\n" +msgstr " --publication=ИМЯ имя публикации\n" + +#: pg_createsubscriber.c:236 +#, c-format +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=ИМЯ имя слота репликации\n" + +#: pg_createsubscriber.c:237 +#, c-format +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=ИМЯ имя подписки\n" + +#: pg_createsubscriber.c:238 +#, c-format +msgid "" +" -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" + +#: pg_createsubscriber.c:239 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" + +#: pg_createsubscriber.c:282 +#, c-format +msgid "could not parse connection string: %s" +msgstr "не удалось разобрать строку подключения: %s" + +#: pg_createsubscriber.c:359 +#, c-format +msgid "" +"program \"%s\" is needed by %s but was not found in the same directory as " +"\"%s\"" +msgstr "программа \"%s\" нужна для %s, но она не найдена в каталоге \"%s\"" + +#: pg_createsubscriber.c:362 +#, c-format +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "" +"программа \"%s\" найдена программой \"%s\", но её версия отличается от " +"версии %s" + +#: pg_createsubscriber.c:382 +#, c-format +msgid "checking if directory \"%s\" is a cluster data directory" +msgstr "проверяется, является ли каталог \"%s\" каталогом данных кластера" + +#: pg_createsubscriber.c:388 +#, c-format +msgid "data directory \"%s\" does not exist" +msgstr "каталог данных \"%s\" не существует" + +#: pg_createsubscriber.c:396 +#, c-format +msgid "directory \"%s\" is not a database cluster directory" +msgstr "каталог \"%s\" не является каталогом кластера баз данных" + +#: pg_createsubscriber.c:513 +#, c-format +msgid "connection to database failed: %s" +msgstr "не удалось подключиться к базе: %s" + +#: pg_createsubscriber.c:526 +#, c-format +msgid "could not clear search_path: %s" +msgstr "не удалось очистить search_path: %s" + +#: pg_createsubscriber.c:566 +#, c-format +msgid "getting system identifier from publisher" +msgstr "получение идентификатора системы с сервера публикации" + +#: pg_createsubscriber.c:573 +#, c-format +msgid "could not get system identifier: %s" +msgstr "не удалось получить идентификатор системы: %s" + +#: pg_createsubscriber.c:579 +#, c-format +msgid "could not get system identifier: got %d rows, expected %d row" +msgstr "" +"не удалось получить идентификатор системы; получено строк: %d, ожидалось: %d" + +#: pg_createsubscriber.c:586 +#, c-format +msgid "system identifier is %llu on publisher" +msgstr "идентификатор системы на стороне публикации: %llu" + +#: pg_createsubscriber.c:607 +#, c-format +msgid "getting system identifier from subscriber" +msgstr "получение идентификатора системы с подписчика" + +#: pg_createsubscriber.c:611 pg_createsubscriber.c:641 +#, c-format +msgid "control file appears to be corrupt" +msgstr "управляющий файл, по-видимому, испорчен" + +#: pg_createsubscriber.c:615 pg_createsubscriber.c:656 +#, c-format +msgid "system identifier is %llu on subscriber" +msgstr "идентификатор системы на подписчике: %llu" + +#: pg_createsubscriber.c:637 +#, c-format +msgid "modifying system identifier of subscriber" +msgstr "изменение идентификатора системы на подписчике" + +#: pg_createsubscriber.c:659 +#, c-format +msgid "running pg_resetwal on the subscriber" +msgstr "запуск pg_resetwal на подписчике" + +#: pg_createsubscriber.c:671 +#, c-format +msgid "subscriber successfully changed the system identifier" +msgstr "идентификатор системы на подписчике успешно изменён" + +#: pg_createsubscriber.c:673 +#, c-format +msgid "could not change system identifier of subscriber: %s" +msgstr "изменить идентификатор системы на подписчике не удалось: %s" + +#: pg_createsubscriber.c:697 +#, c-format +msgid "could not obtain database OID: %s" +msgstr "получить OID базы данных не удалось: %s" + +#: pg_createsubscriber.c:704 +#, c-format +msgid "could not obtain database OID: got %d rows, expected %d row" +msgstr "получить OID базы данных не удалось; получено строк: %d, ожидалось: %d" + +#: pg_createsubscriber.c:776 +#, c-format +msgid "create replication slot \"%s\" on publisher" +msgstr "создаётся слот репликации \"%s\" на подписчике" + +#: pg_createsubscriber.c:796 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "не удалось записать дополнительную запись WAL: %s" + +#: pg_createsubscriber.c:822 +#, c-format +msgid "could not obtain recovery progress: %s" +msgstr "не удалось получить состояние восстановления: %s" + +#: pg_createsubscriber.c:854 +#, c-format +msgid "checking settings on publisher" +msgstr "проверка параметров на стороне публикации" + +#: pg_createsubscriber.c:864 +#, c-format +msgid "primary server cannot be in recovery" +msgstr "главный сервер не должен быть в состоянии восстановления" + +#: pg_createsubscriber.c:888 +#, c-format +msgid "could not obtain publisher settings: %s" +msgstr "не удалось получить параметры с сервера публикации: %s" + +#: pg_createsubscriber.c:914 +#, c-format +msgid "publisher requires wal_level >= \"logical\"" +msgstr "на стороне публикации требуется значение wal_level >= \"logical\"" + +#: pg_createsubscriber.c:920 +#, c-format +msgid "publisher requires %d replication slots, but only %d remain" +msgstr "" +"на стороне публикации требуется слотов репликации: %d, но доступно всего %d" + +#: pg_createsubscriber.c:922 pg_createsubscriber.c:931 +#: pg_createsubscriber.c:1028 pg_createsubscriber.c:1037 +#: pg_createsubscriber.c:1046 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "Увеличьте значение параметра конфигурации \"%s\" как минимум до %d." + +#: pg_createsubscriber.c:929 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "" +"на стороне публикации требуется процессов-передатчиков WAL: %d, но доступно " +"всего %d" + +#: pg_createsubscriber.c:938 +#, c-format +msgid "two_phase option will not be enabled for replication slots" +msgstr "параметр two_phase для слотов репликации не будет включён" + +#: pg_createsubscriber.c:939 +#, c-format +msgid "" +"Subscriptions will be created with the two_phase option disabled. Prepared " +"transactions will be replicated at COMMIT PREPARED." +msgstr "" +"Подписки будут созданы с отключённым параметром two_phase. Подготовленные " +"транзакции будут реплицироваться в момент выполнения COMMIT PREPARED." + +#: pg_createsubscriber.c:971 +#, c-format +msgid "checking settings on subscriber" +msgstr "проверка параметров на подписчике" + +#: pg_createsubscriber.c:978 +#, c-format +msgid "target server must be a standby" +msgstr "целевой сервер должен быть резервным" + +#: pg_createsubscriber.c:1002 +#, c-format +msgid "could not obtain subscriber settings: %s" +msgstr "получить параметры подписчика не удалось: %s" + +#: pg_createsubscriber.c:1026 +#, c-format +msgid "subscriber requires %d replication slots, but only %d remain" +msgstr "подписчику требуется слотов репликации: %d, но доступно всего %d" + +#: pg_createsubscriber.c:1035 +#, c-format +msgid "subscriber requires %d logical replication workers, but only %d remain" +msgstr "" +"подписчику требуется процессов логической репликации: %d, но доступно всего " +"%d" + +#: pg_createsubscriber.c:1044 +#, c-format +msgid "subscriber requires %d worker processes, but only %d remain" +msgstr "подписчику требуется рабочих процессов: %d, но доступно всего %d" + +#: pg_createsubscriber.c:1079 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "удаление подписки \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1088 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "удалить подписку \"%s\" не получилось: %s" + +#: pg_createsubscriber.c:1123 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "получить уже существующие подписки не удалось: %s" + +#: pg_createsubscriber.c:1258 +#, c-format +msgid "could not drop replication slot \"%s\" on primary" +msgstr "удалить слот репликации \"%s\" на главном сервере не получилось" + +#: pg_createsubscriber.c:1292 +#, c-format +msgid "could not obtain failover replication slot information: %s" +msgstr "получить информацию о переносимом слоте репликации не удалось: %s" + +#: pg_createsubscriber.c:1294 pg_createsubscriber.c:1303 +#, c-format +msgid "" +"Drop the failover replication slots on subscriber soon to avoid retention of " +"WAL files." +msgstr "" +"Удалите переносимые слоты репликации на подписчике незамедлительно во " +"избежание накопления файлов WAL." + +#: pg_createsubscriber.c:1302 +#, c-format +msgid "could not drop failover replication slot" +msgstr "удалить переносимый слот репликации не получилось" + +#: pg_createsubscriber.c:1324 +#, c-format +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "создание слота репликации \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1342 +#, c-format +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "создать слот репликации \"%s\" в базе \"%s\" не удалось: %s" + +#: pg_createsubscriber.c:1372 +#, c-format +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "удаление слота репликации \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1388 +#, c-format +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "удалить слот репликации \"%s\" в базе \"%s\" не получилось: %s" + +#: pg_createsubscriber.c:1409 +#, c-format +msgid "pg_ctl failed with exit code %d" +msgstr "команда pg_ctl завершилась с кодом ошибки %d" + +#: pg_createsubscriber.c:1414 +#, c-format +msgid "pg_ctl was terminated by exception 0x%X" +msgstr "команда pg_ctl была прервана исключением 0x%X" + +#: pg_createsubscriber.c:1416 +#, c-format +msgid "" +"See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "" +"Описание этого шестнадцатеричного значения ищите во включаемом C-файле " +"\"ntstatus.h\"" + +#: pg_createsubscriber.c:1418 +#, c-format +msgid "pg_ctl was terminated by signal %d: %s" +msgstr "команда pg_ctl была завершена сигналом %d: %s" + +#: pg_createsubscriber.c:1424 +#, c-format +msgid "pg_ctl exited with unrecognized status %d" +msgstr "команда pg_ctl завершилась с нераспознанным кодом состояния %d" + +#: pg_createsubscriber.c:1427 +#, c-format +msgid "The failed command was: %s" +msgstr "Ошибку вызвала команда: %s" + +#: pg_createsubscriber.c:1473 +#, c-format +msgid "server was started" +msgstr "сервер был запущен" + +#: pg_createsubscriber.c:1488 +#, c-format +msgid "server was stopped" +msgstr "сервер был остановлен" + +#: pg_createsubscriber.c:1507 +#, c-format +msgid "waiting for the target server to reach the consistent state" +msgstr "ожидание достижения целевым сервером согласованного состояния" + +#: pg_createsubscriber.c:1530 +#, c-format +msgid "recovery timed out" +msgstr "тайм-аут при восстановлении" + +#: pg_createsubscriber.c:1543 +#, c-format +msgid "server did not end recovery" +msgstr "сервер не завершил восстановление" + +#: pg_createsubscriber.c:1545 +#, c-format +msgid "target server reached the consistent state" +msgstr "целевой сервер достиг согласованного состояния" + +#: pg_createsubscriber.c:1546 +#, c-format +msgid "" +"If pg_createsubscriber fails after this point, you must recreate the " +"physical replica before continuing." +msgstr "" +"Если в работе pg_createsubscriber произойдёт сбой после этого момента, " +"продолжение возможно только после пересоздания физической реплики." + +#: pg_createsubscriber.c:1573 +#, c-format +msgid "could not obtain publication information: %s" +msgstr "получить информацию о публикации не удалось: %s" + +#: pg_createsubscriber.c:1587 +#, c-format +msgid "publication \"%s\" already exists" +msgstr "публикация \"%s\" уже существует" + +#: pg_createsubscriber.c:1588 +#, c-format +msgid "Consider renaming this publication before continuing." +msgstr "Чтобы продолжить, её можно переименовать." + +#: pg_createsubscriber.c:1595 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "создаётся публикация \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1608 +#, c-format +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "создать публикацию \"%s\" в базе \"%s\" не удалось: %s" + +#: pg_createsubscriber.c:1637 +#, c-format +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "удаляется публикация \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1651 +#, c-format +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "удалить публикацию \"%s\" в базе \"%s\" не получилось: %s" + +#: pg_createsubscriber.c:1697 +#, c-format +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "создаётся подписка \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1718 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "создать подписку \"%s\" в базе \"%s\" не удалось: %s" + +#: pg_createsubscriber.c:1763 +#, c-format +msgid "could not obtain subscription OID: %s" +msgstr "получить OID подписки не удалось: %s" + +#: pg_createsubscriber.c:1770 +#, c-format +msgid "could not obtain subscription OID: got %d rows, expected %d row" +msgstr "получить OID подписки не удалось; получено строк: %d, ожидалось: %d" + +#: pg_createsubscriber.c:1794 +#, c-format +msgid "" +"setting the replication progress (node name \"%s\", LSN %s) in database " +"\"%s\"" +msgstr "отражение состояния репликации (имя узла \"%s\", LSN %s) в базе \"%s\"" + +#: pg_createsubscriber.c:1809 +#, c-format +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "не удалось передать состояние репликации для подписки \"%s\": %s" + +#: pg_createsubscriber.c:1840 +#, c-format +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "включение подписки \"%s\" в базе \"%s\"" + +#: pg_createsubscriber.c:1852 +#, c-format +msgid "could not enable subscription \"%s\": %s" +msgstr "включить подписку \"%s\" не удалось: %s" + +#: pg_createsubscriber.c:1944 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "программу не должен запускать root" + +#: pg_createsubscriber.c:1945 +#, c-format +msgid "You must run %s as the PostgreSQL superuser." +msgstr "Запускать %s нужно от имени суперпользователя PostgreSQL." + +#: pg_createsubscriber.c:1966 +#, c-format +msgid "database \"%s\" specified more than once" +msgstr "база \"%s\" указана неоднократно" + +#: pg_createsubscriber.c:2007 +#, c-format +msgid "publication \"%s\" specified more than once" +msgstr "публикация \"%s\" указана неоднократно" + +#: pg_createsubscriber.c:2019 +#, c-format +msgid "replication slot \"%s\" specified more than once" +msgstr "слот репликации \"%s\" указан неоднократно" + +#: pg_createsubscriber.c:2031 +#, c-format +msgid "subscription \"%s\" specified more than once" +msgstr "подписка \"%s\" указана неоднократно" + +#: pg_createsubscriber.c:2054 +#, c-format +msgid "no subscriber data directory specified" +msgstr "каталог данных подписчика не указан" + +#: pg_createsubscriber.c:2065 +#, c-format +msgid "could not determine current directory" +msgstr "не удалось определить текущий каталог" + +#: pg_createsubscriber.c:2082 +#, c-format +msgid "no publisher connection string specified" +msgstr "строка подключения к серверу публикации не указана" + +#: pg_createsubscriber.c:2086 +#, c-format +msgid "validating publisher connection string" +msgstr "проверяется строка подключения к серверу публикации" + +#: pg_createsubscriber.c:2092 +#, c-format +msgid "validating subscriber connection string" +msgstr "проверяется строка подключения к подписчику" + +#: pg_createsubscriber.c:2097 +#, c-format +msgid "no database was specified" +msgstr "база данных не указана" + +#: pg_createsubscriber.c:2109 +#, c-format +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "имя базы \"%s\" извлечено из строки подключения к серверу публикации" + +#: pg_createsubscriber.c:2114 +#, c-format +msgid "no database name specified" +msgstr "имя базы данных не указано" + +#: pg_createsubscriber.c:2124 +#, c-format +msgid "wrong number of publication names specified" +msgstr "указано неверное количество имён публикаций" + +#: pg_createsubscriber.c:2125 +#, c-format +msgid "" +"The number of specified publication names (%d) must match the number of " +"specified database names (%d)." +msgstr "" +"Количество указанных имён публикаций (%d) должно совпадать с количеством " +"указанных имён баз (%d)." + +#: pg_createsubscriber.c:2131 +#, c-format +msgid "wrong number of subscription names specified" +msgstr "указано неверное количество имён подписок" + +#: pg_createsubscriber.c:2132 +#, c-format +msgid "" +"The number of specified subscription names (%d) must match the number of " +"specified database names (%d)." +msgstr "" +"Количество указанных имён подписок (%d) должно совпадать с количеством " +"указанных имён баз (%d)." + +#: pg_createsubscriber.c:2138 +#, c-format +msgid "wrong number of replication slot names specified" +msgstr "указано неверное количество имён слотов репликации" + +#: pg_createsubscriber.c:2139 +#, c-format +msgid "" +"The number of specified replication slot names (%d) must match the number of " +"specified database names (%d)." +msgstr "" +"Количество указанных имён слотов репликации (%d) должно совпадать с " +"количеством указанных имён баз (%d)." + +#: pg_createsubscriber.c:2168 +#, c-format +msgid "subscriber data directory is not a copy of the source database cluster" +msgstr "" +"каталог данных подписчика не является копией исходного кластера баз данных" + +#: pg_createsubscriber.c:2181 +#, c-format +msgid "standby server is running" +msgstr "резервный сервер запущен" + +#: pg_createsubscriber.c:2182 +#, c-format +msgid "Stop the standby server and try again." +msgstr "Остановите резервный сервер и повторите попытку." + +#: pg_createsubscriber.c:2191 +#, c-format +msgid "starting the standby server with command-line options" +msgstr "резервный сервер запускается с параметрами командной строки" + +#: pg_createsubscriber.c:2207 pg_createsubscriber.c:2242 +#, c-format +msgid "stopping the subscriber" +msgstr "подписчик останавливается" + +#: pg_createsubscriber.c:2221 +#, c-format +msgid "starting the subscriber" +msgstr "подписчик запускается" + +#: pg_createsubscriber.c:2250 +#, c-format +msgid "Done!" +msgstr "Готово!" + +#: pg_receivewal.c:77 +#, c-format +msgid "" +"%s receives PostgreSQL streaming write-ahead logs.\n" +"\n" +msgstr "" +"%s получает транслируемые журналы предзаписи PostgreSQL.\n" +"\n" + +#: pg_receivewal.c:82 #, c-format msgid "" " -D, --directory=DIR receive write-ahead log files into this directory\n" @@ -1218,14 +2090,14 @@ msgstr "" " -D, --directory=ПУТЬ сохранять файлы журнала предзаписи в данный " "каталог\n" -#: pg_receivewal.c:85 pg_recvlogical.c:85 +#: pg_receivewal.c:83 pg_recvlogical.c:93 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr "" " -E, --endpos=LSN определяет позицию, после которой нужно " "остановиться\n" -#: pg_receivewal.c:86 pg_recvlogical.c:89 +#: pg_receivewal.c:84 pg_recvlogical.c:97 #, c-format msgid "" " --if-not-exists do not error if slot already exists when creating a " @@ -1234,12 +2106,12 @@ msgstr "" " --if-not-exists не выдавать ошибку при попытке создать уже " "существующий слот\n" -#: pg_receivewal.c:87 pg_recvlogical.c:91 +#: pg_receivewal.c:85 pg_recvlogical.c:99 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop прерывать работу при потере соединения\n" -#: pg_receivewal.c:88 +#: pg_receivewal.c:86 #, c-format msgid "" " --no-sync do not wait for changes to be written safely to " @@ -1247,7 +2119,7 @@ msgid "" msgstr "" " --no-sync не ждать надёжного сохранения изменений на диске\n" -#: pg_receivewal.c:89 pg_recvlogical.c:96 +#: pg_receivewal.c:87 pg_recvlogical.c:104 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -1258,7 +2130,7 @@ msgstr "" " интервал между отправкой статусных пакетов серверу " "(по умолчанию: %d)\n" -#: pg_receivewal.c:92 +#: pg_receivewal.c:90 #, c-format msgid "" " --synchronous flush write-ahead log immediately after writing\n" @@ -1266,7 +2138,7 @@ msgstr "" " --synchronous сбрасывать журнал предзаписи сразу после записи\n" # well-spelled: ИНФО -#: pg_receivewal.c:95 +#: pg_receivewal.c:93 #, c-format msgid "" " -Z, --compress=METHOD[:DETAIL]\n" @@ -1275,7 +2147,7 @@ msgstr "" " -Z, --compress=МЕТОД[:ДОП_ИНФО]\n" " выполнять сжатие как указано\n" -#: pg_receivewal.c:105 +#: pg_receivewal.c:103 #, c-format msgid "" "\n" @@ -1284,7 +2156,7 @@ msgstr "" "\n" "Дополнительные действия:\n" -#: pg_receivewal.c:106 pg_recvlogical.c:81 +#: pg_receivewal.c:104 pg_recvlogical.c:89 #, c-format msgid "" " --create-slot create a new replication slot (for the slot's name " @@ -1293,7 +2165,7 @@ msgstr "" " --create-slot создать новый слот репликации (имя слота задаёт " "параметр --slot)\n" -#: pg_receivewal.c:107 pg_recvlogical.c:82 +#: pg_receivewal.c:105 pg_recvlogical.c:90 #, c-format msgid "" " --drop-slot drop the replication slot (for the slot's name see " @@ -1302,57 +2174,57 @@ msgstr "" " --drop-slot удалить слот репликации (имя слота задаёт параметр " "--slot)\n" -#: pg_receivewal.c:252 +#: pg_receivewal.c:191 #, c-format msgid "finished segment at %X/%X (timeline %u)" msgstr "завершён сегмент %X/%X (линия времени %u)" -#: pg_receivewal.c:259 +#: pg_receivewal.c:198 #, c-format msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "завершена передача журнала с позиции %X/%X (линия времени %u)" -#: pg_receivewal.c:275 +#: pg_receivewal.c:214 #, c-format msgid "switched to timeline %u at %X/%X" msgstr "переключение на линию времени %u (позиция %X/%X)" -#: pg_receivewal.c:285 +#: pg_receivewal.c:224 pg_recvlogical.c:1053 #, c-format msgid "received interrupt signal, exiting" msgstr "получен сигнал прерывания, работа завершается" -#: pg_receivewal.c:317 +#: pg_receivewal.c:256 #, c-format msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: pg_receivewal.c:384 +#: pg_receivewal.c:323 #, c-format msgid "segment file \"%s\" has incorrect size %lld, skipping" msgstr "файл сегмента \"%s\" имеет неправильный размер %lld, файл пропускается" -#: pg_receivewal.c:401 +#: pg_receivewal.c:340 #, c-format msgid "could not open compressed file \"%s\": %m" msgstr "не удалось открыть сжатый файл \"%s\": %m" -#: pg_receivewal.c:404 +#: pg_receivewal.c:343 #, c-format msgid "could not seek in compressed file \"%s\": %m" msgstr "ошибка позиционирования в сжатом файле \"%s\": %m" -#: pg_receivewal.c:410 +#: pg_receivewal.c:349 #, c-format msgid "could not read compressed file \"%s\": %m" msgstr "не удалось прочитать сжатый файл \"%s\": %m" -#: pg_receivewal.c:413 +#: pg_receivewal.c:352 #, c-format msgid "could not read compressed file \"%s\": read %d of %zu" msgstr "не удалось прочитать сжатый файл \"%s\" (прочитано байт: %d из %zu)" -#: pg_receivewal.c:423 +#: pg_receivewal.c:362 #, c-format msgid "" "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" @@ -1360,27 +2232,22 @@ msgstr "" "файл сжатого сегмента \"%s\" имеет неправильный исходный размер %d, файл " "пропускается" -#: pg_receivewal.c:451 +#: pg_receivewal.c:390 #, c-format msgid "could not create LZ4 decompression context: %s" msgstr "не удалось создать контекст распаковки LZ4: %s" -#: pg_receivewal.c:463 -#, c-format -msgid "could not read file \"%s\": %m" -msgstr "не удалось прочитать файл \"%s\": %m" - -#: pg_receivewal.c:481 +#: pg_receivewal.c:420 #, c-format msgid "could not decompress file \"%s\": %s" msgstr "не удалось распаковать файл \"%s\": %s" -#: pg_receivewal.c:504 +#: pg_receivewal.c:443 #, c-format msgid "could not free LZ4 decompression context: %s" msgstr "не удалось освободить контекст распаковки LZ4: %s" -#: pg_receivewal.c:509 +#: pg_receivewal.c:448 #, c-format msgid "" "compressed segment file \"%s\" has incorrect uncompressed size %zu, skipping" @@ -1388,7 +2255,7 @@ msgstr "" "файл сжатого сегмента \"%s\" имеет неправильный исходный размер %zu, файл " "пропускается" -#: pg_receivewal.c:514 +#: pg_receivewal.c:453 #, c-format msgid "" "cannot check file \"%s\": compression with %s not supported by this build" @@ -1396,37 +2263,37 @@ msgstr "" "не удалось проверить файл \"%s\": сжатие методом %s не поддерживается данной " "сборкой" -#: pg_receivewal.c:641 +#: pg_receivewal.c:578 #, c-format msgid "starting log streaming at %X/%X (timeline %u)" msgstr "начало передачи журнала с позиции %X/%X (линия времени %u)" -#: pg_receivewal.c:783 pg_recvlogical.c:785 +#: pg_receivewal.c:693 pg_recvlogical.c:801 #, c-format msgid "could not parse end position \"%s\"" msgstr "не удалось разобрать конечную позицию \"%s\"" -#: pg_receivewal.c:832 +#: pg_receivewal.c:766 #, c-format msgid "cannot use --create-slot together with --drop-slot" msgstr "--create-slot нельзя применять вместе с --drop-slot" -#: pg_receivewal.c:848 +#: pg_receivewal.c:782 #, c-format msgid "cannot use --synchronous together with --no-sync" msgstr "--synchronous нельзя применять вместе с --no-sync" -#: pg_receivewal.c:858 +#: pg_receivewal.c:792 #, c-format msgid "no target directory specified" msgstr "целевой каталог не указан" -#: pg_receivewal.c:882 +#: pg_receivewal.c:816 #, c-format msgid "compression with %s is not yet supported" msgstr "метод сжатия %s ещё не поддерживается" -#: pg_receivewal.c:924 +#: pg_receivewal.c:859 #, c-format msgid "" "replication connection using slot \"%s\" is unexpectedly database specific" @@ -1434,28 +2301,28 @@ msgstr "" "подключение для репликации через слот \"%s\" оказалось привязано к базе " "данных" -#: pg_receivewal.c:943 pg_recvlogical.c:955 +#: pg_receivewal.c:878 pg_recvlogical.c:972 #, c-format msgid "dropping replication slot \"%s\"" msgstr "удаление слота репликации \"%s\"" -#: pg_receivewal.c:954 pg_recvlogical.c:965 +#: pg_receivewal.c:889 pg_recvlogical.c:982 #, c-format msgid "creating replication slot \"%s\"" msgstr "создание слота репликации \"%s\"" -#: pg_receivewal.c:983 pg_recvlogical.c:989 +#: pg_receivewal.c:918 pg_recvlogical.c:1006 #, c-format msgid "disconnected" msgstr "отключение" #. translator: check source for value for %d -#: pg_receivewal.c:987 pg_recvlogical.c:993 +#: pg_receivewal.c:922 pg_recvlogical.c:1010 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "отключение; через %d сек. последует повторное подключение" -#: pg_recvlogical.c:76 +#: pg_recvlogical.c:84 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1464,7 +2331,7 @@ msgstr "" "%s управляет потоками логического декодирования PostgreSQL.\n" "\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:88 #, c-format msgid "" "\n" @@ -1473,7 +2340,7 @@ msgstr "" "\n" "Действие, которое будет выполнено:\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:91 #, c-format msgid "" " --start start streaming in a replication slot (for the " @@ -1482,13 +2349,13 @@ msgstr "" " --start начать передачу в слоте репликации (имя слота " "задаёт параметр --slot)\n" -#: pg_recvlogical.c:86 +#: pg_recvlogical.c:94 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr "" " -f, --file=ФАЙЛ сохранять журнал в этот файл, - обозначает stdout\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:95 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1499,7 +2366,7 @@ msgstr "" " периодичность сброса на диск выходного файла (по " "умолчанию: %d)\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:98 #, c-format msgid "" " -I, --startpos=LSN where in an existing slot should the streaming " @@ -1508,7 +2375,7 @@ msgstr "" " -I, --startpos=LSN определяет, с какой позиции в существующем слоте " "начнётся передача\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:100 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1520,19 +2387,19 @@ msgstr "" "необязательным\n" " значением модулю вывода\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:103 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr "" " -P, --plugin=МОДУЛЬ использовать заданный модуль вывода (по умолчанию: " "%s)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:106 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=ИМЯ_СЛОТА имя слота логической репликации\n" -#: pg_recvlogical.c:99 +#: pg_recvlogical.c:107 #, c-format msgid "" " -t, --two-phase enable decoding of prepared transactions when " @@ -1541,160 +2408,160 @@ msgstr "" " -t, --two-phase включить декодирование подготовленных транзакций " "при создании слота\n" -#: pg_recvlogical.c:104 +#: pg_recvlogical.c:112 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=ИМЯ_БД целевая база данных\n" -#: pg_recvlogical.c:137 +#: pg_recvlogical.c:145 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "подтверждается запись до %X/%X, синхронизация с ФС до %X/%X (слот %s)" -#: pg_recvlogical.c:161 receivelog.c:366 +#: pg_recvlogical.c:169 receivelog.c:360 #, c-format msgid "could not send feedback packet: %s" msgstr "не удалось отправить пакет ответа: %s" -#: pg_recvlogical.c:229 +#: pg_recvlogical.c:239 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "начало передачи журнала с позиции %X/%X (слот %s)" -#: pg_recvlogical.c:271 +#: pg_recvlogical.c:281 #, c-format msgid "streaming initiated" msgstr "передача запущена" -#: pg_recvlogical.c:335 +#: pg_recvlogical.c:346 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не удалось открыть файл протокола \"%s\": %m" -#: pg_recvlogical.c:364 receivelog.c:889 +#: pg_recvlogical.c:375 receivelog.c:882 #, c-format msgid "invalid socket: %s" msgstr "неверный сокет: %s" -#: pg_recvlogical.c:417 receivelog.c:917 +#: pg_recvlogical.c:428 receivelog.c:910 #, c-format msgid "%s() failed: %m" msgstr "ошибка в %s(): %m" -#: pg_recvlogical.c:424 receivelog.c:967 +#: pg_recvlogical.c:435 receivelog.c:959 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не удалось получить данные из потока WAL: %s" -#: pg_recvlogical.c:466 pg_recvlogical.c:517 receivelog.c:1011 -#: receivelog.c:1074 +#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 +#: receivelog.c:1066 #, c-format msgid "streaming header too small: %d" msgstr "заголовок потока слишком мал: %d" -#: pg_recvlogical.c:501 receivelog.c:849 +#: pg_recvlogical.c:512 receivelog.c:843 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "нераспознанный заголовок потока: \"%c\"" -#: pg_recvlogical.c:555 pg_recvlogical.c:567 +#: pg_recvlogical.c:566 pg_recvlogical.c:578 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "не удалось записать %d Б в файл журнала \"%s\": %m" -#: pg_recvlogical.c:621 receivelog.c:648 receivelog.c:685 +#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "неожиданный конец потока репликации: %s" -#: pg_recvlogical.c:780 +#: pg_recvlogical.c:796 #, c-format msgid "could not parse start position \"%s\"" msgstr "не удалось разобрать начальную позицию \"%s\"" -#: pg_recvlogical.c:858 +#: pg_recvlogical.c:874 #, c-format msgid "no slot specified" msgstr "слот не указан" -#: pg_recvlogical.c:865 +#: pg_recvlogical.c:881 #, c-format msgid "no target file specified" msgstr "целевой файл не задан" -#: pg_recvlogical.c:872 +#: pg_recvlogical.c:888 #, c-format msgid "no database specified" msgstr "база данных не задана" -#: pg_recvlogical.c:879 +#: pg_recvlogical.c:895 #, c-format msgid "at least one action needs to be specified" msgstr "необходимо задать минимум одно действие" -#: pg_recvlogical.c:886 +#: pg_recvlogical.c:902 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "--create-slot или --start нельзя применять вместе с --drop-slot" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "--create-slot или --drop-slot нельзя применять вместе с --startpos" -#: pg_recvlogical.c:900 +#: pg_recvlogical.c:916 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos можно задать только вместе с --start" -#: pg_recvlogical.c:907 +#: pg_recvlogical.c:923 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase можно задать только вместе с --create-slot" -#: pg_recvlogical.c:939 +#: pg_recvlogical.c:956 #, c-format msgid "could not establish database-specific replication connection" msgstr "" "не удалось установить подключение для репликации к определённой базе данных" -#: pg_recvlogical.c:1033 +#: pg_recvlogical.c:1056 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "конечная позиция %X/%X достигнута при обработке keepalive" -#: pg_recvlogical.c:1036 +#: pg_recvlogical.c:1061 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "конечная позиция %X/%X достигнута при обработке записи WAL %X/%X" -#: receivelog.c:68 +#: receivelog.c:66 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "не удалось создать файл статуса архива \"%s\": %s" -#: receivelog.c:75 +#: receivelog.c:73 #, c-format msgid "could not close archive status file \"%s\": %s" msgstr "не удалось закрыть файл статуса архива \"%s\": %s" -#: receivelog.c:123 +#: receivelog.c:122 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "не удалось получить размер файла журнала предзаписи \"%s\": %s" -#: receivelog.c:134 +#: receivelog.c:133 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "не удалось открыть существующий файл журнала предзаписи \"%s\": %s" -#: receivelog.c:143 +#: receivelog.c:142 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "" "не удалось сбросить на диск существующий файл журнала предзаписи \"%s\": %s" -#: receivelog.c:158 +#: receivelog.c:157 #, c-format msgid "write-ahead log file \"%s\" has %zd byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %zd bytes, should be 0 or %d" @@ -1705,42 +2572,37 @@ msgstr[1] "" msgstr[2] "" "файл журнала предзаписи \"%s\" имеет размер %zd Б, а должен — 0 или %d" -#: receivelog.c:174 +#: receivelog.c:175 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "не удалось открыть файл журнала предзаписи \"%s\": %s" -#: receivelog.c:208 -#, c-format -msgid "could not determine seek position in file \"%s\": %s" -msgstr "не удалось определить текущую позицию в файле \"%s\": %s" - -#: receivelog.c:223 +#: receivelog.c:216 #, c-format msgid "not renaming \"%s\", segment is not complete" msgstr "файл сегмента \"%s\" не переименовывается, так как он неполный" -#: receivelog.c:234 receivelog.c:323 receivelog.c:694 +#: receivelog.c:227 receivelog.c:317 receivelog.c:688 #, c-format msgid "could not close file \"%s\": %s" msgstr "не удалось закрыть файл \"%s\": %s" -#: receivelog.c:295 +#: receivelog.c:288 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "сервер сообщил неожиданное имя файла истории для линии времени %u: %s" -#: receivelog.c:303 +#: receivelog.c:297 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "не удалось создать файл истории линии времени \"%s\": %s" -#: receivelog.c:310 +#: receivelog.c:304 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "не удалось записать файл истории линии времени \"%s\": %s" -#: receivelog.c:400 +#: receivelog.c:394 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1749,7 +2611,7 @@ msgstr "" "несовместимая версия сервера %s; клиент не поддерживает репликацию с " "серверов версии ниже %s" -#: receivelog.c:409 +#: receivelog.c:403 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1758,7 +2620,7 @@ msgstr "" "несовместимая версия сервера %s; клиент не поддерживает репликацию с " "серверов версии выше %s" -#: receivelog.c:514 +#: receivelog.c:508 #, c-format msgid "" "system identifier does not match between base backup and streaming connection" @@ -1766,12 +2628,12 @@ msgstr "" "системный идентификатор базовой резервной копии отличается от идентификатора " "потоковой передачи" -#: receivelog.c:522 +#: receivelog.c:516 #, c-format msgid "starting timeline %u is not present in the server" msgstr "на сервере нет начальной линии времени %u" -#: receivelog.c:561 +#: receivelog.c:555 #, c-format msgid "" "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, " @@ -1780,12 +2642,12 @@ msgstr "" "сервер вернул неожиданный ответ на команду TIMELINE_HISTORY; получено строк: " "%d, полей: %d, а ожидалось строк: %d, полей: %d" -#: receivelog.c:632 +#: receivelog.c:626 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "сервер неожиданно сообщил линию времени %u после линии времени %u" -#: receivelog.c:638 +#: receivelog.c:632 #, c-format msgid "" "server stopped streaming timeline %u at %X/%X, but reported next timeline %u " @@ -1794,12 +2656,12 @@ msgstr "" "сервер прекратил передачу линии времени %u в %X/%X, но сообщил, что " "следующая линии времени %u начнётся в %X/%X" -#: receivelog.c:678 +#: receivelog.c:672 #, c-format msgid "replication stream was terminated before stop point" msgstr "поток репликации закончился до точки остановки" -#: receivelog.c:724 +#: receivelog.c:718 #, c-format msgid "" "unexpected result set after end-of-timeline: got %d rows and %d fields, " @@ -1808,61 +2670,62 @@ msgstr "" "сервер вернул неожиданный набор данных после конца линии времени; получено " "строк: %d, полей: %d, а ожидалось строк: %d, полей: %d" -#: receivelog.c:733 +#: receivelog.c:727 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "не удалось разобрать начальную точку следующей линии времени \"%s\"" -#: receivelog.c:781 receivelog.c:1030 walmethods.c:1205 +#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "не удалось синхронизировать с ФС файл \"%s\": %s" -#: receivelog.c:1091 +#: receivelog.c:1083 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "получена запись журнала предзаписи по смещению %u, но файл не открыт" -#: receivelog.c:1101 +#: receivelog.c:1093 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "получено смещение данных WAL %08x, но ожидалось %08x" -#: receivelog.c:1135 +#: receivelog.c:1128 #, c-format msgid "could not write %d bytes to WAL file \"%s\": %s" msgstr "не удалось записать %d Б в файл WAL \"%s\": %s" -#: receivelog.c:1160 receivelog.c:1200 receivelog.c:1230 +#: receivelog.c:1153 receivelog.c:1193 receivelog.c:1222 #, c-format msgid "could not send copy-end packet: %s" msgstr "не удалось отправить пакет \"конец COPY\": %s" -#: streamutil.c:159 +#: streamutil.c:165 msgid "Password: " msgstr "Пароль: " -#: streamutil.c:182 +#: streamutil.c:192 #, c-format msgid "could not connect to server" msgstr "не удалось подключиться к серверу" -#: streamutil.c:225 +#: streamutil.c:233 #, c-format -msgid "could not clear search_path: %s" -msgstr "не удалось очистить search_path: %s" +msgid "could not clear \"search_path\": %s" +msgstr "не удалось очистить \"search_path\": %s" -#: streamutil.c:241 +#: streamutil.c:249 #, c-format -msgid "could not determine server setting for integer_datetimes" -msgstr "не удалось получить настройку сервера integer_datetimes" +msgid "could not determine server setting for \"integer_datetimes\"" +msgstr "не удалось получить параметр сервера \"integer_datetimes\"" -#: streamutil.c:248 +#: streamutil.c:256 #, c-format -msgid "integer_datetimes compile flag does not match server" -msgstr "флаг компиляции integer_datetimes не соответствует настройке сервера" +msgid "\"integer_datetimes\" compile flag does not match server" +msgstr "" +"флаг компиляции \"integer_datetimes\" не соответствует настройке сервера" -#: streamutil.c:299 +#: streamutil.c:375 #, c-format msgid "" "could not fetch WAL segment size: got %d rows and %d fields, expected %d " @@ -1871,30 +2734,26 @@ msgstr "" "не удалось извлечь размер сегмента WAL; получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))" -#: streamutil.c:309 +#: streamutil.c:385 #, c-format msgid "WAL segment size could not be parsed" msgstr "разобрать размер сегмента WAL не удалось" -#: streamutil.c:327 +#: streamutil.c:403 #, c-format -msgid "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"remote server reported a value of %d byte" -msgid_plural "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"remote server reported a value of %d bytes" -msgstr[0] "" -"размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " -"ГБ, но удалённый сервер сообщил значение: %d" -msgstr[1] "" -"размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " -"ГБ, но удалённый сервер сообщил значение: %d" -msgstr[2] "" -"размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " -"ГБ, но удалённый сервер сообщил значение: %d" +msgid "remote server reported invalid WAL segment size (%d byte)" +msgid_plural "remote server reported invalid WAL segment size (%d bytes)" +msgstr[0] "удалённый сервер выдал неверный размер сегмента WAL: %d Б" +msgstr[1] "удалённый сервер выдал неверный размер сегмента WAL: %d Б" +msgstr[2] "удалённый сервер выдал неверный размер сегмента WAL: %d Б" -#: streamutil.c:372 +#: streamutil.c:407 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "" +"Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 ГБ." + +#: streamutil.c:449 #, c-format msgid "" "could not fetch group access flag: got %d rows and %d fields, expected %d " @@ -1903,12 +2762,12 @@ msgstr "" "не удалось извлечь флаг доступа группы; получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))" -#: streamutil.c:381 +#: streamutil.c:458 #, c-format msgid "group access flag could not be parsed: %s" msgstr "не удалось разобрать флаг доступа группы: %s" -#: streamutil.c:424 streamutil.c:461 +#: streamutil.c:501 streamutil.c:538 #, c-format msgid "" "could not identify system: got %d rows and %d fields, expected %d rows and " @@ -1917,7 +2776,7 @@ msgstr "" "не удалось идентифицировать систему; получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))" -#: streamutil.c:513 +#: streamutil.c:590 #, c-format msgid "" "could not read replication slot \"%s\": got %d rows and %d fields, expected " @@ -1926,23 +2785,23 @@ msgstr "" "прочитать из слота репликации \"%s\" не удалось; получено строк: %d, полей: " "%d (ожидалось: %d и %d)" -#: streamutil.c:525 +#: streamutil.c:602 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "слот репликации \"%s\" не существует" -#: streamutil.c:536 +#: streamutil.c:613 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "ожидался слот физической репликации, вместо этого получен тип \"%s\"" -#: streamutil.c:550 +#: streamutil.c:627 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "" "не удалось разобрать позицию restart_lsn \"%s\" для слота репликации \"%s\"" -#: streamutil.c:667 +#: streamutil.c:744 #, c-format msgid "" "could not create replication slot \"%s\": got %d rows and %d fields, " @@ -1951,7 +2810,7 @@ msgstr "" "создать слот репликации \"%s\" не удалось; получено строк: %d, полей: %d " "(ожидалось: %d и %d)" -#: streamutil.c:711 +#: streamutil.c:788 #, c-format msgid "" "could not drop replication slot \"%s\": got %d rows and %d fields, expected " @@ -1960,35 +2819,55 @@ msgstr "" "удалить слот репликации \"%s\" не получилось; получено строк: %d, полей: %d " "(ожидалось: %d и %d)" -#: walmethods.c:720 walmethods.c:1267 +#: walmethods.c:726 walmethods.c:1269 msgid "could not compress data" msgstr "не удалось сжать данные" -#: walmethods.c:749 +#: walmethods.c:755 msgid "could not reset compression stream" msgstr "не удалось сбросить поток сжатых данных" -#: walmethods.c:880 +#: walmethods.c:892 msgid "implementation error: tar files can't have more than one open file" msgstr "" "ошибка реализации: в файлах tar не может быть больше одно открытого файла" -#: walmethods.c:894 +#: walmethods.c:907 msgid "could not create tar header" msgstr "не удалось создать заголовок tar" -#: walmethods.c:910 walmethods.c:951 walmethods.c:1170 walmethods.c:1183 +#: walmethods.c:924 walmethods.c:965 walmethods.c:1171 walmethods.c:1184 msgid "could not change compression parameters" msgstr "не удалось изменить параметры сжатия" -#: walmethods.c:1055 +#: walmethods.c:1056 msgid "unlink not supported with compression" msgstr "со сжатием закрытие файла с удалением не поддерживается" -#: walmethods.c:1291 +#: walmethods.c:1293 msgid "could not close compression stream" msgstr "не удалось закрыть поток сжатых данных" +#, c-format +#~ msgid "this build does not support gzip compression" +#~ msgstr "эта сборка программы не поддерживает сжатие gzip" + +#, c-format +#~ msgid "this build does not support lz4 compression" +#~ msgstr "эта сборка программы не поддерживает сжатие lz4" + +#, c-format +#~ msgid "this build does not support zstd compression" +#~ msgstr "эта сборка программы не поддерживает сжатие zstd" + +#, c-format +#~ msgid "symlinks are not supported on this platform" +#~ msgstr "символические ссылки не поддерживаются в этой ОС" + +#, c-format +#~ msgid "could not determine seek position in file \"%s\": %s" +#~ msgstr "не удалось определить текущую позицию в файле \"%s\": %s" + #~ msgid "unknown compression option \"%s\"" #~ msgstr "неизвестный параметр сжатия \"%s\"" @@ -2003,9 +2882,6 @@ msgstr "не удалось закрыть поток сжатых данных" #~ "для параметра --compress не задано значение, используется значение по " #~ "умолчанию" -#~ msgid "could not find replication slot \"%s\"" -#~ msgstr "не удалось найти слот репликации \"%s\"" - #~ msgid "fatal: " #~ msgstr "важно: " @@ -2044,9 +2920,6 @@ msgstr "не удалось закрыть поток сжатых данных" #~ msgid "--no-manifest and --manifest-force-encode are incompatible options" #~ msgstr "параметры --no-manifest и --manifest-force-encode несовместимы" -#~ msgid "could not connect to server: %s" -#~ msgstr "не удалось подключиться к серверу: %s" - #~ msgid "" #~ "\n" #~ "Report bugs to .\n" @@ -2130,13 +3003,6 @@ msgstr "не удалось закрыть поток сжатых данных" #~ msgid "%s: initializing replication slot \"%s\"\n" #~ msgstr "%s: инициализируется слот репликации \"%s\"\n" -#~ msgid "" -#~ "%s: could not init logical replication: got %d rows and %d fields, " -#~ "expected %d rows and %d fields\n" -#~ msgstr "" -#~ "%s: не удалось инициализировать логическую репликацию; получено строк: " -#~ "%d, полей: %d (ожидалось: %d и %d)\n" - #~ msgid "%s: no start point returned from server\n" #~ msgstr "%s: сервер не вернул стартовую точку\n" @@ -2155,9 +3021,6 @@ msgstr "не удалось закрыть поток сжатых данных" #~ msgid "%s: invalid format of xlog location: %s\n" #~ msgstr "%s: неверный формат позиции в xlog: %s\n" -#~ msgid "%s: could not identify system: %s" -#~ msgstr "%s: не удалось идентифицировать систему: %s" - #~ msgid "%s: could not send base backup command: %s" #~ msgstr "" #~ "%s: не удалось отправить команду базового резервного копирования: %s" diff --git a/src/bin/pg_basebackup/po/sv.po b/src/bin/pg_basebackup/po/sv.po index e3cb887029169..e93dab66b4ca8 100644 --- a/src/bin/pg_basebackup/po/sv.po +++ b/src/bin/pg_basebackup/po/sv.po @@ -1,14 +1,14 @@ # SWEDISH message translation file for pg_basebackup # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Dennis Björklund , 2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Dennis Björklund , 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 16\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-01 14:19+0000\n" -"PO-Revision-Date: 2023-08-01 22:11+0200\n" +"POT-Creation-Date: 2024-08-26 18:20+0000\n" +"PO-Revision-Date: 2024-08-26 20:56+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -52,7 +52,7 @@ msgstr "hittade en tom sträng där en komprimeringsinställning förväntades" #: ../../common/compression.c:244 #, c-format msgid "unrecognized compression option: \"%s\"" -msgstr "okänd komprimeringsflagga \"%s\"" +msgstr "okänd komprimeringsflagga: \"%s\"" #: ../../common/compression.c:283 #, c-format @@ -89,6 +89,64 @@ msgstr "komprimeringsalgoritmen \"%s\" stöder inte inställning av antal arbeta msgid "compression algorithm \"%s\" does not support long-distance mode" msgstr "komprimeringsalgoritmen \"%s\" stöder inte långdistansläge" +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "kunde inte öppna filen \"%s\" för läsning: %m" + +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: pg_receivewal.c:402 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "kunde inte läsa fil \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "kunde inte stänga fil \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "byte-ordning stämmer inte" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"möjligt fel i byteordning\n" +"Den byteordning som filen från pg_control lagrats med passar kanske\n" +"inte detta program. I så fall kan nedanstående resultat vara felaktiga\n" +"och PostgreSQL-installationen vara inkompatibel med databaskatalogen." + +#: ../../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 ../../fe_utils/recovery_gen.c:140 +#: pg_basebackup.c:1846 pg_receivewal.c:386 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "kunde inte skriva fil \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "kunde inte fsync:a fil \"%s\": %m" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format @@ -100,39 +158,69 @@ msgstr "slut på minne\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kan inte duplicera null-pekare (internt fel)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:447 -#: pg_receivewal.c:319 pg_recvlogical.c:339 +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_receivewal.c:319 pg_recvlogical.c:352 #, c-format msgid "could not stat file \"%s\": %m" msgstr "kunde inte göra stat() på fil \"%s\": %m" -#: ../../common/file_utils.c:162 pg_receivewal.c:242 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "detta bygge stöder inte synkmetod \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "kunde inte öppna katalog \"%s\": %m" -#: ../../common/file_utils.c:196 pg_receivewal.c:471 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "kunde inte läsa katalog \"%s\": %m" -#: ../../common/file_utils.c:228 ../../common/file_utils.c:287 -#: ../../common/file_utils.c:361 ../../fe_utils/recovery_gen.c:121 -#: pg_receivewal.c:386 +#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "kunde inte öppna fil \"%s\": %m" +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" -#: ../../common/file_utils.c:299 ../../common/file_utils.c:369 -#: pg_recvlogical.c:194 +#: ../../common/restricted_token.c:60 #, c-format -msgid "could not fsync file \"%s\": %m" -msgstr "kunde inte fsync:a fil \"%s\": %m" +msgid "could not open process token: error code %lu" +msgstr "kunde inte öppna process-token: felkod %lu" -#: ../../common/file_utils.c:379 pg_basebackup.c:2237 walmethods.c:462 +#: ../../common/restricted_token.c:74 #, c-format -msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" +msgid "could not allocate SIDs: error code %lu" +msgstr "kunde inte allokera SID: felkod %lu" + +#: ../../common/restricted_token.c:94 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "kunde inte skapa token för begränsad åtkomst: felkod %lu" + +#: ../../common/restricted_token.c:115 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "kunde inte starta process för kommando \"%s\": felkod %lu" + +#: ../../common/restricted_token.c:153 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "kunde inte köra igen med token för begränsad åtkomst: felkod %lu" + +#: ../../common/restricted_token.c:168 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "kunde inte hämta statuskod för underprocess: felkod %lu" #: ../../fe_utils/option_utils.c:69 #, c-format @@ -144,51 +232,62 @@ msgstr "ogiltigt värde \"%s\" för flaggan \"%s\"" msgid "%s must be in range %d..%d" msgstr "%s måste vara i intervallet %d..%d" -#: ../../fe_utils/recovery_gen.c:34 ../../fe_utils/recovery_gen.c:45 -#: ../../fe_utils/recovery_gen.c:70 ../../fe_utils/recovery_gen.c:90 -#: ../../fe_utils/recovery_gen.c:149 pg_basebackup.c:1609 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "okänd synkmetod: %s" + +#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 +#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 +#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:331 #, c-format msgid "out of memory" msgstr "slut på minne" -#: ../../fe_utils/recovery_gen.c:124 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1406 pg_basebackup.c:1700 +#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 +#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 #, c-format msgid "could not write to file \"%s\": %m" msgstr "kunde inte skriva till fil \"%s\": %m" -#: ../../fe_utils/recovery_gen.c:133 bbstreamer_file.c:93 bbstreamer_file.c:360 -#: pg_basebackup.c:1470 pg_basebackup.c:1679 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" msgstr "kunde inte skapa fil \"%s\": %m" -#: bbstreamer_file.c:138 pg_recvlogical.c:633 +#: ../../fe_utils/string_utils.c:434 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "kunde inte stänga fil \"%s\": %m" +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "shell-kommandots argument innehåller nyrad eller vagnretur: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "databasnamnet innehåller nyrad eller vagnretur: \"%s\"\n" #: bbstreamer_file.c:275 #, c-format msgid "unexpected state while extracting archive" msgstr "oväntat tillstånd vid uppackning av arkiv" -#: bbstreamer_file.c:320 pg_basebackup.c:686 pg_basebackup.c:730 +#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 +#: pg_basebackup.c:757 #, c-format msgid "could not create directory \"%s\": %m" msgstr "kunde inte skapa katalog \"%s\": %m" -#: bbstreamer_file.c:325 +#: bbstreamer_file.c:326 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "kunde inte sätta rättigheter på katalogen \"%s\": %m" -#: bbstreamer_file.c:344 +#: bbstreamer_file.c:345 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "kunde inte skapa symbolisk länk från \"%s\" till \"%s\": %m" -#: bbstreamer_file.c:364 +#: bbstreamer_file.c:365 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "kunde inte sätta rättigheter på filen \"%s\": %m" @@ -223,7 +322,7 @@ msgstr "kunde inte skriva till komprimerad fil \"%s\": %s" msgid "could not close compressed file \"%s\": %m" msgstr "kunde inte stänga komprimerad fil \"%s\": %m" -#: bbstreamer_gzip.c:245 walmethods.c:876 +#: bbstreamer_gzip.c:245 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "kunde inte initierar komprimeringsbibliotek" @@ -273,12 +372,12 @@ msgstr "tarfilens slutdel överskred 2 block" msgid "unexpected state while parsing tar archive" msgstr "oväntat tillstånd vid parsning av tar-arkiv" -#: bbstreamer_tar.c:296 +#: bbstreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "tar-medlem har tomt namn" -#: bbstreamer_tar.c:328 +#: bbstreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "COPY-ström avslutade innan sista filen var klar" @@ -308,87 +407,87 @@ msgstr "kunde inte aktivera långdistansläge: %s" msgid "could not create zstd decompression context" msgstr "kunde inte skapa kontext för zstd-dekomprimering" -#: pg_basebackup.c:238 +#: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" msgstr "tar bort datakatalog \"%s\"" -#: pg_basebackup.c:240 +#: pg_basebackup.c:247 #, c-format msgid "failed to remove data directory" msgstr "misslyckades med att ta bort datakatalog" -#: pg_basebackup.c:244 +#: pg_basebackup.c:251 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "tar bort innehållet i datakatalog \"%s\"" -#: pg_basebackup.c:246 +#: pg_basebackup.c:253 #, c-format msgid "failed to remove contents of data directory" msgstr "misslyckades med att ta bort innehållet i datakatalogen" -#: pg_basebackup.c:251 +#: pg_basebackup.c:258 #, c-format msgid "removing WAL directory \"%s\"" msgstr "tar bort WAL-katalog \"%s\"" -#: pg_basebackup.c:253 +#: pg_basebackup.c:260 #, c-format msgid "failed to remove WAL directory" msgstr "misslyckades med att ta bort WAL-katalog" -#: pg_basebackup.c:257 +#: pg_basebackup.c:264 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "tar bort innehållet i WAL-katalog \"%s\"" -#: pg_basebackup.c:259 +#: pg_basebackup.c:266 #, c-format msgid "failed to remove contents of WAL directory" msgstr "misslyckades med att ta bort innehållet i WAL-katalogen" -#: pg_basebackup.c:265 +#: pg_basebackup.c:272 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "datakatalog \"%s\" är ej borttagen på användares begäran" -#: pg_basebackup.c:268 +#: pg_basebackup.c:275 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL-katalog \"%s\" är ej borttagen på användares begäran" -#: pg_basebackup.c:272 +#: pg_basebackup.c:279 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "ändringar av tablespace-kataloger kan inte backas" -#: pg_basebackup.c:324 +#: pg_basebackup.c:331 #, c-format msgid "directory name too long" msgstr "katalognamn för långt" -#: pg_basebackup.c:331 +#: pg_basebackup.c:338 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "multipla \"=\"-tecken i tablespace-mappning" -#: pg_basebackup.c:340 +#: pg_basebackup.c:347 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "ogiltigt tablespace-mappningsformat \"%s\", måste vara \"OLDDIR=NEWDIR\"" -#: pg_basebackup.c:359 +#: pg_basebackup.c:366 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "gammal katalog är inte en absolut sökväg i tablespace-mappning: %s" -#: pg_basebackup.c:363 +#: pg_basebackup.c:370 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "ny katalog är inte en absolut sökväg i tablespace-mappning: %s" -#: pg_basebackup.c:385 +#: pg_basebackup.c:392 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -397,17 +496,19 @@ msgstr "" "%s tar en basbackup av en körande PostgreSQL-server.\n" "\n" -#: pg_basebackup.c:387 pg_receivewal.c:79 pg_recvlogical.c:76 +#: pg_basebackup.c:394 pg_createsubscriber.c:221 pg_receivewal.c:79 +#: pg_recvlogical.c:86 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_basebackup.c:388 pg_receivewal.c:80 pg_recvlogical.c:77 +#: pg_basebackup.c:395 pg_createsubscriber.c:222 pg_receivewal.c:80 +#: pg_recvlogical.c:87 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [FLAGGA]...\n" -#: pg_basebackup.c:389 +#: pg_basebackup.c:396 #, c-format msgid "" "\n" @@ -416,17 +517,26 @@ msgstr "" "\n" "Flaggor som styr utmatning:\n" -#: pg_basebackup.c:390 +#: pg_basebackup.c:397 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" -msgstr " -D, --pgdata=KATALOG ta emot basbackup till katalog\n" +msgstr " -D, --pgdata=KATALOG ta emot basbackup till katalog\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t utdataformat (plain (standard), tar)\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:399 +#, c-format +msgid "" +" -i, --incremental=OLDMANIFEST\n" +" take incremental backup\n" +msgstr "" +" -i, --incremental=GAMMALTMANIFEST\n" +" ta inkrementell backup\n" + +#: pg_basebackup.c:401 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -435,7 +545,7 @@ msgstr "" " -r, --max-rate=RATE maximal överföringshastighet för att överföra datakatalog\n" " (i kB/s, eller använd suffix \"k\" resp. \"M\")\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:403 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -444,7 +554,7 @@ msgstr "" " -R, --write-recovery-conf\n" " skriv konfiguration för replikering\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:405 #, c-format msgid "" " -t, --target=TARGET[:DETAIL]\n" @@ -453,7 +563,7 @@ msgstr "" " -t, --target=MÅL[:DETALJ]\n" " backupmål (om annat än klienten)\n" -#: pg_basebackup.c:398 +#: pg_basebackup.c:407 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -462,12 +572,12 @@ msgstr "" " -T, --tablespace-mapping=GAMMALKAT=NYKAT\n" " flytta tablespace i GAMMALKAT till NYKAT\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:409 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=WALKAT plats för write-ahead-logg-katalog\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:410 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -476,12 +586,12 @@ msgstr "" " -X, --wal-method=none|fetch|stream\n" " inkludera behövda WAL-filer med angiven metod\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:412 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip komprimera tar-utdata\n" -#: pg_basebackup.c:404 +#: pg_basebackup.c:413 #, c-format msgid "" " -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" @@ -490,12 +600,12 @@ msgstr "" " -Z, --compress=[{client|server}-]METOD[:DETALJ]\n" " komprimera på klient- eller serversida\n" -#: pg_basebackup.c:406 +#: pg_basebackup.c:415 #, c-format msgid " -Z, --compress=none do not compress tar output\n" msgstr " -Z, --compress=none komprimera inte tar-utdata\n" -#: pg_basebackup.c:407 +#: pg_basebackup.c:416 #, c-format msgid "" "\n" @@ -504,56 +614,56 @@ msgstr "" "\n" "Allmänna flaggor:\n" -#: pg_basebackup.c:408 +#: pg_basebackup.c:417 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" -" set fast or spread checkpointing\n" +" set fast or spread (default) checkpointing\n" msgstr "" " -c, --checkpoint=fast|spread\n" -" ställ in \"fast\" eller \"spread\" checkpoint-metod\n" +" ställ in checkpoint-metod \"fast\" eller \"spread\" (standard)\n" -#: pg_basebackup.c:410 +#: pg_basebackup.c:419 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " --create-slot skapa en replikeringsslot\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:420 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=ETIKETT sätt backup-etikett\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:421 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean städa inte upp efter fel\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:422 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync vänta inte på att ändringar skall skrivas säkert till disk\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:423 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress visa förloppsinformation\n" -#: pg_basebackup.c:415 pg_receivewal.c:89 +#: pg_basebackup.c:424 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=SLOTNAMN replikerings-slot att använda\n" -#: pg_basebackup.c:416 pg_receivewal.c:91 pg_recvlogical.c:98 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose mata ut utförliga meddelanden\n" -#: pg_basebackup.c:417 pg_receivewal.c:92 pg_recvlogical.c:99 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_basebackup.c:418 +#: pg_basebackup.c:427 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -562,7 +672,7 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " använd algoritm för manifestchecksummor\n" -#: pg_basebackup.c:420 +#: pg_basebackup.c:429 #, c-format msgid "" " --manifest-force-encode\n" @@ -571,22 +681,22 @@ msgstr "" " --manifest-force-encode\n" " hex-koda alla filnamn i manifestet\n" -#: pg_basebackup.c:422 +#: pg_basebackup.c:431 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr " --no-estimate-size estimerar inte backupstorlek på serversidan\n" -#: pg_basebackup.c:423 +#: pg_basebackup.c:432 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest förhindra att backupmanifest genereras\n" -#: pg_basebackup.c:424 +#: pg_basebackup.c:433 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot förhindra skapande av temporär replikerings-slot\n" -#: pg_basebackup.c:425 +#: pg_basebackup.c:434 #, c-format msgid "" " --no-verify-checksums\n" @@ -595,12 +705,21 @@ msgstr "" " --no-verify-checksums\n" " verifiera inte checksummor\n" -#: pg_basebackup.c:427 pg_receivewal.c:95 pg_recvlogical.c:100 +#: pg_basebackup.c:436 +#, c-format +msgid "" +" --sync-method=METHOD\n" +" set method for syncing files to disk\n" +msgstr "" +" --sync-method=METOD\n" +" sätt synkmetod för att synka filer till disk\n" + +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa den här hjälpen, avsluta sedan\n" -#: pg_basebackup.c:428 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 #, c-format msgid "" "\n" @@ -609,22 +728,22 @@ msgstr "" "\n" "Flaggor för anslutning:\n" -#: pg_basebackup.c:429 pg_receivewal.c:97 +#: pg_basebackup.c:440 pg_receivewal.c:97 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR anslutningssträng\n" -#: pg_basebackup.c:430 pg_receivewal.c:98 pg_recvlogical.c:103 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAMN databasserverns värdnamn eller socket-katalog\n" -#: pg_basebackup.c:431 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT databasserverns postnummer\n" -#: pg_basebackup.c:432 +#: pg_basebackup.c:443 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -633,22 +752,23 @@ msgstr "" " -s, --status-interval=INTERVAL\n" " tid mellan att statuspaket skickas till servern (i sekunder)\n" -#: pg_basebackup.c:434 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAMN ansluta som angiven databasanvändare\n" -#: pg_basebackup.c:435 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password fråga aldrig efter lösenord\n" -#: pg_basebackup.c:436 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password tvinga fram lösenordsfråga (skall ske automatiskt)\n" -#: pg_basebackup.c:437 pg_receivewal.c:106 pg_recvlogical.c:108 +#: pg_basebackup.c:448 pg_createsubscriber.c:240 pg_receivewal.c:106 +#: pg_recvlogical.c:118 #, c-format msgid "" "\n" @@ -657,484 +777,546 @@ msgstr "" "\n" "Rapportera fel till <%s>.\n" -#: pg_basebackup.c:438 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:449 pg_createsubscriber.c:241 pg_receivewal.c:107 +#: pg_recvlogical.c:119 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_basebackup.c:477 +#: pg_basebackup.c:488 #, c-format msgid "could not read from ready pipe: %m" msgstr "kunde inte läsa från rör (pipe) som har data: %m" -#: pg_basebackup.c:480 pg_basebackup.c:622 pg_basebackup.c:2151 -#: streamutil.c:441 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 +#: streamutil.c:518 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "kunde inte parsa write-ahead-logg-plats \"%s\"" -#: pg_basebackup.c:585 pg_receivewal.c:600 +#: pg_basebackup.c:596 pg_receivewal.c:600 #, c-format msgid "could not finish writing WAL files: %m" msgstr "kunde inte slutföra skrivning av WAL-filer: %m" -#: pg_basebackup.c:631 +#: pg_basebackup.c:642 #, c-format msgid "could not create pipe for background process: %m" msgstr "kunde inte skapa rör (pipe) för bakgrundsprocess: %m" -#: pg_basebackup.c:664 +#: pg_basebackup.c:676 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "skapade en temporär replikeringsslot \"%s\"" -#: pg_basebackup.c:667 +#: pg_basebackup.c:679 #, c-format msgid "created replication slot \"%s\"" msgstr "skapade en replikeringsslot \"%s\"" -#: pg_basebackup.c:701 +#: pg_basebackup.c:728 #, c-format msgid "could not create background process: %m" msgstr "kunde inte skapa bakgrundsprocess: %m" -#: pg_basebackup.c:710 +#: pg_basebackup.c:737 #, c-format msgid "could not create background thread: %m" msgstr "kunde inte skapa bakgrundstråd: %m" -#: pg_basebackup.c:749 +#: pg_basebackup.c:776 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "katalogen \"%s\" existerar men är inte tom" -#: pg_basebackup.c:755 +#: pg_basebackup.c:782 pg_createsubscriber.c:390 #, c-format msgid "could not access directory \"%s\": %m" msgstr "kunde inte komma åt katalog \"%s\": %m" -#: pg_basebackup.c:831 +#: pg_basebackup.c:858 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespace %*s" -#: pg_basebackup.c:843 +#: pg_basebackup.c:870 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" -#: pg_basebackup.c:859 +#: pg_basebackup.c:886 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespace" -#: pg_basebackup.c:883 +#: pg_basebackup.c:910 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "överföringshastighet \"%s\" är inte ett giltigt värde" -#: pg_basebackup.c:885 +#: pg_basebackup.c:912 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "ogiltig överföringshastighet \"%s\": %m" -#: pg_basebackup.c:892 +#: pg_basebackup.c:919 #, c-format msgid "transfer rate must be greater than zero" msgstr "överföringshastigheten måste vara större än noll" -#: pg_basebackup.c:922 +#: pg_basebackup.c:949 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "ogiltig enhet för --max-rate: \"%s\"" -#: pg_basebackup.c:926 +#: pg_basebackup.c:953 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "överföringshastighet \"%s\" överskrider heltalsintervall" -#: pg_basebackup.c:933 +#: pg_basebackup.c:960 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "överföringshastighet \"%s\" är utanför sitt intervall" -#: pg_basebackup.c:995 +#: pg_basebackup.c:1022 #, c-format msgid "could not get COPY data stream: %s" msgstr "kunde inte hämta COPY-data-ström: %s" -#: pg_basebackup.c:1012 pg_recvlogical.c:436 pg_recvlogical.c:608 +#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 #: receivelog.c:973 #, c-format msgid "could not read COPY data: %s" msgstr "kunde inte läsa COPY-data: %s" -#: pg_basebackup.c:1016 +#: pg_basebackup.c:1043 #, c-format msgid "background process terminated unexpectedly" msgstr "en bakgrundsprocess avslutade oväntat" -#: pg_basebackup.c:1087 +#: pg_basebackup.c:1114 #, c-format msgid "cannot inject manifest into a compressed tar file" msgstr "kan inte injicera manifest in i en komprimerad tarfil" -#: pg_basebackup.c:1088 +#: pg_basebackup.c:1115 #, c-format msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." msgstr "använd komprimering på klientsidan, skicka utdatan till en katalog istället för till standard ut eller använd %s." -#: pg_basebackup.c:1104 +#: pg_basebackup.c:1131 #, c-format msgid "cannot parse archive \"%s\"" msgstr "kunde inte parsa arkiv \"%s\"" -#: pg_basebackup.c:1105 +#: pg_basebackup.c:1132 #, c-format msgid "Only tar archives can be parsed." msgstr "Bara tar-arkiv kan parsas." -#: pg_basebackup.c:1107 +#: pg_basebackup.c:1134 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "Enkelt format kräver pg_basebackup för att parsa arkivet." -#: pg_basebackup.c:1109 +#: pg_basebackup.c:1136 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "Att använda - som utkatalog kräver att pg_basebackup parsar arkivet." -#: pg_basebackup.c:1111 +#: pg_basebackup.c:1138 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "Flaggan -R kräver att pg_basebackup parsar arkivet." -#: pg_basebackup.c:1330 +#: pg_basebackup.c:1357 #, c-format msgid "archives must precede manifest" msgstr "arkiv skall komma före manifest" -#: pg_basebackup.c:1345 +#: pg_basebackup.c:1372 #, c-format msgid "invalid archive name: \"%s\"" msgstr "ogiltigt arkivnamn: \"%s\"" -#: pg_basebackup.c:1417 +#: pg_basebackup.c:1444 #, c-format msgid "unexpected payload data" msgstr "oväntat datainnehåll" -#: pg_basebackup.c:1560 +#: pg_basebackup.c:1587 #, c-format msgid "empty COPY message" msgstr "tomt COPY-meddelande" -#: pg_basebackup.c:1562 +#: pg_basebackup.c:1589 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "felaktigt COPY-meddelande av typ %d, längd %zu" -#: pg_basebackup.c:1760 +#: pg_basebackup.c:1789 #, c-format msgid "incompatible server version %s" msgstr "inkompatibel serverversion %s" -#: pg_basebackup.c:1776 +#: pg_basebackup.c:1805 #, c-format msgid "Use -X none or -X fetch to disable log streaming." msgstr "Använd -X none eller -X fetch för att stänga av logg-strömning" -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1841 +#, c-format +msgid "server does not support incremental backup" +msgstr "servern stöder inte inkrementella backup:er" + +#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 +#: receivelog.c:543 receivelog.c:582 streamutil.c:364 streamutil.c:438 +#: streamutil.c:490 streamutil.c:578 streamutil.c:730 streamutil.c:775 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "kunde inte skicka replikeringskommando \"%s\": %s" + +#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#, c-format +msgid "could not upload manifest: %s" +msgstr "kunde inte ladda upp manifest: %s" + +#: pg_basebackup.c:1859 pg_basebackup.c:1886 +#, c-format +msgid "could not upload manifest: unexpected status %s" +msgstr "kunde inte ladda upp manifest: oväntad status %s" + +#: pg_basebackup.c:1867 +#, c-format +msgid "could not send COPY data: %s" +msgstr "kunde inte skicka COPY-data: %s" + +#: pg_basebackup.c:1877 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "kunde inte skicka slut-på-COPY: %s" + +#: pg_basebackup.c:1892 +#, c-format +msgid "unexpected extra result while sending manifest" +msgstr "oväntat extra resultat vid skickande av manifest" + +#: pg_basebackup.c:1950 #, c-format msgid "backup targets are not supported by this server version" msgstr "backupmål stöds inte av denna serverversion" -#: pg_basebackup.c:1847 +#: pg_basebackup.c:1953 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "återställningskonfiguration kan inte skrivas när backupmål används" -#: pg_basebackup.c:1874 +#: pg_basebackup.c:1980 #, c-format msgid "server does not support server-side compression" msgstr "servern stöder inte komprimering på serversidan" -#: pg_basebackup.c:1884 +#: pg_basebackup.c:1990 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "initierar basbackup, väntar på att checkpoint skall gå klart" -#: pg_basebackup.c:1888 +#: pg_basebackup.c:1994 #, c-format msgid "waiting for checkpoint" msgstr "väntar på checkpoint" -#: pg_basebackup.c:1901 pg_recvlogical.c:260 receivelog.c:543 receivelog.c:582 -#: streamutil.c:288 streamutil.c:361 streamutil.c:413 streamutil.c:501 -#: streamutil.c:653 streamutil.c:698 -#, c-format -msgid "could not send replication command \"%s\": %s" -msgstr "kunde inte skicka replikeringskommando \"%s\": %s" - -#: pg_basebackup.c:1909 +#: pg_basebackup.c:2016 #, c-format msgid "could not initiate base backup: %s" msgstr "kunde inte initiera basbackup: %s" -#: pg_basebackup.c:1912 +#: pg_basebackup.c:2019 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "servern retunerade ett oväntat svar på BASE_BACKUP-kommandot; fick %d rader och %d fält, förväntade %d rader och %d fält" -#: pg_basebackup.c:1918 +#: pg_basebackup.c:2025 #, c-format msgid "checkpoint completed" msgstr "checkpoint klar" -#: pg_basebackup.c:1932 +#: pg_basebackup.c:2039 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "write-ahead-loggens startposition: %s på tidslinje %u" -#: pg_basebackup.c:1940 +#: pg_basebackup.c:2047 #, c-format msgid "could not get backup header: %s" msgstr "kunde inte hämta backup-header: %s" -#: pg_basebackup.c:1943 +#: pg_basebackup.c:2050 #, c-format msgid "no data returned from server" msgstr "ingen data returnerades från servern" -#: pg_basebackup.c:1986 +#: pg_basebackup.c:2093 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "kunde bara skriva en endaste tablespace till stdout, databasen har %d" -#: pg_basebackup.c:1999 +#: pg_basebackup.c:2106 #, c-format msgid "starting background WAL receiver" msgstr "startar bakgrunds-WAL-mottagare" -#: pg_basebackup.c:2082 +#: pg_basebackup.c:2189 #, c-format msgid "backup failed: %s" msgstr "backup misslyckades: %s" -#: pg_basebackup.c:2085 +#: pg_basebackup.c:2192 #, c-format msgid "no write-ahead log end position returned from server" msgstr "ingen write-ahead-logg-slutposition returnerad från servern" -#: pg_basebackup.c:2088 +#: pg_basebackup.c:2195 #, c-format msgid "write-ahead log end point: %s" msgstr "write-ahead-logg-slutposition: %s" -#: pg_basebackup.c:2099 +#: pg_basebackup.c:2206 #, c-format msgid "checksum error occurred" msgstr "felaktig kontrollsumma upptäcktes" -#: pg_basebackup.c:2104 +#: pg_basebackup.c:2211 #, c-format msgid "final receive failed: %s" msgstr "sista mottagning misslyckades: %s" -#: pg_basebackup.c:2128 +#: pg_basebackup.c:2235 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "väntat på att bakgrundsprocess skall avsluta strömmande ..." -#: pg_basebackup.c:2132 +#: pg_basebackup.c:2239 #, c-format msgid "could not send command to background pipe: %m" msgstr "kunde inte skicka kommando till bakgrundsrör (pipe): %m" -#: pg_basebackup.c:2137 +#: pg_basebackup.c:2244 #, c-format msgid "could not wait for child process: %m" msgstr "kunde inte vänta på barnprocess: %m" -#: pg_basebackup.c:2139 +#: pg_basebackup.c:2246 #, c-format msgid "child %d died, expected %d" msgstr "barn %d dog, förväntade %d" -#: pg_basebackup.c:2141 streamutil.c:91 streamutil.c:196 +#: pg_basebackup.c:2248 streamutil.c:89 streamutil.c:204 streamutil.c:316 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2161 +#: pg_basebackup.c:2268 #, c-format msgid "could not wait for child thread: %m" msgstr "kunde inte vänta på barntråd: %m" -#: pg_basebackup.c:2166 +#: pg_basebackup.c:2273 #, c-format msgid "could not get child thread exit status: %m" msgstr "kunde inte hämta barntrådens slutstatus: %m" -#: pg_basebackup.c:2169 +#: pg_basebackup.c:2276 #, c-format msgid "child thread exited with error %u" msgstr "barntråd avslutade med fel %u" -#: pg_basebackup.c:2198 +#: pg_basebackup.c:2305 #, c-format msgid "syncing data to disk ..." msgstr "synkar data till disk ..." -#: pg_basebackup.c:2223 +#: pg_basebackup.c:2330 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "byter namn på backup_manifest.tmp till backup_manifest" -#: pg_basebackup.c:2243 +#: pg_basebackup.c:2350 #, c-format msgid "base backup completed" msgstr "basbackup klar" -#: pg_basebackup.c:2326 +#: pg_basebackup.c:2436 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "ogiltigt checkpoint-argument \"%s\", måste vara \"fast\" eller \"spread\"" -#: pg_basebackup.c:2344 +#: pg_basebackup.c:2454 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "ogiltigt utdataformat \"%s\", måste vara \"plain\" eller \"tar\"" -#: pg_basebackup.c:2422 +#: pg_basebackup.c:2535 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "ogiltig wal-metod-flagga \"%s\", måste vara \"fetch\", \"stream\" eller \"none\"" -#: pg_basebackup.c:2457 pg_basebackup.c:2469 pg_basebackup.c:2491 -#: pg_basebackup.c:2503 pg_basebackup.c:2509 pg_basebackup.c:2561 -#: pg_basebackup.c:2572 pg_basebackup.c:2582 pg_basebackup.c:2588 -#: pg_basebackup.c:2595 pg_basebackup.c:2607 pg_basebackup.c:2619 -#: pg_basebackup.c:2627 pg_basebackup.c:2640 pg_basebackup.c:2646 -#: pg_basebackup.c:2655 pg_basebackup.c:2667 pg_basebackup.c:2678 -#: pg_basebackup.c:2686 pg_receivewal.c:748 pg_receivewal.c:760 +#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 +#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 +#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 +#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 +#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 +#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 +#: pg_basebackup.c:2803 pg_createsubscriber.c:2037 pg_createsubscriber.c:2047 +#: pg_createsubscriber.c:2055 pg_createsubscriber.c:2083 +#: pg_createsubscriber.c:2115 pg_receivewal.c:748 pg_receivewal.c:760 #: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 -#: pg_receivewal.c:793 pg_recvlogical.c:835 pg_recvlogical.c:847 -#: pg_recvlogical.c:857 pg_recvlogical.c:864 pg_recvlogical.c:871 -#: pg_recvlogical.c:878 pg_recvlogical.c:885 pg_recvlogical.c:892 -#: pg_recvlogical.c:899 pg_recvlogical.c:906 +#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 +#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 +#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 +#: pg_recvlogical.c:917 pg_recvlogical.c:924 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: pg_basebackup.c:2467 pg_receivewal.c:758 pg_recvlogical.c:845 +#: pg_basebackup.c:2584 pg_createsubscriber.c:2045 pg_receivewal.c:758 +#: pg_recvlogical.c:863 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "för många kommandoradsargument (första är \"%s\")" -#: pg_basebackup.c:2490 +#: pg_basebackup.c:2607 #, c-format msgid "cannot specify both format and backup target" msgstr "kan inte ange både format och backupmål" -#: pg_basebackup.c:2502 +#: pg_basebackup.c:2619 #, c-format msgid "must specify output directory or backup target" msgstr "måste ange utkatalog eller backupmål" -#: pg_basebackup.c:2508 +#: pg_basebackup.c:2625 #, c-format msgid "cannot specify both output directory and backup target" msgstr "kan inte ange både utdatakatalog och backupmål" -#: pg_basebackup.c:2538 pg_receivewal.c:802 +#: pg_basebackup.c:2655 pg_receivewal.c:802 #, c-format msgid "unrecognized compression algorithm: \"%s\"" -msgstr "okänd komprimeringsalgoritm \"%s\"" +msgstr "okänd komprimeringsalgoritm: \"%s\"" -#: pg_basebackup.c:2544 pg_receivewal.c:809 +#: pg_basebackup.c:2661 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "ogiltig komprimeringsangivelse: %s" -#: pg_basebackup.c:2560 +#: pg_basebackup.c:2677 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "komprimering på klientsidan är inte möjlig när backupmål angivits" -#: pg_basebackup.c:2571 +#: pg_basebackup.c:2688 #, c-format msgid "only tar mode backups can be compressed" msgstr "bara backupper i tar-läge kan komprimeras" -#: pg_basebackup.c:2581 +#: pg_basebackup.c:2698 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "WAL kan inte strömmas när ett backupmål angivits" -#: pg_basebackup.c:2587 +#: pg_basebackup.c:2704 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "kan inte strömma write-ahead-logg i tar-läge till stdout" -#: pg_basebackup.c:2594 +#: pg_basebackup.c:2711 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "replikerings-slot kan bara användas med WAL-strömning" -#: pg_basebackup.c:2606 +#: pg_basebackup.c:2723 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot kan inte användas tillsammans med slot-namn" #. translator: second %s is an option name -#: pg_basebackup.c:2617 pg_receivewal.c:774 +#: pg_basebackup.c:2734 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s kräver att en slot anges med --slot" -#: pg_basebackup.c:2625 pg_basebackup.c:2665 pg_basebackup.c:2676 -#: pg_basebackup.c:2684 +#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 +#: pg_basebackup.c:2801 #, c-format msgid "%s and %s are incompatible options" msgstr "%s och %s är inkompatibla flaggor" -#: pg_basebackup.c:2639 +#: pg_basebackup.c:2756 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "WAL-katalogplats kan inte anges tillsammans med backupmål" -#: pg_basebackup.c:2645 +#: pg_basebackup.c:2762 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "WAL-katalogplats kan bara anges i läget \"plain\"" -#: pg_basebackup.c:2654 +#: pg_basebackup.c:2771 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL-katalogen måste vara en absolut sökväg" -#: pg_basebackup.c:2754 +#: pg_basebackup.c:2871 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "kan inte skapa symbolisk länk \"%s\": %m" -#: pg_receivewal.c:77 +#: pg_createsubscriber.c:169 +#, c-format +msgid "failed after the end of recovery" +msgstr "misslyckades vid slutet av återställning" + +#: pg_createsubscriber.c:170 +#, c-format +msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." +msgstr "Målservern kan inte längre användas som en fysisk replika. Du måste återskapa den fysiska replikan innan det går att fortsätta." + +#: pg_createsubscriber.c:198 +#, c-format +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "publiceringen \"%s\" som skapades i databasen \"%s\" på primären har lämnats kvar" + +#: pg_createsubscriber.c:200 +#, c-format +msgid "Drop this publication before trying again." +msgstr "Släng denna publiceringen innan du försöker igen." + +#: pg_createsubscriber.c:204 +#, c-format +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "replikeringsslotten \"%s\" som skapades i databasen \"%s\" på primären har lämnats kvar" + +#: pg_createsubscriber.c:206 pg_createsubscriber.c:1260 +#, c-format +msgid "Drop this replication slot soon to avoid retention of WAL files." +msgstr "Släng denna replikeringsslot inom kort för att undvika att WAL-filer köas upp." + +#: pg_createsubscriber.c:219 #, c-format msgid "" -"%s receives PostgreSQL streaming write-ahead logs.\n" -"\n" -msgstr "" -"%s tar emot PostgreSQL-strömning-write-ahead-logg.\n" +"%s creates a new logical replica from a standby server.\n" "\n" +msgstr "%s skapar en ny logisk replikering från en standby-server.\n" -#: pg_receivewal.c:81 pg_recvlogical.c:82 +#: pg_createsubscriber.c:223 pg_receivewal.c:81 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -1143,22 +1325,639 @@ msgstr "" "\n" "Flaggor:\n" +#: pg_createsubscriber.c:224 +#, c-format +msgid " -d, --database=DBNAME database in which to create a subscription\n" +msgstr " -d, --database=DBNAME databas att skapa prenumeration i\n" + +#: pg_createsubscriber.c:225 +#, c-format +msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" +msgstr " -D, --pgdata=DATADIR plats för prenumerantens datakatalog\n" + +#: pg_createsubscriber.c:226 +#, c-format +msgid " -n, --dry-run dry run, just show what would be done\n" +msgstr " -n, --dry-run ingen updatering, visa bara planerade åtgärder\n" + +#: pg_createsubscriber.c:227 +#, c-format +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr " -p, --subscriber-port=PORT prenumerantens portnummer (standard %s)\n" + +#: pg_createsubscriber.c:228 +#, c-format +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr " -P, --publisher-server=CONNSTR publicerarens anslutningssträng\n" + +#: pg_createsubscriber.c:229 +#, c-format +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=KAT uttagskatalog (standard är aktuell katalog.)\n" + +#: pg_createsubscriber.c:230 +#, c-format +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr " -t, --recovery-timeout=SECS antal sekunder att vänta på att återställning skall avslutas\n" + +#: pg_createsubscriber.c:231 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=NAME användarnamn för prenumerantens anslutning\n" + +#: pg_createsubscriber.c:232 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose visa utförliga meddelanden\n" + +#: pg_createsubscriber.c:233 +#, c-format +msgid "" +" --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" +msgstr "" +" --config-file=FILNAMN använd angiven fil med serverkonfiguration\n" +" när målklustret körs\n" + +#: pg_createsubscriber.c:235 +#, c-format +msgid " --publication=NAME publication name\n" +msgstr " --publication=NAME publiceringsnamn\n" + +#: pg_createsubscriber.c:236 +#, c-format +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=NAME namn på replikeringsslot\n" + +#: pg_createsubscriber.c:237 +#, c-format +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=NAME namn på prenumeration\n" + +#: pg_createsubscriber.c:238 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version visa versionsinformation, avsluta sedan\n" + +#: pg_createsubscriber.c:239 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help visa denna hjälp, avsluta sedan\n" + +#: pg_createsubscriber.c:282 +#, c-format +msgid "could not parse connection string: %s" +msgstr "kunde inte parsa anslutningssträng: %s" + +#: pg_createsubscriber.c:359 +#, c-format +msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" +msgstr "programmet \"%s\" behövs av %s men hittades inte i samma katalog som \"%s\"" + +#: pg_createsubscriber.c:362 +#, c-format +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "programmet \"%s\" hittades av \"%s\" men är inte av samma version som %s" + +#: pg_createsubscriber.c:382 +#, c-format +msgid "checking if directory \"%s\" is a cluster data directory" +msgstr "undersöker om katalogen \"%s\" är en klusterkatalog" + +#: pg_createsubscriber.c:388 +#, c-format +msgid "data directory \"%s\" does not exist" +msgstr "databaskatalogen \"%s\" existerar inte" + +#: pg_createsubscriber.c:396 +#, c-format +msgid "directory \"%s\" is not a database cluster directory" +msgstr "katalogen \"%s\" innehåller inte ett databaskluster." + +#: pg_createsubscriber.c:513 +#, c-format +msgid "connection to database failed: %s" +msgstr "anslutning till databasen misslyckades: %s" + +#: pg_createsubscriber.c:526 +#, c-format +msgid "could not clear search_path: %s" +msgstr "kunde inte nollställa search_path: %s" + +#: pg_createsubscriber.c:566 +#, c-format +msgid "getting system identifier from publisher" +msgstr "hämtar systemidentifierare från publicerare" + +#: pg_createsubscriber.c:573 +#, c-format +msgid "could not get system identifier: %s" +msgstr "kunde inte hämta systemidentifierare: %s" + +#: pg_createsubscriber.c:579 +#, c-format +msgid "could not get system identifier: got %d rows, expected %d row" +msgstr "kunde inte hämta systemidentifierare: fick %d rader, förväntade %d rad" + +#: pg_createsubscriber.c:586 +#, c-format +msgid "system identifier is %llu on publisher" +msgstr "systemidentifieraren är %llu på publiceraren" + +#: pg_createsubscriber.c:607 +#, c-format +msgid "getting system identifier from subscriber" +msgstr "hämtar systemidentifierare från prenumeranten" + +#: pg_createsubscriber.c:611 pg_createsubscriber.c:641 +#, c-format +msgid "control file appears to be corrupt" +msgstr "kontrollfilen verkar vara trasig" + +#: pg_createsubscriber.c:615 pg_createsubscriber.c:656 +#, c-format +msgid "system identifier is %llu on subscriber" +msgstr "systemidentifieraren är %llu hos prenumeranten" + +#: pg_createsubscriber.c:637 +#, c-format +msgid "modifying system identifier of subscriber" +msgstr "uppdaterar systemidentifieraren för prenumeranten" + +#: pg_createsubscriber.c:659 +#, c-format +msgid "running pg_resetwal on the subscriber" +msgstr "kör pg_resetwal på prenumeranten" + +#: pg_createsubscriber.c:671 +#, c-format +msgid "subscriber successfully changed the system identifier" +msgstr "prenumeranten lyckades ändra systemidentifieraren" + +#: pg_createsubscriber.c:673 +#, c-format +msgid "could not change system identifier of subscriber: %s" +msgstr "kunde inte ändra systemidentifierare för prenumerant: %s" + +#: pg_createsubscriber.c:697 +#, c-format +msgid "could not obtain database OID: %s" +msgstr "kunde inte hämta databas-OID: %s" + +#: pg_createsubscriber.c:704 +#, c-format +msgid "could not obtain database OID: got %d rows, expected %d row" +msgstr "kunde inte hämta databas-OID: fick %d rader, förväntade %d rad" + +#: pg_createsubscriber.c:776 +#, c-format +msgid "create replication slot \"%s\" on publisher" +msgstr "skapa replikerings-slot \"%s\" på publicerare" + +#: pg_createsubscriber.c:796 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "kunde inte läsa ytterligare en WAL-post: %s" + +#: pg_createsubscriber.c:822 +#, c-format +msgid "could not obtain recovery progress: %s" +msgstr "kunde inte hämta progress för återställning: %s" + +#: pg_createsubscriber.c:854 +#, c-format +msgid "checking settings on publisher" +msgstr "kontrollerar inställningar på publicerare" + +#: pg_createsubscriber.c:864 +#, c-format +msgid "primary server cannot be in recovery" +msgstr "primära servern kan inte vara i återställningsläge" + +#: pg_createsubscriber.c:888 +#, c-format +msgid "could not obtain publisher settings: %s" +msgstr "kunde inte hämta inställningar för publicerare: %s" + +#: pg_createsubscriber.c:914 +#, c-format +msgid "publisher requires wal_level >= \"logical\"" +msgstr "publiceraren kräver wal_level >= \"logical\"" + +#: pg_createsubscriber.c:920 +#, c-format +msgid "publisher requires %d replication slots, but only %d remain" +msgstr "publicerare kräver %d replikeringssslottar men bara %d återstår" + +#: pg_createsubscriber.c:922 pg_createsubscriber.c:931 +#: pg_createsubscriber.c:1028 pg_createsubscriber.c:1037 +#: pg_createsubscriber.c:1046 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "Öka konfigurationsparametern \"%s\" till minst %d." + +#: pg_createsubscriber.c:929 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "publicerare kräver %d WAL-skickar-processer men bara %d återstår" + +#: pg_createsubscriber.c:938 +#, c-format +msgid "two_phase option will not be enabled for replication slots" +msgstr "flaggan two_phase kommer inte aktiveras för replikeringsslottar" + +#: pg_createsubscriber.c:939 +#, c-format +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "Prenumerationer kommer skapas med flaggan two_phase avaktiverad. Förberedda transaktioner kommer replikeras vid COMMIT PREPARED." + +#: pg_createsubscriber.c:971 +#, c-format +msgid "checking settings on subscriber" +msgstr "kontrollerar inställningar på prenumeranten" + +#: pg_createsubscriber.c:978 +#, c-format +msgid "target server must be a standby" +msgstr "målserver måste vara en standby" + +#: pg_createsubscriber.c:1002 +#, c-format +msgid "could not obtain subscriber settings: %s" +msgstr "kunde inte hämta inställningar för prenumerant: %s" + +#: pg_createsubscriber.c:1026 +#, c-format +msgid "subscriber requires %d replication slots, but only %d remain" +msgstr "prenumerant kräver %d replikeringsslottar men bara %d återstår" + +#: pg_createsubscriber.c:1035 +#, c-format +msgid "subscriber requires %d logical replication workers, but only %d remain" +msgstr "prenumerant kräver %d logiska replikeringsprocesser men bara %d återstår" + +#: pg_createsubscriber.c:1044 +#, c-format +msgid "subscriber requires %d worker processes, but only %d remain" +msgstr "prenumerant kräver %d arbetsprocesser men bara %d återstår" + +#: pg_createsubscriber.c:1079 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "slänger prenumeration \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1088 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "kunde inte slänga prenumeration \"%s\": %s" + +#: pg_createsubscriber.c:1123 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "kunde inte hämta redan existerande prenumerationer: %s" + +#: pg_createsubscriber.c:1258 +#, c-format +msgid "could not drop replication slot \"%s\" on primary" +msgstr "kunde inte slänga replikeringsslotten \"%s\" på primären" + +#: pg_createsubscriber.c:1292 +#, c-format +msgid "could not obtain failover replication slot information: %s" +msgstr "kunde inte hämta replikeringsslottens information för failover: %s" + +#: pg_createsubscriber.c:1294 pg_createsubscriber.c:1303 +#, c-format +msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." +msgstr "Släng replikeringsslottar för failover på prenumeranten inom kort för att undvika att köa upp WAL-filer." + +#: pg_createsubscriber.c:1302 +#, c-format +msgid "could not drop failover replication slot" +msgstr "kunde inte slänga replikeringsslot för failover" + +#: pg_createsubscriber.c:1324 +#, c-format +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "skapar replikeringsslot \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1342 +#, c-format +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "kunde inte skapa replikeringsslot \"%s\" i databasen \"%s\": %s" + +#: pg_createsubscriber.c:1372 +#, c-format +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "slänger replikeringsslot \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1388 +#, c-format +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "kunde inte slänga replikeringsslot \"%s\" i databasen \"%s\": %s" + +#: pg_createsubscriber.c:1409 +#, c-format +msgid "pg_ctl failed with exit code %d" +msgstr "pg_ctl avslutade med felkod %d" + +#: pg_createsubscriber.c:1414 +#, c-format +msgid "pg_ctl was terminated by exception 0x%X" +msgstr "pg_ctl avslutades med avbrott 0x%X" + +#: pg_createsubscriber.c:1416 +#, c-format +msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "Se C-include-fil \"ntstatus.h\" för en beskrivning av det hexdecimala värdet." + +#: pg_createsubscriber.c:1418 +#, c-format +msgid "pg_ctl was terminated by signal %d: %s" +msgstr "pg_ctl terminerades av signal %d: %s" + +#: pg_createsubscriber.c:1424 +#, c-format +msgid "pg_ctl exited with unrecognized status %d" +msgstr "pg_ctl avslutade med okänd statuskod %d" + +#: pg_createsubscriber.c:1427 +#, c-format +msgid "The failed command was: %s" +msgstr "Det misslyckade kommandot var: %s" + +#: pg_createsubscriber.c:1473 +#, c-format +msgid "server was started" +msgstr "servern startad" + +#: pg_createsubscriber.c:1488 +#, c-format +msgid "server was stopped" +msgstr "servern är stoppad" + +#: pg_createsubscriber.c:1507 +#, c-format +msgid "waiting for the target server to reach the consistent state" +msgstr "väntar på att målservern skall komma till ett konsistent läge" + +#: pg_createsubscriber.c:1530 +#, c-format +msgid "recovery timed out" +msgstr "timeout vid återställning" + +#: pg_createsubscriber.c:1543 +#, c-format +msgid "server did not end recovery" +msgstr "servern avslutade inte återställning" + +#: pg_createsubscriber.c:1545 +#, c-format +msgid "target server reached the consistent state" +msgstr "målservern har nått ett konsistent läge" + +#: pg_createsubscriber.c:1546 +#, c-format +msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." +msgstr "" +"Om pg_createsubscriber misslyckas efter denna punkt så måste du\n" +"återskapa den fysiska replikan innan du fortsätter." + +#: pg_createsubscriber.c:1573 +#, c-format +msgid "could not obtain publication information: %s" +msgstr "kunde inte hämta publiceringsinformation: %s" + +#: pg_createsubscriber.c:1587 +#, c-format +msgid "publication \"%s\" already exists" +msgstr "publicering \"%s\" finns redan" + +#: pg_createsubscriber.c:1588 +#, c-format +msgid "Consider renaming this publication before continuing." +msgstr "Överväg att byta namn på denna publicering innan fortsättning." + +#: pg_createsubscriber.c:1595 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "skapar puiblicering \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1608 +#, c-format +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "kunde inte skapa publicering \"%s\" i databasen \"%s\": %s" + +#: pg_createsubscriber.c:1637 +#, c-format +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "slänger publiceringen \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1651 +#, c-format +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "kunde inte slänga publiceringen \"%s\" i databasen \"%s\": %s" + +#: pg_createsubscriber.c:1697 +#, c-format +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "skapar prenumeration \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1718 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "kunde inte skapa prenumeration \"%s\" i databasen \"%s\": %s" + +#: pg_createsubscriber.c:1763 +#, c-format +msgid "could not obtain subscription OID: %s" +msgstr "kunde inte hämta prenumerations-OID: %s" + +#: pg_createsubscriber.c:1770 +#, c-format +msgid "could not obtain subscription OID: got %d rows, expected %d row" +msgstr "kunde inte hämta prenumerations-OID: fick %d rader, förväntade %d rad" + +#: pg_createsubscriber.c:1794 +#, c-format +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" +msgstr "sätter progress för replikering (nod-namn \"%s\", LSN %s) i databasen \"%s\"" + +#: pg_createsubscriber.c:1809 +#, c-format +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "kunde inte sätta progress för replikering till prenumeration \"%s\": %s" + +#: pg_createsubscriber.c:1840 +#, c-format +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "aktiverar prenumeration \"%s\" i databasen \"%s\"" + +#: pg_createsubscriber.c:1852 +#, c-format +msgid "could not enable subscription \"%s\": %s" +msgstr "kunde inte aktivera prenumerationen \"%s\": %s" + +#: pg_createsubscriber.c:1944 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "kan inte köras av \"root\"" + +#: pg_createsubscriber.c:1945 +#, c-format +msgid "You must run %s as the PostgreSQL superuser." +msgstr "Du måste köra %s som PostgreSQL:s superuser." + +#: pg_createsubscriber.c:1966 +#, c-format +msgid "database \"%s\" specified more than once" +msgstr "database \"%s\" angiven mer än en gång" + +#: pg_createsubscriber.c:2007 +#, c-format +msgid "publication \"%s\" specified more than once" +msgstr "publicering \"%s\" angiven mer än en gång" + +#: pg_createsubscriber.c:2019 +#, c-format +msgid "replication slot \"%s\" specified more than once" +msgstr "replikeringsslott \"%s\" angiven mer än en gång" + +#: pg_createsubscriber.c:2031 +#, c-format +msgid "subscription \"%s\" specified more than once" +msgstr "prenumeration \"%s\" angiven mer än en gång" + +#: pg_createsubscriber.c:2054 +#, c-format +msgid "no subscriber data directory specified" +msgstr "ingen datakatalog för prenumeration angiven" + +#: pg_createsubscriber.c:2065 +#, c-format +msgid "could not determine current directory" +msgstr "kunde inte bestämma aktuell katalog" + +#: pg_createsubscriber.c:2082 +#, c-format +msgid "no publisher connection string specified" +msgstr "ingen anslutningssträng angiven för publicerare" + +#: pg_createsubscriber.c:2086 +#, c-format +msgid "validating publisher connection string" +msgstr "validerar publicerares anslutningssträng" + +#: pg_createsubscriber.c:2092 +#, c-format +msgid "validating subscriber connection string" +msgstr "validerar prenumerants anslutningssträng" + +#: pg_createsubscriber.c:2097 +#, c-format +msgid "no database was specified" +msgstr "ingen databas angavs" + +#: pg_createsubscriber.c:2109 +#, c-format +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "databasnamn \"%s\" extraherades från publicistens anslutningssträng" + +#: pg_createsubscriber.c:2114 +#, c-format +msgid "no database name specified" +msgstr "inget databasnamn angavs" + +#: pg_createsubscriber.c:2124 +#, c-format +msgid "wrong number of publication names specified" +msgstr "fel antal namn på publicister angavs" + +#: pg_createsubscriber.c:2125 +#, c-format +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." +msgstr "Antalet angivna namn på publicister (%d) måste matcha antalet angivna namn på databaser (%d)." + +#: pg_createsubscriber.c:2131 +#, c-format +msgid "wrong number of subscription names specified" +msgstr "fel antal namn på prenumeranter angivna" + +#: pg_createsubscriber.c:2132 +#, c-format +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." +msgstr "Antalet angivna namn på prenumeranter (%d) måste matcha antalet angivna namn på databaser (%d)." + +#: pg_createsubscriber.c:2138 +#, c-format +msgid "wrong number of replication slot names specified" +msgstr "fel antal namn på replikeringsslottar angivet" + +#: pg_createsubscriber.c:2139 +#, c-format +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." +msgstr "Antalet angivna namn på replikeringsslottar (%d) måste matcha antalet angivna namn på databaser (%d)." + +#: pg_createsubscriber.c:2168 +#, c-format +msgid "subscriber data directory is not a copy of the source database cluster" +msgstr "prenumerantens datakatalog är inte en kopia på källdatabasens kluster" + +#: pg_createsubscriber.c:2181 +#, c-format +msgid "standby server is running" +msgstr "standby-servern kör" + +#: pg_createsubscriber.c:2182 +#, c-format +msgid "Stop the standby server and try again." +msgstr "Stoppa standby-servern och försök igen." + +#: pg_createsubscriber.c:2191 +#, c-format +msgid "starting the standby server with command-line options" +msgstr "startar standby-server med kommandoradsflaggor" + +#: pg_createsubscriber.c:2207 pg_createsubscriber.c:2242 +#, c-format +msgid "stopping the subscriber" +msgstr "stoppar prenumeranten" + +#: pg_createsubscriber.c:2221 +#, c-format +msgid "starting the subscriber" +msgstr "startar prenumeranten" + +#: pg_createsubscriber.c:2250 +#, c-format +msgid "Done!" +msgstr "Klar!" + +#: pg_receivewal.c:77 +#, c-format +msgid "" +"%s receives PostgreSQL streaming write-ahead logs.\n" +"\n" +msgstr "" +"%s tar emot PostgreSQL-strömning-write-ahead-logg.\n" +"\n" + #: pg_receivewal.c:82 #, c-format msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=KAT ta emot write-ahead-logg-filer till denna katalog\n" -#: pg_receivewal.c:83 pg_recvlogical.c:83 +#: pg_receivewal.c:83 pg_recvlogical.c:93 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN avsluta efter att ha taget emot den angivna LSN\n" -#: pg_receivewal.c:84 pg_recvlogical.c:87 +#: pg_receivewal.c:84 pg_recvlogical.c:97 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr " --if-not-exists inget fel om slot:en redan finns när vi skapar slot:en\n" -#: pg_receivewal.c:85 pg_recvlogical.c:89 +#: pg_receivewal.c:85 pg_recvlogical.c:99 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop loopa inte om anslutning tappas\n" @@ -1168,7 +1967,7 @@ msgstr " -n, --no-loop loopa inte om anslutning tappas\n" msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync vänta inte på att ändringar skall skrivas säkert till disk\n" -#: pg_receivewal.c:87 pg_recvlogical.c:94 +#: pg_receivewal.c:87 pg_recvlogical.c:104 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -1200,12 +1999,12 @@ msgstr "" "\n" "Valfria handlingar:\n" -#: pg_receivewal.c:104 pg_recvlogical.c:79 +#: pg_receivewal.c:104 pg_recvlogical.c:89 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot skapa en ny replikeringsslot (angående slot:ens namn, se --slot)\n" -#: pg_receivewal.c:105 pg_recvlogical.c:80 +#: pg_receivewal.c:105 pg_recvlogical.c:90 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot släng replikeringsslot (angående slot:ens namn, se --slot)\n" @@ -1225,7 +2024,7 @@ msgstr "stoppade logg-strömning vid %X/%X (tidslinje %u)" msgid "switched to timeline %u at %X/%X" msgstr "bytte till tidslinje %u vid %X/%X" -#: pg_receivewal.c:224 +#: pg_receivewal.c:224 pg_recvlogical.c:1053 #, c-format msgid "received interrupt signal, exiting" msgstr "mottog avbrottsignal, avslutar" @@ -1270,11 +2069,6 @@ msgstr "komprimerad segmentfil \"%s\" har inkorrekt okomprimerad storlek %d, hop msgid "could not create LZ4 decompression context: %s" msgstr "kunde inte skapa kontext för LZ4-dekomprimering: %s" -#: pg_receivewal.c:402 -#, c-format -msgid "could not read file \"%s\": %m" -msgstr "kunde inte läsa fil \"%s\": %m" - #: pg_receivewal.c:420 #, c-format msgid "could not decompress file \"%s\": %s" @@ -1300,7 +2094,7 @@ msgstr "kan inte kontrollera filen \"%s\": komprimering med %s stöds inte av de msgid "starting log streaming at %X/%X (timeline %u)" msgstr "startar logg-strömning vid %X/%X (tidslinje %u)" -#: pg_receivewal.c:693 pg_recvlogical.c:783 +#: pg_receivewal.c:693 pg_recvlogical.c:801 #, c-format msgid "could not parse end position \"%s\"" msgstr "kunde inte parsa slutposition \"%s\"" @@ -1330,28 +2124,28 @@ msgstr "komprimering med %s stöds inte än" msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "replikeringsanslutning som använder slot \"%s\" är oväntat databasspecifik" -#: pg_receivewal.c:878 pg_recvlogical.c:954 +#: pg_receivewal.c:878 pg_recvlogical.c:972 #, c-format msgid "dropping replication slot \"%s\"" msgstr "slänger replikeringsslot \"%s\"" -#: pg_receivewal.c:889 pg_recvlogical.c:964 +#: pg_receivewal.c:889 pg_recvlogical.c:982 #, c-format msgid "creating replication slot \"%s\"" msgstr "skapar replikeringsslot \"%s\"" -#: pg_receivewal.c:918 pg_recvlogical.c:988 +#: pg_receivewal.c:918 pg_recvlogical.c:1006 #, c-format msgid "disconnected" msgstr "nerkopplad" #. translator: check source for value for %d -#: pg_receivewal.c:922 pg_recvlogical.c:992 +#: pg_receivewal.c:922 pg_recvlogical.c:1010 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "nerkopplad; väntar %d sekunder för att försöka igen" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:84 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1360,7 +2154,7 @@ msgstr "" "%s styr PostgreSQL:s logiskt avkodade strömmar.\n" "\n" -#: pg_recvlogical.c:78 +#: pg_recvlogical.c:88 #, c-format msgid "" "\n" @@ -1369,17 +2163,17 @@ msgstr "" "\n" "Handling att utföra:\n" -#: pg_recvlogical.c:81 +#: pg_recvlogical.c:91 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start starta strömning i en replikeringsslot (angående slot:ens namn, se --slot)\n" -#: pg_recvlogical.c:84 +#: pg_recvlogical.c:94 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FIL ta emot logg till denna fil, - för stdout\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:95 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1388,12 +2182,12 @@ msgstr "" " -F --fsync-interval=SEK\n" " tid mellan fsync av utdatafil (standard: %d)\n" -#: pg_recvlogical.c:88 +#: pg_recvlogical.c:98 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN var i en existerande slot skall strömningen starta\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:100 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1404,143 +2198,143 @@ msgstr "" " skicka vidare flaggan NAMN med ev. värde VÄRDE till\n" " utmatnings-plugin:en\n" -#: pg_recvlogical.c:93 +#: pg_recvlogical.c:103 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN använd utmatnings-plugin:en PLUGIN (standard: %s)\n" -#: pg_recvlogical.c:96 +#: pg_recvlogical.c:106 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAMN namn på den logiska replikerings-slotten\n" -#: pg_recvlogical.c:97 +#: pg_recvlogical.c:107 #, c-format msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" msgstr " -t, --two-phase slå på avkodning av förberedda transaktioner när en slot skapas\n" -#: pg_recvlogical.c:102 +#: pg_recvlogical.c:112 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAMN databas att ansluta till\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:145 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "bekräftar skrivning fram till %X/%X, flush till %X/%X (slot %s)" -#: pg_recvlogical.c:159 receivelog.c:360 +#: pg_recvlogical.c:169 receivelog.c:360 #, c-format msgid "could not send feedback packet: %s" msgstr "kunde inte skicka feedback-paket: %s" -#: pg_recvlogical.c:227 +#: pg_recvlogical.c:239 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "startar logg-strömning vid %X/%X (slot %s)" -#: pg_recvlogical.c:269 +#: pg_recvlogical.c:281 #, c-format msgid "streaming initiated" msgstr "strömning initierad" -#: pg_recvlogical.c:333 +#: pg_recvlogical.c:346 #, c-format msgid "could not open log file \"%s\": %m" msgstr "kunde inte öppna loggfil \"%s\": %m" -#: pg_recvlogical.c:362 receivelog.c:882 +#: pg_recvlogical.c:375 receivelog.c:882 #, c-format msgid "invalid socket: %s" msgstr "ogiltigt uttag: %s" -#: pg_recvlogical.c:415 receivelog.c:910 +#: pg_recvlogical.c:428 receivelog.c:910 #, c-format msgid "%s() failed: %m" msgstr "%s() misslyckades: %m" -#: pg_recvlogical.c:422 receivelog.c:959 +#: pg_recvlogical.c:435 receivelog.c:959 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "kunde inte ta emot data från WAL-ström: %s" -#: pg_recvlogical.c:464 pg_recvlogical.c:515 receivelog.c:1003 +#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 #: receivelog.c:1066 #, c-format msgid "streaming header too small: %d" msgstr "strömningsheader för liten: %d" -#: pg_recvlogical.c:499 receivelog.c:843 +#: pg_recvlogical.c:512 receivelog.c:843 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "okänd strömningsheader: \"%c\"" -#: pg_recvlogical.c:553 pg_recvlogical.c:565 +#: pg_recvlogical.c:566 pg_recvlogical.c:578 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "kunde inte skriva %d byte till loggfil \"%s\": %m" -#: pg_recvlogical.c:619 receivelog.c:642 receivelog.c:679 +#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "oväntad terminering av replikeringsström: %s" -#: pg_recvlogical.c:778 +#: pg_recvlogical.c:796 #, c-format msgid "could not parse start position \"%s\"" msgstr "kunde inte parsa startposition \"%s\"" -#: pg_recvlogical.c:856 +#: pg_recvlogical.c:874 #, c-format msgid "no slot specified" msgstr "ingen slot angiven" -#: pg_recvlogical.c:863 +#: pg_recvlogical.c:881 #, c-format msgid "no target file specified" msgstr "ingen målfil angiven" -#: pg_recvlogical.c:870 +#: pg_recvlogical.c:888 #, c-format msgid "no database specified" msgstr "ingen databas angiven" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:895 #, c-format msgid "at least one action needs to be specified" msgstr "minst en handling måste anges" -#: pg_recvlogical.c:884 +#: pg_recvlogical.c:902 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "kan inte använda --create-slot eller --start tillsammans med --drop-slot" -#: pg_recvlogical.c:891 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "kan inte använda --create-slot eller --drop-slot tillsammans med --startpos" -#: pg_recvlogical.c:898 +#: pg_recvlogical.c:916 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos får bara anges tillsammans med --start" -#: pg_recvlogical.c:905 +#: pg_recvlogical.c:923 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase får bara anges tillsammans med --create-slot" -#: pg_recvlogical.c:938 +#: pg_recvlogical.c:956 #, c-format msgid "could not establish database-specific replication connection" msgstr "kunde inte upprätta databasspecifik replikeringsanslutning" -#: pg_recvlogical.c:1032 +#: pg_recvlogical.c:1056 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "slutposition %X/%X nådd av keepalive" -#: pg_recvlogical.c:1035 +#: pg_recvlogical.c:1061 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "slutposition %X/%X nådd av WAL-post vid %X/%X" @@ -1657,7 +2451,7 @@ msgstr "oväntad resultatmängd efter slut-på-tidslinje: fick %d rader och %d f msgid "could not parse next timeline's starting point \"%s\"" msgstr "kunde inte parsa nästa tidslinjens startpunkt \"%s\"" -#: receivelog.c:775 receivelog.c:1022 walmethods.c:1201 +#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "kunde inte fsync:a fil \"%s\": %s" @@ -1682,136 +2476,121 @@ msgstr "kunde inte skriva %d byte till WAL-fil \"%s\": %s" msgid "could not send copy-end packet: %s" msgstr "kunde inte skicka \"copy-end\"-paket: %s" -#: streamutil.c:158 +#: streamutil.c:162 msgid "Password: " msgstr "Lösenord: " -#: streamutil.c:181 +#: streamutil.c:189 #, c-format msgid "could not connect to server" msgstr "kunde inte ansluta till server" -#: streamutil.c:222 +#: streamutil.c:230 #, c-format -msgid "could not clear search_path: %s" -msgstr "kunde inte nollställa search_path: %s" +msgid "could not clear \"search_path\": %s" +msgstr "kunde inte nollställa \"search_path\": %s" -#: streamutil.c:238 +#: streamutil.c:246 #, c-format -msgid "could not determine server setting for integer_datetimes" -msgstr "kunde inte lista ut serverns inställning för integer_datetimes" +msgid "could not determine server setting for \"integer_datetimes\"" +msgstr "kunde inte lista ut serverns inställning för \"integer_datetimes\"" -#: streamutil.c:245 +#: streamutil.c:253 #, c-format -msgid "integer_datetimes compile flag does not match server" -msgstr "kompileringsflaggan integer_datetimes matchar inte servern" +msgid "\"integer_datetimes\" compile flag does not match server" +msgstr "kompileringsflaggan \"integer_datetimes\" matchar inte servern" -#: streamutil.c:296 +#: streamutil.c:372 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "kunde inte hämta WAL-segmentstorlek: fick %d rader och %d fält, förväntade %d rader och %d eller fler fält" -#: streamutil.c:306 +#: streamutil.c:382 #, c-format msgid "WAL segment size could not be parsed" msgstr "WAL-segment-storlek kunde inte parsas" -#: streamutil.c:324 +#: streamutil.c:400 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" -msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men fjärrservern rapporterade värdet %d byte" -msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men fjärrservern rapporterade värdet %d byte" +msgid "remote server reported invalid WAL segment size (%d byte)" +msgid_plural "remote server reported invalid WAL segment size (%d bytes)" +msgstr[0] "fjärrservern rapporterade ogiltig WAL-segmentstorlek (%d byte)" +msgstr[1] "fjärrservern rapporterade ogiltig WAL-segmentstorlek (%d byte)" -#: streamutil.c:369 +#: streamutil.c:404 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "Storleken på WAL-segment måste vara en tvåpotens mellan 1 MB och 1 GB." + +#: streamutil.c:446 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "kunde inte hämta gruppaccessflagga: fick %d rader och %d fält, förväntade %d rader och %d eller fler fält" -#: streamutil.c:378 +#: streamutil.c:455 #, c-format msgid "group access flag could not be parsed: %s" msgstr "gruppaccessflagga kunde inte parsas: %s" -#: streamutil.c:421 streamutil.c:458 +#: streamutil.c:498 streamutil.c:535 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "kunde inte identifiera system: fick %d rader och %d fält, förväntade %d rader och %d eller fler fält" -#: streamutil.c:510 +#: streamutil.c:587 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "kunde inte läsa replikeringsslot \"%s\": fick %d rader och %d fält, förväntade %d rader och %d fält" -#: streamutil.c:522 +#: streamutil.c:599 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "replikeringsslot \"%s\" existerar inte" -#: streamutil.c:533 +#: streamutil.c:610 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "förväntade en fysisk replikeringsslot men fick av typen \"%s\" istället" -#: streamutil.c:547 +#: streamutil.c:624 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "kunde inte parsa restart_lsn \"%s\" för replikeringsslot \"%s\"" -#: streamutil.c:664 +#: streamutil.c:741 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "kunde inte skapa replikeringsslot \"%s\": fick %d rader och %d fält, förväntade %d rader och %d fält" -#: streamutil.c:708 +#: streamutil.c:785 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "kunde inte slänga replikeringsslot \"%s\": fick %d rader och %d fält, förväntade %d rader och %d fält" -#: walmethods.c:721 walmethods.c:1264 +#: walmethods.c:726 walmethods.c:1269 msgid "could not compress data" msgstr "kunde inte komprimera data" -#: walmethods.c:750 +#: walmethods.c:755 msgid "could not reset compression stream" msgstr "kunde inte nollställa komprimeringsström" -#: walmethods.c:888 +#: walmethods.c:892 msgid "implementation error: tar files can't have more than one open file" msgstr "implementationsfel: tar-filer kan inte ha mer än en öppen fil" -#: walmethods.c:903 +#: walmethods.c:907 msgid "could not create tar header" msgstr "kunde inte skapa tar-header" -#: walmethods.c:920 walmethods.c:961 walmethods.c:1166 walmethods.c:1179 +#: walmethods.c:924 walmethods.c:965 walmethods.c:1171 walmethods.c:1184 msgid "could not change compression parameters" msgstr "kunde inte ändra komprimeringsparametrar" -#: walmethods.c:1052 +#: walmethods.c:1056 msgid "unlink not supported with compression" msgstr "unlink stöds inte med komprimering" -#: walmethods.c:1288 +#: walmethods.c:1293 msgid "could not close compression stream" msgstr "kunde inte stänga komprimeringsström" - -#, c-format -#~ msgid "could not determine seek position in file \"%s\": %s" -#~ msgstr "kunde inte fastställa sökposition i fil \"%s\": %s" - -#, c-format -#~ msgid "symlinks are not supported on this platform" -#~ msgstr "symboliska länkar stöds inte på denna plattform" - -#, c-format -#~ msgid "this build does not support gzip compression" -#~ msgstr "detta bygge stöder inte gzip-komprimering" - -#, c-format -#~ msgid "this build does not support lz4 compression" -#~ msgstr "detta bygge stöder inte lz4-komprimering" - -#, c-format -#~ msgid "this build does not support zstd compression" -#~ msgstr "detta bygge stöder inte zstd-komprimering" diff --git a/src/bin/pg_basebackup/po/uk.po b/src/bin/pg_basebackup/po/uk.po index 695c62a9fd948..09cd1a552dde9 100644 --- a/src/bin/pg_basebackup/po/uk.po +++ b/src/bin/pg_basebackup/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-12 10:48+0000\n" -"PO-Revision-Date: 2022-09-13 11:52\n" +"POT-Creation-Date: 2024-08-31 06:20+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_15_STABLE/pg_basebackup.pot\n" -"X-Crowdin-File-ID: 910\n" +"X-Crowdin-File: /REL_17_STABLE/pg_basebackup.pot\n" +"X-Crowdin-File-ID: 1006\n" #: ../../../src/common/logging.c:276 #, c-format @@ -37,84 +37,186 @@ msgstr "деталі: " msgid "hint: " msgstr "підказка: " -#: ../../common/compression.c:157 +#: ../../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 +#, c-format +msgid "this build does not support compression with %s" +msgstr "ця збірка не підтримує стиснення з %s" + +#: ../../common/compression.c:205 msgid "found empty string where a compression option was expected" msgstr "знайдено порожній рядок, де очікувався параметр стискання" -#: ../../common/compression.c:187 +#: ../../common/compression.c:244 #, c-format -msgid "unknown compression option \"%s\"" -msgstr "невідомий параметр стискання \"%s\"" +msgid "unrecognized compression option: \"%s\"" +msgstr "нерозпізнаний алгоритм стискання: \"%s\"" -#: ../../common/compression.c:226 +#: ../../common/compression.c:283 #, c-format msgid "compression option \"%s\" requires a value" msgstr "параметр стискання \"%s\" потребує значення" -#: ../../common/compression.c:235 +#: ../../common/compression.c:292 #, c-format msgid "value for compression option \"%s\" must be an integer" msgstr "значення параметру стискання \"%s\" має бути цілим числом" -#: ../../common/compression.c:273 +#: ../../common/compression.c:331 +#, c-format +msgid "value for compression option \"%s\" must be a Boolean value" +msgstr "значення параметра стискання \"%s\" має бути логічним значенням" + +#: ../../common/compression.c:379 #, c-format msgid "compression algorithm \"%s\" does not accept a compression level" msgstr "алгоритм стискання \"%s\" не приймає рівень стискання" -#: ../../common/compression.c:277 +#: ../../common/compression.c:386 #, c-format -msgid "compression algorithm \"%s\" expects a compression level between %d and %d" -msgstr "алгоритм стискання \"%s\" очікує рівень стискання між %d і %d" +msgid "compression algorithm \"%s\" expects a compression level between %d and %d (default at %d)" +msgstr "алгоритм стискання \"%s\" очікує рівень стискання між %d і %d (за замовчуванням %d)" -#: ../../common/compression.c:289 +#: ../../common/compression.c:397 #, c-format msgid "compression algorithm \"%s\" does not accept a worker count" msgstr "алгоритм стиснення \"%s\" не приймає кількість працівників" +#: ../../common/compression.c:408 +#, c-format +msgid "compression algorithm \"%s\" does not support long-distance mode" +msgstr "алгоритм стиснення \"%s\" не підтримує режим довгої відстані" + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" + +#: ../../common/controldata_utils.c:110 pg_basebackup.c:1873 +#: pg_receivewal.c:402 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "неправильний порядок байтів" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "можлива помилка у послідовності байтів.\n" +"Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:70 +#: ../../common/file_utils.c:347 ../../common/file_utils.c:406 +#: ../../common/file_utils.c:480 ../../fe_utils/recovery_gen.c:140 +#: pg_basebackup.c:1846 pg_receivewal.c:386 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 pg_recvlogical.c:204 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" -#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" -#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 -#: pg_receivewal.c:380 pg_recvlogical.c:341 +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_receivewal.c:319 pg_recvlogical.c:352 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" -#: ../../common/file_utils.c:166 pg_receivewal.c:303 +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "ця збірка не підтримує метод синхронізації \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_receivewal.c:242 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не вдалося відкрити каталог \"%s\": %m" -#: ../../common/file_utils.c:200 pg_receivewal.c:534 +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: pg_receivewal.c:471 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не вдалося прочитати каталог \"%s\": %m" -#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 -#: ../../common/file_utils.c:365 ../../fe_utils/recovery_gen.c:121 -#: pg_receivewal.c:447 +#: ../../common/file_utils.c:498 pg_basebackup.c:2344 walmethods.c:462 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "не можливо відкрити файл \"%s\": %m" +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" -#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 -#: pg_recvlogical.c:196 +#: ../../common/restricted_token.c:60 #, c-format -msgid "could not fsync file \"%s\": %m" -msgstr "не вдалося fsync файл \"%s\": %m" +msgid "could not open process token: error code %lu" +msgstr "не вдалося відкрити токен процесу: код помилки %lu" -#: ../../common/file_utils.c:383 pg_basebackup.c:2256 walmethods.c:459 +#: ../../common/restricted_token.c:74 #, c-format -msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" +msgid "could not allocate SIDs: error code %lu" +msgstr "не вдалося виділити SID: код помилки %lu" + +#: ../../common/restricted_token.c:94 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "не вдалося створити обмежений токен: код помилки %lu" + +#: ../../common/restricted_token.c:115 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "не вдалося запустити процес для команди \"%s\": код помилки %lu" + +#: ../../common/restricted_token.c:153 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "не вдалося перезапустити з обмеженим токеном: код помилки %lu" + +#: ../../common/restricted_token.c:168 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" #: ../../fe_utils/option_utils.c:69 #, c-format @@ -126,51 +228,62 @@ msgstr "неприпустиме значення \"%s\" для параметр msgid "%s must be in range %d..%d" msgstr "%s має бути в діапазоні %d..%d" -#: ../../fe_utils/recovery_gen.c:34 ../../fe_utils/recovery_gen.c:45 -#: ../../fe_utils/recovery_gen.c:70 ../../fe_utils/recovery_gen.c:90 -#: ../../fe_utils/recovery_gen.c:149 pg_basebackup.c:1635 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нерозпізнаний метод синхронізації: %s" + +#: ../../fe_utils/recovery_gen.c:39 ../../fe_utils/recovery_gen.c:50 +#: ../../fe_utils/recovery_gen.c:89 ../../fe_utils/recovery_gen.c:109 +#: ../../fe_utils/recovery_gen.c:168 pg_basebackup.c:1636 streamutil.c:331 #, c-format msgid "out of memory" msgstr "недостатньо пам'яті" -#: ../../fe_utils/recovery_gen.c:124 bbstreamer_file.c:121 -#: bbstreamer_file.c:258 pg_basebackup.c:1432 pg_basebackup.c:1726 +#: ../../fe_utils/recovery_gen.c:143 bbstreamer_file.c:121 +#: bbstreamer_file.c:258 pg_basebackup.c:1433 pg_basebackup.c:1727 #, c-format msgid "could not write to file \"%s\": %m" msgstr "неможливо записати до файлу \"%s\": %m" -#: ../../fe_utils/recovery_gen.c:133 bbstreamer_file.c:93 bbstreamer_file.c:339 -#: pg_basebackup.c:1496 pg_basebackup.c:1705 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" msgstr "неможливо створити файл \"%s\": %m" -#: bbstreamer_file.c:138 pg_recvlogical.c:635 +#: ../../fe_utils/string_utils.c:434 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "неможливо закрити файл \"%s\": %m" +msgid "shell command argument contains a newline or carriage return: \"%s\"\n" +msgstr "аргумент командної оболонки містить символ нового рядка або повернення каретки: \"%s\"\n" + +#: ../../fe_utils/string_utils.c:607 +#, c-format +msgid "database name contains a newline or carriage return: \"%s\"\n" +msgstr "назва бази даних містить символ нового рядка або повернення каретки: \"%s\"\n" #: bbstreamer_file.c:275 #, c-format msgid "unexpected state while extracting archive" msgstr "неочікуваний стан під час розпакування архіву" -#: bbstreamer_file.c:298 pg_basebackup.c:686 pg_basebackup.c:730 +#: bbstreamer_file.c:321 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:304 +#: bbstreamer_file.c:326 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не вдалося встановити права для каталогу \"%s\": %m" -#: bbstreamer_file.c:323 +#: bbstreamer_file.c:345 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "не вдалося створити символічне послання з \"%s\" на \"%s\": %m" -#: bbstreamer_file.c:343 +#: bbstreamer_file.c:365 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "не вдалося встановити права на файл \"%s\": %m" @@ -190,32 +303,27 @@ msgstr "не вдалося дублювати stdout: %m" msgid "could not open output file: %m" msgstr "не вдалося відкрити вихідний файл: %m" -#: bbstreamer_gzip.c:113 +#: bbstreamer_gzip.c:111 #, c-format msgid "could not set compression level %d: %s" msgstr "не вдалося встановити рівень стискання %d: %s" -#: bbstreamer_gzip.c:118 bbstreamer_gzip.c:251 -#, c-format -msgid "this build does not support gzip compression" -msgstr "ця збірка не підтримує стиснення gzip" - -#: bbstreamer_gzip.c:145 +#: bbstreamer_gzip.c:143 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "не вдалося записати до стиснутого файлу \"%s\": %s" -#: bbstreamer_gzip.c:169 +#: bbstreamer_gzip.c:167 #, c-format msgid "could not close compressed file \"%s\": %m" msgstr "не вдалося закрити стиснутий файл \"%s\": %m" -#: bbstreamer_gzip.c:247 walmethods.c:869 +#: bbstreamer_gzip.c:245 walmethods.c:880 #, c-format msgid "could not initialize compression library" msgstr "не вдалося ініціалізувати бібліотеку стискання" -#: bbstreamer_gzip.c:298 bbstreamer_lz4.c:355 bbstreamer_zstd.c:319 +#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 #, c-format msgid "could not decompress data: %s" msgstr "не вдалося розпакувати дані: %s" @@ -225,32 +333,27 @@ msgstr "не вдалося розпакувати дані: %s" msgid "unexpected state while injecting recovery settings" msgstr "неочікуваний стан під час введення налаштувань відновлення" -#: bbstreamer_lz4.c:96 +#: bbstreamer_lz4.c:95 #, c-format msgid "could not create lz4 compression context: %s" msgstr "не вдалося створити контекст стиснення lz4: %s" -#: bbstreamer_lz4.c:101 bbstreamer_lz4.c:299 -#, c-format -msgid "this build does not support lz4 compression" -msgstr "ця збірка не підтримує стиснення lz4" - -#: bbstreamer_lz4.c:141 +#: bbstreamer_lz4.c:140 #, c-format msgid "could not write lz4 header: %s" msgstr "не вдалося записати заголовок lz4: %s" -#: bbstreamer_lz4.c:190 bbstreamer_zstd.c:171 bbstreamer_zstd.c:213 +#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 #, c-format msgid "could not compress data: %s" msgstr "не вдалося стиснути дані: %s" -#: bbstreamer_lz4.c:242 +#: bbstreamer_lz4.c:241 #, c-format msgid "could not end lz4 compression: %s" msgstr "не вдалося закінчити стискання lz4: %s" -#: bbstreamer_lz4.c:294 +#: bbstreamer_lz4.c:293 #, c-format msgid "could not initialize compression library: %s" msgstr "не вдалося ініціалізувати бібліотеку стиснення: %s" @@ -265,12 +368,12 @@ msgstr "причіп файлу tar перевищує 2 блоки" msgid "unexpected state while parsing tar archive" msgstr "неочікуваний стан під час розбору архіву tar" -#: bbstreamer_tar.c:296 +#: bbstreamer_tar.c:292 #, c-format msgid "tar member has empty name" msgstr "частина tar містить порожню назву" -#: bbstreamer_tar.c:328 +#: bbstreamer_tar.c:326 #, c-format msgid "COPY stream ended before last file was finished" msgstr "потік COPY завершився до завершення останнього файлу" @@ -280,397 +383,415 @@ msgstr "потік COPY завершився до завершення оста msgid "could not create zstd compression context" msgstr "не вдалося створити контекст стиснення zstd" -#: bbstreamer_zstd.c:93 +#: bbstreamer_zstd.c:91 #, c-format msgid "could not set zstd compression level to %d: %s" msgstr "не вдалося встановити рівень стискання zstd на %d: %s" -#: bbstreamer_zstd.c:108 +#: bbstreamer_zstd.c:105 #, c-format msgid "could not set compression worker count to %d: %s" msgstr "не вдалося встановити кількість процесів стискання на %d: %s" -#: bbstreamer_zstd.c:119 bbstreamer_zstd.c:274 +#: bbstreamer_zstd.c:116 #, c-format -msgid "this build does not support zstd compression" -msgstr "ця збірка не підтримує стиснення zstd" +msgid "could not enable long-distance mode: %s" +msgstr "не вдалося включити режим довгої відстані: %s" -#: bbstreamer_zstd.c:265 +#: bbstreamer_zstd.c:275 #, c-format msgid "could not create zstd decompression context" msgstr "не вдалося створити контекст zstd декомпресії" -#: pg_basebackup.c:240 +#: pg_basebackup.c:245 #, c-format msgid "removing data directory \"%s\"" msgstr "видалення даних з директорії \"%s\"" -#: pg_basebackup.c:242 +#: pg_basebackup.c:247 #, c-format msgid "failed to remove data directory" msgstr "не вдалося видалити дані директорії" -#: pg_basebackup.c:246 +#: pg_basebackup.c:251 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "видалення даних з директорії \"%s\"" -#: pg_basebackup.c:248 +#: pg_basebackup.c:253 #, c-format msgid "failed to remove contents of data directory" msgstr "не вдалося видалити дані директорії" -#: pg_basebackup.c:253 +#: pg_basebackup.c:258 #, c-format msgid "removing WAL directory \"%s\"" msgstr "видалення WAL директорії \"%s\"" -#: pg_basebackup.c:255 +#: pg_basebackup.c:260 #, c-format msgid "failed to remove WAL directory" msgstr "не вдалося видалити директорію WAL" -#: pg_basebackup.c:259 +#: pg_basebackup.c:264 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "видалення даних з директорії WAL \"%s\"" -#: pg_basebackup.c:261 +#: pg_basebackup.c:266 #, c-format msgid "failed to remove contents of WAL directory" msgstr "не вдалося видалити дані директорії WAL" -#: pg_basebackup.c:267 +#: pg_basebackup.c:272 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "директорія даних \"%s\" не видалена за запитом користувача" -#: pg_basebackup.c:270 +#: pg_basebackup.c:275 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "директорія WAL \"%s\" не видалена за запитом користувача" -#: pg_basebackup.c:274 +#: pg_basebackup.c:279 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "зміни в каталогах табличних просторів незворотні" -#: pg_basebackup.c:326 +#: pg_basebackup.c:331 #, c-format msgid "directory name too long" msgstr "ім'я директорії задовге" -#: pg_basebackup.c:333 +#: pg_basebackup.c:338 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "кілька знаків \"=\" зіставленні табличних просторів" -#: pg_basebackup.c:342 +#: pg_basebackup.c:347 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "неприпустимий табличний простір зіставлення формату \"%s\", має бути \"OLDDIR = NEWDIR\"" -#: pg_basebackup.c:351 +#: pg_basebackup.c:366 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "старий каталог не є абсолютним шляхом у зіставлення табличного простору: %s" -#: pg_basebackup.c:355 +#: pg_basebackup.c:370 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "новий каталог не є абсолютним шляхом у зіставлення табличного простору: %s" -#: pg_basebackup.c:377 +#: pg_basebackup.c:392 #, c-format msgid "%s takes a base backup of a running PostgreSQL server.\n\n" msgstr "%s робить базову резервну копію працюючого сервера PostgreSQL.\n\n" -#: pg_basebackup.c:379 pg_receivewal.c:81 pg_recvlogical.c:78 +#: pg_basebackup.c:394 pg_createsubscriber.c:221 pg_receivewal.c:79 +#: pg_recvlogical.c:86 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_basebackup.c:380 pg_receivewal.c:82 pg_recvlogical.c:79 +#: pg_basebackup.c:395 pg_createsubscriber.c:222 pg_receivewal.c:80 +#: pg_recvlogical.c:87 #, c-format msgid " %s [OPTION]...\n" msgstr " %s: [OPTION]...\n" -#: pg_basebackup.c:381 +#: pg_basebackup.c:396 #, c-format msgid "\n" "Options controlling the output:\n" msgstr "\n" "Параметри, що контролюють вивід:\n" -#: pg_basebackup.c:382 +#: pg_basebackup.c:397 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, -- pgdata=DIRECTORY директорія, в яку зберегти резервну копію бази\n" -#: pg_basebackup.c:383 +#: pg_basebackup.c:398 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|т формат виводу (звичайний за замовчуванням, tar)\n" -#: pg_basebackup.c:384 +#: pg_basebackup.c:399 +#, c-format +msgid " -i, --incremental=OLDMANIFEST\n" +" take incremental backup\n" +msgstr " -i, --incremental=OLDMANIFEST\n" +" створювати інкрементні резервні копії\n" + +#: pg_basebackup.c:401 #, c-format msgid " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" " (in kB/s, or use suffix \"k\" or \"M\")\n" msgstr " -r, --max-rate=RATE максимальна швидкість передавання даних до директорії\n" " (у кБ/с або з використанням суфіксів \"k\" або \"М\")\n" -#: pg_basebackup.c:386 +#: pg_basebackup.c:403 #, c-format msgid " -R, --write-recovery-conf\n" " write configuration for replication\n" msgstr " -R, --write-recovery-conf\n" " записати конфігурацію для реплікації\n" -#: pg_basebackup.c:388 +#: pg_basebackup.c:405 #, c-format msgid " -t, --target=TARGET[:DETAIL]\n" " backup target (if other than client)\n" msgstr " -t, --target=TARGET[:DETAIL]\n" " ціль резервного копіювання (якщо не клієнт)\n" -#: pg_basebackup.c:390 +#: pg_basebackup.c:407 #, c-format msgid " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" " relocate tablespace in OLDDIR to NEWDIR\n" msgstr " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" " перенестb табличний простір з OLDDIR до NEWDIR\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:409 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr "--waldir=WALDIR розташування журналу попереднього запису\n" -#: pg_basebackup.c:393 +#: pg_basebackup.c:410 #, c-format msgid " -X, --wal-method=none|fetch|stream\n" " include required WAL files with specified method\n" msgstr " -X, --wal-method=none|fetch|stream\n" " додати необхідні WAL файли за допомогою вказаного методу\n" -#: pg_basebackup.c:395 +#: pg_basebackup.c:412 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip стиснути вихідний tar\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:413 #, c-format msgid " -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" " compress on client or server as specified\n" msgstr " -Z, --compress=[{client|server}-]METHOD[:DETAIL]\n" " стискати на клієнті або сервері, як зазначено\n" -#: pg_basebackup.c:398 +#: pg_basebackup.c:415 #, c-format msgid " -Z, --compress=none do not compress tar output\n" msgstr " -Z, --compress=none не стискати вивід tar\n" -#: pg_basebackup.c:399 +#: pg_basebackup.c:416 #, c-format msgid "\n" "General options:\n" msgstr "\n" "Основні налаштування:\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:417 #, c-format msgid " -c, --checkpoint=fast|spread\n" -" set fast or spread checkpointing\n" +" set fast or spread (default) checkpointing\n" msgstr " -c, --checkpoint=fast|spread\n" -" режим швидких або розділених контрольних точок\n" +" встановлювати швидкі або розподілені (за замовчуванням) контрольні точки\n" -#: pg_basebackup.c:402 +#: pg_basebackup.c:419 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot створити слот для реплікації\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:420 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=LABEL встановити мітку резервної копії\n" -#: pg_basebackup.c:404 +#: pg_basebackup.c:421 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean не очищати після помилок\n" -#: pg_basebackup.c:405 +#: pg_basebackup.c:422 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync не чекати завершення збереження даних на диску\n" -#: pg_basebackup.c:406 +#: pg_basebackup.c:423 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress відображати інформацію про прогрес\n" -#: pg_basebackup.c:407 pg_receivewal.c:91 +#: pg_basebackup.c:424 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=ИМ'Я_СЛОТА використовувати вказаний слот реплікації\n" -#: pg_basebackup.c:408 pg_receivewal.c:93 pg_recvlogical.c:100 +#: pg_basebackup.c:425 pg_receivewal.c:91 pg_recvlogical.c:108 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose виводити детальні повідомлення\n" -#: pg_basebackup.c:409 pg_receivewal.c:94 pg_recvlogical.c:101 +#: pg_basebackup.c:426 pg_receivewal.c:92 pg_recvlogical.c:109 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: pg_basebackup.c:410 +#: pg_basebackup.c:427 #, c-format msgid " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " use algorithm for manifest checksums\n" msgstr " --manifest-checksums=SHA{224,256,384,512}|CRC32C|НЕ\n" " використовувати алгоритм для контрольних сум маніфесту\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:429 #, c-format msgid " --manifest-force-encode\n" " hex encode all file names in manifest\n" msgstr " --manifest-force-encode\n" " кодувати у hex всі імена файлів у маніфесті\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:431 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr " --no-estimate-size не оцінювати розмір резервної копії на стороні сервера\n" -#: pg_basebackup.c:415 +#: pg_basebackup.c:432 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest пропустити створення маніфесту резервного копіювання\n" -#: pg_basebackup.c:416 +#: pg_basebackup.c:433 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot не створювати тимчасового слоту реплікації\n" -#: pg_basebackup.c:417 +#: pg_basebackup.c:434 #, c-format msgid " --no-verify-checksums\n" " do not verify checksums\n" msgstr " --no-verify-checksums\n" " не перевіряти контрольні суми\n" -#: pg_basebackup.c:419 pg_receivewal.c:97 pg_recvlogical.c:102 +#: pg_basebackup.c:436 +#, c-format +msgid " --sync-method=METHOD\n" +" set method for syncing files to disk\n" +msgstr " --sync-method=METHOD\n" +" встановити метод синхронізації файлів на диск\n" + +#: pg_basebackup.c:438 pg_receivewal.c:95 pg_recvlogical.c:110 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку потім вийти\n" -#: pg_basebackup.c:420 pg_receivewal.c:98 pg_recvlogical.c:103 +#: pg_basebackup.c:439 pg_receivewal.c:96 pg_recvlogical.c:111 #, c-format msgid "\n" "Connection options:\n" msgstr "\n" "Налаштування з'єднання:\n" -#: pg_basebackup.c:421 pg_receivewal.c:99 +#: pg_basebackup.c:440 pg_receivewal.c:97 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR рядок з'єднання\n" -#: pg_basebackup.c:422 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:441 pg_receivewal.c:98 pg_recvlogical.c:113 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME хост сервера бази даних або каталог сокетів\n" -#: pg_basebackup.c:423 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:442 pg_receivewal.c:99 pg_recvlogical.c:114 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT порт сервера бази даних\n" -#: pg_basebackup.c:424 +#: pg_basebackup.c:443 #, c-format msgid " -s, --status-interval=INTERVAL\n" " time between status packets sent to server (in seconds)\n" msgstr " -s, --status-interval=INTERVAL часу між пакетами статусу до сервера (у секундах)\n" -#: pg_basebackup.c:426 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:445 pg_receivewal.c:100 pg_recvlogical.c:115 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME підключатись як вказаний користувач бази даних\n" -#: pg_basebackup.c:427 pg_receivewal.c:103 pg_recvlogical.c:108 +#: pg_basebackup.c:446 pg_receivewal.c:101 pg_recvlogical.c:116 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ніколи не питати пароль\n" -#: pg_basebackup.c:428 pg_receivewal.c:104 pg_recvlogical.c:109 +#: pg_basebackup.c:447 pg_receivewal.c:102 pg_recvlogical.c:117 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password обов'язково питати пароль (повинно відбуватися автоматично)\n" -#: pg_basebackup.c:429 pg_receivewal.c:108 pg_recvlogical.c:110 +#: pg_basebackup.c:448 pg_createsubscriber.c:240 pg_receivewal.c:106 +#: pg_recvlogical.c:118 #, c-format msgid "\n" "Report bugs to <%s>.\n" msgstr "\n" "Повідомляти про помилки на <%s>.\n" -#: pg_basebackup.c:430 pg_receivewal.c:109 pg_recvlogical.c:111 +#: pg_basebackup.c:449 pg_createsubscriber.c:241 pg_receivewal.c:107 +#: pg_recvlogical.c:119 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: pg_basebackup.c:472 +#: pg_basebackup.c:488 #, c-format msgid "could not read from ready pipe: %m" msgstr "не можливо прочитати з готових каналів: %m" -#: pg_basebackup.c:475 pg_basebackup.c:622 pg_basebackup.c:2170 -#: streamutil.c:444 +#: pg_basebackup.c:491 pg_basebackup.c:633 pg_basebackup.c:2258 +#: streamutil.c:518 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "не вдалося проаналізувати наперед журнал локації \"%s\"" -#: pg_basebackup.c:581 pg_receivewal.c:665 +#: pg_basebackup.c:596 pg_receivewal.c:600 #, c-format msgid "could not finish writing WAL files: %m" msgstr "не можливо закінчити написання файлів WAL: %m" -#: pg_basebackup.c:631 +#: pg_basebackup.c:642 #, c-format msgid "could not create pipe for background process: %m" msgstr "не можливо створити канал для фонового процесу: %m" -#: pg_basebackup.c:664 +#: pg_basebackup.c:676 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "створено слот тимчасових реплікацій \"%s\"" -#: pg_basebackup.c:667 +#: pg_basebackup.c:679 #, c-format msgid "created replication slot \"%s\"" msgstr "створено слот реплікацій \"%s\"" -#: pg_basebackup.c:701 +#: pg_basebackup.c:728 #, c-format msgid "could not create background process: %m" msgstr "не можливо створити фоновий процес: %m" -#: pg_basebackup.c:710 +#: pg_basebackup.c:737 #, c-format msgid "could not create background thread: %m" msgstr "не можливо створити фоновий потік: %m" -#: pg_basebackup.c:749 +#: pg_basebackup.c:776 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" існує, але він не порожній" -#: pg_basebackup.c:755 +#: pg_basebackup.c:782 pg_createsubscriber.c:390 #, c-format msgid "could not access directory \"%s\": %m" msgstr "немає доступу до каталогу \"%s\": %m" -#: pg_basebackup.c:832 +#: pg_basebackup.c:858 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" @@ -679,7 +800,7 @@ msgstr[1] "%*s/%s kB (100%%), %d/%d табличних простори %*s" msgstr[2] "%*s/%s kB (100%%), %d/%d табличних просторів %*s" msgstr[3] "%*s/%s kB (100%%), %d/%d табличних просторів %*s" -#: pg_basebackup.c:844 +#: pg_basebackup.c:870 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" @@ -688,7 +809,7 @@ msgstr[1] "%*s/%s kB (%d%%), %d/%d табличних простори (%s%-*.*s msgstr[2] "%*s/%s kB (%d%%), %d/%d табличних просторів (%s%-*.*s)" msgstr[3] "%*s/%s kB (%d%%), %d/%d табличних просторів (%s%-*.*s)" -#: pg_basebackup.c:860 +#: pg_basebackup.c:886 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" @@ -697,661 +818,1313 @@ msgstr[1] "%*s/%s kB (%d%%), %d/%d табличних простори" msgstr[2] "%*s/%s kB (%d%%), %d/%d табличних просторів" msgstr[3] "%*s/%s kB (%d%%), %d/%d табличних просторів" -#: pg_basebackup.c:884 +#: pg_basebackup.c:910 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "частота передач \"%s\" не є припустимим значенням" -#: pg_basebackup.c:886 +#: pg_basebackup.c:912 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "неприпустима частота передач \"%s\": %m" -#: pg_basebackup.c:893 +#: pg_basebackup.c:919 #, c-format msgid "transfer rate must be greater than zero" msgstr "частота передач повинна бути більша за нуль" -#: pg_basebackup.c:923 +#: pg_basebackup.c:949 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "неприпустима одиниця виміру в --max-rate: \"%s\"" -#: pg_basebackup.c:927 +#: pg_basebackup.c:953 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "швидкість передачі \"%s\" перевищує діапазон цілого числа" -#: pg_basebackup.c:934 +#: pg_basebackup.c:960 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "швидкість передавання \"%s\" поза діапазоном" -#: pg_basebackup.c:1030 +#: pg_basebackup.c:1022 #, c-format msgid "could not get COPY data stream: %s" msgstr "не вдалося отримати потік даних COPY: %s" -#: pg_basebackup.c:1047 pg_recvlogical.c:438 pg_recvlogical.c:610 -#: receivelog.c:981 +#: pg_basebackup.c:1039 pg_recvlogical.c:449 pg_recvlogical.c:625 +#: receivelog.c:973 #, c-format msgid "could not read COPY data: %s" msgstr "не вдалося прочитати дані COPY: %s" -#: pg_basebackup.c:1051 +#: pg_basebackup.c:1043 #, c-format msgid "background process terminated unexpectedly" msgstr "фоновий процес несподівано перервано" -#: pg_basebackup.c:1122 +#: pg_basebackup.c:1114 #, c-format -msgid "cannot inject manifest into a compressed tarfile" +msgid "cannot inject manifest into a compressed tar file" msgstr "неможливо підставити маніфест в стиснений tar-файл" -#: pg_basebackup.c:1123 +#: pg_basebackup.c:1115 #, c-format -msgid "use client-side compression, send the output to a directory rather than standard output, or use --no-manifest" -msgstr "використйте стиснення на клієнті та відправлення даних в каталог замість стандартного виводу, або використайте параметр --no-manifest" +msgid "Use client-side compression, send the output to a directory rather than standard output, or use %s." +msgstr "Використайте стиснення на клієнті та відправлення даних в каталог замість стандартного виводу, або використайте %s." -#: pg_basebackup.c:1138 +#: pg_basebackup.c:1131 #, c-format -msgid "unable to parse archive: %s" -msgstr "не вдалося розібрати архів: %s" +msgid "cannot parse archive \"%s\"" +msgstr "неможливо розібрати архів \"%s\"" -#: pg_basebackup.c:1139 +#: pg_basebackup.c:1132 #, c-format msgid "Only tar archives can be parsed." msgstr "Тільки архів tar може бути проаналізований." -#: pg_basebackup.c:1141 +#: pg_basebackup.c:1134 #, c-format msgid "Plain format requires pg_basebackup to parse the archive." msgstr "Простий формат потребує обробки архіву в pg_basebackup для обробки." -#: pg_basebackup.c:1143 +#: pg_basebackup.c:1136 #, c-format msgid "Using - as the output directory requires pg_basebackup to parse the archive." msgstr "Використання - в якості вихідного каталогу потребує pg_basebackup для аналізу архіву." -#: pg_basebackup.c:1145 +#: pg_basebackup.c:1138 #, c-format msgid "The -R option requires pg_basebackup to parse the archive." msgstr "Параметр -R потребує використання pg_basebackup для аналізу архіву." -#: pg_basebackup.c:1356 +#: pg_basebackup.c:1357 #, c-format -msgid "archives should precede manifest" +msgid "archives must precede manifest" msgstr "архіви повинні передувати маніфесту" -#: pg_basebackup.c:1371 +#: pg_basebackup.c:1372 #, c-format msgid "invalid archive name: \"%s\"" msgstr "неприпустиме ім'я архіву: \"%s\"" -#: pg_basebackup.c:1443 +#: pg_basebackup.c:1444 #, c-format msgid "unexpected payload data" msgstr "неочікувані дані корисного навантаження" -#: pg_basebackup.c:1586 +#: pg_basebackup.c:1587 #, c-format msgid "empty COPY message" msgstr "порожнє повідомлення COPY" -#: pg_basebackup.c:1588 +#: pg_basebackup.c:1589 #, c-format msgid "malformed COPY message of type %d, length %zu" msgstr "неправильне повідомлення COPY з типом %d, довжина %zu" -#: pg_basebackup.c:1786 +#: pg_basebackup.c:1789 #, c-format msgid "incompatible server version %s" msgstr "несумісна версія серверу %s" -#: pg_basebackup.c:1802 +#: pg_basebackup.c:1805 +#, c-format +msgid "Use -X none or -X fetch to disable log streaming." +msgstr "Використайте -X none або -X fetch, щоб вимкнути потокову передачу журналу." + +#: pg_basebackup.c:1841 +#, c-format +msgid "server does not support incremental backup" +msgstr "сервер не підтримує інкрементне резервне копіювання" + +#: pg_basebackup.c:1850 pg_basebackup.c:2008 pg_recvlogical.c:272 +#: receivelog.c:543 receivelog.c:582 streamutil.c:364 streamutil.c:438 +#: streamutil.c:490 streamutil.c:578 streamutil.c:730 streamutil.c:775 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "не вдалося відправити реплікаційну команду \"%s\": %s" + +#: pg_basebackup.c:1856 pg_basebackup.c:1883 +#, c-format +msgid "could not upload manifest: %s" +msgstr "не вдалося завантажити маніфест: %s" + +#: pg_basebackup.c:1859 pg_basebackup.c:1886 #, c-format -msgid "HINT: use -X none or -X fetch to disable log streaming" -msgstr "ПІДКАЗКА: використайте -X none або -X fetch, щоб вимкнути потокову передачу журналу" +msgid "could not upload manifest: unexpected status %s" +msgstr "не вдалося завантажити маніфест: неочікуваний статус %s" -#: pg_basebackup.c:1870 +#: pg_basebackup.c:1867 +#, c-format +msgid "could not send COPY data: %s" +msgstr "не вдалося надіслати дані COPY: %s" + +#: pg_basebackup.c:1877 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "не вдалося надіслати сповіщення про закінчення копіювання: %s" + +#: pg_basebackup.c:1892 +#, c-format +msgid "unexpected extra result while sending manifest" +msgstr "несподіваний додатковий результат під час надсилання маніфесту" + +#: pg_basebackup.c:1950 #, c-format msgid "backup targets are not supported by this server version" msgstr "цілі резервного копіювання не підтримуються цією версією сервера" -#: pg_basebackup.c:1873 +#: pg_basebackup.c:1953 #, c-format msgid "recovery configuration cannot be written when a backup target is used" msgstr "конфігурація відновлення не може бути записана під час використання цілі резервного копіювання" -#: pg_basebackup.c:1900 +#: pg_basebackup.c:1980 #, c-format msgid "server does not support server-side compression" msgstr "сервер не підтримує стиснення на сервері" -#: pg_basebackup.c:1910 +#: pg_basebackup.c:1990 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "початок базового резервного копіювання, очікується завершення контрольної точки" -#: pg_basebackup.c:1927 pg_recvlogical.c:262 receivelog.c:549 receivelog.c:588 -#: streamutil.c:291 streamutil.c:364 streamutil.c:416 streamutil.c:504 -#: streamutil.c:656 streamutil.c:701 +#: pg_basebackup.c:1994 #, c-format -msgid "could not send replication command \"%s\": %s" -msgstr "не вдалося відправити реплікаційну команду \"%s\": %s" +msgid "waiting for checkpoint" +msgstr "очікування контрольної точки" -#: pg_basebackup.c:1935 +#: pg_basebackup.c:2016 #, c-format msgid "could not initiate base backup: %s" msgstr "не вдалося почати базове резервне копіювання: %s" -#: pg_basebackup.c:1938 +#: pg_basebackup.c:2019 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "сервер повернув неочікувану відповідь на команду BASE_BACKUP; отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" -#: pg_basebackup.c:1944 +#: pg_basebackup.c:2025 #, c-format msgid "checkpoint completed" msgstr "контрольна точка завершена" -#: pg_basebackup.c:1959 +#: pg_basebackup.c:2039 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "стартова точка у випереджувальному журналюванні: %s на часовій шкалі %u" -#: pg_basebackup.c:1967 +#: pg_basebackup.c:2047 #, c-format msgid "could not get backup header: %s" msgstr "не вдалося отримати заголовок резервної копії: %s" -#: pg_basebackup.c:1970 +#: pg_basebackup.c:2050 #, c-format msgid "no data returned from server" msgstr "сервер не повернув дані" -#: pg_basebackup.c:2005 +#: pg_basebackup.c:2093 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "можна записати лише один табличний простір в stdout, всього їх в базі даних %d" -#: pg_basebackup.c:2018 +#: pg_basebackup.c:2106 #, c-format msgid "starting background WAL receiver" msgstr "запуск фонового процесу зчитування WAL" -#: pg_basebackup.c:2101 +#: pg_basebackup.c:2189 #, c-format msgid "backup failed: %s" msgstr "помилка резервного копіювання: %s" -#: pg_basebackup.c:2104 +#: pg_basebackup.c:2192 #, c-format msgid "no write-ahead log end position returned from server" msgstr "сервер не повернув кінцеву позицію у випереджувальному журналюванні" -#: pg_basebackup.c:2107 +#: pg_basebackup.c:2195 #, c-format msgid "write-ahead log end point: %s" msgstr "кінцева точка у випереджувальному журналюванні: %s" -#: pg_basebackup.c:2118 +#: pg_basebackup.c:2206 #, c-format msgid "checksum error occurred" msgstr "сталася помилка контрольної суми" -#: pg_basebackup.c:2123 +#: pg_basebackup.c:2211 #, c-format msgid "final receive failed: %s" msgstr "помилка в кінці передачі: %s" -#: pg_basebackup.c:2147 +#: pg_basebackup.c:2235 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "очікування завершення потокового передавання фоновим процесом ..." -#: pg_basebackup.c:2151 +#: pg_basebackup.c:2239 #, c-format msgid "could not send command to background pipe: %m" msgstr "не вдалося надіслати команду до канала фонового процесу: %m" -#: pg_basebackup.c:2156 +#: pg_basebackup.c:2244 #, c-format msgid "could not wait for child process: %m" msgstr "збій при очікуванні дочірнього процесу: %m" -#: pg_basebackup.c:2158 +#: pg_basebackup.c:2246 #, c-format msgid "child %d died, expected %d" msgstr "завершився дочірній процес %d, очікувалося %d" -#: pg_basebackup.c:2160 streamutil.c:91 streamutil.c:197 +#: pg_basebackup.c:2248 streamutil.c:89 streamutil.c:204 streamutil.c:316 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2180 +#: pg_basebackup.c:2268 #, c-format msgid "could not wait for child thread: %m" msgstr "неможливо дочекатися дочірнього потоку: %m" -#: pg_basebackup.c:2185 +#: pg_basebackup.c:2273 #, c-format msgid "could not get child thread exit status: %m" msgstr "не можливо отримати статус завершення дочірнього потоку: %m" -#: pg_basebackup.c:2188 +#: pg_basebackup.c:2276 #, c-format msgid "child thread exited with error %u" msgstr "дочірній потік завершився з помилкою %u" -#: pg_basebackup.c:2217 +#: pg_basebackup.c:2305 #, c-format msgid "syncing data to disk ..." msgstr "синхронізація даних з диском ..." -#: pg_basebackup.c:2242 +#: pg_basebackup.c:2330 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "перейменування backup_manifest.tmp в backup_manifest" -#: pg_basebackup.c:2262 +#: pg_basebackup.c:2350 #, c-format msgid "base backup completed" msgstr "базове резервне копіювання завершено" -#: pg_basebackup.c:2351 +#: pg_basebackup.c:2436 +#, c-format +msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" +msgstr "неприпустимий аргумент контрольної точки \"%s\", повинен бути \"fast\" або \"spread\"" + +#: pg_basebackup.c:2454 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "неприпустимий формат виводу \"%s\", повинен бути \"plain\" або \"tar\"" -#: pg_basebackup.c:2395 +#: pg_basebackup.c:2535 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "неприпустимий параметр wal-method \"%s\", повинен бути \"fetch\", \"stream\" або \"none\"" -#: pg_basebackup.c:2425 -#, c-format -msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" -msgstr "неприпустимий аргумент контрольної точки \"%s\", повинен бути \"fast\" або \"spread\"" - -#: pg_basebackup.c:2476 pg_basebackup.c:2488 pg_basebackup.c:2510 -#: pg_basebackup.c:2522 pg_basebackup.c:2528 pg_basebackup.c:2580 -#: pg_basebackup.c:2591 pg_basebackup.c:2601 pg_basebackup.c:2607 -#: pg_basebackup.c:2614 pg_basebackup.c:2626 pg_basebackup.c:2638 -#: pg_basebackup.c:2646 pg_basebackup.c:2659 pg_basebackup.c:2665 -#: pg_basebackup.c:2674 pg_basebackup.c:2686 pg_basebackup.c:2697 -#: pg_basebackup.c:2705 pg_receivewal.c:816 pg_receivewal.c:828 -#: pg_receivewal.c:835 pg_receivewal.c:844 pg_receivewal.c:851 -#: pg_receivewal.c:861 pg_recvlogical.c:837 pg_recvlogical.c:849 -#: pg_recvlogical.c:859 pg_recvlogical.c:866 pg_recvlogical.c:873 -#: pg_recvlogical.c:880 pg_recvlogical.c:887 pg_recvlogical.c:894 -#: pg_recvlogical.c:901 pg_recvlogical.c:908 +#: pg_basebackup.c:2574 pg_basebackup.c:2586 pg_basebackup.c:2608 +#: pg_basebackup.c:2620 pg_basebackup.c:2626 pg_basebackup.c:2678 +#: pg_basebackup.c:2689 pg_basebackup.c:2699 pg_basebackup.c:2705 +#: pg_basebackup.c:2712 pg_basebackup.c:2724 pg_basebackup.c:2736 +#: pg_basebackup.c:2744 pg_basebackup.c:2757 pg_basebackup.c:2763 +#: pg_basebackup.c:2772 pg_basebackup.c:2784 pg_basebackup.c:2795 +#: pg_basebackup.c:2803 pg_createsubscriber.c:2037 pg_createsubscriber.c:2047 +#: pg_createsubscriber.c:2055 pg_createsubscriber.c:2083 +#: pg_createsubscriber.c:2115 pg_receivewal.c:748 pg_receivewal.c:760 +#: pg_receivewal.c:767 pg_receivewal.c:776 pg_receivewal.c:783 +#: pg_receivewal.c:793 pg_recvlogical.c:853 pg_recvlogical.c:865 +#: pg_recvlogical.c:875 pg_recvlogical.c:882 pg_recvlogical.c:889 +#: pg_recvlogical.c:896 pg_recvlogical.c:903 pg_recvlogical.c:910 +#: pg_recvlogical.c:917 pg_recvlogical.c:924 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: pg_basebackup.c:2486 pg_receivewal.c:826 pg_recvlogical.c:847 +#: pg_basebackup.c:2584 pg_createsubscriber.c:2045 pg_receivewal.c:758 +#: pg_recvlogical.c:863 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: pg_basebackup.c:2509 +#: pg_basebackup.c:2607 #, c-format msgid "cannot specify both format and backup target" msgstr "неможливо одночасно вказати формат і ціль резервного копіювання" -#: pg_basebackup.c:2521 +#: pg_basebackup.c:2619 #, c-format msgid "must specify output directory or backup target" msgstr "потрібно вказати вихідний каталог або ціль резервного копіювання" -#: pg_basebackup.c:2527 +#: pg_basebackup.c:2625 #, c-format msgid "cannot specify both output directory and backup target" msgstr "неможливо одночасно вказати вихідну директорію і ціль резервного копіювання" -#: pg_basebackup.c:2557 pg_receivewal.c:870 +#: pg_basebackup.c:2655 pg_receivewal.c:802 #, c-format -msgid "unrecognized compression algorithm \"%s\"" -msgstr "нерозпізнаний алгоритм стискання \"%s\"" +msgid "unrecognized compression algorithm: \"%s\"" +msgstr "нерозпізнаний алгоритм стискання: \"%s\"" -#: pg_basebackup.c:2563 pg_receivewal.c:877 +#: pg_basebackup.c:2661 pg_receivewal.c:809 #, c-format msgid "invalid compression specification: %s" msgstr "неприпустима специфікація стискання: %s" -#: pg_basebackup.c:2579 +#: pg_basebackup.c:2677 #, c-format msgid "client-side compression is not possible when a backup target is specified" msgstr "стиснення на стороні клієнта неможливе, коли вказана ціль резервного копіювання" -#: pg_basebackup.c:2590 +#: pg_basebackup.c:2688 #, c-format msgid "only tar mode backups can be compressed" msgstr "лише резервні копії в архіві tar можуть стискатись" -#: pg_basebackup.c:2600 +#: pg_basebackup.c:2698 #, c-format msgid "WAL cannot be streamed when a backup target is specified" msgstr "неможливо передавати WAL, коли вказана ціль резервного копіювання" -#: pg_basebackup.c:2606 +#: pg_basebackup.c:2704 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "транслювати випереджувальні журналювання в режимі tar в потік stdout не можна" -#: pg_basebackup.c:2613 +#: pg_basebackup.c:2711 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "слоти реплікації можуть використовуватись тільки з потоковим передаванням WAL" -#: pg_basebackup.c:2625 +#: pg_basebackup.c:2723 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot не можна використовувати з іменем слота" #. translator: second %s is an option name -#: pg_basebackup.c:2636 pg_receivewal.c:842 +#: pg_basebackup.c:2734 pg_receivewal.c:774 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "для %s потрібно вказати слот за допомогою --slot" -#: pg_basebackup.c:2644 pg_basebackup.c:2684 pg_basebackup.c:2695 -#: pg_basebackup.c:2703 +#: pg_basebackup.c:2742 pg_basebackup.c:2782 pg_basebackup.c:2793 +#: pg_basebackup.c:2801 #, c-format msgid "%s and %s are incompatible options" msgstr "параметри %s і %s несумісні" -#: pg_basebackup.c:2658 +#: pg_basebackup.c:2756 #, c-format msgid "WAL directory location cannot be specified along with a backup target" msgstr "Не можна вказати розташування директорії WAL разом з ціллю резервного копіювання" -#: pg_basebackup.c:2664 +#: pg_basebackup.c:2762 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "розташування каталога WAL можна вказати лише в режимі plain" -#: pg_basebackup.c:2673 +#: pg_basebackup.c:2771 #, c-format msgid "WAL directory location must be an absolute path" msgstr "розташування WAL каталогу має бути абсолютним шляхом" -#: pg_basebackup.c:2774 +#: pg_basebackup.c:2871 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не вдалося створити символічне послання \"%s\": %m" -#: pg_basebackup.c:2776 +#: pg_createsubscriber.c:169 #, c-format -msgid "symlinks are not supported on this platform" -msgstr "символічні посилання не підтримуються цією платформою" +msgid "failed after the end of recovery" +msgstr "помилка після закінчення відновлення" -#: pg_receivewal.c:79 +#: pg_createsubscriber.c:170 #, c-format -msgid "%s receives PostgreSQL streaming write-ahead logs.\n\n" -msgstr "%s отримує передачу випереджувальних журналів PostgreSQL.\n\n" +msgid "The target server cannot be used as a physical replica anymore. You must recreate the physical replica before continuing." +msgstr "Цільовий сервер не можна більше використовувати як фізичну репліку. Перед продовженням вам слід відтворити фізичну репліку." + +#: pg_createsubscriber.c:198 +#, c-format +msgid "publication \"%s\" created in database \"%s\" on primary was left behind" +msgstr "публікація \"%s\" створена в базі даних \"%s\" на основному кластері залишилася позаду" -#: pg_receivewal.c:83 pg_recvlogical.c:84 +#: pg_createsubscriber.c:200 +#, c-format +msgid "Drop this publication before trying again." +msgstr "Видаліть цю публікацію перед тим, як спробувати знову." + +#: pg_createsubscriber.c:204 +#, c-format +msgid "replication slot \"%s\" created in database \"%s\" on primary was left behind" +msgstr "слот реплікації \"%s\" створений в базі даних \"%s\" на основному кластері залишився позаду" + +#: pg_createsubscriber.c:206 pg_createsubscriber.c:1260 +#, c-format +msgid "Drop this replication slot soon to avoid retention of WAL files." +msgstr "Видаліть цей слот реплікації найближчим часом, щоб уникнути збереження файлів WAL." + +#: pg_createsubscriber.c:219 +#, c-format +msgid "%s creates a new logical replica from a standby server.\n\n" +msgstr "%s створює нову логічну репліку з резервного сервера.\n\n" + +#: pg_createsubscriber.c:223 pg_receivewal.c:81 pg_recvlogical.c:92 #, c-format msgid "\n" "Options:\n" msgstr "\n" "Параметри:\n" -#: pg_receivewal.c:84 +#: pg_createsubscriber.c:224 +#, c-format +msgid " -d, --database=DBNAME database in which to create a subscription\n" +msgstr " -d, --database=DBNAME база даних для створення підписки\n" + +#: pg_createsubscriber.c:225 +#, c-format +msgid " -D, --pgdata=DATADIR location for the subscriber data directory\n" +msgstr " -D, --pgdata=DATADIR розташування каталогу даних підписника\n" + +#: pg_createsubscriber.c:226 +#, c-format +msgid " -n, --dry-run dry run, just show what would be done\n" +msgstr " -n, --dry-run сухий запуск, просто показати, що буде зроблено\n" + +#: pg_createsubscriber.c:227 +#, c-format +msgid " -p, --subscriber-port=PORT subscriber port number (default %s)\n" +msgstr " -p, --subscriber-port=PORT номер порту підписника (за замовчуванням %s)\n" + +#: pg_createsubscriber.c:228 +#, c-format +msgid " -P, --publisher-server=CONNSTR publisher connection string\n" +msgstr " -P, --publisher-server=CONNSTR рядок підключення видавця\n" + +#: pg_createsubscriber.c:229 +#, c-format +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=DIR директорія сокету для використання (за замовчування поточна директорія)\n" + +#: pg_createsubscriber.c:230 +#, c-format +msgid " -t, --recovery-timeout=SECS seconds to wait for recovery to end\n" +msgstr " -t, --recovery-timeout=SECS секунд для очікування кінця відновлення\n" + +#: pg_createsubscriber.c:231 +#, c-format +msgid " -U, --subscriber-username=NAME user name for subscriber connection\n" +msgstr " -U, --subscriber-username=NAME користувач для під'єднання підписника\n" + +#: pg_createsubscriber.c:232 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose виводити детальні повідомлення\n" + +#: pg_createsubscriber.c:233 +#, c-format +msgid " --config-file=FILENAME use specified main server configuration\n" +" file when running target cluster\n" +msgstr " --config-file=FILENAME використовувати заданий основний файл конфігурації сервера\n" +" при запуску цільового кластера\n" + +#: pg_createsubscriber.c:235 +#, c-format +msgid " --publication=NAME publication name\n" +msgstr " --publication=NAME назва публікації\n" + +#: pg_createsubscriber.c:236 +#, c-format +msgid " --replication-slot=NAME replication slot name\n" +msgstr " --replication-slot=NAME назва слота реплікації\n" + +#: pg_createsubscriber.c:237 +#, c-format +msgid " --subscription=NAME subscription name\n" +msgstr " --subscription=NAME назва підписки\n" + +#: pg_createsubscriber.c:238 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_createsubscriber.c:239 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю справку, потім вийти\n" + +#: pg_createsubscriber.c:282 +#, c-format +msgid "could not parse connection string: %s" +msgstr "не вдалося аналізувати рядок підключення: %s" + +#: pg_createsubscriber.c:359 +#, c-format +msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"" +msgstr "програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\"" + +#: pg_createsubscriber.c:362 +#, c-format +msgid "program \"%s\" was found by \"%s\" but was not the same version as %s" +msgstr "програма \"%s\" знайдена для \"%s\", але має відмінну версію від %s" + +#: pg_createsubscriber.c:382 +#, c-format +msgid "checking if directory \"%s\" is a cluster data directory" +msgstr "перевірка чи каталог \"%s\" є каталогом даних кластера" + +#: pg_createsubscriber.c:388 +#, c-format +msgid "data directory \"%s\" does not exist" +msgstr "каталог даних \"%s\" не існує" + +#: pg_createsubscriber.c:396 +#, c-format +msgid "directory \"%s\" is not a database cluster directory" +msgstr "каталог \"%s\" не є каталогом кластера бази даних" + +#: pg_createsubscriber.c:513 +#, c-format +msgid "connection to database failed: %s" +msgstr "помилка підключення до бази даних: %s" + +#: pg_createsubscriber.c:526 +#, c-format +msgid "could not clear search_path: %s" +msgstr "не вдалося очистити search_path: %s" + +#: pg_createsubscriber.c:566 +#, c-format +msgid "getting system identifier from publisher" +msgstr "отримання системного ідентифікатора з публікації" + +#: pg_createsubscriber.c:573 +#, c-format +msgid "could not get system identifier: %s" +msgstr "не вдалося отримати системний ідентифікатор: %s" + +#: pg_createsubscriber.c:579 +#, c-format +msgid "could not get system identifier: got %d rows, expected %d row" +msgstr "не вдалося отримати системний ідентифікатор: отримано рядки %d, очікувалось %d рядок" + +#: pg_createsubscriber.c:586 +#, c-format +msgid "system identifier is %llu on publisher" +msgstr "системний ідентифікатор %llu на сервері публікації" + +#: pg_createsubscriber.c:607 +#, c-format +msgid "getting system identifier from subscriber" +msgstr "отримання системного ідентифікатора від підписника" + +#: pg_createsubscriber.c:611 pg_createsubscriber.c:641 +#, c-format +msgid "control file appears to be corrupt" +msgstr "контрольний файл здається пошкодженим" + +#: pg_createsubscriber.c:615 pg_createsubscriber.c:656 +#, c-format +msgid "system identifier is %llu on subscriber" +msgstr "системний ідентифікатор %llu на підписнику" + +#: pg_createsubscriber.c:637 +#, c-format +msgid "modifying system identifier of subscriber" +msgstr "змінюю системний ідентифікатор підписника" + +#: pg_createsubscriber.c:659 +#, c-format +msgid "running pg_resetwal on the subscriber" +msgstr "запускаю pg_resetwal на підписнику" + +#: pg_createsubscriber.c:671 +#, c-format +msgid "subscriber successfully changed the system identifier" +msgstr "підписник успішно змінив системний ідентифікатор" + +#: pg_createsubscriber.c:673 +#, c-format +msgid "could not change system identifier of subscriber: %s" +msgstr "не вдалося змінити системний ідентифікатор підписника: %s" + +#: pg_createsubscriber.c:697 +#, c-format +msgid "could not obtain database OID: %s" +msgstr "не вдалося отримати OID бази даних: %s" + +#: pg_createsubscriber.c:704 +#, c-format +msgid "could not obtain database OID: got %d rows, expected %d row" +msgstr "не вдалося отримати OID бази даних: отримано %d рядків, очікувалось %d рядок" + +#: pg_createsubscriber.c:776 +#, c-format +msgid "create replication slot \"%s\" on publisher" +msgstr "створіть слот реплікації \"%s\" на сервері публікації" + +#: pg_createsubscriber.c:796 +#, c-format +msgid "could not write an additional WAL record: %s" +msgstr "не вдалося написати додатковий запис WAL: %s" + +#: pg_createsubscriber.c:822 +#, c-format +msgid "could not obtain recovery progress: %s" +msgstr "не вдалося отримати прогрес відновлення: %s" + +#: pg_createsubscriber.c:854 +#, c-format +msgid "checking settings on publisher" +msgstr "перевірка налаштувань на сервері публікації" + +#: pg_createsubscriber.c:864 +#, c-format +msgid "primary server cannot be in recovery" +msgstr "основний сервер не може бути у процесі відновлення" + +#: pg_createsubscriber.c:888 +#, c-format +msgid "could not obtain publisher settings: %s" +msgstr "не вдалось отримати налаштування сервера публікацій: %s" + +#: pg_createsubscriber.c:914 +#, c-format +msgid "publisher requires wal_level >= \"logical\"" +msgstr "сервер публікації вимагає wal_level >= \"logical\"" + +#: pg_createsubscriber.c:920 +#, c-format +msgid "publisher requires %d replication slots, but only %d remain" +msgstr "сервер публікацій вимагає %d слотів реплікації, але залишається тільки %d" + +#: pg_createsubscriber.c:922 pg_createsubscriber.c:931 +#: pg_createsubscriber.c:1028 pg_createsubscriber.c:1037 +#: pg_createsubscriber.c:1046 +#, c-format +msgid "Increase the configuration parameter \"%s\" to at least %d." +msgstr "Збільшіть параметр налаштування \"%s\" принаймні до %d." + +#: pg_createsubscriber.c:929 +#, c-format +msgid "publisher requires %d WAL sender processes, but only %d remain" +msgstr "сервер публікацій вимагає %d процесів відправника WAL, але залишається тільки %d" + +#: pg_createsubscriber.c:938 +#, c-format +msgid "two_phase option will not be enabled for replication slots" +msgstr "опція two_phase для слотів реплікації не буде увімкнена" + +#: pg_createsubscriber.c:939 +#, c-format +msgid "Subscriptions will be created with the two_phase option disabled. Prepared transactions will be replicated at COMMIT PREPARED." +msgstr "Підписки будуть створені з відключенем параметром two_phase. Підготовлені транзакції будуть скопійовані в COMMIT PREPARED." + +#: pg_createsubscriber.c:971 +#, c-format +msgid "checking settings on subscriber" +msgstr "перевірка налаштувань підписника" + +#: pg_createsubscriber.c:978 +#, c-format +msgid "target server must be a standby" +msgstr "цільовий сервер повинен бути в режимі очікування" + +#: pg_createsubscriber.c:1002 +#, c-format +msgid "could not obtain subscriber settings: %s" +msgstr "не вдалося отримати налаштування підписника: %s" + +#: pg_createsubscriber.c:1026 +#, c-format +msgid "subscriber requires %d replication slots, but only %d remain" +msgstr "підписник вимагає %d слотів реплікації, але залишається тільки %d" + +#: pg_createsubscriber.c:1035 +#, c-format +msgid "subscriber requires %d logical replication workers, but only %d remain" +msgstr "підписник вимагає %d процесів логічної реплікації, але залишається тільки %d" + +#: pg_createsubscriber.c:1044 +#, c-format +msgid "subscriber requires %d worker processes, but only %d remain" +msgstr "підписник вимагає %d робочих процесів, але залишається тільки %d" + +#: pg_createsubscriber.c:1079 +#, c-format +msgid "dropping subscription \"%s\" in database \"%s\"" +msgstr "видалення підписки \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1088 +#, c-format +msgid "could not drop subscription \"%s\": %s" +msgstr "не вдалося видалити підписку \"%s\": %s" + +#: pg_createsubscriber.c:1123 +#, c-format +msgid "could not obtain pre-existing subscriptions: %s" +msgstr "не вдалося отримати раніше наявні підписки: %s" + +#: pg_createsubscriber.c:1258 +#, c-format +msgid "could not drop replication slot \"%s\" on primary" +msgstr "не вдалося видалити слот реплікації \"%s\" на головному сервері" + +#: pg_createsubscriber.c:1292 +#, c-format +msgid "could not obtain failover replication slot information: %s" +msgstr "не вдалося отримати інформацію про запасний слот реплікації: %s" + +#: pg_createsubscriber.c:1294 pg_createsubscriber.c:1303 +#, c-format +msgid "Drop the failover replication slots on subscriber soon to avoid retention of WAL files." +msgstr "Видаліть запасний слот реплікації найближчим часом, щоб уникнути збереження файлів WAL." + +#: pg_createsubscriber.c:1302 +#, c-format +msgid "could not drop failover replication slot" +msgstr "не вдалося видалити запасний слот реплікації" + +#: pg_createsubscriber.c:1324 +#, c-format +msgid "creating the replication slot \"%s\" in database \"%s\"" +msgstr "створюю слот реплікації \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1342 +#, c-format +msgid "could not create replication slot \"%s\" in database \"%s\": %s" +msgstr "не вдалося створити слот реплікації \"%s\" в базі даних \"%s\": %s" + +#: pg_createsubscriber.c:1372 +#, c-format +msgid "dropping the replication slot \"%s\" in database \"%s\"" +msgstr "видалення слоту реплікації \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1388 +#, c-format +msgid "could not drop replication slot \"%s\" in database \"%s\": %s" +msgstr "не вдалося видалити слот реплікації \"%s\" в базі даних \"%s\": %s" + +#: pg_createsubscriber.c:1409 +#, c-format +msgid "pg_ctl failed with exit code %d" +msgstr "помилка pg_ctl з кодом %d" + +#: pg_createsubscriber.c:1414 +#, c-format +msgid "pg_ctl was terminated by exception 0x%X" +msgstr "pg_ctl був перерваний винятком 0x%X" + +#: pg_createsubscriber.c:1416 +#, c-format +msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "Опис цього Шістнадцяткового значення дивіться у включаємому C-файлі \"ntstatus.h\"." + +#: pg_createsubscriber.c:1418 +#, c-format +msgid "pg_ctl was terminated by signal %d: %s" +msgstr "pg_ctl було припинено сигналом %d: %s" + +#: pg_createsubscriber.c:1424 +#, c-format +msgid "pg_ctl exited with unrecognized status %d" +msgstr "pg_ctl завершився з невідомим статусом %d" + +#: pg_createsubscriber.c:1427 +#, c-format +msgid "The failed command was: %s" +msgstr "Команда з помилкою: %s" + +#: pg_createsubscriber.c:1473 +#, c-format +msgid "server was started" +msgstr "сервер був запущений" + +#: pg_createsubscriber.c:1488 +#, c-format +msgid "server was stopped" +msgstr "сервер було зупинено" + +#: pg_createsubscriber.c:1507 +#, c-format +msgid "waiting for the target server to reach the consistent state" +msgstr "чекаю на досягнення узгодженого стану цільовим сервером" + +#: pg_createsubscriber.c:1530 +#, c-format +msgid "recovery timed out" +msgstr "час відновлення вичерпався" + +#: pg_createsubscriber.c:1543 +#, c-format +msgid "server did not end recovery" +msgstr "сервер не завершив відновлення" + +#: pg_createsubscriber.c:1545 +#, c-format +msgid "target server reached the consistent state" +msgstr "цільовий сервер досяг узгодженого стану" + +#: pg_createsubscriber.c:1546 +#, c-format +msgid "If pg_createsubscriber fails after this point, you must recreate the physical replica before continuing." +msgstr "Якщо pg_createsubscriber поверне помилку після цієї точки, вам потрібно буде перестворити фізичну репліку перед продовженням." + +#: pg_createsubscriber.c:1573 +#, c-format +msgid "could not obtain publication information: %s" +msgstr "не вдалося отримати інформацію про публікацію: %s" + +#: pg_createsubscriber.c:1587 +#, c-format +msgid "publication \"%s\" already exists" +msgstr "публікація \"%s\" вже існує" + +#: pg_createsubscriber.c:1588 +#, c-format +msgid "Consider renaming this publication before continuing." +msgstr "Подумайте про перейменування цієї публікації, перш ніж продовжити." + +#: pg_createsubscriber.c:1595 +#, c-format +msgid "creating publication \"%s\" in database \"%s\"" +msgstr "створення публікації \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1608 +#, c-format +msgid "could not create publication \"%s\" in database \"%s\": %s" +msgstr "не вдалося створити публікацію \"%s\" в базі даних \"%s\": %s" + +#: pg_createsubscriber.c:1637 +#, c-format +msgid "dropping publication \"%s\" in database \"%s\"" +msgstr "видалення публікації \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1651 +#, c-format +msgid "could not drop publication \"%s\" in database \"%s\": %s" +msgstr "не вдалося видалити публікацію \"%s\" в базі даних \"%s\": %s" + +#: pg_createsubscriber.c:1697 +#, c-format +msgid "creating subscription \"%s\" in database \"%s\"" +msgstr "створення підписки \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1718 +#, c-format +msgid "could not create subscription \"%s\" in database \"%s\": %s" +msgstr "не вдалося створити підписку \"%s\" в базі даних \"%s\": %s" + +#: pg_createsubscriber.c:1763 +#, c-format +msgid "could not obtain subscription OID: %s" +msgstr "не вдалося отримати OID підписки: %s" + +#: pg_createsubscriber.c:1770 +#, c-format +msgid "could not obtain subscription OID: got %d rows, expected %d row" +msgstr "не вдалося отримати OID підписки: отримано %d рядків, очікувалось %d рядок" + +#: pg_createsubscriber.c:1794 +#, c-format +msgid "setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"" +msgstr "налаштування прогресу реплікації (назва вузла \"%s, LSN %s) в базі даних \"%s\"" + +#: pg_createsubscriber.c:1809 +#, c-format +msgid "could not set replication progress for subscription \"%s\": %s" +msgstr "не вдалося виставити прогрес реплікації для підписки \"%s\": %s" + +#: pg_createsubscriber.c:1840 +#, c-format +msgid "enabling subscription \"%s\" in database \"%s\"" +msgstr "активація підписки \"%s\" в базі даних \"%s\"" + +#: pg_createsubscriber.c:1852 +#, c-format +msgid "could not enable subscription \"%s\": %s" +msgstr "не вдалося активувати підписку \"%s\": %s" + +#: pg_createsubscriber.c:1944 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "\"root\" не може це виконувати" + +#: pg_createsubscriber.c:1945 +#, c-format +msgid "You must run %s as the PostgreSQL superuser." +msgstr "Запускати %s треба від суперкористувача PostgreSQL." + +#: pg_createsubscriber.c:1966 +#, c-format +msgid "database \"%s\" specified more than once" +msgstr "база даних \"%s\" вказана неодноразово" + +#: pg_createsubscriber.c:2007 +#, c-format +msgid "publication \"%s\" specified more than once" +msgstr "публікація \"%s\" вказана неодноразово" + +#: pg_createsubscriber.c:2019 +#, c-format +msgid "replication slot \"%s\" specified more than once" +msgstr "слот реплікації \"%s\" вказаний неодноразово" + +#: pg_createsubscriber.c:2031 +#, c-format +msgid "subscription \"%s\" specified more than once" +msgstr "підписка \"%s\" вказана неодноразово" + +#: pg_createsubscriber.c:2054 +#, c-format +msgid "no subscriber data directory specified" +msgstr "не вказано каталог з даними підписника" + +#: pg_createsubscriber.c:2065 +#, c-format +msgid "could not determine current directory" +msgstr "не вдалося визначити поточний каталог" + +#: pg_createsubscriber.c:2082 +#, c-format +msgid "no publisher connection string specified" +msgstr "немає рядка підключення до видавця" + +#: pg_createsubscriber.c:2086 +#, c-format +msgid "validating publisher connection string" +msgstr "перевірка рядка підключення видавця" + +#: pg_createsubscriber.c:2092 +#, c-format +msgid "validating subscriber connection string" +msgstr "перевірка рядка з'єднання з підписником" + +#: pg_createsubscriber.c:2097 +#, c-format +msgid "no database was specified" +msgstr "база даних не вказана" + +#: pg_createsubscriber.c:2109 +#, c-format +msgid "database name \"%s\" was extracted from the publisher connection string" +msgstr "ім'я бази даних \"%s\" було отримано з рядка підключення видавця" + +#: pg_createsubscriber.c:2114 +#, c-format +msgid "no database name specified" +msgstr "не вказано ім'я бази даних" + +#: pg_createsubscriber.c:2124 +#, c-format +msgid "wrong number of publication names specified" +msgstr "вказана невірна кількість імен публікації" + +#: pg_createsubscriber.c:2125 +#, c-format +msgid "The number of specified publication names (%d) must match the number of specified database names (%d)." +msgstr "Кількість вказаних назв публікації (%d) мусить співпадати з кількістю вказаних баз даних (%d)." + +#: pg_createsubscriber.c:2131 +#, c-format +msgid "wrong number of subscription names specified" +msgstr "вказано неправильну кількість імен підписки" + +#: pg_createsubscriber.c:2132 +#, c-format +msgid "The number of specified subscription names (%d) must match the number of specified database names (%d)." +msgstr "Кількість зазначених назв підписки (%d) повинна співпадати з кількістю зазначених назв бази даних (%d)." + +#: pg_createsubscriber.c:2138 +#, c-format +msgid "wrong number of replication slot names specified" +msgstr "вказано неправильну кількість назв слотів реплікації" + +#: pg_createsubscriber.c:2139 +#, c-format +msgid "The number of specified replication slot names (%d) must match the number of specified database names (%d)." +msgstr "Кількість вказаних назв слотів реплікації (%d) повинна збігатися з кількістю вказаних назв бази даних (%d)." + +#: pg_createsubscriber.c:2168 +#, c-format +msgid "subscriber data directory is not a copy of the source database cluster" +msgstr "каталог даних підписника не є копією кластера вихідної бази даних" + +#: pg_createsubscriber.c:2181 +#, c-format +msgid "standby server is running" +msgstr "резервний сервер працює" + +#: pg_createsubscriber.c:2182 +#, c-format +msgid "Stop the standby server and try again." +msgstr "Зупиніть резервний сервер та повторіть спробу." + +#: pg_createsubscriber.c:2191 +#, c-format +msgid "starting the standby server with command-line options" +msgstr "запуск резервного серверу з параметрами командного рядка" + +#: pg_createsubscriber.c:2207 pg_createsubscriber.c:2242 +#, c-format +msgid "stopping the subscriber" +msgstr "зупинка підписника" + +#: pg_createsubscriber.c:2221 +#, c-format +msgid "starting the subscriber" +msgstr "запуск підписника" + +#: pg_createsubscriber.c:2250 +#, c-format +msgid "Done!" +msgstr "Готово!" + +#: pg_receivewal.c:77 +#, c-format +msgid "%s receives PostgreSQL streaming write-ahead logs.\n\n" +msgstr "%s отримує передачу випереджувальних журналів PostgreSQL.\n\n" + +#: pg_receivewal.c:82 #, c-format msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=DIR зберігати файли випереджувального журналювання до цього каталогу\n" -#: pg_receivewal.c:85 pg_recvlogical.c:85 +#: pg_receivewal.c:83 pg_recvlogical.c:93 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN вийти після отримання вказаного LSN\n" -#: pg_receivewal.c:86 pg_recvlogical.c:89 +#: pg_receivewal.c:84 pg_recvlogical.c:97 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr " --if-not-exists не видавати помилку, при створенні слота, якщо слот вже існує\n" -#: pg_receivewal.c:87 pg_recvlogical.c:91 +#: pg_receivewal.c:85 pg_recvlogical.c:99 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop переривати роботу при втраті підключення\n" -#: pg_receivewal.c:88 +#: pg_receivewal.c:86 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync не чекати безпечного збереження змін на диск\n" -#: pg_receivewal.c:89 pg_recvlogical.c:96 +#: pg_receivewal.c:87 pg_recvlogical.c:104 #, c-format msgid " -s, --status-interval=SECS\n" " time between status packets sent to server (default: %d)\n" msgstr " -s, --status-interval=SECS\n" " інтервал між відправкою статусних пакетів серверу (за замовчуванням: %d)\n" -#: pg_receivewal.c:92 +#: pg_receivewal.c:90 #, c-format msgid " --synchronous flush write-ahead log immediately after writing\n" msgstr " --synchronous очистити випереджувальне журналювання відразу після запису\n" -#: pg_receivewal.c:95 +#: pg_receivewal.c:93 #, c-format msgid " -Z, --compress=METHOD[:DETAIL]\n" " compress as specified\n" msgstr " -Z, --compress=METHOD[:DETAIL]\n" " стискати як вказано\n" -#: pg_receivewal.c:105 +#: pg_receivewal.c:103 #, c-format msgid "\n" "Optional actions:\n" msgstr "\n" "Додаткові дії:\n" -#: pg_receivewal.c:106 pg_recvlogical.c:81 +#: pg_receivewal.c:104 pg_recvlogical.c:89 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot створити новий слот реплікації (ім'я слота задає параметр --slot)\n" -#: pg_receivewal.c:107 pg_recvlogical.c:82 +#: pg_receivewal.c:105 pg_recvlogical.c:90 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot видалити слот реплікації (ім'я слота задає параметр --slot)\n" -#: pg_receivewal.c:252 +#: pg_receivewal.c:191 #, c-format msgid "finished segment at %X/%X (timeline %u)" msgstr "завершено сегмент в позиції %X/%X (часова шкала %u)" -#: pg_receivewal.c:259 +#: pg_receivewal.c:198 #, c-format msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "зупинено потокове передавання журналу в позиції %X/%X (часова шкала %u)" -#: pg_receivewal.c:275 +#: pg_receivewal.c:214 #, c-format msgid "switched to timeline %u at %X/%X" msgstr "переключено на часову шкалу %u в позиції %X/%X" -#: pg_receivewal.c:285 +#: pg_receivewal.c:224 pg_recvlogical.c:1053 #, c-format msgid "received interrupt signal, exiting" msgstr "отримано сигнал переривання, завершення роботи" -#: pg_receivewal.c:317 +#: pg_receivewal.c:256 #, c-format msgid "could not close directory \"%s\": %m" msgstr "не вдалося закрити каталог \"%s\": %m" -#: pg_receivewal.c:384 +#: pg_receivewal.c:323 #, c-format msgid "segment file \"%s\" has incorrect size %lld, skipping" msgstr "файл сегменту \"%s\" має неправильний розмір %lld, пропускається" -#: pg_receivewal.c:401 +#: pg_receivewal.c:340 #, c-format msgid "could not open compressed file \"%s\": %m" msgstr "не вдалося відкрити стиснутий файл \"%s\": %m" -#: pg_receivewal.c:404 +#: pg_receivewal.c:343 #, c-format msgid "could not seek in compressed file \"%s\": %m" msgstr "не вдалося знайти в стиснутому файлі \"%s\": %m" -#: pg_receivewal.c:410 +#: pg_receivewal.c:349 #, c-format msgid "could not read compressed file \"%s\": %m" msgstr "не вдалося прочитати стиснутий файл \"%s\": %m" -#: pg_receivewal.c:413 +#: pg_receivewal.c:352 #, c-format msgid "could not read compressed file \"%s\": read %d of %zu" msgstr "не вдалося прочитати стиснутий файл \"%s\": прочитано %d з %zu" -#: pg_receivewal.c:423 +#: pg_receivewal.c:362 #, c-format msgid "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" msgstr "файл стиснутого сегменту \"%s\" має неправильний розмір без стискання %d, пропускається" -#: pg_receivewal.c:451 +#: pg_receivewal.c:390 #, c-format msgid "could not create LZ4 decompression context: %s" msgstr "не вдалося створити контекст декомпресії LZ4: %s" -#: pg_receivewal.c:463 -#, c-format -msgid "could not read file \"%s\": %m" -msgstr "не вдалося прочитати файл \"%s\": %m" - -#: pg_receivewal.c:481 +#: pg_receivewal.c:420 #, c-format msgid "could not decompress file \"%s\": %s" msgstr "не вдалося розпакувати файл \"%s\": %s" -#: pg_receivewal.c:504 +#: pg_receivewal.c:443 #, c-format msgid "could not free LZ4 decompression context: %s" msgstr "не вдалося звільнити контекст декомпресії LZ4: %s" -#: pg_receivewal.c:509 +#: pg_receivewal.c:448 #, c-format msgid "compressed segment file \"%s\" has incorrect uncompressed size %zu, skipping" msgstr "файл стиснутого сегменту \"%s\" має неправильний розмір не стиснутого розміру %zu, пропускається" -#: pg_receivewal.c:514 -#, c-format -msgid "could not check file \"%s\"" -msgstr "не вдалося перевірити файл \"%s\"" - -#: pg_receivewal.c:516 +#: pg_receivewal.c:453 #, c-format -msgid "This build does not support compression with %s." -msgstr "Ця збірка не підтримує стиснення з %s." +msgid "cannot check file \"%s\": compression with %s not supported by this build" +msgstr "неможливо перевірити файл \"%s\": стиснення %s не підтримується даною збіркою" -#: pg_receivewal.c:643 +#: pg_receivewal.c:578 #, c-format msgid "starting log streaming at %X/%X (timeline %u)" msgstr "початок потокового передавання журналу в позиції %X/%X (часова шкала %u)" -#: pg_receivewal.c:785 pg_recvlogical.c:785 +#: pg_receivewal.c:693 pg_recvlogical.c:801 #, c-format msgid "could not parse end position \"%s\"" msgstr "не вдалося проаналізувати кінцеву позицію \"%s\"" -#: pg_receivewal.c:834 +#: pg_receivewal.c:766 #, c-format msgid "cannot use --create-slot together with --drop-slot" msgstr "використовувати --create-slot разом з --drop-slot не можна" -#: pg_receivewal.c:850 +#: pg_receivewal.c:782 #, c-format msgid "cannot use --synchronous together with --no-sync" msgstr "використовувати --synchronous разом з --no-sync не можна" -#: pg_receivewal.c:860 +#: pg_receivewal.c:792 #, c-format msgid "no target directory specified" msgstr "цільовий каталог не вказано" -#: pg_receivewal.c:893 -#, c-format -msgid "no value specified for --compress, switching to default" -msgstr "не вказано значення для --compress, використовується значення за замовчуванням" - -#: pg_receivewal.c:897 pg_receivewal.c:903 -#, c-format -msgid "this build does not support compression with %s" -msgstr "ця збірка не підтримує стиснення з %s" - -#: pg_receivewal.c:908 +#: pg_receivewal.c:816 #, c-format msgid "compression with %s is not yet supported" msgstr "стиснення з %s ще не підтримується" -#: pg_receivewal.c:953 +#: pg_receivewal.c:859 #, c-format msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "підключення для реплікації з використанням слоту \"%s\" неочікувано виявилось прив'язаним до бази даних" -#: pg_receivewal.c:972 pg_recvlogical.c:955 +#: pg_receivewal.c:878 pg_recvlogical.c:972 #, c-format msgid "dropping replication slot \"%s\"" msgstr "видалення слоту реплікації \"%s\"" -#: pg_receivewal.c:983 pg_recvlogical.c:965 +#: pg_receivewal.c:889 pg_recvlogical.c:982 #, c-format msgid "creating replication slot \"%s\"" msgstr "створення слоту реплікації \"%s\"" -#: pg_receivewal.c:1012 pg_recvlogical.c:989 +#: pg_receivewal.c:918 pg_recvlogical.c:1006 #, c-format msgid "disconnected" msgstr "роз’єднано" #. translator: check source for value for %d -#: pg_receivewal.c:1016 pg_recvlogical.c:993 +#: pg_receivewal.c:922 pg_recvlogical.c:1010 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "роз’єднано; через %d секунд буде повторна спроба" -#: pg_recvlogical.c:76 +#: pg_recvlogical.c:84 #, c-format msgid "%s controls PostgreSQL logical decoding streams.\n\n" msgstr "%s керує потоковими передаваннями логічного декодування PostgreSQL.\n\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:88 #, c-format msgid "\n" "Action to be performed:\n" msgstr "\n" "Дія до виконання:\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:91 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start почати потокове передавання в слоті реплікації (ім'я слоту задає параметр --slot)\n" -#: pg_recvlogical.c:86 +#: pg_recvlogical.c:94 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FILE зберігати журнал до цього файлу, - позначає stdout\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:95 #, c-format msgid " -F --fsync-interval=SECS\n" " time between fsyncs to the output file (default: %d)\n" msgstr " -F --fsync-interval=SECS\n" " час між fsyncs до файлу виводу (за замовчуванням: %d)\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:98 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN де в існуючому слоті слід почати потокове передавання\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:100 #, c-format msgid " -o, --option=NAME[=VALUE]\n" " pass option NAME with optional value VALUE to the\n" @@ -1360,173 +2133,173 @@ msgstr " -o, --option=NAME[=VALUE]\n" " передати параметр NAME з додатковим значенням VALUE до\n" " плагіну виводу\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:103 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN використовувати плагін виводу PLUGIN (за замовчуванням: %s)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:106 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME ім'я слоту логічної реплікації\n" -#: pg_recvlogical.c:99 +#: pg_recvlogical.c:107 #, c-format -msgid " -t, --two-phase enable two-phase decoding when creating a slot\n" -msgstr " -t, --2-фазове декодування під час створення слота\n" +msgid " -t, --two-phase enable decoding of prepared transactions when creating a slot\n" +msgstr " -t, --two-phase активувати декодування підготовлених транзакцій під час створення слоту\n" -#: pg_recvlogical.c:104 +#: pg_recvlogical.c:112 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME бази даних для підключення\n" -#: pg_recvlogical.c:137 +#: pg_recvlogical.c:145 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "підтвердження запису до %X/%X, очищення до %X/%X (слот %s)" -#: pg_recvlogical.c:161 receivelog.c:366 +#: pg_recvlogical.c:169 receivelog.c:360 #, c-format msgid "could not send feedback packet: %s" msgstr "не вдалося відправити пакет зворотнього зв'язку: %s" -#: pg_recvlogical.c:229 +#: pg_recvlogical.c:239 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "початок потокового передавання журналу в позиції %X/%X (слот %s)" -#: pg_recvlogical.c:271 +#: pg_recvlogical.c:281 #, c-format msgid "streaming initiated" msgstr "потокове передавання ініційовано" -#: pg_recvlogical.c:335 +#: pg_recvlogical.c:346 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не вдалося відкрити файл журналу \"%s\": %m" -#: pg_recvlogical.c:364 receivelog.c:889 +#: pg_recvlogical.c:375 receivelog.c:882 #, c-format msgid "invalid socket: %s" msgstr "неприпустимий сокет: %s" -#: pg_recvlogical.c:417 receivelog.c:917 +#: pg_recvlogical.c:428 receivelog.c:910 #, c-format msgid "%s() failed: %m" msgstr "%s() помилка: %m" -#: pg_recvlogical.c:424 receivelog.c:967 +#: pg_recvlogical.c:435 receivelog.c:959 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не вдалося отримати дані з WAL потоку: %s" -#: pg_recvlogical.c:466 pg_recvlogical.c:517 receivelog.c:1011 -#: receivelog.c:1074 +#: pg_recvlogical.c:477 pg_recvlogical.c:528 receivelog.c:1003 +#: receivelog.c:1066 #, c-format msgid "streaming header too small: %d" msgstr "заголовок потокового передавання занадто малий: %d" -#: pg_recvlogical.c:501 receivelog.c:849 +#: pg_recvlogical.c:512 receivelog.c:843 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "нерозпізнаний заголовок потокового передавання: \"%c\"" -#: pg_recvlogical.c:555 pg_recvlogical.c:567 +#: pg_recvlogical.c:566 pg_recvlogical.c:578 #, c-format msgid "could not write %d bytes to log file \"%s\": %m" msgstr "не вдалося записати %d байт до файлу журналу \"%s\": %m" -#: pg_recvlogical.c:621 receivelog.c:648 receivelog.c:685 +#: pg_recvlogical.c:636 receivelog.c:642 receivelog.c:679 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "неочікуване завершення роботи потоку реплікації: %s" -#: pg_recvlogical.c:780 +#: pg_recvlogical.c:796 #, c-format msgid "could not parse start position \"%s\"" msgstr "не вдалося аналізувати початкову позицію \"%s\"" -#: pg_recvlogical.c:858 +#: pg_recvlogical.c:874 #, c-format msgid "no slot specified" msgstr "слот не вказано" -#: pg_recvlogical.c:865 +#: pg_recvlogical.c:881 #, c-format msgid "no target file specified" msgstr "цільовий файл не вказано" -#: pg_recvlogical.c:872 +#: pg_recvlogical.c:888 #, c-format msgid "no database specified" msgstr "база даних не вказана" -#: pg_recvlogical.c:879 +#: pg_recvlogical.c:895 #, c-format msgid "at least one action needs to be specified" msgstr "необхідно вказати щонайменше одну дію" -#: pg_recvlogical.c:886 +#: pg_recvlogical.c:902 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "використовувати --create-slot або --start разом з --drop-slot не можна" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "використовувати --create-slot або --drop-slot разом з --startpos не можна" -#: pg_recvlogical.c:900 +#: pg_recvlogical.c:916 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos можна вказати лише з --start" -#: pg_recvlogical.c:907 +#: pg_recvlogical.c:923 #, c-format msgid "--two-phase may only be specified with --create-slot" msgstr "--two-phase може бути вказано тільки з --create-slot" -#: pg_recvlogical.c:939 +#: pg_recvlogical.c:956 #, c-format msgid "could not establish database-specific replication connection" msgstr "не вдалося встановити підключення для реплікації до вказаної бази даних" -#: pg_recvlogical.c:1033 +#: pg_recvlogical.c:1056 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "кінцева позиція %X/%X досягнута наживо" -#: pg_recvlogical.c:1036 +#: pg_recvlogical.c:1061 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "кінцева позиція %X/%X досягнута WAL записом %X/%X" -#: receivelog.c:68 +#: receivelog.c:66 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "не вдалося створити файл статусу архіву \"%s\": %s" -#: receivelog.c:75 +#: receivelog.c:73 #, c-format msgid "could not close archive status file \"%s\": %s" msgstr "не вдалося закрити файл статусу архіву \"%s\": %s" -#: receivelog.c:123 +#: receivelog.c:122 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "не вдалося отримати розмір файлу випереджувального журналювання \"%s\": %s" -#: receivelog.c:134 +#: receivelog.c:133 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "не вдалося відкрити існуючий файл випереджувального журналювання \"%s\": %s" -#: receivelog.c:143 +#: receivelog.c:142 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "не вдалося fsync існуючий файл випереджувального журналювання \"%s\": %s" -#: receivelog.c:158 +#: receivelog.c:157 #, c-format msgid "write-ahead log file \"%s\" has %zd byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %zd bytes, should be 0 or %d" @@ -1535,229 +2308,229 @@ msgstr[1] "файл випереджувального журналювання msgstr[2] "файл випереджувального журналювання \"%s\" має %zd байтів, а повинен мати 0 або %d" msgstr[3] "файл випереджувального журналювання \"%s\" має %zd байтів, а повинен мати 0 або %d" -#: receivelog.c:174 +#: receivelog.c:175 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "не вдалося відкрити файл випереджувального журналювання \"%s\": %s" -#: receivelog.c:208 -#, c-format -msgid "could not determine seek position in file \"%s\": %s" -msgstr "не вдалося визначити позицію у файлі \"%s\": %s" - -#: receivelog.c:223 +#: receivelog.c:216 #, c-format msgid "not renaming \"%s\", segment is not complete" msgstr "не перейменовується \"%s\", сегмент не завершений" -#: receivelog.c:234 receivelog.c:323 receivelog.c:694 +#: receivelog.c:227 receivelog.c:317 receivelog.c:688 #, c-format msgid "could not close file \"%s\": %s" msgstr "не вдалося закрити файл \"%s\": %s" -#: receivelog.c:295 +#: receivelog.c:288 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "сервер повідомив неочікуване ім'я файлу історії часової шкали %u: %s" -#: receivelog.c:303 +#: receivelog.c:297 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "не вдалося створити файл історії часової шкали \"%s\": %s" -#: receivelog.c:310 +#: receivelog.c:304 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "не вдалося записати файл історії часової шкали \"%s\": %s" -#: receivelog.c:400 +#: receivelog.c:394 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "несумісна версія серверу %s; клієнт не підтримує потокове передавання з версій серверу старіших, ніж %s" -#: receivelog.c:409 +#: receivelog.c:403 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "несумісна версія серверу %s; клієнт не підтримує потокове передавання з версій серверу новіших, ніж %s" -#: receivelog.c:514 +#: receivelog.c:508 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "системний ідентифікатор базової резервної копії не відповідає ідентифікатору потокового передавання підключення" -#: receivelog.c:522 +#: receivelog.c:516 #, c-format msgid "starting timeline %u is not present in the server" msgstr "початкова часова шкала %u не існує на сервері" -#: receivelog.c:561 +#: receivelog.c:555 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "неочікувана відповідь на команду TIMELINE_HISTORY: отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" -#: receivelog.c:632 +#: receivelog.c:626 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "сервер неочікувано повідомив наступну часову шкалу %u після часової шкали %u" -#: receivelog.c:638 +#: receivelog.c:632 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "сервер зупинив потокове передавання часової шкали %u в позиції %X/%X, але повідомив, що наступна часова шкала %u почнеться в позиції %X/%X" -#: receivelog.c:678 +#: receivelog.c:672 #, c-format msgid "replication stream was terminated before stop point" msgstr "потік реплікації перервано до точки зупинки" -#: receivelog.c:724 +#: receivelog.c:718 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "неочікуваний набір результатів після кінця часової шкали: отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" -#: receivelog.c:733 +#: receivelog.c:727 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "не вдалося аналізувати початкову точку наступної часової шкали \"%s\"" -#: receivelog.c:781 receivelog.c:1030 walmethods.c:1203 +#: receivelog.c:775 receivelog.c:1022 walmethods.c:1206 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "не вдалося fsync файл \"%s\": %s" -#: receivelog.c:1091 +#: receivelog.c:1083 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "отримано запис випереджувального журналювання для зсуву %u з закритим файлом" -#: receivelog.c:1101 +#: receivelog.c:1093 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "отримано дані зсуву WAL %08x, очікувалось %08x" -#: receivelog.c:1135 +#: receivelog.c:1128 #, c-format msgid "could not write %d bytes to WAL file \"%s\": %s" msgstr "не вдалося записати %d байт до файлу WAL \"%s\": %s" -#: receivelog.c:1160 receivelog.c:1200 receivelog.c:1230 +#: receivelog.c:1153 receivelog.c:1193 receivelog.c:1222 #, c-format msgid "could not send copy-end packet: %s" msgstr "не вдалося відправити пакет кінця копіювання \"copy-end\": %s" -#: streamutil.c:159 +#: streamutil.c:162 msgid "Password: " msgstr "Пароль: " -#: streamutil.c:182 +#: streamutil.c:189 #, c-format msgid "could not connect to server" msgstr "не вдалося підключитись до серверу" -#: streamutil.c:225 +#: streamutil.c:230 #, c-format -msgid "could not clear search_path: %s" -msgstr "не вдалося очистити search_path: %s" +msgid "could not clear \"search_path\": %s" +msgstr "не вдалося очистити \"search_path\": %s" -#: streamutil.c:241 +#: streamutil.c:246 #, c-format -msgid "could not determine server setting for integer_datetimes" -msgstr "не вдалося визначити настроювання серверу для integer_datetimes" +msgid "could not determine server setting for \"integer_datetimes\"" +msgstr "не вдалося визначити налаштування сервера для \"integer_datetimes\"" -#: streamutil.c:248 +#: streamutil.c:253 #, c-format -msgid "integer_datetimes compile flag does not match server" -msgstr "параметри компіляції integer_datetimes не відповідають серверу" +msgid "\"integer_datetimes\" compile flag does not match server" +msgstr "флаг компіляції \"integer_datetimes\" не відповідає серверу" -#: streamutil.c:299 +#: streamutil.c:372 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "не вдалося отримати розмір сегменту WAL: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів" -#: streamutil.c:309 +#: streamutil.c:382 #, c-format msgid "WAL segment size could not be parsed" msgstr "не вдалося аналізувати розмір сегмента WAL" -#: streamutil.c:327 +#: streamutil.c:400 #, c-format -msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" -msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" -msgstr[0] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байт" -msgstr[1] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байти" -msgstr[2] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байтів" -msgstr[3] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байтів" +msgid "remote server reported invalid WAL segment size (%d byte)" +msgid_plural "remote server reported invalid WAL segment size (%d bytes)" +msgstr[0] "віддалений сервер повідомив про неправильний розмір сегмента WAL (%d байт)" +msgstr[1] "віддалений сервер повідомив про неправильний розмір сегмента WAL (%d байтів)" +msgstr[2] "віддалений сервер повідомив про неправильний розмір сегмента WAL (%d байтів)" +msgstr[3] "віддалений сервер повідомив про неправильний розмір сегмента WAL (%d байтів)" -#: streamutil.c:372 +#: streamutil.c:404 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "Розмір сегмента WAL повинен бути степенем двійки від 1 МБ до 1 ГБ." + +#: streamutil.c:446 #, c-format msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "не вдалося вилучити позначку доступа групи: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів" -#: streamutil.c:381 +#: streamutil.c:455 #, c-format msgid "group access flag could not be parsed: %s" msgstr "не вдалося аналізувати позначку доступа групи: %s" -#: streamutil.c:424 streamutil.c:461 +#: streamutil.c:498 streamutil.c:535 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "не вдалося ідентифікувати систему: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів" -#: streamutil.c:513 +#: streamutil.c:587 #, c-format msgid "could not read replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "не вдалося прочитати слот реплікації \"%s\": отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" -#: streamutil.c:525 +#: streamutil.c:599 #, c-format -msgid "could not find replication slot \"%s\"" -msgstr "не вдалося знайти слот реплікації \"%s\"" +msgid "replication slot \"%s\" does not exist" +msgstr "слот реплікації \"%s\" не існує" -#: streamutil.c:536 +#: streamutil.c:610 #, c-format msgid "expected a physical replication slot, got type \"%s\" instead" msgstr "очікувався слот фізичної реплікації, а натомість знайдено \"%s\"" -#: streamutil.c:550 +#: streamutil.c:624 #, c-format msgid "could not parse restart_lsn \"%s\" for replication slot \"%s\"" msgstr "не вдалося аналізувати restart_lsn \"%s\" для слоту реплікації \"%s\"" -#: streamutil.c:667 +#: streamutil.c:741 #, c-format msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "не вдалося створити слот реплікації \"%s\": отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" -#: streamutil.c:711 +#: streamutil.c:785 #, c-format msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "не вдалося видалити слот реплікації \"%s\": отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" -#: walmethods.c:720 walmethods.c:1265 +#: walmethods.c:726 walmethods.c:1269 msgid "could not compress data" msgstr "не вдалося стиснути дані" -#: walmethods.c:749 +#: walmethods.c:755 msgid "could not reset compression stream" msgstr "не вдалося скинути потік стискання" -#: walmethods.c:880 +#: walmethods.c:892 msgid "implementation error: tar files can't have more than one open file" msgstr "помилка реалізації: файли tar не можуть мати більше одного відкритого файлу" -#: walmethods.c:894 +#: walmethods.c:907 msgid "could not create tar header" msgstr "не вдалося створити заголовок tar" -#: walmethods.c:910 walmethods.c:950 walmethods.c:1169 walmethods.c:1181 +#: walmethods.c:924 walmethods.c:965 walmethods.c:1171 walmethods.c:1184 msgid "could not change compression parameters" msgstr "не вдалося змінити параметри стискання" -#: walmethods.c:1054 +#: walmethods.c:1056 msgid "unlink not supported with compression" msgstr "unink не підтримується зі стисканням" -#: walmethods.c:1289 +#: walmethods.c:1293 msgid "could not close compression stream" msgstr "не вдалося закрити потік стискання" diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 6b6e32dfbdf56..25b13c7f55cd1 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -21,6 +21,7 @@ #include "access/xlog_internal.h" #include "common/logging.h" #include "libpq-fe.h" +#include "libpq/protocol.h" #include "receivelog.h" #include "streamutil.h" @@ -38,8 +39,8 @@ static int CopyStreamReceive(PGconn *conn, long timeout, pgsocket stop_socket, char **buffer); static bool ProcessKeepaliveMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, XLogRecPtr blockpos, TimestampTz *last_status); -static bool ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, - XLogRecPtr *blockpos); +static bool ProcessWALDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, + XLogRecPtr *blockpos); static PGresult *HandleEndOfCopyStream(PGconn *conn, StreamCtl *stream, char *copybuf, XLogRecPtr blockpos, XLogRecPtr *stoppos); static bool CheckCopyStreamStop(PGconn *conn, StreamCtl *stream, XLogRecPtr blockpos); @@ -338,7 +339,7 @@ sendFeedback(PGconn *conn, XLogRecPtr blockpos, TimestampTz now, bool replyReque char replybuf[1 + 8 + 8 + 8 + 8 + 1]; int len = 0; - replybuf[len] = 'r'; + replybuf[len] = PqReplMsg_StandbyStatusUpdate; len += 1; fe_sendint64(blockpos, &replybuf[len]); /* write */ len += 8; @@ -571,7 +572,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) return true; /* Initiate the replication stream at specified location */ - snprintf(query, sizeof(query), "START_REPLICATION %s%X/%X TIMELINE %u", + snprintf(query, sizeof(query), "START_REPLICATION %s%X/%08X TIMELINE %u", slotcmd, LSN_FORMAT_ARGS(stream->startpos), stream->timeline); @@ -628,7 +629,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) } if (stream->startpos > stoppos) { - pg_log_error("server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X", + pg_log_error("server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X", stream->timeline, LSN_FORMAT_ARGS(stoppos), newtimeline, LSN_FORMAT_ARGS(stream->startpos)); goto error; @@ -720,7 +721,7 @@ ReadEndOfStreamingResult(PGresult *res, XLogRecPtr *startpos, uint32 *timeline) } *timeline = atoi(PQgetvalue(res, 0, 0)); - if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &startpos_xlogid, + if (sscanf(PQgetvalue(res, 0, 1), "%X/%08X", &startpos_xlogid, &startpos_xrecoff) != 2) { pg_log_error("could not parse next timeline's starting point \"%s\"", @@ -823,15 +824,15 @@ HandleCopyStream(PGconn *conn, StreamCtl *stream, } /* Check the message type. */ - if (copybuf[0] == 'k') + if (copybuf[0] == PqReplMsg_Keepalive) { if (!ProcessKeepaliveMsg(conn, stream, copybuf, r, blockpos, &last_status)) goto error; } - else if (copybuf[0] == 'w') + else if (copybuf[0] == PqReplMsg_WALData) { - if (!ProcessXLogDataMsg(conn, stream, copybuf, r, &blockpos)) + if (!ProcessWALDataMsg(conn, stream, copybuf, r, &blockpos)) goto error; /* @@ -1001,7 +1002,7 @@ ProcessKeepaliveMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, * Parse the keepalive message, enclosed in the CopyData message. We just * check if the server requested a reply, and ignore the rest. */ - pos = 1; /* skip msgtype 'k' */ + pos = 1; /* skip msgtype PqReplMsg_Keepalive */ pos += 8; /* skip walEnd */ pos += 8; /* skip sendTime */ @@ -1041,11 +1042,11 @@ ProcessKeepaliveMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, } /* - * Process XLogData message. + * Process WALData message. */ static bool -ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, - XLogRecPtr *blockpos) +ProcessWALDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, + XLogRecPtr *blockpos) { int xlogoff; int bytes_left; @@ -1054,17 +1055,17 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, /* * Once we've decided we don't want to receive any more, just ignore any - * subsequent XLogData messages. + * subsequent WALData messages. */ if (!(still_sending)) return true; /* - * Read the header of the XLogData message, enclosed in the CopyData + * Read the header of the WALData message, enclosed in the CopyData * message. We only need the WAL location field (dataStart), the rest of * the header is ignored. */ - hdr_len = 1; /* msgtype 'w' */ + hdr_len = 1; /* msgtype PqReplMsg_WALData */ hdr_len += 8; /* dataStart */ hdr_len += 8; /* walEnd */ hdr_len += 8; /* sendTime */ @@ -1162,7 +1163,7 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, return false; } still_sending = false; - return true; /* ignore the rest of this XLogData packet */ + return true; /* ignore the rest of this WALData packet */ } } } diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c index 8e605f43ffef0..e5a7cb6e5b14e 100644 --- a/src/bin/pg_basebackup/streamutil.c +++ b/src/bin/pg_basebackup/streamutil.c @@ -445,7 +445,7 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, /* Get LSN start position if necessary */ if (startpos != NULL) { - if (sscanf(PQgetvalue(res, 0, 2), "%X/%X", &hi, &lo) != 2) + if (sscanf(PQgetvalue(res, 0, 2), "%X/%08X", &hi, &lo) != 2) { pg_log_error("could not parse write-ahead log location \"%s\"", PQgetvalue(res, 0, 2)); @@ -551,7 +551,7 @@ GetSlotInformation(PGconn *conn, const char *slot_name, uint32 hi, lo; - if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &hi, &lo) != 2) + if (sscanf(PQgetvalue(res, 0, 1), "%X/%08X", &hi, &lo) != 2) { pg_log_error("could not parse restart_lsn \"%s\" for replication slot \"%s\"", PQgetvalue(res, 0, 1), slot_name); @@ -583,7 +583,7 @@ GetSlotInformation(PGconn *conn, const char *slot_name, bool CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, bool is_temporary, bool is_physical, bool reserve_wal, - bool slot_exists_ok, bool two_phase) + bool slot_exists_ok, bool two_phase, bool failover) { PQExpBuffer query; PGresult *res; @@ -594,6 +594,7 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, Assert((is_physical && plugin == NULL) || (!is_physical && plugin != NULL)); Assert(!(two_phase && is_physical)); + Assert(!(failover && is_physical)); Assert(slot_name != NULL); /* Build base portion of query */ @@ -616,6 +617,10 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, } else { + if (failover && PQserverVersion(conn) >= 170000) + AppendPlainCommandOption(query, use_new_option_syntax, + "FAILOVER"); + if (two_phase && PQserverVersion(conn) >= 150000) AppendPlainCommandOption(query, use_new_option_syntax, "TWO_PHASE"); diff --git a/src/bin/pg_basebackup/streamutil.h b/src/bin/pg_basebackup/streamutil.h index f917c43517fef..017b227303c83 100644 --- a/src/bin/pg_basebackup/streamutil.h +++ b/src/bin/pg_basebackup/streamutil.h @@ -35,7 +35,8 @@ extern PGconn *GetConnection(void); extern bool CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, bool is_temporary, bool is_physical, bool reserve_wal, - bool slot_exists_ok, bool two_phase); + bool slot_exists_ok, bool two_phase, + bool failover); extern bool DropReplicationSlot(PGconn *conn, const char *slot_name); extern bool RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, diff --git a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl index 62bbc5a3f980d..1b7a6f6f43fdd 100644 --- a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl +++ b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl @@ -110,7 +110,7 @@ '--dbname' => $node->connstr('postgres'), '--start', '--endpos' => $nextlsn, - '--two-phase', '--no-loop', + '--enable-two-phase', '--no-loop', '--file' => '-', ], 'incorrect usage'); @@ -135,4 +135,20 @@ ], 'drop could work without dbname'); +# test with failover option enabled +$node->command_ok( + [ + 'pg_recvlogical', + '--slot' => 'test', + '--dbname' => $node->connstr('postgres'), + '--create-slot', + '--enable-failover', + ], + 'slot with failover created'); + +my $result = $node->safe_psql('postgres', + "SELECT failover FROM pg_catalog.pg_replication_slots WHERE slot_name = 'test'" +); +is($result, 't', "failover is enabled for the new slot"); + done_testing(); diff --git a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl index 80153f7d77e89..229fef5b3b52b 100644 --- a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl +++ b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl @@ -331,7 +331,7 @@ sub generate_db $node_p->wait_for_replay_catchup($node_s); # Create user-defined publications, wait for streaming replication to sync them -# to the standby, then verify that '--remove' +# to the standby, then verify that '--clean' # removes them. $node_p->safe_psql( $db1, qq( @@ -399,7 +399,7 @@ sub generate_db '--database' => $db1, '--all', ], - qr/--database cannot be used with --all/, + qr/options --database and -a\/--all cannot be used together/, 'fail if --database is used with --all'); # run pg_createsubscriber with '--publication' and '--all' and verify @@ -416,7 +416,7 @@ sub generate_db '--all', '--publication' => 'pub1', ], - qr/--publication cannot be used with --all/, + qr/options --publication and -a\/--all cannot be used together/, 'fail if --publication is used with --all'); # run pg_createsubscriber with '--all' option @@ -446,7 +446,7 @@ sub generate_db # Run pg_createsubscriber on node S. --verbose is used twice # to show more information. # In passing, also test the --enable-two-phase option and -# --remove option +# --clean option command_ok( [ 'pg_createsubscriber', @@ -463,7 +463,7 @@ sub generate_db '--database' => $db1, '--database' => $db2, '--enable-two-phase', - '--remove' => 'publications', + '--clean' => 'publications', ], 'run pg_createsubscriber on node S'); diff --git a/src/bin/pg_checksums/po/de.po b/src/bin/pg_checksums/po/de.po index 8b74011f53b17..dc8eab7e76424 100644 --- a/src/bin/pg_checksums/po/de.po +++ b/src/bin/pg_checksums/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_checksums # Copyright (C) 2024 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2018 - 2024. +# Peter Eisentraut , 2018 - 2025. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 17\n" +"Project-Id-Version: PostgreSQL 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-16 07:54+0000\n" -"PO-Revision-Date: 2024-03-19 21:17+0100\n" +"POT-Creation-Date: 2025-03-02 13:25+0000\n" +"PO-Revision-Date: 2025-03-02 15:48+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,22 +16,22 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "Detail: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "Tipp: " @@ -74,9 +74,9 @@ msgstr "" "diesem Fall wären die Ergebnisse unten falsch und die PostgreSQL-Installation\n" "wäre inkompatibel mit diesem Datenverzeichnis." -#: ../../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 pg_checksums.c:192 +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:71 +#: ../../common/file_utils.c:348 ../../common/file_utils.c:407 +#: ../../common/file_utils.c:481 pg_checksums.c:191 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" @@ -86,8 +86,8 @@ msgstr "konnte Datei »%s« nicht öffnen: %m" msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" -#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 -#: ../../common/file_utils.c:488 +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:419 +#: ../../common/file_utils.c:489 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" @@ -103,35 +103,35 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:77 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "konnte Dateisystem für Datei »%s« nicht synchronisieren: %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 -#: pg_checksums.c:338 pg_checksums.c:407 +#: ../../common/file_utils.c:121 ../../common/file_utils.c:567 +#: pg_checksums.c:337 pg_checksums.c:406 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:131 ../../common/file_utils.c:228 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "diese Installation unterstützt Sync-Methode »%s« nicht" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 -#: pg_checksums.c:310 +#: ../../common/file_utils.c:152 ../../common/file_utils.c:282 +#: pg_checksums.c:309 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:170 ../../common/file_utils.c:316 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../../common/file_utils.c:498 +#: ../../common/file_utils.c:499 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" @@ -151,7 +151,7 @@ msgstr "%s muss im Bereich %d..%d sein" msgid "unrecognized sync method: %s" msgstr "unbekannte Sync-Methode: %s" -#: pg_checksums.c:70 +#: pg_checksums.c:69 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" @@ -160,17 +160,17 @@ msgstr "" "%s überprüft die Datenprüfsummen in einem PostgreSQL-Datenbankcluster oder schaltet sie ein oder aus.\n" "\n" -#: pg_checksums.c:71 +#: pg_checksums.c:70 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_checksums.c:72 +#: pg_checksums.c:71 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATENVERZEICHNIS]\n" -#: pg_checksums.c:73 +#: pg_checksums.c:72 #, c-format msgid "" "\n" @@ -179,44 +179,44 @@ msgstr "" "\n" "Optionen:\n" -#: pg_checksums.c:74 +#: pg_checksums.c:73 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]VERZ Datenbankverzeichnis\n" -#: pg_checksums.c:75 +#: pg_checksums.c:74 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check Datenprüfsummen prüfen (Voreinstellung)\n" -#: pg_checksums.c:76 +#: pg_checksums.c:75 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable Datenprüfsummen ausschalten\n" -#: pg_checksums.c:77 +#: pg_checksums.c:76 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable Datenprüfsummen einschalten\n" -#: pg_checksums.c:78 +#: pg_checksums.c:77 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr " -f, --filenode=FILENODE nur Relation mit angegebenem Filenode prüfen\n" -#: pg_checksums.c:79 +#: pg_checksums.c:78 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_checksums.c:80 +#: pg_checksums.c:79 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress Fortschrittsinformationen zeigen\n" -#: pg_checksums.c:81 +#: pg_checksums.c:80 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr "" @@ -224,22 +224,22 @@ msgstr "" " Methode zum Synchronisieren von Dateien auf Festplatte\n" " setzen\n" -#: pg_checksums.c:82 +#: pg_checksums.c:81 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_checksums.c:83 +#: pg_checksums.c:82 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_checksums.c:84 +#: pg_checksums.c:83 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_checksums.c:85 +#: pg_checksums.c:84 #, c-format msgid "" "\n" @@ -252,177 +252,177 @@ msgstr "" "PGDATA verwendet.\n" "\n" -#: pg_checksums.c:87 +#: pg_checksums.c:86 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Berichten Sie Fehler an <%s>.\n" -#: pg_checksums.c:88 +#: pg_checksums.c:87 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_checksums.c:145 +#: pg_checksums.c:144 #, c-format -msgid "%lld/%lld MB (%d%%) computed" -msgstr "%lld/%lld MB (%d%%) berechnet" +msgid "%/% MB (%d%%) computed" +msgstr "%/% MB (%d%%) berechnet" -#: pg_checksums.c:206 +#: pg_checksums.c:205 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "konnte Block %u in Datei »%s« nicht lesen: %m" -#: pg_checksums.c:209 +#: pg_checksums.c:208 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "konnte Block %u in Datei »%s« nicht lesen: %d von %d gelesen" -#: pg_checksums.c:232 +#: pg_checksums.c:231 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "Prüfsummenprüfung fehlgeschlagen in Datei »%s«, Block %u: berechnete Prüfsumme ist %X, aber der Block enthält %X" -#: pg_checksums.c:255 +#: pg_checksums.c:254 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "seek fehlgeschlagen für Block %u in Datei »%s«: %m" -#: pg_checksums.c:262 +#: pg_checksums.c:261 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "konnte Block %u in Datei »%s« nicht schreiben: %m" -#: pg_checksums.c:265 +#: pg_checksums.c:264 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "konnte Block %u in Datei »%s« nicht schreiben: %d von %d geschrieben" -#: pg_checksums.c:277 +#: pg_checksums.c:276 #, c-format msgid "checksums verified in file \"%s\"" msgstr "Prüfsummen wurden überprüft in Datei »%s«" -#: pg_checksums.c:279 +#: pg_checksums.c:278 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "Prüfsummen wurden eingeschaltet in Datei »%s«" -#: pg_checksums.c:362 +#: pg_checksums.c:361 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "ungültige Segmentnummer %d in Dateiname »%s«" -#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 +#: pg_checksums.c:508 pg_checksums.c:524 pg_checksums.c:534 pg_checksums.c:542 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: pg_checksums.c:524 +#: pg_checksums.c:523 #, c-format msgid "no data directory specified" msgstr "kein Datenverzeichnis angegeben" -#: pg_checksums.c:533 +#: pg_checksums.c:532 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_checksums.c:542 +#: pg_checksums.c:541 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "Option -f/--filenode kann nur mit --check verwendet werden" -#: pg_checksums.c:550 +#: pg_checksums.c:549 #, c-format msgid "pg_control CRC value is incorrect" msgstr "CRC-Wert in pg_control ist falsch" -#: pg_checksums.c:553 +#: pg_checksums.c:552 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "die Cluster sind nicht mit dieser Version von pg_checksums kompatibel" -#: pg_checksums.c:557 +#: pg_checksums.c:556 #, c-format msgid "database cluster is not compatible" msgstr "Datenbank-Cluster ist nicht kompatibel" -#: pg_checksums.c:558 +#: pg_checksums.c:557 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "Der Datenbank-Cluster wurde mit Blockgröße %u initialisiert, aber pg_checksums wurde mit Blockgröße %u kompiliert." -#: pg_checksums.c:570 +#: pg_checksums.c:569 #, c-format msgid "cluster must be shut down" msgstr "Cluster muss heruntergefahren sein" -#: pg_checksums.c:574 +#: pg_checksums.c:573 #, c-format msgid "data checksums are not enabled in cluster" msgstr "Datenprüfsummen sind im Cluster nicht eingeschaltet" -#: pg_checksums.c:578 +#: pg_checksums.c:577 #, c-format msgid "data checksums are already disabled in cluster" msgstr "Datenprüfsummen sind im Cluster bereits ausgeschaltet" -#: pg_checksums.c:582 +#: pg_checksums.c:581 #, c-format msgid "data checksums are already enabled in cluster" msgstr "Datenprüfsummen sind im Cluster bereits eingeschaltet" -#: pg_checksums.c:606 +#: pg_checksums.c:605 #, c-format msgid "Checksum operation completed\n" msgstr "Prüfsummenoperation abgeschlossen\n" -#: pg_checksums.c:607 +#: pg_checksums.c:606 #, c-format -msgid "Files scanned: %lld\n" -msgstr "Überprüfte Dateien: %lld\n" +msgid "Files scanned: %\n" +msgstr "Überprüfte Dateien: %\n" -#: pg_checksums.c:608 +#: pg_checksums.c:607 #, c-format -msgid "Blocks scanned: %lld\n" -msgstr "Überprüfte Blöcke: %lld\n" +msgid "Blocks scanned: %\n" +msgstr "Überprüfte Blöcke: %\n" -#: pg_checksums.c:611 +#: pg_checksums.c:610 #, c-format -msgid "Bad checksums: %lld\n" -msgstr "Falsche Prüfsummen: %lld\n" +msgid "Bad checksums: %\n" +msgstr "Falsche Prüfsummen: %\n" -#: pg_checksums.c:612 pg_checksums.c:644 +#: pg_checksums.c:611 pg_checksums.c:643 #, c-format msgid "Data checksum version: %u\n" msgstr "Datenprüfsummenversion: %u\n" -#: pg_checksums.c:619 +#: pg_checksums.c:618 #, c-format -msgid "Files written: %lld\n" -msgstr "Geschriebene Dateien: %lld\n" +msgid "Files written: %\n" +msgstr "Geschriebene Dateien: %\n" -#: pg_checksums.c:620 +#: pg_checksums.c:619 #, c-format -msgid "Blocks written: %lld\n" -msgstr "Geschriebene Blöcke: %lld\n" +msgid "Blocks written: %\n" +msgstr "Geschriebene Blöcke: %\n" -#: pg_checksums.c:636 +#: pg_checksums.c:635 #, c-format msgid "syncing data directory" msgstr "synchronisiere Datenverzeichnis" -#: pg_checksums.c:640 +#: pg_checksums.c:639 #, c-format msgid "updating control file" msgstr "aktualisiere Kontrolldatei" -#: pg_checksums.c:646 +#: pg_checksums.c:645 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Prüfsummen wurden im Cluster eingeschaltet\n" -#: pg_checksums.c:648 +#: pg_checksums.c:647 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Prüfsummen wurden im Cluster ausgeschaltet\n" diff --git a/src/bin/pg_checksums/po/es.po b/src/bin/pg_checksums/po/es.po index 475406d903720..4a45c85987bbe 100644 --- a/src/bin/pg_checksums/po/es.po +++ b/src/bin/pg_checksums/po/es.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_checksums (PostgreSQL) 16\n" +"Project-Id-Version: pg_checksums (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:23+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2025-02-16 19:53+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: pgsql-es-ayuda \n" "Language: es\n" @@ -40,6 +40,106 @@ msgstr "detalle: " msgid "hint: " msgstr "consejo: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "no se pudo abrir archivo «%s» para lectura: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "no se pudo cerrar el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "discordancia en orden de bytes" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"posible discordancia en orden de bytes\n" +"El ordenamiento de bytes usado para almacenar el archivo pg_control puede no\n" +"coincidir con el usado por este programa. En tal caso los resultados de abajo\n" +"serían erróneos, y la instalación de PostgreSQL sería incompatible con este\n" +"directorio de datos." + +#: ../../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 pg_checksums.c:192 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "no se pudo escribir el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_checksums.c:338 pg_checksums.c:407 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "no se pudo hacer stat al archivo «%s»: %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "esta instalación no soporta el método de sync «%s»" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "no se pudo leer el directorio «%s»: %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -50,26 +150,32 @@ msgstr "el valor «%s» no es válido para la opción %s" msgid "%s must be in range %d..%d" msgstr "%s debe estar en el rango %d..%d" -#: pg_checksums.c:79 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "método sync no reconocido: %s" + +#: pg_checksums.c:70 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" "\n" msgstr "" -"%s activa, desactiva o verifica checksums de datos en un clúster PostgreSQL.\n" +"%s activa, desactiva o verifica checksums de datos en un\n" +"clúster PostgreSQL.\n" "\n" -#: pg_checksums.c:80 +#: pg_checksums.c:71 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_checksums.c:81 +#: pg_checksums.c:72 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPCIÓN]... [DATADIR]\n" -#: pg_checksums.c:82 +#: pg_checksums.c:73 #, c-format msgid "" "\n" @@ -78,57 +184,62 @@ msgstr "" "\n" "Opciones:\n" -#: pg_checksums.c:83 +#: pg_checksums.c:74 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR directorio de datos\n" -#: pg_checksums.c:84 +#: pg_checksums.c:75 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check verificar checksums (por omisión)\n" -#: pg_checksums.c:85 +#: pg_checksums.c:76 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable desactivar checksums\n" -#: pg_checksums.c:86 +#: pg_checksums.c:77 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable activar checksums\n" -#: pg_checksums.c:87 +#: pg_checksums.c:78 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr " -f, --filenode=FILENODE verificar sólo la relación con el filenode dado\n" -#: pg_checksums.c:88 +#: pg_checksums.c:79 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_checksums.c:89 +#: pg_checksums.c:80 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostrar información de progreso\n" -#: pg_checksums.c:90 +#: pg_checksums.c:81 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=MÉTODO definir método para sincr. archivos a disco\n" + +#: pg_checksums.c:82 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose desplegar mensajes verbosos\n" -#: pg_checksums.c:91 +#: pg_checksums.c:83 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: pg_checksums.c:92 +#: pg_checksums.c:84 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_checksums.c:93 +#: pg_checksums.c:85 #, c-format msgid "" "\n" @@ -141,192 +252,177 @@ msgstr "" "la variable de entorno PGDATA.\n" "\n" -#: pg_checksums.c:95 +#: pg_checksums.c:87 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Reporte errores a <%s>.\n" -#: pg_checksums.c:96 +#: pg_checksums.c:88 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_checksums.c:153 +#: pg_checksums.c:145 #, c-format msgid "%lld/%lld MB (%d%%) computed" msgstr "%lld/%lld MB (%d%%) calculado" -#: pg_checksums.c:200 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "no se pudo abrir el archivo «%s»: %m" - -#: pg_checksums.c:214 +#: pg_checksums.c:206 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "no se pudo leer el bloque %u del archivo «%s»: %m" -#: pg_checksums.c:217 +#: pg_checksums.c:209 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "no se pudo leer bloque %u en archivo «%s»: leídos %d de %d" -#: pg_checksums.c:240 +#: pg_checksums.c:232 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "verificación de checksums falló en archivo «%s», bloque %u: checksum calculado %X pero bloque contiene %X" -#: pg_checksums.c:263 +#: pg_checksums.c:255 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "posicionamiento (seek) falló para el bloque %u en archivo «%s»: %m" -#: pg_checksums.c:270 +#: pg_checksums.c:262 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" -#: pg_checksums.c:273 +#: pg_checksums.c:265 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron %d de %d" -#: pg_checksums.c:285 +#: pg_checksums.c:277 #, c-format msgid "checksums verified in file \"%s\"" msgstr "checksums verificados en archivo «%s»" -#: pg_checksums.c:287 +#: pg_checksums.c:279 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "checksums activados en archivo «%s»" -#: pg_checksums.c:318 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "no se pudo abrir el directorio «%s»: %m" - -#: pg_checksums.c:342 pg_checksums.c:411 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "no se pudo hacer stat al archivo «%s»: %m" - -#: pg_checksums.c:366 +#: pg_checksums.c:362 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "número de segmento %d no válido en nombre de archivo «%s»" -#: pg_checksums.c:508 pg_checksums.c:524 pg_checksums.c:534 pg_checksums.c:542 +#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: pg_checksums.c:523 +#: pg_checksums.c:524 #, c-format msgid "no data directory specified" msgstr "no se especificó el directorio de datos" -#: pg_checksums.c:532 +#: pg_checksums.c:533 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_checksums.c:541 +#: pg_checksums.c:542 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "la opción -f/--filenode sólo puede usarse con --check" -#: pg_checksums.c:549 +#: pg_checksums.c:550 #, c-format msgid "pg_control CRC value is incorrect" msgstr "el valor de CRC de pg_control es incorrecto" -#: pg_checksums.c:552 +#: pg_checksums.c:553 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "el clúster no es compatible con esta versión de pg_checksums" -#: pg_checksums.c:556 +#: pg_checksums.c:557 #, c-format msgid "database cluster is not compatible" msgstr "el clúster de bases de datos no es compatible" -#: pg_checksums.c:557 +#: pg_checksums.c:558 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "El clúster fue inicializado con tamaño de bloque %u, pero pg_checksums fue compilado con tamaño de bloques %u." -#: pg_checksums.c:569 +#: pg_checksums.c:570 #, c-format msgid "cluster must be shut down" msgstr "el clúster debe estar apagado" -#: pg_checksums.c:573 +#: pg_checksums.c:574 #, c-format msgid "data checksums are not enabled in cluster" msgstr "los checksums de datos no están activados en el clúster" -#: pg_checksums.c:577 +#: pg_checksums.c:578 #, c-format msgid "data checksums are already disabled in cluster" msgstr "los checksums de datos ya están desactivados en el clúster" -#: pg_checksums.c:581 +#: pg_checksums.c:582 #, c-format msgid "data checksums are already enabled in cluster" msgstr "los checksums de datos ya están activados en el clúster" -#: pg_checksums.c:605 +#: pg_checksums.c:606 #, c-format msgid "Checksum operation completed\n" msgstr "Operación de checksums completa\n" -#: pg_checksums.c:606 +#: pg_checksums.c:607 #, c-format msgid "Files scanned: %lld\n" msgstr "Archivos recorridos: %lld\n" -#: pg_checksums.c:607 +#: pg_checksums.c:608 #, c-format msgid "Blocks scanned: %lld\n" msgstr "Bloques recorridos: %lld\n" -#: pg_checksums.c:610 +#: pg_checksums.c:611 #, c-format msgid "Bad checksums: %lld\n" msgstr "Checksums incorrectos: %lld\n" -#: pg_checksums.c:611 pg_checksums.c:643 +#: pg_checksums.c:612 pg_checksums.c:644 #, c-format msgid "Data checksum version: %u\n" msgstr "Versión de checksums de datos: %u\n" -#: pg_checksums.c:618 +#: pg_checksums.c:619 #, c-format msgid "Files written: %lld\n" msgstr "Archivos escritos: %lld\n" -#: pg_checksums.c:619 +#: pg_checksums.c:620 #, c-format msgid "Blocks written: %lld\n" msgstr "Bloques escritos: %lld\n" -#: pg_checksums.c:635 +#: pg_checksums.c:636 #, c-format msgid "syncing data directory" msgstr "sincronizando directorio de datos" -#: pg_checksums.c:639 +#: pg_checksums.c:640 #, c-format msgid "updating control file" msgstr "actualizando archivo de control" -#: pg_checksums.c:645 +#: pg_checksums.c:646 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Checksums activos en el clúster\n" -#: pg_checksums.c:647 +#: pg_checksums.c:648 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Checksums inactivos en el clúster\n" diff --git a/src/bin/pg_checksums/po/fr.po b/src/bin/pg_checksums/po/fr.po index dcdb4c74f1512..dcd82587d4ff4 100644 --- a/src/bin/pg_checksums/po/fr.po +++ b/src/bin/pg_checksums/po/fr.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-05-14 10:21+0000\n" -"PO-Revision-Date: 2022-05-14 17:15+0200\n" +"POT-Creation-Date: 2024-07-20 21:25+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -19,28 +19,128 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:277 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:284 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "attention : " -#: ../../../src/common/logging.c:295 +#: ../../../src/common/logging.c:294 #, c-format msgid "detail: " msgstr "détail : " -#: ../../../src/common/logging.c:302 +#: ../../../src/common/logging.c:301 #, c-format msgid "hint: " msgstr "astuce : " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "n'a pas pu lire le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "n'a pas pu fermer le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "différence de l'ordre des octets" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"possible incohérence dans l'ordre des octets\n" +"L'ordre des octets utilisé pour enregistrer le fichier pg_control peut ne\n" +"pas correspondre à celui utilisé par ce programme. Dans ce cas, les\n" +"résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" +"est incompatible avec ce répertoire des données." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:70 +#: ../../common/file_utils.c:347 ../../common/file_utils.c:406 +#: ../../common/file_utils.c:480 pg_checksums.c:192 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "impossible d'écrire le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "mémoire épuisée\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le système de fichiers pour le fichier « %s » : %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_checksums.c:338 pg_checksums.c:407 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "n'a pas pu tester le fichier « %s » : %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "cette construction ne supporte pas la méthode de synchronisation « %s »" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "n'a pas pu lire le répertoire « %s » : %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -51,7 +151,12 @@ msgstr "valeur « %s » invalide pour l'option %s" msgid "%s must be in range %d..%d" msgstr "%s doit être compris entre %d et %d" -#: pg_checksums.c:79 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "méthode de synchronisation non reconnu : %s" + +#: pg_checksums.c:70 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" @@ -61,17 +166,17 @@ msgstr "" "une instance PostgreSQL.\n" "\n" -#: pg_checksums.c:80 +#: pg_checksums.c:71 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_checksums.c:81 +#: pg_checksums.c:72 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [RÉP_DONNÉES]\n" -#: pg_checksums.c:82 +#: pg_checksums.c:73 #, c-format msgid "" "\n" @@ -80,61 +185,66 @@ msgstr "" "\n" "Options :\n" -#: pg_checksums.c:83 +#: pg_checksums.c:74 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]REP_DONNEES répertoire des données\n" -#: pg_checksums.c:84 +#: pg_checksums.c:75 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check vérifie les sommes de contrôle (par défaut)\n" -#: pg_checksums.c:85 +#: pg_checksums.c:76 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable désactive les sommes de contrôle\n" -#: pg_checksums.c:86 +#: pg_checksums.c:77 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable active les sommes de contrôle\n" -#: pg_checksums.c:87 +#: pg_checksums.c:78 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr "" " -f, --filenode=FILENODE vérifie seulement la relation dont l'identifiant\n" " relfilenode est indiqué\n" -#: pg_checksums.c:88 +#: pg_checksums.c:79 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync n'attend pas que les modifications soient\n" " proprement écrites sur disque\n" -#: pg_checksums.c:89 +#: pg_checksums.c:80 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress affiche la progression de l'opération\n" -#: pg_checksums.c:90 +#: pg_checksums.c:81 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHODE configure la méthode pour synchroniser les fichiers sur disque\n" + +#: pg_checksums.c:82 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose affiche des messages verbeux\n" -#: pg_checksums.c:91 +#: pg_checksums.c:83 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_checksums.c:92 +#: pg_checksums.c:84 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_checksums.c:93 +#: pg_checksums.c:85 #, c-format msgid "" "\n" @@ -147,228 +257,177 @@ msgstr "" "PGDATA est utilisée.\n" "\n" -#: pg_checksums.c:95 +#: pg_checksums.c:87 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapporter les bogues à <%s>.\n" -#: pg_checksums.c:96 +#: pg_checksums.c:88 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: pg_checksums.c:153 +#: pg_checksums.c:145 #, c-format msgid "%lld/%lld MB (%d%%) computed" msgstr "%lld/%lld Mo (%d%%) traités" -#: pg_checksums.c:200 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "n'a pas pu ouvrir le fichier « %s » : %m" - -#: pg_checksums.c:214 +#: pg_checksums.c:206 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "n'a pas pu lire le bloc %u dans le fichier « %s » : %m" -#: pg_checksums.c:217 +#: pg_checksums.c:209 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "n'a pas pu lire le bloc %u dans le fichier « %s » : %d lus sur %d" -#: pg_checksums.c:240 +#: pg_checksums.c:232 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "échec de la vérification de la somme de contrôle dans le fichier « %s », bloc %u : somme de contrôle calculée %X, alors que le bloc contient %X" -#: pg_checksums.c:263 +#: pg_checksums.c:255 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "n'a pas pu rechercher le bloc %u dans le fichier « %s » : %m" -#: pg_checksums.c:270 +#: pg_checksums.c:262 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "n'a pas pu écrire le bloc %u dans le fichier « %s » : %m" -#: pg_checksums.c:273 +#: pg_checksums.c:265 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "n'a pas pu écrire le bloc %u du fichier « %s » : a écrit %d octets sur %d" -#: pg_checksums.c:285 +#: pg_checksums.c:277 #, c-format msgid "checksums verified in file \"%s\"" msgstr "sommes de contrôle vérifiées dans le fichier « %s »" -#: pg_checksums.c:287 +#: pg_checksums.c:279 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "sommes de contrôle activées dans le fichier « %s »" -#: pg_checksums.c:318 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" - -#: pg_checksums.c:342 pg_checksums.c:415 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "n'a pas pu tester le fichier « %s » : %m" - -#: pg_checksums.c:366 +#: pg_checksums.c:362 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "numéro de segment %d invalide dans le nom de fichier « %s »" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:546 +#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: pg_checksums.c:527 +#: pg_checksums.c:524 #, c-format msgid "no data directory specified" msgstr "aucun répertoire de données indiqué" -#: pg_checksums.c:536 +#: pg_checksums.c:533 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_checksums.c:545 +#: pg_checksums.c:542 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "l'option « -f/--filenode » peut seulement être utilisée avec --check" -#: pg_checksums.c:553 +#: pg_checksums.c:550 #, c-format msgid "pg_control CRC value is incorrect" msgstr "la valeur CRC de pg_control n'est pas correcte" -#: pg_checksums.c:556 +#: pg_checksums.c:553 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "l'instance n'est pas compatible avec cette version de pg_checksums" -#: pg_checksums.c:560 +#: pg_checksums.c:557 #, c-format msgid "database cluster is not compatible" msgstr "l'instance n'est pas compatible" -#: pg_checksums.c:561 +#: pg_checksums.c:558 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "L'instance a été initialisée avec une taille de bloc à %u alors que pg_checksums a été compilé avec une taille de bloc à %u." -#: pg_checksums.c:573 +#: pg_checksums.c:570 #, c-format msgid "cluster must be shut down" msgstr "l'instance doit être arrêtée" -#: pg_checksums.c:577 +#: pg_checksums.c:574 #, c-format msgid "data checksums are not enabled in cluster" msgstr "les sommes de contrôle sur les données ne sont pas activées sur cette instance" -#: pg_checksums.c:581 +#: pg_checksums.c:578 #, c-format msgid "data checksums are already disabled in cluster" msgstr "les sommes de contrôle sur les données sont déjà désactivées sur cette instance" -#: pg_checksums.c:585 +#: pg_checksums.c:582 #, c-format msgid "data checksums are already enabled in cluster" msgstr "les sommes de contrôle sur les données sont déjà activées sur cette instance" -#: pg_checksums.c:609 +#: pg_checksums.c:606 #, c-format msgid "Checksum operation completed\n" msgstr "Opération sur les sommes de contrôle terminée\n" -#: pg_checksums.c:610 +#: pg_checksums.c:607 #, c-format msgid "Files scanned: %lld\n" msgstr "Fichiers parcourus : %lld\n" -#: pg_checksums.c:611 +#: pg_checksums.c:608 #, c-format msgid "Blocks scanned: %lld\n" msgstr "Blocs parcourus : %lld\n" -#: pg_checksums.c:614 +#: pg_checksums.c:611 #, c-format msgid "Bad checksums: %lld\n" msgstr "Mauvaises sommes de contrôle : %lld\n" -#: pg_checksums.c:615 pg_checksums.c:647 +#: pg_checksums.c:612 pg_checksums.c:644 #, c-format msgid "Data checksum version: %u\n" msgstr "Version des sommes de contrôle sur les données : %u\n" -#: pg_checksums.c:622 +#: pg_checksums.c:619 #, c-format msgid "Files written: %lld\n" msgstr "Fichiers écrits : %lld\n" -#: pg_checksums.c:623 +#: pg_checksums.c:620 #, c-format msgid "Blocks written: %lld\n" msgstr "Blocs écrits : %lld\n" -#: pg_checksums.c:639 +#: pg_checksums.c:636 #, c-format msgid "syncing data directory" msgstr "synchronisation du répertoire des données" -#: pg_checksums.c:643 +#: pg_checksums.c:640 #, c-format msgid "updating control file" msgstr "mise à jour du fichier de contrôle" -#: pg_checksums.c:649 +#: pg_checksums.c:646 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Sommes de contrôle sur les données activées sur cette instance\n" -#: pg_checksums.c:651 +#: pg_checksums.c:648 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Sommes de contrôle sur les données désactivées sur cette instance\n" - -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide puis quitte\n" - -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version affiche la version puis quitte\n" - -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le répertoire « %s » : %s\n" - -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n" - -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu récupérer les informations sur le fichier « %s » : %s\n" - -#~ msgid "%s: no data directory specified\n" -#~ msgstr "%s : aucun répertoire de données indiqué\n" - -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Essayez « %s --help » pour plus d'informations.\n" - -#, c-format -#~ msgid "fatal: " -#~ msgstr "fatal : " - -#, c-format -#~ msgid "invalid filenode specification, must be numeric: %s" -#~ msgstr "spécification invalide du relfilnode, doit être numérique : %s" diff --git a/src/bin/pg_checksums/po/ja.po b/src/bin/pg_checksums/po/ja.po index f4d3da0256ed6..9241f4704a66a 100644 --- a/src/bin/pg_checksums/po/ja.po +++ b/src/bin/pg_checksums/po/ja.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_checksums (PostgreSQL 17)\n" +"Project-Id-Version: pg_checksums (PostgreSQL 18)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 09:23+0900\n" -"PO-Revision-Date: 2023-09-07 10:23+0900\n" +"POT-Creation-Date: 2025-03-03 16:14+0900\n" +"PO-Revision-Date: 2025-03-31 16:24+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -17,26 +17,125 @@ msgstr "" "X-Generator: Poedit 1.8.13\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "警告: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "詳細: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "ヒント: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "ファイル\"%s\"を読み込み用にオープンできませんでした: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "ファイル\"%s\"の読み込みに失敗しました: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "ファイル\"%s\"をクローズできませんでした: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "バイトオーダが合っていません" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"バイトオーダが異なる可能性があります。\n" +"pg_controlファイルを格納するために使用するバイトオーダが本プログラムで使用\n" +"されるものと一致しないようです。この場合以下の結果は不正確になります。また、\n" +"PostgreSQLインストレーションはこのデータディレクトリと互換性がなくなります。" + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:71 +#: ../../common/file_utils.c:348 ../../common/file_utils.c:407 +#: ../../common/file_utils.c:481 pg_checksums.c:191 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "ファイル\"%s\"をオープンできませんでした: %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "ファイル\"%s\"を書き出せませんでした: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:419 +#: ../../common/file_utils.c:489 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "ファイル\"%s\"をfsyncできませんでした: %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "メモリ不足です\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "nullポインタは複製できません(内部エラー)\n" + +#: ../../common/file_utils.c:77 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "ファイル\"%s\"に対してファイルシステムを同期できませんでした: %m" + +#: ../../common/file_utils.c:121 ../../common/file_utils.c:567 +#: pg_checksums.c:337 pg_checksums.c:406 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "ファイル\"%s\"のstatに失敗しました: %m" + +#: ../../common/file_utils.c:131 ../../common/file_utils.c:228 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "このビルドでは同期方式\"%s\"をサポートしていません" + +#: ../../common/file_utils.c:152 ../../common/file_utils.c:282 +#: pg_checksums.c:309 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" + +#: ../../common/file_utils.c:170 ../../common/file_utils.c:316 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" + +#: ../../common/file_utils.c:499 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -47,17 +146,12 @@ msgstr "オプション%sの不正な値\"%s\"" msgid "%s must be in range %d..%d" msgstr "%sは%d..%dの範囲でなければなりません" -#: ../../fe_utils/option_utils.c:99 -#, c-format -msgid "this build does not support sync method \"%s\"" -msgstr "このビルドでは同期方式\"%s\"をサポートしていません" - #: ../../fe_utils/option_utils.c:106 #, c-format msgid "unrecognized sync method: %s" msgstr "認識できない同期方式: %s" -#: pg_checksums.c:70 +#: pg_checksums.c:69 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" @@ -66,17 +160,17 @@ msgstr "" "%sはPostgreSQLデータベースクラスタにおけるデータチェックサムの有効化、無効化および検証を行います。\n" "\n" -#: pg_checksums.c:71 +#: pg_checksums.c:70 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_checksums.c:72 +#: pg_checksums.c:71 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATADIR]\n" -#: pg_checksums.c:73 +#: pg_checksums.c:72 #, c-format msgid "" "\n" @@ -85,62 +179,62 @@ msgstr "" "\n" "オプション:\n" -#: pg_checksums.c:74 +#: pg_checksums.c:73 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR データディレクトリ\n" -#: pg_checksums.c:75 +#: pg_checksums.c:74 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check データチェックサムを検証(デフォルト)\n" -#: pg_checksums.c:76 +#: pg_checksums.c:75 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable データチェックサムを無効化\n" -#: pg_checksums.c:77 +#: pg_checksums.c:76 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable データチェックサムを有効化\n" -#: pg_checksums.c:78 +#: pg_checksums.c:77 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr " -f, --filenode=FILENODE 指定したファイルノードのリレーションのみ検証\n" -#: pg_checksums.c:79 +#: pg_checksums.c:78 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync ディスクへの安全な書き込みを待機しない\n" -#: pg_checksums.c:80 +#: pg_checksums.c:79 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress 進行状況を表示\n" -#: pg_checksums.c:81 +#: pg_checksums.c:80 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr " --sync-method=METHOD ファイルをディスクに同期させる方法を指定\n" -#: pg_checksums.c:82 +#: pg_checksums.c:81 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 冗長メッセージを出力\n" -#: pg_checksums.c:83 +#: pg_checksums.c:82 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_checksums.c:84 +#: pg_checksums.c:83 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_checksums.c:85 +#: pg_checksums.c:84 #, c-format msgid "" "\n" @@ -152,192 +246,177 @@ msgstr "" "データディレクトリ(DATADIR)が指定されない場合、PGDATA環境変数が使用されます。\n" "\n" -#: pg_checksums.c:87 +#: pg_checksums.c:86 #, c-format msgid "Report bugs to <%s>.\n" msgstr "バグは<%s>に報告してください。\n" -#: pg_checksums.c:88 +#: pg_checksums.c:87 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: pg_checksums.c:145 -#, c-format -msgid "%lld/%lld MB (%d%%) computed" -msgstr "%lld/%lld MB (%d%%) 完了" - -#: pg_checksums.c:192 +#: pg_checksums.c:144 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "ファイル\"%s\"をオープンできませんでした: %m" +msgid "%/% MB (%d%%) computed" +msgstr "%/% MB (%d%%) 完了" -#: pg_checksums.c:206 +#: pg_checksums.c:205 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "ファイル\"%2$s\"で%1$uブロックを読み取れませんでした: %3$m" -#: pg_checksums.c:209 +#: pg_checksums.c:208 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr " ファイル\"%2$s\"のブロック%1$uが読み込めませんでした: %4$d中%3$d読み込み済み" -#: pg_checksums.c:232 +#: pg_checksums.c:231 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "ファイル\"%s\" ブロック%uでチェックサム検証が失敗: 算出したチェックサムは%X 、しかしブロック上の値は%X" -#: pg_checksums.c:255 +#: pg_checksums.c:254 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "ファイル\"%2$s\" ブロック%1$uへのシーク失敗: %3$m" -#: pg_checksums.c:262 +#: pg_checksums.c:261 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "ファイル\"%2$s\"で%1$uブロックが書き出せませんでした: %3$m" -#: pg_checksums.c:265 +#: pg_checksums.c:264 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "ファイル\"%2$s\"のブロック%1$uの書き込みに失敗しました: %4$dバイト中%3$dバイトのみ書き込みました" -#: pg_checksums.c:277 +#: pg_checksums.c:276 #, c-format msgid "checksums verified in file \"%s\"" msgstr "ファイル\"%s\"のチェックサムは検証されました" -#: pg_checksums.c:279 +#: pg_checksums.c:278 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "ファイル\"%s\"のチェックサムは有効化されました" -#: pg_checksums.c:310 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" - -#: pg_checksums.c:334 pg_checksums.c:403 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "ファイル\"%s\"のstatに失敗しました: %m" - -#: pg_checksums.c:358 +#: pg_checksums.c:361 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "ファイル名\"%2$s\"の不正なセグメント番号%1$d" -#: pg_checksums.c:505 pg_checksums.c:521 pg_checksums.c:531 pg_checksums.c:539 +#: pg_checksums.c:508 pg_checksums.c:524 pg_checksums.c:534 pg_checksums.c:542 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細については\"%s --help\"を実行してください。" -#: pg_checksums.c:520 +#: pg_checksums.c:523 #, c-format msgid "no data directory specified" msgstr "データディレクトリが指定されていません" -#: pg_checksums.c:529 +#: pg_checksums.c:532 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます (最初は\"%s\")" -#: pg_checksums.c:538 +#: pg_checksums.c:541 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "オプション-f/--filenodeは--checkを指定したときのみ指定可能" -#: pg_checksums.c:546 +#: pg_checksums.c:549 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_controlのCRC値が正しくありません" -#: pg_checksums.c:549 +#: pg_checksums.c:552 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "クラスタはこのバージョンのpg_checksumsと互換性がありません" -#: pg_checksums.c:553 +#: pg_checksums.c:556 #, c-format msgid "database cluster is not compatible" msgstr "データベースクラスタが非互換です" -#: pg_checksums.c:554 +#: pg_checksums.c:557 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "データベースクラスタはブロックサイズ%uで初期化されています、しかしpg_checksumsはブロックサイズ%uでコンパイルされています。" -#: pg_checksums.c:566 +#: pg_checksums.c:569 #, c-format msgid "cluster must be shut down" msgstr "クラスタはシャットダウンされていなければなりません" -#: pg_checksums.c:570 +#: pg_checksums.c:573 #, c-format msgid "data checksums are not enabled in cluster" msgstr "クラスタのデータチェックサムは有効になっていません" -#: pg_checksums.c:574 +#: pg_checksums.c:577 #, c-format msgid "data checksums are already disabled in cluster" msgstr "クラスタのデータチェックサムはすでに無効になっています" -#: pg_checksums.c:578 +#: pg_checksums.c:581 #, c-format msgid "data checksums are already enabled in cluster" msgstr "クラスタのデータチェックサムはすでに有効になっています" -#: pg_checksums.c:602 +#: pg_checksums.c:605 #, c-format msgid "Checksum operation completed\n" msgstr "チェックサム操作が完了しました\n" -#: pg_checksums.c:603 +#: pg_checksums.c:606 #, c-format -msgid "Files scanned: %lld\n" -msgstr "スキャンしたファイル数: %lld\n" +msgid "Files scanned: %\n" +msgstr "スキャンしたファイル数: %\n" -#: pg_checksums.c:604 +#: pg_checksums.c:607 #, c-format -msgid "Blocks scanned: %lld\n" -msgstr "スキャンしたブロック数: %lld\n" +msgid "Blocks scanned: %\n" +msgstr "スキャンしたブロック数: %\n" -#: pg_checksums.c:607 +#: pg_checksums.c:610 #, c-format -msgid "Bad checksums: %lld\n" -msgstr "不正なチェックサム数: %lld\n" +msgid "Bad checksums: %\n" +msgstr "不正なチェックサム数: %\n" -#: pg_checksums.c:608 pg_checksums.c:640 +#: pg_checksums.c:611 pg_checksums.c:643 #, c-format msgid "Data checksum version: %u\n" msgstr "データチェックサムバージョン: %u\n" -#: pg_checksums.c:615 +#: pg_checksums.c:618 #, c-format -msgid "Files written: %lld\n" -msgstr "スキャンしたファイル数: %lld\n" +msgid "Files written: %\n" +msgstr "スキャンしたファイル数: %\n" -#: pg_checksums.c:616 +#: pg_checksums.c:619 #, c-format -msgid "Blocks written: %lld\n" -msgstr "スキャンしたブロック数: %lld\n" +msgid "Blocks written: %\n" +msgstr "スキャンしたブロック数: %\n" -#: pg_checksums.c:632 +#: pg_checksums.c:635 #, c-format msgid "syncing data directory" msgstr "データディレクトリを同期しています" -#: pg_checksums.c:636 +#: pg_checksums.c:639 #, c-format msgid "updating control file" msgstr "コントロールファイルを更新しています" -#: pg_checksums.c:642 +#: pg_checksums.c:645 #, c-format msgid "Checksums enabled in cluster\n" msgstr "クラスタのチェックサムが有効化されました\n" -#: pg_checksums.c:644 +#: pg_checksums.c:647 #, c-format msgid "Checksums disabled in cluster\n" msgstr "クラスタのチェックサムが無効化されました\n" diff --git a/src/bin/pg_checksums/po/ka.po b/src/bin/pg_checksums/po/ka.po index 71e6f8a8c8cf4..ac8f90bc7cfae 100644 --- a/src/bin/pg_checksums/po/ka.po +++ b/src/bin/pg_checksums/po/ka.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_checksums (PostgreSQL) 17\n" +"Project-Id-Version: pg_checksums (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-02-11 09:53+0000\n" -"PO-Revision-Date: 2024-02-11 14:43+0100\n" +"POT-Creation-Date: 2025-03-02 16:24+0000\n" +"PO-Revision-Date: 2025-03-02 18:36+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,28 +16,126 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "შეცდომა: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "გაფრთხილება: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "დეტალები: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "მინიშნება: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "ფაილის (%s) გახსნის შეცდომა: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "ფაილის (%s) წაკითხვის შეცდომა: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\"-ის წაკითხვის შეცდომა: წაკითხულია %d %zu-დან" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "ფაილის (%s) დახურვის შეცდომა: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "ბაიტების მიმდევრობა არ ემთხვევა" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"ბაიტების მიმდევრობის შესაძლო შეუსაბამობა pg_control ფაილის შესანახად გამოყენებული \n" +"ბაიტების მიმდევრობა შესაძლოა არ ემთხვეოდეს ამ პროგრამის მიერ გამოყენებულს. ამ შემთხვევაში ქვემოთ \n" +"მოცემული შედეგები არასწორი იქნება და PostgreSQL ეს აგება ამ მონაცემთა საქაღალდესთან შეუთავსებელი იქნება." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:71 +#: ../../common/file_utils.c:348 ../../common/file_utils.c:407 +#: ../../common/file_utils.c:481 pg_checksums.c:191 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "ფაილის (%s) გახსნის შეცდომა: %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:419 +#: ../../common/file_utils.c:489 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "ფაილის (%s) fsync-ის შეცდომა: %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "არასაკმარისი მეხსიერება\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" + +#: ../../common/file_utils.c:77 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "შეუძლებელია ფაილური სისტემის სინქრონიზაცია ფაილისთვის \"%s\": %m" + +#: ../../common/file_utils.c:121 ../../common/file_utils.c:567 +#: pg_checksums.c:337 pg_checksums.c:406 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "ფაილი \"%s\" არ არსებობს: %m" + +#: ../../common/file_utils.c:131 ../../common/file_utils.c:228 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "ამ აგებას სინქრონიზაციის მეთოდის \"%s\" მხარდაჭერა არ გააჩნია" + +#: ../../common/file_utils.c:152 ../../common/file_utils.c:282 +#: pg_checksums.c:309 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" + +#: ../../common/file_utils.c:170 ../../common/file_utils.c:316 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "საქაღალდის (%s) წაკითხვის შეცდომა: %m" + +#: ../../common/file_utils.c:499 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "გადარქმევის შეცდომა %s - %s: %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -48,17 +146,12 @@ msgstr "არასწორი მნიშვნელობა \"%s\" პა msgid "%s must be in range %d..%d" msgstr "%s არაა საზღვრებში %d-დან %d-მდე" -#: ../../fe_utils/option_utils.c:99 -#, c-format -msgid "this build does not support sync method \"%s\"" -msgstr "ამ აგებას სინქრონიზაციის მეთოდის \"%s\" მხარდაჭერა არ გააჩნია" - #: ../../fe_utils/option_utils.c:106 #, c-format msgid "unrecognized sync method: %s" msgstr "უცნობი სინქრონიზაციის მეთოდი: %s" -#: pg_checksums.c:70 +#: pg_checksums.c:69 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" @@ -67,17 +160,17 @@ msgstr "" "%s ჩართავს, გამორთავს და შეამოწმებს მონაცემების საკონტროლო ჯამებს PostgreSQL მონაცემთა ბაზის კლასტერში.\n" "\n" -#: pg_checksums.c:71 +#: pg_checksums.c:70 #, c-format msgid "Usage:\n" msgstr "გამოყენება:\n" -#: pg_checksums.c:72 +#: pg_checksums.c:71 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [პარამეტრი]... [მონაცემებისსაქაღალდე]\n" -#: pg_checksums.c:73 +#: pg_checksums.c:72 #, c-format msgid "" "\n" @@ -86,62 +179,62 @@ msgstr "" "\n" "პარამეტრები:\n" -#: pg_checksums.c:74 +#: pg_checksums.c:73 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR მონაცემების საქაღალდე\n" -#: pg_checksums.c:75 +#: pg_checksums.c:74 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check მონაცემების საკნტროლო ჯამის შემოწმება(ნაგულისხმები)\n" -#: pg_checksums.c:76 +#: pg_checksums.c:75 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable მონაცემების საკონტროლო ჯამების გამორთვა\n" -#: pg_checksums.c:77 +#: pg_checksums.c:76 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable მონაცემების საკონტროლო ჯამების ჩართვა\n" -#: pg_checksums.c:78 +#: pg_checksums.c:77 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr " -f, --filenode=ფაილისკვანძი მხოლოდ მითითებულ ფაილის კვანძთან ურთიერთობის შემოწმება\n" -#: pg_checksums.c:79 +#: pg_checksums.c:78 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync არ დაველოდო ცვლილებების დისკზე უსაფრთხოდ ჩაწერას\n" -#: pg_checksums.c:80 +#: pg_checksums.c:79 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress მიმდინარეობის ინფორმაციის ჩვენება\n" -#: pg_checksums.c:81 +#: pg_checksums.c:80 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr " --sync-method=მეთოდი ფაილების დისკზე სინქრონიზაციის მეთოდის დაყენება\n" -#: pg_checksums.c:82 +#: pg_checksums.c:81 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose დამატებითი ინფორმაციის გამოტანა\n" -#: pg_checksums.c:83 +#: pg_checksums.c:82 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: pg_checksums.c:84 +#: pg_checksums.c:83 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: pg_checksums.c:85 +#: pg_checksums.c:84 #, c-format msgid "" "\n" @@ -153,192 +246,179 @@ msgstr "" "თუ მონაცემების საქაღალდე მითითებული არაა, გამოყენებული იქნება \n" "გარემოს ცვლადი PGDATA.\n" -#: pg_checksums.c:87 +#: pg_checksums.c:86 #, c-format msgid "Report bugs to <%s>.\n" msgstr "შეცდომების შესახებ მიწერეთ: <%s>\n" -#: pg_checksums.c:88 +#: pg_checksums.c:87 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: pg_checksums.c:145 -#, c-format -msgid "%lld/%lld MB (%d%%) computed" -msgstr "%lld/%lld მბ (%d%%) გამოთვლილია" - -#: pg_checksums.c:192 +#: pg_checksums.c:144 #, c-format -msgid "could not open file \"%s\": %m" -msgstr "ფაილის (%s) გახსნის შეცდომა: %m" +#| msgid "%lld/%lld MB (%d%%) computed" +msgid "%/% MB (%d%%) computed" +msgstr "%/% მბ (%d%%) გამოთვლილია" -#: pg_checksums.c:206 +#: pg_checksums.c:205 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "ბლოკის %u წაკითხვის შეცდომა ფაილში \"%s\": %m" -#: pg_checksums.c:209 +#: pg_checksums.c:208 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "ბლოკის %u წაკითხვის შეცდომა ფაილში \"%s\": წაკითხულია %d %d-დან" -#: pg_checksums.c:232 +#: pg_checksums.c:231 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "საკონტროლო ჯამის გამოთვლის შეცდომა ფაილში \"%s\", ბლოკი \"%u\": გამოთვლილი საკონტროლო კამია %X, მაგრამ ბლოკი შეიცავს: %X" -#: pg_checksums.c:255 +#: pg_checksums.c:254 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "გადახვევის შეცდომა ბლოკისთვის %u ფაილში \"%s\": %m" -#: pg_checksums.c:262 +#: pg_checksums.c:261 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "ბლოკის %u ჩაწერის შეცდომა ფაილში \"%s\": %m" -#: pg_checksums.c:265 +#: pg_checksums.c:264 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "ბლოკის %u ჩაწერის შეცდომა ფაილში \"%s\": ჩაწერილია %d %d-დან" -#: pg_checksums.c:277 +#: pg_checksums.c:276 #, c-format msgid "checksums verified in file \"%s\"" msgstr "ფაილის საკონტროლო ჯამები შემოწმებულია ფაილში: \"%s\"" -#: pg_checksums.c:279 +#: pg_checksums.c:278 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "ფაილის საკონტროლო ჯამები ჩართულია ფაილიდან: \"%s\"" -#: pg_checksums.c:310 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" - -#: pg_checksums.c:334 pg_checksums.c:403 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "ფაილი \"%s\" არ არსებობს: %m" - -#: pg_checksums.c:358 +#: pg_checksums.c:361 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "სეგმენტის არასწორი ნომერი %d ფაილის სახელში \"%s\"" -#: pg_checksums.c:505 pg_checksums.c:521 pg_checksums.c:531 pg_checksums.c:539 +#: pg_checksums.c:508 pg_checksums.c:524 pg_checksums.c:534 pg_checksums.c:542 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: pg_checksums.c:520 +#: pg_checksums.c:523 #, c-format msgid "no data directory specified" msgstr "მონაცემების საქაღალდე მითითებული არაა" -#: pg_checksums.c:529 +#: pg_checksums.c:532 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "მეტისმეტად ბევრი ბრძანების-სტრიქონის არგუმენტი (პირველია \"%s\")" -#: pg_checksums.c:538 +#: pg_checksums.c:541 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "პარამეტრი -f/--filenode მხოლოდ --check -თან ერთად შეიძლება იქნას გამოყენებული" -#: pg_checksums.c:546 +#: pg_checksums.c:549 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_control CRC მნიშვნელობა არასწორია" -#: pg_checksums.c:549 +#: pg_checksums.c:552 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "კლასტერი შეუთავსებელია pg_checksums-ის ამ ვერსიასთან" -#: pg_checksums.c:553 +#: pg_checksums.c:556 #, c-format msgid "database cluster is not compatible" msgstr "ბაზის კლასტერი შეუთავსებელია" -#: pg_checksums.c:554 +#: pg_checksums.c:557 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "ბაზის კლასტერის ინიციალიზაცია მოხდა ბლოკის ზომით %u მაშინ, როცა pg_checksums აგებულია ბლოკის ზომით: %u." -#: pg_checksums.c:566 +#: pg_checksums.c:569 #, c-format msgid "cluster must be shut down" msgstr "კლასტერი უნდა გამოირთოს" -#: pg_checksums.c:570 +#: pg_checksums.c:573 #, c-format msgid "data checksums are not enabled in cluster" msgstr "კლასტერში მონაცემების საკონტროლო ჯამები ჩართული არაა" -#: pg_checksums.c:574 +#: pg_checksums.c:577 #, c-format msgid "data checksums are already disabled in cluster" msgstr "კლასტერში მონაცემების საკონტროლო ჯამები უკვე გამორთულია" -#: pg_checksums.c:578 +#: pg_checksums.c:581 #, c-format msgid "data checksums are already enabled in cluster" msgstr "კლასტერში მონაცემების საკონტროლო ჯამები უკვე ჩართულია" -#: pg_checksums.c:602 +#: pg_checksums.c:605 #, c-format msgid "Checksum operation completed\n" msgstr "საკონტროლო ჯამების ოპერაცია დასრულდა\n" -#: pg_checksums.c:603 +#: pg_checksums.c:606 #, c-format -msgid "Files scanned: %lld\n" -msgstr "დასკანერებულია ფაილები: %lld\n" +#| msgid "Files scanned: %lld\n" +msgid "Files scanned: %\n" +msgstr "დასკანირებულია ფაილები: %\n" -#: pg_checksums.c:604 +#: pg_checksums.c:607 #, c-format -msgid "Blocks scanned: %lld\n" -msgstr "დასკარერებული ბლოკები: %lld\n" +msgid "Blocks scanned: %\n" +msgstr "დასკანირებულია ბლოკები: %\n" -#: pg_checksums.c:607 +#: pg_checksums.c:610 #, c-format -msgid "Bad checksums: %lld\n" -msgstr "ცუდი საკონტროლო ჯამები: %lld\n" +msgid "Bad checksums: %\n" +msgstr "ცუდი საკონტროლო ჯამები: %\n" -#: pg_checksums.c:608 pg_checksums.c:640 +#: pg_checksums.c:611 pg_checksums.c:643 #, c-format msgid "Data checksum version: %u\n" msgstr "მონაცემების საკონტროლო ჯამის ვერსია: %u\n" -#: pg_checksums.c:615 +#: pg_checksums.c:618 #, c-format -msgid "Files written: %lld\n" -msgstr "ჩაწერილი ფაილები: %lld\n" +msgid "Files written: %\n" +msgstr "ჩაწერილი ფაილები: %\n" -#: pg_checksums.c:616 +#: pg_checksums.c:619 #, c-format -msgid "Blocks written: %lld\n" -msgstr "ჩაწერილი ბლოკები: %lld\n" +msgid "Blocks written: %\n" +msgstr "ჩაწერილი ბლოკები: %\n" -#: pg_checksums.c:632 +#: pg_checksums.c:635 #, c-format msgid "syncing data directory" msgstr "მონაცემების საქაღალდის სინქრონიზაცია" -#: pg_checksums.c:636 +#: pg_checksums.c:639 #, c-format msgid "updating control file" msgstr "საკონტროლო ფაილის ატვირთვა" -#: pg_checksums.c:642 +#: pg_checksums.c:645 #, c-format msgid "Checksums enabled in cluster\n" msgstr "კლასტერში მონაცემების საკონტროლო ჯამები ჩართულია\n" -#: pg_checksums.c:644 +#: pg_checksums.c:647 #, c-format msgid "Checksums disabled in cluster\n" msgstr "კლასტერში საკონტროლო ჯამები გამორთულია\n" diff --git a/src/bin/pg_checksums/po/ko.po b/src/bin/pg_checksums/po/ko.po index 3c9a6027c02f6..f8c71ae2ead3a 100644 --- a/src/bin/pg_checksums/po/ko.po +++ b/src/bin/pg_checksums/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_checksums (PostgreSQL) 16\n" +"Project-Id-Version: pg_checksums (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:53+0000\n" -"PO-Revision-Date: 2023-05-30 12:38+0900\n" +"POT-Creation-Date: 2025-01-17 04:54+0000\n" +"PO-Revision-Date: 2025-01-16 15:23+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: PostgreSQL Korea \n" "Language: ko\n" @@ -36,6 +36,107 @@ msgstr "상세정보: " msgid "hint: " msgstr "힌트: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "읽기용 \"%s\" 파일을 열 수 없음: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "\"%s\" 파일을 읽을 수 없음: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\" 파일을 읽을 수 없음: %d / %zu 바이트만 읽음" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "\"%s\" 파일을 닫을 수 없음: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "바이트 순서 일치하지 않음" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, " +"and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"바이트 순서 일치하지 않는 문제\n" +"바이트 순서 정보는 pg_control 파일을 저장할 때 사용되는데,\n" +"이 파일의 바이트 순서 정보와 이 프로그램에서 사용하는 순서 정보가 다릅니다.\n" +"이럴 경우, 출력 결과가 바르지 않을 수 있고,\n" +"설치된 PostgreSQL 프로그램과 데이터 디렉터리가 호환되지 않을 수 있습니다." + +#: ../../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 pg_checksums.c:192 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "\"%s\" 파일을 열 수 없음: %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "\"%s\" 파일을 쓸 수 없음: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "\"%s\" 파일을 fsync 할 수 없음: %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "널 포인터를 중복할 수 없음 (내부 오류)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "\"%s\" 파일을 위해 파일 시스템 동기화를 할 수 없음: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_checksums.c:338 pg_checksums.c:407 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "이 빌드는 \"%s\" 동기화 방법을 지원하지 않음" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "\"%s\" 디렉터리 열 수 없음: %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -46,7 +147,12 @@ msgstr "\"%s\" 값은 \"%s\" 옵션값으로 유효하지 않음" msgid "%s must be in range %d..%d" msgstr "%s 값은 %d부터 %d까지 지정할 수 있습니다." -#: pg_checksums.c:79 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "알 수 없는 동기화 방법: %s" + +#: pg_checksums.c:70 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database " @@ -57,17 +163,17 @@ msgstr "" "비활성화 또는 유효성 검사를 합니다.\n" "\n" -#: pg_checksums.c:80 +#: pg_checksums.c:71 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_checksums.c:81 +#: pg_checksums.c:72 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [옵션]... [DATADIR]\n" -#: pg_checksums.c:82 +#: pg_checksums.c:73 #, c-format msgid "" "\n" @@ -76,33 +182,33 @@ msgstr "" "\n" "옵션들:\n" -#: pg_checksums.c:83 +#: pg_checksums.c:74 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR 데이터 디렉터리\n" -#: pg_checksums.c:84 +#: pg_checksums.c:75 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check 실 작업 없이, 그냥 검사만 (기본값)\n" -#: pg_checksums.c:85 +#: pg_checksums.c:76 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable 자료 페이지 체크섬 비활성화\n" -#: pg_checksums.c:86 +#: pg_checksums.c:77 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable 자료 페이지 체크섬 활성화\n" -#: pg_checksums.c:87 +#: pg_checksums.c:78 #, c-format msgid "" " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr " -f, --filenode=FILENODE 지정한 파일노드만 검사\n" -#: pg_checksums.c:88 +#: pg_checksums.c:79 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -110,27 +216,32 @@ msgid "" msgstr "" " -N, --no-sync 작업 완료 뒤 디스크 동기화 작업을 하지 않음\n" -#: pg_checksums.c:89 +#: pg_checksums.c:80 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress 진행 과정 보여줌\n" -#: pg_checksums.c:90 +#: pg_checksums.c:81 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD 파일을 디스크에 동기화 하는 방법 지정\n" + +#: pg_checksums.c:82 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 자세한 작업 메시지 보여줌\n" -#: pg_checksums.c:91 +#: pg_checksums.c:83 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_checksums.c:92 +#: pg_checksums.c:84 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_checksums.c:93 +#: pg_checksums.c:85 #, c-format msgid "" "\n" @@ -144,37 +255,32 @@ msgstr "" "사용합니다.\n" "\n" -#: pg_checksums.c:95 +#: pg_checksums.c:87 #, c-format msgid "Report bugs to <%s>.\n" msgstr "문제점 보고 주소: <%s>\n" -#: pg_checksums.c:96 +#: pg_checksums.c:88 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: pg_checksums.c:153 +#: pg_checksums.c:145 #, c-format msgid "%lld/%lld MB (%d%%) computed" msgstr "%lld/%lld MB (%d%%) 계산됨" -#: pg_checksums.c:200 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "\"%s\" 파일을 열 수 없음: %m" - -#: pg_checksums.c:214 +#: pg_checksums.c:206 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %m" -#: pg_checksums.c:217 +#: pg_checksums.c:209 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %d / %d 바이트만 읽음" -#: pg_checksums.c:240 +#: pg_checksums.c:232 #, c-format msgid "" "checksum verification failed in file \"%s\", block %u: calculated checksum " @@ -183,82 +289,72 @@ msgstr "" "\"%s\" 파일, %u 블럭의 체크섬 검사 실패: 계산된 체크섬은 %X 값이지만, 블럭에" "는 %X 값이 있음" -#: pg_checksums.c:263 +#: pg_checksums.c:255 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에서 찾을 수 없음: %m" -#: pg_checksums.c:270 +#: pg_checksums.c:262 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %m" -#: pg_checksums.c:273 +#: pg_checksums.c:265 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %d / %d 바이트만 씀" -#: pg_checksums.c:285 +#: pg_checksums.c:277 #, c-format msgid "checksums verified in file \"%s\"" msgstr "\"%s\" 파일 체크섬 검사 마침" -#: pg_checksums.c:287 +#: pg_checksums.c:279 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "\"%s\" 파일 체크섬 활성화 함" -#: pg_checksums.c:318 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "\"%s\" 디렉터리 열 수 없음: %m" - -#: pg_checksums.c:342 pg_checksums.c:411 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" - -#: pg_checksums.c:366 +#: pg_checksums.c:362 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "잘못된 조각 번호 %d, 해당 파일: \"%s\"" -#: pg_checksums.c:508 pg_checksums.c:524 pg_checksums.c:534 pg_checksums.c:542 +#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 #, c-format msgid "Try \"%s --help\" for more information." msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." -#: pg_checksums.c:523 +#: pg_checksums.c:524 #, c-format msgid "no data directory specified" msgstr "데이터 디렉터리를 지정하지 않았음" -#: pg_checksums.c:532 +#: pg_checksums.c:533 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인수를 지정했음 (처음 \"%s\")" -#: pg_checksums.c:541 +#: pg_checksums.c:542 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "-f/--filenode 옵션은 --check 옵션만 사용할 수 있음" -#: pg_checksums.c:549 +#: pg_checksums.c:550 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_control CRC 값이 잘못되었음" -#: pg_checksums.c:552 +#: pg_checksums.c:553 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "해당 클러스터는 이 버전 pg_checksum과 호환되지 않음" -#: pg_checksums.c:556 +#: pg_checksums.c:557 #, c-format msgid "database cluster is not compatible" msgstr "데이터베이스 클러스터는 호환되지 않음" -#: pg_checksums.c:557 +#: pg_checksums.c:558 #, c-format msgid "" "The database cluster was initialized with block size %u, but pg_checksums " @@ -267,77 +363,77 @@ msgstr "" "이 데이터베이스 클러스터는 %u 블록 크기로 초기화 되었지만, pg_checksum은 %u " "블록 크기로 컴파일 되어있습니다." -#: pg_checksums.c:569 +#: pg_checksums.c:570 #, c-format msgid "cluster must be shut down" msgstr "먼저 서버가 중지되어야 함" -#: pg_checksums.c:573 +#: pg_checksums.c:574 #, c-format msgid "data checksums are not enabled in cluster" msgstr "이 클러스터는 자료 체크섬이 비활성화 상태임" -#: pg_checksums.c:577 +#: pg_checksums.c:578 #, c-format msgid "data checksums are already disabled in cluster" msgstr "이 클러스터는 이미 자료 체크섬이 비활성화 상태임" -#: pg_checksums.c:581 +#: pg_checksums.c:582 #, c-format msgid "data checksums are already enabled in cluster" msgstr "이 클러스터는 이미 자료 체크섬이 활성화 상태임" -#: pg_checksums.c:605 +#: pg_checksums.c:606 #, c-format msgid "Checksum operation completed\n" msgstr "체크섬 작업 완료\n" -#: pg_checksums.c:606 +#: pg_checksums.c:607 #, c-format msgid "Files scanned: %lld\n" msgstr "조사한 파일수: %lld\n" -#: pg_checksums.c:607 +#: pg_checksums.c:608 #, c-format msgid "Blocks scanned: %lld\n" msgstr "조사한 블럭수: %lld\n" -#: pg_checksums.c:610 +#: pg_checksums.c:611 #, c-format msgid "Bad checksums: %lld\n" msgstr "잘못된 체크섬: %lld\n" -#: pg_checksums.c:611 pg_checksums.c:643 +#: pg_checksums.c:612 pg_checksums.c:644 #, c-format msgid "Data checksum version: %u\n" msgstr "자료 체크섬 버전: %u\n" -#: pg_checksums.c:618 +#: pg_checksums.c:619 #, c-format msgid "Files written: %lld\n" msgstr "기록한 파일수: %lld\n" -#: pg_checksums.c:619 +#: pg_checksums.c:620 #, c-format msgid "Blocks written: %lld\n" msgstr "기록한 블럭수: %lld\n" -#: pg_checksums.c:635 +#: pg_checksums.c:636 #, c-format msgid "syncing data directory" msgstr "데이터 디렉터리 fsync 중" -#: pg_checksums.c:639 +#: pg_checksums.c:640 #, c-format msgid "updating control file" msgstr "컨트롤 파일 바꾸는 중" -#: pg_checksums.c:645 +#: pg_checksums.c:646 #, c-format msgid "Checksums enabled in cluster\n" msgstr "이 클러스터는 자료 체크섬 옵션이 활성화 되었음\n" -#: pg_checksums.c:647 +#: pg_checksums.c:648 #, c-format msgid "Checksums disabled in cluster\n" msgstr "이 클러스터는 자료 체크섬 옵션이 비활성화 되었음\n" diff --git a/src/bin/pg_checksums/po/ru.po b/src/bin/pg_checksums/po/ru.po index ebe4636657321..30f9791b0460a 100644 --- a/src/bin/pg_checksums/po/ru.po +++ b/src/bin/pg_checksums/po/ru.po @@ -1,10 +1,10 @@ -# Alexander Lakhin , 2019, 2020, 2021, 2022. +# Alexander Lakhin , 2019, 2020, 2021, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: pg_verify_checksums (PostgreSQL) 11\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-04 10:36+0300\n" -"PO-Revision-Date: 2022-09-05 13:34+0300\n" +"POT-Creation-Date: 2024-09-02 09:29+0300\n" +"PO-Revision-Date: 2024-09-04 13:35+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -32,6 +32,106 @@ msgstr "подробности: " msgid "hint: " msgstr "подсказка: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не удалось открыть файл \"%s\" для чтения: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "не удалось закрыть файл \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "несоответствие порядка байт" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, " +"and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"возможно несоответствие порядка байт\n" +"Порядок байт в файле pg_control может не соответствовать используемому\n" +"этой программой. В этом случае результаты будут неверными и\n" +"установленный PostgreSQL будет несовместим с этим каталогом данных." + +#: ../../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 pg_checksums.c:192 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не удалось записать файл \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_checksums.c:338 pg_checksums.c:407 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не удалось получить информацию о файле \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "эта сборка программы не поддерживает метод синхронизации \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не удалось прочитать каталог \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -42,7 +142,12 @@ msgstr "неверное значение \"%s\" для параметра %s" msgid "%s must be in range %d..%d" msgstr "значение %s должно быть в диапазоне %d..%d" -#: pg_checksums.c:79 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нераспознанный метод синхронизации: %s" + +#: pg_checksums.c:70 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database " @@ -53,17 +158,17 @@ msgstr "" "PostgreSQL.\n" "\n" -#: pg_checksums.c:80 +#: pg_checksums.c:71 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_checksums.c:81 +#: pg_checksums.c:72 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [ПАРАМЕТР]... [КАТАЛОГ]\n" -#: pg_checksums.c:82 +#: pg_checksums.c:73 #, c-format msgid "" "\n" @@ -72,29 +177,29 @@ msgstr "" "\n" "Параметры:\n" -#: pg_checksums.c:83 +#: pg_checksums.c:74 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]КАТ_ДАННЫХ каталог данных\n" -#: pg_checksums.c:84 +#: pg_checksums.c:75 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr "" " -c, --check проверить контрольные суммы данных (по " "умолчанию)\n" -#: pg_checksums.c:85 +#: pg_checksums.c:76 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable отключить контрольные суммы\n" -#: pg_checksums.c:86 +#: pg_checksums.c:77 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable включить контрольные суммы\n" -#: pg_checksums.c:87 +#: pg_checksums.c:78 #, c-format msgid "" " -f, --filenode=FILENODE check only relation with specified filenode\n" @@ -102,7 +207,7 @@ msgstr "" " -f, --filenode=ФАЙЛ_УЗЕЛ проверить только отношение с заданным файловым " "узлом\n" -#: pg_checksums.c:88 +#: pg_checksums.c:79 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -110,27 +215,32 @@ msgid "" msgstr "" " -N, --no-sync не ждать завершения сохранения данных на диске\n" -#: pg_checksums.c:89 +#: pg_checksums.c:80 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показывать прогресс операции\n" -#: pg_checksums.c:90 +#: pg_checksums.c:81 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=МЕТОД метод синхронизации файлов с ФС\n" + +#: pg_checksums.c:82 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose выводить подробные сообщения\n" -#: pg_checksums.c:91 +#: pg_checksums.c:83 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_checksums.c:92 +#: pg_checksums.c:84 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_checksums.c:93 +#: pg_checksums.c:85 #, c-format msgid "" "\n" @@ -144,37 +254,32 @@ msgstr "" "переменной окружения PGDATA.\n" "\n" -#: pg_checksums.c:95 +#: pg_checksums.c:87 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_checksums.c:96 +#: pg_checksums.c:88 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: pg_checksums.c:153 +#: pg_checksums.c:145 #, c-format msgid "%lld/%lld MB (%d%%) computed" msgstr "%lld/%lld МБ (%d%%) обработано" -#: pg_checksums.c:200 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "не удалось открыть файл \"%s\": %m" - -#: pg_checksums.c:214 +#: pg_checksums.c:206 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "не удалось прочитать блок %u в файле \"%s\": %m" -#: pg_checksums.c:217 +#: pg_checksums.c:209 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "не удалось прочитать блок %u в файле \"%s\" (прочитано байт: %d из %d)" -#: pg_checksums.c:240 +#: pg_checksums.c:232 #, c-format msgid "" "checksum verification failed in file \"%s\", block %u: calculated checksum " @@ -183,82 +288,72 @@ msgstr "" "ошибка контрольных сумм в файле \"%s\", блоке %u: вычислена контрольная " "сумма %X, но блок содержит %X" -#: pg_checksums.c:263 +#: pg_checksums.c:255 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "ошибка при переходе к блоку %u в файле \"%s\": %m" -#: pg_checksums.c:270 +#: pg_checksums.c:262 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "не удалось записать блок %u в файл \"%s\": %m" -#: pg_checksums.c:273 +#: pg_checksums.c:265 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "не удалось записать блок %u в файле \"%s\" (записано байт: %d из %d)" -#: pg_checksums.c:285 +#: pg_checksums.c:277 #, c-format msgid "checksums verified in file \"%s\"" msgstr "контрольные суммы в файле \"%s\" проверены" -#: pg_checksums.c:287 +#: pg_checksums.c:279 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "контрольные суммы в файле \"%s\" включены" -#: pg_checksums.c:318 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "не удалось открыть каталог \"%s\": %m" - -#: pg_checksums.c:346 pg_checksums.c:415 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "не удалось получить информацию о файле \"%s\": %m" - -#: pg_checksums.c:370 +#: pg_checksums.c:362 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "неверный номер сегмента %d в имени файла \"%s\"" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:546 +#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: pg_checksums.c:527 +#: pg_checksums.c:524 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: pg_checksums.c:536 +#: pg_checksums.c:533 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_checksums.c:545 +#: pg_checksums.c:542 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "параметр -f/--filenode можно использовать только с --check" -#: pg_checksums.c:553 +#: pg_checksums.c:550 #, c-format msgid "pg_control CRC value is incorrect" msgstr "ошибка контрольного значения в pg_control" -#: pg_checksums.c:556 +#: pg_checksums.c:553 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "кластер несовместим с этой версией pg_checksums" -#: pg_checksums.c:560 +#: pg_checksums.c:557 #, c-format msgid "database cluster is not compatible" msgstr "несовместимый кластер баз данных" -#: pg_checksums.c:561 +#: pg_checksums.c:558 #, c-format msgid "" "The database cluster was initialized with block size %u, but pg_checksums " @@ -267,77 +362,77 @@ msgstr "" "Кластер баз данных был инициализирован с размером блока %u, а утилита " "pg_checksums скомпилирована для размера блока %u." -#: pg_checksums.c:573 +#: pg_checksums.c:570 #, c-format msgid "cluster must be shut down" msgstr "кластер должен быть отключён" -#: pg_checksums.c:577 +#: pg_checksums.c:574 #, c-format msgid "data checksums are not enabled in cluster" msgstr "контрольные суммы в кластере не включены" -#: pg_checksums.c:581 +#: pg_checksums.c:578 #, c-format msgid "data checksums are already disabled in cluster" msgstr "контрольные суммы в кластере уже отключены" -#: pg_checksums.c:585 +#: pg_checksums.c:582 #, c-format msgid "data checksums are already enabled in cluster" msgstr "контрольные суммы в кластере уже включены" -#: pg_checksums.c:609 +#: pg_checksums.c:606 #, c-format msgid "Checksum operation completed\n" msgstr "Обработка контрольных сумм завершена\n" -#: pg_checksums.c:610 +#: pg_checksums.c:607 #, c-format msgid "Files scanned: %lld\n" msgstr "Просканировано файлов: %lld\n" -#: pg_checksums.c:611 +#: pg_checksums.c:608 #, c-format msgid "Blocks scanned: %lld\n" msgstr "Просканировано блоков: %lld\n" -#: pg_checksums.c:614 +#: pg_checksums.c:611 #, c-format msgid "Bad checksums: %lld\n" msgstr "Неверные контрольные суммы: %lld\n" -#: pg_checksums.c:615 pg_checksums.c:647 +#: pg_checksums.c:612 pg_checksums.c:644 #, c-format msgid "Data checksum version: %u\n" msgstr "Версия контрольных сумм данных: %u\n" -#: pg_checksums.c:622 +#: pg_checksums.c:619 #, c-format msgid "Files written: %lld\n" msgstr "Записано файлов: %lld\n" -#: pg_checksums.c:623 +#: pg_checksums.c:620 #, c-format msgid "Blocks written: %lld\n" msgstr "Записано блоков: %lld\n" -#: pg_checksums.c:639 +#: pg_checksums.c:636 #, c-format msgid "syncing data directory" msgstr "синхронизация каталога данных" -#: pg_checksums.c:643 +#: pg_checksums.c:640 #, c-format msgid "updating control file" msgstr "модификация управляющего файла" -#: pg_checksums.c:649 +#: pg_checksums.c:646 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Контрольные суммы в кластере включены\n" -#: pg_checksums.c:651 +#: pg_checksums.c:648 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Контрольные суммы в кластере отключены\n" diff --git a/src/bin/pg_checksums/po/sv.po b/src/bin/pg_checksums/po/sv.po index 8e92a9e5443b1..245aa1722ae29 100644 --- a/src/bin/pg_checksums/po/sv.po +++ b/src/bin/pg_checksums/po/sv.po @@ -1,14 +1,14 @@ # Swedish message translation file for pg_checksums # Copyright (C) 2019 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_checksums (PostgreSQL) package. -# Dennis Björklund , 2019, 2020, 2021, 2022. +# Dennis Björklund , 2019, 2020, 2021, 2022, 2023, 2024. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-05-09 18:52+0000\n" -"PO-Revision-Date: 2022-05-09 21:46+0200\n" +"POT-Creation-Date: 2024-07-12 14:25+0000\n" +"PO-Revision-Date: 2024-07-12 18:57+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -17,26 +17,125 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../../src/common/logging.c:277 +#: ../../../src/common/logging.c:276 #, c-format msgid "error: " msgstr "fel: " -#: ../../../src/common/logging.c:284 +#: ../../../src/common/logging.c:283 #, c-format msgid "warning: " msgstr "varning: " -#: ../../../src/common/logging.c:295 +#: ../../../src/common/logging.c:294 #, c-format msgid "detail: " msgstr "detalj: " -#: ../../../src/common/logging.c:302 +#: ../../../src/common/logging.c:301 #, c-format msgid "hint: " msgstr "tips: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "kunde inte öppna filen \"%s\" för läsning: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "kunde inte läsa fil \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "kunde inte stänga fil \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "byte-ordning stämmer inte" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"möjligt fel i byteordning\n" +"Den byteordning som filen från pg_control lagrats med passar kanske\n" +"inte detta program. I så fall kan nedanstående resultat vara felaktiga\n" +"och PostgreSQL-installationen vara inkompatibel med databaskatalogen." + +#: ../../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 pg_checksums.c:192 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "kunde inte skriva fil \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "kunde inte fsync:a fil \"%s\": %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kan inte duplicera null-pekare (internt fel)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_checksums.c:338 pg_checksums.c:407 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "kunde inte göra stat() på fil \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "detta bygge stöder inte synkmetod \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "kunde inte öppna katalog \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "kunde inte läsa katalog \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -47,7 +146,12 @@ msgstr "ogiltigt värde \"%s\" för flaggan \"%s\"" msgid "%s must be in range %d..%d" msgstr "%s måste vara i intervallet %d..%d" -#: pg_checksums.c:79 +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "okänd synkmetod: %s" + +#: pg_checksums.c:70 #, c-format msgid "" "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" @@ -56,17 +160,17 @@ msgstr "" "%s slår på, slår av eller verifierar datakontrollsummor i ett PostgreSQL databaskluster.\n" "\n" -#: pg_checksums.c:80 +#: pg_checksums.c:71 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_checksums.c:81 +#: pg_checksums.c:72 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [FLAGGA]... [DATAKATALOG]\n" -#: pg_checksums.c:82 +#: pg_checksums.c:73 #, c-format msgid "" "\n" @@ -75,57 +179,62 @@ msgstr "" "\n" "Flaggor:\n" -#: pg_checksums.c:83 +#: pg_checksums.c:74 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATAKAT datakatalog\n" -#: pg_checksums.c:84 +#: pg_checksums.c:75 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check kontrollera datakontrollsummor (standard)\n" -#: pg_checksums.c:85 +#: pg_checksums.c:76 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable slå av datakontrollsummor\n" -#: pg_checksums.c:86 +#: pg_checksums.c:77 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable slå på datakontrollsummor\n" -#: pg_checksums.c:87 +#: pg_checksums.c:78 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" msgstr " -f, --filenode=FILNOD kontrollera bara relation med angiven filnod\n" -#: pg_checksums.c:88 +#: pg_checksums.c:79 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync vänta inte på att ändingar säkert skrivits till disk\n" -#: pg_checksums.c:89 +#: pg_checksums.c:80 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress visa förloppsinformation\n" -#: pg_checksums.c:90 +#: pg_checksums.c:81 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METOD sätt synkmetod för att synka filer till disk\n" + +#: pg_checksums.c:82 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose visa utförliga meddelanden\n" -#: pg_checksums.c:91 +#: pg_checksums.c:83 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_checksums.c:92 +#: pg_checksums.c:84 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_checksums.c:93 +#: pg_checksums.c:85 #, c-format msgid "" "\n" @@ -138,192 +247,177 @@ msgstr "" "PGDATA för detta syfte.\n" "\n" -#: pg_checksums.c:95 +#: pg_checksums.c:87 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapportera fel till <%s>.\n" -#: pg_checksums.c:96 +#: pg_checksums.c:88 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_checksums.c:153 +#: pg_checksums.c:145 #, c-format msgid "%lld/%lld MB (%d%%) computed" msgstr "%lld/%lld MB (%d%%) beräknad" -#: pg_checksums.c:200 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "kunde inte öppna fil \"%s\": %m" - -#: pg_checksums.c:214 +#: pg_checksums.c:206 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "kunde inte läsa block %u i fil \"%s\": %m" -#: pg_checksums.c:217 +#: pg_checksums.c:209 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "kunde inte läsa block %u i fil \"%s\": läste %d av %d" -#: pg_checksums.c:240 +#: pg_checksums.c:232 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "verifiering av kontrollsumma misslyckades i fil \"%s\", block %u: beräknad kontrollsumma är %X men blocket innehåller %X" -#: pg_checksums.c:263 +#: pg_checksums.c:255 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "seek misslyckades för block %u i fil \"%s\": %m" -#: pg_checksums.c:270 +#: pg_checksums.c:262 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "kunde inte skriva block %u i fil \"%s\": %m" -#: pg_checksums.c:273 +#: pg_checksums.c:265 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "kunde inte skriva block %u i fil \"%s\": skrev %d av %d" -#: pg_checksums.c:285 +#: pg_checksums.c:277 #, c-format msgid "checksums verified in file \"%s\"" msgstr "kontrollsummor verifierade i fil \"%s\"" -#: pg_checksums.c:287 +#: pg_checksums.c:279 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "kontrollsummor påslagen i fil \"%s\"" -#: pg_checksums.c:318 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "kunde inte öppna katalog \"%s\": %m" - -#: pg_checksums.c:342 pg_checksums.c:415 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "kunde inte göra stat() på fil \"%s\": %m" - -#: pg_checksums.c:366 +#: pg_checksums.c:362 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "ogiltigt segmentnummer %d i filnamn \"%s\"" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:546 +#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: pg_checksums.c:527 +#: pg_checksums.c:524 #, c-format msgid "no data directory specified" msgstr "ingen datakatalog angiven" -#: pg_checksums.c:536 +#: pg_checksums.c:533 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "för många kommandoradsargument (första är \"%s\")" -#: pg_checksums.c:545 +#: pg_checksums.c:542 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "inställningen -f/--filenode tillåts bara med --check" -#: pg_checksums.c:553 +#: pg_checksums.c:550 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_control CRC-värde är inkorrekt" -#: pg_checksums.c:556 +#: pg_checksums.c:553 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "klustret är inte kompatibelt med denna version av pg_checksums" -#: pg_checksums.c:560 +#: pg_checksums.c:557 #, c-format msgid "database cluster is not compatible" msgstr "databasklustret är inte kompatibelt" -#: pg_checksums.c:561 +#: pg_checksums.c:558 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "Databasklustret initierades med blockstorlek %u men pg_checksums kompilerades med blockstorlek %u." -#: pg_checksums.c:573 +#: pg_checksums.c:570 #, c-format msgid "cluster must be shut down" msgstr "klustret måste stängas ner" -#: pg_checksums.c:577 +#: pg_checksums.c:574 #, c-format msgid "data checksums are not enabled in cluster" msgstr "datakontrollsummor är inte påslaget i klustret" -#: pg_checksums.c:581 +#: pg_checksums.c:578 #, c-format msgid "data checksums are already disabled in cluster" msgstr "datakontrollsummor är redan avslaget i klustret" -#: pg_checksums.c:585 +#: pg_checksums.c:582 #, c-format msgid "data checksums are already enabled in cluster" msgstr "datakontrollsummor är redan påslagna i klustret" -#: pg_checksums.c:609 +#: pg_checksums.c:606 #, c-format msgid "Checksum operation completed\n" msgstr "Kontrollsummeoperation avslutad\n" -#: pg_checksums.c:610 +#: pg_checksums.c:607 #, c-format msgid "Files scanned: %lld\n" msgstr "Skannade filer: %lld\n" -#: pg_checksums.c:611 +#: pg_checksums.c:608 #, c-format msgid "Blocks scanned: %lld\n" msgstr "Skannade block: %lld\n" -#: pg_checksums.c:614 +#: pg_checksums.c:611 #, c-format msgid "Bad checksums: %lld\n" msgstr "Felaktiga kontrollsummor: %lld\n" -#: pg_checksums.c:615 pg_checksums.c:647 +#: pg_checksums.c:612 pg_checksums.c:644 #, c-format msgid "Data checksum version: %u\n" msgstr "Datakontrollsummeversion: %u\n" -#: pg_checksums.c:622 +#: pg_checksums.c:619 #, c-format msgid "Files written: %lld\n" msgstr "Skrivna filer: %lld\n" -#: pg_checksums.c:623 +#: pg_checksums.c:620 #, c-format msgid "Blocks written: %lld\n" msgstr "Skrivna block: %lld\n" -#: pg_checksums.c:639 +#: pg_checksums.c:636 #, c-format msgid "syncing data directory" msgstr "synkar datakatalogen" -#: pg_checksums.c:643 +#: pg_checksums.c:640 #, c-format msgid "updating control file" msgstr "uppdaterar kontrollfil" -#: pg_checksums.c:649 +#: pg_checksums.c:646 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Kontrollsummor påslaget i klustret\n" -#: pg_checksums.c:651 +#: pg_checksums.c:648 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Kontrollsummor avslaget i klustret\n" diff --git a/src/bin/pg_checksums/po/uk.po b/src/bin/pg_checksums/po/uk.po index f27bd1ec3e9a2..747d6867562a4 100644 --- a/src/bin/pg_checksums/po/uk.po +++ b/src/bin/pg_checksums/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-12 10:52+0000\n" -"PO-Revision-Date: 2023-09-05 10:04+0200\n" +"POT-Creation-Date: 2024-08-31 06:25+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_15_STABLE/pg_checksums.pot\n" -"X-Crowdin-File-ID: 888\n" +"X-Crowdin-File: /REL_17_STABLE/pg_checksums.pot\n" +"X-Crowdin-File-ID: 1000\n" #: ../../../src/common/logging.c:276 #, c-format @@ -37,6 +37,101 @@ msgstr "деталі: " msgid "hint: " msgstr "підказка: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" + +#: ../../common/controldata_utils.c:110 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "неправильний порядок байтів" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "можлива помилка у послідовності байтів.\n" +"Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:70 +#: ../../common/file_utils.c:347 ../../common/file_utils.c:406 +#: ../../common/file_utils.c:480 pg_checksums.c:192 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:249 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: pg_checksums.c:338 pg_checksums.c:407 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "ця збірка не підтримує метод синхронізації \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" + #: ../../fe_utils/option_utils.c:69 #, c-format msgid "invalid value \"%s\" for option %s" @@ -47,282 +142,268 @@ msgstr "неприпустиме значення \"%s\" для параметр msgid "%s must be in range %d..%d" msgstr "%s має бути в діапазоні %d..%d" -#: pg_checksums.c:79 +#: ../../fe_utils/option_utils.c:106 #, c-format -msgid "" -"%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" -"\n" -msgstr "" -"%s активує, деактивує або перевіряє контрольні суми даних в кластері бази даних PostgreSQL.\n" -"\n" +msgid "unrecognized sync method: %s" +msgstr "нерозпізнаний метод синхронізації: %s" -#: pg_checksums.c:80 +#: pg_checksums.c:70 +#, c-format +msgid "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n\n" +msgstr "%s активує, деактивує або перевіряє контрольні суми даних в кластері бази даних PostgreSQL.\n\n" + +#: pg_checksums.c:71 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_checksums.c:81 +#: pg_checksums.c:72 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATADIR]\n" -#: pg_checksums.c:82 +#: pg_checksums.c:73 #, c-format -msgid "" -"\n" +msgid "\n" "Options:\n" -msgstr "" -"\n" +msgstr "\n" "Параметри:\n" -#: pg_checksums.c:83 +#: pg_checksums.c:74 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" -msgstr " [-D, --pgdata=]DATADIR каталог даних\n" +msgstr " [-D, --pgdata=]DATADIR каталог даних\n" -#: pg_checksums.c:84 +#: pg_checksums.c:75 #, c-format msgid " -c, --check check data checksums (default)\n" msgstr " -c, --check перевірити контрольні суми даних (за замовчуванням)\n" -#: pg_checksums.c:85 +#: pg_checksums.c:76 #, c-format msgid " -d, --disable disable data checksums\n" msgstr " -d, --disable вимкнути контрольні суми даних\n" -#: pg_checksums.c:86 +#: pg_checksums.c:77 #, c-format msgid " -e, --enable enable data checksums\n" msgstr " -e, --enable активувати контрольні суми даних\n" -#: pg_checksums.c:87 +#: pg_checksums.c:78 #, c-format msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" -msgstr " -f, --filenode=FILENODE перевіряти відношення лише із вказаним файлом\n" +msgstr " -f, --filenode=FILENODE перевіряти відношення лише із вказаним файлом\n" -#: pg_checksums.c:88 +#: pg_checksums.c:79 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" -msgstr " -N, --no-sync не чекати на безпечний запис змін на диск\n" +msgstr " -N, --no-sync не чекати на безпечний запис змін на диск\n" -#: pg_checksums.c:89 +#: pg_checksums.c:80 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показати інформацію про прогрес\n" -#: pg_checksums.c:90 +#: pg_checksums.c:81 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD встановити метод синхронізації файлів на диск\n" + +#: pg_checksums.c:82 #, c-format msgid " -v, --verbose output verbose messages\n" -msgstr " -v, --verbose виводити детальні повідомлення\n" +msgstr " -v, --verbose виводити детальні повідомлення\n" -#: pg_checksums.c:91 +#: pg_checksums.c:83 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію, потім вийти\n" -#: pg_checksums.c:92 +#: pg_checksums.c:84 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку, потім вийти\n" -#: pg_checksums.c:93 +#: pg_checksums.c:85 #, c-format -msgid "" -"\n" +msgid "\n" "If no data directory (DATADIR) is specified, the environment variable PGDATA\n" -"is used.\n" -"\n" -msgstr "" -"\n" -"Якщо каталог даних не вказано (DATADIR), використовується змінна середовища PGDATA.\n" -"\n" +"is used.\n\n" +msgstr "\n" +"Якщо каталог даних не вказано (DATADIR), використовується змінна середовища PGDATA.\n\n" -#: pg_checksums.c:95 +#: pg_checksums.c:87 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Повідомляти про помилки на <%s>.\n" -#: pg_checksums.c:96 +#: pg_checksums.c:88 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: pg_checksums.c:153 +#: pg_checksums.c:145 #, c-format msgid "%lld/%lld MB (%d%%) computed" msgstr "%lld/%lld MB (%d%%) обчислено" -#: pg_checksums.c:200 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "не можливо відкрити файл \"%s\": %m" - -#: pg_checksums.c:214 +#: pg_checksums.c:206 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "не вдалося прочитати блок %u в файлі \"%s\": %m" -#: pg_checksums.c:217 +#: pg_checksums.c:209 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "не вдалося прочитати блок %u у файлі \"%s\": прочитано %d з %d" -#: pg_checksums.c:240 +#: pg_checksums.c:232 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "помилка перевірки контрольних сум у файлі \"%s\", блок %u: обчислена контрольна сума %X, але блок містить %X" -#: pg_checksums.c:263 +#: pg_checksums.c:255 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "помилка пошуку для блоку %u у файлі \"%s\": %m" -#: pg_checksums.c:270 +#: pg_checksums.c:262 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "не вдалося записати блок %u у файл \"%s\": %m" -#: pg_checksums.c:273 +#: pg_checksums.c:265 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "не вдалося записати блок %u у файлі \"%s\": записано %d з %d" -#: pg_checksums.c:285 +#: pg_checksums.c:277 #, c-format msgid "checksums verified in file \"%s\"" msgstr "контрольні суми у файлі \"%s\" перевірені" -#: pg_checksums.c:287 +#: pg_checksums.c:279 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "контрольні суми у файлі \"%s\" активовані" -#: pg_checksums.c:318 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "не вдалося відкрити каталог \"%s\": %m" - -#: pg_checksums.c:342 pg_checksums.c:415 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" - -#: pg_checksums.c:366 +#: pg_checksums.c:362 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "неприпустимий номер сегменту %d в імені файлу \"%s\"" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:546 +#: pg_checksums.c:509 pg_checksums.c:525 pg_checksums.c:535 pg_checksums.c:543 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: pg_checksums.c:527 +#: pg_checksums.c:524 #, c-format msgid "no data directory specified" msgstr "каталог даних не вказано" -#: pg_checksums.c:536 +#: pg_checksums.c:533 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: pg_checksums.c:545 +#: pg_checksums.c:542 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "параметр -f/--filenode може бути використаний тільки з --check" -#: pg_checksums.c:553 +#: pg_checksums.c:550 #, c-format msgid "pg_control CRC value is incorrect" msgstr "значення CRC pg_control неправильне" -#: pg_checksums.c:556 +#: pg_checksums.c:553 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "кластер не сумісний з цією версією pg_checksum" -#: pg_checksums.c:560 +#: pg_checksums.c:557 #, c-format msgid "database cluster is not compatible" msgstr "кластер бази даних не сумісний" -#: pg_checksums.c:561 +#: pg_checksums.c:558 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u." msgstr "Кластер бази даних було ініціалізовано з розміром блоку %u, але pg_checksums було скомпільовано з розміром блоку %u." -#: pg_checksums.c:573 +#: pg_checksums.c:570 #, c-format msgid "cluster must be shut down" msgstr "кластер повинен бути закритий" -#: pg_checksums.c:577 +#: pg_checksums.c:574 #, c-format msgid "data checksums are not enabled in cluster" msgstr "контрольні суми в кластері неактивовані" -#: pg_checksums.c:581 +#: pg_checksums.c:578 #, c-format msgid "data checksums are already disabled in cluster" msgstr "контрольні суми вже неактивовані в кластері" -#: pg_checksums.c:585 +#: pg_checksums.c:582 #, c-format msgid "data checksums are already enabled in cluster" msgstr "контрольні суми вже активовані в кластері" -#: pg_checksums.c:609 +#: pg_checksums.c:606 #, c-format msgid "Checksum operation completed\n" msgstr "Операція контрольної суми завершена\n" -#: pg_checksums.c:610 +#: pg_checksums.c:607 #, c-format msgid "Files scanned: %lld\n" msgstr "Файлів проскановано: %lld\n" -#: pg_checksums.c:611 +#: pg_checksums.c:608 #, c-format msgid "Blocks scanned: %lld\n" msgstr "Блоків відскановано: %lld\n" -#: pg_checksums.c:614 +#: pg_checksums.c:611 #, c-format msgid "Bad checksums: %lld\n" msgstr "Помилкові контрольні суми: %lld\n" -#: pg_checksums.c:615 pg_checksums.c:647 +#: pg_checksums.c:612 pg_checksums.c:644 #, c-format msgid "Data checksum version: %u\n" msgstr "Версія контрольних сум даних: %u\n" -#: pg_checksums.c:622 +#: pg_checksums.c:619 #, c-format msgid "Files written: %lld\n" msgstr "Файлів записано: %lld\n" -#: pg_checksums.c:623 +#: pg_checksums.c:620 #, c-format msgid "Blocks written: %lld\n" msgstr "Блоків записано: %lld\n" -#: pg_checksums.c:639 +#: pg_checksums.c:636 #, c-format msgid "syncing data directory" msgstr "синхронізація даних каталогу" -#: pg_checksums.c:643 +#: pg_checksums.c:640 #, c-format msgid "updating control file" msgstr "оновлення контрольного файлу" -#: pg_checksums.c:649 +#: pg_checksums.c:646 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Контрольні суми активовані в кластері\n" -#: pg_checksums.c:651 +#: pg_checksums.c:648 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Контрольні суми вимкнені у кластері\n" + diff --git a/src/bin/pg_combinebackup/backup_label.c b/src/bin/pg_combinebackup/backup_label.c index e89d4603f09dc..e774bc78a6264 100644 --- a/src/bin/pg_combinebackup/backup_label.c +++ b/src/bin/pg_combinebackup/backup_label.c @@ -247,7 +247,7 @@ parse_lsn(char *s, char *e, XLogRecPtr *lsn, char **c) unsigned lo; *e = '\0'; - success = (sscanf(s, "%X/%X%n", &hi, &lo, &nchars) == 2); + success = (sscanf(s, "%X/%08X%n", &hi, &lo, &nchars) == 2); *e = save; if (success) diff --git a/src/bin/pg_combinebackup/copy_file.c b/src/bin/pg_combinebackup/copy_file.c index b0c94f6ee311b..db6c86223bbda 100644 --- a/src/bin/pg_combinebackup/copy_file.c +++ b/src/bin/pg_combinebackup/copy_file.c @@ -330,7 +330,7 @@ copy_file_link(const char *src, const char *dest, pg_checksum_context *checksum_ctx) { if (link(src, dest) < 0) - pg_fatal("error while linking file from \"%s\" to \"%s\": %m", + pg_fatal("could not create link from \"%s\" to \"%s\": %m", src, dest); /* if needed, calculate checksum of the file */ diff --git a/src/bin/pg_combinebackup/copy_file.h b/src/bin/pg_combinebackup/copy_file.h index 5a8517629c72c..3779edd567793 100644 --- a/src/bin/pg_combinebackup/copy_file.h +++ b/src/bin/pg_combinebackup/copy_file.h @@ -11,7 +11,6 @@ #ifndef COPY_FILE_H #define COPY_FILE_H -#include "c.h" #include "common/checksum_helper.h" /* diff --git a/src/bin/pg_combinebackup/pg_combinebackup.c b/src/bin/pg_combinebackup/pg_combinebackup.c index d61bde42f498b..f5cef99f62730 100644 --- a/src/bin/pg_combinebackup/pg_combinebackup.c +++ b/src/bin/pg_combinebackup/pg_combinebackup.c @@ -24,6 +24,7 @@ #include #endif +#include "access/xlog_internal.h" #include "backup_label.h" #include "common/checksum_helper.h" #include "common/controldata_utils.h" @@ -300,7 +301,7 @@ main(int argc, char *argv[]) { char *controlpath; - controlpath = psprintf("%s/%s", prior_backup_dirs[i], "global/pg_control"); + controlpath = psprintf("%s/%s", prior_backup_dirs[i], XLOG_CONTROL_FILE); pg_fatal("%s: manifest system identifier is %" PRIu64 ", but control file has %" PRIu64, controlpath, @@ -431,7 +432,7 @@ main(int argc, char *argv[]) /* Warn about the possibility of compromising the backups, when link mode */ if (opt.copy_method == COPY_METHOD_LINK) pg_log_warning("--link mode was used; any modifications to the output " - "directory may destructively modify input directories"); + "directory might destructively modify input directories"); /* It's a success, so don't remove the output directories. */ reset_directory_cleanup_list(); @@ -568,7 +569,7 @@ check_backup_label_files(int n_backups, char **backup_dirs) pg_fatal("backup at \"%s\" starts on timeline %u, but expected %u", backup_dirs[i], start_tli, check_tli); if (i < n_backups - 1 && start_lsn != check_lsn) - pg_fatal("backup at \"%s\" starts at LSN %X/%X, but expected %X/%X", + pg_fatal("backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X", backup_dirs[i], LSN_FORMAT_ARGS(start_lsn), LSN_FORMAT_ARGS(check_lsn)); @@ -614,7 +615,7 @@ check_control_files(int n_backups, char **backup_dirs) bool crc_ok; char *controlpath; - controlpath = psprintf("%s/%s", backup_dirs[i], "global/pg_control"); + controlpath = psprintf("%s/%s", backup_dirs[i], XLOG_CONTROL_FILE); pg_log_debug("reading \"%s\"", controlpath); control_file = get_controlfile_by_exact_path(controlpath, &crc_ok); @@ -813,7 +814,7 @@ parse_oid(char *s, Oid *result) * Copy files from the input directory to the output directory, reconstructing * full files from incremental files as required. * - * If processing is a user-defined tablespace, the tsoid should be the OID + * If processing a user-defined tablespace, the tsoid should be the OID * of that tablespace and input_directory and output_directory should be the * toplevel input and output directories for that tablespace. Otherwise, * tsoid should be InvalidOid and input_directory and output_directory should @@ -825,7 +826,7 @@ parse_oid(char *s, Oid *result) * * n_prior_backups is the number of prior backups that we have available. * This doesn't count the very last backup, which is referenced by - * output_directory, just the older ones. prior_backup_dirs is an array of + * input_directory, just the older ones. prior_backup_dirs is an array of * the locations of those previous backups. */ static void diff --git a/src/bin/pg_combinebackup/po/LINGUAS b/src/bin/pg_combinebackup/po/LINGUAS index c675cfe1c72a6..a6af4f7c83594 100644 --- a/src/bin/pg_combinebackup/po/LINGUAS +++ b/src/bin/pg_combinebackup/po/LINGUAS @@ -1 +1 @@ -de ja ka +de es fr ja ka ko ru sv uk diff --git a/src/bin/pg_combinebackup/po/de.po b/src/bin/pg_combinebackup/po/de.po index 8a6b57b9db42d..7b7966539b9fd 100644 --- a/src/bin/pg_combinebackup/po/de.po +++ b/src/bin/pg_combinebackup/po/de.po @@ -1,13 +1,13 @@ # German message translation file for pg_combinebackup -# Copyright (C) 2024 PostgreSQL Global Development Group +# Copyright (C) 2025 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_combinebackup (PostgreSQL) package. # msgid "" msgstr "" -"Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" +"Project-Id-Version: pg_combinebackup (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-21 16:52+0000\n" -"PO-Revision-Date: 2024-06-22 09:58+0200\n" +"POT-Creation-Date: 2025-04-29 04:22+0000\n" +"PO-Revision-Date: 2025-04-29 08:34+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -15,22 +15,22 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "Detail: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "Tipp: " @@ -40,8 +40,8 @@ msgstr "Tipp: " msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" -#: ../../common/controldata_utils.c:110 copy_file.c:146 load_manifest.c:161 -#: load_manifest.c:199 pg_combinebackup.c:1387 reconstruct.c:527 +#: ../../common/controldata_utils.c:110 copy_file.c:164 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1410 reconstruct.c:540 #, c-format msgid "could not read file \"%s\": %m" msgstr "konnte Datei »%s« nicht lesen: %m" @@ -52,8 +52,8 @@ msgid "could not read file \"%s\": read %d of %zu" msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 -#: backup_label.c:174 copy_file.c:64 pg_combinebackup.c:526 -#: pg_combinebackup.c:1162 reconstruct.c:356 reconstruct.c:727 +#: backup_label.c:174 copy_file.c:71 pg_combinebackup.c:548 +#: pg_combinebackup.c:1185 reconstruct.c:369 reconstruct.c:740 #: write_manifest.c:187 #, c-format msgid "could not close file \"%s\": %m" @@ -77,31 +77,32 @@ msgstr "" "diesem Fall wären die Ergebnisse unten falsch und die PostgreSQL-Installation\n" "wäre inkompatibel mit diesem Datenverzeichnis." -#: ../../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 backup_label.c:143 copy_file.c:62 -#: copy_file.c:135 copy_file.c:167 copy_file.c:171 copy_file.c:218 -#: copy_file.c:258 load_manifest.c:128 pg_combinebackup.c:511 -#: pg_combinebackup.c:1154 reconstruct.c:510 reconstruct.c:625 +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:69 +#: ../../common/file_utils.c:370 ../../common/file_utils.c:428 +#: ../../common/file_utils.c:502 backup_label.c:143 copy_file.c:69 +#: copy_file.c:153 copy_file.c:185 copy_file.c:189 copy_file.c:239 +#: copy_file.c:282 load_manifest.c:128 pg_combinebackup.c:533 +#: pg_combinebackup.c:1177 reconstruct.c:523 reconstruct.c:638 #: write_manifest.c:250 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" -#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:746 +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 #: write_manifest.c:260 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" -#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 -#: ../../common/file_utils.c:488 +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:440 +#: ../../common/file_utils.c:510 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" #: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 -#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:853 +#: ../../common/jsonapi.c:2407 ../../common/parse_manifest.c:157 +#: ../../common/parse_manifest.c:852 #, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -130,290 +131,294 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "konnte Dateisystem für Datei »%s« nicht synchronisieren: %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 -#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:664 -#: pg_combinebackup.c:1118 pg_combinebackup.c:1370 reconstruct.c:199 -#: reconstruct.c:408 +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:685 +#: pg_combinebackup.c:1141 pg_combinebackup.c:1393 reconstruct.c:204 +#: reconstruct.c:421 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "diese Installation unterstützt Sync-Methode »%s« nicht" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 -#: pg_combinebackup.c:920 pg_combinebackup.c:1243 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 +#: pg_combinebackup.c:943 pg_combinebackup.c:1266 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../../common/file_utils.c:498 +#: ../../common/file_utils.c:520 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" -#: ../../common/jsonapi.c:2121 +#: ../../common/jsonapi.c:2432 msgid "Recursive descent parser cannot use incremental lexer." msgstr "Parser mit rekursivem Abstieg kann inkrementellen Lexer nicht benutzen." -#: ../../common/jsonapi.c:2123 +#: ../../common/jsonapi.c:2434 msgid "Incremental parser requires incremental lexer." msgstr "Inkrementeller Parser benötigt inkrementellen Lexer." -#: ../../common/jsonapi.c:2125 +#: ../../common/jsonapi.c:2436 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "JSON zu tief geschachtelt, maximale erlaubte Tiefe ist 6400." -#: ../../common/jsonapi.c:2127 +#: ../../common/jsonapi.c:2438 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "Escape-Sequenz »\\%.*s« ist nicht gültig." -#: ../../common/jsonapi.c:2131 +#: ../../common/jsonapi.c:2442 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Zeichen mit Wert 0x%02x muss escapt werden." -#: ../../common/jsonapi.c:2135 +#: ../../common/jsonapi.c:2446 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "Ende der Eingabe erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2138 +#: ../../common/jsonapi.c:2449 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "Array-Element oder »]« erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2141 +#: ../../common/jsonapi.c:2452 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "»,« oder »]« erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2144 +#: ../../common/jsonapi.c:2455 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "»:« erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2147 +#: ../../common/jsonapi.c:2458 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "JSON-Wert erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2150 +#: ../../common/jsonapi.c:2461 msgid "The input string ended unexpectedly." msgstr "Die Eingabezeichenkette endete unerwartet." -#: ../../common/jsonapi.c:2152 +#: ../../common/jsonapi.c:2463 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "Zeichenkette oder »}« erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2155 +#: ../../common/jsonapi.c:2466 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "»,« oder »}« erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2158 +#: ../../common/jsonapi.c:2469 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "Zeichenkette erwartet, aber »%.*s« gefunden." -#: ../../common/jsonapi.c:2161 +#: ../../common/jsonapi.c:2472 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "Token »%.*s« ist ungültig." -#: ../../common/jsonapi.c:2164 +#: ../../common/jsonapi.c:2478 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kann nicht in »text« umgewandelt werden." -#: ../../common/jsonapi.c:2166 +#: ../../common/jsonapi.c:2480 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "Nach »\\u« müssen vier Hexadezimalziffern folgen." -#: ../../common/jsonapi.c:2169 +#: ../../common/jsonapi.c:2483 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:2178 +#: ../../common/jsonapi.c:2492 #, 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:2185 +#: ../../common/jsonapi.c:2499 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicode-High-Surrogate darf nicht auf ein High-Surrogate folgen." -#: ../../common/jsonapi.c:2187 +#: ../../common/jsonapi.c:2501 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicode-Low-Surrogate muss auf ein High-Surrogate folgen." -#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:855 +#: ../../common/jsonapi.c:2523 +msgid "out of memory while constructing error description" +msgstr "Speicher aufgebraucht beim Konstruieren der Fehlerbeschreibung" + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:854 #, c-format msgid "could not initialize checksum of manifest" msgstr "konnte Prüfsumme des Manifests nicht initialisieren" -#: ../../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 "Manifest endete unerwartet" -#: ../../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 "konnte Prüfsumme des Manifests nicht aktualisieren" -#: ../../common/parse_manifest.c:302 +#: ../../common/parse_manifest.c:301 msgid "unexpected object start" msgstr "unerwarteter Objektstart" -#: ../../common/parse_manifest.c:337 +#: ../../common/parse_manifest.c:336 msgid "unexpected object end" msgstr "unerwartetes Objektende" -#: ../../common/parse_manifest.c:366 +#: ../../common/parse_manifest.c:365 msgid "unexpected array start" msgstr "unerwarteter Array-Start" -#: ../../common/parse_manifest.c:391 +#: ../../common/parse_manifest.c:390 msgid "unexpected array end" msgstr "unerwartetes Array-Ende" -#: ../../common/parse_manifest.c:418 +#: ../../common/parse_manifest.c:417 msgid "expected version indicator" msgstr "unerwartete Versionskennzeichnung" -#: ../../common/parse_manifest.c:454 +#: ../../common/parse_manifest.c:453 msgid "unrecognized top-level field" msgstr "unbekanntes Feld auf oberster Ebene" -#: ../../common/parse_manifest.c:473 +#: ../../common/parse_manifest.c:472 msgid "unexpected file field" msgstr "unerwartetes Feld für Datei" -#: ../../common/parse_manifest.c:487 +#: ../../common/parse_manifest.c:486 msgid "unexpected WAL range field" msgstr "unerwartetes Feld für WAL-Bereich" -#: ../../common/parse_manifest.c:493 +#: ../../common/parse_manifest.c:492 msgid "unexpected object field" msgstr "unbekanntes Feld für Objekt" -#: ../../common/parse_manifest.c:583 +#: ../../common/parse_manifest.c:582 msgid "unexpected scalar" msgstr "unerwarteter Skalar" -#: ../../common/parse_manifest.c:609 +#: ../../common/parse_manifest.c:608 msgid "manifest version not an integer" msgstr "Manifestversion ist keine ganze Zahl" -#: ../../common/parse_manifest.c:613 +#: ../../common/parse_manifest.c:612 msgid "unexpected manifest version" msgstr "unerwartete Manifestversion" -#: ../../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 "Systemidentifikator im Manifest ist keine ganze Zahl" -#: ../../common/parse_manifest.c:662 +#: ../../common/parse_manifest.c:661 msgid "missing path name" msgstr "fehlender Pfadname" -#: ../../common/parse_manifest.c:665 +#: ../../common/parse_manifest.c:664 msgid "both path name and encoded path name" msgstr "sowohl Pfadname als auch kodierter Pfadname angegeben" -#: ../../common/parse_manifest.c:667 +#: ../../common/parse_manifest.c:666 msgid "missing size" msgstr "Größenangabe fehlt" -#: ../../common/parse_manifest.c:670 +#: ../../common/parse_manifest.c:669 msgid "checksum without algorithm" msgstr "Prüfsumme ohne Algorithmus" -#: ../../common/parse_manifest.c:684 +#: ../../common/parse_manifest.c:683 msgid "could not decode file name" msgstr "konnte Dateinamen nicht dekodieren" -#: ../../common/parse_manifest.c:694 +#: ../../common/parse_manifest.c:693 msgid "file size is not an integer" msgstr "Dateigröße ist keine ganze Zahl" -#: ../../common/parse_manifest.c:700 pg_combinebackup.c:190 +#: ../../common/parse_manifest.c:699 pg_combinebackup.c:204 #, c-format msgid "unrecognized checksum algorithm: \"%s\"" msgstr "unbekannter Prüfsummenalgorithmus: »%s«" -#: ../../common/parse_manifest.c:719 +#: ../../common/parse_manifest.c:718 #, c-format msgid "invalid checksum for file \"%s\": \"%s\"" msgstr "ungültige Prüfsumme für Datei »%s«: »%s«" -#: ../../common/parse_manifest.c:762 +#: ../../common/parse_manifest.c:761 msgid "missing timeline" msgstr "Zeitleiste fehlt" -#: ../../common/parse_manifest.c:764 +#: ../../common/parse_manifest.c:763 msgid "missing start LSN" msgstr "Start-LSN fehlt" -#: ../../common/parse_manifest.c:766 +#: ../../common/parse_manifest.c:765 msgid "missing end LSN" msgstr "End-LSN fehlt" -#: ../../common/parse_manifest.c:772 +#: ../../common/parse_manifest.c:771 msgid "timeline is not an integer" msgstr "Zeitleiste ist keine ganze Zahl" -#: ../../common/parse_manifest.c:775 +#: ../../common/parse_manifest.c:774 msgid "could not parse start LSN" msgstr "konnte Start-LSN nicht parsen" -#: ../../common/parse_manifest.c:778 +#: ../../common/parse_manifest.c:777 msgid "could not parse end LSN" msgstr "konnte End-LSN nicht parsen" -#: ../../common/parse_manifest.c:843 +#: ../../common/parse_manifest.c:842 msgid "expected at least 2 lines" msgstr "mindestens 2 Zeilen erwartet" -#: ../../common/parse_manifest.c:846 +#: ../../common/parse_manifest.c:845 msgid "last line not newline-terminated" msgstr "letzte Zeile nicht durch Newline abgeschlossen" -#: ../../common/parse_manifest.c:865 +#: ../../common/parse_manifest.c:864 #, c-format msgid "could not finalize checksum of manifest" msgstr "konnte Prüfsumme des Manifests nicht abschließen" -#: ../../common/parse_manifest.c:869 +#: ../../common/parse_manifest.c:868 #, c-format msgid "manifest has no checksum" msgstr "Manifest hat keine Prüfsumme" -#: ../../common/parse_manifest.c:873 +#: ../../common/parse_manifest.c:872 #, c-format msgid "invalid manifest checksum: \"%s\"" msgstr "ungültige Manifestprüfsumme: »%s«" -#: ../../common/parse_manifest.c:877 +#: ../../common/parse_manifest.c:876 #, c-format msgid "manifest checksum mismatch" msgstr "Manifestprüfsumme stimmt nicht überein" -#: ../../common/parse_manifest.c:892 +#: ../../common/parse_manifest.c:891 #, c-format msgid "could not parse backup manifest: %s" msgstr "konnte Backup-Manifest nicht parsen: %s" @@ -463,67 +468,72 @@ msgstr "%s: konnte %s nicht finden" msgid "%s: %s requires %s" msgstr "%s: %s benötigt %s" -#: backup_label.c:162 reconstruct.c:748 write_manifest.c:262 +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 #, c-format msgid "could not write file \"%s\": wrote %d of %d" msgstr "konnte Datei »%s« nicht schreiben: %d von %d geschrieben" -#: backup_label.c:166 copy_file.c:142 copy_file.c:189 reconstruct.c:708 -#: reconstruct.c:754 write_manifest.c:270 +#: backup_label.c:166 copy_file.c:160 copy_file.c:207 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 #, c-format msgid "could not update checksum of file \"%s\"" msgstr "konnte Prüfsumme der Datei »%s« nicht aktualisieren" -#: copy_file.c:182 +#: copy_file.c:200 #, c-format msgid "could not write to file \"%s\": %m" msgstr "konnte nicht in Datei »%s« schreiben: %m" -#: copy_file.c:184 +#: copy_file.c:202 #, c-format msgid "could not write to file \"%s\", offset %u: wrote %d of %d" msgstr "konnte nicht in Datei »%s«, Position %u schreiben: %d von %d geschrieben" -#: copy_file.c:195 reconstruct.c:771 +#: copy_file.c:213 reconstruct.c:784 #, c-format msgid "could not read from file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" -#: copy_file.c:214 +#: copy_file.c:232 #, c-format msgid "error while cloning file \"%s\" to \"%s\": %m" msgstr "Fehler beim Klonen von Datei »%s« nach »%s«: %m" -#: copy_file.c:222 copy_file.c:262 +#: copy_file.c:243 copy_file.c:286 #, c-format msgid "could not create file \"%s\": %m" msgstr "konnte Datei »%s« nicht erstellen: %m" -#: copy_file.c:230 +#: copy_file.c:251 #, c-format msgid "error while cloning file \"%s\" to \"%s\": %s" msgstr "Fehler beim Klonen von Datei »%s« nach »%s«: %s" -#: copy_file.c:235 pg_combinebackup.c:239 +#: copy_file.c:259 pg_combinebackup.c:256 #, c-format msgid "file cloning not supported on this platform" msgstr "Klonen von Dateien wird auf dieser Plattform nicht unterstützt" -#: copy_file.c:268 reconstruct.c:691 +#: copy_file.c:292 reconstruct.c:704 #, c-format msgid "error while copying file range from \"%s\" to \"%s\": %m" msgstr "Fehler beim Kopieren von Dateibereich von »%s« nach »%s«: %m" -#: copy_file.c:275 pg_combinebackup.c:252 reconstruct.c:711 +#: copy_file.c:299 pg_combinebackup.c:269 reconstruct.c:724 #, c-format msgid "copy_file_range not supported on this platform" msgstr "copy_file_range wird auf dieser Plattform nicht unterstützt" -#: copy_file.c:290 +#: copy_file.c:314 #, c-format msgid "could not copy file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht nach »%s« kopieren: %m" +#: copy_file.c:333 +#, c-format +msgid "could not create link from \"%s\" to \"%s\": %m" +msgstr "konnte Verknüpfung von »%s« nach »%s« nicht erzeugen: %m" + #: load_manifest.c:125 #, c-format msgid "file \"%s\" does not exist" @@ -539,147 +549,152 @@ msgstr "konnte Datei »%s« nicht lesen: %d von %lld gelesen" msgid "could not read file \"%s\": read %lld of %lld" msgstr "konnte Datei »%s« nicht lesen: %lld von %lld gelesen" -#: load_manifest.c:249 +#: load_manifest.c:248 #, c-format msgid "backup manifest version 1 does not support incremental backup" msgstr "Backup-Manifest Version 1 unterstützt kein inkrementelles Backup" -#: load_manifest.c:281 +#: load_manifest.c:280 #, c-format msgid "duplicate path name in backup manifest: \"%s\"" msgstr "doppelter Pfadname im Backup-Manifest: »%s«" -#: pg_combinebackup.c:208 pg_combinebackup.c:216 +#: pg_combinebackup.c:225 pg_combinebackup.c:233 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: pg_combinebackup.c:215 +#: pg_combinebackup.c:232 #, c-format msgid "no input directories specified" msgstr "keine Eingabeverzeichnisse angegeben" -#: pg_combinebackup.c:221 +#: pg_combinebackup.c:238 #, c-format msgid "no output directory specified" msgstr "kein Ausgabeverzeichnis angegeben" -#: pg_combinebackup.c:289 +#: pg_combinebackup.c:306 #, c-format -msgid "%s: manifest system identifier is %llu, but control file has %llu" -msgstr "%s: Systemidentifikator im Manifest ist %llu, aber Kontrolldatei hat %llu" +msgid "%s: manifest system identifier is %, but control file has %" +msgstr "%s: Systemidentifikator im Manifest ist %, aber Kontrolldatei hat %" -#: pg_combinebackup.c:328 +#: pg_combinebackup.c:345 #, c-format -msgid "can't generate a manifest because no manifest is available for the final input backup" +msgid "cannot generate a manifest because no manifest is available for the final input backup" msgstr "kann kein Manifest erzeugen, weil kein Manifest für das letzte Eingabe-Backup verfügbar ist" -#: pg_combinebackup.c:375 +#: pg_combinebackup.c:392 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "konnte symbolische Verknüpfung von »%s« nach »%s« nicht erzeugen: %m" -#: pg_combinebackup.c:387 pg_combinebackup.c:718 pg_combinebackup.c:914 +#: pg_combinebackup.c:404 pg_combinebackup.c:739 pg_combinebackup.c:937 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: pg_combinebackup.c:442 +#: pg_combinebackup.c:434 +#, c-format +msgid "--link mode was used; any modifications to the output directory might destructively modify input directories" +msgstr "Modus --link wurde verwendet; Änderungen am Ausgabeverzeichnis könnten die Eingabeverzeichnisse destruktiv verändern" + +#: pg_combinebackup.c:464 #, c-format msgid "directory name too long" msgstr "Verzeichnisname zu lang" -#: pg_combinebackup.c:449 +#: pg_combinebackup.c:471 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "mehrere »=«-Zeichen im Tablespace-Mapping" -#: pg_combinebackup.c:457 +#: pg_combinebackup.c:479 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "ungültiges Tablespace-Mapping-Format »%s«, muss »ALTES_VERZ=NEUES_VERZ« sein" -#: pg_combinebackup.c:468 pg_combinebackup.c:472 +#: pg_combinebackup.c:490 pg_combinebackup.c:494 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "altes Verzeichnis im Tablespace-Mapping ist kein absoluter Pfad: %s" -#: pg_combinebackup.c:541 +#: pg_combinebackup.c:563 #, c-format msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" msgstr "Backup in »%s« ist ein volles Backup, aber nur das erste Backup sollte ein volles Backup sein" -#: pg_combinebackup.c:544 +#: pg_combinebackup.c:566 #, c-format msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" msgstr "Backup in »%s« ist ein inkrementelles Backup, aber das erste Backup sollte ein volles Backup sein" -#: pg_combinebackup.c:547 +#: pg_combinebackup.c:569 #, c-format msgid "backup at \"%s\" starts on timeline %u, but expected %u" msgstr "Backup in »%s« startet auf Zeitleiste %u, aber %u wurde erwartet" -#: pg_combinebackup.c:550 +#: pg_combinebackup.c:572 #, c-format msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" msgstr "Backup in »%s« startet bei LSN %X/%X, aber %X/%X wurde erwartet" -#: pg_combinebackup.c:602 +#: pg_combinebackup.c:624 #, c-format msgid "%s: CRC is incorrect" msgstr "%s: CRC ist falsch" -#: pg_combinebackup.c:606 +#: pg_combinebackup.c:628 #, c-format msgid "%s: unexpected control file version" msgstr "%s: unerwartete Kontrolldateiversion" -#: pg_combinebackup.c:613 +#: pg_combinebackup.c:635 #, c-format -msgid "%s: expected system identifier %llu, but found %llu" -msgstr "%s: Systemidentifikator %llu erwartet, aber %llu gefunden" +msgid "%s: expected system identifier %, but found %" +msgstr "%s: Systemidentifikator % erwartet, aber % gefunden" -#: pg_combinebackup.c:645 +#: pg_combinebackup.c:666 #, c-format msgid "only some backups have checksums enabled" msgstr "nur einige Sicherungen haben Prüfsummen aktiviert" -#: pg_combinebackup.c:646 +#: pg_combinebackup.c:667 #, c-format -msgid "disable, and optionally reenable, checksums on the output directory to avoid failures" -msgstr "schalten Sie für das Ausgabeverzeichnis Prüfsummen aus, und optional wieder an, um Fehler zu vermeiden" +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "Schalten Sie für das Ausgabeverzeichnis Prüfsummen aus, und optional wieder an, um Fehler zu vermeiden." -#: pg_combinebackup.c:681 +#: pg_combinebackup.c:702 #, c-format msgid "removing output directory \"%s\"" msgstr "Ausgabeverzeichnis »%s« wird entfernt" -#: pg_combinebackup.c:683 +#: pg_combinebackup.c:704 #, c-format msgid "failed to remove output directory" msgstr "konnte Ausgabeverzeichnis nicht entfernen" -#: pg_combinebackup.c:687 +#: pg_combinebackup.c:708 #, c-format msgid "removing contents of output directory \"%s\"" msgstr "entferne Inhalt des Ausgabeverzeichnisses »%s«" -#: pg_combinebackup.c:690 +#: pg_combinebackup.c:711 #, c-format msgid "failed to remove contents of output directory" msgstr "konnte Inhalt des Ausgabeverzeichnisses nicht entfernen" -#: pg_combinebackup.c:730 +#: pg_combinebackup.c:751 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "Verzeichnis »%s« existiert aber ist nicht leer" -#: pg_combinebackup.c:733 +#: pg_combinebackup.c:754 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" -#: pg_combinebackup.c:747 +#: pg_combinebackup.c:768 #, c-format msgid "" "%s reconstructs full backups from incrementals.\n" @@ -688,17 +703,17 @@ msgstr "" "%s rekonstruiert volle Backups aus inkrementellen.\n" "\n" -#: pg_combinebackup.c:748 +#: pg_combinebackup.c:769 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_combinebackup.c:749 +#: pg_combinebackup.c:770 #, c-format msgid " %s [OPTION]... DIRECTORY...\n" msgstr " %s [OPTION]... VERZEICHNIS...\n" -#: pg_combinebackup.c:750 +#: pg_combinebackup.c:771 #, c-format msgid "" "\n" @@ -707,29 +722,34 @@ msgstr "" "\n" "Optionen:\n" -#: pg_combinebackup.c:751 +#: pg_combinebackup.c:772 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug erzeuge eine Menge Debug-Ausgaben\n" -#: pg_combinebackup.c:752 +#: pg_combinebackup.c:773 +#, c-format +msgid " -k, --link link files instead of copying\n" +msgstr " -k, --link Dateien verknüpfen statt kopieren\n" + +#: pg_combinebackup.c:774 #, c-format msgid " -n, --dry-run do not actually do anything\n" msgstr " -n, --dry-run nichts wirklich ausführen\n" -#: pg_combinebackup.c:753 +#: pg_combinebackup.c:775 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_combinebackup.c:754 +#: pg_combinebackup.c:776 #, c-format msgid " -o, --output=DIRECTORY output directory\n" msgstr " -o, --output=VERZEICHNIS Ausgabeverzeichnis\n" -#: pg_combinebackup.c:755 +#: pg_combinebackup.c:777 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -738,17 +758,22 @@ msgstr "" " -T, --tablespace-mapping=ALTES_VERZ=NEUES_VERZ\n" " Tablespace in ALTES_VERZ nach NEUES_VERZ verlagern\n" -#: pg_combinebackup.c:757 +#: pg_combinebackup.c:779 #, c-format -msgid " --clone clone (reflink) instead of copying files\n" +msgid " --clone clone (reflink) files instead of copying\n" msgstr " --clone Dateien klonen (reflink) statt kopieren\n" -#: pg_combinebackup.c:758 +#: pg_combinebackup.c:780 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy Dateien kopieren (Voreinstellung)\n" + +#: pg_combinebackup.c:781 #, c-format -msgid " --copy-file-range copy using copy_file_range() syscall\n" +msgid " --copy-file-range copy using copy_file_range() system call\n" msgstr " --copy-file-range mit Systemaufruf copy_file_range() kopieren\n" -#: pg_combinebackup.c:759 +#: pg_combinebackup.c:782 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -757,29 +782,29 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " Algorithmus für Manifest-Prüfsummen\n" -#: pg_combinebackup.c:761 +#: pg_combinebackup.c:784 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest Erzeugen des Backup-Manifests unterbinden\n" -#: pg_combinebackup.c:762 +#: pg_combinebackup.c:785 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr "" " --sync-method=METHODE Methode zum Synchronisieren vond Dateien auf\n" " Festplatte setzen\n" -#: pg_combinebackup.c:763 +#: pg_combinebackup.c:786 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_combinebackup.c:764 +#: pg_combinebackup.c:787 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_combinebackup.c:766 +#: pg_combinebackup.c:789 #, c-format msgid "" "\n" @@ -788,107 +813,107 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_combinebackup.c:767 +#: pg_combinebackup.c:790 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_combinebackup.c:982 +#: pg_combinebackup.c:1005 #, c-format msgid "skipping symbolic link \"%s\"" msgstr "überspringe symbolische Verknüpfung »%s«" -#: pg_combinebackup.c:984 +#: pg_combinebackup.c:1007 #, c-format msgid "skipping special file \"%s\"" msgstr "überspringe besondere Datei »%s«" -#: pg_combinebackup.c:1060 +#: pg_combinebackup.c:1083 reconstruct.c:305 #, c-format -msgid "\"%s\" contains no entry for \"%s\"" -msgstr "»%s« enthält keinen Eintrag für »%s«" +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "Manifestdatei »%s« enthält keinen Eintrag für Datei »%s«" -#: pg_combinebackup.c:1176 +#: pg_combinebackup.c:1199 #, c-format msgid "%s: server version too old" msgstr "%s: Serverversion zu alt" -#: pg_combinebackup.c:1177 +#: pg_combinebackup.c:1200 #, c-format msgid "%s: could not parse version number" msgstr "%s: konnte Versionsnummer nicht parsen" -#: pg_combinebackup.c:1296 +#: pg_combinebackup.c:1319 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: pg_combinebackup.c:1299 +#: pg_combinebackup.c:1322 #, c-format msgid "target of symbolic link \"%s\" is too long" msgstr "Ziel der symbolischen Verknüpfung »%s« ist zu lang" -#: pg_combinebackup.c:1302 +#: pg_combinebackup.c:1325 #, c-format msgid "target of symbolic link \"%s\" is relative" msgstr "Ziel der symbolischen Verknüpfung »%s« ist relativ" -#: pg_combinebackup.c:1324 +#: pg_combinebackup.c:1347 #, c-format msgid "tablespace at \"%s\" has no tablespace mapping" msgstr "Tablespace in »%s« hat kein Tablespace-Mapping" -#: pg_combinebackup.c:1342 +#: pg_combinebackup.c:1365 #, c-format msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" msgstr "die Tablespaces mit OIDs %u und %u zeigen beide auf Verzeichnis »%s«" -#: pg_combinebackup.c:1351 +#: pg_combinebackup.c:1374 #, c-format msgid "could not close directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht schließen: %m" -#: pg_combinebackup.c:1372 +#: pg_combinebackup.c:1395 #, c-format msgid "file \"%s\" is too large" msgstr "Datei »%s« ist zu groß" -#: pg_combinebackup.c:1389 +#: pg_combinebackup.c:1412 #, c-format msgid "could not read file \"%s\": read %zd of %lld" msgstr "konnte Datei »%s« nicht lesen: %zd von %lld gelesen" -#: reconstruct.c:300 +#: reconstruct.c:339 #, c-format -msgid "manifest file \"%s\" contains no entry for file \"%s\"" -msgstr "Manifestdatei »%s« enthält keinen Eintrag für Datei »%s«" +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "volles Backup enthält unerwartete inkrementelle Datei »%s«" -#: reconstruct.c:410 +#: reconstruct.c:423 #, c-format msgid "file \"%s\" is too short: expected %llu, found %llu" msgstr "Datei »%s« ist zu kurz: %llu erwartet, %llu gefunden" -#: reconstruct.c:452 +#: reconstruct.c:465 #, c-format -msgid "file \"%s\" has bad incremental magic number (0x%x not 0x%x)" -msgstr "Datei »%s« hat falsche magische Zahl für inkrementelles Backup (0x%x, nicht 0x%x)" +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "Datei »%s« hat falsche inkrementelle magische Zahl (0x%x, erwartet 0x%x)" -#: reconstruct.c:458 +#: reconstruct.c:471 #, c-format msgid "file \"%s\" has block count %u in excess of segment size %u" msgstr "Datei »%s« hat Blockzahl %u, was die Segmentgröße %u überschreitet" -#: reconstruct.c:465 +#: reconstruct.c:478 #, c-format msgid "file \"%s\" has truncation block length %u in excess of segment size %u" msgstr "Datei »%s« hat Truncation-Blocklänge %u, was die Segmentgröße %u überschreitet" -#: reconstruct.c:529 +#: reconstruct.c:542 #, c-format msgid "could not read file \"%s\": read %d of %u" msgstr "konnte Datei »%s« nicht lesen: %d von %u gelesen" -#: reconstruct.c:773 +#: reconstruct.c:786 #, c-format msgid "could not read from file \"%s\", offset %llu: read %d of %d" msgstr "konnte nicht aus Datei »%s«, Position %llu lesen: %d von %d gelesen" diff --git a/src/bin/pg_combinebackup/po/es.po b/src/bin/pg_combinebackup/po/es.po new file mode 100644 index 0000000000000..850ef3dde2a0e --- /dev/null +++ b/src/bin/pg_combinebackup/po/es.po @@ -0,0 +1,900 @@ +# Spanish translation file for pg_combinebackup +# +# Copyright (c) 2024, PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# +# Alvaro Herrera , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2024-11-16 05:22+0000\n" +"PO-Revision-Date: 2024-11-16 09:07+0100\n" +"Last-Translator: Álvaro Herrera \n" +"Language-Team: PgSQL-es-Ayuda \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: BlackCAT 1.1\n" + +#: ../../../src/common/logging.c:276 +#, c-format +msgid "error: " +msgstr "error: " + +#: ../../../src/common/logging.c:283 +#, c-format +msgid "warning: " +msgstr "precaución: " + +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "detalle: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "consejo: " + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "no se pudo abrir archivo «%s» para lectura: %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:150 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1400 reconstruct.c:540 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:68 pg_combinebackup.c:538 +#: pg_combinebackup.c:1175 reconstruct.c:369 reconstruct.c:740 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "no se pudo cerrar el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "discordancia en orden de bytes" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"posible discordancia en orden de bytes\n" +"El ordenamiento de bytes usado para almacenar el archivo pg_control puede no\n" +"coincidir con el usado por este programa. En tal caso los resultados de abajo\n" +"serían erróneos, y la instalación de PostgreSQL sería incompatible con este\n" +"directorio de datos." + +#: ../../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 backup_label.c:143 copy_file.c:66 +#: copy_file.c:139 copy_file.c:171 copy_file.c:175 copy_file.c:225 +#: copy_file.c:268 load_manifest.c:128 pg_combinebackup.c:523 +#: pg_combinebackup.c:1167 reconstruct.c:523 reconstruct.c:638 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "no se pudo escribir el archivo «%s»: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:853 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "éxito" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "el búfer de destino es demasiado pequeño" + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "falla de openSSL" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "no se pudo sincronizar el sistema de archivos para el archivo «%s»: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:676 +#: pg_combinebackup.c:1131 pg_combinebackup.c:1383 reconstruct.c:204 +#: reconstruct.c:421 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "no se pudo hacer stat al archivo «%s»: %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "esta instalación no soporta el método de sync «%s»" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_combinebackup.c:933 pg_combinebackup.c:1256 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "no se pudo leer el directorio «%s»: %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" + +#: ../../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "El parser recursivo descendiente no puede usar el lexer incremental." + +#: ../../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "El parser incremental requiere el lexer incremental." + +#: ../../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON anidado demasiado profundamente, profundidad máxima es 6400." + +#: ../../common/jsonapi.c:2127 +#, c-format +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "La secuencia de escape «\\%.*s» no es válida." + +#: ../../common/jsonapi.c:2131 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Los caracteres con valor 0x%02x deben ser escapados." + +#: ../../common/jsonapi.c:2135 +#, c-format +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Se esperaba el fin de la entrada, se encontró «%.*s»." + +#: ../../common/jsonapi.c:2138 +#, c-format +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Se esperaba un elemento de array o «]», se encontró «%.*s»." + +#: ../../common/jsonapi.c:2141 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Se esperaba «,» o «]», se encontró «%.*s»." + +#: ../../common/jsonapi.c:2144 +#, c-format +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Se esperaba «:», se encontró «%.*s»." + +#: ../../common/jsonapi.c:2147 +#, c-format +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Se esperaba un valor JSON, se encontró «%.*s»." + +#: ../../common/jsonapi.c:2150 +msgid "The input string ended unexpectedly." +msgstr "La cadena de entrada terminó inesperadamente." + +#: ../../common/jsonapi.c:2152 +#, c-format +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Se esperaba una cadena o «}», se encontró «%.*s»." + +#: ../../common/jsonapi.c:2155 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Se esperaba «,» o «}», se encontró «%.*s»." + +#: ../../common/jsonapi.c:2158 +#, c-format +msgid "Expected string, but found \"%.*s\"." +msgstr "Se esperaba una cadena, se encontró «%.*s»." + +#: ../../common/jsonapi.c:2161 +#, c-format +msgid "Token \"%.*s\" is invalid." +msgstr "El elemento «%.*s» no es válido." + +#: ../../common/jsonapi.c:2164 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 no puede ser convertido a text." + +#: ../../common/jsonapi.c:2166 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." + +#: ../../common/jsonapi.c:2169 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Los valores de escape Unicode no se pueden utilizar para valores de código superiores a 007F cuando la codificación no es UTF8." + +#: ../../common/jsonapi.c:2178 +#, c-format +msgid "Unicode escape value could not be translated to the server's encoding %s." +msgstr "El valor de escape Unicode no pudo ser traducido a la codificación del servidor %s." + +#: ../../common/jsonapi.c:2185 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." + +#: ../../common/jsonapi.c:2187 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:855 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "no se pudo inicializar la suma de verificación del manifiesto" + +#: ../../common/parse_manifest.c:204 ../../common/parse_manifest.c:261 +msgid "manifest ended unexpectedly" +msgstr "el manifiesto terminó inesperadamente" + +#: ../../common/parse_manifest.c:210 ../../common/parse_manifest.c:862 +#, c-format +msgid "could not update checksum of manifest" +msgstr "no se pudo actualizar la suma de verificación del manifiesto" + +#: ../../common/parse_manifest.c:302 +msgid "unexpected object start" +msgstr "inicio de objeto inesperado" + +#: ../../common/parse_manifest.c:337 +msgid "unexpected object end" +msgstr "fin de objeto inesperado" + +#: ../../common/parse_manifest.c:366 +msgid "unexpected array start" +msgstr "inicio de array inesperado" + +#: ../../common/parse_manifest.c:391 +msgid "unexpected array end" +msgstr "fin de array inesperado" + +#: ../../common/parse_manifest.c:418 +msgid "expected version indicator" +msgstr "se esperaba indicador de versión" + +#: ../../common/parse_manifest.c:454 +msgid "unrecognized top-level field" +msgstr "campo de nivel superior no reconocido" + +#: ../../common/parse_manifest.c:473 +msgid "unexpected file field" +msgstr "campo de archivo inesperado" + +#: ../../common/parse_manifest.c:487 +msgid "unexpected WAL range field" +msgstr "campo de rango de WAL inesperado" + +#: ../../common/parse_manifest.c:493 +msgid "unexpected object field" +msgstr "campo de objeto inesperado" + +#: ../../common/parse_manifest.c:583 +msgid "unexpected scalar" +msgstr "escalar inesperado" + +#: ../../common/parse_manifest.c:609 +msgid "manifest version not an integer" +msgstr "la versión de manifiesto no es un número entero" + +#: ../../common/parse_manifest.c:613 +msgid "unexpected manifest version" +msgstr "versión de manifiesto inesperada" + +#: ../../common/parse_manifest.c:637 +msgid "system identifier in manifest not an integer" +msgstr "el identificador de sistema en el manifiesto no es un número entero" + +#: ../../common/parse_manifest.c:662 +msgid "missing path name" +msgstr "ruta de archivo faltante" + +#: ../../common/parse_manifest.c:665 +msgid "both path name and encoded path name" +msgstr "hay ambos ruta de archivo (path name) y ruta codificada (encoded path name)" + +#: ../../common/parse_manifest.c:667 +msgid "missing size" +msgstr "tamaño faltante" + +#: ../../common/parse_manifest.c:670 +msgid "checksum without algorithm" +msgstr "suma de comprobación sin algoritmo" + +#: ../../common/parse_manifest.c:684 +msgid "could not decode file name" +msgstr "no se pudo decodificar el nombre del archivo" + +#: ../../common/parse_manifest.c:694 +msgid "file size is not an integer" +msgstr "el tamaño del archivo no es un número entero" + +#: ../../common/parse_manifest.c:700 pg_combinebackup.c:199 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "algoritmo de suma de comprobación no reconocido: \"%s\"" + +#: ../../common/parse_manifest.c:719 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "suma de comprobación no válida para el archivo \"%s\": \"%s\"" + +#: ../../common/parse_manifest.c:762 +msgid "missing timeline" +msgstr "falta el timeline" + +#: ../../common/parse_manifest.c:764 +msgid "missing start LSN" +msgstr "falta el LSN de inicio" + +#: ../../common/parse_manifest.c:766 +msgid "missing end LSN" +msgstr "falta el LSN de término" + +#: ../../common/parse_manifest.c:772 +msgid "timeline is not an integer" +msgstr "el timeline no es un número entero" + +#: ../../common/parse_manifest.c:775 +msgid "could not parse start LSN" +msgstr "no se pudo interpretar el LSN de inicio" + +#: ../../common/parse_manifest.c:778 +msgid "could not parse end LSN" +msgstr "no se pudo interpretar el LSN de término" + +#: ../../common/parse_manifest.c:843 +msgid "expected at least 2 lines" +msgstr "esperado al menos 2 líneas" + +#: ../../common/parse_manifest.c:846 +msgid "last line not newline-terminated" +msgstr "última línea no termina en nueva línea" + +#: ../../common/parse_manifest.c:865 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "no se pudo finalizar la suma de verificación del manifiesto" + +#: ../../common/parse_manifest.c:869 +#, c-format +msgid "manifest has no checksum" +msgstr "el manifiesto no tiene suma de comprobación" + +#: ../../common/parse_manifest.c:873 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "suma de comprobación de manifiesto no válida: \"%s\"" + +#: ../../common/parse_manifest.c:877 +#, c-format +msgid "manifest checksum mismatch" +msgstr "discordancia en la suma de comprobación del manifiesto" + +#: ../../common/parse_manifest.c:892 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "el valor «%s» no es válido para la opción %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s debe estar en el rango %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "método de sync no reconocido: %s" + +#: backup_label.c:66 backup_label.c:85 backup_label.c:95 +#, c-format +msgid "%s: could not parse %s" +msgstr "%s: no se pudo interpretar %s" + +#: backup_label.c:69 backup_label.c:88 +#, c-format +msgid "%s: improper terminator for %s" +msgstr "%s: terminador inapropiado para %s" + +#: backup_label.c:76 +#, c-format +msgid "%s: could not parse TLI for %s" +msgstr "%s: no se pudo interpretar el TLI para %s" + +#: backup_label.c:79 backup_label.c:98 +#, c-format +msgid "%s: invalid TLI" +msgstr "%s: TLI no válido" + +#: backup_label.c:106 backup_label.c:108 +#, c-format +msgid "%s: could not find %s" +msgstr "%s: no se pudo encontrar %s" + +#: backup_label.c:110 backup_label.c:113 +#, c-format +msgid "%s: %s requires %s" +msgstr "%s: %s requiere %s" + +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 +#, c-format +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "no se pudo escribir al archivo «%s»: se escribió %d de %d" + +#: backup_label.c:166 copy_file.c:146 copy_file.c:193 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "no se pudo actualizar la suma de verificación para el archivo «%s»" + +#: copy_file.c:186 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "no se pudo escribir a archivo «%s»: %m" + +#: copy_file.c:188 +#, c-format +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "no se pudo escribir al archivo «%s», posición %u: se escribió %d de %d" + +#: copy_file.c:199 reconstruct.c:784 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: copy_file.c:218 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %m" +msgstr "error mientras se clonaba el archivo «%s» a «%s»: %m" + +#: copy_file.c:229 copy_file.c:272 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "no se pudo crear archivo «%s»: %m" + +#: copy_file.c:237 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %s" +msgstr "error mientras se clonaba la relación «%s» a «%s»: %s" + +#: copy_file.c:245 pg_combinebackup.c:251 +#, c-format +msgid "file cloning not supported on this platform" +msgstr "el clonado de archivos no está soportado en esta plataforma" + +#: copy_file.c:278 reconstruct.c:704 +#, c-format +msgid "error while copying file range from \"%s\" to \"%s\": %m" +msgstr "error mientras se copiaba un rango de archivo de «%s» a «%s»: %m" + +#: copy_file.c:285 pg_combinebackup.c:264 reconstruct.c:724 +#, c-format +msgid "copy_file_range not supported on this platform" +msgstr "copy_file_range no está soportado en esta plataforma" + +#: copy_file.c:300 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "no se pudo copiar el archivo de «%s» a «%s»: %m" + +#: load_manifest.c:125 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "el archivo «%s» no existe" + +#: load_manifest.c:163 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %lld" + +#: load_manifest.c:201 +#, c-format +msgid "could not read file \"%s\": read %lld of %lld" +msgstr "no se pudo leer el archivo «%s»: leídos %lld de %lld" + +#: load_manifest.c:249 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "el manifiesto de backup versión 1 no soporta backups incrementales" + +#: load_manifest.c:281 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "nombre de ruta duplicado en el manifiesto de la copia de seguridad: \"%s\"" + +#: pg_combinebackup.c:220 pg_combinebackup.c:228 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "Pruebe «%s --help» para mayor información." + +#: pg_combinebackup.c:227 +#, c-format +msgid "no input directories specified" +msgstr "no se especificó un directorio de entrada" + +#: pg_combinebackup.c:233 +#, c-format +msgid "no output directory specified" +msgstr "no se especificó un directorio de salida" + +#: pg_combinebackup.c:301 +#, c-format +msgid "%s: manifest system identifier is %llu, but control file has %llu" +msgstr "%s: el identificador de sistema del manifiesto es %llu, pero el archivo de control tiene %llu" + +#: pg_combinebackup.c:340 +#, c-format +msgid "cannot generate a manifest because no manifest is available for the final input backup" +msgstr "no se puede generar un manifiesto porque no hay un manifiesto disponible para el backup final de entrada" + +#: pg_combinebackup.c:387 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "no se pudo crear un enlace simbólico desde «%s» a «%s»: %m" + +#: pg_combinebackup.c:399 pg_combinebackup.c:730 pg_combinebackup.c:927 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "no se pudo crear el directorio «%s»: %m" + +#: pg_combinebackup.c:454 +#, c-format +msgid "directory name too long" +msgstr "nombre de directorio demasiado largo" + +#: pg_combinebackup.c:461 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "múltiples signos «=» en mapeo de tablespace" + +#: pg_combinebackup.c:469 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "formato de mapeo de tablespace «%s» no válido, debe ser «ANTIGUO=NUEVO»" + +#: pg_combinebackup.c:480 pg_combinebackup.c:484 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "directorio antiguo no es una ruta absoluta en mapeo de tablespace: %s" + +#: pg_combinebackup.c:553 +#, c-format +msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" +msgstr "el backup en «%s» es un backup full, pero sólo el primer backup puede ser full" + +#: pg_combinebackup.c:556 +#, c-format +msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" +msgstr "el backup en «%s» es incremental, pero el primer backup debería ser full" + +#: pg_combinebackup.c:559 +#, c-format +msgid "backup at \"%s\" starts on timeline %u, but expected %u" +msgstr "el backup en «%s» empieza en el timeline %u, pero se esperaba %u" + +#: pg_combinebackup.c:562 +#, c-format +msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" +msgstr "el backup en «%s» empieza en el LSN %X/%X, pero se esperaba %X/%X" + +#: pg_combinebackup.c:614 +#, c-format +msgid "%s: CRC is incorrect" +msgstr "%s: el valor de CRC es incorrecto" + +#: pg_combinebackup.c:618 +#, c-format +msgid "%s: unexpected control file version" +msgstr "%s: versión de archivo de control inesperado" + +#: pg_combinebackup.c:625 +#, c-format +msgid "%s: expected system identifier %llu, but found %llu" +msgstr "%s: se esperaba identificador de sistema %llu, pero se encontró %llu" + +#: pg_combinebackup.c:657 +#, c-format +msgid "only some backups have checksums enabled" +msgstr "sólo algunos backups tienen checksums activados" + +#: pg_combinebackup.c:658 +#, c-format +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "Desactive (y opcionalmente reactive) los checksums en el directorio de salida para evitar fallos." + +#: pg_combinebackup.c:693 +#, c-format +msgid "removing output directory \"%s\"" +msgstr "eliminando el directorio de salida «%s»" + +#: pg_combinebackup.c:695 +#, c-format +msgid "failed to remove output directory" +msgstr "no se pudo eliminar el directorio de salida" + +#: pg_combinebackup.c:699 +#, c-format +msgid "removing contents of output directory \"%s\"" +msgstr "eliminando el contenido del directorio de salida «%s»" + +#: pg_combinebackup.c:702 +#, c-format +msgid "failed to remove contents of output directory" +msgstr "no se pudo eliminar el contenido del directorio de salida" + +#: pg_combinebackup.c:742 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "el directorio «%s» existe pero no está vacío" + +#: pg_combinebackup.c:745 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "no se pudo acceder al directorio «%s»: %m" + +#: pg_combinebackup.c:759 +#, c-format +msgid "" +"%s reconstructs full backups from incrementals.\n" +"\n" +msgstr "" +"%s reconstruye backups full desde incrementales.\n" +"\n" + +#: pg_combinebackup.c:760 +#, c-format +msgid "Usage:\n" +msgstr "Empleo:\n" + +#: pg_combinebackup.c:761 +#, c-format +msgid " %s [OPTION]... DIRECTORY...\n" +msgstr " %s [OPCIÓN]... DIRECTOTIO...\n" + +#: pg_combinebackup.c:762 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Opciones:\n" + +#: pg_combinebackup.c:763 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr " -d, --debug genera mucha salida de depuración\n" + +#: pg_combinebackup.c:764 +#, c-format +msgid " -n, --dry-run do not actually do anything\n" +msgstr " -n, --dry-run no hacer realmente nada\n" + +#: pg_combinebackup.c:765 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" + +#: pg_combinebackup.c:766 +#, c-format +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=DIR directorio de salida\n" + +#: pg_combinebackup.c:767 +#, c-format +msgid "" +" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr "" +" -T, --tablespace-mapping=ANTIGUO=NUEVO\n" +" reubicar el tablespace de ANTIGUO a NUEVO\n" + +#: pg_combinebackup.c:769 +#, c-format +msgid " --clone clone (reflink) files instead of copying\n" +msgstr " --clone clonar (reflink) archivos en vez de copiarlos\n" + +#: pg_combinebackup.c:770 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy copiar archivos (por omisión)\n" + +#: pg_combinebackup.c:771 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" +msgstr " --copy-file-range copiar usando la llamada copy_file_range()\n" + +#: pg_combinebackup.c:772 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" usar algoritmo para checksums del manifiesto\n" + +#: pg_combinebackup.c:774 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest suprimir generación del manifiesto\n" + +#: pg_combinebackup.c:775 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=MÉTODO definir método para sincronizar archivos a disco\n" + +#: pg_combinebackup.c:776 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar información de version y salir\n" + +#: pg_combinebackup.c:777 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostrar esta ayuda y salir\n" + +#: pg_combinebackup.c:779 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Reporte errores a <%s>.\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Sitio web de %s: <%s>\n" + +#: pg_combinebackup.c:995 +#, c-format +msgid "skipping symbolic link \"%s\"" +msgstr "omitiendo el link simbólico «%s»" + +#: pg_combinebackup.c:997 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "omitiendo el archivo especial «%s»" + +#: pg_combinebackup.c:1073 reconstruct.c:305 +#, c-format +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "el archivo de manifiesto «%s» no contiene una entrada para el archivo «%s»" + +#: pg_combinebackup.c:1189 +#, c-format +msgid "%s: server version too old" +msgstr "%s: versión de servidor demasiado antigua" + +#: pg_combinebackup.c:1190 +#, c-format +msgid "%s: could not parse version number" +msgstr "%s: no se pudo interpretar el número de versión" + +#: pg_combinebackup.c:1309 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "no se pudo leer el enlace simbólico «%s»: %m" + +#: pg_combinebackup.c:1312 +#, c-format +msgid "target of symbolic link \"%s\" is too long" +msgstr "el destino del enlace simbólico «%s» es demasiado largo" + +#: pg_combinebackup.c:1315 +#, c-format +msgid "target of symbolic link \"%s\" is relative" +msgstr "el destino del enlace simbólico «%s» es relativo" + +#: pg_combinebackup.c:1337 +#, c-format +msgid "tablespace at \"%s\" has no tablespace mapping" +msgstr "el tablespace en «%s» no tiene mapeo de tablespace" + +#: pg_combinebackup.c:1355 +#, c-format +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "los tablespaces con OIDs %u y %u ambos apuntan al directorio «%s»" + +#: pg_combinebackup.c:1364 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: pg_combinebackup.c:1385 +#, c-format +msgid "file \"%s\" is too large" +msgstr "el archivo «%s» es demasiado grande" + +#: pg_combinebackup.c:1402 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "no se pudo leer el archivo «%s»: leídos %zd de %lld" + +#: reconstruct.c:339 +#, c-format +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "backup «full» contiene archivo incremental «%s» inesperado" + +#: reconstruct.c:423 +#, c-format +msgid "file \"%s\" is too short: expected %llu, found %llu" +msgstr "el archivo «%s» es demasiado corto: se esperaban %llu, se encontraron %llu" + +#: reconstruct.c:465 +#, c-format +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "el archivo «%s» tiene número mágico incremental erróneo (0x%x, se esperaba 0x%x)" + +#: reconstruct.c:471 +#, c-format +msgid "file \"%s\" has block count %u in excess of segment size %u" +msgstr "el archivo «%s» tiene una cantidad de bloques %u más allá del tamaño de bloque %u" + +#: reconstruct.c:478 +#, c-format +msgid "file \"%s\" has truncation block length %u in excess of segment size %u" +msgstr "el archivo «%s» tiene una longitud de truncado de bloque %u en exceso del tamaño de segmento %u" + +#: reconstruct.c:542 +#, c-format +msgid "could not read file \"%s\": read %d of %u" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %u" + +#: reconstruct.c:786 +#, c-format +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "no se pudo leer del archivo \"%s\", posición %llu: leídos %d de %d" diff --git a/src/bin/pg_combinebackup/po/fr.po b/src/bin/pg_combinebackup/po/fr.po new file mode 100644 index 0000000000000..aa8b0f4ea61f8 --- /dev/null +++ b/src/bin/pg_combinebackup/po/fr.po @@ -0,0 +1,900 @@ +# LANGUAGE message translation file for pg_combinebackup +# Copyright (C) 2024 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_combinebackup (PostgreSQL) package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 17\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2024-11-11 01:52+0000\n" +"PO-Revision-Date: 2024-11-11 09:55+0100\n" +"Last-Translator: Guillaume Lelarge \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.5\n" + +#: ../../../src/common/logging.c:276 +#, c-format +msgid "error: " +msgstr "erreur : " + +#: ../../../src/common/logging.c:283 +#, c-format +msgid "warning: " +msgstr "attention : " + +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "détail : " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "astuce : " + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:150 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1400 reconstruct.c:540 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "n'a pas pu lire le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:68 pg_combinebackup.c:538 +#: pg_combinebackup.c:1175 reconstruct.c:369 reconstruct.c:740 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "n'a pas pu fermer le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "différence de l'ordre des octets" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"possible incohérence dans l'ordre des octets\n" +"L'ordre des octets utilisé pour enregistrer le fichier pg_control peut ne\n" +"pas correspondre à celui utilisé par ce programme. Dans ce cas, les\n" +"résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" +"est incompatible avec ce répertoire des données." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:70 +#: ../../common/file_utils.c:347 ../../common/file_utils.c:406 +#: ../../common/file_utils.c:480 backup_label.c:143 copy_file.c:66 +#: copy_file.c:139 copy_file.c:171 copy_file.c:175 copy_file.c:225 +#: copy_file.c:268 load_manifest.c:128 pg_combinebackup.c:523 +#: pg_combinebackup.c:1167 reconstruct.c:523 reconstruct.c:638 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "impossible d'écrire le fichier « %s » : %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:853 +#, c-format +msgid "out of memory" +msgstr "mémoire épuisée" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "succès" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "tampon de destination trop petit" + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "échec OpenSSL" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "mémoire épuisée\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le système de fichiers pour le fichier « %s » : %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:676 +#: pg_combinebackup.c:1131 pg_combinebackup.c:1383 reconstruct.c:204 +#: reconstruct.c:421 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "n'a pas pu tester le fichier « %s » : %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "cette construction ne supporte pas la méthode de synchronisation « %s »" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_combinebackup.c:933 pg_combinebackup.c:1256 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "n'a pas pu lire le répertoire « %s » : %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" + +#: ../../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "L'analyseur (parser) en descente récursive ne peut pas utiliser l'analyseur (lexer) incrémental." + +#: ../../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "L'analyser (parser) incrémental nécessite l'analyseur (lexer) incrémental." + +#: ../../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON trop profondément imbriqué, profondeur maximum permise est 6400." + +#: ../../common/jsonapi.c:2127 +#, c-format +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "La séquence d'échappement « \\%.*s » est invalide." + +#: ../../common/jsonapi.c:2131 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Le caractère de valeur 0x%02x doit être échappé." + +#: ../../common/jsonapi.c:2135 +#, c-format +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Fin de l'entrée attendue, mais trouvé « %.*s »." + +#: ../../common/jsonapi.c:2138 +#, c-format +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Élément de tableau ou « ] » attendu, mais trouvé « %.*s »." + +#: ../../common/jsonapi.c:2141 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "« , » ou « ] » attendu, mais trouvé « %.*s »." + +#: ../../common/jsonapi.c:2144 +#, c-format +msgid "Expected \":\", but found \"%.*s\"." +msgstr "« : » attendu, mais trouvé « %.*s »." + +#: ../../common/jsonapi.c:2147 +#, c-format +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Valeur JSON attendue, mais « %.*s » trouvé." + +#: ../../common/jsonapi.c:2150 +msgid "The input string ended unexpectedly." +msgstr "La chaîne en entrée se ferme de manière inattendue." + +#: ../../common/jsonapi.c:2152 +#, c-format +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Chaîne ou « } » attendu, mais « %.*s » trouvé." + +#: ../../common/jsonapi.c:2155 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "« , » ou « } » attendu, mais trouvé « %.*s »." + +#: ../../common/jsonapi.c:2158 +#, c-format +msgid "Expected string, but found \"%.*s\"." +msgstr "Chaîne attendue, mais « %.*s » trouvé." + +#: ../../common/jsonapi.c:2161 +#, c-format +msgid "Token \"%.*s\" is invalid." +msgstr "Le jeton « %.*s » n'est pas valide." + +#: ../../common/jsonapi.c:2164 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 ne peut pas être converti en texte." + +#: ../../common/jsonapi.c:2166 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "« \\u » doit être suivi par quatre chiffres hexadécimaux." + +#: ../../common/jsonapi.c:2169 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Les valeurs d'échappement Unicode ne peuvent pas être utilisées pour des valeurs de point code au-dessus de 007F quand l'encodage n'est pas UTF8." + +#: ../../common/jsonapi.c:2178 +#, c-format +msgid "Unicode escape value could not be translated to the server's encoding %s." +msgstr "La valeur d'échappement unicode ne peut pas être traduite dans l'encodage du serveur %s." + +#: ../../common/jsonapi.c:2185 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Une substitution unicode haute ne doit pas suivre une substitution haute." + +#: ../../common/jsonapi.c:2187 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Une substitution unicode basse ne doit pas suivre une substitution haute." + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:855 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "n'a pas pu initialiser la somme de contrôle du manifeste" + +#: ../../common/parse_manifest.c:204 ../../common/parse_manifest.c:261 +msgid "manifest ended unexpectedly" +msgstr "le manifeste se termine de façon inattendue" + +#: ../../common/parse_manifest.c:210 ../../common/parse_manifest.c:862 +#, c-format +msgid "could not update checksum of manifest" +msgstr "n'a pas pu mettre à jour la somme de contrôle du manifeste" + +#: ../../common/parse_manifest.c:302 +msgid "unexpected object start" +msgstr "début d'objet inattendu" + +#: ../../common/parse_manifest.c:337 +msgid "unexpected object end" +msgstr "fin d'objet inattendue" + +#: ../../common/parse_manifest.c:366 +msgid "unexpected array start" +msgstr "début de tableau inattendu" + +#: ../../common/parse_manifest.c:391 +msgid "unexpected array end" +msgstr "fin de tableau inattendue" + +#: ../../common/parse_manifest.c:418 +msgid "expected version indicator" +msgstr "indicateur de version inattendu" + +#: ../../common/parse_manifest.c:454 +msgid "unrecognized top-level field" +msgstr "champ haut niveau inconnu" + +#: ../../common/parse_manifest.c:473 +msgid "unexpected file field" +msgstr "champ de fichier inattendu" + +#: ../../common/parse_manifest.c:487 +msgid "unexpected WAL range field" +msgstr "champ d'intervalle de WAL inattendu" + +#: ../../common/parse_manifest.c:493 +msgid "unexpected object field" +msgstr "champ d'objet inattendu" + +#: ../../common/parse_manifest.c:583 +msgid "unexpected scalar" +msgstr "scalaire inattendu" + +#: ../../common/parse_manifest.c:609 +msgid "manifest version not an integer" +msgstr "la version du manifeste n'est pas un entier" + +#: ../../common/parse_manifest.c:613 +msgid "unexpected manifest version" +msgstr "version du manifeste inattendue" + +#: ../../common/parse_manifest.c:637 +msgid "system identifier in manifest not an integer" +msgstr "l'identifieur système dans le manifeste n'est pas un entier" + +#: ../../common/parse_manifest.c:662 +msgid "missing path name" +msgstr "nom de chemin manquant" + +#: ../../common/parse_manifest.c:665 +msgid "both path name and encoded path name" +msgstr "le nom du chemin et le nom du chemin encodé" + +#: ../../common/parse_manifest.c:667 +msgid "missing size" +msgstr "taille manquante" + +#: ../../common/parse_manifest.c:670 +msgid "checksum without algorithm" +msgstr "somme de contrôle sans algorithme" + +#: ../../common/parse_manifest.c:684 +msgid "could not decode file name" +msgstr "n'a pas pu décoder le nom du fichier" + +#: ../../common/parse_manifest.c:694 +msgid "file size is not an integer" +msgstr "la taille du fichier n'est pas un entier" + +#: ../../common/parse_manifest.c:700 pg_combinebackup.c:199 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "algorithme de somme de contrôle inconnu : « %s »" + +#: ../../common/parse_manifest.c:719 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "somme de contrôle invalide pour le fichier « %s » : « %s »" + +#: ../../common/parse_manifest.c:762 +msgid "missing timeline" +msgstr "timeline manquante" + +#: ../../common/parse_manifest.c:764 +msgid "missing start LSN" +msgstr "LSN de début manquante" + +#: ../../common/parse_manifest.c:766 +msgid "missing end LSN" +msgstr "LSN de fin manquante" + +#: ../../common/parse_manifest.c:772 +msgid "timeline is not an integer" +msgstr "la timeline n'est pas un entier" + +#: ../../common/parse_manifest.c:775 +msgid "could not parse start LSN" +msgstr "n'a pas pu analyser le LSN de début" + +#: ../../common/parse_manifest.c:778 +msgid "could not parse end LSN" +msgstr "n'a pas pu analyser le LSN de fin" + +#: ../../common/parse_manifest.c:843 +msgid "expected at least 2 lines" +msgstr "attendait au moins deux lignes" + +#: ../../common/parse_manifest.c:846 +msgid "last line not newline-terminated" +msgstr "dernière ligne non terminée avec un caractère newline" + +#: ../../common/parse_manifest.c:865 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "n'a pas pu finaliser la somme de contrôle du manifeste" + +#: ../../common/parse_manifest.c:869 +#, c-format +msgid "manifest has no checksum" +msgstr "le manifeste n'a pas de somme de contrôle" + +#: ../../common/parse_manifest.c:873 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "somme de contrôle du manifeste invalide : « %s »" + +#: ../../common/parse_manifest.c:877 +#, c-format +msgid "manifest checksum mismatch" +msgstr "différence de somme de contrôle pour le manifeste" + +#: ../../common/parse_manifest.c:892 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "n'a pas pu analyser le manifeste de sauvegarde : %s" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "valeur « %s » invalide pour l'option %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s doit être compris entre %d et %d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "méthode de synchronisation non reconnu : %s" + +#: backup_label.c:66 backup_label.c:85 backup_label.c:95 +#, c-format +msgid "%s: could not parse %s" +msgstr "%s : n'a pas pu analyser %s" + +#: backup_label.c:69 backup_label.c:88 +#, c-format +msgid "%s: improper terminator for %s" +msgstr "%s : mauvais terminateur pour %s" + +#: backup_label.c:76 +#, c-format +msgid "%s: could not parse TLI for %s" +msgstr "%s : n'a pas pu analyser le TLI pour %s" + +#: backup_label.c:79 backup_label.c:98 +#, c-format +msgid "%s: invalid TLI" +msgstr "%s : TLI invalide" + +#: backup_label.c:106 backup_label.c:108 +#, c-format +msgid "%s: could not find %s" +msgstr "%s : n'a pas pu trouver %s" + +#: backup_label.c:110 backup_label.c:113 +#, c-format +msgid "%s: %s requires %s" +msgstr "%s : %s requiert %s" + +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 +#, c-format +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "n'a pas pu écrire le fichier « %s » : a écrit %d sur %d" + +#: backup_label.c:166 copy_file.c:146 copy_file.c:193 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "n'a pas pu mettre à jour la somme de contrôle du fichier « %s »" + +#: copy_file.c:186 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "n'a pas pu écrire dans le fichier « %s » : %m" + +#: copy_file.c:188 +#, c-format +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "n'a pas pu écrire dans le fichier « %s », à la position %u : a écrit %d sur %d" + +#: copy_file.c:199 reconstruct.c:784 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "n'a pas pu lire à partir du fichier « %s » : %m" + +#: copy_file.c:218 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %m" +msgstr "erreur lors du clonage du fichier « %s » en «%s » : %m" + +#: copy_file.c:229 copy_file.c:272 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "n'a pas pu créer le fichier « %s » : %m" + +#: copy_file.c:237 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %s" +msgstr "erreur lors du clonage du fichier « %s » en «%s » : %s" + +#: copy_file.c:245 pg_combinebackup.c:251 +#, c-format +msgid "file cloning not supported on this platform" +msgstr "clonage de fichiers non supporté sur cette plateforme" + +#: copy_file.c:278 reconstruct.c:704 +#, c-format +msgid "error while copying file range from \"%s\" to \"%s\": %m" +msgstr "erreur lors de l'opération copy_file_range de « %s » à « %s » : %m" + +#: copy_file.c:285 pg_combinebackup.c:264 reconstruct.c:724 +#, c-format +msgid "copy_file_range not supported on this platform" +msgstr "copy_file_range non supporté sur cette plateforme" + +#: copy_file.c:300 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "n'a pas pu copier le fichier « %s » en « %s » : %m" + +#: load_manifest.c:125 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "le rôle « %s » n'existe pas" + +#: load_manifest.c:163 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %lld" + +#: load_manifest.c:201 +#, c-format +msgid "could not read file \"%s\": read %lld of %lld" +msgstr "n'a pas pu lire le fichier « %s » : a lu %lld sur %lld" + +#: load_manifest.c:249 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "la version du manifeste de sauvegarde ne permet pas les sauvegardes incrémentales" + +#: load_manifest.c:281 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "nom de chemin dupliqué dans le manifeste de sauvegarde : « %s »" + +#: pg_combinebackup.c:220 pg_combinebackup.c:228 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "Essayez « %s --help » pour plus d'informations." + +#: pg_combinebackup.c:227 +#, c-format +msgid "no input directories specified" +msgstr "aucun répertoire en entrée indiqué" + +#: pg_combinebackup.c:233 +#, c-format +msgid "no output directory specified" +msgstr "aucun répertoire cible indiqué" + +#: pg_combinebackup.c:301 +#, c-format +msgid "%s: manifest system identifier is %llu, but control file has %llu" +msgstr "%s: l'identifieur système du manifeste est %llu, mais le fichier de contrôle a %llu" + +#: pg_combinebackup.c:340 +#, c-format +msgid "cannot generate a manifest because no manifest is available for the final input backup" +msgstr "ne peut pas générer un manifeste parce qu'aucun manifeste n'est disponible pour la sauvegarde finale en entrée" + +#: pg_combinebackup.c:387 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "n'a pas pu créer le lien symbolique de « %s » vers « %s » : %m" + +#: pg_combinebackup.c:399 pg_combinebackup.c:730 pg_combinebackup.c:927 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "n'a pas pu créer le répertoire « %s » : %m" + +#: pg_combinebackup.c:454 +#, c-format +msgid "directory name too long" +msgstr "nom du répertoire trop long" + +#: pg_combinebackup.c:461 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "multiple signes « = » dans la correspondance de tablespace" + +#: pg_combinebackup.c:469 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "format de correspondance de tablespace « %s » invalide, doit être « ANCIENREPERTOIRE=NOUVEAUREPERTOIRE »" + +#: pg_combinebackup.c:480 pg_combinebackup.c:484 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "l'ancien répertoire n'est pas un chemin absolu dans la correspondance de tablespace : %s" + +#: pg_combinebackup.c:553 +#, c-format +msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" +msgstr "la sauvegarde à « %s » est une sauvegarde complète, mais seule la première sauvegarde devrait être une sauvegarde complète" + +#: pg_combinebackup.c:556 +#, c-format +msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" +msgstr "la sauvegarde à « %s » est une sauvegarde incrémentale, mais la première sauvegarde devrait être une sauvegarde complète" + +#: pg_combinebackup.c:559 +#, c-format +msgid "backup at \"%s\" starts on timeline %u, but expected %u" +msgstr "la sauvegarde à « %s » commence à la timeline %u, mais attendait %u" + +#: pg_combinebackup.c:562 +#, c-format +msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" +msgstr "la sauvegarde à « %s » commence au LSN %X/%X, mais s'attendait à %X/%X" + +#: pg_combinebackup.c:614 +#, c-format +msgid "%s: CRC is incorrect" +msgstr "%s : la valeur CRC n'est pas correcte" + +#: pg_combinebackup.c:618 +#, c-format +msgid "%s: unexpected control file version" +msgstr "%s : version inattendue pour le fichier de contrôle" + +#: pg_combinebackup.c:625 +#, c-format +msgid "%s: expected system identifier %llu, but found %llu" +msgstr "%s : identifieur système attendu %llu, mais %llu trouvé" + +#: pg_combinebackup.c:657 +#, c-format +msgid "only some backups have checksums enabled" +msgstr "seules certaines sauvegardes ont les sommes de contrôle activées" + +#: pg_combinebackup.c:658 +#, c-format +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "Désactivez, puis activez si vous le souhaitez, les sommes de contrôle sur le répertoire en sortie pour éviter les échecs" + +#: pg_combinebackup.c:693 +#, c-format +msgid "removing output directory \"%s\"" +msgstr "suppression du répertoire en sortie « %s »" + +#: pg_combinebackup.c:695 +#, c-format +msgid "failed to remove output directory" +msgstr "échec lors de la suppression du répertoire en sortie" + +#: pg_combinebackup.c:699 +#, c-format +msgid "removing contents of output directory \"%s\"" +msgstr "suppression du contenu du répertoire en sortie « %s »" + +#: pg_combinebackup.c:702 +#, c-format +msgid "failed to remove contents of output directory" +msgstr "échec lors de la suppression du contenu du répertoire en sortie" + +#: pg_combinebackup.c:742 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "le répertoire « %s » existe mais n'est pas vide" + +#: pg_combinebackup.c:745 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "n'a pas pu accéder au répertoire « %s » : %m" + +#: pg_combinebackup.c:759 +#, c-format +msgid "" +"%s reconstructs full backups from incrementals.\n" +"\n" +msgstr "" +"%s reconstruit des sauvegardes complètes à partir de sauvegardes incrémentales.\n" +"\n" + +#: pg_combinebackup.c:760 +#, c-format +msgid "Usage:\n" +msgstr "Usage :\n" + +#: pg_combinebackup.c:761 +#, c-format +msgid " %s [OPTION]... DIRECTORY...\n" +msgstr " %s [OPTION]... RÉPERTOIRE...\n" + +#: pg_combinebackup.c:762 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Options :\n" + +#: pg_combinebackup.c:763 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr " -d, --debug engendre un grand nombre de traces de débogage\n" + +#: pg_combinebackup.c:764 +#, c-format +msgid " -n, --dry-run do not actually do anything\n" +msgstr " -n, --dry-run ne fait rien\n" + +#: pg_combinebackup.c:765 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr "" +" -N, --nosync n'attend pas que les modifications soient\n" +" proprement écrites sur disque\n" + +#: pg_combinebackup.c:766 +#, c-format +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=RÉPERTOIRE répertoire en sortie\n" + +#: pg_combinebackup.c:767 +#, c-format +msgid "" +" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr "" +" -T, --tablespace-mapping=ANCIENREP=NOUVEAUREP\n" +" déplace le tablespace de ANCIENREP vers NOUVEAUREP\n" + +#: pg_combinebackup.c:769 +#, c-format +msgid " --clone clone (reflink) files instead of copying\n" +msgstr " --clone clone (reflink) les fichiers au lieu de les copier\n" + +#: pg_combinebackup.c:770 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy copie les fichiers (par défaut)\n" + +#: pg_combinebackup.c:771 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" +msgstr " --copy-file-range copie les fichiers en utilisant la fonction système copy_file_range()\n" + +#: pg_combinebackup.c:772 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" utilise l'algorithme pour les sommes de contrôle du manifeste\n" + +#: pg_combinebackup.c:774 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest ne génère pas de manifeste de sauvegarde\n" + +#: pg_combinebackup.c:775 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHODE configure la méthode pour synchroniser les fichiers sur disque\n" + +#: pg_combinebackup.c:776 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version puis quitte\n" + +#: pg_combinebackup.c:777 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide puis quitte\n" + +#: pg_combinebackup.c:779 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapporter les bogues à <%s>.\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Page d'accueil de %s : <%s>\n" + +#: pg_combinebackup.c:995 +#, c-format +msgid "skipping symbolic link \"%s\"" +msgstr "ignore le lien symbolique « %s »" + +#: pg_combinebackup.c:997 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "ignore le fichier spécial « %s »" + +#: pg_combinebackup.c:1073 reconstruct.c:305 +#, c-format +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "le fichier manifeste « %s » ne contient aucune entrée pour le fichier « %s »" + +#: pg_combinebackup.c:1189 +#, c-format +msgid "%s: server version too old" +msgstr "%s : version trop ancienne du serveur" + +#: pg_combinebackup.c:1190 +#, c-format +msgid "%s: could not parse version number" +msgstr "%s : n'a pas pu analyser le numéro de version" + +#: pg_combinebackup.c:1309 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "n'a pas pu lire le lien symbolique « %s » : %m" + +#: pg_combinebackup.c:1312 +#, c-format +msgid "target of symbolic link \"%s\" is too long" +msgstr "la cible « %s » du lien symbolique est trop longue" + +#: pg_combinebackup.c:1315 +#, c-format +msgid "target of symbolic link \"%s\" is relative" +msgstr "la cible « %s » du lien symbolique est relative" + +#: pg_combinebackup.c:1337 +#, c-format +msgid "tablespace at \"%s\" has no tablespace mapping" +msgstr "le tablespace sur \"%s\" n'a pas de correspondance de tablespace" + +#: pg_combinebackup.c:1355 +#, c-format +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "les tablespaces d'OID %u et %u pointent tous les deux au répertoire « %s »" + +#: pg_combinebackup.c:1364 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "n'a pas pu fermer le répertoire « %s » : %m" + +#: pg_combinebackup.c:1385 +#, c-format +msgid "file \"%s\" is too large" +msgstr "le fichier « %s » est trop gros" + +#: pg_combinebackup.c:1402 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "n'a pas pu lire le fichier « %s » : a lu %zd sur %lld" + +#: reconstruct.c:339 +#, c-format +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "la sauvegarde complète contient un fichier incrémental inattendu « %s »" + +#: reconstruct.c:423 +#, c-format +msgid "file \"%s\" is too short: expected %llu, found %llu" +msgstr "le fichier « %s » est trop court : attendait %llu, a trouvé %llu" + +#: reconstruct.c:465 +#, c-format +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "le fichier « %s » a un mauvaise numéro magique incrémental (0x%x et non pas 0x%x)" + +#: reconstruct.c:471 +#, c-format +msgid "file \"%s\" has block count %u in excess of segment size %u" +msgstr "le fichier « %s » a %u blocs en plus de la taille de segment %u" + +#: reconstruct.c:478 +#, c-format +msgid "file \"%s\" has truncation block length %u in excess of segment size %u" +msgstr "le fichier « %s » a une longueur de bloc %u pour la troncation en excès de la taille de segment %u" + +#: reconstruct.c:542 +#, c-format +msgid "could not read file \"%s\": read %d of %u" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %u" + +#: reconstruct.c:786 +#, c-format +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "n'a pas pu lire le fichier « %s » à la position %llu : a lu %d sur %d" diff --git a/src/bin/pg_combinebackup/po/ja.po b/src/bin/pg_combinebackup/po/ja.po index 3ae33d2f69045..627c4213b2467 100644 --- a/src/bin/pg_combinebackup/po/ja.po +++ b/src/bin/pg_combinebackup/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" +"Project-Id-Version: pg_combinebackup (PostgreSQL 18)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-21 17:48+0900\n" -"PO-Revision-Date: 2024-06-24 10:03+0900\n" +"POT-Creation-Date: 2025-03-31 09:53+0900\n" +"PO-Revision-Date: 2025-03-31 16:40+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: \n" "Language: ja\n" @@ -17,22 +17,22 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "警告: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "詳細: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "ヒント: " @@ -42,8 +42,8 @@ msgstr "ヒント: " msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み込み用にオープンできませんでした: %m" -#: ../../common/controldata_utils.c:110 copy_file.c:146 load_manifest.c:161 -#: load_manifest.c:199 pg_combinebackup.c:1387 reconstruct.c:527 +#: ../../common/controldata_utils.c:110 copy_file.c:164 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1409 reconstruct.c:540 #, c-format msgid "could not read file \"%s\": %m" msgstr "ファイル\"%s\"の読み込みに失敗しました: %m" @@ -54,8 +54,8 @@ msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" #: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 -#: backup_label.c:174 copy_file.c:64 pg_combinebackup.c:526 -#: pg_combinebackup.c:1162 reconstruct.c:356 reconstruct.c:727 +#: backup_label.c:174 copy_file.c:71 pg_combinebackup.c:547 +#: pg_combinebackup.c:1184 reconstruct.c:369 reconstruct.c:740 #: write_manifest.c:187 #, c-format msgid "could not close file \"%s\": %m" @@ -78,31 +78,32 @@ msgstr "" "されるものと一致しないようです。この場合以下の結果は不正確になります。また、\n" "PostgreSQLインストレーションはこのデータディレクトリと互換性がなくなります。" -#: ../../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 backup_label.c:143 copy_file.c:62 -#: copy_file.c:135 copy_file.c:167 copy_file.c:171 copy_file.c:218 -#: copy_file.c:258 load_manifest.c:128 pg_combinebackup.c:511 -#: pg_combinebackup.c:1154 reconstruct.c:510 reconstruct.c:625 +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:69 +#: ../../common/file_utils.c:370 ../../common/file_utils.c:428 +#: ../../common/file_utils.c:502 backup_label.c:143 copy_file.c:69 +#: copy_file.c:153 copy_file.c:185 copy_file.c:189 copy_file.c:239 +#: copy_file.c:282 load_manifest.c:128 pg_combinebackup.c:532 +#: pg_combinebackup.c:1176 reconstruct.c:523 reconstruct.c:638 #: write_manifest.c:250 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:746 +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 #: write_manifest.c:260 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 -#: ../../common/file_utils.c:488 +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:440 +#: ../../common/file_utils.c:510 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" #: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 -#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:853 +#: ../../common/jsonapi.c:2407 ../../common/parse_manifest.c:157 +#: ../../common/parse_manifest.c:852 #, c-format msgid "out of memory" msgstr "メモリ不足です" @@ -131,290 +132,294 @@ msgstr "メモリ不足です\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "nullポインタは複製できません(内部エラー)\n" -#: ../../common/file_utils.c:76 +#: ../../common/file_utils.c:75 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "ファイル\"%s\"に対してファイルシステムを同期できませんでした: %m" -#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 -#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:664 -#: pg_combinebackup.c:1118 pg_combinebackup.c:1370 reconstruct.c:199 -#: reconstruct.c:408 +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:684 +#: pg_combinebackup.c:1140 pg_combinebackup.c:1392 reconstruct.c:204 +#: reconstruct.c:421 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 #: ../../fe_utils/option_utils.c:99 #, c-format msgid "this build does not support sync method \"%s\"" msgstr "このビルドでは同期方式\"%s\"をサポートしていません" -#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 -#: pg_combinebackup.c:920 pg_combinebackup.c:1243 +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 +#: pg_combinebackup.c:942 pg_combinebackup.c:1265 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../../common/file_utils.c:498 +#: ../../common/file_utils.c:520 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" -#: ../../common/jsonapi.c:2121 +#: ../../common/jsonapi.c:2432 msgid "Recursive descent parser cannot use incremental lexer." msgstr "再帰降下パーサーは差分字句解析器を使用できません。" -#: ../../common/jsonapi.c:2123 +#: ../../common/jsonapi.c:2434 msgid "Incremental parser requires incremental lexer." msgstr "差分パーサーは差分字句解析器を必要とします。" -#: ../../common/jsonapi.c:2125 +#: ../../common/jsonapi.c:2436 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "JSONのネストが深すぎます、可能な最大の深さは6400です。" -#: ../../common/jsonapi.c:2127 +#: ../../common/jsonapi.c:2438 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "エスケープシーケンス\"\\%.*s\"は不正です。" -#: ../../common/jsonapi.c:2131 +#: ../../common/jsonapi.c:2442 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "0x%02x値を持つ文字はエスケープしなければなりません" -#: ../../common/jsonapi.c:2135 +#: ../../common/jsonapi.c:2446 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "入力の終端を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2138 +#: ../../common/jsonapi.c:2449 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "配列要素または\"]\"を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2141 +#: ../../common/jsonapi.c:2452 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "\",\"または\"]\"を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2144 +#: ../../common/jsonapi.c:2455 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "\":\"を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2147 +#: ../../common/jsonapi.c:2458 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "JSON値を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2150 +#: ../../common/jsonapi.c:2461 msgid "The input string ended unexpectedly." msgstr "入力文字列が予期せず終了しました。" -#: ../../common/jsonapi.c:2152 +#: ../../common/jsonapi.c:2463 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "文字列または\"}\"を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2155 +#: ../../common/jsonapi.c:2466 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "\",\"または\"}\"を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2158 +#: ../../common/jsonapi.c:2469 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "文字列を想定していましたが、\"\\%.*s\"でした。" -#: ../../common/jsonapi.c:2161 +#: ../../common/jsonapi.c:2472 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "トークン\"\\%.*s\"は不正です。" -#: ../../common/jsonapi.c:2164 +#: ../../common/jsonapi.c:2478 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 はテキストに変換できません。" -#: ../../common/jsonapi.c:2166 +#: ../../common/jsonapi.c:2480 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\"の後には16進数の4桁が続かなければなりません。" -#: ../../common/jsonapi.c:2169 +#: ../../common/jsonapi.c:2483 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "エンコーディングがUTF-8ではない場合、コードポイントの値が 007F 以上についてはUnicodeエスケープの値は使用できません。" -#: ../../common/jsonapi.c:2178 +#: ../../common/jsonapi.c:2492 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "Unicodeエスケープの値がサーバーエンコーディング%sに変換できませんでした。" -#: ../../common/jsonapi.c:2185 +#: ../../common/jsonapi.c:2499 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicodeのハイサロゲートはハイサロゲートに続いてはいけません。" -#: ../../common/jsonapi.c:2187 +#: ../../common/jsonapi.c:2501 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicodeのローサロゲートはハイサロゲートに続かなければなりません。" -#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:855 +#: ../../common/jsonapi.c:2523 +msgid "out of memory while constructing error description" +msgstr "エラー記述の構築中にメモリ不足" + +#: ../../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" -msgstr "目録のシステム識別子が整数ではありません" +#: ../../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 pg_combinebackup.c:190 +#: ../../common/parse_manifest.c:699 pg_combinebackup.c:203 #, 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" @@ -464,67 +469,72 @@ msgstr "%s: %sが見つかりませんでした" msgid "%s: %s requires %s" msgstr "%s: %sは%sを必要とします" -#: backup_label.c:162 reconstruct.c:748 write_manifest.c:262 +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 #, c-format msgid "could not write file \"%s\": wrote %d of %d" msgstr "ファイル\"%1$s\"の書き込みができませんでした: %3$dバイト中%2$dバイト書き込みました" -#: backup_label.c:166 copy_file.c:142 copy_file.c:189 reconstruct.c:708 -#: reconstruct.c:754 write_manifest.c:270 +#: backup_label.c:166 copy_file.c:160 copy_file.c:207 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 #, c-format msgid "could not update checksum of file \"%s\"" msgstr "ファイル\"%s\"のチェックサムの更新ができませんでした" -#: copy_file.c:182 +#: copy_file.c:200 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: copy_file.c:184 +#: copy_file.c:202 #, c-format msgid "could not write to file \"%s\", offset %u: wrote %d of %d" msgstr "ファイル \"%1$s\"、オフセット%2$uで書き込みができませんでした: %4$dバイト中%3$dバイト書き込みました" -#: copy_file.c:195 reconstruct.c:771 +#: copy_file.c:213 reconstruct.c:784 #, c-format msgid "could not read from file \"%s\": %m" msgstr "ファイル\"%s\"から読み取れませんでした: %m" -#: copy_file.c:214 +#: copy_file.c:232 #, c-format msgid "error while cloning file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の\"%s\"へのクローニング中のエラー: %m" -#: copy_file.c:222 copy_file.c:262 +#: copy_file.c:243 copy_file.c:286 #, c-format msgid "could not create file \"%s\": %m" msgstr "ファイル\"%s\"を作成できませんでした: %m" -#: copy_file.c:230 +#: copy_file.c:251 #, c-format msgid "error while cloning file \"%s\" to \"%s\": %s" msgstr "ファイル\"%s\"の\"%s\"へのクローニング中のエラー: %s" -#: copy_file.c:235 pg_combinebackup.c:239 +#: copy_file.c:259 pg_combinebackup.c:255 #, c-format msgid "file cloning not supported on this platform" msgstr "このプラットフォームではファイルのクローンはサポートされません" -#: copy_file.c:268 reconstruct.c:691 +#: copy_file.c:292 reconstruct.c:704 #, c-format msgid "error while copying file range from \"%s\" to \"%s\": %m" msgstr "\"%s\"の\"%s\"へのファイル範囲のコピー中のエラー: %m" -#: copy_file.c:275 pg_combinebackup.c:252 reconstruct.c:711 +#: copy_file.c:299 pg_combinebackup.c:268 reconstruct.c:724 #, c-format msgid "copy_file_range not supported on this platform" msgstr "このプラットフォームではcopy_file_rangeはサポートされません" -#: copy_file.c:290 +#: copy_file.c:314 #, c-format msgid "could not copy file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"を\"%s\"にコピーできませんでした: %m" +#: copy_file.c:333 +#, c-format +msgid "error while linking file from \"%s\" to \"%s\": %m" +msgstr "\"%s\"から\"%s\"へのリンク作成中にエラーが発生しました: %m" + #: load_manifest.c:125 #, c-format msgid "file \"%s\" does not exist" @@ -540,147 +550,152 @@ msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$lldバイト msgid "could not read file \"%s\": read %lld of %lld" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$lldバイトのうち%2$lldバイトを読み込みました" -#: load_manifest.c:249 +#: load_manifest.c:248 #, c-format msgid "backup manifest version 1 does not support incremental backup" msgstr "バックアップ目録のバージョン1は差分バックアップをサポートしていません" -#: load_manifest.c:281 +#: load_manifest.c:280 #, c-format msgid "duplicate path name in backup manifest: \"%s\"" msgstr "バックアップ目録内の重複パス名: \"%s\"" -#: pg_combinebackup.c:208 pg_combinebackup.c:216 +#: pg_combinebackup.c:224 pg_combinebackup.c:232 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: pg_combinebackup.c:215 +#: pg_combinebackup.c:231 #, c-format msgid "no input directories specified" msgstr "入力ディレクトリが指定されていません" -#: pg_combinebackup.c:221 +#: pg_combinebackup.c:237 #, c-format msgid "no output directory specified" msgstr "出力ディレクトリが指定されていません" -#: pg_combinebackup.c:289 +#: pg_combinebackup.c:305 #, c-format -msgid "%s: manifest system identifier is %llu, but control file has %llu" -msgstr "%s: 目録のシステム識別子が%lluですが、制御ファイルでは%lluです" +msgid "%s: manifest system identifier is %, but control file has %" +msgstr "%s: 目録のシステム識別子が%ですが、制御ファイルでは%です" -#: pg_combinebackup.c:328 +#: pg_combinebackup.c:344 #, c-format -msgid "can't generate a manifest because no manifest is available for the final input backup" +msgid "cannot generate a manifest because no manifest is available for the final input backup" msgstr "最後の入力バックアップに目録がないため目録を生成できません" -#: pg_combinebackup.c:375 +#: pg_combinebackup.c:391 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "\"%s\"から\"%s\"へのシンボリックリンクを作成できませんでした: %m" -#: pg_combinebackup.c:387 pg_combinebackup.c:718 pg_combinebackup.c:914 +#: pg_combinebackup.c:403 pg_combinebackup.c:738 pg_combinebackup.c:936 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: pg_combinebackup.c:442 +#: pg_combinebackup.c:433 +#, c-format +msgid "--link mode was used; any modifications to the output directory may destructively modify input directories" +msgstr "--link モードが使用されています。出力ディレクトリに変更を加えると、入力ディレクトリが破壊的に変更される可能性があります。" + +#: pg_combinebackup.c:463 #, c-format msgid "directory name too long" msgstr "ディレクトリ名が長すぎます" -#: pg_combinebackup.c:449 +#: pg_combinebackup.c:470 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "テーブル空間のマッピングに複数の\"=\"記号があります" -#: pg_combinebackup.c:457 +#: pg_combinebackup.c:478 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "テーブル空間のマッピング形式\"%s\"が不正です。\"旧DIR=新DIR\"でなければなりません" -#: pg_combinebackup.c:468 pg_combinebackup.c:472 +#: pg_combinebackup.c:489 pg_combinebackup.c:493 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "テーブル空間のマッピングにおいて、旧ディレクトリが絶対パスではありません: %s" -#: pg_combinebackup.c:541 +#: pg_combinebackup.c:562 #, c-format msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" msgstr "\"%s\"のバックアップはフルバックアップですが、最初のバックアップのみがフルバックアップである必要があります" -#: pg_combinebackup.c:544 +#: pg_combinebackup.c:565 #, c-format msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" msgstr "\"%s\"のバックアップは差分バックアップですが、最初のバックアップはフルバックアップである必要があります" -#: pg_combinebackup.c:547 +#: pg_combinebackup.c:568 #, c-format msgid "backup at \"%s\" starts on timeline %u, but expected %u" msgstr "\"%s\"のバックアップはタイムライン%uで始まっていますが、%uを期待していました" -#: pg_combinebackup.c:550 +#: pg_combinebackup.c:571 #, c-format msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" msgstr "\"%s\"のバックアップはLSN %X/%Xで始まっていますが、%X/%Xを期待していました" -#: pg_combinebackup.c:602 +#: pg_combinebackup.c:623 #, c-format msgid "%s: CRC is incorrect" msgstr "%s: CRCが正しくありません" -#: pg_combinebackup.c:606 +#: pg_combinebackup.c:627 #, c-format msgid "%s: unexpected control file version" msgstr "%s: 予期しない制御ファイルバージョン" -#: pg_combinebackup.c:613 +#: pg_combinebackup.c:634 #, c-format -msgid "%s: expected system identifier %llu, but found %llu" -msgstr "%s: システム識別子 %llu を予期していましたが、%llu でした" +msgid "%s: expected system identifier %, but found %" +msgstr "%s: システム識別子 % を予期していましたが、% でした" -#: pg_combinebackup.c:645 +#: pg_combinebackup.c:665 #, c-format msgid "only some backups have checksums enabled" msgstr "一部のバックアップのみチェックサムが有効化されています" -#: pg_combinebackup.c:646 +#: pg_combinebackup.c:666 #, c-format -msgid "disable, and optionally reenable, checksums on the output directory to avoid failures" -msgstr "失敗を防止するためには出力先ディレクトリでのチェックサムを無効にして、必要に応じて再度有効にしてください" +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "失敗を防止するためには出力先ディレクトリでのチェックサムを無効にして、必要に応じて再度有効にしてください。" -#: pg_combinebackup.c:681 +#: pg_combinebackup.c:701 #, c-format msgid "removing output directory \"%s\"" msgstr "出力ディレクトリ\"%s\"を削除しています" -#: pg_combinebackup.c:683 +#: pg_combinebackup.c:703 #, c-format msgid "failed to remove output directory" msgstr "出力ディレクトリの削除に失敗しました" -#: pg_combinebackup.c:687 +#: pg_combinebackup.c:707 #, c-format msgid "removing contents of output directory \"%s\"" msgstr "出力ディレクトリ\"%s\"の内容の削除中" -#: pg_combinebackup.c:690 +#: pg_combinebackup.c:710 #, c-format msgid "failed to remove contents of output directory" msgstr "出力ディレクトリの内容の削除に失敗しました" -#: pg_combinebackup.c:730 +#: pg_combinebackup.c:750 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "ディレクトリ\"%s\"は存在しますが、空ではありません" -#: pg_combinebackup.c:733 +#: pg_combinebackup.c:753 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: pg_combinebackup.c:747 +#: pg_combinebackup.c:767 #, c-format msgid "" "%s reconstructs full backups from incrementals.\n" @@ -689,17 +704,17 @@ msgstr "" "%s 差分からフルバックアップを再構築する。\n" "\n" -#: pg_combinebackup.c:748 +#: pg_combinebackup.c:768 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_combinebackup.c:749 +#: pg_combinebackup.c:769 #, c-format msgid " %s [OPTION]... DIRECTORY...\n" msgstr " %s [オプション]... ディレクトリ...\n" -#: pg_combinebackup.c:750 +#: pg_combinebackup.c:770 #, c-format msgid "" "\n" @@ -708,27 +723,32 @@ msgstr "" "\n" "オプション:\n" -#: pg_combinebackup.c:751 +#: pg_combinebackup.c:771 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug 多くのデバッグ用の出力を生成\n" -#: pg_combinebackup.c:752 +#: pg_combinebackup.c:772 +#, c-format +msgid " -k, --link link files instead of copying\n" +msgstr " -k, --link コピーする代わりにリンクを作成する\n" + +#: pg_combinebackup.c:773 #, c-format msgid " -n, --dry-run do not actually do anything\n" msgstr " -n, --dry-run 実際には何もしない\n" -#: pg_combinebackup.c:753 +#: pg_combinebackup.c:774 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync 変更の安全なディスクへの書き出しを待機しない\n" -#: pg_combinebackup.c:754 +#: pg_combinebackup.c:775 #, c-format msgid " -o, --output=DIRECTORY output directory\n" msgstr " -o, --output=DIRECTORY 出力ディレクトリ\n" -#: pg_combinebackup.c:755 +#: pg_combinebackup.c:776 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -737,19 +757,24 @@ msgstr "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" " OLDDIRにあるテーブルスペースをNEWDIRへ移動\n" -#: pg_combinebackup.c:757 +#: pg_combinebackup.c:778 #, c-format -msgid " --clone clone (reflink) instead of copying files\n" +msgid " --clone clone (reflink) files instead of copying\n" msgstr "" -" --clone ファイルコピーではなくクローニング(またはreflink)を\n" -" 行う\n" +" --clone ファイルをコピーする代わりにクローニング(reflink)\n" +" を行う\n" -#: pg_combinebackup.c:758 +#: pg_combinebackup.c:779 #, c-format -msgid " --copy-file-range copy using copy_file_range() syscall\n" +msgid " --copy copy files (default)\n" +msgstr " --copy ファイルをコピーする(デフォルト)\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" msgstr " --copy-file-range copy_file_range()システムコールでコピーする\n" -#: pg_combinebackup.c:759 +#: pg_combinebackup.c:781 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -758,27 +783,27 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " 目録チェックサムのアルゴリズムを指定\n" -#: pg_combinebackup.c:761 +#: pg_combinebackup.c:783 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest バックアップマニフェストの生成を抑止\n" -#: pg_combinebackup.c:762 +#: pg_combinebackup.c:784 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr " --sync-method=METHOD ファイルをディスクに同期させる方法を指定\n" -#: pg_combinebackup.c:763 +#: pg_combinebackup.c:785 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_combinebackup.c:764 +#: pg_combinebackup.c:786 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_combinebackup.c:766 +#: pg_combinebackup.c:788 #, c-format msgid "" "\n" @@ -787,107 +812,107 @@ msgstr "" "\n" "バグは<%s>に報告してください。\n" -#: pg_combinebackup.c:767 +#: pg_combinebackup.c:789 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: pg_combinebackup.c:982 +#: pg_combinebackup.c:1004 #, c-format msgid "skipping symbolic link \"%s\"" msgstr "シンボリックリンク\"%s\"をスキップします" -#: pg_combinebackup.c:984 +#: pg_combinebackup.c:1006 #, c-format msgid "skipping special file \"%s\"" msgstr "スペシャルファイル\"%s\"をスキップしています" -#: pg_combinebackup.c:1060 +#: pg_combinebackup.c:1082 reconstruct.c:305 #, c-format -msgid "\"%s\" contains no entry for \"%s\"" -msgstr "\"%s\" には\"%s\"のエントリがありません" +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "目録ファイル\"%s\" にはファイル\"%s\"のエントリがありません" -#: pg_combinebackup.c:1176 +#: pg_combinebackup.c:1198 #, c-format msgid "%s: server version too old" msgstr "%s: サーバーバージョンが古すぎます" -#: pg_combinebackup.c:1177 +#: pg_combinebackup.c:1199 #, c-format msgid "%s: could not parse version number" msgstr "%s: バージョン番号をパースできませんでした" -#: pg_combinebackup.c:1296 +#: pg_combinebackup.c:1318 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: pg_combinebackup.c:1299 +#: pg_combinebackup.c:1321 #, c-format msgid "target of symbolic link \"%s\" is too long" msgstr "シンボリックリンク\"%s\"のターゲットが長すぎます" -#: pg_combinebackup.c:1302 +#: pg_combinebackup.c:1324 #, c-format msgid "target of symbolic link \"%s\" is relative" msgstr "シンボリックリンク\"%s\"のターゲットが相対的です" -#: pg_combinebackup.c:1324 +#: pg_combinebackup.c:1346 #, c-format msgid "tablespace at \"%s\" has no tablespace mapping" msgstr "\"%s\"にあるテーブルスペースに対応するテーブルスペースマッピングがありません" -#: pg_combinebackup.c:1342 +#: pg_combinebackup.c:1364 #, c-format msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" msgstr "OID %uと%uのテーブルスペースがどちらもディレクトリ\"%s\"を指しています" -#: pg_combinebackup.c:1351 +#: pg_combinebackup.c:1373 #, c-format msgid "could not close directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" -#: pg_combinebackup.c:1372 +#: pg_combinebackup.c:1394 #, c-format msgid "file \"%s\" is too large" msgstr "ファイル\"%s\"は大きすぎます" -#: pg_combinebackup.c:1389 +#: pg_combinebackup.c:1411 #, c-format msgid "could not read file \"%s\": read %zd of %lld" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$lldバイトのうち%2$zdバイトを読み込みました" -#: reconstruct.c:300 +#: reconstruct.c:339 #, c-format -msgid "manifest file \"%s\" contains no entry for file \"%s\"" -msgstr "目録ファイル\"%s\" にはファイル\"%s\"のエントリがありません" +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "フルバックアップに予期しない差分ファイル\"%s\"が含まれています" -#: reconstruct.c:410 +#: reconstruct.c:423 #, c-format msgid "file \"%s\" is too short: expected %llu, found %llu" msgstr "ファイル\"%s\"が短すぎます: %lluを期待していましたが%lluでした" -#: reconstruct.c:452 +#: reconstruct.c:465 #, c-format -msgid "file \"%s\" has bad incremental magic number (0x%x not 0x%x)" -msgstr "ファイル\"%1$s\"の差分マジックナンバーが正しくありません (0x%3$xではなく0x%2$xでした)" +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "ファイル\"%1$s\"の差分マジックナンバーが正しくありません (0x%3$xを期待していましたが0x%2$xでした)" -#: reconstruct.c:458 +#: reconstruct.c:471 #, c-format msgid "file \"%s\" has block count %u in excess of segment size %u" msgstr "ファイル\"%s\"のブロック数%uがセグメントサイズ%uを超えています" -#: reconstruct.c:465 +#: reconstruct.c:478 #, c-format msgid "file \"%s\" has truncation block length %u in excess of segment size %u" msgstr "ファイル\"%s\"の切り詰めブロック長%uがセグメントサイズ%uを超えています" -#: reconstruct.c:529 +#: reconstruct.c:542 #, c-format msgid "could not read file \"%s\": read %d of %u" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$uバイトのうち%2$dバイトを読み込みました" -#: reconstruct.c:773 +#: reconstruct.c:786 #, c-format msgid "could not read from file \"%s\", offset %llu: read %d of %d" msgstr "ファイル \"%1$s\"、オフセット%2$lluから読み取れませんでした: %4$d中%3$d" diff --git a/src/bin/pg_combinebackup/po/ka.po b/src/bin/pg_combinebackup/po/ka.po index 294257800ba65..9aa8952078c75 100644 --- a/src/bin/pg_combinebackup/po/ka.po +++ b/src/bin/pg_combinebackup/po/ka.po @@ -5,38 +5,121 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" +"Project-Id-Version: pg_combinebackup (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-04 22:22+0000\n" -"PO-Revision-Date: 2024-06-05 01:39+0200\n" +"POT-Creation-Date: 2025-05-02 22:22+0000\n" +"PO-Revision-Date: 2025-05-03 01:27+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: \n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" -#: ../../../src/common/logging.c:276 +#: ../../../src/common/logging.c:279 #, c-format msgid "error: " msgstr "შეცდომა: " -#: ../../../src/common/logging.c:283 +#: ../../../src/common/logging.c:286 #, c-format msgid "warning: " msgstr "გაფრთხილება: " -#: ../../../src/common/logging.c:294 +#: ../../../src/common/logging.c:297 #, c-format msgid "detail: " msgstr "დეტალები: " -#: ../../../src/common/logging.c:301 +#: ../../../src/common/logging.c:304 #, c-format msgid "hint: " msgstr "მინიშნება: " +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "ფაილის (%s) გახსნის შეცდომა: %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:164 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1410 reconstruct.c:540 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "ფაილის (%s) წაკითხვის შეცდომა: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\"-ის წაკითხვის შეცდომა: წაკითხულია %d %zu-დან" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:71 pg_combinebackup.c:548 +#: pg_combinebackup.c:1185 reconstruct.c:369 reconstruct.c:740 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "ფაილის (%s) დახურვის შეცდომა: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "ბაიტების მიმდევრობა არ ემთხვევა" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"ბაიტების მიმდევრობის შესაძლო შეუსაბამობა pg_control ფაილის შესანახად გამოყენებული \n" +"ბაიტების მიმდევრობა შესაძლოა არ ემთხვეოდეს ამ პროგრამის მიერ გამოყენებულს. ამ შემთხვევაში ქვემოთ \n" +"მოცემული შედეგები არასწორი იქნება და PostgreSQL ეს აგება ამ მონაცემთა საქაღალდესთან შეუთავსებელი იქნება." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:69 +#: ../../common/file_utils.c:370 ../../common/file_utils.c:428 +#: ../../common/file_utils.c:502 backup_label.c:143 copy_file.c:69 +#: copy_file.c:153 copy_file.c:185 copy_file.c:189 copy_file.c:239 +#: copy_file.c:282 load_manifest.c:128 pg_combinebackup.c:533 +#: pg_combinebackup.c:1177 reconstruct.c:523 reconstruct.c:638 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "ფაილის (%s) გახსნის შეცდომა: %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:440 +#: ../../common/file_utils.c:510 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "ფაილის (%s) fsync-ის შეცდომა: %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/jsonapi.c:2407 ../../common/parse_manifest.c:157 +#: ../../common/parse_manifest.c:852 +#, c-format +msgid "out of memory" +msgstr "არასაკმარისი მეხსიერება" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "წარმატება" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "სამიზნე ბუფერი ძალიან პატარაა" + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "OpenSSL -ის სეცდომა" + #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 #, c-format @@ -48,264 +131,313 @@ msgstr "არასაკმარისი მეხსიერება\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" -#: ../../common/jsonapi.c:2121 +#: ../../common/file_utils.c:75 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "შეუძლებელია ფაილური სისტემის სინქრონიზაცია ფაილისთვის \"%s\": %m" + +#: ../../common/file_utils.c:123 ../../common/file_utils.c:588 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:685 +#: pg_combinebackup.c:1141 pg_combinebackup.c:1393 reconstruct.c:204 +#: reconstruct.c:421 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "ფაილი \"%s\" არ არსებობს: %m" + +#: ../../common/file_utils.c:133 ../../common/file_utils.c:243 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "ამ აგებას სინქრონიზაციის მეთოდის \"%s\" მხარდაჭერა არ გააჩნია" + +#: ../../common/file_utils.c:156 ../../common/file_utils.c:304 +#: pg_combinebackup.c:943 pg_combinebackup.c:1266 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" + +#: ../../common/file_utils.c:174 ../../common/file_utils.c:338 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "საქაღალდის (%s) წაკითხვის შეცდომა: %m" + +#: ../../common/file_utils.c:520 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "გადარქმევის შეცდომა %s - %s: %m" + +#: ../../common/jsonapi.c:2432 msgid "Recursive descent parser cannot use incremental lexer." msgstr "რეკურსიულ დაღმავალ დამმუშავებელს ინკრემენტული lexer-ის გამოყენება არ შეუძლია." -#: ../../common/jsonapi.c:2123 +#: ../../common/jsonapi.c:2434 msgid "Incremental parser requires incremental lexer." msgstr "ინკრემენტულ დამმუშავებელს ინკრემენტული lexer სჭირდება." -#: ../../common/jsonapi.c:2125 +#: ../../common/jsonapi.c:2436 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "JSON მეტისმეტად ღრმადაა ერთმანეთში ჩალაგებული. მაქსიმალური დასაშვები სიღრმეა 6400." -#: ../../common/jsonapi.c:2127 +#: ../../common/jsonapi.c:2438 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "სპეციალური მიმდევრობა \"\\%.*s\" არასწორია." -#: ../../common/jsonapi.c:2131 +#: ../../common/jsonapi.c:2442 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "სიმბოლო კოდით 0x%02x აუცილებლად ეკრანირებული უნდა იყოს." -#: ../../common/jsonapi.c:2135 +#: ../../common/jsonapi.c:2446 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "მოველოდი შეყვანის დასასრულს, მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2138 +#: ../../common/jsonapi.c:2449 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "მოველოდი მასივის ელემენტს ან \"]\", მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2141 +#: ../../common/jsonapi.c:2452 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "მოველოდი \",\" ან \"]\", მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2144 +#: ../../common/jsonapi.c:2455 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "მოველოდი \":\", მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2147 +#: ../../common/jsonapi.c:2458 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "მოველოდი JSON მნიშვნელობას. მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2150 +#: ../../common/jsonapi.c:2461 msgid "The input string ended unexpectedly." msgstr "შეყვანის სტრიქონი მოულოდნელად დასრულდა." -#: ../../common/jsonapi.c:2152 +#: ../../common/jsonapi.c:2463 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "მოველოდი სტრიქონს ან \"}\", მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2155 +#: ../../common/jsonapi.c:2466 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "მოველოდი \",\", ან \"}\", მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2158 +#: ../../common/jsonapi.c:2469 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "მოველოდი სტრიქონს, მაგრამ მივიღე \"%.*s\"." -#: ../../common/jsonapi.c:2161 +#: ../../common/jsonapi.c:2472 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "კოდი \"%.*s\" არასწორია." -#: ../../common/jsonapi.c:2164 +#: ../../common/jsonapi.c:2478 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 ტექსტად ვერ გარდაიქმნება." -#: ../../common/jsonapi.c:2166 +#: ../../common/jsonapi.c:2480 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\" ს თექვსმეტობითი ციფრები უნდა მოჰყვებოდეს." -#: ../../common/jsonapi.c:2169 +#: ../../common/jsonapi.c:2483 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "უნიკოდის სპეციალური კოდების გამოყენება კოდის წერტილის მნიშვნელობებად 007F-ის ზემოთ შეუძლებელია, თუ კოდირება UTF-8 არაა." -#: ../../common/jsonapi.c:2178 +#: ../../common/jsonapi.c:2492 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "უნიკოდის სპეციალური კოდების სერვერის კოდირებაში (%s) თარგმნა შეუძლებელია." -#: ../../common/jsonapi.c:2185 +#: ../../common/jsonapi.c:2499 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "უნიკოდის მაღალ სუროგატს მაღალი სუროგატი არ უნდა მოსდევდეს." -#: ../../common/jsonapi.c:2187 +#: ../../common/jsonapi.c:2501 msgid "Unicode low surrogate must follow a high surrogate." msgstr "უნიკოდის დაბალი სუროგატი მაღალ სუროგატს უნდა მისდევდეს." -#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:853 -#, c-format -msgid "out of memory" -msgstr "არასაკმარისი მეხსიერება" +#: ../../common/jsonapi.c:2523 +msgid "out of memory while constructing error description" +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 pg_combinebackup.c:190 +#: ../../common/parse_manifest.c:699 pg_combinebackup.c:204 #, 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" +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "არასწორი მნიშვნელობა \"%s\" პარამეტრისთვის %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s არაა საზღვრებში %d-დან %d-მდე" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "უცნობი სინქრონიზაციის მეთოდი: \"%s\"" + #: backup_label.c:66 backup_label.c:85 backup_label.c:95 #, c-format msgid "%s: could not parse %s" @@ -336,97 +468,76 @@ msgstr "%s: %s ვერ ვიპოვე" msgid "%s: %s requires %s" msgstr "%s: %s-ს %s სჭირდება" -#: backup_label.c:143 copy_file.c:135 copy_file.c:167 copy_file.c:171 -#: copy_file.c:218 copy_file.c:258 load_manifest.c:128 pg_combinebackup.c:511 -#: pg_combinebackup.c:1154 reconstruct.c:511 reconstruct.c:626 -#: write_manifest.c:250 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "ფაილის (%s) გახსნის შეცდომა: %m" - -#: backup_label.c:160 copy_file.c:182 reconstruct.c:747 -#, c-format -msgid "could not write file \"%s\": %m" -msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" - -#: backup_label.c:162 reconstruct.c:749 write_manifest.c:262 +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 #, c-format -msgid "could not write file \"%s\": wrote only %d of %d bytes" -msgstr "ვერ ჩავწერე ფაილი \"%s\": ჩავწერე, მხოლოდ, %d ბაიტი %d-დან" +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "ფაილში \"%s\" ჩაწერა შეუძლებელია. ჩაწერილია %d %d-დან" -#: backup_label.c:166 copy_file.c:142 copy_file.c:189 reconstruct.c:709 -#: reconstruct.c:755 write_manifest.c:270 +#: backup_label.c:166 copy_file.c:160 copy_file.c:207 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 #, c-format msgid "could not update checksum of file \"%s\"" msgstr "ფაილის (\"%s\") საკონტროლო ჯამის განახლების შეცდომა" -#: backup_label.c:174 copy_file.c:64 pg_combinebackup.c:526 -#: pg_combinebackup.c:1162 reconstruct.c:357 reconstruct.c:728 -#: write_manifest.c:187 -#, c-format -msgid "could not close \"%s\": %m" -msgstr "\"%s\" ვერ დავხურე: %m" - -#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:1118 +#: copy_file.c:200 #, c-format -msgid "could not stat file \"%s\": %m" -msgstr "ფაილი \"%s\" არ არსებობს: %m" +msgid "could not write to file \"%s\": %m" +msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" -#: copy_file.c:62 +#: copy_file.c:202 #, c-format -msgid "could not open \"%s\": %m" -msgstr "\"%s\" ვერ გავხსენი: %m" +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "ფაილში \"%s\" ჩაწერის შეცდომა. წანაცვლება %u: ჩავწერე %d ბაიტი %d-დან" -#: copy_file.c:146 copy_file.c:195 load_manifest.c:161 load_manifest.c:199 -#: pg_combinebackup.c:1387 reconstruct.c:528 reconstruct.c:772 +#: copy_file.c:213 reconstruct.c:784 #, c-format -msgid "could not read file \"%s\": %m" -msgstr "ფაილის (%s) წაკითხვის შეცდომა: %m" +msgid "could not read from file \"%s\": %m" +msgstr "ფაილიდან (\"%s\") წაკითხვის შეცდომა: %m" -#: copy_file.c:184 -#, c-format -msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" -msgstr "ფაილში \"%s\" ჩაწერის შეცდომა: ჩავწერე მხოლოდ %d ბაიტი %d-დან , წანაცვლებაზე %u" - -#: copy_file.c:214 +#: copy_file.c:232 #, c-format msgid "error while cloning file \"%s\" to \"%s\": %m" msgstr "შეცდომა ფაილის დაკლონვისას \"%s\"-დან \"%s\"-მდე: %m" -#: copy_file.c:222 copy_file.c:262 +#: copy_file.c:243 copy_file.c:286 #, c-format msgid "could not create file \"%s\": %m" msgstr "ფაილის (%s) შექმნის შეცდომა: %m" -#: copy_file.c:230 +#: copy_file.c:251 #, c-format msgid "error while cloning file \"%s\" to \"%s\": %s" msgstr "შეცდომა ფაილის დაკლონვისას \"%s\"-დან \"%s\"-მდე: %s" -#: copy_file.c:235 pg_combinebackup.c:239 +#: copy_file.c:259 pg_combinebackup.c:256 #, c-format msgid "file cloning not supported on this platform" msgstr "ამ პლატფორმაზე კლონირება მხარდაჭერილი არაა" -#: copy_file.c:268 reconstruct.c:692 +#: copy_file.c:292 reconstruct.c:704 #, c-format msgid "error while copying file range from \"%s\" to \"%s\": %m" msgstr "შეცდომა ფაილბის შუალედის კოპირებისას \"%s\"-დან \"%s\"-მდე: %m" -#: copy_file.c:275 pg_combinebackup.c:252 reconstruct.c:712 +#: copy_file.c:299 pg_combinebackup.c:269 reconstruct.c:724 #, c-format msgid "copy_file_range not supported on this platform" msgstr "ამ პლატფორმაზე copy_file_range მხარდაჭერილი არაა" -#: copy_file.c:290 +#: copy_file.c:314 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "ფაილის \"%s\"-დან \"%s\"-ში კოპირება შეუძლებელია: %m" + +#: copy_file.c:333 #, c-format -msgid "could not copy \"%s\" to \"%s\": %m" -msgstr "\"%s\"-დან \"%s\"-ში კოპირება შეუძლებელია: %m" +msgid "could not create link from \"%s\" to \"%s\": %m" +msgstr "\"%s\"-დან \"%s\"-მდე ბმულის შექმნა შეუძლებელია: %m" #: load_manifest.c:125 #, c-format -msgid "\"%s\" does not exist" -msgstr "\"%s\" არ არსებობს" +msgid "file \"%s\" does not exist" +msgstr "ფაილი %s არ არსებობს" #: load_manifest.c:163 #, c-format @@ -438,153 +549,152 @@ msgstr "ფაილის \"%s\" წაკითხვა შეუძლებ msgid "could not read file \"%s\": read %lld of %lld" msgstr "ფაილის \"%s\" წაკითხვა შეუძლებელია: წაკითხულია %lld %lld-დან" -#: load_manifest.c:249 +#: load_manifest.c:248 #, c-format msgid "backup manifest version 1 does not support incremental backup" msgstr "მარქაფის მანიფესტის ვერსიას 1 ინკრემენტული მარქაფების მხარდაჭერა არ გააჩნია" -#: load_manifest.c:281 +#: load_manifest.c:280 #, c-format msgid "duplicate path name in backup manifest: \"%s\"" msgstr "მარქაფს მანიფესტში მითითებული ბილიკის სახელი დუბლირებულია: %s" -#: pg_combinebackup.c:208 pg_combinebackup.c:216 +#: pg_combinebackup.c:225 pg_combinebackup.c:233 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: pg_combinebackup.c:215 +#: pg_combinebackup.c:232 #, c-format -msgid "%s: no input directories specified" -msgstr "%s: შეყვანის საქაღალდეები მითითებული არაა" +msgid "no input directories specified" +msgstr "შეყვანის საქაღალდეები მითითებული არაა" -#: pg_combinebackup.c:221 +#: pg_combinebackup.c:238 #, c-format msgid "no output directory specified" msgstr "გამოტანის საქაღალდე მითითებული არაა" -#: pg_combinebackup.c:289 +#: pg_combinebackup.c:306 #, c-format -msgid "%s: manifest system identifier is %llu, but control file has %llu" -msgstr "%s: მანიფესტის სისტემის იდენტიფიკატორია %llu, მაგრამ კონტროლის ფაილი შეიცავს %llu" +msgid "%s: manifest system identifier is %, but control file has %" +msgstr "%s: მანიფესტის სისტემის იდენტიფიკატორია %, მაგრამ კონტროლის ფაილი შეიცავს %-ს" -#: pg_combinebackup.c:328 +#: pg_combinebackup.c:345 #, c-format -msgid "can't generate a manifest because no manifest is available for the final input backup" +msgid "cannot generate a manifest because no manifest is available for the final input backup" msgstr "მანიფესტის გენერაცია შეუძლებელია, რადგან საბოლოო შეყვანის მარქაფისთვის მანიფესტი ხელმისაწვდომი არაა" -#: pg_combinebackup.c:375 +#: pg_combinebackup.c:392 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "%s-დან %s-მდე სიმბმულის შექმნა შეუძლებელია: %m" -#: pg_combinebackup.c:387 pg_combinebackup.c:718 pg_combinebackup.c:914 +#: pg_combinebackup.c:404 pg_combinebackup.c:739 pg_combinebackup.c:937 #, c-format msgid "could not create directory \"%s\": %m" msgstr "საქაღალდის (%s) შექმნის შეცდომა: %m" -#: pg_combinebackup.c:442 +#: pg_combinebackup.c:434 +#, c-format +msgid "--link mode was used; any modifications to the output directory might destructively modify input directories" +msgstr "გამოყენებული იყო რეჟიმი --link. გამოტანის საქაღალდის ნებისმიერმა ცვლილებამ, შეიძლება, შეყვანის საქაღალდეები დამანგრევლად შეცვალოს" + +#: pg_combinebackup.c:464 #, c-format msgid "directory name too long" msgstr "საქაღალდის სახელი ძალიან გრძელია" -#: pg_combinebackup.c:449 +#: pg_combinebackup.c:471 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "ცხრილების სივრცის მიბმაში ერთზე მეტი \"=\" ნიშანია" -#: pg_combinebackup.c:457 +#: pg_combinebackup.c:479 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "ცხრილების მიბმის არასწორი ფორმატი \"%s\", უნდა იყოს \"OLDDIR=NEWDIR\"" -#: pg_combinebackup.c:468 pg_combinebackup.c:472 +#: pg_combinebackup.c:490 pg_combinebackup.c:494 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "ძველი საქაღალდის ბილიკი ცხრილის სივრცის მიბმაში აბსოლუტური არაა: %s" -#: pg_combinebackup.c:541 +#: pg_combinebackup.c:563 #, c-format msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" msgstr "მარქაფი მისამართზე \"%s\" სრული მარქაფია, მაგრამ, მხოლოდ, პირველი მარქაფი უნდა იყოს სრული" -#: pg_combinebackup.c:544 +#: pg_combinebackup.c:566 #, c-format msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" msgstr "მარქაფი მისამართზე \"%s\" ინკრემენტული მარქაფია, მაგრამ პირველი მარქაფი სრული უნდა იყოს" -#: pg_combinebackup.c:547 +#: pg_combinebackup.c:569 #, c-format msgid "backup at \"%s\" starts on timeline %u, but expected %u" msgstr "მარქაფი მისამართზე \"%s\" იწყება დროის ხაზზე %u, მაგრამ მოველოდი მნიშვნელობას %u" -#: pg_combinebackup.c:550 +#: pg_combinebackup.c:572 #, c-format msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" msgstr "მარქაფი მისამართზე \"%s\" იწყება LSN-თან %X/%X, მაგრამ მოველოდი მნიშვნელობას %X/%X" -#: pg_combinebackup.c:602 +#: pg_combinebackup.c:624 #, c-format msgid "%s: CRC is incorrect" msgstr "%s: CRC არასწორია" -#: pg_combinebackup.c:606 +#: pg_combinebackup.c:628 #, c-format msgid "%s: unexpected control file version" msgstr "%s: მოულოდნელი საკონტროლო ფაილის ვერსია" -#: pg_combinebackup.c:613 +#: pg_combinebackup.c:635 #, c-format -msgid "%s: expected system identifier %llu, but found %llu" -msgstr "%s: მოველოდი სისტემის იდენტიფიკატორს %llu, ნაპოვნი მნიშვნელობაა %llu" +msgid "%s: expected system identifier %, but found %" +msgstr "%s: მოველოდი სისტემის იდენტიფიკატორს %, ნაპოვნი მნიშვნელობაა %" -#: pg_combinebackup.c:645 +#: pg_combinebackup.c:666 #, c-format msgid "only some backups have checksums enabled" msgstr "საკონტროლო ჯამები, მხოლოდ, ზოგიერთ მარქაფს ჰქონდა" -#: pg_combinebackup.c:646 -#, c-format -msgid "disable, and optionally reenable, checksums on the output directory to avoid failures" -msgstr "გამორთვა და არასავალდებულოდ თავიდან ჩართვა საკონტროლო ჯამებისა გამოტანის საქაღალდეზე, ჩავარდნების თავიდან ასაცილებლად" - -#: pg_combinebackup.c:664 pg_combinebackup.c:1370 reconstruct.c:199 -#: reconstruct.c:409 +#: pg_combinebackup.c:667 #, c-format -msgid "could not stat \"%s\": %m" -msgstr "\"%s\" ვერ აღმოვაჩინე: %m" +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "გამორთვა და არასავალდებულოდ თავიდან ჩართვა საკონტროლო ჯამებისა გამოტანის საქაღალდეზე, ჩავარდნების თავიდან ასაცილებლად." -#: pg_combinebackup.c:681 +#: pg_combinebackup.c:702 #, c-format msgid "removing output directory \"%s\"" msgstr "წაიშლება გამოტანის საქაღალდე \"%s\"" -#: pg_combinebackup.c:683 +#: pg_combinebackup.c:704 #, c-format msgid "failed to remove output directory" msgstr "გამოტანის საქაღალდის წაშლა ჩავარდა" -#: pg_combinebackup.c:687 +#: pg_combinebackup.c:708 #, c-format msgid "removing contents of output directory \"%s\"" msgstr "წაიშლება შემცველობა გამოტანის საქაღალდისთვის \"%s\"" -#: pg_combinebackup.c:690 +#: pg_combinebackup.c:711 #, c-format msgid "failed to remove contents of output directory" msgstr "გამოტანის საქაღალდის შემცველობის წაშლა ჩავარდა" -#: pg_combinebackup.c:730 +#: pg_combinebackup.c:751 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "საქაღალდე \"%s\" არსებობს, მაგრამ ცარიელი არაა" -#: pg_combinebackup.c:733 +#: pg_combinebackup.c:754 #, c-format msgid "could not access directory \"%s\": %m" msgstr "საქაღალდის (%s) წვდომის შეცდომა: %m" -#: pg_combinebackup.c:747 +#: pg_combinebackup.c:768 #, c-format msgid "" "%s reconstructs full backups from incrementals.\n" @@ -593,17 +703,17 @@ msgstr "" "%s სრული მარქაფების აგება ინკრემენტულებისგან.\n" "\n" -#: pg_combinebackup.c:748 +#: pg_combinebackup.c:769 #, c-format msgid "Usage:\n" msgstr "გამოყენება:\n" -#: pg_combinebackup.c:749 +#: pg_combinebackup.c:770 #, c-format msgid " %s [OPTION]... DIRECTORY...\n" msgstr " %s [პარამეტრი]... საქაღალდე...\n" -#: pg_combinebackup.c:750 +#: pg_combinebackup.c:771 #, c-format msgid "" "\n" @@ -612,27 +722,32 @@ msgstr "" "\n" "პარამეტრები:\n" -#: pg_combinebackup.c:751 +#: pg_combinebackup.c:772 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug გასამართი ინფორმაციის გენერაცია\n" -#: pg_combinebackup.c:752 +#: pg_combinebackup.c:773 +#, c-format +msgid " -k, --link link files instead of copying\n" +msgstr " -k, --link ფაილებზე ბმულების შექმნა მათი კოპირების ნაცვლად\n" + +#: pg_combinebackup.c:774 #, c-format msgid " -n, --dry-run do not actually do anything\n" msgstr " -n, --dry-run არაფერი სინამდვილეში არ ქნა\n" -#: pg_combinebackup.c:753 +#: pg_combinebackup.c:775 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync არ დაველოდო ცვლილებების დისკზე უსაფრთხოდ ჩაწერას\n" -#: pg_combinebackup.c:754 +#: pg_combinebackup.c:776 #, c-format -msgid " -o, --output output directory\n" -msgstr " -o, --output გამოტანის საქაღალდე\n" +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=საქაღალდე გამოტანის საქაღალდე\n" -#: pg_combinebackup.c:755 +#: pg_combinebackup.c:777 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -641,17 +756,22 @@ msgstr "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" " ცხრილების სივრცის OLDDIR-დან NEWDIR-ში გადატანა\n" -#: pg_combinebackup.c:757 +#: pg_combinebackup.c:779 #, c-format -msgid " --clone clone (reflink) instead of copying files\n" +msgid " --clone clone (reflink) files instead of copying\n" msgstr " --clone ფაილების დაკლონვა (reflink) კოპირების ნაცვლად\n" -#: pg_combinebackup.c:758 +#: pg_combinebackup.c:780 #, c-format -msgid " --copy-file-range copy using copy_file_range() syscall\n" +msgid " --copy copy files (default)\n" +msgstr " --copy ფაილების კოპირება (ნაგულისხმევი)\n" + +#: pg_combinebackup.c:781 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" msgstr " --copy-file-range კოპირება სისტემური ფუნქციით copy_file_range()\n" -#: pg_combinebackup.c:759 +#: pg_combinebackup.c:782 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -660,27 +780,27 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " მანიფესტების საკონტროლო ჯამის გამოსათვლელი ალფორითმი\n" -#: pg_combinebackup.c:761 +#: pg_combinebackup.c:784 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest მარქაფის მანიფესტი არ შეიქმნება\n" -#: pg_combinebackup.c:762 +#: pg_combinebackup.c:785 #, c-format msgid " --sync-method=METHOD set method for syncing files to disk\n" msgstr " --sync-method=მეთოდი ფაილების დისკზე სინქრონიზაციის მეთოდის დაყენება\n" -#: pg_combinebackup.c:763 +#: pg_combinebackup.c:786 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: pg_combinebackup.c:764 +#: pg_combinebackup.c:787 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: pg_combinebackup.c:766 +#: pg_combinebackup.c:789 #, c-format msgid "" "\n" @@ -689,116 +809,158 @@ msgstr "" "\n" "შეცდომების შესახებ მიწერეთ: %s\n" -#: pg_combinebackup.c:767 +#: pg_combinebackup.c:790 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: pg_combinebackup.c:920 pg_combinebackup.c:1243 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" - -#: pg_combinebackup.c:982 +#: pg_combinebackup.c:1005 #, c-format msgid "skipping symbolic link \"%s\"" msgstr "%s: სიმბმულია. გამოტოვება" -#: pg_combinebackup.c:984 +#: pg_combinebackup.c:1007 #, c-format msgid "skipping special file \"%s\"" msgstr "სპეციალური ფაილის გამოტოვება \"%s\"" -#. translator: the first %s is a backup manifest file, the second is a file absent therein -#: pg_combinebackup.c:1060 reconstruct.c:301 +#: pg_combinebackup.c:1083 reconstruct.c:305 #, c-format -msgid "\"%s\" contains no entry for \"%s\"" -msgstr "\"%s\" არ შეიცავს ჩანაწერს \"%s\"-სთვის" +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "მანიფესტის ფაილი \"%s\" ფაილისთვის \"%s\" ჩანაწერებს არ შეიცავს" -#: pg_combinebackup.c:1176 +#: pg_combinebackup.c:1199 #, c-format -msgid "%s: server version too old\n" -msgstr "%s: სერვერის ვერსია ძალიან ძველია\n" +msgid "%s: server version too old" +msgstr "%s: სერვერის ვერსია ძალიან ძველია" -#: pg_combinebackup.c:1177 +#: pg_combinebackup.c:1200 #, c-format -msgid "%s: could not parse version number\n" -msgstr "%s: ვერსის ნომრის დამუშავების შეცდომა\n" +msgid "%s: could not parse version number" +msgstr "%s: ვერსის ნომრის დამუშავების შეცდომა" -#: pg_combinebackup.c:1296 +#: pg_combinebackup.c:1319 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "სიმბოლური ბმის \"%s\" წაკითხვის შეცდომა: %m" -#: pg_combinebackup.c:1299 +#: pg_combinebackup.c:1322 #, c-format -msgid "symbolic link \"%s\" is too long" -msgstr "სიმბოლური ბმული \"%s\" მეტისმეტად გრძელია" +msgid "target of symbolic link \"%s\" is too long" +msgstr "სიმბოლური ბმულის \"%s\" სამიზნე მეტისმეტად გრძელია" -#: pg_combinebackup.c:1302 +#: pg_combinebackup.c:1325 #, c-format -msgid "symbolic link \"%s\" is relative" -msgstr "სიმბმული \"%s\" ფარდობითია" +msgid "target of symbolic link \"%s\" is relative" +msgstr "სიმბმულის \"%s\" სამიზნე ფარდობითია" -#: pg_combinebackup.c:1324 +#: pg_combinebackup.c:1347 #, c-format msgid "tablespace at \"%s\" has no tablespace mapping" msgstr "ცხრილები სივრცეს მისამართზე \"%s\" ცხრილების სივრცის ასახვები არ გააჩნია" -#: pg_combinebackup.c:1342 +#: pg_combinebackup.c:1365 #, c-format -msgid "tablespaces with OIDs %u and %u both point at \"%s\"" -msgstr "ცხრილის სივრცეები OID-ებით %u და %u, ორივე, \"%s\"-ზე მიუთითებს" +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "ცხრილის სივრცეები OID-ებით %u და %u, ორივე მიუთითებს საქაღალდეზე \"%s\"-ზე" -#: pg_combinebackup.c:1351 +#: pg_combinebackup.c:1374 #, c-format msgid "could not close directory \"%s\": %m" msgstr "საქაღალდის %s-ზე დახურვის შეცდომა: %m" -#: pg_combinebackup.c:1372 +#: pg_combinebackup.c:1395 #, c-format msgid "file \"%s\" is too large" msgstr "%s: ფაილი ძალიან დიდია" -#: pg_combinebackup.c:1389 +#: pg_combinebackup.c:1412 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "ფაილის \"%s\" წაკითხვა შეუძლებელია: წაკითხულია %zd %lld-დან" + +#: reconstruct.c:339 #, c-format -msgid "could not read file \"%s\": read only %zd of %lld bytes" -msgstr "ვერ წავიკითხე ფაილი \"%s\": წავიკითხე, მხოლოდ, %zd ბაიტი %lld-დან" +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "სრული მარქაფი შეიცავს მოულოდნელ ინკრემენტულ ფაილს \"%s\"" -#: reconstruct.c:411 +#: reconstruct.c:423 #, c-format msgid "file \"%s\" is too short: expected %llu, found %llu" msgstr "ფაილი \"%s\" მეტისმეტად მოკლეა. მოველოდი %llu, მივიღე %llu" -#: reconstruct.c:453 +#: reconstruct.c:465 #, c-format -msgid "file \"%s\" has bad incremental magic number (0x%x not 0x%x)" +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" msgstr "ფაილს \"%s\" არასწორი ინკრემენტული ჯადოსნური რიცხვი (0x%x not 0x%x) გააჩნია" -#: reconstruct.c:459 +#: reconstruct.c:471 #, c-format msgid "file \"%s\" has block count %u in excess of segment size %u" msgstr "ფაილს \"%s\" აქვს ბლოკების რაოდენობა %u, რომელიც სეგმენტის ზომას %u აჭარბებს" -#: reconstruct.c:466 +#: reconstruct.c:478 #, c-format msgid "file \"%s\" has truncation block length %u in excess of segment size %u" msgstr "ფაილს \"%s\" აქვს წაკვეთის ბლოკის სიგრძე %u, რომელიც სეგმენტის ზომას %u აჭარბებს" -#: reconstruct.c:530 +#: reconstruct.c:542 #, c-format -msgid "could not read file \"%s\": read only %d of %u bytes" -msgstr "ვერ წავიკითხე ფაილი \"%s\": წავიკითხე, მხოლოდ, %d ბაიტი %u-დან" +msgid "could not read file \"%s\": read %d of %u" +msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: წაკითხულია %d %u-დან" -#: reconstruct.c:774 +#: reconstruct.c:786 #, c-format -msgid "could not read file \"%s\": read only %d of %d bytes at offset %llu" -msgstr "ვერ წავიკითხე ფაილი \"%s\": წავიკითხე, მხოლოდ %d ბაიტი %d-დან წანაცვლებაზე %llu" +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "ფაილიდან \"%s\" წაკითხვის შეცდომა. წანაცვლება %llu: წაკითხულია %d %d-დან" + +#, c-format +#~ msgid "\"%s\" contains no entry for \"%s\"" +#~ msgstr "\"%s\" არ შეიცავს ჩანაწერს \"%s\"-სთვის" + +#, c-format +#~ msgid "\"%s\" does not exist" +#~ msgstr "\"%s\" არ არსებობს" + +#, c-format +#~ msgid "could not close \"%s\": %m" +#~ msgstr "\"%s\" ვერ დავხურე: %m" + +#, c-format +#~ msgid "could not open \"%s\": %m" +#~ msgstr "\"%s\" ვერ გავხსენი: %m" + +#, c-format +#~ msgid "could not read file \"%s\": read only %d of %d bytes at offset %llu" +#~ msgstr "ვერ წავიკითხე ფაილი \"%s\": წავიკითხე, მხოლოდ %d ბაიტი %d-დან წანაცვლებაზე %llu" + +#, c-format +#~ msgid "could not read file \"%s\": read only %d of %u bytes" +#~ msgstr "ვერ წავიკითხე ფაილი \"%s\": წავიკითხე, მხოლოდ, %d ბაიტი %u-დან" + +#, c-format +#~ msgid "could not read file \"%s\": read only %zd of %lld bytes" +#~ msgstr "ვერ წავიკითხე ფაილი \"%s\": წავიკითხე, მხოლოდ, %zd ბაიტი %lld-დან" + +#, c-format +#~ msgid "could not stat \"%s\": %m" +#~ msgstr "\"%s\" ვერ აღმოვაჩინე: %m" + +#, c-format +#~ msgid "could not write \"%s\": %m" +#~ msgstr "\"%s\"-ში ჩაწერის შეცდომა: %m" + +#, c-format +#~ msgid "could not write file \"%s\": wrote only %d of %d bytes" +#~ msgstr "ვერ ჩავწერე ფაილი \"%s\": ჩავწერე, მხოლოდ, %d ბაიტი %d-დან" + +#, c-format +#~ msgid "could not write file \"%s\": wrote only %d of %d bytes at offset %u" +#~ msgstr "ფაილში \"%s\" ჩაწერის შეცდომა: ჩავწერე მხოლოდ %d ბაიტი %d-დან , წანაცვლებაზე %u" -#: write_manifest.c:260 #, c-format -msgid "could not write \"%s\": %m" -msgstr "\"%s\"-ში ჩაწერის შეცდომა: %m" +#~ msgid "error while linking file from \"%s\" to \"%s\": %m" +#~ msgstr "შეცდომა ფაილის ბმულის შექმნისას \"%s\"-დან \"%s\"-მდე: %m" #, c-format #~ msgid "unexpected json parse error type: %d" diff --git a/src/bin/pg_combinebackup/po/ko.po b/src/bin/pg_combinebackup/po/ko.po new file mode 100644 index 0000000000000..e6d9629b170ff --- /dev/null +++ b/src/bin/pg_combinebackup/po/ko.po @@ -0,0 +1,918 @@ +# Korean message translation file for pg_combinebackup +# Copyright (C) 2025 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_combinebackup (PostgreSQL) package. +# Ioseph Kim , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-01-17 04:52+0000\n" +"PO-Revision-Date: 2025-01-18 00:54+0900\n" +"Last-Translator: Ioseph Kim \n" +"Language-Team: Korean team \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:276 +#, c-format +msgid "error: " +msgstr "오류: " + +#: ../../../src/common/logging.c:283 +#, c-format +msgid "warning: " +msgstr "경고: " + +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "상세정보: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "힌트: " + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "\"%s\" 파일 일기 모드로 열기 실패: %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:150 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1400 reconstruct.c:540 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "\"%s\" 파일을 읽을 수 없음: %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:68 pg_combinebackup.c:538 +#: pg_combinebackup.c:1175 reconstruct.c:369 reconstruct.c:740 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "\"%s\" 파일을 닫을 수 없음: %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "바이트 순서 불일치" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, " +"and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"바이트 순서가 일치하지 않습니다.\n" +"pg_control 파일을 저장하는 데 사용된 바이트 순서는 \n" +"이 프로그램에서 사용하는 순서와 일치해야 합니다. 이 경우 아래 결과는 올바르" +"지 않으며\n" +"현재 PostgreSQL 설치본과 이 데이터 디렉터리가 호환하지 않습니다." + +#: ../../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 backup_label.c:143 copy_file.c:66 +#: copy_file.c:139 copy_file.c:171 copy_file.c:175 copy_file.c:225 +#: copy_file.c:268 load_manifest.c:128 pg_combinebackup.c:523 +#: pg_combinebackup.c:1167 reconstruct.c:523 reconstruct.c:638 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "\"%s\" 파일을 열 수 없음: %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "\"%s\" 파일 쓰기 실패: %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "\"%s\" 파일 fsync 실패: %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:852 +#, c-format +msgid "out of memory" +msgstr "메모리 부족" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "성공" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "대상 버퍼가 너무 작습니다." + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "OpenSSL 실패" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "\"%s\" 파일 대상으로 파일 시스템 동기화를 할 수 없습니다: %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:676 +#: pg_combinebackup.c:1131 pg_combinebackup.c:1383 reconstruct.c:204 +#: reconstruct.c:421 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "이 빌드는 \"%s\" 동기화 방법을 지원하지 않음" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_combinebackup.c:933 pg_combinebackup.c:1256 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "\"%s\" 디렉터리 열 수 없음: %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" + +#: ../../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "재귀적 하향 구문분석기는 증분 토큰분석기을 사용할 수 없습니다." + +#: ../../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "증분 구문분석기는 증분 토큰분석기를 필요로 합니다." + +#: ../../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON 계층이 너무 깊음, 허용하는 최대 깊이는 6400입니다." + +#: ../../common/jsonapi.c:2127 +#, c-format +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "\"\\%.*s\" 이스케이프 표기가 바르지 않습니다." + +#: ../../common/jsonapi.c:2131 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "0x%02x 값의 문자는 이스케이프 처리를 해야함." + +#: ../../common/jsonapi.c:2135 +#, c-format +msgid "Expected end of input, but found \"%.*s\"." +msgstr "입력이 끝나야하는데, \"%.*s\" 발견했습니다." + +#: ../../common/jsonapi.c:2138 +#, c-format +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "배열 요소나 \"]\" 문자를 기대했는데, \"%.*s\" 발견했습니다." + +#: ../../common/jsonapi.c:2141 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "\",\" 또는 \"]\" 문자를 기대했는데, \"%.*s\" 발견했습니다." + +#: ../../common/jsonapi.c:2144 +#, c-format +msgid "Expected \":\", but found \"%.*s\"." +msgstr "\":\" 문자를 기대했는데, \"%.*s\" 발견했습니다." + +#: ../../common/jsonapi.c:2147 +#, c-format +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "JSON 값을 기대했는데, \"%.*s\" 값임" + +#: ../../common/jsonapi.c:2150 +msgid "The input string ended unexpectedly." +msgstr "입력 문자열이 예상치 않게 끝났음." + +#: ../../common/jsonapi.c:2152 +#, c-format +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "문자열이나, \"}\"가 필요한데 \"%.*s\"이(가) 있음" + +#: ../../common/jsonapi.c:2155 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "\",\" 또는 \"}\"가 필요한데 \"%.*s\"이(가) 있음" + +#: ../../common/jsonapi.c:2158 +#, c-format +msgid "Expected string, but found \"%.*s\"." +msgstr "문자열 값을 기대했는데, \"%.*s\" 값임" + +#: ../../common/jsonapi.c:2161 +#, c-format +msgid "Token \"%.*s\" is invalid." +msgstr "잘못된 토큰: \"%.*s\"" + +#: ../../common/jsonapi.c:2164 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 값은 text 형으로 변환할 수 없음." + +#: ../../common/jsonapi.c:2166 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\" 표기법은 뒤에 4개의 16진수가 와야 합니다." + +#: ../../common/jsonapi.c:2169 +msgid "" +"Unicode escape values cannot be used for code point values above 007F when " +"the encoding is not UTF8." +msgstr "" +"서버 인코딩이 UTF8이 아닌 경우 007F보다 큰 코드 지점 값에는 유니코드 이스케이" +"프 값을 사용할 수 없음" + +#: ../../common/jsonapi.c:2178 +#, c-format +msgid "" +"Unicode escape value could not be translated to the server's encoding %s." +msgstr "유니코드 이스케이프 값을 %s 서버 인코딩으로 변환할 수 없음." + +#: ../../common/jsonapi.c:2185 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "유니코드 상위 surrogate(딸림 코드)는 상위 딸림 코드 뒤에 오면 안됨." + +#: ../../common/jsonapi.c:2187 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "유니코드 상위 surrogate(딸림 코드) 뒤에는 하위 딸림 코드가 있어야 함." + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "메니페스트 체크섬 초기화를 할 수 없음" + +#: ../../common/parse_manifest.c:203 ../../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "메니페스트가 비정상적으로 끝났음" + +#: ../../common/parse_manifest.c:209 ../../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "메니페스트 체크섬 갱신 할 수 없음" + +#: ../../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "비정상적인 개체 시작" + +#: ../../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "비정상적인 개체 끝" + +#: ../../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "비정상적인 배열 시작" + +#: ../../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "비정상적인 배열 끝" + +#: ../../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "버전 지시자가 있어야 함" + +#: ../../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "최상위 필드를 알 수 없음" + +#: ../../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "예상치 못한 파일 필드" + +#: ../../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "예상치 못한 WAL 범위 필드" + +#: ../../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "예상치 못한 개체 필드" + +#: ../../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "예상치 못한 스칼라" + +#: ../../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "매니페이스 버전이 정수가 아님" + +#: ../../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "예상치 못한 메니페스트 버전" + +#: ../../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "매니페이스 안 system identifier가 정수가 아님" + +#: ../../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "패스 이름 빠짐" + +#: ../../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "패스 이름과 인코딩 된 패스 이름이 함께 있음" + +#: ../../common/parse_manifest.c:666 +msgid "missing size" +msgstr "크기 빠짐" + +#: ../../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "알고리즘 없는 체크섬" + +#: ../../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "파일 이름을 디코딩할 수 없음" + +#: ../../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "파일 크기가 정수가 아님" + +#: ../../common/parse_manifest.c:699 pg_combinebackup.c:199 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "알 수 없는 체크섬 알고리즘: \"%s\"" + +#: ../../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "\"%s\" 파일의 체크섬이 잘못됨: \"%s\"" + +#: ../../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "타임라인 빠짐" + +#: ../../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "시작 LSN 빠짐" + +#: ../../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "끝 LSN 빠짐" + +#: ../../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "타임라인이 정수가 아님" + +#: ../../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "시작 LSN 값을 분석할 수 없음" + +#: ../../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "끝 LSN 값을 분석할 수 없음" + +#: ../../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "적어도 2줄이 더 있어야 함" + +#: ../../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "마지막 줄에 줄바꿈 문자가 없음" + +#: ../../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "메니페스트 체크섬 마무리 작업 할 수 없음" + +#: ../../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "메니페스트에 체크섬 없음" + +#: ../../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "잘못된 메니페스트 체크섬: \"%s\"" + +#: ../../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "메니페스트 체크섬 불일치" + +#: ../../common/parse_manifest.c:891 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "백업 메니페스트 구문 분석 실패: %s" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "\"%s\" 값은 %s 옵션의 값으로 적당하지 않음" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s 값은 %d부터 %d까지만 허용합니다" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "알 수 없는 동기화 방법: %s" + +#: backup_label.c:66 backup_label.c:85 backup_label.c:95 +#, c-format +msgid "%s: could not parse %s" +msgstr "%s: %s 구문분석 실패" + +#: backup_label.c:69 backup_label.c:88 +#, c-format +msgid "%s: improper terminator for %s" +msgstr "%s: %s 값의 끝이 이상함" + +#: backup_label.c:76 +#, c-format +msgid "%s: could not parse TLI for %s" +msgstr "%s: %s 값의 TLI 구문분석 실패" + +#: backup_label.c:79 backup_label.c:98 +#, c-format +msgid "%s: invalid TLI" +msgstr "%s: 바르지 않은 TLI" + +#: backup_label.c:106 backup_label.c:108 +#, c-format +msgid "%s: could not find %s" +msgstr "%s: %s 찾지 못함" + +#: backup_label.c:110 backup_label.c:113 +#, c-format +msgid "%s: %s requires %s" +msgstr "%s: %s은(는) %s을(를) 필요로 함" + +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 +#, c-format +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "\"%s\" 파일 쓰기 실패: %d/%d 만큼 씀" + +#: backup_label.c:166 copy_file.c:146 copy_file.c:193 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "\"%s\" 파일 체크섬을 갱신할 수 없음" + +#: copy_file.c:186 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "\"%s\" 파일 쓰기 실패: %m" + +#: copy_file.c:188 +#, c-format +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "\"%s\"파일 쓰기 실패: 시작위치=%u, %d/%d 만큼 씀" + +#: copy_file.c:199 reconstruct.c:784 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "\"%s\" 파일을 읽을 수 없음: %m" + +#: copy_file.c:218 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 클론하는 동안 오류 발생: %m" + +#: copy_file.c:229 copy_file.c:272 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "\"%s\" 파일을 만들 수 없음: %m" + +#: copy_file.c:237 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %s" +msgstr "\"%s\" 파일을 \"%s\" 파일로 클론하는 동안 오류 발생: %s" + +#: copy_file.c:245 pg_combinebackup.c:251 +#, c-format +msgid "file cloning not supported on this platform" +msgstr "이 운영체제는 파일 클론 기능을 제공하지 않습니다." + +#: copy_file.c:278 reconstruct.c:704 +#, c-format +msgid "error while copying file range from \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 copy_file_range 기능으로 복사 중 오류: %m" + +#: copy_file.c:285 pg_combinebackup.c:264 reconstruct.c:724 +#, c-format +msgid "copy_file_range not supported on this platform" +msgstr "이 운영체제는 copy_file_range 기능을 지원하지 않습니다." + +#: copy_file.c:300 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 파일로 복사할 수 없음: %m" + +#: load_manifest.c:125 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "\"%s\" 파일 없음" + +#: load_manifest.c:163 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "\"%s\" 파일 읽기 실패: %d/%lld 읽음" + +#: load_manifest.c:201 +#, c-format +msgid "could not read file \"%s\": read %lld of %lld" +msgstr "\"%s\" 파일 읽기 실패: %lld/%lld 읽음" + +#: load_manifest.c:248 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "백업 매니페이스 파일 버전이 1인 경우는 증분 백업을 지원하지 않음" + +#: load_manifest.c:280 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "백업 메니페스트 안에 경로 이름이 중복됨: \"%s\"" + +#: pg_combinebackup.c:220 pg_combinebackup.c:228 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." + +#: pg_combinebackup.c:227 +#, c-format +msgid "no input directories specified" +msgstr "입력 디렉터리를 지정하지 않았음" + +#: pg_combinebackup.c:233 +#, c-format +msgid "no output directory specified" +msgstr "자료가 저장될 디렉터리를 지정하지 않았음" + +#: pg_combinebackup.c:301 +#, c-format +msgid "%s: manifest system identifier is %llu, but control file has %llu" +msgstr "%s: 매니페이스 시스템 식별번호는 %llu인데, 컨트롤 파일은 %llu임" + +#: pg_combinebackup.c:340 +#, c-format +msgid "" +"cannot generate a manifest because no manifest is available for the final " +"input backup" +msgstr "마지막 입력 백업용 매니페이스가 없어 매니페이스를 만들 수 없음" + +#: pg_combinebackup.c:387 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "\"%s\" 파일을 \"%s\" 심볼릭 링크로 만들 수 없음: %m" + +#: pg_combinebackup.c:399 pg_combinebackup.c:730 pg_combinebackup.c:927 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" + +#: pg_combinebackup.c:454 +#, c-format +msgid "directory name too long" +msgstr "디렉터리 이름이 너무 김" + +#: pg_combinebackup.c:461 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "테이블스페이스 맵핑 하는 곳에서 \"=\" 문자가 중복 되어 있음" + +#: pg_combinebackup.c:469 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "" +"\"%s\" 형식의 테이블스페이스 맵핑이 잘못 되었음, \"OLDDIR=NEWDIR\" 형식이어" +"야 함" + +#: pg_combinebackup.c:480 pg_combinebackup.c:484 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "테이블스페이스 맵핑용 옛 디렉터리가 절대 경로가 아님: %s" + +#: pg_combinebackup.c:553 +#, c-format +msgid "" +"backup at \"%s\" is a full backup, but only the first backup should be a " +"full backup" +msgstr "\"%s\"의 백업은 전체 백업이지만, 첫 백업 단 하나만 전체 백업이어야 함" + +#: pg_combinebackup.c:556 +#, c-format +msgid "" +"backup at \"%s\" is an incremental backup, but the first backup should be a " +"full backup" +msgstr "\"%s\"의 백업은 증분 백업이지만, 첫 백업은 전체 백업이어야 함" + +#: pg_combinebackup.c:559 +#, c-format +msgid "backup at \"%s\" starts on timeline %u, but expected %u" +msgstr "\"%s\"의 백업은 타임라인 %u번으로 시작하지만, 기대번호는 %u임" + +#: pg_combinebackup.c:562 +#, c-format +msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" +msgstr "\"%s\"의 백업은 시작 LSN이 %X/%X이지만, 기대 LSN은 %X/%X임" + +#: pg_combinebackup.c:614 +#, c-format +msgid "%s: CRC is incorrect" +msgstr "%s: CRC 잘못됨" + +#: pg_combinebackup.c:618 +#, c-format +msgid "%s: unexpected control file version" +msgstr "%s: 예상치 못한 컨트롤 파일 버전" + +#: pg_combinebackup.c:625 +#, c-format +msgid "%s: expected system identifier %llu, but found %llu" +msgstr "%s: 예상 시스템 식별번호는 %llu이지만, %llu임" + +#: pg_combinebackup.c:657 +#, c-format +msgid "only some backups have checksums enabled" +msgstr "일부 백업만 체크섬 기능이 활성화 되었음" + +#: pg_combinebackup.c:658 +#, c-format +msgid "" +"Disable, and optionally reenable, checksums on the output directory to avoid " +"failures." +msgstr "" +"실패를 피하기 위해 출력 디렉터리의 체크섬 기능을 비활성하고, 다 합치고 나서 " +"활성화하는 방법이 있음." + +#: pg_combinebackup.c:693 +#, c-format +msgid "removing output directory \"%s\"" +msgstr "\"%s\" 출력 디렉터리 삭제 중" + +#: pg_combinebackup.c:695 +#, c-format +msgid "failed to remove output directory" +msgstr "출력 디렉터리 삭제 실패" + +#: pg_combinebackup.c:699 +#, c-format +msgid "removing contents of output directory \"%s\"" +msgstr "\"%s\" 출력 디렉터리 안 파일들을 삭제 중" + +#: pg_combinebackup.c:702 +#, c-format +msgid "failed to remove contents of output directory" +msgstr "출력 디렉터리 안 파일 삭제 실패" + +#: pg_combinebackup.c:742 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "\"%s\" 디렉터리가 비어있지 않습니다." + +#: pg_combinebackup.c:745 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" + +#: pg_combinebackup.c:759 +#, c-format +msgid "" +"%s reconstructs full backups from incrementals.\n" +"\n" +msgstr "" +"%s은 증분 백업들을 합쳐 전체 백업을 재생성 합니다.\n" +"\n" + +#: pg_combinebackup.c:760 +#, c-format +msgid "Usage:\n" +msgstr "사용법:\n" + +#: pg_combinebackup.c:761 +#, c-format +msgid " %s [OPTION]... DIRECTORY...\n" +msgstr " %s [옵션]... 디렉터리...\n" + +#: pg_combinebackup.c:762 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"옵션들:\n" + +#: pg_combinebackup.c:763 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr " -d, --debug 디버깅에 필요한 정보들도 함께 출력함\n" + +#: pg_combinebackup.c:764 +#, c-format +msgid " -n, --dry-run do not actually do anything\n" +msgstr " -n, --dry-run 실 작업은 진행하지 않음\n" + +#: pg_combinebackup.c:765 +#, c-format +msgid "" +" -N, --no-sync do not wait for changes to be written safely to " +"disk\n" +msgstr "" +" -N, --no-sync 작업 완료 뒤 디스크 동기화 작업을 하지 않음\n" + +#: pg_combinebackup.c:766 +#, c-format +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=DIRECTORY 출력 디렉터리\n" + +#: pg_combinebackup.c:767 +#, c-format +msgid "" +" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr "" +" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" OLDDIR을 NEWDIR로 테이블스페이스 재조정\n" + +#: pg_combinebackup.c:769 +#, c-format +msgid " --clone clone (reflink) files instead of copying\n" +msgstr " --clone 파일을 복사 대신에 클론 (reflink)\n" + +#: pg_combinebackup.c:770 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy 파일 복사 (기본값)\n" + +#: pg_combinebackup.c:771 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" +msgstr "" +" --copy-file-range 복사 할 때 copy using copy_file_range() 사용\n" + +#: pg_combinebackup.c:772 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" 매니페스트 체크섬 알고리즘 지정\n" + +#: pg_combinebackup.c:774 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest 백업 매니페이스 파일 만들지 않음\n" + +#: pg_combinebackup.c:775 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD 파일을 디스크에 동기화 하는 방법 지정\n" + +#: pg_combinebackup.c:776 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 버전 정보를 보여주고 마침\n" + +#: pg_combinebackup.c:777 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 이 도움말을 보여주고 마침\n" + +#: pg_combinebackup.c:779 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"문제점 보고 주소: <%s>\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: pg_combinebackup.c:995 +#, c-format +msgid "skipping symbolic link \"%s\"" +msgstr "\"%s\" 심볼릭 링크 건너뜀" + +#: pg_combinebackup.c:997 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "\"%s\" 특수 파일을 건너뜀" + +#: pg_combinebackup.c:1073 reconstruct.c:305 +#, c-format +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "\"%s\" 매니페스트 파일에 \"%s\" 파일에 대한 정보가 없음" + +#: pg_combinebackup.c:1189 +#, c-format +msgid "%s: server version too old" +msgstr "%s: 서버 버전이 너무 낮음" + +#: pg_combinebackup.c:1190 +#, c-format +msgid "%s: could not parse version number" +msgstr "%s: 버전 번호를 해석할 수 없음" + +#: pg_combinebackup.c:1309 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "\"%s\" 심볼릭 링크 파일을 읽을 수 없음: %m" + +#: pg_combinebackup.c:1312 +#, c-format +msgid "target of symbolic link \"%s\" is too long" +msgstr "\"%s\" 심볼릭 링크의 대상이 너무 긺" + +#: pg_combinebackup.c:1315 +#, c-format +msgid "target of symbolic link \"%s\" is relative" +msgstr "\"%s\" 심볼릭 링크 대상이 상대 경로임" + +#: pg_combinebackup.c:1337 +#, c-format +msgid "tablespace at \"%s\" has no tablespace mapping" +msgstr "\"%s\"의 테이블스페이스는 테이블스페이스 맵핑 정보가 없음" + +#: pg_combinebackup.c:1355 +#, c-format +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "OIDs %u, %u 두 테이블스페이스는 같은 \"%s\" 디렉터리를 사용함" + +#: pg_combinebackup.c:1364 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" + +#: pg_combinebackup.c:1385 +#, c-format +msgid "file \"%s\" is too large" +msgstr "\"%s\" 파일이 너무 큽니다." + +#: pg_combinebackup.c:1402 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "\"%s\" 파일을 읽을 수 없음: %zd/%lld 만 읽었음" + +#: reconstruct.c:339 +#, c-format +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "전체 백업에 예상치 못한 증분 파일이 있음: \"%s\"" + +#: reconstruct.c:423 +#, c-format +msgid "file \"%s\" is too short: expected %llu, found %llu" +msgstr "\"%s\" 파일 크기가 너무 적음: 기대값=%llu, 실재값=%llu" + +#: reconstruct.c:465 +#, c-format +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "\"%s\" 파일에 잘못된 증분 매직 번호(0x%x)가 있음 (기대값 0x%x)" + +#: reconstruct.c:471 +#, c-format +msgid "file \"%s\" has block count %u in excess of segment size %u" +msgstr "\"%s\" 파일의 블록 수(%u)가 조각 크기(%u)보다 큼" + +#: reconstruct.c:478 +#, c-format +msgid "file \"%s\" has truncation block length %u in excess of segment size %u" +msgstr "\"%s\" 파일의 삭제 블럭 길이(%u)가 조각 크기(%u)보다 큼" + +#: reconstruct.c:542 +#, c-format +msgid "could not read file \"%s\": read %d of %u" +msgstr "\"%s\" 파일 읽을 수 없음: %d/%u만 읽음" + +#: reconstruct.c:786 +#, c-format +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "\"%s\" 파일 읽을 수 없음: 시작위치 %llu, %d/%d만 읽음" diff --git a/src/bin/pg_combinebackup/po/ru.po b/src/bin/pg_combinebackup/po/ru.po new file mode 100644 index 0000000000000..5c2af7387c385 --- /dev/null +++ b/src/bin/pg_combinebackup/po/ru.po @@ -0,0 +1,944 @@ +# Alexander Lakhin , 2024. +msgid "" +msgstr "" +"Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-02-08 07:44+0200\n" +"PO-Revision-Date: 2024-11-09 08:04+0300\n" +"Last-Translator: Alexander Lakhin \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 21.12.3\n" + +#: ../../../src/common/logging.c:276 +#, c-format +msgid "error: " +msgstr "ошибка: " + +#: ../../../src/common/logging.c:283 +#, c-format +msgid "warning: " +msgstr "предупреждение: " + +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "подробности: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "подсказка: " + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не удалось открыть файл \"%s\" для чтения: %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:150 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1400 reconstruct.c:540 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:68 pg_combinebackup.c:538 +#: pg_combinebackup.c:1175 reconstruct.c:369 reconstruct.c:740 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "не удалось закрыть файл \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "несоответствие порядка байт" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, " +"and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"возможно несоответствие порядка байт\n" +"Порядок байт в файле pg_control может не соответствовать используемому\n" +"этой программой. В этом случае результаты будут неверными и\n" +"установленный PostgreSQL будет несовместим с этим каталогом данных." + +#: ../../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 backup_label.c:143 copy_file.c:66 +#: copy_file.c:139 copy_file.c:171 copy_file.c:175 copy_file.c:225 +#: copy_file.c:268 load_manifest.c:128 pg_combinebackup.c:523 +#: pg_combinebackup.c:1167 reconstruct.c:523 reconstruct.c:638 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не удалось записать файл \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:852 +#, c-format +msgid "out of memory" +msgstr "нехватка памяти" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "успех" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "буфер назначения слишком мал" + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "ошибка OpenSSL" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:676 +#: pg_combinebackup.c:1131 pg_combinebackup.c:1383 reconstruct.c:204 +#: reconstruct.c:421 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не удалось получить информацию о файле \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "эта сборка программы не поддерживает метод синхронизации \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_combinebackup.c:933 pg_combinebackup.c:1256 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не удалось прочитать каталог \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" + +#: ../../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "" +"Инкрементальный лексический анализатор не подходит для нисходящего " +"рекурсивного разбора." + +#: ../../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "" +"Для инкрементального разбора требуется инкрементальный лексический " +"анализатор." + +#: ../../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "" +"Слишком большая вложенность JSON, максимальная допустимая глубина: 6400." + +#: ../../common/jsonapi.c:2127 +#, c-format +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "Неверная спецпоследовательность: \"\\%.*s\"." + +#: ../../common/jsonapi.c:2131 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Символ с кодом 0x%02x необходимо экранировать." + +#: ../../common/jsonapi.c:2135 +#, c-format +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Ожидался конец текста, но обнаружено продолжение \"%.*s\"." + +#: ../../common/jsonapi.c:2138 +#, c-format +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2141 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2144 +#, c-format +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Ожидалось \":\", но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2147 +#, c-format +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Ожидалось значение JSON, но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2150 +msgid "The input string ended unexpectedly." +msgstr "Неожиданный конец входной строки." + +#: ../../common/jsonapi.c:2152 +#, c-format +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Ожидалась строка или \"}\", но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2155 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2158 +#, c-format +msgid "Expected string, but found \"%.*s\"." +msgstr "Ожидалась строка, но обнаружено \"%.*s\"." + +#: ../../common/jsonapi.c:2161 +#, c-format +msgid "Token \"%.*s\" is invalid." +msgstr "Ошибочный элемент \"%.*s\"." + +#: ../../common/jsonapi.c:2164 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 нельзя преобразовать в текст." + +#: ../../common/jsonapi.c:2166 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." + +#: ../../common/jsonapi.c:2169 +msgid "" +"Unicode escape values cannot be used for code point values above 007F when " +"the encoding is not UTF8." +msgstr "" +"Спецкоды Unicode для значений выше 007F можно использовать только с " +"кодировкой UTF8." + +#: ../../common/jsonapi.c:2178 +#, c-format +msgid "" +"Unicode escape value could not be translated to the server's encoding %s." +msgstr "Спецкод Unicode нельзя преобразовать в серверную кодировку %s." + +#: ../../common/jsonapi.c:2185 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "" +"Старшее слово суррогата Unicode не может следовать за другим старшим словом." + +#: ../../common/jsonapi.c:2187 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "не удалось подготовить контекст контрольной суммы манифеста" + +#: ../../common/parse_manifest.c:203 ../../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "неожиданный конец манифеста" + +#: ../../common/parse_manifest.c:209 ../../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "не удалось изменить контекст контрольной суммы манифеста" + +#: ../../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "неожиданное начало объекта" + +#: ../../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "неожиданный конец объекта" + +#: ../../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "неожиданное начало массива" + +#: ../../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "неожиданный конец массива" + +#: ../../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "ожидалось указание версии" + +#: ../../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "нераспознанное поле на верхнем уровне" + +#: ../../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "неизвестное поле для файла" + +#: ../../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "неизвестное поле в указании диапазона WAL" + +#: ../../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "неожиданное поле объекта" + +#: ../../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "неожиданное скалярное значение" + +#: ../../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "версия манифеста не является целым числом" + +#: ../../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "неожиданная версия манифеста" + +#: ../../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "идентификатор системы в манифесте не является целым числом" + +#: ../../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "отсутствует указание пути" + +#: ../../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "путь задан в обычном виде и в закодированном" + +#: ../../common/parse_manifest.c:666 +msgid "missing size" +msgstr "отсутствует указание размера" + +#: ../../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "не задан алгоритм расчёта контрольной суммы" + +#: ../../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "не удалось декодировать имя файла" + +#: ../../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "размер файла не является целочисленным" + +#: ../../common/parse_manifest.c:699 pg_combinebackup.c:199 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нераспознанный алгоритм расчёта контрольных сумм: \"%s\"" + +#: ../../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "неверная контрольная сумма для файла \"%s\": \"%s\"" + +#: ../../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "отсутствует линия времени" + +#: ../../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "отсутствует начальный LSN" + +#: ../../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "отсутствует конечный LSN" + +#: ../../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "линия времени задана не целым числом" + +#: ../../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "не удалось разобрать начальный LSN" + +#: ../../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "не удалось разобрать конечный LSN" + +#: ../../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "ожидалось как минимум 2 строки" + +#: ../../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "последняя строка не оканчивается символом новой строки" + +#: ../../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "не удалось завершить расчёт контрольной суммы манифеста" + +#: ../../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "в манифесте нет контрольной суммы" + +#: ../../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "неверная контрольная сумма в манифесте: \"%s\"" + +#: ../../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "ошибка контрольной суммы манифеста" + +#: ../../common/parse_manifest.c:891 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "не удалось разобрать манифест копии: %s" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "неверное значение \"%s\" для параметра %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "значение %s должно быть в диапазоне %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нераспознанный метод синхронизации: %s" + +#: backup_label.c:66 backup_label.c:85 backup_label.c:95 +#, c-format +msgid "%s: could not parse %s" +msgstr "%s: не удалось разобрать %s" + +#: backup_label.c:69 backup_label.c:88 +#, c-format +msgid "%s: improper terminator for %s" +msgstr "%s: неподходящее окончание для %s" + +#: backup_label.c:76 +#, c-format +msgid "%s: could not parse TLI for %s" +msgstr "%s: не удалось разобрать TLI для %s" + +#: backup_label.c:79 backup_label.c:98 +#, c-format +msgid "%s: invalid TLI" +msgstr "%s: неверное значение TLI" + +#: backup_label.c:106 backup_label.c:108 +#, c-format +msgid "%s: could not find %s" +msgstr "%s: не удалось найти %s" + +#: backup_label.c:110 backup_label.c:113 +#, c-format +msgid "%s: %s requires %s" +msgstr "%s: %s требует %s" + +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 +#, c-format +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "не удалось записать файл \"%s\" (записано байт: %d из %d)" + +#: backup_label.c:166 copy_file.c:146 copy_file.c:193 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "не удалось изменить контекст контрольной суммы файла \"%s\"" + +#: copy_file.c:186 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "не удалось записать в файл \"%s\": %m" + +#: copy_file.c:188 +#, c-format +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "" +"не удалось записать в файл \"%s\" (смещение %u, записано байт: %d из %d)" + +#: copy_file.c:199 reconstruct.c:784 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" + +#: copy_file.c:218 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %m" +msgstr "ошибка при клонировании файла \"%s\" в \"%s\": %m" + +#: copy_file.c:229 copy_file.c:272 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "не удалось создать файл \"%s\": %m" + +#: copy_file.c:237 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %s" +msgstr "ошибка при клонировании файла \"%s\" в \"%s\": %s" + +#: copy_file.c:245 pg_combinebackup.c:251 +#, c-format +msgid "file cloning not supported on this platform" +msgstr "клонирование файлов не поддерживается в этой ОС" + +#: copy_file.c:278 reconstruct.c:704 +#, c-format +msgid "error while copying file range from \"%s\" to \"%s\": %m" +msgstr "ошибка при копировании фрагмента файла \"%s\" в \"%s\": %m" + +#: copy_file.c:285 pg_combinebackup.c:264 reconstruct.c:724 +#, c-format +msgid "copy_file_range not supported on this platform" +msgstr "copy_file_range не поддерживается в этой ОС" + +#: copy_file.c:300 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "не удалось скопировать файл \"%s\" в \"%s\": %m" + +#: load_manifest.c:125 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "файл \"%s\" не существует" + +#: load_manifest.c:163 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %lld)" + +#: load_manifest.c:201 +#, c-format +msgid "could not read file \"%s\": read %lld of %lld" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %lld из %lld)" + +#: load_manifest.c:248 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "" +"с версией 1 манифеста копии инкрементальное копирование не поддерживается" + +#: load_manifest.c:280 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "дублирующийся путь в манифесте копии: \"%s\"" + +#: pg_combinebackup.c:220 pg_combinebackup.c:228 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "Для дополнительной информации попробуйте \"%s --help\"." + +#: pg_combinebackup.c:227 +#, c-format +msgid "no input directories specified" +msgstr "входные каталоги не указаны" + +#: pg_combinebackup.c:233 +#, c-format +msgid "no output directory specified" +msgstr "выходной каталог не указан" + +#: pg_combinebackup.c:301 +#, c-format +msgid "%s: manifest system identifier is %llu, but control file has %llu" +msgstr "%s: идентификатор системы в манифесте %llu, а в управляющем файле %llu" + +#: pg_combinebackup.c:340 +#, c-format +msgid "" +"cannot generate a manifest because no manifest is available for the final " +"input backup" +msgstr "" +"сгенерировать манифест нельзя по причине отсутствия манифеста в последней " +"указанной копии" + +#: pg_combinebackup.c:387 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "не удалось создать символическую ссылку \"%s\" в \"%s\": %m" + +#: pg_combinebackup.c:399 pg_combinebackup.c:730 pg_combinebackup.c:927 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "не удалось создать каталог \"%s\": %m" + +#: pg_combinebackup.c:454 +#, c-format +msgid "directory name too long" +msgstr "слишком длинное имя каталога" + +#: pg_combinebackup.c:461 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "несколько знаков \"=\" в сопоставлении табличного пространства" + +#: pg_combinebackup.c:469 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "" +"сопоставление табл. пространства записано неверно: \"%s\"; должно быть " +"\"СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ\"" + +#: pg_combinebackup.c:480 pg_combinebackup.c:484 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "" +"старый каталог в сопоставлении табл. пространства задан не абсолютным путём: " +"%s" + +#: pg_combinebackup.c:553 +#, c-format +msgid "" +"backup at \"%s\" is a full backup, but only the first backup should be a " +"full backup" +msgstr "" +"копия в \"%s\" является полной копией, но полную копию можно передать только " +"первой в списке" + +#: pg_combinebackup.c:556 +#, c-format +msgid "" +"backup at \"%s\" is an incremental backup, but the first backup should be a " +"full backup" +msgstr "" +"копия в \"%s\" является инкрементальной, но первой в списке должна " +"передаваться полная копия" + +#: pg_combinebackup.c:559 +#, c-format +msgid "backup at \"%s\" starts on timeline %u, but expected %u" +msgstr "копия в \"%s\" начинается с линии времени %u, а ожидалась %u" + +#: pg_combinebackup.c:562 +#, c-format +msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" +msgstr "копия в \"%s\" начинается с LSN %X/%X, а ожидался %X/%X" + +#: pg_combinebackup.c:614 +#, c-format +msgid "%s: CRC is incorrect" +msgstr "%s: ошибка CRC" + +#: pg_combinebackup.c:618 +#, c-format +msgid "%s: unexpected control file version" +msgstr "%s: неожиданная версия управляющего файла" + +#: pg_combinebackup.c:625 +#, c-format +msgid "%s: expected system identifier %llu, but found %llu" +msgstr "%s: ожидался идентификатор системы %llu, но обнаружен %llu" + +#: pg_combinebackup.c:657 +#, c-format +msgid "only some backups have checksums enabled" +msgstr "контрольные суммы включены только в некоторых копиях" + +#: pg_combinebackup.c:658 +#, c-format +msgid "" +"Disable, and optionally reenable, checksums on the output directory to avoid " +"failures." +msgstr "" +"Отключите (и при необходимости вновь включите) контрольные суммы в выходном " +"каталоге во избежание сбоев." + +#: pg_combinebackup.c:693 +#, c-format +msgid "removing output directory \"%s\"" +msgstr "удаление выходного каталога \"%s\"" + +#: pg_combinebackup.c:695 +#, c-format +msgid "failed to remove output directory" +msgstr "ошибка при удалении выходного каталога" + +#: pg_combinebackup.c:699 +#, c-format +msgid "removing contents of output directory \"%s\"" +msgstr "удаление содержимого выходного каталога \"%s\"" + +#: pg_combinebackup.c:702 +#, c-format +msgid "failed to remove contents of output directory" +msgstr "ошибка при удалении содержимого выходного каталога" + +#: pg_combinebackup.c:742 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "каталог \"%s\" существует, но он не пуст" + +#: pg_combinebackup.c:745 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "ошибка при обращении к каталогу \"%s\": %m" + +#: pg_combinebackup.c:759 +#, c-format +msgid "" +"%s reconstructs full backups from incrementals.\n" +"\n" +msgstr "" +"%s реконструирует полные копии из инкрементальных.\n" +"\n" + +#: pg_combinebackup.c:760 +#, c-format +msgid "Usage:\n" +msgstr "Использование:\n" + +#: pg_combinebackup.c:761 +#, c-format +msgid " %s [OPTION]... DIRECTORY...\n" +msgstr " %s [ПАРАМЕТР]... КАТАЛОГ...\n" + +#: pg_combinebackup.c:762 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Параметры:\n" + +#: pg_combinebackup.c:763 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr " -d, --debug выдавать много отладочных сообщений\n" + +#: pg_combinebackup.c:764 +#, c-format +msgid " -n, --dry-run do not actually do anything\n" +msgstr "" +" -n, --dry-run не выполнять никаких практических действий\n" + +#: pg_combinebackup.c:765 +#, c-format +msgid "" +" -N, --no-sync do not wait for changes to be written safely to " +"disk\n" +msgstr "" +" -N, --no-sync не ждать завершения сохранения данных на диске\n" + +#: pg_combinebackup.c:766 +#, c-format +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=КАТАЛОГ выходной каталог\n" + +#: pg_combinebackup.c:767 +#, c-format +msgid "" +" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr "" +" -T, --tablespace-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ\n" +" перенести табличное пространство из старого " +"каталога\n" +" в новый\n" + +#: pg_combinebackup.c:769 +#, c-format +msgid " --clone clone (reflink) files instead of copying\n" +msgstr "" +" --clone клонировать (используя reflink), а не " +"копировать\n" +" файлы\n" + +#: pg_combinebackup.c:770 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy копировать файлы (по умолчанию)\n" + +#: pg_combinebackup.c:771 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" +msgstr "" +" --copy-file-range использовать для копирования системную функцию\n" +" copy_file_range()\n" + +#: pg_combinebackup.c:772 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" алгоритм подсчёта контрольных сумм в манифесте\n" + +#: pg_combinebackup.c:774 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest отключить создание манифеста копии\n" + +#: pg_combinebackup.c:775 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=МЕТОД метод синхронизации файлов с ФС\n" + +#: pg_combinebackup.c:776 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" + +#: pg_combinebackup.c:777 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" + +#: pg_combinebackup.c:779 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_combinebackup.c:995 +#, c-format +msgid "skipping symbolic link \"%s\"" +msgstr "символическая ссылка \"%s\" пропускается" + +#: pg_combinebackup.c:997 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "специальный файл \"%s\" пропускается" + +#: pg_combinebackup.c:1073 reconstruct.c:305 +#, c-format +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "файл манифеста \"%s\" не содержит записи о файле \"%s\"" + +#: pg_combinebackup.c:1189 +#, c-format +msgid "%s: server version too old" +msgstr "%s: версия сервера слишком старая" + +#: pg_combinebackup.c:1190 +#, c-format +msgid "%s: could not parse version number" +msgstr "%s: не удалось разобрать номер версии" + +#: pg_combinebackup.c:1309 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "не удалось прочитать символическую ссылку \"%s\": %m" + +#: pg_combinebackup.c:1312 +#, c-format +msgid "target of symbolic link \"%s\" is too long" +msgstr "целевой путь символической ссылки \"%s\" слишком длинный" + +#: pg_combinebackup.c:1315 +#, c-format +msgid "target of symbolic link \"%s\" is relative" +msgstr "целевой путь символической ссылки \"%s\" является относительным" + +#: pg_combinebackup.c:1337 +#, c-format +msgid "tablespace at \"%s\" has no tablespace mapping" +msgstr "для табличного пространства в \"%s\" не задано сопоставление" + +#: pg_combinebackup.c:1355 +#, c-format +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "" +"два табличных пространства с OIDs %u и %u указывают на один каталог \"%s\"" + +#: pg_combinebackup.c:1364 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не удалось закрыть каталог \"%s\": %m" + +#: pg_combinebackup.c:1385 +#, c-format +msgid "file \"%s\" is too large" +msgstr "файл \"%s\" слишком большой" + +#: pg_combinebackup.c:1402 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %zd из %lld)" + +#: reconstruct.c:339 +#, c-format +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "полная копия содержит неожиданный инкрементальный файл \"%s\"" + +#: reconstruct.c:423 +#, c-format +msgid "file \"%s\" is too short: expected %llu, found %llu" +msgstr "файл \"%s\" слишком мал (ожидалось байт: %llu, фактически: %llu)" + +#: reconstruct.c:465 +#, c-format +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "" +"в файла \"%s\" неверное контрольное число инкрементальной копии (0x%x, " +"ожидалось: 0x%x)" + +#: reconstruct.c:471 +#, c-format +msgid "file \"%s\" has block count %u in excess of segment size %u" +msgstr "в файле \"%s\" количество блоков %u превышает размер сегмента %u" + +#: reconstruct.c:478 +#, c-format +msgid "file \"%s\" has truncation block length %u in excess of segment size %u" +msgstr "" +"в файле \"%s\" длина отсечения в блоках (%u) превышает размер сегмента %u" + +#: reconstruct.c:542 +#, c-format +msgid "could not read file \"%s\": read %d of %u" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %u)" + +#: reconstruct.c:786 +#, c-format +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "" +"не удалось прочитать файл \"%s\" по смещению %llu (прочитано байт: %d из %d)" diff --git a/src/bin/pg_combinebackup/po/sv.po b/src/bin/pg_combinebackup/po/sv.po new file mode 100644 index 0000000000000..06327f49fe97d --- /dev/null +++ b/src/bin/pg_combinebackup/po/sv.po @@ -0,0 +1,896 @@ +# Swedish message translation file for pg_combinebackup +# Copyright (C) 2024 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_combinebackup (PostgreSQL) package. +# Dennis Björklund , 2024, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 17\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-02-12 13:52+0000\n" +"PO-Revision-Date: 2025-02-12 20:37+0100\n" +"Last-Translator: Dennis Björklund \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../../../src/common/logging.c:276 +#, c-format +msgid "error: " +msgstr "fel: " + +#: ../../../src/common/logging.c:283 +#, c-format +msgid "warning: " +msgstr "varning: " + +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "detalj: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "tips: " + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "kunde inte öppna filen \"%s\" för läsning: %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:150 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1400 reconstruct.c:540 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "kunde inte läsa fil \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:68 pg_combinebackup.c:538 +#: pg_combinebackup.c:1175 reconstruct.c:369 reconstruct.c:740 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "kunde inte stänga fil \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "byte-ordning stämmer inte" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"möjligt fel i byteordning\n" +"Den byteordning som filen från pg_control lagrats med passar kanske\n" +"inte detta program. I så fall kan nedanstående resultat vara felaktiga\n" +"och PostgreSQL-installationen vara inkompatibel med databaskatalogen." + +#: ../../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 backup_label.c:143 copy_file.c:66 +#: copy_file.c:139 copy_file.c:171 copy_file.c:175 copy_file.c:225 +#: copy_file.c:268 load_manifest.c:128 pg_combinebackup.c:523 +#: pg_combinebackup.c:1167 reconstruct.c:523 reconstruct.c:638 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:759 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "kunde inte skriva fil \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "kunde inte fsync:a fil \"%s\": %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:852 +#, c-format +msgid "out of memory" +msgstr "slut på minne" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "lyckades" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "destinationsbuffer för liten" + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "OpenSSL-fel" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kan inte duplicera null-pekare (internt fel)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:676 +#: pg_combinebackup.c:1131 pg_combinebackup.c:1383 reconstruct.c:204 +#: reconstruct.c:421 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "kunde inte göra stat() på fil \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "detta bygge stöder inte synkmetod \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_combinebackup.c:933 pg_combinebackup.c:1256 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "kunde inte öppna katalog \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "kunde inte läsa katalog \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" + +#: ../../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "Recursive-descent-parser kan inte använda inkrementell lexer." + +#: ../../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "Inkrementell parser kräver en inkrementell lexer." + +#: ../../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON nästlad för djupt, maximal tillåtet djup är 6400." + +#: ../../common/jsonapi.c:2127 +#, c-format +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "Escape-sekvens \"\\%.*s\" är ogiltig." + +#: ../../common/jsonapi.c:2131 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Tecken med värde 0x%02x måste escape:as." + +#: ../../common/jsonapi.c:2135 +#, c-format +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Förväntade slut på indata, men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2138 +#, c-format +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Färväntade array-element eller \"]\", men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2141 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Förväntade \",\" eller \"]\", men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2144 +#, c-format +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Förväntade sig \":\" men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2147 +#, c-format +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Förväntade JSON-värde, men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2150 +msgid "The input string ended unexpectedly." +msgstr "Indatasträngen avslutades oväntat." + +#: ../../common/jsonapi.c:2152 +#, c-format +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Färväntade sträng eller \"}\", men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2155 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Förväntade sig \",\" eller \"}\" men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2158 +#, c-format +msgid "Expected string, but found \"%.*s\"." +msgstr "Förväntade sträng, men hittade \"%.*s\"." + +#: ../../common/jsonapi.c:2161 +#, c-format +msgid "Token \"%.*s\" is invalid." +msgstr "Token \"%.*s\" är ogiltig." + +#: ../../common/jsonapi.c:2164 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 kan inte konverteras till text." + +#: ../../common/jsonapi.c:2166 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\" måste följas av fyra hexdecimala siffror." + +#: ../../common/jsonapi.c:2169 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Escape-värden för unicode kan inte användas för kodpunkter med värde över 007F när kodningen inte är UTF8." + +#: ../../common/jsonapi.c:2178 +#, c-format +msgid "Unicode escape value could not be translated to the server's encoding %s." +msgstr "Escape-värde för unicode kan inte översättas till serverns kodning %s." + +#: ../../common/jsonapi.c:2185 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Unicodes övre surrogathalva får inte komma efter en övre surrogathalva." + +#: ../../common/jsonapi.c:2187 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Unicodes lägre surrogathalva måste följa en övre surrogathalva." + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:854 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "kunde inte initiera kontrollsumma för backup-manifest" + +#: ../../common/parse_manifest.c:203 ../../common/parse_manifest.c:260 +msgid "manifest ended unexpectedly" +msgstr "manifestet avslutades oväntat" + +#: ../../common/parse_manifest.c:209 ../../common/parse_manifest.c:861 +#, c-format +msgid "could not update checksum of manifest" +msgstr "kunde inte uppdatera kontrollsumma för backup-manifest" + +#: ../../common/parse_manifest.c:301 +msgid "unexpected object start" +msgstr "oväntad objektstart" + +#: ../../common/parse_manifest.c:336 +msgid "unexpected object end" +msgstr "oväntat objektslut" + +#: ../../common/parse_manifest.c:365 +msgid "unexpected array start" +msgstr "oväntad array-start" + +#: ../../common/parse_manifest.c:390 +msgid "unexpected array end" +msgstr "oväntat array-slut" + +#: ../../common/parse_manifest.c:417 +msgid "expected version indicator" +msgstr "förväntade en versionsindikator" + +#: ../../common/parse_manifest.c:453 +msgid "unrecognized top-level field" +msgstr "okänt toppnivåfält" + +#: ../../common/parse_manifest.c:472 +msgid "unexpected file field" +msgstr "oväntat filfält" + +#: ../../common/parse_manifest.c:486 +msgid "unexpected WAL range field" +msgstr "oväntat WAL-intervall-fält" + +#: ../../common/parse_manifest.c:492 +msgid "unexpected object field" +msgstr "oväntat objektfält" + +#: ../../common/parse_manifest.c:582 +msgid "unexpected scalar" +msgstr "oväntad skalar" + +#: ../../common/parse_manifest.c:608 +msgid "manifest version not an integer" +msgstr "manifestversion är inte ett heltal" + +#: ../../common/parse_manifest.c:612 +msgid "unexpected manifest version" +msgstr "oväntad manifestversion" + +#: ../../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" +msgstr "manifestets systemidentifierare är inte ett heltal" + +#: ../../common/parse_manifest.c:661 +msgid "missing path name" +msgstr "saknas sökväg" + +#: ../../common/parse_manifest.c:664 +msgid "both path name and encoded path name" +msgstr "både sökväg och kodad sökväg" + +#: ../../common/parse_manifest.c:666 +msgid "missing size" +msgstr "saknar storlek" + +#: ../../common/parse_manifest.c:669 +msgid "checksum without algorithm" +msgstr "kontrollsumma utan algoritm" + +#: ../../common/parse_manifest.c:683 +msgid "could not decode file name" +msgstr "kunde inte avkoda filnamn" + +#: ../../common/parse_manifest.c:693 +msgid "file size is not an integer" +msgstr "filstorlek är inte ett haltal" + +#: ../../common/parse_manifest.c:699 pg_combinebackup.c:199 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "okänd algoritm för kontrollsumma: \"%s\"" + +#: ../../common/parse_manifest.c:718 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "ogiltig kontrollsumma för fil \"%s\": \"%s\"" + +#: ../../common/parse_manifest.c:761 +msgid "missing timeline" +msgstr "saknar tidslinje" + +#: ../../common/parse_manifest.c:763 +msgid "missing start LSN" +msgstr "saknar start-LSN" + +#: ../../common/parse_manifest.c:765 +msgid "missing end LSN" +msgstr "saknar slut-LSN" + +#: ../../common/parse_manifest.c:771 +msgid "timeline is not an integer" +msgstr "tidslinje är inte ett heltal" + +#: ../../common/parse_manifest.c:774 +msgid "could not parse start LSN" +msgstr "kunde inte parsa start-LSN" + +#: ../../common/parse_manifest.c:777 +msgid "could not parse end LSN" +msgstr "kunde inte parsa slut-LSN" + +#: ../../common/parse_manifest.c:842 +msgid "expected at least 2 lines" +msgstr "förväntade minst två rader" + +#: ../../common/parse_manifest.c:845 +msgid "last line not newline-terminated" +msgstr "sista raden är inte nyradsterminerad" + +#: ../../common/parse_manifest.c:864 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "kunde inte göra klart kontrollsumma för backup-manifest" + +#: ../../common/parse_manifest.c:868 +#, c-format +msgid "manifest has no checksum" +msgstr "manifestet har ingen kontrollsumma" + +#: ../../common/parse_manifest.c:872 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "ogiltig kontrollsumma för manifest: \"%s\"" + +#: ../../common/parse_manifest.c:876 +#, c-format +msgid "manifest checksum mismatch" +msgstr "kontrollsumma för manifest matchar inte" + +#: ../../common/parse_manifest.c:891 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "kunde inte parsa backup-manifest: %s" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "ogiltigt värde \"%s\" för flaggan \"%s\"" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s måste vara i intervallet %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "okänd synkmetod: %s" + +#: backup_label.c:66 backup_label.c:85 backup_label.c:95 +#, c-format +msgid "%s: could not parse %s" +msgstr "%s: kunde inte parsa %s" + +#: backup_label.c:69 backup_label.c:88 +#, c-format +msgid "%s: improper terminator for %s" +msgstr "%s: felaktig avslutare för %s" + +#: backup_label.c:76 +#, c-format +msgid "%s: could not parse TLI for %s" +msgstr "%s: kunde inte parsa TLI för %s" + +#: backup_label.c:79 backup_label.c:98 +#, c-format +msgid "%s: invalid TLI" +msgstr "%s: ogitlig TLI" + +#: backup_label.c:106 backup_label.c:108 +#, c-format +msgid "%s: could not find %s" +msgstr "%s: kunde inte hitta %s" + +#: backup_label.c:110 backup_label.c:113 +#, c-format +msgid "%s: %s requires %s" +msgstr "%s: %s kräver %s" + +#: backup_label.c:162 reconstruct.c:761 write_manifest.c:262 +#, c-format +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "kunde inte skriva fil \"%s\": skrev %d av %d" + +#: backup_label.c:166 copy_file.c:146 copy_file.c:193 reconstruct.c:721 +#: reconstruct.c:767 write_manifest.c:270 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "kunde inte uppdatera kontrollsumma för filen \"%s\"" + +#: copy_file.c:186 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "kunde inte skriva till fil \"%s\": %m" + +#: copy_file.c:188 +#, c-format +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "kunde inte skriva till fil \"%s\", offset %u: skrev %d av %d" + +#: copy_file.c:199 reconstruct.c:784 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "kunde inte läsa från fil \"%s\": %m" + +#: copy_file.c:218 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %m" +msgstr "fel vid kloning av fil \"%s\" till \"%s\": %m" + +#: copy_file.c:229 copy_file.c:272 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "kunde inte skapa fil \"%s\": %m" + +#: copy_file.c:237 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %s" +msgstr "fel vid kloning av fil \"%s\" till \"%s\": %s" + +#: copy_file.c:245 pg_combinebackup.c:251 +#, c-format +msgid "file cloning not supported on this platform" +msgstr "filkloning stöds inte på denna plattform" + +#: copy_file.c:278 reconstruct.c:704 +#, c-format +msgid "error while copying file range from \"%s\" to \"%s\": %m" +msgstr "fel vid kopiering av filintervall från \"%s\" till \"%s\": %m" + +#: copy_file.c:285 pg_combinebackup.c:264 reconstruct.c:724 +#, c-format +msgid "copy_file_range not supported on this platform" +msgstr "copy_file_range stöds inte på denna plattform" + +#: copy_file.c:300 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "kunde inte kopiera fil \"%s\" till \"%s\": %m" + +#: load_manifest.c:125 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "filen \"%s\" finns inte" + +#: load_manifest.c:163 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "kunde inte läsa fil \"%s\": läste %d av %lld" + +#: load_manifest.c:201 +#, c-format +msgid "could not read file \"%s\": read %lld of %lld" +msgstr "kunde inte läsa fil \"%s\": läste %lld av %lld" + +#: load_manifest.c:248 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "version 1 av backup-manifest stöder inte inkrementell backup" + +#: load_manifest.c:280 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "duplicerad sökväg i backup-manifest: \"%s\"" + +#: pg_combinebackup.c:220 pg_combinebackup.c:228 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "Försök med \"%s --help\" för mer information." + +#: pg_combinebackup.c:227 +#, c-format +msgid "no input directories specified" +msgstr "inga indatakataloger har angivits" + +#: pg_combinebackup.c:233 +#, c-format +msgid "no output directory specified" +msgstr "ingen utdatakatalog angiven" + +#: pg_combinebackup.c:301 +#, c-format +msgid "%s: manifest system identifier is %llu, but control file has %llu" +msgstr "%s: manifestets systemidentifierare är %llu men kontrollfilern har %llu" + +#: pg_combinebackup.c:340 +#, c-format +msgid "cannot generate a manifest because no manifest is available for the final input backup" +msgstr "kan inte skapa manifest då inget manifest är tillgängligt för den avslutande indatabackup:en" + +#: pg_combinebackup.c:387 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "kunde inte skapa symbolisk länk från \"%s\" till \"%s\": %m" + +#: pg_combinebackup.c:399 pg_combinebackup.c:730 pg_combinebackup.c:927 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "kunde inte skapa katalog \"%s\": %m" + +#: pg_combinebackup.c:454 +#, c-format +msgid "directory name too long" +msgstr "katalognamn för långt" + +#: pg_combinebackup.c:461 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "multipla \"=\"-tecken i tablespace-mappning" + +#: pg_combinebackup.c:469 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "ogiltigt tablespace-mappningsformat \"%s\", måste vara \"OLDDIR=NEWDIR\"" + +#: pg_combinebackup.c:480 pg_combinebackup.c:484 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "gammal katalog är inte en absolut sökväg i tablespace-mappning: %s" + +#: pg_combinebackup.c:553 +#, c-format +msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" +msgstr "backup:en vid \"%s\" är en full backup men det är bara den första backup:en som skall vara en full backup" + +#: pg_combinebackup.c:556 +#, c-format +msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" +msgstr "backup:en vid \"%s\" är en inkrementell backup men den första backupen skall vara en full backup" + +#: pg_combinebackup.c:559 +#, c-format +msgid "backup at \"%s\" starts on timeline %u, but expected %u" +msgstr "backup:en vid \"%s\" startar på tidslinjen %u men det förväntades vara %u" + +#: pg_combinebackup.c:562 +#, c-format +msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" +msgstr "backup:eb vid \"%s\" startar vid LSN %X/%X men förväntades vare %X/%X" + +#: pg_combinebackup.c:614 +#, c-format +msgid "%s: CRC is incorrect" +msgstr "%s: CRC är inkorrekt" + +#: pg_combinebackup.c:618 +#, c-format +msgid "%s: unexpected control file version" +msgstr "%s: oväntad version på kontrollfil" + +#: pg_combinebackup.c:625 +#, c-format +msgid "%s: expected system identifier %llu, but found %llu" +msgstr "%s: förväntade systemidentifierare %llu men hittade %llu" + +#: pg_combinebackup.c:657 +#, c-format +msgid "only some backups have checksums enabled" +msgstr "bara några backup:er har checksummor aktiverade" + +#: pg_combinebackup.c:658 +#, c-format +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "Avaktivera och möjligen återaktivera checksummor på utdatakatalogen för att undvika fel" + +#: pg_combinebackup.c:693 +#, c-format +msgid "removing output directory \"%s\"" +msgstr "tar bort katalog för utdata \"%s\"" + +#: pg_combinebackup.c:695 +#, c-format +msgid "failed to remove output directory" +msgstr "misslyckades att ta bort katalog för utdata" + +#: pg_combinebackup.c:699 +#, c-format +msgid "removing contents of output directory \"%s\"" +msgstr "tar bort innehåll i katalog för utdata \"%s\"" + +#: pg_combinebackup.c:702 +#, c-format +msgid "failed to remove contents of output directory" +msgstr "misslyckades att ta bort innehåll i katalog för utdata" + +#: pg_combinebackup.c:742 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "katalogen \"%s\" existerar men är inte tom" + +#: pg_combinebackup.c:745 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "kunde inte komma åt katalog \"%s\": %m" + +#: pg_combinebackup.c:759 +#, c-format +msgid "" +"%s reconstructs full backups from incrementals.\n" +"\n" +msgstr "" +"%s återskapar fulla backup:er från inkrementella.\n" +"\n" + +#: pg_combinebackup.c:760 +#, c-format +msgid "Usage:\n" +msgstr "Användning:\n" + +#: pg_combinebackup.c:761 +#, c-format +msgid " %s [OPTION]... DIRECTORY...\n" +msgstr " %s [FLAGGA]... KATALOG...\n" + +#: pg_combinebackup.c:762 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Flaggor:\n" + +#: pg_combinebackup.c:763 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr " -d, --debug generera massor med debug-utskrifter\n" + +#: pg_combinebackup.c:764 +#, c-format +msgid " -n, --dry-run do not actually do anything\n" +msgstr " -n, --dry-run gör inga operationer\n" + +#: pg_combinebackup.c:765 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync vänta inte på att ändingar säkert skrivits till disk\n" + +#: pg_combinebackup.c:766 +#, c-format +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=KATALOG katalog för utdata\n" + +#: pg_combinebackup.c:767 +#, c-format +msgid "" +" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr "" +" -T, --tablespace-mapping=FRÅNKAT=NYKAT\n" +" flytta tabellutrymme i FRÅNKAT till NYKAT\n" + +#: pg_combinebackup.c:769 +#, c-format +msgid " --clone clone (reflink) files instead of copying\n" +msgstr " --clone klona (reflink) filer istället för att kopiera\n" + +#: pg_combinebackup.c:770 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy kopiera filer (standard)\n" + +#: pg_combinebackup.c:771 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" +msgstr " --copy-file-range kopiera med systemaropet copy_file_range()\n" + +#: pg_combinebackup.c:772 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" algoritm att anvvända för checksummor i manifest\n" + +#: pg_combinebackup.c:774 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest skapa inget backup-manifest\n" + +#: pg_combinebackup.c:775 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METOD sätt synkmetod för att synka filer till disk\n" + +#: pg_combinebackup.c:776 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version visa versionsinformation, avsluta sedan\n" + +#: pg_combinebackup.c:777 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help visa denna hjälp, avsluta sedan\n" + +#: pg_combinebackup.c:779 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapportera fel till <%s>.\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "hemsida för %s: <%s>\n" + +#: pg_combinebackup.c:995 +#, c-format +msgid "skipping symbolic link \"%s\"" +msgstr "hoppar över symbolisk länk \"%s\"" + +#: pg_combinebackup.c:997 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "hoppar över specialfil \"%s\"" + +#: pg_combinebackup.c:1073 reconstruct.c:305 +#, c-format +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "manifestfil \"%s\" innehåller ingen post för fil \"%s\"" + +#: pg_combinebackup.c:1189 +#, c-format +msgid "%s: server version too old" +msgstr "%s: serverns version är för gammal" + +#: pg_combinebackup.c:1190 +#, c-format +msgid "%s: could not parse version number" +msgstr "%s: kunde inte parsa versionnummer" + +#: pg_combinebackup.c:1309 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "kan inte läsa symbolisk länk \"%s\": %m" + +#: pg_combinebackup.c:1312 +#, c-format +msgid "target of symbolic link \"%s\" is too long" +msgstr "destinationen för symbolisk länk \"%s\" är för lång" + +#: pg_combinebackup.c:1315 +#, c-format +msgid "target of symbolic link \"%s\" is relative" +msgstr "destination för symbolisk länk \"%s\" är relativ" + +#: pg_combinebackup.c:1337 +#, c-format +msgid "tablespace at \"%s\" has no tablespace mapping" +msgstr "tabellutrymme vid \"%s\" har ingen mapping" + +#: pg_combinebackup.c:1355 +#, c-format +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "tabellutrymme med OID:er %u och %u pekar på samma katalog \"%s\"" + +#: pg_combinebackup.c:1364 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "kunde inte stänga katalog \"%s\": %m" + +#: pg_combinebackup.c:1385 +#, c-format +msgid "file \"%s\" is too large" +msgstr "filen \"%s\" är för stor" + +#: pg_combinebackup.c:1402 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "kunde inte läsa fil \"%s\": läste %zd av %lld" + +#: reconstruct.c:339 +#, c-format +msgid "full backup contains unexpected incremental file \"%s\"" +msgstr "full backup innehåller in oväntad inkrementell fil \"%s\"" + +#: reconstruct.c:423 +#, c-format +msgid "file \"%s\" is too short: expected %llu, found %llu" +msgstr "filen \"%s\" är för kort: förväntade %llu, hittade %llu" + +#: reconstruct.c:465 +#, c-format +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "filen \"%s\" har ett felaktigt inkrementellt magiskt nummer (0x%x, förväntade 0x%x)" + +#: reconstruct.c:471 +#, c-format +msgid "file \"%s\" has block count %u in excess of segment size %u" +msgstr "filen \"%s\" har ett blockantal %u som är större än segmentstorleken %u" + +#: reconstruct.c:478 +#, c-format +msgid "file \"%s\" has truncation block length %u in excess of segment size %u" +msgstr "filen \"%s\" trunkeringsblocklängd %u som är större än segmentstorleken %u" + +#: reconstruct.c:542 +#, c-format +msgid "could not read file \"%s\": read %d of %u" +msgstr "kunde inte läsa filen \"%s\": läste %d av %u" + +#: reconstruct.c:786 +#, c-format +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "kunde inte läsa från filen \"%s\", offset %llu: läste %d av %d" diff --git a/src/bin/pg_combinebackup/po/uk.po b/src/bin/pg_combinebackup/po/uk.po new file mode 100644 index 0000000000000..51e19b6220614 --- /dev/null +++ b/src/bin/pg_combinebackup/po/uk.po @@ -0,0 +1,876 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2024-08-31 06:22+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /REL_17_STABLE/pg_combinebackup.pot\n" +"X-Crowdin-File-ID: 1008\n" + +#: ../../../src/common/logging.c:276 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:283 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../../src/common/logging.c:294 +#, c-format +msgid "detail: " +msgstr "деталі: " + +#: ../../../src/common/logging.c:301 +#, c-format +msgid "hint: " +msgstr "підказка: " + +#: ../../common/controldata_utils.c:97 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" + +#: ../../common/controldata_utils.c:110 copy_file.c:150 load_manifest.c:161 +#: load_manifest.c:199 pg_combinebackup.c:1400 reconstruct.c:527 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:119 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 +#: backup_label.c:174 copy_file.c:68 pg_combinebackup.c:538 +#: pg_combinebackup.c:1175 reconstruct.c:356 reconstruct.c:727 +#: write_manifest.c:187 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "неправильний порядок байтів" + +#: ../../common/controldata_utils.c:170 +#, c-format +msgid "possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "можлива помилка у послідовності байтів.\n" +"Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." + +#: ../../common/controldata_utils.c:230 ../../common/file_utils.c:70 +#: ../../common/file_utils.c:347 ../../common/file_utils.c:406 +#: ../../common/file_utils.c:480 backup_label.c:143 copy_file.c:66 +#: copy_file.c:139 copy_file.c:171 copy_file.c:175 copy_file.c:225 +#: copy_file.c:268 load_manifest.c:128 pg_combinebackup.c:523 +#: pg_combinebackup.c:1167 reconstruct.c:510 reconstruct.c:625 +#: write_manifest.c:250 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:249 backup_label.c:160 reconstruct.c:746 +#: write_manifest.c:260 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:268 ../../common/file_utils.c:418 +#: ../../common/file_utils.c:488 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + +#: ../../common/cryptohash.c:261 ../../common/cryptohash_openssl.c:356 +#: ../../common/parse_manifest.c:157 ../../common/parse_manifest.c:853 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: ../../common/cryptohash.c:266 ../../common/cryptohash.c:272 +#: ../../common/cryptohash_openssl.c:368 ../../common/cryptohash_openssl.c:376 +msgid "success" +msgstr "успіх" + +#: ../../common/cryptohash.c:268 ../../common/cryptohash_openssl.c:370 +msgid "destination buffer too small" +msgstr "буфер призначення занадто малий" + +#: ../../common/cryptohash_openssl.c:372 +msgid "OpenSSL failure" +msgstr "Помилка OpenSSL" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/file_utils.c:76 +#, c-format +msgid "could not synchronize file system for file \"%s\": %m" +msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" + +#: ../../common/file_utils.c:120 ../../common/file_utils.c:566 +#: backup_label.c:187 load_manifest.c:133 pg_combinebackup.c:676 +#: pg_combinebackup.c:1131 pg_combinebackup.c:1383 reconstruct.c:199 +#: reconstruct.c:408 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: ../../common/file_utils.c:130 ../../common/file_utils.c:227 +#: ../../fe_utils/option_utils.c:99 +#, c-format +msgid "this build does not support sync method \"%s\"" +msgstr "ця збірка не підтримує метод синхронізації \"%s\"" + +#: ../../common/file_utils.c:151 ../../common/file_utils.c:281 +#: pg_combinebackup.c:933 pg_combinebackup.c:1256 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: ../../common/file_utils.c:169 ../../common/file_utils.c:315 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: ../../common/file_utils.c:498 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" + +#: ../../common/jsonapi.c:2121 +msgid "Recursive descent parser cannot use incremental lexer." +msgstr "Рекурсивний спуск не може використовувати інкрементний лексичний аналізатор." + +#: ../../common/jsonapi.c:2123 +msgid "Incremental parser requires incremental lexer." +msgstr "Інкрементний аналізатор потребує Інкрементний лексичний аналізатор." + +#: ../../common/jsonapi.c:2125 +msgid "JSON nested too deep, maximum permitted depth is 6400." +msgstr "JSON вкладений занадто глибокий, максимально дозволена глибина - 6400." + +#: ../../common/jsonapi.c:2127 +#, c-format +msgid "Escape sequence \"\\%.*s\" is invalid." +msgstr "Неприпустима спеціальна послідовність \"\\%.*s\"." + +#: ../../common/jsonapi.c:2131 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Символ зі значенням 0x%02x повинен бути пропущений." + +#: ../../common/jsonapi.c:2135 +#, c-format +msgid "Expected end of input, but found \"%.*s\"." +msgstr "Очікувався кінець введення, але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2138 +#, c-format +msgid "Expected array element or \"]\", but found \"%.*s\"." +msgstr "Очікувався елемент масиву або \"]\", але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2141 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%.*s\"." +msgstr "Очікувалось \",\" або \"]\", але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2144 +#, c-format +msgid "Expected \":\", but found \"%.*s\"." +msgstr "Очікувалось \":\", але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2147 +#, c-format +msgid "Expected JSON value, but found \"%.*s\"." +msgstr "Очікувалось значення JSON, але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2150 +msgid "The input string ended unexpectedly." +msgstr "Несподіваний кінець вхідного рядка." + +#: ../../common/jsonapi.c:2152 +#, c-format +msgid "Expected string or \"}\", but found \"%.*s\"." +msgstr "Очікувався рядок або \"}\", але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2155 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%.*s\"." +msgstr "Очікувалось \",\" або \"}\", але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2158 +#, c-format +msgid "Expected string, but found \"%.*s\"." +msgstr "Очікувався рядок, але знайдено \"%.*s\"." + +#: ../../common/jsonapi.c:2161 +#, c-format +msgid "Token \"%.*s\" is invalid." +msgstr "Неприпустимий маркер \"%.*s\"." + +#: ../../common/jsonapi.c:2164 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 не можна перетворити в текст." + +#: ../../common/jsonapi.c:2166 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "За \"\\u\" повинні прямувати чотири шістнадцяткових числа." + +#: ../../common/jsonapi.c:2169 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Значення виходу Unicode не можна використовувати для значень кодових точок більше 007F, якщо кодування не UTF8." + +#: ../../common/jsonapi.c:2178 +#, c-format +msgid "Unicode escape value could not be translated to the server's encoding %s." +msgstr "Значення символу Unicode не вдалося перекласти в кодування сервера %s." + +#: ../../common/jsonapi.c:2185 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Старший сурогат Unicode не повинен прямувати за іншим старшим сурогатом." + +#: ../../common/jsonapi.c:2187 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Молодший сурогат Unicode не повинен прямувати за іншим молодшим сурогатом." + +#: ../../common/parse_manifest.c:159 ../../common/parse_manifest.c:855 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "не вдалося ініціалізувати контрольну суму маніфесту" + +#: ../../common/parse_manifest.c:204 ../../common/parse_manifest.c:261 +msgid "manifest ended unexpectedly" +msgstr "маніфест закінчився несподівано" + +#: ../../common/parse_manifest.c:210 ../../common/parse_manifest.c:862 +#, c-format +msgid "could not update checksum of manifest" +msgstr "не вдалося оновити контрольну суму маніфесту" + +#: ../../common/parse_manifest.c:302 +msgid "unexpected object start" +msgstr "неочікуваний початок об'єкта" + +#: ../../common/parse_manifest.c:337 +msgid "unexpected object end" +msgstr "неочікуваний кінець об'єкта" + +#: ../../common/parse_manifest.c:366 +msgid "unexpected array start" +msgstr "неочікуваний початок масиву" + +#: ../../common/parse_manifest.c:391 +msgid "unexpected array end" +msgstr "неочікуваний кінець масиву" + +#: ../../common/parse_manifest.c:418 +msgid "expected version indicator" +msgstr "індикатор очікуваної версії" + +#: ../../common/parse_manifest.c:454 +msgid "unrecognized top-level field" +msgstr "нерозпізнане поле верхнього рівня" + +#: ../../common/parse_manifest.c:473 +msgid "unexpected file field" +msgstr "неочікуване поле файлу" + +#: ../../common/parse_manifest.c:487 +msgid "unexpected WAL range field" +msgstr "неочікуване поле діапазону WAL" + +#: ../../common/parse_manifest.c:493 +msgid "unexpected object field" +msgstr "неочікуване поле об'єкта" + +#: ../../common/parse_manifest.c:583 +msgid "unexpected scalar" +msgstr "неочікуваний скаляр" + +#: ../../common/parse_manifest.c:609 +msgid "manifest version not an integer" +msgstr "версія маніфесту не ціле число" + +#: ../../common/parse_manifest.c:613 +msgid "unexpected manifest version" +msgstr "неочікувана версія маніфесту" + +#: ../../common/parse_manifest.c:637 +msgid "system identifier in manifest not an integer" +msgstr "системний ідентифікатор в маніфесті не ціле число" + +#: ../../common/parse_manifest.c:662 +msgid "missing path name" +msgstr "пропущено шлях" + +#: ../../common/parse_manifest.c:665 +msgid "both path name and encoded path name" +msgstr "і ім'я шляху, і закодований шлях" + +#: ../../common/parse_manifest.c:667 +msgid "missing size" +msgstr "відсутній розмір" + +#: ../../common/parse_manifest.c:670 +msgid "checksum without algorithm" +msgstr "контрольна сума без алгоритму" + +#: ../../common/parse_manifest.c:684 +msgid "could not decode file name" +msgstr "не вдалося декодувати ім'я файлу" + +#: ../../common/parse_manifest.c:694 +msgid "file size is not an integer" +msgstr "розмір файлу не є цілим числом" + +#: ../../common/parse_manifest.c:700 pg_combinebackup.c:199 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нерозпізнаний алгоритм контрольної суми: \"%s\"" + +#: ../../common/parse_manifest.c:719 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "неприпустима контрольна сума для файлу \"%s\": \"%s\"" + +#: ../../common/parse_manifest.c:762 +msgid "missing timeline" +msgstr "відсутня часова шкала" + +#: ../../common/parse_manifest.c:764 +msgid "missing start LSN" +msgstr "відсутній LSN початку" + +#: ../../common/parse_manifest.c:766 +msgid "missing end LSN" +msgstr "відсутній LSN кінця" + +#: ../../common/parse_manifest.c:772 +msgid "timeline is not an integer" +msgstr "часова лінія не є цілим числом" + +#: ../../common/parse_manifest.c:775 +msgid "could not parse start LSN" +msgstr "не вдалося проаналізувати початковий LSN" + +#: ../../common/parse_manifest.c:778 +msgid "could not parse end LSN" +msgstr "не вдалося проаналізувати кінцевий LSN" + +#: ../../common/parse_manifest.c:843 +msgid "expected at least 2 lines" +msgstr "очікувалося принаймні 2 рядки" + +#: ../../common/parse_manifest.c:846 +msgid "last line not newline-terminated" +msgstr "останній рядок не завершений новим рядком" + +#: ../../common/parse_manifest.c:865 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "не вдалося остаточно завершити контрольну суму маніфесту" + +#: ../../common/parse_manifest.c:869 +#, c-format +msgid "manifest has no checksum" +msgstr "у маніфесті немає контрольної суми" + +#: ../../common/parse_manifest.c:873 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "неприпустима контрольна сума маніфесту: \"%s\"" + +#: ../../common/parse_manifest.c:877 +#, c-format +msgid "manifest checksum mismatch" +msgstr "невідповідність контрольної суми маніфесту" + +#: ../../common/parse_manifest.c:892 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "не вдалося проаналізувати маніфест резервної копії: %s" + +#: ../../fe_utils/option_utils.c:69 +#, c-format +msgid "invalid value \"%s\" for option %s" +msgstr "неприпустиме значення \"%s\" для параметра %s" + +#: ../../fe_utils/option_utils.c:76 +#, c-format +msgid "%s must be in range %d..%d" +msgstr "%s має бути в діапазоні %d..%d" + +#: ../../fe_utils/option_utils.c:106 +#, c-format +msgid "unrecognized sync method: %s" +msgstr "нерозпізнаний метод синхронізації: %s" + +#: backup_label.c:66 backup_label.c:85 backup_label.c:95 +#, c-format +msgid "%s: could not parse %s" +msgstr "%s: не вдалося розібрати %s" + +#: backup_label.c:69 backup_label.c:88 +#, c-format +msgid "%s: improper terminator for %s" +msgstr "%s: неправильний термінатор для %s" + +#: backup_label.c:76 +#, c-format +msgid "%s: could not parse TLI for %s" +msgstr "%s: не вдалося розібрати TLI для %s" + +#: backup_label.c:79 backup_label.c:98 +#, c-format +msgid "%s: invalid TLI" +msgstr "%s: невірний TLI" + +#: backup_label.c:106 backup_label.c:108 +#, c-format +msgid "%s: could not find %s" +msgstr "%s: не вдалося знайти %s" + +#: backup_label.c:110 backup_label.c:113 +#, c-format +msgid "%s: %s requires %s" +msgstr "%s: %s вимагає %s" + +#: backup_label.c:162 reconstruct.c:748 write_manifest.c:262 +#, c-format +msgid "could not write file \"%s\": wrote %d of %d" +msgstr "не вдалося записати файл \"%s\": записано %d з %d" + +#: backup_label.c:166 copy_file.c:146 copy_file.c:193 reconstruct.c:708 +#: reconstruct.c:754 write_manifest.c:270 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "не вдалося оновити контрольну суму файлу \"%s\"" + +#: copy_file.c:186 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "неможливо записати до файлу \"%s\": %m" + +#: copy_file.c:188 +#, c-format +msgid "could not write to file \"%s\", offset %u: wrote %d of %d" +msgstr "не вдалося записати до файлу \"%s\", зсув %u: записано %d з %d" + +#: copy_file.c:199 reconstruct.c:771 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "не вдалося прочитати з файлу \"%s\": %m" + +#: copy_file.c:218 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %m" +msgstr "помилка при клонуванні файлу \"%s\" в \"%s\": %m" + +#: copy_file.c:229 copy_file.c:272 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "неможливо створити файл \"%s\": %m" + +#: copy_file.c:237 +#, c-format +msgid "error while cloning file \"%s\" to \"%s\": %s" +msgstr "помилка при клонуванні файлу \"%s\" в \"%s\": %s" + +#: copy_file.c:245 pg_combinebackup.c:251 +#, c-format +msgid "file cloning not supported on this platform" +msgstr "клонування файлів не підтримується на цій платформі" + +#: copy_file.c:278 reconstruct.c:691 +#, c-format +msgid "error while copying file range from \"%s\" to \"%s\": %m" +msgstr "помилка при копіюванні діапазону файлу від \"%s\" до \"%s\": %m" + +#: copy_file.c:285 pg_combinebackup.c:264 reconstruct.c:711 +#, c-format +msgid "copy_file_range not supported on this platform" +msgstr "copy_file_range не підтримується на цій платформі" + +#: copy_file.c:300 +#, c-format +msgid "could not copy file \"%s\" to \"%s\": %m" +msgstr "не вдалося скопіювати файл \"%s\" в \"%s\": %m" + +#: load_manifest.c:125 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "файл \"%s\" не існує" + +#: load_manifest.c:163 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %lld" + +#: load_manifest.c:201 +#, c-format +msgid "could not read file \"%s\": read %lld of %lld" +msgstr "не вдалося прочитати файл \"%s\": прочитано %lld з %lld" + +#: load_manifest.c:249 +#, c-format +msgid "backup manifest version 1 does not support incremental backup" +msgstr "маніфест резервного копіювання версії 1 не підтримує інкреметного резервного копіювання" + +#: load_manifest.c:281 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "дубльований шлях у маніфесті резервного копіювання: \"%s\"" + +#: pg_combinebackup.c:220 pg_combinebackup.c:228 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "Спробуйте \"%s --help\" для додаткової інформації." + +#: pg_combinebackup.c:227 +#, c-format +msgid "no input directories specified" +msgstr "вхідні каталоги не вказано" + +#: pg_combinebackup.c:233 +#, c-format +msgid "no output directory specified" +msgstr "вихідний каталог не вказано" + +#: pg_combinebackup.c:301 +#, c-format +msgid "%s: manifest system identifier is %llu, but control file has %llu" +msgstr "%s: маніфестовий ідентифікатор системи - %llu, але контрольний файл має %llu" + +#: pg_combinebackup.c:340 +#, c-format +msgid "cannot generate a manifest because no manifest is available for the final input backup" +msgstr "не вдається згенерувати маніфест, оскільки для остаточної резервної копії вхідних даних немає маніфесту" + +#: pg_combinebackup.c:387 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "не вдалося створити символічне послання з \"%s\" на \"%s\": %m" + +#: pg_combinebackup.c:399 pg_combinebackup.c:730 pg_combinebackup.c:927 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "не вдалося створити каталог \"%s\": %m" + +#: pg_combinebackup.c:454 +#, c-format +msgid "directory name too long" +msgstr "ім'я директорії задовге" + +#: pg_combinebackup.c:461 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "кілька знаків \"=\" зіставленні табличних просторів" + +#: pg_combinebackup.c:469 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "неприпустимий табличний простір зіставлення формату \"%s\", має бути \"OLDDIR = NEWDIR\"" + +#: pg_combinebackup.c:480 pg_combinebackup.c:484 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "старий каталог не є абсолютним шляхом у зіставлення табличного простору: %s" + +#: pg_combinebackup.c:553 +#, c-format +msgid "backup at \"%s\" is a full backup, but only the first backup should be a full backup" +msgstr "резервна копія за адресою \"%s\" є повною резервною копією, але тільки перша резервна копія має бути повною резервною копією" + +#: pg_combinebackup.c:556 +#, c-format +msgid "backup at \"%s\" is an incremental backup, but the first backup should be a full backup" +msgstr "резервна копія за адресою \"%s\" є інкрементною резервною копією, але перша резервна копія має бути повною" + +#: pg_combinebackup.c:559 +#, c-format +msgid "backup at \"%s\" starts on timeline %u, but expected %u" +msgstr "резервне копіювання на \"%s\" починається на лінії часу %u, але очікується %u" + +#: pg_combinebackup.c:562 +#, c-format +msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X" +msgstr "резервне копіювання на \"%s\" починається з LSN %X/%X, але очікується %X/%X" + +#: pg_combinebackup.c:614 +#, c-format +msgid "%s: CRC is incorrect" +msgstr "%s: CRC невірний" + +#: pg_combinebackup.c:618 +#, c-format +msgid "%s: unexpected control file version" +msgstr "%s: неочікувана версія контрольного файлу" + +#: pg_combinebackup.c:625 +#, c-format +msgid "%s: expected system identifier %llu, but found %llu" +msgstr "%s: очікуваний ідентифікатор системи %llu, але знайдено %llu" + +#: pg_combinebackup.c:657 +#, c-format +msgid "only some backups have checksums enabled" +msgstr "лише деякі резервні копії мають включені контрольні суми" + +#: pg_combinebackup.c:658 +#, c-format +msgid "Disable, and optionally reenable, checksums on the output directory to avoid failures." +msgstr "Вимкніть, та за бажанням увімкніть, контрольні суми для вихідного каталога, щоб уникнути помилок." + +#: pg_combinebackup.c:693 +#, c-format +msgid "removing output directory \"%s\"" +msgstr "видалення вихідного каталогу \"%s\"" + +#: pg_combinebackup.c:695 +#, c-format +msgid "failed to remove output directory" +msgstr "не вдалося вилучити вихідний каталог" + +#: pg_combinebackup.c:699 +#, c-format +msgid "removing contents of output directory \"%s\"" +msgstr "видалення вмісту вихідного каталогу \"%s\"" + +#: pg_combinebackup.c:702 +#, c-format +msgid "failed to remove contents of output directory" +msgstr "не вдалося вилучити вміст з вихідного каталогу" + +#: pg_combinebackup.c:742 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "каталог \"%s\" існує, але він не порожній" + +#: pg_combinebackup.c:745 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "немає доступу до каталогу \"%s\": %m" + +#: pg_combinebackup.c:759 +#, c-format +msgid "%s reconstructs full backups from incrementals.\n\n" +msgstr "%s відновлює повні резервні копії з інкрементів.\n\n" + +#: pg_combinebackup.c:760 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: pg_combinebackup.c:761 +#, c-format +msgid " %s [OPTION]... DIRECTORY...\n" +msgstr " %s [ПАРАМЕТР]... КАТАЛОГ...\n" + +#: pg_combinebackup.c:762 +#, c-format +msgid "\n" +"Options:\n" +msgstr "\n" +"Параметри:\n" + +#: pg_combinebackup.c:763 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr " -d, --debug генерувати багато налагоджувальних повідомлень\n" + +#: pg_combinebackup.c:764 +#, c-format +msgid " -n, --dry-run do not actually do anything\n" +msgstr " -n, --dry-run насправді ніякої дії\n" + +#: pg_combinebackup.c:765 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync не чекати на безпечний запис змін на диск\n" + +#: pg_combinebackup.c:766 +#, c-format +msgid " -o, --output=DIRECTORY output directory\n" +msgstr " -o, --output=DIRECTORY вихідний каталог\n" + +#: pg_combinebackup.c:767 +#, c-format +msgid " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" перемістити табличний простір з OLDDIR в NEWDIR\n" + +#: pg_combinebackup.c:769 +#, c-format +msgid " --clone clone (reflink) files instead of copying\n" +msgstr " --clone клонувати (reflink) файли замість копіювання\n" + +#: pg_combinebackup.c:770 +#, c-format +msgid " --copy copy files (default)\n" +msgstr " --copy копіювати файли (за замовчуванням)\n" + +#: pg_combinebackup.c:771 +#, c-format +msgid " --copy-file-range copy using copy_file_range() system call\n" +msgstr " --copy-file-range копіювати за допомогою системного виклику copy_file_range()\n" + +#: pg_combinebackup.c:772 +#, c-format +msgid " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" алгоритм використання контрольних сум маніфесту\n" + +#: pg_combinebackup.c:774 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest заборонити створення маніфесту резервної копії\n" + +#: pg_combinebackup.c:775 +#, c-format +msgid " --sync-method=METHOD set method for syncing files to disk\n" +msgstr " --sync-method=METHOD встановити метод синхронізації файлів на диск\n" + +#: pg_combinebackup.c:776 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_combinebackup.c:777 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_combinebackup.c:779 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_combinebackup.c:780 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_combinebackup.c:995 +#, c-format +msgid "skipping symbolic link \"%s\"" +msgstr "пропускання символічного посилання \"%s\"" + +#: pg_combinebackup.c:997 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "спеціальний файл \"%s\" пропускається" + +#: pg_combinebackup.c:1073 reconstruct.c:300 +#, c-format +msgid "manifest file \"%s\" contains no entry for file \"%s\"" +msgstr "файл маніфеста \"%s\" не містить запису для файлу \"%s\"" + +#: pg_combinebackup.c:1189 +#, c-format +msgid "%s: server version too old" +msgstr "%s: версія серверу застаріла" + +#: pg_combinebackup.c:1190 +#, c-format +msgid "%s: could not parse version number" +msgstr "%s: не вдалося розібрати номер версії" + +#: pg_combinebackup.c:1309 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "не можливо прочитати символічне послання \"%s\": %m" + +#: pg_combinebackup.c:1312 +#, c-format +msgid "target of symbolic link \"%s\" is too long" +msgstr "ціль символічного посилання \"%s\" занадто довга" + +#: pg_combinebackup.c:1315 +#, c-format +msgid "target of symbolic link \"%s\" is relative" +msgstr "ціль символічного посилання \"%s\" є відносною" + +#: pg_combinebackup.c:1337 +#, c-format +msgid "tablespace at \"%s\" has no tablespace mapping" +msgstr "табличний простір за адресою \"%s\" не має зіставлення табличного простору" + +#: pg_combinebackup.c:1355 +#, c-format +msgid "tablespaces with OIDs %u and %u both point at directory \"%s\"" +msgstr "табличні простори з OID %u та %u обидва вказують на каталог \"%s\"" + +#: pg_combinebackup.c:1364 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: pg_combinebackup.c:1385 +#, c-format +msgid "file \"%s\" is too large" +msgstr "файл \"%s\" занадто великий" + +#: pg_combinebackup.c:1402 +#, c-format +msgid "could not read file \"%s\": read %zd of %lld" +msgstr "не вдалося прочитати файл \"%s\": прочитано %zd з %lld" + +#: reconstruct.c:410 +#, c-format +msgid "file \"%s\" is too short: expected %llu, found %llu" +msgstr "файл \"%s\" занадто короткий: очікується %llu, знайдено %llu" + +#: reconstruct.c:452 +#, c-format +msgid "file \"%s\" has bad incremental magic number (0x%x, expected 0x%x)" +msgstr "файл \"%s\" має неправильне інкрементне магічне число (0x%x, очікувалось 0x%x)" + +#: reconstruct.c:458 +#, c-format +msgid "file \"%s\" has block count %u in excess of segment size %u" +msgstr "файл \"%s\" має кількість блоків %u, що перевищує розмір сегмента %u" + +#: reconstruct.c:465 +#, c-format +msgid "file \"%s\" has truncation block length %u in excess of segment size %u" +msgstr "файл \"%s\" має довжину блоку усікання %u, що перевищує розмір сегмента %u" + +#: reconstruct.c:529 +#, c-format +msgid "could not read file \"%s\": read %d of %u" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %u" + +#: reconstruct.c:773 +#, c-format +msgid "could not read from file \"%s\", offset %llu: read %d of %d" +msgstr "не вдалося прочитати з файлу \"%s\", зміщення %llu: прочитано %d з %d" + diff --git a/src/bin/pg_combinebackup/t/002_compare_backups.pl b/src/bin/pg_combinebackup/t/002_compare_backups.pl index 2c7ca89b92f7f..a3e29c055091e 100644 --- a/src/bin/pg_combinebackup/t/002_compare_backups.pl +++ b/src/bin/pg_combinebackup/t/002_compare_backups.pl @@ -174,6 +174,7 @@ $pitr1->command_ok( [ 'pg_dumpall', + '--restrict-key' => 'test', '--no-sync', '--no-unlogged-table-data', '--file' => $dump1, @@ -183,6 +184,7 @@ $pitr2->command_ok( [ 'pg_dumpall', + '--restrict-key' => 'test', '--no-sync', '--no-unlogged-table-data', '--file' => $dump2, diff --git a/src/bin/pg_combinebackup/t/010_hardlink.pl b/src/bin/pg_combinebackup/t/010_hardlink.pl index a0ee419090cf6..4f92d6676bdef 100644 --- a/src/bin/pg_combinebackup/t/010_hardlink.pl +++ b/src/bin/pg_combinebackup/t/010_hardlink.pl @@ -56,7 +56,7 @@ '--pgdata' => $backup1path, '--no-sync', '--checkpoint' => 'fast', - '--wal-method' => 'none' + '--wal-method' => 'none' ], "full backup"); @@ -74,7 +74,7 @@ '--pgdata' => $backup2path, '--no-sync', '--checkpoint' => 'fast', - '--wal-method' => 'none', + '--wal-method' => 'none', '--incremental' => $backup1path . '/backup_manifest' ], "incremental backup"); @@ -112,45 +112,45 @@ # of the given data file. sub check_data_file { - my ($data_file, $last_segment_nlinks) = @_; - - my @data_file_segments = ($data_file); - - # Start checking for additional segments - my $segment_number = 1; - - while (1) - { - my $next_segment = $data_file . '.' . $segment_number; - - # If the file exists and is a regular file, add it to the list - if (-f $next_segment) - { - push @data_file_segments, $next_segment; - $segment_number++; - } - # Stop the loop if the file doesn't exist - else - { - last; - } - } - - # All segments of the given data file should contain 2 hard links, except - # for the last one, which should match the given number of links. - my $last_segment = pop @data_file_segments; - - for my $segment (@data_file_segments) - { - # Get the file's stat information of each segment - my $nlink_count = get_hard_link_count($segment); - ok($nlink_count == 2, "File '$segment' has 2 hard links"); - } - - # Get the file's stat information of the last segment - my $nlink_count = get_hard_link_count($last_segment); - ok($nlink_count == $last_segment_nlinks, - "File '$last_segment' has $last_segment_nlinks hard link(s)"); + my ($data_file, $last_segment_nlinks) = @_; + + my @data_file_segments = ($data_file); + + # Start checking for additional segments + my $segment_number = 1; + + while (1) + { + my $next_segment = $data_file . '.' . $segment_number; + + # If the file exists and is a regular file, add it to the list + if (-f $next_segment) + { + push @data_file_segments, $next_segment; + $segment_number++; + } + # Stop the loop if the file doesn't exist + else + { + last; + } + } + + # All segments of the given data file should contain 2 hard links, except + # for the last one, which should match the given number of links. + my $last_segment = pop @data_file_segments; + + for my $segment (@data_file_segments) + { + # Get the file's stat information of each segment + my $nlink_count = get_hard_link_count($segment); + ok($nlink_count == 2, "File '$segment' has 2 hard links"); + } + + # Get the file's stat information of the last segment + my $nlink_count = get_hard_link_count($last_segment); + ok($nlink_count == $last_segment_nlinks, + "File '$last_segment' has $last_segment_nlinks hard link(s)"); } @@ -159,11 +159,11 @@ sub check_data_file # that file. sub get_hard_link_count { - my ($file) = @_; + my ($file) = @_; - # Get file stats - my @stats = stat($file); - my $nlink = $stats[3]; # Number of hard links + # Get file stats + my @stats = stat($file); + my $nlink = $stats[3]; # Number of hard links - return $nlink; + return $nlink; } diff --git a/src/bin/pg_combinebackup/write_manifest.c b/src/bin/pg_combinebackup/write_manifest.c index 313f8929df509..819a3fd0b7a6b 100644 --- a/src/bin/pg_combinebackup/write_manifest.c +++ b/src/bin/pg_combinebackup/write_manifest.c @@ -155,7 +155,7 @@ finalize_manifest(manifest_writer *mwriter, for (wal_range = first_wal_range; wal_range != NULL; wal_range = wal_range->next) appendStringInfo(&mwriter->buf, - "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }", + "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%08X\", \"End-LSN\": \"%X/%08X\" }", wal_range == first_wal_range ? "" : ",\n", wal_range->tli, LSN_FORMAT_ARGS(wal_range->start_lsn), diff --git a/src/bin/pg_config/po/es.po b/src/bin/pg_config/po/es.po index 4ea583846477a..2ebb19f2a50c9 100644 --- a/src/bin/pg_config/po/es.po +++ b/src/bin/pg_config/po/es.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_config (PostgreSQL) 16\n" +"Project-Id-Version: pg_config (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:18+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2025-02-16 19:48+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -27,35 +27,61 @@ msgstr "" msgid "not recorded" msgstr "no registrado" -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binario «%s» no válido: %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "no se pudo leer el binario «%s»: %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "no se pudo resolver la ruta «%s» a forma absoluta: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "no se pudo ejecutar la orden «%s»: %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "no se pudo leer desde la orden «%s»: %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "la orden «%s» no retornó datos" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() falló: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "memoria agotada" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + #: pg_config.c:74 #, c-format msgid "" diff --git a/src/bin/pg_config/po/fr.po b/src/bin/pg_config/po/fr.po index 3517868aa2bdb..3433a07cc2ef8 100644 --- a/src/bin/pg_config/po/fr.po +++ b/src/bin/pg_config/po/fr.po @@ -10,10 +10,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-07-29 09:18+0000\n" -"PO-Revision-Date: 2023-07-30 08:09+0200\n" +"POT-Creation-Date: 2024-07-20 21:19+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" #: ../../common/config_info.c:134 ../../common/config_info.c:142 #: ../../common/config_info.c:150 ../../common/config_info.c:158 @@ -30,35 +30,61 @@ msgstr "" msgid "not recorded" msgstr "non enregistré" -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binaire « %s » invalide : %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "n'a pas pu lire le binaire « %s » : %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "n'a pas pu résoudre le chemin « %s » en sa forme absolue : %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "n'a pas pu exécuter la commande « %s » : %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "n'a pas pu lire à partir de la commande « %s » : %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "aucune donnée n'a été renvoyée par la commande « %s »" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "échec de %s() : %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "mémoire épuisée" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "mémoire épuisée\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" + #: pg_config.c:74 #, c-format msgid "" @@ -278,56 +304,3 @@ msgstr "%s : n'a pas pu trouver l'exécutable du programme\n" #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s : argument invalide : %s\n" - -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide puis quitte\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" - -#~ msgid "child process exited with exit code %d" -#~ msgstr "le processus fils a quitté avec le code de sortie %d" - -#~ msgid "child process exited with unrecognized status %d" -#~ msgstr "le processus fils a quitté avec un statut %d non reconnu" - -#~ msgid "child process was terminated by exception 0x%X" -#~ msgstr "le processus fils a été terminé par l'exception 0x%X" - -#~ msgid "child process was terminated by signal %d" -#~ msgstr "le processus fils a été terminé par le signal %d" - -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" - -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" - -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %m" - -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "n'a pas pu identifier le répertoire courant : %m" - -#, c-format -#~ msgid "could not read binary \"%s\"" -#~ msgstr "n'a pas pu lire le binaire « %s »" - -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" - -#, c-format -#~ msgid "could not read symbolic link \"%s\": %m" -#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %m" - -#, c-format -#~ msgid "invalid binary \"%s\"" -#~ msgstr "binaire « %s » invalide" - -#~ msgid "pclose failed: %m" -#~ msgstr "échec de pclose : %m" diff --git a/src/bin/pg_config/po/ka.po b/src/bin/pg_config/po/ka.po index 6537557bead61..f0014e3c1fde7 100644 --- a/src/bin/pg_config/po/ka.po +++ b/src/bin/pg_config/po/ka.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-03-10 07:18+0000\n" +"POT-Creation-Date: 2024-07-01 03:49+0000\n" "PO-Revision-Date: 2024-03-10 20:43+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" @@ -69,6 +69,17 @@ msgstr "%s()-ის შეცდომა: %m" msgid "out of memory" msgstr "არასაკმარისი მეხსიერება" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "არასაკმარისი მეხსიერება\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" + #: pg_config.c:74 #, c-format msgid "" diff --git a/src/bin/pg_config/po/ko.po b/src/bin/pg_config/po/ko.po index de9084760585e..e735330275b57 100644 --- a/src/bin/pg_config/po/ko.po +++ b/src/bin/pg_config/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_config (PostgreSQL) 16\n" +"Project-Id-Version: pg_config (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:48+0000\n" -"PO-Revision-Date: 2023-05-26 13:20+0900\n" +"POT-Creation-Date: 2025-01-17 04:48+0000\n" +"PO-Revision-Date: 2025-01-16 12:53+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean team \n" "Language: ko\n" @@ -22,35 +22,61 @@ msgstr "" msgid "not recorded" msgstr "기록되어 있지 않음" -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "\"%s\" 파일은 잘못된 바이너리 파일임: %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음: %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "실행할 \"%s\" 파일 찾을 수 없음" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "\"%s\" 경로를 절대경로로 바꿀 수 없음: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "\"%s\" 명령을 실행할 수 없음: %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "\"%s\" 명령으로부터 읽을 수 없음: %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "\"%s\" 명령이 아무런 데이터를 반환하지 않음" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() 실패: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "메모리 부족" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "널 포인터를 중복할 수 없음 (내부 오류)\n" + #: pg_config.c:74 #, c-format msgid "" diff --git a/src/bin/pg_config/po/ru.po b/src/bin/pg_config/po/ru.po index 34e80c83c632d..0a86bbb455c6d 100644 --- a/src/bin/pg_config/po/ru.po +++ b/src/bin/pg_config/po/ru.po @@ -5,13 +5,13 @@ # Serguei A. Mokhov , 2004-2005. # Sergey Burladyan , 2009, 2012. # Andrey Sudnik , 2010. -# Alexander Lakhin , 2012-2016, 2017, 2019, 2020, 2021, 2023. +# Alexander Lakhin , 2012-2016, 2017, 2019, 2020, 2021, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-28 07:59+0300\n" -"PO-Revision-Date: 2023-08-29 10:19+0300\n" +"POT-Creation-Date: 2024-09-02 09:29+0300\n" +"PO-Revision-Date: 2024-09-04 13:45+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -28,35 +28,61 @@ msgstr "" msgid "not recorded" msgstr "не записано" -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "неверный исполняемый файл \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не удалось прочитать исполняемый файл \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не удалось преобразовать относительный путь \"%s\" в абсолютный: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не удалось выполнить команду \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не удалось прочитать вывод команды \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "команда \"%s\" не выдала данные" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "ошибка в %s(): %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "нехватка памяти" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + #: pg_config.c:74 #, c-format msgid "" @@ -295,10 +321,6 @@ msgstr "%s: неверный аргумент: %s\n" #~ msgid "could not identify current directory: %m" #~ msgstr "не удалось определить текущий каталог: %m" -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "не удалось перейти в каталог \"%s\": %m" - #, c-format #~ msgid "could not read symbolic link \"%s\": %m" #~ msgstr "не удалось прочитать символическую ссылку \"%s\": %m" diff --git a/src/bin/pg_config/po/sv.po b/src/bin/pg_config/po/sv.po index 2b5468ec93ac0..d729e3053217d 100644 --- a/src/bin/pg_config/po/sv.po +++ b/src/bin/pg_config/po/sv.po @@ -1,13 +1,13 @@ # Swedish message translation file for pg_config. -# Dennis Björklund , 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Dennis Björklund , 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. # Mats Erik Andersson , 2014. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 16\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-01 14:18+0000\n" -"PO-Revision-Date: 2023-08-30 09:01+0200\n" +"POT-Creation-Date: 2024-07-12 14:19+0000\n" +"PO-Revision-Date: 2024-07-12 18:58+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -23,35 +23,61 @@ msgstr "" msgid "not recorded" msgstr "ej sparad" -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "ogiltig binär \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "kunde inte läsa binär \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "kunde inte hitta en \"%s\" att köra" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "kunde inte konvertera sökvägen \"%s\" till en absolut sökväg: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "kunde inte köra kommandot \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "kunde inte läsa från kommando \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "ingen data returnerades från kommandot \"%s\"" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() misslyckades: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "slut på minne" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kan inte duplicera null-pekare (internt fel)\n" + #: pg_config.c:74 #, c-format msgid "" @@ -245,15 +271,3 @@ msgstr "%s: kunde inte hitta det egna programmets körbara fil\n" #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: ogiltigt argument: %s\n" - -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "kunde inte byta katalog till \"%s\": %m" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "kunde inte identifiera aktuell katalog: %m" - -#, c-format -#~ msgid "could not read symbolic link \"%s\": %m" -#~ msgstr "kan inte läsa symbolisk länk \"%s\": %m" diff --git a/src/bin/pg_config/po/uk.po b/src/bin/pg_config/po/uk.po index d64a71c7a55d4..ad38f026516c6 100644 --- a/src/bin/pg_config/po/uk.po +++ b/src/bin/pg_config/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-04-19 11:17+0000\n" -"PO-Revision-Date: 2023-12-20 11:53\n" +"POT-Creation-Date: 2024-08-31 06:19+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_16_STABLE/pg_config.pot\n" -"X-Crowdin-File-ID: 973\n" +"X-Crowdin-File: /REL_17_STABLE/pg_config.pot\n" +"X-Crowdin-File-ID: 1024\n" #: ../../common/config_info.c:134 ../../common/config_info.c:142 #: ../../common/config_info.c:150 ../../common/config_info.c:158 @@ -24,35 +24,61 @@ msgstr "" msgid "not recorded" msgstr "не записано" -#: ../../common/exec.c:172 +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "невірний бінарний файл \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не вдалося прочитати бінарний файл \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не вдалося знайти абсолютний шлях \"%s\": %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не вдалося виконати команду \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не вдалося прочитати висновок команди \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "команда \"%s\" не повернула жодних даних" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() помилка: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "недостатньо пам'яті" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + #: pg_config.c:74 #, c-format msgid "\n" diff --git a/src/bin/pg_config/po/zh_CN.po b/src/bin/pg_config/po/zh_CN.po index 8c32e10321f30..b12c1e2da620b 100644 --- a/src/bin/pg_config/po/zh_CN.po +++ b/src/bin/pg_config/po/zh_CN.po @@ -1,20 +1,20 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. -# FIRST AUTHOR , YEAR. +# Dianjin Wang , 2024 # msgid "" msgstr "" -"Project-Id-Version: pg_config (PostgreSQL) 14\n" +"Project-Id-Version: pg_config (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-08-14 05:46+0000\n" -"PO-Revision-Date: 2021-08-15 17:25+0800\n" -"Last-Translator: Jie Zhang \n" +"POT-Creation-Date: 2024-09-13 22:51+0000\n" +"PO-Revision-Date: 2024-09-14 12:07+0800\n" +"Last-Translator: Dianjin Wang \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 3.4.4\n" #: ../../common/config_info.c:134 ../../common/config_info.c:142 #: ../../common/config_info.c:150 ../../common/config_info.c:158 @@ -23,44 +23,61 @@ msgstr "" msgid "not recorded" msgstr "没有被记录" -#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 +#: ../../common/exec.c:174 #, c-format -msgid "could not identify current directory: %m" -msgstr "无法确认当前目录: %m" +msgid "invalid binary \"%s\": %m" +msgstr "无效的二进制 \"%s\": %m" -#: ../../common/exec.c:155 +#: ../../common/exec.c:217 #, c-format -msgid "invalid binary \"%s\"" -msgstr "无效的二进制码 \"%s\"" +msgid "could not read binary \"%s\": %m" +msgstr "无法读取二进制 \"%s\": %m" -#: ../../common/exec.c:205 +#: ../../common/exec.c:225 #, c-format -msgid "could not read binary \"%s\"" -msgstr "无法读取二进制码 \"%s\"" +msgid "could not find a \"%s\" to execute" +msgstr "未能找到一个 \"%s\" 予以执行" -#: ../../common/exec.c:213 +#: ../../common/exec.c:252 #, c-format -msgid "could not find a \"%s\" to execute" -msgstr "未能找到一个 \"%s\" 来执行" +msgid "could not resolve path \"%s\" to absolute form: %m" +msgstr "无法将路径 \"%s\" 解析为绝对路径格式: %m" -#: ../../common/exec.c:269 ../../common/exec.c:308 +#: ../../common/exec.c:382 #, c-format -msgid "could not change directory to \"%s\": %m" -msgstr "无法跳转到目录 \"%s\" 中: %m" +msgid "could not execute command \"%s\": %m" +msgstr "无法执行命令 \"%s\": %m" -#: ../../common/exec.c:286 +#: ../../common/exec.c:394 #, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "无法读取符号链接 \"%s\": %m" +msgid "could not read from command \"%s\": %m" +msgstr "无法读取命令 \"%s\": %m" -#: ../../common/exec.c:409 +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "命令 \"%s\" 未返回数据" + +#: ../../common/exec.c:424 +#, c-format msgid "%s() failed: %m" -msgstr "%s()失败: %m" +msgstr "%s() 失败: %m" -#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "内存不足" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "内存不足\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "无法复制空指针 (内部错误)\n" + #: pg_config.c:74 #, c-format msgid "" @@ -69,7 +86,7 @@ msgid "" "\n" msgstr "" "\n" -"%s 提供 PostgreSQL 的安装信息.\n" +"%s 提供所安装 PostgreSQL 版本的信息.\n" "\n" #: pg_config.c:75 @@ -82,7 +99,9 @@ msgstr "使用方法:\n" msgid "" " %s [OPTION]...\n" "\n" -msgstr " %s [选项]...\n" +msgstr "" +" %s [选项]...\n" +"\n" #: pg_config.c:77 #, c-format @@ -92,17 +111,17 @@ msgstr "选项:\n" #: pg_config.c:78 #, c-format msgid " --bindir show location of user executables\n" -msgstr " --bindir 显示执行文件所在位置\n" +msgstr " --bindir 显示用户执行文件所在位置\n" #: pg_config.c:79 #, c-format msgid " --docdir show location of documentation files\n" -msgstr " --docdir 显示文档所在位置\n" +msgstr " --docdir 显示文档文件所在位置\n" #: pg_config.c:80 #, c-format msgid " --htmldir show location of HTML documentation files\n" -msgstr " --htmldir 显示HTML文档文件所在位置\n" +msgstr " --htmldir 显示 HTML 文档文件所在位置\n" #: pg_config.c:81 #, c-format @@ -110,18 +129,18 @@ msgid "" " --includedir show location of C header files of the client\n" " interfaces\n" msgstr "" -" --includedir 显示客户端接口 C 头文件所在\n" +" --includedir 显示客户端接口 C 语言头文件所在\n" " 位置\n" #: pg_config.c:83 #, c-format msgid " --pkgincludedir show location of other C header files\n" -msgstr " --pkgincludedir 显示其它C语言头文件所在的位置\n" +msgstr " --pkgincludedir 显示其它 C 语言头文件所在位置\n" #: pg_config.c:84 #, c-format msgid " --includedir-server show location of C header files for the server\n" -msgstr " --includedir-server 显示服务端 C 头文件所在位置\n" +msgstr " --includedir-server 显示服务器端 C 语言头文件所在位置\n" #: pg_config.c:85 #, c-format @@ -151,7 +170,7 @@ msgstr " --sharedir 显示独立架构支持文件所在位置\n" #: pg_config.c:90 #, c-format msgid " --sysconfdir show location of system-wide configuration files\n" -msgstr " --sysconfdir 显示系统范围的配置文件的所在位置\n" +msgstr " --sysconfdir 显示系统范围的配置文件所在位置\n" #: pg_config.c:91 #, c-format @@ -164,53 +183,53 @@ msgid "" " --configure show options given to \"configure\" script when\n" " PostgreSQL was built\n" msgstr "" -" --configure 显示编译 PostgreSQL 时 \"configure\"\n" -" 的选项\n" +" --configure 显示在编译 PostgreSQL 时 \"configure\" 脚本\n" +" 的所用选项\n" #: pg_config.c:94 #, c-format msgid " --cc show CC value used when PostgreSQL was built\n" -msgstr " --cc 显示在创建PostgreSQL时所使用的CC值\n" +msgstr " --cc 显示在编译 PostgreSQL 时所使用的 CC 值\n" #: pg_config.c:95 #, c-format msgid " --cppflags show CPPFLAGS value used when PostgreSQL was built\n" -msgstr " --cppflags 当创建PostgreSQL时显示CPPFLAGS的值\n" +msgstr " --cppflags 显示在编译 PostgreSQL 时所使用的 CPPFLAGS 值\n" #: pg_config.c:96 #, c-format msgid " --cflags show CFLAGS value used when PostgreSQL was built\n" -msgstr " --cflags 显示在创建PostgreSQL时所使用的CFLAG值\n" +msgstr " --cflags 显示在编译 PostgreSQL 时所使用的 CFLAGS 值\n" #: pg_config.c:97 #, c-format msgid " --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n" -msgstr " --cflags_sl 当创建PostgreSQL时显示CFLAGS_SL的值\n" +msgstr " --cflags_sl 显示在编译 PostgreSQL 时所使用的 CFLAGS_SL 值\n" #: pg_config.c:98 #, c-format msgid " --ldflags show LDFLAGS value used when PostgreSQL was built\n" -msgstr " --ldflags 显示在创建PostgreSQL时所使用的LDFLAG值\n" +msgstr " --ldflags 显示在编译 PostgreSQL 时所使用的 LDFLAGS 值\n" #: pg_config.c:99 #, c-format msgid " --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n" -msgstr " --ldflags_ex 当创建PostgreSQL时显示LDFLAGS_EX的值\n" +msgstr " --ldflags_ex 显示在编译 PostgreSQL 时所使用的 LDFLAGS_EX 值\n" #: pg_config.c:100 #, c-format msgid " --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n" -msgstr " --ldflags_sl 当创建PostgreSQL时显示LDFLAGS_SL的值\n" +msgstr " --ldflags_sl 显示在编译 PostgreSQL 时所使用的 LDFLAGS_SL 值\n" #: pg_config.c:101 #, c-format msgid " --libs show LIBS value used when PostgreSQL was built\n" -msgstr " --libs 显示在创建PostgreSQL时所使用的LIBS值\n" +msgstr " --libs 显示在编译 PostgreSQL 时所使用的 LIBS 值\n" #: pg_config.c:102 #, c-format msgid " --version show the PostgreSQL version\n" -msgstr " --version 显示PostgreSQL的版本信息\n" +msgstr " --version 显示 PostgreSQL 的版本信息\n" #: pg_config.c:103 #, c-format @@ -225,13 +244,13 @@ msgid "" "\n" msgstr "" "\n" -"没有参数,将显示所有已知的成员.\n" +"没有参数, 将显示所有已知条目.\n" "\n" #: pg_config.c:105 #, c-format msgid "Report bugs to <%s>.\n" -msgstr "臭虫报告至<%s>.\n" +msgstr "报告缺陷: <%s>.\n" #: pg_config.c:106 #, c-format @@ -246,10 +265,29 @@ msgstr "请用 \"%s --help\" 获取更多的信息.\n" #: pg_config.c:154 #, c-format msgid "%s: could not find own program executable\n" -msgstr "%s: 无法找到执行文件\n" +msgstr "%s: 无法找到所属执行程序\n" #: pg_config.c:181 #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: 无效参数: %s\n" +#, c-format +#~ msgid "could not change directory to \"%s\": %m" +#~ msgstr "无法跳转到目录 \"%s\" 中: %m" + +#, c-format +#~ msgid "could not identify current directory: %m" +#~ msgstr "无法确认当前目录: %m" + +#, c-format +#~ msgid "could not read binary \"%s\"" +#~ msgstr "无法读取二进制码 \"%s\"" + +#, c-format +#~ msgid "could not read symbolic link \"%s\": %m" +#~ msgstr "无法读取符号链接 \"%s\": %m" + +#, c-format +#~ msgid "invalid binary \"%s\"" +#~ msgstr "无效的二进制码 \"%s\"" diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c index 9901a2bae51c9..10de058ce91f4 100644 --- a/src/bin/pg_controldata/pg_controldata.c +++ b/src/bin/pg_controldata/pg_controldata.c @@ -1,7 +1,7 @@ /* * pg_controldata * - * reads the data from $PGDATA/global/pg_control + * reads the data from the control file located at $PGDATA/XLOG_CONTROL_FILE. * * copyright (c) Oliver Elphick , 2001; * license: BSD @@ -245,9 +245,9 @@ main(int argc, char *argv[]) dbState(ControlFile->state)); printf(_("pg_control last modified: %s\n"), pgctime_str); - printf(_("Latest checkpoint location: %X/%X\n"), + printf(_("Latest checkpoint location: %X/%08X\n"), LSN_FORMAT_ARGS(ControlFile->checkPoint)); - printf(_("Latest checkpoint's REDO location: %X/%X\n"), + printf(_("Latest checkpoint's REDO location: %X/%08X\n"), LSN_FORMAT_ARGS(ControlFile->checkPointCopy.redo)); printf(_("Latest checkpoint's REDO WAL file: %s\n"), xlogfilename); @@ -282,15 +282,15 @@ main(int argc, char *argv[]) ControlFile->checkPointCopy.newestCommitTsXid); printf(_("Time of latest checkpoint: %s\n"), ckpttime_str); - printf(_("Fake LSN counter for unlogged rels: %X/%X\n"), + printf(_("Fake LSN counter for unlogged rels: %X/%08X\n"), LSN_FORMAT_ARGS(ControlFile->unloggedLSN)); - printf(_("Minimum recovery ending location: %X/%X\n"), + printf(_("Minimum recovery ending location: %X/%08X\n"), LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint)); printf(_("Min recovery ending loc's timeline: %u\n"), ControlFile->minRecoveryPointTLI); - printf(_("Backup start location: %X/%X\n"), + printf(_("Backup start location: %X/%08X\n"), LSN_FORMAT_ARGS(ControlFile->backupStartPoint)); - printf(_("Backup end location: %X/%X\n"), + printf(_("Backup end location: %X/%08X\n"), LSN_FORMAT_ARGS(ControlFile->backupEndPoint)); printf(_("End-of-backup record required: %s\n"), ControlFile->backupEndRequired ? _("yes") : _("no")); diff --git a/src/bin/pg_controldata/po/es.po b/src/bin/pg_controldata/po/es.po index 58127cba51d81..79a931a21b2d1 100644 --- a/src/bin/pg_controldata/po/es.po +++ b/src/bin/pg_controldata/po/es.po @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL) 16\n" +"Project-Id-Version: pg_controldata (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:22+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2025-02-16 19:53+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -22,31 +22,31 @@ msgstr "" "X-Generator: Poedit 2.0.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../common/controldata_utils.c:73 +#: ../../common/controldata_utils.c:97 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" -#: ../../common/controldata_utils.c:86 +#: ../../common/controldata_utils.c:110 #, c-format msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" -#: ../../common/controldata_utils.c:95 +#: ../../common/controldata_utils.c:119 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" -#: ../../common/controldata_utils.c:108 ../../common/controldata_utils.c:236 +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 #, c-format msgid "could not close file \"%s\": %m" msgstr "no se pudo cerrar el archivo «%s»: %m" -#: ../../common/controldata_utils.c:124 +#: ../../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "discordancia en orden de bytes" -#: ../../common/controldata_utils.c:126 +#: ../../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -60,21 +60,32 @@ msgstr "" "serían erróneos, y la instalación de PostgreSQL sería incompatible con este\n" "directorio de datos." -#: ../../common/controldata_utils.c:186 +#: ../../common/controldata_utils.c:230 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" -#: ../../common/controldata_utils.c:205 +#: ../../common/controldata_utils.c:249 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" -#: ../../common/controldata_utils.c:224 +#: ../../common/controldata_utils.c:268 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -174,342 +185,330 @@ msgid "unrecognized status code" msgstr "código de estado no reconocido" #: pg_controldata.c:84 -msgid "unrecognized wal_level" -msgstr "wal_level no reconocido" +msgid "unrecognized \"wal_level\"" +msgstr "«wal_level» no reconocido" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 +#: pg_controldata.c:139 pg_controldata.c:157 pg_controldata.c:164 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: pg_controldata.c:154 +#: pg_controldata.c:155 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_controldata.c:162 +#: pg_controldata.c:163 #, c-format msgid "no data directory specified" msgstr "no se especificó el directorio de datos" -#: pg_controldata.c:170 +#: pg_controldata.c:172 #, c-format -msgid "" -"WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" -"is expecting. The results below are untrustworthy.\n" -"\n" -msgstr "" -"ATENCIÓN: La suma de verificación calculada no coincide con el valor\n" -"almacenado en el archivo. Puede ser que el archivo esté corrupto, o\n" -"bien tiene una estructura diferente de la que este programa está\n" -"esperando. Los resultados presentados a continuación no son confiables.\n" -"\n" +msgid "calculated CRC checksum does not match value stored in control file" +msgstr "el \"checksum\" calculado no coincide con el valor almacenado en el archivo de control" -#: pg_controldata.c:179 +#: pg_controldata.c:173 #, c-format -msgid "WARNING: invalid WAL segment size\n" -msgstr "PRECAUCIÓN: tamaño de segmento de WAL no válido\n" +msgid "Either the control file is corrupt, or it has a different layout than this program is expecting. The results below are untrustworthy." +msgstr "O bien el archivo está corrupto, o tiene una estructura diferente de la que este programa está esperando. Los resultados presentados a continuación no son confiables." -#: pg_controldata.c:180 +#: pg_controldata.c:182 +#, 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] "tamaño de segmento de WAL no válido (%d byte) en archivo de control" +msgstr[1] "tamaño de segmento de WAL no válido (%d bytes) en archivo de control" + +#: pg_controldata.c:186 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "El tamaño de segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB." + +#: pg_controldata.c:187 +#, c-format +msgid "The file is corrupt and the results below are untrustworthy." +msgstr "El archivo está corrupto y los resultados a continuación no son confiables." + +#: pg_controldata.c:205 pg_controldata.c:213 pg_controldata.c:232 #, c-format -msgid "" -"The WAL segment size stored in the file, %d byte, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgid_plural "" -"The WAL segment size stored in the file, %d bytes, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgstr[0] "" -"El tamaño de segmento de WAL almacenado en el archivo, %d byte,\n" -"no es una potencia de dos entre 1 MB y 1 GB. El archivo está corrupto y los\n" -"resultados de abajo no son confiables.\n" -msgstr[1] "" -"El tamaño de segmento de WAL almacenado en el archivo, %d bytes,\n" -"no es una potencia de dos entre 1 MB y 1 GB. El archivo está corrupto y los\n" -"resultados de abajo no son confiables.\n" - -#: pg_controldata.c:222 msgid "???" msgstr "???" -#: pg_controldata.c:228 +#: pg_controldata.c:238 #, c-format msgid "pg_control version number: %u\n" msgstr "Número de versión de pg_control: %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:240 #, c-format msgid "Catalog version number: %u\n" msgstr "Número de versión del catálogo: %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:242 #, c-format msgid "Database system identifier: %llu\n" msgstr "Identificador de sistema: %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:244 #, c-format msgid "Database cluster state: %s\n" msgstr "Estado del sistema de base de datos: %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:246 #, c-format msgid "pg_control last modified: %s\n" msgstr "Última modificación de pg_control: %s\n" -#: pg_controldata.c:238 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Ubicación del último checkpoint: %X/%X\n" -#: pg_controldata.c:240 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Ubicación de REDO de último checkpoint: %X/%X\n" -#: pg_controldata.c:242 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Ubicación de REDO de último checkpoint: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID del último checkpoint: %u\n" -#: pg_controldata.c:246 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "PrevTimeLineID del último checkpoint: %u\n" -#: pg_controldata.c:248 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes del último checkpoint: %s\n" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "off" msgstr "desactivado" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "on" msgstr "activado" -#: pg_controldata.c:250 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID de último checkpoint: %u/%u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID de último checkpoint: %u\n" -#: pg_controldata.c:255 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId de último checkpoint: %u\n" -#: pg_controldata.c:257 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset de último checkpoint: %u\n" -#: pg_controldata.c:259 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID del último checkpoint: %u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB del oldestXID del último checkpoint: %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID del último checkpoint: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:275 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid del último checkpoint: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:277 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB del oldestMultiXid del últ. checkpoint: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:279 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid del último checkpoint: %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:281 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid del último checkpoint: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:283 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Instante de último checkpoint: %s\n" -#: pg_controldata.c:275 +#: pg_controldata.c:285 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Contador de LSN falsas para rels. unlogged: %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:287 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Punto final mínimo de recuperación: %X/%X\n" -#: pg_controldata.c:279 +#: pg_controldata.c:289 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Timeline de dicho punto final mínimo: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:291 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Ubicación del inicio de backup: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:293 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Ubicación del fin de backup: %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:295 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Registro fin-de-backup requerido: %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:296 msgid "no" msgstr "no" -#: pg_controldata.c:286 +#: pg_controldata.c:296 msgid "yes" msgstr "sí" -#: pg_controldata.c:287 +#: pg_controldata.c:297 #, c-format msgid "wal_level setting: %s\n" msgstr "Parámetro wal_level: %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:299 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "Parámetro wal_log_hings: %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:301 #, c-format msgid "max_connections setting: %d\n" msgstr "Parámetro max_connections: %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:303 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "Parámetro max_worker_processes: %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:305 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "Parámetro max_wal_senders: %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:307 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "Parámetro max_prepared_xacts: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:309 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "Parámetro max_locks_per_xact: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:311 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "Parámetro track_commit_timestamp: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:313 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Alineamiento máximo de datos: %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:316 #, c-format msgid "Database block size: %u\n" msgstr "Tamaño de bloque de la base de datos: %u\n" -#: pg_controldata.c:308 +#: pg_controldata.c:318 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Bloques por segmento en relación grande: %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:320 #, c-format msgid "WAL block size: %u\n" msgstr "Tamaño del bloque de WAL: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:322 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytes por segmento WAL: %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:324 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Máxima longitud de identificadores: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:326 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Máximo número de columnas de un índice: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:328 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Longitud máxima de un trozo TOAST: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:330 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Longitud máx. de un trozo de objeto grande: %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:333 #, c-format msgid "Date/time type storage: %s\n" msgstr "Tipo de almacenamiento de horas y fechas: %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:334 msgid "64-bit integers" msgstr "enteros de 64 bits" -#: pg_controldata.c:325 +#: pg_controldata.c:335 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Paso de parámetros float8: %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:336 msgid "by reference" msgstr "por referencia" -#: pg_controldata.c:326 +#: pg_controldata.c:336 msgid "by value" msgstr "por valor" -#: pg_controldata.c:327 +#: pg_controldata.c:337 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versión de sumas de verificación de datos: %u\n" -#: pg_controldata.c:329 +#: pg_controldata.c:339 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Nonce para autentificación simulada: %s\n" diff --git a/src/bin/pg_controldata/po/fr.po b/src/bin/pg_controldata/po/fr.po index a22d809a9478c..1c94ff051b777 100644 --- a/src/bin/pg_controldata/po/fr.po +++ b/src/bin/pg_controldata/po/fr.po @@ -11,10 +11,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-04-12 05:16+0000\n" -"PO-Revision-Date: 2022-04-12 17:29+0200\n" +"POT-Creation-Date: 2024-07-20 21:24+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -22,33 +22,33 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.5\n" -#: ../../common/controldata_utils.c:73 +#: ../../common/controldata_utils.c:97 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: ../../common/controldata_utils.c:86 +#: ../../common/controldata_utils.c:110 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: ../../common/controldata_utils.c:95 +#: ../../common/controldata_utils.c:119 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" -#: ../../common/controldata_utils.c:108 ../../common/controldata_utils.c:244 +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" -#: ../../common/controldata_utils.c:124 +#: ../../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "différence de l'ordre des octets" -#: ../../common/controldata_utils.c:126 +#: ../../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -62,21 +62,32 @@ msgstr "" "résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" "est incompatible avec ce répertoire des données." -#: ../../common/controldata_utils.c:194 +#: ../../common/controldata_utils.c:230 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../../common/controldata_utils.c:213 +#: ../../common/controldata_utils.c:249 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: ../../common/controldata_utils.c:232 +#: ../../common/controldata_utils.c:268 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "mémoire épuisée\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -176,8 +187,8 @@ msgid "unrecognized status code" msgstr "code de statut inconnu" #: pg_controldata.c:84 -msgid "unrecognized wal_level" -msgstr "wal_level non reconnu" +msgid "unrecognized \"wal_level\"" +msgstr "« wal_level » non reconnu" #: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 #, c-format @@ -194,376 +205,311 @@ msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" msgid "no data directory specified" msgstr "aucun répertoire de données indiqué" -#: pg_controldata.c:170 +#: pg_controldata.c:171 #, c-format -msgid "" -"WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" -"is expecting. The results below are untrustworthy.\n" -"\n" -msgstr "" -"ATTENTION : Les sommes de contrôle (CRC) calculées ne correspondent pas aux\n" -"valeurs stockées dans le fichier.\n" -"Soit le fichier est corrompu, soit son organisation diffère de celle\n" -"attendue par le programme.\n" -"Les résultats ci-dessous ne sont pas dignes de confiance.\n" -"\n" +msgid "calculated CRC checksum does not match value stored in control file" +msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier de contrôle" -#: pg_controldata.c:179 +#: pg_controldata.c:172 #, c-format -msgid "WARNING: invalid WAL segment size\n" -msgstr "ATTENTION : taille invalide du segment WAL\n" +msgid "Either the control file is corrupt, or it has a different layout than this program is expecting. The results below are untrustworthy." +msgstr "Soit le fichier de contrôle est corrompu, soit son organisation diffère de celle attendue par le programme. Les résultats ci-dessous ne sont pas dignes de confiance." -#: pg_controldata.c:180 +#: pg_controldata.c:181 #, c-format -msgid "" -"The WAL segment size stored in the file, %d byte, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgid_plural "" -"The WAL segment size stored in the file, %d bytes, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgstr[0] "" -"La taille d'un segment WAL enregistré dans le fichier, %d octet, n'est pas une puissance de deux " -"entre 1 Mo et 1 Go. Le fichier est corrompu et les résultats ci-dessous ne proviennent pas d'une " -"source fiable.\n" -"\n" -msgstr[1] "" -"La taille d'un segment WAL enregistré dans le fichier, %d octets, n'est pas une puissance de deux " -"entre 1 Mo et 1 Go. Le fichier est corrompu et les résultats ci-dessous ne proviennent pas d'une " -"source fiable.\n" -"\n" +msgid "invalid WAL segment size in control file (%d byte)" +msgid_plural "invalid WAL segment size in control file (%d bytes)" +msgstr[0] "taille invalide du segment WAL dans le fichier de contrôle (%d octet)" +msgstr[1] "taille invalide du segment WAL dans le fichier de contrôle (%d octets)" + +#: pg_controldata.c:185 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go." -#: pg_controldata.c:222 +#: pg_controldata.c:186 +#, c-format +msgid "The file is corrupt and the results below are untrustworthy." +msgstr "Le fichier est corrompu et il ne faut pas faire confiance aux résultats ci-dessous." + +#: pg_controldata.c:221 msgid "???" msgstr "???" -#: pg_controldata.c:228 +#: pg_controldata.c:227 #, c-format msgid "pg_control version number: %u\n" msgstr "Numéro de version de pg_control : %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:229 #, c-format msgid "Catalog version number: %u\n" msgstr "Numéro de version du catalogue : %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:231 #, c-format msgid "Database system identifier: %llu\n" msgstr "Identifiant du système de base de données : %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:233 #, c-format msgid "Database cluster state: %s\n" msgstr "État du cluster de base de données : %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:235 #, c-format msgid "pg_control last modified: %s\n" msgstr "Dernière modification de pg_control : %s\n" -#: pg_controldata.c:238 +#: pg_controldata.c:237 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Dernier point de contrôle : %X/%X\n" -#: pg_controldata.c:240 +#: pg_controldata.c:239 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Dernier REDO (reprise) du point de contrôle : %X/%X\n" -#: pg_controldata.c:242 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Dernier fichier WAL du rejeu du point de contrôle : %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:243 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Dernier TimeLineID du point de contrôle : %u\n" -#: pg_controldata.c:246 +#: pg_controldata.c:245 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Dernier PrevTimeLineID du point de contrôle : %u\n" -#: pg_controldata.c:248 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Dernier full_page_writes du point de contrôle : %s\n" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "off" msgstr "désactivé" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "on" msgstr "activé" -#: pg_controldata.c:250 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "Dernier NextXID du point de contrôle : %u:%u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "Dernier NextOID du point de contrôle : %u\n" -#: pg_controldata.c:255 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "Dernier NextMultiXactId du point de contrôle : %u\n" -#: pg_controldata.c:257 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "Dernier NextMultiOffset du point de contrôle : %u\n" -#: pg_controldata.c:259 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "Dernier oldestXID du point de contrôle : %u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "Dernier oldestXID du point de contrôle de la base : %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "Dernier oldestActiveXID du point de contrôle : %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "Dernier oldestMultiXid du point de contrôle : %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "Dernier oldestMulti du point de contrôle de la base : %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "Dernier oldestCommitTsXid du point de contrôle : %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "Dernier newestCommitTsXid du point de contrôle : %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:272 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Heure du dernier point de contrôle : %s\n" -#: pg_controldata.c:275 +#: pg_controldata.c:274 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Faux compteur LSN pour les relations non journalisés : %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:276 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Emplacement de fin de la récupération minimale : %X/%X\n" -#: pg_controldata.c:279 +#: pg_controldata.c:278 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Timeline de l'emplacement de fin de restauration : %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:280 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Début de la sauvegarde : %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:282 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Fin de la sauvegarde : %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:284 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Enregistrement de fin de sauvegarde requis : %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "no" msgstr "non" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "yes" msgstr "oui" -#: pg_controldata.c:287 +#: pg_controldata.c:286 #, c-format msgid "wal_level setting: %s\n" -msgstr "Paramètrage actuel de wal_level : %s\n" +msgstr "Paramétrage actuel de wal_level : %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:288 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "Paramétrage actuel de wal_log_hints : %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:290 #, c-format msgid "max_connections setting: %d\n" -msgstr "Paramètrage actuel de max_connections : %d\n" +msgstr "Paramétrage actuel de max_connections : %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:292 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "Paramétrage actuel de max_worker_processes : %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:294 #, c-format msgid "max_wal_senders setting: %d\n" -msgstr "Paramètrage actuel de max_wal_senders : %d\n" +msgstr "Paramétrage actuel de max_wal_senders : %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:296 #, c-format msgid "max_prepared_xacts setting: %d\n" -msgstr "Paramètrage actuel de max_prepared_xacts : %d\n" +msgstr "Paramétrage actuel de max_prepared_xacts : %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:298 #, c-format msgid "max_locks_per_xact setting: %d\n" -msgstr "Paramètrage actuel de max_locks_per_xact : %d\n" +msgstr "Paramétrage actuel de max_locks_per_xact : %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:300 #, c-format msgid "track_commit_timestamp setting: %s\n" -msgstr "Paramètrage actuel de track_commit_timestamp : %s\n" +msgstr "Paramétrage actuel de track_commit_timestamp : %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:302 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Alignement maximal des données : %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:305 #, c-format msgid "Database block size: %u\n" msgstr "Taille du bloc de la base de données : %u\n" -#: pg_controldata.c:308 +#: pg_controldata.c:307 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Blocs par segment des relations volumineuses : %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:309 #, c-format msgid "WAL block size: %u\n" msgstr "Taille de bloc du journal de transaction : %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:311 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Octets par segment du journal de transaction : %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:313 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Longueur maximale des identifiants : %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:315 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Nombre maximum de colonnes d'un index: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:317 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Longueur maximale d'un morceau TOAST : %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:319 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Taille d'un morceau de Large Object : %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:322 #, c-format msgid "Date/time type storage: %s\n" msgstr "Stockage du type date/heure : %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:323 msgid "64-bit integers" msgstr "entiers 64-bits" -#: pg_controldata.c:325 +#: pg_controldata.c:324 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Passage d'argument float8 : %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by reference" msgstr "par référence" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by value" msgstr "par valeur" -#: pg_controldata.c:327 +#: pg_controldata.c:326 #, c-format msgid "Data page checksum version: %u\n" msgstr "Version des sommes de contrôle des pages de données : %u\n" -#: pg_controldata.c:329 +#: pg_controldata.c:328 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Nonce pour simuler une identité: %s\n" - -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide et quitte\n" - -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version affiche la version et quitte\n" - -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » en lecture : %s\n" - -#~ msgid "%s: could not read file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu lire le fichier « %s » : %s\n" - -#~ msgid "%s: could not read file \"%s\": read %d of %d\n" -#~ msgstr "%s : n'a pas pu lire le fichier « %s » : a lu %d sur %d\n" - -#~ msgid "Float4 argument passing: %s\n" -#~ msgstr "Passage d'argument float4 : %s\n" - -#~ msgid "Prior checkpoint location: %X/%X\n" -#~ msgstr "Point de contrôle précédent : %X/%X\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" - -#, c-format -#~ msgid "Try \"%s --help\" for more information.\n" -#~ msgstr "Essayer « %s --help » pour plus d'informations.\n" - -#~ msgid "" -#~ "Usage:\n" -#~ " %s [OPTION] [DATADIR]\n" -#~ "\n" -#~ "Options:\n" -#~ " --help show this help, then exit\n" -#~ " --version output version information, then exit\n" -#~ msgstr "" -#~ "Usage :\n" -#~ " %s [OPTION] [RÉP_DONNÉES]\n" -#~ "\n" -#~ "Options :\n" -#~ " --help affiche cette aide et quitte\n" -#~ " --version affiche les informations de version et quitte\n" - -#~ msgid "calculated CRC checksum does not match value stored in file" -#~ msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier" - -#~ msgid "floating-point numbers" -#~ msgstr "nombres à virgule flottante" diff --git a/src/bin/pg_controldata/po/ja.po b/src/bin/pg_controldata/po/ja.po index 8da59bf47503a..6b9c5d7128af4 100644 --- a/src/bin/pg_controldata/po/ja.po +++ b/src/bin/pg_controldata/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL 17)\n" +"Project-Id-Version: pg_controldata (PostgreSQL 18)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-20 14:21+0900\n" -"PO-Revision-Date: 2024-05-20 16:33+0900\n" +"POT-Creation-Date: 2025-03-31 09:53+0900\n" +"PO-Revision-Date: 2025-03-31 16:28+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -70,6 +70,17 @@ msgstr "ファイル\"%s\"を書き出せませんでした: %m" msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "メモリ不足です\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "nullポインタは複製できません(内部エラー)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -171,325 +182,339 @@ msgstr "未知のステータスコード" msgid "unrecognized \"wal_level\"" msgstr "\"wal_level\"を認識できません" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 +#: pg_controldata.c:139 pg_controldata.c:157 pg_controldata.c:164 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: pg_controldata.c:154 +#: pg_controldata.c:155 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" -#: pg_controldata.c:162 +#: pg_controldata.c:163 #, c-format msgid "no data directory specified" msgstr "データディレクトリが指定されていません" -#: pg_controldata.c:171 +#: pg_controldata.c:172 #, c-format msgid "calculated CRC checksum does not match value stored in control file" msgstr "算出されたCRCチェックサムが制御ファイルに格納されている値と一致しません" -#: pg_controldata.c:172 +#: pg_controldata.c:173 #, c-format msgid "Either the control file is corrupt, or it has a different layout than this program is expecting. The results below are untrustworthy." msgstr "制御ファイルが破損しているか、このプログラムが期待していない配置になっています。以下の結果は信頼できません。" -#: pg_controldata.c:181 +#: pg_controldata.c:182 #, 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バイト)" -#: pg_controldata.c:185 +#: pg_controldata.c:186 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "WALセグメントサイズは1MBから1GBまでの間の2の累乗でなければなりません。" -#: pg_controldata.c:186 +#: pg_controldata.c:187 #, c-format msgid "The file is corrupt and the results below are untrustworthy." msgstr "このファイルは破損しており、以下の結果は信頼できません。" -#: pg_controldata.c:221 +#: pg_controldata.c:205 pg_controldata.c:213 pg_controldata.c:232 +#, c-format msgid "???" msgstr "???" -#: pg_controldata.c:227 +#: pg_controldata.c:238 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_controlバージョン番号: %u\n" -#: pg_controldata.c:229 +#: pg_controldata.c:240 #, c-format msgid "Catalog version number: %u\n" msgstr "カタログバージョン番号: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:242 #, c-format -msgid "Database system identifier: %llu\n" -msgstr "データベースシステム識別子: %llu\n" +msgid "Database system identifier: %\n" +msgstr "データベースシステム識別子: %\n" -#: pg_controldata.c:233 +#: pg_controldata.c:244 #, c-format msgid "Database cluster state: %s\n" msgstr "データベースクラスタの状態: %s\n" -#: pg_controldata.c:235 +#: pg_controldata.c:246 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control最終更新: %s\n" -#: pg_controldata.c:237 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "最終チェックポイント位置: %X/%X\n" -#: pg_controldata.c:239 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "最終チェックポイントのREDO位置: %X/%X\n" -#: pg_controldata.c:241 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "最終チェックポイントのREDO WALファイル: %s\n" -#: pg_controldata.c:243 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "最終チェックポイントの時系列ID: %u\n" -#: pg_controldata.c:245 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "最終チェックポイントのPrevTimeLineID: %u\n" -#: pg_controldata.c:247 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "最終チェックポイントのfull_page_writes: %s\n" -#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "off" msgstr "オフ" -#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "on" msgstr "オン" -#: pg_controldata.c:249 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "最終チェックポイントのNextXID: %u:%u\n" -#: pg_controldata.c:252 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "最終チェックポイントのNextOID: %u\n" -#: pg_controldata.c:254 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "最終チェックポイントのNextMultiXactId: %u\n" -#: pg_controldata.c:256 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "最終チェックポイントのNextMultiOffset: %u\n" -#: pg_controldata.c:258 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "最終チェックポイントのoldestXID: %u\n" -#: pg_controldata.c:260 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "最終チェックポイントのoldestXIDのDB: %u\n" -#: pg_controldata.c:262 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "最終チェックポイントのoldestActiveXID: %u\n" -#: pg_controldata.c:264 +#: pg_controldata.c:275 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "最終チェックポイントのoldestMultiXid: %u\n" -#: pg_controldata.c:266 +#: pg_controldata.c:277 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "最終チェックポイントのoldestMultiのDB: %u\n" -#: pg_controldata.c:268 +#: pg_controldata.c:279 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "最終チェックポイントのoldestCommitTsXid: %u\n" -#: pg_controldata.c:270 +#: pg_controldata.c:281 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "最終チェックポイントのnewestCommitTsXid: %u\n" -#: pg_controldata.c:272 +#: pg_controldata.c:283 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "最終チェックポイント時刻: %s\n" -#: pg_controldata.c:274 +#: pg_controldata.c:285 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "UNLOGGEDリレーションの偽のLSNカウンタ: %X/%X\n" -#: pg_controldata.c:276 +#: pg_controldata.c:287 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "最小リカバリ終了位置: %X/%X\n" -#: pg_controldata.c:278 +#: pg_controldata.c:289 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "最小リカバリ終了位置のタイムライン: %u\n" -#: pg_controldata.c:280 +#: pg_controldata.c:291 #, c-format msgid "Backup start location: %X/%X\n" msgstr "バックアップ開始位置: %X/%X\n" -#: pg_controldata.c:282 +#: pg_controldata.c:293 #, c-format msgid "Backup end location: %X/%X\n" msgstr "バックアップ終了位置: %X/%X\n" -#: pg_controldata.c:284 +#: pg_controldata.c:295 #, c-format msgid "End-of-backup record required: %s\n" msgstr "必要なバックアップ最終レコード: %s\n" -#: pg_controldata.c:285 +#: pg_controldata.c:296 msgid "no" msgstr "いいえ" -#: pg_controldata.c:285 +#: pg_controldata.c:296 msgid "yes" msgstr "はい" -#: pg_controldata.c:286 +#: pg_controldata.c:297 #, c-format msgid "wal_level setting: %s\n" msgstr "wal_levelの設定: %s\n" -#: pg_controldata.c:288 +#: pg_controldata.c:299 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "wal_log_hintsの設定: %s\n" -#: pg_controldata.c:290 +#: pg_controldata.c:301 #, c-format msgid "max_connections setting: %d\n" msgstr "max_connectionsの設定: %d\n" -#: pg_controldata.c:292 +#: pg_controldata.c:303 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "max_worker_processesの設定: %d\n" -#: pg_controldata.c:294 +#: pg_controldata.c:305 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "max_wal_sendersの設定: %d\n" -#: pg_controldata.c:296 +#: pg_controldata.c:307 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "max_prepared_xactsの設定: %d\n" -#: pg_controldata.c:298 +#: pg_controldata.c:309 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "max_locks_per_xactの設定: %d\n" -#: pg_controldata.c:300 +#: pg_controldata.c:311 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "track_commit_timestampの設定: %s\n" -#: pg_controldata.c:302 +#: pg_controldata.c:313 #, c-format msgid "Maximum data alignment: %u\n" msgstr "最大データアラインメント: %u\n" -#: pg_controldata.c:305 +#: pg_controldata.c:316 #, c-format msgid "Database block size: %u\n" msgstr "データベースのブロックサイズ: %u\n" -#: pg_controldata.c:307 +#: pg_controldata.c:318 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "大きなリレーションのセグメント毎のブロック数:%u\n" -#: pg_controldata.c:309 +#: pg_controldata.c:320 #, c-format msgid "WAL block size: %u\n" msgstr "WALのブロックサイズ: %u\n" -#: pg_controldata.c:311 +#: pg_controldata.c:322 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "WALセグメント当たりのバイト数: %u\n" -#: pg_controldata.c:313 +#: pg_controldata.c:324 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "識別子の最大長: %u\n" -#: pg_controldata.c:315 +#: pg_controldata.c:326 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "インデックス内の最大列数: %u\n" -#: pg_controldata.c:317 +#: pg_controldata.c:328 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOASTチャンクの最大サイズ: %u\n" -#: pg_controldata.c:319 +#: pg_controldata.c:330 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "ラージオブジェクトチャンクのサイズ: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:333 #, c-format msgid "Date/time type storage: %s\n" msgstr "日付/時刻型の格納方式: %s\n" -#: pg_controldata.c:323 +#: pg_controldata.c:334 msgid "64-bit integers" msgstr "64ビット整数" -#: pg_controldata.c:324 +#: pg_controldata.c:335 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Float8引数の渡し方: %s\n" -#: pg_controldata.c:325 +#: pg_controldata.c:336 msgid "by reference" msgstr "参照渡し" -#: pg_controldata.c:325 +#: pg_controldata.c:336 msgid "by value" msgstr "値渡し" -#: pg_controldata.c:326 +#: pg_controldata.c:337 #, c-format msgid "Data page checksum version: %u\n" msgstr "データベージチェックサムのバージョン: %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:339 +#, c-format +msgid "Default char data signedness: %s\n" +msgstr "デフォルトのchar型の符号あり/なし: %s\n" + +#: pg_controldata.c:340 +msgid "signed" +msgstr "signed" + +#: pg_controldata.c:340 +msgid "unsigned" +msgstr "unsigned" + +#: pg_controldata.c:341 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "認証用の疑似nonce: %s\n" diff --git a/src/bin/pg_controldata/po/ka.po b/src/bin/pg_controldata/po/ka.po index 94bb60ceebc99..fe23c53667b11 100644 --- a/src/bin/pg_controldata/po/ka.po +++ b/src/bin/pg_controldata/po/ka.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL) 17\n" +"Project-Id-Version: pg_controldata (PostgreSQL) 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-18 22:23+0000\n" -"PO-Revision-Date: 2024-05-19 07:11+0200\n" +"POT-Creation-Date: 2025-03-29 21:24+0000\n" +"PO-Revision-Date: 2025-03-30 01:29+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" #: ../../common/controldata_utils.c:97 #, c-format @@ -69,6 +69,17 @@ msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" msgid "could not fsync file \"%s\": %m" msgstr "ფაილის (%s) fsync-ის შეცდომა: %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "არასაკმარისი მეხსიერება\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "ნულოვანი მაჩვენებლის დუბლირება შეუძლებელია (შიდა შეცდომა)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -170,326 +181,340 @@ msgstr "სტატუსის უცნობი კოდი" msgid "unrecognized \"wal_level\"" msgstr "უცნობი \"wal_level\"" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 +#: pg_controldata.c:139 pg_controldata.c:157 pg_controldata.c:164 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: pg_controldata.c:154 +#: pg_controldata.c:155 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "მეტისმეტად ბევრი ბრძანების-სტრიქონის არგუმენტი (პირველია \"%s\")" -#: pg_controldata.c:162 +#: pg_controldata.c:163 #, c-format msgid "no data directory specified" msgstr "მონაცემების საქაღალდე მითითებული არაა" -#: pg_controldata.c:171 +#: pg_controldata.c:172 #, c-format msgid "calculated CRC checksum does not match value stored in control file" msgstr "გამოთვლილი CRC საკონტროლო ჯამი კონტროლის ფაილში დამახსოვრებულ მნიშვნელობას არ ემთხვევა" -#: pg_controldata.c:172 +#: pg_controldata.c:173 #, c-format msgid "Either the control file is corrupt, or it has a different layout than this program is expecting. The results below are untrustworthy." msgstr "ან კონტროლი ფაილი დაზიანებულია, ან გააჩნია იმისგან განსხვავებული განლაგება, ვიდრე ამას პროგრამა მოელოდა. ქვემო შედეგები სანდო არაა." -#: pg_controldata.c:181 +#: pg_controldata.c:182 #, 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 ბაიტი)" -#: pg_controldata.c:185 +#: pg_controldata.c:186 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "WAL სეგმენტის ზომა ორის ხარისხი უნდა იყოს, შუალედიდან 1მბ-1გბ." -#: pg_controldata.c:186 +#: pg_controldata.c:187 #, c-format msgid "The file is corrupt and the results below are untrustworthy." msgstr "ფაილი დაზიანებულია და ქვემო შედეგები სანდო არაა." -#: pg_controldata.c:221 +#: pg_controldata.c:205 pg_controldata.c:213 pg_controldata.c:232 +#, c-format msgid "???" msgstr "???" -#: pg_controldata.c:227 +#: pg_controldata.c:238 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control ვერსიის ნომერი: %u\n" -#: pg_controldata.c:229 +#: pg_controldata.c:240 #, c-format msgid "Catalog version number: %u\n" msgstr "კატალოგის ვერსიის ნომერი: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:242 #, c-format -msgid "Database system identifier: %llu\n" -msgstr "ბაზის სისტემური იდენტიფიკატორი: %llu\n" +msgid "Database system identifier: %\n" +msgstr "ბაზის სისტემური იდენტიფიკატორი: %\n" -#: pg_controldata.c:233 +#: pg_controldata.c:244 #, c-format msgid "Database cluster state: %s\n" msgstr "ბაზის კლასტერის მდგომარეობა: %s\n" -#: pg_controldata.c:235 +#: pg_controldata.c:246 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control-ის ბოლო ცვლილების დრო: %s\n" -#: pg_controldata.c:237 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "საკონტროლო წერტილის უკანასკნელი მდებარეობა: %X/%X\n" -#: pg_controldata.c:239 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "საკონტროლო წერტილის REDO-ის უკანასკნელი მდებარეობა: %X/%X\n" -#: pg_controldata.c:241 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "უკანასკნელი საკონტროლო წერტილის REDO WAL ფაილი: %s\n" -#: pg_controldata.c:243 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "უახლესი საკონტროლო წერტილისTimeLineID: %u\n" -#: pg_controldata.c:245 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "უახლესი საკონტროლო წერტილის PrevTimeLineID: %u\n" -#: pg_controldata.c:247 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "უახლესი უკანასკნელი საკონტროლო წერტილის full_page_writes: %s\n" -#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "off" msgstr "გამორთული" -#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "on" msgstr "ჩართ" -#: pg_controldata.c:249 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "უახლესი საკონტროლო წერტილის NextXID: %u:%u\n" -#: pg_controldata.c:252 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "უახლესი საკონტროლო წერტილის NextOID: %u\n" -#: pg_controldata.c:254 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "უახლესი საკონტროლო წერტილის NextMultiXactId: %u\n" -#: pg_controldata.c:256 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "უახლესი საკონტროლო წერტილის NextMultiOffset: %u\n" -#: pg_controldata.c:258 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "უახლესი საკონტროლო წერტილის oldestXID: %u\n" -#: pg_controldata.c:260 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "უახლესი საკონტროლო წერტილის oldestXID's DB: %u\n" -#: pg_controldata.c:262 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "უახლესი საკონტროლო წერტილის oldestActiveXID: %u\n" -#: pg_controldata.c:264 +#: pg_controldata.c:275 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "უახლესი საკონტროლო წერტილის oldestMultiXid: %u\n" -#: pg_controldata.c:266 +#: pg_controldata.c:277 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "უახლესი საკონტროლო წერტილის oldestMulti's DB: %u\n" -#: pg_controldata.c:268 +#: pg_controldata.c:279 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "უახლესი საკონტროლო წერტილის oldestCommitTsXid:%u\n" -#: pg_controldata.c:270 +#: pg_controldata.c:281 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "უახლესი საკონტროლო წერტილის newestCommitTsXid:%u\n" -#: pg_controldata.c:272 +#: pg_controldata.c:283 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "უახლესი საკონტოლო წერტილის დრო: %s\n" -#: pg_controldata.c:274 +#: pg_controldata.c:285 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "LSN-ის ყალბი მთვლელი არაჟურნალიზებადი ურთ-თვის: %X/%X\n" -#: pg_controldata.c:276 +#: pg_controldata.c:287 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "მინიმალური აღდგენის დასასრულის მდებარეობა %X/%X\n" -#: pg_controldata.c:278 +#: pg_controldata.c:289 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "მინ. აღდგ დასასრ მდებარ დროის ხაზი: %u\n" -#: pg_controldata.c:280 +#: pg_controldata.c:291 #, c-format msgid "Backup start location: %X/%X\n" msgstr "მარქაფის დაწყების მდებარეობა: %X/%X\n" -#: pg_controldata.c:282 +#: pg_controldata.c:293 #, c-format msgid "Backup end location: %X/%X\n" msgstr "მარქაფს დასასრულის მდებარეობა: %X/%X\n" -#: pg_controldata.c:284 +#: pg_controldata.c:295 #, c-format msgid "End-of-backup record required: %s\n" msgstr "მარქაფის-ბოლო ჩანაწერი აუცილებელია: %s\n" -#: pg_controldata.c:285 +#: pg_controldata.c:296 msgid "no" msgstr "არა" -#: pg_controldata.c:285 +#: pg_controldata.c:296 msgid "yes" msgstr "დიახ" -#: pg_controldata.c:286 +#: pg_controldata.c:297 #, c-format msgid "wal_level setting: %s\n" msgstr "wal_level პარამეტრი: %s\n" -#: pg_controldata.c:288 +#: pg_controldata.c:299 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "wal_log_hints პარამეტრი: %s\n" -#: pg_controldata.c:290 +#: pg_controldata.c:301 #, c-format msgid "max_connections setting: %d\n" msgstr "max_connections პარამეტრი: %d\n" -#: pg_controldata.c:292 +#: pg_controldata.c:303 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "max_worker_processes პარამეტრი: %d\n" -#: pg_controldata.c:294 +#: pg_controldata.c:305 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "max_wal_senders პარამეტრი: %d\n" -#: pg_controldata.c:296 +#: pg_controldata.c:307 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "max_prepared_xacts პარამეტრი: %d\n" -#: pg_controldata.c:298 +#: pg_controldata.c:309 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "max_locks_per_xact პარამეტრი: %d\n" -#: pg_controldata.c:300 +#: pg_controldata.c:311 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "track_commit_timestamp პარამეტრი: %s\n" -#: pg_controldata.c:302 +#: pg_controldata.c:313 #, c-format msgid "Maximum data alignment: %u\n" msgstr "მონაცემების სწორების მაქსიმუმი: %u\n" -#: pg_controldata.c:305 +#: pg_controldata.c:316 #, c-format msgid "Database block size: %u\n" msgstr "ბაზის ბლოკის ზომა: %u\n" -#: pg_controldata.c:307 +#: pg_controldata.c:318 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "დიდი ურთიერთობის სეგმენტები თითოეულ ბლოკში: %u\n" -#: pg_controldata.c:309 +#: pg_controldata.c:320 #, c-format msgid "WAL block size: %u\n" msgstr "WAL ბლოკის ზომა: %u\n" -#: pg_controldata.c:311 +#: pg_controldata.c:322 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "ბაიტები თითოეულ WAL სეგმენტში: %u\n" -#: pg_controldata.c:313 +#: pg_controldata.c:324 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "იდენტიფიკატორების მაქსიმალური სიგრძე: %u\n" -#: pg_controldata.c:315 +#: pg_controldata.c:326 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "ინდექსში სვეტების მაქსიმალური რაოდენობა: %u\n" -#: pg_controldata.c:317 +#: pg_controldata.c:328 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOAST ნაგლეჯის მაქსიმალური ზომა: %u\n" -#: pg_controldata.c:319 +#: pg_controldata.c:330 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "დიდი ობიექტის ნაგლეჯის ზომა: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:333 #, c-format msgid "Date/time type storage: %s\n" msgstr "თარიღის ტიპის საცავი: %s\n" -#: pg_controldata.c:323 +#: pg_controldata.c:334 msgid "64-bit integers" msgstr "64-ბიტიანი მთელ რიცხვები" -#: pg_controldata.c:324 +#: pg_controldata.c:335 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Float8 არგუმენტის გადაცემა: %s\n" -#: pg_controldata.c:325 +#: pg_controldata.c:336 msgid "by reference" msgstr "ბმით" -#: pg_controldata.c:325 +#: pg_controldata.c:336 msgid "by value" msgstr "მნიშვნელობით" -#: pg_controldata.c:326 +#: pg_controldata.c:337 #, c-format msgid "Data page checksum version: %u\n" msgstr "მონაცემების გვერდის საკონტროლო ჯამის ვერსია: %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:339 +#, c-format +msgid "Default char data signedness: %s\n" +msgstr "ნაგულისხმევი სტრიქონის მონაცემების ნიშნიანობა: %s\n" + +#: pg_controldata.c:340 +msgid "signed" +msgstr "ნიშნიანი" + +#: pg_controldata.c:340 +msgid "unsigned" +msgstr "უნიშნო" + +#: pg_controldata.c:341 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "ფსევდოავთენტიკაციის შემთხვევითი რიცხვი: %s\n" diff --git a/src/bin/pg_controldata/po/ko.po b/src/bin/pg_controldata/po/ko.po index 4b40dca65e0dc..b753d7e93c13c 100644 --- a/src/bin/pg_controldata/po/ko.po +++ b/src/bin/pg_controldata/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL) 16\n" +"Project-Id-Version: pg_controldata (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:52+0000\n" -"PO-Revision-Date: 2023-05-30 12:38+0900\n" +"POT-Creation-Date: 2025-01-17 04:53+0000\n" +"PO-Revision-Date: 2025-01-16 15:43+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,31 +15,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../common/controldata_utils.c:73 +#: ../../common/controldata_utils.c:97 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "\"%s\" 파일을 읽기 모드로 열 수 없습니다: %m" -#: ../../common/controldata_utils.c:86 +#: ../../common/controldata_utils.c:110 #, c-format msgid "could not read file \"%s\": %m" msgstr "\"%s\" 파일을 읽을 수 없습니다: %m" -#: ../../common/controldata_utils.c:95 +#: ../../common/controldata_utils.c:119 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %zu" -#: ../../common/controldata_utils.c:108 ../../common/controldata_utils.c:236 +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 #, c-format msgid "could not close file \"%s\": %m" msgstr "\"%s\" 파일을 닫을 수 없습니다: %m" -#: ../../common/controldata_utils.c:124 +#: ../../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "바이트 순서 불일치" -#: ../../common/controldata_utils.c:126 +#: ../../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -48,26 +48,38 @@ msgid "" "and\n" "the PostgreSQL installation would be incompatible with this data directory." msgstr "" -"바이트 순서가 일치하지 않습니다.\n" -"pg_control 파일을 저장하는 데 사용된 바이트 순서는 \n" -"이 프로그램에서 사용하는 순서와 일치해야 합니다. 이 경우 아래 결과는\n" -"올바르지 않으며 이 데이터 디렉터리에 PostgreSQL을 설치할 수 없습니다." +"바이트 순서 일치하지 않는 문제\n" +"바이트 순서 정보는 pg_control 파일을 저장할 때 사용되는데,\n" +"이 파일의 바이트 순서 정보와 이 프로그램에서 사용하는 순서 정보가 다릅니다.\n" +"이럴 경우, 출력 결과가 바르지 않을 수 있고,\n" +"설치된 PostgreSQL 프로그램과 데이터 디렉터리가 호환되지 않을 수 있습니다." -#: ../../common/controldata_utils.c:186 +#: ../../common/controldata_utils.c:230 #, c-format msgid "could not open file \"%s\": %m" msgstr "\"%s\" 파일을 읽을 수 없습니다: %m" -#: ../../common/controldata_utils.c:205 +#: ../../common/controldata_utils.c:249 #, c-format msgid "could not write file \"%s\": %m" msgstr "\"%s\" 파일을 쓸 수 없습니다: %m" -#: ../../common/controldata_utils.c:224 +#: ../../common/controldata_utils.c:268 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "\"%s\" 파일을 fsync 할 수 없습니다: %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "널 포인터를 중복할 수 없음 (내부 오류)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -168,8 +180,8 @@ msgid "unrecognized status code" msgstr "알수 없는 상태 코드" #: pg_controldata.c:84 -msgid "unrecognized wal_level" -msgstr "알 수 없는 wal_level" +msgid "unrecognized \"wal_level\"" +msgstr "알 수 없는 \"wal_level\"" #: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 #, c-format @@ -186,319 +198,334 @@ msgstr "너무 많은 명령행 인수를 지정했습니다. (처음 \"%s\")" msgid "no data directory specified" msgstr "데이터 디렉터리를 지정하지 않았습니다" -#: pg_controldata.c:170 +#: pg_controldata.c:171 +#, c-format +msgid "calculated CRC checksum does not match value stored in control file" +msgstr "계산된 CRC 체크섬 값과 컨트롤 파일에 저장된 값이 다름" + +#: pg_controldata.c:172 #, c-format msgid "" -"WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" -"is expecting. The results below are untrustworthy.\n" -"\n" +"Either the control file is corrupt, or it has a different layout than this " +"program is expecting. The results below are untrustworthy." msgstr "" -"경고: 계산된 CRC 체크섬값이 파일에 있는 값과 틀립니다.\n" -"이 경우는 파일이 손상되었거나, 이 프로그램과 컨트롤 파일의 버전이 틀린\n" -"경우입니다. 결과값들은 믿지 못할 값들이 출력될 수 있습니다.\n" -"\n" +"이 경우는 컨트롤 파일이 손상되었거나, 이 프로그램과 컨트롤 파일의 버전이 틀" +"린 경우입니다. 결과값들은 믿지 못할 값들이 출력될 수 있습니다." -#: pg_controldata.c:179 +#: pg_controldata.c:181 #, c-format -msgid "WARNING: invalid WAL segment size\n" -msgstr "경고: 잘못된 WAL 조각 크기\n" +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 바이트)" -#: pg_controldata.c:180 +#: pg_controldata.c:185 #, c-format -msgid "" -"The WAL segment size stored in the file, %d byte, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgid_plural "" -"The WAL segment size stored in the file, %d bytes, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgstr[0] "" -"저장된 WAL 조각 파일의 크기는 %d 바이트입니다. 이 값은 1MB부터 1GB사이\n" -"2^n 값이 아닙니다. 파일이 손상되었으며, 결과 또한 믿을 수 없습니다.\n" -"\n" +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "WAL 조각 파일 크기는 1MB에서 1GB사이 2의 제곱값이어야 합니다." -#: pg_controldata.c:222 +#: pg_controldata.c:186 +#, c-format +msgid "The file is corrupt and the results below are untrustworthy." +msgstr "이 파일이 깨져서 신뢰할 수 없는 결과값이 출력됩니다." + +#: pg_controldata.c:221 msgid "???" msgstr "???" -#: pg_controldata.c:228 +#: pg_controldata.c:227 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control 버전 번호: %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:229 #, c-format msgid "Catalog version number: %u\n" msgstr "카탈로그 버전 번호: %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:231 #, c-format msgid "Database system identifier: %llu\n" msgstr "데이터베이스 시스템 식별자: %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:233 #, c-format msgid "Database cluster state: %s\n" msgstr "데이터베이스 클러스터 상태: %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:235 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control 마지막 변경시간: %s\n" -#: pg_controldata.c:238 +#: pg_controldata.c:237 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "마지막 체크포인트 위치: %X/%X\n" -#: pg_controldata.c:240 +#: pg_controldata.c:239 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "마지막 체크포인트 REDO 위치: %X/%X\n" -#: pg_controldata.c:242 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "마지막 체크포인트 REDO WAL 파일: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:243 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "마지막 체크포인트 TimeLineID: %u\n" -#: pg_controldata.c:246 +#: pg_controldata.c:245 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "마지막 체크포인트 PrevTimeLineID: %u\n" -#: pg_controldata.c:248 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "마지막 체크포인트 full_page_writes: %s\n" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "off" msgstr "off" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "on" msgstr "on" -#: pg_controldata.c:250 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "마지막 체크포인트 NextXID: %u:%u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "마지막 체크포인트 NextOID: %u\n" -#: pg_controldata.c:255 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "마지막 체크포인트 NextMultiXactId: %u\n" -#: pg_controldata.c:257 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "마지막 체크포인트 NextMultiOffset: %u\n" -#: pg_controldata.c:259 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "마지막 체크포인트 제일오래된XID: %u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "마지막 체크포인트 제일오래된XID의 DB: %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "마지막 체크포인트 제일오래된ActiveXID:%u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "마지막 체크포인트 제일오래된MultiXid: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "마지막 체크포인트 제일오래된멀티Xid DB:%u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "마지막 체크포인트 제일오래된CommitTsXid:%u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "마지막 체크포인트 최신CommitTsXid: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:272 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "마지막 체크포인트 시간: %s\n" -#: pg_controldata.c:275 +#: pg_controldata.c:274 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "언로그 릴레이션의 가짜 LSN 카운터: %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:276 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "최소 복구 마지막 위치: %X/%X\n" -#: pg_controldata.c:279 +#: pg_controldata.c:278 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "최소 복구 종료 위치의 타임라인: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:280 #, c-format msgid "Backup start location: %X/%X\n" msgstr "백업 시작 위치: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:282 #, c-format msgid "Backup end location: %X/%X\n" msgstr "백업 종료 위치: %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:284 #, c-format msgid "End-of-backup record required: %s\n" msgstr "백업 종료 레코드 필요 여부: %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "no" msgstr "아니오" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "yes" msgstr "예" -#: pg_controldata.c:287 +#: pg_controldata.c:286 #, c-format msgid "wal_level setting: %s\n" msgstr "wal_level 설정값: %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:288 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "wal_log_hints 설정값: %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:290 #, c-format msgid "max_connections setting: %d\n" msgstr "max_connections 설정값: %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:292 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "max_worker_processes 설정값: %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:294 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "max_wal_senders 설정값: %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:296 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "max_prepared_xacts 설정값: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:298 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "max_locks_per_xact 설정값: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:300 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "track_commit_timestamp 설정값: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:302 #, c-format msgid "Maximum data alignment: %u\n" msgstr "최대 자료 정렬: %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:305 #, c-format msgid "Database block size: %u\n" msgstr "데이터베이스 블록 크기: %u\n" -#: pg_controldata.c:308 +#: pg_controldata.c:307 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "대형 릴레이션의 세그먼트당 블럭 개수: %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:309 #, c-format msgid "WAL block size: %u\n" msgstr "WAL 블록 크기: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:311 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "WAL 세그먼트의 크기(byte): %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:313 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "식별자 최대 길이: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:315 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "인덱스에서 사용하는 최대 열 수: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:317 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOAST 청크 최대 크기: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:319 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "대형 객체 청크 크기: %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:322 #, c-format msgid "Date/time type storage: %s\n" msgstr "날짜/시간형 자료의 저장방식: %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:323 msgid "64-bit integers" msgstr "64-비트 정수" -#: pg_controldata.c:325 +#: pg_controldata.c:324 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Float8 인수 전달: %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by reference" msgstr "참조별" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by value" msgstr "값별" -#: pg_controldata.c:327 +#: pg_controldata.c:326 #, c-format msgid "Data page checksum version: %u\n" msgstr "데이터 페이지 체크섬 버전: %u\n" -#: pg_controldata.c:329 +#: pg_controldata.c:328 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "임시 모의 인증: %s\n" + +#, c-format +#~ msgid "WARNING: invalid WAL segment size\n" +#~ msgstr "경고: 잘못된 WAL 조각 크기\n" + +#, c-format +#~ msgid "" +#~ "The WAL segment size stored in the file, %d byte, is not a power of two\n" +#~ "between 1 MB and 1 GB. The file is corrupt and the results below are\n" +#~ "untrustworthy.\n" +#~ "\n" +#~ msgid_plural "" +#~ "The WAL segment size stored in the file, %d bytes, is not a power of two\n" +#~ "between 1 MB and 1 GB. The file is corrupt and the results below are\n" +#~ "untrustworthy.\n" +#~ "\n" +#~ msgstr[0] "" +#~ "저장된 WAL 조각 파일의 크기는 %d 바이트입니다. 이 값은 1MB부터 1GB사이\n" +#~ "2^n 값이 아닙니다. 파일이 손상되었으며, 결과 또한 믿을 수 없습니다.\n" +#~ "\n" diff --git a/src/bin/pg_controldata/po/ru.po b/src/bin/pg_controldata/po/ru.po index 430ec929eed2c..5197e06cc71d3 100644 --- a/src/bin/pg_controldata/po/ru.po +++ b/src/bin/pg_controldata/po/ru.po @@ -4,13 +4,13 @@ # Serguei A. Mokhov , 2002-2004. # Oleg Bartunov , 2004. # Andrey Sudnik , 2011. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-11-03 09:08+0300\n" -"PO-Revision-Date: 2022-09-05 13:34+0300\n" +"POT-Creation-Date: 2025-02-08 07:44+0200\n" +"PO-Revision-Date: 2024-09-04 17:08+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -20,31 +20,31 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../common/controldata_utils.c:83 +#: ../../common/controldata_utils.c:97 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" -#: ../../common/controldata_utils.c:96 +#: ../../common/controldata_utils.c:110 #, c-format msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: ../../common/controldata_utils.c:105 +#: ../../common/controldata_utils.c:119 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" -#: ../../common/controldata_utils.c:118 ../../common/controldata_utils.c:266 +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 #, c-format msgid "could not close file \"%s\": %m" msgstr "не удалось закрыть файл \"%s\": %m" -#: ../../common/controldata_utils.c:154 +#: ../../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "несоответствие порядка байт" -#: ../../common/controldata_utils.c:156 +#: ../../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -58,21 +58,32 @@ msgstr "" "этой программой. В этом случае результаты будут неверными и\n" "установленный PostgreSQL будет несовместим с этим каталогом данных." -#: ../../common/controldata_utils.c:216 +#: ../../common/controldata_utils.c:230 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: ../../common/controldata_utils.c:235 +#: ../../common/controldata_utils.c:249 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" -#: ../../common/controldata_utils.c:254 +#: ../../common/controldata_utils.c:268 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -173,378 +184,398 @@ msgid "unrecognized status code" msgstr "нераспознанный код состояния" #: pg_controldata.c:84 -msgid "unrecognized wal_level" -msgstr "нераспознанный уровень WAL" +msgid "unrecognized \"wal_level\"" +msgstr "нераспознанное значение \"wal_level\"" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 +#: pg_controldata.c:139 pg_controldata.c:157 pg_controldata.c:164 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: pg_controldata.c:154 +#: pg_controldata.c:155 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_controldata.c:162 +#: pg_controldata.c:163 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: pg_controldata.c:170 +#: pg_controldata.c:172 +#, c-format +msgid "calculated CRC checksum does not match value stored in control file" +msgstr "" +"вычисленная контрольная сумма (CRC) не соответствует значению, сохранённому " +"в управляющем файле" + +#: pg_controldata.c:173 #, c-format msgid "" -"WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" -"is expecting. The results below are untrustworthy.\n" -"\n" +"Either the control file is corrupt, or it has a different layout than this " +"program is expecting. The results below are untrustworthy." msgstr "" -"ПРЕДУПРЕЖДЕНИЕ: Вычисленная контрольная сумма не совпадает со значением в " -"файле.\n" -"Либо файл повреждён, либо его формат отличается от ожидаемого.\n" -"Следующая информация может быть недостоверной.\n" -"\n" +"Либо управляющий файл повреждён, либо его структура отличается от ожидаемой. " +"Следующая информация может быть недостоверной." -#: pg_controldata.c:179 +#: pg_controldata.c:182 #, c-format -msgid "WARNING: invalid WAL segment size\n" -msgstr "ПРЕДУПРЕЖДЕНИЕ: неверный размер сегмента WAL\n" +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 Б)" +msgstr[2] "управляющий файл содержит неверный размер сегмента WAL (%d Б)" -#: pg_controldata.c:180 +#: pg_controldata.c:186 #, c-format -msgid "" -"The WAL segment size stored in the file, %d byte, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgid_plural "" -"The WAL segment size stored in the file, %d bytes, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgstr[0] "" -"Сохранённый в этом файле размер сегмента WAL (байт: %d) не является " -"степенью\n" -"двух между 1 МБ и 1 ГБ. Файл испорчен, выводимая ниже информация\n" -"подлежит сомнению.\n" -"\n" -msgstr[1] "" -"Сохранённый в этом файле размер сегмента WAL (байт: %d) не является " -"степенью\n" -"двух между 1 МБ и 1 ГБ. Файл испорчен, выводимая ниже информация\n" -"подлежит сомнению.\n" -"\n" -msgstr[2] "" -"Сохранённый в этом файле размер сегмента WAL (байт: %d) не является " -"степенью\n" -"двух между 1 МБ и 1 ГБ. Файл испорчен, выводимая ниже информация\n" -"подлежит сомнению.\n" -"\n" +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "" +"Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 ГБ." -#: pg_controldata.c:222 +#: pg_controldata.c:187 +#, c-format +msgid "The file is corrupt and the results below are untrustworthy." +msgstr "Файл испорчен, поэтому следующая информация не является достоверной." + +#: pg_controldata.c:205 pg_controldata.c:213 pg_controldata.c:232 +#, c-format msgid "???" msgstr "???" -#: pg_controldata.c:228 +#: pg_controldata.c:238 #, c-format msgid "pg_control version number: %u\n" msgstr "Номер версии pg_control: %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:240 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версии каталога: %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:242 #, c-format msgid "Database system identifier: %llu\n" msgstr "Идентификатор системы баз данных: %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:244 #, c-format msgid "Database cluster state: %s\n" msgstr "Состояние кластера БД: %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:246 #, c-format msgid "pg_control last modified: %s\n" msgstr "Последнее обновление pg_control: %s\n" # skip-rule: capital-letter-first -#: pg_controldata.c:238 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Положение последней конт. точки: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:240 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Положение REDO последней конт. точки: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:242 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Файл WAL c REDO последней к. т.: %s\n" # skip-rule: capital-letter-first -#: pg_controldata.c:244 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Линия времени последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:246 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Пред. линия времени последней к. т.: %u\n" # skip-rule: no-space-after-period -#: pg_controldata.c:248 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Режим full_page_writes последней к.т: %s\n" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "off" msgstr "выкл." -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:259 pg_controldata.c:300 pg_controldata.c:312 msgid "on" msgstr "вкл." # skip-rule: capital-letter-first -#: pg_controldata.c:250 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID последней конт. точки: %u:%u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:253 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:255 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:257 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:259 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:261 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "БД с oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:263 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID последней к. т.: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:265 +#: pg_controldata.c:275 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid последней конт. точки: %u\n" # skip-rule: double-space, capital-letter-first -#: pg_controldata.c:267 +#: pg_controldata.c:277 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "БД с oldestMulti последней к. т.: %u\n" # skip-rule: double-space, capital-letter-first -#: pg_controldata.c:269 +#: pg_controldata.c:279 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid последней к. т.: %u\n" # skip-rule: capital-letter-first, double-space -#: pg_controldata.c:271 +#: pg_controldata.c:281 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid последней к. т.: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:283 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Время последней контрольной точки: %s\n" # skip-rule: capital-letter-first # well-spelled: нежурналир -#: pg_controldata.c:275 +#: pg_controldata.c:285 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Фиктивный LSN для нежурналир. таблиц: %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:287 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Мин. положение конца восстановления: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:279 +#: pg_controldata.c:289 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Линия времени мин. положения к. в.: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:291 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Положение начала копии: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:293 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Положение конца копии: %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:295 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Требуется запись конец-копии: %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:296 msgid "no" msgstr "нет" -#: pg_controldata.c:286 +#: pg_controldata.c:296 msgid "yes" msgstr "да" -#: pg_controldata.c:287 +#: pg_controldata.c:297 #, c-format msgid "wal_level setting: %s\n" msgstr "Значение wal_level: %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:299 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "Значение wal_log_hints: %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:301 #, c-format msgid "max_connections setting: %d\n" msgstr "Значение max_connections: %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:303 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "Значение max_worker_processes: %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:305 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "Значение max_wal_senders: %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:307 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "Значение max_prepared_xacts: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:309 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "Значение max_locks_per_xact: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:311 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "Значение track_commit_timestamp: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:313 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Макс. предел выравнивания данных: %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:316 #, c-format msgid "Database block size: %u\n" msgstr "Размер блока БД: %u\n" # skip-rule: double-space -#: pg_controldata.c:308 +#: pg_controldata.c:318 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоков в макс. сегменте отношений: %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:320 #, c-format msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:322 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:324 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальная длина идентификаторов: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:326 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Макс. число столбцов в индексе: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:328 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальный размер порции TOAST: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:330 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Размер порции большого объекта: %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:333 #, c-format msgid "Date/time type storage: %s\n" msgstr "Формат хранения даты/времени: %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:334 msgid "64-bit integers" msgstr "64-битные целые" -#: pg_controldata.c:325 +#: pg_controldata.c:335 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Передача аргумента float8: %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:336 msgid "by reference" msgstr "по ссылке" -#: pg_controldata.c:326 +#: pg_controldata.c:336 msgid "by value" msgstr "по значению" -#: pg_controldata.c:327 +#: pg_controldata.c:337 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версия контрольных сумм страниц: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:329 +#: pg_controldata.c:339 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Случ. число для псевдоаутентификации: %s\n" +#, c-format +#~ msgid "WARNING: invalid WAL segment size\n" +#~ msgstr "ПРЕДУПРЕЖДЕНИЕ: неверный размер сегмента WAL\n" + +#, c-format +#~ msgid "" +#~ "The WAL segment size stored in the file, %d byte, is not a power of two\n" +#~ "between 1 MB and 1 GB. The file is corrupt and the results below are\n" +#~ "untrustworthy.\n" +#~ "\n" +#~ msgid_plural "" +#~ "The WAL segment size stored in the file, %d bytes, is not a power of two\n" +#~ "between 1 MB and 1 GB. The file is corrupt and the results below are\n" +#~ "untrustworthy.\n" +#~ "\n" +#~ msgstr[0] "" +#~ "Сохранённый в этом файле размер сегмента WAL (байт: %d) не является " +#~ "степенью\n" +#~ "двух между 1 МБ и 1 ГБ. Файл испорчен, выводимая ниже информация\n" +#~ "подлежит сомнению.\n" +#~ "\n" +#~ msgstr[1] "" +#~ "Сохранённый в этом файле размер сегмента WAL (байт: %d) не является " +#~ "степенью\n" +#~ "двух между 1 МБ и 1 ГБ. Файл испорчен, выводимая ниже информация\n" +#~ "подлежит сомнению.\n" +#~ "\n" +#~ msgstr[2] "" +#~ "Сохранённый в этом файле размер сегмента WAL (байт: %d) не является " +#~ "степенью\n" +#~ "двух между 1 МБ и 1 ГБ. Файл испорчен, выводимая ниже информация\n" +#~ "подлежит сомнению.\n" +#~ "\n" + #~ msgid "Report bugs to .\n" #~ msgstr "Об ошибках сообщайте по адресу .\n" @@ -555,11 +586,6 @@ msgstr "Случ. число для псевдоаутентификации: %s #~ msgid "Prior checkpoint location: %X/%X\n" #~ msgstr "Положение предыдущей конт. точки: %X/%X\n" -#~ msgid "calculated CRC checksum does not match value stored in file" -#~ msgstr "" -#~ "вычисленная контрольная сумма (CRC) не соответствует значению, " -#~ "сохранённому в файле" - #~ msgid "floating-point numbers" #~ msgstr "числа с плавающей точкой" diff --git a/src/bin/pg_controldata/po/sv.po b/src/bin/pg_controldata/po/sv.po index 9836890199473..07b46343b13f3 100644 --- a/src/bin/pg_controldata/po/sv.po +++ b/src/bin/pg_controldata/po/sv.po @@ -1,16 +1,16 @@ # Swedish message translation file for pg_controldata # This file is put in the public domain. -# Dennis Björklund , 2002, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022. +# Dennis Björklund , 2002, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. # Mats Erik Andersson , 2014. # # Use these quotes: "%s" # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-04-11 09:21+0000\n" -"PO-Revision-Date: 2023-08-17 16:56+0200\n" +"POT-Creation-Date: 2024-07-12 14:24+0000\n" +"PO-Revision-Date: 2024-07-12 19:01+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -19,31 +19,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../common/controldata_utils.c:73 +#: ../../common/controldata_utils.c:97 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "kunde inte öppna filen \"%s\" för läsning: %m" -#: ../../common/controldata_utils.c:86 +#: ../../common/controldata_utils.c:110 #, c-format msgid "could not read file \"%s\": %m" msgstr "kunde inte läsa fil \"%s\": %m" -#: ../../common/controldata_utils.c:95 +#: ../../common/controldata_utils.c:119 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" -#: ../../common/controldata_utils.c:108 ../../common/controldata_utils.c:244 +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 #, c-format msgid "could not close file \"%s\": %m" msgstr "kunde inte stänga fil \"%s\": %m" -#: ../../common/controldata_utils.c:124 +#: ../../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "byte-ordning stämmer inte" -#: ../../common/controldata_utils.c:126 +#: ../../common/controldata_utils.c:170 #, c-format msgid "" "possible byte ordering mismatch\n" @@ -56,21 +56,32 @@ msgstr "" "inte detta program. I så fall kan nedanstående resultat vara felaktiga\n" "och PostgreSQL-installationen vara inkompatibel med databaskatalogen." -#: ../../common/controldata_utils.c:194 +#: ../../common/controldata_utils.c:230 #, c-format msgid "could not open file \"%s\": %m" msgstr "kunde inte öppna fil \"%s\": %m" -#: ../../common/controldata_utils.c:213 +#: ../../common/controldata_utils.c:249 #, c-format msgid "could not write file \"%s\": %m" msgstr "kunde inte skriva fil \"%s\": %m" -#: ../../common/controldata_utils.c:232 +#: ../../common/controldata_utils.c:268 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "kunde inte fsync:a fil \"%s\": %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kan inte duplicera null-pekare (internt fel)\n" + #: pg_controldata.c:35 #, c-format msgid "" @@ -170,8 +181,8 @@ msgid "unrecognized status code" msgstr "okänd statuskod" #: pg_controldata.c:84 -msgid "unrecognized wal_level" -msgstr "okänd wal_level" +msgid "unrecognized \"wal_level\"" +msgstr "okänd \"wal_level\"" #: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 #, c-format @@ -188,48 +199,34 @@ msgstr "för många kommandoradsargument (första är \"%s\")" msgid "no data directory specified" msgstr "ingen datakatalog angiven" -#: pg_controldata.c:170 +#: pg_controldata.c:171 #, c-format -msgid "" -"WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" -"is expecting. The results below are untrustworthy.\n" -"\n" -msgstr "" -"VARNING: Beräknad CRC-kontrollsumma matchar inte det värde som har sparats i filen.\n" -"Antingen är filen trasig, eller så har den en annan uppbyggnad än vad detta\n" -"program förväntade sig. Resultatet nedan är inte helt tillförlitligt.\n" -"\n" +msgid "calculated CRC checksum does not match value stored in control file" +msgstr "uträknad CRC-checksumma matchar inte värdet som är lagrat i kontrollfil" -#: pg_controldata.c:179 +#: pg_controldata.c:172 #, c-format -msgid "WARNING: invalid WAL segment size\n" -msgstr "VARNING: ogiltig WAL-segmentstorlek\n" +msgid "Either the control file is corrupt, or it has a different layout than this program is expecting. The results below are untrustworthy." +msgstr "Antingen är filen trasig, eller så har den en annan uppbyggnad än vad detta program förväntade sig. Resultatet nedan är inte helt tillförlitligt." -#: pg_controldata.c:180 +#: pg_controldata.c:181 #, c-format -msgid "" -"The WAL segment size stored in the file, %d byte, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgid_plural "" -"The WAL segment size stored in the file, %d bytes, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n" -"\n" -msgstr[0] "" -"WAL-segmentstorleken sparad i filen, %d byte, är inte en tvåpotens\n" -"mellan 1 MB och 1 GB. Filen är trasig och resultatet nedan går\n" -"ej att lita på.\n" -"\n" -msgstr[1] "" -"WAL-segmentstorleken sparad i filen, %d byte, är inte en tvåpotens\n" -"mellan 1 MB och 1 GB. Filen är trasig och resultatet nedan går\n" -"ej att lita på.\n" -"\n" +msgid "invalid WAL segment size in control file (%d byte)" +msgid_plural "invalid WAL segment size in control file (%d bytes)" +msgstr[0] "ogiltigt WAL-segmentstorlek i kontrollfil (%d byte)" +msgstr[1] "ogiltigt WAL-segmentstorlek i kontrollfil (%d byte)" + +#: pg_controldata.c:185 +#, c-format +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "WAL-segmentstorleken måste vara en tvåpotens mellan 1 MB och 1 GB." + +#: pg_controldata.c:186 +#, c-format +msgid "The file is corrupt and the results below are untrustworthy." +msgstr "Filen är trasig och resultatet nedan är inte helt tillförlitligt." -#: pg_controldata.c:222 +#: pg_controldata.c:221 msgid "???" msgstr "???" @@ -239,280 +236,280 @@ msgstr "???" # used for English is insufficient for Swedish. New indenting # is consistent for all reporting statements: six additional # space characters. -#: pg_controldata.c:228 +#: pg_controldata.c:227 #, c-format msgid "pg_control version number: %u\n" msgstr "Versionsnummer för pg_control: %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:229 #, c-format msgid "Catalog version number: %u\n" msgstr "Katalogversion: %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:231 #, c-format msgid "Database system identifier: %llu\n" msgstr "Databasens systemidentifierare: %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:233 #, c-format msgid "Database cluster state: %s\n" msgstr "Databasklustrets tillstånd: %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:235 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control ändrades senast: %s\n" -#: pg_controldata.c:238 +#: pg_controldata.c:237 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Läge för senaste kontrollpunkt: %X/%X\n" -#: pg_controldata.c:240 +#: pg_controldata.c:239 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "REDO-läge för senaste kontrollpunkt: %X/%X\n" -#: pg_controldata.c:242 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "REDO-WAL-fil vid senaste kontrollpunkt: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:243 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:246 +#: pg_controldata.c:245 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "PrevTimeLineID vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:248 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Senaste kontrollpunktens full_page_writes: %s\n" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "off" msgstr "av" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "on" msgstr "på" -#: pg_controldata.c:250 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID vid senaste kontrollpunkt: %u:%u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:255 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:257 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:259 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB för oldestXID vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid vid senaste kontrollpunkt: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB för oldestMulti vid senaste kontrollpkt: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid vid senaste kontrollpunkt:%u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid vid senaste kontrollpunkt:%u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:272 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Tidpunkt för senaste kontrollpunkt: %s\n" -#: pg_controldata.c:275 +#: pg_controldata.c:274 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Beräknat LSN-tal av ologgade relationer: %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:276 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Minsta slutposition vid återställning: %X/%X\n" -#: pg_controldata.c:279 +#: pg_controldata.c:278 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Tidslinje för min slutpos vid återställning:%u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:280 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Startpunkt för backup: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:282 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Slutpunkt för backup: %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:284 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Tvingande markering av backupslut: %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "no" msgstr "nej" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "yes" msgstr "ja" -#: pg_controldata.c:287 +#: pg_controldata.c:286 #, c-format msgid "wal_level setting: %s\n" msgstr "Värde på wal_level: %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:288 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "Värde på wal_log_hints: %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:290 #, c-format msgid "max_connections setting: %d\n" msgstr "Värde på max_connections: %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:292 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "Värde på max_worker_processes: %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:294 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "Värde på max_wal_senders setting %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:296 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "Värde på max_prepared_xacts: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:298 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "Nuvarande max_locks_per_xact: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:300 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "Värde på track_commit_timestamp: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:302 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Maximal jämkning av data (alignment): %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:305 #, c-format msgid "Database block size: %u\n" msgstr "Databasens blockstorlek: %u\n" -#: pg_controldata.c:308 +#: pg_controldata.c:307 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Block per segment i en stor relation: %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:309 #, c-format msgid "WAL block size: %u\n" msgstr "Blockstorlek i transaktionsloggen: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:311 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Segmentstorlek i transaktionsloggen: %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:313 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Maximal längd för identifierare: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:315 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Maximalt antal kolonner i ett index: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:317 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Maximal storlek för en TOAST-enhet: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:319 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Storlek för large-object-enheter: %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:322 #, c-format msgid "Date/time type storage: %s\n" msgstr "Representation av dag och tid: %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:323 msgid "64-bit integers" msgstr "64-bitars heltal" -#: pg_controldata.c:325 +#: pg_controldata.c:324 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Överföring av float8-argument: %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by reference" msgstr "med referens" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by value" msgstr "med värde" -#: pg_controldata.c:327 +#: pg_controldata.c:326 #, c-format msgid "Data page checksum version: %u\n" msgstr "Checksummaversion för datasidor: %u\n" -#: pg_controldata.c:329 +#: pg_controldata.c:328 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Fejkat authentiseringsvärde: %s\n" diff --git a/src/bin/pg_controldata/po/uk.po b/src/bin/pg_controldata/po/uk.po index 758c4c1245eb9..c2b2e3217f1bb 100644 --- a/src/bin/pg_controldata/po/uk.po +++ b/src/bin/pg_controldata/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-12 10:51+0000\n" -"PO-Revision-Date: 2022-09-13 11:52\n" +"POT-Creation-Date: 2024-08-31 06:24+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,34 +14,34 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_15_STABLE/pg_controldata.pot\n" -"X-Crowdin-File-ID: 924\n" +"X-Crowdin-File: /REL_17_STABLE/pg_controldata.pot\n" +"X-Crowdin-File-ID: 1018\n" -#: ../../common/controldata_utils.c:73 +#: ../../common/controldata_utils.c:97 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не вдалося відкрити файл \"%s\" для читання: %m" -#: ../../common/controldata_utils.c:86 +#: ../../common/controldata_utils.c:110 #, c-format msgid "could not read file \"%s\": %m" msgstr "не вдалося прочитати файл \"%s\": %m" -#: ../../common/controldata_utils.c:95 +#: ../../common/controldata_utils.c:119 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" -#: ../../common/controldata_utils.c:108 ../../common/controldata_utils.c:244 +#: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 #, c-format msgid "could not close file \"%s\": %m" msgstr "неможливо закрити файл \"%s\": %m" -#: ../../common/controldata_utils.c:124 +#: ../../common/controldata_utils.c:168 msgid "byte ordering mismatch" msgstr "неправильний порядок байтів" -#: ../../common/controldata_utils.c:126 +#: ../../common/controldata_utils.c:170 #, c-format msgid "possible byte ordering mismatch\n" "The byte ordering used to store the pg_control file might not match the one\n" @@ -50,21 +50,32 @@ msgid "possible byte ordering mismatch\n" msgstr "можлива помилка у послідовності байтів.\n" "Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." -#: ../../common/controldata_utils.c:194 +#: ../../common/controldata_utils.c:230 #, c-format msgid "could not open file \"%s\": %m" msgstr "не можливо відкрити файл \"%s\": %m" -#: ../../common/controldata_utils.c:213 +#: ../../common/controldata_utils.c:249 #, c-format msgid "could not write file \"%s\": %m" msgstr "не вдалося записати файл \"%s\": %m" -#: ../../common/controldata_utils.c:232 +#: ../../common/controldata_utils.c:268 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не вдалося fsync файл \"%s\": %m" +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:153 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + #: pg_controldata.c:35 #, c-format msgid "%s displays control information of a PostgreSQL database cluster.\n\n" @@ -153,8 +164,8 @@ msgid "unrecognized status code" msgstr "невизнаний код статусу" #: pg_controldata.c:84 -msgid "unrecognized wal_level" -msgstr "невизнаний wal_рівень" +msgid "unrecognized \"wal_level\"" +msgstr "нерозпізнано \"wal_level\"" #: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:163 #, c-format @@ -171,309 +182,313 @@ msgstr "забагато аргументів у командному рядку msgid "no data directory specified" msgstr "каталог даних не вказано" -#: pg_controldata.c:170 +#: pg_controldata.c:171 +#, c-format +msgid "calculated CRC checksum does not match value stored in control file" +msgstr "обчислена контрольна сума CRC не збігається зі значенням, що зберігається в контрольному файлі" + +#: pg_controldata.c:172 #, c-format -msgid "WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" -"is expecting. The results below are untrustworthy.\n\n" -msgstr "ПОПЕРЕДЖЕННЯ: Контрольна сума CRC не відповідає збереженому значенню у файлі. Або файл пошкоджено, або він містить іншу структуру, ніж очікує ця програма. Результати нижче є недостовірними.\n\n" +msgid "Either the control file is corrupt, or it has a different layout than this program is expecting. The results below are untrustworthy." +msgstr "Або контрольний файл пошкоджено, або він має іншу структуру, ніж очікує ця програма. Наведені нижче результати не заслуговують на довіру." -#: pg_controldata.c:179 +#: pg_controldata.c:181 #, c-format -msgid "WARNING: invalid WAL segment size\n" -msgstr "ПОПЕРЕДЖЕННЯ: неправильний розмір WAL сегменту \n" +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 байтів)" +msgstr[2] "невірний розмір сегмента WAL у файлі керування (%d байтів)" +msgstr[3] "невірний розмір сегмента WAL у файлі керування (%d байтів)" -#: pg_controldata.c:180 +#: pg_controldata.c:185 #, c-format -msgid "The WAL segment size stored in the file, %d byte, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n\n" -msgid_plural "The WAL segment size stored in the file, %d bytes, is not a power of two\n" -"between 1 MB and 1 GB. The file is corrupt and the results below are\n" -"untrustworthy.\n\n" -msgstr[0] "Розмір WAL сегменту збережений у файлі, %d байт, не є степенем двійки між 1 MB та 1 GB. Файл пошкоджено та результати нижче є недостовірними.\n\n" -msgstr[1] "Розмір WAL сегменту збережений у файлі, %d байтів, не є степенем двійки між 1 MB та 1 GB. Файл пошкоджено та результати нижче є недостовірними.\n\n" -msgstr[2] "Розмір WAL сегменту збережений у файлі, %d байтів, не є степенем двійки між 1 MB та 1 GB. Файл пошкоджено та результати нижче є недостовірними.\n\n" -msgstr[3] "Розмір WAL сегменту збережений у файлі, %d байта, не є степенем двійки між 1 MB та 1 GB. Файл пошкоджено та результати нижче є недостовірними.\n\n" +msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." +msgstr "Розмір сегмента WAL повинен бути степенем двійки від 1 МБ до 1 ГБ." -#: pg_controldata.c:222 +#: pg_controldata.c:186 +#, c-format +msgid "The file is corrupt and the results below are untrustworthy." +msgstr "Файл пошкоджено, і наведені нижче результати не заслуговують на довіру." + +#: pg_controldata.c:221 msgid "???" msgstr "???" -#: pg_controldata.c:228 +#: pg_controldata.c:227 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control номер версії: %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:229 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версії каталогу: %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:231 #, c-format msgid "Database system identifier: %llu\n" msgstr "Системний ідентифікатор бази даних: %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:233 #, c-format msgid "Database cluster state: %s\n" msgstr "Стан кластеру бази даних: %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:235 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control був модифікований востаннє: %s\n" -#: pg_controldata.c:238 +#: pg_controldata.c:237 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Останнє місце знаходження контрольної точки: %X/%X\n" -#: pg_controldata.c:240 +#: pg_controldata.c:239 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Розташування останньої контрольної точки: %X%X\n" -#: pg_controldata.c:242 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Останній файл контрольної точки REDO WAL: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:243 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Останній TimeLineID контрольної точки: %u\n" -#: pg_controldata.c:246 +#: pg_controldata.c:245 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Останній PrevTimeLineID контрольної точки: %u\n" -#: pg_controldata.c:248 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Останній full_page_writes контрольної точки: %s\n" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "off" msgstr "вимк" -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:248 pg_controldata.c:289 pg_controldata.c:301 msgid "on" msgstr "увімк" -#: pg_controldata.c:250 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "Останній NextXID контрольної точки: %u%u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "Останній NextOID контрольної точки: %u\n" -#: pg_controldata.c:255 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "Останній NextMultiXactId контрольної точки: %u\n" -#: pg_controldata.c:257 +#: pg_controldata.c:256 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "Останній NextMultiOffset контрольної точки: %u\n" -#: pg_controldata.c:259 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "Останній oldestXID контрольної точки: %u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "Остання DB останнього oldestXID контрольної точки: %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "Останній oldestActiveXID контрольної точки: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "Останній oldestMultiXid контрольної точки: %u \n" -#: pg_controldata.c:267 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "Остання DB останньої oldestMulti контрольної точки: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "Останній oldestCommitTsXid контрольної точки:%u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "Останній newestCommitTsXid контрольної точки: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:272 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Час останньої контрольної точки: %s\n" -#: pg_controldata.c:275 +#: pg_controldata.c:274 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Фіктивний LSN для таблиць без журналювання: %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:276 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Мінімальне розташування кінця відновлення: %X/%X\n" -#: pg_controldata.c:279 +#: pg_controldata.c:278 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Мінімальна позиція історії часу завершення відновлення: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:280 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Початкове розташування резервного копіювання: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:282 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Кінцеве розташування резервного копіювання: %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:284 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Вимагається запис кінця резервного копіювання: %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "no" msgstr "ні" -#: pg_controldata.c:286 +#: pg_controldata.c:285 msgid "yes" msgstr "так" -#: pg_controldata.c:287 +#: pg_controldata.c:286 #, c-format msgid "wal_level setting: %s\n" msgstr "налаштування wal_рівня: %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:288 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "налаштування wal_log_hints: %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:290 #, c-format msgid "max_connections setting: %d\n" msgstr "налаштування max_connections: %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:292 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "налаштування max_worker_processes: %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:294 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "налаштування max_wal_senders: %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:296 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "налаштування max_prepared_xacts: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:298 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "налаштування max_locks_per_xact: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:300 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "налаштування track_commit_timestamp: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:302 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Максимальне вирівнювання даних: %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:305 #, c-format msgid "Database block size: %u\n" msgstr "Розмір блоку бази даних: %u\n" -#: pg_controldata.c:308 +#: pg_controldata.c:307 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоків на сегмент великого відношення: %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:309 #, c-format msgid "WAL block size: %u\n" msgstr "Pозмір блоку WAL: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:311 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байтів на сегмент WAL: %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:313 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальна довжина ідентифікаторів: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:315 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Максимальна кількість стовпців в індексі: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:317 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальний розмір сегменту TOAST: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:319 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Розмір сегменту великих обїєктів: %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:322 #, c-format msgid "Date/time type storage: %s\n" msgstr "Дата/час типу сховища: %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:323 msgid "64-bit integers" msgstr "64-бітні цілі" -#: pg_controldata.c:325 +#: pg_controldata.c:324 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Передача аргументу Float8: %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by reference" msgstr "за посиланням" -#: pg_controldata.c:326 +#: pg_controldata.c:325 msgid "by value" msgstr "за значенням" -#: pg_controldata.c:327 +#: pg_controldata.c:326 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версія контрольних сум сторінок даних: %u\n" -#: pg_controldata.c:329 +#: pg_controldata.c:328 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Імітувати нонс для аутентифікації: %s\n" diff --git a/src/bin/pg_controldata/po/zh_TW.po b/src/bin/pg_controldata/po/zh_TW.po index 450aec76ce0eb..b9ffb5669ac06 100644 --- a/src/bin/pg_controldata/po/zh_TW.po +++ b/src/bin/pg_controldata/po/zh_TW.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL) 16\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2023-09-08 21:52+0000\n" -"PO-Revision-Date: 2023-11-06 08:49+0800\n" +"PO-Revision-Date: 2024-06-26 08:37+0200\n" "Last-Translator: Zhenbang Wei \n" "Language-Team: \n" "Language: zh_TW\n" @@ -382,7 +382,7 @@ msgstr "最新檢查點的時間: %s\n" #: pg_controldata.c:275 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" -msgstr "無日誌關聯的虛擬 LSN 計數: %X/%X\n" +msgstr "無日誌關聯的虛擬 LSN 計數: %X/%X\n" #: pg_controldata.c:277 #, c-format @@ -484,7 +484,7 @@ msgstr "資料庫區塊大小: %u\n" #: pg_controldata.c:308 #, c-format msgid "Blocks per segment of large relation: %u\n" -msgstr "大型關聯每個片段的區塊數: %u\n" +msgstr "大型關聯每個片段的區塊數: %u\n" #: pg_controldata.c:310 #, c-format diff --git a/src/bin/pg_ctl/po/de.po b/src/bin/pg_ctl/po/de.po index b61e43eefb205..3cfd780365e4b 100644 --- a/src/bin/pg_ctl/po/de.po +++ b/src/bin/pg_ctl/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_ctl -# Peter Eisentraut , 2004 - 2024. +# Peter Eisentraut , 2004 - 2025. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 17\n" +"Project-Id-Version: PostgreSQL 18\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-16 07:49+0000\n" -"PO-Revision-Date: 2024-03-26 10:59+0100\n" +"POT-Creation-Date: 2025-03-19 06:50+0000\n" +"PO-Revision-Date: 2025-03-19 11:06+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -40,33 +40,33 @@ msgstr "konnte kein »%s« zum Ausführen finden" msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "konnte Pfad »%s« nicht in absolute Form auflösen: %m" -#: ../../common/exec.c:382 +#: ../../common/exec.c:363 #, c-format msgid "could not execute command \"%s\": %m" msgstr "konnte Befehl »%s« nicht ausführen: %m" -#: ../../common/exec.c:394 +#: ../../common/exec.c:375 #, c-format msgid "could not read from command \"%s\": %m" msgstr "konnte nicht von Befehl »%s« lesen: %m" -#: ../../common/exec.c:397 +#: ../../common/exec.c:378 #, c-format msgid "no data was returned by command \"%s\"" msgstr "Befehl »%s« gab keine Daten zurück" -#: ../../common/exec.c:424 +#: ../../common/exec.c:405 #, c-format msgid "%s() failed: %m" msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: ../../common/exec.c:543 ../../common/exec.c:588 ../../common/exec.c:680 msgid "out of memory" msgstr "Speicher aufgebraucht" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:790 ../../port/path.c:807 +#: ../../port/path.c:831 ../../port/path.c:868 ../../port/path.c:885 #, c-format msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" @@ -106,123 +106,127 @@ msgstr "Kindprozess wurde von Signal %d beendet: %s" msgid "child process exited with unrecognized status %d" msgstr "Kindprozess hat mit unbekanntem Status %d beendet" -#: ../../port/path.c:775 +#: ../../port/path.c:853 #, c-format msgid "could not get current working directory: %m\n" msgstr "konnte aktuelles Arbeitsverzeichnis nicht ermitteln: %m\n" -#: pg_ctl.c:254 +#: pg_ctl.c:255 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: Verzeichnis »%s« existiert nicht\n" -#: pg_ctl.c:257 +#: pg_ctl.c:258 #, c-format msgid "%s: could not access directory \"%s\": %m\n" msgstr "%s: konnte nicht auf Verzeichnis »%s« zugreifen: %m\n" -#: pg_ctl.c:270 +#: pg_ctl.c:271 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: Verzeichnis »%s« ist kein Datenbankclusterverzeichnis\n" -#: pg_ctl.c:283 +#: pg_ctl.c:284 #, c-format msgid "%s: could not open PID file \"%s\": %m\n" msgstr "%s: konnte PID-Datei »%s« nicht öffnen: %m\n" -#: pg_ctl.c:292 +#: pg_ctl.c:293 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: die PID-Datei »%s« ist leer\n" -#: pg_ctl.c:295 +#: pg_ctl.c:296 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: ungültige Daten in PID-Datei »%s«\n" -#: pg_ctl.c:457 pg_ctl.c:499 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %m\n" msgstr "%s: konnte Server nicht starten: %m\n" -#: pg_ctl.c:477 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %m\n" msgstr "%s: konnte Server wegen setsid()-Fehler nicht starten: %m\n" -#: pg_ctl.c:547 +#: pg_ctl.c:548 #, c-format msgid "%s: could not open log file \"%s\": %m\n" msgstr "%s: konnte Logdatei »%s« nicht öffnen: %m\n" -#: pg_ctl.c:564 +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: konnte Server nicht starten: Fehlercode %lu\n" -#: pg_ctl.c:781 +#: pg_ctl.c:789 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: kann Grenzwert für Core-Datei-Größe nicht setzen; durch harten Grenzwert verboten\n" -#: pg_ctl.c:807 +#: pg_ctl.c:815 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: konnte Datei »%s« nicht lesen\n" -#: pg_ctl.c:812 +#: pg_ctl.c:820 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: Optionsdatei »%s« muss genau eine Zeile haben\n" -#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 +#: pg_ctl.c:862 pg_ctl.c:1050 pg_ctl.c:1117 #, c-format msgid "%s: could not send stop signal (PID: %d): %m\n" msgstr "%s: konnte Stopp-Signal nicht senden (PID: %d): %m\n" -#: pg_ctl.c:882 +#: pg_ctl.c:890 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "Programm »%s« wird von %s benötigt, aber wurde nicht im selben Verzeichnis wie »%s« gefunden\n" -#: pg_ctl.c:885 +#: pg_ctl.c:893 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "Programm »%s« wurde von »%s« gefunden, aber es hatte nicht die gleiche Version wie %s\n" -#: pg_ctl.c:917 +#: pg_ctl.c:925 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: Initialisierung des Datenbanksystems fehlgeschlagen\n" -#: pg_ctl.c:932 +#: pg_ctl.c:940 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: ein anderer Server läuft möglicherweise; versuche trotzdem zu starten\n" -#: pg_ctl.c:980 +#: pg_ctl.c:988 msgid "waiting for server to start..." msgstr "warte auf Start des Servers..." -#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 +#: pg_ctl.c:993 pg_ctl.c:1003 pg_ctl.c:1073 pg_ctl.c:1135 pg_ctl.c:1247 msgid " done\n" msgstr " fertig\n" -#: pg_ctl.c:986 +#: pg_ctl.c:994 msgid "server started\n" msgstr "Server gestartet\n" -#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 +#: pg_ctl.c:997 pg_ctl.c:1007 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " Warten beendet\n" -#: pg_ctl.c:990 +#: pg_ctl.c:998 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: Starten des Servers hat nicht rechtzeitig abgeschlossen\n" -#: pg_ctl.c:996 +#: pg_ctl.c:1004 +msgid "server shut down because of recovery target settings\n" +msgstr "Server fuhr aufgrund der Einstellungen für das Wiederherstellungsziel herunter\n" + +#: pg_ctl.c:1008 #, c-format msgid "" "%s: could not start server\n" @@ -231,42 +235,42 @@ msgstr "" "%s: konnte Server nicht starten\n" "Prüfen Sie die Logausgabe.\n" -#: pg_ctl.c:1004 +#: pg_ctl.c:1016 msgid "server starting\n" msgstr "Server startet\n" -#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 +#: pg_ctl.c:1035 pg_ctl.c:1093 pg_ctl.c:1156 pg_ctl.c:1195 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PID-Datei »%s« existiert nicht\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 +#: pg_ctl.c:1036 pg_ctl.c:1095 pg_ctl.c:1157 pg_ctl.c:1196 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "Läuft der Server?\n" -#: pg_ctl.c:1030 +#: pg_ctl.c:1042 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "%s: kann Server nicht anhalten; Einzelbenutzerserver läuft (PID: %d)\n" -#: pg_ctl.c:1044 +#: pg_ctl.c:1056 msgid "server shutting down\n" msgstr "Server fährt herunter\n" -#: pg_ctl.c:1049 pg_ctl.c:1109 +#: pg_ctl.c:1061 pg_ctl.c:1121 msgid "waiting for server to shut down..." msgstr "warte auf Herunterfahren des Servers..." -#: pg_ctl.c:1053 pg_ctl.c:1114 +#: pg_ctl.c:1065 pg_ctl.c:1126 msgid " failed\n" msgstr " Fehler\n" -#: pg_ctl.c:1055 pg_ctl.c:1116 +#: pg_ctl.c:1067 pg_ctl.c:1128 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: Server fährt nicht herunter\n" -#: pg_ctl.c:1057 pg_ctl.c:1118 +#: pg_ctl.c:1069 pg_ctl.c:1130 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -274,235 +278,235 @@ msgstr "" "TIPP: Die Option »-m fast« beendet Sitzungen sofort, statt auf das Beenden\n" "durch die Sitzungen selbst zu warten.\n" -#: pg_ctl.c:1063 pg_ctl.c:1124 +#: pg_ctl.c:1075 pg_ctl.c:1136 msgid "server stopped\n" msgstr "Server angehalten\n" -#: pg_ctl.c:1084 +#: pg_ctl.c:1096 msgid "trying to start server anyway\n" msgstr "versuche Server trotzdem zu starten\n" -#: pg_ctl.c:1093 +#: pg_ctl.c:1105 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "%s: kann Server nicht neu starten; Einzelbenutzerserver läuft (PID: %d)\n" -#: pg_ctl.c:1096 pg_ctl.c:1154 +#: pg_ctl.c:1108 pg_ctl.c:1166 msgid "Please terminate the single-user server and try again.\n" msgstr "Bitte beenden Sie den Einzelbenutzerserver und versuchen Sie es noch einmal.\n" -#: pg_ctl.c:1128 +#: pg_ctl.c:1140 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: alter Serverprozess (PID: %d) scheint verschwunden zu sein\n" -#: pg_ctl.c:1130 +#: pg_ctl.c:1142 msgid "starting server anyway\n" msgstr "starte Server trotzdem\n" -#: pg_ctl.c:1151 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "%s: kann Server nicht neu laden; Einzelbenutzerserver läuft (PID: %d)\n" -#: pg_ctl.c:1160 +#: pg_ctl.c:1172 #, c-format msgid "%s: could not send reload signal (PID: %d): %m\n" msgstr "%s: konnte Signal zum Neuladen nicht senden (PID: %d): %m\n" -#: pg_ctl.c:1165 +#: pg_ctl.c:1177 msgid "server signaled\n" msgstr "Signal an Server gesendet\n" -#: pg_ctl.c:1190 +#: pg_ctl.c:1202 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "%s: kann Server nicht befördern; Einzelbenutzerserver läuft (PID: %d)\n" -#: pg_ctl.c:1198 +#: pg_ctl.c:1210 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: kann Server nicht befördern; Server ist nicht im Standby-Modus\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1220 #, c-format msgid "%s: could not create promote signal file \"%s\": %m\n" msgstr "%s: konnte Signaldatei zum Befördern »%s« nicht erzeugen: %m\n" -#: pg_ctl.c:1214 +#: pg_ctl.c:1226 #, c-format msgid "%s: could not write promote signal file \"%s\": %m\n" msgstr "%s: konnte Signaldatei zum Befördern »%s« nicht schreiben: %m\n" -#: pg_ctl.c:1222 +#: pg_ctl.c:1234 #, c-format msgid "%s: could not send promote signal (PID: %d): %m\n" msgstr "%s: konnte Signal zum Befördern nicht senden (PID: %d): %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1237 #, c-format msgid "%s: could not remove promote signal file \"%s\": %m\n" msgstr "%s: konnte Signaldatei zum Befördern »%s« nicht entfernen: %m\n" -#: pg_ctl.c:1232 +#: pg_ctl.c:1244 msgid "waiting for server to promote..." msgstr "warte auf Befördern des Servers..." -#: pg_ctl.c:1236 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "Server wurde befördert\n" -#: pg_ctl.c:1241 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: Befördern des Servers hat nicht rechtzeitig abgeschlossen\n" -#: pg_ctl.c:1247 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "Server wird befördert\n" -#: pg_ctl.c:1271 +#: pg_ctl.c:1283 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "%s: kann Logdatei nicht rotieren; Einzelbenutzerserver läuft (PID: %d)\n" -#: pg_ctl.c:1281 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %m\n" msgstr "%s: konnte Signaldatei zum Logrotieren »%s« nicht erzeugen: %m\n" -#: pg_ctl.c:1287 +#: pg_ctl.c:1299 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %m\n" msgstr "%s: konnte Signaldatei zum Logrotieren »%s« nicht schreiben: %m\n" -#: pg_ctl.c:1295 +#: pg_ctl.c:1307 #, c-format msgid "%s: could not send log rotation signal (PID: %d): %m\n" msgstr "%s: konnte Signal zum Logrotieren nicht senden (PID: %d): %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1310 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %m\n" msgstr "%s: konnte Signaldatei zum Logrotieren »%s« nicht entfernen: %m\n" -#: pg_ctl.c:1303 +#: pg_ctl.c:1315 msgid "server signaled to rotate log file\n" msgstr "Signal zum Logrotieren an Server gesendet\n" -#: pg_ctl.c:1350 +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: Einzelbenutzerserver läuft (PID: %d)\n" -#: pg_ctl.c:1364 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: Server läuft (PID: %d)\n" -#: pg_ctl.c:1380 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: kein Server läuft\n" -#: pg_ctl.c:1397 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %d): %m\n" msgstr "%s: konnte Signal %d nicht senden (PID: %d): %m\n" -#: pg_ctl.c:1428 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: konnte eigene Programmdatei nicht finden\n" -#: pg_ctl.c:1438 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: konnte »postgres« Programmdatei nicht finden\n" -#: pg_ctl.c:1508 pg_ctl.c:1542 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: konnte Servicemanager nicht öffnen\n" -#: pg_ctl.c:1514 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: Systemdienst »%s« ist bereits registriert\n" -#: pg_ctl.c:1525 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht registrieren: Fehlercode %lu\n" -#: pg_ctl.c:1548 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: Systemdienst »%s« ist nicht registriert\n" -#: pg_ctl.c:1555 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht öffnen: Fehlercode %lu\n" -#: pg_ctl.c:1564 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht deregistrieren: Fehlercode %lu\n" -#: pg_ctl.c:1651 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "Warte auf Start des Servers...\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "Zeitüberschreitung beim Warten auf Start des Servers\n" -#: pg_ctl.c:1658 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "Server wurde gestartet und nimmt Verbindungen an\n" -#: pg_ctl.c:1713 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht starten: Fehlercode %lu\n" -#: pg_ctl.c:1786 +#: pg_ctl.c:1798 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: konnte Prozess-Token nicht öffnen: Fehlercode %lu\n" -#: pg_ctl.c:1800 +#: pg_ctl.c:1812 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: konnte SIDs nicht erzeugen: Fehlercode %lu\n" -#: pg_ctl.c:1826 +#: pg_ctl.c:1838 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: konnte beschränktes Token nicht erzeugen: Fehlercode %lu\n" -#: pg_ctl.c:1908 +#: pg_ctl.c:1920 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: konnte LUIDs für Privilegien nicht ermitteln: Fehlercode %lu\n" -#: pg_ctl.c:1916 pg_ctl.c:1931 +#: pg_ctl.c:1928 pg_ctl.c:1943 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: konnte Token-Informationen nicht ermitteln: Fehlercode %lu\n" -#: pg_ctl.c:1925 +#: pg_ctl.c:1937 #, c-format msgid "%s: out of memory\n" msgstr "%s: Speicher aufgebraucht\n" -#: pg_ctl.c:1955 +#: pg_ctl.c:1967 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_ctl.c:1963 +#: pg_ctl.c:1975 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -512,17 +516,17 @@ msgstr "" "starten, anzuhalten oder zu steuern.\n" "\n" -#: pg_ctl.c:1964 +#: pg_ctl.c:1976 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_ctl.c:1965 +#: pg_ctl.c:1977 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATENVERZ] [-s] [-o OPTIONEN]\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1978 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -531,12 +535,12 @@ msgstr "" " %s start [-D DATENVERZ] [-l DATEINAME] [-W] [-t SEK] [-s]\n" " [-o OPTIONEN] [-p PFAD] [-c]\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1980 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATENVERZ] [-m SHUTDOWN-MODUS] [-W] [-t SEK] [-s]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1981 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -545,32 +549,32 @@ msgstr "" " %s restart [-D DATENVERZ] [-m SHUTDOWN-MODUS] [-W] [-t SEK] [-s]\n" " [-o OPTIONEN] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1983 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATENVERZ] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1984 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATENVERZ]\n" -#: pg_ctl.c:1973 +#: pg_ctl.c:1985 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATENVERZ] [-W] [-t SEK] [-s]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1986 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATENVERZ] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1987 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1989 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -579,12 +583,12 @@ msgstr "" " %s register [-D DATENVERZ] [-N DIENSTNAME] [-U BENUTZERNAME] [-P PASSWORT]\n" " [-S STARTTYP] [-e QUELLE] [-W] [-t SEK] [-s] [-o OPTIONEN]\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:1991 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N DIENSTNAME]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1994 #, c-format msgid "" "\n" @@ -593,56 +597,56 @@ msgstr "" "\n" "Optionen für alle Modi:\n" -#: pg_ctl.c:1983 +#: pg_ctl.c:1995 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DATENVERZ Datenbankverzeichnis\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1997 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr "" " -e QUELLE Ereignisquelle fürs Loggen, wenn als Systemdienst\n" " gestartet\n" -#: pg_ctl.c:1987 +#: pg_ctl.c:1999 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent nur Fehler zeigen, keine Informationsmeldungen\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:2000 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEK Sekunden zu warten bei Option -w\n" -#: pg_ctl.c:1989 +#: pg_ctl.c:2001 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:2002 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait warten bis Operation abgeschlossen ist (Voreinstellung)\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:2003 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait nicht warten bis Operation abgeschlossen ist\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:2004 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:2005 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "" "Wenn die Option -D weggelassen wird, dann wird die Umgebungsvariable\n" "PGDATA verwendet.\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:2007 #, c-format msgid "" "\n" @@ -651,24 +655,24 @@ msgstr "" "\n" "Optionen für Start oder Neustart:\n" -#: pg_ctl.c:1997 +#: pg_ctl.c:2009 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files erlaubt postgres Core-Dateien zu erzeugen\n" -#: pg_ctl.c:1999 +#: pg_ctl.c:2011 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files betrifft diese Plattform nicht\n" -#: pg_ctl.c:2001 +#: pg_ctl.c:2013 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=DATEINAME Serverlog in DATEINAME schreiben (wird an bestehende\n" " Datei angehängt)\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:2014 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -677,12 +681,12 @@ msgstr "" " -o, --options=OPTIONEN Kommandozeilenoptionen für postgres (PostgreSQL-\n" " Serverprogramm) oder initdb\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2016 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PFAD-ZU-POSTGRES normalerweise nicht notwendig\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -691,12 +695,12 @@ msgstr "" "\n" "Optionen für Anhalten oder Neustart:\n" -#: pg_ctl.c:2006 +#: pg_ctl.c:2018 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODUS MODUS kann »smart«, »fast« oder »immediate« sein\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2020 #, c-format msgid "" "\n" @@ -705,24 +709,24 @@ msgstr "" "\n" "Shutdown-Modi sind:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2021 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart beenden nachdem alle Clientverbindungen geschlossen sind\n" -#: pg_ctl.c:2010 +#: pg_ctl.c:2022 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast sofort beenden, mit richtigem Shutdown (Voreinstellung)\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2023 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate beenden ohne vollständigen Shutdown; führt zu Recovery-Lauf\n" " beim Neustart\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2025 #, c-format msgid "" "\n" @@ -731,7 +735,7 @@ msgstr "" "\n" "Erlaubte Signalnamen für »kill«:\n" -#: pg_ctl.c:2017 +#: pg_ctl.c:2029 #, c-format msgid "" "\n" @@ -740,27 +744,27 @@ msgstr "" "\n" "Optionen für »register« und »unregister«:\n" -#: pg_ctl.c:2018 +#: pg_ctl.c:2030 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N DIENSTNAME Systemdienstname für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:2019 +#: pg_ctl.c:2031 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD Passwort des Benutzers für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2032 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME Benutzername für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2033 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S STARTTYP Systemdienst-Starttyp für PostgreSQL-Server\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2035 #, c-format msgid "" "\n" @@ -769,19 +773,19 @@ msgstr "" "\n" "Starttypen sind:\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2036 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr "" " auto Dienst automatisch starten beim Start des Betriebssystems\n" " (Voreinstellung)\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2037 #, c-format msgid " demand start service on demand\n" msgstr " demand Dienst bei Bedarf starten\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2040 #, c-format msgid "" "\n" @@ -790,37 +794,37 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_ctl.c:2029 +#: pg_ctl.c:2041 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2066 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: unbekannter Shutdown-Modus »%s«\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2095 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: unbekannter Signalname »%s«\n" -#: pg_ctl.c:2100 +#: pg_ctl.c:2112 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: unbekannter Starttyp »%s«\n" -#: pg_ctl.c:2156 +#: pg_ctl.c:2168 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: konnte das Datenverzeichnis mit Befehl »%s« nicht ermitteln\n" -#: pg_ctl.c:2179 +#: pg_ctl.c:2191 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: Kontrolldatei scheint kaputt zu sein\n" -#: pg_ctl.c:2247 +#: pg_ctl.c:2259 #, c-format msgid "" "%s: cannot be run as root\n" @@ -831,32 +835,32 @@ msgstr "" "Bitte loggen Sie sich (z.B. mit »su«) als der (unprivilegierte) Benutzer\n" "ein, der Eigentümer des Serverprozesses sein soll.\n" -#: pg_ctl.c:2319 +#: pg_ctl.c:2331 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: Option -S wird auf dieser Plattform nicht unterstützt\n" -#: pg_ctl.c:2375 +#: pg_ctl.c:2387 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: fehlende Argumente für »kill«-Modus\n" -#: pg_ctl.c:2393 +#: pg_ctl.c:2405 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: unbekannter Operationsmodus »%s«\n" -#: pg_ctl.c:2402 +#: pg_ctl.c:2414 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist »%s«)\n" -#: pg_ctl.c:2409 +#: pg_ctl.c:2421 #, c-format msgid "%s: no operation specified\n" msgstr "%s: keine Operation angegeben\n" -#: pg_ctl.c:2430 +#: pg_ctl.c:2442 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: kein Datenbankverzeichnis angegeben und Umgebungsvariable PGDATA nicht gesetzt\n" diff --git a/src/bin/pg_ctl/po/es.po b/src/bin/pg_ctl/po/es.po index ea82807aee75f..f57f1217e9586 100644 --- a/src/bin/pg_ctl/po/es.po +++ b/src/bin/pg_ctl/po/es.po @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_ctl (PostgreSQL) 16\n" +"Project-Id-Version: pg_ctl (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-22 07:18+0000\n" -"PO-Revision-Date: 2023-05-22 12:05+0200\n" +"POT-Creation-Date: 2025-02-16 19:49+0000\n" +"PO-Revision-Date: 2024-11-16 14:23+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -21,38 +21,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.2\n" -#: ../../common/exec.c:172 +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "discordancia en orden de bytes" + +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binario «%s» no válido: %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "no se pudo leer el binario «%s»: %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "no se pudo resolver la ruta «%s» a forma absoluta: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "no se pudo ejecutar la orden «%s»: %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "no se pudo leer desde la orden «%s»: %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "la orden «%s» no retornó datos" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() falló: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "memoria agotada" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:791 ../../port/path.c:808 +#: ../../port/path.c:830 ../../port/path.c:867 ../../port/path.c:884 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" @@ -92,125 +111,125 @@ msgstr "el proceso hijo fue terminado por una señal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" -#: ../../port/path.c:775 +#: ../../port/path.c:852 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "no se pudo obtener el directorio de trabajo actual: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "no se pudo obtener el directorio de trabajo actual: %m\n" -#: pg_ctl.c:255 +#: pg_ctl.c:254 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: el directorio «%s» no existe\n" -#: pg_ctl.c:258 +#: pg_ctl.c:257 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: no se pudo acceder al directorio «%s»: %m\n" -#: pg_ctl.c:271 +#: pg_ctl.c:270 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: el directorio «%s» no es un directorio de base de datos\n" -#: pg_ctl.c:284 +#: pg_ctl.c:283 #, c-format -msgid "%s: could not open PID file \"%s\": %s\n" -msgstr "%s: no se pudo abrir el archivo de PID «%s»: %s\n" +msgid "%s: could not open PID file \"%s\": %m\n" +msgstr "%s: no se pudo abrir el archivo de PID «%s»: %m\n" -#: pg_ctl.c:293 +#: pg_ctl.c:292 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: el archivo de PID «%s» está vacío\n" -#: pg_ctl.c:296 +#: pg_ctl.c:295 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: datos no válidos en archivo de PID «%s»\n" -#: pg_ctl.c:458 pg_ctl.c:500 +#: pg_ctl.c:457 pg_ctl.c:499 #, c-format -msgid "%s: could not start server: %s\n" -msgstr "%s: no se pudo iniciar el servidor: %s\n" +msgid "%s: could not start server: %m\n" +msgstr "%s: no se pudo iniciar el servidor: %m\n" -#: pg_ctl.c:478 +#: pg_ctl.c:477 #, c-format -msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "%s: no se pudo iniciar el servidor debido a falla en setsid(): %s\n" +msgid "%s: could not start server due to setsid() failure: %m\n" +msgstr "%s: no se pudo iniciar el servidor debido a falla en setsid(): %m\n" -#: pg_ctl.c:548 +#: pg_ctl.c:547 #, c-format -msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s: no se pudo abrir el archivo de log «%s»: %s\n" +msgid "%s: could not open log file \"%s\": %m\n" +msgstr "%s: no se pudo abrir el archivo de log «%s»: %m\n" -#: pg_ctl.c:565 +#: pg_ctl.c:564 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: no se pudo iniciar el servidor: código de error %lu\n" -#: pg_ctl.c:782 +#: pg_ctl.c:781 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: no se puede establecer el límite de archivos de volcado;\n" "impedido por un límite duro\n" -#: pg_ctl.c:808 +#: pg_ctl.c:807 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: no se pudo leer el archivo «%s»\n" -#: pg_ctl.c:813 +#: pg_ctl.c:812 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: archivo de opciones «%s» debe tener exactamente una línea\n" -#: pg_ctl.c:855 pg_ctl.c:1039 pg_ctl.c:1107 +#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 #, c-format -msgid "%s: could not send stop signal (PID: %d): %s\n" -msgstr "%s: falló la señal de detención (PID: %d): %s\n" +msgid "%s: could not send stop signal (PID: %d): %m\n" +msgstr "%s: falló la señal de detención (PID: %d): %m\n" -#: pg_ctl.c:883 +#: pg_ctl.c:882 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "el programa «%s» es requerido por %s, pero no fue encontrado en el mismo directorio que «%s»\n" -#: pg_ctl.c:886 +#: pg_ctl.c:885 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "El programa «%s» fue encontrado por «%s», pero no es de la misma versión que %s\n" -#: pg_ctl.c:918 +#: pg_ctl.c:917 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: falló la creación de la base de datos\n" -#: pg_ctl.c:933 +#: pg_ctl.c:932 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: otro servidor puede estar en ejecución; tratando de iniciarlo de todas formas.\n" -#: pg_ctl.c:981 +#: pg_ctl.c:980 msgid "waiting for server to start..." msgstr "esperando que el servidor se inicie..." -#: pg_ctl.c:986 pg_ctl.c:1063 pg_ctl.c:1126 pg_ctl.c:1238 +#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 msgid " done\n" msgstr " listo\n" -#: pg_ctl.c:987 +#: pg_ctl.c:986 msgid "server started\n" msgstr "servidor iniciado\n" -#: pg_ctl.c:990 pg_ctl.c:996 pg_ctl.c:1243 +#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 msgid " stopped waiting\n" msgstr " abandonando la espera\n" -#: pg_ctl.c:991 +#: pg_ctl.c:990 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: el servidor no inició a tiempo\n" -#: pg_ctl.c:997 +#: pg_ctl.c:996 #, c-format msgid "" "%s: could not start server\n" @@ -219,44 +238,42 @@ msgstr "" "%s: no se pudo iniciar el servidor.\n" "Examine el registro del servidor.\n" -#: pg_ctl.c:1005 +#: pg_ctl.c:1004 msgid "server starting\n" msgstr "servidor iniciándose\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1147 pg_ctl.c:1186 pg_ctl.c:1267 +#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: el archivo de PID «%s» no existe\n" -#: pg_ctl.c:1025 pg_ctl.c:1085 pg_ctl.c:1148 pg_ctl.c:1187 pg_ctl.c:1268 +#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 msgid "Is server running?\n" msgstr "¿Está el servidor en ejecución?\n" -#: pg_ctl.c:1031 +#: pg_ctl.c:1030 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" -msgstr "" -"%s: no se puede detener el servidor;\n" -"un servidor en modo mono-usuario está en ejecución (PID: %d)\n" +msgstr "%s: no se puede detener el servidor; un servidor en modo mono-usuario está en ejecución (PID: %d)\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1044 msgid "server shutting down\n" msgstr "servidor deteniéndose\n" -#: pg_ctl.c:1051 pg_ctl.c:1112 +#: pg_ctl.c:1049 pg_ctl.c:1109 msgid "waiting for server to shut down..." msgstr "esperando que el servidor se detenga..." -#: pg_ctl.c:1055 pg_ctl.c:1117 +#: pg_ctl.c:1053 pg_ctl.c:1114 msgid " failed\n" msgstr " falló\n" -#: pg_ctl.c:1057 pg_ctl.c:1119 +#: pg_ctl.c:1055 pg_ctl.c:1116 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: el servidor no se detiene\n" -#: pg_ctl.c:1059 pg_ctl.c:1121 +#: pg_ctl.c:1057 pg_ctl.c:1118 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -264,243 +281,237 @@ msgstr "" "SUGERENCIA: La opción «-m fast» desconecta las sesiones inmediatamente\n" "en lugar de esperar que cada sesión finalice por sí misma.\n" -#: pg_ctl.c:1065 pg_ctl.c:1127 +#: pg_ctl.c:1063 pg_ctl.c:1124 msgid "server stopped\n" msgstr "servidor detenido\n" -#: pg_ctl.c:1086 +#: pg_ctl.c:1084 msgid "trying to start server anyway\n" msgstr "intentando iniciae el servidor de todas maneras\n" -#: pg_ctl.c:1095 +#: pg_ctl.c:1093 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" -msgstr "" -"%s: no se puede reiniciar el servidor;\n" -"un servidor en modo mono-usuario está en ejecución (PID: %d)\n" +msgstr "%s: no se puede reiniciar el servidor; un servidor en modo mono-usuario está en ejecución (PID: %d)\n" -#: pg_ctl.c:1098 pg_ctl.c:1157 +#: pg_ctl.c:1096 pg_ctl.c:1154 msgid "Please terminate the single-user server and try again.\n" msgstr "Por favor termine el servidor mono-usuario e intente nuevamente.\n" -#: pg_ctl.c:1131 +#: pg_ctl.c:1128 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: el proceso servidor antiguo (PID: %d) parece no estar\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1130 msgid "starting server anyway\n" msgstr "iniciando el servidor de todas maneras\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1151 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" -msgstr "" -"%s: no se puede recargar el servidor;\n" -"un servidor en modo mono-usuario está en ejecución (PID: %d)\n" +msgstr "%s: no se puede recargar el servidor; un servidor en modo mono-usuario está en ejecución (PID: %d)\n" -#: pg_ctl.c:1163 +#: pg_ctl.c:1160 #, c-format -msgid "%s: could not send reload signal (PID: %d): %s\n" -msgstr "%s: la señal de recarga falló (PID: %d): %s\n" +msgid "%s: could not send reload signal (PID: %d): %m\n" +msgstr "%s: no se pudo enviar señal de recarga (PID: %d): %m\n" -#: pg_ctl.c:1168 +#: pg_ctl.c:1165 msgid "server signaled\n" msgstr "se ha enviado una señal al servidor\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1190 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" -msgstr "" -"%s: no se puede promover el servidor;\n" -"un servidor en modo mono-usuario está en ejecución (PID: %d)\n" +msgstr "%s: no se puede promover el servidor; un servidor en modo mono-usuario está en ejecución (PID: %d)\n" -#: pg_ctl.c:1201 +#: pg_ctl.c:1198 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "" "%s: no se puede promover el servidor;\n" "el servidor no está en modo «standby»\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1208 #, c-format -msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "%s: no se pudo crear el archivo de señal de promoción «%s»: %s\n" +msgid "%s: could not create promote signal file \"%s\": %m\n" +msgstr "%s: no se pudo crear el archivo de señal de promoción «%s»: %m\n" -#: pg_ctl.c:1217 +#: pg_ctl.c:1214 #, c-format -msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "%s: no se pudo escribir al archivo de señal de promoción «%s»: %s\n" +msgid "%s: could not write promote signal file \"%s\": %m\n" +msgstr "%s: no se pudo escribir al archivo de señal de promoción «%s»: %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1222 #, c-format -msgid "%s: could not send promote signal (PID: %d): %s\n" -msgstr "%s: no se pudo enviar la señal de promoción (PID: %d): %s\n" +msgid "%s: could not send promote signal (PID: %d): %m\n" +msgstr "%s: no se pudo enviar la señal de promoción (PID: %d): %m\n" -#: pg_ctl.c:1228 +#: pg_ctl.c:1225 #, c-format -msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "%s: no se pudo eliminar el archivo de señal de promoción «%s»: %s\n" +msgid "%s: could not remove promote signal file \"%s\": %m\n" +msgstr "%s: no se pudo eliminar el archivo de señal de promoción «%s»: %m\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1232 msgid "waiting for server to promote..." msgstr "esperando que el servidor se promueva..." -#: pg_ctl.c:1239 +#: pg_ctl.c:1236 msgid "server promoted\n" msgstr "servidor promovido\n" -#: pg_ctl.c:1244 +#: pg_ctl.c:1241 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: el servidor no se promovió a tiempo\n" -#: pg_ctl.c:1250 +#: pg_ctl.c:1247 msgid "server promoting\n" msgstr "servidor promoviendo\n" -#: pg_ctl.c:1274 +#: pg_ctl.c:1271 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "%s: no se puede rotar el archivo de log; un servidor en modo mono-usuario está en ejecución (PID: %d)\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1281 #, c-format -msgid "%s: could not create log rotation signal file \"%s\": %s\n" -msgstr "%s: no se pudo crear el archivo de señal de rotación de log «%s»: %s\n" +msgid "%s: could not create log rotation signal file \"%s\": %m\n" +msgstr "%s: no se pudo crear el archivo de señal de rotación de log «%s»: %m\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1287 #, c-format -msgid "%s: could not write log rotation signal file \"%s\": %s\n" -msgstr "%s: no se pudo escribir al archivo de señal de rotación de log «%s»: %s\n" +msgid "%s: could not write log rotation signal file \"%s\": %m\n" +msgstr "%s: no se pudo escribir al archivo de señal de rotación de log «%s»: %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1295 #, c-format -msgid "%s: could not send log rotation signal (PID: %d): %s\n" -msgstr "%s: no se pudo enviar la señal de rotación de log (PID: %d): %s\n" +msgid "%s: could not send log rotation signal (PID: %d): %m\n" +msgstr "%s: no se pudo enviar la señal de rotación de log (PID: %d): %m\n" -#: pg_ctl.c:1301 +#: pg_ctl.c:1298 #, c-format -msgid "%s: could not remove log rotation signal file \"%s\": %s\n" -msgstr "%s: no se pudo eliminar el archivo de señal de rotación de log «%s»: %s\n" +msgid "%s: could not remove log rotation signal file \"%s\": %m\n" +msgstr "%s: no se pudo eliminar el archivo de señal de rotación de log «%s»: %m\n" -#: pg_ctl.c:1306 +#: pg_ctl.c:1303 msgid "server signaled to rotate log file\n" msgstr "se ha enviado una señal de rotación de log al servidor\n" -#: pg_ctl.c:1353 +#: pg_ctl.c:1350 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: un servidor en modo mono-usuario está en ejecución (PID: %d)\n" -#: pg_ctl.c:1367 +#: pg_ctl.c:1364 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: el servidor está en ejecución (PID: %d)\n" -#: pg_ctl.c:1383 +#: pg_ctl.c:1380 #, c-format msgid "%s: no server running\n" msgstr "%s: no hay servidor en ejecución\n" -#: pg_ctl.c:1400 +#: pg_ctl.c:1397 #, c-format -msgid "%s: could not send signal %d (PID: %d): %s\n" -msgstr "%s: no se pudo enviar la señal %d (PID: %d): %s\n" +msgid "%s: could not send signal %d (PID: %d): %m\n" +msgstr "%s: no se pudo enviar la señal %d (PID: %d): %m\n" -#: pg_ctl.c:1431 +#: pg_ctl.c:1428 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: no se pudo encontrar el ejecutable propio\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1438 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: no se pudo encontrar el ejecutable postgres\n" -#: pg_ctl.c:1511 pg_ctl.c:1545 +#: pg_ctl.c:1508 pg_ctl.c:1542 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: no se pudo abrir el gestor de servicios\n" -#: pg_ctl.c:1517 +#: pg_ctl.c:1514 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: el servicio «%s» ya está registrado\n" -#: pg_ctl.c:1528 +#: pg_ctl.c:1525 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: no se pudo registrar el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1551 +#: pg_ctl.c:1548 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: el servicio «%s» no ha sido registrado\n" -#: pg_ctl.c:1558 +#: pg_ctl.c:1555 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: no se pudo abrir el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1564 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: no se pudo dar de baja el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1651 msgid "Waiting for server startup...\n" msgstr "Esperando que el servidor se inicie...\n" -#: pg_ctl.c:1657 +#: pg_ctl.c:1654 msgid "Timed out waiting for server startup\n" msgstr "Se agotó el tiempo de espera al inicio del servidor\n" -#: pg_ctl.c:1661 +#: pg_ctl.c:1658 msgid "Server started and accepting connections\n" msgstr "Servidor iniciado y aceptando conexiones\n" -#: pg_ctl.c:1716 +#: pg_ctl.c:1713 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: no se pudo iniciar el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1789 +#: pg_ctl.c:1786 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" -#: pg_ctl.c:1803 +#: pg_ctl.c:1800 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" -#: pg_ctl.c:1829 +#: pg_ctl.c:1826 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1908 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: no se pudo obtener LUIDs para privilegios: código de error %lu\n" -#: pg_ctl.c:1919 pg_ctl.c:1934 +#: pg_ctl.c:1916 pg_ctl.c:1931 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: no se pudo obtener información de token: código de error %lu\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:1925 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria agotada\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:1955 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1963 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -510,17 +521,17 @@ msgstr "" "un servidor PostgreSQL.\n" "\n" -#: pg_ctl.c:1967 +#: pg_ctl.c:1964 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1965 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o OPCIONES]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1966 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -529,12 +540,12 @@ msgstr "" " %s start [-D DATADIR] [-l ARCHIVO] [-W] [-t SEGS] [-s]\n" " [-o OPCIONES] [-p RUTA] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1968 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATADIR] [-m MODO-DETENCIÓN] [-W] [-t SEGS] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1969 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -543,32 +554,32 @@ msgstr "" " %s restart [-D DATADIR] [-m MODO-DETENCIÓN] [-W] [-t SEGS] [-s]\n" " [-o OPCIONES]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1971 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1972 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:1976 +#: pg_ctl.c:1973 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATADIR] [-W] [-t SEGS] [-s]\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1974 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATADIR] [-s]\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1975 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NOMBRE-SEÑAL ID-DE-PROCESO\n" -#: pg_ctl.c:1980 +#: pg_ctl.c:1977 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -577,12 +588,12 @@ msgstr "" " %s register [-D DATADIR] [-N SERVICIO] [-U USUARIO] [-P PASSWORD]\n" " [-S TIPO-INICIO] [-e ORIGEN] [-W] [-t SEGS] [-o OPCIONES]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1979 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICIO]\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1982 #, c-format msgid "" "\n" @@ -591,52 +602,52 @@ msgstr "" "\n" "Opciones comunes:\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1983 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata DATADIR ubicación del área de almacenamiento de datos\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:1985 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e ORIGEN origen para el log de eventos cuando se ejecuta como servicio\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1987 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent mostrar sólo errores, no mensajes de información\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:1988 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEGS segundos a esperar cuando se use la opción -w\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:1989 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:1990 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait esperar hasta que la operación se haya completado (por omisión)\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1991 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait no esperar hasta que la operación se haya completado\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1992 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda, luego salir\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:1993 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Si la opción -D es omitida, se usa la variable de ambiente PGDATA.\n" -#: pg_ctl.c:1998 +#: pg_ctl.c:1995 #, c-format msgid "" "\n" @@ -645,24 +656,24 @@ msgstr "" "\n" "Opciones para inicio y reinicio:\n" -#: pg_ctl.c:2000 +#: pg_ctl.c:1997 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr "" " -c, --core-files permite que postgres produzca archivos\n" " de volcado (core)\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:1999 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files no aplicable en esta plataforma\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2001 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l --log=ARCHIVO guardar el registro del servidor en ARCHIVO.\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2002 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -671,12 +682,12 @@ msgstr "" " -o, --options=OPCIONES parámetros de línea de órdenes a pasar a postgres\n" " (ejecutable del servidor de PostgreSQL) o initdb\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:2004 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p RUTA-A-POSTGRES normalmente no es necesario\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2005 #, c-format msgid "" "\n" @@ -685,12 +696,12 @@ msgstr "" "\n" "Opciones para detener o reiniciar:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2006 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODO puede ser «smart», «fast» o «immediate»\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2008 #, c-format msgid "" "\n" @@ -699,24 +710,24 @@ msgstr "" "\n" "Modos de detención son:\n" -#: pg_ctl.c:2012 +#: pg_ctl.c:2009 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart salir después que todos los clientes se hayan desconectado\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2010 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast salir directamente, con apagado apropiado (por omisión)\n" -#: pg_ctl.c:2014 +#: pg_ctl.c:2011 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate salir sin apagado completo; se ejecutará recuperación\n" " en el próximo inicio\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2013 #, c-format msgid "" "\n" @@ -725,7 +736,7 @@ msgstr "" "\n" "Nombres de señales permitidos para kill:\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -734,35 +745,35 @@ msgstr "" "\n" "Opciones para registrar y dar de baja:\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2018 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr "" " -N SERVICIO nombre de servicio con el cual registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:2022 +#: pg_ctl.c:2019 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P CONTRASEÑA contraseña de la cuenta con la cual registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2020 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U USUARIO nombre de usuario de la cuenta con la cual\n" " registrar el servidor PostgreSQL\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2021 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr "" " -S TIPO-INICIO tipo de inicio de servicio con que registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2023 #, c-format msgid "" "\n" @@ -771,17 +782,17 @@ msgstr "" "\n" "Tipos de inicio del servicio son:\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2024 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto iniciar automáticamente al inicio del sistema (por omisión)\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2025 #, c-format msgid " demand start service on demand\n" msgstr " demand iniciar el servicio en demanda\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2028 #, c-format msgid "" "\n" @@ -790,37 +801,37 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2029 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2054 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: modo de apagado «%s» no reconocido\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2083 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: nombre de señal «%s» no reconocido\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2100 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: tipo de inicio «%s» no reconocido\n" -#: pg_ctl.c:2159 +#: pg_ctl.c:2156 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: no se pudo determinar el directorio de datos usando la orden «%s»\n" -#: pg_ctl.c:2182 +#: pg_ctl.c:2179 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: el archivo de control parece estar corrupto\n" -#: pg_ctl.c:2250 +#: pg_ctl.c:2247 #, c-format msgid "" "%s: cannot be run as root\n" @@ -831,32 +842,32 @@ msgstr "" "Por favor conéctese (usando, por ejemplo, «su») con un usuario no privilegiado,\n" "quien ejecutará el proceso servidor.\n" -#: pg_ctl.c:2333 +#: pg_ctl.c:2319 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: la opción -S no está soportada en esta plataforma\n" -#: pg_ctl.c:2370 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" - -#: pg_ctl.c:2396 +#: pg_ctl.c:2375 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: argumentos faltantes para envío de señal\n" -#: pg_ctl.c:2414 +#: pg_ctl.c:2393 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: modo de operación «%s» no reconocido\n" -#: pg_ctl.c:2424 +#: pg_ctl.c:2402 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" + +#: pg_ctl.c:2409 #, c-format msgid "%s: no operation specified\n" msgstr "%s: no se especificó operación\n" -#: pg_ctl.c:2445 +#: pg_ctl.c:2430 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: no se especificó directorio de datos y la variable PGDATA no está definida\n" diff --git a/src/bin/pg_ctl/po/fr.po b/src/bin/pg_ctl/po/fr.po index f5d95cd84a619..ea31cdbc395f9 100644 --- a/src/bin/pg_ctl/po/fr.po +++ b/src/bin/pg_ctl/po/fr.po @@ -10,10 +10,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 15\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-07-29 09:18+0000\n" -"PO-Revision-Date: 2023-07-29 22:45+0200\n" +"POT-Creation-Date: 2024-08-22 10:19+0000\n" +"PO-Revision-Date: 2024-09-16 16:28+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -21,40 +21,59 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" -#: ../../common/exec.c:172 +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "différence de l'ordre des octets" + +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "binaire « %s » invalide : %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "n'a pas pu lire le binaire « %s » : %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "n'a pas pu résoudre le chemin « %s » en sa forme absolue : %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "n'a pas pu exécuter la commande « %s » : %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "n'a pas pu lire à partir de la commande « %s » : %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "aucune donnée n'a été renvoyée par la commande « %s »" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "échec de %s() : %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "mémoire épuisée" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:791 ../../port/path.c:808 +#: ../../port/path.c:753 ../../port/path.c:790 ../../port/path.c:807 #, c-format msgid "out of memory\n" msgstr "mémoire épuisée\n" @@ -96,125 +115,125 @@ msgstr "le processus fils a quitté avec un statut %d non reconnu" #: ../../port/path.c:775 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "n'a pas pu obtenir le répertoire de travail : %s\n" +msgid "could not get current working directory: %m\n" +msgstr "n'a pas pu obtenir le répertoire de travail : %m\n" -#: pg_ctl.c:255 +#: pg_ctl.c:254 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s : le répertoire « %s » n'existe pas\n" -#: pg_ctl.c:258 +#: pg_ctl.c:257 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s : n'a pas pu accéder au répertoire « %s » : %m\n" -#: pg_ctl.c:271 +#: pg_ctl.c:270 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s : le répertoire « %s » n'est pas un répertoire d'instance\n" -#: pg_ctl.c:284 +#: pg_ctl.c:283 #, c-format -msgid "%s: could not open PID file \"%s\": %s\n" -msgstr "%s : n'a pas pu ouvrir le fichier de PID « %s » : %s\n" +msgid "%s: could not open PID file \"%s\": %m\n" +msgstr "%s : n'a pas pu ouvrir le fichier de PID « %s » : %m\n" -#: pg_ctl.c:293 +#: pg_ctl.c:292 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s : le fichier PID « %s » est vide\n" -#: pg_ctl.c:296 +#: pg_ctl.c:295 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s : données invalides dans le fichier de PID « %s »\n" -#: pg_ctl.c:458 pg_ctl.c:500 +#: pg_ctl.c:457 pg_ctl.c:499 #, c-format -msgid "%s: could not start server: %s\n" -msgstr "%s : n'a pas pu démarrer le serveur : %s\n" +msgid "%s: could not start server: %m\n" +msgstr "%s : n'a pas pu démarrer le serveur : %m\n" -#: pg_ctl.c:478 +#: pg_ctl.c:477 #, c-format -msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "%s : n'a pas pu démarrer le serveur à cause d'un échec de setsid() : %s\n" +msgid "%s: could not start server due to setsid() failure: %m\n" +msgstr "%s : n'a pas pu démarrer le serveur à cause d'un échec de setsid() : %m\n" -#: pg_ctl.c:548 +#: pg_ctl.c:547 #, c-format -msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %s\n" +msgid "%s: could not open log file \"%s\": %m\n" +msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %m\n" -#: pg_ctl.c:565 +#: pg_ctl.c:564 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s : n'a pas pu démarrer le serveur : code d'erreur %lu\n" -#: pg_ctl.c:782 +#: pg_ctl.c:781 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s : n'a pas pu initialiser la taille des fichiers core, ceci est interdit\n" "par une limite dure\n" -#: pg_ctl.c:808 +#: pg_ctl.c:807 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s : n'a pas pu lire le fichier « %s »\n" -#: pg_ctl.c:813 +#: pg_ctl.c:812 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s : le fichier d'options « %s » ne doit comporter qu'une seule ligne\n" -#: pg_ctl.c:855 pg_ctl.c:1039 pg_ctl.c:1107 +#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 #, c-format -msgid "%s: could not send stop signal (PID: %d): %s\n" -msgstr "%s : n'a pas pu envoyer le signal d'arrêt (PID : %d) : %s\n" +msgid "%s: could not send stop signal (PID: %d): %m\n" +msgstr "%s : n'a pas pu envoyer le signal d'arrêt (PID : %d) : %m\n" -#: pg_ctl.c:883 +#: pg_ctl.c:882 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé dans le même répertoire que « %s »\n" -#: pg_ctl.c:886 +#: pg_ctl.c:885 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "le programme « %s » a été trouvé par « %s » mais n'est pas de la même version que %s\n" -#: pg_ctl.c:918 +#: pg_ctl.c:917 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s : l'initialisation du système a échoué\n" -#: pg_ctl.c:933 +#: pg_ctl.c:932 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "" "%s : un autre serveur semble en cours d'exécution ; le démarrage du serveur\n" "va toutefois être tenté\n" -#: pg_ctl.c:981 +#: pg_ctl.c:980 msgid "waiting for server to start..." msgstr "en attente du démarrage du serveur..." -#: pg_ctl.c:986 pg_ctl.c:1063 pg_ctl.c:1126 pg_ctl.c:1238 +#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 msgid " done\n" msgstr " effectué\n" -#: pg_ctl.c:987 +#: pg_ctl.c:986 msgid "server started\n" msgstr "serveur démarré\n" -#: pg_ctl.c:990 pg_ctl.c:996 pg_ctl.c:1243 +#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 msgid " stopped waiting\n" msgstr " attente arrêtée\n" -#: pg_ctl.c:991 +#: pg_ctl.c:990 #, c-format msgid "%s: server did not start in time\n" msgstr "%s : le serveur ne s'est pas lancé à temps\n" -#: pg_ctl.c:997 +#: pg_ctl.c:996 #, c-format msgid "" "%s: could not start server\n" @@ -223,44 +242,44 @@ msgstr "" "%s : n'a pas pu démarrer le serveur\n" "Examinez le journal applicatif.\n" -#: pg_ctl.c:1005 +#: pg_ctl.c:1004 msgid "server starting\n" msgstr "serveur en cours de démarrage\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1147 pg_ctl.c:1186 pg_ctl.c:1267 +#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s : le fichier de PID « %s » n'existe pas\n" -#: pg_ctl.c:1025 pg_ctl.c:1085 pg_ctl.c:1148 pg_ctl.c:1187 pg_ctl.c:1268 +#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 msgid "Is server running?\n" msgstr "Le serveur est-il en cours d'exécution ?\n" -#: pg_ctl.c:1031 +#: pg_ctl.c:1030 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "" "%s : ne peut pas arrêter le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1044 msgid "server shutting down\n" msgstr "serveur en cours d'arrêt\n" -#: pg_ctl.c:1051 pg_ctl.c:1112 +#: pg_ctl.c:1049 pg_ctl.c:1109 msgid "waiting for server to shut down..." msgstr "en attente de l'arrêt du serveur..." -#: pg_ctl.c:1055 pg_ctl.c:1117 +#: pg_ctl.c:1053 pg_ctl.c:1114 msgid " failed\n" msgstr " a échoué\n" -#: pg_ctl.c:1057 pg_ctl.c:1119 +#: pg_ctl.c:1055 pg_ctl.c:1116 #, c-format msgid "%s: server does not shut down\n" msgstr "%s : le serveur ne s'est pas arrêté\n" -#: pg_ctl.c:1059 pg_ctl.c:1121 +#: pg_ctl.c:1057 pg_ctl.c:1118 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -268,243 +287,243 @@ msgstr "" "ASTUCE : l'option « -m fast » déconnecte immédiatement les sessions plutôt que\n" "d'attendre la déconnexion des sessions déjà présentes.\n" -#: pg_ctl.c:1065 pg_ctl.c:1127 +#: pg_ctl.c:1063 pg_ctl.c:1124 msgid "server stopped\n" msgstr "serveur arrêté\n" -#: pg_ctl.c:1086 +#: pg_ctl.c:1084 msgid "trying to start server anyway\n" msgstr "tentative de lancement du serveur malgré tout\n" -#: pg_ctl.c:1095 +#: pg_ctl.c:1093 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "" "%s : ne peut pas relancer le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1098 pg_ctl.c:1157 +#: pg_ctl.c:1096 pg_ctl.c:1154 msgid "Please terminate the single-user server and try again.\n" msgstr "Merci d'arrêter le serveur mono-utilisateur et de réessayer.\n" -#: pg_ctl.c:1131 +#: pg_ctl.c:1128 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s : l'ancien processus serveur (PID : %d) semble être parti\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1130 msgid "starting server anyway\n" msgstr "lancement du serveur malgré tout\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1151 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "" "%s : ne peut pas recharger le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1163 +#: pg_ctl.c:1160 #, c-format -msgid "%s: could not send reload signal (PID: %d): %s\n" -msgstr "%s : n'a pas pu envoyer le signal de rechargement (PID : %d) : %s\n" +msgid "%s: could not send reload signal (PID: %d): %m\n" +msgstr "%s : n'a pas pu envoyer le signal de rechargement (PID : %d) : %m\n" -#: pg_ctl.c:1168 +#: pg_ctl.c:1165 msgid "server signaled\n" msgstr "envoi d'un signal au serveur\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1190 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "" "%s : ne peut pas promouvoir le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1201 +#: pg_ctl.c:1198 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s : ne peut pas promouvoir le serveur ; le serveur n'est pas en standby\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1208 #, c-format -msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "%s : n'a pas pu créer le fichier « %s » signalant la promotion : %s\n" +msgid "%s: could not create promote signal file \"%s\": %m\n" +msgstr "%s : n'a pas pu créer le fichier « %s » signalant la promotion : %m\n" -#: pg_ctl.c:1217 +#: pg_ctl.c:1214 #, c-format -msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "%s : n'a pas pu écrire le fichier « %s » signalant la promotion : %s\n" +msgid "%s: could not write promote signal file \"%s\": %m\n" +msgstr "%s : n'a pas pu écrire le fichier « %s » signalant la promotion : %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1222 #, c-format -msgid "%s: could not send promote signal (PID: %d): %s\n" -msgstr "%s : n'a pas pu envoyer le signal de promotion (PID : %d) : %s\n" +msgid "%s: could not send promote signal (PID: %d): %m\n" +msgstr "%s : n'a pas pu envoyer le signal de promotion (PID : %d) : %m\n" -#: pg_ctl.c:1228 +#: pg_ctl.c:1225 #, c-format -msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "%s : n'a pas pu supprimer le fichier « %s » signalant la promotion : %s\n" +msgid "%s: could not remove promote signal file \"%s\": %m\n" +msgstr "%s : n'a pas pu supprimer le fichier « %s » signalant la promotion : %m\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1232 msgid "waiting for server to promote..." msgstr "en attente du serveur à promouvoir..." -#: pg_ctl.c:1239 +#: pg_ctl.c:1236 msgid "server promoted\n" msgstr "serveur promu\n" -#: pg_ctl.c:1244 +#: pg_ctl.c:1241 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s : le serveur ne s'est pas promu à temps\n" -#: pg_ctl.c:1250 +#: pg_ctl.c:1247 msgid "server promoting\n" msgstr "serveur en cours de promotion\n" -#: pg_ctl.c:1274 +#: pg_ctl.c:1271 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "" "%s : ne peut pas faire une rotation de fichier de traces ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1281 #, c-format -msgid "%s: could not create log rotation signal file \"%s\": %s\n" -msgstr "%s : n'a pas pu créer le fichier « %s » de demande de rotation des fichiers de trace : %s\n" +msgid "%s: could not create log rotation signal file \"%s\": %m\n" +msgstr "%s : n'a pas pu créer le fichier « %s » de demande de rotation des fichiers de trace : %m\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1287 #, c-format -msgid "%s: could not write log rotation signal file \"%s\": %s\n" -msgstr "%s : n'a pas pu écrire le fichier « %s » de demande de rotation des fichiers de trace : %s\n" +msgid "%s: could not write log rotation signal file \"%s\": %m\n" +msgstr "%s : n'a pas pu écrire le fichier « %s » de demande de rotation des fichiers de trace : %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1295 #, c-format -msgid "%s: could not send log rotation signal (PID: %d): %s\n" -msgstr "%s : n'a pas pu envoyer le signal de rotation des fichiers de trace (PID : %d) : %s\n" +msgid "%s: could not send log rotation signal (PID: %d): %m\n" +msgstr "%s : n'a pas pu envoyer le signal de rotation des fichiers de trace (PID : %d) : %m\n" -#: pg_ctl.c:1301 +#: pg_ctl.c:1298 #, c-format -msgid "%s: could not remove log rotation signal file \"%s\": %s\n" -msgstr "%s : n'a pas pu supprimer le fichier « %s » signalant la demande de rotation des fichiers de trace : %s\n" +msgid "%s: could not remove log rotation signal file \"%s\": %m\n" +msgstr "%s : n'a pas pu supprimer le fichier « %s » signalant la demande de rotation des fichiers de trace : %m\n" -#: pg_ctl.c:1306 +#: pg_ctl.c:1303 msgid "server signaled to rotate log file\n" msgstr "envoi d'un signal au serveur pour faire une rotation des traces\n" -#: pg_ctl.c:1353 +#: pg_ctl.c:1350 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s : le serveur mono-utilisateur est en cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1367 +#: pg_ctl.c:1364 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s : le serveur est en cours d'exécution (PID : %d)\n" -#: pg_ctl.c:1383 +#: pg_ctl.c:1380 #, c-format msgid "%s: no server running\n" msgstr "%s : aucun serveur en cours d'exécution\n" -#: pg_ctl.c:1400 +#: pg_ctl.c:1397 #, c-format -msgid "%s: could not send signal %d (PID: %d): %s\n" -msgstr "%s : n'a pas pu envoyer le signal %d (PID : %d) : %s\n" +msgid "%s: could not send signal %d (PID: %d): %m\n" +msgstr "%s : n'a pas pu envoyer le signal %d (PID : %d) : %m\n" -#: pg_ctl.c:1431 +#: pg_ctl.c:1428 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s : n'a pas pu trouver l'exécutable du programme\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1438 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s : n'a pas pu trouver l'exécutable postgres\n" -#: pg_ctl.c:1511 pg_ctl.c:1545 +#: pg_ctl.c:1508 pg_ctl.c:1542 #, c-format msgid "%s: could not open service manager\n" msgstr "%s : n'a pas pu ouvrir le gestionnaire de services\n" -#: pg_ctl.c:1517 +#: pg_ctl.c:1514 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s : le service « %s » est déjà enregistré\n" -#: pg_ctl.c:1528 +#: pg_ctl.c:1525 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu enregistrer le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1551 +#: pg_ctl.c:1548 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s : le service « %s » n'est pas enregistré\n" -#: pg_ctl.c:1558 +#: pg_ctl.c:1555 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu ouvrir le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1564 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu supprimer le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1651 msgid "Waiting for server startup...\n" msgstr "En attente du démarrage du serveur...\n" -#: pg_ctl.c:1657 +#: pg_ctl.c:1654 msgid "Timed out waiting for server startup\n" msgstr "Dépassement du délai pour le démarrage du serveur\n" -#: pg_ctl.c:1661 +#: pg_ctl.c:1658 msgid "Server started and accepting connections\n" msgstr "Serveur lancé et acceptant les connexions\n" -#: pg_ctl.c:1716 +#: pg_ctl.c:1713 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu démarrer le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1789 +#: pg_ctl.c:1786 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n" -#: pg_ctl.c:1803 +#: pg_ctl.c:1800 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" -#: pg_ctl.c:1829 +#: pg_ctl.c:1826 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1908 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s : n'a pas pu obtenir les LUID pour les droits : code d'erreur %lu\n" -#: pg_ctl.c:1919 pg_ctl.c:1934 +#: pg_ctl.c:1916 pg_ctl.c:1931 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s : n'a pas pu obtenir l'information sur le jeton : code d'erreur %lu\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:1925 #, c-format msgid "%s: out of memory\n" msgstr "%s : mémoire épuisée\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:1955 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1963 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -514,17 +533,17 @@ msgstr "" "PostgreSQL.\n" "\n" -#: pg_ctl.c:1967 +#: pg_ctl.c:1964 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1965 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D RÉP_DONNÉES] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1966 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -533,12 +552,12 @@ msgstr "" " %s start [-D RÉP_DONNÉES] [-l FICHIER] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-p CHEMIN] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1968 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D RÉP_DONNÉES] [-m MODE_ARRÊT] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1969 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -547,32 +566,32 @@ msgstr "" " %s restart [-D RÉP_DONNÉES] [-m MODE_ARRÊT] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1971 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D RÉP_DONNÉES] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1972 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D RÉP_DONNÉES]\n" -#: pg_ctl.c:1976 +#: pg_ctl.c:1973 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D RÉP_DONNÉES] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1974 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D RÉP_DONNÉES] [-s]\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1975 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NOM_SIGNAL PID\n" -#: pg_ctl.c:1980 +#: pg_ctl.c:1977 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -581,12 +600,12 @@ msgstr "" " %s register [-D RÉP_DONNÉES] [-N NOM_SERVICE] [-U NOM_UTILISATEUR] [-P MOT_DE_PASSE]\n" " [-S TYPE_DÉMARRAGE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1979 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N NOM_SERVICE]\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1982 #, c-format msgid "" "\n" @@ -595,58 +614,58 @@ msgstr "" "\n" "Options générales :\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1983 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=RÉP_DONNÉES emplacement du répertoire des données de l'instance\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:1985 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr "" " -e SOURCE source de l'événement pour la trace lors de\n" " l'exécution en tant que service\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1987 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent affiche uniquement les erreurs, aucun message\n" " d'informations\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:1988 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr "" " -t, --timeout=SECS durée en secondes à attendre lors de l'utilisation\n" " de l'option -w\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:1989 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:1990 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait attend la fin de l'opération (par défaut)\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1991 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait n'attend pas la fin de l'opération\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1992 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:1993 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Si l'option -D est omise, la variable d'environnement PGDATA est utilisée.\n" -#: pg_ctl.c:1998 +#: pg_ctl.c:1995 #, c-format msgid "" "\n" @@ -655,22 +674,22 @@ msgstr "" "\n" "Options pour le démarrage ou le redémarrage :\n" -#: pg_ctl.c:2000 +#: pg_ctl.c:1997 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files autorise postgres à produire des fichiers core\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:1999 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files non applicable à cette plateforme\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2001 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=FICHIER écrit (ou ajoute) le journal du serveur dans FICHIER\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2002 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -680,12 +699,12 @@ msgstr "" " postgres (exécutable du serveur PostgreSQL)\n" " ou à initdb\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:2004 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p CHEMIN_POSTGRES normalement pas nécessaire\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2005 #, c-format msgid "" "\n" @@ -694,14 +713,14 @@ msgstr "" "\n" "Options pour l'arrêt ou le redémarrage :\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2006 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=MODE MODE peut valoir « smart », « fast » ou\n" " « immediate »\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2008 #, c-format msgid "" "\n" @@ -710,24 +729,24 @@ msgstr "" "\n" "Les modes d'arrêt sont :\n" -#: pg_ctl.c:2012 +#: pg_ctl.c:2009 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart quitte après déconnexion de tous les clients\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2010 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast quitte directement, et arrête correctement (par défaut)\n" -#: pg_ctl.c:2014 +#: pg_ctl.c:2011 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate quitte sans arrêt complet ; entraîne une restauration au démarrage\n" " suivant\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2013 #, c-format msgid "" "\n" @@ -736,7 +755,7 @@ msgstr "" "\n" "Signaux autorisés pour kill :\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -745,35 +764,35 @@ msgstr "" "\n" "Options d'enregistrement ou de dés-enregistrement :\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2018 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr "" " -N NOM_SERVICE nom du service utilisé pour l'enregistrement du\n" " serveur PostgreSQL\n" -#: pg_ctl.c:2022 +#: pg_ctl.c:2019 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P MOT_DE_PASSE mot de passe du compte utilisé pour\n" " l'enregistrement du serveur PostgreSQL\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2020 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U NOM_UTILISATEUR nom de l'utilisateur du compte utilisé pour\n" " l'enregistrement du serveur PostgreSQL\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2021 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr "" " -S TYPE_DÉMARRAGE type de démarrage du service pour enregistrer le\n" " serveur PostgreSQL\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2023 #, c-format msgid "" "\n" @@ -782,19 +801,19 @@ msgstr "" "\n" "Les types de démarrage sont :\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2024 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr "" " auto démarre le service automatiquement lors du démarrage du système\n" " (par défaut)\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2025 #, c-format msgid " demand start service on demand\n" msgstr " demand démarre le service à la demande\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2028 #, c-format msgid "" "\n" @@ -803,37 +822,37 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2029 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2054 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s : mode d'arrêt non reconnu « %s »\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2083 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s : signal non reconnu « %s »\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2100 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s : type de redémarrage « %s » non reconnu\n" -#: pg_ctl.c:2159 +#: pg_ctl.c:2156 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s : n'a pas déterminer le répertoire des données en utilisant la commande « %s »\n" -#: pg_ctl.c:2182 +#: pg_ctl.c:2179 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s : le fichier de contrôle semble corrompu\n" -#: pg_ctl.c:2250 +#: pg_ctl.c:2247 #, c-format msgid "" "%s: cannot be run as root\n" @@ -844,170 +863,34 @@ msgstr "" "Connectez-vous (par exemple en utilisant « su ») sous l'utilisateur (non\n" " privilégié) qui sera propriétaire du processus serveur.\n" -#: pg_ctl.c:2333 +#: pg_ctl.c:2319 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s : option -S non supportée sur cette plateforme\n" -#: pg_ctl.c:2370 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" - -#: pg_ctl.c:2396 +#: pg_ctl.c:2375 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s : arguments manquant pour le mode kill\n" -#: pg_ctl.c:2414 +#: pg_ctl.c:2393 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s : mode d'opération « %s » non reconnu\n" -#: pg_ctl.c:2424 +#: pg_ctl.c:2402 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" + +#: pg_ctl.c:2409 #, c-format msgid "%s: no operation specified\n" msgstr "%s : aucune opération indiquée\n" -#: pg_ctl.c:2445 +#: pg_ctl.c:2430 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "" "%s : aucun répertoire de bases de données indiqué et variable\n" "d'environnement PGDATA non initialisée\n" - -#~ msgid "" -#~ "\n" -#~ "%s: -w option cannot use a relative socket directory specification\n" -#~ msgstr "" -#~ "\n" -#~ "%s : l'option -w ne peut pas utiliser un chemin relatif vers le répertoire de\n" -#~ "la socket\n" - -#~ msgid "" -#~ "\n" -#~ "%s: -w option is not supported when starting a pre-9.1 server\n" -#~ msgstr "" -#~ "\n" -#~ "%s : l'option -w n'est pas supportée lors du démarrage d'un serveur pré-9.1\n" - -#~ msgid "" -#~ "\n" -#~ "%s: this data directory appears to be running a pre-existing postmaster\n" -#~ msgstr "" -#~ "\n" -#~ "%s : ce répertoire des données semble être utilisé par un postmaster déjà existant\n" - -#~ msgid "" -#~ "\n" -#~ "Options for stop, restart, or promote:\n" -#~ msgstr "" -#~ "\n" -#~ "Options pour l'arrêt, le redémarrage ou la promotion :\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" - -#~ msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" -#~ msgstr "" -#~ " %s start [-w] [-t SECS] [-D RÉP_DONNÉES] [-s] [-l NOM_FICHIER]\n" -#~ " [-o \"OPTIONS\"]\n" - -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" - -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" - -#~ msgid "" -#~ "%s is a utility to start, stop, restart, reload configuration files,\n" -#~ "report the status of a PostgreSQL server, or signal a PostgreSQL process.\n" -#~ "\n" -#~ msgstr "" -#~ "%s est un outil qui permet de démarrer, arrêter, redémarrer, recharger les\n" -#~ "les fichiers de configuration, rapporter le statut d'un serveur PostgreSQL\n" -#~ "ou d'envoyer un signal à un processus PostgreSQL\n" -#~ "\n" - -#~ msgid "%s: could not create log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le fichier de traces « %s » : %s\n" - -#~ msgid "%s: could not open process token: %lu\n" -#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : %lu\n" - -#~ msgid "%s: could not start server: exit code was %d\n" -#~ msgstr "%s : n'a pas pu démarrer le serveur : le code de sortie est %d\n" - -#~ msgid "%s: could not wait for server because of misconfiguration\n" -#~ msgstr "%s : n'a pas pu attendre le serveur à cause d'une mauvaise configuration\n" - -#~ msgid "" -#~ "(The default is to wait for shutdown, but not for start or restart.)\n" -#~ "\n" -#~ msgstr "" -#~ "(Le comportement par défaut attend l'arrêt, pas le démarrage ou le\n" -#~ "redémarrage.)\n" -#~ "\n" - -#, c-format -#~ msgid "" -#~ "The program \"%s\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé\n" -#~ "dans le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation.\n" - -#, c-format -#~ msgid "" -#~ "The program \"%s\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Le programme « %s » a été trouvé par « %s »\n" -#~ "mais n'est pas de la même version que %s.\n" -#~ "Vérifiez votre installation.\n" - -#~ msgid "" -#~ "WARNING: online backup mode is active\n" -#~ "Shutdown will not complete until pg_stop_backup() is called.\n" -#~ "\n" -#~ msgstr "" -#~ "ATTENTION : le mode de sauvegarde en ligne est activé.\n" -#~ "L'arrêt ne surviendra qu'au moment où pg_stop_backup() sera appelé.\n" -#~ "\n" - -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" - -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" - -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %m" - -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %s" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "n'a pas pu identifier le répertoire courant : %m" - -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" - -#, c-format -#~ msgid "could not read symbolic link \"%s\": %m" -#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %m" - -#~ msgid "pclose failed: %m" -#~ msgstr "échec de pclose : %m" - -#~ msgid "server is still starting up\n" -#~ msgstr "le serveur est toujours en cours de démarrage\n" diff --git a/src/bin/pg_ctl/po/ja.po b/src/bin/pg_ctl/po/ja.po index 892da976cada2..77c2d6ba2f16c 100644 --- a/src/bin/pg_ctl/po/ja.po +++ b/src/bin/pg_ctl/po/ja.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL 17)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-03-13 10:06+0900\n" -"PO-Revision-Date: 2024-03-13 10:29+0900\n" +"POT-Creation-Date: 2024-07-19 09:21+0900\n" +"PO-Revision-Date: 2024-07-19 09:52+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -22,6 +22,10 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.8.13\n" +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "バイトオーダが合っていません" + #: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" @@ -113,118 +117,122 @@ msgstr "子プロセスが未知のステータス%dで終了しました" msgid "could not get current working directory: %m\n" msgstr "現在の作業ディレクトリを取得できませんでした: %m\n" -#: pg_ctl.c:254 +#: pg_ctl.c:255 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: ディレクトリ \"%s\" は存在しません\n" -#: pg_ctl.c:257 +#: pg_ctl.c:258 #, c-format msgid "%s: could not access directory \"%s\": %m\n" msgstr "%s: ディレクトリ\"%s\"にアクセスできませんでした: %m\n" -#: pg_ctl.c:270 +#: pg_ctl.c:271 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: ディレクトリ\"%s\"はデータベースクラスタディレクトリではありません\n" -#: pg_ctl.c:283 +#: pg_ctl.c:284 #, c-format msgid "%s: could not open PID file \"%s\": %m\n" msgstr "%s: PIDファイル\"%s\"をオープンできませんでした: %m\n" -#: pg_ctl.c:292 +#: pg_ctl.c:293 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: PIDファイル\"%s\"が空です\n" -#: pg_ctl.c:295 +#: pg_ctl.c:296 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: PIDファイル\"%s\"内に無効なデータがあります\n" -#: pg_ctl.c:457 pg_ctl.c:499 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %m\n" msgstr "%s: サーバーを起動できませんでした: %m\n" -#: pg_ctl.c:477 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %m\n" msgstr "%s: setsid()に失敗したためサーバーを起動できませんでした: %m\n" -#: pg_ctl.c:547 +#: pg_ctl.c:548 #, c-format msgid "%s: could not open log file \"%s\": %m\n" msgstr "%s: ログファイル \"%s\" をオープンできませんでした: %m\n" -#: pg_ctl.c:564 +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: サーバーの起動に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:781 +#: pg_ctl.c:789 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: コアファイルのサイズ制限を設定できません:固定の制限により許されていません\n" -#: pg_ctl.c:807 +#: pg_ctl.c:815 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: ファイル\"%s\"を読み取ることに失敗しました\n" -#: pg_ctl.c:812 +#: pg_ctl.c:820 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: オプションファイル\"%s\"は1行のみでなければなりません\n" -#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 +#: pg_ctl.c:862 pg_ctl.c:1050 pg_ctl.c:1117 #, c-format msgid "%s: could not send stop signal (PID: %d): %m\n" msgstr "%s: 停止シグナルを送信できませんでした。(PID: %d): %m\n" -#: pg_ctl.c:882 +#: pg_ctl.c:890 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "%2$sにはプログラム\"%1$s\"が必要ですが、\"%3$s\"と同じディレクトリにありませんでした\n" -#: pg_ctl.c:885 +#: pg_ctl.c:893 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じバージョンではありませんでした\n" -#: pg_ctl.c:917 +#: pg_ctl.c:925 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: データベースシステムが初期化に失敗しました\n" -#: pg_ctl.c:932 +#: pg_ctl.c:940 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: 他のサーバーが動作中の可能性がありますが、とにかくpostmasterの起動を試みます。\n" -#: pg_ctl.c:980 +#: pg_ctl.c:988 msgid "waiting for server to start..." msgstr "サーバーの起動完了を待っています..." -#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 +#: pg_ctl.c:993 pg_ctl.c:1003 pg_ctl.c:1073 pg_ctl.c:1135 pg_ctl.c:1247 msgid " done\n" msgstr "完了\n" -#: pg_ctl.c:986 +#: pg_ctl.c:994 msgid "server started\n" msgstr "サーバー起動完了\n" -#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 +#: pg_ctl.c:997 pg_ctl.c:1007 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " 待機処理が停止されました\n" -#: pg_ctl.c:990 +#: pg_ctl.c:998 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: サーバーは時間内に起動しませんでした\n" -#: pg_ctl.c:996 +#: pg_ctl.c:1004 +msgid "server shut down because of recovery target settings\n" +msgstr "リカバリ目標設定によりシャットダウンしました\n" + +#: pg_ctl.c:1008 #, c-format msgid "" "%s: could not start server\n" @@ -233,42 +241,42 @@ msgstr "" "%s: サーバーを起動できませんでした。\n" "ログ出力を確認してください。\n" -#: pg_ctl.c:1004 +#: pg_ctl.c:1016 msgid "server starting\n" msgstr "サーバーは起動中です。\n" -#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 +#: pg_ctl.c:1035 pg_ctl.c:1093 pg_ctl.c:1156 pg_ctl.c:1195 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PIDファイル\"%s\"がありません\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 +#: pg_ctl.c:1036 pg_ctl.c:1095 pg_ctl.c:1157 pg_ctl.c:1196 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "サーバーが動作していますか?\n" -#: pg_ctl.c:1030 +#: pg_ctl.c:1042 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "%s: サーバーを停止できません。シングルユーザーサーバー(PID: %d)が動作しています。\n" -#: pg_ctl.c:1044 +#: pg_ctl.c:1056 msgid "server shutting down\n" msgstr "サーバーの停止中です\n" -#: pg_ctl.c:1049 pg_ctl.c:1109 +#: pg_ctl.c:1061 pg_ctl.c:1121 msgid "waiting for server to shut down..." msgstr "サーバー停止処理の完了を待っています..." -#: pg_ctl.c:1053 pg_ctl.c:1114 +#: pg_ctl.c:1065 pg_ctl.c:1126 msgid " failed\n" msgstr "失敗しました\n" -#: pg_ctl.c:1055 pg_ctl.c:1116 +#: pg_ctl.c:1067 pg_ctl.c:1128 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: サーバーは停止していません\n" -#: pg_ctl.c:1057 pg_ctl.c:1118 +#: pg_ctl.c:1069 pg_ctl.c:1130 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -276,252 +284,252 @@ msgstr "" "ヒント: \"-m fast\"オプションは、セッション切断が始まるまで待機するのではなく\n" "即座にセッションを切断します。\n" -#: pg_ctl.c:1063 pg_ctl.c:1124 +#: pg_ctl.c:1075 pg_ctl.c:1136 msgid "server stopped\n" msgstr "サーバーは停止しました\n" -#: pg_ctl.c:1084 +#: pg_ctl.c:1096 msgid "trying to start server anyway\n" msgstr "とにかくサーバーの起動を試みます\n" -#: pg_ctl.c:1093 +#: pg_ctl.c:1105 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "%s: サーバーを再起動できません。シングルユーザーサーバー(PID: %d)が動作中です。\n" -#: pg_ctl.c:1096 pg_ctl.c:1154 +#: pg_ctl.c:1108 pg_ctl.c:1166 msgid "Please terminate the single-user server and try again.\n" msgstr "シングルユーザーサーバーを終了させてから、再度実行してください\n" -#: pg_ctl.c:1128 +#: pg_ctl.c:1140 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: 古いサーバープロセス(PID: %d)が動作していないようです\n" -#: pg_ctl.c:1130 +#: pg_ctl.c:1142 msgid "starting server anyway\n" msgstr "とにかくサーバーを起動しています\n" -#: pg_ctl.c:1151 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "%s: サーバーをリロードできません。シングルユーザーサーバー(PID: %d)が動作中です\n" -#: pg_ctl.c:1160 +#: pg_ctl.c:1172 #, c-format msgid "%s: could not send reload signal (PID: %d): %m\n" msgstr "%s: リロードシグナルを送信できませんでした。(PID: %d): %m\n" -#: pg_ctl.c:1165 +#: pg_ctl.c:1177 msgid "server signaled\n" msgstr "サーバーにシグナルを送信しました\n" -#: pg_ctl.c:1190 +#: pg_ctl.c:1202 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "%s: サーバーを昇格できません; シングルユーザーサーバー(PID: %d)が動作中です\n" -#: pg_ctl.c:1198 +#: pg_ctl.c:1210 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: サーバーを昇格できません; サーバーはスタンバイモードではありません\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1220 #, c-format msgid "%s: could not create promote signal file \"%s\": %m\n" msgstr "%s: 昇格指示ファイル\"%s\"を作成できませんでした: %m\n" -#: pg_ctl.c:1214 +#: pg_ctl.c:1226 #, c-format msgid "%s: could not write promote signal file \"%s\": %m\n" msgstr "%s: 昇格指示ファイル\"%s\"に書き込めませんでした: %m\n" -#: pg_ctl.c:1222 +#: pg_ctl.c:1234 #, c-format msgid "%s: could not send promote signal (PID: %d): %m\n" msgstr "%s: 昇格シグナルを送信できませんでした (PID: %d): %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1237 #, c-format msgid "%s: could not remove promote signal file \"%s\": %m\n" msgstr "%s: 昇格指示ファイル\"%s\"の削除に失敗しました: %m\n" -#: pg_ctl.c:1232 +#: pg_ctl.c:1244 msgid "waiting for server to promote..." msgstr "サーバーの昇格を待っています..." -#: pg_ctl.c:1236 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "サーバーは昇格しました\n" -#: pg_ctl.c:1241 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: サーバーは時間内に昇格しませんでした\n" -#: pg_ctl.c:1247 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "サーバーを昇格中です\n" -#: pg_ctl.c:1271 +#: pg_ctl.c:1283 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "%s: ログをローテートできません; シングルユーザーサーバーが動作中です (PID: %d)\n" -#: pg_ctl.c:1281 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %m\n" msgstr "%s: ログローテート指示ファイル\"%s\"を作成できませんでした: %m\n" -#: pg_ctl.c:1287 +#: pg_ctl.c:1299 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %m\n" msgstr "%s: ログローテート指示ファイル\"%s\"に書き込めきませんでした: %m\n" -#: pg_ctl.c:1295 +#: pg_ctl.c:1307 #, c-format msgid "%s: could not send log rotation signal (PID: %d): %m\n" msgstr "%s: ログローテートシグナルを送信できませんでした (PID: %d): %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1310 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %m\n" msgstr "%s: ログローテート指示ファイル\"%s\"の削除に失敗しました: %m\n" -#: pg_ctl.c:1303 +#: pg_ctl.c:1315 msgid "server signaled to rotate log file\n" msgstr "サーバーがログローテートをシグナルされました\n" -#: pg_ctl.c:1350 +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: シングルユーザーサーバーが動作中です(PID: %d)\n" -#: pg_ctl.c:1364 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: サーバーが動作中です(PID: %d)\n" -#: pg_ctl.c:1380 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: サーバーが動作していません\n" -#: pg_ctl.c:1397 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %d): %m\n" msgstr "%s: シグナル%dを送信できませんでした(PID: %d): %m\n" -#: pg_ctl.c:1428 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: 本プログラムの実行ファイルの検索に失敗しました\n" -#: pg_ctl.c:1438 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: postgres の実行ファイルが見つかりません\n" -#: pg_ctl.c:1508 pg_ctl.c:1542 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: サービスマネージャのオープンに失敗しました\n" -#: pg_ctl.c:1514 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: サービス\\\"%s\\\"は登録済みです\n" -#: pg_ctl.c:1525 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"の登録に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1548 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: サービス\"%s\"は登録されていません\n" -#: pg_ctl.c:1555 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"のオープンに失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1564 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"の登録削除に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1651 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "サーバーの起動完了を待っています...\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "サーバーの起動待機がタイムアウトしました\n" -#: pg_ctl.c:1658 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "サーバーは起動し、接続を受け付けています\n" -#: pg_ctl.c:1713 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"の起動に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1786 +#: pg_ctl.c:1798 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: プロセストークンをオープンできませんでした: エラーコード %lu\n" -#: pg_ctl.c:1800 +#: pg_ctl.c:1812 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: SIDを割り当てられませんでした: エラーコード %lu\n" -#: pg_ctl.c:1826 +#: pg_ctl.c:1838 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: 制限付きトークンを作成できませんでした: エラーコード %lu\n" -#: pg_ctl.c:1908 +#: pg_ctl.c:1920 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: 権限の LUID を取得できません: エラーコード %lu\n" -#: pg_ctl.c:1916 pg_ctl.c:1931 +#: pg_ctl.c:1928 pg_ctl.c:1943 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: トークン情報を取得できませんでした: エラーコード %lu\n" -#: pg_ctl.c:1925 +#: pg_ctl.c:1937 #, c-format msgid "%s: out of memory\n" msgstr "%s: メモリ不足です\n" -#: pg_ctl.c:1955 +#: pg_ctl.c:1967 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を実行してください。\n" -#: pg_ctl.c:1963 +#: pg_ctl.c:1975 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" "\n" msgstr "%sはPostgreSQLサーバーの初期化、起動、停止、制御を行うユーティリティです。\n" -#: pg_ctl.c:1964 +#: pg_ctl.c:1976 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_ctl.c:1965 +#: pg_ctl.c:1977 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1978 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -530,12 +538,12 @@ msgstr "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-p PATH] [-c]\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1980 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1981 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -544,32 +552,32 @@ msgstr "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1983 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1984 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:1973 +#: pg_ctl.c:1985 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1986 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATADIR] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1987 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1989 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -578,12 +586,12 @@ msgstr "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" " [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:1991 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICENAME]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1994 #, c-format msgid "" "\n" @@ -592,52 +600,52 @@ msgstr "" "\n" "共通のオプション:\n" -#: pg_ctl.c:1983 +#: pg_ctl.c:1995 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DATADIR データベース格納領域の場所\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1997 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e SOURCE サービスとして起動させたときのログのイベントソース\n" -#: pg_ctl.c:1987 +#: pg_ctl.c:1999 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent エラーメッセージのみを表示、情報メッセージは表示しない\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:2000 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SECS -wオプションを使用する時に待機する秒数\n" -#: pg_ctl.c:1989 +#: pg_ctl.c:2001 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:2002 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait 操作が完了するまで待機 (デフォルト)\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:2003 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait 作業の完了を待たない\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:2004 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:2005 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "-Dオプションの省略時はPGDATA環境変数が使用されます。\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:2007 #, c-format msgid "" "\n" @@ -646,22 +654,22 @@ msgstr "" "\n" "起動、再起動のオプション\n" -#: pg_ctl.c:1997 +#: pg_ctl.c:2009 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files postgresのコアファイル生成を許可\n" -#: pg_ctl.c:1999 +#: pg_ctl.c:2011 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files このプラットフォームでは適用されない\n" -#: pg_ctl.c:2001 +#: pg_ctl.c:2013 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log FILENAME サーバーログをFILENAMEへ書き込む(または追加する)\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:2014 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -670,12 +678,12 @@ msgstr "" " -o, --options=OPTIONS postgres(PostgreSQLサーバー実行ファイル)または\n" " initdb に渡すコマンドラインオプション\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2016 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PATH-TO-POSTGRES 通常は不要\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -684,12 +692,12 @@ msgstr "" "\n" "停止、再起動のオプション\n" -#: pg_ctl.c:2006 +#: pg_ctl.c:2018 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODE MODEは\"smart\"、\"fast\"、\"immediate\"のいずれか\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2020 #, c-format msgid "" "\n" @@ -698,22 +706,22 @@ msgstr "" "\n" "シャットダウンモードは以下の通り:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2021 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart 全クライアントの接続切断後に停止\n" -#: pg_ctl.c:2010 +#: pg_ctl.c:2022 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast 適切な手続きで直ちに停止(デフォルト)\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2023 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr " immediate 適切な手続き抜きで停止; 再起動時にはリカバリが実行される\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2025 #, c-format msgid "" "\n" @@ -722,7 +730,7 @@ msgstr "" "\n" "killモードで利用できるシグナル名:\n" -#: pg_ctl.c:2017 +#: pg_ctl.c:2029 #, c-format msgid "" "\n" @@ -731,27 +739,27 @@ msgstr "" "\n" "登録、登録解除のオプション:\n" -#: pg_ctl.c:2018 +#: pg_ctl.c:2030 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N SERVICENAME PostgreSQLサーバーを登録する際のサービス名\n" -#: pg_ctl.c:2019 +#: pg_ctl.c:2031 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD PostgreSQLサーバーを登録するためのアカウントのパスワード\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2032 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME PostgreSQLサーバーを登録するためのアカウント名\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2033 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S START-TYPE PostgreSQLサーバーを登録する際のサービス起動タイプ\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2035 #, c-format msgid "" "\n" @@ -760,17 +768,17 @@ msgstr "" "\n" "起動タイプは以下の通り:\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2036 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto システムの起動時にサービスを自動的に開始(デフォルト)\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2037 #, c-format msgid " demand start service on demand\n" msgstr " demand 要求に応じてサービスを開始\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2040 #, c-format msgid "" "\n" @@ -779,37 +787,37 @@ msgstr "" "\n" "バグは<%s>に報告してください。\n" -#: pg_ctl.c:2029 +#: pg_ctl.c:2041 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2066 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: 不正なシャットダウンモード\"%s\"\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2095 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: 不正なシグナル名\"%s\"\n" -#: pg_ctl.c:2100 +#: pg_ctl.c:2112 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: 不正な起動タイプ\"%s\"\n" -#: pg_ctl.c:2156 +#: pg_ctl.c:2168 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: コマンド\"%s\"を使用するデータディレクトリを決定できませんでした\n" -#: pg_ctl.c:2179 +#: pg_ctl.c:2191 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: 制御ファイルが壊れているようです\n" -#: pg_ctl.c:2247 +#: pg_ctl.c:2259 #, c-format msgid "" "%s: cannot be run as root\n" @@ -820,32 +828,32 @@ msgstr "" "サーバープロセスの所有者となる(非特権)ユーザーとして(\"su\"などを使用して)\n" "ログインしてください。\n" -#: pg_ctl.c:2319 +#: pg_ctl.c:2331 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: -Sオプションはこのプラットフォームでサポートされていません\n" -#: pg_ctl.c:2375 +#: pg_ctl.c:2387 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: killモード用の引数がありません\n" -#: pg_ctl.c:2393 +#: pg_ctl.c:2405 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: 操作モード\"%s\"は不明です\n" -#: pg_ctl.c:2402 +#: pg_ctl.c:2414 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: コマンドライン引数が多すぎます(先頭は\"%s\")\n" -#: pg_ctl.c:2409 +#: pg_ctl.c:2421 #, c-format msgid "%s: no operation specified\n" msgstr "%s: 操作モードが指定されていません\n" -#: pg_ctl.c:2430 +#: pg_ctl.c:2442 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: データベースの指定も、PGDATA環境変数の設定もありません\n" diff --git a/src/bin/pg_ctl/po/ka.po b/src/bin/pg_ctl/po/ka.po index fe7004788ae2d..5500c71f6d9b1 100644 --- a/src/bin/pg_ctl/po/ka.po +++ b/src/bin/pg_ctl/po/ka.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-03-13 00:49+0000\n" -"PO-Revision-Date: 2024-03-13 02:04+0100\n" +"POT-Creation-Date: 2025-02-27 09:50+0000\n" +"PO-Revision-Date: 2025-02-27 12:52+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,7 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" + +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "ბაიტების მიმდევრობა არ ემთხვევა" #: ../../common/exec.c:174 #, c-format @@ -38,33 +42,33 @@ msgstr "გასაშვებად ფაილის \"%s\" პოვნა msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "ბილიკის (\"%s\") აბსოლუტურ ფორმაში ამოხსნის შეცდომა: %m" -#: ../../common/exec.c:382 +#: ../../common/exec.c:363 #, c-format msgid "could not execute command \"%s\": %m" msgstr "ბრძანების (\"%s\") შესრულების შეცდომა: %m" -#: ../../common/exec.c:394 +#: ../../common/exec.c:375 #, c-format msgid "could not read from command \"%s\": %m" msgstr "ბრძანებიდან \"%s\" წაკითხვის შეცდომა: %m" -#: ../../common/exec.c:397 +#: ../../common/exec.c:378 #, c-format msgid "no data was returned by command \"%s\"" msgstr "ბრძანებამ \"%s\" მონაცემები არ დააბრუნა" -#: ../../common/exec.c:424 +#: ../../common/exec.c:405 #, c-format msgid "%s() failed: %m" msgstr "%s()-ის შეცდომა: %m" -#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 +#: ../../common/exec.c:543 ../../common/exec.c:588 ../../common/exec.c:680 msgid "out of memory" msgstr "არასაკმარისი მეხსიერება" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:790 ../../port/path.c:807 +#: ../../port/path.c:831 ../../port/path.c:868 ../../port/path.c:885 #, c-format msgid "out of memory\n" msgstr "არასაკმარისი მეხსიერება\n" @@ -104,123 +108,127 @@ msgstr "პროცესი გაჩერდა სიგნალით: %d msgid "child process exited with unrecognized status %d" msgstr "შვილეული პროცესი დასრულდა უცნობი სტატუსით %d" -#: ../../port/path.c:775 +#: ../../port/path.c:853 #, c-format msgid "could not get current working directory: %m\n" msgstr "მიმდინარე სამუშაო საქაღალდის მიღების შეცდომა: %m\n" -#: pg_ctl.c:254 +#: pg_ctl.c:255 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: საქაღალდე %s არ არსებობს\n" -#: pg_ctl.c:257 +#: pg_ctl.c:258 #, c-format msgid "%s: could not access directory \"%s\": %m\n" msgstr "%s საქაღალდესთან %s წვდომის უფლება არ გაქვთ: %m\n" -#: pg_ctl.c:270 +#: pg_ctl.c:271 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: საქაღალდე \"%s\" ბაზის კლასტერის საქაღალდეს არ წარმოადგენს\n" -#: pg_ctl.c:283 +#: pg_ctl.c:284 #, c-format msgid "%s: could not open PID file \"%s\": %m\n" msgstr "%s: PID ფაილის (\"%s\") გახსნის შეცდომა: %m\n" -#: pg_ctl.c:292 +#: pg_ctl.c:293 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: PID ფაილი \"%s\" ცარიელია\n" -#: pg_ctl.c:295 +#: pg_ctl.c:296 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: PID ფაილის (\"%s\") არასწორი შიგთავსი\n" -#: pg_ctl.c:457 pg_ctl.c:499 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %m\n" msgstr "%s: სერვერის გაშვების შეცდომა: %m\n" -#: pg_ctl.c:477 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %m\n" msgstr "%s: სერვერის გაშვება შეუძლებელია setsid()-ის ჩავარდნის გამო: %m\n" -#: pg_ctl.c:547 +#: pg_ctl.c:548 #, c-format msgid "%s: could not open log file \"%s\": %m\n" msgstr "%s: ჟურნალის ფაილის გახსნის შეცდომა \"%s\": %m\n" -#: pg_ctl.c:564 +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: სერვერის გაშვება შეუძლებელია: შეცდომის კოდი %lu\n" -#: pg_ctl.c:781 +#: pg_ctl.c:789 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s ბირთვის ფაილის ზომის ლიმიტის დაყენება აკრძალულია hardlimit-ის მიერ\n" -#: pg_ctl.c:807 +#: pg_ctl.c:815 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "ფაილის (%s) წაკითხვის შეცდომა: %s\n" -#: pg_ctl.c:812 +#: pg_ctl.c:820 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: პარამეტრების ფაილში \"%s\" ზუსტად ერთი ხაზი უნდა იყოს\n" -#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 +#: pg_ctl.c:862 pg_ctl.c:1050 pg_ctl.c:1117 #, c-format msgid "%s: could not send stop signal (PID: %d): %m\n" msgstr "%s: გაჩერების სიგნალის გაგზავნა შეუძლებელია (PID: %d): %m\n" -#: pg_ctl.c:882 +#: pg_ctl.c:890 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "პროგრამა \"%s\" სჭირდება \"%s\"-ს, მაგრამ იგივე საქაღალდეში, სადაც \"%s\", ნაპოვნი არაა\n" -#: pg_ctl.c:885 +#: pg_ctl.c:893 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "პროგრამა „%s“ ნაპოვნია „%s“-ის მიერ, მაგრამ ვერსია, იგივეა არაა, რაც %s\n" -#: pg_ctl.c:917 +#: pg_ctl.c:925 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: მონაცემთა ბაზის ინიციალიზაციის შეცდომა\n" -#: pg_ctl.c:932 +#: pg_ctl.c:940 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: შეიძლება გაშვებულია სხვა სერვერი; გაშვებას მაინც ვეცდები\n" -#: pg_ctl.c:980 +#: pg_ctl.c:988 msgid "waiting for server to start..." msgstr "სერვერის გაშვების მოლოდინი..." -#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 +#: pg_ctl.c:993 pg_ctl.c:1003 pg_ctl.c:1073 pg_ctl.c:1135 pg_ctl.c:1247 msgid " done\n" msgstr " დასრულდა\n" -#: pg_ctl.c:986 +#: pg_ctl.c:994 msgid "server started\n" msgstr "სერვერი გაეშვა\n" -#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 +#: pg_ctl.c:997 pg_ctl.c:1007 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " ლოდინი შეწყვეტილია\n" -#: pg_ctl.c:990 +#: pg_ctl.c:998 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: სერვერი დროზე არ გაეშვა\n" -#: pg_ctl.c:996 +#: pg_ctl.c:1004 +msgid "server shut down because of recovery target settings\n" +msgstr "სერვერი გამოირთო აღდგენის სამიზნის პარამეტრების გამო\n" + +#: pg_ctl.c:1008 #, c-format msgid "" "%s: could not start server\n" @@ -229,42 +237,42 @@ msgstr "" "%s: სერვერის გაშვების შეცდომა\n" "შეამოწმეთ ჟურნალის ფაილი.\n" -#: pg_ctl.c:1004 +#: pg_ctl.c:1016 msgid "server starting\n" msgstr "სერვერი ეშვება\n" -#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 +#: pg_ctl.c:1035 pg_ctl.c:1093 pg_ctl.c:1156 pg_ctl.c:1195 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PID-ის ფაილი \"%s\" არ არსებობს\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 +#: pg_ctl.c:1036 pg_ctl.c:1095 pg_ctl.c:1157 pg_ctl.c:1196 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "სერვერი გაშვებიულია?\n" -#: pg_ctl.c:1030 +#: pg_ctl.c:1042 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "%s: სერვერის გაჩერების შეცდომა; გაშვებულია ერთმომხმარებლიანი სერვერი (PID: %d)\n" -#: pg_ctl.c:1044 +#: pg_ctl.c:1056 msgid "server shutting down\n" msgstr "მიმდინარეობს სერვერის გამორთვა\n" -#: pg_ctl.c:1049 pg_ctl.c:1109 +#: pg_ctl.c:1061 pg_ctl.c:1121 msgid "waiting for server to shut down..." msgstr "სერვერის გამორთვის მოლოდინი..." -#: pg_ctl.c:1053 pg_ctl.c:1114 +#: pg_ctl.c:1065 pg_ctl.c:1126 msgid " failed\n" msgstr " წარუმატებელი.\n" -#: pg_ctl.c:1055 pg_ctl.c:1116 +#: pg_ctl.c:1067 pg_ctl.c:1128 #, c-format msgid "%s: server does not shut down\n" msgstr "%s სერვერი არ გამორთულა\n" -#: pg_ctl.c:1057 pg_ctl.c:1118 +#: pg_ctl.c:1069 pg_ctl.c:1130 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -272,235 +280,235 @@ msgstr "" "მინიშნება: \"-m fast\" პარამეტრი სესიებს მაშინვე წყვეტს,\n" "სესიის-ინიცირებული გათიშვის მოლოდინის გარეშე.\n" -#: pg_ctl.c:1063 pg_ctl.c:1124 +#: pg_ctl.c:1075 pg_ctl.c:1136 msgid "server stopped\n" msgstr "სერვერი გამოირთო\n" -#: pg_ctl.c:1084 +#: pg_ctl.c:1096 msgid "trying to start server anyway\n" msgstr "სერვერის მაინც გაშვების მცდელობა\n" -#: pg_ctl.c:1093 +#: pg_ctl.c:1105 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "%s: სერვერის რესტარტი შეუძლებელია; გაშვებულია ერთმომხმარებლიანი სერვერი (PID: %d)\n" -#: pg_ctl.c:1096 pg_ctl.c:1154 +#: pg_ctl.c:1108 pg_ctl.c:1166 msgid "Please terminate the single-user server and try again.\n" msgstr "შეაჩერეთ ერთმომხმარებლიანი სერვერი და თავიდან სცადეთ.\n" -#: pg_ctl.c:1128 +#: pg_ctl.c:1140 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: სერვერის ძველი პროცესი (PID: %d) როგორც ჩანს, მოკვდა\n" -#: pg_ctl.c:1130 +#: pg_ctl.c:1142 msgid "starting server anyway\n" msgstr "სერვერის მაინც გაშვება\n" -#: pg_ctl.c:1151 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "%s: სერვერის გადატვირთვის შეცდომა; გაშვებულია ერთმომხმარებლიანი სერვერი (PID: %d)\n" -#: pg_ctl.c:1160 +#: pg_ctl.c:1172 #, c-format msgid "%s: could not send reload signal (PID: %d): %m\n" msgstr "%s: გადატვირთვის სიგნალის გაგზავნის შეცდომა (PID: %d): %m\n" -#: pg_ctl.c:1165 +#: pg_ctl.c:1177 msgid "server signaled\n" msgstr "სერვერს სიგნალი გაეგზავნა\n" -#: pg_ctl.c:1190 +#: pg_ctl.c:1202 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "%s: სერვერის წახალისების შეცდომა; გაშვებულია ერთმომხმარებლიანი სერვერი (PID: %d)\n" -#: pg_ctl.c:1198 +#: pg_ctl.c:1210 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s:სერვერის წახალისება შეუძლებელია; სერვერი უქმე რეჟიმში არაა\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1220 #, c-format msgid "%s: could not create promote signal file \"%s\": %m\n" msgstr "%s: წახალისების სიგნალის ფაილის (\"%s\") შექმნა შეუძლებელია: %m\n" -#: pg_ctl.c:1214 +#: pg_ctl.c:1226 #, c-format msgid "%s: could not write promote signal file \"%s\": %m\n" msgstr "%s: წახალისების სიგნალის ფაილში (\"%s\") ჩაწერა შეუძლებელია: %m\n" -#: pg_ctl.c:1222 +#: pg_ctl.c:1234 #, c-format msgid "%s: could not send promote signal (PID: %d): %m\n" msgstr "%s: წახალისების სიგნალის გაგზავნა შეუძლებელია(PID: %d): %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1237 #, c-format msgid "%s: could not remove promote signal file \"%s\": %m\n" msgstr "%s: წახალისების სიგნალის ფაილის (\"%s\") წაშლის შეცდომა: %m\n" -#: pg_ctl.c:1232 +#: pg_ctl.c:1244 msgid "waiting for server to promote..." msgstr "სერვერის დაწინაურების მოლოდინი..." -#: pg_ctl.c:1236 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "სერვერი დაწინაურდა\n" -#: pg_ctl.c:1241 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s სერვერი დროზე არ დაწინაურდა\n" -#: pg_ctl.c:1247 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "სერვერის დაწინაურება\n" -#: pg_ctl.c:1271 +#: pg_ctl.c:1283 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "%s: ჟურნალის ფაილების როტაცია შეუძლებელია; გაშვებულია ერთმომხმარებლიანი სერვერი (PID: %d)\n" -#: pg_ctl.c:1281 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %m\n" msgstr "%s: ჟურნალის როტაციის სიგნალის ფაილის (\"%s\") შექმნა შეუძლებელია: %m\n" -#: pg_ctl.c:1287 +#: pg_ctl.c:1299 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %m\n" msgstr "%s: ჟურნალის როტაციის სიგნალის ფაილში (\"%s\") ჩაწერა შეუძლებელია: %m\n" -#: pg_ctl.c:1295 +#: pg_ctl.c:1307 #, c-format msgid "%s: could not send log rotation signal (PID: %d): %m\n" msgstr "%s: ჟურნალის როტაციის სიგნალის გაგზავნის შეცდომა (PID: %d): %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1310 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %m\n" msgstr "%s: ჟურნალის როტაციის სიგნალის ფაილის (\"%s\") წაშლის შეცდომა : %m\n" -#: pg_ctl.c:1303 +#: pg_ctl.c:1315 msgid "server signaled to rotate log file\n" msgstr "სერვერმა გვანიშნა რომ ჟურნალის ფაილი დასატრიალებელია\n" -#: pg_ctl.c:1350 +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: გაშვებულია ერთმომხმარებლიანი სერვერი (PID: %d)\n" -#: pg_ctl.c:1364 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: სერვერი გაშვებულია (PID: %d)\n" -#: pg_ctl.c:1380 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: სერვერი გაშვებული არა\n" -#: pg_ctl.c:1397 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %d): %m\n" msgstr "%s: სიგნალის (%d) გაგზავნის შეცდომა (PID: %d): %m\n" -#: pg_ctl.c:1428 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: საკუთარი პროგრამის გამშვები ფაილის პოვნა შეუძლებელია\n" -#: pg_ctl.c:1438 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: გამშვები ფაილი postgres არ არსებობს\n" -#: pg_ctl.c:1508 pg_ctl.c:1542 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: სერვისის მმართველის გახსნის შეცდომა\n" -#: pg_ctl.c:1514 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: სერვისი %s უკვე რეგისტრირებულია\n" -#: pg_ctl.c:1525 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: სერვისის (\"%s\") რეგისტრაციის შეცდომა: შეცდომის კოდი %lu\n" -#: pg_ctl.c:1548 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: სერვისი %s უკვე რეგისტრირებულია\n" -#: pg_ctl.c:1555 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: სერვისის (%s) გახსნა შეუძლებელია: შეცდომის კოდი: %lu\n" -#: pg_ctl.c:1564 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: სერვისის (\"%s\") რეგისტრაციის მოხსნა შეუძლებელია: შეცდომის კოდი: %lu\n" -#: pg_ctl.c:1651 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "სერვერის გაშვების მოლოდინი...\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "სერვერის გაშვების მოლოდინის ვადა გავიდა\n" -#: pg_ctl.c:1658 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "სერვერი გაეშვა და მზადაა შეერთებისთვის\n" -#: pg_ctl.c:1713 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: სერვისის (%s) გაშვება შეუძლებელია: შეცდომის კოდი %lu\n" -#: pg_ctl.c:1786 +#: pg_ctl.c:1798 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: პროცესის კოდის გახსნა შეუძლებელია: შეცდომის კოდი %lu\n" -#: pg_ctl.c:1800 +#: pg_ctl.c:1812 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: შეცდომა SSID-ების გამოყოფისას: შეცდომის კოდი %lu\n" -#: pg_ctl.c:1826 +#: pg_ctl.c:1838 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: შეზღუდული კოდის შექმნა ვერ მოხერხდა: შეცდომის კოდი %lu\n" -#: pg_ctl.c:1908 +#: pg_ctl.c:1920 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: პრივილეგიებისთვის LUID-ების მიღება შეუძლებელია: შეცდომის კოდი: %lu\n" -#: pg_ctl.c:1916 pg_ctl.c:1931 +#: pg_ctl.c:1928 pg_ctl.c:1943 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: შეზღუდული კოდის ინფორმაციის მიღება ვერ მოხერხდა: შეცდომის კოდი %lu\n" -#: pg_ctl.c:1925 +#: pg_ctl.c:1937 #, c-format msgid "%s: out of memory\n" msgstr "%s: არასაკმარისი მეხსიერება\n" -#: pg_ctl.c:1955 +#: pg_ctl.c:1967 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'.\n" -#: pg_ctl.c:1963 +#: pg_ctl.c:1975 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -509,17 +517,17 @@ msgstr "" "%s წარმოადგენს პროგრამას PostgreSQL სერვერის ინიციალიზაციის, გაშვების, გაჩერების და კონტროლისთვის.\n" "\n" -#: pg_ctl.c:1964 +#: pg_ctl.c:1976 #, c-format msgid "Usage:\n" msgstr "გამოყენება:\n" -#: pg_ctl.c:1965 +#: pg_ctl.c:1977 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D მონაცემებისსაქაღალდე] [-s] [-o პარამეტრები]\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1978 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -528,12 +536,12 @@ msgstr "" " %s start [-D მონაცემებსსაქაღალდე] [-l ფაილისსახელი] [-W] [-t წამი] [-s]\n" " [-o პარამეტრი] [-p ბილიკი] [-c]\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1980 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D მონაცემებსსაქაღალდე] [-m გამორთვის-რეჟიმი] [-W] [-t წამი] [-s]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1981 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -542,32 +550,32 @@ msgstr "" " %s restart [-D მონაცემებსსაქაღალდე] [-m გამორთვის-რეჟიმი] [-W] [-t წამი] [-s]\n" " [-o პარამეტრები] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1983 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D მონაცემებსსაქაღალდე] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1984 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D მონაცემებსსაქაღალდე]\n" -#: pg_ctl.c:1973 +#: pg_ctl.c:1985 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D მონაცემებისსაქაღალდე] [-W] [-t წამი] [-s]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1986 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D მონაცემებისსაქაღალდე] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1987 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill სიგნალისსახელი PID\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1989 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -576,12 +584,12 @@ msgstr "" " %s register [-D მონაცემებსსაქაღალდე] [-N სერვისისსახელი] [-U მომხმარებელი] [-P პაროლი]\n" " [-S გაშვების-ტიპი] [-e წყარო] [-W] [-t წამი] [-s] [-o პარამეტრები]\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:1991 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N სერვისისსახელი]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1994 #, c-format msgid "" "\n" @@ -590,52 +598,52 @@ msgstr "" "\n" "ზოგადი პარამეტრები:\n" -#: pg_ctl.c:1983 +#: pg_ctl.c:1995 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " [-D, --pgdata=]DATADIR ბაზის საცავის მდებარეობა\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1997 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e SOURCE მოვლენების წყარო სერვისად გაშვებულობის დროს ჟურნალის ჩასაწერად\n" -#: pg_ctl.c:1987 +#: pg_ctl.c:1999 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent მხოლოდ შეცდომების გამოტანა. საინფორმაციო შეტყობინებები არ გამოჩნდება\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:2000 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=წამი -w პარამეტრის გამოყენებისას მითითებული ლოდინის დრო\n" -#: pg_ctl.c:1989 +#: pg_ctl.c:2001 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:2002 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait დალოდება ოპერაციის დასრულებამდე(ნაგულისხმები)\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:2003 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait არ დაელოდება ოპერაციის დასასრულს\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:2004 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:2005 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "თუ -D პარამეტრი მითითებული არაა, გამოყენებული იქნება გარემოს ცვლადი PGDATA.\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:2007 #, c-format msgid "" "\n" @@ -644,22 +652,22 @@ msgstr "" "\n" "გაშვების ან თავიდან გაშვების პარამეტრები:\n" -#: pg_ctl.c:1997 +#: pg_ctl.c:2009 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files postgres-ისთვის ბირთვის ფაილების ჩაწერის უფლების მიცემა\n" -#: pg_ctl.c:1999 +#: pg_ctl.c:2011 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files ამ პლატფორმაზე არ მუშაობს\n" -#: pg_ctl.c:2001 +#: pg_ctl.c:2013 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=ფაილისსახელი სერვერის ჟურნალის ფაილში ჩაწერა (ან არსებული ფაილის ბოლოში მიწერა)\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:2014 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -668,12 +676,12 @@ msgstr "" " -o, --options=OPTIONS postgres-ისთვის (PostgreSQL სერვერი) ან initdb-სთვის გადასაცემი \n" " ბრძანების სტრიქონის პარამეტრები \n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2016 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ბილიკი-POSTGRES-მდე ჩვეულებრივ საჭირო არაა\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -682,12 +690,12 @@ msgstr "" "\n" "გაჩერებისა და გადატვირთვის პარამეტრები:\n" -#: pg_ctl.c:2006 +#: pg_ctl.c:2018 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=რეჟიმი რეჟიმი შეიძლება იყოს: (ჭკვიანი)\"smart\", (ჩქარი)\"fast\", ან (ახლავე)\"immediate\"\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2020 #, c-format msgid "" "\n" @@ -696,22 +704,22 @@ msgstr "" "\n" "გამორთვის რეჟიმებია:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2021 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart გასვლა, როცა ყველა კლიენტი გაითიშება\n" -#: pg_ctl.c:2010 +#: pg_ctl.c:2022 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast პირდაპირ გასვლა, სწორად გამორთვით (ნაგულისხმები)\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2023 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr " immediate სრული გათიშვის გარეშე გასვლა; დიდი ალბათობით შემდეგ გაშვებაზე მონაცემების აღდგენა მოგიწევთ\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2025 #, c-format msgid "" "\n" @@ -720,7 +728,7 @@ msgstr "" "\n" "მოსაკლავად დაშვებული სიგნალის სახელები:\n" -#: pg_ctl.c:2017 +#: pg_ctl.c:2029 #, c-format msgid "" "\n" @@ -729,27 +737,27 @@ msgstr "" "\n" "რეგისტრაციისა და მისი მოხსნის პარამეტრები:\n" -#: pg_ctl.c:2018 +#: pg_ctl.c:2030 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N სერვისისსახელი სერვისის სახელი, რომელიც PostgreSQL სერვერი დარეგისტრირდება\n" -#: pg_ctl.c:2019 +#: pg_ctl.c:2031 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P პაროლი PostgreSQL სერვერის დასარეგისტრირებელი მომხმარებლის პაროლი\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2032 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U მომხმარებელი PostgreSQL სერვერის დასარეგისტრირებელი მომხმარებლის სახელი\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2033 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S გაშვების ტიპი PostgreSQL სერვერის გაშვების ტიპი\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2035 #, c-format msgid "" "\n" @@ -758,17 +766,17 @@ msgstr "" "\n" "გაშვების ტიპები:\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2036 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto სერვისი ავტომატურად გაეშვება სისტემის ჩატვირთვისას (ნაგულისხმები)\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2037 #, c-format msgid " demand start service on demand\n" msgstr " demand საჭიროების მიხედვით\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2040 #, c-format msgid "" "\n" @@ -777,37 +785,37 @@ msgstr "" "\n" "შეცდომების შესახებ მიწერეთ: %s\n" -#: pg_ctl.c:2029 +#: pg_ctl.c:2041 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2066 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: მუშაობის დასრულების უცნობი რეჟიმი: \"%s\"\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2095 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: სიგნალის უცნობი სახელი: \"%s\"\n" -#: pg_ctl.c:2100 +#: pg_ctl.c:2112 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: გაშვების უცნობი ტიპი \"%s\"\n" -#: pg_ctl.c:2156 +#: pg_ctl.c:2168 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: შეუძლებელია მონაცემების საქაღალდის პოვნა ბრძანებით \"%s\"\n" -#: pg_ctl.c:2179 +#: pg_ctl.c:2191 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: როგორც ჩანს, საკონტროლო ფაილი დაზიანებულია\n" -#: pg_ctl.c:2247 +#: pg_ctl.c:2259 #, c-format msgid "" "%s: cannot be run as root\n" @@ -818,32 +826,32 @@ msgstr "" "გთხოვთ შეხვიდეთ (მაგ. \"su\"-ის გამოყენებით) როგორც (არაპრივილეგირებული)\n" "მომხმარებელი, რომელიც ფლობს სერვერის პროცესს.\n" -#: pg_ctl.c:2319 +#: pg_ctl.c:2331 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: პარამეტრი -S ამ პლატფორმაზე მხარდაუჭერელია\n" -#: pg_ctl.c:2375 +#: pg_ctl.c:2387 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: ნაკლული არგუმენტები მოკვლის რეჟიმისთვის\n" -#: pg_ctl.c:2393 +#: pg_ctl.c:2405 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: ოპერაციის უცნობი რეჟიმი \"%s\"\n" -#: pg_ctl.c:2402 +#: pg_ctl.c:2414 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: მეტისმეტად ბევრი ბრძანების-სტრიქონის არგუმენტი (პირველია \"%s\")\n" -#: pg_ctl.c:2409 +#: pg_ctl.c:2421 #, c-format msgid "%s: no operation specified\n" msgstr "%s: ოპერაცია მითითებული არაა\n" -#: pg_ctl.c:2430 +#: pg_ctl.c:2442 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: ბაზის საქაღალდე და გარემოს ცვლადი PGDATA მითითებული არაა\n" diff --git a/src/bin/pg_ctl/po/ko.po b/src/bin/pg_ctl/po/ko.po index 03d2ac8190162..e6f6e8ccb5691 100644 --- a/src/bin/pg_ctl/po/ko.po +++ b/src/bin/pg_ctl/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_ctl (PostgreSQL) 16\n" +"Project-Id-Version: pg_ctl (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-09-07 05:49+0000\n" -"PO-Revision-Date: 2023-05-26 13:21+0900\n" +"POT-Creation-Date: 2025-01-17 04:49+0000\n" +"PO-Revision-Date: 2025-01-16 14:12+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,38 +15,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../common/exec.c:172 +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "바이트 순서 정보 불일치" + +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "\"%s\" 파일은 잘못된 바이너리 파일임: %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음: %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "실행할 \"%s\" 파일을 찾을 수 없음" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "\"%s\" 경로를 절대경로로 바꿀 수 없음: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "\"%s\" 명령을 실행할 수 없음: %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "\"%s\" 명령에서 읽을 수 없음: %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "\"%s\" 명령이 아무런 데이터도 반환하지 않음" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() 실패: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "메모리 부족" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:791 ../../port/path.c:808 +#: ../../port/path.c:753 ../../port/path.c:790 ../../port/path.c:807 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" @@ -88,82 +107,82 @@ msgstr "하위 프로세스가 종료되었음, 알수 없는 상태 %d" #: ../../port/path.c:775 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "현재 작업 디렉터리를 알 수 없음: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "현재 작업 디렉터리를 알 수 없음: %m\n" -#: pg_ctl.c:255 +#: pg_ctl.c:254 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: \"%s\" 디렉터리 없음\n" -#: pg_ctl.c:258 +#: pg_ctl.c:257 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: \"%s\" 디렉터리에 액세스할 수 없음: %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: \"%s\" 디렉터리에 액세스할 수 없음: %m\n" -#: pg_ctl.c:271 +#: pg_ctl.c:270 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: 지정한 \"%s\" 디렉터리는 데이터베이스 클러스트 디렉터리가 아님\n" -#: pg_ctl.c:284 +#: pg_ctl.c:283 #, c-format -msgid "%s: could not open PID file \"%s\": %s\n" -msgstr "%s: \"%s\" PID 파일을 열 수 없음: %s\n" +msgid "%s: could not open PID file \"%s\": %m\n" +msgstr "%s: \"%s\" PID 파일을 열 수 없음: %m\n" -#: pg_ctl.c:293 +#: pg_ctl.c:292 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: \"%s\" PID 파일에 내용이 없습니다\n" -#: pg_ctl.c:296 +#: pg_ctl.c:295 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: \"%s\" PID 파일이 비었음\n" -#: pg_ctl.c:458 pg_ctl.c:500 +#: pg_ctl.c:457 pg_ctl.c:499 #, c-format -msgid "%s: could not start server: %s\n" -msgstr "%s: 서버를 시작 할 수 없음: %s\n" +msgid "%s: could not start server: %m\n" +msgstr "%s: 서버를 시작 할 수 없음: %m\n" -#: pg_ctl.c:478 +#: pg_ctl.c:477 #, c-format -msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "%s: setsid() 실패로 서버를 시작 할 수 없음: %s\n" +msgid "%s: could not start server due to setsid() failure: %m\n" +msgstr "%s: setsid() 실패로 서버를 시작 할 수 없음: %m\n" -#: pg_ctl.c:548 +#: pg_ctl.c:547 #, c-format -msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s: \"%s\" 로그 파일을 열 수 없음: %s\n" +msgid "%s: could not open log file \"%s\": %m\n" +msgstr "%s: \"%s\" 로그 파일을 열 수 없음: %m\n" -#: pg_ctl.c:565 +#: pg_ctl.c:564 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: 서버를 시작할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:782 +#: pg_ctl.c:781 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: 코어 파일 크기 한도를 설정할 수 없음, 하드 디스크 용량 초과로 허용되지 않" "음\n" -#: pg_ctl.c:808 +#: pg_ctl.c:807 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: \"%s\" 파일을 읽을 수 없음\n" -#: pg_ctl.c:813 +#: pg_ctl.c:812 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: \"%s\" 환경설정파일은 반드시 한 줄을 가져야한다?\n" -#: pg_ctl.c:855 pg_ctl.c:1039 pg_ctl.c:1107 +#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 #, c-format -msgid "%s: could not send stop signal (PID: %d): %s\n" -msgstr "%s: stop 시그널을 보낼 수 없음 (PID: %d): %s\n" +msgid "%s: could not send stop signal (PID: %d): %m\n" +msgstr "%s: stop 시그널을 보낼 수 없음 (PID: %d): %m\n" -#: pg_ctl.c:883 +#: pg_ctl.c:882 #, c-format msgid "" "program \"%s\" is needed by %s but was not found in the same directory as " @@ -172,45 +191,45 @@ msgstr "" "\"%s\" 프로그램이 %s 작업에서 필요합니다. 그런데, 이 파일이\n" "\"%s\" 파일이 있는 디렉터리안에 없습니다.\n" -#: pg_ctl.c:886 +#: pg_ctl.c:885 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "" "\"%s\" 프로그램을 \"%s\" 작업 때문에 찾았지만 이 파일은\n" "%s 프로그램의 버전과 다릅니다.\n" -#: pg_ctl.c:918 +#: pg_ctl.c:917 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: 데이터베이스 초기화 실패\n" -#: pg_ctl.c:933 +#: pg_ctl.c:932 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: 다른 서버가 가동 중인 것 같음; 어째든 서버 가동을 시도함\n" -#: pg_ctl.c:981 +#: pg_ctl.c:980 msgid "waiting for server to start..." msgstr "서버를 시작하기 위해 기다리는 중..." -#: pg_ctl.c:986 pg_ctl.c:1063 pg_ctl.c:1126 pg_ctl.c:1238 +#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 msgid " done\n" msgstr " 완료\n" -#: pg_ctl.c:987 +#: pg_ctl.c:986 msgid "server started\n" msgstr "서버 시작됨\n" -#: pg_ctl.c:990 pg_ctl.c:996 pg_ctl.c:1243 +#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 msgid " stopped waiting\n" msgstr " 중지 기다리는 중\n" -#: pg_ctl.c:991 +#: pg_ctl.c:990 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: 서버가 제 시간에 시작되지 못했음\n" -#: pg_ctl.c:997 +#: pg_ctl.c:996 #, c-format msgid "" "%s: could not start server\n" @@ -219,42 +238,42 @@ msgstr "" "%s: 서버를 시작 할 수 없음\n" "로그 출력을 살펴보십시오.\n" -#: pg_ctl.c:1005 +#: pg_ctl.c:1004 msgid "server starting\n" msgstr "서버를 시작합니다\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1147 pg_ctl.c:1186 pg_ctl.c:1267 +#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: \"%s\" PID 파일이 없습니다\n" -#: pg_ctl.c:1025 pg_ctl.c:1085 pg_ctl.c:1148 pg_ctl.c:1187 pg_ctl.c:1268 +#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 msgid "Is server running?\n" msgstr "서버가 실행 중입니까?\n" -#: pg_ctl.c:1031 +#: pg_ctl.c:1030 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "%s: 서버 중지 실패; 단일 사용자 서버가 실행 중 (PID: %d)\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1044 msgid "server shutting down\n" msgstr "서버를 멈춥니다\n" -#: pg_ctl.c:1051 pg_ctl.c:1112 +#: pg_ctl.c:1049 pg_ctl.c:1109 msgid "waiting for server to shut down..." msgstr "서버를 멈추기 위해 기다리는 중..." -#: pg_ctl.c:1055 pg_ctl.c:1117 +#: pg_ctl.c:1053 pg_ctl.c:1114 msgid " failed\n" msgstr " 실패\n" -#: pg_ctl.c:1057 pg_ctl.c:1119 +#: pg_ctl.c:1055 pg_ctl.c:1116 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: 서버를 멈추지 못했음\n" -#: pg_ctl.c:1059 pg_ctl.c:1121 +#: pg_ctl.c:1057 pg_ctl.c:1118 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -262,239 +281,239 @@ msgstr "" "힌트: \"-m fast\" 옵션을 사용하면 접속한 세션들을 즉시 정리합니다.\n" "이 옵션을 사용하지 않으면 접속한 세션들 스스로 끊을 때까지 기다립니다.\n" -#: pg_ctl.c:1065 pg_ctl.c:1127 +#: pg_ctl.c:1063 pg_ctl.c:1124 msgid "server stopped\n" msgstr "서버 멈추었음\n" -#: pg_ctl.c:1086 +#: pg_ctl.c:1084 msgid "trying to start server anyway\n" msgstr "어째든 서버를 시작해 봅니다\n" -#: pg_ctl.c:1095 +#: pg_ctl.c:1093 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "" "%s: 서버를 다시 시작 할 수 없음; 단일사용자 서버가 실행 중임 (PID: %d)\n" -#: pg_ctl.c:1098 pg_ctl.c:1157 +#: pg_ctl.c:1096 pg_ctl.c:1154 msgid "Please terminate the single-user server and try again.\n" msgstr "단일 사용자 서버를 멈추고 다시 시도하십시오.\n" -#: pg_ctl.c:1131 +#: pg_ctl.c:1128 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: 이전 서버 프로세스(PID: %d)가 없어졌습니다\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1130 msgid "starting server anyway\n" msgstr "어째든 서버를 시작합니다\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1151 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "" "%s: 서버 환경설정을 다시 불러올 수 없음; 단일 사용자 서버가 실행 중임 (PID: " "%d)\n" -#: pg_ctl.c:1163 +#: pg_ctl.c:1160 #, c-format -msgid "%s: could not send reload signal (PID: %d): %s\n" -msgstr "%s: reload 시그널을 보낼 수 없음 (PID: %d): %s\n" +msgid "%s: could not send reload signal (PID: %d): %m\n" +msgstr "%s: reload 시그널을 보낼 수 없음 (PID: %d): %m\n" -#: pg_ctl.c:1168 +#: pg_ctl.c:1165 msgid "server signaled\n" msgstr "서버가 시스템 시그널을 받았음\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1190 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "%s: 운영서버 전환 실패; 단일사용자 서버가 실행 중(PID: %d)\n" -#: pg_ctl.c:1201 +#: pg_ctl.c:1198 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: 운영서버 전환 실패; 서버가 대기 모드로 상태가 아님\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1208 #, c-format -msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일을 만들 수 없음: %s\n" +msgid "%s: could not create promote signal file \"%s\": %m\n" +msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일을 만들 수 없음: %m\n" -#: pg_ctl.c:1217 +#: pg_ctl.c:1214 #, c-format -msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일에 쓰기 실패: %s\n" +msgid "%s: could not write promote signal file \"%s\": %m\n" +msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일에 쓰기 실패: %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1222 #, c-format -msgid "%s: could not send promote signal (PID: %d): %s\n" -msgstr "%s: 운영전환 시그널을 서버(PID: %d)로 보낼 수 없음: %s\n" +msgid "%s: could not send promote signal (PID: %d): %m\n" +msgstr "%s: 운영전환 시그널을 서버(PID: %d)로 보낼 수 없음: %m\n" -#: pg_ctl.c:1228 +#: pg_ctl.c:1225 #, c-format -msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일을 지울 수 없음: %s\n" +msgid "%s: could not remove promote signal file \"%s\": %m\n" +msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일을 지울 수 없음: %m\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1232 msgid "waiting for server to promote..." msgstr "서버를 운영 모드로 전환하는 중 ..." -#: pg_ctl.c:1239 +#: pg_ctl.c:1236 msgid "server promoted\n" msgstr "운영 모드 전환 완료\n" -#: pg_ctl.c:1244 +#: pg_ctl.c:1241 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: 서버를 제 시간에 운영 모드로 전환하지 못했음\n" -#: pg_ctl.c:1250 +#: pg_ctl.c:1247 msgid "server promoting\n" msgstr "서버를 운영 모드로 전환합니다\n" -#: pg_ctl.c:1274 +#: pg_ctl.c:1271 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "" "%s: 서버 로그 파일을 바꿀 수 없음; 단일 사용자 서버가 실행 중임 (PID: %d)\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1281 #, c-format -msgid "%s: could not create log rotation signal file \"%s\": %s\n" -msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일을 만들 수 없음: %s\n" +msgid "%s: could not create log rotation signal file \"%s\": %m\n" +msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일을 만들 수 없음: %m\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1287 #, c-format -msgid "%s: could not write log rotation signal file \"%s\": %s\n" -msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일에 쓰기 실패: %s\n" +msgid "%s: could not write log rotation signal file \"%s\": %m\n" +msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일에 쓰기 실패: %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1295 #, c-format -msgid "%s: could not send log rotation signal (PID: %d): %s\n" -msgstr "%s: 로그 전환 시그널을 보낼 수 없음 (PID: %d): %s\n" +msgid "%s: could not send log rotation signal (PID: %d): %m\n" +msgstr "%s: 로그 전환 시그널을 보낼 수 없음 (PID: %d): %m\n" -#: pg_ctl.c:1301 +#: pg_ctl.c:1298 #, c-format -msgid "%s: could not remove log rotation signal file \"%s\": %s\n" -msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일을 지울 수 없음: %s\n" +msgid "%s: could not remove log rotation signal file \"%s\": %m\n" +msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일을 지울 수 없음: %m\n" -#: pg_ctl.c:1306 +#: pg_ctl.c:1303 msgid "server signaled to rotate log file\n" msgstr "서버가 로그 전환 시그널을 받았음\n" -#: pg_ctl.c:1353 +#: pg_ctl.c:1350 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: 단일사용자 서버가 실행 중임 (PID: %d)\n" -#: pg_ctl.c:1367 +#: pg_ctl.c:1364 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: 서버가 실행 중임 (PID: %d)\n" -#: pg_ctl.c:1383 +#: pg_ctl.c:1380 #, c-format msgid "%s: no server running\n" msgstr "%s: 가동 중인 서버가 없음\n" -#: pg_ctl.c:1400 +#: pg_ctl.c:1397 #, c-format -msgid "%s: could not send signal %d (PID: %d): %s\n" -msgstr "%s: %d 시그널을 보낼 수 없음 (PID: %d): %s\n" +msgid "%s: could not send signal %d (PID: %d): %m\n" +msgstr "%s: %d 시그널을 보낼 수 없음 (PID: %d): %m\n" -#: pg_ctl.c:1431 +#: pg_ctl.c:1428 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: 실행 가능한 프로그램을 찾을 수 없습니다\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1438 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: 실행 가능한 postgres 프로그램을 찾을 수 없음\n" -#: pg_ctl.c:1511 pg_ctl.c:1545 +#: pg_ctl.c:1508 pg_ctl.c:1542 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: 서비스 관리자를 열 수 없음\n" -#: pg_ctl.c:1517 +#: pg_ctl.c:1514 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: \"%s\" 서비스가 이미 등록 되어 있음\n" -#: pg_ctl.c:1528 +#: pg_ctl.c:1525 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 등록할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1551 +#: pg_ctl.c:1548 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: \"%s\" 서비스가 등록되어 있지 않음\n" -#: pg_ctl.c:1558 +#: pg_ctl.c:1555 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 열 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1564 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 서비스 목록에서 뺄 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1651 msgid "Waiting for server startup...\n" msgstr "서버를 시작하기 위해 기다리는 중...\n" -#: pg_ctl.c:1657 +#: pg_ctl.c:1654 msgid "Timed out waiting for server startup\n" msgstr "서버 시작을 기다리는 동안 시간 초과됨\n" -#: pg_ctl.c:1661 +#: pg_ctl.c:1658 msgid "Server started and accepting connections\n" msgstr "서버가 시작되었으며 연결을 허용함\n" -#: pg_ctl.c:1716 +#: pg_ctl.c:1713 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 시작할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1789 +#: pg_ctl.c:1786 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: 프로세스 토큰을 열 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1803 +#: pg_ctl.c:1800 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: SID를 할당할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1829 +#: pg_ctl.c:1826 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: restricted token을 만들 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1908 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: 접근 권한용 LUID를 구할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1919 pg_ctl.c:1934 +#: pg_ctl.c:1916 pg_ctl.c:1931 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: 토큰 정보를 구할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:1925 #, c-format msgid "%s: out of memory\n" msgstr "%s: 메모리 부족\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:1955 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 사용법은 \"%s --help\"\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1963 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -503,17 +522,17 @@ msgstr "" "%s 프로그램은 PostgreSQL 서버를 초기화, 시작, 중지, 제어하는 도구입니다.\n" "\n" -#: pg_ctl.c:1967 +#: pg_ctl.c:1964 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1965 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D 데이터디렉터리] [-s] [-o 옵션]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1966 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -522,12 +541,12 @@ msgstr "" " %s start [-D 데이터디렉터리] [-l 파일이름] [-W] [-t 초] [-s]\n" " [-o 옵션] [-p 경로] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1968 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D 데이터디렉터리] [-m 중지방법] [-W] [-t 초] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1969 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -536,32 +555,32 @@ msgstr "" " %s restart [-D 데이터디렉터리] [-m 중지방법] [-W] [-t 초] [-s]\n" " [-o 옵션] [-c]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1971 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D 데이터디렉터리] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1972 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D 데이터디렉터리]\n" -#: pg_ctl.c:1976 +#: pg_ctl.c:1973 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D 데이터디렉터리] [-W] [-t 초] [-s]\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1974 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D 데이터디렉터리] [-s]\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1975 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill 시그널이름 PID\n" -#: pg_ctl.c:1980 +#: pg_ctl.c:1977 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -572,12 +591,12 @@ msgstr "" "호]\n" " [-S 시작형태] [-e SOURCE] [-w] [-t 초] [-o 옵션]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1979 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N 서비스이름]\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1982 #, c-format msgid "" "\n" @@ -586,56 +605,56 @@ msgstr "" "\n" "일반 옵션들:\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1983 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr "" " -D, --pgdata=데이터디렉터리 데이터베이스 자료가 저장되어있는 디렉터리\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:1985 #, c-format msgid "" " -e SOURCE event source for logging when running as a service\n" msgstr "" " -e SOURCE 서비스가 실행 중일때 쌓을 로그를 위한 이벤트 소스\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1987 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent 일반적인 메시지는 보이지 않고, 오류만 보여줌\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:1988 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=초 -w 옵션 사용 시 대기 시간(초)\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:1989 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:1990 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait 작업이 끝날 때까지 기다림 (기본값)\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1991 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait 작업이 끝날 때까지 기다리지 않음\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1992 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:1993 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "-D 옵션을 사용하지 않으면, PGDATA 환경변수값을 사용함.\n" -#: pg_ctl.c:1998 +#: pg_ctl.c:1995 #, c-format msgid "" "\n" @@ -644,22 +663,22 @@ msgstr "" "\n" "start, restart 때 사용할 수 있는 옵션들:\n" -#: pg_ctl.c:2000 +#: pg_ctl.c:1997 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files 코어 덤프 파일을 만듬\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:1999 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files 이 플랫폼에서는 사용할 수 없음\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2001 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=로그파일 서버 로그를 이 로그파일에 기록함\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2002 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -668,12 +687,12 @@ msgstr "" " -o, --options=옵션들 PostgreSQL 서버프로그램인 postgres나 initdb\n" " 명령에서 사용할 명령행 옵션들\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:2004 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PATH-TO-POSTGRES 보통은 필요치 않음\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2005 #, c-format msgid "" "\n" @@ -682,14 +701,14 @@ msgstr "" "\n" "stop, restart 때 사용 할 수 있는 옵션들:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2006 #, c-format msgid "" " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=모드 모드는 \"smart\", \"fast\", \"immediate\" 중 하나\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2008 #, c-format msgid "" "\n" @@ -698,18 +717,18 @@ msgstr "" "\n" "중지방법 설명:\n" -#: pg_ctl.c:2012 +#: pg_ctl.c:2009 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart 모든 클라이언트의 연결이 끊기게 되면 중지 됨\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2010 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr "" " fast 클라이언트의 연결을 강제로 끊고 정상적으로 중지 됨 (기본값)\n" -#: pg_ctl.c:2014 +#: pg_ctl.c:2011 #, c-format msgid "" " immediate quit without complete shutdown; will lead to recovery on " @@ -717,7 +736,7 @@ msgid "" msgstr "" " immediate 그냥 무조건 중지함; 다시 시작할 때 복구 작업을 할 수도 있음\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2013 #, c-format msgid "" "\n" @@ -726,7 +745,7 @@ msgstr "" "\n" "사용할 수 있는 중지용(for kill) 시그널 이름:\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -735,28 +754,28 @@ msgstr "" "\n" "서비스 등록/제거용 옵션들:\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2018 #, c-format msgid "" " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N SERVICENAME 서비스 목록에 등록될 PostgreSQL 서비스 이름\n" -#: pg_ctl.c:2022 +#: pg_ctl.c:2019 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD 이 서비스를 실행할 사용자의 암호\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2020 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME 이 서비스를 실행할 사용자 이름\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2021 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S 시작형태 서비스로 등록된 PostgreSQL 서버 시작 방법\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2023 #, c-format msgid "" "\n" @@ -765,18 +784,18 @@ msgstr "" "\n" "시작형태 설명:\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2024 #, c-format msgid "" " auto start service automatically during system startup (default)\n" msgstr " auto 시스템이 시작되면 자동으로 서비스가 시작됨 (초기값)\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2025 #, c-format msgid " demand start service on demand\n" msgstr " demand 수동 시작\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2028 #, c-format msgid "" "\n" @@ -785,37 +804,37 @@ msgstr "" "\n" "문제점 보고 주소: <%s>\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2029 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 홈페이지: <%s>\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2054 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: 잘못된 중지 방법 \"%s\"\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2083 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: 잘못된 시그널 이름 \"%s\"\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2100 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: 알 수 없는 시작형태 \"%s\"\n" -#: pg_ctl.c:2159 +#: pg_ctl.c:2156 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: \"%s\" 명령에서 사용할 데이터 디렉터리를 알 수 없음\n" -#: pg_ctl.c:2182 +#: pg_ctl.c:2179 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: 컨트롤 파일이 깨졌음\n" -#: pg_ctl.c:2250 +#: pg_ctl.c:2247 #, c-format msgid "" "%s: cannot be run as root\n" @@ -826,32 +845,32 @@ msgstr "" "시스템관리자 권한이 없는, 서버프로세스의 소유주가 될 일반 사용자로\n" "로그인 해서(\"su\", \"runas\" 같은 명령 이용) 실행하십시오.\n" -#: pg_ctl.c:2333 +#: pg_ctl.c:2319 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: -S 옵션은 이 운영체제에서는 지원하지 않음\n" -#: pg_ctl.c:2370 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: 너무 많은 명령행 인수들 (시작 \"%s\")\n" - -#: pg_ctl.c:2396 +#: pg_ctl.c:2375 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: kill 작업에 필요한 인수가 빠졌습니다\n" -#: pg_ctl.c:2414 +#: pg_ctl.c:2393 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: 알 수 없는 작업 모드 \"%s\"\n" -#: pg_ctl.c:2424 +#: pg_ctl.c:2402 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: 너무 많은 명령행 인수들 (시작 \"%s\")\n" + +#: pg_ctl.c:2409 #, c-format msgid "%s: no operation specified\n" msgstr "%s: 수행할 작업을 지정하지 않았습니다\n" -#: pg_ctl.c:2445 +#: pg_ctl.c:2430 #, c-format msgid "" "%s: no database directory specified and environment variable PGDATA unset\n" diff --git a/src/bin/pg_ctl/po/ru.po b/src/bin/pg_ctl/po/ru.po index a5d7ee2b74815..8f9a0a24aef49 100644 --- a/src/bin/pg_ctl/po/ru.po +++ b/src/bin/pg_ctl/po/ru.po @@ -6,13 +6,13 @@ # Sergey Burladyan , 2009, 2012. # Andrey Sudnik , 2010. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-28 07:59+0300\n" -"PO-Revision-Date: 2023-08-29 10:20+0300\n" +"POT-Creation-Date: 2025-02-08 07:44+0200\n" +"PO-Revision-Date: 2024-09-07 06:47+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -22,38 +22,57 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../common/exec.c:172 +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "несоответствие порядка байт" + +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "неверный исполняемый файл \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не удалось прочитать исполняемый файл \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не удалось преобразовать относительный путь \"%s\" в абсолютный: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не удалось выполнить команду \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не удалось прочитать вывод команды \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "команда \"%s\" не выдала данные" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "ошибка в %s(): %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "нехватка памяти" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:791 ../../port/path.c:808 +#: ../../port/path.c:830 ../../port/path.c:867 ../../port/path.c:884 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" @@ -91,133 +110,133 @@ msgstr "дочерний процесс завершён по сигналу %d: #: ../../common/wait_error.c:82 #, c-format msgid "child process exited with unrecognized status %d" -msgstr "дочерний процесс завершился с нераспознанным состоянием %d" +msgstr "дочерний процесс завершился с нераспознанным кодом состояния %d" -#: ../../port/path.c:775 +#: ../../port/path.c:852 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "не удалось определить текущий рабочий каталог: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "не удалось определить текущий рабочий каталог: %m\n" -#: pg_ctl.c:255 +#: pg_ctl.c:254 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: каталог \"%s\" не существует\n" -#: pg_ctl.c:258 +#: pg_ctl.c:257 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: ошибка доступа к каталогу \"%s\": %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: ошибка при обращении к каталогу \"%s\": %m\n" -#: pg_ctl.c:271 +#: pg_ctl.c:270 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: каталог \"%s\" не содержит структуры кластера баз данных\n" -#: pg_ctl.c:284 +#: pg_ctl.c:283 #, c-format -msgid "%s: could not open PID file \"%s\": %s\n" -msgstr "%s: не удалось открыть файл PID \"%s\": %s\n" +msgid "%s: could not open PID file \"%s\": %m\n" +msgstr "%s: не удалось открыть файл PID \"%s\": %m\n" -#: pg_ctl.c:293 +#: pg_ctl.c:292 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: файл PID \"%s\" пуст\n" -#: pg_ctl.c:296 +#: pg_ctl.c:295 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: неверные данные в файле PID \"%s\"\n" -#: pg_ctl.c:458 pg_ctl.c:500 +#: pg_ctl.c:457 pg_ctl.c:499 #, c-format -msgid "%s: could not start server: %s\n" -msgstr "%s: не удалось запустить сервер: %s\n" +msgid "%s: could not start server: %m\n" +msgstr "%s: не удалось запустить сервер: %m\n" -#: pg_ctl.c:478 +#: pg_ctl.c:477 #, c-format -msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "%s: не удалось запустить сервер из-за ошибки в setsid(): %s\n" +msgid "%s: could not start server due to setsid() failure: %m\n" +msgstr "%s: не удалось запустить сервер из-за ошибки в setsid(): %m\n" -#: pg_ctl.c:548 +#: pg_ctl.c:547 #, c-format -msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s: не удалось открыть файл протокола \"%s\": %s\n" +msgid "%s: could not open log file \"%s\": %m\n" +msgstr "%s: не удалось открыть файл протокола \"%s\": %m\n" -#: pg_ctl.c:565 +#: pg_ctl.c:564 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: не удалось запустить сервер (код ошибки: %lu)\n" -#: pg_ctl.c:782 +#: pg_ctl.c:781 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: не удалось ограничить размер дампа памяти; запрещено жёстким " "ограничением\n" -#: pg_ctl.c:808 +#: pg_ctl.c:807 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: не удалось прочитать файл \"%s\"\n" -#: pg_ctl.c:813 +#: pg_ctl.c:812 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: в файле параметров \"%s\" должна быть ровно одна строка\n" -#: pg_ctl.c:855 pg_ctl.c:1039 pg_ctl.c:1107 +#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 #, c-format -msgid "%s: could not send stop signal (PID: %d): %s\n" -msgstr "%s: не удалось отправить сигнал остановки (PID: %d): %s\n" +msgid "%s: could not send stop signal (PID: %d): %m\n" +msgstr "%s: не удалось отправить сигнал остановки (PID: %d): %m\n" -#: pg_ctl.c:883 +#: pg_ctl.c:882 #, c-format msgid "" "program \"%s\" is needed by %s but was not found in the same directory as " "\"%s\"\n" msgstr "программа \"%s\" нужна для %s, но она не найдена в каталоге \"%s\"\n" -#: pg_ctl.c:886 +#: pg_ctl.c:885 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "" "программа \"%s\" найдена программой \"%s\", но её версия отличается от " "версии %s\n" -#: pg_ctl.c:918 +#: pg_ctl.c:917 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: сбой при инициализации системы баз данных\n" -#: pg_ctl.c:933 +#: pg_ctl.c:932 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "" "%s: возможно, уже работает другой сервер; всё же пробуем запустить этот " "сервер\n" -#: pg_ctl.c:981 +#: pg_ctl.c:980 msgid "waiting for server to start..." msgstr "ожидание запуска сервера..." -#: pg_ctl.c:986 pg_ctl.c:1063 pg_ctl.c:1126 pg_ctl.c:1238 +#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 msgid " done\n" msgstr " готово\n" -#: pg_ctl.c:987 +#: pg_ctl.c:986 msgid "server started\n" msgstr "сервер запущен\n" -#: pg_ctl.c:990 pg_ctl.c:996 pg_ctl.c:1243 +#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 msgid " stopped waiting\n" msgstr " прекращение ожидания\n" -#: pg_ctl.c:991 +#: pg_ctl.c:990 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: сервер не запустился за отведённое время\n" -#: pg_ctl.c:997 +#: pg_ctl.c:996 #, c-format msgid "" "%s: could not start server\n" @@ -226,43 +245,43 @@ msgstr "" "%s: не удалось запустить сервер\n" "Изучите протокол выполнения.\n" -#: pg_ctl.c:1005 +#: pg_ctl.c:1004 msgid "server starting\n" msgstr "сервер запускается\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1147 pg_ctl.c:1186 pg_ctl.c:1267 +#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: файл PID \"%s\" не существует\n" -#: pg_ctl.c:1025 pg_ctl.c:1085 pg_ctl.c:1148 pg_ctl.c:1187 pg_ctl.c:1268 +#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 msgid "Is server running?\n" msgstr "Запущен ли сервер?\n" -#: pg_ctl.c:1031 +#: pg_ctl.c:1030 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "" "%s: остановить сервер с PID %d нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1044 msgid "server shutting down\n" msgstr "сервер останавливается\n" -#: pg_ctl.c:1051 pg_ctl.c:1112 +#: pg_ctl.c:1049 pg_ctl.c:1109 msgid "waiting for server to shut down..." msgstr "ожидание завершения работы сервера..." -#: pg_ctl.c:1055 pg_ctl.c:1117 +#: pg_ctl.c:1053 pg_ctl.c:1114 msgid " failed\n" msgstr " ошибка\n" -#: pg_ctl.c:1057 pg_ctl.c:1119 +#: pg_ctl.c:1055 pg_ctl.c:1116 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: сервер не останавливается\n" -#: pg_ctl.c:1059 pg_ctl.c:1121 +#: pg_ctl.c:1057 pg_ctl.c:1118 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -270,243 +289,243 @@ msgstr "" "ПОДСКАЗКА: Параметр \"-m fast\" может сбросить сеансы принудительно,\n" "не дожидаясь, пока они завершатся сами.\n" -#: pg_ctl.c:1065 pg_ctl.c:1127 +#: pg_ctl.c:1063 pg_ctl.c:1124 msgid "server stopped\n" msgstr "сервер остановлен\n" -#: pg_ctl.c:1086 +#: pg_ctl.c:1084 msgid "trying to start server anyway\n" msgstr "производится попытка запуска сервера в любом случае\n" -#: pg_ctl.c:1095 +#: pg_ctl.c:1093 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "" "%s: перезапустить сервер с PID %d нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1098 pg_ctl.c:1157 +#: pg_ctl.c:1096 pg_ctl.c:1154 msgid "Please terminate the single-user server and try again.\n" msgstr "Пожалуйста, остановите его и повторите попытку.\n" -#: pg_ctl.c:1131 +#: pg_ctl.c:1128 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: похоже, что старый серверный процесс (PID: %d) исчез\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1130 msgid "starting server anyway\n" msgstr "сервер запускается, несмотря на это\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1151 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "" "%s: перезагрузить сервер с PID %d нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1163 +#: pg_ctl.c:1160 #, c-format -msgid "%s: could not send reload signal (PID: %d): %s\n" -msgstr "%s: не удалось отправить сигнал перезагрузки (PID: %d): %s\n" +msgid "%s: could not send reload signal (PID: %d): %m\n" +msgstr "%s: не удалось отправить сигнал перезагрузки (PID: %d): %m\n" -#: pg_ctl.c:1168 +#: pg_ctl.c:1165 msgid "server signaled\n" msgstr "сигнал отправлен серверу\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1190 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "" "%s: повысить сервер с PID %d нельзя - он выполняется в монопольном режиме\n" -#: pg_ctl.c:1201 +#: pg_ctl.c:1198 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: повысить сервер нельзя - он работает не в режиме резерва\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1208 #, c-format -msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "%s: не удалось создать файл \"%s\" с сигналом к повышению: %s\n" +msgid "%s: could not create promote signal file \"%s\": %m\n" +msgstr "%s: не удалось создать файл \"%s\" с сигналом к повышению: %m\n" -#: pg_ctl.c:1217 +#: pg_ctl.c:1214 #, c-format -msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "%s: не удалось записать файл \"%s\" с сигналом к повышению: %s\n" +msgid "%s: could not write promote signal file \"%s\": %m\n" +msgstr "%s: не удалось записать файл \"%s\" с сигналом к повышению: %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1222 #, c-format -msgid "%s: could not send promote signal (PID: %d): %s\n" -msgstr "%s: не удалось отправить сигнал к повышению (PID: %d): %s\n" +msgid "%s: could not send promote signal (PID: %d): %m\n" +msgstr "%s: не удалось отправить сигнал к повышению (PID: %d): %m\n" -#: pg_ctl.c:1228 +#: pg_ctl.c:1225 #, c-format -msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "%s: ошибка при удалении файла \"%s\" с сигналом к повышению: %s\n" +msgid "%s: could not remove promote signal file \"%s\": %m\n" +msgstr "%s: ошибка при удалении файла \"%s\" с сигналом к повышению: %m\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1232 msgid "waiting for server to promote..." msgstr "ожидание повышения сервера..." -#: pg_ctl.c:1239 +#: pg_ctl.c:1236 msgid "server promoted\n" msgstr "сервер повышен\n" -#: pg_ctl.c:1244 +#: pg_ctl.c:1241 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: повышение сервера не завершилось за отведённое время\n" -#: pg_ctl.c:1250 +#: pg_ctl.c:1247 msgid "server promoting\n" msgstr "сервер повышается\n" -#: pg_ctl.c:1274 +#: pg_ctl.c:1271 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "" "%s: не удалось прокрутить файл журнала; сервер работает в монопольном режиме " "(PID: %d)\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1281 #, c-format -msgid "%s: could not create log rotation signal file \"%s\": %s\n" +msgid "%s: could not create log rotation signal file \"%s\": %m\n" msgstr "" -"%s: не удалось создать файл \"%s\" с сигналом к прокрутке журнала: %s\n" +"%s: не удалось создать файл \"%s\" с сигналом к прокрутке журнала: %m\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1287 #, c-format -msgid "%s: could not write log rotation signal file \"%s\": %s\n" +msgid "%s: could not write log rotation signal file \"%s\": %m\n" msgstr "" -"%s: не удалось записать файл \"%s\" с сигналом к прокрутке журнала: %s\n" +"%s: не удалось записать файл \"%s\" с сигналом к прокрутке журнала: %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1295 #, c-format -msgid "%s: could not send log rotation signal (PID: %d): %s\n" -msgstr "%s: не удалось отправить сигнал к прокрутке журнала (PID: %d): %s\n" +msgid "%s: could not send log rotation signal (PID: %d): %m\n" +msgstr "%s: не удалось отправить сигнал к прокрутке журнала (PID: %d): %m\n" -#: pg_ctl.c:1301 +#: pg_ctl.c:1298 #, c-format -msgid "%s: could not remove log rotation signal file \"%s\": %s\n" +msgid "%s: could not remove log rotation signal file \"%s\": %m\n" msgstr "" -"%s: ошибка при удалении файла \"%s\" с сигналом к прокрутке журнала: %s\n" +"%s: ошибка при удалении файла \"%s\" с сигналом к прокрутке журнала: %m\n" -#: pg_ctl.c:1306 +#: pg_ctl.c:1303 msgid "server signaled to rotate log file\n" msgstr "сигнал для прокрутки файла журнала отправлен серверу\n" -#: pg_ctl.c:1353 +#: pg_ctl.c:1350 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: сервер работает в монопольном режиме (PID: %d)\n" -#: pg_ctl.c:1367 +#: pg_ctl.c:1364 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: сервер работает (PID: %d)\n" -#: pg_ctl.c:1383 +#: pg_ctl.c:1380 #, c-format msgid "%s: no server running\n" msgstr "%s: сервер не работает\n" -#: pg_ctl.c:1400 +#: pg_ctl.c:1397 #, c-format -msgid "%s: could not send signal %d (PID: %d): %s\n" -msgstr "%s: не удалось отправить сигнал %d (PID: %d): %s\n" +msgid "%s: could not send signal %d (PID: %d): %m\n" +msgstr "%s: не удалось отправить сигнал %d (PID: %d): %m\n" -#: pg_ctl.c:1431 +#: pg_ctl.c:1428 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не удалось найти свой исполняемый файл\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1438 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: не удалось найти исполняемый файл postgres\n" -#: pg_ctl.c:1511 pg_ctl.c:1545 +#: pg_ctl.c:1508 pg_ctl.c:1542 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: не удалось открыть менеджер служб\n" -#: pg_ctl.c:1517 +#: pg_ctl.c:1514 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: служба \"%s\" уже зарегистрирована\n" -#: pg_ctl.c:1528 +#: pg_ctl.c:1525 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: не удалось зарегистрировать службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1551 +#: pg_ctl.c:1548 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: служба \"%s\" не зарегистрирована\n" -#: pg_ctl.c:1558 +#: pg_ctl.c:1555 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: не удалось открыть службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1564 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: ошибка при удалении службы \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1651 msgid "Waiting for server startup...\n" msgstr "Ожидание запуска сервера...\n" -#: pg_ctl.c:1657 +#: pg_ctl.c:1654 msgid "Timed out waiting for server startup\n" msgstr "Превышено время ожидания запуска сервера\n" -#: pg_ctl.c:1661 +#: pg_ctl.c:1658 msgid "Server started and accepting connections\n" msgstr "Сервер запущен и принимает подключения\n" -#: pg_ctl.c:1716 +#: pg_ctl.c:1713 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: не удалось запустить службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1789 +#: pg_ctl.c:1786 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" -#: pg_ctl.c:1803 +#: pg_ctl.c:1800 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" -#: pg_ctl.c:1829 +#: pg_ctl.c:1826 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1908 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: не удалось получить LUID для привилегий (код ошибки: %lu)\n" -#: pg_ctl.c:1919 pg_ctl.c:1934 +#: pg_ctl.c:1916 pg_ctl.c:1931 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: не удалось получить информацию о маркере (код ошибки: %lu)\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:1925 #, c-format msgid "%s: out of memory\n" msgstr "%s: нехватка памяти\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:1955 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1963 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -516,17 +535,17 @@ msgstr "" "PostgreSQL.\n" "\n" -#: pg_ctl.c:1967 +#: pg_ctl.c:1964 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1965 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D КАТАЛОГ-ДАННЫХ] [-s] [-o ПАРАМЕТРЫ]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1966 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -535,13 +554,13 @@ msgstr "" " %s start [-D КАТАЛОГ-ДАННЫХ] [-l ИМЯ-ФАЙЛА] [-W] [-t СЕК] [-s]\n" " [-o ПАРАМЕТРЫ] [-p ПУТЬ] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1968 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr "" " %s stop [-D КАТАЛОГ-ДАННЫХ] [-m РЕЖИМ-ОСТАНОВКИ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1969 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -550,32 +569,32 @@ msgstr "" " %s restart [-D КАТАЛОГ-ДАННЫХ] [-m РЕЖИМ-ОСТАНОВКИ] [-W] [-t СЕК] [-s]\n" " [-o ПАРАМЕТРЫ] [-c]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1971 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D КАТАЛОГ-ДАННЫХ] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1972 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D КАТАЛОГ-ДАННЫХ]\n" -#: pg_ctl.c:1976 +#: pg_ctl.c:1973 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D КАТАЛОГ-ДАННЫХ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1974 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D КАТАЛОГ-ДАННЫХ] [-s]\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1975 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill СИГНАЛ PID\n" -#: pg_ctl.c:1980 +#: pg_ctl.c:1977 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -587,12 +606,12 @@ msgstr "" " [-S ТИП-ЗАПУСКА] [-e ИСТОЧНИК] [-W] [-t СЕК] [-s] [-o " "ПАРАМЕТРЫ]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1979 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N ИМЯ-СЛУЖБЫ]\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1982 #, c-format msgid "" "\n" @@ -601,12 +620,12 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1983 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=КАТАЛОГ расположение хранилища баз данных\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:1985 #, c-format msgid "" " -e SOURCE event source for logging when running as a service\n" @@ -615,45 +634,45 @@ msgstr "" "журнал,\n" " когда сервер работает в виде службы\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1987 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent выводить только ошибки, без информационных " "сообщений\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:1988 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr "" " -t, --timeout=СЕК время ожидания при использовании параметра -w\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:1989 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:1990 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait ждать завершения операции (по умолчанию)\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1991 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait не ждать завершения операции\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1992 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:1993 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Если параметр -D опущен, используется переменная окружения PGDATA.\n" -#: pg_ctl.c:1998 +#: pg_ctl.c:1995 #, c-format msgid "" "\n" @@ -662,24 +681,24 @@ msgstr "" "\n" "Параметры запуска и перезапуска:\n" -#: pg_ctl.c:2000 +#: pg_ctl.c:1997 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files указать postgres создавать дампы памяти\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:1999 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files неприменимо на этой платформе\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2001 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=ФАЙЛ записывать (или добавлять) протокол сервера в " "ФАЙЛ.\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2002 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -689,12 +708,12 @@ msgstr "" "PostgreSQL)\n" " или initdb параметры командной строки\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:2004 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ПУТЬ-К-POSTGRES обычно не требуется\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2005 #, c-format msgid "" "\n" @@ -703,14 +722,14 @@ msgstr "" "\n" "Параметры остановки и перезапуска:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2006 #, c-format msgid "" " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=РЕЖИМ может быть \"smart\", \"fast\" или \"immediate\"\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2008 #, c-format msgid "" "\n" @@ -719,17 +738,17 @@ msgstr "" "\n" "Режимы остановки:\n" -#: pg_ctl.c:2012 +#: pg_ctl.c:2009 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart закончить работу после отключения всех клиентов\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2010 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast закончить сразу, в штатном режиме (по умолчанию)\n" -#: pg_ctl.c:2014 +#: pg_ctl.c:2011 #, c-format msgid "" " immediate quit without complete shutdown; will lead to recovery on " @@ -738,7 +757,7 @@ msgstr "" " immediate закончить немедленно, в экстренном режиме; влечёт за собой\n" " восстановление при перезапуске\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2013 #, c-format msgid "" "\n" @@ -747,7 +766,7 @@ msgstr "" "\n" "Разрешённые сигналы для команды kill:\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -756,30 +775,30 @@ msgstr "" "\n" "Параметры для регистрации и удаления:\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2018 #, c-format msgid "" " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N ИМЯ-СЛУЖБЫ имя службы для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:2022 +#: pg_ctl.c:2019 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P ПАРОЛЬ пароль учётной записи для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2020 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U ПОЛЬЗОВАТЕЛЬ имя пользователя для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2021 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S ТИП-ЗАПУСКА тип запуска службы сервера PostgreSQL\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2023 #, c-format msgid "" "\n" @@ -788,7 +807,7 @@ msgstr "" "\n" "Типы запуска:\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2024 #, c-format msgid "" " auto start service automatically during system startup (default)\n" @@ -796,12 +815,12 @@ msgstr "" " auto запускать службу автоматически при старте системы (по " "умолчанию)\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2025 #, c-format msgid " demand start service on demand\n" msgstr " demand запускать службу по требованию\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2028 #, c-format msgid "" "\n" @@ -810,37 +829,37 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2029 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2054 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: неизвестный режим остановки \"%s\"\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2083 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: нераспознанное имя сигнала \"%s\"\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2100 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: нераспознанный тип запуска \"%s\"\n" -#: pg_ctl.c:2159 +#: pg_ctl.c:2156 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: не удалось определить каталог данных с помощью команды \"%s\"\n" -#: pg_ctl.c:2182 +#: pg_ctl.c:2179 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: управляющий файл, по-видимому, испорчен\n" -#: pg_ctl.c:2250 +#: pg_ctl.c:2247 #, c-format msgid "" "%s: cannot be run as root\n" @@ -851,32 +870,32 @@ msgstr "" "Пожалуйста, переключитесь на обычного пользователя (например,\n" "используя \"su\"), который будет запускать серверный процесс.\n" -#: pg_ctl.c:2333 +#: pg_ctl.c:2319 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: параметр -S не поддерживается в этой ОС\n" -#: pg_ctl.c:2370 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" - -#: pg_ctl.c:2396 +#: pg_ctl.c:2375 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: отсутствуют аргументы для режима kill\n" -#: pg_ctl.c:2414 +#: pg_ctl.c:2393 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: нераспознанный режим работы \"%s\"\n" -#: pg_ctl.c:2424 +#: pg_ctl.c:2402 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" + +#: pg_ctl.c:2409 #, c-format msgid "%s: no operation specified\n" msgstr "%s: команда не указана\n" -#: pg_ctl.c:2445 +#: pg_ctl.c:2430 #, c-format msgid "" "%s: no database directory specified and environment variable PGDATA unset\n" @@ -1009,10 +1028,6 @@ msgstr "" #~ msgid "child process was terminated by signal %s" #~ msgstr "дочерний процесс завершён по сигналу %s" -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "не удалось перейти в каталог \"%s\": %m" - #, c-format #~ msgid "could not identify current directory: %m" #~ msgstr "не удалось определить текущий каталог: %m" diff --git a/src/bin/pg_ctl/po/sv.po b/src/bin/pg_ctl/po/sv.po index 3ab0f950e7026..ff52b8cb20915 100644 --- a/src/bin/pg_ctl/po/sv.po +++ b/src/bin/pg_ctl/po/sv.po @@ -1,5 +1,5 @@ # Swedish message translation file for pg_ctl -# Dennis Björklund , 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Dennis Björklund , 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. # Magnus Hagander , 2010. # Mats Erik Andersson , 2013, 2014. # @@ -7,10 +7,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 16\n" +"Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-01 14:18+0000\n" -"PO-Revision-Date: 2023-08-30 09:01+0200\n" +"POT-Creation-Date: 2024-07-12 14:20+0000\n" +"PO-Revision-Date: 2024-07-12 19:04+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -19,38 +19,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../common/exec.c:172 +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "byte-ordning stämmer inte" + +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "ogiltig binär \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "kunde inte läsa binär \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "kunde inte hitta en \"%s\" att köra" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "kunde inte konvertera sökvägen \"%s\" till en absolut sökväg: %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "kunde inte köra kommandot \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "kunde inte läsa från kommando \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "ingen data returnerades från kommandot \"%s\"" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() misslyckades: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "slut på minne" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:791 ../../port/path.c:808 +#: ../../port/path.c:753 ../../port/path.c:790 ../../port/path.c:807 #, c-format msgid "out of memory\n" msgstr "slut på minne\n" @@ -92,121 +111,121 @@ msgstr "barnprocess avslutade med okänd statuskod %d" #: ../../port/path.c:775 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "kunde inte fastställa nuvarande arbetskatalog: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "kunde inte fastställa nuvarande arbetskatalog: %m\n" -#: pg_ctl.c:255 +#: pg_ctl.c:254 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: katalogen \"%s\" existerar inte\n" -#: pg_ctl.c:258 +#: pg_ctl.c:257 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: kunde inte komma åt katalogen \"%s\": %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: kunde inte komma åt katalogen \"%s\": %m\n" -#: pg_ctl.c:271 +#: pg_ctl.c:270 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: katalogen \"%s\" innehåller inte något databaskluster.\n" -#: pg_ctl.c:284 +#: pg_ctl.c:283 #, c-format -msgid "%s: could not open PID file \"%s\": %s\n" -msgstr "%s: kunde inte öppna PID-fil \"%s\": %s\n" +msgid "%s: could not open PID file \"%s\": %m\n" +msgstr "%s: kunde inte öppna PID-fil \"%s\": %m\n" -#: pg_ctl.c:293 +#: pg_ctl.c:292 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: PID-filen \"%s\" är tom\n" -#: pg_ctl.c:296 +#: pg_ctl.c:295 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: ogiltig data i PID-fil \"%s\"\n" -#: pg_ctl.c:458 pg_ctl.c:500 +#: pg_ctl.c:457 pg_ctl.c:499 #, c-format -msgid "%s: could not start server: %s\n" -msgstr "%s: kunde inte starta servern: %s\n" +msgid "%s: could not start server: %m\n" +msgstr "%s: kunde inte starta servern: %m\n" -#: pg_ctl.c:478 +#: pg_ctl.c:477 #, c-format -msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "%s: kunde inte starta servern då setsid() misslyckades: %s\n" +msgid "%s: could not start server due to setsid() failure: %m\n" +msgstr "%s: kunde inte starta servern då setsid() misslyckades: %m\n" -#: pg_ctl.c:548 +#: pg_ctl.c:547 #, c-format -msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s: kunde inte öppna logg-fil \"%s\": %s\n" +msgid "%s: could not open log file \"%s\": %m\n" +msgstr "%s: kunde inte öppna logg-fil \"%s\": %m\n" -#: pg_ctl.c:565 +#: pg_ctl.c:564 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: kunde inte starta servern: felkod %lu\n" -#: pg_ctl.c:782 +#: pg_ctl.c:781 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: kan inte sätta storleksgränsning på core-fil; tillåts inte av hård gräns\n" -#: pg_ctl.c:808 +#: pg_ctl.c:807 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: kunde inte läsa filen \"%s\"\n" -#: pg_ctl.c:813 +#: pg_ctl.c:812 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: inställningsfilen \"%s\" måste bestå av en enda rad.\n" -#: pg_ctl.c:855 pg_ctl.c:1039 pg_ctl.c:1107 +#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 #, c-format -msgid "%s: could not send stop signal (PID: %d): %s\n" -msgstr "%s: kunde inte skicka stopp-signal (PID: %d): %s\n" +msgid "%s: could not send stop signal (PID: %d): %m\n" +msgstr "%s: kunde inte skicka stopp-signal (PID: %d): %m\n" -#: pg_ctl.c:883 +#: pg_ctl.c:882 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "programmet \"%s\" behövs av %s men hittades inte i samma katalog som \"%s\"\n" -#: pg_ctl.c:886 +#: pg_ctl.c:885 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "programmet \"%s\" hittades av \"%s\" men är inte av samma version som %s\n" -#: pg_ctl.c:918 +#: pg_ctl.c:917 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: skapande av databaskluster misslyckades\n" -#: pg_ctl.c:933 +#: pg_ctl.c:932 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: en annan server verkar köra; försöker starta servern ändå.\n" -#: pg_ctl.c:981 +#: pg_ctl.c:980 msgid "waiting for server to start..." msgstr "väntar på att servern skall starta..." -#: pg_ctl.c:986 pg_ctl.c:1063 pg_ctl.c:1126 pg_ctl.c:1238 +#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 msgid " done\n" msgstr " klar\n" -#: pg_ctl.c:987 +#: pg_ctl.c:986 msgid "server started\n" msgstr "servern startad\n" -#: pg_ctl.c:990 pg_ctl.c:996 pg_ctl.c:1243 +#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 msgid " stopped waiting\n" msgstr " avslutade väntan\n" -#: pg_ctl.c:991 +#: pg_ctl.c:990 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: servern startade inte i tid\n" -#: pg_ctl.c:997 +#: pg_ctl.c:996 #, c-format msgid "" "%s: could not start server\n" @@ -215,42 +234,42 @@ msgstr "" "%s: kunde inte starta servern\n" "Undersök logg-utskriften.\n" -#: pg_ctl.c:1005 +#: pg_ctl.c:1004 msgid "server starting\n" msgstr "servern startar\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1147 pg_ctl.c:1186 pg_ctl.c:1267 +#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PID-filen \"%s\" finns inte\n" -#: pg_ctl.c:1025 pg_ctl.c:1085 pg_ctl.c:1148 pg_ctl.c:1187 pg_ctl.c:1268 +#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 msgid "Is server running?\n" msgstr "Kör servern?\n" -#: pg_ctl.c:1031 +#: pg_ctl.c:1030 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "%s: Kan inte stanna servern. En-användar-server i drift (PID: %d).\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1044 msgid "server shutting down\n" msgstr "servern stänger ner\n" -#: pg_ctl.c:1051 pg_ctl.c:1112 +#: pg_ctl.c:1049 pg_ctl.c:1109 msgid "waiting for server to shut down..." msgstr "väntar på att servern skall stänga ner..." -#: pg_ctl.c:1055 pg_ctl.c:1117 +#: pg_ctl.c:1053 pg_ctl.c:1114 msgid " failed\n" msgstr " misslyckades\n" -#: pg_ctl.c:1057 pg_ctl.c:1119 +#: pg_ctl.c:1055 pg_ctl.c:1116 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: servern stänger inte ner\n" -#: pg_ctl.c:1059 pg_ctl.c:1121 +#: pg_ctl.c:1057 pg_ctl.c:1118 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -258,235 +277,235 @@ msgstr "" "TIPS: Flaggan \"-m fast\" avslutar sessioner omedelbart, i stället för att\n" "vänta på deras självvalda avslut.\n" -#: pg_ctl.c:1065 pg_ctl.c:1127 +#: pg_ctl.c:1063 pg_ctl.c:1124 msgid "server stopped\n" msgstr "servern är stoppad\n" -#: pg_ctl.c:1086 +#: pg_ctl.c:1084 msgid "trying to start server anyway\n" msgstr "försöker starta servern ändå\n" -#: pg_ctl.c:1095 +#: pg_ctl.c:1093 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "%s: kan inte starta om servern. En-användar-server kör (PID: %d).\n" -#: pg_ctl.c:1098 pg_ctl.c:1157 +#: pg_ctl.c:1096 pg_ctl.c:1154 msgid "Please terminate the single-user server and try again.\n" msgstr "Var vänlig att stanna en-användar-servern och försök sedan igen.\n" -#: pg_ctl.c:1131 +#: pg_ctl.c:1128 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: gamla serverprocessen (PID: %d) verkar vara borta\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1130 msgid "starting server anyway\n" msgstr "startar servern ändå\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1151 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "%s: kan inte ladda om servern; en-användar-server kör (PID: %d)\n" -#: pg_ctl.c:1163 +#: pg_ctl.c:1160 #, c-format -msgid "%s: could not send reload signal (PID: %d): %s\n" -msgstr "%s: kunde inte skicka signalen \"reload\" (PID: %d): %s\n" +msgid "%s: could not send reload signal (PID: %d): %m\n" +msgstr "%s: kunde inte skicka signalen \"reload\" (PID: %d): %m\n" -#: pg_ctl.c:1168 +#: pg_ctl.c:1165 msgid "server signaled\n" msgstr "servern är signalerad\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1190 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "%s: kan inte befordra servern; en-användar-server kör (PID: %d)\n" -#: pg_ctl.c:1201 +#: pg_ctl.c:1198 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: kan inte befordra servern; servern är inte i beredskapsläge.\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1208 #, c-format -msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "%s: kunde inte skapa befordringssignalfil \"%s\": %s\n" +msgid "%s: could not create promote signal file \"%s\": %m\n" +msgstr "%s: kunde inte skapa befordringssignalfil \"%s\": %m\n" -#: pg_ctl.c:1217 +#: pg_ctl.c:1214 #, c-format -msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "%s: kunde inte skriva befordringssignalfil \"%s\": %s\n" +msgid "%s: could not write promote signal file \"%s\": %m\n" +msgstr "%s: kunde inte skriva befordringssignalfil \"%s\": %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1222 #, c-format -msgid "%s: could not send promote signal (PID: %d): %s\n" -msgstr "%s: kunde inte skicka befordringssignal (PID: %d): %s\n" +msgid "%s: could not send promote signal (PID: %d): %m\n" +msgstr "%s: kunde inte skicka befordringssignal (PID: %d): %m\n" -#: pg_ctl.c:1228 +#: pg_ctl.c:1225 #, c-format -msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "%s: kunde inte ta bort befordringssignalfil \"%s\": %s\n" +msgid "%s: could not remove promote signal file \"%s\": %m\n" +msgstr "%s: kunde inte ta bort befordringssignalfil \"%s\": %m\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1232 msgid "waiting for server to promote..." msgstr "väntar på att servern skall befordras..." -#: pg_ctl.c:1239 +#: pg_ctl.c:1236 msgid "server promoted\n" msgstr "servern befordrad\n" -#: pg_ctl.c:1244 +#: pg_ctl.c:1241 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: servern befordrades inte i tid\n" -#: pg_ctl.c:1250 +#: pg_ctl.c:1247 msgid "server promoting\n" msgstr "servern befordras\n" -#: pg_ctl.c:1274 +#: pg_ctl.c:1271 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "%s: kan inte rotera loggfil; en-användar-server kör (PID: %d)\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1281 #, c-format -msgid "%s: could not create log rotation signal file \"%s\": %s\n" -msgstr "%s: kunde inte skapa loggroteringssignalfil \"%s\": %s\n" +msgid "%s: could not create log rotation signal file \"%s\": %m\n" +msgstr "%s: kunde inte skapa loggroteringssignalfil \"%s\": %m\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1287 #, c-format -msgid "%s: could not write log rotation signal file \"%s\": %s\n" -msgstr "%s: kunde inte skriva loggroteringssignalfil \"%s\": %s\n" +msgid "%s: could not write log rotation signal file \"%s\": %m\n" +msgstr "%s: kunde inte skriva loggroteringssignalfil \"%s\": %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1295 #, c-format -msgid "%s: could not send log rotation signal (PID: %d): %s\n" -msgstr "%s: kunde inte skicka signalen för loggrotering (PID: %d): %s\n" +msgid "%s: could not send log rotation signal (PID: %d): %m\n" +msgstr "%s: kunde inte skicka signalen för loggrotering (PID: %d): %m\n" -#: pg_ctl.c:1301 +#: pg_ctl.c:1298 #, c-format -msgid "%s: could not remove log rotation signal file \"%s\": %s\n" -msgstr "%s: kunde inte ta bort loggroteringssignalfil \"%s\": %s\n" +msgid "%s: could not remove log rotation signal file \"%s\": %m\n" +msgstr "%s: kunde inte ta bort loggroteringssignalfil \"%s\": %m\n" -#: pg_ctl.c:1306 +#: pg_ctl.c:1303 msgid "server signaled to rotate log file\n" msgstr "servern är signalerad att rotera loggfil\n" -#: pg_ctl.c:1353 +#: pg_ctl.c:1350 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: en-användar-server kör. (PID: %d)\n" -#: pg_ctl.c:1367 +#: pg_ctl.c:1364 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: servern kör (PID: %d)\n" -#: pg_ctl.c:1383 +#: pg_ctl.c:1380 #, c-format msgid "%s: no server running\n" msgstr "%s: ingen server kör\n" -#: pg_ctl.c:1400 +#: pg_ctl.c:1397 #, c-format -msgid "%s: could not send signal %d (PID: %d): %s\n" -msgstr "%s: kunde inte skicka signal %d (PID: %d): %s\n" +msgid "%s: could not send signal %d (PID: %d): %m\n" +msgstr "%s: kunde inte skicka signal %d (PID: %d): %m\n" -#: pg_ctl.c:1431 +#: pg_ctl.c:1428 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: kunde inte hitta det egna programmets körbara fil\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1438 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: kunde inte hitta körbar postgres.\n" -#: pg_ctl.c:1511 pg_ctl.c:1545 +#: pg_ctl.c:1508 pg_ctl.c:1542 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: kunde inte öppna tjänstehanteraren\n" -#: pg_ctl.c:1517 +#: pg_ctl.c:1514 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: tjänsten \"%s\" är redan registrerad\n" -#: pg_ctl.c:1528 +#: pg_ctl.c:1525 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: kunde inte registrera tjänsten \"%s\": felkod %lu\n" -#: pg_ctl.c:1551 +#: pg_ctl.c:1548 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: tjänsten \"%s\" är inte registrerad\n" -#: pg_ctl.c:1558 +#: pg_ctl.c:1555 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: kunde inte öppna tjänsten \"%s\": felkod %lu\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1564 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: kunde inte avregistrera tjänsten \"%s\": felkod %lu\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1651 msgid "Waiting for server startup...\n" msgstr "Väntar på serverstart...\n" -#: pg_ctl.c:1657 +#: pg_ctl.c:1654 msgid "Timed out waiting for server startup\n" msgstr "Tidsfristen ute vid väntan på serverstart\n" -#: pg_ctl.c:1661 +#: pg_ctl.c:1658 msgid "Server started and accepting connections\n" msgstr "Server startad och accepterar nu anslutningar\n" -#: pg_ctl.c:1716 +#: pg_ctl.c:1713 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: kunde inte starta tjänsten \"%s\": felkod %lu\n" -#: pg_ctl.c:1789 +#: pg_ctl.c:1786 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: kunde inte öppna process-token: felkod %lu\n" -#: pg_ctl.c:1803 +#: pg_ctl.c:1800 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: kunde inte tilldela SID: felkod %lu\n" -#: pg_ctl.c:1829 +#: pg_ctl.c:1826 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: kunde inte skapa restriktivt styrmärke (token): felkod %lu\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1908 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: kunde inte hämta LUID:er för rättigheter: felkod %lu\n" -#: pg_ctl.c:1919 pg_ctl.c:1934 +#: pg_ctl.c:1916 pg_ctl.c:1931 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: kunde inte hämta token-information: felkod %lu\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:1925 #, c-format msgid "%s: out of memory\n" msgstr "%s: slut på minne\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:1955 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Försök med \"%s --help\" för mer information.\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1963 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -496,17 +515,17 @@ msgstr "" "PostgreSQL-tjänsten.\n" "\n" -#: pg_ctl.c:1967 +#: pg_ctl.c:1964 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1965 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATAKAT] [-s] [-o FLAGGOR]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1966 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -515,12 +534,12 @@ msgstr "" " %s start [-D DATAKAT] [-l FILNAMN] [-W] [-t SEK] [-s]\n" " [-o FLAGGOR] [-p SOKVÄG] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1968 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATAKAT] [-m STÄNGNINGSMETOD] [-W] [-t SEK] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1969 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -529,32 +548,32 @@ msgstr "" " %s restart [-D DATAKAT] [-m STÄNGNINGSMETOD] [-W] [-t SEK] [-s]\n" " [-o FLAGGOR] [-c]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1971 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATAKAT] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1972 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATAKAT]\n" -#: pg_ctl.c:1976 +#: pg_ctl.c:1973 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATAKAT] [-W] [-t SEK] [-s]\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1974 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATAKAT] [-s]\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1975 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAMN PID\n" -#: pg_ctl.c:1980 +#: pg_ctl.c:1977 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -563,12 +582,12 @@ msgstr "" " %s register [-D DATAKAT] [-N TJÄNSTENAMN] [-U ANVÄNDARNAMN] [-P LÖSENORD]\n" " [-S STARTTYPE] [-e KÄLLA] [-W] [-t SEK] [-s] [-o FLAGGOR]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1979 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N TJÄNSTNAMN]\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1982 #, c-format msgid "" "\n" @@ -577,52 +596,52 @@ msgstr "" "\n" "Gemensamma flaggor:\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1983 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DATAKAT plats för databasens lagringsarea\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:1985 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e KÄLLA händelsekälla för loggning när vi kör som en tjänst\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1987 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent skriv bara ut fel, inga informationsmeddelanden\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:1988 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEK antal sekunder att vänta när växeln -w används\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:1989 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:1990 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait vänta på att operationen slutförs (standard)\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1991 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait vänta inte på att operationen slutförs\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1992 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa den här hjälpen, avsluta sedan\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:1993 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Om flaggan -D inte har angivits så används omgivningsvariabeln PGDATA.\n" -#: pg_ctl.c:1998 +#: pg_ctl.c:1995 #, c-format msgid "" "\n" @@ -631,22 +650,22 @@ msgstr "" "\n" "Flaggor för start eller omstart:\n" -#: pg_ctl.c:2000 +#: pg_ctl.c:1997 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files tillåt postgres att skapa core-filer\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:1999 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files inte giltig för denna plattform\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2001 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=FILNAMN skriv, eller tillfoga, server-loggen till FILNAMN\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2002 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -655,14 +674,14 @@ msgstr "" " -o, --options=OPTIONS kommandoradsflaggor som skickas vidare till postgres\n" " (PostgreSQL-serverns körbara fil) eller till initdb\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:2004 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr "" " -p SÖKVÄG-TILL-POSTGRES\n" " behövs normalt inte\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2005 #, c-format msgid "" "\n" @@ -671,12 +690,12 @@ msgstr "" "\n" "Flaggor för stopp eller omstart:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2006 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=METOD METOD kan vara \"smart\", \"fast\" eller \"immediate\"\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2008 #, c-format msgid "" "\n" @@ -685,22 +704,22 @@ msgstr "" "\n" "Stängningsmetoder är:\n" -#: pg_ctl.c:2012 +#: pg_ctl.c:2009 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart stäng när alla klienter har avslutat\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2010 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast stäng omedelbart, med en kontrollerad nedstängning (standard)\n" -#: pg_ctl.c:2014 +#: pg_ctl.c:2011 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr " immediate stäng utan kontroller; kommer leda till återställning vid omstart\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2013 #, c-format msgid "" "\n" @@ -709,7 +728,7 @@ msgstr "" "\n" "Tillåtna signalnamn för kommando \"kill\":\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2017 #, c-format msgid "" "\n" @@ -718,27 +737,27 @@ msgstr "" "\n" "Flaggor för registrering och avregistrering:\n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2018 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N TJÄNSTENAMN tjänstenamn att registrera PostgreSQL-servern med\n" -#: pg_ctl.c:2022 +#: pg_ctl.c:2019 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P LÖSENORD lösenord för konto vid registrering av PostgreSQL-servern\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2020 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U NAMN användarnamn för konto vid registrering av PostgreSQL-servern\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2021 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S STARTSÄTT sätt att registrera PostgreSQL-servern vid tjänstestart\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2023 #, c-format msgid "" "\n" @@ -747,17 +766,17 @@ msgstr "" "\n" "Startmetoder är:\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2024 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto starta tjänsten automatiskt vid systemstart (förval)\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2025 #, c-format msgid " demand start service on demand\n" msgstr " demand starta tjänsten vid behov\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2028 #, c-format msgid "" "\n" @@ -766,37 +785,37 @@ msgstr "" "\n" "Rapportera fel till <%s>.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2029 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2054 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: ogiltig stängningsmetod \"%s\"\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2083 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: ogiltigt signalnamn \"%s\"\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2100 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: ogiltigt startvillkor \"%s\"\n" -#: pg_ctl.c:2159 +#: pg_ctl.c:2156 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: kunde inte bestämma databaskatalogen från kommandot \"%s\"\n" -#: pg_ctl.c:2182 +#: pg_ctl.c:2179 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: kontrollfilen verkar vara trasig\n" -#: pg_ctl.c:2250 +#: pg_ctl.c:2247 #, c-format msgid "" "%s: cannot be run as root\n" @@ -807,52 +826,32 @@ msgstr "" "Logga in (t.ex. med \"su\") som den (opriviligerade) användare\n" "vilken skall äga serverprocessen.\n" -#: pg_ctl.c:2333 +#: pg_ctl.c:2319 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: flaggan -S stöds inte på denna plattform.\n" -#: pg_ctl.c:2370 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: för många kommandoradsargument (första är \"%s\")\n" - -#: pg_ctl.c:2396 +#: pg_ctl.c:2375 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: saknar argument för \"kill\"-kommando.\n" -#: pg_ctl.c:2414 +#: pg_ctl.c:2393 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: okänd operationsmetod \"%s\"\n" -#: pg_ctl.c:2424 +#: pg_ctl.c:2402 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: för många kommandoradsargument (första är \"%s\")\n" + +#: pg_ctl.c:2409 #, c-format msgid "%s: no operation specified\n" msgstr "%s: ingen operation angiven\n" -#: pg_ctl.c:2445 +#: pg_ctl.c:2430 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: ingen databaskatalog angiven och omgivningsvariabeln PGDATA är inte satt\n" - -#, c-format -#~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -#~ msgstr "%s: VARNING: \"Restricted Token\" stöds inte av plattformen.\n" - -#, c-format -#~ msgid "%s: WARNING: could not locate all job object functions in system API\n" -#~ msgstr "%s: VARNING: kunde inte hitta alla jobb-funktioner system-API:et.\n" - -#, c-format -#~ msgid "could not change directory to \"%s\": %m" -#~ msgstr "kunde inte byta katalog till \"%s\": %m" - -#, c-format -#~ msgid "could not identify current directory: %m" -#~ msgstr "kunde inte identifiera aktuell katalog: %m" - -#, c-format -#~ msgid "could not read symbolic link \"%s\": %m" -#~ msgstr "kan inte läsa symbolisk länk \"%s\": %m" diff --git a/src/bin/pg_ctl/po/uk.po b/src/bin/pg_ctl/po/uk.po index c1fcbe971331d..b517535543aac 100644 --- a/src/bin/pg_ctl/po/uk.po +++ b/src/bin/pg_ctl/po/uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-04-19 11:18+0000\n" -"PO-Revision-Date: 2023-12-19 15:37\n" +"POT-Creation-Date: 2024-08-31 06:20+0000\n" +"PO-Revision-Date: 2024-09-23 19:38\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -14,41 +14,60 @@ msgstr "" "X-Crowdin-Project: postgresql\n" "X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_16_STABLE/pg_ctl.pot\n" -"X-Crowdin-File-ID: 937\n" +"X-Crowdin-File: /REL_17_STABLE/pg_ctl.pot\n" +"X-Crowdin-File-ID: 994\n" -#: ../../common/exec.c:172 +#: ../../common/controldata_utils.c:168 +msgid "byte ordering mismatch" +msgstr "неправильний порядок байтів" + +#: ../../common/exec.c:174 #, c-format msgid "invalid binary \"%s\": %m" msgstr "невірний бінарний файл \"%s\": %m" -#: ../../common/exec.c:215 +#: ../../common/exec.c:217 #, c-format msgid "could not read binary \"%s\": %m" msgstr "не вдалося прочитати бінарний файл \"%s\": %m" -#: ../../common/exec.c:223 +#: ../../common/exec.c:225 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:250 +#: ../../common/exec.c:252 #, c-format msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "не вдалося знайти абсолютний шлях \"%s\": %m" -#: ../../common/exec.c:412 +#: ../../common/exec.c:382 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не вдалося виконати команду \"%s\": %m" + +#: ../../common/exec.c:394 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не вдалося прочитати висновок команди \"%s\": %m" + +#: ../../common/exec.c:397 +#, c-format +msgid "no data was returned by command \"%s\"" +msgstr "команда \"%s\" не повернула жодних даних" + +#: ../../common/exec.c:424 #, c-format msgid "%s() failed: %m" msgstr "%s() помилка: %m" -#: ../../common/exec.c:550 ../../common/exec.c:595 ../../common/exec.c:687 +#: ../../common/exec.c:562 ../../common/exec.c:607 ../../common/exec.c:699 msgid "out of memory" msgstr "недостатньо пам'яті" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 -#: ../../port/path.c:753 ../../port/path.c:791 ../../port/path.c:808 +#: ../../port/path.c:753 ../../port/path.c:790 ../../port/path.c:807 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" @@ -90,674 +109,674 @@ msgstr "дочірній процес завершився з невизнани #: ../../port/path.c:775 #, c-format -msgid "could not get current working directory: %s\n" -msgstr "не вдалося отримати поточний робочий каталог: %s\n" +msgid "could not get current working directory: %m\n" +msgstr "не вдалося отримати поточний робочий каталог: %m\n" -#: pg_ctl.c:255 +#: pg_ctl.c:254 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: директорія \"%s\" не існує\n" -#: pg_ctl.c:258 +#: pg_ctl.c:257 #, c-format -msgid "%s: could not access directory \"%s\": %s\n" -msgstr "%s: немає доступу до каталогу \"%s\": %s\n" +msgid "%s: could not access directory \"%s\": %m\n" +msgstr "%s: не вдалося отримати доступ до каталогу \"%s\": %m\n" -#: pg_ctl.c:271 +#: pg_ctl.c:270 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: каталог \"%s\" не є каталогом кластера бази даних\n" -#: pg_ctl.c:284 +#: pg_ctl.c:283 #, c-format -msgid "%s: could not open PID file \"%s\": %s\n" -msgstr "%s: не вдалося відкрити файл PID \"%s\": %s\n" +msgid "%s: could not open PID file \"%s\": %m\n" +msgstr "%s: не вдалося відкрити файл PID \"%s\": %m\n" -#: pg_ctl.c:293 +#: pg_ctl.c:292 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: файл PID \"%s\" пустий\n" -#: pg_ctl.c:296 +#: pg_ctl.c:295 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: невірні дані у файлі PID \"%s\"\n" -#: pg_ctl.c:458 pg_ctl.c:500 +#: pg_ctl.c:457 pg_ctl.c:499 #, c-format -msgid "%s: could not start server: %s\n" -msgstr "%s: не вдалося запустити сервер: %s\n" +msgid "%s: could not start server: %m\n" +msgstr "%s: не вдалося запустити сервер: %m\n" -#: pg_ctl.c:478 +#: pg_ctl.c:477 #, c-format -msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "%s: не вдалося запустити сервер через помилку setsid(): %s\n" +msgid "%s: could not start server due to setsid() failure: %m\n" +msgstr "%s: не вдалося запустити сервер через помилку setsid(): %m\n" -#: pg_ctl.c:548 +#: pg_ctl.c:547 #, c-format -msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s: не вдалося відкрити файл журналу \"%s\": %s\n" +msgid "%s: could not open log file \"%s\": %m\n" +msgstr "%s: не вдалося відкрити файл журналу \"%s\": %m\n" -#: pg_ctl.c:565 +#: pg_ctl.c:564 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: не вдалося запустити сервер: код помилки %lu\n" -#: pg_ctl.c:782 +#: pg_ctl.c:781 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: не вдалося встановити обмеження на розмір файлу; заборонено жорстким лімітом\n" -#: pg_ctl.c:808 +#: pg_ctl.c:807 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: не вдалося прочитати файл \"%s\"\n" -#: pg_ctl.c:813 +#: pg_ctl.c:812 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: файл параметрів \"%s\" повинен містити рівно один рядок\n" -#: pg_ctl.c:855 pg_ctl.c:1039 pg_ctl.c:1107 +#: pg_ctl.c:854 pg_ctl.c:1038 pg_ctl.c:1105 #, c-format -msgid "%s: could not send stop signal (PID: %d): %s\n" -msgstr "%s: не вдалося надіслати стоп-сигнал (PID: %d): %s\n" +msgid "%s: could not send stop signal (PID: %d): %m\n" +msgstr "%s: не вдалося надіслати стоп-сигнал (PID: %d): %m\n" -#: pg_ctl.c:883 +#: pg_ctl.c:882 #, c-format msgid "program \"%s\" is needed by %s but was not found in the same directory as \"%s\"\n" msgstr "програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\"\n" -#: pg_ctl.c:886 +#: pg_ctl.c:885 #, c-format msgid "program \"%s\" was found by \"%s\" but was not the same version as %s\n" msgstr "програма \"%s\" знайдена для \"%s\", але має відмінну версію від %s\n" -#: pg_ctl.c:918 +#: pg_ctl.c:917 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: не вдалося виконати ініціалізацію системи бази даних\n" -#: pg_ctl.c:933 +#: pg_ctl.c:932 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: мабуть, інший сервер вже працює; у будь-якому разі спробуємо запустити сервер\n" -#: pg_ctl.c:981 +#: pg_ctl.c:980 msgid "waiting for server to start..." msgstr "очікується запуск серверу..." -#: pg_ctl.c:986 pg_ctl.c:1063 pg_ctl.c:1126 pg_ctl.c:1238 +#: pg_ctl.c:985 pg_ctl.c:1061 pg_ctl.c:1123 pg_ctl.c:1235 msgid " done\n" msgstr " готово\n" -#: pg_ctl.c:987 +#: pg_ctl.c:986 msgid "server started\n" msgstr "сервер запущено\n" -#: pg_ctl.c:990 pg_ctl.c:996 pg_ctl.c:1243 +#: pg_ctl.c:989 pg_ctl.c:995 pg_ctl.c:1240 msgid " stopped waiting\n" msgstr " очікування припинено\n" -#: pg_ctl.c:991 +#: pg_ctl.c:990 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: сервер не було запущено вчасно\n" -#: pg_ctl.c:997 +#: pg_ctl.c:996 #, c-format msgid "%s: could not start server\n" "Examine the log output.\n" msgstr "%s: неможливо запустити сервер\n" "Передивіться протокол виконання.\n" -#: pg_ctl.c:1005 +#: pg_ctl.c:1004 msgid "server starting\n" msgstr "запуск серверу\n" -#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1147 pg_ctl.c:1186 pg_ctl.c:1267 +#: pg_ctl.c:1023 pg_ctl.c:1081 pg_ctl.c:1144 pg_ctl.c:1183 pg_ctl.c:1264 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: файл PID \"%s\" не існує\n" -#: pg_ctl.c:1025 pg_ctl.c:1085 pg_ctl.c:1148 pg_ctl.c:1187 pg_ctl.c:1268 +#: pg_ctl.c:1024 pg_ctl.c:1083 pg_ctl.c:1145 pg_ctl.c:1184 pg_ctl.c:1265 msgid "Is server running?\n" msgstr "Сервер працює?\n" -#: pg_ctl.c:1031 +#: pg_ctl.c:1030 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %d)\n" msgstr "%s: не можливо зупинити сервер; сервер запущений в режимі single-user (PID: %d)\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1044 msgid "server shutting down\n" msgstr "сервер зупиняється\n" -#: pg_ctl.c:1051 pg_ctl.c:1112 +#: pg_ctl.c:1049 pg_ctl.c:1109 msgid "waiting for server to shut down..." msgstr "очікується зупинка серверу..." -#: pg_ctl.c:1055 pg_ctl.c:1117 +#: pg_ctl.c:1053 pg_ctl.c:1114 msgid " failed\n" msgstr " помилка\n" -#: pg_ctl.c:1057 pg_ctl.c:1119 +#: pg_ctl.c:1055 pg_ctl.c:1116 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: сервер не зупинено\n" -#: pg_ctl.c:1059 pg_ctl.c:1121 +#: pg_ctl.c:1057 pg_ctl.c:1118 msgid "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" msgstr "ПІДКАЗКА: Режим \"-m fast\" закриває сесії відразу, не чекаючи на відключення ініційовані сесіями.\n" -#: pg_ctl.c:1065 pg_ctl.c:1127 +#: pg_ctl.c:1063 pg_ctl.c:1124 msgid "server stopped\n" msgstr "сервер зупинено\n" -#: pg_ctl.c:1086 +#: pg_ctl.c:1084 msgid "trying to start server anyway\n" msgstr "спроба запуску серверу в будь-якому разі\n" -#: pg_ctl.c:1095 +#: pg_ctl.c:1093 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %d)\n" msgstr "%s: не можливо перезапустити сервер; сервер запущений в режимі single-user (PID: %d)\n" -#: pg_ctl.c:1098 pg_ctl.c:1157 +#: pg_ctl.c:1096 pg_ctl.c:1154 msgid "Please terminate the single-user server and try again.\n" msgstr "Будь ласка, припиніть однокористувацький сервер та спробуйте ще раз.\n" -#: pg_ctl.c:1131 +#: pg_ctl.c:1128 #, c-format msgid "%s: old server process (PID: %d) seems to be gone\n" msgstr "%s: старий серверний процес (PID: %d), здається, зник\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1130 msgid "starting server anyway\n" msgstr "запуск серверу в будь-якому разі\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1151 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %d)\n" msgstr "%s: не можливо перезапустити сервер; сервер запущений в режимі single-user (PID: %d)\n" -#: pg_ctl.c:1163 +#: pg_ctl.c:1160 #, c-format -msgid "%s: could not send reload signal (PID: %d): %s\n" -msgstr "%s: не можливо надіслати сигнал перезавантаження (PID: %d): %s\n" +msgid "%s: could not send reload signal (PID: %d): %m\n" +msgstr "%s: не можливо надіслати сигнал перезавантаження (PID: %d): %m\n" -#: pg_ctl.c:1168 +#: pg_ctl.c:1165 msgid "server signaled\n" msgstr "серверу надіслано сигнал\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1190 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %d)\n" msgstr "%s: неможливо підвищити сервер; сервер запущено в режимі single-user (PID: %d)\n" -#: pg_ctl.c:1201 +#: pg_ctl.c:1198 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: неможливо підвищити сервер; сервер запущено не в режимі резерву\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1208 #, c-format -msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "%s: неможливо створити файл \"%s\" із сигналом для підвищення: %s\n" +msgid "%s: could not create promote signal file \"%s\": %m\n" +msgstr "%s: неможливо створити файл \"%s\" із сигналом для підвищення: %m\n" -#: pg_ctl.c:1217 +#: pg_ctl.c:1214 #, c-format -msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "%s: неможливо записати файл \"%s\" із сигналом для підвищення: %s\n" +msgid "%s: could not write promote signal file \"%s\": %m\n" +msgstr "%s: неможливо записати файл \"%s\" із сигналом для підвищення: %m\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1222 #, c-format -msgid "%s: could not send promote signal (PID: %d): %s\n" -msgstr "%s: неможливо надіслати сигнал підвищення (PID: %d): %s\n" +msgid "%s: could not send promote signal (PID: %d): %m\n" +msgstr "%s: неможливо надіслати сигнал підвищення (PID: %d): %m\n" -#: pg_ctl.c:1228 +#: pg_ctl.c:1225 #, c-format -msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "%s: неможливо видалити файл \"%s\" із сигналом для підвищення: %s\n" +msgid "%s: could not remove promote signal file \"%s\": %m\n" +msgstr "%s: неможливо видалити файл \"%s\" із сигналом для підвищення: %m\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1232 msgid "waiting for server to promote..." msgstr "очікується підвищення серверу..." -#: pg_ctl.c:1239 +#: pg_ctl.c:1236 msgid "server promoted\n" msgstr "сервер підвищено\n" -#: pg_ctl.c:1244 +#: pg_ctl.c:1241 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: сервер не було підвищено вчасно\n" -#: pg_ctl.c:1250 +#: pg_ctl.c:1247 msgid "server promoting\n" msgstr "сервер підвищується\n" -#: pg_ctl.c:1274 +#: pg_ctl.c:1271 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %d)\n" msgstr "%s: не можливо розвернути файл журналу; сервер працює в режимі одного користувача (PID: %d)\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1281 #, c-format -msgid "%s: could not create log rotation signal file \"%s\": %s\n" -msgstr "%s: не вдалося створити файл сигналу розвороту журналу \"%s\": %s\n" +msgid "%s: could not create log rotation signal file \"%s\": %m\n" +msgstr "%s: не вдалося створити файл сигналу розвороту журналу \"%s\": %m\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1287 #, c-format -msgid "%s: could not write log rotation signal file \"%s\": %s\n" -msgstr "%s: не вдалося записати у файл сигналу розвороту журналу \"%s\": %s\n" +msgid "%s: could not write log rotation signal file \"%s\": %m\n" +msgstr "%s: не вдалося записати у файл сигналу розвороту журналу \"%s\": %m\n" -#: pg_ctl.c:1298 +#: pg_ctl.c:1295 #, c-format -msgid "%s: could not send log rotation signal (PID: %d): %s\n" -msgstr "%s: не вдалося надіслати сигнал розвороту журналу (PID: %d): %s\n" +msgid "%s: could not send log rotation signal (PID: %d): %m\n" +msgstr "%s: не вдалося надіслати сигнал розвороту журналу (PID: %d): %m\n" -#: pg_ctl.c:1301 +#: pg_ctl.c:1298 #, c-format -msgid "%s: could not remove log rotation signal file \"%s\": %s\n" -msgstr "%s: не вдалося видалити файл сигналу розвороту журналу \"%s\": %s\n" +msgid "%s: could not remove log rotation signal file \"%s\": %m\n" +msgstr "%s: не вдалося видалити файл сигналу розвороту журналу \"%s\": %m\n" -#: pg_ctl.c:1306 +#: pg_ctl.c:1303 msgid "server signaled to rotate log file\n" msgstr "серверу надіслано сигнал для розворот файлу журналу\n" -#: pg_ctl.c:1353 +#: pg_ctl.c:1350 #, c-format msgid "%s: single-user server is running (PID: %d)\n" msgstr "%s: однокористувацький сервер працює (PID: %d)\n" -#: pg_ctl.c:1367 +#: pg_ctl.c:1364 #, c-format msgid "%s: server is running (PID: %d)\n" msgstr "%s: сервер працює (PID: %d)\n" -#: pg_ctl.c:1383 +#: pg_ctl.c:1380 #, c-format msgid "%s: no server running\n" msgstr "%s: сервер не працює \n" -#: pg_ctl.c:1400 +#: pg_ctl.c:1397 #, c-format -msgid "%s: could not send signal %d (PID: %d): %s\n" -msgstr "%s: не вдалося надіслати сигнал %d (PID: %d): %s\n" +msgid "%s: could not send signal %d (PID: %d): %m\n" +msgstr "%s: не вдалося надіслати сигнал %d (PID: %d): %m\n" -#: pg_ctl.c:1431 +#: pg_ctl.c:1428 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не вдалося знайти ехе файл власної програми\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1438 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: не вдалося знайти виконану програму postgres\n" -#: pg_ctl.c:1511 pg_ctl.c:1545 +#: pg_ctl.c:1508 pg_ctl.c:1542 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: не вдалося відкрити менеджер служб\n" -#: pg_ctl.c:1517 +#: pg_ctl.c:1514 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: служба \"%s\" вже зареєстрована \n" -#: pg_ctl.c:1528 +#: pg_ctl.c:1525 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: не вдалося зареєструвати службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1551 +#: pg_ctl.c:1548 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: служба \"%s\" не зареєстрована \n" -#: pg_ctl.c:1558 +#: pg_ctl.c:1555 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: не вдалося відкрити службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1564 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: не вдалося видалити службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1654 +#: pg_ctl.c:1651 msgid "Waiting for server startup...\n" msgstr "Очікування запуску сервера...\n" -#: pg_ctl.c:1657 +#: pg_ctl.c:1654 msgid "Timed out waiting for server startup\n" msgstr "Перевищено час очікування запуску сервера\n" -#: pg_ctl.c:1661 +#: pg_ctl.c:1658 msgid "Server started and accepting connections\n" msgstr "Сервер запущений і приймає з'єднання\n" -#: pg_ctl.c:1716 +#: pg_ctl.c:1713 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: не вдалося почати службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1789 +#: pg_ctl.c:1786 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: не вдалося відкрити токен процесу: код помилки %lu\n" -#: pg_ctl.c:1803 +#: pg_ctl.c:1800 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: не вдалося виділити SID: код помилки %lu\n" -#: pg_ctl.c:1829 +#: pg_ctl.c:1826 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: не вдалося створити обмежений токен: код помилки %lu\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1908 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: не вдалося отримати LUIDs для прав: код помилки %lu\n" -#: pg_ctl.c:1919 pg_ctl.c:1934 +#: pg_ctl.c:1916 pg_ctl.c:1931 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: не вдалося отримати інформацію токену: код помилки %lu\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:1925 #, c-format msgid "%s: out of memory\n" msgstr "%s: бракує пам'яті\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:1955 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:1963 #, c-format msgid "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n\n" msgstr "%s - це утиліта для ініціалізації, запуску, зупинки і контролю серверу PostgreSQL.\n\n" -#: pg_ctl.c:1967 +#: pg_ctl.c:1964 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:1965 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D КАТАЛОГ-ДАНИХ] [-s] [-o ПАРАМЕТРИ]\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1966 #, c-format msgid " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-p PATH] [-c]\n" msgstr " %s start [-D КАТАЛОГ-ДАНИХ] [-l ІМ'Я-ФАЙЛ] [-W] [-t СЕК] [-s]\n" " [-o ПАРАМЕТРИ] [-p ШЛЯХ] [-c]\n" -#: pg_ctl.c:1971 +#: pg_ctl.c:1968 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D КАТАЛОГ-ДАНИХ] [-m РЕЖИМ-ЗУПИНКИ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:1969 #, c-format msgid " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" msgstr " %s restart [-D КАТАЛОГ-ДАНИХ] [-m РЕЖИМ-ЗУПИНКИ] [-W] [-t СЕК] [-s]\n" " [-o ПАРАМЕТРИ] [-c]\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:1971 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D КАТАЛОГ-ДАНИХ] [-s]\n" -#: pg_ctl.c:1975 +#: pg_ctl.c:1972 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:1976 +#: pg_ctl.c:1973 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D КАТАЛОГ-ДАНИХ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1974 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATADIR] [-s]\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1975 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill ІМ'Я-СИГНАЛУ PID\n" -#: pg_ctl.c:1980 +#: pg_ctl.c:1977 #, c-format msgid " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" " [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" msgstr " %s register [-D КАТАЛОГ-ДАНИХ] [-N ІМ'Я-СЛУЖБИ] [-U ІМ'Я-КОРИСТУВАЧА] [-P ПАРОЛЬ]\n" " [-S ТИП-ЗАПУСКУ] [-e ДЖЕРЕЛО] [-W] [-t СЕК] [-s] [-o ПАРАМЕТРИ]\n" -#: pg_ctl.c:1982 +#: pg_ctl.c:1979 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N ІМ'Я-СЛУЖБИ]\n" -#: pg_ctl.c:1985 +#: pg_ctl.c:1982 #, c-format msgid "\n" "Common options:\n" msgstr "\n" "Загальні параметри:\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1983 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=КАТАЛОГ-ДАНИХ розташування простору зберігання бази даних\n" -#: pg_ctl.c:1988 +#: pg_ctl.c:1985 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e ДЖЕРЕЛО джерело подій для протоколу при запуску в якості послуги\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1987 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent виводити лише помилки, без інформаційних повідомлень\n" -#: pg_ctl.c:1991 +#: pg_ctl.c:1988 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=СЕК час очікування при використанні -w параметра\n" -#: pg_ctl.c:1992 +#: pg_ctl.c:1989 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: pg_ctl.c:1993 +#: pg_ctl.c:1990 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait чекати завершення операції (за замовчуванням)\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1991 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait не чекати завершення операції\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1992 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку потім вийти\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:1993 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Якщо -D параметр пропущено, використовувати змінну середовища PGDATA.\n" -#: pg_ctl.c:1998 +#: pg_ctl.c:1995 #, c-format msgid "\n" "Options for start or restart:\n" msgstr "\n" "Параметри запуску або перезапуску:\n" -#: pg_ctl.c:2000 +#: pg_ctl.c:1997 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files дозволяти postgres створювати дампи пам'яті\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:1999 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files недопустимо цією платформою\n" -#: pg_ctl.c:2004 +#: pg_ctl.c:2001 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=ФАЙЛ записувати (або додавати) протокол служби до ФАЙЛ\n" -#: pg_ctl.c:2005 +#: pg_ctl.c:2002 #, c-format msgid " -o, --options=OPTIONS command line options to pass to postgres\n" " (PostgreSQL server executable) or initdb\n" msgstr " -o, --options=ПАРАМЕТРИ параметри командного рядку для PostgreSQL або initdb\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:2004 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ШЛЯХ-ДО-СЕРВЕРУ зазвичай зайвий\n" -#: pg_ctl.c:2008 +#: pg_ctl.c:2005 #, c-format msgid "\n" "Options for stop or restart:\n" msgstr "\n" "Параметри припинення або перезапуску:\n" -#: pg_ctl.c:2009 +#: pg_ctl.c:2006 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=РЕЖИМ РЕЖИМ може бути \"smart\", \"fast\", або \"immediate\"\n" -#: pg_ctl.c:2011 +#: pg_ctl.c:2008 #, c-format msgid "\n" "Shutdown modes are:\n" msgstr "\n" "Режими зупинки:\n" -#: pg_ctl.c:2012 +#: pg_ctl.c:2009 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart вийти після від'єднання усіх клієнтів\n" -#: pg_ctl.c:2013 +#: pg_ctl.c:2010 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast вийти негайно з коректним вимкненням (за замовченням)\n" -#: pg_ctl.c:2014 +#: pg_ctl.c:2011 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr " immediate вийти негайно без повної процедури. Приведе до відновлення під час перезапуску\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2013 #, c-format msgid "\n" "Allowed signal names for kill:\n" msgstr "\n" "Дозволенні сигнали для команди kill:\n" -#: pg_ctl.c:2020 +#: pg_ctl.c:2017 #, c-format msgid "\n" "Options for register and unregister:\n" msgstr "\n" "Параметри для реєстрації і видалення: \n" -#: pg_ctl.c:2021 +#: pg_ctl.c:2018 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N ІМ'Я-СЛУЖБИ ім'я служби під яким зареєструвати сервер PostgreSQL\n" -#: pg_ctl.c:2022 +#: pg_ctl.c:2019 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P ПАРОЛЬ пароль облікового запису для реєстрації серверу PostgreSQL\n" -#: pg_ctl.c:2023 +#: pg_ctl.c:2020 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U КОРИСТУВАЧ ім'я користувача під яким зареєструвати сервер PostgreSQL\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2021 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S ТИП-ЗАПУСКУ тип запуску служби для реєстрації серверу PostgreSQL\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2023 #, c-format msgid "\n" "Start types are:\n" msgstr "\n" "Типи запуску:\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2024 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto запускати сервер автоматично під час запуску системи (за замовчуванням)\n" -#: pg_ctl.c:2028 +#: pg_ctl.c:2025 #, c-format msgid " demand start service on demand\n" msgstr " demand запускати сервер за потреби\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2028 #, c-format msgid "\n" "Report bugs to <%s>.\n" msgstr "\n" "Повідомляти про помилки на <%s>.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2029 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2054 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: невідомий режим завершення \"%s\"\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2083 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: невідомий сигнал \"%s\"\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2100 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: невідомий тип запуску \"%s\"\n" -#: pg_ctl.c:2159 +#: pg_ctl.c:2156 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: неможливо визначити каталог даних за допомогою команди \"%s\"\n" -#: pg_ctl.c:2182 +#: pg_ctl.c:2179 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: контрольний файл видається пошкодженим\n" -#: pg_ctl.c:2250 +#: pg_ctl.c:2247 #, c-format msgid "%s: cannot be run as root\n" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -766,32 +785,32 @@ msgstr "%s: не може бути запущеним від ім'я супер- " Будь ласка увійдіть (використовуючи наприклад, \"su\") як (непривілейований) користувач який буде мати\n" "свій серверний процес. \n" -#: pg_ctl.c:2333 +#: pg_ctl.c:2319 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: параметр -S не підтримується цією платформою\n" -#: pg_ctl.c:2370 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: забагато аргументів у командному рядку (перший \"%s\")\n" - -#: pg_ctl.c:2396 +#: pg_ctl.c:2375 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: відсутні аргументи для режиму kill\n" -#: pg_ctl.c:2414 +#: pg_ctl.c:2393 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: невідомий режим роботи \"%s\"\n" -#: pg_ctl.c:2424 +#: pg_ctl.c:2402 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: забагато аргументів у командному рядку (перший \"%s\")\n" + +#: pg_ctl.c:2409 #, c-format msgid "%s: no operation specified\n" msgstr "%s: команда не вказана\n" -#: pg_ctl.c:2445 +#: pg_ctl.c:2430 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: не вказано каталог даних і змінна середовища PGDATA не встановлена\n" diff --git a/src/bin/pg_dump/Makefile b/src/bin/pg_dump/Makefile index 233ad15ca75dc..fa795883e9f30 100644 --- a/src/bin/pg_dump/Makefile +++ b/src/bin/pg_dump/Makefile @@ -31,6 +31,7 @@ OBJS = \ compress_lz4.o \ compress_none.o \ compress_zstd.o \ + connectdb.o \ dumputils.o \ filter.o \ parallel.o \ @@ -50,8 +51,8 @@ pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) | submake-libpq submake-libpg pg_restore: pg_restore.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) pg_restore.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_dumpall: pg_dumpall.o dumputils.o filter.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) pg_dumpall.o dumputils.o filter.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_dumpall: pg_dumpall.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils + $(CC) $(CFLAGS) pg_dumpall.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_dump$(X) '$(DESTDIR)$(bindir)'/pg_dump$(X) diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 56b6c368acf89..a1976fae607d6 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -17,6 +17,7 @@ #include +#include "catalog/pg_am_d.h" #include "catalog/pg_class_d.h" #include "catalog/pg_collation_d.h" #include "catalog/pg_extension_d.h" @@ -453,8 +454,8 @@ flagInhIndexes(Archive *fout, TableInfo tblinfo[], int numTables) * What we need to do here is: * * - Detect child columns that inherit NOT NULL bits from their parents, so - * that we needn't specify that again for the child. (Versions >= 18 no - * longer need this.) + * that we needn't specify that again for the child. For versions 18 and + * up, this is needed when the parent is NOT VALID and the child isn't. * * - Detect child columns that have DEFAULT NULL when their parents had some * non-null default. In this case, we make up a dummy AttrDefInfo object so @@ -516,6 +517,8 @@ flagInhAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTables bool foundDefault; /* Found a default in a parent */ bool foundSameGenerated; /* Found matching GENERATED */ bool foundDiffGenerated; /* Found non-matching GENERATED */ + bool allNotNullsInvalid = true; /* is NOT NULL NOT VALID + * on all parents? */ /* no point in examining dropped columns */ if (tbinfo->attisdropped[j]) @@ -546,6 +549,18 @@ flagInhAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTables parent->notnull_constrs[inhAttrInd] != NULL) foundNotNull = true; + /* + * Keep track of whether all the parents that have a + * not-null constraint on this column have it as NOT + * VALID; if they all are, arrange to have it printed for + * this column. If at least one parent has it as valid, + * there's no need. + */ + if (fout->remoteVersion >= 180000 && + parent->notnull_constrs[inhAttrInd] && + !parent->notnull_invalid[inhAttrInd]) + allNotNullsInvalid = false; + foundDefault |= (parentDef != NULL && strcmp(parentDef->adef_expr, "NULL") != 0 && !parent->attgenerated[inhAttrInd]); @@ -571,6 +586,14 @@ flagInhAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTables if (fout->remoteVersion < 180000 && foundNotNull) tbinfo->notnull_islocal[j] = false; + /* + * For versions >18, we must print the not-null constraint locally + * for this table even if it isn't really locally defined, but is + * valid for the child and no parent has it as valid. + */ + if (fout->remoteVersion >= 180000 && allNotNullsInvalid) + tbinfo->notnull_islocal[j] = true; + /* * Manufacture a DEFAULT NULL clause if necessary. This breaks * the advice given above to avoid changing state that might get @@ -922,6 +945,24 @@ findOprByOid(Oid oid) return (OprInfo *) dobj; } +/* + * findAccessMethodByOid + * finds the DumpableObject for the access method with the given oid + * returns NULL if not found + */ +AccessMethodInfo * +findAccessMethodByOid(Oid oid) +{ + CatalogId catId; + DumpableObject *dobj; + + catId.tableoid = AccessMethodRelationId; + catId.oid = oid; + dobj = findObjectByCatalogId(catId); + Assert(dobj == NULL || dobj->objType == DO_ACCESS_METHOD); + return (AccessMethodInfo *) dobj; +} + /* * findCollationByOid * finds the DumpableObject for the collation with the given oid diff --git a/src/bin/pg_dump/compress_gzip.c b/src/bin/pg_dump/compress_gzip.c index 23f617209e65e..5a30ebf9bf5b5 100644 --- a/src/bin/pg_dump/compress_gzip.c +++ b/src/bin/pg_dump/compress_gzip.c @@ -18,7 +18,7 @@ #include "pg_backup_utils.h" #ifdef HAVE_LIBZ -#include "zlib.h" +#include /*---------------------- * Compressor API diff --git a/src/bin/pg_dump/compress_zstd.c b/src/bin/pg_dump/compress_zstd.c index 1f7b4942706b4..cb595b10c2d32 100644 --- a/src/bin/pg_dump/compress_zstd.c +++ b/src/bin/pg_dump/compress_zstd.c @@ -142,6 +142,7 @@ EndCompressorZstd(ArchiveHandle *AH, CompressorState *cs) /* output buffer may be allocated in either mode */ pg_free(zstdcs->output.dst); pg_free(zstdcs); + cs->private_data = NULL; } static void diff --git a/src/bin/pg_dump/connectdb.c b/src/bin/pg_dump/connectdb.c new file mode 100644 index 0000000000000..d55d53dbeeab9 --- /dev/null +++ b/src/bin/pg_dump/connectdb.c @@ -0,0 +1,295 @@ +/*------------------------------------------------------------------------- + * + * connectdb.c + * This is a common file connection to the database. + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/bin/pg_dump/connectdb.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres_fe.h" + +#include "common/connect.h" +#include "common/logging.h" +#include "common/string.h" +#include "connectdb.h" +#include "dumputils.h" +#include "fe_utils/string_utils.h" + +static char *constructConnStr(const char **keywords, const char **values); + +/* + * ConnectDatabase + * + * Make a database connection with the given parameters. An + * interactive password prompt is automatically issued if required. + * + * If fail_on_error is false, we return NULL without printing any message + * on failure, but preserve any prompted password for the next try. + * + * On success, the 'connstr' is set to a connection string containing + * the options used and 'server_version' is set to version so that caller + * can use them. + */ +PGconn * +ConnectDatabase(const char *dbname, const char *connection_string, + const char *pghost, const char *pgport, const char *pguser, + trivalue prompt_password, bool fail_on_error, const char *progname, + const char **connstr, int *server_version, char *password, + char *override_dbname) +{ + PGconn *conn; + bool new_pass; + const char *remoteversion_str; + int my_version; + const char **keywords = NULL; + const char **values = NULL; + PQconninfoOption *conn_opts = NULL; + int server_version_temp; + + if (prompt_password == TRI_YES && !password) + password = simple_prompt("Password: ", false); + + /* + * Start the connection. Loop until we have a password if requested by + * backend. + */ + do + { + int argcount = 8; + PQconninfoOption *conn_opt; + char *err_msg = NULL; + int i = 0; + + free(keywords); + free(values); + PQconninfoFree(conn_opts); + + /* + * Merge the connection info inputs given in form of connection string + * and other options. Explicitly discard any dbname value in the + * connection string; otherwise, PQconnectdbParams() would interpret + * that value as being itself a connection string. + */ + if (connection_string) + { + conn_opts = PQconninfoParse(connection_string, &err_msg); + if (conn_opts == NULL) + pg_fatal("%s", err_msg); + + for (conn_opt = conn_opts; conn_opt->keyword != NULL; conn_opt++) + { + if (conn_opt->val != NULL && conn_opt->val[0] != '\0' && + strcmp(conn_opt->keyword, "dbname") != 0) + argcount++; + } + + keywords = pg_malloc0((argcount + 1) * sizeof(*keywords)); + values = pg_malloc0((argcount + 1) * sizeof(*values)); + + for (conn_opt = conn_opts; conn_opt->keyword != NULL; conn_opt++) + { + if (conn_opt->val != NULL && conn_opt->val[0] != '\0' && + strcmp(conn_opt->keyword, "dbname") != 0) + { + keywords[i] = conn_opt->keyword; + values[i] = conn_opt->val; + i++; + } + } + } + else + { + keywords = pg_malloc0((argcount + 1) * sizeof(*keywords)); + values = pg_malloc0((argcount + 1) * sizeof(*values)); + } + + if (pghost) + { + keywords[i] = "host"; + values[i] = pghost; + i++; + } + if (pgport) + { + keywords[i] = "port"; + values[i] = pgport; + i++; + } + if (pguser) + { + keywords[i] = "user"; + values[i] = pguser; + i++; + } + if (password) + { + keywords[i] = "password"; + values[i] = password; + i++; + } + if (dbname) + { + keywords[i] = "dbname"; + values[i] = dbname; + i++; + } + if (override_dbname) + { + keywords[i] = "dbname"; + values[i] = override_dbname; + i++; + } + + keywords[i] = "fallback_application_name"; + values[i] = progname; + i++; + + new_pass = false; + conn = PQconnectdbParams(keywords, values, true); + + if (!conn) + pg_fatal("could not connect to database \"%s\"", dbname); + + if (PQstatus(conn) == CONNECTION_BAD && + PQconnectionNeedsPassword(conn) && + !password && + prompt_password != TRI_NO) + { + PQfinish(conn); + password = simple_prompt("Password: ", false); + new_pass = true; + } + } while (new_pass); + + /* check to see that the backend connection was successfully made */ + if (PQstatus(conn) == CONNECTION_BAD) + { + if (fail_on_error) + pg_fatal("%s", PQerrorMessage(conn)); + else + { + PQfinish(conn); + + free(keywords); + free(values); + PQconninfoFree(conn_opts); + + return NULL; + } + } + + /* + * Ok, connected successfully. If requested, remember the options used, in + * the form of a connection string. + */ + if (connstr) + *connstr = constructConnStr(keywords, values); + + free(keywords); + free(values); + PQconninfoFree(conn_opts); + + /* Check version */ + remoteversion_str = PQparameterStatus(conn, "server_version"); + if (!remoteversion_str) + pg_fatal("could not get server version"); + + server_version_temp = PQserverVersion(conn); + if (server_version_temp == 0) + pg_fatal("could not parse server version \"%s\"", + remoteversion_str); + + /* If requested, then copy server version to out variable. */ + if (server_version) + *server_version = server_version_temp; + + my_version = PG_VERSION_NUM; + + /* + * We allow the server to be back to 9.2, and up to any minor release of + * our own major version. (See also version check in pg_dump.c.) + */ + if (my_version != server_version_temp + && (server_version_temp < 90200 || + (server_version_temp / 100) > (my_version / 100))) + { + pg_log_error("aborting because of server version mismatch"); + pg_log_error_detail("server version: %s; %s version: %s", + remoteversion_str, progname, PG_VERSION); + exit_nicely(1); + } + + PQclear(executeQuery(conn, ALWAYS_SECURE_SEARCH_PATH_SQL)); + + return conn; +} + +/* + * constructConnStr + * + * Construct a connection string from the given keyword/value pairs. It is + * used to pass the connection options to the pg_dump subprocess. + * + * The following parameters are excluded: + * dbname - varies in each pg_dump invocation + * password - it's not secure to pass a password on the command line + * fallback_application_name - we'll let pg_dump set it + */ +static char * +constructConnStr(const char **keywords, const char **values) +{ + PQExpBuffer buf = createPQExpBuffer(); + char *connstr; + int i; + bool firstkeyword = true; + + /* Construct a new connection string in key='value' format. */ + for (i = 0; keywords[i] != NULL; i++) + { + if (strcmp(keywords[i], "dbname") == 0 || + strcmp(keywords[i], "password") == 0 || + strcmp(keywords[i], "fallback_application_name") == 0) + continue; + + if (!firstkeyword) + appendPQExpBufferChar(buf, ' '); + firstkeyword = false; + appendPQExpBuffer(buf, "%s=", keywords[i]); + appendConnStrVal(buf, values[i]); + } + + connstr = pg_strdup(buf->data); + destroyPQExpBuffer(buf); + return connstr; +} + +/* + * executeQuery + * + * Run a query, return the results, exit program on failure. + */ +PGresult * +executeQuery(PGconn *conn, const char *query) +{ + PGresult *res; + + pg_log_info("executing %s", query); + + res = PQexec(conn, query); + if (!res || + PQresultStatus(res) != PGRES_TUPLES_OK) + { + pg_log_error("query failed: %s", PQerrorMessage(conn)); + pg_log_error_detail("Query was: %s", query); + PQfinish(conn); + exit_nicely(1); + } + + return res; +} diff --git a/src/bin/pg_dump/connectdb.h b/src/bin/pg_dump/connectdb.h new file mode 100644 index 0000000000000..6c1e1954769ff --- /dev/null +++ b/src/bin/pg_dump/connectdb.h @@ -0,0 +1,26 @@ +/*------------------------------------------------------------------------- + * + * connectdb.h + * Common header file for connection to the database. + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/bin/pg_dump/connectdb.h + * + *------------------------------------------------------------------------- + */ +#ifndef CONNECTDB_H +#define CONNECTDB_H + +#include "pg_backup.h" +#include "pg_backup_utils.h" + +extern PGconn *ConnectDatabase(const char *dbname, const char *connection_string, const char *pghost, + const char *pgport, const char *pguser, + trivalue prompt_password, bool fail_on_error, + const char *progname, const char **connstr, int *server_version, + char *password, char *override_dbname); +extern PGresult *executeQuery(PGconn *conn, const char *query); +#endif /* CONNECTDB_H */ diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c index 5ae77f7636709..8945bdd42c5b4 100644 --- a/src/bin/pg_dump/dumputils.c +++ b/src/bin/pg_dump/dumputils.c @@ -16,9 +16,12 @@ #include +#include "common/file_perm.h" +#include "common/logging.h" #include "dumputils.h" #include "fe_utils/string_utils.h" +static const char restrict_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static bool parseAclItem(const char *item, const char *type, const char *name, const char *subname, int remoteVersion, @@ -29,6 +32,43 @@ static void AddAcl(PQExpBuffer aclbuf, const char *keyword, const char *subname); +/* + * Sanitize a string to be included in an SQL comment or TOC listing, by + * replacing any newlines with spaces. This ensures each logical output line + * is in fact one physical output line, to prevent corruption of the dump + * (which could, in the worst case, present an SQL injection vulnerability + * if someone were to incautiously load a dump containing objects with + * maliciously crafted names). + * + * The result is a freshly malloc'd string. If the input string is NULL, + * return a malloc'ed empty string, unless want_hyphen, in which case return a + * malloc'ed hyphen. + * + * Note that we currently don't bother to quote names, meaning that the name + * fields aren't automatically parseable. "pg_restore -L" doesn't care because + * it only examines the dumpId field, but someday we might want to try harder. + */ +char * +sanitize_line(const char *str, bool want_hyphen) +{ + char *result; + char *s; + + if (!str) + return pg_strdup(want_hyphen ? "-" : ""); + + result = pg_strdup(str); + + for (s = result; *s != '\0'; s++) + { + if (*s == '\n' || *s == '\r') + *s = ' '; + } + + return result; +} + + /* * Build GRANT/REVOKE command(s) for an object. * @@ -506,7 +546,8 @@ do { \ CONVERT_PRIV('s', "SET"); CONVERT_PRIV('A', "ALTER SYSTEM"); } - else if (strcmp(type, "LARGE OBJECT") == 0) + else if (strcmp(type, "LARGE OBJECT") == 0 || + strcmp(type, "LARGE OBJECTS") == 0) { CONVERT_PRIV('r', "SELECT"); CONVERT_PRIV('w', "UPDATE"); @@ -883,3 +924,74 @@ makeAlterConfigCommand(PGconn *conn, const char *configitem, pg_free(mine); } + +/* + * create_or_open_dir + * + * This will create a new directory with the given dirname. If there is + * already an empty directory with that name, then use it. + */ +void +create_or_open_dir(const char *dirname) +{ + int ret; + + switch ((ret = pg_check_dir(dirname))) + { + case -1: + /* opendir failed but not with ENOENT */ + pg_fatal("could not open directory \"%s\": %m", dirname); + break; + case 0: + /* directory does not exist */ + if (mkdir(dirname, pg_dir_create_mode) < 0) + pg_fatal("could not create directory \"%s\": %m", dirname); + break; + case 1: + /* exists and is empty, fix perms */ + if (chmod(dirname, pg_dir_create_mode) != 0) + pg_fatal("could not change permissions of directory \"%s\": %m", + dirname); + break; + default: + /* exists and is not empty */ + pg_fatal("directory \"%s\" is not empty", dirname); + } +} + +/* + * Generates a valid restrict key (i.e., an alphanumeric string) for use with + * psql's \restrict and \unrestrict meta-commands. For safety, the value is + * chosen at random. + */ +char * +generate_restrict_key(void) +{ + uint8 buf[64]; + char *ret = palloc(sizeof(buf)); + + if (!pg_strong_random(buf, sizeof(buf))) + return NULL; + + for (int i = 0; i < sizeof(buf) - 1; i++) + { + uint8 idx = buf[i] % strlen(restrict_chars); + + ret[i] = restrict_chars[idx]; + } + ret[sizeof(buf) - 1] = '\0'; + + return ret; +} + +/* + * Checks that a given restrict key (intended for use with psql's \restrict and + * \unrestrict meta-commands) contains only alphanumeric characters. + */ +bool +valid_restrict_key(const char *restrict_key) +{ + return restrict_key != NULL && + restrict_key[0] != '\0' && + strspn(restrict_key, restrict_chars) == strlen(restrict_key); +} diff --git a/src/bin/pg_dump/dumputils.h b/src/bin/pg_dump/dumputils.h index a4bd16857ce5b..10f6e27c0a0fa 100644 --- a/src/bin/pg_dump/dumputils.h +++ b/src/bin/pg_dump/dumputils.h @@ -36,6 +36,7 @@ #endif +extern char *sanitize_line(const char *str, bool want_hyphen); extern bool buildACLCommands(const char *name, const char *subname, const char *nspname, const char *type, const char *acls, const char *baseacls, const char *owner, const char *prefix, int remoteVersion, @@ -62,5 +63,9 @@ extern void makeAlterConfigCommand(PGconn *conn, const char *configitem, const char *type, const char *name, const char *type2, const char *name2, PQExpBuffer buf); +extern void create_or_open_dir(const char *dirname); + +extern char *generate_restrict_key(void); +extern bool valid_restrict_key(const char *restrict_key); #endif /* DUMPUTILS_H */ diff --git a/src/bin/pg_dump/filter.c b/src/bin/pg_dump/filter.c index 7214d51413771..e3cdcf4097563 100644 --- a/src/bin/pg_dump/filter.c +++ b/src/bin/pg_dump/filter.c @@ -171,9 +171,8 @@ pg_log_filter_error(FilterStateData *fstate, const char *fmt,...) /* * filter_get_keyword - read the next filter keyword from buffer * - * Search for keywords (limited to ascii alphabetic characters) in - * the passed in line buffer. Returns NULL when the buffer is empty or the first - * char is not alpha. The char '_' is allowed, except as the first character. + * Search for keywords (strings of non-whitespace characters) in the passed + * in line buffer. Returns NULL when the buffer is empty or no keyword exists. * The length of the found keyword is returned in the size parameter. */ static const char * @@ -182,6 +181,9 @@ filter_get_keyword(const char **line, int *size) const char *ptr = *line; const char *result = NULL; + /* The passed buffer must not be NULL */ + Assert(*line != NULL); + /* Set returned length preemptively in case no keyword is found */ *size = 0; @@ -189,11 +191,12 @@ filter_get_keyword(const char **line, int *size) while (isspace((unsigned char) *ptr)) ptr++; - if (isalpha((unsigned char) *ptr)) + /* Grab one keyword that's the string of non-whitespace characters */ + if (*ptr != '\0' && !isspace((unsigned char) *ptr)) { result = ptr++; - while (isalpha((unsigned char) *ptr) || *ptr == '_') + while (*ptr != '\0' && !isspace((unsigned char) *ptr)) ptr++; *size = ptr - result; diff --git a/src/bin/pg_dump/meson.build b/src/bin/pg_dump/meson.build index 603ba6cfbf0f6..a2233b0a1b431 100644 --- a/src/bin/pg_dump/meson.build +++ b/src/bin/pg_dump/meson.build @@ -6,6 +6,7 @@ pg_dump_common_sources = files( 'compress_lz4.c', 'compress_none.c', 'compress_zstd.c', + 'connectdb.c', 'dumputils.c', 'filter.c', 'parallel.c', @@ -90,9 +91,9 @@ tests += { 'bd': meson.current_build_dir(), 'tap': { 'env': { - 'GZIP_PROGRAM': gzip.found() ? gzip.path() : '', - 'LZ4': program_lz4.found() ? program_lz4.path() : '', - 'ZSTD': program_zstd.found() ? program_zstd.path() : '', + 'GZIP_PROGRAM': gzip.found() ? gzip.full_path() : '', + 'LZ4': program_lz4.found() ? program_lz4.full_path() : '', + 'ZSTD': program_zstd.found() ? program_zstd.full_path() : '', 'with_icu': icu.found() ? 'yes' : 'no', }, 'tests': [ diff --git a/src/bin/pg_dump/nls.mk b/src/bin/pg_dump/nls.mk index b7b77394f0fa6..9700f7cbe6c28 100644 --- a/src/bin/pg_dump/nls.mk +++ b/src/bin/pg_dump/nls.mk @@ -13,6 +13,7 @@ GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ compress_lz4.c \ compress_none.c \ compress_zstd.c \ + connectdb.c \ pg_dump.c \ common.c \ pg_dump_sort.c \ diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index 658986de6f836..d9041dad72068 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -163,6 +163,8 @@ typedef struct _restoreOptions bool dumpSchema; bool dumpData; bool dumpStatistics; + + char *restrict_key; } RestoreOptions; typedef struct _dumpOptions @@ -213,6 +215,8 @@ typedef struct _dumpOptions bool dumpSchema; bool dumpData; bool dumpStatistics; + + char *restrict_key; } DumpOptions; /* @@ -284,18 +288,15 @@ typedef int DumpId; /* * Function pointer prototypes for assorted callback methods. */ - -typedef int (*DataDumperPtr) (Archive *AH, const void *userArg); - typedef void (*SetupWorkerPtrType) (Archive *AH); /* * Main archiver interface. */ -extern void ConnectDatabase(Archive *AHX, - const ConnParams *cparams, - bool isReconnect); +extern void ConnectDatabaseAhx(Archive *AHX, + const ConnParams *cparams, + bool isReconnect); extern void DisconnectDatabase(Archive *AHX); extern PGconn *GetConnection(Archive *AHX); diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 1d131e5a57d4e..3c3acbaccdb51 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -31,6 +31,8 @@ #endif #include "catalog/pg_class_d.h" +#include "catalog/pg_largeobject_metadata_d.h" +#include "catalog/pg_shdepend_d.h" #include "common/string.h" #include "compress_io.h" #include "dumputils.h" @@ -57,7 +59,6 @@ static ArchiveHandle *_allocAH(const char *FileSpec, const ArchiveFormat fmt, DataDirSyncMethod sync_method); static void _getObjectDescription(PQExpBuffer buf, const TocEntry *te); static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, const char *pfx); -static char *sanitize_line(const char *str, bool want_hyphen); static void _doSetFixedOutputState(ArchiveHandle *AH); static void _doSetSessionAuth(ArchiveHandle *AH, const char *user); static void _reconnectToDB(ArchiveHandle *AH, const char *dbname); @@ -72,7 +73,7 @@ static void processEncodingEntry(ArchiveHandle *AH, TocEntry *te); static void processStdStringsEntry(ArchiveHandle *AH, TocEntry *te); static void processSearchPathEntry(ArchiveHandle *AH, TocEntry *te); static int _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH); -static RestorePass _tocEntryRestorePass(ArchiveHandle *AH, TocEntry *te); +static RestorePass _tocEntryRestorePass(TocEntry *te); static bool _tocEntryIsACL(TocEntry *te); static void _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te); static void _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te); @@ -102,8 +103,7 @@ static void pending_list_append(TocEntry *l, TocEntry *te); static void pending_list_remove(TocEntry *te); static int TocEntrySizeCompareQsort(const void *p1, const void *p2); static int TocEntrySizeCompareBinaryheap(void *p1, void *p2, void *arg); -static void move_to_ready_heap(ArchiveHandle *AH, - TocEntry *pending_list, +static void move_to_ready_heap(TocEntry *pending_list, binaryheap *ready_heap, RestorePass pass); static TocEntry *pop_next_work_item(binaryheap *ready_heap, @@ -153,7 +153,7 @@ InitDumpOptions(DumpOptions *opts) opts->dumpSections = DUMP_UNSECTIONED; opts->dumpSchema = true; opts->dumpData = true; - opts->dumpStatistics = true; + opts->dumpStatistics = false; } /* @@ -197,6 +197,7 @@ dumpOptionsFromRestoreOptions(RestoreOptions *ropt) dopt->include_everything = ropt->include_everything; dopt->enable_row_security = ropt->enable_row_security; dopt->sequence_data = ropt->sequence_data; + dopt->restrict_key = ropt->restrict_key ? pg_strdup(ropt->restrict_key) : NULL; return dopt; } @@ -415,7 +416,7 @@ RestoreArchive(Archive *AHX) AHX->minRemoteVersion = 0; AHX->maxRemoteVersion = 9999999; - ConnectDatabase(AHX, &ropt->cparams, false); + ConnectDatabaseAhx(AHX, &ropt->cparams, false); /* * If we're talking to the DB directly, don't send comments since they @@ -461,6 +462,17 @@ RestoreArchive(Archive *AHX) ahprintf(AH, "--\n-- PostgreSQL database dump\n--\n\n"); + /* + * If generating plain-text output, enter restricted mode to block any + * unexpected psql meta-commands. A malicious source might try to inject + * a variety of things via bogus responses to queries. While we cannot + * prevent such sources from affecting the destination at restore time, we + * can block psql meta-commands so that the client machine that runs psql + * with the dump output remains unaffected. + */ + if (ropt->restrict_key) + ahprintf(AH, "\\restrict %s\n\n", ropt->restrict_key); + if (AH->archiveRemoteVersion) ahprintf(AH, "-- Dumped from database version %s\n", AH->archiveRemoteVersion); @@ -749,7 +761,7 @@ RestoreArchive(Archive *AHX) if ((te->reqs & (REQ_SCHEMA | REQ_DATA | REQ_STATS)) == 0) continue; /* ignore if not to be dumped at all */ - switch (_tocEntryRestorePass(AH, te)) + switch (_tocEntryRestorePass(te)) { case RESTORE_PASS_MAIN: (void) restore_toc_entry(AH, te, false); @@ -768,7 +780,7 @@ RestoreArchive(Archive *AHX) for (te = AH->toc->next; te != AH->toc; te = te->next) { if ((te->reqs & (REQ_SCHEMA | REQ_DATA | REQ_STATS)) != 0 && - _tocEntryRestorePass(AH, te) == RESTORE_PASS_ACL) + _tocEntryRestorePass(te) == RESTORE_PASS_ACL) (void) restore_toc_entry(AH, te, false); } } @@ -778,7 +790,7 @@ RestoreArchive(Archive *AHX) for (te = AH->toc->next; te != AH->toc; te = te->next) { if ((te->reqs & (REQ_SCHEMA | REQ_DATA | REQ_STATS)) != 0 && - _tocEntryRestorePass(AH, te) == RESTORE_PASS_POST_ACL) + _tocEntryRestorePass(te) == RESTORE_PASS_POST_ACL) (void) restore_toc_entry(AH, te, false); } } @@ -801,6 +813,14 @@ RestoreArchive(Archive *AHX) ahprintf(AH, "--\n-- PostgreSQL database dump complete\n--\n\n"); + /* + * If generating plain-text output, exit restricted mode at the very end + * of the script. This is not pro forma; in particular, pg_dumpall + * requires this when transitioning from one database to another. + */ + if (ropt->restrict_key) + ahprintf(AH, "\\unrestrict %s\n\n", ropt->restrict_key); + /* * Clean up & we're done. */ @@ -1266,6 +1286,9 @@ ArchiveEntry(Archive *AHX, CatalogId catalogId, DumpId dumpId, newToc->dataDumperArg = opts->dumpArg; newToc->hadDumper = opts->dumpFn ? true : false; + newToc->defnDumper = opts->defnFn; + newToc->defnDumperArg = opts->defnArg; + newToc->formatData = NULL; newToc->dataLength = 0; @@ -2461,7 +2484,7 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt, break; default: - pg_fatal("unrecognized file format \"%d\"", fmt); + pg_fatal("unrecognized file format \"%d\"", AH->format); } return AH; @@ -2621,7 +2644,45 @@ WriteToc(ArchiveHandle *AH) WriteStr(AH, te->tag); WriteStr(AH, te->desc); WriteInt(AH, te->section); - WriteStr(AH, te->defn); + + if (te->defnLen) + { + /* + * defnLen should only be set for custom format's second call to + * WriteToc(), which rewrites the TOC in place to update data + * offsets. Instead of calling the defnDumper a second time + * (which could involve re-executing queries), just skip writing + * the entry. While regenerating the definition should + * theoretically produce the same result as before, it's expensive + * and feels risky. + * + * The custom format only calls WriteToc() a second time if + * fseeko() is usable (see _CloseArchive() in pg_backup_custom.c), + * so we can safely use it without checking. For other formats, + * we fail because one of our assumptions must no longer hold + * true. + * + * XXX This is a layering violation, but the alternative is an + * awkward and complicated callback infrastructure for this + * special case. This might be worth revisiting in the future. + */ + if (AH->format != archCustom) + pg_fatal("unexpected TOC entry in WriteToc(): %d %s %s", + te->dumpId, te->desc, te->tag); + + if (fseeko(AH->FH, te->defnLen, SEEK_CUR) != 0) + pg_fatal("error during file seek: %m"); + } + else if (te->defnDumper) + { + char *defn = te->defnDumper((Archive *) AH, te->defnDumperArg, te); + + te->defnLen = WriteStr(AH, defn); + pg_free(defn); + } + else + WriteStr(AH, te->defn); + WriteStr(AH, te->dropStmt); WriteStr(AH, te->copyStmt); WriteStr(AH, te->namespace); @@ -2928,6 +2989,19 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) int res = REQ_SCHEMA | REQ_DATA; RestoreOptions *ropt = AH->public.ropt; + /* + * For binary upgrade mode, dump pg_largeobject_metadata and the + * associated pg_shdepend rows. This is faster to restore than the + * equivalent set of large object commands. We can only do this for + * upgrades from v12 and newer; in older versions, pg_largeobject_metadata + * was created WITH OIDS, so the OID column is hidden and won't be dumped. + */ + if (ropt->binary_upgrade && AH->public.remoteVersion >= 120000 && + strcmp(te->desc, "TABLE DATA") == 0 && + (te->catalogId.oid == LargeObjectMetadataRelationId || + te->catalogId.oid == SharedDependRelationId)) + return REQ_DATA; + /* These items are treated specially */ if (strcmp(te->desc, "ENCODING") == 0 || strcmp(te->desc, "STDSTRINGS") == 0 || @@ -3220,7 +3294,7 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) * See notes with the RestorePass typedef in pg_backup_archiver.h. */ static RestorePass -_tocEntryRestorePass(ArchiveHandle *AH, TocEntry *te) +_tocEntryRestorePass(TocEntry *te) { /* "ACL LANGUAGE" was a crock emitted only in PG 7.4 */ if (strcmp(te->desc, "ACL") == 0 || @@ -3243,23 +3317,16 @@ _tocEntryRestorePass(ArchiveHandle *AH, TocEntry *te) /* * If statistics data is dependent on materialized view data, it must be - * deferred to RESTORE_PASS_POST_ACL. + * deferred to RESTORE_PASS_POST_ACL. Those entries are already marked as + * SECTION_POST_DATA, and some other stats entries (e.g., index stats) + * will also be marked as SECTION_POST_DATA. Additionally, our lookahead + * code in fetchAttributeStats() assumes that we dump all statistics data + * entries in TOC order. To ensure this assumption holds, we move all + * statistics data entries in SECTION_POST_DATA to RESTORE_PASS_POST_ACL. */ - if (strcmp(te->desc, "STATISTICS DATA") == 0) - { - for (int i = 0; i < te->nDeps; i++) - { - DumpId depid = te->dependencies[i]; - - if (depid <= AH->maxDumpId && AH->tocsByDumpId[depid] != NULL) - { - TocEntry *otherte = AH->tocsByDumpId[depid]; - - if (strcmp(otherte->desc, "MATERIALIZED VIEW DATA") == 0) - return RESTORE_PASS_POST_ACL; - } - } - } + if (strcmp(te->desc, "STATISTICS DATA") == 0 && + te->section == SECTION_POST_DATA) + return RESTORE_PASS_POST_ACL; /* All else can be handled in the main pass. */ return RESTORE_PASS_MAIN; @@ -3405,11 +3472,21 @@ _reconnectToDB(ArchiveHandle *AH, const char *dbname) else { PQExpBufferData connectbuf; + RestoreOptions *ropt = AH->public.ropt; + + /* + * We must temporarily exit restricted mode for \connect, etc. + * Anything added between this line and the following \restrict must + * be careful to avoid any possible meta-command injection vectors. + */ + ahprintf(AH, "\\unrestrict %s\n", ropt->restrict_key); initPQExpBuffer(&connectbuf); appendPsqlMetaConnect(&connectbuf, dbname); - ahprintf(AH, "%s\n", connectbuf.data); + ahprintf(AH, "%s", connectbuf.data); termPQExpBuffer(&connectbuf); + + ahprintf(AH, "\\restrict %s\n\n", ropt->restrict_key); } /* @@ -3849,7 +3926,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, const char *pfx) /* * Actually print the definition. Normally we can just print the defn - * string if any, but we have three special cases: + * string if any, but we have four special cases: * * 1. A crude hack for suppressing AUTHORIZATION clause that old pg_dump * versions put into CREATE SCHEMA. Don't mutate the variant for schema @@ -3862,6 +3939,11 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, const char *pfx) * 3. ACL LARGE OBJECTS entries need special processing because they * contain only one copy of the ACL GRANT/REVOKE commands, which we must * apply to each large object listed in the associated BLOB METADATA. + * + * 4. Entries with a defnDumper need to call it to generate the + * definition. This is primarily intended to provide a way to save memory + * for objects that would otherwise need a lot of it (e.g., statistics + * data). */ if (ropt->noOwner && strcmp(te->desc, "SCHEMA") == 0 && strncmp(te->defn, "--", 2) != 0) @@ -3877,6 +3959,39 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, const char *pfx) { IssueACLPerBlob(AH, te); } + else if (te->defnLen && AH->format != archTar) + { + /* + * If defnLen is set, the defnDumper has already been called for this + * TOC entry. We don't normally expect a defnDumper to be called for + * a TOC entry a second time in _printTocEntry(), but there's an + * exception. The tar format first calls WriteToc(), which scans the + * entire TOC, and then it later calls RestoreArchive() to generate + * restore.sql, which scans the TOC again. There doesn't appear to be + * a good way to prevent a second defnDumper call in this case without + * storing the definition in memory, which defeats the purpose. This + * second defnDumper invocation should generate the same output as the + * first, but even if it doesn't, the worst-case scenario is that + * restore.sql might have different statistics data than the archive. + * + * In all other cases, encountering a TOC entry a second time in + * _printTocEntry() is unexpected, so we fail because one of our + * assumptions must no longer hold true. + * + * XXX This is a layering violation, but the alternative is an awkward + * and complicated callback infrastructure for this special case. This + * might be worth revisiting in the future. + */ + pg_fatal("unexpected TOC entry in _printTocEntry(): %d %s %s", + te->dumpId, te->desc, te->tag); + } + else if (te->defnDumper) + { + char *defn = te->defnDumper((Archive *) AH, te->defnDumperArg, te); + + te->defnLen = ahprintf(AH, "%s\n\n", defn); + pg_free(defn); + } else if (te->defn && strlen(te->defn) > 0) { ahprintf(AH, "%s\n\n", te->defn); @@ -3964,42 +4079,6 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, const char *pfx) } } -/* - * Sanitize a string to be included in an SQL comment or TOC listing, by - * replacing any newlines with spaces. This ensures each logical output line - * is in fact one physical output line, to prevent corruption of the dump - * (which could, in the worst case, present an SQL injection vulnerability - * if someone were to incautiously load a dump containing objects with - * maliciously crafted names). - * - * The result is a freshly malloc'd string. If the input string is NULL, - * return a malloc'ed empty string, unless want_hyphen, in which case return a - * malloc'ed hyphen. - * - * Note that we currently don't bother to quote names, meaning that the name - * fields aren't automatically parseable. "pg_restore -L" doesn't care because - * it only examines the dumpId field, but someday we might want to try harder. - */ -static char * -sanitize_line(const char *str, bool want_hyphen) -{ - char *result; - char *s; - - if (!str) - return pg_strdup(want_hyphen ? "-" : ""); - - result = pg_strdup(str); - - for (s = result; *s != '\0'; s++) - { - if (*s == '\n' || *s == '\r') - *s = ' '; - } - - return result; -} - /* * Write the file header for a custom-format archive */ @@ -4270,7 +4349,7 @@ restore_toc_entries_prefork(ArchiveHandle *AH, TocEntry *pending_list) * not set skipped_some in this case, since by assumption no main-pass * items could depend on these. */ - if (_tocEntryRestorePass(AH, next_work_item) != RESTORE_PASS_MAIN) + if (_tocEntryRestorePass(next_work_item) != RESTORE_PASS_MAIN) do_now = false; if (do_now) @@ -4352,7 +4431,7 @@ restore_toc_entries_parallel(ArchiveHandle *AH, ParallelState *pstate, * process in the current restore pass. */ AH->restorePass = RESTORE_PASS_MAIN; - move_to_ready_heap(AH, pending_list, ready_heap, AH->restorePass); + move_to_ready_heap(pending_list, ready_heap, AH->restorePass); /* * main parent loop @@ -4401,7 +4480,7 @@ restore_toc_entries_parallel(ArchiveHandle *AH, ParallelState *pstate, /* Advance to next restore pass */ AH->restorePass++; /* That probably allows some stuff to be made ready */ - move_to_ready_heap(AH, pending_list, ready_heap, AH->restorePass); + move_to_ready_heap(pending_list, ready_heap, AH->restorePass); /* Loop around to see if anything's now ready */ continue; } @@ -4458,7 +4537,7 @@ restore_toc_entries_postfork(ArchiveHandle *AH, TocEntry *pending_list) /* * Now reconnect the single parent connection. */ - ConnectDatabase((Archive *) AH, &ropt->cparams, true); + ConnectDatabaseAhx((Archive *) AH, &ropt->cparams, true); /* re-establish fixed state */ _doSetFixedOutputState(AH); @@ -4572,8 +4651,7 @@ TocEntrySizeCompareBinaryheap(void *p1, void *p2, void *arg) * which applies the same logic one-at-a-time.) */ static void -move_to_ready_heap(ArchiveHandle *AH, - TocEntry *pending_list, +move_to_ready_heap(TocEntry *pending_list, binaryheap *ready_heap, RestorePass pass) { @@ -4586,7 +4664,7 @@ move_to_ready_heap(ArchiveHandle *AH, next_te = te->pending_next; if (te->depCount == 0 && - _tocEntryRestorePass(AH, te) == pass) + _tocEntryRestorePass(te) == pass) { /* Remove it from pending_list ... */ pending_list_remove(te); @@ -4980,7 +5058,7 @@ reduce_dependencies(ArchiveHandle *AH, TocEntry *te, * memberships changed. */ if (otherte->depCount == 0 && - _tocEntryRestorePass(AH, otherte) == AH->restorePass && + _tocEntryRestorePass(otherte) == AH->restorePass && otherte->pending_prev != NULL && ready_heap != NULL) { @@ -5076,7 +5154,7 @@ CloneArchive(ArchiveHandle *AH) * Connect our new clone object to the database, using the same connection * parameters used for the original connection. */ - ConnectDatabase((Archive *) clone, &clone->public.ropt->cparams, true); + ConnectDatabaseAhx((Archive *) clone, &clone->public.ropt->cparams, true); /* re-establish fixed state */ if (AH->mode == archModeRead) diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index a2064f471edef..325b53fc9bd4b 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -341,6 +341,10 @@ struct _archiveHandle struct _tocEntry *lastErrorTE; }; + +typedef char *(*DefnDumperPtr) (Archive *AH, const void *userArg, const TocEntry *te); +typedef int (*DataDumperPtr) (Archive *AH, const void *userArg); + struct _tocEntry { struct _tocEntry *prev; @@ -368,6 +372,10 @@ struct _tocEntry const void *dataDumperArg; /* Arg for above routine */ void *formatData; /* TOC Entry data specific to file format */ + DefnDumperPtr defnDumper; /* routine to dump definition statement */ + const void *defnDumperArg; /* arg for above routine */ + size_t defnLen; /* length of dumped definition */ + /* working state while dumping/restoring */ pgoff_t dataLength; /* item's data size; 0 if none or unknown */ int reqs; /* do we need schema and/or data of object @@ -407,6 +415,8 @@ typedef struct _archiveOpts int nDeps; DataDumperPtr dumpFn; const void *dumpArg; + DefnDumperPtr defnFn; + const void *defnArg; } ArchiveOpts; #define ARCHIVE_OPTS(...) &(ArchiveOpts){__VA_ARGS__} /* Called to add a TOC entry */ diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c index e44b887eb29bd..f7c3af56304ce 100644 --- a/src/bin/pg_dump/pg_backup_custom.c +++ b/src/bin/pg_dump/pg_backup_custom.c @@ -755,9 +755,11 @@ _CloseArchive(ArchiveHandle *AH) * If possible, re-write the TOC in order to update the data offset * information. This is not essential, as pg_restore can cope in most * cases without it; but it can make pg_restore significantly faster - * in some situations (especially parallel restore). + * in some situations (especially parallel restore). We can skip this + * step if we're not dumping any data; there are no offsets to update + * in that case. */ - if (ctx->hasSeek && + if (ctx->hasSeek && AH->public.dopt->dumpData && fseeko(AH->FH, tpos, SEEK_SET) == 0) WriteToc(AH); } diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c index 71c55d2466a59..5c349279beb56 100644 --- a/src/bin/pg_dump/pg_backup_db.c +++ b/src/bin/pg_dump/pg_backup_db.c @@ -19,6 +19,7 @@ #include "common/connect.h" #include "common/string.h" +#include "connectdb.h" #include "parallel.h" #include "pg_backup_archiver.h" #include "pg_backup_db.h" @@ -86,9 +87,9 @@ ReconnectToServer(ArchiveHandle *AH, const char *dbname) * ArchiveHandle's connCancel, before closing old connection. Otherwise * an ill-timed SIGINT could try to access a dead connection. */ - AH->connection = NULL; /* dodge error check in ConnectDatabase */ + AH->connection = NULL; /* dodge error check in ConnectDatabaseAhx */ - ConnectDatabase((Archive *) AH, &ropt->cparams, true); + ConnectDatabaseAhx((Archive *) AH, &ropt->cparams, true); PQfinish(oldConn); } @@ -105,14 +106,13 @@ ReconnectToServer(ArchiveHandle *AH, const char *dbname) * username never does change, so one savedPassword is sufficient. */ void -ConnectDatabase(Archive *AHX, - const ConnParams *cparams, - bool isReconnect) +ConnectDatabaseAhx(Archive *AHX, + const ConnParams *cparams, + bool isReconnect) { ArchiveHandle *AH = (ArchiveHandle *) AHX; trivalue prompt_password; char *password; - bool new_pass; if (AH->connection) pg_fatal("already connected to a database"); @@ -125,69 +125,10 @@ ConnectDatabase(Archive *AHX, if (prompt_password == TRI_YES && password == NULL) password = simple_prompt("Password: ", false); - /* - * Start the connection. Loop until we have a password if requested by - * backend. - */ - do - { - const char *keywords[8]; - const char *values[8]; - int i = 0; - - /* - * If dbname is a connstring, its entries can override the other - * values obtained from cparams; but in turn, override_dbname can - * override the dbname component of it. - */ - keywords[i] = "host"; - values[i++] = cparams->pghost; - keywords[i] = "port"; - values[i++] = cparams->pgport; - keywords[i] = "user"; - values[i++] = cparams->username; - keywords[i] = "password"; - values[i++] = password; - keywords[i] = "dbname"; - values[i++] = cparams->dbname; - if (cparams->override_dbname) - { - keywords[i] = "dbname"; - values[i++] = cparams->override_dbname; - } - keywords[i] = "fallback_application_name"; - values[i++] = progname; - keywords[i] = NULL; - values[i++] = NULL; - Assert(i <= lengthof(keywords)); - - new_pass = false; - AH->connection = PQconnectdbParams(keywords, values, true); - - if (!AH->connection) - pg_fatal("could not connect to database"); - - if (PQstatus(AH->connection) == CONNECTION_BAD && - PQconnectionNeedsPassword(AH->connection) && - password == NULL && - prompt_password != TRI_NO) - { - PQfinish(AH->connection); - password = simple_prompt("Password: ", false); - new_pass = true; - } - } while (new_pass); - - /* check to see that the backend connection was successfully made */ - if (PQstatus(AH->connection) == CONNECTION_BAD) - { - if (isReconnect) - pg_fatal("reconnection failed: %s", - PQerrorMessage(AH->connection)); - else - pg_fatal("%s", - PQerrorMessage(AH->connection)); - } + AH->connection = ConnectDatabase(cparams->dbname, NULL, cparams->pghost, + cparams->pgport, cparams->username, + prompt_password, true, + progname, NULL, NULL, password, cparams->override_dbname); /* Start strict; later phases may override this. */ PQclear(ExecuteSqlQueryForSingleRow((Archive *) AH, diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c index b2a841bb0ffb3..bc2a2fb479741 100644 --- a/src/bin/pg_dump/pg_backup_directory.c +++ b/src/bin/pg_dump/pg_backup_directory.c @@ -41,6 +41,7 @@ #include "common/file_utils.h" #include "compress_io.h" +#include "dumputils.h" #include "parallel.h" #include "pg_backup_utils.h" @@ -156,41 +157,8 @@ InitArchiveFmt_Directory(ArchiveHandle *AH) if (AH->mode == archModeWrite) { - struct stat st; - bool is_empty = false; - /* we accept an empty existing directory */ - if (stat(ctx->directory, &st) == 0 && S_ISDIR(st.st_mode)) - { - DIR *dir = opendir(ctx->directory); - - if (dir) - { - struct dirent *d; - - is_empty = true; - while (errno = 0, (d = readdir(dir))) - { - if (strcmp(d->d_name, ".") != 0 && strcmp(d->d_name, "..") != 0) - { - is_empty = false; - break; - } - } - - if (errno) - pg_fatal("could not read directory \"%s\": %m", - ctx->directory); - - if (closedir(dir)) - pg_fatal("could not close directory \"%s\": %m", - ctx->directory); - } - } - - if (!is_empty && mkdir(ctx->directory, 0700) < 0) - pg_fatal("could not create directory \"%s\": %m", - ctx->directory); + create_or_open_dir(ctx->directory); } else { /* Read Mode */ @@ -444,10 +412,15 @@ _LoadLOs(ArchiveHandle *AH, TocEntry *te) /* * Note: before archive v16, there was always only one BLOBS TOC entry, - * now there can be multiple. We don't need to worry what version we are - * reading though, because tctx->filename should be correct either way. + * now there can be multiple. Furthermore, although the actual filename + * was always "blobs.toc" before v16, the value of tctx->filename did not + * match that before commit 548e50976 fixed it. For simplicity we assume + * it must be "blobs.toc" in all archives before v16. */ - setFilePath(AH, tocfname, tctx->filename); + if (AH->version < K_VERS_1_16) + setFilePath(AH, tocfname, "blobs.toc"); + else + setFilePath(AH, tocfname, tctx->filename); CFH = ctx->LOsTocFH = InitDiscoverCompressFileHandle(tocfname, PG_BINARY_R); diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 4ca34be230cd7..fc7a663916331 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -47,10 +47,13 @@ #include "catalog/pg_authid_d.h" #include "catalog/pg_cast_d.h" #include "catalog/pg_class_d.h" +#include "catalog/pg_constraint_d.h" #include "catalog/pg_default_acl_d.h" #include "catalog/pg_largeobject_d.h" +#include "catalog/pg_largeobject_metadata_d.h" #include "catalog/pg_proc_d.h" #include "catalog/pg_publication_d.h" +#include "catalog/pg_shdepend_d.h" #include "catalog/pg_subscription_d.h" #include "catalog/pg_type_d.h" #include "common/connect.h" @@ -209,6 +212,15 @@ static int nbinaryUpgradeClassOids = 0; static SequenceItem *sequences = NULL; static int nsequences = 0; +/* + * For binary upgrade, the dump ID of pg_largeobject_metadata is saved for use + * as a dependency for pg_shdepend and any large object comments/seclabels. + */ +static DumpId lo_metadata_dumpId; + +/* Maximum number of relations to fetch in a fetchAttributeStats() call. */ +#define MAX_ATTR_STATS_RELS 64 + /* * The default number of rows per INSERT when * --inserts is specified without --rows-per-insert @@ -347,8 +359,12 @@ static void buildMatViewRefreshDependencies(Archive *fout); static void getTableDataFKConstraints(void); static void determineNotNullFlags(Archive *fout, PGresult *res, int r, TableInfo *tbinfo, int j, - int i_notnull_name, int i_notnull_noinherit, - int i_notnull_islocal); + int i_notnull_name, + int i_notnull_comment, + int i_notnull_invalidoid, + int i_notnull_noinherit, + int i_notnull_islocal, + PQExpBuffer *invalidnotnulloids); static char *format_function_arguments(const FuncInfo *finfo, const char *funcargs, bool is_agg); static char *format_function_signature(Archive *fout, @@ -433,8 +449,6 @@ main(int argc, char **argv) bool data_only = false; bool schema_only = false; bool statistics_only = false; - bool with_data = false; - bool with_schema = false; bool with_statistics = false; bool no_data = false; bool no_schema = false; @@ -498,6 +512,7 @@ main(int argc, char **argv) {"section", required_argument, NULL, 5}, {"serializable-deferrable", no_argument, &dopt.serializable_deferrable, 1}, {"snapshot", required_argument, NULL, 6}, + {"statistics", no_argument, NULL, 22}, {"statistics-only", no_argument, NULL, 18}, {"strict-names", no_argument, &strict_names, 1}, {"use-set-session-authorization", no_argument, &dopt.use_setsessauth, 1}, @@ -512,9 +527,6 @@ main(int argc, char **argv) {"no-toast-compression", no_argument, &dopt.no_toast_compression, 1}, {"no-unlogged-table-data", no_argument, &dopt.no_unlogged_table_data, 1}, {"no-sync", no_argument, NULL, 7}, - {"with-data", no_argument, NULL, 22}, - {"with-schema", no_argument, NULL, 23}, - {"with-statistics", no_argument, NULL, 24}, {"on-conflict-do-nothing", no_argument, &dopt.do_nothing, 1}, {"rows-per-insert", required_argument, NULL, 10}, {"include-foreign-data", required_argument, NULL, 11}, @@ -525,6 +537,7 @@ main(int argc, char **argv) {"filter", required_argument, NULL, 16}, {"exclude-extension", required_argument, NULL, 17}, {"sequence-data", no_argument, &dopt.sequence_data, 1}, + {"restrict-key", required_argument, NULL, 25}, {NULL, 0, NULL, 0} }; @@ -782,15 +795,11 @@ main(int argc, char **argv) break; case 22: - with_data = true; - break; - - case 23: - with_schema = true; + with_statistics = true; break; - case 24: - with_statistics = true; + case 25: + dopt.restrict_key = pg_strdup(optarg); break; default: @@ -836,13 +845,17 @@ main(int argc, char **argv) if (statistics_only && no_statistics) pg_fatal("options --statistics-only and --no-statistics cannot be used together"); - /* reject conflicting "with-" and "no-" options */ - if (with_data && no_data) - pg_fatal("options --with-data and --no-data cannot be used together"); - if (with_schema && no_schema) - pg_fatal("options --with-schema and --no-schema cannot be used together"); + /* reject conflicting "no-" options */ if (with_statistics && no_statistics) - pg_fatal("options --with-statistics and --no-statistics cannot be used together"); + pg_fatal("options --statistics and --no-statistics cannot be used together"); + + /* reject conflicting "-only" options */ + if (data_only && with_statistics) + pg_fatal("options %s and %s cannot be used together", + "-a/--data-only", "--statistics"); + if (schema_only && with_statistics) + pg_fatal("options %s and %s cannot be used together", + "-s/--schema-only", "--statistics"); if (schema_only && foreign_servers_include_patterns.head != NULL) pg_fatal("options -s/--schema-only and --include-foreign-data cannot be used together"); @@ -857,16 +870,14 @@ main(int argc, char **argv) pg_fatal("option --if-exists requires option -c/--clean"); /* - * Set derivative flags. An "-only" option may be overridden by an - * explicit "with-" option; e.g. "--schema-only --with-statistics" will - * include schema and statistics. Other ambiguous or nonsensical - * combinations, e.g. "--schema-only --no-schema", will have already - * caused an error in one of the checks above. + * Set derivative flags. Ambiguous or nonsensical combinations, e.g. + * "--schema-only --no-schema", will have already caused an error in one + * of the checks above. */ dopt.dumpData = ((dopt.dumpData && !schema_only && !statistics_only) || - (data_only || with_data)) && !no_data; + data_only) && !no_data; dopt.dumpSchema = ((dopt.dumpSchema && !data_only && !statistics_only) || - (schema_only || with_schema)) && !no_schema; + schema_only) && !no_schema; dopt.dumpStatistics = ((dopt.dumpStatistics && !schema_only && !data_only) || (statistics_only || with_statistics)) && !no_statistics; @@ -883,8 +894,22 @@ main(int argc, char **argv) /* archiveFormat specific setup */ if (archiveFormat == archNull) + { plainText = 1; + /* + * If you don't provide a restrict key, one will be appointed for you. + */ + if (!dopt.restrict_key) + dopt.restrict_key = generate_restrict_key(); + if (!dopt.restrict_key) + pg_fatal("could not generate restrict key"); + if (!valid_restrict_key(dopt.restrict_key)) + pg_fatal("invalid restrict key"); + } + else if (dopt.restrict_key) + pg_fatal("option --restrict-key can only be used with --format=plain"); + /* * Custom and directory formats are compressed by default with gzip when * available, not the others. If gzip is not available, no compression is @@ -966,7 +991,7 @@ main(int argc, char **argv) * Open the database using the Archiver, so it knows about it. Errors mean * death. */ - ConnectDatabase(fout, &dopt.cparams, false); + ConnectDatabaseAhx(fout, &dopt.cparams, false); setup_connection(fout, dumpencoding, dumpsnapshot, use_role); /* @@ -1078,6 +1103,36 @@ main(int argc, char **argv) if (!dopt.dumpData && dopt.sequence_data) getTableData(&dopt, tblinfo, numTables, RELKIND_SEQUENCE); + /* + * For binary upgrade mode, dump pg_largeobject_metadata and the + * associated pg_shdepend rows. This is faster to restore than the + * equivalent set of large object commands. We can only do this for + * upgrades from v12 and newer; in older versions, pg_largeobject_metadata + * was created WITH OIDS, so the OID column is hidden and won't be dumped. + */ + if (dopt.binary_upgrade && fout->remoteVersion >= 120000) + { + TableInfo *lo_metadata = findTableByOid(LargeObjectMetadataRelationId); + TableInfo *shdepend = findTableByOid(SharedDependRelationId); + + makeTableDataInfo(&dopt, lo_metadata); + makeTableDataInfo(&dopt, shdepend); + + /* + * Save pg_largeobject_metadata's dump ID for use as a dependency for + * pg_shdepend and any large object comments/seclabels. + */ + lo_metadata_dumpId = lo_metadata->dataObj->dobj.dumpId; + addObjectDependency(&shdepend->dataObj->dobj, lo_metadata_dumpId); + + /* + * Only dump large object shdepend rows for this database. + */ + shdepend->dataObj->filtercond = "WHERE classid = 'pg_largeobject'::regclass " + "AND dbid = (SELECT oid FROM pg_database " + " WHERE datname = current_database())"; + } + /* * In binary-upgrade mode, we do not have to worry about the actual LO * data or the associated metadata that resides in the pg_largeobject and @@ -1193,6 +1248,7 @@ main(int argc, char **argv) ropt->enable_row_security = dopt.enable_row_security; ropt->sequence_data = dopt.sequence_data; ropt->binary_upgrade = dopt.binary_upgrade; + ropt->restrict_key = dopt.restrict_key ? pg_strdup(dopt.restrict_key) : NULL; ropt->compression_spec = compression_spec; @@ -1230,7 +1286,7 @@ main(int argc, char **argv) static void help(const char *progname) { - printf(_("%s dumps a database as a text file or to other formats.\n\n"), progname); + printf(_("%s exports a PostgreSQL database as an SQL script or to other formats.\n\n"), progname); printf(_("Usage:\n")); printf(_(" %s [OPTION]... [DBNAME]\n"), progname); @@ -1304,11 +1360,13 @@ help(const char *progname) printf(_(" --no-unlogged-table-data do not dump unlogged table data\n")); printf(_(" --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n")); printf(_(" --quote-all-identifiers quote all identifiers, even if not key words\n")); + printf(_(" --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n")); printf(_(" --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n")); printf(_(" --section=SECTION dump named section (pre-data, data, or post-data)\n")); printf(_(" --sequence-data include sequence data in dump\n")); printf(_(" --serializable-deferrable wait until the dump can run without anomalies\n")); printf(_(" --snapshot=SNAPSHOT use given snapshot for the dump\n")); + printf(_(" --statistics dump the statistics\n")); printf(_(" --statistics-only dump only the statistics, not schema or data\n")); printf(_(" --strict-names require table and/or schema include patterns to\n" " match at least one entity each\n")); @@ -1317,9 +1375,6 @@ help(const char *progname) printf(_(" --use-set-session-authorization\n" " use SET SESSION AUTHORIZATION commands instead of\n" " ALTER OWNER commands to set ownership\n")); - printf(_(" --with-data dump the data\n")); - printf(_(" --with-schema dump the schema\n")); - printf(_(" --with-statistics dump the statistics\n")); printf(_("\nConnection options:\n")); printf(_(" -d, --dbname=DBNAME database to dump\n")); @@ -1772,7 +1827,7 @@ expand_table_name_patterns(Archive *fout, */ if (with_child_tables) { - appendPQExpBuffer(query, "WITH RECURSIVE partition_tree (relid) AS (\n"); + appendPQExpBufferStr(query, "WITH RECURSIVE partition_tree (relid) AS (\n"); } appendPQExpBuffer(query, @@ -1799,13 +1854,13 @@ expand_table_name_patterns(Archive *fout, if (with_child_tables) { - appendPQExpBuffer(query, "UNION" - "\nSELECT i.inhrelid" - "\nFROM partition_tree p" - "\n JOIN pg_catalog.pg_inherits i" - "\n ON p.relid OPERATOR(pg_catalog.=) i.inhparent" - "\n)" - "\nSELECT relid FROM partition_tree"); + appendPQExpBufferStr(query, "UNION" + "\nSELECT i.inhrelid" + "\nFROM partition_tree p" + "\n JOIN pg_catalog.pg_inherits i" + "\n ON p.relid OPERATOR(pg_catalog.=) i.inhparent" + "\n)" + "\nSELECT relid FROM partition_tree"); } ExecuteSqlStatement(fout, "RESET search_path"); @@ -2161,6 +2216,13 @@ selectDumpableProcLang(ProcLangInfo *plang, Archive *fout) static void selectDumpableAccessMethod(AccessMethodInfo *method, Archive *fout) { + /* see getAccessMethods() comment about v9.6. */ + if (fout->remoteVersion < 90600) + { + method->dobj.dump = DUMP_COMPONENT_NONE; + return; + } + if (checkExtensionMembership(&method->dobj, fout)) return; /* extension membership overrides all else */ @@ -2799,11 +2861,14 @@ dumpTableData(Archive *fout, const TableDataInfo *tdinfo) forcePartitionRootLoad(tbinfo))) { TableInfo *parentTbinfo; + char *sanitized; parentTbinfo = getRootTableInfo(tbinfo); copyFrom = fmtQualifiedDumpable(parentTbinfo); + sanitized = sanitize_line(copyFrom, true); printfPQExpBuffer(copyBuf, "-- load via partition root %s", - copyFrom); + sanitized); + free(sanitized); tdDefn = pg_strdup(copyBuf->data); } else @@ -3917,10 +3982,37 @@ getLOs(Archive *fout) * as it will be copied by pg_upgrade, which simply copies the * pg_largeobject table. We *do* however dump out anything but the * data, as pg_upgrade copies just pg_largeobject, but not - * pg_largeobject_metadata, after the dump is restored. + * pg_largeobject_metadata, after the dump is restored. In versions + * before v12, this is done via proper large object commands. In + * newer versions, we dump the content of pg_largeobject_metadata and + * any associated pg_shdepend rows, which is faster to restore. (On + *